UDX4(KOb{Nq2tv@M?Z&H%vuLom0TMKd) zP_{ERFq4bF<Io}a#%f4-do9&Oeg-8zlZ+4-y|^|ep2_Ega}j`rgG_5AbA{PUOjr-ywt|D471 z{A~VtKL2zfX Ao=bz$LmKE=4puoKm0r`Vr0$k&xU;<^vRwhO(PdNC? z8a!{MX|R^TvsRj;RML0>lqP*AH1PV* ^LMHK8*IyyJEJq*<5tuC7KxGnyt{ z1CUUZQY@>6(=ST2EvA^)BpO(8W Hr+9A;&)lsIOd`TjOHgddSI}gX<5-wY5d7 zmdiEtUGSyIu{(y}%gF>zJh9gJ*q1v=(vvE3=1y>22(r~?5K6<0{JV?T zQ)hpEy~SSN$t={uZ+?A35IF8+!l%Kj6N16h<$?>i2{A!jt*XU7;d#ylX#cTSc%EqV z!pKKF#Z)2qM>xDtc3#L^JjIo3Ygsq)Us*TEZ9Gp@YhR!)5vX5}HQXK{V4_4$<9VW> z9LMvtUJNQ81o9$JQFRYpZN+VMY$oheUci;3AoeUT;mO)T4(0_s`<=+WJjrzv$Z8Fv zDe@~XB&)TJ9yF0-d0`g!#$s@ZM8R&)jV{R1Jj 5&d5LIQt}QciI8TvPUw4BAayKub+Tj9uo2SS()ebwDCkb8esup>g=ZM}sgIvz@ zTs_Gk$MY1?E~<3LLr&;LRIl41r}Ux>Os7K*>M62Xh`6B +&R^Jf9dmYaBN`m|A!qdz2h?K7Nj*hSIx*y_ zo?>W)7;;!oQM5J;yQ!x*%E%KrsC$fqGJUZY2ZS#=!pdUkvpD2=?m>IGPu5m77sH0| zGWVgNRJmw3doUtEuH+tYa+i6$uSR9kg8arwH0;^GgX&2TzTzI^F82Ds&T}&wpUOpt zA}5|$Jm1bIAzSZ!!~@J{DckuRWBp=&I-juo&w<2$(IbcOTs7~MlVf_i>E%qu1UW}^ zI%|F$V43=r{HQ<^eO)#`P|)1o#uGb@XQmN;_(-x<2%^)ddTKe1Ya9ZW3RCX~AWEEd zB-yij!2+(QqD~xygj`kuoj4sKbC|W!iE|Q?X;jmR6O)kU>!}k5ClP60^9v$ueV!KU zx)UcWVHT`TJ8|HW&p|J$6X!2n7J+s(aTb%~n*x-|8L0 zqy*Dc)gn=I3j4&FQb^OAmMZ~ff4#nPu2j0>4XIQ7C(fI4IhdtMseGY5F**`RoK2Nx z6`T(w&aHC!g@*-+v#hd=JdIA`l&dr^t>H x4|$;UsTNSw|U H^kW5DwKjD|LGFqp|JI3r1% z5td}*P9G9ShGqHKlZeCtVkV>TC?#>8Sd`EFWhV=Fe8`eGaLnWsp133q9}Dwwr?n>w zIGn{K4kdGJ?_efzJXw&7H>W3#DvL7G6MEvbGLuVqev>%1EX~J1Lp@oV } z@R%oY%2|{T%o~a0&ayn +x;Z&L}N}&)5kA;Q*Fe) zYqnxYdq(j*>(ZE4x%(vlw>b3E;~$>pGEr_&-TilUra7DQJzINzHUHyc^FROO`kj>f zVlNvXTjFTr x1KS zirjD_Le>)}z?V4VM1-tAj*l;N$?++@_Et%pFd_6`siP$yJ$w9=wYBH;Q`X9}-%sMe z$R`-rpTyY^LMOd)eDoAM0F|}z6#D>`HT4v@0hP7&6nFxawfGb`1C_PA?+=t~dF&FD zZhH1mHgRs_@#dr0#5s+Jx4uDX5eVFa(#<|^YLJIey5Z%5P*%|VZ2U0DSt4=#qDaoO zDBaq;b5Xj*6aGc%hUZ+2(v8m@wI nNaeR zbaSSdQ0gaW##JdTRSeg9D=m{U NF>Pwu`iOJ_!KMUkVMj~msF9w#Ew#FQ9-^^Y59oVrPA^c zdrYOpAat5axBZ0urqZoGk*-t3RZf>(H*DcrxDE$MB@P23@al(nY*b`PEKf1i#dGwp zs?3)s_Ro5*-J}*BVbEE|D(oE_jg{dyHXGfBC(yRoq3=Y &T{QsMm5RTo$7jw|AJ^s U-D-QRRO*n*de1d;}n)vAKuaC!14(e9=_ zk_d)zy{~R3Ly5%#Qy}oF#>SF>u{u_1EC3j{H4;W%5r^Tss(&Y@dm-R {pB0Y(?F9cS?J)*O67nse`Lum$hLsyKD8$!~%nr zO0~FnF8=8j738-#V+j+8I<5$kl)1~VfJ0uyO7rC0E(Wd0js-Wl~l8!y&rPIo5;DY~7U@Wl4UKi!Sj?j&Dsd_NwlogVFxVFgL) zVN(;m3t3o@O#j{%WMjb$D$yN&MN+}t-d7|e(HMyAE=bZbz6_2C*j_&BmG$Prfi5n? zeSUnMQR-$?dov6n9To;l?%)EM@U2}teW(s~^SE?oo|&s#`BQGG@8pLK7sm;XS&3~F zL%0;fgs=Kwz#qi4*~_J)+|BOro+(ATk?T{aTO_44=bIcRW#7YN7Y+aSqZl5EX?2Ff zFE`D+df{v&U(I%!uiiYLpE}FQSFiayB@>MTzuc?>MNPB^!fI_H-zJFgM>W)Hytx(= z^oB9fHi-NuZNSGcrfKt0E(snIO{4JYo6!h?G5TB4l!1Zx8`0E(N#@(ogb^a$H(`6} z58WX2d<{2v1h?4edkdV+@cDCAD5xyFCa}qbh!ird76Xe6nZZo_DEEw8;jT|ZpD#1s z*6Q}p#@zj+KXtyyvO1rCx=wTUR=ECiHutr&8BonO(QmgiVD5ouXLH4#&9pOAy+IM@ z`zPcRIk=HmAEg+7Lv@%!|AqP)jTZJ6rnr-_@V}w{#X|o=-He9r%u{ Yy5z<;6j7!984M$nguGx*0|P`8N(Xm^{6xjki;zn5uABW^oM7AwGa`togD zHnrmXP&ZPxs4Kq~ZgryER#h`y4;xg@7`7f@&{W!mxHH7ijT}CQYQ#6CAmGrA<88IY zinbWpnKfxF|1nMvnX%}TsBbp9Y6d)3lf7vv7WNo=UkwMj6~n4CrP>{{ceQC)7#ivN zag;*xXWeeQdy@@ns(=QkLIeplT0l~VLIevB{{Odl40Xc1%gz5e7nTL$@0UO0Izd8t zB^3#GM&NN@NTUCSIz$rw7wQ)z+?apIy@SX8g*pd`og&lkxSJG^{z7vDPqJp;@dS}$ z{DtR;9EI4a2b9fmxRV3GgtzAb>~^RQ;#;TB{_v(ez{ZE6$(Ge%t(d`E?*NKVE0b+Y zpH*VLvLszTZkm7EP;gSGFC7R}$@7Ci2ultCAvD$bX(ZY4X(-w0Lnz _E=FgJ@$13dMnF zWQY7Q|Gt4;0@2bA8^{FF&JGxwpAbzvBlUXJn6ne@93!>fpJ?kCh&NsY2yeK2&{+RN z*ab7y^&AlQ0=%D*c+mX)_nkLf>GN|3h9>6^3{TA=Jer(GcsMziU^qXYFj#UC9kiENj`5Z)cX`Nfts+0g2VAx7I+^X+J6Ym1<0 `x*9B$YJLMX#r(J>J8ua3E;d5uIgq_JgkCq*<_DpE zkBtxiN#Q(9h>o8g&f))8|De7^n{k?W5OIH^!9gI1xND^-U_~8wsuW%sP{$oAMbNg> zasNs&wApmr%~A}on2!4zjlU-sfDzUYiV$}>dlJq$mB-U$i1*@pGwm9M@n)Jbh}z9G zAMZDgCdkmf6+4QeDUv0a;1f*a g-zSPdk;ZF>PZWqEO)@81C=Lb3id;NVAPSD>`*xy86ls$6w?e@vIGXRxiK0=Y zN#Mqb!cn9t*5d}nq~K_g<0gtpk>P5sFKZ<51x#G93F|C{_i_i<~o2tcn7n=kbN2 zRus^Uvlj|v!BGQ0Occf<$#PDND2PRdW}O#N7z>UUx?G|#7HOI*CJJSd v{R8o9zNEFzDBZY2|D6&PC=Jf^?;v!2neE~(f z;E18eBZ_yCrm3*erGhg1IHH&rX$l)IJES46MiliTiT?|Sy9n{fj}b+;;P5K=T3QSu z$3+ygf ~%m|YOwt@8x zw6wwOY?d->M$cx==<|w h9Zl1#6VUxajE&?4 SN(-)-k*gzy4YSM$#|^Uq)ApKt$}TIR5@-crLwG2p~6 zVr=$e^FskRX^RN8H!yHgMNvpybBaLgno|rI1mcBAgpa%v<3&gkt<0?BwMWF*bVDl! zqk4 |?uRW>rs*`+T!fn&bF>@#uTtRptf@51)IC~k%`ldh8lNXO zDSD0cUHtth*Gv2aPH=0`P+!{|2(xL+y{sD1ZY$qyX8Uu7LYwovkx?tE567k%H-iv- zT{z~pdi>blRZYFs(-T(#K0$x9*rw;%fRUU ;(l zG3`6KXUp^4;yA|w@7-A-aw6v_*U`9}lRS=S2jH9}&U|kq&dFj#(nE4iDjf+{lKMR< z!5p^1GS#dXf9876zJpl5@nUEw8~J1QeKhk|mZWDB*hwTL4})#w^aT_$f=r5_RvWyq z8G^rp;3dm|<0S+yRW!khFfUk^2exNm!MoeZnU-5ccyMpck!@*z)j`;wIy_Y6yY3;S zor$rlwVwO|#g@ZjkE5{9)Q(V )KuBcq+7!PH^oYjty;u8WbUk8=x@gAfH@99FT5!#B(2ltMEl1TgO0?A7ZGxRqWy( zRkm9aQ;P~+|8uYbPnq@nHPtH5&od1qoM!C&^)1zGVvbQD&b`K5y7)1lwyLxaU!T-a zjq9OYD3_)pT(%=H^jQt0+E@d@!(lC^dh@y4*0(hrEKw~SEWc;c^}ZXX&5=-O#hiIX zhn6-ZR7x*e*2F+7=4d$+1C^=?EnX0cSh2*Ipex`dOAK$12RXpZ)r3`8F{5iQ8#%%e z3M_<-x*67F#f%Bm)Py37#9emnR>*zUmQZHJ1lxbHD$61_`r61VF>d6_RhyTx%{J@Y z*ftBbZEUld`k!SRnKU{moULAr7e>>=w$mi1imC2lN;Ia6XuJw{OXu^zaqgm@oV}Qb zo)`0Qa=w{=&LdVOGNVW^r|(52<>FmJWsVr`G|!wZljBNw;vlQSdj%z{2oF>0RXwUM zd!ZbwD1k+^XiZ27Z@{sa)Lb!V_=untYVIgjD{3e~RxF77CWbqG2xXR&lpyOJ%W)0A zRWwiHy#BLX?-Ydoz-?}LtAqTp+Sb*sYpZ6YBjAMKMvmJJZeNU ca8P*IEPma zKIn_v(FL=zcl`Z)JI~5zeEh$E=COBJ$dY4khH+a@qaW@E?+_TGGkA= f_4-f#W$-$+lwSgSyUCY_{=ajmJ~Gj%u&~s6tsD? z) v&lmu|iyf#^x72A3X_dNhZro>YUej_wS(WziEZV@u1!H;f z6*&w?hbrvNB|^A+dDuBey)vbB&pg4LqE&18PJ81GRzu50r(BaykJn;0@AjgtJl}3| zUCPTL6Y+#XdiP ;2z1AGTVlj}w)84`o42Lq>&YtdKCirq)v!EG(n!QFSUfjAmqU>&Ir@S8(u7=ZGN zIWoj?CmEU?h`w|;T7$@yY6utE!i5fgemi>@ER4Uvebx{f3^a9r)7j-6^GP9PD|drn z4$)5P-hhe`W|HeWp~S)*5N@k+(gXB+qpXevnt{(t+?)OJu(mfIp}8ebALQub=<&3} z(5-!b`0jWf%8`RN$5T^4)}zGds;zcJ43Pjj2ssju!fY+#i7J4OebrvdVU>va6XGUW zP`G(stwynQ%g?G0I&|s>2qfbxI*@qMU~RJWA&UPUzXig vpe@ ziAEWZJ8;4S6Jd8P2-=c*_`9y&=$0m~H;FgwKOu}&l%+AoH#do(%1?mx#7|mj=4rH* zW{M}r8`3)>!=W7{XcBpA5fAk$0ClMhNtX(BGnQpP9(A=8L%#%@Vk#2+Qjy7*2aC@M zSCF+ms^!*FSq2l~Da)h6JY`9|gr!&s8B5XVs83lMwS^~0IU~(Hg)`Hnn4aY&8tgf^ zF})-f5%Vr6GPgN r5=M1n{QA5~^YQs_AsoAz7RO%+((Tq0e}&MHvz`52V#8NTf7kg8cy_MIPe)92}LY zZv`_%l!+;~U50l>!19k!9*zZc~1kteC2H2vCRK5sqCk?qgdSBvbQ%{KMMIFcm++ z&dC&vt9b{pCF2^v0bS9M655Aa`%YpTB>6v_F=eW&8Q^L(KeVcWR?H!=h9Mb (QX4IS!T2Al~P8~O6gp0Mzs3l{(oFIB)QDa~#JMBr26`r%g*)wn@K3pr9 zXS+xAtqL$JZ7EHp!hn|0sd${t+uOPB&zwoyi|5|Y`ON+8Y_Ln%L!*~?_b|!ARqaGx zNX*l=^|U7}+<1bz{Od!t70%KEH6YJ@sHcF68kMEq!4-Jx#@*M3x+TwKjj0hQbT)kZ zHedaL*{8iEn^G$Q(H>1O0thO6qwCOeOJs9jPn$i8ku;0Uyrw*RdH&Ouir!lTUx}}` zw^-CzFb)MzV_~&|h02G5>5#HGMe-A%`lg }D z+*IqJGy851xAUa<@)o_(Fhg7UxYlBjQ4_`$7sDoHB~2B!$X4+G#6MJhnDxk1trKR{ z0q#<7_>FB!3i&G&@hkv2d!o3%lc@RdlSR6SRdHvhVeTy5O ljY(Tv@)pp5fL I-XVxZA1g$chAKc*+B(J8^2*T#zIl01AH_|p ^32dxOmTnzPrlgWG%}_x$aAzrovT{^?HLU;Q%Q zh49w ds|T^tP#NzDm=VmD84Ej zkG3I8IXyScWz`e+FcR2Loi-$-yYojlNPaJOm1=!XFX|9Z<*T0P;X@gq$bmx+V()#u zH2t 7BheB{TOi p+`iYwgDq4G1#$(92E&XxH5=#N8P5vFhDtd+h}Em zZ)l&B3W9EGFeem-nX~Lq&=~9fm?2sfi{jGxx#Ptx!@#c5c(qGYo#quUcWHt?O2~ }=f_(@~BF^eG*XDcW;;EI4xh9{nF8f@g&y@J !CA7)*rjBtg_ zwg29)uw3f{IQC7?HNWMUNOZY|@2hdV?}n|8NlA1Wbk#{ZhuMfYCk-Lb)(N`lBu&%D zi8;x@9K9~d$wlAD-2^!A{C~||%Z}SH4E&XTLi6aNKhVPhEwCu|kn~dIVQ&Lu;~-9o ze10v7wrI}KO3_RAB&>%@EK*V^kwdXsC~{H|(0VHwh7lF@l`Q0Zsp`W$emN*=;$t=A zV9`JZDe*>2_F!X-pq@!VppP(uf+iprenXA-LnvzE%b=x0g%ejehq{*xVh~A;dnF?n z!PCWe$pYG2-CF<@I`OeeKTz+)ml7&Ka@rm)4!)e~=CbP=C*?RUmQxOp5%WmH;JvI| zmD;0w4D^T`DSJ|fZ>I>pX5&&Rv*mx_SWb >juYT_eiBBIj_2ng!#B?PxWok% z!DI8*5MNI{9q}T0`g-5oQy^8ZeNRg<(-@sNAh{!oM@NoQ;}MTda4I|neKWzdx2;f7 zc}nRK)@}1tqw#W9? ml2%7u8EP{??P;%P$R zTH-EglwD;#wb(JnQ1#bDkEN ov$hfAtOy+O_O-zguZ4uOH7H^5#R$+iT=xzH8r&c&`#e}HYnHNXmW$boCr9ssZX ze_js1o9ha9y@JFVw?8g%lmUTxJq2ImMmPok!4d-$*^muN{Kwx;L&sBLj2d;jHkSH` zBUPo(^!tUH5y7T)n;KF=?{5x4gu*yfP1KkUid*bC99N#3V~p~khIAk#W7K{UuuWuT z6*)oApv*=l%zoTvEI5%>5PONYd8diEATR`x7{#huGw3mw$VVYn=Dt>K`}%8xra;l( znoAYY)))*rR*)OIwzj~)L(dq^>t*G3f5l;WERS}~22DLP%>lq>gMQ9uKtx=fh~=2M zJnUzRv`*1 RqSz2KQVVOwTybmQ{62$)&3coQyd8i8%!p2e?NW*5#0ODu{l-UVD8_lplA1C z?;!u&rZV-R_W9r7;{ncN64&PZ2)vQ%haKh*P)h>@3IG5I2mk;8K>+&k2{feu008>{ z000vJ002R5WO8q5WKCgiX=Y_}bS`*pY-Nwj3WG2ZMfZM1n7v7DH$|d;M4|g&MjK)t zWMc92n~FlAcXtnm%Zwa0x3D)RGQoGy@Cz{XW6;LW9jtk(?=bY0bjq6vDYK$`YL(Y1 z7~R1u=hzBC;|rZ4esDepCsec|A&G-Q#Y& Ju#LUdh%*@Qp%*@Qp%*@Qv zh@}xrEosEe|J?uH?%jLV_WiToW@XW7)o#|79+8!m9tzSRpg?~C5{L+r2pFSqH3Sj@ z2xt->2ng!0QA2t|I%69{XXnv$TN~{atnvIqZ{O=yJo0kOq%lbyt>@77) |djDN?TAWs>5ZiimbLm;E@Oe;Z-XYVJ|>SETOeR%VcnhmilF~ z$z$eyK&qj8FiM`U`OfwFMFHrImeDT0zw__?{Z4sKbGE 7CG6;sWY%nk(x0dpXG-%oaX3qXi3wjH=1;(v_p>~o!qoe z@SD}|IK4@-3|q`$@Lca0@A$N*)NM*W%gKr|(V-Qh^FL5cjyPEhm2rssncpf$l|mQ$ zXekYjvcZ=kVbHo~D7siTEDN=RV_FspmCN&0&V!o%pb7*HfD*R?OqOE~v|Fey8KHA@ zY1GSVwoUqA*;y2&=9!qxOxY9h)|&*^N;dQ3%0icRge*f6f75Rkp%mHGS8R<_0Av*M zGflDZ*6(B%W72c@8&y8Xi^@xGI~ejDFl1LrL}vwU@}hKgnC?Zj8!(tx$KDIugS;pv z_NR?~oi%VsyLlk?JDt1?SN-A?)j9e54bWziS{3L{rj3fDLhChOv5BROWH%UNsx(SH zyMvP6Ds nXadBT&yEMu+OW0T3{^3*Iudd3 -rNBcrSRZeX+lxW%n@H zt`t?s<>HHe#bH6Rxi1>Gq{k_xEKMM}az0t&cp++iw&ZRybSo_GS9#ze5sAe=sEv2* zLs}|14gXS6zGj9SJ;DZc#EXg}k8#~3G9_i3xI=nR3e%KTkALunj+Ix+@skO+$igQ{ z4x=P~9L>qp^@YYOw1bwMCC1!>33UXZWuaAe&M(fOJ|I&+AzwRzb^F8ZbX7XShY)1< zsv3iD@+QR151bC4j$_ {HoiG9F4rK_pgC{*D^SKCqQ&K|PgtK-~=+k+^kR-++h5 z3lb*hfUPD
J(k(T8BduMCb`dn<_``8%gxJZT^HgBp z?V^|J%1w%x*p0vmF+t~!#6PSN_{L*z3sgA>P+7B-U*QJ%2_E5dfOw`-t&`1&;-D)I zyaqQeO^`Igb$RO7ffLY8JG4{au!eJYC$OV?ZRVbCb#)cOQ6#-?%0KGYBgFgwlNG#t z3Q%tmp_gbM$D4F*pYOJd&T&vo?abObJ@e~CFw>#X0|I>O0bPAu1NDFc(Sr !wLKXy8$~Nq0_o7Sm%PnJ?)`nVhal;faS9f5fyR<@*o8o96VLH<>mmE zSUpRKK*0x%RTC_(ZF>*iZF~ngAn5?b#tHlY@3-FreW67I;Drnk05rQoeedj)32RmZ zYq|uWWdj?|ffpI?0^cTYco}=1{fBPIKfbUqzo6H?z+wHvnZJR;{J+F8-!33bfIdfl zYr*KB6{z5ogsu1oAAEvGC7d@vR>H?5oG(CDY7Y__k-XqB{&dvY2szZZcnOeO4p%9R z2mJIEnqS7t!FJCcGO3L-o*hLJn1|58wSHvK9EKx~8<$ef;8EEn@OODP_mIvV6GO+= z*tTmx>^rZkFPehT{~THi=z-|G-l7-s#LQXuK=2cj>=GBhMa>(5dqPz{16|I#8kE@? zmiZ){= {aOu?)BoJL!7fWsAtJ5vFZR}IIp2<81m?Ct)KJNTx&qnp^BS~$% zjJ=51_Z@KCJN_kmDbcMNuhI-dtb(f(oUuW?0>c{O!)^yic=rRiu Uw)M-2fu#y|mKpWK zO46mhbCfJ^( AHD02rajJ<+u{5WZMIdd5f-t&;Ye z;XEu kp6^*&FIkUOE!u|R?ys|K}us)Qjds3@Dv^2f2 z_Sl=cAa7#xhX!$pu0`BaP1#k=;Hatz$y_T>UB9DnIyGTH50ob4HWc%AJYuwY*wBXC zq75KT#;IEkC>Ky&qiWhGJj-y3qf$AY0`~*S>}!$c{k3-X)%zPCH~(4PSGU$JN@}Ls z6%&Dn3+kNeZ-ORO!||^e*1>5G+mumioLY9C-s%);SKK1Gmo>zerxKOr2l~yD!s-c@ z>N>|H@pki5^92Xl^w{l%!wQj*>ZMJalI~%o5Wh}U$4J@j!7Z^Y-bkWR4Abp;YYs=B z<*b&47A~~xl(k(*IedYB#^Kxgfx+npn+aVkU&V&Mfmr>buVm#LjLh w<$`6(US=RT@W4vkb;lx{5Bs)CG9X$(Mk?4CsTUznynn z1}ZvVz#L?^*(9HRAH *)^_Vd|9bCLl$&+!6)O(Rmoa^ !M5 zQw@b~z#`$lk=3ixI@8^dJ;W~a2-j-Xbb3jrS?f-zh^p5%Ls##2W&@?su=TBpYcH&w zuB0Km=|sxous@75M-4}v7^ID1!4;7td}4Ds-5uAOykgl*#ku2^)z0xn1`8N+SmY?P zIt&8u&)MNgf^nyjo{_&jy5YF^!AT9hZ#8)&GrX2Lg0ot7J7SZacX{8)pHD+8tDFG4 zO*zX5+zyO=o#sA46W$Ja@*w6r7Vu*hGIfC{$hVoOoM48F1M{@`c11vLP6fkC00}av zlHrJ(I;6q^?%%>2KIa86 wqpFuN)A0)v{Coyd3I!=a053oTFMxymt(K`m zL_z{2Ax|XsJBZCdC lZe`~Rmv|P3v?gM}9?~Ow zzB-x@`q(YpFa3^Zk{`Q>?wHtZo(KHbk=!Yg7qBq$`%9?tnZrw K-?feK*VpkGg^b2%X_`?>#U+*aRuQREztMtsU=Hoj&7pO zzB d-HbTg^gf*+PpnGy5E$==_PoFB^7{=!_&i^2P&JUsLJoXheeWe&%<-6l&KqR zsVEt2I44HKL#V3yV}=;1A=fLGM4Bp;Rb+*nLeZ`;+?-W>tbo-Dh|4POL9BkXS6JL< zi#bG`N BDI }ZkRLH0m)-0P K}bE(R5S2?N`HgO3EB>#r~N=_!dibaO-Gn zhKA#n!%Q~*^?VF(P_z6Z^*!E@Gz)RiFECCod08I mIOd;`A_Uq~V@t8U(^rg>h7lvvk_~Gw zM&1Fj8H7>Q?BQK|WNdY4Kd@Np%NtX$SauJ3WcMD)aUNLMbZcZs7p!6A9%8+`Rb~RQ zMiSfkMzVo>=C%^NB*{^+xUD!6g40Ik%a~-7t$PFXHGh(3Rs9_8t@}S4(|L$rOj0E( z{CA{Z6G*$gBV%8s)CnvuuB^=8y{aO`G#n@*%G>sPx^R$^noC&K4i<0V`A`(m$`EoJ z)PholL1&F&pfB1sjf{!$0Vf{^W6X#sUjgnVzf3ph&{RI#cc*7HSDvOH@bTl)5CBV2 zVR(6Tw6k)c);ZDVmW$O=vJx~UtF&lo`)_nw${V(eP 1o*J5OYZSE((K;Sa@O_^O z);v&B>~&aWPFUyjo9jEZ7B@=Rw5LVp0wq>d4xC>nj~Q>g62^`#Gg#Tqs1}j2`z+zg z2W;9wVZRHu>s_l|a|9uHx^03;@C1(dSa0eb%T}JY4+JKOFa~jJ?s@}ZkYB02@|@hN zzhD?YVoKQjgw7~4o`%V#^X&u>>*>I~YWWv*E@7>n&fw_;I%B?$$M};Z=#WdJDMXQq zC4fBewB%m}7Mk=C5}In-$jMI`f9q%t>kg9~9OCNN1f*TpH{xWS&~F70Qa@*{IlOT@ zdlhJcqX631T|qz$WokYrNI+gVN|g4eHA$07p7SP>Y%p5(tc*hF=gPkbj5vgXOrV$7XN!uU$ViC9N}C(194fC5#}oppMK z|Bi=wJ(<*^63+hZE|nzi-=R$Xn1C{h?xNmmy84Rk^$dK?*R0<0F4gn_jxe{S=UMcL z-~6H`U2twqVr*e%c>cJXC_R@lf+!5TNn>ivtu<`DtsHgWkJGq@=Km~I$R{Ur%UI=W zd(CRfxR0NSETrA_G9gfkRNx2v>d$^Fmf8A_8k~SJ<~{8(!FAKv{rL%5Kk5xMEGHM& z$BQr7r35~`Dc%{gAl@PaShqxe7}$frT~PIq%V~9^EkWJsD79|*i4)!?%rR&|`q1%6 z^yoS*Vmi2znzPH$aN}Vz4m!fwJV(y9d!lT^d}Ke{5$+RBbI}*fFS$wYr}n`@qfB7E zsnlxpi22@@e7fe=^ZW9pkevjoCC!Ku9{!>`QS35=R78P5z8@UtOjeP*6J@I|etDR% zOLbRh2e#srX5!Ob2V#QPa)3TuKxze(EaOo;;nX|=BhoYdRLf73+b8L~`I`SV(Q@pR zK?Tw8;NBI-BoeKbYR#_pfOKoPRJP=)^lg)UvEn#QbaJt7pv( 1Ew;9%2SUzXD8_2I3=5N$>A2+-vdGsxIwq@ zdwKWv_%VKnw^z=&H$2l1J-K%t-<&0I{-^1^?Qcqpo_r@OfbqF@J}ny7#;xmO5J??s z?#oQu7qXmXPKb*so|k3OV?s|RBO{MB__i`b9+q<>9SkU_Av>1a`6}N*Q$1f5k>DxG zN?SnHwbr7*MBecY^%_Q2X1xY-_ ?nVU&)MPbpO*@hFOO13H?GX6b_SQ6W2)WBbU{X^nQ6BXWiy>&@ zGL6gQ{i1%lET! kr&`56R#PEc^ *ujw(uR%%z9WXBzqAa;8}2Cr(+_tE^2;?r z%k)+FvX;yRvqX!z(_QKmNSckMvY%nnJKAj+CNj W_7S&1+Sj!FAql3uRB^y;$35cCNy*$z_c@t5NbI#(HG6>^K?2>vwqD9s&(zy~hik zQemG59%omsEK^d#uhfP2X9#n^XGzQL#-8meNv%av8Gi@;1Y5@-LvoKBX-#t0v>MKX z!VTsRHuz~evxwvfK2zOX2o9Il6-n#0+Numq*xZuPSESm|rEw;$k?9A5&3jfBh%h+d z9o5K1g7sAn2+CnR|FI;|1iSgy7V (@XUceEn^#C6gjNs-f-I6iTCzj@85OaMZf zp^qTZWP$sTIJGJp18V%SoXh?rmZv1aa}%i}JZQj1m`6(iLAMtd9`zx_k}WtxaSE11 z!A3P8h=%)<&^?Z6ld(fV*DT?1?cW|M(Vn;28@ZczD9&)gbIRF}=}2MeQ@bYdH~Me* z7@{f1DD;w|_znbR7HkHVC__h qXti?vU~!@xE0FuWrgJ`H)a9!VH$WWrMd0cG@TC>PBE3kAC7#17-%KP?(k!+ zDJ|8_Cv*{%A^hG3rRZvd%9cN*YbphgE$xE(Cf(B_q)v?mp{Lx5sm=kWR4~N>n_}ct zQ4NI*b@M}yXPKh+Ebl!xzK6oy2nFoZ8|g4w0O-bxpX4#{m%yPGVD9;i>%_05)`JlT zthH`$jhf0K0}@I?sfrCn!~Lu+Y}cAji5koPQ@@Wi5=dxVT&Yk@?~_(h>zN*QuW0ts zaYnkF#!LaWGm}mgdKG*2*bUWc6Y1fWF;|_Yb&x+r5_B%R8V|BX(MV$hgNLP~WM~!- z*7Jh!^l=t7YnVwmHkJaFU;v{|Cg`6T)Owl!BpE >NPj>CRz`s$S%KX>2AcnhGw^f&E+kQi*uM`?-%gVqAF& ~Z-dP#`@ #) ^|gQ?X)$SzS3hRN%=TNg{-Iy^C(edoOL7 zZ*E6Ke#v06?9d^`yf|+RFU)8(C>R~}&T9s%-y<=XVw^?eThIW(#-@cHNXr>TkpBDg z=Ux_qmWgF^f_@0{XmTTl(Y-R4treLvrLZL=5d3?!t?*B#eFzZj?9lJBY<{04VR2q| zK^e{12$^1c+QE 6}gCpxyv!+GUE} zC&J&??DR+eRB1anX9g?yL4*;oRryIRx760>ME1h+trAU1OKQU&8pFOGTBi`UWfzc* zS-%a5QsmzzE+JBjAQ9Tr7Dm?;I&f}P7*cj&J~+U;!XT$x=rrFpt>`=2`iNUyt |BAeML3^WcqAkCUx^luMzTuy18ZO%9W7 UZvaJ}=!QF^h|&4Op@@vg6=6W>R9yn|h-a)adJ0h#uGh*)>NHlc1}^ zEPyZ2s;$6-3g5diiAXaq*2Vie^Jzjv=Fo>-YU9d*Pz3K5ZaPw)44$YfR*P(Y*6)fr zal0Th@jQe#n+4V K2h#iH0NcW9=xVK91MM= zqDcz#>)~ZGw9&&Z#pyaBo`U}c$SbWruM{hTiQl+-xv^7;B&qWcUT2CD6^@uwH~f2#Junp$KMOV#|_szmF%KWTRj z+J)8GM+3jYiO^#8ylqN)M(>9cK+-U|Q61ENX+W^R#k-31 sB?c!{wIO>2 z$`q+ogdncIOst-l8?C??ac@Imcc#@av+W0WA4LWEWc>~q8-im3a_p7YqlTfM_cF&g zNnaLZE{ieOUu5W_)_`Yrk;-2jtaAwRS<$~?I`SEx#6{4JAzO?8!0=F_|J57NX5ag_ zKk%gct)2(Wb|adook!f4d9q0J@-cWUO*bX`wbNGH!>g%FLe4m>t>%Qg`#7*{QHrMw z?sS>XkXGyNiRb*{0A>aMh!5J1og-FvMK9zp%yk~h&bM!`Qf0}7e?jD%%kYRHC85r% zfJC^sil`MdPKWTVK?Y88Tb-m})VUw8Rf|ZY5u^7q8o;Z_=hL>+JGpvpSbkf4x(6JB z_e%q~BK|1%s6)7Yu1-I y(^*}M z(Uunv&G!+eJ>6Jq@;wFF8P6Q~t_iJr&=4A8mLkW2#;&1M(vEQ^9>8bbKCjW=_hEM( z;aR^gH$IUao+6-_=yauj qZhO`mTXHRf>HG!5DE| z0E5p;e5W&rlLEEu4D%J{Wi*KIl MO(tEp0V)22YLcV24)ag56TI8E7Id$H8he+nHzM(J?oQq<7PC2)e@} zjfU{#GD@5;ObYF=Hp0Frt>``FFv?|?RYU925F^^f$u^H >krALV zuWbMj2&4K XV(P70PP-Wn+-+ENZ^J(+t|IKd zyG?-`)LG9}{9-9Uds%fZk^VSL<<7H4>%e{!TPL`m163G#5p)B;G5KJ4Fwnh(gJ0Yh z2aW*rxJ+)*X*>5`k*woARF)5M8UeV~(H; jcNQY z<*!1v3vpfg+ue6iNRA<36PTgO3bLQKt&+T704HnDOnj1Sl6-UmENRlZt)N|HT0DR~ zVjG-OvNOab1MW+GG}kU%Sed)6?rX )L(*bByxqAGIFH^hD~LMIWyOjQ67k!5(G z2<)LIf4roA38!i8Sf4u19-wBDlY2Em!NZg?S9u45oT(K93S#1FZ&er^q|K_7KW4Hn zSX5n=H3c6M)+gHlGo~i%S;Yqb>Vth<`}d-}0>m}DvY{Yj6$@D5B4LGnt+Cew{JzrU zl=b6&D_|RpyU%s8N$lXf34G&_%10YQbW5qy6gdl|h#wp^_eWKrVzMwiIyM-uXlgbN z9GbSTaM$#O0EWr|1g^vFUBPF+ytt?A(|w)*1q&7$#sQYG;enw+SW*xo!V|PyWQ$H6 z`su>&_P;P4-ewl&6EjNCjMl~Ji5^l&lVy`7F7=V?W2*%vJwhTKHISwAt3D_ZFhXmW z4TYqJW+L12z-#9U^Yn?mFJfN659h55G{n6>iF0%jHq@TP#tZ-rLhSG?MeMMvY{p66 z!h`dT7k$)ozrVzV1uLtBbgI+%8hg6&r$@q=ZHn_?8|XIY^HP+xQ9=UjZ-sN`nA04p zX?PJGMr5&_jj{>Neje3$4LWV?zK*U6{{jZe;aT$Hl*PLIe53yK;}_;YO#??k`^?{v zqF#_kGbhR@bb~|=8=or^4<4VR8vBiW3eUis%!8PNIk>IR0($82O^Ak@>UVoyWe~S` zfmp>}zj1?nnWi;)lk<*Rw7Ct(4&C*8wSM6uH?xym1Murm$7sy1?<3avHEgRm0c+8J zm;Hcg>@LFd44!Kb9#wbbn&yjZ%%!ncC>IHyqfj<+CMsTatqI9S@8CIVV_P>_(%l6q zv==2?I#Dwy&7}OgtwwaMTQvKP=6T{3_hManRy=}5EyefHPW}D(WNDc;lDuYfv+n)e z!8~<&d0>pe78-Ybuxgt28~ iSz}qgfxMK@IP9JWiOj zMZUO+Err^qT;dr$N;6uR5 +GkbP(<{^95 %o`wUN@v)kumON?GWZi~<}fz2zW>uS8Sqvfy9(PA9C zM{DctV-xG&ya5ThwEGj@%dO-0BS@>$wv81!_W78Q>Zr_qh`+2ppN~=q?yZuj^nU@8 zol%srI(XnYr=lmUjm+)(gI;PU)9C4hdeaQ5P|ro&gegqwYJk=h@VO0K-93a%Qm8xr zL@<$qX^SdmFTx@d5lc))PTq21w7#Fv+ZKh(GczSe$7$MojWuA u;b^6zdTtY-h$%d zm}(Nys(lPV#U#tQtg$7^asye%tzlOQudw|R!ogd-(q}jsukYpJ!ScvusH=B)AgKgP zLv$oVW|BUvPR7j`19>4{OMQF QL?@7HkNlCfhq%n5PZ_nNqpU(k{bai>z9O^M5)>d6GseMHM&Bf)J7;-i zq+nnNY&+;pUo%6dt7Jl7+#gfMJzG+=Rjp6_*I>Twcn1u}D6lPCm8G }>ND# a}gL!=kcnWkuB`gKP?ftSnu+ zu7Zt%T3q(AAwzomHKV x(tz&9xlNIb1=b zxzH+0>m(txtMRI-bnIUr(k4gh0Rp3f 1zF;vNr+<#8T=AKbL$8pja$T~!BK}Ydcn_$cS$^N zLvKb =0(C 2TAE&=7Ju_(Vc{>+F) zEXPIFtaO%%VkclPb{}{{3!xo&4Fnl@8v$7d8KfBFqD$9MM)uT-E_|K}6Xx`Rr@SVK z2H3| j`A0i?!Fswv;j2c%{CSbTa h4a|Nq$axl|w!bWzw#LK)u%Th4ngeBPTJ~7QjN4@mje)>*9b`O~1m&rRM zg?jc9DSk>CbGsE;YbmpQc_Vv_^K>P43qXSC5j8KOOT(5HnZdhnH4{J{3bZ~)-nY^k z^D(mlVM%!zsR&`in}JWS8QBN%ra1CGp|_>DWXMBaMs8W)-=i2}8H};TYNZjt#nwnZ z#;AQ55(ql&rc_m6$roYV8Qq1)Z@-A!7J^GwKRrH&PsK%%A6<|(T)&mI()JOmIe z)IBjI^a^t= VvMTqF4pnx7ja7eOSF ;v+DC&b3QY3% z!X;YZw4;4!n=&1cl49zHAil1u!Imhq&kaohYb}6uYuHB|w*u_dE1TC+*lQLuv2Ba@ z9y`Tp5Eua;^@^XaFq!)st`TV^yuGh_jZ1&7jYf{*RLwT$G_Q=M)gp?(%!J|cM=b$9 zNe7#Cl-C&+cAWmbog@~6RRYj^r%qb~kVoP?A)s(XEdroKYa}}A6aq<6+L#aYx_N;W z0eHo8T OI%?u#^{BG=q$BUD<_!2s!Eh55agtMgsxc3o~38#Od(bnRX{+K z>)SKQh%%MbxW0im?jfulF*}pE;LT->McRgRDjFR*2I+U5*BE_Rwrn#Dsp^3)t5)=t z({)0b!<2GmdvHgeZ$SncNjrWpqEGMBfgMDv6%>TtYdVoes%Qh`;AyL$4NXuVfzmaZ zD{Yo5=DL*^YuLoiBG#mh3nulPTVVX%xa6aSqML1^ fkv{NwierI1nxlXzq}N(MpMXRH|WU zX2_mlN)>AZ{H1QHhsbyVN4Tu1Um_&HkzQEjbVV1&?)DKgrI+)uPfoVM5+3iH86Rb? zP%ik@Ouo7ho)g)abbf+wr$_EZy5ULTj*#G*2W&OQGql%t+V=+RY@mZa -ms{C zIS}}T2N9Yq-YmL{zv)JbLY6;|y@h5i yz4iSG7uOC^O{Vw| zXG_Pq8uyb*qyd93Cz&0kATM3P*A3pVMgE#!#$_+VvBrR+tn4o}-ib+|csg!|E<-(6 z89GzyRvGE3n?A(=3jZ>l=C1G>C+fsBckJvIzKQCFb610i3CU12s9c@}TNy7ueKwD~ z{dS&PXLxoLrkVAxan11UHm9O`(=hF*g67!ZqFm-}4&@x7+R&xmFJwI_1IsbeUa2H> z1J_1T79ve<8i*lxK#x1)h(LfY6fZ1E{!1uwa#Q?5jK{NA5I4JLl*cW3NN(uyUFMUe z2!I{!iO-YQS!rl!$*Gc;=ND&Y?GNW?H$Va(ZffF)eu}1eCH#a4jDN8zF x8J{jUi>hIY4 4GxVDdVyn|Ly@yNpp%Ut+zBC@O5lHbK>b}N@Gld;u6ucuirTrQ{ z3u20)aL7zQ_?RM!Tjg+y{7Q|q$VUuW_BL+wM|T%&wj()BK#nOCRC)CD`KLLZYd{3| zQvV_4KE0Q)2jrj@O+mv<0*w?{h`6-!DfzV8j#_`PPPFUhCg9+YxFvmA*llbHxIH5y z!8wTp0b&Z9re7k+_q|O+!YR;sNT1$RVFy5q);-*3jWqcm -qBTU>6Zj2_W*IMv@WN&(earz~&CNhwN7wKR? zPHry8r4zk2pi^qS%jm)t;){UG3i24upGOug>`4-RqaEJn9QH$1Jm2uzCS0%n(7N$= zD9C=XhC@&@I*?)m?mHe&&Bc%RMGAjRvK=c9>l+NMXC-!XbyfMezL92fX8|@t6T0q^ z6AlHvMA7GRTedf3TyE%93;$Fvk$Jj`a0jB2?Kw!}{HEM~l;ALALx4C3+kW(`$}5h; zp2l7AdiMnqg=W@x2U1>XaXl4mbfu5zm5RmPZEj_`rP0Lg-(Qr|iA5`S-~L8 0Cbu4}sm>f7htM>DMN zB$`Lf9DFnYXwcA`K&im<%<;*0EMLGq$zdICmNhf6&4GtJcaEJZUl7BPH5+b`&DE|Q zm0_n7sYAsL{1dS_g+g)`ssPG}@qq&5kb}w|^K~M^JvVy$X8@fW3L=!{wwSE*{^Sly zbH!e{6x+R@Hc*MebVn<=gIaKFV?}PVP^49I+ZWOqBqZAncZq1SVu;dt;++0Zmbgq( zuXa!ejL=kx?=YB)#tQL71M+17B|qeZrva2hy~l^XSN>d}MGc70(C>D~7DnolAj%qn zArRe6mxyZvLXMb@{RF^o0#9s%%Shkb9`BzN>>1XR-SxQ!SM&}kh6UZ0NzRXu`jq3` zsSTAmu2S}{AP<|M)&pFdtdrG{-%yIfAFAzH *Br z);8NG=G*L>cMwmjJ4v4N*;*NA4r|4DNeG=DmDOc#p@|^!a8;N`rOk1Zo;u-DJu}TF zj3?3<#lQwTU5gp;aGb{bEh%hMw7ik61OlUp3Prf~(?h{Qztzz_NSD$B2yiY^KJI1I z)Y pvVyDX*;M`yEuid4m+JJ;MmVKJH%ICE)O!t1|CvFl-k zC}qkaK1))WwH;2hv|5V|u@W4+x5!&lT%Ei&j%(ioeEya=kaeI20#VD*?PI8|7DFQj zK^yyVx0vQ^KZGhedo|_Q9a(y5qSzWDc8Gw0Iya+qn3yWnpbA+yC>~#AAl!&s8D!>u zs32#zPPh!7B)~+blNN$E l70o=iU>uNVM@Jqb@cneTPsrD|-*O*{Xr6lx7(u2fIf%v*G98 z@26%LRP2Ff#nmIAUhgtR2p@~@^4@Uw{=6Iz_T)#yOcM1hM)o}gx-Q4xxEX}=8yxxc z2@uyHkKI6YSGn{#3FnFp=COYd*~RAnFx^@pfA50119*%Wa{s-XSOddvsYP`%ev@_V zEYPo>el^~(>F1oUs@JledafI1hUCz@?@YLg?%3<{$uiq>w3>$d9C?!>Bp-N$o`CKc z?w8$LHZ?q@l|{n^Z_WvQvv8lNg`C;D1`>bn$d~)xblPEbtm $~8di zpcbutK3muRv;~Cm$Mble_T$*9WOicjNS4ou6_n%U?%oI|o1k_Gk+ot*pEVxOZWLeq zZqDvFciT4st)NrV6?jX%{Jw%qyd>MGZRjr`dfRZ3?t!8YxS0NXTT?X7gxgeH#vYB> zN83Cr+#sD#psAgFiPU;{STpAJZ!jhb@}Pz1@qy=;X=cC-3)tK0GGe11YE&cK0?+~m zdihn%AiF$Pl^BrVryh7maS6v7GC1Y7Q4`9rwBdQUi$%YJLQy|?nZrEu)Sh{7qRj6t z>SINyhZmxtI)58tu#)DD#OA3}RQ=ZnD}*@kA*y R$!VL}rkUc&ah;z(n&xG|U1 z%>YAaN;msdh;^Z2H(s8W1oBG<;pj`YYKF< aoCWcJe# zd?5C~?b!Wxg(lP`z{7AozOWO(+w%z}u>E~+7mknM8|8Nc-E($ZwavKK#on+jG=m@S zBpT(#cpoR(tKYoM_Fi`z7q|PlX5Vkym2v@<&KJUPRG~Ly>+>eyg@GH05HI0ntY_XL z_E66h!ElLy-ipPj!O+93^clDX4!sju1~lv60c*6Rpp3RyJg~xNlYIs>#6^;i=ai)R z{-qg0bIlS{=0}(>cLwi7Y&j1I>Jr Cq>|HSd7MZ7~q?3aaD%ZgON*UE~9B3U8tvX^?jx z4TqW02U7c&9lcVI@$nbUvPBQlRVz%rD{TtvpG#f0!^W7$dbdOGWSKLLt-6r+yhZ+4 zMv-=C80fHcup$LnYoQ66B%DBOJt~fZdUI-f5?~;Xu>%`rb#wIw9S{T)#z05&LBbsb zyRI=u%VHSfVi>`B`^@>hP*93u>~V>4txzisFgcl0<3Jw=6wD92uL%i*wD$OMH@R4? zkMs|C>8~z-ujKJDxkUH&kT^mC?;MyI?1U;EtP46xz8Vqd9<8PpFbjLSdiZpgvNI+P zu9;UZv$D*r3S!1D4+!H7-j*4Ow=8pthV9_1!bcv`hK^NKB*uew-$$>Gm|=;Dm(D0c zc-WJfa2P-BY?->*Qx)b`w*lW@ul-HXq7==4=ywt~FBG%OJXZCX@>qm9eJ+Cx1Y zF^bQmaU+;=5TZ yMd^!;i1^<>E*qE#M=k^4FU3A@;WQhV-*TR?S`X>)mKq z&TpCt+2o~}>h~`7_YR9#dIh+#7L?7}as^scH*uKWkJhqG!3C2#(@YHiq~=ue7knkp zaU<5-C9{b7R=wv4ztbhz#UNxji!vB9oqu~MVJVBI(J$NPK^&RB-#^^lZBj7~MJ@A< z8ouNpu=WOL=y{4kpC8`W-$P;a@&S+A(QdNEwkcCgQ{`y1F9z=itwTBSwCjw@6D-!Q zm0f6eX;YCx&*~5Mst_$n326_R!rf{Daz^Mt>$GlUw9BY#Eu1C&g1a>a$r5;tl~=?r z `?W#JF&TIYecEPyB_fyj`Bl;Kjk-&>L@JqB1V~(n7pKVn zK`H8&N5gSEyFyjSJ8dzX;aiYBk{+pBgnTf>E>gv>CT^WE{_^rEB=81KPc`@L_Wka6 z@O>Tn{XYA(1O8$+C-gB`)7Pu?)xCPU+ZXmKmLujz{^6xH(n|>REtkdoHS_A`_1RnR z|MI z^a(Fx>sR{GX>j;`HwyWk?{j#Q?8is;!R9~yHJ_g!$c*vQYa8}@arm@~<9GLYvH1=3 z?
)@|1gr0r 13_wP}Z+e9>Swg3NUU8XuIw-(L;1=h&qX|jDl5Jh + */ +@RunWith(AndroidJUnit4.class) +public class ExampleInstrumentedTest { + @Test + public void useAppContext() { + // Context of the app under test. + Context appContext = InstrumentationRegistry.getInstrumentation().getTargetContext(); + assertEquals("com.skipping", appContext.getPackageName()); + } +} \ No newline at end of file diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml new file mode 100644 index 0000000..226b770 --- /dev/null +++ b/app/src/main/AndroidManifest.xml @@ -0,0 +1,37 @@ + +Yl9Hx&oTQtOp@x*Ap_-YRZDd(u z+LM%~zL%kqkd~m95JsDso^qO*r5T%&fR!C@VL1Z&zsv>r&!zk?^8g5h0t^KJ00Hr{ zTj0n3dtzb!pRIqbiUR(5|G6YH7XwFQT4#4>d8vO#CcaNrfO-G`ya@sWfc_hj`e#e= z{{;C@xrP5i6$L2&1o}USFZ|~@|5MrEzXMQt{+rIhe**t;{9pO|FCYTIm4Hv%znJ=e zL;S<$|3>8hPsINm)BgniC%69#S`;w#@4)|!>Hit&Kl$|EkqX-Xf3WL6PxDXM{~DWr ixbm;%pRu9o_ Testing documentation + + \ No newline at end of file diff --git a/app/src/main/java/com/skipping/APP.java b/app/src/main/java/com/skipping/APP.java new file mode 100644 index 0000000..8c81dab --- /dev/null +++ b/app/src/main/java/com/skipping/APP.java @@ -0,0 +1,12 @@ +package com.skipping; + + + +import com.libs.fragment.BaseApplication; + +/** + * @author Ming + * 3/14/22 + */ +public class APP extends BaseApplication { +} diff --git a/app/src/main/java/com/skipping/Contants.java b/app/src/main/java/com/skipping/Contants.java new file mode 100644 index 0000000..61d2e81 --- /dev/null +++ b/app/src/main/java/com/skipping/Contants.java @@ -0,0 +1,20 @@ +package com.skipping; + +/** + * @author Ming + * 3/14/22 + */ +public class Contants { + + /** + * url路径 + */ + public final static String BASE_URL = "https://api.xintijiao.com/ijustjump/"; + + + public final static String CLASS = "class"; + + public final static String GRADE = "grade"; + + public final static String UNFINISHED = "未完成"; +} diff --git a/app/src/main/java/com/skipping/MainPresenter.java b/app/src/main/java/com/skipping/MainPresenter.java new file mode 100644 index 0000000..609de94 --- /dev/null +++ b/app/src/main/java/com/skipping/MainPresenter.java @@ -0,0 +1,10 @@ +package com.skipping; + +import com.libs.fragment.BaseApplication; + +/** + * @author Ming + * 3/14/22 + */ +public class MainPresenter extends BaseApplication { +} diff --git a/app/src/main/java/com/skipping/activity/HostActivity.java b/app/src/main/java/com/skipping/activity/HostActivity.java new file mode 100644 index 0000000..b30f11d --- /dev/null +++ b/app/src/main/java/com/skipping/activity/HostActivity.java @@ -0,0 +1,269 @@ +package com.skipping.activity; + +import android.content.BroadcastReceiver; +import android.content.ComponentName; +import android.content.Context; +import android.content.Intent; +import android.content.IntentFilter; +import android.content.ServiceConnection; +import android.os.Handler; +import android.os.IBinder; +import android.os.Message; +import android.view.View; +import android.widget.Button; +import android.widget.EditText; + +import com.libs.fragment.BaseActivity; +import com.libs.utils.LogUtil; +import com.libs.utils.ToastUtil; +import com.loop.loopminisdk.LoopDevice; +import com.loop.loopminisdk.LoopHost; +import com.loop.loopminisdk.LoopMessage; +import com.loop.loopminisdk.LoopMini; +import com.skipping.R; +import com.skipping.utils.ThreadPoolUtil; + +import java.util.HashSet; +import java.util.List; +import java.util.Set; +import java.util.concurrent.ScheduledFuture; +import java.util.stream.Collectors; + +/** + * @author Ming + * 3/15/22 + */ +public class HostActivity extends BaseActivity { + private LoopMini loopMax; + private Set+ + + + + + ++ ++ ++ + + + + + + + +loopDeviceSet = new HashSet<>(); + private LoopDevice loopDevice; + private EditText editText; + private LoopHost loopHost; + private MyHandler mHandler; + private int position; + private ScheduledFuture scheduledFuture; + private Button btn, btn2, btn3, btn4, btn5; + private final BroadcastReceiver mUsbReceiver = new BroadcastReceiver() { + @Override + public void onReceive(Context context, Intent intent) { + switch (intent.getAction()) { + case LoopMini.ACTION_USB_PERMISSION_GRANTED: + ToastUtil.longToast("确认设备权限"); + break; + case LoopMini.ACTION_USB_PERMISSION_NOT_GRANTED: + ToastUtil.longToast("取消设备权限"); + break; + case LoopMini.ACTION_NO_USB: + ToastUtil.longToast("没有插入设备"); + break; + case LoopMini.ACTION_USB_DISCONNECTED: + ToastUtil.longToast("拔出设备"); + break; + case LoopMini.ACTION_USB_NOT_SUPPORTED: + ToastUtil.longToast("设备无法识别"); + break; + } + } + }; + private final ServiceConnection usbConnection = new ServiceConnection() { + @Override + public void onServiceConnected(ComponentName arg0, IBinder arg1) { + loopMax = ((LoopMini.UsbBinder) arg1).getService(); + loopMax.setHandler(mHandler); + } + + @Override + public void onServiceDisconnected(ComponentName arg0) { + loopMax = null; + } + }; + + @Override + protected int getContentViewResId() { + return R.layout.activity_host; + } + + @Override + protected void initView() { + btn = findViewById(R.id.btn); + btn2 = findViewById(R.id.btn2); + btn3 = findViewById(R.id.btn3); + btn4 = findViewById(R.id.btn4); + btn5 = findViewById(R.id.btn5); + editText = findViewById(R.id.edittext); + btn.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + getHostInfo(); + openPairMode(); + } + }); + btn2.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + pairDevice(Integer.valueOf(editText.getText().toString())); + } + }); + btn3.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + LogUtil.e("设备数据", loopDeviceSet); + } + }); + btn4.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + closePairMode(); + connectDevice(); + } + }); + btn5.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + closePairMode(); + disconnectDevice(); + } + }); + + + } + + @Override + protected void initData() { + mHandler = new MyHandler(); + } + + + /** + * 连接主机 + */ + private void getHostInfo() { + loopMax.getHostInfo(); + } + + /** + * 开启配对模式 + */ + private void openPairMode() { + loopMax.openPairMode(); + } + + /** + * 关闭配对模式 + */ + private void closePairMode() { + loopMax.closePairMode(); + } + + /** + * 匹配设备到指定id + * + * @param id + */ + private void pairDevice(int id) { + loopMax.pairDevice(id); + } + + /** + * 连接设备 + */ + private void connectDevice() { + connectDeviceInner(loopDevice -> loopMax.connectDevice(loopDevice)); + } + + private void disconnectDevice() { + connectDeviceInner(loopDevice -> loopMax.disconnectDevice(loopDevice)); + } + + + private void connectDeviceInner(ConnectInterface connectInterface) { + if (loopDeviceSet.size() == 0) { + return; + } + if (scheduledFuture != null) { + scheduledFuture.cancel(false); + } + List deviceList = loopDeviceSet.stream().collect(Collectors.toList()); + position = 0; + scheduledFuture = ThreadPoolUtil.getSingleton().scheduleAtFixedRate(new Runnable() { + @Override + public void run() { + if (position > deviceList.size()) { + scheduledFuture.cancel(false); + } + connectInterface.connect(deviceList.get(position)); + position++; + } + }, 0, 10); + } + + public interface ConnectInterface { + void connect(LoopDevice loopDevice); + } + + @Override + protected void onResume() { + super.onResume(); + setFilters(); + startService(usbConnection); + } + + @Override + public void onPause() { + super.onPause(); + unregisterReceiver(mUsbReceiver); + unbindService(usbConnection); + } + + private void startService(ServiceConnection serviceConnection) { + if (!LoopMini.SERVICE_CONNECTED) { + Intent startService = new Intent(this, LoopMini.class); + startService(startService); + } + Intent bindingIntent = new Intent(this, LoopMini.class); + bindService(bindingIntent, serviceConnection, Context.BIND_AUTO_CREATE); + } + + private void setFilters() { + IntentFilter filter = new IntentFilter(); + filter.addAction(LoopMini.ACTION_USB_PERMISSION_GRANTED); + filter.addAction(LoopMini.ACTION_NO_USB); + filter.addAction(LoopMini.ACTION_USB_DISCONNECTED); + filter.addAction(LoopMini.ACTION_USB_NOT_SUPPORTED); + filter.addAction(LoopMini.ACTION_USB_PERMISSION_NOT_GRANTED); + registerReceiver(mUsbReceiver, filter); + } + + + private class MyHandler extends Handler { + @Override + public void handleMessage(Message msg) { + super.handleMessage(msg); + switch (msg.what) { + case LoopMini.LOOP_PAIR_DEVICE_INFO: + loopDevice = (LoopDevice) msg.obj; + addDevice(loopDevice); + LogUtil.e("连接LoopDevice", loopDevice.toString()); + break; + case LoopMini.Loop_GET_HOST_INFO: + loopHost = (LoopHost) msg.obj; + LogUtil.e("LoopHost", loopHost.toString()); + break; + case LoopMini.LOOP_GET_DEVICE_INFO: + loopDevice = (LoopDevice) msg.obj; + addDevice(loopDevice); + LogUtil.e("获取LoopDevice", loopDevice.toString()); + break; + case LoopMini.LOOP_MESSAGE: + LoopMessage loopMessage = (LoopMessage) msg.obj; + LogUtil.e("LoopMessage", loopMessage.toString()); + break; + } + } + } + + private void addDevice(LoopDevice loopDevice) { + loopDeviceSet.add(loopDevice); + } + +} diff --git a/app/src/main/java/com/skipping/activity/MainActivity.java b/app/src/main/java/com/skipping/activity/MainActivity.java new file mode 100644 index 0000000..aa15078 --- /dev/null +++ b/app/src/main/java/com/skipping/activity/MainActivity.java @@ -0,0 +1,70 @@ +package com.skipping.activity; + + +import android.content.Intent; +import android.view.View; +import android.widget.Button; + +import com.libs.fragment.BaseActivity; +import com.libs.network.CallBack; +import com.libs.network.Concise; +import com.skipping.Contants; +import com.skipping.R; +import com.skipping.net.API; +import com.skipping.net.BaseBean; +import com.skipping.net.TokenBean; +import com.skipping.net.TokenReqBean; + +public class MainActivity extends BaseActivity { + private Concise concise; + private Button btn, btn2; + + @Override + protected int getContentViewResId() { + return R.layout.activity_main; + } + + @Override + protected void initView() { + btn = findViewById(R.id.btn); + btn2 = findViewById(R.id.btn2); + btn.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + Intent intent = new Intent(MainActivity.this, HostActivity.class); + startActivity(intent); + } + }); + btn2.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + Intent intent = new Intent(MainActivity.this, NetActivity.class); + startActivity(intent); + } + }); + } + + @Override + protected void initData() { + concise = new Concise (Contants.BASE_URL) { + } + .build(); + } + + + private void login() { + TokenReqBean tokenReqBean = new TokenReqBean(); + concise.request(this, concise.api.token(tokenReqBean), new CallBack >() { + @Override + public void onSuccess(BaseBean tokenBeanBaseBean) { + + } + + @Override + public void onFailed(Throwable e) { + + } + }); + } + +} \ No newline at end of file diff --git a/app/src/main/java/com/skipping/activity/MainActivity2.java b/app/src/main/java/com/skipping/activity/MainActivity2.java new file mode 100644 index 0000000..356626a --- /dev/null +++ b/app/src/main/java/com/skipping/activity/MainActivity2.java @@ -0,0 +1,163 @@ +package com.skipping.activity; + +import android.content.BroadcastReceiver; +import android.content.ComponentName; +import android.content.Context; +import android.content.Intent; +import android.content.IntentFilter; +import android.content.ServiceConnection; +import android.os.Bundle; +import android.os.Handler; +import android.os.IBinder; +import android.os.Message; +import android.util.Log; +import android.widget.Button; +import android.widget.EditText; +import android.widget.Toast; + +import androidx.appcompat.app.AppCompatActivity; + +import com.loop.loopminisdk.LoopDevice; +import com.loop.loopminisdk.LoopHost; +import com.loop.loopminisdk.LoopMessage; +import com.loop.loopminisdk.LoopMini; +import com.skipping.R; + +/** + * @author Ming + * 3/14/22 + */ +public class MainActivity2 extends AppCompatActivity { + private LoopMini loopMax; + private LoopDevice loopDevice; + private EditText editText; + private LoopHost loopHost; + private final BroadcastReceiver mUsbReceiver = new BroadcastReceiver() { + @Override + public void onReceive(Context context, Intent intent) { + switch (intent.getAction()) { + case LoopMini.ACTION_USB_PERMISSION_GRANTED: // USB PERMISSION GRANTED + Toast.makeText(context, "USB Ready", Toast.LENGTH_SHORT).show(); + break; + case LoopMini.ACTION_USB_PERMISSION_NOT_GRANTED: // USB PERMISSION NOT GRANTED + Toast.makeText(context, "USB Permission not granted", Toast.LENGTH_SHORT).show(); + break; + case LoopMini.ACTION_NO_USB: // NO USB CONNECTED + Toast.makeText(context, "No USB connected", Toast.LENGTH_SHORT).show(); + break; + case LoopMini.ACTION_USB_DISCONNECTED: // USB DISCONNECTED + Toast.makeText(context, "USB disconnected", Toast.LENGTH_SHORT).show(); + break; + case LoopMini.ACTION_USB_NOT_SUPPORTED: // USB NOT SUPPORTED + Toast.makeText(context, "USB device not supported", Toast.LENGTH_SHORT).show(); + break; + } + } + }; + private MyHandler mHandler; + private final ServiceConnection usbConnection = new ServiceConnection() { + @Override + public void onServiceConnected(ComponentName arg0, IBinder arg1) { + loopMax = ((LoopMini.UsbBinder) arg1).getService(); + loopMax.setHandler(mHandler); + } + + @Override + public void onServiceDisconnected(ComponentName arg0) { + loopMax = null; + } + }; + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_main2); + mHandler = new MyHandler(); + editText = findViewById(R.id.edittext); + Button button1 = findViewById(R.id.button); + Button button2 = findViewById(R.id.button2); + Button button3 = findViewById(R.id.button3); + Button button4 = findViewById(R.id.button4); + Button button5 = findViewById(R.id.button5); + Button button6 = findViewById(R.id.button6); + Button button7 = findViewById(R.id.button7); + Button button8 = findViewById(R.id.button8); + Button button9 = findViewById(R.id.button9); + Button button10 = findViewById(R.id.button10); + button1.setOnClickListener(v -> loopMax.getHostInfo()); + button2.setOnClickListener(v -> loopMax.openPairMode()); + button3.setOnClickListener(v -> loopMax.closePairMode()); + button4.setOnClickListener(v -> loopMax.pairDevice(Integer.valueOf(editText.getText().toString()))); + button5.setOnClickListener(v -> { + if (loopDevice != null) { + loopMax.connectDevice(loopDevice); + } + }); + button6.setOnClickListener(v -> { + if (loopDevice != null) { + loopMax.disconnectDevice(loopDevice); + } + }); + button7.setOnClickListener(v -> loopMax.getPower()); + button8.setOnClickListener(v -> loopMax.getCount()); + button9.setOnClickListener(v -> loopMax.startJumpLimitTime(30)); + button10.setOnClickListener(v -> loopMax.stopJump()); + } + + @Override + protected void onResume() { + super.onResume(); + setFilters(); // Start listening notifications from UsbService + startService(usbConnection); // Start UsbService(if it was not started before) and Bind it + } + + @Override + public void onPause() { + super.onPause(); + unregisterReceiver(mUsbReceiver); + unbindService(usbConnection); + } + + private void startService(ServiceConnection serviceConnection) { + if (!LoopMini.SERVICE_CONNECTED) { + Intent startService = new Intent(this, LoopMini.class); + startService(startService); + } + Intent bindingIntent = new Intent(this, LoopMini.class); + bindService(bindingIntent, serviceConnection, Context.BIND_AUTO_CREATE); + } + + private void setFilters() { + IntentFilter filter = new IntentFilter(); + filter.addAction(LoopMini.ACTION_USB_PERMISSION_GRANTED); + filter.addAction(LoopMini.ACTION_NO_USB); + filter.addAction(LoopMini.ACTION_USB_DISCONNECTED); + filter.addAction(LoopMini.ACTION_USB_NOT_SUPPORTED); + filter.addAction(LoopMini.ACTION_USB_PERMISSION_NOT_GRANTED); + registerReceiver(mUsbReceiver, filter); + } + + private class MyHandler extends Handler { + @Override + public void handleMessage(Message msg) { + super.handleMessage(msg); + switch (msg.what) { + case LoopMini.LOOP_PAIR_DEVICE_INFO: + loopDevice = (LoopDevice) msg.obj; + Log.d("LoopDevice", loopDevice.toString()); + break; + case LoopMini.Loop_GET_HOST_INFO: + loopHost = (LoopHost) msg.obj; + Log.d("LoopHost", loopHost.toString()); + break; + case LoopMini.LOOP_GET_DEVICE_INFO: + LoopDevice loopDevice = (LoopDevice) msg.obj; + Log.d("LoopDevice", loopDevice.toString()); + break; + case LoopMini.LOOP_MESSAGE: + LoopMessage loopMessage = (LoopMessage) msg.obj; + Log.d("LoopMessage", loopMessage.toString()); + break; + } + } + } +} diff --git a/app/src/main/java/com/skipping/activity/NetActivity.java b/app/src/main/java/com/skipping/activity/NetActivity.java new file mode 100644 index 0000000..5e21509 --- /dev/null +++ b/app/src/main/java/com/skipping/activity/NetActivity.java @@ -0,0 +1,215 @@ +package com.skipping.activity; + +import android.view.View; +import android.widget.Button; + +import com.libs.fragment.BaseActivity; +import com.libs.network.CallBack; +import com.libs.network.Concise; +import com.libs.utils.LogUtil; +import com.skipping.Contants; +import com.skipping.R; +import com.skipping.net.API; +import com.skipping.net.ActivityBean; +import com.skipping.net.ActivityReqBean; +import com.skipping.net.AddActivityBean; +import com.skipping.net.AddActivityReqBean; +import com.skipping.net.BaseBean; +import com.skipping.net.DetailActivityBean; +import com.skipping.net.GradleBean; +import com.skipping.net.ScoreReqBean; +import com.skipping.net.TokenBean; +import com.skipping.net.TokenReqBean; + +import java.util.ArrayList; +import java.util.List; + +/** + * @author Ming + * 3/15/22 + */ +public class NetActivity extends BaseActivity { + private Button btn, btn2, btn3, btn4, btn5, btn6, btn7; + private Concise