From f926182aba094eb7e092f2a6502a1376dcd56ca0 Mon Sep 17 00:00:00 2001 From: Alan Burns Date: Tue, 5 May 2026 18:44:20 -0500 Subject: [PATCH] chore: remove deprecated gpu_cache_clear node --- README.md | 9 +- __init__.py | 9 +- docs/GpuSyncCacheClear.md | 42 --------- docs/SeedVR2Prep.md | 44 ---------- docs/screenshots/gpu_sync_cache_clear.png | Bin 24848 -> 0 bytes docs/screenshots/seedvr2_prep.png | Bin 39441 -> 0 bytes gpu_cache_clear.py | 101 ---------------------- 7 files changed, 5 insertions(+), 200 deletions(-) delete mode 100644 docs/GpuSyncCacheClear.md delete mode 100644 docs/SeedVR2Prep.md delete mode 100644 docs/screenshots/gpu_sync_cache_clear.png delete mode 100644 docs/screenshots/seedvr2_prep.png delete mode 100644 gpu_cache_clear.py diff --git a/README.md b/README.md index 796c257..9b5f98a 100644 --- a/README.md +++ b/README.md @@ -85,12 +85,7 @@ Updating is as simple as replacing this folder and restarting. - **FilenameAppendSuffix** Append suffixes without breaking multi-part extensions. [Guide](docs/FilenameAppendSuffix.md)
FilenameAppendSuffix screenshot
-- **GpuSyncCacheClear** - Flush CUDA caches mid-run to avoid VRAM creep. [Guide](docs/GpuSyncCacheClear.md) -
GpuSyncCacheClear screenshot
-- **SeedVR2Prep** - Prep heavy SeedVR2 pipelines with cache priming and cleanup. [Guide](docs/SeedVR2Prep.md) -
SeedVR2Prep screenshot
+ Screenshots under `docs/screenshots/` match the ComfyUI widgets so you can confirm you grabbed the right node. @@ -101,7 +96,7 @@ Screenshots under `docs/screenshots/` match the ComfyUI widgets so you can confi - **Shared toggles** – drive multiple `AutoAdjustNode` blocks with one `AutoColorConfigNode` when branches need the same look. - **Debug strings** – cropping utilities (`MQBBoxMin`, `FitAspectHeadSafe`, `FluxResolutionPrepare`) emit detailed notes; pipe them into log widgets while tuning. - **JSON bundles** – `WorkflowConfig` emits a single string you can unpack in custom scripts to sync settings everywhere. -- **GPU switches** – nodes like `AutoCropBorders` and `GpuSyncCacheClear` expose `use_gpu`; flip them based on the machine you run on. +- **GPU switches** – nodes like `AutoCropBorders` expose `use_gpu`; flip them based on the machine you run on. --- diff --git a/__init__.py b/__init__.py index e5f91ac..cd41a26 100644 --- a/__init__.py +++ b/__init__.py @@ -29,10 +29,7 @@ from .intelligent_auto_crop import ( NODE_CLASS_MAPPINGS as INTELLIGENT_AUTO_CROP_CLASS_MAP, NODE_DISPLAY_NAME_MAPPINGS as INTELLIGENT_AUTO_CROP_DISPLAY_MAP, ) -from .gpu_cache_clear import ( - NODE_CLASS_MAPPINGS as GPU_CACHE_CLEAR_CLASS_MAP, - NODE_DISPLAY_NAME_MAPPINGS as GPU_CACHE_CLEAR_DISPLAY_MAP, -) + from .filename_append_suffix import ( NODE_CLASS_MAPPINGS as FILENAME_APPEND_SUFFIX_CLASS_MAP, NODE_DISPLAY_NAME_MAPPINGS as FILENAME_APPEND_SUFFIX_DISPLAY_MAP, @@ -88,7 +85,7 @@ NODE_CLASS_MAPPINGS.update(MULTIPROMPT_CLASS_MAP) NODE_CLASS_MAPPINGS.update(STITCH_BY_MASK_CLASS_MAP) NODE_CLASS_MAPPINGS.update(CROP_UTILS_CLASS_MAP) NODE_CLASS_MAPPINGS.update(INTELLIGENT_AUTO_CROP_CLASS_MAP) -NODE_CLASS_MAPPINGS.update(GPU_CACHE_CLEAR_CLASS_MAP) + NODE_CLASS_MAPPINGS.update(FILENAME_APPEND_SUFFIX_CLASS_MAP) NODE_CLASS_MAPPINGS.update(AUTO_COLOR_MATCH_CLASS_MAP) @@ -108,7 +105,7 @@ NODE_DISPLAY_NAME_MAPPINGS.update(MULTIPROMPT_DISPLAY_MAP) NODE_DISPLAY_NAME_MAPPINGS.update(STITCH_BY_MASK_DISPLAY_MAP) NODE_DISPLAY_NAME_MAPPINGS.update(CROP_UTILS_DISPLAY_MAP) NODE_DISPLAY_NAME_MAPPINGS.update(INTELLIGENT_AUTO_CROP_DISPLAY_MAP) -NODE_DISPLAY_NAME_MAPPINGS.update(GPU_CACHE_CLEAR_DISPLAY_MAP) + NODE_DISPLAY_NAME_MAPPINGS.update(FILENAME_APPEND_SUFFIX_DISPLAY_MAP) NODE_DISPLAY_NAME_MAPPINGS.update(AUTO_COLOR_MATCH_DISPLAY_MAP) diff --git a/docs/GpuSyncCacheClear.md b/docs/GpuSyncCacheClear.md deleted file mode 100644 index f5c7793..0000000 --- a/docs/GpuSyncCacheClear.md +++ /dev/null @@ -1,42 +0,0 @@ -# GpuSyncCacheClear - -`GpuSyncCacheClear` forces a quick CUDA sync and clears selected GPU caches. It’s a maintenance node that helps recover VRAM between heavy steps so long pipelines stay stable. - ---- - -## Inputs -- `sync_cuda` – When enabled, calls `torch.cuda.synchronize()` to finish outstanding GPU work before clearing memory. -- `empty_cache` – Clears PyTorch’s allocator cache so unused memory is released back to the driver. -- `collect_garbage` – Runs Python’s garbage collector to free objects that might still hold GPU references. -- `delay_ms` – Optional pause (in milliseconds) after the cleanup. Useful when the next node needs a short breather. - ---- - -## Outputs -- `log` – Text summary of actions taken and how long each step required. - ---- - -## Where It Fits - -Insert this node between VRAM-heavy stages—e.g., after a large upscaler, before a memory-intensive diffusion pass, or while alternating between different models on a shared GPU. - ---- - -## Tuning Tips - -- Leave `sync_cuda` on when running asynchronous operations; it ensures everything finishes before cleaning. -- Use the delay only when you know a downstream node immediately restarts another heavy task. -- Pair with status logging (e.g., ComfyUI console or a text overlay) so you can confirm the cleanup is happening during long renders. - ---- - -## Troubleshooting - -- **No VRAM freed** – Some drivers hold onto memory until the next allocation; keep `empty_cache` and `collect_garbage` enabled for the best chance of recovery. -- **Pipeline slows down** – Reduce how often you call the node or disable the delay; each cleanup adds a small pause. -- **Unexpected errors** – Make sure the GPU is still initialised when the node runs; this helper assumes CUDA is available. - ---- - -Screenshot: `docs/screenshots/gpu_sync_cache_clear.png` diff --git a/docs/SeedVR2Prep.md b/docs/SeedVR2Prep.md deleted file mode 100644 index 056077d..0000000 --- a/docs/SeedVR2Prep.md +++ /dev/null @@ -1,44 +0,0 @@ -# SeedVR2Prep - -`SeedVR2Prep` prepares heavy SeedVR2 workflows by warming up caches, priming key models, and cleaning up afterward. Think of it as a one-button “get ready to render” helper for VRAM-intensive runs. - ---- - -## Inputs -- `run_warmup` – Execute the warmup pass, loading and touching key models so the first real render doesn’t spike. -- `warmup_steps` – Number of dummy steps to run during warmup. Higher values build a larger cache but take longer. -- `clear_after` – Free caches once the main job finishes. Leave on if you’re about to switch projects. -- `log_only` – When `True`, print what would happen without actually running warmup or cleanup. Useful for testing. -- `notes` – Free-form text stored alongside the log output. - ---- - -## Outputs -- `log` – Summary of warmup and cleanup actions. -- `status` – Simple text flag (`ready`, `skipped`, `cleared`) for downstream branching. - ---- - -## Where It Fits - -Drop SeedVR2Prep at the start of VRAM-heavy SeedVR2 graphs when you need stable runtimes or when the first render tends to hitch due to lazy model loading. Run it again at the end to clean up before switching to a different project or model set. - ---- - -## Tuning Tips - -- Start with a modest `warmup_steps` count (e.g., 5) and increase only if the first render still stutters. -- Leave `clear_after` enabled on shared machines so other users get a clean slate. -- Toggle `log_only` during setup to verify the node sees the right models before committing to a full warmup. - ---- - -## Troubleshooting - -- **Warmup takes too long** – Lower `warmup_steps` or limit which models participate in warmup within your workflow. -- **VRAM still spikes on first render** – Ensure `run_warmup` is enabled and the node executes before the main generation block. -- **Cleanup skipped** – Check that `clear_after` is toggled on and the node executes after your main render branch. - ---- - -Screenshot: `docs/screenshots/seedvr2_prep.png` diff --git a/docs/screenshots/gpu_sync_cache_clear.png b/docs/screenshots/gpu_sync_cache_clear.png deleted file mode 100644 index 40f4ad10fa46c959d2c298a8b8bcbe2c3a166e6c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 24848 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�b42moL? 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 z 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 AsQ>@~ diff --git a/docs/screenshots/seedvr2_prep.png b/docs/screenshots/seedvr2_prep.png deleted file mode 100644 index 5e31876a36bfd86b25664da4cf99d56c5cb1d060..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 39441 zcmb@t1zeO}_bxmL3et^%fG`3gFm#6?NHpi8D%J9>}1lqR#Nd z$ra8Z%*oAR&c(&cASlc!EFjEfDkR9xz{ADE598v6aS3p63yW~`h=AY!^@kBW&eg(F zL{sMJza9p@i8ETeyE}`(V4j|yoSwX#POerkZed|z7#9zWhlc~S;BfPHbT{?laCBq( zcMmdfH*;4TXLlPXM+Qufre;nr-NhNfQ2&{OgY$p7b#(jJI)N2~d6_!HxH-8nbGmA1 zVg8?X&M#f|5}j$X=^uaZ)Z466Yl2p($yR;>j8$zgqe-A$P-t%sk@V_wv&_n zzjsRg-$Q2L5#Z$JW?yy0=!<89`n3`kETb$7xv#)Rq#(!P5`M+L)f4cRwhJ#N3 zH{1PBGdCwocTZDSxRe!Gt^cz3v1it*o zjlms(?{WoB>V^ia6#{wJsURbz?Uk{4iR<@#)SC-69ToMmf(BRUThl{L+B@%94Jt$7 zV|QY#)-3sK{+=WVM&CW29_c<8a5xiDIj>Rqo$oZAUxHR}81)dd5dHhS@`&Lh6U*=SGnU`pzJ0qL;U#GecVvLw^f%g&B&$KHFua4GAho4$rDB^giV3FRZpRFR- z;ryOR8ZRsu>J6d}WG*woS^67J67dr*t#-;a1U|MIGq~*1s~}`5M$E1jrgif9=GCR$ zsQb6@Qogx{s+bA{q}&7(RTK}yA~lj|wPM+*x}^H&K75~)Z+mVOj-g(9&is&eWy~YU zo^TZtQ$SqEKRv+=h=ES(8;)7X{gk)eGo-v&5JPo$pN2{+rR-}HieAP{!)tKK1yEUZh+V{}@wP?u^dO@%w?)rNy7 zy-yBl)(~gMk{rJtK}SNj{mw<_@68t)4+gE1tkn#09C#56kTmbq(JW0gJ1R|rtNl+T z{MYBbB?$b7ygE-jn=dnGtW5ePU}WK`p!-k4l(G>Wa~r=lU}ESHE&BIoS%@RaWCXpj z|LWrNWk+$}9eqZLjZfp=yImcKvuX5~5#y5!7n;u;;O5V3UHO&h-Dlcb}3Tn*EuDQ(77jY@5P$l@!)H- z2EPC9XCz}JW(52lo%XwIL0z_}Cn*Pt%+53i6~Qu?b;{{4_DTGAkdh2@zY9JlM+(r8 z?Gl|`&0Rw${V>{dnk!WWN9rw9Utj0;y7)C0qN^>p8{OsY>}2U2a0oHfsH$Kd@x_^= zx!Rf$&X2uo`{JM4pTt9BdkFqybCvHDA<%>8x?8c;u{jFc=9}inuVY=-ub^ zG)q+eCqKgS9P(B)M%9cY&j<9i%2$!-1>~uigkm!afxbXr6z$GGJhryIoW2~MKAhO( zKDu>ibT*P+ir#BOC=3+NEc@(LuuNZ^rf=4c?>67|eZxfZ)G@Q+@KU#By9NHOdDi8{ed)UzYMsKNlG0~2{r{ot}70cx9 z`!p1IfV1=Tcaw`V8uU3m+OsRE&TtEHaUiLPue6hgzlZOG>$BYAWO69N|__S6*hfty18V)dCa@)5)ZXW>+9+3IiGJtZlWi$5ZlPuOo^wTo|0EA zSfO{SSm=F!qw(HCA5uptMJX!bE4`mWAE3{^qa(L^!mf_(-@}8~MG55b{hM(Wac91V zCu->JEYx&W*n8Rg1U;2Y5BIxP@T5rpT9g_xvnXgXCpKLiCTmrfz?$|noqOO9;N%s- z@UejkjfAm$m63Y!tx#Vgj|L-|D4yTELbNeqy9Wn{USf0&ZH|1mFX_v)S?R}5Z^>$C zC6(mN-mgdU(? zm{Yr%xtS@RS=Hp1*L{+G`C6O3cL_G%l} zT#MNDKiHaKdaR-Cqgb!U&aA-0@@UzqWxsZ^X|nWQ>3|QF;m1Q>ZhrE;zAmY%{tZQY zY8BZSpYuoS7zaPJf&X_Hj*6@hOClvzDg{;>+k7DBno9eU$Ed-Z2)zn3LG?UQqmwSO zXp%w?BG9X`=*`ZPa#+j3o?y$7O0{C|qHC7VT**=25&h+O?6o_|iutO^`^#uF*sieY zC&$`Jy16MEqSL6p9$3?_qF=0Ez1O;nq%Dzr6L#M)zo9bq_PKMiPF7+5k$JC2 zVszZk<4R+*KV@%CZAqf1vd(dpaisiq#z|1yhzpbS-q0fs7)z|)OV>)*clZyaNE1T4 z(dTFAL&nGT0REty^e#ZZ}YE_{Dp_vwN!qF$I2r=}~zHQF8_uL?d}O zs`llV>!VR0*vl>SJ$~{mx;AhcH{EibDQWun>L<@6Q^%}xQjR8^P~pMv!-93}t&NS< zMt#KKqDSg4=H#A`wz)1BZ!x+pnhrr{X+vmWdPjjIQwbJ6i1b(&%Z)M>`mvo9{RWTA z76ZT4vMX1SHJd!DAG3aCom@N?;56py-_iJPRLLs>&Mm-wL?U?_HahKdZ(8fE?&Cqe z$O2BICcbfOm{HTg5QW-9D#bW?Z3FE)JG!;wlVjrR*?;^Fj>6<`mAB}&9H%z5{}m7u zv9HjBnnkEH_?;Fc*E;?^8yJY462IV7okg6A!dfmelbQUe>9#!+SO)|NT)%-p`$?Fy zw#T;G)z#)NpZhcO3WGD;b1S=i#OG3sfY)qMNa#gwKP>?)$@U;?2PdL2m}XU$Hof?Q_7Yu)-B zrXc;HMc2vm&wxW@)x@K|LTjz&i&NO>@X+dScl^4*!qo=`okYir`(9#v7PskSHK5D0 z@BeI)#HtNlj+tDhO6UAJ?Bbjd?_P8r)EWeTvwZeS=+QHswRapZ4`?LCeOK)%v)(-- zy>PS)99)$Vyx4w2>qy;e9&DL2Mm4}rC-g0MuPMOkHsAX6KiDu79a(p?Hr-incU6ZX zLT|4Hgs$~{HH1XAGi7V#r?%Ody{{VEw;2`4RiK2hhxczjwmp#);Bp>BT$n# zT8Kh6>Qzv)aV+=fM+Pm;CdN!Nmm<&oZtW2 zD5El$F>aM_m95MWYT7^4THv;@5XZz4n|(Y72JHW&BQ)a^ZG>Ln97~S+N$aw)wT<2B z;do2T&%rBn3Gw?e)0K@}o_7|~jL=RlOy{s<`}IhMcj}eI^i0>x-o`k+|160MN9Po3 zD(mtb>3{kIhFv4Io-5PS-}Sb`QYwTo3O^EHFoyES-?FxHTpA`#E5GM{L>Y_wr+YX} zU-n9#Esdx=e;66xvjA)eYQRk~bO%fuB9T{`*E{P>igQ1?yRDsm+_ok{){M_%Y+$%T z>|Dn{JMwoayH1bfMUNy7t}<)NlMs=-xr?IZ&L5rqo4FUc9ySES?|-J zuJX3%Sn@KFriHw*SJ(LBXY=HF|3Q7uK#p5-9|y8o#YzuJD8@|~#M^&K1@O)4zDcXi zhK37jaG%an1g#9h>t3`ji25|HRjrM!+bw68U*7S((;2?VKGkXCFuUnoXXsFwRJaPp z410xA`hFLjG{c9FordJrz3*cXGen}zwu(-|^%lIj2fnx6yf>L_a;997m2Bd3+EDIC zbGRsE)JGz5%JAz9S_Q|;8S}7qcS8NrvJ5rF3smo-GV$Jh^zbhwx&<{$gWB0NX*M!c zf3uycW?Bcp0d@NIN#Zf7!@jWXFP=4d;}8G78$}$Q$vOESU{KS0aoO}eU=@#F4%-Qg zWWRN^a9@y|x`<_Mc1A2qipNrSB=jsGc3BX+p!E!Tl!)ps>PQq3B`uiV>v8zw8KWXY z7C`wByn{T%xrUS@mSVNe$D!%-{cQ~Bz#dtV%@hxdrA5ugBEDw-C>8iPK2J?ymR8tu z{?oJN2V~e_^kl2cA9c!fGaAEF&RTBJm zsMLU_qU%q;Biv|Na-0gM<7Uz2ZLm1=RxxN0Y^GQG05}HAV1i!Q_74n%<~;t|s3;TkH4bU%_7gaxr;qASh@6Z@8RIh^&%YvD<)RXxLXg?Pn~%Hr(e{LfI?^uTM(p{A>Uy0gfkQm&$b;r5RXhk)7oS%ztCu{p+c}YCo1pFRlJz`sh zTAaREEZHw&*CD`XI1%&rusjk2aN~Ko<=U+9)=-Z_NP z3VU04S=>tIe9~#*=XxuMVGPIZCpM< zDA26=A{y4RGfZ=htx+!gS67$b0M%@^zO_e0TD1Ya|DbawUxk-X;IA}HQa<#>u->u_ z(J>J`uF7uG!2}6>h$s6^{GWY>a0yz{`Gb2H3n&@(w>-DjMG*&Z69W4I*|AWb%e=#s%Ux{RR%Wsr2Iz8 z|ZzGw)T(}j0y{wXSKvX4cyJ#c@YlX>k3K^Jy_U64ao*)Uf^TAfq|+EMa7B?(ebdk7)z(lOXI50S~m; zKEHc`?&f;av*;>BE0F~gicfVAax$gYCk|su=$;881``WNj1qmqPJQkt@o_kkfZ`-f z@q66hwOsmCqZFt~caN=niItW=sX=J~%+u?U%NjapPck6Nug<&b8N1^Q5q}x*nou&6tV9^0e7( z(u~h8F@6gY&K;RcPC;?%CxM@?{w>%kI4bp>B3#?j9}{{YpC}azG+8OLKL@EP3I&>{=qoDjMRY=+JOA|~-kTwTZ6jUJ1UM|EUHq-KA`e1kmZ zs?fVgrFA}Vy81dpQd+pzkP^|e=)bgmbtNFBY#3~oKMk*o(Co;2Y|KTyDzM^hLN}9= zuD+%aCHE|fWU2--yr`hW{2nm&7JB+Q3v5GgJr(A{x4%y{hT2kY;uB%ML4JkivT}Yf zznQRf^>yi1`jd}`SF0H?_W0G6lL)B$2VDW{mN!pJf6UN@L?Zk8bXY0J)z#JeW53rA>nFELN**4( zb`hd&H>ig9B*n**XCXajTSLmqIL)3RT$U6VNNI(fAD3v8fqqeGL-qjgO{G3u;S~{PlM=GNrT7i z>F(V#YIg(#Ny`1?p8dVOADx{r!>=y{(yhjgIg_2Ho5i`gxwCB_$!fUP`Aycp1oJB` zEgda4FIo16*Y|D3tg_+sx zWKmgFb*j#7*)NH+ko7};K2%)%a-lonX4{PMl?r!~+n=nz)yUAGV zTU#+=h71Zk4)!CkG5WEl#pAs$5^gcUSg*Q|#I|~89&9(00 zWOv@~Lt8}Q>e`wuUF@=J-PTl7L!oLDR3Rxb@tKa!o>yaB9GRJ{_s)!zhlhu&tE<01 zYG&qziHXUlW4r)<3f>a!4+{$xLqXzqy9rBmL`6hI1O%S4i&h)lBju_yEZe>9Sewp( z7bl-TY&&er&*|_Wq5EiS(s!YYEUH8L)6>n(O`$CXW#xC>7Ft?b`+n>ygElrcD>Z|w z8{69?b^3C0a<5*!O7Y;kqhe`kX<%@t%n(K$wZ66%7)EHFHr4z})F1aAv7C~U((~u( z!?q6;H1h^NnY0)e4d&Fs9y};0E8F^&${Ux_5f&EKmZ2oWs4+))@fvIZFdH(7)t{Og z8abLJc!4V$8yP7n3?uQmxw$Io0%VU8M%Nwe?Um)_XLh}Yhllg>@^*RM@xIx{r1J3a z@ZISZ6I^nw14DJKYb-B!5^l+bD(L9w%ng?IS~hs?&h_`J@6<)-7FSkQMn>Xm&nU7b zI!-luSHHi`!opHiSg0;dj(>ZZp4X<@AVMb4F*Z8-Heu-7^t#C{E^G&D_41D&qdMmu zChPfOFp}u6HhgIt8yht>0%(q&pFjJ{z?tE?6+v!A4wl$nwu^y`x;@AAw>&;^l7j8 z=nnCbMc1a|DPI}dySHxLqN7t)Q`0Tc1}0BLL{u>aRExt#VdAiatSm`%z|923g45Ge z#<*}jP6Y*pl9G~@nqEs$m$`Oe8eLpn>xTk-e1;7kL{@G21qBaSSSUWmbk?*SW;SQPYK>*Vqi<%$STD}c&o3l&>-4=>(-bZV-HiG( zw!|~J;hQ&a7Jn0$BE7u4G@bh1*QY9$^kKl-+3L@4-~z!gglx50DQ7!Nbi=@DIcRbg z0i(>Un7a4*R$E(}wahcdI7%9tP9IN*UK4kMYEhe8A$3^iJlw*9wC7sbHREzmiNOZ2 zSZiyo%iBOyD%dIurwaNWFxV3;eSa&OK<(r3TtH!Mt)PKE(x-`TF)1fD41FdkgnR?n zpSVXA-)q^%J$PUs-BTIfe{v#3EFL0#pSWMw^NjZnHW4om!CVF~cPA&gS${`I$6(1- z$S0W|7odGnf_cT&f~}}F*mPADo^=-57t6}o7X-fg)u^8Yq6UY(LeEe~r*Lo;N`6zM z+*j;9u!f_fqmhvj?>=S%PN9WeFJ=~&=g*(-?&x~~W1*s=0{<4z0hDr^p1$SPxyQ*H zU%pDvLD%iEu`%FaXRTJXC=;`?Vgu!4J9(cUdAjSD>Qs%fli~qRd2lsjIgd4xJVK_2 zYky#QKg2KgBI>}f+3&WB&WEzHr{Hi63JVG8nV8VO-3$4l5ET`rfo4^RXYUcAjfsnk z1EFe6v-C3SV_n_p&%{Si1!`*Qq@*MOEh2N(nVvj(;<-H)y^~U`4Sa6?>6>5i(A10! zLu2C@AN<|UAC9%aOloRs`t+5fa*HQ!vnArcf;j8Lg1(b35d^LW&+f^aReWu16k}q- ze$}&sb<>}qb;xS3h2mr8EZVSY7<@#a`tRP^o1vtnTv%Kz(PpD;J@b=D?;V+*o*o*a zlt?56!K`9@(+se4Ni?RtY(SPInDow4haeITB2+=Db*Pr8q(I)HEHp0s;=h$r4UlM>M&jdEDFaRzUw8n z`3AVTS7)n5rp(SaaRTe>>jUhebg{{4X=(BCzrprROwcYpBP1qPRZ+<)6DrUwQD<$9 zHDaU0zlf3q!9zkqRVKoq^aojK=lpK@>fwtYes^Yfy}pu#ntsxGL`E+kKk?ONzW(L9 zvjbOJA&9OU9_P__1$QhBN^1ZHc=7ffR3T3OT|z=aW~R7+fXC6snD7cW_VQBKOS z6T$f89{ zJ}w$yieLK#ft*PK4u7=`4A#)kI&h()q77iLe?;GXWc>m6=jr$t8?DD?tYK|&iUkiI zJOB=E-#eLux@Tb_UyuDMQO%bxpT6HQf5Gv5uR^%aP$G+5ZeJ$eLc9J`>s^2{GAXR7 zeHKcz`Bb*2TUtO^W_Ym&=5K3fXJ>0`dH1i@$6+<`L+z6VyEyqTcB5s#fB$}qVeQV3 zw~;@8;*VWZh`)aQIvBL+Ur!-gq5GH-r#2Q0uJ)gjA9Bllbcf1n$jZu|yjVLt>qy)O zD9-KZ05!a1dqCn&1&xkkC}jn z0rF6vg8{k0!NE5BDgd59;2LZG08*RhwPl5cq2YHo2;Ik*_W@Q%w*cWmORMVD`4Jbd zO@GB?3j%TCnF`kzyZ@9qfx}Fd1oG%_{4sBiE4xO%Hd~uju}t3!EHu`#BkIrj74s40!L|m^j4Yqd5ixmM@LS;&ni&U&^%{Pn(6*i zJVUCgNz5svt*;;Pw3jvV?`PAX4zrtIQ=T@wo+gX!9Q^a=&+p%J&O%;d#!^z>&komR z88rZAI7uFyoXpJ1LeB5@7prS&4cd1G1J7z@l{fCuaE~L2TsR&o=rr}lYQwi_s^i%+ zW`)WxUnp_gd$eBOh>o4vujsbGPn`i&13qgtdSFaNFkF*vMu1?<1s zJiie%yEWMWygywm@Y}2I^#D*&2FgR@H^*z~MLq0mlq)kbXel3zZyq&xZr4;-11TU? zSw}YqqY!_94$Lko z0rmmb3B{4U>nN5qIyE)*`?ncSs$LSnJ~`?jisX@SoavQ;bMNIPw6LthjZLH{C?Jqq z4wN^MOh@1%R^H|sCjl=e%o09BXN`t?aGEqv{QgZ|dIyKqxLpGS?jFw<6cm87u`-iQ z*a8Ne+xCbQZ*Om}pN3u~=nt^D60M@vi=V59KCzua)K2mMez_b9V}-A$JY4e*l+Jkz znD)~5zbZGtialeaY8EMCWqWy}r?QyQ!_)J4XJ<$3yZ|7Xoq{8fk*p3DT_S9IE%!U3 zXvY8k_1KPltwW+L%iV9wTjn`SRuFSd~=`>W00a-^2^9>|T(pN=vueV{@X` z3kXR_L2IlSWI;xzR1RwQw&8XA0ELLy#@80qLx*KfMk{T&~VfZuj$tJ|N=6W3n8 z)+A?KUTbyZEJ2SQAUR%D1sg}lX8%hOVmUE7HCU zR5|pyjG$oI!L_utU7PEOnw*>jSWKqLEb1e3!LaQ>Ta)p&{n#{!vnN`kV`Hl=S?oQz zFnK4Z?Y>OWIz!GivYRRV0Kf!e7rHI?og(P;lKAgL>y{Y;I5pAW3B!-0!Vl4ABU*{w zmAr$+-_*ZLPe(UZ>qNh{MvWf=BC6XDWhJ6Zo|!C~CS%0u9vtl{eE)t*=n;XIe>ccA>;(?q7v|@yQ&y+xjN>pQaZ{)a zDshu3K*>1{BPoc(=DXsU8ay@?6%=;qi=_z`7JFalk2uznkdV}V`4X(pK7z)bTy#B6 zUfvZH5%D=(8wN*0i}C>}USw1h%(yWeotBaDridu5*AgAjZ6YTZCc{_)BDwA|fPq2^ z6o=5+{hviy{&yPhf@e+CxdC5FBDpxVeh6SjuI$8#pTCdKnLRf}+1(gb;dVnsOVa%x zmG%e(x-~aGb=y{ON$HSo#t?%?7UcY|*yw-7eXvkTJmXDdAi|cc? z8&uWGyA@%(*bRC>91QpOe|B3|9hwh$WZe!t`$Lp>#h5(}r{NCT;Q$uZQE3m* zNteBBa?eZDh4&XynBtthgG1(~;K;1=pG}W<`K)pBGK>SZMyHT~#hBEj;@sbRl(w#Q zhMh6@23Ord%(1N&5$XtoDpcsbnPX{~oci;}3yr#*$@0xq4MX(%`uetIq=0|Hi5j@> zX<(41&DJ6L6j;zoYYcpBrz#9gfB+xgg6DSHXlMc-cBs7Nqj-x7y|nanLC1+(&4$uy zYHDEIK1L#$TfiB9H*y3AEk(I7C+9xn2U_Az5SOIs_Jyy1`eep+Yipv8Viv{DH}hoP zv8sdKbj=VC=UT?#lDo*=yLYWbuN4!UN=sjp)i6Di)k|`4bbP=03-~%?J-zTVq2+`_ z`p+MQ!hQ%dEm&ILVOCVoDbc_hKcVCvkQ6=6IxQW+*&Dq%ku1MWcS=TSJR~i-2ry?_ivWY!8^?b zI{}=No2x50#WY-SnqzHlLJEJQ=jEfKVq$O1m~+%q-o6d+e*-d&=G>PenX{ca_5$g~ z<#L&%JgLf@$$2ISF`2onj@!Tc``?al64R&5t?~*{@d=gQfB5j`v2KpoT}Cr&+k=%A zYbz_O6J4?!Dud@on{C*cD{FqKqe!0g-XhgZeBLlgzjDHuqXVB;C$4f76ci`4lH>A` zla3^V1S`8<^$iUJv*dU$3Nxtg4@M)Mm}e%?*T)`5tfeqI)yZdoiS_g73h#L_luT?CTFuW(&crIr9ZY z=b|ehNrzxzknrc+dU>7?K;Cw2l`WODar^tO7VyUuYGSilEKpLsom==H+9**G&LeC; zC#5`p^F;@d05HG&6)G{BYr;p#`;Zdfou!SdD)SBC4$J@=>{Mp&0ihIxDh zLIAzp{W4UoPF`^Ty3=&+H3L9@+1Zdy5`}nHHSYncpas{{_u{_Jr`SMsS{o{X_b7rB z`ZNzj7neRB15+RPjyyFAaGSVPLsIn69Q9ih3Lr&qLyGX-A~Y_i>DAEd|3nP(#XNj; zoe|c7Pt%zFQ*UWQPEX)S!4U%%1{^%dRLQ6V9t+O^ejqh9_2h35w0q3*k9X75$+pn$ zHY;5J=z9<@mcnlM)4cEZez^I=?FH^CZat-uHYHDVUQvj*Na?2t7`C!8FMRNm=%Bp4 z>X-Uc+cv^@XhMAaNa^#U!ByuSXq>!&<3u>idq9d^q)QJT>?0*5(aWtgD~xe?wdLAu zEe8d#-m2^9D4U7D8PCEEIcfTI@yzY*f7w>&ej_GAo_Y?Slqd6`eg?CLw^>eg6&OoA#zx zlpQ_#)~;8htYBc7%;h7&r%`RQE1R1fFqoY87BGI46rnLJ1U?496dv|<;9>U`xEZmJv_$ zLPJ9VH3Klx(G0l?FhRQ;X@1Ti?7cNA=98qRxw0a^NW+mJspm$g*qE{n}`rL^V|a^?~m zeyKU!CXB|>(b1Pnf-R>f^Rd1@KGK#gpwKKKVgF(uiL0CctEa~ob-G+tSs94U%-8br z#fupLT>$gRq9cTka9vTVpiBrCrtPye;-d)o+Ghp4%>akpZDu4Bo5#kVxTK^|fA3g2 zagp(ZRETl;F);S-?(UV0V3SJp@Spbf_BbXv>NxyO#Iw=CK{r52hSUI-%~Gi)8vF)W zOF1kvS6800^hJ}uwtc?_PY2fzYaJ&)eEj%iJI0Vx?iqDk=OR?Wajf$C=)sd9>ms$R zn1rdHvfqp(*n5n>I-9y2iqW(q!h0QSVUrX9M1%D5?7+s5or#y1m%-&Na(Q%k_@1Z- zA-Kjl_2JCp6)*}+IEk%P7Taz@<}=Wb={^)D0CezE2Y8ux>(Qf1Qd(uuH8m-afr3BQw+$k5N6JlNB`d%Q1msyJhcZcvfKtYO7Ap<& z_Bj1}_rQ^?n34D49cCBaDafDAkWY68KQ=cQmKBJGfI!Y_oRS+j+OFBUnHM6pgb-dt zaKwnd1dc_bGh8OOBP7;(jiR0-q5C3=v5&s*+hMsOX}mgX1{%5k?HlB;AYfRARX~2E zYr=htP{Z&Y%`1rGbaS-aiV&@;tZauplY4R4O(UUJbS~s`u+p0@=n_j7^9=|>#)(~)RYvvh z50zV%er7IEscWz+Pt{5Sx~wKbrxg+?$-&-JHi0sL%zYX8wz5);s8kA8;dpsn_{(G1 znFGkJhF9J94U>U?!Zz7BJ5~iKG53Jr-2sJ!!|l?-Esq937XU1yK1`e31LwNcZ=I~p z3WQ=j-s=(2ZgJlu;CHwP&H3&)0s2-zV9CVqI@K?Gd;1IycXu!aL9 ziHHuf679&cC5k6qZ>Dox7;)Q3mPr=3(d92#L~ zcZY0WrmRh^oNP?DWc4fptz~w07I2@qSqm0CsX(1^(4f>-x;E({l1Wf+E#=0gA^GTo zJ1K2{c1-TOca$O0AW>?2V{&|S1W5jz5od9Q674k;@B7NaBx!~7Ij)`y6pH{bq%=Aq z0Alz$VgUY}JSzg!lXxj@0cdGz0J0@OC0n~v7%*K! zmlPG@Ui#<2;ce_%<%6r5T3R4YRvC1yqeaW)PB6KPK70u1Tb6}3n>0=i4kL90WJ<6? zFXP?2ckkcFFjnm(k~0kq4FyYTSeJy&*a1%89v!d>s2>8hgj>k|$gq_fbyf^5WuH0; z6prL%03%*MW=K>7OVag4ATn1`QPI*aALIhZvBbp0oW&k-J&UbUgpsL%wE!jnA7)UR zRA>_-{aQ3S@KlWf;I{8MRQUPQ5=qeRpFe*V!w_{B6pMj0@;BS8`Q~`&c~U=BR=U=d z3&?6DCMNnxm@trL+r1yV#vBjbB`q4?jBzGYfap-i0HPHSM@c-ru)G}B+Uic&#_sOY z-(jj>)7(rKi|XfV0*AGe&KIxU}Ex zBPDZlrsiffC8dw0r9>$F1gJg`LDba)P(aZ}&wawu)YPo8A0zjZ?)~|*mBj#LIlq5b z_8WB!aKv^J=pPWgg7?ROxD3J-4)i)B;5`7|hGmArl-Q{Wh~K|ce1JN+j;ridudjTf z#%SEXriS&e4m)!6uP8&Lpb8)kueggeOiEm_nKAxB;8JeH~yr4R(O908ky6o<@L$>+V)afkWc+6)%K+hl4J;Awdoy$j_hiRfahsF)0b~we#!tO~&-dhiwQ_bQZK?;qQC5JyA7mnd_V8zLFldx`(6$;w^?zf zOLvHqI=ByGXIEBMZUn5~&dz7#vQ~*Uu-2~=WIdGtB}8>Gw+FRS%9aeTy>+_=bS0PV z5`$9zrBo~67XJSI+kbkCh*(EkduEF>=zIUzScGGG@6ztB%g`%O(%`u@;SF+3Ae3Zx zDnjEwefkto5ElpMoCmUi^Ec3e2=Il%!mInIpLFa}wvZvJ?+BLAr9htqBLL7Du<^1z zw{y%J{4agLF%^XaEtAIb1JT-NnOcxZ>&Q)WKwM~exd{iSrryWJRrEU&ejEmQYQwM8 zP@o$E=(Z1g9j>zg0$>$US&s5B;83m~+vHtS_39=D@hH0a?dI3XEv016>n4hTbFH#M z0tNK$COI%qE$qLx)i*q6s@Q!m&t3wR?x&L`hTeV`pW3{3=PQ zmbF|m3BEnmln&N8P@XtU%fKL#kuI&Us;X+Y(KctSj{%YOo`A*-W z>*QA#?Bgl`bNQJpg0R-Hb8WEhMBgaK(&c74c@1hdDk{jVWH|O|MH0FfTEmzz#)IIJLFLght+1qQbIzN+?(Y06-cTHcVtK`9V`t$A=1;%%$%h@aa#xu2-& zH@X&#ZyL*R_(OEQz?*(cD|~NiYTDo6289Q}R{*7*J2h=!bo3Z?zU}$)WiQJp`DM%% z;c3L5-kasOrvONSlpY@KjHUTl$@iPd;8n+i1T~492!}A@z1g;~Cmu6^chxFV#n8w# zG>aY$fP4`{7N~M1bW`p$ND2vk9U40W8CprnO?vz~!~^fp0(A^E3iH-tD(ju;tegRBFhG0BY=QJ%3mz3^<#rE) zuWhqJzDMk`8X)8WtG*Nc6cozzNR*G-)s6#&8)RHuSrWD&?*K6M-+J1PqMk$+a@9TN z%^Lt1qGMyjoI33V5Er|hiUj~2(3YwNvb+X#GN``*0@luhPyH{KFVByAdU^oL?J(n3 zhzGY@R^@z`0B|!at0fzI@z7^{d|V@k+5PZMm}-(X5Y0V21PsO#8NxF%GJs|YG>iOU z9jF>}b7p)K8;3rnI(C3A0YYu? zENm;35gM9YD!wJO3CC=W@8nDI`pCpwD(hRpe4*ClKAmGlPuRf?8 z`2@Icpk9GjZmJCs=i}3y*5nT$k1~vLeJDJP7HW2WmZhYZ7aq zb$)k8Bp!qyQm)th*8DICF(jM<&``yCH)1=VuXMq}DZpwKU(^rV8p#abgy>*l>IHj- zhJ)E`3yX@v*oScDZp&(b6fTbypGqu9mHD#(rWi<%7}LqukMht~+5PW|alqp+KfgtI zW5wc{9W|yp-fWC*BhU64h-(C;gE!2=bBlqe;Y{w~`UR+0QzPTgmRH>{3#4xXnS?G@ zj+HW0|D3Qr9hgCTyNtHV6oOj?GIHl?I7KZjElo|C@Uepf_e@oq^+_x@il~m_iN^0Q zip$HxIyAo-P|u%T)sI1Tk<0s6Zy{n{e!MC?gg{d6UKQ*^AZ}N$@qvOc$E!j{Q2q4J zYh#fAQsVSK6ioi_J25O8R3OD+?FBlW^a2!%;nG273>68uhxM9UcJl+259_s1?}Br9BR6BeDy|WKy}CbuGpJY zU~ZlB5r-(ujgWSx*iLM7%$t+oPTxOB8Ped#3@M#QR~PJvdn!rHnIm(*PE2>GU0s5J zP5iNR_3@v2(Et7P{(o7c|8*y2Ku9Of6e1P7TD4&C{$Q};)!6>~E*a*icU7`yA+tJv z{4*yqh4}w@WhxqxYB!p2L!~wpF|+TiC;6&!W0X@32)ul zd=QZueDikh7xLF^iA-U^-rts$n*?)55|} ziUu*-Fpp)f7XEKKbP{WmMGetOWPbi8BKv~~m+P8I^fB`3x;JL=K3f7B2PoPZ_4!7% z9G;!aT94=wp=rv}Kxw#_2{=&jZ5ZO=MGk;yiqBvH$Fnqj!av0%Fx8_iC> z?c^Y$L$~makq;A_8m2BVpxOpF+^Q;y$t38Sz~wASRSg~fpHMla!H>uJy4w#CM~UMt zXCL1`q9?=Q77+L`>kJ%nlJ8UopVgD4eS~OMz)dCp0}_gwM$%I)Okv^+2eVtiq2NxA zl#P4r$Rz_(2eJ2VB6Iq*JQCRwi4x}F0RfKY;El!8r$D5W&Qa$~hMC0*U(@)m)H3&o znwRs>;d*kZI8l@r1LzJi@)ZzefHqq-T>JF$96igY22Eeac4|gV{vh$^o4npJ55R?s z(Ei#1D1M1M;(f4vvNm^(d1#z+w(4p;M1TZleZh#AdxW^?xxi))WDxLQtX_!c7%Wkx zL$0i>T+rXr_|;DJh+IIjY9%acP-!uwI&K5=Y{*D9fZy(UD-q=ns2vSf+II2o5jQ4@ z;Tme}Swl&(=nUDthbDZ4>#J`FI88M=j0=cG^FDl70*a?NIHHluRqX5TBDgnha9&mV z4IBZH2|&<0(V;zymF#v^V+PNkmz%U~ISWZklq(i|C@${m?WKy4G2A-9vd|xy-@Qc` z3P^E&K|z38-jckNhXVbVm7Se3LIx-t>xXv;LxDt84HRT*>fBKtF|mu0=T0Gh_8{;N#QCJ&6s`iu4ay-Z^pxYFZCvK&=75#U+I$0Ea5ObF1$?uaS?*&728DPA zyz&bOx9YY&N{T}zPh>!0DosJeb}BhIFusRd}*1Yo*)(TBazjxt@Z&G4{4@CBV<7Ks;Q^v1sLo{ zx@9=*0*rC;@4ey;EF7U7iEFWY>Iv_oqcASZ09AjGKI_ zb4=re0TVgC=&Eu&nNL+*)k8fR?$|b;aPJUDO0RTeF+4R`VJuF}?`%~T|2_M6-s*t& z6{kJDy#P8cI17R3Tt3Q6n5S7{oyM%72_*;P8-KwCiigN>Ol!x9ZeS<(0Pc~MPvhgT zsK>?$SZ^0Qr~)Q$C@#ipx+HA775yV@J5~BMb7s!Tq zdMc@-0K!vbAT8Eri_CQw$uuY>P7Qh*zW@-sv7zCcJIAMfNwDNv6siC+CnFKfP8kY4W!vy*G zW~TapUF5{dD=J2UDklmu0s;b!SjwJCP@o2k?3h02iTKmvGHWw4KvnMndK0B(WONTd z1r)Y`cW%eV$D>d(g9kwT8wh{im8=d*Fhyjaq$cNnwAzcprD1iEdUt^?f@C|wbu-i zlJuR*pz>?H#)0)k<@lyt4DIUrdK*$!V+iPvK$q=WboCZ9HZ{#b{5t4jip?)9%*0~^PXdcgSh}uy;#)Vw>$CnRDyz0kgQ%Nn5F<}dt`KUUcGJB z*$`Cd9n#&zxdy7Q)7jYBWp+VD`3a~ZxfY+q%*+hDaR6P{^8RI1B_Nq{V`C;AC4CN9 zQN-CrqCN-KK)~Al-vETCvr z1nD^ObpWyBsLyfX%@mn>>-me3K1MJ5!OUQ#@AJD8EeJ^l+SIhP))Gm}s=B5o@fi)~ zgqttV;-C?omsxo$D!kDTrDx zV|P#?_4a`Th%ISVFDmo`_m9SIV|j{X_Qgu1mDMz>g91?NiQY{QKp2Ef{CL3yMv7y# z3|xDTAkeXFYp#*A_W=GC5OmqxQaS2EXcv72UaehH#q+&>N6 zw$H2xfA!y5d+%_r|M+iIOOlnOlAV>Ey~#*qCp$AU$*Lr)vMEJ22^l41Mam}0N>-Ac zP+1|AIFFC-@4m15I_HmbUFSM~rq6hP-sAOpJ|F7|$%>L&C-@`hbKfCm1RA?BC6?a7 z?J1?SE40KmGV<=-0cWwE5}NbyM46W^`&3ao(E^xP>-T-$NEzjwu&8^d{v5`;^DQ!AK$$@v+yoSFRmPc6$i_j#-*vNk3~aEi=ZLX&>&mO z)8T5I8LT+WozUe_Iyk%IB-YFNAu*f{hm7-Qa+xB)9SeCkP_@DSnZ3C;c-Zc|U5lbA zGl}(RpBgT~CmefQ`_#ErKjCOv4Ndzn_6bj^%VMUUgHO1){ew?uf-LuuliyH)qDAFc z;LmDO%GJV;BC=^$cdrZ6E)#qzS|3x*1d+wKK|0`j zh&ZI-l)Y>;+dtvF`UL-XQ0cx#H_LG9!J^PlWAikW+13rYJW=3dKSPB>Z>&!36 z@kGFfbn@KNl`X#2u936vER0??2bXVAlnZaEs(9aKlHIC&lY5V|oA+DM)aD%{NubQd zs0Y5RHV8%zxrirf0JTMz>>#xB+4%P@E~poXJMK5hUOjuZ6*Oq(A}hZ6Ig3!@&qVu2 zb(1H%=%^u(#J%V2{2X$AA0HoV2o8&6ZT^-QAN}YjMifxZdi#}nvRM_--i{)4rMKV5 zZvD;YMDZIhKk{zAudqhk-M_LGWhCUz0v2swubL41|Mf36-}oCO=lZoxfOn`o?2uwk zH&g=YQ60EZ;qJK2DH{0m0@e|-h6OK~r0heaP0q3fEE8sMXu0cnf+#8(O!x7VRd#}09th)ZfzUzDV9-u-g8Tbk1 zwe)vw|E*W5TffL}eYIkAJwkqEYp7~ugXxQ6Z9U^zlQhTA`pqlVt6O%bD388g%Uf(^ zF*qM#3ZjGS{JSw%RE4Y(mWngOb!h-s4?Jvdo>~GYtSANtnaZYh?fzk+xN3ykC{m}>S z&)#^4XV0ILB?k0CNOb-@oG80@*2VFeo<4p0w)`BM8l#ja7Y|Q_)e#8g))vNcHHhI< zd+~97D)4c1YaO^Dow6h%N=6x@a+lQYZWfy^st%)CqYyl@R}(fQQ#;TImYHZqqmer8 z=H>=m%=ItU4lL}-dA|wOV6~t3P`L^$S^#HqA9nV*_CKAMk1=`0bESFz(?imZlMReQ zOcRWkt3P{8F5Jo7y2q4|kP!NevxBL%Sof^aOLCF2t??+4V`+MZOjI1fMj`i#=$2Ph zISZhWB6(&P=5m;Z#?#Ytt$)YV(mI}QJmX&f4sIQ}ghm8NF@Q=w_o)?c?KHW&+CC=v zzah{fF=NV_AO(@6bOHQmje{2kxXZ!FGA3agVhnZGvNHY(5sq+J2t#|0!N*$ zo0|SdSZT#RJ12#Qdd)hhf1>!_UJCN8oE!nJyZa)3u@$x?hj3nDq~(|j?+)MdOyr(I zqmWCvW6#MicC)5FV^0&{8G82Ync^)EutwPROrG6u7(>-rYQPTzVS(a==UNfU_jvvb zpCN&aYL02SDDY-sr^&Sg0{bGreF@?{=n57997J3SmTjNKro)TB!ap9BkT^z1XYxfo z1gFD*9V+Cmt_Kiy^)>qb9(#v}CgxC8K^Wl6_>Y+-xjxMb!2hO7K$J#{ZS&7XP zdjfN{a+bh|vOaLY3YS~{LH-it@y5(l&Vw(>dp)At75uG@U%q~wY?W~PHdR9sZ!4qp zwKkV>Lw)_nD*5cf8|91MRj7eccO`1uF%iIu31EnTq`{i1sBGFZd4`|rA4H2B+j5cX zah>rXloRD39$+;@H+3eOOk#0h_BZahD_<&3UOX_1l4Etme+##Ta@bdR)GG{P2At*K zX990fYVM5k+aM1{L%WgzyOOc7GyL&9)M1byexES%{M)@hQ{|F{VHG~Z;@@{ec< zEGw@5Fu?8r-OdNQy0UuXI9dNqAGDNc#Bsa$IsG5)G~D?yoa2`%_d^8$LZPQ`cS}u6!ws zkD$6r8xhnn_U>Zw#>U3|Jt=EGa!F|-vi~l*3w_Uf{gyK{F^;}~3_rKbs)2ax*7<0* zyu3UJ3hx;_h2`Stkt3lq9RyUchUZ-*hv1%z^Y12q*{Au6ojiHq!Ym}lRF`&r73Px+ zQ~veEqw{I6)3SE?;N7#Wf3;s>VsJyIfsM_}!A7A-t33`hEg^Q26 zN-*!G$B+5{3q}8bAjEEAy+NH*`*-hTjN+ss`5;el&7sXtnn17@e|+-<3rW3o5mjEj zQ)nX2ph^C>rFDS1eSZm8C_rJmEeEJ^h(X@X&^wonHX=*U@%btNf+Z?JO-ZOMyoyco ziSJmk6KnH`+I@5?o1WeaJvB-g7`O+ua)fDb60X+s3vdxIlX$~~rq3O_rtP3}CQA<< zNz@_bgPPCjc?9gxx}v9$*TownBO|GHcfl;weSrWlDv*e1UMe%0B=d|?&%(9ia%VLl zfiZSpRRTm1tkn>6q-sscQ-f!Q1lI7w7%|?|C*;lH^}eHn;>^|Xt#hx2TykJ(J4FR? zKQHY;Hx2GsSj931T)9k~p!9ciEHcS28WzR-h}!ly2%gS#yLd6s>PXL&vTk=eiCVOq zpW>>Q49{^py{GyT99JdickS8*s>{vKl>i!3$+_d`MKllYW=VvVGt}!|q6i(iitf%^ zM7GXNEcph>(9pR^)87Mr2cXqxe%nsYS}z#caaDSB&I&pjFkg)ZCm!3QRVa8dFF2`s+{VGx!qvz-=VUh=eED^& zSYKFH1ig#ivxDb^mjX-QN!hwf{(SJ0tU(Y5g7pR;lK0|-mQD8a=ez*8{?wuEKLAFI za8Nn*#pJzZuk}1754>!cT#W7(vUSfIvMWl+@u)mZzDJFVJ*9K1SzFFa=B)+p`&AP zLAS(LE@p!ERLny?-I9h$&qzvv>ItAZc-$PyOmH$EK7;`vR6?-u%bM*STC&r<3D#8t zIHcNn0$5wK)+7KBH}nv{B%jBHtN99CCLeRS@;}#4$eXcVb8}@I9Z91$b?fOwoP zzNwWuZ1<30qDIm1VIqUD;G;#u`-v3Hs7O=>f^1uVd%DMRt-}W2A^$X^|QZ zd2Y{LeX)dfDegA^YsoYs5#uwm?R2pKs!1jDP#%P)AP(_T&1{Z*n;_VxV-Nv{2flm2mY9}i0pyZ`!DQm|MIliU5g3j-wC(vk1O$JKjA7>HSUw|ohcLZ z`xF-J%d)dMPM&;_fzIAuEE%V0{>!U7=CD`d;)8s`8is18YIt#RalqVW!5%p&#=LQ` zg8(>f`#rXoS?=E=)7GMJr_7x#p z-=TSz!I!fi(v^e~;itw?!jLXL>^0GAXfaf5yZ;mwyxam+%X$kXqo+x3du{z&_1|1d z+v{A5G|-zri=dR8@swIVhbyYd(G5r3i0|sqjo+eNqG6ROiq->JcHf3;d~aMO>ufsP z7WnsztALra8e23Boj{YL*}~?Za3NYn_Sd`P_;H{c2zeaNlv9gdXe-+~JDVwy&B+D6 ziT2y%ixIgf3-8sDI(Eq(uJO9{yh#U&*n!NGEPE^`H5#~|JTDtT2Em@@!t zLB>ZK%ql|?5%ch&=Vyq^^o z&O-+jHm*>j_f*Dnn#v@2-+Tb9UszgCoG|v>VRTDj0RYSiqYs^Mu)Lsszi?L5P(=X4qR%p3RjlzU2H^)qw7;?BdY5UzBU z_gWZzJzw1_s8MRpk=BV+6TpXBIUdf=k%ni?`2 z!_jPjq&nWeS6>zmlroGwow;R&tQkbw0Oe+s;@I(PX$g9C-I@saAWibuM(?u$6I};! zffkXMd-2r5AlT?&MU8YFu5Gg@Z5J=(r7*A~H=(uIAn&S=PfGK|*jyE4fVh_M6tZz} zpk=BuzXFY_h0To{H!Lg&2EZ*&d2mdlvj<6o02TKTC_#zTj(`F=qVc{@pNvdRk7;&; z%%f3(?r&sde$fk#pW54uNNGXY4I0+EDDvJtJTk~TLE;R_Ulp8W3%_;SR~uvBU*Q~j zdiG4ZBNz!<7wqe?>i%1+{ub#v8$a#k_m4c38XK#;*s8(&d*rZ%X1GI87xt!3@0H8oMX_W!8IJv-|lN*nh3dwKb+$bZN{ z+?STt*8TSq5%DA!F=2CWya!4kLT>Er{QNe-;&@!G_{kH39~@-Ti4%@Efhqf<8izF_K7LTV}$S<8Q#1egO>?eTl3X8~Nor0C$_P@8E7&>HNK z$(QpXuEAh%{5HI>ENm*st@ND3t-_{;`;T$*AU*uh?(WpGq*sNI(8M1PmLc3GyR=lq zGk3^k74R%nYKsTMlryjbX6&EDql|Shq0@hdrJP*SV$V5k-`PtRnOyHD-T(cHuOTdP z3vp-`YzLr$ufYPIYoVO3qx|VqMz2%NpWecZ05k|bXo0U(uXDHvi;J(u8k(aKN#}CH z??ZJu)tN@won*$K%YTjS>w~OYHYW=us18exu1(1?{uvUr6%Y{MZS-%xuDl{s|{4-GOJO*LD@iM^Wpld%*+OPOU1NA zf{3)vHcUA>iB7kLmS{Yt&T?&~(EqOXMUI#g^)c}I|NW4$0(S1M`0(1Kfd9;hrM>-B zUSW0kFY*sByw*tdgjCwxbJ;(J{JY3gF3*0?nuA{Qt&Cj;A^&K%3eg4O+vQeAzJaHo z7Dd(5< z<;(v@?@-<@KbfcjN*CzM?o$`->!9N42LogBL zp>!_N3t0#)!lLF=qm`qSa~YcBkvrp21TURAO$*RSm=gk4d#sBBQ})2zo9T5v@K@f4 zSu`*A#~50RVU+|D9x=U;oRC2BXbXb;F8gS3mWz1+AvP@&+U=GXwba%Be2lM#2xbJr z(=^iG!#C&oJXeW~P7xCmXM7@%p_Spkx6^(Qp!d}d5IuzS>SxY8cB}*{8D+P7V!s3H z=?XJ*ee3K5)%|Vr?5c{03W*jpdMQi#V57sMkVJ>)Yuzokd#0sas`4B zdI}^u_{VDka?>$W-jkUIm&k{Vbw&@=w3`kLhVH zZfqyj@gwU5Oq%i_Qf?me&d<%cYzggN6Gipo zd5QE)*Rbneu-!vAcenwK4N}J;ZflZf6GZ^;QcC4^c8ABi3t|+Bot)UoJ79=X*zeNbiw6KOINp ztb6+!SEDv>*!SZC9_`i{mC(tx&rT?@pdImal9D%|2IFFf00YFdcD zHzB(biHSx?`l4<)Q(d?5knoDUoKw|ged@$HS;KyhbF899BVt3y%8lpZ=OnPXAw=by-J^;uww| zmAvtb?L8N46V`6Z9#K1tPA%-FNy=UnG4jW%#&x;N!rx#1J2P6fibrN_%M-d>a&Jif z6j>=<9HXP)%B&9fr0AwQ^D)69{j;-}NUzyb{kN_yl33eaI6`2^v_@f-P7@Pf(94QXG8}vB zoW(M|cOaThU*8jAi`ufX|hzXP3;nv*S_7j0(@CgCHJ$bSSPEm$Z2s=kv7O-}g zvTsK#LO4V5=&5S-SM1&hSux}9N2*W=li!g%7b}^c$S?rfa_G$hiFz@Ib-2|LSmWM@ z0Ls7W>A9P-3Z;cez&k;Wcasi8MzP>L`hTcITt%YK-sKnEG~wt0h_y$L96REgq!N}M40qB z>*P+vGrd_B9@Am|){r$pQ1o;k+ zQk7W;U^r1QK8sQuUoXNnQPcPwQb&6R6r_fRQ~tBJ8H)j5s9cxf-8#igGLAA~TH;LB zM^F#6{k@IaCdS4D^E5=tN!fg~XBTesi6xVt|C8+~h2#{5qWg6zNCNbjq9Bz5WiGe1 z-np0lT2eM8gOt9W-ffO)q?f#PrT4|N3*BYz{`_mfTMt@ru<&=-_zg4^J9~HtOFco= z40G7NPwaP3FQFArmqw!*$Hzw*@D9twV?SStkdn~NzbIFhcfp|sjk6JwVzvMR{}uON z5{I#pg~160`yRf-*ItNcNToR_$XCYr9Og6sl{lXBC7^o-Mw(B+P0%*MA_EMd+)UugUI;WS_Rh&Ki6bPxc>e{`U>h&@XOR;UqKXpfuY^xh!HF_ zS0z78j}cI;K37ysD0G|t9R-P7a%d1{I@qWjT3%sg-D)V%=Y~vhZr}XOOqfgzGvr0! z;zeO56%~zb7;{EJLm)$4xXu42hVBBThlnNc=rLs<0f@t8uCp&386CLgUn$erPl{u*L#l1XWRbQA)GBh~d$35^Eoy4KR&zp3^$` zs_&Q7)b{;sL%0ICeg-RJBy z_}Ey@>qk1s7RKnUN~3w6g}>CJ*lBWO6k<1N*HI$6T(AT?{ziSYzDF-9G|0JIU?AeA zoSn2doN{Ox@_Lc_W}v^9{i_w8tT|Yv?DC3UIU`AEFO$y#9vK4h&u+XCMP|~phf?(| zX@ek2+&by7OOfkWY|2cc7^M5UyAQq|+HF|}2?OF~VEH){4PF-j0b^7SV8KTxV>+k) z_WS?qH?;6QG|52RV_H1mjQ;K$zFM*15(;(OkcLIv-21PVFRX8jnrK1~R9Lh5$0wU8 zDvHcgwxYbCGR}y9=<=;|uC%0wQ^RivouhBk$Q>k4J%MTsXyU=aR5VzG1`HxCcw z%8+&?T?i^5M(+>5A!AdE0dFg!pqB6ig9HZA3cGM_a^nv|EG|$?+$y_6KK&=IMu!e@ z1V9TeQH&};S}$al?UsV0LC%JarxXx0xiveonO{*s2oD5LwZfO)FDfMD4*V13wxBlR zzYshI^hGTiq~=&>yTiV(IJZb>r9E`0ed$GWc*EG*LIWiZ5?V>bX@F$)d)=8PpN0-& zY>**8RmNw{6^a2Aa#(5ScA@;?h?zmz07Ycf4I`M2B+Y#4b)0HI(jvo3-qt!n*SGFl-NX34WfC>Yn#jQaqZ1pcRw_|=^v z$XrbAfa?pJmM@~^meMYL8E_Yu%~ME!bd}nL=IYBYv))u)^%f@iwCvv?oKHAxpVUF! z^6s6bF@olFGL_dl6qn{#LAo#cw4wLlac-)E<_%>YeB`&z>(Y|0KHA;?DI#_)Jn@T* zxSR;2-w5x-8!QhAY26!n<^HmUC*$bl62~{|jt#v_2kc&tYjBhgGH|A9bWc+2o|cN2 zzVIbFbeDOdAsT1yd-u10j&f>)-N_lw^_}V5EKZkL1Q}PWk`K?D*NiSIKP=SjMrPBY z${{=olmjCU!{_PSla;=>tRiT@WIx$T>(%S3BFv<5&HDx31Pqs{O#jE-gq{cPRkb!A zQMdniTlar3dj^36RKVtWLHc^5l&y*3h1M{y2UlYJHa2H@9@wjQiQIKEPEXQU6uu!@ z?L=-#d}qh`ABt5TZ$XNjApFL%B2zwbe)|5XsIRdG+4e#Fs&brhD`i79-F{mg)1%Ak zWCytU`QK)`vlz~Wr%OB&9i@z&Rh&%1#qjl&HTit7kuOZSczRO$i_3Kx8Xi;DToaCG z8>J*D9S<=R69r@)k3LgE+Gjfz?{sy4LU~7V_1w$sxxTlLLN6H-(;QYfe{bR$fgWyj zYzwU4&iJ7VenA)(VdS(kol8_$oL!bjQkF;KQB3pfBYFmUhMx>SXX%fInrtHTcAxnL z{^6b3UQvm+8?w>ikJ=hOcH_-V&|Vpr_#vmF1aiBEC%Rj% zi`@>3^Hy{W40jv4ecv=|)LC`o+&>8<5IK2>Tf#ly#weK1%r@slz8hh)b|ps*nG~97 z^y=~X0p}5I?ee*FAG>cRi=^3*)UY7g!TFO1DUx9#Q)WHY3?%>-;80Y*L;;7wvuA$& zayR=qIC~8wO`|DA_xp&%1*s*7fZ=bK!0j4rWw7YOL%0|#>5e8j-LdiU6Laj_R4YAa z8IL^%48EBX-g93)i;%8LyyJFs%H!aJcs*68LlT}Q5zUF}ED3E(lN*wwEMTM%B%?zP zi66{WD1Fa(5qQ<{9h%+n{;ZGe+^p2g$ckkUPG9!~{nAUCb{C|dRBCGlflMZ120+bt zeSeE}5t6N&*DcM6K=npl%4zdAmVz{wiiC|i%!v0l(+j2PqbEO~BD`he9)8*@GqL2$ zdsg`N7(G3CaQxA&k3X^ID6=An69V?igr^EGrn6)SucnG+Zkbqoyr+2lhSry)(8LYw za1CTz(k#w|!;DM3sX|_v-<05}S+yN(Z)9iokR7XP+}}jPl_fGDiL+(VC%p9kFdrtH z3kBI4zl$X>{X_}m|4%DhXqovXqPO&fYiIk-JS)i0K)Wr_;4ze2xfEUtdfbHf8Fjp9 z5k0pzg_-0|9nsa=33h!jxgW9!OH<>%%{H~8X-P;sG(W{|*>vwvATmL=S26&V)+$|2 zWxyP*#2|Iped=*W>h{MmZYL!Q9s^1QLN``45DyM&tfd+XC*eNpj?$n{VG1U25TK^{zG%D0xQE@uCB0@qt-3T%FROQ>3 zpF36^3Bl4(#(wu;9e>m?W~6rVT&*QYvgx@w^8JWsi@-kbdP?HS6q!7*2)c|xg#ZO&+(zHon#eyBl^huIDbxv{Zv#kE=>V_423Puo0S-8ODU0OvqI2^}>=`BBYiP2*ed z4i4WxL?x`2^%2=8w-f?42flpy0&T~SRKhh?pb;d{`e6+mVakfp7kz>e@!W`TYVcLb z$q@w21hBzr^X)r@F23~~r(>3Tta3J0c%vDAl&x{p;N%NaK8`yBx#C*)RDQhrZ;k43 zRSaugOngq?Pe@;0l7B2HOkmcHq6%l-0x5{xY%i2Lsd5BQx`iKWC2| zoetZ$(M98Rn_1@*&b=AGA$?qR7X>a*q z>phr!^K-KI=Om-JyFTK@_Ky=if$q4KeNo@&NN#=iPC@!Kl`^bdW()*&y7-(4saQrOr>(6?jF#WL?rk80w0&k9cN@eMt(Cp?aKT%-!vB{C5LZ2I@ zwMw~F__n}68KR5HIMuu#zqxwD9+YOPsjI1{YULyzVTgRf5NxHvaZqbtj-!;{>FIG1 zyZ5cF$XI43;W8%NcDx5P_1*_xz8T(kMRDp2Nf)b{i5+9p5{WZlDj2l|acyn*q6Ak#|JtVr**rVA%$(}#oYgqH= zyjc`MD)5 zB*GIH4%CI5FhIjz{kyCXtnnBT`%5pGVPwa3bwIWSNfCBJ#97wWg=TZ^Mi9Ut$~zg0 ztN32jgg0a!ZJEP+Nb?pX3={}TpI|!Q10k`t->;Z>3qMIP@2z(W7ZZcj)w>RzcQy&; zjLxGbZ54BU)jbue(!jvwMlIabbu-Fv?Cy=jW*8Zv%*rwz3^uam;_g!~cyA)|3*X1z zRD$H5pUB$~m_2NcQw11RXG9Olo%q3#s^gG5{GJ~{+&}zakZHq@GI8-ec3)mC{33I6 z#y?G_Gw$KqxrKwx|l#BjTtW3 zuT-mi<@e-HZ|e|9)h=%Ksn7PBZXGousIX|4jyh2ZHtmjY&42pz#!OZ`7^AM{&y()$ ziN|BHtV0fLU4euV1VFyn!T-Ez(jAdralZ)jKoSHlXr&uT$vPD|3;hc3F8*cMya0wg zBHk~1?P!AOIb1JfF@(I=z%@gx+(dKK-e!dzq@<)DLj4f?`0hymj};1Xa#*ZG8d#{q zSl_(Ehf+!2y06vRX1Y108O3W??<=)Lzt8yKx<*AO@+g{|m;x2Y02JhQIV{M=3X|N1 ziC^CLPwCcMB5>ti~`mrsc;< zaN@9+BXQAgWNrYc5&ECJ3f|Vw&M)z1^i6?2i4c+l`d}d$NB0kgnmhIxBp=e!$=Qz4 zYzTZXFRTI6h?CI6$%2q}1Y9_FbCj91Pc7-P1plXFL7V$nydP}cN}uVP-i~=bZ~y<@ zAAM+mMFwGNP-EONv}~jVC6|(arjbxg2dm$a?<5MizquB*wMMXqY@zj(U#p`ex&30m zxeyW&M8@IXG`~4phNv$@N6!1Lz9x79Jg1ReZDVXu*q@jN}lplK*N~K?@uOfNIS;}5dneDnu%~WHTYuDNMiO$U*9zh5E+Puvj^b%7vy-W zQz+q1HOTY*{xk=4fZY1m7%sn!|GcqoEho)F(_yuQ`JNyPDG7ocA1QpJqU0ZVRC-^4 z3jOfm1Jw#MB@tEFRGPmZj;vxq9SNbq^F2DIF`p(_Eau2F)?wHutM#(;scilsG3w=}W;DDArO@SHW3xs%*5n~>TL7t>A!U|7>OL=_Ls5SmQ9NEPF1To5az3R~y zk(q?GZ08@v0<%}tLrHPgMQg979w}ulchw>C06rtdbiorRAlr*(gXJ_vG#q&+0g4JSMae?L7j33iBnkUjnCh;RwtMiBg1R;2W!`vYWy?z!~xK+aD zre9Pu9A)ixC0lX-?+OdEdjvTQo_UCc&G@yqEzA%MtU_V|b5p0^?~(;gDESN&%=}2t zE3%zDc#nLe(94F^+&bGUl>I+<fxcLfVVv$RNmGp5B8tPnyVHu{&Bmm#M@ z5^Q(|b_+2%xw)-=m3d0W000^=ppqs23JTA{V?Z{n*+_CgIT#;pr z@=v2ui$=$Y!C8VVh}#!Az=$AVS|3MNDpM6# zuob}~-`0kB0!XZDYXkf>&oV}p<7^@kpOsF??(w}Ulvj`Bd_VgW5$xB+=ck{7i|PKT z7&Y)eDut~g*d-uunZBdiEmEM&6b32=pGY$dW#Lmq;_Zb9Urby)}fbNbbUlc_zDJ=?O6%kVWde$+)(KM?~)IzaH7V6M?Ju*L*A}p!1A#xZx(SnKh|JQ zO9ueNvb;;)#^S){=_RP-+BxcL*{Q8t8vKfz>I$V^7Lh{B{opOl((ub0dU?ImDet#s z96P1#9za|O_i(1iMG))XYmJCYW~mzlQQ9dt+&~k)IU{;NT}unk(bd;OAT<8Q`>)4u z{VCk?#(DFDJ`iZ+kK8=sl_2HGqj=Q2LM~#-CR}3QGuyh#19uIPjsQH9h8g@nIJ5nJ zAShCjk`zZma(!3`hIDBxLo7Ex!|#gBvj*{TglCz*IYMt@%uBn$jcwH}N|uQEo0PqB zo+t*tVT1HcN5KA{y1h)huh;cf&&iV+dkOl}e5C;!X zag|aTiyRV)kBl9}a0hztYe)y{QzDR5E3{h2NI%s=5gulvcWFvAaB;`~~ zv9qBeh$8atdv%sa7#PUcbKt4->}97R?MmP!VrEp1jy%9CE`Io*H4->b5~OuvUMiH3 zkMrb`vLhlI_+CSu-g{WY+CJ6&MbsAS8g70&33Pzbd%Kb#HP@Gevtr4b+_BMY zPYv?o?MGbgTb%!9Ld+s_k4w%G8nky2+&zb(w~T_sEh&jRzE$aWOMA>2HpLlRhdGx7 zz7=oT)?zj_5ZXwH{=m~A*e2vNvM>xL`+m+m+@oKho@jBRJ9aGj@)cbMlca1^)Ot^U z&R+1bV<%!ZK~iuMB@G|60TRCUC>%;wSl|TrQ{xIJ^`Nlzm3!N;U@h`;(w6nlEO|At zdH2bK-wh-E*Cu|rzp791m1U&#Q)xA5yp>u+ri$eE%!=Jt~e-9-T9tS zHoFYF$6RbaAuzdF9tm!q(2SDW%doyMZ&Es1Wovxx<&XMxlJ5OT1k2PTA_GYD!PC-H zDW|)AiiI?Ywap^`97mR2qCwLB(H9{Jt#1%m*Owg8ZA2XybyjD$uxTePDZQ>lQzD~s zlx-hG{Q)xvsL!^kpEhl$?2j~^k>z#k>ZDnE=axPnr@)M>TXNL|{PGs#308{He_>Ci zb|C;3bHP9^n+kqSy_LP$1wXPB$r?*50;I-@cb@HOJ)=wGoj4|acn4A5t^!F$E9uk! zlmpM!@Ffk<=#s}T)NEWTO4}Etx#(e5|D^SCc#xHl?nU8mG5!Zttgf}lGda909bYdQ zaL!FYhJ1yc%{$JfT~1b&ncsFz+N9&e_#Jt+A!%Pf5bZ9N>Tuvt^MIxv!e$l^kk(-`T0^t5TxN z9b3|S0EEM-kRj`$QOX3QkP93=Z?^v+`lGmkg@p#oplrv|T(ba_wWATk*u+I9VgEzC zCd)6sA1z%h@yCe|$23%>p3A24h?}CEa%}RM<}kPBklE)mz%eCIzs>PeeP76h=xm@h zIw7F~t4EKLAb4VoT1e|0A*6;n8u8L1&^qHUhN~%Qy|l=M-tl2XJ_as0Io*D(1c@wU z3Obzz5K(;{Yeg&3wPFC6C+Xhd7dzCVapNoL9&ZqY;z0T5Xq6@yLE~#!Vqtab$PqdF z&W4ahGY9p^TaR4;uIRk79HrLI2KIf9Sn@L?GT@1C4JzIP$*rp-QIKL0NQTk(N;Wn& z75Z1y)LOc=QPTNQs$7TMgWT5lWq*F&d8u z*RN<|!Evi~SJ3b2{9p2pMZ7nm#jZ@leF-tZa4;677>mNA z)+w_Txzz-A+#iLnjx+QCNQgKZyBv=#0%(-T&4S8GZ>->(zVZ&@A5Ot`0Bq)g{KV)e zbCRxh^j9dhcRj))3NeY<;`3$ssTAnbd`|(={5Pz`O>X)pCyipPbDLf9WZv2JF-R^_5q%Q-?Vu zAx+q$;MBlK*_ZwpyN0ip+Nx}Pqq)r7{Tq2Kd+AkUaVs(UI36o)jZ z9%R?mtLaPKwY9Z~8|tE~A`Kdct=MOQu8M2#I#QlnZ+x>m63o^DPstUZiDM3GhHr@Y z)HSMo*4=4-6vH@Y9ny7UCl&HOlh6sf`U|3le>t%HNb11fJupj07Py1f2Bh%{{L3`p-Xe`81gTs9L-=}2Cx!gwIp-CEIg^R=geF+( zX$|e@CkA=#9Uc5!T(vpnsNo6P&8v~=?2aY&$SEkj+v_BYY-}K|aUN;#9w7Vd`=S@( zwiOi>G0qXsB54979Yr?H-`;E*Q3YEOYQ4jYkGZ&UZltA6!ByQ^=u%};aXY#rx&3#C z^n7V~`Cb_tP>2N~J;TGBbFb&eDfP&pL?;y7hby4i#^bQ2gaIFziAhua_9JHfpnCR| zvsfr9GvY<*W4=&S1%4Qg1OCMTIpXOx%=kp?D#Ta(lM%$0y$E4&a&dX<5dht9xP9Bw zm|WVt#ny_2w6yeMXS`Mp4;L5c@o%mYkZuAaJJfNI+!eaae)F5;g>TXRciEttbgLDS zlw6NV+xQC3I@v?}3%`B;ozvE@j;u_`UVcC!I(na(+i*1RNm`4)msVcy+iT9Y;LVYD z1a{mWytxz;rhFjsb>syq3)tJABh(8ICTY;lyN@b{Tw+>!(5kxYme{)Dk%g@U3k`;Z zK<@%ON|DjrNDYdJ8k&fY5Ydh|h9PIQucrt4&5XH&$ov#bhG(1*GrLk5fsrp)vKBpYh4ipEW zd&f|^xlcvAd?}Eg(dB>uiyHqezjrnf!w(>vz!*3}=+F5+m^7|m7nhQFku5+J0b0Wk zHxi_qD9e{y5#mJKb7^p7Wa};-La1=?71vSLZicxyIe9O&i{tDo6-0+&{LU1i6G2zS zFvqg}f4Datm0QT-kk_Pu`5CCujy*4cGph=*;LH&fB9i zauX2?iPrr<4!HJ*?+(ic==ce`v43?;8+8Do>;~Z{IuIXy`^;gY7b&NSy_4q6Rx09M zhc`dzSa|&FCE1mY8MdAcmV%8kmWty%cExQ9H?FN&?s!p*#T--Duw!C%()SSxfaS5Z zRY}qawQ|uXRhTdPu5DfW7h4i(ua-TheUDt!Oj=%!zAKkrv%6w-caBGsnNO33!-vB| zhyg#TO}y9g0H9^v{s($bfvMb7IG_dbPn&S(VAW$t+$x<;icIU0)k_6QlW6S8N<$H&>@q{;kHiqK31kC^@8HYv9&a$orSLDiegnU^cS)FAzy z-rPMYB`rOX69eBRDD|PPu3Ntnb*#_90QdYlX}})KBQRPBBO?O(3hd5$PicDJEABag zheX=63UH{AU4!q1m`tVP|735l|2TM#vEcJ7=Ap~0uTADwN>#0T_h#t;|i(Jkb_jwn^ZQ@)IuqC$zzFM~{`U~{ytj$AU4CgHhsWd~|_WolysKef{?y6UIr zeByS$H01;S{4bTVa&S)7b}vTLBHXL;a*>5hM|&GsZW$=H7U(X0xGBgbjt$e0895kjVvF$jupSj?J9*q1-4 z*6oQ^`+)yO11zx>ZTq9~SwxqPLR9O%ZpL`U`&&4I<|K{N1ip8|{@`|t1!rtzgy~AA zyTbsnI_m=sCK^V8i!6x=z)R%PC}-K8^$AK!?h9ka$J7cf+^C9dp1meH#Lw9PIL7EG z8Q=HsX&>m*mL_xJwW5|1fZdwp8@M z3<<+14#cC#HJcJ%$8rPlPK6A!$qkW$_hN)MSjv5AyS7#ZzL`6W_janJbZin}8{hg?}>Dbgmmq5Oqy$0>0CA$Ei z;*?tkxhy0*D<9+40k#}8q`J<^-K9EQWUst`Vn~E}VN{;bNS?6Wuc(wp>moQoSE}(! zBFpN$_XW=#_95wVvEtf$8BoBz}J&4k+Yss4Ww3ZmzabXrD8?WEdpLq!rt!^Gcg8IQ9soU&%=sB_m1$lyWfT))Kjrn{-Ld(=r zd)dkDKhQzv=NG>V#tQ37;qCXk5o|d8b~yNxLq`dJ3Gn*5;w|6Zx%=eyXDA>C_IKhR z4aTUw#Yx-m_!gRYCfZYi{+8+X_dUOS?R6@wK^SgXMhu&a5%0Z~d)xohh~&$_Z!Nxd zvox48=$*Fx?tspzV@ynxRl_M=4uOB-w*R*K6w;3$&dSP)aUyK`Q%d*D#UpQ>%22l( z&9f0+p}>nc-;#m0Nq4nqvMwk_pZxDP8%;oTw>WxCEjs1C(siU|eJ2pVM3(JIm>{;Y zTZglI{!ijU%>nG&f=8H(wt4tVA9{Ko4miKvVzUpNwpU!l1KRgvg-VQY)RvlroHvij z4e409bKM`e#MGjZB>~r-Rl?-ZdBR5r9I-UUByAyPOT|;Vmh$InNf_v!z-)CVYnt%i zFDjvmfF=X+=R$}`y)8X>+-;+=7|D(mfTLR{&E}pD5+o=X(MzB!X)!-=#rw`K4j*kx zGUaHt*5YaZMH}Rn`~Jtb(QAeBauHr0aH!d-40zPI2HO_%iN|>-%xWI^e{F;{N)D4} zAND$BZJ90@5ghtN3L74;%&xsgYl&?9QHK*=&itNjf#Qk`TDhI1A({|?;d$hxz0JIP zCnO`#^=5F*k%eXu-b!^P;ix(6E{mv=UJo&TDWak0^X1r)(vbK%ZC{9{!~Kq$KIC7Z z>s~87<9cJK*?Cw3Rc6YRNa7T6-_G z^8@dJOuIWO7f})1V?h&otTm?+-Wa( zd?Bdth{)@tq}167aZ`?S(>FXyWG!5;Lk3=V>EoW=+B+!CGUj&?zC)$tY|rLZ@^E3qMuzRY>d@{l~Qtg{_FU6C1BnH|0GePq!)4Th$XzkeZ5?a)F}d G?f(mqK;BmX diff --git a/gpu_cache_clear.py b/gpu_cache_clear.py deleted file mode 100644 index 59f73e1..0000000 --- a/gpu_cache_clear.py +++ /dev/null @@ -1,101 +0,0 @@ -import gc as _iutils_gc -import torch as _iutils_torch - - -def _iutils_ensure_bhwc_rgb(image): - t = image - if not isinstance(t, _iutils_torch.Tensor): - t = _iutils_torch.tensor(t) - t = t.to(_iutils_torch.float32) - if t.dim() == 3: - t = t.unsqueeze(0) - # Expect [B,H,W,C] - if t.shape[-1] == 3: - return t.clamp(0.0, 1.0) - elif t.shape[-1] > 3: - return t[..., :3].clamp(0.0, 1.0) - elif t.shape[-1] == 1: - return t.repeat(1, 1, 1, 3).clamp(0.0, 1.0) - else: - return t.clamp(0.0, 1.0) - - -class GpuSyncCacheClear: - @classmethod - def INPUT_TYPES(cls): - return {"required": {"image": ("IMAGE",)}} - - RETURN_TYPES = ("IMAGE",) - RETURN_NAMES = ("image",) - FUNCTION = "apply" - CATEGORY = "image/utils" - - def apply(self, image): - try: - if _iutils_torch.cuda.is_available(): - _iutils_torch.cuda.synchronize() - except Exception: - pass - _iutils_gc.collect() - try: - if _iutils_torch.cuda.is_available(): - _iutils_torch.cuda.empty_cache() - except Exception: - pass - return (image,) - - -class SeedVR2Prep: - @classmethod - def INPUT_TYPES(cls): - return { - "required": { - "image": ("IMAGE",), - "ensure_even_dims": ("BOOLEAN", {"default": True}), - "to_fp16_on_gpu": ("BOOLEAN", {"default": True}), - } - } - - RETURN_TYPES = ("IMAGE",) - RETURN_NAMES = ("image",) - FUNCTION = "apply" - CATEGORY = "image/utils" - - def apply(self, image, ensure_even_dims=True, to_fp16_on_gpu=True): - x = _iutils_ensure_bhwc_rgb(image) - if ensure_even_dims: - H, W = x.shape[1], x.shape[2] - # Width - if (W % 2) == 1: - if W > 1: - x = x[:, :, : W - 1, :] - else: - # pad a column by repeating the last column - x = _iutils_torch.cat([x, x[:, :, -1:, :]], dim=2) - # Height - H, W = x.shape[1], x.shape[2] - if (H % 2) == 1: - if H > 1: - x = x[:, : H - 1, :, :] - else: - # pad a row by repeating last row - x = _iutils_torch.cat([x, x[:, -1:, :, :]], dim=1) - - # fp16 conversion is independent of even-dim trimming — must live outside - # the ensure_even_dims block so that it executes when that toggle is off. - if to_fp16_on_gpu and _iutils_torch.cuda.is_available(): - if x.device.type != "cuda": - x = x.to("cuda", non_blocking=True) - x = x.to(dtype=_iutils_torch.float16) - return (x,) - - -NODE_CLASS_MAPPINGS = { - "GpuSyncCacheClear": GpuSyncCacheClear, - "SeedVR2Prep": SeedVR2Prep, -} - -NODE_DISPLAY_NAME_MAPPINGS = { - "GpuSyncCacheClear": "GPU Sync & Cache Clear", - "SeedVR2Prep": "SeedVR2 Prep (sanitize)", -}