From d9751413232aff41080924b181673a00da284c95 Mon Sep 17 00:00:00 2001 From: Ilya Kukharchuk <63457388+IlyaKukharchuk@users.noreply.github.com> Date: Sat, 28 Sep 2024 08:58:15 +0300 Subject: [PATCH 1/3] add local changes (#6) Co-authored-by: Ilya Kukharchuk Co-authored-by: Yana Sitkovets --- .gitignore | 1 + readme.md | 2 +- trunk/as0006314/task_01/doc/readme.md | 51 +++++++++++ trunk/as0006314/task_01/doc/result.png | Bin 0 -> 47736 bytes trunk/as0006314/task_01/src/CMakeLists.txt | 4 + trunk/as0006314/task_01/src/main.cpp | 99 +++++++++++++++++++++ 6 files changed, 156 insertions(+), 1 deletion(-) create mode 100644 trunk/as0006314/task_01/doc/readme.md create mode 100644 trunk/as0006314/task_01/doc/result.png create mode 100644 trunk/as0006314/task_01/src/CMakeLists.txt create mode 100644 trunk/as0006314/task_01/src/main.cpp diff --git a/.gitignore b/.gitignore index c28ecf35..2cd63d8b 100644 --- a/.gitignore +++ b/.gitignore @@ -34,6 +34,7 @@ # Directories to ignore .vs/ out/ +build/ ### macOS ### # General diff --git a/readme.md b/readme.md index 8f7b8178..9f5231db 100644 --- a/readme.md +++ b/readme.md @@ -33,7 +33,7 @@ |11|Крагель Алина||||||||||| |12|Куликович Иван||||||||||| |13|Кульбеда Кирилл||||||||||| -|14|Кухарчук Илья||||||||||| +|14|Кухарчук Илья|[as0006314](trunk/as0006314)|||||||||| |15|Логинов Глеб||||||||||| |16|Мороз Евгений||||||||||| |17|Никифоров Александр||||||||||| diff --git a/trunk/as0006314/task_01/doc/readme.md b/trunk/as0006314/task_01/doc/readme.md new file mode 100644 index 00000000..9f6b81be --- /dev/null +++ b/trunk/as0006314/task_01/doc/readme.md @@ -0,0 +1,51 @@ +# Laboratory work .1 +

MINISTRY OF EDUCATION OF THE REPUBLIC OF BELARUS

+

EDUCATIONAL INSTITUTION

+

BREST STATE TECHNICAL UNIVERSITY

+

Department of IIT

+



+

Laboratory work .1

+


+

Completed by the 3rd year student of

+

the Faculty of Electronic Information Systems

+

the group AC-63 Kukharchuk I.N.

+

Checked by Ivanuk D.S.

+


+

Brest 2024

+ +--- + +## Task 1. Modeling controlled object : + +Write program (C++), which simulate object temperature. + +### Realization +There are two classes in the program: + +1. LinearModel represents linear model. +2. NonlinearModel represents nonlinear model. + +

+RESULTS

+ +

+ +### How to build the project? + +1. The first you need to clone this repository to your computer. + +2. Go to the folder "trunk\as0006314\task_01\src". + +3. Run the command line and type 6 commands : + +```console +mkdir build +cd build +cmake .. +cmake --build . +cd trunk\as0006314\task_01\src\Debug\ +.\MainFile.exe +``` + + + diff --git a/trunk/as0006314/task_01/doc/result.png b/trunk/as0006314/task_01/doc/result.png new file mode 100644 index 0000000000000000000000000000000000000000..a63a16cc2defd38450943724e2d7428948c77f66 GIT binary patch literal 47736 zcmc$mcUTkax9_8(q9}+8Sb(V55CH|1PDBxu-diXtnA``6An_uPMOo`;7COfoa?%zWRqzU#9lP)$Yt_|bDmK_Jla zCy!+{K%o7bz|U>QL%?6I9;4m_e(iJCkbeNmZReZ=-Y{6mD9eCA1z}9oX9t1zM;spO zJA*(cUFbji#>~MUAQ1BS6ImH8597sAtRi%9`|vWFnAkBWYI`L7?8T1AR9?FW9KLrV z?$`M($~~7k!Fn^mr90~8gJEUXq=O$`s`rk`JD(LOcuoM?vF zsF#+)Ds?>D;7;v)FzlXeS>XPC1q6ydYXBU9M2e}R8kRXUoU7*m2vj@nSUg}da%0AD z)B0ILA9qY9W4agNPMKEvfeoz})5UHRUC598N*&?yB+HS<&X$~=pB2YeADJaL-NRpl z47E&YV~`vTNU@CvJDb677&gyY#`yu5d9ZOC`}M^0eVC&m!UkRz_Jd|JEksvZn`;oI zTBAY%Y#cy2O|0M8TGyl6DNb^}Q8{Npe-pg*1=NB+RW+Hs+<9XY*&;?&^h-JaymzbMcK|bb5N)i(fE68;MU!8@E zOHW9biSqT^lGQ9S)jxmJne~x@xc}5i%Q!82zqtF@{NSySXa#=!2a~AYv!9FLRz*Fx z+9J*8%;bQzQmJ))2t{g0u4*oN@b+h89h0G(Qm%>b=95kr?^M6@+I3pKL5j2$Q#YY< zqfEN7mFeXR8g>P!rgVjMAD9xV<3{`Bpde(%YXq$-(oj&KOB(BvFSF-2P$SQ-r zlJ0M}7||@C`+{#67aIK+dTzzrDQLKIr>&WDzpG#`dtEjLm zTa8<=4J!O*hF^VTI_xjulC^FO#}TlBtHc#gOmW}%jBxQs&5dtkrk{kwzbr#{pA4fo zMcMucT0fhk--q44DL8MnxQ247xbSus?0L^BJFkAzz<>br(v>}N4U-ZE-ubyGg+JI( zjl2$bG*%{-eQR{}rWx*YSt<$Fw;ru2+KqDN3*GAS5O~dlvF)b~ zUE4?vr^MK0L>q`=F8h8uVa0Tn`J`f7@pP<(K9q7K|2V;qnl}y8=oyug+eY#B=V-DlD_C)IsI?BMP>H(ba!= z5f89Bw9onU3Frk9JvOlfGB;_Zo8Qsaek75lZj0tUj`Na8uopc2n7Q?W0B5kvd1;Ps z_PTRX%zZhB@LT&pvwkP|H|4dy&H1wmL81P5TV2AzrZD7(VVhF!!A8xi_~1}}6QLHA z%XgDI$&x%gtA6jF-`pKbswT>s#u`^v>6TMadLo;GhgEJop6Gdd(g$~=d)u!dp?K9% z1ukb7?lnl-B|R!JKpx_AVdykRcvUs$hw^?Lk$EiYy2)6Y(cpJ9xk|XWexvxV zYGdx9gZ-AWhj?r`5h;+3hvkwK5_Q8}GL~aM2-I;rNgUgRp z*v=}I9W{H~CrJd$FP6b=SK`G=qC}PxAUiZKwe80&*IezSW_DXHAR=_KE|u#Bxx8}J zO%G|+rYJ)=Z_-?L>PTKT<*-j1a<5JC!JenVpYqq@D77=qsbDNc%(gmWI8ymz3`c zDNI5rH%#W-eSpn;$89ztcAEHFSE$2zIX)$JyIJ5nMx~R7K^F{+m=|)uLrYvvQZ;qpq=-GL3bApD~b;9C2 zws2$R5b(qd$>Uy>s%p$b*y_PhP9bLn*M_@>d;9eww06u#i*w_Yw9hL@ama9?Z_yHX7CuIKTe zTEE(t%$PS=Pbl85m20Smvls7#7bChWyb33?T}KV&=O1ME^+L&gi;?lLSp3f@=rj9x z?xtSe!UK8Rn7oDr)a{j`>QPa|nGwy|Ih1yEB1d3&HJ;BqR=*7nE2mc9gZoE3i1-d<4RpDiiJp#4p)ujtLo8)D1LU zP5AHu?Uit|Gx>u&pD`2ih+|&j!JOU83nt9Rf?bDOp7m&A&MdBI4u4yt9yjFX?yo$I zzwI$<0>46}hD0YWE;fe3n6hT%$K6M+SRi9$&i7*VwH38z%W!1J14Fzi0wL> zu6U=E7efBP9E_XOdRMg-A14=gx7~8l$S*<6fD}*IHTaZXBA+smEF(CsC$fgznMRWO z<`nQZd_3wji-Nwa0I`k~J8JkO>J-r#sh_q0^{OcJJL0+e_$KbAKSg3D`)wosUEEF; z&&p2wS&r&l$Ya_T-U4yfhM&M1@$=G5%n|YIu@o1MF(zQ=o_4s{6wGASibTCA#;9sQ zx{s5yn76Wog&@eYmka-%SwHAs?^bC(S&U>X-GNTnyPSwWms&A++fhCFwP#cUQuWb> zT1$(Q-fO!igl>+kll!GvN_9_|$+Jye)jKs8GY$irTArIwcNEf{6WKwnfPEqbuV3>T zF4ikf*Z9E%I+sQrC9JCRu@0yl@1C0$$8X^Hm*z~wwu}*WTBSoX=$0F)JR%SIDtHQ* zC#Bx5M(hV|9^roMg+D7q1n}e;Nlx%-KC9H?h%=zX|^v(^Q3^RV7=5UOw ze{N$s2HrPj2a77SC$zaXe;NGX#%e>m6u@4$Q3G#s!+djk6G@+n>?kDl6=IB1P(f&I zp~?1FfulFwuf1k0f(vd;>UPi?5hOJe#y9-+j|wNA2Xx1)G&T;_e}=Qt_d(M6&nc8v zq}iK!GsO0@^Hlm_XW5eS*QM1Dw;$g~Zp||q3+mQ5Dr5rJOKUtc+ya5jU-=x)d&`_q zWAd{PY)ZTQNdbCJn|6Vdc6#r)Vng{i)0=)=5y&Z-i6Lki3Ut>+oh@%!4-aUl-oaeW z+~D=~R1YWx)PgTL_)Pv74h6LQ8YNm~ z-DA#AuW35Wi?-8Xl2~^~;tVFvlVO9tm(R$|3xT-t0R=j6IId`s9LZ1(lwuN zqmQL`ntzHYj@0S7deGzbm&@LVHzhR`lv(P22zT9ED}lATb!Bo@oLw;x>)4tFROxuH zj+J9rf2w)!XeY4_0?E2!5QBVT_ig$MP4Cd=W??f}as0ds&2d)FhoV!SdbRo_$N9eY zp*C=mPIhrVR@N)AaaWHu~mifIksu_}}ek{c`a;I}*n8zETqrk=!OhKu?7OjE^= z=?+cTo;Q=|#j>qbttdluUgtuXM>ACE<1m|(l=R{74COZc4QM^{KL0NPdw&zicIbaP z1lsRK|NU~`%UW*w!c)+Ne6Yi`-ujwWPab`h+HskuEK;rsXH%k?)?8jP0jUh=rP?1) z?PH(ytT^YVnyVfxhRa{U)KQ)E8P+79^&e|f4$&~!Wu|}I>x%qF>3EHz^culg4$xkD zwUT_F+;eu(CRekjT&0rYPG9XrT-=v;&}2xDg=Ji*rK3$`7A2bV4PDX{>^@}_D3hDR zT%J+|gyr(gAHBQ^@3*nFjq4n$JSz2#mSUn7_uuK7qiPLyXieMG^CrCP3jEsGj7yQy zVA-aV8PlotsSkQJ`pg^d?fTDxFl_3FDNiIOXb6KW!nJq(8;3K&c?Nye7y4|A--Q9QjE7QG17O60!7y*NQgPTU@BWq*eSp% z)t^Zgmx59r_nHcqn9Y`}bo)S1@iWzfB8^WbfV>ZGC z3Z;xjOhbU#b`zTKoZhK^hT42$bXpG>2Uc^M@%*(j>Iu&Sx##a(brq2_$(XXMa62?j zTUIl9DyvDq3qb)vJo(^MHcWu1gm!#O*Fc(>JlylvUTm#CEKxjT5hR3ig9)mv@&528 zKZ{{E<=QtZUoGn_bg;>0l*BheG0g_E4uH$1x^@+>c_*P_d(r(~UP~TsP9TMajeUAPCN*J*=VfI|e4@pO6!?sSVsZWdUT3JezXzSJ8 zrxQjH_j5iJl`s`ejiPx2`HT;|_nA&!C*?j{=#K~EiS=W$jBvoHR(UyEm zf*o-mJm{K6|MK??H3z)7c~jH;pH7{%iX{^z%_ZivVn%{J_y_(sLRO#{IBx7dOJjwh zE$z2LTNM>if#46KZEX}$0odxa#W!l7ky$MlRM z@RcuL-MVvUb=(lLcRjq6X3J>YQ!&uTgMUS6PxprX7U;wPeL4ai1Gyv|WPIgMj597* z4I>6?7__6lEYHeIV0BO3tItPBM%Nt{yUdIITBV>(6aVCqwg665r?oz}kB8HhVUaDG zulVCB7D)k?mD`*6IrEspeg6BHy(B@PH?P>eUY%Stp$~s-tNmm_%0SMnmBu5dqx=Uu2FxO=XM{b_-7rlDT&Yi&MGY1N?IN88wo7iQT8Fi2F(kCP z*k#(qwiU-b912vlmMgs_qsl#+;>gqX%EH#Q8CsK})HA>=S^wfMTPMn*A*bV^yc)V) z*mNC;S;-^$#yXaOx=MIq1ei47c?A1hXb&;6MVqqxpeNk}oQqCJPq;%T+$VfS3^J-=C{iRpDc*un`hV~0&=_?Sf(VdS%5jd8j#5mWo5bNt?OjKNF|60HY(QW)QI~^g z!neKpe6a1P)D{6g%)b2vEetqaUt%AW3|O$Y6!S{CJMp0u}fF3$0*rbX-FTg~tlPkfiigT9 z7Xw_KgMK{kG`wme{SgI5+<68?WtJ!fc~NweLb^Ocp|cpLYTc%mHrL9?nLq5I5k~xc z(SqlOrALx9Q%S4a#t4-NL|8vGt>h3SF)1=G%VdMQKBCiP98Q2(ZATx7d~NeVI^`~g z0!zd{lFISf(G}omI6-@ey&AINIxu#-s3f7x{Skw5p(JJNCwOd3)A;@Z6KVWH!sH-v zN24l{SVzhO@3c&!cB=Dmc}YVrijMVdxUt*Q&@>o67K`PBY)3=D2@W*I5h1~{Xb4th zW0iSSEMXrg`6uIoyj7}k5-~K<_a47iC0@U!=C1t#A}VK2(AOaiF{5*8u`6+2j{0mR!Z~hxb50P|qx?C)_{DMc_ym5R(`F*} zcxE8xF7X$15X7^T!dFr+zb^5i1usTv)8Mq>9rtJRxS-r69P8Qu-pB32Jg?OyYhS=C59B#-2*4RhR z(Z1`c8uW@@gYc9!S1)YuZYLWYG4k~l4YNR1MP6B&L{F7S$`Bw=T(KW@c5gO`uTo)n z#O~PEqmn)%yhapPUAb`tbRvN#AL8_ccbxrf5gS957~TCzq`N<_s^ZW8v-^|WL@xTv z{ed4bNns`9aZM{C6ivt*(JwpIvpDQ2#CCtx2@vRv(%%NqgOF_2>fZ)Xv*h0fP$IXT z?SC?WhW`r#=!qCYeV3yb;V!K@F=4;!)Y9gdjvt;+C-Q*GTTh-DI1lbg(Rxg=JP14=eku`!IkmxQOMK!5<^tf8bewO|M%X zNENE)!00=t;Q1&00tM1F^VJOszB(?KVdi_QUceWdykhHAc4t8j#kLMHSVCSA99qdT_$Zaf@Les$uuIK|vNW5&x-sRfmF9Q`f2&DL`eTa7nes_$=GgeiV=$~GQ>EP%Y5{twf=qZ|bO{_VQd{RHGPVbWpTg*Oi(G6Lq48wTf51F2i^*AKUZ35fNhq65QXRrSD zsPYlypaH$I98Ni@lHg8mNJ+Ig7FUb^=~(Qg#_ih=_-I}2xUYQ(LuwB~1h|5xEp}UU zJXA16w!(;-=-D|FO2xyy9dmp8R*pN4fF6JCFHxkDxO8k{FH`z>p)O^D9zcLz>i&E3 z#QA3y#s2rg?2&|VLa)uM)rx0#`|eEsoEy`geU^hVN71dD$NSF?#6A=+6=$pKOJpp) ze9Y%;{K9_hYKFO=i#WY<#2+d`-x%bV6=dV}%L<}y`1Q4zwS={GsZPuQZob%A6-xVJ zZBYU}S2olMW%u$@To*G+pTp}LG#@{8_fI>hg?vc17+LZkDxX<%>7HBNMoTaJGTCK$4^N!FKkmv&}pO-bI}A#JD0x_GmsQ z`F0=zAaUN_T+D{?!4xV{!bX z{)UGVdk}P7b7#qwoDs=r17u4s&ebum3(C_G_;D{< zh5F!&L@-~sfo~$VLt*K0cD+Z~vzA%VX4S2{)ynhpq$aPwN-LQcdaoG0y`6Gwq|k0B zo?1|RYugCb>_yvRvq3Zl5$3$AFCpN|euo{;D)PJEp^wD)bFKs1Hs(rcr4D?=Iq-Jd zo#2aE-9@QkT2l8kMc)F&2!ol&?uF2V)P-SBXCom?x33-yP!wbGBZq2wVPZ8)?{H^7 zY7rqq+s@b`DWx?o6OYrU!Q@)N5ev9QAZbA02S-h)?kpRA_XmVLJ|gAAEYR;w=+WGOo(2s4_f(yE!T2W+Cu`p!dl~AG5 zh!^6riFsvR`IE^PklkqIF2dS)xeCiwZO`{bkUi(pu$6US*cn|E{wg$9DP#9o~mLyNBo`#J%=HV)rdMr-wq@GgIKI(|3f5CVmvV1N30Lv@# zJOAgWUlGpBkGY+mFh-q~4Ar<8RY0CJMnP8kEh2I|AHPZ2N53=-uL7x#@YY0aZ>wLF zX(>)UlWWc-w|Un$(48jvW~STS)8(^9%vca9->ol#mye!B+1@S%vMAU%V1)UPZ#2^m zjuDFEiO@y4)gy0lsO$6JFZfqZi5=d0GRfq#Fu`>k*vd znU;pDEdFQ<=x=$|BoCNX!4kFtODo8pY@`H5YHLQmM3zreq}jHYvlxu29W%a1Ha+6) zyJz8GFW6DxVLGx#pEiV2B-qz19~hl^MYlVj)-qTYTpQB6L8#TXj_b@__yd~!h{qmU z#a`TbcWI+&UL$Z7Z#%?BDA3?~%V+C69#R-TKl9FGY%2}SC({r1x9dqaF@b;sksYd+ z)%~5aeS%H*u9Jq2jvv0xv@^gqfW%Yl%P%zpJ!b!RC8=`{Ia%N^IKvAfFZQs0G0B6W9!wmuPvD|_Q&Tq zRSo=*bT)u-;ye4ci$YrhrRIwXDByKm#y2HMNLx!HU!$u*_$i%`e{jFUPiZx?_fU?7 zbhGk@=4fc|uEyndudm+BalpJVja?0&*4m9zSOKyc*h*zFJj6oKh^~Pph;^oS&NLII zwc<@nEyFvr2RRAm#{D=$(wMkWreP|J;8HV5->XJJHLQ_X+CXgBj?P$^naU(zZWghKIR7tfwGWgC zT>)E|o|s$^zpLO}WIB;7dvF6NJmaD!K1Aa48AgM5a}5HgmSj6NyfPENOd&(QBs8x^ zNG#t9M2+Y)Y_Uk=hFK zc5ii@IEQ;nYdjQ;YNK(R|4X!Ja>ZzFhu9_sPZoC!f4aK8rgxlm8*w)w3FwmRM5ukHTp5 z-wI>WzYAks!0Ktmb+z={nU%LG53aalO6qSA{rxHXc|HpjN3(G}j9YTKA<)jJ-PBWq&+cw*%E_eihh)J|gu?023}{>#&AzRpNV;vT~F_&ZH059||SVaqUA}W+& zF)z%BXGV{=F*gaNbIZ^RTKDw;(M-0!b7`$X%;Bzl`iDK?6#7dzN37O?BB;3XleR2t zt|YlM5WkXI=iQl+bH$Zm)Khje$8)KXIppc>RmpvJTq!x_sQb=x6FF`?ExD_#Td-zFu%M?(DtlJY!n~YM0Ag?NcyWf^V;Ve63 zb^gwl9%U!!-NTD$Kvtracl7q-z7WEU6c|Xzhs3ZS5^~#WbYFcU=(ytO9mK6QI+XO% zexJcY;Jql1V=js{UXx1GPj>I<1Io!_T*ZFJR^tCcInO7=l>NYWVh?f~oD{C2%i6KG z|1TChUBy9XKxfzvd%nK*!}BimOGVsgmtdgQ*&TZndoSCB{(lhmkEenb`*X0fPka|t z&ReX{R31&EakP4hCpQ*oXU+H5C90rf<3iY7_i6^iewm_k5uc?td}L6d69>iAbz|V? zVk05C?+C?LuVK%nvi&YD#HKWkjTv~V^jmqtqI5)!k_&8OQ+pn#{s_XQZdd~_4c%II zE?$!8-`z8o#oo!!Y17AAk z-cb}3rc?yAK8SHsi2Bm|D1QTY5|QFN+jG6GEi^FbBwJ6>dXLYIEPoB1sQQyG!aJ2O zu6(RKCDTt#g}=UqF+H@QH1;6|**j7e*s=BY3*9`dO%IZ9Y&J~AZS6K8*0pQC0JKc^ z^Uef?i-I7_Ppj^E82KF8rxJIS(qjn`{Rkkl`p59`TSVx{v7D*U2Jv9hnY7@V3!;Lp z-J#bHmwj0yhLCLxzU9bKz_p;Qu6*k)D1vgv9tP z6*DWF?l>NZ)F+;-Mz-Qbt|561Rx|kGs&U-3=6mvLJ+Qd}9pLU2?2J=-bsI{e9WC3L zC7^F&S*rv80L!VS9tp`}Vv&c?Pd;cl%`}LXdD{svG8bXf;%w0vmwdp6mqW?}fga?t z@3Hwt_$V7XrpQ^CzPiT@4CHcG1eZ2Q5NowC*h%_lzgPSnOiuMM%X53vH_?f5Nk%IQHVEBAj1WlvYg5*R z2bQi&8C&*eR&0Of@-$PCdhH2(`ei;)4wMC8nCU?0@fU~QIR&pv+|a&C!`vk!Zmr}d z`Y(I$IrKNWy;ivUSYP~cwBtJio00Q)j!dQ3drmvr%D`53OL)SK&brkzX8gp_Ov$*! zUE_2aAKVL(k6{QW(e9J(v)WvMO9pt!lDJpZgZo=wSvS*Vvg@}@;zK6~%TAFfgKD;s z>?9AP7doR{G;Zo|-eaot1@lmt*;9MLSZV=74G;oy2!wrTiePswGo9-h4q8?F8TENx z!SI5XOz{7a5Q9 z{8^cl>HEK}On!S(v`*aHDN!*QwlY~n2DU?#t8-%DhW3V_7-Ot)LTcp5Ep>W?37)In zGNSX4??B4b+`*wC(UcN*Hcy>xdDIut|0JKpobEj@eImg-v1I1k`k#m-mR?D)U&Ock zQ?mUXNVb!i*TdZ!ws(uQ`c+To5m+=JGJn_-@MkUda7TbZoi~7(SG);m8Sh#8RpLPW zrJ9=jS(%A*Z@sk-o5nqOb{zSSN%zeND|v>GZU3ccLMclBK{M6x1-b5@0H#rB54?D} z!`0ok#FI=TdDf0|KU(n;r{P=Tenksc2|Eib&nr<`g=RRUCAK?q_Apb+ceVq@? z`)9_DwAstJ`+jHKbsP$+<&yi$TGu@D0z3^yB$GACH|QsCy)yKbl)KYZ54+u62+b4~ z^Y*r^t7qx@hb*-Dd{c*Gys>@4oW6l^kvCmw*+;x3|uPs>(i3AIqvZ@<> zGV2@m+c@Rj_M9F-D&HdP2l9M0I1WYuGsqi#pjNv=*nA+9+8w|I<{5oUY}#{teF}cQ zCDlLldBs{vul;~d2+BW&DDXwGI=W?vN2V4iJBLyUPeU_wx>-_6-7T?L_C19h@ih9a zkmCD0!aM_~|Hyhbh$QNkZ=f|HB5?JbjmpGDANm)9o;m-KdIvT|4|ja>Ul-baXWjr(}6{Lt#V{P^_{=cUXJ~j zE?zn?s(#~_FtRL_nLs7Da68%%`p&(qnU=`EhLqzGD)Bv_E36jruMy*G+Il>9eA-v@ z-jYx?9?h5RS2JcmAFw|@G%CMyq-@8-##;yf1VG&URu7&|7hhB=0WW>rX1Zf>c?=N4 zy<@uk3aE(6D`d`HJOh&(GT)I18&nb3zAD0F%;(ODt%)!1$G&~>t+*Ub0BWL3v!wAv zaPP?+rP0e}+R$!;Y%>7esTBe0iKf9#rgI$_E*PvUr=)E&WuoDg;B{jIiZb=q)!LIB zihZHOzblv5_9~Ye`iFB3CWGC~t_}ZBO4ug7Q~6iAeHg~^tWe3iR2+YMQ*nJ=kj6W_9;fm2l zM!?SM!&3XwaT~%ak34_?+1u_@7v*lkqB|XD>lMdU1R@)y+b7d2Pz^Yfy|ley^*L_E z>Cdbkciy$P5W&%~6Mu4BH#fxMac)Qby^T{dD+?9~a;B<zJisTe>M>K5aGEp#Z#K8tz$P`;W8v~-z&72sW!rjue z1Ag>cUhxNE*!h|l6~|Ek()K#H2kY{%y63z8)w2!jv!yV@jZIFMMo$fn`3oB!2xZ|+V z&2>ZhG3iRclnOv2+?V8hRgK|?t#s%5UOAS#*6MmgAbRd8=2-C`NQTQNH+3cdP!pX0 zpqaZY1^_irII`AkszwBbdQ>wPAD=zJJtO(IP>+?C)f{}%iJ6=UR#926PuptorLnPC ztKsav@&I~!`N`9#_FsjAH7;7EJTu%s;}UPY((&d}2Y@{fFR@5T!iCCs1vTZft;AQN z(sj2n9=PR?uo@AG^_E|>Tn8A*IRHg9j7m&7U2CA1w9f36v004BvG(`52n0ZZP=SKGz@pVdnNS-XT27o3@2HWsZP}!40B6 z3?t2^Q2wXV;G&S-Y844e4cq7sv8pkaD>as4AGxxCz>nhhyJ!_~K~9kEG$Ig;x$p|r zpt!jKt@#A=Xlj&F;Zd7>P1K9p{+04SFeFw>)5br@y=cl0iE?eZ-Si~gjqVfRbHlFhwr320s^~%vy#9e&nfeo7Vc2ASIMdQD z;6+<*Q0ZnO&8@_%D?poG&2*Z$CFE`Xu^#=a4XJKSoYv#(I1CfY06UF%_;W|1Gy69V ztUQ?@pGmz8AA2i>bCka7Um&O|f{E}sZ*vLt6|qC&`8ok|>0B2I!`QK0(gQ3RH z!2K^p$GsU|1}!)G$JJl{9(ZE%@&T`!Ec^EHf$5p27peYnWa*#RD(C&+f{=A~Fyx?} zRkE z%zY$zsK@*w3`>Q`Khvo)^XPF`U}&KUD(KfxX(MM?K>{COc*w*tP|FOL{$yXOgHcwz z*w@!ta7Sk%jqYoI>7D9qX)Qg^c{pbAxqiZQbk&8jG9|iQ^QbG- zf1(iMsabzVT05DDF{St|{S@@lk1kz2Z6aA0;ebUz(ea8cG7y@gJmeZ(Tm1_Glo<}UwaSu z=XZaEMOx+5VJ$4Lq?gJs`aWwJkX|mAysUCAa@Z4?Neeg;*Y&R~dW^4T2e7!>mE=!P zJHh_2`!e7*S#KS%lVlM-PvQy#%M-qUsgJr_*-Cp@`mF$L);e)F5_2|AETqY?;{%a) zJ}^RKtBRlCAacoNSK z@)?`mLJw)gp~>wZmG={MZ`=qM5E9nM3bgi^+XZW*pd40@IeBS;>8IqxQxj}BkrgdVEOzdCn zSr7&<7ea$I?ad%?%?z2m6Af&PZr+35UwGB*EN;rQnhd2*+j{JLAJyvuhgLvK`~1Fg zv1CbBEqz=pCA`|&|GC?QTWWjx+-VPeS57Q=FF4es+jYrS27Mn0wIF_vBW_90$CsCiw9cq{qkTzO3lw^7 z(eJf_JL?|8lNi)n_RU4{FhOTj9PR;;?BO`Bo~XHMCvO@%J@oa;6{9_*r_texX=&dv z%<#QFreLruk4T{r;i;tA(I%+=ciTMh?fy0(dT7*-JDn#{gFDLwRq>=#KBsU)$oKh^ zubf?kSEWY#t9Ma?S!^jmCUEM$^ct-#9fv;&pJER78WItIg6a`K^bTJ0V1!G%N#o?@ zrkFHzLoLF-#}ii;O?RszQ@wEVj*1hTO&*dSRBvV{N!%~a$8GH3i@S{IFl5R_fe25R zecT7-p9@Gt*4|0gixYWi@021JpHF4ATiqmI1lx8?-dA+px?ck5pVw#g8~aUf)YA`?R^T z9h)m2;qwiW(d&L=l4Vl?p5<)Z)fi7nS(tP}XLBIj@jox`M&2 zv;wJXe3U)Yijv@!TlpdYKzd{S331MWV(LY1q4n}a#&X2A+O{|o?gPzUS;nj%wIS1o zYvU$ZfdkBd^oS=^iRu1G4UV_sFe zrdI;s&;jC{#HbfiD~@i@0V7zU6;BRbK< zq-(E50Rscpb$P{OV9O?ICKWIGev&#rTu@0wx=%PWb=9rDxfxVqXU7p-n;APH4G)Gk zZ#t`m#(2y3`cR_X>MzP6b_(mnxF@LIc8D5@HQ#Vo$!qqzp9Shk>Qz*Gx=#MF>?L^~ zlb+t1BuU;c&m1FWW}iJby;4u6zL>^Or8l|6^5k=XYvdl4P~V_v%@U*KIrWnq!+rLH zw%+Gnqd`$u2WK0 zXx|daLgz$*AkLX+jsYl=l0NbYq~p%!+RBOTnWABGd)Wf?t+`VBO6$jR#Gn~)S0925pPyd4#_J8n?(s*C zJAIF;rvm!!K_T6O!z=rfF78g&S<|*4V0xdM&v3hY zO-}U-aN9#bW?MfNBXTCB62jMDK)c$n1EF$az4wtLy2ovXTW6gAYFoQz^_x}#g2fL% zhw*)L>+v!Gi!96czoV7@ZvOaPnfiCc>Hq&KwZ9CLt*#pax|Ub2asTSO-+0au&oMnm zHx7zs)nRd-Mv!N5-L9X1)>xpkB|<90Vy@>po@m^Ur3dB|Ty60{BH%yQ2kj3@ zf4jkl)ZPqxNZBe?IZP>mJNzcN@WQ9sj2B zrY>ZmyFAn)z~nUlriv&~eVPykx`S6S={H`V2io|{wcYGqyiGX0&gAgqpV@B^b$*-O zt33%`qMclEx^u}qhTFg(vM}a0(vie&wquZLahI0dAu!XOqn$N)30bD1dqa1wKFF)k z)n)N_livi>(KUOCk}saNwAHTUM)&K#n)=fKP~x0L@n-v&P}^rQOuXJ0MwO;#)`-iI zD*RdN-D=;#aMr2oUV-NiU ziviuz&fY7Woc)=UKJK2w?m^N4f;{9aP44^6(UzY2KADBTN_++3CY$uO{X<;8A&Qtz zY-L8dVHy`J=#DSr)fVC3(dNO*)&~UKo}<%28zEi5Ti6YE@WJPW`Jzi0%!0!R069)- z=E|i<24pte$~bWi{a2U%;_IN}-+?C9TLBd5d~h;iw!AKk-eK|j9rx>@q@f!?Th1^Q z0J-OIF7MAr=9rTUgmPB413}NPxXT7L>Klwq9(>E&-T0CM(Aib)6&1(ndRkQIDLr@nNa>R(qO55aAu;>+(qZ9GfU!6X|4tx9-s|{@IHEj-)@*gORwr2(+w&y6+bc*lU&ca;VL7=V+F8P(QX|7+^&FK@5>?!WOS!Gax!LHNH zvbFcpF;kmnC?I6aPBmQvB1Yx}B%dWY#`*joYTTEOUptn!ky)zC;Dha5v8FrjGNu3{ zlVq$={MQ+w(a(stSJM4S>U~4eGjsR6U$weR*v~y3eW4Z#1}H2bKea1>nQ-iL98QD{ z+m4k-ldNaAct#6LZ>{kE)ChEIK(a)klaDNum=}3M@08BDUgnjig*XohuewoLdkyDJ zcM&G*(vI-KNrDj_FR*6=*17kcE^8cu`iZ-(nyY0+1m7yi21f23;(10|4!~9R&3x1UU=^687RI_Fvp|a~Ba$!ZK1v%G{T?hR43fo520V5)j)Z zC7R2NCL6wK7&j_Vl!>lkSLZOQayggeuTf!j_{QDTq&8C1~`xLv+ zssNnk5-Q)odw1<_K!5G~bcqyB?}_ z7k@jo@nCR7ENfn%pes818+7n9R^3ez zE1nhM6$NA92~K)DsPE}$^5EF58C{Jn>4cC@8xPp%#V7~__OZC6tq+_1Yv;m&0V4-( z?Q@U9vpTw*_!<{DbLo?STLS-G=JSep^BE(zq4C=Vx>gS%EJ6KwHF|dw)IXxX?e)kX zzG>`S8FhO{Cp5UT!F59!!kmWG(wO`MO4=74gl=5&9lR25u;W4Mzqk0#ws^wXJZGeu z>8BmgzyGW~@9VO&Bt~cJ$+kt*xs)1N)!i;E*IxI2hv45K2Vh#IA42Z2HK1CvSO0a0 zAdWSDiEiFiOH6VU>z=^JK6{TYO87lP4+$|t!r%pK-rAw?I$_tH>lI2hC1qnAJQEGJ zY6P^K%^hSJeh-D46f*1|sDQ56I}-*IrSEz6GRB24vIrVUWy zr-aZ(_nc`KFKp&NSL_zW5L|qBlCm%!y+X6!#!~JWEEsJ7-Vj&7L#aVlTm@{68ZOG* zQ{dQnn-@Cl{4=aSoAGO6)%A{Y#^pgfSgA$$mzd#&G=ww(=;GW>YUGv_{q=Mn*$Xr5 zJ@rq+WwM#)VO?npUl|Qt)o{v(0oqM8^Xjwbld0TgBbdOL-=&uC;nU5{Nx&onQxX6w z6DLIEpJH^ zM8E_NlwPXKvbVSUstD1fM`lNbX*J=|i+4TvA;NZe@EJ@C{!zY$rLy}GgG6J8v2{hG z=})4J|xgVvH2VW1A0qS8lp_xtrrtKQ? zI`Gi4FKN-ex9i-Oxy1!Gsqdcea`)))3R?JbrBw{JqpS4GmIz1RS)kz81st;7i{Cc* zp}S{>Uo?&P^!}hfH{eS+;5xfIPkL;}6t5TIfnw5+@8Ll8rq|UJsb{>E?xZYh}%KI`C1g;wO z^C`J3$QDtxcel-zz zB9GZ(*{ZhD@iG^U4QL|VA%DZBtDf?3>bNs4JK)PFP4DbECPPS}pQho>vvsrmC~fP7 z9|4{!bYb^?3JU?c-5IHFkZqj#*jPGIoKqL*f|+qeZCf(6Qy22e4?;}5Z;WWTJ8UxZ zV9tg;-*pOtDJRVIq2{WA(#;Js-rBtbdIQ+;iWQa!LZU>r8Gn7-U1u0)+Y{^|xjV4wZqAZCB zGZ})AUG?O~08CHB^hsTTu=d?B@vzDFv-2LZrpKcz4Dlm6HZGlg&onr)`M_;;c4DcQ=YA62!le zb^KDFZc0a=^t3uZGx7D?-AA%NIXe`hCVw>FcgT9SV*tI**P_oV!m<}G%=GyD2D+=s1F#2n~D2% z(mi*t7HBO&ZLO#4trwng0M?U~0I=`d&lXr>J$Ut?HJXnG61j}7^y(%ffFP8-hc_IA zqmWQlx$@i2;TNa}<)H1hE@S0`Z)wAIiP)dmNY|MqGrn~%=t?gc=t{7TuV&V@3%SA6 zd;1dl4QFWve~a-~nO@70F{(5N5w}XkGO*R6vf1C1Q6p+*qqws)&5>B+T(5~n*#}g! z$E8VStab;k9w{3lt_)7`&*9a)uf2k4+dkP0etK`z8+tl{6Yv=tijFuuk*4R3yuvtU z+-KvV`Kr-wHM`a$)(eKR!qz|fRwA2GL;GxSWmbh5TLGn=pBk{y8NNz|ZS7>)v?bKT z2o-pPTP=T!i||RfS%9`@&~rzkL=s_j>O_k@*qG3_(p&ooQvJifY{DG*$At{;M)kSj z7IQw-2~YV$j?rHlv>t6xL=GKtZ!o+Xf_p{FIBScgefmQi0q$uB8ft2HyF!MO$8;aM z&=0t3?0%m9wxOhlq51GFxI3Kc6t&V~U%@(OYY_3V7jopl`n~HyXu)&iwA4m)$VEm= z3;?%A5&hJ>Tzxq}xfGoJGtpDi+{YPn{6oZh3QBHs*$DOI)JSDo7pT-j{Of`KaDj{< zcmTi79{c^nUzBN^mz3%^9iAqUF~zVRPf7lfuGfMr71(~qgK3#X&MDS|G0N8f+WlAW z%YwB1F~%YhQ=JR}n`_qNcU7_^I^DET!y=&;_8q2PKVHpz{DakuG@@&5PSStX_9U@- z(MZR_QZB$=$T~{vF60}8cG=uQXZ9Z{#A=1TZi4r8x_pTBSSV?s85N(ON0j2bp0U2O zqHGIPr;ic$UYt3>k}Q-)N8g{G%_4H5inH%j2H8?e%f69)6qH&;T;%Ier-1_j2{QTJ zXwrB<-8jj4>tjYnh)#v=7)&Y_uD%#+x=yz*FkxL4%#rjH57>O_74)S!vp4sE^;Pcg z!|hmSz!S{uGkG9lwrf*;pWLeZ6AMd$+MtrVSAW(J!_l~bw4_dxAF=}^ZXqW{)^?;h ztYfe{Pv{5M>1RGWtc1CR&QE@th@BFCRFvSVMVL7hGKDC3x*yOcCobve|A>;-(JuD; zEzWr5Y8AZlnT`=~AE>pLFV4Ps7BY$fB~xzwC*my$!tP3?l!z}FLjoGq`fqeEeM!E% z#7QvIWUf8QSy_*Mdx))*V#xgmEe1Rz^kp)Zywpca8lT8~)8*R9F(Bd?ev5&Ga`V&A?S0{uE@ix67!f-AS6IoGI1a{zFN+JPSHoe}JUO7IRD$+i|;} z0cHhwuxKL)FLDRLx@a4=gC(!HbL{+`c^A2noacMam2l^u|4cI;W8#o9};0H;l&T=`xN4$xa-uuI_9;-?7sx z&}_(w1oYWe>URqbNvlySt|q%=CsyAaKX#9VWcgylT~Tp(3Vh0S>9UX}J?Z5sM`|gF zd0}!y`ANR~BMG-#6!;5uVDuz8_R{-= zeb%tK95ZjIpfkkx8bohB;RyQSSEaJo7_AerwHU2~Ytx|bR2Ki!`TR{}-|NH^`#Lld zUwV7BrhHYh3=XVg_ill2Ab2Cj%36rm!<^^>MfnLc8x?&Nab@OPT}q09EQ7)=23z+z zyL^#|bdumnf%WBClR8^B(J=$=jwzUm5Dj<2@neivh_*#r1sgE&DqrKT8`&9#gH5<` zEW_Ap&;)gPRcL18%VuD8+YAL(H(?=U`=y{$mECS`5lMUV=x1hQp1Ensyaops&gdsY z-SZB25ynp2X`Kp*9+#d9C3I^gA&i54 zn^2ziAM;xeZM{B*MsI%x?vBq5L~5d~jgpQR67C8q@JzbgW^9||Phfz3u!_D|AZ7e8(B3gfhH zm~~i_aps>bGY0!U8~j_cuT^P5%UlgShubMh87gTJ@KKwdYge3(&~3F0Gl$Z9m$Hh5@qdf1iw%7 zq#%J8HBq{X(b*_8n4pSW+#h%#7wfxT3OikdG+(F0JH(O&1E4CCCR=%CEm46IMBuS| z4r0t6N0CllzM6F#W^k)=kQ32@VMgC*fX)v%s-adU{dBV7!cW8wmLcK^ZKaXy0Rr=! z&L&8d8|gC-ExLMqNcWw=ojdk?RiIqfg`FSG+pnozeA$NAOh^?pwPjP{X4_ zE3-zxS?F=|mu7Ly!~AQB0?N#yKw)ZHM!j&K{+-T-D}YaF6nx+Jg|2=skXHs{9%ws6 zMkvymX$LZ`@6YHT3r6B9b!(>6RM!cNw~JW_zDgq6P<3E8KIt-4w7hv0%tL0^hf_%8eA!xbnr3a4Y7W ze+eU@1_SH}TXD3ycfSLR@3?TKb-~kq<}Gl9wpu@n7CsrJYitucMuE=s*DSQ)?yXzF zXX{z%{8CzM)Wam&eZVmo#l;^D>#55SAM26rxAn$;)MgaT7k_}iHP{tM5-8YWUhv$8 zcd&~M!pI#JY`BS@%;j@2c_5laV2X+r*GU7@1`)J28E4CDi|KWx3&{iP;f$dAyD{Dtph@>4I9;pEzU9EQ@&|cwHZR| zVK02+`wON8&(6KtCB6!S{RdWKpQHa{w@gj|lhoT?xswa65|gVSt4>ho$*LSCk={9c z(&e+S#^85dTt%CxxHgr(&1W!&>h={8aJFytRf26pXiof{X^XYQBygwMKUFDn>X0A7 z|KV7_Yrn5CuFThPN>x~S1%Mcqm@=#Bsp=-_mx7YA#V&&T_`{6{K`_yww}I}pKAM>n znvh%2KDj%rD(5t!V+si<@aFk-bi4`*RtVthgNUJSg&Oy|@m;A?+hKujhtz1$Nmd1mI47MG z?qJqk7ID;@Pt*|(Z{G}jnbyNTB6KwH1}8d`PNLu!6{=HXMw~hx&OabJ9|+8|YOh-~ zk=E`KPZjcNV2>H;mmE<(1#O4OVFP<~Cmvi^hwPzL)q z`9K1>33~|H+=%78CdW6jDB8KNUapBB?AMb?n$-d{hCk4z&*n#Vzg5qgwUgVu7+Y!M z632JL(Wk|yKHF>8LJH=ibcojw2eY>-F9K-fW%B+_=C7!tgVt=0gf?7jSf%Kjj$2{Im3{a-;>_jkg`6H;SB73Qn#~Lg~T_>YknyD!aH+Onq0`^^&to+)6+GSx9GZ zswXNajC``g+toB8iw~C-dw0&l8;obDad+_tq^?wiiN=zHq3yZ*W5U(L(rj#zi!jYj zq0|8RmzpstM)w{2aM6G;?6p?_j0Nn2z}|caP$flQiqd7#Eh&&!Q4~jL=dR>_@b992T3-Ax53Iyh{3% zYVA?gA`F7!Njrn28{T`Lo3EUl9LCbS9LC|!3b_^|k>H{PClsUX|91B~1dt-&U1yr! z9H7uLk+ThK`w*JhTV4&3M!Nm5Ni=I(hCs%)7ejMN-l)iwX9pBHEe-4$6(qOO&F5N# zP)36Cwnh@-I;R)bSUE(7dYpf4r)Y`v+H!wQQfeC&XX`7QXTqcMOa7!_qO#!oU-ZGW z0L1=bm)27p$-k5?dvH!^@UYk9E#$SL17EjQ%D{nd8XwNY)tQ(Ivs!e=pP$pRb zld2H(ReVLq0j4bn`rs{VfkDHmBA;)i_}sdPJHKS8}&DbInr$f?l@!Pt(BE{nCx%`r6M_WVT5@OCFQ& zpPL0If!VX$qb!?9^A)glI(Cfv8t7Q3M%~SP$?`O|_nrS5p1=#TgKX1%@!ZDb5TjorUm zm-oGi+H4fuxu;%w-~Tc!#nrUKL;uJQb+kjbiO=b6;I)Llzc@qNZ4{8gXxZUVyEswt zWA6Sxx5ia#j}tF;GU9xN+PNdP+;9bo1UYNa6u2ti2Zob~a973Y_2F9*|I#DBO%TZW z#S{?v7)GmS8lfK5Hpg_#&mY3V+I-4O%voAkBsWxG70C&s+CvA47_7JMG0EI`a`8n5 zW~?>8g5Y>)sc*|KXca*(Ny;H;DwoHrJcDlg6!h>S=7hKH>qhOaYKZ8>q_Bprz9l8W zogg0UYN_GMfpn@56antQ-3*rNGdxYMh_!L7ZOFTcrYL*yf{ywnmE}-^*mU}}rha~W zv?l>t*+S)HmS^?Pjq`v{t?GN=HM4&{0+ivq%c_&>zLj@IdYI_a4?3)HS2}hmjD%Q( ztq-N*P;yi#U;}?)A{pduM63MGUKj^x9Q~EsDPlL>Ip8K|o?V%w$ObU{c;OSLC{kAL z_&vHSKb!Gn6nVXOH)_|3>Tt^)EZrI9xw{bGLb^9gNftIIv$9rIltrJfs~k#fLl9r! zWkfC9CO@K?Fl5PU^RJ`3@*O`AW)V9~Luzrsjy$a!1fz)>ReRaJbyziI(T%g)!NHuMWu+(hm*@~Y@Kbxk;bSx6|952Zup4fEj}aF@i*V0 zs$OemAin4vdM@#=A_DkD^UQ9K;}VwdF+cX6f8f2k_Ue&oq(ekJpqpVm)ry)TN>)5E zTMW++Z&M5f!i6I*isrz1CYlz({yl#*Nhl)(_OyKx#?5f`fc}@8L6&kN1hW-*Fx>|e zobmQOQv+(2R}Esv@3N0NwUa;DvB+Srud1A1G@bS^X>8rZq|Hq7#=02N*_-``2AXL` zeI%bmTflo(l?YCLy-JcI%W#X$_YpKwJ#oYwp#%<0euiVk*>*ZM zR!P+?b2$<1Fn1YC0$9^I#1-;)-LyQ>n){lYOFo4A5vXv5&kwP_u=apLU#bv2VjjuS zSTGbEqvFp}2C#ySVtL_P+6N|i2IE&KT8FheIv0j65V0NhoFTq%v`2uB-B68t)tRB_ zR%kbc9RmnWC4R6OZzH{8yT#yjSb9B|`G6_6EC|6+2>oCREF}}xQ^G7Wnh!yxY264V zfLXX9V8qbKRhpob+;1>q<>}E(y4C_K>u1P0A@L;z`b;x3!SGA{oDjfj&VZV^qN71G zv+|yj-C;a&_!3!&&LQy3RV9GWaNfsKT!%f@y(7ny;;j4P2h`ZXT6~r#*c4!&k_@EO zAF>R;EfvE#fF`xQse1hP06f+_S?L~oh%0Q&z@7&)wb?`m9$jx3PV5uSip*=rcLq;f zHNdB-l6cy`ClC*6rlMG8l*%O2I&v^sDPo_on}|>NS*}ppkjQ`!mtL;X$Rv3u1n-;uV zRt8M1=@K1G16zDYEkr~fb$M+#^YIo^f68Pw7-OB7Cub%bQ4Q#UUZ@kpfvLq>bQ=l% zN?Q!=MSRGk7TH4w1^ndF%xtgq)#?JM8PO`EJTBW&C5wJbfGz|*y1m!Xq_<8>a*)3E zT5KD6^g*dvvX^+S&QXU?fflWOw<7$wAWPr$!9t{NZGr{g3DT_Vy1Mj=mYV0NhJr{b zliack=oPDsZG2EGn|jF}@o^VFgjM^fKDzJ~9u}^CD%+JESc&8Ot-&`T7k@cB$gSL1n}qXel8(r6-RyAYV~}Z|d3> zy`8xhJ%vn#E_G+KBSqCEVOREXpuYRoQi`qq?6VJ`#lIXE(SAIn(9ll~EzGy3cGR!i zUQyh6P)q?F443feUWm^YgSmUKalUL_0Ih+~k(>?&Exn87z!$2M!UGa>{D`MsoeSZD)iW4vPddvfBx2u(c zh@t+Zz2=4EFt-j@n+cJ_8zCp1pX)lw=e~{l%uu97aZlV`ImKR7VgTUB=?CVT3TI2@ zJ19Y-i#qQ~Io!roaL4$a}`@wa$0&Q#sJyML?-oyu{58OCY+vtjDV7DIWke#e4`k0Aa!TRFDgR-rtC z?IvW@>W4Oz#daDJz1X0s&JFR6yl+(__Z_?GdonV*rh{&fK_XY;e`{$C|LfA)h#<+I zIpGJfOM(^jigCLT);_-|q)i2`QM98@HvR)6MD$P-WDTafiqD51Aba}%fI$EXdaV7@ zW${sT)}Y)7Xd$0iy&u9r*B$@f z(w#FGR|~9m+Fu=CzZB5`S9{$b6hlENPoKpo?roRZ^lNaLGY!EUM+d0Y^`5}tx6Q^f zU8;Evzw*sTeFZr(&)y&d=Wl--T@4-iRPifA<_>0*Cj9_l^^Jxd9EUl+>0q0<5>;^n zSq!+gL`r&#@g4HRettteoCSKbWfAA3nUh zu`T93I9=5~mMK!SKQ5#5c+uRag==?jMrAsx#;?rviq@*zrG3{oORC|h>MdLFF}N9I z3^7p--S`1uUPIvql`4k`_{cm&pYGo+5y zaxB>&xF&jB^J@h7N@XSQJi1(5OpWZt5XwogG>@R9y2~fm){(wabPH$&Dt-Ft)K2Q& z`*iVdTk6LBm5=ocZ454M8S_Vf(Y?cwd z-<00cji<-AjRN_ZAw$laouU%(%zJ_OzgkESM^RlGD9;@wJvH-D%oRWAabS>yyIi@t zY(RKvMpe|XTeX2ncJhaWwL8Og(aDbKzv2FJoqP8(XBO@iCYptO>RC4YDv{LTI>>gF z_3-UIU1zsQuCEe8o!VCuEu4kODqo3*xueapv?OouXdIw|+5`}TJ>F+N)aeDr&&N9m8S;P7(Me_?HTs5xsSN48<8*|l=2FqHf#S zF1Vd51-Q)NkXd z@)`3}@f@k6vp083VOh{mu+&=RmW)Le+ZH4O?u87t7{2J!$VR0_oRNLQ(E=;Oo zGt-T8&q7Ece&0wngcvhmc^6n3KU*i`vjblUI6nyT*aeMdB4hyTKK8UQaNa^W$Fn?D zc+){<;__9mpcOl^7HWsX-1_sM^$XB!9$t+`@(Y<2W#7_m2$uR6+zTG;ovlx_PG4)K zs%A>!uP4wy-)03(W{&%lMg0PRzU?a6QGuo@#x+m=aKeczL|Jry8Ko?$wk{>SZ#8k5 z)CBCQ)=?N+#pu;tKH_DA2E9b^?vQ* zz+P!ddMjEujQfT#Il7j^Yx>9hURL4Gxvyre3ttKPZ>J@7_W@`$I5wv)5S*L!i3AL0d$_Bm zC;Fwi@OEC6ZnvfAa_~SP?$#qpu_-3hHJKVd^~@Fp86maGFXaW!?K>^s zE5Va)9I(W}Z-iWi-#`4WQ;wifdIV^cS4bP%pnxrwkR)@<^XA#Rv%AR`+u$z)PI{|M z4+n3NQY+>V&ciIftn+Ws{XahtjFDS?f7c5MZYU#Nn8HXtNYCr zLCV#+f2Egc%#mx~)OYR^U6x0DgmX%>>I zUVMkx*{$j3k2;_y|6w^TSg#s8KeV7ndvW}$5=U7P_R^?RhC`%S-FZZi^TtnHz^-p+ zog76b9u^VssV<>W_N!GxGT62jdBs6)pOvM{PI?-c+pi2OvaeZ`~ zVSVWL*OY7XYnU}y91=af2S$WneJS^w1ybX#5zI2lF8jj) zV~daXL@GIxML1%^f#9L!^u3MSSnB1$iRwI15-rV~CScqwNR~aHgW|<_mhxbL=&~r0Y(KL%4fH2Kz+tgU z!FI0{6{Qs0HE|ws`J3rF_AVaK1ETw)kAmY$9#Or|xqZ}a@3$eb`bA$D6s6+Qtd;BM zlmssQUR{?ys{Zm{Z?4<+Ta$!R|GDP|1OY9+a10Pmqy2Su2Al7$M0LA@$DBM^iW;Vs zDr6lnI){Q(uS<$c2VW((%;h}*(T_z(hotxhQQQBpbOlT&}5;G~E8a!;fk&2N< zPUx}Rc=}rbZOfKz@gzFA2k-l3i?Np^GDyro1OQXt{e0zUcX5Ij%y2< zBT~k~PJb4h=!$YHr`!nXIjR-JC}490nm}9BD7_=KqPnh^9kwT@YS+`PkxnSKzRk6g zdUR9Bw-yZDZVCL023$7 zxQCa3mQmN|gOp}6w0gj&4jHyL_D?Hsx;sYz16$|zf-R+8+wa<-FSlka#_-@vp$3rN z#@nH9jOU{q4V&ne=n)4~E?jd1DJ`OqL=~^3`rb63i1y8iZZ?ffP0p%!txaj09sC9w zytBE=!rJRCC#QH?tVa=`wT@Z+*;=QZ>JOR%oBT>_C|snqB?@;X-1sv9$O?ek?CYV9 zo|jh**Y(Q&uHXi`S2+yMHcNeJB)!vdi+8-J8rv4`Nn7Cn@zPvZ6K43UIsbMhcJq~q z$tpwS2Z?ptxpcMTOOsaaF@x53%Eend-?Wu#jP1ln&-Qv>Rj#<*9oU^y-bAFPA0j2b zWn7#{8nVH5)}{dUwsOQF)-Kn5EZxHs3J#)D!W`4>A&huTD@vw0j4RrocTJawyQMR6 z2`~}7982<{g+C^ty@2uclPUYRwfLo7SpP#l|6Wmwu?Oe-%8HWpDl|eOCm1Ax4#5z` z0N18PKYPXM0_IxV;1Mpt9HQ^&NeXFWg%~?gnrAV+(dR7e@rTmC-rdpY2)>g~H2Do& zyAzT@qC-TM=Uy+Q;0Z!{Z%;Y~*nMITLt6Rfs3G@RUX!SX5oZWX1O|`PA^+cK^t450g z_(IIwz;gQ3-5~uFAiHqsBf-+V_0)l{09Yj;JQoIPXW1bS8z81 zFrWVvk;7Cjl#9Wp8s;*%9ox2K?4nbg#lhYR+4){8Driz}K=uW$qaZK0a}*x%D6g0} z1iBr~kf>evZZpKiwd;V^Rzd-iXFLNyMdWl;o=~Y0AM$5;5z%FnWW8h0QN|PbIy=r% z)7zgpzh!h$kG#`5bu(~mgYE$%cnCG($~aAqAthIb>G>q;~DKRoJp z8%GPCl!Yw3tN%`Z{b&E}yP*3q3-yPA+lu_TUYqI%O7{Ff168jfe~asA4Bt-Syje7gt~{WP5z)a~Ak^rE z3VW@*r*B!P;_SSm7Gjwb{d(EwH}BFkF5nH8_H5xx#&&b&kAjZ5X!OnQVuZHtpY}6% za!5_Wstc>`^EijI&~nxHmL)*EAMnW)N0s9)&wH)SZWnp+42U(5F@gV(H7&j7JA<>n zJEM}`-52}KeI+t)@>N)J`w9~Xv=Xl^N-Bwkm3eG;^18Y6sjeL5;N_g2FYv5&YfpF6 zajjY>uQ$_{ipP!}PEz$hvn5IsT2MT6c$b{RSYiLL=01#-7?ILqF^1JORXB?BNxi>ls5@k(2S{jrsFI&?cMXLf{ zKv+R1?OaaK2^*d$E|}16G}qU6hYNYSVlnRmseOCm)SU@dIHr`b?j{dyy`N3`WL1o$ z&Ircku5eP;YBw3&e+{&aDWw0jD6ek8{QrJYo>zb?-a#k? zJ5XdlB;<5>``(!UBo^MPE$&!hJs)NF)OK9VBt;(aIRAR-m#B$Lq09^lS(c6l!R>2P z<3iv3K~r3{(#xPmaXu@=LYdqEXs0(?w8cY(JJh;qx!6IS?G&KD`lXi1&$fiF^P{HZ zszE>1{h_=qi9k@h-Saw1?of@Ac(W!|_y+avD7|%Naps7Z#QZD3bq3ymij8G!4g7)~#*wU;p6!8? zT`tQS_SLDq9z$0PF7H2$0JrLkU1ql`xnmF6>Cep%XvR|V(=DowGxb&suuW1)PJ-so ziTJmc@AnVC6Bboz9}>}9B4ysP-W__=Y?^N?ot051;Blhd-2C-{%%c)V*`&Y=Bt2WxMd3))&o^$#(HT8zFO}CX8bFqR# zz2?f0WASG0x8TA;yY6X33T?9e51OG-nG>Z=kCOp2@*cb5i7x}s1Z%Ue_LVt3if{Ia7n_XNiNMd|cbGHiX-Yfu?Mmvj4V*+XE)ilk2wdisVxu6o8uw zh$v$|^~ad&dG8L?6?BIG82fYYEf=JlHBieEtqwn;O!qdi=`Y z*nZ7zrjFy>s2mkug>NPK_E|x+TR`3)P4!Dk4nYC=pxWe!A2!A0nBG4%>-mDPJ3m+A zxS1EG=Fc>V@|Y>+mZ0nL@roN?@@5r-MySc#{Fp1xk)WwBdXgZ zm#Op|2Y~3(-|{E6+MV2uO`KF){Ox1mbUnN{|Mm7~6`hmyo?>(3w9zKeRIh z;(~e&*drfVxIERth(6Yp8+L+m#TFX2lfWx zpoK2**+JsM8dGiFtyCUN-P?-2xK-VDkv-D#-A*M*kGjJWMh!-$(prImfkqgIcwoqZ zUsYAyOvksnk!Jz4P>GEirB+g^{W8D=7K&bO{;f4PA%s5OYG>zOCW~sz{zApBl3)<} zFV^MSAAxRiv(!$s)X?}>oUL%Sw(pDo)V9AbC@=j~18AwiN|O z;U|g$#are10TTP?5#|A_KgIBNGzubX!qP$`!AiTg4UE?5sAWtb2V7LQ;ep>%e9eM-XiHr*?Zy;VaiKG{&91(86l;~F`R4*19TXHdNauI^&jtFHv!UCOAe{Kp-m*RZMSLpRD}gT?sm%8d5N>vkT%x^_mMxr2zI* z)IfFOaqM~&9lq*1V;23eFXy-{kF%2gcSb|ms9&7HdqgpGaftiT6Zm`K?y5=lJIA+6Ect~hEykl7E;JkDA%jB2dk2j0Ww<9num-~QWV3CdE1q8Re=u&4m{acRkY<7Igltm-o6=?@358p!o_br$Vz z$yArPKZWq~`y><$(FqebSQDRhYf~CCv5(T8P!PGn9-5S%eBxL`hCkTRha0Op5?1tW zE;=}Q5vrGRB^&u4XyoQ^US+|Lf&>0D-6|nb=Fjfm^2{?6LsO^kyAdnOB1OmB#BZ~JD5-hha%fBe7aSwgUpO#OKo;0Ksjil&1 z38vm$+lCj@`7WjUVL^rTA_a)Q!GH2!afrXISb{$jjZYr?6>a>NZ1#U*DE|ISz##^H zff2(0XMg0yuhfVKQwgmLlHUHUi{LC*&&f3)MwSkC5fZ#!?{DsQ-po+JN==vBKLGKh zi^C<*k3m4ar~UOUu_t=7_lX{CND9QUV3n!+yEr{m>9h0)$(vcAn*oe3-e`y2h{ zzOQ3h8A4qg2Nm-eHV~M{1)(>HXQ-rtU@AqS#2d6OvrzrC7Wx!4L5K99*v}Y@{b4Tw z)bT>T{R1oHuZUw{%qeJuU&)9>@>IWxOl!f<J1yB1U4g~L6U7(~);&a;_x8rtyr_`FTtQg-Wr*M4`aZ?H*CsHi zjU|gmFYbTI)jSssz#17B#R)ag6mb6LPxu^j>`$TzZ&be0+X?4 zYGBajYWN$QZesiQU)LS0%?Y@j#AXmalpMJ9G@MguLr(wws7_`yx4W^dFg*xFMJt@^ z-Bo>CU#lz8_71*msy9-h;`POm4hK~bCvQ5$zY97z2CVvk=otJzBswy$?BBFRX`Ba% zsxe(nyCF(GlT^^1qFe^_`ZKLcQtp9wv(@I*liJ*j_ldSspJe*CM0N`yw^m*r%*P%m zU^}gW_3n|g?4;Ngoh-e*KMdG%2jj$}IIh(*O;DicIdWV6A~URjs{9+GW8EW=h}6%; zwD$7T2bIyZ?Z#WC&lzs%(x>WqdoBj<3L6XJ&lf)$S!+OQQ81*AJu-xewju?Qr8*S4M4lQ={&xl$FB$R;*=6p_pt@8KS>O4~KgFY2kJ|78X0l7!}Z ziMv^#=`nuSbF!lP^Y{_B*`3Dn&{}~(ep>#pQ$x>)Rh){UFlzJ$A$*Qe7AMc&C&!gw z`hmfhXYzt&+h3@Tmd$@hb!=pMItE~l@UQB!SCpJ_5>Z5YX!b(1j~LN$h(DTc>sa|C ztuLTYwT9M&(F_+l-%7fDYPNuLx?(Ui25km%T4%$%T-g=$m)RYu_c+g4 zs(x+Ez>}4}aqKeL^>eb@*Db1fvp_t#eWaBPZdJdcS&2LHWth@Gk7ejvcd;6rc6%e~(4O3Z^K=L4t`9p= z9}V!^Mef(^1iz-}FKZ}TE?;#?NQu(8wS3H(`blYWSpe8y3%cFgD^b64Z zY&O{lXM3jygbPu{Zd^2deCH8|8pYWhsnaJ=^7QJzB3hyn1iwz`lRubWKYUs=n9ep zsS&Emt@|8Mue&s62~#o;sfX&g7zWN&WVQEBCUtB>#kp~2$1tlrC#xr}x{n$PTC+nK zj72TiB!H7cV}vvsHrGSL_8WVL zx}d>5fyjy)uTZMo=p8~TWC*LQ2>o5Lc%-|fAlY114R#x~TD$7}el|QQD|)_E6Fu+J zNRm*)2Eu)-oUO!(kylz=RmZb@K<=^8CJI86Fng`D3$=}^#W&g7)q0qb+5w1Ot{5wNxF_%>eD27J)+@nmHxjfmgiz69B<`wih6 zo*YYmd&I%EZWlt))m-1&!V5LAVgn`l>lDi!1|X??;1`AT|NC21*I*4 z496W4t$gRE+3no*z8aT2p4Hg^VfBIFrx&c9eL`DhCp|hreqwX z{+i0+Q!(=J&s}&V=}1;Wl=-L`-ixif7ryBjkWSZS{~L{P?1A)zbcMVDh7efGsQuq! ziT{V?+W%*j@v(njrT+p?MXTFa-{%lqGdzl_$fK%VsJo>k{wNI_D;3&4+lR)UnI+^v ze)jh8GLPtC!=>5*q-P=s+ga9xf6wZ)3>ND%w@3)Fuzwzzi*>&BS`?1m+hw>zaIS&i z-4$`Hn$HKkJL$3Wr?r=#rYJz7Elk_#kA`L-{R?eQXdQ62fRNV3YrHuv^|Do^343{* zeg9}Kmvs`SEiTX{|NZF}ea3YgiJIpHwe#Caz(91r>zNs;!7sh8f?W_S8V5AUhciNO zMyPW6knpq{z}DR+;2)dn|BvvG_Wy)`Z0jkwoc&+oAFbDWe4GC@{_*qwD*iDBN<7`} zXpfVzKhSl8p2B*)sm9|HFuyBUcZ+|lVEs>vCUt|}&(GwA!*Xc${BDZ4K%vT3foL}Q zDy8>%2K>65ABL!d;7P$=F#f5MF=mD95keJ-?1V@r*_$jM`yegM-Ju)rW>^COKAi2w$5DJ~$h5G0r0^;wTM z$MVyGWDO2AXuiDF0d$7c^M62t6gi?nX0!tuBq=J8M5s#5`tNCwdAmIzU8z^0P-TBV z9W$1h?={E3K;FgDj}@}P#0+aQ=aUM!yq} zBhfu%@j=SAuQi?U7Hif$gm$_D5O@{C_fzT4{mU4;A2u`90#BA$MHMxaOO41c{KcbCU-VN)UsC?yH29I_%Af(K<;UC*7>U zq!aHK6hL%ow+n(3QzPYnz{ODKBhI;y|W`pnV&3Nss4rKA$`-o%p=#Oznzx-Ol zukBRoMOp#Ie4e??Zya@9D^6q7mkH=?9e~~z|BhT)D6EyfzK$q+cSMvrB053?usckG zsM?>^8F)HLd}&Cs-4g3_f4eH4S1}M<6-^!_{7sBtr^(LoJjpl5jEeY6?WIOuIiI!z zO4gNCm)jsF7I!Na3p=<1BsK@0&zenWHUOkpF2=J;Jd;X?En)4L)9gq|F z`*Zg184w2uP#uOrTwiVlNk__b2BIyWJ41qXM(44yv`u>ml_o8uo_n5e=JGc7|}-%bn~o5|>}34Sl2XY(CkcjZKiOba!RZEW@hO=o=+F zK2;g1TsA}Bor-uv23@n(oaKI10*$pr7z+fEUSR_nRTm9XLm<4BrF=g3HzlX0k5ic@ zpQhIs)n-vU6sc)xdf@C-F86G&wgm158~Zw@i6OTq1KCySHmwqbw};Fkygk`z&qM08 z;UDWYlAJzC8|l_o@de2rWre}D?U92y>4~55Y)CW(giSgkHuITklFXn)bGdg-txu|l z-J=ulx}9B88~NVVG_#clx&6-EZf@-(t6aIo+<4&NSfOb!Jo38o9eX|R-cY|B?#RBX zKCos%&e&(~8{Tb8j}o82eNw13qAA!-(Bg2#+#mXmX$v)g5}uApm!R84&tE5(`}pVb zEFDE%ja{>B<2`n-=%gXe)}=oxMPfV{eYl# z9q!ml&M8T;n#XsU751LP2IO+jN+MEY%~g?#iWn}P^`V;u3jiKDgGnd_I$K+dw~Op~7Zk9^d$T?!{ZiPdAQ4K+?4bj2aI+sy|afi}c4XwzUCa`TG!H>>8(F zDyEWX>bsR_Q^;>Co)=X%pwsmefPr2j9a`yp!8{nF!(v+hOp;UMPPFBOi%(zSr-D!N zL7rHRkM5Hbj7ag}QA$KqJVKw1+L`YkL_lHJzipK<`5Gy%O>dquPW(RtNB)x#2;D`| zf(LQ4{d4X%xcF7x)$AW#${Kp*Z#_J`mirtX zdoyh-25PA9j8uiavU72AEpRpdFZWrH;0|K2T$H^~pcYT%VoU(kXTf0=x zj|!v@`n-8@%USJ|!Y`W+BKt2kov=`WOOZD8wjj~*rFS~h1iaP5(KO2o_)JkVvYzIYnta z+>__$GyGv}H?+PT={KDH96|brm3IHi>l15_lZ6khMDdU=e4vi&wr%BFwkSD^nuj__ zMjAyb*8+-0sITd$|ArGwREYSCWAFIuT!*=LJ z=kf#Le1C;LI;q4&GtW=(xU`M(g^4|*xh8(cNxe_xX7PV#*hC(T8E0T3AS!R&RWG_W_lA;o75sQ?iw^?+J~4XD}G^+=iUa-gBN` z`xEB6zSrFM=X1YbulIH@M~!5ctPdiTT$Qkro*rqbjTtuMC}OYEChLR56~_eZbsXli zujK86@mIO7ajc2bT%nXCXamNOP;{1&syDD42Grro)THnYd&X#kWOs^T-xHH7+!5W- z?&9%z_j44u*#qGVpOHpwuZPSsr|cPh#6lWEBC#VUeq{t;!*WIa-akTnxE^l@7j;;cT9zW4AJwA^t$vbya&GDa=^ zRtxnh{KkvZ{b&3?1+}>uz3)Wxy2`-cT+4b03w#BBfw+_MMvDunvcCMC0mcF!MA-Ej zZ>o#zs%_OcwVJFt33X-PnkBE1=i_&1y|?OR{9Cak9}dX2mc){Qyor)-uCI8^I8f4Q z%{e}?W$7%FE>*5{F9s~6FH3es4+OK4PS5N#?855W!ry`vmiN%+?@~-YXTrcs7Vh`_M;Ky;4udAxk0K@MI$R*o0}4;xs&Nm^IcSQt)tN};wny$&t#NZH zhn^M1ZWco&UQ7AqcH;^f7R3lnoNa!UnMk>!ko4@?LQjKyW9Vt7yXV{Y!=rX}Ng_3J z92^fmo{#5P)Ml(>6U$gVg^5QAX2Kkz+B$@_4?Ozztey1%;kZE83=^p@|7b5`R*<+lLd7s|@3yOF=wUlt}-AJn=fSVph z2TEHJ$@sF)<%p0efmTFz%VRgPd7?F(c243>4b1MQ4=1CZ)0E%bq%}cDA@8Zy1qy{A zBZM%D6!{awWVG`Iu9Nt#Z2UU#OfKI_?9E~dSyf1SBaeb>YGRR!d~nKTZqtTBhuEif zgJ_)YLTKrpESjeixdL##c36!B@fBIImvu{TS>@|rc{z8fgQ{Xz$tiH7l;)P#C?93I z>8IHF*@+rvxTv)%UF;$&BXAC>r8{tFb^JnAMRM?0QwF5V&4Zl=!X=LKEHFEo%gj#r zOgO2+9uPZ7{JY$s4@6vFb{E?&slv8P(thnC+lxNKD7kX)Ew<&*b6b{KdnsYE#;zrT zids=?fvM?+=%nbMlGy_p6EHGPw&2t1Ocku!oQ_)?x-~d-CQ$*2zn?!9_x1rz(cwD ze;MY9z`lx^~ zIDs3BOF=EDdoER?W`IK$+s6)JAeT&%{g;%L^ATh&;J82!Ejum-pkcy_e=oVXnI!qG zO7goSHIT=z9S|z_rX@6-UxAylC8wZ1{lQ$-{vCx@uMy}FgXU6i(Xcvu{KT;|6HL|? zpPSVJFc{yHz0X&JgI>_lxhCnT>$}0>{8&nVCSqIIC(wYZlWZ6|CxWmt@Sd4E3+Zwe z;Ta4`SLjF|*f{GU4D=C0<%Ep;w@;z8b!jxi2|d--&3XKlqrzXNyX)NJQl81-u7cSy z;jdVkFMrRD}w%_omPi^FMi@dt;HCWh0mZ?PNVGi_&JtYUSoZLY%lY38lqnJ$A0%;mnQ&hceHzNT1|+Mj*%#6#|5I?eQTI?$wSTdNqMO84Bdd zvG1MB#vh%ZS%8CDySN7O?puZ99U1ax`xyaDT*09>I2kcF`<{>7NM4Sc0gh6 zrKa{eq*kzv(g8JVn-zSj8IG+}mMu}#=q<@?`e*_xWP8cqKYoy|hi_bSHZ~E_O!V9) zdHsIXRh_dEou@XS9m?@{-Kvwjj&O4xFXqAT{o#!K;f(y@jQrt@{NarJ;fw^QD3C`k zJ0n+k^l-;H_0k+0MZ1mWL}jI1JLJ8kHy5*fXwxi8@(y8ZKcp;`6d39CVxJg;AyJ;a z8(v1U`?MY+bJRwydvu1GrfLaTd)Tfo4N@z;d~h$;wH05JE{s*>?d@zP+dRhn=ffig z8biPy4!8j8^p(1I#`XZX-NYI97({P2G1-?RqiR(_SQ|_4A8q7myqN*`tjW>k#H`O zCFHr??+dt8p2?ZDVDkCVP770ZYX|CH=4y}a@L)5;TguKOFXvy-e&Wa-_+4#7n(g1$ zHu&~;pKlGXQ(1y=qEChiIP`yJw>FGwtJhp*^q(uwjX!nSj4m@-e80?KM*O0)t% zZ2-LI-KnNOPSr#&O43AGqkofP(r+Y`>btTtS0ObSk@Yk34~C&m?GLU(Six9QBYD^n zBjUWZcBM(|q@Rev{)gG;gVb{!IRl%#rVg(ut^ z-Rc7>8A*9iU4Hayj6%xA*LzKOW}B$&39?h>?qiOa#e>>$uBI6mT_3xhvPFrT~AOq^SCX++#1%}*^%<$QMTr&_CA*P7qmz9_DA*mC4dvMB8`C<~uA zt?dWV(%DbI2H8y2UYXMYCOO{uZ-#R{_Hb_Eq1!t(y{^KD;ajhhpKGkHVTdV;hNfNc zprG0+%S!_8uwP3XW9KxUbWkVY^)=(LJ3<~aw#PQGSEE}N=XW`3jLd>v1C{XxR7Dtv z$TmEfj~&MXxdys+{oa9kl~i#BHobc$1>>gP#A)VzRkrt_9Dr^mY?I&ni~H%V!5kTh zo;bM85a*w8a%JZ1%;sjfXH?bm2`l}05F6+BKxwTEHlJEN-|h>{&)r*d4$ceG zlW;wuma4;ZRxXzJ5On5-8jWQg$LsVl-MbRI@tq}^Az`DGcDlV6qbp9wZlX|_Rp5;0 zto8El`9LLSnkm|Z4)0Wg2S;s9cFWbm^H?cya47q{q7*A~PU8x+Im=NJ!I4JgK0L0{ zIN5RE=Il@--%V5b#dRn>jSG$p*lpDKcBn+TAmU;Fd zY@&z8+TP-InpgHx*&tMQh2p)RxvxVOJT7h*Trz4hQf+dN%iCEZH-}z$C|nU@TAE#c z`xNwrz0xm5wDxVPRUx^v+)y7~W!Hl2ZJ^G$>mFtqAU|ExoutM!VZ z$p@$J7=<``GTEWUNf25j0mNu*kGh3}%g*aLMI8%F?g@gI7h{~BSj;dBN9)G(4Y9GZ8=E{{a93?vQ;BARmw|)2e^f{>1G1uv&MS(>1S_ukA$jt-OW?xI O;ph>};j}~M*Z&I`WP7v# literal 0 HcmV?d00001 diff --git a/trunk/as0006314/task_01/src/CMakeLists.txt b/trunk/as0006314/task_01/src/CMakeLists.txt new file mode 100644 index 00000000..89cb30b7 --- /dev/null +++ b/trunk/as0006314/task_01/src/CMakeLists.txt @@ -0,0 +1,4 @@ +cmake_minimum_required (VERSION 3.0.0) +project (ModelingTemperature) + +add_executable(MainFile main.cpp) \ No newline at end of file diff --git a/trunk/as0006314/task_01/src/main.cpp b/trunk/as0006314/task_01/src/main.cpp new file mode 100644 index 00000000..1cd8b7da --- /dev/null +++ b/trunk/as0006314/task_01/src/main.cpp @@ -0,0 +1,99 @@ +#include +#include + +// Interface for different models +class TemperatureModel { +public: + virtual ~TemperatureModel() = default; + virtual double calculate(double currentTemp, double heatInput) = 0; +}; + +// Linear temperature control model +class SimpleLinearModel : public TemperatureModel { +private: + double coeff1; + double coeff2; +public: + SimpleLinearModel(double coeff1, double coeff2) : coeff1(coeff1), coeff2(coeff2) {} + + ~SimpleLinearModel() override = default; + + // Calculate temperature based on a linear equation + double calculate(double currentTemp, double heatInput) override { + return coeff1 * currentTemp + coeff2 * heatInput; + } +}; + +// Nonlinear temperature control model +class ComplexNonlinearModel : public TemperatureModel { +private: + double coeff1; + double coeff2; + double coeff3; + double coeff4; + double previousTemp = 0; + double previousHeat = 0; +public: + ComplexNonlinearModel(double coeff1, double coeff2, double coeff3, double coeff4) + : coeff1(coeff1), coeff2(coeff2), coeff3(coeff3), coeff4(coeff4) {} + + ~ComplexNonlinearModel() override = default; + + // Calculate temperature based on a nonlinear equation + double calculate(double currentTemp, double heatInput) override { + double result = coeff1 * currentTemp - coeff2 * pow(previousTemp, 2) + coeff3 * heatInput + coeff4 * sin(previousHeat); + previousTemp = currentTemp; + previousHeat = heatInput; + return result; + } +}; + +// Function to simulate the temperature modeling process +void runSimulation(TemperatureModel& model, double initialTemp, int steps) { + double heatInput; + for (int step = 1; step <= steps; ++step) { + std::cout << "Enter heat flow value (Uw): "; std::cin >> heatInput; + initialTemp = model.calculate(initialTemp, heatInput); + std::cout << "\tStep " << step << "\tTemperature: " << initialTemp << std::endl; + } +} + +int main() { + double initialTemp; + double coeff1, coeff2, coeff3, coeff4; + int numSteps; + + // Input parameters for the linear model + std::cout << "Enter parameters for the linear model" << std::endl; + std::cout << "Parameter a: "; std::cin >> coeff1; + std::cout << "Parameter b: "; std::cin >> coeff2; + + SimpleLinearModel linearModel(coeff1, coeff2); + + // Input parameters for the nonlinear model + std::cout << "Enter parameters for the nonlinear model" << std::endl; + std::cout << "Parameter a: "; std::cin >> coeff1; + std::cout << "Parameter b: "; std::cin >> coeff2; + std::cout << "Parameter c: "; std::cin >> coeff3; + std::cout << "Parameter d: "; std::cin >> coeff4; + + ComplexNonlinearModel nonlinearModel(coeff1, coeff2, coeff3, coeff4); + + std::cout << "Enter initial temperature: "; std::cin >> initialTemp; + + // Simulation for the linear model + std::cout << "Enter the number of simulation steps for the linear model: "; + std::cin >> numSteps; + std::cout << "\n--- Simulation for the linear model ---" << std::endl; + runSimulation(linearModel, initialTemp, numSteps); + + std::cout << std::endl; + + // Simulation for the nonlinear model + std::cout << "Enter the number of simulation steps for the nonlinear model: "; + std::cin >> numSteps; + std::cout << "\n--- Simulation for the nonlinear model ---" << std::endl; + runSimulation(nonlinearModel, initialTemp, numSteps); + + return 0; +} From 039469d1135a86dffc8f41ed00da64e0c653c1ee Mon Sep 17 00:00:00 2001 From: vladkuzhyr <77207255+XD-cods@users.noreply.github.com> Date: Sat, 28 Sep 2024 09:38:13 +0300 Subject: [PATCH 2/3] [task_01] Done task_01 (#13) * The assignment is complete. Create file main.cpp and readme.md, update gitignore * update folder name * Delete images and create formuls in task_01 readme.md * update readme md * update gitignore --------- Co-authored-by: Yana Sitkovets --- .gitignore | 1 + readme.md | 2 +- trunk/as0006413/task_01/doc/readme.md | 154 +++++++++++++++++++++ trunk/as0006413/task_01/src/CMakeLists.txt | 5 + trunk/as0006413/task_01/src/main.cpp | 92 ++++++++++++ 5 files changed, 253 insertions(+), 1 deletion(-) create mode 100644 trunk/as0006413/task_01/doc/readme.md create mode 100644 trunk/as0006413/task_01/src/CMakeLists.txt create mode 100644 trunk/as0006413/task_01/src/main.cpp diff --git a/.gitignore b/.gitignore index 2cd63d8b..a2f18293 100644 --- a/.gitignore +++ b/.gitignore @@ -33,6 +33,7 @@ # Directories to ignore .vs/ +.vscode out/ build/ diff --git a/readme.md b/readme.md index 9f5231db..b5f2158e 100644 --- a/readme.md +++ b/readme.md @@ -62,7 +62,7 @@ |10|Игнаткевич Кирилл Сергеевич||||||||||| |11|Кашпир Дмитрий Русланович||||||||||| |12|Котковец Кирилл Викторович||||||||||| -|13|Кужир Владислав Витальевич||||||||||| +|13|Кужир Владислав Витальевич|[as0006313](./trunk/as0006413/)|:white_check_mark:||||||||| |14|Немирович Дмитрий Александрович||||||||||| |15|Попов Алексей Сергеевич||||||||||| |16|Рабченя Максим Юрьевич||||||||||| diff --git a/trunk/as0006413/task_01/doc/readme.md b/trunk/as0006413/task_01/doc/readme.md new file mode 100644 index 00000000..3f4a8801 --- /dev/null +++ b/trunk/as0006413/task_01/doc/readme.md @@ -0,0 +1,154 @@ + Ministry of Education of the Republic of Belarus + + Educational Institution + + “Brest State Technical University” + + Department of Information and Intelligent Technologies + + + + Laboratory work №1 + + On the discipline “Theory and methods of automatic control” + + Topic: “Temperature modeling of an object” + + + + Performed by: + + Student of the 3rd course + + Group AS-64 + + Kuzhyr U. V. + + Supervised by: + + Sitkovets J. S. + + + Brest 2024 + + + + +## Task: + +Let's get some object to be controlled. We want to control its temperature, which can be described by this differential equation: + + +$$ +\Large\frac{dy(\tau)}{d\tau}=\frac{u(\tau)}{C}+\frac{Y_0-y(\tau)}{RC}(1) + $$ + +where τ – time; y ( τ ) – input temperature; u ( τ ) – input warm; Y 0 – room temperature; C , R C – some constants. + +After transformation we get these linear (2) and nonlinear (3) models: + +$$ +\Large y_{\tau+1}=ay_{\tau}+bu_{\tau}(2) +$$ + +$$ +\Large y_{\tau+1}=ay_{\tau}-by_{\tau-1}^2+cu_{\tau}+d\sin(u_{\tau-1})(3) +$$ + +where τ – time discrete moments ( 1 , 2 , 3 … n ); a , b , c , d – some constants. + +Task is to write program (С++), which simulates this object temperature. +Example of program output: + +``` + +Choose an option (0 - exit, 1 - linear model, 2 - nonlinear model): Input choice: 1 +Input A: 12 +Input B: 2 +Input current temperature: 36 +Input heat input: 2 +Input simulation time: 10 +TIME Linear Model +========================= +1 436 +2 5236 +3 62836 +4 754036 +5 9.04844e+06 +6 1.08581e+08 +7 1.30297e+09 +8 1.56357e+10 +9 1.87628e+11 +10 2.25154e+12 + +Choose an option (0 - exit, 1 - linear model, 2 - nonlinear model): Input choice: 2 +Input A: 3 +Input B: 15 +Input C: 20 +Input D: 25 +Input current temperature: 27 +Input heat input: 37 +Input simulation time: 20 +TIME Nonlinear Model +1 804.912 +2 -7796.35 +3 -9.7409e+06 +4 -9.40969e+08 +5 -1.42328e+15 +6 -1.32856e+19 +7 -3.03859e+31 +8 -2.64761e+39 +PS C:\Users\user\Desktop\TMAU-2024\build\trunk\as006417\task_01\src> ./lab_01.exe + +Choose an option (0 - exit, 1 - linear model, 2 - nonlinear model): Input choice: 1 +Input A: 1.1 +Input B: 0.5 +Input current temperature: 25 +Input heat input: 10 +Input simulation time: 5 +TIME Linear Model +========================= +1 32.5 +2 40.75 +3 49.825 +4 59.8075 +5 70.7883 + +Choose an option (0 - exit, 1 - linear model, 2 - nonlinear model): Input choice: 2 +Input A: 1.2 +Input B: 0.1 +Input C: 0.3 +Input D: 0.05 +Input current temperature: 30 +Input heat input: 15 +Input simulation time: 5 +TIME Nonlinear Model +========================= +1 40.5325 +2 -36.8285 +3 -203.95 +4 -375.841 +``` + +## Input erroe handling + +``` +Choose an option (0 - exit, 1 - linear model, 2 - nonlinear model): Input choice: p + +*** Incorrect input *** +Input choice: 5 +*** Invalid input *** +``` + +## Exit the program +``` +Choose an option (0 - exit, 1 - linear model, 2 - nonlinear model): Input choice: 0 +PS C:\Users\user\Desktop\TMAU-2024\build\trunk\as006417\task_01\src> ^C +``` + +The source code + +The source code is located in the src folder. + + CMakeLists.txt - this is a file that contains CMake commands to control the project build process. + main.cpp - source file, contains the main function that controls the program execution. diff --git a/trunk/as0006413/task_01/src/CMakeLists.txt b/trunk/as0006413/task_01/src/CMakeLists.txt new file mode 100644 index 00000000..c5b94f2c --- /dev/null +++ b/trunk/as0006413/task_01/src/CMakeLists.txt @@ -0,0 +1,5 @@ +cmake_minimum_required (VERSION 3.0.0) + +project (lab_01) + +add_executable(${PROJECT_NAME} main.cpp) \ No newline at end of file diff --git a/trunk/as0006413/task_01/src/main.cpp b/trunk/as0006413/task_01/src/main.cpp new file mode 100644 index 00000000..bf8ddc23 --- /dev/null +++ b/trunk/as0006413/task_01/src/main.cpp @@ -0,0 +1,92 @@ +#include +#include +#include +#include + +using namespace std; + +void run_linear_model(); +void run_nonlinear_model(); +bool get_choice(int &choice); + +void get_input(double &value, const string &prompt) { + cout << prompt << ": "; + while (!(cin >> value)) { + cin.clear(); + cin.ignore(numeric_limits::max(), '\n'); + cout << "Invalid input! Try again.\n" << prompt << ": "; + } +} + +void get_input(int &value, const string &prompt) { + cout << prompt << ": "; + while (!(cin >> value)) { + cin.clear(); + cin.ignore(numeric_limits::max(), '\n'); + cout << "Invalid input! Try again.\n" << prompt << ": "; + } +} + +void display_results(const map &temps, const string &model_type) { + cout << "\n--- " << model_type << " Results ---\n"; + for (const auto &entry : temps) { + cout << "Step " << entry.first << ": Temperature = " << entry.second << endl; + } +} + +void run_linear_model() { + double A, B, temp, heat; + int steps; + get_input(A, "Enter coefficient A"); + get_input(B, "Enter coefficient B"); + get_input(temp, "Enter initial temperature"); + get_input(heat, "Enter heat input"); + get_input(steps, "Enter number of steps"); + + map temps; + for (int i = 1; i <= steps; ++i) { + temp = A * temp + B * heat; + temps[i] = temp; + } + display_results(temps, "Linear Model"); +} + +void run_nonlinear_model() { + double A, B, C, D, temp, heat; + int steps; + get_input(A, "Enter coefficient A"); + get_input(B, "Enter coefficient B"); + get_input(C, "Enter coefficient C"); + get_input(D, "Enter coefficient D"); + get_input(temp, "Enter initial temperature"); + get_input(heat, "Enter heat input"); + get_input(steps, "Enter number of steps"); + + map temps; + double prev_temp = 0; + for (int i = 1; i <= steps; ++i) { + double new_temp = A * temp - B * pow(prev_temp, 2) + C * heat + D * sin(heat); + prev_temp = temp; + temp = new_temp; + temps[i] = temp; + } + display_results(temps, "Nonlinear Model"); +} + +bool get_choice(int &choice) { + get_input(choice, "Choose option (0 - Exit, 1 - Linear, 2 - Nonlinear)"); + return choice >= 0 && choice <= 2; +} + +int main() { + void (*models[])() = { []() { exit(0); }, run_linear_model, run_nonlinear_model }; + int choice; + + while (true) { + if (!get_choice(choice)) { + cout << "Invalid choice! Try again.\n"; + } else { + models[choice](); + } + } +} From d6c01ae4a841e9538d2a4c661c009cec4afce14f Mon Sep 17 00:00:00 2001 From: Yarmola Aleksandr <85304472+alexsandro007@users.noreply.github.com> Date: Sat, 28 Sep 2024 12:18:01 +0300 Subject: [PATCH 3/3] [task_01] Add solution (#20) * create trunk * Update main.cpp * edit readme * edit 2 readme --- readme.md | 2 +- trunk/as0006325/task_01/doc/readme.md | 63 ++++++++++++++++++++++ trunk/as0006325/task_01/src/CMakeLists.txt | 4 ++ trunk/as0006325/task_01/src/main.cpp | 57 ++++++++++++++++++++ 4 files changed, 125 insertions(+), 1 deletion(-) create mode 100644 trunk/as0006325/task_01/doc/readme.md create mode 100644 trunk/as0006325/task_01/src/CMakeLists.txt create mode 100644 trunk/as0006325/task_01/src/main.cpp diff --git a/readme.md b/readme.md index b5f2158e..2b708dd3 100644 --- a/readme.md +++ b/readme.md @@ -43,7 +43,7 @@ |21|Стельмашук Иван||||||||||| |22|Тунчик Антон||||||||||| |23|Филипчук Дмитрий||||||||||| -|24|Ярмола Александр||||||||||| +|24|Ярмола Александр|[as0006325](./trunk/as0006325/)|:white_check_mark:|:white_check_mark:|||||||| |25|Ярмолович Александр||||||||||| ## Группа АС-64 diff --git a/trunk/as0006325/task_01/doc/readme.md b/trunk/as0006325/task_01/doc/readme.md new file mode 100644 index 00000000..1002a85c --- /dev/null +++ b/trunk/as0006325/task_01/doc/readme.md @@ -0,0 +1,63 @@ +

Министерство образования Республики Беларусь

+

Учреждение образования

+

“Брестский Государственный технический университет”

+

Кафедра ИИТ

+






+

Лабораторная работа №1

+

По дисциплине “Теория и методы автоматического управления”

+

Тема: “Моделирования температуры объекта”

+




+

Выполнил:

+

Студент 3 курса

+

Группы АС-63

+

Ярмола А. О.

+

Проверила:

+

Ситковец Я. С.

+




+

Брест 2024

+ +--- + +**Задание**: + +Let's get some object to be controlled. We want to control its temperature, which can be described by this differential equation: + +$$\Large\frac{dy(\tau)}{d\tau}=\frac{u(\tau)}{C}+\frac{Y_0-y(\tau)}{RC} $$ (1) + +where $\tau$ – time; $y(\tau)$ – input temperature; $u(\tau)$ – input warm; $Y_0$ – room temperature; $C,RC$ – some constants. + +After transformation we get these linear (2) and nonlinear (3) models: + +$$\Large y_{\tau+1}=ay_{\tau}+bu_{\tau}$$ (2) + +$$\Large y_{\tau+1}=ay_{\tau}-by_{\tau-1}^2+cu_{\tau}+d\sin(u_{\tau-1})$$ (3) + +where $\tau$ – time discrete moments ($1,2,3{\dots}n$); $a,b,c,d$ – some constants. + +Task is to write program (**С++**), which simulates this object temperature. + +Пример вывода программы: + +``` bash +Enter the value for constant a: 1 +Enter the value for constant b: 2 +Enter the value for constant c: 3 +Enter the value for constant d: 4 +Enter the initial value for current temperature, y: 10 +Enter the initial control value, u: 5 +Enter the number of iterations, steps: 5 + +Linear model simulation: +Step 1: y = 20 +Step 2: y = 30 +Step 3: y = 40 +Step 4: y = 50 +Step 5: y = 60 + +Nonlinear model simulation: +Step 1: y = 25 +Step 2: y = -163.836 +Step 3: y = -1402.67 +Step 4: y = -55075.8 +Step 5: y = -3.99004e+06 +``` \ No newline at end of file diff --git a/trunk/as0006325/task_01/src/CMakeLists.txt b/trunk/as0006325/task_01/src/CMakeLists.txt new file mode 100644 index 00000000..f9d44bc0 --- /dev/null +++ b/trunk/as0006325/task_01/src/CMakeLists.txt @@ -0,0 +1,4 @@ +cmake_minimum_required(VERSION 3.10) +project(Task01) + +add_executable(Task01 main.cpp) \ No newline at end of file diff --git a/trunk/as0006325/task_01/src/main.cpp b/trunk/as0006325/task_01/src/main.cpp new file mode 100644 index 00000000..da165283 --- /dev/null +++ b/trunk/as0006325/task_01/src/main.cpp @@ -0,0 +1,57 @@ +#include +#include + +using namespace std; + +// Function for linear model +void linearModel(double y, double u, double a, double b, int steps) { + for (int i = 1; i <= steps; i++) { + double y_next = a * y + b * u; + cout << "Step " << i << ": y = " << y_next << endl; + + y = y_next; + } +} + +// Function for nonlinear model +void nonlinearModel(double y, double u, double a, double b, double c, double d, int steps) { + double y_prev = 0; + double u_prev = 0; + + for (int i = 1; i <= steps; i++) { + double y_next = a * y - b * y_prev * y_prev + c * u + d * sin(u_prev); + cout << "Step " << i << ": y = " << y_next << endl; + + y_prev = y; // Update the previous temperature value + u_prev = u; // Update the previous control value + + y = y_next; // Update the current temperature value + } +} + +int main() { + double a, b, c, d; // Constants + double y; // Current temperature + double u; // Current heat + int steps; // Number of modeling steps + + cout << "Enter the value for constant a: "; cin >> a; + cout << "Enter the value for constant b: "; cin >> b; + cout << "Enter the value for constant c: "; cin >> c; + cout << "Enter the value for constant d: "; cin >> d; + + cout << "Enter the initial value for current temperature, y: "; cin >> y; + cout << "Enter the initial control value, u: "; cin >> u; + + cout << "Enter the number of iterations, steps: "; cin >> steps; + + // Linear model + cout << "\nLinear model simulation:\n"; + linearModel(y, u, a, b, steps); + + // Nonlinear model + cout << "\nNonlinear model simulation:\n"; + nonlinearModel(y, u, a, b, c, d, steps); + + return 0; +}