From 6edf2e39ae19545a92a2e70bf31a93caa4c71024 Mon Sep 17 00:00:00 2001 From: Codex Date: Wed, 20 May 2026 11:45:06 +0800 Subject: [PATCH] Improve workbench UX and read-only live readiness --- SESSION.md | 3 +- TASKS.md | 5 +- docker-compose.yml | 2 + .../workbench-alerts-view-loaded-1366x768.png | Bin 0 -> 80133 bytes .../workbench-split-nav-loaded-1366x768.png | Bin 0 -> 48555 bytes .../workbench-split-nav-loaded-390x844.png | Bin 0 -> 32085 bytes scripts/deploy_with_password.py | 2 +- .../maintenance_summary_service.py | 32 +++- .../maintenance/unattended_harness_service.py | 7 +- .../readiness/launch_readiness_service.py | 30 ++- src/web/app.js | 114 +++++++++++- src/web/index.html | 175 ++++++++++-------- src/web/styles.css | 101 ++++++++++ tests/unit/test_api_static_server.py | 37 ++++ tests/unit/test_deploy_with_password.py | 10 + tests/unit/test_launch_readiness_service.py | 58 ++++++ .../unit/test_maintenance_summary_service.py | 36 ++++ tests/unit/test_unattended_harness_service.py | 24 +++ 18 files changed, 542 insertions(+), 94 deletions(-) create mode 100644 output/playwright/workbench-alerts-view-loaded-1366x768.png create mode 100644 output/playwright/workbench-split-nav-loaded-1366x768.png create mode 100644 output/playwright/workbench-split-nav-loaded-390x844.png diff --git a/SESSION.md b/SESSION.md index 8536030..5c5f999 100644 --- a/SESSION.md +++ b/SESSION.md @@ -797,11 +797,12 @@ Automation execution-layer PXX remains closed and its known scope stays frozen. - Added `docs/AI_ICT_实盘辅助分析决策助手上线必做清单_2026-05-18_v1.md` for the urgent launch target: read-only live analysis assistant, no order submission, no trading, no direct buy/sell instruction. The must-do launch queue is P0-1 read-only market data recovery, P0-2 `live_analysis_assistant_ready` narrow readiness, P0-3 forced boundary and de-traded UI, P0-4 one-screen cockpit health, P0-6 read-only launch smoke, and P0-5 minimal observation/note/weekly-review operations loop. - Trader Mode P1/P2 live gate recovered on 2026-05-18: used `yuqei` SSH + sudo with the user-provided temporary password, copied the complete existing root deploy `.env` into `/home/yuqei/project/ai-exchange/.env` without exposing secret values, redeployed via `scripts/deploy_with_password.py --host 192.168.3.90 --user yuqei --port 22 --remote-path /home/yuqei/project/ai-exchange --remote-archive /home/yuqei/ai-ict-deploy.tgz`, deploy smoke passed 11 endpoints, standard `run_remote_ops_smoke.py` passed all checks including `unattended_harness`, and `run_readonly_live_analysis_smoke.py --base-url http://192.168.3.90:8000 --attempts 2 --timeout-seconds 30 --output-json` passed with `ready_for_readonly_live_analysis=true`, `must_not_trade=true`, `trade_permission_required=false`, and `submit_cancel_or_live_execution_called=false`. Remote readiness now reports `market_stream_connected`, `market_data_gap_clear`, `readonly_account_context_status=available`, `product_operating_mode=restricted_decision_support`, and `real_live_ready=false`. - Low-risk sensitive credential cleanup passed on 2026-05-18 without rotating or changing any live credentials: removed tracked legacy expect scripts that embedded password sends, replaced rollback docs/checker with `deploy_with_password.py` plus runtime env injection, added redacted `scripts/run_secret_static_checks.py`, wired it into `run_script_static_checks.py` and the Trading Delivery Checklist, ignored `tmp_*.jsonl` / `*_capture.jsonl`, and documented the boundary in `docs/AI_ICT_敏感凭据低风险清理记录_2026-05-18_v1.md`. Validation passed secret static checks, script static checks, 35 focused tests, `git diff --check` with only LF/CRLF warnings, and full unit discovery (`779` tests). Current tree secret scan passed; Git history was not rewritten, so any historical exposure should be handled by a future explicit rotation window after backup login and smoke paths are confirmed. +- Workbench UX + read-only live usefulness recovery passed on 2026-05-20 after real intraday testing showed the root workbench was too long, hard to use, and runtime-dependent panels could appear ineffective. `/` now uses a left-menu/right-workspace layout with hash/localStorage section switching, default `Decision Assistant`, grouped `Readiness` and `Alerts` pages, and `/trader-mode` remains the fast-read entry. Frontend `fetchJson` now has request timeout fallback so slow review/readiness endpoints no longer keep the entire workbench stuck on Loading. Remote blockers were also recovered: PostgreSQL `pg_hba` accepted the Docker network, compose now maps `host.docker.internal`, non-root deploy env backup stays inside the remote app path, DB object ownership was reassigned to the migration/app user, the local proxy was relaunched, remote runtime env was restored with `TRADING_RUNTIME_ENABLED=1` / market and broker proxy URLs / `LIVE_TRADING_ENABLED=0`, and read-only launch readiness now treats fresh REST market data plus gap-clear state as usable while surfacing stream/news/account issues as warnings. Validation passed focused workbench/readiness/maintenance/deploy tests, secret/static script checks, Playwright screenshots at 1366x768 and 390x844 plus an Alerts hash view, full unit discovery, deploy smoke over 11 endpoints, standard remote ops smoke including `unattended_harness`, and remote `run_readonly_live_analysis_smoke.py` with `ready_for_readonly_live_analysis=true`, `must_not_trade=true`, `trade_permission_required=false`, and `submit_cancel_or_live_execution_called=false`. Current warning state: market stream may still be connecting while REST candles are fresh, news provider may be stale, and OKX account context may be unavailable; these warnings do not change `execution_allowed`, `decision_support_ready`, `real_live_ready`, risk governor, trust bucket, or operator confirmation protocol. - Current assisted-analysis next gate: keep R1/R2 focused on `decision_support_ready` trust/sample/quality evidence and shadow/paper/operator feedback collection. OKX trade-permission sandbox smoke is deferred until the project explicitly re-enters execution adapter or real-trading preparation. ## Exact Next Step -Use `docs/AI_ICT_实盘辅助分析决策助手上线必做清单_2026-05-18_v1.md` as the urgent launch anchor. The product goal remains read-only live analysis assistant: no orders, no trading, no direct trade instruction. P0, P1, and the currently feasible P2 enhancements are implemented, deployed, and remotely smoke-validated. The next real gate is R2 evidence collection: wait for or surface real executable candidates, then collect paper ticket, paper execution, operator feedback, and weekly review samples without fabricating evidence. Keep `execution_allowed`, `real_live_ready`, risk governor, trust bucket, and operator confirmation protocol unchanged. +Next improve actual trader usefulness now that the frontend and remote runtime are usable: compress Trader Mode and watchlist copy around `why no trade`, `what to watch next`, unique focus quality, and stale/no-candidate states, then continue R2 paper-ticket / paper-execution / operator-feedback / weekly-review evidence collection without fabricating samples. Keep `execution_allowed`, `real_live_ready`, risk governor, trust bucket, and operator confirmation protocol unchanged. ## Validation Commands Used Recently diff --git a/TASKS.md b/TASKS.md index fd2ee0d..05e3cc7 100644 --- a/TASKS.md +++ b/TASKS.md @@ -160,6 +160,9 @@ - [x] Trader Mode P2 local enhancement closure: chart context bridge starter, BTC/ETH/SOL fast queue, after-close review draft, and ops duty panel implemented and locally validated without connecting real TradingView MCP or changing execution/readiness gates - [x] Trader Mode P1/P2 remote deploy/smoke closure: used `yuqei` SSH + sudo to migrate the complete read-only `.env` into `/home/yuqei/project/ai-exchange/.env`, redeployed current worktree, and passed deploy smoke, standard remote ops smoke, `unattended_harness`, and readonly live analysis smoke - [x] Low-risk sensitive credential cleanup complete: removed tracked expect scripts with embedded password sends, switched rollback docs/checker to `deploy_with_password.py` + runtime env, added redacted `run_secret_static_checks.py`, wired it into script static checks and Trading Delivery Checklist, and kept all real remote/runtime credentials unchanged +- [x] Workbench frontend split-navigation closure: converted the long root workbench into a left-menu/right-workspace layout, added hash/localStorage section switching, added frontend request timeout fallback so slow review/readiness APIs no longer freeze the page, and validated desktop/narrow rendering +- [x] Live usefulness blocker recovery: root workbench split-navigation is usable, slow frontend requests time out instead of freezing the page, remote DB/compose/deploy/migration/proxy/runtime blockers were recovered, standard remote ops smoke including `unattended_harness` passed, and readonly live analysis smoke passed without enabling order submission +- [ ] Next trader-usefulness refinement: compress Trader Mode / watchlist language around why no trade, what to watch next, unique focus quality, stale data, and no-candidate states so the first screen answers live operator questions faster - [ ] R2 next collection action after readonly launch: wait for or surface a real executable candidate, then build shadow paper ticket / confirm paper execution / record operator feedback / add weekly review evidence without changing execution/live gates - [x] R3 OKX sandbox preflight starter implemented and deployed: signed dry-run request previews, idempotency key preview, error normalization catalog, `/trading/okx-sandbox-preflight`, live-readiness summary, cockpit surface, deploy smoke, remote ops smoke, and remote field/UI smoke - [x] R3 OKX sandbox isolated smoke tooling implemented and deployed: explicit `OKX_SANDBOX_SMOKE_EXECUTE` gate, submit/query/cancel/query/fills script, JSON artifact, proxy reuse, permission-error normalization, focused tests, full unit, deploy smoke, and remote ops smoke @@ -906,7 +909,7 @@ - [x] R2 historical shadow observation backfill audit: prior 14-day candidate history scanned, 10 blocked-candidate observation rows safely created, and paper/operator backfill correctly refused without executable candidates or human review - [ ] R2 continuous evidence collection gate: `shadow_candidate_day_coverage` has been cleared; now reach enough executable-candidate paper tickets, paper executions, operator feedback, and weekly review samples before claiming R2 phase evidence passed - [x] Remote API/SSH recovery gate: `ai-ict` health, SSH command execution, and no-proxy remote ops smoke recovered -- [ ] Proxy/runtime recovery gate: restore configured OKX read-only proxy reachability, then rerun `POST /trading/runtime/run-once`, no-proxy remote ops smoke, and live readiness checks before making any new R2 sample writes +- [x] Proxy/runtime recovery gate: configured OKX read-only proxy reachability recovered, remote runtime run-once succeeded, market REST candles became fresh with gap clear, standard remote ops smoke passed, and readonly live analysis smoke passed while keeping stream/news/account issues as warnings - [x] Create urgent read-only live analysis launch must-do checklist: `docs/AI_ICT_实盘辅助分析决策助手上线必做清单_2026-05-18_v1.md` - [x] P0-1 read-only market data recovery: live smoke confirms `market_data_fresh`, `market_stream_connected`, and `market_data_gap_clear` without enabling trading - [x] P0-2 narrow `live_analysis_assistant_ready` readiness: read-only analysis launches while `decision_support_ready=false`, `execution_assist_ready=false`, and `real_live_ready=false` diff --git a/docker-compose.yml b/docker-compose.yml index 79d1ddf..e1137cc 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -6,6 +6,8 @@ services: container_name: ai-ict env_file: - .env + extra_hosts: + - "host.docker.internal:host-gateway" ports: - "8000:8000" volumes: diff --git a/output/playwright/workbench-alerts-view-loaded-1366x768.png b/output/playwright/workbench-alerts-view-loaded-1366x768.png new file mode 100644 index 0000000000000000000000000000000000000000..ff756f9cb437623f1644a5d92d76d925c36bdd5f GIT binary patch literal 80133 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≫ZJOl`kP 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
QA<|qs4R$s$A2l}x$ol;RF`dg6P5{Nm# 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 z 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%0Al3b#1Hud#m;z2Cda&yjhsYP5;(`D@{H6 zwS)0Jcd_h}9uTXBU}y_+YM^ zrXgfrTV(TUxJ3m#)uvTgpRhhNKe>K2%z@zw~dB-Wk$#J<>Fd$H^}U;1v@XH z^S7`T4kelpWxTK|ATJvdz8x_jWS@zsNXmCsd)U(t1ltf#rfU}MDXSUBh1tjCew@Y? zXjmdkRkR#7U{*6=D;&|kTZ2OGY24*qzb;}sm79mD_!dw7($&7sJDLfSBhA60_JU1} z4Bfn&D)%ZoV`S2wU`r_-d#g4R8<@?gSO-NUG!OJ&eE)nDx<93ycU*cel1$C*Ubqbv8)-IIksl%0woa*w8g zPt>NfMXutJd3KdYKdW0Dzm;MTz|*z@8oTw(vahSgZ3K(LTCVbfyT>*P-&ooZe+H_% zd9T-iSPdKs**n!;J_lQTgenZoC$V>@pB2(X@YlMfvO^|~_GU$v&GvJ@NbN;fdovCq zT7SZH1l6amDfle^EQ;ua>?oRUTfnc07+`(AB_5rw_RoeB_(s15vQz@po1%$$*e$-c z(~y_ip9|xXPp75Oi!1tJgC5mLI0viL?i{o0duDV@ZZAZ1MpQ|(^+;a*+rQF!s&y{9 z)f>cGLVgWRf<<{}%|=_zrpFbsH)%7)UVaY`vLn43RL?$4Mo8%^LU(HBi;+>ZtNULe zs_mnY)6-vTU)!0wrDdg0Lowe*i=ja6mTKb}Z(hcVypCSG2a%==J-`!ptR%>YAvfTQcvcrzR-bKkG#B%JGm1gtNewz4cCl=)M^X z;TnMC>(Qs0<;;2M^q@Z1+a)7`rtx#Fr+rP!1-K{X_ z8Zb_5j+Hi1Z*eJVnmN?hFwb6L?c{smck_OG#yGH1Q_agJx%w~C+qU6$9q4GA)%0y4 z-R$y%%h7k;(`lDs+Cm2bU`gxpMhT7LD#_{CL~7$7QA_2GS4(ul6=y0ME$PjT6>k5y zp-KXV#hJrNf~%u6NAvh?*j+W4r$Ik^aPZq740jHY4r^@m)`Rzl_}`Q3=(oBZN|Z&F zaq?2vPRd@MB5#Ab;La_@kY^?M6o2`QK2k_V=D&}tUpMbxyc78e1O7XxAzKHZ{+`&7 z99sPUHw_8}lxQf_o%^-jzfPjfNIK|?5r1C_oNXlk_Uh{De~Fx)o_EHstQ4EJm}yy8 zKWigW|H%X3oeMLyS#?T$y=#P`c4H>>Z~wddesFCBSZ2&*jT*R?HolI^|Bs0YP>L}A za`aOJV3OS>3j%-x9nk*`lXe;X4$!6f_XcWF<@XL13TS>(|FLRU?Z3ZX`=D*!Zii(2 ze)RM0A1IB%8Y_}iGPjHTPlb|kn)h|ok6%xro@;dpRj9u(?b%#Ccu!BQ|A!JRcXh=L zw;0c&KK_vxNtOf1DsrGps6L_lS7$`#JH1z+fVDX@#h`=&8EHUf`vCD1aoquCfY5(B z=LxW&`g+~nO7IrV?%M#n2REV5i{s>S`6c=;se zU;hs~SM#!MSiOFA@p9*o%+=wOXiBCny=-u}EnMLiC4ZnOl zU_$%QPTIa;;E_$;dL{e)uR;Ji1{T%^_i91YjVeFbIBWyYXC2Jo%)opd7i#nW#}oYBo8Q)92Qyqj--pI} zd*vF;E5DQ`ELWBOFUx&+?=M9d0MO`5>kz5S)(q?3C`Gc|`2-87*>nM6!&^;j}BR6Kl57KSctxT z{JWZLzgJYKfLcwL!=+h~EP2oSgo!EAFs)PQKugPzpReb=PIOGnKfhy(LF#jL#e<}@ z^P#P7%ru26p@+pbHJJ#qQEV<$Nor#p|MMQK84|2R6ybUnRRbN& zTVyRl$x;3~5L8YiZ^k3}(tg1RX%pG`Z)Pct|tFVoO zElEs3SPaK>c0{S|ui9GN+PH3N8wSrY#oqZv|N~wgva7B_v{7+Ab(CNIY+{9Cgw4~arLAdG; ztR&}4s|P4y-lDM?tmRbA@*)D$SsiZ2?yS``3!m@Q@l2@`**b*d@(A{SP(vp!xW=lo z*_w39hzVf+Op?80TtT48tWzx=&q<$KAXHl8Ge8egu``@^?4Q=g;1(j6j$ut;wCFnI z!fZMF%)Elnc+cT5DqpFAJ6Kbl_8=z?HSNizI9zWa6g?KX&%7Ohc)R3Y?gp%lghyOW zpOg(`MkwOkI1dlp7HIeMVuTqv_~SVA8<-tXHn_*_HXQv*e`i;mO%{Go>c+bsI<44@rQ`Ej0%Qm+T(#kVgbKo9%=Qr+ao90XIt-Lkv zrSrZ5p>8i%t1b)Jn?#MmBWRuywSJ?0RZ|2*qZu5K%(f$uv4-e4QkTPaDArTx&Ky+wS~AnfwwiU@vTbkCXA8(eKWB@Ji6FS%Z*N_32vcbebh2pnH)_r zCeq^HMpD%q|ANSiCcR|NG4#S<|nz3K`W=pIFZcEo7;-nJrZV7 zf{x;kC4g$YX+Snwkc^k>|81tx_mcn%Kir(|av-p|6zp=g6N|Q*Z{>9#2l>e$Qo!iR zu8DYESfX)Dnd8+6AupYJmN+w_d1G8v!x>;<%mf_e>6>qw={$(Q2Hy7Jzud9uyD0qR zO^VBx8aF3ma6Ofwr~mO0&FDeAsokYuE!|m$0%oG+dt*hn0cPHaAg?CsOAk4<>-XFW zj9u#~sYW7C_ixS|_tA2^i_|?xzom*);y6x~w2fJO>g!UfPIQ+_<$JGaMd|T%(#NB* zxRSEDNcRKW&rKTORwEq3KCx*ti#0!cHWa!%PfZqC ztXrRM`JxL6jlrA|;@^T>Sm zvYOT!AoPU}$aK$U!ZSzX^izo#LIU5F#F<=aa3oWl50oZMvvwDE>My>x8`H3^R?U4e zm)T@t%EFdGHxgP^ZtK|PWn-LS)b&$abt-DH@~qO7En_=hh*V=CzJJqnIGC;AbB_c9 zm&fZ>n2zg&Mqmkg#CAJjTX}Qex=V9I&_s_!;`_)Zn8?@A%aZ_}bpLo#i}-~U&!b`I zeKo`Nf>s;hoJ)KX+TUyj#6Yi`^ACLiPGL!9SJOD=E6i6rr5&l1Kw#b=|Mgbt%2NI% z;g!l_cFE?rqNTw-!n=6lyM`2fNZt_MplJbCf;InfETkD(T|%kT$SwscpQ>6ZX0vS< zh!|H-S+sUUALsUHIL@2IX|(PkwC>-UIhhHU!%_6JtMutAfCuhTgDY5d^{?(b!Wmm> zp=@JQ7!11D6aB>dHX$oa0W16%1VfCxo5!Cz$g*B{40&h7dqV@d210!Y+35Ek{fIcW zvJ@3bD-<5=D=IMfb$O)JLC+eB&rP!@@Y{r!OmPn5YG}n2if!aHxD4&3#Z0D2{WR05~wL?2FU|zBp#XY0hb` z;K&<@$75)18h5Dh^<`p(R;V`uqS?Z)R(o%(;nu1l4-v&jr3!oT{l(|g2t6UIv%%35 zaZBj=#PPD&7+sCxq_a2Td)1f_ltS~a`s)nYy_zM_d?b$5WH(c`;3wTu$=?3@FiWDh zbc4i`4wx8BIrF`RCA#rx@`o~l!ml-Ed-ex*JUyy_R2WPFaU5OKthr0M99`AcLk$>7 ze5ssSoFMSs*W~X2s)jWK%!ZyCs z=O5qcMaK^A@5Y%EA?hP#7L=#JT|%VVszwWl%0gY)>G%Rg<@o})0EGXU_M4(4-Gv!n zGlwl(A0+-lA(Do`UZ3S&%B;i%F0iqNAD4JOz1(9~@b>(S)!wz^@KAK|TuBPuwW4+! zCUVjc1b%EnB&eX65d@cop{~y z0vB4Z{qGauXb|3}0jYTH-TU0rWW^%wljHlFkMV5F>+Y}(5N>jbL2qT(pZL{TH9 zEt58;qq5zHrKunQZhhg5|SMhmvzfVBlo_H8>w=?)^>IaIs(t(D&$B$ z>jPTd({x}B=Z5U7FPe>12pCEltH(2Nu1&p@WqyWrC&T9|aX`%!yUZ}Ti|*N1jk1SZ@#vk7im~|cWFXDbp|@-DxtM%tK48C?ZF@HZFbx# zj(A+ttPHxp*l`zn>@J1ud!+uhn*~qTi6%uK!;NSgrBfd+Q*)?6HaZe3H;e1K@E-G- zU0*^#iP_za-4L%tHpt%Di+Da?cVRRs>BV=cHZ?@{r+jxUhI5qXSkA!>vrhr}pu1`o ziL&dSIuag<*?Uf2nsLHrP15E(r==&*?{(2G*+%+KMb60gC&AMi1Jh>M)AAh~tT|b5 z-fF7Sq<18iZUvTYN1FZoZ!s;ZGrndDHm?k+HRBHR-OiX@pG`SEEtCok2*90YrOWp1 zV1(OVgg=?b%i1sA7|-?kYA`97RkWlSUG~0`EkAFytSHmI`ZU8onP?b#IhPs7p{ibe zrF!t1kyoB06V8#Cr(we26NhB>2W^w0rH@AcU0f?7-yRpHqP+?{B>LU0b=leXC&1U>>lsiJ0N7Ky^r+N zukuWyTOs^4BBGSa!d*EEo-o(kp8dmsKG}ugd;)BU!h>&BK0t=Sm0xKuxE^w32t&G8iq{opFWOJeQ-RgffliEq|0N zR4}ASm>rg7t~j|2M4!$t^%l!j#saJCNGYbcsX85Z%HA%{s<|Z}_w~L^huzK@xGxb0 zXFM8}CbAmA!vQ%vCNFztMRUf94DR8pb9(cbqCp_e^Bd=*H@`(x4rZsuQ1}C1y(?s> zn=q>oSiCkqPG+;DM0rL}1h>yfy7Y^*9(hvH5SG+L%F_j+DnZ&Vk@1$@?I9CTUO zWrM{Gk~3u&Ls-nxIKI}8lYg)t^2r6N9*}6t>w*Of1H{x>6siS{&RPpwgvvi!wnWx= zi|f#Ni2~1wcSG$8aavRY?sc6UXMav%bT?0t!N^%(nDo4?xztGygDct6WQ($WGx$2+P5X+BiGbufe0;QFv%2cnlc?$7Cz*lM|~6qL0zw$P8yf zi_}&J*fxHZqiS#}lp}yjq20hUW?Q2=US*}>SUvMZ?JovI!N4}}yc_Q|T)r*6J%7Ij z#&zL0rvR5CQXlLz^USY=w&o0mres3a03y>^d71YNPoC!aUI&97;MSuZ?pTi#sZ8fk zRGMOababRx!G-zF$gTB=FRkgq$v?yy1`ir*pH|=mKI}RGy+r_7ULWAe~ zv)(%=!u_6D_l}^M!-f}wB9JNpi4z%AfGCj#UVR-uno>{b2h_A}J?KBg(kG!%Y;%3S z{2x*P5Ec3#l7)}7?WwJgll4ZU!(UJV$p;VpUmW@W;U6IUq6yh#5~{f> zHy;ou1PBsAv6Pkj8B(gp$~ZVO#Lv<{ASrKG1N$>)gXbEr*QagPc!`7`;1MJ8Y9Vaq zbuWk$nLcb;)jt3EJmN48YFF|8(NTGAt77~mie;0R=N8)D#tbu(h+x_s{A2O+8sBhD zGT#C=DqGawUIJ(gfV7m;dJGS~Ez3+dB?*az@OZQOStTNG{00@+h;ztl(Dp+*L!dK; znzTV65)|8#u$hkMnQe z1T=lzbh1Ca%OBN%A!#16KQSqFd~b9a-`rm*N}}mm<;nVo$ZPDxz7lXPXJ~zXZCokG zGE(DS&@ueruGS{@f6(^UQBl2Jy!ZejNQj7ZDgq(`($ahdMN+y;x`&WXrBqtFyQI4r zLb?Qo?v7#Tp<(VBeBbxJ>-Sst{?>1;d*`nMbLO0Vp0l6l+40$*eZilQQJmE*;r4x= zY0j=D>K>I!aOGe%TmU7}eY4qE3JErR?>DVj3)km=!u6>yO?xqTg9ol2xYmj_A9j;$$=aW3XSTRpP^vyMh61K_ zJ#Hg{~3Q2dMP_Az&bokKlS2DnvV}cf(gTuYoq)w#jIjbzgsU z6T4S|{`%QxhM*y51C80DkSO%(2&WC>yOP-P%9NK1xCv%T)cmtdm^&C?9Q6vM+_Da0 z5r=MLZ$`xzJeL|>dY$AlvH_mGkgT@iVlm3HYe^6`!i(b2wQ_#qNRXn0Y<6|mCC;g; z!J~!f!nnUI*k|9Cmr5gOt&hn37oFra?s=RFX zno?}&Td5IZ!C`0R68L3DQhUs0u_boSr(IS0{wY2r#8*?Kv z0jmo>CoN}%%oQhllvWj{9zqAEJ`5NUacPufkDkw*C9`uqZ2yER}Z6}wH zhqObD)$na4ynDJt6wrlU;7|wQA?X_$WlQW%B3Ar1t#HW8`$nA}|IpTUrB9oNXJUa; z`Tj4cjeS!w(*oJb#=h4@iqe2*no1zH*(Ld?zY%GQnt=XO3Uy6n)A~>HC~=K zb>nYYdx^|9sag1EtGoZTMBF{u0%7Z)pZfa`*y)Xxuh}s>KVIy~6%#;0tOviES-o2I zp^Pp+yRQw+?>DGxH~(5r5I;dQWwevTd!LZZ!?CDB^g>FIZzuG^=#r9RM?3H`^G8CA z^RQ4^E&NN5LU8vN;SK2S3x$v8a}unF4ES-&hK@Oxm+!Da2ajx>C4DbC#<4Xg78VIz zR;lgNnC+bub_WSw$YE5~%^yHRSB{6}@^zn$Cvl+MeUsJQ4YMM$&8m z7Y2M>AD&60k)az@*I$L}ZzGob%#rl7@A8MU_c$dGluW`}`m zIljR5Y4_)T2%lQngk5V3s$>Yb^AGorXj@;Z)Z$9iSJj`)*cQ<=s2knV+q2USjMKhw z^WT42clQACj)QSpxnHHJ#id5)1ax;z+;*K_2mZ1?9y$eU1&78w(t
    >FR~o=MGk8qIo(Ki}VC#YhXU95-5=B5nPnravrwPvUbq|Jdkg<2c4*KDC2{ z70dji6P-YjuLhm=f0JkV*&<3Hck!E2*^Z+e+cAM02y%<9Sh5+=!y=CBIfVOwwX3Cc znl$m{a48>KPIyC{d;VLqFQHM+$rV#Ujff01kwkVXj!LtTmQB+F9Px#Jdf9t+13#JJ zjU%u&fHz#e04&*4u1i{#=*?Me<-w*w$cbZj`(}t3!jCR7<;z&Y4y2D7?Pc{(UqO$P z;ws#Zk&PFMm70AQ>YJ~w zp2rPq=l$xPR@;ElO4j#+<%s1uoEyfTrjqr?)D-yKKIuuLN-OVNyEeX2&%?6T-k+CX8VaY500>zSY6*pP1!9pYh=; zg9eMmhG~`%VQgqnEg2 z4IVr4QHIX-4%29IM|p5cET%8(!xmYtJ$z12{hk9EjJ0d0A@v?AOtqdsdt zUfZhxSQ4wp8TA>lW7VqV3t@31M-4k0QyP$BYH#Go)k3NB?RCz0$zq=p@5HN@V3iHd zjU-{g#SOKW)B%Wj-`SsO%E90VLe4@wYg%YfW;WisZ`ZzYp~tcCgGn7j-2 zGF!FCcTCeGY4**r5kA=S;%S)}H+K}%?H(A{%y#<388$IvljENpL7?xx-1~rFfknsU zo##MKhoD-IO5C^YN?C3-{4?v)5B*Qt%3Tt)T7*a!kC6C$zmd6YGP%-5R{OX)gdPE@ zavRiWA&W`5-XC{dU`&A*xr~Q>o=h%MuPv;>IMw3HD`zv`tGC=TQuW~D1t;#zgMZN9 z*?H>no!LcI+7L5?TIY-752?P8=yYs!I@=U!IEX9s`y?4KY~|VGVCSfTC%GkNeELceCdF z{IGSg$(*&?X2Qe*esSJu39^8DaX26Eo*yICwDUxxrgjL3k5)PFH8+mCJRrUjmYRH@ ztSm_PLh!XVzGR#iXNl?xRR>9$^J$#5k*D(SDuL4E*>m!Vw3;LL!8(^A7q@3j_VSyO zJ11B*9?3R$fQ(;`oRXPWRYys!Kk5i?DQJwOuP}YB`&qrc4y{`WnG1>t637H zY<}Y6SW|r8{RIOe`g-sNLAu{3%Kwyh!T!wn*ty=xN>hjQ=2*Gt{Mq(swS6d0-eUUj zDKx3NWnJ3RBUuyCsHAx_-#v2z9siz7tmUEqnLL*bu|YpVe3>sQ@S05{*wy6V;t=V8 zE=RqD?_m{rh!>XDB)eF+6)C?b{fBJvNuZ;4fcqttV{oMn1`129KpU-CXBc)fyTX@H zeh3-mre;&Q7$_yXKyG+4;Z?GOjyBr&&bGDX#8OK)bUX38J$L+&Ro4M`1G)%hmMSDs3Cjf;jRhUjozM5oG7$6 zUNH4EH-B-s{8DJPCKBaxl_0jXEu?QC76YuIGcQzZ$}hIGJ4&mw+?bMo?PAYq_VzGweqK!nbteISQZMtz3AV&3eA|mh5m*{ zXzz`&c{u5aG0@eXwkW)J*&b;^>exkM2g{#$FB^`v`hGCe;UHzoWSV2l2Rtno!5j-T8{ zjk(_l-trNVejCpuw9+usRwFFcIF%}CI@gDq_Q>2Iw>fq~JT@heE{6d(tI=3)NRRjM zH89+Z5GiXs6C6lTwVH;h`T31LUz4Nt3TA!JtBa*62snQwN^Va!eE+PUm5tZBd~apE z>nu0ELBRez_;6=h=4KI?&{_pt#m#!0`v)hi6>ES2)L{NR@$${ADhhV9^ucYUMtpeJ zaU0#dsa;Dlh2O0;PAZ~`fd0jdge*a5cZ_EzMCX9YZNdxu* ztu6?7nD&$>#2XivJVau07rZulDiLNMdo$ZTY1w$8Uz@z^rgXY)D~lO)aE{n;pwU^| ztV7N=b~Tju^cVpL%UV!dfc5y|Q_DrBEiP9P)arFVB{Su96+@P>CD zJQznC2+g?u#SIR`pJoS%Qq-0K^@j2^cIJ^<5cVeY4*Db>f&(j>rBxV{uQV!{f_q&0 zWCOqslT;Hu87Z+i7K51H>R6Zcxsg()S&uvRP1_QZ(TtQF2ZTg%jsZ}wJ8XNXY#p}^ z4IPq}klgXV7>rw)-gDi*JKEn~(BDN8KpRk4pGoMJ#yw>5Ulh-G6Fp{`Uu8VSCt1K#bwF zP=&=Y$o74xK+YU^wQoJM{d%rwEVD`H?oujj(r8tGgF#LkYcbbjoI)%ttbjRr5KGRu z9-BRwX>?_3n*5??@UF}bGzl=^-IL@#BM^3TjRWnZ%DyJv(2XW?n>N#ubh(T2$e^z4 z+g*5E4xAa#e~tu-F3{@c>Z`I?(L1#71>QMQ2d+*@=m$U~i)Q-!IW1yqt`s6s)u^Ty zau+xg(gx-TddG}u8b7nIdyLm9Dq?Xb?yy=dvu`ddy37w8Ooh_Fv4lIpmZo={-=N+T zil8Z7kC=3$Uqsn9L3UW#K-Fjd>_DFS zt0t+t-$>0n-vcQSljn<)kmkzeS*OI5$)mmyO95hdP$Gug{pgdK-yg$Xgxe+xacOrJT(~K~=lxkVV3j&~?rzz3jzv`CCjS=0eR14qBXLZ=B&Wp`0aJ+9y z+dxJ;DV1iVBb_|;+TNr=fXDb#d%n5JSH?T=8W}DqpHH$y?y-INAcYlw?P4=KJ|QLJ zP@;hSgcXw^?bzjUIGmy8rDJZ%6vGNC*iVcfOmHhT#Qhr?nDa1YQk_`1VN=mY-nkp? z%$W!!zmSgKM>HK#FL?i$nM`)g>HHjTH*Or|Alp z4k~Ro(XM~5Te!xsy1exPc>^usNR+Cc*L*>C9P4W3#lf=15d}R{KtgQcJv* zK}idVHQTHg;BZns@0V+^@-fKck|;;16KdhrV!wXbO82INS*w7$=OEJAl(J_>IS&r! zq01l^#H{)XvJ7k{r<*4iURe`ZRwmC0MU~xw43e(!vGQ{3bH=Z-hMGRR-VlyuTF$pXIGsGN=!cohn~TPg@PH0YJ|HJlpfrCQ35`x_oO|le zv2WMCwWqmAOOner#+9na_kr^3U|svmnvyEII<*8lIr014uHq!}gvTcnSM&FO-w%Gy zUyj)Nt|*?1r+F(CtKKSs=6j?_WU^>odDA2BuLv~a3@ zKQ`gMJvvcgeMr#44-6bVspfQF>TnD4Mtn@tGbaEhP2_u0IvKpU!|Y2K-X!wk`bsrC ze>k!D&*g;4>8Glx+ny;Ct^L3}Noy^M#~{_&hKp;NLZbH;1R;LNQtb<^**sdV0d>i% z#gww@$sYv|4wX&HiI_3f)SQgBGbc?cVt*DsMm>Q-f=4cB6v7M5L^gRg=s7{QHTq~9 zuoI>7Z8Tek;fe6=$#k-J{dXWm~r4=1ecFPmNt>OKk@<> z$~~iA+1((62^W11Vz$n-;q`>#S3f#R$(&aU5kWqJIg1FxsInFWxeE(DuKD0SUN4`u zGXh<%xANHOFFi!uEQgt5%=%ruEdw-RYVyUdGNLw*&}L;cg^D!D06~2v9fqIy@>for zKl6fIejEx=DSRh*`)O6%=e1DX=WTbz6u)6_FV9tc`rqnF#&|x5u<|5{aPM3*_GCUM zsyD78EZH(1PvxiQ8hjS>cu#pm1Ze&)L3T{Gspt`hK9GU9_rI$592$ao`Ra0*TWuFd z^>zL*va8c9Lz?pgwVILb)RVvcS>!;ks;wEKu-!@0B?}K^;^bAU5hsWe>Y=~fzCqlC zd$RWzR#uo$kNDOJ!bdCA}N< zVV#A81!5nM-ehdkS4p~r?6HOIUQBOH#KA>rc--6Y?$$WpMu&Yhkfqrb(}WEbYhHL> z9+|1g#r`_jqIi#;S`T?+Qhath+}~ZSU#3VhA)R1Ls}L#&_TsMsUzg(yVi~JI%!^#z z=htd&Q(p~WUDTE%N>jDRZxOxVV#;ihicy-scez|&ryXsJJj%2QN}b-^ZC(a&7MFQc z*J>cdzlvc^%$EOdAWy3%ID)%zNinpI<=I#t}J>d<6X^Ip)hN;*FNs_L8|t z#ctd9ANjs|qqKG1H?IJNFbHapL+e>A0s!YGISlCeqDRl7<1+2kS-(DOrx!FeNq#jT zs;lCfaE4p-Gp=0r@x?h$a2Px(!9J6YPx(zx|7@ud1R|m5l4kzIGb!jE-#+nNjd~K> zSvIZv{#r{+W|InVlXPidtBi0`^B%;&IcCF2zwHSw1BzPhWLUq_Ctd~RQdOMUVjgI4 z@~NbI$8MOWSUAe5KkdVHsNB_Wa{JH?yU%(=0Dn$FUCOus_mIa6ZQ$RA3=&9yK5XZ*o~-!S8I(x3%%H#0Sf~RSbzaLZV@PGZNIq}SUuSHhS@iS|_sA2IHtjKskStouteluSXc#Xgy zuOU0=jo7kjU53x~k8C#dRa`YeJgPuNFu;?X`jb_N@iik#pA>l1vqAnpF?*y16RF8) z$f=+crJ5iY5y^Q)a9XNQ4xK1GZoWOV*9EQqH8ilvd-wVk!h(WMNPLWB88vh@^)E2f zUk>*Rq-?gz6#@SM)|WBvTeQr-hyT{uAUhKPp)A%>cI`%J!q0Rg$>Aj)(;xDf60CA7 zd>!EG9GCxv^!BCU&<}es3JDD*)ItNLKHmsrCYb*tC4bL_=IoEJcN=l4t?+I}TZf?p zbw!J=ZeE*T9-b{LMaj$XlD0?=WKaF&;x83Kr>uBIlMB)kqB!N4cAj9QFf=0IL1h=t z=9bI8OzGk*3Kg#M1$cM6jN)@1v(J5w;HgwWB+7xB_wv1e zZTOrq6;5jH0yeoqnIqKi0uqQ{n6wj+yL8ljaLyc8emV?~kT;EpW{vzmckp}uZjpb-gM4JtoAH3K_v)$_d&}>kSipqwqA(r>dFsl3sS4d!My%Ber{)j8EA7 z92si(29i0A=lhCdNOpN0)A7#nEhXaqQzKB%YeHD=Gy!$8%ola)D-hlY&L8pKDEa+W z{!^EmQBZ(aVXS(ZmxXCy6ek5Ru}uNLYp)bh7UV8bsB9rv>lOJ+zH{#NdJQ&wyUA~{ zcwRkSHAG*QbcFNZ=cpWFRGO!nLM121Y^RXB^c`QxOX0EIJhx!)vv~*cbl#MDc*+ga zn(Z7Vz1f`IJ}85YY}BK5-y?svPv&N6bxnr%RF6ctcEPA`$&bYco4c^N)>$WaKA3RE zJ^>C{PJg-g-DyV}O8;UG?3^8F!>moflOoXnGj>yMvE(4TGMSmV+M}1O)PFfBFll@pkMe^3sZFlBZez!R4d;YXceRJ*=-aor=aq3Soed}$PS{!>2 zck0#1I`BtDV zeSwm5o&3W*M5$-YNjwjFV`vv{PCmuLeBX+p*p{#Uy<}dK*i2!r2+?{PqPK?K0s6Uh zX-KL@nF+zR^WMu?^n!d+o~T z#Wb!#hcmx5C83Nr03b)9{m9$2P_^AV(m{n;AiGdR`N0y?T%*-66KArB$pm4mN@(eG z(ke^O;{<6oI*lo^pbULu*S3q#9a$&Iy9NwTYU#`#T2k8Zv%4SpPp$5=3GmECpl?B6 zzBy(Rj(j>QZ}P)x{TY*gO6J!NrLa*#U}?VWwDa}#zzy4_(uhwkQp09}4^)3Rnj^jR z$9{0k$D&(@#Nv54+{@+Mw+H2an{AdaI*NO`+h0_78~-8U$p z0UkkBg}y_z8&*`+;w_W+hr!?P9t06dmedAu!pm- zBRq;t{;?drZThBR6W;;7nH{CSFUqYU6>N@W-ke=A-vq_;YNQ2^&Co;FwxXSQ_vh*Z zZdESr;eRSBa05KJ9%8xHDOj|Esn);}`AWT_7jET>H?RdA|3J0s)QAmB-hWtpvMP#% z+JIGJ=QTiC#Rs)jnB0~N?FU?3n93*9nO`n07PvH;4f%#~ z9^?&4!U7H(nclvvmjsho^i3A7$rG+VF6|P+-5DFC6N#IG4b|1I1tt?>y2DH#<*G*g z($N!U$cW3Wjs*aFZ-=-T1Ue%jA$!4QriS-Gw)o`u=vUZtZHarqO;Dj5MQ6R#GVHAw zytfO}uWl6e)Kal08Re+)agL9QN_k)J#4-zqIO41)6P*$ancdX+SGc$hg12Vf!!^;L zUDmWI+j0>{dT7`T);s8YA%yt!eD?5bDkFKO`T%a+zLNVw6JA=KRHmvlz1O*$$lF=# z^cg=2Z!%7_ly51HSNBQO>^D`PF_zOpCn>!Qh(>)zx=!)?lIydmXhJMl+;qMZ=V$fX zMgU{FCZkNGCR@$1mm+T5BwQWCo8Z)?CF7cd_{T?BfxS#CVbKD*?*tMTc^>D|zt6++^i(tKi2>Gn-O-R1Wk&it zNE^qq($`w>hj#7GQuXsgfkj_Btf_VVcy1(f(2)VRmfF7f&u-pxe2$(n-s<%^lw=`n z8A+`)teDu)&tFBq|6Dl<&V8z zWQi-1z0YGu7xZugvu3Tn*LZ8WxL3RQCZ`(M;BRC-*n)+SvTF4b?{LNZx;^G~X)Vge zn|E~Jl*P*5`!2Mzx=$f~vekJ&B`z}%JIU@ z<9W@G^*g*ksb;z~5Nn;&mVaMSK<)B z`pXZ4ABYI~5Nea9pK)G4z*9a(lWu6cw8ZfEZ5fIbcPEHH`hy?lbg#@!=k4}J8JF^d zk(lkT+0gc_g_PHx~P5VFuixJf~=pd~Rz>+~WH{&d2 z(%2=B)#q&TDaRw=QyS~As;XpOvY2?DZ=jXmD0TYPYYuTQ?i*afU)6A0#*YT7hY$tu zi#lO_@Uduq&Qu96?d#%Yw-I4TB2S%|u}1K&b+PUT$hnoahKQz3I7qX*g!hP4dezNK z_8(P^>w_fd_pM%{%l;qE!tBSsoCL?E-iQ%ikGQ&FxuC$yqm z4J!j*<^4_)EdP`gf7%#hAz3iiJc@!_1pXwM$MXLaX@8g?2#tNXBZhGk{pBWC9*X46 zW)^?`G6i?SEAj=N7uMPkZuKX~fM!uDr-TO6q)rAOFx&IhtI$DnI&G=p1c9R2eD&&< z8!?v$**DGL`sIZ-zHjX}g38CX$}Gt?#dJrQ?l!v=+<@tu-^xPpgMhS2rwJe{6|sBy?^XHSnLY-xkJR zyF?s5^!Rp@_QI;J3U06~EE6!JXmGkqdSu)^~9TGvv8JI-3Nsl27cb`pe&RAm-7pyJ3Jb?zk4$!DGTdjv_aO* zb%vI2uT?H)Qa+3v@tCq6E7uGu`Ay9y5#W0k9Z{n}mrttIE}69_^CZqVg(6ep$7B|z z6EhTV8e&STy)HS5rF>>C@hwu^e{u1BmUFeP=8W)`Pb@g>nHX%mFE_rAU1m9Rsad#Q zbsFLv?#o@7F#TQIC874T)Bx6m5DsNfe>JMbji(v^S{h>0dHJIQOCvAjjlr&9*{4jC z!h2T0?)fz>e(S#YD5+_&dc+#`$*+@?cTe&U9rQfgX^($tlD_d5>uFN&_jaReuxgVX0Uy8X z70O?d9H(>00AeXjmV}hCaRBCWH~vH9obM{~lHUUO`rrdFf0raMJ!%+mNoD4d0p@>p zR$!s%_Y{Q}zg1C9KI#F?MD%^S(2~y;uJ}-b16&L{d zgqiP{q8tIHC_9~`hm*P=T+Fu`3$aAfq7VDKGe?*qTFyJIjiO$+5kl{Q$Mk)9fek`r z)A7kfdsNrw!lv~p9TBgR<-3rW^$7uP(+^oy_0&99uHuHSuRj@|iQcQ;8R1S34cEt@ z3C+wtP-@GG!sIX54D(8KSuO*F@TEp&l?v$Cl><#vR%}}$>?^A3%JN@BimDC?W& zP7iHngv4$|pK)%yy|kBH^`R%{V)8jdO?FVY1dt~&!*tWMkgUY$pvU++a|xtq4iQ9R z45%(e0RX+t@tF5CE9yQJK%A$}@2IJ0%sCYP5cm&>XPvME%{i&YbiD#|{%__mwO?2Z z?Ki82P@zZJ?b6YL|6$?72TTG-m**&+Q{WT6ai7_DxwNE7^fS2KTzFS~6b)wP^Txf` z6pj0diAj#0Tw=8Tda5z%T%CXJ({bVvKKun>d&bOI4k4P=$c)Vm&-exVt*^F*=W8Y~ zGXlPWxB|3h4&=$S)kLYv?SyO?mr(V_c<K9iI)vs1t2c_0TjWbZU>4xI6RE{^vzDeD-RT?KYOUOQ-U*i%SZe1!S`+2 zTDQrOergYxy=(2_?{8V6REkIF7@a{`c_FmI3{R{3Uy1)_%WU{Yus*;bQ*Bb6Fy`Sb zFKRH7XmGi!$Ze)+8<%}TL3 zWC5SB@zM6I{^SOmXv8ipO|g96_1mLER#O<9w;0^LMteenC7t;+yLl=(b$fB0uLB`R zMLhFaMIvAhO(A9_v;T-1rO}{P1^}Ea^Mef+tG-PGWElZY!2I@rpx#yN0n~)}=BDDu z?T3>HkpxlMNJnF9+EK5rL_}96vx9tMXS?=kPWXz)H(naVpI8P;NLeM>aT1o26O~Wc`wbRqYbp^$KbrcBja8-$w7H zpZ~xU_xIarrf)qOb_o`##KX9H(1DM>;4UBB8h*{L`k8ukZ0ePM;8_Y*Vi$H*`4C30 zqOfE@z7dv&!i4kKO%zKuUbHt>hF@TyX^utz%Q5LZj8;N^%{-vn-reMYmbXS6Bo}da z$2t0ifh6^4Mb{_Q)rYheCDS5XK3%&iV|km@wMcn!y1W{pW!L}t$KkLD!LqMTt1HlC z-Q^fl2#aX}afX*=D3O)U*|u71yZfQ%6#tV}a+&Y1eX2|41o==3^#tY5i~|hi$;X2j zUvZEBBHy8*BwyOx;)e8#6)}w2kr5BWqDgH8PX zP9QxU@s0OgfSctNGO-(ozXxL6qsaL>hpWz}kN5o>u!yN?X(=%xrGdn8aDS=ZT{lC6 zB=smp5fN{o^C9Q?nc_au}On^_G};h6I<%UYC3HccVok z4UwOA_eGG?p%o3IZ-b&vyca)AW9Y(f8*2gBbO2`k+FG!ks|Ofj3Ixqf7#KR$ad3|u z{~u%5Qo%bST37ua{ty1A4fcvS=_cKRr8k3Ic?3QYZVr+&ANQk4005WmIXAv7;b=yI zPf}91Pt?gGW&*Regcs1!ah(>*xv#V_E>z--8nA~E#6b+5?~XotY{B6~gwyN)CI+c{ zhWV$Vzvo;0tk0!&=3QQUJynqI_ZM7dZNp39k>9iX*N1ZLF-=YF+AeG?EQ7rQET{{n zJ4Y`)JGMUdT{_@x)7+H*cI2R_>?A^E&@b;2*gcne*-?mYR}U2~t=jo4DbfA3J)nK| zbBj`hetg>9?^~sCjvY&$Jn7l#N@N1<2w?vC-MC$ik;*T19ex>Au}NEw1b4}l4Qbj3%Zzuogb^6nJ}8UI

    QAa_D*Y^ULg%l0dgHX9UyIgofu?~ z6om@95%$R_LK(ocqQJCN@0Y$)RA~8M-jBQ8^BBm~qynTm?<_37qaFwp7lHQet_3C# zH6uFbwNX_2OPJ#u{O=x^fLUON4loFs7BzVwu+rlzb{z(ty*9U?w1$lynW*k2CXf{lk@}6( zF~@2LpMHvRhOaEqwY;aX-d#H1GG{><B7Ti~02h?crS|`+NJ@sNwl(c{fI&NS(R!y}ZU8 z|8ZW~x!yDTaebeio7y0c0+)NLI7qGfi+{0nEPfLN!_$E{1^Dxk(^E^d9Ikfxi_(gj z4*egEP#bd7AJW<=!l*xV_1cmk%^Y^;YbxZ3-&;AH7opdJEXRXm_i_U<_(hv$Z!#WM zTw@|MbJl(Ieb&D}Vfdad6!HOD`M^@nyX-X^A}3j+0dV>g7OA$~3ma<2Xmv#$b7OQ9 z-Hp1(MD@~MdG9r;U>l*;@5YA#A^&21-SDH=uE7m&kAET`ofUXY+1?J*3Z?V1ycS_` z2sf9*D1yf<3x!-SLDT6GW7TN#6GD1{XMO%N^yw>=S9}mUe~zDVgy)D}+>NGJY364^ zkomJ9O1+y}&S}je&DUm-$F(1aZao1yk`ohfSwr(f7iZwFv_;jg*DW25)^o3nuNR-X zji-&veo4NlT_)F>NT1i8^vSZ8vHjed1$S<7o9UZ4yVD!|2+Ah6W?iq@aZ{GZg)R!$=r&by8?S1#tkxKWQCRtjI2O}T73)ZoDY2+KLJ+hOrAB*0k zeZu1PzENJha$ls24$2dqoWb6e6>&4$uG~1OPQRo{@M%*r;=SV?S{athUp`In%3AHyDDd$7Xi&c|;o9x}z zNI0{2;cYUl$i&KN0@lZHa;QVaqgZl(K~V}Qo7o(?fFfd_#7`pZ-sFK~<+=Z?e+V?0s$#M=xb7E2ldW9_9 z>7pB1#{{{Za5?Q8M|bMz!mN1Zh=d zu#8EQS2ptPvDsI8fp{9ARKz%EvN^wN?VrhexIPJLWJbw6roUW2PBXxrG5YKXrnIqcdIgdyx3jhsRWLO$%wm4arp%xY_*r!9 z+3<5Fq$ezlR9)l5TiuM}a^U05R!WqmK1e2z22B!=OU(v}82(7EZelsBpHe_@Lfkmu zan90c#_=M35IBLQq~9{!*Ou@$aN~i?L->xq8}tA4*P1Q$52fc3CStc=*ZqsUk!Sj( z*Ry?9mO$m@Kpvl3wZqfXo8#fDmml{%-P(q5FjIk7?O%37snUag++STrK}8=-%OWESe$xk-GBu4xMvYGs?fe09DT zEZ=zGHU_(OsWO18zzWTzf-XZh2(M$p+vukc81cL|hv+X`Z)YC%H*+r3i#7k_%juob z;=j#^=`K|*-d6J9k{a#3r(>4)tGFm-HuZYGok#cQ2wQbyNc4fm+N{iMf6+5%C`LfC zXH;wdjhGmPzq$tEBv&FA&7d9aeGk#|#b2(1xIup#_}EDpm^U)Yd6qs|y8}|?dkkJ< zl*STo>JHeMGrLedd}MC-Bbd$O>hjLsw0i(p!9O$m!`Rlt_%QELBm+Exw6uSlmFq~r zzw5l9l3)R~KIoGUmibZY>Jg=UXF+WKr%;-B zQ9CHSIVE>%`3g4o9bkRyy_3gIfE?LxM}M{Z05IN?(BC*M!Sn0v(eu@ho(VY}P%l%g zuWN4pOsX;eCmbaaNFE9>9arfj+&nzSh-c!fsqXb+>%P2Kou_p2cMero~KV z+9mv#Ur~3*HRh{zbb5&Y-CS8Eo(Us#<~LF)rJIRVspaVCH0F~=Un&H*wOU~QWNq3g z%{14Rhz)qS<-YY`prbfI%O@=()3>HCC1qh@f1ygsNRN_+TMP(J01T0CSC@TDi;~UA z#ek6P#89OA7nWZyhG`c+S66KXdMwC@UjL(byA2p{Iq&$<^C?9J-vZ;ujR4Pz*v_#F zruGV4ROd7O|8-8j$3gt)Pis*@J)H)-WObsne8B$KI>W;bNBrCVk4a02_PAXtzyMDc z-S}w0^0}CFxjpGnve$*cUOoqyBvUW9_5TK9pg|4P5C7tr>K^>nF_7#3rY`#b{8zMS z>ARb~Jk%i5v@P+EI3K&sZHH7&~R9%mA!m$-Ud z-4CigJGD|%(^67XQo@q>mh)0g+iKL;-TnbN|^w}z&;5__EMm09=KXM>M*Z<1D@D9SD5^EH|z-b4(x+oJ*t@1Q>~ZnME;$a4}W`SaKj8D9134>6ca%!%BGhXj@hQBEje5HJeN z1H%u(%#|b3biK!yGrD*9Fw5M=Lk0`iAojQA4>lU9ygYuy`jWL6I3zy` zx@V9V5j(l2+XsYT0VlQlh}|?$LPB3C4Okq#`7l++(7K(2PV0L`*E>dJM%Oy_+IG15 zItIHqcLrpF_^8I?V7xYiA>U|oU+I*{SwF&%WWJ$i+m|DQNQbZG4eN20WpPHfEQ@pe zIhqr*RFDrpsNYDs4yd`$@JTVFHK1`q$D=i(hfDzM zHS9I>kh0dQh09!}$?MwFGf9uN@i|J)^stzin9EC^s81g>3ykI?<{e-8=CiGIFt5g( z*Uy6AhB1W1jwy@C?zDhZ;d#0zPM4)UcAby92dp;%esf%y5iRqtsahi^X(u~22D_^nAI|3@;PKaf zBFBFm_xD6o8ZTcdaJwGTj*rTOqQXxH;Ne z?1qVnYkVPxK)2^{;Ng8PcB+D!>y7Tb9`3dSb@dWWBGvklmSnKCNQ9@(lv#g!ZC0$D zR=ufGsHA}Z6@YHj^UP5|J(jNw%3^)g+FM$izi6LEM^z$OF4BQN(OD|L#M@-$A{4o zdoJ6A=O>LtA#|_3YDSy&xte??e_%!zeaWD1`?H`pQ4^Wy#QZC-=KFGK*snUH6KwMV zfI7ABUty-D$DE)@ATAu?;c`!*;j%QL-1O!Je@b$yVLbn4$KMcMzRSHSFSiI?m{!a4 zjP(^wnEC=cR1iJeWmmVnbu+vMQH zN|}9Agv?%nTH!(m8{Lj87(gS=#j7K)sEO}06dsP&=>mjf2)Cyj6BY4XLXg|SNRAm} zoAASny3-xVUBgQlDg_JzIRj1amTb{4g)YW3z_CJfmS*#3Qf@mEJ0tbg>>KyEJi5s8 z#{V>vY|seg+$N<}RbHO!=h8g9IiEOgck5!i*y}EB@u*Y_LS3tlrWk;f#9dBPy9}%6 z8Czc%htu&BP8khdChUjny|lDl&DQ1{uyJI#V z_a*^w6MU7nr>7%YX>P$`d#2Re0Uzc`%tpl0-|C(fgz|}Sst;W6cDMCCcEbWlqO=RZ ze7qcgwvJhdD>apj)Nb)P#x;so*i;R+FeBV-M>CXz3}@8$y1@3nrmXZuLwpaj6jV7f z)F%sP!mketBWDr{>^@hBh}y5ShTB#NMOCbgq|QVp4*7PvJ^Yd8u+`0M+K+lodtquI z-&v`?zDdTf?Sci!zWmu|EyNsta(8<=Fo86 zi6ZdN@Zwd4n)UjEtko<{qwz2ADD?ip@4g~FMQ`3_)O2=!cW-~jIJ9AdiLWi{WYBWG zKZ-$oiB7gJ9nl~s=wCN1ugU{i5t)6#izHlsUETH&(cxxXB7%I_k*3%BiZ&x^{AxoR zdY?W1bD>3;nlB^jy_$;wnKau?fJnjS86V7lTI^C<`BeO9_|b8YWEjwMKCVHIRzbn^ z5lxD&o3)R4KRUu017`Lz3lx^B>&D%JWeYR^@IolF6wnN~n#cYo^|g6RO}*~S@w3co zL?c;p}O&8HT8tnZAt5!KF;u71QV$o2aOESZ^_=D@0+cx*#Rx`@9%6)fX{pbG{w zn}(I|ZW{SNREq`k=Eq3o89H~CuH`>GMT8GCl z#E--JEV<_Cn38+33yTSv??yN<lok)i48oVvnU2REXSQv{n09TAmirF`)ek5Cepd4meIb`UCU&)D5$S z^0q6|M&Q$W7{NoOWAqu_t&@5;EMRC}HD6VhXeBvU#w1rv_=wp&MP^?lUuUOOq?@?- zI#sIA=hyp+1dp%7BU^sX~%JHm+6@!b_&$NRrz#uSf$<-_)UF>CF& zmxC;|_)0Eh=ngsf*Sx`9yKbaW{=(Yz;Gfl6H)piX!$t4BcmfKIb}`d)C z)Yq;X@Q0v?h=?fN1_Dwn2ug_xiqe8gN19TlH>pWb1b&JXrAZCF_ma?qRO!8h5_&J8 zg%VQk4u0P`=bJg_&Ye4R=iW1S|G^A<@9e!-d)D(l@4McWdnEUwARi~S)C_E9w9ipE z)cI?ODD<_H+hBS?q-Jbw$@E14u&+f_!%EPxwTW8%7fY3{$Nk?@J8jldD{Jbl#NTf$ z|Brb#fZjzt{xj!^rMIBZa>;NmLiWu)9VX~;u4<57+rRGVn{oLMxAj+yIx7~tHO?}f zSWXvc;b+4O(AsHJ`NcfmLEYHuYDp7fwmfYD-#?=q8Zm!zRcAh9y2{S`lA_XEcBVo= zg;S17kC|?6p+|0;5uN5AkAG_Iee#cmuJ?2{LTSY@#bQtm+$A$5tu^pf?4bT%XAsqE zu&u}+{Gld?i5=W6m1i|L&!*akN>Cb%3_RfB-r@k=dR#S`u;baWCIKx8kE?evd%NEx zCn?yS?k(l{rAJw)-~YOAQ36;|7x{MO3gGO8uJkzT{YVBlK5Juu=Zjgj_nqhDE~E_L z1LwG3UtD2q+rDeJEs4nDsh`e`t#qq)S@>zWTGCW_moO?io`ypYRVH~AigRU&Bi@ag zl&}qDGSQ7IvEtHIV~-9F2={GQR);&r#%i!h)XIOKew=qcv$VWCwKOwx>1(+j|BA0Z z-K7Qr<{%}^w)>#pC;JuQ^UokJ`)N`ZR40o!w*;+#{0Hf=5qKQyRzvt!2;&XaLRi|F zdi=6>fSuOq_JeWt?t)##pR(RN=S!~p{0J$Bch23D9-}A*t>on!84S)?Whr^f5eF|D zyp9Ueu6L?H5me^S&0*WZKgaMb0WM;#S0^T5tk;5J?h1|LX$1~{T;$JUZ4J7X6Y$eZ z4`QGCao^8B$E4>>F*ZV{&p!#jXw=$XaTCnf*1odnOvOSUXNm84FPM@n!ssp~y^~hy zDZa^>d-?w1rftENhwhp!>9Nx_5<`ZZppi_^cL%Dnu*~i5{H`YOsiw^!)4Ch7)oajGL_zKeN466 za%m9AW$%0K?U{f=O-|(0Z^|p@UHMB`bdJ;>c*hsgSvkkcW9vC?t2Y_kDt%^A5u?@C;R;)l-}b+tx<55x?Ahn}Lj zOdHOq?VM5s3fCjO?APYjv%@)AML8*m2x0={niX4bvmwB{<8fPhJ4g5uaIT!}OOKX^ zSTt;&pZx+|7iA)s<8<(bF)eG~Km!%mDrT4Ip$L(4|(vE`y{Q_r|*khjKromGu=CpYRp z?lVExa`;(kcxx;BdfuWvd$0V8ZZVsO!>#vOEbX@}ck)yAAqSnCNh~h~kA(JpbZQlr zQ^lcs9BJTs(JSB989GpXhKW~p-k---k}$6Yj)^_w)f)|mje#%7-uP|{qEMse^!be* zmO9JBAIxHV9;P2(l|YxCXgybfmmNY;R{OCV97_Y8+|PqKBF{;3661V9o{ zbvi9_rEcN(9p{Dv-(Q25)m|&o%;J{ zLx;D7I#PE6Vv*f#NA%^zl*L(^mBmL|ZMPf^xIv?R*`f(g} z=Ik-)R+!h2e@p#FBLmuq?OtG+xVr;7a-^T-@cEb*PdIaof);@lfv|>Z{M|FcFN#JZ z9xXG9XF(Q%m3$9d+bAEo2L&5WBVxl6U0(EfUQ8XCyiK!_?GZTjBU!kVLS_6iT3ZqI zz(!T(BA@avl)rU(^dHTLC{bh4E@I?gmYe^cGhn;ca)$c?*W=@5te~X4tIlF(4?Q#L zfaCyngDjv;K2=i87pLJ65S6Rft-D7A0>Ja75}5rnd4Xj;H*RPjH)DwQ8yBkUeLz-{ zlQHpQ-v&2>R6WY7zdA1P*ivW_78E>f$)m@&!bJ_XIv_|0|3hb$F?_MbW&{T2$e<_` z3gQv{E(Hp_3S=1$Y)%2lMPDmhj`u?ZjG6y!Ny;bSXOYulhH!?y#|-j@HJVKH8~YrH z8Rs3y%Ayc`Qr4 zsa%gGF!6AFCDt&u$krIdYGwDJH}Hr_xoQ<^S$&`Y6J`3I`-ENCZBPH+^UN1C(JbXP zC3hxeRE^(Dg;IQTIYYkBi)D9Xk*4b<&_RJ85!XL$i`#@GsH(r8nk^kVx$;UWs8X+r zj4-O4$j=vnLgxt{C28L}S%qxU`qa7#Yr)_q7}O{{j;m&;KWXLc&jbk@y|HQh%wBJN zko8@jwFVRxiJyE-`K!58z)PL z&I7THTx9kb8Lx~A2!i5I5cXK%+6x7cU=D+<6Nk2LpUK7Q1}n3>UHe(m>W;$Z(jKv9 zzHC}*?R&E5IYs<{Q2~p5)fc1M(NvqKL`5%&{jcQ$xx4FBBrE=G zPq@!45%Q*knW3g@^t8QxUxD*B{EYk=8&5*cZdc82s5B*jxwIVG1X)g2%^ADJKK|ec z;;Dg_5yTL*?x)4G*(T@tB_j6~CxZg;N>*n5&-_W_hnnvr0=27P&Ymjyx&7XwrS4>` z>-+PMAE@kD;p6mWnay(si|;2*474s6#fOEht%upq8w(>MRrQ1CR)PHq@UKxfy^3wV zCg9Z*%4%pW~KwU&9`c!L7BaPONbrZW^F)m4!Yf;MS4tvn=QK*Sa7Gi4KU? zr;Z+qDT_v`vmzA-vv?Bx9&qA;@^An`7TNeJv&8U+{ zSl?6eHM}(XfaIga6q{Q%Gep^aPgHWn^S4t{ksB9NgeMrq`EE7uCdPJLi<=b8PQ$MZ zBgqKUSpAoyE80s&#wn?nFE3#oU)ncQ94j-Ug@$k{_q%+X61>Y$s%si$>~%CPc1y;s zD^}mjwyv5l@%6XiU-AG+-dIL#=!_MMSbA-@#dwP1Eb!TYqsYe#2!Xx#Xr<8E0<5)K z8YOVUt+wWsdVDyS@!EjwyWaCvdQ-q^8`T_+qNTICuWehn=}(ruzb2YyB~jP^PFlN! zt;O@N@r&G7&sZ_&I*YzqzxlSz~7L42nduvw6 z){9{d{S(;lYGJhpe~n6sIL*&g78Ti^F*uXY$S8hq_0sLq*v=DWnzs^h+=NT?%CJdA zoUXAkK0EBomrB)Qpdu5IOAMfU7igdhPy$}YR`0S%_c?jd*y6&$XNLpOm1|H1H^4Wj z1kB>WYGNr$HRV|}6?a0b?$p&fGL9j*1r5dX+wS#12a({THg0Q#rrv0~SzlP5eUpn9 zZQ7pBGJ~-*eC{;r8)?8n(TCYzXoB8OJ5o76ovrSxYk+@Oj*FsC+iH~NmYYoO{kMQ9 zv313o#PPmy#UoR}DjzJi5ap+Jl6L%oS2xZLo6loIAcXWw?-!Td(Cs5wz0}U1^Dhk$ z<{?8MB#z$@H6-SAomLT%S9EXuaCx{bwHo^kb*e|FW`){gHvVJe_8ZmMSz4yY$4(q( zsnX|6Sa#b{H@Wzj>r+cVW5lJm2=WFS7VApAJ^ZoNo+sxxhu?awkoWs~ z{kK>mQ%IlWH@J78Lvhm15ObTiSJ!GV_ub=X1ZVGG@Nx05uRqWXD78vcf}7z0D@l}n zAvyz@y&_TjsZa803cAtykJ@Sf!guBd1>Tjw0#1&@T6mhcg1u;*HTQSO|@R_+iRbeODtTw z`?Ms;>+cK%F1MUzsLd*HSB^$sdGLOqdilc|c9YCP(CWDOat7Xz&(n2BSk?ubDi_@1Z4%4=EsSjxed62B6ovp@Rnez{WSYYa+jYmvs{_5$knxvL!1|(u%3_e827X%%6E4jZVpCR4}}yD zrGf!(#O@=0Mt`lZd-E#R)=afleQmM)g0EZsSx)<-E4RrvNy~Gy+u(`(Q)N16(d=&3 zsD1vQA>31w7DI$%E9uzH0@8LwUwAbB>2Z8NN-X?4Qg^`ix<$4tey9W#%Zn)1W$GPt zJnBH43KkDUrQl_rc)gUJt)ubhc6XicQEqPr!xUmSY;8%EyG*=aUzQlEO3q*FTi&Fq zXrN3nyCGn+f>Ngf}dWNCwmViGN-+0$VG z&(hX%rn%`&{m{Rw6L0YO?*$hZlgsJCf~3o+ju3gpyxwQGbzpVa>EnntU`K2>OFCn$ zjNwpN$o+w^e~At5J2^OPcR5kA3v#IbY}-F^bU@Ci;y5ZIiyAC{{g!yX(&Zv}NoMr5 z0(iL_CN;wPq|oXMH53w7;kvUuE2)snTV}4R0Sqw4$>2M;tgC^fwoC!^oil%206q`@ zYZ+-^3fh|vUF^>SQgZ{xXG?ZguRV=oAd58MerWk;f`|<2S`Og&&xD}=iAMDQ&m~I@ zK_9#Rp<4;}-^A)v*gQU7ngIkM$|WZ-A*yX&AYw`jB3(*b z4#-~szO+sHcWkf@y!Sr7GW7GS5u%&9K*yt7sJv_mJgxZSldkbx5&TNe zRtO>nX&!zo+BLj2w>};ciPO#j!5}i!JkO}&8F@ks+qbe;_Qpr2Mna>eJNk5qFcVD(cibiI&5VwGF>wfy=VL$SkXA$$1Cbt`@u2A~>7y@5>!3;_ zQxQlGe%g)|%hgJQLl0|@-*M>k#hg1DHezQ{iq5X?>+}^xpsf*dyyN>&*(BG=F7SR_ zhg*YmPKexm=LvJFc2LNlmoG{CxnmeAL0=rdnUxT^fhi(jk`7vGtIshH6a?-CJae|D z`AmLi8A~&(bcKS3DdY4d)yk)aSjd8A%Cz>N&oGg!CY({q(}ra&4x5Dx68~BmK@7saQ{P4r-CEFIfifJr$CP8hstllvd)^ zV1T!crk2mTK}iwhNJ7u9v=Z);whTLyhPKb0Y-saHI75AsR*|OoX=Cp>Z#b-Ef43+) zMOCqX&}^&Obh1@Lj?Z#Af9$fo${VSprsa<6=@TikSq(K?cD<6l&7ayAvkBYs%L_jO zWs@Fyg;k7^KYI9H*zWF(=Dc$bObU=+?tY?8?qB-R-4NB;auQ)frH#3v5y2o}I5E-3 z=*L{#s~P68DL89@4~l+62g~Nye>d#s9F&FWj|uMLlq*#C_So_(3Bvr47OIDEakNHF zO6RyKqGS_-PRQBIBJ%p++PmQf?+oxprcNkXhtm73-Dm$^rSyblgfhqZV0e>a?bJ@Gb;(ncAiuLY{)gxUCYXNlObL@jp#-&xY*@ zOuE7!ve}}HFuifSVm-YV;hv)RWVS@>4xu==D z*5m4nDC%Q*w4Rkxc6W@;3*6z_VNuJ8)s=PgP68*eoHH;iT`iG6T(w^L;3v$E$fK7_ z5ECE%G3qOk))4hDnLZAEM|a2}o8POHsBW!_)YRYZXL`>JliLYy$UsuR*AN+zzz}-q znJdfFfsm+Df-8=-t_uWraCHYKGY9l_YWiVFy$J(FzdWqTErIJTjPzYtAeSOra5}S# z7B@q8#RWK}NK6gcg*5%p{CEI0$uq-3cCA=2Lq9j_{J1vf*IJwZ@r#X&I@vuIfCJ;E zT;W@uaKXg@)Z`>|b+H#@J&Z&t6~N&h0H8EXHcetNhqJ%ofVt*#j_lk5C+#-${1El< zZ!=@dJ0?ukQvdxB2$9saI`<4Qz@XiKgV$76k?w)%Jij|y1RB{^1 zuz+&EdA)WU%F_puYxy(=D)}Dmf1`D;Xk$*3){m*bWBo8jjW?HJvpj$~V`BnSYzt%& z2A#KQM@r%*s*W~$eK%*=KC@|g6_OsA^>$!;Dw=1xr*#z~KDc7SqO?mBq>8O`b81Cc zBO&7pGgtv!v~5F2SEFBvQJi5{M)BTwG||<%byCt623^7018x00p|haIu+Xs|4d-SQ zYkGf)P8{P_Tzi|16t^y%CFhuVUnZsX%a586JZgAgee}FxdT)ZpMpYbV&O?XYX!PkX zj$Uh?Tl#Qn>95*CcW|ulz2gGP*)Ov zh=8+}Lx8Nvy8RUN(B0eITPoq*c zcFUXX9(tO#430nln5k!HF9L77k&+=6thrtgjmgUzW6OWT6;CSP^X-YKX>I+eJ}7?I zFtM^bCDa$ZY^NO^B;rT<k2kiK4)f=Ykk-p=|bHpjccdLbnQi=Zv?6+u%?iST|X_6sEZnb1xM@!5({4>Sx?eyx3iuKImNC$3g6Yh91Kbk2onswmU|rhwVpza9kgWD}+Vp zZU}J+LC{B`xk)7yvhVU%(P~J&avr5&jz?ix2!QLQinZ z8neq!)z;Q8kL({}w?j__>|Hck`ugN^Oa=3zn5-0r{UWp{zisQ|-r=vuz4;3+`)gPS zjpY4+3}6#px8eB>-fj-}wf@6Zx?n>XakOKp^F-6fxyqxl0ymtR9hNxi|4G%JXtvs{ z8hihO%^5&T%E196d^zj)M3oy^7K+2BL=}@MVOsKk6cV*B%H1sP z5K=b%fkrgOUkl8C9e+2Bj$E!Ux8rK0 zD!=5h78i`f#C{7o8$!Y2En?g*WaLPXp-_^%*3uQE#_tr!RC#KBEnM7;Sb@4v?T>ccJy2@m8K;*kSt4kU)H#II7`jm4sgo0LeGL1A$g zkQVyrwHxED31B{`zC}kDn|$Z`t?vw=$X~ky6HIimz}MF)7n#g9FK0=cd;x&*O!|iE zGx$dUeWubz)C(O6SW}&3ZIcI&bnqJxk~wwi*z8lF`}-w;p*-V=uZy%cp;^G)VsB*r zGG4LM@c(?{JWbv9&r3(sL3uZ*kD)uVe!0~+Qda146{N$%%&S82nu$VJ7u}#%oOl7n zwH@6I_c)k>={#fs-HM%r)fAaD5IzOP0&KaCQN7S=2PhT%XgFw71^B+WW*8YUY$z5^ zt@n1(Y)XpL>=1;)nh*gLYA{9d9hlh`MsmFiT=p^BB^aS>$nC4|h69qbugM4l&qpbS z*pcqtbHy3yE0KYK1mGRcqw0l4nRE908$@BDdkGojkW9#w-@*DYr<;I1dqlN<;a1tv zeg>}sxW6A5U$UMD;=sFQCV5#$CgNXoW5{#c#Yxeg|VET3&PvvA}0iTzvN@wEt zw9HZdKygKdf{SxVEJp!zoMA1MUT4>j@BNwJ{GaXe6yTVYHF`Z~p7%;-H7M5tumm#C zb^ojIeN(Tz*(FN|H)qGjaH&Gg?&YUaz_o%*%?mV*1{*iny`H#EbXnRL<4jjn;QhTW zuDYeeJrlZjd$8VX@sS%)N&4pO4-r9&ZY2T%p%d|0gFEyARb3+G9<{(0Zvq=?MpETd zU+ng_<(VQRyCryVKWpT1TMZaW*F7t2xlc^F=3+if!$9|*7ln>FzT9DBr2|?l&~0$g zqM9c=h*9TQA4sd(pGQcI`HxeS8Ef%QLDV>RV_P}-8W8Br_zQ){8bP{d)--FmSZG%5 zZOuv86%80xkLS3=c{{;7 zkH>Wx{^m|!g6zm$4Lx>9Q#X}+A_c$#Xkr-mbp7y-=Ychtoau1zs^zLkE{V^jY2Qlb z!MSV>r~adoyirc_Z3?+JIwJ<$2HtHil#D%lYtte&<^h+i_0`}LDya^e}2Ql9%|wG&yrAzDX_mXU?GX=yuJnqby>=l29tNi=R{8 z$IdSL?^u|3aditY0AT4HFryf5BNif=@(KKgv{%&T;j}h-6%ulKn^^ae9H`y0h{_fo z=H#6O*V?ZCis_ri66NV3ZulVZhm;%lTtEIXU@Gq0{KI(Jo}`k~izvNeTB^+OmAskj z*N&ejdwIF^M$lRK_qX`hw#&`T4EAg~YJdZ3c>TYN@uIT}4o2OZfT6N~xK4n>9{8Hd3&ksRr{;9Gl@;any%L@3OC$GzJ+V?e1nq(zdx;^?WE&wg5a;0kMk*c+w1MD!V#w-L;*qGjB?L1JJQWgjv z{06)ilwghzq5b=4McM+(AWrcGn(;%%vE^an+do79qE%1Vgmnd(DvYTBa zxzW!VI_t$NZE{L=9lY16zTd$~^Kewn4(ym(byxDQE7IHGTkc=}=q0z_8kqDRDFZ8v zN#qTEaEO0dGC)K3)1tLcJQ@09%{-vinMlE=f{&ScZ)Jh0xhpkXL#N+xdLD#;*qKmT zYr_N^76ANy{wWpmmybX+wPAB#v?d%YB44gh=ZF9P3d-kHD!1&PP_%B?76ONF*w~90 z?UsBUVqJbM0hAr2rSn+Fq>O%yS>s~oS`c%oBroTgc43%;qdioge{{oA+4Zvp`wfOc zGe%}6w?S0AnuPx%0N^#a1&o-Q1+|W0P@4+P_pjse5IYm=ozzsmqKu zlXLwUrfxd|2^ZQvj2@dXv+wWo-2{i*}v!U#dT z-GW-=YbR@ys!I4DE;eT@*Sx#?MSft*5Ovor12BfCv7ugXdnFB$@{{h3#+GkpRL;+u zhrfxlqLO-dpSm(kN%1WA6WGs&wUm+&hQp+D(mU>i^H;;E3JKd@aVtIkZzDrY7Q^BF|>aC}8=-&o%_i?^4ktcxJVt(`-_+eaN_lx)% zLhr|vvgo^=cv*QzuAWQ7l$Sc<&SBvM!0+iZU&L|Mr@rmlMEvrBfc98G$8}!2+HTNphOch-=XG5M$g3Zq+7_R&zrbBWTM46)tj_QL$b_U6o zkbE$jGBdaZ@cJl+e)Xfrn4SuvIG{{gn4dfszA)n-Z9==1;^j0Jy`#+^IO$~rtp|AZ zX5(X^#oR@6Tts}Z2_K;tK~RYwR9D{30U6(cE*QJ^2ArkWLGk;1!t42 zcOZW=Uktc$6K=l>Ad|q^C@rn0la8?GEEzlzC0_E zfLbFxmh+2wi#sX%h;OH2~yWv1Ij7cH&dJ{5rW!+=*OaF~JOzzEe~}u(V@WJEHXr84kes$}e)HP-LNwQU(*z`CT8XLn7B(;}ed}=!GCq z3B;cD&F{kbOnV87LPmrbd1wQspEEbH!}BY6-5**?Kl?9A(A z|JOm~z5P!<aLM0t_kN

    !Znjyu%6a$(E_It~TQOhX|>A+fBj0HGxy*DeD%d|`hG)f5mL z%!6^no04X!J~tmzeL7YeA-(-|t{N_F9CuW}X)tlFs1;O3Z><#IHA?{Zd0Dvt;^jC! zD|@YBZUEfWrWznNz*m4eP}?b>HZZ2hZ0T+OPuxGP@XK%9)&6Z{AL1s&oYOs8dR@H9 z4%&8asJ|=R1~ktWUN-;al`a?jS`x&%Vd_&Kl**usK9X=mtgQ6tEAFjtJ}y9q55G+9 zQRlQ^S07OaQ%^#+ecYiHT3i>IVTHX6fXowMl+P>ImL1T$sF|DKB@l8Z*B9H3^sDIjZ&-BoVV531NIk->MXcXuEj zWF2GV1e8NnZ~LZC=0iOc%)m!Nh=5P16`)SHLy0#OLHijSHaB&)M`+wNZElW8$>Q~a zD>}}Ra;K-T@tp;1Cv{Sijd07$R3Dvjr!K+ChdG@`)^l@dngp^|BUX`?$PGu-#q!3T z9+6SBYU6~hAdwq1Lvc&&N5e(DRKr=X)TH0~sYw=(>>Ct}ROz}}!yQ^?O7dsg&k)GK zsRCWxr))|08I1z$Xn4fh4-Va3GNFn@W>})UHl2{eUx|7f;m`@}C%g`X99|O{V|= literal 0 HcmV?d00001 diff --git a/output/playwright/workbench-split-nav-loaded-390x844.png b/output/playwright/workbench-split-nav-loaded-390x844.png new file mode 100644 index 0000000000000000000000000000000000000000..ecfbcbb094a51a25950c09008f8192d8fb2078e7 GIT binary patch literal 32085 zcmbrmcU05gw=EjQhKPtL2nZ;>BhsWxkzSPEgY@2u)SyU{CLp~8r1#zlk=_JC=p}>> zp@m)&5-#8KJLkOd#(n3$bH@EABV&*3WbCy*d+oXBoGTF@)#QmEQauC!0K|$4vKj!u ztxy1fK;^;hn~~|qnTi0w6M&+ul-8GwT?Em4EzjSQ2jCwU?@iuX(M!D7qL1UE)h);0 zYgG(MGBTL0@BHSOtk-!)WiXHVW2fAYu+TT3?)fp;>al9Ju4Th9Up{fS{0W1s#iLKt zFW0z!6kQ|HZ5w}yUc6lDJHQ#C1>HB=HZqX@qi9zv7q`O{H2~n^O$GqqLJ)Tc@KTEL z7C`=qBH$0H>{Ecto&VubMmR3Y#m$RKc+TgfDQ?6(BSSv+#plsP0)S+N$=>d6lSh6o zWL3j{Gf`PrR5U#EQSFd=Q}hd7IKqDL!RDB*Xr&RvEo2{Py_vW(T|o+Pk?jg4@phw9 zw13SY7n4U~!!EF`Zrth{vhYS!Ha>D*mD`ETfa-L*!s{vEg|AJ5O-5lsIV!AS<9Mxi zL64D`dP86gtg}34m`(_Ih7&e8Z85 zC^xXx3o(4W5m`PoblPYAC_mCMEgh%meEK%t=6Xzf z&Qyl>RuFHRl5V9*E~%7nzEGSjcFq>$D|72x8)&zd0@ z^IEV*JYFsu;(PZdEr{$@AcK4?li>CTF54&?=;&=g%#SJKj7+RV{7u+%m+t`(+q=8j zu2K#b$E=8OQnd>SE`Uemy$?KrkMBT}|F3iHd(3ht$ey|}S@O*X|03+t;(ft~u^W~6 zC6e=t82Y^R?$*&O%q4+^jUlc>_x$1qiD8U`Nz;ZS$Fca)^!Ze13>h8uV`lX%o(qfO z6Ey>6pbzV37RudwBJs@Pmy&Z^fOXV5+HLcCL!0Qhc<`r_^T%EC9sAwDky&M0^%#h# zM?>K}>w4p$D0gFBmhjnZ0WeD$&&l>T(PMOFP}>!jkLMP**9Z~&ZDhTGy}*sqU4);2 zLn`-t&eWn$x_5(d7xVX5zR4@9pJ0JM6fXZBm^t(&j}Ch#B<*6_f`eZyg{Ggc-nzBD znQQf3LJ*wB78z-!LTmY@ zAobaHx$l^$$M5v3i<1G!ozS4K(RmT--~YbJT6x*Fq?;G3V$iaREMd_?jwU71vB5HJ(y9lAPz@t$H>n*`eBnV01EkCmT z%0joZ)3_wxcMkPxw&|@+?lPskIO%=-$#@8ep1{&NdViS`{`n;9g<}6}R7eDg8rVi` zr#oofBk=IBb9T{9wIP3hNc>Ldx35uourQ}oPH{1B8<4%luM1Qr@A+ZG+WBUry8#$OsHOY4+}O%xtmi& zxh}qTA5g27ekP({ER`vIDERgDX8?okey-Hf^P|5JjWu)rxp_pk?_qD9j|%y^V>T*` zO>JIppI?8-lqcx?lD(Ec*s7TvqV|%>+s`kIQ`O&pnMR6_zhXo~eP~?=u?(3vxf){W zJ?)#V9&I})g#m`&*=B+E67&kDE z&N;4?A7b$x7}|*`F0BZZM5LV9$ObiTFJ(x0ttDiFd^|^mIh=iZ40BDsu-pAGq?nvk zjD_N$+c9Tcq-+Hc-Nour2W`5&EiQQ z1cd*#bYIW?h-1`%Orl$HFX^7dRe6pQ z#pDQmeZRRjY zfN7PC9u+=C(MOQYVx&@H0D5v~T27^|Dd$rfj0K+j^q6KJQ$<9R?d>a?KwI6^aQL}8 zHbKfVn;wGJ4$2Vnz)9xnb@HYIOSm+Z%xT zp+95t&zgtAGDD+&N_iJZ;0J2Cdj@I&SA$e7jU*NeKBi$x|Wyw{?Y6%JV_9M-A(dI`*@EhTjt{0?PQVIyQrT%75ottmU@rWnC4{ z)!EohK-L>>iQE6xojv^w%ya>l5NPSvF`%sL#LB+-%it-j4HT2@H4AQHyIyGVhB8~h zcNhQW(x9+%4jXZ?bx>ihRD9ZQss8{)R*`l7w0$eGQLJX24>L9TauG{d`gqsZ?C?mt z5}fvuw6?+&d*5%-Zw?9j)t5aW{FTIWAxR`c!tD(O|2 zT=UMq=yXK0gbMw+-)+S0rJ?O{`;YyK;$3MH(N~zS)<|5Y?B+T{CFOv^Q$D(ir$;aMy!iDPW_!- z>zIkg>i%CvqG{anfMso~!!VadeTtgS{zu4Bd;8v9GyD1S-1V{}VXp5W>{s$LcQ>Z3S{`)?pTZf23tD$-{T&~37j}qL!Cm_c?c~>4!zBeT6>KvS8NOV)-LEcmPgd>Q6_aNR z!Me$#g$hK75+KRLiRp~iYD$T(x@ZzBB;ve>0_HKASj-7#44$pKSc&eWNFqx&cC!4m zG}lE-XWt^WD>Lw37QPKz%6e%ZjSP+q&)gMp`+Hz<^er#y0~uiB zG8nX4tA19ON?Wx;q$B`7BbT)K@_9vbd=Edhb=PQirhB%8^d)*Sa4~Pwi?XE&a^;^- zb&Ezdfn~oe4oHUMo#BUtkhxJs5n;7^ z8It7v`fRO=AMai@w}+aP3r>Zb3%DvC=VZLfA%k6j%aL{q`Myxi4T%BAi27Q5Y+l5U zG;!ktl!V@Aw+**g*5u{GTOSwq9l|f=pwdr$kirEgBX7NGH``EWHI1c(-3de zh7FPL528jh_r=biz`!HF_nMkx9rOdj2IQ|D)+w2o`E%?SzZ^-~jzr0CEH16jEi^NP zj!YbSOW^uEm9J)`4BG?yWcVDKe}et4^NdK~QORk-7)?5ky`0*xUnDtlRQ70CBK5w4 zM)bgs*4GPiZ+EghojLi8*3_ojlpX3U$6Nc>G&V)fi<4;^Q)=5kQ5q)Ka*dcAt<9r| zep#ipZ}X9-m55{;ZZXic)p63xK8RCvXP`BNXRJ=xO0Emvr7&XIUS~lTZ39 z1O3kFz$`JvNNhYaSGs*u&WhG7P{pvnl2+odf5EW(ww!!2Eu$Zjlsc_Ux?CsDOO@t~)96 z_}-2PvA^a}LS#-DC^=Z21j*&*o_JA1wNwfk-@vy25=X;{IioU%8D?m&(KqZP2e< zsaYe7@-{cqN8k%)68nn=mnI`3!mVW)an!J3tfva@rJ_6dp}vM@8F~7kl~oE*rb}--1aV{{-n!w9ehIJd=WuTRsQ>Hq zV5eNL;prqxvWT`V9AdVmW_H3N$;b8jA7BqwwEmbXrw-nSEviZy1~MSYMCuOJLtCTe zRQ1#Fox#0)6BL!aB0Re`m6s^=WFnidoK69x9jbw}V>M1jWfZo5LGz^hogeGLvH70X zli2+G&@X6~ZeC*d!xX2XD+~C^64B=N0|55zF*uSo-uIp@c%KHk@ByIJt9~NvSM#^v z!+}gA%>KNrb^eXUXZRh0Et)G~z*gMmH5Nir16FA=ys9|qhB2w{&m89+9oMfNdDE@R z+jP)=RQ{IbO1s(m3L|uLd7BpT_)v*{1@H<|_(m-&pJ{?Yp$|FgOzFZIx8h{NV(+wK zd`biB!(y-*!d@5Ux(!$A&u>*xL^a)d4@C8ZQ@1qU3StOn1S~zECj`9vrf_p*eiaY+ zuZM)<__4a`mhBk5J19d^TU4s;*_CKZfGVVG_fR>~+AuAeMx2A^G-sZ?(oaB~sUT8V zTC*kf>wO27Y20Aniakz~)6Wr>xJmmWNa4umf~k}V00b0h*{Xz!F#f68Eg# zgDDL^yiOAW25j2Hm3d<=xf$uiPebddf#^W|4x+nVMR1Jnv8ANtMToNjx(V!`lEkJe zRlV!IrF^ph7ft2g(Pu!FO8k6nYsA(2OKe>U5ryMP`PJA9*P4-|daV+oHuS$+7H~G{xD-bXDy|Gm%X;Gs&B$FNv6pv2lFMFYc`cXZ*Rc71-pfY_;nb`*Y_V5r zPU>W8Bpe)-5^|i$2BUQ4U$)YPgz~Bdsx(tl<^F06Y<>pekXgPmtQrnko={BVa<{rk zO_`71oTlfB99o@-tKo&++hqdvE%JO4!@1a*i4^dcBnJhKU)FkuGpUt{kbJ*)o4JL8 z7G%}GBu@?;%_1!PRxUHQ#TTWOvo7z2!2P9SSQ_rB!?~e0uB~;q%;sEnE)OmAYO5o4 z5)btAn-AKm5aD%wDkiZChL;Q)n8w2H(W*pMZwMiod1qjCRE0|yuk8+sO;&|zdFe&N z2NKlaU;abAkb<%Y_CLKeBvkK}-L;0hX!1!6ah?VqmdMqYPK^{l56~04C-9is2?)|0 z-$zk!pMpjopL^R^N}LFYhSX(1I0}2Kq5g;BhmgrZn~`%cTmJILGi#BzJ~6Y|iU`qE zr4PHX#=?m7`QcEC`9$JLh^CpVYdy@*=}^n@lZpE>^`K|^I_Kd*yDB8i?ULi_g!&RU zf}hMBpPNJ47-ICCd5Dam?+H1YnRch=sZNnrkk%c()dAE>k@;7mh+?vYr z$4Be20E;5~8O!mK=j82DBoqACA8psowRnn&{x}Nx#fOF_tay0d+9FJ-RY9(XF}FG% zW*AI*_n5n^9)>yTKePzFwh=7Obp*puS;*w7-+WkRlDEC*6qTXH*0{wZs$XU-?~0vG zwnj%9QB2Cl?t<-eMi-65A&JjD5ELOvCK}VniouiOzkFJK1i@DY^QyHnu9(P*ZBm^^ z`?mNj+EFLOu5dw4LARS|58qWWw(muK=WZ>^3xeTs1lu~j8h5s8luDt?=*&g(v}v*e zTA>$;7+f6+L&o8F$*uQp=tQYuZ6w`BFWhcc{nMgV!oGN1rnXa9x7S(K7eNLT`V@{`qwC&|Qf?Q_x zw$=AOe_rQxFNo{q3%&jEe595dE-^maKtev^wpE^>*hKY8hVDDsy`wuPp=Mzlq37Z3Zh0lA`ok~ zD3diAKd605!^g{hLeXBOs=`eVpTW15tR);L#zL`#hRjHL5v(o=$slYzRcIz1EwklnhG@Z89t?6B3d~O^%cXlE+Fp1yMQG zU0Ai3h?&z6TdQnjXD$rQG!2+^^+Z1oe`ReHvVF1NacucGeT36j zgug<6%X4@~&d%l5iITFYl|QQ*=%NuV7RYNHII!)73fmq5RwZ}8wzls}Fu9_(lPIrk z^3wqReOOD1=@f$Zn;&_Fcv13-%hKgnTjDxVsH#BrXd$VqfOPdhyGzc--v-yJl7@V~dsyrOrHhe*KAfJGF zO2dL_pBp<4Ppf#{_Gkwt#XYX}r=$1QqO@ceuyv2uz}frcP*-Z1dX!A<R$TTXy2j+-MasDt?br82}xeIW}v;Ny)BI5aGRqXX-cA3}+zgw73bzt?pE z#z!$DaI5P`T#F;`t)N?P9xxQg2Igc2q%IbK6>kHuGQb9qnS_VCOTY6b-!?%j|y zwLs0JYnOiY&IL74KYm88$?ii^GOoZ%{{{9#b!7-J>csjhljL*I&JMD-)%;BKps^Ul zYVv?{y^vk+B(Jh{z=LF#q=$5cS<;dk;_}Srj%n^KyCy}+;+`sCywKG}^MQ>1iu&er z-BQqbEbbe4mg2CS%g}qvBKYbUzdH?Tmn;|C+t&Tf^%NA0b5<(f-a(*C&Oc(Bd6tDb z)v2?5V_9TYtO)?S4ncN`CE)w{lu{h3N9v%6Zs@h<1xjd{!#VnOPe`Y8BHZW=?vlTB zs0Jts3F)29S($e_bEphF*Ayw@5wqMWUbG*AwO=|{5rL)@S5@gAfNb7hVAVX-J&;zk zOqB+h0T;j)8@JrTgd|~6FS{u8Nt!gN4#*fbShGv=kTb{CYl9i&b_6j8CZt(%B3dws zohBCsPOsI#e0wKj4s#ZwkhKvP@N74-dby5;Cr9&}P zBRRa`qiM6{LC@I_kCr&4bv7)GejwTFa7Delf~0tIZ5BHrofp9-IBugEBa#1{qizo1 zYq`Xrc%g+nf_0SugM_Zu@YAi(cYA*JROP|`pUbH%9rcqQH*#LaU8M)svGrxee7es6 zLHk*{SK|k*=Kz?%V=AWtXw3+I zqGee-jq|(~x_cEmJXF(=URekyW)#b0z9wWgOu6z32tHy-q0HGk%OyIp>nXf&)C@A| zRR0I5cHF%FSqlA6bV@J_5qFqz(d9vZGVc|R^>U>`sbpJ=RC;(A*|jb#&KZHyjG$_O zm;FH>;Ce#Q$&EnVY(lbu`Z&qVJK zfO`;pOx`DR<4PkZ7E@iCH_77xE-cU_ z1w&5xiW+%&_H|aa@px)RG6mAGbvhbIx9{sPy+7HCnm9k>(nhv}Xl|MA2tda~sEt#!RQ@JLCusPq8%AV1`+(=JO8{4AN z#Cvn80X-JB-7E3~wA$E1=mw@iEAS)T(vGDiS>8r4jES1KvYI%gMG1Q))jUSty^)iB z`9x?^CMfXj1AE0llJ75@#ZRW@Lr!L!q%~FOYC$}7^vmkd_3}lV5yst1M^zpDtzJTx1+0p7PS?LK6GtfipH0dx{0xN;HfH1+EQhW(Z53R_E zCgG@$ZN%#@sBIYU9ScC0W zT!(U+*-*Q|5#~rTe6r3(1OGN4o2o|$DH1)j_OTLxvAOghR)s{9>x#**D(wV?*?btt z4gox33Vsu>^(*K6qfV_}mgf>Go0iME8CUip|1>+V276PqxfUPqmEGp&#$09)6zfKR4)8kA#^64~cr zxWST8a3AdEJN$5{0Ikvew@HU;i12O-+ktTUAqc4iVRQKekmyzASDh+)7Ea^sZC!Cp7*yK&-S($fP zdT=v6ZD;h0>JgKvuE}Ei$)Be|9hJz|#!BEcxH#+G9{FuAX_Af07WRJ%q-pn_nLDm$ zgNUr~?vtj^{IPRsr+Zu!4}xS~q@bIO9md8n@#u`Zr`GBwC>ykmGi1&u=) z&XNHYjT2y}Vio{^egQ)KKXz=yeZ97CoUSl#4aA9%;+#Gio$RCcq17;;-yfS`V)IQBhMl&svrfk`-d&LA4LDWCzVj2j>z3YEBuZ&HJFse zJ@{j?RTy#ht!kes>AJ3A?m71#uDH zz(k$X^YZwunR`LpOQKHyTjKxIw_@=|9)8^XT>c^Q%gkUY3DoVNe-Sa7U}6?&2y8|< zt+lg?`5)pS&(V^q_hd)Co4k+Db5exbUo@@u5^A$it$b9zZT~&*VkJ?2VCjA3{rm3b z4}5&j;~?Y`ivee;*3++RbNPQ#6iPYW{7y^vpJv`zi23@YcUG3rc~;L(i$O)*cBVyhjJr?Ujbo0&;zk4vhn%>etP6 zlRVPR4Lxm#vTxWBxR+lSUtCDuhY{4V)2_3KS8!#dvt~LNJO}-Jk(HJmz+`W&<)l;c zX*;nl$zg;+oiVI+tgmB~b{6a4KC67gcax*o47g$s6VEpTYLjPUR1<|PnrZu{-v4;0 z_{><{9o68odsHzebBeDLdb(>RVO+E>PA#Z52g91C|MHgdI_SVmGUNXo(N7xFK?$y(EL?1JH7OvXpGJDcTbL`O!B6cy4p!mJpKc zT{4biLNyxoK{L{Gy=H}}Vl5v|WM;mc57*IoiIO!u?pN0PfuCPEFlP&}X#e!w9hx8{ z+c|B3mOhJqDA8%9c@*Bp10BXJS+6%cv&GB%y8UJkVG zBc4N=yX~Nki;pVNq_Od{afQmoi@Kkp>m-enzHU0lo$0KXcelk`*$)dv%C{cS^%)?n zkcUMzYSO<7%gCn|J}Q>^Fab+gd)i2O>-9_M$I2PQribKB-BUNDsvDJ8$i43SL_;hV zAO|P=^>y*}TrLV5q?FI%PISzEyLH@nBDh?SAH8buan-L%uTW@yP^xRgH>Cqh=xcE}`{g|{Qkt*e(#ONwV}YAUOnpZOf9KTL+i`=-Ij6Z6iY%pJ zJ@|8jPc5snRmCSFhe>VE6P}U9`o6L8E1DHciM3Zw1+r=FsnB z^ZDp*Kg`MY?P_0hQoFa-Chh^K;dztv|SkN5{yCKOua_$$IZ^_b<}z_<5AZ9Abaa*TvY@KdN%N$kLJy zalJR`ZZB^bSlA5%Gl?-ZO!4PiQjC+zOxZFygdkGKh9RxDeHVV{B^@4lg7JcXd(2z7 zjuRBegLyJa86ckZ$Ly5P{-XCO9lpmDlIi%l-@B%^$W$UFmO0*_iIjU6{VL->(H`YX z1}9U|)A#K%Pxk>L4Xu*M>@iqj-c+yO#~kW##`~5YB-JuhL7#Qziexb-03s0*6vl2U~H)b{l9ndOWs@38CdQ@ zbx;T5s5A)wJPwV0!R=r0vipzL+05&gf{%pm02Y4kIAli$riBwwR`L9T*|1E98biIJ z0q-jxc~k9w@t%CN=Dncj=zj5F?rFPRYf?q-$Q>9#*US=CB>jDwHrk6y1e{^#ov}N> z#r%Lq=)b-eo4GR@L*|74R_~MF4QhWM{H^zHb=>eWeAabf!1l)CyA_|1z!yzq#*of{ zQtHbmRU5ej$X34b*tWsP)Eq3_89j}hat-ML0As3U{-eQl!JAJ)Ki*6yB^Cl~krV&G z7cm*{?V36^l3t|$0+>E8rS~-Yed9HqNUyFfz-X?D3Ea8CmAWLA1sDUfR??AN@$l#h zBIpBQ-!en%KFiwxQ-`urY|o7iRJpv{3)0rLWp;c?$`C3V{qh3e%Ac(zbA1!BYbl!25Z7wUH5N+EYA> znKNsA(b*JHS7ydSuljDAf5aIt>5W5p>mm(%k#2MS={Q8h%{;XEiwcX7!^Hy@l3}gF zxLna2`*Hqtg%N6Z_m4V`;2ry%;o91onAw^Fm0TxIK6&e6PGBB7X7zd4D}r(C0gH8- z(nxM!vkz)vuXS#yz^^RQSRw5xSn$|&Fvs5>zh^UlBn8`lR)stjz6d)^FDXAF=NKrjr=$Q7sySE zsQE?$y2F=G2`=Ol+L(tOpfhu>DEeDLuPbX;kLvBG5n|3x&i1b$lUP!r%5-ZJJ9~(4 zj}yWG@Mgx-q}d;3mOkB0nb+t`smSdlWSmbdxOS6(++vT@Z2>CMJY8Qh#kxvFkE8T| zVUjjb&dmY<^v340&tWP|4Yk7Y-?6XdKey2VTHa$ls=nKM8=njVQUHHGPR9~A z@(o9438|9Psy$9svr|u?{Jb*$(~t#x953KbLb2T`c9OrahK`A_0zU*GdNJ0Ih^yNxcs zd)6orUIOENm{Z{ZABY7VZ%Cp%u5;-UdODS;pab(5B#dm=Jm)yy)SZA}M@nlKA4G#rYhviu|SO z@9sjGsrF9V*2UkKD?%txL2S~<=baqenxFnx=_jC?57N{U${;D@uC%s`sZscJJAL<* zdM*j5yc}bIy@A@c9bmc9xep24Ytx5#mLs^nDdARub2)hueF6xN4GRpM*I8!*Y{}y& z70X0z56j2<%hL0*7|wp3aX0($YmFNWtSPRl2VNN#%NK7~0w?gUBZ##FN*%|`6Y!u& zFY>bWqL=5pFEJ@q@Hv;!=`mWH(9O3|i)8Nfh7BjFzH?=ueM!$^`#^^)lkfC|0wnnT zF@is}#ieT_1b#ec%m1DbaMBtW&3H7rop63B9~Q+zp){*W#p=EIY*-}Tq}onk(J<#2l9kyd8P$I$4_ctan+o1d7=_B`|{*DB8X z=XRG_Hf%8;g?E#OqiQJ%kSwu>qnPzfO?5h4;UyKf|Dm+WY1DEAE(d0=cjX0AeL`lcnL?dB@} z->8^xw-``y&~{z?B+EM3Qq0UVX_5{`*^XHYj{dGm-B{arFnP8~c(d0ky`3e22Ll?w z@rV|Z{Qy%2RC#_}ZC~|ui|?2Ck_yJ#8`3=3T_E z%Q$=U4JF-oLJz0;t;9h`tRp7ibGsrV(JF+C3S>WL999RjqY)!yOUk>_6}q=wY)zqF ztsI|U$7v`QnU#?hl+1e%hq>)vAZ?gKR zC!gJGI8~o`sCrXQ2a{?cbwIQjeR@T=9%EPURT?Ps;sSuLzB&X_a#@!eHF^-JCJ7jz~; zUxk*4g__ry&ho0%%RYe;3~k`apy!~Dq(Hb9ot1LbasR`qWdGPt(ZPZ5RDJubCC&6= zcNSRiEfYs2NjxdTXN9LTlHQ8ZJjhG8uEBS{3KV3+Ug|XbQ{pRowkHdo`*VvBB0!dl z;7S9p!9_QGZWtofh@?Kbh0SOkHaU1uDiR?~5B2aS7m`v$w zsg+Q@=e;YktDZ_y?smy1L^iIw@}+H3R+SMJo>yPv|C^$k ztQo35m|VGbR$!!^qn$n+W{{t%uT&FW_ipS#Y5%VF+wa8k2DDU$xUUl&j1z@jp@evsh?>R^_a9qs9o8AC@q3KEn1^NNqnUMrvwO|dLPw9NX(H- zmp8fhTvXs@SA4bP%kk@m)&NVqFt%@V(U7CQq z%302Oe=Bta*V=qslvC_4-^!4-^yk6<1BU z1rysRCKh|5)PCjOnNyK6882K3XoGgjLX#Ag?Y6?hv$=XGP#7$F|G8k`WfRuY0xJwLh_!dh2 zKX2m0oQXQwb%hdppB~W)SY;gBP!z_E+_{%H!a;LGp>sDj3QmKWrz^>V+Q-!6_@`7? z*Y|WmXKVRW<8>Cmy*6pnkCak83^!6`^hhWOqVpJ>WW*Q2dl zw}Z(cKk6F!VfVQxM$|H>-g78X7;X~=K~8;u@jvBPK}F(ne?DcDmgg0EmhF7GZR#9A ztyp*6Kjha-QlEI|<#d|c=sCv+F9UVyz{35BY4v*=ef7r zB>RWdxY^%!;)U*QQ{8}hh-x1ebwPDYeqwA1?V4{E+>;~$N*)4Dd3RA$VNAUAu5BN%Yn<>Q=*Lvfwaj0b`Jp}D}-`*eDHbiNHG%h>khknoAo zY5YQB0Y_b%XIf~r1^A8oe)XSj>oF)l>~_MjTMe9m@X=d;ISoXi8`tXm?z7_7&8`xv zWoTo;RT%ORq(~NfwSS6Rnf6UCYa1=xFlY0Y5Z2n1=+HHi8OPJx?{zp|tILziA~-6} zt}maSW+?ye92lEkM_l9uO=aO%bxIA@1A@*}o`+8sk(}$+`KZb;d$OCR zuXk!vsoUPQKQia5yA%3ugdt*M473F_!N5rm4>?^+GzfkdsJOh|>u~2fjZxG<1$qFOLXFe^etH|RZYITSlT6!Td-|>@`Uj@WGSoaXCmu*Ih)m<)wjR8 zaM|6r^(jt^&r_X+`@*|v2UbsgLRe_9CKRI$(s-`(>7gT+bh{&N)S!dFg zO_Ow?qVYRDA*GcMxtMq#G>T*Y1xM2G}E$3)6PjaNa<>6u(-B(#?e-&4Bf2_;_mq6UC*}&w4 zq+}DT{Rkvrz#Lma#9A-e8F7wC5UBi>uK2R*|X(siDg@BOX6QCALRi55u* zGxFx~mTv$T;fxqzpcAV42|vehr6FBGnO09U+z4aQrIApOaQV!#Ufs}$8sS@WbXzr_ zlZeQ0vBf|3`N?;=M>GOJp4ia0Ms(dX^?Y>#lM9@Rz>*)-QwH zkjTf=J+PKUo#Yqm`YnjE?hE;~wGaL3bKAiR-08^VJE|%9lI>^5gz4tr`|?OZGxmQD zkr3j?VcOcA`ddZwPGthqO@?1C-&-#HX#JhbUq@N5$Q$SH&{ z9q*vAZ={?C4TfA6#$&pu6?~KesQgse&rQEO{aLnegk9Ho(=mRwE%^#^1vs@%NUF{| zF`9m=f=B&!U8SpLZb|n{(#GED`|=<_U2bM>qbC(%@qRucEACU)Y5hvguIuEcO#`vm zM7$}WDm}CvnUk^YP-;qsuz(Y(>}wVVi-?l~v^ z>4(E+A6|~!Bv-ph&zO_*{kA2K$ifpc`R%_Yy0GhiSffVEz_+%(2O;jB;u${wE>F9B z40K0dwckeYm`>gt#n$Rcvvmqc!G-^jqDja2l>hy>$%|2T95L@Db&);!`)^XT*JNXW zV)DFUrd$m3Quqz|1#F*@2JDtN+ba&A778q0G$fnDzhDKX!LK*)aO?lz0svl%Cqn81S6zMzjY1B^A?7~md4N2CjWMD=d9Y-Nv7kW$&KjCmesxTeugbFoJZ+ePZDNskf_3B zao;K7rlmi(C;d;h^gqYw+)eL%J(7kI5KthAUTj~~0JY@*!`lR-oBnV9M*xFP2Heo6 z0zUiZ`((jJy`yfld|7|8;bVb0_+xgs>k*hRxcKnYvg3|2|>DH^R>DZgm&0SUALg2Ccq0 zK(ivw_rE?rMm!oV^~Q0o2%AMt(>nzWuMjoIvTQu{%f38PS@KEu+AUXgU#vNTM;fYq z5OmCd4)g|?-?!_OFeG^#_M5EsX{T5evjELPwO4x5Oof@D|I=ovZCo)&6i}N{<&gcy zFwCo7A(`(z`tYEBpn-sgg*!pwPuZZm-M+PEQkz^;wWa>jW!gC29h`kAza(etu366+ z6ATwB^w~8heG{bD^tWUoj`5zEhp*X_*XwugJ#j{^6=>6HTsg8j9zA&dfy^#PGQA>( zOQxr!cx_lXR=w~TOktAGRUf^~y&FPBZns;!@$;9Hv}#`_t8#z}ox|k;`V(f9{WkeS zdr{ned8w}9Og@X#xhQV3d~(h3n(I3&AIviOvUti$4_ZZgHUUx4%kdqNj1T)Rp3!zV z5B*=weRWh@@wO)Q;_eiR1d2n8ySuwnq!8RG1gAi8ceelu?oL~Z6etqhDeknm(>e6Y z+&j z<;lW%SxsDjvQ2hqUR|vBj@-m_711eY#XIXLKaogd*H1u!7avOGo;oY{X4M61E~}eB zNJ;jirPCV+*Ew^@wr#%wKD<5~?Ji#N+Rs2#X&g~DjviFunXOV%$d}lMwn?}-$dvGb z)7nS$mxq~5dRq(-oG}a(eD3F- z>CzW2Rbf3}NsfB3x>Of`Dp5Uhgp&-ZrFt7YdcHm=xiC6z!Y-)h8*N=sVU*|m3L0JQq2~x>Fnf{X57-D!{w&9dtq}> z?Ii(`hkn$ROSY9@wNIY8Y4z5{JVxZQ-WG8;g&t>~7;OUu3~!Q!l=>@=Bj!lDjTChg zHW(G>m8hVRY#S7!tNuf=Zm~h-c>Jkg(5t{TRQYZS%;;lweJQWp_#kLl2G%>vuAi^$ z%vDnpTk--WhNre_rdO(iCxqB{)xTR*$+R1;#o2l6Emn*)R{w6hNVqIqv8&!)D<2KF zh@r1*yg*cms2xh@MT-lU3=}>K>@T9_ejg#26;}E2YRa4TywkhQHfI{eEM0C9m(jR1 zCX+TD*}`Y}yq%P{`Rbd^3fjQ~lNGdPOOhx{A7DG z^^K%aWcD*}_Z=cR{Z|^MCo?7IT|6WEGB%it-N#{X}{U+Ww`z3R0WQ;IY;V|j&Xb#(B7^L>6Do3YSvjvYl=KH zlp`Y!$_88=w9Uo5_+s2-#5eXrGpfV6BKN zZn5!B;w=IjKw4f8K8CK4@eJ0M^46DvBOE3TdyvJBU%^#vn?UR5ZOIZrM&2!Ws70L5 zLHdpavZIczBQK5(-0GLaYUQNe>N7?+kGficNoVX@0)vB&pBZSSuj{&7j=QLr*FFz~ zC}bWvOD5!eYC&=Tz|5mZkyz?*F8So-!fazYkk%tEgs(b^Kv2C5RNav3*Q61QEEjX~ za|RA>9X1;>rN>qy(BBG>)BW1=Q37#1sPsUdy*V2n-?Tcpu+-rMnSdL+owLWacO*~L4>3sgn2AfrxN6uJ}K_KC2VHagHe%+ARw4wrs?i#!oIG35T zm;_9}y10TuhK23M;!gYF5Xdg>{~` zh%@cSSvuasRdk7e{C#fu zm`vlF-`(x;yvl2t$F!T}FE4Gdv2MXP5;?VW1GajPmz+N2QNHr&7BFpkg6t7240(j1 z&}x=1T7P}Fr33xOx6go`HR+0;3;gD_5$?SkX{ov@&@~3tt*+(FZlg(W{%U)=Wk`Dove34XaJA-ua3jnz-Y6|tGWJSOXo z^it?QSME%)z@2(k3u4gi044dqV~c3nhZ&fS;H0p#fqhq82qw8C8C@;svA%x>8cH)R!7o9po2 z_1NT6ncL|4xhBtHpO9VQbn~p`F(u`R@HMcK68-?SS|(o3VD@7uof7DAoH_SSsHJ9h zX6y<8cY`n$pF!K+9wsLF!UYPkw@=#pS&;nv(63r5)=kjS;Q*qU^XQZ7Q)!H*|sWL9`%04+k8Tw#r z&X4PuvX@T}kHrVJP~uq!VS9xhp5N)%JFjHxm&e{Ut@YyuH#*k&E|Pufsns-(SC4CZ zGderOntW#5wlm~J*X3BwrNF*dWgXlOH^XS#i}Vmv)-uJy#&|90gzanF!q#%j9xD2a)jRvnsY)t!9Zf%3)QVZ$+; zOD3MdAI?p)4Yl@P?^b}9zmkb|ou|Swl4!H(&yaI8o5ej=yES*#HKeD@;wQS7U$clU zL}XXS4HuYTCrckyke6!@zNi-h;2u*pM(yjOK}9H|$zfuUKuyp`8E0g9#&3C==K^~8 zI~~e-+iyEO)(hiAIdEI{zS%M|=NXZ}&=qwXN)c+)tSnx2EI;=QQ_4Kbyi+^U>kZTEDOk0N)B_Be9%+#C*yyo*nBB+~1nb5x`S_0Ou$`l73Qr5}esFNpcs9N=AW$pxY!dA8%%(o}% z(kmO!;=*AOohKk!DId)f=bZsQ-4!(ELE82qFrzB&QwuN*QvuO5PEq9GjD47zkglDp zP-&94w_G7?-~3QUS>;X(A{bFU{&@G!QI}rq;22!W5Fn^F`@{LSKieVCZO&(_Y^mLp zi=e@RbzMWl{ffu{_UNnla4!63ql)kC9804-S%;u3Bi>c5 zdHfg9JmyJF3`rWvtEl&sZUcSyG-VDG`k*THDMqT6wIZr5B00pM|QL!K1~Yz1l#=uB(*ErnxQe`Oy$OE+A^(pV-1tU{hBZMB5gZ0jn&+x ze8s2bmW$$nRtKP?f;ZIOI%h&YPe*4k?!p-<`JCF9&yq{9wo!BseLjr5!nM$$cgsTY zrh-=FCvrNO#t=o3QnkO>1_3i)<(Ghr|K#F%o;7lM*}0j_ zRf_&oRSICnbSWtoyUgY7C~65ZUtkiJV`1NVvSXoxMB9D&UY719x@%5~4ijxZg;op@ z>3p6FB}E+2N6E<;=8&v-690`05UWgR#oU0Ra4r^o=!Qlu8!~Hlm>9bS2&_m!D!^kH zIb}g)v$B1u9B4xm2rW?r`)8 z7)7i0K1a7{tzH~K8zV$3;5|a&E*msgl&J=Nn`jqkQ0KOs9tkpt`3BG^xoy&yLYz)A zO4bS!YqjYG9IbhR-AWXOVapFy>>IyoRx^LnV4>rja7&(4Zmh@_?obg&HP6OmR!#2L zQC&uSMlj*u>HGg` zqTzq|MyC=P6osL=OfqJnZ+&u@G(WcPOWQi=DYhe#lDWSmodqb!^V={QGlm*XZEv0qmRV>N~{aIjg>2-#2d2-ziz6`t$Px?}f zpb=#>4k&KkV?Iyy9r0xmVX8u$lBGc(_0=D_>K=|FFJ_hjL-fB`Ft}GcRO-A!GAz(fQ_rDj)ncsRGEuBcHvFvvqYgf- zmSox95AUt2@?IhnWWoMYF@GVs;ytW}t37KhuF7S@yq8d2YH zv+>SXwn(JwbSw{kup`hiHe{MCW&k){Pmij2y!Ka-WDCqj?OVMCh%vfQ4euop4qOev z6@d9Atb{$j^5^2_OrA8DmNm|yQf&Q_K*e-dWB{UP5RiM=34Jn%>W}PaqC71;sm_82 zH*J=d&Cu7_BnaK zS@G;lC(t3IE;Y0=W+dDmYA2iM6BLjNL5tB7UTC(cA<}r{b^ODhuURyJN~6kQn(xD5 zcUoWQRdkKkuw1gNRR`nYVa+ru3et=5tjz%cn2&|6RP%*L5szk>NEiUXLbFdoq2!8O zN{xyoi}H5iduUp>MRWb~Wl_?o6~M>OE+^n~3(IUR9(2p94l|4^7CwKT{$pa=Bm5-3 zMI{bKesHzwT7Mj-BDyQe&NgRR^+5X^^v-gPJE**Hm38(}l7vUD7%H(<2`(xi7*tnu z!B_5AJsxYDf^au+Qc`2p$f@03ZP z_R_rP!E!UWd6>&=QTTeab2nhjBDSP6kR-C#ItwRe0j_rcIfu@IZ6ab}v3N$lMV7u0j0b^S>@j+IK`%e1n3UQ{+mIL;fOSW>c`{9uMRhBLU( zV3}PZT?v)|*Yi*V16_JM#zEm(nl8=UZJ`f#|I9iAW=;N8x~oh*h3CWIIZFvL|(s#!8;p!E2}F<7*p|JdHVLSxI&5hI0K<*ov>oY@f@^ej;Gx z5s`F5?`HCQ_7C0E^AuZ2^Z+Qhm^PxT2CLg*S7S4_kYBH8&$Rt`*(=TrE9ZE_MW1~) zrwR|7&LmTWz{+KD?bRs4!qZljuG9@p+AfU3cQ-+0+o$>g0ip#}FF8e0Kv`YWKIxJr z-6ypVDnT$Smk5IOpbMP5d{UUOp0Go-@#;NKhcEU{`Z?iMTBG{{xCDNZ>88y=pTcSb z{E4O)Kqp+<3O7UaBE3%w)H`=Exq=3d^VAnLCTVP=i8ioP@)5GEdq-nUftjyNmY9Aj zoE>~vW-KDMj9)g4C8=JaH9|g?Rmj97j>l)z0wEIbNkl)>{pZT;ENCY%wl|bfA*&Q1 z<+46jF1==rCG3bOr}cp{5}Z^r!Xj=sn9xoSbTieq7AjfS#PCwAWR)}=T7v-k1kEEz zP#QX_`=?TbzDp1lc7isRRWlh$yNxsh@68#gdHDEMfi{EIhT3G|rB)ax{nhrM9A;gO z%tAx_m1oERNjX(qe>~s%`c@i^v5xG9>T6b|3gzY?tLU*X_!~Ly-dRW|o?a;R8q~FR z6g(iz|6y{2M7M}WcaVDE;m@PkCCMz~%+atPxVX;qwv{0`ze9g~-K#QxL1V(W-B<4z zG!aahiYM=8{n|2ErMM_(lgP@{RyTCiJsN26clhr)zcNN?uiTnJR*9W4Y>BHr{YR-%=R!te z?YP7m+97FrTt#OmWCe`#QkJ-@7j?Zh06iCKi12)}m!m57E=BWNLQe5h;@jUXK0E4A zLy+O0UOfqB2Myj);|a+2s{FuT$Xh@d99PhaF7J7D!uC3FRQo%%W)3NSB2Zt@es;1o zSE#fx)tt>~c3p5}- zgvoYi7gt`|OFSYHks`WKf{-gcRQ*OZ=Pjf42)e}boN_Kc_Wt4`nOSgm!_BBv0{%=@ zsT5Pv*YKaDp(jRUD46KnDOGiWY|E-q^}gWWp_y&ZFJ<+8u;^zAa_R;2|^eJfE00;3K|HHFfr{HNb!WAcRt_#R?|tP-yIdQ3 zpg0B%k`D~lbklaWCe0|6))E`c?QOO0Y$LPQey2EKhD+MIB|_xw5lR!0V?@oxku<=) zH%7=5twecDa@Ji+7*h(i)_hAN9tw(Mtj z(f*|rFXYU89&1@XgUgCFI|`^lo~q0 z>U4`ac^3p3d2!rIE+L+=kTGINM`;gmFHx2|zek6)bYVDu_|ZY5H`4%12-fnsU7@;x z$B;@tVx~C4XL{wGd>Y||pym2Sw;(B|uXBfeM$BWjuG}FeHGD!nLaNTeq6o?Q73+5U z920D_0AiBbp;YV9c~tC)bL$B^=I`pQLfJpO@|TQwL~@p9xCWs2k+JfQfLGRn`}Nya zeQ{Ut{KD+Vlgn@UK18*`XE#~;^FGx7Xd-c{%?Fyun{r;~)rxED2%vIlkkNCb(eaDx z%9GNJa#o*K*gtG&__*ulqtecW+uKBtyv=b*B{VZ<#w+po*aehH+b^WNPTdP z9&;q!SYcmCzU(X9{z5o3f$c9E5uG*0-tnLr)1~C^V;^4#<=%#3A85@*39L-K1vfpI z{>bCl6QWL5l(yQXzhk~8aYgc#=#Zz&K-vTud*@XP4wx>WBM#>QCQ?2NM-)#ZjUfqkl zupRZ{Kv3O8(oL-OTG&P?Q*ko@x=*2R@2s8PYx5B#xvVJ_qEGP9lfbLGKtR=#$^WA& z4fMTzNv8);Qzbn@GQ*UhcZY2u>DDr8Q0Su0>l zEn2nAki7vqb|;||-LWs^n)=iBV7ayS*W-mcPvBZ<@+Fu!Fp?5mz3Ins@bEii-eUq} zulzD|to8b+e9J3M3S~Y8XEC+VNwJBEn@CjrzJk+Zz^}xWdHO3;B5@25ce0vz4{Q%w z7PVUaQOTqLWPbNOv*bi%KZKs$<=dARdyk0QIf3eo&+3!PO}7hHtD-7ZP*7@YY4FH` zhvd}g_y(|$7w|H$3>`5t-X?179)=;)D}@__y3`F;HudyzMEl2RD3x)GNsL1EaATx)==uc%f}~&lN8HIhDGJw>p{N^F*AbOVO2t7P0CMbtAQjtrgCRUW5zC0I>A0K5%wa?P0MRC%5V!o?Gyj;Tjwvs2~)`HKABH8{>kIFM;) zGFPCiyH&Dae+|ysOOywK1gM+Bu#Cs^bkh7jlD$)Qgs)C zS`tCK1uPQfo+(+aWo_Eg4w|bUi5)=q&{hh17d0YmmxWlNfv6H8UNkK`8vx{8pRicV z&#*HP{UA1gt3G72kD|-DjtQ{~wp{m!>O1a%$Bf#hX)cW?Mc2E+n6eMEMNsWWR`Zez z?YqbEEx4q5Jd-Ud@{)2z&xLB{TwW0_br*2i&Nhd8vm7J=(MJta(v>CSaNASAV)-OjQK8>^B z?mky@69JcoQ`>uaCj$AF*Un8Lq=5VbpDz%aW$GW(p*w%@E*$#C{`*!POR_Ytt~w!l z;}_e1j#xlKYI)aXW&A3Cz!Qf4D(_%x=ziIFK* zK!92ETR7a0zsX8k%<4yk4Xqh9Ij~4j{vFzY&?S|C=6V z?r$RtFfafQJVDr4f|Zk=FC^rB@&=1y;O-syX?U#-Ckg~!&Y{lp zLNSVliMAW82K>Vc2i&bmJWW3HP&Bx>d8tNel&*tZGS?XP{Pg%2!tBc8AQuAv*qp|4GlrMQjy39FS zXN({im!&*J5Zjna?KVOvTbH(6rQY`;m7P5zKNHLNY{W5CW=s@%W#*jO9T=yqg>uUD zJ1EmLV(U;qa=4>N0&b_P7o!4Ys6YwDvbNMx5`|V+EGj_4)QrNz)71Tby+V%786`Et{Q3xG=M(QJ z7WtBEJgw`lGG$6ZY=D;8!bl`_0OfRz7$GNX34K8v_5Y#Wk7XZ)21lz*j1I~bXfp2y z$WgV&xhKby78XiSD<(vWL6d9wq3&6;$>5hl9r#QfFJt1&4Rs)9?S#cWcru+f{DJ_oM|BXfMA#%l~q}90)EjUY8y2A7CNPWsQ5(b7;jM( zbEzBa9`<}Br&`9t8=xT7bAunF=E3sH$8fiqP9l>|*%Y50cdLJw3$+OB?)Vix>}I}5 zb%;AOwE9I5-Zn54d)1~h!={kTEuCU#3hG_S1em`N^008bOK8-JIqDPH5iPw}WdX@j z1-+eUhD`N_^N-s{=iKKn*hkR0smRpht5Rtp%(rV4K4TmM+ovNb7&U8MZd3T>2aOd% zN-ZzXifeX!cwPu4#D}hH1PMsr6s?s$gEQw*L~CEbEpRqRWs6X!x-^@V|?ZCm4;TZlQ!S|hTU(^O8%8vS0QPIRz6rxghtgLw_<|?MwbJ`*#I`(X+AKi|Rel>2X8*n!`W}&By7_JP zdvC)$XGaK~y5Rh2Z*Zr`m_Y_3+Gu&$Is@Z%bTLYT)Grf zon5ue2|3Xnsh`OtG#(|Ou>ED;I#2JyXa%VN!c7S)sH z%_>W?$dT%{rw5~!F4iV%E4mFkWZ;B&tsLRJS-tls#AV?0gF+?ocNq=eHN5=`9al!# z^R0kEtnN}yQrD|Zh$Yawvi^wWv(9BmecET1zF;tKtpR3uHzEhDdNw8TcI2gQ(+BKQ1W?zn9craa)cn`KZUy?YH z{?G?K2%)*0#9I0Bbg4WZNnB<8>bdaoA`;dwgd^a)*kR|%gRQ4#jd5e#k5MxMNai1d z-u~aimkV5gY;&-|3%E&x9H?rzz&b|ETkY zDS&-nZL>KvCIjO@r&Uotm-{cqz%|Q>ZrO|)uMWrYt3a7{=m&~+PP(C94>iMO^vna6 z68XSEP{Y0K@o>@+OSX&#Xq0;7=#rjDe@VZYM(Ysz*;yP)HWbvBR zKB^~W=z=H;g<)6v!Utf>uR+RqC@Y97PnVlNnoMd<$IBk$R80>(N@FpzBNVFc&O&%P zeRo8;RsrM0cjRNXmd{UVdxN*5ST-axw9*d3cC6|56r40gf>a1qv?S-AVEanBFsPSl z5TNnTXcOK96b%CQ7u=Nray>rko@dNCWdNr71Ak7}{9V-<);znyI4`^5l7q_0_3s_q zXze%f#27+nE?-xqj^)<`u2tR&7yzCLMvmOoZ|>qVFGuUsfO@@=`sDMt$T>)I_{3)X z1sm_u37OZ$PzuSM5Ibe>y*Ym6eWEoL7o9Y!yqzNY$h+#W>R^d%nb2#2nAd!9`1Ofz z)tHziH_CF~jL3sG5VTqMCcZftPQL&^sNm> z1kd(W8+{+g{TZ@x9+@*&*JETdy zZoz5`0Y*yqjn|{?u*f4AeLRcPeIv%%u~G(Lo^Qp>{NhGCBJVOTxq?kKm>SV%(r?Ao z3a8-mOoljfJ2r!KC|>cbeq8BhVLqrq=& zz}-JG+gelpGUA$zs2R}4f{j@IP3ti_$W2 zJ)$8>(}zvjf|9oCSy+;c>gqSN z8460$^POPA^OBVecJIM1!59mih*>mKvR+Z#`(YSj)*nr)5Q3rH?l-285&Iu+b?EWM z&}B&U(tbd{FMM?p*@t(=27X)HqFUzAE6k(2|>p|0g|3$EJ;rLgoiC@9~FHIO*cXaX)FO8jb zxnnQU?k$}+)N6OtdAAeqx|>Y(WzpM_;CjziLP^V$ue?Zb=qlF zvM)gZPzYoxkt)LAjACG2Huz(zLrnaN2#1_=qR;eMwe_dG*GH=WNX zPU(ssRB`-6c!IVx>+8Bjr7rncExkfOyZ2tPEHO z8cghHTjxYg}#E0fl zbvel_RVzOVoXu_9{48VX8$G0$$T()V3DPFV09RoIRLq`8>NzQM#bFM;!qB~QU@sEl zF@yur9h6s`(w*Oac$=Kpz+{3M37qZu3N z>B!$kE}nO&Jp5}Y-o-_92ImDA)@Q5_|DSmVnq&YJ3TR@2&;J5qkv_j&k!Xs&SLBr; z2HN+m9uN%CB}#*UC}t`v`r5{8d5|P_(DJr`Gm?=$kG#1rbF@RXfR@#0kgd`|DegfA zsBC=0lBqOP8DM>;K{I2au(0F2;dG!ZGlEjo`rwS;8|$zeevrLCg`-8(C0X>4Heet< zvd*QZhZGqX*f$1Cgl1PF-gP^ayrcnm#_v~&`HC~0t~sfIMeagVtiKE7TQSHSqx3!e zr5Y&W2|7&3z775dk(urwNOZNXVB_(ZA(FsUE19dq?y$B_DtvIEPBhcVwMmJyy+Y-C z(NR47UL)stM{uu@Kpp#rzE!@_RekH+Wb78EfjLTEdH5?8n0tb(a5ASOAzAWl$&V^L zr|A-7K=x4>H5&`Zlr#f863NDlW#54}%DxRwaMaIJqhNsv*iV;ux#N``cy14e*2Pp6PmQr1WUG9>M%9m`tP z%tG7O<-7pSSUJ8Ya`i~0pk*fAdisFd#jxV#AERttU?vY$WYffDng*;NFwtn2f4Zk! zqqU+t1=fmzM$pmh{~9M_8(mnc&HoWyI`)AGH&|t)=_OYUuK}>@l9xA%28j4^c6R=2 znu_6e6GvxX8jz-9)%7h-n{PHO3V3t$fSs%SpM0Q9DWm3jDPW-_=7PJsfy7sIq!!5! z`NGz+z&1~vIlITt{OpjCJi6gBFH*q363bJIy)xL{IFB;=1Ei|XiLa%wj^t_kpkpwm zeoC|N?W~)aRE*p1UXub6Qe>2y8xS!w;si^Yu1I-LWN0fSY}(}rr1Ahx)$oMl5|ghV zjcs|AA<%Pf!O0wcc1Rhj8Zr_dM+}(B;Nl#4RKMM-iGFsD#6Xa4R6`6E0}1Rk*f*p5 ztzfsX(f&V710ua`t>yY%uOAT-<9IZp;6}pRQhVI5dG)hDX=o^VcPdr|DLU+ofR~py zhKM&lB+l_S0>szhK6vI(r>j$INF{rJ+lu0kx14~jojklTJ?-*H(K|budb{^4PqQ#e z-Hf&eZ>1-v-*9f(Bm7e4fQ6(Yl|L+{{+;b3|9OeRba+YrK06u>+vgnD{_Ik-51U%5 z#Y>TRSwQb5Nx#J}D@z+#z=9Mlcab+2M;)}(0{ypEsk&dT8zK?8{=+I&qq|G4?kLI8 zDib5zTPysEc6?!bRJL(oj$6pI>(`YF-M7;RR|T?02^K~z|1u+}V;W*Yv<+R1Y4ThU zI94OwpQ+JrBtSxQ&(dZwZkaA>p2<1UV!e-&{x>p$vd%1liF0fuq&FO72J>`iq>CAI z{y=&VIc^c+kQ2y}lC=4-DE=mCdT2ui=inn*@S!i#*2DcN;%$NSKcQD~9HXALmc=jZ zLmwjbN`2_GS|c*0o};!JpDxt~*vb)fzB^9m6CKk6qw)Bj>BDO#q#q^Vh3=W=pVWPQ zo*X3hNF(J#Ll`84T~b^zqftc5K|jYHiZp^%PF6NWetG>zt8%w$15K45ZxFSEW&3J zlAG1Nc{rWs5-RQZf6?i`CPZS|{wZUcvv_EX7b{uqdom-rZl=IU+llAAJYw@R7GF7} zrm{!ia+Z`1g<=4vf4i4((2HTU@i7{z{0Z52Rr+1b`X08Hv<>5zBo30GiEN%9_#8`y zWwqYeS4X%l6#9ScI)L(ha+K7np+i&EV(fqM*1 znYqIKXW!de-ICZ=quyQFQs9 zy6pA1lC#fYsJ;)5p93js0ilKIf~GZ9G1aZD+&+$S%5Ai6m#D7w-9>`@8>P2mC62ed zBZmX$CoYPPsF z=WF^&GOdz1KF8pOGB&fi=}kK>PhTx;8x6S5PWf{#o3eG3EPktjBzv>#d^`38(K^_1 zSo`+~460t^ueqe3(N}gm3d!q!d`m+mw0z7;NY0`hzP}u%C8T=*8F&;Io*xZ_LVo!rDsbY}!-u^q~gEbN9Ke5z#`)6z8M|9GI zopnL$?>w6b7A5K|WdF4PGxmW{lX>Q-Q-o$_S)*@(327+*Q zCjW=n2XU$2Kq~$FK_bH8^rJ_QbLCI;+^U0bZ!}zPXEK1uWanE`7r}tMyqv51a0rCJ z)%khSV{+f$`5f^NuBFwHVG}(B@+5$u`TSey z$GMF=!`ZH5CwJPRCRp1sG9;Xnr*hK#54Osq2lfkkns9&@7kFhvpN|12#)v*JXlq4J z#rF6_nua&ZwZ}tv{<)s7BjFrYK&_2Y+RV20i%^y$#t7~7B@!Fn zA-=5g-qoiKLUBKy3gCw{PFnJCW+VRPh7s|{NFlT=cSwyZ_2cNkV>Vy~)xY`;T#z^= z6y6ofSAmg%zM;E%xf;J4(|I-Os93T%x)9m?UI znL+qAx8wUIkuv4~Wo%g3t}?5VKU#o9?dsH~5s34!VPtKBc*eM7tO;0<-SzY9Nc3Lw z&+4<*H%|J#kNu1__WRRg$9Cu)M~@QH=f9*`U;YMmqW}I4y4 str: remote_path_q = _sh_quote(remote_path) remote_archive_q = _sh_quote(remote_archive) - env_backup = "/root/ai-ict-deploy.env.bak" + env_backup = f"{remote_path.rstrip('/')}/.env.deploy.bak" return " && ".join( [ f"mkdir -p {remote_path_q}", diff --git a/src/services/maintenance/maintenance_summary_service.py b/src/services/maintenance/maintenance_summary_service.py index 68cb566..61fbd48 100644 --- a/src/services/maintenance/maintenance_summary_service.py +++ b/src/services/maintenance/maintenance_summary_service.py @@ -60,6 +60,10 @@ class MaintenanceSummaryService: warnings=warnings, fallback={"runtime_health": {}, "runtime_watchdog": {}, "current_blockers": []}, ) + runtime_blockers = effective_runtime_blockers_for_readonly(runtime_status) + suppressed_runtime_blockers = [ + blocker for blocker in list(runtime_status.get("current_blockers") or []) if blocker not in runtime_blockers + ] checks = _build_checks( storage=storage, alert_quality=alert_quality, @@ -94,7 +98,9 @@ class MaintenanceSummaryService: "runtime_health": dict(runtime_status.get("runtime_health") or {}), "runtime_watchdog": dict(runtime_status.get("runtime_watchdog") or {}), "incident_summary": dict(incident_summary or {}), - "current_blockers": list(runtime_status.get("current_blockers") or []), + "current_blockers": runtime_blockers, + "raw_current_blockers": list(runtime_status.get("current_blockers") or []), + "suppressed_blockers": suppressed_runtime_blockers, "current_warnings": list(runtime_status.get("current_warnings") or []), }, "checks": checks, @@ -185,12 +191,13 @@ def _build_checks(*, storage: dict, alert_quality: dict, incident_summary: dict, "automation": "operator_review_required", }, ] - if runtime_status.get("current_blockers"): + runtime_blockers = effective_runtime_blockers_for_readonly(runtime_status) + if runtime_blockers: checks.append( { "name": "runtime.current_blockers", "status": "blocked", - "detail": ", ".join(runtime_status.get("current_blockers") or []), + "detail": ", ".join(runtime_blockers), "automation": "external_environment_or_runtime_recovery_required", } ) @@ -211,7 +218,7 @@ def _build_actions(*, storage: dict, alert_quality: dict, incident_summary: dict for action in list(incident_summary.get("recommended_actions") or []): if action not in operator_actions: operator_actions.append(action) - if runtime_status.get("current_blockers") and "resolve_runtime_blockers" not in operator_actions: + if effective_runtime_blockers_for_readonly(runtime_status) and "resolve_runtime_blockers" not in operator_actions: operator_actions.append("resolve_runtime_blockers") return { "automatic_actions": automatic_actions, @@ -224,6 +231,23 @@ def _build_actions(*, storage: dict, alert_quality: dict, incident_summary: dict } +def effective_runtime_blockers_for_readonly(runtime_status: dict) -> list[str]: + blockers = [str(item) for item in list(runtime_status.get("current_blockers") or []) if item] + return [blocker for blocker in blockers if not _is_readonly_stream_fallback_blocker(blocker, runtime_status)] + + +def _is_readonly_stream_fallback_blocker(blocker: str, runtime_status: dict) -> bool: + if not blocker.startswith("market_stream_degraded:"): + return False + parts = blocker.split(":") + symbol = parts[1] if len(parts) > 1 else "" + states = dict(runtime_status.get("latest_market_state_by_symbol") or {}) + market_state = dict(states.get(symbol) or {}) + freshness_code = str(((market_state.get("freshness") or {}).get("code")) or "") + gap_code = str(((market_state.get("data_gap_state") or {}).get("code")) or "") + return freshness_code == "market_data_fresh" and gap_code == "market_data_gap_clear" + + def _safe_section(fetcher, *, warning_code: str, warnings: list[str], fallback): try: return fetcher() diff --git a/src/services/maintenance/unattended_harness_service.py b/src/services/maintenance/unattended_harness_service.py index 9734774..6d2a30e 100644 --- a/src/services/maintenance/unattended_harness_service.py +++ b/src/services/maintenance/unattended_harness_service.py @@ -6,7 +6,10 @@ from typing import Callable, Optional from src.config.settings import settings from src.services.alerts import AlertQualitySummaryService, OperatorDigestService from src.services.alerts.delivery_policy_service import evaluate_alert_delivery_policy -from src.services.maintenance.maintenance_summary_service import MaintenanceSummaryService +from src.services.maintenance.maintenance_summary_service import ( + MaintenanceSummaryService, + effective_runtime_blockers_for_readonly, +) from src.services.runtime.runtime_task_watchdog_service import RuntimeTaskWatchdogService from src.services.visual_watch import VisualSnapshotCaptureService @@ -195,7 +198,7 @@ def _check_maintenance_summary(payload: dict) -> dict: def _check_runtime_environment(payload: dict) -> dict: - blockers = list(payload.get("current_blockers") or []) + blockers = effective_runtime_blockers_for_readonly(payload) if blockers: return _blocked("runtime_environment", f"runtime blockers: {blockers}", environment=True) if payload.get("status") == "unavailable": diff --git a/src/services/readiness/launch_readiness_service.py b/src/services/readiness/launch_readiness_service.py index 6445e28..ef7e13b 100644 --- a/src/services/readiness/launch_readiness_service.py +++ b/src/services/readiness/launch_readiness_service.py @@ -76,11 +76,12 @@ class LaunchReadinessService: required=real_trade_sample_gate_required, real_trade_count=real_trade_count, ) + market_state_payload = market_state.to_dict() checklist = [ LaunchReadinessCheck( code="market_truth_ready", - passed=_market_truth_ready(market_state.to_dict()), + passed=_market_truth_ready(market_state_payload), severity="blocker", detail=f"freshness={market_state.freshness.code}, stream={market_state.stream_state.code}, gap={market_state.data_gap_state.code}", ), @@ -140,14 +141,25 @@ class LaunchReadinessService: blockers = [item.code for item in checklist if not item.passed and item.severity == "blocker"] warnings = [item.code for item in checklist if not item.passed and item.severity == "warning"] account_context_available = broker_state.status == BROKER_STATE_OK + readonly_market_usable = _market_truth_readonly_usable(market_state_payload) + readonly_runtime_usable = _runtime_readonly_usable(runtime_status) live_analysis_blockers = [ item.code for item in checklist if not item.passed and item.severity == "blocker" and item.code != "broker_state_ready" + and not (item.code == "market_truth_ready" and readonly_market_usable) + and not (item.code == "news_provider_usable" and readonly_market_usable) + and not (item.code == "runtime_ready" and readonly_market_usable and readonly_runtime_usable) ] live_analysis_warnings = list(warnings) + if "market_truth_ready" in blockers and readonly_market_usable: + live_analysis_warnings.append("market_stream_not_connected_rest_fallback") + if "news_provider_usable" in blockers and readonly_market_usable: + live_analysis_warnings.append("news_provider_unavailable_context_warning") + if "runtime_ready" in blockers and readonly_market_usable and readonly_runtime_usable: + live_analysis_warnings.append("runtime_stream_degraded_rest_fallback") if not account_context_available: live_analysis_warnings.append("account_context_unavailable") live_analysis_assistant_ready = not live_analysis_blockers @@ -280,6 +292,22 @@ def _market_truth_ready(payload: dict) -> bool: return freshness_code == "market_data_fresh" and stream_code == "market_stream_connected" and gap_code == "market_data_gap_clear" +def _market_truth_readonly_usable(payload: dict) -> bool: + freshness_code = str(((payload.get("freshness") or {}).get("code")) or "") + gap_code = str(((payload.get("data_gap_state") or {}).get("code")) or "") + return freshness_code == "market_data_fresh" and gap_code == "market_data_gap_clear" + + +def _runtime_readonly_usable(runtime_status: dict) -> bool: + if runtime_status.get("scheduler_state") != "running": + return False + blockers = [str(item) for item in list(runtime_status.get("current_blockers") or [])] + if not blockers: + return True + allowed_prefixes = ("market_stream_degraded:",) + return all(any(blocker.startswith(prefix) for prefix in allowed_prefixes) for blocker in blockers) + + def _resolve_real_trade_sample_gate_status(*, required: bool, real_trade_count: int) -> str: if not required: return "deferred_analysis_decision_only" diff --git a/src/web/app.js b/src/web/app.js index e0e1d54..0feb42a 100644 --- a/src/web/app.js +++ b/src/web/app.js @@ -10,6 +10,11 @@ const searchTextInput = document.getElementById('searchText'); const trustClassFilterInput = document.getElementById('trustClassFilter'); const lastUpdated = document.getElementById('lastUpdated'); const activeFilters = document.getElementById('activeFilters'); +const workbenchNav = document.getElementById('workbenchNav'); +const workbenchContent = document.getElementById('workbenchContent'); +const workbenchViewLabel = document.getElementById('workbenchViewLabel'); +const workbenchSections = Array.from(document.querySelectorAll('[data-workbench-section]')); +const workbenchNavButtons = Array.from(document.querySelectorAll('[data-workbench-target]')); const overviewCards = document.getElementById('overviewCards'); const decisionAssistantPanel = document.getElementById('decisionAssistantPanel'); const marketStatePanel = document.getElementById('marketStatePanel'); @@ -82,20 +87,36 @@ let assistantSurfaceResolutionFilter = 'all'; async function fetchJson(url, options = {}) { const fetchOptions = { ...options }; + const timeoutMs = Number(fetchOptions.timeoutMs || 6000); + delete fetchOptions.timeoutMs; + const controller = new AbortController(); + const timeout = window.setTimeout(() => controller.abort(), timeoutMs); + if (!fetchOptions.signal) { + fetchOptions.signal = controller.signal; + } if (fetchOptions.body) { fetchOptions.headers = { 'Content-Type': 'application/json', ...(fetchOptions.headers || {}), }; } - const response = await fetch(url, fetchOptions); - if (!response.ok) { - throw new Error(`${response.status} ${url}`); + try { + const response = await fetch(url, fetchOptions); + if (!response.ok) { + throw new Error(`${response.status} ${url}`); + } + if (response.status === 204) { + return null; + } + return response.json(); + } catch (error) { + if (error?.name === 'AbortError') { + throw new Error(`request_timeout ${url}`); + } + throw error; + } finally { + window.clearTimeout(timeout); } - if (response.status === 204) { - return null; - } - return response.json(); } async function postJson(url, body = {}) { @@ -129,8 +150,81 @@ function clearNode(node) { } } +function getStoredWorkbenchSection() { + try { + return window.localStorage?.getItem('aiIctActiveWorkbenchSection') || ''; + } catch { + return ''; + } +} + +function storeWorkbenchSection(sectionId) { + try { + window.localStorage?.setItem('aiIctActiveWorkbenchSection', sectionId); + } catch { + // Local storage can be disabled in hardened browser sessions. + } +} + +function getWorkbenchSection(sectionId) { + return workbenchSections.find((section) => section.dataset.workbenchSection === sectionId) || null; +} + +function activateWorkbenchSection(sectionId, options = {}) { + if (!workbenchSections.length) return; + const fallback = getWorkbenchSection('decision-assistant') || workbenchSections[0]; + const target = getWorkbenchSection(sectionId) || fallback; + const activeId = target.dataset.workbenchSection; + workbenchSections.forEach((section) => { + const isActive = section === target; + section.classList.toggle('is-active', isActive); + section.toggleAttribute('hidden', !isActive); + }); + workbenchNavButtons.forEach((button) => { + const isActive = button.dataset.workbenchTarget === activeId; + button.classList.toggle('is-active', isActive); + button.setAttribute('aria-current', isActive ? 'page' : 'false'); + }); + setText(workbenchViewLabel, target.dataset.workbenchLabel || activeId); + if (options.persist !== false) { + storeWorkbenchSection(activeId); + } + if (options.updateHash) { + window.history.replaceState(null, '', `#${activeId}`); + } + if (options.scrollToTop && workbenchContent) { + workbenchContent.scrollTo({ top: 0, behavior: options.smooth ? 'smooth' : 'auto' }); + } +} + +function initializeWorkbenchNavigation() { + if (!workbenchNav || !workbenchSections.length) return; + workbenchNav.addEventListener('click', (event) => { + const button = event.target.closest?.('[data-workbench-target]'); + if (!button) return; + activateWorkbenchSection(button.dataset.workbenchTarget, { + scrollToTop: true, + smooth: true, + updateHash: true, + }); + }); + const hashSection = window.location.hash ? window.location.hash.replace(/^#\/?/, '') : ''; + activateWorkbenchSection(hashSection || getStoredWorkbenchSection() || 'decision-assistant', { + persist: false, + scrollToTop: false, + }); +} + function revealPanel(node) { const panel = node?.closest?.('.panel') || node; + const workbenchSection = panel?.closest?.('[data-workbench-section]') || panel; + if (workbenchSection?.dataset?.workbenchSection) { + activateWorkbenchSection(workbenchSection.dataset.workbenchSection, { + scrollToTop: false, + persist: true, + updateHash: true, + }); + } if (panel && typeof panel.scrollIntoView === 'function') { panel.scrollIntoView({ behavior: 'smooth', block: 'start' }); } @@ -585,6 +679,11 @@ function normalizeAssistantSectionId(title) { function revealAssistantSection(sectionId) { if (!decisionAssistantPanel) return; + activateWorkbenchSection('decision-assistant', { + scrollToTop: false, + persist: true, + updateHash: true, + }); const aliases = { watchlist: 'watchlist-review-now', notes: 'review-entry', @@ -6488,5 +6587,6 @@ searchTextInput.addEventListener('input', refreshDashboard); trustClassFilterInput.addEventListener('change', refreshDashboard); autoRefreshSecondsInput.addEventListener('change', configureAutoRefresh); +initializeWorkbenchNavigation(); configureAutoRefresh(); refreshDashboard(); diff --git a/src/web/index.html b/src/web/index.html index 792ea04..98c8e1d 100644 --- a/src/web/index.html +++ b/src/web/index.html @@ -6,7 +6,7 @@ AI ICT Trading Workbench - +

    AI ICT Trading Workbench

    @@ -18,153 +18,174 @@
    -
    - - - - - - - - - -
    Waiting for first refresh
    -
    +
    + -
    -
    Filters: none
    -
    +
    +
    + + + + + + + + + +
    Waiting for first refresh
    +
    -
    -
    +
    +
    Filters: none
    +
    + +
    +

    Overview

    -
    +

    Decision Assistant

    -
    +

    Trading Status

    -
    +

    Runtime Supervisor

    -
    +

    Decision Packet

    -
    +

    Model Trust

    -
    - -

    Live Readiness

    -
    - -

    Launch Readiness

    -
    +

    Session Focus

    -
    +

    Pre-Market Plan

    -
    +

    Intraday Candidates

    -
    +

    Execution Tickets

    -
    +

    Alert History

    -
    - -

    Alert Quality

    -
    +

    Visual Reviews

    -
    +

    Position Management

    -
    +

    Operator Console

    -
    +

    Post-Trade Review

    -
    +

    Candles

    -
    +
    +
    +
    diff --git a/src/web/styles.css b/src/web/styles.css index bd9e5a0..14b4244 100644 --- a/src/web/styles.css +++ b/src/web/styles.css @@ -88,6 +88,90 @@ body { color: #9db0d3; font-size: 13px; } +.workbench-layout { + display: grid; + grid-template-columns: 248px minmax(0, 1fr); + gap: 16px; + margin: 0 16px 16px; + align-items: start; +} +.workbench-sidebar { + position: sticky; + top: 16px; + max-height: calc(100vh - 128px); + overflow: auto; + padding: 14px; + border: 1px solid #24304f; + border-radius: 14px; + background: #121933; +} +.workbench-sidebar-header { + padding: 4px 4px 12px; + border-bottom: 1px solid #24304f; + margin-bottom: 12px; +} +.workbench-view-label { + margin-top: 4px; + color: #e5e7eb; + font-size: 16px; + font-weight: 700; +} +.workbench-nav { + display: grid; + gap: 6px; +} +.workbench-nav button, +.workbench-nav-link { + display: flex; + align-items: center; + width: 100%; + min-height: 38px; + padding: 8px 10px; + border: 1px solid transparent; + border-radius: 8px; + background: transparent; + color: #aabbe0; + font: inherit; + font-size: 13px; + text-align: left; + text-decoration: none; + cursor: pointer; +} +.workbench-nav button:hover, +.workbench-nav-link:hover { + border-color: #31436c; + background: #0f1530; + color: #e5e7eb; +} +.workbench-nav button.is-active { + border-color: #4f7cff; + background: rgba(79, 124, 255, 0.18); + color: #ffffff; +} +.workbench-nav-primary { + margin-bottom: 8px; + border-color: #31436c; + background: #0f1530; +} +.workbench-content { + min-width: 0; +} +.workbench-content .controls, +.workbench-content .filters-bar { + margin-left: 0; + margin-right: 0; +} +.workspace-section { + display: none; +} +.workspace-section.is-active { + display: block; +} +.workbench-main .panel h2 + h2 { + margin-top: 18px; + padding-top: 14px; + border-top: 1px solid #24304f; +} .status-pill { display: inline-block; padding: 4px 8px; @@ -118,11 +202,18 @@ body { gap: 16px; padding: 0 16px 16px; } +.grid.workbench-main { + grid-template-columns: minmax(0, 1fr); + padding: 0 0 16px; +} .panel { padding: 16px; overflow: hidden; } .panel-wide { grid-column: span 2; } +.workbench-main .panel-wide { + grid-column: 1; +} .panel h2 { margin: 0 0 12px; font-size: 18px; } .table-wrap { overflow: auto; } table { @@ -836,6 +927,16 @@ textarea:focus-visible { font-size: 13px; } @media (max-width: 960px) { + .workbench-layout { + grid-template-columns: 1fr; + } + .workbench-sidebar { + position: static; + max-height: none; + } + .workbench-nav { + grid-template-columns: repeat(auto-fit, minmax(150px, 1fr)); + } .grid { grid-template-columns: 1fr; } .panel-wide { grid-column: span 1; } .training-toolbar { grid-template-columns: 1fr; } diff --git a/tests/unit/test_api_static_server.py b/tests/unit/test_api_static_server.py index 8a99390..7653630 100644 --- a/tests/unit/test_api_static_server.py +++ b/tests/unit/test_api_static_server.py @@ -117,6 +117,43 @@ class ApiStaticServerTests(unittest.TestCase): self.assertNotIn('id="trainingSection"', index_html) self.assertNotIn("TRAINING_PUBLIC_ROUTES", app_js) + def test_dashboard_uses_split_workspace_navigation(self) -> None: + index_file = _resolve_static_file("/") + self.assertIsNotNone(index_file) + index_html = index_file.read_text(encoding="utf-8") + app_file = _resolve_static_file("/static/app.js") + self.assertIsNotNone(app_file) + app_js = app_file.read_text(encoding="utf-8") + styles_file = _resolve_static_file("/static/styles.css") + self.assertIsNotNone(styles_file) + styles_css = styles_file.read_text(encoding="utf-8") + + for expected in ( + 'class="workbench-layout"', + 'id="workbenchNav"', + 'data-workbench-target="decision-assistant"', + 'data-workbench-section="decision-assistant"', + 'data-workbench-section="readiness"', + 'data-workbench-section="alerts"', + ): + self.assertIn(expected, index_html) + + for expected in ( + "activateWorkbenchSection", + "initializeWorkbenchNavigation", + "aiIctActiveWorkbenchSection", + "request_timeout", + "AbortController", + ): + self.assertIn(expected, app_js) + + for expected in ( + ".workbench-sidebar", + ".workbench-nav button.is-active", + ".workspace-section.is-active", + ): + self.assertIn(expected, styles_css) + def test_dashboard_uses_canonical_trading_routes(self) -> None: app_file = _resolve_static_file("/static/app.js") self.assertIsNotNone(app_file) diff --git a/tests/unit/test_deploy_with_password.py b/tests/unit/test_deploy_with_password.py index 8ad0a8b..e4d8b16 100644 --- a/tests/unit/test_deploy_with_password.py +++ b/tests/unit/test_deploy_with_password.py @@ -27,6 +27,7 @@ class DeployWithPasswordTests(unittest.TestCase): compose = Path("docker-compose.yml").read_text(encoding="utf-8") self.assertIn("./.claude:/app/.claude", compose) + self.assertIn("host.docker.internal:host-gateway", compose) def test_deploy_smoke_includes_p24_execution_layer_endpoints(self) -> None: smoke_source = Path("scripts/deploy_with_password.py").read_text(encoding="utf-8") @@ -44,6 +45,15 @@ class DeployWithPasswordTests(unittest.TestCase): self.assertIn("scripts/apply_migrations.py", command) self.assertIn("docker rm -f ai-ict", command) + def test_deploy_env_backup_stays_inside_remote_path_for_non_root_user(self) -> None: + command = deploy_with_password.build_deploy_command( + remote_path="/home/yuqei/project/ai-exchange", + remote_archive="/home/yuqei/ai-ict-deploy.tgz", + ) + + self.assertIn("/home/yuqei/project/ai-exchange/.env.deploy.bak", command) + self.assertNotIn("/root/ai-ict-deploy.env.bak", command) + def test_run_remote_can_wrap_remote_step_with_sudo_without_leaking_password_in_command(self) -> None: class _FakeStdin: def __init__(self) -> None: diff --git a/tests/unit/test_launch_readiness_service.py b/tests/unit/test_launch_readiness_service.py index 45584f1..b280d2d 100644 --- a/tests/unit/test_launch_readiness_service.py +++ b/tests/unit/test_launch_readiness_service.py @@ -109,6 +109,33 @@ class LaunchReadinessServiceTests(unittest.TestCase): self.assertFalse(payload["execution_assist_ready"]) self.assertFalse(payload["real_live_ready"]) + def test_live_analysis_allows_rest_fresh_market_when_stream_and_news_are_degraded(self) -> None: + service = LaunchReadinessService( + market_state_service=_RestFreshMarketStateService(), + broker_read_model_service=_BrokerReadService(status="broker_state_unavailable"), + weekly_review_service=_WeeklyReviewService(), + trust_service=_TrustService(), + live_readiness_service=_LiveReadinessService(), + shadow_paper_validation_service=_ShadowPaperValidationService(), + ) + + with patch("src.services.readiness.launch_readiness_service.get_trading_runtime_service", return_value=_RuntimeServiceWithStreamBlocker()): + payload = service.build_summary(instrument_id=1, timeframe="1m") + + self.assertFalse(payload["analysis_only_ready"]) + self.assertTrue(payload["live_analysis_assistant_ready"]) + self.assertEqual(payload["product_operating_mode"], "readonly_live_analysis") + self.assertIn("market_truth_ready", payload["blocking_reasons"]) + self.assertIn("news_provider_usable", payload["blocking_reasons"]) + self.assertIn("runtime_ready", payload["blocking_reasons"]) + self.assertIn("market_stream_not_connected_rest_fallback", payload["live_analysis_assistant_summary"]["warnings"]) + self.assertIn("news_provider_unavailable_context_warning", payload["live_analysis_assistant_summary"]["warnings"]) + self.assertIn("runtime_stream_degraded_rest_fallback", payload["live_analysis_assistant_summary"]["warnings"]) + self.assertEqual(payload["live_analysis_assistant_summary"]["blockers"], []) + self.assertFalse(payload["decision_support_ready"]) + self.assertFalse(payload["execution_assist_ready"]) + self.assertFalse(payload["real_live_ready"]) + def test_build_summary_exposes_restricted_soft_rollout_when_only_blacklist_models_exist(self) -> None: service = LaunchReadinessService( market_state_service=_MarketStateService(), @@ -162,6 +189,29 @@ class _MarketStateService: return _MarketState() +class _RestFreshMarketState: + freshness = type("Freshness", (), {"code": "market_data_fresh"})() + stream_state = type("Stream", (), {"code": "market_stream_connecting"})() + data_gap_state = type("Gap", (), {"code": "market_data_gap_clear"})() + news_window = type( + "News", + (), + {"provider_name": "news_provider_chain", "freshness_code": "news_provider_stale", "error": "snapshot_missing"}, + )() + + def to_dict(self): + return { + "freshness": {"code": "market_data_fresh"}, + "stream_state": {"code": "market_stream_connecting"}, + "data_gap_state": {"code": "market_data_gap_clear"}, + } + + +class _RestFreshMarketStateService: + def build_market_state(self, **kwargs): + return _RestFreshMarketState() + + class _BrokerState: def __init__(self, status: str = "broker_state_ok") -> None: self.status = status @@ -248,6 +298,14 @@ class _RuntimeService: return {"scheduler_state": "running", "current_blockers": []} +class _RuntimeServiceWithStreamBlocker: + def status(self): + return { + "scheduler_state": "running", + "current_blockers": ["market_stream_degraded:BTC-USDT:market_stream_connecting"], + } + + class _ShadowPaperValidationService: def build_summary(self, **kwargs): return { diff --git a/tests/unit/test_maintenance_summary_service.py b/tests/unit/test_maintenance_summary_service.py index f750869..8f4835e 100644 --- a/tests/unit/test_maintenance_summary_service.py +++ b/tests/unit/test_maintenance_summary_service.py @@ -108,6 +108,42 @@ class MaintenanceSummaryServiceTests(unittest.TestCase): self.assertEqual(summary["blockers"], []) self.assertEqual(summary["maintenance_actions"]["automatic_actions"], []) + def test_build_summary_suppresses_stream_blocker_when_rest_market_is_fresh(self) -> None: + service = MaintenanceSummaryService( + capture_retention_service=_CaptureRetentionService( + {"status": "completed", "eligible_file_count": 0, "deleted_file_count": 0} + ), + alert_quality_service=_AlertQualityService( + { + "delivery_summary": {"failed_count": 0, "retry_exhausted_skip_count": 0, "channel_disabled_count": 0}, + "alert_feedback_summary": {"count": 1}, + "visual_feedback_summary": {"count": 1}, + "quality_flags": [], + } + ), + incident_journal_service=_IncidentJournalService( + {"status": "idle", "incident_count": 0, "severity_counts": {}, "recommended_actions": []} + ), + runtime_status_provider=lambda: { + "current_blockers": ["market_stream_degraded:BTC-USDT:market_stream_connecting"], + "current_warnings": [], + "runtime_watchdog": {"stalled_task_count": 0}, + "runtime_health": {"level": "blocked"}, + "latest_market_state_by_symbol": { + "BTC-USDT": { + "freshness": {"code": "market_data_fresh"}, + "data_gap_state": {"code": "market_data_gap_clear"}, + } + }, + }, + ) + + summary = service.build_summary(instrument_id=1) + + self.assertEqual(summary["status"], "healthy") + self.assertEqual(summary["runtime"]["current_blockers"], []) + self.assertEqual(summary["runtime"]["suppressed_blockers"], ["market_stream_degraded:BTC-USDT:market_stream_connecting"]) + if __name__ == "__main__": unittest.main() diff --git a/tests/unit/test_unattended_harness_service.py b/tests/unit/test_unattended_harness_service.py index 1b6b905..ae95b04 100644 --- a/tests/unit/test_unattended_harness_service.py +++ b/tests/unit/test_unattended_harness_service.py @@ -85,6 +85,30 @@ class UnattendedHarnessServiceTests(unittest.TestCase): runtime_check = [item for item in payload["checks"] if item["name"] == "runtime_environment"][0] self.assertEqual(runtime_check["blocker_type"], "environment") + def test_run_harness_suppresses_stream_blocker_when_rest_market_is_fresh(self) -> None: + service = UnattendedHarnessService( + maintenance_summary_service=_MaintenanceSummaryService(), + alert_quality_service=_AlertQualityService(), + operator_digest_service=_OperatorDigestService(), + visual_capture_service=_VisualCaptureService(), + runtime_status_provider=lambda: { + "current_blockers": ["market_stream_degraded:BTC-USDT:market_stream_connecting"], + "runtime_health": {"level": "blocked"}, + "latest_market_state_by_symbol": { + "BTC-USDT": { + "freshness": {"code": "market_data_fresh"}, + "data_gap_state": {"code": "market_data_gap_clear"}, + } + }, + }, + ) + + payload = service.run_harness(instrument_id=1) + + self.assertEqual(payload["status"], "passed") + self.assertIn("runtime_environment", payload["passed_checks"]) + self.assertEqual(payload["blockers"], []) + if __name__ == "__main__": unittest.main()