From f996832d758c200084dd4e3abd06efadd76a8d7c Mon Sep 17 00:00:00 2001 From: D4rkst3r Date: Mon, 3 Aug 2026 14:08:21 +0200 Subject: [PATCH] Rock Gen 2.18.0: Material-Slots, Praefix Rock, Warnung bei zu grobem Erz-Mesh Drei Rueckmeldungen von der Spielseite abgearbeitet. 1) Fehlende Material-Slots "Material zuweisen" stand auf Standard AUS, deshalb kamen alle Proben mit mats: [] an - Unreal legt dann nur einen Default-Slot an und die eingefrorene Konvention M_Rock_ greift nicht. Jetzt Standard AN. Normale Steine rotieren durch M_Rock_Granite/Basalt/Sandstone/Mossy, das Erzfels-Set bekommt einen NEUTRALEN Slot M_Rock_Ore - ein Set fuer alle Erzsorten, die Sorte macht die Material-Instanz. 2) Namens-Drift Fels_ statt Rock_ War ein Versehen, keine Absicht: der Standard-Praefix stammte noch aus der ersten Fassung, bevor die Konvention Rock___ stand. Der Erz-Set-Knopf setzte "Rock" schon selbst, der allgemeine Standard nicht. Standard ist jetzt "Rock" - keine Asset-Zwillinge, keine Migration noetig. 3) Erzfelsen mit ~870 statt ~2700 Tris Nachgestellt: aus den Werkseinstellungen liefert der Set-Knopf 2590-2690 Tris, die Automatik greift also. ~870 entstehen genau dann, wenn man den Erz-Haken setzt und den NORMALEN Erzeugen-Knopf nimmt - Werkseinstellung ist Decimate 0.20/0.50 statt 0.40/0.80. Das ist eine Bedienluecke, kein Fehler in der Automatik: die Dichte wird bewusst nur ueber den Set-Knopf gesetzt, damit niemandem seine Einstellungen unterm Hintern weggezogen werden. Deshalb warnt der Operator jetzt, wenn mit Erz-Haken ein Mesh unter 800 Verts entsteht, und nennt den Knopf "Smooth & dicht" beim Namen. Sonst faellt das erst in UE auf und sieht dort nach einem Material-Fehler aus. Tests halten den Vertrag jetzt fest: Auslieferungszustand (assign_material an, Praefix Rock), neutraler Erz-Slot, Sorten-Slots bei normalen Steinen. 17 Tests bestehen. Co-Authored-By: Claude Opus 4.8 --- README.md | 11 +++- blender_manifest.toml | 2 +- dist/index.html | 6 +-- dist/index.json | 8 +-- dist/stylized_rock_generator-2.17.0.zip | Bin 32287 -> 0 bytes dist/stylized_rock_generator-2.18.0.zip | Bin 0 -> 33014 bytes stylized_rock_generator.py | 66 +++++++++++++++++++----- tests/test_ecogame_rock.py | 7 +-- tests/test_erz.py | 48 ++++++++++++++++- 9 files changed, 123 insertions(+), 25 deletions(-) delete mode 100644 dist/stylized_rock_generator-2.17.0.zip create mode 100644 dist/stylized_rock_generator-2.18.0.zip diff --git a/README.md b/README.md index dd29698..256b8b1 100644 --- a/README.md +++ b/README.md @@ -48,7 +48,8 @@ sonst findet Blender die `bl_parent_id` nicht. Abgestimmt auf `A:\eco\EcoGame` (UE 5.8). Kurzfassung: **Benennung** -- Felsen: `Fels_
_` — Form = Buchstabe (A, B, …), Klasse = `S/M/L/XL`. +- Felsen: `Rock__` — Form = Buchstabe (A, B, …), Klasse = `S/M/L/XL`. + Das Praefix ist **`Rock`** (Standard) — die eingefrorene EcoGame-Konvention. Die Klasse setzt eine **Basis-Groesse** (S=0.45, M=1.0, L=1.9, XL=3.2) und ist damit ein bewusst anderes Asset — gemessen: S 0.85 m, M 1.9 m, L 3.5 m, XL 6.0 m. Davon strikt getrennt ist die **Zufalls-Streuung** (`scale_min/max`): die variiert @@ -108,6 +109,14 @@ Abgestimmt auf `A:\eco\EcoGame` (UE 5.8). Kurzfassung: - 1024 px reicht fuer stylized Formen. - Tileable (4D-Torus) passt zum triplanar mappenden Master-Material. +**Material-Slots (Teil des Vertrags, keine Kosmetik)** +- Die UE-Skripte mappen ueber den **Slot-Namen**. Ohne Slot legt Unreal nur + einen Default an und die Konvention greift nicht mehr — deshalb ist + `Material zuweisen` **Standard an**. +- Normale Steine rotieren durch `M_Rock_Granite/Basalt/Sandstone/Mossy`. +- Das Erzfels-Set bekommt **einen neutralen Slot `M_Rock_Ore`** — ein Set fuer + alle Erzsorten, welche Sorte es ist macht die Material-Instanz. + **Mesh** - Echte Meter, Ursprung unten-mittig, FBX pro Asset bzw. LOD-Gruppe. - **UV1 Lightmap ist Default aus** — EcoGame beleuchtet dynamisch. diff --git a/blender_manifest.toml b/blender_manifest.toml index c32a869..d75e940 100644 --- a/blender_manifest.toml +++ b/blender_manifest.toml @@ -1,7 +1,7 @@ schema_version = "1.0.0" id = "stylized_rock_generator" -version = "2.17.0" +version = "2.18.0" name = "Stylized Rock Generator" tagline = "Batch-Generator fuer stylized Rocks mit UE5-Export" maintainer = "D4rkst3r" diff --git a/dist/index.html b/dist/index.html index 929d951..ddfa83f 100644 --- a/dist/index.html +++ b/dist/index.html @@ -40,14 +40,14 @@ 4.9KB - stylized_rock_generator-2.17.0 + stylized_rock_generator-2.18.0 Stylized Rock Generator Batch-Generator fuer stylized Rocks mit UE5-Export link 4.2.0 - ~ all all - 31.5KB + 32.2KB stylized_tree_generator-1.25.0 @@ -61,6 +61,6 @@ -

Built 2026-08-03, 06:38

+

Built 2026-08-03, 12:08

