From b1d7debfb9f6bb5c1d70ac9a93cdcbc81afcf75e Mon Sep 17 00:00:00 2001 From: tmoldovan8x8 <62697631+tmoldovan8x8@users.noreply.github.com> Date: Tue, 30 Mar 2021 12:59:32 +0300 Subject: [PATCH] feat(e2ee): adds sounds for e2ee enabling/disabling --- react/features/e2ee/constants.js | 15 +++++++++++++++ react/features/e2ee/middleware.js | 23 +++++++++++++++++++++++ react/features/e2ee/sounds.js | 15 +++++++++++++++ sounds/e2eeOff.mp3 | Bin 0 -> 10389 bytes sounds/e2eeOn.mp3 | Bin 0 -> 10076 bytes 5 files changed, 53 insertions(+) create mode 100644 react/features/e2ee/constants.js create mode 100644 react/features/e2ee/sounds.js create mode 100644 sounds/e2eeOff.mp3 create mode 100644 sounds/e2eeOn.mp3 diff --git a/react/features/e2ee/constants.js b/react/features/e2ee/constants.js new file mode 100644 index 000000000..ad7ae39ca --- /dev/null +++ b/react/features/e2ee/constants.js @@ -0,0 +1,15 @@ +// @flow + +/** + * The identifier of the sound to be played when e2ee is disabled. + * + * @type {string} + */ +export const E2EE_OFF_SOUND_ID = 'E2EE_OFF_SOUND'; + +/** + * The identifier of the sound to be played when e2ee is enabled. + * + * @type {string} + */ +export const E2EE_ON_SOUND_ID = 'E2EE_ON_SOUND'; diff --git a/react/features/e2ee/middleware.js b/react/features/e2ee/middleware.js index 7713a96d5..e0301dd5c 100644 --- a/react/features/e2ee/middleware.js +++ b/react/features/e2ee/middleware.js @@ -1,12 +1,16 @@ // @flow +import { APP_WILL_MOUNT, APP_WILL_UNMOUNT } from '../base/app'; import { getCurrentConference } from '../base/conference'; import { getLocalParticipant, participantUpdated } from '../base/participants'; import { MiddlewareRegistry, StateListenerRegistry } from '../base/redux'; +import { playSound, registerSound, unregisterSound } from '../base/sounds'; import { TOGGLE_E2EE } from './actionTypes'; import { toggleE2EE } from './actions'; +import { E2EE_OFF_SOUND_ID, E2EE_ON_SOUND_ID } from './constants'; import logger from './logger'; +import { E2EE_OFF_SOUND_FILE, E2EE_ON_SOUND_FILE } from './sounds'; /** * Middleware that captures actions related to E2EE. @@ -16,6 +20,21 @@ import logger from './logger'; */ MiddlewareRegistry.register(({ dispatch, getState }) => next => action => { switch (action.type) { + case APP_WILL_MOUNT: + dispatch(registerSound( + E2EE_OFF_SOUND_ID, + E2EE_OFF_SOUND_FILE)); + + dispatch(registerSound( + E2EE_ON_SOUND_ID, + E2EE_ON_SOUND_FILE)); + break; + + case APP_WILL_UNMOUNT: + dispatch(unregisterSound(E2EE_OFF_SOUND_ID)); + dispatch(unregisterSound(E2EE_ON_SOUND_ID)); + break; + case TOGGLE_E2EE: { const conference = getCurrentConference(getState); @@ -31,6 +50,10 @@ MiddlewareRegistry.register(({ dispatch, getState }) => next => action => { id: participant.id, local: true })); + + const soundID = action.enabled ? E2EE_ON_SOUND_ID : E2EE_OFF_SOUND_ID; + + dispatch(playSound(soundID)); } break; diff --git a/react/features/e2ee/sounds.js b/react/features/e2ee/sounds.js new file mode 100644 index 000000000..e349d62d4 --- /dev/null +++ b/react/features/e2ee/sounds.js @@ -0,0 +1,15 @@ +// @flow + +/** + * The name of the bundled audio file which will be played when e2ee is disabled. + * + * @type {string} + */ +export const E2EE_OFF_SOUND_FILE = 'e2eeOff.mp3'; + +/** + * The name of the bundled audio file which will be played when e2ee is enabled. + * + * @type {string} + */ +export const E2EE_ON_SOUND_FILE = 'e2eeOn.mp3'; diff --git a/sounds/e2eeOff.mp3 b/sounds/e2eeOff.mp3 new file mode 100644 index 0000000000000000000000000000000000000000..8c22f38f913bf40c99e2f35f76f1dceb0b7dc96c GIT binary patch literal 10389 zcmchcWmMc=xb+8j7~I{ZxI@vw26u09FAgoGEjGBj6nAfNFYYeIwYaww3dM3e|GVDr z_tSemBv~sb$#3nw^PJ=y6^H;b2;La=bafT}?eRb$BsEK4J0VeSK_PBFUf%!C{_h6( zZ7~2M$k3sXmL~&ogFyKRiN}PuZ>49&4?%+|qIl_kGH79RFbz@KUf>ijJ)1k=IRI@k zAfoq<9-E6c;ITE}2T~}m0bVdDq@?%fGu}@8JpxiH(n+&Z6F2r!YynyIfugmV=p}nm zpb^bmbLFD-(xiLkKEBN|);SqGwh1#EtqkM#;;)BoQnJ|NVKE9Q+~R1K1T>>ao^OEP zRs#@T%I3M(83{;gnH_af%5m>*MVLnW?j29nz9}USY|pcxYE`@X36=kf?EF?L>*{Jz zh_1^zesF;D!!btZlsiB3BNGl-wvoAShe(ho6>I;u;6+f|n%^LB;2t z>-co^LemfcfcN&v^-jvI16t*obwm!-x6-|zaXFJx%VtfOReU`4DY0x+uD@ah^Uc!3 z;Ru-;{!GR%%OH)iuT^B|CUdL#zTYrjUeNI^D45|Qq#rXs=Rxc%3kP%E6CDN9t0KVo zO4_W7{U!87m`yim9?jiDfPg>17eyuOm5TV7b8hkkRT|ZIcTu|l@Njk<{SWG2 zd+zoxe%Q@>BHYL-)_S0ee!(Bosz>1>nc`oE%tVPF)?(vv*1>a;j#eT$cYcQqhXXS_ zY_4kbDWIX;GOSBiYdO#u+HqV5GuT;+R=s$wlD71#_lJ$!ZbT|YOI5-Q5Rgi6mU_!!1Ir; z=~b=BYJ3qRRVqmZyN={h1Hb5V6|KkO!=*?n7Opn`Jk%S@z$Z>oqHnCS{X8o0_qH0N+9*82L&xWwMCns^kx{x3k86j%V z5i*fcE__CjVP|A<5(Ft9eB+pCP%LH_SXiHWVfDGFem7A+xRYF&cDCgu+0fr^0N9>f znhiL>Zx9o9Pf0O-K;^{Hx7o9hT@Gg9$H3;?NKV_1vB_D|a!FUpoZK$Xt&+_LO2^!ykl0bnJ=Af~L<_s1z3Yx+Hbv1>+=i84# z>|n55uq{|Q<{nJ$s{R{C2?8GC7^$ck;lFsXkdL;S9miR9POlvAkkv+F;9?;y_??XF z8K=R(IC615I{~c3cI4UMI#sa+WV#?SEV$_k+lu;Pv%7e4KIcdKo@O5!K1l;NIllA( zKp49F_>B($+(@`ohUze6@THc#Jow|ZznYcDEaz2&#%gh6L5!39pK{c*Qm_CMUQk!^ z-MsXMpHX90(#Gezi4d-_B(~;B>ITx4>`=y0ktF5*`!8PryM6E+c=n_ChQ?u@QXH$87_uy(#Ba*E7tQU~ zL^4Mm5D>x$zE>-&g~%+l8@!B$#k`rtA^2qMsWr!36EdJ?9=UJx zUJp(q_gUd_oaIWNj7FGx_Kbc*^1n);*-GOpeT6Zkc?sAOfGjYPWb?zgsg$mq-6vT- zG=4M|a`(Pc*H{{?dExVDGF{`Tb!TK>dsaEbD^Q%g7owoMWBRRVlAyUMb>!R1Wu%;@ zmT#0lEJ_>Q?rFZgfdc%HY%VCd|NhNU^HtO4S9Yi&*f)VfG3`hf8r_=;sZb_}|sxo>@2|dvr z3(;1Gs*xlku0RKgJ114(Pgumoqxkko%RuStStj8U3lB;&f9QFl(3*_{8d%w8Qp}X} zN9MQ&9`5vnt67+So$h?-<;>BAh^Tnsvq2DEwSe~WYjHT77#+q%O>;kXMhJAb*Qq2s z+Ke!ne@b1YN}H=}a{8qESt7{*I?J>j{8}mDHT&)DQjY%4POltY{X~%3zsmKzE9k zRfd46j*dSu?BAn*&*&n1=2u}mDG z5H?Qbpfi)Rr}f`eai;HL-%Ly4rYb7#**pFrBUWK?JsDViVfq@U5h{WwjC(u{NdMhG zUU~CT%zD>&YYXUfp5NaL0G__>OX=2Ej3Z~+7Iwphv!&C4TBsZGf`I3*BfW2FtwN%B zC3*Xqf|6uL!HHiJ{$N`uCw;GW;K!}}8CRj4@9U4)OXYYPMpU1{hW10ttR5*?hUyO| zD_?AUzG%wTn)e~+_Dl#^Oa`(5(%sc?WK(t$lh){`58rZpgV;ou*sDTXXmZL&zT7EI z+=68kxqymDp4u_~0@hUZUCQn?*Qtz=-~Mwd);t`}OLX-lEg)kAgl;-XZh6|A_z)xE zkyY=wMsm1DO_@8uZi4iD#LecMbTk;LV6<+KwKr&1`}_DISCk2IN~F{5I{E`&u??l? zq0N94SK-IonrYwom;W^XuRZRw{Qlpg3TgGLJYc#z2@4IWN3+_o}S%wt12qOm-;gGIW{H@D5Rs?S}(R8S9waJ-Rf0&=m0SFkM zGRH?AC@Yt+a;W%3@bW#^QyyG6Ia+IqTE)IWuwzZH+_0HNjl8>Ng`a9pZ4p1?NZ>>q zavSwT@z$Tzw)>Xf{{|f3+I>Jpfo1~o9CGS4;zJBhmc)=MAw=%dX(BYiqL#v9xLR^B zqZkTKDaU?Kn9YIUQ0+eO=}0Fux>tYEA+TwKsiJXWsmYa_6XR72o%!!zDNdTID?xFn zO!~6^&zd1=VCU&og}b_Q|V6ZgmkWE>m?2()+&(v1z?`avq!nozJ#mYo=1 zi#Ge;=t|0AS>Y8JPraC0qOkFl;#Dj|$bq3HXDVSz-W+W`wKx$eET2ufR8q6J0q2XC zy36GXuea_+{thI}1HcvBRX5r*%(z!;n4|B-^nLl?i`g!QGth+EXDI6<_h2dn8pn3* z7%3(Y;`^**_@)Nu$Py|?*@JA@@mmV9J3jO2>@c+LyrkXy5w_OdRn%3;+H)lJMg*qR z7)XTFH+FjI$&Dn$qgH+(f;Vw+xHzWIH09TQ3Ne~***;<-f{4^WF*Q#Z+Hx!nYjZ3_{FhQlGJ~F{ zlW98~K0izR*P=s&_C7yCVzUgIZa;R}e=y@8)naa z9BasdpP=_ma1Zb!}H-?$1JU;W)A6K|2oyv{AxTH88`VOK) z4(3CMbyOBAxM76DMboNmmNbtKbTSr$(~+XWOb34o8Z0s-;&b;)!W#j$MSA739 z?<2l|w&XZ3a1+qX8ZLuXB12}L8UdSuxPKqCb|=U!n(f^>u9o2XYDPzlf|a`{e*x@> z^3O@Nv{%tcG8vP#U{^};tU^sRWh8CFWrx^QR>c??X)j&<;1F5$D zOi9hLdMaKG7p{f2@S-4h40+AFbyKMY$b2dR>aOD}O=$sJbSh9-A`%TSmw%KZ*z9V3 ztV8>7Hg}`F@5F$^ltisr-Hpp9bX)9F<3-cVU~-(Wv(1F4|U`n@Jdyg7N7T8+u*C50g&C< zgi}jPrwOjz0eAIHhVP<&U1kYt?o0p!-)TonB0QEiI=u`;*~qL1VwJUdD1Fkn;*APc z)?!WJaA(rjB$cl--XU5zF^apoY@GsC_KQEyE9<&FB5_j4s01kc4Frc)XJy8r8Z?FD zG8Sd`ue{CLgMLMsm=H38zTy`Ko->cb=6a7_PLqvCwi_pnhj9q{3h3tMx6c15z@a6xbEqjQ5w7@Kf%fY?vozZ2!NNqq}0 zJu@n?FM?d}Rvbb-*PmUIwpQ7ND(6aHK+#D&!1zQzl%P9irkye_!i|z1ElHE?S21b= zr@2i^VX4*(jaS^J;jJa~yVEpQEl8$i#0Y}QfogP|T+ULZeNm_i(BgJpIcthSfndFB zZMbmB)QNJb-tX1v5@fc&9-(_!s9pyPff$6>uj{n7n@L=_<=;Bmz~Z@Sp8! z3Hvim#`MLn7q|EnJ<#%o?sMm%Vz%`3_b1wU))jQGECNqQRF;xXBH&hLs2$mDFN-PK z;8=?{+UpEBHj?_#OZ=`bXd75Z=2hoLnW;qL9|JL91UfKa{Z13~;^ia3Dh#c|H8VQsWS8MvSIx?GP2jvcPvqN9K$0{GM! zrW+;ht?{HNa*gzqqQ7@>_2VoeZygj1RJ#VOA6C4Kf4p5-2EIs-#ZU~YXn$UP(~bQ$ z3<-+?MQkdNsvB_oS7|kC2YWf{$qDZX=|b&*`?}6j4zLvjzXyCI>wsS>LywEG?{o%- zD`P{(&1zm%h>RH@!)8VkMu5=St3MrC%6@j37iy5(w7~LQIU-2ojroD>#Qu_6OfOLqlCF|>Y*PLC1f+Ck?hQ#9mG#XYjN0vO6>W<&%yuO@f1bMk zs74c4k|ZJzIqL(-Ce9`DX-s-WlQ-Y;H-yt$q%1$(Td;iUWjp`m!)AxVuSYXzR zwLgPht*E2Lil;(cU^EkSC1_?o!rvLf{B*ewz#1V$n#VtC*c$%&Lp?1(9|HT}!qw7< zQ@FgEO@RGq-tKTdN5v{60;8h*o4v?DLwduT&w`4|&H9rrih5%zi{6*9BNGh?iRAUo zp~zU?vFA$WrV=<`PL0{==2z21%6sc9FiEebfX+w2pW#M2u&UTpzJ;;KGNR-r#D$>|m1FImPZ6WmQK*!OgQR;uL4$=mv zrG1i9f?bK^{8((K3++iS#!sZ!E=p6)>hoAHuV>nC2%YyrX*xr6&Nt%LYcn(QC}C^Qy+BS|m~rFC&mcW*@yo?uOy6E(x!b zr07wu@FE_?P52OV6xOgJWctR^1mmaH69WCQ;$QiL5d&+{26&o8CeEd+!840Wa}v z!_@1E$0^U7LsSJF;|}W4cK0v(gNCtp?WO`A?{auqGyo%#C#MaLAZQ!m(@nWM^ z#GtRBut!4rkMWp8^&}eX4zU-~m@`Y1R=pl9o`n+HJ?{OtD? z3r4m*>;x;LE5<4_0=uuS`SD>uGag>TMyPBO;BdyY_1yDB z%5&=(pAkHF>@lWW%{6tL*cg0N2@o^dgdiwqQf1iuY9$!H2?w!DrR|lQS>aJ5Ad)(t zV#fY~=y`D+WKbZoBzL}Z6xC_JJTF4LM6R7Hkz(M)4iH+&MVpCF;b8k7S4o$ehFR@) zCu(0?vo#%iYA1`5_-{FONAt#asp%o>e!L(NC+-`he6x^Ed`R|8gj+ov&WW1CYKh8X z;Cjc!6lc*g)krZ&C^gi#+kXV~*n!K_fT3F2J#NR3I9b(#OESO^j_+-eU%-kOk{G5$ z(#|JeRexjmP2Xc!Psk)H%=1oi3=xs3FkqiM=>!pd43UMN7w2Q4xrVLr zf5CyJ17#Mc#+R;YFNsvsrOFw62u;HCU%f(w^V`^&Z6U`zqM z%Kgc?!~e-xUqL&?AhaZo>}6;a>J*1^MdaJp23q0_=o8fFTSmQ(H?`8Qe-upqaZYqD zWm*!B^0d-2BF9(G)jr9*l9|5_xGUDXoEgH#Z6U_7!R%2C)_f^|5!|#VcHUv`vvsDd z61YUBw`N@97%V*YBT1HbSh#SXvPQr=Bl8V1g`@9Fc6Q+2(;ULy0f+laYy7A9pdajR zoI)+aXqzea_g2u)&;Er32SetZO^3g~p)r{!ox4%*uPCNH@ywapKi5{A0Pr*q+)J@2 z2Gg7W8;g8R67A=KH|2d4C3|A2V3ra~!bGQ`W}cLz(1e^4HyJV#AM!N56SK_^ZCuGa zuh1UPw)zjRHZC5fR=eXT4PWcLC{5mwcIh|b&07*#pBicUVZZ#}uYMm*^2O$>_s|YV zm&D**e<*iCp9#GY>@)34@f9^@!*$9=p=hbQT^F zDG`|r0~*F2U}=@Ps`PkdxUO}=&9TErpZ~V^wq+&|Ta11+!Eq{S=>vo}UL;ZrcHp$% zr2H;{G+G>uVQ@@iTzYQn!2jXK7!{g?uz@FH8D2d)6;io}LCv*9CFmCl6lFfcsqr-|?Q?^WJVr!|o(ZtPRbw#-!| zaA`84&P(AL2SVq6@LQt8z~Jn`7@NFTDIXWxEbTlk~0mV=>Pbi&){j(0&$`FV0MB8fz-1$elxCfQ$w!)?%By)S9(Lv4*{<}5a7 zd%uKJyxl2~{5$^dE7E>jv@f)$k4sN2kz&KSwW4@KMy;-@Jax<>jMqo8@r)^zlyaM* zePB-H^#M<+{o_Q-U?WI%UDZqhHgmk{`?<=O&wvpF=*L7rG+sZ!)`X<2f7a6Ymkw+H z@4wuPS+cqzifM8ldt7 zBdE&jc@yZ{=OkSJj500|sq73PH24i=>s2nDsl)cZsx|xW4DkkLLU(7tbST>&B=LTG zk(j@~IkZ3B8Cn3FPl6H^eo7p>UDwr%iY+%pe z4XA$;RfS8iZmZ&^yFr~NHCphPv~6|eAfs;~oVM8}-WWr#kWt?F&n}zgN`zn?xM0Xm zFfjxd5o$4urYlEG&cfhC0%PRF7U!4FS*iMhvt-4|lbMImL{SZ~Fi z0zyWld#!Mb@D)qoA|%o3+zGm1ikp9uR6(dV{W9cV1-2Skr{Rm6GxJA%6@6NmA#zMA z#^19404R6V);7jNoxITNVI_^1c|$PA6aj{+AtCM(AY({g`o!Sh9E)*`HS-2EhL66g zFaVI5)kpGEm40!tzGg~t!t?zrI(CLAE{fKzFytCT^ur7$M3JwTxAnA1Nu5Bk@y+)4 zC1m-TM^vy$Rzu2>mN4c#XDeXiKjcgw?k@;E}>!5VH+X!D&|a*=EA4z&gYi5*s{gGSiZ`367g zho4y}5D3dF#B<;2;2s03`Gvk^ z;T<04xEIUyjiC#jrZ74mXt>}eP$OgaXvxIuqH#6p&)_Ze*pyJGan5#mW^Qqxd;EZ_^?jTz|i!nf5zwlJt8*qx#n3XM^Dep zZA}bDJ@Rr>XhB_L%$_wX)ZSq);JN4TrekT-Ae76m$e(RVO;%k&;NNPu1sf6{LPryJ zY;o4)%iftPrBQG)yC;!$`s+CEuqBL?6Tce%tcBPYMKV7r=HnFel}Yy7a$lQL?+<1+ zX{_*CX3xFQemZqaV)N#Lb`Ec%_ir=?04L0FR}bm$+baxu#(De0F+TRCR1;JtzQr&( z&0p>UfR#nl-%JQU-=UHm=-5MhHQKUJ^hASSDXl|dOYiUA6#LRSUp47?R4Zs3e{*$= z*^+%DE=J=>uZ1I}SD<#lM-*+8gZaZ+%NL@8^+dMh>X_Tbe0|~>gh@q4%QlC+8^-}A zLKupp7}*D&M=tshPiS~jOR7Ft7ArI+ddU3;M}5LkNz)t3)FSE~4?Mj-0siVf2V3Ty z6wDlD_)_C$hzb@FkID~ps$zIG*C|5d^z?H?2>Rwe&VYl>{Foza7~bmg=PaV*`Vu*O z!#)p6LaJonZ)AFj7>|(A>dC+>i;k+bh8bjHL7_$}6=MjsrgYEpgw~m_K=EV$d>no- z(8`V+1e-^kG!Y{#*MC%Zueoo zDaZ|zuOgn^gn4yoc2AeKch>yt0qp07H*H`m!!m zGRt!g?S^+rrM@Lh_hh-WG|II~tj5{>9j#T*bhb{(9k>Bmb^?H3tI_;$! zo|9fS<*WE}Nq_&{{^qK01_y+W2p8^|b$2MRcvV%<@{UKXF2&-l>t(II3F><&WY`wEB(DOPdHzDqohT4PUT zWk8T{!_z}0?kaz=8o#7gI^XwOH>mu@&T_Pz?<}x`86o=%_4>t!g;O8Sad&>eD!Y&m z*RtALz-ZV2uyb**Pbdh~7`O_6!(A};A5{4Ep-4Pg1X0Hzdnn>r>1M~26N}?Vbgw;b zeLuSR?5g+=4Pfy#vWiJ0i|?cI+e_6B>fpj5Q939={Uti-(ooDcO-fi=dC2{>Fu0Bw z%%VBMl@Lpw{WBLq3o%yAU|`C5u8AxSVr%SP(%Oa9`mnTfOf<+E$9x@XURDtuD!Z!~ ziwo6;?iDp=0p}kbvpzZDl)>RH8Rn;ANXAh3I9@n)h+B4mw&i|_fjoMHFMR{7XwYm6 zTu0@Tf;}-kFzEArOZuu?;W(P4wB1iQ@NTG!jjx#S3puHyyO--m;j z`@+%Vo>|0f3LdhE6z`Cz06DY*ehW!)y4rbXobsM-9+y+(pDA2MdkUHH z*ulP@qRHCdG@_l@q2?$lGC?FlI1KKeNEZ{ZhK(?6DiSk&>BCh9U`hRu?r0+ds|ln6 zrp$NltSYM(!L&t-1B;|^;cn!(Na9HRY2A0J_6X#DULVS@5Hok~YE~{`m#wDm6=Q?W z`kE5F%3cq_u7@qdChqI<$0O;LI^WeBdgrRSQf&!XQ#S32Ouww(p4tdQ(J)&d1XEIQ zg|wM)xhk3v%!|hf)7J=i%*SfqO5R_6ffzOEpW^{HcC&-4>;Jy%%+%qNva%bxg-WHCGI(c48>8U- zSPj=1DP|8%5ghSMHQ|qUa6uW()<#9(CKWDY$G827I@7_55>;+|H)ma5m|Z>}vu}{Y zjd`UvHc+ZP(HtRdR4D$S!Wq$kLT~ZxZs+BtMDM-ZHK_8LU`OZTLFC<2+1m4}fLZ0M zS#7o!YehchR}}fiA7|ij0(8ZQm0A|#d}>$H5SoNCR9d7yinG+Fn)?)Mg=t6HTyLhW zBM%0!Had-^6DE#(VKfBmNk!(@c~6hVx7%^GA^1 z;g0UR`__nw&KOZLU3lbVXgzCdul!(LZQ}8A_skeo*#!W9SS$}r{kvm>KnN=4Ue^3V9DMv7++1A$z5U+>xG)<6 z;bm%(O3Dy}I6$C6xTGWe8*j-ukps|hst|UDF9bP)Dojm?vL86X&dB8md=5mO3jElA zOO3%s8Tj}qa2FvQOAk8)6k68*`x$#D;T{el4dJ-mzKsK8C9a6L_NTn1iqJW8Nss}B zx2a;uxANqB#R2Z`6^!!`Y^F&Qm`0{yS83xxr-T&7L`19{B8LdFIUdCrf}0a?VKF4j z^}2ojZDt~ZO4jEl3B`Dy8$r6UfqT0Xl`je@L)!}sNE)@yzWkMcqPoA7OF2866{Bb~ zPW=3dxN8@yb;41Y^??o(N2-;6V26N@GYx(Jg6}Lid7@mgPCo4%c(yfQ$t2_U$hUhs zWLMV*0Km^CrP*Hb(~w4GRuh3O`Hf_M4i;;2TE(0ZJ=D`p_cb~UdfA8`!aYa*0*6o6 zay^x>3PBiS-l)pdPT^4T^4m0AUDWa_Dw<`(rye)`#R)%95sAZgPjDDQtqd2&UDjz) z>MyDzNN>DJ@o4%k6bQTq8srr$*Qyd?e{qoPo{k#y)Tq_o-bVibfQQqgn14|J%5$%O z>BEnLC;ZLqQjG_y7EDI9JpNrErVPt4BE%~l5o9fjhCdCG z>O(1G4J%4Z+RU4&=_iY&8@JGXdVS;R0W-oSJaLg1pC12A+^UUJx)OL+yU6*EuI){| z;Cey{Em;~-6}5B()P{R4+RS3wpRZQBBuvrUO4w9V;@7a1;=p_jYt6@($Pv)GKTi-1 zAYxjuuQoTz<4Lo;FJ~FH-8QmOrDyz;230nHl@Wv}s>=lTeNS5Sig7WKFY2R^4NK@` zW~IO>X{NP-*>SLJ<*<`ol3uB>bx?70+L=X8N%M~+-H>h)MasDjapIA?UI5shTA2&{ ziQ6J9@Gdpg_yLI(RTs8rCbb&Ez=Mjxx|x!`9cz|pj=tCzgktNPF8?ANAw8*5s_X{N zCx(qq4?V}`bUV@mUFxv%(>5toqsIdi|DQ$@S$Q^3+brxAtFEAG2N{mLbJ!L6ti)^5 zkiakA%2! zbUJ*-$4DPTDpXNo5Y=&Uk(JUvL}~CDUV)N9L8PXj@s{>X24qr-;s3dsis$)dcNilC zM>@m`M=|yuhs0U+0#iX2XM|<6s&16$jD4{Xc|A9twdNPKVuEdUCy}0`nIzv5G21g{ zi=JWB@P*_9a~X3BrckBJh@K6;(nZi(Pu+F=4SzbC`GmhHe^j+>$uuYB|{?FOg$sdBm!In_vr|Ab1?W|m)UxnD&8G;n%24|<@jV=}RAi9wA>uWHEKOGPHUf~7B ztD23okOfu2a_4N>tiL<^uaJwF#3Cyv@VQHXr$l@I4=%JAq>Hdgi{$yjtdKweIKR<$ z4DT%7j5>3)&D^u5pEs0JQ8G(R%57fE3cAOG3>6?5b&UPzDrK?P7sE*isGU>#%YyrZ z{pfvmWISu7LV&?2UEiL;g=}G?D6*9#u0mrNO}aa;6&}b84MD0ff`d%qufw}3hWD)> z4Ef)A{8d$38LngZd^DP=bJMsru&F<-9^v9GP1y^T)7~-uQZj|t-j+7{W$iplT3y2{ z+CMB>6UF*zq0+VDEURjV@T<%=Wo(PqxRxw4qgy_TVBZTIHThjgwaRxby4X$6(Q676 zv5a!ghxN-%o3$<5Jw`fc(rVb4SKDPU*#s0d!PNnf1h!7d@o+fAG;(VysLe%ngm%n? zKH1icCL6E?*^1uUD+AXNAI}~|wvRi8%HPh>36z<+zBch!`jy1L0kcKMQG`ti8^7Ak znoz^WnwfMqiO_A*UI;&*Jv5-EPx3&yVH)m(im@&YGJg?d)kK8TSSs`R7ZzAQJ! z1V4pmS`}KO$yPBnbKLtZnyjZZN4FjFRw3~%^Ucjlp65r6Mbi>ckb3}~7 z2*IOkqT)%4_*eBVH81H*lV|KK5>7~ojGR(*NZ+WYXSSl5$%#R(Lv#Asb6GWg932ZN zl!;X__|)k1>Dxt3ys=N5(~JaGn!Nm;jomddA(X-Scxav7_$_9uk|4GK*3k?gdAEPG z=JY|>@`vHp7SQdmu>U;}c>1z0q1{|H0nWB6?tKx?ib_k#Ox1u31Uxs6_Ip!Wghq3T zaShT1Cqu??k{T1QG0YT`muhW!u&RH@S1A^H`NQ{<*_}iXG-om)?`oJdBZNT6u2~tm z;}QymQvYsv9I$TBhT;fAWEVl&Kh*4)6zzp2)dr~}x9ptY+o+QIp|6UKPPj={yCn%b z&<&y%k>E+vK2NZRwbd+1SifaEff)GiKc}HDyui5&tskccW{!eTjHgJ`x9eRu@pX8{q zqQ>ZlcA|Hfc3dB2>Y?VQK>TQ7Dy4St?2OAG5;<;4Wrm&zKV`-Qs{%0=I_p$82?9yi`-E-2#w4YE z0((xEL&*}&x$^ z+7uT&R8c8vVOte|C+^4gRPZ94G^HhJz5Kv1j$K{9^j8zJI+=IsRldr3^(8#Cqd}AL z;7;<%(yi;X&ijswe*+G1`ECd*M=>e;9D3qD>Pd)`B8Dnah7a!1YQr}|Czn8{`MY9k zLOK$XT8ZI@pUVPgTl;P(;7}_(reAm2HmGfruBvr%rOlax74=OAmFY!@1S>_&Up^5f zNXDw}@4695VCU&gmA|?T+zXrzxd>9C+5%E0z7`1**=mx@W9l1ny#j#k_c?F`QJI$x zj@OLEqf5*c0&$b-5j+M8UQus@c80OKlJ-b=A+~nBcp6-K8HRe^zOvODZHVZ{tM;^S zh1&hEw8f;+EwGCWr`e}hNMUXgT=Ergd11&YSqf-kSBG0q9rgrrtEW?r)#MB=z^~n0Xk&iDx?Vhf!dAA=tN78&e&@I#5Vw&z5gQ9 zVmFxBWH$(_<-3Z1fs3chp{TqZkc(CKX8M2z4&w*;n&#e(A(8p))=A$Y{g%jy9_H)vcktGln zID{K6&Q6iP=!*6QE`}2Ny{vs=sGGJFCj%im!g%;MpWZS}5-vv{`9>{#NiOz9p}b#X z!3SJkO|c0s;3}}4F%p7a1|c?0`xrJW`)+C2@*Q4&$z1=|QLQLjqX`uuB6|L^%o(sF z#4|6M2i+-6!9;#<&nmiSDL+)9!UFpFtAjpS{RV>4CuS?Y%^AJi{9IpM&u7Ezq~vpH z92K1ofwidfRJ}wlj~rDXu6_Y8w%Y?*)~|r4nfzDm>^o;eX{M*HGBIXZL+@kUboIUU z>d|w)UNQF|^1I?ysEm+4UJU?vmAT}e_ui8q;UrxEPe#qmE-nt;fsf^X4jt`e*+4wYJxiaL?Lg}g&f4I^}Wlo(guy9RQ4lwqfe;zrR=Y!ZA z9mA<#xw7GLdE;o-dltb8)0H@a#$=GG9hs)J)N0*0O14$zXA_4d!nn1RCVxWi_ZWIeN74%NW8w1|^mthCpW4a-xPkw7I&xpis1=ijr2S*t0F-nDosW&*^w zut;)A$#lMrTi~|2P2VT_&v`bV`pzUUv_v^p_R)29v)f%yh>6&8C{9t6^R;I>TY^E+ z+D4r53*4#XB~kU;OdohNds-1^$E_2f#%B5Vuj-~=*C@gL-@;>vNC^B{hoT z35Z$6{TmOHuHZk>Mn?Fwphn!{pkMS8Ve|cm;xoh(QC)_~6A>(YUcB1*gBb-Az``B@Zk* z_RT`$*n^#K*KEVxzCAl8Z>=-)SI?KTE1?j%;@}eODk$xk7iJCdiE|Hi8D zp5(VFM5I~LwEpEVj{H|T0PN}quOWKmOm^Vb{ zQu9T)6!IkLG!H*jszk_k;~|Qxnet_b0A{{p@EaF#_rO~j{FHAuZq8D)27*eer2ca~ z9TC?v#B>e5{aB?ZC_&~|R5{%T^0|^TOHY&wjB6q|-txcp zU*Kx#Nh#9X*HmqxAyNwO(U3-U`pd=F?B-2cHpV_H0{3(7=ig$0Bip~;D2O1@KyFo< znO4zzOKb_!d;=YYn57=JLCj_F*3VMjTIaxT2UX$;k2i~}K!fCXEa@;*GiTkY7sERO z0i6a>cshuz7jXI4)2i1G_p>yU;NRm@goGg`%>eHdQRF3Tee~a{YGjz9=V=KL9iywjN9hpj6KX8ZP z5r2?G(9ydK(5d5Bc=!eK^3UMCUhU1g>w2OnJNee5G+#BeY^gtf9|0c;DoS*CvNPNQ zZa)e&t{ARXIsh~9#k5l*^z31vxay!ZIa+z*vE~6b^8p#^MTT#(ZZaumhGT4sVlR=) zAiqb-Qd=0xO&Tn#M{^ev#N8Mg5J7J>-wqp zS~-TWnkWf8;-Cwp7&(;5q|@n?OkI5`+!V;@kT4IpH)9CsXZjW3$zgI>?Y{`2Ei&mx z-=D>(mDkc>#D)?U8O#R%?Nke>&d>!dhhs)Q@)Sm|E`qmE6og?}G+jgsZ0z zA$5E+ml(F&zWv$Z7ZQ3g0S*%4zuk*WWCSO!LIxxx4#wY9(d3)c+0)nUqz z^z;B}g|NSZdArM9RN;LYrMO9?+a>AB*#oZMDx2x{Tf!IIkvRr48rrlw4kQrq8)^*+ z+d`2UoqUD7B5h7yLkCDC^TpK3#);G4iPcASPiBe}`Sx_?}(IJ|4aQ+b-I``-DFm)fItn zM5#Kj*SO#h<0n0tS&FFbgfJ#rZ7*?R>kQNF@M-0WRpibP5envg^ z441Y8APb}rT&5tZn5~{cY2Poo4AfsqLK#(Ok1ksH1)&zl9!lv~f7>{OOfph$#;C`= zvX-oTo^AfxlpDV>gPF1>9EoUqY4|SG)WbkGOw_LNXLo!dmEg^{mTXplhpT5VGmb+(P}+B zMN2D7xC#g{B687LRW(_DeLV3YxFp|NWeWuC{N*j@3E7}5PWkdG=BgDf#o};yL9)oy zQ2JN)ReclU-K`5i^jp0u$N8>!rFakinv7c(46^|^kiIyk9Gge+Z^-U5*$bRL#UR=Y znQ#Oj*D6)8Si5?MbBAR9;-Sb*eAFJaqDr>be+YT4>9p+k2 z9BNM`vZ_&n9t1%tMD3y>l!`lwXU&2^>VKjX@!$?dR_-v_j#L?rVo?OT01KS=hJ?Db z(m?Oi{U}0n9*tifIvV+#0{u;0f`VA5DN9EUVgh&?T;vd0B?LBnt#`yPaE=sO^9y8X z@;CySCpZ757Nu<(&BY^2{;B#IxxU6!uRK425aq2+sc3LzM@V2LD0vbDS8iZB)m>=$ zwlsdMxNWT_BJJ~2WV!d40!i+#X_p7#2eSE%Hb~j&kia6aw(^wuL&g&6$D4F;0!q=+ zCmkX|v2unb=35qTU#GI^R{PC74x`XMdu;O+9N2F@I3gc5v17t;Sm;aSLMW5IOi=Vk zblcb&YY@~KpY?}RAZ3@A22bXkLJMH;^Tk1QUccIVfvcdTK`ROyMC;zt z{%``h3ImZbalHnS^0LZXL?C|`XeIn6C7{DHY5L}>e>w7f4)CbUH^v4Tb<&QxJ06Zl zjO$Y3g!r3Nm~R0wf%UBZ6tM9S>P*EvnF5JF`nsipq^?_M4{s+_D@QLrT{fv%6aNeq z=gLaVB~ocg!M`b(4FR9Yr9fwGdzlRY`v|-)3>CA8GoMdAsoXDcU6e{_$yf_Gv4$qC z(K5q33o~}4v2imO_nKJVH29sbE&It2U>lv&Uh<699BH|GLS_H z)RXGCIZ&$GSWTt=^47OnqxDDqVhKw@NAro$H#KC4mEDzR4kO|1DABR{G>Ix7(rk)9 zw=Z&=CVAUw#d+JQEHFn;TgDI!FJu{No>}3M%7BBv;;7`DSiVGVlG2!TL~j7Rp0sAL z>HF2Bi`713#rK+*5rFPZbHGUHY~+E*vky3F!Z7`sQA+nbol71xlOP}S4n0^XOHC(J zEa@xA;KwgA0}P(jX-<;SS9$p^#=A`&xx?iSc?TjR55(hkXd%(@o~)t-pt5E|R@r8X zjR2X)0^kYiT)qD6ez>f6Cz5wJGrBZ3w^|#U8@n;8h>dr;6(_&r_^;+YkF{Qp&)*m4BL%`;;RBa)&N|$hB9<@p zeXF6drShJgCIcZMmhjX&nn7}AZYAq7i-bcAm*WkO7XKaF{GvtpG9ciSA~||c#ceP( zhxf7NL*-ACbz2846=p=(DGP1C(+{`^r|!&Oy19;f{Y=>+@jkOAda(;kX(@cg#BpZg zk)a;ZmtA`&ac~l~Zw15e`gkz3SFLiQrBO4CoztPTiSBUs0$$YUl7_D|Iz+!FGX4Gw zvy%<4cc8QE#6}TisL3(rNU*CQb4*RQ#3o&GmHg|0&F}aUxj*b;L?dsw--=a0k)CiS z7!D;bx6aC*p1x&Y-qjW3ervF-3A|Dgcw$mLv?qt|eeh)NF5|E?DV5R(OZAWI=rURP zDmgNxMq|-Q3;9~tb+R>su+E2Yuka={#F<%Dir|7;gHc>rxxnze%8l@+!F(t({pe!( z2dg2l8?I5RU@_0)vj}(LONE|eX<9Bqy*gPA-7>uJUfusi&Jkj;vR`8fchF%f^{dq+F^kcX5VZ_LdRQvHI}ON)IXg;7?x++AT-#*U7+wo4clF#3oW&s%Db-ig z=93rH_5Xx9PMXdv;W1fjLc8Yl?TZbErtX(W^5y@wsW&Md1in1?hfRJO`knndd$W3P z>cmg0R{Q5=^s>2)BpI8PnV6Uexqb#^czXBc(`$#=iLYnE>%H4gr)8XiYtvH^eXAM9 zLA5+Pn&!-|C}=}W{zFBDXK+}%TEeTg8J`#}F$mu!9rvs9Dgi%qIB+X99ThR6yzi3} zs}1(26|%;&N3z$u8$3lB>V|Y!y7Udq^ne0W-iorSsuC8yLhrS1b1%cu2XL zQ)8bp+X)k1mpR(Tf!{^+e|Q|x>T3>hl8IjR{0zvYR@f3%#B-}w&)LN5{pDI54`5^CkbZtfp z-~Fb?83}LgEW9b3tL?Qu5*=50K-jfdisDP;j;Tsmvh>En2`o#B9Igy^r>REC49h&U z3;wMvfxA|}<}3^w&IidWIUXtGf5%(rwWKOis;KlQooZ@fdZ)e!R&@pX|bwEHXvwG>@1fEGF0C zw4tGr;nx@By>kH;od(4Svbr=a7fkBc%AFeG@o=E<@xOzbi?-g6WfHp}ru2WomDF*|9r@$MdPH@}s zWSgrQTbM)q`$k7p)Py>6L#d^MNf*cIT% zm%C!9epftCZ$|LO-#squp4IBo%T@RV?wK}+!v|?zPGxJ;JGbd0o!xqUW1>D@p61bh z!qzC+idW+wWS4y?O)R5biwmwc8%;ZXjxeC2|Tu914S|+RN}Ahn ztQ1sX5G**Pun?C&)beiKMeH+{k$Vwe#6rRLx9Q=}GiRZbJ@lIOZd~RxYYnsc;&Ou_ zv`Zcsr3AId!qaEi&!=P{7q|cBnOD@>#g2L#;H;?8fEoqS`OIY%5{zOeth;ZrZwIdo2^Mlx4O9MT)%ccL za5ox&iN0SvSNQDuT+g(W%lIa?GVQqPtp6dw@8MVfKyeCyEA@nVlRo0c4J2qSRdx`2 z5K<46H&B;Q<>5LiYQ6X5 z`S25L<3C!G@#xcD1uSTz7Y^;pIY+bbnfIg?cL>*ViD*`e=~)3KWpawz>`_l>KZyC< zPuPQsxs7264bFK>n+Fw|%fY^fY~<}l`Ydp%p`3rEKPr0mEv7V)7M##TzG52HC_AAC z_kB#kmq_!|2njX^PtX z{)oNOe9u@nE?(X2_>|jS>o9b;FKJ=5Cf)vtM%j{d%e8mkR?in*sgcDgJMFu&rK*V) zF^x(Z?T&u54w=e33Ihk=MYt}qE@xAf{zMZcVl9U@e9{z3;IZ03%U-8PS?gLdf+(nK zG#M&R%AbdqwD_P53(&ut`)I}T(l&Tsej%&=KPxYAD`e~TY#=}R?*Fq|{y#tb{{RcQ BvuFSS literal 0 HcmV?d00001