From a1e6214c006c02b49417f4f00909ba34f1aef3c6 Mon Sep 17 00:00:00 2001 From: nenjotsu Date: Sun, 16 Jan 2022 22:49:41 +0800 Subject: [PATCH] update readme --- README.md | 231 +++++++++++++++++++++++++++++++++++++++++++- deno-talib-logo.jpg | Bin 0 -> 30018 bytes 2 files changed, 229 insertions(+), 2 deletions(-) create mode 100644 deno-talib-logo.jpg diff --git a/README.md b/README.md index bb32cb0..96f9963 100644 --- a/README.md +++ b/README.md @@ -1,2 +1,229 @@ -# deno-talib (WIP) -deno-talib port technical analysis of [https://github.com/anandanand84/technicalindicators](https://github.com/anandanand84/technicalindicators) +# deno-talib +A javascript technical indicators written in typescript for deno. + +![alt text](deno-talib-logo.jpg "deno-talib logo") + +# Installation + +## Deno + +``` bash +deno install https://deno.land/x/talib +``` + +``` javascript +import { SMA } from 'https://deno.land/x/talib'; + +# or specific version + +import { SMA } from 'https://deno.land/x/talib@0.0.3'; +``` + +### Pattern detection + +All indicators will be available in window object. So you can just use + +``` javascript +sma({ period: 5, values: [1,2,3,4,5,6,7,8,9], reversedInput: true}); +``` + +or + +``` javascript +SMA.calculate({ period: 5, values: [1,2,3,4,5,6,7,8,9] }); +``` + +# Available Indicators + +1. [ ] [Accumulation Distribution Line (ADL)](https://tonicdev.com/anandaravindan/adl "ADL"). +1. [ ] [Average Directional Index (ADX)](https://github.com/anandanand84/technicalindicators/blob/master/test/directionalmovement/ADX.js "ADX"). +1. [ ] [Average True Range (ATR)](https://tonicdev.com/anandaravindan/atr "ATR"). +1. [ ] [Awesome Oscillator (AO)](https://github.com/anandanand84/technicalindicators/blob/master/test/oscillators/AwesomeOscillator.js "AO"). +1. [x] [Bollinger Bands (BB)](https://tonicdev.com/anandaravindan/bb "BB"). +1. [ ] [Commodity Channel Index (CCI)](https://github.com/anandanand84/technicalindicators/blob/master/test/oscillators/CCI.js "CCI"). +1. [ ] [Force Index (FI)](https://github.com/anandanand84/technicalindicators/blob/master/test/volume/ForceIndex.js "FI"). +1. [ ] [Know Sure Thing (KST)](https://tonicdev.com/anandaravindan/kst "KST"). +1. [x] [Moneyflow Index (MFI)](https://github.com/anandanand84/technicalindicators/blob/master/test/volume/MFI.js "MFI"). +1. [ ] [Moving Average Convergence Divergence (MACD)](https://tonicdev.com/anandaravindan/macd "MACD"). +1. [ ] [On Balance Volume (OBV)](https://tonicdev.com/anandaravindan/obv "OBV"). +1. [ ] [Parabolic Stop and Reverse (PSAR)](https://github.com/anandanand84/technicalindicators/blob/master/test/momentum/PSAR.js "PSAR"). +1. [ ] [Rate of Change (ROC)](https://tonicdev.com/anandaravindan/roc "ROC"). +1. [x] [Relative Strength Index (RSI)](https://tonicdev.com/anandaravindan/rsi "RSI"). +1. [ ] [Simple Moving Average (SMA)](https://tonicdev.com/anandaravindan/sma "SMA"). +1. [ ] [Stochastic Oscillator (KD)](https://tonicdev.com/anandaravindan/stochastic "KD"). +1. [ ] [Stochastic RSI (StochRSI)](https://tonicdev.com/anandaravindan/stochasticrsi "StochRSI"). +1. [ ] [Triple Exponentially Smoothed Average (TRIX)](https://tonicdev.com/anandaravindan/trix "TRIX"). +1. [ ] [Typical Price](https://github.com/anandanand84/technicalindicators/blob/master/test/chart_types/TypicalPrice.js "Typical Price"). +1. [ ] [Volume Weighted Average Price (VWAP)](https://github.com/anandanand84/technicalindicators/blob/master/test/volume/VWAP.js "VWAP"). +1. [ ] [Volume Profile (VP)](https://github.com/anandanand84/technicalindicators/blob/master/test/volume/VolumeProfile.js "VP"). +1. [ ] [Exponential Moving Average (EMA)](https://tonicdev.com/anandaravindan/ema "EMA"). +1. [ ] [Weighted Moving Average (WMA)](https://tonicdev.com/anandaravindan/wma "WMA"). +1. [ ] [Wilder’s Smoothing (Smoothed Moving Average, WEMA)](https://tonicdev.com/anandaravindan/wema "WEMA"). +1. [ ] [WilliamsR (W%R)](https://tonicdev.com/anandaravindan/williamsr "W%R"). +1. [ ] [Ichimoku Cloud](https://github.com/anandanand84/technicalindicators/blob/master/test/ichimoku/IchimokuCloud.js "Ichimoku Cloud"). + +# Other Utils + +1. [ ] [Average Gain](https://github.com/anandanand84/technicalindicators/blob/master/test/Utils/AverageGain.js "") +1. [ ] [Average Loss](https://github.com/anandanand84/technicalindicators/blob/master/test/Utils/AverageLoss.js "") +1. [ ] [Cross Up](https://github.com/anandanand84/technicalindicators/blob/master/test/Utils/CrossUp.js "") +1. [ ] [Cross Down](https://github.com/anandanand84/technicalindicators/blob/master/test/Utils/CrossDown.js "") +1. [ ] [Cross Over](https://github.com/anandanand84/technicalindicators/blob/master/test/Utils/CrossOver.js "") +1. [ ] [Highest](https://github.com/anandanand84/technicalindicators/blob/master/test/Utils/Highest.js "") +1. [ ] [Lowest](https://github.com/anandanand84/technicalindicators/blob/master/test/Utils/Lowest.js "") +1. [ ] [Standard Deviation](https://github.com/anandanand84/technicalindicators/blob/master/test/Utils/SD.js "") +1. [ ] [Sum](https://github.com/anandanand84/technicalindicators/blob/master/test/Utils/Sum.js "") + + +# Chart Types + +1. [ ] [Renko (renko)](https://github.com/anandanand84/technicalindicators/blob/master/test/chart_types/Renko.js) +1. [ ] [Heikin-Ashi (HA)](https://github.com/anandanand84/technicalindicators/blob/master/test/chart_types/HeikinAshi.js) + + +# CandleStick Pattern + +1. [ ] [Abandoned Baby](https://runkit.com/anandaravindan/abandoned-baby). +1. [ ] [Bearish Engulfing Pattern](https://runkit.com/aarthiaradhana/bearishengulfingpattern). +1. [ ] [Bullish Engulfiing Pattern](https://runkit.com/aarthiaradhana/bullishengulfingpattern). +1. [ ] [Dark Cloud Cover](https://runkit.com/aarthiaradhana/darkcloudcover). +1. [ ] [Downside Tasuki Gap](https://runkit.com/aarthiaradhana/downsidetasukigap). +1. [ ] [Doji](https://runkit.com/aarthiaradhana/doji). +1. [ ] [DragonFly Doji](https://runkit.com/aarthiaradhana/dragonflydoji). +1. [ ] [GraveStone Doji](https://runkit.com/aarthiaradhana/gravestonedoji). +1. [ ] [BullishHarami](https://runkit.com/aarthiaradhana/bullishharami). +1. [ ] [Bearish Harami Cross](https://runkit.com/aarthiaradhana/bearishharamicross). +1. [ ] [Bullish Harami Cross](https://runkit.com/aarthiaradhana/bullishharamicross). +1. [ ] [Bullish Marubozu](https://runkit.com/aarthiaradhana/bullishmarubozu). +1. [ ] [Bearish Marubozu](https://runkit.com/aarthiaradhana/bearishmarubozu). +1. [ ] [Evening Doji Star](https://runkit.com/aarthiaradhana/eveningdojistar). +1. [ ] [Evening Star](https://runkit.com/aarthiaradhana/eveningstar). +1. [ ] [Bearish Harami](https://runkit.com/aarthiaradhana/bearishharami). +1. [ ] [Piercing Line](https://runkit.com/aarthiaradhana/piercingline). +1. [ ] [Bullish Spinning Top](https://runkit.com/aarthiaradhana/bullishspinningtop). +1. [ ] [Bearish Spinning Top](https://runkit.com/aarthiaradhana/bearishspinningtop). +1. [ ] [Morning Doji Star](https://runkit.com/aarthiaradhana/morningdojistar). +1. [ ] [Morning Star](https://runkit.com/aarthiaradhana/morningstar). +1. [ ] [Three Black Crows](https://runkit.com/aarthiaradhana/threeblackcrows). +1. [ ] [Three White Soldiers](https://runkit.com/aarthiaradhana/threewhitesoldiers). +1. [ ] [Bullish Hammer](https://runkit.com/nerdacus/technicalindicator-bullishhammer). +1. [ ] [Bearish Hammer](https://runkit.com/nerdacus/technicalindicator-bearishhammer). +1. [ ] [Bullish Inverted Hammer](https://runkit.com/nerdacus/technicalindicator-bullishinvertedhammer). +1. [ ] [Bearish Inverted Hammer](https://runkit.com/nerdacus/technicalindicator-bearishinvertedhammer). +1. [ ] [Hammer Pattern](https://runkit.com/nerdacus/technicalindicator-hammerpattern). +1. [ ] [Hammer Pattern (Unconfirmed)](https://runkit.com/nerdacus/technicalindicator-hammerpatternunconfirmed). +1. [ ] [Hanging Man](https://runkit.com/nerdacus/technicalindicator-hangingman). +1. [ ] [Hanging Man (Unconfirmed)](https://runkit.com/nerdacus/technicalindicator-hangingmanunconfirmed). +1. [ ] [Shooting Star](https://runkit.com/nerdacus/technicalindicator-shootingstar). +1. [ ] [Shooting Star (Unconfirmed)](https://runkit.com/nerdacus/technicalindicator-shootingstarunconfirmed). +1. [ ] [Tweezer Top](https://runkit.com/nerdacus/technicalindicator-tweezertop). +1. [ ] [Tweezer Bottom](https://runkit.com/nerdacus/technicalindicator-tweezerbottom). + +or + +Search for all bullish or bearish using + + +``` javascript +import { bullish } from 'https://deno.land/x/talib'; + +const twoDayBullishInput = { + open: [23.25,15.36], + high: [25.10,30.87], + close: [21.44,27.89], + low: [20.82,14.93], +} + +bullish(twoDayBullishInput) //true +``` + + +# API + +There are three ways you can use to get the indicator results. + +## calculate + +Every indicator has a static method `calculate` which can be used to calculate the indicator without creating an object. + +``` javascript +import { SMA } from 'https://deno.land/x/talib'; +var prices = [1,2,3,4,5,6,7,8,9,10,12,13,15]; +var period = 10; +sma({period : period, values : prices}) +``` + +or + +``` javascript +import { SMA } from 'https://deno.land/x/talib'; +var prices = [1,2,3,4,5,6,7,8,9,10,12,13,15]; +var period = 10; +SMA.calculate({period : period, values : prices}) +``` + +## nextValue + +`nextValue` method is used to get the next indicator value. + +``` javascript +var sma = new SMA({period : period, values : []}); +var results = []; +prices.forEach(price => { + var result = sma.nextValue(price); + if(result) + results.push(result) +}); +``` + +## getResult + +This a merge of calculate and nextValue. The usual use case would be + +1. Initialize indicator with available price value + +1. Get results for initialized values + +1. Use nextValue to get next indicator values for further tick. + + ``` javascript + var sma = new SMA({period : period, values : prices}); + sma.getResult(); // [5.5, 6.6, 7.7, 8.9] + sma.nextValue(16); // 10.1 + ``` + + Note: Calling nextValue will not update getResult() value. + +### Precision + +This uses regular javascript numbers, so there can be rounding errors which are negligible for a technical indicators, you can set precision by using the below config. By default there is no precision set. + + ``` javascript + import talib from 'https://deno.land/x/talib'; + talib.setConfig('precision', 10); + ``` + + +# Contribute + +Create [issues](https://github.com/nenjotsu/deno-talib/issues) about anything you want to report, change of API's, or request for adding new indicators. You can also create pull request with new indicators. + + + + + + + + +### Thanks +Original node package is from [anandanand84](https://github.com/anandanand84). Thanks to [https://github.com/anandanand84/technicalindicators](https://github.com/anandanand84/technicalindicators) diff --git a/deno-talib-logo.jpg b/deno-talib-logo.jpg new file mode 100644 index 0000000000000000000000000000000000000000..350aa13669cc74773c8b6a248c3f3c6b2b43e1e1 GIT binary patch literal 30018 zcmeFaXIK&plpj_y`^M`%_z%2R+gTZn@5EHrkW+h&IyfV0eHE2c}2N-M0o`1L4aRGl!p%hu%80}9>^OT zEaZ9pvybT3USs}h7lZvZ)^8XsA3EV;VEvRG_wW6~K>XD|46ncU4-?}zkB6AQd6Na6 zu>+LAE4q)T*OS4MRe~Y5I9N%lzvZgNT5Dh?wXCG4X}V#Kgpx(I?`|XH`i5Ck#&B z1El!CE8sO21_OXeih)InaWV#W^885yh7>3z4#sH$1x6<<&}y)8aPjcZohQKf*Fp>c z6YE#u1posZ0}B%y69*3$9|wz&4=g0b!oGHq2S-NB@)Co~176(A;mL)!7@5elKUnec zBOZ3i;$4r>`8K%$K?;zk6g|2j7pV)C|Covrr0CY0f^8N*uJ3W3-cn$WN_$cg-OxL; zonG45H@l;6?dBhoQP$Kyw=1M*VB;PTn_1pGFuz9%U}A#OVxP){hl?X{D#A6Mi`bw9 zE)17&cprpcMoaKPyXzYtlhq{RVT7y>83f6{aUB;e0NxFOkKLdUsT5FoJwX&~>bD60 zwFJz6iEuIu5MrISNeV~-+r1IW*IAe%ly56DMQBGTGexCEJ{7+kGvIMKsz`aa>itpc zyDw?!AOQ22GlF2nkr@q+fHwNuBL7kvbuMV9kKnWTQ~tam@>cIf9r$VuiEhtsrYeii1E0q zi`?Qz{+w7T_|ge59h+-zW}(!Wb3XNT*+h>?a@Vw5yPLN!Usw4tk4p_* zra>Q9JH_an9+A#Km*SKa1wXY$m?-3Q=#73*9rOGA>AIHiVmmM1_S z#7n^Ui!N`SUH2zmUQW*g6Qa_pUe4>upR>)@b`Rnnu83z$@d@;aTMcgMaMG`E*%EtG zu8-TBmWWo2b$hYZedVBY-F-Zy^oaDJsc!C*%Jc;Y-$BX=Fs~rBr$$-%Of&sM@2r`L z|LdY={?1*~O01o#<@LUmHfMyWzbr2+y@|TY%kYa-5XEIW+kI7}?@Pq&fW|R*cF}sl z)so)s0}kO;2;TM2DgLFY`=1q#q}{QPUa`Bsp~YGB68gT-3VCT^`oS^xInnn3$a}2F zXD+V#HJ^`03S(1H8o3FV3iOsx)n(>iuWuhw8S*FT&}`V7RE+p&%+5-HgmJ zvnhkPb9 zwi9FbsV?d~*g04pI{}P%@3;D!87L)Bq*{I%o;(5Wa>9>2a}Mct2I$LN-WKNXrzgb? z&+}0TU6Je=4z~Z~)N}%v?+ST!R1vU-+`E@!&z{LHGPusf#;0iH$X zbpjYJHpLyNT}9nfi>n~x_kA_{1joTg?Oo4KL7KRGdwRemWJITKse55tq^`^*p^ZBa z+q2J++;^d*RmHz^&zJuruFm9|)Q!GS&J%#5MEnGJw6t4tkM5aD-L`R7AKnkFl)4`x z90&PeH&QQ^XIY&9?FXVpzRQYl1|mLvT{cWva=8C}X#0rkZkTtukJ%#Q9(x;nTJ{83 zUreLD>3i=4_!56;!D+utBlWHQ?tXnYPvxD(0Gf4=&c$tOqb0?%HlonNkU^?_t}bu# z=Kg>H-w=gC0pfC;;U7Igv$D%3N2>6gb#Tn7sht44E7>69?96`RWCNpR^|oeWdnaoN zX%ix`<&0PM=Z5FYZE|$V4(eX20}C3`hJJ$L5kB^LyGQV)KF~DjlDrL@p1Qb{uG$-S zZNHkoc4V6Ja{o!GdDGxT;oLicDQRyWUdOBxU?9IqU`1g;58AcUnW-10+***OIr7wP zy4w8x3DB)leo!ZZ8M4t+`B`74pbw`4<%kF04l1ah;9j3Q^3@Vucj}L+(9+P} zGEp+c6XW=ln4~a@lyCLe9kK4)SogjDfV3dlwar(DyPdr}fkj-1cF%WI(f3jLakuXz zeBn@0jd|Bs9}anDbWr4???rlJ_N(ujRi!k>`6Yo9fKsDZnUmsB-^a<_aPjlv)q=5J zQE!aA8GCE)5fkcpl5g+UkgUaf%iF%Miu=vF5q)T9c+!1p)FPnCcvXoq%e5~RP}Q~> zAt|kCAb~lw<&K8~b`+B@NDS`TK;E4I_EapXCxG>< zq~(C&w~}S9pNt^O2MY4zZ|pcG%nA-n?C<%Ao&fP)kkS)CE8bU(F1zwR#dIU*?fy#M}y`?zo?s4#IU9#LfHR)5K;bk)^qU6SqEa46*5-08iI*r>{WtdR;7(e6toM`U|V3 zt#^-~tWJ~5f(VQc$ zPDcY+1(al^{k5q_HVY1}LxUOze4edug6{%$73(?fDHGpM0A)*N4oV4Hwz&0;r(ts< z1@@ISuzWk5G;04O`w7%ObN#6%ffIc$!rGjIYeW_zw(8F|=rf$EYb^u+Y=anI~ z2`y{a=jY&+*}MoARGH+HKK<>%pyXkCR)rZ2AL9g}eLTGr;3L?%)z7S*2K(@B&TOf* z9Fnofz(?jdyW0o*k5qi9?eAv1*Qj#+INxhL@fp5U2EQ%V)_FX~mR=%Nbpp8FXzp7p z4gXU4nM*fSC+vqe|6cz(Z2RC*T|!o;&8B4hzG(1bYf5#9d+^Pg(4rhXVo1~exKwU4 zR~$vf2@sT@fjoYrqthygI)=2bzpq@4iQL-S7n`J@e&HuDO zmsi8#_M5`;1S_NzkQL)@=xVVeuV4emnYQna#7Y;aFyvF4{KyIBYm8 z4>aT!Wp$fAu51Z0ie*P1f@NBoA(5u==U006^K5K}fmV(^DBmH$N`7atPtFd!|HZ!i z;+Rdrwp8}uWif$zimRV5Pj{(^i)=6CI1OjnfLh(xu^NaZ9r>WSbVQQ2Q|&hGYHB^J zXVMsA9~>_m;8vT-a{~15d3WnL1!uRUR0q+rXUqwH%5};^QVSKX9;?Lb_V7gaHw~DW zm^onNLZt1DzX+Cw*xwH}?p{l z!c6($b;9GwV}hNeMakz8x9{IcIVdbBUZ zCqfhF=`K2Nwz63q+8r6&C@iN6kv)hr(-iIJsl+uMJkWD=nisQwwF?zm;M+cq_U+)* zz>;FioC(QQ#5L`&@q11!INUrvJXSyqugx*OozlqhoopxB z4@=43?%B^on|5d_ZbIpiVbek`qAjtX*-<`dc`Kk7aUcyWD??660Q=412?=;^I&l8N*godD%} z`D|}|r`*$gEx3-eqkDay`X1`SPJqSQ&clPCkn2{Ro+KNvkFUZ>=}E>y>Y5*0A2290 zy(&EEJu`HoW4>XNo%yUE@urfvLARS1u0&by&=s4HtrmqOsVbA&yR6@5t9eozRGu~^CLX!xyy4_bbaqbhfY%BO!X%_ZwJ;#l=E?0tQ*H@5tVMlyuiLV#F8yE5N zYM5)CZly^ese-km&Ny{D!Jt&9Pg|F7!-PS7aT*kb_%=EWcU{eW&z0Q-y7A?TMqQ)4SmC zxA)%_$+LHnjHIavs#B`pUq0r!TQpjmKP>8~?*|azT%#=0W zVp3zp%h>zThsxkRJg*|Ow0^63zpne{qT%k4D{4(LJwqAUnPuJo45qg(`RT<8px)Wd z!4$PAHLa0Z%(vvGmUhXSD0)VZR;;!Y^tjAjHEZVNwUPVvA&7lEokrWy6x1kjLk$q)UjOT>KhS_7SBlS(yjeQ1pmPRGDYd=hqOhP?pa2fYLRbkEu?Z8WyO?&UX`;hzX#SsQ? z_brAi4K$Z9$MP4)pYpFJtW?YeNZmV-V3XkLI04QFnOGPp%x{lA+ddMz0uE_4VX1@c zs)7wh-|}2Y#l#+MlhE-*ezWg<`n<@G(AMVnxyo)gM3T3rm!alkb>N$jS^4*vGSM|3 zi@K+^QaO&`BWc%DmR)S{jg%9(f&U!EIGyt2{!)TkXZpnLa&ob$o>Cua5jwK1V|^Op z{n`G)ygNRwV%Zg;QZ;HKWnVz&I~HvK(boCQalX=rbK$ClYQ=b|5emXn={Vx(X<#`0 zV`L9vP<-G!*lB`#1U~;3(+uv2Ywc+z9WAn?zkF$SB$a8|f6k4KgWT7+&BD4Lbk#=! z>l3>BVwH4#?Zhu^wt5FDkNL|!!fUEtZr6yhgLnUJbt?GiXymTHoVR2|7Wt?Lza(B_+fv7P%=X5hjls9qj+iqS^Pez99royKi3(}E=cu>8^4T$w zf4^9fpVB1px^O~%DSl6?z*m!}wy2+vhrngORLy_z{*w+mh1_RjNZ$|O;4>*cCTZCE z#wY4#_RgrcitfgvvQLThk6Mn~Uamtx*UWQWu=cIh)RgNrb4EAK!+R$2-72pqLZ3z3 zRE)3Bb0Y3X#;OU^KxmgGq)MlFqDmgR8@A_)`*qr$0J5NKSEkA_d(eyYvdmr}X=rF} zbGD10P*J#aRIq)dR??$a+YFA@$GTo+BrD@NFMG=O>mV)VbiJWfHO!TH2iFgTR`$gr zboAUOra)0I|F}{^lp`mm%s;9P`uY~apa3A&Bo z{+z%u3oYNHiYL+V;}G-FYK`Sun3>oi#8qX*{#Ct7j(@{i%ZDqg`xf6~54v?4a*i&g zx^hRJ)7sM7+;MZ`0@F;UP>t`d7CzKU~A|>&s{;|Rr9TM*Yd6W z+RksT;IoNVU+sj|o<+8Wu9t7$y-Nx_J4KF<0KBwH2aK3qOY{YNzS6D+>=2Pre1POY2_oEZW5#C6+9%CI&E1<&>P z7?!D8k<>mjKvY@xy~=XD!}mq851SEF)OYuOx($<^XK55B{++|`{1y(~l5~lr5*qfv z-#-VRWQ38B#eKE%nTpPq(lwt>-)=6KF-X#3ri71pu~$J~?W2C^j`(?mxis#)kmFln z+t!?(x)T6fS)*gQ@&q9B@lM%R%};gL|KxPDta3;TX+E`pO#Ht6!e-OJBH@_1HU}!w z*;vemp9ET6nZ8u9H;wx-aZ$oClO6L=zbW2>CcI5(>2(R&x+aTWx2-;mZ$ueeCqN3h zg75d4{R&xg?!qD@2mA{sQAWA%0QIsH{J1`M{{(0V6L#M5svjSpd^ef7?j|2>gLkNP zq}k}UJQALekyksGhu4@&`VM@1{h+PW=xVW%x>KAtv`ZUlF(^M%R#}LZ+v+U!^~iT# z=meNFe&bcR<9n#HQ=4hqvH!vDLq>gV)1^Ar*5R!xw>hmPC*RsVulC~O9xlDb8oG2; z{E_5~r|OJK7)=?t6xT( zg|34xK5GSrP`7l1>B<}Gf~bptJfI2a02+WgKo6(_JOD4i4MI8q3_t*O;2DXo`IF_T zI65$ttFwmHT?mLK1S=x|IQVD%vl0q$1)NW-oOebGe@YGJPdjkS0p;{lWrFYIUs+RsN102erMzz9prvzKu!O}`WD3A=BFY~y9WT;innAz zX}}-{2t(=Vp>S6#Y4}%k_B1IXoc;}W%i-VYZXuw$dQK<>Mr{YQJ^W6$9H8|739pTG zK%L?>JshO9f0LhggF#Smgq$VH65WGSAvJ9@k-zK)4Wo&{D_U$o6=r?L=3koC1!E}x zsaYL}!x>%^0g*OBb2v>GAPBg#fh`QYxu8|sIobSDA2GT>84Q5epVs; zRe~1bZ+N0#cx^iy+rJkO{3-xt`%RA?Us$VWGW?98VE($Ej=dYFWyC)l1us&5XCoGC z^AvX;08UQR&v8t2ibaob+SB^zQ42>;20I9l z08r4;IDuY-13&?mfCK1wtU%ZS#MpobT1Wq${)R(yL38_O`WwOTg1?*z;NLWvgTRpb4yx$k zhVhSfa8AoW^hNN%JIyG|{jDuL8wA|d`5!1;IKs}x?zbnE*FkgFIK_cHh%8-Ea7CCC z3}K0aK|utd>*@UKr{eq>F&cv|QFgSU2QUBE{l{`eIQ;y<`FT^&%Ks-u4Qcc1N9l|P z*U|x{YiaWjDq;u>tOxTzDI=A1)l`2uHT+-be-NLug(JLV9PDg z0Laq76I#cw!Q&MOegy}QABYbGu7J_xKhfqt(dIwV=0DNqKhfqt(dIwV=0DNqKhfqt z(dIwV=0DNqKhb7zDp>MQwE0i8`A@X@Pqg_@wE0i8`A@X@Pqg{}EZTfJUwaLlp#=al z@Blx!LI+A@z)%Ss435A6dNA~A3&JSyK%PQi7zhl8{`VC0fGqe&e;VcG0YuP@&t{6x z;xc#uHrNpO?_`o#!WM;c7Ukk{LULN7zo+7az#X|fESs56O^mb4Q1_J>#ZZ&6Fn5~_X7Xqf^rLGI{vWJL38KflX#XUql9Gx9uC`)<| zM+YaQsD}i@DRWT}Mx(hH=ub&d_7V)I-#F15s%g^8!Vxff0Zu^<2oJviy^shek02kv zhzL9St1e+KZecDSJ`Ns1QGRYwUS9g2i2-a40ksy@mQ(oI7MPP@_}M9UcXv*AK2A8o zhKol;M1+f*my4H|1EkpnF2u$7$=7eJWRUHcXUDp{5s+@KJ z3gLn|z#Ks`BzSLlemCX(>-)FgRsJE|@8Z)N`l|u(_WWn^Uw0l&2zFRh4i0fex2Y`m z>lQ-c5Id;oZ?>X5mexW-yn^7Z;ekRqAP{~54iPI}7>6Y{FFzl@C9frf5AutfvJ(&nHxq3_Mx$2t#-+g$4N`!oTXDMZYW^ z{w@_aAFr$|w;VUGf`W_yzr3ITx2(K~u;49unOm~FLW2AZ^iYVXH5}n+3EmJpM@t(R z*Ij3r4FmmOT~LMDSVBCNHFag>>}+62kWOA$fk!}Afsa=~mWM}JhDU~1=$4?6jGU~1 zAitczEt$X9J`Dq@!J#k-2EM=Jm1SkYWe?VN4qyR<_p}S5vIrO$t^*_WAP)U$A_q4Q zXwtg8+@kzEqTIr4+`^*V+-Ia9M>}iJe<%I<72`ih!65|&qyPUS;!_d8fEKt?;Md^O z{AEJ_=@Uxy_&Bo#B|9Xz%)s;Kh|__&{Dd6r=uhok)DnVTts%jHv~+_(8Ga(|{=+>N z5fb7P5rztK@Cn0sIQSu!JRHIz*8HFe2?+`C3kY!w@q?;7W9kmBF!-mkKn)0ra`XPu zz!@15ZjExcM8IThKx_S|qiz$ps!r)coEBbWT;aQ|HYXyA_q{%GKj2L5Q^j|TpKq=CO)1z}F$ z!;(ArqIWWdNew>bT4-u(C@8DSpT50f5;{N}k(l5LJV$U5Ex1ya-q6UH9&Z$U1HB5a zm}LP(EFnl|8BI-9@U8T}NW1-KO96X0(7gT&qW=ng9tyt5frW?QVGeOdfGcY;OhK5y z9p#LMZ9(|5mHjDv4-F$g0YUt8G;DJQqnA!ywmO5~ozm!PgG*;I+Cf;_=5Mgo-{7C^ zf+PSI1iiHL|Ko%L7sR1iDjNa-TBm31|I*c8I4p8d1U_(;SlVAWcnY{^6I`5%_53fK z)e8V9e*yqkhX2Aby#^;B9s@vGC&U%ucGd=fUf9`&(TWAZiNLof*u5Y{rbWenZG+`G z?-j8K1spARvsHU%FPx`^@%M7=>U?_Y7rDXZr)$8qpBtE<*?@beT)@J_`rFD-aLp=u zPZL~hY-}8CTpS$SbGYC^fRBrdPe6G7Ji+<%gck@;)6dIU=3mbkczAe3ghW>^T)6VT z+|%SExTgsQ69zjL2Dk~x*`6j1z!7MJn3z}?=oy)x2^S9s9~1i=hy(YGL7)Cg;I1K< z7`UL-<6vTA;o@N8;GCA8ZhwM>2V5YJ=X!@28~T7CslGu}EDm zB0eJNHMK0QxUb1P_`rLs+u5(Mi$Oc3=v#R5!%L7y^=EsLV1Qe&kb=?-z5T17|04)% zyOFeb&PTN?5!@2ySHiJ!wpNQ2lw0vTBg5awfT^lo3!~uoBamfW$UgE-pdb_NbIrN3Rs(Kc)W!ajn+y>J zqu;x`2AO$-2+=d>)iIhCo`}c>kES{PV#cwa?x#GkcU!mTdrLTKXtmxhrh;9udM0}se z`Z8ui0inJTZ>cMyXxh?yNj7QQH6tHqRUyq z%`v`$y*YifYa?q-lpMl5|C)Ia2+hCjS_ znliA)S^Q_`j_hf9cb=zEph_c*9@#Vq{lp9N2$<@xklze)=n!6I%U9yh%ni#dPE-!H(litAM*A2P9=TU zt|$WqkUU7mQ75<({GyWbi~SG5)!Q3RZjb-2l7~jBW@ucQVn~SNn>76 z?R*VjVS9c;5f=7cFLAvyP?S6T?J(k-Grd$84tD&L(9+a4Z z^@6(kB;kCUdx86fRzHj$7VTapX=)Ol&#wV;ee)yxtOtn_tioXRzDR=);yjQ2tM&4p zBA)cC5_bi#ZPsx!PzrOoblplS^oB7^;-F?nktw2DaT$ZNltjeS1GK z`IR4#-eGjD`TY^EePLu1UT}mlNNJ zzs$}4u~>v!S|l;q4`AE6-O}2_E_;sFoo%SA$^@4tDZ^8`VF7Cl-we?j`QZt{8Q_*e4seK`eG+2y% z&-QGq0w$9u3dvG>{W00lS3U4B$UEASoZJhwk4SSN1!?M!EN(FRUAWNb-21fI*mAU} zP`n{Ui-p|%=12AH-ox3Owz&Dyk~dwc{q6ugSZhB-le4smOTOLdy+~Zr{?d4eYsW?X z`DKL8TA^$Xqj#;UEPf@ga?i`yXP6OzS&hWGp=%X#$r)bGH`R@k8$ptTeC=lz_Glni z^9?hxQca(?_HzIsRrygeQRNfmCf=T*;+L|DtWEy&*IMaDCwb(~&wk_6Ce4eCefGiB zs{(@?*bI}n_rz&(mRdqxx&aH3bEH0Az+oPkm<+kQGW^bq4l?0P!2fh@CE|gWC=5nQ$`|FRUEMTb|ci_MRSHOYqO{{!9 zS?#U`x)+tnt{l7z`s3Si8q=DIR#E(zOmFTQX7*b7`Q4Ff-n1dQ{p!Bz6|u-?EqW>E zHf`6FAL?L+Db@J1>_9Cx4&x?;6qNUouyrm>)+g8=>3!i60XLJXLK*5cX<5yTE)620 zn&(#ScAy%NAjL~~Ocpw&n10q8kjG=Q(z73GG*yE>8oAV)mRAe^RsA5we$b`cl zFZDt5y*)uppD(LY?bokm

-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 literal 0 HcmV?d00001