From 6396872ddd3617c9c9154c1b93232b536ee7783b Mon Sep 17 00:00:00 2001 From: n2232 Date: Wed, 25 May 2011 09:48:50 +0000 Subject: [PATCH] =?UTF-8?q?SPFL=E5=AF=BE=E5=BF=9C=E3=80=82=20=E3=80=80?= =?UTF-8?q?=E3=82=A2=E3=83=A2=E3=83=AB=E3=83=95=E3=82=A1=E3=82=B9=E3=81=AE?= =?UTF-8?q?=E4=BB=B6=20=E3=80=80=E6=A9=9F=E7=A8=AE=E8=AD=98=E5=88=A5=20?= =?UTF-8?q?=E3=80=80ROM=E7=A2=BA=E4=BF=9D=E3=81=AB=EF=BC=91=E8=89=B2?= =?UTF-8?q?=E3=81=8A=E7=9F=A5=E3=82=89=E3=81=9B=E5=BB=83=E6=AD=A2=E3=80=82?= =?UTF-8?q?=20=E3=80=80led.c=E3=82=92=E5=88=86=E5=89=B2(=E3=81=9D=E3=81=AE?= =?UTF-8?q?=EF=BC=91)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit git-svn-id: file:///Volumes/Transfer/gigaleak_20231201/2020-05-23%20-%20ctr.7z%20+%20svn_v1.068.zip/ctr/svn/ctr_mcu@333 013db118-44a6-b54f-8bf7-843cb86687b1 --- trunk/bsr.lmf | Bin 161224 -> 165832 bytes trunk/bsr_k0r.map | 897 +++++++++++++++++++++--------------------- trunk/bsr_system.h | 10 +- trunk/led.c | 465 +--------------------- trunk/led.h | 19 +- trunk/led_cam.c | 141 +++++++ trunk/led_pow.c | 265 +++++++++++++ trunk/loader.c | 140 ++++--- trunk/pm.c | 21 +- trunk/task_misc.c | 2 +- trunk/user_define.h | 27 +- trunk/yav_mcu_bsr.prj | 122 +++--- 12 files changed, 1054 insertions(+), 1055 deletions(-) create mode 100644 trunk/led_cam.c create mode 100644 trunk/led_pow.c diff --git a/trunk/bsr.lmf b/trunk/bsr.lmf index d24015f000311a89ef2a7a82a4c7f19ac8619eca..1d6db33c9a082c910701f8a72d80f4239c331a23 100644 GIT binary patch literal 165832 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 literal 161224 zcmeF)d3+Pq{`mjN+H`>~lzmGV_AQ}hM+s2&3Z)>5Rv?vIP!SnWR6xP&id3rT^@>)C zUUyl&?ksH;0To-}f(2|EL|I%QY^{V$n(ym9NfGb8`uKi+fBe4xd?LwnmUGUWb!IX% zsiPBzDxEXFy{7+*it<)dMafc3itTwtUIzKF@$Ssq!F%R_0*BL)*|T5&+n7_7CPqa` zF=QAN0~7!Da=E6A7(Uq{(e#&ukauAtMftFCc$s|a8&T{DGM$~3JAL^0N!blyW!WFU z?8{``|Hk?MuMUO`8Gp@~+zHn-v`>T2(WYDfpiRU5!0C_%mbW?beuX$?e;#Le8^X%F zVLO|Mv*SpzW? zIdm-H>ajO3`PT$`7gqL?ioQuRc@&|E-44*V&)P!M< zGQ!Kdp?%DR|KShfxLm_0WR0LL2rutHf7$J_ULU6uvamuKXp z?CDYqUD$xUQ%&J_CUGXW2*;7n$o|bP(=J!GUUB1S4|(5B1IgP(oO@bJi16#mIM<9C zK0SNF(5yQ0A@7FrWE1C1+lCmIx1;YzCC)Wtt{J1)S)^>$MUi(04ixg9N1P|^;Rr`=3g_*T)vhmbxrPm$ zMBjODZ1}yC4kzy=#QAV^IL@ZOh2xx68sbRavX#XX6#X3z^+%ufWwIt*p8t*WzxDRN zeaGd>ojzv#m`VS`@iR1={lWh%PHr~anfyPCBfG@^>v3woa%?YQe<1IM{o7;gLzc0h zZg@59tHN>gI+*+j;pN?zh4OxeIE8;0N8ev(Zza6EO7lA#dx5v*$nK==*DzD{JWFp+xq_>+jy|5C8b(S|;mUE~#ln=^c#M-%^%8eq9k~ zlA_Eej=cZ;)ewig{SV{Fu~ACYupPaSf4H%R?MQjDm3zpSy#M^w5J$H1KaDeNjFiV- zAFsbHf4ZR=c3JImagLNbV$^=($lLs?-n> zm)KB$vRyeJmX|C~*QdhMU9Xsy^HO=qHaX1dF9|Q_k@Ax1e0?fBT^5;^^mjz2rQcRu zF)ims@{)5SIp2|&ob$+ejJ)JLM$S*;u{4m3Ldl*U0fFuNgZ2t_dHJ_66Sl@rrVP zAoOtSjAvFK$vEdKeM{msycA_udEjEG;_Y?2`kqnL3p?EhRVCfO@{M9cp&>6}uO~)L zI2@2gzE~D4+v`3lGezlsr>Sw><}G#ZF^b3HUat6RgO!Fo3~_@}XvmJP8Chs>t~A%h zmpd1)3GPT-K0iD^A$hrbnAcS2GaR4M=mlAp#97*ZUFn``@V)E0IANgsqbO+AwETT}+wP(d0;$=je0Sr~8Ay7*BbWvYl1x;!7246DnR>cI>=T z@rteXtx)Zop(-hXCFU!|^pz>3vJ1wq z%(e@b3)ZiqTo>Xl#H+S*O5KyC?;7g1AK89%``2Io5DI;HocI1vs4~%_)ux0hQh%&S zKVQ+|Tt!E%qSN$>?xBiap~@snVy#1|bt<(PN^Pc6*+(%}_ETEc4pwTfR%(YUwWE~E zNs6`hI_1lgB=-~VUwEIc4^S$SERBZ-JZH}dOYp8ZxsP@%R?Q5Z`UFDGmFEsA;B)M-fI`T~6 zW<0GoV}f~SRd7^BaLwRgwnbfZDfo3-ZK~ejmgYI8@|=f)Q%q&~c?Q~}GSzRa{5~)< z*eNsk;%GG~P3?9f_|o9u@T=UXe05b-yXu-r8jCMElTvJIQVOa0V)=NzZj|@OqdvpA zosrx$f2sUPd11`F@)qc6A6HZS;|IjC4x%rVH6!>p918ywADREJEb8VX~c@|x>PyBgHkqZL^p z=U6JPN%R~Y=XYD|pvD~k{YIOFH%hi;(?t9) zv1SpA1b-hfmnBYP%79&&R|nR`HOn=xSpDkjtGxc5&WE;Z;=>xhkyOvKAXl`}oXP$eBAcAKK8i?^u* zJE#NGZf$H*dt1~&9n{_?bx>MPa&Wg%wVzQ)wyw0JAt${w+3;nSlI+kEQB6cYO7ST6 zuLh`}_94?eF#ZEBE(}&BbQ-REw{2sFLWq*k0eSn+wf*y|&;7vBA&de80;} zf=z1FOpU5Hrf^iL+iF~A%!*cOu3l&4xROjF%jd5%#^qdbL}_d&HmoypM9E=|xo+vd zt)jwwTU>QZL+*Z0u&^0u@0vd2+*g>lmQw91S7%eGpd*k5cbOfHTsOs28ol%&E~=gMsdn*<+= zrwiU2O~Lk9tgQnc`D1|ZE=9IP zW1tm{OnpHZm0Du3?VPC8=Z6Swk*MVpR6r@%8h96322R9rqy*0RDf9af{BNW>H!}jCb_m|1) z#PW@^gWG@Dcx!O`@r`qWvb4N(Zm>z|ykOJP`N8I;cLvLf-mOE0tXV4r#N4MP*8{<+D%w znXL->=+n1#oP$>ER$rievSX*?^VkpN_Roh#yP1qI9nUoRa))wb>Ia5?p?;;2B&|Zr z&b(z;R77Q2=+%-kWl4yS8N8)3R@5I2F+!=(fTA?7&=mKVjGyy~?$1}h`rs<>uT}M% z>kljpdeh1)O*YfS==ux6vVGou_5GEX%{CTAvFN+tzIV(vZ>nt5`Ji!U)y|1A^?QQ( z+3menTF}6$6YW@b`o{XQ)7RE>CS$g(aJHOda9{sI_>{Q*n);1q8|5ue?%P8zZIAQy zcZaBm`fl~^%DiPumMthVw^S;$c=wl|O*Z>XpG|IF-=cn3U&Xd1zu5Sgt=P2JlaW2N zrq{f)&K{fH(MpD`jbfV^a(AUe7kwRa50WnJ?qA(_MV`qUJ#*)d`fkC~Uj%pVIQ?mm z9bV-`MJ-gL>%Y9H)N3EHgD+M5lgjFze)@WQz1Kff>HElp%-%ttC2_^-*I#X(wRM8G zwy)9eV3C>c8LyAh!z`YVIs3OTizUqLpo2vXVKlzC`Ret?-+pHO!R_ai4Rtiar&lid zwl1{3dixpHY&*E&f+=bJ;Ycvkw!@!PeR|$`=ONpJ<#inoZaY}!yvzFFr%82bp9GsV ze%fo2sj4hR@pKILuanBM?R9nAFKj=@w$4-s=IQm@#x76~b&_+bf-7@R#hlxAIJ{A6Y1`qdzpnCh`z_*`y6xw-U&yy@ulp?) zxtuY-q2M#-*KMw{lDGBMR_f7x@U_ELdp*s|KRtZ##e?e)JKMNVzkASoaogc0+YWwG z#;Vq=I{YH%Db98o{8Rn!9`;_~SVfbRRgFBzseeel`;b~zb>p`$emmnv30i&QA=`}y zZQH1nUFYYo43_6Rv*|}mCM3Go&M#XN%-{J*mEz18*t^d_r&A8PS59v@^RD9q*T;@6 zIa@Yu&DoZ)ZN|1urAI#5w8Oq@(-%i75)5aO6O!##$IVZUQRXUl&s(gtJj`B{W-0&q$t^1WvmXxs_tQ^5-NNhS$&<5q z8I48*FH6dV#cMwMv1P~1tV#KE@4j!@vit6yn?ETlvt!GI7+d5Old$yu`<5)a_nx~K z-gW1Eb>1CwZ=ZAPEwg78{AFgod&cx>H|5Z=9~9MIojwlzv>-lo0HU@#g@CZkdx`1SmmGv_avlREUjX8PQ_7u`K~`ZfJK zB$+SC;$H*xiUcznC|P@D5Z9ybQU0#Hr|ehGD~Se&VLU4ir20JxMH#_O89}~cpPH0b znGtLkoSfz|`o~o_}|h%iaXSJAlC1(Zi@A*!;H=>BiCQ_bF9%P0-PclxJYxcW5ap7IqJCE zF{9X2l%#(>z8;;!6(y$@1?6oyJKL-pntHOYUUf%`Gy>e zob}s+w-3rMG5T|&Wn!Uvvq9~j?x&{DR$GpB@cYu4G}pAQ?BFM?WS5I0tGta5j38U8 zgKJTy+7AB8-odErlv&xfn#2XsRVnWA)z(=h9LG$L`hIe;&Kpf;-4{v3#OCGlOim0N zces=-&7~T0tdeqPbAmPJS(eMC3H_@kCC#yZV}3j(`PUrl@>fTj{r`B<`>UjN@>JiB zjz*T`rg?#{;ZXZN~%6%_gNh$6THh*HF)gdI!%M%_k0;p*f6Z2nDdgykv!^+R21zKF)8lZq|9yR{@cNuTTHiIie#RfI z9~fRguVH=8t5nPXUFP+mQfR%Y@{6N>>>Z5$JY{^8`%{}te!}GMD@F=f_wO~Se>;_y zDr)MVV5IR*UFhg)&d9T_ZSH5fwzisNpdWhm}Xw4BsoLQm8Ozr{*t4C zx-CV`{7aT)|E;<;6V9UaWM$jIjaGl~!$#p?&Y~^8mRGE@{chDEv;Qn7U0bpggIZs0 zqEQMBh8iv)y#03RBU-rMTyCI!URyXjd>f(z=+}$vR+-z3#o~Kuoenrk>l~BHzLUYOYfkI2k5A>gKAgRmnMY||g9+S&<;j|h8gsVH8 zN}_C^VOjfqK((j)PYvx{Xbz8TOL$~UGn&6nNnSpmF&^Z?QJlY6t`Y1p8@SfsvlKCJ zX>K;^`TK3t_ZAx2bfGbvmMNT8mf_Xv=skv+b)_x*zUxRYwS_;+uvV6})0YjG{m26^ zR>$r!#5gV(B$z`M8D5Y@mdK*E`l6>~krG)HBbg6Rv&(Gc%(O?#mC)KB0=`y-=J5tD z`CP6ipRLe9ov}{#IM^TD-3h(;517tgj2xvHEnBuPxJ7_d$}Ea3)_P z_H`c1v4L_;VW3vj%0GemZW5u!>T2bWt!X9^^l58NjO-X2A86(G{I+*2`aV$7%Fpq| zYf*2u`!e*Xmv`){T}`&DciY{&o%#0WYQ9~))2=4k&w{&}k(Lzv)>4*WW#5w%rFV_+ zwGfu;7e{0_6a(@d6JdF|Mfpw0^)0-DJ8=W{;8QAwEI7P-94QNqP#skE+{ zCj!g!N>)D}wy&wk zI6torXNev1K2JtYctC`6cto=EyFz5JuFqQnqy$bILBUW^fh52*Ae0hO?mbD!h~WYi)`U=MtzYj63!eB7t|M;2}hYNIjzV^ zp^5s|>q4$J$<>CE`GqEW_U*|!*SK%Dx##4~aOdZjaB1UwKWFB{6=E z0CHM^JQI} zwAt}M(YZ*Q71L_%Gk*#!pKFw^{9jv3;<@%Rkg1p?87{KGu-9XwnEE`IFJ;lty`IF( z82|FT?W+&P_~m*OBletrKgZeSTosi=lNMbHENsrWDwuF7;5}D+DIirjla~7Z-arO^ z@)ZL=*nD8+7|m3rDh7*sPY&194{$MB9q3U99V$w&Ql%%!&8jNZ#U=TBxN|k|xH{;lI_M{L z(CN$RXBx*I%MGcma@Ckzbu@t-yzLHSWropG+1p6!PNO>LxH`{aY)Dz1;V_aq;kYBF zU+6DzPw+&~a*wYuJ?k?(QZS$4-K=@?Tjr!UhkLpRX~C@%K3!+zv&kpnYoj%B1TZGO zWj1|m_F0-IzxlCwomr02YfR3iw)t|QTD2!putW-ePH|)@rSEe#|5)jh21oQmrE3hO z#fH-74W-W+N}n~9K4U0dWvCq-a?~rO+YNQ4TMeZj8gfpTer$ND^c}2i=INN`$xQPM zNb?K{zTL}rRj{I$um2%ME8j3D_)Cwn^G&wTVROC?XZ~$Lavdv%rTF6X3=qN;9OvLm zfknT1Dy12o!uBMeO>Jscikf2P8wO4^IA^AWmnYOov7A{crYE_kzI|>Lljb^o`qrw- zfx%I=>jE3*IPWWcClItd_IVrsK3`R`&=ddrfK@-P3q;qX^3{;K@{7#{-8x2%J5U zX;jiY)(#$12QU4iz-OgS&TcPQ`$53i8q&-6|~h_I$A8pcpX8ydZO%go(=YiU`abZ4M+Prx}j zWdOZ5Q2I%rbax=NEFdFdgUNYE>GnWf>dxP0cQCu>x7jZOryRYV=F|k$l&adSTJ6Vy z+K*(}fsX=wap}>!Xmp_Dqk!wO-es$$h#V*?>i>e?-VqOpMqTLLxBiQ!8+^l{+q zOEdD?mwX)1Q`r*u@#8>rc0ihWt3EwPpZ-LjF4U)Y2R3fib9!h@;B1BrZhFD?z{XDk zlHV&A?g(t8Oyv5?gVrf#jey!uvo{9u=Jeo9>3 zu!?}k`c6gQ)QAjqf!qt%Zz2`^R%A6a~LrAad~q6bAb7_E=^ zm^7bVPtMowKey1sC|j`TiHFB;f!ywj@>xZLfjyx9_(*jZb>11J;ze7_aUQ?8yt$DsEQCstZx`=I5 zejCWEtPV`C)B-nEI<&r(PVMumU6ls|iIs-}nU#tbV$WM^)Tr`WvsM`l*lX(pQqInd|#>U}jdI^eBaY?t`pNk5yRo zSRV;hsecyhp9}g)&`0&p{(U!hAn??_?7>-B&{qNzm3;zpjkcgfdsdm>F_t!U@)h|6pwwKc{JxRP>Uw31_Q!nh*q( zX5F})BDH@|W?i1Zt=?o;O<=aS@vQ7Q-e|{$5v=DtVpfS)0?gX$u{s70Wm)D$&g}14 zEz9IKo6Ye`fCORT@Vgwr~U!!A)SFXBYr!p}CYTx6H$pJw#a$lHN7esA=w z5`(t3jo+8xYU8)m#QfOCKdVKbAWQVj$N!cs*3YbI&nJh$S=@KN&Y*`K9Uv@AE$-c_ zF;$PWbY6M$v*`{c_-RI&zF^3|FNpg01?~TB!S83ese8G@A6OOQ%U|po->F$^R%1!L z6h-ZwIxBB!Ny6pnAti}2Ju7cWNm6*CeMu9|x7hLP)l&B*Ei~U9j(5V-Ej8cGj{V{3 zHk$7`y_F{NJdiKj)mz(LGxEpY+N>4}FRksZ`37>?OY>#Ua;{9DuXwGFr=#`c0s)`B zs6OCc%6BK8D&jnIR!M!p7w3y9$iAV*qIV(2PP2k+M|E^|zZy$$O@?nlLAKG`zUXiu z&osYifR?9!Ka$H;Niw(0+0~uzyS5 zNw+A~QR&%=r@5~MJNo8l%?ATKbg*X8l?r-401m{&;5At`$1)gvbD3$UNcI@ zX+yC?NFPX-qi$~7G)7Z%I954gE1N6U3a6FFjMPOA zHTHWo_QcMra76k1E>N{g+Rht(27s@EEeFwC_3!zzK1WkW(_7unnW^dO&8ey>P1dr9 zu@waaB@;EDRYFbFiY7`}-vH;GscGthRMnVvV6et>Zn>H-wrH@HWBlf&86~+|QLY{= z$!SirMW(Ics6{!FnFBczX|U#N<;tN%*2=*g%o`ud;q=W}Z*sPuLE9Hi)+P+rJZaap zC*hLGnjD90H3#yf zweYllPS>olTolzWiLQt|Iw)6a*Tp2inY?@+`R`0D`FfXSQn+-Q&Wgv)4?J(y&E`p+ zH))7>T%-(&vV76VVV11Hhtk!&l^S4Q_q|BdI#%^ zvJ<=s#B;8EDM=5VzuMP4yyA?vvA$w+!wME(-l~lHQ$Gxr6UYNIH11#|r#aN*G}W1= zHc4X%cVT8|vUgu}Ng6oDlQjRlv(3GugYrnh7d(aei0?<%Nki)EYhuqh?@y|`CtrKS zcc!6gx#GYxOEEQl*-W8<0Ooux`Azq1Z}d9jM-toDR$rWSZ@wmv^H^DS)ECXCJfFMc zsD8^uzdTkqj1U)3b-tRExTa+y(ZPkLD^irFNqt@TC^YFA&DZpd@-V?(Z;T!?={T7q zx_he0x1EbIdkls`<8LW=7VC48l@r6gv-N!EU(Vf$;hvm-FGOqiEry0=ddX$$#_@*g z6TV)*l{QIFHiK=46O&xHry3(=e2&ReC08l>m6TojRrAcY+Glc8=8f_kNBGjWr|sH> znroqEtKpK?4Vf*p<$2ob;ICJ!30!UWjj3Iz6}8Z0pmo%DC3dbbEt5+*yX3q5{+%`P zT%Wu$K|&ckiF{f-u@ckBfid{c5#bAWEj8IL7dG=t+Gwid$3W59fLxEVMy~Ev9crVM zA8M_K(l3Gimms_BF>;?NK9Z7)2W`Dk;oMGETO1GUiBk61lJ-O|ldaQ}ZR(-}d#s%B ztBbK$b9r(^u2HU)1mqS;LrI$I1^oB&oJ-(&E!mA4-izyp@9v52L;2a4Ez-O(T;&QsWMy~UZIC4`=dK$g6Ogqj5hdD0MJ2RuA)!}KfNndkkR+?3xYV`6V0+W<^Gb@TZ$j0TEXHD}o zO7kX3o9s|0rf~<=Y!ppuZkjVUt*vW`#sz@2OEe}d-b5y(3c|TF)h^MTlL>Rb9_D_H z2?=w*CRZ~X!rZSNSgP@q+EUHe-8n3(wd+1T^nDr=7H|C8`!srn{z#drR$pl4zTi@= z1C^)ul$t0*D)8oh&eUryrx2;vx0kh_{)s1ZBY59ID{UQOA za;+t4eXHR$rq^0kv3OU}#lXVai*h97tayG}L0&x1*A?hz-#jwzo2)-A*Od0Ve4X|3 z#n=KlKqiJ~4-AmTGMR#J^e>vS!GCtf3q_6n#Rl$5at$_~3%f-L+)OHZL@Ty%JFJ+CPj>E5 zC#hzxbUIsdX|^~@Qnex=Iiz|)}-UCzB8&cI)J%g>g z?ekm_B%zPOQ>1NGSCYk*#&-`3UsAa}XV6UY>^>LyCFPzyf-8HdV_&5HgM%~WX9eAk z)RLv7v@d@c;`{P=-5JT$p#4%c7RPV5K=f1Yo8$%!->I&+*nC7uLUpW%vG{#xULU7Fp=2|<=am|^_ z>2$^I1`;!qz2H+LBu^uvoaQJ~q?$<17}tVp`@h|rkQ@0VCOP;oF^DJiAz$6inwpzZ zH*8Lb{Zg9|b?i~p&guTz78*P9U`@~9!##rE_fW^ZSbH*1`(vQ?r$Ft`f$*(u{lVQ* z`4Pz3@PoV2>gXgc#vPHLhp4x93Vzs49Ui5Q>!glm-!hsO>yQ00gDcjl>LjCjW2)Mu zvD&(4@I4DTOHFG(gp{a zreS`6V~ZPDYQn`p_?y2TLAKt(8rgulAg%T>O`RVl=ZFiUs)DIjZer+9HW#(i&iLDE z=S^}dx7A!^XSRLAtg$GS*_6oamUZTB2kW*SUT1c;+g4q-ttR++qxA>3Rj)t1t!AAu zyvpcocewh~!!@5a1Ss29Q$~=Q;E?!+uy5-@-~N-3`h)fV9P{aCMV*6rL*&%u4K4YT zvX9nw4%Th8ZH+08;s*geJy)~3an!uC?&=wOsHA(}(DbwmqZUMuPIVS-tDdLla-D5k z^|~0z!r`qk>kn?_MqZR}D@zZqi`jPg^J>Lh7ks+$=hdN5UGN$5S^BcJu~-}SvgS$J zxJD~oD|4l5w2d!orNtUchOO1Ab0owXt!DJb8Np%2T8+y!GuW)UJ)di9niajGO_&+1 zX-t^Z*R-r#65P9kg`;X`23e3bab$HYrYCeN%@6uoIxcn<6Nwq}gfFnn3@&%uR&QJ@ z8>ntA8)O4bWP|y^n%LS`^!&W05$6@UL^#eXT$Hh`PKeWgsyLg7dSYziYua;ui*;W15scuN_F^bm2fc-;WM- z&^+DiHV=DV^ENNYGd&f4MBjY7!Fg4Z!L*sM&o&QE9@`{%+i1Sx8+|wDT34;QAv=LqdcwGKCZbQ*WL&(X%yaS z-8~)sANal_#*{anEua@A)oo@Gceu~irfIe5T5Sid_Hj)$rOVM!ej_1QqgoU_u9b8N za=xpVrcj&RHR!FQmN-;eYZAEN6y24(%^cV`0rzG4y9C1p+~Q11x2z~O`H~8`lYO8| zkVlBS1Yh@=Hj&sewRyU`nv1-N>BI`3?aR+x!ZpwF@>ywtVr$XgbS*{C=$eb3(>UC& z*0`_D4^Iq9_byD`QWzy?lF|I)#pK@2Zv^BgBl6(z7QI!rtY~bWS7>OXY$@ujjW<^G5y3Pd-oOj6J^9T({M_ zE@rE7osAzR@P%caSwbi^on;rW&bsaJcfs*8n5+yYGvk@z&!Ssok#YUOExs?-S&3}k z(lEq`R=v*3^RtnOA@PyWdIDE&qWUv_oAY*(^y6L4ii)Hf?skv&rfyuN(GP2)=~k($ zv?SlqI_Z|SVXHKc>4Y!iSD&N#+098@6C3Vr{hxi6D8}cB6)U$aExq650?e=aZw%a; zTPy$cvt7Ay^xXaR<=%@cgY#Bu<N*+;LwDnB#Z@ktqx zz5gYm{!^n@c2-ZU%?#?dZ~2XnGb^<(cc#_hsYNFP)6Z}ts&&zif$3+NNGkd%F#Q}8 z(M3N8rk@Y+Km*Sj$TfWZF$}dydhldMEf+&?&u;iRQ=>@AtY}#J%+8vouFRmx6UV2S zdxe=ngZm=k4rKwk~#O8NUC2jpBcK@Na{@|Pa@=MzL zD>H+}$Xb1iq}@iJ*s+r~}#nU6*tav)7rz)N_xtbN1Zcsce)7vSYWM7=Ct$zl?zOCQQlb3D$ zYuozu?YN6pQ^y|Tr*IQp)6JZ(TkD$fg!{Sh?-+mkEgjE|>aU6NGrESE z9GQ{d`87$|Nz0ahMq&rD0-nY{4+|_`llAhjz^1H#FM|;OgXH*iU6Yg@(ouZ>-cj_i zr{*|}@^c~mhgr^dj>hwYANe(t_q^P4_uap8;tSlsUm@pvZCA*b(`bo7a9?F%)VyH) zfc!N%dkjWjIX@2A>vgTnDYi%eew5{HTxgjWymkO5<9z?;l8=E4z5LvaR6AE@8gGy( zLh!q`dBOMlm$7K9FMfr5>j(!jox1v(1lxbD=KnTa8tw%ZC213$4S8D@HPI&gJ>*R+ zO4cSk7vkYk&R6t@OF82FXQJW3w3f>=|8+3Rb*CrV7aLYOohwhITNMvonfrSkc;1x@ z5r&e{ns1N{Sh?9B#r!DE*KJ~`r#_Jy4r27n(<4+%lK$;1d=Zj6CGxPU%NdI1>0M{Y z*HXV^mYeFDrWxhu)s{okG;WWUOyfZLec2!7n;)?J=iVdyh2PWiip@0&fA_S8zkB{? zYO*i-|Mnk!*czAAqFs7d2S0Y_=j_V0yhbTU_-PD(Gf9)r+lIV6;K@{f&zBtSoHKgA z;d&{$^DycB&kelTRbucQ|6QhEGt!c(u6&;VT73;)>e0;m2yZLzA9>4f=}+;F<9(L5 z{Dl7^?|9y_$t2zin@EOeY=(`{j!m!wreJ4e^ea8E6UvVY9GHQVQT`5rihXb)_QNGO z0GHxmd=Q7=BRCFMB0u9-R-ydd{~651=kPi##;LdlZ^V~zI=+T8@hvRCbvPS0;T-%Y z-j46%Tzs9kytXng^;3%Sw;(=2si)5{3U^~Heu+|F6)5$zp0~Uzndi?SCfeV_|FtOfe-Y)+N(Hbb2C)^&A9IjD z9c4uM+Yme%s6`wV=)QTijdV)SJck6K;ZblW~#rgOlF2F6g5Vzyq zSdNQu2QJ24xCBdi%d3KU>9>1P`rS7u{q7Lz{SIZEe~;4tj$;g-MCpHAB+_5MFfZYK zk#Ofw`e|(>+(m56d;q1N^5Z_epYrg$-anh5^v~uf{j)Vne{6@+4^vS3AD1`qX$ZV>xI(aoGAV6!ASmkGtWO|d1Rhv2c*j@eNoCk044u}QOfH=Dd%vMa*RYN z?`V{Aj6)f}IVj_65;n)lDETjrY$uO-sn2;R=`KJ?_b!z5?nOy&3CcKFABp!c^OCO> zDDhXKjPqwvw!0do9$!S+{y$K*`x?r)UXL=4|A|t6AEAunQcT4in2x)#BYufepA{(e zxevSGe(Z*au{(ND#`zJH`aXtI&nHp#*FU3-@6#yb+lNvv9y-@wzcQc5R1llU5(+8x zWO8(oS^n(<%BPWr1f9QZ|%zGl+>A}3TZwB&D>C1<-;{cR; zAB<9;St#{63Z*{Bq2y~kO1U4hbXSEAJCDwO*CJ4$^PV}E=R2Vgtt6ue$$Uds6@O3~M$^y7^v z{p}r;a{m*h++8B^K44zreT+1PvJLsCl<^_y>_CYxe^W=sJ%6J>PiG%WItNht?Kdd( z*FTc(LFOghqbTVfLrL!xN|5s?>H1O94WW#Ot0VCxu*8o+iQfzfqO?Q_l7>>gjwtc7 zBJsK~FY$Vz#LGa5Hvsvk4CX`P4MW-f2$b!PL#dy!k#w?|mvnMa;!i}0HyI_~btv1t z9wq)%l=yil{YgcsmxU<(X%R|)zYnEfJ%G}$9>J#gI7TrYrQCHW{oxWyx$9BRLrkP2`*$l!d1Fz^n}9ODnxTxZ zmMG}hlA3lUK4j)AshbvLeQ&!<1{2LC&=WqzVfkW|q9D@gO zJbs50@CTfXKjQW1!yD0$)6qy{%s>nN1!M3QOu*YP8RubhT!41G3rFHY9EW$~WV{!z z!zGx9OL00b!+iWJ&cw&?c3h70a3x-f)cYdlrT^TA(m$4=jDyEf`oSA0K|e)lm)$7+ zp#r5p>_usxLn!T2jk3S@qO|`}l>UDbr62r^(r%|w+U*kBF@!Q6V#!1YY>d*Li74&a z5xZe`ly>cf(vBG@?bsKk{raP{+aSCehoTF!a2V#`aLmQgcq5L*JRFBNVKz>~Yj8SB z`_9BkI18nHZ^LWx4xEDXaVjpv8}MGt!^Joa@5h<=SDb@|DD75+_v2WpTwYHzFXL-9 zO8+m$rnnYmyuE@_&u^gA=i4atDSyLNUh9~b{lG?)Mfs8CA4Haaj?%tgp^Wz*P}=hZ zN_+l*AyKd*H)DFjYd1hp|o2PcE+aI1zTcw?1a)@-LWV3!d}=Loj3rc z{cc1Vchm4Hbfb*70+jZehof)-j=_6T+HDa^dlf~>xs-V+|6h?Vr96xjL3s?N+$&Ma z{S-=+XCv{RW?sg@v&b$^S&a-?r5O3Al<*<(*P_I?N~h=bGV>Ddb(HPAh5S?2@gd`8 z6H2{q$CmgRO8xCd85b2O?YAH8covJgmq84Rb|B5oMFJTte zqx1(e8ykaBI1Zyx#%&ztU}KbV+X7|0w#MtQEy{Sc;|-XGGESYCkA3lG9Dp-%FwVxY zDC0K==i(%k{q@>Necr&l)aT78{o+=XesKrVRLY$ghxee=^8+Yd@L^2AM^VPz3Y2m8 zG)nzHi_%|SN9ix`ql~*xk$=h_KBS(%iR5E1^D+(&pycBqO8a_H@^J*|3d&KG?Vm*1 z5B!4CUwtU;e-5RqUqZ>3bV|vO38g<+QTjtPO8(+e`o&L?d?Yb%X1*y(y|h5dPg|6F z>4=h_9w_;7pwy52!FI{lK$QGkg|a^!fl@DHP_}<9%6Pf~W&6`m`r{0wizqi^7o3G% zaV~bph1e4pp^T#?DC1)(y6|BfijU)PT!|yFiIERpe`8+q`#eg1*P!HgJxV*igOcyg zk?>n0>-VDM{}4(&c~IKZhti(sQSx1fGVU*-jF&hDljJuI_5CNxcMj)E0q0bHC~6`;Z*zqZ@`l%?O%)1{ugmNYUoBQjdC+a<4lal0&I!1 zu?^mWsdyW9$J?z8z8&1R+oPx4{yBTF1&qnF*ccP5ryRj)QMj6Ksq4fJlu@ydsGLEm0 zY;OhgGWk44VF}9iUPIa5W|ZxfVk7(nWxG2t9=}4_{=ZPRe;8%^$5FO>9$VnA*b>cM z!}*BDHq19g*`KsTJEmX?-V@1RSLS812TJ}1U@W>&@-q@8KiMexxE3WJH=>MtH%dNc zqilaJN9`R);ycK$MtKiudgXnj$jaVG{y$`1CU>Fadk;$cR-)v8KT7_Opyc~FN<06ElJCBwj=(2zBo^Z+d>OC9w{R-{6K}#T z_!s;XZ^fN>8&=@$cmU_37w6#-RB?!O8eTszFa7BRO1+#!Sv4ZE{>RArUn1*IMb^vp zT6y`Hm-;)8Qh&dq)L#&#o#dbx2L_b(ni7d;VqUguLs`@Ur9C>Lq|*f@ogOIZ?2g3i z$-LyVH%j=vDB%a7^pC+P;fG)>4nye|V^R9Uc$9XWh_WBN7G*y$6{THoLh09Tl>Omf zQ1(N&p!DWLIrN6$5G7dgKDeo4P@mq>g?oUz1@h+5d ze~D7wN|f^MLmAKCpp>%)rJP4GU6x1k{XO$~|3N9&&nV>@A(`iOCbGUZviuTC)BsAk zf+*#x$3`fFM#?ia65q_cq~8c7-3}=6d!fX4qQviu5`Q>0M!AkAuaS}Yu_*O39;JSA zQR?SjQg(J1EDC_i+GzgtDL5f^wYLhJ&#Tufk99YTSvk|M(n-VkHj8eVB#c;7B}# zqp%uBN_4~KhOlFzMG-ccN>&`-yWr&zl?0(&b(~5 zBg*!=psebKvb{bi+Zl>!n1!8iB+57#gWYf}%6RxLlI}R>r5xi?`qd36>D`2~U%MF- zumC0hg(&;6B9#8}6iU9ILCN>uQToe^DEVKDGG6_W?Y+dj4*P9ISw2`J65Cg!=otWKZfae5jiBjJSQ0ikLN zsfYVe>fr(Gj1Qsok4I7J<#CkpxeBE|p2Oa_1~c(xlzMpsWt_f^{qdhD`^)!H#_5OX z!cTE1?n0@jFHq{~8yty8aTK1$v1nprejla2Kg9011*P7%q11aRQYFeKn1Q=d>i-Lrdap$3 zmwQp_eLqV7JdDymt5N!=7p4Bc!z?_GQtu~G>iuUNjb~Bn|2#^)|BB<$kGU8}CMIKJ zl=@FZssAP@_1*%d-dkZFw#8}K9%o<*x-lJZ#;!OMyW=g`6K_Q)s@M+~;8l1R4#B%| z1m25sKSo}onK$7Cl>OKwlvPtu+IcF<_{&3S=jkZpFdt>V^B0tMpN-P)w_zgA#UxZw z+W$_J{m?zw5*MS4$NN$G!2>Ac@gbCP_$b=(ag_eB5>xR>l>O7wDE;DDlzy=qWn30x zXZ$fzz7pn*%>M(;_!>$%-$W~}N9oraQOdg=rM%@R<@`00&MxL9oi9<+sX$5R2uhIS zDDmaKmArmrUh4H1l31}*(l|>4JH2@BimD%m+ejL6HfP9lyt90sgG$W z^)VBrzs*8P=N@c|_oLLq11QJQhf(U`F_ivPh|-@{p&eJF^rvE!e)BSR#y7AlZo=;P zKFa=ME7CN|CrDP6J=hodp9bmskAI=;FOH(@x6h*sEd&~dEpRw?!x8AjQP>B^Vt>2_ zuR_^R55*kJLfLO*<7AwK*Wwhs4yU5*CvHaBPZ!_}oP+te5M}>x4;J83oP~eI+4vaV ziYxGTT!{;?81KXqya(5#>@POq65NjWVL2|tN_+tK;X_!1594?E82*4O@B|j(DSQIY z;ZsUrCPQ_BZ5kEmU?!ejj8QzAw z@OJzHRs0ecU?ncb{rCVL#fR~Gd=!u4Q}`qP4S&Yf_zS*(CIjb<*a~09HuySr!1x#f z@p_wi8OQIU4L?9xwH+Jb*C^x6gED@PqKw}Y*aUyUrg#>cV;#zP3!v=Bv-zPea*n zx>54Sk9+mkEzFylx&tkE7fSh;q3ntZQGynsq`L|w-8CrbzJgK@cSh2CgLxzK>rnEy z5heY1P||-7rJff>!hg)Xgx?!kz8|BQKZvsZYLuWgDBJr1<+yqrWxKzi)c<*u`maMN zpC4Ob0HyvzDEmFbfbjXb1$!~y2&H~kMe>u#yyUktN<9ojsn@Ge%I`uc|8SK09Ep;T zu_)WW24%aGP>$nkBI#boyp(epO1(UYvYkg!>SYB=y%eF8|7n!%{~e_so<~V)4N892 zqSS*~W_bOBd5QlzO1!rs;WkCWy^oUL&r$OGFHFX7u^HB&)Y}gz`9F!NcpB630!sh9 zh|)g;*cC(A4UL>E_CPE4#AuZIjY9{Zx6p-~Fbm(q zk@z8w#xfj>J1`q};&|MT)3F-!u?GKwKj19<8E?T0cpKK?9K48gF@Seq2=BruGIKY^ zpd80q;4*B958$#$JG5n9+NlFd`}9C*mk}uaa}3J(n26FI*P@Ki+feF%XC$3Fn3wqT zQTqQ~DD8SLO1myWNpBfSlm}7LeFP=lhP`Bv@LI#Xv|pdd{Hx4M`QJjx?*^3ozKfFI4^Z;E6{S8(QS$u>O1?isX@@;1 z^>PqpynTz3{~DD1e}^scD7M1Uk?kL2UfSUolzwmlB|pESE=^v>m`Ea0YKLcg^eX$J=z_xfb%JFyz+Hp=~dt;cF{N$qK<64ydaT7}Y z+=fywb5Wwq!?w5pWk2!|O1h6?3OsS-@HCFWvp5!i#c}Az9BjnN_(W`ux!4LPVOyMnshEcy@Fwhx z_hJ`Zf?e@GjFU>|mC3xc*Jzab8HZ9o6H)4AGD`or5v6}mL+K~^DE<5|DD5&ErCsJ> zTU>~CydR~1KZ;Us&!W`VTi6TNV{hDm8R(4U>mBB$pO>NZuN^4uxd){^_o3wTUnu=( zNF?5V<|W?uDC7AAN_-zmIr%@K>gB9MiGNKbUN92QIwZWEIF#)qpwvqfl8Z8;qP-zaFRmVaWb|=>3?Z>9d^K}*cqiCX5%!RhxvFH&cu7L02kqGEXG^#WxNev z!#l7_3dieBSGc^JFqZibQ1)Znuo;%4>@RjjGfVgQtq>n^u5em zm_LD%{x2x)?L%pTGnj-IunB4?`zhnl@b+U-wr`P4@rq+!`ePDGyER2gzZphjYn1KS zQMQwc5;YBFJKa#)GZUqJeNocyhtmHBptNtN$o2*?Fa3T9%Jzn#^pjC2{dg?O_Ht0R zHwC5WQ&Au1DCKgal68q)If0i>P! zFG$PRXOQO4uOTge&3gyGwt%$!Z3AifYYS=q{k7ZO3CCu4ETom!1W22=^Vf-xtszf=wEB2Dr1cMHL3V*W7jieq3m|ugycn_v z&kS{?_fP5M9V93`XCqcdmSq=FvP~zL&)PH8$+G|*%b05$PFP+hTItP zRLD&sPlMb7@(jqWAkT!{7V>P!mXPN_wuL+oa!1IEA$NxS31k<@pF-{hc{St!$ZH@+ zLtYDc2;|QoCqe!kath=M$mx(bK+b}^8FCTit&m4U-Uj(&$h#p=fV>a#6vzi4PltRE z@*K#AATNP@81gd6Mfm{Xo9OSEzzk_@o@(+-2K)wa}C&<4*z6tpr>%O+zhf0w8`(WkPRS@gKP|WB4ks@lOQ*QJQ;Fh$TJ}~g**##E68&ow}reMa;bIh z2;1YhA!HlKMvyx~+IZIk()#N?A#I%42hzreeIc#Cu7b4wzZazS(*q#4fgB9E9po^` zwvb~XcY+)bY2((xkTz}=Av-}%g0y~nDx~$>he2AuJqL0R$hnYvK^_UYH{=PB)^DEz zY5n$Dko!TN2Z=7QaI@#@d>q%u@uiTKzsn)lgS-;5G34FOU4>)gu7PX-c^%|>kk><+ zKW>CH{$|MaAs_VfZo#pg_e)4S?>0!Y^O=8tFOKcwQ;_DbKSFK_`De(Mkkk5yaeXGF z`C~3*N64j+ogr_9G{4*dX@2<~WEJGgki8-Q1c|Ps@Mp-rkbj392-#pj7_Zic9ERg9 zAxA>Ch8zvq4)Q?A4v;n;;hh`FIJ76^AvoR}vIyA=ax!Ee$f=NHAZJ3(hP3f#9^@Rz zC6MzV4~JX;c^c#*$UQC72ZidmRpGei;X8`I!jW7_u7D(mxB*{ICqt%Hb$TOaDobruqy>TW4GdY5BMY z((o^FS12lorJA*L*t}q0!)wzV#u^|C>Ns`ZkBO{BH$m`QHxG^4kj1#-p~7TSD##nT$t}mfn$& z)-J|Dwt<`g*%tB;NK5}DNUKLvAa{bC4Y@1iJV>iYiy%8gE`{s@c?9HckS9R)fV>ED zPsmFlZ9KXGvJd3VkbNOnLiU5a1F}El-H^y~;Xz3JD?E%pLm;1q918gy=lYiy+%TE{5C@@(9SmkS9QngggmyEaWMW;~-CioB(+`kUXl-h#Ax`YxoU?=O(eAm4+udifEg)yt0|ExlhrT6({MwDi_P;aYud1ZnAR3Tf%y z2-4EMDWs)y3rMTKTR~bsa;~SZJC4mCJt3Py?hUyC0CP140Ns#7; zX^@ux!yqmHb0BSeoCj&`VHsq5$fF>w9h?ZcE99w=9U;$zw03YFWH-pmAiG0e0oeoc zI!J2=Dg4__&ejje37mn@xzL0kQ)#gNm zLvd`#WJrrz3~7Em9Ma0`Xh`$tv5@A^;~}lQPKC5`It$YLdJbeu$crJ{Kwb)Ie!U!W zN64Q-njf!+wEpB~$gYsLL+%cFFJu+uuOQ7|k3yQC9*67?`4pu2>lw&_kgr3U-`<2Y zzsP(R+skB9qlZ$BRC#{>O%v>y-i(^y7toTK}s%W7e{)f0BeTMh#R~U>6 zV|72ojVcZrHfYQ#NQc$mC~ovoh%*Ht&M5R9-!xD9i8O9B=EjJ#J|n~-EgrXb8rP@S z5S(lJtgQsD&#=*mYuYmOYgycoghRA*y$6}Tmfto{=I_SQSHH#QZ`bUftkY-DtDai3 zu+tPor6I(H!^~IZ`l_lbrKOTzD)}JzzJ7`ClXJ`cR|j7W={u^3)C{qmSiYfdgfVvwCa6)<+h|y@$^+XY(Knp*4Z43Hm-jT+I2@F=6cw^(p65$)xQVSDbT1 zabe9O+YYw!*x2^(Ei_ANWcX}|ZprF2^h3o0S$u6nSo`D?evpHEDsL!rD#2m+*GaaVBQ-tdk zE5qkJuD5dD&h0uzYyK@!e)Np87t2m1FHlkk2E8IjXBIkbjxo|diTevca)Xz5xSL5GPFnu=($NnefJijZ2^X5P- zwX57=DG@%f-0Ydyarv^JBHpPcj0<-;$8o{NlsFV;Og((&+?k8-O}K2FvGx1ss0=qd z%yH%c(f5FVpK@;ZIpLbeM*VXeFu!%X4San20^jw--1}F~&~D(e@$Ciw{+B5i#-l&D zU5;-YRqrI{R_>Kj)tc<_G> zLV&770!#XF8}EzLX3k~%NX96{(SP=A>)3zmC1;2G3+yAgcZ4e|5BJMogkyQQ+O#}Y z3&;6J#s&Y8V}6?vaLM)WM7V+L-}!S&*S?0%j~d|rmGy5}i-$dcR>;FL{I9C|e%HUF zh7T>;M#y=s!=7KTVKKq(ZmHeM>)(!OFBU4T-`)>jC4cvHE?!&pL7YW1?!U4AeLG2w zCnidt-8W&OQa=6_zFMdCZ}3H_-P+c_-?&{9hx)1XmBrb;7Zx4I9fb%qt&%vqcS6^{ zS0m1Pj`&;~v#kBcagQLbQ547Z5u(9`^-=JT#gv8@JgU8;$3JuZn^#63f-{s{ zMW23$_3yV(_M=4K+Skb&!J(VffwT8K)MfqK4qRQA=wbb z=hAv*wG?|Nju#hZ3l;Mp$E$;o7E8{WH4W0Z8bpNrhB&4r)ccT@ke^^9G30+1c-|`c zpmUV;qn)DfH6LH#pA4QzD-xm-Uw_mgSC&bx)L2Sd` zQGw>1#?c2MeZdF8w^61{8A2o9q^RVBEuoiTOXp&{Z4npyppxC-$8x*faBdj4vU$_v zF!tslh4fjnoHucN<2-`vsC^=}`#|4r$)0|*#NU?g!HD}&vY(yBjYHffQ5@$;7q<>$ zDCf4UE&I6*a@PpQy4jnY&!v|R6*cQlCA~I@ZTM zp4p=BOX2oOHH8n&i2kM(9g|;W1kqPd=AV1l0dumobcE#maj=TmUcbA zEri3R&m^2c&hu-}8ISdGugdYXf3fF~$J}@a&JcZVgyWuis?Y5zH<5r#`p=$o9^2*K zJ8}A@hj5b}usuKv)Mw8}kM-4ruhYNOr`!xD&Z9o}bCu{LXM2SfXt!?;7btM9uYV3_ z_hMV1z5{Z&Kz#?!?T!$A(Ney|?r7oW(V$E2xsl^sfcx1ozMuidlSE%Ox3ImNE-2)e zm|wrPW6!I%a-+T{l9?HPE8?8#Js$ctW4~b$2OJ%r7qW`KetKX^_Nkf*E@KJRG-_emGgXDFZ#A~MbC=eyM)_;23;~Aj|qq2vm~&8c~&^i!wBbb z?FhKc<2YX<&VGY-+0J();Ii0zOmWJLS%v45^kw}$j%$8X~^Z8jSw4_fo{=+r-oLChdCpzAao{`+Z-yja}c{)aUiUZn})^ z+O>%|(9aEo<9dNCxkkcqy^wL!l8?=uV|lRtku!M@{P&}Tt5@JPj2|PuY7*vg-iWzI zwD)Yp<+(jVYlTi2n_PIlhu`@JO1>~lV*uiW?h3TOLDaiG3_!r6Y21-m|B zf!qY)?0#DdUy*aWhYF{@qVJV6f5d@yCyBn64y_TpQ-nj6Dhbr59NS<6FC$)`4*M2a zTi7vY?mbuR@_P4rX_-$>(qZo~iR&)cLK~8E|Jl1uV$Sa8iv#_qT-jQ~_1Qa8VtxC@ z%J7+fv3IA$TyN!E-#NndE#pF)A;&huHA#&B8g1shL|@istnX}5jo%y5FW!gQJ6tS% z)VILfOv-hgRz1rnvZecVLD6=uuQ+?rWTt`pb-0$5#95VM9QTLpH10o#JtkM=N;-9k z?XI8vPBeTKxXz9ji%abBbxE*mV|E=1op|-aa2X9Ynk2t9t!TsVuZz80Y;?(NJ zMYpmBFPpM^D=KjuXY9QpP`h7#a4X z4{V+Tt)Xp&xu_X=A2#qW@jd50w(Ho?zVy&(x7g3|eQrVd?zFKESYDwJ=?Pia~zm2V}EZQ9;j6t`*Kqtx5gvM*7tY#j9Q_ao8A`Bi_>XYWIb z?c%T`FnxW|*kg|EV<7dpUFEn>bAWIIMIX5l)eVQ?l5w0H;+s0I(Ku9KII-4u8M$5)@OUqR$QNXZ`52#pK`puMYVbQ$~e!5>KjW% zOrPJ2WAFR2^l=P5R5&~Q3?1=a3D-2a*VL|wJcRhF$#_Nu^WkH%y)P`*_hG#N@EVlq zYt|6g7G*!81>&|y;_9c@KiVPAf?Y3z$s}|}+?LU~^ozZp%+Ad-8cEqtDE*?NCZ_@l)X{07!0PY9fc+57HdeY@9hlze}K`_B&gL!ULd zWKYodo9v2kge2#T1k@sFgBvDol|H2nwn47#f59^Hw$Kop7qL%yE$~)y?t6O|U(DsL zSM6PWF~{}lFR9P%+PnN>j(Y%il5@NEuD_V$x;Du?{xH8?gyXvQUeRao2#oc$q#~Ep zXYUYR~AWo^~#%kjc-o%~zs zb8dxjecbMgg#TAm=EU4||7W%nf$nkD|}s@fdSMsmLYuJtZ9H3@=lk=i@Em z#=D-^$$36j3wLmiU3-^goW4VxdrS1$J0@dpQjR`*2W8AncJ9xjueoqFIr{9~m9f6* z&b=r4S_^krj=o)mo9)~OqR-xi8QYzgqi+x47C85b=<6liV%6v6rreS`a!Zx-`eN_w zjPr4nb6-gM>|LHQcWjQnQNkVP+*j1+cE<~Mf^%!gd44AgcXEzhdxvP8zEhoR%rVsU z%@*zq)tAGaSx4?H`a6iw{XYZ7a^{sHOjp(~gxEpiy**j@teK$F`ljyr!xLZ`8mz#38D(Ce;x!auU z=yvUJ5ytbaxqkCS-R(K!xxGs_&d1%ZuQT)EcHa{2e&_Ze=lQUA@W%QcbdG|1Jjy*p zz$H0*mv5}^VdXr1%02GfzL8%}fnV_3dOQYrNP`aUm;V*N6sOIuwlNA^ zJ;(Zbdfq0c+~h>Fy$?E0A50`+5`C~3KMY4mec*L`y_~vh?~#u6Z4lHICW~Er&veXf z=-f1N?!QNKILFg9oxPtr*2jIM!$e;mSDQXw$6hG^D&xdl{zf#WLs~zhr zt5@Du?Y-MEw*?isWM60R+m1Q=90%6FR?e|4w2C4Bd?PAHn}o~SmbLwVp#J@We)0W8 zd!M)2qQ1!utOnuve9qbR4?DK{W^2UtA&Zk|FRDSTA<4SY;%3fWY>_raWE}g+D#=?j zFcwZ^THN>c&hXd=tQ&#O*1uzgV;P+)`l^N7jEY<`efBQ$*e=`tnWE3$Q66*J_NkBW zFy}tac5ct^3A4a5w|ASz`dTL6W`C&f9O2qJa-rzEP&h36N&@vgB3w78E_HoH?@O!; zNy^gulHGFp5_|W0oR1!^?=q&(+k(BDJ?45kcO^Nm2lnpvN}S_qU-F@F+&jER^yP82 z>D!xtOO~6xLq1MlUAgkT$k4Z|zJ1H=qTwQZ;&$0qtCHB#KX;;`+PmzxM_KW?6;}VA z!o=p6^ozIsz-4X!M*lwL{2IpQyM+AG?s}yrlcOhKcZ-C}u3;Fr8g}m%yMfE>@_S15 zbz6&F>w`4>0g>B8c5NPUC7>oV@XSxKyRGPZ(#P8SQ!bPTIksQg{S`T{r>$L|a!e!J zn{xEuW1_E}=p(24jumbz2c8st#|xL&U)>;F8`t-Y=({P0)AT9VmVisPqgzE^ITz~v zUCy!op?a5vcTq_9BwSYShk<$u_23=m!|Q$EvikRhfB%P+3-#bhNgwOM%jCQsyeZrU zk~-D{Qinb0xs$2_e5Vg7yP{5uBGi<=PIW5-*AFGLv@Ejy*Jsv z*qFZ(n-_ehDzAwIF7vZpgS3!x-oGeEKL55w+9^q-e+;4-^yU17?( zUFBR&Y__lw?A|MOt-pUBc3E$jUwd|}U3X+X?btAQ@Z&Unp{j@Fe(I_e3tbcw3-*%XZ-*CErn2%;s5B6>t09+nmJKDsstoshrN`X?K|DYv+1?M7y5f1BK)KZ*y{<--*I?)bzQ& zLxtuV$VI6H^a^j#rb ze+PCHeR*7M`UW`AQS@CacFCps+|SAlB;b;MzESjz_wT!k-P?tmkfZN@;SP0fH|q0x zrQB5K?0UNewvWd|Ul^qVvo>yeh9sYu-{(Z%Y~|d4e-dt985dIWrgQ9fdHpEH`=U>L zH{r5=7g2?thv9kK%&(7Ify>5^JN)~U^Komn*mW#6TNnc)?^Uon9(D(d-N0pb@AL0d z&h36s2fH<}`=Qv~94T7{y9bKhk3`?Y4Q=$mKACgHDRZV4dk@L>wD29vlILi|_KX?}976+_>HEEZpK|Wg zj$*fIP?P@UGjQyDJ_BcFw<*Obi%TB@>v73>`V5>_(KBWF4A?g?*x0&o8UEwBGs&}Y zPa7UT8#g=ywtLBQaKkfTw@t1ul$`q?Jp(p=22SfNE#K=iVEGK3PVVQB-~4Cb{QH0~ z=L(!XTX^?g*5BD4lf_v$8TBA=*&O(6tUEu)obV~B2lk$TcuqJtc}oD^r{P=?&puvU zgJ+b>vk5MMjqP|HCzvfhv#mP&i6?TZ@7KS*RD`Fm&?1kIux8mHE5yy69 z?=6Vun5_3lr}+qTR(pRz%vqbZaBM9c*AOR=^FG$zgAnT@7qn*We6VoaI&c#8`Is_X zIIG(hP9x`b^SD4~cI|x(ar&%puyBFsv-dSr;sOnQZdW-wCk}aB%NW9Ea`qmG*e>UK z#96-fo`{&+#eqvCANIb8nCnVKE~)PX;kx_x%c;-H!`?R$>+9*9T^q5$eAxRaVlHnl zO}VnYG`DN-wTSiYAIuf5rd{XkJryxG#<^>Sv-eoU+&JfcPR`5M-g6Oid2=Lt4@S&Q zbbU98K6@WV%!O9yFa-Ul+>{JSKC#@CLzk0;m15W4zY*KT_DM;gK6^h$%*}R+a~7u0 z-rEs#WpgPn4|}gi%yBMtkECx$;g*!74t{Zc_8yQ}-;vI7ZbQ!A6B2VLI`^>HwfBg` z+{tR!>%k$youQnk&)z!{>pNRH*Jtk~iMey@$emxtg*hwrah`L5aCZ0z#)>drX7e1Y z_p33_d5(VZIV;Ci>U-PurJT=mPLg@fuFl2cx3GJ1!ew^tdehaj@ZKh|8@OzKWzX`p zkaBMKY_aQV0*t?$U-gD<&adq8&z+>uy-*|^%CGxkALSg)geEb#eKb$!m*UlSc(If9Dh z@84WsrRQ3G7TNt&>?S8;a%CFRwEP#I?H_zmo{y$B(L<<|k8eC5>+)>>;EPhbwLROg ziTljbwT-8bzOuLu;y;V)i8xfD)Tb6V2ytPLF?)vEA&9eV#rozW&P>K}$082@(m4LM zG?be^`!1($@LfiwziAE5Y#HV4YBP}72+y3)E2Ce43w8rn(Wl?x*@pK+pRGr1pLLV8 zXwnZ!n(WUr;B3#cHtr>GcKPq1EWa7|RN<+V zu=!eeUx!)YZ<|A13U(v3(8le4i{BGBOS2g`+jnQ^l%_BIjyX@?UMbfMzjtOnP$g5{ zmD3k|QJ%gb&=>mqY@F_oM14LI@9psPaUX=^0_O*BUVRVY z?4H+{<2rO7az1a`Qn)SME(PbOc8_YTkJnOD&gW}83fG>1OX{W>U)j85`phXZF_}}1I6wEh&P#?4=u;dzXy~9q%kXZnWzb`BV|oo5@+syj zd*ImOxIa|a`OAJ^#qVeO&)*SbX&ExSSKm*Yhj-0+TE5r)A?!iftD*{zBcIl{1snPM zL-G8DbH~G?G8)%+jFb@Gb=Q}xODjvh%PPE|sjho-|83vLb4P1hKZNf&ckJeE!EDrZ z?nvJsg}$8a!}dVuOj%Ome~*La|C_!?_Wr-~eQoph6RpB{7?+McVGdW|-%JB_ZW}ji?-|V_BGreC(Fg)27L@hAe$; zK&^mX+n2RKyWPD$)9$!rW{YP6JICvn4UllmElTcJ-qX+JIB4Z>;k?vF7%!`YvvsnC zi^%ynI8e9^1D5{fKFA2+cuk!k$G6eKar~`~E8E|7-;Z&9^i>Ngisa$&{ecPBEWM{~ zXMDf$XuKnX`Stw>yKmZbP~XyIwSf0{)Ayr?^fJ|$h9&d0cOv zo7b77ujY#nyowjDXIk9%i-cntK~)l{Z;5al5FqFJju5V_EZwI^J4YYrb#_yG77~42 z!iDRSR-YFlejt4MEc4+$Jz4bK=k@t6`gGCk>ZLUyvF5ATr*^$9jhkIF*QioI*DP9$ zxMt+|aw4~3yse(-E4wGx%9riKlTf&iX?9pQHMX&cZqPkH|inLXZNVac5VF? z2kNtX1Y@q1Ll0A*&nF)ju8nh#lkr&5pKfD{7K3$jgyJ+DQ(-qopy~6snv|qayB=#waA_?4&<2chp zI8Un6S-tNo9NX`Q^nv@{?q!JW=C$8Z!f|~22laXToh}^9lKX|sM;^zFkUL%U+4vR* z*0nQ*(|vU6yFxf^m#k}7I>)hM&)BGc{uSz4SodVtyNBYtRhME6_6Z8xue~?ju2)ds zGG2jBxiEjR_ov6#HP}BlbdJviOy@{803$Rh85gp8VDDd#^;x^O!2MDBMY(1HOaJC^ zWn-<^1J#!|Z?gBg$LTA(7u&~fzVDs>vvV~38qRty(U+A6mg|N2%W;1|>gQ?6Y4*N& z(?NaLczJA=a-lrzJ@Rq-P%VzDRE`Ixgd8VA-> zd(XUa%m>?B%>EvJxjL!O*&N;4@BFcNk2v$;eWG3GHCxp8r1yz!oGW^tXonbQ>RErm zHfYystjD;^+iK(`1#I+%l16l16q!Y@`o`WUY`S(`S~C( z-$^MK{CuzEgMOY$&i$OnF^%+#t(RiI;IJgnFE)=~J2x#k?-l3h7i(G?Mj-Olgv;i@ z0|2dpUu<8{0{g^2iN5*ugJTvrSM)W69kRdYZ(q@!WN}mGEt!i2YyV`AJG?iDKKQfb z%~cncFfH!W)xv4ssPALpSa&U77U6 z&h#AteO{lFJ+0#Wg*8^s4YBpK4S#sQ+R~|zs8(5=|0dX44c{}$dspoop3AzspQnZW zIOl&?cv|e8<1=SYS%g!=xjybTPf}p9A>`@f`t7RJ2cci2q$Ha9cZf3pr2U9N}6r11{;8dBU~!@9z+OM+vv1>T|ow zbx_XpaiZw6c3|Ny+I8+c;dp)ZK5}mN3gLDS>e9c=?{&iM;lx9t??&Ou?o;*jDYvid zdtCHACi?oNDGMLiw=36QIk)?3(Kpb!r^N1Wg~KwfB+xI)4J)Ctu}8TPb>v2tanq8R z7d(CJ!*F?}ES!WsEcCJ2dv(C%fiz;T~_G4=g2e4TMV-+jAd>F+<; zeS#k)Y4X9;66WFIwd7-s=VM*&6AZp6wOiYLf=z8A;^B7{{P%|V&(IGM7v><@J%MtTgCOfw~;w<~*c%N1%w{Ra>@K0&pEG_-4@gtPpM;2Oe>nLvr zI>&b#=ao@4xL`NjCs@&^-{C&N1<+^nADf%4?LNWd!PzyC+PJg8)#X0H<>2gENp1Rm z25$3OxOKTtuu{3Pd_&y`@FEVOjpCW_M+&NbN<|4Z{L+~nCyjO$wq$MP`aye~5N)?!M-hpAuU`yvCkU)0{d zagOhIsidzsdFEUcUA0-Td}Q}UPA$ZiE2S@#K}>~oHulZA()toQ*M4ca%}X=I_f!|B z*37n)gfa^6sm8r7ha1=s|H&~ep}z`sH{{zpaMxU%Rz0-_H<^SnFS}=A3w*yEbCrWU zEu5?TL*^g{B`Lx0gqdbfORyXE!i&@ARof1LA@ErFUMmVnq8Rz=G6;AgyIrmnsS*j^~;I)ZDr_#A2*Sayj4eCby zgv-jK4}ev0;vDAJ*YOQS-vTd>qI1c*d&wf~F`Mt3)cX;xxrTaRHHaa*XJSLwr{z(d z+70E=PB@lF4LSE;XW{&78cxfjt8jVc(L=br@=z|XJo>mk&iOY=Q?9R18S>=JVBziWiUVM$)QQL7RcQw zT(|Ib;TUpm_ZH#0J4eBKuUy{R`M094Hx;?0zL$h6U+Ydw&Uno^mfJwlXNR3pZf_)9 zR&I7JwaZ-G|Hu4#xdkp;gZtjAPDxt!`fjId&$;T*s zwF>!oCQV=POW?A6O!9m@m~tT>zn6Tl{XRm@>%lw1Y5&6d+#DUeJ!gRJ*Va%L9-}_5 zFWU;2cfZ*V!j<2167r#(-djOGlcS&cjD?WO@V5qjZkgD{wXu5jlgM50cl`W9;jJ_u z!Owxq{CukW`L`(-($`+{!FkDx-kl#xhahT^_?a9Y|p~N zN22ds;cPD=4%BzPaJ&}tvFN)T;aE44dx4;mZU1HA zw2Wx?ZQ4lM7Yf#ct%R#0;4+Wv zmBVc(`udh}VGJP0K0@cBcG?SQtJ^2~vOc0W+J2LTg~9^*#m9iaWqrhM^@HKPowK92 zq3_+i!j zV|&4I+hU(Hi29s6QaJWGL&>>cP8E)Q3C+{)8NzX1GMxI{?ghfJ&lxG)Rl@D&21g6G zLOAv%V}-k2xIJCpA>=&2cL`T^Z$J)L)|cdPyoW&jcaPZRdUd*_?`h#|-!TsCb2_4v zj_bj&7{X_AU4$D^M{cBYUcNm<-x%j+Nj}C1H$F$-Sm7op=YB2IxfNg7raEHi8$U4@&SA<3saZcZJ!xyrd;_7J-Zox4Nwv9EB8bM);m+*0M-&;5j3 zR>p-sn;iRCY)6y?-dD8^7L>fNYT;six(a?1y?9D`p59m0`rGF9Y|OPZ@LuO{Ta`ao z_q^fd&(+Pldvif3m zdjvX)&zKMQ%TLA66TQBCkaEEf{1o!Lx#agf(RY&Pw{gmadhm~&^sO)4m%_0=Hz()y zK95tsY=q6Ocn-1=0hjF8HW6+U<=k#N;aZe&!O!Ga4|Jc}PP-DB>y@<2tRGqr@#E1C z*_dg8^(t^#KXiTgI^+C0dtYhiW%b3Mc~*@@2*>253u~t9!|oYpW-5%y4ZqJZdDRav zCbvhrf5pUp(->Vh;w_5yXIr$PZB0(M=K>93HYWvfp^8Jl-alLv4aiJ_j+o#>QUWGbRn!eheBR40q zyISnl^*M4O?WJ}tpP!`pZBl5Oem&K`Djel@i#hjLH^2lnu^tg z$YanK`{jU&cEhuA&yV~vA@$4JpBX$A+<)@S;E>1iXYwvc(-+?xAGph+^c|h1FFZ3i zPv2=N7vCF?YM-_h+oLUirg88^dHODgzA!Jz=Iz!W4m`Y2_^GFl^GVKMI6v*_1(9+- zpWNH$Ipnx^9hch;u)9yfWp;5nq;MSU-YRzY6@3GIz3{V?3+si6&T&1>dHeOw@!3UT zti`^(`z-Ib%~M35jbm}(I%GBd!mG*b-`&F>f{cC$>f4Hvz>z+CD5zjH%X2bN=9pY1CENsoRxUcRO&Z|y<@t67@ z5)NA)N!VWWy)ImH=P0P}ZQ(eVYAyQS7mjlV)%Q=~ws4@m==)T-7F6Vt>HA8!t^NC* zMIQ>IWN(=FDNrr-ttXuACtK(w`Zf}-b->cU)VHZ{ZJp>Q`dSFrKGhUHP~UdKbx_Xh z%dW!hT*ieq)6F^7ah-$MY42ElPPlB&YWG`gd^CQK%zSv8=_&f2_cpVibCueR{pPzG z`q)0KjxoQ3Bpboh6)qT^LQy>(IG5T(F*{?<(O?U6L?P^yP82>En7ZCFvJRD9Kl1A?Hz5Bd*InenZ^?BRfACv{>n`hkpVwV_B;!$foy6Wxyw2|! z-VuIThW~h<&G-5a89w)Ig_m!zk^c@Ez3%ckDquJ_>#wYCtU&ucl6BJiE81XLvcFF` z-y6Bp(?X7I(5prw8pFt4376Tmdkt2>?ge7^KGC?z{GrzjJ-uL*d%~gw$^6 zBb2ji8Wv6==WXE)(Z_j2ptH9Bv2Yys&k%i|3Rl)Y`&@p#Jxj;wPBiF}{r!f*b*&@E zwK#FMY3gJ7V(XD!1p4iRij{QN+I0pApFuz`}e&p$+zAysd{#EBpd3)%ydW8Ny zdEUd?=7}97zj@=}XyLXpLs4LU$uWJLH$`Zn3(_|>(U;|SD1e8NU+dc}a2y=xcBzlQ z>HnE?#hG)a8z1MFq->ZhW zRR0g%KllFu`e&OPF2nyHs(-%L%OlvRd;dJp3$D_&u_vPTF~+(0+Ss9p3v;CZ-gWT@ zk~Eps(lBE!`FNJ~e%SC~Hg~kZd=y8F8$AxkaXz^BAL7Eb#o&ulyR}^x|6}C8BP#gs z6!D*>>k`CSn`8Pc?s~-87!t?bk2vdh;<)D!XJbel_Zs3tJI}v<8T?b4H>fFmfO9QW zx-R}vl(%o4<8|@8GFl&vKln6U7q95k?{HmwE9kTJ$=a?vTl#kbXY<0^xbEQUa$UR% zoQeQ}1D~x*Lk+5E&ICbW< zX^Yra>nA@SF3y@ct9mZmYKSx4H$h)0k8u5*WfasuI_jBnxj-e%_^q;HtSJ&U;EQ5@$7 z*UPxiJu>^Pq6Km*h4U_=&|J7zg|qfzVM}s82VO0l&XG7TQ7-Sf5X$9U-}+GOwh75g z|I+T~!nIF{@PYH8&2hoV)-{|DRhrwr4Bu~=a9Nq#I{r+l~ErOcDUgSI<)xwq4ao0CRI9}_m5`8m;D{BjGcb;&q zJbe_*?-JqIW_r`Er|&r7xPRK8oZCH7xSeUxCGDOp+^+up5Ycy@aGg}2+r31%F3Nd6 zmJ7#q?J(MP?h4^>Ni7MZ$hqBXg~M{aBrw0%35UZZj2C@33b#**Hq=wMtK7cIc|PtG zeVkKI6ub8bHy}sf!@>=6Zj$JGT)4qG`koNZ*2xy8ioV|qH#}hJU;0_OiB8OLeRkLn zebX5BS3YGpB$=tC>eBw;HL*L%k-3q+QP5}onC(aK9-GOcFYjKQDZ()ye;2zm-0pn( z#mo2K!X4(^k>tF-d@kG^=O|dOl*1IMB#>Jp`sSBVSv^&5fpVUY#`v+ijkO#XmMZ7@ zXe!(hW!$tRW-I47b{{XC9Ug*m+a}?%XGD!c{AtJGdE4}#kKNmez8&j@Ip!(O6=%#$ z-X9vCg^7KsoVh5=x1Hp}){GWTOYKfhjynp+eaExNxnKGT$8j}LfF99W-ci9YVflFj2d z2hO-q|EQ1kPxoz;-`HWj5cc4+-?rQiMe{E&6rNyyz5X3Ktn@c_{py7o$4$;9^$!b% zv1z}?8r2}#k6`*tPKUF`*MVCC?%-NDcL^xZ2Q z=Mhv(yUOK_=f4ttyzuD=Ml%_-M5n8>qOsueqDT(bEfoi=(Ews_Oz`3 zW`6BEz7vV{^cRv}jvueluD7FGgv%R0?i7yW$D5+>Ug4tTTQbvj`HFB@hL(i1{s~vM ze)F~SpPXZT(SF>NUkCralW^HH2Jc7w)hG|Uwqb$$H1CPNRbCz+dWMQ~YYs0it)5*{ z9*56cI14&#d(3{9VDBOhdqzevU|-7bZ>onVD@&6sxB8g)$MYfX0sMo0_VIF4;hMPm zPsw@twiS;3E>lB4E64S8%DLV4qL1ZfzZJ8*=q_dHVJfu54U&yMu*G??Yj^ zxxUfDZ55K0{$=_O6>eK6>QkTFoh}^5k4EI&?h@fzr53{n+C5IVw#vD_bA)T3!(A@i zPIctU*5}@isE_Sv7uDz20`Eosc`a~Z&D`lV@&2D?AZy&6|}xdj{f*8;!ran(2rE76Bp zsI)J?lh;Z6{t@SRJ;36gLtN-{^7rN2Bsz@BLT%R}I!AV26T5Z24iVB`YS&Wm9`prY zW&5l)!yR}6>W158pG}{#?)LO7q@36BYuxwbIF>n{h)-ZQaABX-(r0t2@vu8k?Ea7F z8{_+|dpTFO2LL_n4{nk6%YJ;H)W+l_Jr4-yUl*##dB5?faO|HGC6V1{h0B`{y(*lp zXE=VmAza!&yJ7CFzwI1-zcmvU$&E0`zngH`IBny?D)@dh^Xv1(Ka0NO-1kGBTbu9S zmo#&%Wm1^8e+y@G&Nwh{pGjJDE@kJmL*BkfxU60sU|*bwcc@9;)`-4yk}Fh&!UX5+ zw7sFPKBQgOUBBM?h0uO2h5_@9nc;J2`=#@ZCRlL9^9|O&iD_Cw{o6`7AI1y(y)}K+ zS~%|xn3%NQE64gbS?qQZeR=h-hj3c2m_FsUNmCX+klR!AZCA#Hb-@14u|BsH&JO#b zjQS*8R_1?4{Ct$TjiVOWhYb>acX*jEaIQET`%T4}Q>_owx#K85muqa+(?zL`P?m=X z$1-0c+$`bPPaZ+e`<(g0<;@+HV;LR8ye(Xs_#)J2)Kec0w#nHmJyq4oTFg+l&f;!C)DTZdqeE@aqh}mxW3N)jGU+MpQ116@0~Tldi8~HLn0>OJblVx zikJj@#)Adw+YXM1`*uv9OF|wuwuH*pcVG_JTI`Nf&hw$%LCU%RlshBN( zcW52CVi_04fSp|*$ADv$^EK1)=oqyg*DT} z3TvjNKfs#F)|5ZwnyHif`Ma!{s;cb0<~_RE$Y*m5uA>gdm~5faI_i(!j_mvC&c*Af z1&9lM@qh20%JAG1@AxfY9*$Z|K3?~Htjn{8f-g$#)^<-NpOs=sJgb8LE))M5cLUUN*tf76tSrToYxHfJ8Alsj- zjT;Tl_El@+4h3iHwY72Ua!+NYa%1_1x)I7Z)WgzMU2S_AjiU0MW6n$R;qAQNs8P0` z5y~>e(QaI?LLDiuS4XYakbeEX)m|?bDSIc&anP4?j+NRKV97} z*B{+wEE}A(BGk7ieRo4&7(c@OiJV^z^mDoX;QDvd)Q0uKxVKEWrb#UBrz7X%{utq+ zBqV3hu5#S-*iQ7-h(4>Mao~JNxw18<&tH^l;mUTPUFVjHUG5>b67E#txc=D5IbJs~ zGuF21)wABw-i6!9ODQ=_=YN-ozV_kk^e^+P+>R;X`aB;uioQUCX#I zzq-ZsaelR%aCZ18>f~(+m(}ssi0^W8p|F4I=b$fe+5MQOy1w00F4WU!B_B4PSlFW$ zj`cp!+5Gth(N|ZF>+?)s$j6J~7q%mECVvON{9gQG^=bzEGBnLc&=FzoG=`_*D{SB&Rf2v$h0xr2SBLvvAs9(SOR7)l+XD z%0a#nm<+ zx99dT?BKrVny#+b7B5P4l+TNIP0KR=txp5vcW9cv@Jz)#eTSvocYCH{@I`t0j!x6pw9q_tZ}_k>O5fS3-E19yIpU0D zSyoy{g*>K;Sq%y+aBiq;*)?HXl+74lD17O5*(Y}JI?1*_EBO@|o;whw?@s8mwvmk8 zZsjq=S%1ekjy?OjKK7kl8{9{`-Z%9Xu0@*q@PYcq3fIcHhg@HA&Jo2$^QZd$Ms`i4 zb>h8DDfLy0zFi%8Jj(A&$eZ;CVXhMV+cAluz7Y2&I198$J!_8 z7ax*tTXa17t zQ?6_;-1Dm(s&Yx7-7my0_rhNhyX&DsTb*M)ol>GLE4QY?O>^!|(Wl%D)#v$8Zl-cx z4>l9KbDjH(+vT+}TU&&B8i09H?~7CBCC>`8IZVvW7mogGDRynnZ{cr}-~Pfa4Ose@ z`o;*i%!v<0-#FopOf`iM)HhK$UQ76w=$kCu@j3dY3U{J%UT*V+JF|}5*=1a)LDa{7 z_Z;Eu@MH8Zixaz9KfVL{nKyAE=zuVFP3N{pditoZq2G`BE&by4>KMrfnoANIx<1yc z(En|iUSn=7{Tl0)b$fBWYLZj0&Jeqtvo>Kq+|Twd^|)R7*PhC(T|Orq@1tlY`hF)I zmZ2qq_3CBexc9XY^|}Av7H(VDwh1}U$Lbu8#%Wi%?Ht%b^x3<%W51A7eH&nL5p!H~ zwxB-GhrRze=5};NTMM_Va2zjNlJop_7OoQ$<}zKo2-jITPoL`J-d9_uR9EVM&D?7fsNu-|IGpRslPb0D5VKF&?k7xdljcB${FdI6XdDc&9WY>&vs zbMB>9ArAja;)Wo?#_wd@hqN#OakgK@xZ?ccqJ@}LH)0%bRx8=@wOIz9UypOsc`S}u zH{KOr`BbJbFU?!<{lA6tWm#c?a1D^DxD9TZST7U~C+Br-ec`roj)G;W9OnWl=Y7d0 zqR*}`SU4u~{gLp2c_Us+w$(Y;{Nm&#(?WTMIajER?Mk?MssFYTySpS-u`eq5?Iv8= z^(fEB!NPHDJXQ4ByJTWNo_jh`mNoMfeqqX;Tm`|CO zsOlu=+MmmjmJ2;C?a?3D{*ZC2krvy#wZOClF4MP5NJ_@}Zvn0ryPUTNZP4fUZq+o8 z_J$8H-4ix;(cwJ9IJ7w&R#o*LG-h=2Je0C~w+6N@|Gi6H@7+4`d)gb0-_vSsXIYZw zALjQivrzeMtO_>rfA13S4FfOSh%&cO>7I#uqe^m@bKFm~a~?*V^&pHZ4j)z=GiuO) z&=2`N9m9tiT5_LJarBUW{V-v(u`4^be}CgbKc0W@$E``4d=Rx0JUqRYeEiDuu`c&% z1z(ift?fRorz8KpTETy-#ebHS&k+~<&*IichtL3$zOuOO5EuK;;<_L%_MgS=hq%xm z36tK>nP}}%Y9mBg0p$1 zjd^RkPwNtJHul%XT?@{Nvo`K#aQL@YZe8xvs#I>==MQxw+@}@lp~Yk&d9E5d)zEKb z`$PMpfCip|ejWX>1@`x|y?^2OG1lh{e~s$F1ITQ+7q;}irGZHEQgtIze;S=if`Or1OaqaR2 zIiFA7Alwc?UHX@HZx^nW6JJrE+kI5Hw$9aKnY-O*glnH#3?Eo-%5g7PXFd{dGk}%*UdF;K)aqk<#uy!L*d?*^pX1!IrsB> zIUF-W|NT9O+m!k|eIMm;Tat6TALnpt_mdp1mFTNqReIkI^PB2(yFWD7od#Xff16g7 zrVmq)B(#%!bP#TWa}?CKt8j-nup{+(d34L+b|L3}**%AIwduNS?;NhH=o^s3rTW}% zt(@m$P>#Oc#qN+CF173WMhJJP1A9=Pa|h;ddz15g9F)Vk+SGr=9Ilt>o0Y?*`rK}< zoabXsj=p|kcYY3++I4+Pgu`}85(bIBWx~}sN5T4hq;S(6uxI#MAa`t4X*-&ce2e=X zg*z#S8%fUncWMsjYE!#s=Wydh-=#TRs?Y7#%DJB}%h7kR*u5f$OYOS8YlS!`a=vD_XA|>&uEo`OPVdy3$xEh}uHB#U$xnqfdm{`h zT(1rrJqGj63TyV;hL=C1;?N4ew>s&2TC>OZb75QX2U)Z8ey(eLZ^YK@b-ka9`z1>; z`7H7MoSBRCjR7zHAM<^@U$W~D-{8e#x7uPs{Jgy4d>zB)#yybMcz}Q^bY! zZ@M?~gYTD|nWV|AO7I)2D((CH#PhK(`z65_rFLuEFZp@ozaM$}V*hQAxY&P|qfUs^ z{gV9=r~4(N5oaslSl=|nttWAd5!Wb+<9a&S4eROPpVGYHl)}k4*FvTJ5_`Tl!zIpf zza+1Wt^pV9hW(O?KK%~+CBKBey6l%c0#>PTt5s_p*Wrz5-D zi`}~3zZ=qCYS(hGi|ebD-#IFQ+v;S*X3)`9Aou+y@Wi+!a+eR%Cl*dqCH~QwxQEx(~QVc0>1*ZK?# zf2LiZ$39Y3x(qQ*OGus&WryjT$>#372(>Kabdpux^tZG z?j)QYK8?)%DdDnuVEa-lP!HC_T+9ONLEy4_upoS0_{{xchp$6ln6rkx(&C)z$unoo zES${ykrI8OzWlYS)X!GuEqo<@Ru0q4l0ZMdUsbA)`=V<^-#>)&Y^FM??`z?#ua5)E zZG&E=c3EG@@>(T1mPZQ$k^Co4ZkFiF%A*s${~YD9qm)PBvhp~`^{k(A!OxpW`mA5F zupv3G&szv*{Y@O`mu-Y&J8w>X-i}%d$MV>moZD?JTv_|g;i77nB$MfDBl_6Rx1?Q9 z-!8)0m~UY#;kpaAdB6(Wk@NKR5U#8qxZOR3vwM%?zZ|l7orxgl^(Jy|l(B7U8>bu9sk6oQJ-J3vP81wK< zd>peZ2Z#??C%e#w=j{OD^7@Do!m&_N`$9wc0pCCgTtkAsD?d8mb+ z)aQ1qg=3$ymvD20^C?_mKXRVFMLArso~2JY*4@6MZ>i`bm+Eu7%4uK6@;zGgaSZKG zyY3g|*cJ{T=XOsJedN;gxxQ0{V_O(PeK{Q4!WeRH_YBcTF14G(?LfdK+y2?2uWT;h z>AO(4cCP0@rZ0!%oM9q4Pv0e?j~tW9^eML^0p`Q){zUX~4l+sXUX{a9E$hn-!rA>N zabWsxsv~!+aGhgi_)LAubt&VfB{3^qAN#sJg|ow!XbiU{T=qQkrHHRO9nZ(0U%cFYIMc6ts%^iu_d;>c62D4a$34~4zNbCacwf)v z%**iq`~HnA_w_ospM#CM-v`yn3#8Io_d>5jNOoZ_=i>EcU&PhJcZ~aQ+y`}fk|wiS z8iuVUAD6K$tiwA%gD*<$*0!%_&xL0wR`B0!@t?6rBd$IqeQI%MBhKdJaojbC)4hT_ z5NGW*<{m{{m^bC$2NnENnm4oiBF?o?X2+S0c!`+Akije9(yZiIckP!BDp zG*lsd7Am#0Df|4nPTt5s%>BIsmShZv0K-Dy^!`&yOz%*pfB|8 zzV~47*uky|0(Z`Fw4PaCvLu8sWGmens@n5RPl&;DKx&F;_UQ zKi&|1%Y@_nUiF-py%1DNeIE;Vm;;}SzR!f4 zLq#sBuW_H!y|fej`>#b`(;SX!sjrK0R}f$W!0~D5H^La2y^rt8r1vA7)%yXW?;1zy zr+vxfBxZCD*NB|A-*LiSo0&{LF&_uzaQ4i53#|8taAN*u74;$DG?<^xZGqQ>xGHD)(#U zJRgsXzUQ55NxRNHCEN?nwI}CxpAqi&YBz`bgK}>752EjN=XMsm9|-q$j=oQYTkYJg z)aQ1;6z*@%btC8b_(r(*)ou>=fpTtltG=cE&{xj&5WC8KQ%8MkoZCzEwGzAJsFv-m zi*Sv7I<%kY!z;l{p5;wW_4N^MbJy2f^yP7?Z?foX>-zeOzM33P_5F`hp42 zDcoS^hLH1maJz8BoKw5^2xre}vM@sQ-7lOyS11lFw?~8<>)e5&?^)p{s6Nk!atABt zetAyx9pc=0+I8+l;U+mZk(}FAZgP&@mqp)n=O&51Kj(1tA^rEhaI;+BRMD5mslKm7 z-(uG{L-c(k+|r!efxKncUZ6(~<%6WNgE8Mwtc*Y`7W?!P(0 z^~kY1SGbz#d)vcX55RKRwQDpMxE~g{ z%dbvUwWM+wEllY z>01`rZGuyZQ>%|CPM(r%3EMRSi?eV7IBQCA+}Vh;eur_zIWyBZy=$COxCU`&C2gSzo|Th-?k~YzkZ>C&>9lhn zM%+bpIQMCAm&>`U5EtrmwlDuO?B9caXivX6hW*gJ(!UH$p2mY`?KoFlJfk=e=?U#T zyuaS!h9GWo()P1=+P?$4S1>JU9dDH8$?|3418~=p3sHry5jQo_$LkBY9#EWJxGv#5 zZhlSmEX4g>&RrijqO4$CYWKK8mFuS13|t4;=!ra9eJJAk`Qn;|_E<2K?|R9uB%eiS zgJ-w~KHSoNFiP+f%r_YXo}>cc|;zMfCL& zZjz?Y{i0m8a-NSqqHl_GoyG1L;kHS*?jj;fF3>{_gXR^KHojh?NZ+}$tZ(or8sB0_kq4f zkmxr`?z6m9(%jf!gx<8_dCTJhZF9%T$;VejAIv79FZDV1mT)^bH;|m${am=#&QZ{A zLktAAe&lu79UT}Z`WgwhGZndHTUD;?elyQUd(pR>>lr0>mD@w@y1v~--=5ALDEjsg zZtom@dkVL&a}z{gKjEr!^bHjb+ha+XNPV7o5aCeVC4uEJQ@Ft; zRMvMYXLEr#SNm)Mj(;{QORc|>C4(`H+;Y9f8{--E)L1+m~{E%5lGmDP$Qf7kya5mIQK_3CBK%Fw62M&e8X}-(>uuIQhzi z%jTzT5MOm6=FrTq_q$h#z5!mACppKmtkmybEoo+1W@!%n=`VyUD@$LCKO||{h>9XP z4|#hy;j;Tr7vTHl$lGm_wyWkZ}u!u-+RLGKAFo!-xtDd8q}nJsZTlXsa{3DEUrnOFK;Kt z&#v6U$7Cv`zQ%(}$1N;1l5nl0uc>g{Q&oM0H{-%sOO9pKnt;pXT`3C|F1|g{*E}urYw-Oll=*AS zhnM;NZkPIAsTX>k7o02F1|5Rcgf;l_;rft8jO7+WSvC)4zBt6$U*oLrWII|dc{3dr zUSe9@2OD7#9M5<2`oE2Z({X|AXkX!M-Vq0mp(C854|I&Tb8baN7?W^WJE}%})y4SZ z9V_>E4itT#dAoa?KJ|9QF_h_g1U9^Fm8@r~B_DR4g?H&c@Bd~B7g{f#4NK1byimBN zL0$Tn<#vp4ERXj^-*LimJfcGCQ;zxmm*_iD^p%ZUo)6`;+-Ub~(Z~BcKNY(xge#ky zxu0(qj(xA?oSCU`4Ws`4i1+>b3@O;TozuAQ_j$hftqk7uRwz6U{Z{9` z%QcMfF7~d;Pd;sJ63#WxckN^IA8TV-T(|C4#x|y9al3Wzj^pMfaou~NY7}ftGtRe8UG@|7vEHEAUj;6^HpacVl=Jz9a_nCcgZ}4j*zH%r?rE^wR_q2Y zvupjSg_Lu<%2l%a0qhQ_V0Ss}?ksi#m)Simn9Vr1t6U|!pTX{+3U*h(ZWpl|xXkWi zx0`ZqSGh`d>!Gp?u3+~b*zF;91DDx7#_gt@+f}ZT-3?%OXa&1Z!7kqs$a)pH%TxRzsx0`ZqSGh`d_k!KA73?;-0`niS8@SBwU2Zq!+^%w! z?DmJ;^8gyUOjRoZD5dlHD1wdq@Sl17UZz*bQ7}_ieYEa&A|-N_H2)Zn1*h z@vys4>;^8g`{Dm<@7iM|Im&zA0k*-|#xeveXD4Sn@j-aq?VZo&VS8rxW^dQGFJ{J1 zC6s$-dUhw*Gd*LwDy0(|Q3s#~?*V67({rao#tH)PWUwu{GZR8eoMy^j+C--fT8`j9( zgxu4fTuoQX{gIJd&>6WtU7g(bKyI%_?rF$g0Y1a-$l# z_e1WxJh_^#lzXX>ThJM~K3$#Mhah*OM(zWU`yNlOrYq&X)W|L9j9j0tPVUDbcUU9$ zqmcW4Pp+mbHxV)^rq3KGwOGa)%XXN^Hb#lK8xmk_eA3^TNJh_^#lzWGfThJM~KAkTY??1@Z z$uyYO$i3*pLGXwtSJRbp?Ru}EGje@8`rF)#awk|+Y}LrU5^_J|$<=hF+{Bc(pfhrP zx>~t6;91uixi5oUu1|T{_SJNy+-)PbpfhrPI$y3m!*?8uH@p7T?`+7!d|G*xL+~Ha z1781M*1zt%ap`B%>&9ny{d=zO#^qX^eownL{jZ`Y=!=NDhi|MVy7=e8Ms z2{1Oh#r`+mlmv`gcq@ewz2Q>bj`PJ=1#}zVFoE!J7KJ*{eSm zWf>TK1GY|yy$P81%a?VZ0@FU<5_>l=?dLDC4*=7?O^w-eeY)NBxjtP#)v{6UN063R z^?V|wf+zZ`y*^>+?0Xz`YooseotCTL<4{|t=kOkf$H9+&OYTklr0>*x3v_e`o{8>X zK*uIK6WtF%$Ks!fZZDjS+`s!tbU)2|9O~N5wy)L=-M(56b-N)u#dSIIr{Aev?nU2^ zyZe6y{u|T2cD#QG1K5?gXXmwjX20Zr8DLD)GlWS3SCG^zGn)NB7Sjo%NZ&!qS;?eBYznvDa(z_XCgack8PA~ zg%h{57Gr*W9eS*WU+nSQN{4ymG6bJ*?vlT!YxqqZe#6l;_E-fCf~GQU{u+%X*=+k1 zHoC!cpWkCO{7yUkhFO1j%FAFwK%GIK-+$KddyC6&TE~xIJ-?rU zLExA79WK8tjYd232e6*sTn)c>x%{Se{0P?b>(}tR-{BY6)t`X%{60{_@4YU+y84TE zufM;m;rD)rA1Z#j<=3Bp_4&K_vYqYmL5E))_WK^Ypg~ZxEBc$&=UZ#|J>c?-v(26S z0PezXrH0>wEW^%*u|g7xJc*6{m%habLVGpYGaTULYMh~Z~-=%Y1t@CipoxSmx7 zAU!bQ&wphd$QZlyC}i-tE4L2*%HfwL{)mG%2WT0V{N(&bm;B(~6Mps2k?wNNqpQz( z&^BaV8V#N#Sqe_Wj-Y*~F@0`i2G~s%Ow-*`U}tx3L^XODnm9jU#_{Ws9#}L+2exyM zU{RWm6Wn}S%hhz9?kx2RZO-Qw_e#7Bu2c8A4lZ!0bnssAdx0k-2DTr1b!)Kn9J|*1HDDKebngT9 zLcuO6^7nvFyT?uY#~Q=gt&-ngXzV#I_9bAKdNRHZ>@tfLb-&kmWy<3G0CZ2BMV;>1 zFJ;4b;mf@2)7bM|?3KV;Rwn~}y#d%Y&s@f`U196xHjNc^rM$72?bc`v#VB<9G&$ab zw7+hiY1MSv7_jrcZSw)>j+$p=OZ~e{&SQ~}y(ar{F38dWRGfU8cLjEyAwR)zknAgH z-v;7V##{FX!Bw`Nh3-_;%WnwT2kFAnq` zr&fdD#xv0UE9lU^)YGDU_d=&`v3gMG-*b12VwZz%wxHXCjPcs5f8@W$UIw~jmJYaT zu%2haUqTq>V^PmHgYKL7(_@`2+x}obXxwWFG)HAT&|~bi7xL~-ALzZHL)j|*Z3JvV z@}k@5sHC;lV<}}zr>(U4Z)&X4XMRUx_^1z#ew$h0?zR z>|=uIvfU#2yP(XN2|W!u=w#UkjluCK+MKopbr*e53`J`bT8xV!yN7^? zJ--ha`c|bqeh=6)sIRJCHG&3(IoHFQU!{FNt+9fiI+esKiTm?j{=NXZ;~w@^U<)4h zU0}C)*i*pX;OO&@;j_^@J5J^h+H}t_3!G7W`fVx?3Q-S}zwB@0_4? zj^or9yH2KVC~o4yyj>6(++R3AQd}=~z8|3bV-qsa9u++ZHCEAsw*y<3a&V465L^ep zhR;ur8%Jl>aff?8R!`rHwDYzcOor=0V8=b|-)0U6Tl8R{3!RIfLWiGrTY;u>-VwPCBJ}Y-Mq9{1N*v%9ROy1csA`(VE0K~ zl{UyRV5sNHc=bkLZ}D{FUSMzaumsrKJnWso-tJ)^0tOkC{_zLE-XU~lULFDVP7nLM zPFv}#PXg25x!vp7n6C+5!-{mS?||;Kw54maUTNOwp$Ux*a^&kyTN>=>Hyy0eh%-8? ztY3npGr_1^kREXL)tT@!0eFDC68(a=rlL9o68i_r;S*ZUTu4C_O&n4cG| z_vKl3(iv=q{Qxdh(OrY}xb4sGQ__{^+e@rG-|k>XId{Meanc^XiR(TO3tzVbJHp3j zU-jrd2`u)o&jEX*C*upiCLZ<#u*W>?-+=wOhh2aS ze9^;R3e5VXZT=1*@DLiDes7E2jDYopTda-1D?nq{$p{7mVE1@ww}8FM!|t!a9wO%P z`!itkUfM4MW8Pf3PXYUYM|UBnkxzTr&jS0fhaCa-jDyk6VV`!_8m8|b`iE-Ymo-VX z?+?ZKYW=Lp7W$U>mJWZ-No%khzTsev272#wD{|K^982o@zCUiLTj^^l{VyU{u+slh zV8+kDKBx1CHO}l@@MYws;bIF*!4nls%5mdAR`NWz);=f-V>aGdSZuG(HczZt zK&Ww)XtvqyT5PVl*1f&mLdv@=wAgVIwOgH5`;OMJ!-3+LBk&NnWOSM#6Gg853aFRnSXOq*kwT36*9Ses}P>t97GxKq{eK1g) z{VhC3md`jM&sWq?S5&LrR-N1D=31Q&n<%%wBGf1zxQE+FO($izKNd&X9niv7+X<@W z=3T9&B^Np5Mo{(eujyn8x===rxRJHyO4E%Wbt9{5tra)EvI@^0^}7X~Rg25Ztz)X& z?400NPXhV$$voYzyvst)t*&$zSMcgl#jlvGhj~t=K@bN|qx4i5Lr)@nS#^9eRGUs1 zcsS07s<(+GQ3@RzA$(GWeJG-dN2l|Ck1HQjQy>v25IIr0jjy(jr-QIZ%}q5Ss$i5r zL!qTPR{T=3(Z;Z+-aH-l@R=1lf=iJ48>l25ZmflAIFdpPS&h<4(@7tlKTv77g+Q5+ zD8*UQ6gS4vR!R?GSuSC{5#=h52CNA-_Fx*Z7T8U(?LEvaES--x4Kdt_SQ3YLp&p8? zdO0eE`5T7u@V*Fju(qt0=8mZZ%3_1;xd_iL;n{kKGw>-ekI{nTmgQ1J z$w|%%+bU+{29<3_F*47{QL-PVZ#I=Q&Qr7*Dwf9uP)E_mAzectQCmrR($JYaG1rnC z8>c`E*!=gQ;&^q6)!m~qple3`M8(NQV9`MuLHpGd4;G6L(&9p$MezWm z8@rCt1JUU?*-`Us+EH(+w!&eKRwGXfVM^_*P_1vX|G8iplOqc|Xav=o(;tNxEukZ1 za0nBY<OUoIV#MUR^jtnTbe0)%B9xEQ6Hm2U*-peu{Yn=voF6ssg^ir4Z?mT zAIJ(+95RKdrKoaAREEeD=~RDcEiB6-nF-{Mo3lTb?#z{KjFlFOe z97RwH8|Ac#oHz+E7ntlzabnD$;7Ehau-_UE#5}9awAxtZEtSKL8^qy;l2{jZq)jJi#P(n!PU^p*K{E3dKaVwd>*I_3&&dsK*IaXNd)ssAn2b-duATZ;?$? z8l>&+9E5UCPIJ6Nb~-?74&n$-3<0L&IO$tdEUl;Hqo1oF-MLe62<;m)Yb zjd4vq+1xfZi5MVxxE`ZV;Wqlz%z5psT|-ti?i>~v`W3^*rohT#8mVbU!#KwIod`qp zV1OBQ$}u4u_ql0e=2r}+Vu;I1g1Au?F+Ul%hCZfuc7T3_!Ltm*R2cTTByk|Lv5CXZ z37G|S9V|RBvO<-HnVHMMo7y0Pu~@)>e~N1XED%OfIL3-?bBJ`vE%$g#%;c6fZ4a;J zCU=H1SS`abY%s1?lq{?W>qX`jDxzj2E8?3;Hr1=e z45Ox4xR`illAX*PR?WFN;jkTuVGo;vvvD=Y&|y8yK0E7$bE$#BFdY^Bmk0T<_FmUk zLNt5&D80 zbB~kErsz*0rzegA5v;NlHoXq^!3_q{nX;8eIh+}2JK8`sIU8+@)J3t3q~W-1GNah} z?&No;$^aHftRJmUH*|1>6AI_8#%IxLEWD1c8}a|zbBSJpRRvqRw;93l$7z^Ty*RKK zkf~T;PV0g7Sa3yxj}dCu6x<&4Zejlw-UH*fl_&<<)45p6#tuBcQ&4OgnAP|>706NL>V$Euy7IAz1qY~PYN+pjd=?57}l{E4a0E{4r{TQ2eA6+d<|2`mh93m zj%>m{jWxBHy37PTxV@Mq5+;NVKhu{?5sRssMd73c8f zq_-F)vLul%DMG)~XzMicK;)H~qajE)6#@aEE<5J+a~qr}-upwzALF z+r+4bHD+=O7BN=dLVzhd#}|Q=-gaUV_)GP|8urKB!g1B zH(2hnT?MAukh@W`D_F$9WVyL=`#kpC+p-BO)BSzPIN}zi_Ag{~??`U+oMPPu*0+x~ zn#LH+YLvf-%w`T(0ZFt@tCkCNvxOnOtOxF60QO26nJ1yjiV#I z9h`+Y@H4JP*?M)EZHI2GwDtBr4iFrlQ%kGOV@S*3LJPqa9qu+4mjK%=a#de!HxiW9 zpx(@z2$ca?68a`|QWuQ5M4}P3)?HDZrB-WAySaU@U{zG%o@YvKPm+AuIEBT|5{1y4 zl<-Mc)dQYoL2P^M^lV#eLfqUoLRqC>-=c-IiRkUv7>1}NdYpA#Fr?R*4E2X8_Zb)r z;ffj+fOt~|Fe2=DVfq)hx{TY7|#gQxdRm;+}RUG1BJ_1gQ&4IFRCDDX$J2Msz>v-B%LYn96BauqsF^OuKh3 zsXJDe(0guQIo537T~$i@hK3v*vG-8!YtZjhS*oF)tj-e8)Q|}=NnvOkoL0*V_o?Z@ zn{=GLACmJBOa$bzyp@JrmNR%KA86LWd2Y0~`M|l3FWwQQvI9c8#W89=pG}f{9=j!) zfMY6=xp>MwdkxOU;rQg749(7BoGg~Hi)U_h?iB4cmZyo0P?kU;vYBAVrMxFQGi9{A z3++cc!2ux@qv^?TY__bxWMOr=#lZ}xb_7hO@NQx&2iZi5$rk>(DK-)~4aLqiTTT-? zNh9{8W6ireYQDX?tQJ<#U@S@}%2^uKgssu+ESt5H@u!d=Ivw?>wdmVUHdw@N*8@{*E>Aj)@gNj6vrq5ZEJkHVTvw=an4r3YTUQ= U(!#8aJLHc69~z~5AI=H>H;YGF=Kufz diff --git a/trunk/bsr_k0r.map b/trunk/bsr_k0r.map index c19848a..22f58d8 100644 --- a/trunk/bsr_k0r.map +++ b/trunk/bsr_k0r.map @@ -1,19 +1,20 @@ -78K0R Linker W1.33 Date:22 Nov 2010 Page: 1 +78K0R Linker W1.33 Date:18 Feb 2011 Page: 1 -Command: -yd:\program files\nec electronics tools\dev -_msgoff -obsr.l - mf ..\..\..\..\Program Files\NEC Electronics Tools\CC78K0R\W2 - .12\lib78k0r\s0rm.rel -gi1B339499E033F240BFAAh -pbsr_k0r.map - -nkd -gb7EFBFFh -bC:\Program Files\NEC Electronics Tools\FSL7 - 8K0R_Type02ES\V1.20\lib78k0r\fsl.lib -bcl0rdm.lib -bcl0rm.lib - -bcl0rmf.lib -iD:\Program Files\NEC Electronics Tools\CC78K0 - R\W2.12\lib78k0r -dbsr_mcu.dr -s -w0 loader.rel pm.rel i2c_ct - r.rel main.rel magic.rel WDT.rel i2c_mcu.rel i2c_twl.rel led. - rel rtc.rel vreg_ctr.rel vreg_twl.rel adc.rel renge.rel accer - o.rel self_flash.rel sw.rel task_debug.rel task_misc.rel task - _sys.rel pedo_alg_thre_det2.rel ini_VECT.rel task_status.rel +Command: -yc:\program files (x86)\nec electronics tools\dev -_msgoff - + obsr.lmf ..\..\..\Program Files (x86)\NEC Electronics Tools\C + C78K0R\W2.13\lib78k0r\s0rm.rel -gi1B339499E033F240BFAAh -pbsr + _k0r.map -nkd -gb7EFBFFh -bC:\Program Files (x86)\NEC Electro + nics Tools\CC78K0R\W2.13\lib78k0r\fsl.lib -bcl0rdm.lib -bcl0r + m.lib -bcl0rmf.lib -iC:\Program Files (x86)\NEC Electronics T + ools\CC78K0R\W2.13\lib78k0r -dbsr_mcu.dr -s -w0 loader.rel pm + .rel i2c_ctr.rel main.rel magic.rel WDT.rel i2c_mcu.rel i2c_t + wl.rel led.rel rtc.rel vreg_ctr.rel vreg_twl.rel adc.rel reng + e.rel accero.rel self_flash.rel sw.rel task_debug.rel task_mi + sc.rel task_sys.rel pedo_alg_thre_det2.rel ini_VECT.rel task_ + status.rel Para-file: Out-file: bsr.lmf Map-file: bsr_k0r.map @@ -22,9 +23,9 @@ Direc-file:bsr_mcu.dr *** Link information *** - 64 output segment(s) - 3EE6H byte(s) real data - 5432 symbol(s) defined + 63 output segment(s) + 3EE5H byte(s) real data + 5497 symbol(s) defined *** Memory map *** @@ -97,54 +98,53 @@ Direc-file:bsr_mcu.dr LDR_CODL task_status 000C4H 00000H ?CSEGSI 000C4H 0000AH CSEG - LDR_CODE 000CEH 00936H CSEG - LDR_CODE loader 000CEH 001F9H - LDR_CODE main 002C7H 00046H - LDR_CODE WDT 0030DH 00000H - LDR_CODE i2c_mcu 0030DH 002F0H + LDR_CODE 000CEH 00944H CSEG + LDR_CODE loader 000CEH 00207H + LDR_CODE main 002D5H 00046H + LDR_CODE WDT 0031BH 00000H + LDR_CODE i2c_mcu 0031BH 002F0H LDR_CODE self_flash - 005FDH 0037FH + 0060BH 0037FH LDR_CODE task_debug - 0097CH 00000H + 0098AH 00000H LDR_CODE task_status - 0097CH 00088H - FSL_CODE 00A04H 00322H CSEG + 0098AH 00088H + FSL_CODE 00A12H 00322H CSEG FSL_CODE fsl_block_cmd - 00A04H 0002BH + 00A12H 0002BH FSL_CODE fsl_block_check - 00A2FH 00013H + 00A3DH 00013H FSL_CODE fsl_common - 00A42H 0014FH + 00A50H 0014FH FSL_CODE fsl_reset - 00B91H 00001H + 00B9FH 00001H FSL_CODE fsl_si_ibf - 00B92H 00064H + 00BA0H 00064H FSL_CODE fsl_phySwap - 00BF6H 0004DH + 00C04H 0004DH FSL_CODE fsl_si_common - 00C43H 00061H - FSL_CODE fsl_swap 00CA4H 00030H + 00C51H 00061H + FSL_CODE fsl_swap 00CB2H 00030H FSL_CODE fsl_write - 00CD4H 00052H - @@LCODE 00D26H 0029BH CSEG - @@LCODE @cstart 00D26H 0006DH - @@LCODE @imul 00D93H 00011H - @@LCODE @lumul 00DA4H 0002BH - @@LCODE @isdiv 00DCFH 00022H - @@LCODE @iudiv 00DF1H 0002DH - @@LCODE @isrem 00E1EH 00021H - @@LCODE @iurem 00E3FH 0002FH - @@LCODE @lsdiv 00E6EH 00039H - @@LCODE @ludiv 00EA7H 0003FH - @@LCODE @divuw 00EE6H 00034H - @@LCODE @ladd 00F1AH 0000FH - @@LCODE @llsh 00F29H 0001BH - @@LCODE @lursh 00F44H 0001FH - @@LCODE @iscmp 00F63H 0000CH - @@LCODE @lband 00F6FH 00014H - @@LCODE @bcdtob 00F83H 0001AH - @@LCODE @bbcd 00F9DH 00024H -* gap * 00FC1H 00035H + 00CE2H 00052H + @@LCODE 00D34H 00277H CSEG + @@LCODE @cstart 00D34H 0006DH + @@LCODE @imul 00DA1H 00011H + @@LCODE @lumul 00DB2H 0002BH + @@LCODE @isdiv 00DDDH 00022H + @@LCODE @iudiv 00DFFH 0002DH + @@LCODE @isrem 00E2CH 00021H + @@LCODE @iurem 00E4DH 0002FH + @@LCODE @lsdiv 00E7CH 00039H + @@LCODE @ludiv 00EB5H 0003FH + @@LCODE @divuw 00EF4H 00034H + @@LCODE @ladd 00F28H 0000FH + @@LCODE @llsh 00F37H 0001BH + @@LCODE @lursh 00F52H 0001FH + @@LCODE @iscmp 00F71H 0000CH + @@LCODE @lband 00F7DH 00014H + @@LCODE @bcdtob 00F91H 0001AH +* gap * 00FABH 0004BH MGC_LOAD 00FF6H 0000AH CSEG AT MGC_LOAD magic 00FF6H 0000AH @@ -154,7 +154,7 @@ Direc-file:bsr_mcu.dr SEGMENT SEGMENT MODULE ADDRESS MGC_MIMI 02000H 0000AH CSEG AT MGC_MIMI magic 02000H 0000AH - @@CNST 0200AH 002C8H CSEG + @@CNST 0200AH 002C6H CSEG @@CNST @cstart 0200AH 00000H @@CNST loader 0200AH 00000H @@CNST pm 0200AH 00214H @@ -180,239 +180,236 @@ Direc-file:bsr_mcu.dr 02288H 00000H @@CNST task_sys 02288H 00000H @@CNST pedo_alg_thre_det2 - 02288H 0004AH - @@CNST ini_VECT 022D2H 00000H + 02288H 00048H + @@CNST ini_VECT 022D0H 00000H @@CNST task_status - 022D2H 00000H - ROM_CODE 022D2H 0277BH CSEG - ROM_CODE pm 022D2H 00A42H - ROM_CODE i2c_ctr 02D14H 00060H - ROM_CODE i2c_twl 02D74H 0005EH - ROM_CODE led 02DD2H 0051AH - ROM_CODE rtc 032ECH 000E0H - ROM_CODE vreg_ctr 033CCH 00475H - ROM_CODE vreg_twl 03841H 0010AH - ROM_CODE adc 0394BH 002FCH - ROM_CODE renge 03C47H 00190H - ROM_CODE accero 03DD7H 0013DH - ROM_CODE sw 03F14H 00112H + 022D0H 00000H + ROM_CODE 022D0H 027EEH CSEG + ROM_CODE pm 022D0H 00AA4H + ROM_CODE i2c_ctr 02D74H 00060H + ROM_CODE i2c_twl 02DD4H 0005EH + ROM_CODE led 02E32H 00546H + ROM_CODE rtc 03378H 000E0H + ROM_CODE vreg_ctr 03458H 00481H + ROM_CODE vreg_twl 038D9H 000FAH + ROM_CODE adc 039D3H 002FCH + ROM_CODE renge 03CCFH 00190H + ROM_CODE accero 03E5FH 0013DH + ROM_CODE sw 03F9CH 00120H ROM_CODE task_misc - 04026H 001B6H - ROM_CODE task_sys 041DCH 0037FH + 040BCH 00175H + ROM_CODE task_sys 04231H 0038BH ROM_CODE pedo_alg_thre_det2 - 0455BH 004F2H - @@BASE 04A4DH 0050EH CSEG BASE - @@BASE loader 04A4DH 00000H - @@BASE pm 04A4DH 0003FH - @@BASE i2c_ctr 04A8CH 00198H - @@BASE main 04C24H 00000H - @@BASE magic 04C24H 00000H - @@BASE WDT 04C24H 00000H - @@BASE i2c_mcu 04C24H 000D9H - @@BASE i2c_twl 04CFDH 000CBH - @@BASE led 04DC8H 00000H - @@BASE rtc 04DC8H 0005EH - @@BASE vreg_ctr 04E26H 00000H - @@BASE vreg_twl 04E26H 00000H - @@BASE adc 04E26H 000B3H - @@BASE renge 04ED9H 00000H - @@BASE accero 04ED9H 0004AH + 045BCH 00502H + @@BASE 04ABEH 004C6H CSEG BASE + @@BASE loader 04ABEH 00000H + @@BASE pm 04ABEH 0003FH + @@BASE i2c_ctr 04AFDH 0018DH + @@BASE main 04C8AH 00000H + @@BASE magic 04C8AH 00000H + @@BASE WDT 04C8AH 00000H + @@BASE i2c_mcu 04C8AH 0009CH + @@BASE i2c_twl 04D26H 000CBH + @@BASE led 04DF1H 00000H + @@BASE rtc 04DF1H 0005EH + @@BASE vreg_ctr 04E4FH 00000H + @@BASE vreg_twl 04E4FH 00000H + @@BASE adc 04E4FH 000B3H + @@BASE renge 04F02H 00000H + @@BASE accero 04F02H 0004AH @@BASE self_flash - 04F23H 00000H - @@BASE sw 04F23H 00000H + 04F4CH 00000H + @@BASE sw 04F4CH 00000H @@BASE task_debug - 04F23H 00000H + 04F4CH 00000H @@BASE task_misc - 04F23H 00000H - @@BASE task_sys 04F23H 00000H + 04F4CH 00000H + @@BASE task_sys 04F4CH 00000H @@BASE pedo_alg_thre_det2 - 04F23H 00000H - @@BASE ini_VECT 04F23H 00038H + 04F4CH 00000H + @@BASE ini_VECT 04F4CH 00038H @@BASE task_status - 04F5BH 00000H - @@CNSTL 04F5BH 00000H CSEG PAGE64KP - @@CNSTL @cstart 04F5BH 00000H - @@CNSTL 04F5BH 00000H CSEG PAGE64KP - @@CNSTL pm 04F5BH 00000H - @@CNSTL 04F5BH 00000H CSEG PAGE64KP - @@CNSTL i2c_ctr 04F5BH 00000H - @@CNSTL 04F5BH 00000H CSEG PAGE64KP - @@CNSTL i2c_twl 04F5BH 00000H - @@CNSTL 04F5BH 00000H CSEG PAGE64KP - @@CNSTL led 04F5BH 00000H - @@CNSTL 04F5BH 00000H CSEG PAGE64KP - @@CNSTL rtc 04F5BH 00000H - @@CNSTL 04F5BH 00000H CSEG PAGE64KP - @@CNSTL vreg_ctr 04F5BH 00000H - @@CNSTL 04F5BH 00000H CSEG PAGE64KP - @@CNSTL vreg_twl 04F5BH 00000H - @@CNSTL 04F5BH 00000H CSEG PAGE64KP - @@CNSTL adc 04F5BH 00000H - @@CNSTL 04F5BH 00000H CSEG PAGE64KP - @@CNSTL renge 04F5BH 00000H - @@CNSTL 04F5BH 00000H CSEG PAGE64KP - @@CNSTL accero 04F5BH 00000H - @@CNSTL 04F5BH 00000H CSEG PAGE64KP - @@CNSTL sw 04F5BH 00000H - @@CNSTL 04F5BH 00000H CSEG PAGE64KP + 04F84H 00000H + @@CNSTL 04F84H 00000H CSEG PAGE64KP + @@CNSTL @cstart 04F84H 00000H + @@CNSTL 04F84H 00000H CSEG PAGE64KP + @@CNSTL pm 04F84H 00000H + @@CNSTL 04F84H 00000H CSEG PAGE64KP + @@CNSTL i2c_ctr 04F84H 00000H + @@CNSTL 04F84H 00000H CSEG PAGE64KP + @@CNSTL i2c_twl 04F84H 00000H + @@CNSTL 04F84H 00000H CSEG PAGE64KP + @@CNSTL led 04F84H 00000H + @@CNSTL 04F84H 00000H CSEG PAGE64KP + @@CNSTL rtc 04F84H 00000H + @@CNSTL 04F84H 00000H CSEG PAGE64KP + @@CNSTL vreg_ctr 04F84H 00000H + @@CNSTL 04F84H 00000H CSEG PAGE64KP + @@CNSTL vreg_twl 04F84H 00000H + @@CNSTL 04F84H 00000H CSEG PAGE64KP + @@CNSTL adc 04F84H 00000H + @@CNSTL 04F84H 00000H CSEG PAGE64KP + @@CNSTL renge 04F84H 00000H + @@CNSTL 04F84H 00000H CSEG PAGE64KP + @@CNSTL accero 04F84H 00000H + @@CNSTL 04F84H 00000H CSEG PAGE64KP + @@CNSTL sw 04F84H 00000H + @@CNSTL 04F84H 00000H CSEG PAGE64KP @@CNSTL task_misc - 04F5BH 00000H - @@CNSTL 04F5BH 00000H CSEG PAGE64KP - @@CNSTL task_sys 04F5BH 00000H - @@CNSTL 04F5BH 00000H CSEG PAGE64KP + 04F84H 00000H + @@CNSTL 04F84H 00000H CSEG PAGE64KP + @@CNSTL task_sys 04F84H 00000H + @@CNSTL 04F84H 00000H CSEG PAGE64KP @@CNSTL pedo_alg_thre_det2 - 04F5BH 00000H - @@CNSTL 04F5BH 00000H CSEG PAGE64KP - @@CNSTL ini_VECT 04F5BH 00000H - @@R_INIS 04F5BH 00000H CSEG UNIT64KP - @@R_INIS @cstart 04F5BH 00000H - @@R_INIS loader 04F5BH 00000H - @@R_INIS pm 04F5BH 00000H - @@R_INIS i2c_ctr 04F5BH 00000H - @@R_INIS main 04F5BH 00000H - @@R_INIS magic 04F5BH 00000H - @@R_INIS WDT 04F5BH 00000H - @@R_INIS i2c_mcu 04F5BH 00000H - @@R_INIS i2c_twl 04F5BH 00000H - @@R_INIS led 04F5BH 00000H - @@R_INIS rtc 04F5BH 00000H - @@R_INIS vreg_ctr 04F5BH 00000H - @@R_INIS vreg_twl 04F5BH 00000H - @@R_INIS adc 04F5BH 00000H - @@R_INIS renge 04F5BH 00000H - @@R_INIS accero 04F5BH 00000H - @@R_INIS self_flash - 04F5BH 00000H - @@R_INIS sw 04F5BH 00000H - @@R_INIS task_debug - 04F5BH 00000H - @@R_INIS task_misc - 04F5BH 00000H - @@R_INIS task_sys 04F5BH 00000H - @@R_INIS pedo_alg_thre_det2 - 04F5BH 00000H - @@R_INIS ini_VECT 04F5BH 00000H - @@R_INIS task_status - 04F5BH 00000H - @@R_INIS @rom 04F5BH 00000H - @@CALT 04F5BH 00000H CSEG - @@CALT @cstart 04F5BH 00000H - @@CALT loader 04F5BH 00000H - @@CALT pm 04F5BH 00000H - @@CALT i2c_ctr 04F5BH 00000H - @@CALT main 04F5BH 00000H - @@CALT magic 04F5BH 00000H - @@CALT WDT 04F5BH 00000H - @@CALT i2c_mcu 04F5BH 00000H - @@CALT i2c_twl 04F5BH 00000H - @@CALT led 04F5BH 00000H - @@CALT rtc 04F5BH 00000H - @@CALT vreg_ctr 04F5BH 00000H - @@CALT vreg_twl 04F5BH 00000H - @@CALT adc 04F5BH 00000H - @@CALT renge 04F5BH 00000H - @@CALT accero 04F5BH 00000H - @@CALT self_flash - 04F5BH 00000H - @@CALT sw 04F5BH 00000H - @@CALT task_debug - 04F5BH 00000H - @@CALT task_misc - 04F5BH 00000H - @@CALT task_sys 04F5BH 00000H - @@CALT pedo_alg_thre_det2 - 04F5BH 00000H - @@CALT ini_VECT 04F5BH 00000H - @@CALT task_status - 04F5BH 00000H - @@RLINIT 04F5BH 00000H CSEG UNIT64KP - @@RLINIT loader 04F5BH 00000H - @@RLINIT pm 04F5BH 00000H - @@RLINIT i2c_ctr 04F5BH 00000H - @@RLINIT main 04F5BH 00000H - @@RLINIT magic 04F5BH 00000H - @@RLINIT WDT 04F5BH 00000H - @@RLINIT i2c_mcu 04F5BH 00000H - @@RLINIT i2c_twl 04F5BH 00000H - @@RLINIT led 04F5BH 00000H - @@RLINIT rtc 04F5BH 00000H - @@RLINIT vreg_ctr 04F5BH 00000H - @@RLINIT vreg_twl 04F5BH 00000H - @@RLINIT adc 04F5BH 00000H - @@RLINIT renge 04F5BH 00000H - @@RLINIT accero 04F5BH 00000H - @@RLINIT self_flash - 04F5BH 00000H - @@RLINIT sw 04F5BH 00000H - @@RLINIT task_debug - 04F5BH 00000H - @@RLINIT task_misc - 04F5BH 00000H - @@RLINIT task_sys 04F5BH 00000H - @@RLINIT pedo_alg_thre_det2 - 04F5BH 00000H - @@RLINIT ini_VECT 04F5BH 00000H - @@RLINIT task_status - 04F5BH 00000H - @@RLINIT @rom 04F5BH 00000H - @@CODEL 04F5BH 00000H CSEG - @@CODEL pm 04F5BH 00000H - @@CODEL i2c_ctr 04F5BH 00000H - @@CODEL magic 04F5BH 00000H - @@CODEL i2c_twl 04F5BH 00000H - @@CODEL led 04F5BH 00000H - @@CODEL rtc 04F5BH 00000H - @@CODEL vreg_ctr 04F5BH 00000H - @@CODEL vreg_twl 04F5BH 00000H - @@CODEL adc 04F5BH 00000H - @@CODEL renge 04F5BH 00000H - @@CODEL accero 04F5BH 00000H - @@CODEL sw 04F5BH 00000H - @@CODEL task_misc - 04F5BH 00000H - @@CODEL task_sys 04F5BH 00000H - @@CODEL pedo_alg_thre_det2 - 04F5BH 00000H - @@CODEL ini_VECT 04F5BH 00000H -* gap * 04F5BH 00001H - @@CNSTL 04F5CH 0000AH CSEG PAGE64KP - @@CNSTL @bcdtob 04F5CH 0000AH - @@CNSTL 04F66H 00010H CSEG PAGE64KP - @@CNSTL @bbcd 04F66H 00010H - @@R_INIT 04F76H 0003AH CSEG UNIT64KP - @@R_INIT @cstart 04F76H 00000H - @@R_INIT loader 04F76H 00000H - @@R_INIT pm 04F76H 00002H - @@R_INIT i2c_ctr 04F78H 00002H - @@R_INIT main 04F7AH 00000H - @@R_INIT magic 04F7AH 00000H - @@R_INIT WDT 04F7AH 00000H - @@R_INIT i2c_mcu 04F7AH 00000H - @@R_INIT i2c_twl 04F7AH 00000H - @@R_INIT led 04F7AH 00006H - @@R_INIT rtc 04F80H 00000H - @@R_INIT vreg_ctr 04F80H 00000H - @@R_INIT vreg_twl 04F80H 00000H - @@R_INIT adc 04F80H 0000CH - @@R_INIT renge 04F8CH 00014H - @@R_INIT accero 04FA0H 00000H + 04F84H 00000H + @@CNSTL 04F84H 00000H CSEG PAGE64KP + @@CNSTL ini_VECT 04F84H 00000H + @@CNSTL 04F84H 0000AH CSEG PAGE64KP + @@CNSTL @bcdtob 04F84H 0000AH + @@R_INIT 04F8EH 00036H CSEG UNIT64KP + @@R_INIT @cstart 04F8EH 00000H + @@R_INIT loader 04F8EH 00000H + @@R_INIT pm 04F8EH 00002H + @@R_INIT i2c_ctr 04F90H 00002H + @@R_INIT main 04F92H 00000H + @@R_INIT magic 04F92H 00000H + @@R_INIT WDT 04F92H 00000H + @@R_INIT i2c_mcu 04F92H 00000H + @@R_INIT i2c_twl 04F92H 00000H + @@R_INIT led 04F92H 00006H + @@R_INIT rtc 04F98H 00000H + @@R_INIT vreg_ctr 04F98H 00000H + @@R_INIT vreg_twl 04F98H 00000H + @@R_INIT adc 04F98H 0000CH + @@R_INIT renge 04FA4H 00014H + @@R_INIT accero 04FB8H 00000H @@R_INIT self_flash - 04FA0H 00000H - @@R_INIT sw 04FA0H 00002H + 04FB8H 00000H + @@R_INIT sw 04FB8H 00002H @@R_INIT task_debug - 04FA2H 00000H + 04FBAH 00000H @@R_INIT task_misc - 04FA2H 00000H - @@R_INIT task_sys 04FA2H 00002H + 04FBAH 00000H + @@R_INIT task_sys 04FBAH 00002H @@R_INIT pedo_alg_thre_det2 - 04FA4H 0000AH - @@R_INIT ini_VECT 04FAEH 00000H + 04FBCH 00006H + @@R_INIT ini_VECT 04FC2H 00000H @@R_INIT task_status - 04FAEH 00002H - @@R_INIT @rom 04FB0H 00000H - @@LCODEL 04FB0H 00008H CSEG - @@LCODEL abs 04FB0H 00008H -* gap * 04FB8H 0003EH + 04FC2H 00002H + @@R_INIT @rom 04FC4H 00000H + @@R_INIS 04FC4H 00000H CSEG UNIT64KP + @@R_INIS @cstart 04FC4H 00000H + @@R_INIS loader 04FC4H 00000H + @@R_INIS pm 04FC4H 00000H + @@R_INIS i2c_ctr 04FC4H 00000H + @@R_INIS main 04FC4H 00000H + @@R_INIS magic 04FC4H 00000H + @@R_INIS WDT 04FC4H 00000H + @@R_INIS i2c_mcu 04FC4H 00000H + @@R_INIS i2c_twl 04FC4H 00000H + @@R_INIS led 04FC4H 00000H + @@R_INIS rtc 04FC4H 00000H + @@R_INIS vreg_ctr 04FC4H 00000H + @@R_INIS vreg_twl 04FC4H 00000H + @@R_INIS adc 04FC4H 00000H + @@R_INIS renge 04FC4H 00000H + @@R_INIS accero 04FC4H 00000H + @@R_INIS self_flash + 04FC4H 00000H + @@R_INIS sw 04FC4H 00000H + @@R_INIS task_debug + 04FC4H 00000H + @@R_INIS task_misc + 04FC4H 00000H + @@R_INIS task_sys 04FC4H 00000H + @@R_INIS pedo_alg_thre_det2 + 04FC4H 00000H + @@R_INIS ini_VECT 04FC4H 00000H + @@R_INIS task_status + 04FC4H 00000H + @@R_INIS @rom 04FC4H 00000H + @@CALT 04FC4H 00000H CSEG + @@CALT @cstart 04FC4H 00000H + @@CALT loader 04FC4H 00000H + @@CALT pm 04FC4H 00000H + @@CALT i2c_ctr 04FC4H 00000H + @@CALT main 04FC4H 00000H + @@CALT magic 04FC4H 00000H + @@CALT WDT 04FC4H 00000H + @@CALT i2c_mcu 04FC4H 00000H + @@CALT i2c_twl 04FC4H 00000H + @@CALT led 04FC4H 00000H + @@CALT rtc 04FC4H 00000H + @@CALT vreg_ctr 04FC4H 00000H + @@CALT vreg_twl 04FC4H 00000H + @@CALT adc 04FC4H 00000H + @@CALT renge 04FC4H 00000H + @@CALT accero 04FC4H 00000H + @@CALT self_flash + 04FC4H 00000H + @@CALT sw 04FC4H 00000H + @@CALT task_debug + 04FC4H 00000H + @@CALT task_misc + 04FC4H 00000H + @@CALT task_sys 04FC4H 00000H + @@CALT pedo_alg_thre_det2 + 04FC4H 00000H + @@CALT ini_VECT 04FC4H 00000H + @@CALT task_status + 04FC4H 00000H + @@RLINIT 04FC4H 00000H CSEG UNIT64KP + @@RLINIT loader 04FC4H 00000H + @@RLINIT pm 04FC4H 00000H + @@RLINIT i2c_ctr 04FC4H 00000H + @@RLINIT main 04FC4H 00000H + @@RLINIT magic 04FC4H 00000H + @@RLINIT WDT 04FC4H 00000H + @@RLINIT i2c_mcu 04FC4H 00000H + @@RLINIT i2c_twl 04FC4H 00000H + @@RLINIT led 04FC4H 00000H + @@RLINIT rtc 04FC4H 00000H + @@RLINIT vreg_ctr 04FC4H 00000H + @@RLINIT vreg_twl 04FC4H 00000H + @@RLINIT adc 04FC4H 00000H + @@RLINIT renge 04FC4H 00000H + @@RLINIT accero 04FC4H 00000H + @@RLINIT self_flash + 04FC4H 00000H + @@RLINIT sw 04FC4H 00000H + @@RLINIT task_debug + 04FC4H 00000H + @@RLINIT task_misc + 04FC4H 00000H + @@RLINIT task_sys 04FC4H 00000H + @@RLINIT pedo_alg_thre_det2 + 04FC4H 00000H + @@RLINIT ini_VECT 04FC4H 00000H + @@RLINIT task_status + 04FC4H 00000H + @@RLINIT @rom 04FC4H 00000H + @@CODEL 04FC4H 00000H CSEG + @@CODEL pm 04FC4H 00000H + @@CODEL i2c_ctr 04FC4H 00000H + @@CODEL magic 04FC4H 00000H + @@CODEL i2c_twl 04FC4H 00000H + @@CODEL led 04FC4H 00000H + @@CODEL rtc 04FC4H 00000H + @@CODEL vreg_ctr 04FC4H 00000H + @@CODEL vreg_twl 04FC4H 00000H + @@CODEL adc 04FC4H 00000H + @@CODEL renge 04FC4H 00000H + @@CODEL accero 04FC4H 00000H + @@CODEL sw 04FC4H 00000H + @@CODEL task_misc + 04FC4H 00000H + @@CODEL task_sys 04FC4H 00000H + @@CODEL pedo_alg_thre_det2 + 04FC4H 00000H + @@CODEL ini_VECT 04FC4H 00000H + @@LCODEL 04FC4H 00008H CSEG + @@LCODEL abs 04FC4H 00008H +* gap * 04FCCH 0002AH MGC_TAIL 04FF6H 0000AH CSEG AT MGC_TAIL magic 04FF6H 0000AH @@ -420,230 +417,230 @@ Direc-file:bsr_mcu.dr BASE ADDRESS=FF900H SIZE=00500H OUTPUT INPUT INPUT BASE SIZE SEGMENT SEGMENT MODULE ADDRESS - @@DATA FF900H 00432H DSEG BASEP + @@DATA FF900H 00430H DSEG BASEP @@DATA @cstart FF900H 00002H @@DATA loader FF902H 00000H - @@DATA pm FF902H 00018H - @@DATA i2c_ctr FF91AH 00006H - @@DATA main FF920H 0021CH - @@DATA magic FFB3CH 00000H - @@DATA WDT FFB3CH 00000H - @@DATA i2c_mcu FFB3CH 0000AH - @@DATA i2c_twl FFB46H 00000H - @@DATA led FFB46H 00088H - @@DATA rtc FFBCEH 00008H - @@DATA vreg_ctr FFBD6H 0005EH - @@DATA vreg_twl FFC34H 00012H - @@DATA adc FFC46H 00018H - @@DATA renge FFC5EH 00022H - @@DATA accero FFC80H 00002H + @@DATA pm FF902H 0001AH + @@DATA i2c_ctr FF91CH 00006H + @@DATA main FF922H 0021CH + @@DATA magic FFB3EH 00000H + @@DATA WDT FFB3EH 00000H + @@DATA i2c_mcu FFB3EH 0000AH + @@DATA i2c_twl FFB48H 00000H + @@DATA led FFB48H 00088H + @@DATA rtc FFBD0H 00008H + @@DATA vreg_ctr FFBD8H 0005EH + @@DATA vreg_twl FFC36H 00010H + @@DATA adc FFC46H 0001AH + @@DATA renge FFC60H 00016H + @@DATA accero FFC76H 00002H @@DATA self_flash - FFC82H 00002H - @@DATA sw FFC84H 00006H + FFC78H 00002H + @@DATA sw FFC7AH 00008H @@DATA task_debug - FFC8AH 00000H + FFC82H 00000H @@DATA task_misc - FFC8AH 0000EH - @@DATA task_sys FFC98H 00002H + FFC82H 00004H + @@DATA task_sys FFC86H 00002H @@DATA pedo_alg_thre_det2 - FFC9AH 00096H - @@DATA ini_VECT FFD30H 00000H + FFC88H 000A6H + @@DATA ini_VECT FFD2EH 00000H @@DATA task_status - FFD30H 00002H - @@DATA @rom FFD32H 00000H - @@INIT FFD32H 0003AH DSEG BASEP - @@INIT @cstart FFD32H 00000H - @@INIT loader FFD32H 00000H - @@INIT pm FFD32H 00002H - @@INIT i2c_ctr FFD34H 00002H - @@INIT main FFD36H 00000H - @@INIT magic FFD36H 00000H - @@INIT WDT FFD36H 00000H - @@INIT i2c_mcu FFD36H 00000H - @@INIT i2c_twl FFD36H 00000H - @@INIT led FFD36H 00006H - @@INIT rtc FFD3CH 00000H - @@INIT vreg_ctr FFD3CH 00000H - @@INIT vreg_twl FFD3CH 00000H - @@INIT adc FFD3CH 0000CH - @@INIT renge FFD48H 00014H - @@INIT accero FFD5CH 00000H + FFD2EH 00002H + @@DATA @rom FFD30H 00000H + @@INIT FFD30H 00036H DSEG BASEP + @@INIT @cstart FFD30H 00000H + @@INIT loader FFD30H 00000H + @@INIT pm FFD30H 00002H + @@INIT i2c_ctr FFD32H 00002H + @@INIT main FFD34H 00000H + @@INIT magic FFD34H 00000H + @@INIT WDT FFD34H 00000H + @@INIT i2c_mcu FFD34H 00000H + @@INIT i2c_twl FFD34H 00000H + @@INIT led FFD34H 00006H + @@INIT rtc FFD3AH 00000H + @@INIT vreg_ctr FFD3AH 00000H + @@INIT vreg_twl FFD3AH 00000H + @@INIT adc FFD3AH 0000CH + @@INIT renge FFD46H 00014H + @@INIT accero FFD5AH 00000H @@INIT self_flash - FFD5CH 00000H - @@INIT sw FFD5CH 00002H + FFD5AH 00000H + @@INIT sw FFD5AH 00002H @@INIT task_debug - FFD5EH 00000H + FFD5CH 00000H @@INIT task_misc - FFD5EH 00000H - @@INIT task_sys FFD5EH 00002H + FFD5CH 00000H + @@INIT task_sys FFD5CH 00002H @@INIT pedo_alg_thre_det2 - FFD60H 0000AH - @@INIT ini_VECT FFD6AH 00000H + FFD5EH 00006H + @@INIT ini_VECT FFD64H 00000H @@INIT task_status - FFD6AH 00002H - @@INIT @rom FFD6CH 00000H - @@INIS FFD6CH 00000H DSEG UNITP - @@INIS @cstart FFD6CH 00000H - @@INIS loader FFD6CH 00000H - @@INIS pm FFD6CH 00000H - @@INIS i2c_ctr FFD6CH 00000H - @@INIS main FFD6CH 00000H - @@INIS magic FFD6CH 00000H - @@INIS WDT FFD6CH 00000H - @@INIS i2c_mcu FFD6CH 00000H - @@INIS i2c_twl FFD6CH 00000H - @@INIS led FFD6CH 00000H - @@INIS rtc FFD6CH 00000H - @@INIS vreg_ctr FFD6CH 00000H - @@INIS vreg_twl FFD6CH 00000H - @@INIS adc FFD6CH 00000H - @@INIS renge FFD6CH 00000H - @@INIS accero FFD6CH 00000H + FFD64H 00002H + @@INIT @rom FFD66H 00000H + @@INIS FFD66H 00000H DSEG UNITP + @@INIS @cstart FFD66H 00000H + @@INIS loader FFD66H 00000H + @@INIS pm FFD66H 00000H + @@INIS i2c_ctr FFD66H 00000H + @@INIS main FFD66H 00000H + @@INIS magic FFD66H 00000H + @@INIS WDT FFD66H 00000H + @@INIS i2c_mcu FFD66H 00000H + @@INIS i2c_twl FFD66H 00000H + @@INIS led FFD66H 00000H + @@INIS rtc FFD66H 00000H + @@INIS vreg_ctr FFD66H 00000H + @@INIS vreg_twl FFD66H 00000H + @@INIS adc FFD66H 00000H + @@INIS renge FFD66H 00000H + @@INIS accero FFD66H 00000H @@INIS self_flash - FFD6CH 00000H - @@INIS sw FFD6CH 00000H + FFD66H 00000H + @@INIS sw FFD66H 00000H @@INIS task_debug - FFD6CH 00000H + FFD66H 00000H @@INIS task_misc - FFD6CH 00000H - @@INIS task_sys FFD6CH 00000H + FFD66H 00000H + @@INIS task_sys FFD66H 00000H @@INIS pedo_alg_thre_det2 - FFD6CH 00000H - @@INIS ini_VECT FFD6CH 00000H + FFD66H 00000H + @@INIS ini_VECT FFD66H 00000H @@INIS task_status - FFD6CH 00000H - @@INIS @rom FFD6CH 00000H - @@DATS FFD6CH 00000H DSEG UNITP - @@DATS @cstart FFD6CH 00000H - @@DATS loader FFD6CH 00000H - @@DATS pm FFD6CH 00000H - @@DATS i2c_ctr FFD6CH 00000H - @@DATS main FFD6CH 00000H - @@DATS magic FFD6CH 00000H - @@DATS WDT FFD6CH 00000H - @@DATS i2c_mcu FFD6CH 00000H - @@DATS i2c_twl FFD6CH 00000H - @@DATS led FFD6CH 00000H - @@DATS rtc FFD6CH 00000H - @@DATS vreg_ctr FFD6CH 00000H - @@DATS vreg_twl FFD6CH 00000H - @@DATS adc FFD6CH 00000H - @@DATS renge FFD6CH 00000H - @@DATS accero FFD6CH 00000H + FFD66H 00000H + @@INIS @rom FFD66H 00000H + @@DATS FFD66H 00000H DSEG UNITP + @@DATS @cstart FFD66H 00000H + @@DATS loader FFD66H 00000H + @@DATS pm FFD66H 00000H + @@DATS i2c_ctr FFD66H 00000H + @@DATS main FFD66H 00000H + @@DATS magic FFD66H 00000H + @@DATS WDT FFD66H 00000H + @@DATS i2c_mcu FFD66H 00000H + @@DATS i2c_twl FFD66H 00000H + @@DATS led FFD66H 00000H + @@DATS rtc FFD66H 00000H + @@DATS vreg_ctr FFD66H 00000H + @@DATS vreg_twl FFD66H 00000H + @@DATS adc FFD66H 00000H + @@DATS renge FFD66H 00000H + @@DATS accero FFD66H 00000H @@DATS self_flash - FFD6CH 00000H - @@DATS sw FFD6CH 00000H + FFD66H 00000H + @@DATS sw FFD66H 00000H @@DATS task_debug - FFD6CH 00000H + FFD66H 00000H @@DATS task_misc - FFD6CH 00000H - @@DATS task_sys FFD6CH 00000H + FFD66H 00000H + @@DATS task_sys FFD66H 00000H @@DATS pedo_alg_thre_det2 - FFD6CH 00000H - @@DATS ini_VECT FFD6CH 00000H + FFD66H 00000H + @@DATS ini_VECT FFD66H 00000H @@DATS task_status - FFD6CH 00000H - @@DATS @rom FFD6CH 00000H - FSL_DATA FFD6CH 00010H DSEG UNITP + FFD66H 00000H + @@DATS @rom FFD66H 00000H + FSL_DATA FFD66H 00010H DSEG UNITP FSL_DATA fsl_common - FFD6CH 00010H - @@INITL FFD7CH 00000H DSEG UNIT64KP - @@INITL loader FFD7CH 00000H - @@INITL pm FFD7CH 00000H - @@INITL i2c_ctr FFD7CH 00000H - @@INITL main FFD7CH 00000H - @@INITL magic FFD7CH 00000H - @@INITL WDT FFD7CH 00000H - @@INITL i2c_mcu FFD7CH 00000H - @@INITL i2c_twl FFD7CH 00000H - @@INITL led FFD7CH 00000H - @@INITL rtc FFD7CH 00000H - @@INITL vreg_ctr FFD7CH 00000H - @@INITL vreg_twl FFD7CH 00000H - @@INITL adc FFD7CH 00000H - @@INITL renge FFD7CH 00000H - @@INITL accero FFD7CH 00000H + FFD66H 00010H + @@INITL FFD76H 00000H DSEG UNIT64KP + @@INITL loader FFD76H 00000H + @@INITL pm FFD76H 00000H + @@INITL i2c_ctr FFD76H 00000H + @@INITL main FFD76H 00000H + @@INITL magic FFD76H 00000H + @@INITL WDT FFD76H 00000H + @@INITL i2c_mcu FFD76H 00000H + @@INITL i2c_twl FFD76H 00000H + @@INITL led FFD76H 00000H + @@INITL rtc FFD76H 00000H + @@INITL vreg_ctr FFD76H 00000H + @@INITL vreg_twl FFD76H 00000H + @@INITL adc FFD76H 00000H + @@INITL renge FFD76H 00000H + @@INITL accero FFD76H 00000H @@INITL self_flash - FFD7CH 00000H - @@INITL sw FFD7CH 00000H + FFD76H 00000H + @@INITL sw FFD76H 00000H @@INITL task_debug - FFD7CH 00000H + FFD76H 00000H @@INITL task_misc - FFD7CH 00000H - @@INITL task_sys FFD7CH 00000H + FFD76H 00000H + @@INITL task_sys FFD76H 00000H @@INITL pedo_alg_thre_det2 - FFD7CH 00000H - @@INITL ini_VECT FFD7CH 00000H + FFD76H 00000H + @@INITL ini_VECT FFD76H 00000H @@INITL task_status - FFD7CH 00000H - @@INITL @rom FFD7CH 00000H - @@DATAL FFD7CH 00000H DSEG UNIT64KP - @@DATAL loader FFD7CH 00000H - @@DATAL pm FFD7CH 00000H - @@DATAL i2c_ctr FFD7CH 00000H - @@DATAL main FFD7CH 00000H - @@DATAL magic FFD7CH 00000H - @@DATAL WDT FFD7CH 00000H - @@DATAL i2c_mcu FFD7CH 00000H - @@DATAL i2c_twl FFD7CH 00000H - @@DATAL led FFD7CH 00000H - @@DATAL rtc FFD7CH 00000H - @@DATAL vreg_ctr FFD7CH 00000H - @@DATAL vreg_twl FFD7CH 00000H - @@DATAL adc FFD7CH 00000H - @@DATAL renge FFD7CH 00000H - @@DATAL accero FFD7CH 00000H + FFD76H 00000H + @@INITL @rom FFD76H 00000H + @@DATAL FFD76H 00000H DSEG UNIT64KP + @@DATAL loader FFD76H 00000H + @@DATAL pm FFD76H 00000H + @@DATAL i2c_ctr FFD76H 00000H + @@DATAL main FFD76H 00000H + @@DATAL magic FFD76H 00000H + @@DATAL WDT FFD76H 00000H + @@DATAL i2c_mcu FFD76H 00000H + @@DATAL i2c_twl FFD76H 00000H + @@DATAL led FFD76H 00000H + @@DATAL rtc FFD76H 00000H + @@DATAL vreg_ctr FFD76H 00000H + @@DATAL vreg_twl FFD76H 00000H + @@DATAL adc FFD76H 00000H + @@DATAL renge FFD76H 00000H + @@DATAL accero FFD76H 00000H @@DATAL self_flash - FFD7CH 00000H - @@DATAL sw FFD7CH 00000H + FFD76H 00000H + @@DATAL sw FFD76H 00000H @@DATAL task_debug - FFD7CH 00000H + FFD76H 00000H @@DATAL task_misc - FFD7CH 00000H - @@DATAL task_sys FFD7CH 00000H + FFD76H 00000H + @@DATAL task_sys FFD76H 00000H @@DATAL pedo_alg_thre_det2 - FFD7CH 00000H - @@DATAL ini_VECT FFD7CH 00000H + FFD76H 00000H + @@DATAL ini_VECT FFD76H 00000H @@DATAL task_status - FFD7CH 00000H - @@DATAL @rom FFD7CH 00000H -* gap * FFD7CH 00084H + FFD76H 00000H + @@DATAL @rom FFD76H 00000H +* gap * FFD76H 0008AH MEMORY=RAM2 BASE ADDRESS=FFE20H SIZE=000C0H OUTPUT INPUT INPUT BASE SIZE SEGMENT SEGMENT MODULE ADDRESS - @@BITS FFE20H 00004H BSEG + @@BITS FFE20H 00005H BSEG @@BITS @cstart FFE20H.0 00000H.0 @@BITS loader FFE20H.0 00000H.0 - @@BITS pm FFE20H.0 00000H.7 - @@BITS i2c_ctr FFE20H.7 00000H.0 - @@BITS main FFE20H.7 00000H.0 - @@BITS magic FFE20H.7 00000H.0 - @@BITS WDT FFE20H.7 00000H.0 - @@BITS i2c_mcu FFE20H.7 00000H.3 - @@BITS i2c_twl FFE21H.2 00000H.0 - @@BITS led FFE21H.2 00000H.5 - @@BITS rtc FFE21H.7 00000H.3 - @@BITS vreg_ctr FFE22H.2 00000H.1 - @@BITS vreg_twl FFE22H.3 00000H.0 - @@BITS adc FFE22H.3 00000H.4 - @@BITS renge FFE22H.7 00000H.3 - @@BITS accero FFE23H.2 00000H.0 + @@BITS pm FFE20H.0 00001H.0 + @@BITS i2c_ctr FFE21H.0 00000H.0 + @@BITS main FFE21H.0 00000H.0 + @@BITS magic FFE21H.0 00000H.0 + @@BITS WDT FFE21H.0 00000H.0 + @@BITS i2c_mcu FFE21H.0 00000H.3 + @@BITS i2c_twl FFE21H.3 00000H.0 + @@BITS led FFE21H.3 00000H.5 + @@BITS rtc FFE22H.0 00000H.3 + @@BITS vreg_ctr FFE22H.3 00000H.1 + @@BITS vreg_twl FFE22H.4 00000H.0 + @@BITS adc FFE22H.4 00000H.4 + @@BITS renge FFE23H.0 00000H.3 + @@BITS accero FFE23H.3 00000H.0 @@BITS self_flash - FFE23H.2 00000H.0 - @@BITS sw FFE23H.2 00000H.2 + FFE23H.3 00000H.0 + @@BITS sw FFE23H.3 00000H.2 @@BITS task_debug - FFE23H.4 00000H.0 + FFE23H.5 00000H.0 @@BITS task_misc - FFE23H.4 00000H.2 - @@BITS task_sys FFE23H.6 00000H.0 + FFE23H.5 00000H.2 + @@BITS task_sys FFE23H.7 00000H.0 @@BITS pedo_alg_thre_det2 - FFE23H.6 00000H.1 - @@BITS ini_VECT FFE23H.7 00000H.0 + FFE23H.7 00000H.2 + @@BITS ini_VECT FFE24H.1 00000H.0 @@BITS task_status - FFE23H.7 00000H.0 -* gap * FFE24H 000B0H + FFE24H.1 00000H.0 +* gap * FFE25H 000AFH @@SEGREG FFED4H 00004H DSEG AT @@SEGREG @SEGREG FFED4H 00004H @@RTARG0 FFED8H 00008H DSEG AT diff --git a/trunk/bsr_system.h b/trunk/bsr_system.h index 75bfcb4..c15dfd4 100644 --- a/trunk/bsr_system.h +++ b/trunk/bsr_system.h @@ -32,19 +32,27 @@ enum model_ MODEL_RESERVED3, }; +enum family_ +{ + FAMILY_CTR, + FAMILY_SPFL, + FAMILY_SHRIMP +}; + // タスクシステムの状態情報など typedef struct _system_status_ { enum pwr_state_ pwr_state; enum poweron_reason_ poweron_reason; unsigned char reboot:1; - unsigned char info_fullcolor:1; +// unsigned char info_fullcolor:1; unsigned char force_off:1; unsigned char captureBox:1; // キャプチャ箱 SDKには実機と返す unsigned char taikendai:1; unsigned char taikendai_nbd:1; unsigned char is_dev:1; enum model_ model; + enum family_ family; }system_status_; diff --git a/trunk/led.c b/trunk/led.c index 0efb448..af0f16a 100644 --- a/trunk/led.c +++ b/trunk/led.c @@ -1,6 +1,5 @@ /* ======================================================== LED.c - ======================================================== */ #pragma sfr @@ -25,59 +24,23 @@ #define BIT_MD0 0 -// ======================================================== -// スリープ中明滅のテーブル。マジか。 -const u8 LED_PTN_SLEEP[] = { - 25, 38, 52, 68, 83, 98, 110, 119, - 125, 128, 128, 125, 119, 110, 98, 83, - 68, 52, 38, 25, 16, 10, 8, 8, - 8, 8, 8, 8, 8, 8, 10, 16 - }; - - -#define LED_SLEEP_FRAME_LEN 71 -#define LED_SLEEP_DIM_LEN 71 -#define LED_SLEEP_FRAME_NUM 32 - - // ======================================================== -static void led_pow_normal( ); -static void led_pow_sleep( ); -static void led_pow_bt_empty(); -static u8 led_pow_batt_low(); - - - -// ======================================================== -// 赤LEDの電池残量LEDの点滅パターン -st_led_red_batt_empty led_red_batt_empty = { 0x55, 0x55, 0x55, 0x55 }; - -bit initialized; +bit ledInitialized; // お知らせLEDのパターンデータ uni_info_LED info_LED; -// フルカラーとの自動判別のため、一時領域としてもっておく -bit LED_pow_red_Mirror; bit info_led_off; bit info_led_override; -bit cam_led_update; - - -// 電源LEDのスリープパターンのステータス類 -u8 time_to_next_frame_sleep = LED_SLEEP_FRAME_LEN; -u8 frame_sleep; -st_LED_dim_status LED_dim_status_sleep; // 充電中か否か extern bit BT_IN_CHG_delayed_n; - // ======================================================== #define led_fade_to( now, goal ) now = fade_to( now, goal ) @@ -146,9 +109,6 @@ void LED_init( )         6 電源 L         7 電源 H */ - INFO_LED_IS_FULLCOLOR_PU = 1; // お知らせLEDを識別 先に上げておく - INFO_LED_IS_FULLCOLOR_PM = 1; - TAU0EN = 1; TPS0 = BIT_PRS012 | BIT_PRS002; // マスタークロックはCK01,8M/2 /2^4 = 250kHz @@ -170,32 +130,13 @@ void LED_init( ) TDR00 = LED_BRIGHT_MAX - 1; // 周期 10bit - // お知らせLEDを識別 // -// INFO_LED_IS_FULLCOLOR_PU = 1; // もうちょっと前に上げておかないと… - system_status.info_fullcolor = 1; - if( system_status.model == MODEL_TS_BOARD ) - { -#ifndef _DBG_FORCE_FULLCOLOR_ - system_status.info_fullcolor = 0; -#endif - } - else - { - if( INFO_LED_IS_FULLCOLOR_n ) - { - system_status.info_fullcolor = 0; - } - } - INFO_LED_IS_FULLCOLOR_n = 0; - INFO_LED_IS_FULLCOLOR_PM = 0; +// system_status.info_fullcolor = 1; LED_duty_notify_red = 0; LED_duty_notify_blu = 0; LED_duty_notify_grn = 0; LED_pow_red = 0; LED_CAM = 0; - LED_old_pow_red = 0; - LED_pow_red_Mirror = 0; if( system_status.reboot ) { @@ -203,7 +144,7 @@ void LED_init( ) LED_duty_pow_blu = LED_BRIGHT_MAX; } info_led_off = false; - initialized = true; + ledInitialized = true; } @@ -215,266 +156,12 @@ void LED_stop( ) TAU0EN = 0; LED_pow_red = 0; LED_CAM = 0; - LED_old_pow_red = 0; - initialized = false; + ledInitialized = false; } -/* ======================================================== - // 電源LED - LED_POW_B,R 6,7 - - TDR00 周期(0x03FF。TPS0で250kHzでカウントアップ。10bitなら250Hz位になる) - TDR0x Duty 0で消灯、TDR00(より大 =0x03FF以上)で点灯です。 - - enum pwr_state_{ - OFF_TRIG = 0, - ON_CHECK, - ON_TRIG, - ON, - SLEEP -}; - -enum LED_ILUM_MODE{ - LED_POW_ILM_AUTO, - LED_POW_ILM_ON, - LED_POW_ILM_SLEEP, - LED_POW_ILM_CEOFF -}; - ======================================================== */ -void tsk_led_pow( ) -{ - if( ! initialized ) - { - return; - // おしまい - } - - info_led_override = false; - - switch ( vreg_ctr[VREG_C_LED_POW] ) - { - case ( LED_POW_ILM_AUTO ): - default: - led_pow_normal( ); - break; - - case ( LED_POW_ILM_SLEEP ): - led_pow_sleep( ); - break; - - case ( LED_POW_ILM_ON ): - led_fade_to( LED_duty_pow_blu, vreg_ctr[VREG_C_LED_BRIGHT] ); - LED_pow_red_Mirror = 0; - break; - - case ( LED_POW_ILM_OFF ): - led_fade_to( LED_duty_pow_blu, 0 ); - LED_pow_red_Mirror = 0; - break; - - case ( LED_POW_ILM_ONLY_RED ): - LED_duty_pow_blu = 0; - LED_pow_red_Mirror = 1; - break; - - case ( LED_POW_ILM_ONLY_BLUE ): - LED_duty_pow_blu = LED_BRIGHT_MAX; - LED_pow_red_Mirror = 0; - break; - - case ( LED_POW_ILM_FORCE_BT_EMPTY ): - led_pow_bt_empty(); - break; - } - - if( system_status.pwr_state == OFF || system_status.pwr_state == ON_CHECK ) - { - LED_pow_red_Mirror = 0; - info_led_override = false; - } - - // 実際にLEDの更新 - if( system_status.info_fullcolor ) - { - LED_pow_red = LED_pow_red_Mirror; - } - else - { - LED_old_pow_red = LED_pow_red_Mirror; - } - - if( info_led_override ) - { - if( system_status.info_fullcolor ) - { - LED_duty_notify_blu = 0; - LED_duty_notify_grn = 0; - LED_duty_notify_red = LED_pow_red_Mirror ? 255: 0; - } - else - { - LED_duty_old_NOTIFY = LED_pow_red_Mirror ? 255: 0; - } - } -} - - - -/* ======================================================== - 電池残量で、 青→赤→赤点滅 - ======================================================== */ -static void led_pow_normal( ) -{ - time_to_next_frame_sleep = LED_SLEEP_FRAME_LEN; - frame_sleep = 0; - LED_dim_status_sleep.now = (sx16)LED_duty_pow_blu * 128; - - if( led_pow_batt_low() != 0 ) // 赤の点灯も←でやっています - { - return; - // おしまい - } - - // 青点灯 - led_fade_to( LED_duty_pow_blu, vreg_ctr[VREG_C_LED_BRIGHT] ); -} - - - -/* ======================================================== - ホタルパターン - 電池残量で赤→赤点滅にする - ======================================================== */ -static void led_pow_sleep( ) -{ - if( led_pow_batt_low() != 0 ) // 赤の点灯も←でやっています - { - time_to_next_frame_sleep = LED_SLEEP_FRAME_LEN; - frame_sleep = 0; - LED_dim_status_sleep.now = (sx16)LED_duty_pow_blu * 128; - return; - // おしまい - } - - LED_dim_status_sleep.to = LED_PTN_SLEEP[frame_sleep] * 128; - - // グラデーションのデルタを計算 - LED_dim_status_sleep.delta = (( LED_dim_status_sleep.to - LED_dim_status_sleep.now ) ) / LED_SLEEP_DIM_LEN; - led_fade_to2( LED_duty_pow_blu, &LED_dim_status_sleep ); - - // 次のフレームに進める? - time_to_next_frame_sleep -= 1; - if( time_to_next_frame_sleep == 0 ) - { - time_to_next_frame_sleep = LED_SLEEP_FRAME_LEN; - - frame_sleep += 1; - if( frame_sleep >= LED_SLEEP_FRAME_NUM -1 ) - { - frame_sleep = 0; - } - } -} - - - -/* ======================================================== - 電池が少ないときの共通 - 返値: 0 電池が少なくなかった -     1    少なかったので共通パターンにした - ======================================================== */ -//#define LED_RED_SLEEP_DIM 3 -static u8 led_pow_batt_low() -{ -// static u8 led_red_dim_count; - - if( vreg_ctr[VREG_C_BT_REMAIN] > BATT_TH_LO ) - { - LED_pow_red_Mirror = 0; - return 0; - // おしまい - } - - if(( vreg_ctr[VREG_C_BT_REMAIN] > BATT_TH_EMPTY ) || !BT_IN_CHG_delayed_n ) - // 電池残量が5%(〜10%) または、それ未満でも充電中 - { - // 赤点灯 - led_fade_to( LED_duty_pow_blu, 0 ); - -/* - 減光を試してみたが、このようなお手軽実装ではちらついてしまってだめだ - if( vreg_ctr[VREG_C_LED_POW] == LED_POW_ILM_SLEEP ) - { - if( led_red_dim_count == 0 ) - { - LED_pow_red_Mirror = 1; - led_red_dim_count = LED_RED_SLEEP_DIM; - } - else - { - LED_pow_red_Mirror = 0; - led_red_dim_count -= 1; - } - } - else -*/ - { - LED_pow_red_Mirror = 1; - } - - } - else // 電池が5%未満 かつ アダプタなし - { - led_pow_bt_empty(); - } - return 1; -} - - - - -/* ======================================================== - 電池がないパターン -  指定パターンを流す -  お知らせを上書きしたりする - ======================================================== */ -static void led_pow_bt_empty() -{ - static u8 delay; - static u8 red_blink_poi; - - info_led_override = true; - - // 赤点滅 - led_fade_to( LED_duty_pow_blu, 0 ); - - // 赤の点滅パターンも指定できる - delay += 1; - if( delay < 64 ) // フレームの保持時間稼ぎ - { - return; - } - delay = 0; - - if( led_red_batt_empty.dats[ red_blink_poi / 8 ] & ( 1 << ( red_blink_poi % 8 )) ) - { - LED_pow_red_Mirror = 1; - } - else - { - LED_pow_red_Mirror = 0; - } - red_blink_poi += 1; - if( red_blink_poi >= 32 ) - { - red_blink_poi = 0; - } -} - - @@ -642,145 +329,7 @@ void tsk_led_notify( ) } } - if( system_status.info_fullcolor ) - { - led_fade_to2( LED_duty_notify_blu, &LED_dim_status_info_B ); - led_fade_to2( LED_duty_notify_red, &LED_dim_status_info_R ); - led_fade_to2( LED_duty_notify_grn, &LED_dim_status_info_G ); - } - else - { - led_fade_to2( LED_duty_old_NOTIFY, &LED_dim_status_info_B ); - } -} - - - - -/******************************************************//** - LED_Cam TO02 -\n BLINK,*_PLUSE の時は、1周期分は必ずその状態になります。 -\n その間に OFF→BLINK などされると、OFFが無視されます。 - *********************************************************/ -void tsk_led_cam( ) -{ - static u8 state_led_cam = 0; - static u16 task_interval; - u8 LED_CAM_mirror; - - DI(); // レジスタへの書き込みで強制起動がかかることがあるため - if( !cam_led_update ) - { - if( task_interval != 0 ) - { - task_interval -= 1; - return; - } - } - cam_led_update = false; // TWL のブリンク設定(一発だけ点灯)のため - EI(); - - if( system_status.pwr_state == SLEEP ) // sleep中、強制消灯 - { - LED_CAM_mirror = 0; - state_led_cam = 0; - } - else - { - // ブリンクのように待たせたいとき以外は毎週起動する - // (レジスタの変更にすぐに反応する) - switch ( vreg_ctr[VREG_C_LED_CAM] ) - { - case ( CAM_LED_OFF ): - default: - LED_CAM_mirror = 0; - state_led_cam = 0; - break; - - case ( CAM_LED_ON ): - LED_CAM_mirror = 1; - state_led_cam = 0; - break; - - case ( CAM_LED_BLINK ): - if( state_led_cam == 0 ) - { - LED_CAM_mirror = 1; - state_led_cam = 1; - } - else - { - LED_CAM_mirror = 0; - state_led_cam = 0; - } - task_interval = 250; - break; - - case ( CAM_LED_ON_PLUSE ): - if( state_led_cam == 0 ) - { - LED_CAM_mirror = 1; - state_led_cam = 1; - task_interval = 250; - } - else - { - vreg_ctr[VREG_C_LED_CAM] = CAM_LED_OFF; - } - break; - - case ( CAM_LED_OFF_PLUSE ): - if( state_led_cam == 0 ) - { - LED_CAM_mirror = 0; - state_led_cam = 1; - task_interval = 250; - } - else - { - vreg_ctr[VREG_C_LED_CAM] = CAM_LED_ON; - } - break; - - case( CAM_LED_BY_TWL ): - // TWL互換 // - switch ( vreg_twl[ REG_TWL_INT_ADRS_CAM ] ){ //. switchのネストとか… - case( TWL_CAMLED_OFF ): - LED_CAM_mirror = 0; - state_led_cam = 0; - break; - - case( TWL_CAMLED_BLINK ): - if( state_led_cam == 0 ) - { - LED_CAM_mirror = 1; - state_led_cam = 1; - } - else - { - LED_CAM_mirror = 0; - state_led_cam = 0; - } - task_interval = 600 / SYS_INTERVAL_TICK + 250; - break; - - case( TWL_CAMLED_ON ): - case( TWL_CAMLED_DEF_ON ): - default: - LED_CAM_mirror = 1; - state_led_cam = 1; - break; - } - } - } // if( system_status.pwr_state == sleep ) ... else ... - - // 輝度更新 // - if( system_status.info_fullcolor ) - { - LED_CAM = LED_CAM_mirror; - } - else - { - LED_old_CAM = LED_CAM_mirror; - } + led_fade_to2( LED_duty_notify_blu, &LED_dim_status_info_B ); + led_fade_to2( LED_duty_notify_red, &LED_dim_status_info_R ); + led_fade_to2( LED_duty_notify_grn, &LED_dim_status_info_G ); } diff --git a/trunk/led.h b/trunk/led.h index 2ce119b..d745ba4 100644 --- a/trunk/led.h +++ b/trunk/led.h @@ -21,19 +21,6 @@ #define LED_CAM P7.5 -// 旧仕様 ///////////////////////////// -// LED_DUTY -//#define LED_duty_old_pow_blu TDR06 同じ -//#define LED_duty_old_WiFi TDR03 同じ -#define LED_duty_old_NOTIFY TDR05 -//#define LED_duty_old_CAM TDR02 -//#define LED_duty_old_3d TDR01 同じ -// wifi2はPWMできません。 -#define LED_old_pow_red P1.5 -#define LED_old_CAM P1.0 - - - #define NOTIFY_LED_TERM 32 @@ -150,4 +137,10 @@ void LED_stop( ); extern void tsk_led_cam(); + +// ==================================== +extern bit ledInitialized; +extern bit info_led_override; + + #endif diff --git a/trunk/led_cam.c b/trunk/led_cam.c new file mode 100644 index 0000000..a49477e --- /dev/null +++ b/trunk/led_cam.c @@ -0,0 +1,141 @@ +/******************************************************//** + LED_Cam TO02 +\n BLINK,*_PLUSE の時は、1周期分は必ずその状態になります。 +\n その間に OFF→BLINK などされると、OFFが無視されます。 + *********************************************************/ +#pragma sfr + +#include "incs.h" +#include "led.h" + + + +// ======================================================== +static u8 state_led_cam = 0; +static u16 task_interval; + +bit cam_led_update; + + + +// ======================================================== +static void cam_led_twl(); + + + +// ======================================================== +void tsk_led_cam( ) +{ + DI(); // レジスタへの書き込みで強制起動がかかることがあるため + if( !cam_led_update ) + { + if( task_interval != 0 ) + { + task_interval -= 1; + return; + } + } + cam_led_update = false; // TWL のブリンク設定(一発だけ点灯)のため + EI(); + + if( system_status.pwr_state == SLEEP ) // sleep中、強制消灯 + { + LED_CAM = 0; + state_led_cam = 0; + } + else + { + // ブリンクのように待たせたいとき以外は毎週起動する + // (レジスタの変更にすぐに反応する) + switch ( vreg_ctr[VREG_C_LED_CAM] ) + { + case ( CAM_LED_OFF ): + default: + LED_CAM = 0; + state_led_cam = 0; + break; + + case ( CAM_LED_ON ): + LED_CAM = 1; + state_led_cam = 0; + break; + + case ( CAM_LED_BLINK ): + if( state_led_cam == 0 ) + { + LED_CAM = 1; + state_led_cam = 1; + } + else + { + LED_CAM = 0; + state_led_cam = 0; + } + task_interval = 250; + break; + + case ( CAM_LED_ON_PLUSE ): + if( state_led_cam == 0 ) + { + LED_CAM = 1; + state_led_cam = 1; + task_interval = 250; + } + else + { + vreg_ctr[VREG_C_LED_CAM] = CAM_LED_OFF; + } + break; + + case ( CAM_LED_OFF_PLUSE ): + if( state_led_cam == 0 ) + { + LED_CAM = 0; + state_led_cam = 1; + task_interval = 250; + } + else + { + vreg_ctr[VREG_C_LED_CAM] = CAM_LED_ON; + } + break; + + case( CAM_LED_BY_TWL ): + cam_led_twl(); + } + } // if( system_status.pwr_state == sleep ) ... else ... +} + + + +void cam_led_twl() +{ + // TWL互換 // + switch ( vreg_twl[ REG_TWL_INT_ADRS_CAM ] ){ + case( TWL_CAMLED_OFF ): + LED_CAM = 0; + state_led_cam = 0; + break; + + case( TWL_CAMLED_BLINK ): + if( state_led_cam == 0 ) + { + LED_CAM = 1; + state_led_cam = 1; + } + else + { + LED_CAM = 0; + state_led_cam = 0; + } + task_interval = 600 / SYS_INTERVAL_TICK + 250; + break; + + case( TWL_CAMLED_ON ): + case( TWL_CAMLED_DEF_ON ): + default: + LED_CAM = 1; + state_led_cam = 1; + break; + } +} diff --git a/trunk/led_pow.c b/trunk/led_pow.c new file mode 100644 index 0000000..2d0bbe9 --- /dev/null +++ b/trunk/led_pow.c @@ -0,0 +1,265 @@ +/* ======================================================== + // 電源LED + LED_POW_B,R 6,7 + + TDR00 周期(0x03FF。TPS0で250kHzでカウントアップ。10bitなら250Hz位になる) + TDR0x Duty 0で消灯、TDR00(より大 =0x03FF以上)で点灯です。 + + enum pwr_state_{ + OFF_TRIG = 0, + ON_CHECK, + ON_TRIG, + ON, + SLEEP +}; + +enum LED_ILUM_MODE{ + LED_POW_ILM_AUTO, + LED_POW_ILM_ON, + LED_POW_ILM_SLEEP, + LED_POW_ILM_CEOFF +}; + ======================================================== */ +#pragma sfr + +#include "incs.h" +#include "led.h" + + +// ======================================================== +// スリープ中明滅のテーブル。マジか。 +const u8 LED_PTN_SLEEP[] = { + 25, 38, 52, 68, 83, 98, 110, 119, + 125, 128, 128, 125, 119, 110, 98, 83, + 68, 52, 38, 25, 16, 10, 8, 8, + 8, 8, 8, 8, 8, 8, 10, 16 + }; + + +// 赤LEDの電池残量LEDの点滅パターン +st_led_red_batt_empty led_red_batt_empty = { 0x55, 0x55, 0x55, 0x55 }; +#define LED_SLEEP_FRAME_LEN 71 +#define LED_SLEEP_DIM_LEN 71 +#define LED_SLEEP_FRAME_NUM 32 + + + +// ======================================================== +static void led_pow_normal( ); +static void led_pow_sleep( ); +static void led_pow_bt_empty(); +static u8 led_pow_batt_low(); + +#define led_fade_to( now, goal ) now = fade_to( now, goal ) +extern u8 fade_to( u8 now, u8 goal ); + +#define led_fade_to2( led, status ) led = fade_to2( status ) +extern u8 fade_to2( st_LED_dim_status* status ); + + + +// ======================================================== +// 電源LEDのスリープパターンのステータス類 +u8 time_to_next_frame_sleep = LED_SLEEP_FRAME_LEN; +u8 frame_sleep; +st_LED_dim_status LED_dim_status_sleep; + +extern bit ledInitialized; +extern bit BT_IN_CHG_delayed_n; + + + +// ======================================================== +void tsk_led_pow( ) +{ + if( ! ledInitialized ) + { + return; + // おしまい + } + + info_led_override = false; + + switch ( vreg_ctr[VREG_C_LED_POW] ) + { + case ( LED_POW_ILM_AUTO ): + default: + led_pow_normal( ); + break; + + case ( LED_POW_ILM_SLEEP ): + led_pow_sleep( ); + break; + + case ( LED_POW_ILM_ON ): + led_fade_to( LED_duty_pow_blu, vreg_ctr[VREG_C_LED_BRIGHT] ); + LED_pow_red = 0; + break; + + case ( LED_POW_ILM_OFF ): + led_fade_to( LED_duty_pow_blu, 0 ); + LED_pow_red = 0; + break; + + case ( LED_POW_ILM_ONLY_RED ): + LED_duty_pow_blu = 0; + LED_pow_red = 1; + break; + + case ( LED_POW_ILM_ONLY_BLUE ): + LED_duty_pow_blu = LED_BRIGHT_MAX; + LED_pow_red = 0; + break; + + case ( LED_POW_ILM_FORCE_BT_EMPTY ): + led_pow_bt_empty(); + break; + } + + if( system_status.pwr_state == OFF || system_status.pwr_state == ON_CHECK ) + { + LED_pow_red = 0; + info_led_override = false; + } + + if( info_led_override ) + { + LED_duty_notify_blu = 0; + LED_duty_notify_grn = 0; + LED_duty_notify_red = LED_pow_red ? 255: 0; + } +} + + + +/* ======================================================== + 電池残量で、 青→赤→赤点滅 + ======================================================== */ +static void led_pow_normal( ) +{ + time_to_next_frame_sleep = LED_SLEEP_FRAME_LEN; + frame_sleep = 0; + LED_dim_status_sleep.now = (sx16)LED_duty_pow_blu * 128; + + if( led_pow_batt_low() != 0 ) // 赤の点灯も←でやっています + { + return; + // おしまい + } + + // 青点灯 + led_fade_to( LED_duty_pow_blu, vreg_ctr[VREG_C_LED_BRIGHT] ); +} + + + +/* ======================================================== + ホタルパターン + 電池残量で赤→赤点滅にする + ======================================================== */ +static void led_pow_sleep( ) +{ + if( led_pow_batt_low() != 0 ) // 赤の点灯も←でやっています + { + time_to_next_frame_sleep = LED_SLEEP_FRAME_LEN; + frame_sleep = 0; + LED_dim_status_sleep.now = (sx16)LED_duty_pow_blu * 128; + return; + // おしまい + } + + LED_dim_status_sleep.to = LED_PTN_SLEEP[frame_sleep] * 128; + + // グラデーションのデルタを計算 + LED_dim_status_sleep.delta = (( LED_dim_status_sleep.to - LED_dim_status_sleep.now ) ) / LED_SLEEP_DIM_LEN; + led_fade_to2( LED_duty_pow_blu, &LED_dim_status_sleep ); + + // 次のフレームに進める? + time_to_next_frame_sleep -= 1; + if( time_to_next_frame_sleep == 0 ) + { + time_to_next_frame_sleep = LED_SLEEP_FRAME_LEN; + + frame_sleep += 1; + if( frame_sleep >= LED_SLEEP_FRAME_NUM -1 ) + { + frame_sleep = 0; + } + } +} + + + +/* ======================================================== + 電池が少ないときの共通 + 返値: 0 電池が少なくなかった +     1    少なかったので共通パターンにした + ======================================================== */ +static u8 led_pow_batt_low() +{ + if( vreg_ctr[VREG_C_BT_REMAIN] > BATT_TH_LO ) + { + LED_pow_red = 0; + return 0; + // おしまい + } + + if(( vreg_ctr[VREG_C_BT_REMAIN] > BATT_TH_EMPTY ) || !BT_IN_CHG_delayed_n ) + // 電池残量が5%(〜10%) または、それ未満でも充電中 + { + // 赤点灯 + led_fade_to( LED_duty_pow_blu, 0 ); + { + LED_pow_red = 1; + } + + } + else // 電池が5%未満 かつ アダプタなし + { + led_pow_bt_empty(); + } + return 1; +} + + + + +/* ======================================================== + 電池がないパターン +  指定パターンを流す +  お知らせを上書きしたりする + ======================================================== */ +static void led_pow_bt_empty() +{ + static u8 delay; + static u8 red_blink_poi; + + info_led_override = true; + + // 赤点滅 + led_fade_to( LED_duty_pow_blu, 0 ); + + // 赤の点滅パターンも指定できる + delay += 1; + if( delay < 64 ) // フレームの保持時間稼ぎ + { + return; + } + delay = 0; + + if( led_red_batt_empty.dats[ red_blink_poi / 8 ] & ( 1 << ( red_blink_poi % 8 )) ) + { + LED_pow_red = 1; + } + else + { + LED_pow_red = 0; + } + red_blink_poi += 1; + if( red_blink_poi >= 32 ) + { + red_blink_poi = 0; + } +} + + diff --git a/trunk/loader.c b/trunk/loader.c index 686509a..e805c83 100644 --- a/trunk/loader.c +++ b/trunk/loader.c @@ -61,6 +61,9 @@ void FSL_Open( void ); void FSL_Close( void ); void hdwinit( void ); static void hdwinit2( ); +static void chk_platform_type(); +static void chk_firm_broke(); + extern void main_loop( ); @@ -110,70 +113,11 @@ void main( ) hdwinit2( ); // ファームの整合性チェック // - { - u8 i; - u8 comp = 0; - - // ローダーと本体は同じバージョンか? - /// 次へのアップデートの途中で終わってないか? - for( i = 0; i < sizeof( __TIME__ ); i++ ) // sizeof( __TIME__ ) = 8 らし - { - comp += ( *( __far u8 * )( MGC_LOAD + i ) == *( u8 * )( MGC_FOOT + i ) ) ? 0 : 1; - comp += ( *( u8 * )( MGC_HEAD + i ) == *( u8 * )( MGC_FOOT + i ) ) ? 0 : 1; - } - - if( *( u8 * )( MGC_FOOT +2 ) != ':' ) // 消去済のまま - { - comp += 1; - } - - if( comp != 0 ) - { - // ファームリストアを試みる - firm_restore( ); - // 帰ってこない。リセットをかける。 - } - } + chk_firm_broke(); // 試遊台判定 - // デバッガつないでると上手に判定できないことがあります。 - // P40,41 - // HH 実機 - // HL NBD試遊台 - // LH スタンドアロン試遊台 - // LL ISデバッガ - if( !DIPSW_0 && !DIPSW_1 ) - { - system_status.is_dev = 1; - } - else - { -#ifndef _FORCE_TAIKENDAI_ - if( !DIPSW_0 ) -#else - if(1) -#endif - { - system_status.taikendai = 1; - } - else - { - system_status.taikendai = 0; - } + chk_platform_type(); -#ifndef _FORCE_TAIKENDAI_NBD_ - if( !DIPSW_1 ) -#else - if(1) -#endif - { - system_status.taikendai_nbd = 1; - } - else - { - system_status.taikendai_nbd = 0; - } - } // 通常運転 main_loop( ); } @@ -181,6 +125,80 @@ void main( ) +void chk_firm_broke() +{ + u8 i; + u8 comp = 0; + + // ローダーと本体は同じバージョンか? + /// 次へのアップデートの途中で終わってないか? + for( i = 0; i < sizeof( __TIME__ ); i++ ) // sizeof( __TIME__ ) = 8 らし + { + comp += ( *( __far u8 * )( MGC_LOAD + i ) == *( u8 * )( MGC_FOOT + i ) ) ? 0 : 1; + comp += ( *( u8 * )( MGC_HEAD + i ) == *( u8 * )( MGC_FOOT + i ) ) ? 0 : 1; + } + + if( *( u8 * )( MGC_FOOT +2 ) != ':' ) // 消去済のまま + { + comp += 1; + } + + if( comp != 0 ) + { + // ファームリストアを試みる + firm_restore( ); + // 帰ってこない。リセットをかける。 + } +} + + +/* ======================================================== + デバッガつないでると上手に判定できないことがあります。 +●CTRファミリ + DEV_DET(P12.[2:1]) + +●CTR&その開発機材 + P40,41 !注意! デバッグ有効でP40がLだとMCUが起動しません! + HH 実機 + HL NBD試遊台 + LH スタンドアロン試遊台 + LL ISデバッガ +======================================================== */ +void chk_platform_type() +{ + // ●CTRファミリ // + system_status.family = (enum _family)( DEV_DET >> 1 ); /// あぁ... + + // ●CTR&その開発機材 // + // 一応初期化 + system_status.is_dev = 0; + system_status.taikendai = 0; + system_status.taikendai_nbd = 0; + + switch( DIPSW ) + { + case DIPSW_TAIKENDAI: + system_status.taikendai = 1; + break; + + case DIPSW_TAIKENDAI_NBD: + system_status.taikendai_nbd = 1; + break; + + case DIPSW_ISDEV: + system_status.is_dev = 1; + break; + } +#ifdef _FORCE_TAIKENDAI_ + system_status.taikendai = 1; +#endif + +#ifdef _FORCE_TAIKENDAI_NBD_ + system_status.taikendai_nbd = 1; +#endif +} + + // ======================================================== diff --git a/trunk/pm.c b/trunk/pm.c index fddd43b..92a425b 100644 --- a/trunk/pm.c +++ b/trunk/pm.c @@ -796,6 +796,11 @@ err PM_LCD_on( ) PM_VDDLCD_on( ); + if( system_status.family == FAMILY_SPFL ) + { + SPFL_LCD_AMOL_HV_CONT = 1; + } + wait_ms( DELAY_PM_TSS_50B_AND_TCOM ); PM_TCOM_on( ); @@ -822,7 +827,7 @@ err PM_LCD_on( ) // BSR // void PM_LCD_off() { - // BLついてたら消す + // BLついてたら消す。// チェックするのは割り込みの関係 if( ( iic_mcu_read_a_byte( IIC_SLA_PMIC, PM_REG_ADRS_BL ) & 0x03 ) != 0 ) { u8 tot; @@ -841,9 +846,19 @@ void PM_LCD_off() vreg_ctr[VREG_C_COMMAND2] &= ~( REG_BIT_CMD_BL_U_OFF | REG_BIT_CMD_BL_L_OFF ); } + + // 液晶電源切る // + SPFL_LCD_AMOL_HV_CONT = 0; // 他のファミリでも弊害ないし + + // 50msとか待つし、確認しましょうかね… if( iic_mcu_read_a_byte( IIC_SLA_PMIC, PM_REG_ADRS_VDD_LCD ) != 0 ) { - PM_TCOM_off(); + if( system_status.family == FAMILY_SPFL ) + { + wait_ms( 10 ); // アモルファス15Vを切ったときのウェイト。数字は暫定 + } + + PM_TCOM_off(); wait_ms( 1 ); PM_TCOM_VCS_off( ); wait_ms( DELAY_PM_LCD_OFF ); @@ -852,7 +867,7 @@ void PM_LCD_off() vreg_ctr[VREG_C_STATUS] &= ~REG_BIT_LCD_POW; } - set_irq( VREG_C_IRQ3, REG_BIT_LCD_OFF ); + set_irq( VREG_C_IRQ3, REG_BIT_LCD_OFF ); // 無条件に発生。マスク無ければ。 } diff --git a/trunk/task_misc.c b/trunk/task_misc.c index 9215b1e..ef5dc9a 100644 --- a/trunk/task_misc.c +++ b/trunk/task_misc.c @@ -288,7 +288,7 @@ u8 extinfo_read() infos[5] = (u8)( _dbg_rcomp & 0xFF ); infos[6] = raw_adc_temperature; infos[7] = ( !temp_zone_charge_disable | ( bt_authorized << 1 ) ); - infos[8] = system_status.info_fullcolor; + infos[8] = 1; // system_status.info_fullcolor; iic_burst_state++; return( infos[ iic_burst_state -1 ] ); diff --git a/trunk/user_define.h b/trunk/user_define.h index ba185b6..3fcd73a 100644 --- a/trunk/user_define.h +++ b/trunk/user_define.h @@ -75,6 +75,13 @@ #define SLP_REQ P12.0 +// CTR,SPFL,まだ見ぬ派生機識別 +#define DEV_DET ( P12 & 0x00000110 ) +#define DEV_CTR ( 0b00 << 1 ) +#define DEV_SPFL ( 0b01 << 1 ) +#define DEV_SHRIMP ( 0b10 << 1 ) +#define DEV_RSV2 ( 0b11 << 1 ) + // FCRAM #ifdef _MODEL_TEG2_ #define FCRAM_RST P14.0 @@ -114,11 +121,15 @@ #define BT_TEMP_P P1.7 +// SPFLのアモルファスLCDで必要な±15Vの電源。 +#define SPFL_LCD_AMOL_HV_CONT P20.2 + + // 充電せよ(out) // 負論理です。注意。 #define BT_CHG_ENABLE() ( P4.3 = 0 ) #define BT_CHG_DISABLE() ( P4.3 = 1 ) -#define BT_CHG_Ena_n P4.3 +#define BT_CHG_Ena_n ( P4.3 ) // 充電中(in) #define BT_IN_CHG_n P5.1 @@ -194,8 +205,13 @@ //#define 32k_I1 P12.3 // XT1 //#define 32k_I2 P12.4 // XT2 -#define DIPSW_0 P4.0 // mini cube ソフトウェアディップスイッチ TOOL0、L禁止! -#define DIPSW_1 P4.1 // mini cube ソフトウェアディップスイッチ TOOL1 +// 実機、開発機、試遊台判別。 +#define DIPSW ( P4 & 0b00000011 ) // mini cube & ソフトウェアディップスイッチ TOOL0,1。 P4.0は L 注意! +#define DIPSW_CTR 0b11 // 未使用 +#define DIPSW_ISDEV 0b00 // KuCはBattGaugeで判別 +#define DIPSW_TAIKENDAI 0b10 +#define DIPSW_TAIKENDAI_NBD 0b01 + #ifndef _MODEL_WM0_ #define SHELL_OPEN P7.1 // INTP5 ふた開閉 (閉じるとL) @@ -235,11 +251,6 @@ #define KR_SW_WIFI ( 1 << 4 ) -#define INFO_LED_IS_FULLCOLOR_n P20.2 -#define INFO_LED_IS_FULLCOLOR_PM PM20.2 -#define INFO_LED_IS_FULLCOLOR_PU PU20.2 - - /////////////////////////////////////////////////////////// #define INT_MSK0_IIC_M_DMA 0b0001000000000000 diff --git a/trunk/yav_mcu_bsr.prj b/trunk/yav_mcu_bsr.prj index 62cf6aa..b603d96 100644 --- a/trunk/yav_mcu_bsr.prj +++ b/trunk/yav_mcu_bsr.prj @@ -220,30 +220,6 @@ LT=8 Z=0 CommandFile=0 RA_OPT= -[SrcFile] -Source1=loader.c -Source2=pm.c -Source3=i2c_ctr.c -Source4=main.c -Source5=magic.c -Source6=WDT.c -Source7=i2c_mcu.c -Source8=i2c_twl.c -Source9=led.c -Source10=rtc.c -Source11=vreg_ctr.c -Source12=vreg_twl.c -Source13=adc.c -Source14=renge\renge.c -Source15=accero.c -Source16=self_flash.c -Source17=sw.c -Source18=task_debug.c -Source19=task_misc.c -Source20=task_sys.c -Source21=pedo_alg_thre_det2.c -Source22=ini_VECT.c -Source23=task_status.c [BuildBefore-AfterCmd] Before1=c:\cygwin\bin\touch magic.c After1=ruby nec_s_2_bsrbin2.rb bsr.hex @@ -720,42 +696,6 @@ Tool1=CC78K0R|W2.13 Tool2=RA78K0R|W1.33 Tool3=SK78K0R|V3.10 Tool4=ID78K0R-QB|V3.61 -[IncFile] -Include1=incs_loader.h -Include2=jhl_defs.h -Include3=config.h -Include4=user_define.h -Include5=bsr_system.h -Include6=renge\renge.h -Include7=renge\renge_defs.h -Include8=renge\renge_task_immediate.h -Include9=vreg_ctr.h -Include10=vreg_twl.h -Include11=loader.h -Include12=i2c_mcu.h -Include13=WDT.h -Include14=..\..\..\Program Files (x86)\NEC Electronics Tools\CC78K0R\W2.13\inc78k0r\fsl.h -Include15=fsl_user.h -Include16=i2c_ctr.h -Include17=pm.h -Include18=rtc.h -Include19=reboot.h -Include20=magic.h -Include21=incs.h -Include22=i2c_twl.h -Include23=accero.h -Include24=pedometer.h -Include25=sw.h -Include26=adc.h -Include27=led.h -Include28=batt_params.h -Include29=pool.h -Include30=i2c_twl_defs.h -Include31=voltable.h -Include32=renge\renge_task_intval.h -Include33=..\..\..\Program Files (x86)\NEC Electronics Tools\CC78K0R\W2.13\inc78k0r\math.h -Include34=self_flash.h -Include35=pedo_lpf_coeff.h [Options.LK78K0R 0] Version=100 O0=bsr_k0r.lmf @@ -1049,3 +989,65 @@ DefaultMode2=1 DefaultMode3=1 DefaultMode4=1 DefaultMode5=1 +[SrcFile] +Source1=loader.c +Source2=pm.c +Source3=i2c_ctr.c +Source4=main.c +Source5=magic.c +Source6=WDT.c +Source7=i2c_mcu.c +Source8=i2c_twl.c +Source9=led.c +Source10=rtc.c +Source11=vreg_ctr.c +Source12=vreg_twl.c +Source13=adc.c +Source14=renge\renge.c +Source15=accero.c +Source16=self_flash.c +Source17=sw.c +Source18=task_debug.c +Source19=task_misc.c +Source20=task_sys.c +Source21=pedo_alg_thre_det2.c +Source22=ini_VECT.c +Source23=task_status.c +Source24=led_cam.c +Source25=led_pow.c +[IncFile] +Include1=incs_loader.h +Include2=jhl_defs.h +Include3=config.h +Include4=user_define.h +Include5=bsr_system.h +Include6=renge\renge.h +Include7=renge\renge_defs.h +Include8=renge\renge_task_immediate.h +Include9=vreg_ctr.h +Include10=vreg_twl.h +Include11=loader.h +Include12=i2c_mcu.h +Include13=WDT.h +Include14=..\..\..\Program Files (x86)\NEC Electronics Tools\CC78K0R\W2.13\inc78k0r\fsl.h +Include15=fsl_user.h +Include16=i2c_ctr.h +Include17=pm.h +Include18=rtc.h +Include19=reboot.h +Include20=magic.h +Include21=incs.h +Include22=i2c_twl.h +Include23=accero.h +Include24=pedometer.h +Include25=sw.h +Include26=adc.h +Include27=led.h +Include28=batt_params.h +Include29=pool.h +Include30=i2c_twl_defs.h +Include31=voltable.h +Include32=renge\renge_task_intval.h +Include33=..\..\..\Program Files (x86)\NEC Electronics Tools\CC78K0R\W2.13\inc78k0r\math.h +Include34=self_flash.h +Include35=pedo_lpf_coeff.h