From a9e1ef24593688189142e770ccd6a7311dcfdb9b Mon Sep 17 00:00:00 2001 From: watermeko Date: Thu, 27 Aug 2026 02:51:45 +0000 Subject: [PATCH] perf(stream): share H264 capture frames Route Direct and WebRTC consumers through one H264 capture source to avoid duplicate VENC reads. Overlap WebRTC capture with ordered RTP/SRTP writes and packetize each access unit once for all WebRTC clients. Add libopencv_video.so.409 into dl_lib. --- server/dl_lib/libopencv_video.so.409 | Bin 0 -> 348328 bytes server/go.mod | 2 +- server/service/stream/direct/streamer.go | 36 ++--- server/service/stream/h264_source.go | 157 ++++++++++++++++++++++ server/service/stream/webrtc/client.go | 29 ++-- server/service/stream/webrtc/h264.go | 10 +- server/service/stream/webrtc/manager.go | 86 +++++++----- server/service/stream/webrtc/signaling.go | 29 ---- server/service/stream/webrtc/track.go | 37 +---- server/service/stream/webrtc/types.go | 16 +-- 10 files changed, 240 insertions(+), 162 deletions(-) create mode 100644 server/dl_lib/libopencv_video.so.409 create mode 100644 server/service/stream/h264_source.go diff --git a/server/dl_lib/libopencv_video.so.409 b/server/dl_lib/libopencv_video.so.409 new file mode 100644 index 0000000000000000000000000000000000000000..8a5b71e0828801f01739fe270f7f151d3044fffb GIT binary patch literal 348328 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

