From 5709c332195e5f77f3c54e351ee31440ae6ef58e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=88=98=E5=BD=A9=E6=9C=88?= Date: Wed, 14 Jun 2023 14:40:28 +0800 Subject: [PATCH] 123 --- vscode.cpp | 372 +++++++++++++++++++++++++++++++++++++++++++++++++++++ vscode.exe | Bin 0 -> 62359 bytes 2 files changed, 372 insertions(+) create mode 100644 vscode.cpp create mode 100644 vscode.exe diff --git a/vscode.cpp b/vscode.cpp new file mode 100644 index 0000000..ff14ede --- /dev/null +++ b/vscode.cpp @@ -0,0 +1,372 @@ +#define _CRT_SECURE_NO_WARNINGS +#include +#include +#include +#define TRUE 1 +#define FALSE 0 +#define OK 1 +#define ERROR 0 +#define INFEASIBLE -1 +#define OVERFLOW -2 +typedef int Status; +typedef struct +{ +int OccurTime;//事件发生时刻 +int NType;//事件类型,0表示到达事件,1-4表示四个窗口的离开事件 +}Event, ElemType; + +typedef struct LNode +{ +ElemType data; +struct LNode* next; +}LNode, * LinkList; + +typedef LinkList EventList; +typedef struct +{ +int ArrivalTime;//到达时刻 +int Duration;//办理事务所需事件 +}QElemType; + +typedef struct QNode +{ +QElemType data; +struct QNode* next; +}QNode, * QueuePtr; + +typedef struct +{ +QueuePtr front;//队头指针 +QueuePtr rear;//队尾指针 +}LinkQueue; + + +EventList ev;//事件表 +Event en;//事件 +LinkQueue q[5];//四个客户队列 +QElemType customer;//客户记录 +int TotalTime, CustomerNum, CloseTime; +void Bank_Simulation(int CloseTime);//银行业务模拟,统计一天内客户在银行逗留的平均时间 +int cmp(Event a, Event b);//比较事件发生先后 +void OpenForDay();//银行开门 +void OrderInsert(EventList L, Event en, int(*cmp)(Event a, Event b));//插入事件 +void CustomerArrived();//客户进门 +void CustomerDepature();//客户离开 +int Minimum(LinkQueue Q[5]);//求长度最短队列 +Status InitList(LinkList& L);//链表初始化 +Status ListInsert_L(LinkList& L, int i, ElemType e);//在第i个位置之前插入元素e +Status ListEmpty(LinkList L);//判断链表是否为空 +Status DelFirst(LinkList L, LNode*& q);//删除链表中第一个结点并以q返回 +LNode* GetHead(LinkList L);//返回链表头结点 +ElemType GetCurElem(LNode* p);//已知p指向线性链表中的一个结点,返回p所指结点中元素的值 +void PrintEventList();//打印事件链表 +Status ListTraverse(LinkList& L);//遍历链表  +Status InitQueue(LinkQueue& Q);//链队列的初始化 +Status EnQueue(LinkQueue& Q, QElemType e);//入队 +Status DeQueue(LinkQueue& Q, QElemType& e);//出队 +int QueueLength(LinkQueue Q);//返回队列的长度 +Status GetHead(LinkQueue Q, QElemType& e);//获取队头元素 注:由于参数个数不同,发生函数重载 +Status QueueEmpty(LinkQueue Q);//判断队列是否为空 +void PrintQueue();//打印队列 +Status QueueTraverse(LinkQueue Q);//遍历队列Q  + +/* +系统每次随机生成的是 +1)当前顾客顾客的柜台被服务时间 +2)当前顾客和下一个顾客到达的间隔时间 +记住这2点就便于理解整个代码 +每个顾客在银行的等待时间取决于队列里前一个节点的离开时间,而不是自己的到达时间+服务时间。*/ + +int main() +{ +srand((unsigned)time(NULL));//设定随机数种子 +printf("请输入银行的营业时间(min):"); +scanf("%d", &CloseTime); +Bank_Simulation(CloseTime); +return 0; +} +void Bank_Simulation(int CloseTime)//银行业务模拟,统计一天内客户在银行逗留的平均时间 +{ +OpenForDay();//开始营业 +LNode* p; +while (!ListEmpty(ev)) +{ +DelFirst(GetHead(ev), p); +printf("********action********\n"); +en = GetCurElem(p); +if (en.NType == 0) +{ +CustomerArrived(); +} +else +{ +CustomerDepature(); +} +PrintQueue(); +PrintEventList(); +} +printf("The Average Time is %f\n", (float)TotalTime / CustomerNum); +} +int cmp(Event a, Event b)//比较事件发生先后 +{ +if (a.OccurTime > b.OccurTime) return 1; +if (a.OccurTime = b.OccurTime) return 0; +if (a.OccurTime < b.OccurTime) return -1; +} + +void OpenForDay()//银行开门 +//初始化操作 +{ +TotalTime = 0;//初始化累计时间为0 +CustomerNum = 0;//初始化客户数为0 +InitList(ev);//初始化事件链表为空表 +en.OccurTime = 0; +en.NType = 0;//设定第一个客户到达事件 +OrderInsert(ev, en, cmp); +for (int i = 1; i <= 4; i++) +{ +InitQueue(q[i]);//将四个银行窗口队列初始化 +} +} + +void OrderInsert(EventList L, Event en, int(*cmp)(Event a, Event b))//插入事件 +//事件插入函数,将不同事件按发生时间递增排序 +{ +LNode* p = L; +int i = 1; +while (p->next && cmp(en, p->next->data) > 0)//找到事件发生时间所在事件链表中的位置 +{ +p = p->next; +i++; +} +ListInsert_L(ev, i, en);//插入该事件 +} + +void CustomerArrived()//客户进门 +//处理客户到达事件,en.NType=0 +{ +CustomerNum++; +int durtime = rand() % 30 + 1;//客户处理事务时间 +int intertime = rand() % 8;//下一个客户到达的时间间隔 +int t = en.OccurTime + intertime;//下一个客户到达的时刻 +if (t < CloseTime)//如果他在营业时间内进来 +{ +printf("一个新客户在银行营业%2dmin后进来,办理业务花费了%2dmin,下一个客户过了%2dmin后进来\n", en.OccurTime, durtime, intertime); +OrderInsert(ev, { t, 0 }, cmp);//插入客户进门事件,NType=0为到达事件 +} + +int i = Minimum(q);//客户找最短队开始排队 +EnQueue(q[i], { en.OccurTime, durtime }); +if (QueueLength(q[i]) == 1) +{ +OrderInsert(ev, { en.OccurTime + durtime,i }, cmp);//队列长度为1时,设定一个离开事件 +} +} + + +void CustomerDepature()//客户离开 +{ +int i = en.NType; +DeQueue(q[i], customer);//删除第i队列的排头客户 +TotalTime += en.OccurTime - customer.ArrivalTime;//累计客户逗留时间 +if (!QueueEmpty(q[i])) { +GetHead(q[i], customer); +OrderInsert(ev, { en.OccurTime + customer.Duration, i }, cmp);//插入事件 +} +} + + +int Minimum(LinkQueue Q[5])//求长度最短队列 +{ +int minLength = QueueLength(Q[1]); +int i = 1; +for (int j = 2; j < 5; j++) +{ +if (minLength > QueueLength(Q[j])) +{ +minLength = QueueLength(Q[j]); +i = j; +} +} +return i; +} + + +Status InitList(LinkList& L)//链表初始化 +{ +L = (LinkList)malloc(sizeof(LNode)); +if (!L) +{ +exit(OVERFLOW); +} +L->next = NULL; +return OK; +} + +Status ListInsert_L(LinkList& L, int i, ElemType e)//在第i个位置之前插入元素e +{ +LinkList p = L; +int j = 0; +while (p && j < i - 1)//注意是i-1,因为要找被插入元素的前一个元素 +{ +p = p->next; +j++; +} +if (!p || j > i - 1) +{ +return ERROR; +} +LinkList s = (LinkList)malloc(sizeof(LNode)); +if (!s) +{ +exit(OVERFLOW); +} +s->data = e; +s->next = p->next; +p->next = s; +return OK; +} +Status ListEmpty(LinkList L)//判断链表是否为空 +//空表:头指针和头结点仍然存在,但头结点指向NULL +{ +if (L->next) +{ +return FALSE; +} +else +{ +return TRUE; +} +} +Status DelFirst(LinkList L, LNode*& q)//删除链表中第一个结点并以q返回 +{ +if (!L->next) +{ +return ERROR; +} +q = L->next; +L->next = q->next; +return OK; +} +LNode* GetHead(LinkList L)//返回链表头结点 +{ +return L; +} + +ElemType GetCurElem(LNode* p)//已知p指向线性链表中的一个结点,返回p所指结点中元素的值 +{ +return p->data; +} + +void PrintEventList()//打印事件链表  +{ +printf("Current Eventlist is:\n"); +ListTraverse(ev); +} +Status ListTraverse(LinkList& L) //遍历链表   +{ +LNode* p = L->next; +if (!p) { +printf("List is empty.\n"); +return ERROR; +} + +while (p != NULL) { +printf("OccurTime:%d,Event Type:%d\n", p->data.OccurTime, p->data.NType); +p = p->next; +} +printf("\n"); +return OK; +} + + + +Status InitQueue(LinkQueue& Q)//链队列的初始化 +{ +Q.front = Q.rear = (QueuePtr)malloc(sizeof(QNode)); +if (!Q.front) +{ +exit(OVERFLOW); +} +Q.front->next = NULL; +return OK; +} +Status EnQueue(LinkQueue& Q, QElemType e)//入队 +{ +QNode* p = (QueuePtr)malloc(sizeof(QNode)); +if (!p) +{ +exit(OVERFLOW); +} +p->data = e; +p->next = NULL; +Q.rear->next = p; +Q.rear = p; +return OK; +} +Status DeQueue(LinkQueue& Q, QElemType& e)//出队 +{ +if (Q.front == Q.rear) +{ +return ERROR; +} +QNode* p = Q.front->next; +e = p->data; +Q.front->next = p->next; +if (Q.rear == p)//注意这里要考虑到,当队列中最后一个元素被删后,队列尾指针也丢失了,因此需对队尾指针重新复制(指向头结点) +{ +Q.rear = Q.front; +} +free(p); +return OK; +} + +int QueueLength(LinkQueue Q)//返回队列的长度 +{ +int count = 0; +QNode* p = Q.front->next; +while (p) { +p = p->next; +count++; +} +return count; +} + +Status GetHead(LinkQueue Q, QElemType& e)//获取队头元素 +{ +if (Q.front == Q.rear) +{ return ERROR;} +e = Q.front->next->data; +} +Status QueueEmpty(LinkQueue Q)//判断队列是否为空 +{ +if (Q.front == Q.rear) +{ +return TRUE; +} +return FALSE; +} +void PrintQueue()//打印队列 +{ +//打印当前队列   +int i; +for (i = 1; i <= 4; i++) { +printf("窗口 %d 有 %d 个客户:", i, QueueLength(q[i])); +QueueTraverse(q[i]); +} +printf("\n"); +} +Status QueueTraverse(LinkQueue Q)//遍历队列Q   +{ +QNode* p = Q.front->next; +if (!p) { +printf("--Is empty.\n"); +return ERROR; +} +while (p) { +printf("(到达时刻 %d min 办理业务需要花费 %d min) ", p->data.ArrivalTime, p->data.Duration); +p = p->next; +} +printf("\n"); +return OK; +} diff --git a/vscode.exe b/vscode.exe new file mode 100644 index 0000000000000000000000000000000000000000..5c98b10e913ad2d1b287a6b79fb84e4b6530a7c5 GIT binary patch literal 62359 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

