From 2f2955d766995ed83f6039cf454df0ae7700ab46 Mon Sep 17 00:00:00 2001 From: gevorg94 Date: Fri, 18 Nov 2016 15:14:29 +0400 Subject: [PATCH] feat(VideoTrim, Readme): updated Readme, trim video --- README.md | 40 +++++++++++-- lib/Trimmer/Trimmer.js | 90 ++++++++++++++-------------- lib/VideoPlayer/VideoPlayer.js | 3 +- readme_assets/project-structure.png | Bin 0 -> 28944 bytes 4 files changed, 80 insertions(+), 53 deletions(-) create mode 100644 readme_assets/project-structure.png diff --git a/README.md b/README.md index 55b7b8a1..8bafec31 100644 --- a/README.md +++ b/README.md @@ -15,12 +15,29 @@ ### Manual installation -#### [iOS] This guide is not completed yet +#### [iOS] -1. In XCode, in the project navigator, right click `Libraries` ➜ `Add Files to [your project's name]` -2. Go to `node_modules` ➜ `react-native-video-processing` and add `RNVideoEditor.xcodeproj` -3. In XCode, in the project navigator, select your project. Add `libRNVideoEditor.a` to your project's `Build Phases` ➜ `Link Binary With Libraries` -4. Run your project (`Cmd+R`)< +1. In Xcode, click the "Add Files to ". +2. Go to `node_modules` ➜ `react-native-video-processing` and add `RNVideoProcessing` directory. +3. Make sure `RNVideoProcessing` is "under" the "top-level" and then remove `GPUImage.xcodeproj` from `RNVideoProcessing` directory. +4. Add GPUImage.xcodeproj from `node_modules/react-native-video-processing/RNVideoProcessing` directory to your project and make sure it is "under" the "top-level": + + ![Project Structure](readme_assets/project-structure.png) + +5. In XCode, in the project navigator, select your project. + + Add + - CoreMedia + - CoreVideo + - OpenGLES + - AVFoundation + - QuartzCore + - GPUImage + - MobileCoreServices + + to your project's `Build Phases` ➜ `Link Binary With Libraries`. +6. import `RNVideoProcessing.h` into your `project_name-bridging-header.h`. +4. Clean and Run your project. #### Android version is not supported yet @@ -34,10 +51,18 @@ class App extends Component { constructor(...args) { super(...args); } + + trimVideo() { + this.videoPlayerRef.trim(require('./videoFile.mp4'), startTime, endTime) + .then((newSource) => console.log(newSource)) + .catch(console.warn) + } + render() { return ( this.videoPlayerRef = ref} startTime={30} // seconds endTime={120} // seconds play={true} // default false @@ -48,6 +73,9 @@ class App extends Component { /> console.log(e.startTime, e.endTime)} /> @@ -59,4 +87,4 @@ class App extends Component { ##Contributing 1. Please follow the eslint style guide. -2. Please commit with `$ npm run commit` +2. Please commit with `$ npm run commit` \ No newline at end of file diff --git a/lib/Trimmer/Trimmer.js b/lib/Trimmer/Trimmer.js index 240c0edc..1333be2c 100644 --- a/lib/Trimmer/Trimmer.js +++ b/lib/Trimmer/Trimmer.js @@ -1,59 +1,57 @@ import React, { PropTypes, Component } from 'react'; import { - View, requireNativeComponent, DeviceEventEmitter, processColor } from 'react-native'; import { getActualSource } from '../utils'; const TRIMMER_COMPONENT_NAME = 'RNTrimmerView'; -const TRIM_EVENT = "VIDEO_PROCESSING_EVENT_TRIMMER"; +const TRIM_EVENT = 'VIDEO_PROCESSING_EVENT_TRIMMER'; export class Trimmer extends Component { - static propTypes = { - source: PropTypes.oneOfType([PropTypes.string, PropTypes.number]).isRequired, - width: PropTypes.number, - height: PropTypes.number, - themeColor: PropTypes.string, - onChange: PropTypes.func - }; - - static defaultProps = { - themeColor: 'gray' - }; - - constructor(...args) { - super(...args); - this.state = {}; - this.trimListener = null; - } - - componentDidMount() { - this.trimListener = DeviceEventEmitter.addListener(TRIM_EVENT, (event) => { - if (typeof this.props.onChange === 'function') { - this.props.onChange(event); - } - }); - } - - componentWillUnmount() { - DeviceEventEmitter.removeListener(TRIM_EVENT, this.trimListener); - } - - - render() { - const { source, width, height, themeColor } = this.props; - const actualSource = getActualSource(source); - return ( - - ); - } + static propTypes = { + source: PropTypes.oneOfType([PropTypes.string, PropTypes.number]).isRequired, + width: PropTypes.number, + height: PropTypes.number, + themeColor: PropTypes.string, + onChange: PropTypes.func + }; + + static defaultProps = { + themeColor: 'gray' + }; + + constructor(...args) { + super(...args); + this.state = {}; + this.trimListener = null; + } + + componentDidMount() { + this.trimListener = DeviceEventEmitter.addListener(TRIM_EVENT, (event) => { + if (typeof this.props.onChange === 'function') { + this.props.onChange(event); + } + }); + } + + componentWillUnmount() { + DeviceEventEmitter.removeListener(TRIM_EVENT, this.trimListener); + } + + render() { + const { source, width, height, themeColor } = this.props; + const actualSource = getActualSource(source); + return ( + + ); + } } const RNTrimmer = requireNativeComponent(TRIMMER_COMPONENT_NAME, Trimmer); diff --git a/lib/VideoPlayer/VideoPlayer.js b/lib/VideoPlayer/VideoPlayer.js index 1433a6b4..4c771d9f 100644 --- a/lib/VideoPlayer/VideoPlayer.js +++ b/lib/VideoPlayer/VideoPlayer.js @@ -35,8 +35,9 @@ export class VideoPlayer extends Component { } trim(source, start, end) { + const actualSource = getActualSource(source); return new Promise((resolve, reject) => { - RNVideoTrimmer.trim(source, start, end, (err, output) => { + RNVideoTrimmer.trim(actualSource, start, end, (err, output) => { if (err) { return reject(err); } diff --git a/readme_assets/project-structure.png b/readme_assets/project-structure.png new file mode 100644 index 0000000000000000000000000000000000000000..bca6584cc9ae22e53f8a34810011dc1ba2f3c18f GIT binary patch literal 28944 zcmZU)W0WRAlPKIhZQHhO+cu|dJ#Ay!oVIP-wmogzwsHI2d%xX1=c^xeGBcDBaiS_B zvMO9rUIGpp8yW}*2u?~;R2c{e80KeO1PT6gmtkFT2LggFwGpJ4w6fZA*XNrIiRJMlC#??&7lfL)H0p#> zs80!s8C(<MCD{*V9tlW4F`!qJE3sBF{0zpSckv=y^jf zAZF0jd_@8`ac5at5C&jS!C$O9kd(M~$+2j-xInY1c;DCr*S{>RI!(EY9RYiWb3_}0X;4i;{>Yx59+<(DxYLYB5H|`XBFH=3!M4ab^us>O&OjkN z3TpiV^6%dbiw7o*$#oHj=fGObQ&en5ym|SRh>?HMFSmQ6NH4ldN@Dzqx}0wld!xWT z=J!uF*2IfVw3|F&vcfpLQdz3!Bj}t zV3zjYWB$H`OY8!NX<~ymW<~4Bf%nr~D-*ph-89uVdq46LrFyw{!|PWiz8 z)l4tC+X1au00G6!EY2kYpHKn`vYS*7>w*DMK~*6*4CQC0VVj)=i9I*cDuPlAf}8+> z7(}>Qz-0cxx%uTw2pJTJS&M2f1U(8w918>8r>zJp-KSoQq8eaj53~?au)}EqR?_ET z52Xv@vjguAN@@Vv30|;6lKO`b5^ zu6HZs7OX}u+YM4H7(ar3;B_zZ3mb0;P*Bt?65SwbodjVDAekf=dxs_Z27B)KeEG5UPKY5zt)tbsVwcAaV^_7diK zn5l6=-Pnq*4O26&7vy?WS6EjdUcc|)uDvrZih1b$(9n*u16ZqEYga3|E<`l}M;Ok) z{w=k;aVHBuIWe&lV(t;Ego4acp>ivlRKP=bNj4f!B4Xpl>gqcGnt?JoH)m|*~= z!~zL7a$p$m9`qjio{$mGEx1D%r%*fvlhkyfy)v~WU0J|_WV@uNtfvBbLem)h0U~ow zXNay4zj(JSKA~SRrD7B%ej;Z?YJHkx>YR{=poc<{@?)9Zf~FO_3rkb9r~g~xn^Xw7 zG5J99?pS4VS-fRj8`ZsdGGztDMEq~+3WI*Xgz4&VB%m9Xbes3hER}4ytXXul#<+TV*Mg)#ADGJ5jU(t3vGj^on+c$NaNV@1a-u`?hfPeF@;Z_I%Hdjaxp}dKnl_R9 z%p;l*3=x?8`NM>G_ zVfwD#06)pf=rH9_>G(+qlZ}n_B*&KZ1|WdVfe|TnA$5bLD79YJNft*IV)Dcc*z9~# zdul87Jbfe`z;ez0ZD(j4XXh}x7grQelyk^E;X2`_F0QUyL0z%Fq-qT~UtF?X0$^Y= zNb1%C`h0NGr-(D)*t6KTZ7yxZn*TNrxVF3Ax_Vt)tDu=&~^4Hm!fZSXL4s-*q*45NR4PlgiZuTq+`IsaH9WgfIp-o6aeLiYKTY_eG--U zH!89+5;x{9iaIi0G((~$svErkdmzR#a%e<+7(W6}=c38|crTALqjj&fLnc+`E?HNr zyq(qOG|jYrf^$NC(0IRK?|i?aEQ?UsP zYw3zYy5g$u#O<?f;=9a^d z&A-k3q1{hk!Jp=U_AOq&iTkCZ^^5i8E6}ae9vp|~udY_F`1j6t27*EX_jktQ-N6F3 zn7SC5>`^`{zw)QXBe#L=4ASO!7LaTZzM1}PKI{Yd?k|$_m>LnWnX;J)eT(i=FU!Zf zhuUZR?TVqA5Iq=ug(%c-xi5g%7G@{cYsq>JU%|fu5r7zgV%yfU=I-kz6pVm-Bw!@l zck+dkN$*bTQ03D6eP&ZXzq>Pa^fTgH`*!L^=iTl5I);LUoFW(($$Sl((4t?eRKVR0 z6UYh{sF8nxVRX`c|MZX9#|Nwb_aMuc2e;y}av;1)vfVhkS^IaV&NIyc8VoU_|Fh|-v`%-aJMB!dX;^Wv2- z!KFv$b>16>Tem(TV9g`O-|s(3Y?h^}rn9D;EVnVhmfp|=U}Q?~ZfpOO(*gnUx^w>w zZB3mG3EgdN?3}pW`H24ugZpRvpJfJO!v8{Xw&o+&lv5-W0XUixveC2BGZOPd6A}{g zI+~bqD~pQ%Kk}a$AF+kAvpqKhgPWThy&DTXz|ow6iHnPifsvVknVIefgU-pr&e_nN z&d!PC|1$ai_=uW189Q3qJ6i(m2>-*^&x?BE_Bs-`7r`C^x z4F7>JFwrwI{5S6(Qr`cpaw}T8o7!lKTH2c0IsM4sXJ+T%{V)9gALM@|{x3?c|Dj}J zXZzoj{|oZ}D0vzFqrm@C=>J;lzgBeOZ#AnQ zc6EEL0*}gHY%e{!_3K)cc)?o7Zz(Nef{PPVQ)nu_`s;Q_lW8aGEr9MxX?Li8*R<7x znkitmM2w@4#M*iYt)V2DXb=t_M=#@N%c6tJ!{R1JnA(D>^bt(T|SyKGcyZOuT=1U?YaH`y?~ z{9eJNmh}Pa#oye!Y6m75^tzN>Fo#ggJW{UMv?lAWLB8*J;}=8}O8K0zitoU>NjL11VVRdHFal`X1uyZ1nEhQ<~izA`emO|ow%A!R%lCA zI-&S{p1E2LW?x~qkt6yUK1%2|c-^Bs%~x)T*somjIh{eRR53*Dx>}X)cT}pETbn7= zm~&t97(>lfIs?0q|8{4x`2tr~IPrKf|9m9cn&^iklf@<`g4Xp>@xYKDpb(|_aP47E z0d>Ekn?~dQ8lPXxhA<9OdE4jh!yI9iJy&}wGKO4z1se~(_|srRMMw?3lhE&%XpXs` zN*-g;HO7_MLN__Vq@}JEX z$ma&#&K1ZmndOpBk+%lFRKpP@dGs^E%~N~)z3Y6?JXsOC%O_hm(YlKhWr?;-U6K^{ z?QNup1epIg3AMp&s()GE?=K7nJ!&eQ>v>7js?KWlhQa)$CJTX@7l-hg%<9UV2Le6m zVE)$4ZWtuOKrs|bSM&K!M#oOVjC$FL@5|e_V!^dc{`mXTmB^~&p_+SjU?8{OX8oqK zeaB-YB)Iu8NkZuBh6JiGwp`s zh_!9ownX$z1aE892sK$P4sK(7KZE6?7;o^Nv)eiDXM4^S+;6-_N;==FRwRc-9?!IS z5L=2cML*T#ODBpx`zz!VGuz+pfk9pG0QYWkB78z@TqS=V54-&Gbs34~bX{R#>FU-1 z;1)5vxgq!<_gSC`S~}c0!nS?$8_LWV!+}knNNm8}9tT+jbGcsrqE5m1>iuhc&dG&4 z7Z<67WT3rdnKu0eLOMtL2PJ{}lq*MqS_3Qb1qxpK-N2tqDs?p=iInZ7;4ZfEO$1tin)*b+u zrl4JAV1PqPnJZ+E?6OGQKHwnix{nJ_zF%REhh7a{q(Dfg_fL~VIr`0bVn{H%5m(~Q zg!t>|y$Itb35b-y_Bo-L?*>}#JDg2&U5MhaR;vm>#88{F47yMxCC9jJ`QmhIw_?lD zNEmF~K-Avrx(GQ@(c!ghdDEa*Z-!{saba@pczVBV!NPVw12@{tL6Q{vMG|e|7~coP z%$7>QTx@-|v@&vz63rIG_a{bL!sCj=5*Ltm!5+A3%E6aQC!F7`YUmTa-*_$nym(x% z*8;|3eh2>BFW&1at083LL-7N2guUFMIb6pQQLZ-=xFUb1`6cI>c1(*Z$h^*X)Vh!9 zr@pUqFVN!|uRRAI(I&##P+VI>+>tlbPTZUM`R)a7vcFnZ(5@3?ct9<;`u_HQT;_Gg znZ+ui&g{h?xDtFt{ySUd;iSd7i4N@g*^Z(G0Z(N9O3&)ED{r$R$zmL+TJtWV`SjBC z>wXd9I`_Raln`JZ(ncRJkwPoj-()=7neI$s`*6>&w|}GpI+MPg@~@7)`MVoa$FV_) zmckYPXnB^=iDMIc7u^j0Zxz<~^|JoBP#N`dkR_KH` zhh(rnpuwFjR)bk6SB4kxeTSQpo<`Ou^S9mdqV&b{4V=yCG{8TD_eLc$Irk@v{8y$V zGfDI|YTu2NE+?}^GAbt!dZZ8~Q4moiiw6b+^Z6JmR=U^)Gaf7z=4=-#0&s!%~$(Y8O*{?PhC(%rp^ij*LNJdWGKk~&v0SD?adSBmi`bTd4t@@u1BYR0Sr<^<3>8lH@3pvi zrTrA7Qri;>jdzrRg|t|Jv=_V zJh~(>rX6u?;ZAFax2Dc@d4r$&Q5GH@2cq zU0P;0@YMGpC5iHT-6h@fzmjixd09fE@H^1?c?hsHj|-I6xc+C@;djS-q1l0`)F_pe z)r373sZj9#N9trlZq0aB`&*@IZIs&?bHxKV&`-~Nt@~Nl8_f0%R#Y~tj}qrl@n0QZ zcoVkKIs(JqM}v=2z6oq`Clgd$QDI+}W(Cq*Opm{GQhBbZDrfR^Mqq4eL}~mi>|z}> z&T@^=e(_YD={h`Z0hPjP{Vk{8875aMsA_achijs{>>Yk`Cd8DK=Jk;l%gw?!-S8qE za@}{109f`eJT}gA7e7)}bqBuEp`GAVtG&>6t~_jXmb_Tk)ni;%T14peH-VWir^qNm zo)6DalXM>4tT5vHIjPC6R+aYtiN22F7w7M;*Jwx{*h7PZIQJ{wXmvTzc~2Rw!|LLQ z&+v%jQz2Rhi6BmQ#))tU4qHS#rzMCV@bXYo-&uoB?aPPnX*A?L&86|`F+;AkJRRfZ zp>*fDZn-Me!|6N(6ckj-L==rWU@gthUaclx^JxNGSJpaY>9Rd-spzfid1ph$SSimz zB~!Np{+13^1`SNZdvm(cAeZm&@s+9|-|C(N)Qk5X5UVZuEyC-z;zD#BJ4xh-+8{>) zKqw((PEX}ldGU6=o*;bHACT<(H+gwOIucku@5Sg8`x#lH%{=eySriLNL)Ttb|Ar~u z?K%RZRF#V<&iC~8mj?Ck3YIB33*WoF&j%Wp2c-s#T$!#V_xIJj0IQWkgrU@kC}NM! zw>rtr!2+T=uIqcWngUl7ddyxx)?0fx`8nj~EeG+*ZpGdEvlI*L+9Yat@e^->fkd3c z{NK@P6&JaJ4*rz9iO{+UofL|fd;ZcKd6rOKPgILpTu$IF=W7ijW6vM=Gm*qIq$^4{viX+t#nSPA z?tV%F30+*<3v5z9TfGj~Dt}fd#Yl9z$vE&-L7T1i4mTt!1 zA3kK#>{eloDkDg77Tvt?FmNatQ*F-Y%JO;BiYCXBB78yF-wtzVd^Dl>B#`S{P;f{r&}kG& z?CKe;b}?}4OZlJx1$*KgqH{OSffLVc5uC<0*0N-GCr2kz?!awoz6eB=|?w{ z!ms9n*Jz1q9q5juIwh5_Aci~EV`gUX3qv3#%$@+&Echssyn{jL9PW0>wPX_I*-+#BK?fR1oyn;Ky zhvEn43cPHrwYP^OT@fJ(d|NL+D1jSh>f@Z<0vFVZ$6VF5CZ}MPpB%JS;~9|b=Pbc2bPMridFc0LG?9h;qBkR zGFrL@vC~6H>Ixn>@rdjvgjj;SJF`=v-9+vAcy{O;H%Wj+P2x@aQc%-&Hyr@y^L0{- zY)w{!`FLm)M>qT4mtw>9Dekrv2zYZ7U#-qkBmoKqm;!|M$LBFWjsfkpcb6K~3Be?_ z#yA4kDh1+jLG^A%{^LD@cp-QoU$(3pzMW7*ZVcX1fe;Aj2YZEY{T6}AB^|WO7v68y z4RDLT37|&z`C^fb9#2+L9=l?=c^c5ubNH%E+IHgq&Vlb>JaGpC2`UtdOeqN3HXe5| zYOl^Y{zX76^$^~sqPu|wsN(sK#i^WliYAQ2W`enuf1ET5&-Z+UW(^j}q$t*t+Fqf@ z4+i#)dwj0jbU&?G_xY)ZXN4-A&E^FnwL%tK0IxL|2#|8YxT4IxcO`Pr%ZYap6kRUlIWYa=;ltQIrePYkW){* zUHavnbVT(aC`Nrlwb0+CbBHJOK}Fo8DAn_fi*q6<5>iJEhfSI^O~d zdFAw2D|oe?lX0xu$;%0~evmlhFqx8DyXlWTx-6kvC9%2TqOMqLKKjdb^B;E>DObe1 z+n#k?F*XJ(|9o^tYhX3at{MxEE7RkGb zhux|)xM{Yk)S51L5@$iD95abJOR9$(`^brjR;+ez5N4aSCpU&@cx<=}_zCdG8&643 z^Cy*_^FgOqU;@lq^l)vy>cTHEI>m)w8^6S+^GgX(|FicMD_}QJ&1|(%zh=(Jun6tk zQm`)-x}9vT(da#a22`c$Ls^A3I%1Wp4~dsr$SFT#STtM zg3I(%sNe>J+6&Tyf^1eu#0hOMq3#;u&SqAaMt1E?5Nl-ps=0p7wfCaCWgwMM0(*W=#PP5l}~*Gm5u@A{yZ z?6&0HN>jvH*=#BXSE)hA@GV`Ml>j7Nl$Isg8h+j%fN5g;_saz)Mr;|JM@bhI@Z$8g zVBW6uUQh^~Z2cun9HfmWmZja4Heg1u7I|PyWKeb6-_9{!5JI6kq8l9_hs4wo_b1$G zbAMfcd00fDeXh(XVX@d%)}`$_Xk)P#+_w2Y(mPR8lo>ooimoltM%c1ygp3wRYZ|)|A@5LJ*mWy7zM&O-`QIb{Z zq++j&W{7FEIyJpp>hIZ>-BI#--b zX4CI4+8RX-6qKs$td`AhJ!y@SAn={BC>RX zmkJwx3%s3>kg8TkrL$d3F-|@}wvoHm4=BjX7hlIZi$9*RQEuq7C)3H0n=`GH3Jdu| zNie!S_c4Vg=(# z^cAaCDvm9|23a2Fk+;W7`5AG`m#2y4dZE`FNwI!XC(_h&icAmCLPD{PYKq51Oo(hu4~{Dd~^Z-_~?}c!<68WT{QjVq)Jg57MOv|0B>sonV35l{yJcA+;&Gqr8X24wnG`Z7H!; zP%5r(z#=0Rl)>XxjkSh5ZEIXGe>{6!t6up6*X6ZMXwvm|Cd&KyU~gag{(660;Cjhz zube6W9l!O*sgZ*z!|cZq>8y6b zL@d7hjL7rUcJ=ZtkbD!>WMBkd?t{gaCF9XiYG=r8R$7Hb&6j;u+kUEnMt~A_2D@#( z|5VOvQ(7lynZ9M)e5sQ0E@dU@-CPjf>fPa3Yn~ec;B!tovA51?mfRI_{D2;!!Xc?& z?(V}Qc&p0}F{5*PCXMbc4(TCFPXHyO8h2*N=t8Ca@MV_0UyCw@z;}i=%IYwX$ZlV3 zI7YexOmM5lAe88sjWpjPtfg@snd-{(B5!JvyHUb0(S1MeItn!V!SzP%GG?*DVcix4 zcBlog4ZQ91Ob2%*F4VD?#peZ{#qEmvwvtb!LVoUyfG53;NM`bAwOHqJj*hoQ@W&Co z?_+MVpCw^*CM}r5%Oj^)=D7OhsH3LN;#Tkg`U=uBHB$@JfF$j04`K6+}9(GGF}5 zl|&M?8X^I~H88c~f7;ze(n+-r`{FNercS|_YV7Rn(LcI@1I!#fKO7ukGj+kKFE_f( zTUxWIkwBl`DW_-?>$TFo$aj%1>8+taR4$V;%oV-gQ+sfnY?tlyPA`$|+1%YvQi!_Y znLDr-oqs~6H(I3nuXZS)$YAtFu3%hI(`m5_1oV80(~7-7TVz*So$j73lqIY*>@f6k6!XC} zG@j1Ly`0zd4BD!)VC(OwpuM9^mSjm;Oazciw#YY>R=oxcPYb?|aKCsl-D7+ZcUO6; zSQ z`L-oLVDE)qANm4eJ4qu-W5*;z_H&O4!nxF-Od% zLKFAp(^t?s6R1KsGKi=O$naT1xl6 zrd>~?zTb~)HjPKp9{Y6TN}>O~=ZeleeMY$s5Jizu zu&7Tk3hmQa8*bdCqHs0RmLS?MEJ!k8EApViWS%UdVM5sW{!@QKHshKGC&5sO?QCR3 ze1-2F^XIPetl|3|bx0;r@K}C1*HPFMuIV#BEm&MV(iAc>886tov1U3#nLB(A4?f@c zn26q~y1+X+*z{o_g)^=t{*+|8lFb{H1i>?B6&BOIAZ|)q2);o2kh(NI)k4seVDR|j z;}u3yK|zD5F1jQXVL1&S3oU%UL?Lpu@KITmY`UHhcUbO#@dQd<5Bb)K^m`V>D#P+L zFH=bq`WCqCcgTuiQ~RN1Xix2|YNaL=T}BJ+sML!J#&dSCz@(msD#+p?EGP;ICDaJv z0MxK)9|>XrX)FPt0SxdW=V-U>t7y zkT>z%RR>V~o0Kt{0R``=ND;HFKmHRVIsiSohvKPuc}yI7xqzu|2NVy-p%33aD_wBp)OUyeM!%ee)DPtDI%^-_V|~I0K0^ z_rrGHS?^eG29!ox4Ie9IF>vkDdOIT84EHQbp$@J-zOueu7kaB78r9l>(<$pbX_Up! zgvjzq^|d6-ne2BGu%FVH(Q1R4lJ{V$DR-hdv%mmg#a;|rfcQ2@B3XI1&Fs@=&PosA z8f}UuG%}aa^97l<}-H9W~F@rH%N{3xx|_|woQ`5V3L3tw_;!xoOwcbrgP zZXU&K?b+J1f*HuezAiEq zIZ26&{yBZy;elL9=kx%#05YbZycZ|M*2+i9cRW>y2gF@X?Le9+8o!XI{kf3UYZ4xmF4LRS9G=@~} zx=cqWb?HMH2$2C9N@yV3q%flK@P}dcm<|AYzcCjtZ{+JF?aI3n?Q%JNND1*gpI7`o z?)g_M1QKzkBJ0gX!^bBwX2^4GuiL+5O5<=7U%_n?L&GIZzq`|oGWxVPYvQ?IAegWn=6KX1%jYST>u6-)bs`EUVM&G{?)OVua97VT7Pl>qI`?ufay%WLO&o z4OQ~XWePE!&wdLjWDZGb#q$DJ9)l*(nYyG97ZuQhZMprrh|+5Prca%?zrwuXa%^!S z%@-7YEjLm_Wr^=YKOVc#!}QeFCh6kgk_3bk9JT4hcv9Vg>StW*>{h;mTA%Zcl=5@b zD$+$1zEKz=2{ucg6;LEt|GJ+GZEXuvC}m3xRr%LjJA^hDGoA_pAsu^o#@zXQX%mwn zm@eoYS-~}D97-aP>pONo_m^0)FC#r#jJSB7vM^azlvPy?aP}*{7lB1UVXUtIH$|Ee z2kS{_xl+?jUnqezQU%*(oP^=Ze!+^;YsLyw<4~lEortVDwk!EeeNA)^_|eLwY}=_xStQKU2|*9_gXG7z_gi)9jTUaL-=`NxNW+WyktCnY9Ay$aYhbQbldNLahL+jhe|$9;U8xulBOQdQoR}(8 zyMgr_?+7i1?I5yw3PWo%T10}{5FPS%#N+y`H2BW#?4DUtpQ6(N<;Hl;Ofvg6qbEbXwDL%iO3svp^`-6)}4zCYR^$1+T{>wZ|sp)Lf%fg`a7hT(?aI( zLUZ+4;fyTLg-__VzkFfox_~Q=riHB5@B_q%LOZn|r$7H(9~Ea< ziro>Q@!za{1k^feSEtaNhVRW(pWo0UM!a+O6LWV1e^j7RuZzo0V`7=o+ahp+q* zkR(JgH>BrVz=}xzAj%Sp+z{0@Yc+Lb5c!h>Z)SYpdK$r%2mib4lxNIHcJ?3jVX{@g z*R4vO`|9Ovk6N812?k9~`>}NJlO|^QgUt{DZ#zhxuM#c~ z9Zh`YgY_6(gh7Xc>?9dK(fF4~>7qpBgryj1j2ARQI((!4mXZKNc#%PZ;Mh{yl`Brl zt2NG0Z%tXnJdaY}Z^8DWqg?RSXIXR5aPgNnzxT6XwnuZ44O}&~4~L5HYE+EwQ#vy) zs}~{2DW@ZeQc0ZE8;VD|?M+gSgE|!h!!Nw6lRs(=#fHDV^&4Z!5vY^vQPr?@x(BaA z=T0Jg@M(^G5l|6OCSsWv&*P^9DdSdfHCn8LPX_!9hLqkCz0=N0qg+xO?hr3~%=Ty3 z^ew_wK&q_J6HFx31TPCoNtY_AxS*4UVdtFSJK|4WZ?fF-p4n^_i&7hNc1gJn?{ncb z?}j5^kTz$_py@1x$MZdTYX#`Q<<^_UGCY+u@8`7(CF&!orIYClHpOVQB4hoV{c9l7%I*?}ha43ttn z;IK$-xZFM+Na)qsJ3=y@@b8K9ayxK>PZ8VQz6!3%I26Uhwg1~N;hNsqfO2S@91{Wc z>|*@YL68;p?i(L=w)uh@-|rZUEZsn$O#M5uNM9@Z-2!xJ(s`qCJPIiX84%B5rXsRP zh9bltxXN-6W0E7+rVIOegxmJp2Zdfw>3DSOBZAw{Eucrz_5IRq#VY+LRnJo`o71!8 z0Bl9UXXqIG?y+b6mTy0U7HJEN-2CFL>`1fUHZ$@VXtG!dyNU&kZ^g41APmeNj0oE~ z@8ITgWR8`8heAR^!WLzBoO6nmu#drbbaYZ$O|evukE1_Tbv(q^kM_#`65wUN{M|@N z-$g(|HI1V0KS2V4gp`j;ihvYQ)~EchmkE=vo*~Wy)MCOW5T0Ds(_J&Kp1z(>J2g~< zv2|T7pu$kNMxrfa2}C1+H-1yGi&GeDwhgSE3r1=G#se!Fi4a(r zx43Oau-}S0-t^Z7*jSVsEas0wqOHCmD3WaVkihzEsGrqh-bHG+U$K z%qBW0 z-jsTCM4_RE98}=(Qg@Q#km`}Hh@3y10L9~?*c)VRWrvHYivL8F?_dQ=l6UDH&3 zjd0qQ27X5Ii|F)AKg(?zyCn=tBGQVe@XpaIb>AqbzNs$M!^V#8 zaxUrTYQrUMK>oG_5fv2`rvlNd<3=41FokVEa#XZ{qLBx#2d&KB{3D^h0`j^v@ zg4~_H)vR|QoQjVlx{!-5dz7(+LzCsjG%P6@IE`z`R^%FEP1v9e3~G6vPHEKboP98= z?H=tUxPs6dlP_cf{&a1`X4^7a2g||>lB1Wcow~++cq?DsH!<}+`WuGY9ds3R4$flf z0&su^lMYTMzKe|%up1sv9S@aoYgVGe7jBof-xyxyMAV2i9bLwsY*jWC@8JHdX;xe= z_mHhTC6@`p1#t$3;}`VGb&uf=8;lCQ0Jo)nK_uA@nDU<26IxOYqRRtMJmqqydW&0P zHCR}*xpD&CWck6RJT`Y#> zWwCpJ%7om|-`KgEEW!DG-w_J$ReF5MA`LD4?_|`7jFcat)rj21(`iLIX>L|X4m-QB zoeaKxar5CO#Q)+H0E<1qBe3{Nh?b<`za?(rIAmEWo8xw{ASY2<;(rhuM#rks=5p|w z=U7F?0X8Gw$Qo|l?j$hZmly}-Ul5m3WR{3>PkmPj64wAgLb0(ZDwA_F_y4E5PVOvP2Uw`?c6YnABWm+p4!vE-LKUN7z`*#@3eeDhMWqTV+p41& zFUA#mH&n=l4<_PmKC+HVzm43X@>#^gWP8vaJd^|u!o(DQ^YgkVqAg_tXLu|Zclbiz z{W@;hS;ZQNwSPnC{Je9v*;UL{Vq>&;VATCR9X@*@@^bYE_2R+7u%AC`Im&`LTN#Bp zG_vd+am=sTm+#38pY$K?ne2Q$W%Sky(QE?4u{!3pm*kIbYzq5I+L?J!42 zuj3h*_-96`zyC;e+^_Y^RVYw7-joXq3-yT}-2LC#LSa9`r!qz{pDYAW6R( z7LQ8+2?Pc_et)xV(d|YQ7N(OImiOBkPFUNqTqlnQX*u8(THvZRs4`LQ#Y2ZI%J*Hx zo7o38AH64#z)b~|{$fDqfN~E&5NOG=)&JM@*=X?!#3+aG;6T|Cb*$Czg4LV#UM&Le zjVt@rEN8@Z{7~5-_bKpdWS3yr@L#vj%f&0hzk@y@Noa+>%7625>rS9s>96qO&I&^# zGrr*s)4Y|w$6z10iwOJMo)9&EPyQZg88d!|f$W;c2N$$HjzOi~y*W{~JZs=iA4nR( zXX>*=;)p}zUJrRzsrTU!!ox!)?9Y{TXFTC*zp~M_~ zXe9~&5tEKMOb$a2#o&#>f2$K?BU?tl8WF527LefDOCqyaQ1zXenzalBoz4|@GSIbAO(J)h2kTQwh# z;WpW4O$BCGvYh{+hNqC;>w5#~-xg&kpJvY(-2EAcEQ!Sx=z3#yO^oP06$w4D!ie$G zD-%O?EK%b~XeSkw5@<9zWo*Qt78N6^F#`)w>vw_Mv!qwSZ5jo4)tQd?&FFc;Zu8;; z|0TskXOJ}Z?=Wjcj%gsn(EE9fSQ4crVF~`>0 zuZ=Hhj5lAHE;!vPnh@3(?4C=ma5Kv>=O%&xYpYwXaFLoX4#TI0v{9(B-kgbMlxo~& zQk6eO+CdKPy@wg_`QMKwD2La$?tJ57vl`k~&Uy9$0tVN0&YVWCw)@uqI!uYBW8o;0 z$zWcy%F#>s)o}3uZEyt98__B!KpHm8`6VVb^HPo7A4e&=`ZlBH+Lol+ly%sXl~1ft1|vHimx=1HT!0;VOY5a@e~m9~Nljt7>&^@aeDki> zJYyUgg1erNx1g&&b%Qxmqo)GTkcj7|Pw|c!!IBp8%r{bM_x1=fQy!eQ#+MktH$|iu ztG=yOp(m~nqQpQbQ4BDtU&qclUsoNO6@aK0l4Tg4 zHA_PchNAZhA3ARVslr-eoN;7y=b38`p}nrMCpUQ)?h+fD7?v)T^gBAhoK?xfQO>e5 z`w8reYoHp4^K-^qwt&WQMqMi3=FPa1y1(wynkw@(tF=o5gS8qL3>ug^K5*~PQZDBH z^>;14Ielhtd5rnLEiqEK7hcIa5d=c+I;^!uOaFL@uikNERz^$0E156go_0I75L3G$ zrvzUi{k3CBU3M^nZx8(F7t%F8t(Y9&lwy^Vuha-45&n_7+PhK(9cKN{Mr@3e1PHE? zuU_*7ay%V%G4Cd9)R708O0HxPg)zO}au3!VD)}6h(Z7O^?Pzh`ENE)!jbiKUiw;JM zHJoQVee(M`Uq`dPLqodIyxt~o-349g>4&2pmTURW#8YdMU+oE6sy(bW+Jbi|)gnoZ zV?O?&!PwziA2;*QlfhQ^y7v z&zmgW@7`G(i({~ws6HY1P=s6TY4l_MeYzTd%s)f&HR?o+=uyicL9x_5uD7MS$&qL? zql(<|0CtR)4NsIx=$Ui6;Sm(lLn=xH0+nVSMr!M3_P(Ce_@FuX*wBj_GFz|G3|H9B z*kExx0Fm5IX1fYsX z-#83qJ<2OAdMQ=81RzN8GwAJIr1XxJS0Sa2n`51C0IqHHn5%vSPREWBU3 zJVD1+ozVMtwsgcn7%vJ!@03?*c3HsiHUpTMAa*@`f5e?Lj*|Og!C)|Q|4#toFCEae zwrS!_n?Ib5QdN^$zmNw`>M$QbX(oYeC;Pk}ol zV`zZ8KA))NlFo&}88HCyMk~kqls{e+;y8mPAODERF8$G_B2C#(uf&~CeTpY%%tC{3 zX%NY=L&L+_y{VIU_C=#d6_=AXU^7!`ra(&&o~ zhmf04@K81Wq354Smk^2uuJo+gHPMwI_c^8nLMe@kO$VuX+UxgU@uq`quAd-CH z2%)Qv|UoY=P=Zz+om!Z#|{-v&ckNklsqTGqsTRB90dyqp$Ff> z4dzyPG!qnYOocw~ZXU%>diFwc6A~o=$!n zlau4oe?)l=y;`>hsVmy1woRy0am4}nRB&|zNsgCC^v`>C;#WZ84H)-iTdbNo5}*8G z<8fO)&KW8@yCr`WcA8?Ij6Ows9#sx0yU-ev>p)vae>l`LOEsY?dr-asY-B(Nn? zC0XaNT&z5UIhR4#?1&gdM@hp`$!Ii#V7!qN@E4}Lnv-p+`nhbi3lsK`oWE6uYyA#x|vFxwC6X3SrSbgW>M3u0p`p23cId z_V^}%dyoAZ*rv8k=$o}lYJI;~Vhb+Mtrv(bp|3p9N!j#U40R@9%oBwS|yr#vK za)#xszN98b6CXvI^=9ct)`&=cn0)iH)1jZiQ^n+8{Bm zy$PcU*jR=VYRG5^l(<|d3ks>LnY5K9pI5t-1pn=PK0jx{XOB;nGMSuF1C=z0O0A*gSMiDyN|2tR&C7R1I5UD%v#OCRt&snJrt~gV~)iXR{=+ zKuX~g3d7bi8+m1>e0CPxDBQ*62C~=P*QYvAr&9pcgGw=dGyL-!r$#||k9RxUE=2~Q_~yNzZa zq4dyT4GNAkq)r(_xxoger)%f%b_*dR_a(L7XXG2^EUDw}pIA?^}EMAXxI- z!4Oa9gahGhU$F%xnzf;KM?5cqnTnXv(WL0RLKoeIcVfP&pD zrs!BLQIg)v;J#|!ba^z#geNt<@hLoXa}#>EDHT7BdH{s z8xLV(lMT3UTq-7idLQCkk9miL9LD53MgNfV-TXcDtuEaT;@7q~u4Y8iRrGrI zSp0El5WS5ld8UjV%jt#hX6RQl0u^g~fLVRR=xs@T=MImGLwEqK%W*-Q-1|K4ZWM#G z<2&%)xLJ6W;)1?>eMNQUE@LUvQ44RsJrzzTog_|1qt6H?QR{xak}3!kS)CkffSQv_ zhDl8(`k5h}252fzLw6+>1L)4aS69T~+(UwAmr5kIr($k%NSyTUP7_(bsw*7{T&Wh<0LTzC%RO5K3l628Tkf9@w| zks$U(n10TSlX2C1qmW26a>@;_g#m4WsZ0LBbpz`P@W%P`5Y_8hR3rzHxtro*tZRVb z{cFLQwiEA<9gE}?BCF8}J?I&?P`*Oa|B$SM_BM8e=;zU`R-r0&`N6~DG{z{cgKy-8{{k5UEpxnj_b zE1|;14{upo>|9Bm!9)%tIq99e1b6)^WXK#c-iT96Bh&s{j{3{6Tr+MB`A>!g=_q1w z(x(9y(bB{y24@DXF~X?jL+D~&jNF-nj%+BuS5<=Hbm?ap`vu<5C`Nxy`r~BW{Vw5R zYP$GnQToZv_>Bg1i`vp)$~*=188enbz-__v)0YVuN)KB1`hG}Tv=B!^D6T~2KbW%~ zxTRxFL5J)MICd$U-4=d(jT}YnK)f=2241-#2Jq$ z!>`5{<6p!MiYIa6H+B?Jc~ac8g@laX}+V*M)nd?1Nutj>f!0c?dn3jN#-ct{*lLv)-A29_JQg>{naq z6Oc#oHaUv&4~)n3cc)@RyM1{5*gN3UP(#+`}yiJbc zmY3hfyYG%e>$AUO-9g@?$i}6!$LN>ZonDhYeRw0#_E}7s@(Ko4T93DXJxKc+nON~Q zIf|+S@e;-6e5FTm%wMye9KXjYb5-ReokrKml!3~l1xiUK@?L4Z5=d7d12P6F!OFbH z4r8bXe`V#A83hXi_X)SEmlW*9|RASMXs?Sf3OM?m}oK+(Lm^<~}kRA8(~V zGR0|O!cn zL_t*Nef99fY6{ZZtF#msbkcC_hzrM=!-uH`@wj_j4Wgr=NoKcytUv0Mqj(tEJ28*s z51iN)@sTtDDN^>3247+Y#nQYgbt#pH;QHDWWRy~m3DeLiBMi9*=2J{Apxu%6SU4{i zx##KfpSB$PGrJ+aI}3E@kDV5Rf+zanI9snLld-ol7jg1^hcQ- z>^x{j)hwRE_~)Wcud6X{LoO{BPhwLF+4pEyln$rZoVBmRz=WT1P|2&!^BD6quNJE) zdzoD*D9y91Oqom+%VZj~3|30`x8`~Lc~9Ix`Oqo}6oa#Mt5&)goDTK~lsLL}8ao0i z@}?#)L&69qmLi0YqC782Xsd!^J<@^7yxFNuyl3&mw0F_0_ zASe1NyfU-{o|yOo(i>btv8s}w+}twgacd=vTe1|ntVSNTF;V%?@ZNBDZX5l#g@LvZp*Af4nKmly_n`(}a0WfisMp#_p34pCqA~e7&0n zVL;6iNX-kSxS$m7k2i5hDEl#a(gCNWJJiW?q^q?QOYo z=s0JIRFg_2X5eIC7=yi_nM6u5pk9rC5=ysE zDeoi?;iPgn9Ye@_@G+d=Ih1F3BppKtmO~G6=~Hop(vl!Iq%!V)sslDoe+}Ey$irw- zspfa%k+zqxl0LAZ7-L9mcN38OAwJuZfF5o1w@LGyWko#8FXpa98cmBX9Z1G^DO3m2 z$+#Nvz=70QG`+el+SHH4nxEDoHM|(AH?4?mpZ|=Mbb9zK{UGLkv=J41T_tW8%W**~ zRi(I~i3u)8p)r_>xglkQ?k|5_DPn169a-&)rI|>vH0w~T%TKW)C0*R+Tsz}F-2WlX zDQGVwfo3;pC2CN>H|DK`fOZ8bxGb2@EAIV!Xnw0H`N8K90mmmI&!xvICr;U=hcG5JK_ab;-f*zX?iEna< zC~fRWh=}RL1>SXjctf6-Ct0ppiB`58bh>1dTdA`@ig)L3#^l?Q#3pL4Sm3ZsCtA~o zb~dgYgZ*>`mQ!9_1Kdm<{Ao! z9yX#cMooMY^94&3dOtB1;aSo2#kdH(Jnm6^E#L{b{rOICL|;Oqm`^Zi=sg08_)d7b zT?NXYmdf<&6fsBLMUjc1Wms-*I66H2GSWYw{g_d+QL6PV=+~qIPPisuY7T!(!B~!% z>E?EnPdMilNr_T`3u{(mz0YQf7@V2=7og9Bt1;=bCsFL&2@Du;yRo1Ev@Kk?P%Jr0 zQrLehF??FOEj@r5wQ7rJESQ)F4L|0<`xyLuMIOO2iIAt_>;yQXKkp^7pZI&%PAu+_ zU~GRNP`SSt%JA&UXHaa-&3e~ z7@ch9$<4_m|3snp#BxP4lpmK5p``}x!_pE&@_=##EeCBfW*EffbkNu9Q?qgq6&dca zg~V~(&`d{|v~eqmSJ>gUS^*;>+ML~={4KVW?1~;uO4AJQ6h5ZAHDM#B;+D#ELdibU zL^unqT91p;KE0_{-w~EdeHZ5|2X%Yvc5(@1I$x72QWkO!V)}!Vg^Z^M-img2jwWZ} zt4Qzk-Dt@nCvICK!{s)w85@cEC8#4Y9RZaWA)da9H9H-J6QLthGH(tE&83j_mor6B z5ME)8Tp5Kij5F%~PTFq}+Z_s8z|xSR4LX8L+4Y*S=u9fpL&XiR+dS-N9G+#FoAMlU>9C7jMJeOyUaZg^A*G9*v{ zC0a`kOQb@Sui5;P>w_HyVFLBi%D8phK+GSr0>j^Y2IU>E-JljYmcq9v?$G>ZcxRr{}68dD7 zf5dWK{NpZoE~7R#w?aX!$Qscbqv@Pg?SUC@UxU-0;@VI6Ao5?S^UhHADa#H4H7`KBFT*muy6nhr2;)`I>C{>1{U!UXq z3I&&pPU=gwW08@;^9SFP*(0WrHeAt=gc&8jeK+I_nXpR--Bz$x;zW zoi&HPIu=7SM(tF>JG(FY5guutoW_{^EV5Eg`FM&Y1@?bslk9VtQ-<JQm_~ zsQi|%Q&=zndS!_=2O~<-?*;nSWFheuHtQ~rG5Khd%|4kI!4ldFk$r78DY+*W)?{Xz z^^H(#EZ5acuB#nXXiveDGiWbMqyfFJAeNucI`Ub(uErt!8C_?EhPc1=KD>P20L)r( zNJsRa1bFcQUeEzHS$=l|WBEF$4nWm%!Bi+kL6J3X12Y0MxLb;Mm*OT>WW0)1(B@0_ zvKtV*TDhLHD23jm=c418^EiF+T=1k9fTa8#v;|Osd{@D}wJ@}jwH=nrC_>Fg~3DK#f>6 zFilZc1>TG`O#&won39~)X76gVcR34bfg66jW1SgM>0&3WhJ+IR%)IaLl zBDcn9ILdmS*U%9J3vk7H13p1EjW;4Sf*G}`C7l)0g|i|t(q{lO72!s>GdgZ_jE*$; zfFLPnF$JAWoQ1Z-xlAh{hrx~_wk*GzrA`<2PDFO`8bI-CYD7^fXf5DNUpAvPgR_xV zIL12Y!3xudIt8;wf+we`z8m4rXb3#lJ<-$6$#i@{0Ti^ppcqY$$k>yk@Dj2g;R@$t zI(z)Ap>)Te_ZY%uU|xm(K+;2U(efBV51{>(ya_Qa+o5ul>m?Kyha)5v2liY-g`_g# zk#b`}a$^`{wNROw!{!OuiDjh6!nK5cmt_rp3(zx)j_rHzc5}Eh9?=FM50Y};@JeD+ zS~tR-QL?%7Zmc`wM&)mY^>NCFQzi)x{;z7!!YA=QR&w#8MTUWHjCAJE8)C7sW&HZf zJ@lnY*NB&tVJ+f*jvOSW&xhrX;2ascr(T zrcsv^P2fgw#$8Ylcti@UIf;%ZXaH-|4AlhPOq&AzcNSa?9yvBg&w&F6@cr!B*tlT> zvNHKOZu2B!MqO++=mj$%l+ko)2=piL`DK6}M*u zslYxKtjCR8m=uF^Bj(Kc0SET)cf++A{-BU}J&fM{5bvpT=q&kMsR+FyWt?vH)j<9rTjhp_Ldrh-MJt?`5n!q~Rm{-h1z%zu{Q4ORCrLWp81`8}DJlefQ$N$G%6J%RW(Qlc8tUPt4$wEZ46f zvPG$4Qx&|hdqJy2alw#Y2V{T_sFHQr9ENEnJmy(j?xC}lQwme&O_+I<6?l?ja4x3L z0~jw&#DJHb1D{wqFCS$m!Dp2Rg$yUhp_y1vxfHrmq^qSrZx9c)XYKn9D=9j6hdTTQ zs4IpfDRdlLjA!0kjse48!;Gop5Wi~)4rfGwV(-9ld@%*1{S^<4e+Qqw`#L%v{~V*g z+Cx#gC=~wanFzmqB&L5b17mKF#;nn=(k#Yv1Df7}6DjxfNeVX;g|gA=*~;N{^RX@d zR!sT$W6XN_Ml7B2I<{rTp>c;|_+>5ys-YBiY7@RcL_uVdLb3Ag=R`cusULoXH=b^b zFJE~HJF-KOe*QR4ZQY61&rHOd<9q5pO&|pM`{U|Ju7ggBF>==6X?1|X8IJcl2 z_7=)3BcC;faRqtsi8JXMh0G-?F4bO|l`zngM5L>)zr>!94#-{n1EQ{d78PW9F0un_ zmxy?k*VUKaSiSL%ewaNfU3`z^;HKY+suGTF_!V==fD3e^CT+=|IM>=qu`C4)%q%Lb25gfM&O%9_T4s@*kBt9>LNdf23yMS;a|g-k*Wi zSu~^RGz6WJ;#D&jSM>_nK|YaQ%yN-gQ|qyM2;55pTVEP|}`->*_35OndZ@t8(lEv?({PF-7m5iY3cd zA}g7qb5E+NB|&I0@&J*_t3EA3qNHVjGmPGrjEX_&^5qbgm4$L$|A)rC;!!MOE6Irv zugnX96hWAyS)4peqdk=OWtw5&{Wl;sD-)ry6_8Mdz7L==aMMSRV)7r=adW?`Q6-i) zKo1I0*)h$?=2=*=X%~w9bQm{`YDCZFr-*o-Ib}*wJkJn%gTEXe8`=c%Yjld5&(d(Kvs8USY@8G3N9);>_cUOBXed8tkglo~Uij%?yO7T1o zrp2L28;a*yFA{5iUXQfM;Q4&lG)s`j*o`R7FKWku{TKpw0)7PJy1+l*AOF zlEGB+p9+y*1$$=M(;fuFLl-6QK)d!e?LKf}&oC1z5reZq1NtgiBZRp^ycv;-i*E=I z02(#!2BVC;bPzE9(cr0^W8xWO8g-xr!*Yb(*p@zXs3&q(y#XU`+KGvyhhQd2uGf*i z-$?;B`O5;uD0s`5TXtjIQ-cXZiDGO%KDIms3l77G(E~7i{75XHE)ckx_AC-9T%Gm( z9C0iRc%Bi;c$-2I zQ7FW_bsIQHL1;woqSc8pf(s%Kr90=&umw^<{HovzoDS}`TxOR6M%7c$=mqH@I)Ga= zWh{^eC2m()G;_|#Z43Wz>*Eax^?evTSs_wF!e_~^6d=;mZO3@1(T+w6*Qc6S+0Rn_oO(L z8vldry+2^cOLI{D)@R&~Ldhs%eX80;i8aWZDK{WBHPnbUNH9zDERk9R^u&6ImPc7; zYEA~{(m;>}wIn8(zjl?$bpGfzsG}?<6piFfy-aLhGz-tayVzuAA+zNF@vNf_&i^sr zqsTQV_yJ?-PkDGiP) zMza#T$ykJ4?tG==*@_$}+^!;Z`>45$aRjv(p~gI#aj8~gGAS{Wq+zC_p3();BfK!{ z85qLJ{%JSi(2JG?8~n-=lqe(p3^Srt^6BzEGw38J019DpR%2)={^G5;Ozc`cmyY$Z z>gO~J9cZ*?p^&S{%JO9S3Y6bjzC&Vkm&9*@vXOoZkUN+SK{iMNFr$E2`D_|g!~|?G z!X-Nm=mkgzcL8*8^XmFQsuRMzY_t7UoZuiPMVka*fEg=Gmo>481(Pf^YEbT(h1fo8 z(H2cxm9el9u+vj|6>);G`xEH@z|(%UyTr0OXvDQe6B z`LFQRGhmAf_Cyu}ZKftj2van*v=xp|gfZR)RUZ`RO^+~^W2!(Q%adgprgA)Fikya8 zQ&bSz%F6l!6k|)5p2(%u=D2k~lvS$PU3l^C7`!?93B62TA+mD$=qrD)=vjYJa<>3q zNez=BTmtG)I)F=}fEyqUK!U>zZfKx6(7PBf6fU$EDsuy_Sd6R2$}ytM8`LZGmx(>- zTbuN?FZvX3-Rp&dE;#=2w!9GciV1 z8&C{RS%)kv=*K{NMxgxG74luW?;P?-^v3DNyEAIr^?L>iLPb`?MMXNv8oZ_`u^0l? z(nLu?r^p%*${>4GGIilQvi-g%owKkK;TeaVQ!CU%EF{T-)FRvre#PLFWxAylzD)2; zbahtOAs96^6y+MtI-CyRvOvJikj7Seqc+C-02QRh^eT%KB#Nwx#IoQQlcmIbLb9Qh z{OF8^&cY8lk^#Q{%8Fd}E7=2z!I`LkMnfr^^BiMy^RH6;%__w&+K9KQmEgU6XwyoZ zu5c9^mUF#W=A9+qDT3Fh?Mc#8X&{=SYRcfk=}1H?5!7J0WlU?cS$$&miP)wA`Ax<) z`;z1VD)G2CIDHXeMynQWMr8nJMg?;)V{nFKZNpQ8Mq^vLx~h(heV9Z6YnC2NhgrN$ z150g#92Asy)#RCY{kIg`JOx5%*k1@}2xp5-5yD&@Rshsc1CXk!YHAhAi+bWTVAg>I zfPZutjWQ334N5(4p@nGbt{7{+m~1$+@I`O7O$%dhe7pn$Kd2j zaXqz_lh34#cN-za;8eQ>MyAuNUNVzJoEuh8#NQ01cR`RY#l#HeZcScp6#BjYK5h&p z`C9wk_U2E1V9J1qef3dV$_oayXwVw1TD8WZL*LO8bNW;5pmlMp)~!5TMB<6T$zaVHkc)iO?vN48 zK!r!PBFD>+1uxA)mEljJ3Be~9(z-~*ZC!<3 zQN1wp-CkJt(ImVp=qRF9*M~9et~Mxgn11-0{g*EkuqJPaO z5vy~;n3)uXlTv(JjCkgL)QNS#d2uH`nfL}4r|>7L<8kxTqtUaTy|2i#DAOdjlZwC) zsG{(vU`MK;aTB^TKC9Dn5=8B3giJl1Qk6AU7GNM&Da4hxAB%59q}UcQC1X?=G2q>CHA$+RmybTg;8Y1#7V=#2H`#ut6B(yg zVSPj|yghv?#tf>APhJ{_e=C2p2tBwGKW|IGn5m!Q(-~tBwfG(U zxSIk=5 zzOJj2I|irHIdERY<)ovWcjFnyk+Ue8l-;R?S|u%15^!6;7ARS)Bx-lNr_=kc0|#_Og}7*X&E4Zf zv-Yj0Se=xPtjD~$3-PxI;<+6AGbwIH={mr!5Ao5bKVfHBCro(yT8b^=;bk`8llmn4 z&Tq_NB~_2pL)20=cq*zP>XMpQOG{W2aucvtoN-yftjHSEs-R5m8;6QL=mkIflZGuw z&O)voOV?;{p?GhgWy_W_p*V6`>=~$_B!S;WchKnLKV=v_Wm(3%kCGGd(^m)!!d&Oq zK`}mf|00V5-S9gzQDL6d+Qs$n?~x(#tx%Om8wWc zNDxGP{9mZot2>tDsaAM-{d(BrAeNOI(24@dUSlu7eYz1JgX@c3*0-`@4a zMp1?Fue;mAwv+>6NFk=wpqLUwPZE_7wR$ibj3I`TR_OsQ#*{>Z@gPc&2GE2Mv7QVE zPlhy6Qxk}K@W25s5-r9AZ79@6-4+_VUE6K_zL|OR-kbM#cDK8teaY^Ae}3QZeecce z?AzIyZ(;9CALEi^ZB%H7rZFp2&t!O9Rp4M2n(l?y5AKFH-g^y(16Lk)^&f#eE}=Hv ze;=HD=McR7X&AHP#lx_vnU+?bji#3k)H9?mFhgFlS=Pk7%pMUH$`V#m3|I$7ib{hO z1C=<%AfhcY#Zg;=jhr&2rs3h?#o*o$EC|bLaPHC8;0#l?J+on{7&)s#p#W>vn9um% zJh!8&8l0=2{7y{)E#~|Kp1GT zDHeEVf+-Xg1II=ZN1((N1s5A)mej@Tk_7t?a`I!m$YH$cz z4jhBQlap}b)g#FAKI`566bmv)&?JPU2p|->i%T*>)w~Xk20DXT?L@NpMiDOA zd}EVw4&9SB2XlYnUvv#X-_FhWHDnUDZEz4f+_iXfQVq_TqW=C4*SGoByj+7*H|35Y z7~M2BYxA6RD+fAjMC0nF0>6J|DpIxZ1QNc4%5jn8@)In1!Jb0G4RpYuW?fJD^vNk5 zl8Y?NM^EC4)kit49<(_;w+90fN+^t);L=vCEU(F5_p9#m4V2pi624C7JAIj3@65#(Y5j@ zKb_Kb1+{22jQS3x7FnA)yvM?}qnWD4o=Q8k#Gy;;O&Gb#C1r4uOHvY@*nA3WB3Aat zOtB#QZCbd>umoCMT3#of0PLYLZmb##eQl*hDN*zV?q@>4_p?1fVKLq zPO&TT_#xSuLQK@m+bZ-|_w1iTTA>qtHoGdnh&Y+Zlv9W6~Jw1)LY=mE`=+4$0 z-YVYS-VPld>+u#7|DMHsz0+9QZRVYZ8)!+?;?nVQIF}gCWs&`|#yHrk)~hv!5#*xJ zdF#o`5UM;|Xv3vLv~z@gDB;{-CE~E!NL6-b39tLXLYxqqYv)9Z0iH4)C?2^kU-Y$Z zY8-l3j>B%en5t`ISE>VsXSa=mSvGK-ln*8b*IBUTX7l-`8E{laWIgGbhBCsY3Gp3X zy>JaZSS-~b=jZV^p7u8Q@!@s6i^aQPajpdA@n7NUFISAZ7@1I3bS;{c9pG+H>XYBx&@^& zeP;N#4A#GxE=)tQ?ij_LClmeLgO@Abu_6yYOx%R2);nQg=I@}? zUsqQbWP>^xGGk_L1P=8b4J%tkt_Pnx0Q;Wb1}l&&(^P~DXO6*#QN=8RJihl`=-s&% zhWhuz**|1H(x`gY3-_#q-!7bigCBhz1J*yWAKt=hTlwH5b8K#i&|JO(hxZ+q#{Iyq ze&~C)8(J)NHm-j@0N-r?0AAUgg&VP4pU}>MHP_kfEL=MM o34HO)U2y6tVb$stefxv{0dpat+iic1djJ3c07*qoM6N<$f(MqbKmY&$ literal 0 HcmV?d00001