From 6ef20ad06c7f4eae4c1b70f648b4860e59a35364 Mon Sep 17 00:00:00 2001 From: fyf Date: Fri, 5 May 2023 16:12:04 +0800 Subject: [PATCH] =?UTF-8?q?=E6=96=99=E4=BB=93=E8=AE=BE=E7=BD=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .idea/misc.xml | 2 +- .../com/example/bpa/app/ModbusTcpServer.java | 3 + .../java/com/example/bpa/config/DataBus.java | 7 ++ .../com/example/bpa/helper/FlashHelper.java | 100 ++++++++++++++++++ .../bpa/view/adapter/lc_item_adapter.java | 26 +++-- .../example/bpa/view/from/lcsz_activity.java | 66 +++++++++--- .../example/bpa/view/from/yfcl_activity.java | 3 + .../main/res/layout/item/layout/lc_item.xml | 22 ++++ app/src/main/res/mipmap-xhdpi/bl.png | Bin 0 -> 10856 bytes app/src/main/res/mipmap-xhdpi/gj.png | Bin 0 -> 5976 bytes 10 files changed, 208 insertions(+), 21 deletions(-) create mode 100644 app/src/main/java/com/example/bpa/helper/FlashHelper.java create mode 100644 app/src/main/res/mipmap-xhdpi/bl.png create mode 100644 app/src/main/res/mipmap-xhdpi/gj.png diff --git a/.idea/misc.xml b/.idea/misc.xml index 0c26bd6..bcf7264 100644 --- a/.idea/misc.xml +++ b/.idea/misc.xml @@ -1,7 +1,7 @@ - + diff --git a/app/src/main/java/com/example/bpa/app/ModbusTcpServer.java b/app/src/main/java/com/example/bpa/app/ModbusTcpServer.java index 79911e5..ec57d75 100644 --- a/app/src/main/java/com/example/bpa/app/ModbusTcpServer.java +++ b/app/src/main/java/com/example/bpa/app/ModbusTcpServer.java @@ -3,6 +3,7 @@ package com.example.bpa.app; import com.example.bpa.Model.IReadCallBack; import com.example.bpa.Model.IWriteCallBack; +import com.example.bpa.config.DataBus; import com.example.bpa.helper.MessageLog; import com.licheedev.modbus4android.ModbusCallback; import com.licheedev.modbus4android.ModbusParam; @@ -116,6 +117,7 @@ public class ModbusTcpServer { @Override public void onSuccess(ModbusMaster modbusMaster) { MessageLog.ShowInfo("设备 " + host + " 连接成功"); + DataBus.getInstance().PlcIsConnect=true; //1.数据中心 DeviceData.Get().Init(); //2.业务线程 @@ -124,6 +126,7 @@ public class ModbusTcpServer { @Override public void onFailure(Throwable tr) { + DataBus.getInstance().PlcIsConnect=false; MessageLog.ShowError("设备 " + host + " 连接失败:" + tr.getMessage()); } diff --git a/app/src/main/java/com/example/bpa/config/DataBus.java b/app/src/main/java/com/example/bpa/config/DataBus.java index 91f0299..63389ec 100644 --- a/app/src/main/java/com/example/bpa/config/DataBus.java +++ b/app/src/main/java/com/example/bpa/config/DataBus.java @@ -35,6 +35,13 @@ public class DataBus { } //endregion + //region 连接状态 + /** + * Plc是否连接 + */ + public boolean PlcIsConnect=false; + //endregion + //region 数据中心 /** * 主界面商品列表 diff --git a/app/src/main/java/com/example/bpa/helper/FlashHelper.java b/app/src/main/java/com/example/bpa/helper/FlashHelper.java new file mode 100644 index 0000000..1848441 --- /dev/null +++ b/app/src/main/java/com/example/bpa/helper/FlashHelper.java @@ -0,0 +1,100 @@ +package com.example.bpa.helper; +import android.util.Log; +import android.view.View; +import android.view.animation.AlphaAnimation; +import android.view.animation.Animation; +import android.view.animation.LinearInterpolator; +import android.widget.EditText; + +import java.security.Key; +import java.util.ArrayList; +import java.util.List; + +/** + * Title:控件闪烁帮助类 + * Description: + *

+ * Created by pei + * Date: 2018/4/22 + */ +public class FlashHelper { + + private FlashHelper() {} + + private static class Holder { + private static FlashHelper instance = new FlashHelper(); + } + + public static FlashHelper getInstance() { + return FlashHelper.Holder.instance; + } + public List listviews = new ArrayList(); + public List listviews1 = new ArrayList(); + + /**开启View闪烁效果**/ + public void startFlick( View view ,Integer key) { + if (null == view) { + return; + } + if(!listviews.contains(key)) + { + view.setVisibility(View.VISIBLE); + Log.e("213", "VISIBLE: "); + Animation alphaAnimation = new AlphaAnimation(1, 0); + alphaAnimation.setDuration(300); + alphaAnimation.setInterpolator(new LinearInterpolator()); + alphaAnimation.setRepeatCount(Animation.INFINITE); + alphaAnimation.setRepeatMode(Animation.REVERSE); + view.startAnimation(alphaAnimation); + listviews.add(key); + } + } + + /**取消View闪烁效果**/ + public void stopFlick( View view ,Integer key ) { + if (null == view) { + return; + } + + if(listviews.contains(key)) + { + view.setVisibility(View.GONE); + view.clearAnimation(); + listviews.remove(key); + } + } + + /**开启View闪烁效果**/ + public void startFlick1( View view ,Integer key) { + if (null == view) { + return; + } + if(!listviews1.contains(key)) + { + view.setVisibility(View.VISIBLE); + Log.e("213", "VISIBLE: "); + Animation alphaAnimation = new AlphaAnimation(1, 0); + alphaAnimation.setDuration(300); + alphaAnimation.setInterpolator(new LinearInterpolator()); + alphaAnimation.setRepeatCount(Animation.INFINITE); + alphaAnimation.setRepeatMode(Animation.REVERSE); + view.startAnimation(alphaAnimation); + listviews1.add(key); + } + } + + /**取消View闪烁效果**/ + public void stopFlick1( View view ,Integer key ) { + if (null == view) { + return; + } + + if(listviews1.contains(key)) + { + view.setVisibility(View.GONE); + view.clearAnimation(); + listviews1.remove(key); + } + } + +} \ No newline at end of file diff --git a/app/src/main/java/com/example/bpa/view/adapter/lc_item_adapter.java b/app/src/main/java/com/example/bpa/view/adapter/lc_item_adapter.java index 70de059..88846db 100644 --- a/app/src/main/java/com/example/bpa/view/adapter/lc_item_adapter.java +++ b/app/src/main/java/com/example/bpa/view/adapter/lc_item_adapter.java @@ -8,6 +8,7 @@ import android.view.ViewGroup; import android.widget.AdapterView; import android.widget.ArrayAdapter; import android.widget.ImageView; +import android.widget.RelativeLayout; import android.widget.Spinner; import android.widget.TextView; @@ -73,24 +74,35 @@ public class lc_item_adapter extends RecyclerView.Adapter bpa_materials=new ArrayList<>(); //当前选中的料仓id lc_item_adapter.MyLCViewHolder currentSilo; - + //当前料仓集合 + List datas = new ArrayList(); //region 私有函数 @Override protected void onCreate(Bundle savedInstanceState) { @@ -66,6 +71,7 @@ public class lcsz_activity extends AppCompatActivity implements View.OnClickList setContentView(R.layout.activity_lcsz); Init(); initEvents(); + Run(); } //endregion @@ -90,7 +96,6 @@ public class lcsz_activity extends AppCompatActivity implements View.OnClickList //必须,防止recyclerview高度为wrap时测量item高度0 layout.setAutoMeasureEnabled(true); recyclerView.setLayoutManager(layout); - List datas = new ArrayList(); //获取料仓数据 ArrayList bpa_silos =QueryDB.GetSilosALL(); //加载materials数据 @@ -145,13 +150,11 @@ public class lcsz_activity extends AppCompatActivity implements View.OnClickList listViewParent.setVisibility(View.VISIBLE); currentSilo = null; currentSilo = (lc_item_adapter.MyLCViewHolder) viewHolder; - } } @Override public void onItemLongClick(View view, int position) { - } })); //endregion @@ -207,22 +210,59 @@ public class lcsz_activity extends AppCompatActivity implements View.OnClickList //endregion - //region + //region 线程 + + /** + * 实时显示线程 + */ public void Run() { - ThreadManager.Get().StartLong("Plc设备数据监听", true, new IThread() { + new Thread(new Runnable() { @Override - public void Run() throws InterruptedException { - //获取实时值 + public void run() { + while (DataBus.getInstance().PlcIsConnect) { + try { + lcsz_activity.this.runOnUiThread(new Runnable() { + @Override + public void run() { + for (int i=0;i + + + + + + \ No newline at end of file diff --git a/app/src/main/res/mipmap-xhdpi/bl.png b/app/src/main/res/mipmap-xhdpi/bl.png new file mode 100644 index 0000000000000000000000000000000000000000..9522cd47d5f5434c91e2ef59e2d8b7b089818c84 GIT binary patch literal 10856 zcmV-uDwoxXP)PyA07*naRCr$PeR+HwN1gBY*WGhzMwf3pmMqB*i4$@_SZ6z*7Y0Y%|56POU-|?;bPIXoN>Q@B+@e%M5FhziTY=o_ynnvhW6bo z4gsGa#o^}HsuBczf>cRE`)(G8fKQO(aPwiFB++>Qok!sF7&r>x2@sxOrhO#wGqDxDca^Nr z7f=)eK0%6tt+YxL`#V1j!p8_`vnGjeCSATUy7G>Ptd;jm*@b{l5WA4HAZKF#x-Nh} zMub;cD1K%U4U8KlO~0|`+-(PnsP9)P0s)^OMSxaJmH7V7uYvH1V(QMW!;Ggv`i9!p zZM#a9<=4-TfKQP87?o6lxjQ&HFnJR|?<`5s^DB=_pba&xTYhb$Okb1%0zN?;>=ub< z+M9Gaa1($IhtzyL*4lfcL$ZCb0DOWt)D0#FJ1=9MZUXp44yl+C`@dtYy`OPdN7ah= z3F1K0PY$eG%gkcrSmuEEvqduhG}^lL-9%tl^i`1(pCC3jcD#S>y8-%<&0;Nx;~g?% zL!@o%poPMI5sL`;1hEK|m16P!&QAmQcPnL`D8r1$b<#J~w{CmD3HjA1(%NHbh(R_)RH7{JPT!_yj4jC-880WHOVu354rQ6lH6520l>R+WTEw zg;t?3pCBbP`pNz^EdiDVIj$^0jAK;^_}6G_?-w0YPz8d0f)v@viT&$dsuRRA?!`rl zaHSeEZmMnT-QbF{3RL0~q=-fx-@oo^0{@%{bwyM!LlwRwTE}mv`P;_JpnOiN^a)a6 z^GyzPzLyz4D6m@DixcP}koLZ4%eIHhZp<7qz$ZunjWxc%^K%m6D+N^XR#CkZ1M?W&H}8Pl5E_Nb4Q`QQld=`vjQ<#^k`d&olFv-RziN z(nW+x*64k)m0QHCrT_TBil_U))BM4uQwe)_n+DTH?uUKRI)}5=!d^0m%QtchV(0|4+Vr{)|uV!qjmLTK%*1eh} z-a=_e7s5^d@IypuY-BD>-V!h@ZSlREzjpmwi-ULkh;FxJ}p z-U{)>)QyTJ$aw$N=gZK0+44Ocl<_c9sV!+LV+4Rx!3dpv*HxmUt7 zFxv^;#Qx51B5br%W-+n^33OG;5+X|s8wUhI6q0pF3WF53Rdx}+9+sHiRMWQQk44n= zbd`!D$mGDf4>EJvR#|39ktK$Wgvi;82wAd-S29_Uh1^nnhE>GZ$6B`D?CBm~pm7yN zkcolLeQLl#7lbw}iz31#5BwXMA$a8;>8%H}*l#t&V+ zKuYS{K<)(`GEu4?KBUmn z{ARNTJ$(ewjzOK=3oSVUR@3?GomqkaIiNub7GZed+Ojnm{6KB%)>jl+-4oU3EI}p) zI$uYO-?@dNSdJAVMj@kyqy!*^7C@?LgA%<2AjKAQSsRBIe*}7R2wHj!tZJ6!mSHp* z$Uu8tW9#+-%SL*r;G87LM1SX72>7L2IEuN3mJ+K{*5HzYH3-yS207;R^@P(1sN)Yn zjqiq@nzROq+oK611;)DA%HF%I8R(r-)>_;<_9EWD?xO&^cC)J(F|?G}rOW@wk$F&R zFNGX^VgAAnl+faTfja&uwA6$p>2g4a6tX`0SQ46}5P|<8+PZa4CB&Fh1ew^s_S;1C z!BQK_YJD-+5R>tIk6g0=!Nw~N|;#PQfgE;P5f1? zwb#`p`C^^(JVE07uUSlzb{{iV7VBi8^|Yis9U_wBk!zMAwD`>cti65}YJ*+nwW%kO zKDIOO%9pr7T8X(w5(e+8ZQXjgU4A+x$I}Ff53julDm~_u^G0&jqzti?o9hYGwji+J z8aK@gYyjQzvrDaepMCr=m*aMbxxusx$|ktL<5W#P@Yx2?=*P=la=_HL>}Z z&OIW87F|)cNqDJPWR7n`W_)i>F=C%Y4!Sre0mh*7Yho+6K3=MSPSp1#LE`(@z5_%* zb;4mYnXE}rr*e>kfSTqHh(ISd&9YsWHvRxo$8!hW3WB(~p(vcxiLR|{*>bDx4wop< za|D^_@B9)0|5Bn~g;i%jODYgShei*{62eQb2L&1nlk3sand804jPJ{7omkltD_pKV z%%6(2ZT*_7I`b&=6hYzx>wW>|x48{at`#dmj?m(3AcdOUHp@|c>5*SUjUO@9AwtCD z8Z~=Z%gu*???qdC|G`b2xpaAgAk5wJWdGzJK=e0m1CwtfFgWirDD|&$+bmb~rJwy7 z)TxuEy5yjq4RUn-VcrpI+uGr}UIT??C&#%>O;>D<;CIY6%VuKB1nCBf3uiT@Ht5bmrRgpg<6j<(`=*x&V`oh<{;{Bc50IVr@x6s7FCzB9%IS@i<`TNRkVp;U34*ke9R9*>d5NF&y z@cc5?+UwfNi7N!*-QB@NbZR#X>_+*%q0TyO0@u)Ub)% zK0A`LpD;fZYuoBd2({w`NgTLpxt@`Ry+90MgCK?=h|wd-5+Y5152lb;%yrog9f^T& z8!lXkToQ7Pcka+3&~UVMi{rbujuIr%zxHK1=mD2oIj6c@8-vp!>|I_m*L7P`hkpVs zIc7YHL{vy#$`{N~HCWTjaZ=Fe2{v8=rQx;3 zimr%y+QgrcI(DBiK|&%SohRlYXV}MA#ag$D19i4Pju2$Bf87lX{-W*H+8{93VW{xZ zYaoSNY|t{dMNIX7({RN~Owz?<-HVS?7yH;wkoZ97&%wCfiy#V{#O9!3PAekRw0zjB zX1i+F)Zn*_6V?$U5Owd=VG&N>7;EkQcoFqXtJq4Acz@@E09;vJC>8{DGGG{1K}ryj zCi^xASv>(gbr6y=4-`75SaZu#Z))f}V9l5af$XtdcO!fY0)c2ttYyp91=Yz>*cO5e z-`^c+T$(rlV4huuIUy$-UNRXl6fJUDh0pn)wx~^?xC`po6VJ(#ln|7<3vJtc%#trX z0#fQA1ubM}EYPc|1K$T{l7_Vu5xnT7iMp|GPsUn%R~P8EVeyg)GPZBsxw6Dh+hL5; zGIB2QhU*Ys`tFiV5S@2w_~(Xl?1&Cd9r+cs#L?&EXAg5NezUEkRO--AprwpgvgQau z1U{1~RbMv$+->8fG-^o%nH;$KDrS9aDF(P%S4#nU#&`s=qw@-1wD`kFjof4EmK2I2 zwD66fz=DEY*HS~s9P2X-O_yvU_l!a5BO9S6o}J4h$muT-(q9~H*;aJKc+muz=wJI0 zLU{uY3+iD2QpW))WJVBs_CWN^2_z2~k03MlN{WKOyw^gGUTDb$ZQ?ITpST~an=i3O zmaVsK6ghL0nr);MP$7prJO?pAlo{96w)JkZ1ojz)iXzD5K<77^G3S}`~bz1?xs!&BGjn1q zGGqBScmuVq2rMvObV-lg1~opI*QP-I`3TIj@0RP-p&vp^#SQi9s)|sz`6w$aZ%O_~Ae4aWkK?)fMD+cOX5SZ^w&Rsoy0O_N> z&@-u$ppwN%v+TVk$;ee%9lHe!pQ}3!^W_+i%tvBa;bxwjz4y@~8 z=Jl>x?Xa@MFc4@o{^lhmfJoE(owGnsA$8Cm^(V zE#!#vtJ&Ebphj~K(!s_TLTR|df@h@_VQmb_13xvrmtDMGfpkQcRvTM+~>l$_$6%b$Cp~dDaKys)Kp=G59E?Vib>7&1bI(a(yaCRLfx(LBV&dxbz^rc5O zLyemykJFJnEao2sC2Ga1IaY@Gu~?gNn$zkdhzRrCFE$J%$Wim<7`Jj`LEqskD zS4oTXqsgOpnI=ioCRC_XI$~`VIC`Aoa;&x2(7CE4$kbs#jWZ%k0$`&}Lx_8F0th>~ zqIIfayg-oT@b{prCd<#nNFK@{P)7(ao?|0}MRRqH2kKUBZ7paHGO>T{5hBXFkz&yX zPZd)q#I8C+jz|bJnBN#Bg=!IA_8v!VFE>HbM}G}<(mXe`7(Fs^Jv%w4xqZ2oX*+5Y zyr=%+trrwTkmG+^yCpQAIvwpDWfVSn0MMrxp#=&kV18+*6mCR#={p>=w44M{M|UB8 z(mYm-RUN4j6>h+;59e3AVsJs$D(6Qc8M!_QNBr!C- z=@nXHzAqv^m&5ZATKaZJtSuKo)Dt_99(yu}PmI*Fne6%fXcIvSJK}!%g)$C|J*iKf zvv%7H3K~I%dOEo7eC4-F6t6G87tUCaJi^F~15%I>oS!?cNsgX_&?5VT3d%u{%(2^% znHb0kYUZR0Eh%oi1!`7Q?&uNk*Z!P7!Iw36^%XWr7X$$?)c7JLK@yzZT6U)YTar2< z_Qf=YQX@gB&;61u1%n8mV_)VIVW8UtNge5dmN=9X8!e$BGp1#O4QiSQa)oAMO&rqh zO&;cK8vkMlBJSl1O96VS;bPg|0|%D6t~-Uq2$DJ?VrYRty$rb~cO)K3;+0HX>S<4c zIkyNRqIAnCaL# z+|#j#F+Fm~b@X`sx$;GBJK>f-agZuAK0O~%Y9%OUyX>nUrU7h!G<8XB2X)Npp{oQ@D5R33c`bFu!l^>NCtaYf6xzo;9}v{M=bk zNv4s8OXY>0@X!Gx62lDb)FC=0B06&-m1@7U^?Hie?+o;u} z%jLU5i>a_4QBe0OU*X9E3|*|_oqB@vWk|vNXH5h3s}PuH{p^OF1Q9`psiSx01&vup z=7b8dSt=f}j9b&3w=3k8>$L&|9ytDI&2%~-N%YF)*KYqqF1szEGSt%{;;{`U=%Gfs zKiVdr^twsqDX&ge)TJDss4Pz!{Y zSn39r{P9X5UB#b9A5~vsW)CxeX+`&r8}iv}8JVG;_5%PJ#;Zsndb;6-vf);JJ_Ee| z`Ap>RjGc0j5XiIZF3N@$yb5ydWqIARgCN@Y14x-%;XK;_HLgLOIDMS9QX_OT6a4#$ zr?tN|B?ssoE4sGl&JTO4vSosZ@A!=%>FDQ8CVNalIDxq=O1ZdFk8=k>)41(GAYD>0;*-lHdx z^or%{w^_b7vtWdVdfI;gkZInThD+s#B$;M*D7}E0EjH*WK#V40zhLH38e}LD<9UfV zW)f-nNM7Bgjv$;F!PJ3Yn(9%fG^nGeM-8!z8(c^T8txnCHP_Px;se@4>EmqJ_XyDB zP;kkztM4c%TSmbI5eNblp~9{tDW*S_p$;8A`IpQ*W*A4BGVW~d?khSbsAz%+Bo5rtafzR+h!kpt99?dD)>|mcOzs1xjH7FHHH<*rxsbyq5rYz- zrzW6I7&n1BsX>eD*|3pHJPpV?o;>-mnk&-$yUksFAF$l01_etZh>-VeUwbq)L5B%2 ze5(!A;Gx>pO2y4dX0S|+Ns#3H`y-_^Qn7W#s#Ro(7w`dUhYp7AC@^t6W1yviep zI;QU&f9ClChtF$9qBl0L-+p_EO`EN58$pDyp`MQ40C=OBVe?)rKMbN5*WO$h% zBx_J2l|_)mLH*w3v-<2%_2+d3241+LtIxKSxwaA{OOj0;UkBlz%sOzxMap(5h&5j6 z;HBE(Wr9cn4RWY*2r|A`dsH3gOAOnLa4Z#(mY=(JTWRU@&k$}qK~9Y%;#}%?%{pK0 zD&^KdJ*>rIl-h$GuJ04XVSuw&3So5YF*T)UV3?VUfJd9U`Yv_C5=RIk3_Y-E&Fghy z)5y8VQt3C5Wzw6RaLP@YISC?CfhfUjM6eSNK?Afj^vv`@r!${Q7(p1=ck<8bN;CWj z*xc0B=UBFJ#|R=EI<$H13Y9gHTgEVHOt3-vU2LV~d}d}Rdgm#bxdrXwWv z1k~e?RU|=JrH4;GnlYWTGUGp1boYJQ!REDhl5S?`U{6Os0fu46atM1GE>fDAF(=a^ zXT~K!GFin6t%ls-EJ4IMVeOc4Xwh6AL9_(!8QY_p-jU6~h810XH#tcTA=}XrWVZ1` zJ!|d-_*F&@5ir^CB4v;yqZ40FLr|Lhslx=N)_4PL;3@$5&h*RU!)U~!WW+N zrXBgSP}sy1R|%3O$)@(tgXqg<_Sc;+Z&IShCm3z=*;X-vAVG0sm0~;-*EJb|Wu|Wm zCE3Db4?#~F=eZJ5$Le@yE(Iqh#-G%N)k!wX!M3-#tIzc_N3Ij(6iMC!BGVY{XcPT1 zv`BtyNxjFV%87#vi6qE%=2;oVND^pR1*&Vd$EwsJ=!pSv+Az;RR);#40VJLqH$pLn zPClZ}V;wOQfK2mN*#oFYUa@AIap>0e%T$g2D3XU5nHQWdZHcu=>zoFlRQZ{cz|=8D zaGng=2a zVbxVUKKiJdD=FcRo4fj)y@Mi$wPi)`#KtS@+_Rq9yr(vE7>Cd}CTPf4;eEM_DhDEh|B0 z@EzRL@h2h}9^jS&7;d~sNio6sTQ!Sp@QHn5WB@22&Rpcq5?`bW%hl2+)6kRC;q6|& zkv0?OT@z24AB_d`TbsLg{K~T94i)qSL4#c z-K}P{B+Qob9&GOF%P}7*k2jtph=8GgW5*g7}UY zPqV*@-$hH%^pEUE*_E!D4|w|5ng7lbJo`^lh!C}DCE3pIsB73W`iQzZhs@iWyZSsC zxavuQ2q1@Uy=o;iU8D*$%;*?wpu1u#WlyF(%}g*-N5yiio!!ioZdp<(F?e#%Lrd{P zV}E__qMEauV5V=a=-!?`Ka%rM8fx$?L1wHS>gf>IuwHCry%eU$8!k{9K-^R&{Bo)l z^AdH6p^Iqr)2XTKF_pw!?f^?bbh&tSvq!9*QZfm?XJU_L8b&~%k2ZB}|E8Tf?Uv17sfPc%gK=9G0$e8&2^WrKbYW?H(aYbVTq=smZt)uYKC!#6kVObA zxexT@(!|pMcf#dPL+M&!i8-|V$@W>zZx|dvc-6r>pDzP)n zDS~84(zE961pb+s-_a&{V`vdwS0XN!t7qcw>~&Z+=!}AanDKGkV&$3DV;y_P9#wKEuha7896sBV7|B5!J8_`t0 zt|L(A{FgOn@RyU1sV_FQgYcu~^?iR=HXKS&JSPbv{C(=?%NK-$p?m1mRn=!=pwvqD z)xChu1!z$T_~flRIV?gtWQa++rykak9#Ii(bJi{`!S{{r(G2Gsr||enb64NzJ%vpH z#yE>!0frP?bg-x6cLco7sJHyWYfJv8pt^TP^|w8FXsTj{)iV zD^XdniKh4aXnMnN`uEeTSjE~jJ6fKnbZDvRWwF|GoonLExV~#*uWou52N-|X+}-!1 zVtw*LJ?GGK(Yv9Zj$Z(Ho0-b`7b;uj5UgJuSb**EXQs2fd-4$plUF&@#K{qTS7OMN z9HU@d)7;&6k0)^{z$j($x-;)Fw96kmxd@~@b1)z_A)~o343(l^)2iB4%^{Fxn)!gK?IP4n>#*6jQ=tNHQFlQ5}HT0 zM+0Yf%;OApem-oezeo`vR1e5eo12$0F!rRTY6&(xo5R4}E4uoe%~D|r0s9KsjG%pn z6)S0QQ~Nq1`Za(WBN;VI<=eu`$TY!rv3e`Lo}R&@qmSz^0P7JGUw_%$)o1#eJ6G|k zID&|V=epQ%XGZ)Liu3|z>{I~`5MpZ&y&aWU5P<6a_|&^-qF<6 zx7les$|=9%36h<>Z(8$BBL1)$(6RHRt-+Y&$TDy_8@FiPjP%rD{f|?J%`U2;{hF?= zZ@unL)B7ol*6p#1RY4Ge`GL)AKC3f-)eQgImD25j26w_!Jk|%!H0R*NKJ92`lnt}0 z6L5b>PjxK1ZfD%%e%NAO)euCWHMDunyTSZ@0EQ8Uk#nRiktN8x@z1p7jtxty?Yclp|D;%fP9_e9z<|lcWla zLxA+2=I(7fitJkzQLX9;lAV`qZvP@N-C)+DbuW;&DYZ1`PQ#h^P&yhPR0q<>*!cP@ z!k-z+bt~5Q?yrbmUV;-oK~8};yt#b?Gkwnt%SbbAk1Uku{Qd5%^HcG?x|WIa1xCIy zqjyDjpXaZgD51|6RMjWQEVvH#Ty?buT`U7HF+wr4nC^-$_hzy>E3K}j@u%@U>PlA8 zX!1(=gQoR;e{V%rwUqG*az;xJ-O~O-(&?uR7;cmW8|l8m2kO~Y&)B;#oP1P zV%pHuyTbsK0)$yi=mzlu|f9FX2t4PD|g8?o{R<_O$=*$l1JI>9LHaEoi?;w zw_PL%_a74ke1cf$8UsBYAChw2S<)ik8JJIRupr8nBFxx7xlfCy$BfUqFmP8;m)^GY zx@{w_7&M2K_yn=oc*8v%>p}P)GYr!p)GU{N7hWut{X90S^ziso>O3vUD-2hvfS)yW z^}W-g+f`r8CrANZ;NYhAS87CJ8Tdk@YT^0PeKjkjRUj-bK&)*=wIuEze?omJGYl_n zXYkinbnW<*Z3?SEkWY{T8~MQItCs7mi)3hq;U~dbdNjI94v~cO3lv>a@$|U9E1oNf z8|WXKySAHVd?`tJ1y}Y7Qe@)}Z|?XhGu~lTT?+D0-TBH9DL{Wyr1*lWr0fZJ5PQ{u5oS|mSDW5#zf!0PH21 zHZ;9?`_2;Ftm>*hK}u}?p`P}S1N03uF|k$B&S1TCd5LPys?ItOPYmeC)RV?XV*%Ww zfj6{v?Re5|-PI(|Cx{KLJ#@>Ox3JFN7pZWK#KoGWoxz3nk%TooKK`^8G0SiWV52sX zdROavb|!6buc}4(1hJ|4`!}t*T#>{wFu%Y^WOy;%A2~-}LWH(bRO(57VEk$AJUwF^ zaLC|quISqF(Nc8ybx$MU6U4^eaB$`f1hKgb9Nl<%EGdP40KoLFM5PvcqRrB%9F}sW^L)-S zv4orG=Zkce=NXyHj0{P%p?UrGAKUCs)r<29;!qbD+T8J9V0cnZ?9au`RHD8>Ud zq{(3^q%+Ug(>SP3>LO!&qn_XD6-=mhw`-KWdz$Zw-kQG*8a8t)Si6D;hhON{rfFQT2 zY4v?=Z~N^LD{}oZ#UbDmq&VCPsx^2^`x~H>SO#v%SJ4tdn7`NDy~8jQOFsGj=Y=8Q z6QnS_iY~ox6MB?ot%O^AUuZzqF!zhiL|uq7C#b8Y18m#O01LxVgQHm_7l( zFwJKUg6!0ozSP?7hmE+|WIjRMMEjI3-qRw+w{KURuJ$B zVg)6?Ow}Ub6QpXJ-gn#z0zN^kpyZdSS_FK8RBhAyj$1*%Cx{i4{4!OGfKQOBZF=8v zD+u@mv4WCcrfL!J2~xF9?>lY<0iPgNQ1Z)EEdoA4s^rj#kX`v`YrAzM}fe@rB9YsKpq6iov zfF$%H5C}*;`R81pnR9n;&c*J|?ECIFJ3CvxeGn!_x-?XrQ~&^gMqf|MjM$F+r+~?c zHS%F&F|h##n(1l)8Yj3m0RT2eeJyp1Fo)fu@K&zitl_?nv*2JJb!IT>r|m6(ey5UT zEOj6?b-BMQ6Nu!)I6`V8iFUb3A)bHb8+^jl!at3h!OmZykl_oN|1A>tTvJH7uYRX8 z<$kBqU;;#nO28gtA8ORoEkW-XI(N9;Sl4J9vs$XPZT zGLUJ-PEdg%huidIop&Jckx5NvdMHjFLPcs0oq!AkF`?cPyDKZdo4HGnk)}CyBCHLF z4znMg!qT}Qke&o)P*ji@K-jDGEe8w;6v%zLlEp}LzLl{VrLKkp7-8}U1_+|lfK$wk z+#Cv^tS$(v(jqzqle4Abg&}a#X~S-_ayTF(L+3%>05N#nrjUcMDHMRvuMl-P``O>tC#Ve~LihwKLO!t<7ai zhW&_QZuqp}*i|Sm!MP3!1Zu@5MQd7kJSI=wu)R2y#1hOf4r{}@zMn-Q@PxUk(1cfI zeH8tnk&05Y`N3TqW4doN|D$A2#lV}(91Z#fqg4&ZvZMd8h*kE0dCdADdmugfneqb$ zDBqMl00BLMYf?dgFK%Fk;0dOFO}(HIr{iLF!~a3amewPEp2%Sapsa9!Ix5DKGK+)c zfdZiKWNBb6I)zFAqsa$}ryxD{WAg2SFsRjJVsVsWD35f>WPh$GFR-5b6WyOFlB(xe zkNB+C6HkzyU-F7`x+ipY=RUHutw%-znoYMpdNDmH33_foU@oFli~V^+W*eUYRMT)whCIiI&fu5BSJq13%xt1qCJl?#i>g zkW54I)l`xke)EORui>I~mOH}J6F98jZV_&G{~8(>N{2U0Zu>oDD5k!%CNka3Mt)?u zk{tvUc^ORs4?Sn#*PL+thHT?G!ZK0JyMh9i8zVaM32UVw#?yS~gx3%Ojx>W?p{lu) zgnCtyoUFU&&VA9Q^S2r4ty^D}-3KkFm4duEv&V0C_|a|g4&8ePx1hN+qum$8Ra%|o zXGhtwW6Jjp??T-8&rLy5vTr~h&2AV!&1@7~8>?&4y9CWG6m1ay9Q9GYdrme@v9t(~YZ===A9+zqhg>aU@$6f^> zs+vT3G%Ts6Q$Wi1foXUrwJJ*KUdOum8nR=$6>Ic;Ypnv&=*S8il?i)Jmi)EGKe8C( zUS)Kz$|r>&Ba8zJpN>EyLM zi_Pat7l|g9!)Iq00D(^W4uhIw1G-(yLcX82f65&jXyThLVsv=z8up`SGuX z``8FyfF}bJ7YJ2tRd2J9v`&#dh=a0dUh~0YsFlSt1H<0Up1J)}Fg>SZfi&i>YV2t^ z_o`GjIm(Egm#0ZGt~-d~u4400-~xqsBaufmCs%?8!&AVOkV(<#!Z{F|4(>!aad7Q>8vVNbve ziJe?MvHHNdfvui7HTb}OaL8i=ZP(1ed@JpVH&COBNR4~3L~(5V%5m!5Jyd<_zG92} zwYix$A%ESUM9Nkkt&Xl|SDu%p#Iw!r^k1nDb5}0$CqlZmS)){NXsmLzTc2NAIGuMx z8M*69bY*ED?;EIX&U-AEA{-R~R?Vs3OYlx8HX;0_Q6Jn9mR9)_~|cZmw!PC6nyK=z5sF*ZnuB zwwq4~c*ER%R5Nu1hC zG`NO7{i7@_+OE-=le2{T_AUJ2bsoxis-alwvTmE)ZjKoxQfuD zt?p9zM&z6JaQSxmsy{T*gFhlT9RLRc<_Z)P7&3Y)x2+8Q-XPhm`a-HTlh-Eq+x^R{ zGX{WzIt#Wg?`RxYXgn%)U!3gEr-ZO3?!%?gfq&|= zbu^L)Aij!o&%AG?1@8_|}jn?88Ls4zwk2 z#y#_!Cn#yM*OGWisWVMWy;8HUkm<`&pUZ9-vNshn*$j<$gzaie--(0^&Fz5S=-IYt)I+sO?T_hiR^rqDkzur7U_G6mLMd6HvJ0 zdFaF0^Eu?8jr^prKo%5N*;VFb`9vnm&sj1s6JzUCAQ_y@q?USx1=+>`-9T*d(Mu? z=tG6`HYZmn1Xlu;BS+DI4Qtqh!FXAgibiVQq)eSd=3b5cmnlq*O3BVTI|`xt)F!01 zN8X`e9mnr!jnA08ASwA8nUbl1?**7i9yyZie`KasrQ0_ES;ZYF`25DYKPfmz9`)0* zob#L+T9FjVPkP&7=TMoKor=GZn5jv!KP6Fn-N89t=-c(9E)Q4kP*nQ5qJ%!wobOWr zjivX&(mZoA m69<01XPQFaNs9~7poK6Y(greq^X}kBn8e_t_v?jh>jeF>WOL@GX zyyK#rB=DECN~={k?hcu2a=Nk($Fm{$<0djSgHi)wkc(zH(hsBdVXaBzMxk2kgNdc~gTnLDSxLEWNqQ z3_N)+>=$##S-BHm(GHN7fpyZ`Cmnu$Nrv^4^L5rK_B=a|llAW_+8irmrniiE5Y`xU z*adD`yvX$^5vCRmzr0;KvE-bHKz_>!C(}D00OO;gpfHmCUxB+J}Iq0fci zBE;{`a5@s4yIRJ#(CBz+SPuMI(qxNz+MkfqBR4@<6}2cZOwdu<)R&&7Ym<#Z3- zSwDV_*jGdmB-_tr!Pfb*=j{%PR&N%<0TCaE+5KFP1u6b5z+0R*_MW@!;^l0w=1$&^+M*$Uy^TFx`f!g;{yi+0TitiGNfd|ZxIL|$H1-0@Hu=ApM92!64%A~)^#ybeu4f`T_l zACW!jSB-%E)#OZ1bX{J|aO0g5OFwq`s3?|<=`kj37fU$0*^J+K&cYIK^M%77)yo(@ zKpwnuY;mbrgvJ|pz*z5$dkQ#hDE%xjkcvRvoyoU9(R#<;*@bE8+70Ze$hzeq)iJws zri;p-EdH!Dr(K)8OV2CUr&}D2H-C;e{yk9NBJr8yYq3G8xlm2f4pv^Vgi!qS$K1Gj zquVx?^hlYvWb@?9MO3w0*NtG~@SnpHX8}4f;5XVB9gm@!2f^ofjPKi>Kz0p~yPav> zd{jT#{AFP^M~l6Jz{wkq4iR|LB4^^@!%Xjka=G-^Fhs zDU@bR#9Sv`t5L!A>HQ}x$hGg!$Ofb6nvq3{SEU{uPfalOu|O%y6`!GiK-pwAY5ykj zyRIkqI0nEbmFsLTR^zS|o$a`s-c)v4=-TADtobh3{I!4zmRyFTP%QH{AxmV~dwyHY z6?W{3ZyuhnmTGUUKhWsN)&u4lz)sHnbOTwL4xB@pa={cN8!Cc@|DNABHxzlfw@0zp z+i&oFz`DSy1xv2D8W+te**kYB_4>X=oqQj9eCUSfs8(prqUY~a>2D`TSemmG6&H#T z3(zbvMa-%e6WVu9{5K=^Q^)sQ>3$~5+-e|2J3>{p*2!`#1qiS3vUImN&bHbNdGt$^&holM1X>=Q zURCF%j#U`+m_W(;<&DM|I$Vn;`$u&AN*PKV=k-(j>2uMXuBsJJFeUH1+0T@3n2(e4J?9Gi?)u>_y}!Rdu}-|cRHh^HfH}W zR+7_)8f$c6c21eAmo$b2dNCn8QEa~bH_TVfg>hD;^A3l?c0uB@aEqZM?J4^084Gd{ z!yl3&_seXWOFoeJb|J-*pUrqEwZLR9bp|K&2O+L$>~B5Rbtstll(us}Z^CBYU4B>Y zHi`J^7YgyJBu}eLS1nTSpw*fQqx*5th4?C))YX&xG%vd-IW*k60eX4b`=dFlN<1C zj;{c7pwFt9nB$F%H5NwHQEUPSr!Zsn(-n+LMp&uoXI0N#MpyGhboPMo)D7?m+)4%U z+QADnSTqpfYnPBJMYlGAuX`@WFxX#XApASwwkkX<_dVxoYDk(3lmD~t%{7sQwsJ>f z;19J}4$@QD*XDcNuDzxyf^e;O(H1UD(N42F=E@847tGM%$>8{I!_+z$3ziBZVgYk_ z!zSJTN7(CbHjh40MlVk^4xzdf|7qnmS^odTGN;f$QtB0^fz zxYuicyqu-7goC+yvRs$YLe)End+liCdrgvKQ4E>S@#>_A7-6lLvZ+# z9Jbh{+bxy|PTO&Z6BfngF`hQbEtY!s{7=o({~KWZ!@oiun*f^IOZ&ziM}{VT#xnmJmi8e0cktI5G4=xd`S!0v=I2Cc>?T*4<|VkXNzaQqRMMkeqe>oXRlrptr{d* zskf12C5t4I%~NLBx9KV(TWySf(56QGT}4s}t!EWubmnh6F!JYVJqvG z%#g-pr1T|mi11G0w)!#S_inZZ1WGa<7*w$*IybjEEVj*oz`+_P=VEap;te{stvh}P z2dtP&NE+u5H(=+P*vy#)6mTG%n_KgMh{9 literal 0 HcmV?d00001