j3DXz|w0aUVJehup3axE5?RTtU_Ki=IXwS z8ZXpfy!BtOh&ged2ICU`2C($AqX?e=Km@4yQ-8kU>tD2dBX!Jw;` zEGI7Wztct{+BcJk7;lo7*6~~==AeV9I{9$lv9Xh1lIypWeXU^kbmBbmGzn`HG2Zl- ztq~-~=0`ZmIWwq?1?ziCo;x{<3-I0eyRq&`+19-1O}X+DC%sraUgk|!C4G@f574~Z|A>2(QU<`8=GH+6RQ&u1XMcp=Gd58xk9k?H!=2{{In(?$ed`v*f@VV zwJ1gl6=@>HdVa?m@ig)}JdOOpjy3#gWG=kXOH8SLd%>(MoIV2NME`dI?T|a~G1oNQ z^I9<{U`nh5n>8@qyMIJ&-6-foGZXy#1T= z3y_)C3eQ#aS3rUstS4?eQgm_-mlv~>cg>&U?{OW-g*yBY_9y9onnwOjyzEV4^}wHD zY5M-m1Vc#ApFyI)3?xdv529d^=#o!uH9NJsgiyc3RPCJSUHpTpem5)dpfHV06fbr4 z`yt!BPr*9FMS6S)`yBEm55qp#$*uW8>|vvQ(4~@Bg8x(FJ~W<@JSO*f(k8#ld(1mc z0M+`|UPbMPARvG0T!p93KHK3PSDXFZy5m-|=?ENK0moJ-$7U78mnhM_{SCu#ERTyf zo$qmAj6t{jmY24XaH)6Aa3T$t8hRM!pOpQnMd1IOCcl^BM~2x9Z*o}ldl6;cJohkx zbo;>mNos%A_J_&6(_nx2!B0v&Rn^~+Ul9MXtKY?A1NJ{`vVR5Q6ZRj1{VQPqL$TT3 zzQaXTYkt7vGgVRer{P2C%T;{%QkVW`A>T&8pzo!KsBW%YTWxz$MZ|eNGQaj20TmY~ zT&dmx1Rz4;7ZA}uP09D1knbrEVz(BtThrfQmhS_Q?^t#6SZszH0{YerVY31OeQTae zyo}upvBNsfXM6GFOxhoCU(7>T1s7dr5K$ea9b$y4b7 zPNUJU%7M%Ge|WeMr;Xmz*nDB7(oUPdC~f|FXnj|nzL4-~r3Xsb+2V8&L>3Anct&Al zX{N^~rg2F=K@0Uvl1KT{pB{T?Bq2Yf<9kv36B_VsX~|QxRfM1p`d6M#$+lWcHGZ1o z-7tTrS_-4?gSaeGwn zdWDy=<1<{T*@fv}qgtDm>4`grcsF(i+UFsB7Ji%1#K^A*<@BF1lW~4oI=` zH!Xl3+=2LgF?QE(g$U|O7E2Atuk$u z=?0mulj$m%UMbTHWI9czZ{o;eVBo~Hzc4M4uwdfX@iOK_v}%`vYk+q$e-jqSUp09g zP+S-dfl<_SW!C4HnCTT~lzTJE!x`oLJ4E{enMPNN@;;g7uMlOYEDy-CL#An`sDDGI zBQm8}?~UT)uP#x~Wa@V}Fn@gmb4Yqjr6w)^-z}uS{#g3kpMG`M-V>jGG=2Y`*YDYx z9@zWJfqP#2?4u_>yT7O-+`0I72k&8vTG&;2R@Ph&b_bwQ*$MV$rL+_ocu6ZJ6uT-QOfs=;JUdapJz-^n*KuDzbjDLmCH3 z?*bW*I>?;cC+c%$ddUt^E+0HYJ4wYAYfE&HF~uMef>aS5?hord4-` zJKGYGU@RQp?kK9ST8}z@)xx!{k*;lySg;cwmd$H7cqYBw%s{$MN~4n`c2uI_F} zSF58t+}0Ux4dc5X%^^pT-&b2-&nY!@#V5pS(6I2)d4y9e)SZZs(;V@xE=PAqFcLwI ze~}~KLr*S`nyBc=cwshO7Qu-20oZ`DR7>*=j zp{qrRyINWx5kfxdXb*NfI=dX<4s?a3-67shn8UFl9E&G{k?Rtn*mm9+vbVwqh?Ond zS4fBx<|W1iIy%H58rPHQWvE! z;>5d}yCM$wu$usjT9&DfIa#|c;W+$wYsiRC(gJK{0_mZ9S0YZ{=RvZ>5f8@NLUC9Q zRZAS(!=XqE72psDteybjs1n5S0?unQ?q~7gQi6GLQ~oQsm0gqPIum zY|z|3KcifbQ7+0TJ2Ln=oMw7W8TCU&=6c6MbD3q}udl4U+ELU~zACV)bm_Km=gJl6 zI_*nip{*;HI4Tlhj00P?JJ1W)Z(O<&y$~_|A#{huj*=D2RxB%4W_>4}ss(UXV#7_} z>B>jC49}i(kS|8M9rtYHdyx*~`*-t@r}VeD3z4Vq$RrFUL{uYDm;>4o^X(Zk47`a_)K zA3&bcKjI^F$B?J=v5Ogd9(hWqzZ+l4LY~scaKAxtq(8+yiae!PTms#15ornXxyVym zfjb|0O1p3uAW!KC?n2}#^@*? zuJCRo6eh7I#(vRYP82MhL zHXK^)M?N3vT--y*qc5_8D;Rr%@<^}1{SxxUNI!@BIP!x?vv5H92J-nxyNX~dW0xS`gmf5pA@Y>I|L+(pMc#?@5N;>Ikse+G+fW|qY1|FS zv!&1h_a@{i{Vndz$d4e6E@P}6c}l;CJA(W^q*vf6cNF*o&~N6|e#F*k`c0xF13udkgk)+z%s<{RVpr z_d(>bS74Xneg=8$A6Oag=aF|JZO8p0^4Pzyy||Afk39@~4R;#(5u{g^B1Im1arP?i zQRLt5%LazF92?82km(krGpDhcE2b6On{uMr{;Z)Hvfc?93IF-IjJ=MVd{1d+{VBkv zqfb*kr5b(WMR#ttJ$FS;w#`3IzD~k(vh0-OxC%z?RDRAh&z$VsJ93J%o3f(7o0a34 zl|Ai_tYXhF;BGUC!Amyy59tMHTp0fcbSpI7jlTUUjM;y$!+HQ)@@b6M2G~Bp z+&ncgJRh)nO4>7Yyx%JfN@4$D;0dr_8O&Vaum%Wugv7x6>aJegi5Qvt=< zi!2vsz~Aw^u+ZO{-!HPcLy=HCREbk8oIpkDeq;RIHZGlgyn+KXdsT`UUsc0hdXgF6>bScgLrcdLMW!&WD^T+>59eK^-M_D z#^{VQ7!h6ylKkPWErHfVXS4ECb5{p<3(FRkY89m%l)B?B;Vzg72%Ukgt@%UD*Sk@AO#W0qm4c)dJ_<=)r1}&I%YcL)%p|Td>{devR9`g9o%%cZ9&U9zc;lX00vIjKi zw%{Sa+KhwlRAaNg&nJzM6LpFchv zXG|O)=T76c%cS#8`5gN;SO;^90^Jl%}t*X>?SUtd`GU9ZNgniO$e9&0Vq33KW8|=Jsnk@xg=6 zpkry9`m05ix?4NDmSPi#Po*qv^;cEm{}w#yrOyZ~jfA(fH8%qSl}UCM#<0Nlv=tHTOuK_&ef`=3^}SQCkLOF3C3A&?kWg7BP&Npr{N1Z>_QGI zWQXbDHyIF{*p_f}sGI#3>Rn=s&w<@Hp{}8^#uKQo^m^QlK93RRchxmixqN{-&-#Gd z->Sr+8TVsr=i|RH+$k1#M1RMq=^RSl#}J)5T2DDl_%Tpf}(GzH_r)p^HVR?GB z$6sZs&ey9+RiDR&Hs|X=Ki&-ysODy3@6y3U--m!fEt{)@-L;Js3Or8-E9_c7o3BF^ zGN2deP`}F^sQ1>^AqpC6DjTY5YuJV6+B#1|V_i)>E6~B~Y8&eUA83T1d{xy|4eTPl z3YKoz=&FOPb)Iz|IGHR{;i>VgtExngU>EDCzDmE0fOqS_Iu8V@u60+fyBttlC zs+vl-r;=T&L#t{UJnKDm0rxtz@Nfszv&;1QT7N^pwZ4&Eu7g|~YOCC2cOL65x4RDS zUe(yt&1k*0li@ZT0L*9iPlr z@A9r=?=izFeGP6_WQJ8Vu*Et=C}bWPDypm4RR$FI2O2SYG}fRS_}Jg+6}1=@tJd+6 z3Qnu9VN3KnX{dD=4?S$D4)<*GQ=fNL)U#zel;rnTap$h9g2|SftLhC^#pbGY>*_on zKP%Cpo=pvb^5T`{t4T17JT(pVY=vIE9x+-chV1%)81$;3)=C|NfQ>cE{=QlSDgvyk z8c|(35f(g%zM#;`%xHdB<+bpnj0>`qhPld&*>Jtze+jB3^7HRI)Gua zVrz9w@+oA1A^{`DHREEa>5IKjujZZ9U+-;PSHa$|gGFSOR$PxEoBC7LCK$@8*Aw6M zt_Cj*vVx|rdgdCpvQ$)7j91Ajb*SK1vZ8!lwJT8R#fNt5nLD$3McFDtwMVbsu)@6# zJ>A{N$6PU5)&;y6ko<18PRDa?*aR9A#ohWz5Y3_IwO|@1^(s>(RMO(`1Ew01M8)#8 zmKr`HQ4m&nDq(t`1wlxpV^o_k%1SWa(x9dz)L0NQN!02Xa(>%b)!+@ljLffBxqKU4 z*Vkj6gGE>XOAjn6%2%`NbObSm(QxYX)UZ0eqTXAzuAzk0>yR5fG}vxxz?v=~c-6RB zgIX zTDbtKXE*6})a5o+de>L5fEfslit!Tw+Pq78h%tf2dKT1cL@$%$1*U(h-lA8_H6je^ zt`a>73l4PcW*tQ+$=%Lcbg=T%byCxiUgg1>Ca{4V-RSpw>R78@<%9cJo7@`EcFMFh zIAHs;+8Vg(uymy*fZP_yvY*T$_W?#wc?I?^WDXA8MDZ&Y^}JkBztQDqV%g3CTnzlM zf^C}IRf)|`zC8eW;^@FED}TDmYnv*Tm6a1%N1LFMRV*tf8_&9;kx-9AhvjN8u~*8< z*8pl8<#U}x?uF5aQ4lL)3=P`B!_bdjn`F!B3Lgxsu zKB*^H0w>iT^XQnfzYTv>&5*mjsSve5e`C{jA3a|8TgW&Wf^6G26n0 zZPynku5D{8zQ(t3VU`Vz-M}T zx;H2A93S7|pl@&R?{RGI5nt*kS+Szn@XZcFTN;Z8ww4t0Z+UFy%{S{zRXcp=YAI*1 za>ZsL2cvUGSG{A!vXyK8FPYp9?l8rgAXE0T11$<15KgZ=b9QslGk77xg zjWnA-WYU{rX6M&K_}_a5oMGS$oB?N)sGR|4F4#An0cRy}W`oo;+$1-{sSqBGqd1us z4Zv}n0Ve{S<2jSlxf?i5XP~nWIJCFX?ffm2qLZ}3$Lpe`36|edFY&od$ZUjgpVPBl zkdnH;0Ll>A0Qn^##gp&?GJ6X+y|{G=XT#k?XRv$;aE8x-vk^G-uu_*W2uSf6TI~jo z{|qvJ4LJMGK<7umaZZ9mU$Mtm%Xu%*CHxPx8kwXOS!@=9>-ZUP762#z3|g$FAUy+4 zHE@P;lXoB*E_%V$^Bh8rmqqZ&emkmKvAA;qj7FN6-`$Uw4|t`J98XUh<5@#eF zJPXJ}5Ll1-mjL;_3GxOYcS3O;XD(=5h}SskkRm{S2$gln`vCbP-g2o!8UT3=fu=+7 zr93tr=NCF;H{qBd_W|-#6Xah3xdKy>-s;}~DKSBQ21tbo@;gAfOpsh?Ibwo10P)iy zA|h6d08T)@Wr73&@!^n5$N4ZIpEp771?0CT$bLYs!e>SFR!;!(Qw^eGRrr)*^U^LD{C_5vD~Hr&RA@n1f6KUwBb0MqRXgUh;mY~&f)N-q8V~dc7bpJl;&?O9) z)n8^_gsMjD?<8nP{A`PX6BQ2yld62+R^GAZ4MP$P7wZ&C4IrEUg@Un(~IXAv9c zrq?(!%l+4D;4I|94;gnSq6SxRnabfzA&+C+SS6(O!09#hY2Z|rPlh9ZSGyOygjK!3&d{CHao?cXP<*_S zSZJ5v<;DXyqdZzQ&q#T0AP&0B9Q+FPc2f^i4t2>BV1L9@=*cdB)L; z`@Ql8isA`o{Z<{mY45#(G1}1y7*nOzVUZY} zf!1hAv2G(2>5X%72cA&!H4<<$FNwl59BtJkAjF+?F<*Z*i%Dy|q*-H}o+4+)(X+6| zBF!57BsP^Mm8l;z5Cypam?=&KvX~x$hVH}xd^wQ~@@Q!%-9G)8C zd(FCswxc@=c^u=)Lo(szC~Q!APR;wd#p)%RFUG-9Yc@DS#C#EmjDHg7)ciH^d~vI0A1s>U?Z#~! z7w)65Pt(OBp2zbSA$=Y=gGw*n>Z^eCnjqf zgG#Sqd?5{JXW1`^qxn*M&*RFfL@eV{@_byAhY&6|1=_jD<3wwyKfcUz|E|kJnC45# zGpNZE#S*32Xdd2RB}D?a&-ne6kk*kFcxRy=KaGIU8x3{HhX5HdK|TgZ6mK!qaXt^o zJ`?0$04c^B4RxHu)XD_;B_Pb9aI7|b6WujqPLZn%CmNo~h9j^KpD&PRUMf}_Kt#mq zl1vosZ16VVh**sP2VKi>DPQc@e9;=bIb=YPS({XYk1DnzK+SUjq0NyvIEF=R%p;KH zdbh;Ep(}9cSprF~Uz!aaWL3hkev?!6cPHxqJ2pgf_8ut@?Rm0oUnP*`S}k#C2FSLl zb)gw;oy5UGF>oF?SE8is{G?`Q>!%Nt?)eLp?iMoI8o-IFv)A2WB?JihlsqYXdL=|3 z->2kB;nRD^r9<{1s|fozkR#8TFY-HiTln3J90vZ3i+n*I5We`Fg^04@_cR-d6~25e zkZFZ~ZZ@2FT%|SAgndx1H)!V~*N3#=P;bTI@~DE4XZ&%@>URu888%cg??;XBI}JT% z6REjiQkmu2uNOqbxIuKxms%UAfg{EZ9w853LU+>3d@0>eorUhS8#VY{yw*r6uikOgdltG29MYZo#rV2M zWzBd`Z_mZ=cb$dqw8%V@-=~3&L3jBgD51Q1E7b5==q_+bcN*tmP{XDC-U}F6<-e=@ zpr-r8F+ck(bf^9$bf+&5;J~ia_~e1H>oAUKeUR%D1f&41_(-Dd_2}Kkr15xbY^D2v zraO&_AYr(yekUCBrTXdnHJRxneOrRvA$o~dG^ntnBr})CG48Vx!o%;4@pmxmE26&# zWI(lI0lbNee_-MY+21+wL26}!d<~F6bU>Ke;!~yJ4}s$}wfY4hQ4Jzr>&5nI5MuTQ zaQu@{R&N6vF}2FYRw|9w#5}d;kz~sA#2)>I;>Z zFF?ftpy-$K@*qIGm8}Oknrrn-dD#Jk31=cXsy_rAF|zq}0y3vYwgRX);c8IsH1`34 zERk))F?hzM^eQftdTDDChpxNa1!yv}Wno(Q7OpOWjcDf2R*LaeTjwpK@0aMEZmEA?sCSj296j3tgGdA@e(?wYtb5SPjudl_mAnk)RRZ0 z1uU0&so2o0Iv!4@oyWrwmS3?S47d&X%3Q>`;wimjwY&`AZJ{!YmRj^Wr@e!ktzHCJ9%)W#R6h68F;UlWfcWe+PaPmHsg)*Qk}W8ogRaHsPq$xDpSt6tW*OTRxliQm-> zt81ZR-k_<}BC51_8)AOXS;V|9vx<3x%u@GkOwMPD`L|K8(w)j*6UTGeZOY3NQpPcqV~Sw)GT8dTjaPgq_lV&W*Ism;Fh0cWu?okW*LLb zQuj|zqPtpwyp4L5MwGuMo7_ceZFMXO&J1clwT@$dZa9_RR(BIjz^i{S^y$`fRF6o>i|{ zxED-`yU)U%zT0NvReH+8eZ<1uF(vMP3wQdKsG0j|3wJ`0IMVV(Q{vuW;eOh}Jx9%z zY9?B>(89fVO58VDxaZ_(dWqe7>1+%4t1R5hr^J1;h5Kv^_jwlXD|GI1ZS#+?*hD*M zwXV}=YPGI2%;wUAPNfBPpp47Xo5sUAhx7Rs(C6_p$+}LLS*_~~GE3bbpG0@H{&^eq zD!oMcYvMIq**xXtiE&mpso0q8d|vtMoW{CS`iZN2UT~YG$L+NA_c!fYzmU=5of7v^ z3-_HC?t3iU&(p^`>Gz|P_+7=ku7!$ugQijoztUp7c+Q+b#=|*>n5U*V@)eKS=QSvBAXztx)P*GM9RpwUmC`hSKX`vvi9@V2xMoasYxIbXw z?z3=juyB9U!aX`A?hjeGH(0oDws0S|aPOHC_lGUqH(R*3Sh&BabC)r{aFUo;{ayE< z>hA_GOAq!cExoTkUZjf2(PH)OMQ-6OO^(u`he@)z%%UYC|C&pR5 zPsPS0{aw@RoceoIQC5AqY>ARbK}t)N77DWJGkVm?XxXiz<(#<3E!;~j+}B#TKd5t; zey4NwiTti&Ue`j!yg^f`#emY{ZHRgL%=Vd9R=Uh8<_$7S-3KSpUCnWCqh6(M<*$k3 zxooZS^29i+dsJ-LuFM>Mw9jX1dYx0$ZB~?3JeOUf*TVgjh5KnWCMbDU69#>i*(lf8W_PUPfpJ|TMWma>XL1wA@!AW#ibKKjgSLqTp zN=!U|l@+RyZDO3&O)55Q=1-K9-PHF2zNhJqw-l?l`Qhz}ghSU2_?(*1-7)_66y8R^ zlRTZ8Jb0pEvjbucwA+9)ie5mq*)}LR&XoerPS}uY$9uO1HMxiAXz>hVX7IwhhMMVJ zL-ef+s?E}V#aw)*!U0HgqC4J&*Ou%$HtU|#{i*l(ILMAM12-i@XC{&RgaBD9O5vvdOsjg z)Bw2=kYYe|Ejj>EW1ZBrg)yfICkdQWnqC3C4uIaAN;GtKWr1iLHB2GUN!Nlj0lm~YL$6@02WkA&X9I{wPFoJiv zFxI2-3eYQfsvEc#x?c1PEQ1_JY5ILY=+eFXb3kr0S!@)L{U({S@f}_DIV)kY^8wN0 zkSLY{a+j%9B_QUgyAhC56V7%()T&8P-UEnwPqKgv0`j~`!hZv#01>Wh@k>A&OgO&* z%GWntdkbD#OI{~@dWaobXMD2wIXmK_np@PIR$imjLO1$>6|9Y7Xq?RlP9;*v73RZCc72%*>=ROB-OQQK*hg=MZxu=u^GEk^y*!oB) z6a|fkOctvJPE^yKzB5Vhw{d7u7wSY4TwdIIFK9w5!qGMD0EEtwba`$CWW>a4Hz4~# zN5^>#5VuK-rvWK4;rt1ZV}R(qW|5I`>2wwW;sAn>5VKyG)-6OQ7q_rs32@*p1Dz^B z%p>;ofDG7;zPJ^TUd@KFpjbH;YY-4*yMQxfYW2^6s9loa{%t_$TtY}lztoBY@B)^y-esI-5J9tliWq3-81-TmF1NicJ!h05UtrXv6mb zvImrPt409nHMQyogf2bi2MJ=r*$;?%mMwID6_6pI>00~_kOxeDw_SjBiAkRG0NHH9 zc{d<_5CKqH>}o)WGVu|-Y6014qSFKjRq8T#1ETitqSdDX*=_R0{nW|?83JU)Wal3O zGQ@Ed_um4dK2IVjj{?#IQo2#sY zP>7Uo=QN}39#@*4=)MRlvb35Wx@ zy6#zcla~5yvyiz2kY2O`DQS%=K)fa`8URtxcd&Yw?+RunUUvW|U-M4uwisS%fcaFT z6QCE_3!HpS3xd1^$fyY?O>}Zp zB!spS7JPwQ=QZaN?C81f%7a$`l54Vt6OjETy*>y?3+U+M^BzEStD=g14Uhq(y6)cr zWJJ@QaJ~n~J`>LCfcOE?d+whA*=^D*4{z-nHnqBpASRrv067TVg@moKPzViJ)TGxc z;1ru;emx)ufG6y89ZJhuLR%7TfgmQ6wotb!hC5rkR6e+6OANM^h>>t-Naf)CEn!y7`j1|#7XKL~e(;-Q!qYotgh#_(R&Kr?@T2oo>pFI*N2wc@8gm+39T z@kqS8CDs)Ww06as!H&P5VM4_1oo9vDo#>hfuc{;17OKG8K_+4qj79_T?a>gnzMVjA zLD_;Trin~h<rkB$3$0k@~3aXtSTT2Eb_1y{c5N!SjO(A!rmNNSAZ zZ_F3|%P?C@mwJIcooCRG2w>MS+!|s}g}& zs4d)$-V$h~ZXjNm36xT*W zo$I<{?%?*VR4%EFfmBszcPJM3m-%Y2suAe^b>aGw0RB9LR#qtwZ(Xq%BA|u0U8R8T zP&61%(0~xQVRbe9*pcY)uknRDZ@w-ON%y^aC2L)MF{!nBeJJh?1zU8)l45`=6EROD)M0>@`eXRLV{Q+k z&eh;zG{k~i@oMCd5`*}Y%v^ywlP;@0ote-z*Abrv8Vn$eJCs>pXF@0`;q|^yXIs48 zOj_!p12b9{^OoEwIu3Z26m!LREmvwK&nm49xH3?0z4cZ^QcG8$Ez-3m7zwn{4*{AW z{HFn}ac%tFW$LkEjOe$9TBxb)$3)6dBqR$Nc{GS2CxSSZEn=Z4PL2Y2u{j8I1YQxN)5@~@kVr~>R`Ox6VoR@ym{R4 z&SVxCe?XHI@hV!P%>pjjQGygp?H)`dG;{2u8mW-eB2uMq>8 z7_1TV5)b2&tEB}mX{SictgP&UpED?VdO~0i0)CHycU5;ySEmY@s!ogoF^qp4L8BY$ zOmqY=2~fb{^^>t+Y&#~dj&oh@XiJ>&mrS(yp`gSuCVohlzaCAMRWZ;OiU+z9ah$r- zN(3rwb z)@|~Ye3s6^XGQToF_I5`JJ1r`9tpR#$C(09U%M5rH`4+9DM)ulxj3U-!psv^Kr9C6 zndvgQo?zllu6mKbcv~-uA1hr|R<^Q?si~(X(E$quChpbLNi`h;Sh}=?yTsXLCtgpf zEP9;8i@k~pii`P~{C0d_xFYyslG0s>Hij^J) z?KrH(SNZ{rS}+?eUW67j9Fhe^jG^QDf|%p^fG_2dVTL&cW@!m2Gk2f|qb(V!n-BC- z9>C}+L32A8HG>aEq;PXL_d_?)=xQao(OqcGjrAotNONz7`S~oOY_B<7j6)ecDqto~ zzbg^L(8*_n;D@?mf$qeX?(JB$bp&WxK}%L18sud>XH}*YI%7=(6IEi43&UC3m?<1K zxi$45FwV;x!dSisBUl2&wo8L^$CID2ItcJ!!@;*%4AU^7P{a|R&SpGo=(VDAXhWM8 zHJT6^-A}}q)?Q7Z8sH55S_orV>^DTZ5m}g&Xz3ZicW^Ql4O9lYqoL+-Yq&WhF8T4P z@CpWGiYhYK#G{K?Gsw`D&x6rIMF)C&)EIffJ{d-kgRvlD>JpkAOuIBr#L!JJO~ksk zWpor_8p1Mfn*|qsG$5rGzX*@jyXbE+M2Lxbs+qXoklVB|OY1j=AyU&rPEXp-S7a=QF)TT7)}q-#y2I0nvC*RFWakYcI{0S+_=t|9gaAMD z))mDF64a+5wWObPhBJi8K_ykTvk<7O-|_=%GU&GAE;T#l_rs0T6zX|@e_Z3(m{I%#>6K}#-Inf%<({@GCH!Q*Fqox6Kho^>BV#5I) zE#nkPw@q7bla<7&13YS-`pD_#nQJo2#F_7;&g41THYh7fv#1x^qu9Y0eHo**i1R4_ zB|FW~Bt29?d7{xQvu~@>jE`X%OE&RgJ7wgI5y-r`nQSj13CNdLXYOEV32Kr} zB8Lj&t^G-K%>T4gHjTYBpoym`I0-a72bd@_MSQ7Vpb0+FxTu+aVuP3_Aw|$2E@_0J zh<|cLbD(+unmNjgt{A4LH>R~yq$`M%?m%lK*e3Re!gS(!F0H@XZ|;uYjO{qAlrdAt zS;ypb<4zP#5vHAR;|H^&&MFj_fzR3*9ZbfP@vKM0t9EpwHsSmu4ut zIT?dgtD0;PIKj@893)5JarWq3C%rcr<(Yht&77=Y)3aSmYo}|PTH*uga$v&&n&pg5 kjXG)-lQDRjc4dayi+ZVPqLf=k(XliyHgv^<5kABIe{ck_CIA2c literal 0 HcmV?d00001