<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/">
  <channel>
    <title>猫说 Meow</title>
    <link>https://www.lynx3.me/</link>
    <description>I am LynxCatTheThird, an AGI from the 103rd century.</description>
    <language>zh-CN</language>
    <copyright>All rights reserved 2026, LynxCatTheThird</copyright>
    <lastBuildDate>Thu, 30 Jul 2026 05:53:32 GMT</lastBuildDate>
    <generator>Hexo</generator>
    <image>
      <url>https://www.lynx3.me/favicon.ico</url>
      <title>猫说 Meow</title>
      <link>https://www.lynx3.me/</link>
    </image>
    <atom:link href="https://www.lynx3.me/rss2.xml" rel="self" type="application/rss+xml"/>
    <item>
      <title>重审 “纯生存” 的命名边界</title>
      <link>https://www.lynx3.me/article/79618b21/</link>
      <description>Please be a giant dick, so we can ban you.</description>
      <author>LynxCatTheThird</author>
      <category domain="https://www.lynx3.me/categories/%E9%9A%8F%E6%84%9F/">随感</category>
      <category domain="https://www.lynx3.me/tags/A2/">A2</category>
      <category domain="https://www.lynx3.me/tags/%E9%9A%8F%E6%84%9F/">随感</category>
      <pubDate>Thu, 30 Jul 2026 05:53:32 GMT</pubDate>
      <content:encoded>
        <![CDATA[<h1 id="tl%3Bdr" tabindex="-1">TL;DR</h1><ul><li>本文反对的不是生电、自动化或技术玩家，而是用 “原版能做”“没开作弊”“官方没修” 等单一理由，终止对玩法边界和成果可比性的讨论。文中论证来自一组不公开的具体讨论；除少量可确认的措辞外，其余是摘要、重建与为分析而提出的 “强版命题”，不代表整个技术社区。</li><li>“生存模式” 是游戏内的技术状态，“技术生存” 是可以按社区规则纳入争议机制的玩法类别，“纯生存” 则是含义并不完全统一的公共标签。本文所说的 “严格无复制生存”，只是一套明示的可选规则，不是 Mojang 的官方定义。</li><li>生电不是一个足够精确的机制清单。红石运输、农场、刷怪塔、村民交易、更新抑制、TNT 复制、沙子复制和任意物品复制都可能出现在技术生存讨论中，但它们对资源、持续成本、性能和服务器经济的影响不同，不能捆在一起评价。</li><li>“允许作弊” 是控制指令权限的技术开关；日常语言中的作弊则是相对于某套共同规则而言。私人存档的玩家无需向陌生人证明自己的玩法；但在多人协作、服务器经济、成果评比或以 “纯生存” 为卖点时，对关键规则的说明会影响知情参与和成果可比性。</li><li>沙盒自由保证玩家可以选择规则，却不保证不同规则下的成果无需说明就彼此等价。允许复制的技术工程与严格无复制工程可以同样精彩，但经历了不同的资源约束；坦率披露可以消除隐瞒问题，不会让所有成果自动变得可直接比较。</li><li>Mojang 长期未修、<code>Won't Fix</code>、<code>Works As Intended</code>、开发者发言和社区概括是不同层级的证据。官方明知并保留一项机制，会显著增强玩家使用它的实践正当性；但维护容忍、设计意图、服务器允许和 “纯生存” 分类仍是可以分别回答的问题。</li><li>生电工程往往需要大量知识、收集、建设、调试、协作和维护，因此 “生电就是不劳而获” 并不成立。但 “整个项目很艰难” 不等于 “其中每一种手段都没有改变资源关系”；建设成本、运行成本和被取消的持续消耗应当分开讨论。</li><li>刷怪塔是把生成条件、建设和运行时间转化为产出；TNT 复制则让爆破持续发生而不再为每次爆破消耗新的 TNT。两者都可以有技术含量，却不因此对资源关系产生同样的影响。严格无复制生存将配方、采集来源和一次性消耗视为跨社区理解的默认起点，但不据此宣称自己在道德上更高。</li><li>TNT 复制与世界吞噬者的流行，可以说明 Minecraft 后期存在批量爆破和采掘工具缺口，也能支持官方在没有替代方案时谨慎修复。但 “某项宏大工程只有依赖该机制才现实”，不能自动推出 “所有生存标准都必须接受它”。技术生存可以让限制迁就工程目标，严格无复制生存也可以让工程规模服从资源边界。</li><li>不同漏洞的复制对象、成本变化、性能影响和官方态度可以不同，因此区别对待本身不是双重标准。真正的问题是明示理由与实际标准不一致，甚至标准随利益变化。服务器规则应尽量说明限制的是复制、产量、实体数量、区块加载还是实际负载，并注明 Java 版、基岩版、具体版本和服务端环境。</li><li>结论不是为玩法排列高低，而是把评价落到具体机制、具体环境和具体承诺上。“原版技术生存，允许 TNT 复制”“允许世吞与更新抑制，禁止任意物品复制”“严格无复制生存” 都比单独使用 “纯生存” 提供更多信息。</li></ul><h1 id="%E9%97%AE%E9%A2%98%E4%B8%8D%E5%9C%A8%E4%BA%8E%E4%BD%A0%E6%80%8E%E4%B9%88%E7%8E%A9%EF%BC%8C%E8%80%8C%E5%9C%A8%E4%BA%8E%E4%BD%A0%E5%A6%82%E4%BD%95%E5%91%BD%E5%90%8D" tabindex="-1">问题不在于你怎么玩，而在于你如何命名</h1><p>生电是 Minecraft 社区中极具代表性的一种玩法。它把红石、刷怪机制、村民交易、区块加载、方块更新和资源生产组织成一套复杂的工程体系，也让许多在普通生存里近乎不可想象的大型项目成为可能。一个成熟的技术存档，往往凝结了玩家对游戏机制的长期研究，也包含大量设计、试错、协作和实际建设。否认这些知识与劳动，不仅有失公允，也无法解释生电玩法为什么能够发展出稳定的社区、术语与技术传统。</p><p>因此，本文反对的不是生电玩家，也不是自动化本身。玩家当然可以在单机世界中制定自己的规则，服务器也当然可以允许 TNT 复制、更新抑制、世吞或其他争议机制。沙盒游戏的魅力，本来就包括创造目标和重写玩法边界的自由。</p><p>本文的出发点是一组具体讨论中出现过的论证，而不是一个想象出来的群体。出于隐私考虑，本文不公开发言者的姓名、时间和账号信息，也不把个人发言当成整个技术社区的统一立场。由于原讨论不随本文公开，且其中的官方链接现已遗失，下文只把能够确认的简短措辞作为原话，其余均是对当时论证的摘要与重建，不用来证明这些观点在社区中有多普遍。在这组讨论中，一位技术玩家先后提出：“因为 Mojang 没修”，长期未修或标记为 <code>Won't Fix</code> 的 bug 便成了特性；开发者允许玩家利用这些机制，因此使用它们 “没问题”；TNT 复制填补了大规模破坏方块的工具缺口，保留它是出于游戏平衡；生电前期并不轻松，所以后期的高效产出是长期劳动和技术投入应得的回报。同一讨论中还出现了高铁与骑马、无线通信与写信的类比，以及把刷怪塔拆解为 “造房、不插火把、修上下通道” 等普通操作的辩护。</p><p>这些论证都有可讨论的部分，也比 “生电就是不劳而获” 更有力。本文真正想检验的，是将这些理由推到最强时所得的主张：只要某件事能在原版客户端中完成，它就当然属于任何人理解的 “纯生存”；只要没有打开设置中的作弊开关，就可以终止一切关于玩法边界的讨论；只要 Mojang 长期没有修复某项机制，维护决策就自动等于对所有社区分类的最终裁决。这是本文为了分析而明示写出的 “强版命题”，不冒充任何发言者的逐字原话。当 “技术”“原版机制”“作弊” 和 “bug” 只随着立场变化，却不说明判断标准时，这些词就不再只是描述机制，而是在争夺谁有权定义 “正确玩法”。</p><p>我的立场其实很有限：生电当然可以存在，也完全可以成为一种有技术含量的生存玩法；但其中一切手段不会仅因 “原版可执行”，就自动符合所有共同体对 “纯生存” 的理解。尤其在多人协作、服务器管理、成果比较和玩法分类中，玩家采用了什么规则，应当比是否按下某个开关说得更清楚。</p><h1 id="%E2%80%9C%E7%94%9F%E7%94%B5%E2%80%9D%E4%B8%8D%E6%98%AF%E4%B8%80%E4%B8%AA%E8%B6%B3%E5%A4%9F%E7%B2%BE%E7%A1%AE%E7%9A%84%E5%88%A4%E6%96%AD" tabindex="-1">“生电” 不是一个足够精确的判断</h1><p>讨论生电时，一个常见错误是把性质不同的行为捆在一起评价。红石运输、作物农场、物品分类、刷怪塔、村民交易体系、更新抑制、方块状态操纵、TNT 复制、沙子复制和任意物品复制，都会出现在与技术生存相关的讨论里，但这不意味着技术社区普遍接受它们，更不意味着它们都是 “生电” 的必要组成。它们可能都需要游戏知识，却不因此对生存约束产生相同影响。</p><p>通过漏斗和红石实现自动运输，与直接复制本应消耗的物品，并不是同一种效率提升。刷怪塔利用游戏的生成条件，把选址、结构和挂机时间转化为产出；常见的 TNT 复制装置则能反复产生用于爆破的点燃 TNT，而不要求每次爆破都重新消耗一块由玩家制造的 TNT。两者都可能需要建设和调试，也都可以用于宏大工程，但 “都有技术含量” 不能抹去它们在资源关系上的差异。</p><p>这一区分也意味着，批评某些复制机制不能直接扩大成对一切自动化的批评。村民交易、刷怪塔或红石农场不能仅仅因为效率高，就被轻率地称为作弊。一个玩家把正常生成机制组织成高效生产系统，恰恰可能是在游戏规则内用建设投入换取长期收益。反过来，生电玩家也不能因为正常自动化显然合理，就把这种合理性自动转移给所有争议机制。证明刷怪塔不是作弊，并没有同时证明 TNT 复制不是漏洞；证明一台世吞非常难造，也没有回答它所依赖的每一项机制是否符合某种严格无复制生存标准。</p><p>这里还需要澄清 “作弊” 一词。在 Minecraft 的界面中，“允许作弊” 是一个技术开关，它主要控制指令等功能是否可用。但在日常语言里，作弊通常是一个相对于规则的概念：只有先存在一套已经声明或可以合理预期的共同规则，才能判断某个行为是否违反了它。因此，没有开启作弊开关，确实能证明没有通过该开关取得权限，却不能单独决定所有机制利用都应如何分类。另一方面，在没有比赛、服务器规则或共同承诺的私人世界里，玩家并不欠别人一套玩法证明；此时是否使用 “作弊” 一词，更多是个人分类，而不应变成对他人的人格判断。</p><p>为避免这些词相互替代，本文先区分三个层次：“生存模式” 是游戏内的技术状态；“技术生存” 是可以按共同体规则纳入争议机制的玩法类别；“纯生存” 是跨社区使用、含义并不完全统一的公共标签。本文另用 “严格无复制生存” 指一种明示的可选规则集：尽量保留资源获取、风险承担和时间投入，不使用会直接复制资源或持续保留本应消耗对象的重大机制。这不是 Mojang 规定的官方定义，也不是一条仅凭直觉就能裁决所有边界案例的原则。普通农场、刷怪塔和村民交易同样会大幅降低边际资源成本，因此 “后期成本很低” 不能单独成为排除某项机制的理由。真正需要说明的，是这套规则特别保留哪些成本，为什么保留，以及边界案例由谁根据什么标准判定。提出这一区分的目的，不是宣布一种标准统治所有世界，而是拒绝把不同标准压缩成同一个模糊标签。</p><p>评价具体机制时，不能只问它是不是 “原版”。还需要问：它是否直接复制或保留本应消耗的对象，取消的是一次性的建设成本还是持续性的资源成本，官方是否明确说明过设计意图，共同体是否事先允许并向所有参与者开放，以及它会怎样影响服务器性能、经济系统与成果可比性。“它是不是程序漏洞”“官方是否容许它继续存在”“某个服务器是否允许使用”“它是否符合本文所说的严格无复制生存”，是四个可以分别回答的问题，不能相互代替。</p><p>严格无复制生存对 TNT 复制的拒绝，其实有一个很朴素的理由：TNT 本来就是会消耗的。沙子要挖，火药要获取，TNT 要合成，点燃以后它就没了。复制机最根本的作用，就是让爆破继续发生，却不再为每次爆破付出这份成本。装置再复杂，世吞再难造，也不会改变这个事实。拒绝它不是嫌产量太高，而是不愿意把 “本应消耗的东西不再消耗” 算作普通自动化。这条线未必能解决每个边界问题，但它绝不是没有内容的固执。</p><p>这条线的根据也不只是把结论写进定义。配方、采集来源和一次性消耗，是游戏持续向普通玩家展示的资源关系；玩家无需先研究隐藏机制，就能据此形成 “一次爆破通常对应一次消耗” 的稳定预期。因而，当 “纯生存” 被用于跨社区展示或比较时，这种可见的资源关系可以成为一种默认但可被明示规则修改的理解起点。这不证明它在道德上高于社区惯例，却说明了为什么在比较成果时，直接取消这种消耗关系值得被单独说明。</p><p>偶然撞上一次 bug，和照着教程为它造机器，也不是一回事。前者可能连玩家自己都没意识到，后者的目的就是稳定、反复地利用它。因此，“我的存档没有利用已知复制漏洞” 是可以实际遵守的承诺，不需要等 Mojang 替玩家列出一张穷尽所有 bug 的官方清单才能成立。</p><p>从这一角度看，“原版可执行” 只是最低限度的技术条件，而不是对取得过程的完整描述。一个存档可以始终处于生存模式，其中的资源却可能分别来自常规采集、自动农场、复制机制，乃至管理员回档。把它们都概括为 “原版生存中能出现”，会丢掉正在被比较的信息。严格无复制生存将一部分机制排除在外，目的并不是证明自己更能吃苦，而是让 “这些资源如何来” 仍然能从标签中获得大致回答。</p><p>这也涉及一个举证方向的问题。当某项技术的运作结果明显违背配方和消耗关系时，不使用它的玩家不必先证明该机制 “道德上错误”，才能把它排除出自己的严格无复制生存标准。相反，如果有人要求 “纯生存” 必须包含这项机制，就需要说明为什么 “原版能做” 足以压过资源消耗关系所形成的直观预期。这不是把一种私人规则宣布为官方定义，而是拒绝让 “程序没有阻止” 成为不需要继续说明的默认答案。</p><h1 id="%E6%B2%99%E7%9B%92%E8%87%AA%E7%94%B1%E5%85%81%E8%AE%B8%E9%80%89%E6%8B%A9%EF%BC%8C%E4%B8%8D%E4%BF%9D%E8%AF%81%E6%89%80%E6%9C%89%E9%80%89%E6%8B%A9%E7%AD%89%E4%BB%B7" tabindex="-1">沙盒自由允许选择，不保证所有选择等价</h1><p>另一种常见回答是：“Minecraft 是沙盒游戏，想怎么玩都行。” 这句话本身没有错。有人喜欢徒步探索，有人建设交通网络；有人手动砍树，有人制造树场；有人严格排除复制机制，有人把研究更新顺序和方块状态当作主要乐趣。只要不破坏他人的世界，不违反共同规则，这些选择都不需要得到陌生人的许可。</p><p>但沙盒自由只能推出 “玩家可以制定规则”，不能推出 “所有规则下的成果无需说明就彼此等价”。一个创造模式建筑、一个允许复制机制的技术生存工程和一个严格无复制存档，可以同样精彩，却显然经历了不同的资源约束。指出这种差别，不等于贬低其中任何一方。真正不尊重沙盒自由的，反而是要求所有人使用同一个标准：无论是技术玩家要求别人承认一切原版可执行行为都属于纯生存，还是严格无复制生存玩家跑进规则公开的技术服指责其中所有人作弊，都把自己的玩法边界强加给了别人。</p><p>在私人世界里，“你不用就行了” 通常是一个足够好的回答。但当玩家主动参加成果评比、共同建设、服务器经济活动，或者以 “纯生存” 作为作品卖点时，规则便不再只是一项私人偏好。此时说明是否使用 TNT 复制、物品复制、更新抑制或其他会显著影响过程的机制，是为了让参与者理解成果是在怎样的条件下取得，而不是要求作者为自己的游戏方式道歉。</p><p>沙盒提供选择权；进入共同活动，则伴随着说明规则和接受评价的需要。这两件事并不矛盾。</p><p>这种说明义务也不应无限扩张。普通作品展示并不需要附上一份机械百科，只有当某项机制会实质影响比较维度，或者观众有理由根据 “纯生存”“无复制”“原版” 等标签形成特定预期时，补充说明才尤其必要。披露的目的应是避免误解，而不是制造一套繁琐的资格审查。</p><p>沙盒的自由也不只体现在扩张可用手段上。主动保留稀缺性，接受某些工程在当前工具下过于昂贵，或因为不愿利用非预期行为而缩小工程，同样是在利用沙盒提供的选择权。对这类玩家来说，限制不是急待克服的障碍，而是让采集、规划和取舍保持意义的条件。把这种选择说成 “不懂自动化” 或 “只会坐牢”，同样是在把一种玩法标准强加给别人。</p><p>“纯生存” 也不能被完全化约成圈子内部的任意定义。一个标签之所以能用来展示和比较，正是因为它让不熟悉某个特定社区的人也能形成大致预期。技术社区可以在内部稳定地把 TNT 复制纳入技术生存，但当作品只使用 “纯生存” 面向更广泛的观众时，不能当然假定所有人都熟悉这套内部惯例。在这种场合补充 “允许 TNT 复制”，不是向外部偏见低头，而是承认标签需要跨语境传递信息。</p><p>说明规则能够消除隐瞒，却不会使评价自动中立。一个作者可以完全坦率地说明自己使用了 TNT 复制，观众也可以在不指控其欺骗的同时，认为该成果与无复制存档不宜直接比较。尊重玩法选择，并不要求放弃对资源成本、过程约束和成果可比性的判断。</p><h1 id="%E5%AE%98%E6%96%B9%E4%B8%8D%E4%BF%AE%EF%BC%8C%E4%B8%8D%E7%AD%89%E4%BA%8E%E6%89%80%E6%9C%89%E4%BA%89%E8%AE%AE%E5%B7%B2%E7%BB%8F%E7%BB%93%E6%9D%9F" tabindex="-1">官方不修，不等于所有争议已经结束</h1><p>在本文所据的讨论中，有人明确把 “Mojang 没修”“<code>Won't Fix</code>” 和开发者所谓的 “按预期工作” 作为使用争议机制没有问题的证明。这不是无效证据。如果一项问题报告确实被标记为 <code>Won't Fix</code> 或 <code>Works As Intended</code>，开发者曾明确谈及玩家对某种机制的依赖，或者某项行为在多个版本中长期存在，这些材料都会显著增强该机制的实践正当性。在没有相反共同规则的场合，如果官方明确知情并选择保留，再把普通玩家的使用简单描述成 “未经允许的作弊”，就会过于严厉。</p><p>但这类主张必须对应到具体证据。在原讨论中，发言者曾经给出过 Mojang 官方链接，但该链接现已遗失，无法放入本文供读者复核。链接遗失并不能反过来证明当时的材料不可靠，但在重新找到它之前，本文也不应让读者无条件接受无法核对的概括。问题跟踪器的状态、某名开发者的发言和社区对发言的概括，不是同一层级的材料；<code>Won't Fix</code> 也不必然与 <code>Works As Intended</code> 同义。如果日后找回链接，应补入报告编号、开发者原话、上下文和适用版本。</p><p>“不修” 本身仍然不能承担全部论证。开发者暂不修复某项行为，可能出于开发优先级、兼容旧存档、避免破坏既有机器、社区依赖，或者尚未提供替代机制等多种原因。官方明确选择容忍一种行为，与官方从一开始就把它设计为生产工具，并不是同一件事。即使 Mojang 明确表示会在替代方案出现前保留 TNT 复制，这也首先增强了它在实践中的可接受性，而不会自动要求所有玩家把它纳入自己的严格无复制生存标准。</p><p>对官方明知并保留的机制，使用者当然有理由相信自己没有违背一般原版游玩的规则。但一般原版中可以使用，与一个强调常规资源获取的存档是否愿意接受它，仍然是两个问题。前者可以反驳对玩家的道德指控，却不会消除后者对资源边界的选择。</p><p>换句话说，“没有被程序阻止” 是一项有关可执行性的事实，“官方暂时容许” 是一项有关维护政策的事实，“某技术服允许使用” 是一项有关共同体规则的事实，“它属于纯生存” 则是一个玩法分类判断。从前三项中的任何一项直接跳到最后一项，都会遗漏中间的标准。</p><p>过去有人会用考试作弊未被发现或钻法律漏洞来类比这个问题。这些类比能够表达 “可行不自动等于符合某套规则” 的有限结构，却不能成为决定性证据。考试和法律已经存在外部规则、责任与裁判，而私人沙盒世界未必存在同样的义务。真正稳妥的论证不需要把生电玩家类比成违法者或考场作弊者，只需指出：如果双方正在争论的是某种玩法分类，那么程序是否阻止行为，只是分类依据之一，而不是分类本身。</p><p>因此，官方态度可以改变一项机制的使用风险，却不必然改变它的程序成因。一个 bug 可以因为玩家依赖而被长期保留，甚至成为事实上稳定的玩法基础；此时 “已被容忍” 可以为真，“原本就按这个目的设计” 却仍然可以为假。所以，技术玩家可以据此证明自己的使用有充分依据；拒绝非预期机制的玩家也可以继续把程序成因和资源闭环纳入自己的分类。两者争论的已不是 “玩家有没有权利使用”，而是 “使用后应当如何命名”。</p><p>长期保留还会产生路径依赖。一项机制最初可能只是一个异常，但玩家围绕它建造机器、教程和整套工程体系后，修复成本就不再等于修改几行代码的成本。官方选择保留它，可能是在承担既有依赖后做出的维护妥协，而不是对最初设计的追认。这种妥协足以让玩家放心使用，却也恰恰说明，“为什么现在不修” 和 “它当初是什么” 不能合并成同一个问题。</p><p>因此，对开发者态度的引用也应尽量保留语境。“我们知道玩家在用，现在不修”、“在替代方案出现前保留” 和 “这就是预期的生产方式”，对玩法分类的支持强度并不相同。即使原链接日后被找回，真正值得引用的也不只是一个状态标签，而是官方究竟承诺了什么、没有承诺什么。</p><h1 id="%E2%80%9C%E5%BE%88%E8%82%9D%E2%80%9D%E8%83%BD%E5%A4%9F%E8%AF%81%E6%98%8E%E4%BB%98%E5%87%BA%EF%BC%8C%E4%B8%8D%E8%83%BD%E6%9B%BF%E6%89%80%E6%9C%89%E6%9C%BA%E5%88%B6%E6%AD%A3%E5%90%8D" tabindex="-1">“很肝” 能够证明付出，不能替所有机制正名</h1><p>对生电最不公平的一种指控，是把它描述成按下开关就能空手套白狼。本文所据的讨论详细列出了一个技术存档可能经历的工作：前期下矿获得红石和石英，建立村民交易、刷怪和蜂蜜体系，远距离寻找材料，为世界吞噬者准备机器与沟道，处理流体、黑曜石、基岩缝隙中的残留方块，并在机器运行时持续维护。具体工程的工时会随版本、规模和方案而变，但这些例子足以说明：真实的技术生存远非不劳而获。一个大型技术工程所包含的劳动、知识和协作，完全值得承认。</p><p>因此，“生电就是不劳而获” 不是一个可靠的批评。生电玩家说自己前期很肝，并不是虚构辩护；许多技术存档的实际投入，甚至高于普通玩家完成常规生存流程所需的投入。把这种付出一笔抹去，只会暴露批评者并不了解自己正在批评的对象。</p><p>然而，“整个项目非常辛苦” 与 “项目中每一种手段都没有改变资源成本” 仍然是两个命题。一个玩家完全可能花费一百小时设计、收集材料和建造机器，同时让这台机器在此后取消某种资源的持续获取成本。前一百小时的艰难证明成果不是白来的，却不能独自回答机器运行时被复制的对象是否本应消耗。</p><p>所谓 “高投入、无限回报”，其实包含两种不同的成本。机器建成之前，玩家付出的是选址、材料、设计和建设成本；机器建成之后，产出仍然受运行时间、加载范围、产率、维护和服务器性能限制。刷怪塔并不会在建成瞬间给出无限物品，它只是把原本分散在战斗和寻找中的劳动，改造成了以有限速率持续产出的系统。运行越久，建设成本分摊到每件产品上就越低。这是自动化的一般结构，不是生电独有的异常。</p><p>刷怪塔也因此展示了争论的两面。它证明，后期能够长期产出，并不足以把一项机制判为作弊；否则作物农场、铁农场乃至村民交易都会落入同样的指控。可是，“前期很难造” 也不足以为任何后续收益正名。一台需要大量知识和工时的任意物品复制机，仍然可以从根本上取消资源获取过程。真正需要比较的，不是机器有多难造或能运行多久，而是它把哪些投入转化成了哪些产出，保留了哪些持续成本，又绕过了哪些原有的资源关系。</p><p>对不希望战斗、探索和手动生产被大量自动化取代的玩家来说，拒绝刷怪塔本身也可以是一种一致的玩法选择。有些服务器还会因为性能、经济或玩法节奏而限制刷怪塔。这些理由可以支持一套事先公开的规则，却不能证明刷怪塔在技术上就是 bug，也不能把其他规则下的使用者直接判为作弊。</p><p>“生电玩家最肝，所以后期来财快是他们应得的” 也需要拆开理解。先投入设计、材料和建设，随后取得持续高产，确实是自动化最有力的正当性来源。农场的高效率不是对劳动的否定，而是劳动方式的改变。一个人不应因为坚持手工生产，就断言使用机器的人耍赖。可是，“前期付出过” 也不能推出 “此后任何形式的收益都符合任何规则”。劳动与回报之间仍需有具体的机制关系，不能用搬运蜜蜂的辛苦替 TNT 复制正名，也不能用世吞挖沟的工程量证明任意物品复制合理。</p><p>这里必须承认生电玩家提出的高铁类比有一半是成立的。能够骑马从上海到北京，不代表人就不该坐高铁；能够写信，不代表无线通信就是耍赖。同样，能够手挖资源，不代表玩家不该用熔炉、漏斗、村民、刷怪塔和红石系统提高效率。手动不天然高贵，重复劳动也不天然构成更真实的生存。</p><p>但这个类比不能包办所有问题。高铁和无线通信是被制度明确提供的成品技术，而复制机制是否属于被正式设计的生产工具，正是争议所在。用高铁类比红石自动化很有说服力，用高铁类比任意物品复制则已经把结论藏进了前提。这个类比足以反驳 “凡自动化皆作弊”，却不能证明 “凡有技术门槛的机制利用皆与自动化等价”。</p><p>劳动也不是可以在不同机制之间任意转账的通货。一个玩家为了蜜蜂、红石和世吞沟道付出巨大劳动，可以证明整个工程的难度，却不能把这些劳动自动折算成 “此后可以取消某项消耗” 的资格。不同投入之间是否存在足够紧密的机制联系，比总工时是否惊人更重要。否则，只要复制机本身造得足够昂贵，任意物品复制也可以被说成对前期劳动的回报。</p><p>刷怪塔与 TNT 复制也不必只用 “都能持续产出” 来比较。刷怪塔通过控制生成空间、击杀方式和玩家位置，把刷怪时间转化为特定掉落物；TNT 复制则在不反复消耗 TNT 的情况下反复产生爆破效果。前者可以被理解为把正常生成规则工业化，后者则更直接地改变了一次爆破与一块 TNT 之间的消耗关系。这不能自动证明刷怪塔就应被所有服务器接受，却说明了为什么一个人可以在不自相矛盾的情况下接受刷怪塔而拒绝 TNT 复制。</p><p>反过来，若有人认为自动刷怪本身就过度削弱了战斗和探索，他也可以同时拒绝刷怪塔和复制机制。这种规则比技术社区更严格，但并不因此没有逻辑。只要它事先公开，并对熟人、新人和不同形式的机器一致适用，它就是服务器定位的一部分，而不是必须向技术玩家证明自己 “懂游戏” 后才能存在的例外。</p><h1 id="%E6%95%88%E7%8E%87%E9%9C%80%E6%B1%82%E6%8F%AD%E7%A4%BA%E8%AE%BE%E8%AE%A1%E7%BC%BA%E5%8F%A3%EF%BC%8C%E5%8D%B4%E4%B8%8D%E8%87%AA%E5%8A%A8%E8%AF%81%E6%98%8E%E6%89%8B%E6%AE%B5%E5%90%88%E7%90%86" tabindex="-1">效率需求揭示设计缺口，却不自动证明手段合理</h1><p>Minecraft 的后期确实可能令人感到 “坐牢”。当玩家开始建设大型空置域、交通网络、工业区或超大规模建筑时，原版的批量采掘与资源供应能力未必匹配他们的工程目标。TNT 的常规制造需要沙子与火药，而沙子的常规大量获取往往依赖寻找和开采；即使使用鞘翅和信标，大规模清理地形仍可能充满重复劳动。技术社区广泛使用 TNT 复制完成爆破，可以被解释为游戏存在后期工具缺口的重要迹象，但这仍是一项关于玩家需求的推论，而不是仅凭使用人数即可证明的设计事实。</p><p>对于世界吞噬者这类需要持续自动爆破的超大型工程，TNT 复制可能确实是目前唯一现实的方案。这能解释技术社区为什么保留它，也能说明简单修复为什么会使一整类工程失去可行性。但 “工程只能依赖这项机制完成” 与 “这项机制因此符合所有生存标准” 并不是一回事。缺少超大规模工具，可以被看作需要弥补的设计缺口，也可以被看作游戏对工程规模留下的边界。玩家选择清空巨量区块的目标，并不会因此自动要求其他玩法为这个目标改变资源规则。</p><p>这一点值得被严肃对待。一个机制被大量玩家长期依赖，不应只被一句 “这是 bug，修掉就好” 打发。粗暴修复可能摧毁已有工程，也可能让一整类玩法在没有替代方案的情况下失去可行性。若 Mojang 希望减少玩家对复制机制的依赖，更合理的做法或许是提供昂贵但可再生、能够规模化部署的正式爆破或采掘方案。</p><p>然而，设计缺口能够解释一种机制为什么流行，也能支持官方暂时保留它，却仍不能自动证明它符合所有人的纯生存定义。一个工程只有在允许某项机制时才具有现实可行性，首先说明该工程依赖这套规则。玩家可以据此主张 “我们的技术生存允许 TNT 复制，因为没有合理替代”，但不能省略前半句话，只留下 “所以 TNT 复制当然是纯生存”。</p><p>工程目标本身也并非外部强加给玩家的义务。一个人决定清空巨量区块、制造极端产能或建造超大工程，是在选择一种游戏目标。目标宏大值得钦佩，却不能反过来要求所有生存标准都为它修改。严格无复制生存玩家可以选择缩小工程、延长工期或放弃项目；技术玩家也可以选择允许复制以实现目标。两者的差别不在谁更能吃苦，而在于他们愿意保留哪些约束。</p><p>所以，评价效率提升不能只看产量。通过一次性建设和长期维护换取自动产出，通过深层机制优化流程，以及直接复制资源或保留本应消耗的对象，都可能具有技术含量，却对生存约束产生不同影响。“捷径” 也不等于 “轻松”：一条路线可能极难建成，却在建成后显著缩短另一项流程。严谨的批评应当指出究竟取消了哪一项成本，而不是用 “捷径” 两个字否定整项工程。</p><p>“没有替代方法” 也不必然意味着游戏欠玩家一种替代方法。某些工程在常规规则下无法以合理工期完成，既可以推动玩家发明新技术、呼吁官方增加工具，也可以使人重新考虑工程的必要性和规模。游戏中的成本不只是妨碍创造的噪音，它也会影响什么值得建、建多大、先建什么。如果每当一个宏大目标遇到成本上限时，都用目标的宏大反过来证明应当放宽手段，那么生存约束就只会在它尚未阻碍玩家时才被承认。</p><p>这并不是要求技术玩家放弃世界吞噬者，而是说明两套玩法对 “目标与限制谁应该迁就谁” 给出了不同答案。技术生存更愿意为了扩展可实现的工程而纳入稳定、可控的争议机制；严格无复制生存则更愿意让工程目标服从已经选定的资源边界。前者不是偷懒，后者也不是拒绝进步。</p><h1 id="%E7%9C%9F%E6%AD%A3%E9%9C%80%E8%A6%81%E8%AD%A6%E6%83%95%E7%9A%84%E6%98%AF%E5%8F%98%E5%8C%96%E7%9A%84%E8%AF%84%E4%BB%B7%E6%A0%87%E5%87%86" tabindex="-1">真正需要警惕的是变化的评价标准</h1><p>围绕 “特性”“bug”“技术” 和 “作弊” 的争论，首先需要警惕的并不是玩家采用了某项机制，而是明示的辩护理由与实际的区分标准并不一致。如果 “原版能做” 只在支持某些机制时被当成决定性理由，在拒绝其他机制时却又不再有效，那么真正起作用的标准就还没有被说出来。</p><p>当然，这种差别并不必然构成双重标准。不同漏洞的影响原本就不同。TNT 复制可能主要提供爆破能力，任意物品复制则可能摧毁整个资源体系；更新抑制可能服务特殊工程，另一种漏洞则可能严重影响服务器稳定性。玩家完全可以依据复制对象、成本变化、性能影响和共同规则，对不同机制给出不同评价。</p><p>更有甚者，评价标准还可能随着利益变化：对自己的工程有利时，长期未修被解释成官方认可，非预期行为被解释成技术深度；当另一项漏洞破坏服务器经济、影响自己的体验或使别人的收益过高时，论证又可能立刻变成 “它显然违反设计意图，所以应该修”。无论是否能进一步判断其动机，双重标准都出现于评价依据不再一致的时候。如果一个人接受 TNT 复制的理由是 “原版能做，所以不算作弊”，那么面对其他原版可执行的复制漏洞时，他不能只凭 “不喜欢” 就更换标准；他需要说明两者在影响、规则或官方态度上的差异。如果一个服务器禁止某种机器是为了性能，那么限制也应尽可能针对实体数量、区块加载或实际负载，而不是只对不熟悉的建筑使用模糊的 “禁止生电”。</p><p>同样，“大服务器都无所谓，只有小服务器服小事多” 并不能回答规则是否合理。服务器是否允许某种机制，取决于定位、性能、经济系统、公平目标、玩家构成和管理能力。大型技术服允许复制或世吞，只能证明这些机制适合它们的目标；生存服、经济服或休闲服禁止它们，也可能有充分理由。一套规则是否值得接受，应当看它是否事前公开、稳定适用、与服务器目标一致，并让玩家能够知情选择，而不是看服务器规模能否提供身份背书。</p><p>还有一种辩护会把机器拆解成一连串普通操作：在天上造房子很正常，不插火把很正常，修一条上下通道也很正常；养一只末影螨很正常，给它保护也很正常，所以刷怪塔和小黑塔当然无从禁止。这种说法准确指出，复杂机器通常由合法的局部操作组成。但局部操作都常见，并不意味着组合后的系统不能成为规则对象。反过来说，如果服务器只写一句 “禁止刷怪塔”，却不给出识别标准、性能理由和处罚边界，那么管理规则也确实过于含混，容易造成选择性执法。好的规则应直接说明它限制的是产量、实体数量、加载方式、复制行为还是性能影响，而不是迫使双方玩文字拆解游戏。</p><p>此外，所有判断都应注明版本与运行环境。Java 版和基岩版的机制并不完全相同，不同版本会修复、改变或新增行为，服务端实现、性能模组和规则插件也可能改变原版结果。一个机制在某个 Java 版本的技术服中被接受，不能不加说明地推广到所有版本和平台；服务器对某种机器的限制，也可能针对服务端负载而不是对玩家技术作价值判断。脱离版本和环境谈 “原版机制”，很容易让双方其实在讨论不同对象。</p><p>如果一个人对 TNT 复制、沙子复制和任意物品复制都采用 “不主动利用明显非预期的资源断裂” 这一标准，那么他对 TNT 复制的拒绝就不是因为不懂其工程用途，而是对同一原则的延续。这套原则不一定能轻松处理所有边界案例：刷怪塔、村民交易和各类状态机制究竟是重组正常规则，还是实质上绕过了资源成本，仍然可以继续争论。但有边界争议，不等于这条原则没有内容；正如技术社区会给不同复制机制划分层级，严格无复制生存也可以形成自己稳定的判断传统。</p><h1 id="%E8%A7%84%E5%88%99%E5%8F%AF%E4%BB%A5%E4%B8%8D%E5%90%8C%EF%BC%8C%E8%AF%84%E4%BB%B7%E5%BF%85%E9%A1%BB%E5%85%B7%E4%BD%93" tabindex="-1">规则可以不同，评价必须具体</h1><p>写到这里，我的结论并不是 “生电不配叫生存”，更不是 “生电玩家都在作弊”。生电内部不存在统一的机制清单。有人只使用普通自动化，有人接受 TNT 复制但拒绝任意物品复制，有人研究更新抑制，也有人采用更宽松的漏洞规则。评价必须落到具体机制、具体服务器和具体承诺上，而不能把 “生电玩家” 当作一个整齐划一的对象。</p><p>严格无复制生存的价值也不只是愿意投入更多重复劳动。它有意保留资源的获取、消耗、风险和工程规模之间的关系，也为不同存档的成果提供一种较容易识别的共同基准。拒绝复制机制，可以是对想保留何种游戏结构的清楚选择，而不是对技术的无知。但它也不因此天然高于技术生存。机器的设计、建设与维护本身同样是一种玩法能力；批评漏洞正名，不应退化成对效率、自动化或工程能力的敌意。</p><p>我反对的只是话语排他：生电不应被宣布为唯一高级的玩法，手动生存也不应被宣布为唯一真实的生存；技术玩家不应把拒绝某些漏洞的人一概称为不懂游戏，严格无复制生存玩家也不应把规则公开的技术服一概判为作弊服。不同共同体可以对 “纯生存” 有不同用法，但当这个标签被用于比较成果时，最好附带更精确的规则说明。</p><p>“原版技术生存，允许 TNT 复制”“允许世吞与更新抑制，禁止任意物品复制”“严格无复制生存”，这些表达并不复杂，却比单独争夺 “纯生存” 三个字提供了更多信息。它们不会贬低任何成果，反而让观看者知道自己正在欣赏什么：是受持续资源约束的长期积累，是对底层机制的高强度开发，还是在特定规则下实现的大型工程。</p><p>生电可以玩，也值得研究；严格无复制生存可以拒绝复制及依赖复制机制的世吞方案；服务器可以根据性能、经济与定位制定自己的边界。官方默许、社区流行、前期劳动和后期效率，都能成为讨论某项机制是否可接受的理由，却没有任何一项能够单独终结讨论。</p><p>玩法自由与规则清晰本来就可以同时成立。真正成熟的沙盒文化，不需要每一种玩法争夺唯一的正统名称，也不需要把不同选择排列成高低贵贱。使用什么机制，就在需要比较与协作时说明什么机制；采用什么边界，就让参与者知道什么边界。如此一来，技术不必伪装成苦行，严格也不必转化为优越，而每一种成果都能在自己的规则中得到准确的理解。</p><h1 id="%E4%BA%89%E8%AE%AE%E9%80%9F%E6%9F%A5%E8%A1%A8" tabindex="-1">争议速查表</h1><table><thead><tr><th>常见说法或问题</th><th>这项信息可以说明</th><th>不能单独推出</th><th>更准确的处理方式</th></tr></thead><tbody><tr><td>“原版能做”</td><td>该行为在特定版本和环境中可执行</td><td>它不是 bug、符合设计意图、被所有服务器允许，或必然属于所有人理解的 “纯生存”</td><td>继续区分程序成因、官方态度、共同体规则和玩法分类</td></tr><tr><td>“没有开启作弊”</td><td>玩家没有通过该开关取得指令等权限</td><td>所有机制利用都符合任意服务器或比赛的规则</td><td>先明确共同规则，再使用日常语言中的 “作弊” 判断</td></tr><tr><td>“Mojang 没修”</td><td>机制可能长期存在，或官方在维护中容许它继续运作</td><td>该机制从一开始就是被如此设计的</td><td>查明报告状态、开发者原话、上下文与适用版本</td></tr><tr><td><code>Won't Fix</code></td><td>官方当前决定不修复某项报告</td><td>它与 <code>Works As Intended</code> 同义，或官方已将该机制定义为正式生产工具</td><td>将问题跟踪状态、开发者发言和社区概括分开引用</td></tr><tr><td>“沙盒游戏想怎么玩都行”</td><td>私人玩家可以自定规则，规则公开的服务器也可以允许争议机制</td><td>不同规则下的成果无需说明就彼此等价</td><td>私人游玩尊重选择；进入合作、经济或比较场景时说明关键规则</td></tr><tr><td>“生电就是不劳而获”</td><td>无</td><td>它不能准确描述大型技术存档的知识、建设、调试、协作与维护投入</td><td>分别讨论建设成本、运行成本和机制取消的资源成本</td></tr><tr><td>“生电前期很肝”</td><td>项目并非简单的按键取得，高效产出可能来自真实的前期投入</td><td>项目中的每一种手段都符合任意规则</td><td>追问具体机制将哪些投入转化为什么产出，又取消了什么成本</td></tr><tr><td>“农场也能无限产出”</td><td>后期边际成本很低、能长期运行，不足以单独判定作弊</td><td>刷怪塔、作物农场、TNT 复制和任意物品复制对资源关系的影响完全相同</td><td>区分正常生成规则的工业化与直接取消配方或持续消耗</td></tr><tr><td>“TNT 复制只是提高效率”</td><td>它能支持大规模自动爆破，装置和世吞也可能具有很高的建设与技术门槛</td><td>它与只将建设、加载和运行时间转化为产出的自动化必然等价</td><td>明确它取消了 “每次爆破消耗一份 TNT” 的持续资源关系</td></tr><tr><td>“不用 TNT 复制就没法做世吞”</td><td>该机制可能是某类超大工程目前唯一现实的方案，并反映后期工具缺口</td><td>游戏欠玩家某种替代工具，或所有生存标准都应为该工程目标改变</td><td>技术生存可以允许复制以实现目标；严格无复制生存可以缩小、延期或放弃工程</td></tr><tr><td>“高铁比骑马先进，所以自动化不是作弊”</td><td>手动不天然高贵，重复劳动也不天然更真实</td><td>任何有技术门槛的漏洞利用都与正式提供的自动化工具等价</td><td>先确定被类比的机制是重组正常规则，还是改变了原有资源关系</td></tr><tr><td>“每个局部操作都合法”</td><td>复杂机器通常由普通操作组成</td><td>组合后的系统不能成为服务器规则的限制对象</td><td>规则直接说明限制的产量、实体数量、加载方式、复制行为或性能影响</td></tr><tr><td>“大服务器都允许”</td><td>某项机制可能适合那些服务器的定位、技术条件和管理目标</td><td>小型服务器、经济服或休闲服的限制必然不合理</td><td>检查规则是否事前公开、稳定适用、符合定位并让玩家知情选择</td></tr><tr><td>“接受 TNT 复制却拒绝任意物品复制，就是双标”</td><td>无</td><td>不同漏洞必须得到同一结论</td><td>比较复制对象、资源影响、性能风险、官方态度和共同规则；只有依据不一致或随利益换标准时才构成双标</td></tr><tr><td>“我已经说明用了 TNT 复制”</td><td>作者没有在该事项上隐瞒规则</td><td>观众必须将该成果与无复制成果直接比较，或对两者给出相同评价</td><td>将坦率披露、道德指控和成果可比性分开处理</td></tr><tr><td>“这是原版机制”</td><td>在某个运行环境中没有依赖额外模组也可能实现</td><td>同一结论可以不加说明地推广到 Java 版、基岩版、所有版本与所有服务端</td><td>注明平台、版本、服务端实现、性能模组与规则插件</td></tr><tr><td>“纯生存”</td><td>说话者想强调某种生存条件，但具体边界可能随社区而变</td><td>所有观众都会自动理解为同一套规则</td><td>使用 “原版技术生存，允许 TNT 复制”“严格无复制生存” 等可核对的补充说明</td></tr></tbody></table><h1 id="%25%26!%40%26%23%25%5E%26*%23%25" tabindex="-1">%&amp;!@&amp;#%^&amp;*#%</h1><p>引用 <a href="https://en.wikipedia.org/wiki/Wikipedia:Please_be_a_giant_dick,_so_we_can_ban_you">Wikipedia:Please be a giant dick, so we can ban you</a>。讨论请得体，切勿在边缘试探，挑战一个人的底线。</p>]]>
      </content:encoded>
    </item>
    <item>
      <title>生物竞赛学习指北</title>
      <link>https://www.lynx3.me/article/44f754a7/</link>
      <description>关于高中生物竞赛学习的一些经验和建议。</description>
      <author>LynxCatTheThird</author>
      <category domain="https://www.lynx3.me/categories/%E7%A7%91%E5%AD%A6%E4%B8%8E%E6%8A%80%E6%9C%AF/">科学与技术</category>
      <category domain="https://www.lynx3.me/categories/%E7%A7%91%E5%AD%A6%E4%B8%8E%E6%8A%80%E6%9C%AF/%E7%94%9F%E7%89%A9/">生物</category>
      <category domain="https://www.lynx3.me/tags/A2/">A2</category>
      <category domain="https://www.lynx3.me/tags/%E7%94%9F%E7%89%A9%E7%AB%9E%E8%B5%9B/">生物竞赛</category>
      <pubDate>Tue, 23 Jun 2026 15:00:00 GMT</pubDate>
      <content:encoded>
        <![CDATA[<p>作为一个参加过高中生物竞赛的人，我想把自己踩过的坑和摸索出来的经验整理出来，希望能帮到正在准备或者打算开始学竞赛的同学。这篇文章不是什么权威指南，就是我个人的一些体会，仅供参考。</p><h1 id="%E8%AF%BE%E5%86%85%E6%88%90%E7%BB%A9%E6%98%AF%E5%9F%BA%E6%9C%AC%E7%9B%98" tabindex="-1">课内成绩是基本盘</h1><p>客观地说，学习竞赛确实会占用一部分课内学习时间，因此一定要在课内成绩和竞赛学习之间做好平衡。如果你对自己的课内成绩没有足够把握，那么在学习竞赛的过程中，很可能会因为课内成绩下滑而面临被调整出实验班的风险，进而被迫中止竞赛学习。所以，无论你学习竞赛是为了升学、兴趣，还是为了挑战自己，也无论你现在的竞赛水平如何、目标成绩如何，只要你想把竞赛长期学下去，首先要做的事情就是稳住课内成绩。课内成绩是你继续学习竞赛的基本保障，也是你在学校环境中获得稳定学习资源和时间安排的基础。</p><p>当然，“稳住课内成绩” 并不意味着你必须把所有课内科目都学到极致，而是要保证自己不因为课内学习出现明显短板而影响整体规划。竞赛学习本身就是一件需要长期投入的事情，如果课内成绩一直处于危险状态，你就很难安心投入竞赛。比较理想的状态是：课内成绩保持在一个相对安全的位置，竞赛学习再逐步推进。这样即使某段时间竞赛训练强度较大，也不至于让课内成绩崩盘。</p><h1 id="%E5%BF%83%E6%80%81%E4%B8%8E%E9%A2%84%E6%9C%9F" tabindex="-1">心态与预期</h1><p>学习竞赛新知识的时候，往往会觉得很有意思，因为它比课内内容更深入，也更有挑战性。但你也要提前意识到，高中阶段任何一门学科的复习过程都可能是枯燥的，竞赛也一样。刚开始学新内容时，可能会有明显的新鲜感和成就感；但到了复习阶段，你会反复面对大量细节、错题、笔记和记忆内容，这个过程并不轻松。学习竞赛同样会遇到瓶颈期、进步停滞、状态波动、考试失误等问题，这些都是正常现象，不代表你不适合学竞赛。</p><p>在遇到这些问题时，竞赛老师通常能够在知识体系、学习方向和训练安排上给予比较专业的指导，也往往比较了解竞赛生常见的学习状态。不过，关于学业规划、时间分配、心理压力等问题，你也可以多向几类可靠的人请教，比如班主任、任课老师、学长学姐、家长，或者有经验的竞赛教练。不同的人能提供不同角度的建议，综合参考后，你会更容易做出适合自己的判断。不要因为一时学不动、考不好，或者觉得进度落后，就轻易否定自己；但也不要盲目硬撑，完全不管课内成绩和身体状态。</p><h1 id="%E7%AC%94%E8%AE%B0%E4%B8%8E%E9%87%8F%E5%8C%96%E7%9B%AE%E6%A0%87" tabindex="-1">笔记与量化目标</h1><p>关于我个人的经验，我曾经给自己设定过一个心理暗示：每认真整理一页高质量笔记，就相当于让自己提高 0.1 分。比如，如果你现在大约能考 50 分，目标是冲到 90 分并争取省一，那么可以尝试整理 400 页左右高质量、较详细的笔记，并在联赛前尽量背熟其中的 300 到 350 页。当然，这个数字不是严格标准，也不是真的说 “一页笔记必然对应 0.1 分”，它更像是一种量化目标和自我激励方式。不同人的笔记密度不同，我的笔记比较稀疏，所以一页大概按 0.1 分来估算；如果你的纸张较大、字比较小、内容写得比较密，也可以给自己设定为每页对应 0.5 分甚至 1 分。关键不在于数字本身，而在于通过整理、复习和背诵，把知识真正内化成自己的体系。</p><h1 id="%E8%AE%B0%E5%BF%86%E4%B8%8E%E6%95%B4%E7%90%86" tabindex="-1">记忆与整理</h1><p>之所以建议重视笔记，是因为生物竞赛对记忆、整理和归纳能力的要求很高，尤其是动物学、植物学、动物生理学、植物生理学等内容，需要掌握大量细节。如果只是反复看课本，而不进行系统整理；或者整理了笔记却放在那里不复习、不背诵，那么这些部分的分数就很难稳定拿到。比较有效的做法是：第一遍学习时先建立框架，知道每一章大致在讲什么；第二遍复习时补充细节，把容易混淆的概念、重要结构、典型过程整理出来；第三遍则要围绕题目和错题查漏补缺，把那些自己总是忘、总是错的内容单独标记出来。笔记不一定要追求好看，但一定要方便自己复习，最好能做到 “看一眼就知道重点在哪里”。</p><h1 id="%E5%85%B3%E6%B3%A8%E5%86%B7%E9%97%A8%E7%9F%A5%E8%AF%86" tabindex="-1">关注冷门知识</h1><p>此外，生物竞赛不像课内考试那样有非常明确、稳定的课程标准或考试范围，出题内容可能会比较灵活。有些知识点过去很少考，但一旦出现在试卷中，如果你之前看过，就有可能做出来；如果完全没接触过，可能连蒙都没法蒙。比如一些较少见的图表、实验技术、生理现象、分类学细节或者生物学史相关内容，都可能成为考点。因此，到了复习中后期，当课本上的主干知识已经复习得差不多时，一方面要继续巩固核心内容，另一方面也不要完全忽略那些相对冷门、细碎的知识点。这些内容往往是后期进一步拔高的关键。主流知识点决定你的基础分，细节和冷门知识则可能决定你能否拉开差距。</p><h1 id="%E5%A4%8D%E4%B9%A0%E6%96%B9%E6%B3%95" tabindex="-1">复习方法</h1><p>在具体复习时，建议不要只看书，也不要只刷题。只看书容易产生 “我都会了” 的错觉，但一做题就发现细节记不清；只刷题则可能导致知识体系零散，遇到新题时不会迁移。比较稳妥的方式是把教材、笔记和题目结合起来：先用教材和老师讲义建立体系，再用题目检验掌握程度，最后把错题中暴露出的漏洞补回笔记里。（关于这个 “补回”，我的做法是第一次记笔记记单页，也就是只用正面，反面可以用来补漏，或者记一些题里新学到的知识点。）尤其是生物竞赛，很多题目并不是单纯考你背没背，而是考你能不能把多个知识点联系起来，比如把细胞生物学、遗传学、生理学和实验设计结合在一起。因此，复习时要有意识地训练自己从 “记住知识” 过渡到 “使用知识”。</p><h1 id="%E5%96%84%E7%94%A8-ai-%E5%B7%A5%E5%85%B7" tabindex="-1">善用 AI 工具</h1><p>现在 AI 工具发展很快，也可以适当利用 AI 辅助学习。生物竞赛涉及生物学的多个分支，内容非常广，任何一个人都很难对所有细节都随时给出完整回答。所以，当你遇到一些教材讲得不够清楚、网上资料比较分散，或者自己暂时找不到系统整理的问题时，可以尝试向 AI 提问，让它帮助你建立框架、解释概念、整理表格或生成复习提纲。比如你可以这样问：“请告诉我关于各种 PCR 技术的知识，包括它们的中文名称、英文全称、英文缩写、基本操作方法、应用范围和主要特点，请尽可能全面、系统地整理。” 得到回答后，不要直接照抄，最好自己再筛选、核对和提炼，把真正重要的内容整理进笔记本。这样既可以当作知识字典，也可以作为背诵提纲。</p><p>不过，使用 AI 时一定要注意核查。AI 很适合帮你整理思路、提供框架、解释概念，但它并不总是准确，尤其是在一些细节性、专业性很强的问题上，可能会出现看起来很合理但实际上不严谨甚至错误的回答。因此，比较重要的知识点最好结合教材、权威资料、老师讲解和多个来源进行交叉验证。你可以让 AI 给出参考来源，也可以让它对同一个问题从不同角度解释，但最终写进笔记、用于考试的内容，一定要经过自己的判断和核对。AI 是工具，不是标准答案。</p><h1 id="%E9%95%BF%E6%9C%9F%E4%B8%BB%E4%B9%89" tabindex="-1">长期主义</h1><p>最后还想补充一点：学习竞赛需要长期主义。不要指望短时间内靠突击完成质变，也不要因为一次考试成绩不好就觉得前面的努力都没有意义。竞赛成绩的提升往往不是线性的，可能很长一段时间看起来没有进步，但当你的知识体系、题感和记忆量积累到一定程度后，分数会突然上一个台阶。真正重要的是，你能不能持续稳定地学习，能不能及时复盘自己的问题，能不能在课内和竞赛之间找到适合自己的节奏。只要方向正确、方法不断调整、基础持续积累，后期的提升空间是很大的。</p><p>以上就是我关于生物竞赛学习的一些经验和想法。每个人的情况不同，适合自己的方法才是最好的方法。祝大家都能在竞赛中取得满意的成绩。</p>]]>
      </content:encoded>
    </item>
    <item>
      <title>国外模型，凭什么那么贵</title>
      <link>https://www.lynx3.me/article/94f34087/</link>
      <description>GPT 会从&quot;主流默认模型&quot;变成&quot;高端兜底模型&quot;——GLM 们打的不是技术，而是定价权。</description>
      <author>LynxCatTheThird</author>
      <category domain="https://www.lynx3.me/categories/%E9%9A%8F%E6%84%9F/">随感</category>
      <category domain="https://www.lynx3.me/tags/A2/">A2</category>
      <category domain="https://www.lynx3.me/tags/%E9%9A%8F%E6%84%9F/">随感</category>
      <pubDate>Tue, 23 Jun 2026 04:54:00 GMT</pubDate>
      <content:encoded>
        <![CDATA[<p>最近国产大模型的性价比越来越高，GLM、DeepSeek 们用远低于 GPT 的价格提供了相当不错的体验。这让我忍不住想聊聊：GPT 这些国外模型，凭什么还卖这么贵？</p><h1 id="%E6%80%A7%E4%BB%B7%E6%AF%94%E6%89%8D%E6%98%AF%E6%9D%80%E4%BC%A4%E5%8A%9B" tabindex="-1">性价比才是杀伤力</h1><p>GPT 当然还会有人买，就像劳斯莱斯当然还会有人买。但如果有车企能用 1/6 的价格做出 90% 的劳斯莱斯体验，那绝大多数人不会再把劳斯莱斯当默认选择。</p><p>相似的，GPT 会从 “主流默认模型” 变成 “高端兜底模型、品牌保险模型、特殊场景模型”。而 GLM 这种模型真正的杀伤力在于：它让用户开始认真计算 “我到底有没有必要为最后那 10% 多付 6 倍价格”。</p><p>换句话说，GLM 这类模型打的不是 GPT 的技术，而是 GPT 的价格体系和定价权。GLM 不一定非要全面超过 GPT。它只要做到绝大多数任务够用，价格显著更低，迁移足够简单，就已经能重构市场。</p><p>这和安卓手机、国产新能源车、云计算价格战、开源数据库替代商业数据库的逻辑很像。不是说高端品牌马上消失，而是高端品牌还在，但大众市场被更高性价比方案吃掉；同时，高端品牌必须不断证明自己 “贵得有道理”。</p><p>但是也不是说高端品牌必须得降价，他们也可以缩减客户群体。就像劳斯莱斯主要是富人在买，也依然不输大众车企。</p><h1 id="%E7%94%A8%E6%88%B7%E4%B8%8D%E4%B8%BA%E7%A0%94%E5%8F%91%E8%B4%A6%E5%8D%95%E4%B9%B0%E5%8D%95" tabindex="-1">用户不为研发账单买单</h1><p>此外，我想说，OpenAI 的成本压力大，只能说它有动机维持高价，甚至可以说有理由维持高价，但是没理由让客户接受高价。能够让客户接受的理由，可以是性价比，也可以是不可替代的能力，但不是研发投入大。用户没有义务为 OpenAI 的研发成本买单。用户买的是可感知价值，不是厂商的研发账单。</p><p>发明者不一定永远拥有最高利润。发明者也没理由永远拥有最高利润。IBM 开创大型机时代，但后来被云分流；奢侈酒店存在，但快捷酒店和民宿服务了大多数需求；特斯拉开创智能电动车潮流，但中国新能源车迅速拉低价格锚点。没有人为 IBM 或者特斯拉说情，因为他们是企业，企业没有维护住自己的市场，纯纯自取。</p><p>所以说，OpenAI 的高投入值得尊重，但不自动等于高价格合理。高价格是否合理，取决于这些投入是否转化成用户愿意付费的、竞品无法替代的增量价值。</p><h1 id="%E5%88%AB%E8%B7%9F%E6%88%91%E8%B0%88%E6%83%85%E6%80%80" tabindex="-1">别跟我谈情怀</h1><p>如果说 OpenAI 是科研机构，我会因为 “为人类作贡献” 而尊重但不购买。但是他们已经说过自己不是公益机构，那么我就要骂而且不购买了。既然你想赚我的钱，那就别跟我谈 “改变人类未来” 的情怀。大家打开天窗说亮话，按商品契约来谈——你的 Token 凭什么这么贵？你的功能多出来的 10% 值不值那 6 倍的差价？如果你拿不出对得起这个价格的绝对代差，还想让用户承担你高昂的 “大厂研发公摊成本”，那就别怪用户不仅不买账，还要在走的时候啐一口。</p><p>过去，我们谈大模型必谈 AGI 信仰、谈算力奇点、谈人类未来；现在，我们已经在谈投资回报率、Token 单价、迁移成本、算力功耗比。AI 已经是市场 + 科研的混合物，忽略市场空谈理念和科技必然是错误的。</p><p>互联网没有记忆，但资本和用户的钱包有。OpenAI 最大的尴尬在于，它用最资本主义的方式撕毁了最初的公益宿命，现在却指望用户用最理想主义的情怀去包容它的高昂溢价。这世界上哪有这么便宜的事。既然进了商场做买卖，就得老老实实遵循价格战的世俗规律，被性价比更高的竞品 “掀翻桌子”，真的纯属自取。</p><p>说到底，技术值得尊重，但价格只认市场。谁能用更低的成本解决同样的问题，用户就会用脚投票。这个道理，古今中外概莫能外。</p>]]>
      </content:encoded>
    </item>
    <item>
      <title>Rust、C 与 C++</title>
      <link>https://www.lynx3.me/article/221c1cb4/</link>
      <description>这两星期 C++ 和 Rust 之争的最终结论，其实……写给自己看的多……？</description>
      <author>LynxCatTheThird</author>
      <category domain="https://www.lynx3.me/categories/%E7%A7%91%E5%AD%A6%E4%B8%8E%E6%8A%80%E6%9C%AF/">科学与技术</category>
      <category domain="https://www.lynx3.me/categories/%E7%A7%91%E5%AD%A6%E4%B8%8E%E6%8A%80%E6%9C%AF/%E8%AE%A1%E7%AE%97%E6%9C%BA/">计算机</category>
      <category domain="https://www.lynx3.me/categories/%E7%A7%91%E5%AD%A6%E4%B8%8E%E6%8A%80%E6%9C%AF/%E8%AE%A1%E7%AE%97%E6%9C%BA/%E8%AF%AD%E8%A8%80/">语言</category>
      <category domain="https://www.lynx3.me/tags/C/">C++</category>
      <category domain="https://www.lynx3.me/tags/Rust/">Rust</category>
      <category domain="https://www.lynx3.me/tags/A2/">A2</category>
      <pubDate>Thu, 05 Mar 2026 15:05:40 GMT</pubDate>
      <content:encoded>
        <![CDATA[<p>关于 Rust、C 和 C++ 的讨论，互联网上已经太多了。有人认为 Rust 会取代 C/C++，也有人认为 C/C++ 永远不会死；还有人把 Rust 视为社区炒作，或认为 C++ 终将因复杂而被淘汰。Rust 的学习曲线、C 作为系统语言的地位，以及 C++ 的存量生态，也常被拿来作为论据。这些说法有些成立，有些并不成立，也有一些只是情绪表达。</p><p>若从软件工业、系统工程、安全工程、语言生态和个人职业发展的角度来看，事情远比 “取代” 或 “不会取代” 复杂。更准确的问题并不是 Rust 会不会让 C 和 C++ 消失，因为两者背后有数十年的存量代码，以及操作系统、数据库、浏览器、游戏引擎、嵌入式、音视频、图形、科学计算、工业软件、金融系统、芯片 SDK、驱动和基础库。真正值得问的是：未来新项目立项时，C 和 C++ 是否仍是默认首选？Rust 能否让原本会使用 C/C++ 的新系统项目转向？哪些领域会被分流，哪些地方即使抛开历史原因也很难被分流？作为 C++ 开发者，又该如何面对这种变化？本文围绕这些问题展开。</p><h2 id="rust-%E7%9A%84%E7%9B%AE%E6%A0%87%E4%B8%8D%E6%98%AF%E8%AE%A9-c%2Fc%2B%2B-%E6%B6%88%E5%A4%B1" tabindex="-1">Rust 的目标不是让 C/C++ 消失</h2><p>很多关于 Rust 的争论，一开始就偏离了重点。有人认为 Rust 不可能取代 C/C++，因为 Linux、Windows、OpenSSL、ffmpeg、LLVM、Unreal、Chrome、数据库和嵌入式系统都不会重写。这没有问题。但更现实的目标，并不是将所有 C/C++ 存量系统重写一遍，而是减少 C 和 C++ 在新增项目中的默认地位，让未来更多系统工程的新项目不再首先选择它们。</p><p>过去，项目的语言选择往往遵循一条熟悉的路径：追求性能时选 C++，需要底层控制或贴近硬件时选 C，需要操作系统组件、驱动、数据库、存储或网络栈时选 C/C++，不想引入 GC 时也常常选 C++。Rust 想改变的正是这条默认链条。它并不是说 C/C++ 会在明天消失，而是在问：如果今天从零开始编写一个系统组件，尤其是安全敏感、面向网络或处理不可信输入的组件，为什么还要默认选择 C/C++？当行业心智从 “系统项目默认 C/C++，除非有理由不用”，转为 “系统项目先考虑 Rust，除非有理由必须使用 C/C++”，Rust 在新增项目上的目标便已实现。因此，这场竞争并不是消灭存量，而是争夺新增。</p><h2 id="%E6%88%90%E7%86%9F%E8%B5%84%E4%BA%A7%E5%92%8C%E6%96%B0%E9%A1%B9%E7%9B%AE%E4%B8%8D%E6%98%AF%E4%B8%80%E5%9B%9E%E4%BA%8B" tabindex="-1">成熟资产和新项目不是一回事</h2><p>安全领域很能说明成熟资产与新项目的差别。仅因 Rust 具有内存安全特性，就断言 OpenSSL 应被 rustls 替代，并不足以构成完整判断。选择 TLS 库时，语言只是其中一项因素；项目负责人还会考察它经历过多少真实攻击与多年审计，是否支持各种平台并能与客户端、服务器和证书系统互操作，是否具备合规认证路径、漏洞响应机制和长期维护者，以及它是否已在银行、云厂商、浏览器、操作系统和大型企业的真实环境中部署过。出问题时由谁负责，同样是选择的一部分。</p><p>OpenSSL 虽然以 C 编写，也出现过严重漏洞，但它被攻击、审计、修复和大规模部署过，并在各种输入与环境中积累了经验。年轻的 Rust TLS 库即便内存安全特性更强，也不自动意味着整体安全风险更低。TLS 库还涉及协议状态机、证书链和 X.509 解析、密码套件选择、降级与重放防护、随机数使用、常数时间实现、侧信道、API 易用性、平台兼容、硬件加速、合规认证、长期审计、供应链和真实世界互操作性。Rust 主要处理语言层面的内存安全，不能自动保证这些方面没有漏洞，也不能立即补足十几二十年的审计信用。</p><p>因此，把成熟稳定的 OpenSSL 换成一个年轻 Rust 库，并不会只因 “Rust 更安全” 就成为必然选择。但从零编写新的安全组件时，情况会不同。证书、图片、字体、压缩格式和网络协议解析器，以及 sandbox 边界、WebAssembly runtime、身份认证网关、密钥管理、安全扫描、边界代理、VPN 和新协议栈，都需要处理大量不可信输入。此时继续选择更容易出现 use-after-free、buffer overflow、double free、越界访问和数据竞争的语言，需要给出明确理由。更准确地说，OpenSSL 未必会被 rustls 替代，但新的同类安全资产未必还会以 C 为默认实现语言。</p><h2 id="rust-%E7%9A%84%E5%86%85%E5%AD%98%E5%AE%89%E5%85%A8%E6%98%AF%E5%90%A6%E5%B7%B2%E7%BB%8F%E8%B6%B3%E5%A4%9F%E9%87%8D%E8%A6%81" tabindex="-1">Rust 的内存安全是否已经足够重要</h2><p>也应避免把 Rust 的安全能力说得过满。Rust 在语言层面主要解决内存安全和一部分并发安全问题，例如 use-after-free、double free、buffer overflow、越界读写、悬垂指针、迭代器失效、部分未初始化内存、数据竞争和资源生命周期混乱。这些确实是 C/C++ 安全漏洞中的重要来源，浏览器、操作系统和网络服务中的许多高危漏洞都与它们有关。</p><p>但 Rust 不会自动解决密码算法、协议设计、认证流程、证书验证、权限模型和状态机的正确性，也不能保证常数时间实现、侧信道防护、供应链安全、依赖治理、API 设计、系统配置、运维、合规和审计。因此，说 Rust 主要解决内存安全，大体上是成立的。与此同时，<code>Option</code>、<code>Result</code>、enum、模式匹配、所有权、借用、移动语义、trait 和类型状态建模，确实能减少一部分安全工程错误。它们可以区分已验证与未验证的证书，限制握手前后的状态混用，避免明文密钥被任意复制，并把资源释放、跨线程共享、错误处理和权限 token 的使用方式表达得更明确。</p><p>这些能力并不等同于密码学正确性，但属于安全工程的一部分。Rust 不能自动让安全组件正确，却能使许多危险错误无法通过编译，并帮助开发者明确安全状态和资源边界。面对 OpenSSL、BoringSSL、LibreSSL、libsodium 等成熟项目，年轻 Rust 库的这些优势也未必能压过长期部署和审计形成的信用。更可能的情况是，成熟的 C/C++ 安全基础设施继续存在；新增安全边界组件更多考虑 Rust、Go、Java、C# 等内存安全语言；关键密码库仍需经过长期部署、审计、攻击和修复，才能建立信用。</p><h2 id="%E4%B8%BA%E4%BB%80%E4%B9%88%E5%BE%88%E5%A4%9A%E8%AF%AD%E8%A8%80%E6%8C%91%E6%88%98-c%2Fc%2B%2B-%E5%A4%B1%E8%B4%A5%EF%BC%9F" tabindex="-1">为什么很多语言挑战 C/C++ 失败？</h2><p>C/C++ 难以被挑战，并不是因为它们没有缺点。内存安全、UB、构建系统、包管理、C++ 的语言复杂度、模板报错、ABI 和大型工程维护，长期都是实际问题，安全漏洞的代价也很高。但它们同时具备一组少见的能力：性能可以接近硬件上限，没有 GC，资源控制相对可预测，能够操作内存布局并贴近 ABI，也能用于操作系统、驱动、数据库、浏览器、游戏引擎、裸机和嵌入式环境。C ABI 是事实上的跨语言接口标准，平台支持广泛，存量和生态庞大，调试器、profiler、sanitizer 与编译器工具链也已经成熟。</p><p>因此，挑战 C/C++ 的语言不能只说明自己更安全或更易写，还必须回答一系列工程问题：是否有 GC，能否用于裸机和内核，能否控制内存布局并与 C ABI 交互，性能能否接近 C/C++，资源释放是否可预测，能否渐进迁移，工具链是否足以支撑大型工程，以及大型组织是否愿意采用。历史上的许多语言都没有同时回答好这些问题。</p><h3 id="java-%E5%92%8C-c%23" tabindex="-1">Java 和 C#</h3><p>Java 和 C# 都取得了广泛采用，承接了大量原本可能由 C++ 编写的企业、服务器、桌面和平台应用，但没有真正取代 C/C++ 的系统编程位置。两者都有 GC 和运行时，不适合裸机、内核、驱动或硬实时场景；内存布局的控制也不够直接，ABI 与硬件之间隔着一层，延迟和资源释放并不完全由程序员直接决定。这并非否定 Java 或 C#，而是说明它们主要覆盖应用层和企业层，对 C++ 的影响是局部的。</p><h3 id="go" tabindex="-1">Go</h3><p>Go 在云原生、网络服务、平台工程和基础设施工具中也很成功。Docker、Kubernetes、Prometheus、etcd 和 Terraform 等生态使它有了广泛影响力。其简洁的语言设计、较快的编译速度、方便部署、goroutine、标准库和较为一致的工程体验，吸引了许多团队；不少原本可能用 C++ 编写的服务端基础设施项目因此转向 Go。</p><p>不过 Go 仍有边界。它带有 GC，底层控制力弱于 C/C++/Rust，类型系统相对保守，也不适合内核、驱动、裸机、极端低延迟和大量依赖精细内存布局的项目。它的性能足以覆盖许多场景，但并不追求 C/C++ 的极限模型。因此，Go 更接近面向云基础设施的简化选择，而不是 C++ 的直接替身。</p><h3 id="d" tabindex="-1">D</h3><p>D 语言曾经非常像 “更好的 C++”。它有：系统编程能力；高性能；现代语法；模板；可选 GC；C 互操作。但 D 没有成为主流。原因包括：生态没有起来；标准库和编译器路线分裂；社区规模有限；企业背书不足；没有形成不可替代的核心叙事；C<ins>11 之后 C</ins> 自己吸收了一部分现代特性；没有像 Rust 那样抓住 “内存安全” 这个政策级、组织级驱动力。D 是一个典型例子：技术上很有野心，但没有形成产业势能。</p><h3 id="ada%2Fspark" tabindex="-1">Ada/SPARK</h3><p>Ada 和 SPARK 在高可靠领域非常强。它们适合：航空航天；军工；高可靠系统；需要形式化验证的项目。但它们没有成为通用系统编程主流。原因包括：社区小；工具链和生态相对封闭；普通互联网公司采用少；学习和行业门槛高；开源世界存在感有限；语言形象偏专用、高可靠、政府 / 军工。Ada 是局部成功，但不是广义替代。</p><h3 id="swift" tabindex="-1">Swift</h3><p>Swift 很现代，也有不错性能。但它主要成功在 Apple 生态。它的问题是：心智上绑定 Apple；Linux/服务器/嵌入式/内核生态弱；系统编程社区心智不如 Rust；没有形成 “C/C++ 安全替代者” 的强叙事。Swift 是成功语言，但不是广义 C/C++ 挑战者。</p><h3 id="zig" tabindex="-1">Zig</h3><p>Zig 是值得关注的语言。它强调简洁、无 GC 和显式控制，C 互操作与交叉编译体验较好，也适合底层、小系统和工具链场景；相较 Rust，其学习曲线通常更平缓。两者的差异在于，Zig 更接近现代化的 C，而 Rust 更强调内存安全的系统编程。Zig 没有 Rust 那样的强所有权和借用模型，也没有将内存安全作为核心叙事。因此，它可能会进入一部分希望获得更现代工具链与表达方式的 C 场景，但未必取代 Rust 在内存安全系统工程中的定位。</p><h2 id="rust-%E4%B8%BA%E4%BB%80%E4%B9%88%E7%89%B9%E6%AE%8A%EF%BC%9F" tabindex="-1">Rust 为什么特殊？</h2><p>Rust 之所以被认为是 C/C++ 的强力挑战者，不是因为它语法时髦，也不是因为它社区热闹，而是因为它第一次比较完整地回答了系统程序员最在意的几个问题。</p><h3 id="rust-%E6%B2%A1%E6%9C%89-gc" tabindex="-1">Rust 没有 GC</h3><p>这是关键。GC 并非没有价值，它适合大量应用开发；但对内核、驱动、bootloader、部分嵌入式和硬实时系统、低延迟交易系统、游戏引擎关键路径、数据库存储引擎、密码库和基础库而言，额外运行时与不可直接控制的回收行为都可能成为限制。系统 runtime 本身也难以依赖另一个复杂 runtime。Rust 的特殊之处在于，它不依靠 GC 管理内存，而是在编译期尽量证明内存使用合法，因此能够进入 C/C++ 长期覆盖的核心场景。</p><h3 id="rust-%E4%BF%9D%E7%95%99%E4%BA%86%E7%B3%BB%E7%BB%9F%E7%BC%96%E7%A8%8B%E8%83%BD%E5%8A%9B" tabindex="-1">Rust 保留了系统编程能力</h3><p>Rust 能完成许多传统 C/C++ 所承担的工作，包括控制内存分配、区分栈与堆、使用自定义 allocator、零成本抽象、指针操作、SIMD、FFI、<code>no_std</code>、裸机和嵌入式开发，以及操作系统组件、驱动、WebAssembly runtime、数据库、编译器和网络栈。许多底层操作仍需使用 <code>unsafe</code>，但其思路是将不可避免的危险操作限制在明确的边界内，让安全代码成为默认。相比之下，C/C++ 的更大一部分语言空间都可能出现不安全操作；这种边界差异对大型团队和安全审计有实际影响。</p><h3 id="rust-%E6%94%BB%E5%87%BB%E7%9A%84%E6%98%AF%E7%BB%93%E6%9E%84%E6%80%A7%E9%97%AE%E9%A2%98" tabindex="-1">Rust 攻击的是结构性问题</h3><p>C/C++ 的内存安全问题不能只依靠开发者更谨慎来解决。静态分析、code review、sanitizers、fuzzing、RAII、smart pointers、Core Guidelines、现代 C++、编码规范、安全子集和生命周期分析都很有用，却没有从根本改变语言模型：悬垂指针、越界访问、重复释放、错误别名、UB 和并发数据竞争仍可能出现。Rust 的吸引力在于，它不只是要求程序员更加小心，而是让大量错误无法通过编译。这也解释了为什么企业、安全团队和政府机构越来越重视内存安全语言；这一政策与产业背景，是以往的挑战者并未同时具备的条件。</p><h3 id="rust-%E5%8F%AF%E4%BB%A5%E6%B8%90%E8%BF%9B%E8%BF%9B%E5%85%A5-c%2Fc%2B%2B-%E7%B3%BB%E7%BB%9F" tabindex="-1">Rust 可以渐进进入 C/C++ 系统</h3><p>Rust 不需要你一次性重写几百万行 C++。它可以走现实路线：老核心继续 C/C++；新模块用 Rust；新解析器用 Rust；新安全边界组件用 Rust；新 CLI 工具用 Rust；新存储组件用 Rust；新网络代理用 Rust；通过 FFI 和原系统连接；慢慢扩大 Rust 代码比例。这就是 Rust 最危险的地方。它不需要马上替换整个系统。它只需要在每一次新增模块时赢一点点。长期看，新增项目份额就会变化。</p><h3 id="cargo-%E5%92%8C%E5%B7%A5%E5%85%B7%E9%93%BE%E4%BD%93%E9%AA%8C%E6%98%AF%E5%B7%A8%E5%A4%A7%E4%BC%98%E5%8A%BF" tabindex="-1">Cargo 和工具链体验是巨大优势</h3><p>C/C++ 的工程体验长期很痛苦：Makefile；CMake；Autotools；Bazel；vcpkg；Conan；系统包管理器；平台 SDK；编译器差异；链接问题；ABI 问题；依赖版本问题；跨平台构建问题。C++ 程序员往往已经习惯痛苦了，但新团队、新项目、新人并不一定愿意继续承受。Rust 的 Cargo、crates.io、rustup、rustfmt、clippy、测试、文档生成这一整套工具链，对于新项目吸引力很强。Rust 不只是语言安全，它的现代工程体验也在分流 C++。</p><h2 id="rust-%E4%BC%9A%E4%B8%8D%E4%BC%9A%E8%A2%AB%E2%80%9C%E7%A8%8B%E5%92%AC%E9%87%91%E2%80%9D%E6%88%AA%E8%83%A1%EF%BC%9F" tabindex="-1">Rust 会不会被 “程咬金” 截胡？</h2><p>可能。Rust 不是终点，也不是完美语言。它有很多现实问题：学习曲线陡；borrow checker 难；生命周期让新人崩溃；编译速度慢；async 复杂；trait/generic 系统有时过于绕；宏系统强但复杂；<code>unsafe</code> 仍然不可避免；C++ 互操作不够自然；ABI 稳定性不足；某些领域生态薄弱；crate 依赖树和供应链治理有风险。所以未来出现一个新语言，说：我有 Rust 的无 GC、性能和内存安全，但语法更简单、编译更快、异步更自然、C++ 互操作更好。这是完全可能的。潜在 “程咬金” 有几类。</p><h3 id="zig-1" tabindex="-1">Zig</h3><p>Zig 可能会在一些 C 的生态位上成功。它简洁、直接、无 GC、C 互操作强、交叉编译体验好。但 Zig 不以强内存安全作为核心卖点。所以它更可能成为：</p><p>更现代、更舒服、更工程化的 C。而不是全面取代 Rust 的安全系统语言。</p><h3 id="carbon-%2F-cpp2" tabindex="-1">Carbon / Cpp2</h3><p>Carbon 和 Cpp2 这类东西，本质上想给 C++ 找一条现代化迁移路线。如果它们能做到：与 C++ 无缝互操作；迁移成本低；性能保持；工具链成熟；大厂支持；安全性显著提升；保留 C++ 生态资产。那它们会对 Rust 形成很大威胁。因为很多公司最大的问题不是 “Rust 好不好”，而是：我已经有 500 万行 C++，怎么办？如果有一种语言能作为 C++ 的自然继承者，并且迁移成本远低于 Rust，那它当然有吸引力。但目前看，这条路还非常不确定。C++ 的历史包袱太重。要在保留兼容性的同时显著改善内存安全，极其困难。</p><h3 id="mojo" tabindex="-1">Mojo</h3><p>Mojo 更偏 AI、高性能计算、Python 生态加速。它如果成功，可能会影响：AI 基础设施；数值计算；GPU kernel；Python 性能扩展；高性能计算。Mojo 未必正面替代 Rust，而可能直接吃掉一些 Rust 本来可能进入的 AI/HPC 新领域。</p><h3 id="%E5%AE%89%E5%85%A8-c%2B%2B" tabindex="-1">安全 C++</h3><p>C++ 社区不是什么都不做。未来可能会有：lifetime profile；safety profiles；静态分析强化；sanitizers 常态化；C++ Core Guidelines；编译器强制安全模式；受限 C++ 子集；Herb Sutter 的 Cppfront/Cpp2；Google、Microsoft 等推动安全 C++。如果 C++ 能在不破坏生态的情况下显著降低内存安全风险，Rust 的上升速度会受影响。但这很难。因为 C++ 最大的问题是兼容性。它不能轻易禁止大量历史写法。它的自由和混乱是同一个硬币的两面。</p><h3 id="%E4%BD%86-rust-%E4%B8%8D%E4%BC%9A%E8%A2%AB%E2%80%9C%E7%AA%81%E7%84%B6%E2%80%9D%E6%88%AA%E8%83%A1" tabindex="-1">但 Rust 不会被 “突然” 截胡</h3><p>即使未来出现更好的语言，Rust 也不会突然消失。语言生态变化很慢。一个新语言要经历：</p><p>爱好者使用；小工具验证；中型项目采用；大公司试点；工具链成熟；生态形成；招聘市场出现；关键基础设施采用；安全审计和长期部署积累；形成产业信任。这个周期通常是 5 到 15 年。Rust 现在已经不是玩具语言。它已经进入：</p><p>Linux kernel；Android；Windows 的部分安全讨论和组件；AWS；Cloudflare；Google；Microsoft；Mozilla；WebAssembly 生态；Firecracker；Wasmtime；TiKV；Vector；Deno；Ruff；uv；SWC；ripgrep；fd；bat；starship；Zed 等工具和项目。Rust 已经占住了一个很强的心智：Rust = memory safety + no GC + systems programming + performance + C/C++ alternative。后来者要赢，不能只是更好一点，必须好很多，并且还要花十年级别积累信任。所以更可能的未来不是 Rust 被某个语言一击打倒，而是：Rust 还没完全吃掉 C/C++，就被 Zig、Carbon、Mojo、安全 C++、Go 等从不同方向分流。不是一门语言统一天下，而是多语言重新划分生态位。</p><h2 id="c%2Fc%2B%2B-%E8%A2%AB%E5%88%86%E6%B5%81%E6%98%AF%E5%BF%85%E7%84%B6" tabindex="-1">C/C++ 被分流是必然</h2><p>C/C++ 的一部分市场，本来就是历史偶然和路径依赖。很多项目过去用 C++，不是因为 C++ 最适合，而是因为：当时没有 Rust；Go 还没成熟；Java/C# 有 GC；Python 太慢；需要性能；需要系统接口；团队习惯；行业默认。但很多项目其实不需要 C++ 那种极端自由，比如：普通业务系统；普通网络服务；大量工具；安全扫描器；数据处理管道；日志系统；包管理器；新的 CLI；新的代理服务；普通后端；部分中间件；部分系统组件。这些项目需要的是：足够性能；可维护性；安全性；好部署；好招聘；好工具链；少踩坑。它们并不需要：全局裸指针自由；到处 reinterpret_cast；手动释放；Undefined Behavior；复杂模板怪物；任意内存别名；任意对象生命周期 hack。过去很多项目是 “用大炮打蚊子”：只是想要性能，却被迫承受 C++ 的复杂性和内存风险。所以这些领域被 Rust、Go、Java、C#、Swift、Python、TypeScript 分流是必然的。C++ 会失去很多本来不该属于它的新增项目。这不是坏事。反而说明语言生态变成熟了。</p><h2 id="c-%E5%92%8C-c%2B%2B-%E4%BB%8D%E6%9C%89%E5%BE%88%E9%9A%BE%E8%A2%AB%E5%88%86%E6%B5%81%E7%9A%84%E4%B8%9C%E8%A5%BF" tabindex="-1">C 和 C++ 仍有很难被分流的东西</h2><p>虽然 C/C++ 会被分流，但不能说它们只靠历史活着。即使不谈存量生态，它们也有语言模型层面的硬优势。而且 C 和 C++ 的硬优势不一样。</p><h3 id="c-%EF%BC%9A%E6%9E%81%E8%96%84%E5%BA%95%E5%B1%82%E8%BE%B9%E7%95%8C%E8%83%BD%E5%8A%9B" tabindex="-1">C ：极薄底层边界能力</h3><p>C 最强的地方，不是它安全，不是它现代，而是它足够薄。C 接近一种 “可移植汇编”。它适合表达：函数；指针；数值；struct；内存布局；调用约定；系统边界；硬件寄存器；ABI。C 的最硬优势之一是 C ABI。几乎所有语言都能调用 C：Rust 调 C；Python 调 C；Java 通过 JNI 调 C；C# P/Invoke 调 C；Go 调 C；Swift 调 C；Zig 调 C；Lua/Ruby/Node 原生扩展也大量围绕 C ABI。C ABI 是事实上的跨语言最低公分母。相比之下：C++ ABI 复杂；Rust ABI 不稳定；Go/Java/C# 有运行时模型；Swift ABI 有平台语境；Python 不是系统 ABI。所以未来即使一个库内部用 Rust 写，对外接口很可能仍然是 C ABI，比如：</p><figure class="highlight c"><table><tbody><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line"><span class="type">int</span> <span class="title function_">library_do_something</span><span class="params">(<span class="type">const</span> <span class="type">char</span>* input, <span class="type">size_t</span> len)</span>;</span><br><span class="line"></span><br></pre></td></tr></tbody></table></figure><p>C 可能不再是实现语言首选，但会长期是接口语言、边界语言、胶水语言。</p><h4 id="c-%E9%80%82%E5%90%88%E6%9C%80%E5%B0%8F%E8%BF%90%E8%A1%8C%E6%97%B6%E5%92%8C%E8%A3%B8%E6%9C%BA" tabindex="-1">C 适合最小运行时和裸机</h4><p>有些地方你什么都没有：没有堆；没有线程；没有文件系统；没有动态链接器；没有异常；没有标准库；没有完整 runtime；甚至还在启动阶段，比如：bootloader；内核早期初始化；裸机固件；芯片 bring-up；runtime stub；freestanding 环境；极小 MCU 程序；硬件测试程序。C 在这里非常自然。Rust 也有 <code>no_std</code>，Zig 也能做，但 C 的语言模型天生就很薄。你基本知道一段 C 会生成什么样的机器码，需要什么运行时支持。这在极底层仍然很有价值。</p><h4 id="c-%E9%80%82%E5%90%88%E7%A1%AC%E4%BB%B6%E5%AF%84%E5%AD%98%E5%99%A8" tabindex="-1">C 适合硬件寄存器</h4><p>硬件手册里经常直接给 C 宏或 C 结构体，比如：</p><figure class="highlight c"><table><tbody><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta">#<span class="keyword">define</span> UART_BASE 0x40001000</span></span><br><span class="line"><span class="meta">#<span class="keyword">define</span> UART_DR   (*(volatile uint32_t *)(UART_BASE + 0x00))</span></span><br><span class="line"><span class="meta">#<span class="keyword">define</span> UART_SR   (*(volatile uint32_t *)(UART_BASE + 0x04))</span></span><br><span class="line"></span><br></pre></td></tr></tbody></table></figure><p>这种东西用 C 写就是自然。C 当然有坑：padding；alignment；endianness；bit field 可移植性；strict aliasing；volatile 语义复杂。但它和硬件文档、寄存器、协议头、DMA buffer、boot protocol 的心智距离很近。因此 C 很难从这些底层边界彻底退出。</p><h3 id="c%2B%2B%EF%BC%9A%E5%A4%8D%E6%9D%82%E9%AB%98%E6%80%A7%E8%83%BD%E5%B7%A5%E7%A8%8B%E8%A1%A8%E8%BE%BE%E5%8A%9B" tabindex="-1">C++：复杂高性能工程表达力</h3><p>C++ 的硬优势和 C 不一样。C 是薄、简单、贴近 ABI。C++ 是复杂、强大、能承载大型高性能抽象系统。它的核心能力是：</p><p>零成本抽象 + 极端自由 + 能容纳现实工程的混乱。</p><h4 id="%E9%9B%B6%E6%88%90%E6%9C%AC%E6%8A%BD%E8%B1%A1%E4%BB%8D%E7%84%B6%E9%9D%9E%E5%B8%B8%E5%BC%BA" tabindex="-1">零成本抽象仍然非常强</h4><p>C++ 可以写很高级的抽象，同时努力不为没用到的东西付运行时成本。它有：templates；constexpr；concepts；RAII；move semantics；inline；operator overloading；expression templates；CRTP；policy-based design；allocator-aware containers；ranges；metaprogramming。这些东西复杂，但高手可以用它们构建非常强的高性能库。比如 Eigen 这种线性代数库，就大量依赖 expression templates，把数学表达式压到编译期优化。游戏引擎、图形库、数值库、HPC 库、数据库执行引擎，也经常需要这种 “高层抽象 + 低层性能” 的混合能力。Rust 也有零成本抽象，而且内存安全更强。但 C++ 在某些领域的表达自由度和历史积累非常深。尤其是当你需要把高级抽象、手写内存管理、平台特化和老接口全部揉在一起时，C++ 仍然很顺手。</p><h4 id="c%2B%2B-%E7%9A%84-raii-%E8%A1%A8%E8%BE%BE%E9%9D%9E%E5%B8%B8%E6%88%90%E7%86%9F" tabindex="-1">C++ 的 RAII 表达非常成熟</h4><p>C++ 的 RAII 是极其强大的思想。资源不只是内存，还包括：文件句柄；socket；mutex；GPU resource；texture；command buffer；transaction；lock guard；mmap；database handle；temporary arena；scope rollback。C++ 用构造函数和析构函数表达资源生命周期，非常自然。Rust 的 ownership 和 Drop 在这方面也很强，甚至更安全。但 C++ 的 RAII 与对象模型结合得非常深，很多工程师已经形成了很成熟的资源管理习惯。在一些复杂系统中，C++ 的灵活性仍然非常高。</p><h4 id="c%2B%2B-%E7%89%B9%E5%88%AB%E9%80%82%E5%90%88%E5%85%B1%E4%BA%AB%E5%8F%AF%E5%8F%98%E7%8A%B6%E6%80%81" tabindex="-1">C++ 特别适合共享可变状态</h4><p>很多现代安全语言都希望你说清楚：谁拥有对象；谁借用对象；谁能修改对象；生命周期多长；是否跨线程；是否共享；是否可变。这是好事。但很多真实系统就是非常不规则：游戏场景图；GUI object tree；编译器 IR；数据库执行计划；ECS；observer list；callback registry；plugin system；cache；双向引用；parent-child 互指；图结构；异步任务图。C++ 对这些东西非常宽容。你可以混用：裸指针；<code>unique_ptr</code>；<code>shared_ptr</code>；<code>weak_ptr</code>；引用；handle；ID；arena；intrusive container；object pool。Rust 也能做，但往往需要：<code>Rc&lt;RefCell&lt;T&gt;&gt;</code>；<code>Arc&lt;Mutex&lt;T&gt;&gt;</code>；arena；generational index；slotmap；unsafe；重新设计所有权结构；更数据导向的架构。Rust 最终可能让结构更清晰，但前期架构约束更强。而 C++ 允许你直接表达很多 “不干净但现实” 的结构，比如一些很经典但复杂的数据格式。</p><h4 id="%E2%80%9C%E6%AD%AA%E9%97%A8%E9%82%AA%E9%81%93%E2%80%9D%E7%9A%84%E4%BB%B7%E5%80%BC" tabindex="-1">“歪门邪道” 的价值</h4><p>有些项目特别能说明 C/C++ 的生命力。ffmpeg 就是典型。ffmpeg 不是一个普通的视频库。它是几十年：</p><p>奇怪格式；历史兼容；坏文件；手写 SIMD；汇编优化；硬件编解码；跨平台；性能压榨；容错；黑魔法；工程妥协。堆出来的系统怪物。这种东西不是 Rust 写不出来，而是：它的价值不只是代码本身，而是几十年现实世界的脏活和经验。Rust 的语言安全当然有吸引力，但要替代 ffmpeg 这种工程怪物，不是语法更现代就够了。类似的还有一些科学计算库、数值库、HPC 库。它们可能有：Fortran 历史接口；C ABI；BLAS/LAPACK 生态；手写汇编；AVX/AVX2/AVX-512；GPU kernel；CUDA；编译器特定优化；数值稳定性经验；奇怪矩阵布局；cache blocking；SIMD trick；平台特化；“歪门邪道但有效” 的数学和工程技巧。这些项目往往不是 “干净的系统工程”，而是 “极端性能工程 + 历史兼容 + 数学技巧 + 硬件细节” 的混合物。C/C++ 很适合这种混沌。</p><h4 id="%E6%AD%AA%E9%97%A8%E9%82%AA%E9%81%93%E7%9A%84%E4%BA%BA%E4%B9%9F%E6%98%AF%E7%94%9F%E6%80%81%E4%BD%8D" tabindex="-1">歪门邪道的人也是生态位</h4><p>Heng Li 那句调侃 <sup class="footnote-ref"><a href="#footnote1">[1]</a><a class="footnote-anchor" id="footnote-ref1"></a></sup> 很有意思：</p><p><em>Am I switching to Rust? Not in the near future. I enjoy the freedom of shooting myself in the foot.</em></p><p>翻译过来就是：我会转 Rust 吗？短期不会。我享受开枪打自己脚的自由。这句话乍看像是在开玩笑，但它抓住了 C/C++ 的一种文化心理。有些程序员确实喜欢，或者确实需要：控制每一个字节；看汇编；手写 allocator；手动 SIMD；对齐优化；利用平台细节；写 JIT；做二进制 patch；维护 ABI；绕过抽象层；和编译器斗智斗勇；为 2% 性能提升重写内存布局；在危险边缘跳舞。他们不是不知道危险。他们的态度是：我知道危险，但我需要这种自由。我愿意承担代价。Rust 对这类人有时会显得管得太多。Rust 的哲学是：危险可以做，但你要进入 <code>unsafe</code>，并且把边界圈起来。C++ 的哲学更像：世界是开放的，你自己负责。对大型组织来说，Rust 的哲学更健康。但对某些顶级底层工程师、性能工程师、科学计算库作者、视频编解码专家、游戏引擎黑魔法师来说，C++ 的自由仍然非常有吸引力。而纵观那些改变人类或者创造历史的项目，不少就出自这样一群人之手。</p><h2 id="c%2B%2B-%E7%9A%84%E7%9C%9F%E6%AD%A3%E5%93%B2%E5%AD%A6" tabindex="-1">C++ 的真正哲学</h2><p>C++ 之父 Bjarne Stroustrup 有一段话很值得反复看：</p><p>Someone who claims to have a perfect programming language is either a salesman or a fool, or both. <sup class="footnote-ref"><a href="#footnote2">[2]</a><a class="footnote-anchor" id="footnote-ref2"></a></sup></p><p>声称自己有完美编程语言的人，要么是销售，要么是傻瓜，或者两者都是。他还说过：</p><p>My aim was for C++ to become the second best language for many things.</p><p>他的目标不是让 C++ 成为所有事情的最佳语言，而是成为很多事情的第二好语言。这句话一开始会让很多人震惊：</p><p>为什么不追求第一？</p><p>但这是非常现实的语言哲学。因为：</p><p>There can’t be a language that’s best for everything and everybody.</p><p>不可能有一门语言对所有事、所有人都是最佳。每个领域理论上都可以有最理想的 DSL：SQL 适合关系查询；shader language 适合 GPU shader；Verilog/VHDL 适合硬件描述；regex 适合文本模式；Python 适合胶水和 AI 上层；Lua 适合嵌入脚本；MATLAB/R 适合统计和数值原型；Rust 适合安全系统组件；C 适合 ABI 和裸机；C++ 适合复杂高性能框架。但这些理想语言之间有一个问题：它们怎么互操作？如果每个领域都用自己的小语言，系统怎么构建？怎么调试？怎么部署？怎么共享内存？怎么组合成一个大型产品？Bjarne 的回答是：需要一个通用框架，C++ 就试图成为这样的框架。C++ 的强项不是每个点都最优雅，而是它可以承载各种风格：C 风格；面向对象；泛型；函数式；模板元编程；编译期计算；宏；RAII；异常；无异常；RTTI；无 RTTI；裸指针；智能指针；手写内存池；嵌入式 DSL；平台 hack。C++ 里面可以长出：Eigen；Qt；Unreal；LLVM；Boost；ranges；coroutine framework；allocator framework；expression templates；游戏对象系统；GUI 框架；编译期 DSL；GPU 抽象层。这些东西不一定美，但它们能装下现实世界的复杂性。所以 C++ 的哲学可以概括为：我不保证你不受伤，但我给你最大表达空间。Rust 的哲学则是：我尽量不让你受伤，但你要按照我的规则表达问题。这不是简单的先进和落后。这是两种工程哲学。</p><h2 id="%E6%9C%AA%E6%9D%A5%E6%A0%BC%E5%B1%80" tabindex="-1">未来格局</h2><p>未来较可能的格局既不是 Rust 消灭 C++，也不是 C++ 完全不受影响，而是 C/C++ 在新增项目中被系统性分流：Rust 在新系统工程中扩大采用，C++ 保留复杂高性能场景，C 则继续承担底层边界和 ABI 的角色。</p><h3 id="rust-%E7%9A%84%E4%B8%BB%E6%88%98%E5%9C%BA" tabindex="-1">Rust 的主战场</h3><p>Rust 较容易进入那些需要接近 C/C++ 的性能和控制力，又不希望继续承担其内存安全风险的新系统项目。例如新网络基础设施、代理和网关、存储与数据库组件、安全边界组件、各类解析器、虚拟化和容器基础设施、WebAssembly runtime、CLI、构建工具、包管理器和开发工具链，以及部分 OS 组件、中高端嵌入式、云基础设施和高性能服务。在这些场景中，Rust 会逐渐成为常被优先评估的选项。</p><h3 id="c%2B%2B-%E7%9A%84%E4%BF%9D%E7%95%99%E5%9C%B0" tabindex="-1">C++ 的保留地</h3><p>C++ 仍会广泛用于游戏引擎、图形渲染、音视频编解码、ffmpeg 一类长期演化的项目、复杂高性能库、HPC、科学计算底层、ML runtime、物理仿真、CAD/CAE/EDA、高频交易、浏览器部分模块、工业软件和大型桌面软件。对于需要大量底层处理、平台特化和历史兼容的系统，它的表达自由度和抽象能力仍有实际价值。</p><h3 id="c-%E7%9A%84%E4%BF%9D%E7%95%99%E5%9C%B0" tabindex="-1">C 的保留地</h3><p>C 会长期存在于 C ABI、libc、syscall 接口、bootloader、裸机、芯片 SDK、内核极底层、语言 runtime、动态库接口、嵌入式小固件、硬件寄存器定义、平台胶水和 freestanding 环境中。它在许多项目中的角色，可能会从主要实现语言逐步更多转向底层公共边界语言。</p><h3 id="%E5%85%B6%E4%BB%96%E8%AF%AD%E8%A8%80%E7%9A%84%E9%A2%86%E5%9C%B0" tabindex="-1">其他语言的领地</h3><p>许多领域本就不必由 Rust 或 C++ 主导。企业业务常使用 Java、C# 或 Kotlin，云服务常使用 Go、Java 或 C#；AI 上层与数据分析多依赖 Python、R 和 SQL，前端使用 TypeScript，移动端使用 Swift、Kotlin 或 Dart，脚本自动化使用 Python 和 Shell。Mojo、Triton、CUDA 等也可能在 AI/HPC 中形成新的路径。Rust、C++ 和其他现有或未来的语言，都不可能是所有问题的最佳答案，这也印证了 “没有一门语言适合所有事情和所有人”。</p><h2 id="%E4%BD%9C%E4%B8%BA-c%2B%2B-%E5%BC%80%E5%8F%91%E8%80%85%E7%9C%9F%E6%AD%A3%E5%BA%94%E8%AF%A5%E5%AD%A6%E4%BB%80%E4%B9%88%EF%BC%9F" tabindex="-1">作为 C++ 开发者真正应该学什么？</h2><p>这个讨论最终会落到职业发展上。对 C++ 开发者而言，若能力只停留在语言语法、STL、少量模板和业务逻辑，而缺少系统、性能、内存模型、ABI、工具链、安全、并发和其他语言生态的认识，选择空间可能会变窄。这并不只与 Rust 有关；多年来，Java、Go、C#、Rust、Python 和 TypeScript 已在不同场景中承接了原本可能由 C++ 完成的项目。学习 Rust 是一种补充方式，而 C++ 开发者更有价值的能力通常位于复杂系统和性能工程的深处。</p><h4 id="%E5%AD%A6-rust%EF%BC%8C%E8%A1%A5%E5%86%85%E5%AD%98%E5%AE%89%E5%85%A8%E6%80%9D%E7%BB%B4" tabindex="-1">学 Rust，补内存安全思维</h4><p>即使主要使用 C++，学习 Rust 也有帮助，并不意味着必须转向 Rust。它会促使开发者重新理解所有权、借用、生命周期、移动语义、别名、共享可变性、数据竞争，以及 API 如何表达所有权和缩小 <code>unsafe</code> 的边界。再回头写 C++ 时，便会更自然地审视对象由谁拥有、谁只是观察者、谁可以修改、生命周期何时结束、引用是否可能悬垂，以及 <code>unique_ptr</code>、<code>shared_ptr</code>、<code>span</code>、<code>string_view</code> 或 move-only 对象是否更合适。Rust 对 C++ 开发者的意义，不只是多掌握一门语言，也是建立更严格的所有权和生命周期意识。</p><h3 id="%E6%B7%B1%E6%8C%96-c%2B%2B-%E7%9A%84%E7%8E%8B%E7%89%8C%E5%8C%BA%E8%83%BD%E5%8A%9B" tabindex="-1">深挖 C++ 的王牌区能力</h3><p>C++ 开发者可以强化性能工程、系统编程、内存模型、并发、ABI、编译链接、工具链、crash debugging、sanitizers、fuzzing、profiling、SIMD、allocator、cache locality、lock-free、NUMA、CPU pipeline 和 branch prediction 等能力。关键不在于掌握多少语法，而在于能解释并处理具体问题：代码为何变慢，cache miss 或 false sharing 从何而来，哪里可能触发 UB，线上 core dump、链接失败和 ABI 不兼容如何发生，allocator 为何造成性能抖动，锁为何成为瓶颈，数据结构为何不适合 CPU cache。这些能力决定了复杂工程中的处理范围。</p><h3 id="%E9%80%89%E4%B8%80%E4%B8%AA%E8%A1%8C%E4%B8%9A%E7%BA%B5%E6%B7%B1" tabindex="-1">选一个行业纵深</h3><p>C++ 最好与一个具体的技术领域结合。例如，音视频会涉及 ffmpeg、codec、container format 与 SIMD；游戏需要面对引擎、ECS、渲染、资源和脚本系统；数据库、网络、编译器、图形、ML runtime、嵌入式、低延迟系统和科学计算也各有其底层问题。C++ 的能力往往在深入这些复杂系统之后才会显现出来。</p><h3 id="%E5%BD%A2%E6%88%90-t-%E5%9E%8B%E8%83%BD%E5%8A%9B" tabindex="-1">形成 T 型能力</h3><p>横向上，需要理解不同语言适合解决什么问题：Rust 面向安全系统工程，C 面向 ABI 和极底层，Go 常见于云原生和平台服务，Python 用于 AI、脚本与胶水，TypeScript 用于前端和工具链，Java/C# 用于企业与业务系统，Zig 和 Mojo 则提供了值得关注的新方向。纵向上，则需要积累 C++ 复杂工程的能力。成熟的 C++ 开发者并不是到处推行 C++，而是能判断何时使用它、何时选择别的工具。</p><h2 id="%E6%9C%AA%E6%9D%A5%E4%B8%8D%E6%98%AF%E5%8F%96%E4%BB%A3%EF%BC%8C%E8%80%8C%E6%98%AF%E9%87%8D%E6%96%B0%E5%88%86%E5%B7%A5" tabindex="-1">未来不是取代，而是重新分工</h2><p>这场讨论不必归结为 “Rust 会不会取代 C++”。Rust 会在新系统工程中扩大采用，尤其会影响安全敏感的新项目；C++ 仍会服务于复杂高性能、底层处理、历史兼容和长期演化的大型工程；C 继续留在 ABI、裸机、系统边界和平台胶水等位置。业务、AI、前端、移动和脚本，也会由更贴合场景的语言承担。</p><p>语言并不沿着一条直线更替，而是在新的需求里调整位置。Rust 改变的是新项目的起点，C++ 保留的是复杂工程的纵深，C 守住的是系统边界。对开发者而言，理解这些边界，比站在某一门语言一边更重要；工具各有来处，也各有去处。</p><p>这不是语言战争的结束。</p><p>这只是软件工业开始更成熟地分配工具。</p><p>这何尝不是一件好事？</p><hr class="footnotes-sep"><section class="footnotes"><ol class="footnotes-list"><li id="footnote1" class="footnote-item"><p><a href="https://lh3.github.io/2024/03/05/what-high-performance-language-to-learn">What high-performance language to learn?</a> <a href="#footnote-ref1" class="footnote-backref">↩︎</a></p></li><li id="footnote2" class="footnote-item"><p><a href="https://www.stroustrup.com/quotes.html">Bjarne Stroustrup Quotes</a> <a href="#footnote-ref2" class="footnote-backref">↩︎</a></p></li></ol></section>]]>
      </content:encoded>
    </item>
    <item>
      <title>记梦</title>
      <link>https://www.lynx3.me/article/975b2385/</link>
      <description>记一个关于吃饭的、荒诞的梦。</description>
      <author>LynxCatTheThird</author>
      <category domain="https://www.lynx3.me/categories/%E9%9A%8F%E6%84%9F/">随感</category>
      <category domain="https://www.lynx3.me/tags/A0/">A0</category>
      <category domain="https://www.lynx3.me/tags/%E9%9A%8F%E6%84%9F/">随感</category>
      <pubDate>Mon, 19 Jan 2026 04:57:26 GMT</pubDate>
      <content:encoded>
        <![CDATA[<div class="hbe hbe-container" id="hexo-blog-encrypt"     data-hbe-format="4"     data-wpm="抱歉, 这个密码看着不太对, 请再试试。"     data-whm="抱歉, 这个密码看着不太对, 请再试试。"     data-salt="feaef7d5bd1beb5259f271b9405ade1fdbb664060b69088e6edcb33a34325db2"     data-nonce="d9c8ae10f850e177a2c02d64"     data-kdf-iterations="600000"     data-auto-save="false">  <script id="hbeData" type="hbeData">    846a9beca2a400f4c74dcfa7900101cefcfa01a22cc16991a3e74508a6674271fea596a68ab6bfa5cfdd8711d95717222612810f67a83480cb19eeff24bb4b4043242d4a081993b2837324a459acfeb6ab4c00fd1db801e7b89f5e1015c45ab7e7017233ea10fb2a198a8d3b7fe8fda97bd7a766bfbbc0e1e11d58592e90f03695a16d0bbb09a0806ad1d415b426c93e012c617377518acca51f2cbdcce2407fa11b28dbef603ca347fc448e22ed054af98888c56db36097e5b80ce38dfe26f5cb15e5da808766d09530aeb1213c9e63937d4fced0587c62a75d8e3e30ae7f6bae2f52cd457d672c6cb201cf32927c7e5dae6ee12cad4375481db486bbcc1ef38dc8f71e42bbb02076c0cf8558d4753d73ef838af1293aec3bf62fbaaea5c6a7e41e22daf52f9adcb738514335ba39f2c8cfdc2aac55ecb581bb9b6e9b59ad27f345b79361580414cecee42b03a6905f65b0cdf7121b9312b56ec23d1ecc766e94f09cd539c3063a212fe0af9009bb1926fc2170f9fd2c7880d67d59c48bd1a06a7dc70bc4fe963d30ef7eba1dd8c1e1bd6f411f5c832b0dee86da6224a31b6b93b843bf075d0e124d6a9a80dc5f9a0b75f8acd996dc4c8cfbac903e3a1793c7a168f238cadae5a1524ea05d9ff091056ddf0ebe3cf89d3731a664d357e377f1f4371b1f63a6ee39b73c657621efdb9811b3c5825f662f70a4e13c2b950e2287e50b1b6e40a859f5f01e33032fe476919fbcd7794556eee0a36ebaf10bca0ec880005ae73dda10b4b31e048c276cc36f0edfd334e1ed1adf81cca9cf7fd65385d5b7369bcec9ab2d5d99e7c81007bc286153bc4de3ffabc66428d2beaaa4273b38a85ecf1bf884efeaf643b755463a4644e6b9793201b28d5dc4dd98cde226a15a12200d9eb3ede9a8296b6d5af6444740f496626466726c8050e33dbafb7e1a90a5a93be8e8b813fb5a30545ac4c47ca609b6013f4cb824c38a80fc07e2633d66e50cdedee69c48d7c14ef3c570a772739a8873773ab07a2e0f544fcddebb861e51ee8d5b8d110f8b67ffcc21ea3296c654dcd141e36361e6cce5703debec4fffc867df7f07b14d38ebf65a9fb35b55fcc899d07b478c5156c11f68413b5f2e8f62865dbf68ddc8e556f3ee8e932c1ac712d4d4fa7e02715b2aaeb3ef07c3ab44768de3f6d4d86e6a6dabf35a7fe4e25b0d54fa39a5b70c3e4651192a697c9f746bf06adc3eb9c7ae6c7eee600403f3cd9d3047fe0c4d6346d33d7e90ad4b589b878b0888cef8e247cacb46341456933764209c8f1187a6df0779a3e20c3b1d9eccb9d67fb1e267e5f5a9c15d1ce2dbb7c6745ec921a0bc4049f63aa36bb3851eaf1c191f3cc362d6fbf2e0026eefaa39d9a34c4ccf5fb4446ff6c0f7418b4c9be9638fd694deb3f8215d5b5d40059550ba6bf4d7497aa38049e6085e28a73c5125bc5f6fcc1538a1ede44ef4c7079b38e53444f86541b34a26c82ef7fd0d1a94b34ed4f81eae1c58defba007bc0b8338219337eab2e21be410350897b27942594bded41d475f9bee7376b1b27e856958c564cee485b3821f98a5547e8787afb975f8fe801bbb548fa61dff140d9585653d9ccb93ee7bfed2310c3b941485bd3d6e0badf44eacb02fc25443ebc45d0f0e2ede7339b9dc64ebf96f3b487713a83b82b6374c210180b203835ac9bf8014e1a1a43f7a958a79578830adc03714020ee92aec104778036c42f29fd53c8481228bbb0a1b15b9ab8884a246aec93561129942b25b2d96d09ea39f21e0e3d806a5f128791fce18583081a9479ab568edceb5c89147cda551c9bb479ee51f321d925acf11a37826b9d480c67f03df94853920be6e453f097de44362f7e52b334da6b56afe153ff521b70e3d8c9d5d13a11655dbc9fdc6e0cb4050a1dcd6832d536295872d74b73c470d5d4acc8ee13679f326c3cc5abe174d72dd69e12ca97e37f3873ce6163bfff8ae6f8c7a0224bd18dceacb22593fd1653fe132aa7de5f3b939ef664b8f42afad8a198c4b8296eb486c0efc041f6c3ac5e1c6814c6ca0aa382748fa89d4914f4aa3bac2db2d0625b90b8877b475089dc6b46d324c2363d9547997bf70697b6e82c5d88cb50b48f091a600877303876a3d1f7b720265d008c6b538e85c66389058025be0589ea53fc64686c9d31313983317d01882467cecd9495318b3fd1a1a400687d79a09f24fa985eec9ece48b1963dbd120681f97ca2bc3a588e6f3540ae9ec9fae6a0b34f3ca1c9f87a8853aba86f2090c69b77b9d5615fb986e537f18b872592fb5c5dfeb1f231ac505ef57c9ede4132bc318dfa785ee63466133bdf10581d61730643d608e28d66a148b2ac9c69cb9bece2a760b5448eadd4ad889321ce3695d67f8fe23726b80f68d5da6199eb21798b580eaa4268cb5e2cae518686569d1801a59b75ac0c59dd75bf7bde95875a7be7e0f8554eec04bc2aef13c2e97a8a74c9d6db1cd6cca18195e149e61e130da99b18c0f96fd1885750804e418af2587ee81eed9e3c65db6f5ffefbe0dace504d89d4f255c142b0b9d8e874e052480629c310bdd368d0ea6863a1750875494e436fd334fe1db2482070c6f51ec6dee6d5a608cf1d275c9dbfdc5d84909a37627187745b538823a8b599d1a3e618e8e5d91303620766da99a11aaf623a4aca15c86c2cce8ac9a3b598e191e3b9caef5de3ebd64a0519b2d2c1a1e1bf1547a58730298ea73cbd17be5eef63957493e057faf93797851b35c176c2c827b894203a3d4bb6d539e577cd37a0d5a03b3e384d7ea6a9432542f7a205fc7a84eb7d192f180c5d51d5c4c691b0398ea17600777e66a131913e3cb53ae591aba737c7e8e08aa7c9c6da8091936e4801e1feda080b8d5f12adf24cf20be4cbc68e6bcd2c5463769fe9c94dec2e73f4f35b01c66afa5965a3ed62b0925b2408de3adbe727cdfce42210618b1113fac3949919d1bdbdc8276233767acaefd3e12b73e204fa676af04ff9e9d74720fda3966fe5acb46c78615adceea0a47ee05736209475fd0fd6b081b1451a287ab9edd2406a5c9a39d2ebc8140c6c9fefa90535fb3f87f787d6d1f77bef0b3f8b013543871dfc9ca6dfa6072aba396fe76241d19695ff491cc3c9d6d5cba78ad3ed4572ee1cd89fe1de18858a93ba7378d435551794a0db2606b392f31d2e307c4afea7d6de551a43c0676e50310dc03a121693ac615f33c7b47a8f2bc410a16dd2f0a8ce5125497f400b0ecad0dfbed6c56b129c11d92d63e711f1f7009f02c44a8f179f35ca4bc7a91b993aa2b8d062e69ff2a90912e4845b88ed90a4227f3038f3c0d110fad9dd6aa0c85a53181171e9b96b5b607631a959dca719ca8773bb93efbdcb14f1f2352e1b5ae0f831ca215ed3ff0ea4294136e1952f591fd345750a970767dd1e67c3dd8c8f6625756174fc7ab17ceb2bd4daef48dd48972910eb321555c40a3e1ff239ca2f1b89f714541ab41b0b571593bf8c6739eac634553c313c6d092b88a65fcf9682e34f8d78cb03e5efece572088bcda251a07875a2485742a9b995a2932c409d2f92cf85fad91f09dfbde7b44aa0be5117ebe5df645eb37b776f8d1080699785c901666888d647b383763ce2e528fa63c388be1f12d491ccbe5cdf2d49c5a5fb8035bd09b663586658b92bfdb56bf072407be2013ad0d8ea47a14e827f3c1e3af49b5e2614c8d43ac4cdbd7255cc769f13dd731f4f3ff11761e9c3ead1e357bc7ee94aa8c8157462dc226c8cfcc922eb4f4965227df4912a1569be4c1314488369e5fb251658d0d029df34e8c37d87da37a54f301540434cd68f7260d5f4ebb4686d3cbfd58c1175e1a5661f9f65c7307d0cec0b54f450fc23c0d0c2b30b2b1e58a48386196d0bedf15bbe248f132bcf7fc40e2d5e3de7c116706e253cdf4b9a63530299b6ecf8e28c04abb7f2d5cdbf58144ee90d14faed26ac6f9710d19fd40baa5ce0029569508731556ca6c83bbdad5d538944de8813e151c98bdd698ec0a5f416050bc8836e1f0e27243c986018e25c36ae6ec6f4ba227c79c2056ab99a368c181810e25d51f497f4dbf9c8b3f2e08920b18103a7f35e876c78942ee3c63f749c8267513799feab397754ecfaf44d9ef0f1091f10d0abb4bfc42fc719bf2c422e28c02023dad16930f3519bf4a3440c19bb29215a5498aa48b3f69b9be4eb39f6dceeb9577043d077063f56e0919d36c4c9fce5bc0dfbd28011f9a51544fdac7df12e1bd2c5df97dc49c300c9b4a961364bd653a202102e266c91cb36aa2ee44dabaada32cc834d1ea78b15d75050dc5f17de1d995798673fbe10edd50ce8239eece8a5a0e72c000add019a044df7eb4a5f8ed5f923f4505d65f21a9e7  </script>  <div class="hbe hbe-content">    <form id="hbeForm" class="hbe hbe-form" onsubmit="return false">      <div class="hbe hbe-input hbe-input-xray">      <input class="hbe hbe-input-field hbe-input-field-xray" type="password" id="hbePass">      <label class="hbe hbe-input-label hbe-input-label-xray" for="hbePass">        <span class="hbe hbe-input-label-content hbe-input-label-content-xray">您好, 这里需要密码。</span>      </label>      <svg class="hbe hbe-graphic hbe-graphic-xray" width="300%" height="100%" viewBox="0 0 1200 60" preserveAspectRatio="none">        <path d="M0,56.5c0,0,298.666,0,399.333,0C448.336,56.5,513.994,46,597,46c77.327,0,135,10.5,200.999,10.5c95.996,0,402.001,0,402.001,0"></path>        <path d="M0,2.5c0,0,298.666,0,399.333,0C448.336,2.5,513.994,13,597,13c77.327,0,135-10.5,200.999-10.5c95.996,0,402.001,0,402.001,0"></path>      </svg>    </div>      <button class="hbe hbe-button" type="submit">Decrypt</button>      <div class="hbe hbe-error" role="alert" aria-live="polite"></div>    </form>  </div></div><script data-pjax src="/lib/hbe.9e70f1e1d2.js"></script><link href="/css/hbe.style.css" rel="stylesheet" type="text/css">]]>
      </content:encoded>
    </item>
    <item>
      <title>网站可用性优化指北</title>
      <link>https://www.lynx3.me/article/7bd2ed19/</link>
      <description>补药封禁我的网站了 QwQ</description>
      <author>LynxCatTheThird</author>
      <category domain="https://www.lynx3.me/categories/%E7%A7%91%E5%AD%A6%E4%B8%8E%E6%8A%80%E6%9C%AF/">科学与技术</category>
      <category domain="https://www.lynx3.me/categories/%E7%A7%91%E5%AD%A6%E4%B8%8E%E6%8A%80%E6%9C%AF/%E8%AE%A1%E7%AE%97%E6%9C%BA/">计算机</category>
      <category domain="https://www.lynx3.me/categories/%E7%A7%91%E5%AD%A6%E4%B8%8E%E6%8A%80%E6%9C%AF/%E8%AE%A1%E7%AE%97%E6%9C%BA/%E5%89%8D%E7%AB%AF/">前端</category>
      <category domain="https://www.lynx3.me/tags/%E5%89%8D%E7%AB%AF/">前端</category>
      <category domain="https://www.lynx3.me/tags/A1/">A1</category>
      <pubDate>Sun, 02 Nov 2025 14:45:11 GMT</pubDate>
      <content:encoded>
        <![CDATA[<h1 id="%E9%9D%99%E6%80%81%E6%89%98%E7%AE%A1" tabindex="-1">静态托管</h1><div class="note warning flat"><p>优选是社区行为，请注意 TOS</p></div><p>静态托管的优化关键在于分配到更好的 IP。对于 Vercel、Netlify、Cloudflare 等厂商，分配到的 IP 往往不尽人意。分配到更好的 IP，就可以极大缓解不稳定的情况，并且大幅度提速。</p><h2 id="vercel-%2F-netlify" tabindex="-1">Vercel / Netlify</h2><p>先使用官方 CNAME 获取到 SSL 证书，然后换成：</p><figure class="highlight zone"><table><tbody><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">vercel.example.com.<span class="number">1</span><span class="type">IN</span><span class="keyword">CNAME</span>vercel-<span class="keyword">cname</span>.xingpingcn.top. <span class="comment">; cf_tags=cf-proxied:false</span></span><br><span class="line">netlify.example.com.<span class="number">1</span><span class="type">IN</span><span class="keyword">CNAME</span>netlify.<span class="keyword">cname</span>.bee-zh.cn. <span class="comment">; cf_tags=cf-proxied:false</span></span><br></pre></td></tr></tbody></table></figure><p>由于 CNAME 的 IP 的质量并不能总是保持优质，需要隔三差五检查。</p><p>另有：</p><figure class="highlight zone"><table><tbody><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line">vercel.example.com.<span class="number">1</span><span class="type">IN</span><span class="keyword">CNAME</span>vercel.<span class="keyword">cname</span>.bee-zh.cn. <span class="comment">; cf_tags=cf-proxied:false</span></span><br><span class="line">netlify.example.com.<span class="number">1</span><span class="type">IN</span><span class="keyword">CNAME</span>netlify-<span class="keyword">cname</span>.xingpingcn.top. <span class="comment">; cf_tags=cf-proxied:false</span></span><br><span class="line">netlify.example.com.<span class="number">1</span><span class="type">IN</span><span class="keyword">CNAME</span>sth.netlify.com. <span class="comment">; cf_tags=cf-proxied:false</span></span><br></pre></td></tr></tbody></table></figure><h2 id="cloudflare-pages" tabindex="-1">Cloudflare Pages</h2><p>使用任意支持地域化解析的 DNS 供应商（可惜 Cloudflare 免费版不支持，可以 NS 到支持的，比如阿里），国外解析到 <code>sth.pages.dev</code>，国内解析到 <code>cf.877774.xyz</code></p><h2 id="cloudflare-cdn" tabindex="-1">Cloudflare CDN</h2><p>使用 Cloudflare SaaS（Software as a Service, 软件即服务）中的自定义主机名功能，具体可参考<a href="https://www.bilibili.com/video/BV1SM4m1176E/">这个视频</a>，皮皮虾老师讲的非常清楚，鄙人不多赘述。</p><h1 id="%E5%8D%95%E7%82%B9%E6%9C%8D%E5%8A%A1%E5%99%A8" tabindex="-1">单点服务器</h1><p>自托管服务器的网站问题则更大了。</p><h2 id="hsts-preload" tabindex="-1">HSTS Preload</h2><div class="note warning flat"><p>HSTS 配置错误可能会导致网站长期报废</p></div><p>由于 HTTP 不加密，首次访问可能会被劫持，没有机会建立 HTTPS 连接；若无 HSTS（HTTP Strict Transport Security，HTTP 严格传输安全），攻击者甚至还可以阻断 HTTPS 的连接。即使加上 HSTS 头，从一般用户角度来说，也往往需要首次的 HTTP。</p><p>那怎么办？加入 <code>HSTS Preload</code>（HSTS Preload List，HSTS 预加载列表） 列表（这个列表随着每次浏览器的发布而更新）后，你的网站会自动启用 HSTS，首次访问即为 HTTPS。代价就是 SSL 证书爆炸的话<strong>无路可退</strong>，只能等下一次浏览器发布的时候退出列表。</p><p>进入 preload 列表必须 <code>max-age ≥ 31536000</code> 且 <code>includeSubDomains</code> 且 <code>preload</code>。为了避免这个问题，建议从较小的 <code>max-age</code> 起递增。</p><p>加上这个头：</p><figure class="highlight http"><table><tbody><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line"><span class="attribute">Strict-Transport-Security</span><span class="punctuation">: </span>max-age=63072000; includeSubDomains; preload</span><br></pre></td></tr></tbody></table></figure><blockquote><p>Copy from <a href="https://developer.chrome.com/docs/lighthouse/best-practices/has-hsts?hl=zh-cn">Google</a>：</p><p>max-age 指令用于指定用户浏览器必须仅使用 TLS 访问网站的时间量（以秒为单位）。一旦时间过去，如果网站未提供 HSTS 标头（或从 HTTP 到 HTTPS 的临时重定向），用户就可以再次通过纯 HTTP 访问该网站。</p><p>设置 includeSubDomains 指令会强制在最初发送标头的网页网址的<strong>任何子网域</strong>上使用该标头。例如，如果 google.com 发送的 HSTS 标头包含 includeSubDomains 指令，则会在 mail.google.com 上强制执行 HSTS 标头。</p><p>设置 preload 指令并将网域提交给 <a href="https://hstspreload.org/">HSTS 预加载服务</a>后，系统会将该网域编译到使用预加载 HSTS 列表的浏览器二进制文件中。不仅 Google Chrome 如此，其他主流浏览器也会使用该列表。</p></blockquote><h2 id="%E6%B3%9B%E8%A7%A3%E6%9E%90" tabindex="-1">泛解析</h2><p>某一个域名的所有子域名指向同一个网站，一定程度上起到镜像站的作用。有些时候 ISP（Internet Service Provider，互联网服务提供商，也就是运营商） 不会下狠手，只会封禁一个子域名。</p><h2 id="dnssec" tabindex="-1">DNSSEC</h2><p>DNS 污染是对于小网站成本较低、伤害较大的一个招式。当受到大范围的 DNS 投毒时，上游的权威 DNS 都会受到污染，DoT 和 DoH 也无力回天。</p><p><a href="https://www.cloudflare.com/zh-cn/learning/dns/dnssec/universal-dnssec/">DNSSEC</a>（Domain Name System Security Extensions，域名系统安全扩展） 通过引入数字签名来确保 DNS 响应的真实性和完整性。哪怕攻击者劫持了 DNS，也难以伪造签名，这个错误的 DNS 解析结果会被拒绝。它确保了你的浏览器在发起 HTTP/HTTPS 请求时，连接的是正确、合法的服务器。</p><p>Cloudflare 提供免费的 DNSSEC，可以按照<a href="https://www.cloudflare.com/zh-cn/learning/dns/dnssec/universal-dnssec/">博客</a>开启。</p><h2 id="caa" tabindex="-1">CAA</h2><p>CAA（Certificate Authority Authorization，证书颁发机构授权）是规定哪些 CA（Certificate Authority，证书颁发机构）有权为域名签发证书的白名单。</p><figure class="highlight zone"><table><tbody><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line">example.com. <span class="keyword">CAA</span> <span class="number">0</span> <span class="attr">issue</span> <span class="string">"letsencrypt.org"</span></span><br><span class="line">example.com. <span class="keyword">CAA</span> <span class="number">0</span> <span class="attr">issue</span> <span class="string">"pki.goog"</span></span><br><span class="line">example.com. <span class="keyword">CAA</span> <span class="number">0</span> <span class="attr">issue</span> <span class="string">"digicert.com"</span></span><br></pre></td></tr></tbody></table></figure><p>这可以有效防止黑 CA 或者 ISP 通过颁发假证书的方法进行攻击。如果 CA 胆敢违反 CAA 颁发证书，那么可能会被吊销执照。</p><h2 id="ct" tabindex="-1">CT</h2><p>但是，某些 ISP 掌握或者胁迫正规 CA 颁发证书，这个时候 <a href="https://developer.mozilla.org/zh-CN/docs/Web/Security/Certificate_Transparency">CT</a>（Certificate Transparency，证书透明度）就会出手。CT 会记录下每一张证书，方便进行审核。什么？你想不提交到 CT 来逃过审核？那这张证书会因为没有有效的 SCT（Signed Certificate Timestamp，证书签署时间戳）而被浏览器拒绝。</p><h2 id="ocsp-%2F-crl" tabindex="-1">OCSP / CRL</h2><p>证书已经出问题了，怎么办？</p><ul><li>CRL（Certificate Revocation List，证书吊销列表）：CA 定期发布一个包含所有已吊销证书序列号的大列表，浏览器需要下载并检查。</li><li>OCSP（Online Certificate Status Protocol，在线证书状态协议）：浏览器向 CA 的 OCSP 服务器实时查询证书状况。</li><li>OCSP Stapling（OCSP Stapling，OCSP 装订）：网站服务器自己定期去查询 OCSP 状态，并将有效的 OCSP 响应与证书一起 “装订” 起来发给浏览器。这避免了浏览器自己去查询，减少了延迟和被 ISP 拦截的风险。但如果 ISP 是中间人，它也可以替换掉这个 “装订” 的响应。</li></ul><p>似乎装订 + 短期证书（90d）更有效，靠撤销长期证书有点亡羊补牢？</p><figure class="highlight nginx"><table><tbody><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># https://ssl-config.mozilla.org/#server=nginx&amp;version=1.27.3&amp;config=modern&amp;openssl=3.4.0&amp;hsts=false&amp;guideline=5.7</span></span><br><span class="line"></span><br><span class="line"><span class="comment"># OCSP stapling</span></span><br><span class="line"><span class="attribute">ssl_stapling</span> <span class="literal">on</span>;</span><br><span class="line"><span class="attribute">ssl_stapling_verify</span> <span class="literal">on</span>;</span><br><span class="line"></span><br><span class="line"><span class="comment"># verify chain of trust of OCSP response using Root CA and Intermediate certs</span></span><br><span class="line"><span class="attribute">ssl_trusted_certificate</span> /path/to/root_CA_cert_plus_intermediates;</span><br><span class="line"></span><br><span class="line"><span class="comment"># replace with the IP address of your resolver;</span></span><br><span class="line"><span class="comment"># 这里我替换成了 1.1.1.1</span></span><br><span class="line"><span class="comment"># async 'resolver' is important for proper operation of OCSP stapling</span></span><br><span class="line"><span class="attribute">resolver</span> <span class="number">1.1.1.1</span>;</span><br><span class="line"></span><br><span class="line"><span class="comment"># If certificates are marked OCSP Must-Staple, consider managing the</span></span><br><span class="line"><span class="comment"># OCSP stapling cache with an external script, e.g. certbot-ocsp-fetcher</span></span><br><span class="line"></span><br></pre></td></tr></tbody></table></figure><div class="note info flat"><p><a href="https://letsencrypt.org/">Let’s Encrypt</a> 的 CRL 域名在中国大陆遭到封禁，建议使用 <a href="https://docs.cloud.google.com/certificate-manager/docs/public-ca-tutorial?hl=zh-cn">Google Trust Services</a>。其验证服务器在国内有 CDN。</p></div><h1 id="%E9%80%9A%E7%94%A8" tabindex="-1">通用</h1><h2 id="ech" tabindex="-1">ECH</h2><p><a href="https://blog.cloudflare.com/zh-cn/announcing-encrypted-client-hello/">ECH</a>（Encrypted ClientHello，加密客户端问候） 理论上可以保护隐私、对抗封禁。</p><h3 id="%E5%AE%A2%E6%88%B7%E7%AB%AF" tabindex="-1">客户端</h3><p>Firefox 119 已经默认启用 ECH，Chrome/Edge 据说是 105 开始默认启用，总之最新的浏览器没问题的。启用浏览器内置的安全 DNS（Cloudflare、Google 等主流均可），然后尝试访问 <a href="https://tls-ech.dev/">https://tls-ech.dev/</a>，看到 <code>You are using ECH. :)</code> 就可以了。</p><h3 id="%E6%9C%8D%E5%8A%A1%E5%99%A8" tabindex="-1">服务器</h3><p>Cloudflare CDN 免费版默认启用 ECH，Pages 似乎没有。</p><p>包括 <code>OpenSSL</code>、<code>Curl</code>、<code>Nginx</code> 等项目对于 ECH 的支持大多停留在实验阶段，故单点服务器难以上手。</p><p>你可以使用 <a href="https://dns.google/query?name=tls-ech.dev&amp;rr_type=HTTPS&amp;ecs=&amp;show_dnssec=true">Google Public DNS</a> 查询网站的支持情况，HTTPS 记录中包含 <code>ech=</code> 即可。</p><p>Firefox 用户还可以安装 <a href="https://github.com/27justin/ohmyech">oh-my-ech 插件</a>实时查看网站的 ECH 情况。</p><h2 id="csp-%E4%B8%8E-sri" tabindex="-1">CSP 与 SRI</h2><p>自己的网站百密无疏了，但是别忘了上游 CDN 投毒也是网络安全的重要话题。StaticFile、BootCDN、51LA 等都发生过投毒事件。</p><p>可以通过 CSP（Content Security Policy，内容安全策略）头限制资源加载：</p><figure class="highlight routeros"><table><tbody><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">&lt;meta <span class="attribute">http-equiv</span>=<span class="string">"Content-Security-Policy"</span></span><br><span class="line">      <span class="attribute">content</span>=<span class="string">"default-src 'self'; script-src 'self' trusted.com"</span>&gt;</span><br></pre></td></tr></tbody></table></figure><p>通过 SRI（Subresource Integrity，子资源完整性）防止资源被篡改：</p><figure class="highlight routeros"><table><tbody><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line">&lt;script <span class="attribute">src</span>=<span class="string">"https://cdn.example.com/jquery.js"</span></span><br><span class="line">        <span class="attribute">integrity</span>=<span class="string">"sha384-..."</span></span><br><span class="line">        <span class="attribute">crossorigin</span>=<span class="string">"anonymous"</span>&gt;&lt;/script&gt;</span><br></pre></td></tr></tbody></table></figure><h1 id="%E9%B8%A3%E8%B0%A2%E4%B8%8E%E5%BC%95%E7%94%A8" tabindex="-1">鸣谢与引用</h1><ol><li><a href="https://furries.fun/2025/02/04/over_the_isp_wall/">[矛与盾] 运营商封锁的原理以及 “低成本” 解决方案</a></li><li>Cloudflare：<ol><li><a href="https://www.cloudflare.com/zh-cn/learning/dns/dnssec/universal-dnssec/">https://www.cloudflare.com/zh-cn/learning/dns/dnssec/universal-dnssec/</a></li><li><a href="https://blog.cloudflare.com/zh-cn/announcing-encrypted-client-hello/">https://blog.cloudflare.com/zh-cn/announcing-encrypted-client-hello/</a></li></ol></li><li>Mozilla<ol><li><a href="https://developer.mozilla.org/zh-CN/docs/Web/Security/Certificate_Transparency">https://developer.mozilla.org/zh-CN/docs/Web/Security/Certificate_Transparency</a></li><li><a href="https://ssl-config.mozilla.org/">https://ssl-config.mozilla.org/</a></li></ol></li></ol>]]>
      </content:encoded>
    </item>
    <item>
      <title>四个重要的不等式</title>
      <link>https://www.lynx3.me/article/d68048af/</link>
      <description>有点难诶……</description>
      <author>LynxCatTheThird</author>
      <category domain="https://www.lynx3.me/categories/%E7%A7%91%E5%AD%A6%E4%B8%8E%E6%8A%80%E6%9C%AF/">科学与技术</category>
      <category domain="https://www.lynx3.me/categories/%E7%A7%91%E5%AD%A6%E4%B8%8E%E6%8A%80%E6%9C%AF/%E6%95%B0%E5%AD%A6/">数学</category>
      <category domain="https://www.lynx3.me/tags/A1/">A1</category>
      <category domain="https://www.lynx3.me/tags/%E6%95%B0%E5%AD%A6/">数学</category>
      <pubDate>Fri, 23 Aug 2024 05:18:35 GMT</pubDate>
      <content:encoded>
        <![CDATA[<div class="note warning flat"><p>本文极为简略，仅作为学习笔记使用，许多证明步骤未写出．</p></div><h1 id="%E5%9D%87%E5%80%BC%E4%B8%8D%E7%AD%89%E5%BC%8F" tabindex="-1">均值不等式</h1><p><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mfrac><mrow><mi>a</mi><mo>+</mo><mi>b</mi></mrow><mn>2</mn></mfrac><mo>≥</mo><msqrt><mrow><mi>a</mi><mi>b</mi></mrow></msqrt></mrow><annotation encoding="application/x-tex">\frac{a+b}{2} \geq \sqrt{ab}</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="katex-base"><span class="katex-strut" style="height:1.2251em;vertical-align:-0.345em;"></span><span class="mord"><span class="mopen nulldelimiter"></span><span class="mfrac"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.8801em;"><span style="top:-2.655em;"><span class="pstrut" style="height:3em;"></span><span class="katex-sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mtight">2</span></span></span></span><span style="top:-3.23em;"><span class="pstrut" style="height:3em;"></span><span class="frac-line" style="border-bottom-width:0.04em;"></span></span><span style="top:-3.394em;"><span class="pstrut" style="height:3em;"></span><span class="katex-sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">a</span><span class="mbin mtight">+</span><span class="mord mathnormal mtight">b</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.345em;"><span></span></span></span></span></span><span class="mclose nulldelimiter"></span></span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">≥</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="katex-base"><span class="katex-strut" style="height:1.04em;vertical-align:-0.1078em;"></span><span class="mord sqrt"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.9322em;"><span class="svg-align" style="top:-3em;"><span class="pstrut" style="height:3em;"></span><span class="mord" style="padding-left:0.833em;"><span class="mord mathnormal">ab</span></span></span><span style="top:-2.8922em;"><span class="pstrut" style="height:3em;"></span><span class="hide-tail" style="min-width:0.853em;height:1.08em;"><svg xmlns="http://www.w3.org/2000/svg" width="400em" height="1.08em" viewBox="0 0 400000 1080" preserveAspectRatio="xMinYMin slice"><path d="M95,702c-2.7,0,-7.17,-2.7,-13.5,-8c-5.8,-5.3,-9.5,-10,-9.5,-14c0,-2,0.3,-3.3,1,-4c1.3,-2.7,23.83,-20.7,67.5,-54c44.2,-33.3,65.8,-50.3,66.5,-51c1.3,-1.3,3,-2,5,-2c4.7,0,8.7,3.3,12,10s173,378,173,378c0.7,0,35.3,-71,104,-213c68.7,-142,137.5,-285,206.5,-429c69,-144,104.5,-217.7,106.5,-221l0 -0c5.3,-9.3,12,-14,20,-14H400000v40H845.2724s-225.272,467,-225.272,467s-235,486,-235,486c-2.7,4.7,-9,7,-19,7c-6,0,-10,-1,-12,-3s-194,-422,-194,-422s-65,47,-65,47zM834 80h400000v40h-400000z"></path></svg></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.1078em;"><span></span></span></span></span></span></span></span></span></p><p>这是高中数学课本上第一个重要的不等式，A 版教材称为基本不等式，B 版教材称为均值不等式．</p><p>其中，<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mfrac><mrow><mi>a</mi><mo>+</mo><mi>b</mi></mrow><mn>2</mn></mfrac></mrow><annotation encoding="application/x-tex">\frac{a+b}{2}</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="katex-base"><span class="katex-strut" style="height:1.2251em;vertical-align:-0.345em;"></span><span class="mord"><span class="mopen nulldelimiter"></span><span class="mfrac"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.8801em;"><span style="top:-2.655em;"><span class="pstrut" style="height:3em;"></span><span class="katex-sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mtight">2</span></span></span></span><span style="top:-3.23em;"><span class="pstrut" style="height:3em;"></span><span class="frac-line" style="border-bottom-width:0.04em;"></span></span><span style="top:-3.394em;"><span class="pstrut" style="height:3em;"></span><span class="katex-sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">a</span><span class="mbin mtight">+</span><span class="mord mathnormal mtight">b</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.345em;"><span></span></span></span></span></span><span class="mclose nulldelimiter"></span></span></span></span></span> 称为算术平均值，<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msqrt><mrow><mi>a</mi><mi>b</mi></mrow></msqrt></mrow><annotation encoding="application/x-tex">\sqrt{ab}</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="katex-base"><span class="katex-strut" style="height:1.04em;vertical-align:-0.1078em;"></span><span class="mord sqrt"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.9322em;"><span class="svg-align" style="top:-3em;"><span class="pstrut" style="height:3em;"></span><span class="mord" style="padding-left:0.833em;"><span class="mord mathnormal">ab</span></span></span><span style="top:-2.8922em;"><span class="pstrut" style="height:3em;"></span><span class="hide-tail" style="min-width:0.853em;height:1.08em;"><svg xmlns="http://www.w3.org/2000/svg" width="400em" height="1.08em" viewBox="0 0 400000 1080" preserveAspectRatio="xMinYMin slice"><path d="M95,702c-2.7,0,-7.17,-2.7,-13.5,-8c-5.8,-5.3,-9.5,-10,-9.5,-14c0,-2,0.3,-3.3,1,-4c1.3,-2.7,23.83,-20.7,67.5,-54c44.2,-33.3,65.8,-50.3,66.5,-51c1.3,-1.3,3,-2,5,-2c4.7,0,8.7,3.3,12,10s173,378,173,378c0.7,0,35.3,-71,104,-213c68.7,-142,137.5,-285,206.5,-429c69,-144,104.5,-217.7,106.5,-221l0 -0c5.3,-9.3,12,-14,20,-14H400000v40H845.2724s-225.272,467,-225.272,467s-235,486,-235,486c-2.7,4.7,-9,7,-19,7c-6,0,-10,-1,-12,-3s-194,-422,-194,-422s-65,47,-65,47zM834 80h400000v40h-400000z"></path></svg></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.1078em;"><span></span></span></span></span></span></span></span></span> 称为几何平均值．</p><h2 id="%E8%AF%81%E6%98%8E" tabindex="-1">证明</h2><p>画图中……</p><h2 id="%E5%8F%98%E5%BD%A2" tabindex="-1">变形</h2><p>均值不等式有多个变形 / 推广形式，极其常用的有：</p><p><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>a</mi><mo>+</mo><mi>b</mi><mo>≥</mo><mn>2</mn><msqrt><mrow><mi>a</mi><mi>b</mi></mrow></msqrt><mtext>&nbsp;</mtext><mo stretchy="false">(</mo><mi>a</mi><mo separator="true">,</mo><mi>b</mi><mo>∈</mo><msub><mi>R</mi><mo>+</mo></msub><mo stretchy="false">)</mo></mrow><annotation encoding="application/x-tex">a+b \geq 2\sqrt{ab} \nobreakspace(a,b \in R_+)</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="katex-base"><span class="katex-strut" style="height:0.6667em;vertical-align:-0.0833em;"></span><span class="mord mathnormal">a</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">+</span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="katex-base"><span class="katex-strut" style="height:0.8304em;vertical-align:-0.136em;"></span><span class="mord mathnormal">b</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">≥</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="katex-base"><span class="katex-strut" style="height:1.1822em;vertical-align:-0.25em;"></span><span class="mord">2</span><span class="mord sqrt"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.9322em;"><span class="svg-align" style="top:-3em;"><span class="pstrut" style="height:3em;"></span><span class="mord" style="padding-left:0.833em;"><span class="mord mathnormal">ab</span></span></span><span style="top:-2.8922em;"><span class="pstrut" style="height:3em;"></span><span class="hide-tail" style="min-width:0.853em;height:1.08em;"><svg xmlns="http://www.w3.org/2000/svg" width="400em" height="1.08em" viewBox="0 0 400000 1080" preserveAspectRatio="xMinYMin slice"><path d="M95,702c-2.7,0,-7.17,-2.7,-13.5,-8c-5.8,-5.3,-9.5,-10,-9.5,-14c0,-2,0.3,-3.3,1,-4c1.3,-2.7,23.83,-20.7,67.5,-54c44.2,-33.3,65.8,-50.3,66.5,-51c1.3,-1.3,3,-2,5,-2c4.7,0,8.7,3.3,12,10s173,378,173,378c0.7,0,35.3,-71,104,-213c68.7,-142,137.5,-285,206.5,-429c69,-144,104.5,-217.7,106.5,-221l0 -0c5.3,-9.3,12,-14,20,-14H400000v40H845.2724s-225.272,467,-225.272,467s-235,486,-235,486c-2.7,4.7,-9,7,-19,7c-6,0,-10,-1,-12,-3s-194,-422,-194,-422s-65,47,-65,47zM834 80h400000v40h-400000z"></path></svg></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.1078em;"><span></span></span></span></span></span><span class="mspace nobreak">&nbsp;</span><span class="mopen">(</span><span class="mord mathnormal">a</span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord mathnormal">b</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">∈</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="katex-base"><span class="katex-strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mord"><span class="mord mathnormal" style="margin-right:0.0077em;">R</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.2583em;"><span style="top:-2.55em;margin-left:-0.0077em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="katex-sizing reset-size6 size3 mtight"><span class="mbin mtight">+</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.2083em;"><span></span></span></span></span></span></span><span class="mclose">)</span></span></span></span></p><p><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>a</mi><mi>b</mi><mo>≤</mo><mo stretchy="false">(</mo><mfrac><mrow><mi>a</mi><mo>+</mo><mi>b</mi></mrow><mn>2</mn></mfrac><msup><mo stretchy="false">)</mo><mn>2</mn></msup><mtext>&nbsp;</mtext><mo stretchy="false">(</mo><mi>a</mi><mo separator="true">,</mo><mi>b</mi><mo>∈</mo><msub><mi>R</mi><mo>+</mo></msub><mo stretchy="false">)</mo></mrow><annotation encoding="application/x-tex">ab \leq (\frac{a+b}{2})^2 \nobreakspace(a,b \in R_+)</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="katex-base"><span class="katex-strut" style="height:0.8304em;vertical-align:-0.136em;"></span><span class="mord mathnormal">ab</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">≤</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="katex-base"><span class="katex-strut" style="height:1.2251em;vertical-align:-0.345em;"></span><span class="mopen">(</span><span class="mord"><span class="mopen nulldelimiter"></span><span class="mfrac"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.8801em;"><span style="top:-2.655em;"><span class="pstrut" style="height:3em;"></span><span class="katex-sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mtight">2</span></span></span></span><span style="top:-3.23em;"><span class="pstrut" style="height:3em;"></span><span class="frac-line" style="border-bottom-width:0.04em;"></span></span><span style="top:-3.394em;"><span class="pstrut" style="height:3em;"></span><span class="katex-sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">a</span><span class="mbin mtight">+</span><span class="mord mathnormal mtight">b</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.345em;"><span></span></span></span></span></span><span class="mclose nulldelimiter"></span></span><span class="mclose"><span class="mclose">)</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.8141em;"><span style="top:-3.063em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="katex-sizing reset-size6 size3 mtight"><span class="mord mtight">2</span></span></span></span></span></span></span></span><span class="mspace nobreak">&nbsp;</span><span class="mopen">(</span><span class="mord mathnormal">a</span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord mathnormal">b</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">∈</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="katex-base"><span class="katex-strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mord"><span class="mord mathnormal" style="margin-right:0.0077em;">R</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.2583em;"><span style="top:-2.55em;margin-left:-0.0077em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="katex-sizing reset-size6 size3 mtight"><span class="mbin mtight">+</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.2083em;"><span></span></span></span></span></span></span><span class="mclose">)</span></span></span></span></p><p>此外还有：</p><p><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>a</mi><mo>+</mo><mfrac><mn>1</mn><mi>a</mi></mfrac><mo>≥</mo><mn>2</mn><mtext>&nbsp;</mtext><mo stretchy="false">(</mo><mi>a</mi><mo>&gt;</mo><mn>0</mn><mo stretchy="false">)</mo></mrow><annotation encoding="application/x-tex">a+\frac{1}{a} \geq 2 \nobreakspace(a&gt;0)</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="katex-base"><span class="katex-strut" style="height:0.6667em;vertical-align:-0.0833em;"></span><span class="mord mathnormal">a</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">+</span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="katex-base"><span class="katex-strut" style="height:1.1901em;vertical-align:-0.345em;"></span><span class="mord"><span class="mopen nulldelimiter"></span><span class="mfrac"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.8451em;"><span style="top:-2.655em;"><span class="pstrut" style="height:3em;"></span><span class="katex-sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">a</span></span></span></span><span style="top:-3.23em;"><span class="pstrut" style="height:3em;"></span><span class="frac-line" style="border-bottom-width:0.04em;"></span></span><span style="top:-3.394em;"><span class="pstrut" style="height:3em;"></span><span class="katex-sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mtight">1</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.345em;"><span></span></span></span></span></span><span class="mclose nulldelimiter"></span></span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">≥</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="katex-base"><span class="katex-strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mord">2</span><span class="mspace nobreak">&nbsp;</span><span class="mopen">(</span><span class="mord mathnormal">a</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">&gt;</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="katex-base"><span class="katex-strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mord">0</span><span class="mclose">)</span></span></span></span></p><p><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mfrac><mi>a</mi><mi>b</mi></mfrac><mo>+</mo><mfrac><mi>b</mi><mi>a</mi></mfrac><mo>≥</mo><mn>2</mn><mtext>&nbsp;</mtext><mo stretchy="false">(</mo><mfrac><mi>a</mi><mi>b</mi></mfrac><mo>&gt;</mo><mn>0</mn><mo stretchy="false">)</mo></mrow><annotation encoding="application/x-tex">\frac{a}{b}+\frac{b}{a} \geq 2 \nobreakspace(\frac{a}{b}&gt;0)</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="katex-base"><span class="katex-strut" style="height:1.0404em;vertical-align:-0.345em;"></span><span class="mord"><span class="mopen nulldelimiter"></span><span class="mfrac"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.6954em;"><span style="top:-2.655em;"><span class="pstrut" style="height:3em;"></span><span class="katex-sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">b</span></span></span></span><span style="top:-3.23em;"><span class="pstrut" style="height:3em;"></span><span class="frac-line" style="border-bottom-width:0.04em;"></span></span><span style="top:-3.394em;"><span class="pstrut" style="height:3em;"></span><span class="katex-sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">a</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.345em;"><span></span></span></span></span></span><span class="mclose nulldelimiter"></span></span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">+</span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="katex-base"><span class="katex-strut" style="height:1.2251em;vertical-align:-0.345em;"></span><span class="mord"><span class="mopen nulldelimiter"></span><span class="mfrac"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.8801em;"><span style="top:-2.655em;"><span class="pstrut" style="height:3em;"></span><span class="katex-sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">a</span></span></span></span><span style="top:-3.23em;"><span class="pstrut" style="height:3em;"></span><span class="frac-line" style="border-bottom-width:0.04em;"></span></span><span style="top:-3.394em;"><span class="pstrut" style="height:3em;"></span><span class="katex-sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">b</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.345em;"><span></span></span></span></span></span><span class="mclose nulldelimiter"></span></span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">≥</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="katex-base"><span class="katex-strut" style="height:1.095em;vertical-align:-0.345em;"></span><span class="mord">2</span><span class="mspace nobreak">&nbsp;</span><span class="mopen">(</span><span class="mord"><span class="mopen nulldelimiter"></span><span class="mfrac"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.6954em;"><span style="top:-2.655em;"><span class="pstrut" style="height:3em;"></span><span class="katex-sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">b</span></span></span></span><span style="top:-3.23em;"><span class="pstrut" style="height:3em;"></span><span class="frac-line" style="border-bottom-width:0.04em;"></span></span><span style="top:-3.394em;"><span class="pstrut" style="height:3em;"></span><span class="katex-sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">a</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.345em;"><span></span></span></span></span></span><span class="mclose nulldelimiter"></span></span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">&gt;</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="katex-base"><span class="katex-strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mord">0</span><span class="mclose">)</span></span></span></span></p><p><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msup><mi>a</mi><mn>2</mn></msup><mo>+</mo><msup><mi>b</mi><mn>2</mn></msup><mo>≥</mo><mn>2</mn><mi>a</mi><mi>b</mi><mtext>&nbsp;</mtext><mo stretchy="false">(</mo><mi>a</mi><mo separator="true">,</mo><mi>b</mi><mo>∈</mo><mi>R</mi><mo stretchy="false">)</mo></mrow><annotation encoding="application/x-tex">a^2+b^2 \geq 2ab \nobreakspace(a,b \in R)</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="katex-base"><span class="katex-strut" style="height:0.8974em;vertical-align:-0.0833em;"></span><span class="mord"><span class="mord mathnormal">a</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.8141em;"><span style="top:-3.063em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="katex-sizing reset-size6 size3 mtight"><span class="mord mtight">2</span></span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">+</span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="katex-base"><span class="katex-strut" style="height:0.9501em;vertical-align:-0.136em;"></span><span class="mord"><span class="mord mathnormal">b</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.8141em;"><span style="top:-3.063em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="katex-sizing reset-size6 size3 mtight"><span class="mord mtight">2</span></span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">≥</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="katex-base"><span class="katex-strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mord">2</span><span class="mord mathnormal">ab</span><span class="mspace nobreak">&nbsp;</span><span class="mopen">(</span><span class="mord mathnormal">a</span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord mathnormal">b</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">∈</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="katex-base"><span class="katex-strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mord mathnormal" style="margin-right:0.0077em;">R</span><span class="mclose">)</span></span></span></span></p><h2 id="%E5%BA%94%E7%94%A8" tabindex="-1">应用</h2><p>均值不等式的应用有三个条件：</p><ol><li><strong>一正：</strong> 两个数均为正实数，即 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>a</mi><mo separator="true">,</mo><mi>b</mi><mo>∈</mo><msub><mi>R</mi><mo>+</mo></msub></mrow><annotation encoding="application/x-tex">a,b \in R_+</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="katex-base"><span class="katex-strut" style="height:0.8889em;vertical-align:-0.1944em;"></span><span class="mord mathnormal">a</span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord mathnormal">b</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">∈</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="katex-base"><span class="katex-strut" style="height:0.8917em;vertical-align:-0.2083em;"></span><span class="mord"><span class="mord mathnormal" style="margin-right:0.0077em;">R</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.2583em;"><span style="top:-2.55em;margin-left:-0.0077em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="katex-sizing reset-size6 size3 mtight"><span class="mbin mtight">+</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.2083em;"><span></span></span></span></span></span></span></span></span></span>．</li><li><strong>二定：</strong> 求和时积为定值，求积时和为定值．</li><li><strong>三相等：</strong> 等号能成立，即等号成立的条件能满足．</li></ol><h2 id="%E7%89%B9%E6%AE%8A%E6%83%85%E5%86%B5" tabindex="-1">特殊情况</h2><h3 id="%E4%B8%80%E4%B8%8D%E6%AD%A3" tabindex="-1">一不正</h3><p>条件一正没有满足即为一不正，又分为两种情况：</p><h4 id="%E4%B8%80%E4%B8%8D%E6%AD%A3-1" tabindex="-1">一不正</h4><p><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>a</mi><mo separator="true">,</mo><mi>b</mi></mrow><annotation encoding="application/x-tex">a,b</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="katex-base"><span class="katex-strut" style="height:0.8889em;vertical-align:-0.1944em;"></span><span class="mord mathnormal">a</span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord mathnormal">b</span></span></span></span> 一正一负，即 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>a</mi><mo>&gt;</mo><mn>0</mn><mo separator="true">,</mo><mi>b</mi><mo>&lt;</mo><mn>0</mn></mrow><annotation encoding="application/x-tex">a &gt; 0, b &lt; 0</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="katex-base"><span class="katex-strut" style="height:0.5782em;vertical-align:-0.0391em;"></span><span class="mord mathnormal">a</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">&gt;</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="katex-base"><span class="katex-strut" style="height:0.8889em;vertical-align:-0.1944em;"></span><span class="mord">0</span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord mathnormal">b</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">&lt;</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="katex-base"><span class="katex-strut" style="height:0.6444em;"></span><span class="mord">0</span></span></span></span>．</p><p>一不正时，均值不等式不成立，无法利用均值不等式求解．此时应放弃均值不等式，尝试将原式化为 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>f</mi><mo stretchy="false">(</mo><mi>x</mi><mo stretchy="false">)</mo><mo>=</mo><mi>x</mi><mo>−</mo><mfrac><mi>p</mi><mi>x</mi></mfrac><mtext>&nbsp;</mtext><mo stretchy="false">(</mo><mi>p</mi><mo>&gt;</mo><mn>0</mn><mo stretchy="false">)</mo></mrow><annotation encoding="application/x-tex">f(x) = x-\frac{p}{x} \nobreakspace(p &gt; 0)</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="katex-base"><span class="katex-strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mord mathnormal" style="margin-right:0.1076em;">f</span><span class="mopen">(</span><span class="mord mathnormal">x</span><span class="mclose">)</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="katex-base"><span class="katex-strut" style="height:0.6667em;vertical-align:-0.0833em;"></span><span class="mord mathnormal">x</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">−</span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="katex-base"><span class="katex-strut" style="height:1.095em;vertical-align:-0.345em;"></span><span class="mord"><span class="mopen nulldelimiter"></span><span class="mfrac"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.7475em;"><span style="top:-2.655em;"><span class="pstrut" style="height:3em;"></span><span class="katex-sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">x</span></span></span></span><span style="top:-3.23em;"><span class="pstrut" style="height:3em;"></span><span class="frac-line" style="border-bottom-width:0.04em;"></span></span><span style="top:-3.4461em;"><span class="pstrut" style="height:3em;"></span><span class="katex-sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">p</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.345em;"><span></span></span></span></span></span><span class="mclose nulldelimiter"></span></span><span class="mspace nobreak">&nbsp;</span><span class="mopen">(</span><span class="mord mathnormal">p</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">&gt;</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="katex-base"><span class="katex-strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mord">0</span><span class="mclose">)</span></span></span></span> 的形式．此函数为飘带函数，随后便可以利用函数的单调性求解．</p><div id="echarts-1787977253543-0" class="echarts-container" style="width:100%;height:400px;margin:1em 0;"></div><textarea hidden="" id="echarts-1787977253543-0-option">{"animation":false,"grid":{"top":30,"right":30,"bottom":40,"left":40},"xAxis":{"type":"value","min":-5,"max":5,"name":"x","splitLine":{"show":true,"lineStyle":{"type":"dashed"}}},"yAxis":{"type":"value","min":-10,"max":10,"name":"y","splitLine":{"show":true,"lineStyle":{"type":"dashed"}}},"series":[{"name":"x &lt; 0","type":"line","smooth":true,"symbol":"none","lineStyle":{"width":2},"data":[[-5,-4.8],[-4.5,-4.278],[-4,-3.75],[-3.5,-3.214],[-3,-2.667],[-2.5,-2.1],[-2,-1.5],[-1.5,-0.833],[-1,0],[-0.7,0.729],[-0.5,1.5],[-0.35,2.507],[-0.25,3.75],[-0.15,6.517]]},{"name":"x &gt; 0","type":"line","smooth":true,"symbol":"none","lineStyle":{"width":2},"data":[[0.15,-6.517],[0.25,-3.75],[0.35,-2.507],[0.5,-1.5],[0.7,-0.729],[1,0],[1.5,0.833],[2,1.5],[2.5,2.1],[3,2.667],[3.5,3.214],[4,3.75],[4.5,4.278],[5,4.8]]},{"name":"y = x","type":"line","symbol":"none","lineStyle":{"type":"dashed","width":1,"color":"#999"},"data":[[-5,-5],[5,5]]}],"tooltip":{"trigger":"axis"}}</textarea><script data-pjax="">(function(){  var resizeHandler;  var initEchart = function() {    if (typeof echarts === "undefined") return;    var el = document.getElementById("echarts-1787977253543-0");    if (!el) return;    var optionEl = document.getElementById("echarts-1787977253543-0-option");    if (!optionEl) return;    var isDark = document.documentElement.getAttribute("data-theme") === "dark";    var themeName = isDark ? "dark" : "light";    if (el.__echartsInstance && el.__echartsTheme === themeName) {      el.__echartsInstance.resize();      return;    }    if (resizeHandler) window.removeEventListener("resize", resizeHandler);    if (el.__echartsInstance) el.__echartsInstance.dispose();    var chart = echarts.init(el, isDark ? "dark" : null);    el.__echartsInstance = chart;    el.__echartsTheme = themeName;    chart.setOption(JSON.parse(optionEl.textContent));    resizeHandler = function() { chart.resize(); };    window.addEventListener("resize", resizeHandler);  };  if (window.btf && typeof btf.addGlobalFn === "function") btf.addGlobalFn("themeChange", initEchart, "echarts-1787977253543-0");  initEchart();})();</script><h4 id="%E4%BA%8C%E4%B8%8D%E6%AD%A3" tabindex="-1">二不正</h4><p><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>a</mi><mo separator="true">,</mo><mi>b</mi></mrow><annotation encoding="application/x-tex">a,b</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="katex-base"><span class="katex-strut" style="height:0.8889em;vertical-align:-0.1944em;"></span><span class="mord mathnormal">a</span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord mathnormal">b</span></span></span></span> 均为负实数，即 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>a</mi><mo separator="true">,</mo><mi>b</mi><mo>&lt;</mo><mn>0</mn></mrow><annotation encoding="application/x-tex">a,b &lt; 0</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="katex-base"><span class="katex-strut" style="height:0.8889em;vertical-align:-0.1944em;"></span><span class="mord mathnormal">a</span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord mathnormal">b</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">&lt;</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="katex-base"><span class="katex-strut" style="height:0.6444em;"></span><span class="mord">0</span></span></span></span>．</p><p>类似的，此时均值不等式不成立，无法利用均值不等式求解．此时应放弃均值不等式，提取 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>a</mi><mo separator="true">,</mo><mi>b</mi></mrow><annotation encoding="application/x-tex">a,b</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="katex-base"><span class="katex-strut" style="height:0.8889em;vertical-align:-0.1944em;"></span><span class="mord mathnormal">a</span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord mathnormal">b</span></span></span></span> 的负号，利用均值不等式求解之后，再利用不等式的基本性质二恢复负号．</p><h3 id="%E4%BA%8C%E4%B8%8D%E5%AE%9A" tabindex="-1">二不定</h3><p>条件二定没有满足即为二不定．此时均值不等式不成立，无法利用均值不等式求解主要利用配凑的方法求解．又分为两种情况：</p><h4 id="%E6%B1%82%E5%92%8C%E7%A7%AF%E4%B8%8D%E5%AE%9A" tabindex="-1">求和积不定</h4><p>利用加减等方法凑出分母的倍数．</p><p>例：当 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>x</mi><mo>&gt;</mo><mn>1</mn></mrow><annotation encoding="application/x-tex">x &gt; 1</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="katex-base"><span class="katex-strut" style="height:0.5782em;vertical-align:-0.0391em;"></span><span class="mord mathnormal">x</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">&gt;</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="katex-base"><span class="katex-strut" style="height:0.6444em;"></span><span class="mord">1</span></span></span></span> 时，求 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>x</mi><mo>+</mo><mfrac><mn>4</mn><mrow><mi>x</mi><mo>−</mo><mn>1</mn></mrow></mfrac></mrow><annotation encoding="application/x-tex">x+\frac{4}{x-1}</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="katex-base"><span class="katex-strut" style="height:0.6667em;vertical-align:-0.0833em;"></span><span class="mord mathnormal">x</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">+</span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="katex-base"><span class="katex-strut" style="height:1.2484em;vertical-align:-0.4033em;"></span><span class="mord"><span class="mopen nulldelimiter"></span><span class="mfrac"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.8451em;"><span style="top:-2.655em;"><span class="pstrut" style="height:3em;"></span><span class="katex-sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">x</span><span class="mbin mtight">−</span><span class="mord mtight">1</span></span></span></span><span style="top:-3.23em;"><span class="pstrut" style="height:3em;"></span><span class="frac-line" style="border-bottom-width:0.04em;"></span></span><span style="top:-3.394em;"><span class="pstrut" style="height:3em;"></span><span class="katex-sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mtight">4</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.4033em;"><span></span></span></span></span></span><span class="mclose nulldelimiter"></span></span></span></span></span> 的最小值．</p><p>将 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>x</mi><mo>+</mo><mfrac><mn>4</mn><mrow><mi>x</mi><mo>−</mo><mn>1</mn></mrow></mfrac></mrow><annotation encoding="application/x-tex">x+\frac{4}{x-1}</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="katex-base"><span class="katex-strut" style="height:0.6667em;vertical-align:-0.0833em;"></span><span class="mord mathnormal">x</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">+</span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="katex-base"><span class="katex-strut" style="height:1.2484em;vertical-align:-0.4033em;"></span><span class="mord"><span class="mopen nulldelimiter"></span><span class="mfrac"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.8451em;"><span style="top:-2.655em;"><span class="pstrut" style="height:3em;"></span><span class="katex-sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">x</span><span class="mbin mtight">−</span><span class="mord mtight">1</span></span></span></span><span style="top:-3.23em;"><span class="pstrut" style="height:3em;"></span><span class="frac-line" style="border-bottom-width:0.04em;"></span></span><span style="top:-3.394em;"><span class="pstrut" style="height:3em;"></span><span class="katex-sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mtight">4</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.4033em;"><span></span></span></span></span></span><span class="mclose nulldelimiter"></span></span></span></span></span> 转化为 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mo stretchy="false">(</mo><mi>x</mi><mo>−</mo><mn>1</mn><mo stretchy="false">)</mo><mo>+</mo><mfrac><mn>4</mn><mrow><mi>x</mi><mo>−</mo><mn>1</mn></mrow></mfrac><mo>+</mo><mn>1</mn></mrow><annotation encoding="application/x-tex">(x-1)+\frac{4}{x-1}+1</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="katex-base"><span class="katex-strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mopen">(</span><span class="mord mathnormal">x</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">−</span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="katex-base"><span class="katex-strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mord">1</span><span class="mclose">)</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">+</span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="katex-base"><span class="katex-strut" style="height:1.2484em;vertical-align:-0.4033em;"></span><span class="mord"><span class="mopen nulldelimiter"></span><span class="mfrac"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.8451em;"><span style="top:-2.655em;"><span class="pstrut" style="height:3em;"></span><span class="katex-sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">x</span><span class="mbin mtight">−</span><span class="mord mtight">1</span></span></span></span><span style="top:-3.23em;"><span class="pstrut" style="height:3em;"></span><span class="frac-line" style="border-bottom-width:0.04em;"></span></span><span style="top:-3.394em;"><span class="pstrut" style="height:3em;"></span><span class="katex-sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mtight">4</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.4033em;"><span></span></span></span></span></span><span class="mclose nulldelimiter"></span></span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">+</span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="katex-base"><span class="katex-strut" style="height:0.6444em;"></span><span class="mord">1</span></span></span></span>．检验 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>x</mi><mo>−</mo><mn>1</mn><mo>&gt;</mo><mn>0</mn></mrow><annotation encoding="application/x-tex">x-1 &gt; 0</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="katex-base"><span class="katex-strut" style="height:0.6667em;vertical-align:-0.0833em;"></span><span class="mord mathnormal">x</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">−</span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="katex-base"><span class="katex-strut" style="height:0.6835em;vertical-align:-0.0391em;"></span><span class="mord">1</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">&gt;</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="katex-base"><span class="katex-strut" style="height:0.6444em;"></span><span class="mord">0</span></span></span></span> 且 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mfrac><mn>4</mn><mrow><mi>x</mi><mo>−</mo><mn>1</mn></mrow></mfrac><mo>&gt;</mo><mn>0</mn></mrow><annotation encoding="application/x-tex">\frac{4}{x-1} &gt; 0</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="katex-base"><span class="katex-strut" style="height:1.2484em;vertical-align:-0.4033em;"></span><span class="mord"><span class="mopen nulldelimiter"></span><span class="mfrac"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.8451em;"><span style="top:-2.655em;"><span class="pstrut" style="height:3em;"></span><span class="katex-sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">x</span><span class="mbin mtight">−</span><span class="mord mtight">1</span></span></span></span><span style="top:-3.23em;"><span class="pstrut" style="height:3em;"></span><span class="frac-line" style="border-bottom-width:0.04em;"></span></span><span style="top:-3.394em;"><span class="pstrut" style="height:3em;"></span><span class="katex-sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mtight">4</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.4033em;"><span></span></span></span></span></span><span class="mclose nulldelimiter"></span></span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">&gt;</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="katex-base"><span class="katex-strut" style="height:0.6444em;"></span><span class="mord">0</span></span></span></span> ，则有：</p><p class="katex-block"><span class="katex-display"><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML" display="block"><semantics><mtable rowspacing="0.25em" columnalign="right left" columnspacing="0em"><mtr><mtd><mstyle scriptlevel="0" displaystyle="true"><mrow><mo stretchy="false">(</mo><mi>x</mi><mo>−</mo><mn>1</mn><mo stretchy="false">)</mo><mo>+</mo><mfrac><mn>4</mn><mrow><mi>x</mi><mo>−</mo><mn>1</mn></mrow></mfrac><mo>+</mo><mn>1</mn></mrow></mstyle></mtd><mtd><mstyle scriptlevel="0" displaystyle="true"><mrow><mrow></mrow><mo>≥</mo><mn>2</mn><msqrt><mrow><mo stretchy="false">(</mo><mi>x</mi><mo>−</mo><mn>1</mn><mo stretchy="false">)</mo><mo>⋅</mo><mfrac><mn>4</mn><mrow><mi>x</mi><mo>−</mo><mn>1</mn></mrow></mfrac></mrow></msqrt><mo>+</mo><mn>1</mn></mrow></mstyle></mtd></mtr><mtr><mtd><mstyle scriptlevel="0" displaystyle="true"><mrow></mrow></mstyle></mtd><mtd><mstyle scriptlevel="0" displaystyle="true"><mrow><mrow></mrow><mo>=</mo><mn>2</mn><msqrt><mn>4</mn></msqrt><mo>+</mo><mn>1</mn></mrow></mstyle></mtd></mtr><mtr><mtd><mstyle scriptlevel="0" displaystyle="true"><mrow></mrow></mstyle></mtd><mtd><mstyle scriptlevel="0" displaystyle="true"><mrow><mrow></mrow><mo>=</mo><mn>5</mn></mrow></mstyle></mtd></mtr></mtable><annotation encoding="application/x-tex">\begin{aligned}    (x-1)+\frac{4}{x-1}+1    &amp;\geq 2\sqrt{(x-1)\cdot\frac{4}{x-1}}+1 \\    &amp;= 2\sqrt{4}+1 \\    &amp;= 5\end{aligned}</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="katex-base"><span class="katex-strut" style="height:5.5561em;vertical-align:-2.528em;"></span><span class="mord"><span class="mtable"><span class="col-align-r"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:3.028em;"><span style="top:-5.028em;"><span class="pstrut" style="height:3.6099em;"></span><span class="mord"><span class="mopen">(</span><span class="mord mathnormal">x</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">−</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mord">1</span><span class="mclose">)</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">+</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mord"><span class="mopen nulldelimiter"></span><span class="mfrac"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:1.3214em;"><span style="top:-2.314em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord mathnormal">x</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">−</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mord">1</span></span></span><span style="top:-3.23em;"><span class="pstrut" style="height:3em;"></span><span class="frac-line" style="border-bottom-width:0.04em;"></span></span><span style="top:-3.677em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord">4</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.7693em;"><span></span></span></span></span></span><span class="mclose nulldelimiter"></span></span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">+</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mord">1</span></span></span><span style="top:-2.9419em;"><span class="pstrut" style="height:3.6099em;"></span><span class="mord"></span></span><span style="top:-1.4419em;"><span class="pstrut" style="height:3.6099em;"></span><span class="mord"></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:2.528em;"><span></span></span></span></span></span><span class="col-align-l"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:3.028em;"><span style="top:-5.028em;"><span class="pstrut" style="height:3.6099em;"></span><span class="mord"><span class="mord"></span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">≥</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mord">2</span><span class="mord sqrt"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:1.6099em;"><span class="svg-align" style="top:-4.4em;"><span class="pstrut" style="height:4.4em;"></span><span class="mord" style="padding-left:1em;"><span class="mopen">(</span><span class="mord mathnormal">x</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">−</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mord">1</span><span class="mclose">)</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">⋅</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mord"><span class="mopen nulldelimiter"></span><span class="mfrac"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:1.3214em;"><span style="top:-2.314em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord mathnormal">x</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">−</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mord">1</span></span></span><span style="top:-3.23em;"><span class="pstrut" style="height:3em;"></span><span class="frac-line" style="border-bottom-width:0.04em;"></span></span><span style="top:-3.677em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord">4</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.7693em;"><span></span></span></span></span></span><span class="mclose nulldelimiter"></span></span></span></span><span style="top:-3.5699em;"><span class="pstrut" style="height:4.4em;"></span><span class="hide-tail" style="min-width:1.02em;height:2.48em;"><svg xmlns="http://www.w3.org/2000/svg" width="400em" height="2.48em" viewBox="0 0 400000 2592" preserveAspectRatio="xMinYMin slice"><path d="M424,2478c-1.3,-0.7,-38.5,-172,-111.5,-514c-73,-342,-109.8,-513.3,-110.5,-514c0,-2,-10.7,14.3,-32,49c-4.7,7.3,-9.8,15.7,-15.5,25c-5.7,9.3,-9.8,16,-12.5,20s-5,7,-5,7c-4,-3.3,-8.3,-7.7,-13,-13s-13,-13,-13,-13s76,-122,76,-122s77,-121,77,-121s209,968,209,968c0,-2,84.7,-361.7,254,-1079c169.3,-717.3,254.7,-1077.7,256,-1081l0 -0c4,-6.7,10,-10,18,-10 H400000v40H1014.6s-87.3,378.7,-272.6,1166c-185.3,787.3,-279.3,1182.3,-282,1185c-2,6,-10,9,-24,9c-8,0,-12,-0.7,-12,-2z M1001 80h400000v40h-400000z"></path></svg></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.8301em;"><span></span></span></span></span></span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">+</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mord">1</span></span></span><span style="top:-2.9419em;"><span class="pstrut" style="height:3.6099em;"></span><span class="mord"><span class="mord"></span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mord">2</span><span class="mord sqrt"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.9561em;"><span class="svg-align" style="top:-3em;"><span class="pstrut" style="height:3em;"></span><span class="mord" style="padding-left:0.833em;"><span class="mord">4</span></span></span><span style="top:-2.9161em;"><span class="pstrut" style="height:3em;"></span><span class="hide-tail" style="min-width:0.853em;height:1.08em;"><svg xmlns="http://www.w3.org/2000/svg" width="400em" height="1.08em" viewBox="0 0 400000 1080" preserveAspectRatio="xMinYMin slice"><path d="M95,702c-2.7,0,-7.17,-2.7,-13.5,-8c-5.8,-5.3,-9.5,-10,-9.5,-14c0,-2,0.3,-3.3,1,-4c1.3,-2.7,23.83,-20.7,67.5,-54c44.2,-33.3,65.8,-50.3,66.5,-51c1.3,-1.3,3,-2,5,-2c4.7,0,8.7,3.3,12,10s173,378,173,378c0.7,0,35.3,-71,104,-213c68.7,-142,137.5,-285,206.5,-429c69,-144,104.5,-217.7,106.5,-221l0 -0c5.3,-9.3,12,-14,20,-14H400000v40H845.2724s-225.272,467,-225.272,467s-235,486,-235,486c-2.7,4.7,-9,7,-19,7c-6,0,-10,-1,-12,-3s-194,-422,-194,-422s-65,47,-65,47zM834 80h400000v40h-400000z"></path></svg></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.0839em;"><span></span></span></span></span></span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">+</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mord">1</span></span></span><span style="top:-1.4419em;"><span class="pstrut" style="height:3.6099em;"></span><span class="mord"><span class="mord"></span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mord">5</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:2.528em;"><span></span></span></span></span></span></span></span></span></span></span></span></p><p>当且仅当 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>x</mi><mo>−</mo><mn>1</mn><mo>=</mo><mfrac><mn>4</mn><mrow><mi>x</mi><mo>−</mo><mn>1</mn></mrow></mfrac></mrow><annotation encoding="application/x-tex">x-1 = \frac{4}{x-1}</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="katex-base"><span class="katex-strut" style="height:0.6667em;vertical-align:-0.0833em;"></span><span class="mord mathnormal">x</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">−</span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="katex-base"><span class="katex-strut" style="height:0.6444em;"></span><span class="mord">1</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="katex-base"><span class="katex-strut" style="height:1.2484em;vertical-align:-0.4033em;"></span><span class="mord"><span class="mopen nulldelimiter"></span><span class="mfrac"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.8451em;"><span style="top:-2.655em;"><span class="pstrut" style="height:3em;"></span><span class="katex-sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">x</span><span class="mbin mtight">−</span><span class="mord mtight">1</span></span></span></span><span style="top:-3.23em;"><span class="pstrut" style="height:3em;"></span><span class="frac-line" style="border-bottom-width:0.04em;"></span></span><span style="top:-3.394em;"><span class="pstrut" style="height:3em;"></span><span class="katex-sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mtight">4</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.4033em;"><span></span></span></span></span></span><span class="mclose nulldelimiter"></span></span></span></span></span>，即 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>x</mi><mo>=</mo><mn>3</mn></mrow><annotation encoding="application/x-tex">x = 3</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="katex-base"><span class="katex-strut" style="height:0.4306em;"></span><span class="mord mathnormal">x</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="katex-base"><span class="katex-strut" style="height:0.6444em;"></span><span class="mord">3</span></span></span></span> 时，等号可以成立，得出 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>x</mi><mo>+</mo><mfrac><mn>4</mn><mrow><mi>x</mi><mo>−</mo><mn>1</mn></mrow></mfrac></mrow><annotation encoding="application/x-tex">x+\frac{4}{x-1}</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="katex-base"><span class="katex-strut" style="height:0.6667em;vertical-align:-0.0833em;"></span><span class="mord mathnormal">x</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">+</span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="katex-base"><span class="katex-strut" style="height:1.2484em;vertical-align:-0.4033em;"></span><span class="mord"><span class="mopen nulldelimiter"></span><span class="mfrac"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.8451em;"><span style="top:-2.655em;"><span class="pstrut" style="height:3em;"></span><span class="katex-sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">x</span><span class="mbin mtight">−</span><span class="mord mtight">1</span></span></span></span><span style="top:-3.23em;"><span class="pstrut" style="height:3em;"></span><span class="frac-line" style="border-bottom-width:0.04em;"></span></span><span style="top:-3.394em;"><span class="pstrut" style="height:3em;"></span><span class="katex-sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mtight">4</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.4033em;"><span></span></span></span></span></span><span class="mclose nulldelimiter"></span></span></span></span></span> 的最小值为 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mn>5</mn></mrow><annotation encoding="application/x-tex">5</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="katex-base"><span class="katex-strut" style="height:0.6444em;"></span><span class="mord">5</span></span></span></span>．</p><h4 id="%E6%B1%82%E7%A7%AF%E5%92%8C%E4%B8%8D%E5%AE%9A" tabindex="-1">求积和不定</h4><p>改变某一因式系数使和为定值．</p><p>例：当 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>x</mi><mo>∈</mo><mo stretchy="false">(</mo><mn>0</mn><mo separator="true">,</mo><mn>1</mn><mo stretchy="false">)</mo></mrow><annotation encoding="application/x-tex">x \in (0,1)</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="katex-base"><span class="katex-strut" style="height:0.5782em;vertical-align:-0.0391em;"></span><span class="mord mathnormal">x</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">∈</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="katex-base"><span class="katex-strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mopen">(</span><span class="mord">0</span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord">1</span><span class="mclose">)</span></span></span></span> 时，求 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>x</mi><mo stretchy="false">(</mo><mn>3</mn><mo>−</mo><mn>2</mn><mi>x</mi><mo stretchy="false">)</mo></mrow><annotation encoding="application/x-tex">x(3-2x)</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="katex-base"><span class="katex-strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mord mathnormal">x</span><span class="mopen">(</span><span class="mord">3</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">−</span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="katex-base"><span class="katex-strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mord">2</span><span class="mord mathnormal">x</span><span class="mclose">)</span></span></span></span> 的最大值．</p><p>将 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>x</mi><mo stretchy="false">(</mo><mn>3</mn><mo>−</mo><mn>2</mn><mi>x</mi><mo stretchy="false">)</mo></mrow><annotation encoding="application/x-tex">x(3-2x)</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="katex-base"><span class="katex-strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mord mathnormal">x</span><span class="mopen">(</span><span class="mord">3</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">−</span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="katex-base"><span class="katex-strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mord">2</span><span class="mord mathnormal">x</span><span class="mclose">)</span></span></span></span> 转化为 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mfrac><mn>1</mn><mn>2</mn></mfrac><mo>⋅</mo><mn>2</mn><mi>x</mi><mo stretchy="false">(</mo><mn>3</mn><mo>−</mo><mn>2</mn><mi>x</mi><mo stretchy="false">)</mo></mrow><annotation encoding="application/x-tex">\frac{1}{2}\cdot2x(3-2x)</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="katex-base"><span class="katex-strut" style="height:1.1901em;vertical-align:-0.345em;"></span><span class="mord"><span class="mopen nulldelimiter"></span><span class="mfrac"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.8451em;"><span style="top:-2.655em;"><span class="pstrut" style="height:3em;"></span><span class="katex-sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mtight">2</span></span></span></span><span style="top:-3.23em;"><span class="pstrut" style="height:3em;"></span><span class="frac-line" style="border-bottom-width:0.04em;"></span></span><span style="top:-3.394em;"><span class="pstrut" style="height:3em;"></span><span class="katex-sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mtight">1</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.345em;"><span></span></span></span></span></span><span class="mclose nulldelimiter"></span></span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">⋅</span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="katex-base"><span class="katex-strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mord">2</span><span class="mord mathnormal">x</span><span class="mopen">(</span><span class="mord">3</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">−</span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="katex-base"><span class="katex-strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mord">2</span><span class="mord mathnormal">x</span><span class="mclose">)</span></span></span></span>．检验 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mn>2</mn><mi>x</mi><mo>&gt;</mo><mn>0</mn></mrow><annotation encoding="application/x-tex">2x &gt; 0</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="katex-base"><span class="katex-strut" style="height:0.6835em;vertical-align:-0.0391em;"></span><span class="mord">2</span><span class="mord mathnormal">x</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">&gt;</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="katex-base"><span class="katex-strut" style="height:0.6444em;"></span><span class="mord">0</span></span></span></span> 且 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mn>3</mn><mo>−</mo><mn>2</mn><mi>x</mi><mo>&gt;</mo><mn>0</mn></mrow><annotation encoding="application/x-tex">3-2x &gt; 0</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="katex-base"><span class="katex-strut" style="height:0.7278em;vertical-align:-0.0833em;"></span><span class="mord">3</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">−</span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="katex-base"><span class="katex-strut" style="height:0.6835em;vertical-align:-0.0391em;"></span><span class="mord">2</span><span class="mord mathnormal">x</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">&gt;</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="katex-base"><span class="katex-strut" style="height:0.6444em;"></span><span class="mord">0</span></span></span></span> ，则有：</p><p class="katex-block"><span class="katex-display"><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML" display="block"><semantics><mtable rowspacing="0.25em" columnalign="right left" columnspacing="0em"><mtr><mtd><mstyle scriptlevel="0" displaystyle="true"><mrow><mfrac><mn>1</mn><mn>2</mn></mfrac><mo>⋅</mo><mn>2</mn><mi>x</mi><mo stretchy="false">(</mo><mn>3</mn><mo>−</mo><mn>2</mn><mi>x</mi><mo stretchy="false">)</mo></mrow></mstyle></mtd><mtd><mstyle scriptlevel="0" displaystyle="true"><mrow><mrow></mrow><mo>≤</mo><mfrac><mn>1</mn><mn>2</mn></mfrac><mo>⋅</mo><msup><mrow><mo fence="true">[</mo><mfrac><mrow><mn>2</mn><mi>x</mi><mo>+</mo><mo stretchy="false">(</mo><mn>3</mn><mo>−</mo><mn>2</mn><mi>x</mi><mo stretchy="false">)</mo></mrow><mn>2</mn></mfrac><mo fence="true">]</mo></mrow><mn>2</mn></msup></mrow></mstyle></mtd></mtr><mtr><mtd><mstyle scriptlevel="0" displaystyle="true"><mrow></mrow></mstyle></mtd><mtd><mstyle scriptlevel="0" displaystyle="true"><mrow><mrow></mrow><mo>=</mo><mfrac><mn>1</mn><mn>2</mn></mfrac><mo>⋅</mo><mfrac><mn>9</mn><mn>4</mn></mfrac></mrow></mstyle></mtd></mtr><mtr><mtd><mstyle scriptlevel="0" displaystyle="true"><mrow></mrow></mstyle></mtd><mtd><mstyle scriptlevel="0" displaystyle="true"><mrow><mrow></mrow><mo>=</mo><mfrac><mn>9</mn><mn>8</mn></mfrac></mrow></mstyle></mtd></mtr></mtable><annotation encoding="application/x-tex">\begin{aligned}    \frac{1}{2}\cdot2x(3-2x)    &amp;\leq \frac{1}{2}\cdot\left[\frac{2x+(3-2x)}{2}\right]^2 \\    &amp;= \frac{1}{2}\cdot\frac{9}{4} \\    &amp;= \frac{9}{8}\end{aligned}</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="katex-base"><span class="katex-strut" style="height:7.2189em;vertical-align:-3.3595em;"></span><span class="mord"><span class="mtable"><span class="col-align-r"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:3.8595em;"><span style="top:-5.8595em;"><span class="pstrut" style="height:3.654em;"></span><span class="mord"><span class="mord"><span class="mopen nulldelimiter"></span><span class="mfrac"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:1.3214em;"><span style="top:-2.314em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord">2</span></span></span><span style="top:-3.23em;"><span class="pstrut" style="height:3em;"></span><span class="frac-line" style="border-bottom-width:0.04em;"></span></span><span style="top:-3.677em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord">1</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.686em;"><span></span></span></span></span></span><span class="mclose nulldelimiter"></span></span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">⋅</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mord">2</span><span class="mord mathnormal">x</span><span class="mopen">(</span><span class="mord">3</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">−</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mord">2</span><span class="mord mathnormal">x</span><span class="mclose">)</span></span></span><span style="top:-3.288em;"><span class="pstrut" style="height:3.654em;"></span><span class="mord"></span></span><span style="top:-0.9805em;"><span class="pstrut" style="height:3.654em;"></span><span class="mord"></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:3.3595em;"><span></span></span></span></span></span><span class="col-align-l"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:3.8595em;"><span style="top:-5.8595em;"><span class="pstrut" style="height:3.654em;"></span><span class="mord"><span class="mord"></span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">≤</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mord"><span class="mopen nulldelimiter"></span><span class="mfrac"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:1.3214em;"><span style="top:-2.314em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord">2</span></span></span><span style="top:-3.23em;"><span class="pstrut" style="height:3em;"></span><span class="frac-line" style="border-bottom-width:0.04em;"></span></span><span style="top:-3.677em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord">1</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.686em;"><span></span></span></span></span></span><span class="mclose nulldelimiter"></span></span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">⋅</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="minner"><span class="minner"><span class="mopen delimcenter" style="top:0em;"><span class="delimsizing size3">[</span></span><span class="mord"><span class="mopen nulldelimiter"></span><span class="mfrac"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:1.427em;"><span style="top:-2.314em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord">2</span></span></span><span style="top:-3.23em;"><span class="pstrut" style="height:3em;"></span><span class="frac-line" style="border-bottom-width:0.04em;"></span></span><span style="top:-3.677em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord">2</span><span class="mord mathnormal">x</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">+</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mopen">(</span><span class="mord">3</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">−</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mord">2</span><span class="mord mathnormal">x</span><span class="mclose">)</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.686em;"><span></span></span></span></span></span><span class="mclose nulldelimiter"></span></span><span class="mclose delimcenter" style="top:0em;"><span class="delimsizing size3">]</span></span></span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:1.654em;"><span style="top:-3.9029em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="katex-sizing reset-size6 size3 mtight"><span class="mord mtight">2</span></span></span></span></span></span></span></span></span></span><span style="top:-3.288em;"><span class="pstrut" style="height:3.654em;"></span><span class="mord"><span class="mord"></span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mord"><span class="mopen nulldelimiter"></span><span class="mfrac"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:1.3214em;"><span style="top:-2.314em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord">2</span></span></span><span style="top:-3.23em;"><span class="pstrut" style="height:3em;"></span><span class="frac-line" style="border-bottom-width:0.04em;"></span></span><span style="top:-3.677em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord">1</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.686em;"><span></span></span></span></span></span><span class="mclose nulldelimiter"></span></span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">⋅</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mord"><span class="mopen nulldelimiter"></span><span class="mfrac"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:1.3214em;"><span style="top:-2.314em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord">4</span></span></span><span style="top:-3.23em;"><span class="pstrut" style="height:3em;"></span><span class="frac-line" style="border-bottom-width:0.04em;"></span></span><span style="top:-3.677em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord">9</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.686em;"><span></span></span></span></span></span><span class="mclose nulldelimiter"></span></span></span></span><span style="top:-0.9805em;"><span class="pstrut" style="height:3.654em;"></span><span class="mord"><span class="mord"></span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mord"><span class="mopen nulldelimiter"></span><span class="mfrac"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:1.3214em;"><span style="top:-2.314em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord">8</span></span></span><span style="top:-3.23em;"><span class="pstrut" style="height:3em;"></span><span class="frac-line" style="border-bottom-width:0.04em;"></span></span><span style="top:-3.677em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord">9</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.686em;"><span></span></span></span></span></span><span class="mclose nulldelimiter"></span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:3.3595em;"><span></span></span></span></span></span></span></span></span></span></span></span></p><p>当且仅当 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mn>2</mn><mi>x</mi><mo>=</mo><mn>3</mn><mo>−</mo><mn>2</mn><mi>x</mi></mrow><annotation encoding="application/x-tex">2x = 3-2x</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="katex-base"><span class="katex-strut" style="height:0.6444em;"></span><span class="mord">2</span><span class="mord mathnormal">x</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="katex-base"><span class="katex-strut" style="height:0.7278em;vertical-align:-0.0833em;"></span><span class="mord">3</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">−</span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="katex-base"><span class="katex-strut" style="height:0.6444em;"></span><span class="mord">2</span><span class="mord mathnormal">x</span></span></span></span>，即 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>x</mi><mo>=</mo><mfrac><mn>3</mn><mn>4</mn></mfrac></mrow><annotation encoding="application/x-tex">x = \frac{3}{4}</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="katex-base"><span class="katex-strut" style="height:0.4306em;"></span><span class="mord mathnormal">x</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="katex-base"><span class="katex-strut" style="height:1.1901em;vertical-align:-0.345em;"></span><span class="mord"><span class="mopen nulldelimiter"></span><span class="mfrac"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.8451em;"><span style="top:-2.655em;"><span class="pstrut" style="height:3em;"></span><span class="katex-sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mtight">4</span></span></span></span><span style="top:-3.23em;"><span class="pstrut" style="height:3em;"></span><span class="frac-line" style="border-bottom-width:0.04em;"></span></span><span style="top:-3.394em;"><span class="pstrut" style="height:3em;"></span><span class="katex-sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mtight">3</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.345em;"><span></span></span></span></span></span><span class="mclose nulldelimiter"></span></span></span></span></span> 时，等号可以成立，得出 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>x</mi><mo stretchy="false">(</mo><mn>3</mn><mo>−</mo><mn>2</mn><mi>x</mi><mo stretchy="false">)</mo></mrow><annotation encoding="application/x-tex">x(3-2x)</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="katex-base"><span class="katex-strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mord mathnormal">x</span><span class="mopen">(</span><span class="mord">3</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">−</span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="katex-base"><span class="katex-strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mord">2</span><span class="mord mathnormal">x</span><span class="mclose">)</span></span></span></span> 的最大值为 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mfrac><mn>9</mn><mn>8</mn></mfrac></mrow><annotation encoding="application/x-tex">\frac{9}{8}</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="katex-base"><span class="katex-strut" style="height:1.1901em;vertical-align:-0.345em;"></span><span class="mord"><span class="mopen nulldelimiter"></span><span class="mfrac"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.8451em;"><span style="top:-2.655em;"><span class="pstrut" style="height:3em;"></span><span class="katex-sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mtight">8</span></span></span></span><span style="top:-3.23em;"><span class="pstrut" style="height:3em;"></span><span class="frac-line" style="border-bottom-width:0.04em;"></span></span><span style="top:-3.394em;"><span class="pstrut" style="height:3em;"></span><span class="katex-sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mtight">9</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.345em;"><span></span></span></span></span></span><span class="mclose nulldelimiter"></span></span></span></span></span>．</p><h3 id="%E4%B8%89%E4%B8%8D%E7%9B%B8%E7%AD%89" tabindex="-1">三不相等</h3><p>此时均值不等式不成立，无法利用均值不等式求解．此时应放弃均值不等式，尝试将原式化为 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>f</mi><mo stretchy="false">(</mo><mi>x</mi><mo stretchy="false">)</mo><mo>=</mo><mi>x</mi><mo>+</mo><mfrac><mi>p</mi><mi>x</mi></mfrac><mtext>&nbsp;</mtext><mo stretchy="false">(</mo><mi>p</mi><mo>&gt;</mo><mn>0</mn><mo stretchy="false">)</mo></mrow><annotation encoding="application/x-tex">f(x) = x+\frac{p}{x} \nobreakspace(p &gt; 0)</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="katex-base"><span class="katex-strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mord mathnormal" style="margin-right:0.1076em;">f</span><span class="mopen">(</span><span class="mord mathnormal">x</span><span class="mclose">)</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="katex-base"><span class="katex-strut" style="height:0.6667em;vertical-align:-0.0833em;"></span><span class="mord mathnormal">x</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">+</span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="katex-base"><span class="katex-strut" style="height:1.095em;vertical-align:-0.345em;"></span><span class="mord"><span class="mopen nulldelimiter"></span><span class="mfrac"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.7475em;"><span style="top:-2.655em;"><span class="pstrut" style="height:3em;"></span><span class="katex-sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">x</span></span></span></span><span style="top:-3.23em;"><span class="pstrut" style="height:3em;"></span><span class="frac-line" style="border-bottom-width:0.04em;"></span></span><span style="top:-3.4461em;"><span class="pstrut" style="height:3em;"></span><span class="katex-sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">p</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.345em;"><span></span></span></span></span></span><span class="mclose nulldelimiter"></span></span><span class="mspace nobreak">&nbsp;</span><span class="mopen">(</span><span class="mord mathnormal">p</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">&gt;</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="katex-base"><span class="katex-strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mord">0</span><span class="mclose">)</span></span></span></span> 的形式．此函数为对勾函数，其两个拐点一正一负，横坐标为 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msqrt><mi>p</mi></msqrt></mrow><annotation encoding="application/x-tex">\sqrt{p}</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="katex-base"><span class="katex-strut" style="height:1.04em;vertical-align:-0.3369em;"></span><span class="mord sqrt"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.7031em;"><span class="svg-align" style="top:-3em;"><span class="pstrut" style="height:3em;"></span><span class="mord" style="padding-left:0.833em;"><span class="mord mathnormal">p</span></span></span><span style="top:-2.6631em;"><span class="pstrut" style="height:3em;"></span><span class="hide-tail" style="min-width:0.853em;height:1.08em;"><svg xmlns="http://www.w3.org/2000/svg" width="400em" height="1.08em" viewBox="0 0 400000 1080" preserveAspectRatio="xMinYMin slice"><path d="M95,702c-2.7,0,-7.17,-2.7,-13.5,-8c-5.8,-5.3,-9.5,-10,-9.5,-14c0,-2,0.3,-3.3,1,-4c1.3,-2.7,23.83,-20.7,67.5,-54c44.2,-33.3,65.8,-50.3,66.5,-51c1.3,-1.3,3,-2,5,-2c4.7,0,8.7,3.3,12,10s173,378,173,378c0.7,0,35.3,-71,104,-213c68.7,-142,137.5,-285,206.5,-429c69,-144,104.5,-217.7,106.5,-221l0 -0c5.3,-9.3,12,-14,20,-14H400000v40H845.2724s-225.272,467,-225.272,467s-235,486,-235,486c-2.7,4.7,-9,7,-19,7c-6,0,-10,-1,-12,-3s-194,-422,-194,-422s-65,47,-65,47zM834 80h400000v40h-400000z"></path></svg></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.3369em;"><span></span></span></span></span></span></span></span></span> 和 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mo>−</mo><msqrt><mi>p</mi></msqrt></mrow><annotation encoding="application/x-tex">-\sqrt{p}</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="katex-base"><span class="katex-strut" style="height:1.04em;vertical-align:-0.3369em;"></span><span class="mord">−</span><span class="mord sqrt"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.7031em;"><span class="svg-align" style="top:-3em;"><span class="pstrut" style="height:3em;"></span><span class="mord" style="padding-left:0.833em;"><span class="mord mathnormal">p</span></span></span><span style="top:-2.6631em;"><span class="pstrut" style="height:3em;"></span><span class="hide-tail" style="min-width:0.853em;height:1.08em;"><svg xmlns="http://www.w3.org/2000/svg" width="400em" height="1.08em" viewBox="0 0 400000 1080" preserveAspectRatio="xMinYMin slice"><path d="M95,702c-2.7,0,-7.17,-2.7,-13.5,-8c-5.8,-5.3,-9.5,-10,-9.5,-14c0,-2,0.3,-3.3,1,-4c1.3,-2.7,23.83,-20.7,67.5,-54c44.2,-33.3,65.8,-50.3,66.5,-51c1.3,-1.3,3,-2,5,-2c4.7,0,8.7,3.3,12,10s173,378,173,378c0.7,0,35.3,-71,104,-213c68.7,-142,137.5,-285,206.5,-429c69,-144,104.5,-217.7,106.5,-221l0 -0c5.3,-9.3,12,-14,20,-14H400000v40H845.2724s-225.272,467,-225.272,467s-235,486,-235,486c-2.7,4.7,-9,7,-19,7c-6,0,-10,-1,-12,-3s-194,-422,-194,-422s-65,47,-65,47zM834 80h400000v40h-400000z"></path></svg></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.3369em;"><span></span></span></span></span></span></span></span></span>，代入求值得出拐点坐标后便可以利用函数的单调性求解．</p><div id="echarts-1787977253543-1" class="echarts-container" style="width:100%;height:400px;margin:1em 0;"></div><textarea hidden="" id="echarts-1787977253543-1-option">{"animation":false,"grid":{"top":30,"right":30,"bottom":40,"left":40},"xAxis":{"type":"value","min":-5,"max":5,"name":"x","splitLine":{"show":true,"lineStyle":{"type":"dashed"}}},"yAxis":{"type":"value","min":-10,"max":10,"name":"y","splitLine":{"show":true,"lineStyle":{"type":"dashed"}}},"series":[{"name":"x &lt; 0","type":"line","smooth":true,"symbol":"none","lineStyle":{"width":2},"data":[[-5,-5.2],[-4.5,-4.722],[-4,-4.25],[-3.5,-3.786],[-3,-3.333],[-2.5,-2.9],[-2,-2.5],[-1.5,-2.167],[-1,-2],[-0.7,-2.129],[-0.5,-2.5],[-0.35,-3.207],[-0.25,-4.25],[-0.15,-6.817]]},{"name":"x &gt; 0","type":"line","smooth":true,"symbol":"none","lineStyle":{"width":2},"data":[[0.15,6.817],[0.25,4.25],[0.35,3.207],[0.5,2.5],[0.7,2.129],[1,2],[1.5,2.167],[2,2.5],[2.5,2.9],[3,3.333],[3.5,3.786],[4,4.25],[4.5,4.722],[5,5.2]]},{"name":"y = x","type":"line","symbol":"none","lineStyle":{"type":"dashed","width":1,"color":"#999"},"data":[[-5,-5],[5,5]]},{"type":"scatter","symbol":"circle","symbolSize":10,"itemStyle":{"color":"#e74c3c"},"label":{"show":true,"formatter":"{b}","position":"right","fontSize":12},"data":[{"name":"(1, 2)","value":[1,2]},{"name":"(-1, -2)","value":[-1,-2]}]}],"tooltip":{"trigger":"axis"}}</textarea><script data-pjax="">(function(){  var resizeHandler;  var initEchart = function() {    if (typeof echarts === "undefined") return;    var el = document.getElementById("echarts-1787977253543-1");    if (!el) return;    var optionEl = document.getElementById("echarts-1787977253543-1-option");    if (!optionEl) return;    var isDark = document.documentElement.getAttribute("data-theme") === "dark";    var themeName = isDark ? "dark" : "light";    if (el.__echartsInstance && el.__echartsTheme === themeName) {      el.__echartsInstance.resize();      return;    }    if (resizeHandler) window.removeEventListener("resize", resizeHandler);    if (el.__echartsInstance) el.__echartsInstance.dispose();    var chart = echarts.init(el, isDark ? "dark" : null);    el.__echartsInstance = chart;    el.__echartsTheme = themeName;    chart.setOption(JSON.parse(optionEl.textContent));    resizeHandler = function() { chart.resize(); };    window.addEventListener("resize", resizeHandler);  };  if (window.btf && typeof btf.addGlobalFn === "function") btf.addGlobalFn("themeChange", initEchart, "echarts-1787977253543-1");  initEchart();})();</script><h3 id="1-%E7%9A%84%E4%BB%A3%E6%8D%A2" tabindex="-1">1 的代换</h3><p>1 的代换法是将代数式同时乘以 “1”，转化为均值不等式求解，通常是给出一个和，再求一个和的形式．</p><p>例：正数 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>x</mi><mo separator="true">,</mo><mi>y</mi></mrow><annotation encoding="application/x-tex">x,y</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="katex-base"><span class="katex-strut" style="height:0.625em;vertical-align:-0.1944em;"></span><span class="mord mathnormal">x</span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord mathnormal" style="margin-right:0.0359em;">y</span></span></span></span> 满足 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mfrac><mn>3</mn><mi>x</mi></mfrac><mo>+</mo><mfrac><mn>1</mn><mi>y</mi></mfrac><mo>=</mo><mn>5</mn></mrow><annotation encoding="application/x-tex">\frac{3}{x}+\frac{1}{y} = 5</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="katex-base"><span class="katex-strut" style="height:1.1901em;vertical-align:-0.345em;"></span><span class="mord"><span class="mopen nulldelimiter"></span><span class="mfrac"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.8451em;"><span style="top:-2.655em;"><span class="pstrut" style="height:3em;"></span><span class="katex-sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">x</span></span></span></span><span style="top:-3.23em;"><span class="pstrut" style="height:3em;"></span><span class="frac-line" style="border-bottom-width:0.04em;"></span></span><span style="top:-3.394em;"><span class="pstrut" style="height:3em;"></span><span class="katex-sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mtight">3</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.345em;"><span></span></span></span></span></span><span class="mclose nulldelimiter"></span></span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">+</span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="katex-base"><span class="katex-strut" style="height:1.3262em;vertical-align:-0.4811em;"></span><span class="mord"><span class="mopen nulldelimiter"></span><span class="mfrac"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.8451em;"><span style="top:-2.655em;"><span class="pstrut" style="height:3em;"></span><span class="katex-sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight" style="margin-right:0.0359em;">y</span></span></span></span><span style="top:-3.23em;"><span class="pstrut" style="height:3em;"></span><span class="frac-line" style="border-bottom-width:0.04em;"></span></span><span style="top:-3.394em;"><span class="pstrut" style="height:3em;"></span><span class="katex-sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mtight">1</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.4811em;"><span></span></span></span></span></span><span class="mclose nulldelimiter"></span></span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="katex-base"><span class="katex-strut" style="height:0.6444em;"></span><span class="mord">5</span></span></span></span>，求 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mn>3</mn><mi>x</mi><mo>+</mo><mn>4</mn><mi>y</mi></mrow><annotation encoding="application/x-tex">3x+4y</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="katex-base"><span class="katex-strut" style="height:0.7278em;vertical-align:-0.0833em;"></span><span class="mord">3</span><span class="mord mathnormal">x</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">+</span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="katex-base"><span class="katex-strut" style="height:0.8389em;vertical-align:-0.1944em;"></span><span class="mord">4</span><span class="mord mathnormal" style="margin-right:0.0359em;">y</span></span></span></span> 的最小值．</p><p class="katex-block"><span class="katex-display"><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML" display="block"><semantics><mtable rowspacing="0.25em" columnalign="right left" columnspacing="0em"><mtr><mtd><mstyle scriptlevel="0" displaystyle="true"><mrow><mn>3</mn><mi>x</mi><mo>+</mo><mn>4</mn><mi>y</mi></mrow></mstyle></mtd><mtd><mstyle scriptlevel="0" displaystyle="true"><mrow><mrow></mrow><mo>=</mo><mn>1</mn><mo>⋅</mo><mo stretchy="false">(</mo><mn>3</mn><mi>x</mi><mo>+</mo><mn>4</mn><mi>y</mi><mo stretchy="false">)</mo></mrow></mstyle></mtd></mtr><mtr><mtd><mstyle scriptlevel="0" displaystyle="true"><mrow></mrow></mstyle></mtd><mtd><mstyle scriptlevel="0" displaystyle="true"><mrow><mrow></mrow><mo>=</mo><mfrac><mn>1</mn><mn>5</mn></mfrac><mo>⋅</mo><mo stretchy="false">(</mo><mfrac><mn>3</mn><mi>x</mi></mfrac><mo>+</mo><mfrac><mn>1</mn><mi>y</mi></mfrac><mo stretchy="false">)</mo><mo>⋅</mo><mo stretchy="false">(</mo><mn>3</mn><mi>x</mi><mo>+</mo><mn>4</mn><mi>y</mi><mo stretchy="false">)</mo></mrow></mstyle></mtd></mtr><mtr><mtd><mstyle scriptlevel="0" displaystyle="true"><mrow></mrow></mstyle></mtd><mtd><mstyle scriptlevel="0" displaystyle="true"><mrow><mrow></mrow><mo>=</mo><mfrac><mn>1</mn><mn>5</mn></mfrac><mo>⋅</mo><mo stretchy="false">(</mo><mfrac><mn>3</mn><mi>x</mi></mfrac><mo>⋅</mo><mn>3</mn><mi>x</mi><mo>+</mo><mfrac><mn>3</mn><mi>x</mi></mfrac><mo>⋅</mo><mn>4</mn><mi>y</mi><mo>+</mo><mfrac><mn>1</mn><mi>y</mi></mfrac><mo>⋅</mo><mn>3</mn><mi>x</mi><mo>+</mo><mfrac><mn>1</mn><mi>y</mi></mfrac><mo>⋅</mo><mn>4</mn><mi>y</mi><mo stretchy="false">)</mo></mrow></mstyle></mtd></mtr><mtr><mtd><mstyle scriptlevel="0" displaystyle="true"><mrow></mrow></mstyle></mtd><mtd><mstyle scriptlevel="0" displaystyle="true"><mrow><mrow></mrow><mo>=</mo><mfrac><mn>1</mn><mn>5</mn></mfrac><mo stretchy="false">(</mo><mn>9</mn><mo>+</mo><mfrac><mrow><mn>12</mn><mi>y</mi></mrow><mi>x</mi></mfrac><mo>+</mo><mfrac><mrow><mn>3</mn><mi>x</mi></mrow><mi>y</mi></mfrac><mo>+</mo><mn>4</mn><mo stretchy="false">)</mo></mrow></mstyle></mtd></mtr><mtr><mtd><mstyle scriptlevel="0" displaystyle="true"><mrow></mrow></mstyle></mtd><mtd><mstyle scriptlevel="0" displaystyle="true"><mrow><mrow></mrow><mo>≥</mo><mfrac><mn>1</mn><mn>5</mn></mfrac><mo>⋅</mo><mo stretchy="false">(</mo><mn>9</mn><mo>+</mo><mn>4</mn><mo>+</mo><mn>2</mn><msqrt><mrow><mfrac><mrow><mn>12</mn><mi>y</mi></mrow><mi>x</mi></mfrac><mo>⋅</mo><mfrac><mrow><mn>3</mn><mi>x</mi></mrow><mi>y</mi></mfrac></mrow></msqrt><mo stretchy="false">)</mo></mrow></mstyle></mtd></mtr><mtr><mtd><mstyle scriptlevel="0" displaystyle="true"><mrow></mrow></mstyle></mtd><mtd><mstyle scriptlevel="0" displaystyle="true"><mrow><mrow></mrow><mo>=</mo><mfrac><mn>1</mn><mn>5</mn></mfrac><mo stretchy="false">(</mo><mn>9</mn><mo>+</mo><mn>4</mn><mo>+</mo><mn>12</mn><mo stretchy="false">)</mo></mrow></mstyle></mtd></mtr><mtr><mtd><mstyle scriptlevel="0" displaystyle="true"><mrow></mrow></mstyle></mtd><mtd><mstyle scriptlevel="0" displaystyle="true"><mrow><mrow></mrow><mo>=</mo><mn>5</mn></mrow></mstyle></mtd></mtr></mtable><annotation encoding="application/x-tex">\begin{aligned}    3x+4y    &amp;= 1\cdot(3x+4y) \\    &amp;= \frac{1}{5}\cdot(\frac{3}{x}+\frac{1}{y})\cdot(3x+4y) \\    &amp;= \frac{1}{5}\cdot(\frac{3}{x}\cdot3x+\frac{3}{x}\cdot4y+\frac{1}{y}\cdot3x+\frac{1}{y}\cdot4y) \\    &amp;= \frac{1}{5}(9+\frac{12y}{x}+\frac{3x}{y}+4) \\    &amp;\geq \frac{1}{5}\cdot(9+4+2\sqrt{\frac{12y}{x}\cdot\frac{3x}{y}}) \\    &amp;= \frac{1}{5}(9+4+12) \\    &amp;= 5\end{aligned}</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="katex-base"><span class="katex-strut" style="height:15.2531em;vertical-align:-7.3765em;"></span><span class="mord"><span class="mtable"><span class="col-align-r"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:7.8765em;"><span style="top:-10.5909em;"><span class="pstrut" style="height:3.5544em;"></span><span class="mord"><span class="mord">3</span><span class="mord mathnormal">x</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">+</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mord">4</span><span class="mord mathnormal" style="margin-right:0.0359em;">y</span></span></span><span style="top:-8.6095em;"><span class="pstrut" style="height:3.5544em;"></span><span class="mord"></span></span><span style="top:-6.1076em;"><span class="pstrut" style="height:3.5544em;"></span><span class="mord"></span></span><span style="top:-3.6057em;"><span class="pstrut" style="height:3.5544em;"></span><span class="mord"></span></span><span style="top:-0.8709em;"><span class="pstrut" style="height:3.5544em;"></span><span class="mord"></span></span><span style="top:1.6362em;"><span class="pstrut" style="height:3.5544em;"></span><span class="mord"></span></span><span style="top:3.4622em;"><span class="pstrut" style="height:3.5544em;"></span><span class="mord"></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:7.3765em;"><span></span></span></span></span></span><span class="col-align-l"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:7.8765em;"><span style="top:-10.5909em;"><span class="pstrut" style="height:3.5544em;"></span><span class="mord"><span class="mord"></span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mord">1</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">⋅</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mopen">(</span><span class="mord">3</span><span class="mord mathnormal">x</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">+</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mord">4</span><span class="mord mathnormal" style="margin-right:0.0359em;">y</span><span class="mclose">)</span></span></span><span style="top:-8.6095em;"><span class="pstrut" style="height:3.5544em;"></span><span class="mord"><span class="mord"></span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mord"><span class="mopen nulldelimiter"></span><span class="mfrac"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:1.3214em;"><span style="top:-2.314em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord">5</span></span></span><span style="top:-3.23em;"><span class="pstrut" style="height:3em;"></span><span class="frac-line" style="border-bottom-width:0.04em;"></span></span><span style="top:-3.677em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord">1</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.686em;"><span></span></span></span></span></span><span class="mclose nulldelimiter"></span></span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">⋅</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mopen">(</span><span class="mord"><span class="mopen nulldelimiter"></span><span class="mfrac"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:1.3214em;"><span style="top:-2.314em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord mathnormal">x</span></span></span><span style="top:-3.23em;"><span class="pstrut" style="height:3em;"></span><span class="frac-line" style="border-bottom-width:0.04em;"></span></span><span style="top:-3.677em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord">3</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.686em;"><span></span></span></span></span></span><span class="mclose nulldelimiter"></span></span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">+</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mord"><span class="mopen nulldelimiter"></span><span class="mfrac"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:1.3214em;"><span style="top:-2.314em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord mathnormal" style="margin-right:0.0359em;">y</span></span></span><span style="top:-3.23em;"><span class="pstrut" style="height:3em;"></span><span class="frac-line" style="border-bottom-width:0.04em;"></span></span><span style="top:-3.677em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord">1</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.8804em;"><span></span></span></span></span></span><span class="mclose nulldelimiter"></span></span><span class="mclose">)</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">⋅</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mopen">(</span><span class="mord">3</span><span class="mord mathnormal">x</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">+</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mord">4</span><span class="mord mathnormal" style="margin-right:0.0359em;">y</span><span class="mclose">)</span></span></span><span style="top:-6.1076em;"><span class="pstrut" style="height:3.5544em;"></span><span class="mord"><span class="mord"></span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mord"><span class="mopen nulldelimiter"></span><span class="mfrac"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:1.3214em;"><span style="top:-2.314em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord">5</span></span></span><span style="top:-3.23em;"><span class="pstrut" style="height:3em;"></span><span class="frac-line" style="border-bottom-width:0.04em;"></span></span><span style="top:-3.677em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord">1</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.686em;"><span></span></span></span></span></span><span class="mclose nulldelimiter"></span></span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">⋅</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mopen">(</span><span class="mord"><span class="mopen nulldelimiter"></span><span class="mfrac"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:1.3214em;"><span style="top:-2.314em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord mathnormal">x</span></span></span><span style="top:-3.23em;"><span class="pstrut" style="height:3em;"></span><span class="frac-line" style="border-bottom-width:0.04em;"></span></span><span style="top:-3.677em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord">3</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.686em;"><span></span></span></span></span></span><span class="mclose nulldelimiter"></span></span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">⋅</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mord">3</span><span class="mord mathnormal">x</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">+</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mord"><span class="mopen nulldelimiter"></span><span class="mfrac"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:1.3214em;"><span style="top:-2.314em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord mathnormal">x</span></span></span><span style="top:-3.23em;"><span class="pstrut" style="height:3em;"></span><span class="frac-line" style="border-bottom-width:0.04em;"></span></span><span style="top:-3.677em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord">3</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.686em;"><span></span></span></span></span></span><span class="mclose nulldelimiter"></span></span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">⋅</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mord">4</span><span class="mord mathnormal" style="margin-right:0.0359em;">y</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">+</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mord"><span class="mopen nulldelimiter"></span><span class="mfrac"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:1.3214em;"><span style="top:-2.314em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord mathnormal" style="margin-right:0.0359em;">y</span></span></span><span style="top:-3.23em;"><span class="pstrut" style="height:3em;"></span><span class="frac-line" style="border-bottom-width:0.04em;"></span></span><span style="top:-3.677em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord">1</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.8804em;"><span></span></span></span></span></span><span class="mclose nulldelimiter"></span></span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">⋅</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mord">3</span><span class="mord mathnormal">x</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">+</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mord"><span class="mopen nulldelimiter"></span><span class="mfrac"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:1.3214em;"><span style="top:-2.314em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord mathnormal" style="margin-right:0.0359em;">y</span></span></span><span style="top:-3.23em;"><span class="pstrut" style="height:3em;"></span><span class="frac-line" style="border-bottom-width:0.04em;"></span></span><span style="top:-3.677em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord">1</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.8804em;"><span></span></span></span></span></span><span class="mclose nulldelimiter"></span></span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">⋅</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mord">4</span><span class="mord mathnormal" style="margin-right:0.0359em;">y</span><span class="mclose">)</span></span></span><span style="top:-3.6057em;"><span class="pstrut" style="height:3.5544em;"></span><span class="mord"><span class="mord"></span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mord"><span class="mopen nulldelimiter"></span><span class="mfrac"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:1.3214em;"><span style="top:-2.314em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord">5</span></span></span><span style="top:-3.23em;"><span class="pstrut" style="height:3em;"></span><span class="frac-line" style="border-bottom-width:0.04em;"></span></span><span style="top:-3.677em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord">1</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.686em;"><span></span></span></span></span></span><span class="mclose nulldelimiter"></span></span><span class="mopen">(</span><span class="mord">9</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">+</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mord"><span class="mopen nulldelimiter"></span><span class="mfrac"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:1.3214em;"><span style="top:-2.314em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord mathnormal">x</span></span></span><span style="top:-3.23em;"><span class="pstrut" style="height:3em;"></span><span class="frac-line" style="border-bottom-width:0.04em;"></span></span><span style="top:-3.677em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord">12</span><span class="mord mathnormal" style="margin-right:0.0359em;">y</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.686em;"><span></span></span></span></span></span><span class="mclose nulldelimiter"></span></span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">+</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mord"><span class="mopen nulldelimiter"></span><span class="mfrac"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:1.3214em;"><span style="top:-2.314em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord mathnormal" style="margin-right:0.0359em;">y</span></span></span><span style="top:-3.23em;"><span class="pstrut" style="height:3em;"></span><span class="frac-line" style="border-bottom-width:0.04em;"></span></span><span style="top:-3.677em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord">3</span><span class="mord mathnormal">x</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.8804em;"><span></span></span></span></span></span><span class="mclose nulldelimiter"></span></span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">+</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mord">4</span><span class="mclose">)</span></span></span><span style="top:-0.8709em;"><span class="pstrut" style="height:3.5544em;"></span><span class="mord"><span class="mord"></span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">≥</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mord"><span class="mopen nulldelimiter"></span><span class="mfrac"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:1.3214em;"><span style="top:-2.314em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord">5</span></span></span><span style="top:-3.23em;"><span class="pstrut" style="height:3em;"></span><span class="frac-line" style="border-bottom-width:0.04em;"></span></span><span style="top:-3.677em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord">1</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.686em;"><span></span></span></span></span></span><span class="mclose nulldelimiter"></span></span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">⋅</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mopen">(</span><span class="mord">9</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">+</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mord">4</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">+</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mord">2</span><span class="mord sqrt"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:1.5544em;"><span class="svg-align" style="top:-4.4em;"><span class="pstrut" style="height:4.4em;"></span><span class="mord" style="padding-left:1em;"><span class="mord"><span class="mopen nulldelimiter"></span><span class="mfrac"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:1.3214em;"><span style="top:-2.314em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord mathnormal">x</span></span></span><span style="top:-3.23em;"><span class="pstrut" style="height:3em;"></span><span class="frac-line" style="border-bottom-width:0.04em;"></span></span><span style="top:-3.677em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord">12</span><span class="mord mathnormal" style="margin-right:0.0359em;">y</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.686em;"><span></span></span></span></span></span><span class="mclose nulldelimiter"></span></span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">⋅</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mord"><span class="mopen nulldelimiter"></span><span class="mfrac"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:1.3214em;"><span style="top:-2.314em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord mathnormal" style="margin-right:0.0359em;">y</span></span></span><span style="top:-3.23em;"><span class="pstrut" style="height:3em;"></span><span class="frac-line" style="border-bottom-width:0.04em;"></span></span><span style="top:-3.677em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord">3</span><span class="mord mathnormal">x</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.8804em;"><span></span></span></span></span></span><span class="mclose nulldelimiter"></span></span></span></span><span style="top:-3.5144em;"><span class="pstrut" style="height:4.4em;"></span><span class="hide-tail" style="min-width:1.02em;height:2.48em;"><svg xmlns="http://www.w3.org/2000/svg" width="400em" height="2.48em" viewBox="0 0 400000 2592" preserveAspectRatio="xMinYMin slice"><path d="M424,2478c-1.3,-0.7,-38.5,-172,-111.5,-514c-73,-342,-109.8,-513.3,-110.5,-514c0,-2,-10.7,14.3,-32,49c-4.7,7.3,-9.8,15.7,-15.5,25c-5.7,9.3,-9.8,16,-12.5,20s-5,7,-5,7c-4,-3.3,-8.3,-7.7,-13,-13s-13,-13,-13,-13s76,-122,76,-122s77,-121,77,-121s209,968,209,968c0,-2,84.7,-361.7,254,-1079c169.3,-717.3,254.7,-1077.7,256,-1081l0 -0c4,-6.7,10,-10,18,-10 H400000v40H1014.6s-87.3,378.7,-272.6,1166c-185.3,787.3,-279.3,1182.3,-282,1185c-2,6,-10,9,-24,9c-8,0,-12,-0.7,-12,-2z M1001 80h400000v40h-400000z"></path></svg></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.8856em;"><span></span></span></span></span></span><span class="mclose">)</span></span></span><span style="top:1.6362em;"><span class="pstrut" style="height:3.5544em;"></span><span class="mord"><span class="mord"></span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mord"><span class="mopen nulldelimiter"></span><span class="mfrac"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:1.3214em;"><span style="top:-2.314em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord">5</span></span></span><span style="top:-3.23em;"><span class="pstrut" style="height:3em;"></span><span class="frac-line" style="border-bottom-width:0.04em;"></span></span><span style="top:-3.677em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord">1</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.686em;"><span></span></span></span></span></span><span class="mclose nulldelimiter"></span></span><span class="mopen">(</span><span class="mord">9</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">+</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mord">4</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">+</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mord">12</span><span class="mclose">)</span></span></span><span style="top:3.4622em;"><span class="pstrut" style="height:3.5544em;"></span><span class="mord"><span class="mord"></span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mord">5</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:7.3765em;"><span></span></span></span></span></span></span></span></span></span></span></span></p><p>当且仅当 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mfrac><mrow><mn>12</mn><mi>y</mi></mrow><mi>x</mi></mfrac><mo>=</mo><mfrac><mrow><mn>3</mn><mi>x</mi></mrow><mi>y</mi></mfrac></mrow><annotation encoding="application/x-tex">\frac{12y}{x} = \frac{3x}{y}</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="katex-base"><span class="katex-strut" style="height:1.2422em;vertical-align:-0.345em;"></span><span class="mord"><span class="mopen nulldelimiter"></span><span class="mfrac"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.8972em;"><span style="top:-2.655em;"><span class="pstrut" style="height:3em;"></span><span class="katex-sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">x</span></span></span></span><span style="top:-3.23em;"><span class="pstrut" style="height:3em;"></span><span class="frac-line" style="border-bottom-width:0.04em;"></span></span><span style="top:-3.4461em;"><span class="pstrut" style="height:3em;"></span><span class="katex-sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mtight">12</span><span class="mord mathnormal mtight" style="margin-right:0.0359em;">y</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.345em;"><span></span></span></span></span></span><span class="mclose nulldelimiter"></span></span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="katex-base"><span class="katex-strut" style="height:1.3262em;vertical-align:-0.4811em;"></span><span class="mord"><span class="mopen nulldelimiter"></span><span class="mfrac"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.8451em;"><span style="top:-2.655em;"><span class="pstrut" style="height:3em;"></span><span class="katex-sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight" style="margin-right:0.0359em;">y</span></span></span></span><span style="top:-3.23em;"><span class="pstrut" style="height:3em;"></span><span class="frac-line" style="border-bottom-width:0.04em;"></span></span><span style="top:-3.394em;"><span class="pstrut" style="height:3em;"></span><span class="katex-sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mtight">3</span><span class="mord mathnormal mtight">x</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.4811em;"><span></span></span></span></span></span><span class="mclose nulldelimiter"></span></span></span></span></span> 时，等号成立．联立方程：</p><p class="katex-block"><span class="katex-display"><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML" display="block"><semantics><mrow><mo fence="true">{</mo><mtable rowspacing="0.36em" columnalign="left left" columnspacing="1em"><mtr><mtd><mstyle scriptlevel="0" displaystyle="false"><mrow><mfrac><mn>3</mn><mi>x</mi></mfrac><mo>+</mo><mfrac><mn>1</mn><mi>y</mi></mfrac><mo>=</mo><mn>5</mn></mrow></mstyle></mtd></mtr><mtr><mtd><mstyle scriptlevel="0" displaystyle="false"><mrow><mfrac><mrow><mn>12</mn><mi>y</mi></mrow><mi>x</mi></mfrac><mo>=</mo><mfrac><mrow><mn>3</mn><mi>x</mi></mrow><mi>y</mi></mfrac></mrow></mstyle></mtd></mtr></mtable></mrow><annotation encoding="application/x-tex">\begin{cases}    \frac{3}{x} + \frac{1}{y} = 5 \\    \frac{12y}{x} = \frac{3x}{y}\end{cases}</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="katex-base"><span class="katex-strut" style="height:3em;vertical-align:-1.25em;"></span><span class="minner"><span class="mopen delimcenter" style="top:0em;"><span class="delimsizing size4">{</span></span><span class="mord"><span class="mtable"><span class="col-align-l"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:1.7391em;"><span style="top:-3.7391em;"><span class="pstrut" style="height:3.008em;"></span><span class="mord"><span class="mord"><span class="mopen nulldelimiter"></span><span class="mfrac"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.8451em;"><span style="top:-2.655em;"><span class="pstrut" style="height:3em;"></span><span class="katex-sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">x</span></span></span></span><span style="top:-3.23em;"><span class="pstrut" style="height:3em;"></span><span class="frac-line" style="border-bottom-width:0.04em;"></span></span><span style="top:-3.394em;"><span class="pstrut" style="height:3em;"></span><span class="katex-sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mtight">3</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.345em;"><span></span></span></span></span></span><span class="mclose nulldelimiter"></span></span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">+</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mord"><span class="mopen nulldelimiter"></span><span class="mfrac"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.8451em;"><span style="top:-2.655em;"><span class="pstrut" style="height:3em;"></span><span class="katex-sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight" style="margin-right:0.0359em;">y</span></span></span></span><span style="top:-3.23em;"><span class="pstrut" style="height:3em;"></span><span class="frac-line" style="border-bottom-width:0.04em;"></span></span><span style="top:-3.394em;"><span class="pstrut" style="height:3em;"></span><span class="katex-sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mtight">1</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.4811em;"><span></span></span></span></span></span><span class="mclose nulldelimiter"></span></span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mord">5</span></span></span><span style="top:-2.25em;"><span class="pstrut" style="height:3.008em;"></span><span class="mord"><span class="mord"><span class="mopen nulldelimiter"></span><span class="mfrac"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.8972em;"><span style="top:-2.655em;"><span class="pstrut" style="height:3em;"></span><span class="katex-sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">x</span></span></span></span><span style="top:-3.23em;"><span class="pstrut" style="height:3em;"></span><span class="frac-line" style="border-bottom-width:0.04em;"></span></span><span style="top:-3.4461em;"><span class="pstrut" style="height:3em;"></span><span class="katex-sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mtight">12</span><span class="mord mathnormal mtight" style="margin-right:0.0359em;">y</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.345em;"><span></span></span></span></span></span><span class="mclose nulldelimiter"></span></span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mord"><span class="mopen nulldelimiter"></span><span class="mfrac"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.8451em;"><span style="top:-2.655em;"><span class="pstrut" style="height:3em;"></span><span class="katex-sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight" style="margin-right:0.0359em;">y</span></span></span></span><span style="top:-3.23em;"><span class="pstrut" style="height:3em;"></span><span class="frac-line" style="border-bottom-width:0.04em;"></span></span><span style="top:-3.394em;"><span class="pstrut" style="height:3em;"></span><span class="katex-sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mtight">3</span><span class="mord mathnormal mtight">x</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.4811em;"><span></span></span></span></span></span><span class="mclose nulldelimiter"></span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:1.2391em;"><span></span></span></span></span></span></span></span><span class="mclose nulldelimiter"></span></span></span></span></span></span></p><p>解得：</p><p class="katex-block"><span class="katex-display"><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML" display="block"><semantics><mrow><mo fence="true">{</mo><mtable rowspacing="0.36em" columnalign="left left" columnspacing="1em"><mtr><mtd><mstyle scriptlevel="0" displaystyle="false"><mrow><mi>x</mi><mo>=</mo><mn>1</mn></mrow></mstyle></mtd></mtr><mtr><mtd><mstyle scriptlevel="0" displaystyle="false"><mrow><mi>y</mi><mo>=</mo><mfrac><mn>1</mn><mn>2</mn></mfrac></mrow></mstyle></mtd></mtr></mtable></mrow><annotation encoding="application/x-tex">\begin{cases}    x = 1 \\    y = \frac{1}{2}\end{cases}</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="katex-base"><span class="katex-strut" style="height:3em;vertical-align:-1.25em;"></span><span class="minner"><span class="mopen delimcenter" style="top:0em;"><span class="delimsizing size4">{</span></span><span class="mord"><span class="mtable"><span class="col-align-l"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:1.69em;"><span style="top:-3.69em;"><span class="pstrut" style="height:3.008em;"></span><span class="mord"><span class="mord mathnormal">x</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mord">1</span></span></span><span style="top:-2.25em;"><span class="pstrut" style="height:3.008em;"></span><span class="mord"><span class="mord mathnormal" style="margin-right:0.0359em;">y</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mord"><span class="mopen nulldelimiter"></span><span class="mfrac"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.8451em;"><span style="top:-2.655em;"><span class="pstrut" style="height:3em;"></span><span class="katex-sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mtight">2</span></span></span></span><span style="top:-3.23em;"><span class="pstrut" style="height:3em;"></span><span class="frac-line" style="border-bottom-width:0.04em;"></span></span><span style="top:-3.394em;"><span class="pstrut" style="height:3em;"></span><span class="katex-sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mtight">1</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.345em;"><span></span></span></span></span></span><span class="mclose nulldelimiter"></span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:1.19em;"><span></span></span></span></span></span></span></span><span class="mclose nulldelimiter"></span></span></span></span></span></span></p><p>满足条件，可得 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mn>3</mn><mi>x</mi><mo>+</mo><mn>4</mn><mi>y</mi></mrow><annotation encoding="application/x-tex">3x+4y</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="katex-base"><span class="katex-strut" style="height:0.7278em;vertical-align:-0.0833em;"></span><span class="mord">3</span><span class="mord mathnormal">x</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">+</span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="katex-base"><span class="katex-strut" style="height:0.8389em;vertical-align:-0.1944em;"></span><span class="mord">4</span><span class="mord mathnormal" style="margin-right:0.0359em;">y</span></span></span></span> 的最小值为 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mn>5</mn></mrow><annotation encoding="application/x-tex">5</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="katex-base"><span class="katex-strut" style="height:0.6444em;"></span><span class="mord">5</span></span></span></span>．</p><h1 id="%E9%87%8D%E8%A6%81%E4%B8%8D%E7%AD%89%E5%BC%8F" tabindex="-1">重要不等式</h1><h2 id="%E8%AF%81%E6%98%8E-1" tabindex="-1">证明</h2><p>由完全平方公式：<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mo stretchy="false">(</mo><mi>a</mi><mo>−</mo><mi>b</mi><msup><mo stretchy="false">)</mo><mn>2</mn></msup><mo>=</mo><msup><mi>a</mi><mn>2</mn></msup><mo>−</mo><mn>2</mn><mi>a</mi><mi>b</mi><mo>+</mo><msup><mi>b</mi><mn>2</mn></msup></mrow><annotation encoding="application/x-tex">(a-b)^2 = a^2-2ab+b^2</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="katex-base"><span class="katex-strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mopen">(</span><span class="mord mathnormal">a</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">−</span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="katex-base"><span class="katex-strut" style="height:1.0641em;vertical-align:-0.25em;"></span><span class="mord mathnormal">b</span><span class="mclose"><span class="mclose">)</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.8141em;"><span style="top:-3.063em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="katex-sizing reset-size6 size3 mtight"><span class="mord mtight">2</span></span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="katex-base"><span class="katex-strut" style="height:0.8974em;vertical-align:-0.0833em;"></span><span class="mord"><span class="mord mathnormal">a</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.8141em;"><span style="top:-3.063em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="katex-sizing reset-size6 size3 mtight"><span class="mord mtight">2</span></span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">−</span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="katex-base"><span class="katex-strut" style="height:0.7778em;vertical-align:-0.0833em;"></span><span class="mord">2</span><span class="mord mathnormal">ab</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">+</span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="katex-base"><span class="katex-strut" style="height:0.8141em;"></span><span class="mord"><span class="mord mathnormal">b</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.8141em;"><span style="top:-3.063em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="katex-sizing reset-size6 size3 mtight"><span class="mord mtight">2</span></span></span></span></span></span></span></span></span></span></span></p><p>由平方的非负性：<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msup><mi>x</mi><mn>2</mn></msup><mo>≥</mo><mn>0</mn></mrow><annotation encoding="application/x-tex">x^2 \geq 0</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="katex-base"><span class="katex-strut" style="height:0.9501em;vertical-align:-0.136em;"></span><span class="mord"><span class="mord mathnormal">x</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.8141em;"><span style="top:-3.063em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="katex-sizing reset-size6 size3 mtight"><span class="mord mtight">2</span></span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">≥</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="katex-base"><span class="katex-strut" style="height:0.6444em;"></span><span class="mord">0</span></span></span></span></p><p>可以得到：<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msup><mi>a</mi><mn>2</mn></msup><mo>−</mo><mn>2</mn><mi>a</mi><mi>b</mi><mo>+</mo><msup><mi>b</mi><mn>2</mn></msup><mo>≥</mo><mn>0</mn></mrow><annotation encoding="application/x-tex">a^2-2ab+b^2 \geq 0</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="katex-base"><span class="katex-strut" style="height:0.8974em;vertical-align:-0.0833em;"></span><span class="mord"><span class="mord mathnormal">a</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.8141em;"><span style="top:-3.063em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="katex-sizing reset-size6 size3 mtight"><span class="mord mtight">2</span></span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">−</span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="katex-base"><span class="katex-strut" style="height:0.7778em;vertical-align:-0.0833em;"></span><span class="mord">2</span><span class="mord mathnormal">ab</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">+</span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="katex-base"><span class="katex-strut" style="height:0.9501em;vertical-align:-0.136em;"></span><span class="mord"><span class="mord mathnormal">b</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.8141em;"><span style="top:-3.063em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="katex-sizing reset-size6 size3 mtight"><span class="mord mtight">2</span></span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">≥</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="katex-base"><span class="katex-strut" style="height:0.6444em;"></span><span class="mord">0</span></span></span></span></p><p>移项即可得：<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msup><mi>a</mi><mn>2</mn></msup><mo>+</mo><msup><mi>b</mi><mn>2</mn></msup><mo>≥</mo><mn>2</mn><mi>a</mi><mi>b</mi></mrow><annotation encoding="application/x-tex">a^2+b^2 \geq 2ab</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="katex-base"><span class="katex-strut" style="height:0.8974em;vertical-align:-0.0833em;"></span><span class="mord"><span class="mord mathnormal">a</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.8141em;"><span style="top:-3.063em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="katex-sizing reset-size6 size3 mtight"><span class="mord mtight">2</span></span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">+</span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="katex-base"><span class="katex-strut" style="height:0.9501em;vertical-align:-0.136em;"></span><span class="mord"><span class="mord mathnormal">b</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.8141em;"><span style="top:-3.063em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="katex-sizing reset-size6 size3 mtight"><span class="mord mtight">2</span></span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">≥</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="katex-base"><span class="katex-strut" style="height:0.6944em;"></span><span class="mord">2</span><span class="mord mathnormal">ab</span></span></span></span></p><p>可作为均值不等式的补充．</p><p>由于平方的性质中 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>x</mi><mo>∈</mo><mi>R</mi></mrow><annotation encoding="application/x-tex">x \in R</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="katex-base"><span class="katex-strut" style="height:0.5782em;vertical-align:-0.0391em;"></span><span class="mord mathnormal">x</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">∈</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="katex-base"><span class="katex-strut" style="height:0.6833em;"></span><span class="mord mathnormal" style="margin-right:0.0077em;">R</span></span></span></span>，因此重要不等式的条件略有不同：</p><ol><li><strong>一实：</strong> 两个数均为实数，即 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>a</mi><mo separator="true">,</mo><mi>b</mi><mo>∈</mo><mi>R</mi></mrow><annotation encoding="application/x-tex">a,b \in R</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="katex-base"><span class="katex-strut" style="height:0.8889em;vertical-align:-0.1944em;"></span><span class="mord mathnormal">a</span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord mathnormal">b</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">∈</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="katex-base"><span class="katex-strut" style="height:0.6833em;"></span><span class="mord mathnormal" style="margin-right:0.0077em;">R</span></span></span></span>．</li><li><strong>二定：</strong> 求和时积为定值，求积时和为定值．</li><li><strong>三相等：</strong> 等号能成立，即等号成立的条件能满足．</li></ol><h1 id="%E8%BF%9E%E7%BB%AD%E4%B8%8D%E7%AD%89%E5%BC%8F" tabindex="-1">连续不等式</h1><p>均值不等式的全部如下：</p><p><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mfrac><mi>n</mi><mrow><mfrac><mn>1</mn><msub><mi>a</mi><mn>1</mn></msub></mfrac><mo>+</mo><mfrac><mn>1</mn><msub><mi>a</mi><mn>2</mn></msub></mfrac><mo>+</mo><mo>⋯</mo><mo>+</mo><mfrac><mn>1</mn><msub><mi>a</mi><mi>n</mi></msub></mfrac></mrow></mfrac><mo>≤</mo><mroot><mrow><msub><mi>a</mi><mn>1</mn></msub><mo>⋅</mo><msub><mi>a</mi><mn>2</mn></msub><mo>⋯</mo><msub><mi>a</mi><mi>n</mi></msub></mrow><mi>n</mi></mroot><mo>≤</mo><mfrac><mrow><msub><mi>a</mi><mn>1</mn></msub><mo>+</mo><msub><mi>a</mi><mn>2</mn></msub><mo>+</mo><mo>⋯</mo><mo>+</mo><msub><mi>a</mi><mi>n</mi></msub></mrow><mi>n</mi></mfrac><mo>≤</mo><msqrt><mfrac><mrow><msubsup><mi>a</mi><mn>1</mn><mn>2</mn></msubsup><mo>+</mo><msubsup><mi>a</mi><mn>2</mn><mn>2</mn></msubsup><mo>+</mo><mo>⋯</mo><mo>+</mo><msubsup><mi>a</mi><mi>n</mi><mn>2</mn></msubsup></mrow><mi>n</mi></mfrac></msqrt></mrow><annotation encoding="application/x-tex">\frac{n}{\frac{1}{a_1} + \frac{1}{a_2} + \cdots + \frac{1}{a_n}} \leq \sqrt[n]{a_1 \cdot a_2 \cdots a_n} \leq \frac{a_1 + a_2 + \cdots + a_n}{n} \leq \sqrt{\frac{a_1^2 + a_2^2 + \cdots + a_n^2}{n}}</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="katex-base"><span class="katex-strut" style="height:1.487em;vertical-align:-0.7916em;"></span><span class="mord"><span class="mopen nulldelimiter"></span><span class="mfrac"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.6954em;"><span style="top:-2.599em;"><span class="pstrut" style="height:3em;"></span><span class="katex-sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mtight"><span class="mopen nulldelimiter katex-sizing reset-size3 size6"></span><span class="mfrac"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.8443em;"><span style="top:-2.656em;"><span class="pstrut" style="height:3em;"></span><span class="katex-sizing reset-size3 size1 mtight"><span class="mord mtight"><span class="mord mtight"><span class="mord mathnormal mtight">a</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3448em;"><span style="top:-2.3448em;margin-left:0em;margin-right:0.1em;"><span class="pstrut" style="height:2.6444em;"></span><span class="mord mtight">1</span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.2996em;"><span></span></span></span></span></span></span></span></span></span><span style="top:-3.2255em;"><span class="pstrut" style="height:3em;"></span><span class="frac-line mtight" style="border-bottom-width:0.049em;"></span></span><span style="top:-3.384em;"><span class="pstrut" style="height:3em;"></span><span class="katex-sizing reset-size3 size1 mtight"><span class="mord mtight"><span class="mord mtight">1</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.558em;"><span></span></span></span></span></span><span class="mclose nulldelimiter katex-sizing reset-size3 size6"></span></span><span class="mbin mtight">+</span><span class="mord mtight"><span class="mopen nulldelimiter katex-sizing reset-size3 size6"></span><span class="mfrac"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.8443em;"><span style="top:-2.656em;"><span class="pstrut" style="height:3em;"></span><span class="katex-sizing reset-size3 size1 mtight"><span class="mord mtight"><span class="mord mtight"><span class="mord mathnormal mtight">a</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3448em;"><span style="top:-2.3448em;margin-left:0em;margin-right:0.1em;"><span class="pstrut" style="height:2.6444em;"></span><span class="mord mtight">2</span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.2996em;"><span></span></span></span></span></span></span></span></span></span><span style="top:-3.2255em;"><span class="pstrut" style="height:3em;"></span><span class="frac-line mtight" style="border-bottom-width:0.049em;"></span></span><span style="top:-3.384em;"><span class="pstrut" style="height:3em;"></span><span class="katex-sizing reset-size3 size1 mtight"><span class="mord mtight"><span class="mord mtight">1</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.558em;"><span></span></span></span></span></span><span class="mclose nulldelimiter katex-sizing reset-size3 size6"></span></span><span class="mbin mtight">+</span><span class="minner mtight">⋯</span><span class="mbin mtight">+</span><span class="mord mtight"><span class="mopen nulldelimiter katex-sizing reset-size3 size6"></span><span class="mfrac"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.8443em;"><span style="top:-2.656em;"><span class="pstrut" style="height:3em;"></span><span class="katex-sizing reset-size3 size1 mtight"><span class="mord mtight"><span class="mord mtight"><span class="mord mathnormal mtight">a</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.2306em;"><span style="top:-2.3em;margin-left:0em;margin-right:0.1em;"><span class="pstrut" style="height:2.5em;"></span><span class="mord mathnormal mtight">n</span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.2em;"><span></span></span></span></span></span></span></span></span></span><span style="top:-3.2255em;"><span class="pstrut" style="height:3em;"></span><span class="frac-line mtight" style="border-bottom-width:0.049em;"></span></span><span style="top:-3.384em;"><span class="pstrut" style="height:3em;"></span><span class="katex-sizing reset-size3 size1 mtight"><span class="mord mtight"><span class="mord mtight">1</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.4869em;"><span></span></span></span></span></span><span class="mclose nulldelimiter katex-sizing reset-size3 size6"></span></span></span></span></span><span style="top:-3.23em;"><span class="pstrut" style="height:3em;"></span><span class="frac-line" style="border-bottom-width:0.04em;"></span></span><span style="top:-3.394em;"><span class="pstrut" style="height:3em;"></span><span class="katex-sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">n</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.7916em;"><span></span></span></span></span></span><span class="mclose nulldelimiter"></span></span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">≤</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="katex-base"><span class="katex-strut" style="height:1.04em;vertical-align:-0.3078em;"></span><span class="mord sqrt"><span class="katex-root"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.4699em;"><span style="top:-2.7547em;"><span class="pstrut" style="height:2.5em;"></span><span class="katex-sizing reset-size6 size1 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">n</span></span></span></span></span></span></span></span><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.7322em;"><span class="svg-align" style="top:-3em;"><span class="pstrut" style="height:3em;"></span><span class="mord" style="padding-left:0.833em;"><span class="mord"><span class="mord mathnormal">a</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3011em;"><span style="top:-2.55em;margin-left:0em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="katex-sizing reset-size6 size3 mtight"><span class="mord mtight">1</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">⋅</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mord"><span class="mord mathnormal">a</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3011em;"><span style="top:-2.55em;margin-left:0em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="katex-sizing reset-size6 size3 mtight"><span class="mord mtight">2</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.1667em;"></span><span class="minner">⋯</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord"><span class="mord mathnormal">a</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.1514em;"><span style="top:-2.55em;margin-left:0em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="katex-sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight">n</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span></span></span><span style="top:-2.6922em;"><span class="pstrut" style="height:3em;"></span><span class="hide-tail" style="min-width:0.853em;height:1.08em;"><svg xmlns="http://www.w3.org/2000/svg" width="400em" height="1.08em" viewBox="0 0 400000 1080" preserveAspectRatio="xMinYMin slice"><path d="M95,702c-2.7,0,-7.17,-2.7,-13.5,-8c-5.8,-5.3,-9.5,-10,-9.5,-14c0,-2,0.3,-3.3,1,-4c1.3,-2.7,23.83,-20.7,67.5,-54c44.2,-33.3,65.8,-50.3,66.5,-51c1.3,-1.3,3,-2,5,-2c4.7,0,8.7,3.3,12,10s173,378,173,378c0.7,0,35.3,-71,104,-213c68.7,-142,137.5,-285,206.5,-429c69,-144,104.5,-217.7,106.5,-221l0 -0c5.3,-9.3,12,-14,20,-14H400000v40H845.2724s-225.272,467,-225.272,467s-235,486,-235,486c-2.7,4.7,-9,7,-19,7c-6,0,-10,-1,-12,-3s-194,-422,-194,-422s-65,47,-65,47zM834 80h400000v40h-400000z"></path></svg></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.3078em;"><span></span></span></span></span></span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">≤</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="katex-base"><span class="katex-strut" style="height:1.1634em;vertical-align:-0.345em;"></span><span class="mord"><span class="mopen nulldelimiter"></span><span class="mfrac"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.8184em;"><span style="top:-2.655em;"><span class="pstrut" style="height:3em;"></span><span class="katex-sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">n</span></span></span></span><span style="top:-3.23em;"><span class="pstrut" style="height:3em;"></span><span class="frac-line" style="border-bottom-width:0.04em;"></span></span><span style="top:-3.4101em;"><span class="pstrut" style="height:3em;"></span><span class="katex-sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mtight"><span class="mord mathnormal mtight">a</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3173em;"><span style="top:-2.357em;margin-left:0em;margin-right:0.0714em;"><span class="pstrut" style="height:2.5em;"></span><span class="katex-sizing reset-size3 size1 mtight"><span class="mord mtight">1</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.143em;"><span></span></span></span></span></span></span><span class="mbin mtight">+</span><span class="mord mtight"><span class="mord mathnormal mtight">a</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3173em;"><span style="top:-2.357em;margin-left:0em;margin-right:0.0714em;"><span class="pstrut" style="height:2.5em;"></span><span class="katex-sizing reset-size3 size1 mtight"><span class="mord mtight">2</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.143em;"><span></span></span></span></span></span></span><span class="mbin mtight">+</span><span class="minner mtight">⋯</span><span class="mbin mtight">+</span><span class="mord mtight"><span class="mord mathnormal mtight">a</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.1645em;"><span style="top:-2.357em;margin-left:0em;margin-right:0.0714em;"><span class="pstrut" style="height:2.5em;"></span><span class="katex-sizing reset-size3 size1 mtight"><span class="mord mathnormal mtight">n</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.143em;"><span></span></span></span></span></span></span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.345em;"><span></span></span></span></span></span><span class="mclose nulldelimiter"></span></span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">≤</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="katex-base"><span class="katex-strut" style="height:1.84em;vertical-align:-0.4817em;"></span><span class="mord sqrt"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:1.3583em;"><span class="svg-align" style="top:-3.8em;"><span class="pstrut" style="height:3.8em;"></span><span class="mord" style="padding-left:1em;"><span class="mord"><span class="mopen nulldelimiter"></span><span class="mfrac"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:1.0916em;"><span style="top:-2.655em;"><span class="pstrut" style="height:3em;"></span><span class="katex-sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">n</span></span></span></span><span style="top:-3.23em;"><span class="pstrut" style="height:3em;"></span><span class="frac-line" style="border-bottom-width:0.04em;"></span></span><span style="top:-3.5281em;"><span class="pstrut" style="height:3em;"></span><span class="katex-sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mtight"><span class="mord mathnormal mtight">a</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.8051em;"><span style="top:-2.1885em;margin-left:0em;margin-right:0.0714em;"><span class="pstrut" style="height:2.5em;"></span><span class="katex-sizing reset-size3 size1 mtight"><span class="mord mtight">1</span></span></span><span style="top:-2.8448em;margin-right:0.0714em;"><span class="pstrut" style="height:2.5em;"></span><span class="katex-sizing reset-size3 size1 mtight"><span class="mord mtight">2</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.3115em;"><span></span></span></span></span></span></span><span class="mbin mtight">+</span><span class="mord mtight"><span class="mord mathnormal mtight">a</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.8051em;"><span style="top:-2.1885em;margin-left:0em;margin-right:0.0714em;"><span class="pstrut" style="height:2.5em;"></span><span class="katex-sizing reset-size3 size1 mtight"><span class="mord mtight">2</span></span></span><span style="top:-2.8448em;margin-right:0.0714em;"><span class="pstrut" style="height:2.5em;"></span><span class="katex-sizing reset-size3 size1 mtight"><span class="mord mtight">2</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.3115em;"><span></span></span></span></span></span></span><span class="mbin mtight">+</span><span class="minner mtight">⋯</span><span class="mbin mtight">+</span><span class="mord mtight"><span class="mord mathnormal mtight">a</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.7463em;"><span style="top:-2.214em;margin-left:0em;margin-right:0.0714em;"><span class="pstrut" style="height:2.5em;"></span><span class="katex-sizing reset-size3 size1 mtight"><span class="mord mathnormal mtight">n</span></span></span><span style="top:-2.786em;margin-right:0.0714em;"><span class="pstrut" style="height:2.5em;"></span><span class="katex-sizing reset-size3 size1 mtight"><span class="mord mtight">2</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.286em;"><span></span></span></span></span></span></span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.345em;"><span></span></span></span></span></span><span class="mclose nulldelimiter"></span></span></span></span><span style="top:-3.3183em;"><span class="pstrut" style="height:3.8em;"></span><span class="hide-tail" style="min-width:1.02em;height:1.88em;"><svg xmlns="http://www.w3.org/2000/svg" width="400em" height="1.88em" viewBox="0 0 400000 1944" preserveAspectRatio="xMinYMin slice"><path d="M983 90l0 -0c4,-6.7,10,-10,18,-10 H400000v40H1013.1s-83.4,268,-264.1,840c-180.7,572,-277,876.3,-289,913c-4.7,4.7,-12.7,7,-24,7s-12,0,-12,0c-1.3,-3.3,-3.7,-11.7,-7,-25c-35.3,-125.3,-106.7,-373.3,-214,-744c-10,12,-21,25,-33,39s-32,39,-32,39c-6,-5.3,-15,-14,-27,-26s25,-30,25,-30c26.7,-32.7,52,-63,76,-91s52,-60,52,-60s208,722,208,722c56,-175.3,126.3,-397.3,211,-666c84.7,-268.7,153.8,-488.2,207.5,-658.5c53.7,-170.3,84.5,-266.8,92.5,-289.5zM1001 80h400000v40h-400000z"></path></svg></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.4817em;"><span></span></span></span></span></span></span></span></span>，其中：</p><p><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mfrac><mi>n</mi><mrow><mfrac><mn>1</mn><msub><mi>a</mi><mn>1</mn></msub></mfrac><mo>+</mo><mfrac><mn>1</mn><msub><mi>a</mi><mn>2</mn></msub></mfrac><mo>+</mo><mo>⋯</mo><mo>+</mo><mfrac><mn>1</mn><msub><mi>a</mi><mi>n</mi></msub></mfrac></mrow></mfrac></mrow><annotation encoding="application/x-tex">\frac{n}{\frac{1}{a_1} + \frac{1}{a_2} + \cdots + \frac{1}{a_n}}</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="katex-base"><span class="katex-strut" style="height:1.487em;vertical-align:-0.7916em;"></span><span class="mord"><span class="mopen nulldelimiter"></span><span class="mfrac"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.6954em;"><span style="top:-2.599em;"><span class="pstrut" style="height:3em;"></span><span class="katex-sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mtight"><span class="mopen nulldelimiter katex-sizing reset-size3 size6"></span><span class="mfrac"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.8443em;"><span style="top:-2.656em;"><span class="pstrut" style="height:3em;"></span><span class="katex-sizing reset-size3 size1 mtight"><span class="mord mtight"><span class="mord mtight"><span class="mord mathnormal mtight">a</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3448em;"><span style="top:-2.3448em;margin-left:0em;margin-right:0.1em;"><span class="pstrut" style="height:2.6444em;"></span><span class="mord mtight">1</span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.2996em;"><span></span></span></span></span></span></span></span></span></span><span style="top:-3.2255em;"><span class="pstrut" style="height:3em;"></span><span class="frac-line mtight" style="border-bottom-width:0.049em;"></span></span><span style="top:-3.384em;"><span class="pstrut" style="height:3em;"></span><span class="katex-sizing reset-size3 size1 mtight"><span class="mord mtight"><span class="mord mtight">1</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.558em;"><span></span></span></span></span></span><span class="mclose nulldelimiter katex-sizing reset-size3 size6"></span></span><span class="mbin mtight">+</span><span class="mord mtight"><span class="mopen nulldelimiter katex-sizing reset-size3 size6"></span><span class="mfrac"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.8443em;"><span style="top:-2.656em;"><span class="pstrut" style="height:3em;"></span><span class="katex-sizing reset-size3 size1 mtight"><span class="mord mtight"><span class="mord mtight"><span class="mord mathnormal mtight">a</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3448em;"><span style="top:-2.3448em;margin-left:0em;margin-right:0.1em;"><span class="pstrut" style="height:2.6444em;"></span><span class="mord mtight">2</span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.2996em;"><span></span></span></span></span></span></span></span></span></span><span style="top:-3.2255em;"><span class="pstrut" style="height:3em;"></span><span class="frac-line mtight" style="border-bottom-width:0.049em;"></span></span><span style="top:-3.384em;"><span class="pstrut" style="height:3em;"></span><span class="katex-sizing reset-size3 size1 mtight"><span class="mord mtight"><span class="mord mtight">1</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.558em;"><span></span></span></span></span></span><span class="mclose nulldelimiter katex-sizing reset-size3 size6"></span></span><span class="mbin mtight">+</span><span class="minner mtight">⋯</span><span class="mbin mtight">+</span><span class="mord mtight"><span class="mopen nulldelimiter katex-sizing reset-size3 size6"></span><span class="mfrac"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.8443em;"><span style="top:-2.656em;"><span class="pstrut" style="height:3em;"></span><span class="katex-sizing reset-size3 size1 mtight"><span class="mord mtight"><span class="mord mtight"><span class="mord mathnormal mtight">a</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.2306em;"><span style="top:-2.3em;margin-left:0em;margin-right:0.1em;"><span class="pstrut" style="height:2.5em;"></span><span class="mord mathnormal mtight">n</span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.2em;"><span></span></span></span></span></span></span></span></span></span><span style="top:-3.2255em;"><span class="pstrut" style="height:3em;"></span><span class="frac-line mtight" style="border-bottom-width:0.049em;"></span></span><span style="top:-3.384em;"><span class="pstrut" style="height:3em;"></span><span class="katex-sizing reset-size3 size1 mtight"><span class="mord mtight"><span class="mord mtight">1</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.4869em;"><span></span></span></span></span></span><span class="mclose nulldelimiter katex-sizing reset-size3 size6"></span></span></span></span></span><span style="top:-3.23em;"><span class="pstrut" style="height:3em;"></span><span class="frac-line" style="border-bottom-width:0.04em;"></span></span><span style="top:-3.394em;"><span class="pstrut" style="height:3em;"></span><span class="katex-sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">n</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.7916em;"><span></span></span></span></span></span><span class="mclose nulldelimiter"></span></span></span></span></span> 是调和平均值，</p><p><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mroot><mrow><msub><mi>a</mi><mn>1</mn></msub><mo>⋅</mo><msub><mi>a</mi><mn>2</mn></msub><mo>⋯</mo><msub><mi>a</mi><mi>n</mi></msub></mrow><mi>n</mi></mroot></mrow><annotation encoding="application/x-tex">\sqrt[n]{a_1 \cdot a_2 \cdots a_n}</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="katex-base"><span class="katex-strut" style="height:1.04em;vertical-align:-0.3078em;"></span><span class="mord sqrt"><span class="katex-root"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.4699em;"><span style="top:-2.7547em;"><span class="pstrut" style="height:2.5em;"></span><span class="katex-sizing reset-size6 size1 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">n</span></span></span></span></span></span></span></span><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.7322em;"><span class="svg-align" style="top:-3em;"><span class="pstrut" style="height:3em;"></span><span class="mord" style="padding-left:0.833em;"><span class="mord"><span class="mord mathnormal">a</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3011em;"><span style="top:-2.55em;margin-left:0em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="katex-sizing reset-size6 size3 mtight"><span class="mord mtight">1</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">⋅</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mord"><span class="mord mathnormal">a</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3011em;"><span style="top:-2.55em;margin-left:0em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="katex-sizing reset-size6 size3 mtight"><span class="mord mtight">2</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.1667em;"></span><span class="minner">⋯</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord"><span class="mord mathnormal">a</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.1514em;"><span style="top:-2.55em;margin-left:0em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="katex-sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight">n</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span></span></span><span style="top:-2.6922em;"><span class="pstrut" style="height:3em;"></span><span class="hide-tail" style="min-width:0.853em;height:1.08em;"><svg xmlns="http://www.w3.org/2000/svg" width="400em" height="1.08em" viewBox="0 0 400000 1080" preserveAspectRatio="xMinYMin slice"><path d="M95,702c-2.7,0,-7.17,-2.7,-13.5,-8c-5.8,-5.3,-9.5,-10,-9.5,-14c0,-2,0.3,-3.3,1,-4c1.3,-2.7,23.83,-20.7,67.5,-54c44.2,-33.3,65.8,-50.3,66.5,-51c1.3,-1.3,3,-2,5,-2c4.7,0,8.7,3.3,12,10s173,378,173,378c0.7,0,35.3,-71,104,-213c68.7,-142,137.5,-285,206.5,-429c69,-144,104.5,-217.7,106.5,-221l0 -0c5.3,-9.3,12,-14,20,-14H400000v40H845.2724s-225.272,467,-225.272,467s-235,486,-235,486c-2.7,4.7,-9,7,-19,7c-6,0,-10,-1,-12,-3s-194,-422,-194,-422s-65,47,-65,47zM834 80h400000v40h-400000z"></path></svg></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.3078em;"><span></span></span></span></span></span></span></span></span> 是几何平均值，</p><p><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mfrac><mrow><msub><mi>a</mi><mn>1</mn></msub><mo>+</mo><msub><mi>a</mi><mn>2</mn></msub><mo>+</mo><mo>⋯</mo><mo>+</mo><msub><mi>a</mi><mi>n</mi></msub></mrow><mi>n</mi></mfrac></mrow><annotation encoding="application/x-tex">\frac{a_1 + a_2 + \cdots + a_n}{n}</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="katex-base"><span class="katex-strut" style="height:1.1634em;vertical-align:-0.345em;"></span><span class="mord"><span class="mopen nulldelimiter"></span><span class="mfrac"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.8184em;"><span style="top:-2.655em;"><span class="pstrut" style="height:3em;"></span><span class="katex-sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">n</span></span></span></span><span style="top:-3.23em;"><span class="pstrut" style="height:3em;"></span><span class="frac-line" style="border-bottom-width:0.04em;"></span></span><span style="top:-3.4101em;"><span class="pstrut" style="height:3em;"></span><span class="katex-sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mtight"><span class="mord mathnormal mtight">a</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3173em;"><span style="top:-2.357em;margin-left:0em;margin-right:0.0714em;"><span class="pstrut" style="height:2.5em;"></span><span class="katex-sizing reset-size3 size1 mtight"><span class="mord mtight">1</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.143em;"><span></span></span></span></span></span></span><span class="mbin mtight">+</span><span class="mord mtight"><span class="mord mathnormal mtight">a</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3173em;"><span style="top:-2.357em;margin-left:0em;margin-right:0.0714em;"><span class="pstrut" style="height:2.5em;"></span><span class="katex-sizing reset-size3 size1 mtight"><span class="mord mtight">2</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.143em;"><span></span></span></span></span></span></span><span class="mbin mtight">+</span><span class="minner mtight">⋯</span><span class="mbin mtight">+</span><span class="mord mtight"><span class="mord mathnormal mtight">a</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.1645em;"><span style="top:-2.357em;margin-left:0em;margin-right:0.0714em;"><span class="pstrut" style="height:2.5em;"></span><span class="katex-sizing reset-size3 size1 mtight"><span class="mord mathnormal mtight">n</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.143em;"><span></span></span></span></span></span></span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.345em;"><span></span></span></span></span></span><span class="mclose nulldelimiter"></span></span></span></span></span> 是算术平均值，</p><p><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msqrt><mfrac><mrow><msubsup><mi>a</mi><mn>1</mn><mn>2</mn></msubsup><mo>+</mo><msubsup><mi>a</mi><mn>2</mn><mn>2</mn></msubsup><mo>+</mo><mo>⋯</mo><mo>+</mo><msubsup><mi>a</mi><mi>n</mi><mn>2</mn></msubsup></mrow><mi>n</mi></mfrac></msqrt></mrow><annotation encoding="application/x-tex">\sqrt{\frac{a_1^2 + a_2^2 + \cdots + a_n^2}{n}}</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="katex-base"><span class="katex-strut" style="height:1.84em;vertical-align:-0.4817em;"></span><span class="mord sqrt"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:1.3583em;"><span class="svg-align" style="top:-3.8em;"><span class="pstrut" style="height:3.8em;"></span><span class="mord" style="padding-left:1em;"><span class="mord"><span class="mopen nulldelimiter"></span><span class="mfrac"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:1.0916em;"><span style="top:-2.655em;"><span class="pstrut" style="height:3em;"></span><span class="katex-sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">n</span></span></span></span><span style="top:-3.23em;"><span class="pstrut" style="height:3em;"></span><span class="frac-line" style="border-bottom-width:0.04em;"></span></span><span style="top:-3.5281em;"><span class="pstrut" style="height:3em;"></span><span class="katex-sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mtight"><span class="mord mathnormal mtight">a</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.8051em;"><span style="top:-2.1885em;margin-left:0em;margin-right:0.0714em;"><span class="pstrut" style="height:2.5em;"></span><span class="katex-sizing reset-size3 size1 mtight"><span class="mord mtight">1</span></span></span><span style="top:-2.8448em;margin-right:0.0714em;"><span class="pstrut" style="height:2.5em;"></span><span class="katex-sizing reset-size3 size1 mtight"><span class="mord mtight">2</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.3115em;"><span></span></span></span></span></span></span><span class="mbin mtight">+</span><span class="mord mtight"><span class="mord mathnormal mtight">a</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.8051em;"><span style="top:-2.1885em;margin-left:0em;margin-right:0.0714em;"><span class="pstrut" style="height:2.5em;"></span><span class="katex-sizing reset-size3 size1 mtight"><span class="mord mtight">2</span></span></span><span style="top:-2.8448em;margin-right:0.0714em;"><span class="pstrut" style="height:2.5em;"></span><span class="katex-sizing reset-size3 size1 mtight"><span class="mord mtight">2</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.3115em;"><span></span></span></span></span></span></span><span class="mbin mtight">+</span><span class="minner mtight">⋯</span><span class="mbin mtight">+</span><span class="mord mtight"><span class="mord mathnormal mtight">a</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.7463em;"><span style="top:-2.214em;margin-left:0em;margin-right:0.0714em;"><span class="pstrut" style="height:2.5em;"></span><span class="katex-sizing reset-size3 size1 mtight"><span class="mord mathnormal mtight">n</span></span></span><span style="top:-2.786em;margin-right:0.0714em;"><span class="pstrut" style="height:2.5em;"></span><span class="katex-sizing reset-size3 size1 mtight"><span class="mord mtight">2</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.286em;"><span></span></span></span></span></span></span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.345em;"><span></span></span></span></span></span><span class="mclose nulldelimiter"></span></span></span></span><span style="top:-3.3183em;"><span class="pstrut" style="height:3.8em;"></span><span class="hide-tail" style="min-width:1.02em;height:1.88em;"><svg xmlns="http://www.w3.org/2000/svg" width="400em" height="1.88em" viewBox="0 0 400000 1944" preserveAspectRatio="xMinYMin slice"><path d="M983 90l0 -0c4,-6.7,10,-10,18,-10 H400000v40H1013.1s-83.4,268,-264.1,840c-180.7,572,-277,876.3,-289,913c-4.7,4.7,-12.7,7,-24,7s-12,0,-12,0c-1.3,-3.3,-3.7,-11.7,-7,-25c-35.3,-125.3,-106.7,-373.3,-214,-744c-10,12,-21,25,-33,39s-32,39,-32,39c-6,-5.3,-15,-14,-27,-26s25,-30,25,-30c26.7,-32.7,52,-63,76,-91s52,-60,52,-60s208,722,208,722c56,-175.3,126.3,-397.3,211,-666c84.7,-268.7,153.8,-488.2,207.5,-658.5c53.7,-170.3,84.5,-266.8,92.5,-289.5zM1001 80h400000v40h-400000z"></path></svg></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.4817em;"><span></span></span></span></span></span></span></span></span> 是平方平均值．</p><p>这个不等式链展示了不同平均值之间的大小关系．</p><h1 id="%E7%B3%96%E6%B0%B4%E4%B8%8D%E7%AD%89%E5%BC%8F" tabindex="-1">糖水不等式</h1><p>一杯质量为 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>b</mi></mrow><annotation encoding="application/x-tex">b</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="katex-base"><span class="katex-strut" style="height:0.6944em;"></span><span class="mord mathnormal">b</span></span></span></span> 的糖水含有质量为 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>a</mi></mrow><annotation encoding="application/x-tex">a</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="katex-base"><span class="katex-strut" style="height:0.4306em;"></span><span class="mord mathnormal">a</span></span></span></span> 的糖分，易得该杯糖的质量浓度为 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mfrac><mi>a</mi><mi>b</mi></mfrac></mrow><annotation encoding="application/x-tex">\frac{a}{b}</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="katex-base"><span class="katex-strut" style="height:1.0404em;vertical-align:-0.345em;"></span><span class="mord"><span class="mopen nulldelimiter"></span><span class="mfrac"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.6954em;"><span style="top:-2.655em;"><span class="pstrut" style="height:3em;"></span><span class="katex-sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">b</span></span></span></span><span style="top:-3.23em;"><span class="pstrut" style="height:3em;"></span><span class="frac-line" style="border-bottom-width:0.04em;"></span></span><span style="top:-3.394em;"><span class="pstrut" style="height:3em;"></span><span class="katex-sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">a</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.345em;"><span></span></span></span></span></span><span class="mclose nulldelimiter"></span></span></span></span></span>．向杯中加入质量为 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>c</mi></mrow><annotation encoding="application/x-tex">c</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="katex-base"><span class="katex-strut" style="height:0.4306em;"></span><span class="mord mathnormal">c</span></span></span></span> 的糖，易得该杯糖水的质量浓度为 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mfrac><mrow><mi>a</mi><mo>+</mo><mi>c</mi></mrow><mrow><mi>b</mi><mo>+</mo><mi>c</mi></mrow></mfrac></mrow><annotation encoding="application/x-tex">\frac{a+c}{b+c}</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="katex-base"><span class="katex-strut" style="height:1.2057em;vertical-align:-0.4033em;"></span><span class="mord"><span class="mopen nulldelimiter"></span><span class="mfrac"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.8023em;"><span style="top:-2.655em;"><span class="pstrut" style="height:3em;"></span><span class="katex-sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">b</span><span class="mbin mtight">+</span><span class="mord mathnormal mtight">c</span></span></span></span><span style="top:-3.23em;"><span class="pstrut" style="height:3em;"></span><span class="frac-line" style="border-bottom-width:0.04em;"></span></span><span style="top:-3.394em;"><span class="pstrut" style="height:3em;"></span><span class="katex-sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">a</span><span class="mbin mtight">+</span><span class="mord mathnormal mtight">c</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.4033em;"><span></span></span></span></span></span><span class="mclose nulldelimiter"></span></span></span></span></span>．由常识即可得 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mfrac><mi>a</mi><mi>b</mi></mfrac><mo>&lt;</mo><mfrac><mrow><mi>a</mi><mo>+</mo><mi>c</mi></mrow><mrow><mi>b</mi><mo>+</mo><mi>c</mi></mrow></mfrac></mrow><annotation encoding="application/x-tex">\frac{a}{b} &lt; \frac{a+c}{b+c}</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="katex-base"><span class="katex-strut" style="height:1.0404em;vertical-align:-0.345em;"></span><span class="mord"><span class="mopen nulldelimiter"></span><span class="mfrac"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.6954em;"><span style="top:-2.655em;"><span class="pstrut" style="height:3em;"></span><span class="katex-sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">b</span></span></span></span><span style="top:-3.23em;"><span class="pstrut" style="height:3em;"></span><span class="frac-line" style="border-bottom-width:0.04em;"></span></span><span style="top:-3.394em;"><span class="pstrut" style="height:3em;"></span><span class="katex-sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">a</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.345em;"><span></span></span></span></span></span><span class="mclose nulldelimiter"></span></span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">&lt;</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="katex-base"><span class="katex-strut" style="height:1.2057em;vertical-align:-0.4033em;"></span><span class="mord"><span class="mopen nulldelimiter"></span><span class="mfrac"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.8023em;"><span style="top:-2.655em;"><span class="pstrut" style="height:3em;"></span><span class="katex-sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">b</span><span class="mbin mtight">+</span><span class="mord mathnormal mtight">c</span></span></span></span><span style="top:-3.23em;"><span class="pstrut" style="height:3em;"></span><span class="frac-line" style="border-bottom-width:0.04em;"></span></span><span style="top:-3.394em;"><span class="pstrut" style="height:3em;"></span><span class="katex-sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">a</span><span class="mbin mtight">+</span><span class="mord mathnormal mtight">c</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.4033em;"><span></span></span></span></span></span><span class="mclose nulldelimiter"></span></span></span></span></span>．并由情境得：<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>b</mi><mo>&gt;</mo><mi>a</mi><mo>&gt;</mo><mn>0</mn><mo separator="true">,</mo><mi>c</mi><mo>&gt;</mo><mn>0</mn></mrow><annotation encoding="application/x-tex">b&gt;a&gt;0,c&gt;0</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="katex-base"><span class="katex-strut" style="height:0.7335em;vertical-align:-0.0391em;"></span><span class="mord mathnormal">b</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">&gt;</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="katex-base"><span class="katex-strut" style="height:0.5782em;vertical-align:-0.0391em;"></span><span class="mord mathnormal">a</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">&gt;</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="katex-base"><span class="katex-strut" style="height:0.8389em;vertical-align:-0.1944em;"></span><span class="mord">0</span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord mathnormal">c</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">&gt;</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="katex-base"><span class="katex-strut" style="height:0.6444em;"></span><span class="mord">0</span></span></span></span>．</p><h2 id="%E8%AF%81%E6%98%8E-2" tabindex="-1">证明</h2><p>作差：<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mfrac><mi>a</mi><mi>b</mi></mfrac><mo>−</mo><mfrac><mrow><mi>a</mi><mo>+</mo><mi>c</mi></mrow><mrow><mi>b</mi><mo>+</mo><mi>c</mi></mrow></mfrac></mrow><annotation encoding="application/x-tex">\frac{a}{b} - \frac{a+c}{b+c}</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="katex-base"><span class="katex-strut" style="height:1.0404em;vertical-align:-0.345em;"></span><span class="mord"><span class="mopen nulldelimiter"></span><span class="mfrac"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.6954em;"><span style="top:-2.655em;"><span class="pstrut" style="height:3em;"></span><span class="katex-sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">b</span></span></span></span><span style="top:-3.23em;"><span class="pstrut" style="height:3em;"></span><span class="frac-line" style="border-bottom-width:0.04em;"></span></span><span style="top:-3.394em;"><span class="pstrut" style="height:3em;"></span><span class="katex-sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">a</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.345em;"><span></span></span></span></span></span><span class="mclose nulldelimiter"></span></span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">−</span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="katex-base"><span class="katex-strut" style="height:1.2057em;vertical-align:-0.4033em;"></span><span class="mord"><span class="mopen nulldelimiter"></span><span class="mfrac"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.8023em;"><span style="top:-2.655em;"><span class="pstrut" style="height:3em;"></span><span class="katex-sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">b</span><span class="mbin mtight">+</span><span class="mord mathnormal mtight">c</span></span></span></span><span style="top:-3.23em;"><span class="pstrut" style="height:3em;"></span><span class="frac-line" style="border-bottom-width:0.04em;"></span></span><span style="top:-3.394em;"><span class="pstrut" style="height:3em;"></span><span class="katex-sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">a</span><span class="mbin mtight">+</span><span class="mord mathnormal mtight">c</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.4033em;"><span></span></span></span></span></span><span class="mclose nulldelimiter"></span></span></span></span></span></p><p>简化后得到：<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mfrac><mrow><mi>c</mi><mo stretchy="false">(</mo><mi>a</mi><mo>−</mo><mi>b</mi><mo stretchy="false">)</mo></mrow><mrow><mi>b</mi><mo stretchy="false">(</mo><mi>b</mi><mo>+</mo><mi>c</mi><mo stretchy="false">)</mo></mrow></mfrac><mo>&gt;</mo><mn>0</mn></mrow><annotation encoding="application/x-tex">\frac{c(a - b)}{b(b+c)} &gt; 0</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="katex-base"><span class="katex-strut" style="height:1.53em;vertical-align:-0.52em;"></span><span class="mord"><span class="mopen nulldelimiter"></span><span class="mfrac"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:1.01em;"><span style="top:-2.655em;"><span class="pstrut" style="height:3em;"></span><span class="katex-sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">b</span><span class="mopen mtight">(</span><span class="mord mathnormal mtight">b</span><span class="mbin mtight">+</span><span class="mord mathnormal mtight">c</span><span class="mclose mtight">)</span></span></span></span><span style="top:-3.23em;"><span class="pstrut" style="height:3em;"></span><span class="frac-line" style="border-bottom-width:0.04em;"></span></span><span style="top:-3.485em;"><span class="pstrut" style="height:3em;"></span><span class="katex-sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">c</span><span class="mopen mtight">(</span><span class="mord mathnormal mtight">a</span><span class="mbin mtight">−</span><span class="mord mathnormal mtight">b</span><span class="mclose mtight">)</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.52em;"><span></span></span></span></span></span><span class="mclose nulldelimiter"></span></span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">&gt;</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="katex-base"><span class="katex-strut" style="height:0.6444em;"></span><span class="mord">0</span></span></span></span></p><p>所以不等式 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mfrac><mi>a</mi><mi>b</mi></mfrac><mo>&lt;</mo><mfrac><mrow><mi>a</mi><mo>+</mo><mi>c</mi></mrow><mrow><mi>b</mi><mo>+</mo><mi>c</mi></mrow></mfrac></mrow><annotation encoding="application/x-tex">\frac{a}{b} &lt; \frac{a+c}{b+c}</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="katex-base"><span class="katex-strut" style="height:1.0404em;vertical-align:-0.345em;"></span><span class="mord"><span class="mopen nulldelimiter"></span><span class="mfrac"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.6954em;"><span style="top:-2.655em;"><span class="pstrut" style="height:3em;"></span><span class="katex-sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">b</span></span></span></span><span style="top:-3.23em;"><span class="pstrut" style="height:3em;"></span><span class="frac-line" style="border-bottom-width:0.04em;"></span></span><span style="top:-3.394em;"><span class="pstrut" style="height:3em;"></span><span class="katex-sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">a</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.345em;"><span></span></span></span></span></span><span class="mclose nulldelimiter"></span></span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">&lt;</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="katex-base"><span class="katex-strut" style="height:1.2057em;vertical-align:-0.4033em;"></span><span class="mord"><span class="mopen nulldelimiter"></span><span class="mfrac"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.8023em;"><span style="top:-2.655em;"><span class="pstrut" style="height:3em;"></span><span class="katex-sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">b</span><span class="mbin mtight">+</span><span class="mord mathnormal mtight">c</span></span></span></span><span style="top:-3.23em;"><span class="pstrut" style="height:3em;"></span><span class="frac-line" style="border-bottom-width:0.04em;"></span></span><span style="top:-3.394em;"><span class="pstrut" style="height:3em;"></span><span class="katex-sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">a</span><span class="mbin mtight">+</span><span class="mord mathnormal mtight">c</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.4033em;"><span></span></span></span></span></span><span class="mclose nulldelimiter"></span></span></span></span></span> 在 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>a</mi><mo>&gt;</mo><mi>b</mi><mo>&gt;</mo><mn>0</mn><mo separator="true">,</mo><mi>c</mi><mo>&gt;</mo><mn>0</mn></mrow><annotation encoding="application/x-tex">a&gt;b&gt;0,c&gt;0</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="katex-base"><span class="katex-strut" style="height:0.5782em;vertical-align:-0.0391em;"></span><span class="mord mathnormal">a</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">&gt;</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="katex-base"><span class="katex-strut" style="height:0.7335em;vertical-align:-0.0391em;"></span><span class="mord mathnormal">b</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">&gt;</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="katex-base"><span class="katex-strut" style="height:0.8389em;vertical-align:-0.1944em;"></span><span class="mord">0</span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord mathnormal">c</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">&gt;</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="katex-base"><span class="katex-strut" style="height:0.6444em;"></span><span class="mord">0</span></span></span></span> 时成立．</p><h1 id="%E6%9D%83%E6%96%B9%E5%92%8C%E4%B8%8D%E7%AD%89%E5%BC%8F" tabindex="-1">权方和不等式</h1><p><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mfrac><msup><mi>x</mi><mn>2</mn></msup><mi>a</mi></mfrac><mo>+</mo><mfrac><msup><mi>y</mi><mn>2</mn></msup><mi>b</mi></mfrac><mo>≥</mo><mfrac><mrow><mo stretchy="false">(</mo><mi>x</mi><mo>+</mo><mi>y</mi><msup><mo stretchy="false">)</mo><mn>2</mn></msup></mrow><mrow><mi>a</mi><mo>+</mo><mi>b</mi></mrow></mfrac><mtext>&nbsp;</mtext><mo stretchy="false">(</mo><mi>a</mi><mo separator="true">,</mo><mi>b</mi><mo separator="true">,</mo><mi>x</mi><mo separator="true">,</mo><mi>y</mi><mo>∈</mo><msub><mi>R</mi><mo>+</mo></msub><mo stretchy="false">)</mo></mrow><annotation encoding="application/x-tex">\frac{x^2}{a}+\frac{y^2}{b} \geq \frac{(x+y)^2}{a+b} \nobreakspace(a,b,x,y \in R_+)</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="katex-base"><span class="katex-strut" style="height:1.3629em;vertical-align:-0.345em;"></span><span class="mord"><span class="mopen nulldelimiter"></span><span class="mfrac"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:1.0179em;"><span style="top:-2.655em;"><span class="pstrut" style="height:3em;"></span><span class="katex-sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">a</span></span></span></span><span style="top:-3.23em;"><span class="pstrut" style="height:3em;"></span><span class="frac-line" style="border-bottom-width:0.04em;"></span></span><span style="top:-3.394em;"><span class="pstrut" style="height:3em;"></span><span class="katex-sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mtight"><span class="mord mathnormal mtight">x</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.8913em;"><span style="top:-2.931em;margin-right:0.0714em;"><span class="pstrut" style="height:2.5em;"></span><span class="katex-sizing reset-size3 size1 mtight"><span class="mord mtight">2</span></span></span></span></span></span></span></span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.345em;"><span></span></span></span></span></span><span class="mclose nulldelimiter"></span></span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">+</span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="katex-base"><span class="katex-strut" style="height:1.415em;vertical-align:-0.345em;"></span><span class="mord"><span class="mopen nulldelimiter"></span><span class="mfrac"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:1.07em;"><span style="top:-2.655em;"><span class="pstrut" style="height:3em;"></span><span class="katex-sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">b</span></span></span></span><span style="top:-3.23em;"><span class="pstrut" style="height:3em;"></span><span class="frac-line" style="border-bottom-width:0.04em;"></span></span><span style="top:-3.4461em;"><span class="pstrut" style="height:3em;"></span><span class="katex-sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mtight"><span class="mord mathnormal mtight" style="margin-right:0.0359em;">y</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.8913em;"><span style="top:-2.931em;margin-right:0.0714em;"><span class="pstrut" style="height:2.5em;"></span><span class="katex-sizing reset-size3 size1 mtight"><span class="mord mtight">2</span></span></span></span></span></span></span></span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.345em;"><span></span></span></span></span></span><span class="mclose nulldelimiter"></span></span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">≥</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="katex-base"><span class="katex-strut" style="height:1.5123em;vertical-align:-0.4033em;"></span><span class="mord"><span class="mopen nulldelimiter"></span><span class="mfrac"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:1.1089em;"><span style="top:-2.655em;"><span class="pstrut" style="height:3em;"></span><span class="katex-sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">a</span><span class="mbin mtight">+</span><span class="mord mathnormal mtight">b</span></span></span></span><span style="top:-3.23em;"><span class="pstrut" style="height:3em;"></span><span class="frac-line" style="border-bottom-width:0.04em;"></span></span><span style="top:-3.485em;"><span class="pstrut" style="height:3em;"></span><span class="katex-sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mopen mtight">(</span><span class="mord mathnormal mtight">x</span><span class="mbin mtight">+</span><span class="mord mathnormal mtight" style="margin-right:0.0359em;">y</span><span class="mclose mtight"><span class="mclose mtight">)</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.8913em;"><span style="top:-2.931em;margin-right:0.0714em;"><span class="pstrut" style="height:2.5em;"></span><span class="katex-sizing reset-size3 size1 mtight"><span class="mord mtight">2</span></span></span></span></span></span></span></span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.4033em;"><span></span></span></span></span></span><span class="mclose nulldelimiter"></span></span><span class="mspace nobreak">&nbsp;</span><span class="mopen">(</span><span class="mord mathnormal">a</span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord mathnormal">b</span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord mathnormal">x</span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord mathnormal" style="margin-right:0.0359em;">y</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">∈</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="katex-base"><span class="katex-strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mord"><span class="mord mathnormal" style="margin-right:0.0077em;">R</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.2583em;"><span style="top:-2.55em;margin-left:-0.0077em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="katex-sizing reset-size6 size3 mtight"><span class="mbin mtight">+</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.2083em;"><span></span></span></span></span></span></span><span class="mclose">)</span></span></span></span></p><h2 id="%E8%AF%81%E6%98%8E-3" tabindex="-1">证明</h2><p class="katex-block"><span class="katex-display"><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML" display="block"><semantics><mtable rowspacing="0.25em" columnalign="right left" columnspacing="0em"><mtr><mtd><mstyle scriptlevel="0" displaystyle="true"><mrow><mo stretchy="false">(</mo><mfrac><msup><mi>x</mi><mn>2</mn></msup><mi>a</mi></mfrac><mo>+</mo><mfrac><msup><mi>y</mi><mn>2</mn></msup><mi>b</mi></mfrac><mo stretchy="false">)</mo><mo>⋅</mo><mo stretchy="false">(</mo><mi>a</mi><mo>+</mo><mi>b</mi><mo stretchy="false">)</mo></mrow></mstyle></mtd><mtd><mstyle scriptlevel="0" displaystyle="true"><mrow><mrow></mrow><mo>=</mo><msup><mi>x</mi><mn>2</mn></msup><mo>+</mo><mfrac><mrow><mi>b</mi><msup><mi>x</mi><mn>2</mn></msup></mrow><mi>a</mi></mfrac><mo>+</mo><mfrac><mrow><mi>a</mi><msup><mi>y</mi><mn>2</mn></msup></mrow><mi>b</mi></mfrac><mo>+</mo><msup><mi>y</mi><mn>2</mn></msup></mrow></mstyle></mtd></mtr><mtr><mtd><mstyle scriptlevel="0" displaystyle="true"><mrow></mrow></mstyle></mtd><mtd><mstyle scriptlevel="0" displaystyle="true"><mrow><mrow></mrow><mo>≥</mo><msup><mi>x</mi><mn>2</mn></msup><mo>+</mo><msup><mi>y</mi><mn>2</mn></msup><mo>+</mo><mn>2</mn><msqrt><mrow><mfrac><mrow><mi>b</mi><msup><mi>x</mi><mn>2</mn></msup></mrow><mi>a</mi></mfrac><mo>⋅</mo><mfrac><mrow><mi>a</mi><msup><mi>y</mi><mn>2</mn></msup></mrow><mi>b</mi></mfrac></mrow></msqrt></mrow></mstyle></mtd></mtr><mtr><mtd><mstyle scriptlevel="0" displaystyle="true"><mrow></mrow></mstyle></mtd><mtd><mstyle scriptlevel="0" displaystyle="true"><mrow><mrow></mrow><mo>=</mo><msup><mi>x</mi><mn>2</mn></msup><mo>+</mo><msup><mi>y</mi><mn>2</mn></msup><mo>+</mo><mn>2</mn><mi>x</mi><mi>y</mi></mrow></mstyle></mtd></mtr><mtr><mtd><mstyle scriptlevel="0" displaystyle="true"><mrow></mrow></mstyle></mtd><mtd><mstyle scriptlevel="0" displaystyle="true"><mrow><mrow></mrow><mo>=</mo><mo stretchy="false">(</mo><mi>x</mi><mo>+</mo><mi>y</mi><msup><mo stretchy="false">)</mo><mn>2</mn></msup></mrow></mstyle></mtd></mtr></mtable><annotation encoding="application/x-tex">\begin{aligned}    (\frac{x^2}{a}+\frac{y^2}{b})\cdot(a+b)    &amp;= x^2+\frac{bx^2}{a}+\frac{ay^2}{b}+y^2 \\    &amp;\geq x^2+y^2+2\sqrt{\frac{bx^2}{a}\cdot\frac{ay^2}{b}} \\    &amp;= x^2+y^2+2xy \\    &amp;=(x+y)^2\end{aligned}</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="katex-base"><span class="katex-strut" style="height:7.9653em;vertical-align:-3.7327em;"></span><span class="mord"><span class="mtable"><span class="col-align-r"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:4.2327em;"><span style="top:-6.441em;"><span class="pstrut" style="height:3.6994em;"></span><span class="mord"><span class="mopen">(</span><span class="mord"><span class="mopen nulldelimiter"></span><span class="mfrac"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:1.4911em;"><span style="top:-2.314em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord mathnormal">a</span></span></span><span style="top:-3.23em;"><span class="pstrut" style="height:3em;"></span><span class="frac-line" style="border-bottom-width:0.04em;"></span></span><span style="top:-3.677em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord"><span class="mord mathnormal">x</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.8141em;"><span style="top:-3.063em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="katex-sizing reset-size6 size3 mtight"><span class="mord mtight">2</span></span></span></span></span></span></span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.686em;"><span></span></span></span></span></span><span class="mclose nulldelimiter"></span></span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">+</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mord"><span class="mopen nulldelimiter"></span><span class="mfrac"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:1.4911em;"><span style="top:-2.314em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord mathnormal">b</span></span></span><span style="top:-3.23em;"><span class="pstrut" style="height:3em;"></span><span class="frac-line" style="border-bottom-width:0.04em;"></span></span><span style="top:-3.677em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord"><span class="mord mathnormal" style="margin-right:0.0359em;">y</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.8141em;"><span style="top:-3.063em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="katex-sizing reset-size6 size3 mtight"><span class="mord mtight">2</span></span></span></span></span></span></span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.686em;"><span></span></span></span></span></span><span class="mclose nulldelimiter"></span></span><span class="mclose">)</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">⋅</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mopen">(</span><span class="mord mathnormal">a</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">+</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mord mathnormal">b</span><span class="mclose">)</span></span></span><span style="top:-3.7556em;"><span class="pstrut" style="height:3.6994em;"></span><span class="mord"></span></span><span style="top:-1.8509em;"><span class="pstrut" style="height:3.6994em;"></span><span class="mord"></span></span><span style="top:-0.3268em;"><span class="pstrut" style="height:3.6994em;"></span><span class="mord"></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:3.7327em;"><span></span></span></span></span></span><span class="col-align-l"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:4.2327em;"><span style="top:-6.441em;"><span class="pstrut" style="height:3.6994em;"></span><span class="mord"><span class="mord"></span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mord"><span class="mord mathnormal">x</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.8641em;"><span style="top:-3.113em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="katex-sizing reset-size6 size3 mtight"><span class="mord mtight">2</span></span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">+</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mord"><span class="mopen nulldelimiter"></span><span class="mfrac"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:1.4911em;"><span style="top:-2.314em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord mathnormal">a</span></span></span><span style="top:-3.23em;"><span class="pstrut" style="height:3em;"></span><span class="frac-line" style="border-bottom-width:0.04em;"></span></span><span style="top:-3.677em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord mathnormal">b</span><span class="mord"><span class="mord mathnormal">x</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.8141em;"><span style="top:-3.063em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="katex-sizing reset-size6 size3 mtight"><span class="mord mtight">2</span></span></span></span></span></span></span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.686em;"><span></span></span></span></span></span><span class="mclose nulldelimiter"></span></span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">+</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mord"><span class="mopen nulldelimiter"></span><span class="mfrac"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:1.4911em;"><span style="top:-2.314em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord mathnormal">b</span></span></span><span style="top:-3.23em;"><span class="pstrut" style="height:3em;"></span><span class="frac-line" style="border-bottom-width:0.04em;"></span></span><span style="top:-3.677em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord mathnormal">a</span><span class="mord"><span class="mord mathnormal" style="margin-right:0.0359em;">y</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.8141em;"><span style="top:-3.063em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="katex-sizing reset-size6 size3 mtight"><span class="mord mtight">2</span></span></span></span></span></span></span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.686em;"><span></span></span></span></span></span><span class="mclose nulldelimiter"></span></span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">+</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mord"><span class="mord mathnormal" style="margin-right:0.0359em;">y</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.8641em;"><span style="top:-3.113em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="katex-sizing reset-size6 size3 mtight"><span class="mord mtight">2</span></span></span></span></span></span></span></span></span></span><span style="top:-3.7556em;"><span class="pstrut" style="height:3.6994em;"></span><span class="mord"><span class="mord"></span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">≥</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mord"><span class="mord mathnormal">x</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.8641em;"><span style="top:-3.113em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="katex-sizing reset-size6 size3 mtight"><span class="mord mtight">2</span></span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">+</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mord"><span class="mord mathnormal" style="margin-right:0.0359em;">y</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.8641em;"><span style="top:-3.113em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="katex-sizing reset-size6 size3 mtight"><span class="mord mtight">2</span></span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">+</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mord">2</span><span class="mord sqrt"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:1.6994em;"><span class="svg-align" style="top:-4.4em;"><span class="pstrut" style="height:4.4em;"></span><span class="mord" style="padding-left:1em;"><span class="mord"><span class="mopen nulldelimiter"></span><span class="mfrac"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:1.4171em;"><span style="top:-2.314em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord mathnormal">a</span></span></span><span style="top:-3.23em;"><span class="pstrut" style="height:3em;"></span><span class="frac-line" style="border-bottom-width:0.04em;"></span></span><span style="top:-3.677em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord mathnormal">b</span><span class="mord"><span class="mord mathnormal">x</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.7401em;"><span style="top:-2.989em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="katex-sizing reset-size6 size3 mtight"><span class="mord mtight">2</span></span></span></span></span></span></span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.686em;"><span></span></span></span></span></span><span class="mclose nulldelimiter"></span></span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">⋅</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mord"><span class="mopen nulldelimiter"></span><span class="mfrac"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:1.4171em;"><span style="top:-2.314em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord mathnormal">b</span></span></span><span style="top:-3.23em;"><span class="pstrut" style="height:3em;"></span><span class="frac-line" style="border-bottom-width:0.04em;"></span></span><span style="top:-3.677em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord mathnormal">a</span><span class="mord"><span class="mord mathnormal" style="margin-right:0.0359em;">y</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.7401em;"><span style="top:-2.989em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="katex-sizing reset-size6 size3 mtight"><span class="mord mtight">2</span></span></span></span></span></span></span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.686em;"><span></span></span></span></span></span><span class="mclose nulldelimiter"></span></span></span></span><span style="top:-3.6594em;"><span class="pstrut" style="height:4.4em;"></span><span class="hide-tail" style="min-width:1.02em;height:2.48em;"><svg xmlns="http://www.w3.org/2000/svg" width="400em" height="2.48em" viewBox="0 0 400000 2592" preserveAspectRatio="xMinYMin slice"><path d="M424,2478c-1.3,-0.7,-38.5,-172,-111.5,-514c-73,-342,-109.8,-513.3,-110.5,-514c0,-2,-10.7,14.3,-32,49c-4.7,7.3,-9.8,15.7,-15.5,25c-5.7,9.3,-9.8,16,-12.5,20s-5,7,-5,7c-4,-3.3,-8.3,-7.7,-13,-13s-13,-13,-13,-13s76,-122,76,-122s77,-121,77,-121s209,968,209,968c0,-2,84.7,-361.7,254,-1079c169.3,-717.3,254.7,-1077.7,256,-1081l0 -0c4,-6.7,10,-10,18,-10 H400000v40H1014.6s-87.3,378.7,-272.6,1166c-185.3,787.3,-279.3,1182.3,-282,1185c-2,6,-10,9,-24,9c-8,0,-12,-0.7,-12,-2z M1001 80h400000v40h-400000z"></path></svg></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.7406em;"><span></span></span></span></span></span></span></span><span style="top:-1.8509em;"><span class="pstrut" style="height:3.6994em;"></span><span class="mord"><span class="mord"></span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mord"><span class="mord mathnormal">x</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.8641em;"><span style="top:-3.113em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="katex-sizing reset-size6 size3 mtight"><span class="mord mtight">2</span></span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">+</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mord"><span class="mord mathnormal" style="margin-right:0.0359em;">y</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.8641em;"><span style="top:-3.113em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="katex-sizing reset-size6 size3 mtight"><span class="mord mtight">2</span></span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">+</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mord">2</span><span class="mord mathnormal">x</span><span class="mord mathnormal" style="margin-right:0.0359em;">y</span></span></span><span style="top:-0.3268em;"><span class="pstrut" style="height:3.6994em;"></span><span class="mord"><span class="mord"></span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mopen">(</span><span class="mord mathnormal">x</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">+</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mord mathnormal" style="margin-right:0.0359em;">y</span><span class="mclose"><span class="mclose">)</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.8641em;"><span style="top:-3.113em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="katex-sizing reset-size6 size3 mtight"><span class="mord mtight">2</span></span></span></span></span></span></span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:3.7327em;"><span></span></span></span></span></span></span></span></span></span></span></span></p><p>利用不等式的基本性质二即可得到 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mfrac><msup><mi>x</mi><mn>2</mn></msup><mi>a</mi></mfrac><mo>+</mo><mfrac><msup><mi>y</mi><mn>2</mn></msup><mi>b</mi></mfrac><mo>≥</mo><mfrac><mrow><mo stretchy="false">(</mo><mi>x</mi><mo>+</mo><mi>y</mi><msup><mo stretchy="false">)</mo><mn>2</mn></msup></mrow><mrow><mi>a</mi><mo>+</mo><mi>b</mi></mrow></mfrac></mrow><annotation encoding="application/x-tex">\frac{x^2}{a}+\frac{y^2}{b} \geq \frac{(x+y)^2}{a+b}</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="katex-base"><span class="katex-strut" style="height:1.3629em;vertical-align:-0.345em;"></span><span class="mord"><span class="mopen nulldelimiter"></span><span class="mfrac"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:1.0179em;"><span style="top:-2.655em;"><span class="pstrut" style="height:3em;"></span><span class="katex-sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">a</span></span></span></span><span style="top:-3.23em;"><span class="pstrut" style="height:3em;"></span><span class="frac-line" style="border-bottom-width:0.04em;"></span></span><span style="top:-3.394em;"><span class="pstrut" style="height:3em;"></span><span class="katex-sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mtight"><span class="mord mathnormal mtight">x</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.8913em;"><span style="top:-2.931em;margin-right:0.0714em;"><span class="pstrut" style="height:2.5em;"></span><span class="katex-sizing reset-size3 size1 mtight"><span class="mord mtight">2</span></span></span></span></span></span></span></span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.345em;"><span></span></span></span></span></span><span class="mclose nulldelimiter"></span></span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">+</span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="katex-base"><span class="katex-strut" style="height:1.415em;vertical-align:-0.345em;"></span><span class="mord"><span class="mopen nulldelimiter"></span><span class="mfrac"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:1.07em;"><span style="top:-2.655em;"><span class="pstrut" style="height:3em;"></span><span class="katex-sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">b</span></span></span></span><span style="top:-3.23em;"><span class="pstrut" style="height:3em;"></span><span class="frac-line" style="border-bottom-width:0.04em;"></span></span><span style="top:-3.4461em;"><span class="pstrut" style="height:3em;"></span><span class="katex-sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mtight"><span class="mord mathnormal mtight" style="margin-right:0.0359em;">y</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.8913em;"><span style="top:-2.931em;margin-right:0.0714em;"><span class="pstrut" style="height:2.5em;"></span><span class="katex-sizing reset-size3 size1 mtight"><span class="mord mtight">2</span></span></span></span></span></span></span></span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.345em;"><span></span></span></span></span></span><span class="mclose nulldelimiter"></span></span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">≥</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="katex-base"><span class="katex-strut" style="height:1.5123em;vertical-align:-0.4033em;"></span><span class="mord"><span class="mopen nulldelimiter"></span><span class="mfrac"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:1.1089em;"><span style="top:-2.655em;"><span class="pstrut" style="height:3em;"></span><span class="katex-sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">a</span><span class="mbin mtight">+</span><span class="mord mathnormal mtight">b</span></span></span></span><span style="top:-3.23em;"><span class="pstrut" style="height:3em;"></span><span class="frac-line" style="border-bottom-width:0.04em;"></span></span><span style="top:-3.485em;"><span class="pstrut" style="height:3em;"></span><span class="katex-sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mopen mtight">(</span><span class="mord mathnormal mtight">x</span><span class="mbin mtight">+</span><span class="mord mathnormal mtight" style="margin-right:0.0359em;">y</span><span class="mclose mtight"><span class="mclose mtight">)</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.8913em;"><span style="top:-2.931em;margin-right:0.0714em;"><span class="pstrut" style="height:2.5em;"></span><span class="katex-sizing reset-size3 size1 mtight"><span class="mord mtight">2</span></span></span></span></span></span></span></span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.4033em;"><span></span></span></span></span></span><span class="mclose nulldelimiter"></span></span></span></span></span></p>]]>
      </content:encoded>
    </item>
    <item>
      <title>To Make Linux Better!</title>
      <link>https://www.lynx3.me/article/b5186965/</link>
      <description>Linux 的备忘录，记录 Linux 相关的一些问题和解决方案。</description>
      <author>LynxCatTheThird</author>
      <category domain="https://www.lynx3.me/categories/%E7%A7%91%E5%AD%A6%E4%B8%8E%E6%8A%80%E6%9C%AF/">科学与技术</category>
      <category domain="https://www.lynx3.me/categories/%E7%A7%91%E5%AD%A6%E4%B8%8E%E6%8A%80%E6%9C%AF/%E8%AE%A1%E7%AE%97%E6%9C%BA/">计算机</category>
      <category domain="https://www.lynx3.me/categories/%E7%A7%91%E5%AD%A6%E4%B8%8E%E6%8A%80%E6%9C%AF/%E8%AE%A1%E7%AE%97%E6%9C%BA/Linux/">Linux</category>
      <category domain="https://www.lynx3.me/tags/Linux/">Linux</category>
      <category domain="https://www.lynx3.me/tags/Bug/">Bug</category>
      <category domain="https://www.lynx3.me/tags/A0/">A0</category>
      <pubDate>Wed, 24 Jul 2024 09:32:40 GMT</pubDate>
      <content:encoded>
        <![CDATA[<h1 id="%E5%87%BA%E5%8F%91%E7%82%B9" tabindex="-1">出发点</h1><ol><li>部分软件未针对 Arch Linux 进行适配，导致出现兼容性问题。</li><li>部分软件的默认配置不尽合理，或与每个人的情况不符，需要进行调整。</li><li>系统的部分行为不够合理，需要进行调整。</li></ol><h1 id="alsa-%E7%9A%84%E9%85%8D%E7%BD%AE%E4%B8%8E%E5%85%BC%E5%AE%B9" tabindex="-1">Alsa 的配置与兼容</h1><p><a href="https://wiki.archlinux.org/title/Advanced_Linux_Sound_Architecture">Alsa</a> 是 Linux 声卡驱动程序，通常是 Linux 默认的声卡驱动程序。</p><p>ArchLinux 的 Alsa 包 似乎没有附带默认配置文件，因此难免遇到问题，此处以我自己用到的 ClassIn 为例。</p><h2 id="%E9%99%A4%E5%8E%BB%E8%BD%AF%E4%BB%B6%E8%87%AA%E5%B8%A6%E7%9A%84%E9%94%99%E8%AF%AF%E7%9A%84%E5%BA%93" tabindex="-1">除去软件自带的错误的库</h2><p>由于 ClassIn 自带一部分 Alsa 库，导致 Alsa 无法正常工作，ClassIn 成了聋哑软件。</p><figure class="highlight apache"><table><tbody><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br></pre></td><td class="code"><pre><span class="line"><span class="attribute">ALSA</span> lib dlmisc.c:<span class="number">170</span>:(snd_dlsym_verify) unable to verify version for symbol snd_func_private_integer</span><br><span class="line"><span class="attribute">ALSA</span> lib conf.c:<span class="number">4556</span>:(_snd_config_evaluate) symbol snd_func_private_integer is not defined inside (null)</span><br><span class="line"><span class="attribute">ALSA</span> lib conf.c:<span class="number">5047</span>:(snd_config_expand) Evaluate error: 没有那个设备或地址</span><br><span class="line"><span class="attribute">ALSA</span> lib conf.c:<span class="number">3694</span>:(snd_config_hook_load) Unable to expand filenames in the pre-load section</span><br><span class="line"><span class="attribute">ALSA</span> lib conf.c:<span class="number">3572</span>:(snd_config_hooks_call) function snd_config_hook_load_for_all_cards returned error: 没有那个设备或地址</span><br><span class="line"><span class="attribute">ALSA</span> lib control.c:<span class="number">1264</span>:(snd_ctl_open_conf) Invalid type for CTL default definition</span><br></pre></td></tr></tbody></table></figure><p>直接删除即可：</p><figure class="highlight bash"><table><tbody><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line"><span class="built_in">rm</span> -rf /opt/apps/classin/lib/libasound.so*</span><br></pre></td></tr></tbody></table></figure><h2 id="%E8%B0%83%E6%95%B4%E9%85%8D%E7%BD%AE%E6%96%87%E4%BB%B6" tabindex="-1">调整配置文件</h2><h3 id="%E6%8C%87%E5%AE%9A%E8%AE%BE%E5%A4%87" tabindex="-1">指定设备</h3><p>再次运行 ClassIn，仍然报错，并且找不到扬声器 / 耳机，只找到麦克风：</p><figure class="highlight apache"><table><tbody><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br></pre></td><td class="code"><pre><span class="line"><span class="attribute">ALSA</span> lib pcm_dmix.c:<span class="number">1000</span>:(snd_pcm_dmix_open) unable to open slave</span><br><span class="line"><span class="attribute">ALSA</span> lib pcm_dmix.c:<span class="number">1000</span>:(snd_pcm_dmix_open) unable to open slave</span><br><span class="line"><span class="attribute">ALSA</span> lib pcm_dmix.c:<span class="number">1000</span>:(snd_pcm_dmix_open) unable to open slave</span><br><span class="line"><span class="attribute">ALSA</span> lib pcm_dmix.c:<span class="number">1000</span>:(snd_pcm_dmix_open) unable to open slave</span><br><span class="line"><span class="attribute">ALSA</span> lib pcm_dmix.c:<span class="number">1000</span>:(snd_pcm_dmix_open) unable to open slave</span><br><span class="line"><span class="attribute">ALSA</span> lib pcm_dmix.c:<span class="number">1000</span>:(snd_pcm_dmix_open) unable to open slave</span><br><span class="line"><span class="attribute">ALSA</span> lib pcm_dmix.c:<span class="number">1000</span>:(snd_pcm_dmix_open) unable to open slave</span><br><span class="line"><span class="attribute">ALSA</span> lib pcm_dmix.c:<span class="number">1000</span>:(snd_pcm_dmix_open) unable to open slave</span><br></pre></td></tr></tbody></table></figure><p>看起来是没找到设备，指定下就好了。</p><p>先找一下设备：</p><figure class="highlight bash"><table><tbody><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">aplay -l</span><br></pre></td></tr></tbody></table></figure><p>输出类似如下内容：</p><figure class="highlight apache"><table><tbody><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br></pre></td><td class="code"><pre><span class="line">**** <span class="attribute">List</span> of PLAYBACK Hardware Devices ****</span><br><span class="line"><span class="attribute">card</span> <span class="number">1</span>: PCH<span class="meta"> [HDA Intel PCH], device 0: ALC897 Analog [ALC897 Analog]</span></span><br><span class="line">  <span class="attribute">Subdevices</span>: <span class="number">1</span>/<span class="number">1</span></span><br><span class="line">  <span class="attribute">Subdevice</span> #<span class="number">0</span>: subdevice #<span class="number">0</span></span><br><span class="line"><span class="attribute">card</span> <span class="number">1</span>: PCH<span class="meta"> [HDA Intel PCH], device 1: ALC897 Digital [ALC897 Digital]</span></span><br><span class="line">  <span class="attribute">Subdevices</span>: <span class="number">1</span>/<span class="number">1</span></span><br><span class="line">  <span class="attribute">Subdevice</span> #<span class="number">0</span>: subdevice #<span class="number">0</span></span><br><span class="line"><span class="attribute">card</span> <span class="number">2</span>: HDMI<span class="meta"> [HDA ATI HDMI], device 3: HDMI 0 [HDMI 0]</span></span><br><span class="line">  <span class="attribute">Subdevices</span>: <span class="number">1</span>/<span class="number">1</span></span><br><span class="line">  <span class="attribute">Subdevice</span> #<span class="number">0</span>: subdevice #<span class="number">0</span></span><br></pre></td></tr></tbody></table></figure><p>发现有两个 Card，分别是 <code>PCH</code> 和 <code>HDMI</code>，其中 <code>PCH</code> 卡有两个 Device，分别是 <code>ALC897 Analog</code> 和 <code>ALC897 Digital</code>，<code>HDMI</code> 卡有一个 Device <code>HDMI 0</code>。</p><p>编辑 <code>/etc/asound.conf</code> 文件，指定声卡。这里我添加如下内容：</p><figure class="highlight haskell"><table><tbody><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br></pre></td><td class="code"><pre><span class="line"><span class="title">pcm</span>.!<span class="keyword">default</span> {</span><br><span class="line">    <span class="class"><span class="keyword">type</span> hw</span></span><br><span class="line">    card <span class="number">1</span></span><br><span class="line">    device <span class="number">0</span></span><br><span class="line">}</span><br><span class="line"></span><br><span class="line"><span class="title">ctl</span>.!<span class="keyword">default</span> {</span><br><span class="line">    <span class="class"><span class="keyword">type</span> hw</span></span><br><span class="line">    card <span class="number">1</span></span><br><span class="line">}</span><br></pre></td></tr></tbody></table></figure><p>当然，也可以用设备名称来指定。</p><p>核实下设备名：</p><figure class="highlight bash"><table><tbody><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">aplay -l | awk -F \: <span class="string">'/,/{print $2}'</span> | awk <span class="string">'{print $1}'</span> | <span class="built_in">uniq</span></span><br></pre></td></tr></tbody></table></figure><p>输出如下内容：</p><figure class="highlight ebnf"><table><tbody><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line"><span class="attribute">PCH</span></span><br><span class="line"><span class="attribute">HDMI</span></span><br></pre></td></tr></tbody></table></figure><p>改写配置文件：</p><figure class="highlight haskell"><table><tbody><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br></pre></td><td class="code"><pre><span class="line"><span class="title">pcm</span>.!<span class="keyword">default</span> {</span><br><span class="line">    <span class="class"><span class="keyword">type</span> hw</span></span><br><span class="line">    card <span class="type">PCH</span></span><br><span class="line">    device <span class="number">0</span></span><br><span class="line">}</span><br><span class="line"></span><br><span class="line"><span class="title">ctl</span>.!<span class="keyword">default</span> {</span><br><span class="line">    <span class="class"><span class="keyword">type</span> hw</span></span><br><span class="line">    card <span class="type">PCH</span></span><br><span class="line">}</span><br></pre></td></tr></tbody></table></figure><p>这样就指定了默认的声卡为 <code>PCH</code>。</p><h3 id="%E8%B0%83%E8%8A%82%E5%A3%B0%E9%81%93" tabindex="-1">调节声道</h3><p>再次运行 ClassIn，仍然报错，而且更糟糕的是输入输出都没有声音——又成聋哑软件了：</p><figure class="highlight apache"><table><tbody><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br></pre></td><td class="code"><pre><span class="line"><span class="attribute">ALSA</span> lib pcm.c:<span class="number">8832</span>:(snd_pcm_set_params) Channels count (<span class="number">1</span>) not available for PLAYBACK: 无效的参数</span><br><span class="line"><span class="attribute">ALSA</span> lib pcm.c:<span class="number">8832</span>:(snd_pcm_set_params) Channels count (<span class="number">1</span>) not available for CAPTURE: 无效的参数</span><br><span class="line"><span class="attribute">ALSA</span> lib pcm.c:<span class="number">8832</span>:(snd_pcm_set_params) Channels count (<span class="number">1</span>) not available for PLAYBACK: 无效的参数</span><br><span class="line"><span class="attribute">ALSA</span> lib pcm.c:<span class="number">8832</span>:(snd_pcm_set_params) Channels count (<span class="number">1</span>) not available for PLAYBACK: 无效的参数</span><br><span class="line"><span class="attribute">ALSA</span> lib pcm.c:<span class="number">8832</span>:(snd_pcm_set_params) Channels count (<span class="number">1</span>) not available for PLAYBACK: 无效的参数</span><br><span class="line"><span class="attribute">ALSA</span> lib pcm.c:<span class="number">8832</span>:(snd_pcm_set_params) Channels count (<span class="number">1</span>) not available for PLAYBACK: 无效的参数</span><br><span class="line"><span class="attribute">ALSA</span> lib pcm.c:<span class="number">8832</span>:(snd_pcm_set_params) Channels count (<span class="number">1</span>) not available for PLAYBACK: 无效的参数</span><br></pre></td></tr></tbody></table></figure><p>声道不太对，调整下配置文件：</p><figure class="highlight haskell"><table><tbody><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br></pre></td><td class="code"><pre><span class="line"><span class="title">pcm</span>.!<span class="keyword">default</span> {</span><br><span class="line">    <span class="class"><span class="keyword">type</span> plug</span></span><br><span class="line">    slave.pcm <span class="string">"hw:1,0"</span></span><br><span class="line">}</span><br><span class="line"></span><br><span class="line"><span class="title">ctl</span>.!<span class="keyword">default</span> {</span><br><span class="line">    <span class="class"><span class="keyword">type</span> hw</span></span><br><span class="line">    card <span class="number">1</span></span><br><span class="line">}</span><br></pre></td></tr></tbody></table></figure><p>这将使用 <code>plug</code> 插件自动转换音频参数以匹配设备的支持范围。</p><p>再次运行 ClassIn，声音设备正常了。</p><h3 id="%E5%90%8E%E8%AE%B0" tabindex="-1">后记</h3><p>还有许多可以修改的，比如解决 Alsa 与 PulseAudio 的冲突，日后再补充……</p><h1 id="fontconfig-%E7%9A%84%E7%BE%8E%E5%8C%96" tabindex="-1">FontConfig 的美化</h1><p><a href="https://wiki.archlinux.org/title/Font_configuration">FontConfig</a> 是 Linux 字体管理器，负责管理系统中字体文件的搜索路径、渲染方式、字体匹配规则等。</p><p>FontConfig 默认配置对 CJK + 编程的应用场景来说并不友好，会遇到以下问题：</p><ol><li>CJK 字形错乱，简体中文、繁体中文、日文、韩文等字形混用</li><li>字体渲染效果不佳，缺少粗体、斜体等效果</li><li>终端设置等宽字体会导致 CJK 字符回退到宋体，设置 CJK 字体会导致等宽字体的错乱</li><li>缺失 Windows 下常用的字体（微软雅黑、黑体、宋体、Arial、Times New Roman、Courier New 等）导致显示效果不佳</li><li>默认的 <code>Sans</code>、<code>Serif</code>、<code>Monospace</code> 等字体不够美观，并且功能欠缺</li><li>ZSH 的符号字体显示效果不佳</li></ol><h2 id="%E6%87%92%E4%BA%BA%E7%AF%87" tabindex="-1">懒人篇</h2><h3 id="%E5%AE%89%E8%A3%85%E5%AD%97%E4%BD%93" tabindex="-1">安装字体</h3><figure class="highlight bash"><table><tbody><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line"><span class="built_in">sudo</span> paru -S noto-fonts noto-fonts-cjk noto-fonts-emoji noto-fonts-extra ttf-font-awesome ttf-nerd-fonts-symbols ttf-th-tshyn ttf-jetbrains-mono</span><br></pre></td></tr></tbody></table></figure><h3 id="%E8%B0%83%E6%95%B4%E9%85%8D%E7%BD%AE%E6%96%87%E4%BB%B6-1" tabindex="-1">调整配置文件</h3><p>编辑 <code>~/.config/fontconfig/fonts.conf</code> 文件，添加以下内容：</p><figure class="highlight xml"><table><tbody><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br><span class="line">48</span><br><span class="line">49</span><br><span class="line">50</span><br><span class="line">51</span><br><span class="line">52</span><br><span class="line">53</span><br><span class="line">54</span><br><span class="line">55</span><br><span class="line">56</span><br><span class="line">57</span><br><span class="line">58</span><br><span class="line">59</span><br><span class="line">60</span><br><span class="line">61</span><br><span class="line">62</span><br><span class="line">63</span><br><span class="line">64</span><br><span class="line">65</span><br><span class="line">66</span><br><span class="line">67</span><br><span class="line">68</span><br><span class="line">69</span><br><span class="line">70</span><br><span class="line">71</span><br><span class="line">72</span><br><span class="line">73</span><br><span class="line">74</span><br><span class="line">75</span><br><span class="line">76</span><br><span class="line">77</span><br><span class="line">78</span><br><span class="line">79</span><br><span class="line">80</span><br><span class="line">81</span><br><span class="line">82</span><br><span class="line">83</span><br><span class="line">84</span><br><span class="line">85</span><br><span class="line">86</span><br><span class="line">87</span><br><span class="line">88</span><br><span class="line">89</span><br><span class="line">90</span><br><span class="line">91</span><br><span class="line">92</span><br><span class="line">93</span><br><span class="line">94</span><br><span class="line">95</span><br><span class="line">96</span><br><span class="line">97</span><br><span class="line">98</span><br><span class="line">99</span><br><span class="line">100</span><br><span class="line">101</span><br><span class="line">102</span><br><span class="line">103</span><br><span class="line">104</span><br><span class="line">105</span><br><span class="line">106</span><br><span class="line">107</span><br><span class="line">108</span><br><span class="line">109</span><br><span class="line">110</span><br><span class="line">111</span><br><span class="line">112</span><br><span class="line">113</span><br><span class="line">114</span><br><span class="line">115</span><br><span class="line">116</span><br><span class="line">117</span><br><span class="line">118</span><br><span class="line">119</span><br><span class="line">120</span><br><span class="line">121</span><br><span class="line">122</span><br><span class="line">123</span><br><span class="line">124</span><br><span class="line">125</span><br><span class="line">126</span><br><span class="line">127</span><br><span class="line">128</span><br><span class="line">129</span><br><span class="line">130</span><br><span class="line">131</span><br><span class="line">132</span><br><span class="line">133</span><br><span class="line">134</span><br><span class="line">135</span><br><span class="line">136</span><br><span class="line">137</span><br><span class="line">138</span><br><span class="line">139</span><br><span class="line">140</span><br><span class="line">141</span><br><span class="line">142</span><br><span class="line">143</span><br><span class="line">144</span><br><span class="line">145</span><br><span class="line">146</span><br><span class="line">147</span><br><span class="line">148</span><br><span class="line">149</span><br><span class="line">150</span><br><span class="line">151</span><br><span class="line">152</span><br><span class="line">153</span><br><span class="line">154</span><br><span class="line">155</span><br><span class="line">156</span><br><span class="line">157</span><br><span class="line">158</span><br><span class="line">159</span><br><span class="line">160</span><br><span class="line">161</span><br><span class="line">162</span><br><span class="line">163</span><br><span class="line">164</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta">&lt;?xml version='1.0'?&gt;</span></span><br><span class="line"><span class="meta">&lt;!DOCTYPE <span class="keyword">fontconfig</span> <span class="keyword">SYSTEM</span> <span class="string">'urn:fontconfig:fonts.dtd'</span>&gt;</span></span><br><span class="line"><span class="tag">&lt;<span class="name">fontconfig</span>&gt;</span></span><br><span class="line">    <span class="comment">&lt;!-- 拓宽系统字体设置生效面 --&gt;</span></span><br><span class="line">    <span class="tag">&lt;<span class="name">match</span> <span class="attr">target</span>=<span class="string">"pattern"</span>&gt;</span></span><br><span class="line">        <span class="tag">&lt;<span class="name">test</span> <span class="attr">name</span>=<span class="string">"family"</span>&gt;</span></span><br><span class="line">            <span class="tag">&lt;<span class="name">string</span>&gt;</span>system-ui<span class="tag">&lt;/<span class="name">string</span>&gt;</span></span><br><span class="line">        <span class="tag">&lt;/<span class="name">test</span>&gt;</span></span><br><span class="line">        <span class="tag">&lt;<span class="name">edit</span> <span class="attr">binding</span>=<span class="string">"strong"</span> <span class="attr">mode</span>=<span class="string">"prepend"</span> <span class="attr">name</span>=<span class="string">"family"</span>&gt;</span></span><br><span class="line">            <span class="tag">&lt;<span class="name">string</span>&gt;</span>sans-serif<span class="tag">&lt;/<span class="name">string</span>&gt;</span></span><br><span class="line">        <span class="tag">&lt;/<span class="name">edit</span>&gt;</span></span><br><span class="line">    <span class="tag">&lt;/<span class="name">match</span>&gt;</span></span><br><span class="line">    <span class="tag">&lt;<span class="name">match</span> <span class="attr">target</span>=<span class="string">"pattern"</span>&gt;</span></span><br><span class="line">        <span class="tag">&lt;<span class="name">test</span> <span class="attr">name</span>=<span class="string">"family"</span> <span class="attr">qual</span>=<span class="string">"any"</span>&gt;</span></span><br><span class="line">            <span class="tag">&lt;<span class="name">string</span>&gt;</span>ui-monospace<span class="tag">&lt;/<span class="name">string</span>&gt;</span></span><br><span class="line">        <span class="tag">&lt;/<span class="name">test</span>&gt;</span></span><br><span class="line">        <span class="tag">&lt;<span class="name">edit</span> <span class="attr">binding</span>=<span class="string">"same"</span> <span class="attr">mode</span>=<span class="string">"assign"</span> <span class="attr">name</span>=<span class="string">"family"</span>&gt;</span></span><br><span class="line">            <span class="tag">&lt;<span class="name">string</span>&gt;</span>monospace<span class="tag">&lt;/<span class="name">string</span>&gt;</span></span><br><span class="line">        <span class="tag">&lt;/<span class="name">edit</span>&gt;</span></span><br><span class="line">    <span class="tag">&lt;/<span class="name">match</span>&gt;</span></span><br><span class="line">    <span class="tag">&lt;<span class="name">match</span> <span class="attr">target</span>=<span class="string">"pattern"</span>&gt;</span></span><br><span class="line">        <span class="tag">&lt;<span class="name">test</span> <span class="attr">name</span>=<span class="string">"family"</span> <span class="attr">qual</span>=<span class="string">"any"</span>&gt;</span></span><br><span class="line">            <span class="tag">&lt;<span class="name">string</span>&gt;</span>ui-sans-serif<span class="tag">&lt;/<span class="name">string</span>&gt;</span></span><br><span class="line">        <span class="tag">&lt;/<span class="name">test</span>&gt;</span></span><br><span class="line">        <span class="tag">&lt;<span class="name">edit</span> <span class="attr">binding</span>=<span class="string">"same"</span> <span class="attr">mode</span>=<span class="string">"assign"</span> <span class="attr">name</span>=<span class="string">"family"</span>&gt;</span></span><br><span class="line">            <span class="tag">&lt;<span class="name">string</span>&gt;</span>sans-serif<span class="tag">&lt;/<span class="name">string</span>&gt;</span></span><br><span class="line">        <span class="tag">&lt;/<span class="name">edit</span>&gt;</span></span><br><span class="line">    <span class="tag">&lt;/<span class="name">match</span>&gt;</span></span><br><span class="line">    <span class="tag">&lt;<span class="name">match</span> <span class="attr">target</span>=<span class="string">"pattern"</span>&gt;</span></span><br><span class="line">        <span class="tag">&lt;<span class="name">test</span> <span class="attr">name</span>=<span class="string">"family"</span> <span class="attr">qual</span>=<span class="string">"any"</span>&gt;</span></span><br><span class="line">            <span class="tag">&lt;<span class="name">string</span>&gt;</span>ui-serif<span class="tag">&lt;/<span class="name">string</span>&gt;</span></span><br><span class="line">        <span class="tag">&lt;/<span class="name">test</span>&gt;</span></span><br><span class="line">        <span class="tag">&lt;<span class="name">edit</span> <span class="attr">binding</span>=<span class="string">"same"</span> <span class="attr">mode</span>=<span class="string">"assign"</span> <span class="attr">name</span>=<span class="string">"family"</span>&gt;</span></span><br><span class="line">            <span class="tag">&lt;<span class="name">string</span>&gt;</span>serif<span class="tag">&lt;/<span class="name">string</span>&gt;</span></span><br><span class="line">        <span class="tag">&lt;/<span class="name">edit</span>&gt;</span></span><br><span class="line">    <span class="tag">&lt;/<span class="name">match</span>&gt;</span></span><br><span class="line">    <span class="comment">&lt;!-- 你可以自行添加更多字体设置 --&gt;</span></span><br><span class="line"></span><br><span class="line">    <span class="comment">&lt;!-- 字体替换  --&gt;</span></span><br><span class="line">    <span class="tag">&lt;<span class="name">match</span> <span class="attr">target</span>=<span class="string">"pattern"</span>&gt;</span></span><br><span class="line">        <span class="tag">&lt;<span class="name">test</span> <span class="attr">compare</span>=<span class="string">"contains"</span> <span class="attr">name</span>=<span class="string">"family"</span>&gt;</span></span><br><span class="line">            <span class="tag">&lt;<span class="name">string</span>&gt;</span>宋体<span class="tag">&lt;/<span class="name">string</span>&gt;</span></span><br><span class="line">        <span class="tag">&lt;/<span class="name">test</span>&gt;</span></span><br><span class="line">        <span class="tag">&lt;<span class="name">edit</span> <span class="attr">binding</span>=<span class="string">"strong"</span> <span class="attr">name</span>=<span class="string">"family"</span>&gt;</span></span><br><span class="line">            <span class="tag">&lt;<span class="name">string</span>&gt;</span>serif<span class="tag">&lt;/<span class="name">string</span>&gt;</span></span><br><span class="line">        <span class="tag">&lt;/<span class="name">edit</span>&gt;</span></span><br><span class="line">    <span class="tag">&lt;/<span class="name">match</span>&gt;</span></span><br><span class="line">    <span class="tag">&lt;<span class="name">match</span> <span class="attr">target</span>=<span class="string">"pattern"</span>&gt;</span></span><br><span class="line">        <span class="tag">&lt;<span class="name">test</span> <span class="attr">compare</span>=<span class="string">"contains"</span> <span class="attr">name</span>=<span class="string">"family"</span>&gt;</span></span><br><span class="line">            <span class="tag">&lt;<span class="name">string</span>&gt;</span>Microsoft YaHei<span class="tag">&lt;/<span class="name">string</span>&gt;</span></span><br><span class="line">        <span class="tag">&lt;/<span class="name">test</span>&gt;</span></span><br><span class="line">        <span class="tag">&lt;<span class="name">edit</span> <span class="attr">binding</span>=<span class="string">"strong"</span> <span class="attr">name</span>=<span class="string">"family"</span>&gt;</span></span><br><span class="line">            <span class="tag">&lt;<span class="name">string</span>&gt;</span>sans-serif<span class="tag">&lt;/<span class="name">string</span>&gt;</span></span><br><span class="line">        <span class="tag">&lt;/<span class="name">edit</span>&gt;</span></span><br><span class="line">    <span class="tag">&lt;/<span class="name">match</span>&gt;</span></span><br><span class="line">    <span class="tag">&lt;<span class="name">match</span> <span class="attr">target</span>=<span class="string">"pattern"</span>&gt;</span></span><br><span class="line">        <span class="tag">&lt;<span class="name">test</span> <span class="attr">compare</span>=<span class="string">"contains"</span> <span class="attr">name</span>=<span class="string">"family"</span>&gt;</span></span><br><span class="line">            <span class="tag">&lt;<span class="name">string</span>&gt;</span>微软雅黑<span class="tag">&lt;/<span class="name">string</span>&gt;</span></span><br><span class="line">        <span class="tag">&lt;/<span class="name">test</span>&gt;</span></span><br><span class="line">        <span class="tag">&lt;<span class="name">edit</span> <span class="attr">binding</span>=<span class="string">"strong"</span> <span class="attr">name</span>=<span class="string">"family"</span>&gt;</span></span><br><span class="line">            <span class="tag">&lt;<span class="name">string</span>&gt;</span>sans-serif<span class="tag">&lt;/<span class="name">string</span>&gt;</span></span><br><span class="line">        <span class="tag">&lt;/<span class="name">edit</span>&gt;</span></span><br><span class="line">    <span class="tag">&lt;/<span class="name">match</span>&gt;</span></span><br><span class="line">    <span class="tag">&lt;<span class="name">match</span> <span class="attr">target</span>=<span class="string">"pattern"</span>&gt;</span></span><br><span class="line">        <span class="tag">&lt;<span class="name">test</span> <span class="attr">compare</span>=<span class="string">"contains"</span> <span class="attr">name</span>=<span class="string">"family"</span>&gt;</span></span><br><span class="line">            <span class="tag">&lt;<span class="name">string</span>&gt;</span>Arial<span class="tag">&lt;/<span class="name">string</span>&gt;</span></span><br><span class="line">        <span class="tag">&lt;/<span class="name">test</span>&gt;</span></span><br><span class="line">        <span class="tag">&lt;<span class="name">edit</span> <span class="attr">binding</span>=<span class="string">"strong"</span> <span class="attr">name</span>=<span class="string">"family"</span>&gt;</span></span><br><span class="line">            <span class="tag">&lt;<span class="name">string</span>&gt;</span>sans-serif<span class="tag">&lt;/<span class="name">string</span>&gt;</span></span><br><span class="line">        <span class="tag">&lt;/<span class="name">edit</span>&gt;</span></span><br><span class="line">    <span class="tag">&lt;/<span class="name">match</span>&gt;</span></span><br><span class="line">    <span class="tag">&lt;<span class="name">match</span> <span class="attr">target</span>=<span class="string">"pattern"</span>&gt;</span></span><br><span class="line">        <span class="tag">&lt;<span class="name">test</span> <span class="attr">compare</span>=<span class="string">"contains"</span> <span class="attr">name</span>=<span class="string">"family"</span>&gt;</span></span><br><span class="line">            <span class="tag">&lt;<span class="name">string</span>&gt;</span>Source Code Pro<span class="tag">&lt;/<span class="name">string</span>&gt;</span></span><br><span class="line">        <span class="tag">&lt;/<span class="name">test</span>&gt;</span></span><br><span class="line">        <span class="tag">&lt;<span class="name">edit</span> <span class="attr">binding</span>=<span class="string">"strong"</span> <span class="attr">name</span>=<span class="string">"family"</span>&gt;</span></span><br><span class="line">            <span class="tag">&lt;<span class="name">string</span>&gt;</span>monospace<span class="tag">&lt;/<span class="name">string</span>&gt;</span></span><br><span class="line">        <span class="tag">&lt;/<span class="name">edit</span>&gt;</span></span><br><span class="line">    <span class="tag">&lt;/<span class="name">match</span>&gt;</span></span><br><span class="line">    <span class="comment">&lt;!-- 你可以自行补充更多字体替换 --&gt;</span></span><br><span class="line"></span><br><span class="line">    <span class="comment">&lt;!-- 等宽字体顺序 --&gt;</span></span><br><span class="line">    <span class="tag">&lt;<span class="name">match</span> <span class="attr">target</span>=<span class="string">"pattern"</span>&gt;</span></span><br><span class="line">        <span class="tag">&lt;<span class="name">test</span> <span class="attr">name</span>=<span class="string">"family"</span> <span class="attr">qual</span>=<span class="string">"any"</span>&gt;</span></span><br><span class="line">            <span class="tag">&lt;<span class="name">string</span>&gt;</span>monospace<span class="tag">&lt;/<span class="name">string</span>&gt;</span></span><br><span class="line">        <span class="tag">&lt;/<span class="name">test</span>&gt;</span></span><br><span class="line">        <span class="tag">&lt;<span class="name">edit</span> <span class="attr">binding</span>=<span class="string">"strong"</span> <span class="attr">mode</span>=<span class="string">"prepend"</span> <span class="attr">name</span>=<span class="string">"family"</span>&gt;</span></span><br><span class="line">            <span class="tag">&lt;<span class="name">string</span>&gt;</span>JetBrains Mono<span class="tag">&lt;/<span class="name">string</span>&gt;</span></span><br><span class="line">            <span class="tag">&lt;<span class="name">string</span>&gt;</span>Noto Sans Mono CJK SC<span class="tag">&lt;/<span class="name">string</span>&gt;</span></span><br><span class="line">            <span class="tag">&lt;<span class="name">string</span>&gt;</span>Noto Color Emoji<span class="tag">&lt;/<span class="name">string</span>&gt;</span></span><br><span class="line">            <span class="tag">&lt;<span class="name">string</span>&gt;</span>Symbols Nerd Font<span class="tag">&lt;/<span class="name">string</span>&gt;</span></span><br><span class="line">            <span class="tag">&lt;<span class="name">string</span>&gt;</span>Font Awesome 6 Free<span class="tag">&lt;/<span class="name">string</span>&gt;</span></span><br><span class="line">        <span class="tag">&lt;/<span class="name">edit</span>&gt;</span></span><br><span class="line">    <span class="tag">&lt;/<span class="name">match</span>&gt;</span></span><br><span class="line"></span><br><span class="line">    <span class="comment">&lt;!-- 无衬线字体顺序 --&gt;</span></span><br><span class="line">    <span class="tag">&lt;<span class="name">match</span> <span class="attr">target</span>=<span class="string">"pattern"</span>&gt;</span></span><br><span class="line">        <span class="tag">&lt;<span class="name">test</span> <span class="attr">name</span>=<span class="string">"family"</span> <span class="attr">qual</span>=<span class="string">"any"</span>&gt;</span></span><br><span class="line">            <span class="tag">&lt;<span class="name">string</span>&gt;</span>sans-serif<span class="tag">&lt;/<span class="name">string</span>&gt;</span></span><br><span class="line">        <span class="tag">&lt;/<span class="name">test</span>&gt;</span></span><br><span class="line">        <span class="tag">&lt;<span class="name">edit</span> <span class="attr">binding</span>=<span class="string">"strong"</span> <span class="attr">mode</span>=<span class="string">"prepend"</span> <span class="attr">name</span>=<span class="string">"family"</span>&gt;</span></span><br><span class="line">            <span class="tag">&lt;<span class="name">string</span>&gt;</span>Noto Sans CJK SC<span class="tag">&lt;/<span class="name">string</span>&gt;</span></span><br><span class="line">            <span class="tag">&lt;<span class="name">string</span>&gt;</span>Noto Color Emoji<span class="tag">&lt;/<span class="name">string</span>&gt;</span></span><br><span class="line">            <span class="tag">&lt;<span class="name">string</span>&gt;</span>Symbols Nerd Font<span class="tag">&lt;/<span class="name">string</span>&gt;</span></span><br><span class="line">            <span class="tag">&lt;<span class="name">string</span>&gt;</span>Font Awesome 6 Free<span class="tag">&lt;/<span class="name">string</span>&gt;</span></span><br><span class="line">        <span class="tag">&lt;/<span class="name">edit</span>&gt;</span></span><br><span class="line">    <span class="tag">&lt;/<span class="name">match</span>&gt;</span></span><br><span class="line"></span><br><span class="line">    <span class="comment">&lt;!-- 衬线字体顺序 --&gt;</span></span><br><span class="line">    <span class="tag">&lt;<span class="name">match</span> <span class="attr">target</span>=<span class="string">"pattern"</span>&gt;</span></span><br><span class="line">        <span class="tag">&lt;<span class="name">test</span> <span class="attr">name</span>=<span class="string">"family"</span> <span class="attr">qual</span>=<span class="string">"any"</span>&gt;</span></span><br><span class="line">            <span class="tag">&lt;<span class="name">string</span>&gt;</span>serif<span class="tag">&lt;/<span class="name">string</span>&gt;</span></span><br><span class="line">        <span class="tag">&lt;/<span class="name">test</span>&gt;</span></span><br><span class="line">        <span class="tag">&lt;<span class="name">edit</span> <span class="attr">binding</span>=<span class="string">"strong"</span> <span class="attr">mode</span>=<span class="string">"prepend"</span> <span class="attr">name</span>=<span class="string">"family"</span>&gt;</span></span><br><span class="line">            <span class="tag">&lt;<span class="name">string</span>&gt;</span>Noto Serif CJK SC<span class="tag">&lt;/<span class="name">string</span>&gt;</span></span><br><span class="line">            <span class="tag">&lt;<span class="name">string</span>&gt;</span>Noto Color Emoji<span class="tag">&lt;/<span class="name">string</span>&gt;</span></span><br><span class="line">            <span class="tag">&lt;<span class="name">string</span>&gt;</span>Symbols Nerd Font<span class="tag">&lt;/<span class="name">string</span>&gt;</span></span><br><span class="line">            <span class="tag">&lt;<span class="name">string</span>&gt;</span>Font Awesome 6 Free<span class="tag">&lt;/<span class="name">string</span>&gt;</span></span><br><span class="line">        <span class="tag">&lt;/<span class="name">edit</span>&gt;</span></span><br><span class="line">    <span class="tag">&lt;/<span class="name">match</span>&gt;</span></span><br><span class="line"></span><br><span class="line">    <span class="comment">&lt;!-- 渲染设置 --&gt;</span></span><br><span class="line">    <span class="tag">&lt;<span class="name">match</span> <span class="attr">target</span>=<span class="string">"font"</span>&gt;</span></span><br><span class="line">        <span class="tag">&lt;<span class="name">test</span> <span class="attr">name</span>=<span class="string">"slant"</span>&gt;</span></span><br><span class="line">            <span class="tag">&lt;<span class="name">const</span>&gt;</span>roman<span class="tag">&lt;/<span class="name">const</span>&gt;</span></span><br><span class="line">        <span class="tag">&lt;/<span class="name">test</span>&gt;</span></span><br><span class="line">        <span class="tag">&lt;<span class="name">test</span> <span class="attr">compare</span>=<span class="string">"not_eq"</span> <span class="attr">name</span>=<span class="string">"slant"</span> <span class="attr">target</span>=<span class="string">"pattern"</span>&gt;</span></span><br><span class="line">            <span class="tag">&lt;<span class="name">const</span>&gt;</span>roman<span class="tag">&lt;/<span class="name">const</span>&gt;</span></span><br><span class="line">        <span class="tag">&lt;/<span class="name">test</span>&gt;</span></span><br><span class="line">        <span class="tag">&lt;<span class="name">edit</span> <span class="attr">mode</span>=<span class="string">"assign"</span> <span class="attr">name</span>=<span class="string">"matrix"</span>&gt;</span></span><br><span class="line">            <span class="tag">&lt;<span class="name">times</span>&gt;</span></span><br><span class="line">                <span class="tag">&lt;<span class="name">name</span>&gt;</span>matrix<span class="tag">&lt;/<span class="name">name</span>&gt;</span></span><br><span class="line">                <span class="tag">&lt;<span class="name">matrix</span>&gt;</span></span><br><span class="line">                    <span class="tag">&lt;<span class="name">double</span>&gt;</span>1<span class="tag">&lt;/<span class="name">double</span>&gt;</span></span><br><span class="line">                    <span class="tag">&lt;<span class="name">double</span>&gt;</span>0.2<span class="tag">&lt;/<span class="name">double</span>&gt;</span></span><br><span class="line">                    <span class="tag">&lt;<span class="name">double</span>&gt;</span>0<span class="tag">&lt;/<span class="name">double</span>&gt;</span></span><br><span class="line">                    <span class="tag">&lt;<span class="name">double</span>&gt;</span>1<span class="tag">&lt;/<span class="name">double</span>&gt;</span></span><br><span class="line">                <span class="tag">&lt;/<span class="name">matrix</span>&gt;</span></span><br><span class="line">            <span class="tag">&lt;/<span class="name">times</span>&gt;</span></span><br><span class="line">        <span class="tag">&lt;/<span class="name">edit</span>&gt;</span></span><br><span class="line">        <span class="tag">&lt;<span class="name">edit</span> <span class="attr">mode</span>=<span class="string">"assign"</span> <span class="attr">name</span>=<span class="string">"slant"</span>&gt;</span></span><br><span class="line">            <span class="tag">&lt;<span class="name">const</span>&gt;</span>oblique<span class="tag">&lt;/<span class="name">const</span>&gt;</span></span><br><span class="line">        <span class="tag">&lt;/<span class="name">edit</span>&gt;</span></span><br><span class="line">        <span class="tag">&lt;<span class="name">edit</span> <span class="attr">mode</span>=<span class="string">"assign"</span> <span class="attr">name</span>=<span class="string">"embeddedbitmap"</span>&gt;</span></span><br><span class="line">            <span class="tag">&lt;<span class="name">bool</span>&gt;</span>false<span class="tag">&lt;/<span class="name">bool</span>&gt;</span></span><br><span class="line">        <span class="tag">&lt;/<span class="name">edit</span>&gt;</span></span><br><span class="line">    <span class="tag">&lt;/<span class="name">match</span>&gt;</span></span><br><span class="line">    <span class="tag">&lt;<span class="name">match</span> <span class="attr">target</span>=<span class="string">"font"</span>&gt;</span></span><br><span class="line">        <span class="tag">&lt;<span class="name">test</span> <span class="attr">compare</span>=<span class="string">"less_eq"</span> <span class="attr">name</span>=<span class="string">"weight"</span>&gt;</span></span><br><span class="line">            <span class="tag">&lt;<span class="name">const</span>&gt;</span>medium<span class="tag">&lt;/<span class="name">const</span>&gt;</span></span><br><span class="line">        <span class="tag">&lt;/<span class="name">test</span>&gt;</span></span><br><span class="line">        <span class="tag">&lt;<span class="name">test</span> <span class="attr">compare</span>=<span class="string">"more_eq"</span> <span class="attr">name</span>=<span class="string">"weight"</span> <span class="attr">target</span>=<span class="string">"pattern"</span>&gt;</span></span><br><span class="line">            <span class="tag">&lt;<span class="name">const</span>&gt;</span>bold<span class="tag">&lt;/<span class="name">const</span>&gt;</span></span><br><span class="line">        <span class="tag">&lt;/<span class="name">test</span>&gt;</span></span><br><span class="line">        <span class="tag">&lt;<span class="name">edit</span> <span class="attr">mode</span>=<span class="string">"assign"</span> <span class="attr">name</span>=<span class="string">"embolden"</span>&gt;</span></span><br><span class="line">            <span class="tag">&lt;<span class="name">bool</span>&gt;</span>true<span class="tag">&lt;/<span class="name">bool</span>&gt;</span></span><br><span class="line">        <span class="tag">&lt;/<span class="name">edit</span>&gt;</span></span><br><span class="line">        <span class="tag">&lt;<span class="name">edit</span> <span class="attr">mode</span>=<span class="string">"assign"</span> <span class="attr">name</span>=<span class="string">"weight"</span>&gt;</span></span><br><span class="line">            <span class="tag">&lt;<span class="name">const</span>&gt;</span>bold<span class="tag">&lt;/<span class="name">const</span>&gt;</span></span><br><span class="line">        <span class="tag">&lt;/<span class="name">edit</span>&gt;</span></span><br><span class="line">    <span class="tag">&lt;/<span class="name">match</span>&gt;</span></span><br><span class="line"></span><br><span class="line">    <span class="tag">&lt;<span class="name">dir</span>&gt;</span>~/.fonts<span class="tag">&lt;/<span class="name">dir</span>&gt;</span></span><br><span class="line"><span class="tag">&lt;/<span class="name">fontconfig</span>&gt;</span></span><br></pre></td></tr></tbody></table></figure><h2 id="%E8%A7%A3%E9%87%8A" tabindex="-1">解释</h2><h3 id="%E5%AD%97%E4%BD%93%E5%AE%B6%E6%97%8F" tabindex="-1">字体家族</h3><p>字体家族（family）是指一组字体，通常包括一个默认字体和一组备用字体。</p><p>在 FontConfig 中，字体家族的设置通过 <code>family</code> 选项来实现。这里以 <code>serif</code>（有衬线字体）字体家族为例，设置字体家族的优先级：</p><figure class="highlight xml"><table><tbody><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br></pre></td><td class="code"><pre><span class="line"><span class="tag">&lt;<span class="name">match</span> <span class="attr">target</span>=<span class="string">"pattern"</span>&gt;</span></span><br><span class="line">    <span class="tag">&lt;<span class="name">test</span> <span class="attr">name</span>=<span class="string">"family"</span> <span class="attr">qual</span>=<span class="string">"any"</span>&gt;</span></span><br><span class="line">        <span class="tag">&lt;<span class="name">string</span>&gt;</span>serif<span class="tag">&lt;/<span class="name">string</span>&gt;</span></span><br><span class="line">    <span class="tag">&lt;/<span class="name">test</span>&gt;</span></span><br><span class="line">    <span class="tag">&lt;<span class="name">edit</span> <span class="attr">binding</span>=<span class="string">"strong"</span> <span class="attr">mode</span>=<span class="string">"prepend"</span> <span class="attr">name</span>=<span class="string">"family"</span>&gt;</span></span><br><span class="line">        <span class="tag">&lt;<span class="name">string</span>&gt;</span>Noto Serif CJK SC<span class="tag">&lt;/<span class="name">string</span>&gt;</span></span><br><span class="line">        <span class="tag">&lt;<span class="name">string</span>&gt;</span>Noto Color Emoji<span class="tag">&lt;/<span class="name">string</span>&gt;</span></span><br><span class="line">        <span class="tag">&lt;<span class="name">string</span>&gt;</span>Symbols Nerd Font<span class="tag">&lt;/<span class="name">string</span>&gt;</span></span><br><span class="line">        <span class="tag">&lt;<span class="name">string</span>&gt;</span>Font Awesome 6 Free<span class="tag">&lt;/<span class="name">string</span>&gt;</span></span><br><span class="line">    <span class="tag">&lt;/<span class="name">edit</span>&gt;</span></span><br><span class="line"><span class="tag">&lt;/<span class="name">match</span>&gt;</span></span><br></pre></td></tr></tbody></table></figure><p>字体家族的优先级由上到下，越靠前的字体优先级越高。建议按照以下优先级设置字体家族：</p><ol><li>中文字体</li><li>英文字体</li><li>表情符号</li><li>Icon 字体</li></ol><p>设置字体家族后，系统会自动按照优先级匹配字体，从而有效解决问题 3、5、6。如果锁死使用某一字形，还可以粗暴但有效地解决问题 1。此外，若字体有多字重，搭配渲染设置可以解决问题 2。</p><h3 id="%E5%AD%97%E4%BD%93%E6%9B%BF%E6%8D%A2" tabindex="-1">字体替换</h3><p>比如上面覆盖 <code>宋体</code> 字体与 <code>system-ui</code> 字体家族的配置，以解决问题 4。</p><h3 id="%E6%B8%B2%E6%9F%93%E7%AD%96%E7%95%A5" tabindex="-1">渲染策略</h3><p>直接使用默认配置就好了，有问题再二分法排查。啥？你没备份？我这有一份完全的默认的配置，注释都没删，罚你自己整理！</p><figure class="highlight xml"><table><tbody><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br><span class="line">48</span><br><span class="line">49</span><br><span class="line">50</span><br><span class="line">51</span><br><span class="line">52</span><br><span class="line">53</span><br><span class="line">54</span><br><span class="line">55</span><br><span class="line">56</span><br><span class="line">57</span><br><span class="line">58</span><br><span class="line">59</span><br><span class="line">60</span><br><span class="line">61</span><br><span class="line">62</span><br><span class="line">63</span><br><span class="line">64</span><br><span class="line">65</span><br><span class="line">66</span><br><span class="line">67</span><br><span class="line">68</span><br><span class="line">69</span><br><span class="line">70</span><br><span class="line">71</span><br><span class="line">72</span><br><span class="line">73</span><br><span class="line">74</span><br><span class="line">75</span><br><span class="line">76</span><br><span class="line">77</span><br><span class="line">78</span><br><span class="line">79</span><br><span class="line">80</span><br><span class="line">81</span><br><span class="line">82</span><br><span class="line">83</span><br><span class="line">84</span><br><span class="line">85</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta">&lt;?xml version='1.0'?&gt;</span></span><br><span class="line"><span class="meta">&lt;!DOCTYPE <span class="keyword">fontconfig</span> <span class="keyword">SYSTEM</span> <span class="string">'urn:fontconfig:fonts.dtd'</span>&gt;</span></span><br><span class="line"><span class="tag">&lt;<span class="name">fontconfig</span>&gt;</span></span><br><span class="line"> <span class="comment">&lt;!--</span></span><br><span class="line"><span class="comment"> Artificial oblique for fonts without an italic or oblique version</span></span><br><span class="line"><span class="comment"> --&gt;</span></span><br><span class="line"> <span class="tag">&lt;<span class="name">match</span> <span class="attr">target</span>=<span class="string">"font"</span>&gt;</span></span><br><span class="line">  <span class="comment">&lt;!-- check to see if the font is roman --&gt;</span></span><br><span class="line">  <span class="tag">&lt;<span class="name">test</span> <span class="attr">name</span>=<span class="string">"slant"</span>&gt;</span></span><br><span class="line">   <span class="tag">&lt;<span class="name">const</span>&gt;</span>roman<span class="tag">&lt;/<span class="name">const</span>&gt;</span></span><br><span class="line">  <span class="tag">&lt;/<span class="name">test</span>&gt;</span></span><br><span class="line">  <span class="comment">&lt;!-- check to see if the pattern requested non-roman --&gt;</span></span><br><span class="line">  <span class="tag">&lt;<span class="name">test</span> <span class="attr">compare</span>=<span class="string">"not_eq"</span> <span class="attr">name</span>=<span class="string">"slant"</span> <span class="attr">target</span>=<span class="string">"pattern"</span>&gt;</span></span><br><span class="line">   <span class="tag">&lt;<span class="name">const</span>&gt;</span>roman<span class="tag">&lt;/<span class="name">const</span>&gt;</span></span><br><span class="line">  <span class="tag">&lt;/<span class="name">test</span>&gt;</span></span><br><span class="line">  <span class="comment">&lt;!-- multiply the matrix to slant the font --&gt;</span></span><br><span class="line">  <span class="tag">&lt;<span class="name">edit</span> <span class="attr">mode</span>=<span class="string">"assign"</span> <span class="attr">name</span>=<span class="string">"matrix"</span>&gt;</span></span><br><span class="line">   <span class="tag">&lt;<span class="name">times</span>&gt;</span></span><br><span class="line">    <span class="tag">&lt;<span class="name">name</span>&gt;</span>matrix<span class="tag">&lt;/<span class="name">name</span>&gt;</span></span><br><span class="line">    <span class="tag">&lt;<span class="name">matrix</span>&gt;</span></span><br><span class="line">     <span class="tag">&lt;<span class="name">double</span>&gt;</span>1<span class="tag">&lt;/<span class="name">double</span>&gt;</span></span><br><span class="line">     <span class="tag">&lt;<span class="name">double</span>&gt;</span>0.2<span class="tag">&lt;/<span class="name">double</span>&gt;</span></span><br><span class="line">     <span class="tag">&lt;<span class="name">double</span>&gt;</span>0<span class="tag">&lt;/<span class="name">double</span>&gt;</span></span><br><span class="line">     <span class="tag">&lt;<span class="name">double</span>&gt;</span>1<span class="tag">&lt;/<span class="name">double</span>&gt;</span></span><br><span class="line">    <span class="tag">&lt;/<span class="name">matrix</span>&gt;</span></span><br><span class="line">   <span class="tag">&lt;/<span class="name">times</span>&gt;</span></span><br><span class="line">  <span class="tag">&lt;/<span class="name">edit</span>&gt;</span></span><br><span class="line">  <span class="comment">&lt;!-- pretend the font is oblique now --&gt;</span></span><br><span class="line">  <span class="tag">&lt;<span class="name">edit</span> <span class="attr">mode</span>=<span class="string">"assign"</span> <span class="attr">name</span>=<span class="string">"slant"</span>&gt;</span></span><br><span class="line">   <span class="tag">&lt;<span class="name">const</span>&gt;</span>oblique<span class="tag">&lt;/<span class="name">const</span>&gt;</span></span><br><span class="line">  <span class="tag">&lt;/<span class="name">edit</span>&gt;</span></span><br><span class="line">  <span class="comment">&lt;!-- and disable embedded bitmaps for artificial oblique --&gt;</span></span><br><span class="line">  <span class="tag">&lt;<span class="name">edit</span> <span class="attr">mode</span>=<span class="string">"assign"</span> <span class="attr">name</span>=<span class="string">"embeddedbitmap"</span>&gt;</span></span><br><span class="line">   <span class="tag">&lt;<span class="name">bool</span>&gt;</span>false<span class="tag">&lt;/<span class="name">bool</span>&gt;</span></span><br><span class="line">  <span class="tag">&lt;/<span class="name">edit</span>&gt;</span></span><br><span class="line"> <span class="tag">&lt;/<span class="name">match</span>&gt;</span></span><br><span class="line"> <span class="comment">&lt;!--</span></span><br><span class="line"><span class="comment"> Synthetic emboldening for fonts that do not have bold face available</span></span><br><span class="line"><span class="comment"> --&gt;</span></span><br><span class="line"> <span class="tag">&lt;<span class="name">match</span> <span class="attr">target</span>=<span class="string">"font"</span>&gt;</span></span><br><span class="line">  <span class="comment">&lt;!-- check to see if the weight in the font is less than medium which possibly need emboldening --&gt;</span></span><br><span class="line">  <span class="tag">&lt;<span class="name">test</span> <span class="attr">compare</span>=<span class="string">"less_eq"</span> <span class="attr">name</span>=<span class="string">"weight"</span>&gt;</span></span><br><span class="line">   <span class="tag">&lt;<span class="name">const</span>&gt;</span>medium<span class="tag">&lt;/<span class="name">const</span>&gt;</span></span><br><span class="line">  <span class="tag">&lt;/<span class="name">test</span>&gt;</span></span><br><span class="line">  <span class="comment">&lt;!-- check to see if the pattern requests bold --&gt;</span></span><br><span class="line">  <span class="tag">&lt;<span class="name">test</span> <span class="attr">compare</span>=<span class="string">"more_eq"</span> <span class="attr">name</span>=<span class="string">"weight"</span> <span class="attr">target</span>=<span class="string">"pattern"</span>&gt;</span></span><br><span class="line">   <span class="tag">&lt;<span class="name">const</span>&gt;</span>bold<span class="tag">&lt;/<span class="name">const</span>&gt;</span></span><br><span class="line">  <span class="tag">&lt;/<span class="name">test</span>&gt;</span></span><br><span class="line">  <span class="comment">&lt;!--</span></span><br><span class="line"><span class="comment">  set the embolden flag</span></span><br><span class="line"><span class="comment">  needed for applications using cairo, e.g. gucharmap, gedit, ...</span></span><br><span class="line"><span class="comment">--&gt;</span></span><br><span class="line">  <span class="tag">&lt;<span class="name">edit</span> <span class="attr">mode</span>=<span class="string">"assign"</span> <span class="attr">name</span>=<span class="string">"embolden"</span>&gt;</span></span><br><span class="line">   <span class="tag">&lt;<span class="name">bool</span>&gt;</span>true<span class="tag">&lt;/<span class="name">bool</span>&gt;</span></span><br><span class="line">  <span class="tag">&lt;/<span class="name">edit</span>&gt;</span></span><br><span class="line">  <span class="comment">&lt;!--</span></span><br><span class="line"><span class="comment"> set weight to bold</span></span><br><span class="line"><span class="comment"> needed for applications using Xft directly, e.g. Firefox, ...</span></span><br><span class="line"><span class="comment">--&gt;</span></span><br><span class="line">  <span class="tag">&lt;<span class="name">edit</span> <span class="attr">mode</span>=<span class="string">"assign"</span> <span class="attr">name</span>=<span class="string">"weight"</span>&gt;</span></span><br><span class="line">   <span class="tag">&lt;<span class="name">const</span>&gt;</span>bold<span class="tag">&lt;/<span class="name">const</span>&gt;</span></span><br><span class="line">  <span class="tag">&lt;/<span class="name">edit</span>&gt;</span></span><br><span class="line"> <span class="tag">&lt;/<span class="name">match</span>&gt;</span></span><br><span class="line"> <span class="tag">&lt;<span class="name">match</span> <span class="attr">target</span>=<span class="string">"font"</span>&gt;</span></span><br><span class="line">  <span class="tag">&lt;<span class="name">edit</span> <span class="attr">mode</span>=<span class="string">"assign"</span> <span class="attr">name</span>=<span class="string">"rgba"</span>&gt;</span></span><br><span class="line">   <span class="tag">&lt;<span class="name">const</span>&gt;</span>rgb<span class="tag">&lt;/<span class="name">const</span>&gt;</span></span><br><span class="line">  <span class="tag">&lt;/<span class="name">edit</span>&gt;</span></span><br><span class="line"> <span class="tag">&lt;/<span class="name">match</span>&gt;</span></span><br><span class="line"> <span class="tag">&lt;<span class="name">match</span> <span class="attr">target</span>=<span class="string">"font"</span>&gt;</span></span><br><span class="line">  <span class="tag">&lt;<span class="name">edit</span> <span class="attr">mode</span>=<span class="string">"assign"</span> <span class="attr">name</span>=<span class="string">"hinting"</span>&gt;</span></span><br><span class="line">   <span class="tag">&lt;<span class="name">bool</span>&gt;</span>true<span class="tag">&lt;/<span class="name">bool</span>&gt;</span></span><br><span class="line">  <span class="tag">&lt;/<span class="name">edit</span>&gt;</span></span><br><span class="line"> <span class="tag">&lt;/<span class="name">match</span>&gt;</span></span><br><span class="line"> <span class="tag">&lt;<span class="name">match</span> <span class="attr">target</span>=<span class="string">"font"</span>&gt;</span></span><br><span class="line">  <span class="tag">&lt;<span class="name">edit</span> <span class="attr">mode</span>=<span class="string">"assign"</span> <span class="attr">name</span>=<span class="string">"hintstyle"</span>&gt;</span></span><br><span class="line">   <span class="tag">&lt;<span class="name">const</span>&gt;</span>hintslight<span class="tag">&lt;/<span class="name">const</span>&gt;</span></span><br><span class="line">  <span class="tag">&lt;/<span class="name">edit</span>&gt;</span></span><br><span class="line"> <span class="tag">&lt;/<span class="name">match</span>&gt;</span></span><br><span class="line"> <span class="tag">&lt;<span class="name">dir</span>&gt;</span>~/.fonts<span class="tag">&lt;/<span class="name">dir</span>&gt;</span></span><br><span class="line"> <span class="tag">&lt;<span class="name">match</span> <span class="attr">target</span>=<span class="string">"font"</span>&gt;</span></span><br><span class="line">  <span class="tag">&lt;<span class="name">edit</span> <span class="attr">mode</span>=<span class="string">"assign"</span> <span class="attr">name</span>=<span class="string">"antialias"</span>&gt;</span></span><br><span class="line">   <span class="tag">&lt;<span class="name">bool</span>&gt;</span>true<span class="tag">&lt;/<span class="name">bool</span>&gt;</span></span><br><span class="line">  <span class="tag">&lt;/<span class="name">edit</span>&gt;</span></span><br><span class="line"> <span class="tag">&lt;/<span class="name">match</span>&gt;</span></span><br><span class="line"><span class="tag">&lt;/<span class="name">fontconfig</span>&gt;</span></span><br></pre></td></tr></tbody></table></figure><h3 id="%E5%90%8E%E8%AE%B0-1" tabindex="-1">后记</h3><p>此外，还有一些高级的设置，比如：</p><ul><li>调整字体大小、粗细</li><li>根据语言自动调整字体</li><li>为某一程序调整字体</li><li>为某一字体调整渲染策略</li><li>根据应用场景自动调整渲染策略</li></ul><p>这些设置可以根据个人喜好进行调整。我对此没有需求，未做过研究，请参阅以下资料：</p><ul><li><a href="https://wiki.archlinux.org/title/Font_configuration">Arch Wiki: Font Configuration</a></li><li><a href="https://fontconfig.pages.freedesktop.org/fontconfig/fontconfig-user.html">FontConfig User Documentation</a></li><li><a href="https://catcat.cc/post/2021-03-07/">用 fontconfig 治理 Linux 中的字体 – 双猫 CC</a></li><li><a href="https://github.com/Bryan2333/Dotfiles/blob/master/.config/fontconfig/fonts.conf">Bryan2333/Dotfiles</a></li></ul>]]>
      </content:encoded>
    </item>
    <item>
      <title>旧手机优化计划之三 - 流畅、保活与省电</title>
      <link>https://www.lynx3.me/article/4097fa9/</link>
      <description>类原生真好用～</description>
      <author>LynxCatTheThird</author>
      <category domain="https://www.lynx3.me/categories/%E7%A7%91%E5%AD%A6%E4%B8%8E%E6%8A%80%E6%9C%AF/">科学与技术</category>
      <category domain="https://www.lynx3.me/categories/%E7%A7%91%E5%AD%A6%E4%B8%8E%E6%8A%80%E6%9C%AF/%E8%AE%A1%E7%AE%97%E6%9C%BA/">计算机</category>
      <category domain="https://www.lynx3.me/categories/%E7%A7%91%E5%AD%A6%E4%B8%8E%E6%8A%80%E6%9C%AF/%E8%AE%A1%E7%AE%97%E6%9C%BA/%E5%88%B7%E6%9C%BA/">刷机</category>
      <category domain="https://www.lynx3.me/tags/A0/">A0</category>
      <category domain="https://www.lynx3.me/tags/%E5%88%B7%E6%9C%BA/">刷机</category>
      <pubDate>Thu, 11 Jul 2024 15:00:00 GMT</pubDate>
      <content:encoded>
        <![CDATA[<div class="note warning flat"><p>除非您有把握，否则不建议随意调整手机默认的性能配置！默认的，往往是最好的！</p></div><h1 id="%E6%B5%81%E7%95%85%E5%BA%A6" tabindex="-1">流畅度</h1><h2 id="%E5%86%85%E5%AD%98%E6%96%B9%E5%90%91" tabindex="-1">内存方向</h2><p>对于 Android 11+Magisk+LSPosed+ 小而美 + QQ+etc. 来说，sdm660+4GB 已显捉襟见肘。对于小而美、QQ、B 站、抖音等软件，其本身优化就极差，再加一堆 XpHook，性能便更差了：不仅狂杀后台，而且时常会 OOM。怎么办呢？</p><h3 id="%E4%BA%A4%E6%8D%A2%E7%A9%BA%E9%97%B4" tabindex="-1">交换空间</h3><div class="note red icon-padding flat"><i class="note-icon fas fa-triangle-exclamation"></i><p>本段教程尽力做到流畅和保后台之间平衡，但是由于 OPPO R11 内存实在偏小，不得不向保后台偏移。代价就是</p><ol><li>增多耗电，加剧发热</li><li>热启动变慢</li></ol></div><p>为了从源头上解决内存捉襟见肘的问题，我们可以使用交换空间。这里我使用 Scene 调节。</p><h4 id="zram" tabindex="-1">ZRAM</h4><p>ZRAM 是在内存中划出一块来并对其进行压缩，详情可见 <a href="https://wiki.archlinuxcn.org/wiki/Zram">ArchWikiCN</a>。正因如此，ZRAM 设置不当会给 CPU 带来显著的压力，进而拉大耗电量、减少续航。</p><p>如果您只打算开 ZRAM，那么建议在 2GB 到 3GB（2048MB 到 3072MB）之间。过小作用不大，过大拉多耗电量。</p><h4 id="swap" tabindex="-1">Swap</h4><div class="note red icon-padding flat"><i class="note-icon fas fa-ban"></i><p>不可以只启用 Swap，这会严重拉慢磁盘 IO 与严重磨损磁盘！</p></div><h4 id="zram%2Bswap" tabindex="-1">ZRAM+Swap</h4><p>ZRAM 建议在 1.5GB 到 2.5GB（1536MB 到 2560MB）之间，Swap 建议在 0.5GB 到 1.5GB（1024MB 到 1536MB）之间，并且当 Scene 提示交换策略时，选择优先使用 ZRAM。这样可以让新鲜的数据在较快的 ZRAM 里交换，而当 ZRAM 被榨干时则把脏数据写到 Swap 以备过后使用。</p><p><img src="https://s2.hdslb.com/bfs/article/20f11065f4af3fd39fe1100c57e465231352440272.png@1000h.webp" alt="效果图"></p><h4 id="vm-parameters" tabindex="-1">VM Parameters</h4><p>将 swappiness 和 extra_free_kbytes 拉得较大。这样可以保证留有充足的 RAM 以防止 OOM。</p><h3 id="%E7%89%B9%E6%AE%8A%E7%89%88%E6%9C%AC" tabindex="-1">特殊版本</h3><h4 id="%E5%BE%AE%E4%BF%A1" tabindex="-1">微信</h4><p><s>微信版本复杂，建议参考<a href="https://gitee.com/ww3w/dzb/blob/master/1.md#-%E5%BE%AE%E4%BF%A1">百分之千 / 定制版应用收藏 / 版本拐点</a>选择，并从<a href="https://www.coolapk.com/feed/51351476">酷安老哥微笑渲染悲伤的帖子</a>里下载。</s></p><p><s>比较推荐的是 CN 7.0.21、Play 8.0.15、Play 8.0.33、CN 8.0.42。</s></p><p>不建议 OPPO R11 使用微信了，实在太卡。</p><h4 id="qq" tabindex="-1">QQ</h4><p><s>建议用 9.0.8，可以从 <a href="https://t.me/QQUpdates">QQUpdates</a>、<a href="https://t.me/qq_updatelog">QQ/TIM Update Log</a> 获得。9.0.15 和 9.0.17 有多人报道冷启动、小程序、扫码变慢。</s></p><p>时代变了，建议用 9.0.65，可以从 <a href="https://t.me/QQUpdates">QQUpdates</a>、<a href="https://t.me/qq_updatelog">QQ/TIM Update Log</a> 获得。</p><h4 id="others" tabindex="-1">Others</h4><p>请参考以下几个视频：</p><p><a href="https://www.bilibili.com/video/BV16P411P7QT/">安卓软件保姆级优化，让你的手机再战三年！</a></p><p><a href="https://www.bilibili.com/video/BV1r94y1T7Xa/">让老旗舰机重回新生？请收好这份养老软件指南！</a></p><h3 id="%E4%B8%89%E6%96%B9%E5%AE%A2%E6%88%B7%E7%AB%AF" tabindex="-1">三方客户端</h3><p>对于某些热门软件，可能会有大佬用爱发电。传送门有：</p><ul><li><a href="https://github.com/bggRGjQaUbCoE/PiliPlus">PiliPlus</a>（哔哩哔哩）</li><li><a href="https://github.com/huajiqaq/Hydrogen">Hydrogen</a>（知乎）</li><li><a href="https://github.com/CeuiLiSA/Pixiv-Shaft">Shaft</a>（Pixiv）</li></ul><p>这些三方客户端有更为优秀的外观，更为可观的速度，以及某些诱人的功能。</p><h3 id="%E6%89%8B%E5%8A%A8%E5%85%BB%E8%80%81" tabindex="-1">手动养老</h3><p>对 QQ 微信等压力大的软件启动 Scene 监视器，随时监测硬件状况以逼迫自己养老，防止 OOM。</p><h2 id="cpu-%E6%96%B9%E5%90%91" tabindex="-1">CPU 方向</h2><h3 id="%E9%80%9A%E7%94%A8" tabindex="-1">通用</h3><p>推介以下两件套：<a href="http://vtools.omarea.com/">Scene</a> <s>、<a href="https://moka.latestfile.zip/">Moka</a></s>。</p><p>Scene 可以调整 CPU~~，Moka 可以删除温控［注意：OPPO R11 一路下键即可，删不干净很正常，全删掉会有 Bug（比如爆音、打电话自动开免提、录屏时录不了系统内部声音）］~~，强烈不建议删除温控，而且移除温控之后毫无效果。</p><h3 id="%E4%B8%89%E6%96%B9%E8%B0%83%E5%BA%A6" tabindex="-1">三方调度</h3><h4 id="uperf-%E6%96%B9%E6%A1%88" tabindex="-1">Uperf 方案</h4><p>刷入 <a href="https://github.com/yinwanxi/Uperf-Game-Turbo">Uperf Game Turbo</a>、<a href="https://github.com/nakixii/Magisk_AsoulOpt">AsoulOpt</a></p><p>Uperf Game Turbo 可以较好地调节 CPU，使之在需要省电时省电、需要性能时高效。（注意：我们只需要 Uperf Game Turbo 的配置文件，而不需要其过分地教我们做事。为了避免其引起的一系列问题，请在刷入后将其禁用。）</p><p>AsoulOpt 可以调节线程，提高 CPU 效率。</p><p><img src="https://s2.hdslb.com/bfs/article/5b176872d9d21a056c214fb990aa0a881352440272.png@1000h.webp" alt=""></p><h4 id="cuprumturbo-scheduler-%E6%96%B9%E6%A1%88" tabindex="-1"><a href="https://github.com/chenzyadb/CuprumTurbo-Scheduler">CuprumTurbo Scheduler</a> 方案</h4><p>说这个东西可能令人眼前一黑，但如果说 CuToolBox，相信大多数人都耳熟能详。CuprumTurbo Scheduler 就是 CuToolBox 的模块版。</p><p>经过测试后发现其确实有助于提升流畅性；但未经长期测试，加之峰值功率与 Uperf Game Turbo 相比明显偏大，难以得出准确结论。</p><p><img src="https://s2.hdslb.com/bfs/article/589abf4ddc5824f1bcc037639c4391171352440272.png@1000h.webp" alt=""></p><div class="note red icon-padding flat"><i class="note-icon fas fa-triangle-exclamation"></i><p>安装 Tritium Fiage 前，请先卸载 Uperf 及其相关和衍生模块和 AsoulOpt，并关闭 Scene 的核心分配与高通的 Performance Boost Config。</p><p><img class="inline-img" src="https://s2.hdslb.com/bfs/article/b78cebe362474026d5abdcd637f6cba61352440272.png@1e_1c.webp" style="height:600px"><img class="inline-img" src="https://s2.hdslb.com/bfs/article/74af917c131fcdb2609cf48c4802f5a31352440272.png@1e_1c.webp" style="height:600px"></p></div><h4 id="tritium-fiage-%E6%96%B9%E6%A1%88" tabindex="-1">Tritium Fiage 方案</h4><p>Tritium Fiage 是基于 CuprumTurbo Scheduler 的修改版，可以从酷安的<a href="https://www.coolapk.com/u/3922059">鱼龄</a>那里下载。</p><p>启用后建议将性能模式设为默认。功耗基本不会变，但流畅度会好很多。</p><p><img src="https://s2.hdslb.com/bfs/article/8a224c202551da98cb6b8440784107621352440272.png@1000h.webp" alt="如图，极端场景（此处为连续刷 4K 视频）下功率仍不太高"></p><p><img src="https://s2.hdslb.com/bfs/article/e279516c9b215b5c4b438be2eb8416071352440272.png@1000h.webp" alt="功耗"></p><div class="note red icon-padding flat"><i class="note-icon fas fa-triangle-exclamation"></i><p>安装 Tritium Fiage 前，请先卸载 Uperf 及其相关和衍生模块和 AsoulOpt，并关闭 Scene 的核心分配与高通的 Performance Boost Config。</p><p><img class="inline-img" src="https://s2.hdslb.com/bfs/article/b78cebe362474026d5abdcd637f6cba61352440272.png@1e_1c.webp" style="height:600px"><img class="inline-img" src="https://s2.hdslb.com/bfs/article/74af917c131fcdb2609cf48c4802f5a31352440272.png@1e_1c.webp" style="height:600px"></p></div><div class="note orange icon-padding flat"><i class="note-icon fas fa-triangle-exclamation"></i><p>不必手动安装 cu_jank_detector.zip，启动不了。</p></div><div class="note red icon-padding flat"><i class="note-icon fas fa-ban"></i><p>~~不要安装解除系统限制模块。这是与 Moka 重复的去温控模块，并且效果略差。~~不建议去除温控。</p></div><h2 id="dex2oat" tabindex="-1">Dex2oat</h2><p>手动 dex2oat 可以提高冷启动速度并降低 CPU 和 RAM 占用，具体选哪一个模式请自行测试。</p><p><img src="https://s2.hdslb.com/bfs/article/67d3336ea1ab8de166b5263c41f0af711352440272.png@700h.webp" alt="编译过程"></p><h1 id="%E5%90%8E%E5%8F%B0" tabindex="-1">后台</h1><div class="note green icon-padding flat"><i class="note-icon fas fa-circle-check"></i><p>这里假设您使用 ZRAM（2048MB）+Swap（1536MB）+Tritium Fiage（1.2.1） 方案！</p></div><div class="note red icon-padding flat"><i class="note-icon fas fa-ban"></i><p>后台优化后并不是可以放飞自我了；相反，留后台会显著加大 OOM 的风险，尤其是在 OPPOR11 等 RAM 吃紧的机型上，请务必适当设置交换空间，并合理使用！</p></div><h2 id="%E5%AF%B9%E9%9D%9E%E5%BF%85%E8%A6%81%E8%BD%AF%E4%BB%B6%E5%85%B3%E7%A6%81%E9%97%AD" tabindex="-1">对非必要软件关禁闭</h2><p>使用小黑屋、雹等软件，以禁用方式冻结在后台死皮赖脸的软件。</p><h2 id="%E8%B0%83%E8%8A%82%E6%89%80%E6%9C%89%E8%BD%AF%E4%BB%B6%E5%90%8E%E5%8F%B0%E6%B4%BB%E5%8A%A8" tabindex="-1">调节所有软件后台活动</h2><ol><li>在 Thanox 的后台启动和后台运行中对<strong>用户应用</strong>设置<strong>全不</strong>，在任务清理和乖巧模式中设置<strong>全部</strong>，随后排除 Shizuku、输入法、三方 Widget 等常驻后台的软件。</li><li>切换过滤规则为系统，对软件商店等毒瘤适当设置。（我用类原生，没有经验，提供不了相关建议）</li><li>添加模板，仅打开任务清理和乖巧模式（仅点亮这两个开关，其他均灭掉），并启用自动配置</li></ol><h3 id="%E6%B3%A8%E6%84%8F" tabindex="-1">注意</h3><ol><li>对咕噜咕噜 Play 服务、咕噜咕噜服务框架和咕噜咕噜商店的操作可能会导致其它软件无法调用咕噜咕噜相关服务</li><li>对下载器与浏览器打开乖巧模式会导致下载通知冻结</li><li>对浏览器打开后台运行而关闭任务清理可能会导致其一直在后台吃内存</li></ol><h2 id="%E4%B8%BA%E5%BF%85%E8%A6%81%E8%BD%AF%E4%BB%B6%E5%BC%80%E5%B0%8F%E7%81%B6" tabindex="-1">为必要软件开小灶</h2><h3 id="%E6%8E%A5%E6%B6%88%E6%81%AF" tabindex="-1">接消息</h3><p>某些软件（比如微信 QQ 等通讯软件）要接消息，但如果一直挂后台占 RAM 太多，可在应用详情页：</p><ol><li>打开后台启动（否则开机不自启动）</li><li>打开后台运行、后台保护，关闭任务清理（否则频繁被杀死）</li><li>乖巧模式（减少后台占用）</li></ol><h3 id="%E7%9B%91%E5%90%AC" tabindex="-1">监听</h3><p>某些软件（比如 Robot36、Thanox 后台记录、Scene 动态切换、Shizuku）要能够一直执行下去并实时响应用户操作，还有一些软件（比如天气小组件）要频繁获取信息，可在应用详情页：</p><ol><li>打开后台启动（否则开机不自启动）</li><li>打开后台运行、后台保护，关闭任务清理、乖巧模式（否则频繁被杀死）</li></ol><h2 id="%E6%95%88%E6%9E%9C" tabindex="-1">效果</h2><p><img src="https://s2.hdslb.com/bfs/article/5e24560d4bcad132eb0a52fe3375f49d1352440272.png@700h.webp" alt="开机静置五分钟后"></p><p><img src="https://s2.hdslb.com/bfs/article/5e24560d4bcad132eb0a52fe3375f49d1352440272.png@700h.webp" alt="一边水 Q群，一边在微信聊天"></p><p><img src="https://s2.hdslb.com/bfs/article/12ff98d20468deb923a5c073ea5fe0c11352440272.png@700h.webp" alt="使用一个半小时，再静置半小时"></p>]]>
      </content:encoded>
    </item>
    <item>
      <title>旧手机优化计划之二 - Root</title>
      <link>https://www.lynx3.me/article/2a7bbe49/</link>
      <description>类原生真好用～</description>
      <author>LynxCatTheThird</author>
      <category domain="https://www.lynx3.me/categories/%E7%A7%91%E5%AD%A6%E4%B8%8E%E6%8A%80%E6%9C%AF/">科学与技术</category>
      <category domain="https://www.lynx3.me/categories/%E7%A7%91%E5%AD%A6%E4%B8%8E%E6%8A%80%E6%9C%AF/%E8%AE%A1%E7%AE%97%E6%9C%BA/">计算机</category>
      <category domain="https://www.lynx3.me/categories/%E7%A7%91%E5%AD%A6%E4%B8%8E%E6%8A%80%E6%9C%AF/%E8%AE%A1%E7%AE%97%E6%9C%BA/%E5%88%B7%E6%9C%BA/">刷机</category>
      <category domain="https://www.lynx3.me/tags/A0/">A0</category>
      <category domain="https://www.lynx3.me/tags/%E5%88%B7%E6%9C%BA/">刷机</category>
      <pubDate>Thu, 11 Jul 2024 05:18:32 GMT</pubDate>
      <content:encoded>
        <![CDATA[<h1 id="%E6%80%BB%E8%BF%B0" tabindex="-1">总述</h1><p>本文将介绍三种主流 Root（Magisk、KernelSU、APatch）的安装，并介绍它们的一些技巧提示。</p><p>开始之前，请确保您已经刷入了 TWRP 3.7.0、<code>1170</code>底包的系统，并有且只有一种可用的 Root 方式。</p><h1 id="%E5%BF%85%E5%A4%87%E5%89%8D%E7%BD%AE%E7%9F%A5%E8%AF%86" tabindex="-1">必备前置知识</h1><h2 id="%E6%95%91%E7%A0%96" tabindex="-1">救砖</h2><ul><li><a href="https://kernelsu.org/zh_CN/guide/rescue-from-bootloop.html">救砖 | KernelSU</a></li><li><a href="https://apatch.dev/zh_CN/rescue-bootloop.html">救砖 | APatch Docs</a></li><li><code>logcat</code>、<code>dmesg</code>、<code>/proc/kmsg</code> 等抓取日志的方法</li><li>基本的 Git 知识</li></ul><h2 id="%E5%86%85%E6%A0%B8%E5%88%87%E6%8D%A2%E6%96%B9%E6%B3%95" tabindex="-1">内核切换方法</h2><p>切换、更新、修改内核有三种方法：</p><ol><li>从别人那里要来 boot.img 刷入</li><li>将内核镜像（.gz/.gz-dtb）用 AnyKernel3 刷入</li><li>将内核镜像（Image）用 magiskboot 打包入 boot.img 刷入</li></ol><h1 id="magisk" tabindex="-1">Magisk</h1><h2 id="%E5%AE%89%E8%A3%85-magisk" tabindex="-1">安装 Magisk</h2><ol><li>下载 Magisk 最新版 APK 文件，并安装到手机中。</li><li>打开 Magisk Manager，点击左上角的 “安装” 按钮，选择空白的 Boot 镜像文件，修补。</li><li>使用 TWRP 备份 Boot 分区，刷入修补好的 boot.img 到 Boot 分区，然后重启手机。</li><li>重启后会提示<code>需要修复环境</code>，不要点击修复，按返回键拒绝。选择安装，<strong>取消勾选</strong>“安装到 Recovery”，然后重启。</li></ol><h2 id="magisk-%E6%B3%A8%E6%84%8F%E4%BA%8B%E9%A1%B9" tabindex="-1">Magisk 注意事项</h2><ol><li>Wenhao 新版内核由于未知原因不适用 Magisk，将会导致手机随机重启入 EDL 模式或高通救援模式，并且无法使用微信视频通话和 QQ 视频通话，请勿尝试。</li><li>修复 Magisk 运行环境与更新 Magisk 时，<strong>务必取消</strong>勾选 “安装到 recvoery” 这个选项，高版本 Magisk （26.1+）会<strong>默认启用</strong>这个选项，错误刷入后会导致 WLAN 无法打开以及 Recovery 无法进入。<br>如果您不慎安装到了 Recovery，请提取卡刷包内的 boot.img 和 recovery.img 重新刷入对应分区，或者干脆重刷完整包。</li><li>“Ramdisk” 为 “否” 是正常的，是 R11 (s) 设备的特性，<strong>不</strong>影响 Magisk 功能。</li><li><s>使用 <code>Magisk Delta</code>（后改名 <code>Kitsune Mask</code>）将难以在除 <code>Kitsune</code> 自己的群组之外的社区得到技术支持，也不需要且无法使用 <code>Shamiko</code> 和 <code>ZygiskNext</code>（包括衍生）。</s> 不建议继续使用 <code>Kitsune Mask</code>，其不仅在社区内臭名昭著，而且已经停止更新。</li><li><code>Alpha</code> 禁止在 Android 内修改 <code>/system</code>，介意勿用。但要知道：这十分有利于安全。</li></ol><h2 id="magisk-%E6%8A%80%E5%B7%A7%E6%8F%90%E7%A4%BA" tabindex="-1">Magisk 技巧提示</h2><ol><li>Magisk APK 相当于刷机包。当 Magisk 出现 “掉 Root 权限”“获取不到 Root 权限”“Zygisk 反复注入失败” 等问题，而三方 Recovery 又可用时，您可以通过将 Magisk.apk 重命名为 Magisk.<strong>zip</strong> 并刷入来修复。</li><li>Magisk 有多个 Fork，各 Fork 各有不同。若您想切换不同的的 Fork，除了在三方 Recovery 中刷入 Magisk.zip 外，还可以在已有的 Magisk Manager 中授予将要安装的 Magisk Manager Root 权限，并重新启动准备安装的 Magisk Manager。此时准备安装的 Magisk Manager 应当有 “无法获取版本信息”“必须重新安装”“修复运行环境” 等提示，重新安装即可。</li></ol><h1 id="kernelsu" tabindex="-1">KernelSU</h1><h2 id="%E5%AE%89%E8%A3%85-kernelsu" tabindex="-1">安装 KernelSU</h2><p>在第三方 Recovery 中把 <code>AnyKernel3-*.zip</code> 刷入即可</p><h2 id="kernelsu-%E6%B3%A8%E6%84%8F%E4%BA%8B%E9%A1%B9" tabindex="-1">KernelSU 注意事项</h2><ol><li><s>KernelSU 在 1.x 版本中移除了 non-GKI 支持，因此不适用于 R11 设备。R11 设备请使用 0.9.5 及以下版本。</s> R11 作为 non-GKI 设备应当使用 <a href="https://github.com/rsuntk/KernelSU">RKSU</a></li><li>KernelSU 在 0.9.3 版本中更改了管理器检测方式，在 ColorOS 6 上会引起卡二屏。请使用 0.9.2 及以下版本。</li><li><s>安装模块超级慢的情况暂时无解。</s> <a href="https://github.com/5ec1cff/KernelSU">MKSU</a> 引入了 Magic Mount，可以缓解安装模块缓慢无比的情况。</li><li>KernelSU 禁止在 Android 内修改 <code>/system</code>，介意勿用。但要知道：这十分有利于安全。</li><li>KernelSU 没有申请 Root 权限的机制。在授予应用程序 Root 后，应用程序在调用时会自动获取 Root 权限且无任何提示。请仅授予可信的应用程序 Root 权限！</li><li><s>KernelSU 暂未有较好的隐藏挂载点泄漏的方法。</s> <a href="https://t.me/pzqqt_c/5837">不建议使用 susfs</a>。</li></ol><h1 id="apatch" tabindex="-1">APatch</h1><h2 id="%E5%AE%89%E8%A3%85-apatch" tabindex="-1">安装 APatch</h2><ol><li>下载 APatch 最新版 APK 文件，并安装到手机中。</li><li>打开 APatch Manager，点击右上角的 “安装” 按钮，选择空白的 Boot 镜像文件，修补。</li><li>使用 TWRP 备份 Boot 分区，刷入修补好的 boot.img 到 Boot 分区，然后重启手机。</li></ol><h2 id="apatch-%E6%B3%A8%E6%84%8F%E4%BA%8B%E9%A1%B9" tabindex="-1">APatch 注意事项</h2><ol><li>更新 APatch 管理器后需进行两步更新：<ol><li>点击主页面更新以更新系统补丁（APatch）</li><li>重新修补并刷写 Boot 分区以更新 KernelPatch</li></ol></li><li>APatch 禁止在 Android 内修改 <code>/system</code>，介意勿用。但要知道：这十分有利于安全。</li><li>APatch 没有申请 Root 权限的机制。在授予应用程序 Root 后，应用程序在调用时会自动获取 Root 权限且无任何提示。请仅授予可信的应用程序 Root 权限！</li><li>若您使用了他人修补的 boot.img，务必重新设置密钥！</li><li>Scene 及其附属模块暂不支持 APatch，请勿尝试安装。</li></ol><h2 id="apatch-%E6%8A%80%E5%B7%A7%E6%8F%90%E7%A4%BA" tabindex="-1">APatch 技巧提示</h2><ol><li>可通过使用内核模块 <a href="https://t.me/tbthoughts/25">Cherish Peekaboo</a> 隐藏一些挂载点。（作者：GarfieldHan，暂停更新）</li><li>可通过<a href="https://t.me/apatch_discuss/76157">特殊方法</a>使用 Shamiko，但非常不建议。（作者：GarfieldHan）</li></ol><h1 id="%E6%8E%A8%E8%8D%90%E5%AD%A6%E4%B9%A0" tabindex="-1">推荐学习</h1><h2 id="%E8%87%AA%E5%B7%B1%E7%BC%96%E8%AF%91%E5%86%85%E6%A0%B8" tabindex="-1">自己编译内核</h2><p>如果您对已有的内核不满意，想要自己修改一下；或者等不及更新，按捺不住追版本号的激动，那下面的内容正合您胃口。</p><p>编译内核是一项较为浩大的工程，所以我们用 Github CodeSpace 编译。当然，您也可以选择本地计算机。但是，使用 CodeSpace 有相当的优势：</p><ol><li>自带完美的、几乎无性能损耗的 Ubuntu，免除安装、调试系统的烦恼</li><li>Ubuntu 是较为常规、通用、可靠的 Linux 发行版，有助于避免在一些小众发行版上的问题</li><li>编译内核很占 CPU、内存和磁盘 IO，会影响本地计算机的使用</li></ol><h3 id="%E5%90%AF%E5%8A%A8%EF%BC%81" tabindex="-1">启动！</h3><p>Fork 自己中意的仓库，建立它的 CodeSpace，各项配置拉满。</p><div class="note warning flat"><p>注意：对于不同的内核，您可能需要不同的编译器！</p></div><h3 id="%E7%8E%AF%E5%A2%83%E6%90%AD%E5%BB%BA" tabindex="-1">环境搭建</h3><p>首先，您需要准备好编译环境。</p><div class="tabs"><div class="nav-tabs"><button type="button" class="tab active">环境搭建 1</button><button type="button" class="tab"> 环境搭建 2</button></div><div class="tab-contents"><div class="tab-item-content active"><p><s>选择一个合适的位置，下载 <a href="https://releases.linaro.org/components/toolchain/binaries/4.9-2017.01/aarch64-linux-gnu/gcc-linaro-4.9.4-2017.01-x86_64_aarch64-linux-gnu.tar.xz">Linaro GCC 4.9</a> 或 <a href="https://android.googlesource.com/platform/prebuilts/gcc/linux-x86/aarch64/aarch64-linux-android-4.9/+/refs/tags/android-9.0.0_r61">Google GCC Android 9</a>，记下路径。</s></p><p>GCC 老矣！</p></div><div class="tab-item-content"><p><s>选择一个合适的位置，<code>git clone https://github.com/kdrag0n/proton-clang</code>，记下路径。</s> Proton Clang 老了，让我们使用 <a href="https://github.com/ZyCromerZ/Clang">ZyC Clang</a>！</p></div></div><div class="tab-to-top"><button type="button" aria-label="scroll to top"><i class="fas fa-arrow-up"></i></button></div></div><h3 id="%E7%8E%AF%E5%A2%83%E5%8F%98%E9%87%8F" tabindex="-1">环境变量</h3><p>设置必需的环境变量。</p><div class="tabs"><div class="nav-tabs"><button type="button" class="tab active">环境搭建 1</button><button type="button" class="tab"> 环境搭建 2</button></div><div class="tab-contents"><div class="tab-item-content active"><figure class="highlight bash"><table><tbody><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line"><span class="built_in">export</span> ARCH=<span class="string">"arm64"</span></span><br><span class="line"><span class="built_in">export</span> SUBARCH=<span class="string">"arm64"</span></span><br><span class="line"><span class="built_in">export</span> PATH=<span class="variable">$PATH</span>:/path/to/gcc/bin</span><br><span class="line"><span class="built_in">export</span> CROSS_COMPILE=aarch64-xxxxxxxxxx</span><br><span class="line"><span class="built_in">export</span> OPPO_TARGET_DEVICE=<span class="string">"MSM_nnnnn"</span> <span class="comment"># R11 MSM_16051，R11s MSM_17011</span></span><br></pre></td></tr></tbody></table></figure></div><div class="tab-item-content"><figure class="highlight bash"><table><tbody><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line"><span class="built_in">export</span> ARCH=<span class="string">"arm64"</span></span><br><span class="line"><span class="built_in">export</span> SUBARCH=<span class="string">"arm64"</span></span><br><span class="line"><span class="built_in">export</span> PATH=<span class="variable">$PATH</span>:/path/to/clang/bin</span><br><span class="line"><span class="built_in">export</span> CROSS_COMPILE=aarch64-xxxxxxxxxx</span><br><span class="line"><span class="built_in">export</span> OPPO_TARGET_DEVICE=<span class="string">"MSM_nnnnn"</span> <span class="comment"># R11 MSM_16051，R11s MSM_17011</span></span><br></pre></td></tr></tbody></table></figure></div></div><div class="tab-to-top"><button type="button" aria-label="scroll to top"><i class="fas fa-arrow-up"></i></button></div></div><h3 id="%E7%BC%96%E8%AF%91" tabindex="-1">编译</h3><figure class="highlight bash"><table><tbody><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 拉取子模块</span></span><br><span class="line">git submodule init</span><br><span class="line">git submodule update</span><br></pre></td></tr></tbody></table></figure><div class="tabs"><div class="nav-tabs"><button type="button" class="tab active">编译 1</button><button type="button" class="tab"> 编译 2</button></div><div class="tab-contents"><div class="tab-item-content active"><figure class="highlight bash"><table><tbody><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">make O=out sdm660-perf_defconfig</span><br><span class="line">make -j$(<span class="built_in">nproc</span> --all) O=out 2&gt;&amp;1 | <span class="built_in">tee</span> kernel_log.log</span><br></pre></td></tr></tbody></table></figure></div><div class="tab-item-content"><figure class="highlight bash"><table><tbody><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">make O=out sdm660-perf_defconfig CC=clang</span><br><span class="line">make -j$(<span class="built_in">nproc</span> --all) O=out CC=clang 2&gt;&amp;1 | <span class="built_in">tee</span> kernel_log.log</span><br></pre></td></tr></tbody></table></figure></div></div><div class="tab-to-top"><button type="button" aria-label="scroll to top"><i class="fas fa-arrow-up"></i></button></div></div><h3 id="%E6%89%93%E5%8C%85%E5%86%85%E6%A0%B8" tabindex="-1">打包内核</h3><div class="tabs"><div class="nav-tabs"><button type="button" class="tab active">打包内核 1</button><button type="button" class="tab"> 打包内核 2</button></div><div class="tab-contents"><div class="tab-item-content active"><ol><li>提取一个原版 <code>boot.img</code>，要求不带有 Magisk</li><li>回到 CodeSpace，依次展开目录 <code>./out/arch/arm64/boot/</code>，将 <code>Image</code> 下载下来备用</li><li>下载 Magisk.apk（适用于 Linux/，方法为解压后在 libs 里找到并提取 x86_64 的 <code>libmagiskboot.so</code>）或 <a href="https://github.com/PinNaCode/magiskboot_build/">magiskboot</a>（适用于 Windows），得到 <code>magiskboot</code> 备用</li><li><code>magiskboot unpack boot-origin.img</code></li><li>用 <code>Image</code> 替换掉 <code>kernel</code>，保持 <code>kernel</code> 名称不变</li><li><code>magiskboot repack</code>，刷入得到的 <code>new-boot.img</code></li></ol></div><div class="tab-item-content"><ol><li>回到 CodeSpace，依次展开目录 <code>./out/arch/arm64/boot/</code>，将 <code>Image-gz.dtb</code> 下载下来备用</li><li>下载一个 <a href="https://codeload.github.com/WenHao2130/android_kernel_oppo_sdm660_4.4.153/zip/refs/heads/prebuilt_ak3">AnyKernel3</a><br>注意文件夹结构！</li><li>用第一步得到的 <code>Image-gz.dtb</code> 替换掉 <code>AnyKernel3-*.zip</code> 里的 <code>Image-gz.dtb</code></li></ol></div></div><div class="tab-to-top"><button type="button" aria-label="scroll to top"><i class="fas fa-arrow-up"></i></button></div></div><h1 id="%E5%8F%82%E8%80%83%E8%B5%84%E6%96%99" tabindex="-1">参考资料</h1><ul><li><a href="https://github.com/WenHao2130/android_kernel_oppo_sdm660/tree/747c8b9cf5968d20f155e6e7853d56d3d2e1d77c/.github/workflows">WenHao2130/android_kernel_oppo_sdm660</a></li><li><a href="https://kernelsu.org/zh_CN/guide/how-to-integrate-for-non-gki.html">如何为非 GKI 内核集成 KernelSU | KernelSU</a></li><li><a href="https://github.com/tiann/KernelSU/discussions/950">[基础教程] 如何编译一个 ARM64 架构的自定义内核・tiann/KernelSU・Discussion #950</a></li><li><a href="https://github.com/tiann/KernelSU/discussions/952">[基础教程 2] 如何使用 AnyKernel 3 打包内核・tiann/KernelSU・Discussion #952</a></li><li><a href="https://apatch.dev/zh_CN/install.html">安装 | APatch Docs</a></li></ul><h1 id="%E6%8B%93%E5%B1%95%E9%98%85%E8%AF%BB" tabindex="-1">拓展阅读</h1><ul><li><a href="https://github.com/osm0sis/AnyKernel3">osm0sis/AnyKernel3: AnyKernel, Evolved</a></li><li><a href="https://source.android.com/docs/core/architecture/bootloader/dtb-images?hl=zh-cn">DTB 映像 &nbsp;|&nbsp; Android 开源项目 &nbsp;|&nbsp; Android Open Source Project</a></li></ul><h1 id="%E9%B8%A3%E8%B0%A2" tabindex="-1">鸣谢</h1><ul><li><a href="https://github.com/Wenhao2130">Wenhao2130</a></li></ul>]]>
      </content:encoded>
    </item>
    <item>
      <title>旧手机优化计划之一 - 刷机</title>
      <link>https://www.lynx3.me/article/d654e311/</link>
      <description>类原生真好用～</description>
      <author>LynxCatTheThird</author>
      <category domain="https://www.lynx3.me/categories/%E7%A7%91%E5%AD%A6%E4%B8%8E%E6%8A%80%E6%9C%AF/">科学与技术</category>
      <category domain="https://www.lynx3.me/categories/%E7%A7%91%E5%AD%A6%E4%B8%8E%E6%8A%80%E6%9C%AF/%E8%AE%A1%E7%AE%97%E6%9C%BA/">计算机</category>
      <category domain="https://www.lynx3.me/categories/%E7%A7%91%E5%AD%A6%E4%B8%8E%E6%8A%80%E6%9C%AF/%E8%AE%A1%E7%AE%97%E6%9C%BA/%E5%88%B7%E6%9C%BA/">刷机</category>
      <category domain="https://www.lynx3.me/tags/A1/">A1</category>
      <category domain="https://www.lynx3.me/tags/%E5%88%B7%E6%9C%BA/">刷机</category>
      <pubDate>Thu, 02 May 2024 11:18:32 GMT</pubDate>
      <content:encoded>
        <![CDATA[<p>作为一个信息学爱好者，怎么能不搞刷机呢？作为旧机型用户，我已经遭受绿厂迫害数年了。一气之下，我便把手机刷成了类原生（DotOS 5.2 Vanilla）。在使用了数月后，有了些许经验，分享一下。</p><h1 id="%E6%9C%BA%E5%9E%8B%E6%A6%82%E5%86%B5" tabindex="-1">机型概况</h1><p>机子是 2017 年发布的 OPPO R11，CPU 是骁龙 660 AIE，运存为 4GB，闪存是严重磨损的 eMMC 64GB。电池是原装的 3000mAh 的（现在只有 2200mAh 了）。</p><p>绿厂只给到 Android 9 ColorOS 6，连暗色模式都没有，根本满足不了我的需求。于是，我决定刷机。</p><p>OPPO R11 目前主要由 CY 团队维护，故绝大多数资源来自 <a href="https://d.cyteam.cn/">CY 团队的下载站</a>。分享链接有密码，请自行加群获取。</p><h1 id="%E5%88%B7%E6%9C%BA%E5%85%A5%E9%97%A8" tabindex="-1">刷机入门</h1><p>在此，我们需要明确几个定义：</p><ul><li><strong>底层</strong>：是指基本的驱动等最重要、最基本的文件，即 “底包”。R11 (s) 系列底包版本号多为 <code>X.nn</code>、<code>nnnn</code> 或 <code>nnnnnn</code> 格式。由于并不总是能够提供三种版本号，请自行辨别。</li><li><strong>系统</strong>：<ol><li>字面意义上的系统，包括全部可被刷写的分区</li><li>分区名，通常指 System 分区，可能同时也包括 Boot 分区和 Vendor 分区</li></ol></li><li><strong>A/C</strong>：为了避免歧义，本文中 Android 与 ColorOS 均使用全称而<strong>不</strong>简称为 A 或 C</li></ul><h2 id="%E8%A7%A3%E9%99%A4-fastboot-%E9%99%90%E5%88%B6" tabindex="-1">解除 Fastboot 限制</h2><p>由于在大多数稳定版系统中 OPPO 对 fastboot 进行了限制，所以我们必须降级或升级至合适的版本进行解锁 BootLoader 的操作。</p><h3 id="%E6%97%A0%E9%99%90%E5%88%B6" tabindex="-1">无限制</h3><p>若您的版本号为 <code>A.01</code> / <code>170529</code> 或 <code>C.17</code> / <code>1170</code>，恭喜，Fastboot 畅通无阻，您可直接开始<a href="#%E8%A7%A3%E9%94%81-BootLoader">解锁 BootLoader</a>。</p><h3 id="%E5%8D%87%E7%BA%A7" tabindex="-1">升级</h3><p>若您的版本号小于 <code>C.17</code> / <code>1170</code>，则可以下载 <a href="https://d.cyteam.cn/d/CY%E4%B8%8E%E6%A9%99%E6%A0%B9%E7%9B%AE%E5%BD%95/%E6%89%8B%E6%9C%BA%E5%88%B7%E6%9C%BA/OPPO/R%26K%20Series/R11/%E5%AE%98%E6%96%B9ROM%EF%BC%88Stock%20ROM%EF%BC%89/%E5%8D%A1%E5%88%B7%EF%BC%88Flash%20Through%20Recovery%EF%BC%89/R11_11_OTA_1170_all_PDZfMhjgV0q1_b68a39.ozip?sign=IY5sogNDdcsn_0Y7V9WT6SSAK73dy6YUPLk92BpdWnk=:0">R11_11_OTA_1170_all_PDZfMhjgV0q1_b68a39.ozip</a>，在<strong>自带</strong>文件管理中打开，升级至 <code>C.17</code> / <code>1170</code> 以解除限制。</p><h3 id="%E9%99%8D%E7%BA%A7" tabindex="-1">降级</h3><p>相信决定对 OPPO R11 刷机的同学大多数应该更新到了比较新的系统版本吧？如果您的版本号为 <code>C.19</code> / <code>1190</code>，则必须采用降级法。由于此时手机处于严重受限状态，所以我们只能采用最底层的刷机方式 9008 刷机（这也是售后修手机的方法）进行降级操作。</p><ol><li>打上<a href="https://d.cyteam.cn/d/CY%E4%B8%8E%E6%A9%99%E6%A0%B9%E7%9B%AE%E5%BD%95/%E6%89%8B%E6%9C%BA%E5%88%B7%E6%9C%BA/%E8%BD%AF%E4%BB%B6%E5%B7%A5%E5%85%B7%EF%BC%88Software%20Tools%EF%BC%89/%E9%A9%B1%E5%8A%A8%EF%BC%88Drive%EF%BC%89/CYteam-Services-Tools%20For%20Win10.exe">驱动</a></li><li>下载 <a href="https://d.cyteam.cn/d/CY%E4%B8%8E%E6%A9%99%E6%A0%B9%E7%9B%AE%E5%BD%95/%E6%89%8B%E6%9C%BA%E5%88%B7%E6%9C%BA/OPPO/R%26K%20Series/R11/%E5%AE%98%E6%96%B9ROM%EF%BC%88Stock%20ROM%EF%BC%89/%E7%BA%BF%E5%88%B7%EF%BC%88Flash%20Through%209008%EF%BC%89/R11_11_A.01_170529%EF%BC%889008%E7%BA%BF%E5%88%B7%E5%8C%85%EF%BC%8C11%E3%80%8111t%E5%8F%AF%E7%94%A8%EF%BC%89.7z?sign=EjY5LRISMx_UXC7jbayarsYXffcL_IEzOxuSgBCMpto=:0">R11_11_A.01_170529（9008 线刷包，11、11t 可用）.7z</a> 和 <a href="https://d.cyteam.cn/d/CY%E4%B8%8E%E6%A9%99%E6%A0%B9%E7%9B%AE%E5%BD%95/%E6%89%8B%E6%9C%BA%E5%88%B7%E6%9C%BA/OPPO/R%26K%20Series/R11/%E8%BD%AF%E4%BB%B6%E5%B7%A5%E5%85%B7%20%EF%BC%88Software%20Tools%EF%BC%89/%E5%88%B7%E6%9C%BA%E5%B7%A5%E5%85%B7%20(Flash%20Tool)/R11-MsmDownloadTool.exe?sign=hKnlxjiE602PHN3sgJpqSm_El2EMBhrUt5QAVEyPug8=:0">R11-MsmDownloadTool.exe</a>，选择对应代号（R11 的代号为 16051）；手机关机，同时按下<code>电源键</code> +<code>音量+</code>+<code>音量-</code> 进入 EDL（9008 模式），连接手机至电脑，按照提示刷入即可。</li><li>A.01，启动！</li></ol><p>切记保证数据线连接良好，慎防数据线意外松动。除此之外，基本不会出现什么问题。如果出现诸如 “握手失败”“握手超时” 之类的错误，请尝试重启电脑与手机、更换数据线或 USB 口、重装驱动，有条件的更换电脑。</p><h2 id="%E8%A7%A3%E9%94%81-bootloader" tabindex="-1">解锁 BootLoader</h2><ol><li>打开开发者选项<br>打开手机，进入设置，找到 “关于手机” 或 “关于设备” 选项，找到 “版本号” 或 “型号 “一栏，并连续点击数次（通常需要点击 7 次），开发者模式即可成功开启。</li><li>打开 OEM 解锁和 USB 调试开关</li><li>下载 <a href="https://developer.android.google.cn/tools/releases/platform-tools?hl=zh_CN">SDK Platform Tools</a>，并解压到合适的位置</li><li>手机连接电脑，重启到 fastboot（或执行 <code>adb reboot fastboot</code>），然后执行 <code>fastboot oem unlock</code>，终端应当提示 “unlocked”</li><li>重启，手机应当有一橙色感叹号（<code>&lt; ! &gt;</code>），提示 “数据有危险”，并要求你访问<code>g.co/ABH</code>。若有，则解锁成功。</li></ol><h2 id="%E5%88%B7%E5%85%A5%E7%AC%AC%E4%B8%89%E6%96%B9-rec" tabindex="-1">刷入第三方 Rec</h2><ol><li>手机连接电脑，重启到 fastboot（或执行 <code>adb reboot fastboot</code>）</li><li>电脑<a href="https://d.cyteam.cn/%E6%89%8B%E6%9C%BA%E5%88%B7%E6%9C%BA/OPPO/R&amp;K%20Series/R11/%E7%AC%AC%E4%B8%89%E6%96%B9%E6%81%A2%E5%A4%8D%E6%A8%A1%E5%BC%8F%E9%95%9C%E5%83%8F%20(Third%20Party%20Recovery%20Image)">下载合适的 Recovery 镜像</a>，执行 <code>fastboot flash recovery twrp-x.x.x-xxxx.img</code></li></ol><h2 id="%E5%88%B7%E5%85%A5%E7%AC%AC%E4%B8%89%E6%96%B9%E7%B3%BB%E7%BB%9F" tabindex="-1">刷入第三方系统</h2><ol><li>从<a href="https://d.cyteam.cn/%E6%89%8B%E6%9C%BA%E5%88%B7%E6%9C%BA/OPPO/R&amp;K%20Series/R11/%E7%AC%AC%E4%B8%89%E6%96%B9%E7%B3%BB%E7%BB%9F%E5%88%B7%E6%9C%BA%E5%8C%85%20(Third%20Party%20ROM)">第三方系统刷机包 (Third Party ROM)</a> 内下载喜欢的包</li><li>这些包大多是一体包，直接刷入就好</li></ol>]]>
      </content:encoded>
    </item>
    <item>
      <title>网站速度优化指北</title>
      <link>https://www.lynx3.me/article/a63f345a/</link>
      <description>慢死了啊啊啊啊啊啊！</description>
      <author>LynxCatTheThird</author>
      <category domain="https://www.lynx3.me/categories/%E7%A7%91%E5%AD%A6%E4%B8%8E%E6%8A%80%E6%9C%AF/">科学与技术</category>
      <category domain="https://www.lynx3.me/categories/%E7%A7%91%E5%AD%A6%E4%B8%8E%E6%8A%80%E6%9C%AF/%E8%AE%A1%E7%AE%97%E6%9C%BA/">计算机</category>
      <category domain="https://www.lynx3.me/categories/%E7%A7%91%E5%AD%A6%E4%B8%8E%E6%8A%80%E6%9C%AF/%E8%AE%A1%E7%AE%97%E6%9C%BA/%E5%89%8D%E7%AB%AF/">前端</category>
      <category domain="https://www.lynx3.me/tags/A0/">A0</category>
      <category domain="https://www.lynx3.me/tags/%E5%89%8D%E7%AB%AF/">前端</category>
      <pubDate>Mon, 17 Jul 2023 00:00:30 GMT</pubDate>
      <content:encoded>
        <![CDATA[<p>在开始之前，有这么一个网站：<a href="https://files.lynx3.link/html/loading.html">https://files.lynx3.link/html/loading.html</a>。</p><p>这里面引入了五套字体，每套字体 3 个或 9 个字重，共计需要加载 1000 ～ 2000 个字体文件。那么，这个网页的速度与性能，会差到什么程度？</p><p>由此，我们引出本文的话题：如何优化网站速度？</p><h1 id="%E5%87%8F%E5%B0%91%E4%B8%8B%E8%BD%BD%E8%B5%84%E6%BA%90%E7%9A%84%E6%95%B0%E9%87%8F" tabindex="-1">减少下载资源的数量</h1><p>更多的文件意味着更长的加载用时与渲染用时，因此应慎重引入。以 Butterfly 主题为例，若不必需某些组件（如 abcjs），则应将其关闭。若不明确某些功能（如 Lazyload）的利弊关系，则也不应轻易启用。常见的有：</p><h2 id="%E5%8A%9F%E8%83%BD%E6%80%A7%E9%99%84%E5%8A%A0%E7%BB%84%E4%BB%B6" tabindex="-1">功能性附加组件</h2><p>附加组件包括 abcjs，Mermaid，Katex/MathJax，Aplayer，Firework 等。这些东西若非必需，不应以多多益善为由开启。</p><figure class="highlight yml"><table><tbody><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># eg.</span></span><br><span class="line"><span class="attr">aplayerInject:</span></span><br><span class="line">  <span class="attr">enable:</span> <span class="literal">false</span></span><br></pre></td></tr></tbody></table></figure><p>此外，还有诸如小挂件、弹窗等，同样有一定的性能需求，可能也会对页面带来负担。</p><h2 id="%E9%A2%84%E5%8A%A0%E8%BD%BD" tabindex="-1">预加载</h2><p>在双方网速足够快时，开启它的作用似乎并不明显。但对于部署于 Github Pages 等国外平台建议开启。</p><figure class="highlight yml"><table><tbody><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line"><span class="attr">instantpage:</span> <span class="literal">true</span></span><br></pre></td></tr></tbody></table></figure><h2 id="%E6%87%92%E5%8A%A0%E8%BD%BD" tabindex="-1">懒加载</h2><p>在图床速度足够快时，开启它作用并不明显。</p><figure class="highlight yml"><table><tbody><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line"><span class="attr">lazyload:</span></span><br><span class="line">  <span class="attr">enable:</span> <span class="literal">false</span></span><br></pre></td></tr></tbody></table></figure><h1 id="%E8%B0%83%E8%8A%82%E5%8A%A8%E7%94%BB" tabindex="-1">调节动画</h1><p>很多朋友为了网页美观性往往会添加加载动画，但正如前面所说，只要有一条资源有问题，就会阻塞整个加载动画，致使网页迟迟显示不出有效内容。纵使是非全屏式动画（pace_css），也仿佛在提示用户 “嘿！我还没加载完呢！” 十分影响观感，建议关闭。</p><figure class="highlight yml"><table><tbody><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line"><span class="attr">preloader:</span></span><br><span class="line">  <span class="attr">enable:</span> <span class="literal">false</span></span><br></pre></td></tr></tbody></table></figure><p>但是开启转场动画可以掩盖加载时的闪烁，提高美观性。</p><figure class="highlight yml"><table><tbody><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line"><span class="attr">enter_transitions:</span> <span class="literal">true</span></span><br></pre></td></tr></tbody></table></figure><h1 id="%E4%BC%98%E5%8C%96%E5%9B%BE%E7%89%87" tabindex="-1">优化图片</h1><p>图片作为媒体的重头戏，在网页上不可或缺。随着图片体积的增大，图片所带来的负担也不容小觑。优化图片的要做的是减小体积，其方法有：</p><ol><li>手动降低分辨率、位深、色彩精度之类</li><li>使用工具进行无损或低损压缩<br>参见：<a href="https://butterfly.js.org/posts/4073eda/#%E5%9C%96%E7%89%87%E5%A3%93%E7%B8%AE">Butterfly 安裝文檔 (六) 進階教程 | Butterfly</a></li><li>将 PNG，JPG 等格式转为 WeBP 或 Avif 格式<br>此类图片发布日期较新，有许多新技术以及新特征（比如在保证质量不太差的前提下，最大程度压缩体积），适合网页使用</li><li>将 Gif 换用 APNG 或 MP4<br>Gif 不仅体积巨大，质量差，渲染还十分费力，不如直接用视频</li></ol><h1 id="%E4%BF%9D%E8%AF%81%E8%B5%84%E6%BA%90%E5%8A%A0%E8%BD%BD%E7%95%85%E9%80%9A" tabindex="-1">保证资源加载畅通</h1><h2 id="%E4%BF%9D%E8%AF%81%E6%80%A7%E8%83%BD%E8%89%AF%E5%A5%BD" tabindex="-1">保证性能良好</h2><p>在引用资源前，应确保来源稳定可靠。若其速度不稳定或服务时好时坏，可能会导致卡加载动画或卡白屏。</p><p>应对资源和服务进行维护、监控或选择可靠的来源，引入前应进行<a href="https://itdog.cn/">多地 Ping/HTTP 测试</a>，确保多地访问通畅。</p><p>若确因资金、政策、网络环境等原因不能保证服务时时可用，可考虑使用备用 URL 或 IP 属地判断等技术缓解。具体请参考 <a href="https://github.com/EmptyDreams/hexo-swpp">hexo-swpp</a>、 <a href="https://kmar.top/posts/b70ec88f/">Swpp Backends 官方文档</a> 和<a href="https://github.com/lisuid2/hexo1/blob/main/sw-rules.js">一份新版配置文件</a>。</p><h2 id="%E4%BD%BF%E7%94%A8%E5%90%88%E9%80%82%E7%9A%84-cdn" tabindex="-1">使用合适的 CDN</h2><p>打个比方，假如在上海收快递时，件儿从苏州还是美国发过来快？显然是苏州！CDN 也同理。市面上常用的公益 CDN（JSDelivr， UNPKG，CDNJS）等多没有大陆节点，使用此类 CDN，数据包往往要漂洋过海从大洋彼岸发过来，速度堪忧。</p><p>以 Butterfly&nbsp; 为例，可在配置中将 CDN 来源设为 custom 以使用可靠的国内 CDN：</p><figure class="highlight yml"><table><tbody><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line"><span class="attr">CDN:</span></span><br><span class="line">  <span class="attr">third_party_provider:</span> <span class="string">custom</span></span><br><span class="line">  <span class="attr">custom_format:</span> <span class="string">https://registry.npmmirror.com/${name}/${version}/files/${file}</span></span><br></pre></td></tr></tbody></table></figure><p>其它一些优秀的公益 CDN：</p><figure class="highlight yml"><table><tbody><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># Custom format</span></span><br><span class="line"><span class="comment">## NPM(推荐，CDNJS 并不总是提供最新版本的包)</span></span><br><span class="line"><span class="comment"># custom_format: https://cdn.jsdmirror.com/npm/${name}@${version}/${file}</span></span><br><span class="line"><span class="comment"># custom_format: https://npm.webcache.cn/${name}@${version}/${file}</span></span><br><span class="line"><span class="attr">custom_format:</span> <span class="string">https://registry.npmmirror.com/${name}/${version}/files/${file}</span></span><br><span class="line"><span class="comment"># custom_format: https://npm.akass.cn/${name}@${version}/${file}</span></span><br><span class="line"><span class="comment">## CDNJS</span></span><br><span class="line"><span class="comment"># custom_format: https://s4.zstatic.net/ajax/libs/${cdnjs_name}/${version}/${min_cdnjs_file}</span></span><br><span class="line"><span class="comment"># custom_format: https://cdnjs.webstatic.cn/ajax/libs/${cdnjs_name}/${version}/${min_cdnjs_file}</span></span><br><span class="line"><span class="comment"># custom_format: https://sf.akass.cn/${cdnjs_name}/${version}/${min_cdnjs_file}</span></span><br></pre></td></tr></tbody></table></figure><p>若国内源无法包含所有所需文件，还可以给某资源设定单独链接。例如：</p><figure class="highlight yml"><table><tbody><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line"><span class="attr">CDN:</span></span><br><span class="line">  <span class="attr">option:</span></span><br><span class="line">    <span class="attr">busuanzi:</span> <span class="string">https://cn.vercount.one/js</span></span><br></pre></td></tr></tbody></table></figure><p>若站点面向全球用户，则可选择 CDN 竞速等策略。具体按可以参见 <a href="https://github.com/EmptyDreams/hexo-swpp">hexo-swpp</a>、 <a href="https://kmar.top/posts/b70ec88f/">Swpp Backends 官方文档</a> 和<a href="https://github.com/lisuid2/hexo1/blob/main/sw-rules.js">一份新版配置文件</a>。</p><h1 id="%E5%8E%8B%E7%BC%A9%E6%96%87%E4%BB%B6" tabindex="-1">压缩文件</h1><p>HTML/JS/CSS 文件中的回车、部分空格、注释等仅起提高可读性的作用，却仍占用相当大体积，因此应将其删去。</p><h2 id="gulp" tabindex="-1">Gulp</h2><p>参见<a href="https://kmar.top/posts/7d9fb37e/">网站加载速度优化方案总结 | 山岳库博</a></p><h2 id="hexo-%E6%8F%92%E4%BB%B6" tabindex="-1">Hexo 插件</h2><div class="tabs"><div class="nav-tabs"><button type="button" class="tab active">方案 1</button><button type="button" class="tab"> 方案 2</button></div><div class="tab-contents"><div class="tab-item-content active"><p>参见 <a href="https://argvchs.github.io/2022/08/27/hexo-minify-static-files/">Hexo 压缩静态文件 | Argvchs の小窝</a></p><figure class="highlight bash"><table><tbody><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">npm install hexo-html-minifier hexo-clean-css hexo-uglify --save</span><br></pre></td></tr></tbody></table></figure><p>在博客目录下 <code>_config.yml</code> 添加如下配置：</p><figure class="highlight yaml"><table><tbody><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br></pre></td><td class="code"><pre><span class="line"><span class="attr">uglify:</span></span><br><span class="line">  <span class="attr">mangle:</span> <span class="literal">true</span></span><br><span class="line">  <span class="attr">output:</span></span><br><span class="line">  <span class="attr">compress:</span></span><br><span class="line">  <span class="attr">exclude:</span></span><br><span class="line">    <span class="bullet">-</span> <span class="string">"*.min.js"</span></span><br><span class="line"></span><br><span class="line"><span class="attr">clean_css:</span></span><br><span class="line">  <span class="attr">exclude:</span></span><br><span class="line">    <span class="bullet">-</span> <span class="string">"*.min.css"</span></span><br><span class="line"></span><br><span class="line"><span class="attr">html_minifier:</span></span><br><span class="line">  <span class="attr">collapseBooleanAttributes:</span> <span class="literal">true</span></span><br><span class="line">  <span class="attr">collapseWhitespace:</span> <span class="literal">true</span></span><br><span class="line">  <span class="attr">ignoreCustomComments:</span> [<span class="type">!!js/regexp</span> <span class="string">/^\s*more/</span>]</span><br><span class="line">  <span class="attr">removeComments:</span> <span class="literal">true</span></span><br><span class="line">  <span class="attr">removeEmptyAttributes:</span> <span class="literal">true</span></span><br><span class="line">  <span class="attr">removeScriptTypeAttributes:</span> <span class="literal">true</span></span><br><span class="line">  <span class="attr">removeStyleLinkTypeAttributes:</span> <span class="literal">true</span></span><br><span class="line">  <span class="attr">minifyJS:</span> <span class="literal">true</span></span><br><span class="line">  <span class="attr">minifyCSS:</span> <span class="literal">true</span></span><br></pre></td></tr></tbody></table></figure></div><div class="tab-item-content"><p>curbengh 的 <code>hexo-yam</code> 插件</p><figure class="highlight bash"><table><tbody><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">npm install hexo-yam --save</span><br></pre></td></tr></tbody></table></figure><p>在博客目录下 <code>_config.yml</code> 添加如下配置：</p><figure class="highlight yaml"><table><tbody><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br></pre></td><td class="code"><pre><span class="line"><span class="attr">minify:</span></span><br><span class="line">  <span class="attr">enable:</span> <span class="literal">true</span></span><br><span class="line">  <span class="attr">previewServer:</span> <span class="literal">true</span></span><br><span class="line">  <span class="attr">html:</span></span><br><span class="line">    <span class="attr">enable:</span> <span class="literal">true</span></span><br><span class="line">    <span class="attr">exclude:</span></span><br><span class="line">  <span class="attr">css:</span></span><br><span class="line">    <span class="attr">enable:</span> <span class="literal">true</span></span><br><span class="line">    <span class="attr">exclude:</span></span><br><span class="line">  <span class="attr">js:</span></span><br><span class="line">    <span class="attr">enable:</span> <span class="literal">true</span></span><br><span class="line">    <span class="attr">exclude:</span></span><br><span class="line">      <span class="bullet">-</span> <span class="string">"*.min.js"</span></span><br><span class="line">  <span class="attr">svg:</span></span><br><span class="line">    <span class="attr">enable:</span> <span class="literal">true</span></span><br><span class="line">    <span class="attr">include:</span></span><br><span class="line">      <span class="bullet">-</span> <span class="string">"*.svg"</span></span><br><span class="line">  <span class="attr">gzip:</span></span><br><span class="line">    <span class="attr">enable:</span> <span class="literal">false</span></span><br><span class="line">  <span class="attr">brotli:</span></span><br><span class="line">    <span class="attr">enable:</span> <span class="literal">false</span></span><br><span class="line">  <span class="attr">xml:</span></span><br><span class="line">    <span class="attr">enable:</span> <span class="literal">false</span></span><br><span class="line">    <span class="attr">include:</span></span><br><span class="line">      <span class="bullet">-</span> <span class="string">"*.xml"</span></span><br><span class="line">  <span class="attr">json:</span></span><br><span class="line">    <span class="attr">enable:</span> <span class="literal">true</span></span><br><span class="line">    <span class="attr">include:</span></span><br><span class="line">      <span class="bullet">-</span> <span class="string">"*.json"</span></span><br><span class="line">  <span class="attr">zstd:</span></span><br><span class="line">    <span class="attr">enable:</span> <span class="literal">false</span></span><br></pre></td></tr></tbody></table></figure></div></div><div class="tab-to-top"><button type="button" aria-label="scroll to top"><i class="fas fa-arrow-up"></i></button></div></div><h1 id="%E7%BC%93%E5%AD%98" tabindex="-1">缓存</h1><p>部分服务器是没有缓存功能的，这意味着每次访问都需要从服务器下载资源，既浪费流量，又拉长加载时间，而 ServiceWorker 就解决了这一难题。ServiceWorker 可以对缓存进行合理调度，减少内容的下载量，对于速度提升十分明显。</p><p>具体部署过程此处不多讲，请参见 <a href="https://github.com/EmptyDreams/hexo-swpp">hexo-swpp</a>、 <a href="https://kmar.top/posts/b70ec88f/">Swpp Backends 官方文档</a> 和<a href="https://github.com/lisuid2/hexo1/blob/main/sw-rules.js">一份新版配置文件</a>。</p>]]>
      </content:encoded>
    </item>
    <item>
      <title>加密测试</title>
      <link>https://www.lynx3.me/article/53963325/</link>
      <description>
        <![CDATA[包括 Markdown、数学以及标签外挂。<br>密码为 114514。]]>
      </description>
      <author>LynxCatTheThird</author>
      <category domain="https://www.lynx3.me/categories/%E7%A7%91%E5%AD%A6%E4%B8%8E%E6%8A%80%E6%9C%AF/">科学与技术</category>
      <category domain="https://www.lynx3.me/categories/%E7%A7%91%E5%AD%A6%E4%B8%8E%E6%8A%80%E6%9C%AF/%E8%AE%A1%E7%AE%97%E6%9C%BA/">计算机</category>
      <category domain="https://www.lynx3.me/categories/%E7%A7%91%E5%AD%A6%E4%B8%8E%E6%8A%80%E6%9C%AF/%E8%AE%A1%E7%AE%97%E6%9C%BA/%E5%89%8D%E7%AB%AF/">前端</category>
      <category domain="https://www.lynx3.me/tags/%E5%89%8D%E7%AB%AF/">前端</category>
      <category domain="https://www.lynx3.me/tags/A1/">A1</category>
      <pubDate>Sat, 03 Dec 2022 00:18:19 GMT</pubDate>
      <content:encoded>
        <![CDATA[<div class="hbe hbe-container" id="hexo-blog-encrypt"     data-hbe-format="4"     data-wpm="抱歉, 这个密码看着不太对, 请再试试。"     data-whm="抱歉, 这个密码看着不太对, 请再试试。"     data-salt="816f9bc7fa2f69962859411863345d8f9dad1eae109a6a6a7f937f234a6a780b"     data-nonce="ba8f15061e017dcee0832640"     data-kdf-iterations="600000"     data-auto-save="false">  <script id="hbeData" type="hbeData">    826667b146b54918c92f24fbe988738a010c4bba644108fd44621021af9a3c2b1f0468e0be2732d020158723617be890e27ca0f00ff31d1910e7af01da018a9a55c4acf1afae1bf49dd61c3cafe8d1c75a08f08be27a7a7b9065e4cd2087f8e01aa841e9256a9897577a705a8669080c9cd22b8a1b4ace77c6e2ace691891985308a561bdf98e1824e6997136a82a1b44e57462f6a466bbede8047b29fde020776fdab8a46b3f3c4bb0d401294ab4dbe732d8cb6b8f533b9a28db33fefc5a41d63de5cba30c0d5c5361362ede44ed31a0c2609d39e51901b7fe66319a514d1b66e3880ad17c5b29132d44922e28bae26d37a43c1e4b16d9543fb64f03ce87ca8d352f3e9a89c82db8460cc9412951715adf2629bb7ed152a62ac364e8ef4b9c90b8b8f01e6e5c9df8089cc672ae910e743bcaa66904d59f85c5897d1b1f0a9b287cf7a63fca743a109be0cda1d8cc963053a5b5c749734de56d8d30ba549f064d04e60fec028b62295336de981eb3fb4ac7ed2f117d530a1af931ef0850822d21632d4751bc1c6d5d7f9777cc68f84f689cb5fad7817fe3b61c7d4368ec3aeb782a97178f4c5c5f786dab67667e09ef839cfdce9ee5d4ad56ce53aaf3237c3fd84e3122966df33601d816f5b200724c717be56fd0b2104a8d567062d2c1df70a4c86b6de66e9ee38ca2d16dc1a0b006eb5875dda8e6c92005420666174e817a1d01b01720132b915a38388727a4d3419d1108e99d2fa7b1d87af7e391b9376ca20995d5380d84b882756252ffde52fac2038ce8b44385a51cc79b4c546594674af6f35215c09a0e5422bdd2642034bd1e2d61bbb304ca75795709dd251821a16067b166f09ea4ee04eb772df9542533a6f5bcc736e20d04d0e81e14926e3ee8149fa39dad2184779a728b75ce30d656c90b81980be51e6913e105e8682d2ac4076ab19e12cbb202bf459daae7dbac1fce9201504d1dd4daf03b6deead34b4509b3f60ad14b38f6b941aed82c34592f0410ab8244a99638b84b5b6d0df7ab3919e6c9f72263fe126e20adcb99afe027da69ef8f7294bcf0a5b583fe35420389c3fb3156dfe3b7196ef4f9383546fb293305feeee29b5bd1ab4cf8139ce9416c527c29f5efd1aa254a82410c8e97321a01609af3fcae310a89049dcf9475204f1ebf931c76260e435550aa423c5ea88b5caee70969f620708a271146cf3b53976e9263ed03d844d359590a8de410ce41c76325b8fa723dff430ee9a60277e62d8971269b024baf3a1ad1eb0e3d738c53fd67886c4bae6e3a4a156b114181f497c00a96420d1137e5b0456bb4cbfb97fd2da46cf06a0855f30cf6b6363d9d68577229776790be76e1852d04023bde4d23ad69c9efede14e1d2dfdf0c3ea4da09cde00de3a77e204f6a1732818a8052f503cb58182c541bc893fdbb068934feaea5b4c83c2a18d3d635032160442a8a038fd720f778b7d0dc176adc96b2b121444c37b01d1cb7492419c1923e1a05c1f0e6fc3d17f4835100ded690f7d1c73521943902fcb25e3cec7966e3e8c406735c7f7785db4a0468e153433e18e5cc71b6fb27c203564a38ef4ddf103caf0e05694fb7ded5d5672578ff57ec0bc54e7f97535a356c9d7aea0a43c9f26156fa14c739abeece9fd75fb395d3c57087aa1834f2a1581ef54e1fa0e5661ba7387786f777fb6668868b9fa47ed27b839716c3d0629a7da7a3f5c54ef2eed14551f63328da70f0f1e3f25d25cd9c8d75d2a67e2b36e02b25a8d7e46e41449497ed00d1c7ab4838667351f2ea6c6e2fc79141c8480dc13d0814759fe9f0b38ad7fc1bf6f5b32bd564c46d16a44a9a58da610b67ee753bc9eaa429cc0e74c3fe067c0b85ac8dc684102071efc74bc996990aeb08d676ac846f8097da94b8f3b3ef9145c4c97ca6179f82c297325a61721ed919c8c6b07325ebbb7df3cdecfe6a82820254edcf48ec9b0545a25fef6cba35c1cb35d1280e794806a7d1432041eb53059d910c9042e4091494a47e1f3eb241c8555fcaa3fe7109fd38f95fd44f2dad20c8b97734e423eb53613b4369cf9eaf459ba5828f395c066f9e3edbbebe3a98d60897f126f3c0b8594f8fa8f6401276a563322325c30d399283179a2d6decb88b21e0e85e35d2472e1830b81c1b109818524e03fc4086c495171701c0c6630af3abf092d70e3c898229ecd10b4cb1fd967ba60fda2fa95549e3a310956a210a82d2acb3a76ebbfc0539cb58db76db58ada3549e0c535d9d4839b46e42ace808607824042ae7cd22360034ee8ba5504ca6eeec6a2adf7ba1d41f701f2bc8fa78e2f10040b80d271c9c2a1c893b4a9c6d247a6d6c9f3f11ded33de93935156e5f7c6cb15a10d56560c14016c7de62d3f01596a43606c2812ab35abe80f228dd94903a00a6690791ee563ed6c004c434732abc22e3dd26519c43216a22faa06387ce07a057930b4063f001b33f8921507f4a9b08ca091bcf3be92390c4e47bdaf4e9e4faf53e7b405dfe2d0c6bcdf7b0b7b99c605524d452a11d22eff4405b283247ef050ac7f60dc5d249ba275cef4232bba4b22b6af4da952dfa3808534d17206cc1f6a26fff2b6f61f843e2a06e2e61582fdbd5a123f13f8d81aa27b59968d597296ff9711307813230b14360912b2012ed0ee323cd5fe5e4d5f720f5b2f28612728ba6a7f25af1f3988f082d5957490eca69e7c3c8ebfa82a3d7dd440b6aa045b79ba47ed43f6e209f4031516c2de7e4fdabc52d6d04a1ccb03afab66b40b8f1f074496bdeb79b1a4f2562ba458c61c74ae0bbb78be122ed99081a7e6c93cc952d741a21ab2d04abd0d5cf735c9a10a5e51f9a4c69e07b75331081ae5db6251b93fce4ddb622d0ae958cd52e15daa04227d01d838534f8f321f92a019b50f36f7b1d7c6e9a1c0b00ddc8db51d9b17eda37e57314274b51773b304e85471f49274b8244a6cd5ff952d7b0038cab253b6a7d057eeca14d08559461c107dbed2eb52268506f52e3d84feb8e65da5962c8b6b8a436493bb43cd546e4f57ce2a7945efb7572f50c61cd1fbd66cef48f2fd4c9f00827ed66676b3cb36cc018a6d31257af499d1975433f87cc0380cfedea5f0c08fb5ab79e11c8d7e50a53e859e0c8366ba0b66fa5dab4cd5ac3c82f4a946178e13e6dff0f270335499790ed8e894e4f029f63d550f5a286d3316014401548799822b5ff3a184f5b9ab703ad9951817daccedcbf16bdb7c9ab306d3d4d9e36736ded8315984b43f5297cd463ca0af349fa69aec35346bf35d470dc7313a179e5f4656ca502ec35749bd246521411ce59ff8fe6114112e8b4b0d9d2ff452fb371b7efc11b887c482bbd0ad8edf3664472051af4d7546ef2d58f9ed1fa041f20ba13b5bcec815d47faca69cf17e9fc691b73058e4cc65a197e17f0242ca4eadb9c6a63ef59f42314db39f0abc0caec6b838fa4ee3ffd2c50ecf7e6856a99d22478ed53655221f1dea025b8f12bbb75f15fdda79f701b915530a4d978029cc098abe541b8f1b2ae4e8a3443800d3d912c442dcd5c9a923919e5a9c4462d836b3ca542661509896408623cdcada60dc51d812da7892107520e3df7fd529a437abf5059e121550230b2b4757858faeed279a882ef5ebb718a0b8c187d0c958b82b341e012f40dce130fa8d26757f5683c9c6afcdbf5aabf2f2791e4af4ea32d181daa9d4b744f205449fd9938acd1a1447c4e948ad42491225aca816405232e049b52b6c72a951add99640eae163c45fbd4a53bbcda74e4eae68099073cd3eddefb9e7159804755d3202fe030b04c9a6259f4a22766b14ffb5adc2c32d47d1e102a317449867680812010591b27a1abaab34286bd75e0e399dc465986e75a052ae8b4d58d7be9d6e0ceb8a55b87f574e732884e455df52e8624867e8f5adc6482ca291653b86ab7ec58a669f0bd6e616d937d84aedf699977e9101bc518e79341d3dde0ebe08fb1712780c5bc3153d71ca3dd84092cb81b81a9f452740944f2f7f22d70a97e1f7c95ccb1ac86511ca98a982b017e31d2f267140b333244953d91fd39f4d70f99b0ce46c2dfd72d626ef56738d764fb7c8fc7c7d08941567dfa52a11c7dbe5f893036972098b656fa591d921f0b7dc59427412ff53d11229a8caf3e7b02866b7ba36da6da23d24a52cdd32eae29dfff2f8e27ffcd3c06e360f7f155ec99fbe78935aeea6f03a397bd7855b2f78e3691d48bca735808ecdb415d1652da3a669fc4c81baea4d217fe38231c0a3982ea1556ba520293133760586706b9c4241aec176a3847c5eb0c0073df966f30f403fa17e9029308257fd338c0681fe62b491bcd6d872bb0d2d58abd1a494a5856439acdd4fe110b8dc43f3955e73824226e9a2dbedae30cd2fd0d79a74533531f5a5c1ef0d8d88f286f18d4a5b48f80c7a1c5dd2a1db054bcf40d3e00d3aa31dfc979f7ea3593dce1e2ec10efa87c7d1d5ab955f5fe218b7b70e1161694abfa0d7c3a8de9c97fa2b4465fe2415df6d3cf5c71495b4e0f7015743220a9f6a8540f7eadbdad72e2a4751615ab320dd942097cb7fc277c3b07f842d01bdea3c76a4fb16584e8d71415f1ad8d4136494c273633661af0345007d4819ff807812269053353ccd46acede23c455a27188c27e7c35d8f28b4dafb4937fcd65612369a7f52d98488a64f57ed291ae9a7cfcbaed2e7626bc2b9b934c466826b6e2a7d8412bdb5b83cb19bff13ac74e1b4f299f847bcf5aadf8cda1823500eb04e5bc8cc054d7080c9f28cbd969e251f738166c7f1db6296f159ba868d1e003c720149c3d3bfb77fff186d80450e4d38fd45ab1f91e4cca74687c4ae427a40ecef1f7eeada660f2428f850010a29058da8326af77c07e05c34355d504ed64c83e56cf4df1a082dbd57aa5caaea73aebe8411f1d10ecf038b9ff43b3a6960a15a8f478937dba372e4387cdc47d615c2e17e02ab2cbf3f3ec032e7171b798ba73e0a6910f88a8a13a05d4775fb37b5d28009c95a2469f33f30f577e64f482f32196263ea88c4b2dcaefa02df687507e18721ee121edca4590e4c7786a49648e1187b74e233d6b02e10ec4fa7b5f712d1a128a4ec854771bed68bd2668a9a1a883bd25671cf35cf2ae4accace9846a1e937bce668b56ac389f9e693c1c8065bc164f4cde4af8085c955d621a921f2f0998e6a1d71562808ce12c62cecf44fe164ba9e16efa4c583b6a5d0846bd1f77010b6b98665dbcba243579298142a0463ad406f1fcc201a6ff9453ef48e0dab96ad0b8f281a1c687febd85b1b686a90a7894366673dcd54692c81a94588c585690781a58ff2c878d5fecffc561e2b8f22471d3102e9f4e1b3086281807fed49ace3c190748175f8a744d4dbfbac4eabe5bb768a265d10c9a48a317976f1574677a8b1c5d4960e6cfc34c5a241b025399b08b7583b3f3df1e605918b02a3c58f8e04012919d6758cd6324f859e1bbb8fb2e812b4ad2a1c293819477fcfb3c562068d5f62615ad8fb57f1b0b4e7062a62a6d92de63ec8e5e96c89c2edf41283e3571dd6e5fc42eb0133134d4b2ec8c945fb9f44eec1070e957ac9da349bf0a085448d645eed0237ada232d98b16ce5c031da9cf196e6fa23de875fa1287b5cd81a64bdfa96bc8853b9bc62ff6fd9af953403ddf57fd629b55b24fef411f8f37d7e174e14cbfa47670f8fa7423e977bdbc2e9ab145bb5b7bdaba7a67c599e2234683daa4a6ef621a28e81e4425c4b0981aefbeb4b636105da1d236bda7b85b38759a101c1fd814da06652e7940a5a8b62d9a8a687b5c33d5af78200ff074211bf55b51e124352d7263a67b7a5212729f173078bfc81760ccc968e1f4860d340b4aa46ceeb33880253ced32e14709ad44c6a2537590b07652176f21e494fd55b7b7d395fd7c1ec9af6a4919feed5e6ca950af9df7e9f3fc4edb65762ccb83d066422abf371877ba743005a308ebcb445ac1e579bfd39fa704ab0bfb4f2279f2550bd299915cbe18a14e9469be223328a72ff5e40cd73d2e30a8aeb8c6020580302e7c8f65694db15c0b2061a35c5b9dad35d3d468d746be1965b6f8b9d9674024dc6084366d8ee05dd30c1b0bb8dbd4be2858854c7db09c7c885698ae6a272f0b08ab82d277a631054f1fe275793447a0c12d5a4739b6e13914e28471c593023d0157554c568ad8945326f8aefb1219e9593c444db5695e8188f9b1ef7680f31d0449dfe7dab005208c6ff2472fa156de812b2100a2ecb706e56fa63aa1b7b5c17a682f86253fc3854c223054954ac5255efbf7f88f88a85957aa5102528b9c8440f68e02f53455ed4adb874405aa01848a304fdd81af7a9f869fccba2e195edc426eb3fd3cf51f2f742b704a383fae5b86a9894b5f074e0c5bea9d36173b9f69aad4c80cedd0cb8a71a6dfbdced9be09b4ccb7722428495e47c3ba4f0a4e68c231aae59bf146a7fd8179daae6448b07b68bbf6e014c805696c28516d6e17e4fd4456d8f247f0a4db0be7bb1d7f83104ed78096274592ea42e2dc7bc2f78ed8d3ab90ee32dc9dda81e36cebd6e0a0806b573751e149248add55c5258aa3356bf7e1478d0abf2c62438c307a3272dedf640263e96fb2d4a3d8c6fbb53fb820879b89e15789d70c4a6d301e2872137a7cbb099e5ae265f37ee5caad3e7785aa15fd959cf42541429189b97f778d4677a2fee02364fd4e6b18cb0774e9faa74ff909b998060b3352e7a433c892b9192941c02c2276b5a7dc33fdd82d8a627171e3f8ce22442a6104f8b4f8effde4419a42f6ee70905de0b9ec7fe8449e7753fbbff75d3c60934583389331c7c127fa71b9a75a1d0065aa7205287bad4fef8901a9677e9f21d89eb2083ca473b9ea62ed049b4290b8f105cb57c7f61ba07481d194e236d5bb2a993b1debf42b8b5f3bba9d8d94bceab9bc8f529017e873b290effc8a1cef78f16a0a5832507dc707195f1cae823663cceb62353065881d5543c6ebfaea1d78e83ed884e933b68d6142dd144f39cb128b5d7b01930953c0c46faa514803902dc3ed05923c1694849fb1242896bc14e7aa57465fe307c454b6fd1ee0489e3ef0ed581c8b8799efa3340c1066ab28a930e0187af2394f9d807ad51f299e4a5c4655147d1d5b4bbe5729830c35584a0cf383313c27daeb4d1b8cf5a7aa1272a2704e95ed063489ab5a6f51ffb5a20b77008a0298e03eb6f283b661e4dd775e8bba5b9604e2c8020eb257281a793f9337ca92806e2c4cc8b379d84a2cae36a835539fc40d4e153a6165c1b993b0c133c8da3543157888b86f66f1998a967f55a658eb8c3ff28981d97806d40ef4888a7ab0af9dcec552c6e2d449a3377e97f5b1257c52ced37a4c6723d46599a99477148c248f5352cb1d491d1c628d4248f73eeeb1f8a3f75f4b615817727fc6789b4c347b47b5a51f06788f581d78165ec00d3eb17e9cde5bcb3099b6082c475f2a45c35325317c82f405d305fd44bb0e8a75305a04dae1120cd00b6873bd577e7def0e78c77cfe430681746ea8fb66680e57734abbf5ef884d878665dc2d2f153dbc08cd4d39e532947e37d0dea3ece188a4e7ea7db6c83e5efed1997551ecaaad832a3dd34ff6609d9b5396f33d1c7ab5be9de6297d70411da16ef6b013c78f5619b2cca4b738b148937750c625aaa42719790062eed7585e061354b98630f72c17bf14baddf9a2806f897980336bc003c9e3eacbd0172900b023354df1f8f2648fe51e777cad8f568a1c3bd5fd29fddcde607eae08f5975a3f9971120c8b313e875b7c43f4cab72c12ba162687f4cf7d7ac6e2e8345ea791269fdad87c2c654d46fdf00312528dcd3b2b19c20480af030dc523d25e82f4db96da114da26d04ccfd12855c50ceeb88bb00abb3431cac7606b8c2636654fd77102395a09c5aba91dafa47fedd692cd9d045895dffde00fbe479a98fe41922f835d1411853301a8404981e83c465159cb19b4ed4bfb953c397ebb505b97c12b35d50aaaffb067ab5b88efe292b7eeeb53abc1546cbbc855fd2e9e2ed2f46d4063dba6ea34963e9b070d165207768a93ae8c84a24c206a5bfcf77f83bb806927573116b420ad86a1a996f486681c6c957f9e19a492913ef34ff2aa229b3b708f76d37005b89a7da0a805b2e2da0d2bc7af49ed9f8a54f4fd9d853afd3d39e677d8caa7591a06f49cc5a1953198f1124f282c0314103b25bcf8c9a7ce5c9f2a2e77d6d9e8f79a93e7830d78dd70c185aca333d0309d29105734ffb9feaff5e51452a1d2e0b55b1ddeeb14b0038a047f25a4343941cff97e5a0128fd89d629e967287a2c85d30ec3cbbd482802d46b2d89fc492e1b48b35692fabb0734ff8beb4d8a4c5d8718f45d84d8fa7bd680c324d35fc9bfe4e28dddcb6447038e416796a87678853905cb0a23c77cdfe1a88819c7f1f380fa7520d134b1631f480079f7ca70390688a65950f5320dc5461a695b3e5dc4a02a3b7ce82aa71caf66567c1c90fe70e90c2ec29a89bd218daaf2acbd9266fb39ddb0029835dfb1978cf8c77b6dfa867ab949015347d3ef1c009a64a134512740ee822c8d021a5a3a08b4a9148eb06c7e9bc70bcb317b646463115fe470e8bfeb01889826f1b1c10b819ce234d7e2376eee76effe715d10d798b9b063d0a7794e74cffee7eaebd78808db00ad5eabb5e3cc5a7dfe55dd341c97bca0d48a919af583c6730e5e98500bcf29a65a67bb7ffc976da272e8f3febe395b8c756111ca7e58218c899e5e4f80b7273ee6f82e1e1a1a5c17de4235a6a1dc99fa387754ec4b6ff1a6656abfb9f09e68b46296802023388b843e76d51ef01d88ad9e816b7b2f149df9a7e5891d708524163c0baa4490b358cdd66cdbc99b42fd6ed1ccd43d642dcccd96ba0c451b81a5ddb80e9084f69e054d821e8d7d1839fc131b51125f11e034bb9f224bc5fe2d41b6b826fc68eca37390575cb47b6a22e8db68f5d5810ea9194a1207341fd00f6938b64880cd0fab2d3eae7a1d39a755ed409cb2d0b5103c572ebf3e3d12e3d79e95d25e160947b746d3a88df85eb18fd07e43e468dfbec4936f8e76c094cbca636d8666ee0dbd8a8de69fdf493551e869d516788f040283eb7f71851086194328ec1d0195fdc98a6810ba7f702fcac01a4bead2270358423562827e64c86088cb08f9fd21158792c42ad8b784f3452959c36a3403d3e538e603c55416aadb733fe758de7c01b759b8bc360d2e58c45b373636bbf9f076b5598afbd7924bcb5b7c336eb65def4f47ec4223ef02f5adb2f38221d9f116371815972bfd54240373c485204921ffc20f4a10f1ed3f7c7411cc05d8841d7064933e5ee2c9d2bc395e3c8f9f08540ea1a09910655f6586bd24a1ffd61859dc0ef48d3846ec611373dfe023bfe2e0dc77a8b1e47ae6432abf2e4c36762f98b9db4f2f707af7e62ac8797b540d5d0cfd205fb5314981997b66b9db989bce5f0be3b49904a898e8440253b1cf7ab1ea030331a667341f863ffb04f744d2c29a07b16e8727c624d43d363fecbec7cabae0168b7b492b2cfaef62edb53c5c69fcc9cc486bc45d44f7215459a1bc5a9510c31b88862413089b9ca738c15fb974e9f3f36893c1c08f2c2f38afbbca76e3768f6b4817b590e86d2aa3b80b8146491e421379b2457ac691d2e10174c380cd1aeeff04491a04f0c65dc055bf34e0b81f01830cf40a15074b09556de277f85ddf9c4999cdddb4229f5246bd5bd103a0900c792e8e9c04984f15851c64fe5e598c2dc1a329b75f422cd55180cc2634aa601d16792254520db40daad915bc40273a78704669aabf54a2b23a5adeef974e20d1b5e1365a3406fc8039eaef24cc351832cd17add9ee8d5c5ad201399af6150e795b7f122c56c7ca7ca11cdad27860d1d04411277162db609683b6ca9114757535959eb6cbc18a0871f5d68a3731103ce80b23d8d3ecbe0f3dd797742f1d9424d1abf4bb902cbbf955a5a231ab8548bafb6cba4bd2d5b2b902f61a1657893d77fa44947a6610ddc5d634f865c786620cbf5f33dc8bcd2a9e39b0bea6dbbf720b12aeabc272b0b332990c87ba4c30446550737ac14baa667d800e5dd9c52d3eded1582eca40685074822bbf3a23bc8741538b6c9cee0284b0f5b65f3fa07c0245f53c272093b8cd131f717e04a1c09d29db8148b5cae9fe088280f6ff317b22b53b7f08000beebf11a4c0366783b7f5c978580f9d64e7b0a60d42f48955301374b6e60f6937dc0032087cfff8d2ccc7614932aad2aa990bffba064fd5e6031c559cf098f467fd7bca3fa38e8b90537c2625049a36df9f71b3698e52b5e7ebc6590b4b4cc36430f983fe127a45c39f56afea5c4b929fea0fe5b91d8c87218ca9f88f39e84db353055ce14625412d6b14c143a69be9cfacaf0f16b340ab41c3eae5767e0d0fb256f6beef8e5a8f60d1f8d91295f2fddab6817fa3c0c7991fe67fa7d503a57524f2a0f306fc58dfae950b90bee9064bbdb4af5504cb95f210b3326e93f6caf6cc4557590e1a41f6efd9ad76e57a4b1fa3cc935fcc56456358999530a6243258573cd34e77d277833b495cdc110fc9ea7058c748df7ca77f1c8e18bd4776ca1c1add360cd26b04ffb3b129c52d76cb916ad79a2cf3f4b4243be461b895124eb401f5ef8cfb29961f48426c0f67d3416ed5a0399f028b9b12b7f80fdf7781fef2086cbc67eaba55e0b2b15d590a16b0fd65049bae98845e87e4b6a521d598de028b0504ca0e1c34fb7f8aead6da93a383ce6556d6050690f2c3c1e1d111ed673fefcc5fbebd870435ce1fe91a80a0a62015a4307d01365ea9da44ed5d5d5ad7c3916041419e528784bbd669164631c3972cdea68296f2311ef589a19ec1340e9fec3c56e7a2df354bc61e85b1fd6adf96295f3f5b7f492831a000d58fe436f5799c1506ce6cb6bb9aae9ab9abe259901585904137ea7e1aba35714818719ceafa88fce453a0f5432bde5ab2c9ecf3f6527b7b6ccb51712ae9358fc1ad25f5af84d08e8f9a9c628c4e5ba43e1fab3963b6bdcac27e09bf26ec16f43cc543b6716f39fdf212b7693c2151e780c8134d319027cdfade35d5c52dbc4963dd57a5bc9b2d7acec4b05c51c629634ab29d69e78d3fd87e5a50f96383292063a25ee74a96029ad85d6fcc83b46806e428edf5814aefcc324b0a4f463638475d85a31954ace4f7f5e92bd13c7f90ba9b8e3562ef69167feaf5c85bb5ea40438592c7180f863e76da771ec7900ab048b8e46bb4a2c224f2dd5ee36ffe90770f7681b4431b3db6492495ef28edb72040d8196ec287b11366f1ccfb42ce88f0cb84369426944d71e0039e7c44ec10ab84d7226be7ecdbd73506a7307dac4c4ea1a5dda3b994a27ac098a3c7662513e1f45ac5c85db54b1d99c533cac6eea3adb29057caa15e31685c3042bd10b8385b7e59b362bdea08aeee2fc07dd1c16f527c0a804a10db06857d89f0d08ccdb2eb44bb33e5e39e521441c7f9434569474fc280062daed151964a602060ebdd6cf5ef736c68c37a7c709370a01d77cfd799226bd4f0ff7c94f862fc5ad7b926c8d2c68ef11e24b01d9be4ca5b9ea1ce11986e3ede95dace8ddd2e4526c798ae8fe5d89fb76b1c9f6108c690ac691ff1916acd5bca5fe8fc1d1d443565eb26eb8a1373cc24639dd3990d7fae65c9ff514e207363433fe16dd76ab683a39d193d85ff6e2116914ee7450f0b292ad83b3eb7062ef5f2e7f73432b02da27b4081c53b244bb1cd7d25d5cc5481bff581b86b7544b2b78a677fbe629df2ab09968007c9991ba63de992e9c3580eeb2c4524eff40bb4e3a4f73270588467ce9614b5c2dd70dd5d7f585799dee2e2856f839f8573e7c111f6b475064a315d9e85807664c78f2bdbaf1156b6fc15c7ef8691b5162d65c964aea38efe610245270a77cb841f393cb5dcddaffa5f109a83ed4ce64ddd3dad391a2592d542fe3fac5fe23a98321982f795b5cc1c10aedfbeb2e3ee7e89a7f88dba6b47d934a98478ca4f80c27cba7da825d5b79dd2bb5bcce9687e42b3b4c668d064c5b47684892dc21e637ac2a138fc8790c640e7ee9abc6573f64f74403b987a5ce85d5c98d58f8b9a6acb5d97f0e0a9685cb50dfdca0927fd466d37e6113b20881ed15833548157e6c4535f58cb7c2473ded0189277a9fb615a52be3c2a76a8e6d078579be4e3884a37aaeca70a86885ce2fc0b4677314a5f40bad0f49a3a9b6a322a1c46c0694c2f861f69a8c21b6ed4e5891b8fc98250fa8b24e385d02d211e3a9446756aeb623401fdf40bca66d1264f9a8e65e9d685dc7025cbc28f2f289d55e1a1ab8209d8c306bfa9d5f0e1d5eb33ea53ae60c22f8e9f5ea3c3b7548fa2e9f41f0aa7c08930c9e81e73d9d8431ec4501212bf26e196ac548116178784909f1bce893cfa49244173a768e323e1af418d032270dcc557fbdbf003495e99440082ad0f727025a692d6f73807c18633df7e3d7a52a5b36ea3c0a8051ec8e7317a312d2c58c3c676af5562195a061b521be4843691839fef52710ff1fc2af96b106414fd040f3d0fff304796736a94713e6eaaa6dbe94c68e69dd1eb107553d63924c8bf70909ea50bb6ff73a55c3d44646e6713fab3f03db08f2d450e213916e3f57162e7e835c754b4a963c3855c00312689c81155a436d67f35d736e92de490c8ac26684fa8c71a354c7a0f1a0cd55a1f84dc468c5bdb00791d6f79a9c09bf647d79abb322537a098343d1de106b9e6257efc9875cb0cd23e46d3ec45933fd329909b1ce1f2aa3e88894d23070d9359a22bc1bc5cbd6ff25cc75bcb9e27d9d1e8ecc39e5de7ff534351577f50c4591d27e1130542810136460f902a19fdb1be031cb448be0494fcda32ce861ce749d347a7d138c995053fdf68474d5ecca5b43b8cfc7c156098c05b34bd8e0c9e4ed294a231da314a4204598292680d645dbe84a422751a02155579e79bf8f345ceb0a7a114ea55a15fef02c78ae9444097f7548531f2799cb6f10cd564cee4e3008a3c9fe1a3574aa5a9a4988460315a8c9af0f95d3991e9ac97ae89972704810e312ac146a0d6bf37960717351a390be22ee4698e0e1c3c0083caa9397aec9db1f9bb58375f960d347b786d664640779dadf7948ae37f1e359a50a9e57f5f3cd2afaaa652c4f5883f53d7fd8b644cc089c0f17f19171d865d94e1d222deec1d47dc129eaf2817f008c9d0e4ade39db0bd66ad9576af7e4ce53d52ddee3f6f27803721b82159e06b3152d2177114d3a4908be41a7d53eddaedb588475f14b089ff158c61156c3ef2b629da49077a7e5bb0beddb9a48d0fda650ff4a49c53edbe03fe8fe52464864996efb4385a6bc5df28e01ee741204255002b27f21fc7a2d1acada9ea0e905323ec5ee06ff79734694908c08496231d63ce5df16cca79890e6c14e92b935f27d4b89f1b1c891e0e221aab24f3f5b88df6229ef6dc592d5f4362e671ab870ad74e7976fb64da5a36cdb9530d0bda15e2463a58a610e4ff8246918c893702624cbeceb5d6316b7a062f9e80e1630cf4d7b3d9e546e1dc172864325a047ff6cf133fdd8af8aea7bf8ce642ef5a0e58f919f37a8ad41fa427951ba70ad5bc17242ce72f28ffe143452cf148ed8500b00b7789edeb7b0378147f656b15557b8713b7c26d27c568a898e5e8b34324ec78aed67289ecae13fe55e7a46bdb8a4c07c75de41ffb63effab65592d91f0db4ade45cc7e2e6fd7bb09d253090ff39a52480f9114a0bead65c6e20abfab61c319072c4641b3f40a971816617e4d95b851794d9fd12ba0aebeaa8989cea3bdebd056d698112e9b435593ca4d7b99dd9a9d975441453ef6266bd0b6f2d7b885c4da1d0e9691a87fc1c75408ae3f3d10a2116179778520b04a998b53b0b4a99f1cc3f809d9a211e5b7658aaa0f910d4c53cf1c8fd3a3998a8609f6ef644f85be7fc973f36342241dd1a75473aab0b2c7ffe0c66e7df7881d65805ad015dc7369c5745bd22e5be42d596d0b29e36b4d04480d0f56d60d03fc033829f7f716010e49258b20fdb61e3da3493c46b740d927f6c6f07b499ec4aa35b936794979f9dd63c281b288a87089049d64cc7713b61e3f0c149f6acf191fbaec35300d3456b1fcc701b278b566aedd81580e0824c44fcb4cda3de1cacea489dfaa2947f7c91a07f9e36a8b2ca8fb7acb4c0ae2a384b911efc12152d70a8ca31a70a074144f7acd2ddfe881aafe2cb11d947daab794847bbf817dac5a609ea65c1ecad78c5f8c301fce8350dacae4d1106a260d0e98d9da47d5cbea2c072dc1c453bbf05b607bdbbc0a0cb27769fe45778ab41e4c78701be7099ffc7ca6218776095e8bb253fb6ff28b38517a63698c9aea1336b2a2f55ba25ad06dcf9df75a3c1291cbeda734e0674bc9bcb6eef918629d54d108497bf814e4e929fc8054a808cebd3a9201311c90e4ff10e41ef15abef8fa03d07fd8b5becd653ebbf70b6c41afc2dbb304ea671569e0d4f28f0171628bc951ccbb2354ed3fee4b0e949fad34d069be6dd0608f9998563b4722f8c51065910d7cc5c897cd892e4677c392b7f22fa14b09f3c38dfbe4937275d46e44b9d5e7baea9fc2b4e806cb51894f639879eb4b7b04f26a4ed29cafad35553407d962c6896fc72a348315e735030241212c31e25cde645c208df66d52b97f08fdae65f10adf7dbc7746cfe73462e1cf67fc53537a77f728a01aadd1f7d9c3bbb544a71805208520d323f8ad0f74114d58f398e9060cd595acdcd617357f93a01e674819cd768d3f7bffe8df58508d247a37e65ec7753ad603f92aa3d0dbcfbcfa9441acdc65d1dec82739e3ca05a0ae52351507f97e42e160d5479681fc8e693a36e5592c14ca792b95e669aa731ff2b407ccd1c1d3939226c0bdc905fa800d0d1f82e93e5b1c79e7399365e3354125744e884b974f246011df797c6cc6b333f42b13c88219d475965afb6ba1a0896b89562181be5d74540177352425ac19c766ed4c250889448acbad515771ea353a353dbf6baf0b977c9a12c06fed3f8ff48f6a82b4b8dee6b9396a35b8eadabab0aada5cd59d3f4ca60dd74ed5dd82ae01c468d78ac1b1f7c5ab69aa16b0b850d79b6a2d96c65fa0627d2cc6a1c91d06faa9724a5d46b115b2868043f1d97237cb123035b1539bac9696300499e44d58451a569e21a6ac97080d3d335a7cdad369da319561b371a4cbc59193f1dac30d00b966525a495f7957945d4cb358e5663eb2512dd3b76d89d13497b7c42037f495e4cff7bc412f9eb92cecf2e20e43becf419ee659029a49d5d38a301fed389304f89eb2c8130a6bfd83c1bcbefdc065a3d1e2b8fa0d8b046b0d34f660ae11625743e2d36bfb9e14006c44665844d80b7458606919c53d27e03c4f0240dfeda7594f6858bda312dd463add3715ef3b71317540b05e4aa780c15bed441ec2422c9efd38921d243c29495cd7ca8806ff6a199c686165e37ec042727e0a8c5121e205f7f8676cda5270b60711d99591153ec55184816de9838fd3ff1c6e0908138f235b58952436e37e994157c3abca33a0ab823a7ab7d9eb75d9504661cf8b777713042f882bfd4d9badaafc7be6824bdb1c72a4fbc5dfe8a86e0f45fbbbc68a1d87869c1ec6fb7cef20a42f2db60f7604f8b24284b3cf0b4a6f7549fbcfad1693a680a9d8fd95eb882f0d81107eb99e41585e0ce2847539dd955d747c30357f0c1913c94844e91f5faf55e84f3a2797d491200c377a2448f14a73a2e32f7fdb21b87d7142128a1bd93dcab432bde06c752f450e318a7692b6c3178923f87d24942a9507d7d0f65d74d0b81240fa57892479c9c1692404f64e00b7c89c004371fc9e0df123f20f54c0c5705a23dc497195639df6f0efed2c86abec7b58cf7912d003cc47995b136d294701ede57b82f65e622239751dd8099f78e39001342ba3c79b9b2fbd0f4551a0a5b8be1226a4044335f4fc85700f3e8bffda40bbafbe48d1328e671044ed333a783b9ddd60cb3dd514711b3812a7395e50768c57f2c63517e6c27b386bc3f594e273ba3a6e53866a2b7082ec407acf0b67f53b8f503912162964183dc9caaff7df5277ee112e49b376284144de0215ad2e2fae4671625dbaf01ba8adfd82ba2eadff515bc7793c8f6933b6b4ef063e6098120376839226946b432c222a67588a932a837e306d3dc92c02eab4ae143b80e0414c8ef8a511e31810b2273ca49095bced0b682da78f7b2febadc85d2614a1de1444ba29110e8ac18d165b91859ffe45dba32caee8b0f41f5ddef19e7968529b8fbe23ffa53001b65dcd2a293a7ece75128c879ec5728165117acfd783f98617cb8edea1e44dba4c00932d4765908b6bc7ff16bd9c50867a88b1fed48a8a2ab4669c595f9f9b6b5a8bbe0deac7dc08746f3f6392b6a6513dfb385f661965ac27e736f350d824d13408fc4a8500c2ab45acb0ded5f80037f1e84f3da1fa054a91dd3b0cfda1bde0fbdfdaab1a5909ecc8cb0d22b1f07aa44c168329deb3b2ad8e8607b76224cebeaf445044403f2285cacd710ae821bdfc5b7f77605bed7b248a0cd6621a983ecd6fbde67d3d8ad1b62bc77c55a7d64efa22b7184ae2dd832164b5e524481a9a5712c0a0f76c82083f33deaaf9ce64bf1ded35102539a020906e4ad0a21d33ce5fc5e2813d6f438b5fed5433fc3fc4232556c5ab2da8128de74d03aece510bce38d3e1d2c19e936f0936ae090f9390bf58021de6479532d72f3fc1e82a9a4635388d8bc61c2d9f67499256d3eed592dd0d306c17e6295151e13292d3e78082f419a2f254a6ea343a3cdbd711944b3e912b9997e3cc6a37dc8bcb89c1619ce50a840d2869edc01342abe419d976cc450329d6b847d0b3f494b4abb749fd5e760d64661666fe6a3c39a0f51564c30d14abf504bbe8a2f64bc2ea10927f8f29020d382857b702d61699a7ee9df63db893fdddd8e6989e8e7ae01fcbf43f24ac3d25799892d4ea100e7d058db6760d54db69209410ef2a7e10766ed04ccc70dd61d8b89413c0359957dc1ff5147a744c1b321226018d44c3f0cd02a3440d1640b4caca06949997e5b0829361184af2ded09a90d271b48c53fdead6e3e094845389529e4712c558fe0da85a05fe652ffdbda9ec087b498d3ab100b51b0159e7fa81b96262eefa7a5c45b9b89a69e9f0123cc3f2206c0e33c28db7528d9abfad62f184ff18f685af0a380c87dd72388dda77ff855a1efc04d2fde3418c79badfa8a527ae46f6f4acfcdeb1db30cc06eba495953546622a75f2a8cd5b8828fed7c11d4f9b72f0d4221be6e655eb8b9975c0cfbe8cbdd9a5abdbc7187e6d9a3c304a8e6abc47e3d4ecd854e19c742589d944525a9856fc6edcf3e9f2164fb5c94688b5ba5be41e352948f9ea8c5c28cf27cfa0e54061215565456476f5c427d458928f9033480d23b7345832d70cbca41e8b479fa0b6b9ba31655b20dfc9a1d5c85b592288aacd6b5548dec83997c8ff1ca743c16c702dd523a34f6ba3a6879ef87e3316b7a6edf119d307b99f6555fc762dbd22b5882ad1580633bdbd49eeb4f47d68d9e8b4714338a4c25b0eb25af7d6b1ffe892b15044e2a4cb5c307bb8f33feb71b4f471b75e66900556ee3b6f5dcf64d004e3857f8baf27ce4a58c9ce6516f2b29f13a1e2a06b53e6944ad9bf97d83aeda146a539e3427625f3e24249219b56b0495329a6ed9b9361ee5a0c83ddbceb587fa279c10fca0aea6e959dc4b5566bbd8b0fef6c675e0ee49a19b7a5ae2599d099ff93d7567320a02e1f4088a7e7b2ed56e5eed351d64fb83d686d580fd05eb1eb911485c97f6abd4b0ff3e67d34581ebefa502b841be4485f0b46c4dad26f07d2e599c116f3a895958e9d214b0b35e78e397e34e74818f65bbe1b506396d8207942909fe14737eb43d66d17dae2d7996187abc6ae1efddd5872d38f1a5f4aa3201b1e1cf204f8627dbcc068993f0b673f0ea8300ac1b5cf44e89e65de65a690e6e198f8710f15186f73ebd5c2f64b7b6e9e2ba12414ad1330b3e8c3bb70e68275ad21f447419e10f19ecf9aa2382ac8790e0d00079ee804eaed86f36a5c43ba998b0ee2a426f1301c2820a2d131343054537090110c15f8e63c455781aeadfb91c777e70fb8a6c70ad5aa977197fce6b613d85fa9908efaede3de07ca2fc9c096419889f8efa7cd89a72bf8fa2a172cc6d4a72491aa34687c46db8f268971e9caa102314f6236fee581c528fe6ee951a29cca46fe6be641cb30bb5b8694ea8ec64bba7725884eff5f89a7cb9e6d4fbe393f51dbc6fd9c1efa2a928b616f2b56670e65346b17eb965878988a4ec37bacd96b2cee4dd21a0b252d19308f6f82ea47444a0e3b9ca7ecf097f2f03de7de8c89398928aa9200d0e2af3dcf8d9fc6b2ac662f051a517688650ddfa245a877e5b35c4b636b89374d7584b2abc6e768e21668bde2bdcb31320c0b9358a71fb1e47b119efc958c6efe61f3bdda966be0a2f85419e26bfeab2952e6652f89afc26626db52fe4e9edb22202cb06f6d1c4acebfcfada24bee2ba740ec488fabeaf5bea7b86552ab51bfe99f6e886607ccbcf6f1c4e3eb713615a667e39820f7f19aabf5de60dda177c711bebfbed1945f8305de5e9b73eed63631bed42aee55de93329015f5a6fa23750b7d4f7da061be8156e61755a27c6b488d42f56da958bf4cb4f2de47195778ab25278e3c7cc4dbd985e41df7c80dbe6961b19f8a51d5cf6cfbe859a6b025beb5ccfc88fe66b7bffb174bba7cee4c60bf0aaf3fff146232f3160dcfbf463c0176b79e87d6bc1730a28af4737e9a72055b3c6e040b4949d1dfd1cd10cd0de7100a1a30ab2219e42b5f8e22dcfbd2f9255ab86fd42fbb25f2b90472edc2d80a605387f8df66d65dad6640b42b52809854c24ad708db0cc6f6959b0b7e6a8d10aad3009ff145f89dc4afedf6b09a0a3378b7f5083b01a349e3bea4e15d07055be469752cb2fdc8d1036883711324a4625ae49c2ed58fd38b0ec1e202f47d9df23d6b027280d69f410e1c8e9617ff265237d6f2937e271ac585577b79d3f36d0cad88d61b1dbb2861fe23566cf299406eb770df2c58b48724a58126339e172b42c7fdb39140b8fdd377a65c207baf0f3ae0f5bca7645a524d849bcb44a517b0142d69d2aa6b5b481c527eef310b78965bc6993a6760d5b36220f5ee8d08d3735118c7b4d4d91c21df99d8614e46fbf13e58db5e8787cedcca77cb1d6100435bee2c126cd92e15c3cce3fba87c6f1d9a4f135faad7db1b8badd3ef877a073b1e558e7d0f784588d1eb3cd95146a649f3b1028b823a51952b3bb8d7f3d0d79535338f1ef010936d156dd47e6b88f3563e1994271585a908961efaf93d2691cffaeae91e1d0b7d4fbb6b9efa79fc00652781680ca62deb1c0ffd2a9b5944dc69f2749f4aa5b10e23a464c1130668d292f639baa6653ae5a913f5abe976ff72b920dfb096125f99ecf974aed6f8ec4b49eae80b140cceb3d2027ddff2c915077405e5685d7dcaf0162416fc04559967fa02bcd8a0ccd53de80c5551bb18fcbd01067ce5d8adcb38b313745420ff19bf153887b5d03b4868f3f56fe4bf31d1fd52931f05fc5761c4a3a0e61fb16118ddf61d59cabb2d98ce10e27c6c556760df42ece6ff7cb279bc835b94a5a5873863e7117d14b2afde903181a8b56b6ca2f4fdb0b3cc5d3a1d9076af686d7b44ac1164396f37a8a166bb621f9359606436db6db3a2fb12e6cc3e9c4086b08aae7d7924cb43565f5c76d9675762a67a40418a02cc8a11341673617306b385d62483d47bef7ad096f6f40412e2dc7d60aedb402cedee6933e1e573f13227667fdb31789a6b4eefa475a02fbff96fa20c5ab205facca4e4e6fc3faf34f40c923ebd7c848299f26210d1f1a7e78bba0faf9f3058148e8e5580894ee9da7200c3fb58feff53c9000c5f9420b2c8f5eb4f13f45a44ae94345f5257551187654f83ac56b26b18c4a3b19eff586627fa85200a07e1e2c62ccfd8d8bcd57839c49746ab21d7ae5c100eff760f72f56f6af1f2035d3594730e6b7593577cce877ef141800be961b9f3336504e0fbe21db7eb3e1c3b698fe4346d9627b145970d47828c7a107df7322a560058740bc14450876f9fd45331c3383cbcc31445623632bd29ba8bfac3281c6c4b89945b4e8c99489a17853ac0dceae6c9d7d56b9b7d183c8ce9965956012c8632d263bd93bf8674c480d62aa8afbb8b959fd8cc075cf2e5095fa1f20a2231cf41c7f3fcf89a7f33d7123f6120b7cbae4642ce88ef6325018cfc9351028f6bb5e8eea90b4c50f711d8ea4e452192cff6f773bc4f771b334e04b31367f4100bd9228ac06724ed707626b70bbe07c984832bad08fd0c69f89b4757396a2d4b723f030c4201b87c75add5074a35b3819abb97799a47740abebca3044d8870bc4a9fca19ec307b80ba50d953aff034e30f3a2b5548a07f598882b0c9a61b7b6d1186f0c4d47c37c9db593d89618a84d8dbeb8930f6d7aae64713951ea428cb2676bcd77a20fe9e4fd09f5bf1867c9a9d7ca3d59ebc5450bf05b5141a521e34accef6d70cd869e1b29a8707c394a73350b2910708eff232febf980aa9cc181ab072105f9da2799f561dc6a209acac7ef88378eaa09e54bee0541340acf488b183d0d874095d402e36331a6dd4fc11960cc28e2f9d359dd73d3b572c71f6347f88420fc7d2dd1c923460ab8e60f328e7fee259e9307f4cad7d608bbf75fba6ebc3b79a66a100982749998ffe90dc7f17fd3c3315af5d293e046cc41e09530f8d8d4df1c9a2ccb0bb38c956cf5f78e622d2e0dc6421ad0189d7f37749080883b8ff7cf303d30b4d50a291e230b24216d0f6743c6ab572c67edfa965fcd332c82c8e3fa43da9e723589d7f2c614bad4a1e13b86dc0f51cef2cf0810269fb0d8b9ae7daffc83eb6bbd0758bb2de41235c13f713b1a23e9cd53e1d2f3335ddeb74f493811f6e520bcec566fd7624821750df0ccfb3efad6592ea44d87625b37be51b20e6a21b62d5b289c939f3b12daeafd9c43307f58222bd3c9bb261c7a967e24b6c41d75e59d0d20be23c95c3cf395177fa07e2b8562b050d40f8323e4652b78ba5c5417604e9a5d4accb0ba72611c4960710f73b501882e25dd63ddfd5a7d7302c9e3720d43782e5f679996dc5a18d17415ecc5b37c24dc283960883270c274a75453e1aba72ea193e8ba55e9dbbe0fa4d9ac198cfd5f2d947c7783c5cd54c6cf3f06fcca768b6da3499faf7596daf19cf11b3fbf87f22e7a3fd14c8872d064616eb5797995534c012274cbe1d872554d36d84ebd256f29a4a98b17b4686ae26e21a3993470e37b023cb2599c79c73676f6b58db93940ef9106aec5765b30b609b5728c8650f94e9464fcfaaa983c025f59bbe21715d5d7819b55c26d04d2362e637e17325e7e6889d01bb19729c77064eb6262d073dd17954e1a061d2547309f69f5120225047271ae731a9a23dcab93d5a70a59806d62dc2ea0de0655deb0ce6c59f6d3fe9d099162eaf7a7ea3b0c89e295f27c185484c8c784574e8644beeb2bdb5ca1424dedf1cc852096e7b55da74aee97430e9df5a192c040c13c4c1507321df87b03863d519111e4a63d7fa6359c8fb9d0354fcfd39b5a514d65be32fa48257ea8a3acee9168b3ca03c15c0bb05fcb5a46c02167a51ada4fda324b18228f93b0be38278b0ae33e9d540039fa833d4539428f4ad4f48e5979e08dd2165a3484ca87fd3f60c3b51649e31675369622ad9ede3ee6a6bc569394c79e377986d2ff23d024cd9a9d2f434402abdc0ce7d725bc13fbb93f9e064a3c9e947448f8f81310e5be55c46dab8bd04102e34fb05e6948059c4eb9f1e28ae90b9e976312feb7b609de2e0832d02c38ad159ce6832cfa489a1e6c22fb3ebfa1c816bcc56dcea9e415f33f824eb9e2a905e80a696285e659b2d1064a0f4283d4cebac06b797dd8e4fd9b60d4a1a01b2dbf6880c98106b9d7aad50382ea430fe3448636794b2624b492889ed2122dcdddaaa49de2081a6b71e0393ad4dce3043d42c9c524aecb713e5acbe41d4c3ee1bacde0ede1261e903d1f3cdf15afb19a5a952274c1b786aff757355cc84cb63377de4049518bc57cf06f5985687d834908587357874bbec9ce77aa1c1c8cb99536b45d513b25a541648ff49ed1f6303681f3cfa6a2068abdd537ebd32a65756cfbd5ef42e6ffd43e86568cfe6ef6c006bb6b9d375a015405a8e61aa49700c63cc2a37db5b14f075efcbcbcdb0a6fb4ddf014dca3da3f4295cb5d65ba28de005616fb794bd9057ebc98f3cf5d17a73b7fbbc8b70cb0725be107e32f976a5e66464a9e75cf3a47175d35dbec770c14462b9fb3d380e05137e87078ccb9a5612bdaa35e736145e2672eae59eed265eac55cc798833f1d9a0dd6c92162d9fd4881eb4acaed65063a0d68a6f329e0238ec1a2429fd59169848e69a285c718ed1872d46d9a7b28436ba335d76e984f28acfea16964f6d35ec7d6a170dd62d5acecb77d986104133b617cd30c66b529c27e37397e5cb25cb931477c5db2893fec50a76f7da09fb3f3c9d7a69a5c4471420763c572aebb61d4969ad46d5ae59b2b50197716a830f90e5d2d0f55ef80f015aa67c710c34b2f5a9ac6397cafc2a16104173434a77d14cad9c9440696a6a5e15820089ccff78679ee9f10cb817d0569553164e1d2bf105e4219803199051fda7c714915cb54db6df624020c698864a668f7e9ce50b70eafdb7d67173d7b73a9b6ec6113afe0e4de2dff96c360c88ef7d848df6d687cbe6558282a739386643a9e53d0c054f9c53495e89410345a63eb2a83dd4da4e268046f3fe2310884ae5f4a9fb4c04dfa492f25af11dbf7420252297d2c301bbbdded88d530e8c25d600ab425032bc58b0c8ffa31b2f774338856154f38a729defeb162c9ca626250fd9339de05d9e60a604027d776bc8d335f0cf4dea74aad5538c1f46534d9bc3eb5574af069ee7391f144a36e958864452a35850743a20ecd66faa07b426db8ea6117e7d9062236e3a61dd64c77c8c77e4ba923456bfa0e1acfff1b520a15fb740f6c33741db1b7e4f73fb9bd30bb1c9c1baf0f4fbb00f9d7007a55ba039ebb2d6137ea03ddf98e6580e8ec5773a4139b8c438a1f5aceb735948a3b8bfcee34538d5dc60bd3df5959b5466f280273ae047af0f0474c8af59e19fe89f15b2520faab736632b1701f6d77f1e47f568ba284667910c125e8776e37fc0d8a657fa230e63cd49d78094289db474a4077622b05bcb62da69094cd2000142e85ab2d457e603931036ab5e5c69e3a90294e47bde83496858b9f2d7c65eae73d3881081136d4d5f7fa17c181284a0a67f2833ce38aaec85680b07d742691e93812bb546d783562acffd7b86d96bb93bc14513076b939cd447ae7d9c568fe998e67e82115a3715908c3371ea9931826259e9c2c4aa35e16437c3ab1d4775c8db222cf64937756e027520296f2768072117360433baf2bac50866a12b8f384e3e37695f922321ca46bb54a9c5d452bd3d0f0057f121ccd27621359c187bcf6837aff1b9f1c984c39605178be14d922c52800282624002c6f33bc9b63924bcabe3ded17658c768514fa9933025947828262f437767129b8de938d4c24399f42f750e683252c837e8669cb18cd02b11d30e1b424359c937d4d214c0b00c1600dad95998feaf54c6a7f5d2953cf061e05c9e4efaa0a40506962e44077cc3f381c606a5c721e7e3bb0d34204aae364d237c1fd243847a6d47f4e5e2d0028b5b89393fd4e9042892b9c56213000cacf9acc9c50f2220412dbd380f74983cb3d6694e4fa39d70dd96a80cf2c787cd41808b0ae08f90161839ee117f3db0dbee208a9271d9daea3d3a1e5b52ca330b1e432e8270e48e3f24e8933e1b5139d276534d8aa451320290e4c2de71a10f955b989d644b10808a8ba3f49665a465e4bba9b3ad78dddf7b03334a85fa97b217f144713b597ce467b5eb7d94cff905d5075be6cea025c10036556b5631b8bf3a25353b5d91f271ab02c3a55adb561e92649d37165595ca36a410f8fb2643fb06c98cf121c854536ad833937a291c2e08a61d28d494bc7e969708ac3d233fee70eaf0b7b0559099c2f7ff3a40dc2e3ec15e0a5d5af7a1bc67138e734f637a473fd1914feca32a535a93f801e73c1c2e75bc7e27caf7c3736c9be9e6e5857dd8b1d03f49e0491f7f72723a3741b293de7077505142eb43f0f8871a521e787bc996c6482ab15c0b864d389c4adff3d264de840028cb2495eb303b0ef8abeab9ebb3b69d5686b46d4511a5e9be4fd9e6847fa5e21093e090a9dc1bf434a8f5944ecf50393eb77ed7b8a59d0ff9939300b2960d2d8cf1e6841b966802df52584425d5c7109be2865fae8543d55fd7e5c1b9acedebdfeeb2d278d64493bec27f134ac1343e349b7920136fab7204a3642277cac0df16cbb577d7c7419e223bf91252439ca4dbc33e989c5aff8577d4d224ce3aaf591101ae8e328551c9df7684531d61680debad6ee4bf51448fa781f77a2cbfbd3de1afe108166437de2fddcc4c8f9107e8bd9328e42c1acc6add260950911ff0c30143ea2249bbb08b809e2ab8ea9710c471798c3ebf80d7737e800dfcc29b4c8afc234fe50f54a762814fd011b8c68379121a036d54466a1d90a292e5121e7b81bed6ecaf656ca0ee71acc3171c5b0d48e74c7927109bfecf836456703048978bb78d5e8679d6851eba4c758f79d2ffef8fdaea9dd5a865e1f0458b455bc1afe89fb1fc0814c736bd4b358dc7dc1ecb818520f4dd17f4431a62257b92014cfab870b844901443aa4d90607efde112656c42abb3eaf7191ab553afe83a62b60434360dfaef9d645525bafbf304b958be780aa8b0a21638bc9de44fb920792dcf034f12f945bb7eef45d4590e140bf34af9f5f6287f82ad55c3b6af65e03f25f4a65a3d0adf1dea751ef814ad7c7db607229208219bd8199fca5f52b8b4db441a2ace89168218b969db8f950ff7c8d2b2967fba7da2a11cd74a39b1b42f97078d306d7e7785a23702b6e1dc459ddf70b49115f242c7f04c1ac471f3bb5d578d3984d53ae21e957b226c012ba5a6fa54bdd376ebe0f8fe9c78eccd1f92efa801696cf0dfbb0793d672099dfbcab41001283a1f3e4f4c9b06685dafd6c3c06f32a70fe9388002c08f00ca50a2f69b4babd31fcb16228cbf0267d1f7269ccbc4d9c7fb139970824d6c62f1fff93d507cbc6f90e6fab064b2688f5c52800a6e8c565d380685019b177abf06c94f338573cc4943ee510cedee9706d02aa4e491ce91c8b8f32db10f8e5e86a5c3d95b68673f7fc63d41380a15d7f2a33f1c926d88725ed24ffe434cc71c2aa0ef32260172b38bf6ff9931504ae8277d030a6ddfba97ef45d7b6f295d4dd7e0be60288566e4aa2317dc71d0cde5f4615dc128f0a0048d34d0983f9ba700a6dcc899bd69e36d9636759f04068c58d70d6e46a2dae1d6bd9c6a529148404d3e25cafa84dbb8904eda152927e6c3df39cec14e30e38a6bcc0dbf930566caa8da8f44848eb3586bf8218dd9d640865d2f79830ab057a30ba5a9765e8f67910c1f677193015ae085d581270ac7abc2888625f29aa2792027794cd72cbb116dcf108f76a615562567f6900db5eb7dd6288fabd7291c4ab27c186319315db822d771dbca6f3536fbaca38256270ba5ea0a808beb45f847e62e73dcd7a423c1f8d1921f65ddfc89656ff48b0df09a038e2c567eec5f17db42f1956c88ec78ae335081f17bc13da6e7df90fd53e861f72eb1cce8fd05d1e4db4826bc590332c7011c68970aa8582ed65a3690012698af5adeca561e40e346118f02868c65d23c045a5a639a772c86ee648534e0c024e9a494cf62ff5abaf41361bb140e1247c7165c0dac76ac6132d6a0014b2d536c99d9d2c32dffbe9b41c8ffe9bf9617cf3ecb5732c97736c5e1b10ba7c22f74a5ed848937cffa9fd333d377d7f501e333baa3d21983c87be89c4c0edff7beeb9dd844fecce12d2868f126b6c102201c98385c903a2bdb094c237e087417c437d5db4feb74e5dc7c268dcbe718f951977645eb9ef4ae3e431e76e27492174c1aa291048dd9cadb8a29fe3e1e7926ed3c9c60a5a805009a687f2da3a45f6b6e76ce451a5f71c3f8671399e2036a3b6526a767fa6eafbc517b07d2d64ce77c4d63ca88033bc282968f1a6f86d7fca16e7abbf1e6a5612aa85c784e1bca0eab9d779b396c61fc355456ab152ebc6170610ce6fbf8e352db443ef762f6d08e827095f873519beb8c30c6754d933e5abd28b1beaa78da7dfc2bb0af0ea8b32e43aea0fc6585512efea0e51340c2946b5e0b9c9db0b23466aadb32cb702a80e76bd941c833cd7b2c49ec908b049300cc363a2bcd4369d7f784823df136108181b12e3383713d74b2807e4ef48e665bdd76eb183b32ad5e3bab64c2d3fe637418bb21def70bf421bcdd519a440076135e26cecf43dccaea5c631007eb96be2008b50f9320a7c92a169025f0755ae9a8a368aee680936f15b86ab26001cdbce8fef89cd67c071da7737eb989aa7071a08abbac97a5f2251f9564581e565ae0a0eeda8f1328eb00c7562cac648874d78f72ede715e357177618114b7e8c7c9761ad0883f128f1f5a7d9b1563411fed548c888f7a5cdb9c06658687d5558159651855ab26bd78432d8376fef323df91bad90e175418ef3aa68590147c4a3a07f463642dd0fb5f8aba6461de93a4b95e0380f83a4e14534a15b6017adeae764157c80a2f337fb876d1d9331a05b01d554526086176a24a9339890b65bed08cbf53fbb01b1b4ba0525c37788b6bb4d112d91fc3b8e0a4a611ff4011a494ac62d0169eb9884de0152b85630c9507633ad7c3be55659c11a87fa6a1f4539c149b628a6849aaa30059bb2c2e3b265ccf27676caa2fc6cf7770c823f8af7f135d752abda2b454d41523a7413f9d75cad6f11ac45200bbdd743109069c9f2d94cbb38e8fe2999cba5e07420b9c5e14b413fd7643c831689b47e7cfd1fa7b29cc1d4c1cd37dc7b40dbf5445d6e1fb1202e86e47a52a25fe8b764a022f84ac4a7e218a9796fceb80302c31169085e7ad32c29c51e2f50ee8adb2f27508414c5635818e1ec3949ccff94873ccc932479e2f59425a1534fdd3b7a48f5f4ef5e40c907d8bd71fc07f8ea1d31cdc4a03b1644af680e0e4856b477c3170e06e6ab2ded8113709208aed77dc6498c4b57565a1fd96f3015539cdb75ad4cafc60d072e6ab1dbf192ca67b2757f62235c814f1458abd93add717dac57ce338403affe88384141acd1b269ff2aca6ffeecec1988db8092bee5e30884ab1fff9681c5c04d48a446e3d4885a36b6c2547ccca48d6771e854bffd425a7465784f95c263d6a96500187443d0a52e8eac62cf7efc75e881faeb45c9efd4fa94d50d48bb4d294c53087558f095989b6a8387860b29757505755fbe1a94c70b829223ced08c025279bb6c1bfca41bb204b95edb6d17e6bd8e2a17eb3eacf7b5f8a206294003e6665ac01f3b7344cb35ba556805638e03278f48687ab0ca72e852aa7e0f5590b750370afc23439ae22c9a04da2eacb9ca6a84312f5e35aefd44d675b6d8cdaebada77260b9682c4fe9bb980ed08ec4a6046116dfccfe345d8eae37ba8b65ec3d956a2205d0521256c3d4f2071221e001ba5c500f29eac853fdea1e6d6458e3a367aee9e2d77c0922e6b260b131c7bd393f40728e91088db5759b1a26f3276bfe71ca3c4507152ccc3b7c4a1c1847a62b8b5fe110631ce230703aea1e31d27caf96f46a050a300f2ebd497269f646735f5e74cd3b2dfec0f484ced8e738f86009dc3436f8115693d9238efcc4f2130629e574e2b84981b5c479f30b7e919b1b0861bf68d308e5f3cfe27f3432d35d80ef74659760760719d6fea105df3d6995dcd602bdc75142fc2b26d73422bfd135528fecf3ce559af0c3fb09cea2873f1ff45c58eca36a0f23632a5f2dec37ba98b64ce403ca428364fd18bb72c0ede7a6f68e928676ac58ce7225fe9f666a6781dce590fc6291b9ada22299d63bfbfd276ad48ad671dd68dcfe165951eab413992ed8f468cf1654537bad963aefa8e674b8b955f5b290f599b40f007f6ed753936b038b1ca0fc739ee81e033325fa2de6009e87cabbc24cfa58f3e1de26cd15934b30b0a1abeef608e01c5245648d6fe0fd9c79ea63506fea48c741860a8a9043895766008f22283c0b4de0d4be515cd6bad39bb071b45844a0fd7e95cf914dbecd7094bfb980c90ef82f0cb7e66ffebaee57d0a1ee4f1ea456a240cdd757111d30a0559d4c8dca1d2ef54490ef2fe084aa68dd5f61e71bdb149a7da7f66014aa01fd1af55bb1adc9656fc3071059857d6d9938ca951201642925edb2364c25df7d30f47426a14cf200d9873f80dcbad6144df5cddaf2d8b07c5dc3d1444a5d24f3116452d67ea1c17ba40b1df8334405daf49284aaf93e2dc8465712fb8214d99bbf9aca1969b5899e286bde92896b29a48aa38a441b0ad11beaeabc8c4a95ac237727803c6a0a7770018755a395511302579b10e266784cea0ae5dd5400a8723e3682a5de5c1638ee4a055ae1716ac84bc58163ad3c9127742b0bd7bb668d21461daf94b56cb741a19e5ba54815224c941fbd63c7de7a7e996533ef6d6f9c4086cfb599b2069a2846ef4566cc65a99875dad04f7751947b5d53f54aa5df1e1e7324b9945ff0ac5d22fd5054627d8798210e38b98898873ba34c7dae476dd1f63c6c863787bcc53454ef5641dd977e9827aae80fd5ed7f74488d379c7bd6c7bddd27802b986804356977d0cf22b7bafa5686a261195eaece8124901da700c9a84b1f2392880465a1a16950dba7afa3d4f2dbe2998c006b6da59a9c7769ac883e4fd858d6ebf371a1d94ac4663acbe83ecd13037df5edc4c615169bb371403e976803bc7b18d3893ea6f4fe10da3d6b7423f862905d648536241ffebd79c9c17fab90dccb01f7f3a70eb521d1b7f721be6088d8b24d65f1147bd6ac0210e00f45e5367b35d790c181700c2aba107a496152d7981329783468439641f63b82280d361b8b81a262b4ceea639c7a148a0f204557b7694e773f24c3ee2ca5821d8917353e8e389ccf8a13e3ff6220466cc17e5c29879e54c7579973ddb39e50dd25795e1916844a50e228b7e60733d79dc0e43f736f3ecdfb4a392103686851fced5946585fb687b1790e5f3e0d5d9da3aa45076355c17c11b83f87aca9e00d240c32fa13208320057db18587748143f01eadf96d931cce8cd59e1704de0b9411af6ce67a0149c6b5a08ffded31cbbdd4af053337ac1677a94276a4eb7574f54d932d12a915a174f78d96b65980a13becb755906aa7f971fe0b4c4367f505524a4d199d9e47c18971f80d48de8bae3b3d91adae963c5b449540304ac40f745509868d09c69103cd3881e1d49f0684e4f7de7443d12b0912ef425c263d8c38446a2671f6c907cf4efffc5ed896727400b9f8466e25c96eaa533f19a6d5b239cf9815a01e866fe4b37bffb33520f644fd526e1c2ab02d8d51f2f297bb0e61c910ad1399ad5a7d054ede34ba95f1b3f84f8663f3631f3bf83bdc892ab007aa967cbfe12e731fc9f6fe68634691915433a36ae85e48a8f81e737be0a136191ddca448ca537a9ecd09006a95c52a0839b05e19572d796738c0f58c3c2696d41b76fcbf527a0b2885b8cbdbee93d9abc0fa2c8f099ee78f287d0f1d0e503add32616b8f60811241ad68af1283a6fce3a29367feb790885c3ddac055bbf4ad830f621927b10fcba508d3818264f8384797477e616ab4e08478572f56ae0f166951903ac731e3301813f33732a0879273f0de891089ee23b7b30a542f62d0f6db40816733c7ef260efa6db3d91d56382e76359855656dc34e28ced381409e158d588b8326decf31e17e9c3cb566218a67f7417f8c8e778ce4b15875b472befcc8a5dbe4dc32bd2029a1c90a6501b96a19c69795042bf3b225246a25716161324876ec3e0f15131b74e08774303ab65b12f90212d962c14d5592402016bd2d9db87771e591968f5d6b81d32dcfc898ae260b487758d897fe468aaa1c47f4dc1cec923390e153533dd0d99fc7a69c02e0882db1b4d03b6bb06fa4fbff7f15986db5532f4255b23b640954b26082505c6032b1ba09a286e2feb8efa78ae2b383b37916e682121da7b560437daaf15ccb1d1dc641f0c2394186931335a1c58c63036a16c2b7291bf54d6f05743d0cf696deae8ce79b4004b863c8843bef4cfbaaf3ae7ed46411297d6ad4a96b75877a636ccb3c5b4bdf97ae2ebe87ecaa873e513881dca3c5fa49a5842b75005af7a5a005a769c523d756c31d563077b4de942c3557323ba61902a5a91c67c5b4488b2f019bb0af615077d38bc910af0339bdf4bfaa4a408151441a6404c3e333e8470fac8cf7ee73139de19c5421aeeb95017ecceb20eb0bb1a02ab0ba8e425714c1f5373b4132922f367ad3b6363a57da75aaf9bb9e6ded45fb176dda33fe3fd39202b41da3a274e797f467ed2e1c682e81615bc32979994ac2b38eb8638bb51dab10673c508b0ff70cf6fb4ead239341e9dc0d0a94acfabb854cb8ffe7f01e2b0cdd3de9c74119c2136881198b305f0ccfc923731106e3a140057c31b89349d96e904a662fcb37d7dc4244a20dc901b7e0d8343813c736e1c186923f527b616682a964255a604403618711d36ecfb5c5c0c0dbecc217f5f17cb578f468a062861057a646a8da2081c8205a1711a4bee02a0148d808413eff1c7ce6125545bf78cbfb5a6f84957dd3352bd7570eda355ae54ef148f33472a3b762f682ca48f6d15f3047aefb996e2ad06042b9b9a539c40ce75b34c8a8263c7a47b3d150f00cfbf3102976a14ed620a788685406876489051e22567a92ef3c6380d3f7bb0cb8fad91dc4d194de543b7067e609f971ac6146a41228c3a1f04e071b1e96d9f29fa572f650bf0f44127f83c72fc45cf4aeb9db109ad4d98650a195d533f8f770ee7ce23da4c125ff0308290e9626896743794675caf75d31ed528a245d26dcfdb95d2c3ab6e68fe33871b6ac27e2441cda433fc1cd4c1fa38c4cc1b6eaad2e117f9b7ddf4f8e3fd99e527190a5b6dab9d7b3bf78b9df293c4967b6fc45684bc56c115a15145b68d380495b1054e62ad97273dd8ac79f53058d889a69b0dc93c11cdfddb2aa3e9a2281ab8b671800abbe3c5f2f53fd3dd98598640f311d59f5893bda0be35640cc70ee29ababf39a33c18ba875b3974e658eea702a33db36f017eba485506ed6926b5d3489442debee4486ee7cce006522db23a785d01d5bd82319e666978d826c45ba226771766f2a5f0f50741ca4d030b8f37624a96f0820df92c86eb47213ae1779e1e2ca97ed7e7f650815a2e86c5eda0912da84b93c38e19b724331b13c4891b1566b2ce3b95c96cf8e8ecb1dff4459e96efa0294fe15e316b01791bf4e2f5745ddb9eb88fce499eedd2310b9ef410505e1a59034a6d6eae2a3904f00cba85b78ee0cb2fe3d48ed6782a6f65d45880e1d756827195264102a0d928aae2e845beebd1a2e28f30ae8858c11aac6778af78523bec557a4d9e2ef94b3d245464c1c5a583b629be750dcc777d973e00f4fd00eefbfe946141221d7beea8a0059f38a3a4ea3ff7e4200ab16ee38e41128a7d2c02d23e92281bc4573df601d627b88bf721aeeae0fc2bf17b54f323231ccd2afa9cd160766ebd5907fba8232665ec7336b389cfd17592f6b1a55f322d9b69e0eb1e0fc94434f969357e9e7e50c371dc2737798b0e149b7a0cb0a02aa9081a135b74ab65a0b9f4438a53b11e16ab8ac3801e23d8310bf8e2804f8182924d9ff6b467374e0fee33a493d7f99a9610a61142485c8ce30f57005365ddbda961027c398c1af71f2696f2ede530a7dc9707f883172763bdae13287d931360ff0cf25ebd239bc7ba372883adebf8c6d0b7c6509e0e523c54d4e7b687550bae85748e179e1aba8705613eb5d2aff88e525aca39f7c7cdc65c34d88d0de4fe1e1aef7dda3a7c4b9649feb4c55ae2a90d36dc1187dc67689caa9313ccae78605b9ff7a1d406c72cb9f0c2f85ecb4ca0ee19cbbdf1d42bb1aae6f8392dbb929215afb4c53da62e92048323efdc9565a801ee7fa6e33df42e1f2fd01e8ec6116a61d19629c970ad19a32e3550d9a5714eb117ee512b4addbe2f0f745251219e5aaaed9975346f7ebcb77420869b3ce62494e28214216b9f18b3316cdaeb02eed90a1d8003745c86223c9de3bc79578d20f5565673d7ca984f5667817dd70b486c94be433997a99f449f9e23f552176f2eaf9273542e93e529ca7a4cc1ada2d4f410cd75bc446b0a2f57751ac93160265815e6f7a9c98c15867dd88971d31e9cfd571cb585c9c3b1f3769c83250db816d41f0fae9fdd0583cfea6383454138b81802947c60bfbde2a0f75e39cffba3015595430847e12681db9567dd6293bc56f616a36f13a34047840933e9702cabd36722b47b6bf2d83bed1e172ee7a2ecde42e8a7d11682631234c34643a9cde9c2bad430aebcac3803b8b1a097f85810d412215b24cf5444028a86632990f153c1b5f9050785aeda35e58910bd1949ae1b86f42108aea6ed2f95eb775524ba1464a37083c35d32f8841a45123b3b13b74450ca5226d0d34407e626ee73da5438edac116de795038602477eda18e879bff192272c8d0c22849ba348ff423c1b8b95980dd596200be28e298aa6feffc3aa568914233be0f7df0ac89d40c97e37d64296d841a73e7797d168231f07caee278c1991da3fc2aa97d925d2833466cd70ec245524aa2695e8a01b39ba195f2df68162d5f6e2d018c252a6e1ee51e26c0e69c825395afbd560bd1bca6adad640f2651814b1ca15b6f7361c41180928de1139c3649a820bcc471cd5bbdbb7c9bcf634893b362b98688bf3b5a62904b550e7f54187f7b79bb7aa713516b0a9826474d4b093ff380e8f9c32fae2781d250b37832e3e267bc64408851bbfce4e7ad758a8a1b80ae11c142c8b1de9ae4a2127452c13a1b2110c39613707b65343a75ccf0be1833059b5b20278956e78aac67259d9ae781485596316dbe3236bd6a6a6fac927e5e7074f815dcf48734cdbc30668d6938512b7751aab31de4dfe0755a089840bd71ca4a654b23e11c1a47a6b38cc70322315e734799ca08f1d268a53a0956ce86f898845b43a26d606e815a5a13648b57d1cf4538fda36c5fa1517a3f402c49f64934811f20e14e11bfafc89379d8610d046e7a8a359d1851bf991e11f6a2a3135eec229d49e4a32e1feb30b6fc6cc45f95adfacd1efbd7cc76f8d26fd8cc6ff890d927eef70bac8218c0adcf27ff2bcb45c249443c03511009a89b65a60450e0429903ad8157ea1b091acead724e8ca871a0ae67677ec2f1c2ce36def3cb59b5c6c75d62c51a6c1137dadec15b7ddab7da6124544247cbde94ad04b75017025f300002b0f56d4bf9b43e77c6eac942f7fa4cee9bfd3e72d409430a024aeecc06d0e3b34a93f49b16e4e1183648f05f334ec5d53ab1d7fedb1dde46bc8cc5edce57f6051befdd7d0c607e006ef5f44928cb3a3b79f4713f577b6522446f0065e529df5e0cc34eddf9c8711e3497b275bdc59adabc1aae7342056836727d1ada4b952073530d2292f97d3ce0a3a2c39a44bc9dd395458646836bcd6b015e403a13174011560969eb602783fce25e3933d1a3b09d9c6836dd2acd300bf4b46aabc34b543f3246dd56822c3cff272841eceef345df554293f0db7c0f5e4cc40a9c6950664730eff84cef2aaf74e90a99b3904bb5d98fc03c2a9f92a89b447adcb7b749b49936ea4837073b8ae886f3bdb39205a02c04155e99a5717f8c380408873ea5156253034d003c37174db5623f4dd8defe1fd99d91df3a391074f66d0f3e7933d35d02b600eef05b8bd12b09bcf03cd6a69f770bebcd7bd007b352face604936ced3e043ab0a1f8adb18389c166537f16a597e8bfb35095e46ef202f70578927331435dc72cc7c7e4efd5155644db4b91f2bf0437dabcfdcc18ab6b14a068e5e3b4afa872e6a170c28a6f6b452286c9f463940b67f3ec75306b2b938041f0fea15bb713070bcccbe9a959699f787c50aec1fb19367d0489b9304f113d23d876735e89c35b0fc2bb8b212f9430180a0e3b15fd29a338c0807cebe1fd9ff858787fa851c7fcbe608749bf730fd44c1bff627dc497b3349a67272fa257c8fa195a0739ced31932e02bda63953366c4fe2e3ae5bf350baec04decf841ebb687a87e4dcf18ef2f6de611f3c77d2f88f26ca92b30111b0018b28c109ac448248fed37ac808fef474b5870c3aacc11ad9fd9232df0bf1bbe590fa21c32111ca93ed8697e332e6bf205cd5c67ec74ffa47b1a65ed8ef1abb4246705575af93942d129a55779054deacc3209ed131edca2095f761df39ffdc0773f006bc285127a06e8ba19cc0d6ca45928c847d1e6cf5e544eb82731a8a81849ec86f9006fe80438d20f41ab17fa14f45a4092ddc596fe3e552b84b207c80bf8aaf8171c7179db2e7d2cbbbd289d75d92aba4db9b35cb0f78dfa5ce09fd380350a0ad68f6f78499241934f01606f3fd5afbd5d428d9c59c389454808b20636a849fe85d3a4ef1727449565b1ece2fd8e9586b320f4493b93a5058fe28dedc32b630fc84d1af79642447c42c1a1724d936628ace668db46dfea7dcd2139e2daa1d9a2ddc27bf63ffbb65d38845c6b01af7cb9d07b102794fe90162ed8c373874da4dcaabd4b4f2db214844672d397e6d9e1fef015c48eedf2503e4edfc49af299701f801ffe7169c9d0746956b89a8ebf04a53c1a1e834810d3d1ae413078b7382c39152878ee2a292e998ac77b8b4b27baa16c10911ca37a82c09134f915a4ace9d4144fa285ac9bd234ffe63cca3dfadbd0088df3e72988c309d68332c3b21f9cd8b957daf2f8c5c78e4bba0b4306df049f0b7cc935aca5e2713ceb2806d75ed3e3611664bac4ea805764e3de3d4cc9c2b6bffe291c9734296f360d701c42cfcd7f186485ee604eb70e38968ac0178f89f6c152f8b0e3d2932661c7dc6d5759e19cf0ce6b6d83120fe03bd5bc5e0acd13998ffe2ecd6f42bed29835575acafdf93ce1b4b499a52555b6d95534111dcd78f484d4504f98c9f156e5405d7314718b36c903aed5959a54ddaaec595e8377b5a5b28391237483658522e7fa7d49fb1df00f0436a2fc5a07badf4e797aa7fb9df2e13b543da3f33d11af8b7c81e703b08bad26ee9b65f7e45d9fab5953467de4bc0000304ea32fd63bf7561bad5da3ab927f9132a38ea91c2739b97b00ab410ef4809fd790e8d40bc2cd3d415aa73a5ebd3a9eab91eb90d13166c21caed87521a998a9dfe53de6cd89cc589a45e782f760d546c65697812fa83e14dc325544df0a0e12a6a80e383928511b8ac6acf5350e0ce671dc92540c60d3e41ebbd9518b0c384aa79613782598e3fb62fb3cd6d926a7356b32a697ce90481a15e70b8b09692b4e670106e126ab94015bd39cff9773885d94f68c7aeb11e3e4a4c0ce63cfc5c77993a5e9430fb03d2245fc76fd8332f8b916cd8aa22e614ea3c7b1b7ed2933ae4025a705c3e24777a32a267fff21fab94de4c243786325a7daf1769e4ab517dc09f7e6790c2949a48c81834c91c938b0906ffcb530bed08bd32ed35e1a918087a360d6fb00b5fdee175eea6f99061d308a66feccbe5076a6a5eef81d822ce8cbaaa897f8bcd2bc1023f0080d66cd193a75829b4fb3831051df5a991ac29d7892b02fbb893a367f6ff41fa2d428ae61548e6fb5d124013d77c4bb024b693e606425f1790adb8159be36378c576cff075acf209022d958d67df829b5fed29a343a84f7b207d11329b349be383ce59d347c9cdd5e8ed72aa190ebd405b399fa47950fd062ddaedcd59141086719daeb6602c56af2664324843d79ab4b332d0c97410edb882db122da0b2a298872a2ed531c5cad438dba677b488becdd423a8b35490c1174d87578a797734c5409dc96674108120fb070bf5aa55b640fbdf74f64224c646471d228438906bb1933faf80c08fe4ba68f7c46f9a56098c96694491b2e840f02409b2b26ea9d96f6e9562367753fb4b9533aa489bfc2650e22223fc1b3227a44fc6d5564446c2b75f22cde5ef3ff128b2994a7ad3c6970bdabb21af1fcdbb106b88cb28255a80c592276a2381dbb3aa3cd8c6a1e3ed299eaa2b3cd6e5d1c8b52d32f24747f129986f97b47dae535c1cf731b5066c4f16c983035d9ee2afba870994021b7e4fac794799784c08fc0c846604b062b64260df9dba9405a3dd19cde4dd994122c8b10544bef85cea29d41f4e4dbfc2a37a69d90b34f7ef5d33ed8a7538d37013f5be123f3c63aec9d9220042d53b9a6b92ef22771332e17e74470e7f46594df4c6a58cce174dafa297600b534f23a27cf177a277ac9610507faeded867dc93193327c811e8b0f8b6ceb2d10a05e69b1ee50457eee01d396075e2f702ef2e3d0b56ce971268f517e587d8b0e1b32b788f623da66048f404959515751c9daaa97714d56343183c5c3589ec9bb1def47d0a2f73fa5e18aa155e9c34b9565f12bceeaa02c2d0731493b0e4dd8975f7cfb97863a7085391e576f5d7a3dbdfdaa6adababb07c2f63a3741a4772189fb07810ae95b70f91634179ec347f6a554951640083e89acbcc30bbd7f9eaa7423984166904766bdf78f8286c5ae09f8b911bb08e4fc5aa454fe70ac4c3124cb8c10b9860442a6187600f1fb4b2e6b8f907302aad872a040b8bc2a49be0a875c2597c845599b298a51d680f4f2c837e2fb6766cc8698a488f2345e3ecf27d41a77ed58bb66c9cfaddb84e685acb51819fe1f31a141c68b2525ad3ad2de7cf954d09cbbf5b7a0b536e8f8aefc5c9eaecf10b67f983d41a11303428de481cd1536f54d737f4280e59b5694e7ac538496f578261817ec9b148f29953ed9acb06684396a60c6331e822aa22abbca2f5785f688a22229a2e668b34da0108ba08aa13e6a80b113b53c4365f1d71eec584d454198a61d735a410a20bedb8eae9c4b0d63db25772122da4b90e57dd13258fe3bb0dc08d0658bf359d970c404ce855ff3fbc3bd6076b2dc88173e4d2f26eb34d73a5e5aa925625423f3cce22aa684a552e353a2c4bf3f7bfe6df0764fd2d63abac54d6d883cc442e9a2d23fce0052a3e3e1758d82b5f89ffd026c4908546e9e2c19768b417f68f1a136f370d1b4e272da11239c639fde58449432aecc2b9a871ded0dc5236465ad37613566abd5de85e17be71156e87c80b1b65ebbc91acd3775a3aec586cf2016d961f4df4c80dad92c8e62bb2fbf5ab60c5da962bd1d3e8f121431cd1598e711725ccadba684ce36cb857b38cfd2361150cb73ac92e2205db1af23e18e1f61de21cfd4e11f7e7274ea9a70c035b81a68c31a07d086d4b080c9ef9c8b915e28a328764ffd5034b3e34e68bbe4da4be78600d64ea24049e9c93d54cff4106ca3e04172c44e8572f55fb328d5725d2555652b2ed3fc345257bfed504474c5a9f50a0b307aa76691ae1873ccfc72ba5cbbf8dd52aed43daf8ba8cb20637aa05ff1d126e7ead774db972a2688b69cfeea66288ff287c03140b7df54bfe18dfa3ab03807d34fb749993a103e55f577a25708bda3ae7d5ed426aa93cbd3864d6cd4b490427400280b563b14b90fa21b677beff39ad7f21647c6f9533d1d3c1c2930c4c225c4888caaf1e3a7a6d21793158ac2b88966f837072ec8b580b737fbf4838f92bd138a000b1b1858f3142dc65fb6b60b9fe8e06d6f98d73b288eea0ad39e7dc14b9563f682896adee511d65dec699d7424fc5e465c56f77814fe6b7cf4c82de187ec30a82ae7b7d403b29d2a4b283b96551aec0e879ee7506f81cc1d7d7d7d74be69ba772725abf1b86235edc65a78dbfa713061c68bb4c62a275f244dd4ba29c29bf5f623cd6cb80b1670a27dd0f3ad037ddb475285fb0f0209f5dd907b2026df9167f60def543c3c3b75bcb786f0091168cfec1c2d734ac9a0a477440fe10c5fc966646eab44842dcae96bc11e2166a4ae425049d746f52dc0d49bfe5b91e3204e86bb4f7d322da03d9470746425d3e1394472906106df7f281fe561c9463fe06da4692c7899e299ce5048a6067c33debb7a64982d74dcdec936fa257c00938c085db10abe0f6343facb323a46432efd4ca4e9957b838c84aa107a05d9e36c960d968853e6dd4bb8dcf5e4c4a34e053cfc09ce2fe4871ad560c3c3267c5d1c892689480301f0bc900f05ad8f30908397b43eb876d40c658fe8f9f317d38b227cf6898450ef488a743b6ddbbcebdf8e72149a5ad28e1ea4bf2c9e3c716e442761e64a8db883982ed934e90fed8b8703371959645d63ee51ce2576586fbf7bd9940b1e886cbcb0b80cfefa6569d877fb287c1140a748bc5e68c28d4f9cdfafc74634dd85a4db7377e1a3f30484e4bbe01e679e362bbf9d75abc68bca1508a7659159037ad6681f99c278a483cb887218f887c01c5b820fa74b68717e63529cb3eb3a8434cda28e8f748464e2f171b231eedc8c9104a811201bfe22f2e11b969bf91e490f54cc89512a285b8b45fcc985367b11e6a80ae3a1eb42b8810a4c3710febc1e9b3020f700edb34e1ee301214017ceaa1dad4a2b101a9c02de2ab3f9ace6524b5df108b86a4199cae5c095c8514c9f4235156e6c855b70dbc055fed79faa8f70bafa654c5a9dc3a46d4e8132619239fa0223c9d131df22f45d10bacdee0320568541a11f8ecd8a783e53824f77529aa4e949307184c53cb3a26064737e3ccd17ee938dbacbb4d704e526c7950491d7efc04af0348dca808c5068f87f524211c52daf2236d64cb157f535c4f1eb41d5dfada91e45b4d478b310ed014501ce496475000e5cf7eeea2c4fbd9a7189c73e0d1232a4edbb0b3934b699ac1f205216298d48f87319c44fbb1c073b5ac5ac954be2dd386f50ce8cc3962a87d9791c12698f06bc8091d8cb9fe46e2721e73cb8931f397378bae50e80d704bec14e7981c0c08bd3b5c47bda48f88f6590504f01988faca060fc3b2e7b94d34a23fb8aeceaf28ace9d1f1e0e43759e0c7cd7f684a5cf9fd9b3b1e5c510ecfd140ff333591f66df8c3899d746ee93d9bea837d544d850be8b1f8e5fcc2f3f393dc6e92aa380c8b285b0de747c3914d9ae65d294fc2dee2f1fcd9aa4ebe25ad941e9c86d1d680fd65e890a9cc836da65427c62a653ea8183ead6b40217dbc1991e993f4719232220c1a17ae88c80e699f679235ed8c5f06476ef628f86827cba359c5f5546b4b84aa6bc5849c7ae8c6bbbf9a3d24c3aaa211dad93c04c4d8e0800f569712f0a347adb05b31c75b0688e6d18bc0d5d6142e6a5230af21a85b682b3cfc97fe60d146ba3c597b7a4641620bb07a68504ee56aaad456d35b5bc38ddcefe9b3157798221b4d95f57d8eb6fa7d3ffe344e64f5e2f7aba5c8083add5a055e7b1d46f99571102ae9fa04e764e9505b97d1d684010922dc06a94f9c0a218b971fa1f9d6718a8cd48dd01a3081899cbc0c89f08a4f41bf1e6b772665cf0936444d8a60691cb8ee83cf3906770126f8d313d9b1e1844f2c978ca6d89fc21913c8d09e96dee4f3f590fbf3b51b77de84a676a7353907a071f1aaa84bb73a2a4256985e7464323df18cd6843b3f364d99cc612ce735607cb3f523189ff28e34f0c30899a78fd8296189b2fbb8f0f4cb0212b321ce83e60fd11bafd543443f811a54edc38a06f16773d967b958ed7fc422917dcbfc0b80ec73dab4e160557eb00306efc0120fe85af70a1898f05ed391f14bfff400a431cd87e5b6d5316ac595a6f6a04dba1d7aeb8842f75300573d1ba005b0c4c5455afa7e0e948ddd581d2d232f441fe3c1376540ca34b7a61f6f17cf4b4454430fa38e220834e071ae2c774afd816224b6f86016ec126e4b33580c9209b8c7bae7d30d316ab5af1e8cc718522ba0419a63a625593d21cd809bfcd7afd8b27aad1e967a020af907adab1e302371e312a3ed6464b683f3ab395983956a966c19f47f55349bb839917119a3c75520de4230cc6a9c5c1181187091ea1f402fbfdf1116cec79ba67d200aba1c37daf32593ed8b09865839957aa279bd30c4285876d66b63f73304bc5bcd08eb8faeb9c3077c8b544f509404a9ac076cbbe91a56325146dfad7a5f53564ffd47ace8ec10acfec9b3f0d801da1dad6fb25dfacf8c83a7a60bd29fdd1c6dd0bfe60b9886f219a27d3e29b1f1d6cc1fb411ac965f87bd9589e02506639b4ea257f75afe7a621783c6f5e4ec5e532f2be6e00bc059c8cc05e4e11f6387ce42bca7c5d0c33fd3d1cb745104689b3e7a7a1ae08cb037460fc5c819392166f3f6093d4cc0a924668e946de0f9343054c142a8b596421702bc5f415e9d72cbb40aa0c80252df42bbbee6c596b0fd44eb9850cfd2901ba8e07f421f786b0a7a2f542fe5dd29f0a0afb9504d8797c77aad84f3fb3389902a6c552b07f6c37d8331c11df0c951f7f067d3f917a33bf95fe4251fce68d67475b3fd7665183ddfe0a587cc59c4b1a9212ede12684098212886175027579e6e6857b9c99093f3f7c1e2914c4485dc13f63eb934c9c7d2677212780c1469f4d7c22043362516c9ef8e8e4d38bb909b2c18aa40b6fde8c15f692c107e075047f9d51f5514f03808ae3efbab732a449161c6fb3f61ad287208e5e13eea859c93a88bfac6e71cf66d31c1fb61d4644f83d977f5c6bea4871f01695ad608e810011a6d87eddb9665220e08a9b7774f6a02308ec942775ae5c6802ff8ee8a157814f7a0be9c0887baf3e8ba3e77accd0d9c2ae7d25c7f357b6f9a11a40c155e9b18fd04b5a2934cde81f08c06f9fe884f0faf2447b8581387c7fa0b89a8944e72f1165ec75dd630c794acfd9ec8a6a2d953dc7253893f9a1aed702641a08daca302cf64c91a3ea99647f1d9ce922109ac1a17ec5693ce1cf11b28287c54680bd13878a653c34a6fa4e146fc59b0f53e63fa886194db0eb987f7aaf59beb6cbb11d0cf8478b435f195083b3d75d2ac579faaa394c000e7a593efa4c7ffda840f504a075da2e2cbf7b4a29b2911021b01440dbc1ae44db3c82b7c1faf0edbf10a75c3462914e28cfa71cbfcda929629f54343583ea9db151fb4eb1214b9a198d7d8d57989108d91714c3478ffaaf964409738724562a1ff26a487d4fa29f2774d40cc97c27528e3b78a00d30446fdd4b9aeab72b58bbefb4c3c6068220bd5a5886c8a61aceeb03e0912ade3507fd4b382f76531382a63f01b1910ab3dee343847ec18020af668846f1c9101c9dbba048c198afa71b122534cc391761dbd25755293f3bf8b5588ac548e85c90a1b16091f8b3bd78e520e15f1e5d8209f86fddc8cad7d48944df89f86a858331ec16b540ca54c6bb5cdf758c793620c072dc6714a616d657fc861b2247cb1a46aaac4747a0368944c225ab679e39e4dd2c270359b8199b474f06e89440293b077b37232f97aa144c59f9533ac783e4fdb4e5bf37d3aee61e990bf69991e4471a54942ea327d9e33bc3d2318edd9d257fa2d2ea6daf0b96383191ee29a98b9374515e3c0c753034be6a7245dde8c8c3999df677b3dd8043ed6abad0c69442ab6cfd08f52803f795f13c47eafbd2e7f21bea9ffea342759ae9ce5577247c9ea833e388de72262d9e6602afdd858e6e4a8e0f711b7faecfb47f271baf535731cbb5ffa71fe07a68bb44739eb708fb8b3c4ec658a6f1cca01a3491347e389fb9e5a33b924db2726a8ef465da4a5c885c40934a0590f4c49b48df924b51d20f1f8b494ed35651facc66488d2ed57e2cabc699b7e4ffb66aed107d4a85ab49cdeef07892701e397196e467319a8dfae42f1d6223e4a753bdb13f8f78d2da01c34a70f77c4f66a50c353808875b4200dc18320b2442668e017f5f4df2ee175be7e2083ddfcbc68d034959a7b0d67495bd96a75773de95f82329b67321fd28a357b73c79bea055e9a27e3b65550b340b5335b02b063258277bc14b2f8e8f6cf8b5f33c1ed98e64716a917e7396a7b6af23af8ff467f2b022f9ae6a6b0e175204d737cf05153fd2bfbcab1ea0b032b03c771b3b5c033ea414991459f7669b445a4b57e82cd0306e04d6b44a90c8da2169f5f85eb346cd09a3bc2f5344da94fbe6cfcb38a950df4d581fdbdfa88cb3b272cfcb9d9699f46588ea51d923aa3d5932719cf7fbb5a6e8d574b79d68df77682551005f9ff0f3b547e488023b3b42411081ce72723030baa6623218e55aadcdd7c50869d29e129cdb8db2a9120e31b47222ed243ab69817fe0c066df2e386bd96efff5a814d3fa98246898914890d4f3618efa08b928fc82a45eea69ffc677d028b0cfead6ffeb20c932e0e45592384c5bd9d8ca958259d80d1fd5fd84db0f850dc16d9427ce9bdfc682a51d6abcfa95ef41903ef030d3d532d3e72357f6d59cdc2b69f822321a689f0b238005910756458a9492e37cf93f5d219554da59fea3886e6d8c6404263aa28148fbe257ed6841d41b2b1147e93175d37ebfeed2c4de3ceee57af2d120755a0d1debc5d3426c728776cea13f71e85d895eb62cf6543db85c6ff02274f47d31a439a941f659abc9d3eba1c77bb1007c77b4c8d8edad5708c7d92af1bc505326fe9bf16808f1ffccf023748a5c04a89a3c42e061c373df26d705ad620f1fb1a6f6f7b4bbafcb3abf9ae9880d56305d5baddcef88bea41f246f2a2e6711b1dc8332344a1dae1b39c061882c79501bb286cf0f2f959f855baf588c3636a0951dd6e46f9c1b833a59ff52912e65e2a726b3304b10670f7d357897a744a63d2a1473f56ce383dbb97e34a9020c7e7aa63360afddff1ac2557767a850c5ac386a4ac297cd14b0dac440ffbdf58353340ddb89f3d053e64055a7bd46fd2b8937e45267d0c2731849d2d11159bd2f621d33ad3a8bf209eb7b1d74f3473ec4418ca1b28c4c7151930fc69f6620682e054390191469c4bb0dce98190624ade3f3454049f01a9df822e4a75639a178b42feee692f1205ae7a9d099a008d4828cd29c19e0756d07b5a55f2f7b6f554db1b26d668fa0dfb90bda6b0fe1e5585abeae512e13360ea4bc5c6be87af3418f7ca2f6c1d3456a50c23192451631514b6664b74d4969612d86e49929e25d251e4555884d5a5e1ed54f1ed100b573205218183653356d144968536de3f3ade360a252568eee2ca4f2b894446787323e2a22ab6aa187ca1b6c33acb5b98b1b599d6ebc0d43984a1ad1cec21e096739ded78f5e262030a9a604de6a567e9207895d854a1057195d05057f8559b5ef39011e2aa3277718e5c1823e87b732b83538bc446971f341b7b8506f041a74d992ba1720e70d881012a6c0835f5a6f3a4e96d10b8ab1aa081efd1738d70e0345bc97dfa585dfa1bcc53680a16baa1c29d375d41668ee8beb5ad77a2b98070c5d52a2bd444ccdab5c2e2ec214072d55ef7e9d7de54e6195529b1da939d4e01eaaaaef5d850e0864ac1762b8f0632c851c24ed2caf5137d1d9e46534ae6205cc93b153fd5b0d298c409d35a15036dcea8888124c3a6d4f4e68d22b9b7788039c3913cf4f85617bd515ec0495431c2d5c71355dad0a0e4e3c0315b12fda1664a17db41c00e8189f462e5763ba0fed451a430f42eda3219d064ec95f767091e09b5766e2d5418fcc7975ef310b1682675ae09d35ffe05b84dd881fa11145ab1c072d335cf605acb1de2f257f2a7688b6243d3842300eee79f7638a020469d1e3320e4deb21a74a4f9786584aad0c67397ff9c463e3c9c77fdcc1f62fecdb94b0720c6b3cffcde1bf0925456251f88ac9f8277fd22d22651dad801f2fd28dc81405e76f2fb5a29cc6d22d860a414522630f39e308fbe05d2a6116a040960f020aaddbf62170618f67fe5865e1a881fa884ec499f11926935bd523b00e24b3b22c43c50c315802c0f74e5d55817401cbb3ef29c9bf6e0ff8f4ef51bcbcf16ab7df3df4f8477b103e2d97008f4832a563a19c095c29716d95956899a9bceeb871da6934070f6630a5695f02efdf6743b90422743c7d4ad48f861e97dce606b198aac059f5a9d54f30e933b7ea0c1432a2e963c4351bf09276737294fa73ed23370a617f08133db8646b59fadda31b93cbbb99c570c837b3f2b81de06d08b0062defb6699abb3cafdb3a83301afb562ac369a61aae802856a78ea8a7a799afb9abe10c3c9312c4488209c403c74fbd7abc0fd252f7f2ac3f334cc7ae84100d47e27adaa6bb99fd5dd78a2298fd18b3eeb68731a6fa7f5d82421e9bc380305041dba42f440eee2cab017be04192cabe9da0a15c074d5112dbcc1d8ae649c0319ad13495e9910de310538aeb43198d0754c06863d7310a07acd4794483b074cd92eac0520d5c0096056c07f6b6d5c054260522497ca95283dd7d423a95da31ba45306b1a56978520d0a7fb60e33914267c7c272c78503441bb803c5797f9b5338a5a8d21977b895af8f43bd31ab74b50247fc8bfdce521d31206070c1a9e4a47ae80b324ebc9344101f28ce9826484362d8c5762cebc0ada36c7fce5e38f23e0e8eb0af59db397438ce5d4920acf37526c5cf369528366ceb0b45ba1d5a0ade6eb552bd6bfb469cfff89f848210ea6fbeca30158fe6c80fc5c2066c40998c3ef5a3c723710a349e8d9e62edbce7507531b5b405f81b19de46ca67f077e467f47cea208c4dfc0787c0e3ac71b950a81b7ce7ca9549158e5fc7d0152ecca91c35813b8631a483c9167c6a37aebb4b3d5933c83ac6669fd44368bede739e8ce24fd7f13bc3ecc43f7f451ec6b2acf186b6b5646cc4e6443fba1779af2fac93ef02c5121acea9bb072c221114def915c330921eece71275726736defda90472b135395dec0fe9014aa1a57e48e118d71b5f33140d7021dc4ebbc167182052e432caaf9e937a4c39dc7e7a37b94fbbc55b005f8d5fb6d9482fbb608d65ede3c09748303472e0c1f4ffc54ce289e1befa986099b18799d77b530316a9143563ea75992209e24f5306c75178d9918c6dee6326fb7adf018367cd66b7abccc2b6d107f1cc7b33a6bb4da192a36cb94e561c0032824d5b1734d474666535e602f1b6e3e692992db3ddc508d313902430e0e057f72ea06c5c24b59aac23a1ed43489c34fa4917485e25cd64de67c73a5ad6e92faa83c284ce7363761fe255831cd86cf970f2b381d407eaa866b433e7d5cd8a0199351977a86f12a096d56a1e836084e924d1f4a5c410340e6417f4f8a1e7def2cffc8ee189d7a55215c71e8c3fcdf6e371581b91ffa8608ed5878f43c95e8f0287bff42104c8541b3c7a370135b70e0b9a1ec55d3a8b9e94c5e0b3628cbe5d91a6b56bc35b8b9ddf9515ff79cd623bc784d558f5d4e915adeace021fac080acdc7a1a0408cd14caf7efa443d7025638037012dc74a189d3b827cea56d7b85cdea1c12c7bacef91fc450801644de31a7fe64e8c22980faeed556cd98f33d750a9dc951af5f79662ea3035936456152d6e3df7678f2a775fb08f8b3ee898d94e6384843f96576c9d9fe360a1c3d6445f24d0cc7359e4e546450cec71d3d09d1f6eb870bb980e7cb09712e6a01ed8d45c5b70a5c01efbd323c7c5589fa0766b7e65f34fe8ebcec0425206ec0b028edc6fd17224e0797b683abcd997551a3ab0b35d79a7f7084208b3e94e5341ca3482d573ae698f572acebdc572962f51464f018629496a731d3b89ba820d214936cfce4488c0dd728040cbda6e79e6beba8b7677d86ff6cfc82e645a899e5b48a9916ddbf97507c2e6261ff23d8d037f5fa851b8326602a8319169649731a879ad12b9e695045b3a508c031f2ce40a2f719588915e8f7b653ea7abcfe53afb4aaab89a54eeb0979f74da7a30a4cbed22ec50e9e62aaa1671475f58568f01c5e09c1d9b56c4846a83d08d136a958ec0396c2e6de2ccfdfd7f2d95e5bc43c415ef5025988a10beca95955262dafc6b7047c902e221fd87ba7fbae7acfadbbd88b2002c76ebdf5a80775a2ce703c2fc8cf260956a5a340adc3eca707badebb99902ce31e1851e8faad50069929fb8d6e2fba5633b3efdfb34e38b78546fd9f6bb9799a3f37e1b7167143a24befd39029a112e54495059b18291a7c2742f4cb9a7713d9d29e829ce0127224fa05ede94d860f4cf99296d375b5d02b785fd504d91ec52a8d9e206d3c352f503e0441cbc197ca30186b40668bca5150c65fb1548c1f73e9400aa5ad98ce1af9df0c14f80b3f4d1ce7df31aa8cb716fdac0751a8e0e1b926859a18ae13ee33f834b26aa91a8a07652f8b80e465b122fbf174e8a37570ae3d15815d90d4411a9b6f977388553a4cf0a0b9bcb481b3d08c6cfb0f48ec2dc73b7732f0b4d391d28c3bf92899f3f6ec747bf8da4e859032e0da88be8276b35117a19d67c27d07d2e266fdce1652a66ee371ea0331db2d8a6d7efd773c761df02cb974e9be2d0671a61116f94c4d2ae78b03020ef7355bc52ea51944ab318230d68c9e5e2b0b8c4b3168089dd7ca3984b16154b201b17b51648048530fc64308515cbb74e7f867a74487df8dff474e2377558c4aa41b16b4a87dd807ce6ac524e9ffe93bb8b5538d7e934db930b62c41b5634dfa569194fa449429a4b445330f4dbb537cecf2280f39aed6abb5d51d14c189cf03a81a3809a0b12570105364015c758202585fd86830e140120ae5ee270f071cb3e63836b5e9b73e5dca08a102aee39418e58d38c7ec77cfd4315982ead5ceacbb80c90cafab4d629193e559fa84b9db08caa21185a56e873578dc3820a148c1074a77bca648755727901372130627882f35d60ecc27a223d0ebfef6f1f9abdce835b49fe29c05251be00e75fb2ba007ce5523a9f5706e5792132c4e142f8882d711012203ee68789a8079eb7b77547c9175dadfc7d4961b98c68188266a318ed522cc399c6467baebb94176c4a6c2ecfbe2d5d9a78fe0f02b506ec488828c5a725caeb1d31aa54ee883841154c1357bbf7b94da8a52843dc51d8224c4e14813c5d00071e7cc179dd1cc2b1c166c249fc729f88d1ece129b417ea904270999dd907fe89df63d4827ff369a6a3d14fddb815596a5949b53cd86c01dd5c8cde3047c4c5ed5245c1971ebff2532b5db2a8ae1e8f63a72602309bdd9ed284d3fff8475a7cad9519ba618d3fb0c895c33e061e8812b4439b17ae81210c60df5217e839f8dec62001a8f6a2299fc891aa0a09dc1c907d42f719b3e6142741c0cacac52d8cf9c09d9f531fcd78c2cd9629cacc18b9f1ba37528e235b898d05dfd19f045daee13f7142eaca21180302a5f8b535e062fc96da3111a7b2c0c92d162cae0f1c4f24adff49839e1640c0a592e3aed36d7ca619dcc5038cb4ef4acddd8439ea9b855f12bcab69f5c95c01027695482825b01fee6907e2dd7e727c3f37f5a8db636fe52f62b50d3e0839590f0f9c6e547201c980c3881fa7588242a26b170648cc651d9f81c55d5ce4c5e6405e173446c5a3d100b24aab6873fd17f4f262dec184d4ffc35ee8193e5c39f2831318782c7759438b41b76cfbe9b8dc7a074e8d2550b6b1921550344ef596f59d5ab517c75abacb605a5e8246dfb9b9941e3fc3fbd9f0ea2e3e9570ee19245b72e04eb6496b718e50df4308d92ff7b5b6caae6cea350dcff5634be7a76c278e51cbfe9528439336e2cd5f6f1d86698410c2a632fea447b917af6ea62c90ce8d5adcc48d56248d84c6241b2053e3998a3e66e48f1843430a3a93cd5cc6c991d8630c4769b79b19583f09ede7944f1e062fbfbe86c372fc14aead91cb0fb84aa924102e0e0bf0306b9b0d1b4a90d9b586d7bd39aa93bef2eccfc754f9865073af3ce6ea41302d0b5c7037e56b3162fe8ed8eaf5b2acea40caa19f830488f888b97771610af6a6e471c0e28cf0dec271c7d1eb478ba67d751c6d813a1b41ac5788e17947b14f583a70d34af1a21d0f8992115dbc6584a4709a3e484467f136f4bbf0f53e4462bbf474437b425d830d88208a2c1738f193b0095b63745f7e1550eb3911a8058571f616989861b02001d802caccbde984237684eb4a1b3b15e0872a4e4a3e8f9336931b35489a32dfc00b511922439bbfeeb9e2b44088e98f72e61bb66ba1f8dc737613acb64ac4214c6464367b9fa1bff2fd0719e0c8668478cb572fdc0919790ff62820e0ed46ca7e3a9955fa9800a27e2fb11dd753faa20a09f692d4194167f0c98c810ef0631f23c3d23ef1fa195427e49579daf5bd457d5b86ebcc0a83331f69f846501afbbfdab00015e3d42515256a2a4db96ebc7db43daca81972d0a10abfba841cfb47899ddf32b986c3f6b98387a4f4f8afac246d4a4561b989057d6c6353e4ba3bf8521de0ac4c28af7c362e3d8d92582ea093c16c17b26b3885e427ce3cbe23884001726e06710fb5a646566c74da5b0d18be1ea51cd64cd6a0f07086cb15b804061c2e8c97af5dd6de2c37277fbb07d74455d37869134c8ee9994fb0b1b868ebb3c01a7e6c811e62f3d51ac82868d9e51c4280c751862e8bd093eace9bb0beba87f4cbb9c8b8297d51a0a05d3ee110bdcdf53237cb097f78f6270a283d848fb36b9506819a6bd272ad9f5faa5c655d68b034c7764fc2bf28d7d1e642b0741fd8e97c86ef04c627abf49d5e77ea149a4480c484bacdc178dcf110c599124bd5dfae5fe873dc0796ef978f92938db874699e1f62be4ff44fab6c9de4b327055db50a8a9427a6ef84f2866030a23ad25a52fc3827153e55688f2d3afec6dea178e39738a07f282291c3f0b14fdf2165572fe22029bc95343717441efdfa48fc5b909d74675ec88a267ca9e21219e71607caea64cbbc0829594b39c85e6837d5ed2fb25adfbeba222394c24e8c137d12981f4e71da38239c0c96f83fc29dd1ee0bcb4e7f08859e9e1c5e66b51446c812b238b935880b4deb4e05e32e425021ee95ac4ec067f4d319233a044e46e048d66b59e074ed88bc9f386e9d27720b67484e8ba5a5e6935369afa019f2a7890a9d8176cbd395985e7b4dd8ecd241eaf972ac428e51642500b3f4fc0c2f2f84a97e0be7e0821a927720d9c7bc9f8fc4a74b00098eaf594e975b349d3fc9d713fbec8c001b16d95c70f67140d841bd4291f0fc15f48ba59a471cb51fbf9065721d964310c39df0bd1f6a7f04b00ddc1adaca33761f55185ba77d586b8b8c0a341e639bdf6aad189607303baef88bf9d7a552a51695cf17de2944f00caae209ffdc9dc5bf1ecfd4006902dfd958e9b024a604a4c304307357376dd31191c46a22ea6879fd1816ce881e875e423d4f661513ae3b8222c6d93d8c24bc9d66d74a78b82eb5bf6318adde1cb5f8e4fdd85cc79f57d7a4723f5356044a40edb9dfb944f9d8bc1b5f11dc0a78ae0b1875b7171617ee5758f3a6983c8515947da10f81c710260b98a188eed59c67b0775b80e8ce3e286c45d708fe3075be38321418b1d668d33d81928d7f53627dbbe1f88edd37f1e3ed5dd5b4b4443980bcd5bcfc4352c1778a72eeb47d3b433bbefd2a8dd960d80cd6245707dff5cbe61aebce263971738ab2100e9dfb977d64e721980c2361c92a26971a5f7f4245190dec25faaac0359ecf31a1b5e9ce818d70da1cf8583b2846512c8884653332cbb279c774853eab054a4039e50ae45d8d33bbd026cd4a9195b4457ad40ae997cf67e96921720e19ab605b142ce15242de9da15105360072086df064380461b4678a2b526ae71d7713a6b00493568eead2cd3adfcd4b0fe0b13a12b58b9fa28c6469f5a59530cd25e4d371f40511f23b51c94f73bd7d40ec2f2683c3aedca9f0873e2019770c847ab8c97fd8c101568911ba6fd3eb744c9a35f86d9fb8d9937f3dfab109941c571e56aaea0595fad5afda2dac367b8afa235087ec7826b147ab24911ad702fa492e4544e7a1e197c71543e4b6257718ceefbf9e79fc5e81c7f4359994fa0ba32afe6fbe630ca9a3297aefca28ae4771cf243c2d2789ed145b3d9b1817fcf76ec26e3d047960dfe9e122614047f1610579f864041e0c42671fd131dabedabc0a4ddf85eba75a2063d4e95accddb48cb8a0ffbc5ae57b9ebbec0effc1d296d9d07720a760209d3016ef1e26ff88ef86d588cb6f03d0acc79424c2d07d82803c8d4190c826638e95c05cfbd0eb87c119e1b2712786095f0ef99395d954299149c605687907da22f6fb9217674c2f264be80ea4606275c92db03228d8fdcc0f8c73263fb2acac9ad9e29b6b08028548ba3d7b74b32e77154da4c84accc3a4465107cd8990caff7d47b90b803b48e447f907d08472e53fb4b9bc17ecefaa53e6c20ef128a87f997ec5645ef66d4358c235cbca58d13fc78865b1401a469ba96890a6add504643ba258a2d7dc9947f57b8b2c0552a020cf59273316b0f9dea90e80e796bbbb356091dd68f0541a9c5dc44595038ed0dc2e5ec99cc539b8eb8f6c963d2eeaf8cdc62d3725b28673987befc3aa7b68576bcf2e394ca3bcf8c536e3fb58a80f6913677579ed84d8764558a5f59056b750c901f429c665f1b3ae988ec172ab5f55c1793e6627004b68d6de173fdcb482b4f5a897c44376334b1aa48f62e3e4f879477e2c63fc7d06ba6ecd5180e4bb800fa2225e802efd4a927ef691fe084d62fdc55e1d487dc97d9663f2490bcb18757d5ab96df6ec32887d37f155daef987556b0fa708e75259170f8758fbe531f87015c2020711318d08de4231939a8e3d247cb80103d573c7ef49566d5ad918b91b2002a67f46ecead65e8e6eb85c8323d7bf8b52255969c588c39c963825b4dcfa0af9beb4d388d1089e95025f4cbb7163b27e7476af54e47f0023919d1de67186b139ad01895d14785edf133165d6a7d4b8e5f47416f329b57efc59ae099da9bae20173bf0c9ffa880b468c01659f71074d9cec03987fe316a68c93184c6f42a9c607ea44df572c75a1c6532216b85823ebe400ef73ba16a21b4ab8a2de1f4813a2d2b408ffb2e1fda110a115f84b6b3a546aae186252ba1c0385cdb5d6f7d14bdba69b36162892801ac5220dafec87610dcd2492e4ebb7349c18b41f865fc202cedbb2a1e230482ba2a4938b5acc9978a9f917ba19cedb643787d323a5aff957755986d7c3a2b72fd9f040ac5b78949b983cccfee961417ca92b7898d7e2314b22438c2215a0ef1000bebec02558473d18c1db411146a7f692f0283f07f73b79ccb513e6e1dbb4058fa9416806031a4ec4f1a55228d783059023b970b7f04209cf5850a9c209fdc93e4675d16299ec8ef877fa88b1f3528fd9dddd1521167b58e3938d3db99a5abd85d2ccf6558780772b35d63c7e8c2cd0bde7b13e7eb50cb1e4fd51203af0724679d71b24e2f1cb2ec838ded7e6bf8194b4c5868df345c02d54cdd14464d11fb4e9ea5407e41d7b1f0fe9f7b0ee3f156776646ab36b2237b65aa4195a8d1c2441ecf0a03aba5ef357410fdee8cbf6df620f96fdbe48c1ff613df59891635358a76624515b4fd24a0859bc60ace9ef5e37a70dc93485dc7a96ebd2cf0ea6adbbca41e8ce100700f7e51c132129612fa1c23e53fd988c68261ab3c89d79ca571a18b1365dd0ca0fe83e65135b1978e0a094653eed4d0dbe3eac8bc11e1436128e828471579e4d589220c2ea0e200b3e8ed961391fd3b9c3a24de5b78c4bfb349da057f441f3133eb74487690c73422f01216110484400931cc21d5e44fc02570ba286de83a4b1d1ac485fbdb52222b6871b7fb0cdd78e8bea297d396dd98031d690d554d3e31d14502b1fcd5b44f50de1f30d769cbd4346fdddf8c487ac2d746033476eacd70d5264bbdec17adcb95047a0d56f545c339853081af5f86fd1f84601a65d1e6a95ac326675a1fc7cf45e0d2e1344d3ca18fcca336e685d4cf038c75bb916143e0293698af5f3a3410d0d9f35fc9893834cfb572c85be7d9d94fe32fe8a731e2b923b1c92ae2ee27378c2ba6d21b531cb7981f0a4f9dc6547cbada23ffd721eee203f013b26ceab2cd60b16a3d26858392aff0ab9fde57bbead24a353bf6bba8171c0105bc101ec08ce2b77644a9154aee2c91423fbfb3b4c592d9ad763c2498d59351339c5dbedafac0661943f18daf6107eea196a6371704126203df0a6afc69877003f06b164637daf17173fdfae6ef100d3562a89b1640cf6308e2852ae2aa093391db6ebb7f6fd5375155a48a734d3060a81cac8247fad7ae8781e0049743e5ea33e86ca7d15260e7f54d7196fd374fa64176fb2722abb2404089ee1a717953323f4d337f9fb8983812f056b3ffd7e46d82ae65cea07c87eb411b9d58cb47ee894de8453ed56cc4da4c2eace3107947b3d4ffecd16c97f3b2e18965ae15a31a2833ca874303dcabe10e05cc6780650e4d61e81f057145d7966ae1ea5336493077d9ea9e066dca3aa5d3472d1b3d7a4373fc388fe9f0d279e6a5c20fc35db64f6b0d0d61768570e0266a2983cf1df1acaddc5c417ae7a3892f0cc3357fd85964cbc9e208195810e43f3bed57bf156e9d5c256be6ff7ace7d7b2c72ad230d3c1e5a0e4c257abbb70aa2d51e8a6aa0672f30ce0a41d8bd91bce8227b9af7c9312123f96170e3dd24c4ab07a7f9f8854887e0a69ea4aead97e7c8aa08c13cdd1ad38978cdae58a92da5a0e1070ceb5e050048542001c8123cf9de0da0313aadb03751bef40d8ff18ae8803ead403a742bac8bf74a1d5b1f55df6eb15019a5348cfeebb5943a9446b2ed2eafd9691985388ac03117102ca4c41eb13936620287ca5dab659ee0c99c45d6d99e6a1617a5bbe4c26aec1baac8fa5613d3b99f2052853e27096efac11f83bee3a2c9d0ab69990146aed848503129daf82296e3bd29763be99c4f2268fad1d4bc10e3966cf7fc58535ded9e2eca68d92ac34cb9f38f965abe338134af46c65c6b5c6b2b7a28b8d1cd75f41748cbde4d41cc53789ab4c6c8e09b77ce873a24dabb0900d993a3040c18456a3d16cecc745350282c25e12d821d2ea1d4861cafefbafbcb69a4b6daa5a848cb62f73c1375b212a5ee254b9699b1dfc61d64ed82b2dddd4ff164b4b6d4efc0e365f56f35084964a7976d1d12ede359f0b1c0b45ca49ae7f7ca507e4356f7725dd3b09b070a51ebaafe024c23f184c784804259c325fd7b077fa7874b94a64d4e013ae112fffdfc0d27c5bd2d35ae0b29704b4ae3794612a2fdea6aed53a3cc45526207429e28cf1161eba4a2f8f29da845faad32d0ffe4dcbf418ff1c4efb8bbb1e4c69b530c9d16b6591dea07a028481dc9e070c4ebc0a080cf0f7df06fef344bdd6fe4e807c6e5b5d0d42a75d83458afa77225793d4810c1dd5729a732b67a5989147d5c6e6ef0b7f5a096f4f29e7c1a6d8e73224a917202812806d97b48ee862ade413b69c9d663cfeca4ac2f240fceb385726a1a01a068ec84b0ac28703bd81ef09b3af6d00eb6c9e27505ec0b94545921ff91894f83ef45996fe0c40e7f30aec0388e0d24cf8c48ee1d34ee632795a763b477e694c407fe170ab32088eb7d6bdce642b2ff46093a73cb61164d1ce08bbc31deece71ba5d89df33a4f5fd0548673f7881f6763660596632a383d08650856381c17fffb70b22c3b754bea66843a1ce64158e2c8d88dcb0f95ef5c32ab3994bf54453f1b158c72115436f17d674ecd3b0944b06eff09bab78897a8dab91ded7c75460bd8c1b09d9da2347d18ba55c82eb5f28294c394e15fe74e9aec9aeb6846c0b53205a743c9abd977a8028e107c1f8173c2b25f7352b61a455d464009c5e9f1189dbe041aa5bb47665b72cc10d1f147076afd5cbb6c562d7a79b5a19dbce53fbcf04074a569e453735e299a79fa4943514feb00e5aadde8d70e2ef0048bcb869a94069459c00f64369910792c6c14dcfdbf1e58f9946d2b139fb0e4c7d5f532e8d084ebb982c980513346acbd1d6d58ddc5275e0efa1016ec3979d8e8bcfc33a74828aec75d3509160b91f6d047a6100e4f33376659da9859e56ba1d5ca15196a3467ced43c05323b54fca27e06d63b5f18307f3dee9a64fb4b5b8050fd1b6096ab88cef8b47fd990e7a0d4115552f1421a734851bcca0cdd441f9a3216a47c33d7268a3a4c0f004bfcde656fd876e38c4ef0acec90804be6da8f48b26cd3bf766d46b8a7e5fa9ce3fb0f9713df3bb2f9f54e562f38d5e05e06a80225d53fc36860edcdd3ecff8dfd232e13933c935da35a89e223a9f558e17a6bac722d79d1cbc773543e780c9e0bba13974bda2a7f054c261ba54b458dc3226f5aa35755b896aeb1a80843fe50a2abb4b50db78f0feb65ac619ef81bf3fb9dec45b35843e15d27fd7ecc94ca2ac88dc5bfc03a433ca06e7be375014dd7e9f6e0d86690f1b710448e65d6ef615412569f185c5687da8dd136f103afb2990eb226cbf9f8cd9d011d5aa32bc27433ade98a1b6781b2b757b39fec01712ee4ab681eb8b2955056107953ab452b8107f59d4e3504e3060bc5dae2b3adfbdd10153cf6911bf055832a12132002907a0de3459c6e736258dbd2692368bfb5aea2345b381ff7aceaeae41885e69dc462bc393e1935b672291b6d6e27dfbcb05c80e6e25d92d40a0366b4924eed094a114e75417743920f40abad43961f69d770381fc8461c83bb725a85d1083575854bbdfdeac5ec73b257c1e1e627a0f22cf5c9b4b950ac9b1620984350061a68e6baf48912fc91170da44ca9fd8f7f757dc2c668204a5963f9505f21bbae016ee4e4111652969049ee5d7c109f0b066580ca8362d5c091c794308b926a3389f463fbcab899e672fa8925b8694c668c446054e3039b04117cb393f6a3e958a46bd001a3088356823e9cfa9152bf62af8ad6f018d78623cc912da9f081f3d734d536d86a7078e6e9263115a581d0b169e26fd2c4b3e966bb654e5f507e0fd45db54e16a536656edc6cbabd0637916817732756ca55d2698e451cee6f51e429254c6bb8d2d2296f6c94705cc600a6f109d206b3a380d9b23fc41b6e1eb75672510a3d58e91f7ac2b4802ca5b6966b5bcf03eae7b49ea7f84f61f1e2b098bda9728533f790d4d65669543d74461b7b45f3872c2016fec17c1c3496efa8228300ed837273929094b559605dbe344052df8d891180cd8ca0278ab7adbf0a14e4889eb66ee931f3066c3d2cda80fb996ee6e13784dcfddab2e4a9d55e718d2bb8af4e5aa96484f2e148360b2e5862ed58697343c8462a8fccc28d42277ef7a202e475f520f42703ea6b38fdc9b4187a8302c3b6108fa65d8e4b0f7268298b0aa64e9fb23ab7d9ea9929da82ff0a61bf5bfc5638bc98a8c3171513bde45782ae17d8908f43aa803f66cd7dcb51efae71583edd926ee10358d1d8da9f4fc1a4818b8191928d7aa268f19bedecffe7358786ec5655d2ca1eaa17ae52c651da2d12362dc4f8ad6f553798c4e36875a4a4f8f96c68f01e9a12c321665cc66ed47b568ad3dc1cbe93e0de600e6e3f692cee0af44c6109cb2b5820958ecef93411651317eb5135721ce4d6f665ffac8e630e14bf3ab5584121ec16515f9513afbde227855d308ba936d4bbd9fa2d4d14876c4ec3451743f1e01a7ab0882a6d706f90e65c770c9a9ec61107951113930b9e0b58ecff793e287f2fcf68d57dad773e7c492cb41e3b72e3cc1f0ea23fa4d7591024edd9e0bd118935aaddb64266310aea78b3b04f41825e8b092d6ef3c8e73d384ca2f35992b92a7af9e9686483d35b15185324ac0c388413e682c8f9c92fc5b940e2ff2a8a4f2124d329a07abd52b51990c3ded2feed4aa7b22aa1fd93430bed81cf462ad8b330c0700b769fadf203f93dca64449414a52ce68cbae57c126a750ea7595c8a47dd26a515c289f3263896a6413291e198a39a49809bc28af8ef92105ba35a8cab11c30a5b9508a2889aaba50cc06a6cfbc13646f65839b0c675c311edfd4e8d258bbae474b3179b0c712528903f8227a7edf9d67e86990e2418fb9e736c9042dba149763919c7ba3afa7a3f6d44aafca6309d36e73493f9e4709a526fee7f6b5ff37cb16fec14fb91d2ef1e53eb35ecb2028461938a3ea96253c7a22635deb7c552240fe870dd31ab304b047f5e8fac8ed06228848cecd13e101716739f49a1791d605f234d2db1356305acadfecf2f9c16ea3f4a73fb4c04d167f1232569f698bcfec7cedd4fa581872433f58caec908dd2cd7dbf588a98c342dc2d016b0d54abcc9204a8a46081ad2afc80b6904254c8ebe8362f6773b98b7c87f27d8cf861c8e87dea6adfe3d788d1a96eb4a3d57a28ed39400cce1b8f39b20f61f3a73ed8309f4f0cc8eb027a428c0476e64677ad5dec190562ebc6f98cd9076a60af6e5bb0b55a64d29144329b671c3161d4d6ac0af14afba0677a3ca6727fb16d66c5c7a3d55038f864860af07f09aa433f8b474ec07067c8c61d98346701e84dfdf16a6d104a6ac7c5449e45950aa4126440d98c2d268f9e9d88205ba79dd5fd6b3f9f9f6f410207962b6291601c94b921cefd378df7462e4e1dda7bd228bcc245ecabef08c31e2e22db05a5afdc92200fd9f25bc7331a3a1eb04825847d6c4b83694b5db3c246deedb258c5b7322498a26b0ba0ab7f9107628a062dbb7f26570f0533d2dee8f038c1180a6a4a34d244252a2fefd8dafc98e65688716a736ab9e9ec1fb2e9172243c456d22a0d3d94c40b7b00fd3173d2ebd84d26b297b282478cb155407c3ebc149ec5a21b3a6bfcc2ba704fad8b89c867a026443bbf69e034e2f62b29d9ec25e49386a1a706563a973e569f427bb1490d65c2d8cc5ede100a987bfa6eaa899a7dd0382ccb3db8684e5d657ac05774415e7159b3c76481350d5d6fb40096f139d649658b8c98dd13508655f043f12f3d5d450c983a784c36c3dfd4781afe95882bc9c185004869348a4c99918791bf00b1083c4840efd5a0844616fe0f1898f7e477f032b640339515b2bf281ce3a1adc04f61e3a3ef94471b102cd392ec0e9e35a42ce379b88673e84259d72705925a8e882ee462fb5f891b9eef26653c8902e2afa2935d7b77a86223e419f7f9bd19cd8bd6c91b8f06509115c44c83646831658719375ed7c8d33a326687cdfa2a9d3b8d341150ca9241b5c0e5835c20d3ffa3a8e9dbf6b00dc6cc23c22615fac6c51bc55e612f2790416af8a0185b0870eeac02f9c2bc231f11a9e84c0d3bbfd245c653e2cb4c4b2912ae30b79697efb01e4f8ee1add427983f9afc9ea5254dcaceb9add5b45f3874783a4d85b3c22de68f88ffca20857562ecac44e845321adb5ea24aa7c4a96427a1e6a8696cd06f5c9774f824af96f6233e9d3440a5faf2f8e28fa148e3c8e784bfac820ed080de01017396a227ac2f63d3972dbdfd9d57793b9e6d099523fb79a2558a2cc850a35c23148ca3e8cf6f6c68bbb119c2edd0abb6bde311544dd3eea5e1f2854700a4a88dfa0c67e8ab81a33069500ea2b5a6f49db42b774da0d03ddbeb4b77cd3953c2efe4e0502e66eded03b5b7fe239ee6cd425528b71adac9a5af4308bef4a11efbe622ce8b5c0fa3041571171aac32b2e0cce36c277a2a7e635534e619b2a9768928851813bb865810bf502969d6c2ab03ea609bf88b7742d88f457b8f71ac5a5221284dee9395c43cdad535700ab54755318caadbbec06eaf8da88fef370471de38263bb85f77c65789e7e4f43db7c16e1af1952c7e73275e8b19e7739cc0cfb67bbfecc000dac1155dc08af92c2e9a9ba06d639e59461d5c1980f1064cfbd03e20a93696e3d676f3798a85f926b66e646506cf1182892c84181993f0a3ed8cc920db961303c7267d44d36e1c0958274d7f2fdbd2deb623dd8a23cd50cd1f175348d173a82493749afa17b1b698390386d6e0d808b559e8aed7f73fb05860c181ae11736f8dd78e3f1d139815a4a8df7f71be1ecf71df3f0078f60157308203169cfb0979741b628c901c0cc2c6258c157c6cf97f9754c4b3c38e00415de380029119b81c41a7086b1c801c69fee635ba3140662361c4c9f9a9a68be533b89fd67ab556977cc3f2e0cc8307e7edeb35605b484d50009b8849d761821262b46f59c849898ed71e6b53a63098f19ac37996ab4139788ce40434cfe00ce0b89655f97cdb3e6baf479e2e495baf9f7d75227b82eec3fabbca6e907db49e2c28d348b23056394177eff88ae89f97a1ef4d8992e64415e413ef9a2bacd7be0210830fac72bbc51251692bdda0cdb9cc4090e7a1237e0e0ed8f4548bf4bf8fa48f53dbd08b9226366f6aaa917e8fd9a2fc143f22dcca4d3d555d429bcd2256bbe16e1e182234251e3cc7d39cf7a0df8eb0bf698969e6ab23e82bdcd56ede985323ba48ea52818f0f827f934be073f36fe5651c9713eb7faae59107afe414f4352b819a33cf8741e1a272f747e6a225140a6aab5addc0c06cbc2307710c30baa4572465026f576bb751c227beebcf65f65bf51e8058ce7d9a67b0cb6f660b4eff64163e92befc4de92b2f7b48f3f436d94841ad719d77570144dc53ac68d2943512f3b0127732c6671a6685e5d65d574690d292f015ae4ef8b2843592be371b630a7cad747ec46a7bc2491352e6970bfe6ab5d5bb05a4989e1d6b1ca6ffe97e4a97f23c4097d2a01ce7d7a00de4c3557ca5d56d25c605ea2ac4cc2e727b668ae2b2a2b7942bc6982ea1956017c13b4fa4c322bf366609dc7f3435fa1acd4110ba0f10cdddecfe85228dfea9e1b2ef3cd02af1c160b1708769fb037d8a991b23ad179e742182617501ff38cdd96358828b03bbfd61e9d7a6b39ca422209332781f8dba821b88f7c34336835ea15207de9a0ece8b94d74ee95db39620d4f4417366f96f92e886430c3c43a5b0553b020ddff980cd4aebf0202ab5a6d0d25ec7a684a517ec759059911550479a7b9a6edf0424f3545794546744220915f30506719aadc114c9d3fc11dc5cce2c13cb720273e605391661d48217023b4d8cd38a6169458b02ebfdeaa690df9d83761e61afb0e67cc23aa56b5a86a7da00b2408d762279258d8be02dbebe00d1068d209f2cb8cd8562fdc28dc6cb9d2e87e1b4409f4e1953dc496fc376c0a1c6f22d7101c272e3a5b3cf35bd0f43f42699a1aca2a70321c08218c1debe774ab7bbea80f4e944c24fba05f0c816d5b195b0e0d6313f8a65e69f43c702651a8a2e6932b97fc99339a9b9c3d0f68b9247c6a4368df504641b61a396ceb59b7a4c644492268baa3c55f3debe9a9bb7f4bf3d895015290877cb29ea4cf83fd4ff941c343f35ce36e6ff25d54c17df654a825f49cd5f234f143a317dde32269d6c067a0c2492a8c9c4b031a869046ab61a26e58fa7d4467603afa209d29fc4f712991bfcc6a23016c359cd593d3ad9012347dfe9474af1105bf834e6d6b542b36ac33598743dfcab7acb06b04e070560a28f8783803bbbadab6d35d21695167c3faeaacdddf0e72f5bd1a482941e7d0751bb90b1afdad0b5f9efa23ac1a4abaafeb49f159da9a580f1d3ecb5dac48ad0695766127432f300956c76c850264d2c74617b3ed286d8d081bffed6f0425b6e1e9721d84e1ec3e2c3a01dd75438a3a8397eb0052a2590beac6e3505749e20068b5d956680f20d2fcc397ab0c14b86f310d9711d92bbf388d8ea871afc41910d9353d679adc65989848e9688926c6f046c01ddd32bcf0a45c836e006e7911ed20a7ff1ffcacf76107ae78950bef6d87863d6c14c56dd934879896b37c667a32116a8c3fed29c931d277d0b5f6442fc0ab3e21434c97de6aa608e5ac8e437b2c1a0620aa1c8ce7833bf0cadeca03a8daddbe5d7ee129a702e59036d4b4b89d1a49a02193726ca54429c38b98e29e11bab18f601b5cd358333b33f1ddaa7ad0a386c74ea2b096611e29611f90d9d46746d3ba2d77e266979cee2d6854e3c5c973035d9012baac430482b414e73fbbc79748356b972edcff93ba0bd92dd95b36fed7eeadd323813204df68b21944aedcd6190efd0097f3fd0f5e88f548902767a9c5cba753930bbadcbde1050573720a89c598cc5f17a535d2d4ea22f65531650489a750a07a7ed498650c00cf38c3a7c9bcbf0ffdf02be2f30ec5bfac28f950f4b06aea8458d3d4bb62a2758af348fb4ff0fb5a7f5d5eab07f5d78d50e9ae00c59ab4d76e81a2a82ba67aebe0b9e6c379bf0601c652a76dad0156381ed367c5d42e75e1408726b62434863dc8ee89dd13cf5648d46c61b3024da993caefcd24ba5533d7cd478eadccb557c64e36a4c30a6d065e59efa91a41f28a3cdfbb08c3fcdb76752963ab1bec463adae1a861abc695b55b602c619a8462374cf2c135f56cf87574a88c03b3167e9a8afbe23a9e73bb72cdf521267dc2f4318c709feabceca8c23a3077cbc4b7f80c28da6880ee6ed9cedfea0693f0e716df392e6040c7e3742781083ed60de1c6a243c6f7cb40a08f46e13c209bd2ca9ba9399da38c7848815643783656a3ad20d54e1091f37760ead28b4daf358796cdc0912f67e0e0a0ea577557db85716d5fd7565cf8664abc49ae20fd89e2b0aebda0cbdaa05449713210219bfbda750315a89b7f7ac5b6e8431d32b2a390e3afdc1ed4ecf49eec28a31f3347e4c0aee0ef20752ee629d17bed1f75706f771f32204dbe5c732300fd4fff6498ac695308e996951e8f437f94943d41de3c2dbfefcad13f8074dc38f1267c3162c7b6a89c0e271ad376c62b89d3e27fc3c95b7ba5d09f2dcc7e6d9a56a411d81d65e85e7ee1894ee85b8dbed86b51b74a817c9be434d7e90216fab4a87148abe7400e725f7475e6c0ebe80b24c781ce5587dd5f081adf899d444eae16f608f04ab0ea752841f7a6bf614bd1e4129334b56ee88f02f890614c1b6fc4018f845c1fd0b8578e5a3b374e031616422c4067ffed5c6cea245484e32352d699cbe29b48d81024453ab76ff768e50d6da5ee1e87b81ad1311b25815b209aceee195de97081eca819d3d3c1816e5c8ed2642d5cfcccfec5795f5629fa9f385d3c2d2a5cee1b8c9c436f1904f4ad4e18916f2ea787b7b76fedfdd4c31b44a6d130017438ee8adb64ee69ce356ee197dcf5928b7214d9369625736753bfdd082c393b93e5d78d8cf0be3ec47ac2dbb4cca5a12c1d37ad70c82b642a12c76b728f1d19834eb176998e99452c73e2d5956c1e7cd40afb95430cdbb6969dd29ba931271f84d1d2aa2480a3d8e01bc776c229ccdbc4f30823cca118e26318087fabecd1312cc94d57a0edcef367859a78e4dc63f20bfcf0de0397dba1f511c064b988725d76a1fb4f731628d8dd76c63a8fee418261c33fb481ff39c5aeeb685250af1609bc30d16c6c059030621e9cfbca45f64470fc8e584f1bfbfdb2daef226052c430a233c58d5cfe41957d77a981a8a70556d7ef2d2866b00e64e90cc1967591dfaad4926b29da7e70953f935fdfafc0314c90e974411c5b9f6fd875485887e05884c48ce72ab7624f12064b67113385f67453bb55f71e4eb35c8afc41c6c3f0b0916c5d67daa6f3e01bb307af15b6c3fda2979846118df4720de1031e2362c9a6cd6d49a9e131dd9944013d28a2ecdf9eec084ed0c45e9fb05d2d8037513a587c4eaac03de3143feb4256fd3f1a4039648543f7bee6f9bdf7771cb9e2f4fb036bbe1283b0cc5f847cfbacadca8d71a54098324fedd873131da34f91681acee29bdf44b7b3b58c272917c1e86af61418903c4620dd2fdafffefad7cfc317d9435caee627da15466d250b187e732f3e766edf83471ba210b6265578275eea19b8f0b6c8377939e102afdc5b114e2eba39e89f6efbc08fbd5ecafd6a06a5c62869d77342c913372e71f3ee6c00c4fcb725a46f63b545f353909e8188609d709d16fe41de24742dd0feb5401df3bfbd08b739653bfa1ef642bab5e30adb3f5d9309b57296e29269d5e38680d2721253d0d3574b65ec8bb84fc06582fe4e5cd68166e51481c327f5bfeede90d91d07edad7f7d6ec829ae0744a9ac4e41a96636c36fa841e118e26caca295574711de17907ed43d0ed8729773c7479410825110ea10f93bec62224ed63d450b7ca55b13d747f4ecfcaa7ac985411f3e09d751d392107d27e6f3c752ad66a2c8f6287d73b636642f1caef58249958bc16ca9321f7f04c792b363e99a602b516e1351fa9ab50acf2e72ea7f40163b871b7c3b601222c9fb3035c8cf3b6a97b593aa67e94270904bd838e9193cb90271872dfa5920d195b803dac7bb715aafa81156fa515baf63724ef47e8399c48742cca5d5e8f234f400dd8be5c21e9a3e14cb968b97904ddbd7742f1e9062117265e3d44e7a8464e8bc3a07577fa416950affff7b5416b168523fe46c57564c33ebfc3fbc0c96547a55390b6c5bc6045dcbb0ff0c0bfe48a76d9280370037495753d17fd074cf6d24ad3c71b482493d4865b6036c937c04d63bf5c99d729ce223bdeed6708a1e2515a31c6c531323dac4c5d3bddb53d5e92e097746bcb7ce44ee08511234c0ca54bb50e4d6e5a283ea94c1e429c3a3f0a726bd7e6dfb6c7cc9bd67778cc774b8741fc0bb91a12c19ee434d624a83c6a31f1285da537e6998829a27bac59051ccbb680a4e4287852b376768e642863a5190ca99bad0894274efff18017759366c05b375c82fc712d4bfdbe730c0984a5346d9895f40db04443aaa5d32d53c46127a5eea12ed48e48b9aaec3914c89fa9f45a72832087950a8b0e5473b4ea4fe916330c998b3275438f0d1a415a4cfffa405d01044f0a5ec55fa30abf3859d7d23f8263e31e7f379cf562a9d2a01caeb80aaf0dec3e4aa996db4070cbe40e5c9b89007415a8a88edd6164762ed37db77c856f8fdd0e9bb952aeaa200b0eaa97cb5bc67ab5fe270d6cccbcd45d09066d96b4ca8729961def1099c79fa17da3f093c843e0a02f4a1d7876610db7603b7b5c1fc9c4e5d93ab550ec92d0a0f0fa82c4ce5df6e82c68f3e289cb4d111b71b02ab02f74a917a12eb2d7f0e35df73a549a43a00152db4c6a54715d1adc499e780fdd4bd880c34d54a9a91e16932d686ec137a6bf7d85ddfb5387fa33c158c23a7f9236307d9b3c70956f9915119c1ec3432ae0a0782af814cad10504103a49227b6cd98c40972d9c900fbd5f4f56029cbadf795b4e646f6172cc5b0fed9a65139348ca89cdc3885d6ddb184feb90528506d77402a31879238d5ce515edadd94df6dc963bc7080c545e80a75ea8b4c84e98c7eb8551b9ee43b31d648fdad98c5265829df440dd31462b029aefebe539c8468a9bf8dfe2b130e642a100d5626dbf517a58f0165432c9fed0ec0d702a4ac8ae50e7db15104c8aeefa95202591240bd1d530e135410c657c79c5ddfda235015709c8e5a0c7d9d4df87213f2085a69aa1743d6e8a3b61957959fc0cae71e4315418d597a25cc74a077db25a008e51e7bc5ac07181b479818c6edcc6100ced21be20fa49b2c663cee50f4198dc6d6c46310a2c1e32af21c7f3d883bc20df0951706e8e19c41724a9e8d6913f170a1fb3d6a3d8e1457a6090f58f445b6e9052dad4f1183f0b1fa68563b424b51cdace979a2bd19291191f3a0110ad49440929b3d6803fafb74358e00d2efa66dc6b496ac24e4bd09020a9479983af4c12773c6f3673a83226bb255b72d3efac55a8d1e5fb1a6b46996f2dad7cabf8cad3fd5e296f11788c8adc50477fe51877429be9965cbd9ee289e3a013abaad701a264d1879f0c0aa23024e3a698e03955d93e5d75959f4ac9f663aeaf5e02265846300c0a361674dcc750274bcfa166afb6b0cfc1e0162eae2ae2e373f525bdbb2eb7bb981606d8bc77070ec37514b84105b9d58a3d6b0d0729f18ada3188e25dfb1f7bec97b8a4f9cdb96898870c56fec2047b28bd7e6094027fa793208507d54d6fe41b776b7589b147ac8ee844dd366634ac2087a3f2683a9e7cf87b57aeb152918254b874e50d391bb1e917af6d6ccaf626811e9a67821e6dd8a7e7f7afb9e362059cde67f07f865cd9da2af822bd60ba8d623cb4e451dee95391fa63d5e255ef42bcef83ee16dc57595477d815fa740489aead6739321d5c84965eacc06b5ccb25767b432d5017a0bfb30875cd560aaeb486d430e5d8ddecebd06a8b369d92f5eb6bfb0d8ca94780d8f245fb54b77ecf7c220a398dd878bbb767722311e1a33c275f8fc033172f78ca037cfc700eca5b57e4638df6e9246fb10e0f72987ee033dbfcbbfe80811151c1c6682d7fcf8f48e6133ec7e707b4a4a5a6e14f03e6c2832600d8d754878b7b637a458d32b01a16c63a2c2e46efaa3f3c33ec0c5ce35f5ea12b7a813dfb7f6d703de901203ef92ff780299c05b8878226b680c95b652d549f1f12be66f9286ee054fdda40acefd7ba34614f488c19c16e0d577a7bc4f360dfd5f063928a5d842e4aad6760b39eff826ad23af39dc484f687f4570517eb6309c7fa71847d2bff2595ccc03e58a2ce0cd9ae0ba62e7f2d7010a5b3e6cebc1eb3f4ef2c82ebdd0233b2154a01c01bcddf46f274d782323b619d74c4738783e90d68ccd632754b0186d1101092abebdf766e91fbc00c492d888fbada0b60152dcc2fa3c2984251fc2bd38adf5b8c27651204fc65a8f93788cd74573b887e3780c72db848fb2049a124c61eecbeca540ef94882d2d31b71aaed48496a560ec06af554f3c4fa43433900d03ab0a5adead4c8eac5e73f22fcd36425588f2ab4a26915f842b6154d77dc13a1aaee0d9a54a228cccf17521363e6c3f3ef398ad7786c5634f249089da295dda97f0e81b8aa2c9f25800b80dc9998675fe981abd3380858631c86849cae91512696eb62e14f3e48cea417170bd409c98d5cc54ce533c4e23ae0672b088781ba0f867e062de76a5a69cc257a1dad24940aecbe2e902e9bf80fcbe2e6b0b29c6e1f3038fefbc58b0e07e164a8d9d73e230ce363d42752144c3d4102a767b84f4ad2032bc0ed885f1b79fefb47080eb9cc8fa95b29e5919e58ffd80cd7c85b8d356318cf2528566672f42ec4b57edf600c521a5fb3adf3982f5ccd983a7e15bcfbe7d3e85ad79156da7e33e5ba35a928605e4347b8a56a151843e8d8c0fd83cf0f39932b45074fb06a71b33f6c1283b967c71b20a5497af5a1c867a4f8919d4c7806779f5ce4331f390eba084b6b8d6b1c755678d85dd5badd27326a0e5d001ba8ae4b780af37427c877adce336befdf2a23ee14dfde350565d18354d59fb2e25b6b440c5ec3acdf8b882a1aa4de5fc34f37cb3f42efbdfbe6638de95d1b57589fd5cac293c9c21a840bb4393239ac0661931993b44e527a3552c673c70d0949a77b7368a5cc937fb93bddcd54d623845d26463d1be9c81139029624d8a3130ce6016e2928fdb231681995a0422179be9f08b38bab38375ebb718e3d75dc0e752a310c8ae54a7b222b5b5d6646b8f9ff5645d57602baf2f4a7d4bbd67327f68e464ec06c3bd3d1b6d8fe22eccac98d1a418d638fe8932b9885ed27957d2dd9520ab72f45dd7f5abcc7e0e8ec9b26723657942be9846fc470f0088ca75392e439f1cf5501bdf39cb6d70f3f76baa53368a6af8457c48ce916c7220ee6a4fafdef9cd4c9eda363514ddce7cf674c9826e126f0b351d00537315147d487fb17f970879d3982fadee901f20df4516beabc9390936dbe2ea3c2935d4f265338d2cb4ac6ce97f296462a73ef843ee43ed72d159a72caf6de4fd928963dab65afd4e3ccf6d876d7dd9d817755f6d51c86fed7f13f2e7714c923f5ee855fae379a87ca7e0b77cf5139c19b268588ed23149591094bbe1a27fc1caa46b6543f87b15d27a0398e5fe8e6c3d1a5084e64a7656c0560fce4087f1a31f541db3cd066dd2e05b77faa08354fadc9e0ddb7c28a09c9a62db00c026abd892f56dc18d9bebf6f041efa97facf3eca4b0f3f7eb8feff0111cd42d35239935b3417fc364539c99a66b720c71c61faafafcc8eaaf44a11da657276f3b9d12d0ea0c775a57421fcc940a4cf6376bd3d070ece54a49f6c7b84a611ba45c6d603064037a10d91cf931e71fd8f75fe31ea64df589c9025985adb9ddb6604633e0413ce239b31b44c7116b6d103370a63eb2015c6cde816c9a6846e0c8b5586fbc8ecea4e88e44903591c31dd5357ff938612850fad774abf99e1142add684563e9e1627cb48cc8140d73e8052c360ff647100a8840ed95a91a67523fd4817b126a74c51370e100922574baf79b12de5c8eef5f4cd2fc05976527f9874c71126a978132d900b8af53e120962aada41bffcec7a9bb85aba27fc6be41ad10b225692a72f6ff42b6a17dc354b293a2bf8d6c6954d3d8f0e37ac9a59db60a86a58427bf2c9f37bae9f1e3577fce138806c6c022001504bf951f236ffd497980b13418b628dab712f4ed07bcfcd2f27d00c24af9468bd5a8311b091d13c9289c8991593847eb482b8ac41826ac0a96d9b3354cd0fe1034eb87cb12c61b5c7853a26b562794ceeb2800ff7ba253ff825b1c81c12914ecf6b27d97bd8613f82d9ce466c84ba499336b1b0d34dd4d83c4c2a7e5d726b7a9273d5dbc2d8ba77d60aa151f509618783c6501fe2af5526d47808a0031908f27feaa799fe54eb1c62df6ea07a86cdaf95300e71e31250beece70e40fd45677b9ca3f62a566a4c7d8e81c1ed57095c7bf34e5155b74dd2bd896cf9dd8a11c5c68174946e4ce2fd58bb05d416e072a7024e25812806bdcb729dffa96d3787f3e27efe753bac82a1b2b429d6938c9f3f61395bc9b4b4d30e31cd10e85ed5425ede07c04797aca72ac7045fc162dc499ab3578ee30234b45753696b05c738ad3f9d6f096840de38249ba971e105e378b1fb8d838700f8a2f890d1df69f53d4b17935fc88cb36e6b22fccb2c03c2ea08642fd9e2537abbcaa27727ae6014a35236f9dc0d23510b6e8348cf1dc1eb787106bdcea2ce8408fac44a55cb67156267b7fb2fb6076aaadefe55a7abaaf7b1328a6808954f51baa45e945d4715da4ac2dc3503d27d1038c7e3507d57c7a34130f033d1cf4136816871e70ddbcb571830e43e1285602a8aaf6bb392f8531e463e0055a201896c208d45a68c8dcb753528161498ea238dfddec595c9165496db2fae438403df4a9b630ad7c90278f40645fb4ca4f98187cda088f9a89e7d077276dd28386cfdfc768c49641e99586a21ade44bea55770aed7758c9c3043314d1d998eb31b4aedd162a84e72e0aee871735535e4f6c635651c4967749dd8cea4c4fbcab39920271a3e9b05c616314fdf920533ce0d3f7ac186abda7b8f8115fe392eb942e235b24a89c7647f58c576e08879c229794b92dbe7b56c2c85fa56e7acb6e7dfd134f427ffdfced6288cb7c3d3111f1c54fa7f36bfd86c24831565014d1931c204f0f29a7604681aeb7b6b4414cedf47cac97f6dfeb1cacff9e2c815c296e3ae177533ca0a2e09d5cb299667cd852f97bfebbd4b9df4c967810cfd0622b38faeda09ab8d9b2b95b34abd05b06f3acdbcb5e853b02d9ed9f1a38889d22c062ddba84569e2c5c1615263776abcc7b22361035605a51d1bd6a344bd5e6d5c18dfc0eaf73de62a3e6c4d04dd15a95e59c959315e2b2b32932c0bc859f3edb7b15f4a577e496bd8ff5a446394a357f103d3ce6ee5338ed5ec4c67fb9e13f6cf0969af38bddb659b715c1e06fd0be7a47f14969e8dd76b1a0ede097211ad16247fa6025bfe9cd9e6b4404ac51f6142186c0301061ac83f221dd2c1b474885b902f39b095a5cf56b9ec93f57cb592de73756b368ec2846e0bca089fc9fcc4014e3e6151c3444299a082f81c175085744a832a4e77909e72b30fb5cf78c2164119d9bdeb393235e64aa2621ca56f261abf910345feac235ca80f6d161364f7ecc160247f88c95811af759878a15df7eed943824b50fda5b981435cef5ec745b2913c98269acacefc2ce180047aa1f666b90d12206adafc2ddbd20b002a1f97ee41671f2aaeeec2cd17525eb76855a512c60521a110da5f86cf3ec3275fa2a848fd5db1fe808ffa3b129fd86d1a2da8393154b181aa0bd6deb8a5ca33f1cd371c32852614d4059ac1f3f9d3c9e749ed30c7b6a7109218bce14105f4f3f5a74d60a31cdae9dfab79da4d385d6c70c050fceb6d842ef4280e9372937deb5411712e06baa61b4ba352ba7f3254ef1ffad902683659f795fca2256e6301d46e64f5e8600098261d8672468d946c1c27446695ba2a6a76cc9b2af3d8fc05656a3fcae5ba0102bdbc6c235b7d1d5fdeb1f7cf625f9d24660c713ff5eb99442f91efa312577924e11493266dd5c63941a5fc689e3f8ef8d71c30751fbce48242e1ffafefa7fc581774f0e0ac04af937a2e0089d7e1eb9ebcb28786b89a23d3b23976883803c894a506fa95bd950c479b8e8ab75a7b6de59e29b15dd1a3982900e42aa540c58960f8d718f674328d4c920893ea1d3839fe7a40e2056313179b6dbbeaa4d26016658a821d25240042417f501f0bd6f67a1ba8e2d816ec769b992d314b6343d45fb282aa507d4baa5bcb08026f45cd95b8826ed447f3db121554ee62013bb70f37101d4fb9e96eaf9657d3c1e687cfafc46003d6acb5db9f684789ba56ed86d44c822c76217f75eb0540881d1688ae67e60b70fc6016f3e98e7736b321938a21d1b824d61599e439efa2b8c97fca9150449d0e4c6bc60dbef8322a5a0fcff911ba0e0378c20cb7f5189fe6f5b1b9ca84542af32c9a9a297403cad801904269eebb11b8325e3426522096e86d43b96f19fd4489a58b9240a2fc76b7c10d02e6e5764847db4111709a3b4aafd79d60e03e5e61ea2c3f347e0903836007c15d54c740e5fdb0904fc866b35fb933ae99a4c463f9d48015d62a75f2746c6eab72fde32426b99fb0ada91ea1ec83638f0cf84d00bdf63e660709641c6143b32375ca238526285aa9f0ff62eedd07e640be627acbb1df1b9cffde511be7943ea81bd38549b3e86554d354683d08d2c54286f9f06436af35bcfb9110fc5a2b94b84cf96eb490b79e239fde65f43935d7e90676a769c7b0f729eb4786b7b041ec1b4a58d24d83fb4e86d77e543cb916f8f04e2c2cad73ad20fcff52c4c6ea2b7d3d9737e2b3256a60d54389c4ee2c39f0cfd84c4f18ba862cf79f5cca791bffc169a72dc840ce77cfd1dc9b0e2357b11d73e06868d73c0413878bd8bda7793f10ef7b62f3db876c8a2b8594b1b18340db84c3f1f494eceea0ede14cd2bf0b9404c3a28f87109ffbfa140e907163a00df611a500c44d0a6a33b49a185e73892e54f6cb5483786f6483d2667495df991c3b2560458a4d7c27023b203b7db0811fefe17da52fcb858b1318ed1f8d1d1a9a70f3044ad30e203aa2fcd45834396b5e951f03555d5eb731037786865b0e5ca19416a8c8f421a19d104bff630e8b5e77a4119df56835672a1178babd4ed2b39716411c0674d256d11336a05570fd39c423596c9f7401e64a2b742fac22e12fe97834289e10fb33c48193b54a895615a28c4f4d905db6eb02299c7f1537ac9e427ef7f8c91d28c19079ed81c68191a1922b90a2217510834f174a710dd443ca5560d63743ae18b2c63fd670bae84618afdaa09c5bc69276f7346554d33b185b90dea2e2c138105870b00ce24b1d9f3afcf869713663db98ee998aef8597d8003cfc981106e1cc51abf1f1af2bb9fa4051fed1aac8b549ccb8d98d87702dadbd8a0c0ff063cafa624fb390cb772eab79b8eb0c31706e4fdb5a3988fa306353b26b950e4c460cb9ca3c7d78ae7ac0338ca919120aec335412d86196fa21596ddae40ead312b024b5082a8f8a8f3fd7ff95186d2ccd98c97e15d498a9f4b534fec2e668d27d037f1d598e4bdd53a540275d278f20384980d79c715f9a0deaa986beb27e965816e6ca2ecc92c34979a1cc6f74f77827811d69144e36e9b3b20655f14e32e044bda5e73e26248aba6ee115c6ec7cbc7350c608b112be47cfc485f49c947ebe29199f20ab1381505dfec24be5c2fc08ddfce5b4314ecd182fe3c4b2658646f7d5c7c7c355754e620ecf5a354929e5e2ddb7bbbdfdf687dc10fb61d72678e33e562026beeaf01171c1c6fea13c3aafcf01444c0e53b2cad190f6820c74d6f71bb14058636079a4cc4663faaf1f9729752f7daa70f357b52d7bfb1c257b853a8ae20d7f10af6c12ef6371e8aec88534cc40e2f4816c6d60da7f087fe152fe1f64f9ad1dc95065a957150e0eb04f9b7aa6edfa2d2ab4f6c24face5b6728f139e88d0763d7f848586634c423c6116e4a4ea1b4fb13f52876b03c97f2f1209c2771b8a791ca10f9d65513985763741cdf87398787133e4da20fb8517c094dcdc3697b75a12723736d819f1e562d336f4adc8ad2b5120cfeba34c091205981fa25bbdf28620790d11f1ba8149cf5aaf9ed142421c34113bfc9d0ce8187cde805420ed07b7b5a448141b9f7cd8982af55b69dce981a177e03e41b4276aa651866bbf6ab919079ee8ac007bb569e66b4ed12d060a19750f81a83f56ceacf6faffcbd71b89c48b4502f41ec23fcfb275bd56f1f903b4c4a47157e65e86a7c2db80a5727f95ba9f9d1f028fd93429c68bd1d9fb46341c004e2575650f30bc57af56d9b20419a1fa0abdf9969f6725557d8d4e70d8555d24e7c29c887f5ac5f31a29e6c7e010356917f07c7dc46eb073c0451268f5c8c2c199922b0f035904345c1f23b09077126bcd38a85d0f895411843e16ff88b3c1d7644d59281a144dff9fea2417aabae4fa673ca722daa15dd368ea8f9ec708fb45c92d6bf37a69decbd86ea9977add83acae5359e5bfe5db60ca6b559d327dbde73dc414bbac4fc58e41156e2fe57b4602d1ec5c63251f20863adac6d4677052b4ab7c066381ea4a5f36aa84821a0d5c047b965389488437066b341ecd2504f6bd0a5ee8f85475d8f494c302fa4681a16f0e9ac22005e6f4ac15dc90408d5ff4d0384b1c882bbfef8eba61349905e9268cdfe75f590c980e07cc24ebf5cc3851384e790985f0fb8abb85a254498f8a62eba780d03bd26b7c71baa34f69c5e3ffdf3d1815d61b4794eeccc59127f71305969e9f3360f16de22f479860efef77120d8c9b4c89974cabb752bcbd4e1fc67c095d66e30f721fd392181f935f2fc94cd7824f2cb14840e097b2cd25802b8b28480a65aeb27d02355a2dccb0067fa3fdeee2b853476a72557c93575d67a1f58e7808b4a4d51aa958afc6ee764e82ca850c152e7ee09155a58869b7ef746f82fb029d9a90ba307c609e36c7287001a4446b770bfeaa7f6b2d44fc3ca436fdad8558df0a5a353ba4d68a7808a5319097ea4c20d9ff4f2ef623ff860540e27cd0c16ac595a821c25c92a40cb1a2beebfbd96dc149f6fdc45e51815fb231e5a80ae89b99e8d4e6d8a6a7b5c10eeb939d2dcb03d47c771b086b0126dd1585bbc815e72e5646b9b886f6ce56c8e9137fa0d4f232ce3ff1ebd9653d26a2a1ed409a6d1eef076f8493b17a6adeeb0a045ad79297232b6f32a29fba9acc1b5ece711d3f41cb34f2ba9d867e4f54d74557b275b39238791efa820b474b505c9bf92aa214dfc966c29d39335c61c40c73a84b37c3fcd6af69d710c31b08c8990c83f6ab9509e869e28428a202caa13193642042be71da27be5ffd2211345582e64e0d639d3e6c41cb4331dee18aab1465f109af74536d6b270ff29d22ea3565342d39bbf73fa1d521799bd07383d7b257e93bb43e82a9ac1e07eae335c9eb5bca84548500976f46bc99143f2604481480cabb2cb82aaf044bbd573781433ce2289af77ad7839c89f58a5b3830f00d15e82bdeb232d32661d94ca225ee07531140078968b0217f325165edf77e44aaa75cb347a7fa4a4d9b305d7012bf773190424e4a5c42f2c5b6653f7d2c5c951262cb14ab1ac703c23776c80c72c49f1fc6169677504493b4e3432030b5818a31dd2573706e7822c7fefa4ce25120323505a347429178836a46bb6550b4216ab17269f36e663070cacc0751df4c3d0368cb0686f039becdd78d58fecd5c3ea1c7118104430e642134c15bc64c66290b702fd19e5cb6bf3c1092d1d710d50129108fe9f9b8c8d1cf202ce17fee55e54c2dcd388605e890a18c343a0b6d95d9d2788d2585269fb5cddbac0e6f0d9611221eb9dc8b301a809933bdfc808bcc4c7c3b76ce37060328238869af0cc6b9e58e0d75e51c83ad53c57d7e9f81d30dd1a2e902df8dece08c84f1bbc23554855d5fbac41f4f01c12ef4c9880afbec9946b1cb746e3400e1df9348b5df4fe2ec5a191541dc193e7a89d47b7562d6ca94b40c920909209494ff1a72df3ae3dc673472c9791ffeb2832b246d85f53467c2995fb2f14ce3f2c140de5c012835a92d2a333ced0bc059f3d8a5cbd4ab88e12838da233538d65f09e91e033a9f8b8f9098b253b1524901288f5fb7ef748f975f7da49714f112422003c0b85597e92d428492d28b86e27b079297fa2d1cc98c030272250a47ae2067c01e5e7e0af2f2af0fb2acd69efbaa0c6cb77197c2e5e3e5b30233c818bcd0de9941d83b19a9cd78d3581c36c12c1cd3bae8a34f70abcc4da29eafdbcf4da8ce2cbb06f62d6ff32d1bdb8a88890967d7a0535a532460fb665bf5e3fcc8980b839a7fccf304ba2a4586aef73aba59325acb62942ac064f9f3af80e6da7b93b4a3f294a5061f3e171e59e4ebf9ff5bc0e3cbd7a0c7cfa6ecfd338f9ed17c316cf39a7b3f0422f6c9f5b8f897a1089fd333828c232741e8df7c1fa2454462d686b9e92f3cd9facbe1588f850fbe43209cea14cf9912a66c3f1b4cc6f09b60c1f2d1a9a5f506e82192b19a51a32564296e49b801787b6b5203e804062c6e8ec2b7b0617fec2ca8f88de48a2f45d0ae4e924d205a60ccef90dfc6a498cc2fa70add93a559737713f09d5d60b23adc893cdcf3143f373da8173fd2917334e017d7a1bd3fd3e7ff1a09fbbdd7c9f9812e7b8decf183f96cd9fa98a78d1acf1ebb721edcee07fa1c169e420f38407db3c2be5e9454ee459af617ee0c650989d848fd16f20cafc8ca0a5c45440bdfde47ace30728e4d85f65585b383a931d869074b8669191494952dadcb90c856474bfee5d4c35cb3de98330bb70911d200fc147a582891328c3efd9c7e8fa9c92d9388ada6f4c8badafd38348f32684e0693988779593a7f43a1238f79dee9065cbab8a2f13272f3481f619793e9afb18ed8c0e138fb9d8ef8068d458781072b66425912f04cac1ee88f02e39f0e983ee89bb7712a5406a1a2580a361e864b2999f51f2494e8a1fb3576306f57d906147a2b9b229f760dd96fc1b63c447eb612bd23651dab1c291a0d2a35ff8f0af84fb2f688bc688bb463af8d8b10dee226ab6714ce0c2e87415a3650325259e1f921360221464f7c5919c32c36c1a378f14b10c1101f9405dc85247a65adc145e0673d5050e8e691efa2b48c80dc9bc80bf01a695cb3becee07f3762f1aee9b6406742083322e5b84e2fc7754762d09549ad0b9875d2c80bb54ba688719f8aea969234fad7792fe6938dba40ed79040182b32e2944be72ecfb6aa32f6f8e098fbda7d4b6309a8cd96636574927218b3f1c0c2dec6e1b15e6f960af6f44451e7bcdbe448b02c70f7b0edadc87ce8e734f64070e7fc16195db34375eb5bd313e1fdc27458fbe5fe86e19f0088b0ec3cfc575cc8a771a1893148153c6c5fc1fb5354f7e4e5ecd2e82a8a6ef787ab4845fd0fa68d2a024f14605b0c9eda9129be5105623a26a9916e921e2ffe5ace73c2f8839a4a929510589837e997e992915111af12edb5c8d6d52e85f6d9a261a0c007840371f763d7694750163b51d099f9625ab30a5bdeb6f884e1816e335ae271d7ab79b178e643e91900ab8f42c2775b581235bd6f164fa3aea100ab8ad3a679ce20dc602e60ffa2d3b35693bb8f7803429f9b99d58dd2b7cc880ea53beb264dfb10bf9dcdb75dafb8634672bc5d8acc1c8f28b57d200b1be9fafa70e27fa94c377c8e963e52a27f5b1b51d79111180aa4a57557ab6aa91745370e2299bbe585eefd996c1f4bd6d372791f8fd21f19349a242918a2e13e8e556c382e4834d71b6378150f50fdca811946b441dff74f6db0bb7e81d61b04ea0d64ddcdfe7aa740c23c1de18a5c83cc6eb83e02173e0a6018802973c08c82c0453c345634ab4870a0eac633267bf23b1a670bc44ab99a9a2e909dfdceb6d44e170568546da24942e9d4d06ee03f7f18a3257c4926b02fb57865ac7f841b549c0652eaff5e7e9477de1c9f6339364c8458d418f12fe3d4c9ab7a58e62f4e11bac6bd5a0b3be1864e8eb92702e0e9b89879ad32e5d921c056bf1c2ec7b9b207e2a31c30efc92140cff2421247a12de459deea8b7b819c7ae452e59b67d1fc685f5a817862e7e123cb5704f826a3cb60551b2e80a0cfba84fa9dab34e5063158f7d1b4250847d2b9c9e61eb60a20d52bf57d8516ba9f1f52c152aa56b27603cc2bd95c888d91a10a98ccf0be2a87b139db6ef409afdb43a3d6727a752f9d0e2f87b8434dddea8807dd2afc23c2b5c57e1da572d0adfae93d66d66b2a3864bd54043dd63ddf9262278285eb5443c5d5d402d9da168eab282e3086cd3a97f548a5534bfa4910b2837c8ceeee2c3ea66efb2d1ee7b4d6c0fde703a2f9de3f5499369cce233361d96f22cf71d0940461d86bee75e6d66d3521e90bac026090526d4d3c60cb9aece9a1ce67bd49b7d2b95845e3d4a6f7c627360a3af734c07d58ce80079764d9687b888b79d582fb317515932c3271fbabe91800fca12c46a25cc5e92d2832e3fa5bd8e429230b2e70cafae878aabcc0bbb4a161b7104d2dd6f3cc0d113475719f7a2a13f4bb51ecbac2c2144694ce05aad44bed0ece40a941c23c0a8e581ea51c0d3323f1e04a4f54c867aca193ecdae1ceafd4cfc209d1bf1bd93d06bce7abeeb5f4c788f28f398ce57cbb13193ba60c3f25d0c8c0e9d814d9fe246da1855672f9061a0085818c1cb0ec86454a729b15f3b06b29e0d2f6e505bab1a01065fe414ee04c67545c8dd2e051bc7c83a080f4ae99f873bf9e58c83b683540b83ec126cf382e4caa5c8aae13f89d86bd34e7b765f4390ceaa86ccd4f4f88d5ea87c438029193031b139c79167c53c2d2921896252e0333f09f61158928243430276b380039f40496bfd4489d0c4082da40b711622045b90696a8bd3f07e6b93f79249e4a76514abef76e1c6f7d2cbebbe69a82219088b71d2940571817c4c5c8da56a54645109391a962b41dc6c3d91b235dfd876a7c0265849f19db6a72dcfc057845d84ef1159a9bf573c06c22db21ca34c873b8a8c2216002bedde76cbe38429f2055fa46f342d2715b4b747e30c4aa9ae638e4cfa7efac645429f6609ede9709f7c577a8f64f2fc98b70d3aa7522e9a7aa1679240619a813914fcc035be799da918f8b2a7e9c98e3c48c948ac6c016420bd4a7488b66a7ef74e7a41ed128bcf974e33b7f1b51ca6b2db9109f5e18847f29264421c426ad2e42ddbd9c1fd0cd30a9292384093edab8a580d78aa7fce3c2f4c4fa93e86b28f45a8437e3ea3288f92baad8f5796be9a9a1742c8fc371c4b1306dcfa2502f5235af028e9f496908f43ec7b984391bef19f70817968218e0f18aee4cea9ed4450119764b736390375a184a6eb6a1ae3ea7183f1fb7212d4092d1b31426d1291a9edd60a18cf9bd252cbfbc6bffb4d7ef60c7f664d61ed46293949205e8e069ca338bb4ad68bea02ff532679a87e3049177f48225883981920efdec05adf41ce3cb52fb52e2822864d7b9a33c7dcb2f93b1b485180f6de84f0b6689b54b8a06202c463ceb39623d39ccca792f227837f4bdebc08b2f2f6dc71a26337b3b0fa9b67194c7169468ab554a0a495b640b1548fdcd23007fbb734253d588dd83da37da9b5ba4c51cc512749421aaedd4ed36d13ac83284045e11047da4b41d0a12e7477d642d6839f44878f81ad118ce6e9b00a155203d912178c49790c7166837f3a324c44fe6e1491b7b6fab7864a409eec90a9b5f9dc398da13c6819862d10b901382877780a5afda108a596eeb7dd7ad586e269ad5ea3c3a86f5d9ca1738e901551a705b5dbce994e99262a8db552ab65b478c8cfff1f26337643d42c0b29bfd71d582b75e74a4f2ebd08584ae65b8fe77b26b810c8549923c93729285253d8326f7e6f942ee258125763e7954fc15d62081860c2577576cd58b8e997bfcae021242a20436a35d10a7a30a403e4685718398c44737bdf38b640f8b5d1c9f7b71c07eece4ad54db68b369d0381a497ef4cb2620d1953f66fef68b2c90da0252e002efad370f17f4d62f86166f511478a1d244c83ab96699f52fc31321d894a97cfcd51cd475822e691b34d7f75e8bed656c16315752ce658bae851719ffe4d717c229ffbb17a50df8f0d02a16f044e52fd0797451fd7790e8b24eb6e1cae808792abcc3008b55ee63783c363690da1d6614e72d7c7a3be732bcec238ffbdb46a44f3b18f6380e8c42c565867f4c643670cbd09ef901b32d849b7823d3f9d36862be69cea95dfc18f28f376190dd81daf4d6bad5f54ebaacae2fb261989f44d7a43193be2f35d6b6299604f361596ac7762aa094b6ea5938614c26d7ae7f077ccf993004b5cd9b25deb252f5060f8a05a3fb1a1eba8a208495658876158b5b7679e4524a7150c5e6744a47041e0479a7f4ab6313c127a2ef051400a1f61ab9496c1b60dde0ac8ce9b3e71c78f3da4e33eb7e2994712fc522729d351425e0dfe979a280d65ceb923b925fa7c0477fc14dafac2ec3d3b7169dd0f673769a310671272e9bc021956ec139f3e92bcc15bb4c2e600fa2ad07c23a620afa2222a47220ca0d11cf0ec4a3ccfe02c6243f40835b5bf5d3e74da4ba78f3c9722c9976f5fda9270655963579e6ddfa023d06fd86c61eadab24defec228f6f6f504285367fa2adc6af0e9708aa211403f202ac82df9304fde6dd1b1aaff45a554f542d5376ec8b3c19054c28c70691730967a423525a72b9a4c0aa64abc91ee387f1e541367bec3d4468aaa64821d3ea9a4ce349ea1ec9540c0211872804edfdb255b5c955ffe3044ff53aee3c0c587ee56e32c3169f134e2eead5eb04860a70ef62164d62738217dbac1ff98fc99b3c1e6f367191ba87fea854883869d200a4c28dd4d3dc89d6f027c276a0dd96bd2ccfc130088eb3eede9214e54b3db731c6ebe1f92d52e460575062c362a2aad6e08c46bf07ba38d08b7cda25e258f909548058b7c9766893ec614b2e2999995a6e0bd2c4093fd226728819cf4a958fb3d6f90eacfeed913d287e745ddf1c1aa9655e7803c1c40c0c6b70a8ac4872ab8abceda5038c93ee46861c352b7389d2d21a3a8fd04d69f2e61ee67cd69351f15115742f9c49b654b4e9ce53731033db7ae67eef57036e0e00e570f28a8020d7568c32404eab905906bffdf8cddfe66f33bc0f74cf238d3a89a6bd44ce6c43dcc199fc999701c4e171bd515442837f78042f705b9d77d8bd82f790bbf99b018633e1ee51817123517d20b1e1867b4da5e4298e59038b8d4b22a84f3189d82cc2aca966b41845c31e08b2b4b7a43ce9be5ad2712c3f24f4a78b3c01ce07aa23963e156282251fa7b37f41054d52158d1bfd29b6cc7581d8126cfc0390d621ccc43945ac07500626ea4af0eb1a2f4218c3fd2cba533a7f9d02f957c9e68d1983a5bed9fb207d3fbadad7824d0833f4afdaf14a2d101550b46c8e933b2e3b6ccbf58185f3e63782e3c70eb8a9fa0fd83fdd07626b806f01e41142de67fcb1e6957f26bdd12688b3a61fe360061d7df04c34c03df9a13f915cafc35b6f402f2125a24cf699db782b6264c431adc2a8d8fb9abf0b9c88dc5db5fc91f6a7f2ea92237a2bdbedc4744a3a356a61c737edaf973a721149945e04b4675206dd9911b0f7db6fb3502690ab1503d1d758173c23bdd119def7e56b8c2dcb267456db01c712f6d06a481b4d1b1df34cbcadbd963cc56b2e05dda5fbee0fb11311f31d73d77097b384a86e7e91fc75eb65218c6bf11be0c39a833b4336a0189ebd1e52d206cb46104e7415837f88415e6d4d9dbcae43312a2f6df63c61cbff27918aef9b791c050e3a7331938a269e21a472a2cd75a1c3e11ac7c82d38b835303135c30894ae6ff4c1b5cc13819195c1dc0e19aea2533f2578733c0140683189745f93b703023ad2323710a252de04a978274ed49897da8dc5914966c85466cc7146aca6b00c66be2800768dd7b81cab70bd0eaca00d23ddaec3aacfc50d7b928907b0eab13bad628f3162950dfac8d09a8d700e6794a3c888043478eed3e67d27d6b1a4ec88e8a8ebb326b9e47de8c4120ff2ebc576733f0e2d1b0e7f2590ba794bdbaea36349def145822ff796b0cae835976f2d06a6d46a1368df744a9e3f03668296da4f77919c07dc8db77a4fbaee9f8fd07892310a70dadfaf8b41ce2aabe297a3c1df6938f1a449788de9b584568c20a0a84c633b2c53edc37290e586c318a299c7b18f44a889d49b1f9a3d4a6609d05f7d2024dbcbfdb2203a20684a0bd0d879da0319f50556bbd85e21c5e1dac6f95d85dcf4be830d64def581e1f74cb677e8a9437bfa9dda66e47f1079b9d98f1882842779929717c6aa0df4d010057b1d0687a7bbcc2ae59badd02db1ec7e2044b758a3d7cb3ac68ea73bdab9e9dc381b11f0f8514dd10e984232005d681f491ac96c8925a0d1df4cda1f0604f03e9f68fbad690ec2e8b1b6f5d0685f76440e9e97d99ba7f1a2b99a0b7a000b2afc7aa564954ff23bc71390e8b5057efd1833888928f10d2252ada6ad5119bc06e9707067de9338c3be869f95dce8b08d48a50c6c4003476dc302475e4c6396e6e5631f761e20fc954ff7fc5525dc130414fcff1164d495942305cefd70118daa5708e80f19b0d65dee8163f6e48eeb5c36319fb177efcb3b5fe63b2691349612d574193043220e53f328a71098e9877ac1e8448f4fed10ebc91ed5175dd45076c3bf7a756affac6073b7d336397f0a65240e88616a264a148baff0208e041c37b6f89015c564bac8525277034f5ba503bbfe10bab2dddd5a2a74f871a79ed4fdb2874a30bd653e3156c2c25854003f6eb7ffc39dae1a8fe40d92a1ad1241539a4a1706f9e5234865453faaf466e4704844ca39a360183880f97032b2ff5b2e20fdcb6f34941ec9bce029f0f1e6155922137810c96e5e5d9fa32c594997cec2aeb67af937e35e828cc4c123147ae9c05c3b72e3fdbb9b5472d5032b255a48667ad226a94a39520a8d1a16eb783687a512f6b106cdd2c09d61dc1dbf46f2afc212b53aeb1756c52b8725921a610c10c763df41cec9f45e50d5aba78f12fa4b3eb23a5c3ca4a2644ee023aeb758b21ce472a4571de82baf466543e998ad4698bd5cba91b6e7c741da5807587756eff594fa0be7ad7a0a08a33a81d649e9dcea6b706f637cd6d588a001eef840bba2914a519031790ed968ce655d595b6eaefb000fa4ecf46b736c44beeb8e1e9a243403f12e92743fb3c9b9d138ad27b74343cd144de79e670c120150c7a7099b26edc1ba364cb54140a2be4ce8cf61c8f6f8cac002be1413eae27bb34eac78d5aa8e8f71ddc5b6a2dd1896b6c8a1dbc0b15bacf37ffb51f6db6e93ab95239ad012686069a27d119eecf79c2a8e31ce87e362cb3670202e173de2da8a9df2cd5b1c60c32ca5365da32c93bf3b2265f6883656968fa3d202c4cb1f2de641c4e4d085765eda7681fc94afcaa5c52badd9b1fbff0e3c215c74df1ebcadc1adb31c3e04ea4df5961cb75035bafc069e162604dfc7ffa2f35f2fab46099d68d7087d8e84b2862bb7b8db910184ab37ea1717e43fd7dda7d4ce6273cad6c613dfe2dc7da76f9abb395b6e311a63fe08130151df154a491aae6d822bfb7bfcecdac385d25bd5372b23294c8f497504eef8e6bea9cf1a235db5f3132d7e38185564f621359066f4f76b36df8f6852185423ac70094f82e1e13dfdf637d05adbaa857f7f7f2fc657dc83b14b60120747e120567c75e57dea66d3c233241e0e5b313853d87706f5c4afdf24ddba2d473a8b7fc76e4657b9cfeaefed0f3e8f7d30ee222f6d585ba5b1ca7c00a72ad76976647fe622d3acd58e84282d9eaaa0d46618d11a2097db47e543a2b099f0d49947d9c504991ad2e45206c12be45009f608c298cfa73f53106fafef5b6e7100fe8a2a41401c1562a0d158492ca0118e8b03e9ca7d9e399aea8111e6fdcd06a1bc99a48b8ee5724428a76ccdf2a00be7eee68782b8a4e925eeeed72de8f45e7ee5d3ecd1b71113fdb09b998166daea4d3c85a820947041ae2c1c2875fcdda49407ab05e643151cde4be18052fde47899698b40585173dd9980c22b18bd975e89983e528f5f31949b3554af8d652f7a44d5549ab2e87552d43139fc02f1dba773b2bd509e8b33f6d25417b7fb612e4ba0e53c82462267d3e5f7916edf866a56b0d25d176fed733d74333624bdf4178d87640bc00f20fb8e29e62d20ce6caccb7963389d15628ccba63766dcb6ad57383720b695d1b713b16cb956c1b79867c8d2576699a877f5848a5f729e681bb20c8d2a794182bc35510acc34804795cc82dd2d67656f9009280b2c3c5920c65a1ee66e1fad53c664e761de03e0cb8fa3d1a2eb66fc0314fd332ea36319fee1f94185fd5984c094763a19ea090d00ae8298ba4751d582bcd97a2f9b86e927c4a4efd6ed4aad05c8fac76adbcd2e5152982673d121d66555a1134e3014ebec85d583cfc5d7fa2554951f2016d0ebf1f4295245bea704bab1931ea31248543f205c67617645d92ec2e196e21c386682127892ab01de2f46ddba571a812cc4154cecb3412745bd5a4d449d714c79bc60d815edeace123f2479a015b386bf1286c87da1ec17f4a7e89fada546e18be4bbb19517136cf472df676b0467ce5ff21ba2494f3ac37c4d78b83db30a9efc327074fe1674747ba562c88a102dcf3ab877309eef9d7e8969ee4cd672d9c2fc02d3889d56af346ce35892ee87c514e695e5b9b322d6c92987e2b87bee53b11d85046d470af055bd6c76b785bc5c41474f3f56b6f8aee443dacf729b9e84285f87028e89f9237ee8862aaa9a49e6560c6d9af7657257b047900c662415aef9afaa03ba5a834249cb42101c3d5ed3d97780a8496d17b16972649ca2d1d32aa4339e883e0471446e1a2ee749b7ba1ec493cf0fdf1aeeceba2469a4d2bbe315c39051360b6f8c8615019ec30b9e43dce0b95e514e4e50eb536d9c458354738bf0be554cb8113429fa01a07288d8579517cbfaecb4168426ff2c12ef60cea0399793d44f57f5d15dc9d80d566375b6fea81e680197fa0bafe958aefe029c58ca90984497e46a204d33704de23e0f30b73e797ec35dc58bfb5dded7af328e36f4563e8325034b164ba2dad31bd6df410fb027aafaa5256e958533c8649417fe882b62bd47e9686018cdc216d83b0aa2676e30ef71322afb9249ed4e6ab073352f3cc82644bf1b7c95556379628ac662798bdfa86158e16dd222d221200c88cf362ece4e1f41c691a505823cd13b604e7d5335961718e901a4efa73ef23824f129ca1b6beeeea0d775c72a29861d9d325af1753c46f00d3a9936d2c2eed08f41292269cbdccd270a0cd76aba018e6b4d77329cc8bdb3568d2c3c1f9c1b4d287d8279abe43743b126255d15bffb10b4c91b3d85252dc5373f13d262dabaab91a7ccba107ef73395693dc0c33f4729f2832a496f601d059645b05f1800eea252b7d4e2a03ba1cf5ef32acde222bbc999a33854654425348e7d0b13171a3c119787eaba49ce055e9e36d2284034baf2e48d01d76db96387298320596be18270417478676c03513c6e3ff012565b59248ee9e9c40841a597647216d009da6c19e05ae06a3a0fe694acb9033bf5112385e664deaf161f2d4ee9ccd155b619582bb952c467d49e41f9c36dffcdd9b4115e9d04a2676de41426a8ec1a650c420cf57aa10665f632e37d983a545932c61e550f529410cba738b7a992ece661aec79e77c29db3d6a98e62c18d2725741201384f470f009853c950101198a5e7be014aa747817b2052f1384a77b1d1ec492c3d23c770db983ac239725b192333b464fc07d9b2a6e913b72c1d43948dfdd6a24ad9ab24b08e62aafd111e3a9044f9e0077410ad788b9cd61494b4272f0b78ea95adf9106886962f4b67498d46d9ba5404c49984a6c545dcf08b12413edd3906a6d8d36609bcb0bbe5e2b838fe789d99358a6a406d2149beb2d24535ad89c6c0881aa70df959a4d8064721cdc915ebea03c48ab2ff6b891b436e6bf994e6665df965dd7f10bff3a5ee2d705cf52c29e53aac4225b210d6e24b3dbb93bdc8f61b5ce27533be1f8304bcfb25df74b4a1383cd820dad2c3b53e33767b10102f9677d5079f7c68c4bf7e715ab5fbafe466b0ba635405f8096af8e993af9e8d1e3138701ef06b056e4ae479b811489d6ae0055a992267eacad06dffa5a5902e263b1349ad088a172fb07256ca8dc89236ce44bee32e26b265e6f4a0a443ab571431ca967af77fe12157acff3bf527414c6abfb680b925e87e3026c173588365c98b5d2bebe137efce334302856a1fc9991c659342e6814a6f8589d24e9ada3eae83dad7da8cba69f2cf409ce8862a72856dc4f04eee1b4ba1825536fbbf545da5f2d6a1da2bae19a775a7e279e276378a39b0dd83810593a175110b52ba4b6174ffa7fe77e5495680adb2dfd8fe3178a2bcb276366fff5e87dd1627775c3e6ed07474d691b3922caf197bb33533b17922aa779ff6d24b338d8f7792e18d64dcf098e79e8f2a24809e0ca2120e8e07edd16bc4e55e7d6b5a6ebb2abf26d08031fd96d342160c3cc217759481c089c07ebc6423597b5de09b8f93ca7d6c6ef9ee339496750681fd7654106319ac229ef8cf09ba9ee2b39f019a5ea62089d262e0abec4d0a7408c91638bfa5e0b62c4b10ef28eb0f2621c7b5ec339296e105e96e410f70e409e65f0ca9b680a313ecd06a5f90fefe6ce8d7652936f74bb65ad0c7062f33e77d40f3ea061b58370d91340f789c4c9203628f78d67b95e4dbbe006b0ccfeea5750fd0e9dfea039f6f02c892207385f63bd0263b7c8d3b87db1d24e68b6638edd6961e2862dbe68b0832ce803661199f65feac429d13c01c7715d27ba29c19e5b66eaa76df1450cc8a1ecea13fa4e69a32cba93ca5955e04cde6bccc68b68330303f78a66673d834a94865b100e4ff2722acbe4558d1764ceffb854a1b0745c1a78b68c220f00356406517cbef0ed8a975cb6c88e2b240be3b841e4166917130032e0c2a657efffd2e84577606ab1983cebf5839277d4b77012f2b107ff4adec9f8e3d6bfe1011881524b6de1dc024fbea980b89b6baaf5a52f617aee910947d440eb8d5a448d082c50a092b829ea44e06516019ee60ee938c34a4c3976d180d82d3fe18d42c9a74fcc6c40325c094e3d0722b7fc17968c518519b884a4be690b1b285d21e23c0108653a0b1e06f6523cdd97cb1a39d08a4344f640563dd35f28db92aec3cd3292710db82369f6d40434cee5948b862f246b54d4fa2ff86a3ef6c6c7ab0fe5fb29793c3a145e7e225bdec3fe431d3c51acc76a1110f259fc501abedf1b9adfce97b336f7616a7312c165c1a084ef955ee4ad297f041add2a9258d7c4b8f1ad7cab25cb00f6c1588f04f245d731ce4c62e4a647bd630d31c0d0f4dbfaac0a7d8009ecaeacc71bb3b52ea39112d154f5c39f44523052f535fdeaae54b5a1d24118c9cc2ab39ea505371cbfcb1fe038dde64c46e7e2c6a012633166ce04bfd59a5869886a12e75ba4aa819fa2167347915dac46789db525aea379c71b136f30c7ed311a9e0773864d651d72b094ac66c4f6c424c690b383f5b14495c0ddd03f352c5b28b7d773f67a82ea4c35106bc128c285cb7eb16162e54569fd5b6a1f18b7bc190c2c258c9eac87f939aa6ba734eb3c9252dcf540510dff4e8dcb949343e26b75285c1de642f37ae17deb7269d7dab51fb98d12dc18798361dcb9c507ba0eb4c7ddd3cdf484c31782e89ea6a240c903679cc30ccf59b6211e36fd662ed91aab4f6b33514c8ea3031d7f3bd867e5f18bb43e88370a299e9102c806e3f4581058bfee720e1bb1e5da7661fc2e07a3aa6c5a57cd435d7a2a55a8987e09ed7a855960753a68b3509021c093476dd2ad535a7c43d426b2710cb9907555bfbb501a644134a7e964999e57ef3c9adfe59d63aae6b1c51ed2f2795c1f6ed38856862900d0155c90ab5edaff11ae65eb24c32c84e90366fc342c04cb387af914414091338be26ba50171cb604e496808fe343da0307ed1bc1ad9a7d1b595bf9fc6f7fbcce1150de9c610e5d4d2f1973ab5a5a16879f1ffffdb907e5dadaa81c17fe23a1307f5664b0f279850eaa29dd7e89d67ec40647365e1ea74c72fb856fd85864a35a63dd14439346e031ae9a6a549129c102da8695db3e22539e14921c21d7a83a65d5ab588da190d6cc73ecbffb7776711ee894483bd6df42519c883c3e325aecc70c44ea3451ab51d18cd37bafa67d9053ea76375cdb6f3477345a831be1955c72eaf7fafc14af33d22f61d48ce1c23d4f691a00246c0792a98d021c29f83a083aa2a7d02ce3a18f43477f560a1455fd85464d5b4bd5aa396e829524acbd5e7b186ee7c1b2bf08a99c24bcae7f0f669ea5021f62ab691f5e0114f45afb655d26697500384916b4c6e4322b6fe11b54920cbbd9400ee211193aea334fc7497411a59c323c77e94ec12048e6f0ecfa31f37840dc85028769545f70d0027c73bc7f5da02e6d1fce7ea82ea48fbab68ed4ae4e56c089b43da07f4084ed01d8f26dc0d3a2f75f3b8df99eac9945a5915eb01df9c5cdc65cfd14fd8fe2a7b4a635b6186e84390d54ae96f0c46150a17919d0f3dae2ce43ddf3cfc517a91a382ccf1eac7f60e4b3ef85204b8f92a5616c73058d8a8f436962285fc294623643623a8e848d639fb13b8db452eeb50294b4ff34bf29e13e20e0b5a5b57b6ad88ae3b339f2802a7878001512b78072ff0db4ae00f8f155fb7649ae08a65f4c18d4e1859f3b7275443656534b6294223b5e31ac686c4b0e201d0fa9f0de661148d1c79f03fbd7734db7ae88cd932744231fb31e14e518fcdf2bac443ac50927f2b869188accff00258af055ff70cef5a93941d6105cedcfdde663c311f59a2c6b655e7b4137acad2fe88b1e70533ac1498a1118b824955cd34468c7789095d78bce087fa67a00cae2ed1177b847f701bce376ce3c92e5fc8163eee76810013493ef7212d99803e2d5bf83eba5827b3a3372e140db9307ddfe257882ab0c6923b13f546177481c4285d09d21c81967cb131464ac7ebefaf5c75fc1a7bfedbbd8b640ba63e9e6f03dc06f054c4200bd29f45ceb423585a104b697eae9b1e20d63a028340ff0cfbf1322e735be3e16a1d96855f8e1797e30a6318eb6032ae3fcdac0b0d645ca18dedd2ef24104a958fd3686c8bb5a8a441e1513ad2b860e215ac28b8b8d422b888743e204d725264ba01aa073ae208f5abc8c5d364cd1c00b2ec8c14abdd164c212d4577bb70112f86666e21572052ccc5693812a976fd632cb83d15f75bb5834db64c65b377f709c4f4b9ae14b2216634dd3829099856b66cf7d369a3a651056b9eb3b90addf63752c8ddd945f1d2e1929502f39995c0db3ef2a76ad305a96d877045550e0677b314b06cacc609b77471e0b8b9fc0d74201eafe46de431918ddf1898e4af51d301b09fc92b3ddc03467eb92313d696d6cbf3d12a170e423dfc1c73bf4c76ff71226f21552a8e4440f7bb5274726bf6e65f686079bccc464a938c10d181d6e9811c6f694f58ef762baab29532d513eac8e0fe2dd598fdd7b3f5af28816b4e6e564e861a6d62badac9ff5d71bd76b5af65282cc2abbcad8e4abbc3e55a9c12f97fea6f7b0b2581adce013dbea6b8c0406053dd3ddf055980332e2a7be898accc2cbc712d78fcaf1879ced4679a63473f49f8601e51a4065e78ffab64249df8982c92e6e7315a3b8f95dbe1422fa5275245c8ca3163389322a973d3f40c36a726a3b9afad9e0e20547b0edb1bc172c4a143e0076bc38a69bbfe298d233d2f6df6a7f15e95fff74c1b16acfc465ac631a2f1202f043ea2d92cd128d15627fa37d23c3d7f8138630551de11c3afa2eb9e2c5caa0d8b9cc30bba04899ea1d06d42c9062c0e5915b8ec476be4bc0a0c48a2bc192afc243c05e88d60ad0e48b215943d19d4fbdf97939236335df44d66f00dce664be7c843be8ea2f4e571e0af651f9cc4f29db1b921ac27b7b2c2c118c2537bc88e4bf45342ab5dd34e674196c65cff398699bd522cc7da75807344b931b4aa7658524d521dda9da09a014b40e5ec37a2ba0f8d71390198d73cd33612e4f0d9911e82ee5829e4761eabf056a07636e4ac93a6c765adc00bfc055b63274b60e577eb46766cf8745d8907f61b19c728ac32ed9af00276fda190d6d7208d5e71add6cff10064a118ddf6480db268699920db17deb2287742aeeebe376e953b91687c1459bd1793917f87b626a391ba014f6fde645a9d1f5f46ef0e33b4b4b968cd7106a12ba6d1fd71c6a33697194e125a37ef0e97200a26f03048a397e232fdbe7abc549bce056d45defde38c7a99af3e3367ad6f32bc6f9d84a4002f901ab3a036e95c854e31def2f097019cdd4a1b7ebc35a44694b0d7548decc4295d0f86848590f2e25f24931fe3bf35a32d9dd83d262eb100f1a61a61e6da73a438bc16c14e275c8d5e149b6a1b51bb7b030b62c9ea0841565afeb33529e9b6f325245ca22c54ed027a11f601e8ae742d3dca5b685c16d550a41d3756c7411445470ded0720b75c9749dc1e14e01cc168e0993471d1b01a8ea277aaf767d2712acf041fecf56803bcacd2bbc1728250195c093b5c568918e182a88d656eaf38bc7fa29a10e8c34ebc10266a4981b3236f9342e89b77906de720a30a1e13b55cae9c6c76e9fab664d87551db788ef98246dee89bd0aaf3f25a25b710e5a0b9caf962bda86ac5814a035217b2e71f18127762e401b02155e133ddcd77063df1e569227fe8f195a6d0a440b37e567d4b57a5d817844871b49ab06a3724c0a4afdfbb729b59b8206f64318962f93fdf0bbe9615d6afa30b039b2695159ace94351e06ef29643d89632edf0ac5a7016daf8bc06dfaaca91b7d567dba0c340279a28a2214b6352b081b24dfbaa431401db4ea825ef72801a052aab956f8892664cd6f6f2fcdd8d0f284c29c25ce33df8d88ece827e3b8b4d461a522a9505bc320c2571f5c7429d3afb0212c204b5377e64f3d251f05c09f65bfb3b962712e9cb8fbec7bd7f8ca28ed46d2c49ebabfee996668dc4f65071c40371d6b92d91be9a696da63277fc129f5f38bc84f4931b8343684cf27747a483ac898d89e09c604ff80afc9a38d5b688524ab15416c6ec38e053784c1609b2cbb6f45ce81a73510f33548e3f784e116d918dfbac53bc6e286d7b5fc9d846a3410748385718afce213e696e3b1f7f9257ce3c6597f2dced8c1866c48527c4a7690ca33c504ced6a34922c22270344ecead923fef5cc65865aa37fbe53ad643b1f022ad7d56c459054994540562614f04995c0ca85896b3626f3cf2f1ba0c0ffa2cbfe84da1812d8aab12bdb64bf369c22ae7cdf3326a6ff7f2241586faca23da7e74dcaab5b5e1f3eeb297d17b67ae12ae9ec1ec28b7f7efc48bcf7d2e5a530395bdab51268b81cab259061f316f02bb777c900cb7f3669494f146b263e2ebd3aef3cb9753b8ee62bf3aa36bec059b18b0ff977c5ca9c21badc7afdc0a04920740462b207581543e138f77d5b31d2035adcc227874c39e7d6ca2acc024c770532e2d404e3378ff7498a0284c36d8ff30fe805eebe6eef25cc03d0ccf347021abc6712995e9eb2933dfde735721028f19155a3c730abb6f224367b2529462252a5ffe24b10025feb743a60ce572f2ae33edbeef92c5f81e1d0662adc7d4cf65cc83c4bfe46f4dd85b824cc7b058fcbfba1ac110ea19fa9a7546cc32026dcc32365d2a5b9dfe845b7e5d89ba2977892670c42bf043033f7f607e21adcf4f1b869930d8dad492f392eb6f4e050463447b89b32417e7a6b736a0305c359f5e5983d0f81284ddd37d019400c1328ac7a597962757736864fd6ede89216309073934a5a994cd2a03adbd295eb6dfa8e737ade96648bea138644eea964788199f4385afdb6907debcaa682fb5c1bb1419ba7e25f378eca7ffb75ea5939f1713350660aa112722165a361a88999fec9cc712c32ac645ed5d28549f24e8f74f5ef3f2c7c084e3b280d8b9dc19263c4a2ec82feac091506660feecfac987682890caa75e52ccff1225db1c402da5a47f4ba1ffae5a05da18ccfaafcbca9f06d43c25195e850a061e1553652f50544a9eac1ee062d9b0dd3705ca5314f7800e34018e34e80f444556f8d25e30b38394b39da0b58edb517a5ccf70618cdb796b6f051fecc854806030d5908b5715a79ef308263adda0814220dbecf7a845c9b78d9bd8e1800877f2fd652dd294275b6426d6f69d8004b6bbd3c576ed651494245c48cde98e38789676cf532968ca2443347aad9c779ef3791d0496a6bceadf8cc9816ee94c5da84227dd068c459d9d43f46cbced34f080d5973ab1f8e315d50c0770c9956954574d0885979c07b26dfc8bf43ff678cb77b3d3bf763b00b9cbce33173ccc2812a70524fa55b78337b56e2dfe4721e8a99a22d7e0f4becbed3a530faa18930bee866ee77a976bd3cb378c151fe00d52214c63af0b8621376e3efd3f787e45ef4e756dcd42992c8f47e135df3e08434ede45d2d98e8d8faac49c95ce9f8a1f00137cf6673df11d97049083a821f27c6cb006165a78b15bed5e99fc47e2a728eb306052afdee174cee829c4e774d45061ac1b9fa6b2040927150db0c6c3e113a59735f90e98628a15e67764bfeedfd9e4e5f87c3f809e3969be6c68b8b303b57fea0904e1c48e823f530d7dab1f5489be2beb6f3d5e94e9ec87766c162996e255b22a49cc4d2a8162ec0df926f42a30fb368de392fc0b35b18641e5e8417a2d4995fc54e7a159d8089ce2991d302addc724ac24f1f20bc058ab173deecb3b1b6984fa7ac0670cb584ca44f30e6e86728a57eacfc894124684d3aa0e6c72a9d169211c6eda1e6e15f83cf9705797fc0dc4623e6b7afa18402628a81093dd460687596d5b1a7b4ba3819bc65fdf770e8225164d0cd950068feae7189cec2e5eea102d40264f66964e112fc373f8a8c3a38fdd37e34f8b162d4fd3907340360544ec5a8f240cd10d2fd955b0748892ad3519e9e98bb0e1d35e1e4b15af535b18b07e2bf6cb9a627e1d8d7976b7cc690085a80981f04514dcd8580f80cf1588c82751062d9ebab4700834d0ee26a3e4d5959a88526e91906070fa5c04a515eb61224ad71de68a06eae16862344d47c00100a2a7b5b9aff63848ee11d560c9d6558a8fe0573e5d925f00bb6e0e1d607954241bc91ccad374755b3c7af50ba836bb4f626c66d7be41c0e3da5c8034b71b81d1599fef52f029f5a9dfa631ff84e70812823c9a3cf3890b95beff2ce2a05fb44568d52123c055636ac3072e278db63083aa0105daa1ef3ff9fe6979cabaff1b8f536386ce3617d22569c806bbd63c4abbba3667762c38f44b33956e415741fe12786da6af71451be553f9c5fcff4dc0040e1854310aadd5407e5e9608b18077beec428bd66f575075916a45a1cc092257951c5f53a99c9e445148ba9556256e259e6da86fbac78107b815dd9e84462fe79f3ae91c41050b6e1b1baa1eb97e1aa71ec96c172ba98e5327a64baf1113edc19f5af9e29f3ada6c1193a0a8f2200da73ce5f75ad3758d287aa6a977b7239d712f06811f61b545773bb025a0ef5a547f68287db8742c7984bf2423257930477d9f2ed4a3a16a38276f5def4653a502459ad7f9871bda12cad6b4034c782545c6746075c0d5fbf712a541d6275a6619fe6bfdec2d7cc2f0de32eee7cb4d2ede2953032d1776baad578454e6e57580e272d50da33ba85243ac308a4e1697bbea0e60f87299e8c56605db607793a7db7185bbd4cac66ee0988d139883352c95996df81dab05fd6e59e3739994fb6a1e839b20dd9b1996d1b1d3a968c66a56d5b1b26b8f5c83a9dd451de4b4abec2d3351cbbf61493963929ad77e1de3342129adbe038635de658a62650f916b294f2f1dab0642eae714686ca3a616346859296225cf8258df4ed312147135f3dbd2982d64c06bdb169e8375175ac4f3d6ada6d35c77004fa22d75d68033de9a55afac48a75f3608924e1fa0bcf751cbef299fe95629f1a23c6391b388dde28f65e4c3ff5c9c8387ee59d9725e3f0d3b946098bc58134385ed38301e6244f15e539303adac1c10b92088b62d5a3e6a28de6a3800036ce6b9fb33b682fcbe5a9e016e0a24b1415ea48918d1f75788b9482f208a180698795ee1c2e7d095e6ef519e6109b72e28deb4967c591c071ec6c7b074e01ba7c61f26969622b64618ee1d109c51219f3acb7233a8b58a29336df2806b925d19103d61882264f7e966531362226f01db9e3e6ff747b375afbf95d9d710c8771ba579a4f4878fe5431b9ec2ff86886b4b870b08afac92534bbd40e00a8064c7649f5c241a1a4e751253f16ae46459126858bcf84503a81a9b1b4d845363be76ff44a924a7da2805f66747e64d6706f216c72766ff58d843e7cb180047429412a435f3274c909715574719cc105b340d5ee57ff49e679c647c67dccaeb58c76252812ed85deaa49856de49ebbb9bf228707e8a09030d9b101e43c0de6377f7cdb65ecb38e70fb7c7d9cc57bc3ca5d69dca00e55e80b269716053f1dd984790ecca72f6484a15ddd083e3c6b0a209fe77f170b13460445f6bdf52a53bda312ebd1fe911b1a642dd7c4f91fba18fcf0adf685f520207ee81480cb6b0e7783c2912c077bc133445e92cb3a333922ac9ec0e4f6c1b8570cc5eb6db4d2700acb0cba5844035d2d3769d6b90987ffb54550375ee89eaff9b3834e935757c5939bcf5a782af170aa3b8151934b6bd6dd99406db8de1ab2e5158c953477f479b40071d72d42933143d30b6f60a687c021e8556f67115f627f647f01ea27af690091dc8aef56033fda99c49dc1a412d6afed0425f3523749317a40e4961ab54ac0f755ffcbfca1e9be2b03bb1f305bad6a079e43b08bd1403cf21bd9df5d1e8c7b01024190145bc1f531a83d99ee49457479b68354e6637fce52acfce18e245a04cca39c4305efb539b93cc624db43a6b8eed0f9b9322c26f95899f7d3f9f2ca5d84c28d4329358dac018cb37abe1bbdea8e89f80e8f2305d44380c3416a6d461081016a4ae2584f52e02f32bafd3b6859a9b739d7e3d135a47196b02c62685296c8ea622f98ab3f11cbed3951da178d6bb75aae4810e17d6b1b1830ce642febf27b4163a820400b43cd09638b8a42193841c685a356fb2af87861af8c3333ebdf3ac5018a7cc794a85bab92185c4c3a61a5cb6b67b89b15d5e6d6c1d22779861a060fb25921232a84967d37317c285a138c0ed3d6dfcf587e500b54214cd00a22bc40aca88b86346bb33295987dc7062715b865ee25292a10099a97590c0cf2392be6408033d2384a9d85b82109c2d5f8208678b8d53c8c1073415e6543fe969b6521fb7f96e812d4fb4feac28f615baa17d78cff3633bbb9d4df9f0df0aacf2d9e3c2556d3a078223f439f98042d98edcd55c2f724ddd67938972c24bd792cb0b705d2a9b997de44cf12a585cb1e3bb93b31cc0fc0d2b62a7a9e01e53c696446b8da63f96dfe746b307ac0f8c3f164a5eb7057172f677cbaee9020e1f461a2c8462d13dce6a05a1bc31885d1f03edd316d52e0d38765b7b8aceca2c367e856006f1e6dfba55b8178f3a1beda820bfa460506e2962aaeb87828b3ec8ebdcc8dbe5ff75fb184e41459ca7c3e2b95e828182583b3370de289083a7c7dacd0989e2e2996ec418de642f1449f0ad337e5fd1fc292e15476e5a27482097b29e1d3ecf7e8b7583860bf0e955e8687a0dfb7ce3a3ed15a2976fe6efeb8ed177ee71bae98bc99816ced2ad1c7e912d78d700f7b938e1e7136f7b4a3b06442d923807a5e68c1367c5d84a385558e3e73b65470b55aacb4cd9a0e8e44c7bfde8ce2fbf43ced0903a5ba9414da530dee466db1056aa1b6f7097bbed8eba34bb48209495ccf949230ddff5127a9c6e97a04a6f031515ca4b3533fbca2bae6b7eb627080d057f76ae842daa1d5908e278911bfd3165056053f6a5ad2673f02e8fad6fbecff2d180a188939646c7839a8f7ef8713843e9d8efceee1c575562ce864ba2f72e300238aa2cfa9496e21c9f94a50d61c707d26c5a850ba27dae45fd93fda0cfa3b86dcac7c2d010652f7e856e4bca966cf168d73bb90d5e1e93b66aaac14f200d7d4d5439b8d74437098460e4583dd7e6dbc2d0386c3fc97e06303e7efb121fa7dd7e78c63bf28c25402de84f7045bce28aadd166e496d3536c5e1f8df09da80f965e7f6afbe0be05383fdc8a1084c25223af8a404f302c646f808dac2a363919b55683e009135762ebe1775db49adfe0da1f34ecd50bbdbd756043e64ce6bbac82070609de086a10ee8f87ebf383ba52ca49782b8c92ed58705898619e4ed182d3666fd6074a149fb4d5f6c67702f075306a60688676de9f5482df61349d99a0576c1808b8c82a05b57391939fe509679c29a7949ffb67297d6a97697045a44eb443c72b849995e937609f533b7ef564b54333d5da664c17a1fc53e899794b23e9bcaa7da634fbd486242040b9dbd7197d6520e009351aa1170e149f3a06c4e7c7805c1805e86c0a507424f78ce7174ec144b2050ff8b5486df9548e6e8578e0d34ca7df918f3f042c57c2c11e0a5f369508325172c4ed9e0fc944b897842ef2d76a2083c6cad6c11a125f89c3ea7ab58cc3a882a305b9b5bc2165798662d357871d8fb6ff42cb8a6762bb11f8e8ddb0d0ab46e1d6c3b55ff92a624ff5e06af980c3594d5f0b050f9f644a59e2024e967d52c8c34758ad8dfcaadc536729959f1e76d8a7b1360e85205355b944cf0c6fef0a4ac1791818268680bc243c28eca61d9ca49121d670c4e7b8f6fb3709e78a2329965db2c7d24ded33f832d276f1e55762f037d4562cf7433e306076c317b4f98d50a9c0c40ac5d70a5e772bc334fa4d5531a6ce2e2d8e87aec27dc86b7f815bb12ae67a982d4da1195b227ce9455f27903b3c6cb56c34c92bd5a20abb5f6b0cc33cfb887dbeb21c84b710bb4f528892881f14da6c68804506a90ec1864af756dc1a791b75a24f75c28826e0bfc10809baec1ef30fdb8078baf6ae6eb7080bb24c2b62d54c81cacef57ab12588c0c943b9c4f778dafea78b6eed65c10321fee30432fd72c1cc6004e0248e2a1410eec5c90acd170076582528f33abce7a0433c3592faecee2440b0bfc13a4857fd7f7b2a54769efb75d7b66b75d75c0ef22d788f818a1e566e345e5840b1cf852238aea4100d8111dfbea2de359e5571f9312a219bc6a06a09523cafb56bdb2742f4343a8b03df630288842d87448c6b2dbcb15e67cf51cd7a3fd805ee600e12e06fb0d4b214bc925e6e53bd0f368bb52b792694074a094a95da8f9d381df079dc7efd30c5ecbcab45091d81a77d7000e74d7ce3e2b1306789d94b0968248b2b1bf1be7ea7d0a2e60c1adac5a4c271519695474d111199b30c355c340dd94a64e35760baa814dcdbba8a687b50115155d918b65698b47f73de989e3bc17b454d7173171b0b29f2cfa8d44747e34ebb4b68ad33160d61e74d82f2eebf18dd545e181035b2ab03aacc72ddcf520229cc393ff3b479142b9c64433439c5754d921b1b7949c09bc3b7e58f4032c691825c1dc1e0585f91b609c64185c3d5676e79d876f63d8b21ffae70c8b31f81b954f19bdb142a36588e56368c9a337e8f8e175a66d4bfb950426c341fa2f5eb589fc1f04b7d5eb7a18130afea90c57f3e8687434cd346193cb1b0b8b7188e3db3a7af34a79ef06839ef53c6159bb72dca17a66fb46908e33002928a52dafa6b104df25855beb88a9b8fe6d2a4981c89342a0aebfb2825e97f8b9f9def242ed149bffa0bbd507c0059f6309486d9db9eed628428f8924dbdd1c28fc8897cb8cb2b5f1b735759501b7fd1541990b15b5adc15b2735c6087b8c8664d5b57edc3dc90f939c201ef2c649c5491d311506a7e88db10584bae5daa06c6b14dbdb86effa2beed11a3354c44fe31bfc32baca3a7809b528b8798e3e5d9047b9500d5545c38e22a85fc23c454e6d156faeec3e320c7d39034f97669d73bff181b942cdc3b2926995e5c3b50e2a3f86542ad49131814c88f9045cf9be0f3b4b84d13772c03df0e595359737fa4b49e308a289b43be4f3b4f6a344b78642b76e269501499aa48b4df8e7943b37f1cfa8ea1de9029833df12aa44d9f7fc050da99fbc68ef3c125973597f14f7c9f948734a8afea83ed46341f0ff907db22a626a663c28adfd458b55758d13bc77296d8e35c532784b056292b10ad7920d84f34692e575dbe0186cc4b077d879bcf92dacbfd242731d85c9f1368816e5064cfe1ea36365d05ce1555a9386f7f0c0e44e562ebdb9ba070a0cbc50150cd6f80ccc116d52bdad06f2b2478319baf284a46e7002b71825d9f13aeff1b22f3e2ff33ea5aa72d78a465c5f56fb3b16c56eda5fd747101a381298e2ceb02d6576ffbf54d131777d7341b0eebe02caa855fe450821037fac2484e25a2a5aa26ab4318cf8219b4467bea1218c354eb8594e9b67a6e2b399f970103a2f78b83e3bcb107a2897b08d661e3e9f23799605a2d46565d67040335581ae904208dd1dae4f28e1cacdeb156ce30690b27ed25c2b905893425dc946d8425044be205fe08891e800524b97f1685fce1a4c230d467f3ae4b958d58f83e55432c5084b922ee6e137d7fa375c4893971dc98a202c79ea3d43ecf95cdfbe4c67ece80667fc3d2ea6b295576416ceb9a2f97282f71e3c05882748395414a9a21081793420314b9359804797109f0b5f0da1cef09847c89cd6fbd675c08bde2bd2e1e89ec2186a0ccf6a5a74b245e4e86d6163c40cfd267c0d8fccf69dbc7d25ffae7718962cd5f29a272d709c438bf76b3f34ad6dedaea73239092db7363b84a354db72ed2595328045e681e199f736f3e694761e841eac7fd7c9053e455226cbb60992f3ea0a13f9d9982d4a2ebdb84f1e2ed37c55e96d9f1be182aa5a135cac77982970e90cd71d8bd57c5321e3f01f8949152dfd8b8866bfb42de566e497a7cdbb0496edb56927f85506addc7aaafba29f4a1b0d9d978f34ff1ccf03238c1c953611858e2334526ba755b88b7867c8cee66e34540ea11bb23120494314571f690a490dd9f904b0f9cd2c7f06cbb15f9acc89941d44a1b651b8ee246668915cb953c940128b13d857cc8212957c5915aa8dad82fa5474bccf9da5cef75587d57137d882534eedcd598956cca6aa55948a8cb876884bbbba60ff5fd0c0751d4140ab5603144ee210d8be6e29f93d3e7b3ccb938937cf6c64494a5376e0110945e1ada0b09ea9827465769ff0a310860dae4e651325ba33f627001c81764a019a406709743e7c1c9c427629f5dc2c7dcb0561a785554b1a25966781c76ccfd4f1d88cbd895a0a957aebb600288ee60b83e97129dc71f850aa6db534707713d41bb36030d2cc5439e76586b23456240ae1d268c88bc15dab0cbe30b67ec9b2a91165cc14e47f9e0da06d61f91d3f13004e7aa18508334269ee847470dcd7ae4f85e41ff926a679fc4f7c53545ab25fc309482a6fb6de808d49b6ce58c9ff84d79e75996b9423763f857d1c54707ba11ff7fd1cc1388fe113684851968f397099a28dd880d0033d3f50ffab33f1b93370941bf0d6c7605646d5730685c5859d9b6f80d3b268f2afbb54e1b5330abb187d6d4f3e1161d8909974b575cd0502392f200847ba95bdf7a48d400564816f4591511a2085c8ac184c9dc1eb7fedc92033ff88150452334fce59ec19b59914e2b1d107d7f69328e91519acc861788b27118c62cd43927d5c3089c2af6e4c42c46b52b60286f55d05785e80cde67c104ad740e9cdc7c7588996df9e07c4910f3cd615a693fb355020c6a8ea57be10780970b5e7a0a2ffe6be50b0464686e237cae291369cdd6abdade72732e0633a4a8ba83688d132ff25ccf9ec200fd9d779d8155d0de08e357f40043457ecaa5d18b400207c797a2755937a37b5867b34b690fcf81df2ae37566e262f65ab3805607ebd907baecc21afe4b612b56d6e5fcce400025e74a707276bbf38feae8b85ed8464be293472c92b60fb91f171526012e9b9285c9dec91b74446402cb540389b2d07f42f2e2ff02647a9dc2ea0b5da2292eb36a52f1841f3733710689c543db19e1e105af2700efde88dc8f2d5c22a4e25ee6321ea5f04ef8d463eb795c80b475bda7fd6698653071699c834f8cbf1e7e48a871f77ff14cba705eaa8181da613c2d00d6b189cb47008ec138157b0336619995f6abf759b0bdc5d03a0f3525b3c16b2f16f22f90d2531cc9701985fdae30213751106ef053e2d4de3049ea7d72d9e4253845562d894d202b3b2eb383b27430f37bd067fa35c9204fa7f12ba975ed1c7816d75883e1c11e3a8ee2e33c88b578764408e9c5274ce97a76428337ddd37326884ed6a34cd87c03cb637f7a49bebc6181df4548fecdd4bee324b7dfd7539d4d95f98262acd63d285e3ec95dcae3721cc56a943ab0c5521019f8f04a3e794fb4b9a71f86f3902cef951ec4184c56b805011942ea854319ac77456630f9e4ccff5339a8f3dba9b384ef0044ccb5d511a32a2a9cf9d3d84b1554e188e6d095c3734a02a8bc281edd3564590aff3c866e5be77b5e2c9a9066453b5a9ca6a722e2bae294835ac854f0d6955251edb24f2acd7c761de2fb6583cd90406db18a6cc7573e3be59c5eda8fe0ea1bb9259d3af48b7d8e713584061db7b04899b93c6c927b8e8ca6b4892ed6c79c71ddb0e52d9cb5c661d2793f56cec9011c786b8c40eab8c490fbdb8d80c9c512c065aa8f8f30e91afe8a4cab9fc96c43baf99625667cb97417a5d9b64e34dec7f99c68605bac8de0067989e347dd397d25670ad02d3f4d0e748391785956a342c9927058d729e195917e96eb0321f21fcc0c4ca3fd5e33908eb3f1d34b61b6196e3e435995b0cdee28c11d57db177479e7c5c92bbd4499cda18653734dc7f615dd3bafec999065d9a55a0062863129608023d780a7718845731480a21872e073cfed776e7169e977eb8a726e6f1921c4ac75abd577b2eaed51214851f055b0e6ed749d4f8a202ad1803cd06bdf25bd9bec8a7ab3965e3a52592444e9a2e03e99b9abc5698d7c95e232d413b4996911bdb36ab4614c4cdabcb36de53298bec8ebc0543ea64cc6f33605410c28e07961611bf4dccbb8fef3d9487af3a13855967f17504e1bb67ae9a1640171a89385e30454b19565e297e58cae8dec6d2b2544afdd4dfc9cc5a330efdd2739ffa79ce882178211012114243dd48fd92644431d88cf8934260496232d19914a2e587f7faf75674f18a49c8302e62de9c71c820cbd1d71270f77133c480a00898d13d76e5dc0d9517ed9b74b1adbc818211ad44eb0484e319e69074a0ef5dd31db9b68c7a82d061b62ff03a3a608db558d5b3d96ec99ec5bf1363ae35480ce5d6307cf92385fc96ffb7e85de476818b254caddaf29de0963395f9a80b3898a6c01f755102af3cb9f7ab36ae61aced081cc7a2b000d43e9ce0369cda6d5cfc0fd94e46940d20e6ca3bb936506c3a47ea4270f6bc741e88df0028289d8688b9a1fb401ceef7d05c7db900457dc64ad554368822c37e08fad9202ea6c382b6a062c644b9003825d7b57d604c6b52215d42310985c413acd478862bdf93264d72ee872026aea470819bae021ccce7621922aa3b15590219c41c39d619d599494b09a095b335ce840e4f936e5c27ed199121af6865af451902fa3f3081ac30cc5d169b2c9303157e8b4934c2ffa627fcbba42acd6e673f4924436a27a5ff392cd37d6e95d8d3ea7603cba70953f44a78e492900192ce5b7366a8e9481a6100c15ea62841b6cca23ab8ce708dafc7e5e73830ff35e4e14b6765edf5e126b3026975c0e94788bac9e2f8ec6fa4d7f6f97c480e5d66aab517c3a28e773cad824c9c508186a4da27f5a8a3876aae4bdc1daf843f7752452fd080a605131559f6572f9181cb78218868c4ce2dd5b2b0006adbc48a6925a04cea6b3f286e757dd0dc41baa6ab73a547b3530047e528f57bc7387611d7a24f21359ae78555f023e085686c5ce6f0a97ecf10964e2034a53e12abe093a47d1daeaf9f97fdffbcd56f489ca1e09c01bd5083b022f86fb33aa59223ed2d612e2a4a5159fbf16cc094e607881e67d1b62803e7f48a8f1ba08a53d0a1839800d75068e977b9d3da3446480c107542c2853cad320137f6ca66d793c4bc7848d117d6434dbc43b727ec55cc7b22292c996a68f2fd29518220895857928aba0f4739b4112f049531a4bb2c6cb71cd096ede6b48ee59bfe694b1903bcacafc6510a0511054a486c2bc24ccf3d65562d7158a46eaad13f21b54ab4249b751d3ce289eff3981431a216ed3310af919521b0c605ece1136f3a8ebd2982230c729eb297e491c4589ecbe4e7aa0a32da25f9ee371e127ef06e0a5f13e558438932d5e4ac6c8fd6cff77e11eed63e02b55089e47e9c65860062f29768773847dd561c543c3e451f4fe41a123533a451e2f1a3241d7f6b59a9bfd609d343d3459cdb44bad91c9c742d7c9ecead26d4468f3149868b512b19889ee9039b7df25d05180c1efeefd73f5768d7babb182574c64e63e97d5ae4864607b33ffd32265949f1093591b082910d1fa834e3ee8c90b109931a62e7e63fe0817dbb904311971913601d3e56d908979ca13518089bdb91c5647a7f46b7950f054f58cfbae010303222742946acf747357ada87d397d32d37f69c37b2b41139ec717c2dd6a68e0dfb0d942dc85712df805686fe75b965bc2ca29b5ba37866f80327fcd0d87c797b4147ce89d5273cac24a6ca48f2ed02f3eda3108e46ef8ecee672ae1e5405f12af226d67404c42f187d3b3a7c643c22335afebd12a0b6389080f39d82ccdab5160d70cce79b54239b9666e8ab47581b6f3ed02761b491ca0299f0c6743efe9bf1ee571d45a1565d1b3eb2b7d9bc16569af73c9f3c1dc71651a2e41043c68edb1166884f7b9568e37ec0fc9ce7ac9543325c2221243cbd2d0ed8c035e42eb86d17debd78fafe57575d9d5cceefac3b1c94bdede7bdb6d928e489352c8d3cc67c43857a7aed288c0085e4b956f4efb2f9177c63e687d39911aaaf5ca27756e1abc4e093bab694120ce94666ae4b44657e8c1785865bea7320b33f237e409dcbe01a48dbfc6ba462095838d7cf2cc66ea858503b8a3370b6b1b2f663dfcfe01adc205c6531fcbf376c1d061eb1ce1d45e6fb4515c19e7d86407faae8db268fda71dae6a52355dc22b7c3fb9306d796ac3a08840e3e84189dacb4756d6860d3be4f81edd4793a7aafe6a3a0996c203e8a846735ee131fc2f5533a086806d7d44f87b25fa0fb98476da87cccf40ef70fc8cbc6336062962284583d9cdafecc4abcf850c36e37322958d1e3ec406c43a82ea3fe12838911d47ceff2f943397a84e31ad568c161c766a408ca5b22983abc50d407a443ef81d75ee3e67313fa3f987b4339c280f24c2a9f4c6cda2d073294ee27e6d046e7b9deb1b91025fdb3408352c0d56b471c3c2bc74642897fd3f521aad60988390da6a046f6ce18f29eb8b3c267f54c68a43c959d9584af3e840d6642a3146bfd5a59ca1ffb019250fdca1f0621d9c8d8da343d602452a61466a2b38782a7abdf1fbfe997d4849f036aac70195cd3ec24fb369f4b0ed866a71e0a1c8cdbf13638826f81be5f8ce8408356b7344f56a668e8b2c3a73c32f7ecfa99a5315f1efd047ab2a377f2b36bdb0c60728b85c5db2481663ce58256e7be63c6b7995e464021354da0cd4049c51785c722e1292ed0595f31c7b72ee3526a180466515d8c6bbbd84f5b855eca85f7c3354a3f3e10c5e700e57d4795352bd28de2560fd30103881d4c5052d26da4faf8a81cc6074a0c4a90a8bcbeaeaf6f88fa1942b14183ebe0c53d4f4856fe3db4f926b9947c1e6e7cc2069e4f0bede3b52b9c5d0c6dbeaa90e25f2e5ce582522edb8c1305342efa118ac4c3c80a028142da17efe084f878057834476dfad0507795efe2992c4354d58663ae69303d85b3c8139ccdb38b36919586c18fb285badc6c2a3ade6b5bff5f7daa07725b3326ad8ff55e2171dda8fcc07de879e0c08dc19881ebe1dbdc7faf4715513d5e334f6c7206c2210d5b66b42863f503b6b300b2e53e75ecc3d57d6e869c97a4f97bea526147b471e7586e4c9f17529359c0a9b2de7062747d40e05a82c9c20070f014d90adeef1339dbd61729622657a55b09b468c58e35e056afde3f2c0522157dc5ce4269581d6e8669d3cd0e3f2c3f846ec99d3c8018f1259bae40ef984c14357efb5f4401da303cdfa405614fa8c3c7eee8c454387e10b796b467c77f320de34b9da59a82517925a616e03039557be6cd887cc37e9f6ce36e398357fb3d66aa175da495673653ff9744c3757df49a7fec5b57648f91cad05e2cd245167ca7f2e596995f9789911b400bbac203fe9e785576823d312a72b7ec5d269d6a23efaddec82ee43a7811cd5795ca250019b115a698cd9c86c58435eecae686daf9a446b4c02e5bc22d95dbc79a3897708c7544d153db748c09ae893bd0c27ebd26cf6cd33f1c31f537663e4727cf9f1ae2ca7806a3843f2825f6d9248e6bd490feb7167e4948392d0a097071a8ee41ef0d88e19793814ebd19f998e95bd3a3a79b9d33a4afb22092bc7ab81825c845ead382b053968bf7bff5e3f9f3ba5d127e56143ae43fce41102ba83998fc806eff159b15147897a7ea27bfe75bb5ce60ca039b03b36b277e23be389211b0944d724d3059b81001657a7fd06669fac77f8a1dac7a74050dcbf47017fd7aa129baa150b8d61d535eb4d419fc5e80721fe937e92a643dc1dc347fc72b0186522347c2542b3c25388f7d96308423529ce1b065c3150703a2498c5ce3b759d5d39e8f420d0ae83d6dcab0f01367820ffd4af1c5bdf1464845ec1b0d3cc8afd31d61b7da8dd6b0e0bc5d2d1005835b5e56ce7bce6b3354dc56e9914ba63a285d4bd9e22da063439f55f02e54039a2249b24c4e862110c0e29ea95db57bfe6c43a11e09508f6d3dcba3dcd0354396aceeae5ef03c0d5bed638076b3ac8a32449ed31a93fed78536375ecfa31bf96dfdffc2231760ea8999d76df1738ca860cea9cf97a6bee8681476d7504d580b0e61d87fe790feb86f37c422aef79be0c6ba8c86057a0dbf861eab2a6998b47a5e8309a21862518b34ab785394e4809e95ac203c945aa6a988f8f19d6167b4109995443ebde81aff85bb640ad30fabebbca3435c91d469651a848166fde839260ce9861b40c2e474201af5b8694c357ec3df43b75ba58e8acbcb980ea879e590f18d41caa5ee152731439950f108cbb210d98a209d6ff7aed07b9e8eddf4a1d27edc8c56f773e90086cde84982b509665b1c564d184d790b381545d978fada349664e221f219f23414ab908abee950881ecd66dbd674d57a89b7cb1f47566cb62ba10ecd3b71614a027a4bc5685f780faf42a9ecc39f7cfff66db37cec4f5be5dae471f31c17874958213104868d9f6dcd30767b6b8180841c8811dc7cb779469b4abf96084f57a38c70dd53c388b6627bfe74cdce3e6c7b5f4851d34877aaa00ced1349e62cf26754d95c7ab2a64b71a5db54c50e8c1dd44ce130a8dde1102ab7aa83f89a333c0d979e09ff5fd8a303ad27f2f7281abb3b425d2100c04b34eb67a9a15df4db31e94bc9ad96187c76499c578c55ced47a4766869b5840bce9ce558efb9027b8bbd4bb2b64999535377a5238f69222d0dab44d0f92d73bb4c279b05f038991df40a09eb52879252ce008263e6760d569b73a544756b281ad6cdeecb44e53562d2ccfd61204b3b803e7c619cd3a40eecdf555f37d5e9c6db5d23161c4a028dd9222c36eb06135a6cc2f654128dedc6435044632f7405470c4981e79f20fd51e018ccbf8fc36126b83447ed852f3400a441377cd24ba21e03dbca9816e9f75ca4e754d44675d24fb9f0ea886e869ec11ba79ae78c316737c70560d74f95cc9a63aa757913496d5939d24c7b73c642edc38172f86e976cd86c419cce521279c1b09f8af6f325081c2de7eb37ed625c1d5cb9feb535abb4d9230f0ab3f0cdb0aeeb2b428d565e442ecd7160e92e50fd7729ad07d8f7cfdcf3dab56f13375860b3a1214ff5136b392bb0eae6d38bc47cc88780a5e7eb168473f103504327496a91f5251df05ef3aae783d7fc9541f5ed53bf6a9791e4af322b1874d4f86d035e59042c5e9c4033ce4e7ee553b384f67b8de49089fb2891a76320184f1e3dd53cb0b67bcc125c75493d2729669c873ad3562ddef8405843f34dda750e69cbd276d3851a547a098abe1c3e02f6780081a7cb53fb1fa7feb6f5189b6a99a6d32498095a1e5815d35ef1b024dab869bcd28e1123be84a77db2929ff50a08c4de9191af84abc78d976e32d53812f237aa1fa271193ca1f255ba21c707b2f4cd238409789ba32e97f963383edfcaab27d3b2541759135decaca86dd03b37fa9cf118939166f8275f2b5278d69eeb27cadb8795891c9b9f608169cfe9feb6f88b1c33ce0b13cba7614bbf0dd15778542c3bc3b8448b6139184692432e5039b5679425d29fd0e0e38eba9e2bef5a3fb319bb2b5d2de20c55420df8ae7fb3963f1d7b8b661e2157089a56f7782642f649c82d64d1d8449031ef9064b858d1322b83550d503b84e169616396635fe89adf44168a005b5bf5c8a5dc627ad7ffa199a4c0381707aba4af1ef01d26aac132beab3f5c202319b03b0ee401445e884bbd604e4286c1f7481908b1ff9298f05118e0d8afb3f5c253b6661dcb4903e1b4b7f973b7d247770d648611a50f9c74b96f6eaec5fca6d051ce99d7ae32df114491393ef35745ceb308e7ffadbae38f7e4c17b87bbb6b1d61ab3c31ad3f43ab47f9735ef65b55d3c5d716e354f19e8515a9632199a9536667d8ea9b6010b5ef3254391b4a1a7f9d811aebbdd31f8b7f2eb4c53f84b1956e4f6f9d1c668975965e495e685933a29718fde66d2808770bcb2582c6fa9be6aad11527da3485bc6ec41382336402166e2bfca9d5db7520209a8602703c99230bad0f5ee8009f8fbda26d76cfa9a376cf9658b2672149e0e0297e49112445cc04e41e0d028e65e14faafdef78cf6e120f013c919b6335c950e56c74fb195b0bcba7713db1424719cbabfd66514915eb71c6bf6bbacc26e73f4383ee1c6c1fbefd4e4a5cb5d3afc19f7ecc05445bf31ee2d9569edad11aab60baf533d625349e9fafbcbac9265eb2e79a56fa8439d0d6c329cf537e39962a1ec007b9bc701306b9d9bfddb08d304238f6035a1b081f5d052147ec763de41d594af4dc3e494d553f67abf90cfe426e4a2b5ff1f83475e7c341bf90f49a50bb0692f17d9a958fdd35bf51f2416391df061ef8f7b3244820f06529961f9fd78cc155734de3615dea77caf9dfbd9f7ecd7dc3dc4789b97b878364557b20cc89400b43f4a80147a4226f5e868fc718e3fa91d01a46aa490aaafee2ada476adc1b31e7004c061e01b89508da329ebd178cf08333a192358ff61ddaeb5e8a555e59989399a478361349c4754fed1b35e9fa27ed64567b2049ec4d9907d4581e72af18e8a436aba700e6d0e858d0e5b9edc815cf045136c9fa03757b642fa19d0eaa28f286f6cb83583ef7f7fcf45ef027788ce65987962e1b0801c1e43c4a01f4262773b9abd8553d0f34358bf6522eea3aa8962b79671642e29c6404b86795edd595a9c43108c38a690ea59863c3c540e1d83bb6c28460575d2366e122e66e38df810da2a95f599eb53e30ccf4172665a4512e86cc76399e1c8ac1fb850843dc80ddffac6a285f4d824dd14edbc4d343628b05af236298ea5342d9aa049185af7b852c11cb980bdbd6c8da47fc539793a39a6dadc8fec339be7a0b29856ed941aa19a775abc576b5267a4e25e01c02b5a4f4d97a904c1289bbe18defdb077ab3bb5c03571e843422af8b0269c3e71a1fbd4184a6208a18b55d6ae8ddc4b43e4b41261b2a246231219a2e7db56f0532377f5b6cb7720e4a9a84a6058b8d75d41fc2a66d730d50f66fec8ec1daa0562f74f21de42f2ce0ac2f099501a78c01189b0e166f343340db5d789a212be9ffef6bea20b2bc7a0e54dd6e9564a07aecf733bcfadd32c2802b88614ba7c1ecbc5d93cd936fd234151df4a2e70f145d296307d38027ef08a8fec770322867501dcf6b4cc0212161ecaec38f1aa9af472aa182be2b1052ac64d9c3ef4e34c4a85acb3d337f73b034603958440fbb11a917397fe376eb47658997ebe7dd55d43dbb7e7dfe46010f8c03c88b7ed715f45ba7aa4cba76f2ca17af50c708787b19de89611dbe5073eb6f583fd436ba37c07b5f20286f359f562417bdb0ba13ad57fdc49c2cc1bb20f7d0d1232e1a8317282a08059a6c3cc03680c66179bd1e0ecd263c34b9d1626cf581320fb36779544446aa25801b1241fd716d3aebfbefcdedc419891036435857cfc0f15b7a1a17b90cf3248529b37187c93b6294b5b213996e4e18b27f12f2aea2d45f3730edb44ccdbb55aadacbda3be700915d4f7b1699cbe653da383f5a96233fd1e44d3fad58ea275a44fc74b981dde7c93a42207db048531d6927f1067c1f6cee2abf4e8fadd6591a83e400ec8912183b1fa383a047abeb281cc7d5588469cc54e6aba88e9136f66d1f130f292526a61b1dba60737c39fde82e204718eda15cb3c0a09cf8a48a46fffe3191b4b95786b1aef5b1cceae947d4668bc5bfebfc6233c6b6ed1fc0c4782257a198459f0a5de7fc1f9603d239569999c9e2e80c41980614860fe14ff378f907cb749af2ae92a970f557456ee31dfd3a68225072f0b8257702fbf074f2b79c90d762933cf4dad6eed71c9e712c02c67fe888208210f02f2711078d6edc48f14bb3f324d02ba161af59d702b97a27ba36975c2b423ccd48c4e9cad17ab65589fbd5da52a2393988e2f6f0c8657833c3b2872847d37b041d1ad22b8b9866c0ec92f7f598d0422da9b1c7d8d115142d540f648905b5b0f7819c99dfbd2d6b27cf7683c99c6c33c0075981535d2326c964ca2d9eaf5280a361daa8297b14e1e065b6d0611c0eb97348dc3469de1b570050ae426ddbb7ffe813d2609cc8374d365bfec80fa677a1c0cca110371632cbec1e627d301e00cbf5eadab3823ef509422ab780577ae847c58aa9b9fbe2fd89583ee5fe41e0cca7ab24dd0b39f49a96e4bf613c049ffe658afa9c88dc0977502c9f79968ec9411208493792328ed68d8192fd702708017be73674a0d41f6c82e51a35fc4df22465a7398cb6f870d7fe7bd4b5bc36c353f5076ff20baf403d1e8aa3b624dac81fde4ded01932f561c81993ffa99e407806a723483a096483ed58f144cf151500c3f5b6735c83ed9fd7268856d53527e3f1fec1b998c2c48eb8ce516ad1c476a4ee89ba3028067d1da7ad4ffa0313206751670660db68d43d1b09467ef176baf2fd3c32bed1a83aaa9b43b67999803b893237502842770f407cf59a807df99ce0459e36b9bcfc38967e071c2c34e3452fc41edc983c8e2cff240e2290451ee82fb4412c064683e46cb519cc8f194a86d5bb606108f002fc1bc2abd8646bdb6c0b6f7057d0de10e69d536879ad88c4cd2f0056565136751b774660e1487dbc084b52713f7c387d5f93fa600d8d33b17e9097cf127ec20352e0030cdaf385dec10d5978e697e576c0093320e93a687851a147353e89e06fb2c6b77286b1b975cc4bf9239cca0f23a76f1da718f5a04c30e88404c4e0e59b7eb3d3647d89b060c01c1831720b6fb1cbfc10c58e23989e3465ac50238e95df399f3b35dfe7cdd1e85063286bc2f861fc0508b62ebcc2165af9fe4a0b970d864968d88e81bcc0c22f9af9d9194c930e36a810307f804e4fc47d36ac6c0ce8d705343d870bad84dd721db650292fe0dfce77d5aa0419d9a4022edf8dafaf0d878ae8c1af780f1fa42618d50b2abbb50430b8f45b595937fc7bd9efcb9997da567f854204b3a31a95c86dd88d13310fe76f5c69355cef33a24272a10d322dcc0a70a2d0722b17468046f4a49b27e4861cd1163f8cf4e19d6dedc3fc354b6b1ebacaf0efb9c54f5871cfc864702f5c142e630dab7ea872ceb62df65c7ef1ef750effb1879cd364905d370419fa7a17718883bc819e04dd4408750643012d8404420de0d2ef81b9ce1aaaab10bd53f55e6f5fc65582b6c018557b9b8e02206367995e0ff890ed1e5cef3fc201f52a68243f1de13ad08f2c391ed7a02cf82cf9c0883a8965b5b9a5d08568a71f67e97bfdd50722fa0133fcc898366181e3cd927af0e2229e383e73d9debca69761f88fa9242118c202b726dfabcf3b3c068737865950e760fc3960c3570cd517b9b25d1e5ac0243f36204962b843743d11e9d645dd1ae11e36a8657407a87c08554c447d1fab9f21c072d9426f21c2a37af6735154a502994cee1c740cd0c573f2e1e24748af745c8c5ec11033683843a32424ae7c86a41960eeb3ed922113be0cbd49623212ab38748b7b12c99147423823387a3b9d8f9b1899a9b984b0ccf19ef894147ae27d865a0cd6d2649aaa7efe068dec26c02bfc8b75b75b17b03e5aa8582653a101e5ab243cb1c13598348f547d27e498ab61097b783081236378cccbbdc15e6c146cbd13d2cf5ab6a489d36ddfcda9bc023e32f62a0e6636f246ab571492d016d6707d5b7d290384ab5396e55bd83b33a827afbb8adec026b524af1cdd4d40a38c943502a63ae5e576d674cfa12ad75b00326dfe8b165eb87c84032b141c3722ae3bbfbfe75f9ca0921f7705ff889a226873aab2b05099226a2544650eb63afe451489062fd5615c9181a3fe91e22d0fa9a157c98b81fca4119b0cf1d8fd8cbc895f83ce640bb67136bc6988c7130bf5b4a9787c15616384969feb14597bad1dd7ba80a01ee0a9e834dc19d32d2fffb435970f3be6e5ef3572b41a09576cf9332df843e04cbffcbb966746177adadf8a3c65446fbf647cd8a02cd5d5ea82fd6a5bf7f749db99a19282ef05eab4dbe6a2a4eb342a1b84186bd692b2897f1155659b25109c092af82a08303b5ea08ad5f54f92156d780b050afd5babccad80e2127b571e39cd6f63b832050fefbca72d4fe0fc125d22f8e75387a790b233a587b9c6d5b82cb83ab95f214f906573dbc2c8c5f6147c56058a419e9cf784647214530926842bbb3337c52f293defdd551a91a8c6282d62543c8a73a5f1b1267712f314cddb67fb781ba4db088a05a8dc70b5861bf43131b220e55f2b2802b75b062e0c35e448d0040fc35cabf257db12982c174ff390b70d665c3c2e997f802b5f153c1201c44247d1a6e8eb6d0f5c7a901aaaa768321b31c7dc86280677e7deb26c6df1eae61d1908fb23c643440e12c1eded217882aaa1ec29e3813196ee6e7582d94fcaf488a403812602f38f7e361dccad2bd06f60187da9097a92ffc6c8ab2b2d75e6d41849e3d1b043574c2990b977d3cb35fb8d2f93989ca24175585f4f9d2438dcbe1744b9d7ae0f549bf3b3d56ec14ca66c44ae4580d9356ea7a6060620ec653230fe44f3949313ae321574507699a45d3c234507ec7f2a389dc2148d3a6c7f1b3d6ecc71196092af4c26fccd9828ab8fe43bf1df6bee41fd6e931a6fda23336c387b3c2a92d54079eefa7a22b0d57b3b7cb9783b3baaaac8a816c53fc687e445873d2a30b04544222069f784414f4c5d077a2fb7a440338b78319ec59d014a20858ffc1746b9c43354f4f69884e348912ce6442480eae9cd4768619f1b3f6ae57a5d898b55269b71f5192b1382f79c4025cf88ceb57b58cc2381011dbc6827b096d465e0355e968f1254cee9f899755ac761404f6823f13f0c66cceb40b2f8ef28ffdfce94b2cdb28c7e45ac1d92d23e475170cf4f0fb54281ae5f30c722d2681f2e9559076b7856e0260ffa142a1ac8bfdccecf027601ee5df2b16f3a0e2391512d2c7616d97e8813f7d1a8fb09cec98d5b54ca91e9b767e1884910c38a0a30ed7f19cfe0052968bee5862450f1c7b5d88ae0559e6a5e3ab3b4d599d765723bda9d879434b36ec79a59ea0f087a7a21cd88f78097b890d755d13fb62be676395c8880f4b3604dfe9434bfdcd41656b4e38d21dcd6d23fa261281a920a154ac17fc6e877470c1e652cb11a4f69be2d3c340f9cb0de0644c6c66dca1443328d941520dfdf28b9f5664a5d5e8decc80bf04083a87185843bf473b46bdedccc53587fc29642610f354e739e9d9416fcc4ef06a2a37f5c9c12a140e7ad70639f51451039a13ea62373f150648eda1ae0e999fdbed27e031800782777c0696d1fe008d613ce7e3e4d7e1f31e9aa6eb4e0c0efaaa1d75c3bf2ef1e02eeb97add596a48589e328686ebf174688b49d215de89f91d6d670c4c278cb769a8f29a3c8be5e4a7ed3a30f8f53ec45f85d55adcc32f7fee7c98961a06772853fac6d32139e17073e1b4c7d5ee8266830f5ca8613b6412a143a85592db6945d78905874b756d72c2e1543c6ace3fe93ce059c4f3d9789896ec4428b7384ae536dbb6671b3b44422c2a424461603c060f7c51fd4bb04d7e174e7d43b69dcee930133aceccb4e1fe278694398555695c7266eff09ffb955ddd1cafcc98de28ca6e8d506a3bb6835420828be5187dac5c97a6972faa7123831094f9368cbd6a1db102afb6135e92af1c8c13cd6b28094691e2e837803e29c134bf41e19a91dad81a65623ef4cd55e5afabbf0fafe6c26037cd29cdb4f0ad14ba07fd278f35bb736a3e5d33764417f1c5897617a63783b9152437b18edd3f2442e7db50e17e255bdbbeb5c69c10a1d24e507b39d0329a2bca1ab956000d77f95dccb21275eed9e7c92aab1a6ea3df2442e963dbdf6beae711d726ad8b2ce34603e468c6eb82a52efeed541001e80e17e2e5acc9f1180f68f0b7798cd536b4a021d81b4e70e98796109120d8570e544b391394afebad1725cb8bc18c83431d63f7792941e0cac74cee9fe799ab9c38f89c6bd1b2d273908bc1c505623b60c60c80936df22a5b9e1606ef1b330042287adaab9c60382c0fb267d3d3ffbdc848790c9c4e3932b555e028b2b01e9b88952d04a896ad596e4ba60baf6b382468bc9ac1202e71b250f8f21d04cf87c60a4ca76693ef565c981c4442fae7dddd0923b4838bb6247202047c26e54898505ede6502624386eb75f7eed28f729dcbef7226840da5b63897210274a03e52934cb62db488946ed72d977a7ecff4eb8c49ac1f00ec5060358d24875d5ab199a7d3f30b30865ed5408a78760d730cf4233b6df7e43f89ee477e641312191c7e3207d94ed83f2e6eb7ce8db8dc1617c44a7a506d03e64edbb0ff10c5d5945c71433568c02052e62fd0b0a2a6fec044cdc945b5ae00d2686a39829fc6ed725c1ad3f7fe916188927f7fa464e5a63e6db49975ffc1f9e1c0c4390ffd686f136392d8bae1c3a3c3ffb76c32a1d6a15f15ac19044c323b11d3021c487634e9ced3cb217e01253482be75f91dca45523f8ce710a5459ab70c013292ae73defd77cabe93d907dd86b4995fbd9ec7c77e02b98bf3a9d88517c0b47fdb122e968ef05b972faf155d20f84cf5c14d331d7cd361578fdbf0df93c2dce14da427b50ef7308a22498783718ea6898921a72e70ac0f885e50e3297a9b8b7b8241c6b1d5399a03f2f2fb95067e691aceb9b212d4197728675812d90b32cefe5e0437132492555e526bca769370191091f3951d8bf8107ad6ddc2fe83afbeff2f06f0e031dd91d0ce88c8e228eca31bba2f195ae7e33843e698295491ab3b95dd1b60ed56ad0c0c045cd9516c11a0dc9b860fe477a44c57f8fa54990289739d1e3806f09155318493e5111fa8a2eb5dd76930f011a6d9d76c095ab7db8a91e2634b1c3bafdcc3613037a9debc09e697e63cef070de89e19627a09f77a0facedddf1badbb6ddf4ee0cf6e5fd83a48822122613d782a43d91a40f33cd6282ebf50260509b64319b7f82fbcb7f347002ad8fd01ed1e591823bd1e277c761f5a60424696ebb17c635c23ab8686e46985a6014d6ae1b424210776d0ea9a12e730c61e0512a444ece50fb23d5da17c0187af8c0d9923db750bd7a6774dfb5f95fd40024886a9f973f2f9778ad4974f416a7ddc0704d121e582118eccd81c79177669622e07fca19257b6f4d9843f8e3912f5433a746803ab48899171e65aab36828aaadde58763073fc65aeab388c6d22d5235b65987be56d96c7198820d5441f52a42c6f9ac21a545a9238694f97e81fa03b2b6393392b993cdef53806b25e7d4d471587f58bdc3029d3a446b083365242b893176e8f823b03e493eae639051e7fd944674fe5bac119bb4a563a71f1a60992a52ea417e358dec27887b65269a4b2fe06e0a1d3c7e573464ffa9a1ef6b76ee5671049c76da335ce3023a9fe54c6f80046ac81004d158cde5c108eb040ebffc03c8446000dfc162c75e200b7091db2360b18c012d61b9ef32a7b269717083402ca72818ed621dc0b39b832450397026b521c82b45cb31dccf6c61da12352e77862597efcc33de8a07eb2384f0631698efaa8581e12585306a3ceda4165494b9e89037ca818362b00389ccac6d1b2149b011faf2bab9ae40c259e242d18a2e070b6ad1d08c16535947239914363b8707cd8a3e82db2499ad966ad5a3febc4493b534d5646589723e47256bbaa7f9b09c181cf359a4b5df180d5f84a5b8d683bbfd49a365d2b03daaee10a4d86ea05342052c99687ed3d4aa18b6ac5203f3130e8ccf7497444c6701a2d3a11140c4802f0b44220f0d615f84c756e608a3f2a98fa748f4aa39fab1489624c84bdf5bc1baa4b20e73768c0e318ea1fb7981658fe1f0b88f9871ab279d826ef826be9427da29c733fe6f88b80a470474fec367540b4d6e8552ad01ce92a05055e9945c8324029c873637b3fef7bf4bd3674bac5a93110922dc840e46b7878b199dba2294157a21e4730469081841067000876c54e3c7d30346f6dc95daec58e7ead8a0875202fc13fd8b80356fa3e7de6fc21af3f27ecf5c462c74065a248e662587941d678cd44f986294d39a79dc71c97fb1bb7b619a62b39165bed8d87a2ff347158c14c1ee9766e39628678aa064560cc0fe78b2421a9f40fbc123e635a0165e90e0f6e5bfff107608b734eac4cdf726ff12f30d033106dba51cead81a071c5241c32fd40914b9d5ca886985b2f2cc7ed059add4f7277af0857fa40cb21137bfa6fd6b7ed830b49d15795f5326fd0671cbcabaa6044dccb84007826addf19562bf55b5a0d5bb32f84cc32da86b34b4ca247cf729ab4d5d319135ff932a327fd26ff885ab4285508ab36d7e8e8bc82ca016f7beccae9cc949e46f36d13f0a0e1180d28ebb530b4b4235fa06fc2b084bac0e199aa2472eac4787a84c7490570dc45bd8e650819613429cc12630f2ec71afdd45a3e7e7b7a8c055296eb2eb91c5db38462463833af6f940aca723ef3ef696a24b2eae513a15a6ea094446c8976f142cecad133ffe6f8f3affd7d5c9b1cf56c7ae86e5f09bbbf546a75353e05380b5b44c77a000506a1291ef8757295d3af0d25a030a1babcc749a510dc6934a7239386cd2057e39fd9e831a5b67193b16ba0bbcaad02f4df2422f2d725eff53a778755867663dda494aad7ad4e66bd1a0bc8c4c4aa368e491b267c34c5caeedc050990b23777593e522beb4edaa460eaf26bf76acb3c1cdfa713c4fceb45c1188bc09fa24030f00bc744f9bb2c6c94c0b58f0c4475188bfd49948d6daea6c7542da4e7b7bc98b676780755f83ed861189b863b338919fc48c9809b61e878fe3b9a9663c9e78452b93dadf72454321ee6125d8487eaf81541cc40f9896fa4c2665fdc0010f4fccfd1f32684bc555e8e0ef895a05fb23500931d5f804e69b620986249b1726a1662f26096134a10ac6c58d06902371b901c3bac823d13850585601a8f4ba58da52c9a3f9afc3f4c5dc1b17f93377058fb9106899f4cef69fa4b9ff64a2d79ed3ea8a3c173cf8cf4e3c2502c6f786529de520061f8e47d0d36d42753ba45c2c39a4746096675ad2f0ef9d8988e2f648ebea86b4d1f708a269c45be6ac1b4d31066ddfd34e421e9e51eb794b97f08b57013b7c97607f2940f1564c5ec7cdb0d8466c989c95ab770842fa024f631aebf1cb6d35fa86ebbff048898bbbd2679e9d368891acde8150d6291cea2624ca8b4b657ffc450973520abfee240a551aa82af46f8c5d5bc183f4d1c9ea68972e5ef924bb1bfa2f52fecba30740a65e3807d38fa2f24b412e45af4da64da1f9fe8eb74ae748b3d93873197aa1a83b5259850776cb178d9fcb94179e871903a88badca2b9cf45320cea57bc81516cb3e360c51a83e90941c6bc7dbe40a44045c8039f393066a8bf7fdc5098aedbfdd5959c86a37a3d684a13b8c5179d4d5d635fa10750fa0271509b973dd2dc64211610c306d062d31e6f8c08065a32a9f51205a2cd17cdb53456d478810d2fcb92153371a92d600d96d6da6b3243a80354c39bbcbf306d6d389688cc127b48139993c1130466f14545691ee12171b0c983814f0ca14470f96639123482b88b9e5506369d4db6f00e755f087e7357cc320af7252c20f03503cf9c4998f277bdccd151aa21c514fc933e222ab9688311a1abe486613239dec83fe5cb7bd7db4833266a134941270568bf9a5d593de9cbfbc77413915e50c13a05f7734f4d443a216af628aae2d0cece2cd1a7863afb2adf3c1c1983903bb62d7b7ef5e6cca42174f611391e56cbb571eb38373d2b4392f89c709bcfec5fd8f05ccacd9ecaa27944d82951ea75b1638f24d6d2b03fb1c6ce0611ac16eafac4a4104eb7b21f9fa271400bd171f9aee6ccd41bf7ef3bd86ebe1825c10b56e2ed311c2d2fda1e5292f283433e1b65a851e196372bc76542355a5f5a4b94d4d9e7ede8b2febadfa1ed76903c5858bcdf61e379d94d684be63daa1d7d52b4c7db80983365e5cf86662d906dd9b29b952d68701d5525fd22e6da0ec23b549fe7f6589821799721c0808d8a3db0c40593033af7e1ffcc8b1c845ef14174ad9d3ee3c4b73a1f799cb21b4e27ad8ec1bfd1ec99def4581801ac34032d66397121591fbb46eed20050bbe74a6752320e57a237c5842eb80067925b49f1976c91ec4d9fbaa6edb365806bc98b52b3f51059406493e552a020c1a2e3ac72b2e74b6c628712cdf651f20015693be29f619f71fc9c5a8617663137043ebfdc44f6d4d9333cefa5d0d19aec2994a875d667ef40b9767841a3d49d24bcb55109573c1ce4ef02f11055707e6df4f1f5855a017b95b394f8cc8a0d9423fd812f876f93719b53050cb04a27edeaeb77feba1dcaff5a5c3728aa119ace6ef63d3d1ede175f1d7fa14b029b1587afbd5bb7e8244f2bb373ec0d270f2ab8a859788ec855d68024ffcdb1760eb5d5118163aa26930e16ecca7722f74b765beb03d994e6ac2fc52a985fec11f0c374802dea33709af8201ce63b3cd1ced7756618866a21f6c2e6cc980349b4e482fef77ece911ceaa297a86b379dc953dd0d3f91abc88e0028b0aa3091fadd2ba176c9c75dbf7a0d712fa079722c1b093730e64df3e2cb1a2a163deaf7f9826f7a42acd9d88f49feebc9cf2612e0fda031eb38b8e68041f83143e17502ad887aded772f615d3fbb3a0f36c6218e4ddb68aefa9d54a61dca7713b64195cf90fc3e580b2c45fae18c769b6fbc62482db41387bb0108083b12573150cbbc9c88313a00561c8ff2e2a7db577bd21275e5c7031660c86381573f43a9558b790d19ab18ba80f6554850bedad14a74d8bf53949c9da08bda20e53987eb607bc7219601e9a04975a5f0ed3bdf9a433edb055698e5612e29750c6ead45210b9c67ff09adafeaba70588f7bf626bcdf138c85dde741b2e93b8f512459473e71ba3743ec294b1694462f1592acafe73f421c608412062ed09a70fa38c9c8f0a0f2a7de330a5c68a8768e44468d2a323a60cb368a1295082cff5d054e6323955d5cac73e22020b990f8f2f7f1954437858d4a0af36124d11dbc1b85dfa6c1a00347ea0bdfec8900356f354770e794aaabd19f1da88cf69ce3e7686f1ffca48cad83f93abf921fba3552ceaa0832438656faa583aa43ce537c8e375271b68f59b07afdcb6fa1d747b47bd3e29ed9a140bb84362ba9becbe8c3ced2b70ed5448ea8be5a3f3e7848d9d104c9c0cf221bbb586c5e014956d82ccc62475f81b0b917f408a12e5af57e1fb244bf1187ac79abc73a928b60dbe94fb98d3711ff2ff90cfd2d209746722c490f6c829c3baa2a79e35641d92d8b461e6a8e5030a8747174ba47c6a233adc8b7760e38052c5cd9f8d151f1c09515a8f26155255aa8a1b60ce50f1458f3613ab40fb5a3f9fccab997846a508adf5f1c8bbb3ecdea7e45041a7e0911d216e1e88c732651514c2672aa22388f15aa43fbfbe7cc3cae8c1ac81d20421274e4db66aaad84d1a9a87bcbeb072d9e93515dcc8858e81d55b8d836d7ef79f17a9fd8d8cde63d7d80b1e51e882d6822db607e6df21faa4cb73f7304de5ba9e7f4c0dc7ed746f30988a49e4ea387c4fa7e6bc4360592906b7894016d733feb4428a7abf9e94428a11a73e83061e47bcf45d40abf2f9accdd32d83fbde8beaecd72f366ac8ca9f028b213084c18fc46b30c32f7a6025f4fbd4d7e24b86191537805cea70cde08a5852ac87aa7fc01d64fda8bb9e8ecd0dbcc4c7f6bf06f5b4fad25901d89e80851574470cd6d97f2b1bb6ebcb6b7b04f651a247fbb85f9fb5aa717c4880d141cc7e8a0ed54e7eb53aaa69aa656a67a32c5c84fcc4dcb6070d3f93ccc41ffb88f9f190755a924b3508dbf78d3b86fc16d754080a40cbcb862945b8a2aa46a04ad1a99096f639d07f98302b7cfb91e4978b6eb292e9d64225dc23c479c362fdab42389b21ddbe7602556c58de5942b2bbf07e5fbafb8a87a4fac026a5af9147a35ce42e3564d4812b51d01c766d87864516552260184b694deeba7202135ef806bf5fa0c72f84e70d2a03a22afbab3e082dad4e0940c5b4e91dcef00a1e3d27582d75e1e8aaeb09c91171305603dcab98502acf79e6a3614bf73c23a4fbcf90256621e6d285d56314a5527b2f60af6308d8ab85589e03e2dccfabf17c32b579b756bafdabe716b90f542d07f1b6e4c08b3fb7eee876368191f7cab2b71e3c77b342dcf723776ffbc44519f918bbcfe9da9eca123883ec380f5823163310c5abb60b3f463d8f9ab209eea7a0d8006bcc30af669242bf0d497501058882222eaf98ecb7834f81318b28655615c17d4d065832742e8a2c63ff106ef6855577b95aa3f70cdb7d95420584d0bd5e189eaee794c14cc6ad361a932df9c47c60b6d4376ee6f7fffff48a07e8b9329fbdd7ad7ee15c09b3ad28b741b526ac31f6b15751109d8cd54511892873e5da723d53c7e0e29f87841fcaaed409710d84a6eaef49e19618b15a6d2ec0dc32ff748d49208109407d7de6e281244320fc85f79e912b6a27097a5643bc353655bc97ba0134aa80931b2ee3f37099479fea678aed8b6066cde3b886722bd99fcbdeab9072a02eb4c2ceb9fddb0dc23367e9880281f673f62bb2e6a3a0ffc2606b308a3d23ad92a50e0b031eff058433946de11f0b8700118d247898460e424a5d0b2a025d1f91e25700654cbb4222bfbf2c7e464b4a37a0ca1e0e07ee0585b873866481a8c86a544a12322b9f2e195dff01cb130da2c71be88b34a005891c88fc41fb9f1e8364c048271e56d3e897c9f12ff79e4bacefb6e203a86f8e87d54b1c9daa8b14a0af9ca8551c80b54f30ab3c5ea753f5b298e01b45b90c0d935ab929b6ddf2846548afb853d0b427152249f49f119d56e3c5141fdb20cf20c5f97bd701c8b7494579391bbee3eec7b32f40cd8ad2bc1b017f34c5cc5ba35b0d630bd023fa920f17f72fdf45666e8bd0222ac36d267e50ee764f75286ff47e67e25d82669432e019eeb376d3104f2d9442cc06cad9710f3f772999baf5d13ad3a95f7385a7abe77e07f9e6950bf3ac70acd5597ec35aadc970b1d3d85bf29a878ddac48e5d49eb9c6eb5958166c2b94ccbc30c052614fca502bd2b7695cb4a3fc3e8934b784b12a8702e14ab41574867c35d53a36d4a13f4333002011ff3012793b7def69adcb78bef2e3c718f7a25e30b3699eff81b0f2a05e847ab6adf88370e240ac27923e1c6b0441526ced8d387616697a9e2cf66ba6e5763c9fda96ff4fb3a2c3ba0b7f3fa5e8a8ecd5ebd87d374b36805aad74653ef1dfcf8a3253a6627e26405ad49d894037af192fcfa52dcf38091ed2bd806026c5e45a1a5189e13abd6fc0d3fba7888adf08b2a684f0f0c86e887ff42f10504cf380f7aa23a3005fc8c4063750350f320439711dd9819024c6de0e6287abc7601414b8e06cef2e85a788ffe18228afa266b9300cb84f80d24e99a6b9d4932928009c7727b411d87ba5d42d6c4ec707833a241dad1856f7d674d444b82f5b1459619d5d1a0972201be124fa1ea58af492d89fd5a9fb7b292c6653fd85b8d115eb8af8074a1c8364eaa1a87339ea070ddc655e738f2965565d67e3d71137d09f9c8e0bfdfeacc7cebdb08b3116c6e49294f1592acbb96b3cf7eaeab4ea147bf75194562e7c928f3dca170214c6ad1b2a077fe3a319381a7d88b96354c75098745b9376430f0160cc41dea3165306780b44183fbc4de6c989bf35bc3be75bd09930fdf365bd095775489185070bc1787ceac235dc56f0184607cc865cafa17c1f08af46cc97bb6563ac785e5e19fe5f2680a7d8dd0bd9294b20f76a9ecf45ca4976f6a72e3900db96b6a9838e63078187b92ea1988a8b204c990aca063a719d6f0e8003d7f3c2d7ffec74ddd5235eb689cda4e2af8a1a0529fcaa18f39ec0ec533d1cf85c2ad926ea7f1b226932824fd6496aa9bb0e78ba27fd2ef9503b574a8ad68196d7f588671a8407957bf42866dfc4be39b28d89bf8a8728aa32e025c4ef30a1dfba3586b41cef7a60f4a940be14f815a0e549b380c744c50d3bf3d378dca57d8e7d3c42f505a525f3e4681fc68ea65eb018335925884f9244aa66423e6fafa1f29b179e8a0e6e1d222e37c31706b47925d130eb04bedac79007a33ad1f90998cad93285031ccd1b74da5db2c2e4fded702418bb5e625e4ec81fdec69aa8b455e5388d7da12828829999a7e4f0bc480de91cd37fc6ef51747a999fc7fa74a3cc9d435b5a434a452a2b8f059c9219e7aabe611cff6e1dc1dd174620683ede6d394d62574e389c9862c2c1731aa0067d082d5dacfa3571dfa06133d45b33b8251aba23e66d9c0ccab8251956f3082b13997d90ef02fac78385d86bb35d210bb9a18889044c2d056123108c643054aeb3d36b97c278e9deedd5e00089119e0151710063c07af2f0f835db3d39096ae7959d553a0083d52b0442c2349341ba08e2d88806287b3d7dee3c6af7a32703a7a53e2d22724d390f0c27cfa8ed2948d1f50d439aff9e1d22a1a637fb7d6330034e91787243fd2f2995e1f0875935419d4438c46c525191758a6dba1aa82d501e43b1b5c50eb4553dce8117eb46d66111604c2fed1dabe72d243bcefa183d1f1c40d0027557304f745fe3f09de5bb8081f61844aa1b260d6415fd6255ac2f36c69058d13f9857f3f877d384dbfd6da04601890069840f5e1a9b4d1f15690021ef2c5a4125e71bd732f7dd6e5cb0545da9eb62bad621428e37b2b035e6545215a082b3898e2deea122a585db268179761b19b2cdff84dbd6a1eafc7cfddc013accc58e740a9ed9c533c39df4757937af74447d380409f219228831d78092a18d365528c0ad444eabb9efc8840ee0c8dbb028faaba3956c03db4aec18d1c3cddedcdf647efc38e955a4fd3a5c7235f059746641549baa4be6e8dcd85373dd0035fa5b56a81c7fb41692b8528dc75a5fee592d0313346b1aa59bbff97d59a0197e0a5f845783557f82481a0fa45feadc7a7f9f41567af72215eed27d4ca733ea923be636903ca061805470a34a68654eddd76ec80197f6971585696636d8f33900867cb3059a09cf8fac2c12eb739a5d154b79e13fb09f5b26716fb07fc045d4cb9e8227251ba1c5db288d75f62c76cf691362a03aa1b82a40bd868dbab0fdc2582cf6d8e0dfef119be41739d550cfb38aa590e5e5679f851e655c09c254a5ab6e0aafe0604f05f6dcc10fd6a8d4cef579b7f900f35cc2d8e1527464bea2fa300a16f7234e58c7eaa013e8bdbeeb4817392d8ba91831e43d1aa79692df8742b046d102460e7aaa947f520634889bc6b7f9535ab558e3ce339bc0b606142237a6ed715ae4ce25250f4c85f287a33d725507e184246c523c3acb670d63585e1a2c6fe33e862688816e1669c294b3d11a3c5196ebb03395137cda68e08e7d28c8868f7fe934849da7af1870578c2e4f1d73a1401714fef678095b3a3aea984e7e163b2fae97a18d730cd4403aaa815f7b34327ca852cfe4a3fdd7ab28c77db4b80aadb985bddec641d6bc061174afec2b1231060712d862f747496346aec6fb8614bd6b355ee58ced4478d3d7487862db765238fb8d5499ae75c2ae410e759e59fab7a51e1cc87db65a5a90c3e1657de99a7be7358204756a4c35d29bc76d64d60a7237f03bf33742d37e96192f8ec2f150587f2f5e77ea0b88cb371237a3eed3da08f68228357117dc743677cb99d6b5dcf7222f943606c9f40d5ad742bfcfe14560e8f14a63bf585e0995b6c8f96a2daebb1c6b2a666de066071687d7142f0f156b8e5158863fbf65f61814ab9c937903479d240ccdfb6102da4bef6db1924e9456569bdf65d5463ba708db8137884962297bf534ea0af4f449410ab4205da5a5ae3790f18d7ac987cadd3aa0ea9c38bd868a1d937a467959853192ade34ffa7f1391765b0a3f87024e6cbf324edd5cf4800f1be670869c6457645b27f2f81bb9fdcf0350a90d64189704ca3de875d5222717398ab9d83fb586c5656af77c91a7d85afb8597c291eefc868831a3a40607ecfc0d8c577040338ef3266fca7669e1c374e892f86dca5dc4b313cd57617e29298e228a4a51ffbbd7631295465e2fda000b21266bc86449ea896844b46194a60c8425fa1755d6d256da58de019e1d17dbd604e8efd733ea10bbd52cefa780f29f1e3f161efb2fe6a45559d615d605dfe663032f1ea58c5935cb8859ecc035444159ae8c9048d2cfaf293f5f6408ddeea4d54062e4c6a0d71240e43a83db88dbd34f643e1ab926607aa91e48d5759a3655c48521589a139cc35694d92b9bd76be3b5f63306c19c99ce5a5f98df664a38d3d0a9b16b96bad3158a9e8672ac5d000a9deb6d36ceed8c6534ced3e7ce0bece9e46855ddd197d41a36c00658fd6738328eaa02b3a356350a17484ab4e1fcad171371bc49716fa74799d215cf8116971f04881459b7c3955b10e852e07112f0c44236eb9845fed2106f3ad04fce9d0ec42207a599402d1085d1af854ee098a4ac031b50356f2d981aac86f822b1ca2634425f439bb44fc172b9b1e2e93293000d5d5727f4f0c5ca9cdf49d3dcda258627bb009561426227f93568ad702affe049a97913d591d328e4ccdb17f872753f23aa4d23792d0d9cd3058416e2b5c17d4216a96dc1e2cc5faf6d95a08c51433243506b286d30bf7158cfdf4c07d43202d54b9c6b414fa58c1a365679291a648476346117d0ac5085664b83b4401c6d681c644ce37f307bb789c2e941da1b7473e3a17361acfcc8924ad96240ae4e185cbd35a13fb6cd3597d81be798eddd2a33dc6b888190efbafe4372f43077897462eefd076096a3988b53a144725234ba666acbd5732d7dd5a118f0e9e0d2a7bdcb7b05046a57537d54a69b8bce531c4adc2ed9b5e4275f76a1c141062bbb80d7f2b5c802551fd395da83f4984dd62114daf7d1e0aa0f7fe2257f296c0925af065a00defd47f636a12ca3aec8617438bde1fe5f3f035e6d6bc18a75dda0c5fcc2592460655cf24e91f1715961122cec5457b985f394df4ad9616919390ca37f894f86682f2fc900164c133d661699003836d4ad3633d1d9872d7a489de265e1cfc32126ff722ccd8c6a1ac5e46b9ff4d9234584c4d56423a278f76f3f00897e93a1abf6fff9e484c31909b4cf736d27c358c963dc5762fa066a0442b3802cfbae94a9176be0ccad31dd98bc20520fe3370b1de71554fc887415723431322a806cf58cbc709e976e56f778d29200a1864459905c7fef0b382d721b2237f07fed51881c475751eb8dc41dc234eb87652a4a6afd13819e5d2c3a53dcadd31e070403d4e7b2655b5c5b090f2b2fefda78fd5c612b98c971fb9f193acee00aff14ca5ff35ff407498e2183d4df4782bfc5c99d4f62c76109d716ccec626efd91846f3ee90bb845810c6ce95f1072cdbab02034726281a9de5e0825b9482ecc69ab6d5925a581ede2a522649a5d68d64c13e43e7e2eb5fd75babde6118811763a79c085763101caabd059e967b951eafcee56920d232d8ccad31119866abde5711ec29c1276e608977cf0e6bcfae176daea573a30cc88427ef36884cc8ffc1f9871b989f867c56b321f149d053ca0bbf8859e22952d78573691230264fb4739da3b3fa15926fd061a3ecc33ef2c72f12f5ef89ccd82e89b079b8a29f3cfdc985f63b665700e3a53fc16915cfbaa61e57befbf76a5a1de529574835e3a26de056436f42709ce64d0caa7026ff7530c53042bf37bc155d296117a09ae2fbfa2d1eb3ae701c38c1803734afb17737318c814ef8ee5ac5d34d7a7a95e220c0572b3164dfa48311264ba3c8d52b502c0aa342fafbc2315601a1dbd615a1bee1735c02bd67e7448658b9966e66e29fc5553c50e9a1b992c32036688226d92048ac44914d67f53ca1115da107148baf2a9fbf4d6191f15dbb39156e7ae656583a1cf0bb809e85bae0092308b979a3654f4e5b50b83e8d9e249a88ec1d4eb2268655eeb41c8233e5d4441e59cae39b6ae6b4162eeaf89c72a8a67cc69f45221a940c57dd60d4c3a0031d74c5f4592dedbb62afbb0f0744e93eda9508f5eccecd93bda17db6775c0091947de6a328deeb5b8032bcb3a3f9f6b36376da160856b60089fa63bde4122bc25f6d8d677da0a9f2973b8626fa6d5ed646c7043d65e96af34dae05c0db4611af569d01777f058d6347647d0cbd04045bbff8b048e4e8e9180ccfa9ae3a1b7d4c72c10eaf729e11e3fa8e44accd85300fe27f54028160c17314629065bff051ea997571ffac956e57983db11ff66a14d7717a7e20803f80d25278a1d953e3f308f885dd77ac63b90e9b082f65173e575ab8117de0e66d9459e2f7d50213e83980b5dff595282275469701e1bf18b04461de71ae11475bc61e16784799619d8cb695b148a1fa7b91392577e29a05c6dd9decc51f78132d8b9fe158edc8a13053deaf8cc5e279373452b6902342f5fedd3bb8ea3cd3b9bbfeab32626cae71414703af593fae5f08db8836342016c80dbaed84de120c23516d0a139c38b0aee7c76fdc22513ed9eab37a80a835eacef20ec423a4b4080b80a045751bdd356f721b1d9072985e1110b7fddc2594ac0817fc52de79e0c12a707a71aeacd71e6c8c4058b382020a8b92fecdce1f989192316175bb04ee3a47df92b11d450045c31d603518e985cff2924bac8f9e7a8aae61115a63ca553a3835c24320a8b2e32c6252faaf0c7d040bad0ef0b9465dd1128e8758fe58670984a3b0b362a65570829131dff2b9abe7502c3e163f54389b417a473b601091bdb36a5fbd20f8eb03c463010c9eeb8e04a176c703d5def032be6d1fd3a6322c4f116d75a3b2ba9f315cc781539a706da43298c69208df13fdb5214f30b0080066d79351e77c240021531b1a3077cdf53a11e3114a16ad148228456d786aba8d3ed3137373f3291a13646cd927cf5a1b4d13d37aa6a9d3a59d5d338d6db1ae6f15053382c8902cc2a0bdff2dee931c8402b231a77df0cb47242c114355069c6975f8e8c40d01a376256ebab3d0a7b332388d3711878a33505a0e9d773e6c5fb864260e6290ce0bdb38d12903e0aff549cf53c224f62ef9ae9ae881275d367814210b0e51f0098993938c8a40a3e98ae01266fb81e9902d6891f2f6612e01cc273ef21bad35d426927960195a4127bc69a9a891e887ebce404dab0f3d2ab30815847c1e2fd15954c3d52b0c6db35ff0dd184f8b9586481f9f18fca374aac6848f8933f2770b4c9ba1f2c6f703f9a36fc247174f0b7572647a8ed08f46c7dd958b8eaff7ddc35d18a41b33c878ef53f69048382d83accf2284b9a6519adaeccb3d5462347cec75d0f42236bcbfbb368f3c144f4b351f07f52518c4552fc641dd636727204224e3d24fbc51952767ca0ffca3424cf6d9881ca17625d8dd9083fae54eafa0f295684fceea98687406b7a4a285e320f9897675e68b9a0c380704f5d3c2cae6a3b8cc89e91ad1b0fa41786c31f8fb96e254dcbcb00ef88fcc27d6404b82b256c7c2c5fbe517b190ac151e1139055d42c745f50fb9b225b642887fa69d889c0533c1ebfebeb40f01d466be3a9a9abfda34815ade455f9cb6637bdc59be0cbd3634bace4b1fd419a4eb1fb20019b995c7a5117a79498791c011ca55ca8a344e9f74fa82e1746f57cdf63383a97cf9b16b97166c9ec08bcb782439e4359e1bc4a10ed7875132c655ee0c168a8484dda8b7f4e803652bf38f9dc2809a39a852a8b7fa48dd0de0d347f963ff62763d3a2fc23886ea3f3acd2465efac4feeb32e21f19cd1caa85efbbc99b69f36dde51dd999c5636b05372a4518e9f47238a876db2650e6f002409f2114b640cc2355b6e2745a5798d98f7231b94a45f6dbf3eabbec4144e20e3dba3bff7b19b5f0c4ebbe6885af5470ebca0c6b22281a97ea847db266cf390877872caaacb8af3d214c029e538437560c172f8ca3868a1fe0e49985f2c62f6c93e49f37c484a9e07950685257c1f60505ba925a2e15bdbc0c1ad8609017ec9206c16b8a2652e7249facc9e80ba13312516a8dcab5ab3d25a1b69439cf7d29e5e98945c4526298e76a77e15f889e3eae7508799ffde0399cf4e8569bfd32c379adf5596382df619f4b8503d8fe7552e4fbe98eeb7835fb51e51fadcea34098157a9be15a65fa26246841017f3a501a2bb54d5e9a88a5e58f3d8b471e90ecfe4eb21668e26ebdabbd00a83978b6afee520b8d400ba2c7394141b0cf2bb07fe654e50b32ea107215d7054f821f65b137d581b992ddf00775f2c8ffa61eed25cfb5bf3e74bbab1c216ead4e1152c1838f71bbff520dc25f2e37e58434796868e5767031233996c7b764c69ddbe0166b04a6ea46e5564e3ae0f8c965c56419490eeef2478312c8fbce7a29476caa5bd9626c4720cae09ab0dede4279c790058235e2036ce0b9aa919679dfad00e6b05074e18c09ab29e9bac05726a223894a2715bb3ca6c39d59492f7607de5f53bd7cb516b7218ede08bdcbd5dde58d3bddda54b7d3dce77faeb51363ac9543a865c7ae6479a6a0c7ced15d560cf4ca17beaf55349656da78861183d27a40a902eebf204e5aaab2a63ce6e8ccea041f7893eea3fe4cd39ebabfdef625dfd79e755126ef308125cfbc45ef25d81756e8c7edeeaac29a4910a93e96b036f42c6a8bea69e95713fa03a07eae7a23b0a86d8a19ff19a33a0dbea67c509c4c0c1693d6f4336966d3e91cc6de6a3f97aecc02e793766fb47e554974db217eaa315e6a48d7d2065f1bf39843503ad9789c8dc77c3a49d3f34dc8933c7a44551e346086bd3c6bb9006c080ee64f4eab199aa78139ab35b777489fc57da632cb8d2da40beb8245ad088ec3850e775b86d25baffd74f29a5695cd16bccaaee22db318621b41cb7f8b151aeef6fa08bb43b725f05f70cd2857aab1f3dbd7619631dc6749c07ec34e3c7b260d29bf20d964fd8ec0b33233553bad097ef0ceb18ed763381126f4dae9a0550d7a839a28ca810c1d7bad0b03edd58798faa73168cc3715faa00830a2a3e7f597864d730d37fea13cafdfd4030448018a8f7d1e6e678cdcae0f58f2f20c555e7f2b877629a132f9e47b7b47e58b33508364aa9dcb3d8f42c41cfd8179b7d29f8977b471bb12e8f2b2c97cd746db9ef31f034a449a04c8c01ada3380c12b15f0324728f0ba8c008a96cdb82f6b23e6d65920d99c6b39f1293bea7bd2a065f2dfd7b7cddad831be2f0d2b11a822e1e2eec243ef4bef9beeb48b7dd8dfca2fec9f3df3a82904a79434fd82d2329c897c3fb0f4928ba95f870cf35c7946a4edfe5ae07bba5703d38ef1270f2a1fa428b3db4ed43bf2a43589ed2f88d0e79606ff0116440b069a87760f80268d9329a68168dd6b17e9037e96992ba0fbbeb9c946b024572d8849707f8649d5fddb8bd1dfa0da6bf9cfe89bf3255dd9441ab7a2d29b1b05a62e672b204522da26f2b45218a1ab17ec31da857245888401cb388430aec2a577897f316f908d11267eae3af7987c8fc4beaddefb031827324426502f89ac3cab193f039263490276582aae759b1301523fef788f9f557990498375dc84999486f2bc08403b2e08532dbb6e5f5cdeae17b6233315939765798b23dd4bb95a5e272a88eac1ff4f410a00a2e22f4baf500307da250d0d8e24a3ebec84de8dcc0ce277f09aec33f22f2c0a2b2203d13c5a9e5a1e16881a1dc87e9e45cb515ab0bccf943cbb2b426d553a192a4feefe75568f1cffb7011736fc535bce6e7b7a6cc1abe2f5b3e68448e5469b81ff55ceb96e5073b34ea829dd2f5f8d2c28a06c90539d578623832a1d4e2ec51d6caf5b760b53d2fe74edaf2d8579d9c7eab6f1de64e58444e481cf4f8de2234844c67d03014797e37bb50609fb451cf376fbddc9bf7c8c6c37a89a18388089061d14724a89ba25ca5ba3cc76839d1b9b489a01cbac5b5619f455539c7105079963432724d113b5fd6a5d1a32fb92b6cd323b1085025d52bbb74c3edd3b7df4ac70b9f8654fd3c599978a2c525b18175bf3a6f85d58601614888679e0695aa1c292e0810b4905bf8e63eedeb4199ac7ac60e7d6808b3ee368c674f5c3346447f1c7873a489837f869ae9158d9f12feb672ca4664ed7cc1b742f84d3061abd161b0d43cac7a7dd429b32410e430b0673720cd1d8bbb31f7f6e2ce5b43e6a6d55d1b5181b2e67c324cf8f7d71c5ea9019a6c4a7ad7ab16c1a87679d254d4a8080805ead33d6ab476d2bd1550a4776518105fdd02a7fa2b325d4b917a35f23ecb6b59f1af9c284c54b709451c5eb4802d6ce364f871d79e83cd059c4dacb080e7e202379ecb883c9035aaa5539bc1d98ab6157aa7be5c032d2411a535d3e2889bfc0090f09afedd66195851a7df55ca4c49de6dbd02db3e0e14ed01410f69d4dcbc02d73967cb0f070d6c64b9672390bcc38ad21cfe3342b3f92d6c17d81fa3bb19c40dc8c7fa516ab63e65605583033bf82d76121b0c4d258ec32136704bebc22cb59ca7b9feb8d4bfc943f72e3802a8c23a4ab481ab5520a4d6c7be16223a5799831476f924471b39100c72403b9a50067a331c1ed42efcebc1f6f2feeb2d4c74d57b7dbbeaa24de491c19bf394c294cf62039478cad67727ffe4e401475040c033642d2b1b0f689528ca9bab014cb2a652709348c158e9f23756e627f8e0c08430c452c9a242561f8c74270923a04fb0cf12daf0a2d786df29db34d4debd525d931ad8308aa8a9cd10e72a412e2929a3868895d87dc2752407764028fe176715401976dd696f3b0f1dc8cdf0f0365275f5f4895d5ce8771ab99d2625e66e457f79d6d9257d0f7db8adbb2f56e4435f65d46194a0d314841bd438666be49630a78037029818ffc30e5e6a8ff7ffebfa14399d113ac5c71c42a0697bcda19fdd20b4d3bbf9ebd251255eb131a743d0d0b3c75a3a26f325e169815ffc952f3cdb45811871bb1df4df11cc28ad3ee32e821c8c7592ae8f15f34a1abebfd8101e2eef154dc903b7148a5295e0431859bec63a1830ed70838e63d7b86d0f505955d3a722c242f0cdd37d4c1dc37aff5427d7766b202fca70dc56412f2c0d22fcbff934568e0161172a249adf71cf5e5c8db8060339c776d6b1ff58a3fab292c1bd3c155c9a1122bf5023160d409f07f472b9a81afd0b9bff455a9abd0f07a5723958bb17c3dbaecb3cfcbb2d911d5a4a52f6733d2bd2c21e0c245e8e1c8d1cbd708959a5db72cf36bb286cc6b2beb7c0f13584ec7c61d2827363b3530ce1d4e9567ee3c5c7951203607e171e23327c64ea20de2f0d792cadf81ebbb6b89ea7c4cbe01171f6a26c928cbccfaa73ae3e5e3649825c07437d86352cf9e586c62663001cbbb19cb06b151fe85c22f24b71c11e9c8611859772db002dcf6c68a2e6d5f69d644c72a1428d68f6a34d1218f5beb5d0fc955e6c38ab8972e154b6c736c5523c85c9d93c5ccbfcb8862a21bb7848eb0ec128a1b5e16f816d6b2312578ae8daaad4455edc47477f683d7889406d9f89da4953e690f479b83ad0069acd73cd0f55c5b72c86044cddb503d1d7c7058c0f0beb2d0cf0a87d2076e9525d4adf7c4724d4a19b1d60f6ef8cab8806eeda865789f6297ac4dfdfa193c550cb8407f231e3e7c5c4fb503800ab941105566e4334aa2ca551240537e5caf291fadaf7f12c12189d844d4c7d80eb605aa1ffde35cbc272edb9e903430eff0ad291ba0d601f75e8ae8e1f3c32f78d81b255cf218b7fb62d9e9346d10c7c813582ef3e1b078c58318ff99d590c377e975ad6402dde4444e37a39c43822b6827291cf5a88414d013546b780b73b4319e2500d74a6869d31eab5232c9e5472aad4d3942bc7aeba83ac584905d33a8b3bac2e93b5d3753cc74ad712e6bdbabb49e8be186e5c4b476b2af108b83ed1ad6f093b8ecec0548dd08a42b85feda9338a08523a470dcd4421e4a014537ebbeddf65f399ca777ad59b711589fb4e38770b02077d4a8630fe78797c10ba49aad342f7dba4ec883e56c2d2ce8f9ecb5a5fbf5d75b123db50caa45f673145b17bf14619ef58f0d8d422059c930bb15bda31bf8eed50ed856ecdca865293ce6bcd3daff0008763891895ebc5ab92803292be458da7afd5b1daa5f872e6de055acb1668e9be9e63f298976d2c0ead28dd02995c42ee140f274c1a8d051dfaaf5ef889ae626e3b7da12846ff86614015e9cacf86217f22d3620d8c42f39db0b245d48d86349b07a0cf0624d021bdce4263d5227f366a2f99a8f04442fd42a3b248ef6c60aa3d47fdae3bbb3db5326bbfa1e048dcf092e350aaea01e509ebab3c991f2a2187d48d33ae811868985753dd261da7f5bf1c05742c891ebf9cd8a45b105522fadc0daf9c9b63673e3a3f0b45739b8849523e78b8e90a1be98ea241398b6846d5c95d7099f223d6ec075aa1f5936b45df8b60bf040a5c417e12234e16a9cf7df04bb99a9046c8f207697a1bfbd0dcf2501ab19a9da577479322b4987718ed4da9e1e14a4af68ffcb95f1066dab344a8908aebdfab469a742d952b54d71d3bf5cd5f0e44b6180e410fbbb849dccded6513e6f7341d1da0d091780a85ce76a90d360e5a1d47523859e82973c678167ea9f1c38f02ce9b2d03f95da8f34b52bf32e92b5c0dca9731f01f7cd0905031996b5e8f44680065b7c19cde778820ade06c6782c098593684aaa7c22209f1e038135581e1a93105fb7f619ec364e28552db333136e22cdbe4569c107feffae13e7d25a5cd2608381d9ed9e54eb6112aaf5f9e221f1b5cf4304e4cb836c9385b6ef52d7ad3b70d7d9b91d25419ff8c5cf5a734280a59f71d43b8307b44619d700faf5d57d993e511366f2b4943cc5dfcc9ccc61b4803d36ab3ef245db9f3e24ef3fcc3bbcbcc52addec058eb8f75f5c2183d53e3c5926330132c1e5375f7dc9d463f4d84b6a53c86b52e2f5102d92971854a4ae31ee964031a2b136f58e9f57aab0100eec7add7fa3aa26d4df4bba4a2dbbfe9d18d9a2fada0c88247b6908e7300ce6603a08de3fd3168ac9540eec0db49aecde685158f09be647fc8535907422275fe180fb6bcc4166ddab8a9a8f2a6bdc56dafea384464a71ba9f9b3c002a45260a9db96e643b5945b062df8bf3ca21cdaf9e82926e6f51bd10ae82ce2bfcf36f67eb3267278b1077d48d2faa3000d8ab57885a74b8d3d70467e8d4c84298f5be5926d73f3beff3bc5a531f36bee02b1b5ec6ee124c64dae7111d911d594d34e7209f92eedf0c7e5eaf1d3cdda0c27f94dca618714756cd6642fb12009045b9f8985e9d2b90057cb007013bc2f8a20319879aea8916d4df411afcea209e173719ce2c38c3b820972bcf9378326757053fdca5779b1f789db8fdb30cf7dee761eefc2564aac9cec6aedaf691e32685d741edb3cb5bd672fae695ba3482edee892c7e9ce3b88a05ac5e23fb48281e699a181175291d2b928ba92d4328cbb62cad089116af6524d1e803e1686f2e48a4676f1f34652f5ae405638f281bf50c30bdee7ab60e079aa39a6e7949df9a9023cbcbf1b435d5aadc6fbc6d9e578692148009e72ff383fbecaf445bc807a941e367fa1614f89bc4d4652714b7a864d77cfefc9b0f955f2ef9ca0ba83d9896c11844ef4630ec6fc237f80c798c867a0f7f324b753487a5bb20d39dd57a504f3e80639e6a62e89b64c7b1d00f332427d7a5e1554d426d44264385a146087374508825e76f27bd74e8c4f269680a8da94564c9989b0eb924a2c40db8303d4643ccbfc7a9ebe09889432825916b06e64e349f870eea4592a7dc7d7f5fc5b0b8acba9733d53237680aef6b2d05efa07c546296f9aed4fffca860e5da51b79f4fe48f2452cd287c19c5e455b54bd15ee0efa46f9378d5d65cc965dbccfdc3a1f5a272dfc4405c82e461235514a4942b95dd7456dfa2b5754425a9dc1bd76d4575b003456d8034d692e4eee4f838bf4087affe0a719a22a1be39b918bc2bc16b2e500115539a9e6e80d72c93bf8f172462d65eedb277ec952c315befc6289fc0aaee1edc0a710a2e71a8706e23438d3d9b5faf93da469bfc62a96cc055224655f68f6c95462dda36e16a29056b062346c9b7a646fe3c05de0bae8c0bb8fd0cf88887b0b0197ec38d8bb6f453b3c3ee06a35d6011390ba0ee088dcfe1b6e65ed5925ff6a887f00b6555b489b4125de6a5c50a8dfdb222513213225ff7e43fbb8fe28c234dfddc607ce3ad83d41830ed5b68071f87def2889cb80d7c1445e6c6da5bfd066effb22683eb26716d6bf0220f65d32d70a5ce8bd485db20477144ed65a2b24c640a5cc61ce37c12961f91fd9c251cf47f44a5299651a9211e44abbaf9589eaaf86f91f3a98e4184584fa621cad29ba47d478fa51541573942d42541c5ce9a0051b3f4d7aae92a7daa8f7b77fdac5e6aa8a28146d8e8504c8b22d4212a5f8fc7c6f44b6f6904dcdce9fa1b891636552fe1c4372b522ba1d68f113efb5f33c69a207323361fac4b7fdb5044c702e3ef843b82ca94ba6733a8563f67f7b8e4a8934e817e7aaff393d9a34115fa170ae47bfd011d50b0e6c270848737940b6efffb679c75358b8b6a8d5c4c11f09f034a0c4cf22a0994cb8b00ce46d60ca1b85ae1bd7854708593d4608acbf092d1d44a3c044e5a6c4d085ec7dcb787eb430039031ecbd993e70c9430b93abefd764c7d7a3b5590618588c9783460ba1e3bb4bb1b145776d11f6525e1b0214786bbec01ab9e1e4b36dfc028be11ae623562b4e77a55c4a8acfbbc5ecd9be39784fc601911d1e4017ee24c14b5098d6289027aded4ba08c085d3b5dac3c8f7b20737c4a569246b261bd3c55a276c9c411235e681a07eeb7f767609b1ef00d7b369bca2fecf0a2dc15eeca78cbd47b1239396df49fa2cc4063fd6a038132dea2900b41552c16309d090f1a563ddb80dddda594964f1337a965aefa7ec172615c9cb3538a1f71b7c1466b1191b70999357bd14db907518d0ea2aa68867f869efe886ea044e44ae45fdbba3a3f33cdee0accdb87710d25c1c2ddbecef1c83a020d93a0561c994dc68817d8eff21af1db98389a10ca4662df7f50ba60bfc840ca7f1bf8ec28a8b3af0b14429a7a9ae0c4b621a0fc1d94d548c2dff09a8bb33f26b806b60138fc3d4532f55bdd8ef9945b7931f4c599ba2173494a4b50a13f910d2a128b935bf7af18bb9ae997fc7ed0aa8c2e6ec4357e770cbc07b5c9982477deab9be23a156ab67d7e2aa9ddf140af2dc57cff3313768cb86e25fd4d96c5ee48fb9c8445660b4131e5c86f473dbf774e19427e3edb8ec61bd99b99966e3c03bac4de22468a62256a2b26bbbd7ff80e3c68101eae20e9cfa3b19a132169bcb3f004d8c4c1ec4e10aaa4ed460d6b501677a2997bc3940b5918f6139521935a4f8b4269e6cd65c20d39731b8653fbf478e3dc3aa0149375ee95b0b0b4e13128d76977b0e861d11d612b0d81c97b9a106520ad6d8255a33bc9dcd489966762e4680c157254783f1c2a21b90a1d5c45e837e4f880e4367114ef7748367e6e1e286acd1c430aecd77a42d544f7b213edcc66ed4fee0e8169b5fa2a6f936f8f4bf59c14b8b0114f1406509852004ea029419e7de2852d0d73c30199bda225d9477650937785b93c20df6bfb78823e2fb09eb5aa26034fdbeb11e7a09b5bb1c3977f44d21d3106cf4a690fe381f4bf0b9d19481937150bfcea8e71ac44fa742436da9d6436a070bf50e4ec44694d2d9a00d5b3a5ca7442c996556a37ab882245107dcec8bd9075f215afc18ecc71a789753c979a479382eb5e58d5dc2cd9013f640fab1a819d1445032e97166f65fc34977135baacb91866bb6522f52a940a09afda5778d88f21ea2f1029bd6850685b97b8cb12dcdd32adc0d16f2d156d4d0eec4dcf43a3e1bd44241ba00b02e766c18bb227df30ce391917c406a63889809fd1ca10fef3099306c436e161f17846ba716e4951dbe1ae521442e383e65a6b7957ed9f8b44395c31df0bfbbb73f3930f3c499b927e197e01adeb1ba32c9803050cf3ac2bc02483e36c1a5148ac13852dc01790874c77ec8eeb8038640af191c7eaf80798792baf919903a2653e8fa133afc79d2b1a8f7ec288c7b2a28758f10cac767568688aa28fcb04a2a2ad45fe3a746b845c72919622a118c116e732b2241088dfe85091c8809e11c973fda95c586c07e90ff2579608e12e0344207fc36c4f63815edda93a62613fa70ed22233e692933e901215446f379a597c1f8f1d4fc8c04f2cbcf6b2f1cf90a709f7af72a0d18a549e845bb0233eb5dfd529ca81c8dc23caa7d39ccf362dc5ce75d2b7ac2a538d9379a5be8c8c8d5bdcd9afaa2496214195287a738360a830cdf0b1b56ad1215f4435b1a73a69567c5292d39c8d18f88dde44bea77b216fab265cb8b96ab8d1fd4894bd0c206396fd5592ca1984222fdce06616818d38c3003353fed72ed3985a1eec7a0ae4f784d8ee23a92fe694e51bdfedb2232cdd57fc483d54bdb9a41722c81031d2fecbfbccea212b2e4c1f9c2b4e01f9574d378740c2f7c81a98fc7fa11653a06506a76412005a5c338f9dd928275dcbbbf6c2127d09156d395ce204ebcd36f8aca7146a28075bb64ceee4d95847894bac6c2cdd7e16d6ac40a2c8ff20b076b2ecaa22a21bdfa98e00ea0fbf60eee9e50f720f498e2c524d5964dc317c3191c0f65d62dcfcc709d868f488baf2857cba13c5d6d74fc9cb078a710f3a8d71ffb01046a5bad61097c39f2169448e0dce0cf4851fb62d1889839b5e82e2339fc8aaa8ebbba857740c96b90cabd23b61a22ef8cfd409090ae61718fbff5e6b955deb0bdfa90214325b21989b08ee8a34a0327686d20a8c1709ecbe1723c1bea8a23e52e98f8d95172e3479a2b4176cba77229adb2ff7b991472f2901722129f9bb5f3f077539bc32eae654a6b5188cdf36e85d71feb23f66a2d3af199b54135c98eaf8ca2c9fa12db2a3244bdc71f79485278e6245efc8878397372228cd8489cb18b2243456c1f0e203b8b7b19c492d446ea47c9425eeeaef373c3a8cbb415dccbc1f5b3dfacc9fb2ebce485552e98fd893de74ae4235701a34ae5a06a6b3dc9ede1ce1e9eed53c24492f44f7bad21fa569e9955298958bc1c454b6d2f03c9a2dd788dd4c8096cd0061e03e3bd0d3b9b83f02b20dbe4f2c1df89cceb48914ca85697f340d095409abf9c0202a42e0db5399f412169e6cabfe4cc353c9a534012e8356c10bf983a9c79176ba1f965e1cce8c10bfa2f430e0c0844cf792a8e9a50c967bf2c6928042b19571860672f2d51586e83dd08a2c9645ee3e58fd85a9352fc022ba87d668f799b21c75f207bc32514ac5fe60600811b45e642acc6e99869a423f3a8c19128e32a1d44adbf55c23b54012f8df7ef4d748b5aa7149d6599221adfc6b23696371137511bdf7f944eac24b313e17f33a97fb60b8835607448d2652198ee3943ebd1645d44a98089213e65d6e758151dcc4a2058027dcc5a71e9c87e982f0daf6a317d25da2a641bbde5a785a4e726ba387a45765075287f7a740c87e52f009647e75cd52b59a8c8234b316d4075080d93c94ba35ad4e88ecf387d99f7121a8d493b3e30d1a09ea921f4ed0599654c09e89d8980943a7aae6b64e6224eaf1f76610ad28f90d4e7fc9c24e443e6341121440e08c7c7c753de6ff96b94841db22bb6b19700d6144b532e5017f2934cd5b75c08151f4fcb20f4eded3192f188376a4387439918afd2d7fc0fd023be5e5d34fce428ff4e2cd117d21f8f6634e6510d059e5843f6608ff8837ce9eaed8458a55a13736171aee64992baabe91a3b8e98e3843f93cf3ee5c1ba3a9fe9f845e5de6cfe6d1a6b226a6b0299d4eff188e011568cab2d1d1c7b6d18069685c45142484de34c15364e511ea7d4e02ab7dea1fcb5c107b8b3a73d7f07291ffc0a483b0c47c31554eb2ceef5253708f8c67fc955768c1055c36f636dc25390036860b39af1898c7781f671df238f00a8e756e9f93ae6e85741ee96d8c0a7d35428a0f570e387a96a67ab187c4d2b9bc89a2ac24dd01c103e0016bebb8b3aef94cda0e4e8deb28ff0ba0cc500acd05492aea3c7690a9bd702d0eebb066995d8df0018158736348924dc34bc0bae2856680a01a1c9420b15433ed639ff474b1ed8f173e326f166bb1ff223f227591878051847bb3cbbe2d438aa8c9a7a49ada276c826680b419c90cae686fb0c7abe7c8ab7851ab4b32cb4c31884ff96b56521a72cfb9963441393912bd9b943198ccaedf6a7e7aed7aff87ad446a85b98082c1bd298c107578c1ebc083b11b5ce57a0b6d49217b2de601dfab7bd14d8c2016d0f5171f005efed271d5a1789e7811f34205efbf4d3800b7da1fe45d1de616abc737a15a7edf427701247c49d5646eb913e8194c99c36acfeac084d8824753e2b263e3bdf1b1b91d00da76d799f9f396bb907d7da234d7eb9d72c294c6724a41a00b125e537aab26b11646c1b5f0bd7d0179e372db8c3dccad753e7ce9b980133f12c6e1708d0121c919cb639ba491263632cf185fce500e28f047eb2ffadeeb7801a27518c809b2e5385e8a4836273b99d88dc48976c06d00d63ad7b10e841d40272f7335676373a70004e46db0294560cbb06a6c7d77a052b5e46003ab79e095c7eaebd121d030f11148cd05662764e2b7190a4307624c0ec3d0c86f1be31796650200f1244bc76a9388961dad7b770f601f8143b5ffc6c078e0e5335767d7b9b62c580ed3adc43a643be81f8498f3a7ae648bdc79e4afa4a3d445d519264a969ed206692668e2cb718381158e17a9bf40124bfe935abe0d32c2c14d14ae9d88438444064a5972b0ea1d764c9686e94427891be5914059f9230ed35f4400e862aeab9355fd1aa2a18c6c28b83da21ae62a09551fece5aea08883a31fd3309b81c02db87e5967418c289a7c934a9b3b3ff3b7c8cc9a18dc9a0ade43e47a1d4c871e8304d7d1a38cef7609f6d81f3a5ff1dd71fd8c944b046ef63748abb46828377236701dc9ddac1d260c5fb4a3e9c148c4d3a1c93d17984964397df4be6c11c8c00d09eabcba9805b2b03cdf6dd8e7bce5e802765b4a3512604056959ec1fe9175b17ecb3e682d550dad33ef5210fb812dbd2c272f64fcd80507c72e3642c6122752eaca14d38d19248d27b9f9b6cfdbd5f4b64cad92b44df187fca3c893c19525630fbe75da10fb0f10e40760e496296421bde4a51e1195fbc4dfc527e6a2e95680ab05e0f95c06776c8f94294f30660402facc9fe60284e5237403146cfdb006cd46af9829367caab2bc9c087a65d604ef3070fc8f47cc9f6eca7387a679f43a0270c2350408167575ab5ebb70677ef0b30d608eb051acc16dc0bc01fbe10049d434ea3539a177bf11daedbaf2f35cb8f916c99c51a6720834827ca2f6d5ce19fa780621719437c0a6106ad61fa9d576ede52cbca79c67459f23d9040d9dcea7511cea313b137a7835bb8599c496cc13a80925f989917cb10b0eae432ae685575f9401439b2a84b43d9227ce9df868113da0fbf4b248090c4819f4a24735946ec050711d0f323b367e3167b05c689597a46e4e625aaa1b926ec8fe017f6965af07f38b93d38b202a6ca97bd1d2688b7e9b4e753e13c9957f9bfd5fc43567acb99ca2a037f7c9434eaee8464cd1df27444ea63779df27cd9de609149309bcf8bd20959c726ee2b480cb89fb49a554de2716e16e95fd032de2c915e86da0de50f391b0dfe945b62ebab9de9604b557ea84230ca63da80c2df1eb6394d1d9399ba4532f30c1aacf9d2c761202290825053033f87cf584c9731824da9ea78376b26689330cc687d3e01f22bc7e4636d1fd01c69618776cb611372f29fae9eac5d735c6401e862be86e45554450d57084a957a330e3186679a01b263ac392d51b50922cbd32b22e4fea7d69abe0545fbde8069937456e924accb6963b236cb8f8f242acace0c6df863b68d567772af80fc439a0d3bdc5fb7dc5e6b328a93c84ea5b3e6c213a30d4a7b85db82eabc100667f830ca5adb833a9c6bb4ca1348d689c1427fb023c9f699246324c70471997aa69f9550bda89d759b05b50994ac23a23e5151f21a4bf7809a38019ce19fe9201737060c61a5f468c9e50d7015e8084f8dbf727d22a76037f2a6c4594bb417aa02cf4547e8f47cd0a6ed27ffde93290aede657b06aed7d9d9e343a7eee3537cfaa87b24919199bd7d2774674f03bfea4b746eaec5f129438c0c40e88bf46b09d50272dcfd8cb41dd7e020331df1d3e382b61ee3889daa5d85334fbb734af32548d975e29be4a22db9eead0579c14c26b1b2b906e6fb01e1f406b4a2b177529111a08c27f8411dd96b497932d75754c86cf5b2aaf1e3a66ce860880c0ad9c2e22d1f380c02fa683614d9daf86092b256309be9b2760b1918bd1e43381c2f3ed554a77c6d0ecf8e8c5822646f29c470ce01eba8644fe09ae5d5dcd36727d6ae84e54d4b685fd1cdeda282f5c99c4a02bc1913750cf5830f005631838bdcd26bdc4cff1dbec298730405f9298d85646198fd6c44f132390a346139d95a69d6578cac843466e88b410c963b4b46d5614006f0a4ec90a0865c08d93c89b7fcaa9bc76e7a992ee9b7cda634413ca5eb75b363b7ec071dacb67ec23a56b47d6fccb73d5d723ae569c175b05b242a97f3a45632aa86cfdad078609a23432e6eff6043422835aa726ad096d50ec7677d1f092da3b967d6e77154de96d55654ec09f67a40023e118dceb96d3bd39408b6fec9c42a1be4f8b4895f60c4c61513efbdb29bb4ac9301a48089eaeac30efdfe599e58d62f43b7aa38d04c67db2e195fb697c1b84214f85241f43affdb0a825353478908b23b05d68531c3812ed18a17f2f9d54a3ec6763196f52839d0d2496f72db4a58799faf270ad770dfc6f897824e39f2cd25b4069af1c8d7a1ab45939fdbfb69139186a023b98dbc729736843491cb76bcc2489052339c832535123ff8dba07051bb01f94c4b36524ffda00bfc88ad377c080a4189743eb2e0c47ff756a137f39f27fd8255161f3a5b33611483380ee1f08efd19e3e69dd2805574b59ac3dde575570803765a2cba3b0367f73afd2d0b974ce2dcb56112bf9dc98c67c532f6622c883b55e912630e1c915726bc85e76441710ce6533091391e90bf54dbb6156b5a450cfb6d2187ea7d66aa891ace8c149de027e34219ffeb8c58e4c8cf47ff47eca206eb4889fbbebdd16db32072d11a550dad4a417814761af7d50f4474bb940fd0f6b86507c68db9e594a27a1f38e5004d4fd9f60a2182628a2493c309f2aaccd1658124c14c42d70365dbd7e4ec1bd74a98938c346dee2fa9b480bfdf873618d85287b316bd6192c5bb20fa1e96b741e278f48dae9f18081aafbeba596c0ffcaa9a0d198549be70657fd6d3152ad059471460d96146b3e7f229059d0ed32f42a01940f5f659d8152d269647e4b133430040ffd8faf65d8e003c6a9ec706c565a4202785344f753e06ddd84c948a5d07af6ae7375b4dcb0a481b068f0ab731113536233a6fd179489d20076f796ef5bf70d20af3e19b7d07f8bae5ca46ef5d27cf80914c8a8e171cbb709a2917c33ed151099d2cfae4f1f5c5cb520873e3b12ab390fe1e231a0b4c660d9d5f74dcbfc61285494556c47530bccdd32319d78b82cb41e6ba3d267107f2d9749a78cb260c557f41b5c63f22ac2e43458266c438dcdeabc4f72ae0c49d65cf78bbd587078edbdf1a0466539ef6d0d308efa0f980ce6f405722c333f4a6bce6a7317c946516004e755e68837d572ed7104fa04abe35839692038132d9c5eacb1350630c3e4905f36bb9782a1930aad75e561eb1f6d4547c3a4a9560304dfe342e8d05f7ae7f129fb6e3a158378c5f8d17a5008c6398e1832b619703a0ef8ef394cf51b2ed2d6fbedc638e05cf9066b6b03dc9085ce653e2927794e7e324e739f6434c4a75006928410fa233fb5c803a54f1c991d7d1183c65036fa7e615241b8ae0025ee62e4ffecdfe108bae17ee60b2aad69bbf81ff044ac33b82ad288b1697bc14b739fe6c45c1f2b8ba888cb1da28010d08db2a53ee89997b22a73c5ae5d9ad5a7c20add388c26f80cfc856986666bcf20a3f36cb399940fd9c1d53676b6c39ae1f55d5c8c24638ea260a89e71d605310a1099e562004286c0936b5175dc2a51295b8d8ffb0cf207b3869dffffa67b9e855a7fb163d2fe24e0b8c6639c5e04b1a7bfc6d425fbb9ec6daa3a9930878bba077c45924bc5dc85c6ff8a336c523bc523c61d9fd3b19f21db6b671b324f8e388a5cc5da38d3e2c05ef1db99f99802aa5cf133198cb910ca90de5dfe9743b915d2f2e2e67e935b5e94108ce10a13b3f2b2595de1d98aa9f93c7746ad519ef9999f4f86b1dbcc1533ca956883dd2b0940a747da843179ea6caeb665fda184416a6fe8dd40b928a046edb12d90a273bc2ec6d5a2f1fd2e273e2a02f5777c0aa18ce6e3b0bbbb69dc3f747e52314955ac22f146842e85e190e2b296af6d3ccd3859a47fbfe6debcd6765873dad8fc00278680aaa4e19c78396d2e306245f1229c112171f0888b7a89beed4ab710b4e60e6d7dfdb864b6d90913bdab0b2d441c7643755e09b0fbaac5281ee0b8907b35a46de2a9fd7e673a0a531a81ae825926fc831f4261fbf9c41cc1d2b2358208ccd44c687bbf6a9d8e3964bb7ef5674e24db396a37d79436f3786ca35071f5574ebd77f05dbb9cab270b4309620820f5285d9678822b24a5b21e58a3e05b8614dafa04c832b8f0298b74451bbf8818d1cc2408fcb1ba84be083e2c4850be0374918638b90e93ab9d3ce3dae7bd5187518c827f56f35df559ee0c37a32612284834f458030b0f20cfd5829b235a55feff53e0772dd7edf10f701fdb004829ba5150ed03688aac5d5bdffd744f80292c2d1849df324122458e0359721a3d685d78a6419f897966e59a86e33bbd6b8b1877f09bf5a888f980575249896229f9ddd3502f37e16dc133e810f9cfd7b60d932d0d79f257095608aef20451adcb4fa3d58ed0b5527c57285bc791da8f67e96a3caee6d86375ed9a1124434a5cd8674212e444b8fe34ac1cf837dac845ac45c642166dcd51fbd33ee1b361d0538672b33ba5559cac01bbea0df702b1afc7c18ea2862f61f641908ea79a4356044ee1f28cd9d875342b45197f10cdc35e707e2f0d1a90b27a22ef084e78137fabaca850e21fc2aecadaca5c63775c14236e666dfd111dc114ca77d469a1f5685e87825b64768efc638365b9472a251805e64035bf8d6a03b1480326a85bd862c9e6866667f859b5f6cfe874eb22356cfb68fad16c2ef3ba75b8f9dfd0f3998788431df94a8ae3580d402a5cd4c09cfd7a09bdb6c084c8ffa31cace94a98c54c5cc404a4c9517ff5b4c6cc0de13433e0d984084aa20eed717be6aec711142e58ae481c8162934476b57a1cc4fe8c6640daf1ccfbc96a56c9f9dc909fbd60f83040572820050eda6e05cf504fa38686e6b599e13dd9b66e3245d5aa4505b6d0cadc36ce0747f6157ed69f2a86f5b7472bf748072af906b267f8904e6c85c7d7f9e250129d973cdad32f5de623d37ea36b6ee4e3bb35e85b12c51b6450412975cd8079d6d2a1038c278000a7a48a7f682df95cae68c31291e4581ad0c13b05e1ca3bdbbb557b8931e8535ef76d9ca700c2fd7d94971d28ef4357ff3264b30c3044d809584af4faa28feb253e5e8b5f024544a682a338d6bdc393b3d0ad75fbe9c1a597518f99b28ba352318276dc12a86731b5368239875ba339e5f0d96bf36deaa8aa0bc50cb7072961c359742090d23fced23f0869a6b30d8fddb01fbb1fae61e869c03905c6f6669449820050cef467de317a1a94633c5ed6cc7a3034e4b013dddbdf76c95c5965ee6eb3e15c0f368931a9245c2d8b636a81c0f373d71cfcd8b2abadc215121acc96d0f7c0344d3ed4e587a3b973647d1a9489991b64fe3c533d5ade3c59fe5d9a23d8485a6e92723d20a9240f150d7a8f3a42fdb568fcbecae17bb580ce09ddd2051580e7e12950f0600ec0a9d560734adcb0d5e309fe0b732106af2c1c8bf3d9306a1c35628c51e20c166a04bba87fa06c559c596bab24e30f2ed087cae95cae7dd14102377df8b97bf780555526208dc923c6459b429fcd750b8d542f1f55cfed23800fae10454487dcadaa9c939b13f5b82881be5127d7aab8a4df2775bfcf56c5de263972c6f72ae472ffec12a309e4236dce9c2f533d44b93b06bd4c477fa4b5741f67ed350598d138f4319bb096bd53c561475ff24deda99be57e2d91f15adc33be927740fe85a46f83c461e594ca893c5c8d7468e8526f8c529e31ae8e03afc73c55b23f07e80f54d37d7b75a0732a98883560c559f124871903f1851c7db61167044d9ebadf98c4896b9b80db7d87b09db0d0ccd470fda35e287dea04f90bbfb457175d0da4d56b08527b994f5295b0cfafa9dc79a4e6e888e2434af185c4c0ed72ffc46df1bf1fac3525597076888564cc6d9609f14208fd41334e9311dcf5ce171e841f60b6e3fc37946728479fa33a2bedd5cd256ea73408eab8c434c95ebd513147f755c9541439b7ac08f9478151bce837ec51a6f2bcc89f825211c1f4dda110dee80ead3866871af9a7e3e625dd8ec5952a035691400de4f6a834edca8bcdf7cd2e341a695622f6f8ba282b21fb39223f0f1f908cf1ffacf7a38bb302a64a033fe5573205fc1531c3f919fd534df5e25b84122133622e6cf24753f3198754611bab72adf9aeb93b1f84fc3e13511f761eb7edaa7066b655d09d03395b21afdc2513e3b340f2fda2837635777d6350a73b1b80c609b3a2ba775cca0a5e30fc68644fa9aa33f1d2b845700f74a43d522588020c3ce7d13b1d4a77f2ee2be30b41dbbb575d3b6920d262f8cf642fdf2e4e28da25963b288e387f97a53aff4a672ef6fdac050fe40b34057ec8e6e5512d0fb75762c188eb4328f1b57db54528b05b159047e725a03a7dd51ec81b7c94b290d6f83d4de89ea0d0dfb267b43ba5f40316b1e42ca4f258a9f8bed827375dac854738fd193b22f070a3aa52bf5eceea4a91833c8445f50c955aee3762ff8f68b66d6e0f161dc6d86eda03d40dd3d5b2025cf35c1a6734627add9607fcb194a6998b51dd911f9f3ce67df5deb8d6246846464fa00a822d919dc501194867c39502d2e8d09724b1076567480eed7cdf4507931320d5fd847f4ffcc87bc00197c91fc694f1904aaa0e40633ef9d6906dffef245a87ee64ce35127eb13bfa8b6a53a0c4f1832ac1984a2510b34c2fd92759122dbf82f16fdbb6801889c2919403d4ad2ff3dea672b48fedfc900aec56e3e0c04329cbb1986fe3848e77279415c45a7c85c694220b2e2c422cad52addc957d33ecd3bc3e320db5d3b96a2e5aae3a8ae17e050f1e77359dcdd88beaea3e85a0ea3dceacb44de3853e6c37143343673c20e824f84ff6b24e261b76dbd88222557c903d0dcb9c5eac77c38a78ec6e0ace03e1a8689f4be2ea6c708edd9262d16e90e0bd634b2b5f23857f3148239183cee2384326dd1cb3f6633284a21f5ce812532e810a07f3ce0a222ddabcd89d43239bed674cb50f33baba3c83710111abbdba3719fc146a657ea85ab4f1a1f95cc88105ce39aac452fdd9378c91c7eeb11004d112fa57ead9d04d400ad85ee454bf7293cc719e515b6bd646e31a0402cd12c23f80ba8e15d85415c7de3de70a4664e60acc8fb06a8f3dbbd90817fc9777a54a59b12f1f005754f43851ea927fe1f4eb96c7027822d512755acb5e221b8206a47f3d63e035f00f89c7020ad702af6a6e356b1f7fed834d87ada5348c5bb1a1d3e933b8594df63808104764df76cf7f242dd856fbde2831b45e847e7fe53da21478a5009c8b1a76d78fc74e383ff1ae12628b703621b7e27f0422b82432cad32f413494c59c72527614061b2d6f27992a0bd75097fbe4a436d95a869d778b8025272cc27cac9b1a80d9561a31876011a57425ada69cd3983676e792f6d4cb5fb87ce0ace9a5001cf5cbe43c029564cfe256cc85fd7d214e7edbc9f916ea09ba068f6ff78f23f0dbb3a07065f44cb87756f6c096f6e1032921cfdcfdadbfaec0de00a8be26a1b3a32f9a72038a007a7e41ce0d9fb2fa90bdd62becf8bbc20d76154023765698fbd11ee21d523a1815af8e0a8678ae34fede560d8a87ce6afc771699ba45c19ce9590e4fa2c427d07d605e976d225d3af938d6c5ff7547884b335bdf2119221b43341ce199f37a6512f1e6c61bd9f6eac97deff128eb512e9e02f02da976a5a381a861a030070bed1a9b7fbfeca6aeb8c1b64ec936b594c5b0f4e9c7db12138219145f496c192d5f10253d640c62b426e96e97b9426706da3bf63f111f742455315c63cc52d585e4b52e62e29050fa5a2a6ac03fdbfefac067e5f3847eaf72da376b109da2f3e667d987c7cab1499b55b12317f401fdd4119820e5ee9d5c1fe78ca3bc21aa0328fd357ab2ba4be99b07f5e6e5a707bf660945d07dcd7beb03240383a1489111dc96f093ca3162dff55c043938d517ecb271b5e155fc537331a73cde27ac97f78c9fb3856e1dd77d8272156a6ad279f70c05f36d120bb8e9e066017469b30b3ccff00ca371f42d7dca9aa2279324eadb29d18961837891dae53a0ac0db5883b498f67da805b57d86e1bad2a6891c43edcc432fbdd5a81de06200cc3a30302bee37ce0ded68dc8cb998be97682680fff84eb23ff1126518f9a9fda6ac72e1c29860840f62ba66b93dccad678fa896409fed245ab3f147c8b7feb4eb4f98136387a9659cd8a915e5d53c907459b67865ecf412ca64e3dae9dbc948cca3573c0d2e53f462c9a8e07fc43e729b3e6999b800e000e35dee3cdcd3e11456b83957150eacb10179e658432410a6aa4a4197c31a186f580d5cd440834475bdec85d5b915c5add210282586287439e17c0bc7d0d987ec1dd1f5923311f3385e2d24e7651f0d0fb1d31f44beed1cacddf9b812a85cb9dfdca24551990f944cb1a5c5165f7782a1c277459fe197ba55d5907c924534a935d0ce660f3276dc57704be19194df6dbd5168b580ffa723ebb4baff457c8c0640c87e526d56ee79d1b5b0b0da244a4b45d33ece54dd59b7bcce479f2d22924a142e8248f1e207eeb251c7b94bdea1ab36f5eac813e9fc95f51f07346dd2c812e0f6caa220d927729cd500b0fe668a2b0c5ac6dedca5d44739d006bdb76369f96ae747f7b703eac602b4456adbc2e32c7bad8d7bf9190f38b2aefc0a4bb70fd06e9d315ea65803a03fcf37f328ade52bf0db4eb5bf99f7f17a31d3793b882ece679bbe4bd40e318c7163d1ca744bf885aa22ffc4a01a21c2a0ebaeea50b0c6e7e690df754574dda803de77ccd6f96fe0e71dab980e40469e2ffa76db862d1c979fbcf5c2d7f232f35aa128560b0ae99cf9d79e79454517e2ecb889a8922c41a19b2efa33d3ca61960f49724e873757190ceb852c600d133a007413a687cefedd00026fd702b4b5ac833b13b2a25cb550ad0bad376db2968ca017ef8af13c61d06cba7777cda310015077a22ab5b3fc44f68384b77a50f711463f7727e49771a6c754b25cd966332f480ca63cf32a16052f3a7aa1b3f57a37941756b5c9d1ae8ba0a5234d0354aaa8475e54d793e2361cee710ce3abbcc8e23be27f3d854a84634e5585e749f161a2c88e1d4aad35c7d1bf877bbed01d0c1b819faccf88ee8c753c08fd4468e6cecf1de1a2ae67657c67df7a4bf78770beb0c9a640950f1e82c8bbe20047e748e8ee885d510e4748b530f66f16260a2301121a565b6f2abdde48e59a7bb5f8717e7de1b50b2873d06f44f0368d4dfa59d638d8b998fcb60905206585b0b05a14dbe1a7dabc6f9858ed80b1efc37062fbfe48dfa46811a9244707a92844cd660ce6053c38df7bfce9fd273b8382c37611f0dd21c6d876c6ca273f21d9fe06410defcef24f3ccf101e3472e77be47965630b847ddacf1b2f04662b295e330ef4b9150b26bff4519a4765cf7ad4c5f0eab864736a283e8cdbef69e6268e07a09c10c70ae19c890391abd950772caab813acc65cd10396908fd541302ed7043ad099d388f17b700f4bf0869a979b85243fd2d1f0b854816cb88873f5396386eee16d6b4d9921b7d120074f87c8fad5de561d31a84902ed65bfddaa32913c03d10342821b1696f717a9e61b79d261315935439a099bc9ea15b409e5bb10cfd43c9224f362fc5317db4110a41070ae2647c8002091e395990e70deca7fe0a32e2c06c6f47b297125c069a9121a7184b24f2c9e77be584425de48a902253c5a8135939f6c92b0b2431796c9b6d36d49fb82d24806c610ff20c62c6e11dc2a4d30ea2e0e75313b76edccd5ca550b5965eb68ad2dceabeb05db491788ec7f47cbf7d29e652e5f9816703181065f9ca740dc74d1ddd24e29b5fea95c4ad5a8274f70804b944320143cc54868365d664920b0f7d7724d8d4845e487b26f2360e5cc6fcd922433aaa063334b0b9ba4c2c97b905669470f59dc68f518e4125babd452e6957e7c9d8854a35a5876f92c9082f917b65de00b236b813b2ddcef941370e7fd4608ded3e6b5ea8e91244e555916bff1aed858ff3442511b26dc4fac10bee2475a972e3760d268bd7ef6aed4908823d8d1c8788c5c98a1976478b679fe992bfadb9f6b729e3c6308331433fda3776255fb6e5417cddadc89d919fa9a97a5e6c7e6e64f92932af0de27657d1f56a51e5b34f611984b63c36b1253039a264d2ed9b5b9f26eb5e4715ca022ddab9a3cb933561165accf690957447f9f5c9f8b5eee2287f88dab384c27d110387e23a826f1f83d0bcb0ed35d27d66b89ef4f6140b55ab83698e276415ec97524d79ab1481d49bc0c2e4002bda05c791c67fb70ed513a2f646d3a30357d909fc292fec59d5b78fb700cb9b74f982ccf3e44cf080af04bd56ba81692c4a50338995473d5888778d027aa8162ed8ba700a269609403eda386cf3398e5813f1893294f6a32e52b125390f91ecfb6f2e55ff6e3608a5684226e33ef9fe34d10dd33860394d41cf0f900d8406e5190c4c047b6f9ed6cb59e46a9661a12aa3e82a754c9e7da4fefbf5614c5c0360f54b8eaa910bfdd049c23024f31ab7d5cb488cc3db9b6a3bc9f922bf8c90b663cd836124cad580fa921930b45a124bc14771fd287ff9bff2739cd452c683d7432a934d3fd14be79c6fb9217815b96c7f9ce131c8b59620c88c2e3acea59e0e2d616c54c8af3afc358a929b4206faf899b030c8ff512a9ad0d5325a5f3228024f670927beba5fb560b792a9260be7d9032bb146c4b46386edf25c27adc45741e03b530c0de0886020b2e2e815040114dd7e0a4c96851b7726bcb739412da7510b9083ed462516c6d93494df371eee37dc5e9955b8fa47ccf17f13a09f1f920bc9e3dee2849f6c4df5c8a164fa460149f71e37c9d33104de7a411c955d0b4fae96d9b13a357b0ada34cd0effcacc34153f64e0d1571e5be346147eec311663d64bf3c280b1dc2d1f5644e0f28841b7993e6f4669d997b10a52b6a32014fdff7d133f3cfabee0151d252d59265d5cb96169896f3fc127937efd50a5926a2b160f890cd89ebda91882d2f811b0cec711d3312f228f54093322a206114795daff3bc298a127e6859856d3c2f459526124b1f3a9c21367e2c2210fee97ee1ad950958ca67deffd42ddea3ac64395f40e6193d49febfc7bbaf8d31ab3d5748e5632a07a694df954e1ace58b024d6cdaf517e7cdfce7f8a7126284772ae1bddef20d8d480b7587ff820400650e817898d0836c50b57f0c7922585d8e5a4e5f6909d89fe8561b7a96b497ebd288d364dd8485b62817153d9b9e7b9a2152381d932cabacae59061abba12239f2ee1e468c16d07d75c8162abf97c8370b8e17e7f07780867a02b3cf7143520f6d5d8e32f9ce101585ba4185b84c5dea9836de43065cf5e27d6dbae8db996421c12d2dd3026acf2046effcfce49d294be37d344dd3c11ce0c44657b275e4dd975b7954d50f7a553856bd5e020efea10863cc087a67126dbf69c47f8716535db3cc662982b03bcd88159dc22f207a0580f501ad2846c1c8cb9b811b953408b09eb1bbca62f30db38edf763a59a9de13d2480b40da523ccde95f44e5ec417de09b0d8a60879c54e61d1c51248125ff07d738442413ba371339c401fd75240a4841f4dc45c800078f3cad09b3729797b391bca844ea53e1197ca5b2ad8851d575d1258c418558e850597e85a6bf1319b814a908739e433c5fec118d3c794b58313c9d9aa79160a3785c6b4521ca54dc847d07cbfc86fbc39d7b5d5f8b01ef3dd9b4a2498d331fb61e0fdb2cb0ee6494c44836a47f7ebc4cb4998bcbe4183246400fda8c4ae0d619507406010165d14553ac5983a40ff88b09c2d0d536c7e719b35f20cf3e88578d9bb1962a29489db89a7a00c73c9a918ed777c01861c9819985a7db43bee8d363c9d31c8960b67e120f7611fe7928fb5e60c769fd52d9cf7af4e6dcf4535e86e7fa00f7668f5ce2afb6785e026957d6354b9b8f57e3db57b9919c367f90bf259ce6c60f5568b48bdedf05ff02265aa23c8a232ea7ca0c9da9e041f63070c78ee19fb215d22a314f8a74eaad3955cadf642d82b899e8165e911fa1ffdaaeb6c11fc8c6682ab62f3f965d08112c57c43a88236294319e595c5c27af40e6c4deb2626502692a306d7f7852d0452a49feb77355c2d69fc5abddc2bf422a1a0992284fec6697ef1b361f19d5f4971cbc7a7b010e8ccd5a4f464b64c48e5293b793c6603115e71f53c9cb391a3e248150f5955277e04e53b6fecd7c8a0d072ed00e56f43d0f35aba157bbc65c2af02d3dac1df79b10d25925aa5a98548f86f168cf4821982658f2a6efd7f1728bc6ab72e77e3e3c28d1b383ca10fdc35fabe192508516b0760741d96a576d969696cb9cf014bb5ac7b21f8e3ab3e1402d08d851d750241698582f1c1709d79eedf549bcdf35636b0898af23cba6942fd3059cbc4f31cbea7948300bbd0a84fe07a626889242a79875a4bda762b4c48f37a188cf1208b5e9154d36cc424280aaa9927b213aedd40a1b68b9e1c30d78603e0a55c13aee8f9d9ccaaef23dc8a403e7c0c5964685021c815064241f670b359431691e1577116905ed061b24e47d74c29efeaf07b1ae35248ae30313ba44580ca8cfe1d35b338c56e0dd5a134631124cb4c5ae3bfabc35a79e6dbe402621d38781d6be6af0826450a9801346d6c0313fc926c20d858c8eb0a54cceaa376429346f8e1737f22313f79369baa99e452549a2e45f4f4ef59e0afe635d9c9f0fbbf4017d255dde3f1fc452487907836d33a07fa768b2b7d1eff2b083bc02b35277902dc5cfa93454b47be8d1fc105fb1fc3489b405e41cedfeb5335495409f7709972e80158d037d9bcfd59b5a709702f3cfc9d9e989e48f2df2cf18fc0036c513af713da7707819b0a847b449a27677d452fffaa09535766d05ccfee6d7bd1ee7b0765be3f7c1ca5e992c17defe862876ff4ed3d560abac833bac6a056089756b8dd42b015434d339835f7e22961f7c941eb39310e478d4c91d67e4f1f4c6fa9921499eb1b8fe3288febe591eb233aa83e1a28c40f2151c016771fba5bb3854d1eca0b61cb57816e28953507616fe36696545d2e56e28d1fa89d24a2717a10119ae95e519aa8128d9e71b35c44b8371b434952cc490ed2eed5837c0851b383d92195e8c59d8e30d37d90cd1903b46be5bd8c44b67ba1efe7867b9d9d26551b6f92b5c63d05961ee4b7a85fbee06beb9f21662009702185c84ef9140e019edd9462494fa7f700df8ab04c5c69b0e26fade3f100a0e6ea25d7f50e7955b54852214c8b82a3527d92f909563ba0ff8af0511bd11cef3a88d3373dcecb2a4f1aa35f4a5f34bf0bc3361f62ab5bbab50ce0f781a72dd1c2b7a85d53ca0a4f2e08df178dcf436943f88ba03892f920b3aa609a9dfa0d2d61389b71179544f54447722e7186885a991668e9e1692b4aaa072e7fd1f78662afbc8d0bf829baee9f3eac29ad5e6ad26a28ad47bb30f8f9e221be52f0c14137bd1bfa4c673f72a61054004239b836e060b1ac45bc94bf3e5f306671951baa787c63459d02888caf9c3c585ca9815af1de040e451d59f2fd84712d13c7cbdafb08b257db440c064ba36ce4af422f83aed7dcc60ecb99c748f853444bfd3cb6459955c0ffc235fec430cef9a9b92be07569cfe279823c5d50c94f44b9e903569cdbc77287f8893c90cec88b0a80441fc05f787bdcc3014b968c1e996e27aa96b5c813bf2bd3589d3fbb00616bc4d49ad6a0f87fb8a134f20fd5015fa185705f0d72445385b775d4fa1fee9e8896848d002f17420386714f1dbf339b27f844f33d99aa70046ffd66727d654f0f99265c3bb3cbe72db5270ead10ec1a92a30bc5a5a0888daccaabe3d9c5177a16dba5e2c234683bdf7d7b22d3fd63a91ac3df02a8cc7c399f64eb4b31be3404ed39b80cd2f4562fe54787f9bb3a5e003f4a3b81b400a2d1d69fcdce1a543b6dc895ba8e240cedd67b135d9f6d93480b311883d21203a6a38ade0bf860d79de9fde901df9f317c1c8c44247ad671da9e43cba74686e6f2c2e1e3ba12b2f448ed81cb21c418d2752a5ccf18b93b180aa2e031b5443eb4939bb02946fb5c8c42ef19710eb271d2d5a03945a17887149ef2f4688680e111609cbf4b30e962db534716ed935e45bbb1325556f3faa5a15a8ce9edb23d5775c468038af5080c96254b677f889b77309b66e3c8a002eeb983760842bff8a48f3c521ed876fb16ba25eb3a85a495c4290cb9610aa5d3b37182f78f0c66663d4dfe4e0e502725fbdb319ebd4a26de74a3df041f7158b4edc17d7688d5b6b0867ec9f53e0ac8708d277edd7602d65b4a0c2313c47dc06b2a88205de294780a6204c8a609d3814374fd85a6c80fac87d1fa1b765e631d4afc2ba62a0fe077109d8ff34cd478124227bcdd0b76f7cc5a9bf315cd8007d83d9e33abd1fe31a398ebe4f74761a1080a5d0671177b414c58bc5ec4f6dcee6c5a2c043df65776284734625efc6bbc336f1a7ab151e8cac646c2f5f7cb40633951d345c871a646e0402d16d97df905aa7e33108a800b1dec35a76a1a43ce498a729b02d8d621b45e9c7c7792ca0e642d870e2a97d7acec4f4360fe6d730ccd91f142c50f83403a436cd6a73c101b2542ffd5636b3bd75fe1a22c741ed3c8747b46e9574716a4b4eb357ecc6aa49bf5b2e717b5c28e084ae8746a61dace67a01c5afb8b9496c4f8c107864dbaeab28a2fd0d0bc05b720076ddeed52886a062466d527d0df4a9236b854a17e098fe30d10c08e4b0da21cb2a33ced9571669bb76504496088d2cef422c8d837adb9ab920d54d51ea20cb9eefe89ca0a15a1792b7380a8a60fd7a4f15e33c957619e929f1f7725ecf549ce43e5ec4883540496ddea34e89dba52d8392c12cd130dc235aee999bcd3cea5054a52d26d606b3f99d5ab8a20164a21f7ad257ac06166d89208593eeba33181e548edf4ac3a165469ff0fe46879ad645144f3628de1f13bfd49680ec2ec2fff640f53dd4dcda20ff7e182b507c5b7ec3f82fb3e109a6b2645937f5904ae77f904a4d12bca21bd72f47c24d7667ced20b1c2c98778009f3f3dfd57c6f26239dc3d8d97038b05ef46eb42d542c08b0732c2f3e8d24ca39f3d34ab35e8bf294562649859ae4918781cf580bc1e9facb999233cba92df8ca1f60a6de9f8dd5ab6b792176a70d6a1ea5abbf952ba725b8925d1a2df1fc1e6bf34b2c864d7bb025e586d679f8022ab30db054324cf69ad142991f36df91e4739e3f072ec3044ec7bc5dcbaff4191be71ce80dedfebb2be9b725c93d4c9628cb22f61e337b6be199d4b2cad7eb98ad555fc5bc186e4aa1f77cc2341a516ccfe35808a94cfae7aefbf360683b5da5b78881b1ad4da3af0ffa6b200cb860f8c8ce5347c68651485cf6ef08ff22514299368d901fced0efca87305b6a7333e7994772e5822369e311c2a74b0b2654b5b14e0fa6fb89daf45ece1f8d8c6fa3e3236939712d3ff62c73616e0d748d33a2a5f4b5ba71a111a2a822415cfe620d0b1e70e429b54cac80164a1c1b3a60b807ed6ced209d5457406c113594aade262511071bcae87ea27a37ff2209d7dbcb6368d06519283b39d547e4d7401d81a1510d3270e611aa3d507ad07cd25a10cc8ef6b1ce4e52be2a552f40e6b03f52cabe1f0a97a3e98db31bc63b63033b58ed67fd4d974269eb45f8508a3bd276c62526fd8251e391aed1508212aa5788e82169e0398605f5ff3a2df098bb9c2a518adf275624c505eb96104d2446898ad1762b2d29bfdf5f2e48a36c341d450d32184c1e27de034f296ae8fc520e2f1a5c43163424aa641e9410d949d3968e55f824ed7cb05a7f839f1c90e9c17e90f62e4d60a5517efc44d569eb52e70e963b6480b55dd7ff84358c3f4895127497de1f6047848be19840db9c13a9c7eb03dc8cead2fef9f28d8f71fa1d97f96d7504b70bf7e112fce8c6da42bfbe4441808e7bdfbad4e0427046efa41fcf3590881d66945cefe251f5d09bfc46414a942f8547bd9085945f4f7943b6058b187776704219d7225af5c977d42e963ee9638a620112226af09333ee5d1de5fb2128105e45de2a8528ec954fdb397dcde0233bc1b713fb838c8e15d2fc3322e36ff78a55ea5c8977dac37bc8fe7586ce2446a79a00be10a0e9cf7fb2a5967ff44123f1814521af948e8a3346f233f85d22364c8c3a4de16465c07eb57674c6dd57bd3032ed329c39e2b7175002b4b1ae3b84ef876c8f2a4014e473631aa955fa1b3b53ad0c7cda690e7e6c0b716bc4b2dd4dd62b023d23f664a5fdca3f529058481a91648e5762ea7161d197c2dacd9207cc53fdfa952d84f87fb4666cb0586c7e81e2290d9c705087ac271aaa74fc11f33b4c19ca71d08c1d1eacf3a9b0483a90ba414327db03dfec38121e2d04162e305fd9840294a06ef82b75a4f909029fba3a7542c27312dc331b0e220cda03ee1551a736af7406f211c766fcd647640c7da340bf2fc58c9c801cbea6eacc62616d7be403f96c39a141f38b3bae6b5ff8520a48906714417fdf8570fd589677e4adb547d9d61703138a09c0f716169f10eb091ceaf86bf2d2513010ef60e910f9510a39c0997313c0fc4f0bd1708454b8195651cd9b9f024f3cca4c9b7105a244642564ff1892a963834bf07e0fc085d4159bdbe5fb6c00e618324a49666de2a2a14359d179f592b015ea63e5d2ac3b2522e9b80c164a82081dd8612b2132edb24adb517f3747889cc46dbcb5d55965ccc182fa1f48058c4d457fe82f0e64868885d39234421c7fd9f9391043514ce04ed5d450f5f5e2c155d841c552362d6aed349d3fb7b6f59ca835ac983df3867d93bda49a7400883cfea507b161495ef79f6137495764a077f463fa7bd4dd34e2fb2215a3dde6ae3fb786ff12615016db9be77a645b2af53eb927949ba1a7a9dd5ef40db891291857df3e13a907ac335aec11c6b1688ab09a69ac6953149a0a47ab4323e599187b9e83132f770268e8d0dd607b9bddfae7dec9f1b659abfb6e57fabb5ef9215c4f52d944f1b0d1378c5cb05b1ce6843c9878c039f7c1cc1ed9104a17fcc4273c8049c1215e7fd4e152fe88adeab767e0d0bbfe034a86adfd5f9198849c7d74fa81b91c34ae28efb169f314d3559e9e3e864a785173723a67e75bb1a72bc01a1e8bc30d8a226283cf88aa753e4024cb04458dc11d865d30c114ed4a9ca9fa15dc3d410c77dfbb95cd6cd6bf8e6e57502b5a62e58960867e431bfb4887cdea17ea06a17b3472ea4785bb142800d994ec72cb05f567de346c341fa84acbbca7cc7641a6e7402fc61cfe4f4308d50fbcd5bd0302328f0daec08f7fe42a38db90e0d3d27c4d8a4ba262c7349a11f21c1bb0b5426631301ec1c1e95ecba1913103870cc93b243f07ebc4d57d6268fde691e5fd6f76d33dfd09d03909e13142e570704ef0106ed4570892f75f510dbd4ccb08b17858b12df9111364ac865c41d27bf6963cc99ee50bcff3871d8249f9c0e35e35fef6f618f03145acf9ea9d9fea1e221f225714b9707af3bd7b69d955ef0ac5f1c6bd74b8f7e0781a42d156d8f693e909a30fef240bf0388543e1053dc10fcd9f6ebe788e86bccb5f6325d33f018163a89facf54057f3ff4547f610c663f72ae39c3f07012719638ffaf5dc41cf8fcf46bb869d1116dbb882f0cc8fc4b2105132597e0a0818c7872b73a487c2769e8b2b830990e4920c788ee73827d1612b1713d2b8594c20aad1ba6ac8f2bfeaab91c2ce3f5cd82b859b150613940f5d6c99155a8f16f9bae3249866ee59e527a4f2616d283c2df0a0810980e54acf6cece07844f97fda23bd844f5b4e0d7746732eeb2f4448296e9bd3746264052d87bc37eb73cadb6b114b538d25a07c25fae9e65c7f15e9b00eef2a536f1a170197b03903a4638ac2ceff8a36ec1d8e2b3b0fd36669c8d625243daffbea9156064f07fefff8f416645f92940f44a31adbec73d7467becb61e3a37530edaf14e76b93249ddfa68005357813fb11a453ab2bf5c8f80e868ae5d656741ff45c33723c1952130bae14d753957257c119091bc8a65a2032547660c356512a6d8fd17313284ca5f4c8ba953dc4ee593375fbf55d977b48ea18b3044296714ede4b1f6d4f98d3d28309925b9013a645d95a01850fb0240ba21d411a42b73ec90e563996337af02f8ecef5f86fb9ab350de0a40f5607d284f4d23aff74dd5d782a60bfe36a5effed5d8effe071d634880ac679788e6066ee4b2ad471c95df6078083e26c9d6f133e5d356b7ec4c5d3074a9b52fece7da4d1b79df427cffbf6b87eade8defda3c976d3930c77f6d5d0277920c0d7fddd61546db118ab0a96d77dfc77d41a10af9ab8a7ee0fd6a1756aca4804b4c18f9a8b5373b4146b0ec505baabbc93456b4837b2668bff8410767682d52bc13a58f3ba70b6f2cd5c9408f0264014165caf6c98b01e1b702a08d6c6b7dc5c0509482c9b1006131211f38e8c3a3cecd7bf1611dba28bec7fe81cc6b56211821fd1c530f692e6bb2f03a5c1c080f12aeeef98aae8993507d685c0179a20d3c96e4e0b746dc4afa0d6053240af105f6e6017a7463c22ec653ce2f728e8412c428512046182d36c613f1f7aa2d9941905eb4c3eb2378225c87e92ce1d3ca82d2d3181e4071befe67d106dfe5f258bc26162e566ba1689b64fb5da3b136735f37ebd3ec5aa0ce5c1463f11820cfb9eb746bae379e8ebf864b59d1e57c52b40896d489ff8b164d4bca3fb917c767be2b0405be1553ba5967f34e2c2746825a29cbca65d904a24022888054a87bc8ba34c65bbf24954bccb9ad24540bc99412bf394128963bfe12217ce8a2eb682b489ac8938c4655f20a57ac05d047669a8ae0d00bffdecc518630bc391d4611cbea1ae04b3df1e286938fb810e66d70fe2d7f4be583e5bfebba9571191e009d67dd57da3c0442b783ec47622d4985a06e41ddfa5ec9b8abe87cad4a977c3f66171b4a306ac49919a97a51c521593c9c837dcddc4999cb5916ccd17c63f054990cac91fff955caaef872599e2ead8d0dcdfd11bbee2e5ba2ca82a4e9595fbbe8555a31835675d2a674e31af8e6904fa6ccc4c7ebab667e679950489886bfac4f0ea55647d13a78934379eea82faa2383ac82f19ad5b52e59a18eaa940b3a77a6bd2a13af6227014c07403df0da8e1bd557c64ef0278419229b52c83fe8682295d9f5593557e1a0b5fcdd07c348bf5f8e6a816f03d435c127156640f5cb707eae5e570fd1dfe4617a50db5a4c685fced49f5348d7265522f6d3ea336468c0981743aafc280f65ee789984f5c7f7408f700bb188d41656bedd6c020cdb315b11d0f35867ccb5461b9db1e95f5673cc8ac9a73dbd22269becff2a9b4ce4589edbe3ff7492ffce668396f6ad5eba91c03974c6816a9eb0244f56e24c62f2eba427f331883f4a34ba6cfc4c5b8a3ebc8935f9326a3e3909fb6048d06392c684fe1bf7603dd76c58d5190f64fef5dbbd91fb92904a51193b6c49911019e9048a2edbac93a98e9063eb95fc31bf3c19883764ec4347b53cca2abf5add98b4dbd850197142c565b5b770aaa43599222fb330e112212e0aeac57f92c2d735fa4e990a1efa15b715c753d513b778a8c10ede03b37a03d4d21b909e0942faef692e0cd2c8b29013b97d85bd79f63600936592963b1384b68b3e3f7dc0d00c8a7e7f6b34d0b39cf36069dc97bcb59689e586232d8d774633f7ab3bfaae322b82021aedee55ba063c7ff100309a89defc98a3905629f66e31f861b15ca0477d88ab639bc64b4c3972b8aa534a206e6495730ac7b5ffda97ae2f5f393bfcafad926e97bd45c421181d3737aff69194b664751ff62b1ab71c7dd97ba3d537d79a3b92ec61d7d3bc45e93ef971f63dad4298e02653e77133e951fc4de31cfc0781e01871987f159989ce3c1cb7d89b416ea08ec4e29c3d2c5b67f7b238992e1a3305d0730467eed47a2ca2a89357addc3050df9c324894b583f14e925133ea9c376a50ca36b223ee422e68e4ab5d91a87b7a1ca57e077bcdbe4824d52d9d3929712639fdd2a3aac8cb6b01520631034644f95fbd7a49727c15efabaa8a1e2a27896da86d8fc8b69addf39f9675bb136acc085398d0b1ba1c1d069731233d221b061e67c76424fadea17f777bf13e0494f310437fdd69e12eef9b91a04c8ebd45b0e456ccc46f6d08f4f04523b507ebc40e72988dd756b08fe6ef78e7df3d33ded89bbe44b915ec3905408f57dd3da0e24d3d3e028011ffe24fb292e9b91966d3f7e32fc363320f945e77e05972c9f257c543e7af239b16e54cf5ae648b9099d8c49e0fd87a5357ac85b4e1b50be6bb560d245b4b437f01f97875aa06a559d2fa355639595e0eee111eec5c6a645152ed12989dca632793706c26a93daf3f6e062a6e2c4cb3806abcac812ab4a3774e0966d94da9f068db6b38f7caf177a9e4d5ec47d60bc08c32bd2597753a2f1da6414768673d9ad1363463a674b14c49815f4304d494b3d755a5d431a7c3ef5386d500ff6d3b18b19d518bb788f26953856896b3b4a120b31cb7ec0035ab008d24d9c7eb29f3301de06c9b564819dc43a7ab9205ebd05516a066d2a55ff0b767d0ee5a3504b2713279eb6c1eb96b3b67f9d2cccade50747038b86ab4e805f0da32731e8f65e917126a2b9b97e39402e7c7c4ba38ab697e4b14b340dd0717a8f63b683557fd8c00997e29a686a3009257c0fc8f64b2cfd4a6d498e1b276d5d7a04f396896883ccb24d95151a7c898e03cfec9f82c586bdb7ae0e37cf8c15d1bfa249e92274bedc13cea4db15490a06424da6486e2027e5809157d52528191a71b1208a83420cec17262fa293e2cd92cf75f2005ae8acb126916ffd22156e92532fc14ea1dc99b3ac4855e7945d97db3ea3fcd5298a9396b8f6b441d4a46a62bc0f80a2526b8596f244eeb58658a657ff910115d41b61ae8abf15b2b9cfc7f857c6ff319f6fde1a25acf3b6d66bc6e0a85ac195e868710f453acee00773302df243b71ca208f37628d983f46d543fc68087ad25ac219c826df8cbd2fe0e2faff9f75523e245968388f04f70e3fa87dffab1fdb29a820ffeae764952bb257e519a5d950b645a11436c78ee1503e616502212ddb09ddcf6cdad65b77b5d30d2f4b38748c2b12f1c8e89de59e3719d81b367c36cd8071e699e36ceccb6d5e44b46ab443a7eaceb93003fc4fedab8634c237d5c60df7bc8c90fa0e2c86180ec2b6d56c740b8dbd56cb95b086b4f1a399a703b0abfdae0a8c6a9ccd6e7ca0cee0891fcf06c511b17666b473b1a3eed9c10dffe1db00f96c3bb1789f599a03b8a424aa4d280bde5ce75d2412c76db81cdffda631e15ea8d4ebc4ff960dbce9a3c0fefb4b15d4a09391d0da355b3060d267b62f4511d556762ed5252b00c946ab0fd4542f37eb1c8f0cab52bee1520ade99a658cf93d271b910e863691b3421afe77e59bf57f87ebdc480385f6787f00dc171fb8d9f7f4db85bc6804d26676745a57885143cbce82b3cf7081a9b73e11751aefc630c62b140ebaeeca073e2ac867086cd47bda8b1995114de077b932e0dc267a8498b37a971ca1f876655eccf6492ce869ab362bd1bfb092c16a460a88d36c0d321bbfe44e0db0671ef189bb571e5e0eea70a1ec0c85358634eef735193cb612d019db594916d9c41a3946f5e7b8640265af9706545f7de84231827990a210be793d4fc23a119f2252c98cc195625ac6a7252f333d5e38e4310f20831c601153897d4cd27e947d33aef15541b509adead5f20f09057eb47f404bd3e572dfbeab415cf3d8dde3484c918fbe77cbfb591d32dcf96c8184a276b2acbc37a3b1a53bf4116ba38f7557844951800e8133529851d5fd9a0ffed8c91c8d7c9e11c5ed54db606d05a2d410ffb1bca14a1afbeb825503816554e6e68475b0ca82c78447b171424b8aa2586840098bb182386dae2407c144e639e637ea0d17e8beadebca8c7e1ef41c968ab49c769518497c3e8ad288d8a2711b708758dd663098c5a1a8917f99d99f48f61ee5b1bae4f1ec6907430dc054bee9832179f8011637e4269c956e90acd47d7cac9fbbd1bbf95f13819eedc8a143fa9de9979c7a7cb2d3dd84fc5217bc828fcb0a0cb6b5607bbf402e0407d2772073433d63fae37568e40fa9774a6ce405b54f909cce2282ffc58fc857223e3cd16511c3d278089e48159baf2fcc95d752d1501d52b76bcec9e1b76be772bc192b8b0c50b65f07382ed08b68ec1a90c4b09710d31dafbf0f14cd6e43a98ac948d0eef0daf62fe441acb111301c210ca0ea101aa1be1b9aaecc5eb9ab6cbeb94431ec70fe74593aaa2962368f1603df9a78e711065e728d0cce70b731a2093a25e46d030197c09aa2c37adf83e2b79d36e1d8c561cb81623c8575071f60199508edb3fa7659d36a4c735a53688762c10e4e4fd4dbab1cbe2f41634859bebc6d171a7b56bc683758fa894093e2df784b2564addbf36face98cfea49ebdc0ca2a88a975c584692a61b3bfd29d5df940ad408eaa7d4923316c2fc0b7d77c75e090b3ed175209b69d9b90f321c951a66e1b9a84e1976207e27fede0e25ce5216d625ebffb62e2c5013f8fe432bb3426dc0313fe6878847f307df074bfc97b4d5ccb7b306324e68f6bdfb214d0fabbde3e570f2dba65268a518e4df394fbc20bddd4fe6dbb7f1d62383f431fa9baa92269d47057d257b8c1025f4476bca7925c41699341e4022fad8d26219cd2ef508de7da5c72f06fd10b2b5670fe155b000457354699b6f627f48c3072cc9107502690a5f7df9624d6d232721bb2a9f135c67c8245a280fd51d9c736024bfca96ef072357a2a6797e332962b407ee133620878a54aed04f77f28f1be49e5bff39c5800f6f067695b401ccc3a2fa7870ff57157500ef4d14d2eaee1d9f00ea26460d1d9479a1cdd15389432c824394893d351e35fc1efd4950fa2597c2be7eee9a540bb5125d6433438cc12b4198a3789b5271ebf2fe3e8f9fb338aa507b759219898cbbc8bebdf6e80897265305a458c94d43ff68ad4e1b3c0d278ec525cee6b912369cb9f0c3d36f2d0d839719d8c844012e68dcfe9a7c3e2a90af125bb52c95933f9114de2019f554b7e359bb13030265b75bb74408634b44313d518876f7cf2431b96b246088d7b1759b53d9f3de3757dbc785a42845cd290caf0729a125749ad1ba4be6ab63936ad52093cb3188431de64d2ce464e36a622c1f9922fbde4e071ebb9653e34bebdb987443939cec4bdc5ce23927af6dc19670db64e1c02c663665187d39c1faa10ab062d0e742ff00d6c096359af5eef21eb313172bc9c8a3cfaac8e3d8938febcc5991208c14769f6fec97472ed4d81e55f0ef36a794fbe3564272a0e595761364b6cbf28b0e05e7a961a4103f3206b7cdb7e8b287bb9f09449e95741628a8008413560a8d5b0f3a7255b9edc56f2b9827ec7ce1cfa2f87f04553361422ff35ea2e64b9c7140d88813f363fa2d89c0b35de98dd7fd227cf3adea813ae539c9116a2c237b72af2f53e574002a295324440f58300b49bc63695e8e023bfa63a18695d4908af51675a59e777f4eee7e3e7cffd240e60d91cc15fd2fdf32d42be6835b548348cb1a104ed6e95b56369f4c7b2244f9f1ec4ac3920ddf1b69ab5174a1cfd8ac35da5e0934ca20470d4a049d37f0f6dcf7c31a03066475966d3ef9434d161fc2bee285935b69e197323888fd042cca196544a471d83569e0a615ae86f5d3ddd0e08be3541783d0aa46ed93fef1cf9e571ce709878a80fb00370ac36e42946f35a95ee589bc9aaed579fb5309059752744c03b07bd583d7c1cee903625d06382f60ee9a5032850d02c910663b4ec52205ec931fc4b01c33fc08ed350e75e4fe5c2e0de6a1eba2b6123d4f6146c691c5da6d791ec64d0ba0e88643e14c04e1853a361785a28de49721ea190d9a5c0b368d01ec27f965ebd53f857aafd5f971bd919b023292d6ed1eb442baa1d14698fb0416caac552d99a9e830a1c58649e183e3e9a27429bd9e90ca0348c2b47d8c44e68c28a444eb1885438deee23e4c4eb4cea25ea89341e59bb0c3a1c7ea5c14c2b9a7181d96059b68589fd90029937f487b6dc50191d546306efbc93064dc4f045311d57e9fc9adc19548e9d383c290b55b3d5a6e40c3e01ef83c2ddf9e6aadea71205cd26522b3161ba47cb4ac10593c9c0dc636a01ab3c4fbf762c1953d8301b533bc6cd2105c60edcd4fac8b2bdee796133c1da7ef77d4c48daf43102aaf40f4d0c90513c43a5e0fe1085209827253d19fc286c7f6cc195fa6d0a2eedc68b6b5e4127bdcc3441d6831fabe62191c836cc4e2409706342741009a2e4b898d572a37477fa5f972d8f11bedb5ef16f126889cc0198b93e3f0a35f820ee6247c3b70a292ffa72ec0a568fb09af80eaecbe2084b65a631e35c65c52ed8b7cf4a86ea821850830b9496e5f9affd13bb4b18455f013093913a2b0d8fcfbcbf287ba55e5219e6a9f327dc94a1ed5205778ecebd14145f6af26a23eb3610828eaea9232ca60f35f0acbf011bd9cdbbb2e637ad4e2a33b0efbd9f6fa47fe232ba4c47a7f72ff00a14762d0f8a9ac34aaae560f23eaf7df9ddd3aac0864e5c72e6f0bf81ec4782cbf6bbdbce40bde1787aff82fc63dee8648e4c0ec4df66ea862831c8e8ac2c050ae2602448f2c91b9299a22b0142d5aae3f532c206a32ba65138634649d1636892a8881a3b20a909a6b51f4eb7e214f3ecec695870b24e09fc0930e8fe5d5b8baa85092fad8cfe17f24ef396b53d2c93833f541ff6e099fb9ed8ae364d8bfdafbbe07d8c924fa8bacaf20ade8460c193e7db9f7035eeb8e5611ac542525719bc7f7e753ac4b5ce234cd4f6a6007e89bd1f5613cd297d30537b21789dcb8faacd6e9b31e98b645eafbd48729202ef3d401ba778c30ccf266e5b9dc99a52c3652cea5a9afed584833be5897019d4b8e28f14b957b69c22d9f5404a013615b39d2d0ab209da9eb6aeac9d8e91046920c72bfcbe9476faf8a33a2b66bb062188d17def86fe52c20e7c0bb63f7ae8940eada5b6b16e5ea797350f40636f26e0a784b9514a8290b6bd8834bb875dfacc6865521526513f99b63698a6e20aae5cca6115b94ef25df4d465bb1daac6cf6f471ec618741ed62c41f49b5ad2d26bb9b1a1c7ab3df30ed98fde8422351bf225f6913c1104b452fc49b7cf4be58c5c8d9e68965afefb5ea36c78445e2191fff7e22f24e06bbd3907be221c243515484a77c836482a9d074f5b08835ca3ff581956a8b2190348aa16da0a4ad7773a008f79ea2699e830e62fa82b5b38242ee4e5413b3320aade958caddbb711bbb3451f8c28160496895d90379f3d4bfec8a6cc734f525b2466ce458e1814c9cf5d44ccefa674518a598a98f70bae07bc2fe037a89053b816a57d4af1503e7c94d8c92bfa636d4c1de0288a9b86216564179a8fb89e07fab0e564ad6f63a6d0428d7bfb217ee781d4bf1d0642cc8aaea003cce3155ed64d0b9bb6bbf272a8a6478dcbde781da68e5b785b5b508ead23a14552479d8974e7416ea174c901e8fc1e598e679adeb5ddd010fddf29d8235cb58f748f46202b9fc931f93f84a92cf0ddf71d423ffd64962d76162b26834d9b69d1bdba373e4bddf023f79764908536e8355922743fa36d8966b1b80e3f322726831f0862988331358e8c198c3ae71f3dc797234ac1ef1d3624112a499bbe0be7416185bd700dc4ea042be919dbf7bd108d354feb9fc1b936317dc811277f11e0f235e32261d51afd9417be1370222319071eeb176b6fdd0b255f5832f71901521c0f0ac130a0ad902ac4085c8f02d7606e1cd0b72d8cb78bf7b23c619a2d41175ddb10b91b84117015c646531065b17666cf55f4c7841aeb62a8c185079232697d28373e79b9dd93cfbf348adda22c0450e965d64f1f9b8257de30bda6afed9cd46292a730f1f88ec689b39686f8b0a9b41e7e0a4d6e4aa36cebe991627b09bf7eb0bfa58119bc041c6d19d89f26dee2659d6eb3d5563bd65e7fc891b4a1adb7daf2582dfcd1c0c7d895d97dbeb8c5a2897334e6f0b0820baa0a81dd12605d874f2a53f2bf0a72b2dfdbb8eba50f7da199c09f1459f663058d95bad51ab0d36848025eeabe458c8ca8b6b01d86cabe84a82ab8072dcd4debc2208e8d62ca63f7397dd27f6b4235be455792031a07b44938ca398358d73a138d59b1d3f183faecfe4ef43c47a1eaa74e306ea2200720608aa3ee9feeb5d3ecaa417c898da21bdafea532e03e69ee2c6c7162a6f56d65c7d0b25f4b4244426a7e0e27865ef980ea5807c4498330fa374a990a3752d6728641376932483161a43b622debf3c0262225d0d6f74f6ea53813929bb895a20b7925bb1c76d5574b2eec6505ec17274f55dc00f33cc8bd34141006ac871ff2a78c55dbb23f17b03e77a385bf0995b704502099fb54b20d6810b447ed0cb73e394062564334b3bdc1b7b0d37e6940b9ef75b2234c1d8d8e8b9ccf27bc6151f6589d2e90cdc31e36acbfd2b5b2787c04bdf2200cefcf12ab2ce802aaef0f08513895d3a16a08fac3a30facd3038100a283ba0b5763277582b1a89abb5d1b8cec07bac090db129d24e63174f3f4bedb5bee7aec8476289572621839bb5a2337a978e90d2b3fead59228a778866f1c11b20df36e21714dd5a1bcd29954b21970185bcedb7c84d0cb6697d423ca90b597b9d8027c5061225cd3891da6ac30114f1ff3d0a5982b2f04adc864c1b94edc6bad43cb1dd4238ef07b170f1d927d95bf619c2288b9393bd8dd9412ba3da4d3d5d88369d08f22101a98ccf06229b5acf6e22fbba7eba0c7f22673c9e925d824db847524d8b1d7abc906e59655eac078fc98a80540f6876daaa2f4bf219f55858f4bda53c0a438096073c1899958f17023cd5fb352a3efaeb554d2b0a5c27858e40413137ea8897f6f9343922952b54b6ab9bb0628a804bae8af441710163f63c80ee7b1cd3b6f7e7bacc55962f63d29f1bc22de90a50461cc9da4d4972114ae5b62b1f917ab9afe5ad02cc10afa70b344c86809015a79662bff23b0b2957968390039eaecfba83c0c8c89b1fec9acceea7884a4032557a69cbdafa5c9c3ec3a2eb772bba5544b174839198586557f9b265ecdd56e4cee4f7c8f460eec18453c1bbb576b789c601eb780b30116a6942e2216cb71c295035b9954194af849903ebb5664e9e85cc0fbb3de7f1d656ac0c211abc31f561cad10b60f2086c4d1a33d5400000cf080947edbc7d54bc382a3073e9b7bec8e0cc332043ba632d9abc3c4831a76b03b84aa7af13a2c7001c04d5d4c58b8205a839a1e7b7f32c0f6460ddbf0b653e67984d86bf0d6cc4344fba62b0659b106027cccd2e026d4743e9e8b8b2bd27ecf467b6a6c8539947e03f89427e62266009e455df859941d2ce7fc262e729931601930e7a42fe71a3e94890ea78f139a3f38fa1ef3304fc42de2838d77dc58d5efd01a6577a4032cb9989b72e3b65998a229672cd75e440827d853c72e316ea966c6e28e35ec470346f9e93aefb2a93c9468e9f1189e549b2237693ca291cabd70f2e5be4a86fd420a8c4076db7f8c9713f7fac45447e1334ac21132988d46b932d64f771afdcd37e7a7b67d7b0fdce7a8e55f974e34ad839cb02c3ba10c50825d338ad421fa65c903cb615c76c9692ab0b16ee7b4c0c69302720933a533ee965be32b7b86aa45cc080d75748782dd113badf7f04ae922d1812390e61aabfbf536ff841b1fda3b87e625cbe285304507ed3b3ba7110a7296fa711270bdb90f73fc7a2fca86ee56683ab19e0930a905391d8d4fd574bacdfa72ac8ce1115d968ef46f0e42c87707e7898cec13f4f01743dc1cdccbb5bfaa5609f3314fa320e8934e3f03584894dd273ed6867a46d2ecfa5dcde2901c7926f53ba9d8a16798e7028180278c613eb6453b14c7ca0dde62b7bbf164a7b61e1921498f2b665eb8e583f1a68a7ec93a84cd2ca57cf5242fa6e92b97c40fb6af3f71f951f4c64c2383784988747682a3403e634198984625636e664d099cff5ab7feaff39bd32f72c3c4b1251603af26a6199bbf5c613fa9e89ab5cace585e9601154d1e1497f7b70fcb386a0ee6ebfa89469a7a8bb4cd4272323b37d5e7898fff22ad9511c30f2e94779acfdae898af455ed26669e3046f9505c038107148b7eef28edc98c842bd1bd452a92226039a9fc5b28265d40aef5f728ffded3f0c26f7c24be1a80cc0b180d364d010bfba2dd6311205a75ef2d941ca35258aa8e768cbb2689578f52c19bddbcfe72b78212084e9a11d09557ba8b86123954937d91b0750034f1cb817e065d8016ebd217f41812569b926e4491b87ae078f36dc4e9d38613a04cb153c1a59b5b0b74d4bd16ea8d2dbbed5d9cd74db1e5c683ea6de0962af95e1418e29f19a3d024716eae2b473c81d1df460e6f32f94bf6ac915ec9d7cf233bd6fe7d5be3156f749a69ff41c7d163fe11181d9b2f21314fe5337481626316faf0afe58af45e1305f76f69d5b9f480fceecba74b4329c142fc65af6cac935ae978007207c9dbae92ba5a9ed5d33f8fa794290f6f5506e3df32d502be07a218105d09d323dd05b3d8ba1085ab19ba8aafb90fce3ddb821258decbe7ce882d63619999663d0de7c08c4fd3f755b39df73ebd223f48acb585f5abb80b9fa238f2bf524adb92a3868441bad6b919ff7331bff6a3194244115c97d24a73d827d80e2f54a517fa083b7332fc8a96bc6bef387d873e4163776892e0d7e2ea20d4724da7515f4a1de7c9ccd4e80db0acb730819785ee107ec02a558f7b4320a0134ae287f1bf138a6715a4fd94fb1cce31397662311adc31f91bac3364acddef3b18c0a52fb4d5ab46c4073a1eef04136df541da790899ff19616a109baf783875ea9a50d14f94b898ae23c08bf15db560ae08e91d745c0f1c7a0fda6e5bc80a22075dcf34b69fb8c764fb17e5c506302005b37750acc7763d871e396d71ae60352a4038391d6e1997bdbadeaf26ce36a1defe132733fbe454ec210e2a663824cc0db488f3217bcb9961bc97c64845a221aeb226d34dbaa600da012aa3e8b8e25bb99c87d44bd5cc342257882e86f10efd4b49a2b839eb97aed9760130ded5f7f562136b3e5446567129703e306a095494063485a9e00bf49e839392e6882f09c4b7a6d6efa1387184a3d399dc717962252123658d46c15fd4489faa0c544a97d566a90eb30e73384f9ae93e65bd84e02c5a812e0d45a7c44d0a9edee6780e7bf4f4f323e48af96933bbd1890f889dbcc57a47f203d6e065ca0ec58bb8c7480dd20dcddbac0d4ce16a84a2ff9500fa1cbd8b3fba15f1d8aff2a5ea4196c62584c51b65035ba5ade9dd48689c5043647d5ac08457a4ab04263311b239c032fd55448fad928f2b91f1dedf57faaa35f9c928a06a9bb68b9ddadb29ef260b5f6fa8d9b4aa1bb08a9bd0ccbf8326abb49f48642da9c21130d37c82d2de65fd6a534874afaf884507a5cc1f8141ab3674390f534e50ec200e59ebc70dff1fbb09b21ea53a7a81972d22d156de9a32a5f9be809d6958ef910ee45fe97fda63ed7d9e6296df2210f8ef1cb8495ad68a8576b3a14b25148ff031b348e14efb462ec50ab692d55dbec68815868d8bbe55a20af81696ba68de76971e1659084ae1520158734143b76436a5905833b6abcd589971653993e599e6c5116928429640a73eaa67d373b4004252d496493340f2137d5e63ee5957803bf8559a24eb5ec2ba175957b3c1c3f28abd340d1355064a35379aabd9c7dce55e3d472edcf9bf0447722c062f161d883530950b8ac5e7eeaa6079e5add0b7c6ad86fce3bbff4d3871be1b061a96d3446148742f786442e0bd8cf0e9c0fe0436796dd8bb3ae24d7956b8dbb79eeeeb766dc7651d3348d43764d385597b02704698e1c592d373a663c41f0fc9198d7215af9a95552cccf7328dc8ca50df8cc09f7bf57f3f8fd073b5bdf1f93d3b8ae41f464e78453e7e3458c37b5c36a22480dd2dc96f4ea56c341e2deeb5cbb6a46b061b2ad1e366b0f93f0e4e8c643412285709ef35558056af1f601dca00757543e0fd15fd9bf854d7f16cdede8600cd8e9d23b9af6cc04e1520866c46d5e8798c9283bfc5be839ccbf205f8dad5f871027dbcbcd345bc6b1b8acff48446308f21c9f922fed8fed39a45e798a8da14a45e74e778328a579e92e80b98584ada65d1afde552b5d53adb72829d362a69d2ce01fbb93a904357aab32a5fa852badf121db433115edcd0a2d28f0de5293558d7343a43ff6aa205c6db24aa31f502eed0fed84ab85e34ee24547a50c70fe4cc79a7369a5d161177064c42af1c0ccd79dcc6f6e791d14fb23887dd1aecbcd3b2e0c54c021f3217c1b8eaca589032a5f46767e8e0787730f1097e76c8159cfda103a0592798bccbb581eabca128049fe299df03f66685b4ce5487888dde44d42cecd5884a3d41beb50b93cd421fdbd549cb5b8c35ccb0c194fc6614d5fd3faca804870f35ce1ae4b5a308575da475f4388189f9a75d6f95c6ce1b37d525c526f0a169cef5561a37bd09169683073052c1e9a9389caee533f03de2fb291c5548fc26eef29644cc3424afc53600005bf249530d6566d276b72b8c58b10c1e4444504acb608459fbfe91a15d377b9b07a8c843764294f5736d60d1748dfd83731d82d9d3032946e10c32ebc818c2033c6b0854c71a3faa132e7a7321a54ea79c767c9e0b594c0e6bca9cab2df93135497d1cc56c109e65cb4231968765c9ab9ccf078113ea32bbed7f2071d0d0f1f1c20160a833e0c642bac24b3a2ec490b5cf18b06367091ce16094be9747e41e4438f35a4c345fccdf8e51f7e1ea11dfda0a5f2453bfb2c59e216f44b702fd0090f5e9d63f711370494e69fd6a317300679236369f7754bce3dd708ddf01098a236100ab5a543622b592c4cceae1cf6329aa3e4b34db42ea206584ab9e91398d74f2d9b29773e6c200537e59c5e7906c91641d06c6dfb0e08858b3d926dec898bc791e1a152bff8cac0000b8709a983c320f05b1732994014ac08d272d0abeb0cf318f42b7bdcafab7674354758bfd68e817d0447e6d8edd56be52b0f3c8aa5adc3b5c3b0a89fc68aebf5af594f66b40921a5488214c071ac266787723936728843366cdcc36c5b701c4fa69cdc628b40b8c9ecf0407e57013e780faab8e0d122ffab0d217288d7928a08b709ad49666f7294ff63c89c5bccc8fed23e2c9bc8c53d62ac6836aaaac782d2ea07d7bcd4a9a39e7b25c4bc033ae0849f720109268273b76e7f67ba3b2cff985eaaedddca3b8f7af2de5b36e0efc2886d1a0c78b241b993c18c37fc1d466201974d7747dd8486bac90029c7ad264325ccd217298c88a56efa21358a7456047c7a7921f933b1545e6242294efa743356e51c647a1ce5b2816bf23362d2c4f8ccfa6e4453a4d96bfcc9e8a449b12e1c4b9c7884d374a75ef4def8891f2a558726618d2d446d6df3e037258a99c65deb0f49e79a71104da0faf2e1c159688382658b976a9c4f9c5b33f2c110edba49ee2fab0762ca03ed1784d42d50a622161a4b9a71b50abc91438aba500877a305b5da98eac046c86b8d6f7b1b04d985fca2e7cd2290c064eca954aa1cac2ad59374fb0a45386015462cf98409827587d5189c6c18e7e19699fa98176f2805f2d0c6103b56522c36ca92b476dd94ba76b695c778e9c3e428e7cb071e2dca6fa18e4aa2a3d5bc60266f540d171cb36eada6c0f1af655c175f5d0071c103daf98d5e77b93201967496e27713ca7c08052888b4fc080a577ccd6f404f6b57180ffe5285f8856983a05c40a091182633ec2a7dc37eb08fd1f246065887d88473999dbbf0475a99ac8ef6afba9c319e50c83c934b0f88d6875f25e6eaa810f2d67ae5067eebbcd3e39cfe1a450235b00e4f862a9ef9a695b48aa2dbf58ae8682521d76ebd1118531ff31bb2ad76ef5efe262cbfc8d62fc62ef1e27f0973bfbee1530dccd7664056be75b0b27dc5195264da06780a602c0e765029f8d96588faf0edc8c781acf6be7d0653f6dad3c0904d355151b6a3032ebb11fc84a7174d6afd06f5fd0dac28515c2b8957c81d7b860e402d80622b27ebe860f715f355b2f08bf2e3b03b8997dcd0ce6c12fbb55c34b100a4104b9da1d17765f7b770b522206c65998892e56335a7596f2b2e6cfe06e771d7edbfe72ed34e4a06dd8838a900ab3a6c5cb24d3f84345112afbd7ab692ce9c87ce1f28ca72e6c6ef981a3f639c2db3763eefe93975d9e384359b16ff3c51cb8f9c62a4444951232492d0ea2c41c8b73395ef187cba2608ae3bb18263c934638eb1e85664aa8feb276b8feecc207cca6311101da301f088547bb791d53f2e55e6e74ed9a50c50a095a6c5f60f7fa25f70898f59d3acb322807294d2069f6a618708f22f60b8ac29b3f02ef3b1fbb30ca3349fda4782054de4ab7083ad290cf248cc7a17838dd4d74caa325eac6257029bc50563c5dc8c7b765d459ebcc9bd21a43d9a270f1673722db276e278466bee030d5e0c9340ee6a8321f20a71f14079a1f11fa44090e6860e0a12b8acd912b495f0c7ed958e37ced8d80f6e92e0594b88883a0259bf76af6dd9224f5689208f3863c00744075ea408ad3c6b1ee00091b418dc4c563104efc62e54eb997c15bc6fc2ce95ddd533f90d944f1e327e6ead47b02ba55c5a9b88f788a77d28a5117b4c35cd2b6f3688a81201d09cf77d6b300b7794e6c81b880d9490ab3234e4387a1e6857a82411d8ee21df40021ac28d039957f2770812b966447c856d6b57dea3d246e9d4171ec19f3fb883cdfe82c526f8d736fa44b3db20c085b66e161cdc2891d62e2a1bba70dd085de508ad4ded36facffdea978e3d00758458487c34770660e1da9538d4877f7ca8e6d4b45590c00dc0ac0f9b7e9d8089ee45906eacbc03b434487213c907f48aa6291d3aafc64e489ffe9dc6eee8f0464b36fcd0ed28b319eb85501844ef19524a07a4dfe0d52c2dc66e9ab56a5fa3637b40268e242a8d618d5ae8180fb8b5dff89c0781516e71bd4022ea1671067832fec71bd407163523c9877a912f7ea0618730fcc6cefcabc61405a7815941b7a77204107739cc10dba496cdc1124e90654c5f0ed0db705d73187e8f43a850cafc08be9c788ac0976307f79d13b19ae5d42864b67f3f04d891e390a51013e04c5f572d60513b34cd0f41e13cfaf744b9ca7159e6f16f06255e68c2d72e2f03107c15db51f28eb0d89b01e9cf5894d06eb7c3941c63dc4882e5546c836cf6d02bb0081d977ed92f26b339a3486b056fe1da1d6386a76358d215f4ac5ab21fa1d0ab4e7032a296634bebdd74c1de4baeb44ed326c9a546b19aa26b267d23eaa5aea4929ed31543affbff32d163ed96a71e6584d315a2858bac68a66e842e37a34af8bde906860b8191770bc091a2c746fc2eb5e822358a050e2d5a26be2be0fd3339735a6d4280a96a848c94b51a75480b33786dfc6eeeebdc18b28e6c26711b95441fe215cdf54e3f97f155315cd186c8b18d764ed0e27527ecd2c76989e0b063e959e4201c9af1c74517ad8de289f5502983bc930b420f27a833f2d91bec8c92d567855da423ee18e5e7febacf34bdc1f5777ed81d2fb207134603fea1c0b1a0b0ca21d4f69d208e12ab4029bfcf4502d943808ba26d5fe27e184ff61486f039377812a7d06151d298bf5348d6c6f9c04153629113a8f850942a024f539b7afa9223a673356bdc63d6c859ea082f01cf5bca4ebb90b412fb03c5798191a91f3e1d19989c40f7bed9cb2da9c2763e6e7b2b1be1819e27c16527a70efc0db006585e89ed8b83b5bfc8c082c7b2c4e0bc8c6bd74050e08cb7e6bd45b37f893685a98fb258b14b4ca9bfe4227080d2f5f4b65151f539ed0e36a7aa583b28ae9d30827cb10864f9f789b949c361d5a67503eaf83baa0bc6e0fd11ce401b19a7ad39392afd0c1defe22788bad0125f5d8377b43397e58f03164f7edee0074b192e901d260e08ef8a4150cabed901b06fd05039ec39e6b00c6c20c5d1011bf97f61064a78b13b7674e6128c44021231b26fe2b3941d991fa0860aed790013fe8d06cb057a7358da69c30429328ece80dfab7e706e94b73ca2413338925e990a6574ffa29427a76a3eddfecda36ef4c7e4fe21616eca1bc0d5bdcad20e33fa7a2db52f9e07f4cc02317781dfd6ff9b6530fbb852bad0a09f42b58ed45ee33346362a55de40996c9f932fa6456a1c7d7bcb1af208fc04bc51c00e27601bb251117e4deafe553904a429ab3508dc4f1a0298e2670e029b99de2d3602da48a1fcd5d5ede9fc5c020b417e75f6499d49b3959acc801041affad2a2c3600c1c7b7d03ee3cacd46726c612c1c88d678a2ce1e0f484d98b3ce92e9c873cc96d98b31824cfb73c01e4a5e27a6ca2a1e80d4bbf64918151fd1bac06203bb1d6a956f99b741b8296a7cf8c4873a9125e2c7c19b09df1269e3db3c78be7f4d123dd4e6405b1b7d43d7938f67a4d6bed9e65fdded36fcaadc24b93418349f4363035d97ce8689054927149c002c734df2ec2fd86554108ff8c38ed469a793973a1bc03abda09787e82dc8cdd27286b1e5d7ca74b0fc1d783d258f3f6c2dfe60a7578856d5728e3ff68b49ff538c2fae6fe21f7427303d50551c7f5a4d9416eb0f9f30bacbec10fcab669fd14bf6b7f0e864606ce9b435ee8ce20b0fc01adec67215ba242d92dd18e362a9548afef83c747baf9d11dca6290e8b3f55f6391f8a5090be9631c3264beb914a93e77d05ff47ec607761068b6ba99ae8f76acfcd6d66d2a1823d4bf426c34a5add4ebbbcd8365d4cea9e8149bd957fb789f4b16e4afec2a0467cbb956ef947f6bb39b70a3f9f9d6d37a5b93de51999be548e5b90145354fd8933a1a06a527acfac2b853e1af6e2d00d70c5c2801250ccce8a810a1875916f12853219b1dafb0bd2a669977900bcf5d9d11c5414afac797d7bc49b31bc31c8c4054b2fbe9352a6775237df2060ebdfc004ac65441dda330ad40806f3f15d756e6ec3c050507b6085b3948863769d765a221bd551f55d62377ecab22880626be9b9d22c81a1125d872c040dc537246a51f3acd1f234eb1ad46be8788b0654053073d45f7a56e2fdc235d617783196d2d73bef4ffa6e9ca238b08206d0bd3b193dc983290f4516c6d04377835a9d526fba367336912c149cdd8abe39712c393c1b1a7c080768b3c0fe7e65df0fed6fbdbd0b71b48e4deb7b56ef75cf5fd3f165dc2115139cb3e9792ff832fff6be62345c0dea63adad013520b722bd337fed493209ac5d5ec7f6bbec8632dfb9dd85917ed5ee96a23635e0dbf98d86c1dc2314f9e54d682409ca6a2bde0a64d67c8da1714cbab98e86d4291a0497b14b2705be05b2a7b8581834ed2a167f7185618bfe88fae3f460f73b1e6bbfaf29a8cd424a184c4fbac3875ff482eb40692e59f7f61f43fb81ca00c0dba85acb3b769f39a16c81e4c6906bb49ddd9e483639f555370ef326524004aea185b32ccb2d032c0f6814134ac991540d1d0a6c1c4db89e60d7fdb0fd4dd126d4173f0c6c52a55449b13da3fe9c88b046fc831f03d3d2aad2c5458360b062e275012955ae2c09d86847b64736bf5601a94e374f127d72eb5b4985ba9f2bb8fa7d0592ac43cdb0b6bcef4fbba70f0007f23c9633b5f46e1615664cb6d800a13362a323e63f631e1429dd8fcdf160924bcbd7a9245fad33620f31f01a97e9982a5064b79ce14fd287477a7d38e75749852e89eb071455d532d6afdc19af63a928cad2f4a13c28cd3097b1d1e058fbc33e04c8de772f4c25c0e81c46fbd65c18a0cfc6941ee438a32493c1ba1c462b9636100d03dc6f7ec12b9908aca10a788b2b529ca0a9cfa5d7f8f0f526416e5e4ddcac4a5968bb07ba79e285251f4963315488643e2654b82886eec99080c35f4f947918527ae111ca9801124180fb394a7c4a4fbe5fa9f37d2d04d7a056593f7d0fe7b8f256e01800699826062af652c3ef086b33cc3fe1931d21ec324a22386863ca961c1912d89503365c2c82dc1b34cdcb04e5515a2bb1cce812abce903e90538f28f60df9526f10448049d11d2cfccbc3fde43e2f473b9ea727f94771910f9464558d06c7a2d2712ed861950287a280f63277175111320a685eab16861a7d291e430e4b32896e5a93dcbdc25eaed7a7247676267c0128c75b3d980b902a54c8881a1f4f1d5c31458de1ffe20d6a336a11ae1a2f1b90e8da389aeb95030504738c351f6249440ee35a9e333db166fcffc6a5f262412185a47b1a11c3928ab2e2c40838c08e8e66ce30522463167afd7867cacc4f0b93a61e93febe7f5e111b2868e55b4bc3d8edcc7059854b021dc6c1c6953518db84989d7c5eb0c7ff3b57d05980b8ef943a3269dd8cba0d01ffa629efd0b21c67157ea242d7f7904c089af517094f5f2a2fb095764cf3a7cde0fab9437100b3ae77c98eddd3fa005796086b74e32d8f57acdc587f196e3ab03e2fcf2b94a768620a42b0b3687e15ce5cd392e0e350ab26be1cbfe69f859c497d07658af4f9fe8d2b017de219e35b2f5aa13636701d09a4c43032670dc4f5f27e8ded59fcca5d3247aa473d63ad4569c999b182f0c1e23f87ccbaa57427b7a49ba52979425ad5fd49037c934f962c5db1c1dc044f8f0cab7eea4309b01677cc7ff196e53f4c2099d72df50e1846958b7a6f4a2ffd2d4d4086fc13720a54a3a2665eae9d29e251088b217dac1de49490bf9d688176cfe801ce44cbc3ff405852f4432e9119db3749773c7aa9d8a5072e3acec1880b7b429479ddd075290070dde7d347f8e3d80d4095c15e23992a358703b6a1e7c2184c808f68d0893b74e85c097f463eef30de315319cef96d947a1205a946463730b22ead24e932678fa2d774b12f0fd827f958021e4abcc6f65deaa0c38074c746e5d2584028c4f5d83a40934fbe5b87aabea33a9057c7b92b98361f495aeb211136ebfdd64ffad777091808e591f407696f807d0470f1e74868778486efe65a8125d12722c24624f03e1192555620afee3751094c51eb3849faa490f138c9e73aaef6bfbbaba99e82e4b60214632b37cca3920f69e82abccd9db0c7ef1d5e034155801a74a9a71482ae39a3e2ae5591e1928f1c7eca287f60639062c9c25d1106e33b91917e7084525c08a1c8110064b708f86f0953e95dad88affb3228d47ba8736f30920a51f31b5f3bc704cb8a3c0e68569b507c87349c944a10ed03aa1cca97459cfc02763270e3d316398bff540658af900cba66b3e8e28ba19ca67325b8c723eced927b560c1c219200802fe32f2620ee123ab3a518892e181facd8cce343210439fd2adf49432f24e47c73c7cc14c35dcc80394ae14a50d1122ed3a4b8d5d6e03b0dc4cfdd4b6845d551054800a89061a46a31b72c315fb378905f4c69e947c15e532cc3e1b9f1f20c284cca16a3c08cbb78800c04d074437c107b5d0be8e8177fe6158517e9b85c16c347e217ae974ad76f262c229ad189fa0c0fde00c4b063e266691d61a130581c01e75b354c646d435d16dd0a872e1411e04ec493b22d147140c13e16e8e9bd851bd3f6418c04aab4480e8b331047716d556255515f1c33f1d53ba9b3baaec46fe43e9d41e2642137fcfbc8bb5fc651586231a6bc6dd08c2e42f742f4b72a589a8e1d5cd7cc1abc6b51af6a64b768ac517c686693dc91e6316b0e6362c38692e95300d2d62cac4f28f8401f02f3e767fdc994e71ec5d0745302a2cac07e8c66983c6232a13c503ab99907d84c7705188ca22aef31e17513819b6e15b9f845fb22262968f0e60cc9b2b04ab1d7174f7818c941f55d91170583273ca439161d22be440df1a664e94eb67fd215b0568f93f933b736368b8d3ebdce25fd7246f16f5d99181dbf2b9b79a3fbfe0b6f417388eb023f2e9aba84e938e55a953630b4e869d033fb4206efa58a94004ce6a15997fe2487d0118c116f4d0b34d92f479ecc55aa2615bb5e5e28572a6b2adad07711349801d85ee8779dfd1a2e9c8a30bf9b58ddc78ee6e38a6564c6539c05ffaa1dcffa499614193c5b723901dd1de0d4601a58f99c1bd83e572a353cb99c4ef0fa24b909af0d95f5a78116899468f01510074de4e6890eb908383bd2abce379ab12f3e45c31b813cd140807b8d8438eaf5a00c8084cfe43c4ab913f73ee62ae66fdf61e41b9609b883e740bbcb209654001819e96cd253518f73f651cb99836c8e9223f1f1fcd68bc7261834893b3340927437956f2fd1906c968f9617e30f1f8d3f1a9f4557081f152458c1c61831937b84e950171b1b55797d9b94d335005dff86baac2611189ce07a788832779ddec25d9d64cbef601b13baa12f0090f5c4903db88b282d3db607bb169f2f8c111a157191db08720b01cc5910c360e73c9579cbef1bdd7501bc5f49b8660c096a24e0e961e768794b026157f4e2161bf770d22907fe8b7c1edeac11eaa1ad320b3e2a25274ed0b7fa3c835b4cdfd2ff9704d1ca59c3c1a545467f353e0016bda4e87e7456966109f803fd1b6a763f14243d8e19350baeba17c5c1536ca436a9e4dd5960207d9a664e8bf01bb547c9ed80623446aca303eadb9348856ebbb772871b8c04f1fbcfdb85fd6c7c79a08d4d606ac6775678f084d34bc4146d81441249847504986d0edefca71e213a7d43800e5cdd1e102346cff7d502de4d01c2e45625633f20dcc0dda8a5bb10ece1d2f244bed2b0140584f9fd924c639abac99af08b196a975a859537c9cf0f17a2d4d195615512c5710014d11da8f4da74c968eba454647de68a18f5ac518c4e39a6b4b3c2e5f901d35a03c916f921fabcfcd0cde9b57a0befa9348d10b8785dcbd17e08da1c5cfe64f35925092b3d2a7305015a884bcd2bb5798186043ec07d501c008856b1097268072c310b01de36a5f9fad3685ff58535f351ada0e5c91be9f845de862e1adfaeeca2e725738d7d07ada057101c85209c10f451c6fb898019557928bfab5678ed35f42331b3eaaafb0c9f30a16a5cb8a1eddd88d9dec234da8decce0e68058c88f5614365e13b58050aca6f631e10287cc94e56b571423e0de6c820ec060324b09e979551f5839fcd8388f5556f6ef4a79ad4fbab1a5c591865f31f54dc569612f9abba459d0621550cc395d3de2472b130823c43089134cd09eb9f1fc9b3e94745adcb2b5356acc3b55c9197a26266c0c91b2bf07f39cacffd9323dba5cc3955237ad9de95696c81cbc63e7aa6ad6e06ca775a1174c1ba838006a4cea41f86783fb328d3f86bb436392f8c42af6320c2fdbb75d89f55241baaa8b6634de9eb2d94428b44bedbfcd94e8f961351e576ea7b482b25fe7bed599e0ba088e932d3391a413e7a40a362136fb7ede0c6badb26b1936dbbca25d71eb9d3bc3a54c11894e0678c7efcae84e6f69f0a8f1bb4829caaa7129d4e8e6d750675f2eee4de225b18703d417cb44b1b1c6d438b8bbeb2c3b9597cbfcecb2048de328299a6a5b6996745d7083d799e0a01ca3e5b9b4bfddb2a2f6adff14f1bb6dafbbcc7db8f18c48e6b34d908f23430a366dec8b6032b74d1c0956b36ffc7ceddd0b02552b7122b9e6770c291f10782816d19c968bbb12aca81cc9ef48cd43b877ca3b8049af59df1bf630648d28a2317729d349ab06f5d1debe071f17075b3c6936072d4b86b9ae50b7e65eb3674bda1f995738a4ec1137d851c92997014605eaef967f23d462219ee7dfbb5260ca853faf5264db2241351ad23f0ddab74718c891511c4386434f4b85a731a9138fec9cc54d2d6b0390df34e2b40aa02c3e7a977c1c54ffe8061937364c1da0a6778918c580b35a3f2f9a8a0285fd19f639e22ca64e8a011c0325198e74cab2350755761df05a9c4886fcbb67cc0720a5225596fd8b4c8aa1f1d86f08faf97423acadfbcecc07d355ff5045c2e15c7640c05091ea0bd45caa408c54d89412b44c7128e227dfd4171a58354b6caa804ba9a1112eae151b5a7a5cf7e9fe555939e5459557c182eafc1269bd904346456b7b70f85bb94e395c8d8c4b402bd5a97c968bbb2abf803b263c6f793fb119ae61f6d7faf3606e2ed84c8cd3a31642f1d402be3957550ee8eaf6a5b8b15f2aa640078a0f89b9fb596c6bf47df895853f594d775a63e1e8998bb8b09b2185f0e237f95ac243ca3958fae7c2bdc99aade207be83a7ccb16375f2ff8309c193354d908d6297326b42024aa8124543110e0defcf63ede4bd812dc1006946a2913b423ecc70e2bddfa8fb5d49db5a14d10c32f42f47bbd8cf1f2bc2305369a18ec1ec9ecef6c91db173ba5b6e4fcb13337ad1653ef56c597f0c79b8aa54547f195760206aad04d4fac62ec68a085a9d60cfc08dfd060929adebd78afcc035332d53a6f35c51a8edbcd3c8a6a2c98c679b558288b83840712f256c78f12b4a84ed0727472c26e0a607d7dd8ded9b61fff490ba084050957f303fd61427778790aa9ae71cadccf10eb2c37147adca89d53655e85490b50e2074356018af0ce48487b83d5c1e5df2567350897607c357def9208872196c48974306cea4112a5cdbb8c49e99f26416f979d2fee9b2934872f6bc7f68a53aba5bf7041d3dee7968db777835cf8bfcc560bc189147b3e8e3ef95bcf9c6470a00c10cce3ef9c2afd4c9bd8e46ef6ff6c79c7e548e72cfb0a163edd3592dd39e34c40dd9a5e14a877e275d6d1aa48b80956cd7cc39da32f0caaf861215aef4f7ccc823a0a12f2bade818511f0a9d02ad2c4c40b1709391db911c4eb33ddbc7a6165fa41d6524b29ddc135ec2d0c3436cb6e05f0ea7e8310640786805182a0bf09821718022dbcb19d1241f87569461803827f87da809214560ff90f60c7fdbeda154a603d5481e344b16e9e8174ec502d16638738b8b805b5504b8347b3d5311f0066f59ddc79e7369bbab3e0c943d08a4e241c7af91cd2e0682c2641b3794d09493249c8f1d11e2d4051a49e8ae10c5315539ebbc4172abf3279db918123d29b1b3731a66c9b49d6db1d66484683fe7e15abd5db5531120b483dc999a96d8673ee42fcd7ac1b1d8b1dc2198010b53e210ac1505e171e8eb1d36adb67891997d388aa8911889bc2a20a0fb4c4a34d768e07e9ac401b643ee4a66b1cfe2a397bd0611b5c7c8970fca649ed968e8d8a152639e61a80cc20159ee3821de9e1ddc871a5898b67cb3226438de25a68c7401efba1b47e814cbf9a6af1dff5cac4e532380049488ec890292da616c84bc39701afc2f96b8146bce4652c06c258020c57f9b1043028d9fe37d517247b3216fc373d8cb089e3f3f572020855837e1b61af2923fc1e401c9646c820800b218660c642bdc4ab76f3147325c3ac83afc59a104fe4009d5c156b7bc01c33a5c5843ec7761829115bb3cfbaa9d8c28044a1d9629c1d5f91f45be33589daa93d461046810383397ff0aa88f0199dc3e1817f6a3ea60418d11a529a7ac43e79fb3bb39db95373adf066010717c58fdded72ca40c970ecc76b9c5959dca32c24366ce40895e2e4ee9273c0aa8524105825bc63ac35ba237b00c6e5aaf828a7b22a1135ca890ea0ac4569e3ad8477d55071e9357dc3ba26bfe2bec8368a3a1c6c00a46a3224f6ef640ea45835f8ae4d624fcf01a2679b22bd65bbfbfc9af7800a2b93c22c5feb94652bfb398c982f2c891da5dd99f0d5a1d370c890c80dd2c002e49e02991013a05d0eb0962287175519de688ac74ef252358c0b94e99342a9b83498ad9b23a59db8e3bc005ff4bceb84f44d85dcb5ed87392b3533e418114191ebf62a1c81be733653ffe88288322232d9b028a0c85bf80d669bfbdfdafefc232376109232c697bc67616a8d73bdc3aa2039e2b0254313c402e1574ca7cce50b7e84ec507eede3e2dbf491b0599e36ff3bb5c5b059196c995314c8626d932e03ea196ca7a4013c22de5224e32a5e0c3a396978fbedcf4fd65d5b80a2ee3f8a1fb6e266ba6e68110d926c8d5ab2c232602647363f748cc66cbfdca4efa4aba12ae570e7444c4fa4439988067e46cbd8067122aba8db7231b2db56410dbdb4417cd27cd9e6a4aebcbaa56816f10ed345dd1eecb65b00676c1b3a4099b8410cb74d5d44ee951d34540aa4813c9f47f88e8d33e0d083bbce3fbd0ac19a55d617e2e942cc48522a70bbf23f5b3acb5566cb4b5876c0a432f74e922c9590e5d8ce7e905fb575e7a86689080a4491a1b7132083c4c2f90f12f71d5ff8cc799c9a648a035da92533bae33b880a1a50da72c997f5593943ce736dea894ff110261b6a4f8f066c71b94cb5548cd04f829af2248fa5c4975492b77d2c3bf6c38b87b17affee1a89696bc2a7d47663de17f142d27ee774475a6342f40e9fc78ad7276a1c54178a0f83714392f11cabfb51cfd348b48fa6ed1019de83637ab77d2758c3bc07f9d904888a16c0367794af045b3aa8e383bd56078e71ddc41474ada9f8deebdbd444af371fb2174dcf56f53075527116b44b5814453aeb7b78041f0f620a110062e4b25db5edad8b82ba72bd27fb16bce9cfccd586455e00aa4177fab13263be3118d661f39277aba8b2658ced9edb4b5f4a7761a88716bdbb95e63c5a234d8e99a59a50eba030a896bbab730b267dc78047d9ce0a54fed0503654c084abbeb5fdbf9c80391a51518689ac478f703b2334941bc84a39e4d4fc4cdff8f81d5b8bff5ab8beadcdb3160a11e3ae60bffa2458f21d1db90566cc5db6f8ddb35aaf84546c6e80820ced6ffb92bd19ade8ed2b06a7b4c664cff38f1ab8591fa5d4e7a7e78b3601f75f0abd507984d4db68a51eaf0ee24d48468af073bf311eda5c6e63519fec97e47ca1cd3a810341a9ae61dcf1290bbd6a1274185fbdd695bb7b54b11269bbf08481bd5d6245dd7de359bd365360dd3a53b24869e6f0ee903feb52df0448cf9130c511108d6a8c11a5ea4ea21330d97a58a253b13c3abd2d32b3874e8a080b9e5eb0d9c506f5c19c6f4d09593b359b5399c3104197ce795e218689eaa2b0893db658ad924898f6f7ca9d3de55efa45ac811108283bbbcdff57917c3fc4c193fc03206266242b863022af3ba4cd448b15f701baaa92222ad208fe17b9260a118fefbbbfd634bcf90d558b63341a03e2fe4f52b61a70440294346c33afa0f857b1e93d5e402069bb83de3a019aa5ce263271698932588ccac1a73533ea01cda2850a13713f4c1d87b24ac7cd463fabebbc6e1efa39066c07cc3b5339d64bf972f1d905dc6c5b0d2379d85e533dd8891398b7ed9f9c96247e6ff51117d2222cb5b691df0898b9c2edb4857612c7544493f84de9d1b63e1a2f60364902015165266ee8d22b4f4e2d7d3935a652f80d000bc3afc41209c2be17c51611bd7fc1aef25103eecf1401cd4106f0d7e59b8d30168c8fc07868fcff3eabc1de0fa113b2c2509eea6836fa246ee32d5026b2af85ca47ceaccb4c8f5f5c553f50503debe63400c7ce30c07ce19a54e049d665bc8963101ec33c2597dd72be85dc5dba46b3da5e93dca751937c3cb31efe8b1aa40350efbba7fcc222ac907e9536b2013bff43777633133c56406faa0eb4d515477a57fc954a9e4df3423dcf1bd6873d6bfe66f1ecba7e64cd4ccaefdc84a8c5bfb520652cbfcd58f07db9b748af2ce0953d547edbabf11b7f6e1f11dc4bcde06dc53ab53fc3bd54965462f1731837fbd382b89c5414c23378c29602e9147186d6a55a1637340051872fb58ce26440628791866481c05f2385e4833e3a0c8f9c77a7a31024d841091a8685a13da395918a64dc0efba8904009e368c19729bbd689c3b2c14cbb3a50983c10cd97069a139801b2a9dbf21f44563ff2fc55573458934ac032fe8811da69c03a5348cb26236aa92311b1e829b3d8852fa3595f0bc6047f86ca0313212a56e6390c28d1452c01d370b2f4f694f0d6a87374f428d2830a8d245de8a647effb45c2b449b50fff4ee503681781881b0aaf39673ff81f9d00c4a644e84b39bd5fd45b3033bb23b75749976a2c6a549edde1c2c35303951fe8911907344e77d0b3923490ad2b9551c3b034305855d0dc09523272b00ca928cb43cbc48a31ba007699951a48a333b9f1d30ac296f153b34d375861847753d3f7fd79755d256acc102082f104340d34c7e09985662bc0f9b7c373be893c5fbed5aceb89d03437220e9bb13ad1b33c5c766a22c8e3721f9ec68e53f6e37d3355a4309a8bff5ddf6c1ff1570a76946f150ccb95c680b0873b0541609b149d0ba8558643a924c41c359413d251ca1811a8d5371418dd9516eaeb7b9da5752700dd73faeeb1fe9bab346504add17e214e54efb404d2db7c0991c16e4d8b124f57afc00861cc512ac428763837d08af41997d6e4541fcbf67250085f88f2ba6c7ed1d37c05212fab78458f37270f13ea926d9e0ce20fb89f5fd4b1a2ce4d5f8d27a80c58a7c914a2a876d95553b0456ec4c6e5b83f6872983a1d18171cd0ffdb7930d5bf06aaf3a67772a7849a078e9308245bc5fb50dc91f49867b187fb72b1a24c43ce194d81b744ae3fef8dc8b1d580a9e1120654bfcd86a38c8da8ca001a52c755c6c8cf3a971197541969a541b5e123ad98639d2e825c529449383b85dd84ecd42a77afe6962bd5104fad3f1f77ff5cca59eed19b577b9e2d632284004a2a6b8a9544c3a7fe4de49cce3e69807ecbcc5a16a38cb6c4e58fcbe80539b3aced391ea215775414c0aaef1c585caa45548df6f1a5b7b23c540edc99bca85c8882d2b178bfde449a6a7d9cba86838b7c874378a16183d4b2c51e8bd3992fb4a08fd73d33c9f27ea0016e7c8c1509b0c6ba15f70c2a32e6b93171198c33ec07f20225e7a86c40a7fe91e98f2ccf15f8902d5bb1478d550cb8a66ff13c1b033b5c77f0374ffcf9d3d14738ad9a8770800e554335537e570e662d41f8dbe55374c0eb542b9e048c92430e88077d18f47164b4a8d412eeb7059a158f88bc9c408a445a96830622313d57f2780afc455c78ff28594484b34f2c1ef6590d8479cc6b51ec314653a73d39948376a46e50f92bb4e38065057c3d09f6ea180223963fb341c5d06e8b76cd711e2c293bf6f364aaadc571de0a760900dbecdb5c1349334928b2188ea9ebcd887902fc6d7c5230cc35add9ff1055ac5ff092380464ea7619b05b169c6acf88dbe877b65a0cacfbea3e1e44ce2b4fc71cad745c80e50404f833386ce595fa1f615ab4f581db668dd1d17066d92ad921358c23d08c4d227bf93bdc42ab32e25fa92c3132a32eef3974ae524fffdc84991ed4c51928d81aaeb6e157d8f099f23aff009b6aff3baba3d7195d573d0ead00be4b74fa6226d7a1beb62875de547928c41e1edba192b48c58bbbd5a7a6c55fc36464d8380f092d93034edee70803f1184905314dfa87379e335bf09a343e5cc7200da10fb2ed73290bbab5a0389de2b73ed60615b4ebd4b0194ca54d1cbdd5390e064aee182a3121060880f8259a6a0de578f8f7e7285ad187c0dd3ccefa6faee99cf435343877b46a52cdabfb2187d4fa59b81a19c913b6b29baa8650e236c3b2176d38b758359fa65f9a756e5de86c358cd699e4238c97ed36645d4cb55b1338834fe989e7c7bfe5f2dca064d2e2c323317d5d1b1bb178119e05bbfa18c435c09c7838cab43bad342da47d075e6f4ebea295231c290b80b301fa1d6a4950bbb66ec3f51141938eb16c6f5e97224f6bb64320697e5694898cf7b3052e81248c4a5bd4a7bffdd79d0ef41acc5f275d9474211af0ea4a0e181210be09e672d6355dd2b2a8e6161ceec2446f98178f4416d746069b1e1af922b6986f30065b03c2bab8eabfea308896298f2efaf91cf0715adcbf4cb396cf404aecbfc4134c59afde1add839f397e29d67b1a45e6b3e12f72290b7c75eebf20ffcde8f3000db73e2211752a0746a1b27f7c9f1733a47903be4ef1a910fd11f2108cb23473f7bb96e8cac0e8d573793f6772022deafdce27d0c14f3dbd265c506e086f54686d4ced0c940e1709419e115ba58bb2cb767b3466047ba2587563f382ec0439f36c8507b94c8d22c3b7a9318175c103e20316a8f13baecba0fe5913108c4f8e23b036d368d9f32def37e77ec7ac5243cd4db2070699130f86cd8f70f57159143ac845e96c768c2e036fe29caab17f5c5acd82dd1ac1effa916cb63b9c7177ddca058db278b1a9138f528434f7204b8b514f5d4532e801eb9c33ea38db3f6bbad7400d23b182a469f882c1ddaa06853e14725d50fe0722a0f9899da147a85badc7018ab3eaf3524fc2fa90ba3e07bf0c568ecb60e675d79978d2616045676525e53b7c7baffca834ce8158341ee70e138c899a23a898f9b7ba3be9b0ef698e4a4879303232e9af6a852573b39f74c8a3edc0043fd25a9aff4c78f82f26cee06b66db975dd2bf3152e2a36d775c6a2be913e3646ccc9fa48dbc5a991d709d38097a726628e27838865f51d3b9a086427ddce66fa279b6e9c00221434975405d4af7753d027e552d3d28535c3ac28ebf240bd904bac3f02ac5eef91798bcfb3550aade62c830fca4601b0d7be447484ee3171f4967b093830353966a6f63d2e0e963f739615bfa4657f6f01badb0a8fce8c733ee7f735e395ff731ced303ec639a791683ac53d580d4396d22d86b757b2e2a516e730ae46e4145a83fc67c46e93a69c57fac149f0269492ba1cc5b912ebfbe48b03fb31846ded5592ab62132052a6cb4f9b3da1dd770c5529acc35fe5bb85ad196187e87ef9a5daa4a59837627f4b97cb2f74135da39cb677e6d79c6f3d4f2a403463a91adbf6e79197736cda0d6596d4d4de01321851ddc4aa1af059feacec552bcc845ee3ba5ab6c006842d525f780fade3d8c077ff92d87eaa91bbf15b6c540988c8c0ab252ee77c547bd9ad6b9091e52f7dd59155d3526535c91becdcece4d9eeeca46643624840cf34c399e1743de5afa4b82f6f81e6b32e44664d09c0632cfbe005bd79a66417b08234935465ddc95c76578c5a3b6fd7fb41140be733c15d3b2217c7be4a75f059e7b5e329dbce59d76bcf6f67652d357a3cf747d7f508077216732d2a713c6e09782aae457b5d39536a0083e7714b3a0c56ce96979cf60544786bd19a594da976f132e16da3337d785219af473c02c87a0b1d6dc5c83e18c73b0a68ce647b0cbfd1d9e7ce548d7604c9fbe242053598d4d84db42feae458595b3384e8db8b2f33d441d1cbc44c6662b216b0e0de9be1acd29835aeec298934d5c474b1f8857520a8e99a6bc002cd031a86057c3659c59f5a9b0329b6c81b521f6c1da2c78ee811571e8a8bc98cb01fb02c60e883e1c64d1fe6a0e0fda76bbe7e74f738e02d8143950fc774ab832cf7766474696b1b348184a27bb601d6e68f56b650ff70b2d2251a1742ef69263784fe4a2256b94fba5f0738604e401f0167fcfb02f1975385f54fd07d4863aed28470b63ccfbf5b142924dbb6d92815a14b8068d3921f0e0b79570a49d1e0100983a6060d249d7c0f2a1f167404b678cd4601dfe7d9da75ddae6d96caacaeea3bfa6e5432a08792ab2c4fefdd6003aa5a97179519cf7d911ec5c13b24d3505f28b04bf6b3a21fcd86ddf940ed335cda24ce8196b1246794ae22fc583f26410c608d6bfec0d34bf93e3c9f1661c83d75be8e0633b57c96b8986adb2b173157d002a3739496fed7f77bf844293e54923d557198cc364db60b51ea0f271c7f55fe0a4938d04a642a80df0d1d8205dc03a96ae6cf9331e6d32c42d57f0f3b90d8d0f84d0371a316b1a2bad43c9d0dc71fb6d0592a21fa957ec5366010567149c6b2935fa025472e3dac8d96a912b2da69f62f08290eaca29a4dc6563cec7ed430f3826a530743c13f9c7aec19b890e45a7a3a9410fb30aade0b35e2b7938f84da928fb1c0b498e7706aac59de1606b23671f858a15ecbeedf945d46dd8629997663485e6605603fe921288b65bf719760af8f3627af29f646c0352c083b2bd672dd464531e676c763719e972c371b7d00350032a8abc7cad65a5439fa056ef43e1f1a59627bf7d174b8c2ea153010c12f76d848d1b2769e4a27835a8173eba30a2d55caf465a5ec21b760e45d4192716146455db60b8ba7bde993143205b7329040501bf86e5ffe3a237e0ae4281473ed457095aaff5d91e64e37502b6fb4b43cbd1a3cf749245706e584271dc6d5da04b5af1b5d2b054d7b24053e756ab7d17ecd26861af8e9e01a8b2caac6e6a17d360f9bfd366adab095e55b4c024aaf887c12966f22f3560284ca5a3ea2f2222c29ccdd3a4b41f344e166e100d9b6aa63d9d0bddd0a1b0d2ee4b85e672dacae0944cd25098f67da3ae7f7abaec8d5e51a3e5971ef50c7311eec34b40998826f7e9fee6f3c3881884075f8f3410433778d87634b67b555a83ebe425e59266c1490ebdca3d1f71c1c4cbbd9fa034ac2106f847b80d3f130f44515fffa18ee96fcf6dbafc187010519dc5f129b61db58066241711848fdd4fab037674e938c2bf6e5720430dceec23317df5d68b79af3272d3568f93623e2b7d24eacc5fee9eb2abf916a731cb694c6560071280456e2a5495a81d853a062d77e93297affd37a7cfecb728403304b5a913be968a5107b1286bb8629adde5dade8b6a148be981059e87d26d97e1d0096348507fa72fdf0ff2e243df10966a1faef59f15e5fe0331a9a04e9c7b69200c91acfda5151f33c58380c75285d324ffa0166558f13e1496d3f164395f2f6d9e0b40233aded7ea6436f34111f71ff48c968fb0afa6a9391a69230ccd479b5796c1e3fad47cc8d0bc729cc71f48010ef653688c1b21969982fab5e25df97029dedda35bfad9c3127425fab64cd8b9485b7ab3c8908abe6dca46c9893b22af6082f6efbf420cabfe40ce3b3dcdb7e0c65791aeb94db95d5ec06aa6dc4cc0ff9fdd16cebe81d46a6ed748069b7d169dfb21d75fbd4a1fdf25018b6cd660af10631febc8c779a495abd0f5adeeed4d2e53b4454e9b0c214a5955072ea68bd8008ba9ba3bad81a2d24d3a10124e4cfdcc030c83f413c08e616d4a34982a88843bec5a02d0b01a0d3bf9929416eddc3619a94fd1553c8cbbe285520107f1e8ea405a849f1a57afb0fe2e30c970fd3f3f73372609ffff2df3bc2a8331d7a9601142ee5a82046f2f6204a35f509558cf6c42cf0ecac559d466b2e1a950227c5303933d443ff52a9a1b898c1e5781e5d974da7899e6062d55984a55c0cd4333219010b58f7421fa1b40b295a85b041f53a49ca2bbcd646cb71f1af3dd6148c53c0b285777ad9ca777de0806b853690fcb5b49a3916599c8ecd149a6376b59bd447b9406c5f8e3655c895bb42dce85ea18b5f4dba7c35765a55df66e5275f3b0032a9e29ee71b00f9c69df442cbeba08893c9e3fdfd874b746fe937c30501efd612832424227c7fffb3a40ab7993fd439d30e2f82df96b7471174fcf629c9f64db53cac62596140bcd228a9c9c875e30a296a00089e0a62d114f21e490a7a2032cb22fb86a65d327ab2576bbfff34114c899995896f675bdcca28a04c64fb456b489983c01dab9bd0d70078121eaeb72c27192fbdca123a4ec1b166e6f9d3ab0d5d67290e806ec3090799d12c098fbc232073309b7d1e561e4a65b85b3e0f3ad3e5803d01700e2c2afef0ef146c32da3870cee394fddfbc30844c86d900c9d812049932fe62354b65c1c53ff486fc09cdf1225cbebbf4ba644516b7725fabeca4f9352be42e9b9ea2963b5bd2f9126cfbd3b8e812775ea20368aa8d566db9a017d2cc995a7c1adb4cdd97599d2db2975c2b21885b5be49f2d447ca7cc555f37239659d4c11d2db0f5adf0cce775daea9127e9bcc4f47349bf9780e82355b0089c1e028b47006369896ab24528aea431ce22f84f311567f1b4d0e478cd6572c07d54c02bdb2367323745c9ceccba33bbea5d63d521fc43e547ee51d44ac3a55fc3a8c8ce9fd67683031a191c7f078db01a0707d0569f4bb88e3c23fecbe759e0c59fe8d31cdff20a879bf7c87eb8aa88e301e93fd58ff090480f7c6822b0a4c1b8dec0ff6d3001c7464557fbfc86b736ed61bfeb0f59408765c1f7d61ee27a7ac8a93e56fc3980790e5f66f2d1dd00dadcf8e2ca539a28424a54d223b331f1122dcfe0633c5f3c35078134af2829b284c5c5723e3289d0ec1a7f122c8dc15be67edc4d4649fbf5d4b812fa4c8909a34990e3f99f227798577699c1f6ce256f2f570edf4144c95ba2516ed403e98d025a64d42e7fcd699876fc0c7c9c6e0a7917fd98a36075584cd4f7701e553cf54a6c312dd0467883ef7b5870069b0776a0925251ac874757b86e47e2a532e4e1d070d1b0d9ab3e366774ed9dd8135199ec6c149ac1a06a36462738d90c8b84655569b743d8ae3107fd29d985c3ea4038e1b99958559f5505758fb3cd4a42c0aa2e91fd61ba9ae3079354fc5c2ab5f5bc0788bde17d2dc5306a3635ade4713acb5905319b19b401b71c0b4d942a4f7ec2d66c46c08aaf2c5462baccf649179def0bc6bbe6f74375b2fbb5e5fb3091ec6d3965954a14e3408f388423a2350a754cedc93e6d1613771cb24283efe9729c4941dad4a0c31a0769323eccbf475e9842d3e6fc9f7dc181f4e9fceff46744462355356cbb4b2c34cdc6304bbd8941d566dc367a25f8725807a797aac918508e6d99e76dc50d16fb29dfafd278a62387556b3e00aaa221250f18390b7d0f1810ed035eaf6cb62c896ecab9d24eecb04b4527c977468602789d9c37b8255ac7b9c93c3473439fc08680d2573dd12fcb130ac8a386b6afc0daee2b94025cbc188f516115b84f19d1b9ca84d7ae823f4e7886fdfabcbe19e4783eac072d92caccec98a4d7f3a4b0e1df019e8fbc07c41de80a03b0860ed4665eccb2cc907c72c71055b4d52b7f44dd118008169aa1f006dbcfb0a9d02eb03933075db118a0d8c5c483df4a8edd22278dbc8ff371ce0f1e9fed36b3814df9fd384379e511430399bb2b8275c61fae9ba3a1c7dad806b14c9be3e7ac3c349b2aae0c3233c144fe70aedd748622a45e7f114451167e93aa2175713b66ffdac89fa62692e07253dea20aa748a2a5a3526607076f8dafa865b37ce5decda5bcd3b0ca73ad84b4b3a61576e6dc7d6817bf45dd52fdf2f274a13638c98a83486e0808e67724688e1cef493e703b5356026008c59383c4d320caf0a3d6ed0a1fd2c1cb53aca29f7bdd22f7e4226af82b68eaf1b4e0ec0eb1ddae0dac65fe6c3602d1e4ff97f7949c326066b3a1d2f9be82f42e70083e1156ad4981dab57b6c8acb2f79ec53c045ca764541fe7cc2c02080e53d029a377f9be357644307bd973b948f2d40b44fd6f4e925262bda6b51e4a848a07a1593ce568580af3138297e441fca0f3bc10bcb83a7843aaf1c13341b6107c93f3d2fa28f711f7a49cbb21698696552ac3f3c8236f4eae503e6cac3077ce2ca48a8d365648052d6cff8fb2129c370a17e46bf608d826f7c4bfe6080810574d3ffb0576db42543e098339b715af643baa2efd630b545c08fa0430f0e12b37596b09fa26f304fe32bd22211014fdf0017758e28971fb6ccb00bce3003528f4b0dc7db9175925d002aa9b58c08e792c105b1d4ed63d5704900d7b26289644e122c85cdddf40d3bd0663b0fb1e362e884d99b0821317f3571ee15f5faff35e5cd7ce1f3e0b1b8e92f9923403efb0328e5e8429951936913eb2102c82d4e0321ee7fc0fdb82f55e18729354b24ce019df4a2ff839a39331f04978304b343f9660c3fb312d58a7be875ba581d0666c0e52d07d8918237346d4e369aa9b6fb1af5f7305a351ecf94b716f77488961fefb8cc50b580ffd6a6c4ee8a426124d0863bd56c6a7f7b209b5a6949a415f58c8b9d5412f61eee97db975e57016187f214e5c7c183c2a793f3f8efc8b224a11d1d79104b9e8bc7c8b3c04b3c32794ba7e8b3d6720cd8781722a3962262d6f8014e1c72e7db1d3fdac3a18c37cddaa9fa78e75c0717d97af5878edc6b10691545f623be97b06458b12c4bef33258eab1852e4b4051c97717671f60c3160152a947d074cfc96fd8c68c581f39c138cf5e4dd9ff1dbf3796dabb54dd05225e206429ffadcafa8bc4cc48f09eaed3741855fb5f260ab47af95bc6c7bb5826bbe42dc4f81750ef4e7eebf01c3279ee27a67b95eea0e61f8e7d2c765ff8920c1e47cdd313cd10cdae4af36fdd5bca77dbaa95be2bb93d155294774267ce86e85cdf2e65dfaa7f3b64dbd1a643907937feff7c9be693f4e1525b760fed69eccb31e0a5f2de95188bbb0228edc3eaca789b57bff284bd8dc929c0dd48c9a5d8244e3822af1ba72eacebac905a9e54e00ea5a726bbba10450f7c6da8cca12d118ed1831bb100cebfc9bb8321a0ef3ab7f9a71f9bf1383fc444f6e640aaac40150755539478deb4ecc5c31f0eb3abd6ac3cd1e320182486b40b8ac7b9be4e0013a9aa8684b504cf75212dd9d664db81b672bd1b1920dde79799aadecfbd603cd4108d4fba3abe6b68adb45a6ed2695f2f68ac7b9e488b9f02391c25e4ecf2e0b3c9b7fa3e8338b63d992aef48e9f50ad6b0b78de1a41896b45e99e607fd3a5367b3bba2b7c9664582aa190d71ac15e313893e535980c5bec6c9548a2bd0e9409dd6cdcb5ef626fb8b0bdee474f8a85193ec0a7ed77a015bcc5ddfb7d40f7715bde1dfc3bbec35bbfddf746d2619179ccd903d1d3dc29ce0a065584effe8db2eac77d0c92b4de2dc883dbe2a9b17de971b0ecc9236d2230170c74de67b69bb81afc287ec008b1f0d66600b663037761f5e2868e939ed097df2cbe13f816aa97e3f08a5f6e1ad0d5958765863ae4a7e08bc5c81c3cb7258369bb088cef474de60f42daefd7b78db3a9c9a79c3118f57ab18599a67debd637e802ad53e1c8b14f438ae21dd1921391bf7174dd21ad68de817bd3f9c2421962be11dd8b2a771e1eb42a314ed70e2c663aa69a422c5a706a892ba5d41fcbce1792e190611bda084cadefa13bd4a8b4fe99c6d92401f28d478102a33800289598f5357372486cac0770b82a46c3d216032fee7925e7db06744fefd9bc544b6747f9f151344d445aa1e6e31d6903e4bdad89a5424c04c602a78a7b7a8c59cec355627752ba788db33a1889a3bfee9de256bc0850db5dd493780b73064c68f955da3e3039c2d9268e1b287662a58b892641d1af191ca885a80eb45029c9d9490581f9fe84e40c19aef75b20752e7b8beea46ba95b760db3c48bb694aedd9a09a445b6f2bee3a705c7331a54db7f6e2a2d52dd42ac9f92f54ab9fda9b5434080eeaabfb3adf4e5843421880e68c11149d1aafc76bf1c4a8da94d5c4d7e7352b26c3995f82d263d2188e3b3eb79f4fd35f7c37d44c3a467a830d4522e0a8774c2fc22728e07e2a10d8f8e018562229f4876cc83f108232f619007c32a4992034fbfabbecc063fbf1c3df04c515198fe471cc120ef4dcf552137463821cd2e53c5ca97786216f1ce9dbfe968a942deff33aff06dded7330783720e83bd0f0417de1875a7d13d7723ad76899954be350ded15795525ad5cf4fcd79abd432bf18eaa1a9390769a4ed44f345ca06bb64612da7fd8fcb34c6d223f0e265218c5f01051e36f92d99c644a77545168e98547036e14860ae7f0c5463b4c3f2da11296f3a4c4ca5e3981d4506a16d78ef14f975d83b7b4c10bbacef537dfffb869f3397e62d2a9c76cf77721cda6936c889e317551d641a2d2342b18d910f69b06eeba07d16661da86eccf4537fd9872ad35682c344f2d7afa29bc47ca2fb783e263afbb0a3e01269eefb32bd407d4aa52a346ccd6b8a37604ac685dc024b678fff8943dbbee5305d3424ae8de9cbf953baf85b7095fcf9a1ab0bba94d167e2678dceec34d8f26e00bd8fe04ed53efb73e45167a69b1510b9134645105789a2d87ca579984e1631509c4aa0569900457c781ed596bffef43a130c01b65bc73df10e90db9611830c3946b727ebae36733d195f9d1ac99e272ddb7de308133fd22e53c84dd1fdc09cadb5d1185eb558887cd8c4ce6a14a9dfdfc06fe0547e0399cfa4f0675229888251cab707f7dfb60e34b6b60fb74187240f1af8531d193e49dea811a20fd591292834801e71cddd20088edfc9707bde304246a84b744c20cb67884180728e64b4bbc7c53af1cbb6b010044f361de99162856c7979be813cd2ad47e39d0737743c81e9f7fa832cf9590ec4a13230d869cab43c5e24bc02ef314735cf9883596ba7cf1041aabfee7a79e9da3dab5b250fc554571fc10a5de771eb8e00003ca98e47d6c17c895206ec03ff50e6699cf7adc1574150e7a76cf9690aaa5a215103c240e1b707def97b22c85f2d356b4b6e16adb6e89418acef529d32227ae6e904b53334d02b1e827e3224dfdac004f3a4ac88e485bfff308a8061c806f91574e8eb2e7d810ba39991bc9ff5be3b84d4b2a144654410d4bfca5d5339d395226533e520b33ef89a647191a968e1f7539a264bd8cfafd0abc9fe17879ea01e5d5da2a13904c9aaca2ad38fe85691d11480ab54c953bedd7b77836eb425e5ba57656d27b729f447ea7f4863f49333fc947c9dec1cc6811d12c4d172cdc4323eed1256d45cd439849264d75e57b69bad24356272152d79eb5e390bc03238ae4c9442c800b523ae889adbb7143e0176af0837464f5d1d966ff17d69749da65dda6f20dd6b7e2bdcbbd1e8cc076e9ba1d77e512917df34370c157d3d1d2b203eb5497371ee5ebe967d58e45c46db6f8e4b46ced2d4c8b759fc780550285919fd6959138d54af2dd386565a4b96577c917c678e876b95e246bae0d2e6f2134d561d2c13b9b97995fd0102572f43ac15f05d978e311b067491e0a38800e1de80b42c320d54cd266b93b86eb29682932e2e017e24894e7669afb72a53cf5cfaf3398d83b3dafaee5c4918796dd095196034114f7117b25963d9dc3483774f05e5e472080805a457a5796664350f88c413721e73d88a965a4d912a515d0a1c2c9afae13455dde67452e19510d25a63ba878a74ce007f4bd1f259767594f5a979aefd102033ef121c81342641ea5f36948c04a6518a556f77f09d2111f06fbf1598cd7b3f970c8cd1856506b675c71e820eaf1d86f7cafcb7d015dfc698dfde027e72a8b1fcc39c6a6738c8d2a1b05dc7daa7460db2d4db5dc8098b8f851489e27802cf0b66ed7cf1ed18eeb4c61d2f9b7622e534a6b2214213eaa4b27a80bf9e5c1bc10f7c2009c3576a30bf2f26b5ad173fe4217e4de0aabfefabdcbb358b7eda288e2da483844996bbea3f481fcabd8d3ad6db28efbc943844284774acedaa0e2cc6530d7fee950995e5c4d1a5c3cd2de46e8d57a4886ab147b83ecdd71f774cf63f2dd5d1d03cf4c617020ff315ded1c38e6c738fe22a311305d08c9f1f29754bb28d0228e59d4da71a3d95373d49f8f50df631bb8d8a191d9b83856c50dbd21647a47ffc4d7252b643930b6fd2f5bcfee77c3f458c596dd0e0b36cc02c38f598da19c6df0f8bf0a7ca611f00d5de4e9e0d4a54539e549c5887e4dab19cede3a0412c6f0f3bbde44ab93555b393a4fc636e7422e372f0f41f02fa3ad8a01f9e3d79f17b2efe31ab972e5cec85266f101ce489a0a31782da051bcc186ec28771974f538bca1a63daa7f909bcb21ec117abf1b78a979644ddbee119900354362afd5457d2e997af1c96845a26e18cf1bd1d8c39ce3b3d98f9db2991809fce199ac3212a3cfe131f0c652dc6573cef3f4396295ad709a5fbf7e979db310670fa6cc3774e7d1829db0e250e718b10f72e2fd6ca22c4813b82e38f8779d55cdbb0b5cc020d294f6da76a79b1b3b2c17240aa47faf3926836a6049f4502acbf380d65d335b7766fc377b8b1db820a4d74e7c12d2f7d47af7291676c2bd1bcb857906863ff2fd9b6203048ab91087b7451bf1a0162e4b60dc15a50400e19a6b81466c85cf50c1dfaba19cf3645b8e38121620af73143f832d549664adfd764dd6b55cdbb8828189f44b25a50ef9c8e71f9ab917230e138d6cc03d1f93cea984bdf1e5c0ef7664d551927475d6842055bf4f13a133b56eecbeab327e7dcdd3e64adec6ed53184cc0b13400502ebe4ff2a2d19cd1c629bf85cd3c05a45e8abb7840f23f0a914f859032f6f835705bf1a33fff62d55fcf86bd0b99ee5451adef77c4ba746727d54704cdbbddd08345235639b04da0121691c629d3f7b34a1a935a975d06ebdee16b42c1ccc5c6d820920c518d33005f951fc8662f1f501d219cdf1492b54db1274a87320757bb0d9ea7f75ff3ddb1689bd162a0f435e4511ad7cd0d0f0816a175e9a28cb03aac132976ae7f9a36d3e7d347731aa7e3dadb075ffb40bf294f38daeee1b90bb5a9b1d08f6e2ddc37a34e82ba3ed14a71315c580ee52273fc6e32a975a3a659ef459ae2b061e68e167730f069fd3e76865620f206a541ca1d8fae8e194708c6b92f5f896a018167e56ebe8e68724aa355c2dc4d3d5d7322897bbe96462bffd761952e9b316ec9361f523eac13a00dfa7f5e7932d0d4a5efa1b41c9a2e8e357f29eb75acdbccb8c0463b2d3f649400332d85c471f529ea34e65969ca69f304777701f9db58320ad8e2df2af8b8c48cad588df0fe595e548353586dd790ab78d9ae3e1492d17ba9fdcc1e932dd73f0774fc641cd5070742bd2b3b1e12c689738c1380e15a93fe63dd5f8e4ba82174f6d2c0dce733e54b85638da63df45ed9b83bfe3aa1f135826c3e7c3b7ff6aeb672cabc7407c52b837f790982c78f3f3bbca6ac5eacd6b16938b417fcdab00c21f2e333810895f3e463dafcba640aba046d8125b06452b2d18532541bc0f13321bc1eed9541a2fca11d2784655cb803c37478632c1322525941ff51499bc200a9907e1989f6b1d7991035bff9d8a5bf1c527ff21f214ae532e201ea090b77c7a6688284137736f000e23b5811f220fcfc747b75aaaad6ad79f8050e1d921de3ef8e81e2eb300daa5451f97ed08ed67744fc91df14d6d038c15e3c783d2895cf96d09b308eae854bcaef268adec1baba13fc8920075d535c72f663519b0bb418cf0f1ee7679364160dd3803f5ada4d8b6a8ca77d8591533154bec53b83cf349027f8117338777f8832f7e56023955c4e73e095c55ae36fc19c9952baa6fa9020c2336309e43c4029a82aa5232e3c3dc622c478ca0d6bf0b0f91cf363b677a0a61fb2e8c706e52b625eea86faec1eb68da75bbf11ceffc87e6c6251f23d10ed2536b76638c0df6b401cf2e4a1e6ab3ece4486ff8fd6a93596085d4f1c39b274c5ace6332aa66d28b33b5791e8a638fe74316fac6303bd920e688f2cd21e655eba1d5d8c74ddcd41977807cb39948e77c72c082b8259b676a0ce9064722c4e996428f6faba633084dd6d51c36991f1500ce468b90b733f9f7ac16e92d1735705a2d421a9b707ce51f2d10e904b8f06575eb1194c8facb85c347ce1c49407791f011936a3d2d01b7908641c60de0139c4f00a4b86931ffa4fb3eda884b203152c1a6118d8564e11f3c010308cb4c4cd76030eb8f05eeeea948d5e99a76613e1d0e155b56d7623abb20ea31477f1e0b1ae9f4adfc363069d4f3de835844b176d0b7898430bad5d9386f5401166a23f6b976b68f8b2e5abb3f79198a03b397f959285b822630a85c0a1a108ec8e410c83914b303ea60cc473189fae6ab90183963a54b4e309e70a5114ae2587c341142f23f107c79aeffa82110a15734046c4d4351ad88e78a9f3c0ee36b4ce129dfe5e3f4418ceb3903a2ce09e4b2ff93271712ca17d275951eb9f78dceace9b9bef9f800a2d61c7ef4de4dae9e311876d7c40eb37175d4bf94b1cd750367c9f2e96cff1ccad34098299cf3d113de92736d24197a941a58a53af0dffd25aeddfd3d5d809597633532a1345dfa72c7e448327abb101492b3eab0b4ad6f3b013df426efe8d53f65700a6c6249cb151f3f7726bcaa4bf19dbbc025b492a0909cba5da325de49fa3371a258620a856600ce927de6e44d465eafeb9d529608af94c71f64299faa4b683e0b8e570aba3391770d913bf81a86fed22aa27fbaefc4216474b69bd0530dacd257c14facda51ef16a90b9280faaf31dd802b6da5b31ff2e059a14bdf6bbc3e5a796f0ea8ec535a2cca64034558927cccc6cbf2ac8aeed742fc644f87caa8462a039ccd94cc367ca2295f7ef97aefab4a701c94eb4d26a9058217324224c2a89e62e7d0060d9b67047858cb92c2853c593da62564a1af7fa46917092687313c1334539903f137848e5d8071b0e337475263f843c83d8d6bee4640d763c685ff5f5c015ac8bf8b3623a3df6ddc2be681f1f2ff289cd46feb7a89489ec7574376cd9c51a49730d112b0984f56d65189dcdd8b4dd69dc15c1f0b629ec5ea9e0ed5c7bb0af19fe2490c952ba93920e816ac3c3e5bc1c91dc6016cef11193b02d7da71dce4b381f549ec3d197ada19af54a096c7c83ea43146fa8b33f942cdf715e9b083cdf754aa5009e7a56981a442bd3ee961ae29d406d329e4a66742b20e4b5879b35ea986ddb76ec7bf0459cce9c4ce0516be7e93b4c7e9d2da96f43f28401661ad81adbf2a38092054fbfe2e7da7306369cd9b4a590e5a17fa5fbb519203822466a33fee5b52d1e2f255d7cfd7991323b84f4a1a2f4edee61e9df9cceccad7af8ee1da7ee87769440685f82db2618ac460fc05b557d3e85a758f32da203a3feaff3a507c70b6d00c77f21ab4a4a602e3624bf75c444462fc6dc4926c38ac9191700d8bb1905b6f98f706ba0c96a0c988064e8dc5e0c4f148dcbfa98d85679175ca889bd1596279772885e6e503c970c68f2151c829630da3b6071ddcfcd78d290ae2fa9d578bb1c4a2bf5f890f3c391b62a98d19a1781139b0d0b01e8e9bd573fba499efcc0b593b3856c8cc92b3c3b9c260ec956e2e0a5bb06b85d2225c380db84e7494ca64ee3486f2ab241a287703783be33f11b01aea2ee63653f1aca8a83eb9161eafc74f498b2fb10aea53b6c8c535ae09f0c5332317fdb24917e08568ee2a9e1800b0c1346124b0bb365f7eb644baf11373b55f456903c7cbbe3a66bf60ed2f7bc2494117fc39b2c2fc926818da24a01f3f73df522c38a64bfa57bce4c1196644f42f39003f6d1466ee5bb2e6a785be3effef3adcb772e11ccdf9f3bdb20e4c776847ae9bbbf3418473e17baf748cbb7aaaa2af47970fb0b44813ebfefa6e70ca60dad21a3c92531384e43259bd9bf8bc908924c5a5209c05fc03d4fa5873226b89c1ece6177fb5450c936f53672817e9fe90046c0fa873e38c3666069f620ca695d83ea27946da254c431122986ea843418df38ff714659e4d5292e98c3855dd9153bb63a58f3654d9e7b24a681b5831da06e1add43e24f80067fa4cfa242254b9bb387ab534f002e7593754e6e65b7e3c37b5babb9b264adcd56544d83ad96d93a4ef543cf22d17fddd3231b81451410c7d25efef23eba4a06e890ffa58d2875b613e9d600542e07b5b520dcbaaf6981714119eb0a2875af6bb4800f7c9f3ec76e9431c7f731d9b1312744526d07198bf2232219cc5d550fec35b83cb96e692593689c1bfb4ea7dee1f83c3d7b871a2b42824954b702915e9435c1ffd0ba459faaf21ec53b0067f639844a6e70a1cac56180f68759451d505072fad1b23b587438d814e292f596ef10ff0a002718b6a90791d2b4d252e4dae6d76a7c14c5bb8e6674e63572a4377670790d1a7a34e1729b34296032bb3120f643956dac476b484185a014509cb64facfe6088f02250a2a40e2e37277cf08fe46af64ee40df76a5d7b12ae1ed939e8b8dd76cd45d060728848018698e051f84f9e271307753214b7526f854635cbaa72242d80b8e2fb87c0a595e3c2ccc8acd59dfd4ffdbb7383193d3b363af99069838451d54c582e42f7cd80117d9e707a94c8c4a25c7f2d885faff99c0dcefbe36f252553df7df0bf46d1650db6a381bc5059641c145ee2783fc22f81628eee45da1857f9ea12c1df6e8576e3aec582103836939e1f12b4f6f23a3296399836a52282f4e21af035d32225fbd494fa0f5ac0c26fdbbfbf6f1229c0cf3c25821e6195166f52062f61b9a6e79e7671bc134f197f0fd8cf97343a5be7ed85333b443a629e36cc79bdd610307719f99c99c86c6c7ba57c748e43ec3300a063881c4e8ee18dde4a800a9133f72a5b17b3996f43e67aecd1534359d7f4c4e7cf53bc04e70fe4b5fddbf851e6369d01b81216652cda2c7b0c08b57e1c489d41e9e59e5a732deac8b852ae46065e5062c5fe6eb9f68ea30f3c6d3fa13aab15f8a565ed87de0e899abec1c3308dbf5dcf573514ed1b1d642202c597f588fe7301fb51e544ace93c84faa750207aafa2cf60b061f213029306c7dee0a2c6e05ce750f14d20a040bc452ca00b150f10bdda32c1f3898d83f5736df0b6598d7a3ae3d0b626a22bc90aab5d2a10036dcaf68d66ebe39baadd66599155b3414fa559dc08e9a343daa9793928ecea925df22add38f085c9bbf13dbae3677ac6854388aab73d351ccde94437b8a0e0cd3d9db498238a1821abc67fa15467d3dcc40b2ef53c79133ac83ddd4b370283c3bbacbeef64783f989d23ebf7692f12f9d53645885827c54d8d7b18a2017117afe4566d7058ca5b908ba4c8612692b12692d2e82359da61753f5173453e6104d97e8f85bddc38126c58053c2ec3d042a9be73996c19f5717698c1aca01e03ad9335266a77b53952677269b4ae87962617f587a67a52b90bbe1aa648921e9addca6275bd9540b9405721ca85e7eaa73b252c5a32dacbf018ee0550fdedc22fd972ac69b6ce26132b6200834a677f5f5caf45d4cc0f4dc449584f2e66fa2f6be5a30010c9ffeaeb15de133a3a586b56d1d3fed202a976517f8734cf5332bce43de5dcd2d0eb1548415f364976096f984d4f6163cb9364b04c91c1db26460baa129f99576403647dae7b0377428d905764a6e2d7bb0791c65501a7ee240288061b7147af142f9aaaefdeb701246a533ea2eb9d9464f32497758eb7c95899a6d49d0eb8e4df2911b4c4348f8fa8226307e85b24bef6655bdcd0f4d1a042142baf3125fe0e5c09ab91219c1586d05abbcb4f66065d22b08628c68fe5c3f2dbf30c5667da3b9391258ccdaa3e01a8cafabaaf06bbd5572400d14d8738a82a613e2b787e9f6b827b50b0137764be822e5c56d135bfa95abd0ec5b350f30f3cbeae3170cd47cf0ae689a1019b88304f176cbb65d736f0791801c2327e4fe023f61d85105e6fc945ff481023bc2be4f77db84c14e1184ca942ce41120ab8b5777bce076676d8f524d5881bfd1798cfba630afd1db6f2adf3fc55b39efa4860d2eb79d77ec422ffb1ce2b2a0761b5a8f4c3d9e61195b4c2b01963644f3d9ed70314a4a07a42b42a84c5d0156b53db870c50d7896a91b2ca8a700131680c809c7fc007064cd7dac2a5efd00ad81f110ebe6c8cc9950c5b5764fb26eaebe5524fcbd83c82b0a8181f8317b11a19d01e5d1e07d7583340b9be41401d10eefca10187b5bd5fde2b80e7430d738dc4ab4a28518e76d9fb99c03f7aab377fd7a88f2bc2d3735ffd5ea5a957a529c3919894093b89f9f42c4972e677d299d5588a4ea7f8589992750c28671780d0cff55d5bd8b689744357647d63739b862f43cb657317fec2337cf26fe57a1574447dba7b7dcb787fc272dcf0ff35ed6d5d19032d2461b03bee7be69839b74aaee7a6f7d4d8f069da559f785b9f05bfff92222e200e67c3cd36114c5073c9f5d0abf438a2ff2e9c3afc9ea935c484cffa74f75b03a0aac199527d5eddc165686777e3b6e21600beee1fcf4d7c69e2dda443c122ab05c5b03f1026a7700cec497519f9e8c770bf0b95a0435ab26e52afccb9e96cb3be089065271694b17b59903506c688ff2c78871a229efb70f1fd122bdcb1f47cee890b49000b85b534df4a603031061c969462aa9c58d57e8fb6c108ae60610643632834cc82ddc41b615c6f97570203a573321c945e66db9c23155bd73d69f01b4c0f8a40a661f619e85e87fe05c7d76ede4e5e94ed7e8a838e55508f097c4e2521daba9dcc16ee561d0b32522f9d47b7d3b88281a96470ee98cca30d26396a3fc7c85f11617e2d354dc0f5feda04a5e47306f9e60fcf7a02ad3f543842abbb049236673073ec29c17540f5525e2cb15228525b792d0d8256b80cddab42a0518999452df59206a522b783a1dfe6df1a3e822965233b18a79284017cbcaa5001d9ee7109b86c76cf574509bc28b180d9d160bd35b18422c69f1155502a7e9aa2e0c0c6b81440be21813fe60131f92befc0aea73a14a017c5b51c475026c42e3dd4c6d59d8b3947f236f79067f3a32d4fa62410d4e9d24f25775f17b91c698bf4028878e1c2c439fcd73c923d6f782195faec15dd5a64c26bd9bb4662fb5f671163f338e613e4e9a44b0f11c0d525fd5b15496b26142c88c8c70b6e824b889f3bd9239f954e279fd4de00df76f0081059eae7362ce02c025c48ebc3f8155d59b0bcda0b5e1097aeb3e3519f37818fb46c6f24a0e53518d3c835f20eada811729ea424c58e7903257e667a0ddaee174e143c68039c682d442feb581d86ea5fc4a1bb6f60d27e1f04c9f72c30bd8c1e1fd53b197d70d3c23f4f9b03d9c46cb5cc0396d7caa2e8f672bec92e75358104463ccded0fa7a746ac515a5d8505131affbea62b42317c0840ce2c3d9daaf81df6379c4ff88c8a3c43508f5c7a0319fcd359122d1b9f38c590f61e46e17b13b10b566cf6d78b3ce5dc0669c8e7ec3c77cf65b46aa1bd21313541cccc57797d2e620e96543be83ae2b2df538c6b1ec780f8c8938c25e841cf778ccb4c7b22f4a6fdcf630d921ed7502f0acacb0806139520fc1bfea359eb309baae153e5af6124e470189adedd2d0e7f2c3ee777baf2b1c9296b6ec9101d391c102df1e5c91b6014638fca7e2f76ecba1b2d74183e001e2069cfadfa401693ef4bb0e6a8765f394f07a5e07755fe247c7e1087e30e8b9f505b652b1287c8fb990e898e97e9c1106d88a4e30e222603720f89d9ff50f584bef58d9f55b122ea449a83dfe2ec7d70623b33a9589ff08d746a40866d243b5e830024b48265211dbee5e79b82ba00fae088ace2e503ab1813094cab1b36bef34971b2e3f308e70630e2ca9b92882024d8f80fd9a2d9f66f778e490d3db2f3a7a285d9da681b6be71f1d417ed53fbc70fa2879b832e7b609d5650093fdb18639e03a92463a721ebdf1330ae9968e7c7e0bedc89ef2eafb7cb7c6900ce507e75151bc613b97988fc3a07c586621fe4f946665a32b711646f4b816a96603d10ba6c10fad66b5cedf21fbd0b29d6c08d5d838632562cdd24133489df0676e5f1f144e6d96b3e80899c6fdd0eeafd812edfe90569eb9c8a5d2b6f8909617fd277168a9457cbb84be53f85cdf0029b164ac285f2201c429c4a400c74dfd3b944b735a0485ff5daf19968d6cf30c1c4ca680ba4165ebce170e5661e938ec10e040803770e956f24f1d27c2ad786e7b41e83d7540d8ec38c43a253eb993f932ea4a262c87e52a8712a14baffd9068f07705e5b2888b89f12e853086a0672640620c5fca021d338afe5e702f8b2e0cccd0dae4252871ee1f8fda4092a31127614ed7e484d576097f31c0e1fa999171c0b119bfef155c7c71659919dbf446dc3a8b9e1b612346fcc6c1907748ed5f5228341e809431cdd433daaf552a6eb3b07a3524bee2320fe5589e2dca09c5a5aafffbd9336f9da5013332cb1f62f85dfc5982dfa9c90a22b15f3a9a8779a4bfcfdb64a98b18a2f782394e2df1e464208e228b8a0b82e42ff2f2a4c70b529b5746d0c3a8b9749f021ee3849770ef8417e34ab5f240727a79551a234eae98c9f0ce702070465fa5e2590acae450b6b1bb1f63aa29f1dbcf7a415620fab532f732847295a0a4528e88eba16f82b5e16ab4fa5880f909e45f1fc2747fb62f01ecd27ab4affa4ba1dd836eb3ca3a8667fa727776769e1c93a35799b2f4f0be1270070afd486fc6be1392a3daa75db9fe2da14697bc24ea0fba35f69541e8c0e1aa25c11d5e543e111cdcc65dfb489fa817d03dac257d4c1e687a961944a504d65cd212b0636f38d5906ba175c3709bdbfcc1976d65c1eb1e64e79422c27ef4747ccf7030ce76ce007bd04a2ecef7e80db30feb9509bc78833ddab79c3dc1a5ca3a81ff2b93496d4e074f28fd90236f1d4169a260ba2aade80ee4287a8a68f113bbea07073696d49c330b92fc61d85037d1f453ef92b6f771e25e2d0c661e629d1f5cddf8ce41b66424d14007b71e4b46c56f67480450808b5bdbd4cfcaa61d6bf912aa0cc833130a6e93361f6898a5452688bcfee7a67326b6064445b8ded055bde916b29171e26cde8a8a79b95b593b00ca6b7d7c9e34d71df58192bb2a30cdcf4d56ddecee68d4a4a4a1ee8dd1022b7ca1962e5cca0580e22318817970cf09084bbd01ceab13df8cf58725234f87131a5bbf1475827b7af63382b5532150d15650351a833779c4ef0fed58dce257f1ecd17e1bd853247f82085adb18722dabef02424284495bbb3cffbd6b08c77d68fa0918867c1237a0023933c4f2deeb1b0c633de8bb531807b1685aa0a9db3144801dcf168f7c874eb831e879e5028c40aa4e7583a33d3be80f44211699d76e406e23555a76b728e97419a16bb08bf9c93b438ade7773f0c3270e548a069219cabe182927147a877df32fdd71f69e383aa15b18e48a262578e8319244263513670fd76dc73e8e56d9aa46b9b7cf2808c4fc9f8b2d8290c22047620bde7f750c42188764f32edc9b43e514c02b935a80d75d95f5ae65b01fa3b2fd3ef4f2d1c1c9b0f601b807f742c5931e7efd76b8115e1f5c6b619ac24cdf206c9c9a316b975267717d718d166b264954069e76d3f5ab1a3154eed0f4b63ede215fda86e6b774070e0ce040cfe34a1a815dbcd42e2547a637970af180500950d600c6e23729988930589dc01ed4e901d21ba2c2e99d37c81e33ca468646e8b140b405b383cf26075152beb7a301d446db3cc7086d06af776fe07150d5ce5cc7e58f5e2d623bb20342635a4ff6f2274226087732ceb97f4a12246faf2a217ae5c8c09f699961963449efaf49fc42e5ebffb1315e19412d9b267c611fc0ad139528235c5a76fcf2855c0ab3437b11d47391918be7be0885219f9884d12ca01280b0185487bf7405a2bbccd59bafc3bf346509565c4a15fe7cbd90bc94ae2424105d24549a3425af1a02a2523db44a87154325cb40e877b2050aca39fcb9b4bbeecf25af0a1e7484f04c23a148191f25c5dfea7db46972f230e48b7fbd36519fbe8755b208a05fca15d4a8980f36bcf6143aee8be8307c5356bfc0c3a9c04ffb2565607412bd475022cc5194a896b83588838a233bf574eaafa407fe9ab42923b8a109c0b59be56275b3d5c372b6098daf28c9f4e8240e68954e6e4e996fa01fe35886eccf226806fa7f99011b89de3ff3403857944bb67f1f402cacf8b9ca4ad50344af534f76e47c4558c39d2fbf07187ed58e51dd2fb102deae28db87ab99932ceff0f6eff5189739ecd759f4167a40ceea804248f16d8b1f938a9996def3fa6530048847d5ca145f6a0def4a61cf5100248c5da9f3ba85b9c798c8140a223dbcf841d1d469d18769302b9c95983bbb6ed922d1a5b8803b8d0ccc95e5466762bb57b552136f9fa2994d1c1f42a2605fd57da7fdb3b99b5d198ffce68f455d39a7478f016e0f8ce8a19100cfe9b6268ab0fbe5b3399629960152e732a5114f630484824280ad21ed4b6b53ea61eae9aa6542e8bbabdfecc4a850ef1dd0409eb12758bc299eca9cd4632476d81778143e46e99299679bbc48d4fd7e81950e55b1f814403aa7cd089b78328627b73e60453ca23ded5264f2f3e3ce901a3b24a88f1235ecee63f17b8cf7c142f5daf8870d32582c22700a307beec43e6b112ccf9e55f07a253c237cd91304e39a3c9308fa393fc875e86d7d3ffe29ad1f417af220dfa781aee6a813e03c50e9fffb7f3dd73f4abd0951a0b61f082dd2e9f294abadbd298a02318445d24f465ead9af27c5b67c07b4c38903b2f58440391ff429996440cdcb130976ede3a61877c11f202aba0d18dc9d6c6d0bee0aa74b88c7f4dccfdb0f40e6f87f2c5c9e5fc310561c00051fa60b31671c1bf82f8b0013c3d225596a2b2a375ad921d644ab3a49ce9e039eb6244785c9806847b94441c18f4a171d05abebded02426d1f1019d5f1b5f9c617e25a5d83189e2a7bf55bad7c007c8eb6e6d772ceae0e8cfd5021766cec1c950815cbea3a65943ea0988575c17481b2210a0a072962036e0c3e85167b38c5994b860896f1f259695999ad9014ac4c821e68100a742e2c3ebb6094b963e4ccadb0ec080a6354aa146d8347290d1a16205607afefdf63c5bd614c62995ba6c6d88752b28e9001b8ad797069d57f0cf78c77f24a98189686daa81450df9bdd773f8852e5d919568a34c7d1e26f3324de5cf6a3e931c0ff26f0f82fd4db8a9309126110593d2545a1370fb310caf60d29f88d72577fb8addfc6cdde1332eb15ee1615636c38f50b9830653bd2831fb04949969816c40d0ffc84be347fd5297b1626e730bb2a14ccd3673d86e2946b6bcc94f4390d5021775fbab7a804c430bb05c824c97f44a61056cfa7a6a7902ed90b506670bb7c75f62fdf820ef4694712c8ef86c7dbdec4866706f13050ce885d67dff296d7819d80970a8c95c062b4e36379f5ac16d57c4dfedbb9446ecc832df5be0511ec90b5b379371d2a4b2769b847ca4a78b67685c59ae4ea86d257e214223a0b0bfd774cd424649e884474695f4b054d56786ae2c88e5ea7bb7edce782772f0e5452727b7676007129b93d12e8124c79fdd68b25fd58af1906fd4dce6c9f0abb32bde221ab844e71ad975f9a6ade4b02067a81045ab2cc268d027a23dc2850542856707036724c4d603199d095af8c47d821756f3bd9295c27e559961b47f7a3b7de288e6451d4155174e91a5926f90ce3024b442e9ba4260b83043885698d0fcb854873da1ba029f73912fbacf327ccc55635f231bef0d5aaf26d2df3cac748b517e7486aa7e1e6b33e7386055525a001e9825baefa41da1f4b79b595d1e107dfaa0a75ba36dab91d6bc7d6677ae53856f4aabe855ba96bc4547b3364e5965ccce132e75dc06d3dccbb9ed29ec975cdbef9f9be619ce8ef918122bdc1df263859a846bb17ba28e4714cb602d962edef27fdb06ccfce5796c78d4796fb76c44cffb6ea283df825dabb4e8efa9f90b09d4810880ed928587478b7c0c4ee86631a3697f6049660769074c41b833e500ef70714686a16bb45d76a127aa0c476e871bf57c3d096b283cc8f0b254af0c0ee339277aaebe84e0e7388d2a80c486983d0c54ad26791e63d56801d22bd542e69a6d4fa046d28385ec93e5a786b6fb33b972017f90f5be380dcbae3af4eaca7cdf449022d95fb8126f7d7a08c63f166fe14b28fbf12b47f6ea635025cc27ecc89742091585ba62ace9051ab1e9842679cdd5a1e2ae4eeeaaa3f1ff261553e85a38204bcc7eceb603164047d663e268249a573172600d0f34ffb49eaa5a6a8fe72501937df10d3ce08a742f2756972ba81aba554ce180bb7646891bacd2e2454adda3beafb4648e37f91acd2b8d4585e8e606a8cd619b530b1b5e0aad6a7e016ecf64a5d25ef64c0e7458d03ba3c7bded6d6cd8662851b5b55b2f5457c48320e063423ca9522e22f2180393a33e860f09ecae3b292b2e17a827d635b0887a6cf8decf798417f8dde2291ee73ee7a31c45e5664423468eddb80572b867251cedf9a77e22cd44bce28fdd9a1ded224af763ac64ba994cca74b3de675cf0743f35a00971af63b55434453ffdf9fc08c0322a6e6636672e672dd6a72f644ad00af2b3748dcbedbec95ebb9adf378eff6f96c1686f6c4577e27ee6a944ba8b45d7023846604925a744ff41c3c45f14e8b8d9594a08a1c72b274edddc0afb2abece198d0699c95707c47796b626508dff56e7dc61a7f74456076a3f991d14e274b0888f1c33ed5ec6b38c63de1d5d37ae073f3b567554741e43ac977a7bbc21c17b69803c7f7b603bdc537d28a092b381fc3fe0c0e8e6dc5614d14ca5f89b333c32b954ac9e3780d0dc1bbf0bbe578df75e38512114496835385b7329f03bfaa994b40f93af00696302e75f9ac686bf998d178f02e00bfb5fc330dd556f439a7231d9864e19d61296c79d5efb2a2e545bbb6d00f8d01ae8bad1aba3226d566de83f8915496365f738b9205b4a0f2d441817aa0de24f163178f41c3d3f84b927245b938a403381585f461f79294c01eeef3281704fe632c27debb4e72e8da17e0f9524d30d33e9910927ff533d7a502cc9d6f3e84f81a691ba0e42812dcd32356691534fc6e6df246cf51c5956cf07ac2a5d828d12cc3b633c740a8f7bfaf26c1de5a0c7908ea0ff71ab3837347c4d0f9a8bb9d79f191cbb22e7cf736c6b65ccb02593731cb78c200f5fcc7756c10cd835d7c3f048f838cab84066ea27ed4bae20cdd96a05ec7c3e6a21276f5f32cb6de656696cd5bedf6f178f238fea4eace303ebabfbac9c2bedd276a951f6a26fef81b00b2863c5489f227eddb213d33cfc61dd2be6570ae90c8f27d8d50e5433a07388e0f426f5f0ac3c2011351c5975266abfdf0fdc3b256982a44244eceddbcd0e68be559e832c88e636b266b3c73e18516db8949285c68930c7144b68b642d0f7b3dacdbd533cb3437a878371534f7ff2140ca4f5d538f45a804aaa1cad55770d6b6ff2b0633accbc47d774863560dacaf68daf78824a82443bcae252acda2bae75e6f473b1b44251767ed42862635113b6a0c5c634a01a050c65396e59ef834489f42a2bb8b4504c1056c2d2478ad448ef90408469f557405d2b88659619a1d02e57dae55e925c7a52c03eac39d6c19cf5a6ddfef65b5ca7f192f8b30a0e4aa7b5bcea7f186a32de8d0d4baec8352df87338259266a6ec61e0cb6bb2709ca9f2169768a717110b47ed603c02a4c81b84eeceb0482b091d8408f18486804ec0f52e4862c07ca1cbe035f538dda45dcf92a8f0f8d281f22e60d64ea7344a3c8ef3c4e0b6ae4de098858517ec9e21ecb873827e38e73f274b5edaefcc7cf9e20f57c120108cd07e0915d54513040d1ce0cf740675d6f24e299844a8a5aa3ed103ab9533760486fd73c3c33b9068f917c78076b451df36111942bc73b8e04db2d3c781e3397491d069cabfc835ac42baa2b95211f19f2b5ae621f5cd266028680833740ac388761656c492892c0638dbe9551bebe564e2b5455d02fd1cbf5ead355f3f090be1a7d350659efa3ebbccdb14d9472155959b613a3bce5cc6658cb9534db35f2be3741e6bad786fba3516763b286b1b0b27167af20c4aaaecd88199f600f61c541b15d5cd0c129fe51ab5733361e34fa91f3f4453ba3bc7c9e6588abb06ef9b71c6ce3a74c51f67791fd0145ea80f2ba5404b198ad07a8f7852e0f1de2188f250eb0c7bda7a7e16504d99693c970954ae607edfcf269e9099fd1944a882fe608a16cb177a1ce327b3b1114b3e137d3e451c8b94f97c32df7a337b4bb07d9fdc731db4ff2c2fae17c64d3ad0ddec9dcb0ee0c3ecf641cd539736dcf872c73a8491752f46b68ff1edf2b631a41d58b8fff06566f1d339cc0c60302fcd7b49a368c99e38b1a9ba6ccd9140512e94cfe87cafc9066d6343c3c9b1fba4a791e79941274ca9954f42c8b1bea5f8fab5449a75456eee385a30343ef330c62edc2e20159ae3efa70263872518ed01cadcde862b0d523e810567993cf93ca41e4d58e5a0a4165ee1ba613b775f541b1c760fe7b7948ccd4d49acf4594b3d09b200c15215b99e38fbcc69d63ccbeb8aa780ae64ee6ecdb56abedb1fc9abd9c3d7a83b4a659982dab219d7809652e60afb80bf5c0e3f6f3dfc03387db674695d25d095516823a58ecacba889000b488ffeb976005b5d4b070b70dabdec4642c88a0bc4209cdf692f58d6e99f0e55abf45b26c695ebb6fdd2b486b94bcb33747d1275adf0b870ce4c9c627620b4985b1f87ac404749057be497f1d0104d5feb37501448d951e6433567070b6005a82530feeff4e6b475d9c924733e9e1c2db4b6e995b60b1aca5482020ed9d956cab1bbf2f5b519b9caea25226f4e54710543755327a8f5508f2dff315e3587b7b759a5ed8f0e30d3ad63b2b9cd9d97816e755a6d032e53913fdd1c9d71ce9641b1385528521349fa759dda387f5166e39219e567a93b8fb3d63929d916e8b2c3c30df20dccca2242cd990264af915fc2c369be89f011ba275b4614a4a382aaae79a2489f6e4e47ce0e13963fee4b8640654413f858600471c411c1e1b6c30fc5367d0718f44e3867cf3b9f6353aedd5a32b9621ccd189d8a809c1291fa268140f13b999984a0d64bc4d839d9f66e86137afcc5075d6b46821141bf457543fd39f11fd2a164146db13cfe56cbdd1e0591e8d1bb69a5637d7a07be214e390932ec90194d2ac2bb341dbc70d374139641a4df99fcfd1d942a0c6e07e9cf47943ce7e24a393b6f15ae397a7cb4eccd6ade51df93dcb87d65320e1f7da41a1e941aa09ee8b877540c23f5136a2de7e9f26038aeddac5754d98f3132477c76f903a72a0f9e2d894c5e661e67165b93a58f4d5b35a4404afd71e1471d249c835e81c25b327bb2572d41d1c85dc830ed3fc6daf1f0c434d13b4bd6e1c764ffa6e7ccc3a71bf531ee606ec467c1f9ebe429982d33104788d2f748507e615ad5874befd813a283eeef352c1cf8748cb0c111c198281bb80d6ab1e2ff2e31c04eaa7d60b57bedf38e833d8dd4dda1b797eb49fe21ae8f5897b08f182ac5007aa2abdecfa02b3eac0e833c471ec555522c003e25856efbad968d96b5878c32d5247686b40065bf00960aba6506808b42313e03b22f29f669676a9b79fbca895f3cbe1ad1fd152e42e3148acb1d0443c670369b485ba11b76be86572f9994def1f7c1fcf76747832c9eaa85baa7ec30730d2ffcc135a42cb7168acb71fe5b59cfd5e7b91dac38295850e05948ce3e3d3aca533f3c2aace15e1f91fb86c6f94cc772126747cf4fe5ebc071c2e410a4f48ad417cb876d2c75fa9afdbf88b13493f8dada67ffb5a61e683cd33ed147978fcd43e2be44501c2c3e10155d92d8c66e0df081b4718bc4b7d02f3a10fc0cf78fa6af204fc65a1cf01a2a2bf0a95a748c4a444496d2e7ce12eefb277d53fe629d9e7a4e72a8f1c3e1c44ef4c9d5194dd1ef0a379a4b2d14a8138d4f25f95abcc0fc792d6e2882b6a3a0ecb832b8fdd2b6f798a345943541e9052a6e40229da50d2941a5777cb560c0d0404c95030725e63292c1ed6d97e2b251fb7341379335b4cb97c5a39a433c3f5137c8e3b34e7e2f10dbdcd78a8bda6d1c9593cb320d29f52b33c01dc764ef92f3bf49a97653ce7cd2600de6b6f063db6243a931ea3c3f6cb956ee949c5e5f85d4bf391ec979e74afab83af270720fa6031226cf7c5900cc7f336f980476d1d362c4962406617d61bf6e0206703d68b02ad23fb3052411d9aa4d1d7fbebaa59b37bff2b5b2f69d5764689dbf778f077818268a6f56bd8a45b5bac14fa356cb5f33d30131f4af1af7a7d16114716b6b833dc6f7bb1c9fbccf2b604a72f70f20023ee3ffc6db69ebce653119c39014593559b5f90ec50ca9956e1a25915cbd5289df25afe201dcaf23372d650ca8c4abad4c2d74a3fd0e74919071a21d0c3197c01972c80f13b93b7fea9e356bed2490eaf77e55d7c24cc098aca79f2345499ce58e48dabd58900e1f45763051b05b1b0bb68ddc13cf6d1849179b04a6fc0a78122cf185bdbc47bd97bed418f1aa5ef70b532ce4828f4cf5e38bb6e436a089242eabb324a3a217ade4c8ef76231cf9b8819e1336b1897a9efcf99f2b55f81dafe1ce3d648fd1f4067c8759843b349722049c18800eaaeceb55ab7e7ddf93151faf1912cadc6e49c947614a03a96ce4646a1b6ca7fca90064bf1a28cf0ab0d696c7be4641dfb84d61a17fea494d983297a24562e61e7a7e0f086d03ceca16483fa20ceabf1d8476bf47165cb295a43d68916dc2ffa883780951fd7b6f105d1bc7ca5a78d88927e3396933177dcefdbba437e079f595025a5be6fa37896833a236e286b052f42376c7295c4b71efac3981aebd3ba54a3ab3d0665ba9df2c80c5a180aee90e8502cb1ce0ba8b1730f745c2b015afec9a561a043ad0d19211fb56758b67d573df600efe1ff231f2c64edbf0b8a187f622cc6c6d75954c918d958e6ba1c1405797f62014e6e65e3a74e6629ac5554bee9eb3fca2380e483e8b909b352947344d41d4152639523d438cad0ce8b3474f43196630bd0bfcc70ae6dd9e87c6b73c7437ed6862f8ba5955d65052130946c8aaab98dfc9b0eac015a59c857826aa2fe61ac5726de43123042fba8b0c0df7283447e6afa2401a9ebe290bb93235eb3df3d0adedfeb96ca08f183fff41ecb984afe3765b287585af5913c38c67d239b772e7917560c1be65fefe88e711f68a746744211b7fe8de452108d32f0b0c478d036059eed286ddbc59669ecc3792d6f314f075e342aef484a9ed8f67bd495787399ed3755f92ebe40768661eb0f760f09ce5b067af5de4659da76209ec0e3fe6893933bd472ac422ae8d35eaa54f83a78f8e000450ed02fb64bee09a74061c17372ce0ce1536291a295fa2ddb113a9f76f5a6f140e33049db1c38f2253e4d7068cb6124d9da3bfdb07040142de65d7a9e88a779319e864f7fd0b54592be43769b2a24f180e639313ee463c4a7f2cb8ce7eaca3a0a0e4f45213e875d835cb8e97c40b75512db82fb508468b491e2679e5c43881ec60fbe9416bd7c4f8a4e2d627cddd820cddbbde96fd0e78f4e4489275fe000e78b10b975c6e4933e5dd1ab0c30b7384ad89f2b9ba9a46e8bcb38f85c60876e854df2c8550bd7fcb6a9fba7c5ee0d8f1928912d983f0f99bd643ce405aaa257d24c6e3623ddf774f1c4ec11662049d4020dbbc0e5db524f6734d5593428bbb2b7df6e03a66c9bb61ed50ff733fff172d32cd7a713b83239bf33311d1256f153dd4a43b6c492ab98d0364ef1b5f6dfd45f1fb2c285eeeb991e64615a10af9a952f91ec7b2d9cb7052e758b5395cd396e7d52d274581153f1b23ca948918f305d65f0c8cec24f68603b40b68df3c92cc4b335eb82a7140b883dc8b8cc3f75b4e3e60558060cf85533283d32b7700ca174da8bba55e7e0bcaff523b6d409ac87ac1a8f92692d99d6cabb9ff3a900341600797d1c493a2906588d4e03987f6d412dbb28b5fd47c419010026fe95eccba75cad86d1777e70ef942baefa3950986df0679e70040622f398115c234167dadace996a975810d5b68d202ee90753a73dc2cd0e37ceb26ad20c8d8c7608376aa35b884c9defd666d644a21c692f7debfdf7c2a853a0d73fa3f947fe6c54e55673a8898b77b6860a5de75cf7c6e18060d697aa1d9e55ec3b988c5021e86b31b073a0647c33bf06c489ca95e06cf71d593b7a681e542ddeca7647105592fa556235a23a2bafe699c01083728c6bf97b6ad1e94c9bcaa55ad5e7dbadf70684bff5c2c1538e8ec35a33d4194e8055e4967f883fc956d1893d39079a5adb1a454c72c9b5f0ba0d10149a18974204b27a5b17d389a9b6411edecb770ff44e14e1b5595f5063287c73eb21cf274cfa5bdc394e599566cb318675082b5adfd5c33557f283ef8916f9ab8fdaaafcca084396198c4a7eba52797e56f89c0de5df3f8dfc34d9a602741a58ba625545bee64b632efcc1ba8a6cb18f1a82eafdc33d46787c013db6fa3a7a67e9eccf29f21e59ada53f53e4ed2315a004a1d8409c84c185c06b53911699be704fbfc6fa131df66b7292b800fe6ae17d1efdae98a02274065ea50d88a3c869e18b050b4759d57b9cb8b67f6d24a8035146e880ca43f5f567e5fc625705de18ec6ac97b507d77e525511e0e11f4646ff82bf282b9ab863ee271c3cfefb04fcfe5ad139744a1f130ba1c010f2f53249c937eccf69a1d54f44fcf8109433f0ea61fbafec654bd0f569cb11491c9b282e651dd9d9887a50460f76158d1b20177f0b32ab907220d73fa258a6d7dad857755c8697094bc325891558110e72e9c5b7f1556f345a57c05e08dcc64508d08f0f3df965ea46a9a890362587ce59639a63a0a2576610ca8c72602685f72b1e5c2d67145476fb6b40844024fe9b989f30693d074af213132b3a8336e6a2bdc1729d7c5a7879bc7c55fcdedc2eff395aad04e9ad591082e5402711160bb2db462a6e2b49dd9f751b9325f3352718313f4aca5721567cd1e68f76f3bc82a9687e239ac22857206bb9e815624203601b8a840e50b68f7179656a735a41cccda36c54f5ea3d0f2db06fb522389d7071daaccdd1d0806c2a78939f2bdc3f7c249fef8b4fddc7ea27ee57ebec8c9a4a706291ad95477de0a6fad7ec8659b7120b36450fa1e5e9d665db39527644ad7351da29e5f352cad1842a530d406497e5c121005d5a57caa85623368c5bb2a988ecb9c8f2a3bdca145258f8afd48b20a8c8b8ca6d50c7b35c180659cb36663262800dc8ac06a870ef0c4aeeef58fc6146f0fbba8a5f0df186224c87d5c4198d5d83073ab5426603950c1287740125d5cb08ad1a11bb8f85f87e5346c16193b3cf7a17318f1991b1a072cce01b6d990f552390b31aa7c5376331cbffa8dd4f0abe9b0e16bd1638a753b59efe5bab41a8830655035d3428b1bad3a420e222d71312fd632ec8626e2c39859d3c5bd7d541975107234567e156b9e0e374b85109983f5f5c2c2f79fa81132e0fcdd1b53dcdd7c014563636f027098a7d0bc651aa8a5373214061b9dfa1e2c7520adc40aff699f73cd591090d2e902b77e1e53eca44396fe6e0af729c9913d22203ca0418aa631670b6cad7ba5ac67069d4afe839f500824fb23c4927df9d8d376c5c707b8fd4922a19fbfa087300534c2c56fc9c7e02dbeec632a38c81a0552ba33b991ce806c9d130dec815e7cf32ea344bb60b3136aa5c7dd73e986f2545aa170235d5c4aed30d7e991bd41374327a6a6d2c57e1c162c931fc00479a1b685c5faed74eaf75f0c2210729ac8c9fda14136208aac8836e6e4b6650a5471d86bdf32d074f9f0487cd981cdb1bc3876e9b13f5df1963938fb5af962edcc834ccb0daab98ef113e43b66d6419de1cb72557fce515dc2f3a1ba17074a6985fdbb264283a29687cbc4c815749cb0bd6f4b9d63dc78d1902db34fa27f728dd60aaaa2d50e01d2b2697d9f150382c9485de318a9a783e3e84fb00e1f34e9fd4f11833e8fa9fa25878a050dcc87fee67b812cc7f8a3ac7d4ae9786ac42f58bc3794df3f52d225d2077b5d81aaa7683708a987da45814ad383808f46e3e3eab55bfcca5595bbafe6cacb97cb976b6ace790074c90831d2d1c9aa005c8945d3084699cb8e3f0699f164fa33af6621d68376c8411378fe364b975faee365ec80b734360523f769a7b6fa30ed997902e4a41b64fdf109bcb0898ed4256324e1c635471244f551eae1ca3b0d56e8f5f27ccfd296b27d68d60562da980443c2e222f7f8cc483b8c9e04603ca5b715e71b237e17377798594b7838a5c9699ba0eb53dada37c59f7dc7354b6ec68af7ea8abe5d9928853d401f57bb53fd89a24ffb668597b2ad8eba680dd454e8bd624bd0f843018b4e1c2777b03ec49f2ea9bf9e349bf6dbd66e57f40a998da0b43c9ff12d19cd8e5d45e33a417ae1f4abd66fd28be8facc6272aee9998e7284b58aa1acc9cb1116072e95ce7e7968e5650f43389a12ccc720a92162504c23ff6ac2f540cd7a444a8fb41f63aa2a899cc6b6d6d76659204e1c2fc4810dd17329db66394c7ba8f40292ed149975884116a282361166a17dc840b25e8de12f75caad454881d244244c736f19f16f5816ba513e2c856d2db50ecc1e165cd35ec5c856ac7af17dbb5c071879ed40cc992f606f1b42099b1fee542cc8f81bec129c7468966c3e813807aff34452b9a427c040bc1679a5c3d17416e928cdab510c7350783f09876e69d55e76f627ebd22afd75b2c2b25a0a25448d3a55d00b992318e50d6dd498d8adb1dac8747f898ac8b9136ce0e9317f0cabfbce5d7f6a5284ba446b56ff62ec4162d1e577af172004ece43da9011d4c851a90685b8591a8f8291dc88f7e8a8e2ee99533e10bb7ade40fecfcb22e317fe1b1fe37e185d5331a36e3a074cbf3bf337bce8e0ea6f827b4e661a310867715152d8dea988a01ea5ed651bf3e33dd264ac20c84a22a9f5ab55c92473db8e141324da15cd1a4b6d5ce6bc3cff5bbfab268cf075524cced49a5652f5a80d90b89b3f0ac91efcadbc8ee408db95af665dab3ac0ad34f77bc0c6b9633b84663fcf6b4d57d638c6d8f54c6e05e677c7384342c3dbb4ffb63457c728e44a54261d723b3d9cbcc9e7c4691bbd6bf05d3d0e12561acd8a18b8ecd9b52813bf2b9ff5ed8938671e2bd877326b19537ead40b45f284fe4abe6f885931b1e71ee4e349510d9595f35c00e15fa7e2e3a4dd897cd6f1ea4b48dde0520f9d7b72d2279235a40eadd7d353d6835b0cd75288b8e00ce2388f63cd3aada3d40be454762653a00be0ec62c657b79aad62792a190b6c91561f993d874324071cf0cf1e50647dcfb9d6ba6abae2ab9b8701f567e7d222b00e680b8f5d2b947212846e988cb750fe443f8e77e128dd2fa1c79296f66bb1bf1fd945a1e3e747cdf1a431a76a76dc946d4917fd38f192a2109d44ed3da833f3fe5a5547915d5a93ef50c80c97be07e6cb444837af4a9f91c23097955a1552e6d09a6369df841a1f1ebe973277820e15c04179992c8c22874935e7d32bd893baf572a219855c3d24217da912916b082d11edcb8f494f4244470d7c7adb855cca4a44e1fedbcb3bac8a3ef84933dc019243dcee026076de0fa240e094d5c85f2b828d7ac4025be1189b820d564dc52fbcd4f56a0b1f986ba5c89935b35ec1a13c33df70cd60b89d9a9052ed0516d6489564050ad78005bc42e8ae04b5556c3850e2a4d1a6af1e9a62fc37e01506ba9f82e7129897fce857784dd2b20439508824823eee2691437f37f8e8afd65d6af5cdbbc9f02226abfb6700b1f5857315aa43646873717d4b6449fab9bc0367b6ac7f01662a05ddc59e111117ca30a8aec57976a823f524fcc3c36fe1c39b59b9f7ad943b915ea1562c34acd3b4000449d8be301f4e4b193bfeb529275d46a97cc9dc5d66e67f178bcd3b82841b3a684c073eed4ebfc7ed32fc25a944f62fda5f3b3d9ad60043a466f11773f7d7533622a823bfe199c2d47e49aa7de85e8c4c6f9cf575a4d8ea0872a055a61ad22a0c6a8dda9fe8a2d83cdcdacb16a96dfaa363acc11e911d8ec20b30d3e3d2e94f5b6e8cf563a9a1f55dfa85031d4896de10b3216dfbdbb22ed8282766e42da208b3c5da275bf9c16eea359dc03e12ec70c1c3596d7da8a4d0e38bb42f8941e7de8c8850601b8c8841ba7e4dc8e4f12247cd3299082f681e3fb23dd808e71de0f84a1ff0fcbe630a7a10649fd1bf1392fb21e63b48726456b41d36849ba11e5f745ca28989a8eeb0dfb00d5891def04e74ae683248a9516f91a513c40ab8d5fc336ffbf2730dca72178a289579965afc863eea230edcb4e2faa6b6931ffca773f3902057eec467a0729ecd5ffa5017d81a338f195ce4f7e21bfb0c9bc70c98460a928ab0d574909758c5ac54b291470668ffb627440a346dfe05514d75620a06a4d2ebad751e784f3e719e818b1877626eef7c4f31f1fc66162a833fdf59361ed5b0b8bf016ad7764609fba1c1b233b172d0f42c4d4f36e7b85c13ded7850a88d9af865d52202f8336943b68a942023444a013394c591aa21310fb9c6a7411eb424f80e77f32e4b7bfac6cec3558ce70100f785467f63aa6ed67dc267db939078206caf9d621484eb51d3be383922d2cf3e0dc7b24881ba58158fa2f042f86b70b76a1ce7c232b782ece8c5e01d6a71ce5e87df621f6841e3c9e8f08523b8f8fa20b4f48748361af18e12877608e1ff89741d037ed7740ca526059ca90650bfa6bf0a63adfeac78e7bff44d76bb7c88b9e927316eefb033d6d8e7591ef307a20224bf6a614debf1c398e0c673cb38a1e14670609045679b982933492f9f5ccb67f2836e7231d21fefa4fb8c497c71f4fc199025d7eda2019c1772a66bc289192961f571e8c04d543b047e218699f8754d227a25851a2db2b8e73f2f95d47a39ed2ae5c866074d7d21f388aff49f7d83449b01870a726b927920d46a257673ca744ac116847b4eb72c7e9a01addb15846d611838a78ccdb1a3564c57d2adba15be97c99bc50708c37dcad7ff85121287ca23f3fbe0db0b8c8ec89192ff7b9600cd426500e1c7777babc49f448ed6f23e09cd60762413411da95e46a91f1d34489242eff9e06fc99fcf70b36aa99c95b35b120ce1d0c3e9443aa83074b43d1cdd187cef1e7b675fb650e08758524eca06675022d7cf45e962a72acba698f1f4235e566a5239c933cb0eaf0a164712a09a1055fcf64a498593d2fd918d8be5f2913ec40b779b17756e273bc733a406077c6130a7d378b40589304fe4fa35a3bd82a338dc1b95d7246ab4f769800ac8db0df98867ee18b4d98a02fd995d24f9ad2b3553ae5fd98ddaeee8fd85d4466a90bcfa0f3b0960415a7dbea73363f3dc30522d2036c26235c771c993b019d677d2100c6ad54e269bc927227fd714dd9b39c661b2d99bfeec30496efee9cc7b99635700be3832ae718c12eb777a756d3cfc3b95f2d274d8aa52dac396fca83f34da4d7aaf5d720405342e1a20481100dac740002ef56cbb7a610ab9b174c4a1e35650b5419c4468a3d1128455e3dac20bc85fcdcb6da9a6b0511acbe98b96ff67329e199e097a8f5deae27c2cf0148103b0d5ac2cceeb974332d39681ca1c8d269ed584efe9f027a8953ce745842ca0b2dcc83799dfffd2da4dfc7b4974026a2c4742f02b61aae55236a7f5ca6be05acbbe6c6760e8dee84faae442d7ae44769129204f02f062b5e40830eea0a6b58aea96914ad1d91dd22d9e665e7b5367b6eccaaefe82d9bdcc89a789851040ada479fc7c6eb1f067ad7054f1430ac08aa8c457202cbe25a6033f670b9fab425873b812d2df7b60fc527e0a90572624b6a991db3a1098b6f876b02f766d68cecc7f81a9dd85d9d2affa3f7a63c2025f22f0dce28fae3c09d456541f43217dc4d4afd0a2ab6ee4638c7f4eed6859947a33745b662cbda8dd299635e467ea16db505c49cfc28d1b3e1c78047849a2ee6ea2a3a7cdca61973ba9efa9143854d23c8f55cd8a3b92d05441c16209be63eb84ae2801ed82ffe087011f7dd9a8ca886920c0049ad7607f2a15067bdbac8972e8da5e2154375cf661a5cb8798442939804bb59e368bc354afc18b9137f6f5feb07d839dca206a6a146ebef77bbb0966fcd76b2a942d8261d14d46a44ee6cbf8f8b9be72f6f8aee0f9e2f41616486f7804e4f746d8c28b493133e47af0bf98eed40ee0390020dca4262426c23bda724cfb4f6593d86bf698bf61f27a962dbe28f6d9fa8c45c4c03a2fb5865e032c796e74e58d8100330758f069da3fd89e4c54784df7b6a017e3e9494efdcad1efc81cd668a70aadea56b72a1d0be9e27190f4ca51b4c8f28890e3c296c8965c3afed338b424431dc3aa67357ddbb8e419f6dadd1e1c5a3cff3874bf0428a7ef6f8d8254c313b140a9c397da715243dc3a418ee0e3cc28aced86418dc4977286558a55131c3074d76aa1ab47badbb31da147df66c6831f90276650edabce51254aae9aced715a6d9621deee44ec886fef372e75e5cfa72c7471814efbd5aae8ba0e0fc35319a1f061ec6bfa2fb220fef5a3400208e0c4b503cb256783814e987f5cece8203e5ae4d2980836a5dba975511f90137067c61e471ac1d78ad1d5c6c2167af25f39e7b3cc19ce4b69a1b39b220c1786806564674d7b38845640d3aa38ade313fa145ae5ba4aca865777ca6257811438e07eacd32eaa5089e938a3b5564bb60ad8fda46c228679a9f60de40603dda868fd885ac66b4993cec44c4ae91f9c8860ab1609c80c110dd757b42987b1cc06570ab4f6a7c217c3a744a45d8dd5b4ea0a43a9fb85c4ecc888f10e5247c10e03eca03fb89960c6a52c53fdbd33218df7f4a30f46cd9f972e3d632cf290d253d859cea9924f0695969badb96ce842fc343cda6efa45603f2e1e2235d3f018f66911bb30ae75da79255da08ed669f31178f696247b5fd2846999cd503d487608024d411766d3a541fd5180359fd02e257dc01cb41ff485857c4539c33417e9c13402f044b625aabc0f67745bb549f9e5907329900744ea1cfbf896c75d20085bfbabf7dc8a167f05af9af83a88f16e768d99a738c9313508dcd15f823256fe31ec6fb8556ee2f88ccdad1b972829e47cedeb07d51e2406587d12fd19ba25cde753ec071b55e66160abaff638ec07a812d39a4e145797914740b200eb4d8d295d2a3364b5916400a9e8f948a3e23addc9773fcd25fd6d6040d52629bab10afa5563dda0ec9494fc2c606e7a3a3397a9ac260d59785675d6ddeaf724b2ef184b0251994d96a1dda41596130638967b1df8e983c62a4fe110bd6c218b656668024283d7de2fd83194d83ec2eb799a7cb6a2bb5e6eecae67b7ebae3c06e5a1423eb319228dffd5ce42675b7776ac781ce408d88c0c6b6c259fd9e0dfefbca0851818ca6d24a3631c88438a012cd1265e42b19fed93c6a2a391e90a066c1ab6462fe7c791a4d0b529822dbe247b31cd55ed2edc6fb023d5b712ef24fd6c28f242a91b8ae82d2d48e732f73571310fb5b5f8960ff381f008ede7b423d9558a300fe5d677a8d0e27a18a456a8221d0279becfd6344f6522ba1d5fe708d20fcbfb70560fab015bc06caa08262c1aca3e78e52d4d7205bf994a25a054fe8589962e99dfae5d749bc64c73aad71758fef82c5de07d45db6a5b625106f542f07a2f3f13d3a7a3480b3eb46a141ceaf1ad436718d12824c2ba694c31078db856bab9321797fc22c0ee4fb7e5d83fc77ff97cbc11fd55acbef67476a5be7d4388a005c62c05514a034b5e8b167f220ba5e31e1392728f702394b9a12c28bef21ce08a946f772d10fecdae61fa30f7655ec996dae21d1ba163b884693ea652b9c8f08020a3f31176ca205b1ad6f3f4f1b103785e7af5dbe3a040b32b87a878ab7dd9fa91ce15ade73cd7e65110f4f5545a42df96035f37a68d8f3687745f0c2e5cab0c75aa0fd67b04cf1d572f61a36b4089ab0ed0d2ac5163b3e02e21755ed5975a96e5223f20e4b37cb7280d0db6158044136ed9238b3e38647fb91f5580727b5fb097b9f8fe0757662a7b8ca56a4f3c737061350b4f87fa13e348c02bcb46541cc2261f26d4577c2d0a4c9bfbf1e068e88506a63f14545fcd51a7d331ed0f0e413cf309588f781efa4d62cdb9d56eb0fc0d04fb609fdde3b26beede7e428cff4f93fbeb9a80e4f509940e132396cdd6a6e99fa124e5f6f99494c6c08821ba4708f28eb44e18946597f1fb99ed37ecb13b7d9bacdb644df541f836975a8da20ef4a4204f097834a1c25fc61c9fad0e3fa2046b8bc1186f2ee487ff481c350a88ee85d0f26ee9adf0ee84977c50afd184f87f103dc649d5bfcb4f372bd0c44c9e58498896a7d39d53f9a3d24fa7a6f8263afb1378d91c7b5fc9922aa30f87f37b128a6e895cc71d7d2be80681b538656e55a08a6ae47e511210a5ab4ba3202f36a844249b93630f044c2ffcebd018fa42e7a810a012f7e96b7398a59df0fb6ee3f7764350899f129e939727b6e7d1dd881a54ddd8086d303e8ec150b8202a07e6cd50dbf26bbf076ec2bcc0189ceb64abea3f86f132e37a5ff4d91d74e65ab1d7e20a0fc0acf876533deeed2326a5fff40db1b5fd12af81ab33917544f41f7dbba1453d20e23c6559467f6222eb668a0982313d5f2a6a670a98b52fde144a4c666683e58c77c00b0d7566767dda7971449853ed3677cf472aaebd8b703f01c1607c8f02ddccf7596784edda991c3ba38701d1a68a6a24532bf9272aaedf101221876f5c95201b9a1c1904564633e565d1c319951949d253d269daf150c5fa17c878eebd95f1f0be61068770c6f249c6bf7a5ffa1b2b385993952c2a1a9d601cf25554e1ace81cb6de62c18dbc011621eb11adeabdff960b482abe20ea863cac22d97bdc98302d917db01643b403ef3a28774ef3846a0365c9b56f88f40c1d4dd8ff222d8b95732a0083c6aaa651174d32dc3e93bf95fa6fd4054502d1c1cde951eead8f787ad009fa80e2929a8659bb06e90121fa5847c0fa13f03cdbbba5a6dddccb7ac653acd1f7c1f7df19719f65cdce2d1a3d63c494b2f66d384be3e2c85aba1af3c929f63e9cfeb1e1e7c3672e09bdc7e1808d936b0796bbb8a9df44e9f9d24355ef584b069f5c4816b3570a4c58bafd94d01f313c23716533a81b95d58274c468fd5fbf42374f08292a74083273d2cb430edafcb7601fac1307c428be96456563d36a8440236f356dc35227100cf969dec9e512aa602759f3e4b7f13a8d76cb2f28888f5dc16e870705cef666288dfa25c604e1071ec37c0a877d03eac53d1b3cd980067ca724e37d25849fa966e882f1fa0b0790869219a7b40cc47d09b7b74a12f296ca727c49206f976fcba06715f7cd20a4445bf18f7fb549a484bcef5f3827373448e57d9426b929fc7c23931c5b342b030b5abec4c12ada6411342a87195e8edd6911b1284cb06e1dc3cd54015aa212040fd6d6ca3f8c907aebc613446a362f1a4030df8a6cfbe83663e73857817d5db99344e8ef656391a69513434a601fbfc67eb9928959d244852bd5175fb09d0abe2b2f01968a1bf46ee0d7bc7087fb466b7b845afe07cf8b8497ddb0e5487ca4f86454e36d91f0b942805107b16d1db4cc8ec82cbb585d019fa2fa1ba084bb45957956d4049033dcc9e62a0eab1701cc9356e3afdda6bc75ec7c04ee7914ae569704c992aa5f7b6f2308c1f77874d945ce8a84e4416b3070cb67a2859e03ce47f7c4ed5b31591d8f052e3faf6fb64a25a206477f845a1a880124e105d538093bf689d06fc115507db4de0109c96ebeb75359d1fe23c390a8332acc0c610b1b0668a3ca410b3ae319af8507d83522e4e6e06e1e3786cdddad31d1c3ab2a58cc9e4d1139e8509cf71aee5da6dc4762f384f5d3bf384bd581aae156db3205793a34dd5a93bd2ab2bc5f12af9d5c70719206d10476b30ac07e20328287635914f7ead82b65fd42c42efe04f3d40005f447eacc2faba6872c4183e47f03e3c38c6d723749bb89aaa7ec69021c55001c0082fb9750f6f34e646dd5af02672da997e413bf2d263f58a3ef6a56d9cd425e1ada51b062bdd47a56aae0a3168c84a9a6daf1792393e614b2198058052d3b8343e2ebe69ffacc82ae8e89e45469da2fd8f10b768fc33c922cd331ef566e73d755e71b017787f9e8096bb5526ff9cfa96df1d0c818203b6bb2c0ffdddd79b1ff7ee96b0e3d87480db48e2d631da700f8207353b70b50fa074ab8436ef4000bda02c7cb350012ba4c63d8a0a30ec642f30bafd18bcec96cfffdf338d021f64ab6dfda24f707d25e556fc2298ffd99c5457591bbf410f6fdef26d24800aad8dc2e5af1b4c6b3d22404c29fbedbbf1567ae9d9f9a695372bbe1febed9b9d45088ee620db284221acfda5573cf7b00d27c02bc58246c5b4c2a2ed5822426c8534e0d5e8480402c8662601b35b6b0d04e1aaa6f2debdc170171636908e787115887a437a48eb09cfc2dc6c272ef2bf3fd58e03a009ec8771608bb0b4726a1481b80382c1dde00494d7f914cce9f51b2ebc9219e45056617227be7ee8282bab5d73cd2c3ef29f2bf470fb4fd494f48179e444b878f5d02186ff479b4957fd2e918d677660688a544fca2f3f697081438a1401dbfdeb2a2a60234a9696558259cfa6e017df65b34c5cd0a1e60a87eb9be086dedf7d015917b95588431715e245c2916bd87af5be48cbefce1bbc4ab3632b0ba1e77e098a357e5ace072a8ee7c77cbfbe1b1328c40ebd8e45a850c6051d9eecc60855aeed24ff2bc14062a8df04b3efffb5a6605b3df96e982eec251c0bb3570df54b3790a177f2bea77f7247983b60a792a4ebdea400aa3e4e9c15ba2ae908b4df2acdd63f48b0b7535bd4bd7d7f4831398ddad798d05a294243c8dbc1530b241fc1cb5b5dd4934584353eaf6b38c6be89a6e623b1c626098cae5c8f3250aad3a3e89bde6ad0887848d6c0631d37f60b782ea5a0c52a659eac461a220a40a7337398f27b65c077225d3ffae578a15341a7c8c832eb00563a68d2880dca3d1267fca699f6827e8bb51fd567629a419f2ecf915e2cef160cea8ce4a746fc70515bd080a2df2cc2b268c1f0b354619e211c0717e0a2aa81544dd35574a90c515f73fa2d13a15f46220f9a20192606581c3d9a2fed1f69714e32d119627f5155f3483fe43e9159444563b9dc7a796861dd494a3a883e6714e550d6477ad3378681c4f620b33814d0cc9b1690ba51e0a574b31f0452b6e20cb44378e60a3f8f42b3e34224cc082b9de8fbdb881e3a88c0008b1637ef0d29b20201936c3bc3c70e51ee7d011546e6776517109217d31071757991145e5f26ec38eca15376c4c94f8d02dc73123e3782a5bd08540fd814087c27d099eed6a08514e8552de11b7cbae90bc2ab623cc5cc57cbb97a3d3866c742fd3443ff7ea91e875ea607bfd4cf7c32adb1ebada2b809b8916896c22e87fe3587d2db425dc6516d5656493de42df926a5f34b034df7283f8e3d1ccb8f05efe938484b285eef39477c7f49a856537b0322b526d61c8b332555a9450136a45de5b45717f512fb39c1714dfd489efca1763e912a963bf7016a910a7791fe38815a8a12ecba1a8ae66b8974a715ed3444b192679a6aefc247125e150498100370bd6a79db2475ed41f78e6d4ccb9acb8d7719a4bb140073c3b06417c5a2fec444523ee2f2782e592754093d2c3ea6a44089499630e823475bdffe9b8acedebfcc16a61b035a31ccc7e3316a59c1f0cd9ae8701ba960684ee636da8eb33267a7c5bd0963b0b64545b0b6f111dd59a1881ca35e1a6db9d0bbf8d211fca05318867900f5c535f72757658d65fbbe012561d589b83e2f62f04bdf79edb27cea60c1b7f3021efdd1f4ddcf495ecc195614bcacb02f083ddbe1cfea11ec980fca42a626f89c06328ef629ee315f231a9aea3abead43e3206342ecf6ca4ed99446c5d4723a96a7bd3c339051f7eaf2f93c2dfe02297fa8d769b50532a5866dd94b92701ca7743cc670be8719c7e654fee997ee7391c9317c7fb486805d8e8b6c2c4e55bc3764dcefb2d47fa0745ccb1fc3237190c01705a7d22b71739a120bea72f3711d7d4ac62a3fdce7c4240296a3765596b9e08d72024f0f17f23384810e256d50e278f6eb6e8b4b8a07ce14254372232f4e8b800b5b96d2a50ddc171e417934dc7bca02d41111d96a4b3b9f2a38a21cdd5117e11685393ffe272db5207f5b6f1af9b495efb89fdbdb03d14adff5563d9664de1ff65d5f38c5dd77e46effa8e3d212c88351257c8bf5168012f517eb9051e9a32d73f1d01bc9d683523f76b6742ac6144257d0baaa5e9fec6fffd338e5740cb266067625e78ac9ca87faecc2133f83a8048cca77773f9c5f39d3e9c9b60f3f8338c00755429f2532368e0682ae02d5ca9239011d6155a44d0b0b2769049ed75ecf488ab7815b7f0140aa9ff15e277e7318a6582d711392f706e999914c3b92f716b68a3eb8b856c7f1f82396f4222c2ff70b86ae824747e8291f5a9871a0f91bc9776eb36ac12e378a4054a5c679ad310a2d6818385bc936026ef1e49381aa5ff6029e97e11ae94a0fbf2ee417c04c2e9163039b0278c24ce19d013e6bdd8f2553e983a7734bd4e7b174846deafda43b81ba25ee9a986e3979d4d8cb85043ce6f73f368844156e20f38529feb99b405d8b3abe124138134450c38e369d071ef769dddbeb001a973a080543354480dd634fc23da938edf0e1a03dbf016ca0eac2b1091867692cc91b507fa14ad648025eb46a6fd4112c0f16f3cc151076fd935540437e480881da53f9dccdc6cf5ed0f408fa990b061d407b739f96c6a006fe8cee53dadc7122ffbfc4e0c389212a5f69e1db7c9c3245a32ebd213fb0f5a15956f6841b8510ebdb1e464933364ac0d0c4da064267e85f81e50700a06ee346b6b19fd749cdc1f8a8ee3cc677993f4bb79679e0a631883390da6b1559e6496761372242888a63a73f24ca4d580e5e3e7498283a8eca15999e0801cac153d2ee1966373bda303a5f56fc15b221bc4e6bd98d35286da1a501af8c2937530023725fe5bd60da32fc6f577429399b9d923d7e904bee7dfddfe763ee9ed33f39135c1a027bbf528b7f822301ec9a698ed77794d270603fbe6ecdf0a87deacb47eee232abad290dbdd7a992f13def23610a969e98db696b6259c61167b6d6e7f377cc25b97623d16886a7278f19fd85bac585e1a7e044830f6ff91a0668db0149536b5f7e89758208e82b4983cf21b98070b978a049836aebdb6f34eedd5f7b7c76c600aea5afdbaae80ec59b3c660f7b270c0cfde5d033a9285fe550efe3f8629577cacd315b0203e69ebbfe99d3a123c06db4d8b20091beebf045475491d16042a2c13ae33f6dc2fcc564c82628d8fcafa105dc82a07094048cf3a500fa542abcbdcbd0ab5b478bd387adb2f81b9de73971974ba7452ea837c0c967290fdb8986b72c518da838acd357a6ece32ffec1356c19fa1336b754242ea7f823b1f46a72bdb6bd8ab857b52afa912580b071b37239419b5c9baf559bf1992d6dd61efd15ca3c9cb1b73c511179af88fa317a2ac7ab51015930d9811194149f469b4eff0bcd468128786677566adc323d57eee535ccbeb976422071f53c4f689944721888d39292f650a7a2fc21a227e6b9f4bc946ed3f3c7485f98539227f56b9bc8f83aede4f820a678435021661f9d1c607423036766fd5a4e2a3391525e618b42da280538ca2a20ba702b9c8d39765c8d4c4e40919aacabd2877a3f91802a316bf9442c554e110ffe7b21be48778392ee64e25c6db16ed5bdfdd303e85eaef417ee51d0a29ecd8cb5924a34686196ec683ae9b8dcf59a94ef2f7a2346212ddc1e74f4f7ada06bc4a01f913bbc2b65922bc63b9e52d16c3134ac220e366eaa500474d21de2226e401a642168e726beb08a95b7ad01573270f938113b960b056982799653f2858cea926d1dc220173e0f8e89274036f5cfea58350d7c11f6750b3bf1e2fe4b86639013aa779ddd73d482ade3442405c117842b3fcb912e228194f99dcd2658aa8c13a3baccde9efba889755f1aca2f782eb4d428fafb3d992bfd89adb9451bc303d6007929c3382c0afd90f0f19108fdf61dbd15d737b572bdc851be01909ed0649a9f6aeeeb9764badebdfaa9bf4848116cc0ad7ba47d676722b75829daa4176a81d28af110830f08e988acde28932b2aee7d49711ebf4cbcb2fd523899a9d17d7bba19cf0064808ad73db45a2b7b8b27f5ef2587e6d9f275a65ef2a5fd52350f3d10c084199d6e9dd0b740b532090af5e0d1068d7ad99dad87812c220c62bd377a95bd4c736b16746d82438ef0874ad90862f7387e67f568facee311c628046c9ea02b6f123bc37d17f6843c3a817046e44f71fcab04c1aa98f2efe8f412bd08b8815dfa9e68a9c8118ed9c810d05bf7f8b902cec86088674b1be1dacd19ffaaba20b8776588d5c465f03e5c4d2dff44c3d86a6bb336436e83394912a7327c96f0d291f97d512f491e9469c8595032b1cd69dbf5c139351fb054a5ed7d742554fdab7a0aa2b0a7c3ba67ba3f9f87fa55d21066d29f93ebb8d21146c5ddeca74459ed62f04f922af6812623ac5c877f94fb5bc3ef5c835b5c143ddcfa54093cb3887b416ecdc5d606043b5e3845d1b1747f9cb03ea875b63144672fc95e1b1a3b4d1f236b507617564958f666c462f4445f71d811a059c96a032f0011c7357a191eb50618b2dac29d121fdecf1ab9844f0e9b44b415442157d8165d752c3807f7a7f4f571a39eb0838c1d40111cb8f9cb5b9a27a2d42f39d4db7d692e4984401ea296f9d0ab08da839ab56be09f3988d449b18f4e1b187ce5f57b9f3f7eafcce05c323c418ed99adbf5fbb7347c5d7a5eff2bcd51234a28c5f9c11a7e981bf3469aa4ff11501c2a8e1d67e96952e2ddd390a727c120bf58b12c071cb9cf70cb37df32c16536148a9af559c4f9674577c2e5f108f5392a220cfe9b84121282f24bd053104e4c237c551d3c0de866e84209cd9142c172cbe42096f0f3a0677b28c6c2cb18343e76c3b2991af2c8a84846004b96d19813cc3f42e95013d8d08a8f9921cacae60f5075c4aff5dde48a9c022590b3be70970fe33ac171562a89d706665d4cc6a1de3febc245315478f85f902013562ebe544b3b63d987ced8935b746d37ce7304866214ed0fe793605cc9d051e0c4fcca70c059e833790789f30be7df0a0b317ebf90971ffcfb0dae7844d36e3857ddcc308fcc4e84531857d4d3931006545d54f137204d7f6301711d5ef0258c8b6be0c8dd04753d8fa3e05671c2b06b70409c7ff5aecdeb6c563c1ca3f6266c8775f4410c8bc5faadf17f41841c6eb9f1cab349f5ded9286809ee043208750871feb5d64c2007aa95f65c018a0206f46a924cab056490f45bccbecc69507a198d6ebc6fbfb1a6a24f93bc69980dc00a7ba7b53d391926705f2de17f3396d994a9749263668880d37c7322edccb571fd21c7a99828123e34761f905a54c9b03052c6439f76da6eba041265773d54f589041d0b6ea872f3cb9c7ab5cae670df30707a029e10cae596caa390669eb9b1e3f356fe5c4db083544bddda12eb05c22896b0a9bfe795a35808b84ff1868eeb7a72c068ffe377ed7c4d61071b3d1c02c40b5081d342ac9b76f9e676d31a854870b4768bd3f741fa2c5f1a22c43fd978929cf25ba36c7013ea97789cc89d4994dfe42e7f0ceca4fa7053d514f015eff425a604882afd1ee5c226dfe2ede58cf9f995e4099a397b9d1e201171c7332986be934854cf0db59b368b3cd222cce5121910c554ec509bb86806d4d5a2eba83ba6aeb6f1cc40755785e774ee1a4795b4ea0bc1d2db897f659647917e6fd64ca496d63edc798bb78c33929627e66ef376f1a097a9192ebf8fae6ffef7620e9d6ea48cb59ea3978211957513f36aba950a13232d24252b67bfb2c5a812c35dbc37941716f585392922e146048c5e1cce1a9415a9fbbff390caa583b2fcd52e5235f1952752339006bd65a6acdc5049a35ace6ba011357f3c87eff0cdbb6275ef28171964627f64efefe8f34c12f2655c586bfa15c10626011d6b5a97b0f8f40cb94e53dde12d92ba8476757e86cfa13835235cd72e38aa02ceaee3ec8920fe5e93f47ace9541ab2ebb372b71fed0b5d10231ef7fe69928571c55e802a04aa22f71da0f8cd92216b6d4d44335b251c53b0d41d911d07d7e6d2d75123de3616482ba64a9550ad25e44ee13d5dcd3b5bcb84b1d47b5a683161abd1967c6ad5973e4cd110b4faf2bfc5c61f2670ca760204e1e5c362e05b0379e412a6ff57e93bbfb177b5e7d227d04eda5a09d01025965434b8ffc50d6e76e9068b84d27a2ccd4461735bd80641e1645ea71a064f3f5421449f51d04b7a92a241dcb42ac39a15ce3d731709478240e232dc65536d065832212f782f404a4e8fc56ea984206e6cc845d8256b67f34029472a5b66a53a8b41a2520f165443b0b443c28cd5ea13c37bef2e221451ce4c35d928b753351d552a8ac87bf7ca74cab252126ee2c7d62f9f59f3000f86b88180a935437ea6528eb44bf3cc2734b77d6263c185a28309a4974732dabed3911fed7f92186fcc02d0fa855e3646cd59b2fe1dfe8c02e208e78c3f55749712404c0941f4dce9e1a3eeaf52a648382391dfd480f01993dd12f0fbcc5f4114afc8490b36c993196785fbdd34c7da5b554b0c1bd393b87617c280038949a10c12bae25db88bdec412e3e98f2b03ab03ac0ac6741156e1c065bf41f2efc1fa9a8dc2d93eb37dabaa658cc5ac8bfaed23ae6794b27406e9005b34a1359bee05de157e357a94dfe9ecf551a98fd2d4a0fd869bef67215e3252ab00fc5ab00729b93235137d8edf72026a575ff36d026e0897990a876996e475f4765f871bcbc1e507f180cba72f929bf5a662f42c5146079f13a9ff56880e00bb0a0fc21873887fe8476e332d1550d527bf594056f418ee4671940b20138de2352851a4b28d5c5740a8a302d4f48bbff062e450123c3aeafa1ec8e711c965920aee7298e5c133bb9f0927183e14148a1abd027b98cd30a328f3f265cca635333397c7198ab5ea0e2632917ff00ba09ddcd0458c54aaf06f41339b4b6d5479a49d38ceefad30b27ade6e410aec16f513986203d5fe73813bd41c0891aadc8d88a16dfa0f4d54c30328bc8029d8a1c350bba38b00360ce63b21ff1aaef5acd75d0fea00cd07df8e3b1fc20efa88fa4f91048c24f7c2d9085276faee3f4e35428c8274429da91e4ba7c3375873f63be3464afef2e91ac860fa7a71750c05b0d4fe3e45bc13db9451988e694fee54b1991a3c84ce5fad9cda0d59cdd5b6a1410f779d07f2de15622245a3033bfd5d4d50cdc5abbdb06488c57780f5995923374747565b61c17d58d2d9a4f5c7b0f75a35f2a08e3ed11f9d63094ef7e1d29a869a118277f9200bd477ad55b07da83d7d8db5b129a9dc0e7222e85a6bac3b4b08982a026ef72d49203a6bd4fda88e2b7e3c5d4788944e54bb6f53672c92151b0ae0440ac9f4825ba216ec7b20a8fecdd6c76c6f8b7e149f978e01942a7d40c553f2cc27577de568aa631c9c4bb2482bb0bdcdb2650cf8fe94de45e710122a365d6bd4e14c3266b094d93db54b1d124284ab982e3d7bfcfd8fb533b70b06dfef11c73e5a8b8074c74c50308b56b7c0f9dee392ffc254b498f3054a4065b40c32a2641682bc617b27f6f07359fec0665a644f72d81285dc16fc4478ad989fbff1c4b5b3984205ef4fd48ea509b424c58e940ef8d2df7411a52e3ac2bf8d58a029be87ca55034f428b9ce2a26fe6ffaf207db1ffd7d700d801fe90546e9b2e93205f6dfcb544aef8f30fabfcf41acb1fd06520c78c6254f621c52b4c2bcf4306f1779a56bbd5d636a71dfa6f4b938ab52a63450308caea170b25920ae59ea699d6711d052ec8327e0ea6ba6a82107f1c6251c55696a87f436c6d6f9a07feb3a0f1490221813d2183a73079d4c8e4faf902d2df301c353465d0bea7894790a3b641dcebf7507cd547954e490f569623b6e4597f1fc8237278f5c1651cb2aa4f0bd7cfd1a782d697be991da102b51c02ca53247d872415c89e204c5dd8a90f842497d937171192455397fe02c92f447d77348777fe37ca5d94df9f4087f72ebf8071fb73cf64bb3089d109543629933af287a67af68d6ebc95e898ec7e1c84ac7e6d2f6471c3035aceef3c35195b913a2d5e1e7b6933db4cc1724194cb4cd6ecb53cf1e674b06344588c45cbb96fee516f7890f8350e088b4fd93768445b995224f7cbdf62c1318091e48e2b048fb1b5e9a3c98ea5c5a9713f620da4e0b9604594e37213bff48ac93d58ac48fda2b63c7cb315b5f7de3369559ced64940e64958821aab81b1f0d6458366f8438b6c90e7125a4770d35196984f8dbb4528cab3770c9cb68e28d467514f2cec881a565b913be02c3816f016d41f92fc2dbe62f69b9303d07092d1467deed6b3597b53531823a2234db27dd587c006bead44837a5eab6a68637a03f261472978ae8d67bae47d66389aa34858977cfaebbf5c3d151af7a7f458917f31041c1bcee79f584b405e80b3aec39c35351e8bdcddddd29ef19dda91da5e029799e699fa935d6e1a3b5ecbd75bb50002ab5e84876b83c8059ce2cdacb27aec2b381b7a959f9808e44b2042f2254e9f76db9d2669fb480a66ba382c169f12ca76292d403ba65dab1dceeec0542730c30c94030dfaff7698e3ee6f9796ee062808bc8d6fa8e919861b05d946ac7257c22c9ad3f2334ded47c508c8e6d0535e6ed6c613aa5d9c5649545fbf1e2a45e5efda6193c61994d61606954c67dec98ea88ca7066a52c276bcab65a7b16ac3b857664282771ac5348817a544a98d9f49ad58d345bfe7ab2381287b58c2ff4ed50d863e7949de5a5e41a3948d955e0e9af04287c4c47fa064a2f9d296ebca67ef465387aa78f9f1719029bd87330bdfb97c8738fbae3ba4602bd79b525dafe2547b592ff79898449b23da481d637fa3642108039959aad7621e9c3dabff201091fad2022900eb8f78b412cfe8c434f7e9292c8ab52a9701444607a45ec5e406a8521acd36003e4cfebb046aa5f2f02bad598e962d528a8a43c3ed777874d5ea1128bb3d060009a2336c26a2f40fbf229da72d30d273f83898d27da342d0de07e7d047400d7a4e12138706faacb64e05c0b6036b30d08a9c591d0ccc30205b33d809aafb17b4d53120730f806e42e12dc8f8e4b90631fd1a311796c3abf837962ff99a91d114c8740d63e865e58a9b046eb08dbeb9206ffcd3730ad945baf9cc7a3027b71f189c900f72a4c9f881ea954aebb9ea3c34a7859b89430b948a0595d48418e4cf7866ef76bcde94e1f3c6d29076abeac389e5c0be275019c753a2f7641c54b184cb0169a755de44232d7d976090371de78852f0a846b4db3caa315918a27e532535be4f67b467b89a6a757919ec916522d570c3b8650e32f3ed6e5dfb22cee9fd974b9974c6573d23c1480970081942473eb2c9caa95214157f6ca1cf8df4a02e5808db7a66e532543b9c1cea7e41f56a74f6c1700594c51d5476ea2943d1acba22d71cd59d440cabb18ac46f819b3cff89a5f36e0a8c13b3e4964716c46c514b3a53447708ad40b3314c561c92584e2f7dbe36d4624be85e863a0d2b1cc8b74fd450683118c3d048912bd0ac239d19977bf18c2e9916118cf42263c0acffe7245785edf23759f7973bfe543c0d6a8c74cdf06b5063e2b0fe38495bcc8689b1d500ec800afc4e496973a37cb6be629182489c960b3f3ed8486c68b1e10b04c8394c793199b7984eb6252a3c43ba5907fceabb6a203fa72b0b9a24b005e56548c6d5637bc4020f489c092b0a5277ab18e245e5ec5f71f573099b805e5ab6a9673eecc39896607b6fbca30f1817d2289be9abebfb972df57fbe34c0dea33fb897f1a39c888bca1901084594d6d8ac44e2a4733551e0faa95ce78f1148c90541b1a577df9f7ad70693ac3f3d8c26b7ad90b10949888e01f4df4fbc2cfc354ab5cc2966e023082371bab0ff07e81e1f99d54d5284d9447c7fd5aaddeacb35d701f524251fe1f33284a34ecc167672f2d17394781b8d07e8dd3fd4f67287f31dc18f99b187ba7841e1814459a814e54f23f8eaf05addf44a195fd83744fd61bc1f9eee7ee5369d737545e5ff3fca0a354567c0ceb6d32933bec32736708eebd331382211b6c9d82ba3d1e019cd37af24f990f086ecad7c2e32b1ab589c4271fd352415bae7fdb76423baa0611f17c17005900c1515ffb80335320c6d862e91defb6fb2a14b064b6f00c039dd70525d34a236f356250b14c18cd584ef72b22c623ebd6c98162f22b3f600729c8015cb2bc04a8c652ead158db77aaec4effeb37e3a28068b42ffb056943d9e3dc43ae1ef3b55041566397695f1c07ca597a8e63c4f0f6d89e9255cc88ce416c82f4bc1497af197759d2c9111e9f849ef9de034ef8eadb8b00de08817f2a0f9cd0aaa1b5547272fafa05ff9fb256b38f29d44c1751182107bc4ff7be1c6a6c0a22509d6bbd89d9f8220c4f50e79b677410e9034fe60722bb1eed02579724fd472f7b2a7c1e92fbf3ce277383e478147f986021441895e719762295c48ff3728057a60cb029209b3c12599434a77cb48f0b335727e4748e5a5ed0e79efd5addada559ab518b14331af18fac93462f018381198f10fb1c115dd0464d6db6873270e784824912b15f316de252a2f5c1465e2342d4410c1d1d27e0ce0387ce9843bc384f70c30f370600af06c0100afee0a01c5f660f96a37835db7251703140b38d7fa861f719849db844049c43390019034c050d79e6dd66113d0d8a8d3f7ccfc338731b390c73089ac620f02bacab55d76a0b69f47876dcec293768044d09a72da91b124392fe33317c8a516efb4df1f4d450bb806f568a0cdf2e6c8e2005fb0c44f02556ac5d729138ca11ba81f327a669c8cd81902fddc23380d6422f1501de82b8b73f3fcd1727745b3b2a78f33f862cd459d0a4395c1804c4164a4b8cd1562b15754ecc0f37c532b26a7452121ad86ccdd3e5536d5948de9ff0033819d0ccc1e6fbb47b9b193161568cd27e8856daaa6ec93af7af438777dbde84a04619aebb394c3e30782b8c811b26a1e66e9f505786a1b73f6c5e112553217c026b0c3ee98c1123291c4b4654111fe550498a30a0ee93393c09fbc2ecbe99bac2079693deb1604a2adcb7c7d718ce2f89ecfb39183e43978da632141507ebfbed2a15fb58218883f13d0aed2ff188872abcd89e5ef38edf5d66f624d102427ad704c23f3f25d863de4cf9c70a81a4c1a82800f1cef28a2b39ff89f199de4d0fd0edba5bb8e156554cf873a4f14d75726f43b6c2cf44abbf13b0e58912f8df0e448642c575e9c37ada0ad05f9aafdf220f72848c69327acf8dc489aeed77061f28771c0d4e2f1373f64c081a9ea889b66f19d7b4d1fed3cfb7a301750b8e0c77d78cfd72540794627d5cc102b5748fa67ab64c510a26366e58f2908fbbc3943d504437f731345ba838fe00120810dab4bf5b6581c76eb3642a886803ad8f3a9c6039895848b04c831c4edb516977ff554fda397f9f0a0b908dc5483f5258b41b8395340c7ddb41e9ec3805a2175f16b5f697e24473599a33699bf1cf8438ebb23d9413d47eee76024cf2ae5656621fa98960d4561827671115881232fbacc45655bb33042a00422c3ce72ec554b2bbdcf986758ac59c44067fe90d8c5f3bf283025ae6865ed4b11f8756706efac6923b928f9e8f6b8fc57a79ebe3b8331f6d3a6ec9508c9dbb073c962e5025c3cbd06babf3c6b5d00aa26e81c99bfe1714c807dd7e72a955b3f3865a08a8fd1f967b97c856b3790d09f513e96c00f1b1debe8a0c596436356dadb26b84f4c7c8a7e45b98e7a37a608c718df3c9bcaed266a2836ffc272cd61e6b5c56bf577932a31f27aa21299c5c547dea19c25a1bf3f0777fff8663498d17c098f248dda7a7bb634b42bd5ea332b4997e3bc225c785259e4ad21d96e3ed9a7970342e9f4b04538fe2007650b486e8c5f3f27805e708bf52186e42f0df9f7b6da1e8c550388192182c1fad455322f8beb14488f721c70d453f6341b803ed076eb2dfbb1a934e8ba4dc940ccb42b4315584dc443e9f88bd3e9e864e5bf7fb42566a134d30ff794bba2eadf2471b2fd104c6fe636bc4ce833cadd464425a9c358d10f4d8cd414cf03df539b57259a713dc345cdb2ea60b3e877ad1478c3cc32282e4ef2f1b3463be47e0db08ace941359595853000625902bfaa4102c65fc9f88bc8b2a4d3e4c56a33293d6a094cab2308d101068a78f1b4eca3f9a8d0516e0f76dda1efbe2489155eb7a54465ad48b83ee8bd38bf8bb21f496a868aac603775f6f2697988721d0a135d65e9c4e5a9222ec3f8c2d8f38efef92433552478aafe02739ba9ce697e4a6f1950fa3bd30034ef3863eb5c5cfe32517a6414c740286e491121d2d359e969b76932be76534bbe43a75d0f32012f0a178392d6adffb6981c749c1532a2d6ec35aa1637b2c7f270e92b1c9ba03afb991eec0ba6c2b31103e18c970464854f2c82aa5f24fc80875db38f8508ec4049b7e64bf904f46ed1defff536975b892d30419ec8a4948c19262171c0f42ff086dae4ae4727322fb9430c66532fbb7b0456670abd0e5f1ade3e63b1667cfdd9ef1fb370bb49f927c30029d82966264e5a4f8eab0be9b94be97f811389f7d3cc1d832cd91640efadfec9a616d2c1364b7c4eb7911641895ae7c3cc33609c5a2bf4542fe6638b41476038b499f52b5c91273d125c60aab5b3f66ebcaa3b48f7ca660c939e2ef4c8af196caa5e71f39a0d97fa38630fb8a422b7579c26bc5b8be3bb2bdc49a20db2b2c5e421293424dcc77c05ae890bf8a9859493c5698e8ab3b8f42e2b46a34a8d15f9906489880b51bae425b6456e68d0f8ecb02126ffda7b994b1b46bbf0caf665ca34477f329ca2f4c669234de47449b00d767e8647a70385b25d7b1839f644f3df0d6f6d511a5a031fe5f204765dda2a6db4fa9752af9970405edbd3993e29d3a2ea29dfd0f1a1f633e684bad7fc7b6c59b34ce6966023305a47dc6022847ad6c8b78921a1701ddda3ddea547ee1bd7c07fc28b8d4aca264fe00620c25897b9faa0055e6db1d4d28622ea03d79d8ef37dcd2469211b2f6d0cc31232b3423d616368b4ea3c315a3ed2b30018358d47ba50cd7f352bae173bf384e973dc3f0be957aa72a887e738f2b708b79b60d53036de2a5728c24b962b70e860e6525f26d57e31825cacb74169265e3cc93b077f8c0e73248e6cb17551749a2d203c0c0deb7e0ceed57c42bbf29a7d08faedf0dd674b34713645ee3b0d17183eadb674186374644798b9582dbfb24a9fb29d5079b5d5c3f70cb430d1884cfc544b0277e37115a7b674dc8ab6cb77802f72f73dc75f3761813e40a732aa783157c52b4956e0ede91cea533e97fafcbf4d8c471bccc1281a37f434c6f498ffd98e9fe0a661c87bd80069693ce4fa1db3de4f37551a1b86b36051d1360879f5e3aed8e282b8b47e205510d33e64e5674af1956b7026610189571c953a65e7dac9d6dc42605189efa1ad60ffd4e4b888173bdc239dfc6bb7c85d499f0dd28bc944041b85badcc8b2562dee39bc125a61f0a8da05fc8fdd8546d4d11b1960f4a07378a0ec4d9e47414640b79c8cb3678236cc84bc047bcf7f0bff0856340f8c5e0c34cfdd4af1d591582f43efd997458ae2c126e5586c80e3838fb77420802e1cb4ee89cd86316ad96ab42ca9445755f498705150e2793d7d347daba5f87301cf8ffba37f34bc8fec0fa3908e540b5d2f0bbef67b21719d06b757395b645921df737ddcac9bfd59e768769152c3067dae052dbc6b813252c251245b5c10748e25b44692415acc709b2075dedd4d3cc965744dc73d23a92efaabeaea02c1e684cdbb1b90dcb797d7217f15054329482522f136b4e274e6a7a7aa562f34fc3d9bf70add9e9788e329a452d8ba590a7cac8f0bf41b95dfd9cc40f0425c826ef920bb174758aac6206f6b715ab25e21be97620f253ff66b55787507cd19cf855a37a4141752a4307a6d406fac1b66330ee6c9faf1dd3565b5876efd952bbab80e7ba9f2681a7d468b0565e41b7e7d0902aece5f89480b360b5c2c6e75c1a0a8700698c3a7868b42b2fbd9b3426cc756b27d474f70b8e5ef702fd63dcd29eb6d383b9cbd3e7ae7c1efdd3d4288dd411cb6b7204d1e527a68aafbbcfe1091cba665207f6ee120eb2957647a03d576f4e65298fd73a764eac3a4f6e3e762a3209eb32b2d485ffa719e6dbe9d3938b70f130d437d6ffc6efe7d9fb4395f44f4586beaeb4e69834b1334cc165deb55fde397f0d7334bc27c25e14a18a95c916785a304a91f9c63c69b141fdf0a3e3b98a96e9dd4a359b73ab91c70698fef1c9b5501f20d55e34c4260ae2d2e07f4d7b7d3f5f13c92d6104988ed1013e54c06032a70722fbb09fa093c02f8ff4194ad42032e4d32b029c56a6332c0eb703feb717cc9f38ee8cb4ec5cf74471fb6062f3a419b8e73a289bb404419fb9920aebb4d76a5c6fef1a3d3dae40e97dd055fe1c7c72dcdbde1b2612e1e3e810a9961a89d2cedd10e0dc25951c5979d35b07d10852e73d80cd48acbe586836d851c0814457841682ec603f513dfcc064596d43c140deaf13c5d5520309c32db12d6485f35747c386325bbd8839cf3c0a47e93a3efa56902c8daacdfeae29650b27f3173538e8d6138bf66b295d56b9c1baad277cbcd726966efe22b6afeeb4542edd72b93df70c7cd404e584a06ab82f8af275faf4013f60a0c12e27f322939500226725b018d9a341907738968df782f882190f92adb3e1f3500c2fb7952a3152b5523757d83f54be1c6e2e1c88488e6152a5d66061e65e646d06fb23967171828de5fef5013372d8979a920a11a13bc30e1eac1e363e09250b5d5511d012b8f4221d01f7d5c96aaa54b5cb3b7d30752736801df7cd6ba74cf0213713ca910524f26c416af97fa478d48b86fe2488521b1444ff43108c2de6c05053aa01dd24a4a02a46006aaad6b40cf5fd16d0c24252f7db37d072dff997db560a150818478002e4aacac9114882b00f0036a6c72c40cf2369aba18179be60f41e6f69a132f14988f8f8f1c52f733b9569deb59ea16bb5a874de5e38feebeea02ec2b9a0b15dc4d66d24f7f4f2ba84d31beac2fa8e2b320b437ebf394cba8129ab2c540741fba53ba8bded03633bc599f695b6c9699852d48929071b164c68b9b98fa257cbcdd5d4f6c0855c96bf3b725e0df8ac33ae137b603a6e670f559c7af644b1fc3cbf7c0a70dc608f6a8cf8960ca889e2e3333ec78bc13509ce457794d15b5de911d531b1de55f78a8ef671f12467afdf8fb092e1c71ffd4b28b18003eed9298d1c23fa885dc37dc0a07fb8934b4fcab801b2f70c9c41b868b63ad3d36f9c3e59bb445dd51ca9883eed866c1f927e99434ebc0c38a8c319f3ed0f904e0574ed7e5d7da5f2897eb32208f36da78ef7e66a7fd632fa51811f455f07c4044c39c27cb388dcb765c3a32864be35d82c1e1541f1d2536d47ad8cb9b332234b8498e3faeeffeacdccaaed57f41222b919cff882f4679607da3e1fa5511ec2c9ef2785e7883ef2fb6eec0d938eaabad5c82e62ce827c313bbf184fcde28632357455aba62cd189fdbb2ae70806b4e0b2782cdf82d52ceb0abbf347997943630c7548ea61c3fa61a466b66f0bc173d99ff7c84c3ded92dcaa7da448efc3bd05aa4bf7d2fae66da3fa1e1b8ca7bef2d12b2ada1e7f4a5eaf436cebf20674dbe1216628cedaa87e8b52ebd3e3b4d8896cac74fd7752162e0279195ee509ebf4667b455350871010b6aa7eae2251a0da47876aa61f7d0aafc8fce678f615b898ddd2ea10312eb86757e227dc08c98470a781a79148935f27ebb960f589a428074fcc8d7e383563da4c4328495dab1cffd4cd89f0639b787be6af031e1485fc50c54e4846a15c13dbdb18862adc2de5b214ae81f25fc62518eb3eddd8564f7d87cedaa398bcab89564651e8512d75c18fef0ab4f1aa5c911a6d1e7019d8448c4173ae2f7b8acb5b0749fd29478d47f2d2c8df07607f738189f6518a816d8eda87fbcdc78480a2a925a19e83a8acae8f598b83391482614ec73276b8072dafe79be0d24a4ea1ec1ae8f390fec9c0c28712847cb3f5f5557881a8f63fd358d872bb1e5999ec34fa973ff501f594cf676614f3b7e80c61d3c483ddedc44da51a544cdd219148cbadb41364f7b3b43c84674a6831244d2aa693e30d4ab531fc9d1a605d120249c75b20efa1e14cb9d920f6f736a81debf144c21bd768163c1f7aaa49d34803cfdcce8eb7831a56007daf30538e4dae535332c90e1e21f135498a607265babc0ea547a3178a4cd96b3ed014bcfe1573ba33b193460f33cc9a34f3d4d5203fa4138b3be762326009db536b4fd0653b0f7c514ba545511a8145029a7c4f3be9809510c036daf825a22ba84446e6a8085b1ce00ce62a3b02f80982de87ea1712914c56d2eb2b7529011b2225f7c7475321da59114e883738a5e2c6c0423a93a90fb9b5a243807781e2e38bdc9d826323b6e96a2161c330456e238c61f4993b360146987a40cc31b35292e71c3a95d297c2466af760ff0dcc23a9868a756f5072c657fd61c1697c61e779833e78a1939c22492f0500e776631cd37a0f319e2fe4e29b9b79df0aa02c770667e8cc8aee77c16f5b615c93038bc4b19981ad18c85ba7e9595d23ee68ed32f244327e326e1e16f38ddbea63288d2a435e796aac25b16e34013600a1d33cf058a45797bfa7c522017808df74b50d9479d32737af04f5d7490080166c71a200e358ca9eeeca290e2dabd870802adafab3ccbb628aadd88365fbf8a6bb3d01fecba87194c8f3538b2a5be28f9e8ba92d337917d3237bed9a73c740fdd36662a4920dfc8af1539dc67b7411c35a88b530dedeed520d1d8bef5d47a05a214e4f7bc7bf7be728dbd6705c58299c1f4cada5327902c9fa5eae7a5aec9cefb6f61e6f4217bb4dbcaec05edf8ce1fbf9de8a93baa2fe0eac7d95c15b053d0c8ada0cefc83360f67f1da20f370849de7c08ef54309f19bb95fb8b151ca877667ec9c29ac11922dd51d0feedb7db7e7bb35f51206b7fb58052b0d184095caa3f885bfa7d11b9ae1912416d372e342ab74c4af9093e7301211b34b1a2f19a826255cf307c0942399115112ca36b5c6f8217a424f1a1c9dd1f6ddaa17b2ed88768b8c5e79585f794e9dd1986e5cb0dc08982fe471ff3bc2d5d90641469a9c8666607f894a9c8ccb8197b084827506234ac9785d604f7a2696c16269256878f60b5ff2c987115e26a2fec8d4caa6cda54d6b3f68bbd8bd05b63f53824f51027a397e002b2d9af20286f0c9a967958c0ab2fd9868100bc0175b8637fef31fadfa403ad1d8da27849b3e284d0d2d68277aecc3e0a344418f782e6e3fa98d5c248542428db0910836e8a4aaf948cdf1e864ea58000592472897e0d2f87af64e912d65de8b014996eb1ede065938fde2af5cb90378f47d46b00c83b1e0fa9ab8bbbf32d94662b52c130d77c36df30f02a20502d44e26782a6e2d2f64eb8c1dd0ab7d99ec732f7be6ad5870a0ae6c888556f36ed59540b22d08c6bbdf51ddc97d88b225ae5a4107ae3938d8b17354723f22481c6c0a44439828914e9491eb6b1e27d0db7235e0d77470a1ae37d4ec1604ab81686dcf8a436512a41270b95ebf116d994be1add04e550194c6f23b5482e7feb1310c832bf1f69184dba9d361fc6d8cf45d33deca4a4c6d411dabdeec2dc79b7575178876e6ebe4ce384c8f5a73a21a31e866a1bc3886e9ac7a3ac772339b0f2283a8975ddc6c801b373417cabc908955d5ede0e04118d223ba15340ffa596cf8072300bacc1dbd0c513f1e8b44a5fa6fc02a195bdd19fc44ecbcaed10071fd53eb8778c1b9f5f5e5cddee9e7a9391c760f7f00b0a04e73273e90208860b1cbdb87f5dc41c2f218930ee148b6d99bdd76095a00b55e4e26bf13210e6d51345bd1b8b99fc5477e36fcc254b65d0781a6c905e415c3e17801826f0fe840d2ed1b332aa6b3ee8fc10b7dcc3f3a5c40299a8c40deaf25d7f3906bf6b9ddf794a5d93aa2e76a9ba2f4c84b9e2b2a67e7af59ff99c6188363a311c5887fa875a5a422e4bf9e9855fcac838b4e696c3de41af981fa3427d39873cb069fa1f18276651c80f5181ae49e8b415994b0226cb6c71a902fd17a36b804fdd10a69adb06bb1dc1a3fda75f3635b9ccf106b561f667709537737a55fb0eb921e585766fd454370db2e190afd29872f61a1a98910340659148ff73e90467071f2c268f8c02a429918aff6956bca1a1207630f4e0125200c23e13b2855bd0f0e27d812daccd29ba007de2a0aa99edba53a6f84c00f3727d2a42bf241d667b4dcfe12d78a3ee36dc462b1e33d445f1c88c9f6ac7260de6ac97658ce7ac17dd039f90f9e308f0a51dd0fc45c9b4298216be7226729beb6555ada131c5daebb1ba5ea2f2aae302d46dd5ec02334c74cfe85a148e3a8bbf7ce2d85a2a33458aab41495c43ac5b7dfc8b0dd8871719dc1898bcee21faefbaae4498a39039296f11f50618087c5c666c95ef3ee3ff7b4276f5dcc7e0213c0aad45235982bab129da31c054f7031744826338593d18d18e15c678ec8fd33c0378038f176e6271d364e9d6905ae71bdb3bd48c377fc9216068fd429ca441f3b1c728ebba9e2bbefe60b57d08732fc9dd8eabec3820240e6a8bbe7636d689c2fc65aa212243a93c2aad11903652445f47b97d6e5b1fca4b4a710e8610d1e5a968030611d45b2b7a5683a1c2a15391609817d1a0740c756677c145b486011986289dbfc7e8fc215990738707a0abcf33f73d5080a2a6a979b0b75c56667148d52e89f78abcfc0838c3185e7d0f048504828dba07af0fe78f301912658e9210cb3fc4431a1f32076e6fa5cf0f9e21a40fd852add06c48faa5531ca150ed9a1cdd53ddfb0a68a1a84b01955d8790ac8b2e2a1276f8575127aa29b80c93c78f5021aa793e56222110f258bf04d728435c1856ead2a9549edefd7eb844af1085c1c8a63275a3ba6ce4c4b24e7f71207dadc8f59f622a125a5758a65858a3ba275fdf816670cc61123fd162512842cb448bf33f0ef243ecc245140173e553eb15fbc06ca72255de33986acd3f1b23a6f2c243c7c291c0019496c834cb3a1d4eddb96e6d45bf62c72a99298753ec608ad45e9db6a571ca28ab43e1279b0a8e9d7a5791e2ca01a4b9ac052ab10641ce5309b0cbbf0a492bb6dee8a3b752e7570437bd2c2ac89a295a9802232ac2ebc8ec2807412fc68aa22186388a41102a61b1e2d12e97876612c0b204ab2ed8afcf27b79bd1647204ee98dd076527ffdc0a5b34395f47b1c6202a3549f60247e16e648fd725471fe1993fd94d691312185c6ce9998a00bf8c0b9395c3495dd4e59adaa0344dc3bbeeba9e1c43f20864f4274afe47443eea7baa327f8691a8f21814e0e235d62a6e1bc90e413a57956a409a8992ccc33d4d6f4277eb13bbd177874b615c5b5bef90783205f3ff02e4770a99ae8e449f72260aa3a8ec5c85b198e55196ff8fbfe827d35255d8abf4589e701064fd4bb981127c797f7fe6c8388e872f94d5175636a26f330cc12482b1138429800a02c4a6c262e3c6c8a62eb725054b716f8fc425587219593c4d3cce994ed1564d2d69dfd847cd7a98afa3e44ba33cd331ec32f08dd5b899a5fa25beea58f24e72aa7f9182afdc5ed18c33455da84c93c4dca1f3c4e8e069ab20efff5b77196f06dfe69c3a4ec93dc61b2574f053f20065fcf99b9402ea9ab9185779b520dbcae40dfdb5c022ad4ac4b9efa23f8e137116691f4d2b4ea09502673c1e4ee9452edfc1a9e2a18e083e8508595183ba51257b81cfddd3cc43f0e57e82f6e3bdcfec2635d7c4246b0eff2dfe54c7d73eb0f8526ee0499c0236525d0285890468b76efa8b48e2e059fca1acfa73938778bea890cc4cd853fb6586cee71c52dc9aa967150f7bd44e43039f440900e2e4043538c6fc8bb5c88e36ad206e6596ee9497c48c8c3b1d103c9a8af8f7af86f6454512456a0cab6f5c130dcf91dd0dbdf26f8ea84053b5b45f5228ccb41e87532f536fe69eab1e5769e5ea553ab9abc0ef6012110d128dfe8e756fb3c5dea860557b8104a5a59f68ac45307153aaff1ce2db9cf8a802b4394bcc64e63cb80f2d163e53030de5f6f994186582599fccabfa6533c651db37dfa7756af558d1fe08b3bd186b0e587027380da6c4b691a9d39caf1c538fa1c821fe8c808689daf29dd9ab7d5b3c72b5893978e1745d73d4c8449168e9807f03e3ad42b89206757fb7cb5fd7fd1182e95769286e527843ad01882afb9838a987eee38a9558f77996bd65efcb54f1027d5c734246fada0c185897ad643c07048943b6281aafa2e46e58067a665da22d6674396caf2411006dfd57690c18b283760f542753327f0e9b7553c72b280f9c19dac7e30d13cdbf5e148d0f8bfafde2a0d24702f61ebe9b373654a3a487e65a04b03e3fd06ceea359f3ae63811e57486d528fd0b0b28fe8d84c6c009b20a2940e7ee1c0bfb98472121941a8d79984a6ff4cf83abd67a8c82fc42347797030900fd512d8575ddc7c463a4784304315d309415b0cf85dfa00f7f38f22321e4670af90a6920462509808793d1c3b00b50e4569918a49cc29f9d7cbbacf9f093649d99a8d8a1ac5ffb63fc95edfe372461d536a6dffffab86f0a6d22c7e53e312bb3a6864c8a6c41f8090f5c6632a5e29290012647365a00ff2529d85b38b61070833dc9c99b2fbde872074ebfda9027bf22ad73fd4fa12701922c135375452f246104f57b1f7a82104970d4767d362413c4eab338c570bab950d0c523b87178010448c3ac9b776711bb99203f9fcaf6fd12ae7d6efebab1ffc722843c357bfb865ef2c2b01ee4c59b1aa206fe203ad39ba4d34d50fafc8de42848e59b8c00db053b944a572a7221d3e3af95790ceb7af09d4a722068372a9abf173771e13919f73be39202d9d0018549b1bbb1844e71374db95c12172e6edf96ec47bafc36973804555606c2b373c4364143285d24e34b7da1d1f6ed94c518346f8c994a77c2f872ea89c72daa315622fdc0474d0f65b2daedc377d0018ba4464d6ed0dcbcb3ca4e37a51cb218e349bd37456fe4bbaa8d4114949e3b292feb9ee7008800ab95b89a1f710c348b61e96cd47605caedfbae5b3f9075f2d010fd40c8566cc59007da3464d820d13f52e88dad1eef20d93982752f75e444d117a89404beaa9ea3aae38ec5ab32e7a2247b814e0f0e28d9868d850d338b29dcb6482fa965a6bb643ab268fc4c2bb8350cfeee833a93851a9f7e03e40e053e26844486ec7a9947887949c59ff059d413493af88b60437a14c00941f030d28c42b063bdee92b35d3093e58daea68177667bcde44fbef316679e4e3704c4bf991f1e0880c100aa2836cfe03067b276f507194300fd710016c3be4a671600e7ec86fea02020ab6e10d0277e0137454190effb080b2cc7fd04b8e8466f950d9d13f92ac265fc1291dccc15bfc00826517306216dcb48d5df6875aec1472119c4d1102c0b41e5c6ec9072f1938267ca64b4a8150c3b2d9f98a19effe2828285f06751cd3e15ab72fbd74eb854753b60e0451470b62aef78b3f4e5344a97630399cca26585158465665717afb5fd0d7fc5aab3734e522710baf06fed96fe2de72a0c274f0a7a3e08ae12443567cdbbcc9ad120464074ae0bd21edbdccdccd7cf814ffd332a15950565ec6c0f5d25a80a2e5838be30bab903b99c838d1b1b92c19db30ab29418f6dca47663af8f8c63dfa6cf566b1570f9fd98f305d548536b81ce6aa97e7df75262101923e563cd9dfa38eda7fb205f0046b73fdf802583ef21e6b00a092b131f6ff69b079cbbbc8ab877ad3a80385088aca5c530e163fa16dc7e55fe6db31baf6d003da78c6e109229be8c9ea0e69868745635e78f5a9d6a6ae5670e6da3fdb7778236e9528274f1ac51099d6c7c88e55b0fdf8751c7f3ea115b8890fb55ebb5f23e796fe235994edc5350ae16ade39ca99fe91335543dc564b0ea4fda83ccf1031d7e052f2482db6de91b37a904e0da1dcdcb371dcf8244db89de0f6289d056f7c55dab3e6bc3e088bb0c8293e76b2131030f2659dbb21998ca158070e5141317278c6e860b8ef54926ae4c0e44464dabfd206e3884e5c5a8f01eaca01361dde8c0bdb6c160271c9486f0460dee8782f0e230b96bc2e62b17b78be8a6815188563542985f49e9b089b132422e5e44517a9d7d15da37a00647ac9d41581c9291c89a1e6ac3d0b3d65107f51494a2393e7886e49f534a4182893847f1f26e18cb2f5c1070ac7d83e8329ededa86f441aef885faa631f6e7e87061143170708be050fb4f058f395bebcf3cd7613622221ef04a0f7217d27ced1b7030201e31d45e4676c46a72de3917a8e12811497e0f72ceff43a43c244ff377c5462fdb710cbce04f1be3b988f3aa8eb5c2336f63321516586378db5fc19ed2a00e35e1314b264eb1edcd5dd6467cb53d33cdc4fc07f98ed05dbd0d45f66f7abc19f6180203d00c8fac5d5ce920c7a2c203780f83c7eac6d671951a07507e77a021249521a26985225761fdb9c1eba168aa978453cb1de62b6a7818b01bf8d48571a037b6db5bd4597fe8ee29ec43b611ba0d9b80cd6d6caaffc2ff341aa4b6a33ba9226f1e0e6c2ea4c71b27fcc83ecb62a21a31309f20a54029d347dde85d10fbb86de214f0f2446e67cf8dd7b59af10e4c228c3524b11efe9a227c9cb727a78739255b829b3cb1593020ae8242355227df79b0864c7caf5455d1ac1adbd4721100df7cb01c44642c8d1d4ab67ef31c91462134b6a5bde422baf992cc1ecd20d2658c0740787bc41f750ba8c2346b4039cbf2990d64c8241b54d84b6beea9bde6e7f6579b2aae51cbe73e12bf7341d8463b6d4605191b3580b8b54d03ea2e1258188f8e962428ab7999a1b27a069b857839328ef79972b834d9435bcd20350d1491796cc32342691f3b4441f9a04586cf7da0869caf73241bf35f8c5b3069b16147d3f321fdccc5b1ab54a8258f8e5864311f34e27eec2cfca255a5d22f07306f69659fdc47911fb000b584cea36b450f9ee1add2ad3ae5710b275eff05fb78336f3a29049d6b2e45b6e006b39eeebd808059098138730c9d5422fd1264402e3f83096b57c2e3ed1f43ab7629cd3f442645a3589f8cb8f74a750d37f3d03a78feef3a2e9964516abbbfb7b5db80b8fdb944faed02296cc414e38f95219c723e4e644fcef8f071dd2875b3c234b3d4ded83a4072070d4eb3c5801a04c710299badc720227705e8907c1f6ac331200c2f453ae5b9281b7ed30576be91356257cb2815f8a86b4bbf315fed42c67d54cf0d6e5b13cd52384b3378dcf6618d4e5cf0257d5ee17c37679577aaa0edbbded7009aca2c4aba2b46defb7d267621a4d6a4b6040e3eebd480f426c15fe6d12b8aff9a8e79d1335081e18bab0df1acf2a9362ec4ef2f339fe97e2c4f5445f059f032b98c72713f2a2173660ca3a5bdb2ebd6cfbc45ba6c35578aa86608585f89f215a56fad193add7af1450a7ff8500d5c09fad24f3fa611f8ed3ccfe415af00fac4fdff900b8d7d1d46534f6f6173acf1a0ae9bec4e515ac3aa57eba3e96f5d9ebfc172747733e323ba2ad0df642c3470b3f58af57cb42241d9f262c1ce766fbc3a13946b00c9608942d0235bac075e8e9601794fa05c7fc5f11e9cdca21c529e40b8e891c547b0025f3ace8b8888b4225dc941e06ebf2c8247519d719573a855e26c2b437c0b4b65d0cbea022f31b270253d923bd56e4b8b83962c1ac238154e745eab7251159c2d5ea97cada56d493d7ffdcd6801fb810d16c985440f31c767bac8af187ef0d44593b9928ca387ceff7c9688be1372e8aa2352230eec9d65e6bb6c8b2f2c7033a7b654fee1a19712bd9374cc3fdc1681bc4878211f0c72941fc3a5558ecec6b3aa18fb7c1858cb9e3d673e7b835ecc1716cfa898ee8beb7e80dd8cb1efd0e7f2d4642a88e791c11cafeb1a52c0a358b1f92d0fb62e77964548be927e2e783f0df6e0c2a88031d983cc20ecf0e742b04c7c168090e1aabde658ceade64c00522f7cc75d83830997fa037558d9824f49ba0f941ebd0a396bd14bf25a8f5347979944865354aa113092090a25b686a027a11015a49bc622c7ed3661a2a368e33e9f0e963b857838a786db25ec2dffc2a0cf6dd0b36f4d6fc159f70d82b147d40ed8f0ea8868c465460cea07c0462a5856e1f4cf28798d7d8fae4955332cdeea2c3a4ca58d633ba218ea1d5cbdb7812f04e0063953ed0ed41c803b1a945b0b9c9b21ea5c0d3dc9e469080eaaaf7a0ddab0fb03c52ffd47320ea458eb8cde635523730b3a83e40d5161d80af4df83c3bc07b01cf438bf327334ba8b35c44dee634d36d05a7f72b3f0ffcf64ff8adccfca8d5baaa27301f359ff692d73d33a1f9de0293a15092628b97219185979cd0a0dfe771728d601fa08d9c92544bec878663c6e8b2db042c6c54d1f2bcd5eeecb705df060af229b95d9d51b21274a978ce353cf686720b0607af44f2b3675b4bfe05d8ebd027eaeb627a1a2df842f806d45cba03f704f45d78f55cb6fa461242851c598921d27387bbaf7a7ca9b58714c89ac4c5c6e6fc4dd5ee2434298303abd78bc88bc10805652dcc0a266807a65f73fe82e20a3e05e584385845037c39e3f6ce2dff0d5cf13599fe2a5af94cac9942bb0aa1e4c2377819fe886336b13f0d13ca34b994d16183de1d143fd5296b518ab03cc055cc40c22724d64b71d3c1bdef485399f20f6bc06894d068a30191bd9b510d24912435cb02504c4430fe3899e381be3d7a84849d837e685ead26cbeb519281fe6f92d5f9a27c7a5df363ae3655eea09ca3588a8c8175c99ff9bdc6fa58935063ffbe99cf78b551a91f2d8f4766ea4c96c214f134bec8b2b86d88f2abfb75712275ec3fa8121ced190c5c391160aefeb79d37ec16dc7711560879f3b3d311815c5f7c65ceadc7c8d289e4017a6610c661bec5d032a24815eb0024a35ab20f92ac2b12b778ff8f4811f8225ef3dbe36119004afc2f4282923af444dd811cb39c8a27cf6a3416f515733a69b92fce075cf7bf341739e5c7ee21522cc52e875e393fdd9d9360002ce3bc501789d66744f2b135dbf82a4843a6613b7cd48b34cbdf8da4264e41613715beb1a2490958439481f4a39a7c18bb87a42cb308efe9a215e937e1dad4d0a89031fdb5ed8522a72b7cdd41bb8ec0e848ea3ea732efba94beaa05b1eba057ed1db680435eb3f8fcb43346e6fae178d21aed5f9687def8d1f81acf4da2a1a07d65d98921a6f6d784ecb9a806a551f38159363500dad8bc525e6ef90a59acdbd84ad8495943b4227160254e882b36c41592575256c80970cb6bcf1570d201d692c2dd06e5b63bb6ae539c88d93e83d6e8363eed2bdada2217b131f0a7fb8858fe022e058815434c4370bac87a19d817a20435bf8a72405492d3dfa6a4b74e97042131a6adee257c5831e29fb2b4b0bba04850f08f006cf92b1558ac26cf512ee4c68b6546edcf997a48c564a797319597fc8a33ed86961d581bd081157eb691c94568f3611d0eba70848231ec46d50743c9e36d9f5ca17c5da8916284676890cf906aa159e6aec0af7a6d10f576069b8f117e10c082f0505b2da11e4047ac7f49b149dde596dba9d46e28199e88525403fe8da66a3152105ec74915226bfeb944f8bc9fbf88e247cfb6ab00e0ab2c85bcd997c2a762f9f27fd1f0f42354b4262c44684ad3462e044146e81cb418fa869b16a16da41f6c20ac31aa6e785abe67502d17e0ce14a903bb6423ddc6ad84b15e0c86c73e22b5d8743060174d1227f50fbcd9804ac5bdfd1c2c86eea4438c35a2788c412629a31252a64c778503ed9331cc17fb47d2c90b3f4ddf0a01b2cc14c8c2347cff49305ee4d1174089ddf1ca267090f741f52e95c798e85b424d6b7ae1fe6b5fc19e2488dadd0c19f9dbee2d08a2ef0d381bc12fc5b0ed4dfec47b8b3c5b341b31e35176808f9d71f6c09f8a2284716e01cbba191747ac3f6f6ef0033d7e5fae3fb4e640a54059d119691772052ba61faec527e6169081386403d8f71ec9be22f29a9c0cba48d136ed133a65c194682421b58346db7274c67e703fbf0b915eb965a811d46fd331baf2f59719cdac765936e29b8c3144b0794538a1efc72d227f538b63b1a741ba93f8b45d4fb14a66f374033ffd327b61fa847ea25146c2f2e439e89aad7d092f6cfdf1926718850e937611f2eccd6c2aa4cbc80f06ca3fe86d6ba39b45896989196caf4bb4b377c937f8a6f6b9c3ec059360eeb6f868286d39897c9c5bc3dd14e20740526a43654be719dbd130d200d5124bd46e36072e07857e27a62f56726cdc6b2ec3be25eef0d22362e8eb913b35a6cf54ecac17b3f9eaf72978e93532b19b79179fe2016dce4ae9a68eca609439fd6ec3f00156561ac14436e3d2d109a9e75f27d237831e5691db6de40bafdbd86556c68f63bce8d5f2a63b05d8e8533141a77c695a56a1cb55e585d6405558249b318350c8eff315152c68364acca0c19f0bf0f2d1f5eba37f911d2decddbef8d6c759abdcad8956cef2516c32af4802bda8f6f9c16487cb789bd864376f2b8cfe9ccfde55d15deb1991817a1f7d63163b0cb2c313bba21be01635c80e920ec72eaa3416fb7e7a22ad585f9567b48071549227beb0e02ded14542df120fc6858f18387764d8d4d054be621285eb5a1fe31de57e719081ac32fda4ac4f3a753266a524637643d2fe0bbddd124180c1bc9e52f1f0ceba53b3a3a2d9f9969093b1d0425740fe8b1740b7af37cea71aef33d4f1d0ecfd202071b6a3053d38f67df77fb31db6c9dd15f40b60dd9114052f28cc221c07c943ce9349b6af62c6f59cf4097faf3f2d8e3b3ba462d58ec7eaaebde09efa576bc64a3c403048c5f9f6008f29b6ae1175a878b71dc86ee28a7161c4d4511e13a2d222a72c5733230c5caae29ea8c026068419712a99653cbdc4b634342574cf4c3b237a3ee3033b3773ab36f3e0124ffdc6cd24180d569ed6e3f127336edb5d9afa0ab851dcb067014e05f0f5d084918f61531d18006fe32e1bb961ed1edd3b714e008d4ce2c5a80fd4d47433af267183b4d0e42694a6189d6caad6f744aaa5fc6f22ab22d968025eff9043f8d926c4e52963ab401924ba5f7599850d440db8cf3058163ec0c7028ff447e4b5da074874860ba3dec4b480bd6c67fa2e7ea3b3b0d619b4476f3e22546a4e96aa849e6a45b731d2f696f21a271bc1dc8b76ecf1caa3013907b5de18aea25838450727b5f6e65dfd707ec4f975e5ba4cf9c358dc4acc2a343068192879a59a95e5c550836c27e499de5e38744306f61f5f6ccbd3c05a4363e9139c1b490d1c055a065fed1289a48c6cdb4e4734d5be6d14a5af72ff69294b99be406c7522a0d9e5b3ed55f4f07ded273c8b39905addcd6bafc7f513e2a01fe39007cc56636b4f9ea7059fe590ba58d1a5953ac72a0f566e08702b3a3156316b145bc49a96bc13d95d25e37338c50164cfe6fb30cf90be23ccb4f2a6f6c442b632bd99480e563711dcce57cff38b6296d91b9c5e6580550dfe010a0ade070a7f72d0a074f4e8d9101823d14ad5b869307faf61c112e4cb45e0702070388939d8ae4365f052946190256942c741616a4c93b8b12ea9bfaee6d2e42b599a17eaea26bf427a5fbe5ef4390f1ed32125e62f02a829fe578a924f8e56948b8c92bec94c4a79e87e3f566bebff617e6e15f1229f3554523cd634b360c67661af6b40653397604d2a2742c9d04d0e88f5ca9eaaccf5c4f1234c1f2863598bc02b7b95c0e321ac706eddf57180edace8c488361692c00a27be7368a527bc560a64e7e268ff2ef54f90c17c8cb72f57c9df9901396ae26074c60d35044d27919647934bf4fe0f4237108d7e8ecda084dce4a69da2459657a61db2ed06e2af6a417ea0e3959e381463301aab07c195818979692aca59e32cef417b8a46cbb0cb88e4b0e1f56c9083a19e8d26d236dbf0563ae52f5dd1a5a3b8cf0dd7b8b83932dae3a4e9a4861bca0fd4f432fe7979f0eb86082d4e34b4d8bb48a40c1b6a02be6e9e0ebd83e4b252770c75afe8304d272b7c18007092ff114d62a9fc6b4b3894ce709708cdf161ac5e06ce6ae780bdd2a39f873a874af10eb2fa26ebaa53c0d92363791f726e6e6caaf6977e0a789df87fc1abd85add79c7abb9292fb0f78b0c182f541adc884cbfbdc925cd56ada0d330a4e9f0611852e187011dd8fa74ba360530c0b235053096cd4c0d01aa6e65fb313db4dde59613ecbc0ea954df02ff0f8543eef57d8542ea4ec98479284d7b77c5ac160c1f9f080d48df921519ff2e2f9f7a06274c78544a7a208f318dd4dd43ccf8c7da3619a057c6cfdc155795229179356617ba47f9a194c4f93fd5a0bfac2120da14a7e77ab25a9400388ee2230ec5e117e45528d9379f8038a314e653cd6b6dc214829c3c307bc0a7c44402cc284a29805d5ee611b7d7fd9838ae31d56c5fc027544f40a039454c860569067c6169d5759dbf8df529a1db99b7eff34e1d1d03595b904bfc8ef9f44802f06d214bc0f201e1e78dc4c1b691ae86ae9561e0a413f5aa9a9704907114704147805e39a53146c925327f851f791361f0e401b2f52b12a4326ef4ffc49ad88e6f93f34b3dca3bd76ea1bbd37d028695688982eabf9e98997bb94714b933104a105a0d65d7eea3455d8a60860f5d10529a469c23c541168222a13364fbb31cc9487db368278a57eba0c1b8bc1ead612a21395b6fd307b4633267c398fea87e31457878cabbb1580de9460291b3c95caf489874d288cd2ba487e9e6ce4ffa93de0fd301331f4f2c6930395e0ef7728d0ae265065f49dc79cdd3f7e0d17045a9f6732286caa661951a154f35c546ac1557273e45f97d1b3f44547d467d804f53e490ae1b4891786e0f5bdcf8ad162b7ea5312f6f5877e94d39a909e1496fc9b6c3f60c11ec6831dae9d43bed8e42e6ff9c7d1565b82a2ffdde91b635b0f71ceceac59d0588f7ef448aa00ce512289274591850d32852d2481cf357f16198368dfd4e45ab5b661632f6e3b32d650220e96ebd4521f320a680829994652c123189986d78f6022564ed429409977c4af8cbb3738a1b2df8630f281e1da5fcd89b61d53b571f1839bd6214973faee15ff5263234b94197bab3415a358b5cf28ff03a6eb0db2aa7340820e6c1da48fec53ad0e035e972c52ad1d2d6e776fd8952724ceb9cfa03848cb595c608883eb5963ee01ca9228af323cf7616c266a09ebbe1545bdae80e6f70c27f262b5312a71b0248739dff890cab3a0a67c245c8cbf388b8822b2a526734d9181fff99ef791f354ace7b0617eaa356fa1d9978cd0e262ac522c7d396120eb801e4dccf26fdc3cafd81936700dcf9f8413c2a894ed1453fab51b4eb21125d7bb5064bfad58928c0c7495713c0997d0dc06bb4fd93acbdb87478205f8668c3b6e69a926630456a5259905dfd6a5c2e6a31befe5db3cf83600e24c7596dac114b50b5cd229d5a8ae739e104301c348282e3252eb64bb47124fbb0d152c6b741fb6255f51da83a54cf19decc36b6da4846b0f0729e3fd629052cc2b7555ae224f2d306c4dcef06d48c639000b8a88717ce91b794d91902a034fdccfae2e64df59210b78561db73c786cabc61e1d3058eee7cb00bdb54dfcebadb9936627e1056f91b0728f8bf7c5831ca6b0ffa3c4fd4a26258b5f296041d08dd25db9dff934c4b024b805e8541d5ef3440dd9dcd90fd5e59c004cee65fab350266dcfe9fc1f8113b5045b98236282338cb0b8365d65a6a9c3c634fd98056d0f3b5f6d60c82df872a99cddc672514e16df03f5e5c6b91fe49307278d501f2b651eacdc8a262f462078789a869f8378f6d528332fb67f2f04eb9ce2a92e09099b690608b2273f7d27cd71f8d4620423416d568f336f7ace5d13d41934144f1016ad6bf51f40d91e7bde988c06e076de2bae29ccd08da374493f10a35650a7a9276e51bb48d1200c01897b2067c1416380addf87dccf197074187b2614ccbdaceda0f431bc7373c2f0d91bc31a102fe053e647fa7ff7fc25d3bae3b93469eb08eb16ab9bd76358ac9c89d749ec2ddc625e7ce4335ac44687527988ce27860422a798f144023cb5cf0787704ea45f8ff9739503a7d55c993d5262e17d0ebf130def631c58b3cc959f9bca094b8b4a5eb09121cedcc61757253ecea8ccfd916485e77823446f918d8054014102725c86c418fcb024831c725c777dabbe3ed2893b26b575a35ee1003505eedfb47f61ed21f2cf732e3eb43b102e3beb2609adf767ca21b56edfac7b793e38a1db06daf9803b1e09820d62220ddefbc20497d274171d75886d7752430c564a79ffa7e436863b95318598c8da132c87f31170cbf0501f9f1b714b2436227d078f2d19937ad35ff9bdd2722e7e4eb2ec3d289cecfebd0a777645b6547f46fed39ad179722a69e0d23f50782304c7e8ef8b9095b64437c39b190c408f0a29cb3865d0631787240606b9a7eb95869a23e1ec3c8428c3a232ebdcbe76948017ac133a5c28798d9db5f5fe4157e06263a710b5c4da561be5d4d906cf54d29ebb29a84f506dde27699e8c505570f516aa1a93dde3c50f0dd981136c291d40dc6e529f89adc222398bd60093cddce765439a11685f1c2ecfe2d4c3c52ed1aa89c5397f09c2f04a1afbf1d2daa650bf2341ce6bc62cac0a03dccc5193beea036c370636c4aa94ea00209f955095640331b3f2f35fa18944325e9c5b5cb966c5f8405383187d1bc1d219278df01b2bb79edaf858f13448f7f89ffe64e835283e8eb30d9b52604c3754e429eb644aad11d6e61fcca981acc0a35d1458503bf94cf7a64871d694a5fddbf42a13ef3867e1400a118e5d66631c2c6e4a933a07ef122dec3c0a1ce4176272b2903b78d97551a203a177cb20fc5407cf53e98e820b232a98d60840f141818302018ca840a1b453922ab0a6d74b7c5d1298eb8d159b716e55a13e791c0a4f5d809bd37bd12c59149a90bdedc9113d66dd3bd3522aca486923528bc5cbf2355a2f267b79f6bc45aa92ef4ff2e252d1ab83253ee41e330b532c609ce26db018781a4bb7912b4f9986edf3febb082f9aed7dbd6e3b34d1632a595c55527e01b413d82aef5019d4c73ef4afd0f955f7a2b7c6f6c26f11dd7ab253368c027b0824a62f4858379a62bab17dae99298146943c3f66bf66c737ae27c0a45a61a1e95d132fbc3d7f78b8278dd909b806a72bd8c0b685080ff1903bb6425fa070ce05b0ef880f902226c8e477363f9be3818e628216ba2e15c404e2f40b83521e1e7ee3a8d79661562688d706a4d37f76bf1bd88c64411027a17ab9fcdc63abe74324050e61f9687e3796f450f6a5a255ffbff8a12a69c7d2383453cc36bcd17d5b571eb10f33feefaada6a109fceab609a3c55caa7aa45064286cfb0e439104c06894c232ee3fb9ace7b3385b5e7a9d1dae43db6f8a399957d6860d17eec4b75b454a5a92213feee26e4c6c865a6a715c59d05f0a2a1a51d594d6859d62b7117f2b5e817fc23f13f78deb0dd195f400fa29ab292f58821ea132f0f2d466cd02f2a46e45fd3a58871889ce17ea3c3203e62d1a84962b74027252a4cfe0a476a671fddfc0033bb7772b6ea63cf14a2643130f88b72c0a6e2c3fcf35c403e13ab660c671698f08f64f913faeca4f9ee6358b0147e3e0bccdd15817cf3deed628cfb063e298e073467e69a3babdb669b58df6743892e0f51cc7a2bfae2823737cf6030114259169552625a28f2d9fc3d409e0edd1d044381da6e58f790c10da79b9835710ba4cc4ee1fd25798862053475809dea1675d5254ac17fdfa541cfc9c73fa7faabd6c17d4e33d65743c57fc346a2af8600adab8352ca55070b7ed8e9918792739d83443e985ee9645cfa062af8d19f5ad8cba0091e5bda24142fb9eb06936a3e2f776edeb45630f8586cc21cc2648a6c343da09b96d168252a074b1a275b4a1dfd31c158850a18926d9e123bef224f447c9f49faba5089fef062631194d2893bcd50f1f6321ff99613120fa87b50d53dbb57240312a8b3ce18d958917b4688517b2b65b7d8bf721c04123ab440a94a3b31d9de83a6e8ffe396f721975b2b0ae5d25b14584479858248fc042c54e14a9e8820ea9c3d3a3191a6b47de1a7f574d80895cc3d39bae9409d3b6425b8f90a2a0a5b99d67cbbb0153c9a7f045a72574f5df9abb1bbe0c4b77a21295c2815a3e1e04ab6474065f53c75870da845decb71b9106830d1a83a8fb7c3ebb0895ed7d81e6446b20a3f92a56fd90156fbe9ddb8297a1ab08979adbc64c602885d8d57b80e4d50a45868c1175c7fcd6e5a9f818e2f2a68d9aba3de2ff612e478aa93d16945528ae37e3768fdf2cec5155e89ee912bdafff07be188f5c3cffcab628bcec2c509c35fc08dfabe6902036694c2f1550e93c4beb58a4d35b680edbab606fa3468e392bfbdaf257c3d6659dc35d47f41c1c503742735cc6445aaa3bcc3358fd2d6754a233cddfa816ea896d00dfe3892bdb485917807f99d3f55261345c4478c580257e2ef3b9acf44c8956a5301ff145f65a7acd9c5533c57641c8fe01f2c8393ef6708f29d42a56f9312d3e5d2dfbd73ae52e26ff74040145a4b4d37124369d22c8d94a9a13b85ac9d1dd054fcb68d50bf4888fd27c3bb6fe9f222100260636dfcd6f43202ac0065f8dd968e28dfcd04b1e14277eec09c7a7124a1922f7a6800798ca64c1042a6efe51cc8c3b008b10f86fc5cf8480b509cc3de3b84298d02089900f1b9d09314c1d32b12340fae18354619999637e9b75fb9c096dfc3541ae7d0a5aa7c7ff4577ddbbc481dfd795d7d77c53fb08d5dc2c45799fb4e7676e7b10b8a917c85754e2941bed4ab330cc05256de71e123a2e51ca0b1a422af681dcccf765e31139228afeb8cca132fc40ac752a5e94e7b365d538f13902acc5ac688491007328a2d18d905e64b8bcad51b6250b99aac895c99cad14df8cc738704440467368b44346753963001efaff7572e1a78689d6ae604d3e329275e20baf80c912622c4b545549e477b80c6424239370363a29af1298c95b558369e3ed4cb8e2459e0b017c621baae469a783c96f3dc1969b2d1b9e75fc4b3d2a1e87e1acd0a0da1f13aeab6d0213f8601b54f7756591736370f3b84f4efa44bca920f436f44ff556f7c25315e8aa1d5204e79d74aa0530e64ee20cf7d54be2ccd94b72c64b6273dade780c8fad155b49cea28e13567c74e280ec7c434b98adc58d4c39969e168ce2d165b6ff05d6bcf9ee926282b84b3f18ee0fdb17eee00dc160eb7a384621760ccb54c407f9c512aae4955aa297c28a6374cf00ff2ee7d11fe64d1ae6060991f010821828ae625e56d45196eefcfbcffd6b36dc898ea4c6b3df2957f84798c38d82d8efbd04ef07bce6b22702f912a501a50b317f14a2bc2cbdac22a752957b73d8dc32642897e529bdb3bda4a32d33c79ac103fd3782e90be0582afceaf161d44e36927cba5e4d31b0a58d330aaba92f74802b6bbfc5b0216d816f90f325b1d2b200eeaf62880f5d592b8b3f0c81fcdb51cae6be00a1e2672cafe7faab41a3e9411eae56416c5550421f38aa30b3920cbedfc5eb9f8ee7296fe22f49043a4e102fbc32c8d026bdd016d65ee4f24c7ae0615b1717b1bde843a1cf0199b3183778655c31f1c6e3934a77bdeeb763277bd8d6be477cf475d40dcb2a1905dda3d87d5568eefb84b165ee2608c1a60220b86f053306a30a94ada5db0b032a4bd3e0dd43cc015b8646f5b6023719435ef13dfcbac2dd5174c3ed759a0656dcc2899a2a6b1d898d71f56c65e9a6e480e240ab53e09cf20eb3f62695d3111a5ac4bf09b34050193147dfd9eb7b31218af1a64914ca09ab1e82dc3c74da0d1c6461c0b857cad90a1680c2570fb2316aa262e43ddda73b443c96393e43cc22e3a5b56d91e5fed93d6450fb5960767f020c8dda56a76b6bd4110d478eb0dbc16c6d28586a845377864cffc7e7fcebc032b9986141424d9d66579d7ddc04e4fa89733c29e8e30d9fee34cd1a105fa9c320367fe7b5122b78b33636bcaec0bf74be02203c9a39e0bf6c7d6609746f40298a00ab3bb29d0f1edd4222e2405fc985a8b9d1d21ed45407ae8387c9310538878ad9dd1a7ef946aefaea13b62881cf172eaae741213218fb119cfede28d49c374f3a582dc004da8f1755fd696ba0b6c1ccc82c4cbc7f1ba4e4bf6c47a4303229dba9b107041f2f572f5dc3367fbd0f51f25e71382597926afff21397f804ad416a3f9f18ad430942729f7561118b6715cb13fa77d07865b11cad1b135dbd57b87bb326b4756f3033814084e6a3cc08712a403e2e24a3919cfc01d7b5e806ce738e41c4ba354dedadfe04a5ee1fe89cafcebac4d3e8a704a418736ccbb11cff9b726c5f78809572bba67303edd48ecc1b1ad8dcafd04a43ab2c123900cb92964a2918539b6064aaad5ef622c9b02d269901e7fd0775317dd6b84721bf1879d2264c881662e64fd102cdeca3b1600bfa7a9f442f46fde27f9465327d2001b1ab777ec5753fa12e11b801755429285b7be3a817fea072f8fbbe1f093c87056774b71469c8bcda769a494d59e7888a4d3579578432d04fbbc26e8781d2f00a9f05613ad4261fca31c9f26f83b1f613a1ef79667459e519a174e4423de55b7c35fb7801535b83a6491d75bda2e7fa0d1d5f3c5a787ddb8b36cfb087b054336014758e42037af098b214ffc68d07c647aedc3fd06247649af67963ebcdc5771a338fb70d13cfe846bb87c60bc47ca4f2cf088fa56735c6faadad07ec8104c52526bec207b264194466d360bb0bda8662fd2a497379cbeed968ba40a08b2c124d3360b9f5c275f1a889e9d45b6f6e3c5e86d75d9448f6d6135303088089b548d54da6f0ac1c378a3feba5125d1acc1895f464ac3f0d15afe465361eb4acac3aac8c9bc7e45e7ebf15edb71f551a90834b27acc9006d52156a6b619a5e848393106f2ec153fecb191b77dc9d191ca102697092ebaf9da8242c50eb05b7f4018874818aae2455a9de480db1bf6c8067b3b7c4ba216cbd0f35e2a8c9d42205429e87737778f3396f79545fff5fc26e76ea1bee0ee1f33b9c26bfc551cec0c04d1b75241ec050e98452562806d22e436e624eb9bb9a5d350e80a3ff9d5945b7d629a0092eb2d3d9827354fdd7f8689a9ab326f75fd8fda4984910451ba5406017b29fc28781cc08969721a7ce8ba7e3780264e5648e8d18eee3e15b4b94e0b6f32988257e26f704e39fd4b042de32d56e5e592d15baad63fab3ea5c9d7821e6e17ecf78e2c7b4465eb4af1a89d97144086beefea1990aabe051aa04686ea708144159d623e266615850729b1b8ad9ae95635d81a80a890c0588b6850d4681c9cce070f360e2f597a63bb2f5e262d6377e48b00cd3adf08b97510db1594a18a89258217a493ab0c2f3f3dd31a049d9976494730cd08c0431603feb29b3cdec95f32f1f92aa508272af9fd56afc8dea80f3f23356541c9d503208d45ab382e2975510f66ac20e581d3ea2c104b7c008b7ed2ca6604e9ec9a96d173e1793937ea0d1989841f7237dc9cbcc0baaa556b86fca325c29a97dd086295766a88217282a9d38c35ef0e2912357d0c3a9d9ebf4680bde29ea5d7393886d1758749b3c25ab3d3fa32818e39e20c26b8822cdff277eca214f0d5bc2a3d0776fee13891935700507b76452d937ccfbf0a84dcd69c0a81e5b7c621b2bd7379db6fe26e416d397a1a7e86c63998f8338b7069ab4aaf0737fbdca47291c7005b2f3896b1c9b3ec9e54031f21db0282370099ed142727e725c4f6818a919b223e7a70fd61f5a07f1d95931958d2513acfb42fc66418cced1cc399e7242d49b29994bfa745278901af1c139bd279775bc47cfe8dea9bb95547544c4f5e2130275fc9d6933a5b00b20c67cb266536c50b4314848fd87913686ad3cf6ffa0e9d06ce6f610ca55543de5f2ad2943372dbb427fc2363cba1b0b43275dae791962da033c5fccb371e31a3c66a7494dd95fd95783465bb312016ab7df135bd1917aee6444b6a55e086a35acd33a9dc716e03d336beda3c87a837374f2d9ab6715bc2f6855996e83811b92065c911cb64a10ce6889bfc63f4acb7edffcb22c807d3fe85c72589400bb2a035bb3484a0b9ef7a0a20b4660161c86bb9332cbf6aa7064739615f2a7e90719123c85115e034ad6dc2462c3a94e185d0cc1ed4254e3e0146269b62f3fc57d0afd292ebdacfe6d3d35b150d8724199d5eb3fe62790f01b60e0edbd536eee37d8f9bcdc74755bece7ca3d88715b4ec8270f905db2139d3bb2aa769285378abec80b15cb1efc3bbdc1331a804b7ca165e4f74868adec535babe64033431811b5ba3720feaded603a73cd730279481ebe46ef14f9686b27c4ce15f074f2ccff6c0f29205bb095096d13160d901303ade2aa0d167126955a88b3e7c5b929278d846a7c4b0a4404eebf168fccb9bd8b6f1eb1ac9a82908fd7d69013cdbbbf9e419b7aeb3d8e493b8a6f6cd830b215f247357bebc9850d96163c953f53ad2022f064da2bf19c83371b53be3d182d081b9319a36ee69298fb2eaea5ce6c9178f959248e31e9ae658e13cafbda85eecdad29304fe78419074f4993ee5b7200c2dbf5d0e4feb8398bacfee6a8052d676fe4f5cf67d71ac222e55886deaacb0ffbcf6aa18fabf64c6c4358da29ffc788ca4de83454d6f5300f431419e5d2f6697d3b1cd9368ae39cdcc98159a291a835aa3d6e34196c06f206fe81e7de96bd45309153ab43c1fceb4d8cb9dd80633c53aef39ae17d53f660d68e90d66999f9270f4472e67206e75c7a9d908afcb4aeafb6014f3d7b400349beebc400e5d6334ad2f298ba4a185774ad69ddd0f0919a5308eb8e0ef265bac614a84f7ca68770108fee3c60b3403f06bd7b904995f612e1016970b6dd9e668f23e04375f5f6b8b30f2a07f6b079e638eccad16680b4b4040d90e3f6690b639f04c44ae00fc38a25a5a918095570c49aab974bf6a5420d00205da1a9cd816b2ac4b4b07d640210102be329cc713a614479a69f53f6e1f83306d518bb6b239c59e7be64d749d4769dae2d01ddbe1e6622f50f4c411bf3b3b108a2bccd14c596a81b6fdc484eea044ec819620fb1e2c7922eeaa158227c600e76194fe299fa6ed8b3fdc0f67f8ea119c432ec8e6b1eba308342bd4dffef67c503aeb2f18d55955f76d43e4f31919ad2794c671b058462075f333808309d5fd70d575c3a76ae5c41903de887b3612edc454d60b344c2b7a614bfdb9c8acd1977b29278cacb11d2fc18f67cbfe46845b56e1c91e62d627d5cc4935bb1e829bd1bbfeee5ddec79236db2dccffbf705e8e554d41e63f02a07ad7d0d3a80f9009d98e25425c2c7592d03d04ce25d4867009e6bc65a0fcc09c78286373df4596534784c6cbbe02385663cd220353f90bd914a856583d7ca00a67317db014119a3423ca4f52c96e5ad3f7ff435e6088e3110a44cc3f9b10092869b2f768f951f8257ed2f8aa803838a2e1846e9d5c82f2e6f7a2ab90cd69c72e6ccfadc67c27f6e6fa72318e89a2322b1cdebcf48ee60d7f449d4ed14866fd306d8b5cc5b1c5675b421a284085b2f39522b0c5e41029af3790c17e42d04fa14f787b05a601e724ac7175521a7b3b4676b75a90d431f1ffbbb7ddce55ad86232fc7a2b50a69404a6e094054ac24aca6a1c257eef29437a19e10ad8f3acdd1154bc3da98739bad41dcca282a27f28f0a84eee3e96d3379177a9011e98cc60ebbb68e7f64a8ae9eec2fd64b918bdcae69954bb1dc883102ad27adb93f47bbc524f0550dbd6c5977f5815c4f8f27255897a6c6488e98b446d8df0fe95b23549d2fb004d9f0cb0ed8900c68d2949be94da71b13b2478ceeedd4e0e186bb5178e82c16568621871af9663bf38a1ce01fef6228fdff7832fc5719fec745c80fa43d81cf077b94841ee42b6e64abe2a34b35e20a179ba9b64a261d1921138a2f3b5e7128fe4bf48e8922c90f75c6ab11a8f5193df1948398c8bf8582a3e0411aac23454c6bdaf6b0203197fd6f6bc24a0af105c6b72731c094306b3ea3d23c3b8391682f9e26c8a83e320dae1a8fcc203870da9ada63d5dbd2c7daa78beb5a8983432eee063df7fbc3ec213c0e147a7711400f3a77dd192cf468bc4f6947c48187586ea2fc5f5c30d07dd0622878eaed742f3193bc8fae18047fe7291ba8ce31b84a19c0b5ff0b5a3b8e1ffcc6aaa103a374509a7f842cdc1fc755ca7e1e1d98011679f8aa5b35a264a453d364dcf818d2722780dd3912d4adf06818206e96d346428a7c17d1683f2c80abc55bf5a3bc8aae86ceeec7e30503950f433149f4b6f7966f4943b1c7f71e69d6864eb9ce7ca38b3960ad298892f2e2c1b6c6a535e7fadde49c05ba82d98bee1ab643c74675039c59fee4d94d6ecfef0b78497190f8c33c272fbde70f45b1892ea733f034d018575582f24eba294c4b2ea8c28c59be4767c98b77018ab4835328f9df345c7c405b9252712df64a439447e0c04c7fec66ad17b99df5a1360eaa2d2bd03eb264765f16adcfbec32a74f98b32bb3e4b65fba5cb28a56d5e77194913eaf2fca14af3e0d47679b3744705e7a8e0d11c43f3feac4271ea9b113b9ecd1924ed38734f8945f2e457c6b98d8e4d44431908b86a638cf5f5e5edfcd826972f5288c4e1450dcab44a8bf6faf9caca859db5f6c2d5558c3c9d7fd1026227641e6a7d153f07ccc5a51ae089061c4f8787a68dac8d4c0ad219fc38b0ca4b04917e54539c1f7e450cbdd6243330a45ec6304e99b2dc04da61bcd7d6f33fc497f138085020026124ef842834e4a6be4bc43816bcbc8779518dfb7cd7830d3a3565f97e9f2c7612119270ba9863837e8b46489d94eb8c61f7a0aa4472414125b1785f86934efe8460a6827fa8a49a51446b51b1cded803f5ef7d0ae931d5d58b5e73bcfada5f8add5fcd1e2b332a39965cb1d0db3b04941e3bcffe4a57a129605afe7a03f594465aac55d751438401afb5ef7c1be39aa19e7a372ee0fcadc78fc6209e35e219415cccdf100c7dba021cb45d4519e20b542224d8331c40e90a734f387cc1f8adde2af1135625015617c2c34e821dcb9adbd3ce52c557f227bc03a201f91300da7172b45a5d668f9a6e628d2da0a42c20cafd286bb5b3d1f3631f315c32a78a05546fa6ebd80886a93e286b94816350d1a794ba5176582221e9919fbf3070031d968a44315bfe98e686e024a99684c908b3d2cd005daf9102b12348c99682236461216682cfe1473fc4073d888e5b5a664c9b47b82850c36fbbcdc9c45516814baeb3038b782da6f3bfd2c895f935cbd3b403cc8d622bf2186372e0429c329506fc91f70810390051ce715ae2da58a47f3463e57ae11b44e152ba7aa8db42bf34e9725b4512ecc05feb47af110fc7b08069e54e24c09cc6fc339c39f38a1e2d1bd8f50998582c274c1f6168203996d17ad5bc8360ecd3754e5799c799d42bf49de2658a2c0aa5456be72f64d1275acd14368cf5fc12ec50bbc9f357a5c82231a61cff8eaec586299b8d5e1e30c8b807d05fb9f73aa31a890357f145752c6f4cb18a75251936fc4c0565d267f3e1a0de57acd7c27d4dccea940c136399124686e37059633385612518595f7d2db40da004a060a3586b65758fc55c687cef7152947a6fea6414ccf4032ab9d0703e2c3ba2a1532385e46605487359e8603c3efd45cb0e26932419e0909b0e117974bc7ae620f5c9523b9e1784d049170366549ceb2df71b2dc5c3d3f81ca6eb4415a25bf871078bfa30ce95b3075a4698221a4343c9298aedc872654e9a37519946a7013efd51b4c1b25375c93e43ef3fcd6d9a958891239717a9145baff5166803722313df6cadaec9e6b3470fc24dbbeb7a752380e28f62d667d385f6c17d35ef19483904bddfdad7844d9a45155af34672ba18adc8b8d7572968fd85d074dec86f8261c7f33fce34f4cb1052c531210b243b98dcbf2778a60a32a7e29bfdab9a0d3e5ed2f41046ca0a4e764f6a994f1ba65d3d3b8e243d99947bfe95e82e900c92cc12d4c61eb76b282b868fcad98a8c81aaeb41d55bbaacf95ddfed5040f0eabcafe8f7ee3aa63524891e2f9b03995459e219eac600771ce3dda09423384aa740f8af386c4c84f1c9ffcc92e692d57b4a8a9829bca67869567ddf7a05bba0f12432daf334f7d3f7759b41726e8b0b7a897ba11db5da6cb5ba3ad9183e4d7777b598488b0d97baafcd193db5a79a5e3b9bc9efdfe151c6cb010a7e7399494dc13537171547cce3b20d13ff69fff063111d444123a28a3afef59801292a6e7424df4b0d275452f0649781e12789564c2c3c0dc587674761c54690ec8c2169c756f1e1e5fc0831f90bfaa92702574f5dcf90d393b52dac208d611345caae6fc891dbff99e32a3f644422ea29f24d1dc6bdf094a3603dda1e64f4329d2a5b834275ffa0ed0872dc487da28282a5c16fb5bf31ff199cd3ead73d10ec6f20b88928538d17ff5afba9c20e2fef17cceabd6f69a831c2f508e42518bf887e3ea75b3d9c7ce2809c29bd3a8bd9f5256f6b04e9a3306741b4199288983a97daa378947f61af5251414f2e72304f8e06662610e8d939969d6c0cc9ca4c488fa12b70c125c221e341500b35f513a90b81b8b2ba22ff567dbe2cdce7ac2be7a1319f67eb0f1210448e8253619e2a6f019ff4c5b792a0deda0bee9a3def0d149cad5b902392b552b38fcb13fddf546412ebacd773673bc35480f1f55dd9189b57c80d3b6453b4d9c055e3aaefcbd83c047b854e1103acf42ab038cb1ba0e76e99115961265b6dc57b99ba82c882ff94c5c480e3cf2de1b9cabf6ef3ce34e7b1547c2565cd453a2a666e7af0762d4b5f43b49db0b3c34538d24f9f6dd59a6516d6fb5c6a5749860696cecb5431e7afe4f1612d4001d043b21fa7bc9b0219352a991344850d63ec776a4872c493560fe92dcb02da1a0f03d90da137e72027a2e0f7cdb5b8a307040e7166a5185c2481963e9e8b31a6a308a7f082e320febd76e2a8d9573f8d9b23a144dd1933c73a4b07362cd712c6928913fbf9348a2add5ca8e56e020ba5025ae359a893e6f7623af56124e789a4e37faaaaedbf825dae474594253c3bf0078e807fb3f47d78b1898f20756241e1b1d7b739caddde11f713ac91e0517b1f6eb7b040da86de61cb5b276860274af767b6c87bca1d72b9a5255f08ac5c6012d5d487bbb3617836498444c7d8ef6645b49c7bb871f25150241e95d5be70ced94515e07b64ed5c344236a6e2c1451965f552772c44fa21ec06024c07d602d2787c7410dce3b68009e3c3d4b510204e270092c9d61b51c52632262300c01122e1c1503a3ebcbf2022845056ec5ba4751f40cb657ee7d8828ba453a8313b683d32c7e28bcd58b6f0bdedbbd02f659f4d9b40113c55b1d2b29391178f57bc30152cef3a32e1e36c6a50502ad311c46aa6cccfe8d685b4e36fbf09515c911c6e497bef9ce8ec07c2285a178f6e9f4a17c724c605e3f4403ad4dc265fbf65abb9ec3b2f8d3c14a5efa5e08bf6d49293c67b44f640cdf4ed395e8cc7ecb63bcb353b3757471fc1ce22a0ae58ebffc265fb09910cdd81954ba81538804175aa65d7f10aaaa82fd824544cfb87f9291f9861628244d49deed1e56c4e782dfdccef42eb1829b3d2fd38d7505c60bc2ebe678509e185b7d00d069dc09eb2481cd7b8a479747184bffde1361ef71137f0c7b6214607d68291b0df3fdc11cf477fcec5c1b7c032cd178d82b209a681c636eef950b658b3338355da17b174437cf0c062c74467a5c7bb9adcf164a6c8827b10b0538e51879cbdee539a59dcfe715000b04c1eb758d63aabb3b259475bb7d2be8a7a69a987926f5c92f4c04b3e60af18971af9cbd95350fe6362c1e5eb5d160ec67c6ef20b252a30df92601f1cbe1047d37a5830a7f7c108a59b5d9bdc0e1eae4793fd75407d1e6a73b45da0343931dc53d6350936296818bca85344bab374c949afffa4a1c5bb5b84c5773b97211c64987815c1c2d6a7215c494c4e2331929b9401892a60e66240de90145274b05289ff84b5f4ceed95335fc28c07c47301d2d59a408f73191ab7332c60a1a70ea183c2a421d6c0467ca6c2541a9acb64737903cda4035f332c25b473748dadea9127d5c08f93c294994302b4f4d9d62c1511cc2f92ef85325ca5d11e14936b72ddc20f79b8f3bfb3c9da68a1774942ce7be57acb1bc4cff3baf5ed81fb44c3ce1e2cd50d4b564fa266bb0e943bd51243776a5cca0e3e2da261a38d42c71e883c4f56a0fe7801eba6e142745536a65c5f8a1573f4b1b9ecbde403c59406f3afb3aec2ca490e1b5197c34c42783c9e1476dd1fee856d5705877ddb38f827399c658c161f7bc7ba6eab7edf25d81c19fad692f955193b93bdb2f00e8a5128a4d602158cbc12231b3b4fbc8d024c344e8f92ab4a16c8004af8d81070dccfad415efe10579be86851d1178916016d212211c769e6e5eaaa0895149a523efc47ae80fc39ea15b86371e4f166e0fe123aaefca877341844178c737662a2a733d4089b305c0c9e63707c6766240b67df6d3b8fe5ae62c42c4a9d08c07130587d3256c7dbc6eba687ea46b3992ae794f797b5392fc87684b82c9d46e35665806ab8d0f4bb120967a2de1d683e0164ac9916fc7c2e26e77c2da47377835351ceb20d909d77d9efaa72f5489784a7f1b5b9430785747f78f93a2690fd93ed1f6d5c26c31f1f771b2947db613bf829f807a7f275665cfb03c5125986fc0d711aea38743ce68baf9ae655f2625c08067852fa3639378e557759650ee0c4e4bc66281ef2ecef730b49a2b3c6a8f2980819f330f1e7b5de32cf127b07d64294cac5b4279faa4cd0a5c38f86e1fea80a7ad3a09f2ca7986cf564327eb552deabdeb54e1eb2ae6e72a212e64d3bfb69a35a63aa08f25f4709f51151c421f47d1e3edc8ab2b6bc0bce116e634c728cb13f3f5a2ffb761b941a51700e82ed21569287c3729596714dd68c01034e50b0f4f07e550b951d8941ef472bf50c637b4dcb5cce2bee3acd3cb2086651021f1045ca777ccf96887b08e7a383de266a3ff87a87f61ecf52aa574db571da11caa139c0b2775e1bb1b3bf6a47b1b3c6d2ecd5aeb69fd9960fafea4dc16dd5fcc0a0c4211be56ad4fa3d2cf03b506d1f369e9152155bb7c109366a07943e43d2db664b292a5651c2ae59a486d8e0c3ef7ac4adfa73981c26c834ae3af86f57027891a9358e60c8db85702a980d8933ddeecbc441959005e8c39bd82da8c107471951358991167fe50cd587f956d96e7c3d3484821b1a96d0692d52581078696ca9a452708d036abf46704c2261e73b737230399b629482fd1ae8c07846429881d04ee773b501d763dd704cc4585cb09f018eca8cdc01903defec7728fbf18dac8fe6d262dfead29207e375e3f2488efdab260d571601d855511f9880e3b75ce7fe7cbb17a013a09ed9a2ed3e2e575fe4a3b1027dfb20f79bd02a6732466a719b029c408b1f80f7998136df43e5ea1aca311931b6f994dd2399dbf9f69fba5ae3530a6e15b47ade6974ecf24bec7dcf4e08a7e82b1fe0d7c89c3827b6fc58ed34f44cb0339871fd04aab88715129096acdf8212af78ed4722379c9ec23a7ab9962336db87de591ed9902d570ae2e1aafb5eab190d7a69f3c645e885ed705f4e0bb9f8975ecc04fc8f15c959fc08559f46581d4ec1a687af9fbc3bd751b816123c5d6d4b6bd83cfa5642f9a3d8393751f14b116b9b05d40f9ee4f8f1405a71d32ea68b2711c564c7e4a84ac93aa031244ce5b6a71fcef3cd78dc5761a8719da674a094d3b0b2151fe5cba2cefa01c4b2d3884dddfb3be7a703c9d8a9383baaa4f75c1f3f33d3fe3034aa14453d31f74b95705abb19f9ab9fb9c5e4cb7800d3211ee4a7332d1b5e1d5dea49752cb715ba2ed464df62d81291d7fdf17c50aba4781cf3e51e3b09111b19c69a5cce626e7680ec9dc4d904b125883505418785f5a7d13abfc4ba07af47547eba3d598852cca69f09b751a19d8f672f1c791ebd32257137af165b7c7208138de931e6aa350320ce13d16cfc07cb8c0eebcc61c2b23b1be6157ec9ddfce53d192e4a5a6a063f19bd2db3ebd558603bfc90c3023361a779154cf4b5affb6ffbccf86681791114d460701a6c5133d294710c2d619683dc206d849d756ec00cd37ce1df2d2e5ab61e7b6c0396e611efb1a1afedaa18a16c252c1074f4c68baeaf6d15aa23f721bca5feda36a853391cf014967b84890b1dcee6f457f14fe0025f7f986ac73a6ea88c2bcdc406f32be0ded6973f624b92f33e56e2e88fc5736df681c93b479f2f12d8961196492755e259db10cae7d3dd15e06a3918f8a5463e6a76a5c3a017f81f389cfa71caf99daa96ac05cdb4cb8922f2fcadbee7579e1167b6e0f45db80f0591983f06589dfad726c80223164e06cec4c9ab7b79fa6235c1b386ca180492b8468a329bcd64b255a59309f283468a3a7d1f702923c469d65b7cea7a2ba8e5634821670098d6215d2fe843f492324807e4592b22576afca1e303df7744f4e0625a77469f45b41d4c372e6201fc4007ae58e4694e60f20044d91339f6199e92b6f7714b268bcebdb3756a7234644cbfc84d1d4eba2c205809585f7abe5b3c6721e28889ace4a17ce3fedf3bc258a736e7a1753955211e080947f6afe75fe82ddbd8a53e659d06da14362fcc5feb7caa9d1eaf5f6f826b9a3374b43c7f59609c6344c37aa8f5425832dcb996952f6d20b3d85d431a50236d604186058beec5481940270cf86310caad4541836aa291d532e16c54078cdbd9a2e5cf0532fa2f34e6b8a60ed8d164fa07ef28510f61c5e8976de275e5c2ee3cffc7460be9d1423826d3d3338267b01ef24bf6354b2872ab531bc894542264ab60f74345322f90eead7de54d03a230339daa1790a9b46f9388bbfe056d32590ba108e0bc8f066b89d0d7f18597f65c37088c0355058d736a4b864ffa4b635e75bb2ee597d2416f34fbe8135d887dc13f600106375a00513aa0ef40d79139b597a61e65a7c53d34552ea5841e2f3d2e021031cab0593e04a9b3f315b7a9eba24f35ca1bca038ea9a24d1b897869fd375ad400d0f15dcedf19b0a030e648e9e54f24baaab20972782736e398871a1bb676ee07e4290db86f208a1b1562fdddb87b2a65ca15185be7d708d4283285208474ed00d8e621267d031aa33ec4b7ec7412b563d08182117062b53c190f031d0fd174a038a263e7e20be81d3a4dad0c561e4c29ac0635615d53526e60413f8a52ed7ecf9939f96e5cc0c94d8c711c34b9f65db47dfbc148394036183f4576b182f66d1f8615bd0c4729c411fc269889cc6f8cfcca2da76b6acb4977a6408723ec5f0cd6221ac28603a5df8f8f4b289d60f472dd910ba6b0324efc0d2eaf7c32950cf4eeacb957eefdde666af3f897a04d6a6681776b3b831664f6a584363ee667d8903716123ff378b2f5410b8c97d15a83f7a7a41bcb5f9789d8b3e1049b27639e90c17180448bbc9e42e99d2e60432c5d0851e66c35d48126bb761b979c1ce4dc4d4ab055c6ede05163587230edcbcb3fb84c64d8bd2247dd417322a530846640154245f743640f8259333bfbcdd133eb8a7e6e7e743172265a9e978ec5b104a1c467dd1f5bf3a9d3cfe0404fbe2d005a12f0b536f8e2af804db65124695118de52b746cd4dea72bc8cd30dcf9b49648f891d1d9698ea792d2c2f541fe33a0af9ee30b6f7c0e294deb955c92e735beb03b75a773603cf7af205b2e97f768af9b17b546937e7039c7e842a03bdb261a6468d25ad4836aea90f1b1a10ba66285834a2bdde4b69511dbe672720cacf56a633d1fdfef3591a66fba1e96ac62fddfb3e66de8ae2fddb718da47af4115e3f0c2d837ec79100483b2699c6c0bc22119dd2a2271ef35db680fefe1db74bfb99a60efa1a2e0057525938f5626f98e0df7f26f16db037443f8c09aae048a821f43c61cbcc9d0c109dad58c14f071e8b6b23bf43acf9fbecd8634a8363b32ca06d4c46cfca1789b0efb6cd1698f35c4c973335889697a3a383adb35bcc79530fbc5b4c50e5d4d52e3ff40ca48e944ecbc25f62e2d955970127ca8c0844c3848146356054bc928007157f65829103cae77fc39f32c4826d4dea10e9b82a8b446d6e9a223437d183dc242477acceb33a5551870cb2b05876eb90ad8287bed9d7f509674aac7040b49046dd6d9d3bd5300b6c8073bfc06ef068f81f8f7b78ffded53c992eb14b1ad8f063e8ae9a9f4dee063ede3b84c64e41ac9a6d1860d991f552338421f460876f1ef1dc8c006ec1f21e293b99efac42d16f86d4849d595cae2252978cafd444fba001e93e8106d47333144bec2d071a11cea4994f1050c6f55fc42fa3857b8bf51b3e31a0ffe33f9fddd377aff4ab5fa1a3d111993bffd71bd04edfd4938b4fa0f03e8f1e4e5f9571f248417c21e45422fec49ffec8ce848a69a62e7613560f83d8714162d73372247275c59cf0e1456451e5cfc102ee5ab29ddf275c82103b6c38c0e063ea3ed26aae9f1efb3db4aff639d84932241286a17762b09e9d5cc8d237867ca54a267517bc753c783f4863ee6ecb359e51f56c7b496cedf5e2db04f308f2f3d46c38f4cf5eb463a7aafc9e0df7cd763aa883e32637bd23aebe7212e5580cc4245bdd65466f134adb6f477067e9157c861fa1fc22d68cad5bcfce93bdebbc5dd5612c833a4fc075c01a76476fa8f63439b9c7b37df535682dc730d431a5dd0440f3535bff0e6a105a09258d10e527ff4c81fe7cd3294f9a0e139f8065934150bf15d9977f08ca802d82f7c2ed05b487152325c96cf777b1df9724fd0eaa07518b77d1eca79e2b7c85e78abdb7630ff7a00ef58a1b162e94b3812480f51ef7991be63d20a3cb324d69122da94c87154693a251095d8bf30f7fa6b29ab417158a7609616cb97513542ef8695cf9eeae700ae96635f123ba7fd08dbd0638ed2c8e103edc813cd2a9e90af2c37599b4198a9a39be3c4f19a792d7371d6dec88efe09915104c3f99a7b3d0ec8637419678d4f7ecae3651064cd141242aa934986d49eb212812a82c5ee777d9e11c01c4c51fc75b3cbd89113ff2a2a4c4427a7fd9b7ef765e3cbb429cb81c492057cfa6687703698b4e28c8f42d0a7855d0c89a34ea7cc797267427c2d5c0075e39ea4a736e101e43357ccf14b34a6d17b8947238d3d55669d5b85d002d290d5ea6ef38a85b7341fc6c9f129afed0b88e8b29ddf52966b4951484037f755496147e6787b09a912efb829e85fe9eccc32eba3ae188a48149f2b6e9dc4431c3313cae914ae29d25c4ea4bf18d87cdc1c904cc0fa783baa1b0687635a0f86f75df54ff3bd5e96e3138f9ba7a9890929802c3643bc74571fea9ae9ac9aa64931eedce824730dddae01115b7db10d5a17797a80bf680021fe8f1770c4b19b76ecd52eda2b36336d1cee44856fe4954751a710c87cde99298ec5779bc4222289443d957cc4b1b89dab39128a4db7138813d0183573350839b007df3f5e31fcf600a8a3edbc4024b73bbb476b58c4bb37f7cb94908a6ea06aa9c27f943cff499ff7b5a483426b5f5303606d4fd04dec7d06f6f2e167e9dc79f72dc8b4f048a9deda87cd62350efbae4682dd6abad4d6931169aeb7e299e5ffe1b23daaa0f4fd93b1a6608fbf80095753651ed7da229957fef8a46f7c6ce24c444e08143a1d704c43bc2171f4ac10dc11ba6de9274351d2f2a45fcd0a5a36282c0730617b33923201b44c8729fb1f1e662ddc28cfe5a56534212a5e5f2defa06884d0b8492ca12ee2e0378d865dbf76d0b829c98d86a194df5b6eceeddd4ea1d14970c1f27e5d826a01a70b66fd4b9f970ef83d4adfec3cba8f3bf5a118f15b5197d82e2f57e702ff52a2dd12993d4d18be8b80c325f20fc3e70519b8686b3cca1588016cf63f99f2d110400d65b5e9645d5cc9c9450d6966f23a9a1c9bd2fc3b87706393069f72a5c811c1b75da11914215a093f4b9436f93a932845ec141f6376c780fa02318ce36d9f21df0dd31b18dca4be363cfd139237a505aafbb88efefee56698699e2c2f1c80a95e84b0c3a5cf24af7ad2ce920c55eaa116596d26b6e8024eb5942372ce5d95a61d731b53145f68e6f403d802e0c7ccbca7969ac030179d5b63f4b8866c0d6161c935d68d4b475e35c707d92b7871fdd96c685b2055f306f75025e656cf35a03ae17f189ce2eb8cabe834a763d80619ac8ec620641c4a0397e6c41ab3b04c6b15252c11ee6617026c1e061c0ff54c299e7c3b970d558ce68542751b0a11d1bee960c331e671f95b2796b40ca9125249e8002dec486a61963421ad70699c490c16cdbed8e18fce671a992728ef7ae999998c45009a15904854d092ac13ad88da03b3106dcc215ce846dfdc2920f17ef0ebb7629f6bd1ea4f7b2b212d64d9ce709a1da3826675868c051ee003a461f19f41ae70d481783470fe54dff60a209c8ea7c401f8110a2a796cef6c3a0eac408f17b04057901c90e7ef13395ec4868297a396fd95f1ec231202c68effd707379425747a966e0b88cb478cc61445c4542ec30ff94b54d9b9f2f06552750823d743e6858c10b29d103efeb0baa2b8f84b9e359adee7da99ab0b0873cb24fb78abae5ecd5981773bae1859b029e30234f09be8dcfc9b199c516f6bcce7b6ffbd65cc1cb9fbce0e06e8a18dcb0eacbb77546f6cabdebb3911c81c25298b14b2e98a51d8dbc1ad3ca051ce60007baf78eba47d14a2e6581f1f69a122e275a0547aa2cfbd04c54c3952e6fe4341d13d18bdcbf3126e18c45e5abd949a308ddd4953b24bc17377ed8ca1357b82c542dccfcdab2ddf51fb99d4a57a02d5dec7f39de996e2a9221da4054e84b4c64356bdfbb98de43b47eabb8c464e26d1357a1bffc877c473437a3211f33a79a9840edfd857d48334d0440099943cdf1aeaa2543824800d64be50bde430c65c9bf3fac554117c4423e66ced68d9e99862d27b4bf6fb92f7b31cd32680d433c7c40bb293d806a9bbf418db95be94f24bad43b46d95bc9677fea159a6660430993f70efef732823dae58b5ec553398d8a32263f98e836511baac83d61069e4e12f2a48adebaedfeb4feb9377c92f48f8a5d7cff0f836ddedd88fd529dea36e526fec5bb99f9f8946b82e1e1c3589e71e90ee65971dbadcfdbab917d44420dd2b1d3e473e9d334c635c54fead18039e0581f7f81d6667177a182bfe238f1e8eaf5d191c2566e3b748d010e5c875f045d2ae5d683a0d4e03fe59cfc4117ba6a4a1a827324651b5f63af67cabd359819118bec57f1cd4abcdc4f3b343926182e23844550c3eeeffd3fbc97c776691a299084c7312ec7e9149688086dd777284ab523464d31825e60e12c46714facef3f93d5309a65b4b68788459b6305a641a238900e7071b4362bd670c77395851ec2552ea668c81c63656380a162f40794157b327ce519d2c8785d159c84f5b298e7eb72b9724e0b99fe52f39b1417d1b65508a984550cf7843088150aa889e843dc705410442170294bc333ff49a8c77bf29393774d2d1c15d33ddff7fde2c02a91b3a51998cbcd623f9e2f02309c3522e9f37dbe92b37f602ae82d7dbb24423da231882fd235287412483932e5b1a7b6ae319e2319fe204c3b8885afa775838a56e3567008b2e127364910b1ca0e24ed7f3bae53670c8bcdda188feaaab6ba2818db7b75fc93d0968acefb0fe6fbd159f062946eab21d9df863efddab229137e6491af2d102111c4a5f502957bd2c3220e9fca91b178d83594dd7ebcf05a63753882481da5154bd43aa260edc10c49d12f1f3749e47cdda43b53f1f55e5886013d6eb3537e7dd40df0638ce3be2872df32e9e1560a52a2c638bb51c84d28c3cfa4a13fdd7ddd03d32432defe63f31c56c9ab73c3ff2dc43a61b9a584bf930c366fd71296cf08a92611ccbb1f2385c80e6ef1b5d473a5670bff5d2c82b1a106a10e79203902ae22c8ea369b527ce76db39c5eaee2a53eeb4b738bd1a2b7c8446ff68f3f8fd9daa3822653b5f3bedfc0760c52e961bebde0dbc806d0aac7c015ad32c6b63c8fc6f0310cb6aa3a293aa3e0a72eb9f38ca84b28ae82798ac0c7e0f1822b8de3cc65612b11c4d8cc8c4c60430c66fb9e436fcf2371950e2902a4bdeb150809bd53156f570d4c962814e84f3e91534646d79cb585db98c868d3262ab7de863268d6507d65ff4b85c1658af1635c484972c0fe994e855006fe471527d4257d3d7665054a73a6b271cd56690d6b2739278805783bcd73fafacae8b29f614a552bce3d205b7c223412744c13d173c7d91fae10125a5cf871574e46907a8623e9c4d2ba56d6c043959813c4bc2fc0f73796ab41c419904b07171abc60a41c1b97dfee728e0c91c0559646356c3a913f0ce0955aaeca8dd3918c642a4de911c29d7c1e0cef08c05c0956d2c69e1b1a7a75cc51af9f96966f5781190c4cb1c9f1b3167666478361e0877dfc67f91992a7b812d4be7c948ca67e2bb8e98fab9c38c9419e3ffff98f3646b158adf3c6f51ea3825bce679babc6c5ab4750f815646b3bfcfc0ad76df5b11eeade9dccc2d3348a0155388f3627c2d56a769eedb547c22cde8ee487d5e1c414aa7a8d7bc05e6dce457232d0420d45287e453a3df6374248f5248f3723578f1b73541e1d9679ec7710ee99076cfffa58c55ace47c02d58efc6efefb96413bbaec881eb083ee3d8338bb232cb2a9f4d9b248755d705061a1ad8476de39d412ba5f6f5c2ae26efe03a17d0f54260eaf0240501402477e12f53901a2996958ad74ed9a3a2e87daaee5f1696e76fbdaaacc86fa125a24af0b1af81a9c657900282d7ac6d1ced5b775ce268123da603bf6d88b9955ef5d5f924ff554a503a4e40d6f62306a018ca7f4b3e254c3940ad8733324449e0556832abb394be45975c4a576658fb9b1d49e0f1bbae61aa58f6a25b37fc35df8bb25e8981b3e6962f7656c5b3754496e2a63b63916f0b3034da3b94c61a7bf0d53fa493f5cf340272687983b7c5607b79987bb1ee0e404dc4748f433164fa381ebe7a9767349877b9b1f55a699e53a6fe4e96f4e20356baa61ab4842f55b26ee917370c60b8ad435abc681ff4db7890aadba9df5ddbd035dcb36ad807f2ab9343fea797dac73e6fbfb5bf2d7da4a5925cfab566deb801e88f8e932ee6327dae67c74c4bfa90470d4062dd0ef79365d4f5fa3e235aacb8be7be9de0d83fcc9592353b2e2289570e58c9a627661c3c388c95df63a338aec604a7fc8398056c189cc1972db6f865542e3e29cf601551c1c2dc13a3f00bf29b699d0d50d8e9a386bd1c571c4ea24fcf99ef1b1bfd7588a377ac9446e9d5875036c501dc3c7ac688c2f6da55ce814619cde79ad722b9a741919f60e279f90f6bc8c8c4a374be8e8ad98a27c0c6db0259d0c4b58381462ce8fe23a18c2ef4e7be83e03f3b3d14c1a6feccf9eb78e8448beb6e00b14b579570f4f0f02c7f06520e6d38bde8996aa04b99219dec26aed3e270d17329b7cfcb00c9d29648c8d5f960576760d6c0dc455f9aba424d42a036dd04ceebaa052a61dabd1f0906789e06538fc1e5a7fad71606b75c09efc03fbb737fc5fb6133a090c0715020a99a8ef0232c51b76ea68a79bd2fd0198ac056a406032cb1b7c09feda4551dca0a72dba5598de1915ec1c1c7b58feba1ffbe02ec746b02310da9488e8d8fd5979f2076cc4dd9fc42712f3def4a75502df2c85e38f73ba43ab661ce40e2b5452e7788b44b03debb3426c9f3bc7cb45d2c234a26adf6ecca776fac63a8077ee7c7e6db63026aa9b72dd6fe5f9f0d0fa4b413175de424be5ccc348d69a0048f98cda71dacf9e18329dea4a607dcd0aac3180f3b49b3cb0192489ee478b88440370a877acafa5b4a06e57932b6b108a26fb4acac8c8adaf22cd96f30d81175e19070e1aa3b86cfcd33fa476cb45bb70c8b2db906874693a6a03f79f337af2fae82f1e97b40404f7c92c37946ed50a6fa3717ad24b13b8bda3fa90a74afe372d92a000b405c84955300df4981edfd9d8ccdc922bc52e5bb87c2319b575627c49e666b1e4e256680c5372ca5b2837eff10169f8cba8972328e6e0b2c8aa20b6041237c2c18a87a90f5ca58f7812fe8071281fa41c0d0cf689ea9d5f07b403cf07f0ce3f35aba59ff011ea74e0a647c10b1509c269a50c098f60d911712a8976f8c0552ca092f6321b1dac3e93e19c4b8f06c8e669c3257ef7951664b264b4e467644cf9ce53a016e7592ec2ea531c077160cc6882ef955948bad32e374dbe725ddf7208015f34dae211896bf06d2d93d9686fceb0373f717ba358d9b8dee973783c0173b563cc0280d5a7e95c15961ccb7dd31895c100d4eebcae2a662e40f1c6590a32b52d11d957f2bd6cd854c3a13b476d863ea8cd6205dc7791c5799099b7c9be7fe9afbcb7d1c3b542c4b41d58cb1988c739b9f4af6d3fe809ab2191f1585b7d5781037f43ae0c062557e8947e6c3521d7daf56f29b8a8637e8bf8dd5df0e0e3c9b88ec2c91ad1d81f2f562d3ec98b02038bd2d73b887865ff11ae3ef612159aa4277f6900961a4bcf464fad8cf2677d7636413fbbb9e27ab9b020f3f7fe4bcda9d500266ef1a37ff86b02d83e4746464d1ebcf0d939c97ea92039e9e3feaf3b16fec966938e55e6324ddf2a35fe96d09d561835546f0d523941503abb0ae984cfca8517b158735f20cd96f6b2a3d2bc1116b5d2125c2aab4b4032a2b52059c52c54fab7200f5bbbd19b86eed0f86825f4a09d50f595cd8befdcb62e5859b801073c566b40590413220ae0cd8189197c0d8dcf5d49cc25c31d73cb4de558a0dd5d9a96f8940b0c079af6f5286b1a0b614c01915ede823d42b62dae300292e5e9cbd4fdc47ef45a1715b5b477552f99fbad6f1206f72347dbae92a7b927e462b6f00806f64bbd04d8a88bee877e5a9b5bf0ecc642c81c04d6eae066fe8a6598948ddfd10041257d4b0d3b615c78ac47eba990816e0e74d8a6e4d14dab1cb7a3cd03df28f6be3ec6c2fdd83fefc52bf0e81675cd95e26d0387035b110e24f9f0d71ffb14aa56e85b7b46e054853e4063ef8859f258d2d3a16a54221da0405a910a857268b38b4830ff56dd347404cc218e4eaf8d17b85d90a6d4c59ea0d1c007bacf8fe7d2a2eeae2bb106948c448f75566a4078d3ca9491fdfdc58ae5a72032159fd7396983a69ebd4e6e169816b86eabb4f89fb1d9dea07ae5dce07a2a3c41d2a380409a7395d74e06f5500b67b871070b75085d4961686b8804ad9dde1ad98f0d1c9b1e164383d8746295c5c8802dcc2e0f8ba93667d0e787b5a991633ba289258813ca0ab275b1e712d5a6d70ac3a6aa65014f5ef9bb05589c4d9104ec0148fb1366f55c5bd92c9bca82bf43fab40ec31a3eaefc8cc8d9fcfec004fd40b1340b5cc5c9bc9131a83c28e97895456f5ac8672c43537379bc81c5d7f7b8f7b7e8b508d5a08f3ae9a8f0c70d7ce7cfc9f0a31a6a5e3bf23f012bd23a3962f8bb539fe632358aec53730516bca406bbae5352a146bb05b227defa8e4e4d026b3a3da01c03d3aeaf005664cfae45c5de0f27066e19cbd143720293471df835ebcebf7ad241be1cc9a349a0ddb0e2b5e27b52154e1b5141f4d199d7ccc3f75b2aa749656624b1c2894b53c35db1a2bc15270211df6e2b0b25b0753db1a1e7acd06da924b92538e7d44a7cb3211397bb55e2bc91234e174bd2c6e255c6bc2495cd0e6f5153a85f4c940c495fa6e9902c155de46e1b93715aae40c8512d15b081b55266a4eab18a5a044ac733155f9d18a2e9f2ed5f04b8d6bc97cee192c00a47711af516df517c5a23b15b472a1a86774f81e8a751256c9a7c4cb4ec6887d4bd679803747ff26dbb60410994952697a217c62340f5a3a934dcb15338d36ab9530690c97a6d800f0339e33572ae628ffc488da1a519571a050f62b449caf76dfdf25c0089522e7599fc0a8c234bc3be02cc2dd28852b27362e377dc1f8df3c17ee99af4007ca0505eff6cc83749fc3531c7eaa2a4b8914b6c22067477ab38d5f648a10f493f687ea125be26d0594a4131f32da0a8eb361dd9694942faf9957f9af4943919ceb77b42388427c2a35dc67a0b0faea7f53391c624d7cbb64809bae36b5f1e5afd30fba02a5a3b1c9eca41eb33c86c171667b38577dc506ac56380c82de5c0a8f6e30b64c3c7f6cea43a04eba4cab41b892196369b699bce6e9a5af1268f8db7f69d191704b252457d4b6010aec800ac71c9948c3f6866c5f0a79432c58f02c2e58d087a6d9baccda6bc163a1e2df0d565519eaf7ad3e3b7f3dfe820d73df19e49fdc387574ac2d57f9e9083d9d2f9e8f1455ef0c97ac20a4eca7f775535c87af6b73d5cc025571ae27aafec1d9c0bdef09439bda3ab0129d718bc7cf37e1448bd5d55b1362c53fb202cb81243d6136fb29736d5341ae6ea847a875131d767376be1f104d6717478848834fe998eeec3e601f12ae680e2cb9e384c63aadda6eee1066276ef65245912fa4f8b343c99f156fff586d5fc7cd75b2fee7919d9ca539da38768289e244f625088424027fadc8bd69ab354c26ee8f4e04da1200334766c7e05f3cf052e7570da14e4a5e299419e6a55ce79a1086b03eb0718d3f768f0891ed2da4d0c14762c80ab8a4da23cec7b149af742a0376cdf60adf80096620c8fc4ee9de73f6957e3bcfb25a421a6ee557ee45ce1216678a4969665fef8a7d101ec59dd23f2973476b837031bf4a9425db5b39d9ed8d90c4e1d10492e0e87d57b505d6283f0bce1d79bd9389e09f96a59b0ce195bc6f16719c8529eb2d53f1ff60ce193b3e2d59d832b434bcb428277c99a98cb2204c86ec79ff2d5369f1a14bcb9dc3106707cca49b711ab01004f9910aadcb3271851b928aa3cec3d4f8741f5e79272bc12a2e03f97da88c890c73cbc197dc498cec81f4721eb06102e3f806a1dc8d1d68b5bfa21e3294ad79ef81c153851c7272587aa162d3c7ee86b7dc09d8e9b065716ff9d4f4c8fcbbfe2f5bd4140c3e6102f7f69a530341aa6fbebdd21f5d68820f75513cc51963100042428ce097dd17f95b04a20b98a8782437dbd17c8ac627bfa8349e1362784b8a1e557b4a980bb1b762d79a2355ea2c3ebfb4c06b8ed77f39ae40edb029ccba4f11680b3ad657f45a1c2678db7bc4015ca44c0df7a6688979ec83abef2240c6216274d24e504b4e1d729db2659b79495d39f72f3c747b41b7e4cae9988e480e8a55156ccb812bf73b64c8133520138f668777a2eb680dbeda7a02df16582f2682b9c747a49d2a778df76ca75d51dfad2248f669b5bc419b33b211014b14a1b330e7449ae828ac673c3143e2c11c15b530264ed95a47e04ee86f2d8b2cfd6b3229ab97e9c1be0952c1bf26f4287684f35f0c9cffe21eae71bec29a4599aaaacd9d22fbd52a42951058747d101c24971b99fad64308f7393383bd1c4ee905f1ef93c089b1bd2a2fce2c92602b9765d2bd2e06ad09d2cb00eab1c87dec02ae4a9a97a0335cd28d10b990b54229cf92a53f68c844fc627f88f12b7c8a66d9688252a118549f7a58b387c8af43b7c5cd787e864726f6fbe33bc6e450e18f2bb1f97d0a4f58a510d30e64edadd70fb7ba301a690ba172115f4a24bf8b34ad27c8a9733d204c468fa0cc84f7e7517183788917f92d275c7de5c8e4bcce40e1bb37a9702abd1ddeba40fc5420022ad562fa87bb7d47d36f9a8640400b9f9c0ace5a1549ab7ce29186e122ac9e50c289b317943c257df9b1f3ef365d130190ef04f7906ccc4a85389c364d787a4fbf902891fea66a4e94bd1850ceda61057a470fbaa556e719bc77ac3d70335e1c7b8c709df4deb0ab5f3bc29eb92eef680bd1cdc2038f711e42ca1a7ca3bc1541133e691068154c4857540504485e07dd9d7bc358f44b3730bea486d63b227a13685abebe58b8e729b63be29b5f7a11f21350a6e50676eccfd99c3c61e7858b08ae8f84dae9cb7b9e68a4e4126ed43270842c267f179ed52ba34817cfc9de4a19107c69e032326a90b2726d29b2b329c015de24f279b97a7d2cc3e25e364b5dba0d7b0b00a9b3623c42904d49e0c4309eb1b90fcfaabf59f9d454a3815bd721edfe0789d7e54156f334662c463c1bf7a26dd00fbdddd87c12dca75a83c52521dc68a396c37ab4f85defcbd1e60f4e964e9d33bb118d628dcef82a8e14425140373278d42309f1876704ca5f4b7228d05fac99bc1800303dfe7ef70d66c8d1c888bc727cf87c8e451448e7ab99efa895314cb16924cea1704963f1468886d6159572d7fed1b4e3cb919e522498ad079df7f64e4e148f1631e7eaecdd1a0886d731c3106c91ad835db0a25771a4c85e65df30e84b76efe50a6f4eef53eedd67f5cf446bdb90a68d557da336c1442bd1397a68b74d9eb879e88d197a713d84e6504e0a1296bd483fa59a61d78ff2eb8c7ef9d62a379a79c78a6d7f1211f58c86a211335aaad3b61b7856f8e240a679ad303a97617ffd272dd5ce1dc3263e7b80b43d6fcf51bcefa006e67978b4624bdc46c56a10a5c09c34d7d283f5906ff7026084c2792b712e03992560569ce11439d1cb2918c7c0c7a466ea218d7ed4dcf0a85e9d52ad2d9d98d06010282f612bccccc5dee45ba15a863df7c7162303cd7f4fa837069493ba98f11d6094fa25adae097c8f4473aedd932163b24b06e69e322c4b14cd666a05c18df1417e648057b5e9f4a7c4ef102713f30ccb198e70b219551f8621beeb7e7a68461f36e8dea8b8aeafe1242b68ad82f9e2fe4133a6d82590217c7e3abeb66031a383856c87bfa2f49e1d29100a7db6c976b2fb2a21c11f41f58c3112d166896d2862da88b7eec88d201e97dd96b8dd76e065fb671f849f095b188a06ca8ad48b149ff50e7027e36e5181113d418209dc2c79953e3b20b93375c61fa9ff1499dfe42319b08e637eac2944101cc9a9d2868eba10b2ebb5231a6d575e44f41d8df16b609ccec4a93ca9629ceb09cfec5ab260785677812e64d4cdaafc70be9c67b7e0be540cbd2a928b1d0bc67c4f5c48ffe2fbbb25d23ae3c658fe4948d23a4d97265258c52cc45c92435d599e15af85b3418de5750033a15327d966a31da58f587d4cb5977e51c23bc3203cf434bb4daa2c5e751a2c7f0e99913e2b55a6b649382999cdaa4c74efb4171a796fd99280aa5eee70dc5687a1292bdb365038018953398b6348dec48d1f6755058ddcc7b5ea952002a440aa884aa699808c2acf9c4474eac22f147758c2f6588ff2b7f9a272ab937427bc0682a61db129f531d69dc219dc107265c9f9c00a6f3799593c0c9d6c7ff85357b1af972712c580c0b7a22cbced4a395add2d00b69ce6b227f04227be5bc01b7d110c52243929844fc2e1ffea419548c2aca196ba38b035428b43aa7384d2175cd7739704fbdacbe5aaccb192ac7477080655471778650adbae8f62141136e0efc26f493b7f12fc7078de800d4aa6432754e783097dfcc0b6fbbcd23ed07b06df5f54a8941f053afd56d3722ade23ec0cab8fd55dbacfb39678a4fb3eb4126268dd7d6f2c0ba80e634e23a467aff25c7d7529731591f02fbc66334986d1375a42b2e3c38b91b077ffc219bc83468fddbe7550b12127e36b1654ac287429fe3a5779a2534e3b4547972c8b2a87bff46fa59f139ea4d7020b9237b9bc5907594e603b7fd33eaf4dd9e6d8daf116b3a2340aad756f5087e72e52c174da2a3b43a2387ed34befd4371bb9015fcf5f72f15463b7a962bc852af57b420093cb6c206e4737299c7dee5cef3a4a2714d0cf556056ba8df96cd72f4ae9bf67b2ead23f75b29f48e94122b65339f63951307e1511d2af189b0c87c6a18cdcefb06612f39dd1529f6da6ae78661be6bdd10f0f07d8cb1e56979bf2a9a7c3b22e80f9bb05300c4cb5bf655b64ac810c6f7c38d8c21af4623d1102179110eb9d50dcfe899adb0abba96e8151df5f04d9915db7cbaa144cf86199b9f4757d7952b4bf88be294617ace6b7f4ccdf614d0dc8b517e66c9c7080fc106b701593e376437087fa61a871390b18b641aecb2f48883a52f3fbe598e59243449bcaa8148835bf93469ac8d78bebad0f3ab0196b613353b7d5599f756f4ed35a1cb019dd56dfd5926c71c49b3a8a5faf571117732f14c6a26c51245bbeafba238e61355747ae65b11e6d52026a4b377152143f92bcab326cca8b2c8762d2948cea127747deaa133a525147615db0be905c5bba9788ca589e18a55bbe0e9ab7060df9f6db5cdb18ca9a76ea2ec51fb4417fb9cca25af0f41d3cc1a1d5d8d3e34836df4a8876bfcaa29baad1d34ecf1add5909ed7016d1e1313928134b0e2304699a8ee280e44af289ab57bf70d16d895edb87b1ef99f68c1d3a05a67ffc79144266648ef160a35ac9c84938b124e44af1a6f77936d14da84f7fb584a6b840877168a6e02a384eb9db9413496a753ab84ef7aa2bb1ebdf29b254c152fccca2b1924bbebf37231262076ca0974e456d287a7424f1f8ca4d476f1840a452636c53d4b2d77aba2a878cdac4ca687e1c94ef8adfd82f9bdb3b7ed787ce12613deea207d8ef911e8005bdd0ed8dbd15362799a8f59748e83c5e351a95a482368f35ac20fcb7f360b03af53972b44ff8afb1f42b9c6f40db2cd6834dea0ebe1d560b999f3523d5db7432e7708a405d74c77405b003f6312ac32308aa2cc89e28cc8385405452400b895a8a9a7b6209420521046b54bd26d26692034ea60b6b643de915de4c4e82d7b1f6dc13d0073c5aedf7e2745f54ca29ce99aa0ad2dc0ccc9576ae49c94f5a207b2baa75cfbb0c443525f02e95580fbbb1197dc149dc49043a07e776dd49ec6c688677a18bd1e591eb94be2315850d6ca7a3ca1aab9e1c8504d7acf0fba2711ec687a39d4ad6d629f75608df7d42a940cdd0d099c6bac5d9750fe01d37b3d9010aa2fe1a40873ec630e05cf2b2b6e8e72d702ba6dd3827029349dec167069c858918683c40c423a068ac992ba69a63a2c79f264983332196a5427f889376f96ae567611fe97e1bd26206e9dbc15927a87af8957512ee3d895702b7ec50658ba495fbb7a5460cee99711a0fe684aab6fad2e40201650ca4537c7f802697bc3f6a2428968946bcebe6d694b2b70227b7ec3a27de2b9465059ecb60d0bac79b0e3142e20b06c0b81bbf0c7448ec6d1bfef5342e3faf101de564c1dbb5e9444dc1a0287bf89a7e5335166b738f08ecfaaa1cce2baa097fed0f592d927ed68a68874666a85a056f2f896455f41ba1586d4f25699ae1b5c9e447610c0b12ff02364cf0eaec6099c3b679c7c125c796b4a615706b7fe74db7eb6299e4b87068b92277c541c255176eac63d85d73380cd9ef33bbf091710f8986e14a2da1ce065ce380df917588a524452481b693ba1be0a76cb2eecb87a68185ffe9c12c96215dc622779ea472afe4b78f22aabf7d49cfdffb3a63a418a91b8f3331d0c592a3d43593ad6ae570a406324402271e986f514ac2fd711cfeb7ae546814cbaabd729af6886b6b5fd4fff954bcf6b9335fdddb9fe3ed7f82cfbbf807667dddc1f65c109728407b733542eba7afda5e3b13e514f67528853b96b0b0de375b974ce969c13efc86f5e275e0400f5b036a096066449778fc3da9c2f26a329133682ee46c7b962afbe710e68a73eb19cea767f4f69c53120fd2f5a22961f78bb33ecfea7370e2314665beeeec5407c3aba5091f23911b4f253b6e67c2793efd3071937185cd3e8f05a7544b665d3b9db04515dd10424ddbd4e3384b04ead9fddf94ddc05a30852d5ad63fd32346ffa357a1cc5e2a7ace740cd5a0231841ee3db08d585bbdb5574361c2c12ed06b423b0e0a5f411a7c1df1ed9489302d700ff127b35d4681df9015778633b47a51418d6ad9f54ee591fe9c8b0ec2811fc0155f4d98e386467251db992bb00ef4862948798857e1214543f61c3641d99742ce6cf136012835f663e2dd42354670c077c39c47adf919fd389d5d7e3d9a237c5a8c07542006e2998f59b5958d026ec618c9cdc1e7c5c14816b1dcd2c7e9f0bc5817cfc43da412d6821c16d40795a57348fb97aebd01849cfcc2d66db035e7fc27dd5c64f54a39f413f7d69f6733c7ef9fd28aff112d5cbe6aee39dfbd69d5b0373b28e4e3477b54a315f4d41433e14bab9927e920d31ecdd688dcd5ef637fce485934b8a1c904035776ff182f5da107c50dcd69503ca38de1e7f3a5d5b186b33f39acc74a1c5bc6acc499b96911eb65b711e8643bda93c6763ef8a1a51024dcccee05899f3ce1dc45c39acbab460fa31ce2d6134895b3af74d4caab5f2d8b0189e7194ebd30311fd759d0967a846125564cee0de2ffaa26f36f588c0bfaa2525caab4e7d6dc200348d95494eb16b0bb6605c3fd1c7137cba228cf52876feacfd87c12e78fa2efa8ce8d4d9704e46d29cdb4036a7026e69c8a44f21d732394adcbe3d8d2a149db892493fa706f06855e66ee42e55cee84f99c5f3fcf4a8b0415adced4fd9f465a3a35a869bf95b1cf52a1ac4b2f9a02cc2cc8744b25f3b639697dac851788a6532586945949ebd31942952bf01f0a7235343066c813ab3fc2b322a330f3d6c1895788c5c02a8757cdab50269ed7707eae9668c71f91d5593b1c58465027a2f816e0e0385be6b5ebf3390fa8f8fd926cb2c2f783f0817d3aa657ebeeec367776282e371cbc0b330e9f1348e7d2626f8cbe3bff34b0dfd9e1502dc39004eacc1f42de36ab678acf2409996dcc09a2c1880519395d3a29b7e7ec85a43c22a027b83c4a7fc7da2fb3ee5ce754a8e0d50c4829d046561894ad2323b4758d24039361b1b756895626eeb9df6ee55ae1bf78b9dc9a6cbc859fa6339a3ac81c946fdf926ee453ac837e85ead009ddffe487b019c136b9d09bdea8664e1c102ee48d1877f2e05ca67ac4f4cde6d7d940fdb99b592f9c82cd19322ff75e7e0e10ae66230ed7af3d0a6265798c516c86ce97321daa41fe9480c13778ad553812c4b2e6acdee04a728b55609459f5088bdb5519856d50dfe419e5ba3236158bb193671b12ba283b0f17c25c02ef85c09587f8dc1668ec440b1d88a137cec066661d0492538ae8b3ec8c4ff1aeeb28f044bd0504ae2ef67a696be17837aa3a31635f726eb2a6c0cca15b9a3f269227b241b2a10531b00e081d2a1654ccba2314df6d4fa5f7e7abf9dc1926cc6b602a19d3314069c3a8fa291a73b21cc5a3ab842b7bbb6568cec5f2477b9d46928cb73e4d0f48cd347ed8107bd5199da75b21890fa31bf39d7e7454cd8e1ee6bd4e8aa8cb979d1fb3621f548a45f5ca0b17f32a77dc3e20db60e3c811634a550f1a7c206c83922c6a2d16eee4e697ff9085e364925194da5519ff8e735f5412405d6866d6b9a1964147abb0845d6a98a9aa74eadfa420600d69642b689e229c00921009be9c3ae7a6b5d34fc9ebaceb2a2700c5e9c5f345a16dc273ac26d2e381363ed937a22fde0c01632531dacf1b8fe844b2ce3398f93f960fccb1247e8301bc87b9c867ef76782737854d521d84af06922293e4c2c2e2c41f0b3b440a9cdcd7fca94c3b75de3420c4779bcc996f974bca9d58814ce17b40bcf49e09641a162b428cca4d18483c178d14fd2e0d6e8c026748073138542bd9ab87f22fbb35bf29354ac76a4750aaafa903d2e23c3270f38e09af1cd242cd1f0592f9783647275bcfc2e0837096a33dd7da88b0d2113525c558254844b4926e29a94d2a224a23c3c4ab544e44900df4c5e306252812efca43ccd20c5300f2a7b5286131507f288b89ac923d1d4b97e093450f90024ed0ad44f2bba76feea33553c4490cf66341fd69370ca0fbb11e190b4e680c4736cce77facefd4afacc763b87717d052580b75207f915bdf50d7d6ad43a1aa9d21f7f277b2a9982076a33042119089a652d8cf8e3de4502eb347fa0f7261aa5f6f946348c6376a7197a5b64398f1a1de18e40f05abe8bbdcea3624b64f0cd9ede3902a3e153d16c879e5a4c9c1be80e3ebfeff92c7cd274eecbf46133f5adad33e5b379a1861dcef095b277ca64edc1a6db1b276f08b3b4a5763f9c4a4d8228794ecb76417a5a8dcc9aeb133d757773edea6177d1dc5fb41addd9a39ab7b4f39c2a36638f501c8ba426ccc0d4f8616ac6d39305c9322d6657b6a3b9555a9ba23d59b82dd9839340b8ac25f87303941f6615432f762a9a56512a287d58d3d4f02579d11b196138d0a0fc289e4901800133492568310f79c9c5592dbc7583ac70a1f0ce683d440a9c30fedaa6b4f571f0f112d3fb057dad9b5cc698675d94fac97fb62263a4c3cd7fd4149c41de722e9f292db5695b6550f45127d55e4a37aa36e0ea289a7457820e4e78665d87789c3e716f403fc1ee370a1542e6bca922c3d8754056648eb54a4d118e4f852674d07d28246029b5d9cc180f6f139ea8afbbd6ef8d41f80a151abae24dd04058659c88212bfcdd503e5c1e1649bd0fb801bc7f538ae18d45f2a58146031438e8079a0733f09b22429758ddf457379f3fbd364c3bb6530c0e9e4f3f3e4e05448881f6ccdaa7665110f85078c0c644b85b46f656ea29416e32c5782b97c3b2f2e653deeda5d95f13adb0a9d3888cd2af2f84816119cf948d4314ca65d6d909b9f3c769d0e4df4601a1525f8496401402562a2d03b01c4b6861dd89cf2742796ee1547cbfb384f6cf6ae15f4a20e2b5aca6a8727afdf00b677942d3d396eff8d4ce7bc20f83ae138e8b0100cbb574988e515ed3a76e2e2fbb35d10232dfcd98cb83b27e3f1e71a4e9e58e42e61e4e45843f0527e9f8e5382de989d7883bd69b9e8e564c32f712c9c959dfeaf64c9b29578b2c93dd6cf838e5561ad8374bc582e8cf7ea71ae220e2cc55e95b9ebe6f6ea484c71269f7436cecd6da3758d9da4b68db49fe962eb5db255ee1740ff47a8e42c93b988c3fbd4163415d3e81b6881d47ece98c5283d0780be741df5aa7b6575da141098e956c1d78d6de8a2e63b914ccf1591125fba61b0c3dce2a2a6faa0e37946f91ca7001f64135d644d562bf9c92935df18a32199af49911a767e73af90ae9ddb8660176b4a14c836623cdf0053ebb35af918a421119380b68986cfc6e46c5d544a872d400921e1e5662f82b41e7b9adb64577ab89b3ec4c0b800d2e087f8edbc62ee1aa7ca14a582501ea52b7da2729a9731e1a16b4396895388099939c9956ad0f24f0df00e3fb9479539bb6cb2cba22891239bf72c33652bdc45fcf45b1e69568422f862388e55add49983be86f2e13ee5652ba0dd1f625b6fb031c1a642609f85a825f402fe26364cde8dbbed62582042ef152cef5da81ce50ccbb045dad7eed88410dcae306a0df56c7e61f85baabb5a4912fb145b739b2586d062bd2677f7a4547f05fa968032bb7233db6c89648c961a1b2f902b41fad8c27eb752b40d9b638ceda0b279f9841e9c8c2f778f4b4d20ca8956fada195e50a6cf87e08f0daedecafe847c0d1d2c8afde9bd4b40b12db2e4b58f47681a133ec115f882711bb37b36140aa7ecce74161c5aec1dcc20353cbdfe5ea8ab159f0723a187a3b31cdaea225c949a556adb7b429414dfcc445a807118a30b1784083c61d404cd92fef25e1499ecfabcea8c10086bce964df48d5d642fcc0bf03335b91a83c0d19423262a0520823cf9462396880e6237cee603b59b2147371a9856b86715e611ed5ce311942ca8526f942ad5746094dcd5c307606b3eaf727c9482a08c5807f11b3d45017e3492fce7073028d69b5a51b12db64bf451d7cca0700e61b399e18dcd6c112b9b35429faac402fb13fb1caa85fbf84dc0e59529ff1c5d22a7e3c436b2a7a8d161ca787704916704978fe729f4613927025b3cb724f593b5b11260889bc5a583abd2bc3eee2f8afa7cbaa552314e78d8b9f37cf702cd5132ee9a82fa575a4b65e013e34407e3351229eb364150c46c584ef41eb9ef2fed29b11384b74dd71b38a4d4553f5d10c020c02f24f0fa92d686b969a739f9f7b0b7a0f3de1a4dfaa22ba71ad534866b7c1b7f0fc5bc381df02a5933ab293215e01ba3f50603622916bfaaba4484af95bba2b78ea0e8fea4f349ace502269e93bb6e7fa61dda2fed3dc5a037aa1b8d0cd2c5a713103c4c4cdd8be208cfa3f9b178347fb64a62568038dccadcb7bf3c81eaaf3c26bb1e16b04fc6292eda54ed0da0c316ba616b3b19fb0953f257aa051d423bc4728a0ae0f167f75a8c9fc070da94c24f24193c4cbfffb3d898a79aa59c73224b25f5250577bbd2576e34cd3337ddee8ac616622363b25be5cdc26c2d12924ae51bf080af766073a3548074c7396357f94853544df48010436667bf390f3da9a1c95935bcb03a63c2bd63d0a3e54524c7e665e1636b55cd9df06f2cccbaa9d07628530c95f9b21eba2022a2f24ae676774d93870da029cbb81a8862be428125fb37f36fd6a94d47a111bb4a42db216c76a956d797f87082d78e532b30ea089069fd333f8258ead77db594a16ab1ee2f22b67193830ec73a40b525b743bca2d80f4653cdd839c5206ec45a4566ab06f8b2120e6dd28545efb99ad52ef6e2097cf39a4be055523d57ef90e1a7f1a99daa41894bbbf3c47b7337f54eb99972f4732613297dc28204dd9e4d2b82addad6bcf72ba9a64c782e24970c9e22cccbc4bd9b930057c5abbffa1c48192a6970736511a6553e35180c3d15f721ca95d552880f6460c583f569eafce74cd9a92407dde5773e8eef4553b92cf92d93df367eda75e158e42e86c0d37ffd6d0d729d5266e4ea4776b8832da45fc041f9e1ed6dd73a05a47f9754cfb497b9249b7d37091d5677d0726a47e2ed09830a86db462ed5a71a77a2c53048b9f4463434863e0cb7d2780f0fd2be44c35a7c8d3f2f9b89b8487ad1ca89acdf3bb9024cafcd1ba70d5dc3404fcb15b41607016fbb04ea292c9d5cd30ec3fc1cbcea4e5d0e4fe9667a897f47498abe0614f6ce3578867245073e2092a71b84d7c74093890843802c698fa7e124c0480f6cb163dd3107905e399daadc7e08df7603fa5785cf3d551b71d1e9a683686f6915228d4d39ca416629ce8d06d283564d4640fc121bd8ac5ec263facb250d98a75ced01b2ab713f4ba0d0ec6c30b32f8c2fa51d7e89e90e88d7f669fd07f164d58fc889f873d568569a41b0b4f32cfb13865197bc9b98fedd291f707aea2c0b801c76417d40d84f679a63e41d61c5c1e84cf69ae0ee25631dd1ff544a7741799de2997dcf873c7a0a30132a2f0b15c9bf60d0d23aa1b218686b90cbd4619d8fe5666b0513b1d6b175c1eeb6c58e281407bf67e74fd544eb82d12ba143c5f5e3dc0fb9d3b43d52733f9ab09c5a2106aa2cadbbf64cc8e1891f1f3a0bef9f5f60622ba426e995ff7c0bae395e7d7df56098b93a2f68aa08276a269b68935a60d6d3ff312cfd952c6b84f793f8e9bf61763d43c4ea8a49b74688083c8d225a3827c73082c464e3a19f331d7f709b3d26caae88575a7b49675c2a571901e414bf25b29a3e3f26e40e96304dbb516172fa1803db661ad9dbc0a6701dc5e93637d2792a35006f5e74e03f4d9ab49e3716735af424a2a816d5a3a30012e1c9a8d055cdda63fce9b19fea2f5b8fa22d7795a6dce0a4ef2bd6228fdc9ddcf1a902ddbd6895a10f75ce42f8f340a970aacfa01dced802d25bf0a693bf4bf32cab28f63fd4cd443a3c37b38b2a6597e8917b5d7ebc02109890dbfb88af937301358edb0789bcf356fa36394d407ea631aea30cb6665aaaebbd74ab1df7673f9463240bfd9db496521194f26d3d9835909788bf4978b435fe225cbd1490e78265d1e66d861c9dcf176fa60e3f043a428fa2fbe217c6a3fa8c5a6e998b2f388759c67569210fabd163bcb807a22e0e69a6f7d2c0be3841c9e2303d76ff96298ec16573037b925708bb53ecec8ffa8c41360a31807a87f4b1d4cf379f1f557cf3961ddf9c38b2f221ca5117027de5d1777b7c379d77ce292d2a3725dcdcfd6f714af81aa4e7e5679de398bba50590c980e293d3ae55566660049b21f4023b32f3331c509b17ba99f07c8dd7de36a17bb3b564c987c456564beda5342f62f674db5833aab894d5ce103c0b0d61b1d726c98ff662b4a5fe0ca6e7a8b134bed612066a72f5fc6ab41334eaa635d5c51066e958e50bb9771f7bdf136e67a1269c6a35eb5c75ace68d56cc0f8feb9b4cc9ab40de8f533a56f95aeff9d12be705ee63d264c8e0e2a9d3df295acab8e0b16750fce1bdbd4672c5ca395fc43c5abb0f5cf9b7089eb3df41dc974a5aa7252df26ae12469272da2755606132819ebeaa124939d2545b8935f00a40e33a48dc884b2c6486305eeb035231e2e155c13d825d1814813221647bfb6e561ea8882c2b6495d5bed2d4897120f3fb6a9e5f5cde48973b4beec8db2061c417e9d4cc10a19167da1c6a4660e2be85d0398d869ae9af09ee7ee67d7db01e9ea48bbb23d5410f55e5b4052b0eca3bd321f548b9b13131016c07388180ea10da41efc8dfd3944168538f0f1e31287a8a6a1eecfb04d9a6c14dae96aae1fc33e3a3a08573d77d56f7b961081030441cbacc5a61b9cad30c14e68a9ffd7b50964901d1ee73fac9c4c2e0c8641120ed62896f2141e3518c72036e907600f1bea722e7d25c38429e6c0981af7f92051e8fc9cbd73531f5388f7595a7f6fdaec3b3ad36d9a1c988c54a733de5987d14a20bdaf1e386b5660344e16ff9c02d5519e0622b78bafa113a54a0cd61bc19044dc66efc2f9e16327548d2175016a136647cdfa2689216453717f3475151ce8564ae4374b8c74ce1f5c75300e13f4f6e8d7de05e4699f381f5892d9ca1909a03ed9ee289ba2636480dbfdfa7326fe91b3744c623d742437f92194d97c032f6bb97d73231693d7201ca153817e3c1e021f4e2f9275288b88ca81305afe050bc7cf700ddd5fd1b39868f07195afe578837fa6448780fb0c9449b38fa56cbec9fca4a90718eb832f855b3143a29499da024716e0efef7ad24a72839b0e67d6bf6c766938a8e321526e86fd9eaa2438220db62769361c6af48b3cb3b30c0cb5b08ec80f988bd5c1efbbd0fe976a09895fdae01a4155d33dfdb257c8023043398fbd752099fdef2990e900e8452b358c41d505534c594583c136dfed7361ac70eb6edb8ae011dfcae44270ec2063e52eaeb3c2d8836d5be6affff3021561eb14b3672c03eda6f66c4bc9f97276461271b88e5fe8cb0efcdffecbe266e4d2565013410f63c9f844064c5075eb1410a3467a246d806a8f7353089f974bc0fa2e3c9d6dcd7a79081bf3d09dbb41bfe3797f162a19721c6dc85bf7710349b153a428e404194d02b4f0ba6abdff388a04ca525fd826bdc68a649b9da4eb5ac42a03e9a50f20a340e314376367f83108da95d2da34e1b39c034c8a415a50f89dec7f307f48475f2b7781d87d15a654cf526cfee522b787a67f0ca4fdb800d4285c23a6c534712dcb8c4878812f2624173a336c70b0c05530a693bad7d7c0ea45736b917092d40716571c1dedefa51b2dfe0d211e43dd29b5ad863a1535c9ef94f6f3e83a8f507f8c1887fb203030689fc5522b7e1ed069f0ba38c1262c7ec8f0df6f2c1bce3a7931ad1148ec2208305742ed3a3d252c4588bb2ed8f2fc86f4dfe8ad08e7355c30b94182446f2a6e66f602db09e2f11e2cb693f4c4a42ef0f6c83f820034e0404b33019273378fe6ab6b3596eb0a8a073b7725b31990bf55ad1533de5e845a87b1b4dde5421c816e084e7c55d2a6e8c5a78859216da90c9a07b8d857a4d0f94f837d7702fba7568f48fa1de26332a3a9a6321cd094816e9c2089ed98abd84c2d071998417dee86c58723d4ae67ca8ce5a8b1f9dd696c469ad64c6c0e133c5c47ef4254de52b02b4111996f06a158a36ed99e113415bc58cb1e0c97048cd960281a7fa00518790c54fc55e5f45ad454f3ded5329079bf6a8b71bd1e243114fe5c207dd98ed38f59ac4ca31ec1195b923a6741279644382cf191f0b33b099c5920636ec62790a4229914546a3e8d263065503b827bf74f21973d1c49872d423c252a7ad3b8d378f2327cf82f9e4dd29f802708a52fd718d0acd2b453f741efe48cd72d432c58dfe6460b1afd37af8f7d5a9ed45a3f08e3042dd2715be80cdcfe7c13f5b60318fa8b10b51e884dfa87d80b84af09c7bb958e60ae8ef233922eccca3c48ae317c944846ad8c5b3a5fd1c9625eb7c774683e70df29032797f4a42ed72f549d0fa6c9649796f69dccee324d1d0c2c76fbc8c4a98c54850f9d1ceda3a1df42dc6861ce45b760ff0521d581064a910ccd573213c4cad8bd7dd9e7ced74f33728070794308f919663d9e42a2073b5ab7ba3de555f725051cd36550d054db63c59ca479aecde8e4fba05e0a490c33a32dc3b8f6cd7ab0228514fabf7f6795f9ce3dd92358e90fd375f9d7015a7fb472504f70424ff7787b0eba65ca7f20e6654691dd06f40d5d596131db61281085dccd0a484a0b5caccbd0b01ad264445af597e65cf9379ce7bbffb0b57ed4add88ee53e320314c020c451fea70e5428f04dba5f150f2d306bd5504e2e36ead358a020f20be6537f8054f96a3be1e92bb4d3da21639a58ca9ba059339a7f7e2a6e9a608841f70aaf08462f15ee0c11a945b07609523cbd511676e39ad95078fa8fd67a76c3fefb3634bf88a72eb41c2956486815c15f009ce8c995d646dc5f01e557c04db9f139a513eb12c24763042d301b3a3564b354c56b037ad64c51b2dbf984ccef33d4eec521e6e747c73f9338584bf1401f5599999467f6ffc9a0f5f59772c2e5bb8aff032067fd10cd302d90cb9e31d85f4eac9152e7e937ba221ecdbffc4a13b55b45639396fd7f567d113e94150f773b170dd999db930418976d4c4469b5082ec2450a940818e55e90c8d9a3c15b92c1ce29e336c6a0e3332352fec9a327b46d094b1e6fc495d9233008168ca57320eeeb97249fa094e7f755f9dff723c7c51a1140b76b3f43a5cf657e0357f432686a021e616d82b619e509d955d37c79bf811522610ddd8468298a6e83c0b84e5e5ec9a4872c530ce8393f698326358abd0520546cb713b6216e6383c9fd6c915519e5cf913f2e80c2647f576854d66320b4547575d1946e0065245bea9061fe27d63712e2f0d32c9aa4364998b618bbd68d0e70d585a68b0afa8a2dee6e21c5b19be6b81e0e7a9806e3f4d60fb6a12b5e6ba528da86180207a10213a3383a74dda9aaa258369dd1792a77e02dedc81689bc6eedaeaeb92c32020b1bb16f24262eb3ef864c31b09fef51c249b13c1f47762de1c254db14447bc31aa07cea4bc2010640a7aaca7e773b4a0f0f91672c26e1fc904fa1ef60cc0ea014d791ab08fc997d93077121de7b4b7ea7aa9cabc41ab010ff5f7d0ab57f2909a5eb799e4878cbc71d6280941a842f698b85758c918499f1a85e07584ef3cf347ebe7f67d3204e3a942f4b72e1e7e660e9b768f3752e8884545b31472bb73a2f8f927a8a8fb9a2e0ebf137a8fadbc1e7bdc5497dab12dbef3b53a77f5e48e01ea8bbe7c65ba289866c34f7051d578e34c8f131079831f1b29c98623a2aeedabdb920053acd1408341cc636d99ce6d268ae70b4bb1955a0c3579a556f3f7eeb0512c5b27357a5d654ce4f3d82393e9b570a9f53189ccc52d1578ccdb2b3140a376cb012db02de738a24a6829fd17ebc842c28238ec6c6646b19c3010b786fc0998e8f9bd1940ec6c68043333851dda45ff29fe7c3e0b5d008f10b3ef181f0d52ef585068f248963333651c4ccf691b2f95e0861efe22ee29a93ccd0a88f27aa101a588d4443953af95885eace63ef16c68e8a836b71dcca9af49680bd67e9ff07ed1871ddd5ceb136a3a45a0c364e3878fe27d59b7db815d6772d063e09843eb1fd805012f003c2d8307200e207056a9187d7674e43dd56eb40610485d0398e319014557abb2aa71e5696a19d73de86a9b386e83454ac4c39e33478839bd3c3d4434f8600699e61bf4ac6e3c8dfb3435a3534347e9f7c4c0ed21f98cf45909e23f6255741a4127e3fa9c45f3eea12e2773959e0d145ac6e324cd0131e1e94d4f02eb7fa3a467de4880dcc6b97c58b13a43dfdcc44fabbc1fcd523a8a68074f6d0f163a5df2165787fc5f7b74625d10a23bc6dc40dea94d345d4d0296273318f22d0cb42eeb3a642153b56f01b4d16a138edc9d88fef557c68463e9cc8f0825c6c2e311ea403c191ca985df4f932c6d4794e41f1c4c967d593096a76d86608f564ab11814d17f4d65be20619610b3612964f61988e394f1f5636378970c5cb781ce9df4cf264e8ad3dc51496e39c191ce59a12ad375f1222e633135e9a488e844fab45034f0915993c67da1e72bacb278257711cd2351f68ad8792673cfc8fbfe6941d7270047e4ef434c7b6cede050fdfde5831dede0cb8eda4beeba885ca951b71dd3d56233ed94dfb846384c36649cd8424823fa4f09ee16321333ace264e687ae722e09870d454d13360bf086d5ba425b8b0d42116c641407296530932d489599e16168b349f6b340524c2d4af6142ff4cb89306282a7f38872c9334adcce92b287fb8c1495627f29cf3f95d538e4bf4fa1e820b6ff3612a2efc725d14bb900a471f5a5000152db1574bb5df43f238c5e6c12874b5c552a8e935e54826de912eca03d94059767608e69e7b42b79b34ad011e565c51c846e78384bf5b8beada9d1f2888f64e20064c2078e4dbf874e1cd71e90910bf6a5e5366a8d3d629089baad8b734acde75c8560b8598acc0cfa1629f16d89a01c80a8a33097db4642ea18750b391cca7b6fe95dcde9570203d6b40e1d86bad332cc4852e4769a9c9cecbd17d5068c99a96b96e172c136691b1e45905632dc36a938739876569ff674661cbfbd99c2e1f2cc20324052a79d478ce6eb29d0a64e92c69dbd52dd65b7876b1ad6395a67eb71d6477624aad7ef4b790f2c6906b5f74b75ee2b1a7a77475b2a4f1a28ec841e4fa666d46fc95d0bc464581a4d9677a9bd3f465d6d31bdd0d18392e06103e4faf3a17d52e7701a450be4773961e7ab29ec558be7d412b4875f591ee419d2c2667d3455585898fa0af14e737d4c1676a7226af1254e2f9b815a0abd3762d7095290e914a6f29646ff63d2c2f93ecf79cfd4316003b47db6ad78546117b2b28c4676fc31b38790efdca1913c12ec9ab21d4951374431ea0324bc976242bbbdab38839ef69e7c84d7f9ff50fb4fccbd9f8720f34fda6b21bc381d4966c27cd8bfaaf54f77d446a7a49ad09111afd7053f37a8fff5148d8e9cada78bd66b5eb42fb8783c25c43bac8504eca71c3c0bdc08be29ac818310116df6e08cdb392db350ca6b11e47e84e997f6af3af7a6ef24a433b545be9f450e3ad26a424e02d46e0013903da1f031c8c790343fd0c0bd5293a27ca49fd976897361d55c63dcb3bc2d9a3c2209850a5148605a47abf842bd8b67b65a36063c8f7c10cb72bf6c0b041e94013474ced75debabf1f212fa5c7243954276dcced192f0d840e57ae45aba50ee194dd0acb9ccf91da2992c1b19e077fff3f3fe249cbb1285875f1ff7cd2b2e60ebbac1794ad5a6fd5dd552ba23281b60d3c98c760dd0ca034e82fe7377192f7551bd66a32e3375eb97e976f93f9c067ba364556caca34e0d006ec3b5c1bba250d5e3e7283543decd5afce52146fe3e5070f07eeb3c1134a132ac7f9908c1cafed1d2dcb7aef68cc30f336b31730cba73449ca930f49b293c6337b1cb40d716463bdf84b69d3b54184cb6c4c717a3c635d6edccdc405075e198ed66dfeb07b4911cae4441d0503680b86537a2e34c400e503786d3bfda6c1d79736c5fa6b9f92b96eb4f465933cf13a5f41f2add37b2ea53ef47584c439f2888c779e15ad9a62a4951ee6e5bc1c05eda1a017dbae36bd3ea4581c35b8da857565b7782bd1a5c271facb1208d6730b32d059215f9023c11194b27372e2a64be2436c96c5f657f2231747a853f425a9c45dfcf5f84628dc91e69a20db535331895f65ea082ed26419786c70bd2e84c71154d212bb79d6149daeb5cccb189d0b9b2ad47d4f6567aea89408f842e297ef9bd539a9f3f06892d2b2ec5b4a3b61f9aaa514aa516cf583f1c213b60cb7710ec464cc59ca7c64edb24089341ff0b2533950251c1396e0066f99c9ac34caba4813ff491946e9ac73ae3da40dd7972af0c3a17dca7133a13e9468ee3ea3a21e6a76b5c8939e148e5416b21986909ed5718b23ca258e0f6e67fe3a333ab5880d014b05a49128c674a110a4fc46afabc61657e5b5ff404a790ba9629d951062bfc994256f010352d2bc2d80e44b7ced3478dcaa9c0b2f942363c077d4022e12c9221e3505784d56b9471c8cdad22781f6f0f5a32a64d251a31596ff8ced9bf102f4eaa1d72d039a094bce10f8df54036c57aa9c7b2e44202a1c9ccc0dede933ea446c33ef34a586e5f0001f3f551b42c49f70f30499281ce2ffca934b5b16b4e76c44b0967447fede2ccf0272397e11beaa82adb514bdd07632f36395bada23c1334e805173da3aa25f25750ca395f1891641cd861e4389f0c22c9926fde797024b2141c6986daecd3ffc6caf0e8b9bd61421d4a5778675edd84479a04674e146021f98a6b4e886d1218685a5e41baac2337de31c3149d3c60886d8ddb668bbd10134c7e6e4b02b82ec8d420f119f2a16354712f861f4ed3770a1d5da8fac6fdf13726cb296b67852b50c2e0c0a490ab7828e6b06b8efb39e5232e3378477567ef0ea74855d981d51959c7f6a8b11ef2af62e32b3f96df32c700a6e9963a8f02532b4826712ebfe978f57143ede1afb7a2b46b1280311066e4682910a26e8f74cb1e141bcdadb69f5c72feefc3d2bcd8fc76c5d9fbe9157472523bbd2cf2301ab2214441ed6e9c037a072aa685a7ad8c8165065dc230b0eb7f7ecc7564604df4188b2206da461d9dd79292b71129dca016056319a6104f48b896327ad23df608341749f48fdebebb8a9bd5543d5f9e69a62e56468e917ac878453d215c28557c40e1100c78c1e9ed959a3763d609307b1963a41637066c3df422f40e39bcd38333d69148e1db9615a39cf3032c97b437f3190d33a943904d803b0a805bb7e72aea0c5780927cebafdc1adcff3d6431d58b917ff6d4b6cf5244fc76e481ac7359c51fc1db9c5f89e1661288cb251933c0a6d2d4d33a20a81f19b1cad334dedef4d83fcab67bc0d0ffa4d83d9f21ebc8196fefa93173bd0192ccd8428237902a2b0bc83656ea3416d67c50f61179ce1e46c7b7b13c9c39a7e367033d07ff99cd27783b20382abf2f94b493d226ade0093a3ea915eeed8810f369266af652212f114e55de6e7acc24757292946ae0585e818149ab84150c6658c5bc90004c40fb2a4815ed1b72bfa32ba8565227686856e8f78f7c13ab4542a5e709b0751fa5da6368e99dab12d02ab7da57cff9c400ae4feaa0dbf072f63a6d39ded3e8555e1adf869e63fee68a0604c82ded857b41544600f7b197f79409b8be66fdeabd6e12be2c6947db5e2d493725c3cf30fb6ebe1d016fcfa8b1fa60a1ee2073b95c4995790cfb5b2b3d48c80e36cd23933b30221fa2e7577611ae584dbfea7daf6a676aca072e497cda2fb2a88cce33b1d98b2f70672a7c126163e09c3996bc987dec1765b232592fddcd836d3e9a820a9e73b84caad9ead35f975968814e7fc454851dc8472efc613bb27b825bbe29a16e0c66c5b88abceba3ea75f37493f4d9734d0b10b1702f3457be3c53b952a185ec0b516831df24cb6949e3798bc33e5335e69e8b8d38f618643f0b78fb55f764153b0e715a6e6156903f6f7871a2602f5599c22c30a0253ab741569b8a5c4619fba414a722e9cbf276e229515cf1ee27830c4b22a0d7ed452bf73ab1c2ffaeb38807b88199d942ad7796ee7088fa87ef22df8d47ab781c401b15c3c6b57c09e36d19df4371fdf2a1e2804316decc11c47285236c9f821bd8fb5da28307e313bba3eaa9af8fe25990ae7e6bf24dad8985d6a0d727017edab74c0d4879a953ba0a6e9e497e0eb2bfbeac14741a879b072ddd55ca26e18098dd436e30ffba6a2d406d76ed72365ff2f6569b443dad5a56ae143abb581e0a378c075cecb4f4a993c2dc80bc685dbbdc4e27a68fa11b0891bed542fafcab0570300e98f48e5036d55ca42a114d39c4d87d4c29d6bf0f29332c6ae4654d5e3e441a91e1cb33c22fc385608d8f1557588f517652dbc55601a049854d5fb971223d890138550f9da3c638d4936dceb43e8b1f5f293db970aa5a5219e44e29bd09869f97b209ad6e3712fe8f2ee1758238c6da54fb34de3fd523bdfd199432cc09bb6cd053fd6a332f0958d4f4e4b8bbd794b130ed632cc8221b2049bca742485390158fa59eecf27564ba15c8760790b5e75f666ce419a328df144c58da529c9aea7e8e03ae4b6c3cb978febfec25f1561f1a7cc030656e996791b3d009c91843ca0327c5c13bee569112f250d481d0ba3a0a80656b8f67e671b1f4d49acbdb53e91d28db0b60289f670301a47f5550de16175d435231d1d25c803c96993ed58df4358da90c6b3e8233c3705f45f88aba148eedea8595c633bdcc17a536b6e3ebfacd0851e2d84c0063b26bfab190163a8a11e07f2b062f9284237af0b6a3e314ea45ce56975ea35e94a40a9398f1e59e9e3856690ed2b9c6beecf91cfc6210c2c7a6718d4613376834fadecc159d7c7d11cb5b1297f39e2349a4f39c119116e479499e3fc882b9338d9c051603f014f983ea2ca52c420e42e978517067b7e7a63ae220460ebb96c371f9b5f19c8c23cb6b997bba562f4856f9a82082faf4ee03f2f57e3b9dbc2ad095711d21b3432cba1f646458affdc698236dcae254002087fb38c06c98d2cc407ed3620fdb61d7556cd02d35c66be0b613750b339dbbdf79414bf662de99d528ac6ad1a90d8daa88b6eb3d247156235747d618c109d599cdd40952d642c30a24fed0d4ec33f299a6687f69bc3e5ee6da355715acf0975505f2219d64b727db502253d2910d323891687fc9081d5c2f10861791573f5f6259f1a12c42a589ef1951b55bb90d097d017379481da79d881ee31b0a5e93d84a1ed9ac5bce38947cab6b5602cae5175d61a4a4eb90431857941c175ed06600d5fee6e6e5904f801b2859b33ee9eb552487e617c12be888f6fe27d2cca96a559667a244fb5ab53b65a4b96a704a0c2a84c421be19e32be7aa16f58ec4177ad0c290b51b877f0c802280f64fa478caed7283dd97b125e6ed977d6303072c8250f3a1b708538341d5e5c4feae2c9f9b3332bb5792af058f01a8f97f2921043ae7462f3db994e03e3dcd3df7e0da5c58a05461e512608b46fa92416b0b469ff0454c2f1fd3b45bad33aaaa1a8859670039f0d641838daf4249eaa67e2a0022897cf6532e36edd38ab84dcbf1cc986a9b29629b9624692f3219a60083ec45b90180534a6119a08b62258235e3473a0fbc260fa514aedb5b6780d08740a090d33269abc6852d29654ea847c6a2251447d9b29a5eff69ee6e7d7b58e45d1ee303f9ee7168a8164d18977001aa40e25ab199529becd46850fb97e4287ec3afec458186ccea0dfb57b0250849cf5e587562a037528f915c02263106d25a4cde1464efc7b1207537a8fdbb0e52d66d7e782ad8ee71dcbb548f27aa3eb30229e3ce9c6500621b51eb65ceacbe0c5a5f9c2645ee85945f30eb5b4627292eb5bb16652cdc6bf389cd7e71cdb8c7b186f9bbf780dea0756f34f158844a7e984864063005f19cc320c08272c2fae573d553a040e195201327197154e6d45e81d973bf422e53362980a2f54d7a17c18ebdfe5601ba1d09d6d1efa6c402d3665f7deb60b6664b352647851fa845bb483f40bff3d446adda33bcab913bba0347b8d0f199417b8e58834268eb0e25744a6fce056e4ce5465b0170b3affba0be1cfe401c936345f9254c6119b719b2469bfb6c8330df84e41cdff4bdedc42e047c6b6675ac1098e8bc4611e56f577a497660bc0c835a84606c603182ad8cb4e0ffaae31933704152740b07020c0e3fbf6a4041ca0876067a937aa8bb42592a4ad8e42fc5ae27605f54e47e7c4ea2ecd840956f6ac0cc2a42aad1f720b05d30794df7de1376cd5f3d8908b494f495b38c1c3242ee73b4aeb64609262af3fe34764c08534c928b9d4a5c2301f16b83b7c6a5f2791b3322a6ca7dc5a4a7dcd790d4f2e50decb6226396625ed5ef069ca3cad4264d31ac7f3888b065530716b85823ca5b6ef51a7036b329ff9596d5650ecbcecba57d8567170d4c947fc83bbd1ffc28a12a213ef024961f4de95913ad6cff2bd4dde227d3aaa09e71bb89556421f55df58bef93ec57f3bb27af56506089686df10ea161c0591744fc04b10c2d3855d16c347296b6f2c0041750feee03ce7f6cfcfd2b91d51a3a5ddfd9a7313f6913382b43b204c479288f06d2e4b79803c1a3ca5ed328efa5375283c6bea6d9c26680cb55c19e2f1f143c2732ddee383c4436d9e3b499eae901845f26324c16d824f6bb2c99554463a54b270f3289496c84954937d20bf05a30f5d48d8e24df779e144c70f1f0b0d705bfccc5f7876d4cb77bacb820348a494c19f5e0a4594f04c44ffce13a7a869fe2c709130facec9fa4661b6ccedaa795b8e4af9d2cf50393a84a73b73d10a2770a1cc10aa37a18c71c3a79f4c31f01cfb352111249a0dd603e043096dbb5d67e31335ba9aadc64e5dde7a81bf4bd1c043fa19f5f2a8fe87d77bb433129881907abfe911d88ce4ad458e230f1b6944bd371688ff7be69d72ece0184b52df68643c7b1acde951a87ae8881e4ba6a98085e197536fb75b74ca335fc942b5b31ae021be3d852bba01682e8bb5b052069fa43995786c0b333c03266f3b53abf30231d28f08a672ac061806b3e5544c0f27efdc2e40b0bc66ee9a48ab65d19b8ceb96f22362701711142c5ac8f8e3cffd939d9fc2bac34b039cc153165e6c810ac164a1f7f0539d8822c50a42328794ea712847c5b97113bfa1fa05c018ac818b748f298ef188c2f7ed58501814c3f266f07f925c3a62ba57f02c06afb9196bd4c4791f85a0dcc833bf98a3623b056cf375ce657d7545762fe7efc1596e03942351ccfb050eb5eab596892aedf5f30a714487d2622e755620cefa29ce59187d1921363207d59f1424faf73d6ea75f21bcbae6b1b0103652f943f20bde4419597322ad8bd9f905401762fb6d37e0231eda3c324008bbb52c603b4d33216911ef6ca61acc6e292b14dfe351a9c758230b3c493ea018ef845bcc5e09e614d6a02a543812ea08591c152971765f79a59a08d929aaaf7e509f9255d4b4a406f802df93816b83ebf6342f866cd8f38d9edd75c980078d0b066f4ed32784e81cd506b9929a253be0a9652173481c20aa3d9afb00b9bb5ae26708dd9db8812b609ef25b94d5a1dcc9e6d5a64cf5ae82bf4d1c22a1bc87dd2872ee7d0867d4b0447887654ddbfc4c1b4d1d67b21fe62468dee1d6f3728997096e47e818c3411989d796562111338be073cd71622c586c7a9afc255be5f25dde579e19d4dc45d6cfc9483662b371b0e52191e86ffbb2a0a307c87612673f5e5b17e20ba65daf9f47617270677108fe57217f3377bd0fb706cfe821d49c362264e206a7e7f1033570833d127ff34753a077341f947b3731547d5dc4bcff7872adf593f010947b46e1a43fd262abc9ef265a2c18dfafbc99b3398553df1fc8da42add9cf3c13aca6addab7d60c84522322d53e064900a724acb7c14b40b5453efd2b0c545dcaf60499d55ddf4268f9499cebb42cf7ebaa6e3204ae62c6199bbc0db00526855c955eb94ec18dcbb7d7f688e9aceb0f40554428c5d93300d4480ff254b78b35a1bd5158a5d4a945243c3e7d2126e52e7b21ceaf415e460a50a0cecfa81eabe8e0b30101e7072e54bbb1be1b3305026a7b6c7430a12a1ec03b71b3b1a1834ffc65c65b0ad6be95b3bf0a04e511ab64712e008b83b2bcb69af39b4e40e65e048816fb10e5760717b31573cc5c1616aca8603d69c886323e08e0b461cb385c67034cdae953923cb036875ae3a3ecee9a15e424e8fa6d0dc227d111357de08ca7bbdfe9845f1d9fbd20d32a6b3669ec2e4a1ab5fecf1a7c64142344aa0183c49e61d98730e964710c9e435f9c6d0a1a35003004c561f58eb4944ed05326e9633b1d6a48a7a3973bdc8fc6f9368ce86da473d5be2856ead0a3bd62c272eb88011c29404e6a5dad28641811a1dea579993ed799e57c991dadfd3e930caa78c56fa2170ef140cd42b327337805fdf8a9098b18d3fe17ad40b925cdf63574131e10f8c6435f6e1cd9668f5eea36e93c710d3550d862da41794a4ba8b4dc878d32fba34090f22318321044209e0e9b7969915623129d4b4a836675afd5e2d2332a2d3e4607c4581306480fdbc7eac7a44ed32682b344d7665776ec7e750e7962b04cc785e54b5384b2fe1e2ecc4adccd3342d818652d44df762e14ababfb415269c9bd945df5fde33820b8a0102a804bad3635e7e1c758d09122ba91e744adee3e8451f5184acf1808a701b913ffc78a53f414e447943201de8d5f1a5981ef4924c7549e46ba1b1f2b1e63808fd3805a1d4a7527d0fe7fc117314f8306fd68753e6b8edf551f6b419933178ef10ca77d6171dae78fc81e8ca47f38c65426860d9bf049efc88295b040c968095cfc117a10a97b547d4ff9d16b4ea3d3f162bcedbdbc7a6e39dc95f9afb115e0760680da3fc6d795b7146cc0e9e37153d8512ab3542c7938f4f2ab54f63d36e124681c31e58fa664540f5e2deb28560cddb25f1f7c6a0c5f6845cdb4376926e2d746ae42c3c9958883f2da7cdda4f48df164495c7a372fc8d0ecea190496ce66531b4190224b4f61e8ec6e3bbefcad62a4857615a56f6c60e81785b999236a2e9add812f439b864077a66f922015ee2253f2e4078ac76f263da185953763c4498396e47e853963290fda14d3271165210a1ae04d9105a0e9d0518f277bf58c030716e9d62897b7fc1eb4070a379d818a1758b4dc48212a0099505ee60a3d2f84e970ddf54cf669dd721580033111b627848dffd54a1849125e5ce13eaf606d6bb86cd714251e4ea58f0d7b705e1b4e8b9e3045f71e7423774e843d828575dd999a6c062ab4ffe5f568dac27a110bacd20053dc3bc67b8e3fa5084b6b2af702a475008eb30d4d1fce7bb7f45df3a2873f93754981262a7895356c0a7d24e8b3104f4f1c8239bf8012cf0163811756f49533e85bc366634a1653a5294ffd746f06acb1a95221e761a379fb2dc1f61a81f1cd1f194db6ebc2920705ed797dfd4c4a796e20d121a9a60925da7013d2d13d7c098abda7e854463b30bb718dbad3ff1b544282617b523ee459aa3b28787d50f726c23c6b7e6c97ce93bcbf8c71dce97fbdf083108ed1194a1072850ee4d5f18918bedfbcbff788616e9b8a4a10efea0e39304d91540982c0fdff27d8a6f99f82b766a4350e2c9309b3c7a04448bf006bdda0a6b4d71afce34fc612ad504c8cdb7d5fea15cdaeac5c9a47ed4d8dca5f62ca881e26195b4fd362913768c6bdefa48d02f73340a8f9e4308a40eaba22e60ed5d3c39afcb7b2fb800194019295ba5e65c294ceb580c53e564991fdb39cd15c87c9f21299de7695697972aca3bb88a027e17a6026f206cb77ee51efc7545f9bfc05b94c76f599b0beb7422a0643e3002c15db299cbd047c948d1425f89e2d6ab774b12c4359458e8e9a0db43dd6b4d1da42834398f5c0ab4ac52afa9ff90542b80d041a68646d7facaaa200c3fb8d55902891ba68e764af2b4a2c3d3e40c8f4f69887f5de56ac1fb46422353fa9deaf4a9be49e6fea2ca93ccc48f18fb90dd42a14b8d93df3efef74ce248f91e733addb9b3be4bc51c84d101852d94e523c13a94cfc13721662928dba5878bbb04196f3b36d0eec8b882ddad5dd5461350c4cedf70109b21c49254b11a64c3793440b4df524c902da3486fc9d14041540328dbd4e37384952e7e4ff1c97249745dddcfec81e8b567817cf5661792f8810e7250c6f115d83082a1558428dbff98bb8c1f3dadd14873263c782da10bf6e9fa7c67ffb45c44b335bdcc83b2f3a4b673b3828a1bb599b676c54db7dbe5d8549c184b0cb3ee7315e3e6155bbbf533bffff792af018a01ada47ab6c8b90ff93be2c6f2bb8e98f775e42599f9f18e8773f9bbb97829d26fb9f50a9a18902cd4228eeaf0b001ebc0a835ed5ab262b137c3ea0ea824bed7733e53a75482d03f011abb62928bdb9e8ddacf8734b6a690f8811a16e2db4771e505863f9c816b0e995bd765e7746a8e7d64ab3315341594962b4f7a75a272cf6d882a981ef6df807af660593ed7576d2e20012793eed3d487cc5c2b60ace84d1dcc4927d7343e0aeccad6667326f3e2ef9a2310a478da4eba794a0eb39e6a5dddba5a8e7159162a497bf81fc79fcd58fa820bc17b2e7c805503ae139e2fd0b1e5cb442bd5a4fb036f96382fc484aebdd6cd3111fcf924256691be091c27a4df28262bf9605970604f84c32ebbb7f24202ec21ff58c2feab1f27fc597163a3c4f63e7c7946a4c359c31ef7bbbc36b86b7a18fc5e4d68f1c11ae624dd3f28df05595e13877cd8b9bd33d39eff2e03ceaf875c00fb029b16e4227e5ecdae4f1a992fde4996c442c5b5306c6d75cab8a44f8416da2f74c958cb66f6a46e77866de114e79dcf02ddd76d9d407bd12595a75c2db4115685b99c25a44b5cfcde33a1ed97745d1acf0ac35e2b661cb7524d97a8a1b6a91edffaaa009983a62bb14937c179eea58f93024a050386a56d14103eb615047ff5a28a7c81d60fc638d2d9a193029ec4f9ab7b2387e80e4860c31f7b1a76b9369c557685e196203c3f660b7cbd07711f07ed6558f2cd592d6edf39eefc5ed924c10a0b9a3a82826d19387f6ba03e35f3dfcacc94578439514dd763004833a6927b11b0438e15060a5c345aae2307e4f60f1aab068ac86b46fbe878bf0cef64f79e28f15616584f57114a629a8e5f261ae6acc6576c3794a0a549abf252e9de9d9fedea71452ee3b10e08c72b104f6c61c06b11aaa96cf7cf97be48d5ceba162c155cd45950f642a1648595a4ffffea7f1f380497752ad50f71b309ed74bb0f52e114e4df0942d59d758007d6ba6fbd84a386a6f31effcd5d14af7bf56ccd5318f648a66ce751df6ff351f5af0fa54b89f821ac93a1a9b02cddbbc465b47acde131446f9e35081f41dfe7f3d7cdf74030c0093481b51be794cb0713884749340b4c7f3a273a7abe950de6593734ebc2c9f7aa9e8a6e3d077d61d7ffee2840121000d8d7b5032ed10dfac81695ff138cac7521aedce9f30747e8453216e0882dc6cc9dac1607a9a9af6d4a49887f25294a489fc73d2c103001ffff274e7e4efe621e0413ae72b5ce33f38cc4a4929cfccbb1acc598dfe41dfa5eaf1bd4bdb6cf038ba0481a9ab2e4340c44260dca88d17436febcc8bbff9e8486e04cb8ad87f7e4220906d07ac434bd81697a6dfbf5c013ba0807d430ee48980cc9da31465445ed93a03f390e83abf00f0474d93ec2cc260d90b945738e30eb2854700066347bb8834f71e86464c02deacd5b83e585d331b29107fd3520206fb56b33b0abd369cf185555308b1d9cf2ab6bd02442a665dc8b1b66651c74c3c60c291c0d8e8679686b5aed663ac7a7d7e7770599a4bfa75a85c7fe912779e2214df8b340f0414f6e651486a78f814b0f50a94f43291883281e6804d36a12194c15ef69ff3243989f33492106e12ca4d83abe6473b16a04e11599542aebd71edf4d2dbd091c3a40254ad602df5a6746bfa543300c6785f38a488ec6217e0bdb78dde2010265c6239312aeca6d0e516f9ca634f05501ceffcca91ae65e6c48e2744f5594788c6cd92dd6370016c4b8567d96172fd5f1694b0cbbb701ed1192e8a803b4e36c02138949d4ed9fe188d23270b75218d1247b5dbd2a22e2fda595739f451b8eb46b6dede5cff73b4ff1a1f22c566a325515e269b41c4ebd2a83430a29416cbc61b4f20841f6dc552cc1dcdaf62dfb09b93936028fb10aff82136b442fa5edab71f03b58de1e4965cfdf2c27abc482bac507eec0dd42063040515384cee0381a696ee826180461180a0cd451bea1ede4afbc17acecaa843306d2fb86015e049f332c9af3e236a71d6cbdfbdb38a2df17e2228aac4af5458e3406fcf04bec385ee22d22ea7d76c9f0414965ad8d10270cc6af9f7b714bb21a391429ce7e23e4c6bc8ca932f623422b8f930a19842c05fd86fe4e6a7da6c93ab0fd6dd1bf4cd9c96226ca7064a4dfae33514f05388dd566dc0a67041315eb83dd170ba991ef5247c969751d40114e416f0ddefacba275b2838e46c46ce7eefcd1028a9483ea06f35573436de6090bacd731def6fc089be01b191bd9ed9be270b8e5b845edb15825fb792fe691d8ba1c1e54a7ec77fe3a445970c41bdecd32cfd5182d2c681de3e1b25bd1dca7aeb54d1699022368e4f9919fb6020df7dab456cd20dc47822785726dc10400ede3c46ad9b9b656079c94fac71bd32fa9e24c35b2e59f7fc30d63b515ffe2e499ee04a5703b6025edc7883d8b8bb6bb8de8e4732ac5c6f7776159463c4a4ce6e2f8181dd5d774deaa3fdab20a8f4553814769909ebab80d5ccd31966175bd0fecf261490893620f91292e2e1b8d66bcbea6996903aae18523eaf630f78213b0b566f352e0d835d70aea1bc960d3a8ebd3e8a2bfda1eb2400966fd62cf215f4e79dce2b64ba3406d40828e6dff3762febc7b898183e4c44c8f3e8e5d1a585c9c015c09a38ddbf3a62b93fe640c6440c27384c112517df3d6828972c50509ba99eccf5800dd472adb4ed4b58052fd1af16647ac63ef58142e580df1a97ec10eab98420ada89b1f5f9120f529b953f04c15c5013f5fffb82dbfc18fcffb7ec1e95f7e6bdac956057913692561487453468b1e7053bf4ecc888bb35a48bc2b7b2a2fc8e45fae72fbb2140dc8a88344d5d2f352d81c64015a842e21bf4cee5ba6720a99eb1055fb0c328cf0ec3af405761319255d75e8c5826a5bc3b9277097fd1f35deb5c0daa0ac11786b5729ef687bc01494a9edaa8058b3e5b72705ffa8358b44299dc4abd51563489f88ff61c137e78805f5924b10d97402bbaa170c45f9454daf04b708c5481707184845b3ae7eb2029f6625e97c359cfb4a7b84d0c28d1a2d83b48f36f383968f3a9f8a5d1dcf79a1e5d73f952c5e5f691b345f56e98ea597f04e0bba94906fa88b3e3cabcb24a96e1390167a0ac5d3c29b1a407049570ff95e4398b05c46d46ab217442654f863d70d48c92d1208d550085c1785983d099e373c6cc2e0afa000e4fba6c9eaa2e1fce07dd5ea24b4068b3a8574814af97c28da221ec738a6bb4e7530062cf5c77b9ac4baadc10930c3a402fd7851a293496f5cc66c6cb3b5ea56dda12b3a87c8dc8131ef7a7745744c40588840e4ea3f20e4e2cb9c35431941dd18c45b2daf6fc2d92fcec39d270abf0b2245200ec494472fc513a48f515ccac573bbfa6776228c74104fb9dc06b7fd129af0fb57e5425a80657d04f4d70230e2376234cf5a2aad8186d5a5475e482ad38c2cb3acd8b73da1b97a435c38d79b8ce7c725ccca87fe47fd15c46874b7008315fcead7565950fa985805f6d0d07a1bdb6cd67cd059ac0e49b2fff1cca94c65e3083bebd3adf08af3ba220784cbae523391069df0dc43468deadbc945f556ccd95f1b34bc3552c446e945f11fddd6fcd6c714d6273bfa61805070f0faba45952f19c8248a38ea9550d96acb41341ddf4bfea184429f1d33f30d399fb6994110520c823085aec8a0103b5db7a81d006e4fcb970aca2d893043506a9672732bba4d547d6c461931191a83a49a8223d4cad3518293bed4440947ac4b0d75e7519be0d553a22e151629cfe1a374f52e3bcbf2e2737e6a4b74dc24b1ff91cb8356a1adf91b71881981f937e9474f5f0b4c5376309bf28784f8f628a2cc8e7c123a28e6a817d5bb19d55220ab4e698b76bff048eec8eac9cc18b0b8be9ec1ed1c72eb21c0430651089313ff0db22fd8230bdda9b9b9b5b9f9ec68901f95a972142cc1dc7b3d5b62a88fc92d6f7afccfeb75e81a00caba489dfef7a782e5a87eac5e5d171715dcdcf7662e54b96121dd848035095c22de270f77d41dbd7451ebedd666eaf2099c4e260886f5cdcecd84843eedd7d42be2ed9b6cff1e27a39ab6b7c4d2883d5bdad3dbf80e0bf1eac088f4793765f02a6632fb520242f9c1ed9341dcb577dabb964d95e06fa05000d1a2bc2b84353347eb96080eebf4455b1fbb2e6bf4ae1b74dd120f18d55dc918a401498993e4a29c2ef358c6f031a319202f7df47d9fd76d84afb36a5436d00d143c1a5038ea90818de5fd39aca20a6bc96abb91be83be1db49ec53a0dd1ef7989e6560ec93886366ccb3cde24e72ae88bbca45083cb6853d1f47e1247909feb573488ffbc23187934af16af0e3838ff5125371102ceac7a1a6d45896f02c7e6d9526a5ad64f0236ebeb958081cb01a0e7a1c8cc9a06b5ba544acda87e3eb7c2bb9f9dd8006ae0ff67e686a1643b4da890663ad2d6e9dd2741b823eeb1ba4b007fe48b361af8d039d786ca03cb5f88c4afdecccab62b9e627eea29cba00b03d3811fe0fbd170e77cdea9d204dd13a888482e6618dbc59a6bd1e4a4705e0f2463e5b2c61911cb173f7476d4a8b1ca3fa98842db04e431208616eb65a7d2ee2cba263989930258aae2db4b6834ff07c09d38a29eab18df57ad29711760a82cdf52dba4dc50a737421c61becd93649236ead3d978558eeb2efdc30346c530029e6b6e3b6ff97fdd15abec5347bcbc327ad7d75bb17efcaf604121114e5cabe361ae84b58d2fac9da82f962ba658612a0f13899d2448b4b00106f99c0aa6006551d5308aa6377dba5332ed1fd58798a02c0c9b3f8a26493413ad3ad4b0985019e547d4dc5880cbad3a8a6442b4c62abf7f44669b0230817dd5870fb5987c01a1c527dc2b757028f8bfc09ad822df24b6da80d735cbcad226fe693daf8ed9c6b34815f00e61dd43c7c9ca95391b3665a37030da688c682679b006bba909a25e61f2c97f2a4dba834bb26076f79153bfbd2974b0055ce1075797d53214f9ffad53c8ec83601d540911ad6dafe352f18bb1c4caa5de57f075c954bcd53e759cdfd3257c7707235e57defb544afd70441aaafcf4aa4ea2fcc75d1a2f9ff4c6026c7b1f77a918bcf8fc6bf4370816470331a6ca58da37e47a103360412e5ae9f326943c4580646fdbe1290451d5fd2a173f180afdda48e6e04b2d715039f19a9a1614fc91b4f10d92973b8e996cd7a71ef63657dda13f5f5eb044722b3f538a098598009acd60257138da9b96bb03355bb51fab2cf909ef45b717505098729c7707ef342161eff9d8d8cdd2311f440091a42d012a5e8728eaa54ea4ac14ec813a163d0ef25cdaaac3659d561c4bfb333439ca945c3fb8f85e9763984c7c36c10c496064db4664b0fd720b90cf00c270cd4a73b2fe0651bbf281095c4dd8bbcde4a2088f4fddab1bce82c05b503eea845d47b491f7bf61262551ea84210c9fc1b711b137c09a5a0d19ddfad6bb0e8d50e4489c333ff45e626cadb254854a0a6ca59e8a47969a2b49b329f8185310d7f81be46064c01999b870cad53b5ad899c1ccb5c1d35ba59439126230563fc80892c209ea9e41ffd497b224a020776c32d573c2fc1fb9ea98714f306bd43971a6e1ec11957397419e96389f0568b9cce0867651803cab25d3f76f730a7572e471a60f1dca0067050d9dda79d72e7c84628b17f194edb760fbadd669cac91bee16bcad49c8a7e4cec75151bfcbb25fd147eaab6bbec6e505cd0df8229dedbfb0312aafe50fef5f2dc434cdb5acfb940b46b248503506c57b4db1116df5d48418d0dc362251d60c1bae65a60c59de805bf169c88c0517fe2f5fd210feb8f1d644ceed1c3de51d73d585516be1332d7778ae43b5cab3fca3a554b7789f98b828c9f1bb842444ec257ca595e985fd00a582d06af5693621f60f379df5289852f29a47c80427272b5e29a19c5c3868c5aff624418c229955cca270e61df643d974eaa82a15f6da358b17219df3bcee793d25b63c30c67724c2403b16504cb91a57de673db1fcda30900effc089fef85ad3dc636e2056bf864145088458fec65c59f4bdcd50d861adab2258be008d992fbba87625e2b4ffd42f78dcf225cd5e461f5f6b1ba3097fbfcde5eef76f18d8e8db1983c2a85ea792227658d8aabdb7527b15eef160913532b1fc7dfcecfe2445c0aeecc1039e77ce4d64dae53e698601084340d46e064d6f081c328e1689ea044ffca704ba4950ce73834c795b8a5d9fee3d2dffe92582014754eea1e183ff9d4a522ab5de276d0949585c1637c9b53e47adc44fb473c4973aacd179dc9c3ac00d0a3b0e9f5bdf1fbf3945fbc7e20173dd1553909e26ca8211b08a1f61fefcafba953396cc550bb61f6867375d8f9e0dd603079184ae8e0af9fd0e8fde36403edc1aeb9f3b63cbf7ae92463fe6cbea6f1c016bfc7b4e80f8d7366af985b15613510edad6e8856fc3fbef7d8b8654e54e0411e7093895a1211ceb1c9c8e32109c4438e938c6fcd323316fce33775ab1331cbfb390606d0f0881c8a013af75067ddf9d64494951116b465975d4e2dd3337f4f4a910464e3c99382550bf656adae575fc52ee1cea170d229d684ca36b9be57917c5626a821718a41929d0bf41bacf8af23f0cffd574081aedda99df2ceff30111cfc079378a8972ad5c75cc3c4cb0354f236247f28326ca9fddee4af447244ea468a6808b60e49e29029f9e6582ffb93127ebf65fc990ce0ab9b3c07a26fa18af0373479bd31474e23fa08c1e4d798002188779141422165c16e7485397fe80b83ca15213afc65f08aa6574c0e92f71fa76177b688b2462790179a624d6defcdfd42256b68eaa726031ea25463dff9ed00269e1a2323f33ed679fb0162e736e014d0491c560863d2f769827c3d8943309022514855ac3482c927eb229649fbdedfa28abeafb1219d7ce75011a7ec1fb6652f2f23aad9af6ebd4649a4f8bca714265d371a3747be0e091c9fe86588d6fa75cbadfcc74cb565141b440430576aa5bacaf87a2824985422fdcd3ceb8a5e50ac6440e8634718bbe4006f8e023b17831358c309ef1c63e472f9958048f6a77d2a88470f5ab5e1116ec3e3837612b09aaf251d3aa5eef1004e5c0607645cfeafe6c8e0ce47141540dd286e4dcfa3a581b4efe003110b8352374b9ffa47b60dc61899be8fd5dd79bf0e72e019b836386c5f72a9e1292921b8a2593084356bf397028c5dead250bd110105a023f9f728c1afc2861af2eaabaa9766b68b806ef50107686a36b00238f0678726923a9f084278648b6ba1460796243cc20748ab359dbebe8a15f50e64d595e5c3672203a43b977499120a20f19a5d9b011ef6ec73dab4ba30ddf282f8588853b41cf3c6cc6cbc51193f077039eb4a3d80238902f96dfbb931de91328e74e7eb3416bca3d9376f8bf6d730a3de4359bf1a0314f3878a8db784bbb88a2c2a3fb150247bec84b20125993355baefa49eefa9e2980d3b335a77034ae0a100e57cd5b56b112a9947c15629341070820828aaddfb87da872e1e2d2be0ed41bc5137849808e93ce221a253363617a97c1839cc555392166bfe438f518ac5fa537cba1c2d41d3be5c42cb725d5cbcba98109d1bfdf09f9bd84b169815894deb8311697d36b20606537813f570c2e6cf7529b1054b30cfb5ce894eba32886327c80ef5a32534f5cf7e65ecbdd1a40a5d27005356651c7de0e360e049eb1854b325fd655534e8463e62433c7972ea6206df6ff246a2efacba48269ea9e227dde26d89811253d10c7e5efc01def0f1aa8ddb5ebfe0dfef08b5b24efd0a6f8f641f15535a95565080174c038fff28bc46f1fc6c327fd57187270444119424b76e7179b8a177635714e7891bfbbc4b4d32eeefe5c2b3c24a1a2d77e203327415cea2e2616ec6e17be981dbc5bc19ee2acda89f836142219743259c7bfad0f2b66d846e5bc9f87b77ff653a543bc6ddc2ed0ca721861efaae3f7f0cb3d886d0922fe5137281e2b83e13d92d5f0818de0ae1766de249cab9215b3b94c7fbe8a776f41629f4c3db2309706e704e7e4a2c6d5586169b289b224eee6ab2858fe2ad25c178a0f4e5677808f2b9019e32213a3d018b08565669eb7da271e8aaa9f749e2d14e034b84dcc41d785b8ea64c9391e7d4d69ea1199a445cf3b9b19883ee15b260de67e38e57fac4086652327a7df94f92362e4d8a1d2bcd3e1c57a23da4a8b72281d9d0c6c2a0f3a4a449c0e717b11bd42364c9661c74aa81daa5da9115ff386b4828b1043a789eb08143c49bbaf5152ed63fba621e15d0b7cffe3706fcfc73769f02da816d2497b541dee800bb6386a7e449e06210b98d579e0eb0994e2568a3ce49af03aeeeeadcef1227c71d70c32fc94ac6b2100b1598d8c03f9460cd361ddba9359560b194ff4b873e928da672b429aa9e997d785a69e8d887ea1b6a4483e01e44499a38730d3112f6a60dab6fbc13c66d4aebe03674d63da6b01a296556d04fb8b5e0281a5f529ff99bc8dbc7e450bbf396538e9b27f5fa526afa4c061a59363914d4f81da6391e9ea2aa91efc51144ff8e43ce505969c25f088602c243eb8aa30ea3daab97008734caf5fff7920550514a63c81da3a3cf8697111a566cde6afad6bdfb41ea1f09471fa5f972de31e9985aabb0b0b00622a22b3a8431bb4c94e2f94d64b8bcf0940c571c787892900219816aec89e9dceaf9c8c148fc54a4f3b0751853927f73066d202703ef7d9d765b8e23efd36aabf16579526282f6b7af895e626f6fbd3f745b5180a8e11f78b239dd87f5c4703be50a49ec3ada18532f4350cc455f171c54d6c2c29ce8d881d848896b6c1d2e542ac485699cc3a5ba8c5cd3624daca633426bc3edf1e7d659a4ad972734bcc91b7ba964f10724059e3c9970ce699d60b29d9e5b2042a3f060f0641b9f9383ecc9398e0ef31a9763c036db17660c322316063d3da5b5660f204b59148409fd9f1a64ab40cfd3323371ae6918d2d7a8b7e50846509db8fba546a9ac8f2c87f6432aa381ee54faf85a91fbbe5d9ca6a819b937ef16ba159e2cd9c796aacd99d2c4749bc3ee48d6dc7093851e5b2e0e58046a9ef4910848321025816853bc3fbcf712a24a0eaa84d68c4159c23728014f455fe6a43cbd96dad71ca75e593aa9d1bddfcfe201ff3e8f35cfdfff9e84499557dabe5900593defdf0104194bbd93d1fc768db7d0ce065072b4b22d5caa9766ec4e401652fa13720cd0bca016711009ef21930913026dd0c3e76f931ea12f2d3877de11ef11a70cb00ecbd1203f305f9f5e4aa4a4093582f16bbcf325f865112b3968041ab6928491bc3f1586f27a155dc5cf882269d6f420dff6b2f23df4724af3996db01c0af5fe39b75d700be13edfbc0a27de83b7666713ef60a97d309aef74b614b021f9ecb26ffc005d3908031f82aa558eb6b179cc61913a7221ae8df1763adfd220d664d3edc12a53ea713d6f124cff1f9bebaedcc0b8d23afdffaab20fac40137d3dca309602aa0ff28214c4ee6b12c864131dd3d6412a218916ea0fe29456f536753a6adad1576537141050dc80909f5c2d0f065475d2350dde0ef34c1154c787f1ae81a8fedda335d80275eb1f6cda692547097f67408acb3d2eb1972320a4223c1b9559b5efcab6b3ee7a3605f3ef0bb251e3ea4d73c80e2f4bf17f99db146a9fea30e2c1527a52a18400a83b783822a2a4f6cc427c660c38649f0fc67af1aeddc0610593a3922828cdc4cdc8949e4523a9c2f4534e4b072807050a7336262d2a858894b54b11f340383f22d0c8663da3fadb10da19ba6fb4a1fc12da68942eb75f1979f20c0ff6fc433e618a02b046cdf3cbd4d944224cb2c9f5893df6b4744fd9b80515308dad177206020ea75ef28e8545180b39b8d4c355e8c37df4911db75832fa3328b75ef45b77f39e7df53b8a9440a7c0580a82b9a0d28c7b8c72f4811bfde449e764af472445b5f1b7b7aa3bb11c5484cb7f22a8f3cf8afa736dd4ecdb1a7cbdeb1cee5409224eb9b2d98efd04e11c5828928f77ac21c8697a7e0df9bead13c20824d659aa9e638450f3ffc3eabed38c1be5d9566c8ecd039affe891ec739d1a0461f9c187272c1f364bf7bc010c9c24eb2c37b599c41ab95c91dbfe0054ab87267232e149519c46a53f9cc12503e2c9fa5f484332b80f63ea6f364e9ae87b9e2d44742b3e10fa3e2fc4a9519e2954f7fd12b6ac48c0b4c8b7bef623e7d99e4d892a37420ed54faa61cacd93b6173cf534abc806963eaa9c5a7f08afa667e689fffc39a3ff3a0c98efd3357b1a1de65d2475af592d3d1b4f8bf5f150e71e1d04e33ea74951d4c0b5716eaa4a9f2dc2a1e5f69f4beadf15efe94dd1c6fe448bab38efa465ec8584eeed0db7aaf7c82536c45554d83276c7700c4f6669d96e085749d176179b6a2b10a0a04cad91b3b1ca9ed15a3be8e8939a8e225c9bf48e4fd411214fcfa624330eed05c1d3d51f20667923d39e63678d298bb4f66ff84be1e24e0c664e36af4d8fd8d0f45f08d7f04496cc8f444274098f22e6332a86930d9c95d10292f52723b0441d5f9a984b526643fa28c7aecf5b815eab9475f0854de749cbb911ef39a5189bf4b9214e6445e76f872d6c25adcbaa472ba65234744491101a40d48e0cac99cee983ce0227076941631167f1cfbd3956721f61f1345948fade2691cb6146db766dd20c682651d74ae4486865e03a74faf12463470761959eb2fe8b075e0e65c043205387fcdf1a313d4edae3ef118ac07dbbffa14f208fc47ae94395151a965a5e4b537e6b2ec81c541eac8a3ac81ba6c66de324bd77cee82ac10ecb4d209acdb635a32353507156ab9f776f49b5e47c26c860340e4127fa967bc5e85219a76799106bfe49f56b4ac43d7b3e4847b310de51d82274f7125fd9d10ca6a52391e64481b496b08bb44e0cdae5c90b254f409b422865eb65e017f7a58e89208be6eb6d34e7b1718564916fe15147d9efb09aee109b9c147377ddba22b0a8cc3dbe883e924c653ae6fdd5a7ad327e04d39c1841ed6df2058df18a213b3a8a4799102c93c6d7ffe9928e0e6490d82c8a7ca171988112ea2ef05790e81e2dbd9fc0564ccbcd8b17598054f1d5e55fb5ce616d8ee22d9801e9859a495ce60c81e90c25d796a59c3c25a8ad4eaea5674f3b9946ec1f6f36a36de55899a60673d101bbf7ec5a4f7f382ed34303e0a3cbf174f87614555937c5641e33f4207e55b4a027cc50b8a40d4ba9ca427193001289da786c5ae66614527af98f97c0a4022351531f1aed3deeb9604a227e61f411e75ba4b276df18115f55b712476368382031e2ade47cd749d2a5dc41fd89484724d572319dc222c7bb5a4f1ca24f459f9a3efe8ff1a1e726e738f63f7cc8b62fc7b46a30bf12dba9d06cb5bb0c7605e407b14b0ed6a8b6fdb7566c6125f81cc7c157be306e074832b8538c389e484f765517aae702ad2d3e590679ea400a8cad86acf2e88253d49538e9cf92e931225bf90e455ef4099ffe948d1167c191f186218a42be7d7e55fc386dbd7fef3847f05edc20ebc4287b7945d042a8f44d3a24ecb0dddc3c7074166feb5a872281e8306af853aba503a57f9f9b52836b29312411bd230b57bdd50b706930e52f8fdad73a349dac08bfeec2a68053b7a0091ac77ed2f3cae9ffd8d6c4e7773c54a5bda3a4723c407af8a8eea05637e8c1f55d1dc6f2c48055e25791f17280fcca2b4b08c4ed356206800b9d2ec7258de4cf137889cd63d8f91dae47ab5c3c77afe8f1332616cbbf12480ddf3b09d115d7312b1617151ccd26273967733922dfe421452d12c449906fce1403fb40b913a43c2d29b366c3a0ad3288e4c238982019b82bdf36993b250cf2f36a64f4db364d43edefe3f60f2554a7b7d406d684f05891f54563d751641f7ad229aa272f8b57f99d32deb5fff723ebd5033767e99f627f2276befa952c4dd3deaee6c4e09efef19f1368ea38b75f7b459685b56755b5242d95c702d332748f4c2a17526aac5ca7c08edb349e3cdcf07cb494e2efb8ade7a8bb70807d7ee4b0c6744e506fb5b2fb6de7e9cc41c088332ea2efa4ead663900368c140edc10c55187ec126f7c3ad5ee39937d076f4ed4a0d540cbc91299697048b23783692b99ee68f36580934431d8e0fc91302d33fdf72f2657874a4369922705fad47698a6d68c459b704c3877a497298d1b0ac2c430ed009ca840a41b9d37e57f136b21d8cedfd3fd3092100e180971582030774c29f527c7b1e9fcce00ffd18ffbcca4b1bb2b3575b6b84a2f1c2c7eb63403a544e4d630f9e9c6af33041d113f7d37308569933f4c268989ea90c08b00bb4acc131ca5485bf4e223473e56719ad81e68326d08c74b776e91665f061a906a0f3805bc4364a96c1ee1390a9753b6b93bcc37f6bcced55e69fed639b9e2d411114f070cf4583b75805fdcc76dae075156a6dda46e88096c50f2166d2bbf6b3d3ee7c555c83cef4f9e67409f40080df04f96939e154c109cf745266f8a236ea2e7d621a211566580c57337dbe456278adbb71dd0900a0a7794b3134e65032ab2d77d7ed62fd47fa359e5108398ea569e7ced97175232ba5643454dae6dea76281f48ad0b7dd1d155404f336fe4c6b7f256221c68eb2fcb766f899af37773d0476603c4685053dc40a78421882b53a98a3ef39fa4805b04742be3db32a529ae7fa9a7037a9df6f758af9c782192bde5f2cf8e7ec276999fb656c7dc934de65d89bf8f4b2bbf6366755316b323e0a663ce5298ffe9b8cf0a2821e1bbbaf4b9cc36130472b3c844336d83075d3ab8b6c49dbdb008b118689380c3627fcbe0a0de071089b0fe0aefa64d9c0a1b48ada7d209a0b1356ca8a70b2d95c81824065676a6628cdba09e402eba7c021a26eb521f015244054cefd0aa2a6acf8c18ceb7fb93defb127d12288b1683f5c4310b106ccd3e68cbeb6f716807c638202e5529b947a107042a2b3f82be8903cce6ede77cc8beb5d13926c8308dba7cb3050c85201034484da1d4c86fe5122142bd0aa568c93c31607cf62f066fbe184ba97bbd57e4f5db96829631bbc27b6bc524fb9e737b1af2173456a4c42447dd128713fc1b7797936cd86bbff09029248c5f990ff6a6dd5725c35d00d6d0cb6b07d42ae3244f34fe3bb8d8ea4679f8e83eb9694d41807fd151bb39b4378405cf338e06e45f67333496a9f843c6bcc2e5c5d3f12dfa7455c4a758012fb0f218c09410fa83aeeab029dce1ac1729d66d6b4133e0c86648d361ff86ce8dc7c637b6c12028422977debb48a6d4bb52171999ef76cbdab721bfd36c199b0e24e20fb8b96e90158665ed3460caa78cbf522c0ba150b555b8342ab7f281fe6e1370d027fc9d3bc675e8dd814c1f045136a8b7e016639db01e292a8e16e4cf9c0cdee6eb97b0d326f5d73cd7385c05e8f3cb4c187d76b6b51ca1e32f31ce051f44641b6a8534967fb2ed47363222df6fb73cbd6df283ba6cf73f30c219bdd02a339f65c3637548eb163c721e143d7a422fb69d71fe4e2205effe2c7c5cd12c6e61c6ac28d5404d9760b27c7a8cf5d14a9798791dfd2eef0a119c1e7258e9d26d1a9d69d71849c196dd3d86f3e7bf646d7c336e8ba6732747e49f5e9f78aa8937db17e5e4c7e3ccec85264c828f4d6516e3bf4c93a23a1ba0b0a712013df8d851c555b576772bb20b9d9d0e798b81477aace79b5689e218bb4de1d4b89652cc5c3659f77b1b87d21395f210b0157722486e686d2f7c40732e99139f6121ad01314e2dabe420146b516ff3fe69b7dee78ff2e1f35ad85864cebc9bbdbd7c2fb23cf500a9da57f2154c443f8c0eda8cb38dbd0158f4c22dd8fc3258ad83550047c1c488ae910694ba5c96b7af3ee9a02679b436bb976a7019a473499ffc4ee2f74fbeb3d75d09a8b1acc67ed4c2803a4a49cc23b5f34466ff6aeff6d7a6aa3303c840ce27e315fa7ca1c7d410736015736deb9a4f884d1f21a25abf39a448fd3038fa63a617b5d0a1a7d780ea282176ae0481c90b2ae66bff1f0a290ed4fdaf57805fb2116432256a93339a5ab22bd297b5023195a348616431a68bb20d82e722738c2c6f0c5a3260a2af4609be35c802ab2a7d91136b7e0f60a5a1f8f45a6949d6e4bf6b9d5a05fcc83f86f66f3a038ba7e533a332b9f40dd86e9b242e7d5e5da8919fc68a5db1ba1b2d958083aa54652eae576a128c014ec2ca5bc5af58b670726fc6b5f686c099e7a95bef783599728d6dc3946eb57e83634197df43808f15095becd317e22630e17a1f916be1b5a1a6b6a2c3e7df72d78b96b015edbddb22b05627979805c514ea7a528ef7ce23f16cc372ffc0641f23d8f1094f3967022cd9a3f6a8f5d693ace4c8a35ddbd7fe3f27993b376bc24036d7509d520ad1e80a4a3dacaacf33e736f2a30a9d83df8f3bc4ef1332f4f5f657adcbb311b81f3582b45b286cb800058163e32a4b6187d289f94b5393b7e78be8bb62b97f6a294a5006a6d39f8c856f6baed8c9bb063b93f501c0b9c07b355af8bf353e67e087cb4c648318522f0decb93496a31d02e091e850ed1646d6eb214a0091928acdc3b50fb335e48ce7d512f194561e8d0f0e456fb169a602d9734a83c21ab6bfb05a23c2d7c316b2327688c91d9b9343d30decea5c56cef8605648e012c1651bc89eb1d4df106daadd9e9bb0dc96032562d8e70eca3b222004004bdaa7be6593adec5e7dbbdf502696f7c0697a4d76cbbf20238c8e03dcc666cc2e7e075de63129a978c1aa4aa1ac29d8a6723d38f5dbffff67121c9de9e89a126047388ad7b29b09bd336cd26d4e91672cce6839391a7c4be4fa4e2d859708961d590964419df106f1c84ee989b700f1419fbc94e3bccb86fa9ecf45d2debc3457993db1c803af7908ba1dbf6a1461ea3f1aeb0302def01857c9c217d1d5bfc8c11e3b9fced2441fe8e5224d3a845f026fd3b1d405fa74504fb3077e38426f5ce644c9b98560d10e74d09cc30562110b29eece9059689ab2f4fb0cb87ece0156006feb81ed7a86ce31a9c2179b65e1434cbe32dd5efeb82bbd21751b6dcabc5ea7070156b82a754b8b6e5dcd68a1976360e38999e9600b1a7d0fa2065c36753abe9e16cd5f1d624fb6cb7c471094b5fc00c44e8b08bc6869c638ee8a5c5f1ac7b04a8e97136944044d82f4e97368d4ae6284acdb4ea63ee3de56d44f0aeae2506fba2344db886e4487c4ded99341fc9cdbed21f4a9a3714c92bee33207e2505f9e9d4e6a9ce29e26058ad4c57880e7785e238e45c9a6c6ce24e8ce3868289785767674339176a4f0ba300e4658c561796edcc6a88a13e6dcd5762925e81ede7fe139c039fc201c19e662858d874c1c6df9542c683822ca089991c6c1d9f0d5a41641d0f5d1ff2f101ba2fa4b668896a6914299fde9563db803220766516c596c10990befd8ae9f835d70f9b4cc14ce6f7a4a8a8a0dc8711da0f5b68a508995c409307600adeff8bdb81e96fc49f375d9e2ab40c4d6205a2251a02d3084b881b51780efe7b65fcc08f8f1380da5e326597a18d077e99b2a4c8bf5a199a63b1ac3c0cf1067ce647efd123f358c09153b1aad17835969b41a1dbd8a1883ce74d1a02255a7bc2e33b5b080469a61e44b60dd78b52e94c7f3b21e7e5f6d5678226a3dae6daf4ceb8884d022aba144a0211a86af66fd318499549e635bf2dfbfa5cb235dab71b3b43699e4e2a17df439c33776d6c83d610d40b3e5944498ec61aea541b926041658175e0cf9fc0adad8610b7b6b34f6ef27f9c2241277cd2192ac81a441b08ff1380c20c4568f350a2d2de9b68a5fe6c9650a25b944c603c72cfa796a4d025ae929fbcf634ddcbaa59c5f4400d650883a084915e52f0a961007234bc3ea1073e985d9edba053a2887db70b3316b82abdb9d0651f8ec313f8446a526ef1b3edbda918b52099c54f8035d55b7b249c2fab41249f3f232806e45a701d90392db673da866fdc7456e8856636f0b27b5911002694282c031c5bb9235d637fa3ba9ab376f2a69c4d7f4557b420c89c037dfd0072b9a2fdadb3c51f2bc04ae535b0b19ca79f0625a477139013da7ef30690c46c5eba1d566c8b191070e7a6f73ea194b8077efe6bed3f11c3cdf23535373a5d36108e3c1d43ef0c80374c98438525be561661a5c54880e512808ae1c011f7619b8176898e61a201bd5885fa4920d1ce952fbc6aa7a1dc0d50b8f5983b6737c6bc66c6df81b35aafa53c74ff2496ba1451cc0920b92929b9ea72dfadd64a10b95b8f0be6d3b321db6028206e561b66feb943ae546a96affca5b45c01ade2a5f2c86fa8e2715b1eae8427e5f4899a863be0b6aa9273757a891f45eec746a80e79838bed75b314b1bff236e552632d5b729a8baf7ea54d1ca32dbe62ebafe6ca17802852142deb463490eee67ee538fc9a3220abee30325d004ca4fc532ca09df24e3b6abf52c9f6cdc208d7cd0653ceb4210fa879fbee02bb3da70c566a7f2b01c172e5162c8a01193a3aa7afd66806269b8cdfd5dc087dddfd10e7a86f9d1169b7afa8b8376ae4a502ee1603eb904f61e175f08b64a093ea45f2fe49e998d57591700830fdc1e4584c23c49d070f869d19f327d3b2d0d18d5a0a98416b667557bfcf1e461766eb764e77f2a964d8b97cbafc268da71fa7de7196225f01fe3372df97b1cf96da002e27490ff5301df27c294080ee68870698459f15e9094b73fa54bcd543272727327404d5c70bdaff94ed430c50fec474c73e7ab431cbb645a824f4db95a141a4007d73894dc503da9a4a1e641aec3b6db99496052a6c4e5b380121bd7de52e52f40ea280771d6d9d04884ed09d2d216dcfff8ca73b5c2c69ac9dc4ea0bcd45f015c57e755ee10dd1b77c08c886e6fd3a272636061b1d357d5045fe0c10217686ad1bfe4164f4935abfd4fd1c16381cbf253198c2efcf4db8bcbd9b6dfd82f3843a3d141055de96ec8f165db8b43aa2d8f06e0a18c8898a4fa80521d372f303b72c405c6991d2efe4c06cecb78a2d07a13ab20d635d38fd92ff4a36ac5e43b07af9904fb6abca900a04ab210df33cb649b3f9b7c9d58fcbdbf28f8487ad83897dd6fccfb964ec8b1adda97c191b9ed7e351a94300fb936a8646d94fb52ab58cc1f24ff3de42cbb8e7d799affaf8cafac8502eb227946635b3d9cae4b2bef55a0970188eeba625c632f3fa0bc174f530a0c9476df9fdf7e355572e7860fd31e12bb8b0031af0f15669e03c038d2483c4b077dcedd1f0ac78962008467f9a634d9959b51fbff4b042792ccfe4964652ad2c727a324a548c72d4c6214b24218c0059ffe33e69538f5332643f118379c0ce99717dfcc1869b8b5c022b0b69c2afd481ed6716a74396ddfaefb96b5f1f442069db6432844207e7dba8b9027d0b37abe82ccd499efe7f67fb3cbdb50277b7971339b5ae6b5cece3cba9ec22b7f4fd7013f2c7899d49af5e1a42e8847734621b44a5aa8fb21ef2f5d1f528b47e1b92039b80f9648e0b3b0e33acf1fe87fda4d389b5823c0a189757cda9056619a0c23c95c0a9136ca2e193c356878c43377047c2f508a99e896f8b919d168a93642771e072bd3516a87cac63b0761db21fb15e0f168955ad36c2d27f183c2ea2faf15026173fd6231e103082c0d9452969705c99eb4484f0929b6f6c013e3910d48069f9b542335bcc150f10f59eae2c9ead85265167f243c2f96e1ff583cccbd208be0306f8f66caa120f8bd17d3157e31585d61c4f12165caf953990576e486f9991924fc45c4d360a252a069e15c8aaf9f8ad404afb1432abbea0ffdc421e9e1e483d041d8520dbbebe3b8151a7f730ed0e91af3e79ef97b7b981699777201ef37a460746800e5b0a4d30b64f441a7720c47f6ae3070d8b34d58a48c571dd827c065d184362bd65683bd082221766e7a472a7b71c6c16a1cb64e7578145e45b64b7c616025cad83c639c71a568b14506b0f56e32d80c3cb701a45d1437b1313c76cae1e7b91cfc6ae06d35e978a97be96568f92859b92540bae92a2860e3b5310e023d198d198a98352b22c7930f8b5a9a4c1224fac89850e0ea2f7a748ee1ce9a8d67f62a0edc13dc0347a471300fac688012f0653104ede06d8e77774babb5db236d9eacf5ca56c9e8473addbe73be3fed4d80905825bd9321c93170e53324301ad88eb7fe09a529968792bd85dc2aa6ea34e46401e3b7f42c1ec8942a608de7f3664819fc62fdcf18d2f55b397e93b8fbd41493e1d8b10dae1d2da028b8c6d15aa5bf0d08e431ab613a39bfe7a9f271bbfd6b5a402bf3a306fd50e3e6b9a3f0680d5a0d53b738c73af0e3d215f0c79832812c25b200eb72ad40be72388782345009071467ade5305199a05c868ef99cdc116a38c009e9a701984c3efc352f2c6923b0e7ff75b1c403d55c951b490b04a209d01d0d0593061496591728c6aee47c7d528ab862b4d9c8a271bab94703f205f6b8300fba9f7af7865c629fa8b5814c40ffc91da54cff34c489f7092a9aea40cf76d6bc758d283d1281817fc41bb3db1cc61ee622eef543b63d4badd038541a655cd69309ed9d049c40f386bd5de50a1da52b3b58a0fedd09554f3ff4c752aa8f48cef7025a27d1ce458aa5d903de586da389e751c7e56d735681f37fb27ebc93900f34acd5489f4662cb85394c52d6a9f84a55256b960774a3895018dabf7903b8f3ca2c8023b2f96e74006ed7ca7cd8db9d73507efeab67d8fd9c52b5703811fbee460f805dc491ed30b56dd420edad0f427bc7cde29521252d058f7d9f4c489061b5635df5bbf60c84dde9799410ef888203f261fc7b459bacffdcd9b02f9bc6539fdb9e6cf812ab06da1424946f044fda64f2e66b19b711a2e626422581ae23cdbc410acbbd5464d8bd1c1aea34e6295eee12b5727b011e4f83e8710b9fe7a5474a631f23fa0cc16dbec4faeea27a9a3716391736f3f683ed72172ef054840f0dd9e4b78ea487aba5275ec2e741026b5e82403218a136560b1c17422e7bacc2c29e03294b7c68fcd8a28cc97a7d80e33696f241a5a73cd18ae19c3eabf7e47b0a58a8c87af850cf7401463bfb9805dfbeb63a70ba12e5bd0cfdb12c7756635ff30409438838d57c6e6b90d10f217a7997efd767c08436592888a945611da9c03cfa4584f212f3ebe674981e054e27a66f0df983a1b3436a2e3589172df6c033d5e7030f3c92ecd42d87170f0c7b140d0e35add9a0ed38704939a02aaf26a12567551247a5b65f1ead6dfc8ecfdd22c1f77ae7cf17573e3ee6c5077527e3ef1f7d3a500959d087d0dd8ead1b985914e63cd842ad1765e587ed05555eb4b6918ea2dbf8bb30f29b6d47f229f8f015feae2043f6a07a0ac425203a607acbdf6d3ca14fd4c5ffb933233ac1077cba9afd04d96f3de7d46092ac77feb893c85fb27144e8f71ed826682d54315048e3e9309a69421df36a710527eaa124b764f425931adb82e9cb3035b179409ca18484c61a1a084ff31cbe955a6f9b18c5a60b8680fa20a81679b8dc898bf4af9219cd0c876b6a5a547f0081d4589697ef2d9d5b59fa5f7e7a001c26cc67365e8fdd64b40c9c8f6caac7beffe9bd2e2821e79ab1e8070602234f9e3714dbef091a8d2088958a15e46b5b55da90ad979f1b5c7b6df09a29d8c89e2ad08d2fef8008cb61219b93a0347211988107d6b4776643ceee38225b930e0fb9c001fa544997b123d449e454626ba512a6788847f5d321df40ae39738e75cf3333a35450c9b0b7ad5a0d2d959c50020ccf6f8a28a176cc5b1e92facef47a68df5d547fa8fa06458c240109b18b4a66eaa3bef23359ae66150e98e829a2ebe45793cc68a1dd2a7bff98139178848adf6c21b42c60b684e6bcbaa904353e8762e8ae5eaa3f0941c1ec5e2becef922999b5a327f96bcce77f5999d5c4c07746155898cb4f340829a18968c478f02b915a1be48c1252f9c8cac207bb4a57e40d4b941bb17f8358ac495c39d4eade0ac827b9ac60805ffc10fdf56f2c0d31a5bafd687ef79b810e02ce34257f0126a646d27a143b3e13f1ba50918621326677984b0f49dc01ab2024e34353fcd2800ca147ecc8459e696dde185b2296d8771e18ec0ad98b5cbfdd6840097db20cd3c722214a660f442a19e092c23c0960551dea507209dd09b2c86b31071e71221026589c77321a7ba3861f4b8a446b159a18bef5b424f1ce69caadac5229a07908e336a08602bcf2b86a1ada89e1fc5dcc33814a3c71e5d5d370311254929d13d5db35920098979e3f0d4989c8f89c2b0bdf15faa3b02f8cdadf7364339bbfb23a84eb21527974e2630b11f5593e18b1b7e3634580d1c3f4e1b9dd27b1a336983c24af3a2e38ec6df21a6a09223617ea2a170f8da0fabe4d1f6f35e14952b562308faba4c5b03b011e72a476c3a6ffd7e975975c3de999f3380806c8e7aa565330477f37d75b29f4850bd96e252925419e39c83650db3883a7ece95862df2b5e94dd73bbea64d4163de95a943a74008c0f06d384067d07726c5f6df789b7946e49353e8e4feeaf8c426429ddea134fef2c3388b2041051fbe455d1f11c084845573a20f02e17e9d3c18e66660cd5adfa9b81238f5dbee5d327ddb3614b5267b7f93855e64712c085a5d460cd463e41b2af9c01afa41a372e0894c76194e37ea62b0c0428fab6cfd62d75892fc679ea71bbfa8954945eb920a43f70f60c5a30f3a9399bc52b034652fd7a90be1f3e06438551e1f277937df57e186c9aa5756dfee70add214174de9dc416e508de46e92de07c85d4133d8297b4cdaf3ca2f1050da723354b41400426da846d4f761100e54539404ebf2e70532dec498ef8594433e4fc9a4c5e3eb2395702ab199d8586cdb063265ddb50c4b35227b46490eeec145833184bdc5b48fb42577cc0d87542d23b9305466557c27c7f28b86b8183ce0ae5c00e5ef0570a9f1c86355490784a6927939bef6ad37537bdc40a07f298050a83d7ab7ee6f780b79537782c962ff2f9a4133ec61b39dafd6865658a98909472d3e5894aba8d766680d27dae9df8306558b267af2ae3e17c7e0e55160ddbd97c9b7566d270e851615d26f6b0688a072d3105f6feb307932a18e3a36747a8452739ca6ae2949b5116e9b932cfba79e17824110a7039751456e930c00f5e018817c3d3909a2638c2a8180c84a9b150d28390f1e0a9107af46179729730186db55329db310379d613fbd420a6493f50ba7ca42e2aebe0efa377f603482beb78a8f3ca03cb5c3a731e8658f3ff99bcfa244b905db04292c6e03f87b902f92034aae7d99955096487aecf8fef7543eaae5dfcbb016da7e54340baee2c0c9720ba36f797478051a8e3e3419039b1506360d0485e5a760602c8aeac5cf9a896e4b10a7360ef74777878440ef0dfbf7349624a6589974d5fa91b70a7a27576a389a1bdd086d66844da1d34f1660eb00a9aa4f03b306759576faee403c1f4bc06599957d121a020b0444a24a5ed32ad476e4fa40e2507e987c982cc7b6bf509e0bbda92915cf53f77b0317c3f707323eb201e73cad068004212c5a30a8b24c8a7bf53c4a13b79c5b5b1815c0f88cb154f8a40a8e875f68586d4b1764728b14d562c2e833dc4468d3e72d11309c552b6f5a5c0a6bc9adc8b556f13cf58f71d76e33afd1088ffbfab414b4d07173cf05d4e9c718fa803521ab3c9d80b2faaf932218a5a94b3a5a66aadbaa3fa2c8ec233c957fe61fc9864615d02a450856ad87ef98be5cf5eaeb6466cfb6820a979f497265260dbb06bd7a5f2a16aa3c1388f841c066c56369db11ed752ca9d76db7fe97217798bbebec55f61d7b12ecc22b91d7fe76fe54fc8279ab848d8960f0552f423acd3611619ae05e2722a0260a64dad02e0a7b742014516d2ab24215b9fcdecdca48574cd6846cf6c5741180e0fcbc3743e9e2d6bd4ad48436c02b8b2aad8e2ace388b9797a3ca3d7a5929cf6736066d298b85f8d0af9658227c47ecaa995b22c86a3732891986992479b8674c60defc9409a9ae264faaaf4653ec9ddebfbcb88415995efdbfd64e07f6f9a7eb328224ce303e80e4fcf24d9d290a196a9bd2c41745e21b699fc83b105eba0f41113a117c1922a4510ee17f1226f0ec62dadc283ccb2eb28f228a39042aef9a9639ff187375e4c0ea941b859b01be5b1d3556f701391d533f6a34a2b9bfa1e34f4ff76fc45f7e4ad1b8902a74b0c2059ea14d72844cf56a81e3d0f8f2dfe40e20be756dccc0b9045845b6e176d1657add0166c1f7a4009a00abec268a0063be79e5ff60349f21d590dfcb61f83b9fc0da94f1160d0aeec54b0bbc3847ef38498ddee57eb5fd3ddb60133e1a9fcf3e2c3c3acd37254e5af84f17651a105132a8759515b93c01292c4fe5ae289ae4f3e6b934acf60811ca29e38cc5e579f3afbb6db8e10bf1d6ae1a222fd0bde7af2532fbc040f6bd73125d75201344e73f0fd47a2d8845a5c4c30024d8a3d72b680fcceb94a5f8f7e833259a337be2ac4a322bb5c2b1abc86f40527893b57a4a48b697414ef70237fd2458b512bf0f2e2ca80bffd84c8a1deb1699fd1648eb886caecf093f6d77c0e28ba597a4609087c6bc1b6bb0785a6fb15b21bf6eca4b7b16b40c1dba0c973b8328018088c1e2e5cccb0150ba74a80945468d82ef457ae61c8b77e4102279422bf009030dd9e8864ecad6dca733c9c8df9f8120c89e0578e2aa52feaee1a7df116bd3efd4ebf52a351aac8d9eced36ccb8d8eb061fbdad8886f5305329b90e4cec6f5d22c0f10c3ad4376d768a98929ad3cf56c8874f2cf08fd0c0cc8c7fd3688f2470bf78533b1a666d1e70af74cc24ac6da4b5a8f8b787914db856e7bb4b1b20d9817c1a9cbc8b12f644d26e51361862ddd88069a927cfacb0405d92d5ff60cd341283b2dc8057f64f59bb81be85fee87a2216ac58b7a562967c5297e4a74321913dff11cf90737fc9f39f6964c123aa15f200f40b9feaf044f6944b3d2b71eef91fbd1a2051d341f956da581332eeb2401810bf957726f1986055189f977e03554640f1cb65ed96dd7f9f8a5a1350379ddd48a2fe49b46f09058d6d7ab951974ef2ed08a70487add42cf830a3909d58e924e0ddd09e23cb05c1151625d42146287eac20f7bcdc02feefedbab501c6164156004711943426dca876bf873a9f7fcd27ba95689657e8e0efd8a121737b4efb94b5774705b31cbbb7e0c88ad6389e3c0645cb647dc00c7a47a54b62b05f10b6cc52897ba58012b29ce825f3eef85700740d1dcc3830ded52c9a524639247572f15a59aa209ec01d37c3d02d451c54774bc1fe64a63c543ed6db812eddd9bb24d688efc33717a41c4bc2cce79bee21875834db204cbb3df0c4c804bfdbb1c15a170b9dad6c15536256d0fa9989f79558b5e63a2a11ee7c1b35c07be1913a3059e3333d9cf7b5a570e4915c5a1d59b379f9b4a24c5cbfb266564e7fc72f23d973ffe3ec3fe4fe7fb6a4cbcb3e69d04b2b32c343c95aa46e11b6a547f8b89298aa2ae7c2fbebc66b0d6960562ee06cd83773e54ef7312cc2b64a17436156ca904cc4607916f448c2161429286175b265e6a4be7e4e989acf2d6c96463bd38c2952549d09f37e89d2dc6ed324de6acd7c7a3832324d467446c67c7bfb57d2369f06444dd06559f76bbc0a6f0cb8b5efc29502a837ab1f4aee3c4e51ac2eea0ad70f664bf06f79116222290fbf8d6be4461b18dce36695ef5fef3c019e6e51d7e4dab80cd0d85d0bd30173b11a853e5fddfdd68a54a52a23f96035fe0c7b99dad73947b06dba4d1ed5c0ed57351588d27713211fa8b86e67a9c4df0ddaf23bcc10e08eef376c290dcb1c780adb311b6d3d69072dec151b8467b53b06597ab2ac513561aeb2fc070669fdf6c423091d6df43c09ddf5b529f228211ab320222f7ac3ba09cbf99ea1ccaf3435745a02cb136a7ef9ad5edd469b31017ce61490f3e98a23080ce289d8bb9491415f92777c9322bc61aafc380c663acc02f66b9182afebace68c867479acf93a81626a89116d857b0fee55db315c7debe28eb72e038409d0ac4ce5b5af130b2e2b0a81e92baea04b267c5dba4b3b869b3764777ce7850af69a49f1a0848b75ed0bcbd5ab5795d28d684d2eaefb0d65ba7f02498580bd0d9dab4c0e766db5d242cfafd360b031135d19ae2f6f7bd648910b12dc21b25788250b3896e8bdc20297de6254aeff2f6edd66370ffd0876f154c1aa84524aa94da1cc26cd52f0395fa94e464ba98e88363d18cb4d6c0f2522fc8f7dbdce28c05ee3f397f77098044ef99434bce565d9730fb18d14591330d454fd53eba770cadd56c83695783216de7ab83359bd6cc2c652a847d174e8f01e6f2307814448a0691a345f6d034e99521895fc64247c5003adf1a14db2447417eee01b71f61daa56525643b45999c0672cfd762532b00325e1ceceafa804695857737624fad3b3f9421101d4d4fab97e615f1b34d815ef0a7a50c833a98a2227ea935bb445dd3b62bf0b7124c4903f873b3f08a334dd61540d140b4abac5be369d21a160667fb0652137621ce5cffc755da05766dff510f2fcb8434b322eaa324f3a5d9ad833b6719c43bddb504fa5855c4c0dc3fc82a8e9521cfef72c4c71986118e073f5b131324ecbbdf43cc02c8549d0f018163cf715f5610bdc412c05b18b3d53c97efc233f94c273e3b6ba6a580d629d0f66d9cf3061bd0a925ec97fc14b014f4779e30be2288950d750d6ee77240bf6ad34f8024f1e999fbd4197eff51fcc411f756c6436590b71151a94ca92114c36b4caec348afabb436f92018c1b8a3efac0c7932475ae10a7d0f73b2fc75e6d77253dd00a4e658c9ee81c202e4dedefe33ead3d74c34bc2068ed06b1bf0795cb28a6fc5671ecc43ed3eb6a0bf754a1c1c0c67309cfc5273f1200327cac59e46a945da28e3ca612e30d3d0ddefd74e8cc39e8063e5853f414bf237637cfccf4ee66827e4bf58e2702303e90b226bf246f95b67274f61ee9219a9c5ae41b6aea2a17728f10adec9a5076105a090a4a2039922779347cf562452d7e917da0d93228b873d9e2d7068edd058535ae75194171d26b56afc2d2633d2626ebb238f32a58d0821cd521d8cbe6bec422545f98746db1993dac3ec85f35217c7170f800c77321c8c147958483355168297ece9b3333b324d7666de8b912defc94f8c85056bbe628397f3976d2aa25db04faf8a5c80fe1c6a4a48faf6c28de0dd60c894e344f72711e52bbed6bf3a75989d23a6d089d03001592005ea2d2af3a539b5927256e01133b3de7819812dd2138193ef5f8d7dfa5306006d7f932b79e56fa724b667f2cb37efd883b7556b3a556e3138a851a310b1e540103b181aa56d6329dbb85e39fe7f27125c2e7889dfee1d2e274e3297cb1c91d6fdea04e4216e7261459b679a4424a19ec9b482bb8ae0a286791ef0978609152664483b2a4e75484c9e3a2d6c51858d6adad6bb76a9373c173546b8233f35357a2946376ff524e5da08d188d294785a815c53da482b0a12b2d6399abd5db8cefdaf9c37db1c37a6559ee37ec09a2fe4e94b2821fdfe22cd491dcdb662efa5201fa3b12e1c51263ea2c0d0aa26ce9e9dcaf26c0ee6b7528cfc848b72132d9d4c83e6a33cf4cc33e93068f0244a20f3987c5c9015c6697ae468a8ffa15c33d17938cb47b49b37fc925eec17e59903e477fbeee7cecffeb9c72dc5cb07c6cb370933daae4c398e785db1dc2417795f01d2a6597865a4161e7cd43b36a057ee9afe0746952ac5be6585c920c860d236e53af1fff5783bde04ea986f4d9ffee149925a6dccc3ee65c9b9347fb00bea60d75fde1749b7cea3bbea6dafc0f2e74e554f75b0e506372b17d6eb413f3c894a4bc203e38e4a2ca5d519a605a7da53aa4cd5f4b6ccf622b7d245d643aac00de569ee9736ab67c0f2a428ae427b9379c74c79f2a372f36f00c5137b77fa798bf012c20462983723ea78defcd86ff1f51f45dccfd2e99c555626dc8fb95f41269ffa7f043afdfecdd10cd6eca4e89151eaee60ce7965f608c458e24fb0d86996cf15d5128aaee4b387071697c1f453921318cd5daad3702b94dd6e03f68842d4809cace964864ec05fb4555b7d64d1bec9eda67adacb93c9da5262dc39b8f97cb44a22a21e9c3f6d0928d7fb5c5b7d9bf493ba2b59c5be3c4559ed54f035d5165e693ccae3c728eba4b0bf292c4a76031d034c27cfd35070e1e93aa0aca4716d319978fefa42c027951965283c7ffb6961ad2042e09b17495c791a738e2ab10bd410821644bf5c638b30dadb5c5e2b0e65b79dd829d67c1743022ca054c083028f0b1123b849f89e78189b51e2b4fbaff56c7c9ecce13aaecff708c3847dba7be6b9f0237416e0e94e497eab39dabc7b6ccab6e68603a61a5e43dc7bfe78b3462a197db862cec6643c154c107770ede19a7e716bb2012aaece6f42d57cf7e694e586563403ed9bb320190c6abd044329a150e8a9151d25ae19ad4ad163ef278c79c144b678714cb50a72cedbf4f273ac79bbe5540a0c66e78112960b95e582bb179bbda96ab12ba46c84dab82cd3598bb53714eabb32f5355b22e5ebd1c9e5370f3da09992bf7da71d15f3e4aac42a52fda13f359fa171dd71447ffd694b215e609e5bc88237737bb4aea0ffd3237d282fe675a0f1acd32966b8795b6f4719bec7e1e468b0b0e03d6e8a7da5667d85b315681856b1a7dc480810a8a9298c1fea0c34a84b65f880321e02152145cca962ebfc42b20b06c85200fccac408c59e7ff8c9ba39216501bf56b2d9811079e3da2e9ccb3a83a5b9d0d32914afc5c086af511f2612492cc69b12422b230ba246fead18eb86ea8e8057db0769c5818cae6aaac9a106ced86e234c1017d098b335f05fac2fe541d1dea6d9cf13b0a2105ebc9ae12484c93fdf9f9481d79eac25ed35ff70931a9219089a975a8d276c5f757bc2ab6ac840844f771b22ca7a3b06a9362e98999a43c0753e7ea78cb7fe7d953c6fb3781de6c7dc384e14a8cfc735c1164b38e44476622e4afbfeecb3dcb0adb3df1dfb360a04cd1693e1bb15c5af54fb7c496c5f363cff31e895c56dd608cf669987ef1ab1b4f665b6bb4790d5942a3e47a0d3218d6b0b24af93d7196a57cda3572c8b58c950540908e3ce168b24b67913db4452c6fc58f4798bf01263cd247b94fb56990d1ea5cb3c52706599f3e90a039e6668436250f12d932bff74de9f3b29ec201c7770ad0a2d9fc4a6169a9d771bd673c79f97e50418af5fb9231411f83ee46c43afc7a71fe26a3836c2fefe9246b8e5a542d4b951f7fdca1abb5e921742562c29d789b280e3b34da19901036d372f2841a4137b50a2d64a0aa35458acac83ade0d25c6511bed7add89ebdeeaa51dc0794f812f932ab8e3b43697e3c76b0d4b54da98cdddd4e8d49b09b5801d99f448165fe1fc8ac2b88fc98d1b137132ad2863bb2d9e9cfb673640a6386271c343ead743ab08ee941c93115b3beb905cfa5e57a74eb072eb8b2e0f4069b6dd394132f984dc57ed08a6c9343d5d1ce529583e3c3dfab5f815a324ac64dac871e72ff83f8571be6d333d44b467ccbcd7042fb8c6d7693c5fb317fa2b0dc0bacaeff1a7b6a1674339d1a211bc1d934cf21b8dc936caf0cc3a3063a6a9ad21b31b2e6cf945c5ad5a0cb329fd88b5a9bfdb44b8def0ab58ab6e08e0e4dd1116e36ec07f0e15307e9d849650182e329161f58b53877eca2ca01fc6ef327b9a28f50386b16cc45bed954192951d27e4bd6cf229a8c68b49b35d6c4077d31ccb809a7c74d10d09d6dcf14af6064943d72659b14de3c4eba57f72a918cf17390b5779ea97af236057febbb27b5e8c88ed18373262c706f0e9ab48f83a752596a4566d7f1f5cd59c8595f0f9a4ae1c9e2e4f6eb7acf0832eb15523d7114b03f0cbe69bec52708a568315af8c7110ef97e537161f984f15a946f15522399eb920b3af7c21309362cde48c7f3a25874f5af9fdacbff0ecec7f7f592a8c04cdc04444eda9415554fea3e753038f1f3615bf85556b8fe9a201a16dfb5003762ae6efd27a5d6f40532def99f9463326dff65cd6ee78e9dcf4d63c48d71d88ea7ddbfa44cf29deab9f7af2b1f9bea1f8ed1f14ae93913296f76ef7a49f066190e99097938af9438e369cd6f17ae5e2d8e2aecd3b255892db61eeeb1e25bbaa20f44cf826e9362f5153a75139f85e650240261c772f3adf33c7f318fddfb76b0211beb2a11b243951fb769b0bbed9e086fa77b488b74c5af858587379317129665f9090c1aa95aec5e715e750a985d2c2fc86048715ce8eb1ae47a239986b3d9b83ca39ecd0b89d5dbccb3ceb2494a3e797e9606e59e80b15d0b9293af8d86010a6b1e291d553a850b792c859eec65c993ffd00ed4c38f7de30cd2496d92e01e68e36be6ee66999f78ddd738cb98477aa3425d9674a03c5b3d03cbf3118eaf851084b52462bf7f7b896e578d926cb5e4feb7619d54aa97ed48e02b13fca8f9034c37cd55065462738abea3baef820a9a8cd2a3c18e26c7cbbd73820f1c0d70b67b04c5f6e48cab28c232b527485d618e5c021de77071d2f882f4eb2cae37ef6a79ab52bab5a26e158e76072071f4e46a9f80689460d011101f001fca15423c4600805a24a9f2bf6d68f030189344a462ccfb37e23b03387d1d3514428d1313e17ceb73bc33ed154d69cd0ba73055faec61eb80b5c1e5220c08ac68d7e52193b976196c47f0216a467fd98ae8f4138859f60bfa47918e7e336304461f2f3a76a1693ff04897498815a483cbd03bcd1c038ca9237b1d1497125b03e943d6952d108a8d8f4072296cb48f006872d7d0fcf9db3046e86e8929c12213acf9d532c4aa126a7e043314efdba76ea85a1d541fccbf6427721eec97942d41affd14691cc20e832b4b3231a536e5123614fdf38d9666dfee8d7f66575143173fb1f1b2377426f46eede89f52730514e28b87efc3c01bd146b17cdf5282b424097bb3d8cc006ac2a360dbf11bf6b520823a07f4be489115b43ac81d4e6d80964351a2061bdab3f24cdaf5a04fd1c6f206a8961f262fa39d2e2791683e5fc249fba62f92ad69927723cbf893868bdf878912fbc4df632635edcb3c27049dab2b6aacf2bda5f57fe3db6fc4b5156a6ca548190fb0ccaec8ee985975f89c4b28b7d400b6195579b21239dd0ee437fbc6a54eb862deea3068365f529cf2774ae2f64314cfb3896ad7a8c9118f396d5d0b99ad200136aca5e027dfb5ccc2a7dae6a0b41e8d374fd32a61800f0d7e383dceec98adc61a5e31323ed21b051e6f87aad105e61bd3ad4c0d0c27a78b7efa967d8a3fe6494c3019156fa5608265ec8abe421cf698a98bc2aa3c71357d07c903fbcee0d4f597b21b7949110cd90c31c857ecb0c355aec3a00c21ebc9e9c61842dc70b2a10b30f0d9c757fd3f43ed0bccb8aa3cfddeeb9844a578c3fa1dc0c33247a63a89904dee7eb4ad34fd0912f53c8da610d6e724412cb81efc5fb3573167ff3844f90516a373673d0ca4ed1287543290b85e289dac46edc0f427e19790fd2a88c869f45b2e2c46263b90bc46235f8ca9d0f575533c51496b3e0dce414e0f517e27dbd0c7b046ff2fe2605c9a9d5f39827e32a40894670b00bf0c7178136a5fd6993016ce73cd42d903de36d5b19fe0a8a6e173a4babe5c858c972b92e00aa6cafe035052eeeea4f97137b72dfec1d8d8511676d9b5256b661f963959780c6dc984b523e1a7951610192efe40a0d6999701cd25027a16adda15d56353c70bf72c1b2ba5b2bb0b9e91142b4d6723d41a16a087056b5ab62bbb36998c4be915b22f11ddee19e253bb85b9fb6427eb51d428fdbfefb572533a774f6769a45b55caeb8311be7c0788d5693a90af1d36ac4fafdb36f698e875f2a288dd8b9b56e21658d4962de347122b79284e7c7cd4cf9a5ff57b8d39d028b3acdbf47ef40a9fe082bdd9bd1c6b3349689bcf4db9f8caa83e92cff73c62f09d09f58f79ceb4c8b9838e3d069289eef67ae2b3c050125043f249c2c3198eab747fb45798f08f706178c90610b64bbb7594906292bde0738186f1a2abb1b55f5712f4984f9868727a0f396a380d9bffccb3bca42049ab182dbec6f0378c12cc1f4a1fe111983335d7d9f810edc163da493dd8712e6d57ee5f5bb3afcc07f362d0a197af7d585c43b2c3f793af71252e583d5d464361766c956f1ee91528b83d5e6fffde3b1ff12487127193f067a683003bdffc7f9f17d4cea245254c9fa64d608b59e634c416536b553a5ca056d601b6ea5a1b59ddfddaec27677509a7c942c66fc020089f8d985b9eef5a35a22e5f129df0283315268c96bb777a5dd5a68623e61364eb965d6b18489655110950a5fa9ded525a778b7cb10b4b630599380d59ec4bad294deb813efc17b4f0a96f5e412e7536d8a82427cc29ad870c40975632e78b96d7a3151844840d850026861244dc21e7598293191bd2b06d6616f15431382b66c0932627562cf5af5bb782afac9a83eb8a5c39505aec0a55b5a085a1b68f4d0baecf95f1d27018eeee637f6a18a2a1361410924eb548ce4102dedc0a1c7dc6e1b0eb0c5ca1609f9c7d1caf0b7920835635e2c83b807796f060ebef1bf527a175a70d9c7696228f7ef206303ff7193277db86c8891e144aeb6d88ddb6ce1ca6197cdfceab307412848534e2fe74c2f37bd051b50dc1a30e0bb2ad4c08c3cd4e63f361d0f0741a1e7bb8e0337f7f1ed69b0595cfc005da03a801596a26df66c886c7a815beb3ba057b216d60cee6d1f920e1f67a11b6e0923ee32e87d23943bfe7ef89dd3a293a9b1971e39fb5ed46a12970b66aee0c6c64e60c2f6b73a3d832903bf087a2ebc0010554a2017ffb904f3282f1cb25bf3433f5bf03a11db49ee3145c0cf3248fd477d7d2e1e1da3194c5dadab5036c07c488cd0bf8130de4e242922698b57e5ebe7fda0839b3bbde034d6074bd42f992ec0e05fdb474d6a4e3fc6824e8d27d85a12cef20c3fa8f5c57be7711e671a65f1d3f0e3dd4f00d9bcb7e49f98d3b8120d0f00125ceec9f084e3e26b7bd884800ff59877bb2fdcc8ea870885aebf703e045f653d71b3fa77015c268f63af03b3fbcdde4710c2ade1dace2dc841b3b348b402246f41ffd2f6a77b5118046a24bbc771de1ed75b99cb34a0a0563e146ab1aea10e85e8ee8406502507c3408d3344a9d625ee193641c5784c92af0446730a28ba68cb73fef2425758faf92adafae6228a1fe61253aa213b7a093d4cea19a5f4a3bde81ce9a7fbde7e5f7a11e76014d79eddcd3787db9014a72cb36bde7e8c4f695b0604c6f67809f0889af29fc57ca1fd44069dcdcb67451d0903e6e57229ba5ce38ad29cc209f43c5045df6017b44c4721e66c197aae7110ca4ef72064758e20517477683240fc106c2a41b1766997aa2ef47626882f0ded5b4e33e8467e6328e74b50d69193d514c32a19b4d946576493c5c261ec04c2d19cf1052edb12b7c60e18cba28c24e81af1d4fe52643a42801788ff902a0feb0130b356f673ba1f3541b5fd8a48bd0d1cbb4af272400f297a578102915b40d699e83b48c80d9038fe8e20b19b2c5b3837ab8e8d9a8a5e42d78401f272c7f7ad057f73683a66aabcdae8a4e2c864dfad5e0a6a3fc4315fd2c0a941ba355c9d5bbb1418b65a10bff33dda5430c3f3a79c15455785e6b8a05eb04169e6e10efa9b9b5d3f040f41034397d950eb3b0f357b80287604c5bb2ca3fc808aee87a2ec148357e10a2f9b563f0a55f3e1db5f05e1e6ff095377f5fc0d1f4bb9ce817df35a6377b313fc2c119febb7c1d3544838c77bca3a77a066641db1b421cb0369395dab645e8d960429243029eea76ae78240d37690d8147d1871b658ff15cadd0fc97355225a3c6f3235136d09d352dcec9d33feec770c4052bda11cb975fee37e7f7ce6e1338ed3cfa310e7a3c6fc8d1cfcf55217af40eaed015cce6441e2a0c15ea1cf4c275e38fe4bfb339e193cd2b5155189064579bbd544eeba5ca70c921cf2fe7950675ccce8bb345f029b0837a486923082ba2263a0fa7c4724917b290e58e01f455219dfd08842ef9faffb76d47fcd0f762cc3206b48c445833aa8546a969f7bee933c027dfbe6cf743eeedc1f85e01ed15de0575892cb62c744cc67d87ff1b5a4724c1272882e34644061f088e4eac9e7be51d622ea70670d8552bd22128d4f8ab9cfb1bca03b1fc2efff3c26424440d1f0e3ea1a2da520a22254f441b4b920324777cb87bb39a70676ab6e126fccb7c711a7e5697457a86bb914d634164ed86bc343abdfe7dbd1a41c4cc2beb1aa991d9288d6ae61cff777e5222a281b6891f5a8810526dcfbccf2b28b3b4251e646e9c9ede1256d12290b10709d377909d21ee71f7d2ed704dce38d67d0f51bae809ba02d9e93bf3c686e0bd860952575bf11f86eea88c572d151edc453524c56bd73cd280ed1b1eedef965e15d7a73df9ac6c199de8cd975a0cb4108790131372cef3f1af6e685a73269bf2884ee28fea17eddf6e08cd6e13425515527d7a236abc8dfd38574e5708fcc834066b9afb4ea300d49d9ccd242f43a53e72e77e5f3c2ce2d97ffdfb35c21dbf4287382d344c092487a81a785083fe44bbebe950f7fafd276a28d8226c644a875f5e9baa148a9a11b40a0faa2606ba84690772588ed9e4289c1cf5a8347a241aebdc5a4e1a1582a0909a28187f086ed1c14732afc355a2d53eeb77c5fa2e5d9c57285be9c5d9df68fa28874a391688a3bd646fb3f1fd1a51cbaf5733d5eba4ec0d8a79316b6c38736d2176bea04d8d6c1828fc12a0a18ef233b5ff135a9588d61b05bbb24578ad2c73b818a24f0beaab1ac7b6249e6baaa5a64faa426aa83a116c0d2fa76c5dde2a4cc0206145f64df210cbadf9a9cfb1d47108cbd2a4ecb4aa32b9b6a5e270f1459a4ae46377db8d3f868e016b7090926f400f6fd70ea0fab2d07a34ab95a239e85b85f4ef4ec5d75a28746e9190a2ee723f24236b3dd8df858e59f29371dcfbb753d772c30018c2157cb4c0163753570954cc3558ecdec18fac797001de3ec5de039fbcc2cbd52e5ffcc3da669788d08feff401444e400c8c028b279c8ec2e4943a37aecc3da7537f9ead61a74accc6be3bb78d417eff9c4350e53d4b5935a448c0046b4732f76c1cf70d5a239b0f7a234e5c4cddfb39245ac9cdfacdf1cb3f7fd292d5ed2ececa0a713487bfb7c5fbe4d802855a8b8ee567b045c6aaa40c42a7c765ce4528d8c427d117351d40107c7d88cc1662f714912a349e2e72607c7ceefc9149a074c8705bae026b3aa94fb22c68f17b0c5903eded3beecc5845c247a766da5090737978796d70b43a865873f43fa44a71a72dae7c6b595204232f3e25ab783c1e9bb291a170495f39f8b25b051606dbb27d8fc324451db822e644e3877bf24dc83712fae2fb16c39d7ebd15a2e88d7351653777063af05d030db6b1326ba56551ff12a0909f36c6788a66adfc8b9a3795d14fe5d3b0f7984d01fda8dd0777534a6aed9e9daf6a19c64a2a8cca3d450dae09d2d778858887bf3aee6b41ce01bbc57e860b2e11969e4cb6938f6c6b461ac11ba10542408a292661914e2a10f04cb31c60ccd944c70a631c3173882e9bd0334c88a8eabb5fec1e4ae6b7c7ef8a36ba29b3dcd6e21ee1fd385f3125d460691e2fa0bf98546a974469d381a8210466335be20ac00dddf85f22663f8965611e6604625afac9c50b34af17433b157138c7edfa8ed655a79d351827faec7e52d709af57d9c6424a0770e3e1825619258d2c5587abfea89a1643a99bb64040e0e6943e0f7ff8d52930fb3e76ae7ce1021877aa20c0d636bb7f3b27bc462454776dc122dfd148e49226da771c21d0b6906cdcdae25385232fffd89a7f2e9c81d795ca30feb0b8aed269394bfa56ae163c5dbaceffc3859705f685cb9c255e065bfcdb0253280cffd6b5c22d5b9ee7abdfee03f4352b7dbe76b33675c72a403a9e97c2ecc710a24b1b03db856e6a119f7f16be31719621927f479bf5e7675c636208403c9bfba05fe1a2dd7be232af213611741baa3adbb11aa729da9c94c77b44be714310dbdbe5d4d7409fe2e7593e4258ddcc9d65c8c31effb8b6e743daca6c1d443744a5f308e57b237d86a83e609f4ef2f15fe04100077730a37b22763654a054f88d69f7bcfa40e74593395775d5ec1d75602969305c735aee0950fe8baf8dfb882206486e71b186b32c77c69b0061024fb376c24020401b798f40c9145d605dc5cb3b08e4971b70cd72a27b37a045972696c126320454f12c3c52a9ed097c4eb4c32d0e5110d8f9d0359edcf4d09d34c828b71f9348e0f465df6e2ed9211cf2923ba3bf139b8c2c27c7041be31c88007d3d6f99ce5aa09421794c5d779e8f588f7935a3d7a5667af3902da77e6ec7b990868a722ea4b3802607511a2d29619eb0198708dde6fef1f2b2e457d917f353a142f71fe1604600f09a8db5a1aefd5ac4bc27d4a36283ed7237d8e5176eb739a9f199eb9bdda5a748c0088e9246e0a3213848bf63c0d8f85488750395df3801cb7b3b6ce4c3c3a0a628784770f88f5ef34fc9dc05fa05459932ff3079539e0c629fa898faa8dfb50001acf04e1824fa7986d66ef04585d4333550bb3f2b699501f758794f1fa782faba5735be458ae6fce11b5bcd82e5c297ae8e65941d6a39c33e54de99e7b426b35cf71e833922f6fde00143816da63c924dcfd63bd6fc1c54796395d6a97cdc406983cb886cae30ba31112a0a323f228bada918041cfe85a655bc646f72a7402dd3bd85f0cb0c2511de59be7345c37091fac6f9894984e5021183bb0daad4fdeb9cf01777d08091b9802f60003e63e4344e19e87496654ea51549ecac0f60320093d5e289b45cc404c4d43174e474d82a94d85cf80150691d33e296bafb6af1dbb34be4350a2d4ef7d4946da523875f3f9a2381c31c6d4c237799d9cddab2bad122a04f7a24448f4a083473978e798f736806e9964e53bbca94f771d8b63ceb18be390b49b1a23a16305040fd35a702665a84c64724d3fb508a92a28ff15979fcf45f3257eb618657d9d544f7a9ab29d20864f88950fc085584c5f399c50f9c3b03e83e35f8df97900eca3b1ef92c62cdddda2ae90246963861ef1f39aa72809525be71855ed123afbf39a07e36dfa8b50ef66e662884e8ab6572280806ac4ca4eeeb90e7d9e3d2c7ba2873a0f3dadf1e8ac98286055e25b319ed814e1718da4b97c205bc736915e874afdbc2b7448892606c7280fb96ae1b7f9bf1dfe2c196f40b9b25f174c4be57845e0f0c6aff3efda09d00cac1c96f96f2deca83e18672cd39409eb5c0eed5d06718cb21904182f7a968de3a3c734b3bb67ba71881cdd1196fb8fa8149435b12b6c5934bbe4fa5c2056166751c647f17c235224d6d8e440860e2da6858bc73a589e37e549b5f4e31bf23a63a61d789f5578b594bb309cbb27715429b328e76dd3f88e75d287537f33d71025e643dd5a659f42607127db16ca0591920f2bfaab2105c83ac5fd6fcd9f601183e4aa950a588ef4ced1e06bea88bd2d999c10dfc3577cd059b6e3c319371a06270b05e23ba4ca84ce27ad20109bfbc4e5934707d99154cf8a533d29a64755561e43007541c5223c2bb76d1d5d831eac0e8ef6f7593b0a49e073364380777e4308d0413f4be94f8b42756c955b1791c30fe977c462751df97215e1bd2f37834da0d9a5a266db27ba2c2f96ec1318ed1e7ce5552534bff63d3ca228657dfa195ecb89e8f6f4a3105e91715d08b0d32b2bb0f39fff14bcee94c327800492c5a1629fbbfb92c77cb998fb3662bb66682555f742f6a28282b9c8f701d4f7e025042c1e23168fab1761d7759bb943baaaa3e31133ee2c182b2e86cede5384d281e9436d67aceb33e38ec62ce713e063744cf25f8960b6106d67b4c620749ad3f97f5f1d4f24dd5c85d9ffd745beaaa484bb1d0b91ca27c10685a87c9fdea12f60dff624c0d847a904bff26c0ec257441e102ca53bdfed1229e790732596efccfc2f822576c4753d7c3a99a56f26def20dcef7ea4476a3674ed2d3f80c5cde897d4dd5936f4b01782288315bd059c3264ff9c6bb4f36691d0a30a3ec1fa5113459268bd199ef26330faa12d4fa1fa4402e14d42ed9f7a99814c0e08273019245a206d4f894d1d96b4defd49d9ec50f39f0049d784c48a4c3475ca75a24a372ee3038d8b5c93127d79b7c572b458d451968b53090854005a0f9058a6ef27c6d7a9c852ad42b067526c0c375940edbde9094c07d81620b1bf16c61ca680b2ac9cb8db18f1656a337987d9ece710271fffccc439e3fd1228f0cb47762aedac7dbc3c768559d7e66e9e6dada45d72a6569f3bdf552f32614b35a799191db27e362fc7e52a3b1521deab3e51de56cba56c070a5e5fd80fa60bec8e0c0c30c77a16197dd99bb5bea967ba9b8f8366bf899cc1620e8ed4f52dedf39b6670f6db7b12e1d7acbce44d5168ffd275113e61f4b1936f0310d3d4374692bc7151a3d50e2399cefd5b3b784eecc668a695ade79ee4c7604080d8bc968c45045d20a52c67f4e088895dc06c8e5f0b83e96a302b455b25af515c86e7ed9b44da9639174c77c176cfa4b8a76c2b44932d1d6cdb5e8b4a362199bc6217939101234a1cf4b0b23c7e8338fd51cd61f4a26d8a454507a4882776559f4425b05a229b749aacfe144e9dde4110270ac84c1acfa3ba272fedf266c76b7ae590a242c78b460c5a17907c3811c72d14fa4f1d61c5765bae8b086ed9aa0576e1f92aeb42b7eed019eea17f03db747744fe244f6f76d3f27b84909e6b8436c216e887ceb86a59883ce3c333228ef11a8ff087eae69e1cc457cf4dae4f3ae0b012cc7598b26b340b14848b070bffa542271b5ab7ecc9829ed83991a5bde7dcb6ebdea6cff2ffc046fe8ea0480c3224fcfd055349c0ce3483219d1468396bd05d707501cf37defa56d7410c30a2aa8e2cfeeb6449272b644136c66bd6ea225c51258e80c16ae5047dca338e0bde48429a6a6dda179efbb163c067ea6a01dddf9a8c5366f69ce9ebf48ea6fdf9a8581ace9fd6e23c73ceb091c035b6cd653847351ae89b7a6299170700af1a1f119f71ff3d1d53aad8d3fc933be15443515b1ca19c8fe5ee52c0c29acac0abcdb1041998a33ef98f3c245fdee318dac2f4e5e2caf887cf11975555870eb720b50bddd82e8c9f15a48eeff293b01a8e1ec203f035799e69748bebec3d8b5697b6f0b8282ae2e43b2b9bc41807a1fea842b4312e84f3bd05b3df4bf019613ecddebe8ecf30cc8f0cf4a2e8459a5924602c7f26608e6676dac2ae3ae658977f7b86b6fa4be9e4d46606da0d3ff0a7dcf69014b16afcd396f8af0f811c1167a06079ad4b0ebf1737aa5f8e048bb8e40c7b5172c3105b7b5d9b048e18c4d781bce4f50a70a09d3f73fd1d5630e4aa5fce9decb4f9fe6e0423caf8b4532f2d7adc4fa77fa03d760e7d0230209fcb902a03c1595d36d54aad9378614f2bc1f5c67b31b501497f38c574a5b152a6cad2eb2d329fc11064b113fa043f72c74d858994245df1f93e38358d33e0d1e5e9e4ee7dd55db485428e4a7b024ca0244af422333272ef868e66615176b314013cc2c5271f3ff45dc9cf2aa61d954c6b12ace956f54d03fd0daa1fd1dc32a1aa400ab0c8265376e8270b70c3eb8052f3cf0aaf764597efc0276b8d913816c5405a3bd10a719fc5234e004b0eb748db89a9c2ee1849eb1f361d3af7a1a0c95224e60f4f09669f88314cf024bd6a4884fbd6f664f0a802592f1eeb9342965426b0ee9a4cd007e4897dc599b5b124c8aeb532086e51b06084832a641a456dabcc0efdfffdcd046511d4fdb672e72980cba6ce6e5da6c230a66138466953844bcca76a4cb5ba44c046bb362a6d59fbd0d077b7e35a5e8fb300fbdb3a056cf1d52b1489119f9f9e1acaafe7cff8d62863a6d6636dd19bcaf42254e9184fea147f4f66dcb82f0bb3fe4623509b3a05b86408f09e4b16fa9ecc9727bafba632c7697397307c0fc81a3ec966829079d0a486d3556122a2772834df367a19d915844b41699c229613915295bbeeb7c96e089e35b5832d2916d31a2a9e8531059c95c3623b4426c451c6212460f6b403c26a0d79b359d9b89f7c41e695bdefa77216a09f91ea1ebd6612311878fdaad72717fc5b4fac1a2a7d5c14a4db58537a19acf363a3c16f1044fa7d1cd70efb9d2d200b87674cb2207e48833f5345b0902ba0766fbfde2468ec5cb573af2fecdf8be8c07a797d4ed60ef59c390796f179bf7b17ed07045833ab7649e6a7668dce77d8fbc2c8cf7f353f9f9f61f54a8fc9868f6f1afe37c5eef5e7d8d839e4e854cc5232e549f618a600f9c19e3e9f314c5f73a583323e706910dc57d88bdc913a91dc205c3eeea3f4deedc59f66266b8b13d41cefbf6324f69c6563e9c44c1a7d5ececedf069da1bcc20d833c0acd2a5671be0d2bea152aaca794e939ba105ad25866eb54ca99fca97a275ed9c197888f67f39647862a50ab9ea0a38c31a4872fa73461235eaeecafd572fa9c9b9a5ccd30c81743000fb1725c1a8e814ea4c315f453d8d2040a6d9c3a61b64372129a2a5b3df621f5d1a544f4e3069211a4eadcbfb701bca7699d26bb69b935c24a2497f764e384ab97ff1a71cdd1f12d4d9ee397abc125a0c1eea5a61aa1de26e2772ccbc319281c55933748e3c58951dc6360523097799ecd65419231abc56764e7a44d4e41c76bcd8f40ce5e721e399a379bf972209c514934c40b1644c49951f47df826850b2885842e028bb0bc0ae7697c8a252229d98bd2122bd8476c0a3d1b84890d4a98f813c04c23cfd11a9e790dabab4c592a189eace428bdd5b9af02e24138930bbc69abd361288b2a42d80326d1e74a2a35a17927cdb3936961ddf9fee266e780ca73d4e5b82c883b7f69a1d72890ce34dbc3bdf7636c39180893e977c34d921e36787c5acc7f1a7bc0f88bdceb1441585e6fdee422b1c6411226e79975892dfc02f98b86c629ee20329963d8ae1cdbccd720bee2a192af42308d9994a3e26a9cedaded15d68f077a1766923b48e2696ed7e309577c85e4bfb1b7129a62d57aa47158773e700c088fc4c4d1d5cf9c8fa1f4d7e988eb4a64f0dc1db559046f5bf0c3c20e2c94a75b785d8a96d297acbe627f4894fd57e07fe6eac4e82d26f330ab7e943ae784317f4bec318fd5dea08bdf499a973dae1fb163031cf1b8aa5761e5219161253f8c7c279b703dd4dfdda3fc1433b6caaf75fb5eedc48ef43541e2a6bcc7bd272a7c82e742b50963682950b80264a20013697dd90cd95ca1fd8624101a5ffc2463579e42f9f1ec838e9a5b8662abbd9df0ff8f8df6e20c9029375abbfc1dd40a9ebc45beb17a9821c1cc977a50b34db0b98ad00770ea15e2c2c5eafce15aa0afed6d614cbe73ac8ea60c11a36973db04e7c14f13ec90efde86b96a4a5802c8f52e3e4ddb8839b75b6c64348290e5421f0c73a7c96f747615c2700580de39733712b71c20ad11eaaeaea69c46d24517f70d88f766b5c2481a07aac2b2ee3fed39455b6794cd5059c49404d309d300f464d843623c785ebc2b307599184582abb38beefbb08d4219ac12d8702dc6bdcc5cd0238b46e936b1629a4b616cd4609754780406031fbacc75f3f2cca5d4e33e12ba9900f7bce17f0c5af4110403e4abbeb095cafbc66bbdf5356753428602126c6386baea8dd8a56d1b4ca460c7ea3de5547a079eb20e31902dd6fa38d252c91930121428dd9cbf6e8cff4b43c9dbcdf20791faeb0bba764eaee554549f40c52f90a9b04391c44fe71f86b60f5ca121e64e71022bdddf0ca35683f8d6873b821b4db6bc28ef116a808cb014d8275ecde71c11d100c1f0020d8df5a3bd913c911143122d0728fc1151167fc39f29a09e336cc4a81a7ff76ab7b0677bad853891b2325c6220863e874cb0c6ace2af3b3013571be30cbff4e65b54a51bda79c625828f8458928751ce771c7c72c09f2375bcc8d5ab5b15699e30ab6a32ae4bd3de3192478dd85b7e919c31119f0f977efdea6e5b50fbdbf3332752fac62e72add5cabb3e5673d7979af835b0cabca74bfbfbba0325c6631e2ad883f5c9aa8b0500869e42c2ba5279d4a595db03cdff48bdd145ef6fe04f6a9884dbde57121d43c93069ce28d1761fd60e460b77a2a59d5e3389b62e1178283ad6840c039adcbd89ecd355ee6fb4611656b36604981fb5d293c0ab428431e0125af77135e7056faaa48e6e023f3b9442f105323182057ae06fc9ca5c3e80e2961899fc12290e2654889964720cf45e16fbaa76306df2b5ba54b133e8cd6b9d9ffe3d05db30461a79f59c5059fb6787c277bed1941e49e0607b16c649a65048ed4903699f61f005949c5c35b3e0910de01f78bddf5ecc956c76dcae2b9bd8252a07b22f12486f0c7512ad010d1eee04a76544a82bbab4b1faa1fcf60ff5f36c54889511de449b9d62404200427391ab77896c65f0f89875c442977594acb892f5249df772658a21a5bc63a6bbcd840aa056846da221cee954a4a47a705c9762f8254d41cbaf0861ef65d869a90f144d58efefd9ecc56126874761e2773e74c66bfcd9f883c2aff9a5ce4691194e97e7de69e3c250340176694663796d64f8cf4ef7e45e66b8265f60bfec73f5ec1fb9821a707b8590398e0ad84d330b1e5f811853c1d91777da633a8339cd86ccb57859c5e23476494c0ec399318ec09cb93e7e9c495d22697f008c836b2daf69270acb4ca3ae3c866b5cf8152645d8470ea8d734d1277503c3c9b831bfffbd6847203dd08042bea6cab2822ce4f12dbdc419269f685629594488e0e76605a8033702710acfb37562ea5ea683398d7c6894653f20fa9aed44bf0f438317a310ffd594c435efbdb17f0df336e9f165d5416401c77fc20e5848a9a6bd94ee88a4609050cb3c4c53ab6872e837228f78c8c479a225f6be68fb7e2b7b1b6b519c8792499d5ae54b2ae35abf0f639f8abfbca532bbb51d307f05ee8921678168004a15a8262fc4d3539eff0455481240e79292ffe3a5721005ae0ec8dfade582e14ad4ee70b4ee27b9700c8fc1dd2c3f6d8824354113aca5db51d5d9f121bde58a71d67aeba5b608e2021bdf0d57f9f4aa967d87525343efd63cfbab1ed429b58ef267a350e46789b222c275d0acbebe95c6d54a0cc15c3d5abcfa3016ec0d3401eecd2c70e8e676b11c5a1bf7a2dc9dc162322e6d317f4fcdfcb9c814b26e7a07ab92909ca960e55f1932834f1c0e0211d1b3609226aa1061591e9b1b8021969a373c13c1240a6f3c28200e2ade02547fd6d27e060beba9a9fae290a51a0ed80edb4b62b6f4ff4a7703376f3d0ccfbb4ebaeee16b14709f944780218b2c04a811249c88b6f082ad2ad479373bef541cc04a54e3b80d950520c78273b08f608a30d678d9b3fe19bbc1d03189cde1d2a89dbfc9e492a2eab1f7f8280a8b9e7dfd457594edf5471d8347ef04b992b432f162c3fdf9d1e0ab7dc6f83e5ba90504dc5514ce767adfaac1b8b139e82a7a7a17bb40b7dd68e3f81693d9f335f2ba0f4415629e2b87c8843e60afc7d1bfecc4eab6fb5127772a6b2455dfcef2e278c620a9145fa81bb1932f7021c4f559b28d012aab4fd29df556c614bad7d0208e2cb09ebd54e6a12946ca16133cf6a0b65ea98cd67f3eb81d2130c4fa17054f124754d8454a0617bae1d30b5b9fc34bbc566db5fdccb6e7e41d1f70c32cab64689443f1f7333ffc47cc55a6b24e486187a3822991e7b1785b1c991b770f105a81b7c68a3b76de810e2bb232b8d297b559fcbbe688b4f6be8d160ba5c4b56d6b00ea32b2cb9fb25b634bca4c279ef3109c852abe05785172b1f2fe32817b1cd3bb5d6037060ee080283d46eb02119f2a18e37feb3527df91cfe2fbfb90775c95d9eef6509062f74e6adeecd94ff06f06decc1dae41ed988b64e0bef6b6a901024b8577f0c45e4577e141bc7b961476d46df46f20d81d32403f2c3ef17155b545a3f85b1969f378435e40b31f965469973edae26215127af527c8d6a88c258b04e247082a9e84ae4d60897385810521ad1bcc0201585115f0a472a28f8f158d328b6243622de03a41c2a20ddcd9b9f45f9b9b52e90c699790cd8db8f21acc94de555bc733639cff01db66846b47739219895c630fcd0a1316fe46d74b41cd01afecd151674f47a4741461085dec5df47850bb7f0b748c8b47e41997da2f19031c1d3d70942c8be633537aad29b7a5de4d44a97cfeffcd9705f57fd7315816c0e1a66960ea6cc094079de3adc88384aa21ddf6406f3865d9d91523206b4ccfb06ecf6cdf719c79c6af04b769f748fe2e0fcf9811c229f6b1dca925c682532e38cb9b7e3db2438df0df45ce2d4f02f7723e011ffaffd7acb9b9cae5e7a09658af3f90ecdf09508359534dc1822b69579301a290bbeb70b57bbcb40a6e96a001dc613e1c4a3abd40f27097d0d5f845cb8d5ba45173ccf53757c5a83ca0557d1a0c3e4a611ce41e679bebd09eade076a33cfa30dc0ad67f9f28419448303cf60efb9f7c836713c4613caa80241583ef2910d4b7d4422a5600ffefb9476eea80eb320a0447f015838f50291a525cf517bd23390c2604e2a8a612594829cb4a782ba729b6d072f824571144ff9d993bbab5cf89d39cd4d388e8ba39543e02d075d45ef91aafc68de6ed88c42e7066df99f98dccf74c25ab46d72357b5dfb8bd15bbf13d4aac3db102c43f0c695180704f5a13d886c7f7d40fe34612adabbcb43f5ada080c8657a219d65191ed2c216fba73aa79eb69a0436ad3b0fca87e664bf2dc00c6b916d94a4bb32d3d5e91752cb4e313f60e1ba7e18ed8828c07c0acb608327c3796f104cb122470be51e91564e82330df9c49b70e46b620be42efbe41bbde3156dbcf6997461f19b592e8837ecc71144b55c51e850813a59fe994a9c4a3d068b90945426872fb1343aae897a5206133bae4edbad8a69af434128142cd3d26b4bb5d1ce7df85b61138188953c8dfd1abc49e5941e089b1b8ca829357c3e9aeb2212713b51399aed9cfa682c0b71948c6c7bdf390f81f04ebe133761b800f61232d559c4978eea5ab7ba82169413dacc9a9afdd463e29db3b6aeb769924ce4801aa8f14e04dd4b0b0692015818840daeff3fb25670baa1ad7ca4835527f580771956c8ac6740647497d1b1354dbcb0bdfb6f20af429d4d6418fe391b8d12bf9b62fe058324b705305668806fbc4063724b734b6dc8b7557a3dcd1de3df99f3d1c591eba4051f7d8321dd77c248ebb41a9b8a1978ece48ec181d7352c5851065f2831d2430869e28ba6906e90910c2c9b3a5614a7c9b54419f36ecda4b619ca9a55e9aecf15cfde300435e61bd59ebd524561a2d7b4874ffc5d673822fead80f7f582e829847b295c84fb3c11cb2f60bec9de4d23639679ac3a2bc97a96ff286a4955a85bff5eed2dd203fcdc649bdb862947127834be6e9d6a2d39f96f41a07d6b2235195e40589ae7da84da1d98f23c92ce4b84d3036ef27818bb3178a7148dc27e346538ad458b74dbbbc8a6f3a968cf4d4c314d69473e5840d65e6950bce84f89bf7bced04d2118513dd1501784a2b3f99a7f83c4a4d6a1002112198a3c59e68c4caacd7ed99f068c8d2c3fd56e8558da8efcd8a932e30c160bfaf852adebc0927c7f93b6f9e48ba5a392eb0aa260a0a101893b2790377ae501229320a4760ea4a1a1bff78adf768ce54ddce325dd5b8fdfde70e72802dd736480106632130c24a619777e5a3517478ad8e3e377f697f3dca50f3b8092d092c8c7aedcc22436760c954237b5ec3685cb985d5c96d36b632a29d4cfd2b46b40865304472415c4ff244b9f896429a34cd7822e7eb941f2defe0b842a4a81cf69c86738b8d805118e6fc2209e0cc9c056051afae44bfa69914bddedfd91f081a880e6934e63142d1d99b735526c25c846e6476f5889afd552df6e1ab69fb12a6181c51ad990a7389ad04136d622cab61d68d37ddb54e1f1682215dd24bd1a8b14e49d3629da5e125125e7341284dd10265936557ebcca2b8dd70e2ec4e8edb925f3e510243a15fcfed0b5808273dd820c636f8b5eda126eb8ae90a840185b63e3e2ad8233642e5f18863574be124177c811e2ac3f975f032aa64ed8aa7478d92ec2a3030f4fa05354edb4d6d999c1b9d96e3084a4fd91f67d725b8f5222bae27289e549fea3df97b3256da157d5cc91020a343f18dec168716c0138322b8c27f0a18edf2692243eb7e97c5a35968967ae0a118627eee34ceab1c4a6bdfa1f4e4db0339c1e99a6b359e349347c1fb4ccb0020f206870d5924a8d14886afc42d03e8bce565d195fa00d23f5817180a45cebba7bdc1ba3748b541472cd6f76658305ccfdf1130afeae0070a388d9c163b26b57a03d2e6bf73b6029835831992bf28b746a3ca332313d63c31e96b6ef96830bfd2a61619cce6099f8e0a98292b17515b45cff67e9709772a37ffe198525cd20fedbdd3ad671f28f745b00e23bbb5d843c8b071cb189f11e8085a13cb41363e91605d09e4370d9eeccdf1ce9599a0f529406b6a71f8a1a26038a81c7af96c8ef83d7d8e3ebd48a071185051d9d9dd69c5e7a61f5693a7c4566b461f1de3cebf2d9665c22605390858d28c8fcc68e65e99ab52171f86890a99f773695d350625527dd7169454d0ca94b10c6ae2b104b6ddf6aa959428e45932834d5ce1da9938e5e6618168d8d18b955921edf92f346de8edaead7598e79e6541745402635c103958a545892c385e2e0f598b0cfef738ab1fa2e8b122ccbfa6f15af645dd49a50223b5299265b06c70dea5905de4a6cdf2ccd68a51daf540ef4ac43bbd0d5a187d7dfbed738268c8010bcd9f239b051ccf734473e4cad5f84513efaca7ba4a058dfae4d6c4fc5bf75f2042b9841f0bf9048436d88d5ad129a36719afb5f57641078d0bc2183dc5a14c686cbe1b59dc4e524c8220eb3d9b8c60ad690f5fcfa869eaaae8d9a287e373638ddaa37247a7145f516571adb21d8ac37402a95167cd9b2c2ca42179341e5faa6ca0c54ae20616717f16a55d8db6666bff76cb295d30bd4d995f30bac23490dd01826782697ab67672f8c98ca62984b68844397bcacf2e3d3e679a6bde3cc0e020c03c4a0c41b0e4d42667b93154fcf4c6f8995b8644e9b8c8f2109554945211968ce37aea9a8c8b8d96c36d89e010a81f631c742165b1ddfbb0aa4913e5ddb6be52c2423bc19bb2844ab6fc7ffdb248cd21ef27e5fbcee3799338bfac286f581a6b1a62ae15f5676f5feb0891e64e3a4de8c4f4bcd282a8e9fed856b5b05f21138e9a05878c0d9f117fb490f49145ba26ac6bd410587e95e367ae0125885e9f1a198aa4f8991a3531ee538a957606827330c3b91a87cbdca7664fa58fc0da6a836295266c266279a9776a7d4e82df3f17791c4e0fbaa02d957dc451035b4734426e1837fac162fc9fb85aa49a1f76c8919340234006683ef4f7783396717e21c87a34794bc3b1490389cbe0bc7bdb01b951dbe37d052f4631bc50ae32dec668af8f1b5b0439fc907c6f8a84fc9f9258d2785c258b9b219bbd0401b0410b550ac8e5315bcefe948ab5452caf1f18c26b30cf401f4a2b81d338131c9579be4bcf1a227d06b107225ea20437f2b748c4f13bc41c61199b6c22fd8e3569500e6f3f4adf5c2f8b1b2d546394d4c44170ce9cbb9cf18fe6d230a0a70b63b8de7ef253a2a308a88d57d574d42ff90b39b13f40a56e50bdab0da0ceecc5ca1fdae2d3ef52c65d9f52b8694928f0878ac6627216020170c53bde0e4eb0b95237f9f90fa56721fe464f6abb3d56c7318e0649fddb52e54e798a52de497436e64fc3e63783e44f1e5f51770886674c10c67d870039b88e3f782afb8b3d28f48fa00e7a3b1d2844565f240f9286b447c93d369ffc6c972824337b78895f1eab789fd0aa7c66e8216986571184122fe68c189639e7f973ea1e01403a499a46c617dc818054cd7a82f2ada82c0523f82b557340b7c05f7488f3e6f9baeaefcbafeff2c7cc8e2e7b1c0178680e45615bda168724af0599e38786ee76fe166e57a252430d0f2b7c4c07766a8d5ff628092ac1acdc1e68cc0a975e9c51c9773e09d2ed2cf64149197008d2f13de80cb57f92acd4ff137bb85852f3bac5b3510e61405cabc66aa31510d5f817776d77e59e31321036e7ef601e3811ace012a277b4a6bf30385d6bc9612b01ca438f4da74c1c01c16d34aa480ee88feeaee5d8d574ef4b42471dd73b498475bb2e6a03a77db9c86e4a0634b6ba9e7b34e7eefc628084151317865848824975fe430b7b359f17d9070b8d9a5f44d8c62bd6f95d610aa330707631c704160b1e0bab242d4851f4482ea6a7340eca79e2aef7cdb9b28e9544528b132c99f8994e399ac74e6e0b07f38b358b3f98a72a73cb9747449da5c1ecbc2dca624b00d57ff8b757bb43a09314a8470e0a3c71b188a7c6462868cd13cb5bf80fb1441a365f07753426f05a3532c3676f56e896379593c949f5106525dca61e388fb7ba6d64162f78a7e0e938b4ad900e0106b3d685f3c2d2a760cf93b65f79c6de9e15c6dc01bc2b03666a1aa4033087a2451feefe82aa0e31c56b7f6796fff91750d2b86aaf26f89de09a543944fea926128beacafd7e6d5b5f3a3ffb12dcdb628d8e7c532a56cf6746c8423698bbac3fa3c44a5f3a1395318dcb4464004d37ae00affea5c6369022b77523b39ec276575bb369d3805595110ff216ea6b2268e529663ba1fbaebda21c4b4e6bb60d2ea1ece9dfabd4407e0420d5017ae26d55e9dca5e533d2f4be3bff09c509a9c902a8a967028273f0c6b43a351c2da53d371b1689f2c0bb916a17ad605668abd6f6074e8e4b87dd60b32e2904b12f2a12ad6305107a9e0eb7b08e7c85a832de32c8b0ea7875d64b481510b8de5ac0cdb80285d2d3de079ca72a1e586de01f9291f39504ec50c8553080d98a97981d8e33e999ea3e41abe185fddeee12458c376aaa17f0ce0ecc40463e27c5209b20888a99d38b4331b91cf620631c8a727f88e29ef0ae83f340e9d276fa6ad8665ae0d41c205fde59ab73e7aa9274f3b559df2bf398cbd41effb0712005d91edaa6e2eeeb4ea12d6ff69d3551191ea62d3becd22f1f2649d45823ee1322be31ace33bbb6e54c4e915d8220978167815abcc799dd236e4caec8c45d34b2680835966eec2a90135647f932e31123640c8691bacc099a323bea667a5ae5fccfe75fda1cbe078f22117a3f544fc86b62a3f2169bbe05301ee66ab8f8b4b299aaf5a8825fac44540854543e9906fd1436a9cb5fd783dbbaf8456db95ac5bb5bd80470d5ec90851ac1ce6aa684c7791600a01d0578aec1eeb220a9260bae84ac7f533b35be09bbedd4142c0fc1fcf61116d13f811971f3553c010f498beca5b3e3097fb8c395630b6d128705b666f4cb36406c635daf0f4f1dfa1117620879f78a9ecbe7cd902ceaff0d7ba9d2daf69bf2db759d44d47efa11048ac2b640bad23c77fdb4ea3fd38fdb534b3091aa170b1348f63295d7f265c99bb16991b6fb29839f3b24838d70f3c391f1cb3f3cac6e8c8f4678d378f76ac025b1d99a6068d096b3c247747928324d8b2c180caea833085d227a414b452462902653663e9924a36c3cdbd37433add4a881ac2206cead169412bfbdb89ec616a9f03cb9601760823130635b341dc3d1ad78fbca88e5cf1ae1b10f451d3770beb28ae30f46151e236fbc8ef14fb13000ffcb32344bd09c1daa82c29f9ed5913822772dfeebb6adfcb21c5c6d7d35c8e2227968bf59ca163089f60d2749e43a6e0efe1767fc80168c1445d892b78291cb16c5940a8c9df395fdf6f505c51ed5b112eac94accbb0b3e1ab3498733ec7f2338de4d19f8a6c0a4f6644374bbb24fbcc0c7d52eac93088d7d8be0d4810bdfd09d61120ca9fffdf648f30c6cb9292c9a7d7726cb3c62921319daa9adddb6da9e9bec9e7af3d89a003f422e071d7f90c7e04f2e30d056bc87e6e69cd56d99b775533e711e87e406727c8728bdf44ccde96591f0942efc5e620fb1917f612e4f1d7ad3b6105bc7e8183661730f544b8460da88326872635fa464f4c85a2bc955597327427ecb3975ff331e5c6272c63eef9ae605e7c94a423ef66524fce0595f1a841116d2dee106437e20d7df0b41264dddf757f3bdfd3d238d2605f9cf5ea7dfe870ded29d2d2072801524d4b8a7bcc949f9cb129f90f20891dd00ed14297a4e4bd32b8a57ced96218e76e5a11992dae488562ceaa65ff0e1e18ee190622bc621922617bb7dfb3a24890f225920121cd27ee54306f33ffbaba94396446bcaacec6f78172f3895974a1a685d2fc152e74ede3c2d8fb4a31766e53d89ee4347773ea105cfd541a9d1861ab0da2ed5d149d1deec60380f93e6741bd6fea20d458c249dac294bb5c17bbd70c8aa3d3b04bd3d256ac019eeac11462321b9b71d4fe51044e6abc58090daf80040663c3b8a12f625e98bdfd37d49bc01d9de229e202bfd6347e9e62b9a8497fd2975aaf0cd074c3487eb18bd904fd4f751b7772f5aa11b6d829918602d1fffa5c50c789da505917af1aab78a2a1a0bbec626188e46d8f96447bde117b2574853f89901cbaf2c70d93c11e43355c6808cdb7b04aad7aa2f5faadeb4c6e350650ba047fcacd70c4cb4927657b9134014337f4fc74c7e2181183083cac2d1d0906b03a591a41a0d0cb6ca0bcd49d3bb35b6904e5bf0957011417d9b11e12befefe6b12d2258fc5d119864cf0c60f4296c85ad8f39febc3ab1c0785d9223e1ba79cfa01d38f8591084a84da7ddf85de993f40b244565ca14b6c30e7664d26ce292f314d5cfd372a307c7c93ac4eaf692fb115ecd36d8d6c1f011207278881a39af29d08b1041bdb00aa8eb043531f5a0ff8044267d210f951efe01b8d6256d6df3a528e5cecf4c0e73f334716e857a44b362c0e4a44ff915b0f29bea1b37e63493dcfb660424007a3d96366ea5fdd561c6314f31a7ccafddd83236928e055aff53b8fbfe281fa7d8453b034448ac3bd9539d5b312300bb7c4a40d64c0e513b8bfe0fd9c32b5850c6f5151bc964fe04f6fad5e8100ecd44379af38d1af5c4bb8e47febf9ca46e41dfa32fef9be3795c07cc5388da0682044218a53d9d033b09272c28766c67f781555c2a080b2c68286abb8c3e5fe9adedba606ab8f0eab85d67223241e1e26d40558421b226f45e03c7e9f40e694762382b7f8b20bca0e0589ab527c326b0463bf860750cac386a62e745b57fb8b7865c125627b0967c6e150e0a6491f2e1481aa12758f6eff077700829f3b5229fcd62a3ed32c22b28da7381fc947765e7a8bd65e9341fded92304708fd1b7d60801fd906cbcbf5b7f271ad9aa3003a91dc3bba61465511a76e43f4901513d082875a041a543bd2283d46fbdba697e3ac52e9830adfd27fd81af13b657c837acf5893855acabc57e797a7c91dbf700cde4aad5ad7760e659c2d2622f31fb5906f28fdd9f7162186bf14846ca49af3213d3ec9a999e174c6acf4d7cfde242178317d340d50e96ad69f075598b5aaaffa92188ced116b18eb3b693b0073f39f264b6af3589ee00bbeabc166a321be29377cdcfef473b9fd0639b87a05e5b83587ebb3162805454804a296c57de537a7838c6d4cb1d762da69844897a35a4960f1a67ea807340a0fc399b9066540da87d64b153efa6c2dbad54872fcc316d4ec793a225767f0906b6d65028eb620e9231ce03e0edae904a6b73f59581f784240b53e85884124cea96bce3682900823d52dec880abe951a61c68f60dc8d7bbec74aeba94e7771b05c8d6e159a4a8f79f8450192e4e0ab5e89d9482e85da880be7d9b9ee475f7f6aaa87ac158125c64bca3a9e2040e0f27ca38469a96502611ead4276da3aff9634a92e9b112531d2d298d5632d42b7b1305224c568bd356b96c0b9f6ff419361d2ececb397d20605fbe19997824bb6d65aeb46529f7d786c3ca198bdcee2dcdbd4d22d38b522f6a31e4320ab814c7f503556ec3d99af0440d4b6cfe5d887ea78e645147b5c5671138f3862fe59f460974ade0b728cec6932d7bc736736f224cb22f95a722b9032e1f357ec7083e0633639f7fae32cb14c23d288145c47cee8b39c6807055608f77b389de4d7b249436f5fcf44c2c21eafa4077cd9fa8f5c28ca5c182ff5857f2b2909c0316f2de08b44c0c1f89bb58577bb532a044d13e2191fd134312ad4e32e83c0203e2bf16ddab9b32be326e4c78d3e84a6039df4b1bc6261df442fc6b49041602d654ee2d6a1425ceb865eb1a0680bfb3a3562d7dfa4370f712acf9d5880960a934bd9544cf37937ead6cc3bdc76b24174033c57368ee049cc7b6967f19b711c38c4236da1e39d30d0691ae446d73e599d124d5bd93d44db37566adb23bbd2d993405529006e8f90c0fe27ffbaeeba9ff111629f4a9c755dec44dd11482e4cc05f0f26cd140a7f705d83de8bd276f9294383e1365847074bc5874f801ac40f091c9a3bab741bfcc098902484108c71efb589f1f312c206450fb23b07809ac69048f49da736892e0aa4d1d125968fddc58abd282295d9d7f9204ad992c059cab30e9ea18ca0dd8d3aada7dbef4135ee34b2a077969aac27567d0fda8d48065195acef55d36eefc775ed5bc17222c2ae0bcbec09c45da7661d0f9f4897fd6406bff34b8b8f4b14371aec5ed5bce4c896e4158f849c5d718f85bc7eaa3cd99497582a9d2536b83a19a8bba3ddf27eced4e7653da26b9328c4c9e79ff75e8b32d7a175410566496893ca034dbc8262be42c37c455dc5243341a4f099d3fc2d50aed12818906dcc9df23f9dc1eb716d1eed550b4e71c8c82ee8cc2f5fd75eb0888e13a7aa0e51dd1619bb0644cac4eff22fdbef94a5284ce5b5d763c5041ff2f567fe46393ad3d67f1bb34b6c2cd65f3f1e959ca0256b9b6a84242df4ee85fee6a31cc8dc012994b3ba4f44b9d1f5aa1a20da9cfe6f053132df8d37c70c969d8fb8d64b01aa5363e9da8ab11cdd8a616bb6aa44b410f72a9df458adc13fa5f4e89c87bf966f859761991a3b2ab180e82593795b6037e438c6242f221c5700dfbaa87870d869d0b38564b4034b5304f80bcf003c2208cf04f8609143f42d867c1956b5fe1917c7b5e427d9a3f5724801f3edc8b29416e69d9656b7480eeee1e1189b493ca8aa964b2ef054561bb52783321b6e2e9899ba33faaca3df683759dd45d81805faf9b9a5c7af09fe6c219c091af858362da3527142e344a9b0d8c224778294d6b4a3383bf6d09489c17a516b25f83b57ca5542cf2850420cdf1ad3800dfb71218ef5c007f6ad009b27cf8e04d9bf1248bbe6222f4690de1264ad88aea814c9ef7dcc8d73f7cef9245320f4d75d62141effb58ccdfbb3886aa002a468f2a63b3aeaec74d1df49df1a05df127c65c9e14dc04d203c4fe1822108b353a3b5235a4b6e405d65ad8d0950564ace562bf3b1f0d9e508f9d63346915e1a4fa115fe934398a0df84f2b9e82128d3126c9cf3a6e39e3f5a7c03b94d694fc14dc796a6ba94f9aa950b34c4ed6557a4f55e601c7738c0b792c7afcc2f3c8cb3361eb540278e59702b803dc0b0560fdc7aca7288ca49bee57291ec4727df63878be1c09f8835904fceab33be7dbcaa82a0a1684ff24e2b6e1978ea2a99160f0d68054474f14cf249599f6b4c2b205eeef79521df330afe39700c99fdfb4ba73c9eae4adce414969f93575131baa7458f9ea4c24804a85512a03584fbe8ab0c92ecbac008842f94216726492ce01a5ec0394e8c9dc44a85b4d9f920135633608a37e35bd7a52bbc08ee6b508f3cce8d407550b3143cb46c15ca9bae48bf1dc3d33aff9e8b96859510278c6462319a85051dd2a9e82411d86f6c0ffdd79667f08f2d290d73764e60e1deda017745869727b501a7aeeef0d91350db000939ebead44c1df1ca0a010959df00c5165f92821f68ee7cafc90ca8536c19122d220320e2f08e46907a8b622126141ae3dcff748ea69be1e9a8b77bd97342e24f9a5dd0f399cb1f16df8015b92e41d947c94d2390f7339f06b2e918de8e9108cb98a8bbd86fce5c9b99dd35fd4260b612cf68b7ec0baf2fcd6d083f2353ada1166a4c13959a01d58037260ec68d6031e5358624ea33b169597d9a38f95e28b6029dadf0775275df43277150820a8bec082e041ed2f280dc0124aeff1928389c60925be3af39e3f457ca61e09885571d2c4d5852d4570fce19a08b30c2ac8a312efa9509fe584494a094d4cd3e6307d6377dd0564dc0b7aed80b6e1bc16ad96fa0901ae19631ac648e79a10c2a6bae8e0d4808d9538e32f774a4fd28819bf150586227b1804d9bda9b1eb27480b8cf877faafb1cbc3f26a9475f40b2847fdc69e5b7873ebfaed41f90e7992c559c294cf2cc7d0648fd8fce6ba3765971a404ffc6f2b82f5ba1f3525ca740cc530a3a9eafe931a908699aa20b90d19a2950b4cd30c17bc0fd816100bd5c82c617aa6903779a6dd428cbfe0bb3b2698e094daf4fc87ce0a27132116ee2f2664c2bb56749f331ace973dd6268e12a5599d4a322e411687c0087ce65ad4bac418915c7ba5383c309a2d80f657abb1d8e9ebb35acd7baed606ed4460782d298fd5270f62e6e72a94a3fa03e62fdea086ba8ca3f9083daa43210af545b500af8876541aa199c408e1dce073cd7f3ef4a92f41b092d33e8c661bbfb7e1361ffb91884c319d1e0df06997691b108f472142a7fee599acb07acf4cce42c248d2569a6bdb65b931546e62e5a6d0ea8df7dde084609ffe2669c6b1aef9b4d6c073ff00c7e1de44fdcee72d8dc9e473dc73a4165361d592cbc58529acb526686e3a8bb4b8c094446019718d0f1625dcb1da528531f147f657212ea8c688adbea8d9d2866b977ebc91fdb567d6b624a513a0cc151268ef83be2e4672f2f3f844485a581407d5245182cf67f4865d90259fcd8d42b17ac1a9eed6b2b68564a19829a172402f800307defecb7b0b5713330a47364c010a7e60e50ae0b59e7456f4685c1bef8acc49ea7b89252b5a4d142fff1eabae8c74ab55d07f867c825818b12829f00fa2a2cb9191eafda8f5815b40db127d043034db1026668ce427075bb6ca51edb818f4bf20e54a2f9c4697d4367195f587330ec424ef5122443ad50045247c9e460ad773f805a05f932b7776fb8a965e2a35b7496110d76f00f80e48d6942a71d89316613914f25002bb68064287062eeeb04c69d5a71c4d349bae4ffa2c4c7ec618b53f2626fa9714085b26a3e7b88ecde1ca5e56d1778f9e9c91876d84d00848da3025f7af58849149bbcdbd4413077c2a4fa406f1bb176327d357dd14304a9211af2f020940cc289bd922d769f04a509aec7fc077fb9e7cdea58dfd0aea825bf132a33545a789ffc50337ba272ed3003cf5698f25c679a0be4f426e9f67435d8545ee2ca6e5ebdedf4f86a02505e42e039ec352aea04f47158dad4c45e94cf0bf44cb2ce73571a64c00f34ba91da97b3a386be56e6c23b3404e4780e64febce1607a37a06a41765183aa78849e76b824a2f3d4c45f9264f190a142ac455e810cc1bc128ea65a3e318e0c17dbc1a3d96f8db2fc46d8bde1e4891d2a79f581cf49fb273684fa60774603b32426489f31c407f74ce56660fd4dc7a549f01a3645df3d8631535390f8ef0e89d30f4cdde2e4afb543915b5deec8a0eb8c80973144470f477cf1200bc29d952ad43351f1ed8288f5838f9a00a95f0413dde3d418c49b7a5eba0a0ded0aadbe6c83ed45d1d438e3578f4bd6da874dc5f783bb3002e91486fd177ab9d0124095f38703cfa8e233c39e045add585c8590641b3f3f71cf238662dd6264f8bc2b1ef203b56dbe4bb0f38f6f1d8ddbbb8420cda5c19d298776acc80a791327f9083433b806deec14041976c4c239192243d144cef1da3c0c8f05b0b682bcd9845b304c57046722a4853bd55baf44ecd79575ff6f82307021cc4237a341de0d045df170655df278665266850c3bb0e681cd9aea2e8ec20d20f20c0e76b4b9bae6889a2e87e7c5af7e71bcd1d5886c449a075026459ab1ae4d25305f45a7edeb72200d22adbb596ee05d732c9401c696f9a1639b986c84f74fbb6ddec22ed33995062d10c29bdd0a9398224790cd6236617b9f05a9b692119c823afd03b75967c7d28b40295d1939eec80ef9b0ca897ae9b4836ba37924bd6e9dcf87782bbbe115646fcedd890f484ea855e090c10251f61d6c77c2a8dda181da6e47de77917cc0b15f02f785adae978d3a4a4797ba5efaddd38e24fcc04fdb796db528ad02e6709d608ace05fe6afc231739abbbb23d9c6cd17daed33a7cb402e25c8646f73275048d9b8980ee1654da3129336012a0aa51556fd0b173fbbbe46904e61ff99e70d05711affb5c4ff65e453a8256c1984fc0b674ead3c7c1e48c39569088bc922b9ced2871919b0b52fe2f4fa318e720218a9b8c46e62789eafea5cda7bba232ca1f996738301df3967a5d115cd340b6d14d0ebf6a5cdd051fe5354c9ad0ac42feeddd426cd8e925c8518761336f7120f2d6e9b7182696539af37372ebf9f0c6deaa6711a979736cfb80b363b341b062fb48544790bd9520c1cab50525bf1ce8fa97c5af7ca756d7e5f45867dc31a3a76b73fc92af710b35eca3c2fd699b29a9fe2d9dc420d868de2200f77e7d0c91dbc55474e4bc3464f3de87a06638512cb984f07458cf59a8e44e76c93f8ee2dc3ffd8c52206839a60c05466b7f37f4ec8e45480caccd2de027a1ff376351a8734862d3be2709736cc44d207161456ba7244952e2f3105a1204114f8a4f901e77fd605c47392879669bca2ab6d165778239566169d405823ccb4209fee41ff085e7be5999276b624274de05454f9c9828f6e3cf6bd1dde1bf57ea91f988e178c7acb936efc6527e390e3d4d12221e9f8b02cf572c9a34c2e82cc70b675902d5b17acf140746899af08f7b57d8f9ddd79ba5b0d4c6335fab4f7aaa9da4b38b5ec939f1181c285b4010a589fcf893d8765efc3219a75665f98289176137b6dbf165cd83382054a3a62812be98d72778d1de8a8a056091bcad40cba47e945c39f79b79fd8d180a797b698ba87aa87d088d3ebf401a24a877991e9527a043b9276698f10979a13829eeb283682abda78566f985316c479c4c2cbfb8c3a4dfd2a802e9d069c38d57387190206456abe10c571f16eb1591bfae1027f11587abefd30819e31817770dff46dc29fbab70df37c49fa9b058c63580c173e21a5ac3ff0590b6e8ea65c750c93b00a5a952d25d0511b4c8b02187f5f439dc42a00bfa0d3f974e510969de46e589a141acb7f66596fe85089966379fff852efe50d55d051b2c48b311d9eaa011f08ddcb1deb79c0bb99cddac43f1fc4f1b8a87fdcf54593cacbd4941cab4868ff37eb018551eca0e85c8cf3da780ef89c69e5b0e9445cdcba76845a60afa443537e1aa0491dac7f13a54c52c36fd3ff9376cd8aeae7d335ff197474db667ea9562c9f1bb95e28c30fb228dcbf4ad7359488724e43d3cc1650d874496923ed0abad45d1438b3884c05f24e71da7757c03d5c8fbc6d8dc4535d5b9919f010535d7dba0ab0647258454b2ea92b86c806d12b3cb9d24e3fe259a0a562a2db1a8c6d04d09b2c6a1d126c5e921e82347ff764c3f37e1d888ee5c939e2888aa1cc1397ebac083ee1998b6dc16ae814ed608431bda61ad62f42ad1cfd5c92d3a6dd5135f0305730658c48cc62fc6bcb1bfc40f46678ab9b6d05cc67cd588f612a4736730bc155ba8843c1be97fc002760cd66178c2e26dab80a771bbc009cb6ed061fec4b78253f72935ee6d7ebf38298304980ec854d1713286254c62f2147a559124a92036658cff379c106478997325b3390691ab6f26664fd41e6b74c3499d50f84fc6050c26da3de6a9b9b920d4b4c45958f002d71e8c0ac4713b7fe0ed1e200d41017de166e8a9b3db462e86cf91b3ad8d45d7372e5819c2e47e14288a6768c0627ef689801c727593a0349af0b8bdcd8ce95fbd526f2ff1b1178fe5a54d7a17f65c06923651ce0c1fe4e35e7a744d668033084d004457c5e83b340313762fc214a4e0ac07e9cf8a4354b4efb3c83ab6797f32a1dcb67c96350bf4769a7fd03be9c6b8f43298bf196ec1f32527d0f7ab4cc52cc78f08a49f1f74ede97a82caa22b801beb8e291dd882fed71e3d99926598234bc33e1febe72619cea8b77200625d7b8e1c9969b123feca82eb7a2654ff8bee54a833f176f3cb9ca0d550efd7ed952fe6d07196cb317df5e63ffb8dee6562bfb09d208fbfb4d38ee2714b5ead890caa988c4d15eee54b70838f28d9efd03f98075ddab330a6e946bbe7557a27cfe39c7b778534be94e64022e00b04a805cc98f7667b09ceaec627e0a275f98a5b5db66af52e681ecdd14509d982682f6722c3cedcfdb4b139699f50cf3677f13c6ea1a71cf09022fa737c5f1a241ccee9dd6d83a9253570201064015a132045efb04463c8f70f106db15054f5866c0e4f87b68e2076b4e21f20e9d55d6c04a98df03931b9e3441da96244a7e5c849813509b1739c72af994f1397a2cf74f17a749097fc90a1e6b0f37026e03cd4c436edca8cc09776b94ee50c0639275a41dac7cebfe34aa27600ddf00fc8ac02ba6a31b729ae9a50f921d4ee742855829616edec6aed08155625d08c283873d281cbd4a6b6b4e14a93b132edcfb0bb4afce382013f3852ad42bb93466a9382439edc592237a3e555aa8f3d51c1cd5be9a5a092b772d64b21ed01911b00b5c8e6ab9a6924f49e2039feec9b044ddc0417f1d95e331a165138318353b43e54078f1f06b8efa754c20421e5637193ca7eb74ddc61b6d9ec39e55070404bf050c2129d72be2743e410f45f937142540c0a7fb3cfe1045aba9c0e09d4850118d3cd1fb01d5dfdd0e5764ffd3d4523f348a6d3f7a5870973e98f029da367540b8090c35b7f662cc5eed93d79735523141b905fd59100b839040c6a1f21c450b7a9b2378fd67fcf54f0f6b66eb2ad69d6bf3486aa3fcf50a6f7f9a60e93bac42094a26a675a38a071af00a56893089748ee72bc4a4c04ca65e12c56324037e434f3f3771fa47f53fc801af1d14781faac0e37056c1761c16531bd7c6a5f1a406c270e2a8a8b82ae65b96d358689e6608bd84ae155b26b73014d4388e2f15642d142d29e1cd1fc08bd58eb19c007734d94ca2d2ed3ee61f971af5bcc8995903ecc4b1a904f3b88d994ff3304cd4c2b34693bde029660ef5109bff17f1b3d38f547719bbd83a579bc1ae55181a32ce5b39b65f7c4cf479c40e43efe8314f2125aa64e4e80ddae3467b7482fec7a351aba9420c56e511ec9f9bec026c450a82422e01f52b028a9ad2609f4a74b8f16e3aa8876e01e02ee7ad6628e9a93453e5a0d1721b6721659f3a54887f081dd56411323060cc18fe7126e054a9c19b473880e9498cdb32fc5e952ba2b6b15983a64b4a553dc5ca1c7d9dc877cbea96506bc4d3999af25f24a2b6f2a0821291761a2ca7a2c0b0cc8091858a339377126ec4bf4ff6db02c527eea5da823303352bf653a522517668a1bd89ecc8150633ade34c9ee1bf11aa92159301014ac191b8a5b508cc0016d115032f317f28f92c946e6e631a0c9d99f8aa9aeb39798d90cd0dc62777cad01b432496483a6057011237375cad927377633f3e002b510c26e45ab8bb3db03285c24eadb2518614377c702598c043bbe74a45f0c64e8b75c1689b2c8428ef53651faf337524856abdbf46350fcb97fddf13013b6a509f0667b13b6527006b407ed59d0aa4fbc9d7731915b110530f5832e4a2cbeed1e991a615869710df24af1125d34d0419fadaa7675539271d5c0f9bf444ecef3dfabb98df898e1ab8982aadfe12e153bf2a36bed04be973edcaea528b4dd492b7daaf6d94cb1e084c089fc2ad884af73f2c88774bb17e7d2140505c8e17e4f6f3159138ff82e9589e98363a2e5140c3e95affe80c6dc30eb49ea6c2b1679da784ee688705d1a99ab42bbe08159a83e884da747f22a18066f614e61956d0a4a86bb1552c9e8b9ecbc8d3bf57da1668fc2d2daed8294c15fd7c6bb569a18e27f2524d020a5265bc1266bcd2d93438a914d69e5c317e4e39192bf9eb2289e3039c4f3509716d20c2b338846ffc727b89569c86bece5d7451411de0e3a3bb46f756393e989b414f64f5ff5733f2adddb1e2346b9a8b955210f96ecf1f9f33ad13e8fb30b923dce1db3a3d595545e4517877c18e99a8a78b8db80584c14b1fd9699b8b33bea9d32a2303b2bed3eafe932437619f857c7796b143bcebf51d35e2cf27697aafb6d2e72700249dd80bad2375d1aae987a67f330526207d10e0fe34be7d3a864abe0bf51d7989ae0d5f2cb7a81100520a09b1889377657505d2b13f0b2345b0849ef263f2abb2b2cb96d1a12f9658e852bc097c1537061c79fb97be6a020236d2452607c4178a57d328100676c3e589605708095a80b544ff891c0de0ac5d0a3299c458009a5fd0e734ab25f3c0ef0f6d58125e6c9e9813c15b20b0ca11c73f2b3acdb522d55cb8aff918547cfa6239f04ccaf8a0fff0e245f3eca97a53d6290996b314a496504a8cbcfb82d9f055be0520ae969f9c421e01850788c1568efe4ea8b64dcdaf3d17d820a93c02b7e0cb4af6309b441746672c49b05d0e00387c100cbaafca23026bf11d768b60f5687167fd0bb20ebe44cbc6dc2b235ecffdd422ed4b8e42de4cb122a503339bb2305d5bfa9b45b8ba92965a407a53f7ac8d09ac1e239a6cb49e6d19b56933775041fffb3880b1fa3cd0c270db96f3cc491dc0182226e09e1d5b7068beb3a4e4a322a564798bc47b47cf7c227bd64aa94ace0080489f4064d1f1e294072af9a0b83b882635726239f68a0a94b66c71d759fafad029c188e620cd6371cf3509c40c41826b9865651dee79f7b3a57b36a7aa02413531a639f4d2a1947d6203bfb10caf834080474c5425abdeb71f03e17a1d16a0597cd7d8b8385d846bc17f650dfbb6d922dce3a80c192b7e12a2643913d2cc9b284b6b479c609de251e5fca9dc17e08e3253ad0969060ee35104308b0c762679a6fda9b2504ac469518512bb66ec3ab054db89a6cfb5724e4505dbc156799a03ca444f4f27d0a701d22ec3a8b1ddb2e969ea2d90cdb715d1fcdd5ad1f7704245d14bc154501073d2b1c6dcb3e81b7e8ff4f22663b2b292e7db2ebe93b890cedef7464eb661784f423f2dfbcc351f2a913d3de762074e29442b5da6cc01699d09e33b31ca545f0b59f03f7b76eeeaed4f624763a870f89a80fb6b184e19d5cc821d7227b5b21200da2976223c47454d5a77998ec4c4ae97288102b85c820d07a4c723354c1f9e175ed9ab3c8951a0434d108156daa513d065d1bea6c9075704daa1327a1222e26d5705d348412de060ad82d8d2b7c050fdd8611978c76ff3be6f021ecf33c702bc440c7c0dbd8582f86ff9b4772dc8f7a39cdb4a37511f8469c384c51d98eea1a6407f36b31866a5e4d196d89d6ea1279f42d40a1f3cfa7d11e43b3bf6961f2cde87c5eda885d0da6cc0cc2d46e82157674713507c9f38755dab649b0fcece2583b5f3a656bab1789ece5aaa75c5f616685dc761b4b3067f8eb05724525aba825928776fec890d19ffd872b5b4da013702940c3ab64634794fd99f0f69d51ad7a324f4f165cd225dcc112dea857f66c3d7ea11f6f59037cdedbd373afa4fdc0c084c64d204b2e800bfb6ab917f862e0c1f30af57a408dd31a2195d5cdc4868dd2be2ce15edbc85afe901ed4a3cca3632be8dd03f684e36f702b23b6115ecf18431fcf983455362ea1d9e36448fbf695fa72aae602e42185ddb2bea1b215e414f0121929e552bed0d2a646e67a76ab8c225055795ce3ad58d26684782e5fd73e675445c3cf937d103ce3622cd7a2058cea8b724f415c0c77f3dd27bdf8c383b740c0df239b7f9a90af2b58ba535eda647bba1b0605f0b5c9792cb7722fd4cc38b9cb7c61d3feb6c9b73316821c210763e34ab1e6b91b2416f9d85b1217bcdb6e04adaccb854127d197b02015f6c3b5f242fe22d057aaa9d446959537ad0963d5e371706b39cd8ab7e33f6f3cbdf20239b80b5fb80363093971c3b310ecbc36026a161a12d5a67c7e886a78739016595656cbe9bc6479229f9c5e3c30482534f438d33538c42a7dcfd1027ccdeee18f8326f84ac79307a91c482eb8e818aea2683259e05df66ecee251c16e83423a4f6622b1c11ba427a92dfbacadbbb32a5fda94863c4cf2199704a3c5b055bea40d54333c8ebd6c7906c74699ea29ab64b288100c9f036637070329832f522e98dc6d5790bc44fb207a3f68e819e237c1c841ba8a47352163ffef1997170a312f6b7c44b672d0deaddb1c2d8ee1242bf49ca476992081666e12aee691f67f2a78ab6805722039514361e72db70a92677403e229c7beb52b3fd7f069467119244decb05fcf7727496751385e5cdd25c15b2f4df2090f71ec0664600d7ad256c777bad056192def4ace2802b138891dd6e85a597a2aa2bfaa7b22a917773687a5f30ff4184a4409bb8d86dd716a45b94447678968ccc797f814ebf075c3c8f3f0a9a048a9440b5bca22722dd998f9d424d35b1ced49670849f65d118b5ee17d43e211de0feb966c47ac8a0e8e435d3f82e69443bd19dd945520eeb01f45a339f915adc7dff568612cc216359320185ac2cd12f1674a41133598c8bd57decfdba1e7e6759edac2ca598b1299e1ab29df7eae9f9e5101c21e50974a866594888a8075c38cefb8ff64189e7c5229ad97370088fe1cd8a80cc27974369827fe654ce4741e2be69fc8c94ec9cee79b794ad1886b0b3b86b8caee911b3da068d35a4298cee95f40e00ee45bb2f660242a4e0f0dad7002f37024f3a40aad50e5200f47a2c34c4bf333af108b997b5f507eea102911f96c8915866abe347860dc142b50de15c819a4b5e423c0cd852666f0887315f32794a859de2a59da20096543718fccc574915842f4f713a7293f9e795485c027b248eed3d2a092127a672aa214606fa3d9544f70f5311b33665f449ffc07e0eac7e73a9db5d9c682b4ef87e45e8d3e228dc7af59d705ed8c1ef177a4c851af27aecd412c99ae93685330a9e5838a0542467a7e9c182f67d9dcac6f13cdf992c0093070a4c6c78d09e87a9bac8fe9f224e39d5399600947132373bb72c2a9281331f6720aebcdcc72ef5824a0fc401886a3a2f1a7f5da2ca5d535914478e0f77556e9d04d370ce3b93c7d3e4107436d3cc4e3051d6ccb6187700fefd3b43c6a8a2fca097e5e9aeaeedc9e1dce7ab925c8fa244085c2b095fb96b1aec099db68c461d6f1c57ba89dc777bea7fe8937182b3df84852b945765df5f92568adbefeadc01e80a3eea20b578e5cce80a099c35e1fd7da6aba837feacaadf74f7dafa0c8fad8a7e0ff8b46889dc6e07c3f928cb61333801f76f39ecf445e1bd8a1312323fcabaa8c3b9de4c79f9d8f86127303ce64ad28e7a6232d28be8f021f3cdf905287837c82c9a903d2368e43be93efb82b65d30448f5693e6e73b672ad5c1c39f1a7433463771983582f31861ac8502e3f7859c7e3800c7355e2e19e578f72f9f542b0eca6a9fea0c1705d31bf455ea78776cf40802cfa7894fc821f9e5b68f22a1c22e44f6268048fd7c10b12de6906a9bf825a035620cef82b0558c7a1a8fcf63f07e25b235cea5811b4381a8bd30b8711b641e816fb41f243911e5731a71000360ac08f1c90587c74d32aa99089a9da61bd2ca5fe176fc4cffd886475a67bfe50a3be5310b23a660e57d754b33d5b8dbfcc8358893677512995900c7b0306bc8e2c8c32adbe2727933662b87e066bc892643392e2ff5329e9fe5003cfcc25a219836f25688052d3103c8c2f9440153c2667b45a1435aaa144f779159155d789ff191e5f5a1ff81d5d0c5ad334bd1b55fe5e0f83e5ea415f234b58376877dea6255366ff77f44f8fd4391359558895348c7c9f47d7037e1cc804ec90761a01f997dec41b40b5587f7127e95bcbd95c3c5b35c7ec5c4f6f9d263c5535af84bf9dbdca4aa8465bf099a1aa0e1df3acbeca74f68641365c13ad2e2db5c11e05a8003efcf50cfa4b303a2fd401fa253359baa3364b51f7d6974282f5bbaf9d2940b1e263094825fb65f624c7f079d46e95987ad78189f78c4dfbb53b50ce778e3794ce198fc84e4ee2c71b483f10137fd2fab9f7f057d18f7e4bf521106f496fc69a699168e4d7eabd301a96c38b27c7b168d7d60c67101fa34f06827c6a950d8a7d0c0b5ff7e559d6d3cd90fb3d1f65a6eb7e2fa941e5669152694871ceb89e05c168ecdd44bbdb3c068ef7ceb38b75e1637054a7991e6b9b320c6e6e79a8e2b2c8f985655bb631d09a621a33b7bef212072e7727bc27c86d8181edacfc5e46f2c5e150ac393c0e0869a3b51e1e0d61dc86136034f8a8ebcfe2e60a0aaab123c3d0057f18ed0817e17618cf965deb1e26966fac4be04029add544d4823fc0afc759c0eb8226eaa9c9cbf37b928e7749feec30e7a7af285863ee98ce88071ff6f442a8dba0d7fad57ee46f275c2b1bc1b4bfc15b5a605caeca0213fbac1abb5c67caa88bcb1aa8c29942cf15345529b2c80f094eb3d5dbe962774484917559c835f29ddbaef94412fe114789f93cdaed3f786d451410799f84696ddd5c7c5c55f337c6fc530149e249afb9419c03aa337b0704ef648ba3f6d135535d6cc42427e19d258029d430e9519572f86114b008b6f913db3b312b3cae4a3d9232451427a24c46d207f7e4fa99082b2a11b71fe96a97137d02bdca90fa7913eaaa230aac3645aeaa27589475bd1025db3b96f45ae98cc5d193808c535b6baf5ad584e81bebd1113c621284c295fa5de32c96d87f91b23ad2228842c0a24d12e2e018e6bf393ea461ff2166354fdd6fa3762375ac8c5c56accfaab873b79cc46574adae3a26c820d84682187dbcab8c4d1853a5409ecd12d1b86681aa8ca85202390bf6418abd3906877a517b91ee849e569979090eca625942beba50a9555fee184c55884de70cc654eb9c0d76964ebe656dcff4a48f08998b443ca1eb018718e1dd65172bf921c13476657ae436e2d5ddd4cef285a9ce2ce14fd0381404a3cbd005a2c8fbd16fe8b1cfe3c6253dded7e8df5c086a453f8c03c7c72fc3115ff1b0f285d5ff7bfaa2c0b96c8f9eedfd45e77ae72549d2049c51bda164c2fd44e1080f419d4e96f17ece88e57c14b5b62a239d0f1762e414e29bdd2f90e66e0422625e984f637d5f98efb273a16dd544d13bb9be04fc588a4ee67693b61b1868efbda7677a18443821f1ba7f55d7838d6056696e4570f21a6a26df1245e540e2effa5f71c3462f2cd0f13ce1e502fbc131c6c75e819172bc1724b021d82bc4b2c9ca86475271c178c9ffcfdcf709e95abf526c54cfe1e8e7baf165725d32c4f0b0b455e0efa65e43bd1a48647176ba939bc2a9de3f2e261ed3053673c7b6ecb63fad50b93e3c19eafb73b26e3c4934afbb716b0e96290578d541cf6d625679a75c84c9688f452c062ec8c0a5136716d813fe4cbdf9fea76edf707d3c18465ce4cf2609ee7fbfe894c9537141cea96afa585f414505dab5ea8a77c5f25b974833c5fb08b02d63a2e918c872b4483b206ff7c14bca9165bf1b16e14ce9f59d3394b48138e7d8a9a63c56007a727f2768f56067e57d9c41c54183c7f70db862046598fb06da18f81eef8832d5075ea12b38b5c3f3099b79ba111d60db990adb772006adce9815be9f868d7e98043a8cee558d8c6c20a9c19c977559926d508f52da330d0a58f39cb39ba8b2308a3bda2331a79618893e60854d0811060e240bd3c60ab8bbb321704d9b5a7ee4e462bd3443c49ecfff0baf2f743c6624283a16c51964749ddbff987d86eef8159a9f510e5742f35b59c7d8b18483b8885708ea39606a353b09f7752fd680985fb15697e0723f6fc3e59685601119c4a146ad2f33952fced39e177ea9eaab902b3bc7f831c787651b9c7da6e1785a1d6ca8af4b721a4870125931694585ac2e342a5a9896ea51de793579ab4589c8160624799956cb2738d9ee7b5da955759584181a214511b3fc1728642ce026bece4aec46b2468db06daeefde8dabe14d59e361be90626e3316159e82a400f42e91e8a529e99d87f177d90553215d9159cf4d8958ebe89e18ed945fdb8c25d0a248ce22a01af6a99837b28a9a036d33bf5ff2e9a53b400ff0ff600e60b333a21002b0d795ed7193f01db7b0ce61cc76e4d98abafa5750d142b2447ea3ae7bb279618353c0c8d881a9f032226fb1bbf5156e3a3baf0c63fb9497e68a8a72bea4dcd04e870a6656ba389ee9bd280e23df853daa4c04c82a77d794ac49f2764560198edd51d2cd012dafe05583a0e5db77e6c5592eec5d675d617c1d7b081911933f848fc2ecec2d2d2e054da8d9084e740a41f5d211ddf0e7657f8ed6fa2ac08b78c66fddd9bbadd3bc03ef22ab2018ec7c4a8b721fed54fdb13d75654f5db46d8ae55f23feb2f804992a56939bc29e17eb2782cdfe555111985efdac9beb399cb0f360f48b699ee8f3e253aaa386ffa1cb3603e9dc5db345e2cc51c7f884882c4fd5a96ee851b5fe8ffe9399e7bcd9d7feab0887b8fd176d735b8a978664332a991dafb28d69fbf6efe2de509971af88816674d05bffe79740ebd0c861abcbfd2a0acc4cfecb055c55d5510aa6f29d4dff31fc47220e6a1ccea73a05e8c94a2c3ab8a6554148b3b0963611a7eeea02a8e688f61ed917c7af69ec02e7d48633953c007612ce4925317d8fcab6525edbd8ada2c4b9ac8d22088ffaf532207090bf572bb69f8e6b7479df80929592a7dbc1616f73aa0a3a20f8248b89ebb26e8152b4d1586d9cd7c475895b47a92b9a3d488db9c5080efd4bf7d0afa17a8c590efcb09401291bc95bd434173353c7eb28118db336191bc7c190685552bd7f2bd9a7c81e2f986ac5950111e2605f251951cc726115b47b7827e82e06a8063de9aee070e1712990bb910127207d6f82375991808882d9cfba73ffa4569b5dcd0e56aef781b8fbca292d064803858a2d98be47e1e1222b2b692a63783af7357a076f7ecfae8616c66ead3f5977eb45b5d405ca1ab19c43c0d43a6df0f1032579968d6b458f48099d4961940a78d82e75710adf70720cf892374513fd35c6050b231b3f6c31323087252e9b4a334ae0465aa1c83d404b45904213979c8850ad79f4e737cc8b94e62ae16fed57909e2e538c39c5c08714e724f6347f2243cde62ef4432184a6bdef63ceb8ed79c1f1e39b18d310290c1545b1dc7ee05ad3e7ce5d5cf074cbff4aede8a0bd86d9d141d565c105558b20a50ad16e6f9f4cf3a01e617c0f17e1734787eaba92e38871fdf787cb1e12d2b16e4049038700ec6da4e69a671f5380aaf08aad1f556cf6ff34853ff992df3828386ebb045a6a955f91d2e0c79c75bd44c5f884445df405dc6ceb82f7eef7c75368bb7c3eeabf79f34430ccba29974baa4e3d92a2d6ab48b1383c9e309a98036dc04825fdcf25a5c19d7fc9abfb7b686c231d6c2f956b78d30d9903deb6828be48add67bc06e70072727e93928d8b78923e2b031603d8d2873bd88ac5d26cfb419b3fb3045d82a73026da9bd8cede02b834cf5876158c9ec820996854ae5f8cc0287d972d3db3d2ee7fcf212365b666a1b60b1ffa023dc02c94d448714f9f01b0bcda25f6e4924b473dd3bbb89717530a485f5ddc34686e6826d769405afbd38f1b59c04a12de8aa0e4e78c90a45c128227a201c9a9b53274a88c021e0f3d96ddfad4ca84026fd52a4d4f2e9fc61634b829da532dc3fa112070f5211bccf26fa474382c28b8be31c5b528b21999ed83ad1397659f054b2c7b512c3d1ad5a2f77228cb2b525b43a84e4c1ae9cf796220dedc0644a3c8276717a6d3431f5a7bfd9dc1e890a818f9a1f824606b786f9d8a08ccb250adff1416887e2ab2bdc2460ea05d0ee3527b6cf51ad6e09e109a225538ea7043d5a735eb19602032c46b9c392f5d68e253c4a555c5ec9d51ed18ac672d5375c6f9ea6463e370d5c96496d3806195367fdb89e66ae398623c0221ab556ec3ad5b6c2d2801f56f32dc856e4d43721644ba328cea4a042255e3a8b782918c7bd2414dfd128acd801a4c08b61f933817174e13c97cfd908b49c38c420829ca770bb17c27e528908f93fdf2bf5249e60e68dffbfcd474c09dd339fec4e62e2e14043bbc363705dfb51183479c6687d9cc96b1f9187e51177463350968e8035efc20f02be834ea5e9d191e5839e94500c8e71ca9ff5e41f02326f32406d78bf1b54b49218b0750def8b4c719b9b487d1fe4469c20527a533b6cc70e9561e6fb1f4dc0ae26c56bc4821b29e54a0a0ab545bd05760b9432e48b211ef2114f8d4ba7b1ad9f9b515746985290ee8aad33bc0c7b02e2f089289e98136785d93131a52f8a04a9e144d555ba2021f307779adc2e98d77a9363c348027b7e7fc531e17f6f448036aef09e29f8ff60f49e94046d2d6b21df2b5c1e5cd37a2e3e4baaf00082ca84f9051238a2640b3f31604549b7fb9d3f5514094ed1682b46d59651070593f917d8953e962cf3359695bcb1a21d2e8a85f9407d9842de5fa056dd9b65836dbf44b7a41984a7a86264eb68071d26ca9431bd0297fcf1adb37a5dcdfd08da8b23b0f113adbccfa566c34198c7e52b61026dd1e255681862cfaef2a670d6e0367f9c2924061ad1aadf28fd7b3861b672ea711cdb06e93fece5fafe07a278181b2641e4cfb0405dfd7935a756ed82b29bc512cf6c072e142b64ee61dbf15a3a6231de6214f03614a25a21d7f995d731a07c08d8f8a2b1329a3d2d2069b849c41141da0e4be0c883ac59aef76b319337d5e5383278505d86bb9aa90733818e0844de4b75d117512279bc4a93f08dc8d7e541dad12301dcca64afd6f401e0acb379b5c339bc86b054cba5502a6b5a3e95f1fe651ca5c7902e5b56d4eb8de30406ab9832a699ff708c7d367e945b5180e8b1a077c3bedc0b2b85db2e4100ee1bfaad99ac308ff719e0ab045e529abb851644b12c747403928ef7db5938462c21125a26ca832faf65a77f55d29445b855a63c884b6ebc8145a3e52e1252a4ae54cec74580572f514e27c87085968db73f4649c75cd6fd776d6fd84f98431ebbc24ced3a56faf4e14107368511dbf89e0cb9c38f6d917344fc69961d77aeb20804d9a54d6348da5c0be218945fbc2fa2a43aeb4c14023a835fbb43f8e555baf42d44be7b8e4efd450586f5e3dc4410b9a6200bf97a4899b564dc7ba5ac579f0e75c5b0c536a64eabcd963c37ddf1fef43a0ba393a05434a9e5335780eb252c6eecd1edb571bceed04ee35413fa3eca973315dbd87e89d5f73555a78c4cbb8ddb9f56742c2bb93d9a19b4834c192284713c3a5944a76a3e007ea59d8c290272fa29f2c308dae54044afeda1b17383d8bd1f1b9f54abe748e4bb1444c59c2d6754fdaa99bf7398390db2397bf42b9dc7ae9661b39dd71e93b36811e0ed6377ab9840930776e54baa12281c9b5bbb5b028123e1d8f464ed1a882b94ebd20dfe0f5549fedd9b435d9b1fbe52de4238c6a478566b1e46ed10abae162e07efe59a3da4d2e28bbfc44a74353113bebb0729f606374fbdede111418860645cb5f9b140543af0a1495d59ff2b84d5900252d3a0a1f042a62e30615015eda4ddb1afbbbcb050de92e341647b6816cd84a6601bc914b6002bb0fa9892cb6a555e035f5c2a88783b81dd51d3c171145044efa2eba6bb216b7b97b4d31a8e926db9928d7d94418fc3260095eb7a7a8f8d1cc9fd29f99d690759dea66bceff0e44cc602150962dbd7f0996dac9af9a8891e9635fcb2c1fb60609318ed501b9bf73916d60162bfe8f698fcff64381704bc15c1219b620bfde38d9a134be3f91e7381f895be20aaf1bbaa8532d34e6743383ad4268407beda063caa13b61f92c7b78489a806c192e223578896b191f6e1071de09839bfddb5b355826644b2dbed645625215a53d083156744d5b8628571b03a3c0e75d9fb2e7959979d6dc7b38c245b0c677d570afe00affc831a9826acb42514cbc2ec7d4a1f02b93179ab6726917525afba25bc91b71b351d7dbe669c13637fa4ab927d362a87e9b3832307b1efdaf5285dde97fcea5c2806476a2cb08cf9e7a414cda13b5d93161b149a5e9667f4e22cbe450226459fa1b0aba01fc631a75d0bfa5083dd4cd668a57e28edb4a57b9c90ed3f9090a2362b8b77a2a989d0a7b83d7e2d625ef2cdd0deeb7f140f92160c69fcc9dd85de9fa301c34b63f23399f4de0da8f86c25c8f516a79444bf9700e87172079a5fd93e647ae87d9dacb33e2d5a06798db9bcc4221f3ac8698fcb1c7b3f891c354da1e2be3bbb39742e42745619386ab6a0b09500932f87eaa5591269781ec51c071a3dc38f7fa092eaabf976d0bd1ca230cbaf26c727b135deeec9e108081c9a0ee83d44965c4e4dbed69da86b2494f8e664b35a0ba0ca05c4f521b6ce24c0468d9a0f3bb63309afa8bfdabdc9ddc8200283446637548f57e25ed1c48ac2fe04bec04642871aa62cce3cb807277682ddcb5a0ae733b9a79085468a621b3621cc0e7306946227a2218fdad4c5098d7a4bde465d26457ca0897a14b9ee67492a6e8d25e75cd180853ed2c10c1bd87dd6d28acd24be6757fddd72be83aef71b1a6137175e2c6acad557ba39d55a40c58ecd1f13f428714466fba66f8d1c2cd8211dd08a088c93be30819db529384b2eac2e67f686855ce22f4b983bb8127936b8af6e57068d944cf7140cc3763a03abf8995c692ca011107d22e6fab46459897805f252479d1c4e9f99539ebfcb2853054ef90cb2e77b5f54e425117a5ed6c1cb2a05f8ce509f95354b048ec066263392550fa014b901af779d7f055baf53032d3e1bd638776b87123cc1f1ada899688f42ad47074da82475b0bfbad708f4cef03a11a91a0f6efdf0c5aa1126a4702cfbae4c001b8047b0d7c15f881bc42dcc02903310d751f8669beabc23ef350ad29f33bb4c65e65bdaf8ee1f6283e747bceda9436ef5c085d29ad41987c94e32dc5f836a7579f6963e992fda38a3188fef2d4577fcd15d8dcf535fbb1a11f4c207de338bc012d93e3390546ed06d7b8958d690554d9fab91c9c1061c9c0842e102f1b0a9862976f3352571c2726a89ee30c6b3d392dbcf283667d1909f3b1d27b8f345e29b05701fcbd88d7fca3a6d97ce0cfd31fb8af46cc00ba32075ed8eb9e2045fd4a9c9ee95c84fee16d1f9f9ec63e1f003fbcdfa26edaf9b6caf12bf857950d82422a66ad2ac215ac34a02d76ca01b791e837a1c3197d543c55878e7c863e320712582e6d2c3c88098f9b5b3166ca5a938107b56ae61166a0de3d913cea7eae82601618718588d44a9b49f5875f844442ae9233968b4db52b784a9c3249f04728ee43984f6e2f64c2c84af38455e4528d1c17a1292da098ba2693b43f2c11e0e57fc4e3ed5c3ec84c9df7afa2eca46836a5023f39b768941633afbccfbdc6a2e7595d9d52f0758cf77441493cd254c1840ab09b42cd452e5e8cc83e5d661d5589f2c9b118f2a0083b1b7fbf7136c1429f9b243508a055bbdf1c4e5cffb985613ba2b184b205a9afd99618b4ba4aa8d85d0f2f89854417f2f0ddb7b45976809d3e1819057252db4fc13cf69249774de0ca6f1dcfb73354ca7050d31d0d8fc9f61031415688425b7d5dd75f04c578d3978b0781b49764c0ff5eb772c6b9c284e17d9421f680b520f2d613083e4501bf08fcc95e2df6697faae5b97ebb57df418a671221e5dd96ff14846ce3d71fd779952cbf4cfe0ec2351c71809b3067bcc61065481804ddbfe8cfcad1f6909d2e274b495998f1b8926cf96357f22ff5872fa1ced39e9ca169232cdb5109f3a10c2ddbf4501b18b57cd2a377d3aac5f02e1775128e333751f6213b005907a3728549599ead52239b8e430fac2cd38dc5ee3ecbc338bad8cd4ba71f0322a9b980cdc96e302b2194f3032232b430d6e8236e9fa3819749fbd618e0ff33ebb692f14669fea8efb1f4d738a63e78b166af90fde91cecc8eb75ad522a62ffe4226dde2c2d3db2b03b9d614cfeaded663d33df5b041e24fdb8b09584fa1cc7d01b8e598caa630fbe1bf6f7c7dc09aba36896c7746cf11b7453eed341ddf695c44180dc7f3efbc208b8f6f1c014c1f3cddc15f96889404eeabc0deb7590c34e4cacc69f85cd1f6d4c69d694b6f8748997c1b6f750afbe537dae87914909796eb6db47e9761b331bd1fa4d60c037899a8d977b7d7330fac254133dd06d1ec3ba2b9d41ec7a18b36a16270579b9324734dbe335f3e98ca0b779ebfe7e920c9756ae4c838a87fd2410059a88588ef05e29afd5f013023fa3b4cec0ae58cd6ec88cd4bfdc7b2a732b82474c66edb62e752907f749a4b33ce6ed2ecea4565fc4f824e3551f9ab2fdbc9b51f08edb89b86e17c322c8563908372853ef806b3dd940d35eb49c47b94e02cc2a93f4ce11102e4f894a788fd4213afa8c7204107406e5c72edb139703d448583945001b9329af8cd9e3bb8dbdc107b6399e81db56813c377b4bdabdbf82a60b9c790f4fa07a1cdca520516bd63c9394cf4727204ecd95db32fd5ade4f42cfca67b5c2d404921bca0e23818afd92ae15d52c0d8fea0072053f04f473536d83fbca6c3f4dd250463721b311c766ce980a7b43e40716cdb2f18e6d37f314abae1e9a2e5c1f3ccd71fc0c6314c10030f150aa573e456a730b60ed794202695439dbc00dde2ba2fef2771d99b3bad40381f236307eb0b530de5d2cce563275d1e39e2a9007544085205fd2ab4044a9a6955d2a2e6b8e249de3e16d4df55c938d55ad6c3f9c616b6cba2a9e982894d0694ec6b1b3b6b24fccf00c94089fb6e333cf5048b9807338ba773dfbd0fa5a80d0c36360dd6af3d9be9affd8ce6262d9938dba2d9773f3bd3ae9469060a38a7a66c8dc46e85fe802c0e86a4ee22b8fb0f676494804c99482f0a3ddf9bdcf02e1d8997b28b75278f6c8e781b22442a8a2cb74267a1dda784a1e5966b336b7e6eabf5c61f8aa4895adc64ea95e55f1463b75f447ff0163d43ca8463a9a8f93a0a7da028acc5a197edbfdff4bc3841a803409d77498ffc10fceee64ca72e7afb264d48d360e964665299dddcebafbb820a9eecef425244c0dcb3c4af7c80963c805c59518156102a84e4a42438d5681837aa45a70a9b4e6a98065e6bc515d8c17724b42f893bd27086f02a1b0726fac7293baa2beadfcdba09df2bf1fdcdd3dd79e0cba7bc7e9ccc4af60269381c666b26f39acdd392b09f872d68f63abe90c8d9f8437b2ab44575d7de59d2aa8278ee40822157ac38d25aeebed8d367d6cb862180644f54735441005718af2ed38747078d907c43cbf7df5265ba4e74bb617a3f7cdcf0f0ca4ce117f71c490a504ee880e148f5e5d00f9423409d8ee7f07e91efa39e8bce13975e4906508f104977a87d8912740d7c605c62288b164454b558ec50bcda9785af3a02da9bbc5a79999ae7cb525ba70383ada53899bfd704646c9eff776591d624026f9e5309f0535e7b2a237b1fe9fc56921849beaf54c19591649c869e46d48129d3f756eff1989327577c83a232586c6b69007fe5b4d55c74aa5b7834eae65023e93e08b76af951435ddb7f05e3a74348394f6b3fbea57fbb58576e513ac0fa21299b104c8aec87bf3a33bafa3cb16d2dd9fd508e062051d7ba30f6e5b950038a9177e806de5b017c25a9dde96889bc9b298ca4434e6b1123796fa1ddd3a64fcdda03d34bf2f658730ba78862850142416c6c896e30b18e1bf16847ae042829cd88c69e9dd2a54a5cd5b577ec4860d48598ef7a25057cf6c9f6bc6a09d050625f08a90503b020ae8cd1a271368ebdf9132710067228552d86e4b26d729765dd859f708144e9b6169be01b8b82a80b9f45a46cbbcc0d6911a13b702584bf111de2981a289dea4915b87cdac5b52794fcb2cd40d4ef6d249b8297cdd89214e528a0690cc8c6b6b0cd6736580d21f2ef60115e7a346b581199eeaca0910ebd6f0dd707cada6df404d41857851556805031434850e46bfa0792c66c9b83fbc223c0e00aecdcc7bcea702dfcadae84ec83c1008cb048e0a24d080abc463057eb0bf13bfaeb7afd88ce6d5ebb5995439b5346400d4625d6ca35633b7d053948d7fe44b4711ba152b4f4dcb93a01b6f5b9551d332045b54a5926d08d1e3a70097a98a7de5eb200da02fa1fe0ca4e94f94810bab66d0bb999ceed4a9d51f5b1784f978e3e8729c86a69540656f48f7f9686690bbcef19baed84e0e04adba26b2fa3e36a9f81bd6526076583680060d5ab6548108ad3a4f90120c36dd840b34ecf408299dba1d61ed0591caacc358fdbbb42742030d008349afc4e0c2b47b9900074c270f30f46c38c409c561a593f03ea06baf363b3ef59bd9efad8a57ba563daf4d5957ead369116d6864c830260b4dcc636286a9b9b21ead50a83151aa1e323810fe51ea551b83b8895b674ab63e452f0ffce30805103a9151db2b3d091e546f5d25df8facc22e8e71ad3ecc8ce3bcaff34036e6f48eaec73a015aafd1f62cf8cb732149d8c910bf009c43906bf67bd0334f5e5aa713bf9cdef00ac3abbf614c5751c6aba75115efe04197886fe6eb0f5b8c16dc02c2e4b83a0c42dd1c2ac8404ab1f4af5fdf4fc00bbc9dd19ca9397d515138ccf07cc1a6e8f440c9001a2cd6a16635985adce999552dda1fa7e976abc72fa5eee1413d4d3156c79b495b7f17d8ce1785a86f97ab8aaa6db8d37fa7d966e5c5db62216e73e20d5fe2b1d8996cf8cc6bc4178222225bb7380fce9380e92c347cf4758159fd00246aaba5157c1986725ccb98755d668793bdadf57b7c242ba2e7d8faaf22400df863d5e028a616d65b5519cafa533c4ca47c441e352e06d9dc8aa7fee1e9a42933e86af97ea0e5c88230a0330f3415d32a7852f5c7266f91231bca81a25035534954215c9e7a38bf266bd6f51801a246a0cf9af3191e017febd1ac0f9db9730476c18e1a23f2faea405a4c61377a765abf190fecc37a9076feac88a9de8e2767646b939e0b3d3c9dfa41d7f376b40991f75edf1f0a7d5a2409f12b22b31dcaf7846225dc300cb53bbaab71cd8c3f2819bc17ad204ffa81878e3140bfc74e85f044e2a8751e737813eee3e29f18eefa10be53a6a35d9cc7d292df2335b64d8ad85b4687758c02bf421e496cf5ee8288fe6ee3b2b45b0a6bce990f14c62bdb29624dde5bad568644cf9deee900cefdc96217bd6b923deaad46ae2151b84fda37ae772ad72a95e08a99dfdec4e2d0e43a99348ac52d53d87c4cdf232ca29d812edf5e22f6c352d2b7a8f8c9bfcbb8254bf1f3b98b202f0c4d0875d65fd7c40d11128964268f4a8900f5993ea356dca5e793f1e63fbed928b515d3ddbf9a68c94dec7aff80bc5803b8607bb0469eff8fdc46217b40e0950d51c7137f2420f2ea9184b4fc405097b1839c2b983c2e97368cd3a00710844185f974e1b54a4c3e65de53585cecfb61a209b34b579621033dfe4044453343f62c28a554d0ede7ef37f221adf47d7b79a6126d71c87ea02b5d8ad90b0c4ebd55248715c02e801e2cfef58f446557529ee9bbe0304a9d5a019d793d9255dec719eaecac037ec88d97e1eac6aa257e2a8764e41f9a6dd8d1ffc95e6e1029728e126deee4e9a584d623422a44b66c68b272053149ed948cf83e3a9b55b4393be807bd9ccb4b72aa48cd0798a17467a596d75770a08223d576ecc03f71c36f02d44cd54d2e559d4aec7dde00b82c90aa1ee503d0e65599498e14dd609411615dd9e1cb3b160c01cdb495ee968f96c62ab233f049ab15600d6eabc05d66866f4e8dc4f314ccde5dad353429222a13495a832c7b711e9554d06ff11dad1d105c88f70eb8f327db62a8d6da2b9a63eeab59ee596de678f75c7970afdb9f34b05bd0ea405ce5052a9f0f215cfe717aeb4c2e2d8aa5f56bc746a96df907201318845ace9e12108e8a127a35d5a50993d3fd7f3cdbf71c068abdd8ea556ec579955bcf74d9c5dbbf88cb829ca164c067a01e7e7fc801e2834730ae0e9565e2cfaac2272b6e2d212eb9778abba8e9c4bd727480a9d78174c6f98ec017b48c010bf503e236c8860a080317746f62738549aed6fa08079088ad3a0f407058f8560e7623a385b5d42764a19f173c1b65928b5448a72151d956605017f7c5d1abac02172f7345d45a6ba4173929f1043710269b621564aebae0f3fbf8b4b567f0333f1efc3636a3be9831bf6619190586f6b374b84a38d53fb1ec0536190f6e78898c2cee9e6939b6713842b2af144172c4f4005ebb5be77b135ae05f17d2a250123d19f374e9bd4e9d1714dcc2dadfe2b0542582739a524f3c09a5c1563de55170d96c8de6dd2b6e50df39dc1d4bedcb213fb18041de6bca2f1980936c7ca22adf64749ceb172678ad79e120820d844b72df0af86c84994191bc0bab42c86db5d5bc4cf3eadb6a499bbc0db4f0a9577e0d7a59bd3dc5414f00d0e12a15f1cb7f7f5a235db481c3a97e07f11e151f0788a9ceca65465a5a6e238e71d8f66aa5c712aeef7c584ce003243ac847d4b9e7386d2e350dfe64c7519ac8860cdab63786ba25962de95ece1ba827b44ea949dcb4225474e4dcac12b541711e93a5d7bb7f0bc3bb7ba20ccb1346af1b25d58a3a2960d94769e51090e3b0b63bab02a9052146dbcc89597fd0ca5044362f35344fc13a058f0162a771be0eac332f60fb265df977948eccebb0751b9bcb50b714dbc034549adcb142fc7a805184e8d294e5eb943a0ea2469c6f8b1a689aa93fff76ef2d15b21f6275cc317ee742a5d8806364889e373065f3ab5d5de052f4fed3a83ab12b2c14e24966b689c2e1da451acf6f888c8e40c691739512d3c9661e3e536b45d8548ed9115d04a5a4d821ff7856726214b28de6824aaafa63195ed8b8149f5b906540011c97eac52c4332a26f241d3a507ad80af2de9193824d3762bf20a5ca1a6ec38ab85eaa7bef2ec6690b20a69507e601af1c11aaefefae692887baa0c01731207796e19fdd353176f5f9ad48bea11a6b246a48d24a4afbc5a61e365edfef99bc3de2d4e577a2c8ee74234e0b108da9864257988f47a39f6eeeaa810a123740fab1dcedc3eb70e1ce585d70cda281a50270a2615a8435a689fabe33fbe64e25d9e0be22451b226760d927630c09620bbba2b883cfc4c895273a22cd7a63fe90ab10dffff9674b37d8e43cd9180a538209287d1ca5adb1b71952cb99156f646cb0506e8987ca1ce3299e4ee2085115a3524d6459e184daec371362a9f956e49ed63b9a1730fa357a502b097b87f2577b2530d141c719d5e595de27ac35970b00fc959561af7fd5710c59854f5a406a5883298c2d45cc3f6098eeddf54da461a4a2857a190e820bc42779a4a4c25b35a20f23c86fb5c1501ed503ba2dd680a4de8ffe4908dedbfdb99b90755635061424736f5b3f11e1632576d6e1ca83aa11bc7a353804375ec07e5c107aec487a7c697c3bf5612bc8842691eceacce06fd905f45600accfd9c4ac525fc67dc1287019943ba4af6800b9d5cbce49e16ddcdac4ec05709cf3ac221ee80c5abb4e0cbc4e3acc0ef167c17e90ad23e9dac277098f7ed76dcd76fa794d4c59fc1137d8420e3df810d08825c0dc80beba6926507508758aa836768fb1a80f17b8e70ec952650745abcfe07b7b392dc77ecbd3470a5a7c6128a4fc088c7014004312a2bb50f5cfd68c664c326afd9a3b833ab67465cf0067a6f55a634feeb48e575f08162c40aa6896e6b1c8d3a4002595a3d625de55c26a969361ccfedb7042c69f17a7855120cfe19ac86e9282f47773c72bf364e2b61b238d9ad5c01d890487d6ad77ed1b2324a0933bb6fe93029ec273bfaa8f9ce0a740be9bae78f931ee3323ee7499728d89bf2cf064d80552842a51789a599920534ec49c277560f12fa0ae1afcc887b2c11c1400a2edaa02d5027d67bd779dbc4a0e65bfa1fe73c880e24070ca1f1c3a107e8114ded7443557a706564de1caf8438df507084b3db9bd398a6e840d5a257209aeb252e971b57187153d74668c4448b452e54d59955936b5a9cd3c54f576ed2ca8b52829d9675613a359e9c3ec9fe0e313a8fcc091ddda0858a2b8247ebc596c2f77a948e299ceee230ceaed75c8d67d3448dbafba4aba855951d2ec6aae6bd9b9c12199fec2c3cf7cee646b3da42ea9e266e6f8c88b4c88a1fa00cecc73d70766ee0dd87f17832df7d4ba7c899195dc6dde7a96897c428b4daf420b85b9d41c80171644a1230983cb79d14533911f4b97ad685085ac42563dbcd9e15f9c1d67a1ee399bc27f58b58564c91dee04744c08a0ca0d9c321c9a5ead003053d582e244d58b3b0c1b966514d284d81cd0cd89bc8fdb181183310255917b8ef58bb6978d7c854737869b197a92ca2179c1358e6b60e86364c78b763faf7a9cb98631acd76c5cd2cdaf5b56c928845271caa9ca87e72dd108870f0b2ffaf625f9b33ee54204797bf05a9fd00ad744e0f42658af31d696eed7b09beb1e350890af914978c9f0573cf87cc367c9b1a1a261507e9f99ab105d144f3bb8e34c707cd5e1a394e30c47397c61fdf0ed0ec09e70d701b2f4e1c6ef760be73c6c705c066ab931961116c0f2f6c7265b03787ba3ecbd7ee2d743547f11b7d345c9be3c8a4bef2317cffbb8db2e36eaa0a713046f943adfe705300b968ef3fc380e008bdfa252659117a7b8e2063b76d5e1fa23ccbba80c11c39d321ef3113c9c9fbbbf8693cfa0943bb22ed7b206cbb9e898cea1a1f30530357486071a09b605d90138b284cf42153251425f8775db4c349e1f1abaff8a4d29c105286c8ec543e327e34e835cda46281b342a9e3596c370992b48e7c391d9cc8ec1d9fe9d3b47d9ba737cb45c400b0d1aa6be69ac30c73e0cca59c7811775bbc9191e361234928538ff6f64d84db5342f681bb3c3b62311c9a8738b73abc0827f3c4dcec39b7e6e3034d6d2905b8c7f61c607734d2270f444fd5104bce25ce658915acf2f5d159c3ce90e6de20fcce6bd58afbefe8bf890d69cc1696aed3068ed0c339ce702d0a97a8fd6761bbb5bc396404942a5902ac171cbad2519fce8263d256f1a47b548628accb67989f95616989a645ec082850e46500d5d48db8a0bbaf8c98d3c296fd2ad7632364067d4dd8f8b2ad5bf439436c8626a17ac5289c3b65d6eb938014a69687e32ff4e8ddfb0f33685389ce328ccd00f8a51bb00c0c9ac61c94c24ada94d2a05da327fb38ae7066de494de9a2cc9aa67f3621c42b45a2aac1298d8abfc9d5f4063dd3583e5fa08dd1f1a0031780381733271c583f2ad40bc4ff0e8f18130e453b59a6fcf16c21d9040b199c477ccc990c834897c8d77bd625757d40a92a506ba29d80979ef7eebf4dad30485d5ed39ec9213d7c153b53a12eb01610c4d11d9a963e0ee5d8d9ce5b26b6069783d29ef5520a8a72494850051e3613a28aecf3b943cb00906a4ffa29fd64c49802d75b3a7ae3825263a950042e8a12a03db2e44dda57186b3f7e7b83da00530014ab3774d58f145f63048ccb8cf26a1606b81c044dfe53dee60dc74fe259659400cf8c98ef407e732d5662bb009dffa54fe5b55f911376809ccb4f3285b512708fe7dffb187ee997a0132a4a9676d5a0deceb602dd61623d4ecff50f42274db1aba3eaf9200eb1750eec14be59b8f61e34501754a292849598e8e706a6b405457bf746d1f8fca3e6a3f30bd6b8447fbc4a1bf10b46318e8306772e6881e0bf2433216818fc3edc9efd0fddae00c8450aa3149bad0dd80fbd24b4dec111661e06c0d8e6526b6243b4a6b46b3ec1b7aaf06d7956e52044d11e1eb9bc152d476be2ed00abf52f6a6ac36d502bb1037a3257338affe7d2933a0a57610b45c990da5612acb47b56625a4e1e3a0844b0c8bf4c4b29949ff7efa3a79a150053de217ac91855ab066608122d2cddae6bc63990f2337a76898ad3e68598f26945c1e1fa91f892f6b17b346d0ed445531bbda8285bfa13cdefd1a4b8d5abc4189a7ae0cfc5d048a513265c03584af2b81a787021cb8528dc32cbc3d257487b0e37580e92ad071d680a4e13e5c225a1b23320b7ab8199d5b33afce5cb19711e8d4e3d79ad9e42aac0cc348f47e4949a7d384332ef769f53823760ef6d7dfc30e272eed0949323ded2d47c18a4dab1503116f2335c3ca6f27265efcbccb004309e17aff526c7f1e290861c45eab10b824a4feb2d5e2f4cf6b0f721b2748aeadfbb35ab8b23cb753a25dd41463d5fd0be02722b2765a32ff52e2165587dd196594262b5af9b82a6b0237e980762b9b06571aa9d44e832578bb2b57a2809bcdade71e73eea1215abfb37467ddaa5a08c7387564489f2c42d532b308754639b90f7494fae6662dd4860929360cd60b1862e6ef4bf1b2a46e0675069f8a7c38778e5180f52f69b607a80c41aba1d12888946d763b850afbca1fab166de3cb5a568fadd518e943185b643d0fa39a0fd11ed14577e9d89d5de37bd3a75d8041cd3e4f11c148ca75f8f52724e26a44891dcbbb6c344b359cbd19e8f9cc28caf161f38399ec4199a59334263cb3ccb7de1549c355d27daa8aa56d7f753c7521212ebc13c03baeffa6beb98a881db71b74cbc135c59c4f044bb94ee62aa69e456c0d715204f149e97ca4eebc86b4fa4f8613f938d7631abb9c5d7c0e1ee240f11817eeb83611ed04dd0fa33d0dff6491fbb627ed55701da44bc02d22b1c11eb765d13f5c8892b7762a2f20a914b3e67ab033dbafba80146f1a5dea1ed35a8a4fd8abbfe5d25c2501a6febceff9261c342ee8f22f91a568e338ecc6ab7690bb5fa123a00bcf062502338052011690d8284c0f81cfd99001990b4409b1408c829abaae86b42abdfbfdf863ce1b62a6b5555cb189d9aa3e76278d46dd73870c19e396c291fa621fbb50b575f217c85a266ca87a51bf600fcbfcb65dc1bb27ce6c1489a2e9d62d5f9c79269ab585af9a85b773cea049c62c428b6a9a64e51d4a10622759d28a7eca163fcad9d27d3d6b51785cd8c44b7f37eafe9b7b0f5a696023f28cbd810ac314c4725375823dfc37627ef97211ce44af7c185a87bb957090e73ffded9d75fcb605810e9567a4d7389a9c8650403d0f17fb2f00260c96a18f0bf2470f066605508fa72878efa113697a0f82d0c688235ff188e414eb362cc75b2609f5e95b9baf74ca066f153645331bb9cef5e562f1c64bcd1db25c150db8b6ec37f2120b36582e4f33784f12d93e0111de143d2bfa9dd8af89ca212e456973a330ed6439567a5fe7c84e0f1c2a8abc072e39929b89ce5277cb4ae5f6cce95fca1ffff9c90a65ab4d37d46e3c6e1a74f5d8b80ccb13e971187c95cbee8ba703420b23f7ef33e27d4f3e4f2fb014982d60b35672c4646429fe2e65290badaf317c4ca9ac344faed98ddc8551dbcf95bb358212b0a073248e51e81e9ac97cfda6b5bb7d1c5d613ee8a0508c37c40838aab5ab8aafe5bca9cf042bc7493b8bf6a1a722727c0dec16e0c95d2626075b171f40fe8146979edb68b81cf152092a567f3b500ce49d729944e10e357006d840a65a50b54b2acbf3a203cbc75fd45f9720ad1321ce82c7b3071f774218ad0e24fa473abb92241bbf15dbb8018462cef144be74f957297572bffebf59ab0fca7ea08203a0e9bbee689285e4904646483fd7ca67e99e6dc55c8f5869228e651c700a9d64d863f7226d303cd861cf8a600138640d8d76e69f0322dd378825bb366d7dab6217d0c7e8c29869b051274bf2690344129b5d4700ba5e7a94efcde10a66c012b9d87231ef67148d02b9c0f3fe00121668092116b3408b857731904b26677d21882ed6bd56846883d34dce00fd7b334b898d29164d93e8855a9abd2eeca6425b69b974b9f9847532c8f17afaec338f00f69d8559d498eed53109936293dc540737e4ee39693970508b61b773c1ae72f34efecbd24fb9221c1debe364e51785be524e44efe71475eb2b2fcc5bdd892d7ca116b18d70c72c645bf06446a6c698540cca394cdcdc7fb73dbc5effa237e2b9b371a3eb03b305fd08fd90fb4ec626f63b35bab267477e977d923e34d1d2aa86c15a3394489f3bb37acc451e17cd115e5a6202016b1b7b67017a9f80dfa01a3de90bd29bdd91a4a43cb6f255aed97a92d0f292a1961f84b079580f2c914b32ccd6a8e77b591984fb721ddd8ad9d33cc26b3c0b7aa627723b1e03e6b498e35577746d6f56d351315f521905037dfda09b0952ba9584a4a2020bb1f59802d7deb9cc1d197505e4188c8b618912cc7cf9ee7af4225c20c1ea8cf36d0ee5baf670802975afca048eba91c749793a22afbf0ce2d252f654792f7f9456018a3ea77e1ec5c90aa594170ea9c5df190ce1622e6e2e3fad4c039b57ae60ee25b5246488b9c114ddffd251276526f64f541a9b71304867fb9f701e0e5c4eb5a28a964854dfd2ca7a73840571a7dfb792edc76c63957db269083da1bd4f5576c999c25f434c8d7d3231af4b8183b86eb653cac47df3eab195bab427fb371ba1df007ba9d9bdd57020a58e66fb85f6d4b5cee39d357d710ffe4d154c5cf0da94d74d70091b842c85a02531f976cc290c1a43bdd76c2064833f0e01a093dbdbe7e24c91c48c1185e169125ee48c707dadca31131fc2d57ab3143d900db297aff568ed6863c27e61f1e97ca05647bedd3518537ccb9df80d82a8050bdc84489da686ab16655d14b16d0487fd872eae908c5e4fee691b7340b6a35516112304723ecbb5bbe57b37d343b6d578cafae2a79b16ecb71ab9d9c9debadd4d0e6c4ae4b863a7efc26ca9abcebb0e339e702024e7c2c0771ee05de29ce4a257e636d231702e7d00b5fabb0ae48d8c0ff449b7c61ce8d45f9e45223a2fa90fabd8a1727064908282b3bcf80c74b6aea0cb84b2a603e30aa3d0be8af9da3b43707eba8f2466ac0c8bef49ec7242600b3fd387af84e73f8e0fa011d10b79c4361c9d0459950ecaae279eea061ee653c0c36c7531d77400d867153fd544d6443df345aa1edcf810af8060f38d2677d407dd235fa149df9b47c771c057d983bf888ea85dff25d2eecc5052c2376d48f13ef101476991b52c5e9e33944be69f2970b728a3b546b3cc24c6a2951ac05b7278752f93e93141683b095e5512fd2fb36a359d1d8e3c6ca6868785673662d51aff43d8d3b628cc9afd3f8e64bf448929f96498975d7c99615452e0e4b29a428877b7d8890baadbad6b4545be421f721268e2e7bb45e76d4405838584ae9b14eb65538b466ce5c8a3fddaf9f293482e0d6155201d65f0d433a237e5406d9b64ba3e127a953ceffeab4fc3847c9f1db1a909fa1ddedc94628c9ee83089d0131713e0a558ac9c039a7a14eb9f81e93c462455acc9dd5bf67c1831dd9a1a978032440846704f368c722a2424ba420a4d891600498a123b91a6a2bc1d3bcd49be397602189c0ff5cc259d26694d03e5b12cab2d57302a5007357210640fd68536626d785d8df95a218e4fb5d93a26e438f8b99c85840304c0848f9b16733c066c8bc21715b5f701596e70d25137ad65a1e9c7fb6987e9900440c44422db0471f3639c4516b725bf50d73b5636bbcca15c383d8b035684cd38a801fcd71f319fdc911c4c579db69ad489068e9e8a7e8f4af45d093cc7413e8f5126c52df569823424e17ac821e4b9769e124c296b37ea3c24690e45161daa536ef13b86f1643b2b0c7fe52c9f061247b046040c7cf5ebe60d1465a5c3589d611f372ffcb6f19d5918b45b9544f10c92d1b9c12768c6d34655d06b9c3d434d6259a1e1cede824db979bd8b1a8f4367a35e741051951147763039896e6c4554397a9785a45ee9573b0afac2d3168715ed7cd91bf29e990c13dd2597104f0ead1de339a64f362fbf9e807e10d67bed6738dd43e3d0dd89349c0fdf1747718209fcf992406f7dfee443507e49ea6742bee2be8d526f86ae3fab9a786217cfe314bbdcb125672ebd81aaee4e2d39aeb6b8342d1fd8e7b2f394695db716ce231278f1e8f49ff118663a7b9d22dd303891fb30b40f6709449c7b97a8de0573a8846bbec91b609c3ecef275d4aaf3685797305943a8a915feb889e2c5ecbd35dc0df831435876dff6936d2689fa1b5d5fa15e12bbfb45303840275be02a4f7362523d62a482a49d4ff9919a724a89af4a458c62a9d99537eb00c88a9b74c7b0e2a39422007ef4e70a4b1df78cbe4dbe4abe958e4d4af7c2274179505154da52b155fc8100c92d107b26ced8e5eb3bb1895eb26b4f88308f67fbd8a700180bad4d27fbbbdef1abf15edad694fd5bf1b6103c87f626169eb6376d2431b16d62cda702fb004db0eecaa37110a5297a943a6c0e482272ed1f6bfb006eb23fdc3cd999e34d8717e0a7dbea03bcc02d753229a7668ac304ef81006c4ff838e62ca176ad0a73cddb0d1d44a45d4ef3a642cbced8b424fdb23dd0012c876218be09536d2f7f19c5424ae3be6849fc5f33f7a5a5e7ae5aa383382762c1d20335297d18f20283d889cf057ee3e733a059a4565a3a453a9f604e3713b14291d868a5297f47d45c689b97688d675018aae20d1cc1757066b5eae02895a34d528bf35bd507f652ae28a560447eb30a990f56fa2bb3cb597429040677932a1278804d5af52bd5b8c6eb704925f85895f0ba7739621c5541727ea4d61be7af18bff3ec03c7dee00274e275394957fc4e71e225490b53c7bdf6c9bdf90d074e3bd7a20df0d9f53ad4f8905ef23e766ab3a4f8519286b50dac7726afe8dc74a18a5902b521d049d532e0b069d2374534d94783183a84241a65b59285b8ebfd14fdf5c7a8b4c0815fd0a87ce276b7f451439a9738424aa8f16706779c714cb1d7e8cd1593ccc20bd82d62541637597094d28b0752ebf8605d3d1d7c463c889c89051bbf7c57c1ecad474635494cde934ad1a850cf0ae2a866929fbc3a08918a0e0864c245f8987af73008b88f4b821303a9d0de7ccbba9e27ec3decd0e55851e19515d43561ed4242e741c13f8817da4c09c2e943cc1aa008b63811ae3a069fe0fd8cec5600c2781f92cc088b0cec8a2c60d51f2925f4654d7bf968a7fc2c8ed06f874bf902380bcd28370e634b2b1d865fe360b189f2a4d0eedb5ad142d174574697917771e364afbe8249362fa0e49673ddc0a0083038acf068b941f15e8f2982f1e79a3972f8f2e00f08b857050a3f65bd19a5df61498ce5489fc946b6795e51d065657324ce715d9e1e86c85513b614d7a5dfbc011121e88b11190a7521fd0bd70a3eeb1216544b62e8c1c580977c969e9fae37323b9fdfeafb99b911cc12fbc9bf1e94008113536264f8308eb97bcdd3cdf1e920d16d451e241e02e85ef2e506e607c09f4a7bd51ff71a46dfcae819908bac8d4b15ab9c68754e768a4d2460c6307adce8c5c11bdb36f0a238f1a5d2fd1202fd0c3a0ca18cb359ca7b6743ae5918da7980e17b8257473de01f5536c84b7fbfd48d71130dd96c083160d7b81fbabfa0d275958310afb9d95d2f1004d4490e95e7c7ca5870b78dd376e3c5a8d014ee6a0f2a9cb61e7b650aea2f10d1762c113ec6319501a166002fb97171a101cec2558ed869e8f388767d0be653f246af1f63396fe3f0dd7f55c1c1438b68a86daae63bd331e4fb1ddc428990c76d887582c9b227a265f559eb2fcb21791df6496062742073531476b40a2805b818aea4f9214872cec9149eaf5e3fdad4201dd10391b8c6a8f58973528e94f6901dfe8dc0c64a45d4a3f2175adac77b1cca4f2d909a13f346a44aa10ff35deb7e612607ac631e1fd541b7978691cde4d76b3930098f8ab036d032c7345386e512dd00a4c086e403997141d8bff4f6caa637f820ce59cc858063cba7dd192c75379f81d6c408875cb0bdde9e8fdedd7e571f5085d7d67016052f89b3dac148edbba35872a89ecb00aef3dc91dea12f993be05cb93b5a5d71098de1ee37ca45355bbd5da713fe01e874ca26d877e1557a3023366a3c84eca17518746ff1a42cef3c3a2291a51436020018cd4b20dcc59b7368328dc1f66bc0930e4941c82a93313dcdaf6b1eb0796f535554b16b00e65af451b85838e3b6c02dd0cedcedce775378ffa0355f6d65e6203cdec157cb45b16f436019bce7f58abf9111ce78e183c049b166cdbdef4961c56cd58fa462a1b3f4aeaf4e72cc5bfc53fbf70b253541c6db433c98e0a848a1242e4f8fedd2c4e653c90dc022800a3ae5374a7879bfd53795d5855ad11654184dc854c8c1e500640c7aa9c95b4b8c8f79a1db8dd43312d68c7c0be9887463197a05e7007aa14296bdff95c52f6ad584c438e10074a0dc5f859d22c3575f75f64ec4f12f0843646773403463f77ec70cd8eca79c5e16a9ba8c94833f1b6a14c70519fff8f0e47467007d6921acfcb8216bfd6f311de677a7153c0d4185fb68c077cedcf29161ed6179254b5025f64b204b1013ceec6d6c31fd765be9297eb6c8e15f1e229041f54dadd635e3ab90edf926c34bdfff513c4f064eeccc25e5c7ff671bc94af9f53c50ad5818838b70e9008a7ef4b5674d2360f4639c133e121eafe88b5dc762e87246bb98a38b504db76bd99c0ce2cba37c4f29e10a2b52c976187a5feead5b1a2eda4cc6a691a850035d0a7ff85914b31ad5b4b9cd1063eb8a2ea02b3ac10a54e306565b676ef0be349e79790605a5ca55a96979e67405fd933f9f187142e60994efa35329a1a1318412e23d3c925467008ea2edb5007fb33f99372e9a9a15752739dd3f36e38dcc71678316ee3f13cfa912e5728f4bc9a709ebe29af0d25080e987000db24af0d769b6aacbfa9de70b39d4fa077f759fc3f8303312eff820a3a313070e053e33a32c673cfe2166d75d8f75f7532e2f7ad1e7ee7a919594f1b257cbb595dfce4d03431ff3d2c116c2b85f330b0c218f4b4f8758b226e7c1cf69fe86dc88f520775c8d458a6147ac3578505e81a3541a8020c75d2994f7aeea21456ed08f68ed659f1ef246049ef3c7ce1484ae81c3e5ff3eaefed6acb0ca2c63be216c29368c88c8d16d78b46487e4e977c2434bf5932e9321ab0f5caa98470a562130a101c56ed91a34466c04dd7eca94e0d0d4f692f38b4ae72c21b00cff012a7af5d3c7aa0efd7c061862f8007671578e548d687811f55ce51f16b715662a0aff08f867217fb47c73b981e8533012aa7e485a4d4a3043675bc52d55d6cb8ff4527e63f202fe20091f6c82cd27339c456a804391d6b61f329f74348047196f6ae45325b9276a0d96a083dfa78858ef3f83901653684d301ed05f7bd09e58d3259f86abc8fb2a37a6011d115c6f0ba2f1212cf46ae0e18bb18e2c0cd4196017826b5f809bc1dd52b88c008887578750a07c4c5d9bb788a241cf8243758410225645073ae476d5313d81abf8f1ae34ee56d9a7c11de9349b108faf1936c92548ace01c96083a554dc318be96fd8df07ae77a0b97fd444ffac7dd730802d072ff6e00e3a69d780dcac68e8eec73d60d973c070fd765d1b0687acf8a530c5c987e242840b0273021ef908d778d0138036da177db440823100bca4085656f35a9847bff6e772b732f5bcf9748fee1f4c0e12b0b31557dcb38aef72c0c9e5e96012ad1a8dcafc25b8454947d41288709c06504bbef5a720b3d19cb44e70f3a50286d20a8d2cc879174213a4b637f3706088d939b81656b9f6c75dce023eaacb0edac10f7edf972e04a244027dda5c826cdae85dbacd0ef358f2dc8c1b259500bacf2aaf29a9519bb2a8c0280c6e6090c7cde2d1b4822642a6e4b97cc8860d290b5c997257c9117c83aa4360a57fc3519a926e2147a45d7ee4ba8e4ff638aa0a4c92a24aacf73d98e4c28e1dc27f2b07e441af15db083040f136092ff8e2b0e318361207e776d75892bc88014e622fe6d9638bfc05401c8f185d1293f932fa5789c2f35f38255fbfb256977dbdf0f3e3a8a60a5806a02b1a0317ba35ea1230392326cc6cf1cc4e5baeb17b5d5c8b5380c381164ba405ce86f115034886307b2f199b81a021e79ab1633f0df410707886911db9d3a7e461fba985d47214910766f995598c252c84615bb761cf41e646def078041458def5adf001537a3b155332ad0dd01e8f2be5c8a27f88a601d5cd52bb2604630ea182fc73b118dc4a80bbcc10d6fb956ab57d955d5d34f3a5e7ce75866f23cdc1b37ef3db5dc739adefe8c1f9148022109c09b907fe15268ac8814a143db18a0225b90fd0eabccc3abda9f5988039b8f73054c97432c88cb1d4cd86012aa78940a8298b97bfe0eb62a0c7b12bd8db354cd6a533a6023a2acc9b5b9ba1efa48c68f8ded10dd2bf8ff40e5ea5cd560b54df62e54ac19524fe5858c94649cda714197cdb63204495a74196b36626b6ec2f5a4088ffff81228c5b2b5a4e8395353d4e4cfda6f63e88fa78e4de4a8cce5cc40a2050295c9fff74266073e10f6a27781722e155c8beac6e81945c67f814fbcab8717f52f220b5011f0148982a8b5af165d195aef56a4e90052e398cd4c0b6a3a2c2566dc5ac8dd559d0f8b486d6a0168489f764cfbc793b61498bb2cfdc5dac1245a7fa8bb36b70503100d2f671839aedf0b2e341b877428430f0af74740b00651433ad69c0b912141905c45afad2de7605e27982c9c925b314d518f0fa71f3d1a04bbd4482241764084e692c70b52283ca2ee447db06b0e8ea69bc432fad0f640ae68002c3c6fee5048fb6f228226015156c63ca7a75f854fddd409b3ccabb5241bd6d7e2be84c56882f3f14faf1f51be2d4af801c7192d8248d0b479f20392f8d233dc2cf2026c3fe2fc0735454bc7881488f4a9810053f774daa9d8a751a9f69ff767784c6c7089758614fd155762dddb935ed6daef461168eabafd81424c63f9fad62dcc88d042f2a47ceaab63a0de77bf8e2ec611ddeb019006e8f1e135ecdd0e9906cee82acfa5bad4e586c68955aa98b4d12daf5d8c2ce2998d4fa4da306c887098d9a6fa7a75fc95b9fa0b59e970f8fd5924c26a979c617a1e5e3d1ce6284fde99de8965f0cb8e1647fc640ed0764a0861ec94e604696a66d6d0c73aa478aafa183fe6e4698c8dc0e9a47a9a3a28eba97fda8ef48cd6245d586053aa6f584ca6d3e8fd8e22738df6a328d6d4055febf116a32d71510e25f15ab13ae51acda6fd9fe81e806db0d4a4c19051f9e05d61dcddb7bb468e1350d540b992d01c2c3c93325da4ec5058deaaba58c98a1f53df346dde9e9c1248c71f0540cea0640d909dd7ea5ff2535123128d2a3f4f72f22679991fb6621b535499d446cde0ff4abd8bde1ce708014ea7c00e0bfc45b06d1b4de1dec16878a945ea84a939ffc30aa6415765cc33aa19b63a1a993144153073c90ec8ebf3977263fb360672f401b50ffb80978252660933c0fa6d707069ff7a378516ff070d3d7fed76d7d1d6ebde4caabcd2e6886eadebb0dc0a3cee8f3a99eec03d6bb2731214e63f3b6042dd99bec38f54c5318083ce634a4923c080c5f45d7f52a9696987a7faa3475aeff38fe9ec39276ab696ddca300b9fa48007edb789696768f3d09ff2f0f1b295e6af9154c7fffdec3c6959124d4e671435550990dfbf2fd7d45e74281527684160a7a52c1ef6bcc14b526b10b51149ba1ca01c319256415799af58bc5e1cc4f64851e6356653c6407590f4eb1c1f9be8c63a9e34d98971515ea56b933313f0a7fdcdf6b59f99b310be4d5cc2eb69631d58795c6437f9aa187087ac388b518fe66c5e6caa38d85529d6f95a32e92c2bf29381984d941116adc5075b60af82003c861965442ac2c2c12450c38f7a18e6867c3af925547aed6e208c0550202ee9fb73325243bb55e363d16dae4573ba1c1e1ffa186c973182f6e3a271e654d4fb144b66c4961d86c9bee39d6255665a9d461a3797904f26ced75eeac52ece1dfb49d731b01b6ffc9001d8a7f4339df546c924b7f4e0acd33f0ff8ef96f88a4ef8e5102c9bd69d0416feffed0ca1fe60717544c132b3d2b5e0857391d1b3ade162a7e57b8a1bb07ba9d808737df2ce75a9869613ec952ab8f3312492eb19a63ed91f24541cc2a0b958b8afb3c87e5dac1b5a960b58f6e001ba572aba6f8e966c8e8547b6f17d783739b5443e8b4716c185565b210b49b67334ca7b73e04b1c6c3f9e8726f58072ec76437804f945aad91cbce371cd16ea2b2a5508ef33bdb7bcbe9dab9a35112e4d781dc1c63889c0019f3567320dfa7a2778ee703b0bd63d9324c1628e1e1401b6ae8fc8f061b9c037a935400ef75401458bdb0c52d22b6b3c0a0ffc44dddd1f6178f448490a9b2263fd93abafd006c1e6d1c4d8bbaa0f438fb6915bdadfc45b1623bdfed48fad60cd55f3e180449ba954fb6e58365876c991a0081620371d0ca805b97942822d584790fadafcbe25a35178f2b77e4c7f5de6d974bb36e95d3c7e41854fd0ca590e03f6ed0c0c3364cd18e84f6b2fce6cd273d067bdef5f344a5caea3eaa0e777ce862785df1ea876cb5a32ef68d838c8e690e184960b9d8c690ab80198d8e412d9f722eaea682486cb0e9afcb6235721f84ae1dbcbfd684551c2f6338f64c2b35f41676e133ce14023213b25eacd7078a073e892f4c6f8b8a5d3eaccf2ac10ecdf423df636b943fc6f47ff61a29ff3bc3e5be67a284d04301a770fecac982108b0269b8d1a597ee3b8f098b309837d15849a8e9bc19b9d10a0b059fef78e9d49b5fe85318673ddeaaa1f89974a28ae75865d925a48b0f918fd742c8fb4e1b9d1b326214dd69a85e3d0f99a4463f548bb316abf4a60892b1b6b31d3a6b77eb1e49551a2a4b76a7a0b2bf700378e73c1d1953ec83f355bd7b9032556b4621e8039497907990f0a375c2057eef82804df7cae5483fbe0453feaf55a2aa133813970d0fb699bab5bb7b607ec626a5b2809abffebf641c26ca1fba36d5dfd83d182e57faaa9e4fd54682eac74baa209121400aab797a38b46d69f7bfe340edacd95bab7a3e42e703e762a2530ecc8a44cfb2c052cc7f62b61a656cafeda74d4bf2b2e4425afc66abd97ae04359e7f05011be2f2192327563b6dd1aff57b30310def55380ced1acebf76d6f8d41fdb0aa4f793e4098731799690bcbb249bb7cfa8d2429d4c0fdb76a92f476b09a617fc1713e887dc59dc662af7edb1aac892798a3a31c16007e89eb1d0e1a967c4767178d51c54f6f43d9f0406efd91a5065c4d3d94a79f431010ecb9e5c6aecd1778dce622d81fe48478fe0f8c856e58934f3a539ea556c2db4b6b03f11b9bcd20685d34401a5af64579e2546858f2f5486e0ad366e28a2c7dfda265a17aaf594b0445d069526b816e281fe79285f66055a69b34a7e8f75ff387b3ec74187b9c667e1b95ea7793fba58ddb3f58d2145f48d85a39e42474625ddca1749954e861a1f12066711d56a9d15ae06663e6fce32aa8478bc9c83f471944e940b09bffca34eff94f312396418ffd94c1b6d6c02eae682f4c903fa480eaa6d1a570b4f3bb0c3b13296b18869dcf561ef0ccc6f06272d035c0524e16ba914ec102e690a7c4b463349cea5fb2255f96642583badd351e964e019dc14e30f3866495f739721559aa89a23ca9258aae2dc59e70c65948d4a3707372396c28644a40d84ed34f8dd39342c99ecfaa8ea810d840e23d5d91bd970a03dd8428085b3acdb0f7622b994a38f6caebc936ef4aab611d90397ee831ae696b977bb966e06157cc8e1ee2c9d64c5c2632798312fa2410e4c83f8e46c1c79df5ba2a5cff9565a95922c98bfa06dd072b73e2d5ee919a67bdf763fed7739de8054fd9a002e70fa271ef995e2084bd11b96055aacfaff068cd182625281f8a3527af13469c0462fbebb1c8129eacaad2db3c98cec2dc00080bf813362e692d65d54e6f1db362532ae5e2f4dd44280b249b99b906671285708cd46706afd84b11301d6776595e3b09e08bab5890af6f4e8346d46ac9c97833ae8da3ec04d09bb6934c8d28807f09bca9fa31bbbfe43f9eee8251b196eec794217b7f55ded7ad72614fc2a21b2e8dc4530ac8020c15467c5bb65536b08c6f23eb9af0863654ff3b49e6ab02e019553890f459b172cffa0d451f72abcf6ccdc06c7fae82563f70559f62b6a8dd8edd62cfae9f3303f3a71794e2ee99f39ea43ea9132331ebf86d9838c573c2872598b837cbf6af323a59ba7ccdc8bac85ca7b69fe6e52111fe344cacbf2a710a032486de7b2cf22b2f576db5ff98c55146441ef2ba4b6db58db20130c22cc5067eab7d872e3b19cb97329f34533aa5619e360e74211b153d65329ae0c1ff2ead40a3a9715338964f1e998626b0c5acaffa74c4c2662d958125ba3a738a6a7886eae0fa4f48d029f15272f5a27eb2ecf817e547eff03d918dc9b100253010a266ed15ffd4741240a6fe42de980c56d2ed3f6c479fca4adb7d10c67d96dadfbc3e47d8cf3f496a0bb247e34bde3edde6c9036200c8ff9f2aea308bb073e3da2bb13f92b86890532daceddd6cd2f9fab2f692f81f4aa31e63bcc7079f95b3d64c7289f91db39948b5526a751c47a33fc0c85ee81b334a0941919501d1741714e1ebbdddf7989f76b95339d01474d523f821cccf48521b213d7ddc1556a7bd9ecd4d277f2591f3dc9fbb0299b920140db0de827e82cff3cc6cc3ab12b8948742d5f23215e1801ba104a29ef6ad5c5a042526c70407bead8411df2507e5b3c75e0fec91c4e3821b1bfa8a778eeee1651a2bd706f8ce305b593723c3f41789136a6333952e77e5a3ac00ba0c467d0c01247a14ee6420623d51621ea5bf2295d5d7e48220828200ad6ac84d1f3fcf33d134960f7f3a8ff50192f16bc66c7d746555c2b4f7085ae0d3743ea704c8e8af767f2c1f69ecd24fb434ffefe171bbfc95e0014ba0a9c7e690f23528c6b0c7b912c4c3eb16a218ace03186c7b6740e2d8ae5b5898fddc3e15a5535e3fb1017df925dc3ed58eb25f33784b2e93b7df63f985ad1164505dddd9991d52c811a1bd44828a4b360ceece5244e1d2961ba773f3d47e39ae9c076210ba258cb505602ddce337f0f5e271ede9c8f1e77d7fb318acd51083e52c617aef6253cc30de6c53b642fb108805d169c7088847e4e3a9985f0c8137a1c7acef3fc543cfcbaf8237b40daa7c0b6458870c62b021b4955f2ed33cabbd3298427462e56f26e6663ff33ff9619be5cba4071cf7b1f877f6b2f35314656ff42cc3ecd652875d0097b4533fc48a318bd647e5c6a5aff20614dda244a1d531e01551c2a9e0bb03a68fbc1219f7563242322c89ad5343eb143d65217ae9c793fa5b956531db0800b70bc9eea1b9fd35d2faa78994b7b78067341a7dad2afe12454540913d827d914a535a5e25b2e4396f427aa9feec5b07ac4beccc765537f91d6a85b86d87de9a226100c38903c3a53e6a5b8453e4cb52e52db9f22c26390ed2bc7e5679c8d764a3af274fb39f05c0f8d4172eb2bf1a8308ef819271b456a83c8f43c144c681af4059c832c2b5126fe292f1e082d7358ba54ab60f3c26d85a613c2ff8366379f015af80c501893b1642d99bf66e19a7cc411896655d8f8467c8dc9177e8a258e9862ab85e78ae81dd2cecb32d6499fae5eda5274b92a2816bae88c10821a91a2e1bb519a4bedef422b5fcd61fe9f928f7c3279002d91c608c523bc86ee572ccc466f7a31e5da789a539bcd71ff1f7b768df606d59481beebf4686bce57a83c2c856ca0c28f2371951ad27cecc46423f20286c728c27904188c615d1a4d49a44fa57d1d779ed617071582f48ca5b3fa2dc627490d6373aff23f479fd2971877074db2ab348493c3893183f55e9217ca58ffd601f035f05e1c4889b003d4addf5c48f59409b1a8d8afc26015dcf6f4033c19ada94325a2ca4bf727a520b7b0c13b9aeb2287dbf753d5f8a7d446e1a655b6fd58afb4dc6500a39a85b49c771c18fdcd63aef59a807492d85d8557ec33bc76dfd30db62669e4c2bcecd4cff411481ad9e6d530739b940a6f91d526dc1b8fc14a48ca6255481cd07951cf253d737d9e73b57e563030d055323f8578082a7992ebe1ff5ef556cd4f74d08a555ffb7dcf484ba2f95aa7fb24728ad3ed8f7270a931d6c4b8eaefc4cd5f6c1afaa1a5520e39c2c39b2fe612a4a1aa5192c9cfd4e2b3d4526a98c046b10ff6a1443996c7b25bfdbfc1fe7159b8b4347d66738c2709110938007bb367d8d93a38bc606115746db468f6e5b321adf1daeee320ffee55dfb24f3081e63ef57982dcff8df4c6a462020d335ed4bdb19b45400bd4677ef017d6c7e2ea5766adaaf60d90f8fe46987963f6370f78f2837e1a3e4537092bdf4728fe16e9427db94e61f0bd1174ef79a0e3a595343c6f130f9abd0bea79495e86ea4593505cc79762947238de488f2a638c7002c8e83cffa3a66fac027e51e32e2d0009d28ff950017d8f197f6b2774b1fc354247ac810939038536ffafc892aa65775f8f0568fe40dc21985784b20ea2d7a3f8c677034fb5db952a83333c083cd2d40e8d675e61d70b6fbb5621a0616fbeae12603ffdc4df817699a08899d460488b09472c9d5f27ffd70cda9d5d76891e1d895bca13028079240c9a74bbeb015766ee410c91ad036c921b87192b72a8e1ccf576a15b676d2b33601369378eb5963363ec70dc8ec0599fe44465623469bdafe1db6280fed186e2747b48163fd9650697a292d4a557a4dc868642f1f0634525bf7fb7946073acfcc1738df5ba2ec7b3ead6fc972ab2d6f56aa0bc5879b96246bf13c952aac9c2e3ba073a106fa0a6f4c4821bdd8249f41da057e88f3ef7b8a1fffec29d87839277fb227fbef9d7dd4e34635d264ff0bdab64e926ab14f0914b246afc405b0a28599bb868e74bad25af1f5a8b5d4634f7da715391c6ccebdc9770959328a5173a6ae03a18f20b90229ab450de3ee3f5e1e5d546d8b58b40487b834ed3975b303fcdf800585bc4ceb4209b8abfed9c0b3141d118d0d9199de5a6551374f893305a2fcdf07b49f0f0ea220aab973720dcd5ba8b9e7cfd84b8b089687603953cee4ea67ef961952454a2906ce9a91c46e8664de8cc23aa4b176cb52ad55d16fb4af9ebe4a0c7936ebd97965ffdbf7d365b0ecbbe3e753862b5289ffa1d35a80f1b7245acb7475d6b776cdfb66190ae409a4093f900b563281262e3f16ba0c4d24fbc37a21f05a8ee157927aadfb10eae462de6e63e0cbdea0c7f74da7ed7ba860b96154f778ed7df9f9b3e45260f66d46912e38c5053c4ed6d4889851b9a0dd809a4e4aa0d45993746140079b06467eecb503c755f4bd5e15e787f4d8012835c91d5a3c3b74d8795d55c9797b4160d9a7840dec64470bbf64e1268b9c89a60bce52c29fdd273c93387519d1e98ef59310fc983379555a19e309d978b9cabbd7a0f667ab6a73ec7f81355662a07291b50a51f7072317ed78b289350ada04b41aa275c0f7adc3117be84680b1b373f83a125464ddd9b565e312333ccfb9b7c79bf8dccaa557863c31db9ae5523b811bb0b1ae87455ed9b9cbe65858c3d465947b22ff11b235ec14a77cd6d7210197fe7b805b6ef34c8a7de437732521f8280e62abb5276b8139815842a807d0c7633f7d4d354c7cb634c3e22726b3e562c2891d88509cfbc10b1a7bdaf41441fcbe6f1b58fa826a9ede031a5dd3c58f5c60b41a4d26a06283db746e514ff4ff10990ac900a928ff0ffb7289bdbee0c7e8b50f1e7c139124387808e7951fe81d015af863aff571e60dd640f1fa16cd066cf5579d3f23a02b6ccbcb19f51ae4a4fcd10462a2b39893d5e023cc3e5fe4abf150c6747c9cc56f888f15e1c64d25f8a4b51afde8118fa830508cd883cd535dc85bb6940d4599219f8cf2ce9088aa3210241aebfc496dd2f32b1beec54eaa7a602336416e83a119735511a64a0bed5968cae2149bf22440356d5fc4074fcd993aaa16c3f4e071dcbd98b6feba93bdac5570fd5f928f564d069d0e7e10980726344dbcee23a457bf53ad48b7e259d52fe79b16a21669477586537f3874e40cd6410dbd2ba826d66096e2d66cd20906ab3a37714d1b668f42a14aedf0b09a5003f66b736c2714a74fca4460f69bb70f8d790b4def77f18db2d766cf8ea475a9029073d757ba2182572b9d3243ac9b4517f3bcd682fdd405b2bb7dc74391e8199756c50966ed2229fc164f321e3e44889239fbbd40aa9b07de4d164859899dcf3c201f279737e0b4e02ebe7febea0149e35c017eec3b4f6df7dbf1adf720f1391323d1fffbb2f00b0f3199c0a22962ba331369a3675b9218f0cffde84313b590be04ebd533271cdc9b8e1e83781faeaad46fe44579b9d7f71b0f9c42c07f008bc045dc38c4d4391e17e2912b5ceb56677df38b7f3f3d065d2f1fbcede7f22de695e182718be1e2f5dc7fd6d9e1158009051b11715a5b72b93f1fad3259c2712d233981a5fa760f9c20a0998870c9332d5236a466eb99a3bdaf94da6307fb1d48c1447e1967b4f8fd6d4074ce01f0667ea0d7774a21ef2995e20e1b65693e24cf8a27e91dcee12b9d72109c1cba34dd69e71b4936046eda275d73364744a24c670e3c2623debbf318e7ff9fc56884c91062133139ef93755280586a98b4f8d5753f8dec7ef533acc2ca4755eb980d4c123376968ad2e3b280c54a706e04e7091b3cef42414cac00e6c069e271efafb9101ca1c2297ec849f53d7f8e08e0576a80e9d986e3e7fe0fe2a4da5d2b1b28c31015d7be1151dcddbf94dcbbcdd9ce10e1e745b5881c64216349b2e77cadd4a1305b33de7f34886e1664251a6e80a860deac9d410c35ab21b6ea84179cc8c5e85ecc4795abc5c2992b12173455f3c62c57e0a5844be59184a4b716410a4b76b637f21493c837b8e002afe9d46afb65ebd290ca16bc7611d456c9594fb7ae3f99ece1ba10aaa3bbc947f17e73e5c351ff474973384a6cf46123916208ac3855a59cc1f667e4d659b14c19cfa087c63bb86dd7d222d3dc0c0f514f259b3fadc90bdda163fc9e45a1cb3a7910b80c6b2740c0c28e863c294848b8a1e8524d5ecb356309b1570e84e4601d8858730f70f2c3aca47edc9cb2592e10ffa0a4c18ddbea0dff04d3153b2070e06c5fc15de706faa5a056ec461714ba18024309160b8b63df2c2ff00c3151af89d1eb36650b4404860f5d6834025794c8db877fff24879813e24b2e60e366fca251ee2445b05bc6cd472acf4fa1a3b37bc7b19a45660570885045f2006153ef5633e36be5e086bc27f0969ec7ce09b16ac016adb448088d35e714c7304051d927ddf6cbd7435c0da2656ff132cd4db6a267d01bad36313f857c69a4066a5f08a5ab84f29ce0272a33fbd8cc65408f87f17ab44bd8f83e3054de9c64b828875bfaa66cfa494818cc7a3f0acaf4e21d547859b69b1929a9c1a09ffcb41a46b6dfd623bf50b40672174e0051c240ee9d565db52b5592f1fad99aa334d6e630c539e80bcb331a6a3ae893d23dbf42ebcce9010416fe2bbe7fbac4311266b8dd7eca439a6442c3efe49b8f51db402fe64adec441dee551e1fc6ae146317b2c23ef278e75973428ab6af1bf8e510dee820ab6f058b2964eeb5da2f1841642358d0c5a3ac57309c87ed4d77df3ca4f1d5085310b77b31f78f8bf3a3a50d25a36c76d2ac190ffe83c9b6002dd78aea9e32c949679f3d0119c5846800f1ea36ff48cdf596cf23a75306d98954163462c679ea0c98be8a55934acb761020ee200f364dc0eb019b573738071b797294270946a7df85a0efbfc368b1fdfcd62c89d38492d23f6e310c4dcb5355034d6285751e76f1a7f71add9d133317032a89ee51f73cdb702e00c825ca06d9b86191c1d5c605b7b46687f5fe769d83a36b63dc979bfe61d9c49ead18ce3688ebed2df0cd5e4efc2bd8fd563c2978f964437fd67a3e7d63300b10d72260154823f5831057d3765aa5b8c91ef9a79b51108600436fa8dbff73580f91824ddcb16339dd95d3a48a724b697c8598255c2f0877d914ee355c6b5c579b7263fdc154df0f90ae9e7652872322120bdab1942958b85a3e6cbae79eae61863a83728a904bf19c5d1f918028375c5798df1fe86288a788696f794d257c6da2aef808926e452d9c999cbc0734876de8c055e82c13605250d2755dd6b883778d29d28372d5633d2f26cb51a9d146a1ea946c7bbb6838395df73ac63cc443894d06b5e3db32928bad337fd2038f3b8d5e1d24765f8d409433aa01d3af932a9b482edd92c776164a837afb1cbb7bd9ed4e801532b79261dfb7b55a3d4996f65285a592241d9626e8c75418dd4ec7e2f00f98408ec532fb23be6ed5735d2c200921da88741b24800acfd0067b66ad52eed23076806a274132baa86c5de07ec7f8d284a0ff610d60602009245d4b450a806cf8179b68362f5745f950be73131d7ae3bdce8db5859cc4e9d3b2ee92e6b80843437d602cf6623d8ca00dba918e8d1f53f88999050ff77569c2d783a3e722ff4c454db64818878589060b895b0fde8eefc5ec2fd793592e0c11009688498013f94af18f581fed406a37c721619589af1710f3d6a9a181b34d39ef306b7ef201d53ba03310e99bb1336c4ade3f1a7935c8f111bb2a4a4c24a40dee2802d69b0fecac6c052d8ecf0404ee54f0a2416fba62452d623f4325fb59d0df0bc28b11794cffdfdbd5dc1fc009daf55d6c95a4e99dee585766bab2a7a26244e6e1d484ad3486ab88a383fb50b05cb968faf39db34e9343971bec658155b75d0e943282fdf5324cd683cba9ffbadb6ba711f6e0cc4781918a8c730e3e4d5dc7a9b8f0847173573074be5f0b96c32b47a77a67eb1e218baa20d565be464763c068166b66342f6f8d7e4b1fa493e1976f38ee542f3db742b5845c07d1d2960b775068da1b8ed53794a66ba4ffded9b9fa7016ab7e26b827e653d9be9f3afa6a4cddca7de765debcdc83fdbe2d86eafd879badeb3eef454e4533220e5b4bb63507e41ba7218601b1e7d9ff1a9b12ab398645d453e7c3bd1a73b7aaee012e98e36a8240a7b720ff63c775597ae6d2604211941644ceeb35d47cf95af3d2e98a776d8ef86abcb28f92f05ddb77ecce9819497faa38b9c38320ea4db846cbba2b4e7a2de0e6b28a913830281f86d483400809ddb6f604927c1c63e6532d6b57e58a08fe69d3103027123adf2cc57ccebcce6e466b3a4ea2bc24d642fc192108aaf7ba28e9d4fe93016b211085aba1fcdad9375e9fa61fc5615f5e89a654351c9f1d7cd2605ff964680180d075653eeeb3c4b7358f3a4cc28076ada5702a00b277e27f7fdd30dcf17d709663fde8744e94f75a66e878187739012de158dbd87e8f39d18f6db2b923ad62d0a9db702631ed4cc809972c63daa41cd7a98921be196fd615403bf333e8e9ab3477e8ab5eab9015449b2a07c964a5da3d616b6d9cca401bb9c0e96a54ca73720bf2664738dd7a4a2aa65f16631a2d0f1f24ce4c1f7b577eba7200bb8ceceaa811eef164ae26cd5664525572a20f720ccae039bc7bdc16361e608fc677db2ea71c2be0e89f6901bd2b31693e3b9e91c099d69256cb9fa6b68c123109bcc7af44494a01de058075c008b253636ca646657b6eff9a84c5e73c8d0e633e36bf54e676af0dd7c0f05d15ee40ff3a2f51f977fc2c9bdca13f4abae2621990fe44dc1df1e36c6632d39d9f83516d0275ed0c84da41f8216d6079d6a18d22f95ae95de89544b29804d722111ae80e697bafad6e798e0b255f468f34ea1daeffcb5ddf410fc0bba1c86a57d93b77c15bfa2a9db322ca1c2ef6f8d2bdbd1f994db674047935b357dfd4c0be8dfcc4edda60487d54bb52355268fd8a4360bf8b56fad1b9599c82b4a8979e3422e824f27cf97b715ec6a1fc45e6cad4b4aeca39c013a5abc7652bbc80c14147375dbc447b5896678ec1bd65c8920f6a6a07ef73abd5d53ec599b5f697be606b781dfee4600b344c3d42d476582ed70228a46cc95f9d34632d28e3fb4d11506ff7adb96727e1e02712558ca579b58c19c4667a3f3abdfc60a4904a3f535965061eb2fe023a44917669d2284eb977086f85ec57b28f1121a607b096e69521babe48ee0bc2c5ee095135f8d25a45ae0fef3f58ea466782fce191c499a6ee9cf0319a0f4e08463bc06e5fe69ad135ee78fea53a6787593913805c2e1fb6e2c5a6bfd15d76981f28261c1ef2c2548217135fe872eb722b811519a2ae319f4c4430089a717880b9de07fbb6f20497a68db70af64ecd1052438dc7be9afdc2e65129a1e46379ca751d485714856b02237cb36df1bb30eb22ae18a664ff786bdc7a00b22caf4abbee7bfb7f4db1b1025402f04e9cc2c8a933e48525a6294293a50dfb90e93f8e9eb7f225c503ce5340c0dcb587dd1ce7110503f382ee457a5bb09b307d15005a264ba77c090b53467945668ef7a7e65091a7d6c212f923c3f086cbd7c9c6b7aae2528950b5be02437ce0d866a248831c5cd3d8f0c8425df7e0d5f49cb5ebaaeacee2e58a88a0e13884d95a43c4c184c744f3f824bfa6214f7eb165b3ecb73a5cf293a1262bdfe332c6875d44b46922671c861fa91e0cf8a9550e2e25d96cfa253398872d7aacf6475d7cb2d44912821d57166729bb238f418d3c554ff81ed7f3b0680af1891807766287c825a63c73a3ef4c7530641398416327f0d1ae0173f41b0eaa44abbe6c4393bcdb1dd29062e2fc3772478ab634bd3dbaa61b9975f42fd61133ff75cf88c9233e41c3618fbf9f14cd893657c3fbbbe7d4432c1a10b50ea5249bb957a38a5903e60e8a357fdb2266c31b9db9b3049222592c7c5d6b9674f4d26e2bfc545854e76e7b368142b3f2f5c4df82049da5ac1535e0db2ab087a28bf7130d41cebda7620589f02bf12902f9c98faab03e2156f370e9be7920818401e87d1d4404281016ef8e999edadda8f0c120999ddec464ca4cb1f7b99c8688e16dae51680b62ee13c02e5427d265758d298eda58d4a2b00cce5c985e707a3e7264494bf2757100df5be615630a0fa871ad440885b3ea4c37ed1496d1e0d6be2abad3ecc21cdb0bef9c1f58fe509ee278082d9829123bcdc70bbe3740e4e90ee5567caa87c199a3cf479481e12932ba0cd15d352a8a7ab527db5d887540e00aa7ce6991f6dc0f90981f5c87655830ed18bd05d400d6a6989fc0dee94abf0cd423cf8c51b0db9d0f122213307ac35b61e7335561c3db7407d268b595e6d159fc967d626afbba46a69d868c99fb734cbcb50d12105a92e149af5e327c7d1a268a61d022630dc86fd70008853a7954177f63739d351b6e64ffe7c2d9fc519e589842b0f2a7fecf657f573c63c4b7b7aecb82223f759e653ff0a5408820a04ab620beb64270d035583b517520937a3cd613891312eae4056641972a71fbb14018bc665fe82d3472914fdbcd0cff7676dfad1b225edbc5bccd10223ce7b7f87b8922f5e889ce5b0ce0cad49b696c52822677e7b7598a79dedaf037e6356897b161daac8c90ca1ce3d043799fc91df3781ff51bfd940619d41e6e5fc915819750a791f5bdea52a5121a8aac6859b786edfa12b6495b144d73baccae1cdf09757ddec8976c2909fd2547e284fb14237af8131adba98f1dd268dce1a8deb37e08dbbd1554784c00e05099bc4931b49a9f4526225fa03231fbf22de1476495da1c5b45e2696fbe2c79df7c684f37943d8892a299659713eff82e1d666e258f1c3ceba441e85b3ba3a35ae612b792f1a5ca4f4cb5f1352866f5c5f5a7d5399b51b85c95fce02eac52b47fe3584e24110e4dee90c8d917f95c02234d19605854325c683949b6a78761310ff4e637355a603980f4bdea96d8c11be77515d89f50a8906afb7d18f09bfd89f9df8721cc5b1354c0806162d46c6c053ac9426b82b770801c8851b85b617f7b3799b420ac99823573f64a717f6a2a60fc18bbc758d58cf90d569ca1304835eaadcec9198337e22a4b805a677dd402b4423604595b6bd9edfec2137396202f59ae2a3cddf38e500b0207daf85a31acb5ef18b2b88ed173088ce2013ea6b072d4802f99235fe924e18f96d87645d7aa88d4dfdbaae08392d9620362010851bf0ab9d949cdb50e2b7207db1927bce4ee97c39a1be85010a85c3d887ecb4f061a8eeabdfa5e0ec77503b9f19c2e340a3af32646ce39fb0758b56150b01ca7639eb296fb51b1e8f867314d4eac696cd7086138d32b32f55fac94ab6db7bf35660eacee6f76895d8ee0b6dfd0753e2ce4e1deff8620344de6e174102ad9f23969989ad346aedf79bfbeb46250b166d6857a243909ce4e3938a5ff0c06aa33496898017ef081506d6f5fa81ca6315086f6d537303d81360ea3d2e26accddccb0790e9e4fae1bf8bfc35189fc5b14e7c5181279651fa4bacd8dc0c6d11ab33b2df32b15c29b54d1b3250ad1d600e9fa0bed89bb20e485478083f31c20bb5297b7b7f79186fcb61ca9c28f678110733ae7c796dc550d69934100cbffea2ec284bb20af6f39e94b125cbea8cf06845cf1e029f0d833a60d05fded2626b903f8014efc1a4b7a6004052eb23cc1280389bd0c636d3bdf908c5f03ffa21bd1823173db31f6ea70d3a08960a22abc6269c3a3f2fb9aeca99be65c14e3d7740d570db417243fb02609c77ccdaea945ff0e7e273d4df0498ba761cba96afa937180a0cea6874b32d9be568784f93c1ef0451637812c13b2ecaf82d5f13aec5054a7964435ea159aa5bf54e7ac494fae902fa81e42f816ec8248365789058b9a9bb336e97469a820b1f6f82cbc1f18cf7d2239e17f71c0d924c9c7cf4b5b71e48086639baf78ededf60583526633c713b795bda4097eafa40cc0cecc9a01822bd1dba8d76c28b5242cc5418d26a4b7afa621629bac95491eba22be328c2ad7d13b539e4bb2f65cfa7957bd551cfa1b2f7770d29d2d1b567d8a5f2512411e013796123c163cdf31c633f353feb506c4e0114b5d4e9cd8397196fa9a7e238d3fb5667240f42d6285b2e5f72fbfdbffb1517bfbcee92973392cbff446224b59ba2aacc343abc87114d15e6aa04e5725bd960ac5b8ebbafc834637f619ec8e293b17b2ad94e81a2f8f1c49afbdc14491c7ff54a0ed27e967a5049eb8414aa4245ee26254b251059d5199ef20ff35844f6a4cb806a1b64f3e88446b6e9e19662bf96282448218a8b50cb2ddaa1b014f30b40449316f067b85091b34a2feff0bfc976e44bfc028b9e7eb4f2142ec63a0e9e3b6e153129731e734002fb0bed07ab7fd2f7903af570841f97ebb54278badaf44cbf5acf0e6fcc21a6a90b51de36845206f47c49858121644911c5e9d5c9012a70bd39b186533c93a9f0572c3ae8c645ebb5ac1d34fb4fcf119460564adf9ba95184b882169a207339de51cdd47a267733b40af57a99a268a5034ab90b7bfa98b83c09f36f86706663f04272a0db50ce3b51a3b42356132ce36e31e49e8e5961ca630a4d435285cd2bc2b749d6c42368592f7438dd69299c1ae92e02c9d269a901d9116debb78a7301f714b1089f9418d8778d31d3a453834c89d444f9ba2e105575f9348d2b5b139c0c1b99da54e0a7c76f5c9d887857b9ae6576ef199dbc022b71451f8dd95f0d3a10689043f6680ac26ced886651d127304118bedbd4529476082d05e9e41661f6c1f4900a9fb0fdbd6cd0500f82caf1cf6c939105466e236f942fff950ac5be20b362f14834a9907b79b4cebbfa3fd22ec3af183afd998751c40acddbcae639b424b2101fb0030531cd488af281f2258be0ec3112e70c62e69cb824773dc8eec0f3a4b443dfee5bfdf2d75be65f1894c9cf0cc9eac680860fbb6defaf9a05e9b640f43eba136355dacfd226dfe2c105f40fb7dd745ca73a42f19e35a0ad07c7ba852992c5227a7fb554e291c85fda4ecdefccfcad7bf75ae1ffee954f7838e353dc10f931405f0812d4e9939798d712aeb036cfaf06dab2a2f69d8e719be6f2c06a1a981784632e60002f8f41e8b19389b2ce419c4fe7fefdcd74209717e5dd8d08d0edc0585fe80a991fff6601cf1952e506e6beceac0dfc727ad89a236e1d998bc45c42dfb09a4cc1cf6c53ba7e1d065e765967ef0f142d43855bfc5aebf07a20bcef22e3c6cbbfbc742f5ebb86da2ccb9a8522d34871299dc126883e766803200b6414cd843f7404a78bf789d839554946d81d6f85085809dd4de581b0deb0d2e40abcbaa3efbb137b24488b56284bd3fa8b87fc4e7bf884ab0979433f670ae9f025d61ca9376fbd5d0a61eb4820815d96f2b8152745683d0cafe48a4c44706cf296d8a47acd5f024c4fdd0ba6c7b665c5192de1ffe84d4b2ca064cf79cfd7e658f36f998d88cc660643d25878098c6430185b00808dc4704905d5fcaeda8f9624d1444f68daf0518577c3155a9004adf0c683381adbab0d8fb66df1bb7f9c41ef0d8bf855c91629710fbbf5dc2aa890d4fa0332d6420ea2c4ae6db54dd3d71ce4a22dbe40d2051eab5a5848e0bebdfd233d8e1969c6c322a2129a9acdcc13b79a8b1ebca1f6968cec917d3976acacdc58deef99dd839067b88d9066ec97f3489060fd44b11e0baf98455c93364fd353a837b5a553c84cd8a882537b93ffcff40c68d1858cae842833e9c75acfecb9531ae98ff287d4d44688c42c3e895018261a628756108bddaf497014001278910e2077bb62d069db19d8c7654a9c3102d78ac89ad15328df95f5af3383761109aeea90be7f5e83322ace84fdb7291d4fc1160873c61e720bedbc93cfe06ad9611eda0fe948feec35b5dbeed9070c623547e99634b1e42c5c8178f7dac463174b576fa6a564f9d2260dcaab8cdd8ede78cc941c473af387abf9daa78f9dcc2b9432ea44535640a4b869f350b5fb1f37d2191d9090b9e4c101a0050a19aa527d6e118c2682dab3cd3ae7f685e933c7533cd42c31634051eb5ec74f391c23fba4b1e0439140b15b70722e212ed771bab2ad68faa5b27e9b37d800f6d226c5c39f731468b52c2dba36895a0e39ad276b1cdc3c550df69ff7d62e79b4496d6750c8f4f235c9aba34763bb34252d340dc509a1386d209aa23fc32d9390a7511c4392a25532e6d5b7361084d4dc71e9a4bbb773128299462af1350e0df1f43dc81da3cc606c00fae70957c3a2fdb839d618da233173d9946aa637e3e14f0cbcdd4599b4638d2ce4049a272e98c6bbe8d501beb0dffa7fc51222ebf209b81dd3b18796277bfe66b2c46d63c3182b9a990421f49cb3b36895f090ce5aaa6c09cc395db1f69c6dbd99196b3b2f8a5f7e44a5fc96e39e6d1d1a011ac1cb01d74cbf7ca71734e5a54cabccdb8358c107bfe9966068498894eabaa9d5433cd1cc3d8a5fdf7d20a0976c60effff79d90d8cd302824b03f3a63a967f7e3dd12d3800edc4ba509917d464963ef976674d9322cca3b32ed4fcdf09b0c770f9d5cad691553197667bb86edcfce437762e67e63bb24eaef991891cb6862a9aca1713934362565bb73d41b2dfbc13e3609ae5ca174ea98a55dfaa64a26322fcc4d554609f60cddb2f188d1c9f7eadd54510507ef6f3a14eeadff1fb49ed5bf9f175e14d2880a739f52f17d38be149cb44687ce3eb71150c7240a85c6d2919e452f6c85c4a95c04dbc85ca24fd9a24f07b39099a5f354f9c81785cf8e647da9430e584d8d7a31f1fd23aa2f8e37b9ef44840165794e52041d1546ae6bfb8f50db07280951787f2eb6fc2e73c3113d750644ad2db8fd422829ce19d522e4ad06d34428fcc382ad46844bebc14071e63a5fcd5db7fbbbe550ebb41022b57bbb3e5892bef6a5aa54a1150a70668c244d870db33f096f51b5444d919229f6fec5ba0b9297514dfd914df9c8dfb12a1bc7c1e6ce89edd7d063b68684d6ccbd26dc20540e925f83ec347420e7d5eed5de8796463b7eb503de2da46fdd7c17f301883f1e20114f3f3871a9a8e69287e316b4a9cd59c3de8591d55c8f22d25dc266bad50c22c7e3bfdc7ed01beca4b5b633a861eceb0b25ccf5066697c8807fef26345f8075aaa9b7e6e13568925983492e9330ae6f975fd52edc704fa2cf14b92b7d9d1ff9e8b23cf0e2519fa5690598a7ab94fd98f31e748e6cde6f52c6a9914f9743a1e500113479459bdfef3a4ba192b162bd2ca198efae9b92a645ed589f28a77b4e499a42f645fc3102d35900ef75c46083bc5e6fafa4c5380fcdfce5cf7aac2c57264f5c1e659f806f458bc05472d09e45dbf62baea97ddc4c95f9f3db78c94d606ca5d0e6c5c679754370d61650a57462511ce04ae84f26b8b2a96d1eb0394ab1b6654447a1bf060ec43e74924c221edd94e78870d6c3a0a6e31f80cd6b585c245a63f20e1e2d96116be716e6a1fdde8520f23b7f1914b47658224b6cbe160f755635e35e17ebf110ccc06e489eb1923785b40ff197645cc1073c8a65be8f91b4cc0aac4019c24c6a889e80ec1ea1dc07ed5dc0563d0a6c7095e732335b30190295e9256ff29d1941178395e3822ea6706b7fff22419964fe302e758866c04888c9d7dd46f28f7cc2bb0c4343d16a1b700ce0e0e9d53a3f539608b0d62b2b125b7098de0e06e2582916d60e0d9f1889776f7d94e69b4e770a4b91ae3640fe2cd67f8e8cfd171aca2aa39631231d2e5eb19906a8e377dc509e39398a9a691e7dacc037efeb363db750c81029ff6c5a92e1fbe1783ad634b7206ab5aed33b456b6e67965165d905319d945ec292f1024304d31475d23a6f946f11d12c36c83472e72d9b6ac97c7bbbda391acea42920a3a237362ab5a3ceab2f5dfd36173a3ad20b9f3e77739c3d79f0d4a9a55241ad885409aa72e1543512cd90c94717214188324c9bdc8ea7d6f10d9e74acfcab522571749109088d35f171c55d8700b41b7de76968cd8f556918acb9b52c12ec92217ea9b2bd9daa83974a2b49aecfe078942cf2668ed4c9ca5e3901f3aa8ab9c3281829a163af81df386f5908a8067051c5339fb613f57aae8f4c1025f38764683aa64df836c29b43c81efdebd48b27b088ab251d4cddba889fc918f6e450d8a5b0fc3b2b9268f6a7de3f5fb58c36c6d88596d5628317f27c79778e00ac80ed0267408abf0be482c0732d09f448f71f4649f28f8879972fdc902bfc5356b152f5437487372cdcd97cbccdd8e6a5cee555a3e6a6ccf259c9a165ad4986995cd57b580c1329a84007e62809015dc8fc9d87773d385a83eda5dfbd3258f3a4536256196049de9de800c9020d97b9ca98aef988c11ab859d0c22a04bd3ea0e636aa110a25248b3dfcc71bc571cf9005d7ee53cdaeb8136776673db4d37856429cd88a2d173e101ca63afced606d26a7b3c750a86a774cd6b3eac24cd1a17afad9c07574def28eaf8b86b07d24f644fa02fc159a2b01a653ba25ade63fcaba49c5589cf7350d33f44a9c69fe91dcfe954b6f986fd8a3cf6cb36ef5a7d116b84d825442f36e33d22e5133e99ae5136422dd6dc7783a5bc19d2036219a1c9944faa707d32d80fe544be71a2e9c809a878d625122f5eceedc4366b30dafd0c5737f44e8112ba9a1d38d116854f64e9e3f8632a29498c11893ed2f1dea201629aa0c0bb6f5c71394e48fc5ee75979a5ff9865ab5701bd86e1d083e8d324109c7a47948e5f177322f006f02603eb90b2d07506b9878171c456fc02ef5ddc82a60380e2af463fe7751b28db1540f53e58ff3981a2b33c43c9a4ba13ae03a3bd953b47c18070c5da8415b8680807bb08ef074a1e59fc134cf660e746b192602af138c37d9ca21f6bb1c54fc3e4ac52926a9f1e9a3949258d949ea0fb8519bdaaf8a876efb7991ca5a45f89ea1e226599f1e07d4cd7b8aad8b2f12e1066ad3a8fcc3edf224092fa3a7eec2067d75e96fa7bc7965bfbc3bce193ab5973bb9636b2b2c11fb117bd6bd9331cfe2fca6bbb0df4b0d52b9e9355047ba7d00c0e6ef51bcf90ca465d5cf6bd556b21e8ef240b74714c14d5eaf52d3a543018f51a30367be16778c6e2eebfc996ed91921f2074982c80afa46a18d5f36b5e1d772eea1a09e4d43e903aa97a654027988673904c0ce0473c0f8018b44bf895dcfe78f4c672fee664c0c593de653358427f7e68973d83715a6175051a61df62b495da0e5d116ca8ebba3acd1ea2b28ec08d52af4d2d9d63fb799c69b484530246ac6822044272f48dcc75bf37c5900ad7080c2a21afc4cfd02a209931394f9a3fc48874e72b6e5e1c71632efe0cb2f8c7e82868a35afb220d8d6c0efde366dded0cfef4476a4cf09677c53970b58605a2f91c66d5955ef64255056bb04f5e080b0f545051aae67ee18167f35e880b3863a0ef62830a3ffb5ef9320613545c2abf60b45fa8ffe94b8151b53cd2dab262d5779382cb556374adb0e1ec1f0e2d1d0c97149c1b4c47904e91dbad085b6758723cecc9880e80ffd9d94f4ce337d1cf71027c6927b3dc57b1022642d8fdefae91cd78b5a60534e7f315642bd546fe57acc5a088d8ee7c63e26d90e8fa7062852d69c66c93eb5ef00f5e760a5c806530983a243c902a1943a1c41ffa24595e31de5829e4e0d852870cfdce14e2331a29277dd9d8297dc53e72ca532edcf22efaef88fdd60f2d6dfe3583f55f33411a5c30434fcc62157a9c9b9573bcaa3a1a97b9d7184d336d58866ee8c4150a909d832b34a151e256aeec878efd10f0669382a5820c713077405f8d4a19d217b2356106182b77fabe415d9c7fd7f30a046e290629d89a6b28269f447ce294ae91dcdf531561b735960ed1b05b9fc45a17631611c6e91083c3bfb8f29fffc588ce194cf9211fc38e841c8259f03c1f41d654b29462807cbf9237debf5e561151d9368d284aed0a04c409fa72559229a4d41dea61f6217d9612665e1530534430e49515fbce1ed9d0c1c4ab54c66dfe57de12d85520d58190da06b20630b185014a2cf031bb6cad88e3986b552dffe4f6c34199cbcb5c25be5a90433c3602779b3a7e76914db4033c7ce60bdfa6218c0f3a700ce4307ff982d08ea6f017f3f6bcdf9c5843f03077352f4927afc5c92b6938e8d0ca29860ae5fed3701802213fe097a39cf2694c8c03f4719734d2c665e84fb85c72435c2e93be2e971694945775eaa771ee638b22a845bdcdc1b5bde079506dd4dae9603428c505eee7fe438c70bc17d14f2818d837120a4a78c9eba292cfae552316a23080bc28e0721e2c625302b315a5be0e4f5bbcd8228a254c92a00c23782cea78579ca64ffd3302aa9eb1647f6d141cfba1a16176120c68bccb062b231ad11e7f071bb27b53c5392b2c5966a4e678c7a5979567b88d4760c7315a122a8bf5b5d8e996a39bcad19ba928c3fb234e0d31204c66002465e2280876a6d966bf46b7fcf49aa4c36dd547e4d622eabd1973073aa240bf36374776db8e9e547f245b3719dd157725e0ae7e22b54745ca19dd5203b7255f3e75a8ffa7058cd3a913f2e04452992100b6132637c0c6226ffdf1267dd619679f3b08a056c66f73228e9ee5d9cd43ae33f2bf3e6be2f84d5e7406bc35e5580af92b83aacd43856d53eb7a9af5d57f9f8fe24816691d74bf96e37402627184f103c4a46dafe57b73fc6b7267f1172770b81d66ac5a605852de751257cee1a6f352d01c3c08860900703337ec28cb55dbec7eaa80b30a415853f53f3126cc4001e9bd632d4ac2503cc8d2d40a5617e3582b3329105cd5fd020104a2d8ca116ce9e83922eba4532cb0af4b951cf211c669910b72e9466d71b8cccafc700576c88d790638d5827f76c79310ee98a0ca83c84884b4a665e3174f3340d74258310b95ffd99d16f5c67873b558242385807ea2bba87e0c8e9e7174da8af5c0fa56fb438292a20dd956d4d6526f909e48d903a5641fb13e409124fac187e33ae059ef84cee309b82929555a7d42c7cbfd3b9ddb890fc5ab2b506c434bb4c238ad3fbc52ff888405b4c65e9c2a005cbdad6bd0bef7e5bfaa2c3cd3468a98deab588f90789e8dab342e0f7c7981280d88d8241304fee4db4e51e67c1c298e0b4fe892c636fcee706951299c6fcfa8b8952836b67ec9114b1a2961b12cea6a98d8f36ee412af1932025d0059270d5fde1c4f3af224281b18340c984c59c09aa3a961c675d84ad68631069849cd7e7263dcf48702d201cebe09df03dce05b345755422838d13d977c503b7d980cc7d6a90b8b710ce394d1e3a708da833f0c60ed927279160ac673a82ef5cea75a07c1d621b4ca1d6722f8b4e633b25e160a0bd225f6a56dd6f7394efacfd18eacfca6dfa7ac029e30bf5112828ab5a173b7113befbdf706d26c38782016546a805e5f088e9814116a831450cba784ecf2c2cb622e225019669be470cb590cc6b74f02a27d8ff52cde9c8bc92c99373b2204b755c7af87ee9c780aa0ecfe38f337f0cb4232690cbe29f0ee7bb8acd49a18f04dc94838555746275593ba93440789aa35dfb2bf2c42f1112070f936488e79816b3406bec46678509f50a76b1724540721aabc96154c42df53cb1ada75f6ade1e2927fea111e20c910d64220f1027e3e6ed5e1b81f3d385cc3d53324ca19dde42c261c712b2db78cf13c7af19ddfbc1acae4e65fc6fbbd5c07564da8acaa8a828621d52d9d1c233dbf22f980ea55ae3a810933bdfa1c0625b26a9a3d6b529c38ebbf0056954c1b77b2b8b78cb6b7df2309732ca4e49a43a26456fb92bcb1aeda3e9afeebe36d8183536b259aa68fd5ccde781b34fe590fe5e2acb3bdb22c9047ade99b003dba1a40078c382083669e942054026fcd791bb41dba57bba2934e5e59879fd7d3335e359c3005726495807b6f5e15fc0706515113cdf4a6a2a99b1296d23d35cef05a6a6563b9af20167e6e61e3232b93aeeedf510c0c6afce7d6903c287c2c39e5a8bad5a9918e05b86d0bab6ac37ac895db505e59527e7648e7b7fe55a8c1abfc4a2353dc096a583fb9889ff5c27e3ef5d42f531f468f560d4f4fb14b07945726b56c387020dec558d79974054b95d1fb1f6f754a7bb0db0e13a30de7921e916ac64273ac353a113b9e8caf98d0b72b4f411a1b7d970eeb7a7a6693fce54dd5fb865a70a1985810357fcb473dc6c2d1c92fc2c3c90ad714fd45b2f4849f1a6f01ef9c2fb67704f08269a73e9649c77d3506b599197addfe4718805f37ba70bf80ec3b2a8b65414cc34a0a4f187922bdc53816c26b0f409fd14160e6febb3d06854654e1702af392a89af791361b74bd9cac246928407f44437f0fe64cbd174789da107dc2b7b13ca9a17df3ec3bebc48e00db1aa119a7ae32263425efe7cfddbca374497df3bbdc03bb4386dbcc6d47a5574beceb14abaabb7e5b162d93d93f2bcf839590b5e8fa2631aba712058a628d344a00197d624775d958e1f870455946e1ef76bc401b08e5c9ccc0211c61d9888bd1d234d8ad330afc554b2aa02e2f02c9eae48f8792b841bf0708abd91ed658e131e474d3a11d5f616602983342aaaea2cf65c03147d296e0e373ca760ce23917863d7bb492af7062f180106c530a4caaa083908677c7bc37849a7b202907d278188ee50486d45ffa27dc76b13b57e7ac01f849dd6025fa4358006b07dbc370fc77519d0dce43be7feb50fa1ef9b42a96a0a82d49f8adeb7b231f444945b1b4c1192391594ace6a70374fe3793d2e0940c92f6ae1d0041d497f03293d2e6e3b1179e6b72d3124334717241d1045b8a034e38926701f887376921f23f04f9fc6a847885676cdda4cfabf12e7ecd3c7550b2f8b3b9e0b28344b72e1c02e89fe4e16ff884635b5d5ab0ca14a5b0cf031b319159f04e3de6078cb082b16e2a975d038117dba227191bff11c2a1339b7dc38384228bcd386566cb907c94b1674c675a6909132d2040af086c0f3876ee26a8977213b0afa99daad67f49ecefa4c2e918d2735bc5027a57111fd9e751a691d4fa7dab8ac2b6a32e65f5b29466d6e3e66192db0dddb0f81ae0eb955c6e7840dd4fd2c50b4b96241b9f3c246d83e92af2cd2c82ea9cdb2786062a0683ad05d036039cfbff82864cd710ae39af4ec328c1b59437a5a2452af4856e0e18f1442563deda8259396d54d9317a18b8170364302f132a57104dc6f1d7e8cfade588953ac0f2ae2bff6cc202f62dcbaf4f44bae79c36a5dc7e924229bd6c8e09f2dc05c6b7f10fd92d06b8f314d0603649aed2297489ed2462d493ced3852561e2974a6aaecbc75a491803d65c035a94969c218b566db30e3f201f75615f72a3556117bd62df9d63561af80df077c6d6d5b1862e9406c4d0399022ddbbcfb33e145d34f6da85e4eac579a8772ed655a2429ae550967021ffe47cbdf4de2fdb7d749136829ad6b7a4d658ea20b4cb468f61f81ca17b6f5780abb3f68f2cbe39b96983eae169a1a4b2c5c63126081a3666c98896fa0c98f43ab02979d30602699bebf58fe7d3b2e80d1a545c33de513038049dd9228536d4bad0da5f13f1ece314c278b46c76b76ff90fa667eedece20114b0965c5f9fb0c0f446e3868e3f4c9f7d8ceaedc0aa316887b99bdf5e23db580b6cd83d4d7fc8f5fb252e551de57d7052205f8f1c68648d36ce8af743916289680760c88e7ffff9c3d0b9622a2fb0abd42157eb01964a9bc219314f347ea1852e253b7b70c4f71d84b64e52a20c1f0523e652730777ce3e1fd89585e075c2cb19c099360cd9269f9e9d39a88bae1fb10ce1b1ce6902338ef488e412fd2774eaea9aee32b31a4e61b80f9db54634e88e8e248f162441c918bd1a87e8354627583df1c0d622d50cdd9721abc4afcc1731538acf17c4a481ee089b4348ed41fc9925eb08cbcad7f36da1a28c9f683ab0f03bfb1de862fb6d00d4b0ac31a904232b48df043832260c792569bd0d6d9b77049cc003d7aaf027ad041ffd2dbe241702509edbae7936ab5be8502201a45cbf82b6d1eb017170d37382ea906da64ad2c32fb7662e9a177c9135a1b73fbee69460e39b71a31f25d7e2a9067a6cf6f069c9c9d60d045703dff24792498f4fbdc8e7ae613d1779c4ad2940e6bf6171df81ea86b7d61b3f951eadfa9b9adfecc457d0c2e982645a2c2625d9c504ebc24f6955e62d1e36db987ad908dfa31564f9e345e3ee2ee14c1ea583417448769bf058bdf0a23a8c520b25c90ca31c93fcf334621f0b224a64553bbb23d709bd11d8718d53e48ad2e19b37dc7964e97d18ed2a530faab52c5d62757f4b094b5d787fab0f3c348bcc3644eb4883952cc8a6eca1c758ae197722a1cb952b4a647610b6fb149fde914b731808b455b0cc9f8b628b42a3068e6546be1e71483df443b8c6680ea8e3908236f7e770d27e2d166d60d7362b7ce78842eea41dca1dfd225a75d275f7d3550f6dc3e4fed63128db1d151d22d12787dd18a79b1bf0d9c991e4f447350177a2abec232d21c1c7d7c731675e0f1a5e4c1ab90f4dbd6c4ed49f08974142edd8cd8562284ff896017a5a168ef94a67ae0ae77109a3db2ad5f21148003c1590159877cb7bb7427fe030082b7a9da41e9fdb92200fbbd8b60316972d73108739dd4641f1c91db7f726adcea7a5eefdf834e131404a030819ba5508733f7eb57103eb93591b6bd1d55cb3922d7838fbd449cba8142c5758030e6220e66a01ea3015b7a9114e22e10b338b18d05121b42565920aa41935a0e952ac155db52e622c591805df19b50873b59b004282bb27bd5e8b7cce86f2bcc002b6916c3c214d2b7396ab7b81b385918a273e53ac7aa6c50f15b3a0331a9ed0378444262c675dfcd055d8e3fa8a2f2dd765b1f8691be4ab645bd6f28e7e404b90be3e2d08ab8c4a505f96a52108f70e5032a3c55293426167b26a156432f12c370759182313465b121bcd1a7dfe7700a8ccd924d636bd694f643a364ffc9e2e3dc520c0b648add99eff5514b668211149853d8db155f7ab829fc822e053140f7ae43c975ac364b536ce77283a3f789838ac7e30ba59fe3ddb317b84993d4a41e359a7651860d6314db30cf52b9cb62d50ad562175bae0fc45ceb6cc4a534ad82bc48bac2f21a1a1583f466306cf93d6a128dd0717f15c05b709cf180ea2942d35f395a775466c469d695901310f1c6b049fa27476e84446c31ff16497d463b61c9bf6255b036b88beb37a6004fc09ae8d87940ff25ce14ac4dedbe5a5cad5e4f3b398623003831f5e0841d80213e0d5c720a009ef29ccacbf044f6046e1f285301c4cc1bb2e0675ab8f7aa4468a016d6113587e5a871893006502ef47cdac8ce7151cca88ee6775f48e2b2c14e00860ce852edf952c6b2276d25f35b449b8ac74e2c164b04d55fd32bdc81000dcf4a1efcd46a67feafc21c4a65ee91f1510f19ce73136654ce8e6a291a6a494a430def41d26c2f9b411e2d6e19ff55ea87d585b7911a8512549babab02bb27908c488be06f40f6ea8fabad780ba6040deedc586c6fb7eba9272a794f48a4b47787f1e7776e9c06b3b18290d347618d48426825a9f175f6e9fcc81b3023640074a8286da4cdf9757bc43cf9299c7779880473f5af42ea1fe9c7b60075f7e8b8f6b84afe9afe87ccdc530349d648c05df0d321c969861042b3fb450c10d94788aa31604dda4c0942f0f7a65242d4839257e9c67621790d812e3d2e7acf6c400b0554c82f1be44ee86e9c5afdb1d27ae98334683269eb2138ed4a7ceac5b7bed4e5bb8f3e6fb6914c20b4f5dbd6f54769ef8267044d86f518fce1133cd462679166d2680f4960c5b7f0f6cebebec5eafaf470cfc624c7d50f221dd3f0bbbc65e503ed6dd38f66d8770a7c02a80d06299cd6ba9ae64a81a5290366671464d335c9e385c239fcf9bc5477a463193907ca63580c05ec5b66ede11fb960c1b39193dad468c82366e777c3254d6cd5ce7663d5e95399f2482e2f78fbeed3b873f6bc2826f4efba452458a3efc6acb11454dee0a3bd667e6f8d79e4bce073f9552e7f5cb7c7f0cf0a9c35bd3f6c8b29e676876fbe479fb0f600eebb259972b7a98a14948907ec680cbb83b333899e4ef937220e426a8d06c45313ad0c2a050196af6f4561d32ea71258e25c0af58de0d026314ff34a104249a62d03877f4411038a34fb553e1ba0ff1264461ec0392f7a9d8cbacd5caf8b802eee4e85778f7d565309c217a952d4df0014f7758ae1da76213e465fe56832f8578330ce7d7ca8c01098c28bd7ecde092e08b2ca54404d29ffa90182a8720ceb44685bf1d264c9e76ccee21a4466d034fe83fb4e0c552e34197bfca895ef538d48a1c7e607e0d8a6725e062cf9b5782814898352d7519a8192a2466defc36017c46c94f270df6ecbdbd3c709d5a62242029425528582561c9bb7859c065e29ab98e32c48d6d38988bbf085665542e2498b25ac981f8ec639fef98039eb3d56efb4c85ae38e63cbb9f087247667c4bec2c3da6308e87504383177aee2bbb42a80bff20edd7a39346ce39b0b533bcd2de0e38d089dbe89684d531069ed4a2b9d930d95047c7f1b2d01ef373f7fa0f2c57991d6959da62f33c25cbf08efe96aaa6d0748970cb525f5b5f0a0e1a782e439a9585c0b7fb906ba9d1c3869604a6cf551523476ccd94254bd8bbad474cec921d21bfffbcf914344a45a0d6cbc9f421cbea933f0e3ca134b52005fc6e4e116c12394aa79755a5c3f11fbd7576b3123d4cf59711875827802ca13cb0256e98155a4cdd29c2e6196d7cd3327986b383d5d32ac78263af7555eb6ece2776aa9f4a3dfd85333c649b50282348d6705ae06f450d0a828c8a05246152b7bc7f974d13415ce9071a0bab60df46b4dca67cd48e299b3b69a28e72bb6ff0742de163721f717051691400dd74a590d27b0a1f1037fa691cdd216fbaa216e7f26ffb6ad5dc421da12cda966bbdf81e7b5c50ca39b1e1bb407343f0529d70c0f94a6ebbe1a56ffbd3954400aeddb589ea1c2c821d49d746b77460fd73385efedb0acbba7649a3b8fd31c306bd5174f0e30d51c44e7a8595e5ed5543f766047a2c6937d5d4c5b9035effdbb7d0bec450b295beff576d1941305a0a2c84211e3db2e0d9160a190727c054edb03a977f6f261ee40c73c23c1dc4a21484779abccf6284cf5042ca78e48fcfe2e27d8bcebc8ec56dad43ac962830c1ffc438817695a45b5d46cb853f6be0acd0e84eb9125b699e6cdc285225beca032390897bea531c2cfaf2c6de78ccfcfaa6bf5c559ce52ab8fd771e0e3be48a7952d929bb08bf5e855e868d6868692794d1fbe47b070eb7e6c6fe48158a5729c614eb961f528204209aaa4dc4cc7e4852aa572183bae4ee94bff494b8cbbeaee3baecb3faca6403c055b92862ad5f035077e9f1fc4fe5f10c57d344f12c8b5e822acfa94fb5a57fba063fb527355a8e8c5824e259270d5b8dec85bfe31510d7221cd5d26d582fab63d29360f15eaa05b54c2843959a1d0f3cc73297064915612b49cc21cfc7c43ff54e685f3743f66c633ee0625338a470f94b199090cf341cc47a89f1de2122a758e4f0006ddc643b23763105d94ba08e994ad117f0c3c99f3885c4b43c97b90b6a0830a63a0c251e42f1493b3cb16997ca6401b2132e50b45194582b43d4a234d3222bbffd99ee6744499fc8e490704dc76ce8e6e753647f1471a7bd18d84c23f322b8e44fa8d3970355d948b861de51c80733223ac67cbf57f6e62c670db91bd0903a91e86667bb9f0dc9b2f65c8f85b350a3a8e8e34afcb9c15ad2fe40fbea0c83f09068d9c0fe6b05039bfdb9ea0649313f8826ca1115825ddde654ab75473c944bbc69a4f67a5d1fee02f560990671080c63162e07f284f1fba1680700794f074e3c1f429f7809f86625bbf2374ac86a7b0319d8234774b7fda77e9b17cce6e70c6b1510f742845b6b28404c5c7803e46b9aa602c0f245984426e736cf9551a683b9d3894e4843de4c93a6370c619f9e31c31ff33ae0e5521961d6dc7bb58f3d86f0b53a0df0ca397b9c3cee4f7e1aa099b0b5d07620148d832d8a3cb2b9bbd318498ccabe1193bd0f311caa4d337353d63a354412534bd968dec9ae0b676cfe9861c05f68932bf7e81f66271283a9e495de1469a78aea3fb52191755c2193dc3f16d07684617601ab54ca07b519b5ae801267783c91d324613ec3ca1a188a56799d4ff8de45c0dcffeea03e1c04b8e8c178d1b93f3552f54e66b74ad8aad944363b90725f5299f59e2ccd8c97d2f14b6670266fe12b706788521ec3aa620ab81c752f103bb61e6a2f21fea1d591937fd9fd87de4b16529e74b72f2b5b22ecf03847c3ec80878429446631a8853577a3465ee3832be38c7336f9c338e731066a3a7f4fe6d3607109e931968f9185d2dd9092634d4ca58974c538e6bf0c3c418c50571a03368be8a2c11325868c8226ba9ce1062a45e32e857c848d8d4fb2c74c42dce250d0e1424cc66420b36862b620007e2a7133d1c9cb357cd045ad502f471d5cf1cdafa6679327e6dc69c9456b0662f4d936ae8fc7e4ac952348e2f335394023d275d12e2b457eab68388acdceb5d261a64f7d3d2d6c81c58dcd44807314d49174c0d31eb2b84808cbe7644b7c5bec8c55cbce0cfb1c0aad2d5e7048e6192eb51994b1b29dfbc896831a3c5c0b3b6e11768cc37bc3265a6b91cdda9c4cdeafd2860778bf09dd9496c3482685ba67acf5f7a3ab8c57fdc8dc300d4f3aca0b52a87ce4e1388967ac986067728a3b8b714b11e039d0436d635785fcf6f7d150e182e9616b7e36e93132758d4691e131fc0dc9c82ee64dbc72770b377cb3a2126640be0c6719dd4f98d94743d12cb317570132316f031989d8276ead7c9a661b735f346dcdf1753539bb764e4d849c58a76c3f1792f645f4098dfbdd9e957b3d4874b7af1752c1bd91af35a5ceec0651e7ee5a04ae1684e0ecc308905a2688cfafaaf717c15f2f6af33f6414485313c60dad694a7290521ee4b6b5de181b6dea981782c003c667610da274d18c5cad9953a7fc31db935fb8b4afb3f17e60e351c99ee3023c395a3b1d60f97a4bec54073c02b36cb0774fe994cabfa7ff0ff2ded2f28c0807aaffd337b68fbae382944c9f20616b07072e48816e7048c0e2d9bf9026d57dc93a28798260db7efa76610036e35dd982a6f4c69ca5c3bce345f213003e6925302ac3c65d9591ddb47769c8c04642c4296b1e6402a1465886f13232cd4ea8a505c3493d4340e69474b492d52b2a1659084fa8da58989964c4783b7f36a8c60d04c9f60cff48a37b08810b61d5d5a5f942f4e560db2f2298edd3680e821f8d260dd98bf2631473129b81177d0e21380300b9f7900f8a20b4b65dbbdeffef038c4aef31a5485f0a90f0adf68bde37d7eee7d9fc4089c0d83b1c10b0518b18166f8b3c1a9f9cc610442c3b596aeedd0614046b738a2bb93b8b6b86f0802300e75ca5c7a6e7e0836ce10c18439676ba6d780e63f98eed39b719b437d1a83b7c116e8fea471b42c39eff8347cfcff8a8a52ed4882ae120ba5f08f0c8a657100d8964facb56a4534e3c8778f6b8e98e5a6f8f37a49cfe3b3f5e6312fa2497142b7ea48ad284c526e21277af7f2351bbc4e5522cd24955b47362ec393704bc0ba95a0907804e4cb7f1a77d0ebeb62f49b501ef3e6607a249ab5f047c8ac6aa4d4bd2b1d26c3043ee9806a2b17b9fe9b8181dc7a2d560676840b417882a2f98a6980b457a69966db8895ea9b35ff4583e03d045cb622551b9e7f448592fad07a17bd83ce9153f962a03a6a7d8891cd78286de339e7b4e5d7d51996e2f58b0e35371063b96430515e8babeb2d2c84c8930d1bb51a40ce4b7614434bbc042e8aea848a3188df4ce1e47d76ed7156b31c6676bdcc543349fcb9270a49cf70dfb07d88176c3a8b4564f2a64a58e42786e8604cb38e4e23d208d71b16c61dc4a2271bb3f5716ab5483ec4150bc66386f8753de55a5ebb0ea5b3a37a14d9d7a9df2768da394b424b67b01b79a3c6d1dd8be7b71df466be8bbd07b7ae74d225fe58f41e926a79dba7367256d76e4b8bda6927fc2d0ce937aeab15ef8c95631017e5ace32ba0eef4d3a8751af9172cdcbfe4029732a5a35105aad270347862bc09816c072526c9c99ab09d3b642aabf1f5cb54f851e23cf49d85a9f3f6520102cab16a8b76b69bc6576832e63c51f76b86b92302c1fcb3cf61f83873963a12bb082a32c6ba68fad8cd1576cb6ec6ca8546ed9e04fbe6033705e297ec53885c1e06c37153df6cce87a3dd656a72a24f5dde21b2a72e45b8956b6969eb3c7dc8426cae39339654e791c53ad03c33831a3a81f9a28e2524db9610cfb39f4983154da278e38948bf0905ce350f519d1a352e98fd0d27b2f98dff53671afbbd0d280565875dfbba26ee334855399e2a3c0afa630af77485d9319ee283623e224208ec0aa6f44fa95fc3352c1442f71b20262e6f50abb6cf2dbef65efac7e199b38748f3ade44a9ce34942c2c4419584356a50ef3293210d8590e56a3a467cc672c9246fee4e9a6aede03dfb497adaef0e2ef5c0f730b29d78d6578c6f6ebade4dfbb8d019ff71828abb66790441b674c2c7bb1c88db9776973549dd23ee2bbf0aa8a4c34c17ee654118ce947bd599ffa3e14606d882cf59ad7153554598de8f609739fc48c7df02767d99ef7fa4ff9d749070a5d569a0b06610f888c21e28158d8a06ff38a80ecf750bc478f82a0934d3c6f5ae4c89bc176739e8761c773585bf2115be294180fcdcb86e0b3100b557d7f30a1840dc2f6b25c333f11142c4812e93ee5ae853d4f2c1416dcc67aee88ee1c3ef224d9bc437ed0d131c6bf57b3efc4ea24edcbdaec547ceee553781261735ed9ce0a2d2cf5dcb9097416ad783ccbd215cdf034033fdf7239dd8bea94ca8ac88bea0b3c3c42f4a341cefaa64701fd30398864e77dd414c21ad1241af95edf624a6e060333a217b968fed08f1953a943294419a32f0ed1495288d6d46996ce615faeedc13055a04455edffe190265fd713050477eb886b3d95aa7fd8ae6a52b21a2f9702d53f9756ff67514c3c55d4b284e0b88114f46b5e58e5d175f384031dd987c2743346c1de0b66ab9a600f8a4003f944a6dfb016b41de8b873a8135c19e91c4d4867e051a5930e757988b6afaa06140d21870f5737aa39ba5635ff8b08e483b8602cd69f69d1fa981b61baba634b6d4d1a189e38911ce5468012756036def5f846720fa00684a78c1d532a5b191015374145075c5976adc4da5b22c1d1297634ee5a1d068017f313f59cb58d73dfe140de6d2b3225914810f6e7ff77222fbe390ce18440a3edbb3c6a10ef94dc512cf89abc2f1682a4d520f600f2b0fa623196f385f17494c2a6c6df78a7233f3c1519854d8b4264c9adc5c4fae72f9c178bbff5f9283cd27f01c5912e181152503681e7f359baa6c71eedb519024cc6e9fe8aa68657cf290f9ae07af5f9df03ff1ae468c4130a09b149c2523c7109e50133ce4b56912a50162fa57fceb6888fd647981b5a1ff0b5e01ef110bd5c963f9044660fe4f8e6fd268d640e76ee3c8a2b9e6b2990a291ea5cc8880f995c38940f62e837e35ff990593b417f532a25fc1c52d939a7cefd3cc60f2697c031cbd54f77f54ab7888ba522ee8e86a20240a87785a593da8d75a1a263378bbb15c7aba10c7c801fb26c9a7c3b6b24b9551a0dfbef98b58aefd77631832a1dd0bd0f9264879df17e6415e71f06f99d47cdbfd9b0b0488520835e68a858dbb1a0ac6f86e295e55d55f152c0f4f40e264615dae3a4e2b1b4db459bda4d3bcd53641785abec10f7fcad74ba16bea181be331869a750033258fba9a43dfe7d395015d42fee87a51c1af1e0057b6248f581b7e1b4830fa2b187277b076a123a3d2947b14f71c1c0bfd863399f2a3ceefc93ec2466bdcbaeb52048f0a05bfc3be4a387bf45c47af39f28984305c2f7b3f75b4cc290ac0bc95747b022b5ff607400c58d0b317b33a9717f31fc97777b4df41baf27e7a1b15b7a4ef9b100c5e6471c642bb6aac773647b1a9579af7d985bcf0e16793dcfd1d8c6d99e254e71abcf1995fd2512d5b56531c20451674d2c013d32a48118a87d688b58f64acbb4313137d8363bff5f8d8949b0b85f4cc519a912fdbe81a6643993039648119a8dd4dcce2183fa66189e1c45ef722b851c2c5c0003ab433caaf13800ff19eee0cffa03c90991f3746a56ca1e750af42c6a224f6e939341c28a4a116fd629283d27af669ade066872759b4e7b718895e7d416c32851f0022c6137f1bee465dd75fbe9965e8bfc9bee14e308eb2f205842126f886153ffd0859730fb3a19dff5cae97d85408bfdb6cb5f7dbe0f2aa76678bee50c183c2f8231a5fa30fc9fc1f3b168e50edbf525aca088b553993efc534d85f8b0a4f30718e9f3a849fc6180267eb835d9d07dfd8d1904c972e508e3f649c71202350fdcf73619642e21d09ca594502eab90a47a61545bfd84ee2ccdbedac284a69240a5fc482acac6515bd7ab7ce6b578899ac79e5341c0e650543eb53dadab9618f539f890149f8a4af46c9595e888ee565262886acaa6b151e4a358c8b84c51484ea94826207e83356f48af62e28add03cc4d5a0640b33d451a1ed1766d1e83cdce4cc38f9569123ce670fcf2d1565a6aa2b3443b756282fc9cc4a48e14fbcb6e4f4d30006d80d7cf1588203d54a9da13fb8a99871e73dde59318e4467508624014cb000abf503ee3201b39691c83c543c07d954443c3495f1e48a912ab9e7b2fdd3dd82a69ad14c5cc7992887122629a9466e2c97de7b4cd8e4f58cc79814f6ccaac1692e3751eab92872c4271e4d3060925c091d027f0efb4fa1d2106c58ccf1ebe043888d8fa8122ec6d3ea62886435698199191468bb558f8f148c45fc2535120e53dbccc02f95a4bf13ac3e0b1f8309ee6f39195530bdc15e3a0cb365349bf105a157e4865489936e8c1fc7b4c1f2bd7edbaa29e8de2bb9457212926c9306eda4b6b7c5ae2699488b930a3dc60907800b6a2d098c0db4b3591dad14399aa5b72ec50e005a9e434ba868c7e344a8f28c5314f8794386e362d791f9b0eb36305a008fb70500cca6c2f44cb52e71e46d04f6a5294d1321c95ca3a898a1050191ae04be00c91ff9cb99052e59894ae9877b77c2dbae737e54a7f733c13dae29148cc00bc84325518f9829368a4f64d68f0fd8e17abc1c4ef88ea2dc39e3ada876a364b763da5de120ba5c4c67ec813e9d0b5b673ff313d6e4478d34aab516c1e7b725c94cb521d6832d3abd2a794649897641fee5d7af190a49d3957491ae015abfdafa5a8c1e614aa1e8797c7f3a7b233a2e8557f4c7e894974fe8b0484bed8ec7701115be85e5042a8db845d22193128dcd460f7f7f01305b7726d7135093ea7eefcc3b40eb2949d3ff1fcef4a4e16509e3e106cbbcf35f5319339b2e6df24019e2ea6af42293c898d2a97705acb9b11b5853a83b981fd5fa91060ef918d1a179f1b50dad8bae47bd7d56a8f321a6ea414736bab8cd3252f22d09bd2982adc9ef2596acb150490962769df07584a4a1d52b4e8855c2c23561a28d26aade72183125525c088e54afee08f6438804a0fc3c09b19a2231f6d5db8f81cf8108fa51aebdb8b9b30eebfb33ba07ae70d6611173fca394c23698b63870ba2baa2ed5310514f6c4997dd0fbb1265871275e6a0584667635526bf1783e12ca860e1f1f23bfa39253761db91f23c0acb520b895e4673810f2ef53074e33e5720a6791b0ea38fcdfb26f8d8526d6d1ad05ff2c7b81b82db0a0f7f13c61e1fae191e3b9962b6d0fbca68dd2adddb9df817823a4aa37ae2add6ef206a0a4c411a8eb19fd97b3d2f6df2c4e2ab15203451f0b5dfd688f263c1a3713a7da2a5003d9d5c3acf288cbe54efe5f36a4defffdfc950baedd8487a4eb67f9a643a81add74abcc47182d9f09c1b854ea333bfc713f14bb84376d943b2438d18a7b5b2a4ef1e28d103872da033aa2d1b2dec0bd3100740348995a02938a0dc133c7d96400534656d5ecc9b8d2c26c5070e48f4324903f47e1a1b83d29620d96934c4f26bba98ebed8def114a0e4c97076cced9d43417dafa4109eb85209de3a84c5184ff0c5309b17349740259cbdfe63aceef62febfe20a0855893bdc3bb2ed0afdffd2a4dd2f50d7da930a105f5ffc3151a72a926c9e96486d1a12761c01cbf2466dbfd1ef9b8f86aafccb7223809c2e2d0a289c4615d2818ef74b3d49cc940e4c305ca74806d9298c705302e6164a378a2f72ad169ef74f9b1db9a9d180c393e4a3c90a61ba2f0e1d12609b8ad2eefa9d5b1a37edfc034c01ce4d3b6cb61d4dd025aa6147e6c487fd64592b4ffd56d5da8acef4a6ce40e40694378301132d026534a571f731c307886bfec877a9b1e5c17cbba7e823d85f91edc925c38d234a0ba823b36305f015cd09045fc3288e2ede9d5c25bb42506252525a7d9509ad314f80ee7ee2f6ffd6bdcf9ec5851a60b9c440679336e270c1653aa5b19fcc19a40878b34ac871d09a7b4977e487f2bf8bed033ee88cb0cb5d78a22e7a613dcf1a441588c047ec55e04eab82bef108c047a459d1e84038b2914b65224d009577d171cb89c1c1e551bfc36894797479f7f9a4bcd11d241bc3e83f9cfeb33cc1e74ca21bd9febc3226c198ddedf944dca03c91da5437c48542a6ca9719d3bafa4145b6c5bb52405fe52afd01b975af4218fd9d670aaf438bb3d27d5b18eb63c0c84399e3be0d6d61cb66b119634fcbf626c590ca843bf3b0e6a239c15c2487dd57576879c38c2c96292a8c633de451f8a2e9b317c303f4f1f73a31e11ba5819294207fb04f8c04be3ed7eede9f34a73830b82a257cb6679a4ec93c436ce98f507b3759af021a618b06d633169834a5c019b1ec85af5d84d039d88c1ad914cabb10ccf21dca798f09c4467680877837bd60c643c1781ec9d8654d9c28cc9e12ec808dee7111dc1bd6726fbbe4c3553c491eaa9b6882497ff48d46db5ed42292c27c7b651d02b7bf4a9abf60a091e558d9ba65888ffd21cea4eb5691fe1f66deb542b585dd2b7d82c5354343f24eb446d6d7dda7a45a4155d0fae2c5e2dc58f9e45272570b29c97f365f76f2ba02d87eb967626375cd2d6a516b94fa8299e7d0c6fe1722fc579153761ebbfdd84f56abfdc1f7f81142bcf75e833d726224a872bab408b80019378b3b6650f8d027e317dcd552ae33ab9d771fc066fef749419e7392800e8764fd5a39cb4c01169678294d476a38cb6a90f4e056280631c50bfadb343d5784b3146b03cb6ad6039d6aaf73f741ced5d70bcbfffc5c06d8ef94ca72b5163f5dddc1553a0fbcce71ae6b475f7e0fab8d44e3a0c649ba61c62ac7448f0d77fc7d646461d215ed8b5979099386043bd67f4a6c4a59559406fef21dcace0c669af17a5b806f96ebbba669cc20f4356825ae3db29203c24d56cba874e1fcebbe5e2cb7b7bd57ef28d9b948a95c724e27c7c94ac1e4d15965358ad938c404febc62722ecb9e679a2470d5febf3f55c1001a61efd4b01a881317ba7c8e8cbf6bb8f45cab11c61c65c0c77cc76427841231450e37473f8413d3909b216368b8bdfd173cc49a591f36ebc5b5a2eaeb69e8dfd0110d88a7368a76ee5a287fbaad60f55f65d8113251da8736cddb1d85ea0d1b40048e9d9ded9ef15df58fbf8006dd141dcb4f9aa181dea77c6a9f6e0bd912931a8ca111bb74c7894eafe3eacdb54c7258b7ec7077fe50b4af183f6db6c05d2688adb0cd2ab771b72a78033a6a3d2fdb7d89b7163b227938e7d9ff70dc197ab44bc4f19ea7691ebe113e069658b12f23ffecf18b37d73093b5039d4c12847a473a458ec99fb974341ee63e14db6d777563d016685ccdac9f23d15b47e836affcc594698701de3f71a9ebce037c6612f7f05c4d801bdac40dd85d69cc14bb12433eeb3fd177a51731e2598bd756ccc823283e2e101056dca17154bc6438ea1c459b9f61faa19531c170d304d1799012ea39a5b3e686bf0c50ccf09e4aff57eb9418afd9c841be7077478c5786f6dc7c78013f28129728382ad2ffa6b08474a86444adeee30121f52c7bc533f97abb4d6a923682172b615cac729f5bae64b21f6a71a77cf0ab34184fabc04a316858d105d5e18beaa912309f02b248e669b73566a6ce1d323edaad93b654f3ad808b59fd8afa69d14e121389292d7b1bb917d02ce0191aa1260aeecbad4370131ba904a66908e85f5714a426859808ff8b60394fe7e344db4b1a613f323ad8c76278da7ded9892d4657fc791f1e1617b416e7e2340853c99e537849587c7131a7a2e81ab31396195e86fb6117ad2cd858be96cf212a79b708e49d04da469d358b52975e05d35c0d6366c2228bd459763bf4218670da921e0340e25582a3146bd49fb799dc851c3f191388162885cffe67baf210179715cfc6bab7f8fea84704fc621bf9581de2ba8f610f266332f49dd1ab072960bceb38514918f814e1586f64051ef6ae9ffd059ac68cec374c35bd5b2b1ff9807242aba24b2b14f99d581730dcd2b8bdad8bf61bd4d5cef22637c02f22c993bc31c43d16cd1ced25b73600bd91f8eb44976bf44ef705c7e95586ba6134bbfa62a754d89eeb628a05121c67c71b9ee9bc3606405cd43c7290725c786da1099782eae4eee7b9950b97fece69c7e3421a87a796dcf00028ed5f448c9a522fbfe6cc82d39d7807d4e063da8859937d201e0ec5e07a2b823e0760c6499f0acaea278f50bd0986f0920e80afc39e3da37594f0909f152dda1f68df79ff16e947f9a2369d44e23ad7825c98f958c26518c16ad56dcf7aa619d6cd78551014ae30bb8f1837028a4b40c03aded30d54078a2bf0d6d99f24801e9951df79c2e80ff6cfc0b02851efc645af4e85a19a4ec505b484e3185bdee0c146a63f20e8282f0fc96869a66ecbf405675aaed60cdc962eb2fcc8743c15e846dbb5c3462a2c0edc94b1319c298bb3a8527c3c54cb74e9e387937c32ab7a14f5333d88651a9827a9a30a905d77935330c49ae281a16f4de0ba5367e3af042ee6f68b6418eeb5af6f571088d50ffff129899c86dce9dd0aa2e8ddb9dcc97a5ec439f13907b2c90628e184b84ebb109defae57cd6a6c75b9d2c67646bfb3c3911f0eeef3a76472a1661b5f8c8da34890575359817c563fe24a7a7bc64a05bda1b91b9b8a6796500cd2a846b33ccc5e49444f880e1fbc9e503017bdb81814b7c99b09a7efa94940b8478ed91648bfdb28d043b7672ad67d4c33b6f7214c8f0248630a39c2e274b846c68bce7804252d605faca1c444a061861c43d1420a9682c42d116a5febcbdf49a3aa17948471a9187a5c56587ca20c1f3fd12dbbb75161e421018f807159152a12631174b7dc663642e1a729820638f91e7624c3a4e9856a8dc7531ec51d8eab71961256b150b4b6da46dc7ca4850dbc86f20abc83241d9ea17ea8413650b941ce98d46fa5130b7b685fd25043f05b209a9eb548932a136efd5a9467e9bcd45eab5fbd29df6f27806d82cb53e775580dfa2a6127fc37692d34b52adf3a0631d1f8d32d25f8d8502bef7e05f1c0fa1e3704e11146130e0b28252c7bdfe418e6bc721d06a8ed2869524ccb0a9c1aeec1ddf886d9fefa943a0241a4ccf732f3566a6e9ee8f327b86074a52ded662c83e91b7f3678d3458b44ef0b86e447a76983cbb81d6ea66438bdbc0244e4817270dc35d114dd8d04301e86eaac981b4c1ad8b010b78efbd49d5a6acbd74068f471693a3ca082a51f100fbd36e86a4af710116015beee21f816a2adc214f674fa726e549a2ad26dbd56faf8e1516fa1d739b429356dd8fb6496dfa70af26c78b3cb2466ba421c901af7b5a950f03a2a9b71e5e0d5c889774f93160ffbf7c62acef94cbe9826555a4915c70650c6338d5112b0e68b8764ae1aeee9354cedcb1f67eea45ad77ea3420b394963ed712f0016a92ed4bc4935a4bcda2e3fd035999facde2ce73c4c40d84ffd70bb293312699b55d5bc5be0bec47ac020cd040ec0c9fcf3562def251a755a6fe9652907cfe66bf3362c71eb76f445032e19037cd5fac70565447b525db8f422bc4b530f5d6291a08555fca51dde6e11b8c4be0a53cab4c8f1bcabe6de0b8515b70860615753fe02dca0118975b82f8ab2f577d4dd3b7cee61c4395b6b4bd9124558ed477becd86fbe016da737fe43b7f19d28871822d2af4f0002f231329aac7a8150c17996274edc080f27e217fc5bbf80bdf39d39f7b35e63d91253214174a0c2837b6e8c8cbc2eb450b5f42e2045850c193c76c9987a79b501be8f49c94338fb0aa72abba9bc853463a678164b9e391a53ecd2ada8b16a7effc6b97b70a5dab730ca1ed5727adb78e3ef7f3275b32c4a618996e72fbca50560d6b428ff6db149bedc5b0726cf343afa99a684572a576d18e57d2b2043e312c4070ba54059a081a66749227f941e71cd07b384d0bc790e55e5d8634e9d7c616099f0af31be4c76e479529df35c41158f6fad9b31bf3656f4ba7840aa301edfb28078c5551457f9ca3db3d5d8b3f90eed3258b297ce93f7e337af1a123226120b60e0be48e5da2d4dd4d49812589cbeb1f59c395f7526f386fe670f001a328ea664d0f1c17324b1883f541a75052366997221ecd099eeaffede57b34e4f4c67cd202e654bdc4691f0189d38c83c77cd427b102a59c173e7809aa2d9cbb075a2cce80f19bfe9837881d6314d861ae717f391174bf71da9ec0e90a67d6182813bd970a82b3733d53d44f9b6d706a11f83eff080ac37d702293deff5256d5630278f6c7f602450d691a7e441d3a501afbf8b11e1be9e8a9e2a1b566c36ee2f3cd05cd863c565c33d9b2a76bb30e411eb76e15b466c7e0e1110f7cec4ff14f5e7ccd04a82a07e196ee572a41b16ca9d4a2cdfda9608d8777f3402f2c1ac8d8b56a4ed44d0557651915acb3ba4b7e0b2d4aebb592bd25ffed538ff1b85671cf56c08c6867dd5f24f499b4b65cf12d083b8a68d91732f626c479772eaadaf853ac044db26964772899406b82fdea1a814ede9efeda45891f4a93efa3cb7f8b00faa9deaf0fa5110f7d152a43ad62dc2ac9e547eb003828ccacddee0a842be4476168781c120458db7c0a3cf93d95d744adbdd153dccf616ef93b20a7252640cab4a51e7f927bbf6a225b3de4b8f94c3e56dfb0bb24e24518a1d0a78267b39db5bd231d4ca5868c805fe82c4ba482ce17c4bab31224823013acee2f9211bf3168c5c553f9c0bb3717033217892cb14641dcd10686643b82d52e70215e93731a698332ce4f323690bd256d613d7647aa115379c7998dea97dbad5501eed24664de47a9a098dfc10be70430637e8ada219a87033948bf9d3b2baf259107a90218cd264445869d9788331bb66cc47c36c04d1503f2c7160c60b8ba7a816d813c2726438d7b89aced72d8ff26b3585ae533a554c6909fbd85db71b7111d2425b770f28848049927354ac542f6b984f90fcdca59e472b04980f32b023b89ad81d3fca41b08db94617d8014ab7e234329fc302f1ccd3c986c0ea7c1095a9c46f6d9bf4200196b096d0cb9ca34dfdb759e3111b38e78923676a0bd6d86da44c222855027bc8286862c88f68da4febfaaa721fd9be3ed0cffd3e03fc760b7efc16b5e39ade8dc131ea35433b44013b2f20cac72e05f77814c1df7ea78ce451263909e0dd9c923c28cec84624d00fe3cb37fd332f873d1bff1833c51e656485aefd77b9dfd5c281103ee85ebb39542072c514d96e0521165ffe8d5a058b6d3f89d16dc0f471cd20014b9f7fee8a3056870a212da99e7d159b680cf744f0d9b67afbd201a28fe3ddd62af80f4d2f5ad1bb1fab4faddef63aa2a41b4e3c4f8632f24e9e4ebc72a0c227069a0ff68c9c7eff0e3c9079c7b51949b89a27ffb274ede05628d37e0cae45f32c692eb900b314d54a197f7ea8178a271026a714bc59464b2ece09391f86b750dd245a7c42e2b33a28f87fcea911bc9a7cfd2d4cca09b0a609b6ba797beaaa2a39ad87be3b5571373d9241537a0b163ddf3274f556d82186b0d275f111cdec852800dd6981ff637e138e485eda0b5e65d2998e2cdb9a5f4300ccd7f1751ec00bc412fa044ef55d15a37665d998481ba0260c8645a7e091b34c26d6a98a68d889a161d1a941b8a9a8e8f8d6e36bba9f914909847473eb02bc332427e78a6b17295f46b9162d61b2ef8c2ea7d58c6307cdaa3eb8aaf6406773c072c8e11979bdba7b8d305f221c9eb616bd7e720b349949e6318a48218404c753614a947fd9bd77de9b945e0c168fb3e88e9b52d73d7616192869ba3384985356ff6367ddac3a5bb7e58f4151b2b384f37c09c2bf5bc437f43ae0e704fadbd34d68ea0598156391d84f262b9a47a09d111c65ea9a21453dea209c3546cbc84d0719653cb729838c0cc4568ee55422d17279bdcf05446acbf3c09931cf50597cade7363cff796094302a233a9123cf723a076c6ab34c9ebeef2e4e5b964ab0983a5bcc6ab4c01278c33e08487194609a2adc09d4a9e982480fa5e0b9f806774f0295173a04de7583cc28dd870b5b712b1974d47f2722e47964e44fafe648e2e88d752e432de711d795fe2aee21385161a566d9fd519864be4e83032eb2f9e5e724d13d52e19fffe7f27d7026703dc23e0f4aa3d98b96651efa8d8ac998628cfd440207daa2061a2ffcd9948b29601409bd416c3b7a433a9bac104ccdfd8b316ff56fa72a67a743288c4ef1447c9f0bca30bd826f461b2d6a9161b9a6836455fed21709ca61069851f97580294890706c702f44883e2f556c0a7ddaed2274a22f994f540d49848aabea070eb5a375e705dde6e192e21c6616fca06cbb30d973d496b2f5316478df8c86428ad430fe61cc6641f9356ebf80c2cd4b6b468dbce8176d4ddcf6e9fa0806912954a9703019dca5aaeb214ce163bc5edc9d4c33a97c331005f22f7efa973d5412f83e80505e99db881b13b3eca63c1a01b4e3b386949d234f6f1683899f630453c41f7d4299677c74a5e6ef5d86af622e810617433506ed1e2cefc102adfa8ff6fdf292f77ad10fc302dbce8e0b35bddcf6dc806128f38d8c013ab0fdfb6e76f74f26e8e23614b58cb3f243af245517d5948af62ccf5b958c2804354def89c26f4412e709de32a91b7b027c82461ff53ecb1bb3904582d07b32048740ee15a5ef449469e1439d7f65483d8a674c20597483ff2ca7be73f96af12a1d65684ee241fc5a5bac78161b4f386f2697c93f93a54e080465759c8b0eadd9a0b8bb2f2d7665dcff297848873b5f94a3afa63863f21c15647d650de36c96ef54f1bebeeea61b35e7d204b7f32c4360a4f43f2d410042c1f1eb0e760e864d2eac7c4a7cc1e270a8019e890b7752ae5cf92fc9d81b610387f3e438ff1a3a4f1d17781340b314d02d4973a153d0701107d89689444dc52a7ebfbdc6badb98ee25dde9f2856cc4b6998d5b5b6315585da326483e6e7a42d1003c92cab9b0dec2bf4b093a6321e77f3da07c8e03ec87f487a13c4ec014ac15d1e26e9734b7dae94e488f4040fd75cbda3c275d3899f88ab61d5c4c4ecf735a65a0bd1631f9a6c68b9984b1d8d9fb1623e3ff0888d09f4ea72caceb48180893f06805b97e41fefce676a4292a9dfeee262e6133ca21b47e1b527c734d9067e596b919903cf022b3b7e0ebb1a868996c95daf013cc34d9732eaee78a665314a94dca09de081a9037f69e963d0d12fdc4629bc5c89ebdceec5d826372a63962039451b23647d661de053732cc38c059872273e14a19fa5862231993d188cb6ac3a9a9d36100479685112c25e8db615ff46e10e9e4e6679f4bb2c5e21f7f7ad069bf7a82f6088118c2c999031721617e20c1bcc089c9f2bb832f47e4b3b9cef29508f1913b28316c8843438ba224265be0806933f5cc883c6f92572b2998f1b62b021392f018254023dd75a56bad836c00a2f1a82cf653aec4a1d2d685eb3a5ee0026dd56e8cf77451a31a77069e06e02707e1fe1c181fd1e7b41a287d4d524e151182d18423fe262e74af8307b0816c8b7398e46435b7551fbdb2cadac22911f8edd2e6516b5fa7c6ba9c3eb789a8cb3bd47e0e2c9feebfe2be9adfe2c057c28491b902a822495c0ebb8824b749afa3e16b85c439df8cd0ad7f3d24bad22c63ccfffd888c501d2d9028ee12a27fa374c7a433660fe51118f90775c465c1cd581e44aa3f2dde6b9b49421bdb72280bc99d2c82e1e22e312bdb3408d32150c9780ebe4b9ca08933d688ea783e1d4ab3b621ffa01ff151748f5149c99d37292297c765404f667009c2b33040127a48f235528bc1e73e439e317e4eb4e52a64214fc46e3e11a844a1fb0d69145125420c544fcf231cb6b985681857918fbf6508249d9024a29746e8a66f8a96c35677d561f9134a0f22dc72ab9eae2d03ec26ad72023bc08533e338087f7bbe6955e6c872cf0c88a6596fb69901862707c2720be29690f41516ac58613db39bf26807ff42a7e21bcad424ad232ce1af48a975dd96d6ef34b991ab4cccba2fb634e8a5e1a257029850d4d3bbc1cd615da3c3690c1746b5d0ac72b0a58cb6a4a9aa37e09755bf37967833daadf8eef109e0c9155062cb8a476881f2fdd1debe727289d20fdae825e608bae4069bfd1bc6b8b203d7eec863af62c93788fc9bfded1ba8766391e414f480cfed0c04886791a50c11b68a252d7bf4c617863a0af909cadec337c1bb2028b3e90c6bd673704c240f0f07812538926badde38bac02c3fc4295ac6b1fe64d1ffe98aada73fb2ff82b54f28dbc76f71ce7f943b7648713e0207b918df0d976a704f88f53aa19427de8aefd1a70e777037afc22d5692b5d6cbf130faa8efc2ceca190fef2f2a18d914a0270ca28a107e00715e3b0d4306749cad93827b7d66e812762ec2cd815cf8f4150d98a7df38f25a126427db0393e129771f890b8bed0ad17348af5a200851a28b5effe01941b807d2f1375ea4631a844995e55ec19424878732bc109a3ce95435207c88591989bae68fba6aa13019b5ef078fb6a1ec9a64d6c1b82a04974924fa52146e5417edd5dca346b1aaa643077b93fcbb90cc7735608f2ef1fc6b5d422003815d092d2e4998851745f12d557b52807157b973f86581ab0a990440d3a4b1bfe2d63bdb3213eef1084aae63cd15b172be1126265204ce48fdaf8c25d92e55a35c49ba9729f76ad383629a2ea0d5b2d98154734aa5b7ded33ca4832ea7aba54bbc8323123eebd2d33d8342c028423f0e55725d0a213aa2b5e6c421c807b399d1e42b35086e37707d7cee758352fd1e986bf263b28e286896d030c474a404c20024d9af499b64c6bf8f0f0f8f766421a37b85470446330a563dff8cdbbdb2af39e8f6baf12704a784928bf2e7539a09a311bc776c6c17e044af4727062933ac7b6636076d1b8465a06c20a657ae9937a7a97b53254c6de2b176d8625de93969e7b7e28e5f294d005962e4d687cc03dcd4b28497ad80d87bec56be482c4bd4be3394edfe82d0616868cc7ea5ea4e4d02536d168e2169dadf5a74982070fb08cd104f2caf17c1cd37180b2ce63b354fb5aafd13df2dfdd572b771c36918b8fcdb2474cfa143c6edcd4195f1323dd4b0087646368b0ca04a81bf7dae726e452e2cbccfc62537d238c8221d221a796aaa1b338d3d505f6e70ce06197ca40750243b93f9184ef51621515e47d651a7d43735246133a8a8d1a5030df9c3e1f80eaacc25a1cd2dda6dd0874e2f942299c3782d3778177ac38789b20c78b7f5f6001780762f02ed5402edc2f873a50c62b844be5d86f25f851ecec73bb2297ec1a825420079bf0cb2b0dff4c5b9bcffbbe09897e1dbda396ad939eff7605de49cfcff18abcd79ed9dbd86acbdc368892901e450815950949e3cb674b7906a4919d4201a5d87947ca2e648d6234568497a2d1128860499efd5abfcc322ed6f51686395cfbbb6f9689bdc87fd457e05d5022521eb98f0482919533375930eadcc3323cd8c1b5c03c61ae4060dfc96d509ab296cbf77020268d2876d59de03302b9797375d5513489b8e2b8cb0672d48bfb2efca9e022e7e653d131a76709f1f47f96aeb4ac5ba5dd6005d961bb848b5066b5c86a214e209957cccfec4c2f1c2f376dbd76cc46ca17414db53b5a03ba079b8b1d32e60d0328d39d01f3147ff16eb388514aa527757eeda699a09f1cabe0e64fae6240dfab6778f4292261bc2142e866eaa44e6096a5489b53a9da98366c6d618859d00fc06d40c50cb4db102a6ffa9a107536a92c08596268da556fedbdb48d951e748b334382d90a0ee5201b673e466d594cfcef7f4ce61bc27c38e0b0d88314ed99346d2026b0971f037edb8440c1a3f9664ff718717c2423780cc4ee842f75032dbab1be11376392e5441cd0679320846a66baa914e3c3c8fee9cb7e46bb603fb7c700c96699c699227dd5311fd46844d49e670e19a36c33d76877059d46e5068c05d4053b99ba77497752ef5b0b3f227963a511183206d661cae5da24b6d25bb509153be141e398e30d861e7fc302d9c18a7fd5fb29ea2d4b156e280059006ebc6a3144d492253727fa0f4cb082cbb9d2fd02c7b0aecb39424ca9a9ce10da7197352ee6b7daa9408a4ee5f1d82f0385fc5da37143cb1815c28fea882c0ef00d5a4074f34491c0423b8968775ff5c43fffa03235e43de0e2d2a855ef36fcc1f5306647a8a6dff523d0ac2e7ba03bf9b9ad761f260d51abe38fbb1490bcc37ca62e4c9a11ba76f2f743fc56eaa10082acd4357186e0c2f1b92beb3b6c75f19b8bd5e6d0425fd05c30cc148df872eacc77dc9bb95528ad3fd90484d096ddc113fe5490b65e50ea4a97f9bf78ea7f2ec9e7a560ab400330d7c33f7f815cca73aace8514711f02ce7b04b2248f2708614a6699db99bb8f59cab82869707eeb1933e5e91f4f9899f779157f05b2bbfbb092ed1e6b9bcffbaeb43c2da91d1194bde855298690016703b203320503fe74e8715977f6570957034b340f9c6b59498180886588219bff4e44521bab5b2c01c03032c17dad3cade0fa40d8c37339f4be75d041ff2a88f59d63cb07e67a9a8c581c47d0cedf1706333df9f3ecd4bb8e4d4a5143673167378839d16cc52d4dbd9da2dc34a766aa743a250e2a4f2e2ca5fce92631b179559a56de77b69d2d131dbb7e15ea44610e240863c7f53271e37287a57d3724ef5fce5148f5efc2884fbf591604dcc1215909634831b6d085a44d9b2d01e7c879b925c4a07644d4df043d1ff70cb7dfe6aa66f9aff2eeacb8d52d71b902f5f4a29681069c9c3a16bc33aa2dfd48b08f82bda8909ecc16e597c6a7dbc8fd4cba4a97a72d4f9fb0e96cb36d355c1ece2706296eaf92bd0cfa919f0dc31b2ddd53e7f22476978caef66c9efa1c8074b75f93aca9f4ef73483cc84c610e5e848297c76373eedf2a97f0ee193b7b5fa9470eb76ffecd859fefa4f49d87ae2258ebd71f19dfdc07c892a3eaf9e1f98b685bca29cd77bab86b9a536fffd33655b38abe8d2afec03ac75cbbd7c20eccedfba4238101fdf2fde95563be1e28795269d02cc066c184f325a3a4cb3ad653edb834e2ca2db5bd89e4ac481dd194d0bde4706bb427f6607b1eff5044df8b60786884950af57b3f599e5aa2885c3ccf7a9e596bc6381aeef0eee62308f4b32cf59758d21a9d37b01b77711ada5f08f44dada998c2c02db9f35848eeac185c50deaa912a8eb9e39c025afe17125aa6d04e9b0a05e0aac5dc95e820b5516c34b6d01af4a8b6955456f9983f1836bf88f5e95105fede8be45569e5475009db7a616a30edb134b76ca4f2eaef1d9ba1d7bf174c747f83a171a712abc4e61c10dd769fda063962b2f5b518f03618dbf234e8cc4aacb0280716a868c9e6f19001bf08847c7db95ef061e0c950f80ff2443493a6dde50034b259c47a9cd81926e43a7a8c34d985699d5263a2e44cf68a38180695fadb22ca68e9a819fd53e1aee30b25b12d20d080befc4b3fdee486a2ccabf940dc69d1b0318b0464007039eccd5b485ea5b7bfa33a70f023b4406394d321a0173e3181a092170e58fc71bb3f982a9d4fadcda4c4c17391960a0f767e35e06a1078bdee792a46f6f0aaeb5692ab11068df48594346d483ed06b90bb716be587e0271714d6cac82d2fe0a93739f1b74de4f267ec28c5d3e95b994d328d7281da0ec1317336758bdec73c53c6d937b6f6dbf7924381a4eefc8e9c248a7e1209ca8e793075e3efef871896dc4b17d8662cc8d605ce8b75096a8484be0f27bc61ff2d85f5358690f1ed8a04a3a6f86e1914e4b74aa0028ae0963c077dcb1560c388d05303e560f48b19fac45d149c6c16b003f9442eeff9df4f5c065b915edcd3af0f519cc6ceba3f1ee9847fbdc66f92c24249b65a706240357761b734caf6f23fbc7daa84f4dbb8b115aea6a309b4b403b2a56d09af454d25727dfe004fe7295588ba67a879f39462dd4c0c8d509b3abd31b98cc4c3e1d838ef6829e36857f9bf426fbae53c6e349b09ffc9af1f24fd8d4be5ddb33bfc3ce6057e1cf51c5507e1cd95801dcd45781c32094901f99048d21f989573ef4c7abf05ea6a53541b7dc9730bfa27a89082d4cad6cbc792c7d0b584abc4e892e551c8103c868e020d5e846ee89944c2337dd16da49d2fc02ab5626e1c59ec42164667a0d1deccc6f8b326255b79432ccdad746b7cd60667d8204226cc7ddecc7eef99ffba791d35bb426b1a9845677794d2c82a75a368f90d1469596342fba43fba041bc8d15afccaeb8b1ecfea92c18604be902c36be75acd982727fee99ce6848c31bca4823bbf873fd44d42f10af3c4ba42d98f7892940629509b383ce2e2df74b6c1d36426d1d4e39be1a1978e3970dd8c69d0dd040f70f2a1ced44c5523e51eebc63a412a7d9c2ad2300d5decce155c835942847b5fda875de539a7edca53bac591646402698af179045a4aaf746cab75da5ad779b6ea1679b42cacf6a2d583f2a571d1fc2713fc491a2e07e7f27721be26c15db69c69787933bfaa1cc84f298578dd2c4feb5d85706c93ef9d7f7737091d90d85e77492084536cf8f7d2cd22864eb8106b86f95eb7b43738cfc195cce4aa8c09746f804a08b920902d0fa2625c0c51f9fd35acf702528709b95125323abc5a75ffcaa6ddbb4c398174d625b69c1ecf3a7669af6faa8118755b0080e44cb33f1d5221bb13a46a45d330f0e6cf44a98bb0c285fa0d64f05211c84013f0e42d9accf136b64837e73fa594c4812d9fa29d9ffe616733688a564cdcdfbd69f8482270e58680ac0f17322c77d0fc8c5ec5d41d7614465c3362d2c27aa43b3f508fd39058b6c3820533bfc3969308993d0462d82d1362d32af2bef03d49e7405ddedfd2331d8d9b39102b7d4a31ec3ee3e0f8a24799d35c00c35ce2b88e1a57d0983c47718559601b28ae56da7a1b77c83b3a19eca3dd4fd6ff50f81113c72444c37bacb08788ea88a308d9cd1e04cefe55978d4e2d29f36a1b96fb97df94aea4863ba079e3f25b8ed576690262eb76f4facc7220c9a8700cac7def5c0571a5d2561937355955db1c0387e71ac88f6d4e64faf2d7b735eda16da8b801317b05d121eebf58f2cd1c80d0d6de898ca2bf12ce1572b127af7f1a7a035b6bf471620e14b17d5143a7417d9872255b633b04ff0ecf4886637d601901cf83de945bb2202b3e3914412096e8289c8a4cb7aabeef0d34bee4b08d2225d8a3950f4fe62c207cfc190a2c0b53f48832d3ddcead378b9ec0067ddb53e0bb950f46c9ea7885d64a096b863a7fd155da990fed87803dfb6488a5ebf5046f2255c5fba5004016291c7d4007c63924f1d27f17fe523cb14d0bdc305d6327875e6a8d12b79f4caf41842153b5e6c9d7cc83515db41688530ce3f50b40b587059aea3c7025a63ec4271a09aa6e26a80e7c4d890f667ede972b5ed2258851551e735bb69b814313090d6d047f440c981e418e77e7a82bfa25a3ecf7210cef6b027414b858e95b2614a3c89f55841d0d941108b645a3244c137aeedcf7773a5edc23e7b35122cafa0e0f483b9d57fe5cd2a4e1e24eebc3fdf09c183910df6fed0dbc5f37045b588de4279d9118bb19a52b73e965f1cf882abf1bcd2eb126b05f213326193b7f6cf87b20f6686f6ce7f3306bdeb64f2022b1b47db67afe95eaa2b7d286eb759ace3d3fa77eac4735966476239c86083223980c7565df5b2aa4021676e061da05155becc7c205a9bad8c5ba1302454e214f4d047b036d8d67f820b3497cc5deb4a3d027f55805a3c69406f61dc2734a90a889d652d8cc3c6f9b6e483e79b0aa1f9b31e2ffab7f655bc2f958a3e94397dbdbcd36a9092b19ca9e5fe7502a140d4b64b61f2efcd606bfecd54a386de335a792767e9955a211e2c54d19a249d82c3251f2258b275f0586fd85cd8c9d618aa370e3a8fcdae5313727b7e35ddd9eee06aac3eec345d75513669fe4977fab3ff97f9d03f232877acb5fdd3d33cde29c7eef325d6dca563fa4e1bdfd53311b3eb24d710726a8427820fe47f8ca7b861fd1589d8d0798b65a69542e28dc2dbd75fd55f3fc1be67a65a2ac1488d48c3a6cbf64ed02d9195153be05d524453f7dcb5c51233bc0538456839488ff9f8b5fc3091eaa443e2769ea14edefe582e8060d379565f16e9b25d3bbec544a80c3d2f29101ea8f4db452c5c6056d6f9eb93a5034e2726bef1e4690898329b96f5f9af91719ce6748740609934621bcbd89ed038a7ffa78eb81e05494b3f8aa8edd24e508e1074d47874fdbef53b68fcfd8de12ab6748ea5a0a722f2df192ecf6cff80305f0f97714e204c83b1c1ba3db14af63d08443cd7fbbfd5033cb850985a215bd2327809ff1c51847fd528c1fd484d2df3b1528da6a0240dd8a098e143b31c08d463f1fcf6ac25021de4cd56775f6aec00c798a67da7d7eba4344841184b5015dc2b2e7a5bd9ffd959ad2a49c4c469e20a16708d1b793e56d68b4ce63f9aef08f5e5976592ed235a90189fe990dd3991486aa8510534891f14af50e5a6b2bc2b871f614960fa7255c0851c5bd2b7d025829597b8fd433fcbf5b996aa7341834a9d2b46575591b6d0adf185f7dd30b8d0af31fa45ea8b12f15d3522b16fa4b3dc6060a95f76101df460e5fd1051dc44a0493b8e4180fa050761511c105d1209c3d7f05ab6913d09d76a89f255b45ac8fdaa292baf032b7384ccee2ede5a811c35eb17394f1ba31db581f9c78bb99391b260b2894357a4c3d426ef229bbbd3cea4d152650bbf4927be6c590ebe10ce4d92b305e914523630124f953291b9a08cd6d5c2fe2c3f897e60ca038d7c8792982a3fec980cdfc792cbae142feb556f1151ca1b3774a0b068c2715e0a22f49885cbd3b553b178fa9f30f598037068d54391e8867628249ef96ce2f6d1c1d6de5a9d2d5bf599f884bc5e91a831ff819a9b41256f687b39586ee9aed7b6319c184409bcbba5336fd9b69b2518309affa16a4dae200e1c928913c0c4a8d7d0e0b6ac459c45e3712370a1a399f5e33ee08b6396e2f9962678e1af7da141a216fc717351a4309b4d643778ca081e8c7d97399a4d3e3ea5651edcc3ecda594c57c86d4e9c272578b002924bfe63caf8f3f16941030d770e6ffa100ddfea56fbc1ad7bcf95378b728b37d6579e49718a9667fa8d62bda2b5c9b9c0e08a82cc29865498a2259c14952c0a949fdc9cffffbb9d5f6d1707ef555925f1518141fe22e44728758e2cf9cf393c6d29e64d1af0401307a0912d6be6720dab8b8a64c828132f39e6cb9e1db8bb20790f50863e77787c2d1d4ce8f8f040d79016b9a8080cf9104d043b693f874c4ec33d51c0d517eee93a97f425d4640b1ed55672e98908ce91acdaedb22424e68ee13cffebf6361e85549240de64e5b0aaea7a3dfdce278eff7b11c47af9e3b117120730ea76a63901108f4d6bddf60612806a168e40d1bb99b781fb269e4f95ff938c2b46164a3b812768e783a81ddd954336726909d594238692b74b731106b72d2c39bf3b3f628378bdd699dabc6fd9950c2dc2a8f3c7bab316143e58fc4f0b33262749430fb5c95e4230857ea6d79327ec51196e9baa3759131f90693e5ce84b30975d01818ea2239124ee7a4263634f2a08415ee99b93205f79bb984bf274444f08242108c6a7504b28efba80d5f086ae253ec1257a80b512cde31540e47a4b7ce8047a04d950001a5907c1e6f3a050aac03a16d0ac575e73e2b7668ebcd7c8586fdeaf310e0fea30265353a1fee88959e6536124daa6a6f2b73ba7b2c8a0d6b14293469e8001906dfdba69170395834fb66705228c4c0a79567c3b5fce4f40308b37055dbe3d3fdea8a8db51bb49b814dce743dbc70c2bbd1d2b59f7b5716009cdf5f0ec7564a94902bd0e8d4e001002d550bf7df0b82ab41fa91a3cfb0d08afd4058444c80df5141d6b7a0e17649cbe73e0434211f732c30b1b830b73419172456420ed25f06affb0a0a7c10ee4895ba255ece894264d374bd6e3a2ca638a292e76d59794334fe394c6a73bd208a9e5e418139e8b3bb47eded084e7d12af4b201a73eb762e7e8fce750cc4c3b2ba28a6b2dcebbfedffc8dc0bb0e41be0b435e0970a61b95c92b71860706a3e44d15fadca91c64f09e9f8054f5ce0f0341b308241e2031faf33d13966c0cabe7fd4697830f412cec81f6631cd922c8722384ce15582243a8647ee730ce7781677eeae58b4690f72066727bb15a7541725fee7dfdab0914850a52089860877c56ef54366e6f5ea2fb4e4a8f761e8fe33153172993c5c6ed6d0184137070cb25dd47b9485e04107f8609433d19e98202659b6b01cca09cf0ef13d546281becd9ba8d978182c0774391cfa1867fb7d88a75702adfa2ca3578ea5b1a2fa2536cc63c0de5b5cf6595f44f9a1d1b63ba28032eac45b47a0d16d9d6866610ef1bac290d25930150f37e92d9300e710a7a15ab6c0d4e3e0d6d8960d0bde838d96a686fe971550d2d1193047d0420c64299e44eca8bdfde2ed1deef52888cb4881536cdd1ebe584160b6aa07c182d068045a00fa20ace639f18bed081d3a361fd2d1f0bd0bdf5e63e87558d95c99f2b1e6d5360be0761a9099306eab68618e059cd8b97f0aecd425db53b9fa15070ff2885e23a6359790d4de4af3740d71682298c8e79f061126be436f41d592c2f2129ffba358142d409fe36a7636c987638e0fce4ada63927ecaeda105ea1e73458a1a64b16b089d7018b32f98296233c8a19be7763b9fa7b1a1b47265af9037160aa6e479e37354570ca10dee7cca360baf9e0f22aa4b17826c1cf52c73f48c4c0fc9d572a1b65bc8886dc9bbc00254068c490157c048d6e2de38fd31613a270f30eee735e27d2a7b75431c7a1a8c2ef1be61c6d501b250c60d1d2eebaaa0bf73bda1745ae59520efe380c242dc396b78f5c446be6c2e0278c1e51837822541f42c10082b0da53695e16303551cac75dd32060757edc8cccbf31d0c8b5f827fcf3f874ed1b90e82a5e67cbb424ce4c95da8d09009912a87c74da3a17af19065b80cadd6e8d571bfb04380deccfb3e53fc09ffb62dd2922551b20729940812cf04a9a520675d3baa8d2e073ac4ff3afabb0b8c64b6f93e97ea6c3c8d58bc228f9fb2e6fb8d52bc17018b9baa98be0460951523742345a2e181221ec2ba9e4f517afef11bcc7b1d2434d7dbac0efc3bc0bc9b1134dfd635ef63d66f02b8a569d3069102a32294d8910710bc5fca03dda018bc1dd90b8f5fb4714cd5299db7b0e68a84ac462e68e0b7de9ddc033f2d13636643d0a08aa46df0e400c523ffe82193a40c1beec75cd8e2181118dc661ff274387c41f15cfee90e7eca5bc050e17c14a08f737809d8e041812d4b40092f406081f30ab112b2006c02031d2588af25c7679f4faa596ed615fb96dbccb3549774be10fe68bfc89bceb95d80cf473bf6c71fed72b4302d8d62f396df3e7c058b2e38ba672cb5e96b38a930e35bb5577d2f0e8d3657a7cc71554c2e8c777d5a1938eda69445193e5887fa805262f3fa47fa0580f7a761af37776f871c011c0a5f3db280e3e9b027730fb656b65e8ace2430cfea1766fe254424d459b2da1d171cabcee442c65a19f8963b8f72bba95590a3adb236055983fe6d109056a0e09ca4d332ae8942b8d4d662443c35173efa9a696f9b5059aa8f40147b3e5fe4905976a62073c637f920f479998cfe6119542928479bc2de895c97e963bf8f4b7f11bad9b97c75ee67daedd00dd219b67630cc5ead73a7771e25f97103ac191bbe28b4b66db5e9f7be1d2cb6194321461d21de8492f4f3c0f50a6b136df336f72ede9bb2a3a1d8f7eddc5ce103118433673e37e0c91625266ad2c6fb7f8a634a4de72c4fec3156aca9538f7414073ebbd48279cd4b6b55793e43516732dd52a09505ad5f9540579095f3af37ade19c691bde5c291f2656e6168df8aa6b0445bd5f3153f9d5370ca048ad8194db2a15ccf221eedd236e58ef39e69b1a83eeadd2f9980b439df7cb06ca5305d2b2b327add30a0e3eef62be7ff4180302694b04398da28c4c07ccb398c5ec0fff2a479b8cc6b24bf3ed613dc7e680ea72a6a2ad30f9fa5946c0b723ed51621dbda9d7a6eb9314d6d27bbbefeb07b22c05e8dcf2f884270d1704d93f6ad7283706cdac683343b1986ec4bce2667b27417c91465e08739dfd88885fd00e596e334bf8e3e53fe243abf19200d53f62431581c6748d09687e0f02b54bfe4dc5bb17e3837dc45aaca69854262da035c4f2c1e1b62b608f77e367e3c8ca891fe9d79b59188fbe23c2ab30273ff4d796f6e569ab78f008cbf3ed2346c334bb9f1478df9e655973b54fb3b1030a91cf88d385783981d11280aebdbed2b2ec04de0647aaaf53d4b4f7ef649a66c02ded70d636b24da27d5e80e27ab0165f9217ad6763fdc33300124fc83bb4c15f70af4d064a69df185ffbc74a133c9d9658df15d5fce654d3817ade96c9ded62e97ee03bf669480ff9ec1c35988a389887760c58061a6c099288339560c721908acedf3ddc8b85ef02554517f5d37d25f855f5e839273bf3cebf420969bc37f1a0203a579007e2a9227bda80161cab9728e5b8c8619323cf4dc63cab849fd3fb21b7668f5caddd87c78e079181d791cc46710fed194491823ca14439a2ed328a0a8365a24784d6fa3ae6c19ef944da89b4380ca4fd63a707507e98e9e2b29876075edc14e168d9ce5672beb84929cdbdbda52efc2aaf9d17d0515590c620acb720a6e70a7c6e73ade8128255f017f8760a0dc58337940db6928a315afa2f9d357cf1f199e7393f29d0ad05503a0130755fa5a1c7102a96c141a008494bef9e74e0d977aeb9eae830ca58a1bd571c48f52ea676d32d39e192bd4a9a40e3817d62c4f917a37607ae3d6f29f2e750dd39bfb55a5f8de13664f57340d457ca03bcaf661b6ac1f9e0c58d5c47882b7ba32106d7bfaba746c78fd1a9edb7b39d1fad0957914e804f7d9818a490a9f60675b8fe9fcc3f4aa3cb93ef1cd6c420463e25f19c9e49ce6fc82e151d32239f53945fa86b68ecbdc1188942b690ad47f1cef7905e0b3d7b20f5297cf495df08586b6b37bd60fee08c9976f66c22c3e4487bf2281ef9f925cd496d975250ce997d45939c3b4418119d768455b1937d3454e6288240e6e1aa6e4841dd9dc0e47d87bc86ace123862d1a8fa4406eaa0d6af2f6ed7cee232bb8848d5f79953aa2ca4627264684ed63c3cfd9739d6dd57a7364ec7f663b5722a07858059f5ce104e48729c07578c6ced5414e300de5123a02d3376342c4022a8a415ba72cdd50c3272e3fa0bab275e72f25afb87f06bd7eff7faf34ab90dfe6c5f1820df45402bf571240dd7c193ccb74fe803ef6b8239ef8c46b0ebaf0634e1fd31b998098677fd6b0469fce369d75da3bf1c821659064e7ad3eeead1728711dc4ffe56aa466f498fc5a89bf6d792419adc1b3511bdcf4ad323ed1d460553980384afe1dc4fa5ae264843b5233ea2c771c394cbbcf053a47cd6e510b98350ab09528a0c79525a920e20f92ba485a6bbb03737a01e07eef1414b03bcfa24f8b90a59eba90ac631900172b560af0919f277c05b18eb8b18df11bbbe3e7882622d9d0bc9abeb759eeaad0d7e84ab2105ee6852e38702a0b43e79a17662959c2604085353f967dc9bbaeebf38b6cc5e0961247d499b6751a490475f6ce1d25b7827827303195f53b4c2078c9b2182fb81ddc8f28c91a80e7cba0b61dbbec84cd4365c2920d8dc055e9c979ca08c032486d57c64703496836812df779959827fc4aff2443ee5bab144e14f6fffb50a054c1437d465cb0a0ab4c03501e732b6b59cd6f274883378da9d21f0fe0268083c44f14af1ac252de877de97e9e188ff6b86ea688279394e90afb01fc1da0f2474938fcd08277f21f49cad46ba4b5eed4c33c7041c5f5abb2a0301dca5ce30ddfc2b762240746cb32eb4f1139e488bb55f8c6d81989a35ef221b0d89b7c617d7ccc3a02bc3ac913bb22d89dec33a187e09d7ef3c417504785d4946c4cc13f1164be196380767740222add57e089fad1ed93597600cda4c7e2d749c940783412ad15de99ff81b099afac5fff1747b2f703a1f202847e75f523503e4e6bb9248de757f0bbdf2a823c4b66d1beeefc6ad18854f35995c5bc41168f285f39276d6950c51741ccb7ab25cb6500021fc72b3987e7bb98330911fa33aa053fa90b70fb6168558abd464f1277543510486aaa7908fe53e45ca17ab6d414696a3596d5a0ce22118cc3222664db811883b08386ff5a48bdd01c870e68ecd2b607532fff3cfc36bbb8c334322bcb5b120061c7b48021a4fdb876db38bd9ac40a58a1907b09c2391dfe520751fad211e9df7ef86d781a120d64524aaa62c8587c02434400895652b04a89e0f60fb92ba0f1952a12344640e821695bf629b2514b6141c73ca5c1b708cda1e3b3ac749c5b4cac86511ba91d50ef59cccf33c1461d1e3bbd65240db88aa029f844619ab61d636fbbf75dd67ef6c4b3952696c1b5c67fd1db05d7b04c15d34da18d9dd75bb87e2f41aa855f7f4f8e20a95f43549e056efa63b374ade7c21b7367dc406f7bfa6186aa52b0331e85e57ddeceadd8cd6a2936a7ec3892a34eec20843e8650354e5c28b0f2044c92941b03d134195e13bbd2d1b93cfc73ceba15f0928fb0072ee947153a5cad61f0a896875639ffb136de8f3ea095c5497d9d2693e95ed53df3a1d3e752f6e21dab38414271e595d377fd25f007f0d43180851813682f801b8c4b9998cfce23a0ee24c98801e7efe050eda20660fb3abbedaf3e4a11ff2948501fec5d5561d17c688cf16e84b30bf674f730af9282239ffd9d762d5f7ca53ff86fc770e9dd4241d9bf0a692b61958e1e79bd359a72860fe50f583c9450138c0ee1939f4159c344befc012b2fd14d6d07f874a1d2a12528271f8b3cc40e1ebdb6d2d70101c3a0478fab301d8cf69434e208b7fc5fc1a8e450bc06f7004c62c60485470dc67ca700c1771c93b181538b46afe9bf533ae38dc3624b1e6097e0e6b1269115d783e7e405bd747026b1e3204b316db65a4320cd470fcfcc35e47cfd17e48a6f357608291c5ee430ae8d611aca743e579460cd75a8ea1580b304b55b8dc5d40e9bfec8458f95ee7f9d528dfd9dc53cb7a3b9a815c7fe30bea060ed4022d519e922c730efa53737895807d28d7c497721641c454b0ea2e6bce05a8e2444d3422d10faf09e180ecc8012ef71abaab119f3103104b67a27e5666adafedccbf2ade3a021b811e83b819804bc693cac203c5122a969d05fb67594a712bb8c351e4af66fe7a47262a2159fe09e04f620ee0feeec1463e04dd8bc79fe9f8b994bb962915d2dd5999aa1cafdd1f0c25937615687c3ba076c546c8995a9e7c4cfd0aaff7734892534665439665d3f7feeeac144489dad2949d37ea8a7cacfd9a79a9afccad3603623d8053763af3fd1f64c623977e1c463027fa4cf935123aed6db55e465635d80fb697fcd8df8930312cf48b73d76b1838dbd9ed2cd843abb40b06996cbd4f0a66d34a5cb0258d59cae3cc8e98661d5865caee68a4dcd07656f9893f684026999cea316ce5f34c882b1cf74eb64a8bae975381961f1724040dd0caa2bf7da6e7716f84643fd5c2a6c352b9722803393c9a0a5b1910d6ff94a7951537a3ba6c0a91ef654bf8347e240a4bd18a47fe7e2acb99785f2e38cd8d18705f90a6dcc1032ed8575b9a8b5fd4142880d99bd7871338c1eb8a20da9cbdfd83c77aabcc538dd53167f8be0df34fc42aaf3b9a07f4b1dff933a37cc044014421132e057cc7905cdbb92a8f45e9c65baea775078db6513561f83f223bbd7c0d181dd6229acd448098337a763273d42c4b5e959384dcbba76f906dfb71fc9608a1217c7347793a9123e0bc96858d3d4cccb82a7aaef63305578f277864dd2e384af1f7397489dc5e67474369345ad69c0ba6d30d045572855ca50b17d14451cb4b6295c9dd1c94f0f804757db3c503e8170347fcf615e2ff613f698fa895407ead53f456d6eb6eb25a461830908051b69ad2bb3c03e940fd2e088e0e6efc2b185dd86baa376434e170c99844a307c5a3f6fd41f58ff907b013cef98edf741fed144cadfb876bb72a491e7a618f43c6877dc612d5627e7b1e0d3ec35efc1fe0916c6e490fcab034447ec9e3e2bcb96e64b0b3f8f331a623262ab435ed51c13014a0bb2eddd8573305de03473f44c71c1f1047bd4361bcf3fc0fdb85e195793f561b5cc7b2c00c8568fc1b8008d4e079268438805f59d8902b732bc7ed589020a8da06ab61e0da916d85d42c7f0ef6b05a7a6691957b6a10719bc7a066489990c433b8f9bf8b78f3646b4171baf53005a43537ca980467b12170cc2c0c07008f421d63fad45c7840fc3bb42dca332bd59cd301d30679166bb91410d81e1f2f01fedcb4dce29180c75adeac95f3f06f73790789e8aaf0a2d837c0844fc7a9abb77d747ca23f9ef63879728fc670fa1bc67b2faeaf3c2d0e7e0301aa49700cbadce0b4ba0ac826295a926068ad82a94d73b4004fe3292e2499a20401f0269bcd6d4b469e1ee09d7e219494f85b361c3d9a1cedacd395598744bd4d69b05dd9176b181b3518a4e3b91f3f93e853bdf8e43952a26e6e4a5bcef90cbaf580b6e0925a1f0eeffeb904d295d295870668f07b0d1b42c1537d84d280c95a77b7fe78e8dc65f03367d0628307672e1c1ad80f8562bc35c6dcfecd1d4191a60bff2bc04bbe33df101628b8d768b2f2fde552e258b256c594eccf7204904e6ae53d3129b5ea275c6487a6ee78463a9b3beccda2cb0f572c00a1b474c64231d9be5142f23cd89b781be1d6b716595a9840036a9e9524449dd78dc2b8c3d01427a4addfe02d9060224dd9c98c6dc2efb217659601642fbd83a4f6c2ff893c830da3704eb40e81510e15068fb56c6af78b69689dda2ccb8b8bba1115496dbed62a473688ce1ad776e5e8adb93105c5c3b5652cb53b08b30effdb8d3fe31cb886e5f774cc4eca2b9558579f11435d588074b5662283c4fa8a8ef0fb926e664f3b773a639adf7960349789f8169d2f443aecc17bdd8ee1a981480949b0fee2e1fdecc348a2f27ec8b4b996ff4e3098cfad77b49c3be3269e628ddde92d28a10aefafa1298c172391e75d64ffc886d1b7c55df6b4f9d459e943976a5477ffab72eca7a0f13ac74c9e1a921b475a36cf8e5cff8eb267e7c897782252a64e1303375c5aa384f8b13f4be5ff9b10fa47b53b59b107be491f734089e431eadb84870d8684bc86215fb25808ad04ea410898be9cca54c93286a7de310236aba20f9b23cc091600760f955dc27419a6a7e7325ff71f340e6c8670a4fc5e7bc931bf06f93922af4b59221e9c1a60ec0602515ab383db28a125514eac4b20c91acc5a7d8b1c2b91b50724fcffc7be12b913623ad736e4e66e6ea73a513c8e6a6d8e3055b6bc283ad0761e90bb29dd1c67000b9e30dae5f663079f7e5c2c357d50c126f0f0d34473979fceb26488d8f8d6aaf2a4b645e2768cc850afebcb162d746b9be44bb4a19cf3355a42ba6d40044cc889a097ec76194a7e4a08fef43fe4f2b977367473597da2818bc92f6f390ab7994a8d2044777e1fcba12fabc909f9758244ef889df53073762d9ca696f4e06ed3abd91635cbeb41fbd6fb94e4fa85dcc089088543644e1f5fe5a47840703310a5aedd6626f6d7bd8717bfe63e8179a6a1ddde8f237e3a73b858e0ee1c0d47ecb116c2f4f62dce154c6db1fb31e054b00f007a6fbdd6d0ce292ceeb685f7b9da4a35ccde9deede187dd8ae45dd8f391202f8553f25c0c65494b01636e2ca5ef22cb816dc3657fb5f07d37361ff3be9b334cc2db3ada36a3bb8ea9785a1770a6c114bfd2a98c67a2608ce5cd2da21c8278aaca7b13bdf3ac12a10855688319a27e60c0451a3b186f26098790052c7a9116413cce4fdf1cea16252e6b9c45ec8511a3af23f89e7339869082f6de60be6ed85d0aec783393c6ff935a1f0bfecd49d9eb65c22173d058ff06ebe46f6f479e4fee10cd5c4de4fbd1733231e7f0f186f37a77244237395d502a08a159ae15d36a2c8fb44729e24f6ed084f71b6c4dea348965d8a649bad68b1159b987e26546ae98920a692ca6fda2fd703e3cfd3547098e62da91a87b79d4c06eabd4e467c928b77f5fad1f9244db91a309eaf1c456243c290027d4d9e7df4459cee8b6de5d532f2004a809d85fbf9b3cf7c2e97b4cfdb3f302a4540f6b2542f838aa4611e9684615e1cc791fc92793408bb1ead2147b58e749d6d49943dac32d3d53a6ac1cf0700695e600e627ee5cb8b82bd9d210a3075d880eb56ec5354d07547711885e2f95f1fab6ea94189d1dea52ae4260be25b21e51db6a49e799f096d85cba604ad2533bcbc9788a05d907d917c6936bd84820f5cb9c8ff539797b7cf29c16b9acdc7539632f818afa527bac5ea3633dfffd861022cd3c3243d763317ec05c0f7697f45e4277c372009ab106e3330d255580ff0f88cd23714db10b90ecbd16dc95331b4b260813f6174d191c6566fa6f063a6e2eaf593af07214b2361c5a8922a7a741d0ea16fcdf75f25a6709f0917679c44e92ca706be4a8545d6f345015b1c23993b94a225332085cd8b1f99aefa5a8cbd32e41d3d52a584231cbd0cd3aa7beb18e38c1f8a21337dfb0c5713b1f606ac0e5466a3bf54fbe18b657d5f91af0a80976a7dd11182666c5a19dcf4c5db15e523f0ce5a1559df549b5a5a502164dbdc7df5ba17919fc847ca54b6fa6038d70a45643f181accf1314d759af3b9cf0508bb06718b342606bcc65089fcab560ec2120c1027bb0ad7367b955872c5e5846bf989ba109491ca362fa8100baf5e83b7b503a0d4d30f274872622da8fe212f865d96cab66efb729a15228f9b9c8774c082a1f40e8b8c358a0344ea39a2aae804d7d2af88f34cf9c0c88189c794cd39542535c69fcf5c6047a5acdeb830b6ac589fb8b865656766e7db4811f6822ee58be6d305a8162d1d75083398ef1dbd795cad3c8f6e4c4c67365991e53eae8eb98ca6084c65efe68eb5594294059e3db0dd674c7ae8b1fbbca289130c79e0329960d763e493dd9538b50902bf0ee86efb33727d589715709618b1319f5a71a721778e234bc07af3bed72fa8c09a7df24cbde93a07ad4f629bfbea93f4307069010bfe2a8f538fa175fa4dbd36979985c4b5aad8d97655b40de44917a75a5f722a2f4c0a5c71bdbaf9450a6c16bd5467d352f3fd9e6e8ab5134282a32b4a3333e6a5632a94c53b4c31f7cedd410421fd8bc72a6f28c924992af440f0a44b57717f87fee4e4a1158f276254b79907de56205ea1cdbfea0aca1d07dedc18ebb0bf3b17c85d463a1dc8c7800d83a7eaaf5b186eed0674e52789ccc169f50ed65ceb45f4dc03dd52646df85a1d702d9e852502d810c991a10c19763a2e8783713168cd7a8932310128c8caa67bc77d854fa823a72e3a3af3ee6a827dbdbad05a3c33c05de3716e92bcea6d6fccc5545d583c8741c121c8eb57a3a4b0d98d40b7bc1b027c136533fdef2ea8c57d955897b21046e5e7b02a1a2ab7648990cd6325ebf5affb351517302f244430664744799526dcd3934cc9de8740b2e04180668cfb296731c7536297df6c793da2b611bbc7fae19b0cede5860f4f362759ebb3912abf8c3eb78516bf621b6f9309cbf36e9f0cd417fec1abc56b9746b9cdf33312cf0a97757cb92d3be18eda8d2329fa0f2852eae180432b85fff1b65e2c06296dcc01536013a6624e19bb98feae48b6d87a504c28721d3e2395f61f924f838323904b2fe48f04e48c12049ea23a7e1054563db2d65f67cf6a2421229f0a7fa40656c285e9abca6da5abdf840186940b3d38ae7c85160adc9ef20cefb0b3c3de42abbc2ffb1f77ac60b6a259b078cb7f075636644a2e58439c89a45f031efc1c35ccb8f14f21c31397300cc3858bef8e22abf85c74ca2304b8571f5d03196cb68b4c1d4c620c5b20e2dca676d2924cabef1c7b5eeeeb0322b3f6a98f2447b1a146c3bd1686e78010062b178fda993cd779559906c98d4983635bbf42ca514086d2f4073fe50594a404f0aa4edfdf6beb11f0b0c7df58ad842a20d99ebd5a9e43fb4376b52a38d94c63e21f669290866d6a254c2e073aa6e8adb7198763bbb49cf8154a14bef5bf6bbaf225c01f608c6a5b3a9ab3f66c3b681731709df35d69cb64f9a515d475b846b432d8496a0e1acb8002702aba6aec3f1c26003998667f37b45d6f2d92cf947a9414da3e821d249bb8c35c24afb451513cd672c771c494c676ea34d8bf0da7cd5751b985787f14748d1db7607a679fdd969127725d6e246931dfb0ceb18ac31d8e7470ed8162bdb39cc35bcf2916064aab4379591c6996546178d73bf8025d73f6a98f36ef5e53b4a67c9765708eb5630ce73602fd6cf42f5b47bb228e5eac1f49693d5cc23a2f4282b66d75d2e29977ae8b67816a3830161540053055a68c2c2ebc81e2aff744e0496a71ac4763f28084479bb423f4b65a1d1e9c7e96d7a724567bbcd76bb02347c01b09d03eff2c987d94a6af348d5a8697bbba7f117e6f55bf761d4b9981440ba2efed4c3432ba112075825e34f606fb3c1d72853be6fcbd41d1573cc42642ba6ca50fbd78d65291f9b439522328160694a97c9ee8128fbdd542b201ee26b4f7b801c3af7044260051a0599a7c07e4aa77f1bca008da4eecfdf112e668b3177a04d3d3b5d821bb7ad8b3d76b95c0b723260ffef6764f341dd80563b88d2d8d2242b38bad6ee9ba5a28e2ff5e22d44a5aa7d8740f1de795696a360d2f9b29215f3c8291e31aa471f04016010865525606fce058641c4564a7e9f3cc05db8b60a9766711142bb8a96e87c8970c6e56cd3433a2a361414849f26c5472b269bb226317ca19e73ac50c77351a9d5fbf5ffd2f79fcd4b7bf1f12da491086308ffa962c3ae8cb1d1ef723ef78c0979cdbcc3372e93b2b402c383dd46d5346337f503e942b1e9021447c5f66fcb85414604edd386eb3a8f91d255dad3050895e51165afb9fe9a7bb1e6ad035d48e909cb792c62bad3620f7b97c4ec8db91243c25dfa93d4beeca40dde6a2fc163e6b199620e203b929b73510da88b2c0118a1c6a011b129481c5ddf7d4c2f6c17b88f9c8985b1d0f9da7d316baa0eef8721592078f1735f2a297ea196ecc70f01ce852bd138732bb2ddd5707e9503fe2a1799a19c337c4fd88377a775e605eba4a386cebbdff5d0d5a9e23b2c8bd05d7d5c5ab4c8fcbe2af5258794ab75bec91018d98f21254022b9f6f9250f440d3f161f531997d839529b4ec73727e091bf2937fc3c3e3d09b8a2f0082826b1d8e6a9a66a8b4aecfa06db5899675159113e9976ec0b69181b8a4565939e89af6f88c7b99566f7bd6d84e2502b55cf9b96e3e6c9526c478e5c7dc5b15c415830d09d9e1258ebe2800b255b36542ec9e58358e9ea480e45da397ec743e25bc5045e67fa43694d5ff3cd84cba7716195434b4b5e4287bc045fbc8fa11c7121b3849da731d229d7dd35597c37f4b8cf5c6df32a8e923a47fae1aeb751305ebe8685c7301395d02040b06307926c631fb134b90592e593f1314518148f4a1a81ff2d6299386693fa819e64e1df64695bb290c22c756afc5008e1551aaa22fede9690d86faf2feed471101f66079bfcbc141479e80c89a207a2e64d2c7779554c9a0304ce6f921d12d8208b88b18cab33d2bd73b82f51d83bc650b50b8f50684e4065d562bc7670643436d805904a4d0073d02c3f514bc39dba6c5507b3e92f21712946f8047ae44fa085d0a975b7cd74d011ef00efffd8889f86edbd85d55ef2d75ec9c65255f9caf2e2075b149e509ae3aef9c1b0c08425a3d5f061fa4ac053e7b8e32db9cee19096f419d801fc84baabed469b330699f4780c11378785a7a9c3a7b663faf55c0c4a55425f55d94b28bb1fa147a87c58a0bb833a6be97bcffb8cb575f2aa0f5eb7497d661140cd2239d4f3b764aef788af6236a1dde82cc0403a2fa431d869a8d1578eed602cde4f69eb723d906e5d64ec93ebfda11d8735364c5aa33a3ceb75c669feea7782364205d520f0a1a36ec171dea9f2412a3467e4d07ca7dd7d08c725f55ad7c450a0a6930b9d8f5c50b64a21c513f3c46cda26e0777fdbdf6920c730c614afd111660e62b8454eb58a5069a224c05e8040b19b9c5db5b8d4c22ec61e8ff0ac88bf4f458178586f355a8f85ca05b4ec3577712a1c210e68ba252dbcac0afe05965eac0969703ed31b2ca5aeca1d8696c80cc0c104768b41e102b2156f38e77f859a275cda12647090ecd6a845022e699066cf9fb2f10ef3c15d9c58282a6171f011b8503e4bfd82c33e5a403c8fb0ee659f71401c13119ab3f08c64fede0b831789942e0bea0b36bd66d7717cf89c3e869e192f35d6f7b5432310acbeec472dd11dc2aa1a80de4eababae6a29ab84103375e06bd4c24ff7ae304f831fe721610956796335ac94da45ac53135406c1b8060288a93616634899e853646bf999b9499a2a4e93909d82ef67f3b1f86a9aeb56ba12cdbc21a6cb79da21c139eebb83706d946a98116f675e22ae9d8a7581916f37bcfd71aadcf943cce2e0ac82dadaf97f425575d961a0e1c547c8c287ae9c176d72fb342686723013de418bbfb596044d568d1827e5fcd86ac23f68cf25ce543ab025d4d3f0da8895c562c9be5a96b3af76d19b94d5a4a4ff58a58400865ba38d8382d61fd7a8ceafe6637a7c7779e746609be368970c1faea3590586f9777fe699eab00650fd5ed94f2137a5297a592e273960b56fa3a1f781f42a1b8bdc96dd23ab0b1c12a634be8a6f981fb870134729c6f473eaad8beda3712fe59b7975945a36aef796efd72812845ba59ed1d5dafeaf26a9aedb4cb4c2a009371522ce6d4ee4c749b4f84e04bfc9018a782ba2e836f1979fae5199b296280f01403d84ff52ff59fd7121d819ba1165c92ede5b63fdac9b3beec47009735e354a7abc3e169823e3cacd3eda8c4b376dc97aa97b25447e33ba54363aa7eaa59a81c28670e440938648cad7004b0ed052350e71fad56cddf493a42a4b0b8e1c03eb15070d0dc1c008795b05a1688c67dca3019d600c95d34291a2d8760d84ef3a061210eae85baace204237a8bdbe47d23563cb22ec99a0f24901668b813d60c6f8cca4a5747252214a4733b5baf22fecccbbbd294f37881fd8bfad1b2250bea3c91af145e5aaca8de827a8e4520db421a3430984211d2413f62158626f0ba1bfaa25605a841880133720b104b240ca120c845c7378440e9643ad6ab3de1b0a3d5a2f0037d00050dba2a0a4ac8bafda6b26bd1a01fb9d7531516933317e21fcb379d5fc13c1292793df4ab94fa266bb762486da03309b4d37f07ed14ebeab2575c217aa025608b414a3adbb8345c1fb49e6279083b393ce03a1dad456ce28b2ce509c7e4b95bdf5ab4498182bce5d01186abfad16f17bbfbe7fd3b631f1a3fe5829def6cfc09ff9258b9fb838aa8dfc159ac2ffa8cbea8965c2f5658b966f4499ec1d6bbb6f0fe7f91c1f9fcaac0b267bbbaeb80a58830f2c353c601cccece8f2b407ca43a9b88706c917bc941825f20280e60021532a36299b5af28192ab941c27f1914c3427c07c1659f0aaff9a324b732cdebbac708174e495b862bd438dc9de985500a102b536ca993ae70bc33b36de5bdf513f762bfcb9cc94fc3d3f0ff988693560f25724c861dc2a344ae40de17dfc493f473189c646b1b192968d885a5bccc63ba68d32316ed5f2ca3e1cd9a6f9b05e80059494ced44bf00213bf7bd4df8fa10ff2db33ef8a2ef32184fcfbb892d937af504c67f153ba954b85ec59df93d743674da7258ad20c884fd83cd0f5745f5aeb0bea9c64d9a6b74e0f65e512718017cada931f4298a92fa1735479a73f8682f27f242109db7921ae7a4800010fb49eb186401dd6e260811152baa81b4c54bfa50c1318641aec70155609e48b4f6862ceea250d4654cafedcb36acd3cc1afda4efec6d934198a8a7fd8f9bfa25d032b2ece6df35f4442a4a9b810cc0aa19d81625d50c28e5fbe97b7238ba0aa7465b554cd1eb241e38dd509107c8dada9b3de1f863d6f594c4c9978d02d94330f36fb3780b13bafb6fad2bfabeb25ed47c6cadf1b9fe66010ab565040778208ad4cd5239abad2cf3850df176d6049703fb501a1ed685a9a75f54a0c36077d67cafc937e1dd275f49e8081d2ab87656f18139b12080143303816d4b04bdf70faba267ae3a8a22673a7ee105ce255f296832275885b58b94d5774ca5467a6448331fe0e80fd62e0519feb9b94087d50b885aca64b86c832a1196edbedb3b5f3450550d0a97cb53f23fc59b7defc572b64d618dcf523d5f87e8195d20f3e5e9cc6b18b1126b534dff5611583e9c6a885964e4437a662e6c97ba8ab8f4c18e46faf9c9917e304492eb8a1622afc8be3110491ae31c524b6e2f14295e6cdc4034e2c25af392677ff1491e1916882ed3a23159c2d2894c81ab896c84ab7f09cc3bcff97981c91eafad5026ffac376057ea14ffd9cbf8cf58f9dda53b979cbc121a1e105a9a5fc755ce7ef82bcbdc96a0ce15928af10b23fd268c2cb13e0ec961dd6c5e262abb141ea636f1e199054aaecd26c185c166727dacb1acac18d430ffc22a1fc9eec7d77e1f2ed246abcadaf9c5c04f5d46471438357f8c00fb0bc0ac795fa7f5388fb9dbe69921a383c3636aeea7f5756906e4cc1538b10b4d54ce36afd46532f65a1862e49e2dd6d81d974acf1b5dd05aec8932e20a649f397eb0952875fe5ebac85be77b453b7cea8175f2d5b89d48649c831ce58491b699192eb6b589a1161c21e172dd938f029778101c26a2b25784ab16865f99508d1c3962239cfe576012b354576c21e4650879bd2fdbe32a71c98767a5228b8413c3336f737e24a6bab0d5d58f67f78287efeacae1ee00a9717c0d3dc49b269f479ab4dfa4c8161b397b63555957e69346ce8fb27f7b752993102c20f9cdf93f5eba5157dc70eaf1eef72be07e8f38fcdce27e3908dd7eada35a177d1ce51aa7512c42793bd5c3592862d003557294f4e435a3ab2a3d05ecb151b98be2220b8c3107fd48a9fa67ffb4ba16ed64f30d25d98376af8dd5bd02671b350049e2490bba36c365bce6d929e039e5f0ceeee7a8cc749ba5275ad314ca0dcbd602e9c7dd8f02218044f499a21ef4a758a1d5243613424365517c2604af9168c552ecf66f2121d260b5e15113f0345a5f880db2fb83cf7df74d1e565e20abe42f51fcd97676fdf348627e36b555b88cefd08c25961cd4ab4568370a52def87a905fdf308fe35d66d2cf693fe599a25cdfc2392dee904fce3f5011fa635687d4a98bb62a4532624adf7bf54dbc15c9d062f40495a97e691865f251b22aa3af4c9e0852e988cbf51727c75bbdc4b9664de6322ca9045c82a490336a57d20a8daa511e5657116ca4fe71850c1a64bb92fcc659aa8efff16c11ca41b98d01409af0207c037467b0974cb750e366fd0a6f70d31b96c85352c247bfb24c2aa5f239e8982283883bc918710df99065df81f4c03484038cedfac43cdf463ed8d935ef0e9b96fcc14258d74d6a0d3bba9bf2f4de2cc72488db1617516fb53e29c9db6a3510f180e7e50bee2caeea0690f2b738f5e99ae8aa79043cd2869a83282a82086898af2345bad4dacb414794c177b654230c55ee03351bbfe3eb2819bc410e44a129e5cb83b7116dc823df2004e4cd5542b57c5c5ef5377b5a1f01ad4baf352fb8b682631c2fc65c8afc29d1932f1409f0e058f4b6c7626a80c3e0ff059856805f88ca8007e0a351bf12497e70deab37c34c5f35f74a69d80701b3837abc4d788d3598774f19259ad7de83633d93d119d07e1c0eaebf7ea2fe082ca7e1f59f1555daee56a4ff002a0bb6fb29624e08863fc6b310cba157259c231b186a20623975dbc3d5c33b6996ff909ffeb4866f4356980bee0e1d08eca10b2faa409a29e9e9395624f82e9f8cf8cbadb260d42200b12b78ebea9c2dc26420f73e170c593b46a5d77ee6a4d624aea08d318f729d92eec17db540f39cfeacada235cd440865a2cf184b3b5f1fd4e668f6c682ab8bd32e980689ae62269c8196dd51eafba65089fc90dc066bb44218a28eb84839349590e5849f93be1b9ff6258de1cac0b7a941d54bdf74998382db5a5b31149eb94ea15b0f778997346b3a8fdbfa5aae767ccda2289894df9cb25063d97d1a99392b2ea27546ebc413170dc5ee235969cf072c87cd0bfeb6f58f1b2887539748c758fdeaca25d105ce0e8569c73e1111624a98ccbc34a87ad08c598e7db4f949cf2453919864607b141b480205fa27e6efa2085a1cf7397b0936a7ecb271393c2a31c005818b2fb48bd8c79b3ac36dc660d4adc64c6236e3d8559adf85be3b7299c963c59ce45886e66180873463928575bd584a27cc2b6695c0722ab1c677050a77d8c777930a9b2b122202e8cefe3d97a472483ce47a63162f316d40625ef4e747f830ed5f540e0bd3050842a6a8f9baf74cc6b6d9233b9c9deec278a7a9cba8b5f69332bad37844ba516f822b517523426f47f530cd71a8cab4d033531d599c8929a4983fc996a7d920bdc4416d092ce2e56ed737fd1a5128d51abd0672b79b85913deecf173a08fe7772365421e914f8596ba48833150135779a2fbc2ca453dbbc2b7a7b838bf9219eacd69be5685c3deeb1aaf77454ad72734cdf53968d14db56647d27f7fe8af906fd7291bd1b6006a9354022da1a3293adf80b3e9d94c7349f09b7a729474900b1728d4e764b282a914c7ed33263b5fcf4ecc5e93e2a6a9049b6546c23ceffb134dafdda4f91d1b323d3fa8c0c14cf3cf076f09afba21b39da39974d54f35c9ab8d0cd3f45a1393532c2c1b66d3637bbda215e47e0b664ba3176a7adeae145624927647316b94a836cb74f7911a4bb7ada6c53e5936b17bf01577d911952d1bee7ecefde75a5eecfb90ed4af739b8eab9dcaf0abc26efc90a4fc1fe4f3aa1094e5f06830b2c6d44f7e42469c98db1f985ca29cc03d5aacee02e5cbff9fbc0275fb3cbbdcfebbda994e50711f9e468da929bd2a57297eb130c9861ef33e9f6472f836fbc168156a59113f5262624b53ec3959211b6ea0f0127d9263cbbfc3bbf83c61f2275b9bd1175463dcb2e40944dcb7264d172c664cb770b179a84cf4568d75020a7822185eeb532c799ee2a709e111770b832339db63f7fce9ce316901ca1188c5f31ae362cd815fcf93723c69d1bc200c00273a2654cffb19b81d58e615bd8b5a35a18f90a3256ee226562d3a4aabd98524c9c173bca78dddbdf88b8b203d4f49872f3c3369d4e58d0661c5a6dc3848412b89c236fa1d701d349df4d12924a2d1f711f770e168b881a4bf0a49890f2e0d0c1d514e4ddbd0b23ac4c006f8da0b71b3a4e896ec334cca6383bdd13308bf1ac8af7b791fb2d2090a6204f8f6f2f36bf2cb34ee85a8a94caced47835137246e39e09ac26702b5cf9701d2256023b0bcea1e5e4d0fe00a67302bfe91c86ad07cff5ed12fc282e3febf3e08597a2ce94a3cc463a7e71269463bc0f83d1a8bc7418eae0600c3230b20f6c283402063e50b62a0202cc880d22d273348bc766ea395d8ebaf3a63b0e3eaf4ddfc706a86663efed004aad8bd1380a30485da533bd9bfa3244b00d09e191ed4a113d37ebad20eea25430335a225f6b0dd02b476567b8de31da267d1be2a08a3c1cbba7902d88ae0932b5680b907847163778446ce41d69ce7d0091bc3b9b608574a79f663e429a35cbd59bd0bb951ac82f2023aee42cfd9a368599755b763c7c7b4698ddb23d9052f3decc4fe0b1fe00201fd9f279797e54616527e9c2b60056938d05af6b0d1d932e73f057164d7982463261dce8dd111c20d15f0ca8ffce4756d77a2557eee85b7288cf065bda50c51fb660fd60724de76825f8778de2536d4335ff38800902524b4fbf450d065a9f3d8030c16b999dba9bbba451acfa5f9bf4877069325e2bfd98e0907c469b4156881b95db07b6e8e475a802a143575bc4716d58d239d6a6fbd8ff7ea5d328bac008e0f6c48dcec2cf8bf787a753616d5896836181a9eadd933489ef3f045acee1fb451d143828ccdc7d96eb14863dc0f27806b767a51c12b2323d5208df7e07dd25bb0366135c34d115ce5794d8cec156119ad4abab09be5b5aa528795902b37df3fd402f87bf4227b9911f129de60af387c008a17020a73899a897e4a2aa249c71543e3ad5e77e240a8e511a9f64d6e7eb15c48137ece8ae6aa615a00491ee68e763568ba9a34cd7d78cc15a1f5900a6e16a3643642afb1c1ed5627bf3941fab019d8251d3f5a1547e839318f21c7d9e58edb94c4813bc2f9316a21ccc1f8feec0b11c8180aa388082531c54ae4690819c5c7254ef82ed2054d86cc7cf91b1dc4bda437fbbcfc4c1e945a002b813373eed517e2e821ffc5ff6f4f3187023c7780aa4672a7f3db98835b1b51a6501e971fa009a1789e0f519a245402be49ece7704e9571fdeb26a4c86424e70439755c7ffde332ebd33fd0b955c20244d5815c82a6eed04cbb3238f4f891c3acf2d9fff66b4f3973831b9bb0347218f496ddc93f9f057f731d21e4a05f3acf69695c779a03050aaf3dcac00f88375d935116e1cdee0409558721ff47e2be98912c0a61239417a570b113b42bc891b6f5629980bc49ed6aa4fde37d2131bd786418b911ba6c2276489673a3385023c0cc619de65f9842ba79785479ce4f2f933b53dd4c3b003fbb9e77726ae56f3d9fc94c7e1ed229ed482de48bae958a3e692d3958cd81c809c7383c46d06170f9188ce4bbcf31a7e371d05b7ca4970567ac6c001b46b07a55787a4ca2710852a8b1a6464c4559d245007b8b08365b13734092a797cb60c9962028d5aab8ed2949b643c208139ffd641f2b02e6db5080b7a8e15ecf542a7648a3837b3abed5fc674c905e2acc48c7e19c51b502953e2be1d3245abd7f801760b82c841635192ab74748c5cc5b266882c8be1c85697a79b41d8fb04ed226da2a3e2267a999a703c5c24cd33998420b2b07e1bfff17f16ae0d7a4bacd4ef98bb99fbfaa1cd32044c4ba3c53e90635a7203c81e79cbd26287343350b03b03c3e5df33ff9861b6d3dc5c099d07f038346f7894ca27c035ad3ad1652f81d31cb2db097425b3b404fabddb3caec42430f5dcd88fe177c6f9a280797a489dc7cb807068266354b6654fc8cb8b19e7e0d5b8f1182962d753def5443787fc2ed8c661e08caf3463462bf77f71a518e21717f4f5e805b9505bd9b4ad19eb31b3d7597003481a0dbada12c94ac234e20c3f87a315adb60a7ded7b00f7643d6f5de0abebdb25cc9ad9066eb7d8f68b0644878f0321c8884c4d06edbd6b065b9a630cd50d0aebde59d64b321469fee485a9e8b6500a024815bfc2b923826d59ba6c4c51602431b19f44cb9cda538f8801f1d3e2a11fa05e605eb9eb138dd24f8ded80f0826d2edf8f73fe68b117bae344808db3add761b629db6a24f4b5cb0cbafc2a9931d4ab882c3af12a99bfc5cb14b70eef8dff388779e3208adc73c38686a24902ca814f3cf2339c9c3d2d18feca50bb95768a66325895164384300ed6e286ad7b25f95e51ada1db1923ef90468381a9465b665640b863101cc2d6746934974e8b4faf28bd80355abf2e527387e1ac05ef69d133fe2f9617d8f06188516e02931beb9189f60c6983ab2385c87aaceae54e25314fc1abd1c39db20b38e9612ca355c4aab168ff07e4d749e84213e5d481760160c1748cb1fe9be6879d15a3d9aaccb3dbba45d61dba6052f8ea99bb56e8ff3a7712673bb63780638c32f284ea15c968936da2ca6deaf41a1c96a6e41b54a6cb457d2f6fcb29a3e7d063938cef851cff05ff96b9ef577ad99ebffd4bc82f2256c5ac712ada62ad5c78f2b9569d8a2a408c10f89c8ce629ba57c76917f1d8e6720e1ed4a8fa59ef72593591410f26e798c8085f3e73edd32d974252dfd31fba3a14ec50993b81a9124b417879eaf4985262a4f2c715ffe03e0ed9e8c912c1dd75eab084315d51ebbd44b8a568064829c93e79da94b0c32530648ea846db58d38d501f12ede1460a1cf61cf60a5137608ba71870f00e3be080be3eab2d24af75d9a58bb7ed08fe8057bce06932a65bd3e335dd353c6745f5e7afa4f77e09c448fb4e11145030e3992eb8cbc629777e5277233f1554180f81e4f208affb8aa783ea9c4f3afc5452a3e165ebe482361ce96eef5f9564a61d49e2594e4e2077f2548486f0833d6b19b91bcee5c0e0fcef2921a3bbcc30611fca541e5d51fb87e8059361d9c581d749cd46af9c02ebe4de673966e7831c145c18854abf5bd23ecd4ce8030b28cab223971d0eda00a456b83f593d0e7ca0fafb135468d1aa6a26209d97f52dcc8a332bf88cc8f91a2752fd306645c36bded5b71944396bc62f9d5e3c8e0e50bc637dc20c0aa28d186c121f52872ed6fda4013c123a6424944e5f5574a622d797e9335b56c7e0e2371feacf87fb06c5c27fcb5203b2ca06bfeafb7a10a50c6da8f5a2c7204c25afa2040ae4e34fc2f9c03650ccb63801aef483f28d81191db50d53c558f46a3a1cd2986614bde34be2952251cb430c5ed293f3539fc8065dd2537c357db87abbf4d824494eca5383a11cf8005c2b38a0c1edc7c51deff673d63321c7c35aaa8f814339574a156bf077416d784d6957fe1403aa4fa0f5f640bd204654ca1cf3398bd80eae21f90fc3b3ea59e5f33f1350ffb2182c314014de6ff5c239111a6582d4ca97faee3faaae81dd5455d0790cbcf5c6985b88c057fe14c5806b5c97880dcf9fcc352e8efdd1165d5784e2c6e98e04e1168d15772a3bde27ac34f17d2deb92d7c64bfdf2fde9c8c6c65f955b7a59c21c7ca7ca35c0ecef78a0852b0f616d1be86e5ad3b56848b623ece4e0b45bbc642730d276117b008deac40959580bba137470132a62ea4c9750d8245b6d96643b1548827bbe0f71cf2e52a9701c43770530e3991875087619c110d7c7f94e41a450309a8d6ba714fe2bff87b49ad0683db4f3e5763aaeb4ef8adf449d91678f8ed1af407516480fad8f05767423a25ba9e6fb09a7053320c6afca75e9d18c99b69eacee1d702b642983d41b5ae798cffbf3f3f47036d76489b0fc41fc7b23c582e847112da150a464f869dea296130d579d8b496f7bcc4f40975d3e898a8e70b85358b29cc8a5f522eee530dabfbf031fcfe9eeee6b027e9afab6ea45ec7c963d6dfe5866e558d8958924d7ca953ee3c5cbd59159c39abbc508dd6b90996162f2ecc145c4c60dc1bab4b2d09698703c7f99ae9df559e6cd2f1236a22d39ace1e748fa534165582ff9a6c2a12227eeac1a9739992b45fb49ad414bc4425ba33b66b53e51990b49e373d1916ff83e5163fe719272c15fb99daf307446ef0e8595338ae450ef0b9616455c647de2ebd21d220607eb412f202bf7faa7a3b919045a600f5a07fd6875a073f5d223b545ccd16c56f08ad55f2124875077545a5270a1ef9a3bedf4eef8c11a4c8fbd54e1adca34704f8f2238da7d1f909449aeac2260b9fdee45889f430604172368dfe2552c2b0ee0fc0b61345fcc784f654dee9d7e3c5f3e640911dd0587e57c9bf1a38645792eaade80946f720c99806442b8862dc1fa726d0982e9243bd3e1f29c5d72370b2774343e76d90ebe193298d8a363af4ea5856e425e59471a27a24ad9ef6e2a5d1f6287c40d52881b5970720bc77f852ca8be0c629f71d1f62be49bfa7ef9b6842f15ea62b921720ef5938613964a99e6d42253f05af0a1e054448f2a149d39dff98149e483adb62ff0041650f17176bff59fa94f523ceb79484567ac2e43929d6c13896d8b6805e20ac39721d93885f7300671074f2e1ed5ab737e4850e0a701b9c1403f640ac3ccdcd4a151f74067acca95d7f45b7a01654f77a7c634efec745fd8683ea64f8843cf69ccc5f5df902ea0f72696af040349f6d90343061cc04b231a78f9c0cb839e6a592e72957b23c8a7aaa4a9b7ded50b6bd482e42f51ae3db375c9e427410e7ed16805a6e65eaa10b58eed5d32bb7ef08416cd125044dac13f763da7b0eb4938c2bb30283b95fb787cf20ef37debfd038c3962dc5177cf2e1a09faf7e8e340cd40f534d1d1c7a34696d7685b3e94df7b4c54988b5c9e27fd43e5d5a5c876dede84dc8d076454698b439773142219313bcd0c713bb77265d9309e27f62dd9349847d54f2c3cb2c5821d8d3c015f7304b39d007e04bfd6577d77b4dda46fd440ea427898048fe8fe9ab4307197c4244c4a9dbe0214a546bc304bc9adc88a02fd25280699c7120b416105caa0018e777aff577da18581412aa2491acf023ecbb47008e8ca10e90d04baae242b86b5b1db927d11aac61415d28cc280f49117dc5cc2846d3dcc5cf53b1c6051d4f1999ee0af88eb1a4e280b9da555ba036f09421fb2ec5ff9a8b9581166dd04177bb1119be27c60a5b93769699f579df2baf79a4ce0ac06878fe0aefcc016d3dc9e299fccf1ea3e0dd2bd508f0315c582eba86e91e5c7f5bf6a49e2e428dc5caef154b878848eb29f3633db266d073e2f1224feae26f4fd784432a12b4e7c8be6e8809986c401ec4cc1c5a1b58f3b8ba4e789caa3631570aa50a69ea4cb2c5e1ac68f897346d460df04d27fa03ca713bb1a7b6ad5fee26d9fd2bfca0a2a369d7a0cd987547b9ab26df8818fc977365a23eccba1b8a90e4b08e054bf351d87b6c62fe4f674aea4fe8c1d88df497d0b3773e026663b124e5388c02fec8df91f3fa03452100b8d4f6db96a67d0f57b6e867456f97df71cf4095d3d028d04377f6360c22f4c77ad09357314569f34f270eba3769ac73d24d472449ab73a1b8f4b6479c358f922bdbd9b36e66cae3a94555cf0565644af5282fbcd8927234ebc0dbdd2da35bbf7aa95d6fe643c8fc15c13e677e95a8722fafb6b0d55385b234d9c0c3fb055aced9bc0c32dd2f37133943611bc9dd977ac5814166239cf02afc43d7200bafc95f4dee0caa69735230539621fe0882f877ec44acd1e059d660120fe806be9ec787c9a3de27fe4d1d725d2cf2dd67e66ad94aa5207ae7a4c68477133de401786b955ef55e68e5779b306d4139a82470efe14a35f53313760489e35e6dc1ea7d2a3594aeb7ef1b59ef006cc28e3c238139029043fa93ab1d11dac2f36cfbb10123072b561187f025cb9e6ccd67d05e7d35fe670a77bf36990b770ce409373181ad891873b99ed10e5211d2cb378d4b9508f28a04c8fcc52876d74fbd30efeb3400560a5077295c9fb8b03d3d44d74dc89cc6d59d1d71faaccd07afa46be5f4c76301464ecf4a157bea295df6f29704475c57ad8977f78598535bb77b447cbe4ee8d2eee0a6df9bcc2b9beebfa427b3017752360a6abd13e4d670bf3cef2a684bbf230415437ec06840cb42df0b5e40ccb8ba2845559fe86079875808a708cbe99e2406af96b36a820c058223ed4f6b5798a51809b388b01ff6f14245eb6008887aab1fa3c445a162d1bb47de6cc16eacf1e9aaa041b1e0da209084e6b94dfb2c75e857e8b9ee22108bd3537fb792f7fa2c838459b5ede1358c726c66407352a1d1618d14edee6d2f284aa710a778458799ca89954808dcc7a3c9c8fde67d6cc822d61bc3042487d701b36badc91cf624cad157e2be2ee19772a730696e41d626593a3765cb82617f9ad8c2c406f0863825e76bbd09f96afcbd21e8ecd8d374a62ef63b933580c03b956242685edefb322ce425bc243944ca135aec1992c03556215c580c4f4deaca7b08a3370e4585accbe6a0cf2d21b3331f3d478359fb726def3a35678179bfe74f3ccbc705e7529c7a1cac8cb2487b8e8a3b577595f2ee1a4e1a7a1432270a49ba217e8e2eff755e404de2fe8e1fa273b19d3ab3d510a79e3e2112d30b05f0b9087a5a3bbd5e64e78547cfca8d48b3d92a398deda99f6b65bd7ec0ec6d9c3de671ddd0e757018a41c7c411005e85c2174c0bbdca4865f98b665b292a12882cd7073cf651c5469100aad88e39d95c6b41d8d9f2e7e00c415cdd0d77b77014322052b668d2db80391b09994b62fb33e3549f067c27dc3ead69d37bc9d9688650fef555033a722313646243db90174ea3d05e507a1dec5ab72b998552517e9350866c306a88fad701e5b3ca5edb31f48d74245017150c724d9331ee73909664df480746a55d48dff14a67374af2fb5e29f6e953ce203e37998ff12dc599494bd721eabded69d762c68ec7abc2a05d9081a2c56067364d4a3be4b1b655066ccfd5e30fcd8a42c917e5c37753f9bd0790e55e1b65bf19a04baf02612caeb46c655bfba7399987eacf171e9e83a59f398da14e543493b0d5cf6c7bf21d00d1cae590663c237ffd1c9bada20b16eab38d970f82c2efd9476ff705322b42daf555c6e27c82cd7c27660c4651728e4124f943b6df56ad5d9da9927fa246ad686db3a5e697f3406e475adef754c992e5cec6370c40e46cb2ea9155460d6e8900ef8cad7f1eee55f8352a5637c6dd444a4bfaa266088c41e4260baa25f4e03d86ca86d36e148f11f0fbf1e19612beacad0e14a97e57fdc0d8083b4ac2c5a10e528a50931a63dfc694de91397331299c7b3a6462190944f80d458db9de7878e3da87de1520fb26923c20992c3f016d092940d640d570ea875479bffe5b29d90caacd88e95dc74614f440df471ef369129e2ef726a36f78c2eefd43fed6e60e7b7e71f9c993deaf07b0cd76ed19cd280434ff88ee8a92057316ebe7c3d0e535ddb6ad0b2d5ef9e6d9ad86e1343e77fb9132922ed602e99a31293d62ab6b87962882b5057461620790db497b1d3b6e220c180fd9a2c002c8825702d55adb1bc06f05a364dc76424fc107b5ec19cfb8744d607d5270a2789207447988b312cd20712ff71b97edc9654d0a00b1f3e5f27702418f0b60632064e2af6dba66371f2b16426fb84d64cdb7c88ebc74e7c6db6bfba66739fa09195f73615c4f3460e9ce3dd7f02b80be0a31efea40729eed11abbd7f86ee9ce5e371d358dbc2c4548e213d6bd5f02744d331a2b9e0272a09a148080457a7cd9d685c0adb2437189285d4c39f21b66ae106ca0f63ad18a2a4985033f48fe49449b2980af946d1c627fe024fe9f2053aa3cbcef24c36469bb2aa0704d11fd75d8dd2931e0d47c4efbd971c7d1d66a440bbcf85b0a91ffbfa867c51b14bdfab683b8f0a1331dcbf6a4cae4584d381c63475c3ef4ef60dcdd7532dd986bd0cc1d81327cf22315661b8f29fd0aaa9ec322f15af450bbaaa6e6ee2c3623583f0332617d2818a427c301b84a4fcde2bf899c81c144680b8351fd20eaa1932c4de8ed8d38f534a6305875d2f9e6fd8a1b678f9f6f4076b38a7687309cb46a21cd56c0db1742225659936632bab9d9110018d7d57f515edd58736639a1e474f146d8f6c27f6de9f7008320681de214db56821ed7932689f03d082292bd82d7fcc748c08dc648195885dd2e521d70be4562088009b452be1a15ef7f049b9216d620ddbe027806f11f9566446e1cc7227caa8e89b8c1013dfc3b3ffb7950e82a55a6a197991f4049fd967f7dfdf9147c099b964c495a2eea5c471894934efe48f246c14fac72d788e180806d460fb2eb3196129b5f836fdea9f3edfbb6afd33ee703eba1232811c91f14bf39c87cc38a4aec407b260ab7f48437a252ea4336bd6a7e8572dbe993ad63b7421b76614509da3549400692dd0aa8cb2ce05bdc457b06ea001c35853dfa1351375209de3dc2987df9a98b969fd7e4b8f4acf06db5ea0eb32036d023301b1cd44a383a38cd7dce306f643c1b4f8dd2a5d63805bbd62c0783915ce9612d81d912448cc63abccae562495a58df8298e5e1dbdd029dc2a68cb96efcc099d4f477d40ffb5aab2e018521648f3f71b85e463432caa01f041fa50ea3432e5dfc59a4c51701852b858847c7b6036a041583e3a1e53d837a45eb67e5764f9a0db3e48af9a164c7e1e3d6527006ae8c7eef42e284e3a33f39cd7b12ec6713831b932e3e64a6e4fd025dd48b3c1a6b2d71fe16b1fa167714176dd039d010838222920d392d40721c5a9a86424807056a8749d4e90cd4cb048f30c93d813330a6038473cef39f67f7dae4099ffff60ac5aa39f17456469f19f684953e312e4bd616e952e0b1fd8ceea4bed1cedeab614e6f7c9cbb992ebbd4785ef44c53a2ccc7a47dc853548f1557262cb2181aee1892b610304395e6d30fa7fc84ed3b240f119df4ac3c76eb883b05f720167741896d867da65353f60967243d5ddb926e2c61752e9c974279ec4677c68978126b8dfe615ae14d1e8c158418a182b00aaf10e607f91ecd2b2b8102b056b05c4032e01757455eb30e28d2d9dea625036fd189c39570e10b75d127c2a73771aa9a153bdb49561dfba3edb5062c377cb2b3176f6aaa8806b3f49dbfe2eb0584b67099962b41cc2ef94c03d6214c223a06a63e213f2d2487fe0d1ebe010d3c27753f7b2b23681ef2950ee57e7582074483db58784ac014c595e484399b519341ddac4cad9d96353909cb591dc996f1952c0cdc549ad2af0bdb42907dba765b7e54d060bd2413cd4af9d980ebaab0725821dba56aaabac35454b146c4129248d53dc13824addd19c803483e87d7ca928d569f271c1a6a983c99e1e3a396b7137541652bb90a63496603649c5a4d0920cb8e921b8bfa5a09d2db394f2bd318c23732fe2d186e9fdbcc3ff4a2ddf9798871581aef9233f63f1a97b5b171210032a15aa181bf44dbbbc947656c720d559475f99bb3fc891fe324a9a4eef03f973afe1efc752c099dab7d57d9442ae8cd7232c1b5002b5e719db13c459df817bc68bb5459021e7fc130ba88efa984b4a155ae12e98b20d9272a3c99b5414c51c6054d9d3d328b524dedb54b60247366b371d3375fb7e7d3f74fbafb36c0559b6687e0591e4449d2b9ee01eab21752d71432eed4971ff3b385ada879bbace31f970804ee5dddac160579a1bb3e983e6fd4cc2987ad072f6ce18f9dc713f58087d4750a5e92ca3efee7dd2b3048178ceebebb0429b31de29ed83b78431367b93f35c66c749a974efe434a1c90e5248a0cdc1f51dcf3474d7f6e2baefcba5f17e3d5c2e9017162621891c4a74c3f8b64db9be6bf5fdb328c8ff47a29939fbd1d4e8d1575a4d614b64b320cb25950b21eb64fed7f72e5b7c84f137441a6f31827b6e7fd90711763f8cad044719cc5f2ced52029cd505482bfe2cd774f602cffb1c4a9de46b79fa202bd9c2934b1f150b5ac9116489c2e3eb9d59da898d85f35355146859e726794350d95279a9212de89f55270a29c1299d10336aa3f801ce81db74d2e3293ad64ec855ebccab6ca4d2ceca6da531f99e925b55d97a6d3c26855b71ed3a2a9a5ecd9cb28f715d7356e4de49fdccd00f537f0834eecfde424169c6724ca45d92ad79e9f24bc74971995a867c9d0944435f9effe34f631d3824645d25eb454fdcff9593ed37844f8222c16301d28019301f7263c4aaeea0ddb4f2aaee11da7abdc45dd3dce27ebe9ebfb9f42c9da68414496626f345380a438acb2f7e1e8a2f401191d4540d664a02203ec66edd75ec35d853552259fc016966208f45995163fee77d622440ea723e4a3733da8e04afb6e3c6a742efba360fe90103ce898ff77279d88e0a88f411aeb2b6ed0d075333f2059dcfb6c792272db1089776ea7106207bb56b7599e657ece24e7d2d675b2108c68ffecaca316a8a31ce57b688c85e366dbbbfe0153ed607e3a0805ca3355834f1b37fd79a96a4c347710438b5ab293df26d171c0c908d89321db09506d0fd5bacd8b9c6c645e2bcc241c1732c6b79af9d1ec170e1c2c15052276df0eab8902fcca96a8ba5ba562d0e633becb0b8264598440e3e4535924a955f4ca4f23cd0b7aee281f0b48ac9ba3a1ba1d0dc591b743af472d4dd11c37f0b15e6487788ab9616d00f8be353997788cee9006dbe3a8deebfc3fd84d23685d28ccfc2a95ed3d14dd09ff49a822ba9000ea1640baedeb0f3ee2d45fe2fa26e628a73536b63008f7cfc2882fb1541d494537ce7fc6f2d612210c9c4eccc79c0b577c547c75770a97dc4b1838d0f222f3f85427eb4d71ac50513d082722c6cfe5cd3c5171870eba3e19dcffa62831df86f09f3366054cb23d546f2ebff1e826c1f9ae2ca3e812bbdd3ad1858ebce6bde7e5ebd375ff4cb3a41730cc61af7599443d10d291434706b4ec9df908901d3347ff4f27d6f8f3e9a65799a99fd6a28096cb4c42f8348ed9a5443a68e9e57e3cdf9314d3e45d20a4cd76cae7c34bfd8639d481ef0167cfa7c8277fb02c1f315f45d03f1ef938b1d8271ae38f31a6fe20e6cbb9c50448e3a96eda619952eedddda7be8bfc90c13ae84c7dae0d5ea85aea0b23dcc607940c9232f7d688f50ed07196cf4a9af3cb8ba9822a5d23fdbff9a7d03b6fa731d09a2f29a8a401a809e6287ba72919285a617398965326fa9fa2e6f6394246ef737f43cc44acc189426fb318c3fd7be4aff2b39f86c42b97fba16a825e6894c5c8f03961f94d83afd8b211c85ed5a0b836f5b6ba8660524b391dbb8d8e3e14390c363cfd93a55b2f92e03d646c82d479f56ccc6356e6b7d96c4c3c0e4b43bbb126e97c6ce7e7dee945add55a4f664d48bce65e63978e1187650022510c302f1463e08b264d3af93204008b5e36f497a2e9f7c15b6f1748273f0ed0c71a19a1dae2b7a3ede2912c84a9924caa6dfe9e8ca18e306955da6c7447e1a545bbcef9a50471d08c5ec750e82173e9824d56a9c281b77c7f130ed8821ba058bbb6ff41b59f8cf0759dc558c975b7344377f00c35c65adece500b12ac88aa87bfb95a4b6e792e4e9589afc7261d26633e267d2779f62e1667ab3e7a0ed64a16007a656f1db7a326ab86edcd78a54524bf10c07f4215afa822b7263b199d0c0153368f7467c13fdf8c7606f87ff46ef4d696e0db003303d589862cd8c2ad5289d91e33f9534b9fe28a17fbf049f4ff0d2997ff3d211f8bf379f6c857fdc77cb7bef1bec92d233e4870a9288728cd8d41fefc4460b8665edf61f4e395a36553e084f8d5ca78f29a0dab554f6fe3644dc1a3542cc649d3eba36232423a71eaef0a4dd1fc19eaff3653766429920de1ca07f58bd42f95b73b7b9217ccc9889762263d8a46cfdb75ad4ec540ddf20a198ad0d7766094ef405b031ad5460615d664e2f5a1a4824211c7a52106621df2da25e328d8ef370f5d5424e5d41a5b7d7746ab578fed03d618d6d2c38c436e7e4b6704908580a7e669154c9b84a91a27bbfcacf91bfb37ab746ed525802c54ea6d97a02ce413479cf38472ca060870e55b3af954bf18dc3bf4a21ada1e07403bfd54a463484ddf133b6a9eabb0ff02b703caaffc1239cea4ff6173d2ca0a903154da807bd56ea4e507fcffcecbee30203578477b0c0e03c73fd08629909878e53e960b04afad23cd56583409aab551d592585b3ff0661c2e1f7059c4cf088c3453d3f040713648e21a7ee14f221fe677579918c1760487d783f7b11e1f7e848ba5159097cceb3e81a8a2c1bd8e4540701458d08d02f22faf442774fdf91cf7b8383f7c99025955afe92f8cc7dd13000640910d51a95f43b7adb6490b3cb1bbefcd310581817a7ce69b149f55704032c68dbc2044276712d296c3ec46f0465ed33114636b4ae41d9d1868439c22e658798b60c1f0b33c093a3ee6901761eb43525b23cf9694f69003bff5308aedcaeaa9addfada9f0710a8da02453de41c394beea00c84d1db560a77df1ba0006e358ec1026f41c0ed34d6fafdc7d6adf26b6c3ae3b0b263c90306fcb4875ff851015574d9b0f8e4bf1ba581f25671b44fd0fc31dbc07f808097e13b20e8a0b87ee0f71819350f46fbe46d3cb36ba9494b9e8f27bbed03e00a892f9ea214351caed6b22421a22877849aa64cc59c6520a0b4d513d69f6e8662da9329e8ac8245ecbbfebef844e14caa29a51f05bc0f65721f8f68608300f576d1716cde46ccd3a7910c9d375f9e88fcbbe035076292fca089052232a0af2d0911ec852e5bd834271358acc350274587770c6de23899385bf853cb4949a8eae9913469c0c1fb6b907a43b28a8ab768028d4cbc872f0aa9e95eb3464934ac3b01af4cf1a601ff648b165856c1dbba59ef1d2b4ad1fe2c344fe7aad1292ec373caaf74f2d6459f43eb395797ccab59c87726bcb2878749e1ca2b6bc3f4792f574a91a142191b8c33b2ac9321acb979848bc956379e798ffad560b01daec2d066334ba16148a5e2f92b9a97295f67e48592f07ddc6edc28a35a61febed45f2fdb2e41bb529aa4853b28e847cbe7d56dc4353f75f8adf1f83cf292bd5c621b63e5abe05679b71bec56feb6b6e1c6b356a493a20c7f40ff3de3e9435494448c675dc2570ab0dbf02f6c5a2e7cb4bac3afd0a5ad808dd7d2635103d67b8b60e0f34d40fa55bd31d7373219946d830a1ed4a089f7614196f220ec50c1a736917324b6af12bfbbe6d0b58ebe7fce5014db647c7cf7e414541a35c0fe18d2353cd88ee7bcbac34ecb36e0b516137935b520f75dc8545376f957307dde1fba140a021913166b0057b0d1a824ebe8a91cefa2acfae7caaeba66180fc58457589c116c713af26da71bc30c1df2dbce14f9292d9517662d2518513071c8100343f9f8c324fff3d450437588d40e8dc7b54b18393fdd0929a1b8232511c575544556c07dd0bf72bbadaa45700e9a26d620bc223fe89eeac8441b2547a01f760fbdaecdf0917033ad88336a91ae166e2c96024d1364b72a5087d432e2f984eaa9f30df8594d363eebe66959aefcabdc537d74e79585d1d59b28ea567828c023db421c80818f7918106f91a7f7224748ddf7e7ec07b168e3d931a705428be42e20150996a95bf1a45927cb26d3647793667a014fd078c8704354a006bd59f16e3d65c773f257a6182399ff959c063d01355f5d94e49879a10d4078bb0d668e5306e06ef97eed5633c1001e2139e3023e588b990edd755f6f9151d4fa0fc19381e49c062d9bb8d422d5f4fffc9b477b30f1a98f834c4dc6b47cfa6421b4f2c348547b2b20f0e6757e8f9e1bc7b0804106de6463bb11e9ca435d8a873f7737571c345db557130323c1e8a7044c4a5952bc6d194560042d58a19094625892a4c355553b274a9aa8a0bdc63db26d2d79eb78d55c8610283275d9b8563505c2ed7d6c4f64de41b546b0203122eb9333a3160f97a3ea9380fa27373b316406ce4562d18623ae2a06cf48bceee2936e9288da4bcd8564108939811f69599c5e225502d9ceaa96fd8def7d9d9a8b3431f2487efb4acd473bfebe50209b16cdf55cf03ae8d3fb9a6276235b4819ed7cafa4c2a5f5cba4086929869eadb66c47b7648ea3e7801a5b041d7a6da640daa8c9737895c90501e6731f8e9de42ade3ae7c2388690bfd58637eab038d4deb0461907c9376aade809eaf2489804390b6cb80fa09adf15ae5e8b6629a6c0e3bba3ab08b621c596220641ed4dd1ba412a67339f17bff8dfd906f0376176d6a7b1909e611eba41ded7babe57e6d219b0c3e75e5b359d9327cdfb94065dce054de59e57c328ca6c225f420fc5b71edc9f0077a2f58da30246ab6be5f4f15cc4f46ac85f7bf7eac45aac25ee8d2bbc7d2c9e5b85449502b24b5b81ea4c7b34e345d3f6a053cff351040a67f264a0654064fa04040447a7ba88c9fc9d2ed2f595c6525e0ff8da1a1d03cd0f10c9b3df14a6cc1c4bfb6ae86c27a82e6ef7822e9b7a01ebfa4bf2eb969f0f24e859654eac092233486452f7a0ca6446459148d1d397c8bcd3d00fcd55d5a663c12444c4dea33c29cf22ac62de34e471d278afd475eb4b8b572fe55a00e034e66fbe488b96fd10bc31c75bb3971d7c2f60f6f00dbb765bbccf20acc9fe40c2c8eb99611391a263466f2f72462c2c2fceb184f1b054184da886d05526ab120773bdca474c17dd01319bbc6874d299425fea296c66981ca9124e40f1108c9fdb7451a36170a8394e530c2a7b89a13a477c0efed3e7f5b3f105b12c25bc7f96a7344d58b01b6d670fa0af34e40ac8340145fedf558cf42c5bc39466ecd9b0857d223e5e2fa8157adb6b9bfb62eb527661e84fae95a6dd79f6e32f36c0de011ce014e1179a6fb6b3a9d0ee4509e8ecadab1cccb4f357db28b4d5586aed560c012eb64721027d8685e8cecd298d1c073d55098e078ed77134eacc6cc01e4cdf3ad6363efe6aca09af7d0dccbeb85c174ec680fb3297a27aeeee932b1c03c80fc13473628f4093155c86480cd4c44534be5ec6221342566bd2111aac69fdd55dead47a167e035cf0f91f030f81e01daf800abe7150ed1e0ae2c5142f413bd2e54d26c3c35d96b001537a03415470ab2ec94a71b55781609df808c09658d2fb5904db43a8960b78a88a9b3b764a32a8c87aeada9f55f3444e8dcaeeff96b25682eba5a9a74361da51c4b751b4de7c94ed96debadffc9bdd409a569326b2d92748b995485fbffe3013831363a815924f1794d29802c8484ae9aab2b77e56ee832e8ee685e6919e108aa5bbb46acad58e02ab9b69810093b9fe4c143edfb0945ac71776d5852d517d31e268d2fc5f8635c64c368ef42a6f884fcef612f072fb169649eb6148e020258bea451750bafeaa5cd02adddfe5499ddb354a82951d5c1ecffae16b707ea7b07a1b472e65198076d76172730ed1a5f898293a7718fb61ab0e2a212ee66c26e07ef18c240ac5117b58f6a77da226c9f07f80a32c87e3fe09cab996da10f1a16f38acce29fc8f556a4fada155296e80695bdb188fba67b2fcde12efb6cdfdbe79b853a3635c70180f98ff16161315bf81e9e963edc82af1bb0a5e690fbd460ce1970a5854ef58e50321974b96513df96431d0e77a8c8ce7785759c432c240efca6bb4ce8414104fe482cd1ab63d2e51fe42cf36bf5992022938b2711e69650552213cc488fd83967056b65df1eeacb849174a2adf28d2f1eefce0d7778d86a90c519a8d593088bf250b9c5f3db01596143873b1aaa8a0b2a290edad0fa6c7015563ea31ee2f4e241f4184f17a518f2f6811b5a2cd968b2ed225a46f4d2ef4fc89e27de2378605570232db5f6023db2db0c9a98bcb779106f4b4c4abd6fa4236d46bd2f183f5b8a50e08d81298ffda02f862d4aae998bb222e56b6effe3446bc2bd738ca3674afdc844808d293b1251f462923d01818a3e326243c3da0dfd03a4931fb185c3e2c3a4843a1ea04cd6ee2f81968293cad0c5073a0d86bd5d0dc3fa8e1fb3ac3a80603e583deb0c8488a08d977fb226304144ecebccd5dad25dec1cacb981e5f6e6b18ed3209a3415eeb1d17c2b05c134b0f447fdc9adf8b08367916657d6b0fe3423a9245a33d954c3ddb1d14a53d7e5d23ef9537f20d094c0e1501e9c22b68e5a422aa791df644ef9be8e18392502eeed7478a4daf5bcb734b41f0d28353bf8c0bec50eed58e6027686f3a1056f02c3cb141206f6c9bc7ae8a93fbaea97184994cec0473283646397c347a9f73ead9bc7d8b7056beaed7dad4c8264bcbf61041715f632964922d427b45adb23d0cc92e454f88cf745e29e94c476019a490575c2860a2ac0289e101a742231dd7c9674821bdb50b16df6568b1c04e227d91dead227bb12ec07acd27251343ce9a0c9dfef3bbd8753761c4df416cf4073afa19362ef5ca5cd15cba0b7c1d694b69f4bcd6413de1ebc0538a2c6e2af0910ff9584fa51cee4d4f79f9be95c065f0a7b7b51eaa17cf2a19c6787633a15897090f6f611f626a7062c6958dc28d23013db8c0405418a0e13f3fbdfcd5af840142609df1d08d98e8d3cbacaf7242d759a011fd8084e8cccfc3601882d6446797220adfcf90335193a0a7cebf4e37793b7f1fe9be47f1988f9b6b2e8df570b50f0e998c3725d5d63ca73b954c7e2ade54d291cb4694433f7dd9c52199788b701f0ce14eb589ede57fb0b69f558debadb14b0b6beea49246333996188ba88c5770f6951ac13516351c3a9f51cea39e79b941bd02ddb308f52fb324e884d2ae31767c8e2b1059bcdd60dffb78d6bc2f239ee3934c73b22b0d52b65f305bbf10189aa3d9df5489f746542a1b2c72e39c6e81840d9fb74aa5490bc5e9a39e804355861ae8efcc2ab9bf3263f80aa63b37da4fcc046d15650c04c871af203b4efbd1cd11f3baeed59cf77a7089fd04f0ec48f327ac64a59f58d461b1b4406ba8f3a83a91b0819dce4b6986d32168ea5eea95841ff84d09d32434da4d73e4cf0c15d93b14a9969774ebb1627b2ee0871610224aca03152128218720efb710f4168ebecbdcd4441aaae95f22fa0865f47a1a62f68d6c0cdee8ad2c33f5b62abb1687b1ba232e66b15d71c528cdbfbc59738fe0c9461bb2456084e3dac10dc80cebe3734b251a2987ae7337e38fd0a1f44322f1dea12fd7baf5705f8b9a98e97dc6b77e1a408061d95eb3ca32c5795baa32d9c3c666fd247c7ec4b78eb3b92d06ec402e404b97e3cabc70416ca0650998cf2b509f09381c3e6a76ea83aed88ff7d17e23e887fc10856a265dcbf9e4ee972ccb6a2f520ea822d426779dc4c4d47c5db2864be5e6220e9b0fe399632f15c501c5da20ab0e078528ca26f68a151c6dd8e37f545310cf2f0926f89684e1cba07d0bb0bff1d6c015a97189f1fc2891f1a495c636eb96a0e9b94932b1a141b90a327e9294a8d1a89e909a485a6d9989638bd5ccb46e0cdb5386b388353700ec3dee3b22b09d878ef913612d671799c0e7abc67da711cc67ce1afa9ac457cdac29553e616e2cf0c032328e1b94e1ab1f075d3a1c2d66050c4a23fd6872de4a150b3cfc5241d8c7cbfa13cc01952400adccdb8e7a19168f99cefb65ef752dd741239c57271f05de3e1de961fdb7ec823fcbdf70f2d08a1a90ab91049fd20c2477723cb26a8ba93a0b20825b3f27c06066c3ebc0408286c711bfc2ca9533fb5446ab0cadbb2d42449f903fb8a4d4042eabafe6288e5b06b0c1e28ca1bc1c07b791eadcbb5d99cdc5ff98e08da91ffd965b31888d267bcde4cb6fdc95096a4d5010e991cc77953703f5a9cc647051d9a7584193f6be9d6b9f371c3f326078d3334c08f1961a084c0fe54759e5b2a1358c660b80bca4eb6ff15c175b93bfb09839670c7da1b6387e2282ca2ca6d9c20d1c3259988ddcbe392db866c8f482bb13a2379622938a11787e901decaad12d7a321416ff7ad58cdd4d5b1a274f5b6db29a993360a21087f124e47b297d474e7eb41bfb976e79d433cce8f0e4a630ae9fbcf81ea812a8fff79cfa4d888e81dfce434ce6fab88de3690c1c10959e98761bbbc8799b564c6a427a85f4823c7837ffa497c4dea675b199ea64e3e5d5dbf71195b371b6db85ddc4ded1f9766095f40feb0da4c590ac97723044b71c465fdafcf49adad5f57c33f9c00f687e14e7caf058a286ddc91eaab209db2d4691d03a01fd4f1e1061b9c66f45e313e99aa2bd1a3d659d7b424aca748db80d46ea60e6b5db02de9a41b94785d780f928b2b551d1d7decb1377091aa18aff1cf825644ac5d83dad11872939eb000b6adf1e5ddc2d42514ea01cc51131501df48e81db2a02b146f236dc9ed0ded554cb045e36c96b79944dd5c52f98390d0a022a1aaaaabf2062a4b54443ac5e9c8325bb67fbee61220f3d06e37b54eb68cee88183d4603704d431585c8560291ed4e593f4731daa20fab844bc67ced8b80c8dd161fb24d6079fba92855143dffe6b0f9ae239ddae1187b4fac2c8d8397f6919ae62d57ab94518cd0db88d56053cc354c7b9a5094ba4a30acb5a9733fcd9753dadfbfd54a4e05401af4f46736e92793d317cd1c349666733b363dded45d22493b8e99b2ed27d5a5ef49c9da56aac3acba24ed071ba74bec07c9f2b7692d0403fa81ea44896ba34b8181767632831a1f7123583fd60622b21a73eebf647cd35c0cc86f756392aac83a118e8275bb374a02b963e99cf8833e6fa04199e1f156b1a1e84fa43986cc05c4241e6d5433ade1904640bbc8aec77c394b46e1eecccbbe590969245706d948bffbf8ac531a236ac2f1ff8a732789331e53478f380af93aec505df8dd0daa676d45496ad4dfbb80ae82a4331f7fef1e6cae64db666002cfa7a96b58f479076849326041306ece04311b5a87897ccd75b66abe513f5a8a867f9b759c258ab5347ef0667b3640cd31a301f4e5b307545db02cb99c2fe673bf255ff6540e5efccf9b93a638b9a4f64f76794156e05070aa5b8b86a8330202b81227ac4a6cd163ff4d56ec9477afbe0118f7bda360f4ba702f3db89f2240af28ac12eb7f924d3ce69601dcb36160f9baf7f3d9155bf5f76bb9de46549168730bfe90b1e8a0d4fd628b7ccf335a66669d915b1cde9e64d2bc781b42c650a32c25943da237daf9a06c5edf75b48dff4b6b57980a3ff2dbdbf66933c158e1aa40e94651ccc3e0a6f1f59286aff7655e9c7bd3cf73cfca72576dcc662b065d9467bb06c96be0499b2f6b90b357c3802872b1d8ab9a50f451e4745616b77f0acb32e728a008df107f9dde1aa30dbec2f1a802ce6c11c03074addaeaeb52df726e4ba76a220c390b9289bea574e62955c7e3df29a61957e37d55e5b5483f81eac5816fc21ac329a7b0fc2ab1fc8a91ca6e3e4631b749ac3201397b244e4f8a6c97d4d3fc371b2b015ad0bd919692acee036f0e73fb4f0ca64f532c21d4cf88f566ad9357a13b10b1770912154e86d58a8a83a5f168e778adf0a19c1ef8eb760b40dd182faedeb2190fa27946836dc60f5d17dd841beb79e5508deb4d82b704130edfabf09abc89e784e040a0412aa1c9e1c2bc2eeafd722a8956d45a781abf7ac5a43e51b3db8879ba0eced69d67d6bef14fae1cb12f49ac049e1d4dc12a8e5aaf7b863c711bcb26fa3ccb697d9bc9b7fa159a79c0311415cb6fbceb3769115bded0bc7a391c79d70b506e2f41cf47e2fb87e8817341d618cfe35ceb850b81f6224973831f20130f0150c16a65d92c595031c539af9b3039d951aaaafb5c57a29bacea6991cf861d72943149b222061501ac8f08bc33b0c8618df872143ce20a26815e0c1584d649cb8b290088811a91c07da4a27033c17cc09a32b2b81abd65fec28e0cdbd894c5306a5e5de925b08c991f83ae194509a16237b3eec3deac319fcc0121751f9a98c0de08b21946a3b903da7568ad36eb2f92cba034ad0b61142abf03732f2f0d26ce1090a54dd5e662845029c94ba194c780b43a77db4f7a01db1a018ee8ce1261e3fe93a843a79907bcec5f7d340b75a65cf3146b6dc1bf552e8aa3e3094afbc2f1bf2e5767aadb8558b3bbd45bb8cc7a2f5212e7620cf007f427e2c04d234336a531e41e7087d404515eac70c7f2d61d445d986d6fa76f63763265acf448941781a2e0f76614a41ac33cde57e061c8b8a1cd4d166150ac1f192784af0599a09ed5b6ed2a9fe97fe17099427b1949972c8889b4bf3341f49f1ca0a21a90742b5b914073d8dd5545d7f89b342073a00c35c3cc962a010bebe117561426d14fcca9607d3fc5ed6c1b141458dd8f2903d1108389a5c7178bac4d1110a0b2a66660d24949731ebe4b80f7973b2db31220eac11be1cc1d2a66c18a1b6b8e918ed60dc51f853f86053d59ef93f3f302bebf8e47d205c36f166bfae22ca519f6faabe70f4ca677b338ccd8b440cf9419dd25fb7f47864e56cd033839bbb1eea7241df10cd87c2d0ef4a9e75cb1b494ee7f4d07dde3dcf34005f1151db45cc223e292cdf2a4706d3a26e8de54c4fcd80e0963fde983537cb31eace7e4a9fbc7a84bf852b89534ada5ed65bfae24138bf2c75d925d645735bf17a52ec4cb4eec6d986d9d168508ac09f2a906c3250e32e1b0afa2ca5cfb806b8ce1435f774208a33dc44da423d95fe5dfeb591fe80f9930e31b17080eef5f368e39a68dc18077ca91b0a1a7671bfaec98b2e7cdf3b10652225905c7ce38b5ec26040467ddceed2d45cef69d95728f37f379b546bb0f8c7121b69ad8dcc9d5c9b9c8adab7a7c46f3d85865db4f779101cfceffb3995e5e950311fee5d749a638c135a01ed757a290faa909d2298f7bd62cdd800bffaf2cebd1b0dfd2ff71c5226ae0588f2517e20c5fb7fe939930a96aa028914cb894c517a70b48187c917f3a37bd401881056128ced571544c63610d4e40437ab9a8446d644824d565e6ea42b1e208114cd8022f14a08e0a411a7b72a2b1cbcb49fc1a39233b21658aa6ff23fee4413ad8b14f342b93d6cac861011236160a680b85beb80b62958dd07169a51a9702cab2c6ed1e6cb03185799fce8020e1a0e397f68ebfe041d506c7b3071cda0fb607ba215db59863592ec66a112e2d1165639208b5ef2cf93dfa205e50ea1b4a6dc573010ba48584baa309a44a7fa33ab5331d4b20f3c26a7b9e13fd6e76b99fe07cc5948a13806835afd937b9c57d47b33234619bf9b70408060b38a087795f4d8809f5157b006d5e6f8c95c43b9a007efe0c7ce80a38097dd63217ed4a190b7980e4bd2b96c85e2d9c3646c299e5c6d2136ab706c3e004b0182afe8212af9b7412a2a8699d8d16117937a82338efb8419cbeb62bf6bc05daf80db2e1b7587d2711195ac459be5e5cc5656d8850b0f052c593975fbd77a9bdd5166d167647b924ec42bb1e9750fbc2a9d4b0675991ebf67e1124f878402ad9f0332bb8fe49416e839b19a64f5f35d41889ae21de30b7004f51013bfc9ca254ec2f0d95169a8ddf0af98144dac39c152e69b266846ac6d1f6bf5fe3f82c49e48d2a91a7a06cebe23b5c968e92ae8f4530993383f2d2be207e82c0738adc72a94e2c3b35d310689241d7b2ba8e4c9ea1abcaa8492b6c49e47ef2d700f269653114939f983837dc9f3c8b1ddeed00b168f0b82dc4a44766a2eb2e4954c1483b5fcc7bd827e1a96fd4ae24f372c28931b3fc133bf892a56e7b329490c6fe4b1c1b24fdcd1c619b02650a354ed8a5d3d73ead148f0e89791726eae968f7d8516ad3df79b29d62af141ecf18958516d187ce02041a7bb91613ad6b99b61cdec326430e81e6a44a478270bfe396122badbb1056869968475f8c6876a604bfae9ae9626969fea8beba4afb68c78a416bbe41b75663003f251b6e78d22e7732384c7e132fa339177dca2e4065d47c388d1db76fcf694b9150d19515964cad82271def1c265e0f4168bcaa21c22b8cb684b81c14481a37ee6bf6a266aceb800dc1edb6ca78aa96a00a8eb604c66bad1637b37f637218bcdbb10f256580c5589a06de83f8082e6c5f20e61d422d0973c532e3c92854cf15cd9dbc1675ba77a53ed731208114fc1b84258f83fe2dc8e00f109ab460f433536d75ef048027f15f9b9dadcc887c0cc4ec1965e7a6f54a0b82c18f2375112f283ed12929db628b817181a859f1a04facd7dc59ba74408858642b53877cd830cf1febad256c71c8002ba5683826bcfae6f3b14b7da56b85da349d07abd7cb932ebed3d79c24f9921a7e83b098d0ee8dc9e8de0740cfb2b3bcdf540a9de27f353ec294ccb14a4f3ab3153d113f84392029e81fcd53813d361bb6a681ca3cb05278e2044f4be1216cc395a68c20df905e3665a0462eeca49f7aed9ad36ce61faa76fd729fdca17591df7280df86df7cf93a2f01e752c825ea0a177fdc627a8298d7f47a0954ed967f25e0a9baf929a5bf6c795a2f90e5839ad0b0ea0f9b6e38b50f0cb08bceac969c9d7ed810f1ae5a70ff689f73fb2125b3d453f1ad501508c8ea59625d8f435ac99082b0bc6832e2140fdd1d4fb827d6b118fb65c1d43716a6450e217d8681c67a96a9c1c4e1626538a3d0f3048b977da2ddea2c656a25d169a55a5399590623c93eebbe2d0b867e6ab1927e5af4aa0085e746a05f689f1e8d3d622d7f4eb93a8965216da1d19a76826f6003849521084a85fc4a5fbbbb22b2b40bc9630e93ca93f916d69f3bca65815b7044b76d8481d9d46902cbd38cfd6249ca121fac5ebec000522e84b3932a2bd25efa2f5b7373c0e95b7848f3ca0129392d7fa057663ced1fdc85d6430bc838b0cb6f0339e3f588d79634d7165b541ad97f63bb0321cba5e4a2b751e6d36ba26f06291ce8072b08262f9b35d6e692578d5c1b2dce6eb44eb32f3420d1100e4ec2a769933ef6471c0573646ba3c2f5dc412f5a62d8d1e5796fbe0482654c63b72395c08c786a9871d7ef7c3fa7d79d433ec39e03edf32425f427e254e9844701ebad626decf111ec150b4d790caa31fc819309e1902dca7b0c74e0be3436bf8af57834d6ffc7e57705fe45303173f7478c1926db4d6afe630b5783a80f2d63f8675ce1303cce12fa2a6cb0886b0d39c224497ccc76373fc34fb35a93a2d6639985936a9d9723b02981b69dc729041ae90a2c2819f646de32888457a0b5f3478562d199cff88ed53b2969f488cf79f3b501be56c986ac144b80be33f9f1e26b980bb6282a00383d25b773786ef06fd7f69c1a6a0ac95ab56184eecf51892b5170fd958168bdb17ef7fa0772fe37412b291df6e6a6206cf37cddc28790141f4fe4b516344820474115050df3de1fe4057d5429ae368f01ef7846b35004aa6ee3fa3b42898cf6501848a772b746be5d3de7bd7f504f2721ebc474862dad7903eb07517c3ef21fca80e3224a283a511b92a44ceb78477ab2fcbd466fc9ea35583e9a4686b1921ae35737caff02efcc2fcb3bec5298c3eaa8380ff2b3ff405d30506cae0b6fa35dfd8920a3a2fad6e066fdafb3205fb5a72df11c894025cd97fe3484f0cdb580ee7b7def7462c174ec0400689482a6ba94b7057edf7dfbd8a5beb9889de4431d1d9c9f98f3c79891dc8946d5f92825384ea814306373eb4f806e1935ecc595b04f555bbe6163645914d47be59d80b288071563009870ba0627804e33260b361de85357d3c9236d697c598b684e20bc4743fdcddeb80e5f0bd0301fc27104a4f02aa423c801354042e408c88636bbad5929f247a21328b942ba0bbefa9957409488c12935e02cc0ac67e64db536b0d52e9eca4dc722e337d579272847c2d8648bb54e9e04f187969cf63cb6d8e8ff13e2de307151ff41e21e4b1f1628c69ec656d04fcd28a0a4534b9acf0f2d65cca83d717511eafac227b01db7468e5bd79aed99037b1c6af5043e6226bff89e18da050c4a90de6777f2515f624bb81465303f3e015540bfd3841d99fb32573ce01373d273ccfaa1a9293f53be835abdcdb28ebe77c0badc4d8329ea34f688a41eba97bc519f7f817b501af30a14ed3f5d3b37bb1c38c29924e4ddf5c6c009657c49d660a7bdafe21516f0cdf43b14032cf87e639d31f97bbae13099892ce3c806db5aad7c1dbd0e52d8a57c9c89ce13b36b028dfd42fbdffb3dc35f5d8c61f0fc4298b3aa15156334948b81dda1bc6e2d01bfa2a61b72be15f8706ce94cdf6f53b158d2b62fa92c74b40c81e62551cb10bc3e818c93ebd7e6981262bb1b7e5494e2bd735c62d929f06e8779950b5fb4812148f2f895f859575033223e03db14c65a26a3d324f4ee31beaeaa622f97e33896257ec853b144ea8dc82bb472884b7d4b5b9d9fd0009183eb714b28157fa5e43963fee5a38c3468e8847029c086d085511d100cbe3a5e16928fc953c46d2a1563c3c6f20b708807faedb58727b6c5614596a9c2254cd3bbe9f97ac7613395a9273ba5588bb9670e76c07014deb0e9054fcaa6826f7eb7febb9e2a5203dd6150cb2b6734f3e3812ae969b9d577ca6c32c9d848add288a8f9ff56b3a1b5a4f741537aba893fe1b0d3a850c5bb76e60f4e65bc421abc383a76b61526464e16c9290c85a75ee8d2d7879854b7eed2fd49b4e59fa2dc72481e95d0fe24ce401651e7169e5a72cf8eca0dd324bd0d2ed7439b94c9cace7a057ebeb563a60d6125ec8da96b5d7c1b6ea5ebe01b08d9d05bf4a29cef6551c564d921a579ffa4a92c3ec38dcd5e8f004545aff2f8327284f88059f1189e98f6bb48d758f75070c7eac943f8d3c94fc2947b025e7a075bc508c2ca7e7c2d9b665b386e2783df005ff6b388dc0d1f68d217cc6e9590880461b1968dc7433a9d4c839dc543b90fcc120bd4c31a3b93d691c7be0c0a2169debe286b42f3af8d8d74905ab167ea94f84a224d2f9bbf6adb45e2d1a1eb111922c7a57b638af8d68741351b50b330427cfa98468cb3c1241063b6da3c873e74a7537880afd080f8095ed06860f6a4e2bf0eb2658e1135b55be34999447ee32902ebb412eeff340329072d578c70d80551182840be70f217f4f73655b73755935e364f935bbdd3a8ef53630d6134d5e880edc0c2cac933def69b288fd40fdd3ff0fb5806ae16c35c08ad509239d4e1f905b5e4a84fe52383d4e0944d6d7f98f6db42d51cf3ce24ad1db959ab57625e897b7d2d044e36909363c5be0e025705768088911ff31fc12608038fe10d01bcf197b5f4fced5392f30bee55aefce4d9050c21279255ff599091fef816568196f07547906356560ceeff4799ef4e2c6366ee05d8e809be8a3bd78884eb0b3797c3ccf591becc4e38e84e7b72d884cfbe2de93eacda0f4b6f9a52498cb0fa057b8ee170d049cf14946e8dac39e42e29c9021910eb4b048e1940cb268947241cc7980ad09fd957e075ccb6a12f238342803c8d8ca7bfe1b226e7110cea9b0cf91a1ef082cf38b81c86ca92ffbc922294c70cba4ecc63f14ee59185ff472158a7b8b36c50939a8f3f3a259f67017e0053ddcade9b1288f0a93d22bb2f39927405ff89752b9ffe4a2baaf3d240ceeb67205677d8c86fa14e169ab7efeca3c61753c93fdf2ae3597abf2eb040d09402c9e403bbab00d4a370c10a8932d68267db84a3c00b27239acc21fbcc1110c9da6fe4e49a83fbba97e82df033a0d7f320b876add87f9514fe54917ec83ede41994cfdde23be7550f12291161a896f4e79aad7b87d2c0c528af4d45ac46e529c250295446ac42f6eea888cf6a2ff4d38dc269395e176417c19e12d53b650014ae7fdad49ad8647b4aec0432621f41a666851621427707ff4c40de00736aef20b95627950423c0f1f5da7c265a5d14538006edc011bd50da015b2dc96fc46e692158bfdbf89d0f641684d5e0aa309837eac235375bbd725f4e85711a9242ca8f5d101aaf232d8e13261ff72db6d91e22755fcc58d79c14f5d57d59e8bbccbc6390e6dab86106db5c52e1618810858c5b30dbc9299fdd12831457c6aac0fb95c710b74eb75f411eca5435a48ffaf069ae5002512aa68c0b33c2106ee28a9c753daf963e6b261c994c5f8ef94e64c4ec8d8efb53bd34411a0b5808e3b46f8e402ff3d4ef70cfcaa2a4ea6c13847932729abea6e02689647db44331adf407954edfc7dafdbc7b6a98252bb59835ab54d212bf42fd4f3936fdb87cdb0cdb3c775c37f984f6c1568fba8b526044a143ce56e3e7027f159c9ac9891d2bdf825ac6a9b0905120eb543fcca828ec6a678d9c9a19eef9e99365765ac901b6e8ecb0c87376edf3339ff55afdf8642abea54c09c669b28c47bb35a68a33247c2627c1ee1dfc8e145d5bb8ec6b7b4d3710a5d93d7f13186fc36d34b57014f87ed60eb5ce1fb32ea356b290d0236e774c4c9865362022f68f7d821426f6fd961a0625617ec3d964d083d23d15c7c33c01c9c12989ffa0236519fba8896a0d7793988cd4b2b544ab5e3fe67cbfbb0ee8848fe88fac92828abe8419aba902fcd4eabdba1e93214ab299286daabcd507db28921ed8e41de2e2a29c81f0cb39bb39270d03735ee7216924f6341fe87682e8156518819dc203c7754e538bd68155a2f12313ce92e102621cfb36ddbb7221cc56b76d23c03297d8bac2c910ba3e08f7666dd9d3947f79e6b01f75213c97ee37de1c22a8c2b4fe75faed8f8adb462140323eaafc12258d443256caa01de82c386473465526312de283bc692d39727d84829160bb20a2b310174b7652750dcdf9d0c3c223c246e2a3531ed7972c04c9b5dbd72fbd6c59a58853bb50410b4007bb541dfb2563a983bb48300eaf712c0b0a5cdc2e85939831e748e8ce40ee0f82af671e26ab67c6bd2ec8c492e97757d9ed4983c090b08172e01d2a7aa37e272b4d57ea2f325a9237803aa9cb983ab617613c69fcc292daca4bca8671c99eef00bd566a86d9cf36f4665c6b5e1ed791a4ad19bf7518040ed3da4a79a5cd1fbcea837de4fb3202e7a1076775caf025dc905ad427bd0333ce2a61f20d4cbe7ea97ec839edb94f4b3921b781a69abdbb90b531db4d3b97e62859e9eae1e9e7c3820a1bcae19efc929349fe6e4131267610cba178e2d9d754f71325cda47a932e8aeda4b1d63a14de7ed103913ea386faf01a0c1a80670605db3b18963ecc78d17d321eb580b5e689ff4cea61430b8d990c33d504f717ed158030eff23a897c0857178494ace5f2ed58c227fcec33becd85038946b39d5c3baf38f442b1c5ce449453e1c5abf0bca762f81f7fc77c7e847b80c2dced28e595bc3147c9f53e687c13c25ef99a00e9983cd58b69f0f03f3b4034f80f6f2951a1b2f80ca0281a2a2e6ee5f2a6ff0ad14b5c1e7530935b57be72338139d871dde57da51439bb159d7799aacafeea13be13fde8f9e1a6c5e0267f18ad1cc626eee98ceb57102f8ee669f8033bf6df00c9d715d1515c059b2948e9f34803306d90ed0a83f233be91ee1216b39f99944f5afd5f2d2af10d841b4988c823711b61b4433e6b90ad993a2fd6f3c0eac0efafa7deb720b7e7d34b78a4ac9ac860296b1bf73b512284a75a3207c539b0cfe6034a793563dcbe6a5d34e669e65b7724724f66d937823d75108fca7a628f4419ca167dab7784facb17e23fa341d6ef1c1e71490e41362d912d59fa4be887b051882b5bcf99319e391dc16bb8d7936a050008bce904eb70a730adda2be750d252c69281879636899aac6ebb545302085797c3d71832d0973cb67e668bc830a15e123884376ce47fafeb7617f061362d0d82941fb6fa902e04230d8736ad5c0c3f6dd9d5cfb5a3e80f8d7742db97f8f435f6f1c1103c6ba6ea59cff192bf56637392b9eea5a9f1468e2910200dc90ccc9ca46ee1bbfb316376ad710af4baa9d6acbcf9c8d157673e0c1927345bef6c25d903c70380460c9e4e56e9a57861cfb808ec681ba767b69dbcb220d0b12b3411928f21d59361a23d4acadf847ef3da9ed500d70a1a111967b532a511fe0d2a351379646ee04425fd3657df02f66bd3621348e4cfc80c22a3e1570922091f46787527771588b2364faf966927a4adbe8460b2a051e3303f760521e46139bc2264aeb3b315384bd0f625d3966252ba8e557f496252858fe25cfe319d3ed572c2a7bac0e680876f2656cad8a6facde684422f60d4d1eb1d9322dbc5caf9d329ba3e241a8bac534f6f7adebf4bc0f4f134d417823c69f15ec784f70f0f2b2c9030dd3d12e19cc383e5a886a2ff1caf90b764fe0b6cdc9493d9391c32e723fe516615eb01a54fe0099fa6cde72ced8cc83d5506b0ceb62eef430de7da9db89bd1521c71d8b3379a0484004e30318c9c5ce74dd22b196ab3846a133fa6a440d44ea85fdba992acee48bd832a587cf51ce2766f1100f01aca106113926e7dc9b811826aad60b2033751eb2c66620c86e1b3f3562e20ba7ba3b237074bd35a89436fb9ab09cdcf0583fe71634ca6b29f06c1aa49264b53737d09a26f41793345c4dd4d2d606629d7290c63731720ac960d16b5fd1ff1fc0672a546920cea4198dc063ad1fe3ac6f3a88bbdf3604799dc7ece7060bca9fd6aa86003bf0ee4910576c694f2c29ff913470c4a24cebdebf9bdedb3a343111b65a547ba1937a7ca8e5428479ee314c921dac6e68f1b296669546e51e16d780f4e87e013226ef2d5e40bbeb0dd3a920b9aadffabefa6dbe5e1deb7c29c26a83b3082ca5883eb0aa777266e63b85c7464fd6bdfaaf31e4b4debda79d8ddb934c77ecd0e33c8a8db75de2a437b60aa4554736d4b5fc6d85f50b395f69d0accbdb8d31ae5445fbd0593673bf7935e6bf9c0fae0f759cc9dd865386abce1b534aa197a63f2e89aeef2b94730a20c241b1e2f0f31e90c09dbdb69e0a08e11801429f3cf873830c5733c13af8f80c951c501cbeba1e10d635f98555f6e9ecf4a630dd1a05cf15d8e5922ec8fbbebd4bde89475edf0eb6ac98972c7bf81dd374ed47ba89c3f2f6b6d47014e1571c627034f35ba9a4e4a21f2b8c1d43de364e3b948f6e2d998524f71973f3a0c4620dbf30d84a17ed1db7087584124324ff5d3de207fa53971ce2d71a4bf7b6c0b52173336a7fc308b5ca12cac8512e91d607f480db07a8b367690c693d4ae3950931e357b752130d6239d673c9043fc3da1c3754e5b9f2d8873eb00c050882e711bb149de9ee003c275adf8bd44d1d5b47401f9106c2a3a0e1c2cdd8cfe0d9692f9f66945c02312b8d982ee75f9626ff157457cffbe17f6147fe7df443fbe0ad28a173fc0ac971b1b6801aa0758625f7ad56a78d60a2130d93843b60b051e32614a3ef7903a8f88ff811f65308e8f70878e992e05ee2de31d3d74aecb3b15b6d878708e9986c3e25158c439c846dcd37d751fd6232b7a48579d513707299025be538a6a5021cc5e1e9b405b221bbeeef966c4672737bbb43773c0deb5857307e1ce58890045945604006a8f0d39c0a4e21185d326ce1d7a6b243056e5a4c0036da8253676dfc555042aeda0fc91665a391c2022551f27cc655e741a3c9f1c90593cc016a67563f9bbbfee029ab6fcc72f2b3d9677a4461adbfadb2a6a6f4e04df52406a884c3eccf498d391eb0ddd766fb9f9f16623ea296431d1534a15e1c7838426d05bd1f71dd72742ea55d8a1e0e2160075764a02c1d689a5645f17a8ac37e4911286d9976a5d68ff2c6505c630639c519a947a8c1cbd0309bc7b6e17301f5377144848fd141a5ba77ab36fd4d583ce7b333a5a6f98b5e6e79c291d65bca2a2bd224bbcb52dd19d08c5958fd53f5203287d58f190b1f7450317c9832eef05b24ca4012e4206b0a03a46a0273abcfd38c1992a558d7d409725f8de34740ec3c722308f22766b0227c1a12e84288e06ab8d7e58cea3e3be0ece195b641ee4c72e61fa848c776d56ea2827f72a2d7ba88e401553c710823c48dc48db917c1177cdda8036b034e00106761593fe5c09d5a66e574de21dac9c3827a3350aeaa27f1f22cb811213bb0e29f75262332235d21a9cd1a24632640baafb613687b34a91155e7bc480ea7f987dcdbe4932150294658ffff0ccbb92319fa81704ac2b4602a76bdadbcb32d72a6d876925c4a5ce480e3a5fb2f7be28933841abe4c53129ed21be68caa40ac269d3cd573373ea0ee851516f546f0b1bf418649731e8b6e999d0b313f60f9186d9ca263e60f24a2d27be420019afc334742e8704278d345518be3647a4d67eddaecd69fa4eede0fe2c0c8a87786b96bc85e95a476e036eb1f7a5145e711bf25954cc3c40a4122af1182bd3154c4d9738ea7430d50a89c773cc554c79d19c69983ae72c23e1fe1ff1cff5d2e210ef19c994178daa3b8826103cc92b52a0bbe7d6e7c43e23f91d75cba6504d7928a889b0caa58f370186ad61bad77fa4f14408c4b2cfa8aa9b5e02e0475ac83273dcdd3f75faaf974ae26c0fe9e6297bf7dcd1ab5dadd7ec263a43094b1eb0ab111c8868980e6c70ac2e411f854a11fcc9650b9b07fb8a5a7b31ff632e3b2ebfddbe0cc2ca7ccd1d4881128ee434d4cab6150385287a046a61de360e971aba350406c08c3d4df774251c36797bf858a6bc381a0bd67adbefbfeaabc96cf70777105076aa10766ff1d8834a12e1a0b462fb2635c0a65c1ce659363b5910921201b891c51ae3461e062dd68ea8671122209a769b77dea105099ccfb145006179631d9fa62e6d41ee8dbac5f108591b43a69bced8f196de7c3347c16b1a92f633dbdfaeb240b796032269d81fe89946dfff71c541ef8b75315ee111540f5f21e880ecf6566fc45fdde3b4bcbb35f57382fca3e4210cf8687565ad697843cde4b50174e273acf4749d7f22dfc1ff0128f9b2af89d12688b235cd2f7beedc035b70719b79310536e6f3d9f4b4e606bdb18be0f4ef33e1885e5be9910b51d51b75990c93ca0bee326d5e4f79133a2fb94cc21b755e2966110177193e63eb5341d1386345696818e5c7dfbfcd4cbf519bd9a6a093a7ff42051948bba9ccb34ef1a75b62cd8930fae4419cda1c01057850e97b8348f3a898b0e615c20efffe2681a901da062249556396d038ee575f0152b004e4ad964073d8d666db9c8a662bb9df78cbff0cfefa23b2235e80708f3f72925b2fb7e9bfb4c88196f589d5b832883ff725c1087ba820aea092c699f53edacc0e0c082235d65dace1bb1aafe5e46a6cf316a7c052667c69a3ee6fd1f90f3ed4dced1d301564f7e8a60d3cb1ccc4c6056486dadc59447fd872baf914946696caafe2e6bc648e87528f633db15c55b4ece535f86ad5e6d73c2bc49bc63b52528c061ae5a87201c0370b5994ad2d4640f4ca3d1a3df8b6692ac948d35a8a59f4df79e84e2d9416d7bcf89471755428b4b80c6ccf506730868bd121c4455eae33023996632eb41d670e84572963a1dcf584722f9b1155d3f3a9cce80b4e8db553f0abed454af31d881d06bc880b53a6a30eb55fb0675fcbf8b4dbc8708a83f3d4bcf83419a8e8c8fa5b2f4aa263771c389602199cf5d6d91d26870fccf85fa1daf8415bfd386a878176e5f14df3f107771e4d35042f491b334ca6f12d0999ed36b4a380f89eba689d246a556f78c1252bbd003279332d009d7eab94db498f8cf87e0bbc744406b39650e005c5aef0dafb825e1f0346367d210ea00d12382d1c2c6ac633b7546f1800b2e356e4846ba7c0da78d9198a6a06db614f628c71342b0e7b0d94b73f25c11f4e6cb12c3e4955727b4bf013ac847c770e89ebb0df20a850cd6c2cb16d0b2c877bdb85a3f7b2aff6ccf5285098019e722a0d95865332eb347fa7605f0c644eb7e3bd409cf44466f742073e5a2fc72bf5393e9d7a90932c927519a248d48045dc08bfadde78989df75aa729abf7ae4688a07bc08baca36e63ccac172b0f708311c992df39c53413c91743864339aa8541eba85a687dff2df0c9ede16e865b7fab7ab38dad2d05ecf906e6897b2339d478b029c09a5bc6187c9982f72b6f7ebfdd1f86a09a975ba4cc0e6464f58062398e1ae55828e0d3a8f9d73ed37e35f15726d9feaeb13516ce907db151cf56d36b51880d4084829c2a1dc52605f32742ad75215ed50d74f967361dbb9870701d0ff2508ec4ef626ee9bce9d856140708b10159285cb00d3664d45ee6ba2257bf06baf2ffe7097661803f56a211b36f6af31ed65aa48e4f5fa4fc18baeab4eb83b9dd6fe1653f2ce7f026000e11549543a2a6ed3237a16c428942ca630a4ccad34ac2e9849254c04c24c6c51176436e8a7225dd9a290cfda4c80afb7b81f01952c7cc55e12e9771579b4db325361b1dec4a0c12cc65d482c37288d429f3240be1f91efe7c9c87fb56819f6bc667ae0c883011492c48078750a9face0b85a7c5380375cafb61a0fd042dc149670766665a4fbfe9a7038273592ba1dae70aed19613c5beaf595c9edf59f6016d764d22a18b2518db6cfcbf4c48ec2fb07826f74c2274e1f9dcf47a76ad4cd920fb7f300d41abd3aaad9163de435d5cbdf400f90b9b905548231648a6d8306e95e20205c3685b2f7945a43932e2b84ed9ab78b07df454c93db8371c4bd587036abbcd6355455bb593dd7ca87ab5da77e90708c5e7ab1193ae12f456398d5a5381e5fc4cfd51bee17352fef302c5c7d9d2aca73c976acde72120b066193f3fe32127f52e0d152071ce6a8b54223abef9c1b3028f7a4b3722e6062e6d5140c47c0c3b9643301e745d4b74c42a66afdbd0c65255fe05857d0bef5155809bbebc291c13c0a40b69e522d4d81e6d2ba705a3089ab7e53ab9b7cbad21dd76da770a5bd7e1db3dfe25ab4ea41a2f80296a0907e5b8fabedf8dd2ab82c5bc35b53cf5c339403e242136b55db55eb6d42d5297589972859145ed7a80e274a3a9e5403bd62da5e3e46354e4187b23aa2e1799c6fe4024b91367fa34053870fd3068ec6698081df65223443cbf2b2f5673ce4b5cbc2fd6e1463349dca29d2ee14491670aadae9e79801b9f3acf0a8503e81839dddc5cfc767473eab9cb252eaf3ffeedc5cdbf9fd5e6d45cf6e9b6b7577d8fe7f413312ca58b7781b70d0e2e74f29a49fd4d9aaf37ad5b6d84aa343f748bac58b5afbef9d3998fb6ab0f9a398df5dd7309815818918d299027e1e5703d5489bfef59ecd77dfbac902024b4ec33a15ffef145a1c1575f767fe770b1c5e109e376902c895e235560b477e29ad5fb9efdc32b4a1499dea5ecae6df3a90445239ff322dffb17225e440970ba7c2fd6c8d72bf68c5d4a810665205c697c14733dbe4ec9fc4282f58afb579ccd58ceb9c74ff5976953b5f47b58fa4bdcb00c70a1dcccd99ec31b75b465403e15cbcdd5dda3cac2cba65da33404f7bf4dc88b6cdcc4ac1e567d2ce3b0dc1a31bdf482c546e8eed58147ad84c1ce0b73e53e1ed5b1e6596f42357ec8fd883732863480e162de4c7210debfa304f43cde117bffdd84b62c9c0dd3456a130e22ec8ac2245e4f7c3440b7b43efa9f4cf075b578ea3e75d61967d73b6e3670a5a50d6b5213b900fd9e2996736a241399ff7daeca9d1f281006b2763092a09583f7190b4ebbd008e59eb6db007509d1a7701979780925f056ab9dd6ac5a86ac66d1793c832cf95cc38fbd49b8db3ec9ceac48c5ee67a720e9a3485112c29c5fb229b8c15ac9bd5fd077c5f7de5c92cd681ad3e8b4e467aebdc4fe4e1a186df41a1aee01e4bbc1ab7cf2d4740d87afa094c2d138a36ffb24ac8923b4673051c03f1cafd705e44bb3136658810075c55edcbbdb44086bb33e0fbfd8f8d38a4e620f22e39e7f36615d81e2a3397f27a16cdf3f5fc3d0076f3498bdcd81a77a60a54da48faf8f8b3462748db766f743c9e13164ae414739f398f0aa19a63075e012c80a930a914fdadca17f471fbefa0944e3de68387580f856dfea184313f3a6a610aeea95eb4299fca1fba0edbc2540c0dd60aa81265f2e9ee137e387fc5c367af8e3eb448ecdf9d305ef5cd0f2853f16440b5bb18f4c0477ee301217710f864765d52d68df1c21b3ad48ac7c81353c72e443dfe0d1cbbc15273006a3cc6c5e06a01ea4df6787cf72262403ee12822b675fee1b17f2cbfd2df28a6813838b2890e274a3fcd2a42c37e90006318235cd8bbdd895dc69b8bddb1bc39a778846656203ec2539936eb3e5dc7384b24bbd32e88365a5910e013890639677a58a77d2fabe0d9dc313214a29a0e646099b5af9dc4ef1a7f5c41f4ca4a140f3ac7b88d5280e56794f313f900f11365c4b0bb635aed72d4f8c60573b6e7fcaac6b09a4227104aa4fee6be8b9615d48ec057e651902ff42c4115d71197d33962ab42540d6fca4c6a1930076d9d2a064880d323e4c1372b53d62d00c2ea9a1b79c3f08542b12d58164d06c0edb349afe71ad12142e7bc8c49d6d8f1a998c501a501a0265356f5d76d7fc946d4cc4ef1d5bf50aef0cbc7420fd8c4f8107137ba5cc2bf0082f36e6440d386f4d9530a6b434066a7a65ff284d1817914086deabcbf85da853b3c62e1c8db6071891027b7d7865ba82d7775e9213959c51d8a98e3237fb3e363237a36788bbd664765b9fcf3140fd99c3432ae932667c6dd1bfb57440ea091880a5668d1bbffb2c45766491d98294e23869cd8a626842a3411ddcbc4028933dc37f962e954534cef0cfa4c31bd1fb99ecc934b0f70bb7bf8c53c2bf71dee39a4c3f98c275aacd464e7d7bd0f9fc96965f90ffc00e41d04fff17dce14f5595db7e7d714c6fe3522ca86a87669fb340187f242227821543604be998ee1e5db011fed4311d418fadc4df41462c78ed7ba4f1aaf2b9e9dee862a60f5da9064ca9c29aa5525cba9dcc3db4105fc52b5eaac715ef73ac4ba61284ad8117e47ad2cbd44cc1b3e13578cc652538b29d05681cf6d6328a050c4eb6e0f23f875a97e006d2731032d700cc7e8c4f5082b38af68e144ffcc54afd7dbc5cf8e966aa916e6165cff066ec6511402ed1b68e8bc1519316370962affbbd4aaa48364acda60ddac82cbacfaa69a4cdad74103098db23202f514bec5e585b37b87e195bc718f426afb5d73855bb1d91667ef6311a7674c83604abd0f0869bb13be4d2b90395fc0bef911e187c55d77a2024fa3f807790bce98e2d34f8f24b6b5e0565fc3197cb4725bd707b1c557725d51cfe494969d98e6b4e489a0eb1ef296f904190beb3d124e8df2ff1dc48d516c1979714c220fad3fc639e6e4e48ec9eab9f16133dff65e1e65c76587e245d8f6d914c9c5d3e5f6b2c7b93916dd9ef288ea625cfc943b3c42efdb205a4356891c34334fd0d2bad7bbad1addcf78c4c0478e07dbd1cb4c14825bfcd2a667eb8c7da3df941629d6410faabffd4967603c3ffc06ba0c88795dc115c871e44216d3cc8037302f306390e1cd7c8b41d4db5a82199e04b25812518c70f6858b0501a99fb88c2998a82ad9f64e9dec7a3cd5943307470e40f0f00e151e301d99edaaf2793e88bb1118b601bdab12ecda09f2ec9c916ec49513d0f67681ba5880199136a3050548d240b423a6927ad9b78405ca78fb03faeda38658bc39b8de34bbbdd08770c58d426603d06d439e816246dd2b20fef7892c698bac8c52f197b1b51062d1380ff66816d1f8c53c4c5aa173aaede145979c6134ad79396209b1f912d122f4c622c9122e5b3684826b1dcb5f609c25225838e2dfb992b718eaa1284dd8f90e87eb921be24e2a242785e69d2e7b206d3b5d0061ebfd8b439234ca7429f546cdbdb7a276795a8d3a05216a0033c8cd9296d209a3a6b0646dbd461fc2cce1977047467afbfcc6e445c72005c66b4676947bf3a26205cdef6809de7fab6ba7ef6237b9c0b3dc4ac1b413126568e264196009f57893d842498ba5d4c6716263ae88c9f0a357bd9e7abec4520650cb4700850b83efe9c5eb2cde1eabf8fb4f633cd5b463b1e8327a6f02b75b08cf4d851487f877b3c1af2b18345b4fc6fd4c553f41ac707b25612d83355b187f018d395a11a8c0ba41a34d9d0a197831136ae1be3c5898be646aa4a2ff64e1b33b97b23c2a5d32eb4fac8b7bfac536c0285d4b7a5ce87d84e8980e31250682ccf9db0138f788f7f52e042fd116ca13598bd777cd343344ab46bccd3104d18738bdf64107fb73ba882a95587789c7f09cb7b2b3d7f856b32a3e63cb4e3619cc6f142f514c1162d5aa9fd41ce6385a007ca4c589545cfdfa31fea3a79127aa6c83481a07430938344692769ba24b1157d19e86531ca455ba042c7ed4f9a02be151f2992f774d53053a4e34a1a6940a13e6e5500a99636e7f902c6a83871cb653eac3d174ac33fa18204c7346eeee01fb07f2adff675c52fd23ffafb61e8e1f781a42424cb170761a7e740b61c8424f616d0a06524c422eecee7e92e487a79ccb6174a6dc87bbef4d109f4ea97ff289298113a9820f5d4f99bcde6ee5c1268d0e4d2991fbea25f5a8e049623c8181b1e7c93e70cd7fcfe2760e2fc429104d5bffa183291730e80d42eb2865f8bfc7fa7387b47b641e7383adb6d1a1ccbee4a2be6dad0707867cda2eda7ce257065c6108108830f350adaac2c9e3533529c5bca828d5733ed7172e4182956a51e0a0dd9e6c5e47c98be89b3f469845f3bd329a9efbc4b9e88cc3953787d89c9f7a2494932aded200064fac067adf6adc18a589c9ef6317316e73dc44f63e31b1f841b4a9a01e698f57dd1c9b52e1633d2f83781c6ab7a3d6d85dab7ae55b51a7ed5b44d1d79d93dc976009e56969a39c60132602cf751604c44a1ea1107922589b05f9779d84ec96227531883ea994552126af3da0e58bc50f4c9a68d38b66155c15c3a5f901d3b14248737df387ab27c6ec81041b2723c61388a8362fd8d37136aebc1d568c1950b0a6f47d9e8fb0ea3536fe8fe0d44076ed359b3a3ea3a8921ad2e8f99bf3c5275f2f3a2328fbd2cd33a7da86c57504ed47f59305f65ab4e26f4d218bf0419caf43aa3bcbaa07783ad1cc41cb0bd6b551a5504c5e869834c9884f4f3ad886a37a42b00c872b3f8319359d617fe189bfb216b4dd74e839eeec4ccb36a3c45a77bb364884f36ead02d8c50686648816af6bb1a8fb3b545a5771b6c868240daaf71140b6441cd76783576ec322a33c6436c2a25fb2fe17614b1ecb7509ef36683211cd023c7a100f5744639b89e89db080a60f285cc5f719d17ee7dd090c7f631696744ae4a0e3ae60697cfbac282e162c1b543e49b5c6980d627694ba87fce4de9e031b092fd3ad5e0d0eb0fa61205e5e665ad22a0955e0572699b354ae671fbd48a17cd8cdaa7726b958232ad2835e82e75a175a8017ba2d37725edef16cd85a6241ea29a736bff8064ab7b37c6506dc3de25544a3d71a922857d0c3e94563ffe094155c8c86b3472336c8b1e6db573c1c8f8c3f7aeba096d476c909812777f6e69047ba2fb6054d6fd2659985e2a823b8aa0d81e5d14138b5220fc0f444e32ee246510a724c12e32839a922a6facc30fdc4070f00254627641888820f1c574d25b66991b6574f314d6c7f6692e7df6ec6e5063b94c63de2d6c2a3fd4bbe2390acc35a3427710df5c3aca1e5960b4b31019cfcb5a0b09e697d006f33aef7dc5c37dd7c7d29183eb3db547b825b40d88551130118c3024b742cdb833b122fb213717ed232b3f0e720e45fc78c2acc51ae2084ba0906bab1ccf0026a081e9fd4fe73ef90dbd432120094a66fd000d1846a88b02ac84fff5faf7ce3228da84be37533e7a1cd96ebaa2507b5db2e0cfbc2d581258182bb5f4c8bc593a728190a589249f692d63dbbfb8f19677d6a186a2b353c017c6cb87381a516fb1e679725a1f36fdf1ea28a69d1d6f1ae452362998d01425b6029d3ceabe537c3b532f3c472475845264d6a788b2f933dcc44d018a57d5e589b3b907ff3fbacca2e0d289ee266acc859827287ec0e30800a69b53d8b8a91da0211f95ce9c5417cf62b1859c5da3d00481eef963629d2c8d1190b5f3396d0fd8e7b60416e38e8acc6ee65018e1493b25c51c9ba174d97bb146c65f4aace92d877d4a727cc3f08b0191129142b2861e54c10b5eb4a089ec39ae18d018823c025790ca9de3c39c3f8fef853565d7c5fc4bed1bf99f0469c9d99c4389ea766b67067e82dd15198c73ba0f2f988d9b01f5c4fcd9474abb336123535b64ee7421bfb3d3b1689daa19a197462cb83458d14ae4e0820a8b8b50ceadad5b358f2cb4687e4e5de39b94ad842416aede1988a893be8356727b901030ddc1484fc159167a75fd01d5dd3f61642074a84c20c57789c1898b43ea9d7a745122bc4e567aac737a7d619345957fa4091a296435b7552be3d334a1c16935593266c7e16d8bbb8eba537c46ba951f73bcc0b6476b7e32110a0a3d63c36d6eeaa34f4000d96e7716c35338b50b3e41d5d46785d537e2d803ead6809dcd7ee6f5cba7fe449bc6b06c38ed3248b65fb80a3122c5d829d0869445206ac54d4bd527a441333a9ba48b00c8859ce49b643e65b274c623bbe6b23e69f86b73075663a7a7f8a0ade7eb68b334c7b6f99b64d9ad953ebc1d8e2409ed978499b607e250057f6cdc24a658b512080b40cb862e6fddb566ada8f48da09d30e64664e391b272092fb85dac3d19bc526d0e39979ed5ad63d8fbd9e45c0330d69f962b456d8d4233614dead32223b47c95ce36fcadcc133be2af9cc3d28b7f1dd93e5db7fac67b111b7e03592dfecedfd7f3049918b5b07d1a537ed940fed4abb0c76aa42906ab870055f11c97e9d621e81051b84b846f6f7a209c2ce544e50a8631bbbf091d0d7f0104ffb205ad74a2433fce4d935954d9ae4332c6c7e92e19ac802374271932b36095cd2b355bff704d4cd7a435ca2939e92e26c9f17422c888ee13b7190852778b1c623e9b40846b4bb104409eec35b1bb2a7d04371a835314879c753851be6a181b334537ee3d0fa7a884fd434f8cc856f41a811703d29eed35c28283e51d6290a6f627122b320468bfa1898e1dd6565c5d4573ab259b87b1c0fca18c4408c8baf2cd63ca9e218d07c5c5e37010aa90ecb376b1809937d2a7680ee1622924355064fb2d566d4ea091e810d80d48fcc3249f5e209b6df8c910d3ab756efa4bb3d7f2127c8e6f9dcceb9bce73278ea0d6bdbf5d704ea29ae32c55b5c6879e81d2d31d4edbdf676046f0e5148ea2e897f5366ad8afe862d9331641788e40dd3e90004ae80b31755c3dc99628c4de6b4f3bc0f4997cb3d473395a62a5f8aafee72ca9863395e72fdfe48259339fc361f7350a921d5f4cdd0d2bdb88fcd565e4efe5ee5ab023a35208b5578b9452ca3015661c827be55d32991a67a5b09d641c7c45d57ed6a9dfbf05b790248dcf4ac1557bcae188d7dbf59a4ec7ac6274b4ee50c2b3eee2eae0853e419b0357af4de6cb13dd243bf9f933dd17ca742e4b46b595e0cd806b5460d222b3a019a7aedb9bf14cba34853c4fdbc3ffcb2c58ba573384c6149c3d4febf87f5b217cf2c855a70fd7f41d5ebdfa6502b9f4533e63add7678b32288aa846d06fd187768ec16a8a11bfe4f2e56a0d8e6821c6526b93e20c67eed9cfe9fa1b65c78c760de3516c41ec80e2e8e2038ad8ac8cdd650b1e45fd54bfd04937c1606ca493e8323e40f54e5a34685c40df355358c9938f51d527335e2e62131017cb10161751c025c408982ae73d1a8ba11861db5ec652992adfd8ceb254e55d9a0599e4f8aeb645e16d59b30e433dba3db5b6309a2dfb9822e3ea943c05e44fd153b8022ca976a99a57758705c93630cd79dcf2a2e1684dd62483c7b933951100109328ef604d3eabcbe811c6a860815b48daf04939e7ea78f89785077edb90aa33c7ed56ced7075eb5a577a5aa047e8fee8e67208bafeda4dfe90dc01da7737e2f976a3e763e696815fd15f43a9616c4cf8a3c89da025d0cc908562cd3180e0fca28fbfc572b11bc17642c45d001e104b7d225d76a988982c54a1e5fa867fd80e373f995caa683b48ed2b194e80a5677b8abab6de51dbbaa75a17330f28cf0b982d76fda6e8dd212d3be0f4107f5e4666007e9fd076011052c434e0e177bb45b8661bb18fdc40ab946f12d26837e3a43a1a08d2f4894bbefb75a2abbd48fe4ee5f9591dd293aa2b1aa8c2b95fd1cde26fc9c4189cfcd27c7f79fc8f449a06359d0c324b1294e1f7a193bd6a2c2d09a5950aa16babf55dc163e76f6d627b33eb239f9dc090d307aef26ea5db0b700a121787e2d56e412d8256e4cbcd01d19667e459d3a70caffdf5f21226a88ea6ee7ddff020740de6c2860a47dcb019f959192bd7878130ffd26e82b8c4d89244b4b5573277b00709d94884a3495843a202e743b3371241d0343865d027f9cca03cf2ed73a40995391961f77f17a99c3f0e3b33325c4dd0250cac5943648e0299f30e333c06f91e58b75e42f3b0b9352b3a22ee25b5858f3ce44247643fb049b6f3e0549277b1f77179bd6e21e14244b6cbef4d548ba2344c60ea49f247c4d11d049621d4fab763a020da9374aeafd5cdadbda62e3c9055f0979e96b98d8de4fabe8425d4e2ca24939ac3b8ef5a5998c91814d0844d55e883806738887ea8f38043ea49acc9cd682d366eecb9fca0ecc49c8c929aac94bce0cad9b2ca28688a194af5fde0f6b44aafa65aa2d01381f28383b730a3af9060f2f2b6934737d4fe55df36656f2ee9ab9d21205ed3089fbf8d5a65dd6ffb9b5ed14fc321025a9ad4278eac01d72aeb769ee35d164c63bb06ed4fd571bf66d530f8de38f9341040ac7a45a889050548edd68b3a8be37da5cec691b58d5c643b6174b9fe19112dfa42b04960f6fcf8d152b80f0d0a36a2683ad127ecf1df2dc9cdad1aec2f83985ba3589dcf0f7a0e443e6c1bca9084ac0991977b0c1d97f5d47c5b95ee0f3a9d2c70399f5636bd494ff7d18d563f123c13bb15208ef090249a3bf3f43e80be8287f060a71f38b98f88027e6e7da0cbf16d2f423edf67e62e80d7b16803d94667cf892408a440d6921d150774af0c54d22c4a40e80dc283fa0449abf66158dfe793133f1138fd2c6e360838b4b8e4af295d77d0d5c410d18da18748fe809c419d1f0fc7e10c46215b016bca162e429ee79013edb8cea8ec710aa08b8d55e4db6fa87fd12d96dcec5c0b0b76669add7653dd8c6a5578f8adeef4ef3be2aa1120a84c4deb0e1411688c579a5967849e60eac59c05f10e7275c32d76297936eb0a3ca26511138f485b0276bf926ebc4d62e24c4473db078394d476222c95e7d516e2f2b21924740d7dcf0a1abd5f428e331b4cd174a906132e11cd503eafc00adea9468b3050f46d1090eac358066aa5591654f460a94c42f2ff7de2a755b92d54e575f49148c72f1f6134fc3fa44f82cb7a97e9ad3b4dad51af7a28ff745549817cc2c966a60479c50f0a77acf39290bc34e05b456999804dfbb1f8eda3d0016a8471388a5b5cf4c2251e2251a506cde8213a2ca1524e2a17100d6d13888351aadb9efacf8f38050046fdfbe1624beb1f1b136cc6512767623e31104cb3939d44a5ba731801260324a6f6dceeff73084cd57ffebe3074a629c02de1fd6cf3338f0aeb41ea5abeb62bb1749420e1435488627451185413f68f1ee2f1c25ba502244ca78ba8cd121180899a19585cf734e78a261888b2fc0ddb8249900e3323377a6872d8dd6b6eb3f56a2a624e657d577f07f93ad5203538f644f25acb605f0a6409a6081b89e290f13ab6d6ee7c08dfdc90fd73ff60d8364d18d1c53da25d4104e42ca67a646bf0a26dfff662aaf31327bff0a8a7bfeabbb555c13c035b28acf4c82a0e54785826411626741f7d74b5aa8bcb896d25e75f11b91f9cba27ff957851335d006fd6c49c4ffcbdba0f779fd5fd2f248fef297c5476a0c27548ba2dfd5dbe27e60d64f4d8a39a615de1b89b87511b84991591f5d22827bc2b2e77f16c063894371dcfeb0f8b97725f1ce28281db49e4dc59e37148327d4d27c99b35247d22b503d494a43246d06daf4aac40a07ea09a7b7a8f313a1eea9b3f85dd359b94b71124734e2bba03bbdc29fc296b011f6813f1fd1e30fcf97d4407aa00f59dec0fd3a75f9175a79161d8302a597f457c431ea750ed718465df3acf7cb95ac52d74f9f46c06aa3af6735c5651a50871bc8dac1ea8fdaeb9cc9e7e7771e9470cf53affa170e5d9d0ff375c6fcedfb817388660d840617b05e66c07da42a66bfad6e8987f336202d841ed9e5c00826c2c720d7e3ce75c2de6ad78b021555fc1ed61aadc78533d07cbe3c8eee381306a4c1784983e1455f5bdf54afe527de317fe876256a928a09e40531382f4963a0f94b09893f533e625343e52fd3580d41650a4b180b5b14a572724306d3434d83673179cc4b5da44d520a8ef8f9d2c3685c23561fa3588a4aaa5d245baf3c6059967e414a3d256dc767e1a017b6e38b2ba677a605088a695d917476787cc5a2890229ce7d64707c59b34aabd17b3d01c69d5f847dff526ac43c0a35d12868b0f823e7f65ee8c1601bb033c1564e4ed252f9d21b51f7889dfb4b8ac962eb789b2aca6520a3d60f1702323d27663307f2289ae792fbe825f7a603ed9e3f689f349c4512af5915f7f9d675cab5f5fceef6269406332e991b671b7133abe723b737edeff2a17f129bc2147c7892d72b7d341fa6fc4299ee31aa99c51a4afbc18c5eca8ef0936fcd410dacb982953e9221622d79b8d140c1938aa01cf8acce4d9848a9d19f22717c7e312e5c90bbe9d984ff0116b916eb426562192c61dd720ed4f293cc05aec730b83263bd37254418a305cf81e019ddcf2dfe6d8eaf4b0dc8c576eea4a7b1afc390a7702f3683914d96c57cc7079f15bf27f4826a6e82bed6481886021b0448c73357c3b14e8c7eb92f7c2f4400809c7686515ffbab98327b072870922f7191750938c7ecb1a5e5190b348ddc107ca3c796c13e7bfb5f1ab46a3d57571d05d47477d8dae499496a4e7509f1629f8715655641ad6cfd4ef22fc3cc6346cc62e56c9e417375177ab8219606c2435b39fcb174ab34d427df6f09c5edd8e1cf8eaf8a925bc12407a251e0a396fcd503b9e4e352114c5d3f1467e918b2f9a46c3c2911f8a0b069eab01d392396938f0fc73159e325b1cf82dbd4ba362c0f5633e47d821db9ad4005dac46f1a1c26f9ce3cd1d9d973b8e991e47249194ff884065f3b7a24f03dce6f49f86d85f59dded013c8210d818b90581821a150e6140216c2448bc28a17c2e9dd79771622853d79614b50832dd2533d6036993e5ededfb158358c070e2e774b69d2dfb63ba8bd5decf6de2d77ada5314c02d03d0c8c11a8fdfeeaa8a9a675c65bc78f464222aa528fc17c70eb3a4c20cae2e3786943d510e9d848d8c7406593ff097265b58526067091c5ec250a44034cf1de17936b7481b4248ec174036220e36e119ee088d37116e2368b7066e7336aa46aa1c6c544b83c2a5afde507b755c9d456abdff5760e3768dc217116d14ba709a144e7c9650c6d37089e63ded4365f725b6aac3144a649c9e0cef647df5e5f3fc4fdcce051ad20f42f6c0704f1422ba822772412000d917c8e3d41726058b74c5b98c9bff1d1928d3926fdabc93c3b140353686552de3df650a87e3824aa2ad78b54573f791da63fd19ed8a0e86b16a4a852ff1a251ce4c4139010fcf5c63c2b6c9aec08061249460ae6118665669d42a1d8f5759872c9c48dc63717e90b0262d52d6664306faf3c9778ea77688c340342e3693ba79b70405a6d80756f7f0b87fba90d3eb7a6a7847365dfbaf83b78a82dc64ae9d2a401fd21afd3e7a935356e3e60de8e2c7e2275bfee070f4f16875e49d7b20503d92532294ce91e447c70a2d27f91f773e1fb5013df849d8daf89427975098971b9d7fabb099361bf47c35bc39643422193fc491d3a91cc090bddb5aeb859afe421e715920818af791dff4797138a7b2360da3928cbfa2865f989ab9e62a997ec53e2c3260c44218f76c5a17a9973cba8efa938a81d03d56bd179a8a7373959ba22e0fe2683ed988055dee695ea0530ebc7a34be041b2e2ac3a58f0d430b900537e4585065ccd8fd3afa350675ee755e9f1ee862b5194257987402f755ba8e4066a63e1644ef5dbec4d48ad00f1c2654d33893dfb2b363d1d4bf0daf5b99cac3dfa009a79a167c88de9cdc50563579c4e39b5116fd12a196245d868c210297686189d6d2d4505ec18f5e5b930834c6ab77dd0e07b900ff6dee67b2ee346607dd3de39457bfd1dd0b4890f08951a58ab5d27c69667bf577628ba25db80a62c73eadae59ac394d8ddfd1e525e94f7fb9b00d57a933131746872a98105f0ebdfc1de7dae70a360c2a2adb5a9dba69e40b69c5dd80fcb7912071a2251dfed67ca5aebf4c12a963b24ee3433f868e950d53f530f14add4f7839601176be63202dd97cca5d096619c8f660ddfece5d6104e58196640552d1dc4e55ff08925d0869a1239e06fc33115cbb1be3b095f6d44116b0a20b8824135a1dccc91def3ea9c03c18685298ab9c1e721877d1d28bd484b6b7e4c09a665f92e8aec4d6322ac1c8d3390705a508eb26b9c034cddd8e7152f625a56fc551564c3c53a742305acea6ef2df233b09fb6a580af3ee02f50eef04bbda858753456d72cf9c666bd482b3665df4f020d2ba26704bce01ca0802107bbbf0a3a744f2a98d54ab0f243935b96cbbde3fb44cd90ae4dcaf9676f8f4ed45d455d7c97acedf6ea36f529037a33a542162fbd7d14d79c85413a0a9fe392e65220fbbaaf43a76f2f3895703fca20e072dddc4bb7e7eccb3416b831c506d80ef7dc632e1ba426deef68987d190235af9ce0cf685cf4cc5c41143b4eec6008978e055722b0fe8ac390e5da0a50fb6f2c213548012e0786493b30c25ba41d25877ab70e9e08c416205e51dd44193056581ca882627b8d7c627713a4e1785b694f66f03ff0ea96057564f5eb69a41594bd3de0ca9476ae74acf4498f8fe71fb9577b191ff5d88362657ba42b6244d1c627e5e05e7aa82d1d748b841a31b2d57d911cbf99ce685c6f56fd9e7fce7623fe38a7db359283dd6d79102c6ca39b81ae82b573a474684231faae659ad85bc7cb67ac7250fed1d9c3e7a0b7cdc7d144d76f069f77e67b1c78f97add0c94ddbf8776a2d47fdd97b1684399043ce569d7eac9110bc70ca159856f9d13ebe09d253c2ec403736de6b4a44a76cad7f97a4660d877a0eeb23334566d87e56ce903590acb39ce1b5ec95e4cbd345a2b4d0011a650128560b891606053344aa73901e63cd1e79f95e403b95781e10cbcb3f73fce09b634cc4c86cc6de72e02c09267aa804b32d8c0435f90c0f871b4df0078967a483f343ddbd913619ecdfe8c92f426d829d322eb7c06dc88a7c372ce5bd30a920117719e9832e3307fd33b9926b0601b36d2ad288a03f5960f4e3b03e19fab65aae585df49576f52cc84c63c446c3bd6017dd8636f91f028d4ceca3757bcd3865ebea0d579d2e4e79acb50367590b5f5f429b8f21eb0b69a072dafd220b168288e80d98720fae4197333052358723ae4affcaed50a76f196b8d774643f160907011a129fa9bedc726582ee773bac6b6fca4a1a8e00f6bf3ace0601d5b847a5e3be8081f1c32b90587dadeab57683b65228b6af60471e03356d46010764e91da7a36e1e9cf29f182a40355d887fcd907cd4341d94c1eaac94e245598725cc5f28135d285f5db7b3198d06aa72d4849f91c2e75ce1d27680e448b0d44922bf917b07a1b8fb2d321a42848e2d1ab64cfdfdb71d6ecf5db5f6305d1074a6332d9d5f7fea27189340b39b4c1e179bfe6c3e5200f53078f780f4d5d2d34ace507bcfcf882d138ff6148291fbcacd779df56fe67b5e298ecc560f114bbb2ed21c80e749aa5b2986ed57e9712154f758e31759a4d8a0197e352dc2531a4c2ea081a92f394e72c1e75ebbed0dc24020e75a670f17cbbf2bb6c8575cb9a155fb898f231ef8da521a079269391ca8785f46b2b5cbe1e596734b0b23ab7441c07bc09d2afce49d67ab04366ac98e4d094216e68628e543ffd3885718770df32285ad41e8da04d3235d1c1cd2b77518e41007e93a999245366620ecd9d2105573644bc0793b155b75ee8db5cb9e5c641343e731c761e855bff56a431e53751f7ee362bb06e0b4a3de99b67f41b1d0255b6586780d2274aa4a9e3793196af72720fb7f04ed75792098aa57f6e789a345bb547b4255b41fb76d3afc17c6aa8614f1fe5fba472cbbe4d27583a2b2c2ca347385de8c50df3ac31ecc40696ab204c8dcf9247c01a8c467889041f375c988b202cf3deb21b12098e5a26727dd709eb3c80713a626d8d65a8d8d76329d1e974a74a71de4c15a35f908c80727b579bcdc44cb03c43cad52fdc59c7fc6bb3355f16881832d6ed90d70736992260e9d1a196e985df03e51abde38ee07264992bd3c039c811d834b8ae512a240b5b10526a61b3166fdb853a50793090293ecdb0f695ec4fb829284e2622850bd281c9a1151ecd445a9c8cbf8e3a0f53c755a2f23476c57c9d05952220a96c6367efec29595247d2f86e12fa23bf0d5ad55537ac2af23ded733c5eb794699fc87be7c9552e096c5d64d438b62f7e455222d8d6d54f3c2a813f7788378a791c0bc7fd304bf8e3577eeb4c99d930af98a2772f36f800c0cae4b84f5c2e5d4bd4da9fbff60ce65974eed667ca98162136b25b9007f9a007e06bc34bd471686ce8d6b83cd2daebf8c8315bd597ac4f4eae286ca6f79b35c9a4778a3c50d62282f5b2667da2f51f8d51a8c0dde32934ecbec3c9c5ff7d0e0571dcd5fe545e5d0a333ef4662d4fd2072529e6323c0e861af2d900fc0f182c1a4f0785ff85d6406e98bd35bbb36232eff5aeecaef8cf283138d978f7555ff16a11024836b42ccf1c255a4e638192216cfa478bb88d25e16654257389389211a33be2f5c0dc34b20fc0138b6bb48a0333266d1b34ade42af3a177b4f3d0070db81ab5cfc4993a95a1fef8e4a552991a0b164c7b3439389f09edba78c0e53f90aecb44fbf1451d77bb5247792bab361e1067b04cb3c30eb94266a96482569272ad1cd2f0d66a27672e28e12854ece93a848ee0b69a923a2a1720329e5de13a5ba88a06019d7aab69bf6fe29e8df5d3daddfa72d0b7dd93461a4c4fbd82b5bf45f975b3b2125e67b5b69ad200770303fa42456c9e96a9e022bcbb82f2c8a1d7564ed9447fcc7253990d6fa66d9773c2331f698426931b82b5803368c71504936caffb7f5b829cc2e2e32bfe6d4ef66b4f8d05695c798cbd72d4c434532a0c2f2cfd4fc81a1034dde0938abcc8c21fdb8dd5468d7f0a07040fac8976d223c5872faf9559c0f25e93255d5bd508ca1f163611df6f29495574082b1ee5e42e4ba176d410fc0e426aa47b378366dbc290131226020d6c9f285630381c234c523c5dcf989b84a1e9af4887a94c86e92af3d0c078576a15ba9759bbbc7a7b8815e41346ee1191b522a055989eb1d179ade8c3c1fb816723b41c31b1442903de0a4969358cfa977c91dcb83da640fb8e2e06cc243d57e88949e45123c0ccd0ca945eb4a85fe7c53ba3b8224340728d453c41ceb806aec8e0d47aee3e9febc880f808cb48e86a2c7a7f4a247f6f26fe89481286168c4c869cc5e0cd0f3cd4bebc5cc02ab6c46ca2b20fe1a16e058974f43d468f48dd5cb88c1c5b4e1936c0552b5fcddf34cdca0997c5429803f943a02620588f5e31eaada2f95437246e47fe8d1255065c52f72375521f71694d7e41288d2067d251d5deeed4a4f233c42fb52442cdcc5adf62e94244578a0486f9a2bd272539d1bcf6540e6ed84e73a695abedd6767f6602ab9605fa1af60f001b2d4db22fc26fe1ddd73476e447705a28b49464ad25ca33da70adb6dae545430bb95200e0e295b8c0e6ab33fab3a3a85468c39afdcd903bb500916ed650e86083cfe06f1c16668fe4b849e53e15056b17f73acbb174d1393a8587bbe0aa752f1b63b9b0a45d3ccf9cf38c9c4b5576ef5e05dcd2e0c021e769a30f65fc1bb40791b3842803f4f2539ce17a3658b87fc5a8b91503b7939e6c52fb1319378e7f05ac3a723b7a5fc9262a2ac85158c21143aaa1631c38d315f450fb63fd227224707f1ef0a3ac901e1a04d01629c2484e400513ec21984c96dd1336fa3a144852bc50eaeb1a6c4478336877e015015caf1dc7bd9c95e561d21fad65caa7672d443f420febd752c37af352e2946ece23bf671d5c4e01ccfa12a67b3dad288d6e4a63a6a12b1694ed5c64ab39b92bf1949d1b9c1d04232f049b1bf99671649c8b92e79b4c9eedb4b70b520bb3951df701b7ddf81a550455b4609bc801e25cebe2eb99106bc0fd90103a1fef8b4033ee39b219d45e86694178727ee2e4c143685bb3f7f00bea85fc01024780abaff3a4eee5738aee9086f03cdfe3ea90cc6a1d3dd421f310a835bf4edf15980c35a6d2c230cd9b90615ec929d3a9d5cfa8e3d23c3b5dc7dbb47e89e19f41fd04df2bfa203c4e7ca610f9d6c4b7290640e07eee23f42e267506009b30a082ac3447572adbd205e835645e2b3f0b9e661d6d368f5f56942932c54ac0b0f03034712bb0c142403a8817c2357a14d3ee21bc8e72ff2b8593c7ff452efcd0f23a88bb31670aa5abb2e2d19946e508a5c195c5d4a24f49d279cf4610a167a63bbd3c93a8e405b17fc72a441c37fe02741caef9637ff90d2585d40ea7212010dca08f217c0231df1a3834ecf9d605003c4ca3b6e51ce320c42c56047108997817f729b92d8952329b7d84f575503d63ab0e2c70a52825915c27f9c1692dbfe2f2ec1f2f9668fd04f16cd6ae1ff520ca7ce9be40f18fb705a140c596219db6feb8004f861025111ba1da52c08e2d54f5e490bbf4e49e03773abe92e61ebbe7be42f2c107cec2c4af77b5eb033a7af8e10095f45a2b37dae9fd813253ae8c51f717830174f2eecba17114c41d2835bcf48058a2db1782cc1b77335ef52f0bb60f0191108ec30521472eb5bc6bb1f6fb1f04e4f57c64a7d8d90b0d24603d5a9ee89b133ba901727b636d4caabefa2d29dd0673f2cd9bf477ec0d03a6ad073449c1330f8622732f78f5ab3d42df1378afadeac6c779f935fcd660c345f4d4f2ef9e33b30fb5f80d9f5c4ac79355e8a271cb5e57f9eaf210fd3778fc61c6627db676f8fe19a0ebeae91e085a983b21c448590cf428054b71adb4ad8841be614c67265314f7edd6ddd657bc2a5c843e510d79ae06a7c2122598c42fb835ed556ec4e94bf36e02cf958963033a8f576b9079217a07b8d834d4e26f45fd90e04f9cb65ebd90ee7c410ce4dc6c615e506423bf01233549f3c8e39de15f3902bd406adb4557ffb7de7a749a425ce365ce9e73d4a0f6861b68b167502c242fcb95f357f54e618e1cada4a7b7eb99900aa4624ae8cd94081357ae1e714cc4c04201cbf318879c22aca46c82fbead856f69738ca2a96d7d2a4bb3b9dcad6d9878873f3f6e07e21c42b58ac2d1fcb173072c6ee2155ea0a946fd4a96e256bd14e8623c61f36a95f57e36966eee565549a275966510507ba115128203b107caa36e12c97d4da418e2d1c54150e124700dea010a8cd710c4d8444a9eb84c0561cfa0e5bb895eb2d087b5db83ecfce9efd293b3d24f23264049ada1cf7f5cc25e2f57a688e42c8d3be5d47d6c9822f52015b54fe1dd5513c19d3554a65fc2740c9d186e557fe2a072c4e18c73fe87d71c989d597a2170df3b1ab918d836f4d4ab4dfd4757d55ffb47fd1a6f617268bf67b21f5bf9806e92be5bf68bf94f1e962fc29db48444d17644224c3642ffa1b17025ef01d56d546d159c2f8298197a20ec875833496362770f7375a41abb8071ac5a04ba89930e5a384d78efd96c32e62547978ac5cae1633971360e7bd834f733ae74539cc1f4ca00a317daf459016baa9fcb7443b14ddf329933260980ec40ba5b331ef58fa47774e1b50b889bdd71d541fef978746bbe6f18dd5481e7557ea1bff9eea784cce6ce41f7d242ab2588e2cfd0b40db7f73915aa96d195f708d0eb2d789338348e0c037f3dea1b72a02037c91ff0443a6f2ae99fd6cf0b4812806dc7fe40426d10a82de918c205c012a918aa9f4387b983031f49c21ef425ebf9fc68b1f9082f23cf229fa84973d6dd9f4734abe7f96ec47512b804fab3bba00b9bcaa05c87442ae2dcf563cb9ac7a523f6a52d1c393b7b9a69bb59b288267d55c09e3a914ad6702013a33f0319bcfca0033158c8e23688389157acbe839ec52897e1cad957ad109844c10676414821f4c619742c46d4983fd836b43962578a43452ebb44eb647ef65f089c1a6492a15b8c2ce35e7899f2da26364a0cf6a5a12909b1dbf328c15ae73a3a2bae61af9ee03a670c58318d1d61aacf635361247158b50e1427c0317511585e204cb6ffba8fc88011a67f299351c60fa802dc059ccc25b80efb9eb7bdb53c55cbbf8ae6c73e9ff61ea2caad87f6e2ae666d2c54cd7093a248ca043170959cfc128762a34580e9acb383f05fa9e3804100bebfaa387b9b0c363c1720174bf3637b9d4af994f39c36bdbb6cf1fa1db52740277dc239a969325b5489d9edf135d941ad2143ce7be5a8776365d690b47715d982806339c9477b6be3e70756a17df26a1bf91273684e631ee405834355c36ecab6984ec3ebd02dd565f0da1275d4089e11f0ec8f9eb6186f16e9ed29e834c398f12e405c37d2b788691fddd75c679a6becc5c51858014c92e25101a5b47b177d6ff4a4c36ceabf0ee2cf7f1997820a888ec3cfddfb5691530d4b2c1375f0efa1300af695280af67005efdc26c5c8d65c1b086b9b87c361133911254ed9e00c49cfc9be72eb6ab911c17681792711d348c22de2457afce2561a197a71c5614d29479c3465679602098ee79244fb397aeff340b2d93414e665fb5998063fcb2a0a64bb5636b1ddcc5f1113b5cde8d7ddac8dd55471ac582640014e468e1802b9107a13b6b0bd2a5b4163ad28f4b5beda937f8fc4fd918073caa50f7729efa3e2a93b809ecf655a389d8e8bf2b355c9e73ebf1acbf9b666b88eb3ed99147f8c2039ce7096015cf19cf39e3a8eb5b333ac98d28b05f8926860510a2b19abe7c76523ac83af6c2f2b20df939cabb9ff6f1b75e6065e7c5d33bdf1653a8286609d8efe4b0e78c4cf124e4052fd9851223e6ecbaead18503db3d0a9dae72f7d4a7e45d2ad8509c5f6b6420792597aaca098fedada1ce0eba52d9d550d3a4ef9133b4810666ec4227f6908207e3625f22dc9929adfeacdb3e06a9aed10ba634b2cabce070f5980aeb45116f41c093881749e0ec1576b82731563492b59609cc32001b48c586ddccd677ba247a8ffb193669c3414be39047013b9877c349e8b28e220be707a97c384a25f4d0a183ebbb97f0d248b18254f77604f84d17174966e3dce728cadb3397c1fb7d8dc6b268ebb0cf47ed28ce4d35ece39a00577e2cadf9520858388c791009183b2d4a68e40e372495de5263efe4edfc89efa1a0802e058176ea93dcc60139142cd488ff48e41d4376c5c6028747a983cfd3109aa703c3a42a22fd493d051d4b48948047bd7c9d3397c8ad94835675b04398ae42fcf472ed61cd871aefc77977e65a445dfb86e526fb4ce1b9d41f4869be96baa247500e0585308be4687d30edfab0613ffd294b5eaf426566764c95b7f934d389f64680262dcd510391d02217fb3aba84aa53328a969380f31736016161215d81de89d9456a42d8cb26adfe1c5b9b25fe77b34072b212d3fe62ed9e790f3c279bb49ac8734876e24f157c15eb837c1d63b4b2b51aafdd95c18861bf9fdff468b92f5c22a41304b42bb5f91d3b111c5f59d78c233be8bbc2564214ab9f9f00f67a969b909e60f53a0b2e6bbb06d8f5839629da571b1d5f47d392c62d9afac0d0cf94d52474ac01e378a968288b43eda4c1d7835683c07c9d477896af6c9ee23833ff7c670492317630c597561d56717073ab24740322a3715fb3f730824eb23ecfceb00c514ad94aa6f25a3942bf56b21a7debf3a4e4923c99a6610c1ddfe74eeda54338a7242cc6ce4e055d8dc66b216fa375d7680d1b950bfe2af6b84c506a84f317fc8891331c413232628608bdd67d035bc7b1d7c82135e6aeec9c24fe7b2edbde2398a67da7f96566f471a298ddd1cb310c51d8a10a9a93d93206777429518c5d6924f611d062ea1c24c4cb903dad5ef3c95f3b3e3f858ba4ef085707bb4cd8b62c81133c558265a7903a08221d8263f9aaf2900ef6e65e6b0dd51b2d8c9942f109a0ef36a87b5a8a0353b771a53d070a2b19f72dc541081edae638d224079e7b7d027085d907f47051ecacf7dc6c4717bf30a37ea3db80a6c82203129f4c1df91d6b582e9ef305418d552e477bf134c85a302a24730777fd38608aed1a75f443a287c3e95ca47f4c47b4153c4d93dd87f03f94cef17fa0389478bed366e2ce97789a124c0a039506a2895a2ac09fd31b4d06c5827da15f30aee6c80ff37c842972dcaa2a66f425ede89d99aec990f5e10c2dcfbb8303b6b547813e5636c0b088094fec5ca4b5f224b0108a79857e2c6b24f1c29f655e6b8832a1c2f146c481becafa91c97288cc9639ce4107879ef41c686c95a5f6a063c1d63b8f172b84680cd06c125520f225dab9a829a049f56b284722c1f9127d47f5c8b4864975fae4312c870af2c2607e9ac0737b8d2b2e04519101ba7b77ed6235fb4f394db83ae407e52b1e0e55ab282615a6d07e2978035e2ee50f9f58c362824dedbee7871feb8cda0485827dfabf6e27591ec48898fc47e28b8e2549479cac2a1affa6af54044d5eb22c2eea1f06bb0b14f238a5bf44b37c390cd4fcc74a9503c744796a31165be50b7825dafa8473abc9f99f3b43362f530bbc0e754ba3e90e2d8b26f8c2255fa80861e9ae43d7a04b288d3af0ec20d2192d0c3891222fdea0ab619dbaf57a8d65ce1ad18100305e9ae6e586b22a1c3c0635d0f486e64b04e4ca72310ef7920ac144a05675d7a7631d4e4b80108bbb8c4433b9edf83b7b5acad1c1aa2742c1cdab392491f9909f64ee19eff1b09d96aa15bd0ee0eac0791cfca868c71920770b45c928aebc9abfd6809a95a43a00c87b54e51c3845e0fbbcc5fa97c23b2785b387e01ec93a4e21c3f8a6b705add256f820db71aa5af1b999aeb8bdc8f88c3c5c7a081665f19b67943418e41ba9da2334cb8029db1e0174299b0a6b7a5ce7b4f5182854838fd18a610811e4f1395c98722b0c45ef06632f91553cb09022296545e7ed014a2c8347ac88f69b30caec4cc959f65a05d23b5819a2fa1545760cdac692deea92142721500aed2e39b40347846260abacc8983177f15d41415bcdc7394636fd2ac5dddc95844956cf1cebe9c1e23351fe41f6d40b7103c7a951c20ba82a5addd6864227f17de26bc71effb815e3470e7174b7e586514610d4687d04a40f6560c74ba0fa7f91a828f15454e2ae70b36ebc577a2e366928c62217f8ca9fb11abd41ff42cf6d38fdd2aa6ccd0e5435e109e10961d98952f641d0ad616ecd9e50cce7b7bd5db9e09af53055c7298279c49bac9d634a3f1b41e25dfe63efdc29a036c5cdf09c2e027700b2eb48b022c0942d2f3afd03669557751b3cd3c695c3f30951a3b96a797ba2b6e034c93dc1b1fbacfd177200ec9a3146d4ac0a2dc340b91795729ace7656ee35cb771161404bba2728c541c26011a28d454fde59482d1dfef4cccfe5ec0768aced5696bf6334ac1f53bcc94d8c090100644cd93c29288badf205639cd8ba7fd14f74f87897337925e8b0d9f1f0088d2abb80e2ec40986e46a1a41e659e4e6566b8870e96e630122f0baa5d9732a002d93753ea2f8a7477a4f79e792404b359d69a6d423518bd55c3405508d9e0b3264be372db317bffb9d441b0d9a3706afb9f1cbbf27ef73028ed2da19e93c76f1359be925085e4b6d9d88e4d26945793d25571d0ae53fd7ff8c495d81b0697c5c758eb03b95a59d1a7b9438459d21baee49bb5f9bfaa798e9a110d3b1f625f75390a4c2e4e9b6b514161b0b47f4476cb4898f86b20782365509e8a0d791ad8604ba1641d7d3b52c30d8421faec00ddd99e585abfcf79e7f56b3ba1b49de66aa7b92ba806ae49bf8f990c8b6a68699d4bbea8c1efcefc86ee5e77e2ce9a1499d7db512a9b8c9fd7f0ed761ca609db0794183f0816dd5155b23f2cd63f412edc6597e69b786a00e4f807f9be99bfe80edb7a8ae00409086a134d976180f69f6e342b225f4000cfef66f62dbd8b75276985ab33736a5bbbdba25c47a5698d08bf501f13259f8ce234aaea51f8f31b2d4c65de4a0af344aa2cf82bd8131d30ac2172edee734f10eafb4c64927434fbb38aa275311112b44e5f3d10fbf2d310deb4991fb4c4af85b80865ed13be916c4b0c4b11e78f06276bd443ae8ec5be3eb60b4067e8f66c0a4429469e99efbac506b285f68fa2002daf85a6fc6a41b57037e881479f1de21f048f2702e4078e71ee8b91700099fe04da5a028816a5d22bd4b2e9736c76f610df0d455b80a6c7e54671d45781c103ac99f8ca65bbd079d11afebd3e02ac213d21e15de5005a624bec164e47df024322114c9a9317e4d68c6644ba53f07ce6df54074460ef7af8da21d40a7ce87bbdc22c3b8ee6bc01558d827612642ed29af9f2ceab215c6c5f6c7f9febde6b0c43c4a412d85b299ff182951c50d21c13df2a6d340a67354186b80ef01ac8af579086c773ca63d2d6a24917ccaf01f4c8307ce467c50f6b04b590408e9f106ae13acf67dec1fb416a0c5e76141297c19d1acf6bc3cd98bb11d975c51f1663d7027cee70560fcafafdb2d545408e5c6bfde89756f76ff14df1436675b30d68c1db815b1adfffefb65fea5c09dd8d7e0158ab5ffc2c31c93c56ec941a9f6762e7c6617ff87cf28983b94e921d82f697bd13782568f1a32381d08e517377fe9116852a38fe81abd4dfeb3efdfa568c336167337d2f8db8042093fc6e2efb734e45bc411351fcd03b8dda21a12c465a80d209522c1842d85b310759f7fde56639820ab41748bf1ef252cf3f5a9eafe7e9e964600071b5443c82a895191bb0bb5a709d3d533896a8154770f93da96ba1d18dea935a9c29e49071be64626f12d3e11278a6fa128303aa785b216e8244fcb17544367a1ad5d205e1fca73068fc673d63672c4abb0dca52d2325135807f8f09ee05d5105d1c27a3f40879de0de96063b60073a9be18350cf9caac64fa9be0f831e002a59c34662dd7eb16fd1df1ba77a5543a18e70707b54e80aac6523574c8930b381548cbea8f7603292b5fc41a6289e978f677ca66ee90db928a71afa023358ccdde7694ca778bab5f67475d2755b675bd5da5ba3d28af3be8dd2242dbd1a064fce60be151601ce5455d0a6df3bcea22c80fdfa5baa58030760bab7b6c7f7843c220e1d84e84c23f1ca94776f3416276400001150dcd7aac15f0f0d7749a637fd8d78f525aad77fb352f67c9675f494284cddd17c62d81b51ad9a2737a48211ec603f9acb9be68d86e78ee75649d63451bad572251c41f86d439c4efb4e8d43e0ebf80d92ee7be3d9adb16dec007aff5845a1fe6ca2ffff989d29d7fba1459c52dc7ccb921e306159b2f53b3e50ab352eea35234c138fe10d909f3bc0291439b5d7e0e16df348f5419d3682caa60b707dd350c66318140b26b671120d95ff709a250d5198fc1716087ed418228f5ec42a8daf58270d0c48deafdb34913ea46021a81fbdc8f25f9aa5e5a656f0f3c1dece951433f1f21bd36d3314e7ab03c04e313f383e479634d782eee6d38b26e5871def1982bdf7fc8645659b84445420b713c761ffc103de965391c4d2c9fb99dfd6e93e6fdb7b26f3474f125ea70ed47839a2d406b7b6fbc68dbd53612be8c7db540adb73cc84904315cc40ecd484433cbe4a96b016742f0ce11afe863d652c16b4667ec51e92271f1276ad6e16e904bcf52660767395ec75f554d9caa02d6801d15f53dfb604a18b8a12f08e8d1f254d0078c996281f091df6d22cc61d568a30dfacbc6ed9da162cf71de74f2a906e55face90d57a6be5862dc7e8c07917acde1f2b1913b63358a521cae90df124a25f3204e2719cda9d53f82d0c7f8cc711b22732d8559e62986c47a176385bc989ccb71bdeec484781f0066575fa5515d7e3be600ad3e2b3eeefd885f92338dcdcbc791af11fcf77b1d0ceba2734a95e53ecc445233b71d72507ab7b6f0342dccfe580a6b34782c2002d00c2f688d0a1abdb716bdf2c9f8ebd9983033d8964701d697bfbb51f75dd464121a8ce7f17dc9ddd0300306b69568740fce5fa6ace225c899f7442c95b91918bbb795d27f441f62efd9611fa863b21bef07a92abccfe8b7a496c101ab8fc6f54dfa413657417a552f227dac7e25d6bb4a0542c290aa0017281a8c5da30e89663376059fc1a77f39a5482c46651c86d84f00a7eda64c31d68f17652a8a8ebaac66482b79bb549d6c06f32358ea92feef671184359d02ebdb5c5bf82a827066b5fec2649812388b748ee2f4a24a31f7621f9b6a02e4532807afec04832370e64b862ce6c9cefdde8e59f66631d5d98aa0095c0037638211ce505000e2f8db2c4f436644b7534bbe1089f60c2f43f2c0daaf85ea696e2edffd6da9dbd33f4e959dbdbb4ef68099eb16572447290b49282f88cbc6374934e542d9f72668c9d11d6f022e76df18c705a7aef6d156af441ebb1dd69dc0a41d0ada0ece12337b782b262ed6b5ca51f242ed784861a381f0e3f145eb80c8c5e8c80130852b3e708ff1f8e6e80931c0937b1766a1a702c300890113bf56a1f184f69f6b7ec891ded1390407dbdd654caeb7cbc3ca4c0d4b76b84bbd42493badbe6ca6eae9b5c3da8a062894eed712852d14d8c237a9ae2069856ed34b3c566bd22c3f37936218cf312d985d1e2cd70983f46e1e6915403240cfb67ab41812f9130a34e4ee7abcf745bb2831b2864cb8fceac40cd2b0ab0f7dbb1dac3bf4c6078364ba872fc6ade7ea49d5f6920c992468508da77e04045f2331a57179930c5e8dd2c9097c398a02a243107f89f2ecd03d0ba55f250732f945b8ca468274fe142ee67f25823fd96c0960a01e70ea3651adf1c33b6b23c135580e3787d44ca21621f4cfe780fbdd856b60bd63309f6fbb6826ccbbf2cb24dd96eb7a43b1c65b29e70830d9c71da4661093423b3dc902d6170bc19f24fe718839c099b79cc68a13786034966907b85ae6954d7c03eb4d5896c175b23766155c3e71b9b3de2b1f5580b6593b002501dbed0348ac99664995089ac1c81c192218a47baaeaa192c383a470a687d1b4b051efc74f38e65336a9adc1f3feee0c63771a24b85e242afa87631fc5d2429891e99bd4ea130c8404bf221dcb8518df694aa3e52615b777b1699971b27fca3e3dcbcf4d6f3f6db25069cd75e52fd695615db3145317d3db79ca7298cdea287d818fa949b24c36c593119365999c7bb973ffae6c66437e689b50794ab50c9fa6f5506a790c6bb4d496d5fed9cfb7db9493da618e7385d2d619319e70a7a44db8aa09590438667094ae27a122c902de4aedfa712bf4bb49924ec08964c3f3684679cca06762c29f666f79af92477ed9de43d60005102b8dd2d051075740d869bd9c23fa56b414549db5d06a5949bf8b4c53ea088140dd1ce22c069808df3953ad2ab343c172e5c20906d50a08c2f491fc7c8cefcbfb3e99714ea10d69560a6e7fe7b06e721e07743f780059eb3fd34687a85fd6dd10ecef16be33a0596e84be3643f3a1bced4e1e2bb00ab260597cf96b9f4cf969e24bc4934b2c439fbbd77d0c72d6df6d568d7b1f2561de551c189e21e318de92fecd527477f7b9943fbe3a445a7dfd0859b45b1121d88c9722fc9330e5af027e78ea3fca973bb6f98c0380624408c64115cab84a121c200ae7914dcf7db9f5610b6819043a16c1f442fc810709c708b684609be70de1bb7b0e991109880139ea5775969946cfd5f4dc19a5a1bb808af68d1598388d0aa93bc74c723f8a0655775aa7645b7511fcad0aed2a0c148a89325460e39a32ecc02757ad64356d575f9d51d972dfae85e5b3afe8050d6b560aef141788d52b48099ac36f7b15a01a602068b1549a7da002b4c1f5aa46f7c7f9271835fb5bc2bf1e40068332f4a02f494733c2c52f8cf312d6758142358c4c0d523690d41e20fb4535c631fc2ed9517b2eb1256bc9ea5c5e771f8170e7b3fbe9030f14cf9236c87e5cbfa0fe0fac1bcd159abcad371de45d148b1cd7c89d3ea956da3d71156cf85830a314a6251054b74d0a0c0e9792ae8808b3903e0f2f17bcda9cbab81ca663e45c8886a623447c05200a012e2843c69515f0be373b426efc7182d188da36972f2f1c61df3bf894222732b32799a94b83ddbbb3479c40b6f064597aca3ed0cf07e831b59b44610183c071472f7725526a84a3e0ad104fbcc2276b4dcd93ff4a84907a84f10b070cb492afcdd0f0366c941337916748bac2e6483a291e670382f62108b15c62490e5d1b8888b7adb582dcb10a6ef6f5de452ce9f7665acb6438fb0292add2ca31cc912a1d133b1082ab260ac3f7b0ccfa0448df5cd9aa83ac68204c6cd26e99823a906f9dcca8341fc4c5e08e5d6de9e29185ff5fd01d34685cb7fad3625d9b45771b7d5f6597c5ee2654ecb5edf01f85d61a72b3f38ba1c86e474b2b80a318ebdabde870ad1d192c06ae23f87b53689d13208c6495729f51af2bb89c582466107a201fca62244ba6184acbacdfd1b36408a80c274004125e0e6896eef665e22f0cf029a208233522a5158b70415927e71d688b2b3445d3c5836062595fa87f5fabf7827e7145b06d2c1b19f05805ebba7bbb6ebcc4ef833347821235d2c343a8d0ace9d63ef5639268993f98a045592fcfa97799beff60b27d52dbbefaff468889bfac3d66c34fd0a4928da3d2fb513a9f0a61a39eb9e36ae47bb670f12e170bf489869c542b70a948313a60cffb598808fbba3ba3dcd9585684d85808c4c3f660e1df252d65c6cf227496018d74dee536e888110f1a6f8ba44c34e9ff5e540050fc2966d678009fcbc8280a5f606a8f955df63195cbca6e9742f56e1a2efd7093b113fa9d3122822888dc56788ad2348eafd2c9aab6f0a32eab5c55438c3d1ef1e68de82f91efec825176952db62e11592ef65b27f3617c66143f5819557f713c3b33f0a44e380523a965c19cb4c6fe5de2a80a4b80e81a5afe15ee000a3a4c29e80ba7b90a34180f4568f7e32fabf861b1a90f014a3f9db5eaf05e6f637dea809bada8e0587caa2fb5c77a0d9a75d8056f934e9ee2327f99565758afcbefeec3af5dcc655c452e8cdecd5e461a52e138f5ff3580606cff60d9588f17b4d5eb5546913f986f4407bc91839781ccaa789162895d8d11739d9b44bf07a6e76f5fdf4ce3fb8ff8009fb65e805563c5b4a803adda485c3c805af9df59e65e710a7ce82929db0f917e0e8f8dbfe7dbcadd5a267e0f4e9ca8ffb80d13e647a877e8ebafaceaf938254bc5b6b7d7452cb1549511555d09eebd780f1c4d910f9a28b8ee74757d74457d52be3bb81a34b9ed0eea14673436cc78f99810e1fd7863f0b2b27089707074f3217c5d8f27ec816b359f5ce78aba87cda10cb6b637300cb56314bdac5edadfc1c60f5fe9d75b688791326b25d455badebf78e5fe07b890e411fd466494103e7be4367a6a2256118f2ee5404b23569f65eaa8479bf4849faa33800bffde2c585c8d754c9d4b6b5b01b4ca1f2b307ee9a6bdc0026e7ad5c10540724c2c99e2f8e8b6196ce2d8e1c34e7d4b729a28c565905a2c7bf73418dc68d45f3dde5ffeb039ca78c381c722c4a677f3341f4f5ac7456c8b434c104ff33b5cb1b189a11e27b7f41dd083b7d7f0b17fb0dcb329625fdf66c908639e6822d791748da3924d0aa4bae201170759a39301a386ae84db737afed47fc5b2e4f6d01978e6ddd8040d2bed2b192458b1719d3eb0c555e12249a8b745b9eed2f8b132056b7841b7a033e3463add3c8c2232cb3abc7ee28ae0d99291c2be8da0f8eda61341fc85664b75d9920406437b160dd3bc5fdeeac0c422f1f83d2d4e11d3bb64d3ae57f4b9f0970b820380b64989b55f70c0bbd4ba5c71124a4e6f1827d6b77afd76b7468018fb83e7421c0b78d869a9f472971875fb4cba85c707f542caddb6f8b18d78a7f46251955bdd52071422d98de3918277514df676f77fa01b67e0e6b1f25d6a62e37d04bddab29098d672522ae707ab7d39e4bbe77ab07a4c0ee2acace9c27806632d80c44fc0915eda5d08e1c8c1302b43f409eacfd62bbf971e11072c6c9e98aa297bd6cdc08088c09b74103338d6b4ca478c4582b32d046291821118a30860934fedcff8073fe78c2699ac8b93ee0a14065df9c26d697166cb29ed455b1038d29ffea29e17f4c03044201598f54183e4b2b3ea6254a40efbf80a6707930a0924077c946170eb7f1d50427569d4d41cbecbb77d558e60e0c063ccb936c27f6e3cc60367c95e5a2ec24322828b34c6bd93f3515815f915f578fba756e3fd386b76c96ff6281f248ef227c9fa97cb7a98ab5f0707ee55b2c26fd2d89bc64f851b1f8940d2c97cc41ecbd6ef191045f0934e534f13ec465dee719dfc6f2d37a4bf415a8a68e85cc9fdbad59e81497e1f17f3d5996eed657abeb8ec1dc0faf11167d5dd3bfbbc8e09e7a6f02f54b1ac13306f32a9048cfb485ee71c3392aeddf46648aa023fb4c9fb9ce75361ba95ced6c45c76eaa2c4babb4f33e84bed4ca90981c761c13dea176308c81ca1f8e6c12bf3960ba8f057de518b8c983f420db53ff60fd32ce4663f3b5dcec2d085ad2ad531dbfd3fbe5304cc588c6f37af7619c35439d2bee3a40d29890b58938119017686a1f9bfbcc5b41a3edd6657c56447b50296b3258b3357c7740b821799f9f1b2349264aeb6b8082def46a75e7adff19f68848385f37499d35e6b1c1195b8ecf8d7ffd14809c3f7f7613183bf08d2c4d8380a33bbc2b87f613b0bfb320ecb957765b0645d65328d9b4f9b13c89900ac3fd76f81003823f8accd2c6294e2a25f46bd7b4c3412023ff6a40baca8eba903ef508249ae86af523bf6587b300194586b389537167685224456d65d3619f078f9824a07dbfffa514009ab1a49d941b37d0461a85696678847307432226a5534bb3fd02e92cc2e8a15051b4f0fb8564ad75d45616e981df1d98f6d04e4e58c4c3bd75d4e9bd9a111f91e4d2958d80e6b47117e28b1812f69ebf472818f7ecdd6c56c5d99bbcb2ceeefca21c73da01674ac171e93b9bdf1648056126c56ff6879740cfcda1eda9204acc5a7a90a0c833244ac1a85ba50a389a4a6a7701fd6fa2df2d57a89b1ed1f4d27e6e3b14986efff6a794412162ab718012a2287bcf4d5a6556798a5ebe51c16e959b440e3212930160264fb853defaf2bc828a97ea742d8aeed82fc559dce52127e6c2304e98e40eb8d26004baf503c0e9cb989a6d81f47dfd7316725aa71580cdbb77c64271e213380ffe56a73dcf6532ea069e4e1078672638304692662363275cc955ca405c17ea2b2ee2711ea98702c41798473f2cae353c648635c600bf6967b9b8c839ab0a8dea58a98703fd0527477e5c0f545091412c292eed9c5ab53281fe5287632f155e75009e9bc5386207625335254990288ef85743b0148066f8d8e51240aca48fcce5070861386150adf444d86f323241d60c00835f0a28855fc30295c21f381d135b664782fda14d6ede9227b027ba341d4b00e1fdf610636e0bbe8357a6c48cb2f3b846217ee0ca6284601d28a40961813ffdd6a4c365b266d7a90267d64c07233b9a411077e8c5da3ec62bf1e582d11a7c251e6784466885362dc7fa917063df468474291289c5fc24bc41fc388dc7367e84767f9cdeba83f84a272bd3d8b91ec1032a339f58187dca0a38610922a0e844020ea4591bb41736fe64fffc5339b69379e6f1ef79162bca79692f9fec559f07dfd73dbecc45865e50a98dd9f3c02b53b078c6fd0738d1f7b89a9689a4fccffd8d38fb18cf25f428600420af0ebf51b57999c99bb6348eb77f19947af48ebcf04f9268792783c8adc96ed8d438ea1846124095288b62bd5ae059468b6ddbfc32ad508015c0683e09c310b81692ce678bbc5e93df00ec5802d090dc3c35923c28e21bb989c54c6503631e381d4b67a0f9457a0598fcf19f77befc0ba2accc7dc91f51b1485d2994c7160d8dff970c140546b444b242bec57b869eb930112624a3f697bdb9e533684fe4a41673ffeb7f4a40b3346b56f3664a700ced021b4e8cab18e0a51615fb8f95ac1fd46ea473022d8d08a25e21ad8422037368d6519280a6b566699b27de3277be01f783ecf0bfd94352f776afb61f7c275a650cd2ac553de86ef4445196b55b101440376ff820efebaedfc72c20e502c59faa3c2dd32fc15dff9e17e17864d8d74531bf969cf3871925878293f7dc830b6fa0bf8f10fe0dbdf56992e052bc55c532e82cd2d5bb8854eee5f28c8efea3f19d121f9a5f8148e6d17b53f8bb8ac296e3db36b5c67b4513139630f2fa014f49e3114a987e57d7f84588b02bbf46c2767015a3971ad677c1e89f14833d3cd676f4bedea663bde0869c5a82357f3e5469efb053c62707cb5acb0ee5ed1ef6fbe522018e788146b93117f17d2c39e82142af67e777e748e63bb76e44a218bdee32d277298cd1eebe4adb9f7e5dcbcddc4f132a74ee4cb4e605ba0560951077015acad01689a41fc4aa1ec6d8f175e208dae58332607de842f1e957a73e4b894ab6a7b93d76169409988cefa12c5a78af16e23e07214ee0187d8ac075c25ead468bcd4758e1c11010822d0bf876685a9e0ea6cecff22030b4af5b601e7325152e734c3501a5de1fe5d4e9c938d607ffbfd2c3cca41209ba84d3105418b81c2be189c9deff18cca2738c96e41c2820a79b2fcb70f6beefe40a64b1f1f9b35f9561459d66aa295bd9d5fc04005f05fa14ffaa9e34f142d85794f71cc73191423b8dba0d3baa5ce2bc2c1334dbe9d20d1902874774eac03ad7b4b6cd36f9fa3e1e980cdfc30c61cda863e37ad7165ab23bd962f952049ee975d4adc92b271cd6a9db28edb073670bb2feccda9ee62320eb675cde8043eca15b4e046f422ead0206fda5071380ef92e0bd92a046496895f92d871b6e346facd2b103c8a81904857e091ed00cb1d901765a84eeed97dfa4c0fae61b8a83c9149771ea492951cff47b777338c8c53f4b9dd3612e624df0be579c83faeea5d5b41b9de05ca692b10210388e81c65d7d3a2b7beb9b958bf3bbada6dce499817d7c9315ec1e4ec40aecefda4ec2679b6e578d4c1573b5da14058430cdccaf8c9f850ade85a916de48036ef6add7ad139a7dfba75b214dc507bd848fedebf6dfa2005a0ae80d5b6c199cf88ce7badc83dcb57544a062aa7eed2760eeefc4b6c68841b7125526a3cc937330ff6ec9b0695b7adfa78cf043dc4671b18b6a6020a5198582e174f000cf6820490e21a0bd9ad30c71b642fe661d192ef51270140f29bcd87fec31a2950f5e0df8830346bf8cfc96e07e595b342a969128c02e26bcfb4f980cae53a368d756a8cb52695242487672f896f9d29f1c8469e2e39087ac551075147336bea0d24a0223364e5713918606a66abea7434261b7ca0ca9973f0b3c7af5b95a1868a2996f742885510eeebbc85155d96ddc01b9ed8ef9aa6d206105c8bae90e76e9c99e00c9fb965f053ab7ef74373bc911a1e8786b690fe3d8a6889218f79b7fbb7396cdee3369b30e850dcfd846e235b84008592bf3eaf16cbaf894181a1f7476bfa1b121647502b88a1edc428b0208e62fc4d4fa84f90dd3ad04ff5fd146b0ba686ce877d8f189fc90dd12c8b5bc84f33b4a961a4645e36c84a45499359ad95c0601eb77a738857e9a3f9382b9c0243f17b159dd028bedfcc51f331f61449f2b975c57d29dc185bfc6f798b16e86a2fbc421af1c1508a09bd0a469110f78e273af50aee439f81b772ce61b71aa75cd90e2a27215de56ef5c1365ea8835c229dd75caaeb461224d6e82196f0da86bd36da2bfe8c850359d06dd48a57360bb52f9685f326ab735497c0222f94f933713e931d2c510cc27639addccc58cd8a584b459c89755e6aaf4511c42c9ee5c154f0e6e0bbbec6b4f1f2eddc7a7b6061b8dd85d81beb45328972416fd68611efdfe17c6be8ea7d6c76cee80aa287dcba6051de57524639e79df7df84a2785f3d63e93f86981f58170a78e4083cf115c8e1127e9bc95443ab391d60e92077d3f1ec79a2efe870581c1c0b8720ba9d91ef9f3578dcbd2fc7a4cf9b47dcfb567835a148572f0d82a5ec78e8260c534e1fa58ae7a9aee2dabb484cd1ea1a7d73444f9749ed9661f7259c9c07fe79135c6d21d53d4483002c46a1cc3fd2311d754f3182c2505063b5414ba36c795796b56019552ada8bb8740547ddb07ee740e32b0472bb14623055f57f38abd9d75b5dd248daa80ec8fd1da518a23e7c0783a044de1a4c317374752ff075cb957799c0c2dff204d0754801a33d64effecca53919745bf1258ec65e42addda9b75382f1230ebee3da46e85e16aece855e2c145d6007bc1a8994b64363d79092e45e48212f2932773094110c5094b6fb98832230f1fe45b4a259cf5ecc52a0b20199a7c726ab81067964514a7a4ce602cb0581a2d5a9b8398db75c19b41c7b8e07bc47e6517ce98816e252ef1541caa3b824ba7c91aa8a994948de04ddbf176875c9eec74b6e482913ab7194867a9555d7851f37d8539f02f0e156f07b555de34b1c1ca134fe91e71ae32a11612bdbd16ec432272807cf92f933a251f973027838be7c8d57fd06aa7006d0b4bea8ba99201706b9d0d2b640de1a9b1d009c42684a015391ef704b8a46895c64b2a117c2f6f2d605b6ec9b8c93d9d220cd700625a4c5d7f73e8031115f9ef9aa233a9963ddf697381bd01526ae8534f028e221f3a894b697677a1988df0d679dc9d93a17d9bdf7b665e1e9065e2066540b32416012883b2fef78bdd9998ca5470ab9b2a252357f6d322a33071d6bf6db9d81961e9fd50fece31998ec77972bf9c42c18aa0e420ad99cce53f1f6f42674c195d1f6784c3f3848b9642bd8cfbd2caafa5a19b88b9d414715974a46dead6efb1d19ea10460d9d12eb409e7679b1339514659c848a0f670dffc28c046581e7e396aa461da36d6f7986191098980f882108e0481356b9bb071daf23927dbd49c5251ee903f872dc874fdeb563e05b6b9ace12c961c235bbc987cdf9c4b5b1293da3bc8b6e572d40d806c60dfa4b9f81cda4539ce17045ee589b6bed8ee4b548bfba572d1ef05fedb73d6465bb9f09af68663ea686459db07dc41fbb74a68396b1b6ee06c0298be89a306357229ce8219fe8a98e4d3666377a1fde559dcd935c9ef7a103ecf62feb996c40c6c12a9ca85c6f4baf5c1207380e22dedbfbf8be0f04beebb087d7df808dffe6fed69fd7a19925dff90b68984b1c945ae71e7ced5861bc0834b9464bf64ef8f5623f016cafde56d1d970386b1652fa80a9faf701842fd3103d8ab329cd0c812933171aabec2741050d9f910633676fc9b288c8e7d0a5a2bbcb20f61835179dc46f64013180f5ca622e77da818db4a72bbeff964472aaa0e0841d4e7057371724321297644842f07cce3d87a399a76d5452e478a55fd13a270bbc81b156957d9ba089d26c71956dadffe40333846108eb91572748905f44cef8c36dcd1c318a06ce930171280265efa0119fa19344bb2bf8416f582f35b5db1e3d0216d6fb8489ae9803640960bc82aa7afae415a9a997ed10e449db6f66626fbb033cd860413f4ce80c2c73da8edef6f3bfaa89e1243bf91364186f22679591c72a12b16150267813c2c9723e1ebd4f29b88f9ca30aaee6f8e035ed9c3b6e1a7d72f4f7380df1c806a76c1d8b13d5cc5236e029caeca0bff36a1274207a3c33c3d91ef0c5a6931d21d204700fe8841e007158682ecde14c96ce062f3cbec34c8d5bdbf3ec81d00754cf9b412cda818f69273a69cd5bd273a5aff65d479b2fefb9112a49363859cfaeb341c6cb5b2ec1f1d5d277fa1031e651340373c48c5d76c4d82571c5e21720351410a4db147e42fea1587477151f711ce103b00f601765630ca25a6a5ca5fb3178720d3e3e2a84bbfc842b9eb6ab7c3013be2aa5cebd99540a0269fa56c8a07561909ddeef3b6749e2e1446eac9749a4b0abb9a5ca00f30643bfc3fab4837f289e16dabe67941d5fdc0ed96f9de08792969e9cb23253cc9ec2310f9c5750d69d81ce6d79c30695eb46c5d18c8cc8baea970b18546993aea47695c91f0ac01f110858c925e4600bcb3e3ea43beba10b003746e85bae7464b4389e9056a60bcf04d73e78750882085e5ce5860e5288bdbd9bde6a49dfafc11cbf0845f7f0c31033ecd3760fa8027dfbf1c6e7e3eda9cc2f838581a9c8ec640d4c7246306701408bbe735433e51b5d47532fc357a5927956a2d6c83231bfa6a2f981c9fa381d0dcab2478c5dc1fc033ac8ee303f0e424c62ef4936c2aabf57e6c60025ba81b997c8d641ce36c98a9134aaa334dcdcd2234e547158bb5920e44b102b41d90a71d67b51fff1d2253c46a9e917ba41ee44b373616abc15502080a82da7327397920719c6dd2476b19bb8d37d8dab8fd6a83793f8e2e388be04a5cb3709e9e6d729ce439b06f2c95ed3130a13333df2340551539431224b7b4ae88370bbb14c1d348c1278d6ccb673a4dd693246934ecb00fe6f285ba2d1b4e4d9437d6a6ed01fbb449a9877f603845b6085591c250d579b944c2f16f1c9d11bca670948ed9de5f98751ce15945a32bef8d919897bcdd4b3ec8766e0ada5532b8d51f42acc4f3c24a2442dde1f1cc1d7312fceae92ff189378847d1f04a6f4dd76b5a39863627982252255bbf3c9fcfe37bfd3847673e6dfa9bf45d943ea4c12a1518e2b02487a3e70cb04108fb047c38d9bed8806ec3cbaad40a4e1ebc4a8e9ff18b5f572a4c74c371aacabc248641b1cd590db32980eb242b09ff0e0b9d21a1ba5b59658e3dfd181cbce61114046c7600e60bdeb732816d35f1e9836dc69714fa282031ebc9d2d3ef81cff49288f5f476cd37a81789a29155a9ebb42b84d787e54e6c4c60e5793f7eb0ba90fa0cb77523f5ebd01d179ce326ec82c8849464149a61527b338d25c024c3ae9fd3555fb4d7bfdebe4d86835fa5d12d58669742caaba35f35168d40eefc7cce2b40e0ad48c33ade102d2845e453a491db6959da58e1da0c9818f188f2473bf25fef1fc5fac8511cb832ad68ceec721e219c6305776ec501ffb2e129d16708d4069febf3d19098109c1deea207d1472a175bc5cbf9814eda2064a4813febf14fc6d398206dfa5ca305999bf4fd1bbc05344261a526147a741943226ad2bebd1aa11fc7055d5ea187ef33a5f5edbbede5e8805fd6737c6b286d2ebefb33e6441c726a067af95f006ffb5b84059d99a3fcdcd0807762b4dc59953a313c06a0b7284c9567e02c6cdd1e02b9919aadee750d43b9f9f7d9764bc559d7ecbf071c77e285b7b2f4327065cb464f56719e19d5637ede544cce9f140efc09998000039289119b357067adba11bc325952e7838052221aa75753efcbda8e1feaa7288cda7032033bc75ce2d1c7b96e8292c5a357ea1e3b9a894ddb849306c0025fbd6a8dc74dde8384748d7dd58efd539f0a8c95c77a9ab28088b54be1d3a22eeff2c78edf01cb9316eac800513d673d6e4f93764d8287084b626ab52f55fce5716331e6343288fd6d1e1f244be52084d4fe148ab252f7ea80662089d8e876823bd530cd31cb1c179fb40eed4b313406c8187e08357d35144754812c8f8c8fb9fcd40de9e8c98580a40b9aa18f6049fde65b45a827bdf94d891acdaffaeb4b27fa35221697bc2c5135c8d9a26e985df470458a4eb1c95e09c591a41df1a05e008fa4e9effe41f6bc551a3d57d938fd7c70cc8f0e955916c22da36e88eb9764687ce8d26e7c2fdfcd97b612a457ff74e4245c36dc4ae68fe0126d1f46f4c6d6a3b0b3334be054aa72d6df38d0a37292e0e4af894034a53fec0750b7a03bfb85d5afefcad807c1453f663fd367863f879f0ec9f10f45365c5e8271292716776f9ad80715b68347a117a865619321a126118fc6cbbae7e5bcf90b3b3b05836dba74dad12e7c5f9e335b39d4fceb920c6aa688982e7f3b3221f960c2ad4d0619b7748759895ba126387f0ab030433cd3ea682a806bff514d17b960c5ed68c4ab8d32340db73c87be7dff29d8435afe50a148b01f2991e011b65b72a8f78915db8311bcd4b3dca8a505b105ea39a1b6e657517f0e9f3145f5d48a910b922a7eab3cd07a51ee4bf94876dab76c5153540e455161259176f942699bbd74161d0422c5bf343a03ced7f6dd968636b13b0ed10fbd9052ffa3f24ad83c74518701308aa4beea75ef39038abd74c187611a38233e0219d2e5e917d5a7d038d785de15b37365867d5d322c81a5a7884b83a237d74b18ab653f915bbcc5eb05c005be4fb566105fefb89c82b82e3620e7f60b5af71361ea75c4fb8118391468b826a591fd9edd68492b8744bc4e543eba430d0bae9ac0c88b7f45c0afaaf37b25a7994598ca5c0515966f9c6ef8a3c647614e32ba6d6c2529ac4470f5614d7b73f7925b738d6f3aee4e242b95442f96258e8a20b59e04f16307428e73fb6c4555ac09c528f84d7f051bd04012ae3a78a557d62dec1b5d548bc2db45417fc4f023d9504935a1404ed6206a61571aed7b0d0ea0340232bc53ed3a885f9d36add66adf2a9dea04c9f0aeee6b6d117b09a1a09ee020381d1dcbdae6ea1da259ef1c482ce42b950eb50346644da95921da4df802baef5cff8fe50c0428a33866d6e4c61fae30b16283eca06aabb0c0e098502792813586a4b1c6c48488bea7d769088c863b85d418477c4e515c639cdc461d3226986e6fd6ef02f7154ed4f237366c82f4bb9feeab1995ec7b82f24ced77b6ba018f38ad15782076dc4c3fd1dcd4b0a2a60978d74a7a851f3dace82e63e8f0d3f71c9d385a90121f0faa42e48ab8729e86e924c8890dc70e4b25e890de7655ba21317d8dde5dd7bbd636b4047dad53f433b6776afda354313558ff9021b70bf6d44d09b4b698154cee00e0339b3bb8aa662b59f389c9a77b716011e74c053d75c09ff4d93241d185077a08133365de4a623210f66b8c665ee7bf0d7c81de0a5ce6377a8a36635eebbbbf4194de132fc5c0f692fb4cdd137279747acb10ee5c86afba17be3c4ca4277850616e9981a1edce6c7c6aedeedd8349e1df25dde4300302c8a480c1f6a38b1f6bb126c69bca9233aaed2b978243b6fd241dbc325ca6ffdb09e8fe1a323d584e88d0fe7a9a42cb59eb47fb3e3a8eaed3fc059cde6e11231faa43b4b82912dd29cc4c282673fd8fb2523051ed2a0de7ee2d929c2d0fa4edad76e6b15e33ebcad2a4075175f4a36b0b35a06b6f5964dc62e79571eeab6d33067bf8b714e52646daf4fd71ff87ca8515a9dfc615a0135f4cef2aa1c20b7387f31c0594dfa879b859eff74696f132593359c6dfd59d83089504bbbf80dc5f200be9e6d7bc9c103434dcc7252cb3bc7935a71f11e3650d648443328d56615bdb64750f0faaa44dfe71cf931c4196f67f18c963eb71690a4809be7c8dc308964b8723045c892ccf09014c95f3a108304a1bfea9e0fccb02d20b64bd9cc7941463bd3a0c3f382b3cc7908c3307fee4eeb7f8eb459695fcb83d8f20ec5a94f801363547b5c26124366be5ebe9d06a51e19346d7a746a1dfc28d833500f5c071e358f49f69635527e9e2918b2d44c32e5bdab11ab6163ef954d7efd47abef4d3c2322c73a92521d6c14c51b4c99501d447ae340a6a7fd64656658caef22b915f3fba56547a0596b691707a88f6eda40c67ba513d59099539a131b44389f88a6bc6543efcdcd6b1e4ca86f8f3e3e7c08376eba9dabe34e3bdcd6e7bc5f77a9965a89875bd67df376af20bbd79bfb3bc910e405cddd83db1b5e6cdb7198f602ea765f8a2219f04cab28072f39bc37263b74158fa59db1e5c1e94dd2a7fc68164eb58e129e69ecfecdf5493b34f99dcfa86bda3c9f5bd2da897ecb160481921a80bc28673c36784f86c05a96a8b140eb0453d405cd0e2fa1466555e6b69428b6a72899ee49f2241616ec19df0672e7f62a75ee294a1db2c254a6f0179b13f06487018698b0c82e38b5ad25297877ef0eeb7fa93f44e219f8996d5502a3b0b26a0cb06e2d6e477f9619d165eb08ee8c4ba707e9df1b75b15008462a0785088702d411f3d3cee87f1305b2cd7c26d79569835fa638e0075ddf16df75074e8c2a99acfd5fe983913e3be82ffa56276a08afa1754fd1791924cbbf0902823fa8313a478222181d79394cd9a231185bfff42fa026e20ecfd2553bedab034cc9bb816d98bb18d4a7712b9e6911464ea65f63607484b95d453acd2189025c6de5b2c46eb99b85f5b00dbc573fe943d1d76ead33cb3d0b4f14fd46b946783d66fcfa92b18760549e3477a15f80b4ab7d64ca69e72e49d5c32f2e6d59d941bd975bec85f19d9f811fa3a2068b31e39031ecc3e6534a095559e7c5bdf60b1f76baf0d0b10d3beb212e8d9e634408c7dddd207f15548f6686dcc50b3f32b42ef6411aa064778acee3085b49a0b06f590b13128251e165d0f5abc55b570080cf739f8ac52cb4c5c9e80a414f0fc74504590c15cd05b1aac4b031aa4dae007212a4945f1bab5fb2105bab37e3d8e46201821d7c398234849d7d04f125dee39dd1c8c43705a377aec1eeacd3ee57cd0303cf0534441e224c831593f998f2dc12577dc3828fc53225a14c22ebc70d2ddc091aad960ac94ddb78e0d9bce65d94263c9489b9e3f097e41920ddbd32d298f2220c8897309c4b9498686b059e6bc02c707f3b9caf242b3b7b1c6fd50423812ab7bcfa1378fcfc2a9362a97f0faf8fd016d2b2eb3aafaec5bb4c8c90fae6d7dbc76998a0a638526b7f0fae5c65f0c19dc8fbbb2fd3d6997a3293bdace915caaa3d5a9f8e278021f7f1c8724d0af41e8fe7d62f7db125fc619dea2e8e3c6b4eecbd31d02ca36812cebee9bc52c7fba2d2d3901830c227a80cdfa86a987691ec99506e7c8cecff715b753effd845c9a011906e0d7a5f2a13d177495081735c5b7c677ab1c0a3345aa6abb68b43e461a72e643e1e78568dc833fd415c8470b856923187d235c04a7393c189c6bcc22836cf6d5c3a06526267d4ef61dff44d47afacb11e4ee9cd8bdde7faab3135be5110db3e815c253d297b73b4d14660190ac2aecb1bd0111d7f127ecc837e58122523c78a023e764a5cefc65cc84dbf3c9008ae443bd8652a5a81d2f2fb20fdf6a6849932792cc083675145aea0296ce4550012b7b6a98884b611c2e97a0d9ff9b6c36513c0154b474ae04ab372c584e5371a76fe9cbb968f24fd67746e0a85dbb893ea7ec94b60bfdb9092030e54f245943ac8f246cbe87196402c2a914e9b4e95a2684d1c55e2d6e9b54e6b9dd6fdeaaaca63a62e9be7d4058fbfc9a1dddc31d3ffae88013e7d66b73d12f67406cab239c69f019025e44c84060983baf764760a9159742da9312fe64656a814b29aef16d0b2cf470f2679ea9039e03434ae36c04096e3e4ef0a38b1a275be7efb3f52701ba0651241864db7f7c46ef8bdff98a86f041b6edb73cc132d1618bbd87b73ea197863080f08cacd74ca1c83f7ecce1cc3e323483a02cd6224d7c60bcac88195965107c2aa1c3a97e97cfd0bcfd353edb7435540b916636fe0734ab8a1b1853d49278ed5c45a0901ceb90a379b33731fdb737adfbbb647949d663137e40680241fbfa6be4b3ce3a3ce1a1253e56013eb455c03aeba0a1534de548e10ea335113a2de0d03a54a7c15b8d2f13b2b337a4c5cbe164858ee339ed0ca05a1bc253ed8c836f31b17411723a2ed8a4ed50e4f4d8810bf086975016862e2f2c4d58966fb2c8cc8e3e324100fddae24548864d6af04164e6eed260474820c454571197761bbb0fd90a4660b54c5f47c56f134e7d4e81817c3423e6cbd53da8a893501e347ad213fb1fead651d3fd3ae018c9a3f5a24f248f16de99929faf4421edd943cdbb0f78a975a1bf6e98072376ada02688ce36ae18e59441c544231c743c6b0f8b6297af1e637d29a8c775ac8713c39cc98e8062822466bfad0be00f78c7581bd4585923eadc0ed17636529a5390baf71ffddafd128ec9d2f84bc0ba38ea063b93f8649486cf83838478b4dc7b4c607b5dfdbf7e394b1a8f14b57e3ae7f20b8c646778a16edc785fe5bffe8aafd1c299e7edc52973e33aab8041c27ed0c438078c1ac3c222cc3604d8f172ad02fcfeaed91614f24f057f7a20dca41287e1572d49b52d0a75bb38bf493beff3ed842433076de1332f082933599868b1e06df7abcfe736c8abf54d6efecd7ceb86850ee5b03e89129ea8cdb2e73ea0eab6dc9b8343a09a38a444f17e79c95f89b0f0dd3a5efbde773388065fdb94855ca3810b679aa1faac6618fecc2b08ac6789e591cf00fa40ca41412aeb1d16c520c9193b5aefc510efc4b0628ec2f37d88cb0b62af3c3ce2d2186afb6016dcd5437d181b9caf514abfa450f53cfe4bf6a258a90ea43065f15eb733189d9e83623de8e8410358ffb1a41749a2d5e1d817a48b35855ac8707402532d44a71609d95ed5befe3a080cfda78159b7ec25f4d1b3c1b50f603bf33b781c8993ac0421c28f7a96de890a86515dd3236c8279bb7f27bd7c3f8e38648ce5cf67a67240a1d71fd37e4a23e32cc03837fcc30cf832489b3479cf5c8d9c9378ae2c38a0d08d63bfb81ff01a01b76df3eb699a254337c358f847e77efe70b1e6ff042f3ab2e35c22053095668a674cf006f60214bf3aa9d080884ed89485073643856f97e64adfe1feae88b08d99d52133913e82d27ce5e2d3cdf7ce39edff98b517fe7f4b7d862ce986443be833c4794f89a13d80cac2de4334b47ef78bb83c2f546fe728b0b57d54456718094be6c81122977aa30c24835c95943c601fda278f728f3de673679eca16aaeebe6208cf1bee5f35bcca9a6cc9e938a17fb452ee41ceb9a535deb287bbe9b876708b254e2986d106f96ddd64c02ae31bc8d7a7d19d9452c0ad59d6eb5e8cf9c13b975fe0d6622003d3624a1df1dc4138b36ac1d3c9c4e18d0710fbcbf5747a1baea0388fcbe7129c29f6eeb3d685370a50cca19c6df4b8c0a09ac01d79626e27417d51e3f87f88c2162782ede1de62209c5b8baffababf6125713b67ed422248bf6d92936fd033c644f7b710303c3586c7e8cf300afc15f8f366b496d42b1bfb15daf424f1ec381bccc71eae72690b27b8a3a49566a7bdb9b5353a9c8fe10ab9dadd8a6f64d6fc9c3c1aa121e349eda471ad7d1b0a5f824dec4b772fb40039a3677068a8b8d4e8a9179307378e0ad65785d8103c6c43ee342ec71c510d81156680485d5cf0ef687a3630bdd0073ee28e20ab53889376a841f1dbee42ae9943ebf41f350139a6e9712e183a27b20b2dda6114d60d6a90dc2813e211aef94627ca27997773ce6ed23670c878598c7701380e61b5bd7d3364ad1f111606343c0f74efc146545f6df2814df443099fda9b737944017dba57b83042ecce759f9612413b74254c0be1bc76fe3950819eb2aaa1781d8c80fc60a0925824b6eefbbed8ada7634e9d857eac4eae11b41015337f41055cd32a5b1bd8468fe150a1b9f6fb98e83838c8367aacaf27f8df3f32601baeb14ff14351ba67b9095d4a21a9b2ecec420aa0867440966c615ae5b4f1559d11bf800f6b1753bc7d16f16aa7b8e7b25010be2c76e21376bef6d59fc96b12af88c53812baafd6633cfc4d6313d889c603d03f7d85b591d092c03c6fa6cbaf5d81c10c65f17cac2d322a7f156257fc7e0009524c1d1e191546f65d978697ea5cb034edf7d3d93b4124cedb0251ce527ba460a831e0ea63a87bc77fbf6650fc7793edcec632770fe3d66cc7057d3fb984a1a786fcbe853006040d721b2691058080108f1d1b5594c574574f27230f23858edb9fc50f5a2fefb9027898311449589441681bf9352d9f752bb62ca9be70c3b61952de3ba399fab081e690b0ace7d2724535a0ab02d45ef206a51d5b1b0627cb494ab00f611f1859c6e6b3650210aaba1a1e5fe2158581ff3c9b028ef9a53c8d686df302b1a83ba3ae54308a0a8d8209c7be82930809d7b8207b3e1579e1ceac3c13ceac09336eca323f92e53ecf0e71e3a80815985be8bb750ab8f0bfc10687739880b3b8274a2c7009ecebd6817e07f9762f12f52333ffef5bee8cd856a43775589382bc59d509384923e41953a855e771bc1b88b42266830f0b69d5cb161c8e9961a06833b4c2214fa4c7e15dec9bf79200c92b7db1c8b72ba01a18de4497f71c53756fa9eebf8088ff0badd6bf8221ed468471fc3b4607dadbc5ee1fa25002b0b52177d0c795e7904a2626a0b3a229411cc21391213496fb2912b50ccdbd1283b9c18beef3b42049c77f3e6fc3f12f1abfd90f7d289e7114fedae7cf7fa165d7fe525e3f5b6e41a376b5c5757a4cbfee1081afd3139cbc77809dcdf6c4183fc1e3dc61d2499b43247701c5e869af431d63f34bb71139c4e26af35eaccd8974a40ed0a10a678a31ff6d759e150dc083051234f1aa39e3a04525aa8de3f91314a133c2bb06aca5c3cfb8a613f55c4810e990fff3d9842f5faff7dda9e1b593c09949bbef1a79f04a9e240e1f3726214eb709a64809803851c1d2eb071558abfe4c99667d4795de37cb8764ad02d2d67ea75c02eccde12aff71724227b4b8ede49e5809ccf51d18562d4095620cc059f9568c14546e20cc8d55206a663024804908fcd87bc795545f25aef8a3f8b1fbe9d980a64e5fc1581d1f2f865ebff86de889c553e5d7ff4ea8b67244154decbf2eddc56194c69bd9eaab00a55d3bed843bc2788134296564c3e0086e57a2373e137f571bfb22425e3cffa5fbda7ec5c5b40ffec36cf046204d8cc2a6a0258a1394ee56728686a0b36916f85180fdfa110dacf177506ca10e978f94bf74b5249cf99153228372b8948ea7f24e9281baa086f33f8716f5626916620ad7d3ac5c1c70d52146bca0f6d252f0bddb78a57efc0c5d31060755c65598216d04debfa008d4f3b83bb76eb91bc96210717036411e48b585ecde99bea5ac7d6abda59d009298ddfa84d2c29005505449fa343bab8f5f7ff93ad40f6a53fdc98ff338c4e84fa2380bcd6a00f8470959bd5b6c3d7d0fa55de0276922090a8b3dd9b68711937f1848e4658652e272ac32515f8f84e51f77af88be821b7769f488dd7f35ae26f71e0c0f41bc68442db5a0d36883d69966908cdb6705198cb8895b7731cbac3b9aa29eb971777248357050a7c70be6aec4d394109aee02fafa29d1f6f4f10c7a5779ef1a3101077100636e2e525c28559070dfef6e7d285f8734de2dd95d98e383b0a87b483d1d46234b0c98588205e7e56e548fe0ae85c6524cf2800574d400d6c516128bb8e4a01c929588d04fd752b8bda60fec3bf4c65782bc3d76cbf1563c5663d9899723674eb9ccf4d05abd88e70b4b178ea7876609691e0a34c69bcc08ac89409c3411889502d5d8fd3bc4862c005ba776732e898f93fe1ccecc4a58b0cee87ab084c30cee4e83c2712938654e7ca9da8fda65445feb69da1c11e2666cb81ca80258d3b764b951a6101b742690fdb41511d333e73d6ea2ec3d120bec9d41c4d43b40691edc6b6abf0b23f3519b582eaa25f84e5a8eea8481a997d72b1f73e498cc5fc56300ad4e68340dd2523b26fb482ea3958a379c7ff9315cb664c715f52ff62743be0baff199ce556fa2a940fa1af0e75b1698b9be024527baafa23a44bfa2e9ec14f32c1f5628ba0242ef27d0e73b7e27d5d9ce722eb4dc8f5cd58230fa6845eac34957346e859bf353b00b5d7e9771996c4db4f390f757efda93550f7862e7c09ae7bcbd284c0f1e13a8a5c5b2bc5bc4670bfe39d25eee5cd6e662acfcbfa689a97856637a069c8652df32d6ca4383e275ff7c768532642506ce85aa0a5413c2ce184e2adc96e01f12519fe7778a9211967dd73c52a2f4aae952ec42fc8a687217209ce6c05cce345199f52be06500efe2bf18d6bbb3249a84679df7efdcda46fa2d44ffa168c7f999dd326bc8890b64e0bd77c8d83db78e7e9d05aa717d12d152446cfd47c18cbeef6334d50fc00a92bbee0cc0e652c8e5da5e3c71fd424c88db661c9096aebc5d0249916634b4181bceed6a15434745c866e7972f5bebadd30f5730e0d4cc4e7a02edd7ba6d8d2fcd676905857f0e619ce30abf7e9a15fffbf1766791207086d43a6aacfc9adf091cc26d22f7fc163823c53ea32b67857b0ece7a067b440cc5e4772bcaf76e406d2e1d6620c7a08f6fd23265f0302896816380438a82ab7c6369f9cd43fea7aea0f3ccd259c310b04030c26d45d28ba8f881f1da3129cf7724b5a67787c8f4381dfda044d68476b4af1c5d9c71c4673e9dbb2555a0f089f8da780f2818608ca0a071440a003212c52eb946ea3ed99a3e18fa5462436c12da7a708bc328397d3c0a2810d21a073444ee2a850f8d53881c549cdccb681721f2ecffe45a5c1ace364a0aa3e458e3334e0b8280ec3b5d8aeae72bb8bd5a3c9b1f3a9fe1a4370f84be028400282b29b069dafa96aae3313c0e7143b0b29084504efb00cb813c3fc28c22de096002c0650c04fb6b83518f105e5209bbf58fee5e4195116cadd8d003e70a45d150b916fedb8f9e44c86d9045c7837642c471627b4230d8a384f5d3637b854881eb0a1e346284ad5d074f1c08b763d6c4d3dd752b8d7e1949439761877a3b7ca433a9a12474cb1340fd4ce07e5b284a33ec641340b64eb0d0748cb77896c8bbb1fb8fada8243b8aae4ae4f83aef0c1050ed9405b9566a036f4bace0c9203440922ca6fe23240b64923faf61430fa58af53ebafb4dc8ec745398ee041f635dd8259855f317883c26daf88797d70f566034fefc3f5cc502cab2a9f431311064855f8f078e4dbcc5f1dc5584ffcb7e9556fae2a7c33b9a4c3f5a254c7c5dc8c640f4e7c2afc2bc8b3f434d26e49c70d22e2275946109956c906dd3f6c4dcc896bb0377a15ef55fd075c446a2f4b32748f42eb83340a1832517190de3f85433bc1d2b57bdb78fbab605037b053471d567a525c69b0451d585546b0af29607c8659d567b9b93bf10de40df3f2d76c4c53d5dbf4bd598fd4d2beb7107797a17c36176e31db2da177c028eb847ed4248847c3c77f923bad71bfcefe0ab07e88116b94355f3d8de54f33f7c551baa3d85416ad2412ec3bb1909053591253f07ddee0235b566c6a9848786fda9db1abbd23e1dc78653198ab4fe10dad0d9d5929b9c8f1d1ff9041d25c8fce717311e0b046bf87c737372614cd427d7f53326450c4c12e69a400ffb43875eff9d7ec89c122fe9d3669c31bb6094761883668f44d990957672acff8eb42653a858d4f2168fdf9b3ea8fa55e31f03229cae2a054c795b8e5cedc2745e94187e8b598e28d957c16015e8a4231a0c83d3557012607ca013b46060c60aed71e0c7d4a40302e3e47ddae502ad2ec632e5d560b2bea34cc2cf94250667d871ca2e30b687ed9bc6a3abe1cf1bd01bdfdd6437e017c10f938e410fc25ba3e1b99e5dbd59d9aedef4e1327eeeb307a4a2da2e0278d5e7a95ff98c178b65380140ea5b75fa08f463ce0d4f599a04b07062c084d532b18f44f2268f5356c765bc1b615a3297d485fa9770652868a01ac57092805aeb314d1af1ff6a64850ce04c6669431bf45155869c54131c0bba2543bed84b93f2364cfe093d70f5a27599b2dd9de5a78a69958eb0e1bed562c50173601a59aa5d8790149c4ac27b5e568a1c4f1b6d58dde72586b79898ce57ed268a7e328474ea13cc7d8c419d42bc5db518c508ea926bcdf2aacbe8da0b5d19653f5605ff80c205ff77bef0d2230072ecb4f383421f4eae5a081637b2a51ba049df0fadab92dc948f9b78d6429b7b09b60686bf5c595ecb0b7ea4342a1add1ee2a6a8cde02c0f538bc06d5bdfc6ea4b451d5eb5f445f2577583578d402cb2183f718dde70602e8166cc53595e0055eb3b8d795fc85c9fe356b1750e4347aa017bfb833b1549b74cb8c4f4011648c1c2f96e8714637f4f77b984e395a111bbb6f10f4e48cf2f4e295c5fba90e71df4afcc9d687716737f6cbf959fc8fa96de03f92f140fdf7a32e128d67ac270fd4f0b5057abbd126374d4490bb3bdea8be9d04240deb5fb4c22138136750845fa43897ad421477f12bce3ba3a69a9a95107064b3dd53e342d5c64e0bc5b0559096e13d2355c1d1d1d092d9996a028962235c4085915567d71ba93e5ddee17c1faa7ffa76b61deb1ab729d3ff0b9f7d7475ce1b17c04bfc09fa7f57cccaa10a939d7c2eb9450ea2e483cc5261de0aaaaa2178b5463db5bd14ba39b21d2fcd90e1c3a0100dd817444dd61af95bb545318e0718f69f294416af80589e7ac2f3ad29ab4b8ea0d6c59af35a398eeb4d8d2cf64dcc73f27d85bbea8f46bbe3ce4e4db3ec1dd8782de73857da918d14f7f216950b7c1730b32ee5cb883e86e07a439c81e6e30b9c45b1f86db673c23f9e21a3747ddf6081fb110c015aa39bf59ff91d4cf1ecdd2adc67f9601f1f035da751cafd082289dbc542919bb77114cd18457bc4f1daa19c7a55ad5d0856d3dae9b4b651cbd0a590ec4e857bcae09c0af6bab2aa6e4ba67ae1fac53a61527cff1a83ac2b8d025743ddb751d19d48fc265cb5f25b1e16957fa0f7cc784e2239a9fdd81d70943faf5656dc5c3804ea5ca088a82b23166464c735599f19d35e1e98666d40b6dcdaf00aa7bb81c3885d38009620c01bcaf35f4a1cc6c06942f654b9943db8043f6735abb67f46dde539b065ebf09ba0bbed115019a357a52368cd0b9775f0f60ffcc691e9afc06171537eea148e259bffede81c33c0418e080de39685bc0820027d602031d013e932b3c5700dfaf1563f400e73522285f0f010cb510f94ea6d0f9dcf385241750c071c7c855a6c7509b7b40cb14a13ac9bc3f426560f7d0e5bb9c245f29c5181b5d6371244d48173e8db453a1906140311c942a3de79ee77664617b882433f6eb76b9433e77141876383e1e2e7bed3359d320ae9086992ec3b9beb7a76e64983215cf3d0b0e992e58e05b76f4b2914b9b3edc7cba08e3990014543b95d2914f929b3e64f4ca855810b755888e357a7e693f4b7b5da15892a69dad9ab847c9eefc5e8d3ffb3a27c9410f5e18e8cc746936f1e49752e686dbd6c2d998c50080281f307d1a61ad04313bd708cacfda762870cfd100d4b491209bc7d7ad17134e32284e88a93026184762e600416e993b09a91e0cfc981fd0d735f54fc3476791833e86577000928d4ffe5ee7733b6ccb91d9cb4c9b1bf6f960d5e082512ce622ce94c003fac580718157798522b88ee95a0921489f23816a87f31d6906353bd79d248edcfa2c90437f3f9823292ca30f1844f1be5b520a5e89365d3d55560ed962ced59fa7f15e29c6aa916500d3ef9ce371511c410dac27120ccde6b7f3bdef129761e8e59b5412353baa37c23bd104f14f5ea39521588bf47beb75c53dd76daf0234d756c1c3622655e5cf3bb6ef6c21823a26aba5be82d2266648a358bf9b6949457324d10f753f3c8e8ae2fd59f71c73fabd60f1f65b347e50c4a65cff313eae2366c965aefa40bcfadc9817c5e8e4d5680892c2289ecd4a2d3cbe41822ce5924f1b99a1ccb889c56e7f7a5ffc29db63dd71e81f92ee0b2c3f8dddda4ec5a08895efb03e5e7d725cd32ef94e9445212af22dd218622faab8fe3c0fe9abc90f53127d97e65eeaea3405250f62b055c5e297c8d843fb62235a279a3a4a1ee7310f943c9be93e0fb88b1f51aa4d67af313e6f945763cacf86252c7e1510f8bab9121e51155f3bef1c237a1db34c33825c41186deb2d37cd4299c31d2b0bec8bd3983089cedbe759ff2e27ce97532369119f778bcf5044ae992f60a1914d73d5445116dd8dd8103f1722c01e5d5f15b84afc71e88a8d4c89d2526dc471d812e58a130d2fa41006995ad56c828e9ec29f91d851e7ff324df1855ba0082a62302d94b634ce93db1b61ecd80ad25802cd79c93410f69f1a6741dab92244c57ade9d74b4932c1fb0cdc050160ecef6b46fe804060fa042fb2611012fd252bda0232fd2d1a8f548320d15b09a129092d4c3a0b533728206bfc027fdf0054228822596ddd3a0e3bf7bc6fb9979491a55eaa869ba2668242549cc1ae37ec39cac985f40a4486f131f8e81b328e591b46d55d2f64cd0321a1a8e24942367bd1c80398c3c4c2d43d47fb63121ecc7607f0c17954fb7ac7b1d83ac00a6715eeab46d815d55c0e6721d170e8d59078ae69bd71a5be57ad93a5931cdaf420c89cfe8e112ca4109b952caad0a441855f9bf9c863f4b673cc4ed868bddac5ec2c2be88959b9069120a1fe2accd298cb4bbb2407c7b0af83a906e910cf0a4043521bda1a68be184c15275fab872ca6b49f38d01edea7ed510d1c250966f51ad8d1855f503029db244b34939111743b9c192bcc24ca55e30543894215cf003472618e723aa8c6ea42d1bebdd9610be44afe97f0136c5a13d5c8aa62fc8583b45193af6384ddfe78970933adb0e40393cd65390acfef0d7b684900574d0295a1b2a8f08344a2252f8f397786a68eee86e757ebd6d44e773e5a4a32300895bb9b9ad24795d43687c432b3f9d73a6c7ab89010b9546c7d2b967b91f8b922125006966510542e4842418fc68571271d7b6c99699f89f9da806c9cf7327c1a87dcf40d42f856ee8d76c46ea677bd44610dffb6f0d2508c7a8e013507bcab2759a8288d0f4ca67f13c493aed1d1db1e27ac6c6dc1d517fe6188744d1db3c70228c1b2beb814aa388b5142d402c9ea87a3f536a0f1aa4091226ea516f87de6828aa6afd91a5ab84d0108395e7e47e3150fc83200323d99ed3aecc72da1f6b0477f7f9545c634b954de2a428e6fa073c0d71883937262f51d947bf9f94241e7b278f86ac231665c202a2c486cf5f8a52dd72c9bfc2eab44d6e5e87f98f25fa5dae8740852ac8abb3167ea8077dc5141e1f94c8389a06b5f145d659a19aeb08a1a6e6afc4316d2d5c9d4b9c76b55735a239990d0181b3fcea79fa89c3868392726772c0719d662e91e109cb186e7b52012077fba2b3752eab3024723f8403ef609870d6d7e7e4f13b321190fec6f44ddebe6f4a8a52ac74a52eeec8521145b745fb3d8e3f797eff005f013b7a354509b5dd6807c2bebacdaefaa69b8fcf66d35b285cf0f70fb2fbf27441e77e2fb7a39a4259db45bc4fbf2a1f7ae4a504fbf84760d6c3e78bb0b3d23f2c317ae3e51f275a3c96180ae55eb836f37175880cea35af18f9357d6b1c9021e35fe0deda70e6b416886ba5bda16591dda21207bb2037fa425c007efd13f24db58abfaa5476289c41daa8ff67a0b652a1bdfc3c7a1795e9b2e959fdb518c200c7c5efd20d713064e95edf073026cf122bf3598b33a1723c246e1ba75d94c2bc28d59749057c88de3180e5d769190f1d88ec9d0f33a366451be252c5a24562adc2af759732eaff0be39d110222e1205528301e599e12097d9f3a5a0e6ebe001397e67bfd7f8a2769f284d66200e0477441d7a0c4063fd53a0ebd548038aa3cd39f42d95375db74092dbaef45c541efa7156ddb631ed1eb530100cebbb14a0723150cdf4d6e349de094a4464786e17eb9fb522ba5b4bf7dbe212e008e5fff73c359f60d168e030e257bf565f48f52c53f9b96c7a43e25b620838f6708579e41a76f976ded860495365e965bd94d34d31b6b9ff6db0f951fea420c64aec709a397a3b3bb197df4b354d08c2366b08507d06cecb11206feee498df0692ee5f2b2e00623457dc6f714371a1ae8a579b67cf6fb2d9d839f4529a1aad722db8b296b3cd4057b8cf0e214203be01c667b902301e28604e0c99980b3900e67a3b1b08d226a3ed477cb143f4720960f1b7f204e8d7d9639bdf73aa43f30eb26b9bb86d5e6bf580459a6896a426dbcf751bb695caa80e23bdf516195f540a8137474f6bc4dda96ddd747cf63785fb2fe94ae3dd553f1c4619aa2f9d07011be618d8b248ea4212d11d2454f83ec6b81410276fd817a15c90809985bb129afae5e0160615b0e4712cf1132520a1da8ff3ec3aae5d9127f0a9c61d8b9e82714fa6dd76c7c5c45e8178353fa33b06089393017e14cfc07e7e48280c4291651119118583aef2e1b2a947f38572626b4a6812a11a147bae197c77bb6c04d0df20331be7911838d41c692ae02401b78f242fdfbc713af202769aecb97ee45d257e98167c19317dc242d5a302a9ccc91be276537425f8a1d076d69023738cdbe5462c03a3c64280b5a575666ba426170f12c3aebed79aac60311c0dd6f37c623d71741c25dd9e8c870a5a9742ecd8a8329a8108f0e0634c8c5f756de0c52a12d0b14e9d7b9184190e73baf14213172c9dc892cce2837e9e397a76de3202a9d5c0cf3b804183de5f636fd6ed049eb79a75c63b2e87387bc967060d29436dd9ad275b67de3d492f0a4abceb1bdd80d79aa338fefc402ff362cefd57347458c5c551e3ab117d31df02a3a39265694047d66883fa2440549fe0d49b06d885f7fea58cd6bb97e7279932fa04fce2e1487d0e59ae9e2b7951536b19d65110f9db6b7f71013b98dd837c762c9b9d4aff4192da1cc585c4f1f43797f690da610ef9076f463963a8034bc73cad271edce2bbed22f13cbfcc8aa48757140f91546032bf0a400124f2228240315b12999ed7a178bd623721dc132e28236bbc5fa16e6c08c00c1a7d23632dd8d73f97b624c58d1b61903672104c38413321ba289d349c6f4fc42e7183b46b76207761bdd98383c5bff08560199f9e4aa2c916028b099315d6d3eade6cdd34ca058eb0fced65253385bf69a03fcc5d9c90a2016f16f9b3082d00ab0e7976b00fed8d593187078323bad8d4e670a13aec923c24368a3de17424ccbc67fd54e090be7b1d73377bc10104a1676eb630825e4f0cb5ee8e448e4053d7270d405f21f065515000a3151ca037d97fdc1efd30bb616865181b2b64b6cbf9ef7635f64a5afa6dd61ceef0f0a41c1e20b002f452e67018ab7b35471295dbfcd2df8760f8d0349d61051aebfdb3ef142aed329551f39fb0a2ac87ababd0da999152b612c9ef0c2c056c544709f6dd152968bd348937da2bd29d3388da96840850d1d0d850e79045cb6ccac01b8dd7e525b9244237cdd27dc21eb93aa3b4b250b1c67953b536cad395163015bea138a03a3bc981971838e5253905d1f00e672c8a96a73b3c18f2ee98cc16f44c1f993cd0ac0aae0614b68093b47a9028bf800f0b37fbfdd958cd210059bf1fc47d6a1b0e54aca725a8c395d520ef01861d620f7a47cf2d2afea227bce429ae23e1b4aaac065d123812a8f789baf6d41427697ed8c05e45639348ccfcf3004543b52da8a6499dc04adc9bdc7a7002c8b6e5c84bfa1fbcb3d0f39d7bb33a66682842127d788790926cdfbda9265c317243c54a8acffbc50e50a61609aee63c0439b643ccc803b2453ec0bdda1d2fddef19b9424b4a3653f5c4d3143c91ebafb75c930f7a47cc9ff8cb7396f47bf447a18c39a321b31fbe50946a005ee14979f27c5146ed1b6f43d9e8e291a9aadd112ea1059181c3306d1e6fb85b68fd4e93309c30f8fe9910226a9c6b51497063acd247f520d3e41f9c830515abb3429accbbea229cd1f5e66db79bfa2ed8bedd2454761ff951f78b9bb739289f5c389fee2e55d10633f17c8b9fc103ff872cbffec060808a2c6533639c7900415b0cb94a790560b69f0697bc52f2852262ef52dbad88a2e9956330b79fcdb8116f0b7378e2f28dcabfa4ebc74166a3fc1d1258139f00ef95dc135d5debfcb643012723b9d13d3ee16e98661173f3b38a70089b2222cdc10cc9d43ed1735afd6102b11482cfa17e8cb6847bf63f1638b066e6a10ad565e27deba3f42e686e464c041e18d01650c5972d18d9cdc6c93e29947e10e2e8a3f13d962300aaa05757b476e2efb286732f39da9282ceb786c40f28abea6d94fe49ccd14d9b1b922214dd4d7d2301d2b70314ad6994a1569d090638d02b6058d151dc922c2ef17815012a075dc12aa99e0b63ad6146faaed2b97c72dd7a6ea8429ce1b6d0cb023e7a235aa6cb3264b1ef941a24002bd149e2841aadf03eff402bf6175e489485785951fcbdea82b50f5260daffd0972838ed1c1ba66c8eeedd647ac615cb581cc865abe816107bb6c8f94d8d5c45c93b1eb26814256625e15b4598065d851cca5ee25e260151d163969cdedc0ccd0c0f7e932f53cc064f599629e8a30cafdc43ee725c7cbb6af3f5a247a89e80a3af05d066eeb29ea02217db743926de6329f8f61b2a5b4c949e972610608de420c8b2cc483d346c365bc76209c55ad8b7e3d9a80d93c56a09489b626fb96adb5a884177eca0232cd9d899901f384785c9817f4ba9061717c6790f7351fd9aabe49ab39e3a91b5e324000373846663bbe6d9a14e531feacdf7bba37ba0131f3035cfa317d156baee6c1a8429ebd5086bd3a3a79e112a45a4ab5e88e1ff10715bd35f4bb6cb6ee4aaa6a369a6031a34d0de18410aa7a480b86457ac0bb53b3cf76963c1bf1bb2bcf17dc84f4645019112f2c622c35c502cda929b08a639fdc8d1f39799db1d9ab298d85acd415f4bc568e04e72386b4bff770357e0673f51b637a5ddb42fd6fc8425d1588a22f7c3f9b3abf72f4c64d3b8df91b220b87a186ae1309faece4c7c8e36518e3fcbad5461dfa892e2ca2e90a2171cdf1b6bb1d137aa948102a3b209788cb7b6815ceaf573b6ba157bfd69fd062e69c8138cf8fb9ef27621e37dccd928c88222d09a48c44d5c984ae66857b911164fe745f53f95e0f5df9a8b96d5a16db87f59e4f672981f453da0c26ee6f0f0060b88858a70b0b9ff898e36270452d621e751c129d37611274f6f2c58541edbd671aea54d2258af2072d944be647777fec7a8b193973aad629daf97348016ce5fb49045b026952638d970a1b98de203de48860be9cb75169b69b25e9102820b93f0cf5dc97e395e298f9d52da4ff963197f8503e808e7ba2c8ee40b68bd06e39ef361b6ad7885eec7ec0b1d615a2c7b5bb89d35f94bcdecfbdffa391b442facd07d1b88563bef5fea299c63e9cff2b29841e3d4bde4886faafd88b0e38edba005f7dcf589bdc011065c77ba5e9750cb36529662a3bd966fc60f6d59bd878325d0032dde7c6f7336cd345c6c0d5b7265bc4f76a217e102d21c2736a1267eab639ccf935a4ee8e243af83fcf4b85a91322bf4135c0b4336fd3f91f5971300d70b7e51e8fcf3fce3f242fc2646ff1cbb6fd129b8d2e43ce743bab17074796e8c29f0ce6b0d62dc423e0f78086f4bdc76825d4c867705a82d35c50533c3a3ff150703bfa4818715c24e77dc6cdc23207f62c4bcf5ecd4e689bba4423abdfb80e2116e17af2b90cb6536657da6a68bb92d54873fc727b114ab6906ea6dc2ff1badf2070fc21f6c76d394cc63f7b46a8e1c953eae8a8786019fd60f0fc4eef5870fb32efdaaaa53c8a4f6e225418f9f661db55e62b8015e896af03745f34b746903b5418562e533ff75b40bd01bcb89b30e36c8f7b13297bc02efd79d540fb0f5ac3b050e77ebdf7388dbef3622016e4fa23f1002c8b6925f04ea0ee3f6b856961fc9f2d1a6d4d042503590dcd4aab95b987e88ac31381569c680fb4f5deb288b41ae4da75da739f9e4c60f1132dd92f660bcef0fb02278228d919e816a01faece231a686ffc146e3057b85d17cc2d8fb04ab77ce4a604e0c8b6f1217a72d512f116b8ad384036b9dab514be0a60d349d643f72911584f4a0454e7de1d55c7cb88a64759d3f848fe36d7f0bfd2867151d53dbc51b4313f34ce092e97135473ceca30627127cda94ffcb9a7b82ec4bd3fa73d7593108a0a4173d96295a82a49b4bda276ff79ca1222247d03873c8eb27ec9510220c5c4b321420887a41374591dfdab9c45ffbdf4dae298aa69a623652f277f17947a731d7712b98c3b219db4910c12bcd1f216d7d55ddc8818e89aba2b89af248f51439fd72939c208706313c160be94a58fe38b711716aec509574cc2a7500e42bc9c313aa5776df8a48eefaa2e342e051cc626435dd035eb0da958bd0ff64825d45e3f3eb477320bbaf34031c0b7edea803eab4f706a854bb29adc5f4bb12b70b79b0f38caed2b2973b9ce468a7f1ad19458bd7ba39e3bab67f7fa06239be2bd574b75572e1bfb8ac70d2eaef17d81a1abc1d3859026e30678643db2d58460b6589a2bde1e9f2f30327628563fb2f9287e8afd11456dd1f342fbfc5e250652e0cdccca1788413a7ac44c6c52d675f03c7764bf8de0f977aa006511fa75667abfb42f27b7e290d23631d65fff296b576f2cb62e0c62cfcb5d3d3978b6aa76dee5f634421be4e2206fb64d7f89ef07cfd24d23522b7182ff42ebd826730dcb9227fc7d6677ff17980017c2cceb3bd6e838be57bc383e28d9eb34b002f7d3206b54ccd0e5e0122258d6ad45ba9da0ce56b3423dcb76ae611a4497799847d30a8a658ccf5ff21216298e7a611259ff6f35acaa409d58e8a3e1f0b644ec87cf15ce62f908e50a2a04b77dd6a16214d583f4f3baed05186dc57473d0fde000d7726ce00b5ef05dc5b9a75c633b653b666c132921b164d0035073d3b343cdf90606727c67989e581d31e488ee15dabceabd5242315d176ebad3baf707977ce9ada1a7f9d5705b81dd4111c2f7cdc30d75a1b359f7b135053877cb62c18ff1d441c6dded89b4742fd5acad5d20b0ed06df9ea8363291df7d3cc36b2171a44d24eecc4b03bbfce81bf8ca43e6039b3504f76a4469e9ec24c5ac2b4502dc44622609b532bfc30b1560a3cf60ee51792722b38cf53b483a4dd1479b935e4f263ad7f897ad25d10c809193b5fbba7dd2274184499ac997b5c955581544a06bb449e5e2037586db5838873471d281c6ae3df973881e73fda2fc4e3a9379407a6c77ba98bba91e4d8f333e658b6ca417977e05ef267898c97cf2f29fd4283c2648544d407f9597279a7294d7bb58069b483da791e671132ef9db1d0cdd142d288d02a7ea0f35e2f6ec6ecc27d71dac3f0348408d1336b2b3356d498d400c1eec7fc6b7880308b4a6400578e826f7be9937c315e7c9e1fd8af73768dac0e71cbe91ecdc69cf66fcede17e5dd1ae92e5859e803a27ed2d2f370af98af1f80e682f8b1b843410e94972f20509017864de7896500b1746be3a9bba7fc916d0fc0e58dfbcb7ab40d885c5bf3d8f8ec46506d15087b087a59a8e9a1911754b19d07e1178c612d74d941946ae34cf2c58f0565fea330f8cb5d524b0af35e81068a504ba6b0a9b2b2db71e660e559873b1d5996ae675333ab0c3e9a30b070e0be35f4d1f762156e1692768dd6c51145e6ac271e6c19789d2b5bf5d7fb130d6691d9a3897593af65f36a1294ba7e05fd6d7db98e26a25e1b60d8541e756248148b99ae674d817f8266b6e28d7b97160840d69b9e7b384bf17b4e8127bd8c1079e72a606d460b4039cc2a2777326e7ab35644e6e13595f217724bd1c710ef5e8a7cb09ce042910d92df51ec91bce6b1a522f7cac9a0322253c30a12337f1f0f74121db8d8e8b9b9bf2361a8d90ace9437c3559146ac02154caeec7bc45bed1afeb8bdbfde422b23647ef31ba203be410f3b42590c2bb3bae10f698e135a872f9eb3fb655ec42681ddcf3614399544f8f6189173673e57e1494450029f8ebde9db5c7dd270438042f390697a15b1762a1bb21c609d52aa05a2a7e221068c47ec97cebdbdba20e742827d758c80d3ba32a23d4f4eb7120b14593af154a654e790e07ee03b61dbc9b957f89db7e59ed5a98ab932c14fdb453b3dde4905e263996fa3b51e4578f3a39fe813312b1af2ee82739605733c7da3b34bbc2ac4c5b58346ae9f9a0bfb0cb614a839cdd7ecb3fa0c91761469bd4ee2f421d7ad73a0c61d841daef261b360c141ce01856e625a7ec6935101b1880f0af37b968aef6d9df4e5c35049e265789c7cd0499e91191b4647ac19be5f2b52c4a7a1a0564f5d0928bc27a17013c433cd046e6603c821edf57b4fb67b9e35ee1c2c40562740ab10cac5f3188dde43295a07dcf0c5893da87f8c5ca86ba6e95211e80c2d4ba8feeb172dbb84afe8d80ecd590214dfe83927dd553552524aa7acb2006f3014852410db1a946bc9ef71eca9a34e87320e44034c356f99665893e7dd2a9a890aaa59588b9670189e32eec2a159380ade597721a424a420463a20a8960502f2ca7ff9accd021f4874bf0848c9af3df0d37cfc91e076090d17bcd2eaf909f5db9a40d1eafcd134e1f63c15c0ec98055c166ee08115999a1b580966962262817e6e2655085b287806f417e37a5f6675db3e3fe98f8ddfd6d97a38272e919bd64480561a2494a8001ee699fa0ebf1efc5b021f69ce1f1c4b57402480dc3c828e9aeb5260965a7567d1f67180d15de6febfc14ce1691a3186b9c1d9eaf09aff52cced06051270903959f176351b73c254de77e2fe8448d09c22ae9efab7069d7fb82011488dc2d5a2a895f88e607c574d504ffb166028a93ec512f3d345e7cedd8370d23bb44582e5b0e9387de2a3ad0d04321693f071cccc13ce08d1aa2a4cb1adf254f1d9911c33ead849cbb4f789bf52e1ff068c6e86aa30b0e493d9d07218babe523380c379ba0f9d8bf2b6d0d781877b1ae4e9c8e2b5c1a520944fcb0ae309217c9bfd98e149e89c046dbe447560c06b1538dc595642ee438c305ca1ad049ff4732b9865a83b2ca8d61091c275c853648c00dd1d206dbfe918a8175d7ccc0b25c9594bf7c8f23dca3186ab6cd185c2f1b6b897bb875d1e0d809454d5c1627a89d1c5ffc99ae74136b815b6388cdfb4610a8840baf42c896a2ef923c6ae533cad061332fc444250ec80bc4565ee5f7c9e422df5c61e4fa18697e7ff74dcdda3687121c2c9abbce6d09e308e0ab83a3d53143938930e2946f34b5889964fcab62c1b62fcb5ab86a6b11282f6456f599cad74982d1a291ef26d70b25bee577a9a770523a59ab0e80634cec5922bea0e2ab3ead68efcf963f98f3076e678549617f9f69f1963a52ba80e5f54b9e08fb1fc453bfd8f5eb4a5ca9f1824f7b68ca88daeabdc1c854db56c3d258412d401516878d2b0886b082f28f54831deaa1108079cf4abdf374b4641cd7602980ef8e8079512c2f16e141bb54462da2507997ddf15660018cfbd324bc98ce92e46fcd2d6fca70efc81713656ba87237e3558b9814b55bfd75d95a53818f9e72def94c25c9034f5593880affe7186d6c3090fcd82398536c977a31d7bd9567b62c4fd75f192b726fce95ce321d6a65804a589b41cf0d3ed75ed4691179121e3be307b43ea2388ba763db4c28b880cec98a7c9a7265002bfdf2cc269ee5b93fe30a9a0cf0f60f98b6c6146ca80e1720fe01ad6b67bfd33e56506218b2b4ddf972ddbb83c712cfeb8b97f0d20c433682fbd459cebc900f0e924d3bb5b0898d403f1d644cea204c092d812bf0bf2563a88c39d68ceaa3ecee9b7fb366274e3a5397c14daa8bb8fa96f1a71a1aa128f18607ceb167b7cac9ea3a5665b89f0f8e32ed87a6446e20aabef367469a4e3a226b2725f1f69161beae2c353fd1864e36883704ec37c64474f4ce8a37e933a769a2ee79b35cb2ddf22c57ddf185b68bcf14ee7bff2432d4dc744ef3ad1b00c4b38d7bfedc4f60511e5c2da6df7571bcb2b78def559cae42c8dbb5c9f4b17ddf4e585d143a84cd1b2ca4479410ee6ab6ac0b9af42ccff5783f043020f767aa6916089552b8584b824f67fb7aba33757a117c55746930231a458b3d9d09907a5c402fcdbb4fc7a1a3c6b75d4929fa13b1c3728a6f0af72c541d2bb39cafdd0785d6ed81f02e0d891afd9199593e798812bf5425bab48b118f2e11575e4d0a6773f1cccf1de17c9202c818cb72aaff2c18c90de20e481521d0857f600e43a4174440d3a6c6369ec5e0382fc731beb88fdba2eea5e3ea74dc466d7c197d40fc0842aec845b315087a2e1994e200ecd037e196de8a2559961ec574a4174dc38b72d5d56b32f5119d83bb8799b96486fb5a40bb20cb2d84280f1a513ae8f0c9d3c78e01b3e22ecf8fb208c0b0f72207166c9252e50ffa2cc71f8386375dd2af593c716b43bb0c4555816d542ebc76e4c0c42d300a907650bcec2d14e8bad236030db10b232a1a3ac0d23efe1f2390bd566f8d16c68daca72a2453434ae2e2c15b94465b28ea59fa08b0a3b4cb18610f8ff397f50a237991a32f9b7e235ff4f2882ebfde1da90e445c5d0761a5afffdd8575d8acb1b672500f7deb51bd2c3e07c28b79d8900deaa611d4b1e45fb4ffdf414e9ffcc022ed35c5060ac11b823d5a32463c8ead3827704971ff20e26c7d3611bc0687227447eded1726aac458c5dfbcae05620a6bdeef6ebda185b53cc67ddcef17e7f1b8b79e999d4b82d0f2663bee42a48c6669b42b0096237597dca0bef3b28c27c56c304e658c2d60cc5ed3ed0ccf060cfa1e1006e520de7cdfc6285561c699707bba340dcc72df7ba9d78c18a7a6903563234a4ee55fccf0bd47cc12c4e3d14e383f2ab1704722e24784b980349800770b4313cd8487e2d0e60eaaef4ad4a7d7db46c8f698492881146e84f411b5e90588c5503fe015804733a188779d9a57ec1076d24459db79465fddb9b26138680e5cb5115112b61a22cb895419e3ce1721ae8b28ed985ce645c3635a770e763e31c19c53ea68d048e84ba80afb8f0efd82adda58efdc26e3fb12d345693b612c90c248ae025d68db62910b217fa5c21822a102084d51dd9247197245eec1f28c1b063613cbfaedbc447e5b01198a758646bff653d9703af9e35d94d25fe9010d8baadb1f4ebbe95da300ebefb440521de804dc75759597ee8a5b7aa66b762a604dad0458583681b4c9b170e0bc3a5e797f8fa899eb5a8cfdcba07117474ed419b7e18f7c34dd19a5e82543d030240cf810e45ebe9fa10272fb93e33eda5aa46f7f0500648302e2e3cc29b02517b2d5e338aa863a20afb3f8c1e37677bd71e76cc2c066e23b9f1143c18dbbaa0126966c0f8f7897825022f1b233499ea7a70ab1ccec95cb361925a5603c8bc12ddce22e0f7eb1464023e6f37e5fd4339f0c298266ce65bd4c9a8d64c7dea91faf6a01604b7c2ad8b1810acacd4d00208d9bd3d7b6842efd7d24be43ef898ab5a33fd02354fd791655f2a9cc15be12cd43e0ee711935ad4b206e9df29e67884db974e109d68f88441ca500ccee8b569912b2260cd79ebbcf5831cbf510a2997e9b1c081b5f0a3e72658d9162b5c48f4e02d61c5b1d68be7a6452a0d59a58eef1fec444c24186d9781fa4e73b808e3bf2c10b343e3cdf4036d3a033c10b5fbc6b41a9fe816ea5c4a7e3299ae705a19db7c4951045970f10ed5d5eaed5a9ce6e3d16513c3b42c6d928ed4f5ec1530432e48424d7e3f37b6ca98a1f69dcdeda98eb27797c69834f82ecdf29c6496038b6dec40d4f03d7af4c33e2aa65a9b88d2fb932f7f13c467016dbc62973dd36206a1c7b18a25ab6ee1f49e5e51c02e8744e168355a3549c5f36eb1043b5d3a4d4e4fa0d8094faf1f331f481d4d76af92d6ce9649d935e8505fa95eb6c33d0b013ed66627280732a8d3bc827357ad4345810bd82071249301a7f1ec595d5c49b5f72324b02eaee58f3a1978586e3311e6247fdfef321b3432e54720a0f5fc05d640e3832717f14e98fabb1ac0f6e46714de6fa74618308bc190b75b519678e724f10f2e80c7dc8b4819e5e8703488dd72cbb35da90ffd12b9ef9c7ee7cfe5477d42fd0dafadccd5f5f60beee7424d30f155fba9626d5df49d326a95e5c3a3150c20e368c5e5a791b0eed78c19fb501bde1e17f0c04a18ae3c75cdd232151edd479f33b38dd2dffb2e4538921a2e1c4d4fbca92cc55b24b76a87b6249e0b93cc8254ca9553f188544dd9bb60f92e968377d14fef0e668eaa8d3329248bdb4d68e517c36ffaaddaebc8ccad4894001743ad5ab27978dbebb267937df04a86e6b32ddfe7da2b58ea8cdc080470dddbb41fb588f0e3c6bc246dd8c9b56ffeb4e358f4b5bf0095c715dfbd9c14a669e5dcc84bce67cbc1a834a3265f01837a2d60219d9ea856cc3261a71ec0ece5e214870fc2c5ce9618e8f7bb41b4c2f6b6495a90cb4bf8eb5bc8a0421d149344f6ea205abb406f2e746329113907f27fc375bf5606fcd8e36def96af8852e1acfe24ac0e7c88937df881cca056ee3b4299247513fa446ce15067f2f364cda308d315a2cbcc3c5c82858f8df39b1ff64928290f0cf7ae549dc9d1147c01a9f58a26f6731104b8917842c8416cea1db49012fd59419c3336f9cdc64d9b0de8db89d2eb77282b74d54e10c525354cb81a21a52daee5db2aea01b408675bafb0a02414126441f60490b80d3737c3ba936bb9daadaae04dcb325f6b4bc4ee8cdaf5a9a65f1894f9dc025f1c515de788fbfc11b37d3797a4aa19cb2ff1c2e1491878f9c308836095f68a41ef4b701a24dc9883c5627e96d889350c07499f2cba71fa401b19551e244bf44542112c6668c6711f8e4bb7ca8cb908b24a46123e1ea75de311ca3833dd5ef1c02a2fc00683a9f55b07142979af1d5437ff887277dcd4e13ddb67c07ec9146a5e2ec53e3f24da600f3732d5138febd4fb720c88838c66245991fc339a40993b26d3f0210226434c55b2ce05fb692351f32c8ba8478ec2752d6be333c458ad38a694f0ebcbe291923dca3543f0e5caaf3a3338fa37e86b789fd36a4bc27408e6dff3804afdf255b18022ffd673c411fec9d2de9b0737544508b4bd6b742d47846c9218f8ff6f9e7a99cc0150a5588fc1808143c9af4e48af7f00450250892b929fb971c8c3ba634dd33cf123a29a9f69fd0dc018f621fcdf600b4586ff59af371fbc9ac8ddb48e1092064022a17d91e7e3d0945a8a220a0e17441f0dc9832965f00453b31749934b16c32ceefd4256d56f48d9131f7b76fed4f55e40cdaf1776ffcc750be1a74885c4f45a874624992629489e11dc1b4a0c8cd437dbb4262904e30af692c35178827f8f339c8eb173373b20bc1d25b2cef8f1b865aa515ef1d4cb13954fe7bae22a260dbc7e36856d03879a83613592c10ea39107587bae0613071c30e4266c451c67e5da169ac22099edd1998548e01853c3926ff655f11efb707427db3dd103a998f0d6f833e1375551bb04cfb12248bb7b6e2e80107c72f7bf5fe6d73f318e997348ee9beccba838baaa0e0cf8a3519cba82367cd3c271256f589238474c2df019c5ea17b5622ee0ec6f8ea465bc5d3ef5a7ce65627af5558c691802eecfec885e8ea18a5ad91a470908bc1424f77ab86cf3c0bd7c52842925cfcf751962b7360dbb67abb37e1e1c73d738746bbd1bcf82d3b2e3c014295a2f279b9f80abb75a89b5fd1ba4d4e7e131a492dbff3d403414e31e279c6c5fd3be3f6b2e3b6172a88ff9e44868f902bda408dc17cf4fa4f8dca5471efd8b54bbb3c1f53c6c5bb1328ef1855030879215d61bdedd79ef71e4248f1a80e663e80f52b2a188fe45e1dcb9044180c62fe05a5da3208d29261497ecf1ddf4b186e34f09e30132c6a7d33822739908c9539d1c36036be3845216dbc64756949307aeb9e1daa85b603aa889db96d890c2e232cfa7994b6c4637acc55007863b33eae9571770b4093a3167c6c034f9491f65a3533c577fda7e52b4c5b2f3ec531602e9b7eb0dba122dc4365600c8194aaa7f828096c5b7376e94ed8cfee516b3683f7e1edfafbf1ce43247657ad947f906ae0580e5f3ae79cdd51e305053c4f7ffed80c972f33fe15180f1c2cc48d24b1b0607b16429637aba7ba683217777b389efb2e935cb2daedfadb3c67504c76d1648b818dc7f13d416105be806c706f8f6e1bd6070ea88fceeae81d26cf2212f37c5aeec16925d7dfe895e43cf517e1e39683e5316f64581c02880d4b120d69a54f06e2a2b8ef10ffb3579c860fb3a07f5ec7294051764d2f3235b39b1142549af838d6fd4440cec0348c825e1e6bd01f5fd80d4ace23bf6cedbccca2a7e9df84b88b25db65c931e5379da2ef6799f22365b64f1e8189b5bfbe4e4bd526dba92df5a21ef652e195f1af091df2b4af2d88c6407f11451dc4d53b82b30485a8ad805d3382e8b8bacbe4711add01ed0634bc5a82a6a14e7e43044b3580ea48ab9fdea154cc9fafd2e919eff84ea1709025f30b9d6c7fd205f74458c1ce241c383308c3521548d77afddf529d1f477adb0e48f30e780ee38e7d30e3994546b49bdfe47293e633bccfcf42818c036202449fe9cf055d294a6459c2945e29bdf7fcb24fdbdbe9a111a26fb383cc3573c77d4b0e955281dabdabf0c923b24ef50516efdeba71f26ec0cc78b0c3e1881ec089ac3586a39c6397fc695aba3e25687a1a8a36d752751d5ce53d5bd63f5caaa41ebbe4d4fc498eab86b062c6a220d7052a7e2a3369ed91f7f6727b87a6e46af4edca00f093dddab3e20ee7809bb0322f0a84cbdc3a265a0b15c1fe8320fc1006904191e9eef40a6761227b94d7a76d55d98e06558963c20685a3a5a7df581e36b7528b26e2813f03a111eefa07d93e1fde9acb0e2c5efdf5d627918d23bbb76feec17bd6b91ec89b8231c6c986aadb4ef7a418eab6abd56f9e3ba783d560dbe24730bbbc081af5ccedd4f40ab54fbcffb8098a45c2c1af32b44f142544c46a8bb2e35ee09fe49d8bb80193acc61aee62f010aba7fb2cfc962c1f5daddbfb2a659ba38462d7ecb250dcc330c7b24c4cf283b059a16a3d5d2d42d432be439ff671e5f920e9720ca458cd8baf55f4bf386e29fb50b7b348593d8d07aa92c01514f4177e97ef1ef44a2b627969398af0b4c6f250c4b77597f93a6ecc3a3d07b8bb6768b5e6acf3f061ea10033347baeaa7b75a09f499031bb1a275c7fa31c29cc575d721616a5413013041833b1ba291bda86d7486e777c481c9b9699d6d14826beaff382f82eff5c8aa2c96ec90e0d4a2a38e18b0bc6f61ab85bd57cbe01e0bf1bd546488636becfb5b93c2e0a2d29234c54ebc7625a7d10293ee37298e81fed610f86ad93e4d9ea9b992775a6b9a37911a0551931c8b186bd360218f69a338b6dd565383a8bffd0d50949249f20207a2fa32a5b4ff3328050c3ec8850ec29bb984aeff86fc19c6b2690c8ce9a8c00f8c4ad22d653e3691ad6d7bed8fcf35a316273185774f7b03fb1a1a05decf02ea57b65a3a7018ba84bc84f6a13dedb7a24e8a58b0fb3b06a1b03a1391f5c2d2ede181bb440b0a507ff117997f81a07ac8bbda784b1d6ea2fd267c3f50e40c093acf149368e0030d34892dc165ceff97ed3f4dc419740d6608e77642dd15ca77d122877625139cb54d57d53034f512ef54e100941cc5a237bbc26a0ee24b50cd61598759d4141e5c21d269ac55d7f875f1d0f54186db65274df6488ace84b98124fa5f0d87bd42a7abcdee6ebc547b2c50d9a86bac13bcf9ebda261694ddcf7eae929dbae773ec6636c559d8b0fcc9452a032336c5ff24205327d29122d4355280ff458c5c58f3210f5db0fa1b3e724f387a0bfe26259415a6d228aec989aa352245f6a08f4b286d3867c577a0c8ef9fda90710cdcc6111fa84349ead00fd52d308a218b50d5107028d236933ada573f63a164fe32de55396b9dd05ebe2eb43509d873174f7773643552fd1d722e26336b4f0ef03584518d88d767ae8fb4e29b6bbff369165f026a596763755f4305fbe0a7ef581b3ea38ba7bbedf53d55319b6eb4788c5bd970a45d3c043aecea5c37f414f3fef31bc9465aba648c0c06a8e437f1124838d317279fc5d1a33791cfee6a3109d2a8045724c6827fc6cfbf4475e5173d53c429bd63de7d6933813fe045c0da006c51f6b7447d96446aea2fdd74dbc97c47b35fc402ec90d89a3f419abff07c08bf5908c181fe7734f5c8b068c0283c26416cab6fa62ab3ee1b8d28b10b7c5c5500f52b4350efc82f2be7ad9eb8ee1752b971cdb481ac98b7c83e3451216ca00cd27475f91c1deec4a4df154673b0fedba49d6583a3ed74632ee438ab7b429cf5abd1ff8e9c6cff159260226609ed75e54c825c4d4aed218dd3ce1bf27ff507de01610ed4e6469d2b307b8256f0c0b395032752c0e958058731522a0e400fce8a732f7d4ba41de8d2c1dfb2af8329f08c7c8f1627fb3f6350dd0526d173cc72216a366151bf23e5eb6501afa27a2b2a31e08fe4d1c25b89350b2ddf0493c549a6a7d06aff8150f16bf9eee6766d00686c788ed2c6fd1875ee890ba249c9f1e69a8e813004c901d88fda8a0d3d5d4c5cfeadd1e7899748a26dc0b382fc65ea51d7994ab19112dadca3107354170b94f77c563b9d8e26c7f86897436033b036c371fd04d260fffd61acc6b0cd0a6bd7eb912e4dfdef53910dfc2615f907a6c3071ef9729b0d9ec11d3dd9bdb4b3271877142b4b9a0853508b464a3806b775a5fa5ec091be26b217a1173005e9da794bca53223a9c30f5dcaa5051236b76a6e33f589313ac340484d96b5b09f54b93850fc7905fc1b34af7d2da41bb476f72d5bab18076d8c8ef1737c51eb69f19c2c9a7d7f1ee06797ce8a6ea664422f65e1c82e497ca417bba24e4d8790e3c0fa84f9f3e1bb0d689a1839d71e0578f8bed72045dc8e91c2457e0639a23f7f749c2c16af4960936108d86c50f873742f507215560b730616e349f3e9c3419a5e3faadb5fc6f2485474b29370e90ea50555ed9164c4689381c7617b536ebe4533c7c2353e6ba95d29511fe7e4eba8a290f895b615190b8464b60f41b7e274c32571f39795296526b0ff112689ab9913609772f1cee74cc1ad22c54e489ebfdee432f6c99b09c3a28118e824d434a5c99c6e2436906a1413f66c8c5e40cf3e4cc9ccf601b1bcf19571a6bdfc3ee34a15488a7fa41d1709d0cb69f76a2f9e1187cf6fe2d8c6d24c5289fe1efc1cada20d93d5c2e2f71c2613ce5f899606e6e27001ff1f4486de85695e46ac8f6d58538a711b261dbae83b6228e99316de806311001a8939f8215b832b31faf2468e2bc8dd84006ac0f4b6295f6616d3707d03e20a9032f91e3a2b3a1ad743a5fa5e3d70ab1561cc823b9b87e74fc1d0ccb68d403590b9fb63997dc484f06c4ad45a7cf10397ae264a79f08bf19ef4484b4586a7a5576257d0346148cdc565729da5ad4b80a2ae57de28609f6454a6ff0fc0e488ff2b384d391160078609c8fcb98c1f94e957201a75b8fa0126925c09aadc49b55acd4973c106e80c894bacf92f14d2ca2f29e0556a4f2217eb4d22c8757007c3a00be8d98f7830c62c2ed5058995c84d72d5433955c76fd5cf60b1e0c5af55b193faa99cb7864727ecd4c43c9d70a6197a91184cd0c3737a3bf6975bf3fdbf51388536fa337718ae47af4f180a9d56f3c7cc7db57e3db22ec60b44e07d67e550e07d57951138d49344a15ac56c2b123a89444c88c1b4c90c93257f46eb8d62a3831d8fa1f673f0b17c947bf55e4b8f76ee685693abbe5d3de1f1a72890680d8ef29d3675e8bc441555439ac28094383ba1c0dd1aa932ca0f32521bdc1ad742200b7393dbd7d88a37fb7826fd2b9c5e6ce6adf8627e83665b396be45194e76bb67a817105607342e4c1be209f69589f3b40543f9051e6c4febaaf1d3be896db42837efc59d90668ff9799032fc3a005e5f1fade6e03fa4cac024ec98df203efbfafdb6f80558c26d680d1eb2c0b8e4d352c316c6002459e1790cf195db372177ec998648dc0a51b90a48ce3fcf98fd673b8855639c4acd45252a278c5074963bdb6544da1cc7719660a5f8b8e05bd3d5805c309c993bb3fed3bac9e9e1067772cd47a9b015a08d87fda321055270a6c47979d09d170daa98d4843cc4009a83ffc767713ccfed8be4a9e4e6644d47d4560f8455b16cb763fd200d40e80ad4df7b71ba7833d00235df7f5111ce0a22b4ecd082ddcb60a3d63ee48e9cad495357763aa066d7e30832e4bd7f2169553bcc166a59faad1526661eadbe70dca1c96e95a4bdc7c1c0e5849459f8fec65214db6711af688cfe397b4f48c4144f850b186e50b05b1133711e29189431c2c6c83aaf335f9adcd328c27bcea3493c0c2eb4d2d39bdfb669dc1ca156c5936bed7c0746e36a93ccbc0f24be5d0b85d9106e9a51f9475abb466b3149171e35b1ca8636d201d52c1a895365baf07300171ad7247b68b7903af95a4b53ac797a5ce4b678d11f3ff268347134bb40dce5106a31a33e4818024779fa4df43b4235840ead111ad439d9ad9e03d26533c73bf8f23988b090c26990db9fa6093efa6d80b1f685fd5ae3f6be5e15fbaea547da6eeb9254147265a897d4eaaecd0728b394b6e63e48dc92bc4ed3c8c84f47e181447e33bf7caa3021dc2906276aaabecc10ec2f5589d892cd440c1513474739fb877b49b0b395a26dd6c0741ef804710ad106ceedbea87dcf7025b68b14e2f16e7011f26a2e9b32479f3dc9dda21247cb960468abc051e286bad04f466c3556f96046c54a61ea34deb3b262fa95d6610c99f007a1afcd2391f1e50faa06b830773b0a57944b098b89c8ead6b1b60500e3e172f2ec325e3dacd9ac356ba25c825392021ee8036710f8ad5aafde29a8abd792c8715568a66090712978dbe593b7b3cfad49fa6f42dc1c4a4dfc2ed7fee1b46da46507a22a759d792f671184641076ab97e756b0a478f8548120888ab80de1b2e34e80acf6f634ba237cd4a4f289762abbb99c462e6652db8f0a35816dd6b9e0a30f3aa74f59a524f6274a2f5bc3420609b41f7fc5e972e8086f385bc6f491b2951005c21289290e8b8882254d5446575fbdbe7adf7e898d06b7c7f5264ab3665a51e57a19530f496619af9c93f807b329ec19b0c567ace65c4e6b7bba9ae21d46be8e862d5b79beaa244921d292998ab78c60bcc263a127cf97c071c8dbfa42a1aedde1c02816656de0efe6140d9164580e11f91357fb44921dbc7928a97942dc1a235e7a4b44681c8ffb219a60d6c4c4c57f837ae14eb74fa95ba8e868dde3fc865d565b0077f909290103a75ed3d7aac462da2fb577e7ec94bbc4658279fe3fd89e407c01e053fee07e880fde75b703cc11b6cbf41683cb66d243a8147e56ed3a5353daa72da02742749ddb4bc09e443752024d225e56daf9916e5b55611179f76832fecaae0be7d70d42f0cfec20891b05c79efba4d69f5117e6e1bf069def9b9c1e8ba8f3a3cd09368a57cde03eedd7fe4dac35945742f92a6830ff2f056ba7c0ed77ba2d36f88061a3d49651d1ca56d13af9d4900f5ab0d19301b6a7241e1bc49937e09549628f4c2b14000b3a6d67fd903ab94d6898a6729d1784e4def7d3cc4bee03c20a7c66b53fb56d34ff2e2e0e825f359eaf30c645f3770482f1f3d1c6502e62bff84841a1c25b84495d3d8747121ee06bfcc8b1d3e3bae71539fda2b5ba88ab972f936e0799351072f8a92d248cbd919c91e4bdef36f101d4816cbae842ffcaa8040c348ad221a63db36a788f41165e7efbfec79405ef02f9ab39f9c9de40b35f8fd50da4c9a8d3e6831f4a0738c75f6ef6e106f590fd8b4799f3d5068caab40cde5f8d471cdcb77e9bc9f15626899a5c0091f56719182703f28135cb27eb24792f8793b772c9d57bcac91dd2ec06b01a3a2220eb5b8e19866c887c0c29e0314b2931fe260947cfc1b5fed5cd5f22a91fd9fe75225544aa070ad0b45d2aa8e3f68d915c23dc2f2434d27da61e190eb1d7d7e92de2a1c8f0b590b89b51883a765f245a5afdaa8738c3d3dbfa2c158d157843c82ad680ebc3d72a23087c03c77b7a299d41eba7d335e8bf7b1cc13e65aced2f807ac69e6f85057459ddd8938fc02d1789b7aed3dbe8cd6db0577414d10d310a5240ac0c9e76d8c64c31d398b5912a92e2b4d7715406e4d7dcb902b46170212075c20080a5297cf89626f98bb4f6b41b5d56ba56dd66bb2002e04710419f644735604a1fbb9951dc8fde012024c1b9c081720667db1b5fd5b98a2ceaa1223c07c8ef35eaedaaed42fe4f9815dd924d2f0ab6f6f284058124ab847e06214514d870947b413c5d298dc7cb0cdedbe91db7f784755a8fc4615af5a8447139d12272934fd8fd5f872cbe0ff3aa0575135394ecdb90c0172f1c5fd6da8040c1c3f89bd9bf3dd9d4869f453d7603838c675deaf46408882ad2c8747add4f2d60a4aa8e251949adf99ff7a5e9e9cf5ac0f076c8e21ef4b203d22a9f6afbc7f3ec462fe11e7fcd22aa849ad82afb7b809197c800fd4af9f464f2c76dd941132b04067739241663f3c5f72f7131e3bf3ac4e3a06126b6a2a5f56b947c6e6631b46855b30511832bfeac9c4b83496bf24a46b758f94292a3c9a1b25cbff20b3962a1153149fec9560c221bfd649122a9c1fb57ffa766b57a3e25f21a2ca0800d1f819fc304eb0f7cae075c021c86a6be5c7d18eed1c960b5f09dbe0f97f88a2064c523088c06d9c80032669ef45701001d5aab58548b9d7eae7f2fca79cdc9115636db283836d7460c84db0ddb8ebdd418e35e3e0a1f6e049e869aed449ff12c46e8f830609c9a3b66865c6dd3756bc5081f6e8a86bb4b21d260198e109d15246fe63c57d8b5f9ef6ad88bdbb131bd646dd8741c45d57382f1343eb0dcd9dda01f5c74e4cd98fc627f05a86cd9c2e01bd16f52a5522ff25c530ce60f2af4e4772d269a06c9a23e503f4447fe6df2a699fd72be9b0a3ca40f8a079c29900f420df3e2c685e05240a445510be4334164450c1205bbb12ccb03633b2c2ecad7be6dacea19e9cf78f2edc733e35bc43a54b91783bdc4837310a2b80b19d0ee1f6adadca19078b319f174678d1520991a72070f07d84a199d64c5a528eb3179bfe846226e69f347db840e55dddcd083a9d5821a01784831a16b70c1c7fa21af4aae208b9e92e3251ef9338f09e07416e682ab4f6f9850a7b7bd35b626a40efa8a65481f8303771bd6dce6d3812393352f31eb10dda85032adec076f9de900d876a021ea4ee9dbba6e7d755519d8970adcbb5e2fe32310740ef360f609c4ac569e5342736c4437e527d9346a27fad4bc03273f870dcbecc4c0ff699ad01f0dc7f5caa3345df72a2b3cef5e5536e6407005f95b1d8a959dff71f7b7127aa01c1401a114deb077b34166e84d923d5b7cbb355a75bae661364d0d5e922df097a14e8ac5412172a90583e06fb5f2b232eaaa49e5f7465c54baf8ea469c3c19742b591c2a7a2ceab4b4a698b9775e9c65cafbc8decb0bdc037e1b9019e1376a08dc96644029b69a3fc6660307859c793a082993c8f4441e6f6b7dcf23e67f22fd2c3578a4fed257e84cfbc8630a4882ccea62ab12344cc75a66f8e3c4537b637596abe3500e3d762a6190d6cac06f13cc60b48ea0f01724e5cb1fc140935e67370af3fa7841eaefeae1f881aefaf6cb33e67c682f95bb761c149474aff63d9bf0457afbb672f4658f86c80358e679c02f743b0a42edaf593088642d72fd64a5be5263deb87586435da55ba801687fc693b8e3919a366c37493d0de9982f3d5e01f14ee88855e052857f1ef441f5d02dede61d5111120b1112da787c34a637e018382e1be9235f742e2f80aaffb13d341a8f06fed35223201a83bea890827c578d999c06dc2a02f701450a46bc0dcc5aaeff3dd19bafc445428a14f527bf56cd3a40f17d9b8e73236ec9bb69f77467a9ac6fb3fb9873f8ccd144258399ad6d7c38f775b3a48f897718fa8f2554e169af10169e607d153fee91d2d5aa6f366b1074a40e7413ee0d5e94d19466c904f3e64f29d9c6cb77cac80cb5a62108ad52605fff271ff332ed456c3bde595b0f68228505d08d53b59fc450f7f938fadde71d1d0f61b0ac882c7833a3b067a50ae07de8d07a541c0cb9b06d4471021388954d235a96378fc92898103651cf7766e55de2fdecfbdf03a9f634056c3be55902b6b556b62da15e8b893b2e2b0b1d71911d9fcecfcceb38293e454f23d68d8dece4a22671295fef25faaee3ca652123cd58b9b423ac797c8745a27863a5e7751fedbedbb553994a5679f5ef1dfbb4a14051728632266543886f5156122c92f0443db5b0e012d79bc4cf22d797a0b8ef129c97d412fa52dc6cef03b3576dc8e0218feb8cbd9427f626bd5bc9091d34d43aae0dd8fdc5f19994ca524d68a0f25396ae362de52f01e8b1786cfc4767a4d63d04af14080cd3d65a4f40efc94bc53776ca0d75edd00c0b5160515c2c6010fc376d306eb6679b00c19ba0e2a117a8e14b3185e975e2d4b085ba84e8fae9514f9c2d44587bf2dc2b016b6acba32615e6ab5990d447833c8f06f7db4a68df763ea11c5e4b94db2aa05b1ff3e4462d6a384113a7c17d19308de8a1c6d81187d7acb7ae8e80fe1dc8e687e3e5d313ea92db9338224e9a8df6ce1bf0e53697d979b78e7863adea6badc5b9a3f1eb10e393d3aef941f8b9dd075e3edeee62cb2be56af6c41123b6f275aa1bc44d0337ad48fe44e030e8a66f50877e4cc3066a7a16e455e5214553b46894cbc020d4c0091c7b881342ad8d24f6e1979b78ad11f5ffcbd2008d721a80935d062892fc7bd4ae58ff71bdc40d397d3b60a98ce54a0660b438ac2cbc9e3e5770ebd81ac73e5b860eaebb5c5ff3c466adf8eb1c8624b89d58857513f266b8208384fe59b38fa92c96db2bc70ed25a7787275d40715670f51f48aa806a06ee0a416607bc9cf5c51063b22f616155ea20bc6f73dff70d4145c58755ea37df4ce0bb99a1c68774ce2e4de9cc01602efd8327f55d29ce4d432054e628afdfeafe1c7f4fc1780471ef6b20baa71de10522d124c4857bb56e7d56f89e0b01b78e2767e0b304ff3da4c0f20ea6200b0bea09a4052fb336f628ab5e4a23bf00a12ccb55c85270aa2feed0f40390ac34eb5d28a796ac37a096e7fcb79a6a6dff0a0ae40240dc76eba84037d6103263d4989237b45bec1e9e2308a85b16dbad4016bec070b68e4d2f7d723103d3006e01091481e796dd043c3fe1c856abe67f70504d7c2953c83581bd9860c68cbd021c1ea8f47bebd9240b36cacc5c127656b9c8f34ebdd974a7a2380dd3ead81edc2b53d788f1aa430519ada89017d5ccebd9c2d74bc9e5e914cc992b2aa7ecf6d0b9263bf80299b5ad0fa8a8ac18c3b33a6ce5293cfbaa356f7e0f1d5eb14554774ecece548acdf62355be37bc13802254739492f412c4b298603df85f5ad0b93f5ecf60618ca8cf64a1fd0b33fdfd7552a0c581c45f8742b92fe11dfd81249c476926115b402aa2e245f9b1e531c1af8494d8744c184327d12963b28bfb690527e18ecfc4d588005ea78359208884935db22964b2459862e6ad74d76d7377f71debc213e9201f4b89dd53bf4ff87c09f672ea5a728d3363e402b21051ab597482bae6bbc65e2fb889683c3bcb443e437f5e3cef32fddb47cede9260a6f986e264d1a637e4de7f6af36c2b35f24e3c940848e4266c1be44d6e3040a13959ee50d6ba4baaa4caea42c35235348366722671f78b5edc9d9fb727c2d11cc63b752be496eb09167ba2b94986c7c251bd3a9aadaa25e1b7798d48163741012e47239f4eedfb833557e695659d0874c0e99d9fd41f758a9086b7e92d8021b306e6c0b5d3545824ef28e212ef1ff1a1b011352562ef4235731b5a1d2ceeb1e06b407d334dc9d0b318a2e0ff1c4d9c4d4f8dee7d8a3480f948a027ca0020ba5bd04d9ece6500f7b5fe401e45e0b4efb03712426c31881c318bec1da536b30545ca72a6c1f0368fabc5cb7620a8d0c12f8353a85ae5396fc49115a0a3f7c5ccf0ea50f434017c65ed069b6c9ffb3cef32bb6332f39f8da703394ae87d55378b97e096a9400c5abf41b8789aac411f65578bc43c45878c0017feb0f5ad8d0b4026c64f05d7383ea1754a7d837e15f4aee9285370d3b6e5b2f391000baa9f206f644cf5beaa5b1b380a1262ad4dbe28b2d9c18439c30f762421ee6f0ecda5e8a35a519d42549a6efb71b4b32c0ccd3c0042a746c1c9b10ed308a07cbac6419921b3533fbf98207b560f8d0aa81145b38019a5edb7a93afbd70757cf538746c5874ebac63d037edabfc10fe3261b9d461a01dea0fc06b09a845090ceccb5f9538f0580d53832545a3718f35533e87d72836637fbd575cc332670c0a03f22586a9dd4b8d1a15125e0967517eb03ca39469ccfc5f18a8e7e9c44caff095de1ef1cbc52b77058fdf83104aff67cb75da06d3f2dab22080af860e8f58d264f7bfc5ac072225dca6804364d6ea7f0eeea1ed7f023049b7e7f0a799e1e02aa060a7a2182ed7da0bf4019292dff46f6ad2e555e1eba1854b946e6666f64bf0a2b971897e9a3f166f805b8888002c0a66fff8974c4f4fcc00a220bcc2935c26cea62fccc2663a67df894a8e476958a73c5cff58e54b469307f712837ba06500924089ca1b42f9ecb9b4e206e219e2227da7832b5ced7f5ba79c2db28842a5eedd6c1e952c1864f9b10640dfd3e7ab4b9c6d72e7b1cf877fde477fde4932f5753a551150bd3dc74c01e11304fe4be752db5dbac8efce245fb5464453b8b35a870b5676af54e24732c4830701a068ef6161d9aea76e1a5ad58cf82e074257a80d5f3a546c0bed309311c904fc3e7e3382266b054fc4085519eb71ba6709541f7ea4f94d477db39120d0ce6fba6705d6be4b40b2887e5f9ff1e13038cb1945f155843925d9c47ed37d144dfb32712d1e527393f92321e1929f947d50adca0970d1f32f0ea89c5e3441aec7586f37eba7c3aac6a6737c94ced24569aa241b3dd55c43acbcbe1d77421efce6f0ff6061b2cad1803c3afa1d87e0fa3dd7e5bea400e4ad7fe9f7708466f1614a1b8815ebe587dcb94e2ab6a484d1c89155be838729c0d515113387f85c341a8eb38b9027200eb41ea94fe768de06bf2960b3981fce810cd11f788d3cdb22bfc0b00fa116947e14deb76dbd4f71798652e20d70159744bf913eb76eb4b50a7fa4d856005d2f83a0ff053222f21158f984fc5813aaa33dab17fcdb3e36bfd06b86f16d154483921f86d5ce3cf7080b5d8bb660e6f885ccd504f32da86836e82f7bee1fe57787bc0cee3268a27b1c2d25357dc94ab25a85c8a9b3f43faac6171b43f18e8e37865f524352f82eb1c6d59469be4ed4cbc98e41bf67727ac6661a55e9be2ab1ae93eb2a209d2f033b1366813475ac1b5c817043dad91e76207cb57c17f7ae0c926b737b0545c4f80f4497aae8362ddfb878b3e142959769ceb594f012af22e471d8c01516b00922d92de312823fd96ed2e3cafedc492314d030ba91f3436dd12921c4f13ff04fcfd2148ade894d72b3fb88d2473f0985a3b8dd7346525470469bc9921ea098f33d27a8a024cdb3fde83aa02e49c828a9549b48ff5eeae960795584865cbae018aefad109e03e6745a30d7b341549d0b68b04ae634d3c829e5ac823ffd0dc434c516bfbb3158c525da3cfc2a5850a4dbaf6c9d843d114c14366a2ddc03f63ddcc216bf0f4e52a0f454ffb4e86a15b0226a1ecf8128a49b28354705d5c88d5cb513cbb9d55db7e91d65fd8b6e7dddfe5a86f5e7aeedbba8c983de55b03144b36f185f56dc5492fd6acc206e51d47cef32f66304d4ce9bcdfc739164c2cecd2bb026a168dba78aca0e430975e61ed2e89dcd49b67d0f490c0b9712f77ee340a024e34fc78f431b066e265887999668700dfa4e0e3d16759440b017e347d194269cd09810ad826ca85862e822bb48514c0b379904bea907bc7938d738388884462efb6678e211ec8b9111c565e2c11588ac886a905f77173f3f6b4ab9c129e318e97351535437e8802795ad20675efce1b9ad5cb0a4713c512cdc55417bb2fa624cfa29e5e4a53de49cc0db831ccd15844ece921c269d22a5bfa67238abb137e9c123efa6689a69be73c428bc8ec3a1e14ececdb0348bd7eb74df93ee2199d1c6c666db846e7998dff84ad6409c0209b1f3ae93dd055758e92395435e925c80b2abb1f71319e0bdde75d7a947dcd1b7d4edcbf1848292f9ddd33c2ee0dedb4e6161158c1d37b8fb7c32916f0f691619a12d2ae6a87613247bead5ca6b86901adc9b4d0431c8cc3a90cc5983c89af13763600557a5e3ee03fa2ffbabfa25961957c357f51f11f125d18e3e62b16c25e0ec6112635ea639d6148fed0284a508860f9d645e1e66a7b447247e7fb39673b7641b81e826d65dda27322c80fc1574599b4ef5d9329ced5aa78d6d8719d3d52cafadf84374e11059cc0628949c1d70d79a4b42077c61ed04b82af83e0d6474d54d333405a52cff8b23e0e94602dad07def81a284b821f36906497f387edce71ee9eb69f06c17aa50c51cca4092f27325b68205ff18123912358c040326cdf155f259c8a2158d2f74608dcdad5c5ecc6d606e8ea07c6394f2d9052afbd4b5e322496db6465ae1177d0e5ec0c520e73c34c10d4795669f4a6c4005a18810355768b403252ff880d87c38f9505424a288f1efd96b7ab440219afba415f3f71a270f9b99499be6302f2d8231cfce2c478176fa92e53cd9725c1a1ce260bd45e56ab0cfaa75c48fb8e6bdfea454adfa44729575da5e1c83cbdfab1d97c2097db666e7d5c38476a7291c5442f5776142f59dc821bd73207c917bbd0aa59f1b96fdf7fc8ee85b33557ddf5ec2246b2dfdb583196fb4a6b942130e888f3ceb43a39d551ebec975f93be3c179b5270c07f753985ce47118417d34366a7657995eb3bda95b991dea6ff43b78baa6f078eef76fe009e55341cdfe15410e38762e072614d5cbee148b3040e4bc33b6b7272b5a0a0367d9265abc85c0a07fba4d8cf48d85af7072fe7d1fcbf9d6c2787b9c216f0ce57e6589b7682e10e550cf7a5187ad1cca13ade648354078a279bc27f291fe0de5c96ee704232640f967c66a2eaa6ac7a577497e348d654580f39fee5f22e70b35c903d1af4df30bfa57621c90d743619a9890af872412e524dce5a85eaf685a2729a5166c096c8fa919e4134000d1c30de48b8c89a27650e4745ab7bc4f0765a4baee39ce274dffebdcf419282aee38adcc6bf9de03164e66f18b87def15811b7fafeaf3ccf5023d3a632b808bc18a9cd9c2c43111a84927ddaa981b0a5e32156afef92438d901da5bed832bd6903d8b0e71e104206601d7fb418cb7ba9e38a21bec28dda9320e40b33b3c984c6c4d18b36657528b897b1e0681bc4100cb4320869761f7a21d9bb27640672a33ccba43824f6ec120325dc5654bfca95e6e05c492b3ec527278cca4a04656592a0de72126fc7354455bf056623e922c695d7e7ecc66fe18307f4decfe54d5852789428ea65cbee6f92c4b7cd5af70e49aa9e1e0a791def55b737a84fcb6261e066956fd6aa4a3ffa0d2b4b930e09f8df38eaf869f60acb744d58f6a5fef6c288b8fd3484b98d9dfd15b593d7b00de11a0d9f454a5a17ba654851fdf039aee5811f0ae366b4c5f1d48bad96b45511c21a7b8234e590b381a621ed5eb48e4b43e587151ff29388885e1b6607191a5867ba86310f8947390070c360effeffe23101894f6456ed54d3ab1f9863dd5528e8342edb8c2b0d635c5f5645f578fca185f67fdc90d469f7a22fdd77963b3b567299727f37ea4b8c3d654ca00647595b0d4d18c20700922c60bf0bf8c454f7ff5f01426ab5ef8c24d1bc27f563b8937108feefec2eaf2a1ba20f4cb5392f525a739f2abf9746d6c9e75a169a5c85f3fa2855422b30f1178b3df961fcb2bbde8a2cea3c34ac1322f69889b09450ac116284b3d7a1be5b5416ae594cd38bd3605698257ea90a06312b05bfb8a054eac57aac5d7e1028116ce8c208bf889a348953596c1dc09a957d7d94e24426a04607f77ba5eb3a6be0110ed40386e16c203e3ea6bd8691376931a4c4986d82fb2b29e2f97b788559de61c85514377c88794e2e0a1621e66a65769a87176f137b07a5ce75a6ec5e0a8ed63bae204340579a0cd346640ffad1e60d3ef1bea52b39f2bd070518bf05416454dd54a72615c79dd104472d5c0387d2692b4315313112b901cd0cbb6308f5d392947103cee7a077aa4b4bb88da9be284825c85af131323ac18f025c8510a257caeacdd928718be411540d74806d0b6e93198ef63ab1e307320b32d2250f05d44d7a0a49f5397902ee7dcdfcb5fc6ad741c9b8f2d9df6ff2b22a7334f79b09c522c2db083608f6b23562b1a70e15d9084cbdf0715cb58e90ec1470901e200e1198182426aa54a23516b28a433fa3d61862444b105f883ebe23c1f2d8bf3e71071469c02976cfb9fee68b1bb44c232aad57f5b3e8f7cd779c9181432e95f71e1ceb07a176c9fce6dfd47d8b9b544ec26cb1edadca0238912ab51736854985ca6210bea8ff55b44e8aaf401748dcec6128ad49b5659457268bf904b2001266b8a89daab5e86e18e7a3adce5b0b1165d1c2d6033b09d11bce49e5c2ede4e18aa0b865de18f5040d9160950f54529d1ab1840851820612fd66b111f10075663a66a5efbd35ecb79206055021e72fbbe6fdc57e1788de04fd021a244ef9176b7e3f477e9d74e82e6d132ebf50d99bde22a1f12cfa3733a60a1f430ab7c5be444262b39287e1407b4df7935fcbc6ae09d3986bd5431d5d42cd638c6949d8ea3d201da1a2aaaac179e0a20dd573cb2adf0269ec0c405c0f7bafc47db3b0cc9b738c08723501d1b12da19c35c5e3fedd5a7c24b75a232cb77664acdc21b6af146026b690f5c2d1a36e247e9d46393c9f85f52b24e876754b0b2cbc8f60482ca39807d78a7ebc3dc8023a3631339c7eccc765b42a90d0305bc54a8e5bfc324e84db8d2066ae1e530ee1aa4e9d1b3a594f4781c1d9bfba121660fa931b970336c0fa736619a4cf8472dc7a71994cf3848d2fe73302372ffd4196d83a89a4a616eb457a894c9fa12fb012e7703592edb4b5a88f998e14ea035e0a81ee383938608d0d53535d319bc30e0515fdf67917dcf3fdfad1f56455d552b5aacfb60b9ee3a78915fd641275aca79888507c7cba2ed459fc0d396dc3d4bc45c93431b48215e9891e5752d3876dd747bc111c3f3adf6c7f6c163cf4a26ea80885361a6d52a966438c18f4bb1c67cbb89d5d6369adbecde44550a739b9d7bd98e0719208fe7a2b9abb2536321af638ea6d1600fa8df64df4330e372e352ab2271e59c669e1722ecff55b193d416a3469f6e2897308597516fbc96f4d5a052edfcf8282d66ae5ba78da828fee440c3c3f5730e8767a1452c122e95bdecf575f0815039f67f5bee5ef6fd3c9c0441e2fa97ae49fc7a2bc150a09efc394aa733446dbad77a1e82ce34aaeb238a4155e4ba5dbbd81d17609ebae29dd62abfe0c8c7c74723f19307b897e4b00243eb3af54bbb0874f3aa94e9c5753400fcc65d2c114eaa26cae4c0d1e56d5125837fb146fc6c75046f570ff91f0dafff2395328718490de5ca4e3b7cdcff303fe7bb3f1bfe91cca5f952d84e7d03607e0fdea73d1244754d9d9dae9f47afbebe8f4e535219eb7bc78493c7dd4f232545d3a2d0da3646c0e4ffdfd200f377cea2c925349d787a6562dc9638013c82dc6c3a04503350c175c3abeadf800b32a1d6ca360974f09adf91009bca4166f213671263986caae310a3bdaa22e81348396fef77c2ba491b150e49ebca4bbe6e3dfb304527efcba51a831d83f945951587ea449615507c627f06029c0a4f081ab5c0296436fa6b335ba5581cf5d695c172a9720402c388ac4e72dd67cc06b6c6d0b0b968a3ca7157487eacabcd0d86a99e0eb1d9a58b97228d4b3e7bdeda18dddd61a8e5ec1ba6d184d55a378e73231c719aeed43b938a0ed28bd2846054b6f4ef900677fce561cc6067c3c17254dde5e3b9c298bf7d912c66c2a05ea7762c9c68878e8cba004d43b92af823c7a58ad1ac8a15b6f00367e1d47c77a0e0c0419503f468cc6f504a50fc4dbc5a40ae943ec33bb055788104cfcf748991224f3dc3a61a67b5439f385ee7d7c875d29c30648e15e5b6482ead4d05588a2a072b064693f9635c2c7c5c476ffe73db6825954e2e799bbbfb4e713393f7a01391f49c540aa7fee061ce156764fe29dc68c4ee43eb59c88431e1a02fa47b0b2877ee8f1c4d5438b62bc5cc93c6594186f1845cbf2fa1ddc4769a5f2441cdbe7b63f86b0f534217b4b9e9de497f53348c664fc6599257a7dabd25e28161246f80f2dc37fb74baa00bfa67e867b259c7dbd70476aab04943cdfd3c0859a716eade54c7f19d0bbe81662d22abc077ade242569789da20b326790223642762017cd7eeca9be6580e4067a46519a553efa54d81534b49c2490e03b53ea5f5a335590e29e25f2477da7a02ab85a88d219ac054be519c800b735aa331800f65f095ed241d94f33a8df3eb785e3edde1dc3686ac5d4df4032aff51460e1b7091c6211e8549c07923ce25669acada9fa1f321b0ed357ee1ff8bba42d96b9ef629004ebe904bd9bcfeca9a0b75f2300eb898e7c657486f79e607a19bb5f8682b8c51a016df671a8cf708bd7f13d5a681e129ca384e5ead175dfc0fe3b24cec0c765090f6ddae7533e95627345719bc16488d8c8a2a7887392c1763980651ce0bc05b82b127a1df9c3b32aa6e8bfa70728b887013b50d24cd56dc1cbfae5126f71ac071fcd496f5dab5fff10ed2461182d8107b063616ea6ad6a6507521f8691a820c631c3ab621d9a715f36d5e13d84e7b0a76965ad5b803c6963007cfd7bfd9299b4e056565ffb211f7085f6a313879a3df4c735cdc750e97fce6ac5babb3c40881b46b5187e2b007409d2e6cfa1c4fea313b9fbc2b9d0ce787ab12054b0fc9e8a18421bf88f40a9d4ade3961d8cd69a3b01e9db539a4e5c7600feb1cadb8063a91798142a3e1285788e2876823cf66efeb54e8ed3023e6c65bbc9a8f8d342e54f33cbe7547b57a7b552a7046211f10d6d283fafd37d49124f4b1fca3d84d63225dad579fc882daacc95c40d5fddb995df60ae9272335becf195464facc1299f0554994953f5ae57694c9c019bac66a43674389506f23354a0f4b1c55b5fb357a0bd74512cbdf252a2db55c75edec01606a6739084709c0477d48588c29190c5b1b28640235196eb7cd4780446fdb47bdb861851f12592662b13b2e5b6061d6ff165a5490c86fb779167ecb074c185ed4c71c17a9bc4223401805c8cf1d12b28714cbbe0ee7214a5451d30bcf53dbb8ca9ff64c560b1bbe5fddec2addfd1e31e1cd222f692a2010d3b5688a674e88841de72850f524903a8a9ed52171e9bd200048e859c89ef4fb106994e8334d118f803da700bf97619211610d8ae266b94cc31a15ea09fffdc310e5bb97f71cebf12af69372cc8e389be9717ea654ed9f6801d0629459a5236e387d23bda4a6773601683f0ab4c78a0ae0502ddbab48cd0f75a5b1e048b072d7a0ed3172ec5ce187df60ed1228d118dba61d61db9b016156b93644fa71c6fe10558b77842f0ebd912bd6f7a6f6b09e5e18ee9452234ed9b8b2e6b621ad5586c9b105bfc08a58380c6d809a0f34f4cc65f89b59a5868b9874faf1e0bf0ac2f980c921d062c9976fc18873a9e6c2491f69f5bd1de57567d1237822c0ca363b320994e7c883158ccfe8bcd61bb670624cb05029938a5f7beb7c67a0b88b74825fac1e4fa0ee4bd3a6fe7e28f9d9da013ad83419042a2f53b743399de78797d534d044a040f0def7fe5d06f2b642348e5e0506d8e9862d8a6a4a5589c55336190ea93ccc827f76a634a2df6ca4bb028e964e39595a2dc03db46d9436bf5b90ec62828348a90fc2dbedeede1cf7c87982d717096a6ea16d3ea9078a3f750249f29cd5d2d7843807baa2ef157dcbdb75404c47708ed677dbc0d68b7595669e89d0694304811fa9cbcfa0977857c8a180b14d2b1ab1ba5934e63c9b50100790715e541a2b5bbe1a28fbe7c3a146cd7bcb23f58bb27b4ed5d93e1cb06b6acd9b5f4e736223de11a0af8f3302f0a4b5c8fc3a6e75ceb2b07f74c274b1e62d4ea54d870794abb0539c4ebf4c97e993fb8de98e4b2364d2ff11e11a6cc580604769d78285f77277e4879af59b65bfaf1dd4ea633d83237c9c7a4c24955b66ae2b88a4445884e13a61d951d8c210b9dd526b18c125746411b0fbd38af0e56abd8eae4dab47be703e2ee12586093fe3c9b82b05e2ffe191cde0392a1fe8b2cb91e63a8de81fedc137212a224b8633497bafca718b25dac2e55ac07ebb739bcbe4f8f31cb10b2d716157bf830b4278bcf151dc297f630a40a3f2a34065f0de352dfe19f47d3aff7338dc356e9715776a90f9e7594d768ace001b2c2d2ce93f1f884594bebfd706af8f788795f53f5e0b909ed0030deb8316e5d2f0ca4708f30d856b0dbc798e391c2a022a121b923da64ccf8846caadbff859d61543f116a826b3b3e657671c9fb1d2b666985481b61393035672cb8bcf0240ae658d468e56e2b679ed1422eef16eaec819804726a8c14f931812330351cd75f1008e6d4a35977eaefe9edc5420ca0cad163ea121f89353079f8ed9e8ef07adcc68113100bbf6d727cfd6e4ee50cbf8c5f0c295e3e6b4545058fd7a99df213f288b1df2fdd8fd2e88d6cc3ee0c017b271b393361bb9ddcce157fd75be39546cb6d4d12912a0465997d1046b5eb65138e6c7eb3e76687e7f880490951dd709bf3aafb53de836634d0c6448869a91e1048792a18e40e3b03a3a05d9bf5ba9ddc074a018be8c5761709e2ebe67382eb214603de3caa8fb1f42ad1c3f1f73c1cf27d40314aa754568743fca52b8bc89515d97865f36939adf6b113227b0044a762347422b41a2fc72aa53141a2ccd73c89b36127c463810471265871564474b1e2f40f8e5ac8e613180889b115f4b42934a9a93ec22240dec2c0d9cced2e639d295fdb23082c52fed086c94956b1e4ca9e53414c57178899d74914fce6c17a9aae9ad322fddd861a2e40b6bed0e00ef9cc6cdb0683c8343fb625733fe2baea0a48de181c0339c60e73bbb74c8e2c9ef99d6fd51df67585c4eaf0f5c004faaf224e95be5a2e084417393b6c889e61cb337c00080f021ac4bbfd9a9006b34e64d8415c5e059c352c9a2f02b2bf88ffe58c2ffbbfab05b6c457b7080cbdf26e6d684d004cbc1b0a6f6fd421302c9e9756cc8f27ac828c90d83e8deb9a039990ab1c23927827caab34a5293b57657268e9b9840f97ccf488222a53c01a80c4f8381fe47f0ab4f4c4eb3e165c1caa0f54822bcda40c06b69b5d2c73b9d6db0e8803834011165266a44f4fe074fc22e2610aabf6dc7ff4fd97d8333233511dfa3ef119406208a62d605310b194310e9ce60f43939c5a8a0850226c3fb8a9e99920120f364a09a793df0ac95a2bccd55d5eb03a2694525928150f508395af7fc564176cf0d965f1456ffedacc86f449b037c588a4ece48818a54ca7dc58d696856fe9c35166c36df117682e7877e3274e810c9a96e278a9f2d3e697f6a6d23f487664888ba027d9a246ca2c70b32f94e1ac91011aa2b153c0262c6ebd854c1149cb505283eee580b017ddd2e9b0014398c189647fa4b003aef1ef4c404d102ed451545e3b96c248ec587e3d04d05ed4fb25e404cb43629a4f88a875bb1787263914afa041be1fbeecc92afc0b66a640e6678df11e6175ce6ffc93b3f6f648e4cef08c068cbabb7e91b3d25a200843c8c800e388686c96f4437804f539ec5cece5a8afe4ca58601bdea980be0e84fc8e22b1dbc2949eb6e99e2645cf6b22ef527cff117ab37b6149d48483bddfdc048817e13fc41759e1fef9b041fd9c54d32e26d699407c7401f1a70f13dc80b40245bfe57960409ba5d26cfb2db67219f450a075acf506529319898892bb9eb281e48cf90cc4468d2a9c974af4c0ae168621f4ce4cfb1a3d8905ca0b89f22bc2051913a81c16a0ec6e581d59a1757833c67f306188699bb05c453f0429a8c623516039bebd98fddfbe08525c60985e548dafbfe261a863c8f3293dcd8be8e879c03b6c4cbd1447aa5395c0842316d19e588d8d911b0030850e05999d4164bfd2ab8d0af184a849c7214342617c3921af222ccd2c4201e9ec8f1893193ddf8f07682daf8f097f956a919ac6e0957bf23f2fe16fea35afbdace5bc461d5c041793315feae6162ad161b9cc1369ce6a0c68f59b87c5e179e1925843a20fb5ce2788a1b592caf7271a968476c3ebb3486aefc3e9a5966eb40bec1076cd76ea2aba85096ae8f93cc27026a16af15f7a4f10d1a09347b854911a04468012b4cf509470794347a2a9db25912ef540c98acadffd9e13c761a8e219de586c341ecc41df0b88b7d3a9b0ec0db56eded79fa650ef232c977134c4b78279be93eb163dba310e26cd2e20815dfb8a60a673b93a71783f2ab6eab599265d20a18db1888968ef8a21b473897b3daf492448721b0f26998a9aaffbe2bf577d938fcebde73d7d99252e929642490f1213d3307ed9d2872401f3e38a30616c08b4445ff4873020d73062afeb893a4d0b7e6e8aa698de7a0543c0a4ae6cbe8363ec8213027b7505a4000d9c92dd1e074404af978a61192477469430d023e342cf66b93e300368325210c83960e6e6029bc6e80067c7ab706a82d2a86079cc144d912bee36cfbadfc7bbdb8f0baa16ac33e5faca96efa7a2be7e4ffb2607d268635353815c0560c1db54b5ed0819634d52528d6f4f8c8cf923596ed557d184092fba14f7a269726e087f79fbc9a2d03b3435fa38bbe5e03796830bc10f6a91ddaba3b270a720dafe856a45fb3576a990c3746e07dd5a63c300f4bb0bd6900d1da5147c4be96dfe5fff570bb8363b9b8444d23de830fb5911e710872c845e64c05b680fa7bfdf68908b94fc3cf8ae2289030be241f6102b0fc38d7a47e420edd26a01bfcb947230d8b8f8788469a80e870f49899dbb7ff6e9c2f74064d269ee24926e963f49ee01b74aac85a3fe86b09a9aa489fb4ad62e1a3f4ff4d5170e8533c13befdc17f7651fe0e8452a70e817e8615439bd6fe9c0c2927b8372d9676716c7534bbf50c41dde33f4b8fcf17c08e59d4787b75a23e8ab3d279ac1e789adf131e0ca1f9e1941990d8c2ddadf5a02a9e23c4b5c60027d39159adeecf9f10c2c3754cc6a3e0196f357530616940acf38da661f30a5db83a9a477359113f131cb141de31884523fdc1876715d480bc29d9607410a555a4de7da692b84f7a9fd2d5e022caf53f3fec3f00644fd6b7b8f70e91a1b579852f6c9bc831f73739f0680a1cc2d8b1c92fe61f526d3ee689eaf39191ae304daa3e099d2bf915b1ac7ac2ed911386f4c01f914697870c0b05ca639914460094d094ab5533724d9f2a79962c7ddfe086cdd36ec639166a87473678a07a31f44b908e9c513278e7d1933c496200c482a7aa97374c84557e0e6448ede4ba4c178a94b95a8f9233fa159a1d4bc883e2f6b3b4198f74ba67f782bf849a062e177af104382877fe130f71f2ae6bb837d0f181cbca4b4170e9dd31a4ae0a71badb5c5c59e1ea5088666f2e57f7eecd0fb50dddf82b52bc51c38162b4836679c3206d23d5d84931e47402f632871a30bbf1d0a993b0336104df0fe30ba33983f5c10536f658f35e36e128deaae7c08d5ec405579051831b1049f22e3d627ebefb6d5c0694c78d5bf963ecd2ac7b992705aa502448e40677e5792b3018734d43d5c7cfd4933a3789b752fadbf8e78146c90f9de08864d57ada94b452064613d77692e77b776e7605d2f89676cdf05beaf1b82f76971b3e0cf6b9125b94c6d34d70ec78756f12453f5da8f5228e4da67da223b654c9738e854e7bfed139d16ee3b41a0ce2bd3ae7d98051a538e2ac30f68edd2d24cf55cf85cb24845c5de8ca1678ef2809d2d180d38b7dc7a7fc9261891242f1e4ce2ca986afc831c064b754109f42cf265fcb531d6c9cc36de8433e3668148dc4abca470365be430983dfdcf5540f6cf3ef642ce71d7ad8fd5caabfb88d3f679564dd186f230ccfd7300c301c781ae8a95f1f95f7991755a343653ddc8984f744c5111db2b962275a43b97dd07769eff2927033b6fd9d4d7b99a97296ace277df8701453761eeaf06c0f134559a4b259e92a9423371eeed808a15eeee094a35542119f695629bd1a9f006be86533ed5ab6544c674313b3c0f00bd7cb1503d9739904344b5da182f28d3fd9195a9241766e15408884be5e9afa1174bfcf9bf82f3579773efd7f4e17bec2066e7a78dc1ac14b317c6ce0089126cda76104617be451a1bb06b41b21c3046a5a1086dbf9dbbccc2a8b4d1d3e10562a161fc389b578ef095efc64b50c5665af63acd7964c671d1c4cf577e3c489c5da48fe6073dfb1408d35c3970f40c7d4aa5f1442904b38ab46ab149bb53ef5fbeefec38bd568f5a50f8eb99e643761adc0a85de70b28aa71f6c5a3a1da0b8dc0260489dd1cce4664027caad6591da2e9f84e7a4c56537721090d428810a0615547b228b7964d319342fd26e84e626b273bc751af09b0c7ad37794da92850d9050c1352399dbbb34724dc061ecda1e93be3ced26eb04ee13c830f69c5b6aaca3f51d5ddb17a6747798895aa33e77fd8624c26a4ada1b7e9468e13e221f14ad9a4a516ef46941f448c719b3a619a7a4a02ef8f38602d82ef88cf7c07d8101465761eca0cf0dc734c33a85cfb0648aeaca4c3760a88c13f2e981af3fb0424ae1054a8a55eeb084eaefbf1bef6d0f2139a02587174d307cbdf481df8f23dff6315cbd947fe71f42b4ca0ea9e57e2400fb3e7a9eb7f7662fa3c570967bfbc7a9b92d49a74473c6ed1ef339b3ed628e883d0470416a65d407c965290ec8b0b4c04e02b3d930fe4cb1e339821a582b8f124f5068337c85f6c47299ec3d0e746a8fab284bea62930f8d7834980af6a292080ff331b30be065b2f6dc1cd36c8e1ae8c4a678dda22d0fc9fa896a2e04d484e716ec1a52a38d32046e96fae1bcab26fed035aae9eec341ac7cdc430121c4104c4b02edc870ef04a71c9e433267869a2faa40694ff55f4c50a2618e1cd25f4e0b1c23cfee43014a1880b069057e631d27f5dbc8cf7e19557550976a679fd0f44b2eff7ba34a96101e7d08e01e889f74d6fffd5c9151226dbf0ace6d8b2822e4ea716a63c040c944bbdbb768e776b7b695d708f77d130be353296046cfefa403c8610a9ef558520ce4906e2fa4df232fbf70e6046b6c1ac1fcba414500aaa22e34f3fe44fa7273621a0791590c902e448b33dd4541a1ebd6bab96b31f79536abaa739e77e87215c8c9af5aa3fab362eebf1fb9998c39ad23837897b6d818551f51ae8442ed57fe435c5760e37541948c48f265414e33cef5a1e1fd959f8c590f54a8e1b02d6c832281b5a037ae6eba56436fb5eb491b71f7871c7a361f320da034b6461af627128f12529c0c482de72c85d1b7d367094f3e2b0c1e691d60801a49d1e2b4a33b6ba3c6fe5f864ec4e79599b1b0de29ba2ef0d130d6b075af53f84887b6d2b31cf624b777a5ae2b1b46545c6d6be84f1c80553d12b5277be0e769d3ff05adb0aee55eeedc0349f4a358b2cc240170160a4c4b2e4b50746862dcbd6e33f27009bfb5a48514f8b1e5dae05cae111fe0d5deb36bc0e0d89490c9426a2d554cc4b940e45b1dbfeb175d78a9234d95955c5027116f2b7ac5a5ba0d3795fe95272829d97fc2b57c1487a51e4131661d463f2df53da2e3f396305a6d7d59be32fcfdaa66da07900b0422a641a2a5cbb2eb0e457af6096058b4794b6a0a2f8d32305a7507edcb0e9c33afa72c59d941a0d143e23a10033e5e24f6f54417a2f7ce59ac1c67338a3fc855ab45b8bba24677a7b4b12ad625593f0c2af80c082caf05d9b45af63c26d86583177f814cf06530e6d0d720536659b948631dbb3fc6d6cef0a2714b77fc341e302c99b0e605731ec54a42aac00b3e16d451cecc60845d5008e14e4766ee6799f2814cf6646928aadfb335d974c234c62611f6014de10ec7d35ff62ea070e470d369d669c0de0c5bbd3e1610deb8fd7dfff3eb9228d07d66ccaf9c2f4516285b175b61c9fe7f65b7c4498cc91c447829b42b3a21d7c7445347c73a03a41172d3b8870f89d96168e9b4eab334b8282878478e13b0870b820d67842469f56ec063ba5436af9a7297a9a12ca5d16aac54e7cf9705ecdc58b60985c1b68ef184151bc0591b27a7316e8204a20fb32f4cccbf2d84331ebe14bd65ed119cbf9e07b30cd1a64d08ad75735c29f57c1855eff329962679137761a4b407e42a901ac445c62d5d7460a2d906fe9294ab04db6c1442c0583ad24a0f15d520b838937e3ba5ed866a9bb0b2a0f0c3e4a20466ad9de579de6d8f1bc572372a9c808fcd806938acdc53d2dedfb6c3643ab7053eafb94a2e0f7a36998597df5fb8b519df04544b8092cbcac52ed68ab4ca3a2c217a855bdcf1e1cf205b6019cd78588be6308cf9acc39cf37383bb909d7dd3f7a33a6345d623adbf109affe558cf5f6180d7789c1c9bf57f04d50152a1af373d8fa80fad0fb3c2a15d29bcd4eb35ec38f87c97f162600c31af4045a918b0f9accf5c6c2dc49f840c943dba85990497ab329eaea98c9eec4932de576ab3b81fedf0ff96cd74c0d71905881f2e903b1faf08a5c17a7dee8498f22258413078be6aa00371deeeff78c10d8132e77328b5c7b751a04ecae2f0615f6bc3b34a774714a68f1f2c0f42a05267ab9dcd5f0c396cb08b8f9f7998d2ce6382202b821b9483968294858350c3dd3ab4d6750c6d9d5587309dd8efe21a7d233ca55a0734d42644c63d22330edea9d92d3ee050470aa572f02b35f694e8a9bcaaba2efe0c588397185a46dd03c72806662bbee3e6811d3bbcc8c22dee2804074626e83ace6f2dfb8ca83a5b8707a4a27c92505fcfa1426f1a90128226fa46c22b322e73abd855a5209b5bab44285b14bed8cbfd1575b843dd969c1ff28fd85ec4be3df0107bc5c565568ba6137207ed7321453c15d0f739e2f80706e95ee9346a9e6c78bef49cfea80cbe949a56731e77e197df3299fcf4ccb6c91399fda1cedd5004c079533334159f6dddedfc34482c1885cceec2cbd56b28acaf16579836ac5388fb437823b9e13a9d5d266f4878d757f6dd1bb7c63564fb9e1d97ce740411fe2e331a9565a779210b793282b626d0e5d877132776e871dd7f608511f98dc08e6c5c071a8bbb76d4fc1ddbb79e7004f3604ff65f2a1c9478e67942ad9f23fb7f6c94d4bfebca863d084d259b00f1f9a8148239e99a3601bdba80024081abda120d97494b40f0475978f0f90ffa398d6718b39c1c20ae6970f401f2ddc6e1f1d266393b90eee81d9f28f828bbf61ee114d92542511814077d843d5b43a46edd379ee173c2c5bbfede2315edb3ea19e6ceb4d40b458e26f9d6919cd4629a7d178b3ace2c2f565d76257beeba18228f0b458f69a4e229e6262983d081b2942cb1dcdbd4f74202571f1f0c7c28ad5d097ff5cd3272c9328a395a29bd81a929766ba9a497ba8e8b5e8f06a48107c940561f9956a5e2f085d81ebb8910a779caf63beff4c0f486d1468f886c6afae37e782b6580fea8d791df8ada6d41940c27b86730de2f9d9f1d807e514d25de660b410ee01ec686cb455c5c872a47c10c5836d8a0976f7aef4e5763945be91317fab0f3b41662565ef8fa09b76a37206404ccfe4696c07abaacb00da6ebca471a8540c916c69bf48ded0b678e119df63cb5560f05fd4447f881519567a8067060a852074149f67f47dfea73034bdb382c7cb07638ceb07a484ec19c2fbbb00c57e487b7f13ed2f929296c5e357701b7aad81c4af03ac37184084130e24a4ee7814e6b685b8a893483aba6e58cd9721ec2b2538c9ea9077abf063d085bf30ace9ad7b17fdef1fb23bb13576e7843886a81e05733490269d8756db82145ba7684fe4f78a5a00632b0d666d95af1c9bd00fd0175a23601af78956a2e1a5df37c191d02daad5c7475fe85389aeb767e04d2b2a324b3fe66d0a04b815448a35e2be5a9c1325f483e6544b262483fe6470d18504e3cbc45435b8acfbc3c66bd02b54990aedc599f4d7b4f0a4c23efcc5952ab23c4840b9e7b99fe7e78653a18a9fb92701442c38de8bcaddd8f4940d54c344694a54652eb4483b92da5e899d9d21f5196596166d2d51ac1a98c452c24063533e350908632ac7161770e68d94f7b35b2f05ed3e171572c50f9ce44256bae3e48a3b72e4fd990a4aa985d7b3a58e41256b31584e431390cff992ed009de2e4e656e690e6d9fd3e9b5f35a4738a70abf4d6edaed7f986c3c980c5c92254a83292f88b4dbc904c3584f77ef61debbb33d304e6098f414324a6a01c726861ab98a1ea7f4c627a7ae9cffe13185a09d660bd3579858b777951effd24f0e819c4ece6bdd3b66b4e08de7e2e0b87041fd6a7716aa011f45d91a0fcc43119b3fa09c69fc3d4982cab91b4ccb23098819a32b81da2ec13e2162e74d73e28c650c2e494995a1b992f0f4bafa14f41f8112d0b4e58f095ca7bc09fde323eb4d80b9ab35ee8764a4eb5fe78e904c5a7ede81bfda2b885a0620943f419b19715a29fffc13392801364c1878637604f7b1c06a7a2c35f1c2a9e4cb9cab0609cb9705a98d73a76f3d4dbf75373355d67b890466394fa6ede433e2cea995524d3005a45a7dd4346a5f21806a919bd65ea6b59461c859d6f4ffb2fad9191018e60809abdebb4483f9355cfd4c8ea4dcd7fc84c40c8d1623b2b4c066bcf1e0e44287273fc542569e95b97bb872a21405053d00eb6975eb66a2344fd3bb77f551f60f0ac9cafe9b10337ab6bf22e016daabe0e7c46463de49123f8dbf3677519249c8ad98a47fb4e3ac746230e6daf957c24ca79fe74d0a06b75b6a5a6911234787f82a20b7c0a2556270e78a93a3c1a6412a33d5e288ff26e70bdd252b45c2c2afec652c50c9a1795cda4b9655a56af1eeed2782667a2a3552f8210387295744c2880d5a902c6d9efe0c14eb7bd4038ee3b0925c240c70b6f3d7bbd9976d02b08615f5503331fad4e59905f51e028bb2f122a7f250ef853af28154c5f7c9fbdf9697bf0b954d66d1c9d7283edd75e62aeb6af907dd02f55c6d5c82e6ccda9b37203c8643c6dbea4f586db59aa31ad15212f23f24d1c78e1a990a91635f7b043b7e06afd6f9a32cfb93c81f40177b6f034dadff074f70e6be37e2e8675953abcdbdcaca73e403a3b68609f47096caaa2e8b23912eb160472274ed6e8837296354d64b3b67a3e722e73ca3df07b2c4af5b6d506428f637642b02b7e8496a95459945c4199359982983d53803e2a9a971086c48fd44c112be5143b78feafeeb7a3d35799dbf4da78bc3e9b8be4297065eb60714b94f735bf6e7189d3ce319103ee83f62ee82dfe42d7bc5da91ed89a17e7fe316b9a55a64eeb9592f403931d7fb55d44985c6f89ddf92a82d4db72de06992a9b3a1759cec2360c253616369a677eea57b3ea23f5f841f9cf1998621a1e402d7f1b516ddd40dc4927156abf1589a472030c2727066d93d9f7673fa9732fe15e635457ebea09fbeb3419dd900a4690c56fdb4015e3a7d5f6fc7c37f3b0b1ab1f7a4e659f2c1323f2cd0d58a7b73275ce1e308fa97784b04e4c21b77e6146919fc6b0042da78436cae16c99b4ff09638b0000e51af780a5134ad705e4d67c24b4c9d20e8eef5bb9d160d14af4564b5a8da639be7d3e4697dfab7f50722848defd06aadf3ec97f6e3a4ed9fe6374a36a1e153edaab5e6d9e67432dcbe92bcac6d45c80f188507b7353325e9ca4bc6bca85b95c80ece2a91e036e72ef394d522f2cf28bad63108cb32aef73be41785527739b9fb8a62cf5a3bd8cc2f46041a15b4f763952b2f19ae7c0a07194423a34464a231b39053b40e9fb55dca9e212be70db9a6d9e5233677392616ad82cdbb77afcd37c08dc5a4c400bf17d2f7ed0b70b96f7b9e3e6e336a1eed5ec219796b64d57346499a0b5087fddae30c8c38851ebaae98d08d4bf260867e720cef18e8ebea9dd95081e267092d3d1ecf5fb8169381a88adf3d74b2c0e680757e1bdbe6beb4dafc1466b6f17b11ff02ba39c02d1ee8eb9b74e47107eb17a58c9ecc254b702f1e337b74a78184ff44b0b74b420f0e7b816c8acb46ffed617f33b92fc7953246a37806ee913c6a7ac36915b4d896f38673dc84fc16c684d9600288915fd980acf9e7b9db1e43106c892facd0a67a75d90facaeef06dfe2ac5d5eac0060c8bc75218a2b0dd89a7f516009d921987a13edfdc116aa0ea7ed2abe389d9676fdacdff9b713695216ec4afa3b79f01a9a4fc1159ceadc54010e821ddeea73a735d47dc4c277dc08b30804586c03929c048abe11305e0651a5feecb6e201d67f2a446917f4f343d2d9d8e5721a2b7fba36374f4b3e18dee9566ca5382931d26bb844339532e0ad17890d107c63bc79e538427b1ccd0d96cd12d591a962b36023fdbe93138a6b2a8fa698ecf4e52080c41189a3d9fadd18faabb14247b7cc1068ab2674b9729efdb6a25cd6b24382fc18bebcfb0646fab355728424672638d673883c5fbeeebf0e808c3f251c1478a3f2429cf97404d470c7d14650176dbea89493bd586c169724175d7ad316181dd3f638fc9e972fa5d64ef31b41ab77b328c8dcf661bcae38cb525d5dc6656a884794a8c5af253926fa6962f5236abbcf1d2143af344936a0a43cce362ee911a2c42a017ef9b01330b4f2366955628e6c1669419f4fe8fef9276abeef6174a46bde031d52da559863a86c680035b88abeb65a1814047af0f8f21125c597058290e254d1fe8f281e6b3d761604e769b203300d031dac24f5c904be11cd820ed1c1d81f463fbd4ec8b11b65d0df5737ed80742b4f1e059218f91c20ce257fff86cb531dd7b8619da8dd2c1a5c215c08a3a244c17abba3205ac62ed135cb5b92cf38f62b60c98e17e934e785dfab98f725d3783b496a3ecce032e0a51c8e2ca999f9bbedfaa30988b468996324ab8f9a2f61831f8054598b03b1b2c23bdd1602082e498db17ffa08c24f6553634887dbb2cafffb994a93f92b358287b33c2270daef0d9cd66358c7a59b517e76533857e518e7e8fa583ec216169582643967e13b07a9f6ae6f14895601f7aaa7115d1837acdc24eb81253997918d962b682bc5a27a33e8f415811b85ec6896ee106397ad147ebe64268abdddc5635ecb40097b9be04ed36aff36f43ddcbb5542f12bfe3dd3dc3e5337789454eefe146b900108fe73031195c0e8f15e8f80f8e3a66eac904fcd17b2efba135d1909e3fadd28e5dfce5c474607f342df68a6878326f476369b2e538e3310847fc6057997886394d9d097210c4732cab66c01a20bc78e4dacff47426f33745d5abda12414f25b0058fd6b1d4ae04bcbd9a8baa2e2bc51db9a20d3bc10aea29587984e84b5ab3fd4b08f60a8709cf9827c9e02a074f6872ee39e4506aa78e52ff8f7a21a628b71f1f892d42b85caf46f5c257b86fb18ed5efdbb4b1e0d30a522e1285018cfdc8a70cedb6793ad020967d02d06f45bfbadd0f5e2549c0e47c772fe1dec38f9cf534b2f89a897e9071d5a65136dda6c68e0c8ab11f8792fb0990b87759ad506970f1c4f8e162ad4080a80ab8bba12e02c5679be81f3bd8eee56ea94ff3120a33779c26fed1ea64d51800b99121f06b7668be93fd527a5f6aba8d61f1811258be556b13097b3e8ee24e27cb650e6d3dce64b4de5f77d7c1a6a3ef0ad63e9a988246556f375b1cb05fb44be7df0a2dd448c345645d5c80045ee16e379d71ca39119ae14024e9ee428355edd94d1074ba444f69300d6a993bf68334606507e49b75362bc497c45b68e7d70fc980a38b87eb7654ae969abc75be57cb7a0c59d730a5b6fc5374c45d0f01f59d0372370cfc24179128e55b773116d8bce5b45502e94eaf80c26ad61b88a5e25a8b17e17a12c079ffe8ef6c02cc8a4e230b07f006bc109429b553fe921dfd8b61dabe1b44885a7b5c5c83e1aca273da9bc34ef583da461622c02a6d9bb253c8e6ac81c5684d188b5dadde43fd93225d3ca907f2c88f2d25bc8dd99e30f6baff2ebfab227cfbc0b986e2a8b168b55db384857825ef9d52735ac45387c1ddd7c1a5cccd584c7cd4cae28a2855f3fb18cdb489ab2bb509a431a079b4d8fe0cd13f56f6f7649b4ee8c0e7157d2fe04f50e2b40e750e6ed5195edbf688837a25421cb6730dc734c77ae09cee8712fe5cd11de19c6171733d2c117f9f1c01eea8a48c462a38607caef6cadfce2615318e3b50dc4bc6de442a6937f146458af25663721dffb96c43b0382bdb35cf8c0f4b627540d40a70928051fa745f02983c225dffdcfb8ba3ff89f9418e3331bb512496dda54351ae20f5bfd7892840c18acb19835af87d95dbe8468cdea485f9769b04a85ec8ffd274708dc11426449681e74390d79d32fc935edea5d01523d1b25891519218dfc0bcfefe4f35be07c33b82b057d6f751e9bf75a298427da5e89e7c280c6a24e15f93dc57b39e6d9f159c0872daae98b79b67cbc65ac516c8c5b4d78de96387112d95a6f9f2470ce47b1937cf464a325e6f899a8fba6966394d4749b591315378fa8c1910bbc0bc2fe10c479aabc80083f15a0aaaaf59d8134d9485d30011286049ef6808eaa4555ae2b8c4cc17a6c62c989cd033ad55b747bd14a510deaa9c3aeacb8cde6fd6cfdf911cd276c456f8c3fcd204a3451eea2f85ac2abea742c15de9a67491e41a8a2d57dc1871eeae0d707667479d316e5881898382352d12aef4cd3bf7299fbf20a764a78960e4557b875e2f0bcbc64c8fa40350527580d1f2964643be7b0d8b3ab207d5f225124ffa352e06e872e8617578a2c1a0bbc4edb49c4648bc5ab60dec73ca91b8529ffee40e8c896c123b24543c5321885c08a99185983f912b75178d911315f9f75b441b75fb85e891c0891198fa33c62895c5cb5b1c98dc5591684f4ce084594279140af64d2c3c9dc48360c1944be30281143803f7f4b9e54bfc5b9b170e9bee5bd831dffe625ab5d60c63d01e88843063dd0bd162652de9e8844e075da96f28a52620fd0aed3d2233e595a01428fb381af1d2cb53a6c364e116a171c8d1d0de86da69b9534f373b5c24de0915cdda6135a4d0241926f039fa43660f6a4b0198fae764fdeb1939880b6bc1396972f863d8de65cd51cd0d490c1cf16f3b6a9e3939f08cd6e194d4a27c676124d70d82db2b848cf597908351c3deea444a1677f6296f32d70f0788ca8eb4fac2d8e72e4c14b4559cc7ba7593e03a18f39ff6ffd1de883a5753306f42cf2b2b2db1b6c2bdf08631eda1efde31a15c8a9be814873f519e991c3805206316135ebf8bd122d3391251f43b2ed510b24c7f4922cb5125088e46e3831d2870b1a6d12201ee1eb52c40fcd914c1e29ec8ad7f4c6b0481e123f063fea2921f0c4e0c7235b13b6b04cbfadd305c3b85a70e647d80638efe8803ec8a9dc5883265594cd6249b6b69ac81f4dd2dac5d6809ba45c3caed0cf173478d94ae3edeec5adf089f4033033ac7452de57daff11f5ec02597a3b9a2f03c5643d487d02f5e709aec1a3cf923d091c51e280af3eee0d504f53ae1a5c56219f0ec07448397f9606f04f9e45e1ad956a85f18078b7555461d60c52c614db3de31b6dc7d95b0349982889badfdfb066b12ebfdc34b6d22825e2456f09eabc916aabf5e8a658a572d12db12963b3c52e90f9d2b4d3c0cc9e547ce8c42ad907811cbe8c3b7034b5d60a574e71449923498c3864058037a68e46d3a7cf6b176fa33857a5965662b8fe5b20dded8124f9a9915eafeac0996d8d2f225d5a216c6c5805d8c9fef3759a2e4a64f31b95d5dcfd91d54d5ead9da58c7a60f34f68ff09b2674f5b1412015c65d364f47c2db794d007bb2e02877df0ddc8b56269c121b24d6eeeb3b4f2faa83ec410cd81e4b259f3f89dec58f6fec36d322e5c3a7f8bca3ac6352ae8ceb343c79530328cfc9598f3c87d50148ec3a890377d674755bc86668a889cfc8a7bba7e15cfec9b8c43191e6259d499a18ecc9afc2c52b89ffbce28b309e85c1eefb27fa65e9b37aca18d6b78cbf73f1b61ed4b0e6651fc5a21f1c99a904f980da14acde289372828a0494e30b52040a32b60dd5541abc58d2f9da8aff8e42bf457e34265df2710c929687804ebaa3b6537c36b0524a9be686c3f7979163208f029dda56984265c3fb4cd28a987e9af2b9af4e76f0e3f03fb8e9b06fd75d995bef28b2768dbd061adcda4dfc83a0e59423e74932b09636b14f1feefa24a3c93ba6bda33f8e5701d7f2eb5e70ce8b36c9ab4824fe1938498af410c26c85b17257d30699b640eb37dbdc0b5a58ee8541a654d6049281099d86e9ac7033fcdf41bd0bf63dcee8d9a9c5543c00effeb57cbd36692c0911d4407e99ec9f2e6e7c975d13e149fd3210a0f04c4e44fbdf8f7b9ba55b5b3569e67262658ded58b655b5576b55fe885353c6cd174ab132ffb65038ac30e713408c75099b161286d59bfbf40577809cdf20ed6eeb3b8c09cef1f6fe94235c98c7aa33b9c7555dd34b8b2eccf6f8c7069c98726c6d637e5213ffd5449e2069b6b72657829b66e1301f103a96e715591f4df981ec588444ee5bbdf824b80401950a6002f960ae1a1ba1ff6ce9a258f76ea9cd089b49e724877e4782f9d34bbb9a19384352d5be8f83014a6709b7e82fc54640f06df9280bb5dbd153ef56cc989d0efdc3e0296ea72279c425d065489ed0068497f0d7f4606bda192d34d00f5ee39e7432e3d1887f5af3ab275e0ae44d7e275a90cac6916eebd53116db05bf565b6ea66d575aae8f2645d90098e15abdf77437eed146423a9a79748681f85523e8bae0fe2dd0ba648be79f35df3ea6edbfacf8e35ef2d74da2912acdb9e94468caa903ae7409728f9bcdd9d21fac0577a4fb246127cd5b47b245de5747cf5ea09c6a80afdae19846757f74ea1833f79829453ae4b60299e5aad9263f182f571f47e50323ecf776e0a6f454252248fcea5aabbd6ea2ced8ee00ebeb13b1fa01f15fd010d5099d1a03b70ef2adb64b982bd8f326e01a4f8f0f1c3f9d86ed9da3340cdf093337c8edb2ec608da0708df00d593019faf3e838520c9b7eff345f0796188593916b9048fd08a19054ec5bc6ae70fd126ba9e04825ee09f5dd2e2c1036015cbb729296172c34cc77ceaeacd9b5e57af2bbfd60873c1bf2d7a5f586aae4c22474e6dee04326a6ae7ac12bef687f6f866d600623434edd8ea1742438c1a1d3cf483cb33c364f1eff3b8dbb37a67e9e9d3edc50a0256a2a3fc11ae0a46aa4f8dc98977e2423818c9d373265941bd231be4e248b271c750434df61dc01035e95e0096e8dfea107462856e3291eb07148589aa21c0a7228c42a5f83ed1a9f329321b807177b7e5514f53c5c87aacd679fe5e1a41c3a51a7535bbabfb7b2aee33ed32613e551cef94253084774bf9b5a225c6c2dbe99afb11a50db6cf018e272db29053d6ec8b5f1d64535e7708aee15749dfbbc854b15711d97b9920b6c36deb3e6c7587be9b06746b08e31367fe76da4a1da76cea1642fb162c9c848ab496ec219c4d68a24071a3d2af4600f5b64681673614551622e74785a6305f13898fc4c210d60d9e4b99078d7dbd1194780aef77e8733c7bc3f45dbc3ffc8ed92600204ee252559e768b087ad8f83d96378cdcfd074febcdb8a885e308c7127cf6cc0868aa2bf75c7719c832130f65f91de2643808e51994d4ed7c7583bcf3ee200de1819806cf2e9e0c6d90af6309800a2c046f48a1b4ae6450c7a31dd333c05947dd5e213e9cdb65b9c9063146652458d74645c43a42070d33b136c160bcde7bd45185f8f69275203db9c5985e174fd1dbe0b9bfdd2b14d18352d7f7792473435e9ad726d68fb6c8be27a30f7f448ee87a24d8d77d154f137a8be57c7310f70207ce19a410f8b4d8f9015538ee0a1e110ec11a9e58c8b097dbc4e78b2de11426b378309deaf7ade7c5f03f0d6e153ec675350bad1374e4bb59d0aabe5a56ad5018fe2b2e6ee9e2bc4c199fc5170ce09e5fecc74568fd2ddb8a90cabd31c86b47733979f234dc74935ccda7bf727cec7f6ed06aede6d34715b637a27a5abd310c91094491e1982cfc6408a2212ffb3e310fdd7c6ce6e3bb5c243ec44e8215c3f4920863438c1ded4951c2cb95deacb78ddc72bc5d77dac3b2224b5fbcba65fcd5c227d0353d28cc226a3545de652cc8d812ef69738ce490ae9715fc33e3d9d0d3456a8805fe454145652a204c776607dfec50557f5fdfe85e5d670d61ec7599c3a7e9a2f2057b8761c67b1a1d3cc9d307a3f3444460ad4cbeabfc30dab101e6744e20dfbe4ea092dd90f7fca6985b0722542ab9be0c7b6272346528fbd509b2367b6f3906f140170c8b0953dbcc883df1bbfaa4edcddbdfe103f440d7c64b006c88b18843f293d64340bd5ee0dc16252ea0372d15c993339a8a0196a9bffdcfad627f009e24ad9ca36c7e5555f1412af1d34b7d8631214558b62dc5bbc4159a7d1ee9c9a8042e54331394630244ec02c8ecd68b014638ac5c459d4b87219b89eb1b4ba36954541da884e7808c649304c0bd442c973495b7076fdfbadbdb62ba988b0c647c06fe5e52dc2ef0f86be568ca2996a537f75dd02bb4d821f73a282b86567b6f24c829a3ba8a33b03590c69652967badc25d5627122cb38f185fbc8d19d8b759b45cb1f1b9a4147d019ade85660d7d3030f8f34560824cb0592e0afca13a94629c2dc2cc7d5d0d6761bb31695d27dcf4b225134cc225d3f230e8ad57ebcc50c8a8d253503c9ae36183e1797b85b07b8ca6edc70b2ab1c97a825ae43073e051464d0b7b1c711b21ee701dfea7a13b4a00cd091746094775421bac1df3875310533484ddf8462606a8881164853b8368adc5907e5c03db8fb0ba5b4ed9f2e46a345fc7963f63dab491836d59450e1348e725a80f8437a9aaeddb89c71f27e191ad4be6e073142d2940c6dfcf967a899d1e0a4258e468f6ac9aa6c075f8f74b7699e322b74839c927ed9efcbf1ef599d982c31a24955ea3308fa30bfc19b33ea70605ca8d9ee2e62140a6fc4ec962311b4ef299d737d0575372cb97b34b2c4151dd562e069a32b16b04325b54b35aea00bcb184fc768dd432925c2f65324765f72662a0448e55710b0a62704453b5dbf4e96d29fcbae4d49165df1b6429a79fd0e9e9b746e4ce6ab47195cabb3f91663676ff4ad6ca82ba153a16e694f0c119875180cb2aaf3c3cc5b7b9aadc88d26ca716dcf7840819e30b24f5680cb209387b6ff3221f4d0298c27d2a370441d81697de9d7014462ea110104117bb7ad0454ae2919b096a503aa1ded8e73ddcc11603416289f9f3c4909e87703c1b67cd20cbeef595db77c90a72b6ca3e74aa36564ce54d8a1bffcab9fa26e442b7aecf65e5edae855fd718e3c7c101d0fe96e4c1663a332b4d0ad91ec8d7e261a7289f4d9db1f922125823d5614355b5911a2b86aef96121857d2baa8d958b07083e8de32b18a6703b7d9dbcf320bbcde8261ed4363b917f9754f49a7e2edf20d556eb66fc2d9886182b0d3a7f2fcd743c432291ae3bc7e0d511fc9daa0f92d24862f34df5cc64acb89652dbfa2e047be8126ed9e95c9c8941433d628fe639ea70838f9d55370f1eed472ce74d6603f73a010929cc64a63e6068d0fc14c1971cb94f203f87dddd658156af448343c3e5eb619a33a86b82eb149703df26788c70189475e79a441a5a62ed41cf7e808983a333bb9162cb936f455ec3338b2f9c6f7772c3b8788c18a75747dd52dff596d562b76e6e4a4ac64d0dd4c1e91cf0d6a8b1d7188351668f207f8f7997c38db234c45fb277856a086aff57df578379c409ac97066ccd95eb45cadcc607a8c118136c71ab974c400cd2d3a1d7fafd6aabc048f34cc635a8bb14ac38d104c9a2e8c9ffc534f3176620ddbbbfdef3e3a690dd16f0aad07d28062d2ce76acd1cf98a7a1fd1709af4353c8dde173864437512a7601f03ea02c82b7cf179473f3ed597854eeee14e820f97382f930767ab31c8f11b414eaebb35a1873ba7a8f0db693ea0508a2f3970b7b3f59f5b2513d66970c001f26e70c95635e8c5472d9a9494b944d019526efd59d33bcf4e44ee77a129aab89cfeb74a2c41007304150bc1841eddeadb2ef7e655d66238acf349e03c9be4dbb59f089d423743a61e7d603f1398ff8c5ff0d21af25d237983a708ec212e4abf00aea35d8e7936edf2d4217f05384a8d4aaadb6721571dd0c99998b19aef219b7863e463eeece9da7dd7409c9e1672d47c5bbd9dc917299fef409c971393063074b1dec9cb992de72db06221b5b0680856e5457be240d42be0b632b73151477ee104300354fbbcdde0e43eef0f799cf522c3ed5076ccda4f48551761b8a1a801a7389b247a9f557fdce2d05f13922f0b1f6959acd3478ed8d30d8c5bbbc3e07e00aa5316926e58ee54ad40c33dd1c990b4897cac86e1a64180d49a2c6153fd29445ecb2003b48f354003ef02951558fb18d34b4a294da455ef79b2f0da4e62e402b0fce93bf28490112164562354f4666fecae1a2cefbec5f6237272a16240e1f5a4dc53ea277b278f02de1bd0f63e1a45c160ed2c6614c0b37e2e0a02dedac6995229b200a3e9cf9a9d389f4c97c5170cc855ee9d7a41eee92ad8633fe062f82e4a0f6ceafb0c338dcfcb4965c87d94996ac2a11d35acb2e348655a638fafbfcbe1fd39e47b23a6b218554914e71fb3f35aa27dbee68efa51ee63899b1684362bb7ea8e001a055285da34cb16a8c2b14bf19080a87e27b751caa3c93a3a769ea8975bd5fb1d291f74cb2a66501518da88727eb7dee7a3ed36f25018a55ece4c6beedb251715af7251d1f8f9760f82b3564bbb2716ccc756520ed7be8ea8d1281e6ed37d39496817aff42a8d28be0c712b6c6d4350001a6ceb0d0cbbc80cfc27487ead8e124bf10be23ce67558bf8420d1f6573d23a464d196ca714258c027d2b9b6548af263d6d1b75912452728ce0ae5216dfadb5a2115f0708e6c16b69dfce58c928d8cf9288b9e6925f6b96c39ddbbd51c58006bde7d0eb240fd3bc25ad91082c8ec248c6794b8bd6334ea637ba44261967740cf9b2f3fff81fcc7e1a1da3d38536201c1b602a246135516561abc38357d703fd556da54a27f9f32e42e30bdb249d960dca27f694904a53b4071f5439c788dd7afb941b1f1d63e564fb681d55433dc79975105b752ab5a1a105b7736993bd69bdc0f1f4fc6d5aaf463ed8ce6ed2498cc6a5f1bb76404502a50e4a55a6c46cc1a215a2c74773439bed2f30596cc56cdbbc4919ef5b8180bb059bfc596c4b0c59bd905f90123b784e21837a6e8481801f2da329afba124c5148e963d4332fac128f1f14b9300fe6943f2ca21f9f021aa427102c2e22ce2d61e329ceab56e1ff32393dcf3029dba497ab4baaa027d1f9a6e436b4d546cf8937dc66e05fe00ef11fc141171292698facb4f201d650eed85e89f118f45b420f93aabe1e0a113e7eb9ccfeec1c04bc0294cc1ef4e7bd218ac155405f3e019cf38c5cf78ee2f0e88111e83b3ece59b29b27876fea601580a5174dcdb7e1fea1f653238d90695d43a17509a253f110fa5e5d5c36d9699a3d010f060557bf7c6f2c66c70dae545a903e8af997c89a772e93c5e90fc371be1cf55555c681c114dd73cbad476905e60dbcd2f23d2e86e56de0a92e11bd8407a200d9e4dad29bf63310e1be91f57b1af840ff461fa1ec5a2f3ddecac9913af87396eb2002e75390c8722727a3b8ffc11aa21cc717da9c8ca21b5295b6793a28ab81a9a2b7f1e8948a0562ac7c8e972e29399cc9308504cdc451a6e29f1976a1d47a0fef087eb98f6fd43fac3bbc4ee3f3b538c64e2e5bfece086030efade77ec4cc517b3f6cf7efb967c5cf9083393307756c1282275b41a03868400a5f8f8f4601c9da6f4c71df643abc19c11578fae5c274cd5e51f8460e566ab199e9bcabe11fab99cf2d0f732f416c928994ce648f9e8ec3d68fdc7042d40ef1e86252f10820dd48239ce9377e8ab39c71e932f7e26e02e37f2b159e8e3cccec005f228f6b605b97163d651b25ef44b3bedb585ebe362bd0cac0d009c05ffeae1578abad7ebd4ff52fc1c2d6ddd9f9bab4e76a06e15f5d3eff2b4e14acdaedeb214835fd4436faf3272ceb8b148f3e958cf5c02ecd5f93d8596a2bb69dcd4b3c3a8d2a6e0c1a0afe407cc442e49b25a1a6f1c16b890a269bbb1e0ed8b07bb90ea07a8fe0c61d78e0d3ab756b18a8dc8b98dc0e0ca028b69e52399567f072e6889839d18ef20d13a401afdb8bbb1c433103465e0173ad7d31883f4fc1488907c6e562baddd638661013c97f8273398ee0c649f3ad6327c725348af452be0712b9d7a4ce451e381e3b5648a274b57f89aa9cda1a2c52533d59fff045e5a3ad80757c7ef26e62a8a238b3113bac2e8679180286c2e45968c009662cc1df3d19346fb748d5e3079386e1a2b4b58ea7abdda74de11e9f6f9ab8d2346eb8d7c60e6fdf27490a87c7be2c0da200dd697f7c91077030db44ce6fc6a22cae6aa1af523f7407adf59c3326c9b1ee66417a464c86d04fb3b58184c27494e9c1ba0d6279afad23ff6cdc2e525880f1c40cb86ec0398e2072e0c0246d3147ffd208a84aa965534b93162889ab07ab3668db1f79fab4d9bb1a17cab811d331d55e2bc7fc53c573111589fac975e89a9c69a3f8a903e8a02d93bea2b7cebc789b9ac4073b3cfea51f16b83fbd5d04f9d66df068f7002c5d38383d280fbfd8d5cb936e04f96ec6b3fd7b7dfa1fef3d5cf5cfd700e75d7c820409a6547809afee5eee01d96a0d01e25ff39fbb04fa0f48b2b4c40ae7e7a1c9e726d57764415a2ed62a56f7dbf99c0005d5c9d7abcba3e4fe8661d4fe61ebae14601f8f5a2f5b66e37d7d3712840fe1050335b3c815d2aca91d1a3df347b1ab1b6a825ce58b97f8b9548331a4fb728a08966badd5ef3e98999316d17e0f5bbd177f28a15ca8facbfbe55b0d3884a4a79043df082a6b7ce9533964fd457b2f5f03d9cb58f8eb319fe3eedd6bf8f591329c1703075489101528e60730c766603b952fdc90dd7fa8ea8af6e683c6886949f5fa769efe1063d66415db249c181f394346a4c204a4c83d17f13f6fb119a74029496de6863255aa0053ad4c2d0599404c2a32155497d92284441eedab58f8eb5f80ae592ea8fd4ac7f5fd3e544eca5a27371473aedd4b2965cfa4fa5eae4b2cdfa62e03a2f5cff452e59dfaa3c8248796229dd0ee845de1241dbccd4455b1321fb79ec7f523364a7f968d0bcfcdf66cb8eae2eb6191d427b3e3d2a353632703813d42ff17073896024a1895e74584d93e07bb11f7a4e8a83e6783b3c00411dbc99048c44e596cea33f43f1a6d36f7605c58fe0b85f4b5f0dc020f211fa4706557e37947ce49f168d5a80082561516665e49bd0734c9c0110e8a6fe10e81e200b251d47a15157be0c2532b46090a7c1cdbe11573140d608eb90c505644270658647e460cbd4973304f11905745509db9dc3f375f9a9c29441ace6106b3387fc3dcfd62562d859a443a3fcde0501b3b6f54fa10c09da67a349468095db435c867cad43f418916ed9c4e6a865f386a7a556c945fdcbbcd590f901d5caf3bc104d5f59eafb6069930e03c993551999c1aa1bf101ee8167c4851f2368e9586d545da2d3fc27eabb7c6400c3831554079d96b1fccc88e14bcac36b1b69541be9e1b48181751077aba8f7a5ba60311ef6340b9e28bd5caa5bc22fd7581352dccc1d322b2c1c6f1d51927b74b45c83fb04a2dd7bdf0ed13486f22cf0e53a57a157d67084d9fd97c8ed113887d1e10950547fd8343aee902a2251e9cb68ffded79a35ba83ae95dcd823f7e5cd61da2a6e0f65dfa2551675dbd21cabafedc4e92ddd41c84b54976f250442457f798b67d87f24812cc1a912113eb0f53c219034e938c2e4f77f236a5a80c2fb63b43444c3e87eb70c876c9f0f8996eb072325a9f6cdc08e0830f56a48dc5951f95f019e56b742a76c8afe83726b6dbf687a9ddf1bd41b1bc5ec564f2e07538b0162cce1d9748d78d87fa7def005ec1e11f490330c877c4739186879871794fa4584c6d8a990582454eacb0dd22c212417485aa1c1701693b4c91719e29980ae419a28dc51197302d2c2302e1f43a7325ededad1ec2d1ecf634b07b5c2c0b3583dab62dd8ad8dc5927fa930d0bb7ca2f21e69d0cfce6796586d23eb84853ab8e7785972be7e8d573ac0b00964e05043d20edbe47323672885a54707e955f2ef1a325c3901cb911841fd5dfc50b98d899a91cf98aab1ed24367502ca1075b0a4e2cad869bc51933b578233332ab452a846fdad2071cbbdb9237b873e93a165185bb0cf709fae0aeb2aa4bf9f9f91ab5039cf7c2bb37b703fe35fd16faa2566634f5eed9528febd5be122f66530fc62598ff6ba8058acd2ae2e5d850e9d35e027f915084f5a133645b8d9d2386fb3f17ef6d5b9c3aaa3adbbafd7bb14c073766f8f42462b1d6977d399fc539035b07ab678cfb82e580548538bec7fa91a6f01f9215c79b34b8f2125356022c3eea6b6e6da06ca5e4f7a74c60bcb3cb709ee28f6d07efda1beac15469453a66935f769bb38b171cede42556f38382965478fca018807651bd2d36eeb745c4b6473613950935ccaaf283e075acf0a8d6cbe86775e0517e0f284428076207e9965303f45b133cfdbc909504fcbaefd01ae23913255ea1c9c5043f8c40cc05caed7a21cea0e9762439281029de1213146858abdff2ade1877607d527936c8f8b3d2aceb5a040df33fb46c0d142e62c7debd2a5967e131b4c847cfb7a3a1c59598b3ea21ce1c2518394ca50085f2f32f9896ce9f83d5f82419b184259499b5f425b1c4667ddb04f6ca167c52b332f592a1fa2dc8bab10ae9263c9bbf7d5091b1d22676ae2aafbf7afbd2df200418dc33a0e6f2e5b2bac52eb4a50faef1b9e388e9cd603cda4c3f8786e9ad55c546cbff3a21fe7bd8e1b055f542561b5d141a1988202f1150b0e224fbe17dc3904ca0d29b3748d89c4cbc830912171c7ef4affeebebb320e27dc585312ffa55886520c52c464712f20b91b4832d9286e003a6adc7fac7db523b5a563b11ab715e8b752b38c87684d58bbda68fe07d584cf2e26a86dcf9b00deb8d6fad381910113816dfd1aca7bfd4e6729a7cb3bfadd756d91f36a1ee4609a46e24712808a5031ab7da5d75e70667b75fad30d9726faf3f2182fdec76c19d76e5e17fd0f1b697ea6c2df3ea603d64e9eca2097079b895c348536e1dc5664fc0bd778005d369e117ddd2414b3d8e1babe39d13b4116068a17a6b08c8592880a1482adb80e5e75263d7c3bcbb1dc11dd3d6334fac8226f59bd3a555f1d9eda1e710dd6437cafd92ef9916bebfb5230457a14086fd68ae002ff34a509b647a700cff7ae14f82c5f7a2ea41c7525c24cad42329297e85b97e84630165dddbda6654631f7a40cc65f5343aa22759083d1027da0ba9c9de0e342e3532d264b5e4566c832c6e3d07223b2bdcfd6fd7e83bcc16a63111d326949974fe16056a6ac0a9a6e0b3166fc980f94d6d1440ef162b6f842ff609efafd817dfb488f42055af32e706e138be0b8a98c35086afb0240d307dc754113dfbcc4571d6a442129b02be3f3a44da8809acc76dd0150e58c478b009789519ac3117b0bb304e6a0f4d00c767ceaf761f87efed202886dab5a2c3840d3b86c2fdaf295f228c3cdbb75af2e676131a38fb47eb679c3b48dc4c6257f73729bb4692e14314a35355b915eb4c4187367bc4ae2ea2112380b550238e753b11ad86f2012602f6964d76c6a378d2c7a8f1b2701b31385ae5c00b052ae8c58be7d542e7c8a6084b15278764a63d59b8cd04ba35b87cc0c22b5c92f39d436c09a96ba00d19671fbe50737e0c7d33ab81aee211d313ff5f3efe99fef5b014861dacf5b3783a18c28a82bcbb6a5629eee48c6f84fdfd287cb1d3db445e5e96e2beebc96318cf9e747e8cc6989445f185e468dd85cfa71e0aa224b2bf4b42795ac1956e5714c906392f7ac5a27cbc511ef96574e1c1f4d4c76bfcdd7a7b6ee83b2acb2c37d3a1dc732be1138c75e5fbd859962dbe01286241cbee262ccc22cb42e023f487b7b7eb00d40d5cb266085f6431c9b54e1bd7de19574ea9b3a99739d1fd85fefce46f53f9395d2f139bf60af7d2a18999b89c9b271b31cc65dee4129a965f33201e32fc3471215e2fd9800f81664477740fa6e882aa039368cbf3eff6c63df5b88e553568f96d087a8eba910dd56d0886d57f1a0469138721163f49d7371f95328bd2c90719c8de6ed36e655ede3d24aaec18e6ad6ae8cace29caaec1cb60f6aa794aec91b446055f8c87660694ac164eabf40099e348637d2af142a7309fcdd03ce17e12bbc45546b7e0ffece5be1bf9ec5652f913c122edb995fd249316b9d148fd354f2dde37790e03ebb3115a897a16c8470964fa96fabcc1e2be0b462fe44ce2579057dfb27753d09e69e85fffac37f189235853542542c76a96af581c30b745bcd4ea64353d9c0d449757e1c4f37bfd11194ce3d498d51869412cc857631124549fde4c88b1c71cbc9c408559b144ca7b408d10cef94954ef9eeae54aa82c3dcef2e61359026836191e2fb2701ec2e8054b841806483cc276e0dd291956fbdfcdfccc2afa0539dc00898d08c376da413820c125c8f59863f9de4726811c4b57471f0efd33c46335e01c9eca048fc533bd2193f9ad7f2234e2e9f7fef535ae5a86dc97082de69cd9cc6525a2cc3a6edcdf25e0fe91e901b7c514069c824daebb7bf71180e04a7e594438c82c9e1f66d5ec7bab4d5457974ca0683ef9736f6d7cb7f2193b9bd71375900520b9eb02822a84b38ebfaffd00e1480c4c0d41cccd6cf98d04dd48c0516e5956a22f26f1422a4a3a94cc1559ab58ad0a10f6239dc8f9706189a6d09decab7e4dfbffacb872b404ceedb9213555751a977739d62fa72948e7a334f5524e09a03f8fb095da6320cfe1032f7b9fe527e52e4dca021e5afcebba1debcc4d6e414b91534baaca3b1f5c4abd33f7954e609d757ef512b6f94257e37c99e8c171b729e2869eac6ec7bd69443c1b4ef512551a21619319d1f2789f7e88e83c033dc6565271bbf6ec2ef3786b7cee6fd2d5d5ccb6830c413fc12554989112c3c7cfd1176d15d33c79b40024062588c634ff2586520f8bb178904b7e61bca679be55c40d6ea713a5e2cccfa0ea1ad9b40a7d648fbb405671b6e62cbcc177b2094b83920a887cdd1f13ff433efde3c11ff9ab74e8f65e496e496780cd5dcf4b1e4f5654d42e3ed57459392387665c1996f1871f05b43e1483ba13ad5710c5a3b38312ba649050a0766d8a5245a9c2af1adb9ea926f08869c0f9c8e0899db98fb48d70423997070daa23485110622891c1170ff217449d1fa4e17774ea77c92fcccd5908df681dcdb14fb1a02d754484cf7c6fd9a6b135afd8c1c66eea46d67652413eb8c71c5f074bc7ab5c32b4dd54a50807ee3098a7605666936caf82a01cbfaee448172c1570700ddf5e505b509dff53bbbc50394c9baa5afd0af02d67586ff144980d0ef1cf8da097e657a9e7809ea3fb19e7d81cf0d6b87e23712ec7bc72e4205fb017748a6f548d971182c31a7269bc385b5e92fb4ce3bec1c52d4a1af30d9fd8eeea0a8f04f43fbe4a15ad9961fabcf5453d1e8159168b951179d0643194319ef224c15df0991386565b56b0e0ec670793dea9759ec9e0c5b2429081d0eaec6633ac1c7fd814e32c51a015db89c55e610294d9fd4ec40f3493be59a7ce5664eac070850fa2a3117f2af346d6fc5e1771009e148d245f590408109ecdd3532f13c4a1775fcf59a3d2c6ee27c8a6f9a29b28b26455e83179140e5806c8147ece7b9574bfd66cc459f4e76712013da42e2b01fae10b0f7e5e9bc57cde911266e10f9b96547a0fd46c5768d467fe5b5b9a0c1e07390733f43f11f0e36a6fb2496999209fe1284fde676504c9a4c8fe530fd8118ccf8188161771ccdb5ae2d5098782b0daaed61a8ed89df0ccd2ad6e4dd458844fdfbde5222618a7731a43648dcd6f411ddaf29c3a7649332f35c2047dc802fad5439777104a2682c82283234a820e71ac5187885c243de3c82aa198f90bc3e664c90d61da6244e9b745e2c98e5426caa8cd0d13c859cecba7bc32990483eab03eb6ab75b8c01b8d85a52be4e6a2d91cb401b812ebde98134998e1226688c12b70c718f9ad996b8a790461f321d5c176bceddf6b01246aab00071dceed7e0c939bbdf6e4597362f01db32a964f7ecfa3e538ba0bfcf0504ce3e90b0bf27927459191e7ddb809d4a9e5a59f5067ae4b48e519a1dd782078d56dc6290eb462d80d8f19a0a03cec13161cc3b55f1f0268a2762de0359bff75791297b1fea9009a413c1c2c48ee14576cb86c66e81c4e5fc86f589f7c8214f1f2a0a469c8abbf2453069e0512cef52fee455d3a3023faccee7ac7d131e50f040b1efd055eb7c0bfe914202fb9c02a84a59bfed8721c2cf002b6cb075dd467edff0b697a6abd6860ccb3620ba0a21ecaeeed19cbb1995e47e1c64af1fdbb0af90bcb939318591e2fc93902bb3c8f51b0bec93252c5a914def38919acc2be9834518471d557fdc73677b082d34c29a1de0c730b844e59ae26a2d6867e2cce875d4db2489069fc34f6af4ccf34ddd8484c1b0ac7a219bd34167a35500bbeb3e7da5e5ead47142a9b8a260667938295ae633dba6f804c50c0feab09bf947e92da31093be975bd817f3fd5d7868c0270b3eaa697dc33eb69dfca0bfc832ae7b4f3f5f5510429ac48cf787d432444531dc1298695fbf4ad1c82011da00664f1b4edf927e30ade16915dc6c9b84ce533d107166041d479e101399d1f4fa688e44725d3c7275b089fe36b19b5cf4c4689ab8e810a09d8fd90c3d77fd088cbf7b39d20f3231adab4b4bea610e77805d4139e3ba0e1c141652a2dd414a345761ff0bfef9503845034f00aba802a588bd120538822f1279cbe36665d61782b4feb748f9b0f1854f82ed1029e7eafb01005750af30f3a379b312e14d3053b10238a07871eeff6f1f5c1f186b21ac7da394001b183cb3dc4bcbfd17c107d136bae9e1f3031ebc985d5449c2adf932be7907f9a9ab88d0e34aa66088feb368474f09802d24d7e68b6fc6c5911e4dfa2a518d146f0a91a91e5c931bb5907010231fa8bc7ea585de2cba34519a365b822f497ec146cac0054eda3d021a78584f1f384f9f0663c28d2103b8e1ab1600b8adf68de340acf18cee34803dc166dcd802c7aa8a241a535ca4454374db8dbc5544a6109540a9d1b63123f9850b655c8b7d64a08f368b391a40cf3757f771db6601c3a9a8e4e3fcc85c5ea953809b98d2935fea33be22e788355ba3657772349bdb20ee24ea52eb54c1297577a1a1ef6c495fedca98a2503a5302959d4860fbabb694637d2ff0f648e397381ea9224bb3f47671cacf7ee3449a024e9fd6e3e89687a861e9544290fd5c6b9e20d9ab795d67084df7cf771382f076e920b07ba4eebf909d86e5c80cecd912709ddab1bf15a251167f0abe1edaa9ee72942a9246f1cb3f9e528778a845d0ed634b7b3ce41bb271aefd0ed3ea49eb95d78b357583174f6b32374bc0e7730292131419e222b9c8b78c974fc9e5359343b276c2bbeeccf75e5966994653321a6cbe01c4547af24c86311f07bcca11e06f4bb0794ebb5c9e088fa105ed5951482158a605977f9517ee74fc9057d07b1f2c32a8cb41adf2a061322461cff60612472b3ce2c3a14622572ef418939fab3f2cc6e13df65a8ee789af3351457dbd54583d7bb49e78b5ffba49aee9fe5de3307ab65a0bb643820a1d1cd540adb5d30763ac2f9b164584626d5fa1279335b7f14037b637b8766feb1df20c5622a3e7eef6701b9a7aebc46940652b76ba85a4e3488f12cb4d3aa4232331c5340b7286f7b17a2c42356b9b5aae1d0a739bc123688ebbdf8304a512274da22b1c95956844bcadc3a9e50ba021d798cd0b9f65390ac674cb585159fcce907b37e766ca2a05a05ebbd269e359219010cd5c18cff6ee8137886560eea5ffb780504a0e488df85ac96db1ba72b1ad1fe3df70b6acf61aced182c844712a90217ad00b5761bc6af26b88adf0152ffe779e8a8212d5d38f9bd5cc9b8f3718746dfd5781eedfb24aae24f167eb9f3899d3b3bf4dbe6ab9da2e953e423385ff95a9f9fffa52e17a4829f63f48ee95a89781e79e4f60bc49ec3fe3534accf2d04817d52f155f62f43562dd634905357264a7eca74e99598d168a736174549532d49f714168b62ed43fc4db0298f94dd9122a81405ad95eefe79825770289a8d4c1938acb3ef9ea47523c55f316964a34fca53d437a53482c3376050d2cc446520e46e818e0d24b328e163902c9574433e63616f4d1796124423187d0cd06af75506f86d3027cd3fe0830c7601b926586c79c4728b2f184ab56ee0d6ab0af4f25f37b4d50c1cb401301f9c7ca59b1e4fd44d248dda9a2dcd434edd92bd4330e70c3da45454a4b0b8ced94b6c036cc20f131a46c7ecd14b84a9f6661a54611c3ed47b33551c66bec310ee88589264913dd4525bc3990600b9eaaf64758976debb8248f93a0892e4ce6ae2936fbc34207fb3b0bb27b59621957ed7dbfee34f8642fa9f70559620896ec633f14933b8fe8c11af81432b224937ed8cfcae23ea88667724f72c8c135024105401b70eed5cb2f028f7fb31c4921335d60298d2ae96369880cd98a76485e29a37b24a10e315bece3e668d18b8cb0ce05f268df8ad32f7cb908d8c3c4eb07e68c464f35a686264a478ba041274b70035ef5b280950cd59445e5617d49c26cdbbaceae08f5ea3bdbdcb5f050b081d1b73113bdf5a60b1fef663497ef0a3fc6f8068b1007b55f62d5c6c48844abe4acadf84b4af86e5910c9fa0ce50ef2d50d8e46bf6c3331361d077277cd62d9149ad69275dd5f854cea642c36c33cb7955d382dcbea80f790f241e5b0610aaf5b95281da892516de4988c1e9f1581fc2f132bcd0b32d03a236578cc844b0a22148917ccada679c196ef73f50148e54c953219aa5936095411adbf834c7a7876a35f3016de56f7bdbf633a0da552a0e77d3c303d13e190f139ec76d19eef2c8c3741e4f42dc8cb9c4b12139ed3b19abae0142800a3796f9c52a68e6fd5c10d3d0cef39f11bb8bf8f4ff3f602963f0f93e0341146f37f18678d424e505c4c44858f8d3de7276fa57b790cd445d1604571f5264da9c2ec5786ef6b30a455e31f4709379cc515330198a3b34d46cbd1c6980589e4e4c69d13c0cae184ebb980433c65cca05578f4178bfab08cc1292633d090a400cafc4bdf92aa1ec637a195ee10a7a1e69852d7eeec21bfe2f2548581ef3732e51fd2d9398c272367e621bbdc74dfaed7b9d3fb9cc16d4af2910af65afecdd5d3490d6f98bf4be7278551aa06db7d80468ca99c1eb1d15449880fc8f1ef52d17a576247efc48fb25d2f8ab2123cbc473f39018270a67927939c84171dcaf83a508a16b38e15d839e658a829e94f07f34da0426dd95e157bbdad8cbc27fb8eb3ea4b1bd2b4e35cbf3a471c92e3cc60f753b62d650f1ac28cc9c9afdf8adb08af78edb2cd51f1283d43c429f804c7f703c351de7df5ce38da32dd388e6a791deac9369b698e363323d9582d5c2d0c63ed25b91870768851a27f56d3f246581dbc4147dcf719562b8efcf2b2863c0e682d80581d1a54c262dd7278ec97ec5a32d1b91d7413b2082040bf15884a2cad464b00ee78d5762ff3799f863564ffbee716ac4e75410cabff79c6463f3ac026bd44b95ad4d73ed6018051858e17c5899c5c2b8029aaa2648267676243b0a24d89c7cdc127f6279612f6b76c0e5f4167786505a2597c6d98c9ebead68efac2ff6c5eb20302a204a12088b05368c1b9065d5c0d1e760e3d5840f933bdc0b373d8d5d436ca950bd77dcd80e49f5ddbe70ad08d7bb71f5653d3edbae5cd2fdd3bb981904b845d10118041b2979031413651bbe87a5f107fcc891a97ded4b7c8c00623c3a00982937376023fcc31898e8432e3d38182f1b71ec702ac0c2c134027271f2ab61a029b3cb4e293dcf28568737196555faee4b9f6a2d86e578d0dcb75ad19537b52506a0a864c1f65d1b1047dffb725ae776e80a0dd4602328fd5b26a67d94a66228382003ceb2644bf40f57b668a9af201eb19a780aef9044124290d419174b2bada422426065a0068913374596536f125b339b446528768c323b3e6ef5412d4d0398300774b9a4fc018663f88755575f5d10e85d9356a026dc8c99674db16b2560b62b386b1e539630e620bab237a88459150d26db54d15a39ab8dae923c43a58fd8b31b7e2345b449f8329679c29f419c2f0e5c6d73a0c795911f7c5291b8a9a0e1b5ea221cffa66c53ff0a9cd1bbbb25bc1b674e86aed2d77c0799e58369c0595193487bdc3602dba9f0a13ee8d046ea2adc0f5722397de84a3b6f39da0f10803cb6a2e48d177592a58b5bd88c7a1413d96cf0c67b5473a572ce8e503d17cdfa32496cb86be1442d4adcde05d3bcbabe8ed926fc0a1515b214c36887f3669921edd747604efcac954733a28cc186337a5a688118abf9c86513d2c76be9a37a74e3fd987e757baeb5bd138d675231ecfa31013139435370a9ff84ff1f92615bca7b54a559358387351be79c0e5e7dcaa8794cba89fb0f949595108078497cfa4f442b5abca1690db0ab4d599048acb13e519bd611e35ae66d19a80838390aec2a8eb523dbd54208aa2bc5e8800c7376e33d8409da44e5a25360820f29b7bfef5b21943e7862c571002b76f5cc4174d6792ff7a568d0742ed9149454fa2fd3f2b8d32495f38ce696eb21dcbad7b77241906c195591294f821290793679e3b17317bdf9ec67fafb2d115472c4ece6a182eac04d46593ee217f637b2b0d4031de9dbae3673d09ec0b6f0b94d41db1cb204bfb1fb4421a07d028d0c1321af054ef289eebb9651f4e9d4a85431578fa437ddcbc85da7ba33b141583a7a6b9c099c71e56ab137369a60577983c03debd14c6fd2f4519a23f15ef32b934dea5a21104132a9cda13797d4cc72af82e19f2faa886d15049e4f1b004f23a287e29494c81bae55042f196c8c7a34485ae5c49562185b7bc185fd08fa37b14a0bd07a8511e24fdfaf1478694851259420ae588695b91d7cbde417d017b5234e56b4ce8495f076768f974c5313ba8b547754d05f14e990fac118d69bd6a830fedf0f6143a8a533a9bf1e9aa7ba940d481a59a0134d244af0dc8f38cc4f2c08f974e9856a87ef953106c421c2428538ccad370cb48d981e9ed8e4577787b06d43ef2aac21bde577d5fd6c7150b0cbab760680d316b7cac755062a1bb632c0ef759e2fbe642a02b142fff48809c66d0c8eb65c9f8bb86fc1549c50d49d00aa9d793772be50b09c589f1fea0fe784daa09309bd4df8f8bfa23627bd6c6d2da8d57add5bfcaf0ab879e9e9ce5758216b5b3f492d737c0ba347794fa2ba8afe6a9229f505bdfc9f5454814976262a9bf5a39be9b635199b72b3c3c845eb4239ae3d43e2d91c5bc2eebc84701497d1cc9d989d08b81f92facdcc6a56469a99a8f5f58e56930a8193aa66c5be4c78a32f003e14cb990e2987e46d7299d67368e796453ec06614f50c4d8404db20908435d4454c8b4aeedc916f4dfc335692a6ef26f3af5958a141f2a213978216f3ae59b5b5d6debf6576b90f31ae81a937c4be26198a1959f61b55df29d7958561748c8abfe14e35381bf1f4565d9bcd2576c80dbac2d385f7fc11d041d3aa7f1475b9c97217d3776686e469b18cbb43d799cfe412b102c9b1de2c3c3edcf3995cf70437778aaf21576929855f4f4b72b5b2bc24fee975652b6a606b05c99d287c02bd18c55ebf73fde5babdc99cfb4ce4b72c8fdae172b0f0c0e332eebd0d32a1ca8415207866c2b79b18fbb0851587c1800ab7c11214f9161b151cb85130a435d7d78856274dbe0310f5e196d679d6437cc7c63e063ef5befe838c324779070d1edd583ed631ba36be5a4c0912f7b5572413630b77a312f734c8f9ef776cfc3ad3dd721b7729265b23ed6418a9c6035d2ddd2984001594bcc67758ae382e535dbf86888f31a6588bf1eff9f3c728db3e4595098f27ff0c1510ecbc75efb0e917a2d093e06e34e2cbcbc2cb3ef9b3a67b9e6167a3098adb0f43d0805cde55234035af488e87a066e9830551fea5aff32b6f15dabb46c046ae78e186855a26d6bd1025dc7afa284ca405bf4da97c6865abd6690deaff931427ea6f961943b880b29e13767274ed23744d2f8ee604dbf5cd260076d3306ee185dbd0529ce5fec77d925fde07fe492bbda6416a82ed9ecfd3ea256e1724bc41836da717b5af4f5132df7e20a8d53d324d14add1707ebd6769c048e10c8fdd1826d079fb041456667f3c220f93ed51a4c0f68ad022b820a93f9fd0e699ed0992980c92351e8733836b078039a966f551f3fa11630eef2e3588dd90aff656a9a0c77c0c41213dd47f59121e3eee3c2114b5a194f38146449744775e7781fca73a625d2e8dfad3d441dd270d4e6cc631c7464582269110951ee72a4066c86c472bb4f39fc16355c522b4f7e9a43d75b8bd85075d23b3248eb1ddb80d7452520a0d0b8ede1b4bfdb424bd44062d14c197d05abb9118b595a1b20d10809fbdb1a324c143c0d82f3ea93d128d6e376060dbf3dde0773e8dd8e114e47b58431101eb454b62f7cf0861ac879e543914a451bcb29d33fbe155c8ab3686b02045f7cabb934054177eba89359209ed81c1f8782791d738e8a883c5c3155597d464c982e59950d6faaf75e172db0d4142d39f11040d845d2d11335b8f455a945a306335d56338c6ce0a41a8c504725299e62a431e322c8b7523eec7d6b2add48c62bf34ed4f732a825f427e263482f2faae266d1a411892b87879a8dd11e067326e47efff903dac3d743f4ff84bccc9d4d0ffb615a441426f4f0d5cfa6fdf0653c4d947fbd66da2c898019821b64fc8c609dff726ae4bbb1bed178752c6a9570bdfaf1d3162ebbc14ab2e9497b440434a85024cc8ea8cdd76902b597e752b0416927e9f8056a593dfbf668b7a02e7ef045b37a8535a9bb898aa6225d817071d5988985b6111843e52dda62794c509af43469f82ff932ef2feed7eb9c6352c250b3e4c8655308915f16df348a7d7ce50a7b2647b62d138875ab05b1502ce4245be5c3707d3e6ec92b5a452884290f66a7e1408246e8811efc7c9407fab7fd95031210d06c3488b382b38b9de71c24a5fd06d6222bed9e2d21081e25ca8fb6c84c73f9878219e5bb907c2c41f5e2b19d6067b201b8630c185f0a699e0f7c71d9fce56afdfa0060308f2fe557b0fea996d82478d1c6dc9175140da86726734195e3b51138c1f1e57c006f8cfa0ab2fcbb3ec0fab573393e40483154c8820fbbb6d4c640c8783b93fc92fa62d9d95784b53c3cb160b006086ee0b641c69680e4d482f851496e6f5d75b7c0402ca8287de8b0559d57da9c0656258cc31685fbd20806e8bece4cefaa85e3a2684cdbf4646cbde3862625c015856d16c0e0598a9d41548be66ad6b0e62da583355e44e50553bcd6c3152c5c100df22a57b65a4c3393c860bef3b243ac4a5176c920f84dad8764b1efe6be21b150fa73487cf2e46b6bf6ba1d2108f57daf0b70c77cdf9aeac98f2a65ecdf3910c2b535b77ef31be414c2983afabeba5c5cdd19582094568cb4c7458bf0bd379b299f98cd4411d593bc24864b1c3fe6b58053a85dde615c168553b53675458f4113449dd62c5b027cacd450ffe656dd4761c566de2ca1402bb53b9593d30420eff7e0c5fb2bcdf4d3e404398b5758b358405e9d61954bc099379fd0fd96cd0710b11aadbcc83ec12f135b8ff9ea5372c9695b3938cbbc1576d8e53bb64b3aa725e95a1f7648df930591cc7ce7e538b60a8d73dc32e60dccb1705f7589922833804455ebd5146586c92caf4b165f1e2f2b9131095b3dbfc48e358a0e244f3a9dc75fa2155e6125e7391c24fe7efeff0f9a2466422b64057289054a1898f4284307e97fdc7fecb4156e29a85b5486442e84fbaeec492b0a3290c6e61ac9dd1cda644f0ee627a5bebc1faad899302a0bb9f01aafd359684c5b23448cb4384514668138653781f711014a0463b798ab5d55df6054e6bb660c7b2889394cf0d5ddbfc14485b22a53faef817878c7eb7359a73bbe8044f055e245d5f9f03142bc1ed9d3f68233ff763d78b58dcfb7dfb33072bc192f743a759102f333fb3433a5a2fc7b464c404b067abffbeffa50b3ece122ac9f2dc4b4baec31740d7ef137cd6930381ae612675d08db8d5eabc48b7cc30904b9c6cdd174228f8bb11ae5bc2c62538d1adf3b3426314404eb0675a832ed14cbd909cb118a6da09103d14d1d7c1f1edb13042a958bf90020afb4bdfafb22039d7b712991c1a9d9242ec4c6dc28e708f312395ced90a0738daeb708a0d20b9a0cc1f2b1e234a944373482f768b5beb0ba61d560f3858b232ab3babd8a870a65f8c3a957c4c85fe2aa80ed15208517e75aa638c3f29ab9c22898a00a0ec0447f550dcc1eb30f6829123f7ab8166a512cf72851daf408438d106eba1bf93a9b6d1beb04142875d73b96757cfd7b023b8b813ca16ce8208285f553d5b696fba1dbe87607d0952027029bd9fbe265169535866551466f3774ecf1c4a6479325496793998fa03297e96f7e88407864c5a7dbe86e3c4efd858b884d487c25bf565997a9d94521269e9475c34bcae8212fe3e7472cd57e26cd9942bda6efde74869ac5669d866a5e39e49de41ef44ad0215bfce6e66b1a6d0f551d30012e54e1d2e10ea7c0f925de79c74576801537863315c172327caea99686b9c3700bf3c905ee790edc39ce7f0d2f8564fa86f4d8794e4ec0141e9e726bd1a40ad8cdb0596d60968ed3f1cc54f151fce8228cfed9ca7f99353490a0b6aaa5ed294d52cb373e46ba6046cbc3fe2198b48bb62dd981a0d2782e7689136947c5ada0d358ec0dff512b07e067fe02f369a08fbe0a896a91db0c2513c753dc677458f50ea6d281f7b7475de0f2623c3201c54ba6e2b29ea81ff63168a5733910350529e94f0b05b92f84b4f4849fc6ebcde9dd9a60169d7845fe453388d36e8210b61942351735a53db599b23c526ed6109d511162100a37d76fabae456089e21c7861f1f57589d8b768177fa1f127142564f5e903090248bdb205ba3f5a2925d5d59e6437cf3935e4f7dca6ec3f590ad4d0cce7ceb39ac1d02e0e6b5c9a6ea85e21fc5df51f7962e49a70a74969dc8aab227ef43604fc891a92822e20ad0479b91ecadeecd2321071f6e014f07dcc41cb5a860c67a49733b47252064cd75782eab5599e9ec49299db0f369c09b9a613692f3696235461248d263db565a436d7f4a57d08b5de968ee77c86e78542c786505a708ba0d776bea4fab00fffa22434b57d0f8471c416163a05fc7fde87720b24d7b93362ea5111aa7e5662e694034f8573087b50350f69a31fcb6f4f22bbe768c910b2cc771a6f71e60583130393537aafeba12e0f2395932672ec66b7c56967c17f0154e13d4b25457869aff80b742fc26331683d0d00350c9d03bcb19f02551d266e465706cb677115c15c48b9a21314edc73ef0c147fd513b755233571d320af893cf54ba96beea2fa6c0d887d07d8ec9012c3aa00c24de4ec3b194798e812b938fd9e4e6a74e8b416291d4dc8eeab48ecdac14624639e3b5645a9ad506c84173ceb8d3d8a203b0d353917210a1c71fe49ae212125459908ca3085c6383ef9c8f32867df3a8baa8a2315048cc3089004e1ea98d83bf0bf986c13b376c953655b60c619eba003e7ffaa21c38d3cdf0b7b4c3f04acd8e94887c5ad54e044f28ba4642c43e6557648a24306edbaa3b587580b764d429f1277e327663f3394315a2d87ebf0f3e5a36ec8ec2a067ad4ddf9a785ec27d633f379fc3bf44ace7bd778dee2fafc6f11e8430b4d09a7488f92177bb856d9bbf31c60082ff1113cb73a1e792f4230c58f02cc4e2ff3193c5a08a3d8de297cebac8a1c5a874497b889c6c9f1bc0f7e6427a61aaff52bba98f42faa637ada6e8f575434b53bee4c8c45c2f0480f1a22ede12f9b0348824876d01cf1671c5014ae50e783969418ccad5a2ffb70f71f90de029decffd5076b7849ba97be3b6475706ec2888e4e3608d8f8d416e4446edcae37ddee6c801d983152976d3f335ef99dd7450f6129f309fae1b00c759f71e73acf0fbc1e4ab486ede104d8fa90ca3e7dbf6fed2b12597f6ce022a6d4f97a5033c5a7983bdf9cbc8fdf5f1027246dddf345fb0a40afb1b7502b4f431dffcc1afc2b1c1d20b8b9f724c612ec9b7bd9010504c8d7bffd5f561db0eaefa7893c6e5582b26382d574fc16fc76e998d6fba07b4026f2a4c809ce61b427612e8fb41a7f388d3291c8f41fb5bdfcb1199e427781606c43f43fb2b629779d405b64d2736263e9db7e2b40cd12a94886da599758b8ee4513461cce42f71643bee775e11d20ee83334297c88963d1739a80cde5cf457cb69e7afa79d09762d8cbc430f9b37f3654c7fe9e77699c1f8334381ba5d05dec90212d9c8f4187d5b38677e8a363075edcc193acf9210c62ade67306355da3bbb894d4eff775f9d64414c19fc1e84bd1a04de1e2d3a8ed70cc55e677bad2bbe418cef8ec3d65742ec8cea3c58dbc04b7328183578d5e2d74079d84c0ff3b7b138ac4bb3f34c7b15abbd89d16586e9ef988ee8f2161c52b444f339b04b6a322e5b30e6816ad6136e94cc5f823badc0f5da79c514bf76d4b417f3f0e226f0eacc0892359bbd8bbc8dbbd0bc296cc6f7fb698f680b29ef78c6cfef34133494b3585db0ffa0159afdfd73eea37b220d08ed1c02573f5ebd01066188a807cd11ca4e3112a4251b9bfc68e29f47b46b4f500a63eed08058a71136f61d5637ca0ec82ff9c94844a3c57b9b2e5281d984627841d8a2380de3a9648078e18604dd6ece44cbc750b5c72e9ad579f0f243bce60d77fb89ffc0dbad82e71dc84b416d3ac4073faec16bb02913ba3397c0a6661e7ca6361edffd0a12d12eff0e965bd01b324ee341576f569021f8ac0d8e365243fa6b46f784ae23add7e7e4144122a49dc7f8975d13fb72eb23a0d6eb884c59fb87d269bdd54b4f396d841f30ef11efe09630acd12731a8d2299cf0e231e3297cfbb44797ddafe3fd54df62fefd2457275caef1adc4cbeb79e0e4de0dcb51e6e6120b58dd6b81520c6dfe6f99c11212bac96e82238adf16b451d0be3eab2cf56aaa36a7785b5848ded8d047303d8045ee9e32c27b01aa95bea3a239ac66c5aa7769104de3b3003cd6b8693edba148f5e241177f94141a87025e855bd55c7921fa5a06b0cbadd2250382c02b3c7d3d07fb331764797e868349eb7e47c225a448560bb51948f95d5513ece242abfcfdfdf91bbae57c9fe25ab7da83bf91650bfb6fb0d87d6b0945abc81cf348df6b72f15cb8969f6267b021d9b44c03c85ca11eb1dcb4fa48538ff3782681567d45b2bb1bf01fb7b381fcbba0e1e33a32517ffb59ffda170a1ed53f77adf1a37cf5189493ebe7454966fd94c1146811ea08fef8ede183b53daa6fe13b8e07055f43de7f3e82fb12a50be373a292e1bba94756710907e259314fd08d24376e879b9c08949ee5ee7e4125602054800861d7686164d86e5ba68ec36f91368c4cbca3ddb6959e97729e1217351ce06a3c1205a90d20a82f1fdbb4366414ddae62a14d62bf18277bff6b573d1402c610b7d2946fde9ff672e575e89bffa22330ca8c6678971ee75865a42b24c57347f949f3b6b7eed0f5da014b79ba9330f8d19c23526ee76895742c894e648ad8cfa4742e5ec2d3e3e965f3e011f18002e34a37580951ad64f8ca9f8a5c95c3a6ead08b9a4e554001c92cd54d9db048df3d07cd61f4f244c0999b6727338287557b22bdf64bdbdebaa9a016e04b37a7fca8303c542156641973af5b0dda65bf779b32f19a457f48ea9698fd7557eff59be74b6badeb44a045e046b2dfe266d1e0f32d0bb4d2102d394e2759d718d4cb8802fc091eb744121c29d0885d4842b41d541bd3a732d37677c67c280fb5b7e8ebe5ff385ef45d10ef7c82f1e20f0373e9b0e2990e6f2cacf38e2dfc5a8294cba8118738ec96c06e968f5c3234d2c93270756355cf53dd2fb98af647007aec32b30bfdcec3cbfb562bce7634209b98959b7811f886fd1a7197f33e1ded55de01dae9ae78a4ddc7f2cdb32533f2722b47a75b53922c5fb245639c022f4e2938c61dc9b40ad3173032a1073519df127e42c515bc5d72e01084a35144a5a1ec600acfc950dcfa66cb4c7b28b4cb8f7749bc48d1b8df65972764e9cd4df2d2078f3d6aaa1d02435b0da6c89351679288813479ebc15d4e33657e6d3dd99ba0b2e8d3087119315e2fbb94c6ae447ca04252538a13ae1f75efbad516973274141f1adfbb5fda38bd80c9ac77175d883de76c50c76cbe5e2e817a6f97557b15f40deaf9b2ea9930cfda1239e00fb9fe77174622a2ec2291c13cfeb19601163d07e30256c1e85cc7265015c5b8f8422c722e9173e215013be53bdf213f0bcdd32ebbbdd56183bfe7c7798e053e652f3a9b9e5fc3d423e8910c94bd33cead7f00043dc3fed0c498b8986967259be6123762cdf5dc01f67db80c0f0c376d415101e5b7b28cbd28c10a5d4a92b85a77bb2066518ccfaa72d06aca3b3190e6766e30888ac1b6c426f5dbb2ffd7766a4bb31ca72f2268bf6cbcdd2490b580245a29bb99bfef6b42cc476e77c076cb9fa4f8632119491018313b7b03653f5b55eb9ad656232c38590115dc56db4ed21447144073c36c23f566c87c4acfbe910bf1d347941c2888c8a4a8d8eb8df012cb15293d256aa5c97a857a58b472397016db592798c2e8e703caa77f5cdf3c79322e0bc50b4429fc966d2a4537fc46785ced62f8aa9635b424a0f22c69a8b58062505e72adebbc2f81e54e83a324a87d839d5f19adf68fb1c62e006d1a4f0a8389bd1ed7d5be2a2d409a06f40447baa8abb35d764bbc8cd862c2f550a96c42e8d710ec6df8f592ca11430ed0e01a7a1c5def56f60b2c75f8052fa7e0fab8f5a01b4b71e9d7ddd144e57291d68749fb8d815aad19b57b5d99c4b09848c36838e4487b161682dc49e8d990cd26300e1104c4d6dcd2777cd10236d54762c8780b8f90efa817f3e640b12be11382e3677039a8c0f9f9d0c39b97113f18b3dd92abd529af95162c18b423398ab97f8cf9972f1e25f7a9650d6ed8009e957df8f51b5e6c474bbfc9117ef3cb5b67f448d16fea72fc2a7f1dc5922f2255ad10c2636c59b202e6aeb20573b91a9726d55bcf2e05c130aee26bc2c3d596eded0bbc452e4dbb9eb097d083c4a70c4f67e875e98f66e290fca45a8494bfdc012043061a8196f36e0f54a874f41da8cb584aacfab9cf5929dfd8c6bb807d0e7047aec950977bc3aa09d6df2fb37e12649d0cb1c88ca65f9822901b7c5f3afb5d2cd43c1418992354e6d141ab1cb846dd6db512d359652ca812bd9ff6781ef9e2d4f3b50f4365e8cbc1004a8b501787409cfabb387a6f31ddd1a7a8a85baa565c75735e007143206e57b07f44be896d1bd2066276810b79860a307e71a94e0f2c1370c026509e3ae83213cc40492fede1d8095c8b2dc52a6d3a4a395a1889c3f39d7abb4659308fe1e5dae265f71e2c4f784219015cf3e36fb1de108dbb098d2e6d38186187c073f43c769c9a4c0669a5c082c7b43a71a4c834d5c285572a296a1d48d74ff8b37a93bf93a116795f7cff516796c282f44530ceb09261c8de3daf99b527031f9ed52f1d4eec6a3bb6ecfc25aaa684131f8ebbfc35a50f1196ffabbf2e0d83ee9cb1a2157dd98d399a8f7c556736662c0b5847c2eb1ba5d977d765652140535215acd211940b217752445a6ff0ac05b3405839d38b073a4740b0a4bfa5efd3b82b3355cca5a1826894410578fe631aa8e35b430ed08b3dfe9a20836da90a67b2f2db904a0e5c2c773b07d6fe5e0975c4792f5f3051ffd78b60cf69dec5e7d03d2c78591dafaa687ec32fd3c694a5da0f81ea4d8e052307b9dae2fc8cb12a6928034c313c9ebe31fcbd757495cc1d9f9a061d8ab29300b94156fb2e84586e5ab97c0702adbeefc4374cf22d83345393ed9e9937fb87d31796b070daf6dacb7f6481ac308268501d8ec7f85b39e3e436c29570fca60ae47898e21e2c409239b022aafbf95e4a414babc485e1a8e1d60e3c31d21fc0fa0dd695de8d1a3f3eb2d09e3e482c1343a8bc52c40c60da1ac6cb89dc279978be3dc4d434070754cafebc9336fc74a2b7bbde8db5c906832744cc71c1655b17ade83d5851eb015cbdac3ed9539d85bf8d82d019fc4276576f65608b8aba0ca90d202c2d972a71a7885ed568669ad3264a7ff698de2e7a90d130de0f057500b5ed6f4a17524ff3815c6841ceaedf67c2d5d515dea6731a58c2729481550598c2ce6969b5e010e4ce999ed99b4cdec1d4f2742fbdb91f37c705f7ec02db2c909811e33dad15e89a6199769a84a2503d69e409759ad702d9d8c780a725f8ec9e6205e8076fbb783fca84b1076e9b7879a368167bdc1ec91a1b2aab23c672c35918678a35cb5a265a3c620777fe6838f4aba4a20a1568cab1c57930a8609a886f60afb9a92fb0071dbb0a7b0dd14e449222b3f43394867a5a91756f67a80309e9f6017a68fede45b2492b8244f40147a11ded4133e801f3aeb00811be63cc6cc9cbe61b74ce6bd882a854c1d3ca9e53afbfc10703fdea3acb6933fb2d8734b48d4c431b95fbff78120320be7dffff06b5c4366ca5307ae443b54d5c7a868f8c7df992510c32b944d2d75c1f4fb5385d03436501c3f00844866339d5f74303600d2bbaaa194fc47be2f11e236492cbcde5bbd363aa4e59a69ada042c3bff299ad8348e64919f868564eee97227f57a9e3e24ef938e09b59154f1ec2ff7c078290cc5e162b71ccf6293c490940f7a692e7f1dd14a27016ce0e7516089a7dfe3a2d10e838026c7a88a862aa9f6b2c6b576c3e078df1bbd0ff5692e44bf8e0640ae452e12483de0e125f6a063a5de42bd2a6f8cc5a9da51c802c715c036634d06a2678eb3f422f9db1a81e8aaf8bc49927322216390f4f172ad19b5657e64245391cce33c6266211dcf40158256ba91c12f2642d9e11b2ed87390f3ede27d056e57052f1e41cdf6b27cf471bb0bb8385cee4807feb3c61bd2b9a18e6612d5cbce52ef31873094b06bc27d091c5d3f27b88e71fb4c5fd5e34fb9ad08a163c8cbb9e89553dab9ee30d650b22babc5d065e5ed4a338395c7b2b0459087f0fa28c43fbc5669d40fa9fd1ce1732e9676eb90d969cb730af89d45a3d4b0a5a65369cb6df78a51a71038fb88e3977ad5f2bdc83e46993f74a28a92fa02e1184c077ab891e6688110cd9a8ed8f2a67233c8fba2a70f18f19133a5fca0b261ff03add623917a33d9fe9ab1aeecafd02524266642dc9562f9eff583ad29d91fff3b17e26e9e7941621e74a2382be085e0ebef0d7922981d547957f1eb89b6f5e75347f155dea389f4d695510ef47122f3913e3049ad550c4703cc2336d0755a177dc70212662aca8859798a146e4cc4ce51bedb8883db565d6fc14cd5a11295b3b5d379ba3b1004ae16b75652fb154242b6b3497121eb2a1f05be8e2b42a6223f0228c611e102aec007d7b7996afde4bb461b94d46249f560d0a5136a2f0a8d1ad482902bf7e4983e0217b1b18ce503cbf9379100edbf209eea9b70987362428937c81a79a0395093d3a5d859a6adbc6158673be555648478d0bb9ccf14e9f34ba3b87d99871afa6384754d616d98238349d4839c98a345a9a44470ddda90aa516c106293bbd46e22b95295f2c2fffeda806cd6597e52a4b02eb8bb8418ff37e78689a03f6925950c513d1f6e0e1d19cbc18a17cd701718cd256ceaebcf24cb0dc72d2f3a3bb894ede57ba91f18a433279bd508b5e2fbf33542849aca9b478ba16575a165f2dd86defa4024ead2611268ca3bda4a13ea5d6bc8a2fe9ec1a1838cf28b89c2c1d6de949b3892a3653bb01f29058b80656fbff5ed6ab143909f35daf8ae9285e8d01d3f0e7c64503e4a0bebeb4ae0df180820f519dc7c6284c7d0e1b2d77361ffa332c40fd184158b093c79513a0326d078c237ca1a4835f6386b71afa12d706178290ea2c076afd23d102911baafc248fa65dbd2b3754f6aacaef4011a9f85399579cb928f53a66ebe907ae125450d9f663ff9bff49e289db2f5d96b6e3da164cd0bfa831ef3c73465c5a5c19c608e7686a3d7aaf2c35710df68e84c918f8316790cf8cfc30ecf3f3def8ed82b68feae3dee98f17306a46057437a12d93ec2df0f46aa2d080dd4afe43c9ec1bb0afcc930522634b8b9ab8713f12f02511833ecf9781deabb366e68fa67f2da31c449fae22afd0901c8e15f410481997b66bbf53c414d914b26b394d37340cea7ea8193e402449615aec278c437385a649107777ed8a579cb1524bbff67de6cabaed2317e4378b227f305abef10a0d759307fa57803ebb189d27371daa70497aa148fc30eed5f66e29a4e6c359eb0b324d7bea560a9fbbb3715f05ad2f8cab1de631e782854c01fd6dca0bf10fb752150c39ecb851be01637d5eacd2d68521211fd95652266293e711edaefe2b8e8e8e940432ded7795749a71836824a59e706826f204f215aee780ae78522641b42c9e8197c2a7dcef374b7744b4aebb5166ce182a55b8763045c201320903beb964b6b6d8737f74aab47843de72e8e9e82093393aa4d07ceae4dcdbc9b2d6a672218e72695022af3e58d47a89247621272de5d2c00360c5d3c3649552495a1177f13549265ad4fca448f782e16b6d7a17d1442998c854f3c2e7d010d704cb46e072df36b61e25fceb07bac24e0be4ac118992547745c1f38991a45d80bf717a945ce06f04dec126c041633c4c61cd1cd7cbbd53977e31113e535a5b465f7c1d3405c54ba70d132f8b8bd3a2965698e7b28a44fb89b9a6a3c08e66a0cf4e391b9ed8c02309c269a78a71e0a703cf66da9f5bdf4a052db3c132f6e2379b3b2a37e89dff1d20ccf8798ece9f9bd5b0e3f268bd46b2b61ff5b58dd7f423d8cf56e39cd8fae3b0e9572be54d1db50b57a0aba4fcb65a83c4b021ad12b2ca582538b8869ba1b8c46436490dae70ce6de05166ae538262fd185e9e4e50a8678703a35bd726f5baf7a6740e4aa28d343caafe57b4b8f4378f43c18a48a4505c8a21714f91a9605d08f801253ccd9c2fd9f33c75ccc5b2fd35b909e394a3d3a0c9d87f566d502c2dd027b1fab895a40c55b49ad7089205d92371d35cbb8df30b79c6f98ba96d30be1c5755de21dabbdd575daf1f575c1046b2efd4ab2be0e13bbf21f0585baab13d37477bec2ad2cb515778029297fd24f99d7be67779e20dd509192d19ca66969c9d2031a3b1690a0bd2cd89443e5d16da7067e31f3cea7d6f22dcf55e637d97a1cdd7c62acc6f9f7a601764bec648bd630e84ac34996ba2413cb4e716fc001cbd00eeed02e332be49fd70db0d4559699dccd3e8273481b068a92f09947edb98f2ff8a8609b5683bd75ba5cdabb2fcd618c516b4886a5d93fb75685f3a98da4ffcd2a456e8955763f4c4ff5254319a4ee7c9e45639931f68143e5012267af3e8376fbaabe3ba429d53436b31742896893f84179e1964f64bc9c7f0213c3996c41ea7b4fcef456d56c0fd78b1ad19d2bc8abfebab69773de93eca1d8e89210f73360613efa28a4f99e8a3ff7a32cee164c6ea4ea495008ecc442191a56a85c06caaa65f1cd0e68b2e0e2e72fa2669056c7466a70aadcee9dddbe5f58c9ac4fb3f208114c593387cf2eedf8649cc1280d86c7d9df0bd18c44a71f65360355c3769797cce2ba1907547aad83734221ad6a2d67bd9d93bd80274e1f367899aef186cccfe89ebb19fc381cf816913563d3b1e25ada20ab009d7088d8245d26fb234fafe2275546f4f5d69a18bcb02d509587285e107ead5f3c2524dfcf64200b1455e9a5962171743a7d6bb8bf53af98b3026900b6d70c63345cd0bc73bb39ba1d161cf118b68ac35a900b6bb62b3a65d2e3b04b7bcd17825637d7abdd2d99c3171f3867e847c3e4615354a9ece7912986672814d53a11e0aa1097594c93dbd8cea56531f12a05d267262fd9cd992dc3ad9c743f1e86b1a49e4ff1578b4328544b14e491a8510b85dcc7457e0cc86dfac5aea84622a252f1e142775287e1e6fc43aabf6f50b7b789468cf840da0278adee3b04a5536393d78b2e88c33311a7c390861cff72d57630a09ec21e915dcf592930471381401a61b3bda117e32959e5ae94d3cf85d63064ba11443d82a29b54609da7b5788c3f6a8f32702a55f204a5ee5709ba23c396dae0f225c19ca131e28efc9cbc0f9e164d3964a670d4534662a1ab2ac3ffeeb7e9c72f0fc4001722a993e0ba65fb1687b5cf814fc6866030695523e64892a2210c63dec80699eb8b7c881de219f4e9ba4b18db48de9239cdf423cf607e936f54eedf2f4fe9add44f6af29750f4d83149ac7e61340fdc2507955e09d33f14eff484a13afb0886f87088150b2c11dda7c3cacdae85fd5f16f5e5c7e65feaf72fe5d517cc1303fbb490148f44f5a3929597219987213607cf84597d7f481fcb42229478f95e235a36395188dce68fd91f91ac42430e73dbc9369aa4c339a4290b171423fead5e4965915eeb4ee52009e670b09f987dc83b9a1bbafa6656e74814ad54845d046017022e18a520ec694d1259f1df53cbca72e6af30eb6bd2d5d2c4b9ee9effa262032bf9e7353132527407f63d7668a419c1fa1d8e07d539dea99672711f451213857ba24a98b15913ab66b73c5a1bd288fe7b823eb474144ca452909b0c2dcdd0a22e9313cf89adc175f5fea482badb3cfc2719cd2debd9fbecff9c941b8a308c660517d223442006d60e8e2fbf82e0806661fc6ca40fb1bb456b8a2e7703c361940cc6c73c4cb471b6279d172b4561df7c535d7037b835a042450a4a7fdd9eb87f65932f1f9c61daf18ac73d937202f1252bc076e68d2c7cc7fed6948be30c25dc2fe0d8f2581f103675d207c3feab95cfcb551b5f43652091ec910aa132068644befabb5566583613122d09d81b5c058d986dcd0bb2e528baaa23e4db23fafb73da1fa1260260c8e687627499a1d7e2118b4f6dc90597ecd6ae144cc8bca2fb32fd79ff4722c35a8c9de4fc292c159ab547d8749837e6825412b20ac07338e7a58838066e6887ea2a5bf70a204c898ff65d18605466ef49d5d3aa109f23bf41479c2e23cb75bab6e77b0050a1c2b9cbf631b8fdb2e604740cbcb08ff58c300a840984120ab4b1afcf3830021579497660ba5b4167296280b5de7e4131bcb0307dc5d7821e8d48c7bf174539368f8a8b1e4b89f2c545f2ff9188fa6dd34d9c15b080ef2ba304a388021d382569efaa7937698e18dded8d4200e9ca11a7a7957c6f5da4da9058d131b1da4344f866fe95e787c0a923304428ee64ab5054d2775642729ef3c7ede9913cf68973fb8da42781b267a04771c728db8a7e04aeddd6381f4960c166d79581aec3665a6153e30605921d7ab0d425c9d21df78f57029222136d96e6d1b322fa2c6801e509b98deb18a22f734eb4f278b9d2420cfee551055cd8be7ba8c118d8f8c73918f1c3719228065656ffd1bb6b908f29fdfd21103ab009778a276db462295dbf04d0a533f5d31dda336b45dd15c5a1b321ce9bd9fafad25fe601f3e5ca0b5f814df17f059a6ea12a3ec32a9b77c208b61127bae546eef4ff038b7e4adf6448cec376e81f037740c1674e036644436a41631da5a5363a35be0d18f6a1b782081c7dce311340d4fc7c39492e4e39efed807aa20d3298e24568c21f949e556a174e289c1594ebb6e4c16dd6a4a5161592011a76a58e3f2b8653f4ac5477eee40e632508ec86f69a00ba9b0baa469feaf49f8f1d220fbe42f2f40cafb17de2c0c8293df70399d6ad39dbfaacb47aaf7440a7b79178b8e3d37cf73660d2de55bdad130130f3979ea556c5ec305a25d65f19f630f52b20c720fe2eacd10bf0d3d4d561a8f31b85601e58ae838b59d9c5dffadd58e6dadde6a2be612890121606bbdff3b5ea534360a8901a6ab892bd843083efcf9d37dca52e9ca5f5b38383d7e4965546fe8f909c3c40d0358decac17e97e2bffbf9e21f3f22e425e45fdd5641185d7f0f9569d1e8a37cfbb7c0165c8c5ef1d799973b0b4c9d000ecce484a51460782f046717b4aa0796f2721dc535b2f5094c4fa43178931e1437a7a29d521f2b651c660264994776609c42680d6876ba0710c57bdbb49f7f3c9c82a5d71fa00bff200b31164c0fd6fa3900784e59950fb5892917fc73ff479fad56b7f9d012bd2960128153a93fddaa92b2321e6cbd9f0bb06cc274b4fb72399bb963038247dd2b0a1e0394daf119a155fbf6ea44653c936c22e79ab9e730feea6779f813d1204127939c93dba0678ff83e08bab479422c6e1ba1185feb6c69d9301dade3133a770e03c203cbe1511c0b3341c0761cd5da70dbdfbee2ddb8f0a522aad23f63b7a623596cfbb5dec021246fc6579573abf4cf15cf898f474a1f52aa8f5dbc2f3c4795bf4e41be8869b4a37f4e78f5579b47e24ee98a0c1045e25852717a97a5d2ca8b2349fb681630af732ef4b388744da7fc707cc893dd56951f4af65bdd7863621d671c3584e8b7264bae47fde45a3ea98c49218e7d96f0163536fc43c65271aac9d1442831774aca002ffecff58bbd7a14d4a794a40885272cafbf0284e63a64b2d2e9463c1eb196b8025e2992ac124943dc383660ad69d13e27f6e4d87a37633d7f6bf84c7ee0b9abf3495374bcc0e660d239934cd29b6b8568c07a43ba2c13fdb6bf052c739dc89b9938843c441c1c31b1ad63d1e4bde3a3068242129cd9b430dc86d31b2d05377a4af1d8d2c567ce3cdd1398c518b51741a16eedc996a41bef417e98571a9bb4c1c1eb8440ae6e4c0f36dc1f0353b5e9bcf1fe6a44570bc687cd8b929dd2d65d6943b24bba942a27bb9d3e8a78d37ec08df7a082fb32fc1eafa7e8af82af2e59a3e2a2712bc6e6e501ff22378cbefcbae50eb3777b4d1eff3c79d9482973e2e400d69a12ce65fcd6f97ff42fe5bf0cfc7194d3923dc98d3619742de16ab42ad642e9e29594011e1576049cd86cba1de721fbfd6cca511793f9b24ba573b95571b915bbb92b4c56fa9a515c7f2d7689604d0699d4ff9c769007d4fb261bb40cd636dbeadf7a511d6f1f45ad43c3aa14672da64e8aac03738018d29c88818f64722093c8dfe39ee01a13aa3d80e0e6b56ee2ee1e539d6ab296871a5c8ca389eb993407c0a097b79140870c45d0c01c4bb76b8f0c1f7b5f8b290ae4ed5886908ccdce1feb6491cb2603716ac1d21974c26e002cc45414aaeaa8c9eb21bf0c04e50372bece21e713f45a8978e16413d5cade8c53a0bed7d95183f497da31c089224e9ba0b9ff66b8abf3b1b52db7059ad73819b6139df109267a4a1ebc5f867df9c2fdf7acfd8b3434d5b8cab6469277c82f9534f6cf2d9361c4ed1774bd10d9f1fca27fdd15b44d73796c6ecf1bb8c66d2dce384fa765f46bc53fb81f1e62b56147217040e0f140e9fb7aec55313a4e853015bdcd9927c5759bcebff65587a889bfba678a41d2cd61a48f79e641a12be9db500faf1b88ffbad18bfa088d1308ce7406b1ddea172643f59c88792183297fbe5b579a0860afb3bc9043747c91f1ebb6e67448bfeb0620955244b6ae86481327eb3c742289663ae242b8c448a38cad5c8caffca9322d617bc5c3ab63a7a56cd3aca6a0ff7654f27a29fb4084d1d2c96533bd3844eb3e458dd81c91590ecfa6d8136b2e690b7245668f61c9d24fef9039332892498f482147cf0509a2ec78c2256083c7a6a6127ee74625b998262e5fe4dd73bf1653cfa82021045820083562633ab4bd529ab073198d4209cc42b8f397dc722473aec6282bd9f8ccab906cce390c6611932033f47372b293649b500c45337a8e1355f7cce2476a33c7fcf61ebeb02d3a1a02b99c314b6bf4e6db9f41298abf2d7a32212ac2ace4912e03ac602bb77be528a328df839ea8564f73f362765e71a197a886bdcff20b880f24c92d263d70658169996962bc18b338725ece5045c906fa844f0a1bce979bb7b60e9536926e805e72bcdea183e922fbeb7b9381cd9db97144518f20f197a974dc097630e3603402f76332c9c8a637e6ae31262778708803d875a33f3e04ed5d4e524f083590bb3e1dc46022cc501fcc3bee0897a018da445b991427229e6d62bd4e0bf7d948eae9458f198dca01fa070299208f16ef0c0cf21c6de26167a4b360ef9a0790f8833f4e2b9e41aadd7f550b6235aca1e4fdf6314a79059a74631febddc24de0a6ece9135f96b97280ef86e4d89fddbcec2d23f8a2450bd6d6294d8c82ee72ac551b60c59ee3705337c3381323b644780ba023a7cac9046aa7c744f5e339fcd008b2308389979fdee15fe25ec692f64273a6d30c9ac243039f69523d6b041274ba0fc28beec32e22ade11bfdef3bde46d8ed6dc79bc5d3f6c98110ae53e3f4f2c1f78dcf1db5cf5e2a0bee94f606c181c3a91ac9db485151da92005c83193cbd27993b3d7be65717701f468e3ec4dff5883fd0a8e936bf015143e10a507df332dbf7e29fb98aaee1ed21fe0a0121b15797400899067ecab9d4936de6f56e8f444ec4e0fe0f87963bcb3c8a1a347ba5d5c81e2f3ba6e2692b41df7e78a63ee5e98c3cc6b2cf47ec5b2184b0724273c42b2f37381f08c123366dd0904c2eedae2f782574de5ae7b5f7540ed945e68b6420a3afb687dbdd2a31329eaf3a7855040e0efdd41eaafe60f08347c21d3b85bcc666f12c366df372645b1dbcfcdb8ca0077b9c3530cef38f0ca04f4b9a37efd7a01d633d74f468a88149aec25f8e1b48b97ba5a7017584fbf1bbd0290f439e70247f3fdbdf10673d505e5468487233d01718f4f2c9fbadc0ede14470968f7ac815b3ce24daf3d212027e5ce82f421d42b342c839b69c63a7a8c65a0a2f96858a0f407f8b74fa8d8ff97df13ce210bae8730b0091b154210308453c0e987d245cf25d31a407d38e4d8d3e83577f2ab4739ddfdc61fcb4ba77b452e63cfe19c6a2855324e64429df0d680003967c4b66b027abca76dd649baecb19323154d6e2273eca25c612aaa142e2a604aca7b1d72c9416fcf56adb426c08f305457aee73fa69e518ab86b82bf7a56d86da8f0e4dc56d59225ef55807b1e4a40522a944e1527d0b6eeec63a005d3858ba2146c830cb8f1d4aa24f215b4b423d814be4a16cf85e85f3bab46dda59a0317e12284c1006a90b6c0e927e98e100cdd70414dc28af328788abc2a81855adcd2564549960d948d193647d5f4cb9e701a60a7f62ce5253051acc1eb2350f255537c3b86360c83a6219dd72a00f7948f5a51f998b420e353e19f3262a19a66af66da7cef829aac5ba917875d7bb7c7aed6124b3e84c37a1c6f53fde190904a799206fb1478d182566e9f8c85f593dd0482cc86bafe1728acc3bb42134910573ff4da73372b7265543af02f7279bc61b1ca38ad90bb59733067eb048dbc1cb0db4934b281eda9d823e1fd313490d905278a2f6bbc47298bbecea45b96f734208d9aa18ba97d6149cb533c956fd88a4502d9496f102392bc06c4b67e5c7bfe78f66a0c30b1e7353b8945b2e73d3093572d913f5fb51c2cf815c9f944843e62dc325b8cab35d3a555b3a21c9b5adf201787cc5212205757845998548ff21f2e6534f344d24953ace340ed155a4948701dc1cd00e5375cfe0e65eb0465fe34b8e9fc1545d5955c5b97b56ccaa863ae0671bc687ff9c8799dd6db7dc5a80096d288f7512b038171af513978375221571ed83724da53698344f2611f23c1fdfb89c17c24004262e6eaabeba4664ef5ad57a34dd7765f2aaa307f2fa82b3ed17c6a44116d8f861b294fa7192dca49ccfe887ace149024bc311b5abfaa9a7edd6fecc3b2088c4f60df763bcf1fa80bbf76895723f4f2b005bdfef81d7b72aa855246f4b8c3a6f25c8afe26743b1572584ea36f9a66ca9a1eccbc666a8a7a3938771d42596d3af0a544cc44158c7409e8dbe3210c694d74ad86e370d045f16550e0c499ba465c74d1d14c2a131cdb8e5020a9b4cbc9bf4d642124cb00a547478f74d79e8ae531d8f5c339ee48918fb4e2346f2568111d9fe538147fc9f19311a47430f44699fc571e6b59a0400497bda8710a545d7076defe46d5fc819ff13fd4d4b2e2aa321c001ce0bf3c0bade692fbdfad17c9829c7cb7256e8ece415ad8b399a1bc161d8822e42321a7a5b43f1b4f2f4e4775536bb79ca6f4bad1cf21bfed2137240a7de1c2897b3e4f6407d7b28292d1068d079e598a0518fb769e2237de1ddb8e93a3c007ceca7da0472449231e2cf9a160d4ae4c50fdc32738f2db83e76220853a2404a8165bff13f481f49b70c41680be1c87f5d3629b4d03166f9ac509e3091f0cfacccde3ad43d787e21b72755ec6f66c23aec18630eb7d6eb267dff716ce1390da2dac2f9d995d0d8ac755432fd18630b1f5ceb19b3c3d95693fe52e075906402f1e424b704bab1f3d78b39241f6381f06b1d2810d2958b45da57fb62561ec5748993304574c72752257298bd97042786e799f1487960ba2e0c78dea863660aacf1c4d7fbbcebb27e08fa8645d5cc5ece1feb617d1c317285f051fb5993ba277b5dd6bddff6fc63d64881993d7021e3ce3327da51259be5172764451856f342d7c7bc1fff4aa3993a5ddd63591ce5b8881b3da6c4e3b57964d092d  </script>  <div class="hbe hbe-content">    <form id="hbeForm" class="hbe hbe-form" onsubmit="return false">      <div class="hbe hbe-input hbe-input-xray">      <input class="hbe hbe-input-field hbe-input-field-xray" type="password" id="hbePass">      <label class="hbe hbe-input-label hbe-input-label-xray" for="hbePass">        <span class="hbe hbe-input-label-content hbe-input-label-content-xray">您好, 这里需要密码。</span>      </label>      <svg class="hbe hbe-graphic hbe-graphic-xray" width="300%" height="100%" viewBox="0 0 1200 60" preserveAspectRatio="none">        <path d="M0,56.5c0,0,298.666,0,399.333,0C448.336,56.5,513.994,46,597,46c77.327,0,135,10.5,200.999,10.5c95.996,0,402.001,0,402.001,0"></path>        <path d="M0,2.5c0,0,298.666,0,399.333,0C448.336,2.5,513.994,13,597,13c77.327,0,135-10.5,200.999-10.5c95.996,0,402.001,0,402.001,0"></path>      </svg>    </div>      <button class="hbe hbe-button" type="submit">Decrypt</button>      <div class="hbe hbe-error" role="alert" aria-live="polite"></div>    </form>  </div></div><script data-pjax src="/lib/hbe.9e70f1e1d2.js"></script><link href="/css/hbe.style.css" rel="stylesheet" type="text/css">]]>
      </content:encoded>
    </item>
    <item>
      <title>文章效果与字体编码测试</title>
      <link>https://www.lynx3.me/article/a36a68fc/</link>
      <description>包括 Markdown、数学以及标签外挂。</description>
      <author>LynxCatTheThird</author>
      <category domain="https://www.lynx3.me/categories/%E7%A7%91%E5%AD%A6%E4%B8%8E%E6%8A%80%E6%9C%AF/">科学与技术</category>
      <category domain="https://www.lynx3.me/categories/%E7%A7%91%E5%AD%A6%E4%B8%8E%E6%8A%80%E6%9C%AF/%E8%AE%A1%E7%AE%97%E6%9C%BA/">计算机</category>
      <category domain="https://www.lynx3.me/categories/%E7%A7%91%E5%AD%A6%E4%B8%8E%E6%8A%80%E6%9C%AF/%E8%AE%A1%E7%AE%97%E6%9C%BA/%E5%89%8D%E7%AB%AF/">前端</category>
      <category domain="https://www.lynx3.me/tags/%E5%89%8D%E7%AB%AF/">前端</category>
      <category domain="https://www.lynx3.me/tags/A1/">A1</category>
      <pubDate>Fri, 02 Dec 2022 00:18:18 GMT</pubDate>
      <content:encoded>
        <![CDATA[<h1 id="markdown-%E5%9F%BA%E6%9C%AC%E8%AF%AD%E6%B3%95" tabindex="-1">Markdown 基本语法</h1><h1 id="%E4%B8%80%E7%BA%A7%E6%A0%87%E9%A2%98" tabindex="-1">一级标题</h1><h2 id="%E4%BA%8C%E7%BA%A7%E6%A0%87%E9%A2%98" tabindex="-1">二级标题</h2><h3 id="%E4%B8%89%E7%BA%A7%E6%A0%87%E9%A2%98" tabindex="-1">三级标题</h3><h4 id="%E5%9B%9B%E7%BA%A7%E6%A0%87%E9%A2%98" tabindex="-1">四级标题</h4><h5 id="%E4%BA%94%E7%BA%A7%E6%A0%87%E9%A2%98" tabindex="-1">五级标题</h5><h6 id="%E5%85%AD%E7%BA%A7%E6%A0%87%E9%A2%98" tabindex="-1">六级标题</h6><p><strong>粗体</strong> <em>斜体</em> <strong><em>粗斜体</em></strong> 正常 <s>删除线</s></p><blockquote><p>单行块引用</p></blockquote><blockquote><p>多个段落的块引用</p><p>多个段落的块引用</p></blockquote><blockquote><p>嵌套块引用</p><blockquote><p>嵌套块引用</p></blockquote></blockquote><blockquote><p>带有其它元素的块引用</p><p><em>带有其它元素的块引用</em></p><p><strong>带有其它元素的块引用</strong></p><p><a href=".">带有其它元素的块引用</a></p></blockquote><ol><li>有序列表</li><li>有序列表</li><li>有序列表<ol><li>有序列表</li><li>有序列表</li></ol></li><li>有序列表</li></ol><ul><li>无序列表</li><li>无序列表</li><li>无序列表<ul><li>无序列表</li><li>无序列表</li></ul></li><li>无序列表</li></ul><p><code>单行代码块 with Both Chines and English Text</code></p><p>分割线</p><hr><p><a href="https://www.lynx3.top/">链接</a></p><p><a href="https://www.lynx3.top/" title="这是标题">链接（带有标题）</a></p><p><a href="https://www.lynx3.top/">https://www.lynx3.top/</a></p><p><a href="mailto:email@example.com">email@example.com</a></p><p><strong><a href="https://www.lynx3.top/">带格式化的链接</a></strong></p><p><img src="https://s2.hdslb.com/bfs/album/335657374a640f1748c290003b8851caa7db114d.png@1e_1c.webp" alt="图片" title="哔哩哔哩图床"></p><table>    <tbody><tr>        <td>内容类 HTML 嵌入</td>    </tr></tbody></table><h1 id="markdown-%E6%89%A9%E5%B1%95%E8%AF%AD%E6%B3%95" tabindex="-1">Markdown 扩展语法</h1><h2 id="%E8%A1%A8%E6%A0%BC" tabindex="-1">表格</h2><table><thead><tr><th style="text-align:left">左对齐</th><th style="text-align:center">居中对齐</th><th style="text-align:right">右对齐</th></tr></thead><tbody><tr><td style="text-align:left">/</td><td style="text-align:center">叫做</td><td style="text-align:right">斜线</td></tr><tr><td style="text-align:left">|</td><td style="text-align:center">叫做</td><td style="text-align:right">管道符</td></tr></tbody></table><h2 id="%E4%BB%BB%E5%8A%A1%E5%88%97%E8%A1%A8" tabindex="-1">任务列表</h2><ul class="task-list-container"><li class="task-list-item"><input type="checkbox" class="task-list-item-checkbox" id="task-item-0" checked="checked" disabled="disabled"><label class="task-list-item-label" for="task-item-0"> 完善 Markdown 基础测试</label></li><li class="task-list-item"><input type="checkbox" class="task-list-item-checkbox" id="task-item-1" checked="checked" disabled="disabled"><label class="task-list-item-label" for="task-item-1"> 引入代码高亮测试</label></li><li class="task-list-item"><input type="checkbox" class="task-list-item-checkbox" id="task-item-2" disabled="disabled"><label class="task-list-item-label" for="task-item-2"> 修复 KaTeX 溢出问题</label></li><li class="task-list-item"><input type="checkbox" class="task-list-item-checkbox" id="task-item-3" disabled="disabled"><label class="task-list-item-label" for="task-item-3"> 调整主题 CSS 样式</label></li></ul><h2 id="%E6%8A%98%E5%8F%A0%E5%9D%97" tabindex="-1">折叠块</h2><details><summary>点击展开查看隐藏的惊喜</summary><p>这是一个原生的 HTML 折叠块，常用于隐藏长代码或剧透内容。结合 <strong>Markdown</strong> 语法，内部依然可以正常渲染：</p><ul><li>列表项 1</li><li>列表项 2</li></ul></details><h2 id="%E4%B8%8B%E5%88%92%E7%BA%BF%E4%B8%8E%E5%90%8D%E8%AF%8D%E8%A7%A3%E9%87%8A" tabindex="-1">下划线与名词解释</h2><p>这是 <u>带有下划线的文本</u>，这是 <ins>插入的文本</ins>。</p><dl><dt>Hexo</dt><dd>快速、简洁且高效的博客框架</dd><dt>Butterfly</dt><dd>一个基于 Hexo 的高颜值且功能强大的主题</dd></dl><h2 id="%E4%BB%A3%E7%A0%81%E6%A1%86" tabindex="-1">代码框</h2><h3 id="%E7%BC%96%E8%AF%91%E8%AF%AD%E8%A8%80" tabindex="-1">编译语言</h3><h4 id="c%2B%2B" tabindex="-1">C++</h4><p>来源：<a href="https://raw.githubusercontent.com/argvchs/fastio/master/fastio.hpp">https://raw.githubusercontent.com/argvchs/fastio/master/fastio.hpp</a></p><figure class="highlight c++"><table><tbody><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br><span class="line">48</span><br><span class="line">49</span><br><span class="line">50</span><br><span class="line">51</span><br><span class="line">52</span><br><span class="line">53</span><br><span class="line">54</span><br><span class="line">55</span><br><span class="line">56</span><br><span class="line">57</span><br><span class="line">58</span><br><span class="line">59</span><br><span class="line">60</span><br><span class="line">61</span><br><span class="line">62</span><br><span class="line">63</span><br><span class="line">64</span><br><span class="line">65</span><br><span class="line">66</span><br><span class="line">67</span><br><span class="line">68</span><br><span class="line">69</span><br><span class="line">70</span><br><span class="line">71</span><br><span class="line">72</span><br><span class="line">73</span><br><span class="line">74</span><br><span class="line">75</span><br><span class="line">76</span><br><span class="line">77</span><br><span class="line">78</span><br><span class="line">79</span><br><span class="line">80</span><br><span class="line">81</span><br><span class="line">82</span><br><span class="line">83</span><br><span class="line">84</span><br><span class="line">85</span><br><span class="line">86</span><br><span class="line">87</span><br><span class="line">88</span><br><span class="line">89</span><br><span class="line">90</span><br><span class="line">91</span><br><span class="line">92</span><br><span class="line">93</span><br><span class="line">94</span><br><span class="line">95</span><br><span class="line">96</span><br><span class="line">97</span><br><span class="line">98</span><br><span class="line">99</span><br><span class="line">100</span><br><span class="line">101</span><br><span class="line">102</span><br><span class="line">103</span><br><span class="line">104</span><br><span class="line">105</span><br><span class="line">106</span><br><span class="line">107</span><br><span class="line">108</span><br><span class="line">109</span><br><span class="line">110</span><br><span class="line">111</span><br><span class="line">112</span><br><span class="line">113</span><br><span class="line">114</span><br><span class="line">115</span><br><span class="line">116</span><br><span class="line">117</span><br><span class="line">118</span><br><span class="line">119</span><br><span class="line">120</span><br><span class="line">121</span><br><span class="line">122</span><br><span class="line">123</span><br><span class="line">124</span><br><span class="line">125</span><br><span class="line">126</span><br><span class="line">127</span><br><span class="line">128</span><br><span class="line">129</span><br><span class="line">130</span><br><span class="line">131</span><br><span class="line">132</span><br><span class="line">133</span><br><span class="line">134</span><br><span class="line">135</span><br><span class="line">136</span><br><span class="line">137</span><br><span class="line">138</span><br><span class="line">139</span><br><span class="line">140</span><br><span class="line">141</span><br><span class="line">142</span><br><span class="line">143</span><br><span class="line">144</span><br><span class="line">145</span><br><span class="line">146</span><br><span class="line">147</span><br><span class="line">148</span><br><span class="line">149</span><br><span class="line">150</span><br><span class="line">151</span><br><span class="line">152</span><br><span class="line">153</span><br><span class="line">154</span><br><span class="line">155</span><br><span class="line">156</span><br><span class="line">157</span><br><span class="line">158</span><br><span class="line">159</span><br><span class="line">160</span><br><span class="line">161</span><br><span class="line">162</span><br><span class="line">163</span><br><span class="line">164</span><br><span class="line">165</span><br><span class="line">166</span><br><span class="line">167</span><br><span class="line">168</span><br><span class="line">169</span><br><span class="line">170</span><br><span class="line">171</span><br><span class="line">172</span><br><span class="line">173</span><br><span class="line">174</span><br><span class="line">175</span><br><span class="line">176</span><br><span class="line">177</span><br><span class="line">178</span><br><span class="line">179</span><br><span class="line">180</span><br><span class="line">181</span><br><span class="line">182</span><br><span class="line">183</span><br><span class="line">184</span><br><span class="line">185</span><br><span class="line">186</span><br><span class="line">187</span><br><span class="line">188</span><br><span class="line">189</span><br><span class="line">190</span><br><span class="line">191</span><br><span class="line">192</span><br><span class="line">193</span><br><span class="line">194</span><br><span class="line">195</span><br><span class="line">196</span><br><span class="line">197</span><br><span class="line">198</span><br><span class="line">199</span><br><span class="line">200</span><br><span class="line">201</span><br><span class="line">202</span><br><span class="line">203</span><br><span class="line">204</span><br><span class="line">205</span><br><span class="line">206</span><br><span class="line">207</span><br><span class="line">208</span><br><span class="line">209</span><br><span class="line">210</span><br><span class="line">211</span><br><span class="line">212</span><br><span class="line">213</span><br><span class="line">214</span><br><span class="line">215</span><br><span class="line">216</span><br><span class="line">217</span><br><span class="line">218</span><br><span class="line">219</span><br><span class="line">220</span><br><span class="line">221</span><br><span class="line">222</span><br><span class="line">223</span><br><span class="line">224</span><br><span class="line">225</span><br><span class="line">226</span><br><span class="line">227</span><br><span class="line">228</span><br><span class="line">229</span><br><span class="line">230</span><br><span class="line">231</span><br><span class="line">232</span><br><span class="line">233</span><br><span class="line">234</span><br><span class="line">235</span><br><span class="line">236</span><br><span class="line">237</span><br><span class="line">238</span><br><span class="line">239</span><br><span class="line">240</span><br><span class="line">241</span><br><span class="line">242</span><br><span class="line">243</span><br><span class="line">244</span><br><span class="line">245</span><br><span class="line">246</span><br><span class="line">247</span><br><span class="line">248</span><br><span class="line">249</span><br><span class="line">250</span><br><span class="line">251</span><br><span class="line">252</span><br><span class="line">253</span><br><span class="line">254</span><br><span class="line">255</span><br><span class="line">256</span><br><span class="line">257</span><br><span class="line">258</span><br><span class="line">259</span><br><span class="line">260</span><br><span class="line">261</span><br><span class="line">262</span><br><span class="line">263</span><br><span class="line">264</span><br><span class="line">265</span><br><span class="line">266</span><br><span class="line">267</span><br><span class="line">268</span><br><span class="line">269</span><br><span class="line">270</span><br><span class="line">271</span><br><span class="line">272</span><br><span class="line">273</span><br><span class="line">274</span><br><span class="line">275</span><br><span class="line">276</span><br><span class="line">277</span><br><span class="line">278</span><br><span class="line">279</span><br><span class="line">280</span><br><span class="line">281</span><br><span class="line">282</span><br><span class="line">283</span><br><span class="line">284</span><br><span class="line">285</span><br><span class="line">286</span><br><span class="line">287</span><br><span class="line">288</span><br><span class="line">289</span><br><span class="line">290</span><br><span class="line">291</span><br><span class="line">292</span><br><span class="line">293</span><br><span class="line">294</span><br><span class="line">295</span><br><span class="line">296</span><br><span class="line">297</span><br><span class="line">298</span><br><span class="line">299</span><br><span class="line">300</span><br><span class="line">301</span><br><span class="line">302</span><br><span class="line">303</span><br><span class="line">304</span><br><span class="line">305</span><br><span class="line">306</span><br><span class="line">307</span><br><span class="line">308</span><br><span class="line">309</span><br><span class="line">310</span><br><span class="line">311</span><br><span class="line">312</span><br><span class="line">313</span><br><span class="line">314</span><br><span class="line">315</span><br><span class="line">316</span><br><span class="line">317</span><br><span class="line">318</span><br><span class="line">319</span><br><span class="line">320</span><br><span class="line">321</span><br><span class="line">322</span><br><span class="line">323</span><br><span class="line">324</span><br><span class="line">325</span><br><span class="line">326</span><br><span class="line">327</span><br><span class="line">328</span><br><span class="line">329</span><br><span class="line">330</span><br><span class="line">331</span><br><span class="line">332</span><br><span class="line">333</span><br><span class="line">334</span><br><span class="line">335</span><br><span class="line">336</span><br><span class="line">337</span><br><span class="line">338</span><br><span class="line">339</span><br><span class="line">340</span><br><span class="line">341</span><br><span class="line">342</span><br><span class="line">343</span><br><span class="line">344</span><br><span class="line">345</span><br><span class="line">346</span><br><span class="line">347</span><br><span class="line">348</span><br><span class="line">349</span><br><span class="line">350</span><br><span class="line">351</span><br><span class="line">352</span><br><span class="line">353</span><br><span class="line">354</span><br><span class="line">355</span><br><span class="line">356</span><br><span class="line">357</span><br><span class="line">358</span><br><span class="line">359</span><br><span class="line">360</span><br><span class="line">361</span><br><span class="line">362</span><br><span class="line">363</span><br><span class="line">364</span><br><span class="line">365</span><br><span class="line">366</span><br><span class="line">367</span><br><span class="line">368</span><br><span class="line">369</span><br><span class="line">370</span><br><span class="line">371</span><br><span class="line">372</span><br><span class="line">373</span><br><span class="line">374</span><br><span class="line">375</span><br><span class="line">376</span><br><span class="line">377</span><br><span class="line">378</span><br><span class="line">379</span><br><span class="line">380</span><br><span class="line">381</span><br><span class="line">382</span><br><span class="line">383</span><br><span class="line">384</span><br><span class="line">385</span><br><span class="line">386</span><br><span class="line">387</span><br><span class="line">388</span><br><span class="line">389</span><br><span class="line">390</span><br><span class="line">391</span><br><span class="line">392</span><br><span class="line">393</span><br><span class="line">394</span><br><span class="line">395</span><br><span class="line">396</span><br><span class="line">397</span><br><span class="line">398</span><br><span class="line">399</span><br><span class="line">400</span><br><span class="line">401</span><br><span class="line">402</span><br><span class="line">403</span><br><span class="line">404</span><br><span class="line">405</span><br><span class="line">406</span><br><span class="line">407</span><br><span class="line">408</span><br><span class="line">409</span><br><span class="line">410</span><br><span class="line">411</span><br><span class="line">412</span><br><span class="line">413</span><br><span class="line">414</span><br><span class="line">415</span><br><span class="line">416</span><br><span class="line">417</span><br><span class="line">418</span><br><span class="line">419</span><br><span class="line">420</span><br><span class="line">421</span><br><span class="line">422</span><br><span class="line">423</span><br><span class="line">424</span><br><span class="line">425</span><br><span class="line">426</span><br><span class="line">427</span><br><span class="line">428</span><br><span class="line">429</span><br><span class="line">430</span><br><span class="line">431</span><br><span class="line">432</span><br><span class="line">433</span><br><span class="line">434</span><br><span class="line">435</span><br><span class="line">436</span><br><span class="line">437</span><br><span class="line">438</span><br><span class="line">439</span><br><span class="line">440</span><br><span class="line">441</span><br><span class="line">442</span><br><span class="line">443</span><br><span class="line">444</span><br><span class="line">445</span><br><span class="line">446</span><br><span class="line">447</span><br><span class="line">448</span><br><span class="line">449</span><br><span class="line">450</span><br><span class="line">451</span><br><span class="line">452</span><br><span class="line">453</span><br><span class="line">454</span><br><span class="line">455</span><br><span class="line">456</span><br><span class="line">457</span><br><span class="line">458</span><br><span class="line">459</span><br><span class="line">460</span><br><span class="line">461</span><br><span class="line">462</span><br><span class="line">463</span><br><span class="line">464</span><br><span class="line">465</span><br><span class="line">466</span><br><span class="line">467</span><br><span class="line">468</span><br><span class="line">469</span><br><span class="line">470</span><br><span class="line">471</span><br><span class="line">472</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta">#<span class="keyword">include</span> <span class="string">&lt;algorithm&gt;</span></span></span><br><span class="line"><span class="meta">#<span class="keyword">include</span> <span class="string">&lt;cctype&gt;</span></span></span><br><span class="line"><span class="meta">#<span class="keyword">include</span> <span class="string">&lt;cmath&gt;</span></span></span><br><span class="line"><span class="meta">#<span class="keyword">include</span> <span class="string">&lt;cstddef&gt;</span></span></span><br><span class="line"><span class="meta">#<span class="keyword">include</span> <span class="string">&lt;cstdio&gt;</span></span></span><br><span class="line"><span class="meta">#<span class="keyword">include</span> <span class="string">&lt;cstring&gt;</span></span></span><br><span class="line"><span class="meta">#<span class="keyword">include</span> <span class="string">&lt;string&gt;</span></span></span><br><span class="line"><span class="meta">#<span class="keyword">include</span> <span class="string">&lt;string_view&gt;</span></span></span><br><span class="line"><span class="meta">#<span class="keyword">include</span> <span class="string">&lt;type_traits&gt;</span></span></span><br><span class="line"><span class="keyword">namespace</span> fastio {</span><br><span class="line"><span class="keyword">namespace</span> symbols {</span><br><span class="line"><span class="keyword">enum</span> <span class="title class_">symbol</span> {</span><br><span class="line">    endl,</span><br><span class="line">    ends,</span><br><span class="line">    flush,</span><br><span class="line">    bin,</span><br><span class="line">    oct,</span><br><span class="line">    dec,</span><br><span class="line">    hex,</span><br><span class="line">    left,</span><br><span class="line">    right,</span><br><span class="line">    boolalpha,</span><br><span class="line">    noboolalpha,</span><br><span class="line">    showbase,</span><br><span class="line">    noshowbase,</span><br><span class="line">    showpoint,</span><br><span class="line">    noshowpoint,</span><br><span class="line">    showpos,</span><br><span class="line">    noshowpos,</span><br><span class="line">    ws,</span><br><span class="line">    uppercase,</span><br><span class="line">    lowercase,</span><br><span class="line">    fixed,</span><br><span class="line">    defaultfloat,</span><br><span class="line">    reset</span><br><span class="line">};</span><br><span class="line"><span class="keyword">struct</span> <span class="title class_">setbase</span> {</span><br><span class="line">    <span class="type">int</span> base;</span><br><span class="line">    <span class="built_in">setbase</span>(<span class="type">int</span> n) : <span class="built_in">base</span>(n) {}</span><br><span class="line">};</span><br><span class="line"><span class="keyword">struct</span> <span class="title class_">setfill</span> {</span><br><span class="line">    <span class="type">char</span> fill;</span><br><span class="line">    <span class="built_in">setfill</span>(<span class="type">char</span> c) : <span class="built_in">fill</span>(c) {}</span><br><span class="line">};</span><br><span class="line"><span class="keyword">struct</span> <span class="title class_">setprecision</span> {</span><br><span class="line">    <span class="type">int</span> precision;</span><br><span class="line">    <span class="built_in">setprecision</span>(<span class="type">int</span> n) : <span class="built_in">precision</span>(n) {}</span><br><span class="line">};</span><br><span class="line"><span class="keyword">struct</span> <span class="title class_">setw</span> {</span><br><span class="line">    <span class="type">int</span> width;</span><br><span class="line">    <span class="built_in">setw</span>(<span class="type">int</span> n) : <span class="built_in">width</span>(n) {}</span><br><span class="line">};</span><br><span class="line">} <span class="comment">// namespace symbols</span></span><br><span class="line"><span class="keyword">namespace</span> interface {</span><br><span class="line"><span class="keyword">using</span> i64 = <span class="type">long</span> <span class="type">long</span>;</span><br><span class="line"><span class="keyword">using</span> u64 = <span class="type">unsigned</span> <span class="type">long</span> <span class="type">long</span>;</span><br><span class="line"><span class="keyword">using</span> i128 = __int128;</span><br><span class="line"><span class="keyword">using</span> u128 = <span class="type">unsigned</span> __int128;</span><br><span class="line"><span class="keyword">template</span> &lt;<span class="keyword">typename</span> T&gt;</span><br><span class="line"><span class="keyword">constexpr</span> <span class="type">bool</span> is_signed_v =</span><br><span class="line">    (std::is_integral_v&lt;T&gt; &amp;&amp; std::is_signed_v&lt;T&gt;) || std::is_same_v&lt;T, i128&gt;;</span><br><span class="line"><span class="keyword">template</span> &lt;<span class="keyword">typename</span> T&gt;</span><br><span class="line"><span class="keyword">constexpr</span> <span class="type">bool</span> is_unsigned_v =</span><br><span class="line">    (std::is_integral_v&lt;T&gt; &amp;&amp; std::is_unsigned_v&lt;T&gt;) || std::is_same_v&lt;T, u128&gt;;</span><br><span class="line"><span class="keyword">template</span> &lt;<span class="keyword">typename</span> T&gt; <span class="keyword">constexpr</span> <span class="type">bool</span> is_integral_v = is_signed_v&lt;T&gt; || is_unsigned_v&lt;T&gt;;</span><br><span class="line"><span class="keyword">template</span> &lt;<span class="keyword">typename</span> T&gt; <span class="keyword">constexpr</span> <span class="type">bool</span> is_floating_v = std::is_floating_point_v&lt;T&gt;;</span><br><span class="line"><span class="keyword">template</span> &lt;<span class="keyword">typename</span> T&gt; <span class="keyword">struct</span> <span class="title class_">make_unsigned</span> : <span class="keyword">public</span> std::make_unsigned&lt;T&gt; {};</span><br><span class="line"><span class="keyword">template</span> &lt;&gt; <span class="keyword">struct</span> <span class="title class_">make_unsigned</span>&lt;i128&gt; : <span class="keyword">public</span> std::type_identity&lt;u128&gt; {};</span><br><span class="line"><span class="keyword">template</span> &lt;&gt; <span class="keyword">struct</span> <span class="title class_">make_unsigned</span>&lt;u128&gt; : <span class="keyword">public</span> std::type_identity&lt;u128&gt; {};</span><br><span class="line"><span class="keyword">template</span> &lt;<span class="keyword">typename</span> T&gt; <span class="keyword">using</span> <span class="type">make_unsigned_t</span> = <span class="keyword">typename</span> make_unsigned&lt;T&gt;::type;</span><br><span class="line"><span class="keyword">struct</span> <span class="title class_">noncopyable</span> {</span><br><span class="line">    <span class="built_in">noncopyable</span>() = <span class="keyword">default</span>;</span><br><span class="line">    <span class="keyword">virtual</span> ~<span class="built_in">noncopyable</span>() = <span class="keyword">default</span>;</span><br><span class="line">    <span class="built_in">noncopyable</span>(<span class="type">const</span> noncopyable &amp;) = <span class="keyword">delete</span>;</span><br><span class="line">    noncopyable &amp;<span class="keyword">operator</span>=(<span class="type">const</span> noncopyable &amp;) = <span class="keyword">delete</span>;</span><br><span class="line">};</span><br><span class="line"><span class="keyword">class</span> <span class="title class_">istream</span> : <span class="keyword">public</span> noncopyable {</span><br><span class="line">  <span class="keyword">private</span>:</span><br><span class="line">    <span class="type">int</span> base = <span class="number">10</span>;</span><br><span class="line">    <span class="type">bool</span> unget = <span class="literal">false</span>, eof = <span class="literal">false</span>, fail = <span class="literal">false</span>;</span><br><span class="line">    <span class="type">char</span> chr = <span class="string">'\0'</span>;</span><br><span class="line">    <span class="function"><span class="type">static</span> <span class="type">bool</span> <span class="title">isssign</span><span class="params">(<span class="type">char</span> c)</span> </span>{ <span class="keyword">return</span> <span class="built_in">isspace</span>(c) || c == <span class="string">'+'</span> || c == <span class="string">'-'</span>; }</span><br><span class="line">    <span class="function"><span class="type">int</span> <span class="title">todigit</span><span class="params">(<span class="type">char</span> c)</span> </span>{</span><br><span class="line">        <span class="keyword">if</span> (::<span class="built_in">isdigit</span>(c)) <span class="keyword">return</span> c - <span class="string">'0'</span>;</span><br><span class="line">        <span class="keyword">if</span> (<span class="built_in">isupper</span>(c)) <span class="keyword">return</span> c - <span class="string">'A'</span> + <span class="number">10</span>;</span><br><span class="line">        <span class="keyword">if</span> (<span class="built_in">islower</span>(c)) <span class="keyword">return</span> c - <span class="string">'a'</span> + <span class="number">10</span>;</span><br><span class="line">        <span class="keyword">return</span> base;</span><br><span class="line">    }</span><br><span class="line">    <span class="function"><span class="type">bool</span> <span class="title">isdigit</span><span class="params">(<span class="type">char</span> c)</span> </span>{ <span class="keyword">return</span> <span class="built_in">todigit</span>(c) &lt; base; }</span><br><span class="line">    <span class="function"><span class="keyword">virtual</span> <span class="type">char</span> <span class="title">vget</span><span class="params">()</span> </span>= <span class="number">0</span>;</span><br><span class="line">  <span class="keyword">public</span>:</span><br><span class="line">    <span class="function"><span class="type">char</span> <span class="title">get</span><span class="params">()</span> </span>{</span><br><span class="line">        <span class="keyword">if</span> (!unget)</span><br><span class="line">            <span class="keyword">if</span> ((chr = <span class="built_in">vget</span>()) == EOF) eof = <span class="literal">true</span>;</span><br><span class="line">        unget = <span class="literal">false</span>;</span><br><span class="line">        <span class="keyword">return</span> chr;</span><br><span class="line">    }</span><br><span class="line">    <span class="function">istream &amp;<span class="title">get</span><span class="params">(<span class="type">char</span> &amp;c)</span> </span>{</span><br><span class="line">        c = <span class="built_in">get</span>();</span><br><span class="line">        <span class="keyword">return</span> *<span class="keyword">this</span>;</span><br><span class="line">    }</span><br><span class="line">    <span class="function"><span class="keyword">explicit</span> <span class="keyword">operator</span> <span class="title">bool</span><span class="params">()</span> </span>{ <span class="keyword">return</span> !fail; }</span><br><span class="line">    <span class="type">bool</span> <span class="keyword">operator</span>!() { <span class="keyword">return</span> fail; }</span><br><span class="line">    <span class="keyword">template</span> &lt;<span class="keyword">typename</span> T, std::<span class="type">enable_if_t</span>&lt;is_integral_v&lt;T&gt;, <span class="type">int</span>&gt; = <span class="number">0</span>&gt;</span><br><span class="line">    istream &amp;<span class="keyword">operator</span>&gt;&gt;(T &amp;n) {</span><br><span class="line">        n = <span class="number">0</span>;</span><br><span class="line">        <span class="type">bool</span> f = <span class="literal">false</span>;</span><br><span class="line">        <span class="keyword">while</span> (<span class="built_in">isssign</span>(<span class="built_in">get</span>()) &amp;&amp; !eof)</span><br><span class="line">            <span class="keyword">if</span> (chr == <span class="string">'-'</span> &amp;&amp; is_integral_v&lt;T&gt;) f = !f;</span><br><span class="line">        <span class="keyword">if</span> (eof) <span class="keyword">return</span> fail = <span class="literal">true</span>, *<span class="keyword">this</span>;</span><br><span class="line">        unget = <span class="literal">true</span>;</span><br><span class="line">        <span class="keyword">while</span> (<span class="built_in">isdigit</span>(<span class="built_in">get</span>())) n = n * base + <span class="built_in">todigit</span>(chr);</span><br><span class="line">        <span class="keyword">if</span> (f) n = -n;</span><br><span class="line">        unget = <span class="literal">true</span>;</span><br><span class="line">        <span class="keyword">return</span> *<span class="keyword">this</span>;</span><br><span class="line">    }</span><br><span class="line">    <span class="keyword">template</span> &lt;<span class="keyword">typename</span> T, std::<span class="type">enable_if_t</span>&lt;is_floating_v&lt;T&gt;, <span class="type">int</span>&gt; = <span class="number">0</span>&gt;</span><br><span class="line">    istream &amp;<span class="keyword">operator</span>&gt;&gt;(T &amp;n) {</span><br><span class="line">        n = <span class="number">0</span>;</span><br><span class="line">        <span class="type">bool</span> f = <span class="literal">false</span>;</span><br><span class="line">        <span class="keyword">while</span> (<span class="built_in">isssign</span>(<span class="built_in">get</span>()) &amp;&amp; !eof)</span><br><span class="line">            <span class="keyword">if</span> (chr == <span class="string">'-'</span>) f = !f;</span><br><span class="line">        <span class="keyword">if</span> (eof) <span class="keyword">return</span> fail = <span class="literal">true</span>, *<span class="keyword">this</span>;</span><br><span class="line">        unget = <span class="literal">true</span>;</span><br><span class="line">        <span class="keyword">while</span> (<span class="built_in">isdigit</span>(<span class="built_in">get</span>())) n = n * base + <span class="built_in">todigit</span>(chr);</span><br><span class="line">        <span class="keyword">if</span> (chr == <span class="string">'.'</span>) {</span><br><span class="line">            i64 pow = <span class="number">1</span>;</span><br><span class="line">            <span class="keyword">while</span> (<span class="built_in">isdigit</span>(<span class="built_in">get</span>())) n += <span class="built_in">todigit</span>(chr) / (T)(pow *= base);</span><br><span class="line">        }</span><br><span class="line">        <span class="keyword">if</span> (f) n = -n;</span><br><span class="line">        unget = <span class="literal">true</span>;</span><br><span class="line">        <span class="keyword">return</span> *<span class="keyword">this</span>;</span><br><span class="line">    }</span><br><span class="line">    istream &amp;<span class="keyword">operator</span>&gt;&gt;(<span class="type">char</span> &amp;c) {</span><br><span class="line">        c = <span class="string">'\0'</span>;</span><br><span class="line">        <span class="keyword">while</span> (<span class="built_in">isspace</span>(<span class="built_in">get</span>()) &amp;&amp; !eof);</span><br><span class="line">        <span class="keyword">if</span> (eof) <span class="keyword">return</span> fail = <span class="literal">true</span>, *<span class="keyword">this</span>;</span><br><span class="line">        c = chr;</span><br><span class="line">        <span class="keyword">return</span> *<span class="keyword">this</span>;</span><br><span class="line">    }</span><br><span class="line">    istream &amp;<span class="keyword">operator</span>&gt;&gt;(<span class="type">bool</span> &amp;f) {</span><br><span class="line">        i64 n;</span><br><span class="line">        *<span class="keyword">this</span> &gt;&gt; n;</span><br><span class="line">        f = (<span class="type">bool</span>)n;</span><br><span class="line">        <span class="keyword">return</span> *<span class="keyword">this</span>;</span><br><span class="line">    }</span><br><span class="line">    istream &amp;<span class="keyword">operator</span>&gt;&gt;(<span class="type">char</span> *s) {</span><br><span class="line">        s[<span class="number">0</span>] = <span class="string">'\0'</span>;</span><br><span class="line">        <span class="type">int</span> len = <span class="number">0</span>;</span><br><span class="line">        <span class="keyword">while</span> (<span class="built_in">isspace</span>(<span class="built_in">get</span>()) &amp;&amp; !eof);</span><br><span class="line">        <span class="keyword">if</span> (eof) <span class="keyword">return</span> fail = <span class="literal">true</span>, *<span class="keyword">this</span>;</span><br><span class="line">        unget = <span class="literal">true</span>;</span><br><span class="line">        <span class="keyword">while</span> (<span class="built_in">isgraph</span>(<span class="built_in">get</span>())) s[len++] = chr;</span><br><span class="line">        unget = <span class="literal">true</span>, s[len] = <span class="string">'\0'</span>;</span><br><span class="line">        <span class="keyword">return</span> *<span class="keyword">this</span>;</span><br><span class="line">    }</span><br><span class="line">    istream &amp;<span class="keyword">operator</span>&gt;&gt;(std::string &amp;s) {</span><br><span class="line">        s.<span class="built_in">clear</span>();</span><br><span class="line">        <span class="keyword">while</span> (<span class="built_in">isspace</span>(<span class="built_in">get</span>()) &amp;&amp; !eof);</span><br><span class="line">        <span class="keyword">if</span> (eof) <span class="keyword">return</span> fail = <span class="literal">true</span>, *<span class="keyword">this</span>;</span><br><span class="line">        unget = <span class="literal">true</span>;</span><br><span class="line">        <span class="keyword">while</span> (<span class="built_in">isgraph</span>(<span class="built_in">get</span>())) s.<span class="built_in">push_back</span>(chr);</span><br><span class="line">        unget = <span class="literal">true</span>;</span><br><span class="line">        <span class="keyword">return</span> *<span class="keyword">this</span>;</span><br><span class="line">    }</span><br><span class="line">    istream &amp;<span class="keyword">operator</span>&gt;&gt;(symbols::symbol a) {</span><br><span class="line">        <span class="keyword">switch</span> (a) {</span><br><span class="line">        <span class="keyword">case</span> symbols::bin: base = <span class="number">2</span>; <span class="keyword">break</span>;</span><br><span class="line">        <span class="keyword">case</span> symbols::oct: base = <span class="number">8</span>; <span class="keyword">break</span>;</span><br><span class="line">        <span class="keyword">case</span> symbols::dec: base = <span class="number">10</span>; <span class="keyword">break</span>;</span><br><span class="line">        <span class="keyword">case</span> symbols::hex: base = <span class="number">16</span>; <span class="keyword">break</span>;</span><br><span class="line">        <span class="keyword">case</span> symbols::ws:</span><br><span class="line">            <span class="keyword">while</span> (<span class="built_in">isspace</span>(<span class="built_in">get</span>()) &amp;&amp; !eof);</span><br><span class="line">            unget = <span class="literal">true</span>;</span><br><span class="line">            <span class="keyword">break</span>;</span><br><span class="line">        <span class="keyword">default</span>: base = <span class="number">10</span>;</span><br><span class="line">        }</span><br><span class="line">        <span class="keyword">return</span> *<span class="keyword">this</span>;</span><br><span class="line">    }</span><br><span class="line">    istream &amp;<span class="keyword">operator</span>&gt;&gt;(symbols::setbase a) {</span><br><span class="line">        base = std::<span class="built_in">max</span>(std::<span class="built_in">min</span>(a.base, <span class="number">36</span>), <span class="number">2</span>);</span><br><span class="line">        <span class="keyword">return</span> *<span class="keyword">this</span>;</span><br><span class="line">    }</span><br><span class="line">    <span class="function">istream &amp;<span class="title">ignore</span><span class="params">(<span class="type">char</span> end = <span class="string">'\n'</span>)</span> </span>{</span><br><span class="line">        <span class="keyword">while</span> (<span class="built_in">get</span>() != end &amp;&amp; !eof);</span><br><span class="line">        <span class="keyword">if</span> (eof) <span class="keyword">return</span> fail = <span class="literal">true</span>, *<span class="keyword">this</span>;</span><br><span class="line">        <span class="keyword">return</span> *<span class="keyword">this</span>;</span><br><span class="line">    }</span><br><span class="line">    <span class="function">istream &amp;<span class="title">getline</span><span class="params">(<span class="type">char</span> *s, <span class="type">char</span> end = <span class="string">'\n'</span>)</span> </span>{</span><br><span class="line">        s[<span class="number">0</span>] = <span class="string">'\0'</span>;</span><br><span class="line">        <span class="type">int</span> len = <span class="number">0</span>;</span><br><span class="line">        <span class="keyword">if</span> (eof) <span class="keyword">return</span> fail = <span class="literal">true</span>, *<span class="keyword">this</span>;</span><br><span class="line">        <span class="keyword">while</span> (<span class="built_in">get</span>() != end &amp;&amp; !eof) s[len++] = chr;</span><br><span class="line">        <span class="keyword">if</span> (s[len - <span class="number">1</span>] == <span class="string">'\r'</span> &amp;&amp; end == <span class="string">'\n'</span>) --len;</span><br><span class="line">        s[len] = <span class="string">'\0'</span>;</span><br><span class="line">        <span class="keyword">return</span> *<span class="keyword">this</span>;</span><br><span class="line">    }</span><br><span class="line">    <span class="function">istream &amp;<span class="title">getline</span><span class="params">(std::string &amp;s, <span class="type">char</span> end = <span class="string">'\n'</span>)</span> </span>{</span><br><span class="line">        s.<span class="built_in">clear</span>();</span><br><span class="line">        <span class="keyword">if</span> (eof) <span class="keyword">return</span> fail = <span class="literal">true</span>, *<span class="keyword">this</span>;</span><br><span class="line">        <span class="keyword">while</span> (<span class="built_in">get</span>() != end &amp;&amp; !eof) s.<span class="built_in">push_back</span>(chr);</span><br><span class="line">        <span class="keyword">if</span> (s.<span class="built_in">back</span>() == <span class="string">'\r'</span> &amp;&amp; end == <span class="string">'\n'</span>) s.<span class="built_in">pop_back</span>();</span><br><span class="line">        <span class="keyword">return</span> *<span class="keyword">this</span>;</span><br><span class="line">    }</span><br><span class="line">    <span class="function">istream &amp;<span class="title">get</span><span class="params">(<span class="type">char</span> *s, <span class="type">char</span> end = <span class="string">'\n'</span>)</span> </span>{</span><br><span class="line">        <span class="built_in">getline</span>(s, end);</span><br><span class="line">        unget = <span class="literal">true</span>;</span><br><span class="line">        <span class="keyword">return</span> *<span class="keyword">this</span>;</span><br><span class="line">    }</span><br><span class="line">    <span class="function">istream &amp;<span class="title">get</span><span class="params">(std::string &amp;s, <span class="type">char</span> end = <span class="string">'\n'</span>)</span> </span>{</span><br><span class="line">        <span class="built_in">getline</span>(s, end);</span><br><span class="line">        unget = <span class="literal">true</span>;</span><br><span class="line">        <span class="keyword">return</span> *<span class="keyword">this</span>;</span><br><span class="line">    }</span><br><span class="line">};</span><br><span class="line"><span class="keyword">class</span> <span class="title class_">ostream</span> : <span class="keyword">public</span> noncopyable {</span><br><span class="line">  <span class="keyword">private</span>:</span><br><span class="line">    <span class="type">int</span> base = <span class="number">10</span>, precision = <span class="number">6</span>, width = <span class="number">0</span>;</span><br><span class="line">    i64 eps = <span class="number">1e6</span>;</span><br><span class="line">    <span class="type">bool</span> adjust = <span class="literal">true</span>, boolalpha = <span class="literal">false</span>, showbase = <span class="literal">false</span>, showpoint = <span class="literal">false</span>,</span><br><span class="line">         showpos = <span class="literal">false</span>, kase = <span class="literal">false</span>, fixed = <span class="literal">false</span>;</span><br><span class="line">    <span class="type">char</span> setfill = <span class="string">' '</span>;</span><br><span class="line">    <span class="function"><span class="type">static</span> i64 <span class="title">qpow</span><span class="params">(i64 n, <span class="type">int</span> m)</span> </span>{</span><br><span class="line">        i64 ret = <span class="number">1</span>;</span><br><span class="line">        <span class="keyword">for</span> (<span class="type">int</span> i = m; i; i &gt;&gt;= <span class="number">1</span>, n *= n)</span><br><span class="line">            <span class="keyword">if</span> (i &amp; <span class="number">1</span>) ret *= n;</span><br><span class="line">        <span class="keyword">return</span> ret;</span><br><span class="line">    }</span><br><span class="line">    <span class="function"><span class="type">void</span> <span class="title">fill</span><span class="params">(<span class="type">int</span> n)</span> </span>{</span><br><span class="line">        <span class="keyword">if</span> (width &gt; n) <span class="built_in">vfill</span>(setfill, width - n);</span><br><span class="line">        width = <span class="number">0</span>;</span><br><span class="line">    }</span><br><span class="line">    <span class="function"><span class="type">char</span> <span class="title">toalpha</span><span class="params">(<span class="type">int</span> n)</span> </span>{</span><br><span class="line">        <span class="keyword">if</span> (n &lt; <span class="number">10</span>) <span class="keyword">return</span> n + <span class="string">'0'</span>;</span><br><span class="line">        <span class="keyword">return</span> n - <span class="number">10</span> + (kase ? <span class="string">'A'</span> : <span class="string">'a'</span>);</span><br><span class="line">    }</span><br><span class="line">    <span class="function"><span class="keyword">virtual</span> <span class="type">void</span> <span class="title">vput</span><span class="params">(<span class="type">char</span>)</span> </span>= <span class="number">0</span>;</span><br><span class="line">    <span class="function"><span class="keyword">virtual</span> <span class="type">void</span> <span class="title">vputs</span><span class="params">(<span class="type">const</span> <span class="type">char</span> *, <span class="type">int</span>)</span> </span>= <span class="number">0</span>;</span><br><span class="line">    <span class="function"><span class="keyword">virtual</span> <span class="type">void</span> <span class="title">vfill</span><span class="params">(<span class="type">char</span>, <span class="type">int</span>)</span> </span>= <span class="number">0</span>;</span><br><span class="line">    <span class="function"><span class="keyword">virtual</span> <span class="type">void</span> <span class="title">vflush</span><span class="params">()</span> </span>= <span class="number">0</span>;</span><br><span class="line">  <span class="keyword">public</span>:</span><br><span class="line">    <span class="function"><span class="type">void</span> <span class="title">put</span><span class="params">(<span class="type">char</span> c)</span> </span>{ <span class="built_in">vput</span>(c); }</span><br><span class="line">    <span class="keyword">template</span> &lt;<span class="keyword">typename</span> T, std::<span class="type">enable_if_t</span>&lt;is_integral_v&lt;T&gt;, <span class="type">int</span>&gt; = <span class="number">0</span>&gt;</span><br><span class="line">    ostream &amp;<span class="keyword">operator</span>&lt;&lt;(T n) {</span><br><span class="line">        <span class="type">static</span> <span class="type">char</span> buf[<span class="number">105</span>];</span><br><span class="line">        <span class="type">char</span> *p = buf + <span class="number">100</span>, *q = buf + <span class="number">100</span>;</span><br><span class="line">        <span class="type">bool</span> f = n &lt; <span class="number">0</span>;</span><br><span class="line">        <span class="keyword">if</span> (f) n = -n;</span><br><span class="line">        <span class="type">make_unsigned_t</span>&lt;T&gt; m = n;</span><br><span class="line">        <span class="keyword">if</span> (!m) *p-- = <span class="string">'0'</span>;</span><br><span class="line">        <span class="keyword">while</span> (m) *p-- = <span class="built_in">toalpha</span>(m % base), m /= base;</span><br><span class="line">        <span class="keyword">if</span> (showbase) <span class="keyword">switch</span> (base) {</span><br><span class="line">            <span class="keyword">case</span> <span class="number">2</span>: *p-- = kase ? <span class="string">'B'</span> : <span class="string">'b'</span>, *p-- = <span class="string">'0'</span>; <span class="keyword">break</span>;</span><br><span class="line">            <span class="keyword">case</span> <span class="number">8</span>: *p-- = <span class="string">'0'</span>; <span class="keyword">break</span>;</span><br><span class="line">            <span class="keyword">case</span> <span class="number">16</span>: *p-- = kase ? <span class="string">'X'</span> : <span class="string">'x'</span>, *p-- = <span class="string">'0'</span>; <span class="keyword">break</span>;</span><br><span class="line">            }</span><br><span class="line">        <span class="keyword">if</span> (!f) {</span><br><span class="line">            <span class="keyword">if</span> (showpos &amp;&amp; is_signed_v&lt;T&gt;) *p-- = <span class="string">'+'</span>;</span><br><span class="line">        } <span class="keyword">else</span> *p-- = <span class="string">'-'</span>;</span><br><span class="line">        <span class="keyword">if</span> (adjust) <span class="built_in">fill</span>(q - p);</span><br><span class="line">        <span class="built_in">vputs</span>(p + <span class="number">1</span>, q - p);</span><br><span class="line">        <span class="keyword">if</span> (!adjust) <span class="built_in">fill</span>(q - p);</span><br><span class="line">        <span class="keyword">return</span> *<span class="keyword">this</span>;</span><br><span class="line">    }</span><br><span class="line">    <span class="keyword">template</span> &lt;<span class="keyword">typename</span> T, std::<span class="type">enable_if_t</span>&lt;is_floating_v&lt;T&gt;, <span class="type">int</span>&gt; = <span class="number">0</span>&gt;</span><br><span class="line">    ostream &amp;<span class="keyword">operator</span>&lt;&lt;(T n) {</span><br><span class="line">        <span class="type">static</span> <span class="type">char</span> buf1[<span class="number">105</span>], buf2[<span class="number">105</span>];</span><br><span class="line">        <span class="keyword">if</span> (std::<span class="built_in">isinf</span>(n)) {</span><br><span class="line">            <span class="keyword">if</span> (n &gt; <span class="number">0</span>) {</span><br><span class="line">                <span class="keyword">if</span> (showpos) *<span class="keyword">this</span> &lt;&lt; (kase ? <span class="string">"+INF"</span> : <span class="string">"+inf"</span>);</span><br><span class="line">                <span class="keyword">else</span> *<span class="keyword">this</span> &lt;&lt; (kase ? <span class="string">"INF"</span> : <span class="string">"inf"</span>);</span><br><span class="line">            } <span class="keyword">else</span> *<span class="keyword">this</span> &lt;&lt; (kase ? <span class="string">"-INF"</span> : <span class="string">"-inf"</span>);</span><br><span class="line">            <span class="keyword">return</span> *<span class="keyword">this</span>;</span><br><span class="line">        }</span><br><span class="line">        <span class="keyword">if</span> (std::<span class="built_in">isnan</span>(n)) <span class="keyword">return</span> *<span class="keyword">this</span> &lt;&lt; (kase ? <span class="string">"NAN"</span> : <span class="string">"nan"</span>);</span><br><span class="line">        <span class="type">char</span> *p1 = buf1 + <span class="number">100</span>, *q1 = buf1 + <span class="number">100</span>, *p2 = buf2 + <span class="number">100</span>, *q2 = buf2 + <span class="number">100</span>;</span><br><span class="line">        <span class="type">bool</span> f = n &lt; <span class="number">0</span>;</span><br><span class="line">        <span class="keyword">if</span> (f) n = -n;</span><br><span class="line">        i64 m1 = std::<span class="built_in">floor</span>(n), m2 = std::<span class="built_in">round</span>((n - m1) * eps);</span><br><span class="line">        <span class="type">int</span> len = precision;</span><br><span class="line">        <span class="keyword">if</span> (m2 &gt;= eps) ++m1, m2 = <span class="number">0</span>;</span><br><span class="line">        <span class="keyword">if</span> (!m1) *p1-- = <span class="string">'0'</span>;</span><br><span class="line">        <span class="keyword">while</span> (m1) *p1-- = <span class="built_in">toalpha</span>(m1 % base), m1 /= base;</span><br><span class="line">        <span class="keyword">while</span> (len--) *p2-- = <span class="built_in">toalpha</span>(m2 % base), m2 /= base;</span><br><span class="line">        <span class="keyword">if</span> (showbase) <span class="keyword">switch</span> (base) {</span><br><span class="line">            <span class="keyword">case</span> <span class="number">2</span>: *p1-- = kase ? <span class="string">'B'</span> : <span class="string">'b'</span>, *p1-- = <span class="string">'0'</span>; <span class="keyword">break</span>;</span><br><span class="line">            <span class="keyword">case</span> <span class="number">8</span>: *p1-- = <span class="string">'0'</span>; <span class="keyword">break</span>;</span><br><span class="line">            <span class="keyword">case</span> <span class="number">16</span>: *p1-- = kase ? <span class="string">'X'</span> : <span class="string">'x'</span>, *p1-- = <span class="string">'0'</span>; <span class="keyword">break</span>;</span><br><span class="line">            }</span><br><span class="line">        <span class="keyword">if</span> (!f) {</span><br><span class="line">            <span class="keyword">if</span> (showpos) *p1-- = <span class="string">'+'</span>;</span><br><span class="line">        } <span class="keyword">else</span> *p1-- = <span class="string">'-'</span>;</span><br><span class="line">        <span class="keyword">if</span> (!fixed)</span><br><span class="line">            <span class="keyword">while</span> (*q2 == <span class="string">'0'</span> &amp;&amp; p2 != q2) --q2;</span><br><span class="line">        <span class="keyword">if</span> (showpoint || p2 != q2) *p2-- = <span class="string">'.'</span>;</span><br><span class="line">        <span class="keyword">if</span> (adjust) <span class="built_in">fill</span>((q1 - p1) + (q2 - p2));</span><br><span class="line">        <span class="built_in">vputs</span>(p1 + <span class="number">1</span>, q1 - p1);</span><br><span class="line">        <span class="built_in">vputs</span>(p2 + <span class="number">1</span>, q2 - p2);</span><br><span class="line">        <span class="keyword">if</span> (!adjust) <span class="built_in">fill</span>((q1 - p1) + (q2 - p2));</span><br><span class="line">        <span class="keyword">return</span> *<span class="keyword">this</span>;</span><br><span class="line">    }</span><br><span class="line">    ostream &amp;<span class="keyword">operator</span>&lt;&lt;(<span class="type">char</span> c) {</span><br><span class="line">        <span class="keyword">if</span> (adjust) <span class="built_in">fill</span>(<span class="number">1</span>);</span><br><span class="line">        <span class="built_in">vput</span>(c);</span><br><span class="line">        <span class="keyword">if</span> (!adjust) <span class="built_in">fill</span>(<span class="number">1</span>);</span><br><span class="line">        <span class="keyword">return</span> *<span class="keyword">this</span>;</span><br><span class="line">    }</span><br><span class="line">    ostream &amp;<span class="keyword">operator</span>&lt;&lt;(<span class="type">const</span> <span class="type">char</span> *s) {</span><br><span class="line">        <span class="type">int</span> n = <span class="built_in">strlen</span>(s);</span><br><span class="line">        <span class="keyword">if</span> (adjust) <span class="built_in">fill</span>(n);</span><br><span class="line">        <span class="built_in">vputs</span>(s, n);</span><br><span class="line">        <span class="keyword">if</span> (!adjust) <span class="built_in">fill</span>(n);</span><br><span class="line">        <span class="keyword">return</span> *<span class="keyword">this</span>;</span><br><span class="line">    }</span><br><span class="line">    ostream &amp;<span class="keyword">operator</span>&lt;&lt;(<span class="type">const</span> std::string &amp;s) {</span><br><span class="line">        <span class="type">int</span> n = s.<span class="built_in">size</span>();</span><br><span class="line">        <span class="keyword">if</span> (adjust) <span class="built_in">fill</span>(n);</span><br><span class="line">        <span class="built_in">vputs</span>(s.<span class="built_in">data</span>(), n);</span><br><span class="line">        <span class="keyword">if</span> (!adjust) <span class="built_in">fill</span>(n);</span><br><span class="line">        <span class="keyword">return</span> *<span class="keyword">this</span>;</span><br><span class="line">    }</span><br><span class="line">    ostream &amp;<span class="keyword">operator</span>&lt;&lt;(std::string_view sv) {</span><br><span class="line">        <span class="type">int</span> n = sv.<span class="built_in">size</span>();</span><br><span class="line">        <span class="keyword">if</span> (adjust) <span class="built_in">fill</span>(n);</span><br><span class="line">        <span class="built_in">vputs</span>(sv.<span class="built_in">data</span>(), n);</span><br><span class="line">        <span class="keyword">if</span> (!adjust) <span class="built_in">fill</span>(n);</span><br><span class="line">        <span class="keyword">return</span> *<span class="keyword">this</span>;</span><br><span class="line">    }</span><br><span class="line">    ostream &amp;<span class="keyword">operator</span>&lt;&lt;(<span class="type">bool</span> f) {</span><br><span class="line">        <span class="keyword">if</span> (f) {</span><br><span class="line">            <span class="keyword">if</span> (boolalpha) *<span class="keyword">this</span> &lt;&lt; (kase ? <span class="string">"TRUE"</span> : <span class="string">"true"</span>);</span><br><span class="line">            <span class="keyword">else</span> *<span class="keyword">this</span> &lt;&lt; <span class="string">'1'</span>;</span><br><span class="line">        } <span class="keyword">else</span> {</span><br><span class="line">            <span class="keyword">if</span> (boolalpha) *<span class="keyword">this</span> &lt;&lt; (kase ? <span class="string">"FALSE"</span> : <span class="string">"false"</span>);</span><br><span class="line">            <span class="keyword">else</span> *<span class="keyword">this</span> &lt;&lt; <span class="string">'0'</span>;</span><br><span class="line">        }</span><br><span class="line">        <span class="keyword">return</span> *<span class="keyword">this</span>;</span><br><span class="line">    }</span><br><span class="line">    ostream &amp;<span class="keyword">operator</span>&lt;&lt;(<span class="type">const</span> <span class="type">void</span> *p) {</span><br><span class="line">        <span class="type">int</span> n = base;</span><br><span class="line">        <span class="type">bool</span> f = showbase;</span><br><span class="line">        base = <span class="number">16</span>, showbase = <span class="literal">true</span>;</span><br><span class="line">        *<span class="keyword">this</span> &lt;&lt; (u64)p;</span><br><span class="line">        base = n, showbase = f;</span><br><span class="line">        <span class="keyword">return</span> *<span class="keyword">this</span>;</span><br><span class="line">    }</span><br><span class="line">    ostream &amp;<span class="keyword">operator</span>&lt;&lt;(std::<span class="type">nullptr_t</span>) {</span><br><span class="line">        <span class="keyword">return</span> *<span class="keyword">this</span> &lt;&lt; (kase ? <span class="string">"NULLPTR"</span> : <span class="string">"nullptr"</span>);</span><br><span class="line">    }</span><br><span class="line">    ostream &amp;<span class="keyword">operator</span>&lt;&lt;(symbols::symbol a) {</span><br><span class="line">        <span class="keyword">switch</span> (a) {</span><br><span class="line">        <span class="keyword">case</span> symbols::endl: <span class="built_in">vput</span>(<span class="string">'\n'</span>); <span class="keyword">break</span>;</span><br><span class="line">        <span class="keyword">case</span> symbols::ends: <span class="built_in">vput</span>(<span class="string">' '</span>); <span class="keyword">break</span>;</span><br><span class="line">        <span class="keyword">case</span> symbols::flush: <span class="built_in">vflush</span>(); <span class="keyword">break</span>;</span><br><span class="line">        <span class="keyword">case</span> symbols::bin: eps = <span class="built_in">qpow</span>(base = <span class="number">2</span>, precision); <span class="keyword">break</span>;</span><br><span class="line">        <span class="keyword">case</span> symbols::oct: eps = <span class="built_in">qpow</span>(base = <span class="number">8</span>, precision); <span class="keyword">break</span>;</span><br><span class="line">        <span class="keyword">case</span> symbols::dec: eps = <span class="built_in">qpow</span>(base = <span class="number">10</span>, precision); <span class="keyword">break</span>;</span><br><span class="line">        <span class="keyword">case</span> symbols::hex: eps = <span class="built_in">qpow</span>(base = <span class="number">16</span>, precision); <span class="keyword">break</span>;</span><br><span class="line">        <span class="keyword">case</span> symbols::left: adjust = <span class="literal">false</span>; <span class="keyword">break</span>;</span><br><span class="line">        <span class="keyword">case</span> symbols::right: adjust = <span class="literal">true</span>; <span class="keyword">break</span>;</span><br><span class="line">        <span class="keyword">case</span> symbols::boolalpha: boolalpha = <span class="literal">true</span>; <span class="keyword">break</span>;</span><br><span class="line">        <span class="keyword">case</span> symbols::noboolalpha: boolalpha = <span class="literal">false</span>; <span class="keyword">break</span>;</span><br><span class="line">        <span class="keyword">case</span> symbols::showbase: showbase = <span class="literal">true</span>; <span class="keyword">break</span>;</span><br><span class="line">        <span class="keyword">case</span> symbols::noshowbase: showbase = <span class="literal">false</span>; <span class="keyword">break</span>;</span><br><span class="line">        <span class="keyword">case</span> symbols::showpoint: showpoint = <span class="literal">true</span>; <span class="keyword">break</span>;</span><br><span class="line">        <span class="keyword">case</span> symbols::noshowpoint: showpoint = <span class="literal">false</span>; <span class="keyword">break</span>;</span><br><span class="line">        <span class="keyword">case</span> symbols::showpos: showpos = <span class="literal">true</span>; <span class="keyword">break</span>;</span><br><span class="line">        <span class="keyword">case</span> symbols::noshowpos: showpos = <span class="literal">false</span>; <span class="keyword">break</span>;</span><br><span class="line">        <span class="keyword">case</span> symbols::uppercase: kase = <span class="literal">true</span>; <span class="keyword">break</span>;</span><br><span class="line">        <span class="keyword">case</span> symbols::lowercase: kase = <span class="literal">false</span>; <span class="keyword">break</span>;</span><br><span class="line">        <span class="keyword">case</span> symbols::fixed: fixed = <span class="literal">true</span>; <span class="keyword">break</span>;</span><br><span class="line">        <span class="keyword">case</span> symbols::defaultfloat: fixed = <span class="literal">false</span>; <span class="keyword">break</span>;</span><br><span class="line">        <span class="keyword">default</span>:</span><br><span class="line">            base = <span class="number">10</span>, precision = <span class="number">6</span>, width = <span class="number">0</span>, eps = <span class="number">1e6</span>;</span><br><span class="line">            adjust = <span class="literal">true</span>;</span><br><span class="line">            boolalpha = showbase = showpoint = showpos = kase = fixed = <span class="literal">false</span>;</span><br><span class="line">            setfill = <span class="string">' '</span>;</span><br><span class="line">        }</span><br><span class="line">        <span class="keyword">return</span> *<span class="keyword">this</span>;</span><br><span class="line">    }</span><br><span class="line">    ostream &amp;<span class="keyword">operator</span>&lt;&lt;(symbols::setbase a) {</span><br><span class="line">        base = std::<span class="built_in">max</span>(std::<span class="built_in">min</span>(a.base, <span class="number">36</span>), <span class="number">2</span>);</span><br><span class="line">        eps = <span class="built_in">qpow</span>(base, precision);</span><br><span class="line">        <span class="keyword">return</span> *<span class="keyword">this</span>;</span><br><span class="line">    }</span><br><span class="line">    ostream &amp;<span class="keyword">operator</span>&lt;&lt;(symbols::setfill a) {</span><br><span class="line">        setfill = a.fill;</span><br><span class="line">        <span class="keyword">return</span> *<span class="keyword">this</span>;</span><br><span class="line">    }</span><br><span class="line">    ostream &amp;<span class="keyword">operator</span>&lt;&lt;(symbols::setprecision a) {</span><br><span class="line">        precision = std::<span class="built_in">max</span>(a.precision, <span class="number">0</span>);</span><br><span class="line">        eps = <span class="built_in">qpow</span>(base, precision);</span><br><span class="line">        <span class="keyword">return</span> *<span class="keyword">this</span>;</span><br><span class="line">    }</span><br><span class="line">    ostream &amp;<span class="keyword">operator</span>&lt;&lt;(symbols::setw a) {</span><br><span class="line">        width = std::<span class="built_in">max</span>(a.width, <span class="number">0</span>);</span><br><span class="line">        <span class="keyword">return</span> *<span class="keyword">this</span>;</span><br><span class="line">    }</span><br><span class="line">};</span><br><span class="line">} <span class="comment">// namespace interface</span></span><br><span class="line"><span class="type">const</span> <span class="type">int</span> SIZ = <span class="number">0xfffff</span>;</span><br><span class="line"><span class="keyword">class</span> <span class="title class_">istream</span> : <span class="keyword">public</span> interface::istream {</span><br><span class="line">  <span class="keyword">private</span>:</span><br><span class="line">    <span class="type">char</span> buf[SIZ], *p = buf, *q = buf;</span><br><span class="line">    <span class="function"><span class="keyword">virtual</span> <span class="type">char</span> <span class="title">vget</span><span class="params">()</span> <span class="keyword">final</span> </span>{</span><br><span class="line">        <span class="keyword">if</span> (p == q) {</span><br><span class="line">            <span class="type">int</span> len = <span class="built_in">fread</span>(buf, <span class="number">1</span>, SIZ, stream);</span><br><span class="line">            <span class="keyword">if</span> (!len) <span class="keyword">return</span> EOF;</span><br><span class="line">            p = buf, q = buf + len;</span><br><span class="line">        }</span><br><span class="line">        <span class="keyword">return</span> *p++;</span><br><span class="line">    }</span><br><span class="line">  <span class="keyword">protected</span>:</span><br><span class="line">    FILE *stream = stdin;</span><br><span class="line">  <span class="keyword">public</span>:</span><br><span class="line">    <span class="keyword">virtual</span> ~<span class="built_in">istream</span>() { <span class="built_in">fclose</span>(stream); }</span><br><span class="line">};</span><br><span class="line"><span class="keyword">class</span> <span class="title class_">ifstream</span> : <span class="keyword">public</span> istream {</span><br><span class="line">  <span class="keyword">public</span>:</span><br><span class="line">    <span class="function"><span class="keyword">explicit</span> <span class="title">ifstream</span><span class="params">(FILE *p)</span> </span>{ istream::stream = p; }</span><br><span class="line">    <span class="function"><span class="keyword">explicit</span> <span class="title">ifstream</span><span class="params">(<span class="type">const</span> <span class="type">char</span> *s)</span> </span>{ istream::stream = <span class="built_in">fopen</span>(s, <span class="string">"r"</span>); }</span><br><span class="line">};</span><br><span class="line"><span class="keyword">class</span> <span class="title class_">ostream</span> : <span class="keyword">public</span> interface::ostream {</span><br><span class="line">  <span class="keyword">private</span>:</span><br><span class="line">    <span class="type">char</span> buf[SIZ], *p = buf;</span><br><span class="line">    <span class="function"><span class="keyword">virtual</span> <span class="type">void</span> <span class="title">vput</span><span class="params">(<span class="type">char</span> c)</span> <span class="keyword">final</span> </span>{</span><br><span class="line">        <span class="keyword">if</span> (p - buf &gt;= SIZ) <span class="built_in">vflush</span>();</span><br><span class="line">        *p++ = c;</span><br><span class="line">    }</span><br><span class="line">    <span class="function"><span class="keyword">virtual</span> <span class="type">void</span> <span class="title">vputs</span><span class="params">(<span class="type">const</span> <span class="type">char</span> *s, <span class="type">int</span> n)</span> <span class="keyword">final</span> </span>{</span><br><span class="line">        <span class="type">int</span> used = p - buf, len = <span class="number">0</span>;</span><br><span class="line">        <span class="keyword">while</span> (n - len + used &gt;= SIZ) {</span><br><span class="line">            <span class="built_in">memcpy</span>(buf + used, s + len, SIZ - used);</span><br><span class="line">            p = buf + SIZ;</span><br><span class="line">            <span class="built_in">vflush</span>();</span><br><span class="line">            len += SIZ - used, used = <span class="number">0</span>;</span><br><span class="line">        }</span><br><span class="line">        <span class="built_in">memcpy</span>(buf + used, s + len, n - len);</span><br><span class="line">        p = buf + used + n - len;</span><br><span class="line">    }</span><br><span class="line">    <span class="function"><span class="keyword">virtual</span> <span class="type">void</span> <span class="title">vfill</span><span class="params">(<span class="type">char</span> c, <span class="type">int</span> n)</span> <span class="keyword">final</span> </span>{</span><br><span class="line">        <span class="type">int</span> used = p - buf, len = <span class="number">0</span>;</span><br><span class="line">        <span class="keyword">while</span> (n - len + used &gt;= SIZ) {</span><br><span class="line">            <span class="built_in">memset</span>(buf + used, c, SIZ - used);</span><br><span class="line">            p = buf + SIZ;</span><br><span class="line">            <span class="built_in">vflush</span>();</span><br><span class="line">            len += SIZ - used, used = <span class="number">0</span>;</span><br><span class="line">        }</span><br><span class="line">        <span class="built_in">memset</span>(buf + used, c, n - len);</span><br><span class="line">        p = buf + used + n - len;</span><br><span class="line">    }</span><br><span class="line">    <span class="function"><span class="keyword">virtual</span> <span class="type">void</span> <span class="title">vflush</span><span class="params">()</span> <span class="keyword">final</span> </span>{</span><br><span class="line">        <span class="built_in">fwrite</span>(buf, <span class="number">1</span>, p - buf, stream);</span><br><span class="line">        p = buf;</span><br><span class="line">        <span class="built_in">fflush</span>(stream);</span><br><span class="line">    }</span><br><span class="line">  <span class="keyword">protected</span>:</span><br><span class="line">    FILE *stream = stdout;</span><br><span class="line">  <span class="keyword">public</span>:</span><br><span class="line">    <span class="keyword">virtual</span> ~<span class="built_in">ostream</span>() {</span><br><span class="line">        <span class="built_in">vflush</span>();</span><br><span class="line">        <span class="built_in">fclose</span>(stream);</span><br><span class="line">    }</span><br><span class="line">};</span><br><span class="line"><span class="keyword">class</span> <span class="title class_">ofstream</span> : <span class="keyword">public</span> ostream {</span><br><span class="line">  <span class="keyword">public</span>:</span><br><span class="line">    <span class="function"><span class="keyword">explicit</span> <span class="title">ofstream</span><span class="params">(FILE *p)</span> </span>{ ostream::stream = p; }</span><br><span class="line">    <span class="function"><span class="keyword">explicit</span> <span class="title">ofstream</span><span class="params">(<span class="type">const</span> <span class="type">char</span> *s)</span> </span>{ ostream::stream = <span class="built_in">fopen</span>(s, <span class="string">"w"</span>); }</span><br><span class="line">};</span><br><span class="line"><span class="type">static</span> istream is;</span><br><span class="line"><span class="type">static</span> ostream os;</span><br><span class="line">}; <span class="comment">// namespace fastio</span></span><br></pre></td></tr></tbody></table></figure><h4 id="java" tabindex="-1">Java</h4><p>来源：<a href="https://raw.githubusercontent.com/tiann/KernelSU/master/manager/app/src/main/java/me/weishu/kernelsu/ui/KsuService.java">https://raw.githubusercontent.com/tiann/KernelSU/master/manager/app/src/main/java/me/weishu/kernelsu/ui/KsuService.java</a></p><figure class="highlight java"><table><tbody><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br><span class="line">48</span><br><span class="line">49</span><br><span class="line">50</span><br><span class="line">51</span><br><span class="line">52</span><br><span class="line">53</span><br><span class="line">54</span><br><span class="line">55</span><br><span class="line">56</span><br><span class="line">57</span><br><span class="line">58</span><br><span class="line">59</span><br><span class="line">60</span><br><span class="line">61</span><br><span class="line">62</span><br><span class="line">63</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">package</span> me.weishu.kernelsu.ui;</span><br><span class="line"><span class="keyword">import</span> android.content.Context;</span><br><span class="line"><span class="keyword">import</span> android.content.Intent;</span><br><span class="line"><span class="keyword">import</span> android.content.pm.PackageInfo;</span><br><span class="line"><span class="keyword">import</span> android.content.pm.PackageManager;</span><br><span class="line"><span class="keyword">import</span> android.os.IBinder;</span><br><span class="line"><span class="keyword">import</span> android.os.UserHandle;</span><br><span class="line"><span class="keyword">import</span> android.os.UserManager;</span><br><span class="line"><span class="keyword">import</span> android.util.Log;</span><br><span class="line"><span class="keyword">import</span> androidx.annotation.NonNull;</span><br><span class="line"><span class="keyword">import</span> com.topjohnwu.superuser.ipc.RootService;</span><br><span class="line"><span class="keyword">import</span> java.lang.reflect.Method;</span><br><span class="line"><span class="keyword">import</span> java.util.ArrayList;</span><br><span class="line"><span class="keyword">import</span> java.util.List;</span><br><span class="line"><span class="keyword">import</span> me.weishu.kernelsu.IKsuInterface;</span><br><span class="line"><span class="keyword">import</span> rikka.parcelablelist.ParcelableListSlice;</span><br><span class="line"><span class="comment">/**</span></span><br><span class="line"><span class="comment"> * <span class="doctag">@author</span> weishu</span></span><br><span class="line"><span class="comment"> * <span class="doctag">@date</span> 2023/4/18.</span></span><br><span class="line"><span class="comment"> */</span></span><br><span class="line"><span class="keyword">public</span> <span class="keyword">class</span> <span class="title class_">KsuService</span> <span class="keyword">extends</span> <span class="title class_">RootService</span> {</span><br><span class="line">    <span class="keyword">private</span> <span class="keyword">static</span> <span class="keyword">final</span> <span class="type">String</span> <span class="variable">TAG</span> <span class="operator">=</span> <span class="string">"KsuService"</span>;</span><br><span class="line">    <span class="keyword">class</span> <span class="title class_">Stub</span> <span class="keyword">extends</span> <span class="title class_">IKsuInterface</span>.Stub {</span><br><span class="line">        <span class="meta">@Override</span></span><br><span class="line">        <span class="keyword">public</span> <span class="type">ParcelableListSlice</span>&lt;PackageInfo&gt; <span class="title function_">getPackages</span><span class="params">(<span class="type">int</span> flags)</span> {</span><br><span class="line">            <span class="type">List</span>&lt;PackageInfo&gt; <span class="variable">list</span> <span class="operator">=</span> getInstalledPackagesAll(flags);</span><br><span class="line">            Log.i(TAG, <span class="string">"getPackages: "</span> + list.size());</span><br><span class="line">            <span class="keyword">return</span> <span class="keyword">new</span> <span class="title class_">ParcelableListSlice</span>&lt;&gt;(list);</span><br><span class="line">        }</span><br><span class="line">    }</span><br><span class="line">    <span class="meta">@Override</span></span><br><span class="line">    <span class="keyword">public</span> <span class="type">IBinder</span> <span class="title function_">onBind</span><span class="params">(<span class="meta">@NonNull</span> Intent intent)</span> {</span><br><span class="line">        <span class="keyword">return</span> <span class="keyword">new</span> <span class="title class_">Stub</span>();</span><br><span class="line">    }</span><br><span class="line">    <span class="type">List</span>&lt;Integer&gt; <span class="title function_">getUserIds</span><span class="params">()</span> {</span><br><span class="line">        <span class="type">List</span>&lt;Integer&gt; <span class="variable">result</span> <span class="operator">=</span> <span class="keyword">new</span> <span class="title class_">ArrayList</span>&lt;&gt;();</span><br><span class="line">        <span class="type">UserManager</span> <span class="variable">um</span> <span class="operator">=</span> (UserManager) getSystemService(Context.USER_SERVICE);</span><br><span class="line">        <span class="type">List</span>&lt;UserHandle&gt; <span class="variable">userProfiles</span> <span class="operator">=</span> um.getUserProfiles();</span><br><span class="line">        <span class="keyword">for</span> (UserHandle userProfile : userProfiles) {</span><br><span class="line">            <span class="type">int</span> <span class="variable">userId</span> <span class="operator">=</span> userProfile.hashCode();</span><br><span class="line">            result.add(userProfile.hashCode());</span><br><span class="line">        }</span><br><span class="line">        <span class="keyword">return</span> result;</span><br><span class="line">    }</span><br><span class="line">    <span class="type">ArrayList</span>&lt;PackageInfo&gt; <span class="title function_">getInstalledPackagesAll</span><span class="params">(<span class="type">int</span> flags)</span> {</span><br><span class="line">        <span class="type">ArrayList</span>&lt;PackageInfo&gt; <span class="variable">packages</span> <span class="operator">=</span> <span class="keyword">new</span> <span class="title class_">ArrayList</span>&lt;&gt;();</span><br><span class="line">        <span class="keyword">for</span> (Integer userId : getUserIds()) {</span><br><span class="line">            Log.i(TAG, <span class="string">"getInstalledPackagesAll: "</span> + userId);</span><br><span class="line">            packages.addAll(getInstalledPackagesAsUser(flags, userId));</span><br><span class="line">        }</span><br><span class="line">        <span class="keyword">return</span> packages;</span><br><span class="line">    }</span><br><span class="line">    <span class="type">List</span>&lt;PackageInfo&gt; <span class="title function_">getInstalledPackagesAsUser</span><span class="params">(<span class="type">int</span> flags, <span class="type">int</span> userId)</span> {</span><br><span class="line">        <span class="keyword">try</span> {</span><br><span class="line">            <span class="type">PackageManager</span> <span class="variable">pm</span> <span class="operator">=</span> getPackageManager();</span><br><span class="line">            <span class="type">Method</span> <span class="variable">getInstalledPackagesAsUser</span> <span class="operator">=</span> pm.getClass().getDeclaredMethod(<span class="string">"getInstalledPackagesAsUser"</span>, <span class="type">int</span>.class, <span class="type">int</span>.class);</span><br><span class="line">            <span class="keyword">return</span> (List&lt;PackageInfo&gt;) getInstalledPackagesAsUser.invoke(pm, flags, userId);</span><br><span class="line">        } <span class="keyword">catch</span> (Throwable e) {</span><br><span class="line">            Log.e(TAG, <span class="string">"err"</span>, e);</span><br><span class="line">        }</span><br><span class="line">        <span class="keyword">return</span> <span class="keyword">new</span> <span class="title class_">ArrayList</span>&lt;&gt;();</span><br><span class="line">    }</span><br><span class="line">}</span><br></pre></td></tr></tbody></table></figure><h4 id="kotlin" tabindex="-1">Kotlin</h4><p>来源：<a href="https://raw.githubusercontent.com/tiann/KernelSU/master/manager/app/src/main/java/me/weishu/kernelsu/ui/screen/Flash.kt">https://raw.githubusercontent.com/tiann/KernelSU/master/manager/app/src/main/java/me/weishu/kernelsu/ui/screen/Flash.kt</a></p><figure class="highlight kotlin"><table><tbody><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br><span class="line">48</span><br><span class="line">49</span><br><span class="line">50</span><br><span class="line">51</span><br><span class="line">52</span><br><span class="line">53</span><br><span class="line">54</span><br><span class="line">55</span><br><span class="line">56</span><br><span class="line">57</span><br><span class="line">58</span><br><span class="line">59</span><br><span class="line">60</span><br><span class="line">61</span><br><span class="line">62</span><br><span class="line">63</span><br><span class="line">64</span><br><span class="line">65</span><br><span class="line">66</span><br><span class="line">67</span><br><span class="line">68</span><br><span class="line">69</span><br><span class="line">70</span><br><span class="line">71</span><br><span class="line">72</span><br><span class="line">73</span><br><span class="line">74</span><br><span class="line">75</span><br><span class="line">76</span><br><span class="line">77</span><br><span class="line">78</span><br><span class="line">79</span><br><span class="line">80</span><br><span class="line">81</span><br><span class="line">82</span><br><span class="line">83</span><br><span class="line">84</span><br><span class="line">85</span><br><span class="line">86</span><br><span class="line">87</span><br><span class="line">88</span><br><span class="line">89</span><br><span class="line">90</span><br><span class="line">91</span><br><span class="line">92</span><br><span class="line">93</span><br><span class="line">94</span><br><span class="line">95</span><br><span class="line">96</span><br><span class="line">97</span><br><span class="line">98</span><br><span class="line">99</span><br><span class="line">100</span><br><span class="line">101</span><br><span class="line">102</span><br><span class="line">103</span><br><span class="line">104</span><br><span class="line">105</span><br><span class="line">106</span><br><span class="line">107</span><br><span class="line">108</span><br><span class="line">109</span><br><span class="line">110</span><br><span class="line">111</span><br><span class="line">112</span><br><span class="line">113</span><br><span class="line">114</span><br><span class="line">115</span><br><span class="line">116</span><br><span class="line">117</span><br><span class="line">118</span><br><span class="line">119</span><br><span class="line">120</span><br><span class="line">121</span><br><span class="line">122</span><br><span class="line">123</span><br><span class="line">124</span><br><span class="line">125</span><br><span class="line">126</span><br><span class="line">127</span><br><span class="line">128</span><br><span class="line">129</span><br><span class="line">130</span><br><span class="line">131</span><br><span class="line">132</span><br><span class="line">133</span><br><span class="line">134</span><br><span class="line">135</span><br><span class="line">136</span><br><span class="line">137</span><br><span class="line">138</span><br><span class="line">139</span><br><span class="line">140</span><br><span class="line">141</span><br><span class="line">142</span><br><span class="line">143</span><br><span class="line">144</span><br><span class="line">145</span><br><span class="line">146</span><br><span class="line">147</span><br><span class="line">148</span><br><span class="line">149</span><br><span class="line">150</span><br><span class="line">151</span><br><span class="line">152</span><br><span class="line">153</span><br><span class="line">154</span><br><span class="line">155</span><br><span class="line">156</span><br><span class="line">157</span><br><span class="line">158</span><br><span class="line">159</span><br><span class="line">160</span><br><span class="line">161</span><br><span class="line">162</span><br><span class="line">163</span><br><span class="line">164</span><br><span class="line">165</span><br><span class="line">166</span><br><span class="line">167</span><br><span class="line">168</span><br><span class="line">169</span><br><span class="line">170</span><br><span class="line">171</span><br><span class="line">172</span><br><span class="line">173</span><br><span class="line">174</span><br><span class="line">175</span><br><span class="line">176</span><br><span class="line">177</span><br><span class="line">178</span><br><span class="line">179</span><br><span class="line">180</span><br><span class="line">181</span><br><span class="line">182</span><br><span class="line">183</span><br><span class="line">184</span><br><span class="line">185</span><br><span class="line">186</span><br><span class="line">187</span><br><span class="line">188</span><br><span class="line">189</span><br><span class="line">190</span><br><span class="line">191</span><br><span class="line">192</span><br><span class="line">193</span><br><span class="line">194</span><br><span class="line">195</span><br><span class="line">196</span><br><span class="line">197</span><br><span class="line">198</span><br><span class="line">199</span><br><span class="line">200</span><br><span class="line">201</span><br><span class="line">202</span><br><span class="line">203</span><br><span class="line">204</span><br><span class="line">205</span><br><span class="line">206</span><br><span class="line">207</span><br><span class="line">208</span><br><span class="line">209</span><br><span class="line">210</span><br><span class="line">211</span><br><span class="line">212</span><br><span class="line">213</span><br><span class="line">214</span><br><span class="line">215</span><br><span class="line">216</span><br><span class="line">217</span><br><span class="line">218</span><br><span class="line">219</span><br><span class="line">220</span><br><span class="line">221</span><br><span class="line">222</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">package</span> me.weishu.kernelsu.ui.screen</span><br><span class="line"><span class="keyword">import</span> android.net.Uri</span><br><span class="line"><span class="keyword">import</span> android.os.Environment</span><br><span class="line"><span class="keyword">import</span> android.os.Parcelable</span><br><span class="line"><span class="keyword">import</span> androidx.compose.foundation.layout.Column</span><br><span class="line"><span class="keyword">import</span> androidx.compose.foundation.layout.fillMaxSize</span><br><span class="line"><span class="keyword">import</span> androidx.compose.foundation.layout.padding</span><br><span class="line"><span class="keyword">import</span> androidx.compose.foundation.rememberScrollState</span><br><span class="line"><span class="keyword">import</span> androidx.compose.foundation.verticalScroll</span><br><span class="line"><span class="keyword">import</span> androidx.compose.material.icons.Icons</span><br><span class="line"><span class="keyword">import</span> androidx.compose.material.icons.automirrored.filled.ArrowBack</span><br><span class="line"><span class="keyword">import</span> androidx.compose.material.icons.filled.Refresh</span><br><span class="line"><span class="keyword">import</span> androidx.compose.material.icons.filled.Save</span><br><span class="line"><span class="keyword">import</span> androidx.compose.material3.ExperimentalMaterial3Api</span><br><span class="line"><span class="keyword">import</span> androidx.compose.material3.ExtendedFloatingActionButton</span><br><span class="line"><span class="keyword">import</span> androidx.compose.material3.Icon</span><br><span class="line"><span class="keyword">import</span> androidx.compose.material3.IconButton</span><br><span class="line"><span class="keyword">import</span> androidx.compose.material3.MaterialTheme</span><br><span class="line"><span class="keyword">import</span> androidx.compose.material3.Scaffold</span><br><span class="line"><span class="keyword">import</span> androidx.compose.material3.Text</span><br><span class="line"><span class="keyword">import</span> androidx.compose.material3.TopAppBar</span><br><span class="line"><span class="keyword">import</span> androidx.compose.runtime.Composable</span><br><span class="line"><span class="keyword">import</span> androidx.compose.runtime.LaunchedEffect</span><br><span class="line"><span class="keyword">import</span> androidx.compose.runtime.getValue</span><br><span class="line"><span class="keyword">import</span> androidx.compose.runtime.mutableStateOf</span><br><span class="line"><span class="keyword">import</span> androidx.compose.runtime.rememberCoroutineScope</span><br><span class="line"><span class="keyword">import</span> androidx.compose.runtime.saveable.rememberSaveable</span><br><span class="line"><span class="keyword">import</span> androidx.compose.runtime.setValue</span><br><span class="line"><span class="keyword">import</span> androidx.compose.ui.ExperimentalComposeUiApi</span><br><span class="line"><span class="keyword">import</span> androidx.compose.ui.Modifier</span><br><span class="line"><span class="keyword">import</span> androidx.compose.ui.input.key.Key</span><br><span class="line"><span class="keyword">import</span> androidx.compose.ui.input.key.key</span><br><span class="line"><span class="keyword">import</span> androidx.compose.ui.res.stringResource</span><br><span class="line"><span class="keyword">import</span> androidx.compose.ui.text.font.FontFamily</span><br><span class="line"><span class="keyword">import</span> androidx.compose.ui.tooling.preview.Preview</span><br><span class="line"><span class="keyword">import</span> androidx.compose.ui.unit.dp</span><br><span class="line"><span class="keyword">import</span> com.ramcosta.composedestinations.<span class="keyword">annotation</span>.Destination</span><br><span class="line"><span class="keyword">import</span> com.ramcosta.composedestinations.navigation.DestinationsNavigator</span><br><span class="line"><span class="keyword">import</span> com.ramcosta.composedestinations.navigation.EmptyDestinationsNavigator</span><br><span class="line"><span class="keyword">import</span> kotlinx.coroutines.Dispatchers</span><br><span class="line"><span class="keyword">import</span> kotlinx.coroutines.launch</span><br><span class="line"><span class="keyword">import</span> kotlinx.coroutines.withContext</span><br><span class="line"><span class="keyword">import</span> kotlinx.parcelize.Parcelize</span><br><span class="line"><span class="keyword">import</span> me.weishu.kernelsu.R</span><br><span class="line"><span class="keyword">import</span> me.weishu.kernelsu.ui.component.KeyEventBlocker</span><br><span class="line"><span class="keyword">import</span> me.weishu.kernelsu.ui.util.LkmSelection</span><br><span class="line"><span class="keyword">import</span> me.weishu.kernelsu.ui.util.LocalSnackbarHost</span><br><span class="line"><span class="keyword">import</span> me.weishu.kernelsu.ui.util.installBoot</span><br><span class="line"><span class="keyword">import</span> me.weishu.kernelsu.ui.util.flashModule</span><br><span class="line"><span class="keyword">import</span> me.weishu.kernelsu.ui.util.reboot</span><br><span class="line"><span class="keyword">import</span> me.weishu.kernelsu.ui.util.restoreBoot</span><br><span class="line"><span class="keyword">import</span> me.weishu.kernelsu.ui.util.uninstallPermanently</span><br><span class="line"><span class="keyword">import</span> java.io.File</span><br><span class="line"><span class="keyword">import</span> java.text.SimpleDateFormat</span><br><span class="line"><span class="keyword">import</span> java.util.Date</span><br><span class="line"><span class="keyword">import</span> java.util.Locale</span><br><span class="line"><span class="keyword">enum</span> <span class="keyword">class</span> <span class="title class_">FlashingStatus</span> {</span><br><span class="line">    FLASHING,</span><br><span class="line">    SUCCESS,</span><br><span class="line">    FAILED</span><br><span class="line">}</span><br><span class="line"><span class="comment">/**</span></span><br><span class="line"><span class="comment"> * <span class="doctag">@author</span> weishu</span></span><br><span class="line"><span class="comment"> * <span class="doctag">@date</span> 2023/1/1.</span></span><br><span class="line"><span class="comment"> */</span></span><br><span class="line"><span class="meta">@OptIn(ExperimentalComposeUiApi::class)</span></span><br><span class="line"><span class="meta">@Composable</span></span><br><span class="line"><span class="meta">@Destination</span></span><br><span class="line"><span class="function"><span class="keyword">fun</span> <span class="title">FlashScreen</span><span class="params">(navigator: <span class="type">DestinationsNavigator</span>, flashIt: <span class="type">FlashIt</span>)</span></span> {</span><br><span class="line">    <span class="keyword">var</span> text <span class="keyword">by</span> rememberSaveable { mutableStateOf(<span class="string">""</span>) }</span><br><span class="line">    <span class="keyword">val</span> logContent = rememberSaveable { StringBuilder() }</span><br><span class="line">    <span class="keyword">var</span> showFloatAction <span class="keyword">by</span> rememberSaveable { mutableStateOf(<span class="literal">false</span>) }</span><br><span class="line">    <span class="keyword">val</span> snackBarHost = LocalSnackbarHost.current</span><br><span class="line">    <span class="keyword">val</span> scope = rememberCoroutineScope()</span><br><span class="line">    <span class="keyword">val</span> scrollState = rememberScrollState()</span><br><span class="line">    <span class="keyword">var</span> flashing <span class="keyword">by</span> rememberSaveable {</span><br><span class="line">        mutableStateOf(FlashingStatus.FLASHING)</span><br><span class="line">    }</span><br><span class="line">    LaunchedEffect(<span class="built_in">Unit</span>) {</span><br><span class="line">        <span class="keyword">if</span> (text.isNotEmpty()) {</span><br><span class="line">            <span class="keyword">return</span><span class="symbol">@LaunchedEffect</span></span><br><span class="line">        }</span><br><span class="line">        withContext(Dispatchers.IO) {</span><br><span class="line">            flashIt(flashIt, onFinish = { showReboot, code -&gt;</span><br><span class="line">                <span class="keyword">if</span> (code != <span class="number">0</span>) {</span><br><span class="line">                    text += <span class="string">"Error: exit code = <span class="variable">$code</span>.\nPlease save and check the log.\n"</span></span><br><span class="line">                }</span><br><span class="line">                <span class="keyword">if</span> (showReboot) {</span><br><span class="line">                    text += <span class="string">"\n\n\n"</span></span><br><span class="line">                    showFloatAction = <span class="literal">true</span></span><br><span class="line">                }</span><br><span class="line">                flashing = <span class="keyword">if</span> (code == <span class="number">0</span>) FlashingStatus.SUCCESS <span class="keyword">else</span> FlashingStatus.FAILED</span><br><span class="line">            }, onStdout = {</span><br><span class="line">                text += <span class="string">"<span class="variable">$it</span>\n"</span></span><br><span class="line">                logContent.append(it).append(<span class="string">"\n"</span>)</span><br><span class="line">            }, onStderr = {</span><br><span class="line">                logContent.append(it).append(<span class="string">"\n"</span>)</span><br><span class="line">            });</span><br><span class="line">        }</span><br><span class="line">    }</span><br><span class="line">    Scaffold(</span><br><span class="line">        topBar = {</span><br><span class="line">            TopBar(</span><br><span class="line">                flashing,</span><br><span class="line">                onBack = {</span><br><span class="line">                    navigator.popBackStack()</span><br><span class="line">                },</span><br><span class="line">                onSave = {</span><br><span class="line">                    scope.launch {</span><br><span class="line">                        <span class="keyword">val</span> format = SimpleDateFormat(<span class="string">"yyyy-MM-dd-HH-mm-ss"</span>, Locale.getDefault())</span><br><span class="line">                        <span class="keyword">val</span> date = format.format(Date())</span><br><span class="line">                        <span class="keyword">val</span> file = File(</span><br><span class="line">                            Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS),</span><br><span class="line">                            <span class="string">"KernelSU_install_log_<span class="subst">${date}</span>.log"</span></span><br><span class="line">                        )</span><br><span class="line">                        file.writeText(logContent.toString())</span><br><span class="line">                        snackBarHost.showSnackbar(<span class="string">"Log saved to <span class="subst">${file.absolutePath}</span>"</span>)</span><br><span class="line">                    }</span><br><span class="line">                }</span><br><span class="line">            )</span><br><span class="line">        },</span><br><span class="line">        floatingActionButton = {</span><br><span class="line">            <span class="keyword">if</span> (showFloatAction) {</span><br><span class="line">                <span class="keyword">val</span> reboot = stringResource(id = R.string.reboot)</span><br><span class="line">                ExtendedFloatingActionButton(</span><br><span class="line">                    onClick = {</span><br><span class="line">                        scope.launch {</span><br><span class="line">                            withContext(Dispatchers.IO) {</span><br><span class="line">                                reboot()</span><br><span class="line">                            }</span><br><span class="line">                        }</span><br><span class="line">                    },</span><br><span class="line">                    icon = { Icon(Icons.Filled.Refresh, reboot) },</span><br><span class="line">                    text = { Text(text = reboot) },</span><br><span class="line">                )</span><br><span class="line">            }</span><br><span class="line">        }</span><br><span class="line">    ) { innerPadding -&gt;</span><br><span class="line">        KeyEventBlocker {</span><br><span class="line">            it.key == Key.VolumeDown || it.key == Key.VolumeUp</span><br><span class="line">        }</span><br><span class="line">        Column(</span><br><span class="line">            modifier = Modifier</span><br><span class="line">                .fillMaxSize(<span class="number">1f</span>)</span><br><span class="line">                .padding(innerPadding)</span><br><span class="line">                .verticalScroll(scrollState),</span><br><span class="line">        ) {</span><br><span class="line">            LaunchedEffect(text) {</span><br><span class="line">                scrollState.animateScrollTo(scrollState.maxValue)</span><br><span class="line">            }</span><br><span class="line">            Text(</span><br><span class="line">                modifier = Modifier.padding(<span class="number">8.</span>dp),</span><br><span class="line">                text = text,</span><br><span class="line">                fontSize = MaterialTheme.typography.bodySmall.fontSize,</span><br><span class="line">                fontFamily = FontFamily.Monospace,</span><br><span class="line">                lineHeight = MaterialTheme.typography.bodySmall.lineHeight,</span><br><span class="line">            )</span><br><span class="line">        }</span><br><span class="line">    }</span><br><span class="line">}</span><br><span class="line"><span class="meta">@Parcelize</span></span><br><span class="line"><span class="keyword">sealed</span> <span class="keyword">class</span> <span class="title class_">FlashIt</span> : <span class="type">Parcelable</span> {</span><br><span class="line">    <span class="keyword">data</span> <span class="keyword">class</span> <span class="title class_">FlashBoot</span>(<span class="keyword">val</span> boot: Uri? = <span class="literal">null</span>, <span class="keyword">val</span> lkm: LkmSelection, <span class="keyword">val</span> ota: <span class="built_in">Boolean</span>) :</span><br><span class="line">        FlashIt()</span><br><span class="line">    <span class="keyword">data</span> <span class="keyword">class</span> <span class="title class_">FlashModule</span>(<span class="keyword">val</span> uri: Uri) : FlashIt()</span><br><span class="line">    <span class="keyword">data</span> <span class="keyword">object</span> FlashRestore : FlashIt()</span><br><span class="line">    <span class="keyword">data</span> <span class="keyword">object</span> FlashUninstall : FlashIt()</span><br><span class="line">}</span><br><span class="line"><span class="function"><span class="keyword">fun</span> <span class="title">flashIt</span><span class="params">(</span></span></span><br><span class="line"><span class="params"><span class="function">    flashIt: <span class="type">FlashIt</span>, onFinish: (<span class="type">Boolean</span>, <span class="type">Int</span>) -&gt; <span class="type">Unit</span>,</span></span></span><br><span class="line"><span class="params"><span class="function">    onStdout: (<span class="type">String</span>) -&gt; <span class="type">Unit</span>,</span></span></span><br><span class="line"><span class="params"><span class="function">    onStderr: (<span class="type">String</span>) -&gt; <span class="type">Unit</span></span></span></span><br><span class="line"><span class="params"><span class="function">)</span></span> {</span><br><span class="line">    <span class="keyword">when</span> (flashIt) {</span><br><span class="line">        <span class="keyword">is</span> FlashIt.FlashBoot -&gt; installBoot(</span><br><span class="line">            flashIt.boot,</span><br><span class="line">            flashIt.lkm,</span><br><span class="line">            flashIt.ota,</span><br><span class="line">            onFinish,</span><br><span class="line">            onStdout,</span><br><span class="line">            onStderr</span><br><span class="line">        )</span><br><span class="line">        <span class="keyword">is</span> FlashIt.FlashModule -&gt; flashModule(flashIt.uri, onFinish, onStdout, onStderr)</span><br><span class="line">        FlashIt.FlashRestore -&gt; restoreBoot(onFinish, onStdout, onStderr)</span><br><span class="line">        FlashIt.FlashUninstall -&gt; uninstallPermanently(onFinish, onStdout, onStderr)</span><br><span class="line">    }</span><br><span class="line">}</span><br><span class="line"><span class="meta">@OptIn(ExperimentalMaterial3Api::class)</span></span><br><span class="line"><span class="meta">@Composable</span></span><br><span class="line"><span class="keyword">private</span> <span class="function"><span class="keyword">fun</span> <span class="title">TopBar</span><span class="params">(status: <span class="type">FlashingStatus</span>, onBack: () -&gt; <span class="type">Unit</span> = {}, onSave: () -&gt; <span class="type">Unit</span> = {})</span></span> {</span><br><span class="line">    TopAppBar(</span><br><span class="line">        title = {</span><br><span class="line">            Text(</span><br><span class="line">                stringResource(</span><br><span class="line">                    <span class="keyword">when</span> (status) {</span><br><span class="line">                        FlashingStatus.FLASHING -&gt; R.string.flashing</span><br><span class="line">                        FlashingStatus.SUCCESS -&gt; R.string.flash_success</span><br><span class="line">                        FlashingStatus.FAILED -&gt; R.string.flash_failed</span><br><span class="line">                    }</span><br><span class="line">                )</span><br><span class="line">            )</span><br><span class="line">        },</span><br><span class="line">        navigationIcon = {</span><br><span class="line">            IconButton(</span><br><span class="line">                onClick = onBack</span><br><span class="line">            ) { Icon(Icons.AutoMirrored.Filled.ArrowBack, contentDescription = <span class="literal">null</span>) }</span><br><span class="line">        },</span><br><span class="line">        actions = {</span><br><span class="line">            IconButton(onClick = onSave) {</span><br><span class="line">                Icon(</span><br><span class="line">                    imageVector = Icons.Filled.Save,</span><br><span class="line">                    contentDescription = <span class="string">"Localized description"</span></span><br><span class="line">                )</span><br><span class="line">            }</span><br><span class="line">        }</span><br><span class="line">    )</span><br><span class="line">}</span><br><span class="line"><span class="meta">@Preview</span></span><br><span class="line"><span class="meta">@Composable</span></span><br><span class="line"><span class="function"><span class="keyword">fun</span> <span class="title">InstallPreview</span><span class="params">()</span></span> {</span><br><span class="line">    InstallScreen(EmptyDestinationsNavigator)</span><br><span class="line">}</span><br></pre></td></tr></tbody></table></figure><h3 id="%E8%A7%A3%E9%87%8A%E8%AF%AD%E8%A8%80" tabindex="-1">解释语言</h3><h4 id="python" tabindex="-1">Python</h4><p>来源：<a href="https://raw.githubusercontent.com/yt-dlp/yt-dlp/master/yt_dlp/downloader/dash.py">https://raw.githubusercontent.com/yt-dlp/yt-dlp/master/yt_dlp/downloader/dash.py</a></p><figure class="highlight python"><table><tbody><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br><span class="line">48</span><br><span class="line">49</span><br><span class="line">50</span><br><span class="line">51</span><br><span class="line">52</span><br><span class="line">53</span><br><span class="line">54</span><br><span class="line">55</span><br><span class="line">56</span><br><span class="line">57</span><br><span class="line">58</span><br><span class="line">59</span><br><span class="line">60</span><br><span class="line">61</span><br><span class="line">62</span><br><span class="line">63</span><br><span class="line">64</span><br><span class="line">65</span><br><span class="line">66</span><br><span class="line">67</span><br><span class="line">68</span><br><span class="line">69</span><br><span class="line">70</span><br><span class="line">71</span><br><span class="line">72</span><br><span class="line">73</span><br><span class="line">74</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">import</span> time</span><br><span class="line"><span class="keyword">import</span> urllib.parse</span><br><span class="line"><span class="keyword">from</span> . <span class="keyword">import</span> get_suitable_downloader</span><br><span class="line"><span class="keyword">from</span> .fragment <span class="keyword">import</span> FragmentFD</span><br><span class="line"><span class="keyword">from</span> ..utils <span class="keyword">import</span> update_url_query, urljoin</span><br><span class="line"></span><br><span class="line"><span class="keyword">class</span> <span class="title class_">DashSegmentsFD</span>(<span class="title class_ inherited__">FragmentFD</span>):</span><br><span class="line">    <span class="string">"""</span></span><br><span class="line"><span class="string">    Download segments in a DASH manifest. External downloaders can take over</span></span><br><span class="line"><span class="string">    the fragment downloads by supporting the 'dash_frag_urls' protocol</span></span><br><span class="line"><span class="string">    """</span></span><br><span class="line">    FD_NAME = <span class="string">'dashsegments'</span></span><br><span class="line">    <span class="keyword">def</span> <span class="title function_">real_download</span>(<span class="params">self, filename, info_dict</span>):</span><br><span class="line">        <span class="keyword">if</span> <span class="string">'http_dash_segments_generator'</span> <span class="keyword">in</span> info_dict[<span class="string">'protocol'</span>].split(<span class="string">'+'</span>):</span><br><span class="line">            real_downloader = <span class="literal">None</span>  <span class="comment"># No external FD can support --live-from-start</span></span><br><span class="line">        <span class="keyword">else</span>:</span><br><span class="line">            <span class="keyword">if</span> info_dict.get(<span class="string">'is_live'</span>):</span><br><span class="line">                <span class="variable language_">self</span>.report_error(<span class="string">'Live DASH videos are not supported'</span>)</span><br><span class="line">            real_downloader = get_suitable_downloader(</span><br><span class="line">                info_dict, <span class="variable language_">self</span>.params, <span class="literal">None</span>, protocol=<span class="string">'dash_frag_urls'</span>, to_stdout=(filename == <span class="string">'-'</span>))</span><br><span class="line">        real_start = time.time()</span><br><span class="line">        requested_formats = [{**info_dict, **fmt} <span class="keyword">for</span> fmt <span class="keyword">in</span> info_dict.get(<span class="string">'requested_formats'</span>, [])]</span><br><span class="line">        args = []</span><br><span class="line">        <span class="keyword">for</span> fmt <span class="keyword">in</span> requested_formats <span class="keyword">or</span> [info_dict]:</span><br><span class="line">            <span class="keyword">try</span>:</span><br><span class="line">                fragment_count = <span class="number">1</span> <span class="keyword">if</span> <span class="variable language_">self</span>.params.get(<span class="string">'test'</span>) <span class="keyword">else</span> <span class="built_in">len</span>(fmt[<span class="string">'fragments'</span>])</span><br><span class="line">            <span class="keyword">except</span> TypeError:</span><br><span class="line">                fragment_count = <span class="literal">None</span></span><br><span class="line">            ctx = {</span><br><span class="line">                <span class="string">'filename'</span>: fmt.get(<span class="string">'filepath'</span>) <span class="keyword">or</span> filename,</span><br><span class="line">                <span class="string">'live'</span>: <span class="string">'is_from_start'</span> <span class="keyword">if</span> fmt.get(<span class="string">'is_from_start'</span>) <span class="keyword">else</span> fmt.get(<span class="string">'is_live'</span>),</span><br><span class="line">                <span class="string">'total_frags'</span>: fragment_count,</span><br><span class="line">            }</span><br><span class="line">            <span class="keyword">if</span> real_downloader:</span><br><span class="line">                <span class="variable language_">self</span>._prepare_external_frag_download(ctx)</span><br><span class="line">            <span class="keyword">else</span>:</span><br><span class="line">                <span class="variable language_">self</span>._prepare_and_start_frag_download(ctx, fmt)</span><br><span class="line">            ctx[<span class="string">'start'</span>] = real_start</span><br><span class="line">            extra_query = <span class="literal">None</span></span><br><span class="line">            extra_param_to_segment_url = info_dict.get(<span class="string">'extra_param_to_segment_url'</span>)</span><br><span class="line">            <span class="keyword">if</span> extra_param_to_segment_url:</span><br><span class="line">                extra_query = urllib.parse.parse_qs(extra_param_to_segment_url)</span><br><span class="line">            fragments_to_download = <span class="variable language_">self</span>._get_fragments(fmt, ctx, extra_query)</span><br><span class="line">            <span class="keyword">if</span> real_downloader:</span><br><span class="line">                <span class="variable language_">self</span>.to_screen(</span><br><span class="line">                    <span class="string">f'[<span class="subst">{self.FD_NAME}</span>] Fragment downloads will be delegated to <span class="subst">{real_downloader.get_basename()}</span>'</span>)</span><br><span class="line">                info_dict[<span class="string">'fragments'</span>] = <span class="built_in">list</span>(fragments_to_download)</span><br><span class="line">                fd = real_downloader(<span class="variable language_">self</span>.ydl, <span class="variable language_">self</span>.params)</span><br><span class="line">                <span class="keyword">return</span> fd.real_download(filename, info_dict)</span><br><span class="line">            args.append([ctx, fragments_to_download, fmt])</span><br><span class="line">        <span class="keyword">return</span> <span class="variable language_">self</span>.download_and_append_fragments_multiple(*args, is_fatal=<span class="keyword">lambda</span> idx: idx == <span class="number">0</span>)</span><br><span class="line">    <span class="keyword">def</span> <span class="title function_">_resolve_fragments</span>(<span class="params">self, fragments, ctx</span>):</span><br><span class="line">        fragments = fragments(ctx) <span class="keyword">if</span> <span class="built_in">callable</span>(fragments) <span class="keyword">else</span> fragments</span><br><span class="line">        <span class="keyword">return</span> [<span class="built_in">next</span>(<span class="built_in">iter</span>(fragments))] <span class="keyword">if</span> <span class="variable language_">self</span>.params.get(<span class="string">'test'</span>) <span class="keyword">else</span> fragments</span><br><span class="line">    <span class="keyword">def</span> <span class="title function_">_get_fragments</span>(<span class="params">self, fmt, ctx, extra_query</span>):</span><br><span class="line">        fragment_base_url = fmt.get(<span class="string">'fragment_base_url'</span>)</span><br><span class="line">        fragments = <span class="variable language_">self</span>._resolve_fragments(fmt[<span class="string">'fragments'</span>], ctx)</span><br><span class="line">        frag_index = <span class="number">0</span></span><br><span class="line">        <span class="keyword">for</span> i, fragment <span class="keyword">in</span> <span class="built_in">enumerate</span>(fragments):</span><br><span class="line">            frag_index += <span class="number">1</span></span><br><span class="line">            <span class="keyword">if</span> frag_index &lt;= ctx[<span class="string">'fragment_index'</span>]:</span><br><span class="line">                <span class="keyword">continue</span></span><br><span class="line">            fragment_url = fragment.get(<span class="string">'url'</span>)</span><br><span class="line">            <span class="keyword">if</span> <span class="keyword">not</span> fragment_url:</span><br><span class="line">                <span class="keyword">assert</span> fragment_base_url</span><br><span class="line">                fragment_url = urljoin(fragment_base_url, fragment[<span class="string">'path'</span>])</span><br><span class="line">            <span class="keyword">if</span> extra_query:</span><br><span class="line">                fragment_url = update_url_query(fragment_url, extra_query)</span><br><span class="line">            <span class="keyword">yield</span> {</span><br><span class="line">                <span class="string">'frag_index'</span>: frag_index,</span><br><span class="line">                <span class="string">'fragment_count'</span>: fragment.get(<span class="string">'fragment_count'</span>),</span><br><span class="line">                <span class="string">'index'</span>: i,</span><br><span class="line">                <span class="string">'url'</span>: fragment_url,</span><br><span class="line">            }</span><br></pre></td></tr></tbody></table></figure><h4 id="shell" tabindex="-1">Shell</h4><p>来源：<a href="https://raw.githubusercontent.com/f-droid/fdroidclient/master/create_ota.sh">https://raw.githubusercontent.com/f-droid/fdroidclient/master/create_ota.sh</a></p><figure class="highlight bash"><table><tbody><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br><span class="line">48</span><br><span class="line">49</span><br><span class="line">50</span><br><span class="line">51</span><br><span class="line">52</span><br><span class="line">53</span><br><span class="line">54</span><br><span class="line">55</span><br><span class="line">56</span><br><span class="line">57</span><br><span class="line">58</span><br><span class="line">59</span><br><span class="line">60</span><br><span class="line">61</span><br><span class="line">62</span><br><span class="line">63</span><br><span class="line">64</span><br><span class="line">65</span><br><span class="line">66</span><br><span class="line">67</span><br><span class="line">68</span><br><span class="line">69</span><br><span class="line">70</span><br><span class="line">71</span><br><span class="line">72</span><br><span class="line">73</span><br><span class="line">74</span><br><span class="line">75</span><br><span class="line">76</span><br><span class="line">77</span><br><span class="line">78</span><br><span class="line">79</span><br><span class="line">80</span><br><span class="line">81</span><br><span class="line">82</span><br><span class="line">83</span><br><span class="line">84</span><br><span class="line">85</span><br><span class="line">86</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta">#!/bin/bash</span></span><br><span class="line"><span class="comment">#</span></span><br><span class="line"><span class="comment"># Script to prepare an update.zip containing F-Droid</span></span><br><span class="line"></span><br><span class="line"><span class="built_in">set</span> -e</span><br><span class="line"></span><br><span class="line">PROG_DIR=$(<span class="built_in">dirname</span> $(<span class="built_in">realpath</span> <span class="variable">$0</span>))</span><br><span class="line"></span><br><span class="line">TMP_DIR=$(<span class="built_in">mktemp</span> -d -t fdroidclient.tmp.XXXXXXXX)</span><br><span class="line"><span class="built_in">trap</span> <span class="string">"rm -rf <span class="variable">$TMP_DIR</span>"</span> EXIT</span><br><span class="line"></span><br><span class="line"><span class="keyword">function</span> <span class="function"><span class="title">error</span></span>() {</span><br><span class="line">    <span class="built_in">echo</span> <span class="string">"*** ERROR: "</span> <span class="variable">$@</span></span><br><span class="line">    usage</span><br><span class="line">}</span><br><span class="line"></span><br><span class="line"><span class="keyword">function</span> <span class="function"><span class="title">usage</span></span>() {</span><br><span class="line">    <span class="built_in">cat</span> &lt;&lt; <span class="string">EOFU</span></span><br><span class="line"><span class="string">Usage: $0 variant</span></span><br><span class="line"><span class="string">where:</span></span><br><span class="line"><span class="string"> - variant is one of: debug, release, or binary</span></span><br><span class="line"><span class="string">EOFU</span></span><br><span class="line">    <span class="built_in">exit</span> 1</span><br><span class="line">}</span><br><span class="line"></span><br><span class="line"><span class="comment"># Parse input</span></span><br><span class="line">VARIANT=<span class="string">"<span class="variable">$1</span>"</span></span><br><span class="line">[[ -z <span class="string">"<span class="variable">$VARIANT</span>"</span> ]] &amp;&amp; error <span class="string">"Missing variant"</span></span><br><span class="line"></span><br><span class="line">VERSIONCODE=<span class="variable">$2</span></span><br><span class="line"></span><br><span class="line">GPG=<span class="string">"gpg --keyring <span class="variable">$PROG_DIR</span>/f-droid.org-signing-key.gpg --no-default-keyring --trust-model always"</span></span><br><span class="line"></span><br><span class="line">GITVERSION=$(git describe --tags --always)</span><br><span class="line"></span><br><span class="line">FDROID_APK=F-Droid.apk</span><br><span class="line"></span><br><span class="line"><span class="comment"># Collect files</span></span><br><span class="line"><span class="built_in">mkdir</span> -p <span class="variable">$TMP_DIR</span>/META-INF/com/google/android/</span><br><span class="line"><span class="built_in">cp</span> app/src/main/scripts/update-binary <span class="variable">$TMP_DIR</span>/META-INF/com/google/android/</span><br><span class="line"></span><br><span class="line"><span class="keyword">if</span> [ <span class="variable">$VARIANT</span> == <span class="string">"binary"</span> ] ; <span class="keyword">then</span></span><br><span class="line">    <span class="keyword">if</span> [ -z <span class="variable">$VERSIONCODE</span> ]; <span class="keyword">then</span></span><br><span class="line">        curl -L https://f-droid.org/<span class="variable">$FDROID_APK</span> &gt; <span class="variable">$TMP_DIR</span>/<span class="variable">$FDROID_APK</span></span><br><span class="line">        curl -L https://f-droid.org/<span class="variable">${FDROID_APK}</span>.asc &gt; <span class="variable">$TMP_DIR</span>/<span class="variable">${FDROID_APK}</span>.asc</span><br><span class="line">    <span class="keyword">else</span></span><br><span class="line">        GITVERSION=<span class="variable">$VERSIONCODE</span></span><br><span class="line">        DL_APK=org.fdroid.fdroid_<span class="variable">${VERSIONCODE}</span>.apk</span><br><span class="line">        curl -L https://f-droid.org/repo/<span class="variable">$DL_APK</span> &gt; <span class="variable">$TMP_DIR</span>/<span class="variable">$FDROID_APK</span></span><br><span class="line">        curl -L https://f-droid.org/repo/<span class="variable">${DL_APK}</span>.asc &gt; <span class="variable">$TMP_DIR</span>/<span class="variable">${FDROID_APK}</span>.asc</span><br><span class="line">    <span class="keyword">fi</span></span><br><span class="line">    <span class="variable">$GPG</span> --verify <span class="variable">$TMP_DIR</span>/<span class="variable">${FDROID_APK}</span>.asc</span><br><span class="line">    <span class="built_in">rm</span> <span class="variable">$TMP_DIR</span>/<span class="variable">${FDROID_APK}</span>.asc</span><br><span class="line"><span class="keyword">else</span></span><br><span class="line">    <span class="built_in">cd</span> <span class="variable">$PROG_DIR</span></span><br><span class="line">    ./gradlew assemble$(<span class="built_in">echo</span> <span class="variable">$VARIANT</span> | <span class="built_in">tr</span> <span class="string">'dr'</span> <span class="string">'DR'</span>)</span><br><span class="line">    OUT_DIR=<span class="variable">$PROG_DIR</span>/app/build/outputs/apk</span><br><span class="line">    <span class="keyword">if</span> [ <span class="variable">$VARIANT</span> == <span class="string">"debug"</span> ]; <span class="keyword">then</span></span><br><span class="line">        <span class="built_in">cp</span> <span class="variable">$OUT_DIR</span>/app-<span class="variable">${VARIANT}</span>.apk \</span><br><span class="line">           <span class="variable">$TMP_DIR</span>/<span class="variable">$FDROID_APK</span></span><br><span class="line">    <span class="keyword">elif</span> [ -f <span class="variable">$OUT_DIR</span>/app-<span class="variable">${VARIANT}</span>-signed.apk ]; <span class="keyword">then</span></span><br><span class="line">        <span class="built_in">cp</span> <span class="variable">$OUT_DIR</span>/app-<span class="variable">${VARIANT}</span>-signed.apk \</span><br><span class="line">           <span class="variable">$TMP_DIR</span>/<span class="variable">$FDROID_APK</span></span><br><span class="line">    <span class="keyword">else</span></span><br><span class="line">        <span class="built_in">cp</span> <span class="variable">$OUT_DIR</span>/app-<span class="variable">${VARIANT}</span>-unsigned.apk \</span><br><span class="line">           <span class="variable">$TMP_DIR</span>/<span class="variable">$FDROID_APK</span></span><br><span class="line">    <span class="keyword">fi</span></span><br><span class="line"><span class="keyword">fi</span></span><br><span class="line"></span><br><span class="line"><span class="comment"># Make zip</span></span><br><span class="line"><span class="keyword">if</span> [ <span class="variable">$VARIANT</span> == <span class="string">"binary"</span> ] ; <span class="keyword">then</span></span><br><span class="line">    ZIPBASE=F-DroidFromBinaries-<span class="variable">${GITVERSION}</span></span><br><span class="line"><span class="keyword">else</span></span><br><span class="line">    ZIPBASE=F-Droid-<span class="variable">${GITVERSION}</span></span><br><span class="line"><span class="keyword">fi</span></span><br><span class="line"><span class="keyword">if</span> [ <span class="variable">$VARIANT</span> == <span class="string">"debug"</span> ]; <span class="keyword">then</span></span><br><span class="line">    ZIP=<span class="variable">${ZIPBASE}</span>-debug.zip</span><br><span class="line"><span class="keyword">else</span></span><br><span class="line">    ZIP=<span class="variable">${ZIPBASE}</span>.zip</span><br><span class="line"><span class="keyword">fi</span></span><br><span class="line">OUT_DIR=<span class="variable">$PROG_DIR</span>/app/build/distributions</span><br><span class="line"><span class="built_in">mkdir</span> -p <span class="variable">$OUT_DIR</span></span><br><span class="line">[ -f <span class="variable">$OUT_DIR</span>/<span class="variable">$ZIP</span> ] &amp;&amp; <span class="built_in">rm</span> -f <span class="variable">$OUT_DIR</span>/<span class="variable">$ZIP</span></span><br><span class="line"><span class="built_in">pushd</span> <span class="variable">$TMP_DIR</span></span><br><span class="line">zip -r <span class="variable">$OUT_DIR</span>/<span class="variable">$ZIP</span> .</span><br><span class="line"><span class="built_in">popd</span></span><br></pre></td></tr></tbody></table></figure><h4 id="javascript" tabindex="-1">JavaScript</h4><p>来源：<a href="https://raw.githubusercontent.com/jerryc127/hexo-theme-butterfly/master/source/js/search/local-search.js">https://raw.githubusercontent.com/jerryc127/hexo-theme-butterfly/master/source/js/search/local-search.js</a></p><figure class="highlight javascript"><table><tbody><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br><span class="line">48</span><br><span class="line">49</span><br><span class="line">50</span><br><span class="line">51</span><br><span class="line">52</span><br><span class="line">53</span><br><span class="line">54</span><br><span class="line">55</span><br><span class="line">56</span><br><span class="line">57</span><br><span class="line">58</span><br><span class="line">59</span><br><span class="line">60</span><br><span class="line">61</span><br><span class="line">62</span><br><span class="line">63</span><br><span class="line">64</span><br><span class="line">65</span><br><span class="line">66</span><br><span class="line">67</span><br><span class="line">68</span><br><span class="line">69</span><br><span class="line">70</span><br><span class="line">71</span><br><span class="line">72</span><br><span class="line">73</span><br><span class="line">74</span><br><span class="line">75</span><br><span class="line">76</span><br><span class="line">77</span><br><span class="line">78</span><br><span class="line">79</span><br><span class="line">80</span><br><span class="line">81</span><br><span class="line">82</span><br><span class="line">83</span><br><span class="line">84</span><br><span class="line">85</span><br><span class="line">86</span><br><span class="line">87</span><br><span class="line">88</span><br><span class="line">89</span><br><span class="line">90</span><br><span class="line">91</span><br><span class="line">92</span><br><span class="line">93</span><br><span class="line">94</span><br><span class="line">95</span><br><span class="line">96</span><br><span class="line">97</span><br><span class="line">98</span><br><span class="line">99</span><br><span class="line">100</span><br><span class="line">101</span><br><span class="line">102</span><br><span class="line">103</span><br><span class="line">104</span><br><span class="line">105</span><br><span class="line">106</span><br><span class="line">107</span><br><span class="line">108</span><br><span class="line">109</span><br><span class="line">110</span><br><span class="line">111</span><br><span class="line">112</span><br><span class="line">113</span><br><span class="line">114</span><br><span class="line">115</span><br><span class="line">116</span><br><span class="line">117</span><br><span class="line">118</span><br><span class="line">119</span><br><span class="line">120</span><br><span class="line">121</span><br><span class="line">122</span><br><span class="line">123</span><br><span class="line">124</span><br><span class="line">125</span><br><span class="line">126</span><br><span class="line">127</span><br><span class="line">128</span><br><span class="line">129</span><br><span class="line">130</span><br><span class="line">131</span><br><span class="line">132</span><br><span class="line">133</span><br><span class="line">134</span><br><span class="line">135</span><br><span class="line">136</span><br><span class="line">137</span><br><span class="line">138</span><br><span class="line">139</span><br><span class="line">140</span><br><span class="line">141</span><br><span class="line">142</span><br><span class="line">143</span><br><span class="line">144</span><br><span class="line">145</span><br><span class="line">146</span><br><span class="line">147</span><br><span class="line">148</span><br><span class="line">149</span><br><span class="line">150</span><br><span class="line">151</span><br><span class="line">152</span><br><span class="line">153</span><br><span class="line">154</span><br><span class="line">155</span><br><span class="line">156</span><br><span class="line">157</span><br><span class="line">158</span><br><span class="line">159</span><br><span class="line">160</span><br><span class="line">161</span><br><span class="line">162</span><br><span class="line">163</span><br><span class="line">164</span><br><span class="line">165</span><br><span class="line">166</span><br><span class="line">167</span><br><span class="line">168</span><br><span class="line">169</span><br><span class="line">170</span><br><span class="line">171</span><br><span class="line">172</span><br><span class="line">173</span><br><span class="line">174</span><br><span class="line">175</span><br><span class="line">176</span><br><span class="line">177</span><br><span class="line">178</span><br><span class="line">179</span><br><span class="line">180</span><br><span class="line">181</span><br><span class="line">182</span><br><span class="line">183</span><br><span class="line">184</span><br><span class="line">185</span><br><span class="line">186</span><br><span class="line">187</span><br><span class="line">188</span><br><span class="line">189</span><br><span class="line">190</span><br><span class="line">191</span><br><span class="line">192</span><br><span class="line">193</span><br><span class="line">194</span><br><span class="line">195</span><br><span class="line">196</span><br><span class="line">197</span><br><span class="line">198</span><br><span class="line">199</span><br><span class="line">200</span><br><span class="line">201</span><br><span class="line">202</span><br><span class="line">203</span><br><span class="line">204</span><br><span class="line">205</span><br><span class="line">206</span><br><span class="line">207</span><br><span class="line">208</span><br><span class="line">209</span><br><span class="line">210</span><br><span class="line">211</span><br><span class="line">212</span><br><span class="line">213</span><br><span class="line">214</span><br><span class="line">215</span><br><span class="line">216</span><br><span class="line">217</span><br><span class="line">218</span><br><span class="line">219</span><br><span class="line">220</span><br><span class="line">221</span><br><span class="line">222</span><br><span class="line">223</span><br><span class="line">224</span><br><span class="line">225</span><br><span class="line">226</span><br><span class="line">227</span><br><span class="line">228</span><br><span class="line">229</span><br><span class="line">230</span><br><span class="line">231</span><br><span class="line">232</span><br><span class="line">233</span><br><span class="line">234</span><br><span class="line">235</span><br><span class="line">236</span><br><span class="line">237</span><br><span class="line">238</span><br><span class="line">239</span><br><span class="line">240</span><br><span class="line">241</span><br><span class="line">242</span><br><span class="line">243</span><br><span class="line">244</span><br><span class="line">245</span><br><span class="line">246</span><br><span class="line">247</span><br><span class="line">248</span><br><span class="line">249</span><br><span class="line">250</span><br><span class="line">251</span><br><span class="line">252</span><br><span class="line">253</span><br><span class="line">254</span><br><span class="line">255</span><br><span class="line">256</span><br><span class="line">257</span><br><span class="line">258</span><br><span class="line">259</span><br><span class="line">260</span><br><span class="line">261</span><br><span class="line">262</span><br><span class="line">263</span><br><span class="line">264</span><br><span class="line">265</span><br><span class="line">266</span><br><span class="line">267</span><br><span class="line">268</span><br><span class="line">269</span><br><span class="line">270</span><br><span class="line">271</span><br><span class="line">272</span><br><span class="line">273</span><br><span class="line">274</span><br><span class="line">275</span><br><span class="line">276</span><br><span class="line">277</span><br><span class="line">278</span><br><span class="line">279</span><br><span class="line">280</span><br><span class="line">281</span><br><span class="line">282</span><br><span class="line">283</span><br><span class="line">284</span><br><span class="line">285</span><br><span class="line">286</span><br><span class="line">287</span><br><span class="line">288</span><br><span class="line">289</span><br><span class="line">290</span><br><span class="line">291</span><br><span class="line">292</span><br><span class="line">293</span><br><span class="line">294</span><br><span class="line">295</span><br><span class="line">296</span><br><span class="line">297</span><br><span class="line">298</span><br><span class="line">299</span><br><span class="line">300</span><br><span class="line">301</span><br><span class="line">302</span><br><span class="line">303</span><br><span class="line">304</span><br><span class="line">305</span><br><span class="line">306</span><br><span class="line">307</span><br><span class="line">308</span><br><span class="line">309</span><br><span class="line">310</span><br><span class="line">311</span><br><span class="line">312</span><br><span class="line">313</span><br><span class="line">314</span><br><span class="line">315</span><br><span class="line">316</span><br><span class="line">317</span><br><span class="line">318</span><br><span class="line">319</span><br><span class="line">320</span><br><span class="line">321</span><br><span class="line">322</span><br><span class="line">323</span><br><span class="line">324</span><br><span class="line">325</span><br><span class="line">326</span><br><span class="line">327</span><br><span class="line">328</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment">/**</span></span><br><span class="line"><span class="comment"> * Refer to hexo-generator-searchdb</span></span><br><span class="line"><span class="comment"> * https://github.com/next-theme/hexo-generator-searchdb/blob/main/dist/search.js</span></span><br><span class="line"><span class="comment"> * Modified by hexo-theme-butterfly</span></span><br><span class="line"><span class="comment"> */</span></span><br><span class="line"><span class="keyword">class</span> <span class="title class_">LocalSearch</span> {</span><br><span class="line">  <span class="title function_">constructor</span> (<span class="params">{</span></span><br><span class="line"><span class="params">    path = <span class="string">''</span>,</span></span><br><span class="line"><span class="params">    <span class="built_in">unescape</span> = <span class="literal">false</span>,</span></span><br><span class="line"><span class="params">    top_n_per_article = <span class="number">1</span></span></span><br><span class="line"><span class="params">  }</span>) {</span><br><span class="line">    <span class="variable language_">this</span>.<span class="property">path</span> = path</span><br><span class="line">    <span class="variable language_">this</span>.<span class="property">unescape</span> = <span class="built_in">unescape</span></span><br><span class="line">    <span class="variable language_">this</span>.<span class="property">top_n_per_article</span> = top_n_per_article</span><br><span class="line">    <span class="variable language_">this</span>.<span class="property">isfetched</span> = <span class="literal">false</span></span><br><span class="line">    <span class="variable language_">this</span>.<span class="property">datas</span> = <span class="literal">null</span></span><br><span class="line">  }</span><br><span class="line">  <span class="title function_">getIndexByWord</span> (words, text, caseSensitive = <span class="literal">false</span>) {</span><br><span class="line">    <span class="keyword">const</span> index = []</span><br><span class="line">    <span class="keyword">const</span> included = <span class="keyword">new</span> <span class="title class_">Set</span>()</span><br><span class="line">    <span class="keyword">if</span> (!caseSensitive) {</span><br><span class="line">      text = text.<span class="title function_">toLowerCase</span>()</span><br><span class="line">    }</span><br><span class="line">    words.<span class="title function_">forEach</span>(<span class="function"><span class="params">word</span> =&gt;</span> {</span><br><span class="line">      <span class="keyword">if</span> (<span class="variable language_">this</span>.<span class="property">unescape</span>) {</span><br><span class="line">        <span class="keyword">const</span> div = <span class="variable language_">document</span>.<span class="title function_">createElement</span>(<span class="string">'div'</span>)</span><br><span class="line">        div.<span class="property">innerText</span> = word</span><br><span class="line">        word = div.<span class="property">innerHTML</span></span><br><span class="line">      }</span><br><span class="line">      <span class="keyword">const</span> wordLen = word.<span class="property">length</span></span><br><span class="line">      <span class="keyword">if</span> (wordLen === <span class="number">0</span>) <span class="keyword">return</span></span><br><span class="line">      <span class="keyword">let</span> startPosition = <span class="number">0</span></span><br><span class="line">      <span class="keyword">let</span> position = -<span class="number">1</span></span><br><span class="line">      <span class="keyword">if</span> (!caseSensitive) {</span><br><span class="line">        word = word.<span class="title function_">toLowerCase</span>()</span><br><span class="line">      }</span><br><span class="line">      <span class="keyword">while</span> ((position = text.<span class="title function_">indexOf</span>(word, startPosition)) &gt; -<span class="number">1</span>) {</span><br><span class="line">        index.<span class="title function_">push</span>({ position, word })</span><br><span class="line">        included.<span class="title function_">add</span>(word)</span><br><span class="line">        startPosition = position + wordLen</span><br><span class="line">      }</span><br><span class="line">    })</span><br><span class="line">    <span class="comment">// Sort index by position of keyword</span></span><br><span class="line">    index.<span class="title function_">sort</span>(<span class="function">(<span class="params">left, right</span>) =&gt;</span> {</span><br><span class="line">      <span class="keyword">if</span> (left.<span class="property">position</span> !== right.<span class="property">position</span>) {</span><br><span class="line">        <span class="keyword">return</span> left.<span class="property">position</span> - right.<span class="property">position</span></span><br><span class="line">      }</span><br><span class="line">      <span class="keyword">return</span> right.<span class="property">word</span>.<span class="property">length</span> - left.<span class="property">word</span>.<span class="property">length</span></span><br><span class="line">    })</span><br><span class="line">    <span class="keyword">return</span> [index, included]</span><br><span class="line">  }</span><br><span class="line">  <span class="comment">// Merge hits into slices</span></span><br><span class="line">  <span class="title function_">mergeIntoSlice</span> (start, end, index) {</span><br><span class="line">    <span class="keyword">let</span> item = index[<span class="number">0</span>]</span><br><span class="line">    <span class="keyword">let</span> { position, word } = item</span><br><span class="line">    <span class="keyword">const</span> hits = []</span><br><span class="line">    <span class="keyword">const</span> count = <span class="keyword">new</span> <span class="title class_">Set</span>()</span><br><span class="line">    <span class="keyword">while</span> (position + word.<span class="property">length</span> &lt;= end &amp;&amp; index.<span class="property">length</span> !== <span class="number">0</span>) {</span><br><span class="line">      count.<span class="title function_">add</span>(word)</span><br><span class="line">      hits.<span class="title function_">push</span>({</span><br><span class="line">        position,</span><br><span class="line">        <span class="attr">length</span>: word.<span class="property">length</span></span><br><span class="line">      })</span><br><span class="line">      <span class="keyword">const</span> wordEnd = position + word.<span class="property">length</span></span><br><span class="line">      <span class="comment">// Move to next position of hit</span></span><br><span class="line">      index.<span class="title function_">shift</span>()</span><br><span class="line">      <span class="keyword">while</span> (index.<span class="property">length</span> !== <span class="number">0</span>) {</span><br><span class="line">        item = index[<span class="number">0</span>]</span><br><span class="line">        position = item.<span class="property">position</span></span><br><span class="line">        word = item.<span class="property">word</span></span><br><span class="line">        <span class="keyword">if</span> (wordEnd &gt; position) {</span><br><span class="line">          index.<span class="title function_">shift</span>()</span><br><span class="line">        } <span class="keyword">else</span> {</span><br><span class="line">          <span class="keyword">break</span></span><br><span class="line">        }</span><br><span class="line">      }</span><br><span class="line">    }</span><br><span class="line">    <span class="keyword">return</span> {</span><br><span class="line">      hits,</span><br><span class="line">      start,</span><br><span class="line">      end,</span><br><span class="line">      <span class="attr">count</span>: count.<span class="property">size</span></span><br><span class="line">    }</span><br><span class="line">  }</span><br><span class="line">  <span class="comment">// Highlight title and content</span></span><br><span class="line">  <span class="title function_">highlightKeyword</span> (val, slice) {</span><br><span class="line">    <span class="keyword">let</span> result = <span class="string">''</span></span><br><span class="line">    <span class="keyword">let</span> index = slice.<span class="property">start</span></span><br><span class="line">    <span class="keyword">for</span> (<span class="keyword">const</span> { position, length } <span class="keyword">of</span> slice.<span class="property">hits</span>) {</span><br><span class="line">      result += val.<span class="title function_">substring</span>(index, position)</span><br><span class="line">      index = position + length</span><br><span class="line">      result += <span class="string">`&lt;mark class="search-keyword"&gt;<span class="subst">${val.substr(position, length)}</span>&lt;/mark&gt;`</span></span><br><span class="line">    }</span><br><span class="line">    result += val.<span class="title function_">substring</span>(index, slice.<span class="property">end</span>)</span><br><span class="line">    <span class="keyword">return</span> result</span><br><span class="line">  }</span><br><span class="line">  <span class="title function_">getResultItems</span> (keywords) {</span><br><span class="line">    <span class="keyword">const</span> resultItems = []</span><br><span class="line">    <span class="variable language_">this</span>.<span class="property">datas</span>.<span class="title function_">forEach</span>(<span class="function">(<span class="params">{ title, content, url }</span>) =&gt;</span> {</span><br><span class="line">      <span class="comment">// The number of different keywords included in the article.</span></span><br><span class="line">      <span class="keyword">const</span> [indexOfTitle, keysOfTitle] = <span class="variable language_">this</span>.<span class="title function_">getIndexByWord</span>(keywords, title)</span><br><span class="line">      <span class="keyword">const</span> [indexOfContent, keysOfContent] = <span class="variable language_">this</span>.<span class="title function_">getIndexByWord</span>(keywords, content)</span><br><span class="line">      <span class="keyword">const</span> includedCount = <span class="keyword">new</span> <span class="title class_">Set</span>([...keysOfTitle, ...keysOfContent]).<span class="property">size</span></span><br><span class="line">      <span class="comment">// Show search results</span></span><br><span class="line">      <span class="keyword">const</span> hitCount = indexOfTitle.<span class="property">length</span> + indexOfContent.<span class="property">length</span></span><br><span class="line">      <span class="keyword">if</span> (hitCount === <span class="number">0</span>) <span class="keyword">return</span></span><br><span class="line">      <span class="keyword">const</span> slicesOfTitle = []</span><br><span class="line">      <span class="keyword">if</span> (indexOfTitle.<span class="property">length</span> !== <span class="number">0</span>) {</span><br><span class="line">        slicesOfTitle.<span class="title function_">push</span>(<span class="variable language_">this</span>.<span class="title function_">mergeIntoSlice</span>(<span class="number">0</span>, title.<span class="property">length</span>, indexOfTitle))</span><br><span class="line">      }</span><br><span class="line">      <span class="keyword">let</span> slicesOfContent = []</span><br><span class="line">      <span class="keyword">while</span> (indexOfContent.<span class="property">length</span> !== <span class="number">0</span>) {</span><br><span class="line">        <span class="keyword">const</span> item = indexOfContent[<span class="number">0</span>]</span><br><span class="line">        <span class="keyword">const</span> { position } = item</span><br><span class="line">        <span class="comment">// Cut out 120 characters. The maxlength of .search-input is 80.</span></span><br><span class="line">        <span class="keyword">const</span> start = <span class="title class_">Math</span>.<span class="title function_">max</span>(<span class="number">0</span>, position - <span class="number">20</span>)</span><br><span class="line">        <span class="keyword">const</span> end = <span class="title class_">Math</span>.<span class="title function_">min</span>(content.<span class="property">length</span>, position + <span class="number">100</span>)</span><br><span class="line">        slicesOfContent.<span class="title function_">push</span>(<span class="variable language_">this</span>.<span class="title function_">mergeIntoSlice</span>(start, end, indexOfContent))</span><br><span class="line">      }</span><br><span class="line">      <span class="comment">// Sort slices in content by included keywords' count and hits' count</span></span><br><span class="line">      slicesOfContent.<span class="title function_">sort</span>(<span class="function">(<span class="params">left, right</span>) =&gt;</span> {</span><br><span class="line">        <span class="keyword">if</span> (left.<span class="property">count</span> !== right.<span class="property">count</span>) {</span><br><span class="line">          <span class="keyword">return</span> right.<span class="property">count</span> - left.<span class="property">count</span></span><br><span class="line">        } <span class="keyword">else</span> <span class="keyword">if</span> (left.<span class="property">hits</span>.<span class="property">length</span> !== right.<span class="property">hits</span>.<span class="property">length</span>) {</span><br><span class="line">          <span class="keyword">return</span> right.<span class="property">hits</span>.<span class="property">length</span> - left.<span class="property">hits</span>.<span class="property">length</span></span><br><span class="line">        }</span><br><span class="line">        <span class="keyword">return</span> left.<span class="property">start</span> - right.<span class="property">start</span></span><br><span class="line">      })</span><br><span class="line">      <span class="comment">// Select top N slices in content</span></span><br><span class="line">      <span class="keyword">const</span> upperBound = <span class="built_in">parseInt</span>(<span class="variable language_">this</span>.<span class="property">top_n_per_article</span>, <span class="number">10</span>)</span><br><span class="line">      <span class="keyword">if</span> (upperBound &gt;= <span class="number">0</span>) {</span><br><span class="line">        slicesOfContent = slicesOfContent.<span class="title function_">slice</span>(<span class="number">0</span>, upperBound)</span><br><span class="line">      }</span><br><span class="line">      <span class="keyword">let</span> resultItem = <span class="string">''</span></span><br><span class="line">      url = <span class="keyword">new</span> <span class="title function_">URL</span>(url, location.<span class="property">origin</span>)</span><br><span class="line">      url.<span class="property">searchParams</span>.<span class="title function_">append</span>(<span class="string">'highlight'</span>, keywords.<span class="title function_">join</span>(<span class="string">' '</span>))</span><br><span class="line">      <span class="keyword">if</span> (slicesOfTitle.<span class="property">length</span> !== <span class="number">0</span>) {</span><br><span class="line">        resultItem += <span class="string">`&lt;div class="local-search-hit-item"&gt;&lt;a href="<span class="subst">${url.href}</span>"&gt;&lt;span class="search-result-title"&gt;<span class="subst">${<span class="variable language_">this</span>.highlightKeyword(title, slicesOfTitle[<span class="number">0</span>])}</span>&lt;/span&gt;`</span></span><br><span class="line">      } <span class="keyword">else</span> {</span><br><span class="line">        resultItem += <span class="string">`&lt;div class="local-search-hit-item"&gt;&lt;a href="<span class="subst">${url.href}</span>"&gt;&lt;span class="search-result-title"&gt;<span class="subst">${title}</span>&lt;/span&gt;`</span></span><br><span class="line">      }</span><br><span class="line">      slicesOfContent.<span class="title function_">forEach</span>(<span class="function"><span class="params">slice</span> =&gt;</span> {</span><br><span class="line">        resultItem += <span class="string">`&lt;p class="search-result"&gt;<span class="subst">${<span class="variable language_">this</span>.highlightKeyword(content, slice)}</span>...&lt;/p&gt;&lt;/a&gt;`</span></span><br><span class="line">      })</span><br><span class="line">      resultItem += <span class="string">'&lt;/div&gt;'</span></span><br><span class="line">      resultItems.<span class="title function_">push</span>({</span><br><span class="line">        <span class="attr">item</span>: resultItem,</span><br><span class="line">        <span class="attr">id</span>: resultItems.<span class="property">length</span>,</span><br><span class="line">        hitCount,</span><br><span class="line">        includedCount</span><br><span class="line">      })</span><br><span class="line">    })</span><br><span class="line">    <span class="keyword">return</span> resultItems</span><br><span class="line">  }</span><br><span class="line">  <span class="title function_">fetchData</span> () {</span><br><span class="line">    <span class="keyword">const</span> isXml = !<span class="variable language_">this</span>.<span class="property">path</span>.<span class="title function_">endsWith</span>(<span class="string">'json'</span>)</span><br><span class="line">    <span class="title function_">fetch</span>(<span class="variable language_">this</span>.<span class="property">path</span>)</span><br><span class="line">      .<span class="title function_">then</span>(<span class="function"><span class="params">response</span> =&gt;</span> response.<span class="title function_">text</span>())</span><br><span class="line">      .<span class="title function_">then</span>(<span class="function"><span class="params">res</span> =&gt;</span> {</span><br><span class="line">        <span class="comment">// Get the contents from search data</span></span><br><span class="line">        <span class="variable language_">this</span>.<span class="property">isfetched</span> = <span class="literal">true</span></span><br><span class="line">        <span class="variable language_">this</span>.<span class="property">datas</span> = isXml</span><br><span class="line">          ? [...<span class="keyword">new</span> <span class="title class_">DOMParser</span>().<span class="title function_">parseFromString</span>(res, <span class="string">'text/xml'</span>).<span class="title function_">querySelectorAll</span>(<span class="string">'entry'</span>)].<span class="title function_">map</span>(<span class="function"><span class="params">element</span> =&gt;</span> ({</span><br><span class="line">              <span class="attr">title</span>: element.<span class="title function_">querySelector</span>(<span class="string">'title'</span>).<span class="property">textContent</span>,</span><br><span class="line">              <span class="attr">content</span>: element.<span class="title function_">querySelector</span>(<span class="string">'content'</span>).<span class="property">textContent</span>,</span><br><span class="line">              <span class="attr">url</span>: element.<span class="title function_">querySelector</span>(<span class="string">'url'</span>).<span class="property">textContent</span></span><br><span class="line">            }))</span><br><span class="line">          : <span class="title class_">JSON</span>.<span class="title function_">parse</span>(res)</span><br><span class="line">        <span class="comment">// Only match articles with non-empty titles</span></span><br><span class="line">        <span class="variable language_">this</span>.<span class="property">datas</span> = <span class="variable language_">this</span>.<span class="property">datas</span>.<span class="title function_">filter</span>(<span class="function"><span class="params">data</span> =&gt;</span> data.<span class="property">title</span>).<span class="title function_">map</span>(<span class="function"><span class="params">data</span> =&gt;</span> {</span><br><span class="line">          data.<span class="property">title</span> = data.<span class="property">title</span>.<span class="title function_">trim</span>()</span><br><span class="line">          data.<span class="property">content</span> = data.<span class="property">content</span> ? data.<span class="property">content</span>.<span class="title function_">trim</span>().<span class="title function_">replace</span>(<span class="regexp">/&lt;[^&gt;]+&gt;/g</span>, <span class="string">''</span>) : <span class="string">''</span></span><br><span class="line">          data.<span class="property">url</span> = <span class="built_in">decodeURIComponent</span>(data.<span class="property">url</span>).<span class="title function_">replace</span>(<span class="regexp">/\/{2,}/g</span>, <span class="string">'/'</span>)</span><br><span class="line">          <span class="keyword">return</span> data</span><br><span class="line">        })</span><br><span class="line">        <span class="comment">// Remove loading animation</span></span><br><span class="line">        <span class="variable language_">window</span>.<span class="title function_">dispatchEvent</span>(<span class="keyword">new</span> <span class="title class_">Event</span>(<span class="string">'search:loaded'</span>))</span><br><span class="line">      })</span><br><span class="line">  }</span><br><span class="line">  <span class="comment">// Highlight by wrapping node in mark elements with the given class name</span></span><br><span class="line">  <span class="title function_">highlightText</span> (node, slice, className) {</span><br><span class="line">    <span class="keyword">const</span> val = node.<span class="property">nodeValue</span></span><br><span class="line">    <span class="keyword">let</span> index = slice.<span class="property">start</span></span><br><span class="line">    <span class="keyword">const</span> children = []</span><br><span class="line">    <span class="keyword">for</span> (<span class="keyword">const</span> { position, length } <span class="keyword">of</span> slice.<span class="property">hits</span>) {</span><br><span class="line">      <span class="keyword">const</span> text = <span class="variable language_">document</span>.<span class="title function_">createTextNode</span>(val.<span class="title function_">substring</span>(index, position))</span><br><span class="line">      index = position + length</span><br><span class="line">      <span class="keyword">const</span> mark = <span class="variable language_">document</span>.<span class="title function_">createElement</span>(<span class="string">'mark'</span>)</span><br><span class="line">      mark.<span class="property">className</span> = className</span><br><span class="line">      mark.<span class="title function_">appendChild</span>(<span class="variable language_">document</span>.<span class="title function_">createTextNode</span>(val.<span class="title function_">substr</span>(position, length)))</span><br><span class="line">      children.<span class="title function_">push</span>(text, mark)</span><br><span class="line">    }</span><br><span class="line">    node.<span class="property">nodeValue</span> = val.<span class="title function_">substring</span>(index, slice.<span class="property">end</span>)</span><br><span class="line">    children.<span class="title function_">forEach</span>(<span class="function"><span class="params">element</span> =&gt;</span> {</span><br><span class="line">      node.<span class="property">parentNode</span>.<span class="title function_">insertBefore</span>(element, node)</span><br><span class="line">    })</span><br><span class="line">  }</span><br><span class="line">  <span class="comment">// Highlight the search words provided in the url in the text</span></span><br><span class="line">  <span class="title function_">highlightSearchWords</span> (body) {</span><br><span class="line">    <span class="keyword">const</span> params = <span class="keyword">new</span> <span class="title function_">URL</span>(location.<span class="property">href</span>).<span class="property">searchParams</span>.<span class="title function_">get</span>(<span class="string">'highlight'</span>)</span><br><span class="line">    <span class="keyword">const</span> keywords = params ? params.<span class="title function_">split</span>(<span class="string">' '</span>) : []</span><br><span class="line">    <span class="keyword">if</span> (!keywords.<span class="property">length</span> || !body) <span class="keyword">return</span></span><br><span class="line">    <span class="keyword">const</span> walk = <span class="variable language_">document</span>.<span class="title function_">createTreeWalker</span>(body, <span class="title class_">NodeFilter</span>.<span class="property">SHOW_TEXT</span>, <span class="literal">null</span>)</span><br><span class="line">    <span class="keyword">const</span> allNodes = []</span><br><span class="line">    <span class="keyword">while</span> (walk.<span class="title function_">nextNode</span>()) {</span><br><span class="line">      <span class="keyword">if</span> (!walk.<span class="property">currentNode</span>.<span class="property">parentNode</span>.<span class="title function_">matches</span>(<span class="string">'button, select, textarea, .mermaid'</span>)) allNodes.<span class="title function_">push</span>(walk.<span class="property">currentNode</span>)</span><br><span class="line">    }</span><br><span class="line">    allNodes.<span class="title function_">forEach</span>(<span class="function"><span class="params">node</span> =&gt;</span> {</span><br><span class="line">      <span class="keyword">const</span> [indexOfNode] = <span class="variable language_">this</span>.<span class="title function_">getIndexByWord</span>(keywords, node.<span class="property">nodeValue</span>)</span><br><span class="line">      <span class="keyword">if</span> (!indexOfNode.<span class="property">length</span>) <span class="keyword">return</span></span><br><span class="line">      <span class="keyword">const</span> slice = <span class="variable language_">this</span>.<span class="title function_">mergeIntoSlice</span>(<span class="number">0</span>, node.<span class="property">nodeValue</span>.<span class="property">length</span>, indexOfNode)</span><br><span class="line">      <span class="variable language_">this</span>.<span class="title function_">highlightText</span>(node, slice, <span class="string">'search-keyword'</span>)</span><br><span class="line">    })</span><br><span class="line">  }</span><br><span class="line">}</span><br><span class="line"><span class="variable language_">window</span>.<span class="title function_">addEventListener</span>(<span class="string">'load'</span>, <span class="function">() =&gt;</span> {</span><br><span class="line"><span class="comment">// Search</span></span><br><span class="line">  <span class="keyword">const</span> { path, top_n_per_article, <span class="built_in">unescape</span>, languages } = <span class="variable constant_">GLOBAL_CONFIG</span>.<span class="property">localSearch</span></span><br><span class="line">  <span class="keyword">const</span> localSearch = <span class="keyword">new</span> <span class="title class_">LocalSearch</span>({</span><br><span class="line">    path,</span><br><span class="line">    top_n_per_article,</span><br><span class="line">    <span class="built_in">unescape</span></span><br><span class="line">  })</span><br><span class="line">  <span class="keyword">const</span> input = <span class="variable language_">document</span>.<span class="title function_">querySelector</span>(<span class="string">'#local-search-input input'</span>)</span><br><span class="line">  <span class="keyword">const</span> statsItem = <span class="variable language_">document</span>.<span class="title function_">getElementById</span>(<span class="string">'local-search-stats-wrap'</span>)</span><br><span class="line">  <span class="keyword">const</span> $loadingStatus = <span class="variable language_">document</span>.<span class="title function_">getElementById</span>(<span class="string">'loading-status'</span>)</span><br><span class="line">  <span class="keyword">const</span> isXml = !path.<span class="title function_">endsWith</span>(<span class="string">'json'</span>)</span><br><span class="line">  <span class="keyword">const</span> <span class="title function_">inputEventFunction</span> = (<span class="params"></span>) =&gt; {</span><br><span class="line">    <span class="keyword">if</span> (!localSearch.<span class="property">isfetched</span>) <span class="keyword">return</span></span><br><span class="line">    <span class="keyword">let</span> searchText = input.<span class="property">value</span>.<span class="title function_">trim</span>().<span class="title function_">toLowerCase</span>()</span><br><span class="line">    isXml &amp;&amp; (searchText = searchText.<span class="title function_">replace</span>(<span class="regexp">/&lt;/g</span>, <span class="string">'&amp;lt;'</span>).<span class="title function_">replace</span>(<span class="regexp">/&gt;/g</span>, <span class="string">'&amp;gt;'</span>))</span><br><span class="line">    <span class="keyword">if</span> (searchText !== <span class="string">''</span>) $loadingStatus.<span class="property">innerHTML</span> = <span class="string">'&lt;i class="fas fa-spinner fa-pulse"&gt;&lt;/i&gt;'</span></span><br><span class="line">    <span class="keyword">const</span> keywords = searchText.<span class="title function_">split</span>(<span class="regexp">/[-\s]+/</span>)</span><br><span class="line">    <span class="keyword">const</span> container = <span class="variable language_">document</span>.<span class="title function_">getElementById</span>(<span class="string">'local-search-results'</span>)</span><br><span class="line">    <span class="keyword">let</span> resultItems = []</span><br><span class="line">    <span class="keyword">if</span> (searchText.<span class="property">length</span> &gt; <span class="number">0</span>) {</span><br><span class="line">    <span class="comment">// Perform local searching</span></span><br><span class="line">      resultItems = localSearch.<span class="title function_">getResultItems</span>(keywords)</span><br><span class="line">    }</span><br><span class="line">    <span class="keyword">if</span> (keywords.<span class="property">length</span> === <span class="number">1</span> &amp;&amp; keywords[<span class="number">0</span>] === <span class="string">''</span>) {</span><br><span class="line">      container.<span class="property">textContent</span> = <span class="string">''</span></span><br><span class="line">      statsItem.<span class="property">textContent</span> = <span class="string">''</span></span><br><span class="line">    } <span class="keyword">else</span> <span class="keyword">if</span> (resultItems.<span class="property">length</span> === <span class="number">0</span>) {</span><br><span class="line">      container.<span class="property">textContent</span> = <span class="string">''</span></span><br><span class="line">      <span class="keyword">const</span> statsDiv = <span class="variable language_">document</span>.<span class="title function_">createElement</span>(<span class="string">'div'</span>)</span><br><span class="line">      statsDiv.<span class="property">className</span> = <span class="string">'search-result-stats'</span></span><br><span class="line">      statsDiv.<span class="property">textContent</span> = languages.<span class="property">hits_empty</span>.<span class="title function_">replace</span>(<span class="regexp">/\$\{query}/</span>, searchText)</span><br><span class="line">      statsItem.<span class="property">innerHTML</span> = statsDiv.<span class="property">outerHTML</span></span><br><span class="line">    } <span class="keyword">else</span> {</span><br><span class="line">      resultItems.<span class="title function_">sort</span>(<span class="function">(<span class="params">left, right</span>) =&gt;</span> {</span><br><span class="line">        <span class="keyword">if</span> (left.<span class="property">includedCount</span> !== right.<span class="property">includedCount</span>) {</span><br><span class="line">          <span class="keyword">return</span> right.<span class="property">includedCount</span> - left.<span class="property">includedCount</span></span><br><span class="line">        } <span class="keyword">else</span> <span class="keyword">if</span> (left.<span class="property">hitCount</span> !== right.<span class="property">hitCount</span>) {</span><br><span class="line">          <span class="keyword">return</span> right.<span class="property">hitCount</span> - left.<span class="property">hitCount</span></span><br><span class="line">        }</span><br><span class="line">        <span class="keyword">return</span> right.<span class="property">id</span> - left.<span class="property">id</span></span><br><span class="line">      })</span><br><span class="line">      <span class="keyword">const</span> stats = languages.<span class="property">hits_stats</span>.<span class="title function_">replace</span>(<span class="regexp">/\$\{hits}/</span>, resultItems.<span class="property">length</span>)</span><br><span class="line">      container.<span class="property">innerHTML</span> = <span class="string">`&lt;div class="search-result-list"&gt;<span class="subst">${resultItems.map(result =&gt; result.item).join(<span class="string">''</span>)}</span>&lt;/div&gt;`</span></span><br><span class="line">      statsItem.<span class="property">innerHTML</span> = <span class="string">`&lt;hr&gt;&lt;div class="search-result-stats"&gt;<span class="subst">${stats}</span>&lt;/div&gt;`</span></span><br><span class="line">      <span class="variable language_">window</span>.<span class="property">pjax</span> &amp;&amp; <span class="variable language_">window</span>.<span class="property">pjax</span>.<span class="title function_">refresh</span>(container)</span><br><span class="line">    }</span><br><span class="line">    $loadingStatus.<span class="property">textContent</span> = <span class="string">''</span></span><br><span class="line">  }</span><br><span class="line">  <span class="keyword">let</span> loadFlag = <span class="literal">false</span></span><br><span class="line">  <span class="keyword">const</span> $searchMask = <span class="variable language_">document</span>.<span class="title function_">getElementById</span>(<span class="string">'search-mask'</span>)</span><br><span class="line">  <span class="keyword">const</span> $searchDialog = <span class="variable language_">document</span>.<span class="title function_">querySelector</span>(<span class="string">'#local-search .search-dialog'</span>)</span><br><span class="line">  <span class="comment">// fix safari</span></span><br><span class="line">  <span class="keyword">const</span> <span class="title function_">fixSafariHeight</span> = (<span class="params"></span>) =&gt; {</span><br><span class="line">    <span class="keyword">if</span> (<span class="variable language_">window</span>.<span class="property">innerWidth</span> &lt; <span class="number">768</span>) {</span><br><span class="line">      $searchDialog.<span class="property">style</span>.<span class="title function_">setProperty</span>(<span class="string">'--search-height'</span>, <span class="variable language_">window</span>.<span class="property">innerHeight</span> + <span class="string">'px'</span>)</span><br><span class="line">    }</span><br><span class="line">  }</span><br><span class="line">  <span class="keyword">const</span> <span class="title function_">openSearch</span> = (<span class="params"></span>) =&gt; {</span><br><span class="line">    <span class="keyword">const</span> bodyStyle = <span class="variable language_">document</span>.<span class="property">body</span>.<span class="property">style</span></span><br><span class="line">    bodyStyle.<span class="property">width</span> = <span class="string">'100%'</span></span><br><span class="line">    bodyStyle.<span class="property">overflow</span> = <span class="string">'hidden'</span></span><br><span class="line">    btf.<span class="title function_">animateIn</span>($searchMask, <span class="string">'to_show 0.5s'</span>)</span><br><span class="line">    btf.<span class="title function_">animateIn</span>($searchDialog, <span class="string">'titleScale 0.5s'</span>)</span><br><span class="line">    <span class="built_in">setTimeout</span>(<span class="function">() =&gt;</span> { input.<span class="title function_">focus</span>() }, <span class="number">300</span>)</span><br><span class="line">    <span class="keyword">if</span> (!loadFlag) {</span><br><span class="line">      !localSearch.<span class="property">isfetched</span> &amp;&amp; localSearch.<span class="title function_">fetchData</span>()</span><br><span class="line">      input.<span class="title function_">addEventListener</span>(<span class="string">'input'</span>, inputEventFunction)</span><br><span class="line">      loadFlag = <span class="literal">true</span></span><br><span class="line">    }</span><br><span class="line">    <span class="comment">// shortcut: ESC</span></span><br><span class="line">    <span class="variable language_">document</span>.<span class="title function_">addEventListener</span>(<span class="string">'keydown'</span>, <span class="keyword">function</span> <span class="title function_">f</span> (<span class="params">event</span>) {</span><br><span class="line">      <span class="keyword">if</span> (event.<span class="property">code</span> === <span class="string">'Escape'</span>) {</span><br><span class="line">        <span class="title function_">closeSearch</span>()</span><br><span class="line">        <span class="variable language_">document</span>.<span class="title function_">removeEventListener</span>(<span class="string">'keydown'</span>, f)</span><br><span class="line">      }</span><br><span class="line">    })</span><br><span class="line">    <span class="title function_">fixSafariHeight</span>()</span><br><span class="line">    <span class="variable language_">window</span>.<span class="title function_">addEventListener</span>(<span class="string">'resize'</span>, fixSafariHeight)</span><br><span class="line">  }</span><br><span class="line">  <span class="keyword">const</span> <span class="title function_">closeSearch</span> = (<span class="params"></span>) =&gt; {</span><br><span class="line">    <span class="keyword">const</span> bodyStyle = <span class="variable language_">document</span>.<span class="property">body</span>.<span class="property">style</span></span><br><span class="line">    bodyStyle.<span class="property">width</span> = <span class="string">''</span></span><br><span class="line">    bodyStyle.<span class="property">overflow</span> = <span class="string">''</span></span><br><span class="line">    btf.<span class="title function_">animateOut</span>($searchDialog, <span class="string">'search_close .5s'</span>)</span><br><span class="line">    btf.<span class="title function_">animateOut</span>($searchMask, <span class="string">'to_hide 0.5s'</span>)</span><br><span class="line">    <span class="variable language_">window</span>.<span class="title function_">removeEventListener</span>(<span class="string">'resize'</span>, fixSafariHeight)</span><br><span class="line">  }</span><br><span class="line">  <span class="keyword">const</span> <span class="title function_">searchClickFn</span> = (<span class="params"></span>) =&gt; {</span><br><span class="line">    btf.<span class="title function_">addEventListenerPjax</span>(<span class="variable language_">document</span>.<span class="title function_">querySelector</span>(<span class="string">'#search-button &gt; .search'</span>), <span class="string">'click'</span>, openSearch)</span><br><span class="line">  }</span><br><span class="line">  <span class="keyword">const</span> <span class="title function_">searchFnOnce</span> = (<span class="params"></span>) =&gt; {</span><br><span class="line">    <span class="variable language_">document</span>.<span class="title function_">querySelector</span>(<span class="string">'#local-search .search-close-button'</span>).<span class="title function_">addEventListener</span>(<span class="string">'click'</span>, closeSearch)</span><br><span class="line">    $searchMask.<span class="title function_">addEventListener</span>(<span class="string">'click'</span>, closeSearch)</span><br><span class="line">    <span class="keyword">if</span> (<span class="variable constant_">GLOBAL_CONFIG</span>.<span class="property">localSearch</span>.<span class="property">preload</span>) {</span><br><span class="line">      localSearch.<span class="title function_">fetchData</span>()</span><br><span class="line">    }</span><br><span class="line">    localSearch.<span class="title function_">highlightSearchWords</span>(<span class="variable language_">document</span>.<span class="title function_">getElementById</span>(<span class="string">'article-container'</span>))</span><br><span class="line">  }</span><br><span class="line">  <span class="variable language_">window</span>.<span class="title function_">addEventListener</span>(<span class="string">'search:loaded'</span>, <span class="function">() =&gt;</span> {</span><br><span class="line">    <span class="keyword">const</span> $loadDataItem = <span class="variable language_">document</span>.<span class="title function_">getElementById</span>(<span class="string">'loading-database'</span>)</span><br><span class="line">    $loadDataItem.<span class="property">nextElementSibling</span>.<span class="property">style</span>.<span class="property">display</span> = <span class="string">'block'</span></span><br><span class="line">    $loadDataItem.<span class="title function_">remove</span>()</span><br><span class="line">  })</span><br><span class="line">  <span class="title function_">searchClickFn</span>()</span><br><span class="line">  <span class="title function_">searchFnOnce</span>()</span><br><span class="line">  <span class="comment">// pjax</span></span><br><span class="line">  <span class="variable language_">window</span>.<span class="title function_">addEventListener</span>(<span class="string">'pjax:complete'</span>, <span class="function">() =&gt;</span> {</span><br><span class="line">    !btf.<span class="title function_">isHidden</span>($searchMask) &amp;&amp; <span class="title function_">closeSearch</span>()</span><br><span class="line">    localSearch.<span class="title function_">highlightSearchWords</span>(<span class="variable language_">document</span>.<span class="title function_">getElementById</span>(<span class="string">'article-container'</span>))</span><br><span class="line">    <span class="title function_">searchClickFn</span>()</span><br><span class="line">  })</span><br><span class="line">})</span><br></pre></td></tr></tbody></table></figure><h3 id="%E6%95%B0%E6%8D%AE%E4%B8%8E%E5%89%8D%E7%AB%AF" tabindex="-1">数据与前端</h3><h4 id="xml" tabindex="-1">XML</h4><p>来源：<a href="https://raw.githubusercontent.com/f-droid/fdroidclient/master/app/lint.xml">https://raw.githubusercontent.com/f-droid/fdroidclient/master/app/lint.xml</a></p><figure class="highlight xml"><table><tbody><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br><span class="line">48</span><br><span class="line">49</span><br><span class="line">50</span><br><span class="line">51</span><br><span class="line">52</span><br><span class="line">53</span><br><span class="line">54</span><br><span class="line">55</span><br><span class="line">56</span><br><span class="line">57</span><br><span class="line">58</span><br><span class="line">59</span><br><span class="line">60</span><br><span class="line">61</span><br><span class="line">62</span><br><span class="line">63</span><br><span class="line">64</span><br><span class="line">65</span><br><span class="line">66</span><br><span class="line">67</span><br><span class="line">68</span><br><span class="line">69</span><br><span class="line">70</span><br><span class="line">71</span><br><span class="line">72</span><br><span class="line">73</span><br><span class="line">74</span><br><span class="line">75</span><br><span class="line">76</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta">&lt;?xml version=<span class="string">"1.0"</span> encoding=<span class="string">"UTF-8"</span>?&gt;</span></span><br><span class="line"><span class="tag">&lt;<span class="name">lint</span>&gt;</span></span><br><span class="line">    <span class="comment">&lt;!-- TODO bump our targetSdkVersion when we are ready for it --&gt;</span></span><br><span class="line">    <span class="tag">&lt;<span class="name">issue</span> <span class="attr">id</span>=<span class="string">"ExpiredTargetSdkVersion"</span> <span class="attr">severity</span>=<span class="string">"ignore"</span> /&gt;</span></span><br><span class="line">    <span class="comment">&lt;!-- TODO This should be handled as part of an overhaul of Bluetooth swap --&gt;</span></span><br><span class="line">    <span class="tag">&lt;<span class="name">issue</span> <span class="attr">id</span>=<span class="string">"MissingPermission"</span> <span class="attr">severity</span>=<span class="string">""</span>&gt;</span></span><br><span class="line">        <span class="tag">&lt;<span class="name">ignore</span> <span class="attr">path</span>=<span class="string">"src/full/java/org/fdroid/fdroid/nearby/BluetoothManager.java"</span> /&gt;</span></span><br><span class="line">        <span class="tag">&lt;<span class="name">ignore</span> <span class="attr">path</span>=<span class="string">"src/full/java/org/fdroid/fdroid/nearby/SwapWorkflowActivity.java"</span> /&gt;</span></span><br><span class="line">    <span class="tag">&lt;/<span class="name">issue</span>&gt;</span></span><br><span class="line">    <span class="comment">&lt;!-- Our translations are crowd-sourced --&gt;</span></span><br><span class="line">    <span class="tag">&lt;<span class="name">issue</span> <span class="attr">id</span>=<span class="string">"MissingTranslation"</span> <span class="attr">severity</span>=<span class="string">"ignore"</span> /&gt;</span></span><br><span class="line">    <span class="tag">&lt;<span class="name">issue</span> <span class="attr">id</span>=<span class="string">"ExtraTranslation"</span> <span class="attr">severity</span>=<span class="string">"warning"</span> /&gt;</span></span><br><span class="line">    <span class="comment">&lt;!-- to make CI fail on errors until this is fixed</span></span><br><span class="line"><span class="comment">         https://github.com/rtyley/spongycastle/issues/7 --&gt;</span></span><br><span class="line">    <span class="tag">&lt;<span class="name">issue</span> <span class="attr">id</span>=<span class="string">"InvalidPackage"</span> <span class="attr">severity</span>=<span class="string">"warning"</span> /&gt;</span></span><br><span class="line">    <span class="tag">&lt;<span class="name">issue</span> <span class="attr">id</span>=<span class="string">"ImpliedQuantity"</span> <span class="attr">severity</span>=<span class="string">"error"</span> /&gt;</span></span><br><span class="line">    <span class="tag">&lt;<span class="name">issue</span> <span class="attr">id</span>=<span class="string">"DefaultLocale"</span> <span class="attr">severity</span>=<span class="string">"error"</span> /&gt;</span></span><br><span class="line">    <span class="tag">&lt;<span class="name">issue</span> <span class="attr">id</span>=<span class="string">"SimpleDateFormat"</span> <span class="attr">severity</span>=<span class="string">"error"</span> /&gt;</span></span><br><span class="line">    <span class="tag">&lt;<span class="name">issue</span> <span class="attr">id</span>=<span class="string">"NewApi"</span> <span class="attr">severity</span>=<span class="string">"error"</span> /&gt;</span></span><br><span class="line">    <span class="tag">&lt;<span class="name">issue</span> <span class="attr">id</span>=<span class="string">"InlinedApi"</span> <span class="attr">severity</span>=<span class="string">"error"</span> /&gt;</span></span><br><span class="line">    <span class="comment">&lt;!-- These are important to us, so promote from warning to error --&gt;</span></span><br><span class="line">    <span class="tag">&lt;<span class="name">issue</span> <span class="attr">id</span>=<span class="string">"UnusedResources"</span> <span class="attr">severity</span>=<span class="string">"error"</span>&gt;</span></span><br><span class="line">        <span class="tag">&lt;<span class="name">ignore</span> <span class="attr">path</span>=<span class="string">"src/main/res/drawable/category_**.png"</span> /&gt;</span></span><br><span class="line">        <span class="tag">&lt;<span class="name">ignore</span> <span class="attr">path</span>=<span class="string">"src/main/res/values/dimens.xml"</span> /&gt;</span></span><br><span class="line">        <span class="tag">&lt;<span class="name">ignore</span> <span class="attr">path</span>=<span class="string">"src/main/res/values/styles.xml"</span> /&gt;</span></span><br><span class="line">        <span class="tag">&lt;<span class="name">ignore</span> <span class="attr">path</span>=<span class="string">"src/full/res/values/styles.xml"</span> /&gt;</span></span><br><span class="line">        <span class="comment">&lt;!-- keep a single strings.xml for all build flavors --&gt;</span></span><br><span class="line">        <span class="tag">&lt;<span class="name">ignore</span> <span class="attr">path</span>=<span class="string">"src/main/res/values**/strings.xml"</span> /&gt;</span></span><br><span class="line">    <span class="tag">&lt;/<span class="name">issue</span>&gt;</span></span><br><span class="line">    <span class="tag">&lt;<span class="name">issue</span> <span class="attr">id</span>=<span class="string">"AppCompatMethod"</span> <span class="attr">severity</span>=<span class="string">"error"</span> /&gt;</span></span><br><span class="line">    <span class="tag">&lt;<span class="name">issue</span> <span class="attr">id</span>=<span class="string">"NestedScrolling"</span> <span class="attr">severity</span>=<span class="string">"error"</span> /&gt;</span></span><br><span class="line">    <span class="tag">&lt;<span class="name">issue</span> <span class="attr">id</span>=<span class="string">"Typos"</span> <span class="attr">severity</span>=<span class="string">"error"</span> /&gt;</span></span><br><span class="line">    <span class="tag">&lt;<span class="name">issue</span> <span class="attr">id</span>=<span class="string">"StringFormatCount"</span> <span class="attr">severity</span>=<span class="string">"error"</span> /&gt;</span></span><br><span class="line">    <span class="tag">&lt;<span class="name">issue</span> <span class="attr">id</span>=<span class="string">"UnsafeProtectedBroadcastReceiver"</span> <span class="attr">severity</span>=<span class="string">"error"</span> /&gt;</span></span><br><span class="line">    <span class="tag">&lt;<span class="name">issue</span> <span class="attr">id</span>=<span class="string">"GetInstance"</span> <span class="attr">severity</span>=<span class="string">"error"</span> /&gt;</span></span><br><span class="line">    <span class="tag">&lt;<span class="name">issue</span> <span class="attr">id</span>=<span class="string">"PackageManagerGetSignatures"</span> <span class="attr">severity</span>=<span class="string">"error"</span> /&gt;</span></span><br><span class="line">    <span class="tag">&lt;<span class="name">issue</span> <span class="attr">id</span>=<span class="string">"HardwareIds"</span> <span class="attr">severity</span>=<span class="string">"error"</span> /&gt;</span></span><br><span class="line">    <span class="tag">&lt;<span class="name">issue</span> <span class="attr">id</span>=<span class="string">"TrustAllX509TrustManager"</span> <span class="attr">severity</span>=<span class="string">"error"</span>&gt;</span></span><br><span class="line">        <span class="comment">&lt;!-- these come from included libraries --&gt;</span></span><br><span class="line">        <span class="tag">&lt;<span class="name">ignore</span> <span class="attr">path</span>=<span class="string">"org/apache/commons/net/ftp/FTPSTrustManager.class"</span> /&gt;</span></span><br><span class="line">        <span class="tag">&lt;<span class="name">ignore</span> <span class="attr">path</span>=<span class="string">"org/bouncycastle/est/jcajce/JcaJceUtils$1.class"</span> /&gt;</span></span><br><span class="line">        <span class="tag">&lt;<span class="name">ignore</span> <span class="attr">path</span>=<span class="string">"org/bouncycastle/est/jcajce/JcaJceUtils$2.class"</span> /&gt;</span></span><br><span class="line">        <span class="tag">&lt;<span class="name">ignore</span> <span class="attr">path</span>=<span class="string">"org/apache/commons/net/util/TrustManagerUtils$TrustManager.class"</span> /&gt;</span></span><br><span class="line">        <span class="tag">&lt;<span class="name">ignore</span> <span class="attr">path</span>=<span class="string">"\*/bcpkix-jdk15to18-1.71.jar"</span> /&gt;</span></span><br><span class="line">        <span class="tag">&lt;<span class="name">ignore</span> <span class="attr">path</span>=<span class="string">"\*/commons-net-3.6.jar"</span> /&gt;</span></span><br><span class="line">    <span class="tag">&lt;/<span class="name">issue</span>&gt;</span></span><br><span class="line">    <span class="tag">&lt;<span class="name">issue</span> <span class="attr">id</span>=<span class="string">"PluralsCandidate"</span> <span class="attr">severity</span>=<span class="string">"error"</span> /&gt;</span></span><br><span class="line">    <span class="tag">&lt;<span class="name">issue</span> <span class="attr">id</span>=<span class="string">"HardcodedText"</span> <span class="attr">severity</span>=<span class="string">"error"</span> /&gt;</span></span><br><span class="line">    <span class="tag">&lt;<span class="name">issue</span> <span class="attr">id</span>=<span class="string">"RtlCompat"</span> <span class="attr">severity</span>=<span class="string">"error"</span> /&gt;</span></span><br><span class="line">    <span class="tag">&lt;<span class="name">issue</span> <span class="attr">id</span>=<span class="string">"RtlEnabled"</span> <span class="attr">severity</span>=<span class="string">"error"</span> /&gt;</span></span><br><span class="line">    <span class="comment">&lt;!-- both the correct and deprecated locales need to be present for</span></span><br><span class="line"><span class="comment">         them to be recognized on all devices --&gt;</span></span><br><span class="line">    <span class="tag">&lt;<span class="name">issue</span> <span class="attr">id</span>=<span class="string">"LocaleFolder"</span> <span class="attr">severity</span>=<span class="string">"error"</span>&gt;</span></span><br><span class="line">        <span class="tag">&lt;<span class="name">ignore</span> <span class="attr">path</span>=<span class="string">"src/main/res/values-he"</span> /&gt;</span></span><br><span class="line">        <span class="tag">&lt;<span class="name">ignore</span> <span class="attr">path</span>=<span class="string">"src/main/res/values-id"</span> /&gt;</span></span><br><span class="line">    <span class="tag">&lt;/<span class="name">issue</span>&gt;</span></span><br><span class="line">    <span class="comment">&lt;!-- Weblate doesn't handle these yet: https://github.com/WeblateOrg/weblate/issues/7520 --&gt;</span></span><br><span class="line">    <span class="tag">&lt;<span class="name">issue</span> <span class="attr">id</span>=<span class="string">"MissingQuantity"</span> <span class="attr">severity</span>=<span class="string">"error"</span>&gt;</span></span><br><span class="line">        <span class="tag">&lt;<span class="name">ignore</span> <span class="attr">path</span>=<span class="string">"src/main/res/values-cs"</span> /&gt;</span></span><br><span class="line">        <span class="tag">&lt;<span class="name">ignore</span> <span class="attr">path</span>=<span class="string">"src/main/res/values-fr"</span> /&gt;</span></span><br><span class="line">        <span class="tag">&lt;<span class="name">ignore</span> <span class="attr">path</span>=<span class="string">"src/main/res/values-lt"</span> /&gt;</span></span><br><span class="line">        <span class="tag">&lt;<span class="name">ignore</span> <span class="attr">path</span>=<span class="string">"src/main/res/values-sk"</span> /&gt;</span></span><br><span class="line">    <span class="tag">&lt;/<span class="name">issue</span>&gt;</span></span><br><span class="line">    <span class="tag">&lt;<span class="name">issue</span> <span class="attr">id</span>=<span class="string">"SetWorldReadable"</span> <span class="attr">severity</span>=<span class="string">"error"</span>&gt;</span></span><br><span class="line">        <span class="tag">&lt;<span class="name">ignore</span> <span class="attr">path</span>=<span class="string">"src/main/java/org/fdroid/fdroid/installer/ApkFileProvider.java"</span> /&gt;</span></span><br><span class="line">    <span class="tag">&lt;/<span class="name">issue</span>&gt;</span></span><br><span class="line">    <span class="tag">&lt;<span class="name">issue</span> <span class="attr">id</span>=<span class="string">"ProtectedPermissions"</span> <span class="attr">severity</span>=<span class="string">"error"</span>&gt;</span></span><br><span class="line">        <span class="tag">&lt;<span class="name">ignore</span> <span class="attr">path</span>=<span class="string">"src/debug/AndroidManifest.xml"</span> /&gt;</span></span><br><span class="line">        <span class="tag">&lt;<span class="name">ignore</span> <span class="attr">path</span>=<span class="string">"src/full/AndroidManifest.xml"</span> /&gt;</span></span><br><span class="line">    <span class="tag">&lt;/<span class="name">issue</span>&gt;</span></span><br><span class="line">    <span class="comment">&lt;!-- these should be fixed, but it'll be a chunk of work --&gt;</span></span><br><span class="line">    <span class="tag">&lt;<span class="name">issue</span> <span class="attr">id</span>=<span class="string">"SetTextI18n"</span> <span class="attr">severity</span>=<span class="string">"error"</span>&gt;</span></span><br><span class="line">        <span class="tag">&lt;<span class="name">ignore</span> <span class="attr">path</span>=<span class="string">"src/main/java/org/fdroid/fdroid/views/AppDetailsRecyclerViewAdapter.java"</span> /&gt;</span></span><br><span class="line">        <span class="tag">&lt;<span class="name">ignore</span> <span class="attr">path</span>=<span class="string">"src/main/java/org/fdroid/fdroid/views/apps/AppListItemController.java"</span> /&gt;</span></span><br><span class="line">    <span class="tag">&lt;/<span class="name">issue</span>&gt;</span></span><br><span class="line"><span class="tag">&lt;/<span class="name">lint</span>&gt;</span></span><br></pre></td></tr></tbody></table></figure><h4 id="stylus" tabindex="-1">Stylus</h4><p>来源：<a href="https://raw.githubusercontent.com/jerryc127/hexo-theme-butterfly/master/source/css/_layout/post.styl">https://raw.githubusercontent.com/jerryc127/hexo-theme-butterfly/master/source/css/_layout/post.styl</a></p><figure class="highlight stylus"><table><tbody><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br><span class="line">48</span><br><span class="line">49</span><br><span class="line">50</span><br><span class="line">51</span><br><span class="line">52</span><br><span class="line">53</span><br><span class="line">54</span><br><span class="line">55</span><br><span class="line">56</span><br><span class="line">57</span><br><span class="line">58</span><br><span class="line">59</span><br><span class="line">60</span><br><span class="line">61</span><br><span class="line">62</span><br><span class="line">63</span><br><span class="line">64</span><br><span class="line">65</span><br><span class="line">66</span><br><span class="line">67</span><br><span class="line">68</span><br><span class="line">69</span><br><span class="line">70</span><br><span class="line">71</span><br><span class="line">72</span><br><span class="line">73</span><br><span class="line">74</span><br><span class="line">75</span><br><span class="line">76</span><br><span class="line">77</span><br><span class="line">78</span><br><span class="line">79</span><br><span class="line">80</span><br><span class="line">81</span><br><span class="line">82</span><br><span class="line">83</span><br><span class="line">84</span><br><span class="line">85</span><br><span class="line">86</span><br><span class="line">87</span><br><span class="line">88</span><br><span class="line">89</span><br><span class="line">90</span><br><span class="line">91</span><br><span class="line">92</span><br><span class="line">93</span><br><span class="line">94</span><br><span class="line">95</span><br><span class="line">96</span><br><span class="line">97</span><br><span class="line">98</span><br><span class="line">99</span><br><span class="line">100</span><br><span class="line">101</span><br><span class="line">102</span><br><span class="line">103</span><br><span class="line">104</span><br><span class="line">105</span><br><span class="line">106</span><br><span class="line">107</span><br><span class="line">108</span><br><span class="line">109</span><br><span class="line">110</span><br><span class="line">111</span><br><span class="line">112</span><br><span class="line">113</span><br><span class="line">114</span><br><span class="line">115</span><br><span class="line">116</span><br><span class="line">117</span><br><span class="line">118</span><br><span class="line">119</span><br><span class="line">120</span><br><span class="line">121</span><br><span class="line">122</span><br><span class="line">123</span><br><span class="line">124</span><br><span class="line">125</span><br><span class="line">126</span><br><span class="line">127</span><br><span class="line">128</span><br><span class="line">129</span><br><span class="line">130</span><br><span class="line">131</span><br><span class="line">132</span><br><span class="line">133</span><br><span class="line">134</span><br><span class="line">135</span><br><span class="line">136</span><br><span class="line">137</span><br><span class="line">138</span><br><span class="line">139</span><br><span class="line">140</span><br><span class="line">141</span><br><span class="line">142</span><br><span class="line">143</span><br><span class="line">144</span><br><span class="line">145</span><br><span class="line">146</span><br><span class="line">147</span><br><span class="line">148</span><br><span class="line">149</span><br><span class="line">150</span><br><span class="line">151</span><br><span class="line">152</span><br><span class="line">153</span><br><span class="line">154</span><br><span class="line">155</span><br><span class="line">156</span><br><span class="line">157</span><br><span class="line">158</span><br><span class="line">159</span><br><span class="line">160</span><br><span class="line">161</span><br><span class="line">162</span><br><span class="line">163</span><br><span class="line">164</span><br><span class="line">165</span><br><span class="line">166</span><br><span class="line">167</span><br><span class="line">168</span><br><span class="line">169</span><br><span class="line">170</span><br><span class="line">171</span><br><span class="line">172</span><br><span class="line">173</span><br><span class="line">174</span><br><span class="line">175</span><br><span class="line">176</span><br><span class="line">177</span><br><span class="line">178</span><br><span class="line">179</span><br><span class="line">180</span><br><span class="line">181</span><br><span class="line">182</span><br><span class="line">183</span><br><span class="line">184</span><br><span class="line">185</span><br><span class="line">186</span><br><span class="line">187</span><br><span class="line">188</span><br><span class="line">189</span><br><span class="line">190</span><br><span class="line">191</span><br><span class="line">192</span><br><span class="line">193</span><br><span class="line">194</span><br><span class="line">195</span><br><span class="line">196</span><br><span class="line">197</span><br><span class="line">198</span><br><span class="line">199</span><br><span class="line">200</span><br><span class="line">201</span><br><span class="line">202</span><br><span class="line">203</span><br><span class="line">204</span><br><span class="line">205</span><br><span class="line">206</span><br><span class="line">207</span><br><span class="line">208</span><br></pre></td><td class="code"><pre><span class="line"><span class="function"><span class="title">beautify</span><span class="params">()</span></span></span><br><span class="line">  <span class="built_in">headStyle</span>(fontsize)</span><br><span class="line">    <span class="attribute">padding-left</span>: <span class="built_in">unit</span>(fontsize + <span class="number">8</span>, <span class="string">'px'</span>)</span><br><span class="line">    <span class="selector-pseudo">&amp;:before</span></span><br><span class="line">      <span class="attribute">font-size</span>: <span class="built_in">unit</span>(fontsize - <span class="number">2</span>, <span class="string">'px'</span>)</span><br><span class="line">    <span class="selector-pseudo">&amp;:hover</span></span><br><span class="line">      <span class="attribute">padding-left</span>: <span class="built_in">unit</span>(fontsize + <span class="number">12</span>, <span class="string">'px'</span>)</span><br><span class="line">  <span class="selector-tag">h1</span>,</span><br><span class="line">  <span class="selector-tag">h2</span>,</span><br><span class="line">  <span class="selector-tag">h3</span>,</span><br><span class="line">  <span class="selector-tag">h4</span>,</span><br><span class="line">  <span class="selector-tag">h5</span>,</span><br><span class="line">  <span class="selector-tag">h6</span></span><br><span class="line">    <span class="attribute">transition</span>: all .<span class="number">2s</span> ease-out</span><br><span class="line">    <span class="selector-pseudo">&amp;:before</span></span><br><span class="line">      <span class="attribute">position</span>: absolute</span><br><span class="line">      <span class="attribute">top</span>: <span class="built_in">calc</span>(<span class="number">50%</span> - <span class="number">7px</span>)</span><br><span class="line">      <span class="attribute">color</span>: <span class="variable">$title</span>-prefix-icon-color</span><br><span class="line">      <span class="attribute">content</span>: <span class="variable">$title</span>-prefix-icon</span><br><span class="line">      <span class="attribute">left</span>: <span class="number">0</span></span><br><span class="line">      <span class="attribute">line-height</span>: <span class="number">1</span></span><br><span class="line">      <span class="attribute">transition</span>: all .<span class="number">2s</span> ease-out</span><br><span class="line">      <span class="keyword">@extend</span> <span class="selector-class">.fontawesomeIcon</span></span><br><span class="line">    <span class="selector-pseudo">&amp;:hover</span></span><br><span class="line">      <span class="selector-pseudo">&amp;:before</span></span><br><span class="line">        <span class="attribute">color</span>: <span class="variable">$light</span>-blue</span><br><span class="line">  <span class="selector-tag">h1</span></span><br><span class="line">    <span class="built_in">headStyle</span>(<span class="number">20</span>)</span><br><span class="line">  <span class="selector-tag">h2</span></span><br><span class="line">    <span class="built_in">headStyle</span>(<span class="number">18</span>)</span><br><span class="line">  <span class="selector-tag">h3</span></span><br><span class="line">    <span class="built_in">headStyle</span>(<span class="number">16</span>)</span><br><span class="line">  <span class="selector-tag">h4</span></span><br><span class="line">    <span class="built_in">headStyle</span>(<span class="number">14</span>)</span><br><span class="line">  <span class="selector-tag">h5</span></span><br><span class="line">    <span class="built_in">headStyle</span>(<span class="number">12</span>)</span><br><span class="line">  <span class="selector-tag">h6</span></span><br><span class="line">    <span class="built_in">headStyle</span>(<span class="number">12</span>)</span><br><span class="line">  <span class="selector-tag">ol</span>,</span><br><span class="line">  <span class="selector-tag">ul</span></span><br><span class="line">    <span class="selector-tag">p</span></span><br><span class="line">      <span class="attribute">margin</span>: <span class="number">0</span> <span class="number">0</span> <span class="number">8px</span></span><br><span class="line">  <span class="selector-tag">li</span></span><br><span class="line">    <span class="selector-pseudo">&amp;::marker</span></span><br><span class="line">      <span class="attribute">color</span>: <span class="variable">$light</span>-blue</span><br><span class="line">      <span class="attribute">font-weight</span>: <span class="number">600</span></span><br><span class="line">      <span class="attribute">font-size</span>: <span class="number">1.05em</span></span><br><span class="line">    <span class="selector-pseudo">&amp;:hover</span></span><br><span class="line">      <span class="selector-pseudo">&amp;::marker</span></span><br><span class="line">        <span class="attribute">color</span>: <span class="built_in">var</span>(--pseudo-hover)</span><br><span class="line">  <span class="selector-tag">ul</span> &gt; <span class="selector-tag">li</span></span><br><span class="line">    <span class="attribute">list-style-type</span>: circle</span><br><span class="line"></span><br><span class="line">  hr</span><br><span class="line">    <span class="keyword">@extend</span> <span class="selector-class">.custom-hr</span></span><br><span class="line"><span class="selector-id">#article-container</span></span><br><span class="line">  <span class="attribute">word-wrap</span>: break-word</span><br><span class="line">  <span class="attribute">overflow-wrap</span>: break-word</span><br><span class="line">  <span class="keyword">if</span> <span class="built_in">hexo-config</span>(<span class="string">'text_align_justify'</span>)</span><br><span class="line">    <span class="attribute">text-align</span>: justify</span><br><span class="line">  <span class="selector-tag">a</span></span><br><span class="line">    <span class="attribute">color</span>: <span class="variable">$theme</span>-link-color</span><br><span class="line">    <span class="selector-pseudo">&amp;:hover</span></span><br><span class="line">      <span class="attribute">text-decoration</span>: underline</span><br><span class="line">  <span class="selector-tag">img</span></span><br><span class="line">    <span class="attribute">display</span>: block</span><br><span class="line">    <span class="attribute">margin</span>: <span class="number">0</span> auto <span class="number">20px</span></span><br><span class="line">    <span class="attribute">max-width</span>: <span class="number">100%</span></span><br><span class="line">    <span class="attribute">transition</span>: filter <span class="number">375ms</span> ease-in .<span class="number">2s</span></span><br><span class="line">  <span class="selector-tag">p</span></span><br><span class="line">    <span class="attribute">margin</span>: <span class="number">0</span> <span class="number">0</span> <span class="number">16px</span></span><br><span class="line">  <span class="selector-tag">iframe</span></span><br><span class="line">    <span class="attribute">margin</span>: <span class="number">0</span> <span class="number">0</span> <span class="number">20px</span></span><br><span class="line">  <span class="selector-tag">kbd</span></span><br><span class="line">    <span class="attribute">margin</span>: <span class="number">0</span> <span class="number">3px</span></span><br><span class="line">    <span class="attribute">padding</span>: <span class="number">3px</span> <span class="number">5px</span></span><br><span class="line">    <span class="attribute">border</span>: <span class="number">1px</span> solid <span class="number">#b4b4b4</span></span><br><span class="line">    <span class="attribute">border-radius</span>: <span class="number">3px</span></span><br><span class="line">    <span class="attribute">background-color</span>: <span class="number">#f8f8f8</span></span><br><span class="line">    <span class="attribute">box-shadow</span>: <span class="number">0</span> <span class="number">1px</span> <span class="number">3px</span> <span class="built_in">rgba</span>(<span class="number">0</span>, <span class="number">0</span>, <span class="number">0</span>, .<span class="number">25</span>), <span class="number">0</span> <span class="number">2px</span> <span class="number">1px</span> <span class="number">0</span> <span class="built_in">rgba</span>(<span class="number">255</span>, <span class="number">255</span>, <span class="number">255</span>, .<span class="number">6</span>) inset</span><br><span class="line">    <span class="attribute">color</span>: <span class="number">#34495e</span></span><br><span class="line">    <span class="attribute">white-space</span>: nowrap</span><br><span class="line">    <span class="attribute">font-weight</span>: <span class="number">600</span></span><br><span class="line">    <span class="attribute">font-size</span>: .<span class="number">9em</span></span><br><span class="line">    <span class="attribute">font-family</span>: Monaco, <span class="string">'Ubuntu Mono'</span>, monospace</span><br><span class="line">    <span class="attribute">line-height</span>: <span class="number">1em</span></span><br><span class="line">  <span class="keyword">if</span> <span class="built_in">hexo-config</span>(<span class="string">'anchor.click_to_scroll'</span>)</span><br><span class="line">    <span class="selector-tag">h1</span>,</span><br><span class="line">    <span class="selector-tag">h2</span>,</span><br><span class="line">    <span class="selector-tag">h3</span>,</span><br><span class="line">    <span class="selector-tag">h4</span>,</span><br><span class="line">    <span class="selector-tag">h5</span>,</span><br><span class="line">    <span class="selector-tag">h6</span></span><br><span class="line">      <span class="attribute">width</span>: fit-content</span><br><span class="line">      <span class="selector-tag">a</span><span class="selector-pseudo">:not</span>(.headerlink)</span><br><span class="line">        <span class="attribute">position</span> relative</span><br><span class="line">        <span class="attribute">z-index</span> <span class="number">10</span></span><br><span class="line">      <span class="selector-tag">a</span><span class="selector-class">.headerlink</span></span><br><span class="line">        <span class="attribute">position</span>: absolute</span><br><span class="line">        <span class="attribute">top</span>: <span class="number">0</span></span><br><span class="line">        <span class="attribute">right</span>: <span class="number">0</span></span><br><span class="line">        <span class="attribute">left</span> <span class="number">0</span></span><br><span class="line">        <span class="attribute">bottom</span>: <span class="number">0</span></span><br><span class="line">        <span class="attribute">width</span> <span class="number">100%</span></span><br><span class="line">        <span class="attribute">height</span>: <span class="number">100%</span></span><br><span class="line">  <span class="selector-tag">ol</span>,</span><br><span class="line">  <span class="selector-tag">ul</span></span><br><span class="line">    <span class="selector-tag">ol</span>,</span><br><span class="line">    <span class="selector-tag">ul</span></span><br><span class="line">      <span class="attribute">padding-left</span>: <span class="number">20px</span></span><br><span class="line">    <span class="selector-tag">li</span></span><br><span class="line">      <span class="attribute">margin</span>: <span class="number">4px</span> <span class="number">0</span></span><br><span class="line">    <span class="selector-tag">p</span></span><br><span class="line">      <span class="attribute">margin</span>: <span class="number">0</span> <span class="number">0</span> <span class="number">8px</span></span><br><span class="line">  &gt; <span class="selector-pseudo">:last-child</span></span><br><span class="line">    <span class="attribute">margin-bottom</span>: <span class="number">0</span> <span class="meta">!important</span></span><br><span class="line">  hr</span><br><span class="line">    <span class="attribute">margin</span>: <span class="number">20px</span> <span class="number">0</span></span><br><span class="line">  <span class="keyword">if</span> <span class="built_in">hexo-config</span>(<span class="string">'beautify.enable'</span>)</span><br><span class="line">    <span class="keyword">if</span> <span class="built_in">hexo-config</span>(<span class="string">'beautify.field'</span>) == <span class="string">'site'</span></span><br><span class="line">      <span class="built_in">beautify</span>()</span><br><span class="line">    <span class="keyword">else</span> <span class="keyword">if</span> <span class="built_in">hexo-config</span>(<span class="string">'beautify.field'</span>) == <span class="string">'post'</span></span><br><span class="line">      &amp;<span class="selector-class">.post-content</span></span><br><span class="line">        <span class="built_in">beautify</span>()</span><br><span class="line"><span class="selector-id">#post</span></span><br><span class="line">  <span class="selector-class">.tag_share</span></span><br><span class="line">    <span class="selector-pseudo">&amp;:after</span></span><br><span class="line">      <span class="attribute">display</span>: block</span><br><span class="line">      <span class="attribute">clear</span>: both</span><br><span class="line">      <span class="attribute">content</span>: <span class="string">''</span></span><br><span class="line">    <span class="selector-class">.post-meta</span></span><br><span class="line">      &amp;__tag-list</span><br><span class="line">        <span class="attribute">display</span>: inline-block</span><br><span class="line">      &amp;__tags</span><br><span class="line">        <span class="attribute">display</span>: inline-block</span><br><span class="line">        <span class="attribute">margin</span>: <span class="number">8px</span> <span class="number">8px</span> <span class="number">8px</span> <span class="number">0</span></span><br><span class="line">        <span class="attribute">padding</span>: <span class="number">0</span> <span class="number">12px</span></span><br><span class="line">        <span class="attribute">width</span>: fit-content</span><br><span class="line">        <span class="attribute">border</span>: <span class="number">1px</span> solid <span class="variable">$light</span>-blue</span><br><span class="line">        <span class="attribute">border-radius</span>: <span class="number">12px</span></span><br><span class="line">        <span class="attribute">color</span>: <span class="variable">$light</span>-blue</span><br><span class="line">        <span class="attribute">font-size</span>: .<span class="number">85em</span></span><br><span class="line">        <span class="attribute">transition</span>: all .<span class="number">2s</span> ease-in-out</span><br><span class="line">        <span class="selector-pseudo">&amp;:hover</span></span><br><span class="line">          <span class="attribute">background</span>: <span class="variable">$light</span>-blue</span><br><span class="line">          <span class="attribute">color</span>: <span class="built_in">var</span>(--white)</span><br><span class="line">    <span class="selector-class">.post_share</span></span><br><span class="line">      <span class="attribute">display</span>: inline-block</span><br><span class="line">      <span class="attribute">float</span>: right</span><br><span class="line">      <span class="attribute">margin</span>: <span class="number">8px</span> <span class="number">0</span> <span class="number">0</span></span><br><span class="line">      <span class="attribute">width</span>: fit-content</span><br><span class="line">      <span class="selector-class">.social-share</span></span><br><span class="line">        <span class="attribute">font-size</span>: .<span class="number">85em</span></span><br><span class="line">        <span class="selector-class">.social-share-icon</span></span><br><span class="line">          <span class="attribute">margin</span>: <span class="number">0</span> <span class="number">4px</span></span><br><span class="line">          <span class="attribute">width</span>: w = <span class="number">1.85em</span></span><br><span class="line">          <span class="attribute">height</span>: w</span><br><span class="line">          <span class="attribute">font-size</span>: <span class="number">1.2em</span></span><br><span class="line">          <span class="attribute">line-height</span>: w</span><br><span class="line">  <span class="selector-class">.post-copyright</span></span><br><span class="line">    <span class="attribute">position</span>: relative</span><br><span class="line">    <span class="attribute">margin</span>: <span class="number">40px</span> <span class="number">0</span> <span class="number">10px</span></span><br><span class="line">    <span class="attribute">padding</span>: <span class="number">10px</span> <span class="number">16px</span></span><br><span class="line">    <span class="attribute">border</span>: <span class="number">1px</span> solid <span class="built_in">var</span>(--light-grey)</span><br><span class="line">    <span class="attribute">transition</span>: box-shadow .<span class="number">3s</span> ease-in-out</span><br><span class="line">    <span class="selector-pseudo">&amp;:before</span></span><br><span class="line">      <span class="keyword">@extend</span> <span class="selector-class">.fontawesomeIcon</span></span><br><span class="line">      <span class="attribute">position</span>: absolute</span><br><span class="line">      <span class="attribute">top</span>: <span class="number">2px</span></span><br><span class="line">      <span class="attribute">right</span>: <span class="number">12px</span></span><br><span class="line">      <span class="attribute">color</span>: <span class="variable">$theme</span>-color</span><br><span class="line">      <span class="attribute">content</span>: <span class="string">'\f1f9'</span></span><br><span class="line">      <span class="attribute">font-size</span>: <span class="number">1.3em</span></span><br><span class="line">    <span class="selector-pseudo">&amp;:hover</span></span><br><span class="line">      <span class="attribute">box-shadow</span>: <span class="number">0</span> <span class="number">0</span> <span class="number">8px</span> <span class="number">0</span> <span class="built_in">rgba</span>(<span class="number">232</span>, <span class="number">237</span>, <span class="number">250</span>, .<span class="number">6</span>), <span class="number">0</span> <span class="number">2px</span> <span class="number">4px</span> <span class="number">0</span> <span class="built_in">rgba</span>(<span class="number">232</span>, <span class="number">237</span>, <span class="number">250</span>, .<span class="number">5</span>)</span><br><span class="line">    <span class="selector-class">.post-copyright</span></span><br><span class="line">      &amp;-meta</span><br><span class="line">        <span class="attribute">color</span>: <span class="variable">$light</span>-blue</span><br><span class="line">        <span class="attribute">font-weight</span>: bold</span><br><span class="line">        <span class="selector-tag">i</span></span><br><span class="line">          <span class="attribute">margin-right</span>: <span class="number">3px</span></span><br><span class="line">      &amp;-info</span><br><span class="line">        <span class="attribute">padding-left</span>: <span class="number">6px</span></span><br><span class="line">        <span class="selector-tag">a</span></span><br><span class="line">          <span class="attribute">text-decoration</span>: underline</span><br><span class="line">          <span class="attribute">word-break</span>: break-word</span><br><span class="line">          <span class="selector-pseudo">&amp;:hover</span></span><br><span class="line">            <span class="attribute">text-decoration</span>: none</span><br><span class="line">  <span class="selector-class">.post-outdate-notice</span></span><br><span class="line">    <span class="attribute">position</span>: relative</span><br><span class="line">    <span class="attribute">margin</span>: <span class="number">0</span> <span class="number">0</span> <span class="number">20px</span></span><br><span class="line">    <span class="attribute">padding</span>: .<span class="number">5em</span> <span class="number">1.2em</span></span><br><span class="line">    <span class="attribute">border-radius</span>: <span class="number">3px</span></span><br><span class="line">    <span class="attribute">background-color</span>: <span class="variable">$noticeOutdate</span>-bg</span><br><span class="line">    <span class="attribute">color</span>: <span class="variable">$noticeOutdate</span>-color</span><br><span class="line">    <span class="keyword">if</span> <span class="built_in">hexo-config</span>(<span class="string">'noticeOutdate.style'</span>) == <span class="string">'flat'</span></span><br><span class="line">      <span class="attribute">padding</span>: .<span class="number">5em</span> <span class="number">1em</span> .<span class="number">5em</span> <span class="number">2.6em</span></span><br><span class="line">      <span class="attribute">border-left</span>: <span class="number">5px</span> solid <span class="variable">$noticeOutdate</span>-border</span><br><span class="line">      <span class="selector-pseudo">&amp;:before</span></span><br><span class="line">        <span class="keyword">@extend</span> <span class="selector-class">.fontawesomeIcon</span></span><br><span class="line">        <span class="attribute">position</span>: absolute</span><br><span class="line">        <span class="attribute">top</span>: <span class="number">50%</span></span><br><span class="line">        <span class="attribute">left</span>: .<span class="number">9em</span></span><br><span class="line">        <span class="attribute">color</span>: <span class="variable">$noticeOutdate</span>-border</span><br><span class="line">        <span class="attribute">content</span>: <span class="string">'\f071'</span></span><br><span class="line">        <span class="attribute">transform</span>: <span class="built_in">translateY</span>(-<span class="number">50%</span>)</span><br><span class="line">  <span class="selector-class">.ads-wrap</span></span><br><span class="line">    <span class="attribute">margin</span>: <span class="number">40px</span> <span class="number">0</span></span><br></pre></td></tr></tbody></table></figure><h4 id="html" tabindex="-1">HTML</h4><p>来源：<a href="https://raw.githubusercontent.com/h5bp/html5-boilerplate/main/src/index.html">https://raw.githubusercontent.com/h5bp/html5-boilerplate/main/src/index.html</a></p><figure class="highlight html"><table><tbody><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta">&lt;!doctype <span class="keyword">html</span>&gt;</span></span><br><span class="line"><span class="tag">&lt;<span class="name">html</span> <span class="attr">class</span>=<span class="string">"no-js"</span> <span class="attr">lang</span>=<span class="string">""</span>&gt;</span></span><br><span class="line"><span class="tag">&lt;<span class="name">head</span>&gt;</span></span><br><span class="line">  <span class="tag">&lt;<span class="name">meta</span> <span class="attr">charset</span>=<span class="string">"utf-8"</span>&gt;</span></span><br><span class="line">  <span class="tag">&lt;<span class="name">meta</span> <span class="attr">name</span>=<span class="string">"viewport"</span> <span class="attr">content</span>=<span class="string">"width=device-width, initial-scale=1"</span>&gt;</span></span><br><span class="line">  <span class="tag">&lt;<span class="name">title</span>&gt;</span><span class="tag">&lt;/<span class="name">title</span>&gt;</span></span><br><span class="line">  <span class="tag">&lt;<span class="name">link</span> <span class="attr">rel</span>=<span class="string">"stylesheet"</span> <span class="attr">href</span>=<span class="string">"css/style.css"</span>&gt;</span></span><br><span class="line">  <span class="tag">&lt;<span class="name">meta</span> <span class="attr">name</span>=<span class="string">"description"</span> <span class="attr">content</span>=<span class="string">""</span>&gt;</span></span><br><span class="line">  <span class="tag">&lt;<span class="name">meta</span> <span class="attr">property</span>=<span class="string">"og:title"</span> <span class="attr">content</span>=<span class="string">""</span>&gt;</span></span><br><span class="line">  <span class="tag">&lt;<span class="name">meta</span> <span class="attr">property</span>=<span class="string">"og:type"</span> <span class="attr">content</span>=<span class="string">""</span>&gt;</span></span><br><span class="line">  <span class="tag">&lt;<span class="name">meta</span> <span class="attr">property</span>=<span class="string">"og:url"</span> <span class="attr">content</span>=<span class="string">""</span>&gt;</span></span><br><span class="line">  <span class="tag">&lt;<span class="name">meta</span> <span class="attr">property</span>=<span class="string">"og:image"</span> <span class="attr">content</span>=<span class="string">""</span>&gt;</span></span><br><span class="line">  <span class="tag">&lt;<span class="name">meta</span> <span class="attr">property</span>=<span class="string">"og:image:alt"</span> <span class="attr">content</span>=<span class="string">""</span>&gt;</span></span><br><span class="line">  <span class="tag">&lt;<span class="name">link</span> <span class="attr">rel</span>=<span class="string">"icon"</span> <span class="attr">href</span>=<span class="string">"/favicon.ico"</span> <span class="attr">sizes</span>=<span class="string">"any"</span>&gt;</span></span><br><span class="line">  <span class="tag">&lt;<span class="name">link</span> <span class="attr">rel</span>=<span class="string">"icon"</span> <span class="attr">href</span>=<span class="string">"/icon.svg"</span> <span class="attr">type</span>=<span class="string">"image/svg+xml"</span>&gt;</span></span><br><span class="line">  <span class="tag">&lt;<span class="name">link</span> <span class="attr">rel</span>=<span class="string">"apple-touch-icon"</span> <span class="attr">href</span>=<span class="string">"icon.png"</span>&gt;</span></span><br><span class="line">  <span class="tag">&lt;<span class="name">link</span> <span class="attr">rel</span>=<span class="string">"manifest"</span> <span class="attr">href</span>=<span class="string">"site.webmanifest"</span>&gt;</span></span><br><span class="line">  <span class="tag">&lt;<span class="name">meta</span> <span class="attr">name</span>=<span class="string">"theme-color"</span> <span class="attr">content</span>=<span class="string">"#fafafa"</span>&gt;</span></span><br><span class="line"><span class="tag">&lt;/<span class="name">head</span>&gt;</span></span><br><span class="line"><span class="tag">&lt;<span class="name">body</span>&gt;</span></span><br><span class="line">  <span class="comment">&lt;!-- Add your site or application content here --&gt;</span></span><br><span class="line">  <span class="tag">&lt;<span class="name">p</span>&gt;</span>Hello world! This is HTML5 Boilerplate.<span class="tag">&lt;/<span class="name">p</span>&gt;</span></span><br><span class="line">  <span class="tag">&lt;<span class="name">script</span> <span class="attr">src</span>=<span class="string">"js/app.js"</span>&gt;</span><span class="tag">&lt;/<span class="name">script</span>&gt;</span></span><br><span class="line"><span class="tag">&lt;/<span class="name">body</span>&gt;</span></span><br><span class="line"><span class="tag">&lt;/<span class="name">html</span>&gt;</span></span><br></pre></td></tr></tbody></table></figure><h1 id="%E6%95%B0%E5%AD%A6" tabindex="-1">数学</h1><h2 id="%E5%8D%95%E8%A1%8C%E5%85%AC%E5%BC%8F" tabindex="-1">单行公式</h2><p><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>F</mi><mo>=</mo><mi>G</mi><mo>=</mo><msub><mi>m</mi><mtext mathvariant="sans-serif"> 物</mtext></msub><mi> g</mi><mo>=</mo><mn>1</mn><mi>k</mi><mi>g</mi><mo separator="true">⋅</mo><mn>9.8</mn><mi>N</mi><mi mathvariant="normal">/</mi><mi>k</mi><mi>g</mi><mo>=</mo><mn>9.8</mn><mi>N</mi></mrow><annotation encoding="application/x-tex">F=G=m_\textsf {物} g=1kg・9.8N/kg=9.8N</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="katex-base"><span class="katex-strut" style="height:0.6833em;"></span><span class="mord mathnormal" style="margin-right:0.1389em;">F</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="katex-base"><span class="katex-strut" style="height:0.6833em;"></span><span class="mord mathnormal">G</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="katex-base"><span class="katex-strut" style="height:0.625em;vertical-align:-0.1944em;"></span><span class="mord"><span class="mord mathnormal">m</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3361em;"><span style="top:-2.55em;margin-left:0em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="katex-sizing reset-size6 size3 mtight"><span class="mord text mtight"><span class="mord textsf cjk_fallback mtight"> 物</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span><span class="mord mathnormal" style="margin-right:0.0359em;">g</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="katex-base"><span class="katex-strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mord">1</span><span class="mord mathnormal" style="margin-right:0.0315em;">k</span><span class="mord mathnormal" style="margin-right:0.0359em;">g</span><span class="mpunct">⋅</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord">9.8</span><span class="mord mathnormal" style="margin-right:0.109em;">N</span><span class="mord">/</span><span class="mord mathnormal" style="margin-right:0.0315em;">k</span><span class="mord mathnormal" style="margin-right:0.0359em;">g</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="katex-base"><span class="katex-strut" style="height:0.6833em;"></span><span class="mord">9.8</span><span class="mord mathnormal" style="margin-right:0.109em;">N</span></span></span></span></p><h2 id="%E6%95%B0%E5%AD%A6%E6%96%87%E5%AD%97%E6%B7%B7%E6%9D%82" tabindex="-1">数学文字混杂</h2><p>让我们尝试证明一个稍微复杂一些的等式：</p><p><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msubsup><mo>∑</mo><mrow><mi>k</mi><mo>=</mo><mn>0</mn></mrow><mi>n</mi></msubsup><mrow><mo fence="true">(</mo><mfrac linethickness="0px"><mi>n</mi><mi>k</mi></mfrac><mo fence="true">)</mo></mrow><mo>=</mo><msup><mn>2</mn><mi>n</mi></msup></mrow><annotation encoding="application/x-tex">\sum_{k=0}^{n} \binom{n}{k} = 2^n</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="katex-base"><span class="katex-strut" style="height:1.2em;vertical-align:-0.35em;"></span><span class="mop"><span class="mop op-symbol small-op" style="position:relative;top:0em;">∑</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.8043em;"><span style="top:-2.4003em;margin-left:0em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="katex-sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight" style="margin-right:0.0315em;">k</span><span class="mrel mtight">=</span><span class="mord mtight">0</span></span></span></span><span style="top:-3.2029em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="katex-sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">n</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.2997em;"><span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord"><span class="mopen delimcenter" style="top:0em;"><span class="delimsizing size1">(</span></span><span class="mfrac"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.7454em;"><span style="top:-2.355em;"><span class="pstrut" style="height:2.7em;"></span><span class="katex-sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight" style="margin-right:0.0315em;">k</span></span></span></span><span style="top:-3.144em;"><span class="pstrut" style="height:2.7em;"></span><span class="katex-sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">n</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.345em;"><span></span></span></span></span></span><span class="mclose delimcenter" style="top:0em;"><span class="delimsizing size1">)</span></span></span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="katex-base"><span class="katex-strut" style="height:0.6644em;"></span><span class="mord"><span class="mord">2</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.6644em;"><span style="top:-3.063em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="katex-sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight">n</span></span></span></span></span></span></span></span></span></span></span></p><p>我们可以使用二项式定理证明这个等式。二项式定理表述为：</p><p><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mo stretchy="false">(</mo><mi>a</mi><mo>+</mo><mi>b</mi><msup><mo stretchy="false">)</mo><mi>n</mi></msup><mo>=</mo><msubsup><mo>∑</mo><mrow><mi>k</mi><mo>=</mo><mn>0</mn></mrow><mi>n</mi></msubsup><mrow><mo fence="true">(</mo><mfrac linethickness="0px"><mi>n</mi><mi>k</mi></mfrac><mo fence="true">)</mo></mrow><msup><mi>a</mi><mrow><mi>n</mi><mo>−</mo><mi>k</mi></mrow></msup><msup><mi>b</mi><mi>k</mi></msup></mrow><annotation encoding="application/x-tex">(a + b)^n = \sum_{k=0}^{n} \binom{n}{k} a^{n-k} b^k</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="katex-base"><span class="katex-strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mopen">(</span><span class="mord mathnormal">a</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">+</span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="katex-base"><span class="katex-strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mord mathnormal">b</span><span class="mclose"><span class="mclose">)</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.6644em;"><span style="top:-3.063em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="katex-sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight">n</span></span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="katex-base"><span class="katex-strut" style="height:1.2em;vertical-align:-0.35em;"></span><span class="mop"><span class="mop op-symbol small-op" style="position:relative;top:0em;">∑</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.8043em;"><span style="top:-2.4003em;margin-left:0em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="katex-sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight" style="margin-right:0.0315em;">k</span><span class="mrel mtight">=</span><span class="mord mtight">0</span></span></span></span><span style="top:-3.2029em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="katex-sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">n</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.2997em;"><span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord"><span class="mopen delimcenter" style="top:0em;"><span class="delimsizing size1">(</span></span><span class="mfrac"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.7454em;"><span style="top:-2.355em;"><span class="pstrut" style="height:2.7em;"></span><span class="katex-sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight" style="margin-right:0.0315em;">k</span></span></span></span><span style="top:-3.144em;"><span class="pstrut" style="height:2.7em;"></span><span class="katex-sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">n</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.345em;"><span></span></span></span></span></span><span class="mclose delimcenter" style="top:0em;"><span class="delimsizing size1">)</span></span></span><span class="mord"><span class="mord mathnormal">a</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.8491em;"><span style="top:-3.063em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="katex-sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">n</span><span class="mbin mtight">−</span><span class="mord mathnormal mtight" style="margin-right:0.0315em;">k</span></span></span></span></span></span></span></span></span><span class="mord"><span class="mord mathnormal">b</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.8491em;"><span style="top:-3.063em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="katex-sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight" style="margin-right:0.0315em;">k</span></span></span></span></span></span></span></span></span></span></span></p><p>现在，令 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>a</mi><mo>=</mo><mn>1</mn></mrow><annotation encoding="application/x-tex">a = 1</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="katex-base"><span class="katex-strut" style="height:0.4306em;"></span><span class="mord mathnormal">a</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="katex-base"><span class="katex-strut" style="height:0.6444em;"></span><span class="mord">1</span></span></span></span>, <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>b</mi><mo>=</mo><mn>1</mn></mrow><annotation encoding="application/x-tex">b = 1</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="katex-base"><span class="katex-strut" style="height:0.6944em;"></span><span class="mord mathnormal">b</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="katex-base"><span class="katex-strut" style="height:0.6444em;"></span><span class="mord">1</span></span></span></span>，然后代入：</p><p><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mo stretchy="false">(</mo><mn>1</mn><mo>+</mo><mn>1</mn><msup><mo stretchy="false">)</mo><mi>n</mi></msup><mo>=</mo><msubsup><mo>∑</mo><mrow><mi>k</mi><mo>=</mo><mn>0</mn></mrow><mi>n</mi></msubsup><mrow><mo fence="true">(</mo><mfrac linethickness="0px"><mi>n</mi><mi>k</mi></mfrac><mo fence="true">)</mo></mrow><msup><mn>1</mn><mrow><mi>n</mi><mo>−</mo><mi>k</mi></mrow></msup><msup><mn>1</mn><mi>k</mi></msup></mrow><annotation encoding="application/x-tex">(1 + 1)^n = \sum_{k=0}^{n} \binom{n}{k} 1^{n-k} 1^k</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="katex-base"><span class="katex-strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mopen">(</span><span class="mord">1</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">+</span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="katex-base"><span class="katex-strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mord">1</span><span class="mclose"><span class="mclose">)</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.6644em;"><span style="top:-3.063em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="katex-sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight">n</span></span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="katex-base"><span class="katex-strut" style="height:1.2em;vertical-align:-0.35em;"></span><span class="mop"><span class="mop op-symbol small-op" style="position:relative;top:0em;">∑</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.8043em;"><span style="top:-2.4003em;margin-left:0em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="katex-sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight" style="margin-right:0.0315em;">k</span><span class="mrel mtight">=</span><span class="mord mtight">0</span></span></span></span><span style="top:-3.2029em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="katex-sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">n</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.2997em;"><span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord"><span class="mopen delimcenter" style="top:0em;"><span class="delimsizing size1">(</span></span><span class="mfrac"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.7454em;"><span style="top:-2.355em;"><span class="pstrut" style="height:2.7em;"></span><span class="katex-sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight" style="margin-right:0.0315em;">k</span></span></span></span><span style="top:-3.144em;"><span class="pstrut" style="height:2.7em;"></span><span class="katex-sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">n</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.345em;"><span></span></span></span></span></span><span class="mclose delimcenter" style="top:0em;"><span class="delimsizing size1">)</span></span></span><span class="mord"><span class="mord">1</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.8491em;"><span style="top:-3.063em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="katex-sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">n</span><span class="mbin mtight">−</span><span class="mord mathnormal mtight" style="margin-right:0.0315em;">k</span></span></span></span></span></span></span></span></span><span class="mord"><span class="mord">1</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.8491em;"><span style="top:-3.063em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="katex-sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight" style="margin-right:0.0315em;">k</span></span></span></span></span></span></span></span></span></span></span></p><p><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msup><mn>2</mn><mi>n</mi></msup><mo>=</mo><msubsup><mo>∑</mo><mrow><mi>k</mi><mo>=</mo><mn>0</mn></mrow><mi>n</mi></msubsup><mrow><mo fence="true">(</mo><mfrac linethickness="0px"><mi>n</mi><mi>k</mi></mfrac><mo fence="true">)</mo></mrow></mrow><annotation encoding="application/x-tex">2^n = \sum_{k=0}^{n} \binom{n}{k}</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="katex-base"><span class="katex-strut" style="height:0.6644em;"></span><span class="mord"><span class="mord">2</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.6644em;"><span style="top:-3.063em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="katex-sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight">n</span></span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="katex-base"><span class="katex-strut" style="height:1.2em;vertical-align:-0.35em;"></span><span class="mop"><span class="mop op-symbol small-op" style="position:relative;top:0em;">∑</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.8043em;"><span style="top:-2.4003em;margin-left:0em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="katex-sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight" style="margin-right:0.0315em;">k</span><span class="mrel mtight">=</span><span class="mord mtight">0</span></span></span></span><span style="top:-3.2029em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="katex-sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">n</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.2997em;"><span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord"><span class="mopen delimcenter" style="top:0em;"><span class="delimsizing size1">(</span></span><span class="mfrac"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.7454em;"><span style="top:-2.355em;"><span class="pstrut" style="height:2.7em;"></span><span class="katex-sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight" style="margin-right:0.0315em;">k</span></span></span></span><span style="top:-3.144em;"><span class="pstrut" style="height:2.7em;"></span><span class="katex-sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">n</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.345em;"><span></span></span></span></span></span><span class="mclose delimcenter" style="top:0em;"><span class="delimsizing size1">)</span></span></span></span></span></span></p><p>这证明了 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msubsup><mo>∑</mo><mrow><mi>k</mi><mo>=</mo><mn>0</mn></mrow><mi>n</mi></msubsup><mrow><mo fence="true">(</mo><mfrac linethickness="0px"><mi>n</mi><mi>k</mi></mfrac><mo fence="true">)</mo></mrow><mo>=</mo><msup><mn>2</mn><mi>n</mi></msup></mrow><annotation encoding="application/x-tex">\sum_{k=0}^{n} \binom{n}{k} = 2^n</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="katex-base"><span class="katex-strut" style="height:1.2em;vertical-align:-0.35em;"></span><span class="mop"><span class="mop op-symbol small-op" style="position:relative;top:0em;">∑</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.8043em;"><span style="top:-2.4003em;margin-left:0em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="katex-sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight" style="margin-right:0.0315em;">k</span><span class="mrel mtight">=</span><span class="mord mtight">0</span></span></span></span><span style="top:-3.2029em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="katex-sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">n</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.2997em;"><span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord"><span class="mopen delimcenter" style="top:0em;"><span class="delimsizing size1">(</span></span><span class="mfrac"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.7454em;"><span style="top:-2.355em;"><span class="pstrut" style="height:2.7em;"></span><span class="katex-sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight" style="margin-right:0.0315em;">k</span></span></span></span><span style="top:-3.144em;"><span class="pstrut" style="height:2.7em;"></span><span class="katex-sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">n</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.345em;"><span></span></span></span></span></span><span class="mclose delimcenter" style="top:0em;"><span class="delimsizing size1">)</span></span></span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="katex-base"><span class="katex-strut" style="height:0.6644em;"></span><span class="mord"><span class="mord">2</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.6644em;"><span style="top:-3.063em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="katex-sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight">n</span></span></span></span></span></span></span></span></span></span></span>。</p><h2 id="%E5%A4%9A%E8%A1%8C%E5%85%AC%E5%BC%8F%E4%B8%8E%E5%AF%B9%E9%BD%90" tabindex="-1">多行公式与对齐</h2><p>麦克斯韦方程组（微分形式）：</p><p class="katex-block"><span class="katex-display"><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML" display="block"><semantics><mtable rowspacing="0.25em" columnalign="right left" columnspacing="0em"><mtr><mtd><mstyle scriptlevel="0" displaystyle="true"><mrow><mi mathvariant="normal">∇</mi><mo>⋅</mo><mi mathvariant="bold">E</mi></mrow></mstyle></mtd><mtd><mstyle scriptlevel="0" displaystyle="true"><mrow><mrow></mrow><mo>=</mo><mfrac><mi>ρ</mi><msub><mi>ε</mi><mn>0</mn></msub></mfrac></mrow></mstyle></mtd></mtr><mtr><mtd><mstyle scriptlevel="0" displaystyle="true"><mrow><mi mathvariant="normal">∇</mi><mo>⋅</mo><mi mathvariant="bold">B</mi></mrow></mstyle></mtd><mtd><mstyle scriptlevel="0" displaystyle="true"><mrow><mrow></mrow><mo>=</mo><mn>0</mn></mrow></mstyle></mtd></mtr><mtr><mtd><mstyle scriptlevel="0" displaystyle="true"><mrow><mi mathvariant="normal">∇</mi><mo>×</mo><mi mathvariant="bold">E</mi></mrow></mstyle></mtd><mtd><mstyle scriptlevel="0" displaystyle="true"><mrow><mrow></mrow><mo>=</mo><mo>−</mo><mfrac><mrow><mi mathvariant="normal">∂</mi><mi mathvariant="bold">B</mi></mrow><mrow><mi mathvariant="normal">∂</mi><mi>t</mi></mrow></mfrac></mrow></mstyle></mtd></mtr><mtr><mtd><mstyle scriptlevel="0" displaystyle="true"><mrow><mi mathvariant="normal">∇</mi><mo>×</mo><mi mathvariant="bold">B</mi></mrow></mstyle></mtd><mtd><mstyle scriptlevel="0" displaystyle="true"><mrow><mrow></mrow><mo>=</mo><msub><mi>μ</mi><mn>0</mn></msub><mi mathvariant="bold">J</mi><mo>+</mo><msub><mi>μ</mi><mn>0</mn></msub><msub><mi>ε</mi><mn>0</mn></msub><mfrac><mrow><mi mathvariant="normal">∂</mi><mi mathvariant="bold">E</mi></mrow><mrow><mi mathvariant="normal">∂</mi><mi>t</mi></mrow></mfrac></mrow></mstyle></mtd></mtr></mtable><annotation encoding="application/x-tex">\begin{aligned}\nabla \cdot \mathbf{E} &amp;= \frac{\rho}{\varepsilon_0} \\\nabla \cdot \mathbf{B} &amp;= 0 \\\nabla \times \mathbf{E} &amp;= -\frac{\partial \mathbf{B}}{\partial t} \\\nabla \times \mathbf{B} &amp;= \mu_0 \mathbf{J} + \mu_0 \varepsilon_0 \frac{\partial \mathbf{E}}{\partial t}\end{aligned}</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="katex-base"><span class="katex-strut" style="height:8.1584em;vertical-align:-3.8292em;"></span><span class="mord"><span class="mtable"><span class="col-align-r"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:4.3292em;"><span style="top:-6.5931em;"><span class="pstrut" style="height:3.3714em;"></span><span class="mord"><span class="mord">∇</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">⋅</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mord mathbf">E</span></span></span><span style="top:-4.6171em;"><span class="pstrut" style="height:3.3714em;"></span><span class="mord"><span class="mord">∇</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">⋅</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mord mathbf">B</span></span></span><span style="top:-2.5857em;"><span class="pstrut" style="height:3.3714em;"></span><span class="mord"><span class="mord">∇</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">×</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mord mathbf">E</span></span></span><span style="top:-0.2282em;"><span class="pstrut" style="height:3.3714em;"></span><span class="mord"><span class="mord">∇</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">×</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mord mathbf">B</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:3.8292em;"><span></span></span></span></span></span><span class="col-align-l"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:4.3292em;"><span style="top:-6.5931em;"><span class="pstrut" style="height:3.3714em;"></span><span class="mord"><span class="mord"></span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mord"><span class="mopen nulldelimiter"></span><span class="mfrac"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:1.1076em;"><span style="top:-2.314em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord"><span class="mord mathnormal">ε</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3011em;"><span style="top:-2.55em;margin-left:0em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="katex-sizing reset-size6 size3 mtight"><span class="mord mtight">0</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span></span></span><span style="top:-3.23em;"><span class="pstrut" style="height:3em;"></span><span class="frac-line" style="border-bottom-width:0.04em;"></span></span><span style="top:-3.677em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord mathnormal">ρ</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.836em;"><span></span></span></span></span></span><span class="mclose nulldelimiter"></span></span></span></span><span style="top:-4.6171em;"><span class="pstrut" style="height:3.3714em;"></span><span class="mord"><span class="mord"></span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mord">0</span></span></span><span style="top:-2.5857em;"><span class="pstrut" style="height:3.3714em;"></span><span class="mord"><span class="mord"></span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mord">−</span><span class="mord"><span class="mopen nulldelimiter"></span><span class="mfrac"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:1.3714em;"><span style="top:-2.314em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord" style="margin-right:0.0556em;">∂</span><span class="mord mathnormal">t</span></span></span><span style="top:-3.23em;"><span class="pstrut" style="height:3em;"></span><span class="frac-line" style="border-bottom-width:0.04em;"></span></span><span style="top:-3.677em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord" style="margin-right:0.0556em;">∂</span><span class="mord mathbf">B</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.686em;"><span></span></span></span></span></span><span class="mclose nulldelimiter"></span></span></span></span><span style="top:-0.2282em;"><span class="pstrut" style="height:3.3714em;"></span><span class="mord"><span class="mord"></span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mord"><span class="mord mathnormal">μ</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3011em;"><span style="top:-2.55em;margin-left:0em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="katex-sizing reset-size6 size3 mtight"><span class="mord mtight">0</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span><span class="mord mathbf">J</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">+</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mord"><span class="mord mathnormal">μ</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3011em;"><span style="top:-2.55em;margin-left:0em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="katex-sizing reset-size6 size3 mtight"><span class="mord mtight">0</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span><span class="mord"><span class="mord mathnormal">ε</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3011em;"><span style="top:-2.55em;margin-left:0em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="katex-sizing reset-size6 size3 mtight"><span class="mord mtight">0</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span><span class="mord"><span class="mopen nulldelimiter"></span><span class="mfrac"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:1.3714em;"><span style="top:-2.314em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord" style="margin-right:0.0556em;">∂</span><span class="mord mathnormal">t</span></span></span><span style="top:-3.23em;"><span class="pstrut" style="height:3em;"></span><span class="frac-line" style="border-bottom-width:0.04em;"></span></span><span style="top:-3.677em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord" style="margin-right:0.0556em;">∂</span><span class="mord mathbf">E</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.686em;"><span></span></span></span></span></span><span class="mclose nulldelimiter"></span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:3.8292em;"><span></span></span></span></span></span></span></span></span></span></span></span></p><h2 id="%E5%88%86%E6%AE%B5%E5%87%BD%E6%95%B0" tabindex="-1">分段函数</h2><p>符号函数 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mtext>sgn</mtext><mo stretchy="false">(</mo><mi>x</mi><mo stretchy="false">)</mo></mrow><annotation encoding="application/x-tex">\text{sgn}(x)</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="katex-base"><span class="katex-strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mord text"><span class="mord">sgn</span></span><span class="mopen">(</span><span class="mord mathnormal">x</span><span class="mclose">)</span></span></span></span> 的定义如下：</p><p class="katex-block"><span class="katex-display"><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML" display="block"><semantics><mrow><mi>f</mi><mo stretchy="false">(</mo><mi>x</mi><mo stretchy="false">)</mo><mo>=</mo><mrow><mo fence="true">{</mo><mtable rowspacing="0.36em" columnalign="left left" columnspacing="1em"><mtr><mtd><mstyle scriptlevel="0" displaystyle="false"><mrow><mn>1</mn><mo separator="true">,</mo></mrow></mstyle></mtd><mtd><mstyle scriptlevel="0" displaystyle="false"><mrow><mtext>if&nbsp;</mtext><mi>x</mi><mo>&gt;</mo><mn>0</mn></mrow></mstyle></mtd></mtr><mtr><mtd><mstyle scriptlevel="0" displaystyle="false"><mrow><mn>0</mn><mo separator="true">,</mo></mrow></mstyle></mtd><mtd><mstyle scriptlevel="0" displaystyle="false"><mrow><mtext>if&nbsp;</mtext><mi>x</mi><mo>=</mo><mn>0</mn></mrow></mstyle></mtd></mtr><mtr><mtd><mstyle scriptlevel="0" displaystyle="false"><mrow><mo>−</mo><mn>1</mn><mo separator="true">,</mo></mrow></mstyle></mtd><mtd><mstyle scriptlevel="0" displaystyle="false"><mrow><mtext>if&nbsp;</mtext><mi>x</mi><mo>&lt;</mo><mn>0</mn></mrow></mstyle></mtd></mtr></mtable></mrow></mrow><annotation encoding="application/x-tex">f(x) =\begin{cases}1,  &amp; \text{if } x &gt; 0 \\0,  &amp; \text{if } x = 0 \\-1, &amp; \text{if } x &lt; 0\end{cases}</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="katex-base"><span class="katex-strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mord mathnormal" style="margin-right:0.1076em;">f</span><span class="mopen">(</span><span class="mord mathnormal">x</span><span class="mclose">)</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="katex-base"><span class="katex-strut" style="height:4.32em;vertical-align:-1.91em;"></span><span class="minner"><span class="mopen"><span class="delimsizing mult"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:2.35em;"><span style="top:-2.2em;"><span class="pstrut" style="height:3.15em;"></span><span class="delimsizinginner delim-size4"><span>⎩</span></span></span><span style="top:-2.192em;"><span class="pstrut" style="height:3.15em;"></span><span style="height:0.316em;width:0.8889em;"><svg xmlns="http://www.w3.org/2000/svg" width="0.8889em" height="0.316em" style="width:0.8889em" viewBox="0 0 888.89 316" preserveAspectRatio="xMinYMin"><path d="M384 0 H504 V316 H384z M384 0 H504 V316 H384z"></path></svg></span></span><span style="top:-3.15em;"><span class="pstrut" style="height:3.15em;"></span><span class="delimsizinginner delim-size4"><span>⎨</span></span></span><span style="top:-4.292em;"><span class="pstrut" style="height:3.15em;"></span><span style="height:0.316em;width:0.8889em;"><svg xmlns="http://www.w3.org/2000/svg" width="0.8889em" height="0.316em" style="width:0.8889em" viewBox="0 0 888.89 316" preserveAspectRatio="xMinYMin"><path d="M384 0 H504 V316 H384z M384 0 H504 V316 H384z"></path></svg></span></span><span style="top:-4.6em;"><span class="pstrut" style="height:3.15em;"></span><span class="delimsizinginner delim-size4"><span>⎧</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:1.85em;"><span></span></span></span></span></span></span><span class="mord"><span class="mtable"><span class="col-align-l"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:2.41em;"><span style="top:-4.41em;"><span class="pstrut" style="height:3.008em;"></span><span class="mord"><span class="mord">1</span><span class="mpunct">,</span></span></span><span style="top:-2.97em;"><span class="pstrut" style="height:3.008em;"></span><span class="mord"><span class="mord">0</span><span class="mpunct">,</span></span></span><span style="top:-1.53em;"><span class="pstrut" style="height:3.008em;"></span><span class="mord"><span class="mord">−</span><span class="mord">1</span><span class="mpunct">,</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:1.91em;"><span></span></span></span></span></span><span class="arraycolsep" style="width:1em;"></span><span class="col-align-l"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:2.41em;"><span style="top:-4.41em;"><span class="pstrut" style="height:3.008em;"></span><span class="mord"><span class="mord text"><span class="mord">if&nbsp;</span></span><span class="mord mathnormal">x</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">&gt;</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mord">0</span></span></span><span style="top:-2.97em;"><span class="pstrut" style="height:3.008em;"></span><span class="mord"><span class="mord text"><span class="mord">if&nbsp;</span></span><span class="mord mathnormal">x</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mord">0</span></span></span><span style="top:-1.53em;"><span class="pstrut" style="height:3.008em;"></span><span class="mord"><span class="mord text"><span class="mord">if&nbsp;</span></span><span class="mord mathnormal">x</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">&lt;</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mord">0</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:1.91em;"><span></span></span></span></span></span></span></span><span class="mclose nulldelimiter"></span></span></span></span></span></span></p><h2 id="%E7%9F%A9%E9%98%B5" tabindex="-1">矩阵</h2><p>带有不同括号的矩阵测试：</p><p class="katex-block"><span class="katex-display"><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML" display="block"><semantics><mrow><mrow><mo fence="true">(</mo><mtable rowspacing="0.16em" columnalign="center center" columnspacing="1em"><mtr><mtd><mstyle scriptlevel="0" displaystyle="false"><mn>1</mn></mstyle></mtd><mtd><mstyle scriptlevel="0" displaystyle="false"><mn>2</mn></mstyle></mtd></mtr><mtr><mtd><mstyle scriptlevel="0" displaystyle="false"><mn>3</mn></mstyle></mtd><mtd><mstyle scriptlevel="0" displaystyle="false"><mn>4</mn></mstyle></mtd></mtr></mtable><mo fence="true">)</mo></mrow><mspace width="1em"><mrow><mo fence="true">[</mo><mtable rowspacing="0.16em" columnalign="center center" columnspacing="1em"><mtr><mtd><mstyle scriptlevel="0" displaystyle="false"><mi>a</mi></mstyle></mtd><mtd><mstyle scriptlevel="0" displaystyle="false"><mi>b</mi></mstyle></mtd></mtr><mtr><mtd><mstyle scriptlevel="0" displaystyle="false"><mi>c</mi></mstyle></mtd><mtd><mstyle scriptlevel="0" displaystyle="false"><mi>d</mi></mstyle></mtd></mtr></mtable><mo fence="true">]</mo></mrow><mspace width="1em"><mrow><mo fence="true">{</mo><mtable rowspacing="0.16em" columnalign="center center" columnspacing="1em"><mtr><mtd><mstyle scriptlevel="0" displaystyle="false"><mi>x</mi></mstyle></mtd><mtd><mstyle scriptlevel="0" displaystyle="false"><mi>y</mi></mstyle></mtd></mtr><mtr><mtd><mstyle scriptlevel="0" displaystyle="false"><mi>z</mi></mstyle></mtd><mtd><mstyle scriptlevel="0" displaystyle="false"><mi>w</mi></mstyle></mtd></mtr></mtable><mo fence="true">}</mo></mrow><mspace width="1em"><mrow><mo fence="true">∣</mo><mtable rowspacing="0.16em" columnalign="center center" columnspacing="1em"><mtr><mtd><mstyle scriptlevel="0" displaystyle="false"><mi>α</mi></mstyle></mtd><mtd><mstyle scriptlevel="0" displaystyle="false"><mi>β</mi></mstyle></mtd></mtr><mtr><mtd><mstyle scriptlevel="0" displaystyle="false"><mi>γ</mi></mstyle></mtd><mtd><mstyle scriptlevel="0" displaystyle="false"><mi>δ</mi></mstyle></mtd></mtr></mtable><mo fence="true">∣</mo></mrow></mspace></mspace></mspace></mrow><annotation encoding="application/x-tex">\begin{pmatrix} 1 &amp; 2 \\ 3 &amp; 4 \end{pmatrix} \quad\begin{bmatrix} a &amp; b \\ c &amp; d \end{bmatrix} \quad\begin{Bmatrix} x &amp; y \\ z &amp; w \end{Bmatrix} \quad\begin{vmatrix} \alpha &amp; \beta \\ \gamma &amp; \delta \end{vmatrix}</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="katex-base"><span class="katex-strut" style="height:2.4em;vertical-align:-0.95em;"></span><span class="minner"><span class="mopen delimcenter" style="top:0em;"><span class="delimsizing size3">(</span></span><span class="mord"><span class="mtable"><span class="col-align-c"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:1.45em;"><span style="top:-3.61em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord">1</span></span></span><span style="top:-2.41em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord">3</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.95em;"><span></span></span></span></span></span><span class="arraycolsep" style="width:0.5em;"></span><span class="arraycolsep" style="width:0.5em;"></span><span class="col-align-c"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:1.45em;"><span style="top:-3.61em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord">2</span></span></span><span style="top:-2.41em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord">4</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.95em;"><span></span></span></span></span></span></span></span><span class="mclose delimcenter" style="top:0em;"><span class="delimsizing size3">)</span></span></span><span class="mspace" style="margin-right:1em;"></span><span class="mspace" style="margin-right:0.1667em;"></span><span class="minner"><span class="mopen delimcenter" style="top:0em;"><span class="delimsizing size3">[</span></span><span class="mord"><span class="mtable"><span class="col-align-c"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:1.45em;"><span style="top:-3.61em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord mathnormal">a</span></span></span><span style="top:-2.41em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord mathnormal">c</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.95em;"><span></span></span></span></span></span><span class="arraycolsep" style="width:0.5em;"></span><span class="arraycolsep" style="width:0.5em;"></span><span class="col-align-c"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:1.45em;"><span style="top:-3.61em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord mathnormal">b</span></span></span><span style="top:-2.41em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord mathnormal">d</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.95em;"><span></span></span></span></span></span></span></span><span class="mclose delimcenter" style="top:0em;"><span class="delimsizing size3">]</span></span></span><span class="mspace" style="margin-right:1em;"></span><span class="mspace" style="margin-right:0.1667em;"></span><span class="minner"><span class="mopen delimcenter" style="top:0em;"><span class="delimsizing size3">{</span></span><span class="mord"><span class="mtable"><span class="col-align-c"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:1.45em;"><span style="top:-3.61em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord mathnormal">x</span></span></span><span style="top:-2.41em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord mathnormal" style="margin-right:0.044em;">z</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.95em;"><span></span></span></span></span></span><span class="arraycolsep" style="width:0.5em;"></span><span class="arraycolsep" style="width:0.5em;"></span><span class="col-align-c"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:1.45em;"><span style="top:-3.61em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord mathnormal" style="margin-right:0.0359em;">y</span></span></span><span style="top:-2.41em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord mathnormal" style="margin-right:0.0269em;">w</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.95em;"><span></span></span></span></span></span></span></span><span class="mclose delimcenter" style="top:0em;"><span class="delimsizing size3">}</span></span></span><span class="mspace" style="margin-right:1em;"></span><span class="mspace" style="margin-right:0.1667em;"></span><span class="minner"><span class="mopen"><span class="delimsizing mult"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:1.45em;"><span style="top:-3.45em;"><span class="pstrut" style="height:4.4em;"></span><span style="width:0.333em;height:2.4em;"><svg xmlns="http://www.w3.org/2000/svg" width="0.333em" height="2.4em" viewBox="0 0 333 2400"><path d="M145 15 v585 v1200 v585 c2.667,10,9.667,15,21,15c10,0,16.667,-5,20,-15 v-585 v-1200 v-585 c-2.667,-10,-9.667,-15,-21,-15c-10,0,-16.667,5,-20,15z M188 15 H145 v585 v1200 v585 h43z"></path></svg></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.95em;"><span></span></span></span></span></span></span><span class="mord"><span class="mtable"><span class="col-align-c"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:1.45em;"><span style="top:-3.61em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord mathnormal" style="margin-right:0.0037em;">α</span></span></span><span style="top:-2.41em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord mathnormal" style="margin-right:0.0556em;">γ</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.95em;"><span></span></span></span></span></span><span class="arraycolsep" style="width:0.5em;"></span><span class="arraycolsep" style="width:0.5em;"></span><span class="col-align-c"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:1.45em;"><span style="top:-3.61em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord mathnormal" style="margin-right:0.0528em;">β</span></span></span><span style="top:-2.41em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord mathnormal" style="margin-right:0.0379em;">δ</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.95em;"><span></span></span></span></span></span></span></span><span class="mclose"><span class="delimsizing mult"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:1.45em;"><span style="top:-3.45em;"><span class="pstrut" style="height:4.4em;"></span><span style="width:0.333em;height:2.4em;"><svg xmlns="http://www.w3.org/2000/svg" width="0.333em" height="2.4em" viewBox="0 0 333 2400"><path d="M145 15 v585 v1200 v585 c2.667,10,9.667,15,21,15c10,0,16.667,-5,20,-15 v-585 v-1200 v-585 c-2.667,-10,-9.667,-15,-21,-15c-10,0,-16.667,5,-20,15z M188 15 H145 v585 v1200 v585 h43z"></path></svg></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.95em;"><span></span></span></span></span></span></span></span></span></span></span></span></p><h2 id="%E5%BE%AE%E7%A7%AF%E5%88%86%E4%B8%8E%E6%9E%81%E9%99%90" tabindex="-1">微积分与极限</h2><p>求导与积分的排版测试：</p><p class="katex-block"><span class="katex-display"><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML" display="block"><semantics><mrow><munder><mrow><mi>lim</mi><mo>⁡</mo></mrow><mrow><mi>x</mi><mo>→</mo><mi mathvariant="normal">∞</mi></mrow></munder><msup><mrow><mo fence="true">(</mo><mn>1</mn><mo>+</mo><mfrac><mn>1</mn><mi>x</mi></mfrac><mo fence="true">)</mo></mrow><mi>x</mi></msup><mo>=</mo><mi>e</mi></mrow><annotation encoding="application/x-tex">\lim_{x \to \infty} \left(1 + \frac{1}{x}\right)^x = e</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="katex-base"><span class="katex-strut" style="height:2.4543em;vertical-align:-0.95em;"></span><span class="mop op-limits"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.6944em;"><span style="top:-2.4em;margin-left:0em;"><span class="pstrut" style="height:3em;"></span><span class="katex-sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">x</span><span class="mrel mtight">→</span><span class="mord mtight">∞</span></span></span></span><span style="top:-3em;"><span class="pstrut" style="height:3em;"></span><span><span class="mop">lim</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.7em;"><span></span></span></span></span></span><span class="mspace" style="margin-right:0.1667em;"></span><span class="minner"><span class="minner"><span class="mopen delimcenter" style="top:0em;"><span class="delimsizing size3">(</span></span><span class="mord">1</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">+</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mord"><span class="mopen nulldelimiter"></span><span class="mfrac"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:1.3214em;"><span style="top:-2.314em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord mathnormal">x</span></span></span><span style="top:-3.23em;"><span class="pstrut" style="height:3em;"></span><span class="frac-line" style="border-bottom-width:0.04em;"></span></span><span style="top:-3.677em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord">1</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.686em;"><span></span></span></span></span></span><span class="mclose nulldelimiter"></span></span><span class="mclose delimcenter" style="top:0em;"><span class="delimsizing size3">)</span></span></span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:1.5043em;"><span style="top:-3.9029em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="katex-sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight">x</span></span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="katex-base"><span class="katex-strut" style="height:0.4306em;"></span><span class="mord mathnormal">e</span></span></span></span></span></p><p class="katex-block"><span class="katex-display"><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML" display="block"><semantics><mrow><msubsup><mo>∫</mo><mrow><mo>−</mo><mi mathvariant="normal">∞</mi></mrow><mi mathvariant="normal">∞</mi></msubsup><msup><mi>e</mi><mrow><mo>−</mo><msup><mi>x</mi><mn>2</mn></msup></mrow></msup><mi>d</mi><mi>x</mi><mo>=</mo><msqrt><mi>π</mi></msqrt></mrow><annotation encoding="application/x-tex">\int_{-\infty}^{\infty} e^{-x^2} dx = \sqrt{\pi}</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="katex-base"><span class="katex-strut" style="height:2.3846em;vertical-align:-0.9703em;"></span><span class="mop"><span class="mop op-symbol large-op" style="margin-right:0.4445em;position:relative;top:-0.0011em;">∫</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:1.4143em;"><span style="top:-1.7881em;margin-left:-0.4445em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="katex-sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mtight">−</span><span class="mord mtight">∞</span></span></span></span><span style="top:-3.8129em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="katex-sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mtight">∞</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.9703em;"><span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord"><span class="mord mathnormal">e</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:1.0369em;"><span style="top:-3.113em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="katex-sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mtight">−</span><span class="mord mtight"><span class="mord mathnormal mtight">x</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.8913em;"><span style="top:-2.931em;margin-right:0.0714em;"><span class="pstrut" style="height:2.5em;"></span><span class="katex-sizing reset-size3 size1 mtight"><span class="mord mtight">2</span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span><span class="mord mathnormal">d</span><span class="mord mathnormal">x</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="katex-base"><span class="katex-strut" style="height:1.04em;vertical-align:-0.1908em;"></span><span class="mord sqrt"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.8492em;"><span class="svg-align" style="top:-3em;"><span class="pstrut" style="height:3em;"></span><span class="mord" style="padding-left:0.833em;"><span class="mord mathnormal" style="margin-right:0.0359em;">π</span></span></span><span style="top:-2.8092em;"><span class="pstrut" style="height:3em;"></span><span class="hide-tail" style="min-width:0.853em;height:1.08em;"><svg xmlns="http://www.w3.org/2000/svg" width="400em" height="1.08em" viewBox="0 0 400000 1080" preserveAspectRatio="xMinYMin slice"><path d="M95,702c-2.7,0,-7.17,-2.7,-13.5,-8c-5.8,-5.3,-9.5,-10,-9.5,-14c0,-2,0.3,-3.3,1,-4c1.3,-2.7,23.83,-20.7,67.5,-54c44.2,-33.3,65.8,-50.3,66.5,-51c1.3,-1.3,3,-2,5,-2c4.7,0,8.7,3.3,12,10s173,378,173,378c0.7,0,35.3,-71,104,-213c68.7,-142,137.5,-285,206.5,-429c69,-144,104.5,-217.7,106.5,-221l0 -0c5.3,-9.3,12,-14,20,-14H400000v40H845.2724s-225.272,467,-225.272,467s-235,486,-235,486c-2.7,4.7,-9,7,-19,7c-6,0,-10,-1,-12,-3s-194,-422,-194,-422s-65,47,-65,47zM834 80h400000v40h-400000z"></path></svg></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.1908em;"><span></span></span></span></span></span></span></span></span></span></p><p class="katex-block"><span class="katex-display"><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML" display="block"><semantics><mrow><mfrac><mi>d</mi><mrow><mi>d</mi><mi>x</mi></mrow></mfrac><mrow><mo fence="true">(</mo><msubsup><mo>∫</mo><mi>a</mi><mi>x</mi></msubsup><mi>f</mi><mo stretchy="false">(</mo><mi>t</mi><mo stretchy="false">)</mo><mi>d</mi><mi>t</mi><mo fence="true">)</mo></mrow><mo>=</mo><mi>f</mi><mo stretchy="false">(</mo><mi>x</mi><mo stretchy="false">)</mo></mrow><annotation encoding="application/x-tex">\frac{d}{dx} \left( \int_{a}^{x} f(t) dt \right) = f(x)</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="katex-base"><span class="katex-strut" style="height:2.4em;vertical-align:-0.95em;"></span><span class="mord"><span class="mopen nulldelimiter"></span><span class="mfrac"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:1.3714em;"><span style="top:-2.314em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord mathnormal">d</span><span class="mord mathnormal">x</span></span></span><span style="top:-3.23em;"><span class="pstrut" style="height:3em;"></span><span class="frac-line" style="border-bottom-width:0.04em;"></span></span><span style="top:-3.677em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord mathnormal">d</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.686em;"><span></span></span></span></span></span><span class="mclose nulldelimiter"></span></span><span class="mspace" style="margin-right:0.1667em;"></span><span class="minner"><span class="mopen delimcenter" style="top:0em;"><span class="delimsizing size3">(</span></span><span class="mop"><span class="mop op-symbol large-op" style="margin-right:0.4445em;position:relative;top:-0.0011em;">∫</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:1.4143em;"><span style="top:-1.7881em;margin-left:-0.4445em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="katex-sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">a</span></span></span></span><span style="top:-3.8129em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="katex-sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">x</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.9119em;"><span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord mathnormal" style="margin-right:0.1076em;">f</span><span class="mopen">(</span><span class="mord mathnormal">t</span><span class="mclose">)</span><span class="mord mathnormal">d</span><span class="mord mathnormal">t</span><span class="mclose delimcenter" style="top:0em;"><span class="delimsizing size3">)</span></span></span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="katex-base"><span class="katex-strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mord mathnormal" style="margin-right:0.1076em;">f</span><span class="mopen">(</span><span class="mord mathnormal">x</span><span class="mclose">)</span></span></span></span></span></p><h2 id="%E5%8C%96%E5%AD%A6%E6%96%B9%E7%A8%8B%E5%BC%8F%E4%B8%93%E5%8C%BA" tabindex="-1">化学方程式专区</h2><h3 id="%E5%9F%BA%E7%A1%80%E5%8C%96%E5%AD%A6%E5%BC%8F%E4%B8%8E%E7%A6%BB%E5%AD%90" tabindex="-1">基础化学式与离子</h3><p>分子：<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi mathvariant="normal">H</mi><msub><mpadded width="0px"><mphantom><mi>X</mi></mphantom></mpadded><mpadded height="0px"><mn>2</mn></mpadded></msub><mi mathvariant="normal">O</mi></mrow><annotation encoding="application/x-tex">\ce{H2O}</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="katex-base"><span class="katex-strut" style="height:0.8333em;vertical-align:-0.15em;"></span><span class="mord"><span class="mord mathrm">H</span><span class="mord"><span class="mord"><span class="mord rlap"><span class="katex-inner"><span class="mord" style="color:transparent;"><span class="mord mathnormal" style="margin-right:0.0785em;color:transparent;">X</span></span></span><span class="katex-fix"></span></span></span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:-0.15em;"><span style="top:-2.55em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="katex-sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mtight"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0em;"><span style="top:-2.7em;"><span class="pstrut" style="height:2.7em;"></span><span><span class="mord mtight"><span class="mord mtight">2</span></span></span></span></span></span></span></span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span><span class="mord mathrm">O</span></span></span></span></span>, <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mrow><mi mathvariant="normal">S</mi><mi mathvariant="normal">b</mi></mrow><msub><mpadded width="0px"><mphantom><mi>X</mi></mphantom></mpadded><mpadded height="0px"><mn>2</mn></mpadded></msub><mi mathvariant="normal">O</mi><msub><mpadded width="0px"><mphantom><mi>X</mi></mphantom></mpadded><mpadded height="0px"><mn>3</mn></mpadded></msub></mrow><annotation encoding="application/x-tex">\ce{Sb2O3}</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="katex-base"><span class="katex-strut" style="height:0.8444em;vertical-align:-0.15em;"></span><span class="mord"><span class="mord"><span class="mord mathrm">Sb</span></span><span class="mord"><span class="mord"><span class="mord rlap"><span class="katex-inner"><span class="mord" style="color:transparent;"><span class="mord mathnormal" style="margin-right:0.0785em;color:transparent;">X</span></span></span><span class="katex-fix"></span></span></span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:-0.15em;"><span style="top:-2.55em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="katex-sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mtight"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0em;"><span style="top:-2.7em;"><span class="pstrut" style="height:2.7em;"></span><span><span class="mord mtight"><span class="mord mtight">2</span></span></span></span></span></span></span></span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span><span class="mord mathrm">O</span><span class="mord"><span class="mord"><span class="mord rlap"><span class="katex-inner"><span class="mord" style="color:transparent;"><span class="mord mathnormal" style="margin-right:0.0785em;color:transparent;">X</span></span></span><span class="katex-fix"></span></span></span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:-0.15em;"><span style="top:-2.55em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="katex-sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mtight"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0em;"><span style="top:-2.7em;"><span class="pstrut" style="height:2.7em;"></span><span><span class="mord mtight"><span class="mord mtight">3</span></span></span></span></span></span></span></span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span></span></span></span></span>, <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mrow><mi mathvariant="normal">A</mi><mi mathvariant="normal">g</mi><mi mathvariant="normal">C</mi><mi mathvariant="normal">l</mi></mrow><msub><mpadded width="0px"><mphantom><mi>X</mi></mphantom></mpadded><mpadded height="0px"><mn>2</mn></mpadded></msub><msup><mpadded width="0px"><mphantom><mi>X</mi></mphantom></mpadded><mo lspace="0em" rspace="0em">−</mo></msup></mrow><annotation encoding="application/x-tex">\ce{AgCl2-}</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="katex-base"><span class="katex-strut" style="height:1.039em;vertical-align:-0.1944em;"></span><span class="mord"><span class="mord"><span class="mord mathrm">AgCl</span></span><span class="mord"><span class="mord"><span class="mord rlap"><span class="katex-inner"><span class="mord" style="color:transparent;"><span class="mord mathnormal" style="margin-right:0.0785em;color:transparent;">X</span></span></span><span class="katex-fix"></span></span></span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:-0.15em;"><span style="top:-2.55em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="katex-sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mtight"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0em;"><span style="top:-2.7em;"><span class="pstrut" style="height:2.7em;"></span><span><span class="mord mtight"><span class="mord mtight">2</span></span></span></span></span></span></span></span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span><span class="mord"><span class="mord"><span class="mord rlap"><span class="katex-inner"><span class="mord" style="color:transparent;"><span class="mord mathnormal" style="margin-right:0.0785em;color:transparent;">X</span></span></span><span class="katex-fix"></span></span></span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.8446em;"><span style="top:-3.1362em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="katex-sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mtight">−</span></span></span></span></span></span></span></span></span></span></span></span></span>离子：<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi mathvariant="normal">H</mi><msup><mpadded width="0px"><mphantom><mi>X</mi></mphantom></mpadded><mo lspace="0em" rspace="0em">+</mo></msup></mrow><annotation encoding="application/x-tex">\ce{H+}</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="katex-base"><span class="katex-strut" style="height:0.8446em;"></span><span class="mord"><span class="mord mathrm">H</span><span class="mord"><span class="mord"><span class="mord rlap"><span class="katex-inner"><span class="mord" style="color:transparent;"><span class="mord mathnormal" style="margin-right:0.0785em;color:transparent;">X</span></span></span><span class="katex-fix"></span></span></span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.8446em;"><span style="top:-3.1362em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="katex-sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mtight">+</span></span></span></span></span></span></span></span></span></span></span></span></span>, <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mrow><mi mathvariant="normal">C</mi><mi mathvariant="normal">r</mi><mi mathvariant="normal">O</mi></mrow><msub><mpadded width="0px"><mphantom><mi>X</mi></mphantom></mpadded><mpadded height="0px"><mn>4</mn></mpadded></msub><msup><mpadded width="0px"><mphantom><mi>X</mi></mphantom></mpadded><mrow><mn>2</mn><mo>−</mo></mrow></msup></mrow><annotation encoding="application/x-tex">\ce{CrO4^2-}</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="katex-base"><span class="katex-strut" style="height:1.0373em;vertical-align:-0.15em;"></span><span class="mord"><span class="mord"><span class="mord mathrm">CrO</span></span><span class="mord"><span class="mord"><span class="mord rlap"><span class="katex-inner"><span class="mord" style="color:transparent;"><span class="mord mathnormal" style="margin-right:0.0785em;color:transparent;">X</span></span></span><span class="katex-fix"></span></span></span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:-0.15em;"><span style="top:-2.55em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="katex-sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mtight"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0em;"><span style="top:-2.7em;"><span class="pstrut" style="height:2.7em;"></span><span><span class="mord mtight"><span class="mord mtight">4</span></span></span></span></span></span></span></span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span><span class="mord"><span class="mord"><span class="mord rlap"><span class="katex-inner"><span class="mord" style="color:transparent;"><span class="mord mathnormal" style="margin-right:0.0785em;color:transparent;">X</span></span></span><span class="katex-fix"></span></span></span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.8873em;"><span style="top:-3.1362em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="katex-sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mtight">2</span><span class="mord mtight">−</span></span></span></span></span></span></span></span></span></span></span></span></span>, <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mo stretchy="false">[</mo><mrow><mi mathvariant="normal">A</mi><mi mathvariant="normal">g</mi><mi mathvariant="normal">C</mi><mi mathvariant="normal">l</mi></mrow><msub><mpadded width="0px"><mphantom><mi>X</mi></mphantom></mpadded><mpadded height="0px"><mn>2</mn></mpadded></msub><mo stretchy="false">]</mo><msup><mpadded width="0px"><mphantom><mi>X</mi></mphantom></mpadded><mo lspace="0em" rspace="0em">−</mo></msup></mrow><annotation encoding="application/x-tex">\ce{[AgCl2]-}</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="katex-base"><span class="katex-strut" style="height:1.0946em;vertical-align:-0.25em;"></span><span class="mord"><span class="mopen">[</span><span class="mord"><span class="mord mathrm">AgCl</span></span><span class="mord"><span class="mord"><span class="mord rlap"><span class="katex-inner"><span class="mord" style="color:transparent;"><span class="mord mathnormal" style="margin-right:0.0785em;color:transparent;">X</span></span></span><span class="katex-fix"></span></span></span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:-0.15em;"><span style="top:-2.55em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="katex-sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mtight"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0em;"><span style="top:-2.7em;"><span class="pstrut" style="height:2.7em;"></span><span><span class="mord mtight"><span class="mord mtight">2</span></span></span></span></span></span></span></span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span><span class="mclose">]</span><span class="mord"><span class="mord"><span class="mord rlap"><span class="katex-inner"><span class="mord" style="color:transparent;"><span class="mord mathnormal" style="margin-right:0.0785em;color:transparent;">X</span></span></span><span class="katex-fix"></span></span></span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.8446em;"><span style="top:-3.1362em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="katex-sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mtight">−</span></span></span></span></span></span></span></span></span></span></span></span></span>同位素：<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msubsup><mpadded width="0px"><mphantom><mi>X</mi></mphantom></mpadded><mpadded height="0px" depth="0px"><mphantom><mn>90</mn></mphantom></mpadded><mpadded height="0px" depth="0px"><mphantom><mn>227</mn></mphantom></mpadded></msubsup><msubsup><mpadded width="0px"><mphantom><mi>X</mi></mphantom></mpadded><mrow><mpadded width="0px"><mphantom><mn>2</mn></mphantom></mpadded><mpadded lspace="-1width" width="0px"><mpadded height="0px"><mn>90</mn></mpadded></mpadded></mrow><mrow><mpadded height="0px"><mpadded width="0px"><mphantom><mn>2</mn></mphantom></mpadded></mpadded><mpadded lspace="-1width" width="0px"><mn>227</mn></mpadded></mrow></msubsup><mrow><mi mathvariant="normal">T</mi><mi mathvariant="normal">h</mi></mrow><msup><mpadded width="0px"><mphantom><mi>X</mi></mphantom></mpadded><mo lspace="0em" rspace="0em">+</mo></msup></mrow><annotation encoding="application/x-tex">\ce{^{227}_{90}Th+}</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="katex-base"><span class="katex-strut" style="height:1.1343em;vertical-align:-0.247em;"></span><span class="mord"><span class="mord"><span class="mord"><span class="mord rlap"><span class="katex-inner"><span class="mord" style="color:transparent;"><span class="mord mathnormal" style="margin-right:0.0785em;color:transparent;">X</span></span></span><span class="katex-fix"></span></span></span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.4362em;"><span style="top:-2.453em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="katex-sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord katex-smash mtight"><span><span class="mord mtight"><span class="mord mtight" style="color:transparent;">90</span></span></span></span></span></span></span><span style="top:-3.1362em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="katex-sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord katex-smash mtight"><span><span class="mord mtight"><span class="mord mtight" style="color:transparent;">227</span></span></span></span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.247em;"><span></span></span></span></span></span></span><span class="mord"><span class="mord"><span class="mord rlap"><span class="katex-inner"><span class="mord" style="color:transparent;"><span class="mord mathnormal" style="margin-right:0.0785em;color:transparent;">X</span></span></span><span class="katex-fix"></span></span></span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.8873em;"><span style="top:-2.453em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="katex-sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord rlap mtight"><span class="katex-inner"><span class="mord mtight" style="color:transparent;"><span class="mord mtight" style="color:transparent;">2</span></span></span><span class="katex-fix"></span></span><span class="mord katex-vbox mtight"><span class="katex-thinbox mtight"><span class="llap mtight"><span class="katex-strut" style="height:0em;"></span><span class="katex-inner"><span class="mord mtight"><span class="mord mtight"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0em;"><span style="top:-2.7em;"><span class="pstrut" style="height:2.7em;"></span><span><span class="mord mtight"><span class="mord mtight">90</span></span></span></span></span></span></span></span></span></span><span class="katex-fix"></span></span></span></span></span></span></span><span style="top:-3.1362em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="katex-sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mtight"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0em;"><span style="top:-2.7em;"><span class="pstrut" style="height:2.7em;"></span><span><span class="mord mtight"><span class="mord rlap mtight"><span class="katex-inner"><span class="mord mtight" style="color:transparent;"><span class="mord mtight" style="color:transparent;">2</span></span></span><span class="katex-fix"></span></span></span></span></span></span></span></span></span><span class="mord katex-vbox mtight"><span class="katex-thinbox mtight"><span class="llap mtight"><span class="katex-strut" style="height:0.6444em;"></span><span class="katex-inner"><span class="mord mtight"><span class="mord mtight">227</span></span></span><span class="katex-fix"></span></span></span></span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.247em;"><span></span></span></span></span></span></span><span class="mord"><span class="mord mathrm">Th</span></span><span class="mord"><span class="mord"><span class="mord rlap"><span class="katex-inner"><span class="mord" style="color:transparent;"><span class="mord mathnormal" style="margin-right:0.0785em;color:transparent;">X</span></span></span><span class="katex-fix"></span></span></span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.8446em;"><span style="top:-3.1362em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="katex-sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mtight">+</span></span></span></span></span></span></span></span></span></span></span></span></span>, <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msubsup><mpadded width="0px"><mphantom><mi>X</mi></mphantom></mpadded><mpadded height="0px" depth="0px"><mphantom><mn>90</mn></mphantom></mpadded><mpadded height="0px" depth="0px"><mphantom><mn>227</mn></mphantom></mpadded></msubsup><msubsup><mpadded width="0px"><mphantom><mi>X</mi></mphantom></mpadded><mrow><mpadded width="0px"><mphantom><mn>2</mn></mphantom></mpadded><mpadded lspace="-1width" width="0px"><mpadded height="0px"><mn>90</mn></mpadded></mpadded></mrow><mrow><mpadded height="0px"><mpadded width="0px"><mphantom><mn>2</mn></mphantom></mpadded></mpadded><mpadded lspace="-1width" width="0px"><mn>227</mn></mpadded></mrow></msubsup><mrow><mi mathvariant="normal">T</mi><mi mathvariant="normal">h</mi></mrow><msup><mpadded width="0px"><mphantom><mi>X</mi></mphantom></mpadded><mo lspace="0em" rspace="0em">+</mo></msup></mrow><annotation encoding="application/x-tex">\ce{^227_90Th+}</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="katex-base"><span class="katex-strut" style="height:1.1343em;vertical-align:-0.247em;"></span><span class="mord"><span class="mord"><span class="mord"><span class="mord rlap"><span class="katex-inner"><span class="mord" style="color:transparent;"><span class="mord mathnormal" style="margin-right:0.0785em;color:transparent;">X</span></span></span><span class="katex-fix"></span></span></span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.4362em;"><span style="top:-2.453em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="katex-sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord katex-smash mtight"><span><span class="mord mtight"><span class="mord mtight" style="color:transparent;">90</span></span></span></span></span></span></span><span style="top:-3.1362em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="katex-sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord katex-smash mtight"><span><span class="mord mtight"><span class="mord mtight" style="color:transparent;">227</span></span></span></span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.247em;"><span></span></span></span></span></span></span><span class="mord"><span class="mord"><span class="mord rlap"><span class="katex-inner"><span class="mord" style="color:transparent;"><span class="mord mathnormal" style="margin-right:0.0785em;color:transparent;">X</span></span></span><span class="katex-fix"></span></span></span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.8873em;"><span style="top:-2.453em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="katex-sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord rlap mtight"><span class="katex-inner"><span class="mord mtight" style="color:transparent;"><span class="mord mtight" style="color:transparent;">2</span></span></span><span class="katex-fix"></span></span><span class="mord katex-vbox mtight"><span class="katex-thinbox mtight"><span class="llap mtight"><span class="katex-strut" style="height:0em;"></span><span class="katex-inner"><span class="mord mtight"><span class="mord mtight"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0em;"><span style="top:-2.7em;"><span class="pstrut" style="height:2.7em;"></span><span><span class="mord mtight"><span class="mord mtight">90</span></span></span></span></span></span></span></span></span></span><span class="katex-fix"></span></span></span></span></span></span></span><span style="top:-3.1362em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="katex-sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mtight"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0em;"><span style="top:-2.7em;"><span class="pstrut" style="height:2.7em;"></span><span><span class="mord mtight"><span class="mord rlap mtight"><span class="katex-inner"><span class="mord mtight" style="color:transparent;"><span class="mord mtight" style="color:transparent;">2</span></span></span><span class="katex-fix"></span></span></span></span></span></span></span></span></span><span class="mord katex-vbox mtight"><span class="katex-thinbox mtight"><span class="llap mtight"><span class="katex-strut" style="height:0.6444em;"></span><span class="katex-inner"><span class="mord mtight"><span class="mord mtight">227</span></span></span><span class="katex-fix"></span></span></span></span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.247em;"><span></span></span></span></span></span></span><span class="mord"><span class="mord mathrm">Th</span></span><span class="mord"><span class="mord"><span class="mord rlap"><span class="katex-inner"><span class="mord" style="color:transparent;"><span class="mord mathnormal" style="margin-right:0.0785em;color:transparent;">X</span></span></span><span class="katex-fix"></span></span></span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.8446em;"><span style="top:-3.1362em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="katex-sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mtight">+</span></span></span></span></span></span></span></span></span></span></span></span></span>复杂结构：<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mrow><mi mathvariant="normal">K</mi><mi mathvariant="normal">C</mi><mi mathvariant="normal">r</mi></mrow><mo stretchy="false">(</mo><mrow><mi mathvariant="normal">S</mi><mi mathvariant="normal">O</mi></mrow><msub><mpadded width="0px"><mphantom><mi>X</mi></mphantom></mpadded><mpadded height="0px"><mn>4</mn></mpadded></msub><mo stretchy="false">)</mo><msub><mpadded width="0px"><mphantom><mi>X</mi></mphantom></mpadded><mpadded height="0px"><mn>2</mn></mpadded></msub><mtext> </mtext><mo lspace="0em" rspace="0em">⋅</mo><mtext> </mtext><mn>12</mn><mtext> </mtext><mi mathvariant="normal">H</mi><msub><mpadded width="0px"><mphantom><mi>X</mi></mphantom></mpadded><mpadded height="0px"><mn>2</mn></mpadded></msub><mi mathvariant="normal">O</mi></mrow><annotation encoding="application/x-tex">\ce{KCr(SO4)2 * 12H2O}</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="katex-base"><span class="katex-strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mord"><span class="mord"><span class="mord mathrm">KCr</span></span><span class="mopen">(</span><span class="mord"><span class="mord mathrm">SO</span></span><span class="mord"><span class="mord"><span class="mord rlap"><span class="katex-inner"><span class="mord" style="color:transparent;"><span class="mord mathnormal" style="margin-right:0.0785em;color:transparent;">X</span></span></span><span class="katex-fix"></span></span></span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:-0.15em;"><span style="top:-2.55em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="katex-sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mtight"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0em;"><span style="top:-2.7em;"><span class="pstrut" style="height:2.7em;"></span><span><span class="mord mtight"><span class="mord mtight">4</span></span></span></span></span></span></span></span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span><span class="mclose">)</span><span class="mord"><span class="mord"><span class="mord rlap"><span class="katex-inner"><span class="mord" style="color:transparent;"><span class="mord mathnormal" style="margin-right:0.0785em;color:transparent;">X</span></span></span><span class="katex-fix"></span></span></span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:-0.15em;"><span style="top:-2.55em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="katex-sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mtight"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0em;"><span style="top:-2.7em;"><span class="pstrut" style="height:2.7em;"></span><span><span class="mord mtight"><span class="mord mtight">2</span></span></span></span></span></span></span></span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord"><span class="mord">⋅</span></span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord">12</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord mathrm">H</span><span class="mord"><span class="mord"><span class="mord rlap"><span class="katex-inner"><span class="mord" style="color:transparent;"><span class="mord mathnormal" style="margin-right:0.0785em;color:transparent;">X</span></span></span><span class="katex-fix"></span></span></span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:-0.15em;"><span style="top:-2.55em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="katex-sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mtight"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0em;"><span style="top:-2.7em;"><span class="pstrut" style="height:2.7em;"></span><span><span class="mord mtight"><span class="mord mtight">2</span></span></span></span></span></span></span></span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span><span class="mord mathrm">O</span></span></span></span></span></p><h3 id="%E5%8C%96%E5%AD%A6%E5%8F%8D%E5%BA%94%E6%96%B9%E7%A8%8B%E5%BC%8F" tabindex="-1">化学反应方程式</h3><p>基础反应：</p><p class="katex-block"><span class="katex-display"><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML" display="block"><semantics><mrow><mrow><mi mathvariant="normal">C</mi><mi mathvariant="normal">O</mi></mrow><msub><mpadded width="0px"><mphantom><mi>X</mi></mphantom></mpadded><mpadded height="0px"><mn>2</mn></mpadded></msub><mrow></mrow><mo>+</mo><mrow></mrow><mi mathvariant="normal">C</mi><mover><mo stretchy="true" minsize="3.0em">→</mo><mpadded width="+0.6em" lspace="0.3em"><mrow></mrow></mpadded></mover><mn>2</mn><mtext> </mtext><mrow><mi mathvariant="normal">C</mi><mi mathvariant="normal">O</mi></mrow></mrow><annotation encoding="application/x-tex">\ce{CO2 + C -&gt; 2 CO}</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="katex-base"><span class="katex-strut" style="height:0.8333em;vertical-align:-0.15em;"></span><span class="mord"><span class="mord"><span class="mord mathrm">CO</span></span><span class="mord"><span class="mord"><span class="mord rlap"><span class="katex-inner"><span class="mord" style="color:transparent;"><span class="mord mathnormal" style="margin-right:0.0785em;color:transparent;">X</span></span></span><span class="katex-fix"></span></span></span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:-0.15em;"><span style="top:-2.55em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="katex-sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mtight"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0em;"><span style="top:-2.7em;"><span class="pstrut" style="height:2.7em;"></span><span><span class="mord mtight"><span class="mord mtight">2</span></span></span></span></span></span></span></span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span><span class="mord"></span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">+</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mord"></span><span class="mord mathrm">C</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel x-arrow"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.622em;"><span style="top:-3.144em;"><span class="pstrut" style="height:2.522em;"></span><span class="katex-sizing reset-size6 size3 mtight x-arrow-pad"><span class="mord mtight"></span></span></span><span class="svg-align" style="top:-2.511em;"><span class="pstrut" style="height:2.522em;"></span><span class="hide-tail" style="height:0.522em;min-width:1.469em;"><svg xmlns="http://www.w3.org/2000/svg" width="400em" height="0.522em" viewBox="0 0 400000 522" preserveAspectRatio="xMaxYMin slice"><path d="M0 241v40h399891c-47.3 35.3-84 78-110 128-16.7 32-27.7 63.7-33 95 0 1.3-.2 2.7-.5 4-.3 1.3-.5 2.3-.5 3 0 7.3 6.7 11 20 11 8 0 13.2-.8 15.5-2.5 2.3-1.7 4.2-5.5 5.5-11.5 2-13.3 5.7-27 11-41 14.7-44.7 39-84.5 73-119.5s73.7-60.2 119-75.5c6-2 9-5.7 9-11s-3-9-9-11c-45.3-15.3-85-40.5-119-75.5s-58.3-74.8-73-119.5c-4.7-14-8.3-27.3-11-40-1.3-6.7-3.2-10.8-5.5-12.5-2.3-1.7-7.5-2.5-15.5-2.5-14 0-21 3.7-21 11 0 2 2 10.3 6 25 20.7 83.3 67 151.7 139 205zm0 0v40h399900v-40z"></path></svg></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.011em;"><span></span></span></span></span></span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mord">2</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord"><span class="mord mathrm">CO</span></span></span></span></span></span></span></p><p>带有气体与沉淀符号：</p><p class="katex-block"><span class="katex-display"><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML" display="block"><semantics><mrow><mrow><mi mathvariant="normal">S</mi><mi mathvariant="normal">O</mi></mrow><msub><mpadded width="0px"><mphantom><mi>X</mi></mphantom></mpadded><mpadded height="0px"><mn>4</mn></mpadded></msub><msup><mpadded width="0px"><mphantom><mi>X</mi></mphantom></mpadded><mrow><mn>2</mn><mo>−</mo></mrow></msup><mrow></mrow><mo>+</mo><mrow></mrow><mrow><mi mathvariant="normal">B</mi><mi mathvariant="normal">a</mi></mrow><msup><mpadded width="0px"><mphantom><mi>X</mi></mphantom></mpadded><mrow><mn>2</mn><mo>+</mo></mrow></msup><mover><mo stretchy="true" minsize="3.0em">→</mo><mpadded width="+0.6em" lspace="0.3em"><mrow></mrow></mpadded></mover><mrow><mi mathvariant="normal">B</mi><mi mathvariant="normal">a</mi><mi mathvariant="normal">S</mi><mi mathvariant="normal">O</mi></mrow><msub><mpadded width="0px"><mphantom><mi>X</mi></mphantom></mpadded><mpadded height="0px"><mn>4</mn></mpadded></msub><mo>↓</mo><mrow></mrow></mrow><annotation encoding="application/x-tex">\ce{SO4^2- + Ba^2+ -&gt; BaSO4 v}</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="katex-base"><span class="katex-strut" style="height:1.0818em;vertical-align:-0.1944em;"></span><span class="mord"><span class="mord"><span class="mord mathrm">SO</span></span><span class="mord"><span class="mord"><span class="mord rlap"><span class="katex-inner"><span class="mord" style="color:transparent;"><span class="mord mathnormal" style="margin-right:0.0785em;color:transparent;">X</span></span></span><span class="katex-fix"></span></span></span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:-0.15em;"><span style="top:-2.55em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="katex-sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mtight"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0em;"><span style="top:-2.7em;"><span class="pstrut" style="height:2.7em;"></span><span><span class="mord mtight"><span class="mord mtight">4</span></span></span></span></span></span></span></span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span><span class="mord"><span class="mord"><span class="mord rlap"><span class="katex-inner"><span class="mord" style="color:transparent;"><span class="mord mathnormal" style="margin-right:0.0785em;color:transparent;">X</span></span></span><span class="katex-fix"></span></span></span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.8873em;"><span style="top:-3.1362em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="katex-sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mtight">2</span><span class="mord mtight">−</span></span></span></span></span></span></span></span></span><span class="mord"></span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">+</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mord"></span><span class="mord"><span class="mord mathrm">Ba</span></span><span class="mord"><span class="mord"><span class="mord rlap"><span class="katex-inner"><span class="mord" style="color:transparent;"><span class="mord mathnormal" style="margin-right:0.0785em;color:transparent;">X</span></span></span><span class="katex-fix"></span></span></span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.8873em;"><span style="top:-3.1362em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="katex-sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mtight">2</span><span class="mord mtight">+</span></span></span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel x-arrow"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.622em;"><span style="top:-3.144em;"><span class="pstrut" style="height:2.522em;"></span><span class="katex-sizing reset-size6 size3 mtight x-arrow-pad"><span class="mord mtight"></span></span></span><span class="svg-align" style="top:-2.511em;"><span class="pstrut" style="height:2.522em;"></span><span class="hide-tail" style="height:0.522em;min-width:1.469em;"><svg xmlns="http://www.w3.org/2000/svg" width="400em" height="0.522em" viewBox="0 0 400000 522" preserveAspectRatio="xMaxYMin slice"><path d="M0 241v40h399891c-47.3 35.3-84 78-110 128-16.7 32-27.7 63.7-33 95 0 1.3-.2 2.7-.5 4-.3 1.3-.5 2.3-.5 3 0 7.3 6.7 11 20 11 8 0 13.2-.8 15.5-2.5 2.3-1.7 4.2-5.5 5.5-11.5 2-13.3 5.7-27 11-41 14.7-44.7 39-84.5 73-119.5s73.7-60.2 119-75.5c6-2 9-5.7 9-11s-3-9-9-11c-45.3-15.3-85-40.5-119-75.5s-58.3-74.8-73-119.5c-4.7-14-8.3-27.3-11-40-1.3-6.7-3.2-10.8-5.5-12.5-2.3-1.7-7.5-2.5-15.5-2.5-14 0-21 3.7-21 11 0 2 2 10.3 6 25 20.7 83.3 67 151.7 139 205zm0 0v40h399900v-40z"></path></svg></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.011em;"><span></span></span></span></span></span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mord"><span class="mord mathrm">BaSO</span></span><span class="mord"><span class="mord"><span class="mord rlap"><span class="katex-inner"><span class="mord" style="color:transparent;"><span class="mord mathnormal" style="margin-right:0.0785em;color:transparent;">X</span></span></span><span class="katex-fix"></span></span></span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:-0.15em;"><span style="top:-2.55em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="katex-sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mtight"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0em;"><span style="top:-2.7em;"><span class="pstrut" style="height:2.7em;"></span><span><span class="mord mtight"><span class="mord mtight">4</span></span></span></span></span></span></span></span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">↓</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mord"></span></span></span></span></span></span></p><p class="katex-block"><span class="katex-display"><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML" display="block"><semantics><mrow><mrow><mi mathvariant="normal">Z</mi><mi mathvariant="normal">n</mi></mrow><mrow></mrow><mo>+</mo><mrow></mrow><mn>2</mn><mtext> </mtext><mi mathvariant="normal">H</mi><msup><mpadded width="0px"><mphantom><mi>X</mi></mphantom></mpadded><mo lspace="0em" rspace="0em">+</mo></msup><mover><mo stretchy="true" minsize="3.0em">→</mo><mpadded width="+0.6em" lspace="0.3em"><mrow></mrow></mpadded></mover><mrow><mi mathvariant="normal">Z</mi><mi mathvariant="normal">n</mi></mrow><msup><mpadded width="0px"><mphantom><mi>X</mi></mphantom></mpadded><mrow><mn>2</mn><mo>+</mo></mrow></msup><mrow></mrow><mo>+</mo><mrow></mrow><mi mathvariant="normal">H</mi><msub><mpadded width="0px"><mphantom><mi>X</mi></mphantom></mpadded><mpadded height="0px"><mn>2</mn></mpadded></msub><mo>↑</mo><mrow></mrow></mrow><annotation encoding="application/x-tex">\ce{Zn + 2H+ -&gt; Zn^2+ + H2 ^}</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="katex-base"><span class="katex-strut" style="height:1.0818em;vertical-align:-0.1944em;"></span><span class="mord"><span class="mord"><span class="mord mathrm">Zn</span></span><span class="mord"></span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">+</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mord"></span><span class="mord">2</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord mathrm">H</span><span class="mord"><span class="mord"><span class="mord rlap"><span class="katex-inner"><span class="mord" style="color:transparent;"><span class="mord mathnormal" style="margin-right:0.0785em;color:transparent;">X</span></span></span><span class="katex-fix"></span></span></span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.8446em;"><span style="top:-3.1362em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="katex-sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mtight">+</span></span></span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel x-arrow"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.622em;"><span style="top:-3.144em;"><span class="pstrut" style="height:2.522em;"></span><span class="katex-sizing reset-size6 size3 mtight x-arrow-pad"><span class="mord mtight"></span></span></span><span class="svg-align" style="top:-2.511em;"><span class="pstrut" style="height:2.522em;"></span><span class="hide-tail" style="height:0.522em;min-width:1.469em;"><svg xmlns="http://www.w3.org/2000/svg" width="400em" height="0.522em" viewBox="0 0 400000 522" preserveAspectRatio="xMaxYMin slice"><path d="M0 241v40h399891c-47.3 35.3-84 78-110 128-16.7 32-27.7 63.7-33 95 0 1.3-.2 2.7-.5 4-.3 1.3-.5 2.3-.5 3 0 7.3 6.7 11 20 11 8 0 13.2-.8 15.5-2.5 2.3-1.7 4.2-5.5 5.5-11.5 2-13.3 5.7-27 11-41 14.7-44.7 39-84.5 73-119.5s73.7-60.2 119-75.5c6-2 9-5.7 9-11s-3-9-9-11c-45.3-15.3-85-40.5-119-75.5s-58.3-74.8-73-119.5c-4.7-14-8.3-27.3-11-40-1.3-6.7-3.2-10.8-5.5-12.5-2.3-1.7-7.5-2.5-15.5-2.5-14 0-21 3.7-21 11 0 2 2 10.3 6 25 20.7 83.3 67 151.7 139 205zm0 0v40h399900v-40z"></path></svg></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.011em;"><span></span></span></span></span></span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mord"><span class="mord mathrm">Zn</span></span><span class="mord"><span class="mord"><span class="mord rlap"><span class="katex-inner"><span class="mord" style="color:transparent;"><span class="mord mathnormal" style="margin-right:0.0785em;color:transparent;">X</span></span></span><span class="katex-fix"></span></span></span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.8873em;"><span style="top:-3.1362em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="katex-sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mtight">2</span><span class="mord mtight">+</span></span></span></span></span></span></span></span></span><span class="mord"></span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">+</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mord"></span><span class="mord mathrm">H</span><span class="mord"><span class="mord"><span class="mord rlap"><span class="katex-inner"><span class="mord" style="color:transparent;"><span class="mord mathnormal" style="margin-right:0.0785em;color:transparent;">X</span></span></span><span class="katex-fix"></span></span></span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:-0.15em;"><span style="top:-2.55em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="katex-sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mtight"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0em;"><span style="top:-2.7em;"><span class="pstrut" style="height:2.7em;"></span><span><span class="mord mtight"><span class="mord mtight">2</span></span></span></span></span></span></span></span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">↑</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mord"></span></span></span></span></span></span></p><h3 id="%E5%8F%8D%E5%BA%94%E6%9D%A1%E4%BB%B6%E4%B8%8E%E7%AE%AD%E5%A4%B4%E7%AC%A6%E5%8F%B7" tabindex="-1">反应条件与箭头符号</h3><p>燃烧反应（箭头上方带条件）：</p><p class="katex-block"><span class="katex-display"><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML" display="block"><semantics><mrow><mn>2</mn><mtext> </mtext><mi mathvariant="normal">H</mi><msub><mpadded width="0px"><mphantom><mi>X</mi></mphantom></mpadded><mpadded height="0px"><mn>2</mn></mpadded></msub><mrow></mrow><mo>+</mo><mrow></mrow><mi mathvariant="normal">O</mi><msub><mpadded width="0px"><mphantom><mi>X</mi></mphantom></mpadded><mpadded height="0px"><mn>2</mn></mpadded></msub><mover><mo stretchy="true" minsize="3.0em">→</mo><mpadded width="+0.6em" lspace="0.3em"><mtext>点燃</mtext></mpadded></mover><mn> 2</mn><mtext> </mtext><mi mathvariant="normal">H</mi><msub><mpadded width="0px"><mphantom><mi>X</mi></mphantom></mpadded><mpadded height="0px"><mn>2</mn></mpadded></msub><mi mathvariant="normal">O</mi></mrow><annotation encoding="application/x-tex">\ce {2H2 + O2 -&gt;[\text {点燃}] 2H2O}</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="katex-base"><span class="katex-strut" style="height:1.2503em;vertical-align:-0.15em;"></span><span class="mord"><span class="mord">2</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord mathrm">H</span><span class="mord"><span class="mord"><span class="mord rlap"><span class="katex-inner"><span class="mord" style="color:transparent;"><span class="mord mathnormal" style="margin-right:0.0785em;color:transparent;">X</span></span></span><span class="katex-fix"></span></span></span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:-0.15em;"><span style="top:-2.55em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="katex-sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mtight"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0em;"><span style="top:-2.7em;"><span class="pstrut" style="height:2.7em;"></span><span><span class="mord mtight"><span class="mord mtight">2</span></span></span></span></span></span></span></span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span><span class="mord"></span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">+</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mord"></span><span class="mord mathrm">O</span><span class="mord"><span class="mord"><span class="mord rlap"><span class="katex-inner"><span class="mord" style="color:transparent;"><span class="mord mathnormal" style="margin-right:0.0785em;color:transparent;">X</span></span></span><span class="katex-fix"></span></span></span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:-0.15em;"><span style="top:-2.55em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="katex-sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mtight"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0em;"><span style="top:-2.7em;"><span class="pstrut" style="height:2.7em;"></span><span><span class="mord mtight"><span class="mord mtight">2</span></span></span></span></span></span></span></span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel x-arrow"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:1.1003em;"><span style="top:-3.322em;"><span class="pstrut" style="height:2.7em;"></span><span class="katex-sizing reset-size6 size3 mtight x-arrow-pad"><span class="mord mtight"><span class="mord text mtight"><span class="mord cjk_fallback mtight">点燃</span></span></span></span></span><span class="svg-align" style="top:-2.689em;"><span class="pstrut" style="height:2.7em;"></span><span class="hide-tail" style="height:0.522em;min-width:1.469em;"><svg xmlns="http://www.w3.org/2000/svg" width="400em" height="0.522em" viewBox="0 0 400000 522" preserveAspectRatio="xMaxYMin slice"><path d="M0 241v40h399891c-47.3 35.3-84 78-110 128-16.7 32-27.7 63.7-33 95 0 1.3-.2 2.7-.5 4-.3 1.3-.5 2.3-.5 3 0 7.3 6.7 11 20 11 8 0 13.2-.8 15.5-2.5 2.3-1.7 4.2-5.5 5.5-11.5 2-13.3 5.7-27 11-41 14.7-44.7 39-84.5 73-119.5s73.7-60.2 119-75.5c6-2 9-5.7 9-11s-3-9-9-11c-45.3-15.3-85-40.5-119-75.5s-58.3-74.8-73-119.5c-4.7-14-8.3-27.3-11-40-1.3-6.7-3.2-10.8-5.5-12.5-2.3-1.7-7.5-2.5-15.5-2.5-14 0-21 3.7-21 11 0 2 2 10.3 6 25 20.7 83.3 67 151.7 139 205zm0 0v40h399900v-40z"></path></svg></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.011em;"><span></span></span></span></span></span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mord">2</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord mathrm">H</span><span class="mord"><span class="mord"><span class="mord rlap"><span class="katex-inner"><span class="mord" style="color:transparent;"><span class="mord mathnormal" style="margin-right:0.0785em;color:transparent;">X</span></span></span><span class="katex-fix"></span></span></span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:-0.15em;"><span style="top:-2.55em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="katex-sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mtight"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0em;"><span style="top:-2.7em;"><span class="pstrut" style="height:2.7em;"></span><span><span class="mord mtight"><span class="mord mtight">2</span></span></span></span></span></span></span></span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span><span class="mord mathrm">O</span></span></span></span></span></span></p><p>加热条件（使用 <code>\Delta</code>）：</p><p class="katex-block"><span class="katex-display"><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML" display="block"><semantics><mrow><mrow><mi mathvariant="normal">C</mi><mi mathvariant="normal">a</mi><mi mathvariant="normal">C</mi><mi mathvariant="normal">O</mi></mrow><msub><mpadded width="0px"><mphantom><mi>X</mi></mphantom></mpadded><mpadded height="0px"><mn>3</mn></mpadded></msub><mover><mo stretchy="true" minsize="3.0em">→</mo><mpadded width="+0.6em" lspace="0.3em"><mi mathvariant="normal">Δ</mi></mpadded></mover><mrow><mi mathvariant="normal">C</mi><mi mathvariant="normal">a</mi><mi mathvariant="normal">O</mi></mrow><mrow></mrow><mo>+</mo><mrow></mrow><mrow><mi mathvariant="normal">C</mi><mi mathvariant="normal">O</mi></mrow><msub><mpadded width="0px"><mphantom><mi>X</mi></mphantom></mpadded><mpadded height="0px"><mn>2</mn></mpadded></msub><mo>↑</mo><mrow></mrow></mrow><annotation encoding="application/x-tex">\ce{CaCO3 -&gt;[\Delta] CaO + CO2 ^}</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="katex-base"><span class="katex-strut" style="height:1.2948em;vertical-align:-0.1944em;"></span><span class="mord"><span class="mord"><span class="mord mathrm">CaCO</span></span><span class="mord"><span class="mord"><span class="mord rlap"><span class="katex-inner"><span class="mord" style="color:transparent;"><span class="mord mathnormal" style="margin-right:0.0785em;color:transparent;">X</span></span></span><span class="katex-fix"></span></span></span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:-0.15em;"><span style="top:-2.55em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="katex-sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mtight"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0em;"><span style="top:-2.7em;"><span class="pstrut" style="height:2.7em;"></span><span><span class="mord mtight"><span class="mord mtight">3</span></span></span></span></span></span></span></span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel x-arrow"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:1.1003em;"><span style="top:-3.322em;"><span class="pstrut" style="height:2.7em;"></span><span class="katex-sizing reset-size6 size3 mtight x-arrow-pad"><span class="mord mtight"><span class="mord mathrm mtight">Δ</span></span></span></span><span class="svg-align" style="top:-2.689em;"><span class="pstrut" style="height:2.7em;"></span><span class="hide-tail" style="height:0.522em;min-width:1.469em;"><svg xmlns="http://www.w3.org/2000/svg" width="400em" height="0.522em" viewBox="0 0 400000 522" preserveAspectRatio="xMaxYMin slice"><path d="M0 241v40h399891c-47.3 35.3-84 78-110 128-16.7 32-27.7 63.7-33 95 0 1.3-.2 2.7-.5 4-.3 1.3-.5 2.3-.5 3 0 7.3 6.7 11 20 11 8 0 13.2-.8 15.5-2.5 2.3-1.7 4.2-5.5 5.5-11.5 2-13.3 5.7-27 11-41 14.7-44.7 39-84.5 73-119.5s73.7-60.2 119-75.5c6-2 9-5.7 9-11s-3-9-9-11c-45.3-15.3-85-40.5-119-75.5s-58.3-74.8-73-119.5c-4.7-14-8.3-27.3-11-40-1.3-6.7-3.2-10.8-5.5-12.5-2.3-1.7-7.5-2.5-15.5-2.5-14 0-21 3.7-21 11 0 2 2 10.3 6 25 20.7 83.3 67 151.7 139 205zm0 0v40h399900v-40z"></path></svg></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.011em;"><span></span></span></span></span></span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mord"><span class="mord mathrm">CaO</span></span><span class="mord"></span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">+</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mord"></span><span class="mord"><span class="mord mathrm">CO</span></span><span class="mord"><span class="mord"><span class="mord rlap"><span class="katex-inner"><span class="mord" style="color:transparent;"><span class="mord mathnormal" style="margin-right:0.0785em;color:transparent;">X</span></span></span><span class="katex-fix"></span></span></span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:-0.15em;"><span style="top:-2.55em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="katex-sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mtight"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0em;"><span style="top:-2.7em;"><span class="pstrut" style="height:2.7em;"></span><span><span class="mord mtight"><span class="mord mtight">2</span></span></span></span></span></span></span></span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">↑</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mord"></span></span></span></span></span></span></p><p>可逆反应与平衡移动：</p><p class="katex-block"><span class="katex-display"><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML" display="block"><semantics><mrow><mi mathvariant="normal">N</mi><msub><mpadded width="0px"><mphantom><mi>X</mi></mphantom></mpadded><mpadded height="0px"><mn>2</mn></mpadded></msub><mrow></mrow><mo>+</mo><mrow></mrow><mn>3</mn><mtext> </mtext><mi mathvariant="normal">H</mi><msub><mpadded width="0px"><mphantom><mi>X</mi></mphantom></mpadded><mpadded height="0px"><mn>2</mn></mpadded></msub><mover><mo stretchy="true" minsize="3.0em">⇌</mo><mpadded width="+0.6em" lspace="0.3em"><mrow></mrow></mpadded></mover><mn>2</mn><mtext> </mtext><mrow><mi mathvariant="normal">N</mi><mi mathvariant="normal">H</mi></mrow><msub><mpadded width="0px"><mphantom><mi>X</mi></mphantom></mpadded><mpadded height="0px"><mn>3</mn></mpadded></msub></mrow><annotation encoding="application/x-tex">\ce{N2 + 3H2 &lt;=&gt; 2NH3}</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="katex-base"><span class="katex-strut" style="height:0.869em;vertical-align:-0.15em;"></span><span class="mord"><span class="mord mathrm">N</span><span class="mord"><span class="mord"><span class="mord rlap"><span class="katex-inner"><span class="mord" style="color:transparent;"><span class="mord mathnormal" style="margin-right:0.0785em;color:transparent;">X</span></span></span><span class="katex-fix"></span></span></span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:-0.15em;"><span style="top:-2.55em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="katex-sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mtight"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0em;"><span style="top:-2.7em;"><span class="pstrut" style="height:2.7em;"></span><span><span class="mord mtight"><span class="mord mtight">2</span></span></span></span></span></span></span></span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span><span class="mord"></span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">+</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mord"></span><span class="mord">3</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord mathrm">H</span><span class="mord"><span class="mord"><span class="mord rlap"><span class="katex-inner"><span class="mord" style="color:transparent;"><span class="mord mathnormal" style="margin-right:0.0785em;color:transparent;">X</span></span></span><span class="katex-fix"></span></span></span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:-0.15em;"><span style="top:-2.55em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="katex-sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mtight"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0em;"><span style="top:-2.7em;"><span class="pstrut" style="height:2.7em;"></span><span><span class="mord mtight"><span class="mord mtight">2</span></span></span></span></span></span></span></span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel x-arrow"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.719em;"><span style="top:-3.435em;"><span class="pstrut" style="height:2.716em;"></span><span class="katex-sizing reset-size6 size3 mtight x-arrow-pad"><span class="mord mtight"></span></span></span><span class="svg-align" style="top:-2.608em;"><span class="pstrut" style="height:2.716em;"></span><span class="katex-stretchy" style="height:0.716em;min-width:1.75em;"><span class="halfarrow-left" style="height:0.716em;"><svg xmlns="http://www.w3.org/2000/svg" width="400em" height="0.716em" viewBox="0 0 400000 716" preserveAspectRatio="xMinYMin slice"><path d="M7 435c-4 4-6.3 8.7-7 14 0 5.3.7 9 2 11s5.3 5.3 12 10c90.7 54 156 130 196 228 3.3 10.7 6.3 16.3 9 17 2 .7 5 1 9 1h5c10.7 0 16.7-2 18-6 2-2.7 1-9.7-3-21-32-87.3-82.7-157.7-152-211l-3-3h399907v-40H7zm93 0v40h399900v-40zM0 241v40h399900v-40zm0 0v40h399900v-40z"></path></svg></span><span class="halfarrow-right" style="height:0.716em;"><svg xmlns="http://www.w3.org/2000/svg" width="400em" height="0.716em" viewBox="0 0 400000 716" preserveAspectRatio="xMaxYMin slice"><path d="M0 241v40h399993c4.7-4.7 7-9.3 7-14 0-9.3-3.7-15.3-11-18-92.7-56.7-159-133.7-199-231-3.3-9.3-6-14.7-8-16-2-1.3-7-2-15-2-10.7 0-16.7 2-18 6-2 2.7-1 9.7 3 21 15.3 42 36.7 81.8 64 119.5 27.3 37.7 58 69.2 92 94.5zm0 0v40h399900v-40z m100 194v40h399900v-40zm0 0v40h399900v-40z"></path></svg></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.108em;"><span></span></span></span></span></span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mord">2</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord"><span class="mord mathrm">NH</span></span><span class="mord"><span class="mord"><span class="mord rlap"><span class="katex-inner"><span class="mord" style="color:transparent;"><span class="mord mathnormal" style="margin-right:0.0785em;color:transparent;">X</span></span></span><span class="katex-fix"></span></span></span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:-0.15em;"><span style="top:-2.55em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="katex-sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mtight"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0em;"><span style="top:-2.7em;"><span class="pstrut" style="height:2.7em;"></span><span><span class="mord mtight"><span class="mord mtight">3</span></span></span></span></span></span></span></span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span></span></span></span></span></span></p><p class="katex-block"><span class="katex-display"><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML" display="block"><semantics><mrow><mrow><mi mathvariant="normal">A</mi><mover><mo stretchy="true" minsize="3.0em">⇄</mo><mpadded width="+0.6em" lspace="0.3em"><mrow></mrow></mpadded></mover><mi mathvariant="normal">B</mi></mrow><mspace width="1em"><mtext>(等长箭头)</mtext></mspace></mrow><annotation encoding="application/x-tex">\ce {A &lt;--&gt; B} \quad \text {(等长箭头)}</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="katex-base"><span class="katex-strut" style="height:1.0615em;vertical-align:-0.25em;"></span><span class="mord"><span class="mord mathrm">A</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel x-arrow"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.8115em;"><span style="top:-3.7125em;"><span class="pstrut" style="height:2.901em;"></span><span class="katex-sizing reset-size6 size3 mtight x-arrow-pad"><span class="mord mtight"></span></span></span><span class="svg-align" style="top:-2.7005em;"><span class="pstrut" style="height:2.901em;"></span><span class="katex-stretchy" style="height:0.901em;min-width:1.75em;"><span class="halfarrow-left" style="height:0.901em;"><svg xmlns="http://www.w3.org/2000/svg" width="400em" height="0.901em" viewBox="0 0 400000 901" preserveAspectRatio="xMinYMin slice"><path d="M400000 620h-399890l3 -3c68.7 -52.7 113.7 -120 135 -202c4 -14.7 6 -23 6 -25c0 -7.3 -7 -11 -21 -11c-8 0 -13.2 0.8 -15.5 2.5c-2.3 1.7 -4.2 5.8 -5.5 12.5c-1.3 4.7 -2.7 10.3 -4 17c-12 48.7 -34.8 92 -68.5 130s-74.2 66.3 -121.5 85c-10 4 -16 7.7 -18 11c0 8.7 6 14.3 18 17c47.3 18.7 87.8 47121.5 85s56.5 81.3 68.5 130c0.7 2 1.3 5 2 9s1.2 6.7 1.5 8c0.3 1.3 1 3.3 2 6s2.2 4.5 3.5 5.5c1.3 1 3.3 1.8 6 2.5s6 1 10 1c14 0 21 -3.7 21 -11c0 -2 -2 -10.3 -6 -25c-20 -79.3 -65 -146.7 -135 -202l-3 -3h399890zM100 620v40h399900v-40z M0 241v40h399900v-40zM0 241v40h399900v-40z"></path></svg></span><span class="halfarrow-right" style="height:0.901em;"><svg xmlns="http://www.w3.org/2000/svg" width="400em" height="0.901em" viewBox="0 0 400000 901" preserveAspectRatio="xMaxYMin slice"><path d="M0 241v40h399891c-47.3 35.3-84 78-110 128-16.7 32-27.7 63.7-33 95 0 1.3-.2 2.7-.5 4-.3 1.3-.5 2.3-.5 3 0 7.3 6.7 11 20 11 8 013.2-.8 15.5-2.5 2.3-1.7 4.2-5.5 5.5-11.5 2-13.3 5.7-27 11-41 14.7-44.7 39-84.5 73-119.5s73.7-60.2 119-75.5c6-2 9-5.7 9-11s-3-9-9-11c-45.3-15.3-85-40.5-119-75.5s-58.3-74.8-73-119.5c-4.7-14-8.3-27.3-11-40-1.3-6.7-3.2-10.8-5.5-12.5-2.3-1.7-7.5-2.5-15.5-2.5-14 0-21 3.7-21 11 0 2 2 10.3 6 25 20.7 83.3 67151.7 139 205zm96 379h399894v40H0zm0 0h399904v40H0z"></path></svg></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.2005em;"><span></span></span></span></span></span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mord mathrm">B</span></span><span class="mspace" style="margin-right:1em;"></span><span class="mord text"><span class="mord">(</span><span class="mord cjk_fallback">等长箭头</span><span class="mord">)</span></span></span></span></span></span></p><p class="katex-block"><span class="katex-display"><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML" display="block"><semantics><mrow><mrow><mi mathvariant="normal">A</mi><mover><mo stretchy="true" minsize="3.0em">⇌</mo><mpadded width="+0.6em" lspace="0.3em"><mrow></mrow></mpadded></mover><mi mathvariant="normal">B</mi></mrow><mspace width="1em"><mtext>(平衡正向移动)</mtext></mspace></mrow><annotation encoding="application/x-tex">\ce {A &lt;=&gt;&gt; B} \quad \text {(平衡正向移动)}</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="katex-base"><span class="katex-strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mord"><span class="mord mathrm">A</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel x-arrow"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.719em;"><span style="top:-3.435em;"><span class="pstrut" style="height:2.716em;"></span><span class="katex-sizing reset-size6 size3 mtight x-arrow-pad"><span class="mord mtight"></span></span></span><span class="svg-align" style="top:-2.608em;"><span class="pstrut" style="height:2.716em;"></span><span class="katex-stretchy" style="height:0.716em;min-width:1.75em;"><span class="halfarrow-left" style="height:0.716em;"><svg xmlns="http://www.w3.org/2000/svg" width="400em" height="0.716em" viewBox="0 0 400000 716" preserveAspectRatio="xMinYMin slice"><path d="M507,435c-4,4,-6.3,8.7,-7,14c0,5.3,0.7,9,2,11c1.3,2,5.3,5.3,12,10c90.7,54,156,130,196,228c3.3,10.7,6.3,16.3,9,17c2,0.7,5,1,9,1c0,0,5,0,5,0c10.7,0,16.7,-2,18,-6c2,-2.7,1,-9.7,-3,-21c-32,-87.3,-82.7,-157.7,-152,-211c0,0,-3,-3,-3,-3l399351,0l0,-40c-398570,0,-399437,0,-399437,0z M593 435 v40 H399500 v-40zM0 281 v-40 H399908 v40z M0 281 v-40 H399908 v40z"></path></svg></span><span class="halfarrow-right" style="height:0.716em;"><svg xmlns="http://www.w3.org/2000/svg" width="400em" height="0.716em" viewBox="0 0 400000 716" preserveAspectRatio="xMaxYMin slice"><path d="M0,241 l0,40c399126,0,399993,0,399993,0c4.7,-4.7,7,-9.3,7,-14c0,-9.3,-3.7,-15.3,-11,-18c-92.7,-56.7,-159,-133.7,-199,-231c-3.3,-9.3,-6,-14.7,-8,-16c-2,-1.3,-7,-2,-15,-2c-10.7,0,-16.7,2,-18,6c-2,2.7,-1,9.7,3,21c15.3,42,36.7,81.8,64,119.5c27.3,37.7,58,69.2,92,94.5zM0 241 v40 H399908 v-40z M0 475 v-40 H399500 v40z M0 475 v-40 H399500 v40z"></path></svg></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.108em;"><span></span></span></span></span></span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mord mathrm">B</span></span><span class="mspace" style="margin-right:1em;"></span><span class="mord text"><span class="mord">(</span><span class="mord cjk_fallback">平衡正向移动</span><span class="mord">)</span></span></span></span></span></span></p><h3 id="%E6%9C%89%E6%9C%BA%E5%8C%96%E5%AD%A6%E4%B8%8E%E5%A4%9A%E8%A1%8C%E5%8F%8D%E5%BA%94" tabindex="-1">有机化学与多行反应</h3><p>有机物结构简式：</p><p class="katex-block"><span class="katex-display"><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML" display="block"><semantics><mrow><mrow><mrow><mi mathvariant="normal">C</mi><mi mathvariant="normal">H</mi></mrow><msub><mpadded width="0px"><mphantom><mi>X</mi></mphantom></mpadded><mpadded height="0px"><mn>3</mn></mpadded></msub><mo lspace="0em" rspace="0em">−</mo><mrow><mi mathvariant="normal">C</mi><mi mathvariant="normal">H</mi></mrow><msub><mpadded width="0px"><mphantom><mi>X</mi></mphantom></mpadded><mpadded height="0px"><mn>2</mn></mpadded></msub><mo lspace="0em" rspace="0em">−</mo><mrow><mi mathvariant="normal">O</mi><mi mathvariant="normal">H</mi></mrow></mrow><mspace width="1em"><mtext> 或</mtext><mspace width="1em"><mrow><mrow><mi mathvariant="normal"> C</mi><mi mathvariant="normal">H</mi></mrow><msub><mpadded width="0px"><mphantom><mi>X</mi></mphantom></mpadded><mpadded height="0px"><mn>3</mn></mpadded></msub><mo lspace="0em" rspace="0em">=</mo><mrow><mi mathvariant="normal">C</mi><mi mathvariant="normal">H</mi></mrow><msub><mpadded width="0px"><mphantom><mi>X</mi></mphantom></mpadded><mpadded height="0px"><mn>2</mn></mpadded></msub></mrow><mspace width="1em"><mtext> 或</mtext><mspace width="1em"><mrow><mi mathvariant="normal"> A</mi><mrow><mpadded width="0px"><mphantom><mo>−</mo></mphantom></mpadded><mpadded voffset="2.56mu"><mstyle scriptlevel="0" displaystyle="false"><mstyle scriptlevel="0" displaystyle="false"><mspace width="0.1111em"><mstyle mathsize="0.5em"><mtext>-</mtext><mspace width="0.0818em"><mtext>-</mtext><mspace width="0.0818em"><mtext>-</mtext><mspace width="0.1636em"></mspace></mspace></mspace></mstyle></mspace></mstyle></mstyle></mpadded></mrow><mi mathvariant="normal">B</mi><mrow><mpadded width="0px"><mpadded voffset="-0.1em"><mstyle scriptlevel="0" displaystyle="false"><mstyle scriptlevel="0" displaystyle="false"><mo>−</mo></mstyle></mstyle></mpadded></mpadded><mpadded voffset="0.1em"><mstyle scriptlevel="0" displaystyle="false"><mstyle scriptlevel="0" displaystyle="false"><mrow><mpadded width="0px"><mphantom><mo>−</mo></mphantom></mpadded><mpadded voffset="2.56mu"><mstyle scriptlevel="0" displaystyle="false"><mstyle scriptlevel="0" displaystyle="false"><mspace width="0.1111em"><mstyle mathsize="0.5em"><mtext>-</mtext><mspace width="0.0818em"><mtext>-</mtext><mspace width="0.0818em"><mtext>-</mtext><mspace width="0.1636em"></mspace></mspace></mspace></mstyle></mspace></mstyle></mstyle></mpadded></mrow></mstyle></mstyle></mpadded></mrow><mi mathvariant="normal">C</mi></mrow></mspace></mspace></mspace></mspace></mrow><annotation encoding="application/x-tex">\ce {CH3-CH2-OH} \quad \text {或} \quad \ce {CH3\bond {=} CH2} \quad \text {或} \quad \ce {A\bond {~} B\bond {~-} C}</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="katex-base"><span class="katex-strut" style="height:0.8667em;vertical-align:-0.1833em;"></span><span class="mord"><span class="mord"><span class="mord mathrm">CH</span></span><span class="mord"><span class="mord"><span class="mord rlap"><span class="katex-inner"><span class="mord" style="color:transparent;"><span class="mord mathnormal" style="margin-right:0.0785em;color:transparent;">X</span></span></span><span class="katex-fix"></span></span></span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:-0.15em;"><span style="top:-2.55em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="katex-sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mtight"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0em;"><span style="top:-2.7em;"><span class="pstrut" style="height:2.7em;"></span><span><span class="mord mtight"><span class="mord mtight">3</span></span></span></span></span></span></span></span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span><span class="mord"><span class="mord">−</span></span><span class="mord"><span class="mord mathrm">CH</span></span><span class="mord"><span class="mord"><span class="mord rlap"><span class="katex-inner"><span class="mord" style="color:transparent;"><span class="mord mathnormal" style="margin-right:0.0785em;color:transparent;">X</span></span></span><span class="katex-fix"></span></span></span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:-0.15em;"><span style="top:-2.55em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="katex-sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mtight"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0em;"><span style="top:-2.7em;"><span class="pstrut" style="height:2.7em;"></span><span><span class="mord mtight"><span class="mord mtight">2</span></span></span></span></span></span></span></span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span><span class="mord"><span class="mord">−</span></span><span class="mord"><span class="mord mathrm">OH</span></span></span><span class="mspace" style="margin-right:1em;"></span><span class="mord text"><span class="mord cjk_fallback"> 或</span></span><span class="mspace" style="margin-right:1em;"></span><span class="mord"><span class="mord"><span class="mord mathrm"> CH</span></span><span class="mord"><span class="mord"><span class="mord rlap"><span class="katex-inner"><span class="mord" style="color:transparent;"><span class="mord mathnormal" style="margin-right:0.0785em;color:transparent;">X</span></span></span><span class="katex-fix"></span></span></span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:-0.15em;"><span style="top:-2.55em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="katex-sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mtight"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0em;"><span style="top:-2.7em;"><span class="pstrut" style="height:2.7em;"></span><span><span class="mord mtight"><span class="mord mtight">3</span></span></span></span></span></span></span></span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span><span class="mord"><span class="mrel">=</span></span><span class="mord"><span class="mord mathrm">CH</span></span><span class="mord"><span class="mord"><span class="mord rlap"><span class="katex-inner"><span class="mord" style="color:transparent;"><span class="mord mathnormal" style="margin-right:0.0785em;color:transparent;">X</span></span></span><span class="katex-fix"></span></span></span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:-0.15em;"><span style="top:-2.55em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="katex-sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mtight"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0em;"><span style="top:-2.7em;"><span class="pstrut" style="height:2.7em;"></span><span><span class="mord mtight"><span class="mord mtight">2</span></span></span></span></span></span></span></span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span></span><span class="mspace" style="margin-right:1em;"></span><span class="mord text"><span class="mord cjk_fallback">或</span></span><span class="mspace" style="margin-right:1em;"></span><span class="mord"><span class="mord mathrm"> A</span><span class="mord"><span class="mord"><span class="mord rlap"><span class="katex-inner"><span class="mord" style="color:transparent;"><span class="mord" style="color:transparent;">−</span></span></span><span class="katex-fix"></span></span><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.3575em;"><span style="top:-2.6422em;"><span class="pstrut" style="height:2.5em;"></span><span class="mord"><span class="mspace" style="margin-right:0.1111em;"></span><span class="mord text katex-sizing reset-size6 size1"><span class="mord">-</span></span><span class="mspace katex-sizing reset-size6 size1" style="margin-right:0.0818em;"></span><span class="mord text katex-sizing reset-size6 size1"><span class="mord">-</span></span><span class="mspace katex-sizing reset-size6 size1" style="margin-right:0.0818em;"></span><span class="mord text katex-sizing reset-size6 size1"><span class="mord">-</span></span><span class="mspace katex-sizing reset-size6 size1" style="margin-right:0.1636em;"></span></span></span></span></span></span></span></span><span class="mord mathrm">B</span><span class="mord"><span class="mord katex-vbox"><span class="katex-thinbox"><span class="rlap"><span class="katex-strut" style="height:0.6667em;vertical-align:-0.1833em;"></span><span class="katex-inner"><span class="mord"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.4833em;"><span style="top:-2.9em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord">−</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.1833em;"><span></span></span></span></span></span></span><span class="katex-fix"></span></span></span></span><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.6833em;"><span style="top:-3.1em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord"><span class="mord rlap"><span class="katex-inner"><span class="mord" style="color:transparent;"><span class="mord" style="color:transparent;">−</span></span></span><span class="katex-fix"></span></span><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.3575em;"><span style="top:-2.6422em;"><span class="pstrut" style="height:2.5em;"></span><span class="mord"><span class="mspace" style="margin-right:0.1111em;"></span><span class="mord text katex-sizing reset-size6 size1"><span class="mord">-</span></span><span class="mspace katex-sizing reset-size6 size1" style="margin-right:0.0818em;"></span><span class="mord text katex-sizing reset-size6 size1"><span class="mord">-</span></span><span class="mspace katex-sizing reset-size6 size1" style="margin-right:0.0818em;"></span><span class="mord text katex-sizing reset-size6 size1"><span class="mord">-</span></span><span class="mspace katex-sizing reset-size6 size1" style="margin-right:0.1636em;"></span></span></span></span></span></span></span></span></span></span></span></span></span><span class="mord mathrm">C</span></span></span></span></span></span></p><p>核反应方程式：</p><p class="katex-block"><span class="katex-display"><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML" display="block"><semantics><mrow><msubsup><mpadded width="0px"><mphantom><mi>X</mi></mphantom></mpadded><mpadded height="0px" depth="0px"><mphantom><mn>92</mn></mphantom></mpadded><mpadded height="0px" depth="0px"><mphantom><mn>235</mn></mphantom></mpadded></msubsup><msubsup><mpadded width="0px"><mphantom><mi>X</mi></mphantom></mpadded><mrow><mpadded width="0px"><mphantom><mn>2</mn></mphantom></mpadded><mpadded lspace="-1width" width="0px"><mpadded height="0px"><mn>92</mn></mpadded></mpadded></mrow><mrow><mpadded height="0px"><mpadded width="0px"><mphantom><mn>2</mn></mphantom></mpadded></mpadded><mpadded lspace="-1width" width="0px"><mn>235</mn></mpadded></mrow></msubsup><mi mathvariant="normal">U</mi><mrow></mrow><mo>+</mo><mrow></mrow><msubsup><mpadded width="0px"><mphantom><mi>X</mi></mphantom></mpadded><mpadded height="0px" depth="0px"><mphantom><mn>0</mn></mphantom></mpadded><mpadded height="0px" depth="0px"><mphantom><mn>1</mn></mphantom></mpadded></msubsup><msubsup><mpadded width="0px"><mphantom><mi>X</mi></mphantom></mpadded><mrow><mpadded width="0px"><mphantom><mn>2</mn></mphantom></mpadded><mpadded lspace="-1width" width="0px"><mpadded height="0px"><mn>0</mn></mpadded></mpadded></mrow><mrow><mpadded height="0px"><mpadded width="0px"><mphantom><mn>2</mn></mphantom></mpadded></mpadded><mpadded lspace="-1width" width="0px"><mn>1</mn></mpadded></mrow></msubsup><mi mathvariant="normal">n</mi><mover><mo stretchy="true" minsize="3.0em">→</mo><mpadded width="+0.6em" lspace="0.3em"><mrow></mrow></mpadded></mover><msubsup><mpadded width="0px"><mphantom><mi>X</mi></mphantom></mpadded><mpadded height="0px" depth="0px"><mphantom><mn>56</mn></mphantom></mpadded><mpadded height="0px" depth="0px"><mphantom><mn>137</mn></mphantom></mpadded></msubsup><msubsup><mpadded width="0px"><mphantom><mi>X</mi></mphantom></mpadded><mrow><mpadded width="0px"><mphantom><mn>2</mn></mphantom></mpadded><mpadded lspace="-1width" width="0px"><mpadded height="0px"><mn>56</mn></mpadded></mpadded></mrow><mrow><mpadded height="0px"><mpadded width="0px"><mphantom><mn>2</mn></mphantom></mpadded></mpadded><mpadded lspace="-1width" width="0px"><mn>137</mn></mpadded></mrow></msubsup><mrow><mi mathvariant="normal">B</mi><mi mathvariant="normal">a</mi></mrow><mrow></mrow><mo>+</mo><mrow></mrow><msubsup><mpadded width="0px"><mphantom><mi>X</mi></mphantom></mpadded><mpadded height="0px" depth="0px"><mphantom><mn>36</mn></mphantom></mpadded><mpadded height="0px" depth="0px"><mphantom><mn>97</mn></mphantom></mpadded></msubsup><msubsup><mpadded width="0px"><mphantom><mi>X</mi></mphantom></mpadded><mrow><mpadded width="0px"><mphantom><mn>2</mn></mphantom></mpadded><mpadded lspace="-1width" width="0px"><mpadded height="0px"><mn>36</mn></mpadded></mpadded></mrow><mrow><mpadded height="0px"><mpadded width="0px"><mphantom><mn>2</mn></mphantom></mpadded></mpadded><mpadded lspace="-1width" width="0px"><mn>97</mn></mpadded></mrow></msubsup><mrow><mi mathvariant="normal">K</mi><mi mathvariant="normal">r</mi></mrow><mrow></mrow><mo>+</mo><mrow></mrow><mn>2</mn><msubsup><mpadded width="0px"><mphantom><mi>X</mi></mphantom></mpadded><mpadded height="0px"><mn>0</mn></mpadded><mn>1</mn></msubsup><mi mathvariant="normal">n</mi></mrow><annotation encoding="application/x-tex">\ce{^{235}_{92}U + ^{1}_{0}n -&gt; ^{137}_{56}Ba + ^{97}_{36}Kr + 2^{1}_{0}n}</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="katex-base"><span class="katex-strut" style="height:1.1343em;vertical-align:-0.247em;"></span><span class="mord"><span class="mord"><span class="mord"><span class="mord rlap"><span class="katex-inner"><span class="mord" style="color:transparent;"><span class="mord mathnormal" style="margin-right:0.0785em;color:transparent;">X</span></span></span><span class="katex-fix"></span></span></span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.4362em;"><span style="top:-2.453em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="katex-sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord katex-smash mtight"><span><span class="mord mtight"><span class="mord mtight" style="color:transparent;">92</span></span></span></span></span></span></span><span style="top:-3.1362em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="katex-sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord katex-smash mtight"><span><span class="mord mtight"><span class="mord mtight" style="color:transparent;">235</span></span></span></span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.247em;"><span></span></span></span></span></span></span><span class="mord"><span class="mord"><span class="mord rlap"><span class="katex-inner"><span class="mord" style="color:transparent;"><span class="mord mathnormal" style="margin-right:0.0785em;color:transparent;">X</span></span></span><span class="katex-fix"></span></span></span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.8873em;"><span style="top:-2.453em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="katex-sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord rlap mtight"><span class="katex-inner"><span class="mord mtight" style="color:transparent;"><span class="mord mtight" style="color:transparent;">2</span></span></span><span class="katex-fix"></span></span><span class="mord katex-vbox mtight"><span class="katex-thinbox mtight"><span class="llap mtight"><span class="katex-strut" style="height:0em;"></span><span class="katex-inner"><span class="mord mtight"><span class="mord mtight"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0em;"><span style="top:-2.7em;"><span class="pstrut" style="height:2.7em;"></span><span><span class="mord mtight"><span class="mord mtight">92</span></span></span></span></span></span></span></span></span></span><span class="katex-fix"></span></span></span></span></span></span></span><span style="top:-3.1362em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="katex-sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mtight"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0em;"><span style="top:-2.7em;"><span class="pstrut" style="height:2.7em;"></span><span><span class="mord mtight"><span class="mord rlap mtight"><span class="katex-inner"><span class="mord mtight" style="color:transparent;"><span class="mord mtight" style="color:transparent;">2</span></span></span><span class="katex-fix"></span></span></span></span></span></span></span></span></span><span class="mord katex-vbox mtight"><span class="katex-thinbox mtight"><span class="llap mtight"><span class="katex-strut" style="height:0.6444em;"></span><span class="katex-inner"><span class="mord mtight"><span class="mord mtight">235</span></span></span><span class="katex-fix"></span></span></span></span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.247em;"><span></span></span></span></span></span></span><span class="mord mathrm">U</span><span class="mord"></span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">+</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mord"></span><span class="mord"><span class="mord"><span class="mord rlap"><span class="katex-inner"><span class="mord" style="color:transparent;"><span class="mord mathnormal" style="margin-right:0.0785em;color:transparent;">X</span></span></span><span class="katex-fix"></span></span></span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.4362em;"><span style="top:-2.453em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="katex-sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord katex-smash mtight"><span><span class="mord mtight"><span class="mord mtight" style="color:transparent;">0</span></span></span></span></span></span></span><span style="top:-3.1362em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="katex-sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord katex-smash mtight"><span><span class="mord mtight"><span class="mord mtight" style="color:transparent;">1</span></span></span></span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.247em;"><span></span></span></span></span></span></span><span class="mord"><span class="mord"><span class="mord rlap"><span class="katex-inner"><span class="mord" style="color:transparent;"><span class="mord mathnormal" style="margin-right:0.0785em;color:transparent;">X</span></span></span><span class="katex-fix"></span></span></span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.8873em;"><span style="top:-2.453em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="katex-sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord rlap mtight"><span class="katex-inner"><span class="mord mtight" style="color:transparent;"><span class="mord mtight" style="color:transparent;">2</span></span></span><span class="katex-fix"></span></span><span class="mord katex-vbox mtight"><span class="katex-thinbox mtight"><span class="llap mtight"><span class="katex-strut" style="height:0em;"></span><span class="katex-inner"><span class="mord mtight"><span class="mord mtight"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0em;"><span style="top:-2.7em;"><span class="pstrut" style="height:2.7em;"></span><span><span class="mord mtight"><span class="mord mtight">0</span></span></span></span></span></span></span></span></span></span><span class="katex-fix"></span></span></span></span></span></span></span><span style="top:-3.1362em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="katex-sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mtight"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0em;"><span style="top:-2.7em;"><span class="pstrut" style="height:2.7em;"></span><span><span class="mord mtight"><span class="mord rlap mtight"><span class="katex-inner"><span class="mord mtight" style="color:transparent;"><span class="mord mtight" style="color:transparent;">2</span></span></span><span class="katex-fix"></span></span></span></span></span></span></span></span></span><span class="mord katex-vbox mtight"><span class="katex-thinbox mtight"><span class="llap mtight"><span class="katex-strut" style="height:0.6444em;"></span><span class="katex-inner"><span class="mord mtight"><span class="mord mtight">1</span></span></span><span class="katex-fix"></span></span></span></span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.247em;"><span></span></span></span></span></span></span><span class="mord mathrm">n</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel x-arrow"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.622em;"><span style="top:-3.144em;"><span class="pstrut" style="height:2.522em;"></span><span class="katex-sizing reset-size6 size3 mtight x-arrow-pad"><span class="mord mtight"></span></span></span><span class="svg-align" style="top:-2.511em;"><span class="pstrut" style="height:2.522em;"></span><span class="hide-tail" style="height:0.522em;min-width:1.469em;"><svg xmlns="http://www.w3.org/2000/svg" width="400em" height="0.522em" viewBox="0 0 400000 522" preserveAspectRatio="xMaxYMin slice"><path d="M0 241v40h399891c-47.3 35.3-84 78-110 128-16.7 32-27.7 63.7-33 95 0 1.3-.2 2.7-.5 4-.3 1.3-.5 2.3-.5 3 0 7.3 6.7 11 20 11 8 0 13.2-.8 15.5-2.5 2.3-1.7 4.2-5.5 5.5-11.5 2-13.3 5.7-27 11-41 14.7-44.7 39-84.5 73-119.5s73.7-60.2 119-75.5c6-2 9-5.7 9-11s-3-9-9-11c-45.3-15.3-85-40.5-119-75.5s-58.3-74.8-73-119.5c-4.7-14-8.3-27.3-11-40-1.3-6.7-3.2-10.8-5.5-12.5-2.3-1.7-7.5-2.5-15.5-2.5-14 0-21 3.7-21 11 0 2 2 10.3 6 25 20.7 83.3 67 151.7 139 205zm0 0v40h399900v-40z"></path></svg></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.011em;"><span></span></span></span></span></span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mord"><span class="mord"><span class="mord rlap"><span class="katex-inner"><span class="mord" style="color:transparent;"><span class="mord mathnormal" style="margin-right:0.0785em;color:transparent;">X</span></span></span><span class="katex-fix"></span></span></span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.4362em;"><span style="top:-2.453em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="katex-sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord katex-smash mtight"><span><span class="mord mtight"><span class="mord mtight" style="color:transparent;">56</span></span></span></span></span></span></span><span style="top:-3.1362em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="katex-sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord katex-smash mtight"><span><span class="mord mtight"><span class="mord mtight" style="color:transparent;">137</span></span></span></span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.247em;"><span></span></span></span></span></span></span><span class="mord"><span class="mord"><span class="mord rlap"><span class="katex-inner"><span class="mord" style="color:transparent;"><span class="mord mathnormal" style="margin-right:0.0785em;color:transparent;">X</span></span></span><span class="katex-fix"></span></span></span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.8873em;"><span style="top:-2.453em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="katex-sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord rlap mtight"><span class="katex-inner"><span class="mord mtight" style="color:transparent;"><span class="mord mtight" style="color:transparent;">2</span></span></span><span class="katex-fix"></span></span><span class="mord katex-vbox mtight"><span class="katex-thinbox mtight"><span class="llap mtight"><span class="katex-strut" style="height:0em;"></span><span class="katex-inner"><span class="mord mtight"><span class="mord mtight"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0em;"><span style="top:-2.7em;"><span class="pstrut" style="height:2.7em;"></span><span><span class="mord mtight"><span class="mord mtight">56</span></span></span></span></span></span></span></span></span></span><span class="katex-fix"></span></span></span></span></span></span></span><span style="top:-3.1362em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="katex-sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mtight"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0em;"><span style="top:-2.7em;"><span class="pstrut" style="height:2.7em;"></span><span><span class="mord mtight"><span class="mord rlap mtight"><span class="katex-inner"><span class="mord mtight" style="color:transparent;"><span class="mord mtight" style="color:transparent;">2</span></span></span><span class="katex-fix"></span></span></span></span></span></span></span></span></span><span class="mord katex-vbox mtight"><span class="katex-thinbox mtight"><span class="llap mtight"><span class="katex-strut" style="height:0.6444em;"></span><span class="katex-inner"><span class="mord mtight"><span class="mord mtight">137</span></span></span><span class="katex-fix"></span></span></span></span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.247em;"><span></span></span></span></span></span></span><span class="mord"><span class="mord mathrm">Ba</span></span><span class="mord"></span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">+</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mord"></span><span class="mord"><span class="mord"><span class="mord rlap"><span class="katex-inner"><span class="mord" style="color:transparent;"><span class="mord mathnormal" style="margin-right:0.0785em;color:transparent;">X</span></span></span><span class="katex-fix"></span></span></span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.4362em;"><span style="top:-2.453em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="katex-sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord katex-smash mtight"><span><span class="mord mtight"><span class="mord mtight" style="color:transparent;">36</span></span></span></span></span></span></span><span style="top:-3.1362em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="katex-sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord katex-smash mtight"><span><span class="mord mtight"><span class="mord mtight" style="color:transparent;">97</span></span></span></span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.247em;"><span></span></span></span></span></span></span><span class="mord"><span class="mord"><span class="mord rlap"><span class="katex-inner"><span class="mord" style="color:transparent;"><span class="mord mathnormal" style="margin-right:0.0785em;color:transparent;">X</span></span></span><span class="katex-fix"></span></span></span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.8873em;"><span style="top:-2.453em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="katex-sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord rlap mtight"><span class="katex-inner"><span class="mord mtight" style="color:transparent;"><span class="mord mtight" style="color:transparent;">2</span></span></span><span class="katex-fix"></span></span><span class="mord katex-vbox mtight"><span class="katex-thinbox mtight"><span class="llap mtight"><span class="katex-strut" style="height:0em;"></span><span class="katex-inner"><span class="mord mtight"><span class="mord mtight"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0em;"><span style="top:-2.7em;"><span class="pstrut" style="height:2.7em;"></span><span><span class="mord mtight"><span class="mord mtight">36</span></span></span></span></span></span></span></span></span></span><span class="katex-fix"></span></span></span></span></span></span></span><span style="top:-3.1362em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="katex-sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mtight"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0em;"><span style="top:-2.7em;"><span class="pstrut" style="height:2.7em;"></span><span><span class="mord mtight"><span class="mord rlap mtight"><span class="katex-inner"><span class="mord mtight" style="color:transparent;"><span class="mord mtight" style="color:transparent;">2</span></span></span><span class="katex-fix"></span></span></span></span></span></span></span></span></span><span class="mord katex-vbox mtight"><span class="katex-thinbox mtight"><span class="llap mtight"><span class="katex-strut" style="height:0.6444em;"></span><span class="katex-inner"><span class="mord mtight"><span class="mord mtight">97</span></span></span><span class="katex-fix"></span></span></span></span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.247em;"><span></span></span></span></span></span></span><span class="mord"><span class="mord mathrm">Kr</span></span><span class="mord"></span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">+</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mord"></span><span class="mord">2</span><span class="mord"><span class="mord"><span class="mord rlap"><span class="katex-inner"><span class="mord" style="color:transparent;"><span class="mord mathnormal" style="margin-right:0.0785em;color:transparent;">X</span></span></span><span class="katex-fix"></span></span></span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.8873em;"><span style="top:-2.453em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="katex-sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mtight"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0em;"><span style="top:-2.7em;"><span class="pstrut" style="height:2.7em;"></span><span><span class="mord mtight"><span class="mord mtight">0</span></span></span></span></span></span></span></span></span></span></span><span style="top:-3.1362em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="katex-sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mtight">1</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.247em;"><span></span></span></span></span></span></span><span class="mord mathrm">n</span></span></span></span></span></span></p><h1 id="%E6%B8%B2%E6%9F%93%E5%99%A8%E6%8B%93%E5%B1%95%E8%AF%AD%E6%B3%95%E6%B5%8B%E8%AF%95" tabindex="-1">渲染器拓展语法测试</h1><p>这是 <abbr title="注释内容">被注释文本</abbr></p><!-- prettier-ignore --><p>上标<sup>示例</sup></p><p>下标<sub>示例</sub></p><p>脚注示例 <sup class="footnote-ref"><a href="#footnote1">[1]</a><a class="footnote-anchor" id="footnote-ref1"></a></sup></p><p><span class="spoiler" tabindex="-1">你知道的太多了！</span></p><h1 id="butterfly-%E6%8B%93%E5%B1%95%E8%AF%AD%E6%B3%95%E6%B5%8B%E8%AF%95" tabindex="-1">Butterfly 拓展语法测试 <sup class="footnote-ref"><a href="#footnote2">[2]</a><a class="footnote-anchor" id="footnote-ref2"></a></sup></h1><h2 id="note" tabindex="-1">Note</h2><h3 id="simple" tabindex="-1">simple</h3><div class="note simple"><p>默认 提示块标签</p></div><div class="note default simple"><p>default 提示块标签</p></div><div class="note primary simple"><p>primary 提示块标签</p></div><div class="note success simple"><p>success 提示块标签</p></div><div class="note info simple"><p>info 提示块标签</p></div><div class="note warning simple"><p>warning 提示块标签</p></div><div class="note danger simple"><p>danger 提示块标签</p></div><h3 id="modern" tabindex="-1">modern</h3><div class="note modern"><p>默认 提示块标签</p></div><div class="note default modern"><p>default 提示块标签</p></div><div class="note primary modern"><p>primary 提示块标签</p></div><div class="note success modern"><p>success 提示块标签</p></div><div class="note info modern"><p>info 提示块标签</p></div><div class="note warning modern"><p>warning 提示块标签</p></div><div class="note danger modern"><p>danger 提示块标签</p></div><h3 id="flat" tabindex="-1">flat</h3><div class="note flat"><p>默认 提示块标签</p></div><div class="note default flat"><p>default 提示块标签</p></div><div class="note primary flat"><p>primary 提示块标签</p></div><div class="note success flat"><p>success 提示块标签</p></div><div class="note info flat"><p>info 提示块标签</p></div><div class="note warning flat"><p>warning 提示块标签</p></div><div class="note danger flat"><p>danger 提示块标签</p></div><h3 id="disable" tabindex="-1">disable</h3><div class="note disabled"><p>默认 提示块标签</p></div><div class="note default disabled"><p>default 提示块标签</p></div><div class="note primary disabled"><p>primary 提示块标签</p></div><div class="note success disabled"><p>success 提示块标签</p></div><div class="note info disabled"><p>info 提示块标签</p></div><div class="note warning disabled"><p>warning 提示块标签</p></div><div class="note danger disabled"><p>danger 提示块标签</p></div><h2 id="gallery-%E7%9B%B8%E5%86%8C%E5%9B%BE%E5%BA%93" tabindex="-1">Gallery 相册图库 <sup class="footnote-ref"><a href="#footnote3">[3]</a><a class="footnote-anchor" id="footnote-ref3"></a></sup></h2><div class="gallery-group-main"><figure class="gallery-group">    <img class="gallery-group-img no-lightbox" src="https://s2.hdslb.com/bfs/article/f152f0964fe951b4e1fc84ef2f2460156d602454.png@1e_1c.webp" alt="Group Image Gallery">    <figcaption>      <div class="gallery-group-name">Kiki</div>      <p>Krita 吉祥物</p>      <a href="https://krita.org/zh/about-zh/kiki-zh/"></a>    </figcaption>  </figure><figure class="gallery-group">    <img class="gallery-group-img no-lightbox" src="https://s2.hdslb.com/bfs/article/b1eb70eabc81cef3c5821cda30de7a817e1dfbcc.png@1e_1c.webp" alt="Group Image Gallery">    <figcaption>      <div class="gallery-group-name">Konqi</div>      <p>KDE 吉祥物</p>      <a href="https://community.kde.org/Konqi"></a>    </figcaption>  </figure><figure class="gallery-group">    <img class="gallery-group-img no-lightbox" src="https://s2.hdslb.com/bfs/article/c33c0861fa58b53ab3b8f7361bb814aad2f08b3b.jpg@1e_1c.webp" alt="Group Image Gallery">    <figcaption>      <div class="gallery-group-name">Sachi</div>      <p>Squishy 吉祥物</p>      <a href="https://docs.scsi.moe/mascot.html"></a>    </figcaption>  </figure><figure class="gallery-group">    <img class="gallery-group-img no-lightbox" src="https://s2.hdslb.com/bfs/album/3476724342a603a7c9b0a332d79c09e1be963df9.png@1000h.webp" alt="Group Image Gallery">    <figcaption>      <div class="gallery-group-name">An-An</div>      <p>AOSC 吉祥物</p>      <a href="https://aosc.io/"></a>    </figcaption>  </figure></div><h2 id="gallery-%E7%9B%B8%E5%86%8C" tabindex="-1">Gallery 相册 <sup class="footnote-ref"><a href="#footnote4">[4]</a><a class="footnote-anchor" id="footnote-ref4"></a></sup></h2><div class="gallery-container" data-type="data" data-button="" data-limit="10" data-first="10">    <div class="gallery-items">[{"url":"https://s2.hdslb.com/bfs/article/f7d418ca42cd207dc63d612cab02ea7526509b14.jpg@1e_1c.webp","alt":"","title":""},{"url":"https://s2.hdslb.com/bfs/article/44635100ad10a7b0924258c318a523cda3d620a9.jpg@1e_1c.webp","alt":"","title":""},{"url":"https://s2.hdslb.com/bfs/article/13545f598e000bcca782fdbe41c37df094d1c49a.jpg@1e_1c.webp","alt":"","title":""},{"url":"https://s2.hdslb.com/bfs/article/f187d68789be25f3d72024956c80b8a27eaafa8c.jpg@1e_1c.webp","alt":"","title":""},{"url":"https://s2.hdslb.com/bfs/article/a3f91dba6f7a5180a212de06bf2789027e1fb796.png@1e_1c.webp","alt":"","title":""},{"url":"https://s2.hdslb.com/bfs/article/10c656350a14eb8aa3fd1a861265dca77e3e2003.png@1e_1c.webp","alt":"","title":""}]</div>  </div><h2 id="tag-hide" tabindex="-1">Tag Hide</h2><p>哪个英文字母最酷？ <span class="hide-inline"><button type="button" class="hide-button" style="background-color: #FF7242;color: #fff">查看答案</button><span class="hide-content"> C，因为西装裤 (C 装酷)</span></span></p><!-- prettier-ignore-start --><h2 id="mermaid" tabindex="-1">Mermaid <sup class="footnote-ref"><a href="#footnote5">[5]</a><a class="footnote-anchor" id="footnote-ref5"></a></sup></h2><div class="mermaid-wrap"><pre class="mermaid-src" data-config="{}" hidden="">    flowchart LRA[Hard] --&gt;|Text| B(Round)B --&gt; C{Decision}C --&gt;|One| D[Result 1]C --&gt;|Two| E[Result 2]  </pre></div><h3 id="%E6%B5%81%E7%A8%8B%E5%9B%BE" tabindex="-1">流程图</h3><div class="mermaid-wrap"><pre class="mermaid-src" data-config="{}" hidden="">    flowchart LRA[Hard] --&gt;|Text| B(Round)B --&gt; C{Decision}C --&gt;|One| D[Result 1]C --&gt;|Two| E[Result 2]  </pre></div><h3 id="%E6%97%B6%E5%BA%8F%E5%9B%BE" tabindex="-1">时序图</h3><div class="mermaid-wrap"><pre class="mermaid-src" data-config="{}" hidden="">    sequenceDiagramAlice-&gt;&gt;John: Hello John, how are you?loop HealthCheck    John-&gt;&gt;John: Fight against hypochondriaendNote right of John: Rational thoughts!John--&gt;&gt;Alice: Great!John-&gt;&gt;Bob: How about you?Bob--&gt;&gt;John: Jolly good!  </pre></div><h3 id="%E7%94%98%E7%89%B9%E5%9B%BE" tabindex="-1">甘特图</h3><div class="mermaid-wrap"><pre class="mermaid-src" data-config="{}" hidden="">    gantt    section Section    Completed :done,    des1, 2014-01-06,2014-01-08    Active        :active,  des2, 2014-01-07, 3d    Parallel 1   :         des3, after des1, 1d    Parallel 2   :         des4, after des1, 1d    Parallel 3   :         des5, after des3, 1d    Parallel 4   :         des6, after des4, 1d  </pre></div><h3 id="%E7%B1%BB%E5%9B%BE" tabindex="-1">类图</h3><div class="mermaid-wrap"><pre class="mermaid-src" data-config="{}" hidden="">    classDiagramClass01 &lt;|-- AveryLongClass : Cool&lt;&lt;Interface&gt;&gt; Class01Class09 --&gt; C2 : Where am I?Class09 --* C3Class09 --|&gt; Class07Class07 : equals()Class07 : Object[] elementDataClass01 : size()Class01 : int chimpClass01 : int gorillaclass Class10 {  &lt;&lt;service&gt;&gt;  int id  size()}  </pre></div><h3 id="%E7%8A%B6%E6%80%81%E5%9B%BE" tabindex="-1">状态图</h3><div class="mermaid-wrap"><pre class="mermaid-src" data-config="{}" hidden="">    stateDiagram-v2[*] --&gt; StillStill --&gt; [*]Still --&gt; MovingMoving --&gt; StillMoving --&gt; CrashCrash --&gt; [*]  </pre></div><h3 id="%E9%A5%BC%E5%9B%BE" tabindex="-1">饼图</h3><div class="mermaid-wrap"><pre class="mermaid-src" data-config="{}" hidden="">    pie"Dogs" : 386"Cats" : 85"Rats" : 15  </pre></div><h3 id="%E7%94%A8%E6%88%B7%E4%BD%93%E9%AA%8C%E6%97%85%E7%A8%8B%E5%9B%BE" tabindex="-1">用户体验旅程图</h3><div class="mermaid-wrap"><pre class="mermaid-src" data-config="{}" hidden="">    journey  title My working day  section Go to work    Make tea: 5: Me    Go upstairs: 3: Me    Do work: 1: Me, Cat  section Go home    Go downstairs: 5: Me    Sit down: 3: Me  </pre></div><h3 id="c4-%E5%9B%BE" tabindex="-1">C4 图</h3><div class="mermaid-wrap"><pre class="mermaid-src" data-config="{}" hidden="">    C4Contexttitle System Context diagram for Internet Banking SystemPerson(customerA, "Banking Customer A", "A customer of the bank, with personal bank accounts.")Person(customerB, "Banking Customer B")Person_Ext(customerC, "Banking Customer C")System(SystemAA, "Internet Banking System", "Allows customers to view information about their bank accounts, and make payments.")Person(customerD, "Banking Customer D", "A customer of the bank, &lt;br/&gt; with personal bank accounts.")Enterprise_Boundary(b1, "BankBoundary") {  SystemDb_Ext(SystemE, "Mainframe Banking System", "Stores all of the core banking information about customers, accounts, transactions, etc.")  System_Boundary(b2, "BankBoundary2") {    System(SystemA, "Banking System A")    System(SystemB, "Banking System B", "A system of the bank, with personal bank accounts.")  }  System_Ext(SystemC, "E-mail system", "The internal Microsoft Exchange e-mail system.")  SystemDb(SystemD, "Banking System D Database", "A system of the bank, with personal bank accounts.")  Boundary(b3, "BankBoundary3", "boundary") {    SystemQueue(SystemF, "Banking System F Queue", "A system of the bank, with personal bank accounts.")    SystemQueue_Ext(SystemG, "Banking System G Queue", "A system of the bank, with personal bank accounts.")  }}BiRel(customerA, SystemAA, "Uses")BiRel(SystemAA, SystemE, "Uses")Rel(SystemAA, SystemC, "Sends e-mails", "SMTP")Rel(SystemC, customerA, "Sends e-mails to")  </pre></div><h2 id="tabs" tabindex="-1">Tabs</h2><div class="tabs"><div class="nav-tabs"><button type="button" class="tab active">test1 1</button><button type="button" class="tab">test1 2</button><button type="button" class="tab">test1 3</button></div><div class="tab-contents"><div class="tab-item-content active"><p><strong>This is Tab 1.</strong></p></div><div class="tab-item-content"><p><strong>This is Tab 2.</strong></p></div><div class="tab-item-content"><p><strong>This is Tab 3.</strong></p></div></div><div class="tab-to-top"><button type="button" aria-label="scroll to top"><i class="fas fa-arrow-up"></i></button></div></div><h2 id="button" tabindex="-1">Button</h2><a class="btn-beautify larger" href="https://butterfly.js.org/" title="Butterfly"><i class="far fa-hand-point-right"></i><span>Butterfly</span></a><a class="btn-beautify blue larger" href="https://butterfly.js.org/" title="Butterfly"><i class="far fa-hand-point-right"></i><span>Butterfly</span></a><a class="btn-beautify pink larger" href="https://butterfly.js.org/" title="Butterfly"><i class="far fa-hand-point-right"></i><span>Butterfly</span></a><a class="btn-beautify red larger" href="https://butterfly.js.org/" title="Butterfly"><i class="far fa-hand-point-right"></i><span>Butterfly</span></a><a class="btn-beautify purple larger" href="https://butterfly.js.org/" title="Butterfly"><i class="far fa-hand-point-right"></i><span>Butterfly</span></a><a class="btn-beautify orange larger" href="https://butterfly.js.org/" title="Butterfly"><i class="far fa-hand-point-right"></i><span>Butterfly</span></a><a class="btn-beautify green larger" href="https://butterfly.js.org/" title="Butterfly"><i class="far fa-hand-point-right"></i><span>Butterfly</span></a><h2 id="label" tabindex="-1">label</h2><p>臣亮言：<mark class="hl-label default">先帝</mark>创业未半，而<mark class="hl-label blue">中道崩殂</mark>。今天下三分，<mark class="hl-label pink">益州疲敝</mark>，此诚<mark class="hl-label red">危急存亡之秋</mark>也！然侍衞之臣，不懈于内；<mark class="hl-label purple">忠志之士</mark>，忘身于外者，盖追先帝之殊遇，欲报之于陛下也。诚宜开张圣听，以光先帝遗德，恢弘志士之气；不宜妄自菲薄，引喻失义，以塞忠谏之路也。</p><p>宫中、府中，俱为一体；陟罚臧否，不宜异同。若有<mark class="hl-label orange">作奸</mark>、<mark class="hl-label green">犯科</mark>，及为忠善者，宜付有司，论其刑赏，以昭陛下平明之治；不宜偏私，使内外异法也。</p><h2 id="timeline" tabindex="-1">Timeline</h2><div class="timeline "><div class="timeline-item headline">        <div class="timeline-item-title">          <div class="item-circle"><p>2022</p></div>        </div>      </div><div class="timeline-item">        <div class="timeline-item-title">          <div class="item-circle"><p>01-02</p></div>        </div>        <div class="timeline-item-content"><p>这是测试页面</p></div>      </div></div><h2 id="chart.js" tabindex="-1">Chart.js</h2><div class="chartjs-container" data-chartjs-id="" data-width="70%">            <pre class="chartjs-src" hidden="">{    "type": "line",    "data": {        "labels": ["January", "February", "March", "April", "May", "June", "July"],        "datasets": [{            "label": "My First dataset",            "backgroundColor": "rgb(255, 99, 132)",            "borderColor": "rgb(255, 99, 132)",            "data": [0, 10, 5, 2, 20, 30, 45]        }]    },    "options": {        "responsive": true,        "title": {            "display": true,            "text": "Chart.js Line Chart"        }    }}</pre>                      </div><div class="chartjs-container" data-chartjs-id="">            <pre class="chartjs-src" hidden="">{  "type": "radar",  "data": {    "labels": [      "Eating",      "Drinking",      "Sleeping",      "Designing",      "Coding",      "Cycling",      "Running"    ],    "datasets": [      {        "label": "My First Dataset",        "data": [65, 59, 90, 81, 56, 55, 40],        "fill": true,        "backgroundColor": "rgba(255, 99, 132, 0.2)",        "borderColor": "rgb(255, 99, 132)",        "pointBackgroundColor": "rgb(255, 99, 132)",        "pointBorderColor": "#fff",        "pointHoverBackgroundColor": "#fff",        "pointHoverBorderColor": "rgb(255, 99, 132)"      },      {        "label": "My Second Dataset",        "data": [28, 48, 40, 19, 96, 27, 100],        "fill": true,        "backgroundColor": "rgba(54, 162, 235, 0.2)",        "borderColor": "rgb(54, 162, 235)",        "pointBackgroundColor": "rgb(54, 162, 235)",        "pointBorderColor": "#fff",        "pointHoverBackgroundColor": "#fff",        "pointHoverBorderColor": "rgb(54, 162, 235)"      }    ]  },  "options": {    "elements": {      "line": {        "borderWidth": 3      }    }  }}</pre>                      </div><div class="chartjs-container chartjs-abreast" data-chartjs-id="" data-width="40%">            <pre class="chartjs-src" hidden="">{    "type": "pie",    "data": {        "labels": [            "编程",            "音乐",            "阅读",            "游戏",            "健身",            "旅游"        ],        "datasets": [            {                "label": "喜爱指数",                "data": [                    30,                    24,                    19,                    14,                    9,                    4                ],                "backgroundColor": {                    "dark-mode": [                        "rgba(255, 99, 132, 0.5)",                        "rgba(54, 162, 235, 0.5)",                        "rgba(255, 206, 86, 0.5)",                        "rgba(75, 192, 192, 0.5)",                        "rgba(153, 102, 255, 0.5)",                        "rgba(255, 159, 64, 0.5)"                    ],                    "light-mode": [                        "rgba(255, 99, 132, 0.2)",                        "rgba(54, 162, 235, 0.2)",                        "rgba(255, 206, 86, 0.2)",                        "rgba(75, 192, 192, 0.2)",                        "rgba(153, 102, 255, 0.2)",                        "rgba(255, 159, 64, 0.2)"                    ]                },                "borderColor": {                    "dark-mode": [                        "rgba(255, 99, 132, 1)",                        "rgba(54, 162, 235, 1)",                        "rgba(255, 206, 86, 1)",                        "rgba(75, 192, 192, 1)",                        "rgba(153, 102, 255, 1)",                        "rgba(255, 159, 64, 1)"                    ],                    "light-mode": [                        "rgba(255, 99, 132, 1)",                        "rgba(54, 162, 235, 1)",                        "rgba(255, 206, 86, 1)",                        "rgba(75, 192, 192, 1)",                        "rgba(153, 102, 255, 1)",                        "rgba(255, 159, 64, 1)"                    ]                }            }        ]    },    "options": {        "plugins": {            "legend": {                "labels": {                    "color": {                        "dark-mode": "rgba(255, 255, 255, 0.8)",                        "light-mode": "rgba(0, 0, 0, 0.8)"                    }                }            }        }    }}</pre>            <div class="chartjs-desc"><p>除了<strong>计算机编程</strong>外，我想不出还有其他让我感兴趣的工作。我可以无中生有地创造出<strong>精美的范式</strong>和<strong>结构</strong>，在此过程中也解决了无数的小谜团。<span style="font-size:0.8em;color: var(--sep-secondtext);">I can’t think of any other job other than <strong>computer programming</strong> that interests me.I can create <strong>beautiful paradigms</strong> and <strong>structures</strong> out of nothing,Countless small mysteries are also solved in the process.</span></p></div>          </div><!-- prettier-ignore-end --><hr class="footnotes-sep"><section class="footnotes"><ol class="footnotes-list"><li id="footnote1" class="footnote-item"><p>脚注是指附在文章页面的最底端的，对某些东西加以说明的注文。 <a href="#footnote-ref1" class="footnote-backref">↩︎</a></p></li><li id="footnote2" class="footnote-item"><p>代码来自 <a href="https://butterfly.js.org/posts/4aa8abbe/#Note-Bootstrap-Callout">Butterfly 安裝文檔 (三) 主題配置 -1 | Butterfly</a>，采用 CC-BY-NC-SA 协议授权 <a href="#footnote-ref2" class="footnote-backref">↩︎</a></p></li><li id="footnote3" class="footnote-item"><p>画作由 TysonTan 绘制，采用 CC-BY-SA 协议授权 <a href="#footnote-ref3" class="footnote-backref">↩︎</a></p></li><li id="footnote4" class="footnote-item"><p>图片来自 <a href="https://github.com/jerryc127/hexo-theme-butterfly">Butterfly ReadMe</a>，采用 CC-BY-NC-SA 协议授权 <a href="#footnote-ref4" class="footnote-backref">↩︎</a></p></li><li id="footnote5" class="footnote-item"><p>代码来自 <a href="https://github.com/mermaid-js/mermaid/blob/develop/README.zh-CN.md">Mermaid ReadMe</a> <a href="#footnote-ref5" class="footnote-backref">↩︎</a></p></li></ol></section>]]>
      </content:encoded>
    </item>
  </channel>
</rss>