diff --git a/dist/index.json b/dist/index.json index 8083681..d057c54 100644 --- a/dist/index.json +++ b/dist/index.json @@ -57,7 +57,7 @@ "id": "stylized_rock_generator", "name": "Stylized Rock Generator", "tagline": "Batch-Generator fuer stylized Rocks mit UE5-Export", - "version": "2.17.0", + "version": "2.18.0", "type": "add-on", "maintainer": "D4rkst3r", "license": [ @@ -73,9 +73,9 @@ "Mesh", "Modeling" ], - "archive_url": "./stylized_rock_generator-2.17.0.zip", - "archive_size": 32287, - "archive_hash": "sha256:5d6a1616822ac74059ca82a07c3b42976efb37b211b523cafdbb1864de3118f6" + "archive_url": "./stylized_rock_generator-2.18.0.zip", + "archive_size": 33014, + "archive_hash": "sha256:c690c130cff1bfd69f91c4d9685ba9fcb56b017cfc1b1211cbd2df91d15ba001" }, { "schema_version": "1.0.0", diff --git a/dist/stylized_rock_generator-2.17.0.zip b/dist/stylized_rock_generator-2.17.0.zip deleted file mode 100644 index f3bf76d3fbe550786f9b8cf2fadda29957b5b89b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 32287 zcmV)6K*+yPO9KQH000080Lw%JT@8SO|33i$00II402KfL0Ag%qZe(S0Uu|J-X=Y_} zbS`vnZEQ_Z%WA_g5WE}w4~u(^WarTq0zEV&XFN;dD2|lu-j0s7I-$(1DfW4Z8m%B>J)%b%@!@@7 zY0+R;Sf5$&>RGVtu}GA)(g8FRR8;Kx3A+PYaDAqOMiIO(ZrS3uHI_WT5lWLk9_l6L z6T5db4#LMas0t~W(ZRtFZk?h~t%zDTP18~lmuC`}m|g_ZOJCOcWPP7;bOXx+)}%^= z$Dq#MMCqUw2ZC9RTB7v>66!7wwr=sHc4{xkzj$!${0N)mW&4E%B?CyF(N*C#5`7wF z^4Yc7{!3l9kvA%YJK>}AMru{~9-W^}9Dz@HHUF3{S5IurGiEHS1))s_aTMeV(;lrV zE4t!G+2{_gk^STT08mQ<1QY-O00;ofL<3#BFGU^ldjJ4Ly#W9V0001AUukY>bYEXC zaCzLldvn`HvN!zyR_%Adp(~HT4GCRr=c2Pp9m%3)t#$Du%62v`7Z)T!3K0nK;38Q{ z<$U(Hf88^{;6~C;yw9oEmDmz6Gnnb=>FIlqgOMN3BJ05V?XQ2a=uanf7hY%I>I~C| zz<>0n)>SmQwNAXyi`_JeJ3ZCT&C(nCm0BJ@i*J+kY4PgLixWQz>7BjTvv$AlSvy_* zZX9^w)I&e}SLrudU#c#)Jmoh> zZaTT?=X17ZnHO7$xuC@A813z0Hcqm5X7zuvj{RgAxD$_m_9p(qP5I|Df8nRpo8Bi; zaOZVPBhWkRP3$FJn)Ix*%j5n@oGq7L*t5>5f9$(K-^#+N_4ZwV=%v|Grt~(9JvXoh z;oJ{BM~#=mgP`Hfqxb>vxE%lLO;RlV_rLz-uYd6u%P3B*@$#YgdEq5D`EOB@|M+VX zh50YEnxawchSO+~|C+|M?6Et!#TRCAw7~ezGLDvsrJ5)ppN8ohdhEsNL(h5{L~ixh zcQn~3E*=iTY*GAn6h%S)n~XS2V?Uf1P2NO)NN_V+b&WZt4@)nf)8$fjnL4?l7tlYd z(@7jTLGsTMk`j;nG|Ihn_;a*2!lDf2z@J}E7uYb9Ie>r+{ zN+%a+Z4;nX^r-1tN}9<$i`C7ZcHkn{=Py(|mo`_}R4U^vj9 zvHT>p=H7i21S#kR2FuhC9#O*7n);q4QwbfSMV_Tcvg~By2Ht4lhuaJHQ`fq4V;@^c z6P$Z<+S@RTF&;*Ed3kki`61CqLXxrN5&4PLuuP`z{dj8KMWNNX^}OXMA-dV&#olU+ zPB7HFD99EVIf@tfRFA#|N|?|m5`S`Ih4dE@9eM=h8e)RyG{1BA6FrC(;loIaEJ*z& z(PxEpPv`<#L{WNU{U4ez4MIflmZoW)Mfd$TQSi_|i=x{ePZkS$N8P+ngzL#IeaL>{ z-uWOS=TVgOFxnt~>{>Uj7XlDdKlW}@%ME!Fs_QYn;yHA~EO^7M%p23&Y3%vd(DSCr zKF0Z<-KWoYxJzPfTmQ57-H*?#>)20dtNn%bi|++9k03-Hcc1U<^q=nR?C^V9((&M8 zI2gUTqV2vm?%PDJo>Ac4c|k(Ud|upda{G*8T#KV!dPms4)AD+cU;mK5PHx;Ok<`&5 zn&Lj+I(&P5xux%q7iWjV;b?gJ%V3D9Yz?<~Y&uU{=ky~T3i|1cfBKPr`WZhyb@qN& z)I|~4{%h}nt~EF>LBJ!hu5f~75FY|H6;IxWX$LMaI3*1#{y&j z1PBe=r(c9on1w!|SlRFyU4(S~j>b`%Mhs&8gcl>*pN^u~CrV_rD#%{3(pztI$FyQJ zVe*1@@>2<&)T42b6&&$`E}@aT&|u&grj+&^t#0CU%V&pPnT=ki>g%UGOqq~HN+L*ZN?SO8b$qoI4d+X@!>Dl$^g(6Wy zgGRj$)D7X&XaP}^-wf8*IJ?BCp1!yozIipc8Z;bIq9N6DNLrQ{VjNu% zrtg~ep5NdKZzhya%>f%}r5e>d#{1THAbrL;WV&b$RUjl@eQzK=sHG;}zv~^Ni=A$h z*gA@{$<0il&cK3KRvfN!OptHSU2ba;Jvbv-y95fq1m>YX9ipb3jcI6iF$ z@uP2#!5XVt$4?ayi7M;8M3f`R#i7RPL ztS5LdLfMzzO+fz?Y$CWN3?h;>wIa6D!T9L^9xP)nKFqzD3tmfegy_mrIdK9cDa3*6 zWiw(FQzFL1R4$f*m!>k1JATZPl*HplW*F4m%kOyjIq;NW7*mc@^~8@iYR zu-Ds==72)ouOQ1!y_q#~m&@P*SEWBA*xD2MT+fQezxFJ8Jc4S**sk}`q@>Kehs5bh zH*mFzgD3coiFuWkgr)6wa)_$0ICs8xKMLFjFLol<8Xad`1!aCSC0-Xi42GQQxO_Zcy? zgsXJX#u4$lp@VN4t1PxP0f&L7HvN#&F(sbar>*M-jojY)Wj9*Cu_HK5b0hE zWx6|iQ=ToBpwP_v*4kBHP%ZJ&z|a{kH6GZeQ>+nDwFRW;sWWv`*IAO}J*O=-@p}rM zkdFSy4FXNH^cb{aE5acQ{3Ny8X-(HyO_|8xPvodC5OnO9F6~vfXrL&GedQ6|_QHt} zlb&^$($08xK846V?m`w0j-2vZsiWEI3Uv7mjuB`*3liysN^Q-4l0 zcAj|weoClKdAQ=1VgPwz0=7ez%A!yeOtkSDHh69Q$APtVdGwFLi|ehGfT`17k70x# z4)h3hSec;MZ=3p`e!+?;(jO|_fMx$2Th}`Ljr=gnU%g1O~c?mT6 z+V$uB1Y2(7=hf8f-lyTBC6Q6I#k^=WM5rQYMh-ezI_v+?>4N*2-R#$I571qj4d(A) z&i3r4TW&>@@)Mu+vII-ChfZ#ib{j@hFhip{3B4RDTKUcmvSv!TjD5N#Iv*5+^bt&P zXy_S4%@EKp;eJQ9v%Fis{ch|*;*!`?+5=2%gMBDNxd!3;jUminoo0)rg4^syF3m7K z*uxl1x!q*q`v=vFM=b~lDGMzfeFe(~rdGP~Xv7Spu?_Cj1d3t-Mrky{Hs*|nhD(&C z(9Qf_T(P&_11?!Zw`zQlntz}MAF0pWgS-_Rd?>xBoTe-_c~=%mFbm8^cQg8%`?Yo^ zgsAF0x>a_fesJ(7X_~QomKRky3L2BINyJ}^%Z>P~ZmIV$ocQxFf|#2Em22OXOH#2N zkNp?KJb3%o^nor2ALg2p(X)S=dJE#yGqEkW3+s$8zPVzaF_bXmJ;gKMf+IN+YdOgo zS|TRS&ciDR=tNHYxGuqjPHv&XQ@Xp+;NtE1=*8iSSFqN7_*kd+KBhxZ4Q4&7!i?0% za3+E0=Jdbey$e(K)V8-qql?Rn!DvL3ywg{(wC-IApDX+E@NY%VIlr%%+;JV>m#|jb6bNgz?s1Mtl>-V6nns8hHjcTG=y!a z4TyrEsh?OEQRo?)(>g%t-SYqk#we--n2=FOtTNOXAmhc`aWb8WW!*u8Q5t(5|0FZ& zydknN@s|OKW=F&0mz{2j$Z>C)BiN+MJXMPh4Dc2k;5)!X^l7vObe6ES}c}F^`;wm zK*Lqt3_ghL`V9-9)tB9mCf;mzVUu`?>SUirwjdbWNoc9U^KD72_DrKXgMt+2Iox$(q>C+jr;gvctNq{!jU* z!Yq9(ZpqNgoU&M=cQCsX6@!W6^_K;GpwI1es%TKO6J_W~kdl!93$&-JrS-w_X)del zmhdQX4DAZWjKYJh;o!`W?8}^!?wj2?3APNDbbQY)A9Z8H4%mT+w#RqF#QyF(CwIxq zX-E>d;gnD$p8Mg!j#72?lG zNC(TM{Pci&;(>GJ`8QrTi)aQtCG$X+3VA;?M8z5!u_CYj_`}XeR`@~j)6plrvl4Oh zE(aE4u0eVEBpXf#ttZ-Bx-j@BIdSO|e2Zhf3x1b%VxUX+zQ>&CEur=H6(8;5FgGg! zzu=5up@y>0koJRxw5uLWzK?U56~L$VbvB`Gkb(+SN6MYK_GRg`%S5lw(2bCdJ(h$N z>W&au3<4#pZ#`DND@%8B%V0Gv^0~dMmHyD|gT^jOv^qk$Tt7eVAEr3dcW1_GX|bd#MAhOhd^#9m*}-E2*hybCf?e|QUTWOxr$$5e(weD%uBphXG6|J_0L5fhp#hXHnBg<`t)Ll-qPz4P+b92T=1$oF>g#TCb;zpw z@YKtMxtPlfp*0xneFj_$dT`T)lSIHEt4(ooL!%HOBZ+i!%e=N@4I`QZM)p#xbKc-W zu=&DsLwIz$RNxZ_@{^br^hb+_&3YmbwE^~5|>#MRArE#tX;4FU6ZoT+|=bK z8ihOHq4D#h{<%EBT@?{>chcH4?q~|crdK~3+X!q}W)*V*5<2-NZ z_3%Z#9zVBNG#;gkC9461Wl2b^fQIDgv^gFN6G#kOzzn&8NlW3GI=^zL_E>9`R##8^!N03u;Kx{H(r;L7r z<5rDg*Ekwl$m%`9Wv_U9{)a9iTYMqD*?G$5ebJ+6*Q+PiU^erZJLMDKe?xrz0&xm- z+p&`uF)O)imW~V1;F!(C6}9A3QTV|Xt+fA}*|6plSHBV~uDvEV9*yY0-uNRB4yBB> zo957KoEbdey4})nQyy;GG+b?_y%npd4s8O-Jd4E&Dvb?TRobg58k@IA6udwv`Z=Dd z_%n7jl4i=aQHd|wt;&>KR190EXTiboU~BmHX!!Q(rIvBk0FL-ZntNFGnk=^#)^fC2 zr_~;8ddS>AN>=~WDY%GlNnRr$_l19`KpQwdJH{t8jF5vem9zcsRSl&ot#}B9iDAf+UXOlmZG0m zS}pvkU@q&ipBLEpPBR5eFHhO1{1P64d!KxeQ!#T?>e0vTr`Qj4dAi23LblF;jyt7CZ&ZLa69keRU^7E1u-R9=@jnpP@d$ z8$zYqXt7A^{8l+Y&m_m?H&td*`$QEp{m#Lc>R&M9GR^Uu4W29d8zz<7IIZRuJwNSU zg@aIWuex!GqY3R4VQB;JLq|ej2|1TF_n6fnqrSBm7;Z0`fFk0#1>0Gx zZ@9+8tlywb$cHI8SF79zO1)~${Q!wgqVy4bd!I8C;QkWQSIx#?=rmObh;2m5v#GHm zdP9;()D?Ipu9O3JCElc>yr<`7Sqb zNNOo!=S#Qii?=F>pw4O1H|6o0hMuXWwkk#ZRAShTjZQw%AP@9E6yJ7Pp@i>ud)B58 zTkJ=9ynD^ebK*rrX=8S2O{{YgPwCcyX$YEW!#KjW1k=ImfGh(KB^y^Ro02vc*r?SKtbSFyYL+R>XQU$M0e>X6}eI* z82DM_LJix!n7{s1+ymJZmh2&9!o`J<7A^=g zf~B^*)4sw`okv>|;qM>8TZA(@d1B%g{O9rSeX-J?=dCy{o~`%dbwvXz=(@3oAgd%> z*h`0hL7c!6J4hfhqFyCtBvR`uC0|p(&_8H!hw4NgSco)&+hTvmO&>@y)C7~};S1qmzSulEH9x{ephc;h0hT$4tV`IVYGVJ&#%9 zE*9FyLyzX^$aRytU;t(vKxgQMOoV6#5zqhG)%m$-jREH(E7a$hZJ2VlJAw=VRLt$( z4+3JFV>bg3u})4r<{`}ioPC`7j$*5JdqkB(JAd4>e*CVd-{_;Xy>0F8ls1tmP5;EZ z=Pmm+hnGGT+7)`v85!Y;s)!Ntj9vBF=}gUtZ#vAzbJ*8?&-iAhJRreTl8+ z->pY*=m8qI!6()(p}pFz{!bk5245W7aY6ff7qurmqXSMIV||P4LeDM5llF}@Zs#8_ zv`Zn_TigWB6<-Wx5`*MY`R>yxOBJnCpXKxgY}8}Ws6#D*V;U+W6DSJRyCun64d%h2 z_!pn=LUy&AWDELM|C)G)Am9Xw2_y+zF|`bDN(Ic%n`IK{AUwzag%MsQaz4Qh{C41Q_be?W@bj@7 za6obX{RQ6~Ek|Eq+_Ua#r#fdaOyyV)|G}sXlRmySBXqFuXvt*(m76F(ZeS_@PVkpI zcE7H>@IzBkl`2W8FCDi_cXPfbb?k5lMq=|MLaGdXV^vfu419^AST=fg@A z6pd(b{`I_Z>y^CfB7W({W4M|l;P-Biru6#o;_$40GPu4PTwGk^CeT?fEKTHd4i|r} zXjO_1Er}_>AGQk4=n{s3n3=Agg`gwwr=HL#@sNFoBu&}uKaBl2L6}w)CEIjqFS7Je z4R?doIQJNfy(1IL21_Tp|8M1@3tgfI+P%XV@rb&=ia;y+>U%ty!g$b=36D*w{}7vs zgdc>rcZDm-iMrjDkEkaxptw78y9CWmyZc(;7iqrGF00(C`(o(m4+$S-NHC08@QgOX z(=rSk1M-MU1Xiq3(tsB_@X=Byu_;^5GzJ1G{!G< zhC`*`|L65!^y2dD@@k8K87*8tJlJ}1d37e`IOs$3Gp|>~&cBtJ@wrVT>-RUOwxqQvy%L6%uJKbGJG1faFK;8)mggQn+3j znK3I`LAFzg?e*ZPv-@oK`H#3B;#56jeGva1g~5Z?yok*Op7NFWls_6eq7guFWL4;h zmj5|NN5Oe2q;T&>v3rjzli5*&8e#cWF7P)NhCONB&s|nT@g?owM3gN*>{_tp&w@4jZCTWNJR-r?*l}y{UJ~I+Wc@v)^FH@GrwAqO@^itXA!?UviKEkGs(9|X* z?p)Lk?=K4_p_6;S4bEP?8Vvc3{W@FDym)&+3kbJQq5uZmYa%qn94HN1*SwSQ5j{@r z(xqK^JJ6rWw_Zu-!UgCk5>uI~wH6J^R45b5IK=AGx$EKnuWCzs%8Y2LCUWOGZv>K1 z;4dr)wPYreRhSxgdXf>Q%MqeY`k`t_g8o8_YFT3k>#?HXp`yw%1`0Wvf}Sg%73Z-m z%960-`Pg6hkd!$wk>)Wp_lJ~@OBW}hNs8AZKFj6p()>gbO+`M@+GJ{FUUY>^WS36$ zK1^LNzV!@F>^1PX%w3j8i51P`+Xa+SU!X()mDJ61VJp!hEhMpG8b|vz{?&1ID_3OW zXG$X99bXLud7->rl2kyGo4$Cm&nzjmEVyjM>J)r-k1?Ck7pmnvLuGlSY-vs_eC#%+ zEPO)zI0_KpGN^1mZ&l1*A_lCQ2iY~1AQk9{<(8&{h?eh(4)CB2;VohQB}Ep$)j#}A zQR}+MK5v9Qf0G1Q`kzVg-)P+Lnt*Lm)t+^Fft%!%{x9XrWb-@(bLb4IIZ8|5clxnn zgM3mQ|Cm5RgQskw5M#%`Y-o=Tfpatfn>qf~Bie(YF8#o&r5q&cc-p`6=CI9S_vti* zQ#YQ{_Hl^VF<*5$p^*w}g9VT^y8ZLhq#oWEsuiTo3xByZQ>d&w_O;9A^ zh7*8tT%kcl4I?dUj#;uquOp&+oH>+Lw0w{OL<}xAVfv9yhsf7yL*$wmm#jrb+XuOB z3_bS^np=C%y%-rav^w0&5UCBjG=|D65v<&p_vq@+_e1oM+IW>*HIQK-Z6>t^ zx`oMDE)K0zVJ=Hf6~B-pRPJ2XrLqe`50>q5&vNTtJ}T$`dMyWS(W5F1B3-zq$G-LQ z?C{#M;SQJbmJz2mJiolWeq}{s@VLGtUJkd>dq2GOg6_XH4*@6WGy`Fb5(h<+B5rhG zZDB224Z@YOEu*u?o{o0ch~>z;%evPNASD%S(_4V47eVSX(uc}eDAAw?6ydAcW42n# zq1%*`)sVb;R-TltyU9GtYto(`H*P%hls}_o-~bW%_*N)e|0nC^(a-(C@yVb+_@paa zd2=aCLuAlth2{!(|KCqab(UzmbgT3wES!B7e&2 z);TU0iH0|F=`|<>u0&raIah{p)3w+>qFaBGcFi>N9OSqRT)vBNDWnB`XqKt-dpKh_#+CS&rPD-q%f*^$O~|~8)qr{|3`#@=+6&xFsu$RDDs__ z>+iJZE7JVJB{$D=SQG?-I9YZ+u%+Uon~m9gf5?O&fa;2M1_sBlxYvHuTo7<{AH~5` zA3zmq_<cHeiXwpPc zI8t+Qy#H7vo>pun0+J4BM;f?1qX zF(G*|CxrcKnE|KSGVoE1R3#}e67$3p5_xE=%*rJAT~Zv->k^izH;z)5<24_lrZzhN zff~F%KywR?KqRREF@UEUfdXO_Z8btU5vzJ=X32$zQ#xX&S|eQH#t){*^^BK#x%|+P zXTTQz!F;6%iyG30Sj!p@c~GJ|4!?yTxk(@;FA@r{&4CS@=S5;?^;&YI{3)B>_0Q{a zOwi|{)A)l)n)2^;OOcX|5m5MINugld zk4S$mUtJ6;^V8)4loVsnRcT693KOlg>9guX`b0c<;gdms4O3_*x+rcLx*0!LJ^*jB z@K)I7;nIiT=;t1%oS5R6*rhzkluPn1qd=;PA_tSq6EYR&FPgIZGJlQLF1Z2Tn3Qtk zgv+36$#r8qPL-USWt9R10DBL|0+R5Qo?{sSd`?s9t*WDi>2R{j4Wou>4Y6M3Y__Ga z@k*jw8BL!aeRiDMiTl>-jA(s39ix#+*cw|Z!orDeVLJJMZXXMOT!~N4eYsdce-{+? zs$C-*C9m(;E%A03;%^7#W<}*kGu;X%u;O+QK%goOP5zsrER8D4MDsEw)TuXNN55%f z1RIS&4P+4N*cPR&2Fe4qmFkyM^w5({qW)+G9HZ@25=K|}VrtfH3f^zbM2O`R;-?Kk z+GXgLqqSwNB@IY!g8jBgI4M?GI*ze7%{X?(v#ujLr_tQ!bNG2dhcu)AM+%b9kZ8U{ zaQlp)-Zg=}*n9)1avHTOpS;X{)I~kWUPFWjN^!~eOrE?!6-_QHw@@v**u^DBH5v|n zIDKH~<=gc%7Bwv_<8?#W^kA_hf(z}j+)l({Ab(WO#CZJPNW7yF28Xjoqqu*k$GYXN zF@VE=t8^?6n!(+Ab9P94_~Flk;g;Fh;J(XQwD|Rhj^>d&aNFx>Ho1f4tl*Qmvd%q@ zN4goa$Y0wC=FR*fgWMdXf+^-J#fqvHUrEq_t30d6?D6BhBTBV`C+S*9vj{WdSCS<7 zKoMdv`?!L0G%B4P?3RP1XnH7+4lYJQ+<7_M)ukY}1qySd^e@p66=#ARK3*aEi${sD zk~NVx$($||NytOIf%@QtLSFm<9)r+@4Er%}9&G}(zQT2fOrrWMkh{PBd9omb1 zloC4W!BjpcNe2{-vJlrzEoL@`@X)8rYpR$dt%Bi` zs&t0CMHNOZHyFN15eiE`aK&}Lv)Sy3q`-zgSiWZZ9xWZ2Tt)l;+t&NTtBcc%ldaz? ziuw*Qz}RRz(YFkt7CkHL$1VGqrp2*~;x00LAnLv7zb0NV3Or$nZCPDUYIyS0y4?od zKMbikd>SYJ+t%sD%S)Q8)j2E*xsse-pDce_KHMCW-8kyHalTTWMJYLDF;nyvuJTef z>7lL(ra#MH?e3etiJUOI@S`qrRqvN-WEse$lFV?TZDcex%c^qes)G+@{K_+JcT^r_ z)S5csq|6J~15M-_>>LN$sT!GV&X-LcB%w39o*_Om;2;lnI#8xZ;x57|mz3?7lO3>+ zRKvh|d2$SYI*Iy2&MAveT+vX0l)`M9*vFnJ(sJpY1GUIfKzt>q^}gi&d&gA}TOlh8 z?VC%WDRI*Ar@j1h_OA0Cta7{HWS&1aXSd)wAiK}m+^E{HGg+`B?6nybqP%hr%F%Fj92dn?`Q=oQN`T5Nju&8 zR^?fz)kd{$QL#5gewt3PH(Xv`ZNrZ2Lb+VM33h!b(t4JTUzH1(<)sMSaU~AIhOXB| zxSk|7?{>;7DQAD(w@$-iA*F1z))}`jCaz|^D|0s8%Rwr{YjL}Pbxt+Rw5Dt5hDx3J zu-t%b==831Am2rC6h=PI=F8mqh~{z|6O%!}@S6^}%H>LZUIbA##Y&NGiLiFtisHE& zB5_JXziLue>UJzSRymUwEdV1ylAU{jB4O+4L%y2QZW$R~t5|0MO!BB0JGHBPCJ#h| z#wb=uG_{<`%|quKsr++GDEzd7!F&1W5WgDHik_Q8r~x!@TS+x-9Ys;liYA;KznT`C z385aoTGFI+rUc6vXiRPNO8eRqIUhPt5Nkc&`%={4+!qpc?tbdDZWb~Ht=%vgBA@c! z=WSa1C-RLek53mtKV>=XiP1bW*@|_Yw zSN(3+T@uC=TknadJGF~q_lKSKn?kKALF}cI%drRqZ8rq-L)$9bZ;m{b z1ifp>N!br_(=)Kn&v&(ZZ-u^;Txr+s#ZWTt-ynvoL~C|yq~_W4)+6jAIe?$C@rgA7 zoES}I^QYgCt)Ff>j*R6+aLiausH*9RR|8vlLGlOt1RmTMn*#hZTq)bVC|mHT96fD| z;5H+24s7)1T~iZO)3>i)vQB{%mOW)QzSoaji2pJQaTu&-^u3DPjh!de*pil8-4$2* zv6)mtXOH4aT8KX!s9I?IR#CT^m^geXC1hzG^;2n1J?jcd$uRArS&W5x}z4 z4{I8SO4RYX(;&<3H;HQBZ?0_6x&tt%KIdCSN*vf&t;6v&3vUDHNLa%g8maNHjZKqB zx`6V9-f;6yZXWShSi%K;hGoXB$M;0tDm)(r0v*jMASbLKiZtfy?Va-XtxQ%>pF^Av zB|BFY&tYm)V#}$%l5~usIM!JN8I$`u zUY|b4XXG5E(yG))=S^EpdN5pzPD&>HBmHTcBFBQN+s6+iJ7}Coo0?@MEz<~6xo(f* z44IcQWQ8n9&eHd^uiEMrnB7eVR93O4loV}CI1M?^CU6pEKZ*Gid|{RHBjG0$UsVoG z=63HB!@L1e-S}|5i?VpKZa2@f6bvS#2hpT4CteCSR3u57Cb_4idn)e- zLeU>HD~P;A1d+U8JOErs1=@0=&!4-SSJU&mi_1)Io2CLc)ZCFD7o?$U^Wwa zKH|wx5&444`VP~0{_Q{d#Hf!mY?m(N>+!YHUoj+KAjIgVe7P2EGLD5J7a2<&sEfwd z&?@R1DRI_aBmz}YjF`&Z=YPfp%gJu=0iFC#vLV{SW1OroOsc(97xT-*tD^yDEAX*H zW=cA(YvgBy3yq)%C7<^OkU+6+oa8SB22m54PM+omo0*qoChj=*T!ovlPN785^5>v| zw^g#Ar)gSE#CY<5kcL6fj1i6_#r0(8jC*#|yEVtyLa|zLy;?)=bpOW;ve4!lk@qO) zR#=cg-C)^%sAdCZEF%xo!bqr^3~%fqx~~V(lin>0-3s zCSn-+^jB!O8^c@Evc(A*xTIZs542ZrSGaI7T~shCk6>7hQ9N%BfiY(MY%>N&B`Yt6 zAcpal?tG5NsL!TwW*!=?|L5b^)Y zza*c%Wz)b&+36x#x>%8bWc;!XU#_+1Wq~zKRd~v{qtt78rT6VCRVG3AO{&ILBYrcl zoziR|PZNwSZQdMJgvx(cC3#kqx zR|ro$R49sgyCgzk`aGA=%gd{C%cu$=7s^V`S&58}&ekK8LfP0Pb&r&S(c>DO+DA5y zj#B@W3e5C{dr69X^$lffS_j9&12^{CjDJV)6E~Gh zx!ZV?-AfTLTqEsnIL~)>id2wrU~fJthhz5RHO0i5nPRW-Hb8cU1?}?MTM}(7co5EG z+ME878*ge`KH)L~0utI2Mw zn{S{ma#YUKdoIT3Mf-MbCECEqpgi=hSRDxlIq?idQ@o^{l-URaLfberbFPQGi5#fp@M zeSvU;(b(Q%*SH}}vFyZ2G|jTN&hhXZ4;NfdtY*(;lkOQ>ouL(1O^~iX^V6UCaROHu z^{&xad*1GcTFf04;|7*!I++{JOPv#XiMD1)nc|RSR5fAC3KnB z_4auozjb_iY19_)$mhk?*9t1SJEH*UXEn6JL$KZ|v25XrI6z+|v4<&nx(d;%wJRk6 zC+DWXt}B} zve;#hHD^f|57;*KR3*<{7S1zWW4^>sVE5VYdnHXh%w|wpW{o~L_SW;=JPh9(& zMLh1>=vSpZTq{mg)xNRz6kLPAxkurq+KSUqix6y`%=-(`{^ju18CQ2;>u0~v-AQP_ zAY2m$xY3%49$pfuVzfE&Q#B&$T4x=^Z7$V)c!E?0c;SB}bDkA_7!Z)yTxa9mkMkO!gXHaSvZ6n}J%dN+X zSx3&McEfH9H{vassWO%&O^#)scwutmhpP-W%=yxQ_ezgl_E}+J3ev9i3w*X3&nyXn zsidD>8;ztCOgzgLE@-`V1?XLYS?Jz)j~vVoR7HYm2?2#GBYd^M(D-XuA@(U!)jJ(7 zAY?k8*1^&a5Cn@h2gLiEULqU_L68{YQN0EJ8 z^XJ6xX9Rduq4I9|Rn8WR0UHi>UqM*3SfoAv6#Qryr*7S4 zmg>~X3dG3tBE)5N9F|Z%o&%9ZKMcJ2=1S({*aJ$d!0quDvwII6>ETQh0E+a+YQW z>gz}`SW{)KEIU7F>ik110N?;EZWsnmZPIk&=wz=_0-w#DgAYNMW4k9N0F(h&MFa z>nLl}g!CdCd)r0ize;VWtFaqF%9Txf6MG5V01M9pDW5@U@ZcxnzV6-#LkCsaud^;x;!3SiA|*Y)lynW z%DBfE6{d_5AV_s=>&gs+3M0m42?=WyDswPTo8~^;@()QO%S=E^lBU5}Ik3 ziHjm`O1J}DO@;*>Y{MHjrm3(CYd)NW1VTFaZR=`qayq;oK^=HC@n2*9;Gy z(H-YavJ?rjf>}=|X)}}g=sZZ(+|>>zsiKV-=@zvleL8gxS2ynE6^`?=xkaW-BPmpo zmaCH7$4nz6H9=Z)5tTdEYjK$A;b=iz6L@X9w4T*C%gV=87W@JK1N>4c@UdfI^xrO> zy0gK~&Mup_?=!f?GA->fYsmgbQ#YPz?=-?VIiYH4a%zvG12Wg>!lbPYxz`<+I_3chPO-Xb?c|yzmd7 z5P!yrs%YCB01-Ll=&C}lttc(aO2maXZPRH*_eti{o1zR2`tE`}OZ z=~D5+NQV2d`p!7)#jAClQ;cUp+wI%Nw5Dyld)l_AZQHhO+qP}~+qP}n#y9VGZcg5u zQ~RQ_vy)2drfTPT*7~iFVBi!_EVd5vl0PIgkyD~UBKxuY7>qAMo~1`k%7Ains_5Pi zB1F+^rwWC+adO0QrqdK&TE9+0PW-YOj80A2Ll69+R=c%Z94IpNKmCf+0UBd~q0)1( z6Eo9Hgj61ko;(h`m=Q+E3m5yAj1<+0N@c;j%2sso7Zy$cH!nB!ZB`cX4MuGa%Yl95lxFT6+!V^L|V9`#aYS zHU;9FZ7WoIL`v>)1GEw(-sD~*ZqZ62Y&U)4v<0q?(7*CmyKPCe(zH%2>QVlNj63Wd zb+fx8J5EfEuJ%83rMq%T?0Z&=Lp!#%B1d(cW+@M%@e!*6CPj45R>@WM1msdDlG(TV zOTswZm-3;wkft>N_c2`UFMf}PI%@S6js!TO=Q(}Yei72vY8%OJo%NyA()G-KNnb=! zYha}=1W6jpIeB}DNe0)e!#cOIk25n?vT`gnOH{k2w)Dy=L^u_@iWx30qX5SGjK!H0 zk+?7pDWF9m`gno!&gk08%A}R-S%>Pv$hch*(M4bs`IBgwiE5meTBMzv5{2fUXyjwn zxr(qevaI13&JXF6t)YSDjR@L+IlepepLL#anpad`$Lp>42~zU4?%2Gw*lINnWT~|_ zuZP8QQU^xwydU{l_|EFaN&*IU3FYqMg5>x%Rkr-jERUb+-UJUU)0*)$g@2x|V!hf@ zi$+tz-QSf#3Gh3lI)?A%-_?%8T4Dz!+7;BV2MC$oxldKqzBb8;khbeLCkjt|Ep=$- zS%r+_>%(PbLQRA&QX&>mrwNt7Y6B^q92QrC#u!BoyH58I2$_M!`_AT`ctw-z?~xnLv!R298sFhfrfi(9cD6Ff^$+HvD?KD2R`_9@Iq#>T8 zy<8(F0Pz-p&&D8UL@_eBaA;FQ20Br*V?aSE)9-c^l448BzuYR__`1nH+3=j!L0{vR zP1#0$7`O;CqQLcg8MOYiL zU93!|V-fIAOzX!y{#zs)2Wu60)__QX?k+qeSw6EEbi}&>OJ2R#CQWJMG<{450oI0 zhLgRodBSqOG25!EIO+VICpa03S%vR1f@qq3Ek-mYdvp|S+jXhBbBx){xZ#j-CtlR~ zGi%=Ta^Y2tZ=$1qLqQ5Y0S-=$OMO08x&=W<8OHmHzr-`h_tIuT_%+-6vh!L||1ox) zTN!Q6$UHhNwuwiUlyOs)(??PjNqK0=MX<-69fT{i>=T`-whR)zMwwH=KsDq=1SAR36|QI3#A5&QhA`6gyad-vT*o0VN|lcA#;rWIj^aIIRvXM_ORs|hIPVkAJv^FD zhl{L4LMSxMCXPYTf65BR%Rdzl(mOAsGS>6$7xK5jly;M8Z&;o1v+cRg&n!DOV z-a<*)5qJ%&@rXjCEH1mzOQOd?N%K$3C?36>ra^i!q(>3rhp=cK@iQ+{2jLlkf)ZKr zy0mQ3c@|{K32L(UQi`~}+N^cQVcOaRDC6m#^dLO=!LAp%=i%uFPP0}U7Ff{V3}#iU z(@FCnBiY|tB52to<5oXvcy*9ch~7omQ>>%r!Vlo)iKCamYS+NZ z3w@nhSI}1l>~_m$nZY_xd=Tg#`sH@iFxp)wEUI)FV)GP|zniCS{2p+`V03h=OrbM= zAalM_j@myO5jMZs%TC_sUcFd_CTE@K!r#&q`i_q9p@eA@V@YOqU)*G06a~q-GUrSX zRv}k#UnU=H6@;hSyLkf_=98g(HOv;0XkOZXovG7AxEBv-nJ8@%G<18`8TbPXb2JhX z$wq_J>iqA&KaBMa?1 z^4-rE&jg>*k!$F6GMlpNXME^+xDU~iZ4jnO##$Q*HPFn%Z*1eZK+zZ;dz`Ctqbh?j zj93PDCWO2o&#EwMol6dS$vw2>Yk@c1x!pZ``Ce$+lchp)VOI{2e)wZMs1fA9h`ow< zH<#`d5<9qRrbvyB3^)2V9&eK+C}PzKdkpspY$C-#7Hp|M?wNN|pBLaBGTy;%VsJ*h z8;d~bYCxwbF`eh?jkh2|>iy5rLFaJnrz;O^VFy(EvvQg>ss4=emS=5B?BoM%cK%?0st5`J&z65xCc$$t{+591IhW?m}QF=p=c$goPyYcD2ZnmeV zH4Ed@V*27YEE>v!t>!~W{BovuF=MMDb)NSe)Hq$~XC=j-tsakH*(~nCh zVF!xge4NvYqlhuXlAvUINFSpSIcNz8eUc|ESE@*@l-#FP1~0T%PyZb~)xW?f=-10z zA09(z&M6!0mQ(uJ93QGnQua8C;%CcHQUU{dVkRr%&atCN-Q-Xp5qRH6|F=NSS0( zPC^;dATf@7^GCCdeBekYpx}vGZ9rEWi#O51zJs;&e1YR5j z6J~(c=>iOZOPLlD-!vLO=^00%#EoeeQqZvIpL)TJeSPgJ4YWeb^Vrigbe&y;-}L0W z=~9Q9qf>b{!TpLoVEpAsJP4^Rhpnx5ei>CHagpHnLr zp~_Ooj8j7#kurFNMBj<55a9JO5`0Soo8>{IX3Fj*eA;g7h3b~B@~dQyEu0t>p<|^| zfRT!x1hh==vYJ>BQ6_HX;Dg7o5Lwh;=oHbfU2-p&j8fb(qG|?hQ5=vsi&8t8M#D5P z!3*BVQl0#Jq2&rSVR7Nj5f5;I_ z4?Xe0z;?QB|A50J_+;Nd*`lu0zySB>0!bGLx*GY;a(%_iw6_avk&z}4=A8^P0OcH> z?Crh1?M7X1)Q9?E@Z~u6|3!UPNP%4&=ViKw4uwZ^Ro@G(b@(p#=ZFU#^~s{v1lc{Y zo#U0B7DiPp@0Ch?!upPFBCJ*No9P+SmkitShwzu6fkhLoX{JQQuo{ZzpU=?>^2ZjWqsqkPzWHtn7N5HVBsJrjHLCiMV)N_@vu^ zb!^4RLsR+0n<9QgQt?YeEs2q6un}76fdd+;1z+;({UJkr*KjFcLS^%`Mi1v>t0w+L zI#}k#HvxWbjaL~9>{KTiek7TBZXBlc6>m9;9Sz(ZzJ|roF81zR=uv(x5LP;i7w;-1 zxoapyw4#I;JH3*X`vh)=TP?OwcFK<@tIXYI6=n^1a89&5XEnzmFpYn@X{>2;c`TYw z3Lac=2Z87WB|Zsz=MBs}G7;u}0n+_lj=MNCmTcwMlnFQ#1`|mA(}OD2de|}Uv3|v~ zG}emWykfw7WUgjZ@1>K?DQs}U!<|Xi0w&Q%7LUUY0Zc@-QVpTt1%KatS7HKOd^ARk zGX@C~fWx137q6V@px>rqsM6%z4;@lEqzaK^NY86p{Q(U`gD^e$u<6f82x1G9C7G)* zt<+|Z!$YIA3ExiFs$o^A)X`#P#&5JAa!>WS_@-o58wx8ec^RcQ83=~hT{=bAv$xYI&z+FUy~^t{j}x=0%t>#nA(p% zEQ4?7rb|bOY2HwjtICHGStPerTMoyB+4u56%BSRb9-?jNJ<(hJX=AH`LgiuA2VR4IgTgj3bHMDw5Bfsz36de#v zj8ygdMQrIB0|ZtfydMigGVY@FZ;DsJkBYNzG`AI6YP_89Q%buw%8|=6oZ~)!7b;4z zk(i79=!hG_H>kZBo`H>?a_px%W7FJTqrXWb@vY!gH}(- zZGM@+u8I1D=64iN4M8|ZnQuz;sZC?WugZZ(P;Ii?0^Ark>f48*-AIz?5^TK3x^~q} zC1Ku`Ney?0q5RNVs8q}Hd+R(w8Rx0~u+=?9!kZ{qOCm$6)o$w1U~!D>zehSiOLAIa zUZZnD4`Nb}fayQ9A1d;ot+8hOWQ)dnc>B1=ku4D zT1SZhZ_HkX457OAI_`syfOj`^5jha9snd4j=#5ok&cYk?5Ma6jL~TJ^s6Hc>Di%HT z!!DulYt$K__*8yplLSq5%Mv;f;Uk_*qD-a4(4dh+b=bdNJ|PMT&QWsN1KU(#w62y^ z%(E?KsX)PdEb~E(fRRN*OE3r85<8$Bw&=-AgcriVUzs?})$0bqiBAdLg!qT5{$PDT zUt_eDy8R%NW4C0;HazOSV+Hxhxx8F~q`2v1a)Ms>W9{PUOYBGR`&3FU8FwjXy^|&4 zkX$C^D$LQQ{-;!`{-4!&fwQ6ucX*h+ejcO7Oy6PKaLyyrPe~ znId(J5Isfainl9-vC>o9<_R&ZJi=2xiC}0gaqz)#rrHYUnt?`|lZ4Q-1Fh06M7ZE5 zZt~{iSin>U<9(`PeXckMUR;2=?$=^tmperlgL>u5T2cTI+7L)HW7@L+OfL0Qtk-8> zchbMMeVc1WFB;tzY3A~O(n>2yu%HR3aY3a|(~voANb9hT6IiRYoxz6KYx*pxltUcn zgp$cz`H`L^}$?yi02yGw%9{T+hJL{7~TKmewFZ7hO)*J zk1!Mb{Ust*N4w8X8iQ=H7}8!T$NZ6D!VzYewztzRP~zJ|B(SPGYP;2(3kZj@*64{g zvKz#~xpboLi>TZrI^Q-1zgn;=gLyLNJuMkzG1A&Wt_QE?YPQU+-kYu;+Yoy=6V@Y?!P0sZNq9zHH!4-lM2l zoyPNR5;4mK;BH_YSYX&nj)^pGqROBi*3p4Aq)X?nq0{XmyGAPKHi^)#B)wy3b2LHL z!)tTx#x}xQ)|YM4EP1h=cJ79-$U#DX6KAjF5M0z+md8=>=BL6b7Y99tM-;*xht3iF z_bV1z5T&LcPlG%g;M{$u?5%6m)2=G&!Ky{FPOOrQz~hL2id=vF>@np&;L!mlBcJ7s zA#6^BgIYp8P>z9Vje#Z+aPgPa1kchai|Wnj7)PE`8%EH%Z}HsQd^FxcBZTvOR6?>Y z#fs7;hpt#@+S+u*o{la}aS_B{9BwtbrAROZRX)*kqTXrDF`0CVMo8?FPoc(%kLhIG z1XG5W+S{&jxkshBcj`8}KUT@1i&zi?Tv-#X{6s@@iX!5x5&QB!ha-I$rqD;LLRy1rDn)h68Xym-Ift zK?XPMo{w%LZ!tcEMlN8L!?s~kl-gF_RPMw(giiP*=K@p0#D17OVQLgA_gL- ziM0IHatp^;6&5{BeiFJ(mfeEXD*2Lb^m%i;_VOaa zq|s~*u3B}e$=#x~D&Z9FT&IY(eX8!#1GH&BtoIa#>~{c1tOh?MJYqVPYawlVMsopf zf3I!H#&=}+jkw03ZAiq?^RRz}!hLWd&3S8XqtRRYi+YKr59WmRd)h>O*XcB9K+Wd% zW}TaCG+F~otCcDeYR|9Y@@n10d}29uLpAg~rsXEz>J&@S`Lo8%em0351JT=d(pI>e zf7*sXG-Bw1CHzr?jqR&N8Qg!XLoi@qec`n-#URL!jaIA81Didf4@6p^R^&Qg~cEdQg_nQ zp*ceE;_YR-jX(W!y$go|ue6nzla%F#cTeMjZ%5(pe+A^!%bWf3ffZeKw=CNxA9*a% zis)aOj{m?La3H=1zWxL-3BDUBn5S-bj5tx-TJRx(mZ40u>swep2C0TzXZE!gMBSXn zDQu2_CT*wPDBO?XwM^@S+ULjn)q@D!E(1p(E|aZmc)ig>r{aOr-Z zY+6&DE*}2+ZMj@Zb|DAF*<=V+y^Jk>T^Kq z(RxfMA8BQ!N#&eOfv&130^m0g@1}mMqZQmmOIfZfl?$uHM+p%4F?4iAqUAmgyb2X8 za%BF^05yT$#TM~JC|m8l+e+74-@rf7Ma$U7Up|#2v&`H+oF6Jvy#tP}<4WZq>O;q4Qa2t&4!i#Rp_+^(G3Q8U!^u%+c)e*tY$G3@jf8h}Uiy z{wt)9jjJ9Ow$rY%UpAF&gEwf9U1ArXS9WD*Uh@7rp|@eJ5%Z4t56Uz$MQx^}2LKMe z{Yw6YwLGZj@6|$X!W;l3^W? z9W&pYb90`hhky~zCgo)43J|D@y2cTSfU}LiU|F^HLm5zTlKEMgR5xq5S=&0t5grG{ zqSA4rt4ZHdUcLvF$Yd3wFuz0J=;&#VK7GY4Z%5QE5EO@{9ifaBQ5z)pNZE_8+LN(TNu6V9No8law#brW-EW=i3q->|;qF!AZ?R4r;tMU!l)>xGVIx$KrqJ0wUMrP7@BVlOu&cOz09jpS$h14hi zHIp`Jelp0F=K7Bt*SvUF{`8TSgd20Ld3Lr{wc2yIvgvyZnCmAeO}s^d^%j@~+%qI^ zFXRGxH+5H-J-YTWT+gCL0FsuK_earQV;cHiWxPK z+l^eXXj@B8i_+S7m>>MWtpu00Ga~@tL@sI>_&d_ah~!z-($dcB&ni`Z z0A+D~@Nbk=XLCjtBhw zqF$9!ILy233oJe?8U>8!QB{4DI${s<^6Heu%MHrK-z=|ulZ4wu9m937WJ*HV=zWRI zBKg!!52_?E@>-5P;m&k&S)n+DRGvME+Z#-Dk0U?Oqdf{C2t>X^u~Vg ztNRe-pfkg*O3W0pN=ngOKp9vcqpPS-0SatAj992C?rCoo>pqgOJrQkdh$^|5CXe(( z5>D-;oE#PA<+iB>Q?458#ny8(_YcTUvkdy>fD1p!dxDumCdIByDRDt`;~YDT^K$?1 zQ}MaeS=}ltaOVAwXMUU0C$O=uaBT6gmRHPez}0WS46(2%?57+Oo&!t0OYZS)F4M&7ufU}}rdinpoig|b@^)p3)moi;BS-z{fe1m? z=Cvc$LHEJ;hAWj`T#(s52r_lxfoGWS?MC*e%Zf3Aikizd7G`A0Q{~Sn5ogR^qoF(- zO}t!C5&2|nGoS6-6IXawXWkkYr-i~vl)QS!mfgB;hxje$l6_E?`Cnx)RpXPypQebZ zRXQNVggE~eEiutBykU9g?#SK0Z3X;RnVTMVOEV~fz|(K*4S5M8 zT{pj@Z}zMY8)lFey`dn6>;l*eg8{Q~$zH*&35lp%tlF@n+egQyOLaR>!B9CYAZf+t zV96*G1V|yY#oq{5kmqPK(8HSaJ$aB#D-$$JWm%aC31?N+BS_tzLan<&W+?1)>qiy*)`VEDNTIVAo3odOOdYeo&;d!jfGJG&VSWJzc!t zk1umIi}fGDT=+OEL}?64|ELTD065(ov>ND@jHOFVVry?|6~swZnItTfviC#(_GVDG z^eC?r2eOM`8ZC{*2fN;U+_+fuxfabAkt2=2ls-|HBl)oJ+C6|WyAkDV(lEszgu~`@ zed9{Fr<@LTEZUizO%m58;O=1343qY&@m=>C&xoS*E(1X)t-QJh!-% z)80lX*N~o6r!IdX=h`TT8>A^*AO0X5-Lq7m=>}^9Fq3&N)vm0`PilDKsMJ)8Q;HsH z`p%7(%f_2c%qZo8+l_!(5fS~QDtl44Zts$dUaIc|SOY1tcE1lD8PT-ttKn?H$3bDP z{&JZryr1CtS5m4S1m78K8}gFTCVj&OyL;g%X>~LA; z5}!bV3ki(^xt4VGSB9<*;eDac!BJZr3IT@*3L>+3tY$A_r<_*f(hB{7nSS<%erY() z)!`WXUhU9OTer6|$u7_^$utiCJmTi|tmwR1SiQg0OMH=+V46s3hPb2q7dUPlw+g>^ zs4(`ZZ0b&k!kCDkrEAKX)${C`I=MUpcBjCsvkKkl*J53sppW&LCvG*Uh+*n*?A3C| zUyuX_$1##xfdc3q>Y5a{NCU(cJJg(~X;RF9@Q&U+#zg$dEu7YElz(@^%G}(C3F^L~ zB4A)Ku36JRcc=aCt`T>*P2W5YN3e*WskG;;?38*RY9TL z5A;;7Tfsf*d4fInqQa+m;x#PDeS5{b^6v?MJH}BBu}sa|c<#=x^ZZFuiFkS5`b#2r zT>GhD8b&4X%OhkvRzhbALw^&dhkb|@B>fW6B#Ftn#>nD^Bx167i z8a!t#5|fGa?fvZ~T@MbDFbg9#sp7mLq>mI?NM=+5lRK7xp1KF)=26FYYN}((F5tz@ zyJ+v%K+JPKyUOg-CE_2fakxcSKgaFKNm~x6#*f(sWqzerw#87(#MR!14BF_3(27pb zlawoC^&2+-TDTYMZjvBv$^a@@6cG3(h!pns9>i97@UwG6xX-8q*F2Fhju?007{ zbe_v=Yt{YkQ#w2~!8`tY!h6jl+cU6i9u51V+Ur~8)KhU0+mSR12Q0ntxtqKDirtdD z^i_PsOx5n-mL_KbZK=%?9v6nLA%CDTx>pzLCOH&ThZ7@E!fBtbi&yn8oIv<9G)GHv zU-Hvig4T*%G)iTpdH#GMX*}IPAM~y_vJOIEJzI3%l+>4T9`mQS_m}ot7A77y6~4E( z?IGyH|lS{B?dWH|uk%nYyl-Jk7gqQ-~V>)YOUKdj7) zukhQInGExv`;_Uzp~5zeBNp9pFDs#V!rUUtsXtE$U4HfCYIVGH=pr7PaMX*De$u90 zTN=(RI5z28MJZ=N%2anQa-#BKfQiZ1XUGwM%KC0m-rAE2{2+|nr_R~i&HhhY+jfFM zu2m7!f|u$h(t0R{|X;>fZ($(yR$Lhy!{*LN!8IT&JYNds5vD#x-?YaG=C1A<8=J${TNsj*$kv4T_cgL)0vt=o+~6w zHY|2@_z-YZ$6tXWaxv6OXVk|cmsc>)cAJ+f;GP>z9%C%INh{XCRw08@utyr_ab9lG zir*~t&#AK<;nU5657BHkqPK=@p(-;mx)x=|hQGI1?>3S2oF4)|u1d6XJ0aUhGG!75XM;X{^RAL*$hvh6Hr~+wyZrF|N2bF-d40X}Gf z$b+a{GGT4U*9T#(%4e{i>b@v&&9#P7RfHWx^RMa*Nun`xQ5tE{{0jwkBCM(bskYz# zq^T6SMdrdnkP!K<5VV@19$2Z6cex4!442~3&_VuO(a<%$IdeIO2|puKVZPg?5A}rV zss0fZtn2dHTx4XK0d~|{jy!$e=e4s|FvqG-<5ESsTyd0^h+h zh*_bA`_*e?=+;!oqdsbC(T2mpsEhlP4(vUP>mb-no|N~vmmhFLsuXpbDUGUhykIZ% zV{Rc0t|a^CO_j;j&|^%8vBUdZh>*lStovjn?!j>c2uW28EM8+)*(*dAF>vM!mQpxd zf)CW=l#<0RExPqurDfQJG?t<7bP0EhDPWpxyZ0tt##SOU<6rx*lM7btoFT zz96ma3}gCJ0|5EPe4JwE0iFkt;-nu`LYy`F=bi$ssu5s`9Mj6yZf#(Rx3aqXPVZWQ zIh8P!?x~Lbr#4jKXe+;4?LZy3&5H~g?!=cVjB1V?#5MAG?o8AHFL%wl? zsz(A#Z(h_a7(CNqL8)3522K||N;e`{DKVB6L3|sXM+xLVx{fRBn=R2IfSbv0$QsV@ z;_^%O*cQ#H_dtBf{o&gBOIAhMP-69@!REgf!egqWU35rGVQ(^)BHh?ZAu$cvxFaVC?R&FR4No_`qJ}=PH5B z37I9W5q23@R0mE39`j~CVB~-BSVZ!t{cVCSNi!F7IcKHqfNCRT&ZdgLqBg=cWPA9< z4+*?zPq(Nh(38w*IUa>kso*VRIuTBa^NxnhEKedc{1Qc!-!}+sai;!5%$63mR7}>( z3OVEp1BiM6a27iU!wP@IOaP??C+RM22cy(I%Asqm_cpJ4u>o}aId~Y?Z#5`N=#!Qr zORRJLd{p2NsM_aVykXQ`C?{a5&=I0cq+jH{`KOJq78DH0#Dma4fpoZ9z>CF{2B$yJJqGDQJD;QVr(SfKw*_&>5Up;khR~;>xW@WPp=|~di`lYN~zv2KW z>s~h{edsz3!%=q+CZSG*JxH}vaa~$Ioi;A(9xzL=Qu?n~<4j!8uq&saM=9CV5ne{~ zU@LeOC|imi`*|L%*4-(7RJ-^2_bF(mF67*Lt!S8(je#{%woFArIdRJXSg;{Je| zry}U0i6@f9#~RdZC3!h;$H+BaM&?f29ZOryLH-mNY|^+i*}GXuoTWK+inQ#3>s%40MlA+d)BY>F`@e zwZ;f}rx^Ehd9ZgO{O(SQHGVW`Cn@MuJ&+4-qw|@6LRFe%(Ig8c$t~)C2%iRjhOQcR z3awy-@yUHj?MM?mkI2g`*$J)=B-KV(t}lo-19lJ&nXUaW+OymwOY7IbTL#P&XhZI0 z$5aVndk<_-L=-Zpn#J~GrEO8yT?si8AC?S!F1!J2!Q<>B`go_R0drWwP*`6eQEYyB&cy48NH-H~ zHjUK-W)P>b(4jYE;{>s7wg}5W9<9AHj%~k1-5C-+!`Grr)={G{*>-S%z1Btz9ZcXGI7YYbzBSM#?ttQjO-)F&X7tK;Rq4>3+u+LeP@_O9w>yF z6}?fUS=#$R;#Ccv^T+hb6f+uqvNLR%X>1lP`HL0N(C+=HAjr%k;4>RY@>$mVd`o;C z=v5YU6XDEUCRQ+Bio%Ud#D;v*7-$lo6&;^e;L`6CD|_GzbCrEx2KL`=+rBsEmj_6~ zM_m0}u^eW02)YlSS{g5Y3jlfRFMRY3mjC@T1vZ`$-fhbj0{hEla|}OoyR*MWnbYc> z5icTlYs>DLP=A+wuVR}uh8IkU^Bh~}o=6qIWd4f+?XR3}v~eppO=anHkF+qduG z?&f6gRxmryCFKHT`(k6j$@<7qC?FyN*=la}=vC6$VX$L#x{4~2sjw4DE){L6V2gUL zy(jd&n;Dt`sczZ;!Vz(ZO`282&RZkH{Pk9 zV7@3a4(_pQslRXG(2#l#UXlU>fPmvKS*1qLkanSJ20pnUsR4|bWEpJVs*BX)xd{Jm zfIT-HrL-?}=Zw*@w=v<{pY1A})IOEBAJe**D9UI4@jWcLI(a5mWA5Ju-8Xo}#^lU$ zOwC)WyKLE%a32EIL9c)-#dh1Q>gRiAIZNP+P=I~5fHvG9W!4B8S-1IELTW7K4Nz-Q z6)svn{*^xx=;4MvAYr!G><_zO^Jg=|}H`ZOb)312}ZLCDrp7!3~ zB7LMCNAvM?-@dc^BZ9g*F|w#)PjqFjLuaQfMxM;?3bf=yWQ{YpyreTcrCu3 zp1Zl)ujNMJ5fu-XjxlqwTW>}!V}O>`LQ0#Fuq}B&6XN;^3`Z9>eA(V4XvYM?6dhA1 z6gH;f$S$`#6IpjO3MtBl#6h^~O?`g46NLE)1gL%t`d0d_^2lZFN~cE1$@n5l|`(ze|>t zkp>de#&D=pua=XsabV_Ba#I^KHTu(6D6%1R*iyU z(2^^sJO?qCZs4vGfwch@l)irem}2!0$L8CW(=wa^!*riN)J%H^4$8rgbIPhub5%9& z1lSX2ter@alZ?JgnJ<(6j1vuQS~w=w89a>@KACAT)#&v@YhIh2nCMSRqI=8tc)dHC zBKpt$m6@m+A7Y)^F*_We-L$E0ji}Q*qRRW?6(qc^h;2xUB5L=&5futJepz6U`?`(a zSK#sLFR+eDY@at_$vZsq>V|iqiUB~FAx`1mp^nM`DWs>0l%69g%4M1g&%hrpfVNYN ztSmjRO%)}dJD;fa7Lzd9JO`he`oD^Nl|^2_lkz_l5!DjBvaTsbM1W_du+-{xwWtJ7 zt7@er#z)qG0%f$V1QuG^rj)I&IQKW!n3gRx8h4JAikD(@6ph$P1}sbw2aourA`R)5 z+L}t>pRqMMZGHuE=#VILRn6Ha&*2G}cXP=Tkm?;>CpZr=YTDu?-*AG_@(4>eJZ%5I z8y)BJ#u%n{4u?dOl~t>R?l!NgBa_ zDBhZEu7rT`U{Eb_G?59tO_7gaKA5;E?H-#RP<@uRsFG3AqssB)Qnx>5^-GXm;Y`p$ zQ)`*O2-1!J5`vjeIKUkOJo`E-Id$91#vUN|O$#DvhcYyIhQ2r65fEt21eRjH zwv}tya%8QmZ<4ZDIvlVUptZGEsV{`xYd~GmKCBEbWv1;mihIV*$coWxtDn}MlN5wV z@r6kvL%@}ZN|If*nrrU3U+eF8IdTD zj(6|A*x-5;D@@V3H_ERZIs2pKs2d_Jl;y6EruaOx>~~2_q?2-q)7qwaMTl!>%X1&OG-Y4Vp>(cDsNU6Q?d=r* zQs+_y3-{PH88Qt249Nb?5=HC8>3;FA+RXlHx%J^g=T!w$a?J?CQtK8pPu+Dqqb2n< zxvV`0BNolvgObvsRWOzV2k}4kl=lUQg-cO<3sr26)p@NJCtsh-#Nsf0H*Ci=c_3iY zp?Uj@{bY)Q$Ez0v-^4BcVpZvEd;z!C{cUz8_0mo2ct&)A0CVVoyzXZ5QJA+pT8zyy z79>aQ8YnM{UtdX6uJE5;eJCErk6vRrDuPXbVa~Ks0TU_jLXz-}oTdX)!shEw2E>;A zfjfnoh{G0Qsq#5XasM)O@Z78YR}+tWZsLn4b@gAUyKi$*b1lM9D5nc{1i zxH{Mz*=k6?ex%K0YoC(s*a!Z`M{bPk3}3aGAe~#N^2!h!_bJaQ+w7cn`w2Dbi*$41 zo~cFx1fLDe{kj{S4P>8bwYT;wKf=CKJz%O|rrM#y+dIqeZ5gh+K}DTDu(GNq6E8^ak84CF%xN zhg?2;QpGq?Sg=8J7ob5cBLh2vbo^P7X7;4PK%UO2qUl$>VR0}rQprDSiQ#I9Jx2ls z#?5QP0x&v(HBMHOq44PJQ3w+o#~kvhy?009O*Ezftu>N6oG29RPFHK1)h9R9*_!}2 z9>g}q;h?KT>^S;t^_Q?t8QrNdFoU#dy>N5e#A@;x9kQ?Cnc>$w>mI0G>g3HP;Guh1 zn`ENpvL5@fJAUu;uR0m10&X>2=b?t*PZGa+*jJP1pMUKwa(&b%OL+4@D!W*6P287q zATWJKjHwbTwikK+A6oONCwn|Jk8u90U|TA$S>`-PJ>XFN;dD2|lu-j0s7I-$(1DfW4Z8m%B>J)%b%@!@@7 zY0+R;Sf5$&>RGVtu}GA)(g8FRR8;Kx3A+PYaDAqOMiIO(ZrS3uHI_WT5lWLk9_l6L z6T5db4#LMas0t~W(ZRtFZk?h~t%zDTP18~lmuC`}m|g_ZOJCOcWPP7;bOXx+)}%^= z$Dq#MMCqUw2ZC9RTB7v>66!7wwr=sHc4{xkzj$!${0N)mW&4E%B?CyF(N*C#5`7wF z^4Yc7{!3l9kvA%YJK>}AMru{~9-W^}9Dz@HHUF3{S5IurGiEHS1))s_aTMeV(;lrV zE4t!G+2{_gk^STT08mQ<1QY-O00;p4a06Xhii)1eegFVj#sL5e0001AUukY>bYEXC zaCzLldvn`HlP~=LR_%Ad(v=mMkkG|;F4{*qs|zjbu`WKMY$tZP7?1=hL?FP$MY5F2 ze)hM2-7~=8M$t~ZXX|w(wgk)!W_o&h`rhMULqGdj&)P9x1<}M!rC;Z*@7+B;vVOLP{?r@0G5w_Hk$-0DC6m}+sxG!Xvc;b&^zmO>?K~B^sLj1qyBN6Etg){v(Bi0?7KnV%EGDj=52rIrP)%Z^d^iwH?Rib z+z&lRjhDlNpyAD<_#W`M82|1~QY`(?fBlz#{TF|+jN;T9FYk+=7hZCm{}v_rkH05T znEyhnDH_FYIE@zhuW3xn9=nqpd|?(x3ykk9<7k;!s)+*fNtnK-$6lP?_pBE|Q>^%3|K*9*|NH)6xK~k_q%JKa{M!fr*MGTscQJZ> zLMIn%bC$mKt+nH9$vR#KZu)TT1_Z*sMnK;S>6Dz)@unSc6R&?51#~tpj}P{{j`hxq zr(S5$Zp%T7qtquLIvDNT%Lq3DLfBytrGmOsH?aos!^{g3VDzpvI61fI2YKrTfrr-# zff|S4&I=~j9>yBtiG|%u2%TPK%b6E%4*bLmH;O$Bv$rd1DZ*m`>8r^QOrz#-THnpT$k>6vvE`w4Bezp&o>UNG|r zLe!DY>{g!+;1<89B^?dUhlA1UOWN)$gLz7Xj~E5sEfGdq=JSGC5msUpgU1ucU zt(Mn2{QAfIb#m=a>3$q7qA8fOjr})Q7aN)xI6U1S4oAb2_X8aCKQ@LNJT{%DjWha@ z4h8*m%0K-?KmCFqpE^5#s;ffXmi<@WJ@GDpKX64cGlaj%(j#b6lg+soxY+tTzAFd{ zvi{Ml!LP%DkaWg$xr}JWOPuV^IQldK4?%RF7_~${0zwP7*Q@y#^o~BQZ}ma>IGR-O~{GE8Q4fOsnU2phk+p9%(gIvtI%Uv0mn~rcq-JlpLN&I;@TB!T7Jl|-_{psJ)BqH*oe-RiEb}#dB#$cO^R>{(x5YlxT zk+8=SK$P&g)^MxABgX<`{{#pP+oxZIQJ953pjg@P8F4klPK?G;nnny_{e%}I+nrAfcC)`^HZ%$6H=>C@@Iy7k1t3cfl;C}+5CVv=mjB$2J>Nq*P7`}cvxEwSbQlcT% zb4oo9PcPma4fPU5pfrvy2-EjXd(Urhg*Ow*r{;i-v{H>~9^+l>dyqck95P)rhbj;f zuYNF)9@J73??3g9(Z!yCXFQ0r$@NU2&YX9ipb3jcI6iF$dmZ?yIcnMxGMb_!PcJ0=XzE&{=H|> z;}P_1#&*4fS}bMeJtR(7x`C@z96Z4nVxX)fEN#D&LsWgmx%IufQQ+Qtu@kZ4C~@3L z>fd^F4bTH=oW}RN1s>AXLNB3QiI$1#<>=|lYHa=MUOs>6?=kvWmvkZe3yFMBT1Ns44#ut3^E+dAPaFs6FI3iv*bns1MmBqFu;4tvirXNx|ro=P*v~{0IOfT3c zV`B%C=$M-KhcxcO-K8B2lF>h25O?$Q=pQ1b{VXCrA1T@f9I=4pGgg#Z=hIG5F|6)BfQhFbO6~A9y&yq{iWTt2$wqhol+ZF-X z<2KR>R}6LPe3Oj$KSrnW2bZxo^FNh7`NAtWwZ=dAK(8`!Cd~zImS2Y1g7`IWN{4!C z;)?aNwOu-hbgzXn-L0J|&lXEiXl8w9ZL2S+mUwAk=nR({4{XyZ)`+Ou0#fwUnYyX# zEJ^a7)0Ud}Jq1rlM}Oo7fhJmd3|g@j;gAJ>lG^RGrfaOGOl0sUa?}?HI`#{f_NrSn zP?W^J^kz`AO@x^Ato@X>W=uS=`rRZo-O2}u`nzFhg)ZGsK+r*$(qJH~Ag+l8Rr(Ea z(KlKAKzN_}bE2{H%nR^SLT$>!6}J=v$O{v&9kNswg{okpjn}ZjYwO?ktc{C zHdX?rPJ2Cu5q{XyBh+DKf?~IA>VNwME22n$sB{CC{mc zgtKl6Z~tBMl+vSvQf8u zy+Lzch4K^Y!8ve<`Vzuvf_Ozc-yckUQ7IoYtm+{brMdLxNyDB7jC&Jn`&} z!;AA5C&wE-3$xklXuH)Y1_7PJ0A@{MkGRjht2is&PD|dE5wAjn0QxbQIPQrCnh?s7 zHH=^`A_igNC5fFk@8RLQ(ZwtCe3^s&ee-YFo8KcpH0RRc&a%G5fk~@lE4>MH zn&ivJXjpj(H2K=~=lld)ZsX_G)a%Zt;i4sxQMARpXf;HrB4|eTI$1jF|Jdn*`NcxbppSqk0EpT!k>ROkp#2A zY;-rHzqwzJ&V&$Ey+^moPSg(${v=H^me2B{Dn~(M@)e2rkK%G8KC4^m9SkS_Jd7ab zrawV7Q?g+9Pf~9|e0nCf1$SYc^2Ik-%rk}(hP+Y3IaNj(>|_CFrkwhsPL5TZZtT5b2d8MKYR&m-G`5LdhcU8 z1l3^HvntF;eGF$3cy3Pr8{WI{TbSDR#%OeYaXuK0h>~~u3YONL3kfu|`p~d+^c4wg z!CeY;sAwLIeOmFc&N%al0Sk9`JH+9NpeKKK3I%AQCeip=HZ@P}rmMiAO{RakYfc57 z8|ML~dTkEssMQDjN}N}26@Q;WE@NY%VebEG%+;JV>m#|jb6bNgz?s06K*N{bDfWQH z4Ba$wXb9U-8xRFSQ$MlJqtG)pr*(kPyW;`&j8RkvFd?Hbnz9-LWW0DgPNp+)lW@>r zl*XRNKgo7vObe6E zS}djZAj#RA?g2E0)??_U4`L_I@fE%!V_=nrq;x#iJkaO$*q7G~wsi>vHF0I%7C8@uy_b!BW=eibDPFZFNwS5Ug-YR%txuD@AC zeD8cXY>2vT>?I^ZEui*b2bX@;yTuAKUJjTJqTDiABAr9!91~i<6>ccM^^`VrN-Xg; z&zl`zLU@sgYfW7rY8)jfIWSdhxcZ^MKv8h$KUI&8527achGqTg%kD?>h^}*{6_=uQ z2E|z{T_X+e6*;8`-LFImb6-09&D$+n&T!$z@WP8AKlkYMHa$F5_S&yT7Z)%kX17}< z6|Z>`cvf%T>WQ)E#Va>-18d8&*-S7B;9JNT?iXyrGw0LhbLW#4yVHN`n)*MYSJWKZ z+%cTy7=dHYPuUsBvpR3yp1I2os}cJ@=br)!7Yqquty7i&^$upYqRlbMN&RI(is^G( zohlj>?L_Z95~L(L^973P)ryh9(Mhfr(JkS;;~0u8j2VS{8^gh=p+qS&sk(1=>m=AR zI4$6NcA2Ug8@9)eceFje8z%Pm-#fW0Yfi3{zzwH_BJtc0_qLoZ(;W9X%JWrfr`782 z8u~Ts*F|jkTs72_9J>hft_cML_z8`fLW8?i{;i675)r)g{A(|qMKpt+5-&mYp;`$I zsl0|ptTU}Y{;>6tb*s>^b@WN^tVGl|6z zAO#huj+Fb&?aI<=mx*4Vq8lL_JBJA=)Eyxm8U#wL40^15SC;PNhQVq&Kjc?wEB&F_ z2a88eed!yOQ%}tOi_zi5`PJZ;tG$i=)6>z5{lmdv_5R_j5y?L!JF$YRsm=M| z-RRBR)BRrum!gVjYIJb%%joFj?cVlI)7!KC%VYWq8kEiaf7K|LZ^&!F`Z03xq=e)_ zl2e3DOOPFBL$a?V3O^9AK=uZFXEu7)2AzS8Zo_%y8-A%7q0uB8dr)rM zaGrv)Pp@=O|4YDQB)iBP?0o)Bg{qRkq^8S^YYpH!XoJK}pq(7&Jps zbeDc(Q}F-I+$r0decdgt4q5foo|2Ts%*9+@#M=4YdY1v$f*w4g;g1q9$ZAuZT+=8- z$Vm8~+%T{0kVr;zz{n)wb2$i|JV|#9F}$+7vn!bcvS-n=d>!g!8OBPVD8UuJx_OKi%g)J#^{EZ!LS<0a1NQ zTxLxtAcOpDZF~LioAjdQrY=9xDBJ-Ljh`R%&*cGbtB8<$?$)MpOH&{ww{Zs6w|j8G zvc3c9ag=|j-M{Tww^-?x^Sq(g{TKCm_}pI6c$6-dtZ@;ROWhB`ZZ)-a*lP>hR=~Eh zEvr~N{bxNE4HPR;CryE z)j?0J!EEL+cgiQe|C;#v1wumTwqt)fVpei5I30qa!7-bO*Kf&vrEobcT4`59vtiBs zuzn?0yr@lXJQ~q~z4k{S97^wPH_f5fI5RjKcDtqFraauVX}H=J(hWcOJh zmE)`l0iZW^EuRtvj(p;#!)=3$llhuiDdo^y@_F$-nRrOE%JD;!n3Y3{bNOeDSZ*{W zi3nEcowYt!aVh?y?-D+z!ZlfZC+Yn&@VpH#_3q|~N%MJqN@AzROg)C4IgLd>HNP88 zz*GVgH;zv)4)#wsD(&AvR}gz! zy5fmNOz6z@0usADcJJhPm47SL2VRgaqr~SyIp}U&cp!uEb8*6mRPSdAy$=0U9FxtH zpvNM<&s{8OK#qlTtc%$Uw#*xN30unHkq*rbPm2SX`>$iydyt!oRx}R0g{PGa9A4rE zBf6;6_US9jnMBKbQzx!p6wy)D5u8s|Hf4uh#__kQPAv7g|AIabkN0U;JY`Fw9bU7; z#%k)7qmE&+n_*JHeMP1>U}a9cB)8#6!91JbfNnK7(3MGC>@A{O&rVBs{xc_!>+e|) zu%V{e%%5v((`0+qnN%IOi$gg$Jb{%ZKa@0p!%+dH>%J0Funyhlk;>-Ms&i)*3Qg*q zb0{M7Ld0(KBn*9TN|5h5og7>=iJdjzv9k&uJCDL+XH9tQ{O$1A z`Am2`v7S4%R1kdsA|g-BfozU}J9SvM@31lFe~}HO)H)Ad31oqGtFgo60F8K;?q8pS zgf=Fkj3*E!1T~Mg*QcLosixo7=U6KK3bNF;yM{8EHzqtOqshdv4k8#g+_9(z!a}I% zT77jVLMxu+aW$}wbAUM12Y5rMbQ3KWX`SCH$3mLqxcsKdOltSDVy53a_)`4~W(ce~ zezU=IMSsJjQX8k$+@j~FJ=t&&DxPfDE^#!%^tY|D&}&{O(C=CY%)fj`42DG0s0Lgb#^!ixTJI` zVuQ;qb$oEWv3^r-&j)!#0`7GLQEy}a{P=XRQEp=rER|YBANr?TCEe3%YK^hV#JU8v zN+`357mw&oK8tLwHjS~nX}DsyG>V+7cx$z7?*=EwFGVi6JlijA;9clQv@s#)vgV1j z8f4VB7H-7tMH5g2m$zU$YxRvN1eo<3vwTKo{1~v7-{i*sVML1d0Dv+ttn5V&mU;ki!xSd zC7#6B6n}p;Ro?FnllUK1;uR#d6dd)X+x5j;6+}?yH0hi2P+3FIR8w1(f~zX&0*sAL zKG7ie^gk5ec3Gi>?{|CFx({3IM|o<2nwjU=i-^+3>^+=VXUOjpuxSXIX~Q_ewgl6{ z1W7z2QMYDva0}xK$)o<5Ef}z@l=7`eu9m5pOh%<_sSenZ!KG@T(8h@*H%=tEaUxmA zIMHsHDD6+eh6y}S|FS`%LdW%qrN-Z?1554mA0O0@%_{3ebTG{uCuT`Jt}^o>V}{P%g%fbcmd1s(KgQ)%gu1(Nw#Xai9;B>B+O_f@`!Bp; zYI*UT&Yg7^1vgMz75Tu}9YssLp*43yI6Mqf>hHjllujiKy=)JJ?rJ>u=7=FNz;BI3T{@zilNjdzPeZ>h4pAF3o)aP0NH8E9B;03H|SUr$2& zgk&tSg9IWYz*xd_BDKC!(n19c{euQ~s7~abg`l38#P(?!RFZ)Q7ZJX@$*?Rw!O;7@ z+cn^KQq~{?^+{Hrsc<9j@ z^8#W3W*tCh=!K?OUNf$85utvqTbP0H9)ScYY8M+Z?+YfQWT+ zjyDe(CE)Di)OQqHwcR7C9NPKgp7qoBJ^e->rOi!id#kjGOlkVZ-W_k*?>W5msnD*_ zbIxQ6PgF&Wkkak4&rWA*Mtsv@HlD-2?ju)6nJe!|>8L##=jxk#)(2uDJ`&=oSr)F7 zJYaLINP;vD=)2X>7k~Kd;eF#<9IL>Gl|16p<%PrtLc0P|gojBrAnq32HQqQX&lOws zs`hxA)Q4ODqxIdM%$^nK9|HfQfP`jK?txkA4%_AF(Fc)$1DRrMHUDlsSVj-fzzsgJ zwh8UkZuNiW&_ej)(2fh**Sn}a;Ti35mLBUnByxIgDW0@%tZ_5{c%fYi!QSE~a4z{` zD3ciE@yd6fPFbpGo%$?iieRH2gGL={iP6(g8JR#)sNO9}-fA!p4#n?%z6;saZjvqN zTm38I8IVoY##!RbpI}j7xiUCY;`{?;GM5X^28S+lHVpl^FaajRL2~I&Zs0GW4qX2W zc9npZ9p8P5wbLi(9`Tgo&v8jj>XJavok%T*MzR2=G=};qpx$yBXY< z_9bM5sHg0h>mKjaxBkrYqz;r89$44VNL|5s{#7g%pEhO;su^VvgcK-bZ-yAJR zUtrv`ZfmDHXE03VSP%cfs0@=nzBVItuy1L}WdW6&C_ipsDgRFJmpgX1uDkFp}*-tHy1NGMIaIl?kXPKx)kTbO28S7XmI}Z6n&2? zdDTVy!i~ppHAigq?G8=p)&BYZY5#a|bvZaczrszR6N*@x$mbj`{#??k6dhU;Q-D8g z6`au}3f9MPGf7CsP;?dNSd$DfRDTQ;}PR@boCv;Pg|=9GDQ)mxB&Jmj#lh-pXG|o@+mP z>RT{g{eIuN+||cI0yb5sT0&wW!s6BO<9OD@Vi)!QA=N{3P{)$Mooe<+mWF=()1J*< zho!%|?V%IK=#o|Ev%Wed@KjtOkx?{vn-dR6egwZ^R*NKs>y?p&w4xPcJC)d8_ntc2 z&$gfcgzF(r)ic%y@$XR>+-uE?*j(T#Ux`ootDz$r0R%@@g^p}K#gFZmQ_<$?Xd64T>iKF^L{aCV)JS4l#s__TbK|hd0 zf)hug%0to>0p&qUw8@fvxA_^`^;IVpJ&U80I|q=sata1sGU(HToZyH3eL4t!P|yT7 zn2fYBJXr>QD!I$kzk&#z5sCniVS$fMPZGYD) zbcnW+X}i{EM&c-M;*;|{96TwCA?%-?4vJz3rZypQ=c0CacTp$_o!kR%aC-Q1FyuG& zN(nG75}_gHKxxpr=AA6%31pnsItu(c-+CpT3m2fHNK9p_)>K;}EM$=dOqQ zzp5?mDKlcFWP!M>c_Wa70)JsasO6231kMrHdk~ipju36q4^=}F^cPxG%Njdaj}-;? z6;+loP{`2~^j!I@I1gn}mV_P8$Ns{Hq|AwlG>@UVKcsYAx;P0r{J@DjMNO%h<~e2#5RPn&?^kc;a`J_7j5rKpTPuWBv#*W`?Xpi=Rb2I>(IezOA?LknNeqhzI zI}&v~>0f$t*ygbNbQ;2`8&7HbI7IA-uR5JON`~QO{@F=V5AO?A4D4-$Y)%k$ z{kask0IAnyWvDCaQCxGbRgNn(sHkD2Wz8{5mgsdrbdQs?vWk`uGJuG|#U@NY(&-TS zI&FwtQ`uA&8EqfrI^;gVB&MFV^W2Li+li>dy$q4suuEg8yy(Nqjd_Qz{(QHjz1E4c z^v5sJ2u7VPmFHGTe>GaA+ig46J_{OR;SyVf%F#j#hS4ZRkuYr)WAj^Ww88M|^aNS7 zlr~=Fu?=JxNSjG*fo@?kmWxB{RG7<>Q^haj2$egRb*b!v(1T@r+_T)emyas1@VJ(v z$gMM!E?hok*Lrcfe`VQlhf8_Oh*KM$U0htfv?4KhTwM?^hui3#AKrLD_kT1G0p~(B z17VD65=A~JZnS4@U@aRB!j-ZuqqE1Jj&|3G<;c6sx*r`ts#n;iw*XTwg4AbZYL&52 z4MPto!dJ7$Y_)1ew<-OtA$j$zJpWyHoq3ekq&+>Z-FW6He@4r|0V4A8jVfvNv-RTO zm;T`Bc+ekw(iP#nxl{lmGU&8IbA>zd=eq;fdSHs;P-k<}p{hSqsj)YuD`uookUR0; z$b0n#JJL3hzh!lgIW8ADo!4^dH7EqGL|^BVSB7!Zwb(wOTYr*v&5ZsWFwmZ|gP3V*+3J;~A$_-iyJe#I28al_Z#pjl_~zdpAR_Z>6nE9xM?9SXla;kfuO zhCwx@kTeWS4Y%u=hxnk3xY|Qg5)%08&HNzvD+-{`%~#!|FsgaT3vjw?XDRysM}&ds z&-ZgMtPU_JQp=W09ku5x()_{&H_vle6a;}dS$00KrBbS!joEy^&x9a=>WXy+2FI|t z(|*%jNON=-#lch`Kox5Efg1g%1*)+&&5*t=bYt>K*LCCnXvQlY!nX*A{9uV86V z%TA>oB1v$;EY69Tki3|4?|!w+fYWRl_$cD5k`x$;dEyC)JhWA25g7a~DGum$2}{%) zN2$y4nvYOZ8=e0^4PGChxrIg`l2m{gz*CJt0WpfU8ljx?Ry{Nm62rqO9kElb5w39U z2UDcg#!J0ie(10(^>oH z;OhOArESDIxcewmF6eMBdw=KoD5MI-!mg163W^&XTfCoJ$r9E8jDXBJx^ff}YO|h$ zof9`=6d(ZDJ2)1Qgs1cz%Lw3eno@679W6|UlT~gQ zHB4)W^(rS0E`^O(ath06atKz{-Qje@r4rD!)kLvZn8CWmL3C=z_dBaIB4BNGj7BDv zY;38h6lcwa9p(eNeJq@NCD=K43}bEoZBQ7$wvEu1ye?I}p(pEv z5Yh}d;M=Jr`mQk9)U4Z-37|2pA(l_4C~b)NEd%W{q#6A`(zbktc=RPw;Acb#KN2O3%{PE5r&0R_%FEp0U387? zf<$O+cp>A)x9C1a{Lt%TcL=rF0 z%h{|h1&K0HP$i{*iH4}46(j`m3O$0jrwCtKb5MbA3L&-lqkU`r^wSSd^V__TmG$eQ zn-ox0+OZ;PUES$x7jbN2Xi9~(>rp;`htN?<^d%DEUlbqKlpLxVBGwWd8bZ)ZJs&Y^ z{hj>iVRHi9OR1}S}5O-HCnl<)t z2clG77NmBx)P?ZqhMKv4fPW{59iW?VnuqYK{V(YvLZ$*rxw&0b=F~EY;WQPY*f_3f z#SgH36xoY6O#UN&=)ZIk>xWdZ9Hq)m-}ndu03`5i{C`NU4MUWCB|b?4*iA!!E&xON z<=k$mib13fsi=@y;O>i{8gaC`hp4ecjFKESSMys_wX2DBz*)SDt^;&v3cf?2T<$V% z9G+77l#-`deyZ>kO=Kg?nui&xJCc+a)!^K4nAd`QLqB|;tFxB1<6Y|?7E=V`(BMQf z{8$e2z}%|nzH|i7?D}W^*m$>pd46(!yzyrPCF+oXgtKcWnhQY;F=GS0nYv)>uDRTB z#wE+>Ax8{KRi947fWRy51yaTu7n&VHtK2Ejv0jDIa@IJ^hQyFq|1P108`hK#Rvwzl z1W7SXPD6K+c;&qG7{Uy*Zm$g1s{O1&6top0N30r_v_ZWc;tkO50ioUc@^Rtoo7ETVh`#+vh9do|*h3kPsK?H|{cz3G!Z*wYq>L9t= z(e)Ie&jH78u|JXWDj;4zoN{6AemRc`yFWGzd~$d(eEo88$x}O-MExPBi^eA|X{bO7 z3O7ycW6xADaRIYEwa8Mgi%PosT}kQrmTSqjLRJ>qH<=ZRdL!+_xcD zJb!M^Zowsfwx6>n!`?H99!WM971=MpzTYTKKAE8Y8T2uBXUG=VTd+@FkcPelG8b?K zrQDF|Z8(TNql?n!2v9_fcAF@s5EzxMLh>O9t$g7F!Xe7<1a3Gl65^}23hYk%pzr*c z$o|Eps84hnTj({p3PNfov!mMqD^NLT=5*6{y7jHf6UwWNYTcq@Z;I4Yonmhg{@YXA zuqC?yuhnL->qC*&6Y%`5ygMx~MO2n+2?Ms$pg42*=&D7^Gh_WeGicD&RwVPHH&)pC?ksA6{^DR@iBT1jkN&0937zui% zxfduB_BegWS5w+8BYATb>kNQNiX>yFwv{{dp6Ig~#R~mGEggFE(D_Cx*ZUF*KdoT! zPCh!6A&qE7&&?s!09rV#WRbTHq9|xZ6Rvwv&3Mm*P!C_NR#ZAuf@KUerZ#$|eH~TkJ+D?dj^%g34ER zsp_P;u8M12X%#Or4q#C7?HS3Su}WDEj(p8Rx+$%5Ee7 z0F(qOAR+QngW^{<^Q9Y4`?>~%nQ2#VY>}*WHGp)A*0m^}PAdzJ75(~W%9go0ooromISzm9@?4&-Ryj8r%SjVFqb4zp%KK<9rRuwO{p&)hsrvfvp^z`Gb7|5AKU~0sa|Y((Mk?EqGK;j9`o4HY0KlZ1m<`QxjCPeyv`z z&TbZ#o#58K*AHBX|1t`37_4UWy^2Sjo#)Hhkd_@>)7`%R+S z59=!%wC(^5s?VvEk?jf|57z#8nuRw3bR?|d4UMdq*v6*GBNIsZLT|WvC)W@7D=guH zKEpEO*5iAuZWW%70)Y?kEg+Y(MfPN55&L`7d>J_TP`rTjqn$%gR?Xk~79J~7N|5Jesi(__*=0AHIX zqH9riEioZwUE^v>t$&=;M}8i?<{3$V{j~j{s1RYaLs~tRV3iIcO!V}HrF$1j*|lCN zKTZ3|^EuB@O0v-0zrmpFVP8E_0AH%J_k+~zYAy8c3(L?U^8CSHFrN-46MTv~Eo97$$qEHM%{%R{AT3>?4Uieki6?mquJ zE?CZEg%9YwmXhey79Qhxg<(?drMj43>|Y)XI1!1D9Wt{`YF(ptMrs5_D5?6_fCPza zW1QqK1qM+QnNFU;3!9l&Tqo{0_aleXzs`uMlrYHG z!_(7#RLUJ58GuA7d?agbACO(-Xg05+@D`#h$;NY{X)~=3ht;D^8IB-_x?o{kylic}#Ws+^EKK5F#|;dyhk zo-yNR>oIJqu0k;cF~B#(!*H}$eKtj)&|@?QyKw1Evm1P8lgDnhv2AOGTI(6sR=WNR z_a=>E_$a`}Me>aDm&s>u*)%Y+3%jW6AXYJ$UHN63e(Fm5br)FER4}ZJJ4#)6dp6A=K!*@F+Nd_`(IqFKos#5$GC(~!B3CqtfEe*u873;4*Qp=xLWm(eSmA4W z;n#R{ayfdvze45oo&<-8hbSUsjnXV?1+UMKo0Z20XcdAzwbhyL z50Q7)CFJ#jWb_X(sy~nZA=N8?Hde`X3zxAs^FKYhP}F*-cIG0nU!7Jd08Y3PKh2Wl z2IjIMUa|Z$Z{HIrk+0P@Z>9ogNp@*D3}yCvF>eD z=p`3LV+{g?QZ_a*Gh&Tkq!?}OfCjOoE)0>X8_^$TGorh7p@grfHHo*nLZGxZY32;q zgZnrM{}1S?Ih>JG@%|%Z<+sZoc+Qe89EtV&wj*H{3}lzNu=tGJ2m!1CzToAN1Iwh zB`Bqn>zGU9{I!kJpSUVEi+J3%(N9c!>{gt@s(oYa`S=I|=N^*lYAa4cEkdxhHSaG( z`~CjQQ!Yfq*4%!fihQWq!ko^ngAL>}faeX7vm`M> zaECFOa$RqTW0#&aPy~C+`F;n^3*U2kgy-L@6ryV{jlY}n^`$Sk|FAAlpf&V1U;6WF zc1PCE*b+EeSkaqSo_Ow}*#Wl397CiVH+aISXLHGt%4y2rl%qTjD>@P~~ zqHP|W6u$LXG3&^QAFtUB<668wGgWc7q{*@DV=qju{cx25iaB2z@J{LF%RV?POhMYU z-opp2@ywDCm`bMXN29Bhf{AC@!Ua8UEdqL1U>3U9-UFu!0jeSwzJ#>GH50yPU}*eD zSRwY2QiX;cu61TQ($>M!4iE&tHV6K+0A$|ag^{~{Jyj6dSpgC)Q0!U9mlp$)L@oy! zM4VX;NYKATrW7xH*ky2#Ea2;^mn-yGddr~SeFfag4QAqfAVGoxjId4D#7Vy;Q(i7T zOWyyrv;@-iYv>6uu_MA>7~SpPC7;)(VN&3=af2$gSJRi|SKgG1Up=P6C8(1eat8%X zUiIKJ>>ov;1kIllzn>A{Q83TD;a53ZECzWv1jaSB$D24=LUmknVnqqSEC`mIbr39z zI8sXV0radP*V#sbDxQN67T)R`#ejuO_xO}a-H71>lq<_9@mXijbuMsWBRLLX(PEMI z_*3u;Vw}2hmszTlD<}{nkCYIX)p2D)`FIXQ7X2{r=Ibk&k7DGA(0L{mt^&k28FYNG z@gIz%Pkm9G=k<1ak6GbC8&j@KB=bV@2wg{+#Y&b5h~rW|C>Dpvwujq_rn_*j39Vn< zJ5|YeoTZt8`Z|(@!c;Et{DbSZPIk&=wz=_ZhOU zBSOa}zOgpmYxLh>Sia*-h($>nxx8^sLXX46JY>CTceu^{qz`CCitVdlj9TkD@vZwA zvaRPi6gG{p=ru!=bkw+MLORUG-e!@>KxJVKty<7^Wz$~AUIMqq!jnSkelGcWMT?+S z)p$j-6?K7XI^y4qOwj6a$VRft1#S*hQ=4?YRtk=bC43NAi@>TTZJZ&o^FEwh$8@GH zjs}-v6X|}n6djU~a&&Pu%Dp0BMNMoyzdYM>F!HA=VO&Qgw=8!Vu~n{}Mv_J*e`eyX-Z2{Y^~{~>WE9#&*Rx)7#^X7p z#GZ9U7j)7!!<}bz$9a=1Mf$y9*3&5<&Fo%z;-*TPeTP%v(MF7Pi&_d$olA=gvG?*~ z?0JRnA`h>T1gc2-SIMSi<`t9jMXkxn${p)vgUsZUv>+~D{%A7Bp4B+Z%Ewf}jsgDz z{8H6Auw!BLUoM@x)4|r(Hk-EZGPwCNE$uOD$nj%SH=b#4JHj|Qr8hn#hx#%E!a9Yf zjajC#jq)7TnMqXy!UwzaLFLE!C?Bk)I?`1>FdPq6A1RI930n^x9&<#^?1pA*=DssB z_LVcUDYUHSX3JBtRdNg(N%;QQcyV%mGJH8WDvqFvgCX9Dc(ZxJO#E)i89FC{aPD9V zSUxU(cpKeRP7A^4)(ijgq48&&%#L=_0bG%^l5Q{LQ;m-ZUYk^$)YuYT3Zv zlu8Ry(ah0gpvVSjE`}OZNmcQ}$iDrt`p!82#jCr80hT)&H@YJ}GbF@|%|?V+;-WxE zGWSD!tK|Szzp2SAjllaN4@T~Es&Ze;C-=%T=$1Y$fV(ErAE>SvyIap3eHX`pF(j524(LgufM0OQ^~tIg+?|&)T5nY*f%oVSpd{MV8bGg=jqNC9LX|5Xnr+*icKU z@+T(}kF2aQ!yEzkaR2;paC&MIkmki-ot)8yzgx>*X&#)P_Zqji;bK|?ZeIkum9Y8? z@Op&iex>WXw9>UNabrjR-s`+|8_U;o`TKw4MO_;Bf9T3?I_`q(-|blyh%}S?g2ZP_ zLIlrTMz>{vH3@Eo=zcS8rMmXxNU=sn%64L0YV&%3I2>KQyu5gG{IX21^@(p~#Minu zbE+e^V0-S|%I&DK<{EvwP1{=+VXAjE(EPLRNtHhNtBAUWLfw8d=o7J+-hZ_sQ(6H# zl6pw?)L#(ANh9JQaB0D(+{p2)J+#G>gmqnS2AA&#Bs(^$P`N^Jn)@Jgrb1;Qb~GB5 zwWBMQptX%WbSMaXU{8kuqvyK zWw}!irb~!B{36yfLSv01O5pp@b*v$Kw5TFG9C9bs#A9Nk??hX~nKpR| zGTI$URrnNtbMD>v%Vk<*Hjb@W`8rDx&V2LKsU>nTy{G?C9uvE*6WSp5B}rBFx}uel zxm-6Pu7G-fTVP2&k3AErnHZD-Z<4YnDt=} zxkNkcEjWY^63!s9Yrd8j$OEuz{T7W&)z}CHPo{9gNbi4B;ij^-%A(Fs4qsmBW2x69 z>*s?s2%zxlt0$=3)7PG3d5Q(jDk8?4=msYDV-SJ9poY#xl$be5v2{6IEQvXEEcn2Q zmDVsYx}l{T%24+9)6M=5&hyP3XQzt*WSI?q-ABKCm*(kNRL3E6322SAI7NV&vo zBELDER5NR|n#?Tlm&$uA(RX`+XacD{O#?K(+0SY%YxM)0x)js_32CDl68W12m5;pz zoLry|K7fJ*S;r2dPukrv=Kc3{j&43}u-c@F;q2bEUZIL8ts92_eAfb$$oepYfyVCm z;jGjBNTm6xyu9{}m;LJ7JRLn|TP}?diJbUvI^+Cqov-!7%qy!#r9f*r0ez)oMT7dZ z+aM$b(Fgydx`+7Z9@l`S9~$`nYhN{XKiT|qwJ|M*2HE29$L0|g2B-S&+X@19A?~CGXRgk7Ec+e zWZmTRR3&Rq^gW{;D_*}je?|PN2QPvIX8s~ZT)d%h7#-^jp{B@Wz@;(}{a@6LBC-4m(d>4D`rL7jB9B~oe|bek?YX7=(} z5qfwXaYMm4_y@`!Ir=t7F)OZM10jqHDw^*)gB|6-j>f!G3m zv7wUbG?HdX!o-b^2c*X^LTu%Norm}gC=mUZG^bk)_@hb~7dWWr`qB7&HbYp`bS}9N znNqF| zlRJ*7z4N^(XSGCPu4|eIodBdd-j$1^@C%}O=`ra-_7|LaK|Biy-)~}{U2}SP$SW${ z9Gtw9Z)ZcaDl$ReT_aryijL@g>smh>R||^T$PoW15Ai*uvu3>3$)y9I=y65825jf? z+J;t&4&w^`1oC!te4YoSV!ag;o>8d8wKq)nbAG6T)gNGt|xPMcs< z<<)DLsWmi#9ex@!1eTCp&;=kdzLNVrzuwE(zQ0_ z^YzY**WCYSwF$e;CZT+Xq|F0=xfJBd>=d>(w3 zlZO;>wet)f^nB3@6QOZMh>8-uJ+s2xf`vh5lHj8_>d;4XL83UKX(Y8A&1WXF6ph;| zzSc*Dq|z-HR24f~TUpg;Tvnz`;1GUNyMwZ*#9}W zdVi(ZvR#$MN#(v29i$pqr5<|e2Qv9_&Jx~8+jyL#apTy8}(frD^ zh=;NZ5Oo!FkuWvU&Xxcuf@P5u*&J=^#;(B?>U4Fb-OE)1M=t+F=qs9I30y4AuGnL% zNF*g^h`@(B3!zi?j)i$VmWu0!r-ph0x~wWptDQFmI>zV1+#FBDYHP9!lcgG8IR3Kj zkRF4^tuP!;meOJ`Z(JM5Xl72?oI=a__gg6=~m zj7$lZMgjFFdz`}u1?Hrz2)P)kY%>nm3BUEdJD7OAxc`PZdH7A=`5+)%ch$=jC`kHs%GZC< z)u{>r!k<)1n%W=qPJg6RZf;PwNr_|#=(#ZrfG7ERxPNvwI6X%iKE&+!@tkv%qL!Mn zT*y}TnUPO8vZ=VsickTSW>F2yxh6pN<6PMi06+hTc4=}ZqL@krUYe}e@W-SLd8uNM zb}f#iLWmJG2uxyGs4&vOO`*VGD~`mv_T)O$qe0~@kweT{NS{g$Pi%c|2N8>m>CXTq zx8kQ*ERz|RRNONzbcDwwCYZzv`v_Qkpf(?^{}gUFXN&1!S*=$tAUlaFgccTMj0o{; z0@Zv@LWJ#yQosJZW)}EZb!d_mH@Yhr$9}tOq@q*N-Tj|sLv(^wm8k)`S7pO-B{R3O z!YRIoH6u<%L0W@r%^cigy!sG*RQBLP6Q_?yyJaPBv8Iu#sn1&Gsx{9!!!wU3#6kDlWLxk3Wg5{|(C0`>OF&t|@NFsi73`@YB56wqmH`U@*Gj+g= zy(UA}hn!+CKIg3Y3IVN<%t~@vnPbBT+nF_!JEE2)ZeO|i*(S4}Z(i&%*2AT8>QzmP zivN?ntmsJE%CR>TW3MPDs(dE{n8(UkGNcP{YqwFYLGl5oOq_T&+V^-Cpbd!wI@E2^ zb5ykiYN~itQhyClGCgP8VPQky{Qmj5-26)3U}2ERvdCvQ5L>2F?IH0!rvl=!u;l`2 z=Gm*~WL)NuOBw>~Nl)*ep)61gvsM8$T0uTEg zCwCHBKb26bzB00Na^2TVCkrz=(a|d7E0x+y%)P=7(>|7r5c2@(#5Q=G!P)DpUpE*T zA~DkFthF7k&hODjYZ*U5NrlK80i?ILO>C> zWF)zx_pwjM3IQ6O7hJdNG1qH=s5Z8U$DNXUFeAGH6E1plnH3DeHt3^oSO@bNH%8`{ zVkwlDcD`?UOWC^e)yZ3)@@}U}q-xed@>`5fE!~i$9sPSDjWx((-H)XcAfxAqU)F7~ zz`I+dU`2>uf8^MC8gw;Cr{nw{fr%HL8e9$srw4;`Wq9c4!XM0TiuY$9johC=XOHa(#e&&R>jOg-8b9;k2E~TFF}tF1 zu36YFyd2;MDqv3!Vja><`!8a5f^wn#{pl1L$M8b+l=SCNY{GBVzm=S|x%VlAPNWRt zw0@%5(!sCd1c8j>ID7s5kWh5WPF#Q+E5nB?{etE%e~O)8M~9Hn_e{a3}u0 zwvkGgwc5iM`m~1f>wrstvgwH1DZ^attEwH_>AwGhkL#Z{)ksYSPrCI9#NW|Gl~hv^ zgtdc^>C9pxx83A*qYTo9g`2)$7`Np&ZIx@v$YCq7_w>k=#fu^!zg^Vw|*w7PE-IdV(`!UR#Y1luBxQ{pJ0Ms1k83PrQ8 zXqJOGh8g~?8)W+DOA>_rh5Xii^z+vdp-s!Tk*|)JgT1Y8CG2sPTSVQvte}0G4OO8& z%?I6-xQ1+Ny9P#wUitugFL6|oJV{}}6#8LNWipYba~a6>PbA&I9Hegm%6N=2p0ZE# zdYKS;q3szSBrH;Fmo;-3qPE$l`^^@R2NLG-j{|nE+=KEqjaBSEo({WV&@rMN)`0BwjJmEoH<1;5QxOEs+y1` zb?fBbax7hCUL|rfEB_JykE}4=&rA!mUJ{niNhC2+4sIf+b7A#{IC60^3M;m!HetWT z@Km`R)R;|)03=%7{$pcsd3kZU@n_HKykcx&qrFkGO&>a^^OSN!R0C@;`Rs z6x9ih;pSX$rAO43qgmlnXO0ADB=Mwh#j36-H__J>pkf6oTYiZ6HQ0O%xYcYw?L06C zsc4Npn}D28B@0kb3`5R+`RNK3l(c^+wXepHvk4;qEG$y>&+^mH_$;@tf40g)Y7K+o z9nKYIAd%wesX8g_lY?#FRVvt=OjZZHhM+d3{s_`r2H?YEm1-~-;^>Jg>f_WM5j9p- z5_B+oFTRh20vcFNQ8{ddv0;WG_7}fGLb11;9eTXwd{4g+GCP9GcDD(N%4UNx?q!Vo zFB#)OjqxC3Jbcy|U9mQf3TtE7{aD?5R-j#c+ZoV}j8yC#uUw!}!&Uy1Q}Xs&Ns z9nsA2(^A#csY-_rbVtFKqamPI$gICpt`aM8eEsd};+3TTAc{Ft9v855o9!8@y(p!j zX#`iu51nNc+|LQUyKUwW-dK>edJcxBFSOW=)-aRs5G^8BGwBk=d^#f7;*w^~gMxFz zIGR8BCQ;Y7&UB&tpdQa>Qe5Gv%PT^ke4V$e^Uc=IRI*$Vx^FjS%n+D2x+)chnl{%^ zRhFg&O!}gI)GM@N6{>{y0vZh-7ga=5(s(0#$2F2!*=v-)m57p}{9@B^<%*2Hlvx!2 zJEtL08R0SFV&y*6B`T8^#1qKptu(7I(Xb6UOXz)YkHnJ*2rVpLFtj!0tKl=u4hOf) z8;>TO#ZP-iX%Z%95ax{+8l&&6Q?G4`+ZcY)r zx|+tRmw|4`)RjkQ$ynmsaq_KGrTr%BP9#h;C?Y+t0VQ`cJpi0=tg& zg8f}Qb@=)#YrXT0)-S5pNI?{0Ywr55i9z6R{4WqhLGo{UA_E-_&WD51>&wA#aOH54 zT)SJtPwaARCq3>}P3%|4-127bmbQxyoUvoyI6JdV{MCE>+;#NUD!OOR{6i9|9>t=N zNQIq2Emap9rA<8M9EN->&T1A}Mt`*V-NPtJBre08?!C`d(50fimALa%auB_{Kuas} z>7Xli<((IBVM{#s#3o_C%9b-P-W;Gl_U3WKOxG3Nm&7t22N}dmBJLIWLPpEEtP?gg zJV^ORN3TIAp7HbYv1ov-MzEQQeN5C-%2b`1!Mm%8pn`V;{WCypBz_*!YR!aQmuh939S9a3Ie9KMWRM{>k5Zoy@UT7lxZZjUNi6aMS9t)@vGsk4w>xf7L_i!g0lG{iHgS=B&7-{-vj$msrW7Md@*Mz;abX z?o@unMIqJH@I!TgN;P_JS9xZ1`Lhah?L_;>&8{^!t_IOM+*B`>KPx_a57yb6;ZR=< z;=m59)KNd;;G$IHM|^vW-zlzUsbgRcnD{Do=RBL!Z2Foh`<;Wor!kwHWi%B`z|QBy ztqs}M8JB~C@_NSoA~glN(V4lFFsrebz@6Hkr+QjX^}OKZ4h2_bf~u^8Dp&1so@4qp z(+%fq+{z}-gSaSvsLFfxAg8w%xo+Qhsj(SUH8vFnB~hXARS9`jBL$27e3uuNiWk_Y zHTdH!HHWDnqdA6{AxWOK&PJNX)r4X#0Z-l7@Nki_%SWX$G{%-&fXi2Ss@kY3y`*ba z>c9ndf+`siMc^srVy+96O8ImnRY6PICtHfdo^`rS8Yq(v>GDpE3V?m~9+S!uxOt@j zsfx+S9nsGE`hG*&nB4iPJd}}E0R#4%m9H{8&>AjA0V?r9Xb>DPeCu25+4c`VG^M9a zl$Hi|&lNQU>}Fj-!QrsNjJniWdECzL&3~-$26Qxs2I9PT-y0OF6RqU&?BoI ztQPm`v@DU-!W}30*RFaFQ{!%vM=?ED3f4}|Kv;Z0<+YCz`G}v;D?5MPUDJekz}K$C zQmb60hHB#6kN^d!llmm$1w=9qVfgR!!H|9EnX-s*k{+H7F2^P=A)eR{hy4 zAxiz`>H^_g@NDXf*bE8RR#p|%e2!<@@3X5Z_zQPpv^Hq5sB1=I4z@N1N5_MW5-ONN zBO8n{fek^6jTifegAH?j>lv&C_@$~MVz@O)TN*9dg}f2$Pozd2AMv*rmmH5LTm(1pB7vC!*IH!OxN4AWaRn zQY#;AJvgKd^>|NX)~_~ ziP+OWv>_h6dp%`TT$Kbykz4k9-TOm)dU`tG>dzIUbFLer(*BG{XR_)O+|sx$_Kcrb zd_X)I18?QnEMa9y8ZC%Q5FB&g=qEbQ5o?rmwAh}G6Kf+LK@=y_a$|UTe6Z2eG*9UW zlvNBmE`#0sOy%km%Vss;uGSSC;=9(#f?ewNNcdk8O>Pqf-05^gv~e~XN1;xl*a96X zvmN@2m92nAeBbWL4gEMlGH>Dr5~2-|hBI=z0rK+*k&&MJ3+Ru&RZ-ZR?@xV-x{Va6 z-In=8^h)p(;*=CGz+J|nQut`+BfbDtERqTv73scdK)F4YPp8fiqZtbX5na3NgzAGa zF<1KSxen z$;9c3p@boedK@TQ`feVg$m; z%`RtF-Z|>Od8^_VNr)ycAh9y|;fMGKzun4jw_WC7g=Ochk+Eo6zxxj?qT?7oI}&xn z68TL?dcyoz`}2lhzm-71bDF)QgE(~x8k4=)AlqY$3F+4dR zY&3n87o-5V#Yt?F#?OLwJ@Q#fNlShCyF|1)cajNe$Z02oa`*(R$ekr$V3#epleU6IumE&}{ zf2z+@@pck3-c+LkB3e{{6*DA-lU_Jd=B zrnTR;c~sutk)Wj0T%7Ywj9bj-Oj?poLJ)tKBRKj;zIe=hXTA1f&Wq81fkX)k?Qf%a zgh0y`NUuJo(O&m(bPz%d+UMpS96YEt&Z8lR?mKx^CTK+wF9h`{QF)@>Y|@i-EILY3WQ{u}`JweL@`5qS zc=eBwGamVq)CpHpYrp1~mk30u-*`DLRMwCg+!Muy5!-I|RqyA)}Um^mo9F&-i z$ms-7_QH;MIsNAq{d;(lihZ9 zWU@QYYLk_kWpROVN_XSqlo_Ln+$xZL22JHtH6+hggO$3~0QG}}w9*vH->$8WsOvRI zX}l@&*#cRo{Jh3;nMslJZ5%vC*!;?ICndJyGRo%H#7+>GtGJF!&eyNfn8a>g)GbEK zFC?i|8p30>5Y+O!71Z>n=WQJtNh#oMc4)rh_Aho#zKiJv5Y`LS{=3oN1Oqo}0f6yh z#p<6vZ*0B#ey7IG%Ra~!%U#)eoeG4g(j^<~t$hAg=zCL?KXWCj9R!(^2zYt6-Er1V zPVteB(XQae;k7)cE2?qV8afnQWJ8B%Yk|Ks-b)V$ymT-Iljzu8czrJ57=jY*5^`)R zgDdOvCD*Uv8Yfm4(?X?3OCntrg!9q+B)segV{aNko0s~_Kxz2<`ue-{IZ-`$R6hFp z-pB{^#W5Qq=-3aYQm0XJVmsE6Tet^tq8Melz%8k3cSWNGdq_9qvj54r_oS^eMzM|D z!K%VFs5T`!(~gM6<}h`t^LCZt`1!VRL`L!ai*#^qR5^qgDF4ha4YJ$n9>0EekN1r| zxJji~4FEd^hCT{GXz}yz;IAz8s`hoEho!?|_RX(|hOT^y@^7DW7N*+A_2YVPv@*X- zKNmzHi;?TeShBJtmE&GI)TgtHo`@@<0qGa~L%+c)LBHW2!&KPeYnYxl!>!tI)!Z{^Nm$T*=*^NPm&ZDr;+p&>Pi`OF)Ld^SOUYOl- zyP6o#3Lh!mttf=2m(IST=NFe}`=@3)|BB~6n%m;3quTaVM#vFQd~f4w|NMAxezhUB zN7+bcW*x7%BeV}cI6G+_q{&@VZ)jejXBo~lVFYls(+P<)5YO>r`Q=E8vIE$!&yNc* zJBfQ+lnAZhfy&51&B}SuWcVgucm_B-f~S0sddXVe@bzvD{_yH%mXq1)4Sztd#TVc) z>%a1^K!~8-=rr;5{o-X?S31QrXlgF;`e~~}yc)UD8(!Z1HCK4H|Nlitc!{2YH&%IF z^gIeOY^X6{9t~D*+mIUlN&>6&W}C5L*pKS|lpWgNXOi?O;Y^WX>HD`M;&6Q)LG3Kd z7mhrwG|h?9qt2a`jyglynhDfCR=c~X+YP|xv5ivn>VCpLF&)*QBX!gnt*+gqXh}_^ zZKo^PB^m5L*Q*|MWojfR&U4h3s^S#R7v*Pl$5u^CIm_fSMsZkzon+J!&pMKs7k!7G6RVqGOli8n44iWET#5e0AwQipf*-?v})0GJsJz{7Ilq*9JKgTY{q zp6TnoO`SQ`@ny0=tPr6rQfF?>3alZAJmJuefA1Z(J8K2(nX(P*O10B=|3)qxw)FXG z(`I@pH++?k98jOZC7rMvwW6;WOZvpgkXzlC~}n-nhb#{92^ z?K9_{-FW`XFi`wmv8#DKTe2*14Cyid>9)Mx!}jK;m3UD|y5OjGN2Z1MjI$=}G^e>K zT&3EJ`#oM=JZ(wpW=m5JiXCugY|t3X&9WNnvW&KjpPf%##<+$SbD0V}E+;N?gfXkP z%FSc`y+hM=ieIfO8Py+Oa`n(#_<~$JLs?piEMZV2&@LC}T>qz|yKZkK%n3qnl_3It3+z@6*u+|9!@u}eEt{+5w(mxXoKrB>X`OOsd z-@8QuI5MpiD!Jrrbf%Nxi=W|x>v0yo@DE2`{qx4II^a&j5s+=)&wvirnTElr(KIr_ zq>n>IRgaKhQvT^pjPBpXTbSfX>AQ>xlRl;}wV3MM!wJkV*g!=D34nx0iE1GJM5OdH z0kfU<(e3{ZtNtH37ZEUp6)bBCFKkgl28_0ZLT1kJZ-PhrT%=}cyH1tzR}XHOfhD~` z@uQ#&e#nvy7!(>iJN<0_x$oUOXFw<_XO%jPZ`j8?cp(Lx)tA$S~=otN~fsE4O8 zOCZX@^wb+=G%>JE_EMyqlAar*nK5zn4A4fJ;{R=P13D=!ra5C8r!v!KE#*45AASHC zFPMsx8&eFtTmMxt<*5zcB8^#+pRj*-+h^_LmnxPJsa`i$v;W`Li3o~Ut(9WvQ!fTzgB76!FEu^>rxRpEIVERx}|DmM*V@dtTlKTAh>5`;@ z5iWzzi6S+?e-BAYx&4s-{Fwbj|CbRa(DB$~5bX)CwkC&O3GlX9tQp%)tw^k(jQtAn zPqXREeNdc?GAdPNt>G>L=Jj!V)V=NXyWX_r)u)`DH$`4bLr*}{r8_>yZwg93x1!G_ zgPv{CLcw+B8uvtcC8^5}JDWb;Hd*a#im8UBusbq#GrNk7)#k(p6-}1IJ#y%RYL8S3 zb?JQ6;gvFz_z_aPGfVEf*Q0XOOL0*#v$QbhoNcSeUwZGhwL|%(x4RAC&Oq9w%U1>P zrO7L#h;-K_pB#@P)DjoO*)*l``36uhb1bB%Ba2xC8p$M!5ysTzIbxRci1g!#UGP)Z zf;O9mYed+a%OQr`+RRFL?t)#Oo_jv?Jr<;~>FY@7SZA&c`_PPg8y2m#g^I)8O;t-p z+;$aWVxYM7WbK!c88fLPnpuogLciRluXWt;T>lJNBqlf9tNad!aL~;;Ov`xdD9rA% z%)dtuhgZS8m-4lYUMxx?y8CGqsu0)tPr9Chh`D0RriEvOZb(8n+3iu%@#N^m%L7!M~S9)}f8Q z;cXPbQJ5>VM;}+Ce_wdOwUk&4uKKC<=5j8OI5n^mthEs1kUqKCQI%D998bT^a7!G8 z!}83i#^-3h%1_l+o+ZFp-4@SM$};Tj{zhPNOG0K-T5iFA+L z5-7>cwR|&G#9+8t;|K6JOV$!1F~5Ps$VK#}&0m*^I;7a|-U=wDCf=z(zcc4k9k4-k zJ&Bv%b!h8CbSG!kVs`7jSnon)oZ&JL^ee$=4I%`Meg?)HK+w7oorj3`WsTcx>mZr} z`eV%DyNNQ$Bkr4nH2@|qDA*jXg;5?%MK3X%$%sD%BL9SW8367?((|34w)MY%up89ncN<6JH-&({CIM#G|Ny#jJORZ$@isA6D}rr5A4X%kwb6Z|LoM|-iF{+eV! zvs=E#xF<~{Gdn8w!-Qd(GCws}-(tv=A6)fqRR6sCoA2h=f5r7*m$n`zNj$m(ywi|- z{tD?OTbs_VTYLrdg-!1}6Q?rCB@-BQ#`d}G7%o8AaVNiTdT$D+R_U;1kMU6aC2JmP z0{m(0)5SWE8Ppz%Z<=h1;QF*Q&DPbQ#i@#K795v!xke?POT2rj(a2Vnib|6%VrQV| ztrjkxCOuqh>$bcMrQkUu+|pF(cja zq4+us+3@xEf5M%2Pn3DgpyIZ-=95G}Zu|b)QrOJtN3LjrxCucF?l*IBHDVQ?(=Y2a zT1mPgg7ihIW61_qdjRiHfFY87mgrO}t>AWGD555h+wl?In4nVmHMBxy1K$4U0$~A}1b=_*6Ow>7p);NgH2%!xp!KYwMQp zj&$+=gBCv)`r`Zem>oRYz$SEvibsc5k(vj|%=}8HrgrkH(v}@oH!_b_%izA`0a|s4 zR&Dk}wQ3hXN9T`G<$0P*<%Pm3ECC=>x0DEY^5BTmZUpbmlZQiytor4k{p;&}|Mc8X zcb15#I=@zPjK1&A#?y8FwZ$GyaXUurj{3R1-#${v;oWFJ4d))v9d>ATnb}3i(U>|0 z_sN?P$!**ynP*QLPrQ1M4b3DoNIEtc2=khgO_W^}0*&G2KLk@@c=xuxqhDvis7HD@->^1yba-6?578hbSHo;F1N%j*}cM6U5B6 z@h%-O7kgUS;O2EDEiTQyB`X%M%EKUp7$r+`*Hz0 z5(m__Yy|n+lGZbAGsO2|$wmq&{iWU=g~P}WZKHw>m}Fp@sTuo}GNR$LheW zJ8zoVQzW~nx7%w6N2jD(uPxe$I${gWoS*G<-dn9K`+b(SxcnEghF$0y@YW0imFiR? zc$%@1k8l-_@@~^#X19^M=Tx>KR+vZj-o7!5@;+7&9hF9g%NIQBi+IS{U=h&!%%mDB zYeK#qUOzv##WV_oz&o?f@ACmrD?^Xz*le0FYGf-0g1_;FYuT_2XLBY7o7$X**#1D{l`D+x}Vm?O9vab1wEd#i=vv6~z2*HwhCCLYbISc^&4~$rL_; z2B_ zpL19$cjIf?jS5umxwj`I9)HcwTx|&zJe~_yd{woKEJx>x3ksw;J?z-0SV~!AWk(Il zBxk#H0ZE-C7&4|^ZBEzk880j7rzxFtq<(+iHRuhkw3OlgIf5W3Dz4$%I0y{7`6{K( zy3S~GG(j#Yt19as;_;xxRv+*sP9+dlvo|3? zGS8So2-1e-7|_3a&bq6*U%8ml^$YPgB8x4-s;!=4|804P2j&U8Z26=?)sFMtRj)Ui zO>C*}+&L?BDFH>qI)&fxC)*H!)5pXSnS`Uu86tQkU0O`fPhjsiBe&qLO*T zf+`VH*1J?Kvz|RPs8BYAj=QcjVP13FA5RZY_S=izbLlFcFL?TkRc7d7yOSAmDrU%+ zFy0A=>3-25i02p6w8vp^6^QAnR$Yfj%%wHsWmet$kj@xuQ8=nyhkZaG013gaSse1g zgcb`a0@dG-MW>HkmdD_|+kTdKS@wdrvt2@>N4jh+Pk5+R#HK5xtD`thN^OkH>s{a6 zrav0BRLPTtt{x|4xaL-dO+%oiC`ucJ3_$bi=@W1O2~5G%t8cCEG`t7+6poNfnhoVK zty}+S=e&J(uyd%t?4RB-d%smmI_Dz{ClYMa8RK|sNv=9OCva2(1DgY#@w3W1(c42j zCvt%J?Bh_a$#`Y03#i#qhO||A^<-0j<jpFJRFXK`Snwryz&QD>V}R1wrE!v(aT-gxok~vv=s%HqowLTR{4LHk~%CSqX1o%&FC=0QlPEUr+ljkIiqJEV@+Mo*DP)o(W*PfAqfr*KMK@=zo1KS!w ztfZXOyp+_U_}s+2%(T?v61|fA+#GZxqPn`~ovdSEh&;x~zzx$6q_;H|0S%6i&&b^i(~)* literal 0 HcmV?d00001 diff --git a/stylized_rock_generator.py b/stylized_rock_generator.py index 6541c6e..640b07d 100644 --- a/stylized_rock_generator.py +++ b/stylized_rock_generator.py @@ -1,7 +1,7 @@ bl_info = { "name": "Stylized Rock Generator", "author": "D4rkst3r", - "version": (2, 17, 0), + "version": (2, 18, 0), "blender": (4, 2, 0), "location": "View3D > Sidebar > Rock Gen", "description": ( @@ -35,6 +35,15 @@ from mathutils import Matrix, Vector TWO_PI = math.pi * 2.0 # Platzhalter-Materialien: (Name, Base-Color RGBA). Werden pro Rock rotiert. +# Neutraler Slot fuer das Erzfels-Set: EIN Set fuer alle Erzsorten, welche +# Sorte es ist (Kupfer/Eisen/Gold) macht die Material-Instanz in UE. +ORE_MATERIAL = ("M_Rock_Ore", (0.30, 0.28, 0.26, 1.0)) + +# Unterhalb dieser Vertex-Zahl verschmieren die Erz-Nuggets zu Schlieren - die +# Maske haengt an der Vertex-Dichte. Gemessen: bei ~150 Verts ist jedes dritte +# ein Nugget-Zentrum, bei ~1300 liest es sich als einzelne Einschluesse. +ORE_MIN_VERTS = 800 + MATERIAL_PALETTE = ( ("M_Rock_Granite", (0.32, 0.30, 0.28, 1.0)), ("M_Rock_Basalt", (0.11, 0.11, 0.13, 1.0)), @@ -251,8 +260,14 @@ def _get_or_create_material(name, color): return mat -def _assign_material(obj, index): - name, color = MATERIAL_PALETTE[index % len(MATERIAL_PALETTE)] +def _assign_material(obj, index, fixed=None): + """Setzt den Material-Slot. Die UE-Skripte mappen ueber den SLOT-NAMEN, + deshalb ist die Benennung Teil des Vertrags und kein Kosmetik-Thema. + + `fixed` erzwingt einen bestimmten Slot - das Erzfels-Set nutzt das fuer + seinen neutralen `M_Rock_Ore`, statt durch die Sorten zu rotieren. + """ + name, color = fixed if fixed is not None else MATERIAL_PALETTE[index % len(MATERIAL_PALETTE)] mat = _get_or_create_material(name, color) obj.data.materials.clear() obj.data.materials.append(mat) @@ -781,7 +796,8 @@ def _build_lod_group(context, settings, index, location, rng, base_name=None): _bake_vertex_cavity(context, lod0, settings) if settings.assign_material: - _assign_material(lod0, index) + _assign_material(lod0, index, + fixed=ORE_MATERIAL if settings.bake_ore else None) lod0.name = base_name + "_LOD0" lod0.data.name = base_name + "_LOD0" @@ -844,7 +860,8 @@ def make_one_rock(context, settings, index, batch_count=1): if settings.set_origin_bottom: _set_origin_bottom(context, obj) if settings.assign_material: - _assign_material(obj, index) + _assign_material(obj, index, + fixed=ORE_MATERIAL if settings.bake_ore else None) return [obj] @@ -858,8 +875,26 @@ def _cleanup_partial(context, names_before): bpy.data.objects.remove(obj, do_unlink=True) -def _report_result(op, created, failed, cancelled=False): +def _report_result(op, created, failed, cancelled=False, settings=None): n_mesh = sum(1 for o in created if getattr(o, "type", None) == 'MESH') + + # Erz-Haken an, aber das Mesh ist zu grob? Dann verschmieren die Nuggets. + # Das faellt sonst erst in UE auf - und dort sieht es nach einem + # Material-Fehler aus, obwohl es an der Vertex-Dichte liegt. + if settings is not None and settings.bake_ore and not failed: + duenn = [o for o in created + if getattr(o, "type", None) == 'MESH' + and len(o.data.vertices) < ORE_MIN_VERTS] + if duenn: + op.report( + {'WARNING'}, + "%d Rock(s) erzeugt - aber %d davon haben unter %d Verts. Die " + "Erz-Nuggets verschmieren dabei zu Schlieren. Knopf " + "'Smooth & dicht' druecken und neu erzeugen." + % (n_mesh, len(duenn), ORE_MIN_VERTS), + ) + return + if failed: op.report( {'WARNING'}, @@ -1060,8 +1095,11 @@ class RockGenSettings(PropertyGroup): # --- Material --- assign_material: BoolProperty( - name="Material zuweisen", default=False, - description="Weist pro Rock ein Platzhalter-Material zu (rotiert durch eine Liste)", + name="Material zuweisen", default=True, + description=("Legt den Material-Slot an (M_Rock_, beim Erz-Set " + "neutral M_Rock_Ore). Die UE-Skripte mappen ueber den " + "Slot-NAMEN - ohne Slot erzeugt Unreal nur einen Default " + "und die Konvention greift nicht mehr"), ) # --- LOD --- @@ -1113,7 +1151,7 @@ class RockGenSettings(PropertyGroup): ) # --- Benennung (EcoGame-Schema: Fels__) --- name_prefix: StringProperty( - name="Praefix", default="Fels", + name="Praefix", default="Rock", description="Basisname, z.B. 'Fels' oder 'Felsblock'", ) name_form: StringProperty( @@ -1268,7 +1306,7 @@ class OBJECT_OT_generate_rocks(Operator): print("[RockGen] Rock %d fehlgeschlagen: %s" % (i, exc)) traceback.print_exc() _cleanup_partial(context, names_before) - _report_result(self, created, failed) + _report_result(self, created, failed, settings=settings) return {'FINISHED'} # --- Einstiegspunkt: entscheidet synchron vs. modal --- @@ -1294,13 +1332,15 @@ class OBJECT_OT_generate_rocks(Operator): if event.type == 'ESC': self._finish(context) - _report_result(self, self._created, self._failed, cancelled=True) + _report_result(self, self._created, self._failed, cancelled=True, + settings=context.scene.rock_gen_settings) return {'CANCELLED'} if event.type == 'TIMER': if self._index >= settings.batch_count: self._finish(context) - _report_result(self, self._created, self._failed) + _report_result(self, self._created, self._failed, + settings=context.scene.rock_gen_settings) return {'FINISHED'} names_before = set(bpy.data.objects.keys()) @@ -1800,6 +1840,7 @@ class ROCKGEN_OT_ore_set(Operator): "name_class": s.name_class, "name_numbered": s.name_numbered, "bake_ore": s.bake_ore, "bake_vertex_cavity": s.bake_vertex_cavity, "use_class_size": s.use_class_size, "seed": s.seed, + "assign_material": s.assign_material, } vorher.update({k: getattr(s, k) for k in DENSE_PRESET}) # Erz MUSS dicht: die Maske haengt an der Vertex-Dichte. Bei ~150 Verts @@ -1813,6 +1854,7 @@ class ROCKGEN_OT_ore_set(Operator): s.name_numbered = True s.bake_ore = True s.bake_vertex_cavity = True # A haengt am selben Attribut + s.assign_material = True # Slot M_Rock_Ore - die UE-Skripte mappen darueber s.use_class_size = True # S und M sollen sich in der Groesse unterscheiden gesamt = 0 diff --git a/tests/test_ecogame_rock.py b/tests/test_ecogame_rock.py index e22ae5c..f152076 100644 --- a/tests/test_ecogame_rock.py +++ b/tests/test_ecogame_rock.py @@ -11,11 +11,12 @@ for o in list(bpy.data.objects): bpy.data.objects.remove(o, do_unlink=True) # --- Namensschema --- s.batch_count=3; s.subsurf_levels=3; s.use_modal=False; s.generate_lods=False -s.name_prefix="Fels"; s.name_form="a"; s.name_class='L' +# Eingefrorene EcoGame-Konvention: Rock___. +s.name_prefix="Rock"; s.name_form="a"; s.name_class='L' bpy.ops.object.generate_rocks_batch() names=sorted(o.name for o in bpy.context.scene.objects if o.type=='MESH') print("NAMEN:", names) -if not all(n.startswith("Fels_A_L") for n in names): fails.append("naming") +if not all(n.startswith("Rock_A_L") for n in names): fails.append("naming") # Einzeln (ohne Nummer) for o in list(bpy.data.objects): bpy.data.objects.remove(o,do_unlink=True) @@ -23,7 +24,7 @@ s.batch_count=1 bpy.ops.object.generate_rocks_batch() single=[o.name for o in bpy.context.scene.objects if o.type=='MESH'] print("EINZELN:", single) -if single and single[0]!="Fels_A_L": fails.append("naming_single") +if single and single[0]!="Rock_A_L": fails.append("naming_single") print("LIGHTMAP-DEFAULT aus:", not m.RockGenSettings.bl_rna.properties['generate_lightmap_uv'].default) # --- Bake: nur _albedo + _normal, AO drin --- diff --git a/tests/test_erz.py b/tests/test_erz.py index 15e02f9..b0c10cd 100644 --- a/tests/test_erz.py +++ b/tests/test_erz.py @@ -34,6 +34,16 @@ for o in list(bpy.data.objects): bpy.data.objects.remove(o, do_unlink=True) s = bpy.context.scene.rock_gen_settings +# Auslieferungszustand festhalten, BEVOR der Test etwas verstellt: die +# Material-Zuweisung muss standardmaessig AN sein, sonst kommt in UE nur ein +# Default-Slot an und die Konvention M_Rock_ greift nicht. +if not s.assign_material: + fails.append("assign_material ist im Auslieferungszustand aus - dann fehlt " + "der Material-Slot und die UE-Skripte koennen nicht mappen") +if s.name_prefix != "Rock": + fails.append("Standard-Praefix ist '%s', die eingefrorene Konvention " + "verlangt 'Rock'" % s.name_prefix) + s.use_modal = False s.assign_material = False s.generate_lods = False @@ -110,7 +120,7 @@ for o in list(bpy.data.objects): bpy.data.objects.remove(o, do_unlink=True) s.batch_count = 2 s.subsurf_levels = 4 # absichtlich duenn: das Set muss selbst dicht stellen -s.name_prefix = "Fels" +s.name_prefix = "Fels" # absichtlich abweichend: das Set muss selbst umstellen s.name_form = "A" s.name_class = 'M' s.bake_ore = False @@ -140,6 +150,12 @@ for ob in bpy.context.scene.objects: if max(erz_aus_a(a)) < 0.9: fails.append("%s traegt keine Erz-Maske ((1-A) max %.2f)" % (ob.name, max(erz_aus_a(a)))) + # EIN neutraler Slot fuer ALLE Erzsorten. Die UE-Skripte mappen ueber den + # Slot-NAMEN - ohne Slot legt Unreal nur einen Default an. + slots = [m.name for m in ob.data.materials] + if slots != [rg.ORE_MATERIAL[0]]: + fails.append("%s: Slots %s, erwartet ['%s']" + % (ob.name, slots, rg.ORE_MATERIAL[0])) s_hoch = max(v for k, v in hoehen.items() if "_S_" in k) m_hoch = min(v for k, v in hoehen.items() if "_M_" in k) @@ -153,7 +169,37 @@ if (s.name_prefix, s.name_form, s.name_class, s.bake_ore, s.subsurf_levels) != m % str((s.name_prefix, s.name_form, s.name_class, s.bake_ore, s.subsurf_levels))) +# --- 4b) Normale Steine tragen die Sorten-Slots -------------------------- +for o in list(bpy.data.objects): + bpy.data.objects.remove(o, do_unlink=True) +s.bake_ore = False +s.name_prefix = "Rock" +s.batch_count = 4 +s.assign_material = True +bpy.ops.object.generate_rocks_batch() +normale = sorted((o for o in bpy.context.scene.objects if o.type == 'MESH'), + key=lambda o: o.name) +slots_normal = [[m.name for m in o.data.materials] for o in normale] +print("Normale Steine: %s" % ", ".join(x[0] if x else "KEINE" for x in slots_normal)) +for o, sl in zip(normale, slots_normal): + if not sl: + fails.append("%s hat keinen Material-Slot - Unreal legt dann nur einen " + "Default an und die Konvention M_Rock_ greift nicht" + % o.name) + elif not sl[0].startswith("M_Rock_"): + fails.append("%s: Slot '%s' folgt nicht M_Rock_" % (o.name, sl[0])) + elif sl[0] == rg.ORE_MATERIAL[0]: + fails.append("%s: traegt den Erz-Slot, obwohl kein Erz gebacken wurde" + % o.name) +if not any(n.startswith("Rock_") for n in (o.name for o in normale)): + fails.append("Standard-Praefix ist nicht 'Rock' - das bricht die " + "eingefrorene Konvention und erzeugt Asset-Zwillinge in UE") + # --- 5) A ueberlebt den FBX-Roundtrip ------------------------------------ +for o in list(bpy.data.objects): + bpy.data.objects.remove(o, do_unlink=True) +s.batch_count = 1 +bpy.ops.rockgen.ore_set() bpy.ops.object.export_rocks_fbx() dateien = sorted(f for f in os.listdir(OUT) if f.lower().endswith(".fbx")) if not dateien: