7U|=HPtxp+NeX*;C@U2yvB)mI;~hQs
z5gRdoOm7*+z}tFoanD*jizT!j5}M#xyyMXoiDSPar!o#l_O`mZ#6N$I_%&SgoNR<%
zHRNq>?m@7Fv8gGK^YfXrgObXmWP7{0G&78hGEc}9+Ry1k!2i~$de8fDgkWf_F<
zTz5}PYiHKG9?j*D1@p_{R!D(fH^^vBqF_;0E?Li(S6AHw`X2k5l#Ow4iQL?y#`RazxDoMNlwXu)nq>3AcZ
zxAEpFq(^P{OOkym1k$Z(-kghvU)W3kWZ+%$F|kdx^Bb$97sljbA^e~o>{?AOwu}4a
z6@;Zo{Vu)`KtZ~eM@
zII)<0y|8dVepiP94#_TDu^&Q0n32zoiSH;RHjjp!tBc6-c8;8hyZ@v=*yx|MQ2YB<
z6`LBqZa?Z;t6o~I4jkx9Zr`?-bLO$xcuRw8VB<>^6J5Z>9BVrHU{`Ttq`{Pb98c+B
z>k=4n+$dF~Z22;w!_FM7WsHi*#gdNP5=5)&;dl_luvq&Bb+_}q=c6MQr0{|e4S^R1
ziBGOhwIjPcN`8K&i4x2A{!d3hiSO%yIt>ZEM{dF}cUO`FXp41CN>R~bZyAR;@Su%4
z)5wUV*?CRL8q~wFu`mb085WpMh!&C=_xx0@)%Go&DT3xj86Jf=_BA-Fn2Z#pdgQ*c
zdLB(GKm#FC$gkGcvZ(&v3jNJz&p9|o$1p0am-y|d?08%BK69jHuQAviSO7ew1nTa+
zl{^rtN20$=5esQmGBSj)l4h7cl-^C3z51eduX|0juNyVa3C1wrdPTQaFK2ZV{Wy?YRU9??7-Rq`J5`I|FAeL&eHo
z!oa`)!k5E9-Yy3R@pz_oaD|&rd|oq8M-L`DJ45O0=+I}GX$x%u(6TtsAm)oma^wr<
zmO9O!Ds&(cN*segQ%>7e`#c4*ATG6zjv?D{Z*M%lo*#Yl;o*#Q-g32a**-xhT#MUIiZb>zhTJe-3>_pnl_o|?M+dX6idubN}5wx
zcpt%~MR(bJlpO!);@P>t)aQFEjB;|$C@A%yV*nNqRs0j5>>lge@INk_e|V^X;R1-v+1WYp;S1nT;rOw;wN+uig{eNZBoi}T
zFSNL_Gc!Az_UK{=hg?`%LSmyMqTl2C9i>A3)&v1wb~d&w#hv3APGK@(LVSEUsQR^P
z=P2QPkBJ!tcpWEWK0dOG9-+MNi%sFm%E);0j_UWQsQ&2-lFk4iBHq5G0}IeYjOLM%
zPlSa0ixCf6mclhnOaP5NY$mB`*JcWOv%9IGB+}->7R9Y4_$!=I3l2&CetyK<8IGHe
z8aqv3K4DIaWoqo}%TMHg$$d0GQO1lg==VIz(31fv`g?{_6>f3y5Ao52c9&_vxKN
z;ul&kSwf=j+U}77nXt4$a#mKyZx@yEk+C>Y!6tz+6-F(=mqtdnqBv3Yu;fqadPWpmn}@b&f0%DSDWV63T`fg{MC
zYyR33a{q*rrSlX9Mn({b(fc+AD(MBjPB#tjeY`%(&3>w0p@U?9(
zM)j!(Xu?Ylv|--(!@$JJiH+AJP^ImjI$P`E4F--CfW0N#Z6Iq$S|UY~DzvfjwSbob
z40zxnk&Y7p-8gtvv$GCAeBeXAetYGwda84$!!}U$aEHBM%`AP$EK8TZNJ*UA`A2>B
zrAIc2;6c>2YuAWhSf)XW9W3=qR~j0B8;^5Z*^!K&XF=x8<%;q**gC_+SZQHqp3SiV
ztpYOpLbelg;?<3(|2ty)cMF`dv*#f8TcV_P2Ev4RNlucN$U0@Pmdr
zB`@Se;2uUrbpSaDXfZ*F?y!x4#vS_MR16Qp8ygGDesv^hdAT|8EwEXN`Pu{_t%?0h
za0rx>l`SqT{M`6>`Pp*--wch6V8I1h3y1liR6jp&92^{w*dx#rFyE~n4|W7aMd7pH
zsL04xZKlqCY8KWj?%gFRj$zmMBr&ff9#_UNva%+{&NJ9=eiaJLfD_u&d%{*$K-~~>
zSSyT2;^16;5S1{nV$grN&Vu!VxK=orEHoTKL(@^k5y(`w!^Xx&!0^>8V#Pw(+2)Ih
zz|U6-{I2gtS6*HYE)p`~$nbD!?uqhpr6*6cGH!{fejOVl9?B2L+iL7$o1!Kg)}?_vF+vFnGNN4mT-T*+HIx{TrwVH8nNDz`}C%5&TMH
z?3qPcN=nPHNg(lHF{^Jw+nac~P6S-X;{{=tAM*e!l$<hXj7o?v4)7(Q4+|w+8FL
zu)xUZdc5miSJ%uQus&G@i5M=mAF&{CJS;3ph6;Y4roe;Cb;{z&cQR5I>m?vlceX7(
zJn$gi30|lSfpYWd8OXd(iYR-N)C;?=pdUUX7_pM2Ayy#!OtFL;4+RCq?c&!{(eJ}U
za#J;KW^m;KiYFl^1~TQ)R;8!+7{4@rZ=dV!4TFvF%1f$HwHo3~$(B*$q2)mhfD$ds
z;54uzoi2m@cdDu`#=zJZ((=A1BxpdDgi94L%kQWMAb>^kMwJzXqSdi+@!L0VC_QRR
z9a+l@zC*+#YcE9e!O?7)_clM=p52`57c3zfPJ5K+=O5t8Cb0L29q{|C7PBi3;%qbw
zj2D)F@eIQsB*Z$E%@aNG_eHP$)!yiGxn{uytNr(NM`N12#s*M4u^#(Xv$2zHNj8k+
zV@9#<|1e5>ED(Rbs&`N5f|n8o!wkKz0Vk!o5V3g44PB3ghifq@mX~vR@~23)IG*U<
z4gDM;#>OfN8L8KU^%x31{s+C3{oynl+8`W1{0EKnf22Kn3^?R6W!Lc5AT;%o7fKsk
zBfdSLXaeVNtWs%A(9k
zQTf>^TJ)mV|9?_XLXCgX=RSHFKj}M4ZL-k{^#_o_Cq^E1$s3OKr{3jXd_CN6oh8{4
z71dZ3^Z6N>aNArqa8dGM-UI}sEWdWGeB+B-NZqGJmr4jHinnhyr0}V+g-}{Y&k8o(=P!FVh4QZ36Uk5m~RvjSOmT
zvn`Xtf+zwpl#kE|qB=DSUUYLl-o5(E`gA+E74Fu^SiAcu(Ms8gbWFP1yRYaQD`&-{
z>gd(07uUEGRt)RCM#;%0jBC&g4zg9s5~EmQdIXFH{9MJJ8XB3{_e`ZPa@1=aH~&-<
zFrTK0SJ=8>6A{7mm6HyUl*gF7r!V`*{wMlr*akd_`2{y@6ZGDa8%d>aZs{)GyzaUY
z-l!=a!{IPhjRFoaxQ|y8b)}^8N)856dBD3>WWQDS`E!!Q@2klD`}ZriMeqm5>O61p
zoNj_^6b=titD>*(e6qF)lHZp`c;q2R^_WwzP|?>+#70Eu7`z~R^vkU|fL`70tTQ@#
zq6>p8ti7;_^50aCbb3~1<_nu;1rrnh6v+h1`*?Uw4Jzqb_ZcF@+%6O`Fp|K~{Mz#o
z8ynE^`n4Y=>E!7j&%{SXIlXD=E6|hRu{Q^bgCV_eX>~N@UCQBe&WeZ##ev~l^s2{I
zX=%UewPvDU)J7&XHwmiOxZ3=SjzaVe47yrdeSOP&`uZjs=e9S)7gts;8u3UYh?a@1^W2DfH~A|uHntI}@BSw2U(7{0UD@ay7&(MtEFuI_%a
zs1&@V{{H?z79sDa>)xxY#~mMEXJ&qfjXm4a(q40FX+Od+{`s>24-fNvN5tI10zl6&
zt}D>Y!wz=!s;+`Ucu8>^^g6)qcOBWNDrx-f!UCs@wzkPCr(8+O)8)(y0Am1yK3y%K
zhfNwHRyZwYu7!%wVxd(ZYB~uBz`+mnL(2ot1_xPXo~TmNy7vuQ^=DRV2+UFP<<(*wnV61^U0Lw*5WniA@
z!ZI`4*BCOo=)TOGc&CC<@Hrk{Nu29g`+Eiu^MiF~EM@jW)qH)518+B<;Lro7Ko|A(
zYt`?q+9jrqs5iP((Seu`37I|Gam!MzSYOGtt2$n$!dU1|;0_hxHXLaA{8@`yt`cm)
zRR;ZDV0qCv+Lq7AAnuIg#Y6z>`!hek4Mj8AYG)F-Uy3vv^Ha!|s$Fh0YHmfc8bQTK
zU7Z{R30I#VN5P8@XcRC)i2J|zAn>v8?+s5uV(DoGMWS3LhylUm=~bL?^;fBd*6b{H
zno3p>K<8n0U(KJ9rLS-9$0Q}~6q}5*n>y!0UM=gM>v$bVXL&hdEY`+!pta*c#P{#g
z3gHyEUmic{E*Le26wlLB6;;(7AD?uf{XTtC9vTwp?4*7E@Hc!uPeDaZjl&^-9W$A)HhKgZR{Q
z42(>bb{jm%kK|ID`tidk9*rKPSL&Q#jbzo4bn8Tok^Zc&eq^FU^61)lelWp4BYj#;#_g6=@B0@up
zs?J*6PPN2k21p`n^w4bHktAyYa=6boO=Nm+o+1S>T2bK_&+TC=P~@+RBeACt-wp_r
zK-|B7Z)VR=n^J~GD4BDIg4g6BXJ(m7J4)Gd?`kIHQR%K^m+v0Bm@RX(xapO`_y%4kg_Rd42)v=<5Fm()-^84w}
zg5E^>`T3;{gNbEe^I)tf_YRR^|ENwvFWN`&&RYqS8^JhSbo__itjWvUjDWT687F4}
zXy-e^EkILx&&M8Cs(U`AKN&C)@WoNQjaHE&g>z+S=*O+uDki2r0R$BA9Xlcl9?`8kj;pyD7|7Ste*+JfCqIu(hPttFA)E^`SHgjh`5%a(
z>JJ}!r+h_{>iZ+O90&vT@Ug8F$qa$VwSWaH+j`=>Rv*n^DaqP+jvyGXO!TX>Qs#t7
zBL;TGO;c*yT|q(UNpW?p27Z82~O6
zLrS-Qh3%S;Z+Tzw&-8Skb{8&3NHgfuXpdBOh)GXN1J&)}ciJd$zNZHl7ViFfd2x1v
z$-*jJF(P%#qt-AkAYEb(8bxThoezJhcfWzmavsR`0SXVaFO2wptVTlw1O#7R`Fmrm
zy`#L3NXp1S*zkQS)UeP{dnXBaI*9ws%*RVLhr(6{oXcOoKJvU3$g3dffiqx~O}yxF
z;{fbZaE7K=;~Ksci+n2YhI@kE)%6Ng-w?!fm0D3SGBOe)!NK=Z#G_#IeiZa(eL}dS
z<;@e}{Q5K&JU$S`oNhUpfF*`$+ZhPBeNGq~cwv`5-rGQ4LQ?eJ%J7)_W{$+Qgz5)b
z`ssMq;pV_F97qddphvQ3D8;@!K=r>D+vIeiTZ
zLJe%@)^)i!E4idXLHz*&iLD3@7!ZI;p(6y(2zsMBxqLJifyMR@+oBMPCoH+?qi9IH
zBxPbE9q?;C8PQQuRW>V}11lg+0!M2QnB_Bp`>%9l%{Q6jv@@M5vr^9V%&i_1ta>DD
zd9p82@ww)UAY_xnddQdgv$B!}Mk+atle97QPZ;!~Cqy9S00D4i!SkCRp?rdK+*eHn
z;t0v^eQ8Y8>l@pt2_2SJ4=SYirqyAmoR?HzJD194Bo{wK_URuM=5gnps#E}|X}Fxv
z&d+#V52tTVz!g+DJ-kbMq_sni;&0#Jy6mA+QE*qFT
zKK6nrhnVLUEEE*-*>e5*g{jZWm9i(R&y1)un};*NZS%XlL_|cS`gD6IQ$ES{bPKXO
zN&xj3tvINlBTVQgIBfjHQ?F~axchNAG|g9JEGm2d#F_nJBdTzQeje5ML&e>DB5Ktxl#W+vM}NKAqE1Q0R5OdS+P35Bv-FMIJ~S9j8G&
zPmiHmH@lT}cJpeuezmAkl|Zq}jl!
zBGt4sW&p-&A+YCPY))kr#g&)*{LbEcG11X+rjI!ypIbn^;=FCcJI2N;^J=(a%woig7Q&ba~G@
z+Sc02RYqR;`!eCe>-GC&aqHc7`+|NyQ=7P92ue@5>0g}r0}|ML9fN|lex{{;b%d}Y
zk+~Eobb%L2lq`^B{GEyli>@Chq*SoMLCcwkm-!vEp%CENVS_b65ts^SAZchApPUS_
z=elflFkn$q7y+2pDRM7zc6Jti%=zK$!#Fb&4aUps6M8@5`8+nJYQmzT>NWF*a#X{D
zwqSq-o(C#L;J0L-R0s>UG#j84iV$<1X|T|5#F7EFrau&HZk
zxO6qcd()qKGF24?Y{GNHZy`{dQ189;-zb_ND*+eSL1YH+-@imHFqBn*0!ravTwD(f
zl5@q!K^-vg9j3kEYQ5mKtifPJcxDigFpysd@~HB16>$#J%!Gv4F?kx?(Xp}P#*>aX^>x7m=OV0C?w)9Ee#Ief@Kb9v%luBWpl{HK&~0Q
zM7p|NbIY_!_t6n+4uOJF%Dsq}R3?3cgQ)Hx+mdqo4*j}U+-u*%c&E#NkAd+def6ls
z_3>IL&=8>QP0MlB)?j=CR&Gz50g_6%r-2*+O0iAk3gl{d0zRL`X<}<@2te+Y>P2-U
zqZJqqmW-+W_dl7{g1A#s>oUs7$n?8(L{7C@%Yrhn-8bCfa=PlCni@7w@cP^F@$t&A
zmRvSE%4cgEqE6j{`ueF9Hes^hV!OX^lLO-khga};kdW{KND&+yjNw5lyocQ_Zxz?m
zZ6>IyYGS;~$`P|ZJw2*%3v&5DyIqh+0L~{i$6b8G2``ZeLQ>K%0E;-k_I$r6Iqrj9
zbzyfObuSSN7H2(`N@rn7Sl9Sc`&mm^;DX`fi><2ih>1BH%ygscHq&5iX>QK_@(yIH
z3Fi+D4X_#fm43=lyQlU~r;`q3f^N}Nf;`0HIR_FC;S7*<*jbgM`UL`k7dZiT7aPkH)(**3&eg18?VYWyrf%Q<
z(?nx_U}_1>j32=jVECX?_$OB@U0`zmx_u2XH-}BnCJZayaTn#
zOqPw+0~7=bl3K7tvp=L@*z62oITk~?R&-1Zc)Yk-tQBqcl8%oZ-A!qcsei-+Vv;?p
z_1O=fQzZHO;3#{#ZP>=^n574qr5oTAuZ!I9eEezcOed8rC
z!w!Iwft$Mu(wCre3kVz-YJ6XfVbVZlR1C9TwE_)bA8+4$PL1UP#umCqz#Q+kXUKv;
z?GKI8eW)=sn+k|yrw8}EctM2IMlKaH6}%dm|Y26}Gfvz=U{vrv?OI>`5gR
z7k_`7nwrA1*cH0*6_`?3zF)t3c-0*y7(gZnfUeTf0R(hBbv7}PA2Le7<^#(C%u56A
z62s*VhG^W%E`_J3%--$Y2VOeuaw;{%%CfSfnL_`IiwTPjq=MK>adM+I$4Cb6`n-Yy
zXqQ282RXs{{&@QOX|rHj$zH|WLT~&3;%FN6nCixf&^a2j#jZo!}Yn
zKDb&IU+7P9t}k7Uk~rAx#M_F8;Wg7SG9aR3VY765!BP?ccv%484=mI}1(P(uzjFs(
z&Cq7;d}|wre>^06`&OURUv+5bM~KPgUY7P9Pcnxq0!INpWOvu@C}_P7!{res{J%PD
z{=>DxA>M3QlyR0g58v#PZ-E@7OAF9{@HR=rhnrz_U54%2w7}B7b*l@3K^N_e7DA;2
zlUlVqmF86M2)#+Z_c5Lk-};}vz}P2fA8X^WVMYiooEjU9!~qx3V*~Ai7c{sJ;!Fa-
zdGkXKTCgI3ubCdApeH2@DY7nRhG(ybDntrq8}QUEtkot|Zss8UJ0P
zD8G9xrhSk?SUOpn`hMHwO|ToQLAVrL+_+z8Lq*P;B5|OeW;t^ZfKutq!72h$ezdCl
z1BPHjl+F~UEAi0dwu`(h2E1&eusy#du&}|HNG8mtET37~Z{4ApH)xn2mUQ{r1}TXH
z9h6-MbPivS#bu+oqlZ$qDeu2(G8)Q*p8i`4@P9L7{cm*C0N$H>3qKDyDqHBwDRLLR
zdH`hj_Rrg$d1>OIci5)`zUcp?>YDsl%2cW(c+a98D;)QzuUuh2cfNC=}g&y#%8}$O^54C3JG7S|K(+i6NE60kXBu$QL&W$z6YuhxB*Ku
z)E@kbeo?@>6h5;-0!-1J+x9S;RP7CMBuLtWH}tlzIB~Bo%MSveXsT=_D0rrM{FTbJJVgRNgFryo@t!z$zZVyXhH$g8cp7-{y5og`r
z8y-i!3Mf!=irqu}#S75%z~m1FPbd4i%F4=^L>!CoqJ_2Vb!?s-&IS%;D?^bwMBF&;
zuP%Ws9h?ps=}$#*PmYfvtM&mQVPs?^r0$SDp20`NqMrlso{WKk0h^6{4wx8^sS&YQ
zuBD>kbKxXDt)#TV!f(y9CclpvW8VIM{WW9q(jJ5~rposS%Yz?%27&|SS6^~2c;i-v
zlcpSvtj0ND!Q0&0f=Et?wtea9x(=QSxm;K7Cr{4)wxR*#4ZH<7U@Q(?=ieI}6XHL2
zg4qGiG||yn;o5V>YM3jA62Stv=X7P5wKP%oGY%JtHHFE5o^7UOCWRg^GCcOR1;;
zkeHk=9sdlXBy4P0Q{NK75CUcJ=jR0v9}0pa*B717*w|WF_%2MK>EIPzPftIXnK4D&
z)6+-2?kJ~;^J@T@r6ksY16r*NNpd4vdipQ^{vbUvak@KT7|KuDY<+rlX{qDCyn8k^
z=UIw;Qc{-{fZ56xwY57H`f`^z@5V%#(`?h7hh6GCE6~RT@uVr1d4ha=3FIq92I3%+
zFV|^5$&~YaN-;H>uLCX!k>s}8S{_D52gtkf^6~=X4FQgg!(hfw`s$JMNhf7cXymH+
z*xHe3>Fc8*Ao7P?XmB}5_0Pk>ddgv84Q}m?3|S3!(+Q}!FoE_98=E>%HKAPUuE6`z
z6kwA&)6vys@E}x4oa4m{Vh(HVwK1D1=K`m-vEkKKL6Ea`MzNDqOx?VBliQMP#-ClS
zeLbOK?bDHnK0E}lAa*q?$s|8k7Bd7=#-^;ji>w!Vm_5i
zs=+glfs9n0WI~8)dV2b0r{3QgCPD-ZSg#YCD2n?NpuCw0-|y_ChSPCZPgIl|+P3Ma
zgal)!%J*X6ixMpJVt%){yN|*(1LPSrF5Upr1Pj%71yfu4geAI+P62br_#>KDbHaN#nru@Ui1U?2dYnws%$pB^z+*qP;~rvskI
z>b+xsWuiB!`L$py3A3*A`16DH-&?&x%Fv9#Ws@-l7HAevNZ3*)GgQc%k%idG1fTWO
zN0Jx4JCj>eEq>j;{G=$0?`hBWA3j_KJO9kg%#}Y7Yz)Hd)>@Am{lVVh;e(wWB6ic&
zSnjDS2tXf6zsqsh^}4dyr&Lb%hB;YTF9YgrbAZ&XzoY~pvv_0pI`eT(+#)7R9o
zkdX@S6apP)U>_RmwUBXjt^J7lB|Td{x9Rj`3i4BSY^+CMupNjO2O#&?FC^pR|3Dor
z8sC%)&F~O%fb;=Kn2T|Y2@0B=4nQQ8l(-DPG4n+ev$my|mTvlB8mJWN6YybyjA!uM
z&rxG)>J^V0ZXhzc;tv1sF@`h;y!$K?nW*9#e0-DB^(Sj3;3=XVP%hIMsZ$Y(#U
zjcLZ(rY1HDijeLSpiqIOMfaR&Yg2kenWPlYBL>-Qdxn6qB>VV0lT}k!KWHY=YxX1H
z1^zZVx}!LCXd3hCo-((1bGOdE^Z_Q}LoU!m(U4B3q-gh%Z5$q6Teh*bCL4?dBjesM
zcFl!r^;$Kcc1LqzD4?x36oCqls;ZdzwJb%ThWqV
zY5dsOT2?zX*M`Q%&=I)FqnUKJBbXQ9f+hrZ+Qb7Mr=~_+UG286siR}FF?ps~@DXoJe*WSWru*}q
z_=IcpB-?2hL_}S?B5$i9Smh=n`aNslzMx=isvrZUVNvAUjX!2cNGnuuMl&_qtttdU
z2#6%eN(#@gL;%3rn)L=+lg0k$T#`_z$*un&452q0qv8E2!P-b3F$f@~%bb9(i?jyb
zGXR8HB~$0|<>ewP@^DCpfbh$OuBm$8bq)8@cR$mgExsj2bE-oq`1P4$sDM~dm3
zO|jGK*K>JV&5*nn9T_PSI#J{12Bj2l-v$7)C&9%L+KBub7`TQ&h6tqTvMPJl9mBbL
zu3f!%Y-M|nnp&Q&1UdpOEg_UsV$2lk2B8?Z4}zEmi+g^#ml(V&4GR;pwG9C0FEw=>
zlTJPmK}wOf2k#^TGaa&XbJf+=;UYXAl$VFjuYbZd)4IptEGknVBQ(;`@QOS{YVKbw
z)^-E-4TK{mLB`Nc3=ldQiJp2b{^1He-4uz~RjZTz>|)^z<^e1rWy`XxtSs%mAL$U$
z4SX{xsVLZ-0awF7_%Qn?w?Ks+1Epb?zCX8s`_E|lNRdQD(>LRyA~z5}-fQ4e09
zXuuW%^z#zOPhj%u>r4Cy=U$y%iEq))W>TbPMU#{K%BkB?3Spo=ueiXPVipger089fDF>~`+cwIk<=($-~Pwx
z!{aEE4S+osj!k2Gd;iEtS`;lfmbDo0u_<`ok_ZdiF)=wjZUG`sIEbuB55eZ#EY|I$APO}FF
z3dhE3RxRg5cK^0c${a*@mmEVZB19#;A%nEW7*=XZ+BH%{TU(n(y_)6e9N&pOoS`9C
z6dl2)c+0@dEGq24pxN-*%gd1p?_!pOI&EDRU}ja--w>UJygxm(faO)HqPd}gP5}$(
z2NZ-P&HzT1l^N(kmvA}x4B^&K=W+l%yAZrdoaBX?<_0OJswLawX3aYJL$t~~N=3^>
zeSN{jF;n|s>@rYdV=tkk>8LTEo&eo8R73O9(V0Rv+P7AvEBXiv($exqRLoBqcCs$XNeVlBS-x67+`
z)>LYk@Ies;&h8xnfdYylXvuT&@o7CdATd^kIPvQ766}pBiKF!jZle7FyS3wa=wzrl
zcl_wMGBa}uYo1#5L-9^dXd#80DGrQx&9m^X0w%7btqo(2uu){KUYyJ0dp@+Z-jWA%
zuBR62nwov^O2ZPSR%VGK>m8}chxJK?4iAm0*yO~I3iFO?q3c=A`N!zh$};-lNS!j|H--_7AmnF%}*vJO^}rhBp2U?aMNxGLK8Ilqq8*woy`5W(9yjx
zNlf4WIypPI1Q*o@cpm5Vv^XEG{|k4Z5+L
zO}A5DvUYe%FjS~O??8a;7sn4IIFk`tl+iQG12ML>=6x3_FC|(TJO>@cBxyw72I%jEtyzp
z8MO^pSk%R{^zkkCzxX>}%uXj_uG?6bO5|Mo^M|3Yxw*Ts(F8yoI8c96B~I0!1+xC34d2BcDAsf#Jo$NusOOq4MFCI5TcHS95^+AWK(O
zMWw2e+}`o+&w>Ig3ybU=R~Cou0eANZ7$65%i3!VLSzQCJ2tMQG1rT89Z!S7MEVC+{
z*y!knX>%~7gE$4UE`T3_Gsem^fu|Q8&X-2bytI=F{f|q!XMkS8GRDd(982}mM2U9>
zps+iHEQ=fG+7)Qe9=#_IYtPOZQq!A#np)O%3y*GlJMwEx%wWvleiE>wF-7<(ac*vC
zGTr5)0h<_w>q}Ih;y5iptT0*Z((&c^85b#iP9~o
zE*6=)Rj~gD&KL*;3#`Hn428q-&!E}_+B;tH@$vk+D6!j+5?6I1{^dqNVa9*e2kY9^
zxu+6S+gOsf&^}796iA(fE2MD>(Y
zgB$f46(8A^duU(XgUJ5!b)Du_Ei^?VR6NqZZ?h1nXGI`s09-gz1$t8ei#BQs3k#?B
zFPWFAKu8x@GJbs!faV0tvWeL(YnybINS>fKg<8#=V1d!hi+?0U7gk|5eBBkp*4iNLZ_rV`uCJUnu^0+9mDnC9l2u8xk^
zshVM$M?pELtE?f{($%(WL+e>Ia_O#f|N4&*(rXP-Ki;Nv5W
z>J)rId{6kZv;zYrWm;}-ZrM>@X5zO{ld$$M&X|DS-d=Ur^n>%c*7osl;oIKHUq@`fb4C@(`n>v{ZoxgA{FXS$c0b4OF=nTg5$+>Ay{lOiTzKI9b00
zMy%FjL%qz>!Lsjffhfo{<>WBFG%l~LU2%s~pvmZV@f$Kj$^kWj5Y4e4L{5hyIxE0_2DQ}@Eb
zeumla@@JuKzF$P2KMZJ|Ept5^4hqt6Z09}S3dyZGH!B&3oR#VNIN}%EHr9o83r9yF
zON3p9&|eE&y6If@e_PnC7j*JUAmt%ab+VxC6
zWJzjKmXEJ@b=BC&h#3JhnMD~eJt?T))oQrw_i}@bdNs%NKvpft#B5I$W1UvqSWl@e-0WzXsd{WVaSPOB|@+7f(t$
ztH-=ZuXNS}pD&fHiAf2#eY#`0xtW=G63J0b)+L+`)7d(C27TUJ2e
ztjXU2`5F;n!hlaj74W;X*EioCw7rnA{<`r1j)znNn&lQ`IF$=r%`N>uXAqh!t28WuW0~a;5GF2!9
zcPVEN`TA~v1B01KE^+2<@ZXA!^_<)qHV%%qiN@K4zuTX|H)m@H#>@7(j0_Ho^@)hY
zL`@bQaDzdVUv^GTM_U`l&6_%JBkXQx(eNSX);;a
zsLwK4X2nTLDn%7a%zga3%u4S^pOBFU7jbTh{O=xf|50V%#Jc)9R@SiUi*ruj#J+y!
z#jYQzde0wr!Sinpyl`KCMmK4@(6#34t0kX16dJk~Ut<0I;lTzb2s2S$Iy=|(d<{sX
zoZqp!qFnMFDluZ7O94Ug6$+{BCQ+}}{`vDK{oNo(jBRIR(Qb8B6}OL1U~sK`)*HFZ
z3cQ$Cm&pedVePVt4wVH3Pgq&+{Eh&eP5QTDX(oM$0u3LtW**mbMb%`<2Fm-4*0gFf
zH)z!+H9aM9O_=?AraGO9>1Y3+#;!ab%C!x@91ab~I+n5)jj1Ecv1LiglBLL!3fT&w
zB-xj-bP&eKWQ!&<_LAtJA;vZ#TVk?AIB{g@*cwY&zq|9Df4={|`ORPNJHO|BX6Ct{
z=U%S+x=xg3WE9l}MRGx)L9hi*o@m%7mgX!ODcLD!EqH2-M{aFct++1ALOOl`uhD6zF*MzPeX#7RN
zN%FGIYRNsW*wYlHH`*ewC9W`g_ec%3%h_l{%L6@Q@GLOX(t%Eg_v@4auc7i@HUw0c
zhJrLOn2bCu$^1*u6p&bCcCjOYbyu+5r^}TP=fJ?hIe#IMTREg^X0XGOsf3VF;ZO?M
z@H_BP2J=RGb>icspf?OHYieo-GQ!aSdN^Zblqcj{`N771OGWGP=*#rEH5q+`caX&iVIqZORLC(O$Z(5BgBWlCPHBqSN(1
zeex^cFAnky$FSG~5^B(#EQo;k$-A!nmD@5oJv=CZKK=7g7H^DH6_%Q%6Nw`Oh1pBr
zHFNLXp->`^4Q}yD!X|0a
z+SX=%?i^IzDnGpb`1wMr@#{Vm`%xL;uAg!rOjfPp$0gUSX_qG#Vl$@(q_&I4o(;VZ
zPh~0&JWcG?z}Y4*o{{T1ecAs@Cdco8%(gVDQgKi4Z^z@+aSD5CIX%LtyWQ>&K0vOw
zrg$jj#>cELR|p#mVM{HsQfr&3)bYfwo`}^GX@(P%zXB}t(W8>`MpNQ7Ticf#`YGih
zmN+p3xh^KnT3N|=Y5RNStVisjA~M-G`Y|6H#kSPU^d&n-lE?|QpOMmlxYk2?`9c`R
zUqEEPx%Lok2uBu9qX@g#?y@$omXKfqds-eAMe^SA@0?L*2CJ*@&eL>AsV|7qlA}pI
z?m0b0kQ*9r81tbckU1+ovhV9%-JF$|(k)o#CyBu-m9I?O{jTRJ4+Ral6
z(UIKL{F7mikoVdkc@p8Ng_B}+gK&cN
z%dIGiyq$D1@$fX6Ik~y_rt+bYs#@fQ3)`2mNg0Q4I=tAKc*im3yz7wUA(L*J-ucsP
ztBeWp_U#o0gMplKLdUmH<$IeH6coH2dh_jDuz>*^VqEwKS(+c=WMf@@8yvc6x->KS
z`gO2xMOOP1%c&bTo;j9pjFKHs3P?%uA^?Or8OaoAKMus@uBiYw-PzeKeacHR2NWwD
zA!jiUY>smA@)lndV`-XNk$Zki9Jnl})pKBkyu3UXX<6B8?Svp~qF>#ZhEG+Xe^qAY(rR6jMNVJe^^Nn0m%DqM
z4}fPN03YJ*)o|mylSrc!amGNCJa}E*pSC0df~fP8tz2$yz;rtPt%kq4*Y(A$8KFOm
z#vbL?)$*>oKT|QKK!m~K476Z?Rkd6Av(QYWz-oUy9VB#0jw{#;19mw4YaO7oIy(c&
zjWxL3T=QZ<(oCqLR-c6aF~AmFb9Yx%TEgwD+gm_mwV&T_S}b<{0uiel-WiH1XN`>u
zPF_c!f9;wu5lJkJIQ*BJye-ymoe?c`J-Nk4l5*?$@NT){^-r$h;q@SoSW{zw$LFeCDRoENINW;{pkBNJlQLFHE!PftLfxhejIcdyQ3jGJ&f5hPqfN
zt=0fG)rtz=T*2gO@1ee-n5W>zs1hi-)g#StVPFtA$avc25r|IuJdA$6tE-|?M<&0S
zd!%vVDU}K?*lJVsh8zYDneHD-#1d-c03zie$y@{yD-HMW^HskZU79q3YL#W*An?3v
zit{9Yem=V3<6T!9;N1bdVTXzLy@%#!A2hG8+e0w{NW(l9Cq_;e&ACv*?z^g#T}
zj=Tp3-moKyUY?#%dF?*(WpTG%%m)r-pKSom0^`&)2w2m+VBZqQ1q2kD7hlC^i;Ag~
z*aVrHQJw0)UA3|zT7^Kf@ZfcEre?bPx-G_DU0J!ot!osV;jZab+zAa$&6T$RCKQGp
zz}v^iPm2W2nH{|o^|+llpuoz`Hd{Vk{mQ#5g9@2<{?8#epvAp8d>`QNWem>KawSA^&!s*!ru)q$H@+(I2YFWsci`eu9I8PUTq+-56=z&DmT<
z$L+ow>W%Xa_1JRhz8?1jdQwhe4YyGwbk3&z%_0{>X>9_=%IlTLKXbE)|8l<(yggml
znLBChaWqe$4N^p-EOH(H5ai5Y@Ttwq&tluWjipIIHpfay=
z(<`E)x|HKwE}d$c7Nsl6OV@v%9^Ts8h5ONe2Pm|Q^LWtXx-X7#!6)UuCNc?5B@3fn
zuo6hxL8Ue%|1>A3i7UC!TDP~)9kTTG^;I%#o-Lu&)~4>i`fYbh3aWu12KM68$Kl{B
z`EyBl{MUUm-Mtg?sm4(D8z>FX)6=_r89)Xu)g#ZZlvdl7br+n=Md(-R0)Yc<-d_tD
zZgdLS3Y1HXYgYREmldtdDc}SEU>T4`Q*@eS&NKub7w6~i($*TWJh~{CyKPdoScE;Q
zs=E6Ai5GP=;@fhrmiDN%HRC+~VEm6!k0IyLKzM6GdYaLZaU`8XEn64;)>D;m7~^A`
zo`N8(-%SkkY%qXt1R|{LJe@_wDGiI9tRJ
zzB0v9G<9_F4F)MKvJaKx5b^*IYgC77f|dAA+#UGYEYU*3!jfp&kw&L|h-}Ah81np9
zf00EL#D#CWMqj&E0=+YCt86CdwjLWd{c(O_##Ns98Gi+V$}LDI)fbP&669BMs%Hf;
z9e8CnBUZ|UuQ_$g@?*#QwEb5sJ8~@E7g$75AnpmWsB|^-v+7TL_3Bp(?Ni)z+)~D-
ztzh?<&P5%&C1-j`LXjG*5t
zg{5?slNUYOL|KuX9tFjT{o>;If1UtfmFnt~nQ3XPQ3GBiMbCepfWcsliSD=i)uF6eUx-kdM|LrO>VKd?O+9V#~FNGKnS1`4Mm*iOu4Rr&5TowDE_Xj_WLid{PtMg4o
z?J66~pHx%i{`3o3WuH(2Q}mcx>DDCi#M2iy`dXO;37)NRZJ4i1FPCF14DtU=|6hCm
b_gn8uS+B-Okth^h1YRbF<_6DCJIDM7YV*Nj
literal 0
HcmV?d00001
diff --git a/dev_docs/09_export-environment-copy-plan.md b/dev_docs/09_export-environment-copy-plan.md
new file mode 100644
index 0000000..c18c789
--- /dev/null
+++ b/dev_docs/09_export-environment-copy-plan.md
@@ -0,0 +1,293 @@
+# Export Environment Copy Plan
+
+Date: 2026-06-07
+
+## Goal
+
+Make the export dialog copy describe what actually happens in each runtime:
+
+- **Browser/PWA:** MP4 uses the render server; WebM records through browser
+ `MediaRecorder`.
+- **Electron desktop:** MP4 uses the desktop render bridge and bundled ffmpeg;
+ WebM still records through the Chromium `MediaRecorder` runtime inside
+ Electron.
+
+The current labels are accurate for the browser build, but misleading inside
+Electron:
+
+- `SERVER - FRAME-ACCURATE` on MP4, even when Electron is rendering locally.
+- `BROWSER - REALTIME` on WebM, even when the app is running as Electron.
+
+## Current Code
+
+Primary files:
+
+- `src/components/ExportDialog.vue`
+- `src/i18n/messages.ts`
+- `src/lib/desktopRenderExport.ts`
+- `src/types/desktop.d.ts`
+
+Runtime detection already exists as an exported helper in
+`desktopRenderExport.ts`:
+
+```ts
+export function hasDesktopRender(): boolean {
+ return !!window.ruwioDesktop?.renderMp4
+}
+```
+
+This is the right signal for MP4 copy because `ExportDialog.vue` routes MP4
+through `renderMp4OnDesktop()` when `hasDesktopRender()` returns true, otherwise
+it calls `downloadFromServer()`. The MP4 copy should reuse this exact function
+rather than reimplementing the predicate, so the text can never drift from the
+route (see Implementation Plan step 1).
+
+`window.ruwioDesktop` is injected by the Electron preload before any app module
+loads and never changes during a session, so a runtime check is stable at
+module-init time — no reactivity is required to read it correctly.
+
+## Proposed Copy Matrix
+
+### MP4
+
+Browser/PWA:
+
+- Badge: `Server · Frame-by-frame`
+- Description: `H.264 export via render server`
+- Progress: `Rendering MP4 with render server...`
+
+Electron:
+
+- Badge: `Desktop · Frame-by-frame`
+- Description: `H.264 export via bundled ffmpeg`
+- Progress: `Rendering MP4 in desktop app...`
+
+Rationale: both MP4 paths render deterministic frames through `server/render.html`.
+The key difference is where rendering happens: HTTP render server vs Electron
+desktop worker plus ffmpeg.
+
+Avoid `Frame-accurate` in the short badge. It sounds like a stronger quality
+claim than the dialog needs, and it obscures the real user-facing distinction:
+server vs desktop. The help text can explain frame-by-frame rendering if needed.
+
+Badge style: store badges in title case with a `·` middot separator, matching
+the existing sibling badges (`gifBadge: 'Browser · Frame-by-frame'`,
+`apngBadge: 'Browser · Lossless'`). The `.badge` CSS already applies
+`text-transform: uppercase`, so do **not** write the strings in all-caps or
+switch to a `-` hyphen separator — that would render MP4/WebM inconsistently
+next to GIF/APNG in the same column.
+
+### WebM
+
+Browser/PWA:
+
+- Badge: `Browser · Realtime`
+- Description: `Recorded in real time with MediaRecorder`
+- Progress: `Rendering WebM in browser realtime...`
+
+Electron:
+
+- Badge: `Chromium · Realtime`
+- Description: `Recorded in real time by Electron's Chromium runtime`
+- Progress: `Rendering WebM in Chromium realtime...`
+
+Rationale: the implementation does not become a desktop ffmpeg pipeline in
+Electron. It still uses `MediaRecorder` from the renderer process. Calling that
+`browser` in the desktop app is imprecise, but `Chromium` is technically true
+and short enough for the badge.
+
+## Implementation Plan
+
+1. Add environment booleans in `ExportDialog.vue`.
+
+ ```ts
+ import { hasDesktopRender } from '@/lib/desktopRenderExport'
+
+ const isDesktop = computed(() => !!window.ruwioDesktop)
+ const hasDesktopMp4 = computed(() => hasDesktopRender())
+ ```
+
+ Use `hasDesktopMp4` for MP4 text. It wraps `hasDesktopRender()` — the *same*
+ function the MP4 route already calls in `exportMp4Server()` — so the copy
+ decision and the actual route share one predicate and can never diverge. Do
+ not reimplement `!!window.ruwioDesktop?.renderMp4` inline.
+
+ Use `isDesktop` for WebM text because WebM is still available through renderer
+ Chromium even if MP4 desktop rendering is unavailable; there is no existing
+ helper for that distinction, so a local boolean is fine.
+
+2. Rename `exportMp4Server()` to `exportMp4()`.
+
+ The current name is now misleading because the function already branches:
+
+ - Desktop: `renderMp4OnDesktop(scene, ...)`
+ - Browser/server: `downloadFromServer(scene, ...)`
+
+3. Replace static MP4 bindings.
+
+ Current:
+
+ ```vue
+ {{ t('export.mp4Badge') }}
+ {{ t('export.mp4Desc') }}
+ ```
+
+ Proposed:
+
+ ```vue
+ {{ t(hasDesktopMp4 ? 'export.mp4DesktopBadge' : 'export.mp4ServerBadge') }}
+ {{ t(hasDesktopMp4 ? 'export.mp4DesktopDesc' : 'export.mp4ServerDesc') }}
+ ```
+
+4. Replace static WebM bindings.
+
+ Current:
+
+ ```vue
+ {{ t('export.webmBadge') }}
+ {{ videoSupported ? t('export.webmDesc') : t('export.webmNotSupported') }}
+ ```
+
+ Proposed:
+
+ ```vue
+ {{ t(isDesktop ? 'export.webmDesktopBadge' : 'export.webmBrowserBadge') }}
+ {{
+ videoSupported
+ ? t(isDesktop ? 'export.webmDesktopDesc' : 'export.webmBrowserDesc')
+ : t('export.webmNotSupported')
+ }}
+ ```
+
+5. Split progress labels.
+
+ MP4 currently uses:
+
+ ```ts
+ label: t('export.labelMp4')
+ ```
+
+ Proposed:
+
+ ```ts
+ label: t(hasDesktopMp4.value ? 'export.labelMp4Desktop' : 'export.labelMp4Server')
+ ```
+
+ WebM currently uses:
+
+ ```ts
+ label: t('export.labelWebm')
+ ```
+
+ Proposed:
+
+ ```ts
+ label: t(isDesktop.value ? 'export.labelWebmDesktop' : 'export.labelWebmBrowser')
+ ```
+
+6. Update `src/i18n/messages.ts` in both locales.
+
+ English keys to add:
+
+ ```ts
+ mp4ServerBadge: 'Server · Frame-by-frame',
+ mp4ServerDesc: 'H.264 export via render server',
+ mp4DesktopBadge: 'Desktop · Frame-by-frame',
+ mp4DesktopDesc: 'H.264 export via bundled ffmpeg',
+ webmBrowserBadge: 'Browser · Realtime',
+ webmBrowserDesc: 'Recorded in real time with MediaRecorder',
+ webmDesktopBadge: 'Chromium · Realtime',
+ webmDesktopDesc: "Recorded in real time by Electron's Chromium runtime",
+ labelMp4Server: 'Rendering MP4 with render server...',
+ labelMp4Desktop: 'Rendering MP4 in desktop app...',
+ labelWebmBrowser: 'Rendering WebM in browser realtime...',
+ labelWebmDesktop: 'Rendering WebM in Chromium realtime...',
+ ```
+
+ Badges stay title case with a `·` separator; the `.badge` CSS uppercases
+ them at render time (see the MP4 copy-matrix note above). German keys should
+ mirror the meaning rather than preserve the old wording.
+
+7. Fix the export-button help string `exportHelp` in `messages.ts`.
+
+ This is separate from the help dialog and is easy to miss. Both locales
+ currently hardcode the misleading claim:
+
+ - `messages.ts:43` (en): "...MP4 needs the render server; WebM records in
+ real time in the browser."
+ - `messages.ts:1153` (de): "...MP4 braucht den Render-Server. WebM wird
+ direkt im Browser in Echtzeit aufgenommen."
+
+ Add runtime-branched variants (e.g. `exportHelpServer` / `exportHelpDesktop`)
+ and select with the same `isDesktop` signal wherever `t('...exportHelp')` is
+ consumed. This is exactly the "globally visible text saying MP4 always needs
+ the render server" that must not be left in place.
+
+8. Update help-dialog format text in `messages.ts`, and branch it now.
+
+ The strings live at `help.content.export.formats.mp4` / `.webm`
+ (`messages.ts:1081/1083` en, `:1923/1925` de) and `exportHelp` (handled in
+ step 7). Browser help should describe:
+
+ - MP4 as render-server frame-by-frame export.
+ - WebM as browser `MediaRecorder` realtime recording.
+
+ Electron help should describe:
+
+ - MP4 as bundled-ffmpeg desktop frame-by-frame export.
+ - WebM as Chromium `MediaRecorder` realtime recording.
+
+ Wiring the branch is cheaper than the old draft assumed. `HelpDialog.vue`
+ defines `CHAPTERS: Chapter[]` as a module-level `const` with static
+ `bodyKey` strings, but `window.ruwioDesktop` is set at preload before that
+ module loads and never changes, so a plain ternary on the `bodyKey` resolves
+ correctly at module-init time without making `CHAPTERS` reactive:
+
+ ```ts
+ { bodyKey: window.ruwioDesktop?.renderMp4
+ ? 'help.content.export.formats.mp4Desktop'
+ : 'help.content.export.formats.mp4' },
+ { bodyKey: window.ruwioDesktop
+ ? 'help.content.export.formats.webmDesktop'
+ : 'help.content.export.formats.webm' },
+ ```
+
+ Add the `*Desktop` keys in both locales and wire the branch in the same
+ change. Do not defer this and leave the help dialog asserting MP4 always
+ needs the render server.
+
+## Verification
+
+Browser/Vite:
+
+- Open the export dialog.
+- MP4 badge renders `SERVER · FRAME-BY-FRAME` (stored title case, uppercased by CSS).
+- MP4 description mentions the render server.
+- WebM badge renders `BROWSER · REALTIME`.
+- WebM description mentions `MediaRecorder`.
+- Export-button help (`exportHelp`) and help dialog describe MP4 as a
+ render-server export.
+
+Electron:
+
+- Open the export dialog.
+- MP4 badge renders `DESKTOP · FRAME-BY-FRAME`.
+- MP4 description mentions bundled ffmpeg.
+- WebM badge renders `CHROMIUM · REALTIME`.
+- WebM description mentions Electron Chromium.
+- Export-button help (`exportHelp`) and help dialog describe MP4 as a
+ bundled-ffmpeg desktop export, not the render server.
+
+Build checks:
+
+```bash
+npm run build
+npm run desktop:dir
+```
+
+Optional automated coverage:
+
+- Add a small in-app devtools test that stubs/removes `window.ruwioDesktop` and
+ verifies the selected i18n keys or rendered badge text. `src/devtools/headless.ts`
+ already reads `!!window.ruwioDesktop` (line 19) and is the natural home for it.
+- Add an Electron harness assertion that export dialog MP4 copy is desktop copy.
diff --git a/package.json b/package.json
index 3f29cfa..f1d4de8 100644
--- a/package.json
+++ b/package.json
@@ -1,7 +1,7 @@
{
"name": "ruwio",
"private": true,
- "version": "1.3.1",
+ "version": "1.3.2",
"type": "module",
"main": "dist-electron/main.cjs",
"scripts": {
diff --git a/src/version.ts b/src/version.ts
index 8113aad..4754c66 100644
--- a/src/version.ts
+++ b/src/version.ts
@@ -1,2 +1,2 @@
-export const APP_VERSION = '1.3.1'
+export const APP_VERSION = '1.3.2'
export const APP_NAME = 'RUWIO'
|