From fbbbcec8a642d320ecf8ca56491305fce31c929e Mon Sep 17 00:00:00 2001 From: Hung Pham Date: Fri, 21 Aug 2026 18:43:50 +0700 Subject: [PATCH 1/2] Update document and sponsors --- .github/FUNDING.yml | 1 + README.md | 150 ++++++++++++++++++--- assets/sponsor/MOMO.JPG | Bin 0 -> 222756 bytes docs/comparison.md | 237 +++++++++++++++++++++++++++++++++ docs/configuration.md | 181 +++++++++++++++++++++++++ docs/development.md | 277 +++++++++++++++++++++++++++++++++++++++ docs/semantic-search.md | 157 ++++++++++++++++++++++ docs/storage-backends.md | 248 +++++++++++++++++++++++++++++++++++ docs/why-rust.md | 132 +++++++++++++++++++ 9 files changed, 1368 insertions(+), 15 deletions(-) create mode 100644 .github/FUNDING.yml create mode 100644 assets/sponsor/MOMO.JPG create mode 100644 docs/comparison.md create mode 100644 docs/configuration.md create mode 100644 docs/development.md create mode 100644 docs/semantic-search.md create mode 100644 docs/storage-backends.md create mode 100644 docs/why-rust.md diff --git a/.github/FUNDING.yml b/.github/FUNDING.yml new file mode 100644 index 000000000..3cf025c12 --- /dev/null +++ b/.github/FUNDING.yml @@ -0,0 +1 @@ +ko-fi: hungpham55178 diff --git a/README.md b/README.md index 7f4e584ef..1bdc084fa 100644 --- a/README.md +++ b/README.md @@ -2,31 +2,151 @@ [![CI](https://github.com/hungpham10/codegraph-rs/actions/workflows/ci.yml/badge.svg)](https://github.com/hungpham10/codegraph-rs/actions/workflows/ci.yml) [![CodSpeed Badge](https://img.shields.io/endpoint?url=https://app.codspeed.io//badge.json)](https://app.codspeed.io//hungpham10/codegraph-rs?utm_source=badge) -[![codecov](https://codecov.io/gh/hungpham10/codegraph-rs/graph/badge.svg?token=PUSFMM0CM8)](https://codecov.io/gh/hungpham10/codegraph-rs) +[![codecov](https://codecov.io/gh/hungpham10/codegraph-rs/graph/badge.svg?token=PUSMFF0CM8)](https://codecov.io/gh/hungpham10/codegraph-rs) [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](LICENSE) -> Local-first code intelligence for AI agents. Built in Rust. +> **Local-first semantic code graph for AI agents** — tree-sitter parsing, global symbol IDs, call chains with control-flow markers, served over MCP. Single **~58 MB** static binary. -CodeGraph parses your codebase with tree‑sitter, builds a semantic graph where each symbol has a global ID and each function a call chain, and serves the graph to AI agents via the Model Context Protocol (MCP). +CodeGraph parses your codebase with tree-sitter, builds a **semantic graph** where every symbol gets a global ID and every function has a **call chain** (markers + callee IDs), stores everything under `.codegraph/` (SQLite by default), and exposes the graph to AI agents — Claude Code, Cursor, Codex CLI, opencode, Hermes, Antigravity — over the Model Context Protocol (MCP). -## Install +Agents that consult the semantic graph instead of grepping the filesystem make **fewer tool calls**, **explore faster**, and **stay within context**. -**Automatic (recommended)** - -- **Linux / macOS**: `curl -fsSL https://raw.githubusercontent.com/hungpham10/codegraph-rs/main/scripts/install.sh | sh` -- **Windows (PowerShell)**: `irm https://raw.githubusercontent.com/hungpham10/codegraph-rs/main/scripts/install.ps1 | iex` +## Why CodeGraph? -*See the full installation guide at* [docs/specs/08-installer.md](docs/specs/08-installer.md). +- **Fewer tool calls** — agents navigate call chains (`codegraph_flow`), not grep +- **Local & fast** — full re-index 139 files in ~190 ms, nothing leaves your machine +- **Works everywhere** — 14 languages, 6 storage backends, 24 MCP tools, one binary +- **Semantic, not syntactic** — symbols have global IDs; edges derived from call chains with markers (`LOOP`, `IF_TRUE`, `RETURN`, …) -## Quick start +## ⚡ Quick Start -```sh +```bash +# 1. Initialize and index your project +cd ~/code/my-project codegraph init + +# 2. Serve to your agent over MCP (stdio) codegraph serve --mcp + +# ... or over Streamable HTTP (for remote/Docker) +codegraph serve --mcp --http --addr 0.0.0.0:8123 +``` + +The agent binds the workspace with `codegraph_init {"path": ...}` and gets tools like `codegraph_search_symbol`, `codegraph_flow`, `codegraph_callers`, `codegraph_impact`, `codegraph_context` — all querying over MCP. + +## 📊 Comparison — Why Not X? + +| Tool | Type | Local-First | Semantic Graph | MCP Native | Multi-Storage | Binary Size | +|------|------|-------------|----------------|------------|---------------|-------------| +| **CodeGraph** | Code graph + MCP | ✅ | ✅ (tree-sitter semgraph) | ✅ Built-in | ✅ 6 backends | ~58 MB | +| Aider RepoMap | Repo map generator | ✅ | ❌ (ctags-based) | ❌ | ❌ | N/A | +| Sourcegraph Cody | Cloud code search | ❌ (self-host) | ✅ (CodeQL) | Via extension | ❌ | N/A | +| Bloop | Code indexer | ✅ | ❌ (search only) | ❌ | ❌ | ~30 MB | +| CodeQL | Semantic analysis | ✅/Cloud | ✅ (QL queries) | ❌ | ❌ | Heavy | +| Kythe | Code graph | ✅ | ✅ | ❌ | ❌ | Complex setup | +| LSP servers | Per-language IDE | ✅ | Per-lang only | ❌ | ❌ | Per-lang | +| ast-grep | Structural search | ✅ | ❌ (pattern match) | ❌ | ❌ | ~10 MB | +| context7 | Docs MCP | ❌ | N/A | ✅ | ❌ | N/A | + +→ [Full comparison with decision matrix](docs/comparison.md) + +## 🎯 Key Features + +- **24 MCP tools** — `search_symbol`, `flow`, `callers`, `callees`, `impact`, `search_flow`, `context`, `references`, `diff`, `sandbox`, `mermaid`, and more +- **14 languages** — TypeScript · TSX · JavaScript · Python · Go · Rust · Java · C · C++ · C# · Ruby · PHP · Scala · Swift · Lua +- **6 storage backends** — SQLite (default), LMDB, Redis, Postgres, MySQL, Memory +- **Semantic search** — opt-in fastembed (BGE-small) for hybrid KNN + keyword search +- **Behavior sandbox** — JIT compile function groups + run against Rhai mocks +- **Full re-index always** — watcher debounces changes, re-indexes completely (simpler, no stale state) + +## 📦 Install + +**Automatic (recommended)** + +```bash +# Linux / macOS +curl -fsSL https://raw.githubusercontent.com/hungpham10/codegraph-rs/main/scripts/install.sh | sh + +# Windows (PowerShell) +irm https://raw.githubusercontent.com/hungpham10/codegraph-rs/main/scripts/install.ps1 | iex ``` -## Documentation +**Other options**: [Homebrew](https://github.com/hungpham10/homebrew-codegraph) • [AUR](https://aur.archlinux.org/packages/codegraph-rs-bin) • [.deb/.rpm](https://github.com/hungpham10/codegraph-rs/releases/latest) • `cargo install --git https://github.com/hungpham10/codegraph-rs codegraph` + +[Full install guide →](docs/specs/08-installer.md) + +## 🔧 Configuration (Essentials) + +```toml +# .codegraph/config.toml +[storage] +type = "sqlite" # or lmdb, redis, postgres, mysql, memory + +[embedding] +# backend = "fastembed" # enable semantic/hybrid search +``` + +[Full config reference →](docs/configuration.md) | [Storage backends →](docs/storage-backends.md) | [Semantic search →](docs/semantic-search.md) + +## 🏗️ Architecture + +``` +files → tree-sitter (rayon) → semgraph (global IDs + chains) + → GraphIndex (2 engines + pluggable storage) + → MCP server (24 tools) → AI Agent +``` + +[Architecture deep-dive →](docs/architecture.md) + +## 📚 Documentation Map + +| Topic | File | +|-------|------| +| Architecture & Pipeline | `docs/architecture.md` | +| Extraction & Languages | `docs/specs/04-extraction.md` | +| Storage & GraphIndex | `docs/specs/03-db-layer.md` | +| MCP Server & Tools | `docs/specs/07-mcp-server.md` | +| CLI & Watcher | `docs/specs/09-cli-watcher.md` | +| Semgraph Model | `docs/specs/02-core-types.md` | +| Installer Details | `docs/specs/08-installer.md` | +| **Full Comparison** | `docs/comparison.md` | +| Configuration Reference | `docs/configuration.md` | +| Storage Backends | `docs/storage-backends.md` | +| Semantic Search | `docs/semantic-search.md` | +| Why Rust (Rewrite Story) | `docs/why-rust.md` | +| Development Guide | `docs/development.md` | + +## 🤝 Contributing + +```bash +cargo build --workspace +cargo test --workspace +cargo clippy --workspace --all-targets -- -D warnings +cargo fmt --all +``` + +See [Development Guide](docs/development.md) for feature flags, per-crate tests, and release process. + +## Sponsors + +You can buy me a coffee by sending me money by MOMO +

+ + MoMo Sponsor + +

+ +

+ Buy Me a Coffee at ko-fi.com +

+--- + +## License + +MIT. See [LICENSE](LICENSE). + +## Acknowledgments -- Architecture overview: [docs/architecture.md](docs/architecture.md) -- Detailed installation guide: [docs/specs/08-installer.md](docs/specs/08-installer.md) -- Full reference (configuration, CLI, MCP tools) – see the original README for comprehensive information. +- Original TypeScript implementation by [@colbymchenry](https://github.com/colbymchenry) +- `tree-sitter` and all language grammar authors +- `rusqlite`, `notify`, `clap`, `tokio`, `rayon`, `ignore`, `dashmap`, `parking_lot` diff --git a/assets/sponsor/MOMO.JPG b/assets/sponsor/MOMO.JPG new file mode 100644 index 0000000000000000000000000000000000000000..9b02c1de6516bfdf64de0ef61cd221c2bd08fc39 GIT binary patch literal 222756 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�SmyPzsT$3?17SnI-3-U2Mbjuqh!pLE=wZ*NBO-p0j4yo*+6_^Qz6>BYKr z!MzbqZX(uSn#-mvxL#TJc#L|tiZ(>AiuXoto}Qjs<)z!CL&Zg>mA7o#*rAsr@`mLV zD+YYjZtYrSt<6j|v!v#&W=mHWhVvOmD)tQ7tzZ;By!iMvA|rF=d8?VpyJb#?F#_3z zhX?{s`EO$*ai1~uHkcPFqr907fx+9MOM}amL?r7BQZ1%i|8dCtgk-o=B7w{N>!Y5N zD~;QGh2A89-~g-+mIPA-p*3bBcOW{L*_JXobM)}r=OzC4kp>l6Gv9a&tb-Fn-7k0A zjMv&By_TdBRGCFyjgtUH)as@%-BA!`Q~bE_@Rqg@QN&+6lbmPQUK#cA`aUPT5Y}En zkkt6e9{u2X!_$9uQh_ki@PDn90f~%$7?rQ;j2Q0bJCgH;SOjgNWVbESsL@h>a@^y+ z^v1nfL=CZb$Qt#)B{HTn{_Nt%-YMv@^TV<{>xv!Ke4^RHEH}*2^BG)VUxnFi9uYP_ zTrU5~p|(1sLta*gX^Gde`70(N+FsKXlf?OF$Aq``FT_InHtxsGi#K}(qY=&4h|n^H zGbl#BsGxMdBKF>_U`OJtajbK8?U&cBeEJW&8h=Q)KMXw^m|mtxDRXQt55p%s4s^a)_3c13<&WxuCon%nvBDVZ*Lg-&XqBure+!O zDug)H8{wLPY_6N-<99=qa%0ae0(6D1e|~dz>)T<>Q#suhq6L&4qK~dgM6)z=sh`BT zxCJjrgDle8bwce}+EK^l?2KXhU3|lp2`Y?l7V0Ce#XCL-2fGO_co^h1Qeu$pp0R>l z0}uy{_M+R7c*wRxJsKIOYE|g+#IMdVv(VKdVbZc$y65$cqv(-{MsYXOm@{>3hh4&( z$OE|VF_748F(ZOrj`oDG74#J2G+o}y>(_?)jGUU1(w9%(GO`c2&KAM*_!#4f3VO8Rrz zvAI2|b8qOF59ZTSwyhbR@F?&MY81Hf4<_mQKv!uG)R1q z9&wdyBcPKcfaCU41U=rf6rzo@LP^Ut*CE5DH_LqaVw7oWjt$I%Ue+~uZN?o0rMpbV zC$8Ie_;)5JR6e2vE*Wxz=XGAX%wjeWH~M}Kc&(27TPv`0|E#we`I~l79Gf%hZc|V0 znTkL&px%wZLO}$mF8V5-MzM2*1Xw065RVngwP3SO8As19bWprbDJhV8Ry%<#O?ASV<+M9ce#FN9{Ka3Fr~lM>Jc8Q+3CY#>o=rPqB>dDRlxB1z9utQ!E1j|3k5i)B>pf|4=X^ z7aRB=ie^9S_5Y)AHVL=}APcTPHCOV3hOD~&i`+^}|A*R2&+v!NO3(0TV)`SU{Fzw( zn#cm~HL^rVMb>KR$PZS=6O63?*Xa-aHSzC-JOWzmDf_ebTh5dkjKBu3jdMII6U{Br z*~dFB<7wKblD|hCYk!Azf%`~+mnw4LdnO-XE>GpHGQ;ghv)XLgTuM}MpQhBxMagOsP?NfnP@;#kC!uD#r zx50xkUDmEMZOUm3dbJPkkpo%M(M<&(A&slKKg| zFCXh?O)=2kTeGlz*mwh;02&(ks8b$R*!ekYqq{`qe;u% z8b+6$ZilFlm6W>$f9qtubr?ijjAt-!;6x7`SVbg?kM! zrnpK2;P~J7A|RF|cKkRDcM?R^;~@OKrET!js5aA8eo9v(sLdMr77$@;$iE^HO}t;M zk|_@gk2SAR`|!W1k^a3)n(9X^)#B-nMjoq9*^OVujyPq&NJC_d5DT5)=EKN$TRtcf z;5SNti;|+GTn~se{2QeI$dvvCq>zj@L>3~>J$NWXc~FM#x$C;b9Qzj@Lxfb^Ru{Q^k8dD1U{ z^qVLB0!Y7k(l3DYnrmh$w!7id!3+%>}+~uDEX%JT5OV8TsG{1XDo<~ z2=WJ8Vaj8wBn`O@^gntQq&p-TtUXOljedU|l2Cm5D&O;y*-r;A=iM?f>;T%BD2Mz% zoj=Ij!$-7%eT9`d3HP)T5+7Hp4*oHB>VL{j!NWvs67FLGM551qUtfk!e*w(($-ZE+ z`Tl_>9i6&QMed~t&Zk0@0^h$a&?L#Fl^&XpIyGg9hG7qep*&;w+nDGlg2EqTSMJn? zddl1IrH7ZvGJNk#_mn@s()nJ@wE5J@`4W>@+sTyF^+jkj5lI4Y?U4Xcg7hJqs%m~H z0Uhx5(DfU2H3?H!$G+|`o|TH{hZJ0G*Jg0Zt9v~(GNLw;`sts~!J`X_ zx@2nnn<<3QKT}QFi?%B~+q5VAHMbY|!vU0Ill_ua>8y^b_r`wO8N2owZ z0I2m9w}Hfi?0q#0tTAqSfgGcSgZK?shAPv)it&i!jc}^}m^Ly)JhKy#=cJ_}4wk(% z`{QQSs~Fz?qVtk^uEFjGtN(3tXsNulNr2>8G;rPO`>q%4!Bi! zbhr2^EvDGQ_Y6hCk<`eq2nOhcT}?{t{?1{eelL6RxW@BSwboU>DT~3F zV^QLmvd$*Ar#Gs{qgCFHd-YZ6pa!4g%$n4ui~GT;HO}y$pJ-<6KyC3|))eNzXxWW8-l0h(!YZGOaLm#a*f5uaM4@I`Wr!(h^>nM9dP~XHVhn zFy3>vi3>3P>9VbIKd%7(gnT`ENv4hP%i5gU94Cj)t{8T5I}Hx?KHp(OxPfAYvE9nrnA5R9<95X%(H5!bh~FeiEzi7NPT4Hn4Dc*Kj@IQ3sT&X~p-OAB zl1#IES8wz*JBk$d02I$9h2C^t#qwt;g&zXNM(TfyOW zyiyQ4jE#BdvC*jXa_CT5Dc28`7D~$w=OjI*cPkWY-BpQ7=PX_qy2xR9-|e%6BRmi> zAl62D$dx{b7WxN4{&;=U%H1JADE86)i~3@eouzc$*^AzKm5J=Pj3d2NOR$`TGF5j> zUJFzREz>HkDcNIw<C^%PJHzY?6S=xuP1MT42rUzVVpL< z9A8_v0}%OFmzz>9P2vh$xbI79`w!Sj%rL37r1NvC-BQ;$KID%y%y<*o5I^YMinzxz zVKaZw4&?Pu*T%(_XuY#ut%LZnN?3$ZclxP$po;@ zH2C@Ey%C6$s-}fi#O0AopE~86=pEz3BzYuv@ZDD>PG7!fjS!3So@3^lN8mZ+=Buu? zW^n{RUNB0Oy(XF&eHj~_y}-uKTbeC+Map|rEV+;&Gr;xzlPmzC5vqn4$9Uq;BC0MY zUMTT+U-GDyE2?nK{JW82_VpMMz=Nk9DVsw4{f`$SGVT-$V`0teVto(?6amz#&hsVC zc%WL>JSbp6$wG%8Xsn~jA{0VT&1N3>(WNABCu+fB(*@Jsgs3h+ek*5LH*P|G+P@<) zeAi9I&r@Pe^2zIf=$D7Gib~&+0unZ=6G?B2cM5Zk_DuuBy2y10wjg;R!no7L{*zy8 z-5g3LrpDX(%TF0l_Q>YNB+#0?3O+BF)i8C>KSO*&5|cO2-9`e0)@_Fqh3($v!0b!D z^|`e-wbZ8F z*HdWCKIs}j$5DXCmzp)8SnXWZa6cNni9EK#h0R5+G}7T50yqT4zmNb14XN{btzWV` z+tNjt>X#m7X=@f9UmbWj-(vo#B6fKIRLM*NwD$O+E~m~TqK}?7j4I6Teb2G+FKg^^ z5fZ#1+ftI^a5$+N)AWd5iLGC&r)?K>1?B>tAcw|?LW^(G&D(_%0mJ@zV7_O|@CWTxSoBG7V7YgR@FZyzN_;J-p zR+!Fl5VRk}Nu*hWGS%SRiggNgO0Pi<&gwgRD88{~eIuJ^&xgFhC&_MZ?3R=@dMrd7 zc!H=BZzdeox3fg;U3|6n>Kuaz@~HmJkdNM@$8^(=v@g|4%UN><=lf0_&7=-N^`NbY zYR|UWXgDvtsSz}CuW=wW-S?5OzU~?I2ZlT*b@JwOmlm!R8SI`j&scVm+pl@I*E#wD z?CqfTrL5W7Q0ifXtVHGYZu*m)O}9*Us3_I6&#~cJeUI&-{RpZ?wKz(=&(N7+c{N$I zR^Ug=rW0wsH+Sw_?a%#qs2gvgI+xSbE4G}pxu*Fft9@ez4s$3TvvEy(xa#c^z-!3# z@xy}zCBOp*;Se5HjV*~dE0r~xtgdRaTY2~7!V#8tI6$JVD|`lP$@j)DCCSideSt`D9pU3K4DJJow@Bt!~)}U ziOUyx_KF_vVicTcKU-muO+fZ_L3y0o9D>_F^qzWQ=_;3>pR7dby&q|!PIrqbqZ9j> z%miLfJ~GTo@%E<4Y^e3SC1rdyMkKbK;a#3c;uu9ob|0P+Qw8O3Ao))oTrlePQ0n!*>D}U=I;#y`^QUT4_G^)$c2>VKz;Yy3??5xp zv{;z&EE0%)l~6dvTR9&6IX6w2`Bs3mPgngLBaz6{0^r-6w{$p|;p8w)l!&=pAbU10 zrqCMiGK3mZm4rf(UT3YFsV3y&Yvy>8^d*3eg`o2y%wMS#RU`dVy@QT{pB^EZyDv@I ze6MJg2-CTB+RE|)s}40=Uu51GNEPM@pP-vh`T80y2T>Tx8;q^-1yu(m_f2^oD~>lb z1Qbtt{ZKUeyqsO+bW$uo$HQdZ^J$~x2;LWM-_&>sBl2y*bVR-@C_R;v>*7G&Qn)FF zHu&x(Ljn24DR!s#CJG=$n5XB2_&nn47jRSZEVHlf-pYQsXV&7+OS8+U$xdtf&^}=G z)_7Ay$vK5iWQ97_&t3)DR8EU){`+1<|Exo}+0X0&Z)1xedz`2oDN2LCf>(@gI$_%9 z{WgIv=-oEuA;m!c_M6iTR+BC58yMYw{K~UW5-Phh1#(?^){l!i#}B}pp5#b!a0Ycs z|EP9b`Z^nFCvcExs6~XB8T*}9_9YRfLW!2gSKjtc40t_HP%Xr=;ifTs3vtgH^vdu$ zL&8HB_BOTLQOjrCR zreCf`kjP_e4JElRJ>3r{3$%sYW3=UB)z)lOr?jlT>1n~=sRQfNNC1sN&-byb@7;6a zzw>k{(~48YzJ0f6(uYS8N)evd(6x8!ac<~jdIc6%D|P__;p?vSrsy_@GySO>h!)Gu zYdf#nADNCf*|2vW+JD}$O<6$V&XLDm(xYv>S1}wl6%mB%fI?S_4rd=5pYy5V`qJ4UEUSmWQuSx3I6#PHybEwS&vx{!+YM+^xd zjhF+CRL1|9Cw6?c%5wQ{UNu4`bDJEd?gBYRf$a_nutNJxEv^ZU6RX8%JV0Qn$^CEt zt0CdGZzKRKVW+OTy0Ip$6DyK6gW^>Zj=v_H$0S>kMK2t}VqG~7%7Tw)skpOX7YE40 zT&nwbWCgsv`6`0QgjLQkD7!nO>5^+ja1xYYAbAB!HgN z+um-wuV3^@fDec^nHP;Lgp55y#?~x_exExx_)2~RxlL=%%s5zldUDG?e)y@-qSyDF zOQ61LF?@!@K41KZ3{-BVD=DwmxVRe? z^zMGDjdzH&oLJ=a@fEewUD0R-o3tD4Z`H&5Hm$bc;h@^lh-zRI2~g$tl1S(8f*;K1 z3u4VnBK8dnobG6Mh;Csy(De*V4&X`k9x~QBf9!_80;)u`A*pfeUoQp6A~(!WS$*JP z49KNNwb6o>(lmS4EPsR=omEY|6}NAHz}RFfIjHK3V&-lOl=JvFDmB*-mhmbv`%&Sv zcZdqBYn<(cRk__kA_KVyBHrI-v4UWNXcn0hBc27qQ?sa3>vF9zOH#m$_Q0~KVd7*`DM9pAAqO!bhKxvz&xI%&2*zHlt} z>CcuPQE$aH%}&^u4Ix}*CdzN3L!T)r%e*LiUuJH$bV@*0F$-&F(2x^vlLy@@^lmLC z6xdt{BZsx3t|9>v;upZj)U6~y0i&i29Yzj2@@~KTi#PFVT^J##iv-B#rN)Ai%U{}^ zP&LGa?Ai@L&Z-i?*9V-26UNRveYOd>uM?>XJ8i{yu4&4`dFdG|WJ72v2uKd#ga*q@ zJX$wrBlmngqj&?KJ^LKw`5$gRr`0i1ruPZ&L z6?YL~ZZ~V!{r4A6>gCn(Zwq7ss(v^HSI8C!@Az$tp8fv9fKNjp0j>!kHhjjPN-fM4aB1FEQ z;(oXoykQ^R7g+#KP^|@>2DyL^LFvfjlPjPjv4MgtGrNW0_Px{QK~60owDIiWWoB<8 z!iNMPoU=AqXoWHDY~w^{@$qmD*ccQ{5UI^MjZ&vu3!2?bLUXDsruj$Vr7r1x0@OJqtxj7bY-pPf?qWvO>0uY0S%SX^KPp{%t z$7^AtN}npO>K;xv`j6IgWAjs+!%A~A9t1dTY|q_+VcQ6A6+q#QYEj7khwm*+hdGvV zB~D69nZi+LDCbCkE)fs!=(6rrt>K~`;R751z;KbywQ>@ag_yXoHqnmVZT#{jReEz1 zuaVm!l5p|*b=^&Uxl3OG6bWE}si1(}0{jyU-O$JY>%WRVATqmyaGO>e24?n!hx%Z_T3>{{D($uYg-3GL3wO=J?lW6$ zY2VOK1%`pphR8#u^PmluU=kpw)i@5wh`)BQR*L=hRGpge1?0qnvw^da04O!|m-5tk zAMgqS*D*RJ(kj5XeQsCslp)F4l9TkzG7fJUr*@ zJawh@UnGJc> zPATd1a8_bOM_5$eE*X;p1FL3Ti1; zDr`*fm>fkdHb+p58yB`mK{m++Zak+BQ5zmc0_-orNPxVvMNWy))4&2mB?zC6Y=#{J zTxO5XNW^KTpyvZTHwQ6_M9$g`%=?1UM)SP+$8~BoELZC2km?OrE10k%w;cT=9ycAr z(`V=i>4+M{-C0hEmfM|)=~moG8J}klRzMPRQq8M+%dQUv&M8`Xq@A?#8F+_WM>!%n z%GEc0G~5j58GKXzNPvjgtY{ylCDk5}=hDu4#B)!@K&CYQW3q#4{0cV5af{xw zXfyaej7hz2lsInO(H0C(Jy_l-BLTz~(CfsnHHf1>d=@_#_SOS>nOvQJuvK%it=@z7 zkO2Hdh7}M6gf7nws@~^A(CpH!jtmNlF&a64Ki-(uLg$t2hb{V^6Pc#P8X98Ahh#&I zz)_F@T9VB$oMI(8ba~a5`{q6Tcf1MVZCz6h~T9>02VM0?-G9 zDD&APn*hBGe?&|m@ICP&CK}GtNVx`8d`=t8-n{KcFD%rsKv9~P z|HWndd})gK8WP|s31Ho;lOA;}w&WO4Nc!)c3Ghz{=MO$C4CB-Wq{U&X(VbB?ZZ5@Ac^*vigF)Np4<&K12@qwNd$Fo1sfR zi>r)pQ?%EZo7?%$2|uqM6)xv+^;NnrT9CRQw_$dC+7(8tK!;1m$aTOt3@IWzd&PEX zvl2o?onAr8;XleKj#DGCc(+lU?(e ziZ*T=T?od-2P`ngoV8hffB!OOJioK?dKr&OcchV5*6ReNqI*LNJ>Js@)Nms|36LA+ zN4B>WGEv<(iy^+PhqFKw(FP!962KkI;?FR%TAtUZYDJUQ`(4=Ox*~-iC-qY!G+IPt}KC?-LjjD3h3#E`7a zm&`34G#`)q&EPI?l-|vNf1F89R&Pv*uo$BeOwwKZ){9=+u!l9>ge}JU+Yp<{-9~=p z!2MP{T6_v`>N6EV^vR&Vw@Sk6)#+_xY?_M{PxWj_ISW zr@@-+B0#*p;azvuk9>*n``hIEA#8HDbx*8`q%#E1%b&TIv(@QDb_4&&XNCVgK1-Iw z=TdB zCFhVFO`aM(GKXH?lyiBz=HR|K{7|NpLvJVkBICuIS<#S$OQW@cuLC|gxrS}&v~HjD zhqul$LG)2@8atTddR@}%593p*wiF!Q>gKy=X+{N$PZT?q%THO`z{z6~Zgpzt7?1`+ z2g9(FnLqntqT%2Khx4ZIwAS*IEVBqr$=vfoHAa?@Y`Fbp)uO=?n(ifB<%TCt3=x61 zn@5JuNDkp`N^RG{f~6l?MK`-sq;lN*Q_b=ng&<$&OmxgSYq_65&Kw(lPe#-h;77%~ zV%0n~pE%CZuv+uOAA0L$m?2^gfPKMMTfmdBrt6N8GUHK}dOVW)!G*UnQ{;JxrovmBjy_@qUP;OS(0kF>_}w^mh= ziX7amHrkd{Lows68Ypv%;(lx#UK#PtZVxmIo8z#m5CC&{x@U4x|4qm!Nd6OAvWE}9Fz+hms!Y)!E~X-GK(ffE(f-S$B((1KYDjP)OnB| zlifB}aPu=@?(uUKW^1(x1*Q4m^N@lK4^C};?K%5KExBwwHQ5Py8gkfGz19<^aq&rC zx(bU3ZTpI+0KL>yHITuutZ`)k#=hfCWUwc*+f$&(BXG0ZX+LZK8-v}M8YDnU z*IdO#;l{D+mU~j)3bH&d_@&6$kE@dT5DguU4h0TVwrJMH1K)!STqYg{x=D(@JJt3v zz{4_t@L;jFNGvL?ot;L|MsAU1ENm1$=Ra8Vn$?oMVnixBop_=n8-D}mf+`1s7oyTnC>-;6^3r_N;}VwG zn&9a?K{ZMl#lT~BuF$*h-}b;NyupTk>Nf}>8?9lR?s=B9Gtzm(_nD)e9I8q(g60eO zKY5aQE(l97_Z&BAqh@-UXed4w+(==H)Mv+E_UFc*8gNcW)ke=TF-4SIZw-3s<_jQ- zf|vAo?h?76d1itU_yfr8_zPqoQ@FAD1J-&cU%U(1U14(`Xsp3006qz8KZIA#RxRVx z+gr#3p*7% z_^Z;(Jh8?YbGT!{5B1XloI2(^?k)K&w_mQ#7Fb*xc~`D?1kA8Q>)WwfjpH>ig`tk| zrxr{G-M7v%U3EGZDX^3&XQ$N3MtYpOaxreknQ(=WkEg+~&x5~}%rfAmMrgz4Pi#r& zN3KluxYS%(WER@JYwne_0PvnkS7Z42I?s6vdIjQxvpcqgBB7^0V!*NLVz;MkTov#4 zp4;&4(X@(sGo#u1z_RTtJM~tt?n0JWd&(_Nq4!HT_&eYS$I5vbR${NRdgXku_PSZa z=Z41C)+wZFX@rUp&7xEbWj;k(ejtzIwEQ^MP_FdvBO3hr-alKh{@*(<^q)}Xe@~-5 zDpAYMX6YvTDj9q{k`Xo*0NP6?E0s91beL66CI@6`Hqo{Zw7yLy&jTrMV;;>m>rDFe zRvzxc4s{C&NV4y_QLLN=#3K&jIUw{+WCQ{o3SkD*j(1fWV+sZ)=J+pG)tq$;6>K?l z4$c^stLIeFobF}8vJldUg03*Cc}#hWC&TK*KAD_f_>o2a(GJTkUP)bWB5(PdvRdyv zgn)*f>nUND8yC0})W4DWjKl2sf!RR0Pb&_VGr{*=B&_#2xHi_Zp;fZ+GCf1xvV@M% zu2H*59?KGl%%kmPI9=^15w6X1GHi%fX_>9aFqzlr+@%MTRDht=1v9$i_rU=#0(?X} z%#nS^cK@KErYmD$l>2J4Sf0@HWG1yu)uenvI6+#Ae7j0E{g^D+hcL@~hLJrrSK}oJ z1;#0asJ;fLZBTSk9hrzNWLSMlcS(aiBV$PL`f9cMbtoPbB3~Xl z3y@Kz%VpV9V`)CP{BEr2RY9d^eAq$$!^)sUYr$C=DW#i-p(+@<`R=V!#^x8vPh0ExxQOJ614 zdz+O>lxYcLf!I4Z2`CjraG-(3XZ1pfu-aChh|{@I?}bMuZJH9LcMlk|D@Nx~ji=o7*vCiGS`ew6|cfI&J((`=ci9>y8(TZE`slW4@Pr95*hs5-}>7k^~m$jO3HN1DkAQ?ZK~^%8&b_VO1-nM-;X|oELny;z6$i==D+mB zJVE_2ArIl|$qyZwNRCJEHVN{7svfxiY1e%Zr+CNKc4||iTu7^pP2b&&nkk{%eE0ST}w;;T~#p3^Bb zc7`c~svR2|ISJLO*XI3ROkIdCaY+dknluQRVRT`5{yciK&Fd#YeNsA(1>x1eWWti` zOP2qii;&eKP77t?r+Psoni0D@(5M12_<-|tn_Jxrkjee@`u3N#?vlmp18g6zf9{>~ zE%3JXf2s6%?68)|P(lKnDGvkgZq>*B?IRqIM$*T?PlSoY@G%Gu@~#<{0B zhLQWrSCf0n-djDja!LcIZs{$bN>%p-ebroeNm<iC>R?e)A)$SGGVUZzG5WC*kz0H@adCNB^$3JgA zG3Qjch5X~9mVHETm3U#EV|Q>1oJ(10cf-TW!d}0}S{sIZRLOr83zllhIL(i`in_k# z)fhMk%GUR9P(#fo089nrObjCS2|YvPnBZ#qJvq!A;;am!O??cu_3fz zL5AP5{oSgY=vM7J8>3uZOWjGKXU~~9E#fccKYpikJ z6Z9@mqM~_VV<)f^O5SbKP-k%g(L*Ji1trm3=_jA(yVX3KkL*+kIp_J%@&tnfpd`sT z{i*C^%r(^p0}hc4@EGDH`Dgc}iBb^eexlG<)5eblr^OljFWlr+c>&z&e4n>!<~{V{ zb9O#d9o8fZTAZu4JLdKv%iM2A5>&gz+jl^ZAttC8#YHdF~a= zr>5n1!taD%T@?zEh`X0RoQm%y_RmuKBFB&C4Y!~B3LNl09RD;ZL;v-2)%_=lv8pY{ z6(_r8)o`U!@Om87@ z5t3nxQ$%uyIChFGqG&}rZBF;Rf6A>vcy}CwYwP6~kdK>(61Owz!mmoIJvRAva zv_gULW#vy=-?>yKM>tu&IrO_cc(+Jc`s3FJ4)I`DDaG$tn%>fb^mHlU!XdatRT=pf-xlvFA?o_yiJ$- ztGW(`e;_g$7&osgB`CajMdhAyatUh2SQ}zqz++r^9+?S$5BdkrygK}oGneB;b?`8V zKKYmY0(Exl^JDpe6CmS8DZC6C*#-ivAz1KMT*qoRR7E1`QaxpN`TG<5`#%eWcV?ZS zjnjN&5+@0IgN%eT;SJHx+XKs=s#?My z5>x~}X)`&EQ_-)ki*XEfqi5?6HH*&$6w#3lp^POj_B);$*N)Dc_uH_+6wkKXGMo~N z;T%Nfxr(ZOH@HQ~JFrkQ7j1u6_X0w8q3WT3;)^1qm17{;!G^r`SKD(?7e^c7t&4L* zZItE{re}edn8n()#9v)p^yyePTDESJbd8H?JO?qseK~#tF&a>nLB()Pj!$seNUL)> zMUIQy6{)LF2RvY+4bHhrVdlsF+2e8V<1kROx{uRPdz3a@}ZXf8XCACp%xdzs&+ zIvyb-|7NpM+p+!Od@1$}C(paQerNgr>cnY9dCx<45`cnOoe`(VjWz7--UX9GAOClT z1EYwI?~LJy6yRs=)Yc%QKJfGkh#4Y|vzhC;zOK%K_K3-`d+prVf3I-Tx@W0|@d7U1 z#zp9X6CGs;$JxvQl_N$5zz>MY9C-%Nk4|ZowmRmpaA~2$o>&3R5y?*j2Ane`vLBd3 zv~{kC80$v{<<5pR$e|GQt6nQmj)5}yJD1OPCyyBGxKmbUc3<~;X{@Ita?+4WPnxav zDpH+1cUcep4i`scr<&{GJ`O@2TVTVmzO@s?{>&Lq_|jpPW59I1(y}~T2j9#@N`o1C z0ks@kP@CRHOciknt-+Va}o)vee7+2&o z{9FrN9q+$U`hVDa52&cNY+bmJBsu4#0!kE-91BFUNDcymN)|~X8LG%hf@Fz>0+J=? zBw0an&J-XyR1pg(@NLiO``*2;eWy>K*ZsQh|DREg!6k z&Za?z!N#$SFSgD>nG)zQi71&eI<6Xl+C=Ycfl-Rth~2Drr&@xh)-;;Egx~y2<9b7b zwQ4Q6XGztsv3<23*X4V+C(?ooA=@-uMrCOt6hd5z8sEc9EJp0i>uuuw*#rbFdi^no z(vT14+IZ)(-XYcf8yS{UIV$()*M*s{Rr;$7i@FdPd|Xz(qwiVN^GO(wj&U(YW>$NS z=8%tMU7C70bI@Dh!;B5R#YZ?%aT=!sme*v%i>NyVb(U<4FO{W!5nzeTXM4NiJ>Hy( z#;{xdudG+1fJFF+J3T$_*8==WG-Vi}LCth%Q3UVTlMFn>hdB88>v*!>o9SlQS)YAZ zxCJ?~BMt((tgkC@TbNa6mi_fQF(vfoMwu?A%O62;+`)>24%rcH6Z8<6gDq!R=(C_D z`DfXAY*tu)>l`=kM7Sz?$y%{4m4MtSx^3)eBGDorP(eJsv^ZH-M3bS-n3NRUc5{Ad zE}#0aYV++Qces^@D|y9d6b859BSk!eir7t!wuJmQ4t4Hh=qf(J;hw=Y7 z!(TM`HHV22M^BITy5FL|csP#tQPJh+@1P3HCeLZWTD9-+TRPWXq|=Y#eFwe7kv~JK zbP-32)JyRJ^#IZg-go^L5hTGc1o;H9V|Je0Pm~eIWA8fYK7U}7qCghi7A=!mdX1R~ zJZ1;riM^(=oM-N5~tw8O1g{1IiMzl0?W~O&Jn$QMv-Rn*p&ghHG27X+i zX29I8p*muj?o%J8Q$#b{t9tw7TbR`wPBSwLdO7UIt7Y<(O2P#Lqw5KNK#KScUs1q3aiShCHr?O6Btp1G zW-e6Pk=2%t?Ce%kHKAC8HwFj z@8P7HXJ9n-m5+Ttlbm{^9Odx|Sy5>(gQME8 zD5D~Vu(%rR zoyY#pXJ8d_GLk9~frh=()`Fy&&|t*%Iw&T}N)@ruGt01N0JO}D2VxpTS=DD;GA~9x(pq6z%D^;VkrXhy)i(U8#D`_3uBBObn zEHN3BT*Bae_|@2}WM)x9z{bbcWdwm1LE`uXoSP|nNgr(vHpIu$#DgMxwi5|L#|^Sg z6&0}!yvSq(Gu8&&TFUme`=IU)xhS7po(ScRdrD?&!=iH(I`TXe+LoIAW|P))SHIR zvpP^C*hERJ&PhH#*;ksl@cY`mp| z?F2d~N8f1I$5v6Da4%UAt>*{G-BK<34ZY1y{`k2mn7bVNNC4iB;YA(rZfTQyon-f{8nQ{ zKbqAg%rCO7l0JTr$%iRPp|lbt!dZJDMKToa2d=<*htTglfp9jULW)pjw~Nfnsq0@0 z+z(cM7S{&?@cfmm1ej4U|X8jJyBv z?)+|#ehN?tpcbq^e(FY=mZUVN+THJo&JH9WxLd4m|A<>)r^SDPrqK)OW-wY+2*aFp zxBV1}<&bS^S{rqI)cbOEMocOFs=1WtXUn-DD+{q6`{VK(s6OQDZs=8^Ij{jUZY`3e z{ixb%%!Ns+qbBigFc>^lkr+g3@4D!m-djW1mZOO4W$pdwoDVX@EZKnYcc*~61p_s? z;>%lZA|fXzBa(W;^sg$2{C01O9WYa}Q$)D5lWOHKzA9)i(=+vT+hN$?WW zE#2Wm)nf6Jw%3f&lJ!L&A^kDe+Em!cE!eq;hthloE!WbvAV^`@yE6&I>kb&1xBlY# zQA^k*ojRT^#Q>)&R+=$Y^{qQePlwfViABZe+SaVIn#tqzW6O|yJ5P~&OC&+wbU=s} z1GU_iG*4GK8l41(k#39#R-Z5%hi)9`^yJOZg0Bs=%;BURwC-lEB2Me*zpsd(huiz8umV1 zEA)Pj@f$6R=5_j@J;WJBS&Bpzjs}Cl-76iU6M5Qg|9lF#cpIRZ! zjz5g^dV3(M!Qs=?C5uwfwv@C9`tekpQ{KIu={u}mdXd$}3j5ua+~kyL_SdL^%DY@6 zg9C0sh`%=#a;>8!)YG-_BkH_W%bn}Xns#=pGl%ULJC*$jewVNl!kuf5lij^_c{{nB z$|fq^5tl%o4WqXcq7SW^D&Uapz#fKHdi|LW&i zBmCq9!zhvZk-AlAIjp-Rl$j3!YX{0+P^@ik%{N9~eIDl{N4?gJ?!T zqCRo!(nubY2R^BL1`kQ+Ya1QyD!;mM5ui~+SxssHxp3( z+&_-HMhue1#l$5LLVjcI&k7!+N902_ZO@?a)iayuAgIX zL~hP#k~(5iKkL9NTN}yV{OD2swK_xcBJ@%mMbS3x5Wd%_hL~Bxo|wGs&Ic#+W@ngd zH2C8T4xN_On(GjYTsOhgEcF_-OxR66!$uw~`Jx06AssE`)Y$bfr5e+Ujy3!fiqEBO z42(MmOsZySnBgyW^QD#QfE2Vl7jLRy)7-5o(9XSSg6{fntHn$1v6sWsUDoe{$MF=_ zmGqNAa!50m$3 zlXo69_W4rO2CUv6s>hjj$fjTnL59WiCc#tO)32vc43EQL8St;~}^s?BrG} zG#bc8fk;`8JYOKGVil}Tg^XD_HtWundG8#sexZHAcsEhoAJd$aslVREOlUV_?P~bCeR4t4cNNH4@N7^iCSxAzJYRC{($I8 z%~Y-5#}FJMcMCqqGVpt3oHted;I_nKDQ8-hO~2N|+uaj~{h5-{Dj;+RYU7;6SP@?9 ztxU1mLg{UjXM3!$w0o(}pE(@(abJ${xYB zC80uLjjT(&YG~d(h4&LOb#Di3p7Ou!M+n3&-uXl@v&v({U6ro!A@k7Fm11dP`!ok_ zjg*e_TIM6&v}&vOW>bf6c|-{7SA@*Q_J5Wu1-;RqwBtUo=iwaI_H2@1Ve`hgcyqfu zh}TV?zhqroAGDPt%m%^x@qUz86@)=+w2id1Y8>HCIk`dteX`yT`akX?tP-*A}M%oO2v&r3; zVpvvhjYGblP#SVTYv->UGF1*sXIbPbU8hgu$s+B&cIqEYw|vdNoo>2^Mhhkt=gC5a z!aTk+azsLgR@^VDVhIsRF{x>2^X!Llck{SD6((wtwg^qY4j}EmMTo~%$QbjksNNN< zm@~w;f`~)e33XZgykkJ+D8J9!K#aUaAL( zLkcseQMuYkoM_3-GneX|Yw;V^o3;BlppCt?K%sgi_Ge2=mywX0Ns<-I(CrZmq<{{R zBuY}fa1+AjKcO1GKF@GBeq^yF3Wwm@eb%pTjyZBrYBy>vDuswmtyO!qh0g~qQv=63 z(5u#_BxoNSXaS0%BeC=vk~oPFwmuDue|&HDUPnRMsj@}Cz9>dNg3U@LGS*8vcYdj@ z(*dSq0VE-0N@-!5keV_#dS8o9M4_LZV>Qc}~ zfkU}&PyJw*0j#ZQa3r&6CBY0ssKZJ^hf?AI9XWqYty*DR?ctV=n@XR=HsroHK57eT z1lJgort`){Tnu!m&DJ-6knwT2*?ts+ep<9IDRc>i*^zPRfy-~JFUj+YDUo|&^eEq zjHtc>Kc&;1u=Q;p9AkbLwq#0fElq^DI0-|mdNHTw*f>^BQ1m#)bOn^uZG*nB`C_o) zW39wCfJLRTH_lFWRL>RF0f45bWz$T6C=iChKU*@Ge2e>PddJuC9v#zcgzq;E>d6k} zRyFYisjR6Nkn}NT-+!hb<)?+r|Jb^c-{topiEDH?*Ii#Ax&&{SVmCTvMc#TaUc8(# zW0JVeTX&ZmTR*hpN&pvaug6=gU{Nf%@wWsEx_v<(%{!G1l}@6{#W`{fuJpnRjBAoq ztcXs5JoH->SuRQojN;&X9o?!)?tX7V9k%2D75Xm38cv>V1W|)MKhN~8)0^7=VR1Hc zb{1}SZv|;?vb=?rL(v(E-Fs(ewLk{Zc)n4F56jZm3yA_L%>4oFVZkP|OMDkQ=0aPh zX~PYt*^ctOCvkFS^e~G_k_x$bm(wg2mo-a9UVPD}cp_8YG6>6= zh#8Xkc_SIOCm1I=uVXXUJnbWbPi0;VHwj;$cB5ZhyoFk;Q5*-O+(<&NPuZ2&oIe>W zivJGEuk9xGJ@}@AVJ=l?9Qz@#FKeFv{ zh0xN25q+@IDP&#`%h`g|^M&YZBc(?5+PX$ny&Sj6 zDfdV2)|q|M^ndAzpEcB!Fm)OSbyBe_q~ zLvofaG3j8TDUsn?_06F?dZZXvb_mV?e#+ggecWl|%s!pG)xiOOM`>9$NCW&uN=5ot-_)-x8`Lf4=ip?T$;OsjU-}2Qzs}Xbj@}N~j~aAOeS|=A8#G>c z55P&LjNp5|(tOXsw2c&boApAwMdl)&c8!BXx1Zj@9&H<>yOMOVcty6Vd6(u}j#-AF z8QsB+lP>isC_JefOzG|hv_+utKWGmjE3WKibnamJO7?(`Heqhyvu+)$bWn&^gyl%g zp{{`A-=L+HyvZ`P*ZRiW4R#!)Iwyk)Um7(Os*B|-yV}7`e9yzga;Jdg?5kC^==(0| zFU|)?QuX`&Bbt>NZI_gF)pZKt2H6@LZ1%$CKof{3jLb4X7T1JEG>I_{^EzfJX1Jbc2E9n5k)jtO}@D!POKUq|$wB z?D|~#tpK2+D;-O%XQ=sy9oap}WM}FF9@E@B%^SgHEerj_rv`04&eKs`-{`D@7FG5IM%yGhOkqpIQ^(STp(imd4|^4N?;hN?>C=<)8}6wuUTM?dCXg`@klCih z4$Rb}28Q`fauDFj6!HG@JsQ;Heg=kDT2pYJWb&|IDXqi~5F~DuF;Mwee=R=n5CSp= zU==K05ZxiLey&ghI{-rlADD+fIum~k7m^NM(fIMgkRcMwd z)~NzqKn!^Vc=djh|4ui0LL>wH8fv0L?4Y>~nWEcgpvR-2h9D4!)H-P;ep>)Ad42?d zIr#DV+v@9Qdh3s%RjeNtGah(R$aD?z*JZkrR$*c(-*k-Ow3G_Ms$=`u=l)7H1oU-@ ze`9o1j5XY#wj{{7zMiP`d|2%42~+Cm1g4B6x8(2WoyMH z8us=(2;cjwbe(kX*=g8?pVh@Fm>&q#P5Qj_Njf?p*(Lz*eL0Or@Uw_cJ}QdaQFZDKiX^0{`{W*DGjaFKjrhER^6ZL=gUk0!jCTzVEM%m+^wvq@O#TXw>=A~ zJdHGqFtwpQm{ET|WBIuGB6?Xby??vUf-l`dMdx%`6Ke<1hYD(3h{ zb+8cxjR1#zB0wZV-qcoJ7od+hCIc%6iPdhG=yGnBn-I{<~$hxaIul;OB{}ho*b1n;s}Js=@+ZzpF-!iq8rS7P;=YuC zl>g5w=BEkQf4{2*g9GD(F9V=7%#@cYsb#v7&55l!w$K340`pzygdETvGQ7ttvPga-%)A%wTgSDmP|FDu=R6}X= zZ`#D4s))bavm*Dy`=f{dzBd!fM?9q;vcIOQVU-)=nROfDQMzQx zooif)`ulOm-|sfTXv)JN0tpWC$5Vz*`^R8v^AvOyRk}g|=F(_7@D|XFa!}rRz`4B} zO6Cbo9@4XV`(G8`zvDX$ZGbZ+ngDjT@1yc^!9V;wcp4o1Rn zUATbHt`=F}%9Y+qG&<6B#v6<8W2@6_&8jasFDF4r{VM{4q%AWiO#Z-;R zFB{90zSqN-=9eA) zb>kc!7ZFR>X4X*G$mL`ZxXekuravnKK`Qa&o5-1qir&ThliU;6xLI7giA9NFJU1PN zMRXUBM1J-z6yKFERes?UEuYPph;1(XAy|LLtn6Ez7yB0xPN{I$0 z@uAH8DOZ_fLhwN@ziGsN7IpjkW0e>`kfA-lOjkxcwajX=l3%^XYk9r(=aFR7?xvTL zKnvrKxd79sVV741H5m1J1l=E7F8Q;%rD8W1?8xki8Xj_5vh>MA{4BN+9*!P6W z$h7i~Cf*&m1|S)ha09DEtL#`FHB{9_1nV6zz&;)Ix%I@e6%C!dO{>5T`>>(=A?5Hk zs&HwbBbsp&2Uuj|ySuAWAXgB{ld3!K9^!wYUEF_xL(CX&!`4Kij^aIkfR;rWeKb-O z&Jwze=*K!9;diRcP+5CN739ssrD&%P8*tahd^;4Up_xCFbs{H^lujr{J)7uE91a@U zwd?HPch~892uWLQR?v8ET;hz{Zzj)Syk9zOvhNCJ2U|zauy#tbjoSmAxi@zz=ji8B z1SGA<)uZqRp4e{OndHdMks8>DqFeM9W{!8FT|ZFUvJXY&qqUdmEJgbA=LObWzk~SC z&enuB_vLI^ii&Ph-F~Qa@%e0Gk!B}oSsiopxc*k81B?FP2aAa0s5M`TllY_VDv#O- zO3T#X2=quO>K0x^4%ej8zRu%%SVjHAe2e0Z>gnqAYbn#aLa`!@{zZ4WzfD(Efa43b z(&=M!H6LXuWPjqgLU$|tMjS=LUh*D@r(`M^K3CV%%?>KFAU z2nzO#5d2|GhA;swSE!r9TKRM3#{N^~hOq{w$%$nNmS#`9$<=Fd`|6qAAv84Fja_+_ zlH$@FDmhPC9emzZZ&y4V#+rhpia)&8a&2N-T}j|PfbJF{+c&0B(-lbIkM7Qr*Wo3^ z8<#|NgNN%c%$=PHXf(lyz?t9ek?8$cXV6Wh0`(3(IsIvl;IxJ>rt6VS04N&KFk2gnNvCIaC$XxLR(c zF}uQc5Sp5?z)g=B)$V!(3s%H?SVMO%#w%8G!hIRChTBSl{m5Gmm7e8prsGpxb9dDQ zvR}dm5!#)Av5T-lkg(-7zuwJfoW)v$7t7Tseni`Z3^RRnd$nbE?|#o)zi0gZsxE!r z0VUe0DQn20gRgD6m!(_M4%&!?<2OK2n>Qb-sn}gx{>5a6mbK2&{bWo)aK39)M{f}i6}|y>g4*^ zePG1|f2Syt8ZuoWU0ouI{>p**b^^M*J94qNCBp=C+yrUhet}h%?0|E;iOSW)yRb)v zX5w$hP`7o!7Q7(=P44dK&ZkLS`f*^Z#gAAS9{6u(bx!Xbp7@x?N;9GWl1pq#VvmMiR0*kH zbDuH}bxE6Kaf54~%z0iJBdF2<8-ok38H- zr`bL_w94&2;=ckejISoZj&HR+q{J8*{M%59A{=yjvZTMmuxJ`0Lh@mN zvw4&vfKpWAAvknm+QOSZvRht9HBoBnw9BQd&ecdnx!L1m%*KJ_jrQaDvN#R0O>ve4 z%ZDOe-(bwO*YMBk9GUD*UCUdtq;D{DXuLcr-JQ=nXZds~j`$AhAR^~=YoEAc%@WMg z5qUArTy^^KX_Ee@@mIEm07GL4XCI<29XqtGXRE|zrN5^!Yfg-W%6&i?kzQIi%20x# zsBOxgfh4Bk$S%+yYl@vqe)!&h^jo6@(n=nAyO21+jNvqn@roj51VBh|YMd2SdYW;Y zR$P!Rb#v#vg2u;OZi5k|TSp{A8;z|+9?spn!Jn8SJ!fS*YhPq!bLs}fCE41XBxn@` zhg=7W=9k+6YToZ4F4O`lY?AK`7qkN4f)OJsdkARWC4v1NBz+47 zee3gFD%xy#FG(9{Js{6jk?BaHK~fAE2rSuIzgNR;{6#`)Xf`A0Y@7CHxEMoS6QIWS z`QKqb)yCsnW92PtQ7P0%+6mmm?PbIK?cY44B;?Zi9rFZ$EJx;HIFT0W{8!mmJRalTHCm9Y(S6 z1-xP=hgQ1u_6B(5SXY5QE2e-r*IkYiq;a5jz>#gX02*|uxWR{}bi0&gCICRx1gu9K zQ9ic8&~&?GZ;oR$(3#yOYty^oTn!-HbVY_-Kx+1> z)}KNHC=MS2w~7I(b#H9|K94KVww{Y9-bVT~Rp_(Jhn^lo&8UN&CV6)%E-y)aa5DNN zWtC+Lt;=IHeRpE05c~=4KT^`Di0JLIaibT?D11NrG7A6Ax(Am2h!Fjo8U?6^Zf?le zJ5eMCY7ndS$PzTAE-PX!$ps$bW223cD1R>I?E>yR(+}OB=tEjV7{G)jCdiWW7B%Q+ z^a0W;tWg=M-8EryZM4FG2H|333u@c|@ zydI$hlZeYbL*_tTe#BakMaJrowrPFtp6a0~ zcnB6KqOUza+w1XiRoU{{Zg=dXx|=Qhb~Uch50o2SWE%eEiWQdw%!K3KHb~QZ<-?Q! zvB)fYM@c}SQok~r{yX0+u7suc5T9~i-w?5p&)Nf1 zqO}mvz(x$djwTg^bPyxAcpptan-RiGBovMv3r;k8CD@MSkl2X4L$HKF7jqW~ zw{KfiBlbe}fRP*#ps7)TP`bl( z1C)`{scxBcpG_;3tCeJ>1S%6*jGt9>I5yu*^T_|A+Iz`Z|7eU(LQN17*uF$`V@-~k zwW?0}aG7M9+FT+gYo@`GHLufKJC_}7Io`l>|3jTe+#q@nnTw`ufm?+fF{Ja!4LKY= z;+>1@!!U~|Ph)A6b2%=l&T5+s>pHrbg}PMi8|~kapXPtji5Nfw%MdoNeW{!mX0V{g}J$y~FAQfgZc_LF)@r#6SnjRa8Tpll#KG(Py zi-6wAe3{F5yO)BhpL||fa8B1fzwJXMKDtI?L-P&+>o7%einNvBKcAon2McbMkP0QBH?rWB$FILLDaP@Y*a!hyUZ6T=6i8HLii&v7_fouN zYrK1{(JEb)rYnvx7Nw!t?=x4pzS7rJmDRQtQfrIE$vo3z7D zQlZ7c)-EARn0OZ)NNl@UF8SeuRb()A%Fyol?UJ+2r&q-qSTco?JfzuNcSu2C{L9r` z?5iBNLu%Cwf133Cf5tnCW9466c={4)if_<8wILN{w!Y>A#8H`l)AjVzsP!KSko<7G zod^=zY{;4uJ;>JgB(tz86jZc@Ls5vh%X-)awk_VSy8+OImQVdaT>SHX+h4o6F=LVQ z0ZvQNxX&+{E1ejpgBm&_+OJXX+N!+NjE$3$Y$0Qm=1TYA&TD|ZHDSK+Z@#u+!d^CR zHC{~5Z5x;zuP}ApNOa2tU2#>k%Iu7SV(BK%M`oRbTdqYuPtWzxSCBN_s!UgAWSYYJ zDs$7*dU9&;?qNibT}&U8z73LZC?4pm1&6Mi9~5&T9a3gIj8}g!GGukKUr7N# zG4n>RfYv9RPoHbsbsC&kEav)EkpzDS5xs)qY{s#j zhbi@IXP0LIw7eYkX9bMxBG#!b}J=#X{v zSNDKOq(}T?eAQT(MZ=NwXG})@M2NwUb0`1D@1X9v-1CKTUvbYL)dM7Ks3}DILsZ2g zk!ssS0oML?FPp2YViWOC7fLi|^>GA<3x^%8W)ab3x}Pfy4K@L9Y3v?NJvcp@0cE5$ zSY_M9t?Ani&HX(1HSozdVj{>Rj#}k5qpS)S|^jRT%MebxlA&d1`hxk945(O;f_tLSPoP*iKSZAfdYB&TY~%dx;Mwp3oVB?7x$#y#N@}S!pikqm1phYyZt{hE@!t585hg$ls`oHwh#aEyW2 zemf^E-2*G8t?J?zty%%$6ZuFFd(BT2Uy-l2bS`EMR~oYudyd^2#?KF>U)EpbK%Wf?mq zTT<^X^olgoN9~YrTr!R9q*!LS$5Jb3W(b=}pO)nH%!@afTIo8Jp|_TZOZH}(SzlZQC;{zZAV~1m{|_X{epzSx30;W^IITU-tHJd&Q@; z#92vnEx+4Svsni`C+GZ^lhV|v3z}p0ZSHJT3Kq}tRF6tlp@KSC)08R2eC!Sc{TO~> z?}g%N6S|nlj*bIA-hI zV$ZY|qp#!*hMuhJdsA-5+hB@Dd6M>lu8*8YXXP+(=TJ+$C${J}4dfw7*5@QkGuT9Hg+dzYCpm7kP9U8h!FjJX$ ztV}NY{z)DcvA~E}e&0dQq_JFa@-a)W9(eC6VJzg39+=OeaU~@v`2J zA$)uLU6-R$Np26ayc0eK^s?^if{)>UOmS1(B55@ZK4zf-KT{__DR$9!q$p(Uu?_bZ z70l~ss|K>~-*G;3GR;^WK&K zD{|X|`R_ArE#ED0O0+V0Z^*jtRBns?kk8daWc%?sx4Y?aK(x`Aw~?EZgH3j$Q^CD^ zdsbNcO1C2PbJJI=?ij~pCoDKe^M2|kUs)^X{|SD%aGkf)l+W21RwJmN z5p>>g#WK4#o_zZSvMk=RnC+pNpMhnXNyK^KF)ot25XpD!iNy62dVLZsCH#ozeQm#q zXpRP&`tzyW6RXUUxFvd^2VanN@lo0Cx4SNP_CL%|Gy0rt&z+OH6F=H%bXf|>-^2)u z6M68F_GsxwR)MG&js zix?C2K6T?#A=D+h1|#y8uh-k!zLHM1sC^!(PQsgf7D;GJ$VpDf#evB@cDgm8y+xRA z*6xWLswXrdh;kTbji2?1BuGU0+dhB*R z-vL-flH@(g`PdU>Y&HIYw7w+Wv15NfrY-M+8(*O9Q!0JEjZo8d9c&9WP1whAZ94;e8kKulwG3t zx{>BYZ)-JrJpY-sN=un#du(t8&^9?&WodHCk%kso}|Xmr3XbPMp$t>4VI zcThyd94Wr#Q`wX*PK?b-E^iyYR$3X#@*_MB{{xwLe;~W&KL=Y6d*t0V?(tH=-W3Qc z+WaS!PWQi1y2?*cI%q?Ng~;3EqN0){*f4FL7ExTjMPDhYG}Gcj;YluW!9Cu-n4{^e zdLPo--biG0=R+B7@=MvBIhZI4=#@#cv@Qg+l?=?i@9#wo2EXZ0%9;_Snv<*+K6!NF z-a>TeBkWvCFK4X`+GUE+X!5jO%D^974*v?J>h)ej7!L;<7VlLsk_1=kfTuUB(b1YH zzH^ri2=7>NqZsnamsf?UAMltutnMUAf~Hn1>k1bc^#z#*(g(by^Mi7@P@K-}^| zWc5m~Z;{)MUCnY2{&Rb8auZpTPqfhLMC(IX6O-m?5~-s!_w9fZ z`GZ#1IZv21W=xEU=Ba4q&!F`cUobD&zQw<7ev>79nv#VL6^`auUk-A*Oa1PW(G_r;yy$C--r$fozvaw!S^YJ7CY-Bq9N#oEGW<VT`jIu zeeF)k=JctjKoo?%sK24+Rjqj1@bIC_X!h>Rg?exFWXPpzcO-Oc8bCBEvCZ7KzJomT z56}ZUrnKOdluw@R-$6=Ne%_L(8j{wQ2*Wj?L!cL8xQ`_<5c6a}aw1icvUD<8tq}I! zijnX3b@;3>u@EIsT*IMsG2jpjdITLT245VuESpRmZ$o2X5zr1I;DT(~Iqa0h0euY> z-yORIkvF=M(y^4&lTdyuU0=STe+-$ zguFz}T&lx>WRa2vhYOr$=^Avz@@Di_MCzqlx&uP}K+5?NAG|cDD1+jrj(M^}zImcd zS(HmB`$c=(_V|)MJLmPP580)s<$=>Xi_wEU)Js3of8ETdGwI+@&pp=X(vS_ya{R`iAap zbiWW|QMvF;yR1rd*4?6k>N>-3HbvbXTpt>_oH`(go=&jr5=qrVBWwfM0WZJpX}VbS z`NAwDX$~^Yf`eu$m_kb+Lu*SLgK4kF4`5#PuV2R8AS}Dl!UMwH3P<0+V2pk96Tk@-`3|Zv4O0w<+VGLF8Apl@ceCusyd&A< zJ|XmnReZX4;c`CESD}3H%;MX-bLcrQ%9W20XagMuBi}yY8FppaQT|fWBVd>@LZ@Y7 zHM{tkwuVtW47kbQ_Z-*s$dnh-6sL7;z-4m=!+bjcqY!Q)ala^% z^jLDh@D@YaARO)`A6|&A3r|ekyQ`a>;+?3a_(XBb8Ygm+pp4`uSway7VY1H7oOvDjc>lPIJM&% zZ7NoPc(~WJ*L$F9^4(S2t>rVvOnN3M;{5m$8_y@EHS>i+A`Mfg_jc@6S-_2MDGvobs|L*60pXa%{?%)01&;2~t`~KN9b2`uSdwh@Mb9|1^aePf_jL7uk zVZ*-VP)Nb{VV$7YTGq!vJx_GgiZ5);q+~^Qs5v2p(JNwIfpQ?Y_k5c-;`^Nvg_AW8 z)2zOBFx+G9BXYc$dKph?47`j2P@r zPRUN#Q}*(claRKx8FIRNC~DMU^j>|Yf5*@&yJ8^BuAz^PtEStVigbx7fax=^E|yR z?RlPrsc8*U;SE&(1dA@y#7+~KFFw!`dp;+kXGC_#(pxu z!|Kblqhr_j&6>|)@y0HeXFX8y{Gz0(VDFRUMAX9EYRLhQyea0T2vd$t8P_sO>Gs)Q6b@x**kC%3g_}g6GFTopM zuQv7+qgPcbug;_t&G~Mqe0AE>;JI0BPhMM!rs*?lSgaC%e?>UZnev2i!lsN!F3XQJ zq?b9m+jl8=`@23DGDt^0(jN8tI;k&{_f2kdUFCaz{HTOSt-CM2*J=FYCtjzAG2B@q zH$*PIpD_x)OB=wwYPhBpsQ-rXT?Y~^r#qqzFZCuC}#DAJWiFbr=9(NARP5KXzWbn)(AT45BT|3 zZ_7PlB-Qo6+CbCBJ@+SgGK0&Bp%s)B#Ic8$4%3~Q{`=zDUlj_!E_QQdN6q%%R=U_6 zbMU7+-ghi(cQ^;T1f=qNj`iOOr2bV>;=i=c{1-(@^%V8)$u>`xY=?sl>;nTj(^`gu z_mBkhPSZH8jF?Ntd9Oa`-fpK%YH<#ScwReN_FGYXs%z0ZC;b`J?zn9)0hIc7)>rPk z5~GE|l!#UQ!s%_<8E`(+yvt##m~s52@GD5(jFW~&SF0nhq@hlPyGUV=c7X$qw(IC*Pjh`1a$gJAHJ;`lqVt#HfRkRo!x9c*^LdaXk9vI60*qHD&BHqT+rN86}(9_>F^;X_{zde%RzfpX3xvW8CZeDY5&f_=T7amHy z-mb@lCB42r_WXSgPZnOzdydwO-Jk6(ND*u=+Fl=a4;t4uFd|XPRHm{#UkJtdYjMDQ zBz+5B23wO*6~5kY8*yVQCx0(pqEqD^4k?#?Pj0A*r5)~0W*@}Vw&$MBS48_}rgs`2 zAxONQop|kk7tdwDqc&jZsM&N7Rl=OYcU6VqXPQk~ssT4`nm& zKv&!xl#|~~6y_Bs&S8YRMl!`Ei_Y}P&2fJ#;gZa&50=rD{><6LT_zW?x|VS+?6h&( z0!Q|6B-#^iEA^}gyRVYZ%wBK*q3D62Y;eSTM8N%3{^+e3dd4)POS2p3Z~V%m_ETj= zIy1CIC5r?7d?ib_fFJ+or5fRlyG-p=+m#7a{K z_vFQ4vIRbGgR*5eOqK)z^m)$vt$GY~xRiEx2Qn$$foNEGqyb1fQ2Jz)B{BASxq^Kf z`PhY9?fs8y)*tOV>g zQXY!wx}zx?fCHW-8t9~2ojbS!ietMW2mYMb?poSb~ibTQy;9{|mkz+!$X^>cqx8ynUr%Tk+Z~meu?C)$bbbu3dYb z|6zO1p2)cz$ivL(5o&#QZmHl+>fBfPH2H6_jmeV_C=Y5%^xt+apT)12w}aEfKt+$_ z=|-0KSZ~&t^6c zAmo79SaWz#(O|&Gry4OoHVi*LP++?Y`QQJZr-A5W*LRpMxM-|=kfmNp!6g=yIbM%n zPitkfROmFJvPP|U8)A#B(?j=oTvvI`Sr-X^DOpmImD<3UZbz**Q{y^E1FNZ0qo{!E z^tI-E&xBOd6s`?sUXK=hptC+VgOQDx^sX+b>GGaWOuV@MP#jhGKE3Kr1OY?T^U@{A zXX8K2C}sIskXIQF_8y4TRc{}A&d*7`-^jzWVAa50b6~zJS!!qvGd2EX^GtF}S1i7b zip^;#Ekd9A7mmV#ontIpgr4YHkIze8U>bvi2V%pPR)0GvaoNb> zgX}49)2RD2kSll~6Gub{W4f=0#2hDPJz1_5a2jQ%+GJEtEv!eS6bBK+9FNuQsz~@P zh{J{XgAZDXlK5aUZG5X>@og4I1lc*AR);P`1$hfKk2V|V`rfGM^6oq;YdbFEbb71< zZ;^_PoZB$trt>XE~qHmnL8yDKJ*%p_=BL565G~j zIr@kLu&cdb0DtP~F%(afE&B4Sq)S#vqHX(a9=M1772mt?Z&dX918O1dkXME(@tJ#c z)|=YELtbNo$V4(T{%hr;S)%Fl!gRTXp*x;mtH$gt)zDE&!+zM@sRoPi=L1|J%GNe~ z{?TC+Q&)-mr)J`tyvBX#zH9T2Z)9I{@_KqjSpQXgl!>{WL*Q2uYo?8S%9?WO`ZS5R zQjq#qzR9qvQ}2X5|JnW5O_N`CjDN0ay&NlxJtbsi&XI|>b{>%QI#^@Yw)(!bpqpS8 z^(7u9u*%Ac&N^-T8>cXjuJO3YL}|>c$l-5Wh><1A0eF<5Aj{$ohEwupN8xW@T>TEN zNFJ}6kWppAS~)b<->27=!SREUan(rUkfr8Qdj*_kKKD`*C z6Q=ow6#ATp%Z__-FLa13&T4Op3~~!{@S?P)){Z2Z2fr;WZWtFI&KF*=C%Rh2jDZrs zfUe4wYcr-2Y%V*HL-gECvv*`cXvqOqbNoZChH^ZQrfJ~Fw+y(iX+4!3HOkeaY-TMy z=wx=W*F3t>_WH@w&cD53g|hgc#I}VC@`v1t0fN`tqq8dZ5}3zco7)$>zwj%PvBci0 zEh+yZ5rGO~QTn-_NJ<{)v%YOge}pvs5QB=bm9sO=Q2H?743iP~u%>k5l)Y7R{DD(< zhx1bx?!Q-82)N!+gy{Uf;5PaZZF_(5laBx~r_ij}LSf-rG^HoC)k~cRbzj)o5?O%0 zh3`YxS}~Iz#ny%gH?!-edM|g>qp=(BuFE|mo?3%gOHYqhS}U~9bibRv@o{l@+Cz~! z{a####rrQ*+xQ2cN2OyJ@2@p*ZhkFVQzU$fS>^`>j;rOx>91s8`&^yC2|~C-vwZD8PaYcBN|F4pcb@ zR2~-jIaBcci5)2I$uMOb15@bLFHmD?Vs+^Q+OF@@{B6!{!h}}&1bvC7)5n`m4ShOn zG$KCH6|T%~Y6*{^(tG%M+ZW~~vJ&eVPSyu~yK|4jn&%k)&7CW+-cNY-Q(bjJZ|I*a z{#vK^P`$H0%w622&x(-rD0FWZ`?q(@yvFU=C4rXJk7bEM$iCM89QT$V#psg+>g&oA zKis07qqtrR%$iv zK*V&4ZKlJqDU)aEtwNS9iio~LG@uhOlKr^0Ij7;#Y6|0%YUYK0r1qNgM>r(SytMDJ zV>@c72;JHc<}adZ#n^P^Q^ZdennYkcW?PMg+AIm5Hg>uns1MbaB}Dk*%m&uu!ai^jQVn!0eJ6#H?i z%%fpM^hVMrbJQmjEFX=-lI-U8+Ed#OZ2deLsHs7~`C9Ln^0OL}R+q`Mo@Za5!*>sH zHBWmV@oq=6WvZN@nD>-hqzDb3czx7o!;WAW+(4bbU0J}Q-TD4)>s&U^*QuC^SGh%) z^6cRZSF{D%8pVQfa~*jR_h`4>c%|zbvBxIp6BI4^6}SF}#*fjj$#a~Ho8{ER_O`A1 z^05^|9ILe@X!rbNuz}C|Td95{KVm%w4mLtpMoAR8z zfz~JJpZ-?ru6M)y6+g*?{~j!l93~4bw_RRbr$iDm6~%8KiOoGqI#e(dWzNCcoLkhzruE`Ca?tisPcd@*SO96`dB@|fH_0}KnO@D* znV?Pq>S6x+D(5v8(Wv!EbF9AFjXjmvgK=CgY?^tHM|v0zRb8$n>}}niUlbk{wJt%v zWINVL;?i))k~P`Z8n`l8*{#*0k4Rb+o3?TdcBu$W=+1nC>F>HiecO(;5*bL+Zeftc zD7x2xPAS%#8#MKGybd%o{qI--fE#xme%;aY!{W6*`*B<6x1n)%$VskxB}6dAi&VWu z$dp8F>l%yl*7u2aT;~ON&O1re<>ZGG5(2|tDEaBpItztswySjnFFAYuLmh>=pS&9# zn9sAGyab`MyqQd{t-ShF?2X;KTqoe3FZa)N4*$Bemh+d=nlb@`W4es?`mW++Qu0vayX4<4J$QWW3x$Q~ z{ET9Ndg1cnR)V?2FicUGQ7Q&EFuxMSVS0R zd>`Sok;PY6b%XIWqu+;KJH;F($w;H|u@cnXRzXP7hNHo;A^%KGK@gW{fewnnWON-$>IsM*sFhQLRYjq#3k^l5A zSEuyM)tBlg<~2NfPS7?BVL6iJt(Ca$6S~=9sNLRea2_ybKC6w|VV0~H$?x==h5MtZ zcTbP|ober~$ULPaA=34onh`*rLz=(3N8WtUZ0{XPuBhboRMT$Ga0Bg(-w@o}%2f!*+Ym>PoxOjdHe{g~yE24cN>XJj-}3Y~*A}>0A*01XCp_qgp85z6pYuT$ z55TPeb65I9+PuW32#(-!ciy($U4IjS((`r5OU`p@J^YN@b(-CH=r996ZrqUmuY1>b zF>CB*xM&7zt*_>(T1b{+YKOo^(Rq|g}`G2%FK%qQW>=0 zfzEc)wm6^+*SqtaHbw^5HJ}SOg5I&``^~j&;P%=5M}I+=nLc|d;0jR<$81b&4YYo# z6K9iOdgkfgm;1dQ23OjCH_@C>{e|B1KVIbz{`Kp<{x2(|{}+3f|M@cd&zENGbKU*v z58r5p_*8mqejS*`fhSz_Y%QJ4&4cldhpoFgK-Kh|UY74&@ym-Anq{jRs1D!aA7lCn zsZlXS&!cFdm&l*)+m?)5)&j`p^jnakgC%E)&{$atEA-d50aSl zqNQUr|y@_NxrbJN;^Jj01N`uWHBm1^|%IP4Fh z{-L{kFlZsbaN*L0MGo6d!`*+?rE&c22LJy%`2Oute(}ve$P@mBO#7eH{`;?aJO8?? zaIB#=5#M*9USTlYMbGH_k8qN}Y`C;lbcdIPc#6>N#@^ub2TdaA(~h`p;M6~YK{T(R z|80Z6U$|e*CHN;MD*bD^_kMqS|03)BC*S|&E_fXEa0j{u8Xwf;bsxH;Ys1r(>)cH* zt=%o)(*-ToO>7i|4o7a1C;i?9Y0Y*L2UIrQ2vhTR{*1>&^v!p z>%bobkKecYiu})f^TaHA8CeE8FAczSm$;O&3e>1pH~;ktu{1C|KquxlK&O5{0Oqxu z6{qh1&y4)}^Wa z1lL+itF2y4hY3UJ3qBS5v0alKiOLtA+J9AwdXXSP-vkpD@Ody5v1UNwy!I0x64!_O z@U*8}sWisypQw`T;XIE4L5&KgY3(un31=y1OV*`;^QC#syxXlGn27CpG zHjNv|hIBg+(vb?95~k7V@JRX?MT9@oPBxwupOhIt7PzeM1Hb;p3JEt;3@qvZsokk>#XxppVyZrtHQ>tSA0t! z{_p|iC0}ZZH$?lEc%qYXm}GsqJilx0%yGQG#C%HGW%>)GUFOn0uA1Ks5vJS9-rZ;f zXlE2-aWEolc|G)E@D)Ef6d!LU5nNGSAk=>3aQ^<)8CApra{CH}pBj7D#Zqf@Vy!up z|45`=7E4iP?D51QW9+?9zEW1DH5@Vq$nO8+JNH0+ZXFy36}GqKE}%%ueW#=(Zg5b~ zMIf=>!DSg&zfw^zqriHm4bk8A(|NJnWYgvMv0cU?Td*MAr~(Uf3&}_hyh5zc%bvY7 zJiT$b|GVf+EbChbSLsq_hP}+GhziJSXe6A+4&F}@c;_}&BcnWEQsT(hUGOD9!R{T8 z(UoP^Gl!trG|*f25(u%7gMsTX^|hy^^+--Kc)Z`usVFu)2yO2zq1IG+EshjTOZUrOQcj?-K4+6uLnH||BM}MU3Z}- zdp_{yqeyi-JIg0INK7_`@MLv1K1+L8Q7;?IYltYP+$PtJz&?1^HK|}UTlVpyHo5n{ zwvl_ypU{=PJ`%q7&6`g?UI;n5<>4AB@(J{O4(VaTN2wa;Jq}9#^<_D&>mC;-I#YuV z>80eh)G(ez3i+t4;~3q;)+%FDzt6fp%RCsN+_7KgoMy^zzQew%s5e|FqKR`~OV6l< z{Uho{W${Zs9ob0Hdme_n(f{ei{C+E;oIJV7%_Erb#9amCXyWLkMFs1Ywso*J!H&03 zB5yg|?=%i+{1;fTxdW{~rM~w*K>Mb|5IgD|Vp?+0M5(U5pv1w$w#-^4>7`#@sBe*h z937ZDNr!jZf%?Iq98x(JS$S|awj}PG$%A2;Yge0`63>f2pYjN`m6770Ti1Z@p*g&d zlP`~K_{d{}ycOegy_nRV8$1%cRM?VcY3QgiQF)t}5h4$M#uG2&`(;O^!sMhtv#~|j z?H*+|L5~4@o*Ev?a?uVE!Qb1i=>uxpdJHQ|qu~k=A)|d!r0l#HNOib=2ZdZb#$P3Ij-NVc zFBGqA*ZE!XJoEfXT;6!%E4nSj-x-_o>w$n=DUVPlP1;7^`awf7NGy;z->$v)aEQN? zcteK2L}7m#PxEgPYx4kzBk6D>$!&vHY6ooKZZQrFATrqIqjkW%o?<)DK74h~?$%M3 z0}Jft)c0rNug11K-!)fkA5qGD#ySpKZ6!Z$UHG&EoiAS6f#~m|H-$jl`X@h9o*Rvw zw*`abIEk++mB>jW4q;5^{H_u_K1ezqza*Ht_tTBngHa2?&^Rc+qc%??{qgIv)8MYn zI3d{C{C%o*vVE^oajJ-4N6V=gv%P|%N1Aw<6A?HZG8lON@!>o!DyNtMWfy)28ovXf zfA`6@RLuY_Vzh$(B1tQ7QDZVT)4b-1y;8s>iHhod$L?`6&_(!GL0iF49}YQLvQDKw z2f+ywGF*gx;eFIok;qwJL|8E0R+#U#e`I^8aooPAtrjDm0-4+$Nc;+TAqxS7C%2;J@oyHVbDZa(7@~ihSPJZ{A1v$1##JKj6!@8`cbE+(0?Q>`?I}i`vPKw1-DUW=H0LqRk zA+BkSZh3mURgCm_kM3I;59O;fxVVZ#*1^ADSe0UGa3vE(pZeVUlm@9`J+vSthB3ZNn?0Z!IO!m`MZ3-agPT>)EpvWp>_L&=OvPN!U&qqQ?X-8;P zn4*SS1AcPsDB`IK-}hN>6zNpzlXUxDd)Heb_ia67TX!ejO1Opy>-MqPZTk|*K}SV< zH`BO!K{NT`&))1LjpVC$2K1vGogdN5BoN#Zupi^`Iz#^mRB*g0n zAtns!4f>bHQ1evy{S21dQ(h`yvB+&auKjr2zRo@sy<%Bv|zC8$hFo@mOH35k`yh#j(*+)O%@hj_yF6ptfkg4l^rS7 zh~T!m%JQ}5$jEow2-SlyVGv!sL}eeuQ&@6=zleiqFLt1jM3~9bi}-LI)256diCyqQ zS{0O4JaN3`Hg02PBOd5-apucZ01kPcoV9K3-3-%HjCY{D26YC9t8fn9=dMxXbR9le zG``F=8Df?!k5;x-HblgM;&LPYrqq_G36{JE2GiQQKurEmpU`bugI8lhO~>1UQal() z=E;NeJVNqR5x{rK$Ci}^i%8y-u69hIKcIZ+>B|0-`&7EoOFwHgE>U={e_dyNuitV92Zyu-Ul`L%GveNe2)7v`)>y`*$Rfyjc+6n0Ln14&q1MAtKyJTcp6{9Ho#cz5+Le)9z@c#amc`TT0sM+8F=>X z_IOc9N3Ha3LM=OCSn=~r_8?hegf<2s+8KBx1+(l9<|pIlCc$>QK)@k+$Y-}jX>BM} zVaS390r5sQ_r2by@$Kv*3Nt^d8bOvl^2ekn^@0Ek8rz{K+^Q{!NL7Ltk{QS)>{OVp2 z`Xz(s*g`~=)HC;l;t&$L;gFX9($dlG^C$0c-5+ceJQM6}{9vEuS4}T998v{n*LtZD zAY0CH0~?FM5GGv#o6mvv1t4V8a@if|sR){!4lR14fY@eNrP!R2+e1Q5xEy@oPQ4nI4vZ|z%TYC(ZBJJqOpr90Rf|`wb6^cOWuwN}ns~><=aS5`_u%{#gT!)@d`9huasj9Vd+<)s;`( z7mWCrs4li^@7cXLq&dKLBVOhH5xg4DB#xT?~*LxE?Fh&bP2H}Zj=pAr!9x`NIl$sTz@tCYJdY!}1VErx? zKOzU9fu|%j6JSzj1~8pC{F$;b=}gU*eo@lQ!Gj7tu1e3OTOA)cIz{L)r`2-04e8`6 z`|XvZ10dn|c1F7o-@*2ejbZDt0|!9U7)Rv+w*yy6uFsS;+$H4}OfMEhPPQzvu^)A_ zQ8n&;5b@IesVWK>@h=SH8Ga-Z&*UvYIZnlT8W6zfjLO4!VrA;1(UADGtfIaAKTLfy z@3vh?A7M|42>7`f0?;F+sAWSM7u+Xh2$q=Ch9IOs-T;?W3DCsBXhAI!w%)uKbO9Z( zr*Y+$x2d!;Z~0eSGzbnm_^*qdhKjp|`TcxUz?1pC_Xeg;=Y4|qZ65&+zr9Ft*pMjtYLN!6<^jC*mK_SaAd6y zA`9{e55dK4RGW7fz2!+M%`3amuBj_~zDkv^Q8*Z)$*;kECF@|GN=1y+GwU60v7{v!lI4wxL4YqsNb;I<iLoWtez#9m<|&mWZ)ZiD9iP}AYuf!a^ir_W_y6(O)Vw{{?k9-t5F&_xYYcGLlQBp;^z%)|b({URvR1`GE=vKCl7Ocuui zlK=!Fcj`Jw`roRLI#UiB06AG3!fXW9e_$O)Y<*FFdemUQrv!-=n=)e_oiH@?ZOgNf z;~?>3zOG=XDPvl?Sj*1k-O#(`zF1QhgoK zt8}XT+p4GrX9`CK%>XlMO7$FoXL#l4wwgc|18`uZG>M*81EAN8OdDdhp%#9DK~(P7 zvvwxw)|+Ge-*wf7-T4^S^?35e!L|wdh=fnEiZcW;~WgHjXCTDrFqkgXW9L@Fh=b=MBm zmycd89`!+UgBm8X7fBWnrX;8o>_9i0r)aMRz`~bMI2&jedqD$IZZU|2$t(~ok1aq_ z-UL<;Z}Y6eRPkURbZH!PD^l=6$JZ)0I`P^ONGa0b4zz+GPY{iS?Z(Nzgb5qL{f{hE z)%eu-Z6H}1S5B4GmWT=;*gQq4I}k4psoAk+DSNGRq zcWyEH)a_3H9)^lkf}ujUn&eY){=W^b!PDD#||I#dv~b0do4krX3J%u9`D5v zf8#D)%;@Bm0PZTqJqcefMXHXk;aJ7=$aTahGyGHC4rS-0VXL8&7jRE67sr@!uU^r3 zS%A7OLSI>4Uf7u>+$Fzntf;6cEG5S5s^I4%tL?k#;0@E${;zFO2(%J9+W>@d2A&$J*i`$#2 z!a}j?zMIrlh^L<`iHQ~EKatca`R>K}vpivi8(tv%#W3u-cN*nA&b5?k&k5c<|E#JP1o{fRsYLt zW-YP%W2|`8>&+gV2_>m=R|=9Nh$~gSc{7!gB+clgp(gI=qm`9@1Dc_cN!4Fxbt2!{ za(@xX0|~`L8k5490m7}d0nZ{#^scy(UFY~7lbLhl5obqzv)nC&wCo;1Ryx3cq(jr? z3Iyaqx39AnsJ(Wv0~6o&O=@$76_!W_y;P8?%{({m8z~*7$`?x!!H3~j4a(KQ>c!(} z@~S*aQ`I@a{M?;3J)YVlRBP?d5mCXiPo0ZL{F!o%hXkLe%hb|EH6Aepr}FVf5Fbze zXdRvMlUzD};mFf#omSd{*VCStNCQ>zXXt_Uh#_LV2mu!6CU+J2DPiPX_-2T?JKU=S z#s0#w$7Ji^Jt{Ik+^{Ae3yJ)A=uQjHHl!`Ug?zL{hPetv3L z?pO?o8eQ}BMY;v z8@<=;BMlCz8Yc>VTy9EJX2I zix&s(CzdMCs2(6k)vK@(9ScnprFz9(&Ugeak40`xid}K7f1IK7b>HU}P-=KhSPH_k zP%OP&av0rmw0m-lnFE-_rX_9IK0tXFhT`o6Z;kN=L&LqEYB(}RFUpK0nd11)o*0e1 z|3t>3I;EwXL7Op6@Fjx*01e}-;URcNd8!TzN{#eBC~bJ?RA1IYk(mAah+KU(wkGM% z!jK{2tsw$I(%-iT2)N3go>Ou5g08bv)7ye1!!3FCUH~bWj zv?121+v0FznWqx)c@n8K9})UtkP$3^*BA{q&QWy05RZ5Rsz87b+6*2ELN9Bo9D(~D zqo_jW5D7_^6sCmY_rY_$px>lz0W`*W`v6A&1o-tuxN(+jORE|vp+%mBytm;h0Pe>d zE5ZNuhUL&=2HOzJE8E;~2zPb^(LLk5U{79f{v2TK{(+8;>MS0^}wy@#g7XsDvT>p>4`5}?`96#O_x z3`;%OMMvQ$N6|DTF4HPO*aAP3wxi$Hpgu*9w^Ra7ua6Nq3BChrJXMBr+n{dcgbre_ zauk0)+|O;J3D&eWz3mYP-L@q_SpI$FWXEZG;#(iI4KTLh<@+k~;89F4RLMddawgG71+zSwjSI%O&A5%@fqk@Qyz# zQMYEXD^m*8ZD%4dJJWUDE^+Yux5EQ+TOV>f5DL7_V^;n0F)K)(D7myB2Ng=-qT$-X z5Q`^5!Fm@tUCw>2`4aw8i@^u&g&v8FJ-7wWyQT~de=Y6^!(2Xd{Ce2aBUM#ZIOI2H zvV?qdMeBkzLAW^D<`Utsq0Y%0*afCV07OuB0EqPGkdH+-SClk_^PTl}0x3i!41#0%6Qns6&h@w}zZMQ{)TElj}(m?etV)3F0hEu*%{_%T(eTdw}7 z$s)S}w2zBow~GqFbX$QG_@_t`K)bdu2zG+=8z}LyH96b62H@#kK4;f`&@YC`Crl}c z_}ZMUO+fBGD4fa)KoVjaEMo_j zEZ9Iv%n5+!`7+=cfi}ca355fuU5p>aQr!T>GUHeQ!BXhFKuSVtHFEoq3zm8U(8qn? z$A75(`t=DqtJ%r3{q~|}@!}H4m_V1t>V73(Rt{+P4;|;v>;Fn?_-AY2{-1MqYsp%N zdGr0e>LAgyOa9#aUErnvxA?F-?`)r{GB3ZSjnb|_PcFgtVL;>^M>_;QqQ0*bf@mJXSQzNb7Q*}bD1HpYKnHF1Tap( z;;U4xL%r*uSKu>RIEEW0F2f;k)54GdQ^KT<;E~30$vhoZuz+=FAQR9Cbsv zCBBb?E)V40XbMNL7OJ?nZa=s0dJ~|KRte6kC_I*^^H^e=n|uv4Vl{)mt`!GSL3%WW zq%i@`^|&q}mFk;=Ud0(Az~k)(q2Og~J!WeH2Tz->(ouKkXLyYuy9^PaLQ6TQW`gb) zt*zgMC2OzJv{1{{vp(n;zeP2-&Bwa#H{ZDE}?A?J4m*=UDUR}5p$@%8DgvJkx+M0T)Y&0Ljy9lD^q> zvg7Cz+(X`=R7*}9!IQ^i{q{}+lTcg!_4SuLqLrXG0p&vfsN8j;oQ*cr15$(5CgJ^%RN#|!`H|$ieS1_ z``wgC0hW%&Hns)W-0-^m6020#+Cu>;cU;bDhngxp)Z-^i zj4V7B_?gxYERjW~D6gGsTent!8t)eodh%?3Wksjc+se*t!J;z%5-stIM(1y|Wt`ZJ zx@Si}1NV21n$|kB4j>8s3B$ofW+T|TL!#P;hxNZq_qGL?7?D9vuMBozcgiRidLBEW zimFYmUkbvqOH|6aZ4C_8xfdGNjj|ZCv2Q&xHvaSyf;=Gv#0YIJFD@?9CM^bM5+_G* zi!WcO8|qsVZ-_MbfMb2zFp8>Wk?fE_UnHISVDA78@*4hV<+W2H7+-?`4S({Hqr=tS zCD!EZ;nuXFlZ>~^q9# zt0V6OUBJ0>v6p>30Ia(U6O1V*feTRwIZu@rP=K%jIi)B*0JSP&2dI82z|xG0&@XS( z7^gK;Fh8Pd0umj#Q4Q1^=iOwAvMHH4G2EC)li2Fx_@V*yXZpKACkMbV4M64fB47yv6m;KU@zdbqlNwKlvvMMS7O)R7d!)?Qv@JRI-m^+7K zuCT8EAxmPx<@T;o)s2doc{LtA5^rDRp)3Bx77^79c{PGyQ{29q;JV&Id=a13ua;)6 zZJ!lKv97 zAkCbSzDscxWDvEqMw6Jhzy&Shi+bAbvf@&bRTyucPEvb&&N1f9te0xM`?Wx%^`RJ$ z9f`9wgwzn{Oizgvi|>OoT+15bk539Dr+kXGx$YCNd)MA^urDNFf;~kam>3=yM3sNT z4#cI38f*@)9u6?DacU*-@fK)4i@M>YEr?tfp~nNtEx-6h%U6yPKTgJo`Xsh1E{w@O zXZ@k8AdZ*N7>#!z;T)0}trBqMFAhP}pD11sxHoRHFPLfG2d}=iqhD9BAY%PJb=uL- zR~;mbal1907LwoK?%LW%Snzyq0fJuSKj2#BTyl1~q0UuU>Z%hL6H+a4M{gGw2Jk>P z{OI34{W7wmiuze)0Q=^@i7S`^!-I{YWN*#Y9b*!^;M=ud*`w{~kO-ZY4mb+^kBEm| zKEE9G_GioO|9}KPP8J(mYLE)pQlJQ6k={qhPivG+<2t>f^tvS-kE~$muuZ`lmd(CV zp>G(WIhc@xzJuQqw*n5UYGGps;sbS>Lo4eb8Gl)=U z4tk3YDEA^As8tc@xaAU&xyENSyEv45B#f{I&_x^`x-3&q&4zSnGK{G|tTn0Jg9BrTNSnFYmCNQL~gg_o33SwXON*g^*n&(TLlgT|VpvOb7A(8dy3prH;90wr6@36jjzsBOq2 zXU^u-A2T2BZe^`*WHC1KPSoDEy_xi!hdz4`q(Eark}zP3Rx2Y#ri^SmI%H8DIm`7i z?pkHE*V(9xc@1=GNBv*r8fimQJU}z;N;$w(`$K@5N|SNJR$&WYe0W4MQ0-XVC$%64 z{^rH4=9CI>jatcL0mQFCA}_R5M;Hda$@)E@TMwsjI1r|M!05OBYUdzS!A79mQb47+ zo_T%yBba5N?%i<6la0+hrVx!6df|mmmVJsmIOJF7zM3)9dQ=#yu+_Jc#}h-UFByaP zI>gF0z{zvwVf9I=LvJmbj%BX*vXU-vc3)+<>_<1d2l5{B?j0`RnkNw8{-{y(b5D6< zN%fY=ha2w}IyrH0lFFW<*9?m+VnZ6FEx2ps7ca5siK z(Be;sQN7fF*_0UG57Zsq_|Ez;Y z`gV-w#ez@e8n442=-bh6rcsN^PXn{u=iLQjzUOIz<*7lfj=S<~d=)8gwD**s7_Wc) z&Tdy)qcHRcha6lYA0M8l5`{;l=9Au&BYl)$vbbp-HW?sSb5kMX$#f}En=kUy+*gYR*yQPB@256oq@5F`G&0lI- zFXeI{=-tifBUD_VMCFu@PK(6Fx{8Rsnq?J0Lw(geUkkj!r z#y#L$wj>O#3ITG+236FTk}88u@kDyS2(HHh5Phi)u|YS6+T6c}-(~nsJN#ME$ zvcaAtaB?G{BBwzfT(GpyyAhM$-RoZ%5|4eR!WLuZc+~cB+q~K9;9c56;*oj~dOz% zz?BTaWTDhB_U)ASQL-x$Ow}URr_qk(`3%j(*%ZB*6!sg>=Q$c?VK2Imr|R=64%wVT zK8~a$4nM`uwVDE?zb}n`ixoWUbAT0MJOPTxy$f$$W`SUFG?=59;99k`eYntoDgnx- z`AZ>~Wu0={9q76x2=ChOz$&u)pz(ZYnz96bE)t$T=7WAIHGp1Ep{5j~!c~;pUC_Zl zL_1fvC9GyeBo@{(`rZc1KiKtFJjqz=Is?Gt_S8^ijT~~p`ZbVWNpZ}YDph8{$>vS> zU0uaml{;j1S!wge+&2R!{)(1Xuwr7{)(Hth0WI_2gteN!}lGq7Jy z;D2_?J<6GX2IR8>)R? zYyIXV*l|7RgXrB2iAUwThAQi3xRqEEzjfX*ANs!0t1o#KkvORtqe;(e^IIH5xket_wg=}y|3;H^ z%NRja^EsWBs!H5b5p}U6%Zg1*-SHsfhX-mmWuD-WAnf&H*UibNx9vR-5SJFjNT5vQ z<=l`cwT)R1`~KiJBZFK^U2BH@w^(x34sDOg(E$;kEva`DJ&zp##>~#>Se#h z9R~-|eS-@M@u682xlj5OaY*2etucXCKi@_OMWsjOe{uKb;ZXnm|LACl$eQeoqNFT^ zDBF;bB+_C_D#;d7S<;w6vW8F;WfY>2vS!KHM-)QV7&9u_XHwHJ%jZ0Oe&2JQ^ZnlU zxzF|eo!`0cbDck1u3_Hq*Xy}Fo{z`lsgC_D@sVOH78-IYT&O41Wr3{b9<}Geq2hbC zj|^jte{s#=s>Jd~tsnGE^roj~W3dSf-rTCh6e(@`LffjP<2Y`N|R<6UBS5HxPt3 zm*0fLC072-I+=?df?j-+dS+y9Rb77u>Q}&Sm+z@Nm0yMUJEqS9li>0t znlWy_SK%G!UkBds>~tA714lvM{vEJ^@d|l8-}mbNs=*7@8A){!w}67lfqpdV3ikb^ zFij(!G9l2aZT7+|^QxP3ZS6&|Tiz0mBX_UI*m)tBw<9+cK9z!!?>C&Bohb|H6u(>c zw4G(-M+J?a{V&(Q4ZPN*Q&F4Rv#-N33&C_~ZWQ}u$V>LqY;Kf|9-j@{U+3atah&qT zVsCB^%Z|4b3YDoGxAH&j!ZJRM#Ei>*}{imQ#Y;Ta*_{+?cZLehwukj!-->4@!)+!ND2O2@9 zo;`Jgi`^7TH+8e-UoDjj#q4YQq&+|4OLhJn`hYQHDYzHr5BVX4uDD&hli(fvsK2`UEX{g>o)d<7r8Fj)B{Lm3=9@w|~e(1Z#L9fBMq< zXcmCDa8J?nVhtsksz(j?7ld~7xSH7~U!bR}w>RY2?^VBhL1>?e42(-{+5n$UOpzSJ z4q0-xRAO9zflozGL0oB;OQNh{jR8cH3Ga|dZ@U+dGQnA>$|+R$s5nmy!}6D ztqRLvJlkgtq=aS+3h1%EUMT7*+*mecW9@}0I7+k2&wW>j?$=(p^Y4oZ<|8|5m^RPt zLjHb6{zG32&fig;y5ktB$Kva@SXvllv3-?Q30?gH2M#1pNbK)L@4hPx zI+m4vv`h{^o_RV{2{-}C80lv|GS|GvHrBtGr8h5JxGds4VI_Xy;VY}LJY}E|bO9+z zgk?_iB#zCrrAXAlN{N_nua>fOM4zUvEuL;dCPzh}OEeifhFK4ZtpQBvj%LS}BG6*E zsj|NiKSML!=o<#m_wRG9kQNr1ftc&;hlVOe3~h4IL_y<|7n9Xb_r9%44%V);65aM# zY~#oJEwUSXN-)``CH4QTPcvFuwnB6!|3qY~1?A#pNS~FE?g>QAByFwBBH6-_&#_po)J4IGf7;{>g!#yD^^ZstL7T378;g= z(6GE>7c|@|V`(r1rc>h1N!&;|(|2PO6my4#q7HXxmEN;75=3ATEQqC1g`Cgl^caMx zfQ`OkF^|`R39n|e!aJ>{PT!SuIMJ?nM&MrXn`U`vMXsbKwDssmK$E$bAda3YhHrMq zcn71VW$gIVLiOa7V$x`nOpC;Yt?ybpBGPJAeC}o;II$c=Xsu&f!0p0{)>0s{mqbR@5}kqEk3I~rfhEyTk@dVjK5}3*n)ILFF$=odt)b8oHsj>7_Sv$>ST#RM{ zGR6a(QIZVWqjZn+Cys=x^Z5AufVolU+v?4BXPER$YyeGl z<6V~~fHee(-Uw=^j7RW{7-&Wof~J{5sOcrbd$(+ICl9w3cdPyi3=v!!QQv-tHDbnN za1WXC7`T$S*M#P>jhJxu^9FTl1(DXR8(VB%WH`S$X-m4Fht6!QJ>P2Iy5|9j#JFL( z0Qbve(H68aTVPUmgX<0@g|Sn3;T^TL)w!mvOkiYAbl!MNCH_pgx8~&=F4+VS-vmOP z^o;y=Pd7mg5@Mk2Pa~BdFC??|?CS=8EA9VWY2Tlb`C9CD`5&+`XqVS;E@U<4XM{{G(m~k5UO!_eno58$-$}`;YPVDvHA|%EV&( zP!%bQ2xEDSUPF285zhOnhH<0(ljv;iuF{nQDpHVuuv(l?gesMG^jL~B*eoW5Nc@p> zmT$-y`aa1W!S^+M@m|EGnc7?d*!2^#=tm2oJ7l(P!Kl_&*93@_zMNn`n^5Vj)Otu? z=9OB3oz5n*q)NBN3R*q=DRt=qIVHj2Os0gh(Wiz8mvKwvCa2Ap(jvrk-%uh92c~!z zku(9iFKrMn!jZArEYnbZZKT4M|3l8P56P{*QQ8lOvk-sqNzf13Esv?tBN^9m)Ow2G z;@z>G1)ZEz*n5r(hS? z-PqluyfH?AnkLdQaF(8O2JxaC1C|jK+}3QPUwAR!HUB5UZ$?^@&)3x+$>(prCNy+F z36yE(SmPm0L!&7-(fPGNfsp6kHJN)eq&FP7;Cc4;;3a+p#}!Rp`U_F@hs|Bt%aUwf z7aMSaT}cSLjPPT}bKF#;Fvu3r2O4}S6K=#twa*QnW#x@|C10$9uAVrgnr4>Kl8or} zL2!tK^T5Z~(Y%ABZ>Rts+(kH8=qtSpRpCVysx>{GhHn){k{r#Sd8NA))OCA`zv9lI zb&Uqw+kPOHA~3E0_%mTVJoU(}Dy6+_EZdUyd-?AGX=tSTM80fvu^++H)#GM>=v}Mo z2(#mzvq3;3Sh%=ItLcDOOcXwc+8IXhvot=(~Lo)KVk5Lkp@S=I{cK+ zaInjjJTJ=6T*s~_B_FP@Jcj8NU`)->gan}OqRUf&{~;J^K>nDMdEKM<2ZiGvj_jhi zRa#4km&D&0yL}fxV3^@W`C~`WTL`|cO2kZ(nBNVix1qK%UcP2zduXJj^}%rF#0sax zT?*7ow%7r;azZO%tgIDODUI8|kX)R-^#rerzDd1!ZRzQ8O6RH+92ZO0K|CE!S#C`n zfvSPxXhX#QuYaT93uVM6b*3%@Nk%0Z2IcvLt&kYEEC_?@LoP*G+Uk|UyLmT=9Q|ft z0WPa74hHxsY1!le<|bzVD?aB6FZ~46h$Bnzwp~5Yn}Db9pU1Dc?ni{e-E<>Rt;<&T zrNof_K`q|{d*hk*5omt&)MNb5 zFt^Qw`JXc&(*2$*JfBX%wN7lI5L?-|U^(%mV`Z<%*t>#OlV%T5f_;7z*K}VW@3)Wy z+*Br^Vz~*w*%u|tLKV$l_azCdEg6~@7JU9->;EV0nBUC}UBzMR;2y zrHjYgwCXyaK8$?NZ+xGNIm*;z9UJCoVUSeMwqvIyzCy(tNgx)82^G)l9g zTjP|Pm+6<=j{#E#JoY?#l+=u>Tqb6Kl6!S&@z(G-O zB5HZ#vD@cN*$NHI<1zAUv&p&>zGHh{+TDf&t1eWR>p5XG;uVysh1$mwMwED zayH#zqFFZ>PhPPcXxO|`vy#x5Bj4UyyFBa{`E>YRQo^TwNFSkmh%MQFA*67=w()4{ z@m_gXPPZGkdWmL(3i(&^_es}tJ98G^&8?REhfeNS+&BGg)&!M_hMX@j9WdrgLBXDS zl&N>X%kZ>4>eVMI18-ifD1WTIujlMc7J?dvU;`-+FiavE3JTv_gt)z!qjiJo4lT0< zRb?YPj?~DuUQ;H$Lml|(AVmyAEW>0J{TkmQJc=fh?qE(+DJv&y>xZfw${)HNOUq3< zf0N5D^|{cg5Ex59vcnT9G9w8-sN@>7V54I1O}~QnJl8p{l6=Q+E9W!BPh^~t4cyjA z1Zu};P?!GW^%^reE`WO^#(nQ1bbq{!LppceP5((SXpb ziQUC%Mez|XlyUh$4HeL0@bUOcJ5)06*6)nfk6+6A`1Nh7pVZN~xDUF=+AhSxljLIO zz?&|Hd3n2LGIj$afFiGFmI6epD)+)Kl@k3W#eyHYW$*8_N1mr10jkT^|2~y*>#Xbl z!WAR`b_L_K<+?nUyN2clDEx98T3V-9e$*>t>`U;G>U5{~dx&&v$I>3xv&gr^w}D`0 zhi@fRzJkla{Tu*Sa)zPPGn?u8pNnNUZ^y3cs|$mB6D2cu1$W(4Q8{ohcXP@Xj9NY1 zX~IN1t)jVRmO3}y41@u`Ul}1k0xsp4*pMEViJBD0w@lsrdO1Qp)Xl+-p%iu2OF`!@ z>j*Bv-2XzjAv@YxP-Rya#g+L1@5AjbH5TrLT*8m6z@k(#X>6rKrZ@Tqj?XnT*hb;A zMwZi(y~ouB2QU6SXo$xMK<-OC%1+}*kFu;j|59x*6PzrNc&tA4=z@p0dzuOJp=ji{ zX)u;sEroMMpz5*3*w*0c1PLFgaghx8Tb?AyR&FuIYE+(@*6>3;ZerdJb=Qvn`J~l0 zY*%U875!eIUKv76YXF~bJQ=^$TVZ>K60~`CU!)+i}0#(DePPH7_DZKhgx% zh$|0iVlI!iPD$S32>LkZhkfpi<&4)YNsTF|FFK^VZdMYr_@pt=yWS)j(97U$Jq&fH zJ20v=Tb{TyOJ@C|jk=s;KNlz>AJWjf5L}*~TJy>a`5pfczrGwUo@JoIlF)L&NrY-$ zpiZJ=OiL~&+M)dQEbX_SzO?Vk$d*pU+mF9T9KJfwYSi?}_i4=-@St7*FXdi<;+`9H=%F*X;e)yTmV^Y1Ra`U%H5Sdm`P-D2G@aw+t zCelw*b7J)(%4ULwVhV5Vo;528{LIbA4JVQO*Q)dF3`{0?}q==`egC#-$HoCI&D$T2*yksfoGX8Ri^ib z^GQKyaGDX~Ne(66IoHC`zNK6~z6Imyw0+lx)UYky(p~8}<_N4mXB7XYx{4|9%aQ4; z!i$YFQX8!NjJk{(gb{HjbI~FTqdf~W6Vx*t)huOI3abe+lvjyB-J9s+t;aR{p}*b^ z-NJ!AgXK99Xh|IC=pBx+?>B1W6T+(FbqQPp{w2mAxr+ss-g=D~f9F1bWp=$FgBSD< zx27HK)yvpp8;w1{5~1N*e1&6&$4(RDOOjr?THO?n7o9A9TV!%%6>c#ty?IhTy`7`+ z$xvl8Wz5EBZS1|rc_(*0t&$6I@+K3H?RXc%2`tgfjz-aap&bG7&f#rg8sqf%D?85w zRkLSJjy>dF1h1yg4jcj3sU&%edmv5@l9p+^$#aLLxG(Wrk6|MN#zg9<6RvJn6`xOR z_Pxn}O#JZ!p{H-~9qTO5RRGhYV1)X9CNz)J@ar!GTVxk9gudPmd57ZZFBzw>s@}$W z6@7}5DMZD+eB;%&d!o9N1eXY zYO8!4b$z3h!nu9$R@Mt`s3+_i)WKNpQophAESBe8-_m}sR|PIFUQIvPvhdolP5c!1 z(x&8hKah*dV<*Y-GsKk0Mh%Afg(719m(YyQe*JT&w3N*~th7!aQCV^?MPQK_;CMzE zGrGwRt-=zRWA%)r3pn08I>jGPEcSPtx|z`<@$lK3Yh35wawqRX((0fuV}HEO;Y*x; zF_nCQW@fX&Trg!}^=)S_3(De5Rhq$ON#6i`ZCqIziddHPG{Ji940MOdkB%`ZR zAax|$Tzg-3#^u)iNOys4Dc(XQR?`P_g`prK|KV(e9?9(mZVH2DnS zQ+XU2b}4q3D@*GWOEQGKx~Nn8TRYHb@cK5#9WmRpPn*79iR^(f(;%)&Ws#>4+;MoT zP>FTVQ#5J=3eP$>`CWK$F<4J4E^>2IWX(Y+n(sUJF0#qX9(Dd2u(fxP?YQJhJy!l1qev^E$(5p7*@2zX55x#-c2x8=E0asfDT|IRl9$rms3Be!twp+02$ zKcY7OC$r^$X5|0xRkwml?wbooU<>q@81#ZGs3s2n*Z?sa8akd0j1cB_mL5$qs=*z+ z-kfTOg4~NNcSJ;Vyjc}BuWA@|Hz<#$^0gyw5?SJVfSGN(c;_VpWJb+dJM*3u-XRkb zE)?;Z-kYdYD=>VaJo`;7Cm;JTscu?pB3so)?Z) z5dD0mGI8AIoS^CRMlHU(f#y0MmiLp#LC|{R8hDF7%D0nZe((9H>wU2|Q#s?hj@tXT$jbZ5mypTNBG3T@PZVR1 zW((>z3TY@wEpwq_>%(#6C;A2l3u`1Ak0nQcOUKNO%)AxnVxC|cV*L8R378NqBiw-& z9639i6-=O)?Veor%)xuqX27oFEA!olkF+ZAEdwa+js1eA+N?8At5C#)jk`l_+t!TJ zFYJ8ceOd9H-iGsZW{uv`)1c-FBHZG8X!1WirnTGfLg?(I245!1%UGws!L!tR?L*Ga z+KL>Bfe&pK>S^ZZIadN7Kbe-|g?=!hkGBO~^Jk%evOG3J#zs!r^7_#AjfPT7o);+B zd_N&;QN3bTg~`9S^da{rq6zS$@3>adXl6T_Y8@b|xoAssJ5^4*e23dMPgY%|)BnR* zj4pcZsF_0h&z@zx;a#K&${WKEv91`ild%Gu<$+bwfF{ca*bW++sim45^;Q40BW~%k zzVawr>d*mRh+J z=9KP2Vf8PGm$HmXjyufs7KwAM1u?le-3sdLG-EMeoG`|{*l}Jm>v^qiQQC;~F<-fi zAu3P6ekFs*=$wsvLA5ZAr`q90%qYBzI0}w;K4&v+V`iQ?dE6k|JJU`(COF6Z>dCGI z(+J7Ol!*20XoS8%P{0!F@X4BhxqH|3hdz_#Bg@=;`0!)iaYsV7csS6 z$8hgAQdQV@2}}=g5s>0^<10eq2|g+DL~=;` zCa6=`PXy{Q;RN{KE$W`IYP8|>v$?R~1p12|?;h1^*VesFo(NvO_l(-V;o1ZcLiDH( zJ|#G`$D7Ab0V)b>?a6_ovU==F-kNTl<%gZs?@m z=bpOp9@6j(+77PuXl?Ax9gE zKs(|t^p3W+k;;3Um8gXFtS338m>`4fW&O_1i=+C7pW?#eMrDOU+Y#3w1`ro#Aw$wl zX%dm-Ug=QWsiDg>o|2kCqlnu+YPR3*OJ?wsmUexiJp^e$%q7`Lb4448X5!8e8n{C<&Pz-jo6 zV=HDwpi9>fKYNpnk%Pvn7-?E>tLsk69&6H8udJ9y+yhHL^U{7!P|k!u&Gu4Hk2tOm zp`lke9ygVQk~P#Oe{^We#OhLiy`I%gpQuxEUGj+1R^s{iR$B4=r9R$i0KKvLI98|& zZWv@UedY+4T;XQhF>TJK{WRRP9*l0JSazQb-JUu*GSW}v{FL&S`C%h-v^}b^Q~H{A z&!$}AASIL1uc4Rd`>?mQhZj8UjISEBge{OVlJuas?e$HCa736)x~X9 z4H^K*ojjVH`&9_6D$H_FzSw3$<;)$zB>;#1ki=N71?T4I4q@s&4_}YOeRyUy6J2V4MKgxdNcR4-tPNF~B%IR6L z$~d*{YP2Uv39OlW;0o_&$p?O=j^xU zZ?TYJivJ}|0+T%P`9T9#CT+|hrRx3b^c%{mHN$KtsNyGJxi#T}W};hpO&eM?w2;Cx zahIM|dN=r!fRo z0Z|w@*m6)ROdVXGHl#KJC}vx~u3KfSZS+O`p+sm0r7-sJF8rZMTGdk}5)0>E;3!f# zEgRG16w{_|`Z&_1Aul)Ap;)5x^!o!+|<0iyhWYDTeFS%y>%UwPc*2GS4wm zDBNi_daXlcA^L4v-?qH^1dslkC-8d98vWXiw1?%LVt&FfgEylZsfRppU_npK~O4r5M z-IuCUpIsDweu@GPl$wz!>gnFm6>?c~FK;OC*@53qn!n_AC;Nkw<({VPXx<$TEhCDa z!+7wNb&>IB8Xcb_lY9imUgrejBra5&Jkzm#7<}-g3F-yvHHdp$rfL?3nP?}BCapc= zsqu>d+^uUL{S|LG~so7nFI##Oo{8Si1(AH3L)F*Ry?)ceY=k9WqB zSjOvvqn>8F9A!i@jkLViaFL4P8mmDkzt-Dan+y||@Aw3<7DeosXpFWw*>+-2&2L-Zm=l{bs+yP`2B7&@p4UtY!O{G zDPJ@~_?4p_Zx48s+OFzkqrekynXOWnE8L0tM_mXBW+sMA$}lUfOd7B`$rFIrdGA6p z4g=AhXbZ;D0s(7Z@oRj!0ynr;@gM-=e?S!`^S0UG$c1sg*!DKIt;6=tXLa^n)>gKu zT!c|wcn#H>vK(t{fZ6xScsJwt!3+IWgQ-(a!&f5Al@5mpzm!3+#^DVna#~0dXrEpn zchPKH=j&x}xyl~9b@0w$wp8bUG?&5%6eK|66Y^s}NB`K7_ZNb+2DJZ=gi0ciMR0&K zn4pX}{RA-j24C=*R%Sq4qjCLf{PDWMZ37SdE=_W-eCpnwX0&gM9j`o75EDejFHAGd ze*A^lYUsOpW%i6jW}p7}t671wO`l%z4nhlAOQ5czNAoz5SwuD?SBOL|WNme!V;Olg z-d4Pjjv)F}ial*VyAki--x}9eqoHI^eElA}iR1rmZTG0L&XLBVnnaBWn>0_Q*w_O zeH*jGFu4tKT>yCW0nxYO864V=o*)7kKE=f%VN@ArG)d5%kg1X_6Y^CPVWIg?)HA%! z?>u1PTGK--M6yfPV2J>B2OPj)&Zx04b*Yd-5M>?A>OK0Yw4kB>@tn-{xZKFiX~u(f zmkmyBxx<~)`uBpGiQ}#2w8_ZgxofMs84g1$Hru!t4_|d8o2nrDE<@Q$VB9QRFaSlY zF^VNIhhxP9ox^Z|E)Vb+9;{M=&>Xl@&AsuY*KQ!y@TE8;8t-NqQMtjg5aU@)ns>ID zBaIx^sAOA^m;9cKe!P~Zn5Me5x^B;A@_jI*WAGARsYO?7rRgG_=t-cWb}12qyu9W~hUPa#bwCIFhl4X~~jcKfCf9y4c%TWn0nlA8F=W zr+2*jNVvbU@e=phcF}|U*rl-RCYxx*^c03V)4fH^+=Nkb7a09fmtVk3+u3BaX$*-NJLFQOiJB_9Keck#?Td-L|aMCNaL-cV@9`J zLzQbKx;<}k{e0R%CmD(sO3V3!5ka`62}+GKj{oV67bh%i3S@&Py*N7y5Ta>g5W$QL zLsXx=0po~{&Vpwi=L(Lj|AzyN3OK!A*_DQtw38j@wtvFPe!N~dmo=0Z))B$9izSxcxc?V~^%_8s_^O zP?ePftgX4W6HIx#fs6dL4x-v9u11o*WfOtw@f`Ql6@mFfE2Q6Gd}JEB&1SiE*a{M2 zHLBwBvpy+M#-=|e@8tg~d(#8Sozh?mJ?b#1Jcz8jXvx12^TX!Q*DU=&P7tQ5@jp!) zHbD`l$r-gZLE*u3)os;aczq^g4+Ob;Aa;Pi*1?WUa?^lrGMYj`MPLNa2ie?m9ylfu zT&x@@eQ8Csdig;rFXHD19t2Jo%L~sx96N#%Ztx}lg-~F$lE2mk-zL91G;BYp0Swws z#mb5YmvauKeyOPL{G82Ski3@*u#M$t9Q7n>1iNcUkMV@>5<--n{o=Pg?puEZOc(y~ z)vk)r%qOa!Qf%zkKC(JBG%lyfpz$sS z6!0|+(ACo7g1WdF`m{^nuR;%FPfdK{1%Q8wkIQpk74~xmrzP9b2_)b&W4-Y zR9ugLxsGyVAZl)3y&+Y93c2D7CZ0?Y>>!>8=aaITWyW|i<*j2Y?C9dNulL4qwKli+ z;*R8ff5wjY6Ldanm17yqz~DN@Xq0=B1qwli=HQr_C~kg(RF0fCLA}>x8EDce5IHaC zaW+@>a;!mv>`dbDyD&wa$J_nTZ6o$a9-N4!`#-kkQIGu<7XXZZVC!drx`cS@$ zB%m)>jBHhCtmGO5nGj6MJbOo%9bfku?`71Xg-CN(WwX6<`j@8Oi&eLb*2J7f?d{ma zI~Jka$j|9V^Ps)5!_O>F4ac8s3-n6jKd0q#c6`<5z;&ti4<|f>JD9Z{2Nz+7j|nOb zM|C2t>ab-w9o@og<##{<8zwunxW&22Vm$l+-63P|jm^YqOlLTjo^iaOcJJv;q18zp zDLY$rm=xWrX|o;Cqn9&IOntPa2)79%y7L)03-h$4*|L%yqDplg`S}h)Giptkmtl|{ z5B@JQ{QUowiN}f(TyB|l^JTBzczo5&U6$vRaBNlw;VH?yAWlTKI?B*_sS~i2FHb~5LXAe=5d=j zNY*9BN1>;I)M8ixlHlH-wZGn%Pv(NaF{uueyq@2ca6tqXl2Y?QLrse22=Fg7;|<-I zcHS!(txrLTe2Z6>ez!A~wR@7C@+|yIxOm0kQ>mu|#;m9G+IvTbt*FDTn)0*fc6`1- z<02@3ifrJ5v{9$uOM`h~@AwQl8D{DAP0&i@fXn@xC|8&$>>!jyKqu ziU~P=4d&0Q-41sTO8${TdU^js;b4&P9ewt@(sG@&PP+eAQ48xWBY=x(u7hL4geKc@ zJ^E?tpC&@A{>B=bwQ2caWv}3@M2+sxiI?v;Q%Bp8;JICp-;WU z&c*J*4u&YGF#@LK-P)YBz1A?>m%2s^;@(Sz&%X^hdl#5x%b?bfUFW2yGJw;C01Ci0 z^i(Q}2djpWp_a8}+a}~}B~UBJ3YH$zU*I-He|TfL_gchnen(Frg}K7XX@jZ-P1a-M z=16P1q1}DbgLTn%H&H`PvhSuK8yEZj z%Q0g^JS4S#-MvM5FLbzAO&EDLV6ff+v3N;C(dlJbmhMoctx%}v*@68=$2oJK^J*%~ z%j=STRA6cOhpdG*1rvey26y)bB60)WMNj zQq0o6pP_n6Uq6R@KT5a&;g&1>n01=ziv5toM-%*W$Iz9gdAL6)X+Ntz+aLO<2 zSXY>wh!+wMkLerx9`47h&|5&}u?G&1zuPD;Ct)U*K-~|3HVb|D=&n*?YzWXc>fRWYDb?t^<%a)Z1J0lOI}?NT1KgYu>^z1q^AJmvL44r~9ku|*_j%|uddoIL z>PSy{L!bnoe8dku5pB2(@1e!TtltPxxQ}X#VxSd6F#Gi!OkV799)BT3yc)&X`Noo= z__oY9-mp)N;HFnzaS^i++4o8{9;dm}fdDW>V(DqFE04^tw~`n#_o1%7#_2@= zaxgRk*4PUZRJZ)_f+^G0Hb{rc+CdW_Dpl+eP-(WmCJgCxn0I0J=^RIzv31H#c%Gi- z=;Mq{_XT-SarKe>!>xOS+U$6>DJf$sba$#loMyuwN^gAF&h+Bhv`RhQ8p)$+t=r|a z>T;qLo<$gCH|OY3@oi|qQATUiS}AP&@Y$9%`SWwzy)My&eP`sac3Fb^<;olQ%5bUE zdLdbJnxF!owYKA}!8Hp(2XK~A18x`kdYs4*6BPVMF^(=~2SZQr39(&s>nxP5b{DG` z!}rD=?b13l1Moi93G%>UtRh1NfUB*A;4||ms5l`0oLc3uUyxPhN743)e#hp3K=Jf) z&Fwlj^X$VN!`4T%uTxrt6Hw)U7G?7==fRssJDkdFb`C1|B`MQbCR$yQ;8G;B>qNdk zSID+gAv+_`Cvm>ZV**o!i_pw7NK=2BZDqW3bZ9m4eotd<`gPt9-RiDYs!i~8%sb~; z;`Jf?KDZqCvF}6AK^jYJL08ta3X6y0$;q|Py=5HYD#x?yUo1**kC7@o6B2B+)#N=i zU0(lF1XIh;j4EX#qbRh5eom;_89A4jMpvxLS&GrsClQ(l|bC3 zFD1P?fBl;sGI}tkv{qXv>{FG&)#olQ6Gw+8ZwNijym9SFiJmI=rE7d} zBUhotj4BVUXlc}D7jJws#lGC_`kK=`FwHc-(-va4?2vtJIsQ?|=DX`uQMA?%#P~8%Bo?yQV+Iyy{8*?USKOOTyYPBtx{L$fJ@RISojGB&`#e9a|;l|;zH0?d6 z7yQ%*pY2zaR28e>;f^@IFKrj{9b|(r1{0Rc48U@ko$$x$Q(TLvirA*Iq%ns@9_sMP zL5>0=p{HlKE$di?jc$5~T%bi}U`9xA9M5T_ayr=DudOnk1_a)u&a@3xr|Jw?7oL5& zUG?(ieUA|vtyF*m9bbzE@F!(&NB>7EsjVnZKwCE@41r9u+IN))adS^z+oD{;iN1SH zcSS7i%n@NvQkqhd)}B0QEO^c`q-~uj_~NajZI(Z2CHJNisgzf8N$a&@ln~!nJDxHI zDEDhhJC*ldn4P4^MIkp527u_4yBv1X-e z&!fB*zgO}*Y-n|LOD7(jZ;gV=EiN>m9VCY%q9-XRe|$mPJgko4s1(Yvz4?b)B=~U$QReE zKuyV(#SKfTP}VhdPM)}Oz(z$j75V%Q?rq*j^2*fi?v zh&kPpW1Eh;Up3RxSge)q2u#hX4ey~B7Txu+D;~!+>)8nV#u`#P9 zG*9g8*_Vg!eDyH@(t2HlR~ben(|N$W)}zQDCz?jMAI;DdMTwBz2vN9CwjWNuH{P}P)vp@{~)|+fTf@$kZ5ozAeJ&5n)Sa|6drZ5 z|K4p=TN|11SVTEl*WPq$ie@6~M(uS&;eKR=X2W9~Ca`=W&^KU1z}THw=sOyX`Wtn> zv{TpqocgSOx$<_KM%}R*QDq({igksoe(_Z&Qv@ipp=l(& z4Qf3wPmu39yj}t`k zx;uks;*}DMdOmwUGCeSZd<>6p-#BK|S!lX(YU;BsJmcAY@T+a58 zxi0UKyQVFYD|YpO9CQ&l>Iu}UR&N4!DLEwBmooF)PhChFO)UsOja)DhPy?AwS|*H$DO~Q84O)CjT)a-@zfix1B8+a?4yx_<-L+p`-)mueRc2U z;wGeBt+*B1pw2VL`QfA7q@fxbE2dnocp56;Hh4wjcX92ux7Gbi-(yZ`$!Y0ZoQ7pU zFveZLHsi&N6)^kQ_YHZcaPh{w`WsXzMp^<7>Ie4wj;Lw+jV={{Z_F3{Bhkehx$a*Q z34{641RVA^v(AM?&4e6*Ar8OOM;h|@K;=#KC4Y>OtWRIF_VEu&Y1XFO^Bx@JZPzpnhkv1bDxc5RxH0Pb}=ZYmYc-?%GOg^vGR zg_90NJM~?0Yx&bx+RniT`ff^nRnlql^Vy4w;`g+H)(eBnL^xL#RN{Jfj|xpZOwCCT zDfQ7J&0fhEva`Bwu-kRpMWr~fuv4Cn1eOVkYTFwH#Fd8q%!?SEVMEI)n_EW*{51WY zeT&~|%<(C0>qvcjy zMG~#8r&hk4OPtG>Bbp+H>)Q$aKNpZG_z_QUKKF4BG%Z?R%+*8MFRkbPN{{QY9S_V= z;I>B{aC7p8>9s_K5xXt;6JGEfqW`UV@0j1)Zs5(Y!CX8V-|F^Dq7wKSH1J9|1?!_M z$+P*6Pd}@>eu;Ql@l-h{0x|Iec>&m{ONUc>U>eN^P7IKp{Pvt2#JE#mR5A~~igNUc zynCV|^3nN@;M)m^LWq2)&rp{W8+Th#c=Rv!x);QK?E8s)kTJb2WU)sZ4Byv8Du#5P zSeQxRZ}AKieL17LwNoKq6{ZK@VXE|>%tF3tMHoK^vj5iwjs##z{-iaqnJrXKZI!j& z!+n_N(ZeZ-QR#jBi014zj?7OyXXg<9#$Sl;P&RrpSD0cpjf?%w#3w1BYpVzRJrdkR zd|oBrtKYN7wbPV)vxuc)A8%r}`0Jy6JxOwLSG!s_^DUS{zd0(oAWIS4I1Cm`?g7_d zxR~$uE|FHabcVM#y+{S{EncX|N^~X1W)>q~y8X!b=_65^@13xt#!T%}iKo)F4O#~9 zqR$Zp8!*Gqi$P_4)=m5sls9fJf}z;D=avJpNBit(SC>noSaN_}C_ zT?r(Go?ctRpljai>WpuLmr9QGn9Qb$!>NN#GRl1PoEN$(+s*f$RiO*61zl8_eJw`( z%el>hy^-n3_qo>KtnpY6->@c)q!Z5!h244AR%)CYoqX!@fx*)EP24#!-7!MFR;D_0 zMo9dxG%h(_v^gsgvhB3x0~O`9A7CMeRqNpb?GvhvBnL zm;|=?AQwx~7ynac5Is+EV{h);=n5DI`zo$kmGJcgMiUy`tXNJ8#J4RWr9XzmRwak& z^qJT`~Omf@4cz!Z5{h= zqpHhT+rZJaD;G|PS8Sm_3|lu2`qoOf>ibgB6R|$^|tbXO8k<#Zrxsw0~OI%L7a}Q#x;xKzTU-{fP?1(dhJ*x z7nIvnm+EI7PmCaTz@ z2YP)bv}T*oF@zuL5VLUbQGYM){jU)U*J4X9TN7}`kr=>1e2GXyiF!$j<%{?Pm%rb} z|FS|!drKce$SPOxe?m0zpnu)#(h4*a{fbY#MGS*-Qz=pAxxD`Z6hPQ*{0;@ZI$;Vu zRFV3f!g*iol;i!^zt^XN6%T;S|Lqp)-^U}+IROj}H0v&o4>v#H3}e{;jlDO4hPvOJd52DG41?&)hK- zTLD5#J>b(B_Q+reOsdKExmeGEqcdKp%t|MM*QU@g2#29KRe(Zce`{kvUSf|Yan)E0 zg$VmX=)$hxe?pxYH-Tj(iQtKJHSk9^+HK3%a(i{tll9iR0i`Kqg922w&A# zR&=SzDkJqTT4E~P4a6QzJ?8WK09pW8fL{O#&4NWuZKUA>fOS9c>^M4l^&lnOZ~@+Q z8`7@EfXV*F#~8M|EgAK?!hR4F~Ah9r$fGw1w@)D!mtb-WzSb1tbGT`@Oa?y+^XULrq`m=`?Mq zc^D~jNx+InL|_job~(UT=KRu#=uNRNswm`I-4;gJ#7-(b<>O@DzI&crN<&Ru?=XYV zLk7|DwA}cBF2cBk=BTy_q^uPJb^U(1%DBEWIpZhVD8afO3iHv1T^87E1t zBQbZf)cOM#6uM6JscW87O8fF3AIzK|`aq|ek}OKE4{f<(9dtlS2av(OZr&y|^=(ZU99cD}E+dK&8m!hdHqutu zf>lJ$hL6BrTvL(~5NI1;*7%Mvq`PA4)%=H92HVW- z!+lR^aKU3Ba*F19r}VK;p~vdSg%9oR4nFr&R|vTEItb$qYHnM!N^mlt znDZU2jjyucKNLy_B^(LZr#ks7=Y&7ShmH5atd;+I(B1+3u^zI~J?b31 zZU7f+8ENofnNw5+AV3LbebTbXJG7%$y(8|%bj*H;nMtqfe6*KL7THN5+gEd9~}2S+2PR9 zYyx^n*(?4N&yH(c4La~#-$o|xoiBSig(2saAe$X6^9PX&9^zpc9Fr>i%^Eqo%Q>mO z?G0=2^D1opMukkESET~FSlswOQ89ny-g0)Yu3Ao+k?hs7#n)S>tr>LAu>ib=| zBy&a-0XPAR`-d1`<@VrmsoAKp%GUJ?hu2>dLizJfu7p2K@ey*rond|uQWMxo5vc{C zaF74!gxDSazkY-?)>1{-0(!0-uBN}7n2zRttGb@#QKo18=Iq&b=3;-u$*#LOc?RNW z2k$?6xBnPtY?o#wgDx*!rWlfvKlDwq<@ja!;3HZe4-TIc^P4F*U?(D@TTjGwolt=13N}Vs-B7TQo0gCD`f1f)9k%q(S1p(uO z!;}Piy5Ekx4|)MtcErBdBbGF3ys1zGyUdw6x)lwH3nY?*CJpbs@eCU1*RI?B>1oDT z$fGNF&Sfm^xE$cJ=Y9R%!|TO>Qb|43boQMq83|UD$QWE7L?=|vT zh3DPY_(*udXovpkRBegSonEp;As)nH-iT1KAf^H9P-PXBo~~Im+aLdf4yE!gU8Oaz zj~Q3`baBaB_8ZPF+rj#jewt^HM^ZBw-I)2Vi-&wY11e-aEK7=|u=1@VpS_nE)B2CR zz9#Q*`Iami4)5>>iF#BBaTov+vu)|eV_#418~Mg1)ZC@k-5$6WPW_;hr1x5PYpMpG z46HpkY;`Wt%Kne!DCOQ@SoD4eLeki%Q1xfH4%tIv30XsfC&u=?HQrHM3!x4{&Oont@8f-XfcFoHhIu(7Z${Bs4;9S!{?1(<%(8m3jU&3$n6gtN6 z5F;*Z!%G@(a}_amQ8jDn67ft;8vPul-RsWJ>Y{ve9bOqFP$VXIF%(@JNl`FX(G30y8FmkwT%XdBncc-*4h2|U=r)EWb#W4X>z4>B zSosL`#61W}Sc-~Itnr~TPltKdJ8tU>)qc?~6O|v( zQTgVJ+rvn!b^%36rFABLcVX7nLz;YnxFf47I5miNbf^H^X1V)u>sXM z<0uB-v+pj=3$ZLFy{-GasOF`%;H~DIc+NH2_PnlQ62Fb+=L$iNE{4QS`7p1iUHJMr28IcKjF92Wn2Ka7>N55b~}v z2N}plgO)KbO>9kfqcs!?jVOW(=Sk48ZS}EdI3oV3^_f>mVIS5{f;vIu8|a8x0&d3^EsE3 zwNJ^|o?G{ZZ!0YLa1K(~FEH-T8r(FWmcbFsmqRaZLg^2}lAVSEj$_|JHi7@8hmE+y z=;*ATeX*rVYO=XP|G}W^S5sV+lFi!<(on6R5m)TcPlvwzz;vHULewugW}8NrpWm~= zkD5i=J2FgTiueC8R{}$AG}CKV4?NF2NHMFt(Is`{y(Knc`^ru9*gh*?U>9%6d$UI{7zo{dR?FYCqNH z7LJSa@%2=X1 zsR#!H_^bA9m$a$IDuWf_o{k;af}PF92R5xw#wrn^O+JTAWICa7`oX63Mn=+P*Tzs& z+RnJ_A&2vOrLLcEnJKL~{3i2~_^z2VR_Bs^d6m*oY?v@dx(1iGI38pthiX$qWahN1 zI4`w6FSQ4~ux}6aopjk|Z1I2F*_?n^H$cBWD#DbW$1HmR6$cvh^?$(Di39Bbr|BTF zdcuu+WnDOC6KSFxy>t`@9sXd0GAG&G2>me%6<{b$^SM(a_NIxV&NF9IwIR=2-npjt zhf-<9(WGM)wwJE>%9!)=-t~3kt{H$mND+d9%BLSShbV+tg&qBxuRjm@x!-u>IAZr9 zGkRF*)UkI>Tepbb*u*u6Ya3q*9Oos?dw;?#m+e7uhJNIE734iHtb+soLo6$K_a;5) zNK|&e+jF>qH*yy@eDBFr5>OYFGQ=SM3d3Gm>n;?m6F9Ds)RKcu;cMw3F!jh3ap~2p z)jrz0u$(U2BPSqtM6AijN48~?S*@fP%KGFW*B#W-f)71}!AtQvJLgD4H#rG@uS%bL zvH)nHzO z54Jf+{GLoH0}pQn&*597*--G!KB6omJViQQi?GSm-P5}}|K$sN$Cy}O{=@ner$VNH zPvc4frA>x1MK~o5O$f#02B)4#v`+Ub)i?9mYI|4GcD=vKiwiR0S1+$K^*2)R{BH(u zH(1vyE}v&lE}ZJM?>3YPcDC$$v%@^^M_!5DF4yQYx;BYNZfg`JL6N9%pKBhVjDK0S zobE%W(SSGD!|gh(W#NAl(@c0}&~Ve{ zQ~^1lu3?c0b4D%Ga`r69m>FEwva8i+Vo&q@Fl@hCSaR~pMxhrDg>BF=cpyz&xYqGy z^JO0<1-oY4xfe7XgUX%W{>YoK)TdkAXYDVeh05NpD!GY$r>@YRX?OkJhw*!xQ;aIw z#(*!!OEae5XDrZOTaR1Ow7)pc%F=h$CJYa#lS_%;59{ zfiKkjb3m;?6FHBbo=g5?c6(V#N%~}@5)VH)>D7yND92Y**l7l)d5r1_k?>GUid|cu zmIKzT6g++%9c>*nJ`C2w%3nL9n!cZ%!V056^4uKUHrbl`YECaZ!|P+;yD#QWTtWMV zH~6By8EyH>+9y2^kHZn7$)Bh?C}t_M+*Dp@K&T;;sSQqqI$3I4V}UT4;b~D#{a8C) zMi0Log0HPf$kvb5-7QPV+{Cp)WQjuQYQET_&fMq@aP0PDsAYAA3Zab<2m8q-*k~Ix zf2j41$ylwB1Zy?&rw7M7Hrj1&^5*@qcs0z8yNxt)k5p37h9nR-vo2<`&eC$gN}_}* z#JjN1`1<=(x^U*lxh|2B_X_^xA)+rrbunbtfruH)==B@1#2! zdTbk89Eb!L|vur9^o6LcpcmjOcJob};FJ(;&sH2dM8^QWyC3 zmA)er0bI&|bJ2f4rtvO(W;(c4{m9C8M>Yk9cHYgH`#TETK`a>O!ZK&%(gdb> zW8mzmF&^iS1mkU&PK__v9FZ}2(Y}YciyKwgCO^v!%RfxhP(Q}Di(xq|Wm>{Yw3n9d zSo>>Vk_1y?{Q-P9R-@@&PHzZFZ6kR-Wuk≫QzI}~6TA!#C`?2|$ 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 !X-t_gAu5Bj(=Hu1&}trGY{ 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 | Patterns to include (default `["**/*"]`) | +| `exclude` | `Vec` | Patterns to exclude (default excludes `.git`, `.codegraph`, `target`, `node_modules`, `*.min.js`, `*.lock`) | + +**Note**: Walker filters apply *before* language detection. Excluded files are never parsed. + +### `[storage]` + +Selects the storage backend for the semantic graph. + +| `type` | Description | Default DSN | Notes | +|--------|-------------|-------------|-------| +| `sqlite` | SQLite WAL mode, single file | `sqlite:///.codegraph/db.sqlite` | Default, recommended for most uses | +| `lmdb` | Memory-mapped KV, directory | `lmdb:///.codegraph/db.lmdb` | Mmap-friendly for large indexes | +| `redis` | Redis backend | **Required** — no sensible default | Needs running Redis server | +| `memory` | Ephemeral in-process | N/A | Nothing persisted; for testing | +| `postgres` | PostgreSQL, sharded by `repo_id` | **Required** via `dsns` | Multi-tenant; see below | +| `mysql` | MySQL, sharded by `repo_id` | **Required** via `dsns` | Multi-tenant; see below | + +**DSN override**: Set `dsn` to override the default for any backend. + +**Postgres/MySQL (multi-tenant, sharded)**: +```toml +[storage] +type = "postgres" # or "mysql" +dsns = [ + "postgres://user:pass@db1:5432/codegraph", + "postgres://user:pass@db2:5432/codegraph", +] +# repo_id is auto-generated by `codegraph init` and written here +# repo_id = 14028493579208694412 +``` + +- Sharding: `shard = repo_id % len(dsns)` +- Schema **not auto-applied** — run SQL files from `sql/postgres/` or `sql/mysql/` manually before indexing +- See `sql/README.md` for full schema and sharding design + +### `[embedding]` + +Enables optional semantic search (vector KNN over symbol embeddings). + +| Key | Type | Default | Description | +|-----|------|---------|-------------| +| `backend` | `String` | unset (off) | `"fastembed"` to enable; `"hashing"` for deterministic fallback | +| `model` | `String` | `"bge-small-en-v1.5"` | ONNX model name (384-dim) | +| `cache_dir` | `String` | `"~/.cache/codegraph/embeddings"` | Global model cache directory | +| `vss_extension` | `String` | unset | SQLite-only: path to sqlite-vss extension for HNSW ANN | +| `execution_provider` | `String` | unset | `"coreml"` for macOS Apple Neural Engine/GPU | + +**Behavior**: +- **Off by default** — no embedding model runs unless `backend = "fastembed"` +- Release binary bundles fastembed (ONNX runtime) — no rebuild needed +- With embeddings enabled, `codegraph_search_symbol` gains `match` modes: `"semantic"` (vector KNN) and `"hybrid"` (RRF merge of substring + semantic) +- Vectors persisted with index — restarts reuse without re-embedding +- **Error on load failure** — if model fails to load, opening index errors out (no silent fallback) + +**Pre-download model** (for offline indexing): +```bash +codegraph embed --model bge-small-en-v1.5 +``` +Requires binary built with `--features fastembed`. + +--- + +## Environment Variable Overrides + +| Variable | Effect | +|----------|--------| +| `CODEGRAPH_CONFIG` | Path to config.toml (default: `.codegraph/config.toml`) | +| `CODEGRAPH_INSTALL_DIR` | Install script target directory (default: `~/.local/bin`) | + +--- + +## Related Docs + +- [Storage Backends](storage-backends.md) — Deep dive on each backend +- [Semantic Search](semantic-search.md) — Embedding setup, models, sqlite-vss, CoreML +- [Architecture](architecture.md) — How config maps to pipeline +- [README](../README.md) — Quick start \ No newline at end of file diff --git a/docs/development.md b/docs/development.md new file mode 100644 index 000000000..8849f11d4 --- /dev/null +++ b/docs/development.md @@ -0,0 +1,277 @@ +# Development Guide + +Building, testing, and contributing to CodeGraph. + +## Prerequisites + +- **Rust stable** ≥ 1.85 (edition 2024 used in `codegraph-graph`) +- `cargo` (from rustup) +- Optional: `clang` for some tree-sitter grammars (usually bundled) + +```bash +# Verify toolchain +rustc --version +cargo --version +``` + +--- + +## Quick Commands + +```bash +# Build everything +cargo build --workspace + +# Build release binary (what users get) +cargo build --release -p codegraph + +# Run all tests +cargo test --workspace + +# Lint (CI gate) +cargo clippy --workspace --all-targets -- -D warnings + +# Format +cargo fmt --all + +# Check all feature combinations +cargo check --workspace --features sqlite +cargo check -p codegraph-graph --features redis +cargo check -p codegraph --features rdbms +cargo check -p codegraph --features fastembed +``` + +--- + +## Crate Overview + +``` +crates/ + codegraph-core/ Error types + semgraph model (Symbol, Chain, CallRecord, markers) + codegraph-extract/ tree-sitter native + 14 LangSpec extractors + 5 hand-written + codegraph-graph/ GraphIndex: registry + 2 engines + pluggable storage + embeddings + codegraph-context/ Markdown/JSON context formatter + codegraph-api/ GraphApi wrapper on SharedGraphIndex (async queries) + codegraph-sboxes/ Behavior sandbox: Cranelift JIT + Rhai mock runtime + codegraph-mcp/ MCP server (rmcp SDK) + 24 tools + session management + codegraph-bench/ Benchmarks (criterion, codspeed, storage comparison) + codegraph/ CLI (init/deinit/embed/serve) + watcher (notify + debounce) +``` + +--- + +## Per-Crate Test Commands + +```bash +# Core model tests +cargo test -p codegraph-core + +# Extraction: 30 tests (10 lib + 16 chains + 2 cpp + 2 extract) +cargo test -p codegraph-extract + +# Graph: 60+ tests (search, storage, ingest, flow, reopen) +cargo test -p codegraph-graph + +# API layer +cargo test -p codegraph-api + +# MCP server + tools +cargo test -p codegraph-mcp + +# Sandbox JIT: control flow + end-to-end traces +cargo test -p codegraph-sboxes + +# Bench pipeline integration +cargo test -p codegraph-bench + +# Installer +cargo test -p codegraph-installer +``` + +--- + +## Feature Flags + +### `codegraph-extract` (language support) + +| Feature | Languages | +|---------|-----------| +| `all-langs` (default) | All 14 | +| `lang-rust` | Rust | +| `lang-go` | Go | +| `lang-python` | Python | +| `lang-typescript` | TypeScript | +| `lang-javascript` | JavaScript | +| `lang-java` | Java | +| `lang-c` | C | +| `lang-cpp` | C++ | +| `lang-csharp` | C# | +| `lang-ruby` | Ruby | +| `lang-php` | PHP | +| `lang-scala` | Scala | +| `lang-swift` | Swift | +| `lang-lua` | Lua | + +```bash +# Test single language +cargo test -p codegraph-extract --features lang-python +``` + +### `codegraph-graph` (storage + features) + +| Feature | Description | Default on `codegraph` | +|---------|-------------|------------------------| +| `sqlite` | SQLite storage | ✅ | +| `lmdb` | LMDB storage | ✅ | +| `redis` | Redis storage (compile verify) | ❌ | +| `postgres` | PostgreSQL storage | via `rdbms` | +| `mysql` | MySQL storage | via `rdbms` | +| `bloom-search` | Bloom filter for chain search | ✅ | +| `fastembed` | ONNX embedding backend | ✅ (via codegraph-api) | +| `apple-accel` | macOS CoreML for ONNX | ❌ (macOS only) | + +### `codegraph` binary + +| Feature | Description | Default | +|---------|-------------|---------| +| `rdbms` | Enable `postgres` + `mysql` | ✅ | +| `fastembed` | Compile `codegraph embed` CLI | ❌ | +| `apple-accel` | macOS CoreML | ❌ | + +### `codegraph-mcp` crate + +| Feature | Description | Default | +|---------|-------------|---------| +| `rdbms` | Enable `postgres` + `mysql` | ❌ | + +--- + +## Important Notes + +### `codegraph-api` enables all `codegraph-graph` features + +```bash +# This does NOT produce a slimmer binary — all storage drivers +# and embedding backend are still compiled in via codegraph-api +cargo build -p codegraph --no-default-features +``` + +To actually reduce binary size, you must build with minimal features on `codegraph-graph` AND avoid depending on `codegraph-api` (not practical for the main binary). + +### `apple-accel` is macOS-only + +```bash +# Works +cargo build --features fastembed,apple-accel --target x86_64-apple-darwin +cargo build --features fastembed,apple-accel --target aarch64-apple-darwin + +# Fails +cargo build --features fastembed,apple-accel --target x86_64-unknown-linux-gnu +``` + +--- + +## Running Benchmarks + +```bash +# Criterion benchmarks (statistical) +cargo bench -p codegraph-bench + +# Single-pass measurement (JSON output) +cargo run -p codegraph-bench -- --json + +# Storage backend comparison +cargo run -p codegraph-bench -- --storage sqlite,lmdb,memory + +# CodSpeed (CI only — see .github/workflows/codspeed.yml) +cargo codspeed build -p codegraph-bench --features codspeed +``` + +--- + +## Release Process + +Handled by CI (`.github/workflows/release.yml`): + +1. Tag pushed: `vX.Y.Z` +2. Builds for all targets: + - `x86_64-unknown-linux-musl` + - `aarch64-unknown-linux-gnu` + - `x86_64-apple-darwin` + - `aarch64-apple-darwin` + - `x86_64-pc-windows-msvc` +3. Signs with cosign (keyless, GitHub OIDC) +4. Attaches `.sig` + `.crt` to release +5. Publishes to Homebrew tap, AUR, .deb/.rpm + +**Local release build**: +```bash +cargo build --release -p codegraph +# Binary at target/release/codegraph +``` + +--- + +## Project Structure + +``` +. +├── crates/ # Workspace members +├── docs/ # Documentation (this file + others) +│ ├── architecture.md +│ ├── comparison.md +│ ├── configuration.md +│ ├── development.md # This file +│ ├── semantic-search.md +│ ├── storage-backends.md +│ ├── why-rust.md +│ └── specs/ # Detailed spec docs +├── scripts/ # Install scripts (sh/ps1) +├── sql/ # Postgres/MySQL schemas +├── packaging/ # .deb/.rpm packaging +├── .github/workflows/ # CI/CD +├── Cargo.toml # Workspace root +└── README.md # Main entry point +``` + +--- + +## Contributing + +1. Fork & branch +2. `cargo fmt --all && cargo clippy --workspace --all-targets -- -D warnings` +3. `cargo test --workspace` +4. Add tests for new functionality +5. Update relevant docs in `docs/` +6. PR with clear description + +**Commit style**: Conventional commits (`feat:`, `fix:`, `docs:`, `refactor:`, `test:`) + +--- + +## Debugging Tips + +```bash +# Verbose logging +RUST_LOG=codegraph=debug codegraph init + +# Specific crate +RUST_LOG=codegraph_graph=trace codegraph init + +# MCP server debug +RUST_LOG=codegraph_mcp=debug codegraph serve --mcp + +# Watcher debug +RUST_LOG=codegraph=debug codegraph serve --mcp +``` + +--- + +## Related Docs + +- [Architecture](architecture.md) — Pipeline and crate relationships +- [Why Rust](why-rust.md) — Rewrite rationale and benchmarks +- [Configuration](configuration.md) — Config reference +- [Storage Backends](storage-backends.md) — Backend deep-dive +- [Semantic Search](semantic-search.md) — Embedding setup +- [README](../README.md) — Quick start \ No newline at end of file diff --git a/docs/semantic-search.md b/docs/semantic-search.md new file mode 100644 index 000000000..fd63e4355 --- /dev/null +++ b/docs/semantic-search.md @@ -0,0 +1,157 @@ +# Semantic Search (Embeddings) + +Optional vector similarity search over symbol embeddings. Off by default. + +## Quick Start + +```toml +# .codegraph/config.toml +[embedding] +backend = "fastembed" +model = "bge-small-en-v1.5" +cache_dir = "~/.cache/codegraph/embeddings" +``` + +```bash +# Pre-download model (optional, for offline indexing) +codegraph embed --model bge-small-en-v1.5 + +# Re-index to generate embeddings +codegraph init +``` + +## How It Works + +1. **Model**: BGE-small-en-v1.5 (384-dim, ONNX) via fastembed +2. **Indexing**: Each symbol's name + signature → embedding vector +3. **Storage**: Vectors persisted alongside graph (in same backend) +4. **Query**: `codegraph_search_symbol` with `match = "semantic"` or `"hybrid"` +5. **Hybrid**: Reciprocal Rank Fusion (RRF) merges substring + semantic results + +## Configuration Reference + +| Key | Required | Default | Description | +|-----|----------|---------|-------------| +| `backend` | Yes* | unset (off) | `"fastembed"` to enable; `"hashing"` for deterministic fallback | +| `model` | No | `"bge-small-en-v1.5"` | ONNX model name (must be 384-dim) | +| `cache_dir` | No | `"~/.cache/codegraph/embeddings"` | Global model cache | +| `vss_extension` | No | unset | SQLite-only: path to sqlite-vss for HNSW ANN | +| `execution_provider` | No | unset | `"coreml"` for macOS Apple Neural Engine/GPU | + +*Required to enable — if unset, semantic search is completely disabled (no model loads). + +## MCP Tool Changes + +With embeddings enabled, `codegraph_search_symbol` gains: + +| Match Mode | Description | +|------------|-------------| +| `contains` (default) | Substring match on lowercase names | +| `prefix` / `suffix` / `exact` | String match variants | +| `semantic` | Vector KNN — finds symbols by semantic similarity | +| `hybrid` | RRF merge of `contains` + `semantic` | + +**Example**: +```json +// Semantic search +{ "query": "user authentication", "match": "semantic", "limit": 10 } + +// Hybrid (recommended for best recall) +{ "query": "auth user", "match": "hybrid", "limit": 10 } +``` + +## SQLite + sqlite-vss (HNSW ANN) + +For large indexes, exact KNN (brute-force) is slow. SQLite can use the `sqlite-vss` extension for HNSW approximate nearest neighbor. + +**Setup**: +1. Install sqlite-vss (see https://github.com/asg017/sqlite-vss) +2. Point `vss_extension` to the extension directory: +```toml +[embedding] +backend = "fastembed" +vss_extension = "~/.cache/codegraph/embeddings/vss" +``` +3. Re-index — vectors will be indexed in HNSW + +**Trade-offs**: +- HNSW: faster queries, approximate results, extra disk space +- Brute-force: exact, slower on >100k vectors, no extra deps + +## macOS Hardware Acceleration (CoreML) + +On macOS, run embeddings on Apple Neural Engine / GPU via CoreML execution provider. + +**Build**: +```bash +cargo build --features fastembed,apple-accel +``` +*Fails on non-macOS.* + +**Config**: +```toml +[embedding] +backend = "fastembed" +execution_provider = "coreml" +``` + +**Benefits**: 2–5× faster embedding inference on Apple Silicon. + +## Model Management + +**Pre-download** (offline indexing): +```bash +codegraph embed --model bge-small-en-v1.5 --cache-dir ~/.cache/codegraph/embeddings +``` +- Requires binary built with `--features fastembed` +- Downloads ONNX model to cache dir +- Subsequent indexing works offline + +**Cache location**: `~/.cache/codegraph/embeddings/` (configurable via `cache_dir`) + +**Model files** (~50 MB): +- `model.onnx` — the quantized BGE-small model +- `tokenizer.json` — tokenizer config + +## Error Handling + +**Critical**: If the model fails to load (no network, missing ONNX runtime, corrupted cache), **opening the index errors out**. There is no silent fallback to lexical-only search. + +This is by design — silent fallback would return misleading results. + +**Troubleshooting**: +- Verify `cache_dir` exists and is writable +- Check ONNX Runtime is available (bundled in release binary) +- Run `codegraph embed` to re-download model +- Check logs: `RUST_LOG=codegraph_graph=debug codegraph init` + +## Performance + +| Metric | Value | +|--------|-------| +| Model size | ~50 MB (ONNX, int8 quantized) | +| Dimensions | 384 | +| Embedding latency | ~2–5 ms/symbol (CPU), ~0.5–1 ms (CoreML) | +| Index overhead | 384 × 4 bytes × num_symbols (~1.5 KB/symbol) | +| Query latency (brute-force) | O(N) — ~100k vectors = ~50 ms | +| Query latency (HNSW) | O(log N) — ~100k vectors = ~2 ms | + +## When to Enable + +✅ **Enable if**: +- Agents search by concept/intent ("error handling", "database connection") +- Codebase has inconsistent naming (synonyms, abbreviations) +- You want "fuzzy" symbol discovery + +❌ **Skip if**: +- Strict name-based search is sufficient +- Indexing speed is critical (embeddings add ~2–5 ms/symbol) +- Disk space is constrained +- Offline-only with no pre-download opportunity + +## Related Docs + +- [Configuration](configuration.md) — Full config.toml reference +- [Storage Backends](storage-backends.md) — Vector storage per backend +- [MCP Tools](../README.md#mcp-tools) — `codegraph_search_symbol` reference +- [README](../README.md) — Quick start \ No newline at end of file diff --git a/docs/storage-backends.md b/docs/storage-backends.md new file mode 100644 index 000000000..aa11ab486 --- /dev/null +++ b/docs/storage-backends.md @@ -0,0 +1,248 @@ +# Storage Backends + +Deep dive on CodeGraph's pluggable storage backends. + +## Overview + +CodeGraph's `GraphIndex` uses a pluggable storage abstraction. The backend is selected via `[storage] type` in `config.toml`. + +| Backend | Type | Persistence | Concurrency | Best For | +|---------|------|-------------|-------------|----------| +| SQLite | Embedded SQL | Single file (WAL) | Single-writer, multi-reader | Default, local projects | +| LMDB | Embedded KV (mmap) | Directory | Multi-reader, single-writer | Large indexes, mmap-friendly | +| Redis | Client-server | Remote | Multi-writer | Shared index, multi-process | +| Memory | In-process | None | N/A | Testing, ephemeral | +| PostgreSQL | Client-server (sharded) | Remote | Multi-writer | Multi-tenant, production | +| MySQL | Client-server (sharded) | Remote | Multi-writer | Multi-tenant, production | + +--- + +## SQLite (Default) + +**Config**: +```toml +[storage] +type = "sqlite" +# dsn = "sqlite:///absolute/path/to/db.sqlite" # optional override +``` + +**Characteristics**: +- Single file: `.codegraph/db.sqlite` (WAL mode) +- Entities + radix streams stored in tables +- No external dependencies (bundled `rusqlite` with `bundled` feature) +- WAL mode allows concurrent readers during write +- **Default and recommended** for most local use + +**Performance** (from `crates/codegraph-bench/STORAGE_PERF.md` on `crates/` corpus): +- Open + ingest (median): ~12–14 µs (in-memory baseline), ~40–43 ms (SQLite on disk) +- On-disk size: ~590–690 KB for `crates/` workspace + +**Limitations**: +- Single-writer — not suitable for concurrent multi-process writes +- File-based — not network-accessible + +--- + +## LMDB + +**Config**: +```toml +[storage] +type = "lmdb" +# dsn = "lmdb:///absolute/path/to/db.lmdb" # optional override +``` + +**Characteristics**: +- Memory-mapped KV store (`.codegraph/db.lmdb/` directory) +- Bundled C library (`lmdb-rkv`) — no system dependency +- Zero-copy reads via mmap — excellent for read-heavy workloads +- Single-writer, multi-reader (like SQLite) +- **Smaller on-disk footprint** than SQLite (~2.2× smaller per benchmarks) + +**Performance** (same corpus): +- Open + ingest (median): ~16–28 ms +- On-disk size: ~270 KB for `crates/` workspace + +**When to choose**: +- Very large indexes where mmap helps +- Read-heavy workloads +- You want smaller disk usage + +**Limitations**: +- Single-writer +- Directory-based (not a single file) +- Map size must be configured for very large DBs (handled automatically) + +--- + +## Redis + +**Config**: +```toml +[storage] +type = "redis" +dsn = "redis://localhost:6379" # REQUIRED +``` + +**Characteristics**: +- Client-server — requires running Redis instance +- Supports multi-process / multi-machine access +- Uses Redis hashes/streams for entities and indexes +- Connection pooling via `redis` crate with `tokio-comp` + +**When to choose**: +- Multiple processes sharing one index +- Index lives on a separate server +- Need pub/sub for cache invalidation (future) + +**Limitations**: +- Network latency on every operation +- Requires Redis server management +- No embedded mode + +--- + +## Memory (Ephemeral) + +**Config**: +```toml +[storage] +type = "memory" +``` + +**Characteristics**: +- Pure in-process `DashMap` + in-memory engines +- Nothing persisted — index lost on exit +- Fastest for benchmarks/testing + +**When to choose**: +- Unit tests +- Ephemeral indexing (CI, scripting) +- Benchmarking storage overhead + +--- + +## PostgreSQL (Multi-Tenant, Sharded) + +**Config**: +```toml +[storage] +type = "postgres" +dsns = [ + "postgres://user:pass@db1:5432/codegraph", + "postgres://user:pass@db2:5432/codegraph", +] +# repo_id auto-generated and written to config +# repo_id = 14028493579208694412 +``` + +**Architecture**: +- Every table partitioned by leading `repo_id` (`u64`) +- Each project root (`.codegraph/`) → its own `repo_id` +- Sharding: `shard = repo_id % len(dsns)` +- Re-indexing/deleting one repo never touches another + +**Schema** (manual apply required): +```bash +# Run against EVERY shard +psql "$DSN" -f sql/postgres/001-initial-schema.sql +psql "$DSN" -f sql/postgres/002-add-repos-registry.sql +``` + +**Tables** (per shard): +- `repos` — registry of `repo_id` → root path +- `entities` — symbols (partitioned by `repo_id`) +- `chains` — call chains (partitioned) +- `call_records` — resolved calls (partitioned) +- `edges` — derived edges (partitioned) +- `vectors` — embeddings (partitioned, if enabled) + +**Build**: Requires `rdbms` feature (on by default for `codegraph` binary): +```bash +cargo build --features rdbms +cargo build -p codegraph-mcp --features rdbms +``` + +**When to choose**: +- Multi-tenant SaaS (each customer = one repo_id) +- Shared infrastructure, isolated data +- Need SQL tooling for analytics + +**Limitations**: +- Manual schema management +- Network latency +- More complex ops + +--- + +## MySQL (Multi-Tenant, Sharded) + +**Config**: +```toml +[storage] +type = "mysql" +dsns = [ + "mysql://user:pass@db1:3306/codegraph", + "mysql://user:pass@db2:3306/codegraph", +] +# repo_id auto-generated +``` + +**Schema** (manual apply): +```bash +mysql "$DB" < sql/mysql/001-initial-schema.sql +mysql "$DB" < sql/mysql/002-add-repos-registry.sql +``` + +Same architecture as Postgres — partitioned by `repo_id`, sharded by `repo_id % N`. + +**When to choose**: Same as Postgres, but MySQL preferred. + +--- + +## Backend Selection Guide + +| Scenario | Recommended | +|----------|-------------| +| Local development, single project | `sqlite` (default) | +| Large local index, read-heavy | `lmdb` | +| Multiple agents/processes same machine | `redis` or `lmdb` | +| Team shared index (LAN) | `redis` | +| Multi-tenant SaaS | `postgres` or `mysql` | +| CI/testing | `memory` | +| Production with SQL tooling needs | `postgres` | + +--- + +## Switching Backends + +1. Update `config.toml` `[storage] type = "..."` +2. Run `codegraph init` (or `codegraph_index` via MCP) — full re-index +3. Old index files remain but are unused (safe to delete `.codegraph/db.*`) + +**Note**: No migration between backends — always full re-index from source. + +--- + +## Performance Notes + +From `crates/codegraph-bench/STORAGE_PERF.md` (local `crates/` corpus, 3 runs median): + +| Backend | Open+Ingest | On-Disk Size | Query Latency (200 ops) | +|---------|-------------|--------------|-------------------------| +| `in_memory` | ~12 µs | N/A | ~84–90 ns/op | +| `sqlite` | ~40–43 ms | ~590–690 KB | ~84–90 ns/op | +| `lmdb` | ~16–28 ms | ~270 KB | ~84–90 ns/op | + +- Query latency dominated by in-memory engines (radix + chain search), not storage +- High variance noted in SQLite/LMDB ingest ("measurement machine was loaded") +- LMDB ~1.4–2.1× faster ingest than SQLite; ~2.2× smaller on disk + +--- + +## Related Docs + +- [Configuration](configuration.md) — Full config.toml reference +- [Architecture](architecture.md) — GraphIndex and storage abstraction +- [SQL Schema](sql/README.md) — Postgres/MySQL schema details +- [README](../README.md) — Quick start \ No newline at end of file diff --git a/docs/why-rust.md b/docs/why-rust.md new file mode 100644 index 000000000..ae2e9b56b --- /dev/null +++ b/docs/why-rust.md @@ -0,0 +1,132 @@ +# Why Rust? — The Rewrite Story + +CodeGraph is a from-scratch Rust rewrite of the previous TypeScript implementation. + +## The Old Stack (TypeScript) + +| Component | Technology | Pain Points | +|-----------|------------|-------------| +| Runtime | Node.js (embedded) | ~50 MB baseline, multi-second cold start | +| Parsing | 20+ tree-sitter WASM grammars | WASM overhead, no parallel parsing | +| Storage | Native SQLite addon (better-sqlite3) | Node-gyp builds, platform issues | +| Distribution | Single binary via `pkg` | ~140 MB, not truly static | + +**Result**: ~140 MB binary, 2–3 second startup, complex build pipeline. + +--- + +## The Rust Rewrite + +### What Changed + +| Before (TS) | After (Rust) | Impact | +|-------------|--------------|--------| +| Node runtime | **None** — static binary | -80 MB, sub-ms startup | +| WASM grammars | **Statically-linked tree-sitter C** | Native speed, rayon parallelism | +| Native SQLite addon | **Bundled `rusqlite` (bundled feature)** | No system deps, no node-gyp | +| `pkg` bundler | **`cargo build --release` + `strip`** | Standard Rust toolchain | + +### Build Optimizations + +```toml +# Cargo.toml (workspace) +[profile.release] +lto = "fat" # Cross-crate optimization +codegen-units = 1 # Maximum optimization +strip = true # Strip symbols +panic = "abort" # Smaller binary, no unwinding +``` + +### Results + +| Metric | TypeScript | Rust | Improvement | +|--------|------------|------|-------------| +| Binary size | ~140 MB | **~58 MB** | **2.4× smaller** | +| Cold start | ~2–3 s | **<100 ms** | **20–30× faster** | +| Indexing (139 files) | ~1 s | **~190 ms** | **~5× faster** | +| Memory (idle) | ~80 MB | **~15 MB** | **5× less** | +| Dependencies | 500+ npm packages | **~100 crates** | Simpler supply chain | + +--- + +## Why These Choices? + +### `tree-sitter` (C) over WASM + +- **Parallel parsing**: `rayon` thread pool across files — WASM can't do true parallelism +- **Zero-copy**: Parse trees reference source bytes directly +- **No WASM overhead**: Function calls, memory copies eliminated +- **Grammar updates**: `tree-sitter` C libs updated independently + +### `rusqlite` (bundled SQLite) over native addon + +- **Pure Rust + bundled C**: `rusqlite` with `bundled` feature compiles SQLite from source +- **No system SQLite needed**: Works on minimal containers (distroless, scratch) +- **WAL mode**: Concurrent readers during write +- **No node-gyp**: Eliminates entire class of build failures + +### Single Binary Philosophy + +``` +codegraph binary contains: + ├── tree-sitter parsers (14 languages, statically linked) + ├── SQLite (bundled, WAL mode) + ├── LMDB (bundled via lmdb-rkv) + ├── Redis client (async, tokio) + ├── Postgres/MySQL drivers (sqlx, compiled in) + ├── ONNX Runtime + fastembed (BGE-small model loader) + └── MCP server (rmcp SDK) +``` + +**No**: +- External processes +- Shared libraries (except libc) +- Runtime downloads (model cached separately) +- Daemon/background service + +--- + +## Trade-offs + +| Gain | Cost | +|------|------| +| Fast startup | Longer compile time (~3–5 min clean) | +| Small binary | Larger binary than minimal CLI (~58 MB) | +| Parallel parsing | More complex build (C dependencies) | +| No runtime deps | Can't hot-reload grammars (rebuild needed) | +| Type safety | Learning curve for contributors | + +--- + +## Verification + +```bash +# Build release +cargo build --release -p codegraph + +# Check size +ls -lh target/release/codegraph +# ~58 MB + +# Verify static linking +ldd target/release/codegraph +# Should show only libc, libdl, libpthread, libm, libgcc_s + +# Benchmark startup +time target/release/codegraph --version +# <100 ms + +# Benchmark indexing +cd /path/to/project +time target/release/codegraph init +# ~190 ms for ~139 files +``` + +--- + +## Related Docs + +- [Architecture](architecture.md) — Crate structure and pipeline +- [Development](development.md) — Build, test, feature flags +- [Configuration](configuration.md) — Storage/embedding backends +- [README](../README.md) — Quick start \ No newline at end of file From acfc536ddca9aa4a78814b7b34717c5811889a53 Mon Sep 17 00:00:00 2001 From: Hung Pham Date: Fri, 21 Aug 2026 18:45:28 +0700 Subject: [PATCH 2/2] Fix typo --- README.md | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index 1bdc084fa..62454c942 100644 --- a/README.md +++ b/README.md @@ -136,10 +136,8 @@ You can buy me a coffee by sending me money by MOMO

-

- Buy Me a Coffee at ko-fi.com -

---- +Or send to me through +[![ko-fi](https://ko-fi.com)](https://ko-fi.com) ## License