l&kYsi~rX65BKR| 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�%QAGHQKjtQowHDUdj-J=UqoL5Mqi}X7w zY2D7q&8?%(XmJiG5&-`HT#! zZ~jX0s>Y2$@8!M6|3~BBCgC(u6Dp!!SS#*x@A2%|U2U73b%xmTG_S`TTjHDHbBT`& zRU|${EO)x0{2-4zBeHyOkHdsPau0*bJ+ou^RNaVQhiVAfL~2-uXv%A>HF&;jJs){* zsD`Con@om~OYpbGBwyl7qIX=~-24za@d>VP!kVD1aZS*=ymg`wV&yYI1S|ihej~xO zsZEUSaSAafsp@oo6jmJerJcscND=b!M%k?=HytEv$+>%213WMEOV*Gx*Qf3YR|;Mb zB97Qj3f>ke=yf!wh38F@mAtRHQ+NI<(efC}o^I~koxG9yJev%`$NR)L-P;)bG2BAH zm@W0)!j6Zh^UM~}*eBPzt~%GSs6+6AmLhnSRZMQgiDgB4ufQVP*8>;!Wa=F+FH!i} zUgj6U9^45#TdeCR3C`(mF6digS$cCt+u>yBc*LQB%xxn-EcI~8LT&#zLJu8nZN=Ai z*$iNpESB!CpD8khUqVUB+WuUeJApyJ9}l$ zO&+r*^1i?x)3k&5lEGbpYwebS7Fdl@xhd{ZST9*jsx9O=N?Z$?)gc2GTjH-WA{!E6 z&$9Fi=C6t5Ht9(2Wqa`c%j=*#8`p9)MH?#aSkUA_bz+95rl3BJ-AdOtg=@HZ(9v7c z?bdD6`{^?kWAuK|3NvfEg+R>apLR=Fu}4S!wZ%Ai$w zt3ogvMipO*@wWIaFqg62% zI9j#-Khmn|ZywMp%bv3TOslNcga?RSN!54W$%e(3KEN3S+)G=}W;nXP`^V-feEU}QaM(DeD@-%~^jaJO)j!|UpOeZJyFt)2` zjlY4?OqWuE7m~$u-uFw*R*)6U^n^+oku9`T4t-h;(-F$U`lyG;CaSOlt0slnnoY5H z1*yW?aeI05`;8eXHe#HYU~NoZH)R9rKQ?*Y^H;HM>4iHz=1ipLtdsBZm=#QWxW7XG zekGH24F25Ada1Dt9%;A8j}h#zt|izX(=@a$uE5r1&r$Nl=Mwo+joT=D{-XXH7ZF2^ZHNATmM@Vh6(`!!Z%%+UzyC z6FmG;&dpKL17CCedyBpZ`Y|WiPY7nJrw!-kEGOSj)>JceV()Ypq&&vSqdJ7V`8MAc z%>);JqC04Lh@a>aKH=kqweHd0DSo1z6nuVI;=97MwaJdQS{}1?9UuTc*U9mc!aY}o z#P8_ryUA??{VU3UeJ4l zM?d7y9BmWB*Mod-*kiYIUy}99!SwgX@o38m8_ceuLuZdTotHzxl&pQz`gL9&o?s z*%fwo!R>`N7PTyCywcy;+tPXC&h1-_sC#4vtrg3g<~YdVuZ~J^%%b_QV`6=CBnHcG z3TE0+u==HTrV~uX8BVSa@XEOW_Q{td#>6m-6q^Jx#UVpn~Me&i8!pr-w=ko(h5e*^aHS zGe(pqpU>Ww==^;O-Q=ph@)uYt(vjOjGw`RK8bydypb$zg7~%~zy25ps zuWnDbR6!%+2qku7r+t4sC4O0{y|DiNDsj~OqE8a+GcsxaENy|MpFOR<)PWm3cxgX+ zKE@N9-BN`rX$QXs^L*tH@m#eMSRybB(O%irMEpPhYCQh$t0QW|{a2CeYx@dyF?!6u zqwL_dGMzAWpT8FQ9FZ3&M{BdUE*n0%Z22o}`73Ps8uHrhDZ8~~&eA8-KX`Er@5+-6I}?1v_QZM@9dA4vKMy!v-jI0) zoRCfec$6L^8apSBX!f;gaf{OKKX87_xQID&yA|b+{k)c!%(u&oe?Pu%C2XIJd&XzD)&JhgKb})d@e<#rjBv;$YbAa{NP~ z7T+YmLhLzOlS?zP2;3g#=N9qKvj%hRCcR7%d5=kmw&_@n{I^h!Px$fyjnjI&f2G9q zc&mxuS?nnKQXZ#TYvU6v2nqq(LTx6?XTsjpQS-&xSnxhof3mHyKj2p=t`Nl#0BJx2e1c>OB(&EKpW_b(^u*r`Xp;C0OV}RFZ(G zq(fTC<%E)S6R0F`EjQ=7fQsjznoBei?%Q_Md`tUgbsbA1Z8R}l6ss#&D586^gF>llZT}3GeNHp@*-GNv7UlXJ@s&hp`|R~~IkK{Jt55OkE)TEK z;CHQTJR_>ZQoz#FFM7J9GbP5^vs6uQiOfGwW9b%9KCi_J%WX1v4J|9WS6>3tqrpb31L# z8_6*ZmM<{I!%t4L!s{iXC$eMC&FCBRu5o@X`Ud}X0a{=IQ)&orHfT9F9xv{%I7xZ( zgb}gX8;MFv5vaP``COdM9o=rRiQu_*jl;QdCRmO6`h4Um-9(&)%=}E95LN>d&zA`l zFH0(QSz$Dvi%!y81>V37IyRg@I}xd~)7POD*zp5rGY_@Y+wRJ>)OYhiOMT^OYC4UJ zD*0$J#v1=3e|e)iHGJGL)(+=&iC{~dX1^;ef|~g7losk>C(#%ru%!z}r~(bwU{TT- z^mCbRBGs{IV?6r0L$4FY*#?xJEPJ%{6cd$}Tz8fh`JV;erg2_LqkY*6jS*X4`UHmJ zirpytPu>sY`*2{@<+!JlBkIJh-q#h4mG{o|T?ZeVphQ8!z;188ZU8QL?B_=t9^rppEFnd_6^S#GKfb_b8q)*PBJh z+3`_+dubcNaK{b~)und;`)lR3YnMp} zoHg!0TXC}R6K3(!)^IY*agY~E7mOQ*ceM=GfUv*og^tw$i!uj$mNnqJGeYc(_}nH*(}F8KciN7{!!_bz4V)h&p7V1jy&i*FYKjfS0qO?N7l<` zKi9{}V^xn$<@swXw8W_py*KFG)ot0m;86wEha?$)bk0PcV$YfKvZ{yA8F_MMTTa}p z!RyrGdihOw24O9g-Lb}sLJ7(w3qcfFmL5uKAqgA#5dC|<6;_Hn1CrclL_+K>A>JV+ z6~XR`YUSJcfcKcr3Bc2XPJbR=7dxYhqY)nF7ynSw%khWl*gsjnlbpQQ4(a;8mGn9` zw3Fl{P{(nIgKqtgl3ixwVW(ub?7v8MnYIJ>r6u;#fBbi8$&3Zhzpq-;#HW?+uT|=B zayT|N&v?fgdrUH;nOorj;Er^{Qr%+5m{zxBqA&IJL}4=0eYJ9MGeqmZ%72Q1HVEfV z%x8%A1c|1nc=F2@NW{%L^=$uUM7gk+)?1T;lSs;j_hpZ;MlNC@QJ}mKy0whH z4EoGlx2$Z7Iw!85KaObb$GAkh`D;rEEAjiWk_A{P@+7b>piud@1ze| zBz+L6+w2?KXmyoBkDv=F-4sZAgvNG$>TDyV4;IG6Ngs5q^ubYCNoy-|(;oI@=yO2s ziU>iG#%OJvi%Pl_6o|Jj4*Q{}S2IP}M|uIx6m1_-HlS2{!JqenQU#T>@w;PXDya$H zXUOkD`Q-^H_n-4uobA^o*mL!@;iN$@LGJ97RXjh9_oz03=wsD(7Y1|c`06z9wUIDj z>K~( zC~;R`iGIqg_4>nl#4#v8?P?609)6KunO+-adi>&8mEkQHm2R%2L_2rZdc^YE%a2Tt zHX_m)A`4^)`Stu}ev4qT3!(vC@7BOt+~=7JMljjP#JS!Z>hpX>FTU}7W>oZ=qOWxW z8jQEv6ngCTLNjI0a zCJyKB!#nK{@itqt`cG~4)`P#p+y7ZZ=Wx&d0}Y*B`P2W1#~q`u{Er$s$Lh-u@OZ!v z{~eEmIukskp<^*GEK)F6Wzf*s`A)pcaJX548}e8$E_-A-hh1wfu=v(=Uqi>%uvf9dY%+cS6sTM`OTe9%|hjecCjpahe10Hs2GU+WN9FZ;JyM@{! z<0RuGt;+Z;a5=_ikEvnh%t9gbf;i7_vOJf4@sT!rQ5o=(J*EzL$==(87y>%dG4fZ` zEg&u96Un5B15eEAg}p2+epeBGpFWF|+i_`5guXXY`)3lQgQ< zf1v**Z2vE?{lDRjDB(oi&TsQ{5s4#kPXnUa;l><)E^@d1m46_fC_~scppcd6zwX~7 z+eCPrZ~*Ct!xA3W3iD>aWqZxWN`~x#me5q{sig7Ag2T9-Uz2)*HX4o3b z9U_+>$_gPDOw0MDjK-h4PbXYZrVB5G^rfBen$Wm3Y(@SG@rR8I!`{t*SNvYx%GsD* z)??dIvxi`*yo4JYAl=s3&IA$Fx!68h@070CS0Cu7mMb^+rztP@r)|jMG%IHs2AQnhT|lIcX#k|r8^A`J4r4*;*V_vWUWrwAMwES)26H-$BHd(>vA<=B%R4H*l#Q_ABSX-FopIuf4) zBG5WDyR2B%{G~*%@CJ`idp9$2md)tfe#I0qR+Z;d`G%+!yFIGg_jy1*z8+DyO~==tPFGb+UwFwOXHnBz%^$HMbY+`hf%xe`AcV;a^Ktb_fyB`9l0 zK>MF}9NkVavml`Z|Bb)rg^X#RXr;GqvID!KZA7d*p}NbpiZ>hbcy@0~6x^Mc2^OT;=@bO2HSyL+l=qHbccP3OD5 ztfau72R-?)o}kq6gv-lnC*ockz!FS=*im4=@ zCS56He>&2WPO1;E>s#P^Z7=EuMbyoBJnRExE_VOy1a&=jl-u z^Aop@D@nUzU;XLYS50A!c2l_c>NaUd-{7z?oodl=7s~-~4Qr)^veTcv9=4gUH|*B3 zCz-)7>}$zxAy4yJ2&_3f5Zz)o6QK9j<)f~mCQg2KrINVjMj-1D?FF@+E#^H>!_%Y4Fp3q4^B=M|LzYQOi0!)Hd6TgBbdXp7>I^x5~H_ z+`#EfLCjQkH~R@#nf(Wg?UA)kyiiqo+=&;eM*oO0cK1scRNES%N9W`~59A6tWD8|E zRW`sjYB6gSFnFhk<<#w^#(tT>h-7)3+e-GxD=pVZ`6#-nFXH z_lSEDC*;T0EzS8q@Pvl`o}e<@<~Z-VplK3vt>kBLt>mlwTZt)hu21lV*k3)S z0&%a-ZmzKJiW4djMJRYh-BM9lT-;*B zny?tiE+PCId95y-G=L)-#sY_e)&(KlucaRm~E|!bp;BD?5eP8F2HL+}hxYsjE z9IQHdfj8YSde)}U>F)pJjna4asX{6dVNyIRW0raOWM+HoUiI1qhb7%iMtq?j(av}! zx-)#!@DpQ8B>NcCnWhlg>EWTWGmRm#VZ%gU@5tUE3*Q%%y@O&eVn?Ur)?m*I!oBJY zwvKi2d)PWm!%JY7WP_(;W1_5Kcv6YDlaUP{F2R0qr8NBVVZ$Cv@8n;CTMEOXurpL1 z7lg&?O>A9m@sruQWc_s|p%3cep@Dkf?#;tRC@Y1;HUz)$tLQ{jo(?Hzts`#t87pCU zA+OJx*0K%$`>J0q@`o-ndxbCo&4Fvtlhd8Cn#pS!;vZ+Wc&p=+j;m*^kU*bgYBGd~ zgeSTRmiUeBVvgBJJ|zmJbMA8Juw?7C{09AvirUC~b9!i}P)vOJcfe>`;QntlXS7n# zgf2h)3K_L1LdWrjz$fgDDONi$I)Cg4<=tUnt5RAao2aVEx2mzCs$!0egiei8N_T@kd8Vy_)@18Bdj3;G zYiwjfQG)w|>nkEYd>XxnRwSV{mU~y|iV~iV!+wV>`e&OoZsf7WRjW5Z&d5I1tmh(Y zv5{pYB-a@O|8T7ckfL9buHC~g!*^Q6%)CqdTtJITyw6oW%it&C%a6Z3>+R!mwY*Wj zKz?2RzPwewjOD>d>jjy$-`GyR!7r3A@073b^QLE!NPb(sO5Qso4*B@391gc*%&428 z_M6ZtoY9Efq8aZ`YWDNTTkDKu|N0rXW-Oc0Ib#LtgSHHRkkie$J!933-nZl4u0x6x zDX<=ZH<@GpZ{F(Q#5y&0niO8C(o9HPCh0iZg)~~EpL6an3&~2k9T}66@BujNLBv-8 z-j2RjvsNqpuI!x;NZYmO4kV{8ZB@OHMfY3wSuC_iC7Vricdrx?eAhWKxTCCJmsZu< zrP?5Jp9;J?Vu5!zqmFEet}k(E58`dSH`jb=c2Jf^e3y8RIn9F&CHlFuRPWmORzrZn zCr`roSn;rGR`k3A&gd$^_kc69gK3DC0=K6}x&2NFIRG}Ec!*&71I9gJ$jMaBdxKGPc=u_dA| zW}W(&#I2FjJy@4`urfYcbt{q;Ek#<>8Qllo4w93L+vnK*ji$NA4>;Y>Oh?WVvx^p2 zd1(1^2k{2VeC0L8l|CY53%VTv-jvXWo zbId#e?BJMrobbXT++srdrh6<#<7@}{3#m7MOO9-x*LZaQ`g-C=oz_llnq(Gd zA3)XtEH}!ot?{EV->~W|O7FK?4osgmOO*s^W60q9woaa+HBzUwlfBXanTS>aZWOd6 zDCUuQ)4+|AW{Ud!@nOhqrI%R!Q`sT^bSH0Fwdf@IL7HBl-D4WsK9)4I))lm-aL)|x zo9Vx62K%u)wT0>(v$w4(;0*A4Rn0ZxV;7|o&U7!oVKbgJ4cjMF>31_eV@1qh(Jxq) z*G^4MR=@^o%R5qabiL+~khwS4Wn+o!8?(H-=QOX^cwX`k65l0BfQunOTcU>^dXWu$ z(8qVyI^`1sci)4Z7wXJDp_++WUxLv zNxuIU&q{soG*z7J4irbvQoUWyuyCnb)CDfR%6;#|Jf*S6c6F<3@0?AtO-7+Cd!opv z_*veXdY=QnysQB`%*CMkfOeRdnYb>Wx4?5@pP4K+p-O`Y$Jl4DB`4m{cUW)c->A4& z*>J8l`rf>rn2z|H3$HC|upY@jP_ehN_}rHlKD)H5CU4t15h5yQjPkrJ3Jx%;qSlNe z9k^jvfw#o~>UURCExjYY^*A=&`70?b;NA<9*k8#Pe%$*PO=EF0aMkD&hZpDsZB@C) zr!UMB%sGwuJ64?{s`{qO5){?tRt2k}H>*?H5djc!=eA4A@x6?`kCHvcuz6A*&QraK z@{}H>Jd?tS3)*JF>2Hz@*|upYb2vSlxq2bJXS%3>cXduy&tc(q{?72LzgRkT;d(D` z9rVB8o{gcv^}os!ILUj#ke7q#)Y}4E;*a-2R&Z%btxtXm&u3Q>Vl0I74jWhSdVXuan znmR(B{eU7ilgA+HA7Se1gtzLdGR6b^6r|jUH+Bm+pi23zr-YGO@>xAfgBN~r&(W=Z zdNoqR(yLW9*|bwuS5{l5?EJ?G7G{^z8%7O#f|fEdb4r&C?t5ueIV|W@MXS@%& z`9JkTPSW=Pa#!*=$W3=$$QuZ~pZ8T;!gv0BV%sKPZgwuFUtwn_D(i}Kc4{n_*RyS` zXWLkh*%@=Lzm4#om*KB&V76T4D3keH0zQv^PF z;R1XSU@iqa(UZA5cYn{0_s8^$qlP_AW}HC4yP9gri*&ME}$NiYN6?zK^qzs1A~(5tT~x21~Vq5@jjUftq1Zn=I8y)F)_6mevH# z37qD*QuxGY*gqL<<;p9Cz;WPb*D?e zvVH=CPKqX;h5S;Xr_-=6mCk-DwUMZSs@#l$k^d;}A8SunAY!71b>)$50zqO;IOpGj zQIxO#+TYk#KDzI4lCR)!n6E(fQisrF$@f(n_U%y3@8WMtSodBlr={TeLS#)1A;3=z>}n7RW|UaMTn+8)<;Klfvgs75;qOC(_h{?6 zpHu6~uK&N*6NwA`pIfK4nb{9UUbB0A#?SZq1WoPwD9&N zs!!yX8veJk5pl`M-Z$kRF)88>#f?)*2g0T@ramcWn#Q}wePYcrKv=^zRx;70jET#){sJoU&zyLTSaRA|{I{ zGPh~z#UQ$O!<2L=RDk#ly2nnm_q<4{qYRHRS0fGG18u$gqlPxV7xsSs`|-~nf7W|y z+SGXe=<+Rh-XTgf($a>9yy)XrP zfqXf)VNDW;)K>0(4fg%zrTY&z;i{yQAp+Gb+7G+1AO4b~s@C!a(~R({abZU3g-iv@ zU(D>3b==jIAZ5&5Qu=E1P@_@#HXTjxA_y_+0@8C+! z;(kb$BND9Rn@QeQ+MI?Pz}w1WZu#riNpX)?d1+R~6osz3$1A9 z{F_483fM7lHC#oIhJiIGTl;Is&7>NlZc`1FzY4-n@-+n&jAc1-OsC!HSMqt-UJGQ~ zk}vep^lK;#V}B*P#L+6AM4@`q;U@9ZqD4pzWz}8v(hFG6r0+3I3}L)9#M52<7#wl=c&*|9!RTCv-9ub{B*!3R75^x&hmffo3SFF z`S?4~2<4HrG!_HeG)z3nC|g*Jy|19~87alCuD&y6Fu%RJr(GK9Xe-ZMn@=2i`RFQ~ zH#Pp?-Khp;8Vff>dpXh7bHGp0j{CaG&VZ{g-|#Pj;)5}vAMBXOH>(Zn_12NBmAq28F@37$#x%2>+I9c&!I-r7$CR}F z87a+T)b0K;MPN*kxQUNOQF9#Q`@tWuqZ(S<2aGAt&zHvZ@gc}n$|EZ!enRMaLg10q zB#pw&4^cgS(8fvZ<^qXF_6dr1?>E7hr^=CxsJ1lal}H>xhKX9{?SDpfxV(9yXTj%D z9lJ)Lz0V|ow_m_6oY^jKzOaHzr;`rwEr9oYfZtQQ;4hf^G(6~^h6nvq@SuMRu_2yB zY=|eLmOeYuZ>+BXu^{{r3u2-HUiOFuF#)k4CLk7sA7VlH`FR5~KFbS0%m}*o_)lqT zbRj-sP!ll@_}217^K^dR&+>4i=~uMY0E1`Biag%L91SMf0|!^g57@P?w5JcXN%+UJ zB|0G=vMc4c^BjtH)4AzULVI5UCb0G;UST0$#> z*2C3T9W7{4G)Lz*HiX(Qpml*#&y?lg-)Zbhf8n+M)^*`i(0aPpNQq9u2i}_Y?Hq@) zecDfvcT1`L{R7&+j_>B83^WohE_qOXCI%44p42frJ3Kjh5O zktN`b{`YN>x@&m8QFf}VKW*mL2;I+Yo(9|dtVIfWM)+&Zo5nNSkKLQQ9^MI%5S90m z9dUW?Ph=0M$f}E#HuqEcywDEYh&Z`Ad*iCPM#E#85-}_ayY|B~cM@4s7RUTnvLAYl ztc$^=S<`f?rVjX1+ZdUpBWRi~ZA~gkvBWCfZiamL8~&>dD-$xTX-*l|V-Lx&cKl}< z)-u+fu&%8*_xgX6VNJzYl@$+USTlbw!zvH>hHyru;Sm`Yyv-*{9+qKoc9-III{ken zbuc-hLsz(kzI_UM1jy{*zYYoVV+Pg7Hh%Vc(%pd%cBF>LL$>LJ3_SP$)xq}^1%V12 zeaxx`-Qf7@H~CV7-$_RHvn3He7<`@Zhq9~P4R;|86JOPK-j(;9geNVMmw-RxpN8DxPQRrm zoxtQDgZo0-i;SA_Mn-Yhmr>~T(2Dw_R3H58ygK^&V9mKWHH;S)*&I>tjWf#K{=j0@ zx&r#iH4BpKZVG0Ic;2_fodVx=jG{H-dSv6Ax(oL%_0)7U-nf3P74b9LidUa!>8DSL zUY{P$@^5a$Nhs5&8^KAu;V(0foW`W5uli_>$NHBLS&|>ED_OrnVET4S9PszlthJ zSZQU;B|9v)Oz?Zq=eJil&Nau}jqldOo@>8}7lCzi)z!#{WjDXs>n`B!wr;HHbkA+s z6xWqm8;u6l>Mp+QOxPRn>*LRZb%5zqQzH6b&)Elj1z$b%|67_ND=dYgf5duqi2MPs zQ}36lw##5qLSML<+&wO`MS*jslBDwX@Bc|RvWr(dxRE`0r9zj#)CHqpwE*_7P6Kn; zUpdXfGmG8tLTA#Uydx08(9Pm@X!e)MaJTvS&4to_~N4t~Mxx928c_&Zh<)epvg!gwIBCi^r1_22GVqJ% z?G)a$v3GMg=69Yid)VX4+n072^igrp*45_J5_b^M>~EZ=qj(UJ^>gfdjQh3FeWp*t zo^4B0=$|;t`aL@Sl*aq6682HnC3OkJX+-FP5vgIZW5*o@=nBlJW6+wB$MSVOW#@3R zuqpPw-eo-sP&c%uX7(<-dCc}ia9yc;(uc3@iB0JNbC_^5l*3+dOZPM4sdh)$8 zzGNQxEEAaiEKl`AI=@aQ%kq`*w~ah&I^&xZp*3B6HqI>R=?grYBB(91CXxM&&oj4~ zfi}T)?{bkuxcQ81C$GSG_yKAe9QL3Psr1ak(y;XrbMzSNHyoKo9Cq|L8=T_ z!~(e9=lRyiAk%5zq)5XYy~!qC83nHy+)~_2lpUmFEvm;|_~T|%$+)4a*L$QxV{>8y z#hZd64RXNrLH@_|si9P2{NFS_d7piGrY+q;8&S@6kr5iiFyQAyp*-d+eD-jdQc<`io>$4Plr+h=T zzqZhzxUZ*O<+W3??2dJ-Dg0Wu3X&mM-@|Lb$UqAjWYnp8vzQXy-k^RO`RYEtdE95I z5xfvs?04^lPRJru32}EhN~MOI#UTuFn!66zL;kG3Q}cR%eE;LG_b`k9#nrUigZ;3l4EUdSxfP z?%-YaX4@-IUZGhUi)$Z132( z*ga)WoFpsTx+R>QE$PAe?~aRGT->{+kZ8K{MaK%YYPz4UxU%n5*~1!h%GrOL*d9Zm zc6X3!?QW(JCx#OFYsv}@*4RKD;##wQTPm4&=-&{DM{!rEw%Q}QbsHnwIp5ak7NcRZ zX_7V|on}kbbVf=MK}*v22Kn3ld~Y)5^Zr4qzwZ}%4pksk8>GPM!E8Eqbd%q>mF^J$ zri$PN>LX^I(*^2I5`1k2zf@+yT#*YQ^oMpjytM?fESl_{htK>x9&kkAL;o(l^K~ ziYuEuh%Bo!qz+B7xY*zSFfVYS?^}9UiDSXM-OL>(zIE2 z=3=)>a1qgQxRmfs4^lL{O^oMbyul0gUg#Mp#Z5jFcpf;Rf7OgPF}_0-{pp!LzPusO z1YJioWmp%P!s~Cd(xw)w;fM#>N5IR<@zpshC+Fc!r$hvZuYPd*K)w{Gvx`E%ef@em zQ|(tSQyOuJTpH%uzT;m+<@D35>bc&%F`e^nSJs_tY%3nU?+9+Uqm`HXSNI6yCXCcU zr7dpB89Ec|$Lg=uS%cLTy0nJ0 zYiT#2Ir%(5O_&(#{}lD7@EX^fM5MfOno<<{XdU$#@2B#U`unEK^a;2*RF8!9BYuVX**uk%~^w}7$pdEw_0ZzahlOPsV|C*=O8g^0K@ zRm+pVlNzRS?P1~**S+8otTLZsbmC0OJ)0_9JVd@k#qSZ$q)5jA&yHKDtqy3}Qi?SosiyfP(7c)1P#*R+7 zy>#A+Ln|Kt@bnPS+Tk)d99tr*ivgNWS*2SiVisBX*2OOO>*qim^ z#rSnxoqn^9NvyGQJ9id1+nLE)_ZKTm``gLA(cez%7S4k(qM2fcaZw5Jzd(Ky|BF~X zqm;FZG2%CLM#M+@8D9^Ucg+i{NdhoBZ$73|J%K} z)+I9>9RJG21uLWojKwuM$X&b|ep%R$Ie>0)X%$gjat}tz`C!Hh$p;e=KghbbxN;-> zF!i*u!bUpV8_N1&76*K5B|l7jgCC}s(+`u)d3rQ#c1MxkwfI(BUTH6DNr0HA)N;+) z2T*js$w4gq&%cMF8eLY$YGFBTX zD2ezSlqwHCfYRx~1EG}Y<_R07ekjGXa8RmAW9J7a;KTpqtAHy6IVxxg|Hr4rd82PF z&a1h(I4>7}G58yezZwVL@fU-?(GIF}adGZ0?$ZKmbgpN7V&Fj)10d{osF&6uVWXjGe7<$WO^@yeo1p}0=zQW7ecPa?Z#p;*?IxAEiN7@r=b}4z=OgfGaZC=^ zVx<*td8>b2=DhPUN~HD9l2jvf!?3WY5P48p&u>wHnuy%H062{DmNv8PHB&Eo*U{?C z&7!;8&|CMct2QsP4jxzwX}U^pruF1^V0>SlI!diCx*B)SgXi486alL^W}T;G>^$fG zX!qjw?VSqj*$nL2)hAe~LvicRbn7HVb(n1vJ(=nH+`dCg9$$JpVcvp63m#wC`C;@& z`#&1Kvh%&@_b2=Q4cJ$%UZ+-RY<$gWoZpf>=!jGs8X?1EJ;ICK+pV#l&kbW{@gSQC zrS;9>0w>;Vg6E&9g9*@CmH}VyQ(psCyOSC|@|ano6HCh5nA%QT$Fc$)sWj2|Kz4(!|Ra~Mzk@5|V{UiB!%scA8=`oREbhEwRNV3quu zS&}zMj(eL2;PXw~OrEJ2h|dXsdp8GQrm!A+tZHwaWiDApCsmMrU2<4kUT!X87!A~< zJ|l#OIsTp(3WHf280R^0iaQfF{ImZ|Xg%UQ6Y^p{eJ$B~bBzalCY<(*0riv8_1FVN zUt86r_W|vSyE1tKWp}_`yz_^Jk-UnFDw2k%0%=1OaGNT_Epgx`h4l9{qU0Z{-mbL!fxWdC0A`-q~c+Df>~|EjXlOGzUeDw^8Lj zjmJveiX-~Mxd+}s&2N_5>yr2_h#6Mis(s)Q`R_`U-F~!0W$J?x z(8|@|e$%nqk+|t}ENP)GbTu|1&e}TMf;tvAqmHZWJ9p>OZ#8Xozh1w(s1NH)V^y17 zdBavkN9(-)kM*nE0?j8hv6xH8j!Mw@c}lI@Qt1e+*E_+>W{iMUNS^zpYDg4=m!vgXww4=Lly(-ftEOv3yLl*P_=OcXhB;2W!XyHzs#M}$cQ^)ajBzYS5DmeU;ArN=THrmc{o>`HH4YD8p5{r*U)-#RT*+Qt~5levqB-8 z9M+asR2`3UHNQ$%&e4+}75euHdYPxZiW6E~$jVCQpH`&c9ujGnVnV_>^k8-QgoL)d z(f>kpLa5q*8q^D!--q8N*B(E%wT3OvdIe@e6-igub z8q_rADy8>cbz2JD<3=ZW>A4L_h!^2@2|9w(>&W}_g(UbDUoXAUnUvOQ#;IO<6aBSY z)r-`a57Jy0_g;alwmA2SbScW`6&h8KiH5r^UCRK!)QHtbpv!K{3ph$M$IYc!4b3ww z9#Q`Aqw^_N-=EKI?0n|>JH%*7`T3r?nthK!!uMWnT8io7mvuCfnLk9U!BOT#ma*fz zC_8<*Te=cZ%v1If6l*HM#k&@AqyC!8Lx((!B3SJBE?N!i>Aa%DEc~mvlIuodes8nz z|E7?Yh3+WwPpKf-ySpb9B|-A&J|W=()&CjILCtZ@;$!4_4M=@4A)x|aa`Wkn@>n6o zhIZ^IG(W}@UDqwb^T%hy)X{ofsM#%5)RyOI^2|IFrjF24&psx7 zQn9i^y7Ur#|CFFxxt$BEYE4vi?Q(dTKc z_R@Kf=Uxf@{5a^=$3Z_o7W({X!gPJAC0s0FpX?<1zY!78d(gYN>eQj_#+KBS%u!j-!jy& z0>5wJcRTu!g&62$2@A@;UM1cOZ7S^2%Xa|t!h*HDjDGoTCh*V@3-(Mld;xT6$tz4)H#@Qpza{PNo2I~Kx+{eTq~^yMF)m=TNbB6GS{ zbi_U*!SAznA-;=_)FZdZudrPR_>_-1X2xi6!z7L9;Bz>aDD~qEK)HNO2H;yhW}`P| zCFVyiO6rcbw!95iVEsJhDVmiU;H)12r=QEnAB@IrEIZ3;j)GTMSHK@-Veq>OUENZW zY|74bbgR;uhQ5{@ea|uvbkrgLQ0vX?jR9J>_p=O@4SS5!^>YR5X6N4!dQ@D?3L`o~ z-*K*XUJv$P6RXF{tE{1wvie)WbR&=Sl!7UyL7FMDLHw3LS5OerE{YiK&~Xu?^Lh_s z9C@%`+3H{K-|Vl~JZBmtcuqEG4x*{fyatLP^cUD;kBH@yH=-aLkq{0W=0aEG0`3(& z)^STXQEF%Wai`i8BM&=W;0gU4$pd$6u(Espt6MIB85{F0&)r0jD*dKXw^j=H{Nsr{ z7MjI1#PbxFl66sDWj$7&W6TxGIr^->_7@w=P41IS$=A8++A?a$D$dcjhH{l%9!Ob{ zy|yTn=qrli#oA_Id{j^FN%qaL@!lIYOA^U?3dRtn=)C1}p!GIcEJ8XU@1gakfZo?r z#JB|1>!E3n=*I0Hc{QbEA#mkRgq9n-;c2VdG`Aie{gA3vQ`}PYEMxUuw*N;bc))J2 zh2M^n#ihFANfV^}<{Xv^$N}A!t0nn%@QVKVe=FJQsAxWC*SF`lRMtD|_d?9+IDaD| z@bTphh(0}oEE?q3WUm_Eqcynkm^=i1e4O8+ysQZi;rY1VU$B;Ux@QZT}F z@!CpH@tWbOp;)tdi<&q%_zgcM$+^qkpPHvk<k0>9H7?6~UeZ*PT`qRrMrBaZdaS1-uTSJXmnvGwgNr21-{^)ZzL>-(*LPL=GMtl7cUT-iW%FKTwyEt&z$ zHRv+c8_hyxg%;_4j-`JaCU?^Vc1^IiBbmKV$F^~BUKku7j?4Qkrh+aJt&LFg+4P6%~ zIxJ@S63O24A`1`!TBo!}-r~1MchdSR`sI_92p#{H(y=Fn---74*r&yjm!&9y{08tp zt`o0C>MgM2G3#_vnx$S7?OtHKjF|5+qKw|!4%{LRFLqb~;2w^9UeT=NZ-w)g@r>SM z+`e1%6JL$_zHrmV>Fd6)9I^~lLPqZqS_kguWvBlID&ZWB_YR%)i@pW!kZ@GO#;>?C z8^0N{45x5L=|L(}`NM-U8&DSX%vp@Vg*)S4`O-D1F$Fi-^Y8b+kNS`GD`7-jZxe5E zy-i%y-`mkR!zkB=@6>qfm{_?HP@(b^mFF9tDzlv2P=65Uq zsj-JIi{ubyKLA;KCH?fo7 zjq#mu&Q3SYjuMj9qT>@1+(3^PRnQzH0{WwEw7y!u|7#&f0l9A>I;Ut)Ar zkh{3@(CMT`+BE_>u=(O5>?sk=L*zlMOgA%V-866rtv9I7zCvydo;jVk9zLwEn&#eE zxsdu>IMvzn)nA}5#gQk`&*Ih-fIxBO-eF}Cy2kqJ_Ouq%R9smiUn)+b-YDx2!Bcf( zp*0CQAW@@EiT*80ADs6$xvucS*Wk+X8G^Lt^KdLB`6 z8Dp-o-~S;c3VTQe@@&w9lFLx061^13^4~>=sArLfsAmCR5R^9@B*TS_t zYFd;ie;tAM}QwUklwRV^qYYOyH4!};W% zPjxNY+wnE`#eFxmT(qlW->EX9zQ~gB6ykb+hrjdqn+Qw89-^~Qe!2eb0< zjMYW=<|3k{JvhPYj4I8_H1b-v0H@_`*n;ur1$_6gL_A}l-XJ4p9VFtcEm7xS4&yYq zu@do&(tlb>Z@^-hd=IBYoXr`w%~KLI+$j;y2)I+IrPhivX{Sb>z7MC2+#60fef4kP zRK&q4GT#ZOyrLia;WRq+;U2GfsK?6G{vMwm%JulvAg;%`M<4W9?>Vr?iVROl@niix zc6V?+-k_%*2ORE?7Gjo&coa#XUqb1qJg4Mpk zna?vnmg=6d%b9OT-O?GKanDIZ?#-R?rQ9J-AX=3jNk%VGV|g2jq@cLmPNl7R5x+0v z7v3Gbv^9Pcb~E%GO3(h>vyPsh;+{{@a{xUfo=ir-H4aZEd)WVFSu74A?FeCC`4@E7^ zh}rTVq85hY#1-ux1blRLaYpNTiiS2;nh$!jNNWitn}deUljE-Os(Je!rtwil{AO<`%Wa^(3tw=ll26 zYRutBTU8#SRx8&MRea8l7!~Qx@fAy@^Sb@(^`Md~nk(z0@5Z#pV=Mvf0!0MRE$Hna zfnPfBu*MN< zE)U!>&aZaR?-^e8tt9*!cu~J4d8mF+zoZFw6_{qH-!tDC#;CNC;hHIuDdde8XjBNy zlG*SjG6X8Kks2Z>L8>MZyw(e#`wT%!Gg4pEs!Ft*;dT)M`+UP+OE)1cMzcr4l%z!? zHJH&%GR!Oe1gY-|a2smiS}|&Ukr6y^NK$S=>IZa3YRTH+0<+;oM)SO3X(>{Niv(rJ zyRi{@Utt6@H}jM`kUB(Dio6>xAa5k2QEqlG#qAx#$E;BWYW3(<2qSoQ^C%^HF#IV^ zF>E~U1j z1ZXP|_a>Vqk&HmO`4wd@EQ^F1`0cm&2nSs0Ih2*%@B7*Bcx#sMshXFdYs z=`4(2egwuZvM_$@5g5P0!r1i@7)w|fyFLPA31FN>FqX_r22{gmzID`;*b^d4{4GRg z?+JW8Tt~aYKU1MckzabymL^}`i^>JmL zY1JreO6d)e#p1r*+FK#A+U}63zcU_DU4QnFHTQ&=uHFu*UcLvn&@=GE>_Z%VDf#2X1cswfq9c5RSBh5!GF1 z7+GRF{ENNtPGh-g;tk4$m8R29b@oQfGON&Ixsl zvZFs9;={KHwPh^Y@#>4~f-VP*c)1^sK8i(^J@C_?0vtNNAi@*)6St`XS2%HK!Q9lS zjslN}6xELn5rXHn0_g`smujA0D-=wV@&wbR63t#IFqlp#cz&&`;)b9UZwK_QX5nx~ zaZhtV%Ix}Z#1hCBl5ZV4v5^nn{SN zy3cET2|t>z2^2AF7w%0g5iIBXI|TbIuWX9<@5a}t67dDTG;VTxpeUbzJ<+g zjAdGbYl;|8^DNVD1WIaxRAXE{>Jl^EGx_^-k0%b_o+&V=g)!Ddb9xAqIcV@8&-5TB zcYDp&-kc9}=55{oN#GPaycI?b>g`KUkR@Ki+P)NGvi}%Tk+5x}7+AtfD#Kf00@k?H z)c9k_bv&K+!2Qth?EewFq6yeVB8@_XnG>BCmcYyF9d;L{bc|44YI_1VzoW*>A*RNk zu@ipAuD>XiHJzi~AeALnhrH0)87o^}4NQT2jX%*&Vq~2^A@5HiFD%C{UQW;F+3)PP z<#|%wYEtVFgc6xdi(Rw?Cb>iUF9)|7X8|6IHqL=FKhZa$kcc_2y+}%-PuTU9ORtiAm$T`PB>&yJ1uM9B%@oiae zBwKN}4Pnr=QVxTLx`7I9h`4{-O-uuK-%V?K+nShfUVd>Chd~kB0#Rf^i3TbzGN$2Y zf&*Df^h|JRy{BO~lb@uz-05oyO}Hyh5KI>E2#aba2_%!c1(P*GL7>J}bHEbp5igi7 z0N%5Vn$#}XZ+T^sL$Kc~$|HVK3*Mfa)Qq>O9`SqZ84D)eEmkAF9w}jhX<`PyV>I~H zlvv)_wc^`lf)cN{G{wNCM?|oq0T!fsOT1nsurpPo#GHz>@_?=*t=f)Qq>jyGV z$+-A;WFzy(nMUp(CmSsp7yN-~=;m=I5B)gV2(NJ_&*kGxLlVcCrL!5&p5d?wdXeyr zV6eOA+SyE|Fq6p?Wb##V7e?^81#t|v89^a_H_=6>m}IEkC;0rL0u&;4nrWy7^(2j3 z7iaP?jFXKl7)Sjwd8VLU8}&EdyfK9F1dUy{)Eb{D+L~n=8a>ui6U6A_kH>m$c!5d# zKa)rF*t&SnL9-d}6(-N3In2+sg-^#O0;bYBjtr=bIQi%#?Xz+0er5_|FOBEHcx zC?$MnzbyylfYYC&3P5RqB9Jvwy`Vx;@Z9tpM*$FZ)dZ>wZL(_`lnE$;qr~6+r~88P zS1kZt@aNM8Q!pw$|)OHvUU|iIRiDZL7C#g z$Q5jvW=F24kn6cjsYWSb1`A4rKQlx*1a3UVJGW(?*^_vuQp+v3jvcUt=nvoWTv{weCwL}_ZmaoPIuC?+8OCz_K2Zb}9fXQP`ntY4Gj8oOq_yTCL zVCK@+IoXw2$#cO4Z6GeF#zQoI&&IzUHRF8oG-{A1jiJ+=%U4?l3TV9MfMr}JC>|-p zo*#}tsaW8-F_@`HGkvmS++b;m7Sz@OuSv)^U129`$@~8@1?&g~NkM}Jkvr&o!UzMR z&Bt?*b0*bAwcIcJGRnTFsQ+F1TS$LH(fn|F$=b_|d0jA5lx7-ocU++KTb`mNQ#x2` zMxV@oABJ9j$W&|z*rM9TXLgFmNyfQP&OWqNlkeqsD{G_;^CB7SOqq+6^G9jz6K5fd z{VjyQnqBqSVW!6GK_>OJps3_>4_V_~#CYxHcH8oD4-D9vDFSQ#sn&v zzerZsfD;69V4Hfu+k|<%u)HBw1|DLt1m}J%<%wSe-erWLK*ozonIb*G#zn(U#ux8J zw0ChnF)}K>eAqkRbTz$0U$ECkNKgXYg!BZ}lhTKMm%0zuFBvgK17ju?E_8jj@uRSn z`78e)bLRtBb$Ryx!{LC0L`+GYF*}+Wnjs(=IYY!Fk|X3na^y@vI0%M^6QE&_D^yVY zlXL$6H+5#tIcH{;&W9;BD{IdAm^0^`QCU$rWzCArIKTIGf4|>z4hK-$^K8%Wyk79R zzt?@;|F8SHulwKk8~Ec7r}d}j-T!#n#f1yx4(1MS0Hx_R`JJ2kG|36D%av&#`S%Yt zbq&9tbFyPhdFfwSHWaSN@4R}xdC}|hC-<1r^^5MN!F6|<-XVIwnIdfJA^zUu?vAmIfX~J{f_n71klR6);^x(6szf?~8OjfvnNn5!cgS;ktyY^8CBF8pM?#uD^)yrY~_F7nkb`T!+P#Ev~)dIwaq> z{e`%07uPy*J$(h&GvazjzHeJ8uHpY+{j>~z`EDWiaEA*%!ZTles!HWqa5&GLa;}Qy zS#aRx%7bUXe&k2c%JbV`Po4$Cc|Hw>@+=s{^PfO7&wr8{;=9=itT5Lb?|BW#Eva0> z?Ey|lutRw0Q+=(uGL3y1&Q>>W`b56)uyDbahK#1Ds@R3A@07XObB?rX?Ta*WUvm=Q zVZU4%^_qWw-U`B;i}l=(#s%DTk~bK4xm>wx&9MBp!UJBp?T6px3w)hS6U!I$U1(XH zH#ce_-$1bV%^k}5g`XU8t?%C5lsArVDUVK=ciWOLUCTG!#a>mOjc>Yk>TX)tiT5L! zzjCQ}B>m}h=ea``TKtCv`*rp2&fF}J6(YO&#kr4}UkvK*AFya}O;6L{fd8a-MT~ec zFv4%qmpu~~J@KE3-+O=g+a^bUkt^?fI&af@pWA>RBrW==0c=R(4X2}h zxc-t(&lIi(o$CX*O6TW2($9}KHIIm$zvzi3;{QBR-kQ~ur-l*4IO3;={0CG8`tz2I ze)E1jba3zi^N;TzeA7(-7XuC?o?baP;BLRm&huAa4465hAK#cATs=mfzZ#bBPmKf> z%Bs>t?*0r|yEyOU%FE7#Cb=cVE~j(jm(pLNK9ifMZQVkZ70KW#*{SF2bleBf+RQ#u zcJ236y}V!^_Fvks)Osl2;FW#W)ps#de(CkBfRwj5$z44s(ApH*(=Oy1G>^ z&Tlqyap*L9Vd?RA+s;K=z2u^K*UZO*g8DQ@RcUo_=ZM$~1L^~%{OkRrs(2^SVcvJE z?uY*9^_$}h{Nn?8t9^GzV~=WQ}9CiF<(>EYGYK~Hr~gr z^{tEi{9hz99#}&B`&ET3`Z9P#-Xk)mePIh=UiG?d$Na>XxH9toVt*L!# zu!L>-_)YEvL~+_m%iXKi*o#9NhF+NWx3q6AI}cubrC@SFpDF&&&qKF%4Y>03da>aC za;ekK0{?@7eskkH`OV!OU>Z2ZfAGp8|M-<9bN4W_y7$&;oi}#3E?VnS{^vRLEa9(Wfk`(FAZH0d+lK3%U2Fw>l);Dljxzn zJ(h;;GzImT!#+H_|4rr(`n+rY-28XWuzq~m*?fXtzI4gYJ@1FVhuYG1x}!Er9UZ?k zt~&6f-*?{X6nHX_cL{#pb9E#mSWVD-oqzcGwMAJkHHEzq{s-=;`7{1Gn}03i-&@@S zUYYnt05SQ7l`wNh`2r(3(K+i@m&9@Kmo4M?W{7VrS`He{ zdvYM@hyOuBpMS1p=(fXd|EnjgC-=R!v?xi}&(HV`%lbOHRdArf~y6-YKoUH@Z*L@&yw1{G0Tox~JX@ zUZACM=Ld`r&W&=Kv@yF0_tN9@JyxA&(+SlfUktAdJtjJOm*l20jawj}?~8dn@S8qg zy~lesj5mgAGdyE{cj@5j`)IxScYWPw@uDB@oHd!$H@?FCnjp>+ac=#*+_eeS+`Ysd zuDK`G;qIxqHy*-m)%g$N?x*vMd!Ww$TimhAjs1mtxaM|U#+|CUhl~3W&HeNx+yy%S z-*A`d{1>aI@D|g`EvxnCPu24?>X}m{u20nSI`zy6HP^@L`4{S$TgqGT?Ts?Do%=JM)QP-Om{H4!YHBNs}oxgl>Rl}AI1=XyoU7~)T@AI>% z)tvOa!rO$N-?Bp5>Ck)CMep9UWi2hz=z2F`YS-X}p?%h&Wg2gPw|eUGg$r-nvX1j1 zjl=5$9_!k9QDmR>oIh#Iey94e<%<^GyJbCRMH-(zzx-xDizWjfoOK`rlb&12dyZG~ z#k18@Gmh$r2F?BY+YuKv*Dv0VXuMpx@q_EnMRq(RX$-29bpLqBu}E?=_K@W8 z^1%trO*sE^P)c&k!IM=}k)u1z5Jc$6Ua z_^yp0_IQ*a_V_M2SByO#C5Sz~YXeeSnYKZ*#^+Zb?$oC`qW-co>Lck5$DiHtOz%Sj z7RB&)|Dgd3Z{9ax;jR02RNcwn_YQ&l-NWC#{5`r>XYTII)T^BSnFvUw9};#U#U|a#@m7Q^QAkgR^KK4>=$e0+@jJ0 zjZeSk$2m#*s&mO1$!XNu$e@1peYo!@@tuEn&Xh=#x&DsmuS{F`^1Qr#<8tLw^;+*A zQ*E9py}zYK8nxBXNKeh7ZaDMYyhzni-BW_0JTC;p(J+ENdFD0_bzJw9U_YK~z=1pq z(k8dR0MbUAc7wFp?Si!7rsqN0^makoc+)Pak7_j!d*|26t!8JpYi>1X%igKzY9_bo zSIVvCckk>_ZZ+$>U306sVD>K+U7I0pS8ka%*6nImZkbKiUHV43)f_W>TYx<`KxTr6 zo>SCNal5uEx0<64*W7C6`t-AkuI96cwn+Ua?D5gmmA&N6Z_a}*KXsaF4DaKVJ6kQ^ z;^q0`M78lH2w~D;Y__0>|4Zk9FvCAc`HtB+#B{%Lec*acQ8z>{x>PHPX5cbMT=kWUJLPoFtCuh5OuEWjT^1Q%xp>jSH+74z z1p28jHve?);C=H=o#jg^x5k-x_kr`NKldpZupnacq93l!$@}3_=Ch||Cg{9$_UD$t z!Ba=@h1DM>`epDnMJdseXHKrjs}7cT`#6uU>>R!z@Q(cp)VoqT|9Neb_Kk}z?yp?@ zIP*J|xrd_W^(YFl=hb{*>M?oEyAk%E^L@ZMmE8xcbII}MxyD&EvB#yX6B<0Fy_JIs z6ZmGVr-aYFdpRfJVyhD7TnW-jxYDbHHdVq&zn2n*Pwr9hB3}z%G=6Q)nvc9on#NZ+ zTa`4YnRkO3C5@Wj#WH4vl+Y-x$A(XOOsx1HXWm*l!YJuNzFxuC&la8jpee%6iVUSK zX?*AJ+^#t_ER1_|1MV0W)1P(k1?-34id=zm9aZvUYR6B@Wt zH-Ni#a6f(*q3*(c*B#M6zw3@+FWkwSWc%(}$T#Vnj-9++$f7jJI{(L5t6sUhduOx% zW1~%jAN$(GsocgvFDTz%oUIluGG@v=6!V_Bzx3H4 z_rVw)ck({X!)rU;5&8EB8DW-p_Um5VY0lO2mk<5}`?{v8^8n^wa5|&D@a7CCp3|Lp z-mUJ`XM@4rYo5XD_=n2D6+J&nbL#2qx>I}lqpm%*r^}kojMScP(KV>{G-!*Q5k9MK zT^%}r#l}}!u+i%2tG`(uQWbhuo#MUyH~54bKEwC()YEw4{c_lm#?#X;^VH9H+Vm1n z1C6IcdwGgAo_?~9r{Tua^J{rZHJ<*shNnl2r^~B(DlndIk*6}_Y0xTV`C(Zalv`FR z3bv)9u$p&yxvI4Wt;G6xc1e4B`d3|V_Unwb2sCd*r$=KSN6%lPlhnE&Rysq@~eMq@RWtidXC9{)&g)d-K)SN$8!*O;qaIR2@5 zxrh4frT2K|e6#j$Th*)c{x+w9v(=5_quzL{sQwovBxn5tWtOh@|4-&znbS1q+Ihuk zQ1d?iP~r^s3tIgVZ|lO!miI=P-!*?={`lahb1tLr-&p;&_}oWxotR;yuqKjN*G5nZktDPOtKx*J?#8fl*f@|LXI6PDhLBiKtv!3@phoNGq2;};(*}BIcbwK~v7Xv}|CCm{y3cTr&&aog zHitJ38FhZgNug}p<~ z^77v$Uj;E*r{o_kTW8a}$#!XzZPk}^dOa&G@^q!NNQp~YDm!uTG~~J+wOx zDO&LCKzJXKGHNaP>~FO?*FzL|eEe&5TA7FTy8}X7E|RY5`Sl%=cW+5|trLn~zh3UA z*UA@OPV18X{P~mf)9As5r2p~n+Pd%P-*2l93Zp)kNPU)ks_OF-sl8i1QMLN9)avu{ z9*@Sc4fOh)r+$UL$m#Vf^heIY9g$(oCl+vb^lt8s-p$?70o)xOz`LFM^KR$c`>v1L5RWsmB`QOT;|On?xQwL~h@VxQUTA zj*&Jls*0JC8l9`(PpD?Z9?bYWnDKcq<8mD1^}USKxF3%pL<}Kf7@K1ln+GvAN5%41 z$O8)xHc_9lp63jmgNE!8@WD3^^OTb?m)(zEpR?}B_+8omjn$m2US1tAi267&cI&S< zYtPkpsOM+-GI{dqWV!Y9Vc+gx*T4_&*58Jbv*a^%ufrL-AbC3TgG-WD+Hb#kn3!{p zU#lMde%H^hs<(DJFKz1o@#AAfc;_tj0KwV0D{*J4iYXT*Hz;-mYxfn@l9 zPxtTZ_W$IOeOhTItqVA;xel&fIhyZNoAvznRrz0i>vk$Un^KS|^AlAmwy+9_I(vmi{1v!J^XXXtr5wI(5-dWJZ=etu1RTGBwA z5uaaGZ##AFT0|YHwtDqWiS;K7qz)7HSOYt2u?BL}N4={iXV;l$UgCXIhW|~vf0*0< z^n#bvSJRxK^8)mkpX;siJD2am>fz=EXyN9C7~!Jc>i-hs^8!ZqkO2#RJYL@EtB)gd z&?X^%-2IcUC2KVQ+2-YXeQg@hsFkbNra3bPTp2LGfDvEyoYQJ`DAGKm-#Ya+p!$-7 zYK7?DJ~OuQ4g+}V$NskZF?pvCYeQF-aY$m@de(N)dkOEGd8eV0w<%rc&yQlfzPfF- ztO09Z2Tgc?8)yHvR1d8_P;dS;0nVta0V<~4&dWOWQ?ZO!u}r|v(Nrz5e4ki45z9qS zEFT)NG-$CL|6Ex`p@W~fV$$tR>)(4Q%apgX^VapR(mqP~6nT4R0OS8uk(XmCL^$y_ zwhZCne(KzSd4bcnzX7^Z~U{w?SQ-aHO1YVxUaMq_rcQx=Jiu?_c{{s z9lok9*4W-okDD8Y`5nC0=h_Ba(v-aPFRe+_HO=$E&!~?}yOPb=E4&0i(dOPptGCe@st zpP|R<^5VX^#Z^=7+u_xxJ?J5Vy4c>qhuQ;Fa@a=j|_zwNS;Pdn1dwP+F zFG|h@)D8c=`Qka-kuY~`gMUA|ExjuVQ!E`MKqsc5M*8cU~h_XY;!Erc~dRaB=3osq>V^%sGE;i+aDtpm}id?b^T@^X#~CCVkz{ zzJ)RCd08<#k+4zB@6%U_Yy8@~CkInyV}9j*GYd$vrUpj^+tP(Z4eUYN}PB`*Zs#CpzB zM&x@Lk?&?x6ZXY zX?njZ)+ZLJ_|>?-Q{{|zk@;%YK z{84=W#M9*If8f8J@pL+WKjyEbanq`Y9#8v%6DQ4+KHOEcW6|mWne*ORoK`*NYQ|^t zKHT!&_)8N$iCr*cA>}(n*>e(pQfZR0QrwQE+E|HJ%sKdsF;VetyW`YzdhZ%$ymAVZ(B5NoPOS=a+@=0mE`}@*An~2H@|sUVh&xXjg@aoTjnJE z+88TG$%tBa`>#aL*XuFQ+o{DI*kHt*a8<_2M#F!H?*F0Nze&bQiFwH{WULg|rET70 z<*Ty3SGQ@ajFl=s&lPAz^v3iV}5v$?A%VO zPG~SU_PLmF#e8i%J0OETk~wPzH);Fuo>%j=30PAb4@+uMVio2buatIlyz_ESxBSn_ zGiL6Y+2zU4re-|0=ds6Gk=Y@4$I~}9!=tusckq|NV03m6X~C6*=;Xr{~-Cnu#5xh)#QH8O5RM>`{e!RZx?qxzxb0 zVOq)CYR@RI_AIvNmO5z2jNEd&HQ@nkv|eGkPG|8<+*9o3o+uuimODkO7E{{&+1XPZ z)3fs`D(=h9o;JPQUV+tTGL0*biOGIQ9P%}y=Jdo0^oQe2cbb5zVI zLco82_BdzuwA{z+*;Ib1JwLlVcZ$%52t5x`EQi*i$VfjeHg863v?t3RDOTCj{0Fz? zPo==3!r#}9|AUB>7LDSIi6+d0ju|D7*-LdY`Hmgzoo{D(X?BsrS)7|^fAGd}kIQ{< zTuk<;8&w+RoKaL-K0UYCI-{g0-Rr<8OyP$jCIy5Ya8^zZP5qECbu0xJO=CiDz2^EN@hoC{Vu*ee^1AgJ`@upVOn;)8}_^F z$KBzMcisM`vW0xK)#1-VVX-=Dvj|IhL_-BDIF#bHM)GMfBcXZyK;od zR5=_i5ht3Wpr8PE7&NEQ6HTU7Nq;z&`T*l|QC@bLG75(d&3=f1o8hDs4QX{uFD|w^ zO3JM>&^O9RBc42mD4LjmfxYC>mwCC<$_k4L%DwHxY4%*lI3Y@5_^ENr`b3cf`%f8j zjuOW`&XO{;;|#mC4E?B$ATnHLl$2v7huj`e|cfroD99$kHOZ ze^IV62uk;sINkaAXCg7})~&pHX&-)Ji9PPIWq#fJtKm(D^Ln0pE;Z3)+ROMFH*yBq zDJfMggQ;9xT#|=EDzldw_2A{7Z!gH5UR<7ytk@k!d-Z-WI?6uHSw1tezqMaKD^K}$ zXL%t{#(1HV>2(f=y|_&CiBZ|&-@kHP#HPCdlIfIEFCfXZNzW{_qsp<3tVLoxTc=GgD@V?d zEjtR|UW(}Dqxefot%dfYDTU=?gU4XRsBvzH%}yJQb(R-VoMcL;olkHXB;=!!*ostcu;mkyJz)Uxmi%C9AD=+HcbzuX>4@6#Kul^xwOgj6A+ zN{Wl=KcjO?C)0+i&GSlfsn4?V>@u3ho-LhQRg^9ct?lSG<3&i@?DxLbw0ia$==*mp z{x+L%=ul&h7}-D4V@G7zCRuG@D8Zi3 zL@G;4Ri!iWG-$HqgNzbWxmYvu4i96Od!(q-<@ugtfm6FyP= zSSN{zDrHSW^fM2!>fv9jhwXWJZWZh-EtyJ}$wpI_WKYe_E16uB>&PB8QYL%yi&Pn; zW0hI&)bb~8HJYd;i2O2!ZSf`h;+CRFxZdTALdEo9wH9Hhc5PmUoVXL{t(2}06XBCe z(6(L*xy(x=qmQkk?5(m|Wi4kiq}QXE0or(`YEpZY+?Y&Ct9uH_s#l3Br7B*FaD$_~ z!?pI0Ywd5epH~HV*NdkP2gDoWkoZf^-2=0ln5lBy+tvuxn~ZpB5&I5HD6=%zQC3h= zI?Y|1)VoBi8vs&nRkPle7eAf(AH&$-*a93{<-zwvZmE;*Sz1(~RrF*rsvJ{_?f2*d zt~TF+gw-WR(KN+unwINyw?ETI^=wo}tV}?KK_@8x5;YaqC$JBV&3tfdTK0(K)L|VHXnHeL}#-)ys^rT*VvSrHC?LO5g)_zuR zTX5*mkz*fD%ao|E&o(N3oWw0ZA9>3ypuy~3{i=n03>l!rO!X`+xTY60L44o=d}CWk zU90$6pmmhd-NXb?($FG)ckBaV4f*rQAM3x^{Mg(^7F7_h^jr3d7X3}-uVt@bz1B-F zc**}@BmK18G%E|DYSoan#3;SkCb7eEi>H*(9EH=YtPx|}=Cg8(m}8)om&uG86KRTC zOtlI(ORS}Kt?1UGGV2tibBeXRgfP}=te#9mC*((2jed|jQ#_`VvKETS=?pTNC?VQn zv89zMjeM}yDgB|%ZfctDMETgWrQ496&T3R1h0*-m4l8B#ir?rigT*q}!x^-Aqh8wJ zk8Oj0$hYK|E~$PUjNe$cGsr%q^SQ2}0*A#v=_X+MvFCPt33X@8)i zOD-zL<`ml$fy*oRvgCx(=nkw`G7VS3+6j-1m0#3;_;DCOEv6t*8YO*ZY3dKW<{(CX z)vVAxC;ZpeYw=^wnJilt<-4s8>;O#aakBDLYGb-R!-R>BN-DQ!6iq4e3~bg?`{UD# zSRJ;)Uo?4ezE#_0GPT1mdT~mdGe=eq#-RzKv}s&|RdpVNXiVv>v8Kt>i;DBT>Wli5 zoYP+`QtdPB#cJ!%$ca47c$trzb-8YdnZN}b8 z_Q_;z+hiJ`7P?}yN2iWW8j+fvot7OFJEZ;Ucgx*?8*NCj8Q#%2Wmzn?L%YJ*H$E$d zQOWG@+hzCDYw)35(mz?+bWd!hFS?&mkD7nWMNy5%i`EWbjErLp&EwS4m~|M-{QuJR z-x6oJEdNd^@UjEcg0Q|4F?*K_5rr<@D2I%<^L5^x-6##c9?!MKXF%W{c*r z5&2@X%1EPo{Y(3ik)J`DP93D4?WNfTTDG#w?4GT(+*Uc0QnG%e@tVB$lUPESV$W74 z=}>ESw!<3vL}5`Lt8gs+Jvm*Oqvagix+g)`MlHRyXx02(KhnhjVST71ADdYpXjz=F zvP^4L%Tqf4zjD8+y?UBfRGiH`!d~p9hnQnHnS$9fOGcJB3Rnu^u+~GlPGy(41t6}7 zHO-iN^`?I4!BkZ|r64#5b+6BPq6gF45~9Jedhl_wNjXZJ_LP(oSyD*}PmU?EF`fi6 zb6M&r*H}An+Q?+m*Qo=N#*Q7A`CuCFXV-phWhEwFPslr!>+t{cS#M#NxvTTW@r^R+ zIb+A;)*6&r+7wyF_zc6!P4|A`!V$x!KZN6QAiPCdpLBH$69R(fQdIu=>_e^M^3 z|CXxW;n5#@jz$=Zb6Np)UQ=(ipy*k7{=aAsJulhr^+T`zt^DX*lIy02T`nhod-$v4 z??e9D>L0O#jjpOShP&wW__p|C?rX_Ea@5|v9mI9^E^M3wrNy3$YiP;-c~$r z1<+EWR9r>*6&PxH#by77eWG%G+-ot;$ZDrPcz9K>iH@k2Shcd6Oa>2I*qrX*nFSP0 zf=0@kuPp8<*4|Fp_Ld2SM|Q-61zy>ywP)mV;$xaIs*HtWo=!{%$zb zS)WSw7b|5>R0ryAc@8@aEt>tthuE(i#krrfb!*qA@hp2EW7nvu^DplBYz{04fh< zI~PR%z3}~-mzpjlNV$z}B6XP0d8FKFrA~)FB9}NEoZj@NV^ncYB^!~Ci86fK@GtfD zW!<*KI=#$p9X&Sl;fyp^)YvF6#93cMv^wne{4#x~K&HjzEJw)^4|T>pJKy23_Wn1G zD=KFgaPG?R^enAmGwfBb|fLQ%bNz9Z_uKmY0-QlpD`^Y&hAKjU$!G z@86=2jdJLjl4JkU-Z6$A)mlS!9UEJ>nXIi3%g%HrusW`vMv`T#Y2IgiWCzh(GyLzD zLmkm?^V~k`(NRT?Vs&QUSkHPut4>pIeXuF>&fLGdo-t$%NzwLInD=T!RoRcCA5}Tk zpYKU%e;|)!oYGWtX@661&eUlSElbwhVV}|#UA1qtE|(aw*VBvf%xdY(xvb#n0d%dJ zGGauA90}E%*4&`P{m^l}?uV zX50-|d%kUY?m4F3BI>Nw;2S1$!}|=r<#O99dJ~MZmv=NNC0F0NT!zxu%O$pv)L;jS z_D`kfk(st+tz&H`3E!xkJ~G#8ZrIT>-Y6a4_UpjhsiR4EsD6FQ>D#xyMOsHOe=8GZ zrE_wL!)^@e4mQFHxf^CY>*IGCtLaKt{11k3RlfiIal>KW){=MTnxi-cfoVqU8TCT--FuthVP|(3|KkIxT_?_Wz%s9BI z=b*n1Uo~=3@kd|(dHDAx}rgj&gE8TjGxZJk?gJD-v5oy2Z^(7C^yGHA^&#}8N!=Kyo76>rvP zd&|mt_H@G<5l)@birdStbzZf2X0(cDM(b4F@yzfx*f8MaFo^egY%L?&61JYHGUKea zdY*yZAr9YE+fUOc#n@Kq84KnjkFhc1JuR8xZb&7X%KzRr{l#dAi8m~cvCbA}t8Wl4 zcJN5eKv8xs_X=7BrhaY^e((@I{J3c)oP>1P%gW?LT1rW2dTv>nS7bMe=e{=M8PA1+ zmJ!_`o|yZ&Mwi6x$j8Qw&G1V8M&&TN{|(2{*!J7t+Z;DGJ|tdH zRAJ9gmlKaI$lop!sZmL4J+<{_S!O9a^Tpxnry|QrHI! zw0eVP!E_`ZZmE@W-|2eMbSOVlN^|qYG8n;2MWiaP7hy;8CGnvii=OO2gxLM88OxoT z&53fahUW+5u8iMp{@-8Rh5dOm)VrEpg`9{^iEMUlg*FD<52k|0z%;NP%mA-|sz*;cmyC&0XpcQ-*j02B@Dc~7! zBKRKY1TTVB;1}Q;(DeOg*G@1PtOLWrQ(!N!0gME%fw5p%Pm?Jg>4WB7X3TiL|TLWV#Awg3VwdXnvG@ zfPvsrFc{nlhJyRSF5oe+8(0ta1h0U-z@Xmb3yc5Q0R7)$~y!4z-> zmJ5{ z$ip4TMQ*ceAXo#YgP(!@xMGKEVhuWE%Yw90Qhv>0k}$0JnpC!4sgh zjC|b*mLs=dBDfeV0QZ9n!FsUg4CJsMXZ65ha4A>=z6|aK&w}T`t6&poeFFKti}tCY ze}LV4U>&(GHQ+7Z?pz{FwN`D^E4Mj)481Zg!mk9iWBb;y@+!23`c^ z-fXXV!~+gnLjDHO9$+fCAFKe6fQ!MC;AXH1tOZMdid^4KKL-=RlVCo00jvPOSV{i` z16R>M!Te454)CYJFYy$iIk#gRHT!Zo8Zg3)a{=Z2NjC~7v1M^Se&kdlo)6^T7 z0d4@tgS){A;1O^Vcm^y0FM>|c#4dU{7!Fo|k>D(F7+49WgLA-qa4A>;ZUh&Dd%*4B zYv2*^P4EmD`ZoFiECnOkrd|x%z@=aoxEU-4w}X{nEw}-E4crY@oS|O8(_jdTA%W-V zkKk!=H)wl@a)S{c(_drhH{dLA3Ah!k`;__v2Yybt!Sp+D78nOE1>?c3;4pAMm;@dJ zQ^0yK6}$qbgF$h$I~W0GfzjYZ&<5s!Szta`3>JcwU@^D?bb{N#Qm__W0-gbvf)~M4 zVA#FLH8>D#1{1*T)%JIo({Yf$_9=cbBUMd{KE0B!|?dU7rV%mSOhS)g?&`MC`~a7~2EwH;gs)`Al17MMH)J}~P(0~1tN_n}i^22YX7D|5 zFF57_>I=LA2Bpvr3CIJu3QPsJ4X2&KX0Qr8orpYv_232Y6R-*FF@k(PNP6HfFgD5M zDg=|kD$q94CM19%p!1Ggo^_XFx5i~!&Jfy=cN zEKH@oz;j>|_z4)o9hAa{NFV$VEC$D<(SBeCxEnkPUI3S*Q=bnpUW3Kp39u6U3|s+* z{|D^?P6BJev)~o*0vMD=zB62|IB*3x5nKa0!DHZJFm@dE3p&7yV9zYl8%sXG3UD#F z0^A602d6$ldxDq1h;;PV1nLD$1GB&tU=6taM=n=AIBOz$@INRAm;9jr^ zYy{1dkdF-H1RMrtW>ZdZLXOLI1U#QhdgDlMGXCJCJkkM|f*ZgcQ>b5XKNymUy#ZRm z<6t8A8JG`tDI|Tc54Z*#0`3Lh1RKEkBI@m7hOy2do7r zgD1dz@B&x>Hi3m;$av}vw1UN89OwX3zzT38I0tlsi@_>z6}Sf64DJNCf_30_@D#Wc zYyfwI*TB7C*bgZ`*cYq?DBT z(3C~_!Ei8q8uAF*z#6au+z##pkAn4J0~qe0J|962!ANixm;&ww3&9Iu4H#5HKEOz@ z7AywOfwRCya48rv0sZbIJXjA_g5i&&C%{Os7K{c@fSF(;SO|vvh;a}c2<`?`zzbk8 z_yt%AMwT+Zf)l`_;Kdo#<3#lL6YzuSU^y6DfxLjLW)knC)GufSW1pnofYJX+dBBuP zspXB8Ve;0jd zL4LFwv_N6vCwvjmPC*M*6pa=Q?YIx04O*QKEeqNnXx`}-L)-2}lRB=1wh>x{q>&UF zojTi`a@ZEC(%+!_dFN?2w59NSx62V|PeJpp?=#RG(2TrGS{I=eLJQZ@vL?+ok2#za zYO?YiM1(o`*)+c}Ta9J5xit8&?I;XMolO#6e*RCUrz%P5wEo8jO{UvKUgDrz`O7DK zDQQ@KhXf>rI+Ip}q%8=fL^YOWLCb^vll%@R9Zf!&^hVNKNvDW5k}z5PZKTZ-LCec3 zTzXQCC3!($@@#Vf{I)mXM3?ZllRWN$x7449q|i!p(yFkDYr<f<;TcA_a3Lgxy4zFYJcC~xeunH= zpMm=-*LL%7Fa;kT(^d;8nTjU9N`yA^wq_URnvo}}X+dCluoU$TdO}iX z9PTy{9kduZC?(7~+?H6Chn%EkK^aoHv(4rT#cn&PDk=`13#4%l{si1oZe)8|P>S$o zX{jI}p(dM=jtZ#ye*ijxa9t!EzhV4EL#v0DPx*<)t3coK12QqqO5 z%`riE*T8!gUZuN7!+RaweFWYC)SuGb$t`)kb+_n@MtCdWT_b&Hl*&VnuD{1Wb_7_`&?PJ?# zwtr|EQ0itU=>-mCOp!89RAoHjN9K}iEX#v4W}BA<`FHVFe4_Fs+y%l}?`d|8ZxN26 zLJzkf&_CQaoYZLq?UN8i9}u0crMJ|dIwjo7(5wZ4D?(O^}m{}=3i?w5Q`SLNAlPFfyJ{HwwWq&zD^76h&gHL7lXPpLfrH1E6` z4d^j{K32&}{O5>2jlEQ{0WA-y`0LCVZ=U#<2e%Rb#*V~q$jKLjS(7I%%bmoZrTQ~1 zfiV;vYC3%M4P{#`4l$XA#xb_Shdf0iNt$$+ZSG2wsuCTuAKp@U_X@8qG|ap`Sk?E+E?a12plxMns@S6p;vzO_D?()aE|#QMg{=uU#CmVP zmm>XRsX@=6t`hVW>MOR-lixNHB~8%>dvBJtP>+rg+EHj5eQ4*PE%Bi>LVL=GWP<-tCI{Zp~_)kGAZi8RqYQ!%ezkym@(R2qj z2b8o!_*agfk!PV<`6vA1mR~A=aXd&lj!S`)LQnXi^%n#dtO^rVq)op(s>pwy+1JGM zOu|CdJf@2H&Og8&rzDUW8pb#~QRcu_9yjCHj33LDs-LTQX@PsnqWZ%Tc%l>Zxe{zV zn$GZV9<(_Uj$ajjN2t^*(1xHNEZ_V<;@cgNvOL&apiTBfkG3?sy?g7+1NIHvAN8B) z1F`=VXHIX`aa)f^bY0sQwl9;KlDuG7W?~PB^2lNm|#S)wPpWU;HDO_#DJP8MnwC zt*=A-QPD^m;=FZm{)m7}; zoJ-C|H9W-LIO8Ar$U((2@izts5xCV|%&#G3$t|b)(uYLmFA#ov8fRf}OF5X&X32au zQl7ig@A2!W`H4MBbBs~*Lie1Ih@?IS!n+M#ajSS11gaq_-DB>kb&7%1>lXNwjdeTq zksO+%=3Wz5giMw?ks(N%-Bq{;Hjj;UMh(pVUzpU$c=D}Ne>(m4nP`&SN&06wQ=|F< z18JEG#v z!91h8tO(H;rTioO80p<>0-;KtX5ETRWnRBdpGLiOK(B3t1HX8sCjPjc<0v;+9_| zf2q)tp^=KzZQ>ZC|7$CGDXMoShpII{k(0^rrb@oDwR|NZQ!G%>NtOjk!HiCl(SF9x zw#XRCO5RS9kBlFB@|Fdyj`W;D6CE|2^pZmB{b`}~Jqx5i8snCy{kQir?{70*&+?%d z?fJwVK|3Z-L}v#P_ie;2_9lg27GxeHWstJS$l_6f#<=1i->Cxwi8O(fYiD=*avpMk zTYi!J)j>1m-`HlB@E75YhZoaX{e&h8G8&q91^E?`fQ;r2f{{6CUsJU+PfGkwd)W3$(RK%PYi-{jcfb1%cjkb1S@i z$zMLah8_{QnQhK6RD(AD!&3kcU0(gN_~oYbS73+*}8V<%NWi=)1~L7T+<%5qATsZr)_j?j8i z(>lkhFiFdh4r3znVqcjbygb0awiAUzNuMSCBk4-g=Sg3vfrE7m(%wzl zO{JX28bsP-m94Whz?>$DdNkeoo>FMNxcYosOL*TvTj?r!%)c;tL<>Xv3#l*s4q3`u9Rf4X7c8AbO$>!+{$qUP9BMo7 zIEHMc?v%bAr{XZyxLKk#BJmRPE-jXV4ArS=icpi}D-rn^@*Mg{;;dA0R$7wOGW3d& zESV{;3{{3vlS%ZryQ!&o)iuTLmNUkEw>7&ykvLu=4qIq_AZy2{nzh{=9w`=SS`+U7 zqzpM;4W}&BkDn84=oZGe{IL)#54-iLMsS|l`@+?~c5Xx*S0dQH;32rbNuMl+jC z-(#%+n#e7(;@(3MzX<%yZTLxC@%UY(El?%uXXSq?v`?Vfgksq4rJlJ;BxI+a-i`Wz zq`v{)B+^IhRo>XFaqkW8$1f2-BYnx!F=)}y#4SI;dT0Zo8Eqo*UV&zX=38dr4`brd z13#m^;-HC~ghJbc+Y+GqloK_k_FI+(VL+KHy+%r9dYG*6#!=rjgq!3EmyXD1$befz z#M@Sx947$zkytG+V3%CZ9sO zWk^x`AbW{>)lSZ6O8ONl-)gOMd`m63y&Hyspytg%{OUJ8+mAx95TPs-bR z(5xemdeufl|DD&b3~douCf!mkBFpC}L+#;~eWVfEP9K`3H+{{A)&tsNAKE}@v!DeM zxBMiHL}(5lS|+p{pRk3{(tT*Npe6dymO_j6p>2g`^`Y&D7Un}c2F>I{tB2ND*Rl?- zK&$tm1@&Rf_MypLhB|15UKQOT_ZoIVqf3bVwAeF}yAI-K@LOS#dk-6+*);xE`#ln8 z6+E@@D0|Kpn#gu?nsEkVGk&k(hq_QdkV7Z>|LBdD*1PT@B?v6ISEQpsUWXC zB;k{LEDbl{s}Vl(a}mA+*uR!vj}_fjd9!)4W^8Mgo0wT1{O{u{dm z6Zkr7RL0JezS3uFvVCQ{s*OO21 zeT=e~lMhc&O{Zk}8vYlF+YGP#q%Vfi3C}|Fm1TJzh~G*4!h~7>MS?cyZ$i%(+70Y_ zC%k6vi!cRl1R2^x zIxpk4lp-6+p@~>8Qj6v_nuMy_lX~cJ7xG=-dfiO=bR2$(_|Y0lW{tkNET~YQRkS`& zLei#U!etRo+`6nI=rtDaH8kmK#k5N%d}__+7M0KT)(<Tf)Ld!;YF{*WevViRSGMI`Gy(xX|6UgD$f^ji@eMIy`>*CyV4K}%L{}}4y`j^ zZ~dpsb+>=idO;Npz3?N?m`XCLo;E;#5_%UQ@RRo04Xpy2Z~KVM9mCIwpP@5^Ru65m zSKO-nlwmxyO8hO4sPd<)l@ZUFWzO;R2W`NDSK^Dl8~O7}L-J&Uwip`AOR8U^Q{3~k z9Q@|tr^YwDC601v8x4M*t^CzM+YC+eC%Qpf`%)`ksy~X}*$K~HcoIB3Y60PT=h!6O zT4d`0;pXAC%uiMEGnR`9f)$V!d^lNKnU+?TJ`zr#um;vpv~;w!_bg8ziNn7a{=RKs zg+Cp?Zum)lO(|-AAu>2ot4?h#q#T}p@GR5xc)CsMeY|!~LL^>heC+49Yyq!6Bz3-@ zILf(SNb|PP5ve@xgg6Jk8jw_m=k)&>Eq6>)i{`>V5c{pq+%K+K}i) zE<uu zA5iBts4IjtrM-bw;*`6z2MOmZkBA8G9AK`1pR@&WMk`rkKoL>Uh0;CdSz!rdy;S0A zPktr6ICzf3gQ+PpF6)q~#(uTj&pm}-j`&F#Bq>=w_p+JG;R(CQomP#fZ9C=w^3;YM zVGXMR;$dDa7NgpY5|NYf zBZ$Z{|JLl9fgAabR{B9!hh;0?V8u(uL6MV<@Fq(C8cE!SE#^C39n)l+1y;|piZ0_a z=FK9_RhP7Ls^l++1tl$ihGFdQFqUaOF=)%QYRs!8eADHQ*`0EKIl9p^=7y2}HE2Vj zdD}N(F^s3sjQ%6}>Fi2-8K{TMLuJ6l7JHyS=sj3-eyun@v9CuvL4DUY0xOS)Vn#&Pv*MsI-^*sZ~Uy z!L?}_<0o>*oKYW_Jdw%iHBEq|{c2-bqar@<_B#RX1T^uNpY+!Y(2hY17Xo!-+4`PR6plg+A@fGeiItGH(3^rR`KcE3zMYus-I(LN%)C`{}5h7mSk*o zLOTsjAm;(^I_XSo_hX+bxvuYaFr*{ z@2v^vhbqjcn1h8y!5F`@MR9MRF4@LqtoMtBElyeS$l z@?VJf%Vik`M}Csmo#boS7y5pHPOF2K1T9Q-6F)0|r=TT#$vX&yAY+~yLdT$>w75ie zPmp#gJZErQ&W{pVtoKtBLPJ8#n~nBVy;%g$rc{v9#p+rP8)lL(+Ysy!;_|LndH=x` zFPas;VrZX0WB8DK$+$&vC%E_Tqz#wq;SOj#(ezc;skD4YLfei1k|xji>ak-JRP836 zOjGqGefu1|ufQ9w#pUkzi99#qcL2X;@so7`#!%UV)0d)GgcP?Zy|!d!UgJKJBjp}; zA2ulOeo*qkv*a%wS{1Zn+{A13wt0>!>03-I z<$#9h0DX*>GFs!g|NOOHhddJt_x&~6G2F;aB6;E528w(|2$q%PDYLE0{&Qix9TUB2@_VDYYswl$iz zS^lM1OVVZ{Cu2-5ZGQCnNU2|AU&K5^i%qo!*);{xW?SKvHnaRu@z!bmMw>h$uAD9N zKIsD^KPhkV{iH=$6&cT>11h1NhV~S0>Qcsg`h<-5<{Wn=>g^%?yW#Ka*Kz)O_)Fo> zm-uDu^TeOx8^7c+Y$#{k;13dhe$o8(g|-e_r4SgiSW-@x_F#P39xO*8_3}38f>Q`v z7GXXlOs(i8_K*BfLWrIB{HyIXSaX9rzLw*@c4^OZ+Ci(79z=hHw1)U|cNVwkJNhsN zw>C$r$1e%Lp5n((%6J7@3N&L}7h2HwSrhP~ML^4kHbw&SWB4#dLt6)JmJp;a5Oza0 z*%M@b52N;=i5nAr|gc z-~*H#(VY6)!}xaX(i~Xhsp}^Rr_RWKo+x>53@|53=#`-_vJ0V| zN0AE>zYO2gZEw$)B3|yb&+31KV?!xkr*2X`+k2d;aU4UC;7WjI2nUJ2svIc~l0 z%9_JuUEwM|sfUa3orI4p(b#IXX%Uj(#E(EcZSPTD!2cuH^L z?zW0p&8_qN;z*P@m;<2~ z)s~esjI8~!gd^9K-FiQAIC2Jmh43ebrZe~&6*SwtGIVagb>zlp`9RJUt2nL@$1&mv6y1!RuzW4OP&=R~RVbVL=Cdu!qurfW^&zqo zM*S_h8JQN@N#TJyWX`E?`=NlfiHHAywrB9;eIu8MBlugIh+P)y*5#V*pC#QS)FiUC z8~<1E&yu{;4y1|Up-HL~er2eC-`0nAMFOO&Yv#vkf=atwBd+7OxZG!0v!FFll#9@M zS}50gIuv_${%YZ{tuuo3h@)K0ZPD=Fm&}#wAyzFtd8gBkuAcE<@=ytFD>Sp>(&}IZ zv}Mr3h2}M1l}9Uod-0!#zvu?#uhxIkjuk0oF$Ay!dyWqAZv^p z>PWQYaTe)ChVzaR-1xQ1;|AT|JCD1e^(BmN-AJF_nn?ZOSB~5Ayh=~AzeT1!EBfv_ zIt70Y{3?GxYneYuGXnE&7yf44@)KG#v<*Hq8?=Q!v@B>9KD1(J1wOP&Xqi5=70{A= zXxpJh`_O8k^@3*D6q3Ia(87Ia7oY|E(3+r`d}tvybQ1059iJ82MQC&f^^-K>pq=xf zr9eC8Lz@V#)`#YVw$q1J1#N>5Z4I==KD3?CX8F+SpcVVjPC=UpEyyd+4bakkXxE_G ze8Pq?6^`?v^@Y~ghZYYl+=nI~i?aC8a-d!5(z5>KBO({PXqn_QhxRxHtuMl68HRqk49sgnYpSzC#MEo1C<39_33-3N`FZ~Vp_qdLKE&cO|L@;vcR1BRb-5WsRxEl5?0v3{9`5 z<6lE~iC=!w2KmscpoI&;OP|N{m_-}R!fzvP%Wf!1p^biGj2PAh378973^8g@kvdyJ z*z<%HJIJzJg-uM?G_ss5Vm5*aj2ZBjn%HZz5h=qJ@{`rgtKOvy1==!<4VuKK>d~k(uRZmA{3o^%pM=W?hFT3m#c&T?o%I z3-v#ag#qppSTIPibH~ULPA+E|hKaFU;lITF9uN1Odi_c^@Ac5l1xbGm>DTpidGGZi z2(e;ns60l(Qwz^oc>3YiWtDQYzPmOI?>h2&3f}i{TV!XFu~@fZje`p;1=ULYZc|); z^^UstA;#B?+nB5R5&ka1j}bZLt~1L3n4s!V6N^7$Ir?8!N7%jY;!!ZBeSX^1(le`& z_NioYJtxBDUIUVGyqL7)ous9b*CZ{kN!XSWo`GDQ3_Gc3PTGD0{Ab~B7XAkmzmt54 z9jnbR{oiYmBdNel{^Ux==I=4r3LxAaDqN#K!ocE&^dhl`Go%~Iy={H|^AtyquWRjz zOlPvqo71Ol9U^5e*ZsvUzaIS6K$}RIa3Of<2&s=*w6nY`bp~#Wl|=*mJ^OQD61{1H^K9_6S^`Wsx`F)U?Ca|LM~fuC-renQ(0ZLbfl7TQ)H+6ibYd}#7c z%qnPsUhy?So8dzXc?ezOL$gAg;6sapmg+-GftKJyn+Pr1hvtOV$A?x0EgYJ+ow){@ z8Jc$;?1c6i^{f;CWf8flgLbivc9A+eho7{WH-96v^X>45q_Gz1!*7Llq8&ebwR}W08=T!gCg$e2vFg>!91)+&xcZMaowTZx^pR8VF6~ zMCz>=w`JZCNoT2yr@T;%Zfzc>N20_{_|L#E?WX$H>{k5A-u#L1M~~HH$%f7#ZYOfS zA|yvts5W40lW6~-fVR{`C~`xva)~37deGviGc#atf8H1^v;`Np%DH--1#Rt}Tt|qn z;vUvpM1b7qq1%gZ@pTVmN&dpqWzW~;deUFTSLb)#{6$~qC2QLG8IhBIgBd4@&XU5W zgsiu4KUPlssH1Z$~>ZXU%>&Gk|{npC9`(d-i$0>)FqGU+Y=V zdf9^Y3bsqjb@%kj9u3_;=yk+HdVCde9rrTHn-`{YZsBU_t#D3{6i0MUvUx;OK_c&C zG?rFUm6M`UzT2GtyM^-ZehK?(dAC4^y-3O_%Ku@bK+G1Ny1i0-Jw>{#f+8EE- z3M&7_?U1-#Bz$UZ8ulggyg!ek( z_4eC41*<=ye}8~&oMtL0(T+Yz3O@H`?s4{M(4 za!B>8p%vrndXx~($o|rvlf75oUoeOIrN}^-_X<`c7<4SuL#gcAItK+7J&HA*Z>D*X zenXeZI7!}BVHSG1+(&95) z<2Dt3!*PFn5o}kfvzSYR+bd$ey}X&h3@H zaOhu4kQV!}=UO@&F_Y^d0Zr4hWs0efF3)Q0yz$163noZdRXZY2XRX{r4`!QLS2TnkTgbB$`#$NBiZ1L!Vg^0tngD^!s>?C^$LsCKukg7 z-bKQ&Uob{~xvY|8idX^XCa;S~Zdu?3z;cD$I7-xcQf>%31OlBeBt8$~3K9+Q{93Q) zST~OP`3%?&3b9+B>K*axvWY^t!9tpVxD`TA#OH(1xntqR{V#1EIGTFE4N z!c|?%BIyjtIwPJ8y&-XULS6&((;>OR`jXtv zaT56L;NTS0L&dg2h|xlviFeeJIe88SahQI+EKlbi7Sv<%RH-a&U^XNsm9Z7X>EL_Y zKx8SmT( zwmV7e1RyM#bACPS}?%RkpeSTAe#vYJxTg3%lD5v)xh#*(N9 zQAFZ$HOM3J0(h4Tk`;gRk|A@q3p!11bq!_|Q2Ym(I*V!`2af6&*T~aR6R&*55#Y1> zw*+@?PSvXBOZy}Ujye%oo{xhtCGJcRdl^FD$fc?rA*K_X2A|OfAp9HUcGk;{_fct` zo8)$5cBc>x#svwU(^52vONZQQe4-X02*K+OqzPoXX>wQy2u5c%sFX26yD~)CBgLf! z{&&$uehObUO(1WLK(4$;gn+!`;2XxbhRbtE2?-Q2w@;IwIr600D-{G1)HP53FP3{6 z@*3g_#A!5$DLHxl#*m*5zCuv<#U>%D<;H2d&J%P&QFoprf#1%HawF`DEhmI^3@&P^ z>UGaGY&XzlGhDXHKi6e1T^@(aLHURLQ=*TO7>(e(CImEtkszKC9)x;02sDWxj^o7% zQmvmcE(-;Q%gdtKInR=K8pJFn#0wxYBycFPvrmY<@>K8aWcTt4TyS15q&+52XQ&`e z^2DLVD4@3tDgr9Ex~k+qh#F9r%RLc4aG64RD~JPfBh>0TB>(Y_YQRQGbX{phB#_n) zsvX|x!M|(i(gFf$i~LkBuhS(17YX3laq`6PLb;tOa=YTi^(TWC2!cFOSC9OM^J-A* z|iO5cx#B(6-CZX7#Au$@FpC>UA#8Dw2?FGCuUg|H1OW<;m5D42; z5DQ3*0f8gqC&*K=-9nc*T(*-a0`a&IuCzmRDTNEp?1tzP5M!jBaM^HTJ6vYLWj2X2 z5Di|o)pVH+mn~iw9K8+!3*jQg{;82`E9`?E%B%y|R zgXIPHokBwZS!W0&6_h@Jg&-awF%E?3R>pwXDCO)nd5#7#kNH0m#N{N0gXkeK3 z5Iq#cJwhNY91wejK*M`{s{DJ!uzg5~8p;3rj7z-~>e2ENz6t7FSD*#F2DZ&YK=e_# zY^TdO5D(Mk2#5nDUIKC3Sz2c}1Y*x{E#M*$=e|P|%4IT%jc~cd>(WHxIk;R);sA)P zB%TJbi^M(lXTewmuE;k1Y*Q{ zz0!n$G#pdrtRV3)i0i#<57FgOxIFK5Iad$}cpNSx&(lUJ6`u|v;F6Z7vyp^y*+JrN zxa{@1yg=ebxC|Yy1*mr>keDP-XMy~46J!lthMg}i+r2JN)1?3|gXJHBqohqDF$FHo zUYB(wHo)Z(ugh~JUVzK%UYBu&T6Cd2odqP6KTRZB;Ihu^avO=;;qs8z?H9RT<$0FD2S)|&JGYbZwUg1 z~+CGC5XbkaCy}0@;r${aB-yD0Gql*vH0m= zpf0k2#3gXYXiTb`zOI)C*fxQ@l>~k}x04u!La>{JJoNAZ?~H@XQ*yihJWFCcT#k5M zUL#Sciqs&_JI1&;0WOohE^!i2N}O`93+x#1bP`#EKCC5H0zaZpsASOuo4FzshPBNDX2-cAz!hRbLY8$e7Wq1ehuU^M93HMW9)%ISu{m{V?rOB-Eo0dXA(`Kc1H zq(q*0PhBQQ4)U{6jkCb}{D2ac`7KXFyZn;OxJsHF^a^po5Y3CIZ_^nFf9(gJ@C~#mqj(;dXC_BmpgI|CXA#INk z$o4`IQ-^4mGeImDVwZ6lAulWxVmw@6qZGwSzav4UA*&kQ=~;CI)PU2!FZ!L&TIznl5v|wuyvtfyo{3?2@N4 zNFqfyf^7;DewsYhh!|m0F2m#nyfYmCuxZ16XAND}!UcxcYV%IDWD>wSWY%U9N*caA z1()mKsTlyQ2QlJp+9dQu2mtE3U;cw=0qZ^zO(0C!t_QK2(YPGMMGW6Oc{)ub2`6vnH@*D|yC?OXVd4WwNZiMSL68Mb@e?h4is22jMwOejw_H!dD ztS=4TD5#6vDFgz#4I_!YByIw6kCeM<^4tRA6_&`?07 z=QVk5f&hHC0{(P>n8G5k{#`pwoO(Mtsh$0v*tGAjZf)mkpoZxlceP?L{HrvKI~Na2bJtz=sT+=Y&9`_li87 zQbFLd0WN6?I$V^1qa3IWKUa_v`3E-Tg1jjg0zeJY?gqKa81ftmRU-}y(IdCIZji`=4UOXgB0Z3_oz;JzSDORme}gqON7~UlHJFCh;tsG9=Wy`$?!QIBs0z z35hL8+a?gWzygU%gBnLdxm-@79)20+Ou1Z3m!YUL*OO2JPy-?DT)2o|V`s^8qTKaz z=N1zbzG(u2{W`c-lR&gw-3q@|G9bmks;+wZ526Y|TPwFJK=M@C1eX@LJSjH_#Kc+7 zpvg}q@dBi!)COmd-0I|kk@DOQ0vV6@)P-=4lV4~j)wM(ZgB6MFpb&UjOA5U}J&7iH zs-7P2smnBT5GKL7`J+Qh=E;vDMasW5azpM|3H6}K4Ej{Wqr@8z0CGtf=Z=-98LAO~d>k%gcsat|scfqZn;GyKk$(VIUxqzYk=D_H)a&O*Qjxd&|{v0a`@O@oWN z?vwu@pv(?>gv6O37%QDkg>;dJt|f?@>YtvLAFebMw#fukV9PDn5=0h$Zijf354^hx z#6}XzWg7{>bpTLjktXW8ME>JF6i3x1vN3{{qq1Rxg5J!mlrm1Vso=h@NW0+|VKUM+oQwCT-wL zAJ)GPY7o?fQ#A#6xe0G?_qyy90xoH|V94seQ!NC*wfNUWmkfxT=&}g}Ciq9m6Sj2c zOnKWCFj0O1yb=G(=&}Wbnf=-hqDNdHKrOAnIu2LBE+IyWi&|QN@s8^f7XmJ7p+<)g z5Tq_iCRH=gn7H5-B=&%19|`|o`>Y=z(fKN^Ysqw7BxY1$EMuj1V=*eH;-!DmRMg zF%aeQ4{XZZU&+3t#T{9(+x6Y%O&Ffb1>vfUg(8CRq_K|YWbl_OboY`HiT$z1o4X8 zc)ljL>O(;&mof%_HoRC&Lh)W91j>bCTT5a+UPS!yRE6X*5|e-&AaR{?X7QN}0>fWa zBjr*eM7a>x!eukrNf3TrLa5cA4V0&I}SHMdoUY4h_RJbk^ zm=`PXj+sscmugi;%hP2w(Jh7R9Ip!sbXa$C( z%NDvEg3ERi_^sk2nXA_ap+4fBJ@_|Nf{x}-tsF9ib1UMrM*fYJ=SUf;Iu8p0b{Jor z=SVyTDn9E-#W8CnZU( zW0)$>p^%31h{EZBxPk>unb@$I2q9663elH2hZp6uav}55alF}fmlZ3 z6%Z}*4+TlNAPZ6E(2zFBZK)&uYLWZV=8j!1ULi23HqN6Y@LQEXWFB1AHCz58kxqj9Ohl(Ot(4<#Ia> z^a7kJNV_@^m>hrrEGBVRhE{`U5tm8w+yvrIArPGFK^!5m0Yr%e11{@8 zTqy*ktp%}~#N{B$z>9*O+ianLPmo)&4QD>8DXpm_ zisb2(%D*bZb~|0}gv(C(H_f=bMwi#&GE}kxov;#JEd)YPC(qp82;Z0-ZP<2@?QXDP zrT|T<5`eX-098sJlwZ5W50&NjiCl<&QBubp9u7kip&x`xfl4nDqe0Y@fQ{eTK%x-D z?IctI+Dl>rT#!kS76&ncS)tg@B~b#GNnV#}Bw(v|W(zSwp6Z<{x~SrKh4-Ci63VWh z@w#AJ1_Y>ROP1d^$h3?C>TE!-vkvLBPHu#DgWRgI2BEHP@_&NditSnX0hj0GcAK%m z$i89n4_U6*dW8TRR1`Hyh>TS(PtfH_xEzvyXvUSAfw4Q@8I9nS$iFehMV_ax(}qfPfJ9@(gzA@nES~} zrxTTPwkULA;ru_Ma)!D8DI%U2R))QgWiesy4~l!(^;Cra{~eK!e~YLGZ4vS@;t30X zSlHi8x8I5$92U+^5&7_&h;;hlDN2VW5#hck!u`!mN1#Xc5gw^vKBiz3d z;f}$4nEZ|680LOUggfR?!`_do?>~!p|HBdPe~gIVCnDazETTPXk8r8m1Wd!H{J(@t zUB;urqx#qB=jn7n3Y;znr^~_Va&WpHoNfpH|Je>4{EpE$bofvIKQ$?E@%;I-3MVgL zmF&p0rY@XWR8-j3+Oewl!s*juMbkl6#fLaX-_FH{Iz}(g#m{hzew&M*=@`8@ z7k`^$^y^%Fn5&29;%|5LlU%$&_L-OwP}XILbC$FJ8+{e*A+o}L&jCOD9ZvP1{qPY^ z3wG>T*AVBOjv4=WorcIRZ!_-6#m{zHI3CKyM>&4=c8DVf)NuTg%Rky3*W}{oIQ2jD z3nw-n^}U9;qn@lA#&1KNzr2w}^e?3DU>S9pbjF?@TodIU9<$?(|%>#H%g5nfO`@Un4leW75G$)9XI^=F4{}XP+hK0m^A%dYTIM zh{F5k`+o`Umu^QWKm9fxk~u=-dZ&;`&xvPg9O1?_o%lB5t2OLgCOG1?mEket(f=U6 z&BEtNF&^Zc?d)ZFE2JEp83z22g`X$c7Z(0|#^`X)p&S$b!^G|IU-=%*Z^BM zRye<{a0$=Xc5Pu#X#T}o(~9)bQ`NSRq5^jcm?ZHfL}}eUdp*eaQM5=@^^?@ zFL;i#-@Uq!sg z!hfuA$#*L~hrUy%|48-C8^uW*NwzSS@`dXpKIY0q+^4e zu@>Gyd^~YeU%pLz5^-a1{2TEiOU|sbwfqtb?;&1h;SUj?ZQ*B((sJeyXSO?^CBEL` z{~zKTiI+1yO*wpmxG9GlM5RDF#Iev$E@P*CocLnmCY`IqPzwHP;u3vzeLeu+O}w7` zCOv0KlLR>}#Dz^=oy6A@-$neJ#D_kp!?~a3{QaWJp#3Sc%G=L~&#~|cV%P=$LJR*V z;?)-Zvck`HwtZ8#OQv2=k{_sFhj!~6i7}ij6n?g|+v5Ls@)!P4^QXyQE{1coKl{kP zgLp6TwX7Fq#Q#Kmw^d)hBpC-e`z`z+@naVL2{F)vf6O;>+uQAe`_;Q$f+N3Pf`TEJ zDGx6bKVsprahm_Ag?AA@X5se`KTce_Id%Po_+YggHf#4UK2OUZM%;ww)5M2c_&vl& zTKJ!ckGAj+jo0$WSa>t>aTdOfc%g+KBtFr?&zD2mk)D$+d3Pv5T8W6g!ui$O*-F6{2}7Kx)?dn5ifmukdk2d z8zyM^vxu8^>D=5I60{XNceWYwhoA4F9i*k9n;3aAJFw>({>$Esm|*9w8GDFx*pUy@?qlNB>xVJ|6EB}v>V&V-$ni} zD*S9`5BU!ge}H%y>#1o6rd^=J(`D7)oy0d;_@v3&-;qDk;WX*CQgFZe{+R&W=m`x+ zb$T{2oL>vzzas$uvEV5G_YcwGDWRMpAM_88;h(?>GQ)pP0KW<6FzlI^%Y^fT0sI#S z;Ee%zuiyy({`0i_`x*W}2JjD=qWN$6pyn5KNL|Z`-%0#h;x`kYJVo;x{8{3+6F2dC z--opPf)8o_VU+U-@lnLr5`WuN&A*vAyH)2B;^U`jIcvzjh4}IhYuu#&4~W;z(D-Ow zES%Q_NB!!u>e1{AHQsCC*Aib#+|;j!h;Oy<*9G@0w*}Mu@j}6oUpJKNa7r~-S7QKw zPXKPpVOLddI;;=i|3(1*?Eu{9X%E$F`6hoK7Jj7XJ}cd(N`nJ@zlDE^_(2PQp7;lK2w48Mi{i1-`}k6)zu z>n&W0p>O-ML-D`EY4WiT`?Xj12|wDU*^6@9laGH);~jsm@yA$B4iInZ)c9&0J?H&% zH2M5K`#-%k^N%<RlKeG@r>op|YdEvNVMn%~I( zB=OBjjrWlM2I7+oHQq-2F5=a-gA^j_mb#uKZu@(_BoyMio_4$u`?z1TJ0%OXoM}ZGzk8^5_?+Nqe=W7ZVdmZ&#>7LZ}AmuD$c^*ytDdJBp z(Q*v_H{u1C==d6c&%H#4XVZn6e*)!{6Mz0UnqSl#b#)p1Gn!wrTV1~=K91ojAUAeCg;h@4i0`LEGoi(IrSxz z{xgVg?$Clqk$(yC!)zZ+Ik}JcP1H+GdOl731x$#@CB;l#7cSNQ?zP&P%ZR6G2Q%UM zJK~Ek*6Cp6zec>-s@Fx;x}5L$r`&RWvEYbrGuvB}U;j+}d8?d^`ncv#Q@-)HiuiJ- zvnikJi0`t>=XZ(kw#w&k1V?>5f{7KmMymfZ-y{VC;XLzv9pBf9FC>0XrB2WB#4jV> z%k(k%@>}9vR{zydtL3*?{J$iAChLWX*I9L%e>=;`C=(vyFEJl=XdUN!#LFqigy+0V zwVY?I^lTO!>9E(DSNc8q*U_Lpk>$K_nU+(>@s5!{llTaZcNQ?5*AQY@fhPfLW_5f6W{!v-10nUx#mBZ z(fBa({|oU=950*c&n2JK{EwDuepA1$5*+C{# zX#NcIRyw={4Td&W&T+3PZUhN~Z*=ZCU{L8KW?sMcXWH`$i{@01G#UY|{wY^_~WdnqDHD~_7z&rvzBLGraBibsH<|o5lmBJb zFH?S=A>P%k<2#Q0BNJNw)8}YhqNA=d;)mD{nD|~pe2di%{F(Tf?AO{T=biOBoMU$6 zrvE&_k?*^yADVXZ$HX)2$MH=fTxTaW|1hS%X=g4L9O*R)wGA z?6&&N^Bc6BgO;6bnZp0_#<3r0`8qU`&w?ZTMIX`W_BW(QHUAVtCdQ-)`{_YSsKNFVpg0C;tNC*R!6^8KfQBh%ciYQ(yi>e8(%A zv5;~mUa8aP5c7Q^@x_88ee8DW*Tfyx$2sKx(p8#&?R&NSdBpD}ZtHuG5x?m=9WT=k zjFunpx9+nVuhYfXnMHhrRj<>;)5J~se~0+S<2pR!8J<^&-*1ik&TH5H+U?Rui4U{% zoSzc6`^WzxZjTe+)1l>0VtF3Q@Kh0B&vIq(F9?ouJM!OjI&_i$e-(bV98;ZJuj8Fs z{-*PFd~ZEdzp#w>O+8x9ddm4aafbuYw0_Nbg7}NIntu}c-!B0`zKpige+BVp)0%%X z`L_|TVL3N?-2=pLvC4V;(^~!!_SdEyUP*i*^}P|4e;x6HvD)7|iT|FsU0)`pDWCdz z6ZtPEZufVaiSK1UWy;m#f} zGCU6vpTzVraz32V^4G9_nR4D7NF|5KLT!~RZrB`b? zO)TeA$zLxx!n6Ndx%J|Uqo?|q#jjHIU{?u{3(pD3C|_OC%r?b+Z=}f zDDgD;jlLAWM$1`yhUT9_`TszCH}x))kN-}5EcMt&$p4PjT29#t?co~wTOl~&yW7%d zzDj<(-rY^S>epI8HRb<>_&udMoMTKnd2CAm~{Iw`Ij@Cv&jE9@|S!}$G4Oj zS^im_Zkt$ti^$(5IOIQX>0LX>zn|m%LZ<&dg`ee&xml-M6Xld$tHbXQA4R-MaL7Nn zlmhs8iuluY8W=|YIe(}5@AcX~B_h!!5hP9mFSF`rdyMf5i&Vxa+i>5mx_OO8joCK4yrIv&!4k#BKey z0>>9(EtO$@(@?*qhb`;2ov(yi}4g5iQA-EMs?w|tfo z-}HXQ>kOR`TZunCS@Vz3#oc*{cs2EnTbXY0FKhXCa-L`!@owVVtoftch)=NcWk2!D zU)BB&r<|*9(DKJx{QpG!-oZNj7m@$3f)Dc9XEF3ETF%`}|DohxL)^BPeuembRH#Ri z|69bjFg(n5XXGX=|6#U2XOjP;f-AedHUIt%^51%qmSF19pNQXUwPO>%s^za?IW+Bd zFY)`V@^dHgHcNji-K^!Nt5%F!7oXW51db-?d4|geC_UYWDUPR8>0M&i#>KATbJ`+`H?Yq9K;FOlE22VVFM zE#J29wGnUTyxww#^XJ5$y+)_!?ZiiJ)p9Ok_)Yn&B)-E6|0BdVQ{S$qoMVC`{r6b* zv}^uB%P*(=5#;}#;3~e>_+si!z{P&`EgjAn`IE#q5iccvv*5_D;a2+pEAce@M-#9A zCO(Z@y9Ir zHxReSzuy-e<#V^yKD^_fbv`<`Ysq6BeSJu9q>pXKt0MoLUugbj^6w_Uy)I(E;+J`I zt38}|o0k7nrIu4fIV*^d{iw#*4bl$ZCVu#+2FyH8**CSEwHIi78ToG{ZjXQeAUNvX zK5Jb0{_Q#)3YiXsqaO(szGL^Ut&N*pCt)O?}?9tE-6H z_Ma~kU;U|Ee}71P+T|Kw%=rF=_!{>6Wen%Fx9jk1Db(qiA%3UeNQXVt=MDe(Z)^OB zRqt8_M>;f9{<)O%3*ryW)B!Q|>s8`cFda;M&)=cb`Pd^mJRhc<8o?po)|b9U+_u~7 zBEF6Gv=YksE%BGxPt7L&264OJTzrT2cl`t%9uv-Q5N~0-T0lAfLHq?vpLw15ai)W5 ze`ejO<=c8@6Y){hw`WoQmx(`YrRQ$q4>COE_vm!kX3Zb16&&SlkJWyDkNk72dCwQfe?8mnVU&NxceR|gR{!{)#GkU{ zkKC#G?_)b)+LJYcEB(Q0pPx1SR(TlyJuPP=<(qm}PW&mWe5M6QdDvvNS2vOWFzu7O z*`6FDzJ>j%sTb3BX*n%SPt$H}5gh5c&FTm5CqAJ*w|<@ZFPh(Om*T{`Ud?S!eoA~b z<(Tqcc`w7m_R553m*5CbAA1q;r!LgtxrF&R`1_jwnHufyGUC&SKh1ICy-c6g#HTUe z3&=n8J{=y%8mE6qaD->?*;>GnA^L@DiBID^?*huXmG~sCE0{?9=fv&#i}63u@@LP~ z@ft<`R>6_)3oX0EH_3nCr#d`S$^Q%D%hqc-+uo)fM(u_i(MuoKc!vBN1xLIJnGV`j z&Mo_)#_e`^8u12>*GxTHPu%WbUKAYR-)fBuM%}OFKWLTnIm8cH_3O*TM{$5<^6Te< zBVPO1A6>wB9VLGm(_uXEng?`vHgR9MDR1`+j&vxp+PD89{~Xqr$&~Zq2Q|OF-f0E# zolMV(Owe11KZ`G@$~B$|_mbfsr5Tq|{;VHq`OnebekJh+;EUlHayR?I3>NN41Bu9eq7Z z{5I-%bCRbK91q}81ZS7bb_(Dcm7dur1J)AJU-@8E$0Bo(VHpfdgAw6 z>G?zAFW2exX=1*-_h(v;Jzw8M+;0EZ36AiLq5ig){@y|Uu}ii5%}k)bD*m&aLe3LS zCx4N=h<52Vj`ypGw-JBFsxSXQ++MHvG;!O`JmKdE=U?71=V(#9Gh1-@+r@Ha^6>}6 zhc)Q%n|1YrA7gy2cCt!v$Qfmo!_N_anf1%Gdk+#n@(C?}%o#dFZ~r$f=lS>O4B5(j zSxEeDGtMIaI^v_>(2VR(oDV*($depxq2yNVe%eOqww+j{bI#P8+$fen;%(Z6f{gVj1-g~YERzL?_? zqd)vXaQHi!{+jxJzC;lI+IFNb5x3X9{EGO{LY*%Y>F?nG(CM&;`EJ5fCphHW>sUTR zd?fXy@szWLa*kQ!+2K!WIrhGT7UBolUz>FPg5b!F5I_N3QZ`%*26Sv!$JBTlTRp*!XMZUsJ++Gj=-d}0?yU)@5x9Nw|O1z%!rzwZG z2#)v`vE4KJ%o$H>IpVJ|H;S4f{N(Y2<&H z>#sT}{}04%yUIKF>+m14@})#@lpot})~5K+a_0P4hyMeV|8>FNC*{0__;tkJ`x|^e zzQB2zc8~SMmn)ov=dnEizbgQLTJQ;;_s!2&6~EY9M(A*we7x`({XKibXP)a6Uf?`; zh31!LP+hkL@IONSoeMO-N#`R0{6)Xj>9CgL@igUsQsE>#kM#lgPXvFTl(&}KhbZnb zeCG{?pXIFmR~;VHK3s6XKfdJw_@@H!UWLp0it}`ZFnZuOiNEqT?eEJB&-CBv_`XuE z@h!wZsc;gWM{fYWg>s&LyOuMW@BE1Pcng1>_~9X%e>3avSD)4Cwx4#?GRiqFILc>l zf#$C#{(=A0<=NqU(>cU15*++D4$}O?h~KVo5}wCz$UmO?>L|LMb1 z>k~RcY`&d_0RBDXzme-VjQ(&`aFm~YEI%V1eU1CQe|VNFyuhiU-PrK&5FGWrYoAUB z6R(E?A?M) zrXCe5{4A&JM}w7|Net7c1UGT?1k+hV{^dW>{2!#_9fD7ga#Hp88ZRXNJ0+*UIeeE6 z=XJzip_~o(Y5w;Rf7kOm-6nod^S`Jc&PNnZCeLF-0KOvte}MAs_W2m`jTJgPrhU8M zzjeB;y=#c_)zqWy#H%fR?0&)h((Tm%{2edo_?CTNNAwEDt(^FFuCtv;yn(o#o}W>; zCt>*W<^cT90r=4X{O$iohjaThojy&JA0s}D_VdNWKdJD(;pr9}<#Pwi;bgMh6~O;Y z0RBb*KK>Boi{0sGI-I7Q&k`Kva}5o01@!mhg8SuHx55jYt^0Mp)RBK%0RQg-@K*!y z3;*EXk5>uq7oN`t;12}Ic`Shc8HI~o@f97fYQ}5Wi~jzO5gh6EDA!jkXMJo@{9-TV zJ}IMDe=R`HZRCHH?W*D5CpgN(Hnvwq4A1aC`iEz_!V8?j|EmKsj^Wu#d^XqBn11uS z0doG8{4cV7HuZYQOaA`8I{?2>;c^}n%gN&m|KA7j?`&K{zwl4+SN6X%JVS|p zO5r3tk53DZbnCME_dAFmwA!V2ANG&e_yByC!exH#3|)^lFrA+uzKeQJA;a{?06FD< z_V;(Q;0S*i_wh}poSz2p|0V!GtZ=cTQjay^Ipc`GzoP>18G@tT*z~B5?+AvcQt`{W zuX}U?)G-}Wf*Zfcsve&Ukbi3c{<{GD&jI+m|KcC7DGHZ!Q@J3z?!!7%8;SQ)Kb*$E z{!DPB|610&LgHgzhJ4ZY9?%i(ApT8-lkhwa2H>w#&O+Lm%lXa+|F3`e*9PD}QFz~W z<}mSD9A{0X{P{=y<$qFe#P^t0FMbxlzdry!N;%a`H`Bjd{6AX$NNZo}YQd47&$Hb# z_4)zg^(?oe8U7~~?nz+&{5AQ@saH=Se)%g}{+6?KxxJV8V+!vp=MRDx_Jy4xfAvqd zNeVA;dN}_zmhWB~z~4mvsceTwlK(S;qke7W_+lLKn*-!*qnxh0bvdNk;ruv&|9SF1 zewI#$BFdkC%s*bA48VU7fd5)>gx{gP^gPNxMtnEpbw2U;zN+)(=x7}tlMa=Fqa2R3 z^vNHP|8~|>Qyz{IfA~{cj;W91U(@m@6F2fpi65gLTgdQK6CcCzyWzi5aD-?HrJ!1`j+^T))8 za-3-JKLyD7i{QxjL)>?EB?Fo`?jO!=0r)P#k|18t_`xNoPf7AJU zoaOmm;v$F2s{Jh_UL-i$t1?Ru=^%gEExG0S zAIN__+xdxAZpV*n0B+o^lpbP7iTd0})?aAL|kva*kR13cslM-Iv`T-wD7E1>h40X@76z zxUc98E$Ui@yJFoR-z0yzl`p?1KF7if2W$DW+3)C7a-2oPSMywyo9M$Tg}dIlKQ@y; zPJ7oQbh$vjD}Z{job&spUVL5fQSRH>A1^6>Syy1Sdn;sN9@2Rj`_nSMa!_zTIoPj) z{EEkPhVR$Ia;H||S^vzhuaJK#%hd!rJVJc;F)e2s@psGqPlRU<^#s#S77LE@7UzDV zS>#_z{$6XHOt;{E?b{awNBEb~{$|4SC(1c=n~soa9|~k&6Zl71_4iYPBmH;Kelnin z`8$Qnxj@|aXY}ejD90YZ{|E8vIl6?5rGip0Ov_)$e$9kulHdr>WcDMb{hXt42Ey~G z4!}Dpr<(eYN$2&%<5qls6(HxFx9j}cVCh{81V=b+d+e3OujKf}==q-|KBZKr!#c*{ z`^0<6uU#EyufjbM<p^cZFwZ`7cusG2yQh9OZm1?Jy?&+ZBG6Q_p-aVZ6RYIkr9OC&X<#=S#$G zJM%fRzQnIy&k!8p*=y(hc&m5ug4SRGBns#!P;C}JiAh=)q^CQJy z;2h#ct4WmqMu436Nk4(|X^*eV6wa4DkG~`TA@(~)-?%@3|965T-w#=KX-D?S`^D?L z0DM6Jo)H}KcUb-SrU3rk3NLW%_Tk@@967I;_3lE(`MBWd7n&vCaG8E#?AbcMdcURf z%jjbzf+IcmF4B0RdQ19c;;Y%tn0ECF!6CnDrsm&8{tZgL(}XY zc$oP2$R9sf|FnNRSJ%DJGL!X z4@oKhzIK2ujd{}CwB+% zzikZj@!xemzKiKOUU1ZF+fF!(xIL~}Mcf{ze?{RG>UlgBfFBFM&y#gas4x4uUeWaL zF~O0)b2#2N`E`%r2)}KwI6!RRzm9l@;{s#v`i|hpm)T7J zHB5)!2gpBfybe!2`(IPeXA15Yo;rp1T@RC1a-?0QURuO>eTn>Is8>Hj{FlVb7%$V0 z|B-kH^>dTI?dSW4=K+OFe68{O3xcEkFJ!;Joc<0e)aA#X*NX{`blZHDPB5eIRVseI z?0M7&;MWG=Uk<=`D!jnCh~YQs@LRzV{zBRV%joxC0_1$`eL7xt{jDe7dzX%vX_tOX z{5h6e=zvMz5X#>-%Xu593cN_06t=( zf4n{*IMR75`xjI1mId(lDqPmxS>xQhiQDte&nWp~Klz0Y|253VPkg{XJYNjJei?jUiON) z0r*3dWA~fC4d8bY7cX8qZ|>qmqI*?CqB7Chm1%8Ewk4X|IT(h*YBP(= z5<<3iv}T;fbf!DAs=0YuqmxKfEKDq@nY*MSF|Xp{%Bn=dX-cJ2D_grWsdOUKo@i|A z>_~MBUsGpdWm{*1NN&n>rn?i#RlQDQXM0y$DwArO7W3ywG>eCcWICO^CXwpMq_1(B z)5-Q!qG?ro`!!By!b2k?_C?gfZuxhLz1L6N{><7?-MeV^3RmMNL(0A{JZF z+Lo%703}zZDykPrgjQ(h%H|3mj@o#lW>H-t%hejrrG&+2%u6<2wKCngs-vlPRYNA7 zY!nYAJe3mr>B+9HwreVC7OBuADm%JXW#%HjgyM;%t1>RuR8bsDBpQ1X5Ryu?bv7n5 zt(_f-RIdPu=8hS~#S*p^Rf{Bwq29*IR;Du9U{$sw{yGr3K1O(07MrO&jPkF)(Tq>` zi{>ebV31dcnkqRfldHPB+gp3%EI&F^%d)AL&D14JFOHx5TrDffCh|%3HZbbqVPmqr zyQQ@`V=7H;W`<-*Z*MFXi#H^@TN@MInRIK%%F4#tOe`i}u9oVaPPS&cD;q0nlk%@( zejGKbW>IZ%Vp?l=I*E#^(k|IiDfLDQ{PY^BzlqAagw!Ii)lN@LYwYak&UB?ayA-?P zFPooiuSHmVt4UUl78;A!rPA&5)2-41wI(Yf3UDl@Ym5}&neC}$#|ijTMkiMm~F`Y_gQWdQg#c@9mO~S>dPj_=DR+cLRRV`N1*xA-5<>=yMx&f_NPo%(@ z^fuB+O6dIscBNBY$#iO-baAP)?kI{Sauw40%U?r8iHaA`2ooQlF5=Pgt;$HplU~)B zS(Q%Jr8>Gh)2hSq_@w>Q|06stE{=zJS|UAqqhIZjN~c@>8M^E7b~aJzSQ2;3v|l<7 z(9hD~!T`OZvm;hgS{4@9`6Vauq+ihEv2w|f)@D(JRQFn)Owa3Vx~8#B zC*ky(WQP>A2v26t)a4-1lhW#Brm>~6qelu^sy3BOH?|}O287q*0Q*7!Zvpd zpne65I?1c^VHwI;|9)R$Caqo)^3 zeHt1`gK7$=*S4-sX{AK;5vf>JC#L%3Dm3VI(8MQebz3q69ZPRlx+2?MD(xLO0wQfr zPu6KMdXG+wdJ>%-na;$O$;Qrx)?`PbV*Y#yJY}P!s;MnP*cZo(TcO)$Ia@m0JNvS` zU5$Ege(fjf<}aKUD=l%ZO18BpJG`22EWSu#GIA0PYer*dTKY4pW~%dwXcuEe+2%V} zlyr-)2}F(zHQvu18}vVD7&b3xORnr5K)RGk zi1fPyNfY?Iq_v}>b!A;kI@R6M+150GFvJiDTTBzup*9nj0a#a}QOp!#kx6uA(qc*J zY7;v{W&g?|hJVtYR4lHVnMkbcSfxgd@x+ho6k{bKtvuD7T-BDT5~J8#6s;nOR#QrB z0iD+jpgfkx2lCQeRCHo0uC3i&o!tXzqsv+Ha$EJqvFR9`)xv_3E*FzU4-^B_lh@S7 zjI}ZMwXnVdPbO8< zy0W#YE}iV?ZthICYh^1I^BP#Cjgql^xbdMR?y4B^;)YeNZB3qjTl#Ty_v6ye=AJ_VpmuHTZpuCZwgTm0m8e z*9>`Ee0SegimK0GCir!XBo-vQAp%YH0HTj^M2>_8X=D1A0eKAVf@4r5{+n^(z!G0F zuTm7w0mK~xIrr^;dyWxHb!Xc(RY59VV5Bif(Qo$K(-=xS-mPt2*`DmT&#^eY*01-w zz(tM^L*wij9rhjl2fo>N2BhC5^kfVr0>gJo$Ac&6YaXLA$%*#G*{KG~&|*dIWNuu=!lV7T^~7(4CZoT=m^Det zB55NAhq0NkWcv=L0uurDSl^*k_#2gPZVgs}eDl5Z8$^YtOMiz@!P4?FTE00&K5#s9 zN(+0iud0}Gc79u9a$R$qeY@w7JbNq2Q`qfu!N{yIe2?(TcW*F?4^Cs z?u_(%W-uh{k7UV8x7g3bY^}`KmEopmHTNd<-^{C-aP;-7JBbB~=^X!wC6a9`J7tkk zOM9*>LYANrs?+nPES1WMJl0eq-075B#g|GX6S2x_G}<)vl&N6JYcrT;vFY=B7ABMF zik@WKs-!F-l+}wmH5FQ0nm`$zE}ejM0CkDlnTgu6L`_{RH=YPbXGdFWM=BxdYtqoi zTbXN|FUwRURckxbnPh{E-r7>_vI?^%rA(A!nT(b7b;5EW&YSuOjm74-H7{vxo7dUd zohepBmd#pDzpRI>bgPOJgAmIa^tc+{~2r z$jqux%-T|UMH07C9u0K~$z)T2PdJw7Lw!S^e|80mD3KgrstR0fW>tGvEN;@fRtDCd zyw6SYY~-7zR7;tXO1o5wTtA{5Uc8X87cU!NtSd?ucBEFGpahvl5D6z5f`Pve|Jn5A zG+|A$x-;3H?lQCf16cncnI%g$5Vyh^X>GiwiXEb=+~pRbg8RFQQY*jFDIdO=QhMR2gqiLxZVLaTM|fH6nLi7TYVa8G1lEwoV)?|j6f>lkF7qA6 zg?KLAX5t(5QX5fC$EOHm-hh?YLPx$K!L9=xytR(~qJ^}q8NaTPu zgM2Inp(z}#69k313Js`-(Q=$O`d3GxM{@`+Qs(bxlpHF#z@4I06P3!4H zeLo3(d{8m!NADga;w1L#L0+899zC##o$S6mC^DzC7Z39E)b`&&zN(&^+srGf%4L(e zn5&|uCu}onalB63ple~Gtu&Rahg%t~W zs(YwE!+KjHwmn&zxkPLnqPuoB%G%&=QF;j*VINKxf`FT#?#zXf$tIUg?c;?kbPAR#D`I1)b zKb_8EB?V~-CM)tQMNauArimSEnyirT?M-ya@*J49S~J%qdX&jIBHsq2o9kL5Q_Rbh zSveuwxKouhubOH12!FA@<>F*JSJuc3h750Y5ydeCvWGQO8C67m?aV<|a(@#z>^Y&9 zco@tVC~J9-OoUtlTR9>xh1hNt@|#?dt?W6rLf@2>iYzs_2(^zTI=t@BOv=tr*_*Yr zt3qClCAic(+juZ*#B2l}XC-RCl91FioeX4Z17TLMVAP ztY<2cGjKAZC1e8Yq$fFx@=Z?EPE5=CckFPZr<~Y1T!N#PvTJOM=B~KV4m>P5|q+hfJ0 zQtFGEv@Q#++ic_v$(Q_88&Mkd@<#v39Z{F{pIWVrx)R{zwUff!Y>aCZWVfT+N39M?e-XgnAjQf97H9!P|&Gvq# zaO!(nyq{*z>ebJsHEg0!LbAyg(Gy8FwOc79O-!;`mBd!&RsRRoPoGre*-stb_(D&% z%abbmxe6RR=9ANth>|$)zQk_K%X9%w%8oNLkD`{lVDf?c7^Tq7z^)EC`KhuAngSyj zzK=L8PtZ|Dw#deNQO|NmGOhBuWRMxjNY@}EVd7e+kOW(Z+UhYkzRQ^j6Bi> zH9Xts*Fee4_HLnyS&7@%ER%(Nasn3n@jm%%=~L3>8P=G$t8EJEXmv)}VqImgY<>^d z54tM~+31@w1d4CA78=Tg90{wJAA$Od7{XR@es=hJfEdrqA{){=sMtj} z{cobBF#nV+#tui!SGT2l#egTP0pw6OF^6R}NhIxwszfb|TZ2`iAj7%VAyJJ((mr%m z2kLcJXEDaYtbNO_!1fR!aJeTNjBquoDBF4G+NDfG7!s}iEs>JoL^PMO`kJ*73Q>DE z+RDh~Z!=elJwjGYw62~jhreQ}n8&hE5tMB*Zi)<#wBFfps2mO*q{K?4*U2@unXc8& zLbrqHv))_`b{(*%q?izS8tg(cDZhH(cdJ#lNFwTiYIM9fS5=y8*6hpR0_|y_Rc7G2 zbT(vJ^KH9`Qx@o)A{I89%Rf)NdjK#fULQ*)!NFm)Xx7e2A#Kl#YW>0WlSYCr- z7d3RsPv4>{5w6<$4m^=DC$B3AQ^opI`n=m2qpVIRMXTtetfLhViw*R{W>o5&Qs#yw zWJIU(3M#|EiXH6uwX1l>in0;fBW4{U-`v(^^;8v;JajWpy!(#PtkYF=VEe5iooq8X zMx+P|g6@~7#nA11O_3gZIQ2cRuJ5*^@tE)1Y&As-_0BYfH1AZRw3R7@&(A`o3MI;X z@W?N4J)~!*Amnv>B06h1$Vn8O(8xBaqErUKIHAvscih^g=Yp;AgKCeZF2stm(;dp3 zqP2&}VL`Zb6{yG&LEp{T*`6UgW2t)%rN;ZW9)U^$vPljy!_K8d_tnWaWrnPFUZO%K zcC)j(ewAQ=2Q8ys1yrkevFK2jcBhueIpI}m!&d8RHMvxgZFNJ6TVQE5B|SEM!Q!Q# zNYu@}I8j?yQ(1K}98SWx;Urq1-4f}Rhnad)qOBV9qY_IOEU1;ns&4MQ#T96>#AsKX zNFqT08jYy!A$5^k&_k6I(}IT2@Jb2M>L+6#q$1}qxn(j+!|7u& zriQKzTKYJ8`KW>Z7Km!#vn^#-hxV?v$R1uekZO-MHxJ`yl(HFEQ0(EG$^uzn7M=yB z>&(X8jAPW`!Ynh8g+HF90BR*sxLm(}C|v8aBQ|iOSg^Swq{x^VGBq4B<+0E4dv4q9 zwa9iaZl4~P*#$9xi!@5iW6RCE?ia3 zR;&KS((PvlR-64SCo*j&t7C9rD?Y-c=fPx$I}dTyV-+=ulL=Uv`BG<~>jpQXL`YE= zmA1d5qkvNnqGtkv77=lDB*k0S2(Ic_xk@&J%G@80JdmkME~tHTS1Fbx#KvwP7m%|^ zF{{glw+W^kNon&=zPg5SQ_Tjl@K_H5O4ZOZyfh1^8a@UpIT(P7rYz^3WA3$DKIfBM zsa0k5o=Epq*`+=OeG((vlJr^EmiP2|Gg{=OlJ2^snzYJx?pTr})+gDN><)0V{h(*G zq*i3+H|b&38GC_2e$8keW{hk&v;DPecMKfS#C$(=Vwz+Wf-s9y3 z(7a)#2`@+C4Vr4i^PRHbXuw+x%y1yE4EQxfCWZUkYP!Ry{_4#pbD}&v8EMsbw1|Qf zI>T9v(`rMf;oZ|*na+OJ1)t_8w?S2!u`vg0jj7mZOnR10*22XqmP#dbzwN{JJmwhz zvb>&B>t4|GGFJse<)d91!)pBqFNeVH$y!uo@KprytKq;y|Y#_+{P$i*BC|Gi5{rq7=2jM z%eQCt*X&SWjm?Qi#hR7UdifiIp?d95y>EsnaMs=eYdWbmA@;&Pn)(2CprBmM6n)%x z^MuTH!!3{P6LJ`yOd4djPejMjIum)`boKF5j(f7D=H$duRSfx9g?y>25oZ{=6HH;< zAeMB<0eqf0J+&+*GHTPW#>Y{8K5raUA3VdNpv8Z>kcWgePvey73i~L0?g)2amPhv- zE{UULUUO?(TcV?~y1Bg>t9!-JUxY6^E9++T0*L(VY$ht9LnuGJrSCMf5#?9Yi=l)2 zPS^StjL<$bhNJ2i%BG>twEmh;l%d_nIHtlH)wlRXBtI>xk7f{=UE%X?s4ae>3EO(q zS4q%Hoz=!$v%z7R7@rxGiFz?Px+?8QxDo_Eq6gBUB{IKkQ2r>hf=8)g)_d(L{a8}q z+rneXYd-C}`gpXbeLvL&(EAlA)!>HLtK8M%o-K7^jP-tVSCUn)>hPp$-_nM3H_D~a z%ER@h0Uh3kz+^i*c$%a9suMXa-M1O%bgIoxCVZyUhnL$ZZ6>gK=t)zh$sq;8a{(WB zsB-r*ptIDCN6rp9RfQrC0q|=w@~$~Z%7~!myGbCcl&i5i&O3AW=|mZ612-&YclfKq zIMZD=IX%_hmEm{ZRH+Xh+Q*BfD_PLmn`)}=l)Xfrz9=ul&A`*wQU(`Uxq?6G3el5%Xu z(tTz|jcqI2f}A8(+4p!9?2XQ27%&6JV&`-d)+Vxn%$t}dII7RFb9dmDm^{B>X?u7Q zij#?JWD6EzpAI***@1RbiB`_qeD}iinfuH`F$!+a@^0K|-}Bqe?ms41J!GCbgm>2D z;#7yb<1ALxs85Ehtu3#pZczJ9O$)lxe7pV+UB>SoDE8J zE?V)i)o?VMk;^7^vl(7ePl6h4I;(6W>H7%)dsmGrjP6-c0ekU6dOyF37f;Q$tKfj= z;!PhAUAn_I(aYASz$J{xC$vSuh0Ay2sR>wA)v!}yU}w#Ek~Tu^!#M=@u2Qq|$6KjP z__H0bTj&EVhB-5QP;>NFkwo2+`3d(_H4*4a^0!oaB4ejceqP6AzntDiRFmvz>TGAb zp1Z-z9?z(uPmMGj4B5cq zZW6DLVueE7cdM<*W>tSeEwa$IJu~stvESkYd;0Xid6<^5nbKWQU>lWBibYu`YNDyT zGtnXiuq~BOTW@Fgz#4)+#w%pI(Z|h%oa+}IyRMP10QIC~p<1j0x1>a=n98N)NF*EOyLa90XHycH zJ6D(TS^pE3x!HPQ%jpTc71(s$U9gTu$1_o#rH?fthw9mhihZ$WB(~#YtFu z6MP~^ap)H~Jm+$Rr?coBw zfrUD}-sagod6&-wPYy(Mg#-VRk8Z%i+u*z#7h^*T-?qi>gc?UkW`85kO$A_g#$eeK#L- zko;DU_464qSd%TtSRbQDb{Og%2gltlaIvzivD@s$?ql?Z=vA54w(jXT&^I-sDV0eI zRa%o;DQ7czQ#-;Whb1v)6CRT~yarlYkQv?Z+|~S)M30^5Ek1KOtBv)m4(Ff1W{jKc zHB0()G&FC$*G5Zaf{Pj<_#CbtH7uBpgZG2`Dpj#V8YN~~zo#b#rX}mHz^YGXAZ}FT zsFAo;QU@LqX{={vuIWmN&9u2Q^=X)vgY2ZS5_Oom`d%US9KuS|Q;aBS;E`%`~xK!z_R7HQNXm&SuVFW zg^oha_#D~m-2-CeWorUTfKCd}dUS76Sc|jz@CL2bRaSToefw4)v(m(SF25Y&jZdz( zHqK9WXQbA}6VcX?;O)7nwUu>}uk22})w-`bke#WL6_8QI&~6L@$AGFBMDACRvKgrf z<~MoG-a{H}^QHPOv|m1@$M>5I;YvD&C5yPN6^)W#WsKn&aiQ(r5X$FC5>XPzTNBTNct#HrKL z==+~K-KE=b$1Yu} z!Vz6wnY8jxFY$J4Y2o{UD=ZeO!ZQ>kH}L!2G%BHVWp&i`czBQuuJrW zzF*J@KIc|X^rGm6uJhpPZ%l(?E}U!3`e%gf_k52#j_B94WZxwZZ?ekLXL?EX26-i~ zjKI}W1E>%|>S4% zJAynsY!arpt|e#9G0Ck=oXKx zXxKV0zPyG{fmXE2sLcI>rRXp2_9-mgMLeQ1&5lv@s9WV_n=y%bxdu*pajV2OOF zRz0v4nK|mA*+&oURHspB-b`<7lViP%qU2?@6EDyfkTU{R35avyO~E>W5nXHUh%RJj zK!^fq(mf}Uj1Jx3kE_K>y3(nxWIClk)7Gsvf$L%!Pl#DZuL+5^VcTgNI^t1DnvbpJ zEvpY%CEXODzN00>6J7sfGuzdNfb}P)Wwr_5+k=HBqAfT@#v!%RTa90IEw@@PyAej6 zQ+h}6~jsno}p}{S<`pK zZ`vZe`rAFNwB4#-Mai&vvrR>x9jpF3o&9vw6WGrjFEXEeGhckD&C7<7&kApu_>4r`@uQJ;%`+pfN zw_~h5IqTwG`-o`-IiJ{1^~WgGNSxp{Bya(R=XJlFm-$0u2-IJkR|QS{%B~agss!S| z0@(Ld4U;=jT3GmiFu&T`N8?guCpdXvq|F}v;5*afQBXr?di+u`;N#u?6)+?heOn1L zQdH9$VK4if<7QfzoXt+z(VlNyij(r)+1gZ_d`Nu0RGw~kL~n|Q-2|B~A?CBT776b; zpF!1q{mJ8~ViM?!z5XyieJGFdmUsTBZ}B!s8I}Vjjh%92K%>kDq#NW@^zO7!*gJkJ zy-Za?gYTP1=(8^l{5ChuoZ;(g?DWlcBxcHzGyXWDInOli_eXYOIAzY=pJWXl?e?-} z5oTDTwds@5z~uG_XkGdYW6g*r+a|i&TJ*p&U^>@iyvPhGGwRD3zK21WDjJ>yYO2d? zbi>|fv!Bl{7jEsg>m8OYTi-8J-Yac4T;&Ws3=DA(eLZX$h#2X@mVumvwZ4Jk1MTvj z<;lT4l;0j=&IoywYccjN=#lw~670WHm9kV+ezmj*7?=9U*=+Jhjmoe6P`$p_SZm6S zo%x}SLM+CGgP{X54E}5MvFFn7_Bq4OXT_0ee{z;gRLE)5at@?t=E(br0N2W)C&41s zanqQ)HP(09yL44o6F#%9x4*^`l^tEHGIP`Eq->J4=g*>-^oDfLA$8q833i6}=(Rkw z9?ywBGOJbMu9s-+TqVcIn{<+%t#6;c(fFhgRWL*`H@{3?CCEUVbLQ~&sK z4W?^&+PJ(LUM2Kd$$k|=j!*Xcu6t-p9(r_QKs2IkZtA4$zVWb4C-GwW_E=YEM|Y~O zbAD$>b8AzoqcOE4*%fM8(k-oN#l!@ymrdrm>`U4(G|>yBMb!GmTcn|RcKWcah83{9 z!g>-cFnz{!(Q6a!?kZ4M$*(D3ru4(25%t{*W$?&5l$Pb(wQtH|0hAkcHme+%i>J1n zR3>T{qMwgmRJJe)tG;|7Jt>D#GDrKrf+9O|%sWo~JzPD%r5CO;?ywTu~O0=stsCmG06sg>|I)9fm3v!90#t^Vm5CVwQy`W*uZ!2SxYNcRJT=)QVb# z;J29|XrEk6Z6okRBs&!I9J%Hhis_QkT#=(EMO%>V@_Z5$3*DL+qnDQI&`wk9u6OgT#O9n7Fj7WjlbT##MsTu~UQJz^r*S~>;sh`oxEDT%O6PrAi zLz$VePj*F18meB(&LkUT{aIV8J=Kw^N%de$RJNAj z=o(2Rm`(ItseIL}v#VPcAmL2a(2t7MUXsv%*{_Q+n|#;%n}x}$ECe@{Mkxr)algg4 zrjb`)Q;ev@@Bl{Bw|I>exmDkC%E#ryf*Pej(I1JX?c@U&fppl`|k zdO7FR@VM5JZBTMt8WL*Vm-)o$85v5pCtZK~;??^v&vYjM>J(yj=Q*fQGw)JZ$@Hzf zLhp)voa$WEU-I7J|-a4}{@P@{2MbzdS!vww1#Dw)sC_a%CGC zsbJf}eSWumTWC8JO+N}4lO{EgjNaK|0@UYKUCvRKWCc2Izn-+5&^cbrX0TXMFv_EI zBkZ&RjlnbPK~LP_`_<}iqyj|+!FP7n9V%|Tm>0Jyw{dqipkJnH_Vk&THQ?-`WHC{j zM`}Vf9B>C9tWo{dV&1Q=`sRHxSK~R<|3`tA+Ud6Gcbmq$z8qeMDx*;QT0aEuX1y?`zD`F-@%r|lXQN91{)be zV+%dS*{V6?8OU^JA-D9vRpkun)MBJ4zPDA^5sS$+d`&i zRW*HF4ewfWla^6sk`E;zg&R4!(OD;TLzTiW@jvyMv6Hntu#(!t0|o(9ZhRm63+{n~ zuJhEOWB>@*FB%u)!Sqg~=OI~x`lcGm%P0edCiDpyr#A$mA&ijs`PIDG#POSpa#lQg z1n~0C<5O6aJ-K&wK!(O+D!$+L2%~+%Q<*z^b$2&qmR8tIEv3|*2WS`#B~N zUN>5SQK9Syb2Fo=l+1Nc^99Q4^U34UVkR>lrXCZb4IX!L%^blGr5hi7RLrV6f=uYt zBp(M#PWl-$?0V%3m9E^LFyU=zZhNb=z9)<*)&^{7wpd?T*~eZoD*H#e;4VdZD9{vS z#MeZC;pjXGZo6INTgox)!^`rz9KupfYG}STWU2to?_CoJMNBAx`G#~H!9|!%ijk!E zws$8U(yC&p4a$O#Lx$PuW}QJ%j)ZYs!JtNa!1XaVW!drQ>UlYOTvaszc@8J7yUyH? zRotv#lN~8Higj+C%n+q%Ai!ll?B|r&?@tQ#1^tKY9MLE*=0{~!qe!_f_D?4z4-!ItjyO84JV-xDxAdb^DCDBQTO(j-wKhfPvj(xTGV0mR(s>{{)-mtA8ru1+GKCqph#|55Y>Z_C^^a?$~Us*yV zo|p8nsWRQ%`h#*fzX^5B!MvJd|5k=xSVDUb?GF&JZ3(gkl1|t+gdB*AA;3sncv0>X z3h$i{Mk&(~%jNo+$TC@jb^@aV>N_=aub>R+Xr8Kzo(7zns7^rdJ=`NM@_=fl)jqv3 z?NZVN6$UWFSs8OR4muQA9FdC93xZe>3`=^nrp6_vZ2QuCQ5Hmn{R#`(!NLk~>AN7a z%!K(!SOq5Vww&{vN4SCXa6I`27^oIzjR8Svz&w)h4z_!G?nR{W#*q>F`HIpW z^tc8JJQ$J-ora9^B!@6+&`Z6_3|X{)75loP#)H3e_dgsGJ9-Ocx2_vdS zyp?1uAiNvtFdL;2RN}#qFF5z1v%X@l1F=wh{ciS*U@8K)6uT>tP^o6LW}}61;z6hi zOjxt^OmaBRZ~Nu&7UXy0Ca92}PZI251rrwh9QI1#;KlKV_R6SW5^K)y=Ym3G#L_|Q4AtJJFY`7Emw%re- zzenot2h&U2Z{EuyM`@DA03*!beUJ}Hq0-_=vDq}vd zHpJsm+RbxRT{GkV|M`)IPqST8t{3y+NwG|+*wn-Uya7(iw3Bk-_l+|Sm-+Phw^dqw z6@8=|0EuG5O?w)>Zjdn4j)$`a!!DOHwFWqD*AtXp* zieNBZ+R~m>eVDoD(1bBa`zf8s^%yDz@d#43frB`HK!lz^Rw2XkfN6i6e^}^dxOj0J zrn^5cd&?f`+wf5)zVVz0JY-$o|HtsT14S*`M75m8yu?C_xk`v$LXZTHcY~6mSe+`^ zc3_z_A3cuoEWLz@*X+Ywju3ptzUdTCJ^dQsHT|~1o2;`wZ%CneKI8pm4^9f)$@A7! zE&>(ageoza@6C`HI1BTNc$!FWXd$?t#JWVIy3?alVoM4eaK~TO% z#Ud_9ptvv$au`olj8A*n%jz!3`Vy&|qZ-O}R5XC9Yszdmb{bjdbllcP?_}~?Ddgi@ zMI8zC8PqWZ+XR?-KQI+$E!d2voXk{cvpol7pDLP+5nvZ*x|kLHWjUKKaztF4grlYDdQV>Qy@F9!08+(j}$wt2kNR7n7??*wu$P5@i^M2u`V|X$*tz-E-m%b{6YvD)V0rwXDJ72K z^Y?2c1)q%aYhLUmT6JZRn>rA9pa~oFbe2$G}qiN zUfH01v@8L2EYJ75r0B?nfb_*ThbU1Un%bs*KAjemA@6i8Q?&vrCheI;ilS9{dmVEw zT+$fh{)Z@G5U{?rN)ubJR+N$lmLmQvvE=|)TCPzmmVqfg;OGRFj~F5G+x2**Tgy^6 zT6!>^%AHUo+*Fiw!>!X!I)H8q@ilIU;cQT>;AY$_)2B&~qkXWe8^!u|DH4ty$)_(~ zsfB8&Je36Dg5!&0EG8mES9ojES-+71!ZI9|!k-%dyfL1@^Wy|~oSbCkz5QHsLD#Uv zR!WV4 zpf$H@G|;psy;Ff=#C*RnV4aRN}7mp5%R&iX&tt0l=|YzXb4$>byzf$b=DQ!;US6&$rE=Zh(o!n_j)Yp^R(;nk!pV_v6dg z_r@ZoDBHMO)+Y4w=t1qS|f+SiFK{H!WsWPo`paxo@z(hgh2NSqvfeYlk zZkjE@`lL3hjsV0)j9VcZgL%ADD8Ni8du%wGBTHs*Hx3ZM=wD&$IKm*5s zLvVnVeUu9hZld@b#)E)_w~B}okj?5|0qC@C0xf;DD_fOj4d|}(hZzW~l@3wvJuJhe zgY|soa9l>Owm(~pUzvRcz*$K4PrC9X=Og_wzmkp%%W)k4&~w?Uk?OD+<%DCw9lWS6i)49NN{y0!H;XdG z1!~PJH+(}EM6p(u#zTCB{XAstDXWc0{j0df+RB0t(I%-lC0XB>u-Ux5hH|KH$RH4T^Gi5ZH(Lz{ENsUvJ2-}dcV$>24>vbXNkvS=_NWsb)%vA7KsnlqfXcOMuj-< z2)oCdb@0~c1^|b7ftArE_M(|2)sb?sr#>{K!RnsbvoX1A2QBX|HiPyAi@9ujrvYM$ z-s~sq5J};sEr`p_{iIe6D6covp)$NW47B$SUN0hRCZzP>UUUGK1S$5~NTCd1-F^YM zpi*0%tAPgbl(vW1d2ajHx3~Q%uzE$yALn=d$3a)dqYR_;yh%$?mE{6` zjg~5(4rN7J)&P2Cen7b%6##ZQh^)Ov$!vX-(}LLY{5?j_!NAK~@*P^~)}lLAmHTLK zGdXUbbSF!#gm8*V?F<6;+wEAq9w=;>v=GJ!!@p|P$-Ji4DtjT+qkg}*rM2+aMITP$ znm}rUBpT8elIVn>T8^?#XVv5z*kd8(R4GTd-ch)X3lHVo@u*BVh9_GbB{+UPiPg-Y zafTO^Oz)nfQt)v#!Q!^C=PTWQy z2mDGbC?EXJAQy|saT>~#?O@aVId!23mG456(b=i*#@KQZ$2o1ih~tf(Vf)6No4mg1 z>N(wq9)w$Rr%-q}zzN^|y27I_>$`?#d9@>BTy7R|4(Xr8Y({Gty^!Vs&=CeLu+w1uM1V2-I>IeOO{QdAa{fhZa?TNH; z``7r6Xz~mAM}KesPk8*~SIuYr|JUS1j|D#a?LYmJp|Bo*^mie}wVmGYLus${{NCT2 zGd=#`M6WbQ?Z19Y55)*OZ(T-Ua!L? z{HLGw_)qwj#;@&fr2UPwza;_p{s_>+e*RCKQ2%%J3pr~0XVLd`E&b{7zi^HxP5DdjzkiVD_q^}uRNLv-^f~Gx|MVm6 z|I%FfRUCHkAnm`>mB?d8YOb^Yzinphhrb^_G5pl&{CZ3KAHGXg1-60zcmKuh{}0tj BLbLz? literal 0 HcmV?d00001 diff --git a/server/go.mod b/server/go.mod index 1950c7b..d7932c3 100644 --- a/server/go.mod +++ b/server/go.mod @@ -14,6 +14,7 @@ require ( github.com/mervick/aes-everywhere/go/aes256 v0.0.0-20240803013625-6759956693c0 github.com/modelcontextprotocol/go-sdk v1.6.1 github.com/pion/dtls/v3 v3.1.2 + github.com/pion/interceptor v0.1.39 github.com/pion/rtp v1.8.18 github.com/pion/webrtc/v4 v4.0.1 github.com/rs/cors/wrapper/gin v0.0.0-20240830163046-1084d89a1692 @@ -48,7 +49,6 @@ require ( github.com/pelletier/go-toml/v2 v2.2.2 // indirect github.com/pion/datachannel v1.5.9 // indirect github.com/pion/ice/v4 v4.0.2 // indirect - github.com/pion/interceptor v0.1.39 // indirect github.com/pion/logging v0.2.4 // indirect github.com/pion/mdns/v2 v2.0.7 // indirect github.com/pion/randutil v0.1.0 // indirect diff --git a/server/service/stream/direct/streamer.go b/server/service/stream/direct/streamer.go index f9778d7..86dac26 100644 --- a/server/service/stream/direct/streamer.go +++ b/server/service/stream/direct/streamer.go @@ -1,12 +1,10 @@ package direct import ( - "NanoKVM-Server/common" "NanoKVM-Server/service/stream" "NanoKVM-Server/service/vm" "sync" "sync/atomic" - "time" log "github.com/sirupsen/logrus" ) @@ -87,17 +85,14 @@ func (s *Streamer) getClients() []*client { } func (s *Streamer) run() { - screen := common.GetScreen() - common.CheckScreen() - fps := screen.FPS + subscription := stream.SubscribeH264() + defer subscription.Close() - ticker := time.NewTicker(time.Second / time.Duration(fps)) - defer ticker.Stop() - - vision := common.GetKvmVision() - startTime := time.Now() - - for range ticker.C { + for { + frame, ok := subscription.Next() + if !ok { + return + } clients := s.getClients() if len(clients) == 0 { if s.stopIfIdle() { @@ -107,28 +102,19 @@ func (s *Streamer) run() { continue } - if screen.FPS != fps && screen.FPS != 0 { - fps = screen.FPS - ticker.Reset(time.Second / time.Duration(fps)) - } - if !hasCaptureDemand(clients) { continue } - data, result := vision.ReadH264(screen.Width, screen.Height, screen.BitRate) - stream.UpdateCaptureStatus(stream.CaptureModeDirect, result) - if result < 0 || len(data) == 0 { + stream.UpdateCaptureStatus(stream.CaptureModeDirect, frame.Result) + if frame.Result < 0 || len(frame.Data) == 0 { continue } - timestamp := time.Since(startTime).Microseconds() - frame := newOutboundFrame(result == 3, timestamp, data) + outbound := newOutboundFrame(frame.Result == 3, frame.Timestamp, frame.Data) for _, client := range clients { - client.offer(frame) + client.offer(outbound) } - - stream.GetFrameRateCounter().Update() } } diff --git a/server/service/stream/h264_source.go b/server/service/stream/h264_source.go new file mode 100644 index 0000000..53ea16d --- /dev/null +++ b/server/service/stream/h264_source.go @@ -0,0 +1,157 @@ +package stream + +import ( + "NanoKVM-Server/common" + "sync" + "sync/atomic" + "time" +) + +type H264Frame struct { + Data []byte + Result int + Duration time.Duration + Timestamp int64 +} + +type H264Subscription struct { + frames chan H264Frame + done chan struct{} + closed atomic.Bool + once sync.Once +} + +type H264Source struct { + mutex sync.Mutex + subscribers map[*H264Subscription]struct{} + running bool +} + +var defaultH264Source = &H264Source{ + subscribers: make(map[*H264Subscription]struct{}), +} + +func SubscribeH264() *H264Subscription { + return defaultH264Source.subscribe() +} + +func (s *H264Source) subscribe() *H264Subscription { + subscription := &H264Subscription{ + frames: make(chan H264Frame, 4), + done: make(chan struct{}), + } + + s.mutex.Lock() + s.subscribers[subscription] = struct{}{} + start := !s.running + if start { + s.running = true + } + s.mutex.Unlock() + + if start { + go s.run() + } + + return subscription +} + +func (s *H264Subscription) Next() (H264Frame, bool) { + select { + case frame := <-s.frames: + return frame, true + case <-s.done: + return H264Frame{}, false + } +} + +func (s *H264Subscription) Close() { + s.once.Do(func() { + s.closed.Store(true) + close(s.done) + defaultH264Source.remove(s) + }) +} + +func (s *H264Source) remove(subscription *H264Subscription) { + s.mutex.Lock() + delete(s.subscribers, subscription) + s.mutex.Unlock() +} + +func (s *H264Source) run() { + screen := common.GetScreen() + common.CheckScreen() + fps := screen.FPS + ticker := time.NewTicker(time.Second / time.Duration(fps)) + defer ticker.Stop() + + vision := common.GetKvmVision() + startTime := time.Now() + + for range ticker.C { + subscribers := s.snapshot() + if len(subscribers) == 0 { + s.mutex.Lock() + if len(s.subscribers) == 0 { + s.running = false + s.mutex.Unlock() + return + } + s.mutex.Unlock() + continue + } + + if screen.FPS != fps && screen.FPS != 0 { + fps = screen.FPS + ticker.Reset(time.Second / time.Duration(fps)) + } + + data, result := vision.ReadH264(screen.Width, screen.Height, screen.BitRate) + if result < 0 { + frame := H264Frame{Result: result} + for _, subscription := range subscribers { + subscription.send(frame) + } + continue + } + if len(data) == 0 { + continue + } + + frame := H264Frame{ + Data: data, + Result: result, + Duration: time.Second / time.Duration(fps), + Timestamp: time.Since(startTime).Microseconds(), + } + for _, subscription := range subscribers { + subscription.send(frame) + } + GetFrameRateCounter().Update() + } +} + +func (s *H264Source) snapshot() []*H264Subscription { + s.mutex.Lock() + defer s.mutex.Unlock() + + subscribers := make([]*H264Subscription, 0, len(s.subscribers)) + for subscription := range s.subscribers { + subscribers = append(subscribers, subscription) + } + return subscribers +} + +func (s *H264Subscription) send(frame H264Frame) bool { + if s.closed.Load() { + return false + } + + select { + case s.frames <- frame: + return true + case <-s.done: + return false + } +} diff --git a/server/service/stream/webrtc/client.go b/server/service/stream/webrtc/client.go index 18f7c70..e7789fc 100644 --- a/server/service/stream/webrtc/client.go +++ b/server/service/stream/webrtc/client.go @@ -2,17 +2,16 @@ package webrtc import ( "encoding/json" - "errors" "github.com/gorilla/websocket" - "github.com/pion/rtp" - "github.com/pion/rtp/codecs" "github.com/pion/webrtc/v4" log "github.com/sirupsen/logrus" "sync" ) +const h264SDPFmtpLine = "level-asymmetry-allowed=1;packetization-mode=1;profile-level-id=4d001f" + func NewClient(ws *websocket.Conn, videoConn *webrtc.PeerConnection) *Client { return &Client{ ws: ws, @@ -72,7 +71,11 @@ func (c *Client) ReadMessage() (*Message, error) { func (c *Client) AddTrack() error { // video track videoTrack, err := webrtc.NewTrackLocalStaticRTP( - webrtc.RTPCodecCapability{MimeType: webrtc.MimeTypeH264}, + webrtc.RTPCodecCapability{ + MimeType: webrtc.MimeTypeH264, + ClockRate: 90000, + SDPFmtpLine: h264SDPFmtpLine, + }, "video", "pion-video", ) @@ -81,20 +84,6 @@ func (c *Client) AddTrack() error { return err } - videoPacketizer := rtp.NewPacketizer( - 1200, - 100, - 0x1234ABCD, - &codecs.H264Payloader{}, - rtp.NewRandomSequencer(), - 90000, - ) - if videoPacketizer == nil { - err := errors.New("failed to create rtp packetizer") - log.Error(err) - return err - } - videoSender, err := c.video.AddTrack(videoTrack) if err != nil { log.Errorf("failed to add video track: %s", err) @@ -103,10 +92,8 @@ func (c *Client) AddTrack() error { go startRTCPReader(videoSender) track := &Track{ - videoPacketizer: videoPacketizer, - video: videoTrack, + video: videoTrack, } - track.updateExtension() c.mutex.Lock() c.track = track diff --git a/server/service/stream/webrtc/h264.go b/server/service/stream/webrtc/h264.go index d739168..465bb5b 100644 --- a/server/service/stream/webrtc/h264.go +++ b/server/service/stream/webrtc/h264.go @@ -10,6 +10,7 @@ import ( "github.com/gin-gonic/gin" "github.com/gorilla/websocket" "github.com/pion/dtls/v3" + "github.com/pion/interceptor" "github.com/pion/webrtc/v4" log "github.com/sirupsen/logrus" ) @@ -151,14 +152,6 @@ func createMediaEngine() (*webrtc.MediaEngine, error) { return nil, err } - if err := mediaEngine.RegisterHeaderExtension( - webrtc.RTPHeaderExtensionCapability{URI: "http://www.webrtc.org/experiments/rtp-hdrext/playout-delay"}, - webrtc.RTPCodecTypeVideo, - ); err != nil { - log.Errorf("failed to register header extension: %s", err) - return nil, err - } - return mediaEngine, nil } @@ -171,6 +164,7 @@ func createPeerConnection(iceServers []webrtc.ICEServer, mediaEngine *webrtc.Med apiOptions := []func(api *webrtc.API){ webrtc.WithSettingEngine(settingEngine), + webrtc.WithInterceptorRegistry(&interceptor.Registry{}), } if mediaEngine != nil { apiOptions = append(apiOptions, webrtc.WithMediaEngine(mediaEngine)) diff --git a/server/service/stream/webrtc/manager.go b/server/service/stream/webrtc/manager.go index 22bbeb1..2482dd5 100644 --- a/server/service/stream/webrtc/manager.go +++ b/server/service/stream/webrtc/manager.go @@ -1,19 +1,27 @@ package webrtc import ( - "NanoKVM-Server/common" "NanoKVM-Server/service/stream" "NanoKVM-Server/service/vm" - "time" "github.com/gorilla/websocket" + "github.com/pion/rtp" + "github.com/pion/rtp/codecs" "github.com/pion/webrtc/v4/pkg/media" log "github.com/sirupsen/logrus" ) func NewWebRTCManager() *WebRTCManager { m := &WebRTCManager{ - clients: make(map[*websocket.Conn]*Client), + clients: make(map[*websocket.Conn]*Client), + videoPacketizer: rtp.NewPacketizer( + 1450, + 100, + 0x1234ABCD, + &codecs.H264Payloader{}, + rtp.NewRandomSequencer(), + 90000, + ), videoSending: false, } m.updateClientSnapshotLocked() @@ -22,8 +30,6 @@ func NewWebRTCManager() *WebRTCManager { } func (m *WebRTCManager) AddClient(ws *websocket.Conn, client *Client) { - client.track.updateExtension() - m.mutex.Lock() m.clients[ws] = client count := m.updateClientSnapshotLocked() @@ -96,52 +102,62 @@ func (m *WebRTCManager) stopVideoStreamIfIdle() bool { } func (m *WebRTCManager) sendVideoStream() { - screen := common.GetScreen() - common.CheckScreen() - fps := screen.FPS - duration := time.Second / time.Duration(fps) + subscription := stream.SubscribeH264() + defer subscription.Close() + samples, writerDone := m.startVideoWriter() - vision := common.GetKvmVision() - - ticker := time.NewTicker(duration) - defer ticker.Stop() - - for range ticker.C { + for { + frame, ok := subscription.Next() + if !ok { + close(samples) + <-writerDone + return + } clients := m.getClients() if len(clients) == 0 { + close(samples) + <-writerDone if m.stopVideoStreamIfIdle() { log.Debugf("stop sending h264 stream") return } + samples, writerDone = m.startVideoWriter() continue } - data, result := vision.ReadH264(screen.Width, screen.Height, screen.BitRate) - stream.UpdateCaptureStatus(stream.CaptureModeH264, result) - if result < 0 || len(data) == 0 { + stream.UpdateCaptureStatus(stream.CaptureModeH264, frame.Result) + if frame.Result < 0 || len(frame.Data) == 0 { continue } sample := media.Sample{ - Data: data, - Duration: duration, + Data: frame.Data, + Duration: frame.Duration, } - for _, client := range clients { - if err := client.track.writeVideoSample(sample); err != nil { - log.Errorf("failed to write h264 video to client: %s", err) - m.RemoveClient(client.WsConn()) - client.Close() - } - } - - if screen.FPS != fps && screen.FPS != 0 { - fps = screen.FPS - duration = time.Second / time.Duration(fps) - ticker.Reset(duration) - } - - stream.GetFrameRateCounter().Update() + samples <- sample } } + +func (m *WebRTCManager) startVideoWriter() (chan media.Sample, <-chan struct{}) { + samples := make(chan media.Sample, 1) + done := make(chan struct{}) + + go func() { + defer close(done) + for sample := range samples { + packets := m.videoPacketizer.Packetize(sample.Data, uint32(sample.Duration.Seconds()*90000)) + for _, client := range m.getClients() { + err := client.track.writeVideoPackets(packets) + if err != nil { + log.Errorf("failed to write h264 video to client: %s", err) + m.RemoveClient(client.WsConn()) + client.Close() + } + } + } + }() + + return samples, done +} diff --git a/server/service/stream/webrtc/signaling.go b/server/service/stream/webrtc/signaling.go index 6db7abd..e5f74b4 100644 --- a/server/service/stream/webrtc/signaling.go +++ b/server/service/stream/webrtc/signaling.go @@ -157,11 +157,6 @@ func (s *SignalingHandler) handleVideoOffer(data string) error { return err } - if err := s.updateHeaderExtensionID(); err != nil { - log.Errorf("could not update header extension ID: %v", err) - return err - } - answerByte, err := json.Marshal(answer) if err != nil { log.Errorf("failed to marshal answer: %s", err) @@ -171,30 +166,6 @@ func (s *SignalingHandler) handleVideoOffer(data string) error { return s.client.WriteMessage("video-answer", string(answerByte)) } -// set extension ID -func (s *SignalingHandler) updateHeaderExtensionID() error { - receivers := s.client.video.GetReceivers() - if len(receivers) == 0 { - return errors.New("no RTP receiver found for video") - } - - params := receivers[0].GetParameters() - if len(params.HeaderExtensions) == 0 { - return errors.New("no header extensions found in negotiated parameters") - } - - for _, ext := range params.HeaderExtensions { - if ext.URI == "http://www.webrtc.org/experiments/rtp-hdrext/playout-delay" { - s.client.track.playoutDelayExtensionID = uint8(ext.ID) - log.Debugf("found and set playout delay extension ID to: %d", ext.ID) - return nil - } - } - - log.Warnf("no track extension found in negotiated parameters, use default value 5") - return nil -} - // handle video candidate func (s *SignalingHandler) handleVideoCandidate(data string) error { candidate := webrtc.ICECandidateInit{} diff --git a/server/service/stream/webrtc/track.go b/server/service/stream/webrtc/track.go index 4155b04..7278353 100644 --- a/server/service/stream/webrtc/track.go +++ b/server/service/stream/webrtc/track.go @@ -2,42 +2,11 @@ package webrtc import ( "github.com/pion/rtp" - "github.com/pion/webrtc/v4/pkg/media" - log "github.com/sirupsen/logrus" ) -func (t *Track) updateExtension() { - if t.playoutDelayExtensionID == 0 { - t.playoutDelayExtensionID = 5 - } - - if len(t.playoutDelayExtensionData) == 0 { - playoutDelay := &rtp.PlayoutDelayExtension{ - MinDelay: 0, - MaxDelay: 0, - } - playoutDelayExtensionData, err := playoutDelay.Marshal() - if err == nil { - t.playoutDelayExtensionData = playoutDelayExtensionData - } - } -} - -func (t *Track) writeVideoSample(sample media.Sample) error { - samples := uint32(sample.Duration.Seconds() * 90000) - packets := t.videoPacketizer.Packetize(sample.Data, samples) - - for _, p := range packets { - p.Header.Extension = true - p.Header.ExtensionProfile = 0xBEDE - - if err := p.Header.SetExtension(t.playoutDelayExtensionID, t.playoutDelayExtensionData); err != nil { - log.Errorf("Failed to set extension: %v", err) - return err - } - - if err := t.video.WriteRTP(p); err != nil { - log.Errorf("failed to write RTP: %v", err) +func (t *Track) writeVideoPackets(packets []*rtp.Packet) error { + for _, packet := range packets { + if err := t.video.WriteRTP(packet); err != nil { return err } } diff --git a/server/service/stream/webrtc/types.go b/server/service/stream/webrtc/types.go index 424f892..5e60735 100644 --- a/server/service/stream/webrtc/types.go +++ b/server/service/stream/webrtc/types.go @@ -10,11 +10,12 @@ import ( ) type WebRTCManager struct { - clients map[*websocket.Conn]*Client - clientSnapshot atomic.Pointer[[]*Client] - videoSending bool - mutex sync.Mutex - viewerVersion uint64 + clients map[*websocket.Conn]*Client + clientSnapshot atomic.Pointer[[]*Client] + videoPacketizer rtp.Packetizer + videoSending bool + mutex sync.Mutex + viewerVersion uint64 } type Client struct { @@ -36,10 +37,7 @@ type SignalingHandler struct { } type Track struct { - playoutDelayExtensionID uint8 - playoutDelayExtensionData []byte - videoPacketizer rtp.Packetizer - video *webrtc.TrackLocalStaticRTP + video *webrtc.TrackLocalStaticRTP } type Message struct {