From b402b8f56ea1eda4c335f80d1ecb83dd4ce1f6c5 Mon Sep 17 00:00:00 2001
From: n8n-gitea
@@ -15,7 +15,7 @@
-
Climb the spire. Master the mana. Uncover the loop.
-
- An incremental/idle game about climbing a magical spire, mastering skills, and uncovering ancient secrets.
+ An incremental/idle game about climbing a magical spire, mastering disciplines, and uncovering ancient secrets.
+
@@ -42,13 +42,13 @@
## Overview
-**Mana Loop** is a browser-based incremental/idle game where players gather mana, master skills, climb a mysterious 100-floor spire, craft enchanted equipment, and summon magical golems. The game features a unique time-loop prestige system (Insight) that provides permanent progression bonuses across playthroughs.
+**Mana Loop** is a browser-based incremental/idle game where players gather mana, practice disciplines, climb a mysterious spire, craft enchanted equipment, and summon magical golems. The game features a unique time-loop prestige system (Insight) that provides permanent progression bonuses across playthroughs.
### Core Game Loop
1. **Gather Mana** - Click to collect mana or let it regenerate automatically (14 total mana types)
-2. **Study Skills & Spells** - 20+ skills with 5-tier evolution system and milestone upgrades
-3. **Climb the Spire** - Battle through 100 procedurally-generated floors, defeat guardians, sign pacts
+2. **Practice Disciplines** - Continuously train abilities that drain mana each tick in exchange for growing stat bonuses
+3. **Climb the Spire** - Battle through procedurally-generated floors; every 10th floor is a guardian encounter
4. **Craft & Enchant** - 3-stage equipment enchantment system with capacity limits
5. **Summon Golems** - Magical constructs that fight alongside you (4 base + 6 hybrid types)
6. **Prestige (Loop)** - Reset progress for Insight currency, gain permanent bonuses
@@ -62,18 +62,19 @@
- Elemental conversion, regeneration mechanics, and meditation bonuses
- Mana types: Fire, Water, Air, Earth, Light, Dark, Death (base), Transference (utility), Metal, Sand, Lightning (compound), Crystal, Stellar, Void (exotic)
-### 📜 Skill & Spell System
-- 20+ skills across multiple categories (mana, study, enchanting, golemancy)
-- 5-tier evolution system for each skill
-- Milestone upgrades at levels 5 and 10 per tier
-- Unique special effects unlocked through skill upgrades
+### 📜 Discipline System
+- Practice-based progression - no discrete levels, only continuous XP growth
+- Disciplines drain mana each tick; stat bonuses grow as a power curve of accumulated XP
+- Perks unlock at XP thresholds (once, capped, or infinite stacking)
+- Attunement-gated discipline pools (Base / Enchanter / Invoker / Fabricator)
+- Concurrent discipline slots unlock as total XP grows (max 4)
### ⚔️ Combat & Spire
-- Cast-speed based combat system
+- Cast-speed based combat system with elemental effectiveness
- Multi-spell support from equipped weapons
-- 100-floor spire with elemental themes
-- Floor guardians with unique mechanics and pacts
+- Every 10th floor is a guardian: base elements (10–80), compound (90–110), exotic (120–140), then procedural combination bosses (150+)
- Golem allies that deal automatic damage each tick
+- Enemy modifiers: Armored, Agile, Mage, Shield, Swarm
### 🛡️ Equipment & Enchanting
- 3-stage enchantment process: Design → Prepare → Apply
@@ -86,20 +87,19 @@
- Summon magical constructs (Earth, Steel, Crystal, Sand + 6 hybrid types)
- Golem slots unlock every 2 Fabricator levels (max 5 slots at Level 10)
- Hybrid golems require Enchanter 5 + Fabricator 5
-- Golem maintenance costs and stat upgrades via skills
### 🔄 Prestige (Insight)
- Reset progress for permanent Insight currency
- Insight upgrades across multiple categories
- Signed pacts and attunements persist through prestige
-- Three attunement classes: Enchanter (Transference), Invoker (Spells), Fabricator (Golems/Equipment)
+- Three attunement classes: Enchanter (Transference), Invoker (Spells/Pacts), Fabricator (Golems/Equipment)
---
## Tech Stack
| Technology | Version | Purpose |
-|------------|---------|---------|
+|------------|---------|---------|
| **Next.js** | ^16.1.1 | Full-stack framework (App Router) |
| **React** | ^19.0.0 | UI library |
| **TypeScript** | ^5 | Type-safe development |
@@ -176,50 +176,53 @@ Mana-Loop/
├── src/ # Application source code
│ ├── app/ # Next.js App Router
│ │ ├── layout.tsx # Root layout (metadata, fonts, providers)
-│ │ ├── page.tsx # Main game UI (~583 lines)
+│ │ ├── page.tsx # Main game UI
│ │ ├── globals.css # Global styles
│ │ └── api/ # API routes (minimal)
│ ├── components/ # React components
│ │ ├── ui/ # shadcn/ui components (20+ components)
│ │ └── game/ # Game-specific components
-│ │ ├── tabs/ # Tab components (SpireTab, SkillsTab, etc.)
+│ │ ├── tabs/ # Tab components (SpireTab, DisciplinesTab, etc.)
│ │ ├── ManaDisplay.tsx, ActionButtons.tsx, TimeDisplay.tsx
│ │ └── crafting/, debug/, shared/, stats/ subdirectories
│ ├── hooks/ # Custom React hooks (use-mobile, use-toast)
-│ ├── lib/ # Utility libraries
-│ │ ├── game/ # Core game logic
-│ │ │ ├── store.ts # Main Zustand store (~2862 lines)
-│ │ │ ├── crafting-slice.ts, study-slice.ts, navigation-slice.ts
-│ │ │ ├── effects.ts, upgrade-effects.ts
-│ │ │ ├── skill-evolution.ts (~3400 lines)
-│ │ │ ├── constants/ # Game definitions (elements, spells, skills)
-│ │ │ ├── data/ # Game data (equipment, golems, recipes)
-│ │ │ └── __tests__/ # Test files for game logic
-│ │ └── db.ts, utils.ts
-│ └── test/ # Test setup
+│ └── lib/ # Utility libraries
+│ └── game/ # Core game logic
+│ ├── stores/ # Modular Zustand stores
+│ │ ├── gameStore.ts # Core state & tick logic
+│ │ ├── manaStore.ts # Mana gathering & conversion
+│ │ ├── combatStore.ts # Combat, spells, floor progression
+│ │ ├── prestigeStore.ts # Prestige/loop & insight
+│ │ ├── discipline-slice.ts # Discipline activation & XP
+│ │ ├── attunementStore.ts # Attunement classes
+│ │ ├── craftingStore.ts # Crafting state
+│ │ └── uiStore.ts # UI state & modals
+│ ├── crafting-actions/ # Modular crafting stage handlers
+│ ├── constants/ # Elements, spells, rooms, prestige
+│ ├── data/ # Game data
+│ │ ├── disciplines/ # Per-attunement discipline definitions
+│ │ ├── enchantments/ # Enchantment effects by category
+│ │ ├── equipment/ # Equipment type definitions
+│ │ ├── golems/ # Golem definitions
+│ │ ├── guardian-data.ts # Static guardian definitions (floors 10–140)
+│ │ └── guardian-encounters.ts # Procedural guardian lookup & combo bosses
+│ ├── effects/ # Unified stat computation
+│ │ └── discipline-effects.ts # Discipline → getUnifiedEffects()
+│ ├── types/ # TypeScript types (disciplines, elements, etc.)
+│ └── utils/ # Combat, floor, enemy, discipline math helpers
├── prisma/ # Database schema and migrations
-│ └── schema.prisma # SQLite schema
-├── public/ # Static assets (logo.svg, robots.txt)
+├── public/ # Static assets
├── docs/ # Project documentation
-│ ├── AGENTS.md # Comprehensive architecture guide
-│ ├── GAME_BRIEFING.md # Game design document
-│ └── task/ # Task tracking documentation
-├── .next/ # Next.js build output (generated)
-├── node_modules/ # Dependencies (generated)
-├── Configuration Files:
-│ ├── package.json # Project metadata and scripts
-│ ├── tsconfig.json # TypeScript configuration
-│ ├── next.config.ts # Next.js config (standalone output)
-│ ├── vitest.config.ts # Vitest test configuration
-│ ├── eslint.config.mjs # ESLint configuration
-│ ├── Dockerfile # Docker multi-stage build
-│ ├── docker-compose.yml # Docker Compose setup
-│ ├── Caddyfile # Reverse proxy configuration
-│ └── .gitea/workflows/ # Gitea Actions CI/CD pipeline
-└── README.md # This file
+│ ├── AGENTS.md # Architecture guide for AI agents
+│ └── GAME_BRIEFING.md # Comprehensive game design document
+└── Configuration Files:
+ ├── package.json, tsconfig.json, next.config.ts
+ ├── vitest.config.ts, eslint.config.mjs
+ ├── Dockerfile, docker-compose.yml, Caddyfile
+ └── .gitea/workflows/ # Gitea Actions CI/CD pipeline
```
-For detailed architecture patterns and coding guidelines, see [AGENTS.md](./docs/AGENTS.md).
+For detailed architecture patterns and coding guidelines, see [AGENTS.md](./AGENTS.md).
---
@@ -232,36 +235,50 @@ The core resource of the game with 14 distinct types organized in a hierarchy:
- **Compound (3)**: Metal (Fire+Earth), Sand (Earth+Water), Lightning (Fire+Air)
- **Exotic (3)**: Crystal (Sand+Sand+Light), Stellar (Fire+Fire+Light), Void (Dark+Dark+Death)
-**Key Files**: `src/lib/game/store.ts`, `src/lib/game/constants/elements.ts`
+**Key Files**: `src/lib/game/stores/manaStore.ts`, `src/lib/game/constants/elements.ts`
-### Skill Evolution System
-Each skill progresses through 5 tiers with upgrades at levels 5 and 10 per tier:
-- **Tier 1**: Basic functionality
-- **Tier 2-5**: Unlock new mechanics and bonuses
-- **Evolution Paths**: Defined in `src/lib/game/skill-evolution.ts` (~3400 lines)
+### Discipline System
+Disciplines replace the old skill system entirely. There are no discrete levels - disciplines grow **continuously** through practice. The player activates a discipline and it drains mana each tick in exchange for permanent stat growth within the run.
+
+- **Stat bonus** grows as a power curve of XP: `baseValue × (XP / scalingFactor)^0.65`
+- **Mana drain** also increases with XP: `drainBase × (1 + (XP / difficultyFactor)^0.4)`
+- **Perks** unlock at XP thresholds (`once`, `capped`, or `infinite`)
+- **Concurrent slots** start at 1 and unlock as total XP grows (max 4)
+
+**Key Files**: `src/lib/game/data/disciplines/`, `src/lib/game/stores/discipline-slice.ts`, `src/lib/game/utils/discipline-math.ts`
+
+### Guardian & Spire System
+Every 10th floor is a guardian encounter. Guardians progress through four tiers of complexity:
+
+1. **Base Elements (Floors 10–80)**: One guardian per base element + Transference. Static definitions with named guardians (Ignis Prime, Aqua Regia, etc.). Defeating them unlocks their associated mana types.
+2. **Compound Elements (Floors 90–110)**: Metal, Sand, and Lightning guardians with procedurally generated names.
+3. **Exotic Elements (Floors 120–140)**: Crystal, Stellar, and Void guardians - the most powerful single-element encounters.
+4. **Combination Bosses (Floor 150+)**: Fully procedural dual-element guardians. Each one wields two base elements simultaneously (e.g. Fire+Water, Light+Dark) and grows stronger every 10 floors.
+
+**Key Files**: `src/lib/game/data/guardian-data.ts`, `src/lib/game/data/guardian-encounters.ts`
### Combat System
-- Cast-speed based spell casting with DPS calculations
-- Elemental damage bonuses and effectiveness
-- Multi-spell support from equipped weapons
+- Cast-speed based spell casting with elemental effectiveness multipliers
+- Enemy modifiers: Armored, Agile, Mage (barrier), Shielded, Swarm
- Golem allies deal automatic damage each tick
+- Discipline bonuses feed into damage via `getUnifiedEffects()`
-**Key Files**: `src/lib/game/store.ts` (combat tick logic), `src/lib/game/constants/spells.ts`
+**Key Files**: `src/lib/game/stores/combatStore.ts`, `src/lib/game/utils/combat-utils.ts`, `src/lib/game/utils/enemy-generator.ts`
### Enchanting System
3-stage equipment enchantment process:
1. **Design**: Choose effects for your equipment type
-2. **Prepare**: Prepare equipment (ONLY way to disenchant existing enchantments)
+2. **Prepare**: Ready equipment (ONLY stage where disenchanting is possible)
3. **Apply**: Apply designed enchantments (cannot re-enchant already enchanted gear)
-**Key Files**: `src/lib/game/crafting-slice.ts`, `src/lib/game/data/enchantment-effects.ts`
+**Key Files**: `src/lib/game/crafting-actions/`, `src/lib/game/data/enchantments/`
### Golemancy System
- **Base Golems**: Earth (Fabricator 2), Steel (Metal), Crystal, Sand
- **Hybrid Golems** (Enchanter 5 + Fabricator 5): Lava, Galvanic, Obsidian, Prism, Quicksilver, Voidstone
- **Golem Slots**: 1 slot at Fabricator Level 2, +1 every 2 levels (max 5 at Level 10)
-**Key Files**: `src/lib/game/data/golems.ts`, `src/lib/game/store.ts`
+**Key Files**: `src/lib/game/data/golems/`, `src/lib/game/stores/gameStore.ts`
### Prestige (Insight)
Reset progress to gain Insight currency for permanent upgrades:
@@ -274,7 +291,6 @@ Reset progress to gain Insight currency for permanent upgrades:
## Deployment
### Docker Deployment
-The project includes Docker configuration for containerized deployment:
```bash
# Build and run with Docker Compose
@@ -286,7 +302,7 @@ docker run -p 3000:3000 mana-loop
```
### CI/CD Pipeline
-- **Gitea Actions**: `.gitea/workflows/docker-build.yaml` automatically builds and pushes Docker images to `gitea.tailf367e3.ts.net/anexim/mana-loop:latest` on push to `master`/`main` branches
+- **Gitea Actions**: `.gitea/workflows/docker-build.yaml` automatically builds and pushes Docker images to `gitea.tailf367e3.ts.net/anexim/mana-loop:latest` on push to `master`/`main`
- **Multi-platform**: Builds for linux/amd64 architecture
- **Image Tags**: Branch name, commit SHA, "latest"
@@ -316,26 +332,24 @@ We welcome contributions! Please follow these guidelines:
### Code Style
- TypeScript throughout with strict typing
- Use existing shadcn/ui components over custom implementations
-- Follow the slice pattern for Zustand store actions
-- Keep components focused (extract to separate files when >50 lines)
+- Follow the modular store pattern (`src/lib/game/stores/`)
+- Keep files under 400 lines (enforced by pre-commit hook)
- Use path aliases: `@/*` maps to `./src/*`
### Adding New Features
-For detailed patterns on adding new effects, skills, spells, or systems, see the comprehensive [AGENTS.md](./docs/AGENTS.md) guide, which includes:
-- Architecture overview
-- Coding patterns
-- Git workflow (mandatory pull before work, commit & push after)
-- Credentials for automation (if applicable)
+For detailed patterns on adding new effects, disciplines, spells, or systems, see the comprehensive [AGENTS.md](./AGENTS.md) guide, which includes architecture overview, coding patterns, and git workflow.
---
## Banned Content
-The following content has been removed from the game and should not be re-added:
+The following content has been removed from the game and must not be re-added:
### Banned Mechanics
- **Lifesteal** - Player cannot heal from dealing damage
-- **Healing** - Player cannot heal themselves (floors take damage, not player)
+- **Healing** - Player cannot heal themselves (floors take damage, not the player)
+- **Scroll crafting** - Violates the no-instant-finishing design pillar
+- **Ascension skills** - Removed; no replacement
### Banned Mana Types
- **Life** - Removed (healing theme conflicts with core design)
@@ -345,14 +359,13 @@ The following content has been removed from the game and should not be re-added:
- **Force** - Removed
### Banned Systems
-- **Familiar System** - Removed in favor of Golemancy and Pact systems
+- **Familiar System** - Removed in favour of Golemancy and Pact systems
+- **Skill System** (study, tiers T1–T5, milestone upgrades) - Fully replaced by the Discipline System
---
## License
-This project is licensed under the MIT License - see the LICENSE section below for details.
-
```
MIT License
@@ -377,8 +390,6 @@ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
```
-**Note**: A `LICENSE` file is not currently present in the project root. It is recommended to create one with the above MIT License text.
-
---
## Acknowledgments
@@ -393,4 +404,4 @@ SOFTWARE.
+*KFd9_EeX-`{C4-bmnVY#%s81r=cU3)>95Ho0YU z)$(sI(dOG8Oo+(lvv2Aab=S!Te*|+(+V96 zv@Ll@y9ptlP&0%`hYK6wQ?yvi@-P@HRRur4`shriYQYh0b}2OPeB>sqhc(N?-)K3W z5OY_7ZIpn`+*fu|QE@EIISFeB{$V)LtIw$!q-}RLp#?EG#?zuO3_MabIp{iX>al@` z%l1pRD?a^&7L_*ymgOfZADL{O9MH|pnaaH5OKU^EHJz^%gPn7rycEe+02WPZ5adZY zJc0b_?shm2S}rrjWPaM1m33If->6;h3N{aeTlH&dYx>goE&8S=EKimNks8mgx OP`q#1)@aT>%XbjCz?I*NGlRtYy6}4(BDZ9tg12C zd(U}bZAUHd#wNkQcCK|f$RkY{Y=y@$+QyV%w)qw%QWd8nH+6@xqcr?mZb>n^yL}2r zKO>*9tMXcG(8-fr6bOcVVCBa_HeAg?tzy$6D!(J8c+>|%6Z$4X-@FVxT|QQN8UD5! zY6gxD3keT|tdaL@!CHe3GNUFJzkO=50hWeG_r7x|zQRk1EagfUcx})_yA8^0Fq!y8 z0N0BxEzn4Qi590QzIIT2|K687yRfhx9F>(PpC9j5^-Rpn+{6nu4onVPAe8cySP~0= zR0AvZbcykC0td^vW0%XUw~hNW2)e-(B&uHzl0^P?FVnp)+(boJVjErmxBPbdh2@=V zR-Q35O~qGUF5`n+qnz5J!#06qoJ#JFvhyK#{CjRNM~DrIpp;-&qgS9=pdC2{)8uid zYkR)raW#|EHL*KR)Z3*vycI2A^Q!1Q@5As03H=sc>43ap2F~r@1{Z`DmxTFFUi@*N ze?&&8#uAnjPDY5!Pc8ps>~D!*owwl85~6M-tB%AEt&+P_?G!4&6%vvfr3w^vSG^=7 zRE4D16p&Lx$7X_3h&=;pr7TpR{^K{bb-12=d~0oL3LrYJYnYhG0guco5L<;?HjU@r z{ly-D&-PyEeGhjyu>fLn7%06D0gB7R&CQG*k&}}X6T`YPFYXsXmG1t#eC}wiNDu}H zEMjCHhHX6*zRlHu*ODa$0D_)JX`w`Gju#&=h5t{<>WqO4m8Xk${jz$UO~WXloU!-_ z1wt{v`uUwn;*gor1 _%E o!Q+_gL)KalpiWD?!@ !P<}V7Y{~4qmfMaB)UJ8R }un(0S z92Fcqy;_Du#AZf`wF2CstvRJ?GVQ0dNgLFTJn&H|V!_~# z(9y!OuVWZ<;BHCiUhaAjn>9U-XKV~ zFHZD NRYPIG>rECpzsMYskda2kOu@T? zY=`q+DsRO~c5I< F{@Eq@3B6Wrs!+9F@5E=uzgN}M7= zZ~Qr5Yo7dM2<^nQyzBlf__fmE^~17rA!D)_(rp6^%jTgEsQ&gg5P1r91TIp^rg2F~ zTf|`Ldqd*2j|C08 LFUy`vvYBOSlLDKX0k*&F}ybsHv zg}O~$m6YMnT}uJD4s^Z1tdFUX&yDZ8;Pr4?>3pESQYt$VKrDwyc@Rzpi&W|~&q(Zq zfr$rJ$t?)8bxD^r?{*18RTrRDoIIixX_?n%qnxywC&39uno~c~&rJ-LE+*ipTsTv& z6{x8%6`mOTbGTQMV~7@7v}0}%m{JcH=qRs%pL9(s${n+hc6Bp>IcBmi^@DTy9-pUW zOKvGi3SwB6J$0&m?g=sWs{M35rJV^FJCVN+=Cd$u7nt{uR1Xg%3^oS~c^ZH4CpF=Z zypeGbJC7|U!@b=RDV|Y*rv6gv$v}#7bPsL*o+~@!*2pX*jXU=8A)vs3@gVde)UIGy z`-R#^X8huYlm4KCpsA_){I2}pU!?F9hP}_-E@yS!-vCTwLS=+#R%qAfrBz)%j}_uj z(YoE6(BT}pvMLun76QMBTR_AX1!TudksZ+;}1U3Rx?evu9^f`iU z5CwTzY}Z4@f%BVF#J+SyrC_oxGeuxKb1;%~8*1yywallo;kJ9Nr(RQ5Xa_SmN2 4@N zbpk_y`|SB+|4`dfXTat9-Z)mYap=Z-5i@ju*6GD#* VTJ<=Gua z=u@&VJ?=B1o3lMK6{wEcGUNTv_rc+Z1=eb3dyzH`Hz(apjTh$Kc-M!ayX81^m`e)t zuZ22-V!Ppm+6IX;Bjap(-h`>5D1) Qf< zNwGgN2n>G<^di6K=(Sr5@7sqf(edLyzNul&+|@}q+j|t)eYXSsg5OJ9koc_be6|SN zCR~5sd^;jH|IM1T7CV?gY|Dg2M4k&N^yd Cg=~p!K z!wRggnQh_>tWN} -uC=@rei~|u$h<@ zm8lh4IQbK9=CQ0@gSYfTM2RwbachjpWU)lIyW!?LYu)XLd|Esi Al8Rf{+*DLixmm;%w5mTPWptT?;4gaqV%`YKS6uQ+O_QB}(2&smd<|X0OwPjY zn7~c gJG<_as~nEA|Kv0UNd%}m8|_TZzQYvX3(%G`N3&ZWi;+cEDQv>5EmLA@ z69nJ@O&XlvzY 6QqPDn$A2Nm!t}yLD>7hBfE4M)5_mj;FnyL(r`24<} zuo_iM&a35R@NG{Xz#};oa^YPJ)@x%}2PAge;N~>-9{&zzvUJ}L1r9Um;Rbp)H|=Ap zIAL0DFP`(J&%W0}448aeO(}%HF^`EE?(gr<$zjDo^{ ZBT4!K4JDi-2PJ2xmK!}v6&~SdT>Ae{oe%t(eZD^eh#Ma<|*S`-$ z(=ycY?ilRjZ6a^Tgp?I!0~uozOM1r``8b`~&tr_@rVr`rd3aTDj@3GDe hp!+@b^ZgZaXtzYEm-3 zjVKrn`D&F%m0#r}vU)JRQf!Pyb$CGw^maS$u~A?IoUBF0$CAqU0JN#O{`5uz>ZaR! z)Jg~BtAe}AlE|J_ay0zT^9ARqKDN)!F^jL_!n)*9DV)SN&^c2Ceb_xR=os(nk5tzX z6K?@j={1PBwZ&yDEG @+sfL!VMadW z?n0v-CL35RP7SC~Y+9-2FT4AOwLJf3#s82GTcnaSj@#h9DmV9;GP|)$cQTvCi_|u( zy+1mP&+e0=ws`pUF{2&Xq9v2sxyU<7iVoU5NNed?yA(Yb;eemhbzU{A;2NM<_R3ii zrCcsJ!99Y7vVs?kgBFZ2bRLAZI;U10aID_}2z3ZDD?M8bu4h2WmIP*#R&m-6fII-@ zP~uPjD2*mW%UA0b5b04DLPLj-I-K N#8!m-G_u`b%O-+MYjunww%?CXn4m)G4AcW};I6w}^$yf76|S zog;1ATC*y4)_(OLs0H#UYejSDtL=rf+PL4FMiD3FBm%eG8obYyLu)vJ{wR#Gc n#xkjoxzA^}T0jrbT(nLZgU$lU5i1D2cD!Do(@jq|9XDttqJ|U>7vcpEL zwiMXD?`CJTdFz8foSBU1_Mh$p(Rk~D;vKtjA>h2XO$@!N46yNxg5wi!`L70AIH$6U zDy=6LjQaV`d;aicqRs%S)4h8MT+BK5^rWdr?6U^B{H|yxYztV@davCkLUIH4@heD0 zTqI8_GZ@QA$QqJ5^%lwf1Lx{&8YU|o;@8>ZyDO@yFrPlru6MK(N5S2DfUhR&G(Uee z3 p$;Jqh_ADNQ(Ufc2sAZ$WAPF>$7{4Do`^5s{d!SQj|tMUCtfm=9WRVo$3 z!?m^Fl)MQDClT=6+6$lbPU%=(`m>J>P$`#3(Qg`}Zx0ORRv@;&L|dG2?^lt?#K^iYOrNkq9`u{!VKF_X7U~IG=RI(`P~} z{xZ6FjU!=9mTTrWH$6K;Ib94?RWR?>^njRcCHZ^>sJrEjD2MNht(8U&?@qZ@Z*7vY zi1roPo)%T{Nd#T##Sbe{-?Y}U7jAMT4vpq(nW7Mzf}V{{>#@98bPnCQC5Dq!NfV5Z zk9J dt$LmHUYc4e2%(NVuw)0j02QWhj#sj0z-C?iMVHd2Cc3>CfP1 z^u^sjfA-ryJLe6)O4)+dSl*9r&K|}mOqGPnAJM#qYO`BuD{oI9`=K-V31@tG^$<@O zdExU8vz;AR3fQA*YI-Zj)E|C(xDS-8Dn&YG78b#*5A~vSA}xSCw{=I3p*CHJ8ravU zcH>p~kB?l6aXDhxr4U-%DTV!GudG~tl^C$9<^1L+);dCdZ&GZij~o?q5VjHG)i#@J z59nruPZW=MLOXbeVltJFm379Ua2@YGz~k90tQjAcCyQ{z`zl$M6ZB4UZQI 42?{lbzW*5BQFOSXk$>y^G6fY=H`+POU3`C=FmFtlKapa(a1r30^PMV)p_r tyfx`M{uZ5M_^iB84 zREidO$FjZe`!Boomwh15 jY`jO8`S$Z;vhNCS9xYN@#5zA0 z5}JNMjT@ckW@#M}Y$Gc(-&*@z(GNI{|7!?^KB 3uwu1wE+y*F+j8(8088xQ@gR&9b( zu+ScW5y2?C#pnAxT-VDAqXD>=e69xD8K4Y6*_lyd;Q-K$$u{*9@JSPdQo-o!*4NJAg)zT#)w>pm{3PvOVrT!l_ES^sPOvP{m? z%l*=~Y}azfdOF$3(WvLa*zUs^!=SXX*96aWAUdzA0&NFq-Kb*w9G^ s3Q3~55N I5C Q>Y9a6$r0bXPBa03gO&%kfPyV5W)qdh#PJUOO4T(Cx32LSN3 zK(cw^_Gicp-806v+s@gJ(yyGY3cbz`P)hkuuN;6ZaBST%0F(4){*ugjdz{_kgkD#7 z77~knhllX^`5$-)jzsB`la;DV_sieETXuZ*ZoYqinW_RGLfFq=A#tqczt*s{vH~hk z9y8IX@NmrF-l$GPJOw7pbNlXoO&^_d*GMzkS=N63!ybqJgs=rcvKy0$1EZYYkDR-+ zWH)uiRZPsxd+R3YC;P|iTWeSQ0c46%iUOCrCU4%nsdT>H)dM`nLu@(zH{krT2G0)1 z(gBXqaj&WQlC(Npwq2Km^SJici)TWTNwgt s%jM6LV0E#OpuJEIg7^7L${mwZN!=;0N5F@x)X$p8}X#N;;vo! zX=TG(h%Wt7@I$^uR0vvZA*@dJl}%)aCIvqfhPM7eRbV6Foe3|(qbBI#RI1P;zGngg z)nA$T8RNm837m85xk{l%iQ)Qluv>Xr$V5jcB_|~a2uzD|d;+*n1w8j`fm*Yy>~M0o zq1TWF6+(~OJ$u(0b^BJ+eERH%o0~r_=f?ugC*W%>8!g8<9EnO9i5NL4vxkaawin#m zIyzGLan*4(?kzk47*HUf1A {R zt{pZSl1}^?a=mp($~wS2xMhC6)58eW5kryR9C_a*iemQ{`G{}yUn3v6{&$=N00yB# z+(Qpe(J^L9x`8KGO0hCY;S9ri=UD-;Fpny0RXrjqiO=$})b4wh_0D9I&~Wz|tr>l6 zg;KtItram0+(<{t$Jf~4mO#MjAm@r-|C(Qa5V3#ut{azL#=W#C`&aFoVnxLFp`$lz zmYPIVz;64t-xYz }6|dKn^WAZgzPs h6|1a1;D-o=6qyWUy9f?)o6aPmN21Fc&%I;AnG*4 zy_2-vOVVG(r3Y5p3MG}CoziC>fJWhZVolzt4sc~5f_H(4Z+tfnQ#_4<29j?d?xY*o zYqqVtkAsE;@oQgvTKA|V>nvXeP>6t!K1AM^mxl)hqNBsv;4KK^teB-3Ad+2oG#KPi zyw|}JWC%P0!YBX}`0&aUPn-QmWcU1YAyD N~2qLd)CO)mU4LOqdeYon3H_+5%Fg|DcfV$}X@)+~_Dc?3?8rqu}y7-fdM zTSO!AT2QS7UexSu9NN(__NG35wIL xc~h5IzkJ zG)OvIM~(I@d9DXuF|{QFkJJAXi ;=f4;Q4F+sW2?B%WJJ4QT8qu&@lroG@3@t z?kh4V_Qe}v3#EKrfEZ={FEpmhxx}}LQKWRz%bUbj%+_;JVkW-RjXuoT*|Vssaf2_! zT>l?X3}z9}0aS{Zuf-MP3D{+a{D9p4&?!bu^0Ki}HPG%G{FJ!a+gtsbS=~}g3 65!%J?1 DN7E}i6pZL zf0g@QV!FG#_9d}O4d!xruGzY4@O%|gFE^EMw8TMc?Vl|!|8Z1j(^$6)Hhy8W!=*2} zy(cd vhG@NM^He zQk^CjH-0RekX*jENco@WpYw{pLD>Rk1TGdnsH~@{t$p2>yvuhu#R^QXz)&LSeQRK0 zK?iiCtTq@IGYm`Pt*rJ&yXBt%aV%08BIvY!HPd6@7r~1i_hvl=tS;LnsI51w-`D_5 zQZ<5CCdFWP-86zjHGwma&EMlJc82aG_>SN^X})Bo`n%T=7Z9nZx(=Z9pZ_azzyRx= z*z2F-xKoI}f1pC@-7&3Fc(X3IUjGys5p+IM0~%BZIYAT2z_2i9J3CM{g7{aD+mjV9 z5b%=u9F=ezZP!-Z+`oaZ)SE2w1KQd}!|ciS<@N!6+8sbt!%E{- VL-7bN!tf~yD~I>3Xmvzi21 zEI=Rwv%9X>va-WM<@TgBgkv-L^hy`V1Y6^~ySvjpR=B%oTjcl;V~ol%C y3j|acl~#IU(Ms=~Z<<&084M WYyJxkeF;vvEWn05+Xyg%8H z` is(Bc;zB?t5(}exa3>b@TlsSdasBHhyqyD zwEEXX;27>;LnC4Cj#K%m^Ha 7nrlxA2c=TuuzQq z(#{9SNZn7NF2$+{5HMMrShy^lq1I^atn5_Uk9L9h1|xx$QDEmQp6+;wmzbhKbh945 z^CkIzW9Hw9-34Pf40GmkzK(2Ycxc(aMw|i&mdDyIIlT8L@E*niZU;vr?EKQEvA@4R zzI&;~It}o=+S9%37vo84YHC>WLR#h@1w1OQv(Oe6e#A2aHTtj2{crf0ja?@$B+$Qk zd#|@N8k3$M{E=gHmSuvvn=kNHgkt@6usw9L1u)ZKn^l5}J^y9bc1EI)sBFmHEkTwb zXM~MwbQ)ir$QftjS~xpNK=T-Tr4U~N3B1U9zPcd%@Lovx)zMPqY!xbmoQ8sYS#P8q zscH>XtIi!NnSHU{WV4c82&xuutBN8zA=BG7>!7&bJ?q`E+5agTRI~iIs_DIZh5uL8 zp!q7EQU {%F`s~61n+x@5!UrM$LUiq41wiHJ*MI&0 ha%-uygJ} z&K#IoS||)viN$#l;`35sa7?M cQ?kc_luvE$NKG5thL6`k$ >OzgoYdW>TeLmaGJ*yJ z=55C<)$0FH0zd}qhd(Gri$kh2gUNr>BV*%l(Bqi iLpMQ4x(p`jx7m=iZK{u%>oy^7|R;&=#0+}jw{|6s?Pj9G2fAXHH?H}1V zc?#CF DqL~Ba%L7`eSHaHqhY#2j6dpW8(Dp|LbdP-&34yq9v@T{rR%7 zwzOWA5x!o|M?_?T$Ekb!mQ#+2FjPfT+3jjTK(TKuE{7rA)6{+Y<@4gnv$x?|H{GYY z$-%X|ptg*=hXV^^c~$vOB}pN1L+Pp36d<+GV(c$ lZPW)3&rIcI=+Y{V=$-vS&a}*QP(x%Y$NCdw =0p7lXk +)Z9pzA;1I4Q3;Z>%*z EZ7DTsqZHf|rI|^U_st8RNa9AWG)plC-AE1e3Ba|70 z$9rCNjH}S%U 4nz;>D1Tqe<4*CmF{(F7ra6$bI^rxUMqO()-8<*xO5h+xN zeWFs 4o3+j)sm&M{C?q?(mg)R=Wsk*UPRhy5@oyL}ru4(NC|cv@Sh zW9tS1jptigGihlh1=EGgziD8SW{LV_0;5i2`bT%0zMxe@fh}0Y%>1VuZ~UuR$4y5b zsOT_a%8~J$;;T@ifCpgNlob%gO2#_7IJr21UGRn9!P1n&qtgZy#|qRjB6KQ~h)I*& zT%Dd?1zJE&)j>?BCfVob*E=G5xL304+B2Q8CH6(Y(apgvm%Pd0(aBId4i-vxt?Adt z607PG0teh`4|lk-Dv2O4M;EIW58JtUny6M0IIIMxru0s@dfr^Urn6@qKCzya%o^Mx z`4g-%)x3NF(D%0j*WuigW4B%sD5$~TB$HTYV}{7%Zx62F*DO ClON2!teOa3*AnPM|N9YBDYKs8sU_BjG@L2!40*;V@x+w= z *qh<~=D**h$rTiw`gAm+JW4WQHL@v_OjuKH ze9MHL|8;v}wR0CUoOQiJ_Jvrhf#e<55VQ~~TG{)bYU_rHMUuWV#7JIb<2!0t=`sm` zFyyY`%Ymi!)B`n;HDuBTnSd7GrN957r}a?>y-6((aSh9ay6y2XtjblU2%62{Ap5y9 z)-EC}!%A4qF)XW6rYXZDYG>*z -#!J@PJ zdj*=#TE0=-dle*$B|;VAUgGT{z!sD};d+5^y$JJx{r!-8#&^ZN{%tD%)WrDvkN>+E z38Yf~ZB1Z{`|q^_mtOfU>ixGBfM@hSUjP613qWPpDi9GGraZ#ul@D~V`*+NttzoO%t)tyVS^PS*uX&PdT(`KrhKYGkXy;{oh?ykGC!<*G+tYX>sTlQvs ztSYBG_x4vG327dI_559{RtNi+*59jNhGQuxMR49I6QM!?D3eeuyF4j~h3xiaL+IQD zo~~xSJqgHNDB&y_V W-MaT~T+b;f z@|QK?;;92uijz}$xWl$*LvM@RtrMcqjhrc8jB(S{=J*(sC3l?n8v(kgj&YJo!FGI2 zerAkh*8K3lGtAoK&p@;(|53+PN!ryA9rEMn%hNIbh>ai?%INi-WdqrH+Zx53wx?Xw zG<3(7ze6U@j{fZ)7tMqcw%X>g`3*VdJHMB4XpcP)0!uT0|KNUN)`&Su!$ia5Jf{kF zW(Li67GA8%l7Q1$-ak{!G{|j} D*-z-0>4@iNW@-vPXN0sOq|W;yry{#E z#%d-i_U0W#Q{X1vjFl21v9xB%c$*eL+F03EMiuVtT#owa_t_8b&ybJY1bIl@iG-nu z&QY(O%w-`>-fn}uBI@I#{akJSK2!6nqu*17^*!a^^7dC^qw;AbfqFO~-lnlE1HLX9 zj286du#OkhzhSf{4P;&A;i*Gkw?x &$qq#RB=m`LaWhnT>a`UV5l^#rDDb9O-24c+qx-e;=8m@6)h_u8!cQy##L?&e6C! z4?ySpl7p}}aUn}tOU|w+aUM_ClYhq;+=_vM0j%aQ{)3e^caO;NcUz|J@ON7Y5o~pp z`C5bUg0;=$GE?=bqeSo{Tjhs+Mb?$hCxGjry4nYw#eeFbZLyOi;PH82?Bw^vuoXk^ zXUM!?#IKG#Yf>E}5v2Rg8N(*Mxx?!-4L8tU8BD&DkSg6zHJ)Hs|21u;ZYU_%y0fsX zxR}eyIkIY)vb(wc3~hUbQD jaAsU zFi;=ixMEZqw|jJY_-JhZp+`<{8i 7Ou9?vlZ+X25f>=i;P&*eL1D`K2Y>(cT_#It)5z|78VjO)*>Z+ z(PCJdqBZ6D&^MWI T0%DJ>&XD+?zPfR}akQu`kkQymMj_{``nr z@gIr7&K5x`88%LO{PgK>(U(iM)j4o2fpn}_&h{LQ-HVf0Lf~^a9%RsD*Jk$gwj{Ue z>uTZzw1g%Q#z&`VL?jbLN5sUsJGV`JeW*hCoRr`>so9Jni#mtUWKrMElL*~i%c)-x zCu1ulf;atFV_i-}_1D(KLLBLa9*;}72fN$BP^+jc;B|5ZY6Vg8aPcIr0_6l>y=Qk2 z8qtRN6pXnNM&Rl@OdnaB;D+0dz#$0+#`Qf*pN}!M`kjN?1`Zf gOdwKB?<*gplD*5=BM|EO_5`ZW0;ne(tYU3U o|BNycuP}8W0fBJq(2LO8OaXnxm(DUmhR@; z_U|^6r?C^z3+i^uWGlQwSpBCb4! 9+I YiEcna;PD&B|#fSz2n8&9BJh@$Tjq6ohB4WwmJM$`OZW{sal+QwOFL z9=rPT-*grh4wDCDjxcSFNiSZ~e4C#>rvpS~v-^|9a$e`>dUkfb$`)j^*IS##^+)Zx z@pcvEIUF;!=TJ^ezKcIa7R7Z9N53Z;CmdbcA2LAmxI+gH`!ZO`Te4fB6CRqo9a_YV zdlQi}4uaRr{OlDc8x~2L*1YGfB_)Shtqh52X-Q>PPb%9M=xRPrUvO)(+^%LDOBsO# zhJ!p#EaCaklJI+jVHqMD37g)rvEHldvnV-N=wYkVrj6xH6fu_uKGAhWWs$eyVVtzb zPLS|#b+XGc?`Cp*k- Qs+Z?XyWG`{M`{s< z;shq?r0dr^$;08>?rl^b?OI=&UHXO>b|6xYZ%@l~BL2r%5|%97!yMvYIY0ibIRB)W zTW)ja%1YkbaHTXCnC=}E%5#;^mD%leR|fJ9co`~luDZ4HpTE`jw{z#rurM~dvors_ zzWw~mz(X1s{>U0nTCi%V(c6_iyUT!lg%(M0)0RaL+)EH}nIKYpa$C$tzk304&8_cJ zqWwS}r6ZFRH2 a2+>-b@j9?G{f8QfcOGkl;6-Qr-|T?R!CIQJ)4I_uW7d z)!RjU1_!!IC75fEN<}x`HVgh~EZZmIpxR>?w&ZjGI3Af*PwmV xI)6~mf@%(WlR z2LEJCx(0GgsI`*Ekve|H72EdlGCY-S2z|5;6j=<2fX3rzXlPA1GU>d8PDwT>;uxlJ zOuBS)j~S>js!)^(9y4#m8;p9pv!l-+{2K+br-5}QxI2j+0Y8ObTx+VfU~O^$Dq`?- L^>bP0l+XkK&~2EB literal 85625 zcmd?QWl$a6)-_5Lf`pym1PKt_9X1v=?(P;KxVuY&h2ZWIoNU}T?hrJ%LvVNB*lqHh zbL#zbs^0IrRrk+b)kQ&9H*58hIp-K-&R}_2F*Ia+WCR2RGzoEGMFfPGxCjVOK}b)5 zJGYjn1qe?N5F~^Jm0f4|7F=90#NdcWQRL8>==rrpkDj^_kMeE$xDPqelF<#?4Cjik zs9PG=Mp0lO$QB5xDbawbyXnuOZ5;HoR#(Mm=-oZ&O*@BZ$@I}3FE9G2DO&@NZd0~b zHILNH!)n8GpvS-MkLtkh7ytg_6Y_`XfB)Y4LHq+SoWIRi!n9j1p7)5&{Xg%ahVL(0 zx`wj;m**qJAHV5ui+LaQpSLIkNnic@zBFX_VZEv|dyDK}cYGT 4Y@En0@@9YOV{qYv=0C_GsQ5W+|gjQU9mb?Mt_ eN#0C%8=9NDnImrAzcW`gp5(D >{uU5j8DyNAN<71Ccr=bA!vEb+x(A>~X(QQgMZ|RGx^x$ GME3J {h~8kDuUck(HGlo&lCcdJ` Fa5;|ddZ#< m4xGxTrAI*Jh z9j9C0n#+>URBSR)IuYFOxo-n#A{2jXkF|}AtDV*La=k;%{QFIj^ZV7$z~Eo_-5J~( zE*}V@?GG-c-d2k$KddJ09~NKF`I@KGORG9kXQbE0n++j39_tXkd+-<~rp>}uXPU`w z+@}!<$|;1*yQ+|wF`H;UAKFeL`@LO7kEOAHp1V^b3r?}v#Is(-wsa4eoQ3Ec)yP82 zozd)%LVn0Ip>H!Ka$9V?vuXMvPqnkN!;soyyEQD-6G6Cn>>9xf@1558#mryyX}sYb z+jlKz3Sv_KfmccO6wXoA (zO8%iR0uL+7#bUI_a*J_sD9HFge sw!{CPQc(@hU;!GrTLhwz;W6DmweZz~Baiw<9Nj_+EQ+>_D{f%o**HM01{s^cU4 z@HyQ$yPWb5A|z%ojR5#p6nd;AngHqi2}h@@DI9H(iXL wpL@&0{>a`cl8m zl>Us`&zfsfaU4~gyU=SMH=D-8iLN&eje84pN!XSzX}c+JyRLd(kxW1Yy|l)}>0ENe zo&+eXCpn8#{2cq);G`L*I7!nh#}>W_j4+Hmfv0N_UnM~_chA!1=OFijax$2XtapLn z)=m^~!}HfCCnt+no9_biJ6QG$6bpGBkK`2<6@|Q>k#vsrJ6wNXuiP9Ul1!1niMiNY zBrCwMtxI(~-7NNSOiN0dc^^+3CC;E*=gNI;-;}9KhplB#_w4D@cm^$eEJF6*D)5V4 zn+W2Ddy9)>!=A8=gXyM@*;#kncTWwKM3kzfsX6nL bo~k&`kIlqCfQBf4rI_Sz&;{rjg&;F|m@1zym!!TW%qa6 k^Rn&S)yC6S*T3J>uLMYe3vhq8ZDVy zQc}_%&lsYG$vN8bUHk+1s;6yWU?6@28=Q8qvjO&kpLI#$u;PY3>9QJoR +f8$G3buFzqt A AG%FQ+7GIK00Rt#^=~0pV7f3!nRg(0Onil3{kRmTZ%#%z>-W4@%}kXi4r| ztjn7Y4a8|qaza{TZJ{y!SsSePa5K$O>IU^x?1MLJ`kO4HbL&`@RT*mJGI9PO#0Pa0 z3rYymRNLGnpRjToCC21&s;9M%pqO 0 ie`Nm=n1 zxJ{G2+3EJ@uNI?#c_u7A*Y=Qud~33)vh(5@K6 z>w^N;i!iUv_PPL7Rn@%GiNFMoElLM=FKaa=j_2J)s!53;gPv`-tR(uLK+q_S1+l!0 zR9;v2joyO2_u*+v<6!2 _>A^29u@zP#}GB)4CB5)H9Duk-Po1w${pHuZXW*6#1`85^&@Ce$W~Q_Wt?)pVW) zFL|BnC@aUtRb#c^TwQ6a&%A+r-|cr2HsRtHFWIBBDI)c+auJ8$2(OX9fn+sx6i?4b zsUJ{ +rTzBM }g4LOOw*%079 znmyNSC$~T0wA8A#6l5$zW)|3gC(Ei{*p${g7txwp&D(AN=~`h!q3}@sy_Ubh|H(6C zYfij4R*4GJ0XsjJR7pK)7oQ{LSM^vzisF}!%d*R`l3(B-V?T>ipIOd-oqItZ-Hn`E z6lQqX=5&-ZqA^_^_#$PH!oPR@M6kBZ@p|-1 X} u`D) zR?C+O?Bk}ixm!*)k=4$>A$*ZYz!Q9HZfM7{ 1=Q?`e#sd$0S!!`E28a3#I{6K*}C{0%Cn{57AQql+#iDvO^Cvpvu{v^Yf z(RgzSLlKb^{?|(#Lp<&6-2spvpIq=K`5X%FxJ`x#R`UT*EGr{H*jH_T*Z*sX#J>pU z62>1g9x)OzM@~-eANjjX-V0k|cwoSCsF54+ZaWTiLaxLqsl|i`X^o$4`bPX4KiuJo z`hy&juYYdUH5H24I9mkNy#Dn-crREy(pZ0n7bGa7`5A66W{p{P8Xn1^7X0&6c)|_- z)*_+x0{*sGbfKX_bV4P~Db;G-^bm(nJI!b6 r zuhU8F{anj3lP`#6t90DinbR}OuyWcT6er34ZT b(;WXy_`oiHG%E{n|Nd9wL87iTuxSg 7j?j7(31`6QUN`$ut!1anm$DWx)ID@|4=!H{lR`Z`M$Y}d=!;HH> zGt4=xE5Y1BHieZw?Q5RqY`sAXK0{hsnm-5yB}A~cwYEi{6qi3k4#~{sT_Mja q8BBmVGtPPf98;?v;NQ *;~#?Io9Gh{;8diWVt>&A>n7lTDfuktr7Dq~~SA@9kOFZ<`@ z##QN*1ceP)DtKar8>kTluE<8NC0q?Degc147{4E5+m2p?Ke@JSZrNz8)Z b%AO0hr e_juy#Z3t~Q0<%C{drjseaRoKs$J>rNs;9iieA|K;4YSVpp*0T6QC?|vP*RPpv zY%!PQFJ1Zz`{|^YHJw&>s+asWSs9BTU5Weiu0&*yL)aK#%E=N)c5COUB3gN|K4lM5 zf)=X)_)H|^H4;t$pnz{cSf$IJeaBc$Jt;&yq5!Jstei{yV>C&3L@H=Ki=zoJ&t%v@ z 3692Ap*4(E7kn$=Ac7gz@WLhtZ(wt;g*Kqz~_7|ghl02oa z0E0??9F>wHh4cyui3xM(k}p89ZCxjWM%{- j=pXqd_Z5xf zfx*GKxw(dhdXE+`vpp%vhi!vsRVd+LHH#hWr#05Kg`}omR(sa>lkb9-MPKeW?Sh{> z=+7^E67ta}VbfIaD4GTSC{vhM)Yg+lN-}kP;lIru#vZJtZCR2byJEaM|G^q|N9-nM z0}*#{b2ssbk%dNasMSnjCo2rnKft4I f4=kO6Z3~O6Crw z@}0t$!h6X4l~q*nB+Y+XJa_t z``uH!7uPS~10&URzN#Mgdv5lIHLts~SGhN}a*FA|4q2P$rgUn~-nM`Gf5z8WkEt?5 zXfm1i6OJfk9`q&2N`$CpA4G>(ILOi(6-$>8hPdn}%RHhjIAvPbaVSg#yAXWpdLK-j z+&_v~i|?X!)Pwg(lkzE0VG`?QM6X2a)!xF7>VrH6dfpHb5fQxAR#rco+_hQocxdA1 z=eI nD^&e6O=9#~l-#@a$hv?$;5(NbX@Y^#QGcC8bC^5g3sW6`{ zs6V5mq=bkYiyEsMtD34)`L(rr+l#SeCw9ptHVN!cPlnvU=w$0WK6!bZ*5=pjIM&P8 zBCN7TOP87reCa8*Y4ARD7PQE&4C|n>On85&?QwVh%kNa~_9N0G&__#=LDILkEY^8C zyDL?iN5nR6hngy!tCRBnIvy)jKwcZMbmKc}?UCC_&C7tg8S>8*7f^r=!2Aks16(*d zF<2T2w%P1aR9vcOfCs{rS5PQ->R07yPJ=>sC%!}Ve6HF3+T>~CylR}!juc!tFOw=w zocnkph 4)T)wQ}xg(NWCpZ>`R3k$PpIldr^;9nvBQ>qG0Nl8{xRMghd zF&RwHE#>%K$4B>MW_W2B*t0<3zZynt<7(!YpO7#9VYbFeOGydCuPu?!h2x^hZf!gc zMNy;&vqc;+UB@H;%(5-lZ#y4} ;$S=00rfHpu5h33!;^2Jo8Uz7vdaSi zu<>rA04m;>N87{WMhKnvv$mp!28_$P{NAp!^IL?#UEO5^k@n3WkHbb6fI 4}F9 z54{nblJKzMLWa6o?bBaB4pG^;r9(_M1?IB_$1L!RLW6H^r#Dc#%*y#O-k!wJBttnD z9)`<*b2I#?9Mp*a7gH2sv5RNDOT?0iJY^9$U`f@e9$mMP+UA^57pbow;ALa`$P65} zi>yWigde(qeaB+;=j~`EN;v@UG@rFg!J~sQD8by^x%rn~nr-vf4lVE#XlZk!w|Jxb zpt+vF(vugWV?kI%5tkPYHa4C 3vt%tuedphBBF0B zI~w68Q4;-&>0G6?r?u06L?RCsY+%<6y>4bk?Vqc>TvTZz{>wD-cXoC+!e^l#&WD9K z +FUbp%O8aVe^_v725b=7uziYcl%RI zKvbWrSeTZ!005jR{>F=-LvP&qZv5Bu{PSnalk{2+4i33*x2g0d5wnA3Ss#v?eQu+i zd0}jo)k2oPK8v~f^D;TX2z%Urv!hYm$lT6lQ9g(Z92>SD%1*wvq4V)}Jeb|U=bvKt zv=+bu!ihkh3bc~1PbN~AvC9#7Ms4-W)j4W7+S=Lx_M?rYjZgRd?8NiX@6!9`ymn{D zoFRe7a5A)q$Y(Dmf*+<~G0b}tS{>)qzWuyVd1qy(!t%NT05E7^resoH-rJjuW&wcx zC>ki*h&Qh1UKkv-TKwwfurUbp7UyWKX1~YThJ&~J z^BiEn|F-{~&h@9n>hIIGK|How2;e6OpVa?^{$J=d|LXL=Dkl&j90Y{cvfTs4EDQvM zM;YqRkl+6s9q|8HieYp7OR74THo-+TG-iBSZs+^wb}wo!dW9nTK36PwxUeKi-|8TA zSM2SjqAx9(y6$XkU9D~$jsVk7hW2=d>M$CQ=0ncU&oPmW0Ii~^xEStPJ XZ+*vHYW0mG}MmuUp*P- zR#v;Gxf+!w_jhqEKSB`PP0gS*P? U@G2J)NfOWQ1dYQl)}+CSSJneZ-B#yhyMd&XE$Zd+Jk^w)6h4&f?;MPqPAI|( za^R!E{Y&EOq^Q^~9I20*@2ak*CYa N6vUDt9`FDn9wcPT9= qX~s z)-7#|JE_?N1_`s~stRFpGfGV4G!sKY{I28IOigxaqV!Ojn0Oo-kwM}7Y^@pf7jkRx zmrLu}&mI94(?M>2E(YYF;c&6B@wSmxt-ih<7xiWRi%)C4V67QxqA p6PQW>Sd!JKJ zvThOL;Fkpxq&Ba~;N7$)B7Bs5eUD{mqT*v?XJ=+$9(7{E(siyR)SQ$qqib)7dqYCL zyBtib=;{h)kC0|ll=#34!-y?+_}VG~Ex>(E9bgf=14SQk?@e^Bl<`oq{`|P%ZaOHW zYp%v-aJYY|<>6z~$JS-rje(@fi)F+?_q!@1Nk9KcRfXLcxuVUvQ=j`KIUs<&xi}~- zDOtAVic*N$CGtufG~R7s*dEQTimieNz6@43Ff-fUJghafYdk)D5b%6hEsV)Wlaov1 zwYoi Q`*fS=v!((o0Qh(gM3qkE;LyTC;0&ChQ=vf|oN_4?U >gZ_aOQ#XE zPz_y8y%}4@ohScnuh396G7t)GvswPQ)L(m%DL(+fu7sZs>Z;w}S3imVFn3C3P@xR@ zMY!Dt$= ?TI~{FbLeJPi z!5iPlMx7+`W7PGDK5vVBeHdZaKv89R3H5PZ9n&0x{mud}_;0$$s+OoIK$V1qCW|8l zhlVx+OHEI2n1dlPGsB(2;axOhdM3xHD?aM; N7q(t{} zi;RyZLm=U5H@MhljjUD-YCz%=4WX5AbNftML~CRtTC^~m#PVadf8@9IfBEuf158d zD0HbLu!Mw5qiTPM3HeUL_}pEV^>(9ZFJ6sv4Ll21w<9?G#*|IArukYSf9y@#>n|?6 zEX+?6aTgIW1!P_w`bU1f{VK -(MhkTF7;` zZVnu%(mH|Z10c&~RzaJ76c(d9Y{0g8(eIA=5@mbhZSl`J8q=>j1J&9;15#>%>&I8C zHRV+}u$}A$s~bxc=@XI?#aFI_PHu(J {+QF+V#lq%0I8T@;tC`}Sp&YNdiHVx3=Eb^C%iCa0kMY~#mX-o26bKeQ z_Kw8>NlBST#aMJBUayAeYW0(}w4=Ojq}_Ux$3-!4nzvc=%&P188ZOg$0VsVOgI?n0 zE1Hc~A_)2RQ|r9{!CRxuw(SI~pMYR50HUC393SxFX4Zv_c5&25Do;9XWqZ5rGYk1! z2}#MF_=mfClgspLl#OFoUP!OQu)xjy>F`^~P#WLmx!O{97vs3Vehf8qYGUGi!9~Ed zdKT!M555JawScy_XW2Bv^NNeTKt3T)syQ+jd3+d-VVfCg%ntRcP#LbYvi;iqo`|$W zelJa1@uQCoMgxShQt!?lPiu5|d~$cATe)0$()<&Z?3Bt4In4|e&%NHR;X>mL{t{;W zW(Oy*m0wv=1wT|!+1h5`%w(NEk3(BKmaI>bLX*B@sLdEsl-m#yjK!t 53q z`1MWU#7 Z&d!tVf=#@ 8?p5tR9NA?4#$=S%{S4G;!k=6Go&rJnxfU zxVI&N#p^1wz1m56{+bnA^Mx!^?$>~ZTHtuL6+Q!pCGX-GU~vg5#xpi(&Q4HNogI~* zo#nF3eCsA#>$v2+VDLOGo BPRs7DNRM#k%-+z@t`h3n=S>iVLN3Yjs=gEl3rhrvnwIu( zWN+L|sRVtPEg1?85hi^j^})|t-sU_xj&lx>E?kZwqX5rC3;nr9Xy1`b;17a%wmOgl zHh$e`-9NHWDIfO%lbDA(zRQ3b^ZOTu@w3U7vmSgD1WDW$q9?g)6(=WlcWy~ !u}AF^eiqG7QEUT$h~6ZgRZt>n&{Xs~;*{bfPC3G@spP>c zXC>BmO~QR5je7VjETb0n5WXA=sxUuCUKK&Nru}1`-QwPq#o*WVM>@E on3UZ1gm6w&-IyP=MK6|)Z=?}q)hI>k6E1*|t z0Wp%-;mq;A`$c+Mai%O&T}uFUF $P zS!>ATkL6+!fT{o%(hcyo4%O%^tl27@Yk3=o3AA0R@!<-BQr$zjR;cfqJ3=is6OtT? zfUP@WUs#o;KB8^2yy4W3jBjM(p!gLsZMwW+goXdB%E?rMTgzu75=K7deL_$Zf(SY8 zeZ&s#(t3Pc&yeMTMfzu{{6SIj!bo-wF2r!v)& 5?+#j spP3m@mE^?QA2<#r2Q>PZoMkC~-4d(7d7Vya0h9+|?AMrE#T z7^$i8+Yx;D!-Nw*>zjyO>nnfc-Jb~#dl0qEuwyd46brj2^9^41$~+zej3L+#^`Mn$ z=nn`&r_Sqz{i}7c8w$*Sc4e{H9fQgyY(S5kkRI3(O{tWxr_6s3YFu#WRu<0#sCA0M zs=#dE)G-`)yX|YY0d2KrP~j wy;(l-kbGn*TH7H1zZn5AO5%XH{o_3kmDAKcB*^szUPcth8ye z<51;a3J0BZ#zZjcm0POE^E9Giui=0oKzh<>cEZk!b55x&)czd}4UIPt|8}jj^k8Wl ztIQ? s7v=CbfJw zlEHYka<@Q