From 78c6d27823eb5e7266d1ccd92e951f2a7d371736 Mon Sep 17 00:00:00 2001 From: houfaxin Date: Wed, 25 Jun 2025 20:03:42 +0800 Subject: [PATCH 1/4] Create multi-column-index-best-practices.md --- .../multi-column-index-best-practices.md | 263 ++++++++++++++++++ 1 file changed, 263 insertions(+) create mode 100644 best-practices/multi-column-index-best-practices.md diff --git a/best-practices/multi-column-index-best-practices.md b/best-practices/multi-column-index-best-practices.md new file mode 100644 index 000000000000..659eafcc5323 --- /dev/null +++ b/best-practices/multi-column-index-best-practices.md @@ -0,0 +1,263 @@ +--- +title: 多列索引优化最佳实践 +summary: 了解如何在 TiDB 中高效使用多列索引,并应用高级优化技巧。 +--- + +# 多列索引优化最佳实践 + +在当今数据驱动的世界中,高效处理大数据集上的复杂查询对于保持应用响应和性能至关重要。对于 TiDB 这样专为高规模、高需求环境设计的分布式 SQL 数据库来说,优化数据访问路径是实现高效查询的关键。 + +索引是提升查询性能的重要工具,可以避免全表扫描。TiDB 的查询优化器能够利用多列索引 (Multi-Column Indexes) 智能过滤数据,处理复杂的查询条件,这在传统数据库(如 MySQL)中往往难以实现。 + +本文将介绍多列索引的工作原理、重要性,以及 TiDB 如何将复杂的查询条件优化为高效的数据访问路径。通过这些优化,你可以获得更快的响应速度、最小化的表扫描和流畅的性能表现,即使在大规模场景下也不例外。 + +如果没有这些优化,在大型 TiDB 数据库中的查询性能会迅速下降。全表扫描和低效过滤会让毫秒级的查询变成分钟级,内存消耗过大还可能导致内存溢出 (Out of Memory, OOM) 错误,尤其是在资源受限的环境下。TiDB 的优化方式确保只访问相关数据,从而保持低延迟和高效的内存使用,即使面对最复杂的查询也能应对自如。 + +## 前提条件 + +- 多列索引功能在 TiDB v8.3.0 及以上版本可用。 +- 使用该功能前,需将[优化器 Fix Control **54337**](/optimizer-fix-controls.md#54337-从-v830-版本开始引入) 设置为 `ON`。 + +## 背景:多列索引 + +本文以一个租房信息表为例,每条记录包含唯一 ID、城市、卧室数、租金和可入住日期: + +```sql +CREATE TABLE listings ( + listing_id INT PRIMARY KEY AUTO_INCREMENT, + city VARCHAR(100) NOT NULL, + bedrooms INT NOT NULL, + price DECIMAL(10, 2) NOT NULL, + availability_date DATE NOT NULL +); +``` + +假设该表在全美国有 2000 万条房源。如果你想查找租金低于 2000 美元的房源,可以在 `price` 列上建索引。这样优化器只需扫描 `[-inf, 2000.00)` 范围的数据,假设 70% 房源高于 2000 美元,实际扫描量约为 1400 万行。执行计划如下: + +```sql +-- 查询 1:查找租金低于 2000 的房源 +EXPLAIN FORMAT = "brief" SELECT * FROM listings WHERE price < 2000; +``` + +``` ++-----------------------------+---------+----------------------------------------------+---------------------------+ +| id | task | access object | operator info | ++-----------------------------+---------+----------------------------------------------+---------------------------+ +| IndexLookUp | root | | | +| ├─IndexRangeScan(Build) | root | table: listings, index: price_idx(price) | range: [-inf, 2000.00) | +| └─TableRowIDScan(Probe) | root | table: listings | | ++-----------------------------+---------+----------------------------------------------+---------------------------+ +``` + +虽然这样能提升性能,但返回的结果仍然数量庞大。若你需要更精确的房源,可以增加过滤条件,如指定城市、卧室数和最高租金。例如,查找旧金山两居室且租金低于 2000 美元的房源,结果会大大缩小,可能只剩几十条。 + +为优化此类查询,可以为 `city`、`bedrooms` 和 `price` 建多列索引: + +```sql +CREATE INDEX idx_city_bedrooms_price ON listings (city, bedrooms, price); +``` + +SQL 中的多列索引按字典序排序。以 `(city, bedrooms, price)` 为例,数据先按 `city` 排序,再在每个 `city` 内按 `bedrooms` 排序,最后在每个 `(city, bedrooms)` 内按 `price` 排序。这样 TiDB 能高效利用每个条件: + +1. 先按 `city` 过滤; +2. 再按 `bedrooms` 过滤; +3. 最后按 `price` 过滤。 + +## 示例数据 + +下表展示了多列索引如何细化搜索结果: + +| 城市 | 卧室数 | 租金 | +| -------------- | ------ | ----- | +| San Diego | 1 | 1000 | +| San Diego | 1 | 1500 | +| San Diego | 2 | 1000 | +| San Diego | 2 | 2500 | +| San Diego | 3 | 1000 | +| San Diego | 3 | 2500 | +| San Francisco | 1 | 1000 | +| San Francisco | 1 | 1500 | +| San Francisco | 2 | 1000 | +| San Francisco | 2 | 1500 | +| San Francisco | 3 | 2500 | +| San Francisco | 3 | 3000 | + +## 优化查询与结果 + +利用多列索引,TiDB 能高效定位旧金山两居室且租金低于 2000 美元的房源: + +```sql +-- 查询 2:查找旧金山两居室且租金低于 2000 的房源 +EXPLAIN FORMAT = "brief" + SELECT * FROM listings + WHERE city = 'San Francisco' AND bedrooms = 2 AND price < 2000; +``` + +``` ++------------------------+------+---------------------------------------------------------------------------------------------+---------------------------------+ +| id | task | access object | operator info | ++------------------------+------+---------------------------------------------------------------------------------------------+---------------------------------+ +| IndexLookUp | root | | | +| ├─IndexRangeScan(Build)| root |table:listings,index:idx_city_bedrooms_price ["San Francisco" 2 -inf,(city, bedrooms, price)]|range:["San Francisco" 2 2000.00)| +| └─TableRowIDScan(Probe)| root |table:listings | | ++------------------------+------+---------------------------------------------------------------------------------------------+---------------------------------+ +``` + +该查询在示例数据中返回: + +| 城市 | 卧室数 | 租金 | +| -------------- | ------ | ----- | +| San Francisco | 2 | 1000 | +| San Francisco | 2 | 1500 | + +通过多列索引,TiDB 避免了不必要的行扫描,大幅提升查询性能。 + +## 索引范围推导 + +TiDB 优化器内置了强大的范围推导组件。它会根据查询条件和相关索引列,生成高效的索引范围,并传递给表访问组件,决定最优的数据访问方式。 + +对于每个表,表访问组件会评估所有可用索引,计算每个索引的范围和访问成本,选择成本最低的路径。这一过程结合了范围推导和成本评估,确保数据检索既高效又节省资源。 + +下图展示了 TiDB 如何通过范围推导和成本评估协同选择最优表访问路径: + +![表访问路径选择](/media/best-practices/multi-column-index-table-access-path-selection.png) + +多列过滤条件往往比上述示例更复杂,可能包含 **AND**、**OR** 或两者组合。TiDB 的范围推导子系统能高效处理这些情况,生成最具选择性的索引范围。 + +一般来说,**OR** 条件生成的范围会做 **UNION**,**AND** 条件生成的范围会做 **INTERSECT**,从而实现尽可能精确的数据过滤。 + +## 多列索引中的析取条件(`OR` 条件) + +当查询中包含 `OR` 条件(Disjunctive Predicates, 析取谓词)时,优化器会分别处理每个条件,为每部分生成范围。如果范围有重叠,则合并为一个连续范围;否则保留为多个独立范围,均可用于索引扫描。 + +### 示例 1:重叠范围 + +假设要查找纽约两居室,租金在以下两个重叠区间的房源: + +- 租金在 1000~2000 美元之间 +- 租金在 1500~2500 美元之间 + +优化器会将两个区间合并为 1000~2500。查询及执行计划如下: + +```sql +-- 查询 3:重叠租金区间 +EXPLAIN FORMAT = "brief" + SELECT * FROM listings + WHERE (city = 'New York' AND bedrooms = 2 AND price >= 1000 AND price < 2000) + OR (city = 'New York' AND bedrooms = 2 AND price >= 1500 AND price < 2500); +``` + +``` ++-------------------------+------+----------------------------------------------------------------------+--------------------------------------------------+ +| id | task | access object | operator info | ++-------------------------+------+----------------------------------------------------------------------+--------------------------------------------------+ +| IndexLookUp | root | | | +| ├─IndexRangeScan(Build) | root | table:listings,index:idx_city_bedrooms_price(city, bedrooms, price) | range:["New York" 2 1000.00,"New York" 2 2500.00)| +| └─TableRowIDScan(Probe) | root | table:listings | | ++-------------------------+------+----------------------------------------------------------------------+--------------------------------------------------+ +``` + +### 示例 2:不重叠范围 + +再比如查找旧金山或圣地亚哥的一居室,分别在不同租金区间: + +- 旧金山一居室,租金 1500~2500 +- 圣地亚哥一居室,租金 1000~1500 + +由于区间不重叠,执行计划中会保留两个独立范围: + +```sql +-- 查询 4:不同城市的不重叠区间 + +EXPLAIN FORMAT = "brief" + SELECT * FROM listings + WHERE + (city = 'San Francisco' AND bedrooms = 1 AND price >= 1500 AND price < 2500) + OR (city = 'San Diego' AND bedrooms = 1 AND price >= 1000 AND price < 1500); +``` + +``` ++-------------------------+------+--------------------------------------------------------------------+------------------------------------------------------------+ +| id | task | access object | operator info | ++-------------------------+------+--------------------------------------------------------------------+------------------------------------------------------------+ +| IndexLookUp | root | | | +| ├─IndexRangeScan(Build) | root | table:listings,index:idx_city_bedrooms_price(city, bedrooms, price)| range:["San Francisco" 1 1500.00,"San Francisco" 1 2500.00)| +| └─TableRowIDScan(Probe) | root | table:listings | ["San Diego" 1 1000.00,"San Diego" 1 1500.00) | ++-------------------------+------+--------------------------------------------------------------------+------------------------------------------------------------+ +``` + +通过合并或保留独立范围,优化器能高效利用索引处理 `OR` 条件,避免无谓扫描,提升性能。 + +## 多列索引中的合取条件(`AND` 条件) + +对于 **AND** 条件(合取条件),TiDB 优化器会为每个条件生成范围,并取其交集(`INTERSECT`),得到最精确的索引访问范围。如果某条件包含多个范围,TiDB 会组合这些范围,确保结果最优。 + +### 示例 1:表结构 + +假设有如下表 t1: + +```sql +CREATE TABLE t1 ( + a1 INT, + b1 INT, + c1 INT, + KEY iab (a1,b1) +); +``` + +有如下查询条件: + +```sql +(a1, b1) > (1, 10) AND (a1, b1) < (10, 20) +``` + +TiDB 优化器处理步骤如下: + +1. 拆解表达式 + + - `(a1, b1) > (1, 10)` 等价于 `(a1 > 1) OR (a1 = 1 AND b1 > 10)` + - `(a1, b1) < (10, 20)` 等价于 `(a1 < 10) OR (a1 = 10 AND b1 < 20)` + + 合并后为: + + ```sql + ((a1 > 1) OR (a1 = 1 AND b1 > 10)) AND ((a1 < 10) OR (a1 = 10 AND b1 < 20)) + ``` + +2. 推导并组合范围 + + - `(a1, b1) > (1, 10)` 推导出 `(1, +inf]` 和 `(1, 10, 1, +inf]` + - `(a1, b1) < (10, 20)` 推导出 `[-inf, 10)` 和 `[10, -inf, 10, 20)` + + 最终范围为 `(1, 10, 1, +inf] UNION (1, 10) UNION [10, -inf, 10, 20)` + +### 示例 2:查询计划 + +查询计划如下: + +```sql +-- 查询 5:多列合取条件 +EXPLAIN FORMAT = "brief" + SELECT * FROM t1 + WHERE (a1, b1) > (1, 10) AND (a1, b1) < (10, 20); +``` + +``` ++-------------------------+------+----------------------------+-------------------------------------------+ +| id | task | access object | operator info | ++-------------------------+------+----------------------------+-------------------------------------------+ +| IndexLookUp | root | | | +| ├─IndexRangeScan(Build) | root | table:t1,index:iab(a1, b1) | range:(1 10,1 +inf],(1,10)[10 -inf,10 20) | +| └─TableRowIDScan(Probe) | root | table:t1 | | ++-------------------------+------+----------------------------+-------------------------------------------+ +``` + +假设表有 5 亿行,通过优化后只需访问约 4000 行,仅占总数据的 0.0008%。查询延迟从两分钟降至几毫秒。 + +与 MySQL 需全表扫描不同,TiDB 优化器可高效处理复杂行表达式,充分利用推导范围。 + +## 总结 + +TiDB 优化器通过多列索引和高级范围推导,大幅降低复杂 SQL 查询的数据访问成本。无论是合取(`AND`)还是析取(`OR`)条件,TiDB 都能将行表达式转化为最优访问路径,缩短查询时间,提升性能。与 MySQL 不同,TiDB 支持多列索引上的并集与交集操作,能高效处理复杂过滤条件。在实际应用中,优化后查询可在几毫秒内完成,而未优化时可能需两分钟以上,极大降低了延迟。 + +更多 TiDB 与 MySQL 架构差异及其对可扩展性、可靠性和 HTAP 工作负载的影响,详见 [MySQL vs. TiDB: A Guide to Open Source Database Selection](https://www.pingcap.com/ebook-whitepaper/tidb-vs-mysql-product-comparison-guide/)。 From 9be507f3fd382a89d78f3509f3f6ea877c3c3cf0 Mon Sep 17 00:00:00 2001 From: houfaxin Date: Wed, 25 Jun 2025 20:07:56 +0800 Subject: [PATCH 2/4] Update TOC.md --- TOC.md | 1 + 1 file changed, 1 insertion(+) diff --git a/TOC.md b/TOC.md index 7c098a39ec6c..bd81c9179fa6 100644 --- a/TOC.md +++ b/TOC.md @@ -415,6 +415,7 @@ - [使用系统变量 `tidb_snapshot` 读取历史数据](/read-historical-data.md) - 最佳实践 - [TiDB 最佳实践](/best-practices/tidb-best-practices.md) + - [多列索引优化最佳实践](/best-practices/multi-column-index-best-practices.md) - [Java 应用开发最佳实践](/best-practices/java-app-best-practices.md) - [HAProxy 最佳实践](/best-practices/haproxy-best-practices.md) - [高并发写入场景最佳实践](/best-practices/high-concurrency-best-practices.md) From f6fffdd851d397cd8f8c88d2b7794af1a4ce57c1 Mon Sep 17 00:00:00 2001 From: houfaxin Date: Wed, 25 Jun 2025 20:21:40 +0800 Subject: [PATCH 3/4] Create multi-column-index-table-access-path-selection.png --- ...column-index-table-access-path-selection.png | Bin 0 -> 77252 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 media/best-practices/multi-column-index-table-access-path-selection.png diff --git a/media/best-practices/multi-column-index-table-access-path-selection.png b/media/best-practices/multi-column-index-table-access-path-selection.png new file mode 100644 index 0000000000000000000000000000000000000000..141ec2c21d87927385e417050fe093d85ffa161d GIT binary patch literal 77252 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�%Er*0gjnNi7l&2?!Kv%m9|!+S+c<-o`RBD|10s0ha?L&f?aj+c4!n_HXAr z1m{XQjr$G-=tClczZmV#3VGGK`fM%Xcl9#P*{kreO#I))i<}-e$RFsw;+gfj&dx7L}-TuV$ zOm(wIHObLZjLrpdej9h$?L9HClaphm;q2VT{n{ZTm%Yy5l!(ZvKMUix%G#;Gg6>1a z=lJu-4>t~L^!xX>cQX8w1ZEkz1HOOPIVkssATb8Nn%b4JV^YO6!aaid&@_&i+vW47_|t@h106tEKxn*tC7AA4EIQ z^gR;pO%)k3@B0tq@ow>MO^GMScM^DnRXLuZxgbhw5UHstW~+VL7rd6<-rjeF9uPJs zxFUh;Qd~yAhtVBF1f?Y_g&r7vi&%>np=wr_7fefm^x@3+VzO`PKL;P5a| ztV>^}DnrSH192Q8p>70;^d+r)4ozXlx63L~9eJFJqYceI;rQNSBSW~V^IKaYmX`P5 zzi&IwvsVdfFSFf2b5Sx->t5ilzLI+L7i$20856L7d3U469^UvfdiGcWufRVhm)C$a zTOF<9=9@aIIBaigQ?GL~;j}oUt3Fs`cG<#hy0~~#`Hp}?zvJt*8(_{OLE*OE(1131 zeqee3U(16G#XogK(j(hnJhG;76x7j4?qU|l0X#Q>H)ReSiLW9bY>qQ;#rBq#z6}4% zf@q%Bo_2MIEveLu^^Y7Db0mHw(M!jhP%dv+#Ip@IPfZ0pbw}MDtjy(fp1TPkzau&< zD5x%wpI&%J3fBZWos1~_S@!Kt>n*pUef-_cUrSRH!Q?VqQr5rUBaq09oPFD|IW7$< zX<{?_&h7n!1N@z#Xg_@3M_&m!+`*DHT|TqF`c>n(2Ix?%F0&kp>m~X58cX}sf)pBS zLkH>?F^myM2OJwy6@gBd7rsG3n5bw@eXJ~P9UaNCEe|?Q9SKCV>u?^VBx(ra>U5vR z0EzVRj~;Woi3e-|?CItMTH4w{p`qgAL)j7h2vISS#3p%t!{K6f-g0a8`LLSrbS2v3 z*2T*dm=;&B)d^0LXEp8^hgE!CprPKyEshVX*26cvP@>=ulWy}q^-E5!U1Z;4a#{+A zW%raPmGAvT+U|N~oocdk0A34@Qk+Aael03uhXea+7d|iAGyxW{u^M?B#njAf36>;U z>~P~1t!pR|!_@=|#qQF&07)4Sh-J3+I8Hg17FLUyj5^zseWWKlX=-=wKL82yAxL(k zzlp%^mYSOCSYgUXAH~tH*aAZC=()n|_)guLN**m)$6t3Kk|-?$+wF5yE%h3taYH_yWtV#inh{f|zT3knwN)tq!maewN z;u<>&6o5jS<)9bdI6JsiJ34wdCGwDR$#-sbwrh;vS+gOv^V_$Hxxa&%BO@a{AO(cs z-~isL_;@gIl-&aRpVV@C#;3jK*&LVGlxetFjrXa3>gXJwaZpKT!Bc;KV;FbZ-b%_~ zb&QIM%KHKgJGI@o>yGP+gpg}Q-QRRC2w}Z@*XN^>QeTRNut8<=NxqGe5@Ag2R>?=| zFDl?h?aQ@cgsBHLF+3&ge&wI*n;RP=t~s4yrV3{eydf!;_u<9MgDjLjQiyi*RseQi$r!6L8qyM~gSvuDwVfG)0byPZW|zwmP*m zHey_~BwRy&IvFP=pAaRdqPl~Ni%W2PqM=k*{7Pe_r{{-`c+||6;(2l@w5ZHhe9=<# z+Ns!hy3S)Syv%-+Mn^>U94=JNYh)$j@GBG?`{}bcQEy!x5m$bhP69^k^7~I!wLo_i zi+Qg}(U&ry8;voYC&^|7cNZxO&Vk<2pTw}*nXBkZFgt!>hK z-CMjJ7v?0ax?+j%=K%*HeA9ShTSRO~vC2bX@2kwk-5nmP;k4I_&uM7;5Ep>^G!E5? zlafEg{BN(F*da4O1IB=Q(x!hkE)|(Vj;i+LssHg%u5jnGDfVaIY%joI>#TG@2^b;K zWqPjY&3~p^Fz$){XT-AoougbPa``&<3Y@{^0yD&b)jKdwS^_>?>QMU%E=%P9Ypv>I zj|4iDLgnWjX~&dtqX9#c2bu%hCBVU&Wegn6(MT>cuSR86f-==mzgS zjfa@=4G(&s(Lllba*C_B8z+3luvOMBc=|nTqU30c7hhcEp*V}6GF)7>#hlas5xvk& z@t=9Oo9xOQ{|^TJ?{B~S{y*NZ|BQG4Klu>e3Kt5z%Q?X``OIrQ{r$Aoqrd+0Q|%?B z$EnukpR7~o%rz=7p>`tV<%pa7SEZ*bN(%>NV-A!i7O^S2=5qS$!&6Yrzke8>&zi13 z?CevPJQ2BmYInf9b+KJKzBqfb=W-OhaW;37BA?j?G|Rf7@lj07`I*z~@{jtiDvaUy zX?G35SdQ;pX@4273S1ogwuCf)4oSanrA!o zt#2ef#&$7tUVpqCwf8a)XW0RFc`Plvx~~*9Y@lySSv4|v+@KV`jRI1;cIVhZQ$T;s>l^k58#}G$tN8dgr|vH-tg=Ee;SUvt z#{AsMWC6FeHMU-FB|gs5(yb*?QOV`@+@+wfFjXxi^7OF2M0N7|JcK6NH*%M7&(7qs zR_aS_rWlwmpo+-)c)~5@iE6n%7HMy_t{2M>bSL}zi-&l4SQOdMco;cSIau z>+5F-GVJm3{uHsGsJvv*(a|Y8JB@m_%*4)~XcDhFkhSv&#Rfs~=W}mKa+W zIBKyR`NHA_Fgi32_Dr)#8?$UV%&#*u50{*)ekiHWqU^7XMZUgq`}3DC$AZX!wk#`_Kg;yxAHPj*>ucL< zw43<62BkxYo@|Bb%FD}(b#stHUt*aC2>RBL@$prUtZNMIX8c0d1W}1P5ERd ztJzkVQkZ6B?3Wak-cT|#149=czJ5;0EngfgZ0r=~uG*d-2C5%2RyO=Z1#u^oY4u|m z`}8^DV~u?sn)P%MDr5xTg8+){@NbV;m0OVLU}mGURh5*G&^Z`8P_A(q$zh}@q&8(A2?@Cqba%*}RLcK+KN<(F4dqT8_&6cIJS@A6i#W&6NQ z5O`n#P{f&-dd_)w|G@I0Q{8o%(q&D-C)wJvEv=XbZuM3L+Q|4QHkXUNJr^v|FDHhC zHd~Em;G&5kBEDKeYEEhfa=8H+k@`W*|Crjy{~X%H-+lbGC!0H=-o~NDwBV-sZUwGB zb^T9IFfCShu_?q(y=!Yf6THy-s&Y#S?Di*SC*5?%I?TkX#x35nCemOhMFHBrH-ev) zHY7b=4+Y$+_A9G`NMQ;Mpr}Xx=-&g6rO(KS?e7oSZdFOVqmiSId=@X@zx~xgcgzM) z4I`rz=3FjHFDyz)3uH4oxOSNb%tMG0RK|xCTXeOw%y$>`{mt4ksO>mNCTYs}9vcP^ z*+V#?tyw%8JYmo1>0|%Kk-)=;O%)y$)(oCiPV)skSc=zXRO@-cRSFqmaIp^LBHDpY zTsv9c z1)~=xlOopE4=k+!Dbkt0Vruq2%J8|1I+ zUdx$hcvoK_qhl#0<0$5=$xlyD2Qp>7p!G*zimb3d`DmMLS|q!}gDWeu^=8z_*qA9T zxgY;v(RAF@2UIk#ph0MPq1)E>OyH1ARwWxpBQObfrZ-*rXO%>+<3yt=>wVS z+0cqyK2reqfVR-eT8y2aCYJ1`@@|ayV4=tz?k5PBFo0F<#%-_5;A_mxd3Jk4!@+*e zPh5~RgUBKCyGM^o%@@(kc5HmhD4x*sW{+r-f-n;UC6=eS5~x9qt=lzPqH>mO&e} zmV@*$veV7~P4KOrcq1tL%iZjTpHAn^JH*7(mli!zQf}2fEs0=S#RC4OVY|e0H$QAo zN6~FZkJ5aNindqXV)H_$&VnBebsLCsTi@~$o?>ODH+Gt*{exO z!gXY@dt@TDQYg%6d3*<~gb+qf3-X5WmHMTtz(loEbYt?{>ND%ap%ZuaHz$T?FD8^# z*dH;!_j$iD>F_mzo7rx74+0!m_*R6x`|0!Z;x&A{t8k}X$sL4*C|UyIKTluWD3y0S zF6nex8`x=XsdxcDE-0o@N&h^SYpQdYKkv7qA>Q`H-}Pr%S7w!sQtCkSPF3h z&2uT1583h-`y*zlV)5_aE*L4Y8M?vNaYYE*_iCVcR`W%u@;XS3_9wNz1U}V!SL7c= ze#@D+-x3chtIn&MDL-37s%D{Pt&IG45)$g0<^Eqri~T`SLD_~=_I$tLk^hOio7#ws9oF&(HGFqph9JV8n^l zBF#^c=bBR_(t5mLV0e@A9lJ=Ppk(-hJQeo*Fy4KqfOwv^$`fBxb4#sWw=#l$KfilZ z_kDbQmqGZ1W8xRG-RLex;Ebw9@X%W^=K@`^+fQg|eY3K@46G5!=l&C27MnYxZ#`lT z%miCM-}$ryM6S*`WDw57TBvBZ4n274kW7*o9MvkvR*C(wzVG^e{(O@-(;r9?9Jix( zFSNCFyhG`aHz+7LBexF@(9y_!czAiQJndInwp2~^8&cggx1I72=Gt}VxomN9lA@BD zh$$z!^FwZkcIZv#5bKn2xS4o(?Cj`X8CW$oR;2egdeH?01Yp!gDX~@bw0ySC=BfDp z>SU(ekgx5EjOb6kW~_$r7D3n|kS(|b^s*QpyYH(7 z)#MBEc!!79g@#FyA32z$dP)=|Q6H>?b1=Z7yrRsu$Df~{j?(}<#OM7zbD+8KCy{L^ z_~o^$YH93x4zTThq}-@qLAIEipZ~PKX>(QmfFWGx^rs})7wqzCEP$%>t^U+eOk4p; z3XQJtf^?Mv3Qtr|^0ZVyppD>01&?r&)diueD>x{Gmjj4L%AIaI9Brn-93DH4K~lWa zrH7~cLyk-u9i>NQ&hw}UKRYF|Yj2*8?SI5diALJ6Q1x7ouA|$ z=&$OZJIp-U!*vvpdUvOdI^#Y*PePAf4N`|Mm16A32t0p42LjJoXgugP>2Q>9Hm|cb zw3Ddqt7Eq)5%;nUj4gI$MoPf$R)1tZJ2~C0`(~4u$1qa=UOhogi#Eio$Y?T(Imyd# zGfFH`YN5!{`4PCbwdTGZ_4W@_(z5#g7e=@XuJ^cp-R_;Sglm<&G6f&vL{jF$Lo=^D zc-$s|TAypqviDf>S>A&?BpkaY&#+r{teE28fTc%{tCVOH6-k9?T@+}W#$J2!hyug6)EkIrup;8 ziPQ)d&Ca%E%U_nukW;}U>|FmmpEg+sf)A3C7`V8d40=FRGXE9d)o)G=H#r6x<*so~ zPScntMnpu!%|32Ef-R{`i|vGN`-F)p!e6OaCM^JiP(HUWV(E@t#zvdyV5YiB8m~SHF|oLm z>7Ds$eE*On;0cK-pBH^D2>{#iE#nDVi;%x?&NeAxbahE^>4$#){P`7_jHfTRVV=j9 zVs3ok?sm}?#cw;D)7covr#|NQ3B`j#lZSVLnU&RHfklzcL}W9H{aCk~PyW0-7)mAR z2@nX2G7X#7%*+~Mpv}14I`>2^cqS$@r0R-C_8vC_sIwUlJy&sQ($+K*2g=PZ8%Bg4 z{SsXc7)alF)UV@QH<63WtT7_xZ!rzh&r8c=DwF&8joz~Y(tL$+H4&WtGd~{wmd}v+ zYzHJrqwgDs<-#k2f^AL=zsqcpHVL`<-+E8~=ra2Qg3YmFy23NC2rH->4-;T%YC0dU z>S`b+s0(aGL{enTj<=Nwumt2157(NVY zPcaxxgJDH+Tr_vS0*aRT1zY`u@|i#4d~(4XHyX%0)uWH3PFzKDYnC=P+AD;)>ak}e zzre~lH~0NgB0N7hXvgJni#sc09ew7Qe3-t%lz|8i5lv6RuijwE_4oZeTzH*g;qJ0HS2x}M$mTJp5C3b)F@%o|D|;472Um8*B}fHsnW#PgqZ@>0o< znD;xzl!I4tqgFkcguGHg$H!Q1E3M<6y4FRO3&rA?jg1(GsikBetnI^H^1}^IYsBbn zj$A7S<RQ-E#p>0~v?vUMadvd<) z^UCiD{AJ)qi4bveN{ZQWtMqqY!!(PAk6@91l_58`y8205BpQ;Rvr9wY`hp(?OiK4J zzAldnZ3@dChx`)^1@J8j#eV(zT8xi>S?1>Af-)I%MrA~PX66N(VZHm)koKVV#mA2) zB*K?wX18(2DCct^~I)kyw)dfE?O~f}J587z-wwi|Ygx<$YC3;SLhh zM(Z=R)@!7ugMA4LTVhmq5w>OW1gYnoM z@yyHaJ2-HU6&k$%vhgV__v42oql`fV9ON$HIE;@{i=W!xm@4WTqaWyi^yx^+0R{>sokH&cc0KqsNKNSe%OGb8FHmW3xEx;Fv>fAaI+JXM(48v2&h5-9sa%@h}w zJqs(V_TOY5a&q!N_MNAS<2e;db}(V9{!L%s{_t!@##EJkPlW=;mEm$(&A9R>gRs|q}2BP{mxPpT0!?B4~z1h$PjX8Yhyu9mpH`h0VxIb>LZwP@s9kF z77PAUVy-_rlR|J1DleALH&06lVBzAn983_tBbVXw^4uQk820-sY~p9J%&@z^&u!6X zC^f3MGj^%k*f3e@c*&77eO0X3FMC*Tc#9pHPNs##g>~I7;P2%|91N@e65P|_>K`;< zho(Z0al(dwNgJ{y^lp!aPv=`Bh1}fTR;G%4t?i%^p0ZmoPTfcclaAr%94Vsi3Le<6WSkx{q! z8J{uco}UeLx7=0={rw=Y{$*Ey#8pX4*@AlW_AUG>Rd`iC3p)ydKY_ncgFj(eN8H|B z0)NjI3jg5>RVd<8dRYjHJmDFEe~O>TMa2~?>)o0Jgw;3cfE0H&>uDU zt*newCi16fTie3Y(ua!k#H1D!QyZIxIfk`U$CFK-7$U-%v2;veE$@K{gucippRhr!SvH;+w}R`ZF$W?%8$C^Pv9&08y5>?ZPm_RCh}GDXsHFeYMNL!1(|@0 zNU$XTC0bYGL*!B6-!G|c94`j@P{LMGk1Zr_NP&M|er z>an?TV1P|e0;CHgVPgurIKkBv@^9?SZsRRs<|QNM=Eg>|YkKem9nFKtB4wv8Zb3BM zcJYAYpliIwkdP(P80mI<6-3vC#bpg6?QB*_ZOtT`*gafErky;>LSkc>C;=w28?3Uj z_D37dN%JIijg4};RSIf$LDoj&f1DeHpj*J_Nl$blF2@L%ma@}2(hFB^unrUL@&$C{ zBYV#7pCL=4c{GKDekM?ksWBZzGfHRd*H9uXDPDw)TJY5kH2x$kEBhADlaXzxuC3iv zDlC*_f9E>0L|4H1F|veR)dWayB2Gos+Z1px!>%-xH7zx@%B%m3w|q6=F&#Dazgwcc zez@DBodP{M+xA_Ye*a@1NfT$8#iS35Q4ZOD42;|)2R2MK&?(rf0Y z@rHA!XBOJto$jx_?w=VaqbGRzvS(y4w0&^mzA1!`<@C zbr^|&VZJ8!v#ZG8qbwMM-!@ms70>6bn;4Cth47Olpz7I;hpT$h*~hw<>HP^Sc26h^ zuGm9xq(0%I2+OUGZC@)|x7`n7hSMTjKF14|+0EH$k((MS(>N)l4~lL zzTJGk_dni%K9~6p-F(hUySLMlG>?sTB#$P#W@=weIp|VAsyj5beL;rc<;v7k<99F! z&USB5VZTe3N^GkvwkTU#09Vz1mh<|#lhqO@_c~+P#>&h)uR|kdW@%HTJp<=({#7OF zej9zE3}4dFkY*Ch5`JJO>djFhtgnAIl4rreZG%wnWvs!($8S5hUA(*yO3rf-^vIJ)S)J_NT@j5V>e&**YH1rA$4ejEBEe?g>#qBy0#oLFw#p53CT|gxV zmsMhEJrCW_qFKy%APhPjnNwJLhUuf9kr5Gzj~j7#c<8pty=B0kIh-Rv6VjL9dV_N~ zCj>}*6pvei>2fcwta@1LvxWMTYdOWa-M-zO2^n$wiZtBgisQmor$_4zCwsV`O4PAp z-*ESpNHQuDtkulceZ*yK*8IivT04o~n{&D0NSek2G>sHIk>&he9_uEv#ZlhAx8$QZMgY# zyoZ|Y=F!>9-Om>o_u5)J$ocu>ZFHTy-&mjRQqgh~`U{D}J8)lLzlU17Z$nY2d1q(m zE)hRwGuTj8`#AUG#`Kf&o7+ZL0|JP|J^0B=G&RL@Re85E=#N7BCWxT4b$^ZPBu7J- z3Xo7>O6ueHqL5FZ8o?e;x7t%Lf{e1SKkpv+WA_8wSYwO>G%j?EhAr8z2uRr#iTw%G#w@pkWHx80x zGkr=emV;;)Q2QGII1Ev#tgNo+0mmQjEYNbSf=%z9KdQ=jZKA(2_eKC07l6qdufxrVqXx;1u>uT2 zLqpZG>GqM4l>l?>tJCpRf_(MAV-h^beiDhqCwoUt>Fonry30~>a&i@COzeUga#LCD z(%y>MFG{~aAZ9pMML1Dv;FzJOTuNSENKui1CDN}sC+FDqWM*qC5otJ>j}7^j7+!~f z2H}7qz3~?>h9Z=xdiB_}bajVEneUuZhl+q5_ez^;{ZThEI*MsQ5eEALeib^@m19Ll z4TY4c&w}1@!jPbr0Ixy)3J(`tXhG5(Na(A~pgFqh;^*uFTW@Ge4ZTK_S`F)ZRY}Cb zl#-u=)_oxL?A@7+jg7~+Pkenvsi=GDpTx^P^$!aS#AO+EuUO7`uc=U3RSD%@eP{Mv zbb^<1_}|I|8N!p;6n?QO^p%>Cc|IU%jbvqZWIZ}N>)TSwH{lECn^F}TTwBHKBl)@# z@e(>|81Fkn%anIQI;cxaI)w(k*CjD9Hsf=1F^I=YT9oyhgZVF$3k&y20#;@Ra*PP$ z?ChbrBq=!^&vpOi?E?WTkhWXf+UolHh&YZMBwaqp%Qp*KRM)~Sh~q8a`zzWF-uCyR zqL5py_-hz@Dw5O-Q>os{L;PA%j?C>R+;otvLin9k-bzbj>aVW;3>~aF%D*Z>@dWZ+};J1a)2SokS51d@MbYHx03;$TUq5yi|0fVfJO#LBo#k*?DyQC(JS#(yi{Sziv z@}KQTJZERV^YUX#=a@_XE;YbMZGXD}(_{#ZcXcz?PIX-aIQ!al_I&Tn-V$Sn%6X;+Y1BKQ1TOeJ^uEMYg7_? zLNl?`=Nei<=Le1Xu3z%g)nt5(jDdFibUl2<`T33s8Eppc0Ad@w9tfr6F9p_IP*78! zRBvzqis`OCCa|!0UibR-$4~eqv6iCH%SL}=><2KnrZ8|m>8MB-!6(ztg2!U|gx~ox zyKCBuw9>b#ig?&OCr@|!!ht8>tN&*kmflE@$0DsfeipGp?5|(X!D+kVJ+%ld zO}^$ZNhy9-jV*KB+?)n5x5+kkl)}PX9-hH!QmswCJ4dEkHYS&@?x;0{hS0X>RtROl zvep9i;U>S-{K4Mdy^qD`q{T+lS2e!O$#ox{;kckRayaI@{uJm9| z#T`5qNx|oJu*@DjWh#LhSJi%pQ`OFhBHnq2Jt!#6PGe0AnhL&jnSJK?{~5mvl=`=P5{5+HE1{- z5*Jjr;4{C&B(=A+QD*T`xwlh0H$N{Cf>T`m^K)HO(mbcu{t*=ZgzE!-rKG>@r>E>O zrZN}W!>Oq0d%3&2x^RYt25Zs?0dR(f$LV&I`Z#hU9EALdJmHx%Gt-UaxDKliGtDMdZ_!GE-A*$?k*n-0JC!Nay9 zAb$jrr+1=~x+na!WtJx_@?l{-JI9(YIpr_D&>=1Gy#k1yb5VFwrt)~YyYs$wU8L6I zFq!OfAnkw+_-Uc0_shU5BIxqdvxirt=N$~!=}YBigbPDIcdleNiQ{>%*9TM$zKfL` zM8w1=n@1_<2!9Ts8DkFXz>jm~k>=7i&n`iRflYk(uw(f6xS#Q3nGSlpd{#Q!baQi5 zqWkTgCBodHPlN`~p78{4d&^QiM&t6dWGao3$5D>5m8%#iD zgFL?iWJ@Z>=5xfSyP~^G_LkOTIgC5f74J62aAGyEc310}UL@ZQ+}#>y^&boK^5RCG z?(4J{Z#tfIDo@$%S)HFdo@jM>b;KT#ones7G;qet5zseu9@P@&R@X219M$xTAKQRi zm3g+;%nHZ*S_F?i&nPG7`RN&AVG$RG(Y||AzxmS#5ycC%U6D zvGzEbLs|W(#gEZA0e%6$-RzIwG;UHYJ^w1qy^7bQ@{k``xsPS`=+jR8@leHP#+n!y zh?Y%{Nf0t(S=c<{XL_0IG+umu za;AYY*A+)bxl91t&o__wWQAOkk&na9K?ktNb*eA;Rqd=OhJR<|v1;tUEd3w-COXjaL6f3H=h*1g_Gj7P(H z>B(4q8n&#%lPykY%YRiQfP8el+_ez(fwkk|jxd*NL=oYOeCr0Gs&T{VV*2=w$Pd&H z_qx}L&I|16QDh6iQ;f}%nqZk*p6Vqjt4i*f+89Fm4 z4X!NzYA3}1FwG=SgoTBL0<%sZ$ih)5CiWPm^d&c|{Q^@I>a8`pqYYNce(3tv)z}#9 zNF6yazy=^1NLok_1l%VWsricpgE%w18k|o-1f_=gT*$M7I>O-?*QwQBatlpwOMeW~}TaeKmJV zT3Pw+?qa(h8v!^7V!1qf-bvcCmr!g$2+VS`@4ZRdj}Xkr$;WLr z$oZIEf6YA-TQL7(^r291Duy`;JuvFg+U;Q>e>_e{DuW^d8x9US8q10C@$udg1;%`f z{JamN8Ya1CRV=ojT^^8>$42G7*Blnvn~Y)`s!nsNa{67hrxvdpZ}%M-xO|&w=SLyI zVDK43ob>#7h>Ah*dB7UlPk6|DnmR!smJLnIx?GQ+N539tw>*0_6DU(^?e{(b<;`dHCD!1Q3Y!GaE6pTEjbgj_9S=t#?)F{eXd zq$Do30xC4U;!Vw*EJyl<)zw6&T*ICf^hR)(%zRW&{+^PeT@;T|LSg(dB0Nw^dURxk zE;nBq-m(`oww6T1p_Y(^wApTkhOhMG(BJiW-$>aQ5^0Amdhg!PB@rM11p~KKGMyg$ zBh>gpV3{K|6@lJZ;{`_Hb-D|jWME(r!Y0UxORkSMgVPv_e9zcedh@cjG(=uh zP0N~yL>D`J4#+FH$nO%zB^i?OxTW^&zWMnq5P{6f%3Axv4+H7on0bsQ7`vHN{kOA| zjGw=zZ>8AlA67ksW6@1Yl6NJ56bmcl_7v*tQbLShLjg|)epX9!TERK^c&J(l$nlSg7ZvO3 zbVyD7rsqv;=*Bb#4tIn?-jUA{NL{hlTTlKg8m(Qe}x9x?2mcQ*){wq4H~b$_>%bQq_200Sowi@bKXZ{*GtyvlmrXG zoR~A1*6sUb0^?W6`RxDHH`^xUG9h=}o_PDZBuWg1lm0CkD4EY-Y&?p1f+y*y`mJ1U zx+~;h({}CN4)4ErfBE8nzWebtvI)k6M64t}A_1ol@zw2X{dspVNOvwCZH1qjcgX?$ zCXm5bMRBnD@!xVV`0wjtN{?~ZWSmyL%TlU|C7qs>&8xkB_?v={_KnK#z~#16Td_;) zXZ~qd*YBM0J*nl5t1te)zt(6m|4CZ^_rw1WUvC{&WgfMSZgl_!1Vs=fRS*S4Iwiya zHYwepq=0lcih#7z9n#&M(%m7AAf3|9w>Hk4^St`hl9LS`Zg@f&)Hw2X>Rc_uc( z?Zrox>~nmj!=D{SWFl#M3O?HU`d%_LX}w%WLBYWgKYA#sx`&73m8rPDh-c8Bs626i zF-31$2u3v-1pp<0b1sx91vK$pGH-!|_}tu~E@l7Z!_zXBXb;2jxur#V$=&JJ2IG2nLL6YNWbtt9+Vnw#GK-~v z$vNO0n^;;l0yZ_N785)_x3EwEdD2t$YV7AJJ#St-v+5ZU(ATG_IX%Nb&=3w)R)o3u<{HNjYjGN9UOb|i`oJ`hs;*~P^cD6;GI)bej|g@?;? zlHC?CG9uH}&}ivyZ-$f)KrE#aeb1B>j~}NnJKU6!_anfWFtdOITJWBBiL>Yrd<~&f zx`BTuPL+*`$t!EDgxC>O;65!6>kkwok3I2^emun1=^K~thY8cPBQc|mGgRuWQkHiSUJ%p-fR;)Bw+Z6* z`4%y|nfdP1h2OtlY0ArkKnfUo)g)VZ1I3zm6wo%(GKUG>3Zj4lSr*^4(S<>XzgRaXfA#fjQAT94R-$E@JMEa5$4Z#N?;LQ>48N7Tr|PD3=VAZ z#`tR}BETF!0ccX$eQLd{e;bSN{8LE@;gzG^e&RbYoRMlv1|OAr@mR;0FLY^Y8@|4R zVXsvDfj?G_$8w01fS_@Y^x1VX3>RPD>k{IQB;lE6&wnlE-HP(^nt|_z(N@|ILvpfuN=W22U^f)Ie_Q}svHh(bkka&lQ~|i8>DP5Gqq-VZ?f2sHCI1`* zAxD?=iz22%PJR@v3}0Ql^CG3k&u&-(DW{8h@}`{20)f7-22ZTP=*QwagG&|W1x6I zS&tcb0@G=F(!O>^s9PSN{MXK>0-3Asz+eQ^YJF5p&8gbT4m!9I#Tha_#LwKD$s@lA z%N`19>nT$6(I3ek|9o?g>It_>#W>{fg&)J##;k8SG1V;=qaPgWU17w)CDR_msgFLl zDz<`UYTJx=z03RIOL5==4Asb-%Jt0M+&WGF@L>mCW9AlKks%Hy_5ixZ1BvLF6wGE7 zQVCpZ0c>(FuL`V&S2121hhD)XJU0a(Q$wh!#jO6U!bs}#DJ?A!jp2xKL7WS(sMa_| zyLmg$<;>Bxbb{|>sc)+b*a3Y2AoDC7-jyI;eLv#7c?0Z|#8y%}1gbNmJ#M?9Ifxr~ z7P}h+n|o8_B>-iyS{;>6SV%P9P`hxrj(_&IfEzVZFJL4<3Hfz@GQX&^J`n`NXwwUgHSuK$(qlKS>nB`hOw(KH zI6e~`${c$xY04-kC)c7S1yAk?B5(1e&o*bUx__mo6ga}gJ;~S73mzk9i6e)CAQ5(h zN?AZ1d3#7;baVo|rhfQf5dzGrx5Mi^ znW{COw>u+dRu^BvU>S>$3V>+%=#GMcY~GV3{iy0=7~p!_{QwFkCQHi5eD?IbW>rih z)!&y_Ad52565`QPOYVVyF3Z|?-n=p09Vne56Tx=g91D0H0bu`nGs|9pqcmspghkR` z+oY|jUL8x34<73TG2_FwLGbNzW#grJnlxz8E)#gLJXQuB3ts~Q(Ajfv>6;$C)z(vW ziaz`;Q*MDXI3g$dfdnWNsvD2*B}sY4=HMC``5tZ+NTh$b^;~M};n~58@#T}t@Kpf0 zLEG;`;1?J^v&uJLp{iO@FGaNrstEMQ)e3(MgRG0qXtWNRG-&9IArb8x@X_gX1;!mc zz}x-Ag%j19DSPveVCE8$5Ue7oje%OFCZK|n3JRjzI%1XrjexBC0Aa(+R8vs?I0_Ya z)lJ}CR6*mLVr=x$-Q3*l`pFPb)7sqruHMq#J{w&!S-P=Sp{zKf2x8u*R8+TN)`aUN z4-dup!Hkna6Gr8djRraG`f=mxMCtcep}maY+GpN8$2ecVhJB8VB>utw z5w{$P+d*GL2X2>7Z>W$Oi?E}4A`3+;Y6o$U?Yb$20wbPFPG_UfMStd92_BNq81#wV zrW!2y~J>E;U-PRFu0T$fh*2;!LjUF>0 z9-hL%?EcRwMz5uirT%25xjdwu^jB&vvko62<{^+YxP2yLOF5L>seEYqqZ`05Dahdu z{v2=YWLLcFzfFmEt$K3ub2K*+(l$8nUJnw)xA(oA!7Qe44^fczqmwNTAk`%_L> z=2#E$(t?0YxH(aIm^oGG`Bar_iS+QW(VdYW@iWHcR_I@o9%|V$eXta5ocvBljWs)q4!J zvBotgByd2qr0znr;lOcxYmbzpV@@RW@crJCDt3%ZK6luBN~Y|@jyd?~W9QB@HDIkd z@7iMO3hJtzPI(Iy)zH8fJ~`69CQbW~zP`r9@?2?oc>t)gffa8*Q)}&-sNl3%yb2KP zT$QzshTgk)>j~W$r+{WEu~*qWYoh_}zenGy0Uiu2zyte6K9={>wagNHih3h%-XU)_ zHS0mSr13qf?jPUvH%xt72%!R%xYG-JkKC**I{KPTl36n98v7@_ydObxBG+gF9n%Z5 z&^mokhe78s|6wp$N^){<+SnTTj|I&HpV2O`tcSl76vHMfrCAsmJ=6M=1HXp7f~=tC z{10K4Qt_*&>`~HF3f-MyUFOWm2IP+(KHMH)?lwiurI>d(Ak!4|FJCwX)MKRF5JS0m ztriX)U&k@JIyw281D3h@q@z6*)Iv}j5C3y`w5!OI4TuZs*%e8 zREa7NBjS1*UX6WAWMR%QZ6ktGx4o>4OhZbnW774ypQGtEFcQ|rV*CyQJZ{)o2Ub*# z4GiwV3wd%Hc(*^cZc@$p(cwhtHc7GNF^&%Re!!1I_sXrlZEj9WOkitdC@N;El)3YT zo_0d#n2?a@OsIP3R%?`^z%Vv*!{}&)KVL*+GkIs9_%jqCyz&qSB0~`4noGc)1Z{G% z{leJMV)F%~Cr>)=vRkoyBrp=*-2L-wTS6C9>S2a`>$7eoU}R}3UNR3FL4~o-!B_G} z7-y^lKNKjziOvJZ<#W;Q+Ra?jms~yhud#HTPpI2N&g+|FoqiC;cJ)?}O80MV&sA0W zF@>uv9FW~*_R)iHxtEg(<9>&Jj&s!3C)*HOzkHk{V zoUgC0ae`2mXRgU;p^@xdK7pH?V6J1ccoY%Kbb*9Uf3et#@U}9Gannq!v(|Qqp~do@ z@7BarRLKJB>fkosNJ$A#@m4Jj6%|;OL&Yek`s4vL9VFeGI*1Tw3hzjD1W7`aA|f7M z;GaKxzt_TZWQpSE-~DRB*r=(OpX$&B9@~eJ@?f?s<)tj;gg1|A*7||Rw-6gG-hR8& zW;uKT)ien@4i?yY#yh6tt$lrXSXd9I9N7JPDLga{Rkv5zv9Pc*vob+yx(-w%)+fr% zR)1cbKg)F)G#I+P37oFoYy%yAFOb;B+7RO$Sdm)K)JsE z?8x4Yjc2I719Ca?E<5>S4(B>Zii>Hg&u03Cf%^g( zUTV-b4Q@)ulu&}9;sia68owNfy?-K9MiXY^-EN?*XxQNo;M0A+MxBb2QL@ z8^Rd96zw^!gx)*K+lfXHJGx3ybeR?{iHgGQn&;qT>v`t9y73I>MHh>JL9y zq~PG-xIuEKA(?J0ePVqTck<=^z&sEqf^5TAUj#Z@y`2tyGZaTeqZq^=U6qzRcXIR@ z)v*i+Y&XE1RFqyq<)@#P-^wVy(7?0bTTe!!{}1K z?wgGEXGUCB?*(Hg%h4ns;$2G+#A%+YsZ0>glDlPDuETeOJm@P<$;MSt5fS^xTxsG0 zF*9@WQ`2st>RDDJScJ2{dQAWk%mW*H;wt~FF)I^LZ-mTiacs=Q>w0jOS6BRf1%dDd8JR3Qv=F{Enkqo z-p+doI^s8##1x1_l}FK}zWlKovrU9qUeLa9WwkpBYEPg$XZ?yJ@F2 zIsUj(ORhX((3B5gi=@@Y1d225$t`Os905VlC6f=+3JF2_K*mWOB#OXb&ysn(C$5v6 z%wjx*4JZ$2mMQ9i>O>osl=08P@D$z3=L$BTdyfhK;kW65wk+u89O5-1!vB)+u@|p1 zk~PV3Y|J`sVSauxlx>Lp;lrd4W7UB`lG^^U>c6p4U17QQ>Ye0GKDrY(;D*(uN~RP& zTwhg$5Q>I4n2jf$7rJu)K|9dY*Kb==S{-MTgQ*`4k0>usugG)04GMDbgd;Y+GV3a= z?Ft(5E;Zx;N&|PGq-`xCJYs97@X`Cl)sE3!Vjq1GJ3DkxN@!{tRob}vy}akUA~XD! z$YLYSdF73OhzPlbW1#)QToOMBICQvowTjv$z+fWaov3M9&v+bQY8g{OK9t42$9wnl z6me1?GO^JR6zEn7+BM0B(4Bj9bY$!ob}B!idjdTr%^eLvi~V^;`JKQkU_4EG#r;RMQ#k^MGu~caZwy!j&|=`V@!|?a#rWUdZ;SlF0S5()_AOLNwoW`o zYxSUYXKf7-^-Y3eSj|M*A>9i^z2W;VI)Kqju()2CV@!=_ApL z`!Cc?r*WIlO&-!k$g?oSW?Q}jZ=p1D8e z{x{*nl?{SSm8uA!q(fVLwrC7XOk6Eut&_4StF$yMAV3Ogz-lprDZI?A%rB_|@l0u? zHcosxuz_i{Tp5y_Ol4C_EWh#qxI;TWKEnN|bZ^Hyr}R#2ZO@M@fc&Jg@Uhc}LJtYh z2fs(pLsw#STSyt-NlT)qKT)OPBjB+C2O@&?`g~4J==Kt!`k$k7HMXC;MM|jmfz+bs z&BQ1@aEm_GwGD@3mQ_k&4k<&-TnmVfMY4yx1q>mGY0)aladpQfe}Pn_#=8Af;~c;u ztCiOU$v;G6*@8ppl;7$a$m<<0dY*nF6=(PEkv3?2Zj+Of@*IyC6PA}Xqkjs~kYX?EB~FrclU;KZV=sPxuq zyGTMvh_ZG{0{9g`)PJ!05vx|`ui9A zD+njm)b<_E0nSCqz0NIUl2(iq>C(Rgfs(cH@N2W=@v`l=i>kYWf>^e&d?eiFXI6dE zVqEIzoKK3P_|BBFnRz%KyA;t{rmUEQ&u5-;DCsNwX}$pYc8YcPdgZ~mkMK6Y0l>OW zV5o5sC%8$5gAv?Mzu|q>cq7fW1ju<%k8gu$heq?T_Hk)=}34aZW z!gk4uL5u(~?q`v%M3SD^71zb78h>$y$48<*lRIftm}vJ&N8gz@i%~%5#XSxNm$hfs z1&+f{#a~Cy&kgI~^;MJ3Hu)tB?i-=|{}I>iR)0I)^Np+j%E{@0MVH4vXy|X`l!P^; z4)eIUIOQtD!d2XblO9kn1+aZp>76`1Zgt$=+gFlAGMbt$z}Vbm=r=?WGXzR%MvGgt zu*q0lK<9mX&3YS{qVaOYD>E~I(tHZY$1}@T?JvuF#Ln*T>VdP8xuE`fl+Oi_^jyaU zaR^cGGV8y}DwIW)r_w3@R`eucQhZ+i6Z*G`3No*ZvQ0_l@I3K#uQX2i-Vbdz{Se2; z(^2)sk2itczX;StnUf_FG=+{aCXtpRvP*R|TU$Gn(5Wz9@uX5;w09f~Lfb$&-`*ui zjNs8?bUHuX<+Zp9F_h-YUNovZ0T@Wkxz6fpHdgMv&A{&2G!EH8Twwtc(HGuZ3Ct5i za*YGck8btFPh63xx%L)Bj^LW&YE1#rq|jg(CV)J5$GO`9t&EC5F9AH`H-N}7HYbct zJ`hJMLAT!HP9F*9pqOv`rUXTN0A;@f32w{2Z=>n@R{bxP+$3-1nd+Jv^o3bZIk?^i zEs(@V_iorOvw)-URaGtOm!UBL*&cB%85RI$QkiaCnf|rjRC{)+kZW?E_Dr!gBd0Ra zn$t~%A8_YOr4EN)T_;yCa7|Zj!uCu7sd7c%Nl-3%3S5!ch? z&wp<5Bz#8S+oZm+NI&7eOZJzd?!y zjJbe8p)2fWWis#ZeSqq>cP{0L&quC4(-oYed)1#K&3sr7B2|F>N9R_!bPK!-uz1R? zUnk}N8qtk;K@}*w90z^1>86|0T`Xk#uED|DNjqFkTPD_mPeZ>&Dmx+`F;XL+nYB!H z%Wp7+fQHF+oCi>^`f&wgb7G$_7n>IAxvbYUyqv$D?2qXGk^ zeFbUJ(GKqB4b-^0m2vWaymWAUh^qTI9hlyS{#IZ?x&a2&3;CwfSSXZGGtpVcF}JYZ zgr?~c;U`)<2^|*$@J;4cx0xEg45rWvNa20FMx*IG+S*Bw=kK7u^NYPoLB)pS@`Ix3 zUhrhKUJ}$@fy1l<8sJj>re@i8GR;`sozutU&KgrcUSgB<#3uhJ=jR09Th^ztafHaJ z-gn*UvuV#x#n0J`Nys2qXt19);>dw*d3ON;`orP!0b_H{gi;5P$$(k0GlWjU{r(1I zips}7`AQ$^B93v>0ef1AaxTS> zZp`YdNx_$uXentahIMZbi*>vZA<9vu$0ehg8#oPKX!>+du&s#(f|ae!jiC5) z;xH>6Yh!PJKd{x4n>1;Ew-i;cg$iU+Qj*2{;q1|yFQFgN+M2!k=;W3TaMB>V0C5I> z#qjcFbRLo`-%vCLDDO7?m=r%gnEpXQsoobW$Goji)f)QrN2j?`-1%Bup$tvNfMP0r z9MDOEKQ|;su81uE)^U|rvy1uJe>2M8ccyl7&0(|pmpQoQYnXvs;vFkx>@d(^u%c75 z*~p)Z!5OhoT22+%Y69j+V!ope=3wgR+`e|Lh%Y@2Mt0&8hTgbs8t}=XK7kBM&}BEA zzkT}tAS!ByP$pC;Q7B0&QOdI`HjfgI+N@0Fc)vGuA4v9YoUu;)l`$)o#tUaq%x)a( zca@`y?1yg3HTB4$EFhwXi^xlr-f+$vb!^v?nsh!EgZTNtXwm_i4YIAv(65ucALwy& z_3&H7{}kG)HCjAuDXa)5v?`jEp6C3@+E{UNVWCfp&}oqfHVAmBHyTjia=Tm;$zC?D zSRxn;GRl{rF(!-s&ZA&CCqs1yCvTGqH)>99l*9Y>eZ}P4y zz0U~nA@Cv;fiy#0e4m%AIx+DxROJAH;)Ob+_V3O3LWBMg=vUo#K50!Q4nS4UeyRP3 zKF07==wSs4MElK8|DxbR5!K|f6b0?<4slzWvVHYNzL!~5%g{7tAvM=#frG#Nfr5E9 zy?DERpd%S`ri}+JpQv0DDTrMKkc9-Uv^<Upu^bke6o)Z99zGeV>(#J?>Mu)(30*-S5cdLlo&2`;KO0qO*`RE_Q!?f&_! zBCE{(@20a`1|#;@SQZoV^M16peuExu5Y#g?DH{MS-t%I7fW}l*RD3Y2uis_4VZBea zI#Ln~_0DwFGo#(rUSBK2Q4^@|r>6GXNqgO;fC4Wd)6F9z;jOotr_3ufG-eL$5BWH_ zxR~q)Ob}FJcRZjk2YUYU%!k+QCp}QPnau0IeJBZs$A>6+jI~+v+fTHhdz5nG$rHQH zo_DxWb0Ok>P@01uXE>!jVn+bD?)0?-pUKtpM zEz=)I3vn6qOgkdaA!L|K?Xs7=?rav3{ut(;gdZAo?>QSBbz;fcYHC*#&(tl;Updw|)6zjZ;3TPkwnLk|Y ziLb9b=*xgaU8JHb3Rkzc_6Ps50#N514%YD5VP+uYv3#vvUFdJ;mW!ah$lh?2$(hgD zFz$$7f2`cMxT&s~^x5I5Kc8eqyC8iG^iL@k@KG_Ao!DNzz81%>JvbpOCX&$d#azV@ z#oz9(+GMidCuJz@fZ6d3%&d)dGn0KZOZ}O8H(sJ&zjwIxa42i4#aCtGTPk>pOocKp z=v^X<<-Vz_drG0P+?H_;n9*!x`Wc^JO}~YtT>De|;0N}PAH=y}zh=Xnsr`6Qgf0Ku zCzm$7)DHx&F5TS3!ikcV-1NBoK;7hC26nLa-K4F(ePi>k4>4rrh)jr=D^vwDz@4=$xX_TkrWA@otXAPFQ zxiqDcvwDk?!|gu&N;E8dA?wIU$pj@=ZU17UiR{uyg$jnf6I(jPqhe@d zPhOXpupi!=uJqBQy3IVlQ9xfJcPNF#J=n9NCI(o278_jLG?4E;$sO@}k z^9rIRsFmK&`qXjtCnFD^S*B8Ck96?0iTs*oEV3pAwkO8&b*armz+hEl*_tmx$GvrkL0et>@Gl*se-Z4G?xx4U<%B- zf;9K-yiWK1&8Ij$|}%wc$hOXc?vLGp;Pv5;cOh(Ec^cP7Wm4k|Bu$W9R;#4~K13-YS)*xYMWc4*y5y%j+v3Bs(d4TZo$qf)b|y!#!XAwo zhf=PM)u_{pJH6f|W|f6EW3~J68Ha>panxxu&PgxZ{_8}{;$AAzK#g>{g-;}_ZcO?> z>c!d`Hg}DhEM4|KIot+ntG(=|m*jJH+J}wtZr)RGX6-ln2lSYY4|kdLn>t30eizWQ z*esfK`bDKM>vpT19%PtXEXUpnrcsr$9#?CoV+5Hm0T_m%l)p;a8F4zw>fa3?We=^+ zl6okT3iAhyJb&5I$UV-<&GkaP+6la`y5x*D}(dwI@lb4#b(S-NKPnFeImxru9AC~b=0 z+L+qz&qPo9)b^LS%LUyD*+-Mui05+c2VOb|gbG({A>%T$n2o7d^?41Qu&8iAz3DDn znHgFtbP*6S**uR}`4U7eEl_30OQBwoQ+#re5Y;tcphiJS`Kl_`QNS`=;ozq}kmiSa z6P&4+R~|=mnv456W6&*~g>>#NQm6($k|0BNv8X>vAi;t9A?J4)!Ss;I-Qp%cBB%NV znX;_>CjYxh^16ch`#CjBlgCOK7Omco0*A7XpP!wbp~ius?`~KRZhv5lyxkR@@aNVe zgZ}-g4CQ^YbfvkOAQSk`p~G#{bjgGWcbrw{&br3n`g&H&HgCATc%9)D&--<{ta$bt zJOjCGmxJ1Z=@NA9E#$M5SdEs>|3QqWfnt5SY(m8Cnmn2F{d#|4B(iM&K&H~hw8+RZ z*3Lr0UUCz4Lgc&Gg@r_W)+cII%zd`Ex1~Mt9`3v!?n+l~=6Q6)+^$og*RbtMKu(@B zQFD^skVu)7s8SUpzZCFr@E}G&-()yiaVv(JnsDcM1Elyl3itR{SdBVbuz8H9&Q8l` zvn%=?GOaoz?DX1R$!5OcomjxV%l*9ZrMJPUAUUiW3)25eVhC<$VBAyf5>!ggr1rHX|pMShDp_bxTJyxm67AdA$!5y@2ZpcPX zK&_%6o+8~YU!CE3bJpmhhcfjvtB$*riMT&} z1_oIQ#;CQFjY3!*ja-jltOHG?1MJ>4Ut*pYVv*y4X~V@MAC^apysMAw5_CGEvcN13 zem|^IJiB{xaP+|7~3Q2 zxz0%TiG{AH(+Hj9ZyiC2JsR;|QLJJxAb7xCf_G5e`84SZp+NhFx^xmaieMU9sl)As z{<_!3k3T5Ap6d?XNakfnAckK)Ku3Jldnk-A5A)KF_Qp1L+H-1_SIf4!91e1~=DJfV zh}qsua@!6Z#8k-MqokY|en0w~Ocv762Mb++l%(7?LVg1>X#b!;=Fa>MgILn2e2q_L znHU(}_;W{{UHeEon58U@hNVW*YT8VC9_jv&8G4MeiCEK@_otkPLGIRa>wuczsS?WV z%h@CeFZWbuVNOg7|3Vq#!BaZf{k|8O+U-F|^NMx~m34z&(ZlR*ik&H=9A!b~$N_<6b*~jhHFJ1oN|cRN=1qchI$N3R4dlSd%wSCc{hH?aeKmg^t7E`SXi_V zM1){0owRH^esTpd>wsZ!eZNDuIO$l1aPZhpzh7+8dF`dOi4yeye3B@2RkG#8rhOKv zi51GhRbJk7wW@Tpg=0x1MMI#i{D>X@=%L5IA$d6 zDk6=Ml!BbCkWCbNm*rp`jE5Jn(_HP?7ELSk@#7`bm#rK2DGa8|R=s;N*A~>e$(Y@F zWuJDhFGv@3^enRsLL{MsSBb&c4_b{gpp3S>`HgR`(t@AAx9;`8VZ3;{b+hjVlw8BIaDXUOTR`55_^Vw-AO%QDcWZf%!<(5o4JggiX3RxR95@lxEMi$nM zm~*TPgG)!ID{OEJ-oV?ZfOO^J55F}6IYv=g3%Bfl{&W|3&Gvs$2ZfP$(O#LV&J5ThUd%k z%xjip*zM}KMeaNIpAV)2jjEtBoQIhd}khx@ctGUX(_TBd-pvsUUApSBmeH*tps1_m8DErG#>mlEEQ7W!=s~gp}(>Wbo- zr6GJOvlx+qd)~QZQJ&0#)fO$dhy8>L3z@HKdgbe&hNfnYQvIxspD8ttM^_9dt-888 zJNfL)Zwob&#sJplQjXz2w9L&PA;r!ZV#T_8^=nOybHrG3V&dXXI5Xxooa%R#=VvuS z-VpCxzCxe%JlD_|NToEhL`{Ty~|-&EME@v2~@P9Vci}WE!t2fx`jYI zw|e{UW0+Lb);_mf{fSgAG3pPY<6G{R;2Zwk8aQXdk%@C1fvC+|1<+@6y)1h_=bn93wz9|H*9W=vGRZJLJeo=Fom)$R>+s6)Xh%wBU^pNVlb~&Bx6ybp8{JxwG=gyRS1B&Sg-}Bu z$N_K8fmTQOOWqzheZ#hT>v{)x1$ZU_W82%flHhetIyAYsMi}q}{&X7R#r= zYB2OQCnsm{m+j-fKax!KcZo-y-n;j_DrPN7E{p6d$o#4HjF){IEjElCjE9xcqW*XD zYVlrs6UYvGRM1dT#!^yq9pz5i8KlA8%t9^Zy>^Bn!i$$uNPgLjc4TT1^@A=gy|qT_ev40`DmI4PSXB>TpL;mo>&$zsIAM2zwAuM3?{Js>`J zAB?xXL4NU$_lN#Hg(2;s^s&ie(di&TArjz6&X?AkAZXAX!*_8Krb8IuP)>goxjwO51G7JQOM~3CB78_^T9IR&!qA_4>&w}8tY!9=`*re_ zN&AheR(WPUrW<>VS{Q+&aLv%|L9y%eAU^_OLg%Dar}_bX;%P!vt*U~@)e$!*Z21g$ zyYC4JMaEOS$iA*sh3TN)_^aX$WCPWk=GF_yp_t-j0qY4F)_-09JCgOi@o5)mZrOOSJ3{_+bkCsglx8oB50%?Ev1kO3zx^KJB?($aKp?H z@Lj&^KoEGunEVh{Z$J%EYo05BdLIUP?*H%m+zkXXY#+%w2++(!BtQShqvebom}QWK z%^k_A;o_s|dk0~HVJCO-D$~7YXmfp7^gi;FmHYvT2M4djqPb+jM9X=AQ8IZcDhB^B zyOX_%!Q{7hxz;@BiKNt}j~_?N%v0cfEeWq#;)vQ7F%wR*5yP`&pHtTUOEDtVR7S&9!7Mlzm1i04BOPJ21 zSnyVRm%Cr_xp#<&ipuOR4_f|i0Xt;J2zKF(kdP2p_gmjP_huC+&=KPwV+bx@#>N-y zn^+iwB#51TeVRqcZ1($cV?%=iDG^w~2-HUrzZq11;cAhrp}FWnOj`cprO5l)rktR# zu*~RZ*308%=K4Kx?}%0!!v_2riO|<|r0g#tx_^B6Ylo*T0mq1QIz6grYY(kSU^S5Y zYhacB+wh!QckZNOkiE|WC_^YT`LX@}gmn?{Mlbfe6!TwmJ{`O~l$CIoS%-$3TP2`S zuV3dnDVI!dZ|}vLPivTSMT;_EA~x@J(Hglt3oD#QTSG%V$w%Gq*HdLKUP0iUoTu{HTrM24s zdMKA+Zyz6-47vS^w$r2CL3wpYLp@RWNfb7R82^O|p^Efn3GRf6eEe7@lcgm4`n99B zr2@E#w~bx|gYEP+-+`)$41mgK`b`Rf_xtM;7cXGOfwGVHMAjy&lu4l{ui6oV5^1?S z(EAAuYcO-9>f%G#gb+1Plv@VY)WlNifdZpam0b~-ybJ5|`z`7bpNEVT8H7S%HEnUR zJ|MBD=RpLEUH}oRzLq6wj;hDv=O@8SRN@zp#;_=Kdb;4Fp;|9b;NrS_Gq}yVKdB?%!W< z1GU#C?Q&U4Ne@LPErKK2jkCXexke+E_$A2{Tx3)R*!1PeDi2J;r<6!9Kfj@88Nb!=dT|OC!4Wi?Pm6V+P*$&tG~iAdqhJXGYE=1ZRwZ9We~XW4db9 zs-i74C(gy?x#9SMuap$Y(dqt_cEJeB1|1&Q%oe4IXIydl!?AwF<=M|D@kfHD2p0@f zHB;A=u|mB-yS-JA7{Nsb04XQIa%G5?n|pk@C%gWCo635iEbt_y+?f206s9{5JYgM7n`;kU8PSam?q3RmWMzL{!T=5n zto1djEL(p2k0|py9lqH7mDC}7xjDvW<{F55+h=d-#yTc9`4TJRE9>M5V2}HPBd;Yz zt;Ta0N|^W_4j2)iQ&g0A3T)JRMUES=yWXLm9&vXlK@e9qOKDIxhRrZyZ*5E$bq#C( zo@4hDSZ0t5ia0x3nW-zDYYXoEa+5+fSyb<@56QJ(FB62cMIOHYAyVDxFv)IzJqxbg zh0$Zcmkzvy;Kr5?vPlP%^d3A__ErRI25R5X{`p6NNPa$?Wf1Rwm=~)}WC1y_`lMEd zvQ+1?RV(x%_8TEl)`0+Q+&8WD-*>9DmlZd`LJ9w3wZ_6wDGRNPGp z_lwhCOGho28Ac@$vnt#~!fEyj#O?>!ryMl@egVoOZ8C^T&QQZ>#}p{<=yydaaycGF zUA}z6^0xLK&-n=hY+?8ErqM^FG+nRSv=LPip$*j$qn1Zu3RT62?iikQ=@dTzMJZ8^ z>*!B2`P}TR=WsUD|9Zve5!DAXSe;Rvswon&fs}ym$iMW!`Ljid4X-f>vkr<(e!Y;l z1*=EIVG@_b2$5mIMbPxFlxgUe!{J=0et&XS2FZ=-6tPG)$ZD5Enu1wH%j;tIE~6Y| zEpxB`{bwr9uR64$f2+674NH|mbG|D&BPGU8*s6kuSfk^yKtt`s9XQ+T&$}@Zi0pjb zZgRU{Zl>90;Y>+|Hh+lSDc`{X>SME7Rp2?@>CbLxZ}7ae+xjS0f%G;4!GJ&+p=qW51xaZ)Kl?}&=gFBlFU%`qv03O#@(9OGYw7%UdNWN4w ztX6=!y3=zGSvc^J3LEf-u-w5ABZse4PgWf-mMz2-usnqmv-*2sAqCtjH7BQ{X0u;# z{jZ*#rT#e!E>>vX!&RmS%VC2R*}tR}%nml|U9TGL6V?1zRmVG)D7%_GtY$B!-5yfJ z@^qg;?~m#Kh#gj^&81I&CiwHF0|uuapj9wZXtk!qvsrt^=nFlwlpehaGx4oOgbQ&` z!DX=Lj(a1zcG}Cd*=DCl*7~5t?M{VSU#59@(tg8|2`VI1-IQ|QeuQGn+Y3*Kg<76_ z7-LoTC2DqhUN~gjl*n}DlI&!O*zCR}5k-_ScY)Ef87bFpQKf3N1_UIgrarDZnDK^4 zBJ3iaphp3dE+oq>-zbO}HA*3=kqnSY6uN(%gyT8*;0l9}O7I;~Z2;GTDqBBuH#Y^+ zjDtj}%q&SRQ{lpd)VBW@3_4hGSS|;_)yV`E*3$Jzu3dubcNl8>O7lIC25LS3^Daax zQ_KrPQ}=K;-}x%d#?QQZRzt--4c|MZ#0CwJaa}CQmCjhc^K{CNulHSde`@+GUL<2F zs3ibD{F`Qfsb3Is$s!gi*k~S96!f+J2`C$X`&OVj2Xq0whA%g16msKGE)QXo4%@HS zf^+)uTDOKH@vqOKN}0UZ>ODzqZe<*k9ObR{1T&U<6HE(mhRuu9xm|7iC|biiAeDNRjOqmNeyFL2Zwc^rn^{Vp;br=wa$!eR0p5YeG>%N0r_ zprm$STmVVUcw+CrlO#n?)|zPd2j42=3c}^d>j&sA{6Y<3KN88$;P(yYsGp~Eb^u0h zX}Q$*8tOWC9nh8=nI-9C;D;DJQNKl0pPp(>lWNd=+^mj|ib??LzShAaL676%L3Nkx z6CqtXqtr0r0m~ic1|9&xpdcj`(Bw~^qgr8w47hyx@<56Nxh1sg+(OxZgbFoOs8B8m zKw8SBjhgeJ&0qDwVPWqt49XSMjj4SDg6(#w;Mn2N3_J<=qEyHa;QW7HNra<&!Z9NG{Q03q+_zZ6SfEEI~Za_o7J==e2#1^Ds^=Z%u$}s;a>ozHdu#f=-y3D+ zwV+xdWxG8OiEE-7_pRNTaM5(az_3F9@P@=a)MiRmwX8ilsX1PMR`kBNPS$8BGn^OB z8hceF^3e&hVcHJ$%~&Wu{Wc69A`KQbn^Lse;ZV4yq5$Gt1o9QXOyRqFcV(eESebh~ z)>DopDEo2|%Ybi%5cF|lQ0PhW%^MOFl<3cQrr^(el)6$4CT0nuul73Y`2Wk=KOQ4=Q-^++a_bEkgOei?`V?in z;7H|94~i+_^V+X8R>6izyer{?uv^Lp_3rJCkW4HO=fq}==e~RCdzZPXFASd8EFBVn z#YRGPi{L5y4IZ&r-U-y-yA+}9-gKkY#$?t~e+qCN3IY;ya~XWec$DDGmY|m0g=8gM zH%1bKT~+5=T7(Qo@*6LH)bip-lTd+7nsmzYm~oA)zJB_P7cX{Zyy?@CfmB<6e%*ld z_-!yGwh)R)gS`%=gv~~6#?j$I>;>SU;8Fm;!zLa|64!}Xgf^=7V<60gcO1x3=d)bw z;kSCWO$|m?Aq#2*9ouArXlJM+oViG&5p&oP zC`ZE(rPKMM08V*>sp=|FfM1}YS1tx|63L6;J)ayEWmI-7#5!lgPM5a%^X!G8YQ1J6DP3FAeUrbQ3?YoSE?4?^p@AXQ0;s;TROiJIxQm12#*;bf(v z1kY{|8cgQ^WCvI;5xKN>=S+ee+;FPGCf4}%M%qPL)ogdNC1kVBIZ3%Y&a%b zEk(0C^9{AnKP=i29d)RDzOn&WL@c&jTJm_wFjN=PHvzVbaLR;sYrZq1+VMF3?T=4= zNohLrnF{d*y4@EStOfmIl`cDtx^F%>5F`0+y|g21lc-Rnt`79mqn(t0>h4AY~`E%NdK<%T|#{P#Px}a z42f7?6ewfU8O|&y67nPu_3hI-fR)tV%e<+H9ym|g9pU(4XR+4~5_rqQuRIP1CcY$` zeU_}+dvX7lE73AL^Z+R)R<&#&2I4C# zlRa7hQl74kd193JHq5PsIOs7Kmr^-P&OxSP0cci)G@8z{6gqals;Zs%**tBusu|P1 zz5I}cMdrtkA1Is&09DJKMM>3C6Mnc)@?dYXw?zX5RBhC%#<>HR8>LOwI1mLr8J7UB zD!?5v;@KFV4wsqwX?G`6sQc~j3`xDWd#HV zX5qk1(_#cr?(L1CFO058^MI*w-eN!&QFjOozWK!d@kUL?hmm}vFN_JPgz(5VRPX?l zDEG;jR)sS9GW1)EMM8V)6B#JmH2uRhAQ499E`eE;hl!(ow(dxSZ#G6%S~1Ao8EQbJ zToh69y$c2>6rtU(6VD6R{qBlZ1{^^C{rl95r@rS63^hG4wAoljX8>TMup)@YQ&9iY z<;iaYOW2I*@4tU*0Zu`D1o#9c65vJ@ut8?GcpsJJk&?kj#^b=bZ0+t2LX4gPQ!Mr2 zgyxTYh+s7c!6cy3LRs{CSg8C3ft#n*iq{##qYNluKq9Z>(R;|Nhr=T-!?#eq@BQv3 z;7c?|lcQWBZd`qsj7of5GEp%s!W$rVI*9(RVBpATXnY6W2pG{ENWIgZf4nT`fdN0y zzP-CE3wgZdLbSDT01D!cJwFkAX1!jBI@w>*Q1RqM{NHXGa4`eDu*!ibjBWk-R-u*GpPPX1(9Cxvr}V z2hpjvrbhQ@_ydro@RSqu?Jfky0c$Jbk3?}eB#|V3_7A*+;bTZ}B2{;k0#F%59mVgY z3~?1&xb__#1^p)xCPh0QLPmyav9t#%s|`4ybVQF1F=PaXmFffO;{l!D2Z_T!&vsD_ zKuc*M?hrF&=un*dl6JBnyz(y&InZgNS`hz9#oBcc@oc$c;4j)1cE5t#0u zhG9YW3=n%0B}f8{0FHlx_F$DsVVYdpE{E=Ky@{qMQ6gb12pW9i5&Uu>aUQLI6ITeZ zH$HG^{(jRMInD_~KV>jf?lu<`sqX~t!qm3CI46BLRNSk-5lLKO(+b( zFDMnvGecTm-I`+Jjr@qi@-^gWU^>cT#F2yqT3q7mfzImy(x~*oSx5p9!he>TF6Z{}mP z`NL6CiNw2JS7sGp{g*;yZyMvVsVRE7!{ z0@{wY(VK5IREtTcFOnD4Ti$(Z2nX*`E`!stv`9UP()#b0uh-pgWD}L)%iXZOWtTni`=|>^fQz53M zT&C)93qZOL$cIUg3y8yr!$e9ITTH;gPD@3FKXYr!bd932uZ8X{pS%p}&2@D^sVMDJ z0XW4#1*hP{gUt$rVyAd)A?pvGFM9E?761AW)AE_ZfG|#{51Z4S84-YJ?xB&BPrww%V>=TE8yXOc#Yqs?0{+lB&<6CL-@V~$iE-h{ zM8XQtQeVG(@uQYYc`XQ3haB{$=KK|Um5oEG6M1dj<)5N=VPl+wj5XmOCA0GViS_O= zpMaxSL<4$uhFY0@G3eQgT>zt)5Rn3*YvRY(I5d4RP}>i?XNMeDy^_QuumNoo*Z(V&4XhFeT714an>XArv9*V-iK{DdjZ zgGiZ`6Nve@Dv{%?Rv#GzGYW{?%GsL5*ICu>1L;}$)P-+T)rAkx`%$<HfBC{wK~)ttFxI`TzLw zgBmSxuoaJlIAEBMIK#(qn=BB!=Hs=OVP#;@Xi{o4STQ?QOqpdsd^=Y?0ZqvZWvA4SI4u{xgDH z%#f-3`T46<-RJx=k5hxN9Iq`2!@JIwms1YwNwJw00LE-kx?y@!BQER^+@f|TJ zl{b*nZ@MKOm<(8dIXWJL@5U|y7C0IXq0#g!C{&11cb4E)y7FlTF1^?4V>QA@(kW_~ z2=aqYEgwGG2*T)J5eTVF<+$`dl=~Fqz;As%e;&SY74=+uE1x6`BD!I3&^lG67X6pUKWA(rsL> zbF9}KrK2g`uLR8y1)REz)yPIm>{1IT;Ogj?yrc~XO2 z?4QpXt8fA}t_Z*zIl)!oozuZF$Z~W}qqGZw{Ytf697Om5>KRZAkTmg#mWMp$#(Tu; zF$ZGCGsIvL&Vg4rf1T;~AIl^Nbimc&>mhNIs&L*{l{vB%cAXsSsNd)N;$G{-^=kQxd8?QJ zfB(2dQC8=|gAsQsXnj;{|;>^E^2Tn zceztJ-$z59PzdgTSRk?f31q{5aWV=tnjkK%zwMN!THJr z|B3lugNOnLH}WGP)DVfg3i$aWb&sQNGvB&%45gN-*K(IZDlUNoUhmA(sFKCX(xY49vStoAdO^-;4)Q&F;esp#A|`M6 z#%2V9zlj9NR`17$zko=!^-qva6fuB!Ujn%M2uh)rL;$?Xg|J{$CxFnL1M7)3A~<{} z_e7x*s*dc8wdZ1EV}Y)aL$=l7o+Vl$F^LBPb~2)l5)1UpIXgScyF)64dY1s3Ss&;b zg!5S_nPZVlSCj$*UlxcW)xHaqPZWWcQig+#S|8N&>yUZ5ZX#3m;2G!>j*dnMzjm@~ zA71li)u)RAZ8Nek%2%$8<~!}$>>un>M)6pS_^&~z$4W$%AhZhT_c}3%NRjme*4p~c zT&5uucK9bia-p{V4qgN9OH#@=8Bm6wgni|Yl2MQh#7AH`7a}X^+Inn!6aSwh^DB?nVnBrf9x2-o^A}@a1$3u-vYcgzzo*@f-=sty_1|49a<*Vbf!l8eY_OA}PJ`v3D!KmKw<^~(#fPT&(NnfMVJ;@{^D1A=Z`=izSo6vz{1mqzY| zEU-;r70ucmqC zAk&_DUnV6@1|@C|#Orb^AA#z)vmpm{z2$+(b^kv7AAl>dNbkeSO3ma@$l+!v0eC6Yza1**UHGeXZGe113(sCvdbUDc zEI{Ng?ZxkGhqcYk&9e_smG=+`_3!ilV6FZE&K`>g$iSf#8}bgi10U~+r;)bt6QkZS zw(V%i;H+)P6}eDvkV&_AkgRc@VMT|`mFp2fxPl%X+8~y4^D2K;kl5}Mlm%sg_kI$! z2Fs&F#C-|N&$nv%)Kx$tXZLfCrswMHm`IWnC2GlrcCCSyVpHc;6qq2{m~|kQ|MLv9 zA*b%Y&;Ltz_x~0P`Txola{U-g4_`~aG=sRSs4$Z$8eV$VPPWW~~?_EVS9r1Xy zWi#KVMBU>}hXugQ@X+14gpg}T&oK2#P1G=TPLG7m#bG1)Gy+{&ll+{di{(-|Bt2W} z**$tSQT6Hab9K1msLC&@5;mt$!?H3mn2gpO>7bAxMlM!`@^WX07QxBM&?-3&E>6@f z^yx5=(HId73J&IBdQ>^2{$5ZJZgzh%%FR*F%Ka@VY0{*lp{q;y^5m=HqLLKotp>6I ze1o*AYUG7aRI56=y7jubbiPK`Q43cuUycQ75-n|P zoMB;M!85<~;lqdf?Cj|S#kLABUnVkL_o#1Z2n@;>y>ln_>sL={qf9kI)4HCWT`@K@ zO+jBNEN633LDjJosV5*Kn^|%)PXKE?2PbDrR@Uq5qVJzQuY%ge^yz6uJA3=Q2}VX{ znfHm`RHif@hG}y~KtkYh;VtYhGtG|9PI|bnmYJEEsLjpI4PyGB4&LPOzzF`KwjnM5 zV!wI$J~ksG-*Akw&LE$j*P+5lK0;GdYkYQg_JKNF015CpC`SDo7Aw+|&bht4%Xt66 zYo{w$2`g}8ZAw;3QA5NAg4!%N_MQEpP$sq%7(N)`U}$;;`+8W zne6N`?T3#kwH%Ae7BwHz^U%suQZ5i$Jv=;Q`zlI8AO}D40?5iT#V?yhbd^U%hlHfn z*JCA`=ofC&p(;f&N&DKL8Af*o^zY811zWX}!>D3Pj~#m2>} z@Ven`7Fz=(`C?mJ{Y^TUb)Y$$S(O)5K6JrlYU`P#2Z`CqUTt7&=ws=&08dD2aU%Mj zuxC3n*ARBt_mcaB@j%JTX8z4|=qO{=8=76RSialWDk37f4veMVYH*|d^mlg-tLdzQ zJW{oHf-0?Cwn{_iS&LqWU^pcg78Y_8nE=$j4J?jdB^nv99f%JMJnK&_D)|1uYKTfs zL1FHJDX3NcJ2dn(G;$|STMhd0{niZ#X4w~FRB%qq=qq6049`E^_gd z>h=|wbhI@;$yoVnK^VX*_-nJ11w{s?w|}|HL2vDU#eUQLU4NOwCS^%yb#DQ4ys?9$ zW27{lL~BC3EX^j>{eZfZJZpXXjpAgyH9!C0V97@BO-Nw^O(r0l;3j+c=+RnjypL5k zZmx|^>Z&v?1Ehbzyi){Q9-eTKMx(POsJPTN`&Vm-PH+Kl5?7F5Dy69@FtF{8zeYx; z5t0n^A<4I&Q2M0IYKm$>`n8!aCc4#Mx@>vUCD6|=)+>UuKveYAt3QXBbr+E+ZnWB< znsJ{(x@s)fkiDpvmsb?#iqrCTNL13))YKfY?ZKdlgW2n>(Xmlrh~J0{j9qYd`<%`! z@4ib(f4fq>u-`H5m*-<3`(;(rkvW)AX(OJ*YtfTcRV{@EXjsunwY#jQi#9s@ zbL!1$m6|P7&YNd0-eP|RqHM`rG%tt6PrU)BO+LbD3JQI2t=o^cxRby--d)5?O0^K& zbP->}b!IhcE-r=rAvp!ZU!JS;_3yw6m8UWGNuoJF2<;z>83M0fOv}N3Psz-un;h1? zR(QUGq-4YDdeeN}Msl6Eg{O~+(*``N`awcPn%qN*N&k|XYJ)86X+R;+eLVtfZTI)L zn_bKm<6#1)2L%qKuKr4%-nnVwTjBDQtLX%4moz-mtbpMGzB%2YF7S>EuY=HTK= z`&JqE>(^=gYSt~L*D^A>!OZG757y{DjoY-39?699KGZSJ#>T~!VwAPC%7`eLWCh<> zn^b(cN@wspw1q;grebeB^W0xcKu(sbVpN2GcXV~74*yxV8$Q_O?YI5&?K{DlmFY zUccyNzZq4yUZ0jZ(_uh$zJt;QEe}6M?7DxxlCF@H&yN^u4 z#}P9?iD9N;pPKs6H^5r@13T8hM!S9edd_-(or{}EYpRK&7jNqW>{q^3kMw|LbD4Xz zRhELhJnrw~9-x^91s4cS#RxR8_%zZ|-*EqvH6V*K`C4z2aQLPJJ{2XUJEDT+ zt*xE+`J6mX6H|^Zal^pKby@NC!8C6F^%GTj_Dz288th!XmeFc*PODHgr}ccBnYJVe zgb-U>Va%NEnTif-(Q7AB_-(7$xu)MnLPpYIq9SgcPw6;qy0cV41=rePZ2QgKfxm3V<-9;pS_J+HpR%y@ubLW0e*W?SHZV)2d3qAQJ`g@g-#i5aTQ{EK z#rw8N6?6pIO#!o*>rATOVxNEN&EKV-0l5ft3v=Z23_8wT1Svqkdd#bWu%vj}P4LSX zCorXJdQo!p;+zJ~V&)4vPzPsOS4Y>LkV=73>!W7=WR5h2nTZg!PN&VG#VjHg94`Ec9TvRw z)?zh#*@Nez5b_>7aTFwqbZQY%<4X3MVP)Zq5@XDW7 zJUktWIBaABtc4+88?@VHCe;3xH4;mYwqFS=Fywwy`4nT-QoS==MZDIZD>=7MJP2`U zpIyII8*g!%h#acRY^H%XY&$``CkN-sLg(@^6rKCn7xrVQnvMe}hxH*Je(|2R|ge&QiTnh8_O+^ry`MR?};fY?xy@g((Bi8K=94I84+|p z|CN&4H){+Fjz7%89{@dn9#vy zW-dN3efjd^pwlJ=*@e>>%f@^PiHY^CF-hoU6ie8IDFi+nK@#Eo*5Q~-LjI$$Z)+$j zWT4+VB=&i4M*c3ygFKQjG{oc86ZW?EOcpd|=hz)B<~iI``h6DaU?r45oNXCL%g9Pe z#m+|>;n%`v$&CkdUS6L3%Zto192_p-HLRCturg5@zMKpsFVwa&p+z40&kB4pF@?F`vEgJ{PMb>}V13s075C z*`FunK#?A1S=wVHpJ+OOg&TTmn};N0ShixSo_0ohOzCwmjbPJL+H(>`XP#`$o zHqlT_ib_bx*KeK0rlo;2rjO0gCwvYQV>w4;5=CyZJ}XyahR77j*KKWWIoR3rGFsjx zOboHec;qV~WMO8v;>S-P^lUp#bhM2Yvz|mW(!#yJ;v!LTpyCM{cHs!}e6WA=H7Cvi z$}re?nM;U%bC~!SFp&VQU@O8jTab{D@a%_bXpF#JIb90_N|;Hn&!1n*Y6q4pm9%T@ zG+}syg7Ssw$7JS{H~(#>vU8d}rl+P)LYj z=QgQL_~zu$;9YcY0pD}jUgn{1>jP6o<^xiIQIuS_ww6eJgc{zu4IrKFsfLChOg^Y> zeKP@PFJIOLWSLrAj6QX0yT;0MXNRYwqa#&)sJtfjSCpZVku1=}$4|HgMi278(T39o zbQ`_BnK1-lYLE?dwD!lD2D7xxa->;rD7~HOw|u)d{}2yK!AE~;Q&Xzql49%7#me_j zf`URAnApXR9UD+TX<6ewfBgv((V{rs-h zr2vIs7^+9Y9|`kXlnj^#I}Wg9#KsE3a7sOY?j|iw+f7iBl1hT=KiH>_blAhj$L7-b z%dX}xxt!Oww4jDo?r~+ioAh@diadH7J)}Pf9$I>~?93J7@zkP(ZjI>S;Y(322hfnS z5cD|b*#zYiDDN|{PlmObndObUiv;0vK6gt-D&wbz$DpOJynN?^2~~Vfjx^YKq@~QW zK_TCKWZ2IKwGdJk(*A1p+cX>;9QnpWS+UlF?c?JIHf^ZAYY^CwIDG9YMSPzL{y8P3 zH|f}udHkY$@4n;VzAXd2O~0KVb%c?DzKN8mrAK%~c*mbV-!f)ql=s%}f|)=c^e3WZ z&p)vr6>r|Wi3~7&p~lKYPEHP)Qr0lBB#Bk;8*I}4?d{zOzwY5S!STWVc0)BxjJ9mM zGonQEfW&^akqbF_f+vHuu)t4LW`;E;6>tuW*kFJuxz3{c4g56>oV4=EF>nU+U%Yq` zi^X<+9=X?h{R#28bAi;x4c(nO4hBCyoSh8_P1*bVxD!BFOsDxFkQg{zut%ClKM&b- zThMH{fjeOkHlP}CHv+}|_n`T4-MFTIqizQd11DHS2iEIm7jJqE4#UgKRJgvbZ{iR& zJ9jfMy8LB~%W{~qayYx`APJ_kabN(mze7{k(IF03r(^JW(0#)xckL$42D*JFIk}sF zH*cfOR|I_2euK>GbXcQqVp0LFA)ui1K>u*8juto-$fU%hqoXzrsrB1aS`45UYWq+Q z@s%(!p^H>(&-Tw;_yfLMT!u}F`qGA6rF)QPXJ=3!H7r! zob!cAB-3Kh-k8#EO(Q5UaJrD|Kpx6oFbkG*#)ZAckO8zodme;Xz~_DXblPciV6!*- zo(vB=<|$m23b(B#z;V{dZTm@LPCHK%`jmi^-N{}b_E?RT^UO>J1&yicBFhOj|7({n zeH-<^5=6z3_-o#SHMm2!18R8!i?!UNohS8~6^owcvX;Ek5{gL*?Y@COB?9!geYpRq zCM*$`UT0H1y+4}*d*5I$Fy6T%2>vcPXyvM64-3*+aor92)WusiKQ1)h1z$BHG3f)U z5m5vY;nb$S||xV?P};$gppoliWF*`&Bw9NP3{$VY%!9261J zXW{_2kofPc2h=6*6C$AZ|A0*&v(3cjOjL@?p~IHB5*6Ij#^h4bxnXPVwNFm7y?thF z*v$p#t;xxxioFR_sKJS;vQSaK*Ef>&0W$wQqiqW?kLV9hD8MTm5N-1Ig1ZpzM2$5j zBV%Bu*H?L-Q(CH;&tW~=As`_X|J|g*cF0ZzvMWNgHvqJNkdWl-2d1$SmZOyg05Azd zg$nz-#J(-v*1LyUaCsUwHMPg&jXF%?&ITdbvWZ_o32!?G@JL=(JMZtmCHH!tpks!fO$3}E!lVDJUH~0hHdmOUR+0%H3LIKDDDX&v?6IKe1?)03(G{7 z<81LlUacPjzwFplKXh99jxU*SwX=C2P^GM_d<*xywY4>!M)dmJM^bg8LZ|w1di&w` z0u41a$pag}v<{fFu-@zQsp&4LTZ#vX+V6`A#^)OXej+ zLuY$S%nl0o5}r#Yipm!kg|h3e>0#b|e;NM3T(fYF%WU{*bnDPl| zgRmeaW$tGZ;T+N5-`_`o6_D0n`lL}bs-5LN*PBWdQqi*9r9PL_FsVOW`F;RbBYF7> zIYS81;Juo=0RK;%z95SXUb1NmI3LodL-iVq-z}J@(!rUI5bqM50})&9K|w)v)zt}~ zKfiLHakAeGF5L8yamKJ^W+FWVzI}TGS;_wV4yA`$nI^~7Xt8ocfe^5^5VfQrBY<-3 z<=nX(XvW|K7TA^b<(5;Vs(%P`&`0367LNop`YE2fn>a(5hf&I$Hur${cEXW@d3YIiEaZQv(B8v^fa!5Y!~j{|tqu-#>q1 zho6>*hm+%fS2!rl&7Wh-F5|h_|Kg?a91gz#=-wkwv${~^@qn}OEr6)ipzE0(_ax&J zf+&IEC$zR|%1wHUkzM#i)b*_RpyZ}i7sfV!KN7Nym%=rXOSgY(`1xICU|^7y?=*n| zBQ(G&<5j~$S(@r_exFCjMoI64n*zdA9b~v1K3KVH(iZ(bjwHzpRz96X3-@^l~(psoj(?n6D ziu6=y@9&S}bI6gESH=SP1N)gsvKLv#*4CDdol3Y$-d>;1!*I`f*86&!_L<6MBG&5} zgk_lA(V~o8OLn-&hlXymYatzjy`MSFZfYr$i#1FmA-|I3>-&c#=G!K4{v-;jiTQ?| zdcdubKiTR|f@*$l()Tw|+{eI;o$&Rm2+(>mkPlHz_7yN=V0Hm0$XH0PoXr@MwBDXr zy>{(Jf@uW?m#=SV-SUwXaOwzMNLQ<72V~&+&Q(HQH~7UsL>My9FjWBN%KCfy`3X44 z+$nQnR(t(YQuI!pKCNfDqdPH0YPG8fCkNbom|(Nmn-~?vq^GPRlg2gZ_*^JJO7Oj) z#irTfgGIm!2#&u7iIqNF;axZf9Lb-ns?I%6pu$gRhzVn`dGaeY9Dj8n;cO1B3YYEF z8`=nTsqWtd5>AIOGg#t&c6nJODiqtye+XUg7X!f0j*0&B=aSvKcPVi>(qQDPGk+}k zR?ozs6W~hb{%&qZp}IN^^_oq+Ikdod0%ig=hYfB0fs(xE9<8?OhX*IFQBft&&#RJz zT$}S?6$pW8gigFGtA-Ww&EffmkS3)Ig7+zvE+)^R?C@Y(01+r`hh1Bv@}|q`v<)Jz z5CS9x2<(epqSqNMcWq9c-0Bk-@AB&*RZCb}GAmnc>WkXog#(uIXliIB#5%xRyH*{d zZm^oQ&Jk|Hu=>Q$Kzm#3T8Q}<|!c4iF&3s}S<(88*g6M(Zg9fMS+O^j-` z0>5qEKiiD~It<#s$-R1&1&~h`c%B)HnD1_9=F%TE`{!3<5vM#HvP7#&8Jr{}``k`p z5fKqA6?@<=A)PDR93o`x!PFyWG&_gwX-{YqFxJ+aYN~J20%p(rqkM$p2ExL16Lr=? z&NZD{>Qu^M{^JFZ7_)xDRGnb>=xc>V1>D7PfHJaRxs`$Las$mp=E)#yJ=`8%T<|)xw+&DfsK^klV?b+FH(FmindeOT)Hb>qwnil_OlNVh=E8VssX3 zKK2We$3czq_*3qmro#>S{OYKk{dt}$*;FQ6h(kXrrOW5fkkYqsnY_h&-! zYzoF+MkYYbiNL{pVDA?mp<)HqSio{-R;@VeLxaQdv9Yw!P{mWWY%VqmYK}86C&nkI z>$er6@{<4lL_`s{y^0Hj1?RIrw%8k9p5L|y-Z!2x&qvUI#Buv0bVQ*twiKf(ux+Mn z40G^Xs5o>c@UVB~)@iq=T)r0+8JV7!#}2gRb2xeR3)La(KG$EKvTgT0L1Vtl$F z4?AnXci22-)n;ni4$TwhXXTWo<7|f<6d*8=yXtXgCq*mz|+f6A1+3!6G&-Fgh9+MA83O#mLSa z5+(BO8g!vE#6D!O*$ugdZ*>csSKsXdkhESbv!w?H8qA|O=Y9W3`%*B@8!SW?BPw`b zq3t3MmHzK(HbldjJ9NhE=5B)j@Rgg7^3{}tB1KTTkzxZdk-6*8&~C_yi)RG0sDLyR z7h}bbK}(2$AwAi!YXM`w62yl!jee!j5aot(iRj>qEx z11EQf-r!rAu98R+8B&?*wrt=l^Qs^?|PCymgX9;vJ6=_12P9NP-j|Z85S-Z z4GIoQNvviFNF7@~55<736oo^vNS<1*x|V3O&`-~5%6gHK{nd4kmjda^i2woCC8jgJ zeXA_k2j#SrqVQ0HSYYMb(GJ2Cya4u32K>1IS`m^o5XJykyhDy?$b`9>S?u6hr@Xh4 z!Ojk=rbxx@`dptR6rTdU0%=VJvw{LC2KHZ~*ek+HDSq-d^h}B8kDyyv?RnG|gRyJzn6mlt{p)tvt+EF{DTvNkXnQc!Q&;d;!?hbMafvBSG}(BbRZ;2=K&*<&#S z%67Y3GoTj8N=SHfnxebfXWG~;e!iliJKTD)*SAG}ra)M)Bm ztHo_aK~Yij>{%6u#xtxu&WIp8X5|f+e~-wJ_~7%$b?#i)zG=l*>}#tUc#!GSBHqtxT;?PqR8GCM{Xr_ z#_j^$e3B=eqPXHo<@K3>6jKGqG+1cUeI$&CD+DOA9@556oe(u#ZOZ-K@S9#=KYx}5 zJd8;mRfJpy3$=m|-G!~fS($#PL*;B()T9hLGxB< zTyXiaAE5wWQbG?`_!ry&EpJw#3zt9#8Otk;3?Jb9o(s zh8C8#0fmKyReLV*$=60jS)pOX%h@(wDXEr?%tk+!3dd+DR7?PqpT5JS4I~f@pxnaJ zCFik9k)X0IVJRM$#_xl>H`Za{Ab!w!iWvk}$N{YV6MX-?Mv%x=IdHnd zp>PNXHSC5nt){XVnRv*NoTpXYIJ9doC3;G>c#=IDZ>cMJsB8HFN}VSbhk9fbz4--d z0!C5}+XUyzqph@x>B<)PCRFX~?QW&gIq9O_&YIkweDJoAglBSWEVbvS^29T~0scQ_iq5I6j0!~C^ff34y^f7%K z?@t7fkdS3Ssk88NcS^PS{S=D}1qDtt){4Yw`P+ZW;(`h#4R7+L4x#Ld9O@byt47vsEUgu!E3`>SNksiYEox_pX{3Gm z^4I-T^+T4SWQE^&Y0y4podw^6kmw_lUuWd~`f&W1a7Rt~@9t1VU}m?uZ)lT}ktBj4 zKpg61!aFlXWz?L@p=77x9MM@Rv)8`5jU}&hbsH_V*!|tz-R-M?rRL@3Raw45qg#G{ zNv&@h%=8`Bipm~-=j=^!v0(O#@p;sA_;=mhmaE6iMDEkmw^(;!l9B!;{%hT1lKKa7 z3Ne80 zF0OT+Yei-W<>i9K#XT#_%K<$`CZrxc(B(*smNcw!@_Bq8kGzyr>W^n0U@_@C#RkAl zCtFcgT^-)xrBjsWd;>!iQc|Yh6gE}&H3*OB=8DnAgD*)t`Q5R1~S?{zkDgw(9pN6R}l}^t$NMul$5O39UL6z&R>*Md{^|N zibB%CToK?S))1?ceeIR|abXjag>%GQw&bt;65!@KkS^}?;;qX;d*Mwxg)`*kQ!KJ{H zHsJTjq(tAl{CsPkcYoq0CuxB%YiMp(hh+zvo6NhS9uvW>s&x6ZjrltNkmQixlYfP& z-V(3|4`BSxj=c_{Cj&A=J3ITju4V;z|6hFy)kzadN~F&)Z|CaqmrQoJH)c*ZLx z&_5^;o@r{hTk(ifWv;{<^LV8nXlor9>F3X*u3X*a3C(y43p%*k;W)>K{n5uD@FuSjL+RhZ5IN@K92?EB29^nwrR~S5P|fgN;CX>q`2t@34fMHpSTsMo|mtY2LZ_YR1X{ z(wXI0C41excCCG3W}1J%sLkHauJ_ansJ1ETZ`NbCNu!t{j4_*1nVxb#X`2RD74WY> zvlkUR-ZmwN3dYk_*@b=s{r%T&_HA3QZY)bJ@^8pcxPSUY4_3%FrxVAI^IUlKO8U(k zP?C5h1pIq$vE&wy9h23~EmkpJSje045{kcj@19RFALV6@;C4F-Z|7!UwQvC(@BiuL z3EA#bAK}|bAR{4Yk-|NKMb2Y>_rKCS_mfIa>9F+)z)|2z`U z{_ih28jJs5hs*qN4++XOpjz{Biug^gS2*pp}=EJ z+E3UGTDF16m8dm`H{LupF=73pkDTt4xb$ir?x*=1ZG#*cP~nLQj;LgIw?^GL`sehh zZwRT=3q>E7RgCzIUXTroeY(nNkPRh#7O-n~%s70BV&_0{C{8S|IS^rSq`HsWur|Fqgmv7-s%kf7UhW&pXT$Csmc3M^ZHY5 zGE01?LFfDDZSg$dma_jL?ip=H#3v`Y!!n1S`dgiHP#wNnKP1K&6QQ0Ey%xTfV0jGn z%@UcAQN6vYF#CG1&?@`h?X{Di;tx*!dCbpfmK42Zn?o1fmKpVa5o#5kKOS{4{^#>l vqAzepc-?^xivK Date: Thu, 26 Jun 2025 08:12:06 +0800 Subject: [PATCH 4/4] Update best-practices/multi-column-index-best-practices.md --- best-practices/multi-column-index-best-practices.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/best-practices/multi-column-index-best-practices.md b/best-practices/multi-column-index-best-practices.md index 659eafcc5323..9b07ca8996a2 100644 --- a/best-practices/multi-column-index-best-practices.md +++ b/best-practices/multi-column-index-best-practices.md @@ -112,7 +112,7 @@ EXPLAIN FORMAT = "brief" 通过多列索引,TiDB 避免了不必要的行扫描,大幅提升查询性能。 -## 索引范围推导 +## 索引范围推导 (Index Range Derivation) TiDB 优化器内置了强大的范围推导组件。它会根据查询条件和相关索引列,生成高效的索引范围,并传递给表访问组件,决定最优的数据访问方式。