From cc1e94931e1b4ca18219df2af7e5743882d41f07 Mon Sep 17 00:00:00 2001 From: Yancey1989 Date: Fri, 16 Mar 2018 18:56:02 +0800 Subject: [PATCH] update figure --- .../design/dist_train/prefetch_parameter.md | 2 +- .../dist_train/src/split_parameter.graffle | Bin 7054 -> 7065 bytes 2 files changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/fluid/design/dist_train/prefetch_parameter.md b/doc/fluid/design/dist_train/prefetch_parameter.md index b3e2210fdff..7cea942279d 100644 --- a/doc/fluid/design/dist_train/prefetch_parameter.md +++ b/doc/fluid/design/dist_train/prefetch_parameter.md @@ -32,7 +32,7 @@ The processing flow of `lookup remote table` is as follows: - **Distributed Transpiler** would split the large parameters (`weight`) into some partitioned parameters (`weight_0`, `weight_1`, `weight_2`) as shown in the figure above. - - We can use `round-robin` to distribute the partitioned parameter. + - We can use some algorithms to distribute the partitioned parameters, such as `round-robin` or `hash-name`. 1. pre-fetching parameter at the beginning of each mini-batch diff --git a/doc/fluid/design/dist_train/src/split_parameter.graffle b/doc/fluid/design/dist_train/src/split_parameter.graffle index f020c0291e99f758f532d2611e72003478656750..db1f8dc2c7888d0f71337142bcccd0faeb09efe8 100644 GIT binary patch literal 7065 zcmV;K8)oDmiwFP!000030PUS=m!jB~_g`0jig@ZpukMb_l+mGXR&^gH#Q{YI#g%K_ z#U!8z2B4_5>bpOO!3Z?eFtTs;t>->rt`(yE_Zc{QZw?3i<+uOZt^9|r9mQT4{Q5Kc z75VwW4$RQ<0_WGC6`A|e{Q19r`}FPqFhg3_M(o4d_u}MXq)>gHe)#!Itp?U>->%gd znRyuXc}aeNWz=e{@bkmZZj!8jsnyan{i8Ec?d;eQjooDI^+^-h0Z?)`uxLc1RJ=^%{Tbx9&{lCHLzJ{y7 zbE0sw{yKzP?MR=`eY^3kR!S;rw26KtU{kPG18+1dif^@J$$1Ot&<`Wnfw||~@rBCE z*8WteEj`hXqHHJpm~R091`@kl8>=SG!VkuTL`=Wi5j{$qsG&nO2>=|>1waD>5&oSB zhs@4oQF-jcFW^g3REF;e(iq{vtJlbw0Kn#(nH{o6d4+~0zT;K4^ZYf|aB6R5TWbFK zFl(y^ErnZJ)-Ec}>@0ko=9+n~QM6T3e0K7-E2i(xCRuCTyh+Lob!VAf{+*W=Hb>2} zC}Y+}H?wRj??08o&&%1dopJUZ&0B%$=Ncp{gKk?Z-?y^OR$lMY=%|UFZPuJ){}f}Q zx+c_6Ag_06wbg~5)xhNS4orV6iP?T8+wTlAyBT`=opz>yWe|CP;Wq|Ok><(|GCRE^ zI=%K_%`+@HlpRNEtGLlt5sOAeIL47S?Jjv%*cwyHH3Hc2_SnzI9UD9k02}0E?quUH zELc)lXvx4Mc4y-x<#uT9Q{AyLzy|UX6Fg+!U$8$i?yp}Q93Suafyw<-5#eFXy~G$y zIA7;48WuiYtwu%-cyzSveyY{z>B2ayAtfFV)Pl zemi<+jF?Qg?c)}1?a6gMev`pQ!_LCtivFm*`?%aVp3kvTyf%3ZGumz_Ygk|AHv@@c zXOo$0O?F6T$8-7kEeve8wWhpd;*_gliqn^fv#Rp)a=R;K-YPF2zt?4+zMwx= zeX-AVbN`&J)ctHiE@l!n(I+adPskwmP-0zDVyR*jC?Mshg}_ zY8JnkznSe}9AV^ApN{kKGcdx@C&XJZaAh1QENf%=wY(k?fa97Q7^))<`dt~@Xb zpdBy*lnB})umL>)J?QFy;en8XMy48zR1dJt+)jl~3^)R4DHVb?0!)X(K_`W2mu>?- zhN+ZRK{o_JN-sfg2_lEi#{u+BumubS1{&C>j0gk;U@7B(p#thDOll(yJf<)rOCnDNxgX}fuS`jU#p zHVI6Y+KZhru$B}dcGh6dQ;!bM04Jq6z+1r6=zhu*V9C;%os@PJ;3M=b?e0Jj(k|!? z!P=oirx$}rqf@cp2Z=%xpdW#)0yFrapVzn37+xGC;NUP~DvSUcGBZcm1Ds$yXE*_M zo{5}c9W+e_Nk!$sMMTM`?xa_tr3N>9ShjG9YroX5wL4ii|>%)oS;F> zcT#6hvl>5f+zrk1yzh8Vbf4f6XA#h&xSQFrVCmCx*p*X%Nl%yEMY>wjM%X>1fltrl z9xH|cy+C>@SU=Gr+gpLBO=d^ON)HFofllK-@5CgHvVC3L0Gf3AG1&6-BinxzQ;DI& zftc=0rlaKN&4sfMm;o4I;^DxEh|qOVz^I{M0c^v)(r4T;$hBU)_w48o44POHw4+9*zIBjzy`=`mQb>_F7U)Fa!C#msIqW~S^&8M8b1 zPic;gF&sQS9Ph`SkabL{>vlPIB}y*UTd?s!B6fp(+}Zs=7I!eS5CeHljX3sEQ7Bgo zICiP%uGHsxh;ne{lpFJ^K&caM>ZqCBYByIm5>x+x9|T8L#p7n$UOS zC~ogWBeNUsl0};cjo97l9l)DCcPDi^u^H|TgU(2?IxgDjOo6o;<4ng+ZO$e0`Z}x7 z_Nn?~XS1BMyXIpDTh4vzvDSGE9ZsSszMVQNnqm17a62@|^HU{{+feEZ`FZSh_g$3_ zc`w@cEj|qwLt0qzq_{}EQQD=NOIaE>yS;dcc}nhQUD@$rrr+9YK^JCtcdz5! zjT5wKtJ}rH;AuZMdjJVXdw19C@nL3%(#v*FcGmiSW%VrZ1iTRKt(>RTJ{t8>J`%iS z-6N3*ky5VDEMvpld--`qFcXGGss2<;p7yxgceRa7*Xe#_ZW>;5*+;|eQmS?OH6j&c zDjxL2G_%7FtTa%=2E}_9x(IikP-=n@dm?zLsGI&52sBsv)eKOIb3LUi+S1) zH_b+0PNHEwY}A=F7`2t=nmH^+65rBf%pKX_k!MIJvl~5uM}ld(BaE$ui<&3W0+_M% zN*r2LPvM?KeMdExd@2TAI#K$#cv$CtJy%9x3EMQQfzgliRnO+af<-RV9T|ru6 zvTW^!`M4|OMvklzU|U_86h^oT0;R)=89$o5_iJxCTY`CxkH}$n2p%X+k ze0A$j8P#Fq+u%?9mTLm^aafyS0d|bbZb}N$sb( zzO^D5+XQ;86|2~Oo6lcFH__S{X}H~ujx|_gM{ezQZEVs>>IRHs%Ilp!?WE>1*{_2E zWuj=_&P_*zK}{itjuKj$iW0D8);hr+JJ!T%2n0KIH}+sh_JUQ{wypX&c*^Hzb~NL?X4BO+5X;8$jgM3;fpv&C+G6YQ|LN7m|Ld*xs~ zt`i!1o+r9by-Aqr3+rjLT66kxS67I&zFM`P^!|E_1;*3ddE$EEuD8UW^wm?R_cY4e znf4+}->xHWA0s`KjSO$o*XwSy)3;s&fVeYB>k;R~mcEx7eL6mP`S?YV=qKGh$~Gpw z#A#!;VWbJ>;Y8n^ZG<){MFG88Z0d;-Z#H$i$s7AT&u_<*)}lf5wxRS`YqaXy+7y@r zCQc`FifDG{X|iP|gORf1I_x1<`#W=y&kM$}!R(MuXWMjI`~IOjj927-vFIhu7~40D zfne^@gFF=ylfVvT2?Z>Ets+%_7#k+3#qHoQeX4@rhC&}bgg z$%yfr)Bdhj>kXQ_;IOWVNNdnXmC@90t#ItIX7?VcfOr}$^Zq@W^SWA#f=7Jbq-uMu zCIzj{mh9J(L(Q1i@;S%1+VgTvzLpcOb-m-L*mSsobw;mS^Qtj@ zFIZkH{dHpox)a#Rd-O4EhUD7N=yZj!_ACi4Z(c5BzA@M+`3ph(f?gTyq9FS{qdf?> zb~bn&J+OTH?p_IDV&8uZhLPuZ!QJu^96k#A?J~YY3qK@$Fb|)l$2HfYoe~u$Nw^y5 z5p2P8yuK{aJ{LXrLp`a6G;7Jl# zi%pzdFhI#G7SJtW3(t?_b-iB>+{2x z7KZ-u`Qdl8g_EBjP#nSkIPv?k9NO38OU0Bo(j*r~VEmQVgRLH4Xx^*xc&1v|v4_}c zXUjoL_P$+JzjU#jj=8!OrWM7Bq|h*to>trc(`7ID>8Hw+?4^Pv3YYeuQbA?Ax><~J zY|p}Qb*EDl$DZ-v2|b&M#l?B|^(^)GFC+$s9d9;H$GK9-Ra4~i19H{sB>%qH5CoDX zR|2iq>llVKiN@y#3@2|Dlf?tflovXVUFvw~Z&m^DJ?B#VpjRyBjb}OI#cLm4y_vdyp@ZmG|S@P41zej$6Yah$%C&w`c>3c!WKoy zuNaBIBZ=cEiVzr{k7oTVnTIh(euZ&d$Kl66&i(FEAU~I!hw$ZyEw2s2)5+H5ILK5N z!vN07Bk%M?{u1IRuJb$;C{`JYOM!WkMP9}nKT9LW2cO7Pk{ExYIpu=F_&Cm?>Y!_Kaix2U} zfS)l0`SknuIULf&@W0QI@ADOm%P9ChH(ec0dlKZK9M-@60flDvL@{rou?!P17KmD7Z{0)W4>obP@o0I(QkNXn&`{Ef#uq>WW^5Yk@iDl7Dz);4K ze|R8!$txeactQPQ;h&vfOUc-NHL1QGnZ)JDd^^nMp6~y8LH55B%GV|n|I!H~@cc@) z=-B?&PCQc=?2Y|D&lwiHeANvYPO7U*9V8j!C;FV?LWZ|J)W)6!5{_6eF(~6N-9eL$We}NT+ z_oSkcp51&2&g!|cw)X#XHu~qUUL4a}y!O51?{I${M&Cc>%kW>K(C~sEUcCT5jP$;4 z*gg}5r^#@x`>|cSD-C7w{O7GMJ`d+VbbYa7>(-CuAQXK&7hFk)&5P-96v8i04{T)x zxe_PP>&{Ln+4+PdzBb4|ULBmH5sqd1&laID6u)3pxyko2hr3!!<~bmW&YJUF69*56 zeH5HlS)ToDM>qFp#wXGCgBiL^v%2TsXdd$3Stcy*$KnLP6(%29=^veyupiD!t$#vR zx@h!~l|Hi4M^^fm%1ZbTXC)N*XQZWaq3$CSePp7)ZYH|5=7iO;SI^{p!LplBAJ33n zzkvIAh~(oTlJ`DDf)x*u;D7EjBp06v`-tZ^E`2`Y`6Hg+8_#GF&%~b_&tFLNEBO(^ zpWeJq_z2;T5dOjEI^P|_)eF1w!EVnwjhypeUu23`kC`8%pc(|_uLT!jl$qpYv0J}* z&@Z_=@)f=0>w09m-uBGfk3VPq=_f6qVtpzg1BOw6$TJjB+P(cw>vm?o83=0wBeg== zZMQsqr7o|#`0_UJSf z7^f++U~QwYd>1?lKV7pith!aw}`E5Z$iP+>XlYOt&M? z?TYdW{phChnd??6uh8A9WVh!s-{iX$%8c^%7U8W_Uf{f)Gv3PD?7X9r=ek(os4*uH@`_dT)uF8Nbl=qO}Udnun z1y?995#i2haHTKZ$%MO)3Rfu4*>L};+R zNv=>kjnk$s&ytzxPxkC9CaW13H70P>dGEn;nh`Hb)|>g zL98p38Mp2&W?gxGbb(xVPOU35!=3E9`{;Fr@|g=|-)+7-%s*mmVLthF1yMYk)@M;91( z=X|?z#&Rd+?mo_4p**MET_W9;*RXH!?lRV0IZwWWcvl{!3is|B^RB$+xQtt}o zJ?y(ec_iT7qTiKy{t5%H%D*e4;|>a58F9pF_7(@PP+p?pos;m&40b0E?>-`4p*-i} zU1H)D%D2dP85OTk-owT#&j=Ml-ZeU2p}fV&JM!@g$Qn?x_ z@OEdftd1*&<;ux%RZ!;x9^FATyqavc_Qk5+G;2+HrQh?d=e?n~TugUhB>O^tHue1( zTdZ=Ho(!*55eeC-o$l7arR=JV2NVn14p;yh0Rsn={t1|7cI6}j4$1i2Dd3e%G66jn zgemQVo(YaKe`wezKnfT-TMXQb%$OM?LMKI*jMNl{04?Xm0Wm$>Ud!P*@TKy2QSl5?28fF9M7n?|F+x2$yW{uznZS&T z_=e0&5L7$?f|fAn;Zdw&AUx(PawL zi_CD~1J>?~$(1i&~< z--BI(^1GQ!IjK$dl1s#;f)jP-=(&{=cuyOx37rIoM{9V?KyADC=F=N{~!9u<~<$>XN{+I`e=7*z^J%&l* z#D$}gao|+l-&DM{3R0||cy0yB#aqv>zN%szuOJuAaJ7!?I38v>dRd8wGq*Cs^*%%F z+E&ixjc+J3Rl&h-E)EzR$!9On+n9ui%SS>thI1 z4TLbr(>-i=F`>DB=zTp-*!=k1->g**w#>uq)xocxwsJA_sV$s_++TWBqCc;<8G32x zZ?bbAJpR;R^x6YXn{c9U^W3}i9eL1ymqB;bewThEyiYIl+&g*zPoGJA-+_hP$ z!6cvvCZMPt{oU_kFcVERtvb8+?z2x?5h=?5Sp(~N9u^Dy)z|;rt^9|r9mQT4{Q5Kc zg#7$q2WDt_f%EInip+g!{`{Z6efs*pm?14|BlcnKdvWqGQm8&pKm7cqRs-v`Z`W#! z%shyH%ZpN)M{y(KIxh2$qZMSFs_ZFaBWA)z7Grg0u7$5#QGUl zQfBb{wg#;znCVEE*Nz7)RQ)yX0A6YfLHE2w=zCV?Q5vZ16GwY>;jD?XHx0tGs;t-j;d#g8o?b z#Xi@~{d2Zb_p=GPm`T(`pQyM#A%onHSL3zS_P2&dt&KB3%zz9d55bwpnm2sf3tc~T@@_Ix7j%#jUsE#=3e+`%nC~D9L zKrjR6XvbB2mKxBi29!Jo%sGjnzBYY5CP2IuN4-)076|LvzLcX~g>MU}8E93z^1vv7 zcEAWwB4~@i2J`^*psNFh2SN%OnQAOjJ-{||I~6)H;0U0lR0!G#FdYg9ofM{Bx()ak zrczo3-4FyRy#&1_h#Wc}2hcac7BCbTXkec*A`ldSrHliH3aF{leYU{##1Y&?dJ9AODY!I zBrsWOFLuVjT2h4AS%W!GJvuxCoRsDOZvjuE`zcR=B}->^QrcC3kI=KUy8}T;yP!7& zYljYq&9XYVGc^o~8VjKDb%L6f?n3$EoSf$zn))dE&6rZvyM+&LF#_oVDQ$rSx zg8Z1-Q6j>1fD%!1$VsBAQ4^E1(n*_|Y24bGpp>a_s5tehxz?r}Z9;iwJF^o~c#!;M zTX$v+DoopfsBftlj-+TTsIAhWQgcS__@Zf3`VrBBOYS5EyUJzaJe>1s(EVfT;*K0S|n ztQZFL0_mw>{Y-~!Zv~z=nH?P~Jsd;_I*t3h6O%N`_H}UsXwvD&V9V2wZ2wVAC58?M zV!AV#j*_1@7tTIl24H}RhXW%bLf1h7qlSV7upy%_g*3%&X6_8xl-MxK>15q1Ok8C#~YkK1-z(LC4Nwgp9dbeB$BQD*vXHEtW`3?GMV+Y5DNyvEyWLf?&} zxV;mN%x<_#7HuLlVt1=|0B`o(oz&^XX1F^HIwQsExM-&{1=ebeGaWm%IhV}q>#RcC zr|OTL&2rA}nvWf9Irpi@TIVrzIEkY8cIvEXhUG`V?a&<0PnA4wL#Z?5=dst_cU3;* zy=dRJ_%vJ$X<@~a;v)4%X_sm)Wog{(_TnYxDY>6@Wyja)$+T;lervAUZWj-O=l$I50VEvl-CeK8hnXEpFWWuYS?l|i)w94e@Ith=a-LWFXw*yjNbr(% zk3=FwO1VC>j16z^<>wW_Oc)xa`co}=-s5iH)iyF+r~8q)X?V?L9}Txlsn+S&h*XfN zc+eBm%nm!S(m)A!&Z1o(%=vw9(OnGI@g8Lc!T`|@^TUuB)L5i<82dt(Krlv;^SD(I z)ICgTVUA$JVYU~Z39K%gO92CTz|5yZN+cA<8w>{yNy$DvoHohKZp#GZaG}*L=6OHd zG#h<6iH7yCQD@R%)K;2n=CBw^d`putcVvS{o*|vgZuATu38v|eFt!#hYMw|7V8+rb zacEIJg?kqD9o1O!sTg$WMCs$=VV(Q+Tp58e5ZEyy^~M7dy0fZ|XKM~$YTkHdwVx3q z9Us(=jm&`r6S;(V<2>&QR=1=03rY98O*X`(0PXFvfI)@+YPt1fdOa|g`?@T41!;-N zvb7uL;!p=4xjURNNuKw zzBE#WMD1}Zs+!#igU(F#*`Ksfi&e?)l;E80q=RaEbg54!et!M1;ld8w)YpE5P7u}b z)vZ5eRMYhjlc{7`Hivho?%FoEdTW}t=9>DL&wDhWIx0p#YonbjV{K2HtDZFJnc9|G zh}dwdJtj-BEh)31?~f)EX=Yoid>kgaG~2krXkyE=M?V~4-b5en)*`mj^*Q$}wV&tu z){10o6X>;8tYZ6ZK7SG2L~CQD;dVDV)?ketxwYH1u}LSX8!(P3uXp~mlbXw9zYYeJ ziK2NsHysfMHH92HN@!^+O2C#`>jZo3SQD!u5bV_5*n=I}3szm*w(8^HIiH`|>A0cc zTY64&O=o&==L**frvx=$bsy89xtJ5<8mUnor{__0$VHBc<>%W0-;p)ay*J~do_C=8ezm7b%pedh)m6ZUzsfuT?SUq7Q6LLu*2paS*wTbm4o%T zPH5G9N$(ET6M#_%su!mUf@61I$FBr!LvqL(aZPRJ(`-ko@UXlC7qL(ydY~L^j zg1JWz@>EDn0y{*;NN7G1`Fa5ph?|6MB1S_RwfYo-$nq{3chSLCm6Pch^`{d|uuSxk z(PqLT#3qM)+?&=K!?s()5mFB4Ba0QV3GN>3Flnywdd(3wbc;}A_b}|rM6z9IkE1BF zBRivIZ8%{`2VeOcIH#@$;b7x6>x!{PhHIm~nMUSt+i37c!rGYG@D}+zBpJ3qqj^Xt zBgSt|`@34LH)!sH!@4FStwA4EMpL`B!m-Di-Fu`0;(4^p`}b(h>uN0u9`SjTs_nI! z6tp&5vR_LMHDg}O=Nw;aFUvLgT28#yO}ny~Q?3xTY~9w87K&QUmQ}}Xyk)n@Ic8%h zT8F#LhK(3T3$;%coodHLt+U0Y$j;Zc7(IEZ=~xejpv^A`{sko-koqrp^B1J~@QA=y zb*<{9kT5#8*Yx1?bo0M?rvHD=EjZ7&<^B3imHH+L&$aDHU%O0bZdP`XoUg%oL1H_0 z^czZitsS?Ib{o&K<9=u^ZR@-qVfdz&T&;SsXZUZLrLoevo?q#XO@|v;XY{r;ZyMA0 zg5|Z+-!^8TJAs{ik3NRYkX#!YovskpUL>LA&C7+%cLp0Je<6rp&?|#o6l8zTXb-}z zoef?`4=mrlyH`S(*!LfUVdObpaJPH}hmV4OyNvJ9!Vd`_%)=Myam}@8r$mKG60Qb% z1Y7VDudhqAFGbJ&P*191`Lc&VPNVg8dAF#c6Gq-440Ip1+Y9nhyj77ITA9;dsE7i| z!RmB8VGJe1$9M)D4~ ztI79YsO0xLiali^h1DAf)@&lp`sas63;W}pN;B^p+u2PD8#+0RqyKipKlU8=PaS_b zT>lxxzn(R-QpdJ#4FiAwe!{qvi7(u%0cPTD?Y_RZBR;U~UFB4NJbfV5Gs)2mo+N>_ z*u=>N1C+dC0o@X|@a!nvu87jjWp*zsu<~=TXI5`49eYwrGgbV$|JCV#|I$Q>&ktW( zc>Ryh55J?WI{Enl#c}+P6TdIZp?y8RR7`mzO>$ub#!s{!Z1wm;^WK!lGu6V5J;Y8s zTMk;X_wB0swTtC+%+;+httd_;g@%drwA%ikE_=yOKUJn=uN5RwxU~P23M$*x&0>^e zdlrVPJDs99_KXKl=-EsxF3!7eXQ{t`Au%}Yc(ZXj&Xq#0nj)VckgHZF`S;a^AdoD% z5@@|%$1tQxG(JCIIC-m>EFNH{ywGv%QpZDovkHLkIhW!Gy=o!BS$uxpd9i`h4*xg2 z{qEY=d)uut2;%G>cg6fQ55D#2H&I&&TNELm zFcN`B630;#Auv22&H59WhcQMz!8oqt@Z%rnes?L5UrNqH_;SRS*9PI~Wb1MqWU7l{ z0O#b9cX}d!4e=A#c^L{6s|>}Zz&yz!*Dg9n6NDMm~MYyB1@_!#8t| zJfwEE`|rrNPygX3eJ)eRWrW%kJa9KX65={QzI`bhc(`{UjD-vq|eCHFrci671ZC;`vf z$k{pl-!%siA35M72mG~i0Qwim0bfuQ&IA69H> z7lpBRvPA#7)POt@twz1xz;SqxaRkTC)*i~0=CD}fuihd(tr~gLl{X&s7g$sHo@_MI zv->Z>Sv^;l*ZwCbq<{VT#WAzRYu`)$4)@1l^zBo=68|L%4KMiN1q|TBVDIaO?K4q$ znh)o?AKSINGEo-Mf8GM)%W(cfml!*?Zv9{ux+51{%ZROu8F3WCFHetbWfi#+DA4WB zPAb_sg(RLD`P!POB_W zfVQKX`!nN{aQnd&UFKQc^KUc{`QDi(Eba#bg}4`oAJCmFsmMspumW{e@G}t+gktj=gy{=L?qIjQV(%he4Fv?7F!q}}}KIoU+9eF}8`MMsN zuD3n&_T$f5fBH!as92v0$bexKAo2_aly+~w)4H9RZwA8Jz(}o7cH1paU#SbLBh0#O zZm(hP+FGf5l^!Do4kQ5D?Lry$%nnTrW*tckRcXAjCc79FmpwX71;%NL?6_+dO4%0} z14C0-i*E$ugQ}2nMj)E9q%2~s*ucATp)}jvVx~gdCESCn2dmvmj*4QRwk&&u?OYQV zx&s=d8AoP76FX^Uh4#i7S-%klo65-r&U@%Pp065aW)S_9}<&Qr|C-Rj%AMrd(O( z4YJ&kDp!vC9c;O>%#tv7i!N6vuQBGTe7UmBJ1BF7GGooX$C)e3yg-{fC(RYgdwFyB z5$6i!Id|?7bFNUnN1n^5bA|FA_FP$Jg+O2`(k9>!gH4QuU&?@{i`^U(#?-8tv3oUzWRly{AiS150>@{XLmLU|7@uk@vonRknqS17Mh^Qy$WGK1a0%`49`lf&#i za$b3ba)FLG4(K2NLik$h&JiQGbLMJYcF`3FV9@+l9b174$;&Mj8v{h3cTIfE34y*VYza0 zTou&$fJb*w4X-BKt$neoH_cj8Ug`II>t%1~Ef>=r7|FiSpG|###ulrbr6)UrGEmZnO!-FfI~74cM5nVlT1L51z}42pl5>P%pV%| z36KJY&K3jrA~R;jh|o!qB_lP3AwbKyH=~4tBBDB@HU$HqTV|RHj)-*`EfoR>a~WMb zy*8vPSB=}N*RaAf`1RM9W$)Kz;e6@XxVX%GX_48vTN&MNqQnUG=;4Yn~L)?zO%7O8m_&&ZO&c)5~S`nS}AvzVPI!5b0Yx8VfsDzB`Cj}y_6H% zWG}fyUMhG|XO5m*DS`LAv8%U_Z#GE%o}5sUEY;A1^QQfI4=Q)_uAyC}l^!Me@yghn z1>dwF&fS4G&5g5o&;!%{PFp3m*&y+vli_?F%;M*+USNgkb*3i0i6YqQd{|zYewTm! zSUfNgozNd&9&JEAKQxfyk%nfzefG1~a`aEzQb|TH`^Ovq6?*zc01uF%zqfnhS(PAu zjR@pIe@c_T%erw_|4Vln+s+9a^7Ro9jA-W1c#v2lI~0FfW@{1 zTk6{*hPy7bck2)a5tLUo7l)yu7dN`^CHtyL(Qo86ZC2#jV=E_(eLW&YwyMN>d3^sL zzPtV(hGqXz7#BwH40vCo-DKtGM=blf@qH#