From 03216cc9d9ead9a6c0ce12adf7f56a1958a23a5d Mon Sep 17 00:00:00 2001 From: Bill <Bill@Bestroyer> Date: Wed, 5 Aug 2020 18:53:00 -0700 Subject: [PATCH] --- .../homework2/Mahan/Mahan_Client.java | 81 +++++++++++++++ .../homework2/Mahan/Mahan_Server.java | 94 ++++++++++++++++++ .../homework2/Mahan/Output.PNG | Bin 0 -> 20709 bytes .../homework2/Mahan/README.md | 8 ++ 4 files changed, 183 insertions(+) create mode 100644 assignments/src/MV3500Cohort2020JulySeptember/homework2/Mahan/Mahan_Client.java create mode 100644 assignments/src/MV3500Cohort2020JulySeptember/homework2/Mahan/Mahan_Server.java create mode 100644 assignments/src/MV3500Cohort2020JulySeptember/homework2/Mahan/Output.PNG diff --git a/assignments/src/MV3500Cohort2020JulySeptember/homework2/Mahan/Mahan_Client.java b/assignments/src/MV3500Cohort2020JulySeptember/homework2/Mahan/Mahan_Client.java new file mode 100644 index 0000000000..a3bc4bc626 --- /dev/null +++ b/assignments/src/MV3500Cohort2020JulySeptember/homework2/Mahan/Mahan_Client.java @@ -0,0 +1,81 @@ +package MV3500Cohort2020JulySeptember.homework2.Mahan; + +import java.io.*; +import java.net.*; +/** + * + * @author Bill + */ +public class Mahan_Client { + + // IPv6 String constant for localhost address, similarly IPv4 127.0.0.1 + public final static String LOCALHOST = "0:0:0:0:0:0:0:1"; + + public static void main(String[] args) { + + // Local vars/fields + Socket socket; + InputStream is; + InputStreamReader isr; + BufferedReader br; + String serverMessage; + Integer count = 0; + + OutputStream os; + PrintStream ps; + + + try { + while (true) { + System.out.println("TcpExample3Client creating socket..."); + + // We request an IP to connect to ("localhost") and + // port number at that IP (2317). This establishes + // a connection to that IP in the form of a Socket + // object; the server uses a ServerSocket to wait for + // connections. + socket = new Socket(LOCALHOST, 2317); // locohost? + + // Now hook everything up (i.e. set up the streams), Java style: + is = socket.getInputStream(); + isr = new InputStreamReader(is); + br = new BufferedReader(isr); + + + // Read a single line written by the server. We'd + // do things a bit differently if there were many lines to be read + // from the server instead of one only. + serverMessage = br.readLine(); + System.out.println("=================================================="); + System.out.println("'Knock, knock,' says the MahanClient."); + System.out.println("The MahanServer responds by saying: '" + serverMessage + "'"); + System.out.println("A frustrated MahanClient responds, 'Answer your door! I have knocked "+ count +" times."); + count++; + // socket gets closed, either automatically/silently by this code (or possibly by the server) + + + // Now hook everything up (i.e. set up the streams), Java style: + os = socket.getOutputStream(); + ps = new PrintStream(os); + ps.println("This message was produced by the MahanClient."); // this gets sent back to client! + + ps.flush(); + + + + } // end while(true) + } catch (IOException e) { + System.err.println("Problem with TcpExample3ServerClient networking:"); // describe what is happening + System.err.println("Error: " + e); + + // Provide more helpful information to user if exception occurs due to running twice at one time + if (e instanceof java.net.BindException) { + System.err.println("*** Be sure to stop any other running instances of programs using this port!"); + } + } finally { + + // program exit: tell somebody about that + System.out.println("\nclient exit"); + } + } +} diff --git a/assignments/src/MV3500Cohort2020JulySeptember/homework2/Mahan/Mahan_Server.java b/assignments/src/MV3500Cohort2020JulySeptember/homework2/Mahan/Mahan_Server.java new file mode 100644 index 0000000000..7e8ef6460b --- /dev/null +++ b/assignments/src/MV3500Cohort2020JulySeptember/homework2/Mahan/Mahan_Server.java @@ -0,0 +1,94 @@ +package MV3500Cohort2020JulySeptember.homework2.Mahan; + +import java.io.*; +import java.net.*; + +/** + * + * @author Bill + */ +public class Mahan_Server { + + public static void main(String[] args) { + try { + + // ServerSocket waits for a connection from a client. + // Notice that it is outside the loop; ServerSocket + // needs to be made only once. + System.out.println("TcpExample3Server has started..."); // it helps debugging to put this on console first + + ServerSocket serverSocket = new ServerSocket(2317); + OutputStream os; + PrintStream ps; + InetAddress localAddress, remoteAddress; + + InputStream is; + InputStreamReader isr; + BufferedReader br; + String clientMessage; + int localPort, remotePort; + + // Server is up and waiting (i.e. "blocked" or paused) + // Loop, infinitely, waiting for client connections. + // Stop the program somewhere else. + while (true) { + + // block until connected to a client + try (Socket clientConnection = serverSocket.accept()) { + + // Now hook everything up (i.e. set up the streams), Java style: + os = clientConnection.getOutputStream(); + ps = new PrintStream(os); + ps.println("Go away!"); // this gets sent back to client! + + // Print some information locally about the Socket connection. + // This includes the port and IP numbers on both sides (the socket pair). + localAddress = clientConnection.getLocalAddress(); + remoteAddress = clientConnection.getInetAddress(); + localPort = clientConnection.getLocalPort(); + remotePort = clientConnection.getPort(); + + // My socket pair connection looks like this, to localhost: + // Socket pair: (( /0:0:0:0:0:0:0:1, 2317 ), ( /0:0:0:0:0:0:0:1, 54876 )) + // Socket pair: (( /0:0:0:0:0:0:0:1, 2317 ), ( /0:0:0:0:0:0:0:1, 54881 )) + + // Why is the first IP/port the same, while the second set has different ports? + System.out.println("TcpExample3Server socket pair: (( " + localAddress.toString() + ", " + localPort + " ), ( " + + remoteAddress.toString() + ", " + remotePort + " ))"); + + // Notice the use of flush() and try w/ resources. Without + // the try w/ resources the Socket object may stay open for + // a while after the client has stopped needing this + // connection. try w/ resources explicitly ends the connection. + + // Now hook everything up (i.e. set up the streams), Java style: + is = clientConnection.getInputStream(); + isr = new InputStreamReader(is); + br = new BufferedReader(isr); + + + // Read a single line written by the server. We'd + // do things a bit differently if there were many lines to be read + // from the server instead of one only. + clientMessage = br.readLine(); + System.out.println("=================================================="); + System.out.println("Now we're talking!"); + System.out.println("The message the server sent was: '" + clientMessage + "'"); +// System.out.println("This was the "+ count +" connection."); + + + + ps.flush(); + // like it or not, you're outta here! + } + } + } catch (IOException e) { + System.err.println("Problem with TcpExample3Server networking: " + e); + + // Provide more helpful information to user if exception occurs due to running twice at one time + if (e instanceof java.net.BindException) { + System.err.println("*** Be sure to stop any other running instances of programs using this port!"); + } + } + } +} diff --git a/assignments/src/MV3500Cohort2020JulySeptember/homework2/Mahan/Output.PNG b/assignments/src/MV3500Cohort2020JulySeptember/homework2/Mahan/Output.PNG new file mode 100644 index 0000000000000000000000000000000000000000..f4186dec73b83c4b7ee9acc2922bab7e7c281935 GIT binary patch literal 20709 zcmeFY2UL??+b)QR3W7?Ljvz=;dJ&`rrB^8`NDYECX(G~-V4+u$E+x`cN<ex`RGQRC z4TKWuLg)|zNgxw_-}nE%^G{j-oO5PotyzZ!OP~GhXZL;W`@ZgL$C%#Ly>OoEJQWqy z1${j&b1Ew8SSqShGPGwYDa7R0rIde8`I+l#P*o1{tWq9mT<;j)p`xlzq9;8%LwTlq zs%Pa#Ma3KS`|niJ(vC9~m1&5+)}8x7_8V>Ba<Ek}CXl?!X9gVo^y&VCw0HF}gn|#r zYi=EB1qNPY24+h)%xvyY>1T~Eb;!r;y^6Wob=FgE^!f5NMrnsC894_B7h2BH<=!*8 zXEigsZWnN!mSg8WE!QvIFO8_SLpYq>s&sAJaII*wKLFr!{E%uZdz@;7+!~a<hZ@!y zwh}tt<TpM^NmryH#;9O;fKD8dk0`&TUbNZ_?b4Lra<_l|&o2LP1&I67^KSp#pIj3k z(c<|*u{lp#PEq<wT@x`cN5<@lIBB>A&hq_TkRv5^1VJSAWHO?`*l~$JrB<cXPHOC6 zb#CXz(&f(}0Yve?%F{=C<{yr3sfNi4^RvqQ&Z^>{Ey0R#p&9*1`TjV;2Xy*RtJbf1 zIprTNB7&X<4R}d$3=R&KA2&^H^33i@!EZLf9zz?+gL6`d&99DV=4_imdf=gkhaZgo z@2=dPaiQ-N37d-6^f6Jz|J+s+VDv%w9hM@&eXU`Sg9bJPIDo3H-K{A6vddPR@h;$@ z5!A!5kFKEVz&@MOjD9(!!=LWu77eh)nsA)Dyk3S!OhkWUXMmlo=v<5RAd?2?keoY* zYWOg*U<voF1A*N<8z`T>#QflvM&3-o%67F0G1Mol`WUr&7rvRSpVjsZAo*&HXkNpA z@palJ6N^R*6hd(Sx6vxoxqXIsh+PzO6`Y8_MUT3IZ;2P!y@DzjDw<)T$!j9-tX%OG z*g8082MB|;vRC7M#Wd_@g_ip3_?ZpeztV&Y{57-QlnGft#&A48s8-1_Z6&7DDg<s+ z+g!Sc@zR<JoZk7qJyE*F18;9V@n#AY-td;%UOegcR+DY*rB}_CY6%>9wwyU@%qlh` zC>$OTc8mpf|6V2xD*97;qJU*Y2xP1@&Gdf3CS!!7<V71tv)iJMzsD+IO~FPK5MZd4 zQv*}QcI1$}e!^6V5_>1fbGll!G0`b_=yU2V6?@`$d5PArq1Tn-VLqZ*%S}I^S{NSO z*XwS@7(toA{23E99P7WWmdk?gYr#h;m$>p3PE-d2Ir0PXA_*_{Rs#{=OJ@!oQ%Y#^ z^ohSbG|{>3x~&|fO7<+Gr<D{3+%SCZ+cUr#%&Yys8JUcP7w8D^b=poM{DBeTB4rv7 z2X(ODTY@9<&ujxj#-p2gCw$K22W>UPuA&}kxZzVw05N~E1iTH{(AZ%#{`Wqgq%)b8 zI#P16n5e$|I~QdrAUoVhXguA2tjJ~!v&z4!c~t6J6YdDP@Mobjs6aGD9VcR@3X=e_ zk0vgc@7q3_sOHdMYQH;u?Z>GvF8r+3P7R$JJ0^&wezbb<;^~@7<jvz%hW4ssE-KGR zRrTV`$Vc6daS`*-kdevlDGaFhglGa#kNt+mHFdQ|K0-OsYQGq`8t|ywo02JPyQ^l- z4|%ft6nhEr1bEKuVG95iG$Fkn!jMl}rPLw0KH*huN=m`j%%Sp*v^_9~ue;ZYK*IF7 zPbmM{^qs0l6F5ri9Q>l~CaR|#^AES$PCO46@9{++;4tKZHj9>%IpiQqoT?{BfLg$? z#?CXf94IWxkR0GTx;ANjoY77odET<IJH(&UgH^DX&8@G49&Ul8>*=fMRRV0pS;;dh zgON$<zJZP=C$r9bgedh9_P<ISXO3NQy|?3AEsHYx684<=P`f<*c9=~0HJ_@7Ist0u zPlLhEvuB>5=%dwl>|O0<7N?}W`qDq9A&Nt!P%A{1m~4Wo2sFBr(-~N4={=iCbgC%^ z-8@*4V_o@!A4+vtq5tSrYZom7)*9?shfN}Hx_Y6bAQcj9!4rf4?8(%OKoIe`bKh>N z!UQ8TEsVnibZ@WPGz{1B9tMy%yuTtg5>41gd}0SSvV(y6VS(<(`9a>)zN}$qxz~|i zU&2Pi_slpV<@px<sZ2Im<`gf31OV;F*88KC>^%|D>=!G<Q&d|DERYs!8Gr{1Pe1fO zDVyT-O3a$BdA4L*K5A>QJWT@hXwNYxi!!!U{aGEDlewC?e5o0wYP5f~6nT^EG2*Y( zG<Kz4^sekz#@B0;UhN+0{+OpNVc_mkyBBT#*pr}*IzEt>xZt}>=mqe{83;m3WIV-w zt9VQt>Eu-+9UYvo1%)pt5JR8>PoNqysev;BzTC&HMLr4@QZx-ssJgm{`H)6wYKis1 zhjaB;PQ#-c8vUH8{e#(c<J#Yv_E!eq*>PJ6xp|N=jJp{uvEVQe7j2qxqPSyn^y51s z-OeHmdbzffsP#N!&+@n?<3aG8eZp)+A1PQbL+TKp-?j;Gz3H2dg6==4V9=)z{tT+9 zKi`wnTh%hzZ0mCmQ*%j%_nRNHCuN8IwPYLYAquM7oqW)T8_k(TZAT|4k)_4)%drhJ z3e(GHdMj+8S2nA*oRgo<ORocrY4Yd>>*GZkgtmgVL|J|KHj$ks0`VFEOQ4u>MzW10 zm!nby!EdUb!{&*5cAyArx6B&8$GA!e?3Y#_#cvr3tjRNNWpKPs6T-W#U34f~5lH6o z4*YQP;Mrk_G)wr&v1S@p|1#HxWs!M0LXll<oO>p50<HrYN&INK6HYpS8<AEC*-J^N z6kd4~f%0czAf;-Px6f(<)`-**gx81VX>({<Ts~_2VZ*z7+D6UB3P%<<g)%dgUT?RG zpUIErZINJ$B`+HyBZ=_s-k7>d#1R~IDM{_%q4`~JaDGtt(<r9b7Sla-Qv;zA)1Mu9 z0$g_O;4+Lv(1rZWt<7Kf3VAynZ=s<#D+zcSdTOhs1Q>8%2XjT}t=t_;2@{O#Rui~! zD`jK`^~<smX!Etfg8Q08G{GSl+8J`6?=rY;OS_UG40=+<h|Rdfy6f{D3l_ENk(#Nr z&kBZAcVuva1(%mK$(p)78ddZb%_0qO)6|J|(1lYW4BxK)iWAL=<%pWTho138ZH36Q zTs$D8M-&vT0vgg|^4?g|rNyP;TT;|N${`e`fK_-SZB!8miwL#zz-x&v<5*|ek9W3k z7w73WLx{B}cRAazb@j_j-6YOVgo)7`KsF*<bP+kg%ozI@MEQ^gYUbLK;Nmh(6nH8L zB?_2%CYsh#f2FaZ``&=TFoTxtvSi*Qq2hpQ#22&7uPfw(fi<@BiztmyO{J^Gvm*Eh z_J&tB3~O2^8txnx9p7Xc3lZ-J>#L!mI=Oy?>(el8NDnGlW9aD9h(;Fr2}Ee)N$SU~ z6i{8Q1!mEI9JFCY8&F*Pc7Q2XAt=fr@60o?63PC$F3BIy8_b>pFWn7yWMozNiDYN& z+&8t5@R3oAw!atFINrkt>kE}Ik6q$k2Vc&&E|TPEkYMeL$610eqK*e0D+ax7JXB(z z%@E#LJ%b%KW$7_2ZiW7HU;v5ggOQ<Ej!xWmPx#<lxG}7sR>6dLK1X;Qq$0rHwn}kp z3m**nF<2qYwF@iu+j);^7=E7BwDd{<!Pc9V8O<PZYah!WkOJ{7fLYo9nlj?QyO$c_ zH~_WC4YvM>(69;t8Nk<+myR9hTn6eYmNO(vAGiQYpTKJgI=idNp?)79U;TbYY$jz& zJpV(_>9$KhmF>Ij_~OpbhOq1P?tIgw*Ka9Y!cb5zi<VKu+m`Lv+Kfrc9QCA_y!<&= zecVd4w6>6Aih0c^RUOi1ebk~N(Qj}f>T9*<`c}&H1G(~2FjUOBv3|7kSzX1I9p804 zPYTLK9)3v97ZO+knq52l1ZDUiqj6m3+ODFG2ahk}xZ60&?NGrs3MQgA=1du5=Vqt8 z{l4C!*_hU-l04&>n~qUbG|tGdkyPlgUV4I!V_T({;yT8;1V_LJw)pz&Bw0PcOj{S0 z!2=_>!!(ct{_FjmCHMUPX#>dWGi&GNB@}2Cm+-I=vE<RC@wBWBHklStaDg;=*Rr0- zqW$v1as<|1wGrD~j>b`2O&*c2$>^izg?v)l6w6@AKuZ>Q3A+k=HRopEE?QMN>?5h@ zxDE<R4h7lJpFH&C*!2k82S<PsHI7eaT{w?6fe=LN;IN&NfDTr`yw_jZmw=CH&i%Uf z%I{xG;bgXEju(1tPu$`T^JaZrhxPLk(=gkhUCR}r8@wvL(h|v>TIw$JNM7Bz_mh>R z!l!w$sinTX@m^m6E1Z5=s|M!mOF{7PW)i^?R-s(ixeMan#abJsff8`fNy(vpS5dMX zmeqC<vVGK{HE>^N+{)YfccM9hY&IH9-e-NIb{Uz5ZlM(0R6;Z<rqdro1S);Xbp1jW zWhS5=Q;e~W#k|>1jcphioPOq&qz$i>jFsQV6nW(j^p-!R52h~=V(Rhh6N`Z@`Y0rP zk)+f1%0HQg8sw%_e+T&k!t3K5KdqNNsrhW1)6=Gw|8TEtY$b-n_NQTmkEgY0=?|%v z&)FiZBX*TT>EMkZ+s52RO{TaI%eod8o~o8NiarcXe?vub5~#yk@~j7Hh3gV`iA1!R z#Gy}YTKJ}|82HCz-Hd8J?bBO-pSix40pgczcE|;Z_3PM<dks}ifh-;K&!;nz{HKGb z7rYDpm`T4ei2IK<#~4eMt-1a!afUILBVaz#lxBj*kv(8N(zK(BMKN69%krOcJ=kM+ z-%zaSwzE{(W+8df>zV8P;Q~}tUyQ>!&URnaV4^r;RI%c0v0JSxNNZvOhO}LdRnruu zrX=$SQw%)h^fB}T<s5i%jHgG){I&w~uCo4i-!7&kgwL}hNC$I$N#sH;*6~U_#pI*B zc$!Hm&IjBL<%I0T`P3bx!Dd}CK**ft7*^S*hth1yPgD=Z)GKK?$(mDyVEJ^2y_TB| zs3$1CHqSWi-_4`?^62wJQTUuOdG+a0cA(I~Qui#T_2he@e|4i*eo*!B%Ek>FyEi&q z?nTM<ujQ$3*|X7iw#;rr8K4M~x(Ef9m%1@tBLMsnS>?J2hswVyCE&t5X?`Y|ln2<Y z8v=tHj8RK8PP#I3!+L@VwcP1vsk-|pO<RBwlOmA-!l#(A$~b+rCcBS*FI`vSzgo6j z7Z!4eLy~`VSflt_4}0dyfM9V-O@9XTr?izgEAVJd{U&JHPs+roa;%d4?X^#3td`8b zI(IT-Ns4NB1&}{e0Cgp7ZeR>6kt|A?M@sK+8Bw~!clb3d?63}b%<HkM9Q_sTpWE=5 zR-5wnMf+olNv$F!_iDQ)Z0dyg^_-5(!<JdOe=9oyffK0!Z}XKpRt2=V{_88y;T*6! zJ?`tj&0?p9@6<oF{xvzKG=JuiN;}a~)V_ROsffTa+=mNRh2F1B+Oll-zAM(oVPT_A z@6YaB-{=UA@V#|*x~ah?M==9CXG=H&ZAj6=w^VSRGZ|lsKay>G*;M$(v13o+@LK(a zCPZ3@S7-pv_7v3@_$~W<x6^5K-jbEtk``<4rk$w$0{Q}ymFp|s2AH|Tm5o|*MsaHv zZeaH$=&uTXLL!lc9|HIuFXLv$!7{}a7OOSBk4SVHGF8VRV(X!Ur>R~nMI%DeXENOx z={0uD19b2Iq`MRBJluY<*WjEscgL}0?D^$%&lT<7=+&!Vj&kdoULy31``bM=gL&S$ z0pl5!P>ze=4hx1Q3;4{FZ1MQB!1jxFW&K>$ZH4an*95MwVuv{I<$e@gG$eWQ2akI! zl+wyCz?h!&oXdVPH3c8ty}1&H(@rzXzs73Ql28X(J({mfQ0P{qqH0tY!7Iix2YE@~ zSiffQB5vNS!;F>FUi5kw6~vvo<sv#mIOr418f?$azXS|BGLY|WmGN?O=+>j>9awTM z$HamqI6BmE_HpGdSrX@u+1>y?9n|&1etn1@<y1k<hA|mGay4tnA3OLYr6CCPf<NRN z1>dw*iA|}!i@3j1$-kw^MMbrqFv1$EBmHow@Kx#?8t2I&x|cUt_+QbOb2o&XG8#r+ z+lCP|9!Vz1`WSIrN5g#a-w!{K>NQHMYgjw=XG?UljJd!m=kse}ufqygeLtFV2&&~( z)LVjOYIh~Fq=eY$Iw_TbnL_+nsi*?J>1gcC=d~z)Zsn=QGRDeqIDf6;`f&cvlU7Ac zLLY6gGyWPe8<yan8tjCYX8$M$intEpP}e-}w3AXVaaVu*OEz>u*)CgZNz7Kr^V7We z;>R&yp%ANzmk-e#X_+e}tPAfG$1k5qFvsRXJ`x?>;!jh0m`DL7O?<0I&|yYcaI$_L zrE>6jZMwIQMB3ej@t4bvxs*$qe!9T=i2Rk;qKT~mx(2$pSvtB9TXHVcMf8pWdi|kI zRvRV1S~s_v($`1F`dXE|+^$kTDhBBXlC_LFuwpAF!xuGoZ<ZI^xp2$rKF_sRYEp=6 z3RnT>k|gq~_wv55U1i<GJ9o$)2aTg=_lnbDDnKpM41y7n%a{&r{qCA2p%`oE%p(Bt zUe;ivqN?nojMUeb1k=_ax4&DwC3=PJZg}UzAVH;8h1!57%BFV!aMN`HgHXtem(&mU z;*53|m!flPO;ha{k8x<@#TRJl&GOY;QA*B<RLU5fRwoY5&7A{qY!u?#5N?DkJt-N2 z0qDPhu#ZwBA7alnGD`jMr5hiZ92ynH2e~B^YCIzty!))<ACUf??YQ6M(xtGUa7s1| z^1`LCd6t+-kF`JL{R0~c%&~ljtAPxcFys?AzT>7q$_MLC|3}&IZ3`Ri?RdBpS{LJo z+}_qzf1BA>vYD(JtmOC)N(ts4o-~k0x2s4O3L28&#La@$&}%04iT_~hq@E~zt8`XD z6$E2?LH}nU{_R9Uwrx~UYQVI7|NYHGeMA8Otes6Nx4(7gu?M1x{cgS<MEA!rl|L-6 zg2?=%)O}(^@79_ppQn@RhWj<e)xet@B=t9Zig=M4BM4yRP!xGP=*r^rjO-(p?9Y|= z^OmfqPEpl=p^S{00PC0ureEgw$kx;6|6(&@GLrn2hzfZ6B+9A?Y0Q6qNhM#|Bxhru zCb^C+GUJ)nRSjRDEm*Z%iJrc?;3gD13=J`wPR>=d6t!5ktlprantDX({AL5(S+K8< zX==t2x%6J_E9ileoPtu61$BQ;gyn9zGfHEy{HA~9`0`upTB&}4%7DY?SrWh}N3R%- zcR$iTig?tyV?msrY!=>9o?htiQQhdkJD)&OWJ7CrZ+44L8LMSH_nX`p%|fLCYMeOs zJ~k_Z!JNl_u7)B7Me~N-imrW-ck-bF8BU-8XCz~~1n|>djU6!OTvm|PxU0)apNHCY zkXj$olP&BXu&CTcDb07wd{s`-NB8O)L1S~rsrC_2<@`om?eO1An?i<s(@Cd{QCR-3 zSIydhn5a+^wy!E^>gSDl*y~F=%&gxA9R*m8U+xss=wEL91gA{^F&ANvI(+!zujxg( z$rpkvZ3XY|YikZ)nSoh~*67LrO94A_OjAsL(AA`BsnNl=shou2!YP{#4>4ICpw^cs zL-+B;5r-f5vXZXU^N`1pb+?rz{olbe&vu|c2P>4qhb5oXAwTc5FkZbp9Pk1x?7=(A zi5IQ|VAFz&;pt5;IcQ!S*Cd-xm)LbD&Nohc3iW({iQ0qJdeza6-{$9;w(nCf-uI5; zEq+5^@tvaSyK!_zz8M}m#7{5H&)lYiTQ_>zx<om`?ZL8aYaySxGw@~{4cjn{hU#&Y zzIxExopQo(!Ca}xxEZ6+11@;&a@LPBsoeI&HB!#Lztg7o=?BnwOSi(yr7XZ+C+mV) zSGbya{qYY`KE19>vMs+ns9xB;Hf6wnpBIk{X%4_&r^(?E^~w^vEIQ1aSTBVGjolVM zdW?G1dh-Gx_uz78R(G1<OP_u0C+B+6<!m#cRsi?H#rW3Q=epIyC<}&o_@YWIU5u2( zB0xl19F2Sd^~pZ)n2*~)5>#uRuNkgX6{1}y4>v+|WkxGz5*@4LHXkU11Fix~xoxIq zyi?fLCNzMjscg^bUT0k@gKdAb6E7cI@NaN1WUSvhzR-g~aHhZj+1NVqlQ{@bM||X* zlhyuAD9d{zs$|qN4`hZlfKK`<bUJIX=BvqxiEG$E>_wZLVl-eT(LuS8KiGIO_-TuI zmXPw%n$xwHN*<y6W5q(?PgBXMN(WXoFfT%;3C+ujsq@fuDgX5x>7z18NJr9e;=QbT zsk-2jtWirY!4zPu-MH(#r7-Kj!--nX<D2vg9{xNx7G?{_T<gL1IR?OAvWjci7h8Kx z0BS1FIKf#n8rtZG=%v9i$n}l+jkk7Vu7Qt|+-&Q=!n@h1-k;N8O3Z64^KTD){5E%2 zP5!YWj&tZr?|#dhDsuH1s!aO7Eo=Tiw(|S$j`^a%1kmm*!kY~KxkPS0#;=ON-N+YK zw}SBJ))8bZhBUX>e4_Xd$WaVP@@lBPENJ<w<weZNYuAb%k0!QZ%t2*n)Fst@L-^sN zpdrj*{<Sdge{i#qx6=o(mo@hib+XcqJi&!^!qdYv3FKXry$pyrg}DO9k@gO7*l~5G z>1Kbi9zOfHe{hq+2M>^mP!7n7AATYXLlz8EfV0Vn9;itjwX`cDaHQ@18sr73lPPso z(wd0+&DIUOts2x4&@TO-_D;I#?zH<5d?GRA-p=h%U@Ha=A(oLt#h5X>gZPWEW1<iD z$#ypK5=K5?>onq4>*6_kH4tj8xSfx@<3M)S{q2bSbg6nM3Ym98$hRJ)VU$`4VT6ow zO1}?M)Q|J#mefNsE{7w?13nj^M<n)0^^lXPb~z+~9oDuTO13ahpE!t^e-Kt`49N*5 z8P^2mpy}oyBNcn?h`Hy9i|0}_F%5fzH^NxftKGe)*C+a}b3&-&5%(-VqUxjgRA$3- z6I>J3>x7Q8?m#kpGuFL4H*QICs~;0TjFVz+NgSZ^ln$F(8ZZOXcfoN4Q&`VYQcoXK z@m#Hdel|m%0cN~rKpDZry&(!&y9edE0@}Xgu}iq%b38fc41*kRlNu0es{8rCdI7U_ z{K?Pk_AT-p-(=Vp9KRA}iP+qlA~m<#ZHS^5Y8IobB5L}Urz~re^;<Ty9Sxlam9J_f z-d5pDy6)HAFcA8_A&ff0>dj|C_9gK-l4xUFE~q-LTFv2L7#5H$g@hSH1Ao;(U3Ikj zU2x(!A0Lk|JO^!e*W~~lixa(vdIqhg{xIY9hoSy%Chi6#=9fw($mNdl8F2MOQNY2W zWt8H{XiFsG(9)iH<AM54mnidVQ_?vf!>yxal})abNf<=-x}m3~hMDkg@sUZQcecuy zFw}JH+tP4<M}q5^^2=0E^XHfSt*92yNs&)`+b@o0n7ph<N7rg>Geh=E<#GJ=y+(uj z<3|i5esSIPmdU&0&(bURt683`ely(};a{j3cEzl97{K|pQb75#*ti>o8tyOsoJ19j z%Wzgm_CT*%B{*G$uTKKdD{pdl(Z9#!PH+6teY=VS&Ubso3M;Vq>kR_J2FOs@g#myZ zY8d_|blPu*D{9%#MjI`JC)7tAv5Y78a^S}E20+OLT?fWp_49GX$>aE9K)u>>Z2A{r z4-;EK5P5kk8|f0q@A)m$kT0usrfG`noEi+wDbr>SHGWe2sPNFCQJQad9(;kx6>H%> ze9~Lt@0hJKg7ps0#Ut}pHKzb_c^+ZFO!n;ZmhLVcl~{Z$`Q_Xc=47FxR*&SNepuKp z7Pe020_-LyX%TTiGHx!*HLv=}KUjq+R`%*Kjg|78HNH<vg<YmdB=)M^hsX2radkAm z)=;Q~bGjeKL~IV`-hyA?sLjRhRdOSYEXcD*?wH=!?}rz^ipG@Cy+w{nfY}1rSn?;f z?@{aSj}Y117yZDp1Fqm7$ENw0?+d$E0OUqN)!&K3xBB1T+Oz{c+3TNn&1=eZIsXRU zP<a_Nx?t%AbcM^WkR%x~ts_T!Q(T3gpcRlE=h3b^qKUvuWbrd^30zL2)}i5@@Y=3= zl+*?Fh<Yhm6D(!u#^vlB_v&;TbaA+NC9_Vv4WogwiT|bo(HbD0brOB%<H`)YVifg6 z)8p>G^iuEOds@-S9cX-;grSxN8aRx97RFi{B2Xu~Z+zD`H{&4lh9}g}E<eWt!BK?4 zH;>z~PzVZO&>UHTG`Mv<x4ozcaShrxG?@r%w;XVkI(lh&A#6)G?A!VF?J$kLOFnVn z#RaHdFY{D{Y3kSd6sd=<^KNJj8M{O3flliypMS+&w_*R0HCjhlr!GNfsA|>8wx7<* z6hn+ITgAa@CHzc@)4Mfet`#76=m*dlpg}GAroP91mSN?g!1JzpZQp4X_{2dOc0sj| z#H<0lOfW)5SQDG~ir4zQ-PE=QWY%z5MN^k<GkbQw&l+9YTN7sM_BmU92{*kOZ-!N3 zPA3fWOr=Zlsz>BWrL6b}8}8K+JU7wrYQ4I0J_tC!3)R+JYOq}KE`x<)?^eKdxZn8| zXg&kBHyBR#+~gCWKFCUUmAn<~D^mvdCSG8{Jjk0^nX~rsbQT}Q*}?o#os<;_1QQyf z$OmCTL)#fAz4!}0ge*K7FTf1kaSFUB6^6q`DpJ7RjOQ$IneTXL8;l{#W&<-C!1=e1 zo0TR{HcdlBsp}#JPbwnXAns&INf58h9YDe_6GvIjHrT<PA(kJe<;Z1DzGpjupEJ{X z8Blw>G+FC6ybeTkdNPzURoyPAm&N&u0R4C5m3B>rpZRP8Jzk1Q^4C$;Ay{U#>(N=9 zFO2y1O}|`l+iId?G1zd~5U|p4ml*7mm@K?^ulEgaLfy<A={?c?k$7LxL<|pUFLiM% z-ppsiYTeMo(+2*W#L7mLP5Hg_M(T8*1}|}%Yj{uwkeOh-oW*3&99@f$RWAeQ!d`RM z5v;u)?zXy?56Bf^AD%&M_}wI|j(^vH5*pZbz98SJ+yHvbNL234!g@d#mj*sf)w-8@ z%-|?EdGa%<HQ*3No~Im_>ics*u9IP){RPCquZ+m<ypTcrjNFc`lQJo806shElKSy1 zw1FIJni{s$ENST3qG5Knw=7hy@fA&HPw9*E3vII?&VbLqu#RhYD0AN{a(+*`<2hdX zTA0+^TaVay<Yb(zK~K=Qp2vy7{jWt~-HQfUXM?|_nDjl#{{bypI#msbI>`6|AoO;h z_+2s_K>D8hF2NuJl`2g)VcUFTvf01a)Y%P8Y0ZZj9=i`OyfQURSu}w9gWcmb(`Hr6 z5`i9hO|?ZPI3A;3R`r=Bd*a$&@lsrS0^<C6Zl|?fKx!V|vbA6=vL0FwE-`8n0Ov>M z11{$7WWPS-cx6!}tE1t+(ez4cpzi&g;Z3hZsgt}cN$alagXQkB&Jqt3Ewo$Z3iao@ z`thAT%Nx>1n)bm{c0lU|2g0))R9C-h;O01%rJjqAI>b2L|2weWO}#KlP(L@=G3|`Z zSP=&IfoXiM&E4{0wj}A;e9Hw}*^S==kuRkr1hBSac;Md0%X0|QAUQZ_I=Vwj{iqx) z0lXQ<-@5e@$aC^_YO|XBBwv&QsVxMk71ixGot|B<;EJ|Y2GrbI>6?kCsMg<gYM2>y zyeAQXq(G@!a>JgF+Rpk@l+EnT*8M2RXi3|8nz{nX5_4oXq$L{bU<)Q2ia1j&r+}zg ze<fO9VQAGQgT^ao7w%@r+?S`~VWgM<y$AtXAOUYLM>;}mt6Qg_$VheKgKXiJ1Ohqe z;;S9IEr?G)-#>JzCnYRlM6VGnp&oXxS!&uZI9N&l9|o3tOVl2RaroQDTQpFKos#~W z=X>>sDtsZ}DnL`Wq;c^t?)BX@l~|#_KF$%=rNkM5wI&-k)Qv49_XrRUOQ>Yk_b5YL z8E&^7PUxPmxo14STXuMYT5Q2h0;^Y|UWrWqg7~V(5BLyHQROI5?0Gv+Zj++#Nk7pv zN_X|3-~4DrM8$Dm^XRc-`8<a5u~Z|Llgam<d3!?Ef6SuAsj<SesoC=@C7x)w(-u3` z3zm5bBX=djQ3G;?5?0g;eHB5Q-<#EVNA#{%se0c~uEJd4qxjCyMTcEe;B@C6o^#Fx z`9?k%1wq{%ELlHd7Nu)gwC#O}VGRX7HMeK)MP466p}oqF<^$a9FeYer!oA6LKUpy+ zu|^gH(p`5wy!!w^ED>t!L$tzXxJ+GG&H7Y!)Dkk8^=T!fya+7g<=Id?<l4olsOxAW z=IS8zi=D#FS@G<U`vp!(v&UvEzhk4mo7(i{SI1OPbmQHWOit<+=9i~fOlJ~vKy@B8 z#THy8IopG=FF4$d8QGW~&BlJHLM_}in#%a1)u;~{aq(*j+amC{)`j1$tTdcjrr8@$ zoHqx0W_J(P;dLC<#q)30U$k7Yo^kqxv+^Q^b3(>D{Hr&zq&}Ca;2TwrOqo{VN`4kj zW8V#}%0U%DA2@srk8=(tYwuFpnU!-CCZQ|EntiJLDS}2%is6$=?5UP^S>q8Et)9); zU7@p^K@}T@4gwmlXpKCl&kWo4-pyh%PS=?H&CMlB6+UG8eBdo0@3N?m-G5FhPlQSr z4t_Q*uLa9qj0iT>+`U1@UGxIf`(DJ8GM?W{U%x9X^qk;%7eV3U2lyd4@toPjg05*F zYJ0G*%rUn%@4ApzU4UXUO6Drv=bpjb^Cj98OG8MS>1sWoZltif1>iJQVX8_GHx5ki zD7AGEXO5KsGCZih7T&r$O!&A}F~nt~Yh7A8>H5}!Q~gmSG%nn6x$iA+Ck-cdJFOu# z%Q&a{<SsO#)jaQnd%Pb>Cr6-&<h;+iHh9l)b%Z-H#V%l?lnm#K=o}X?k2&RD4xf>c zDl%g9cVDQCrwtDZlV>M6+9^mY-*Lqd4N`V3yhWBfFJ)1A!J3G+oXk~1AM!3pHDWg& z06iHm1{Ws0ymd4s<Mi3%SITgGcR*<Q8-^p7@rHaUr!Zxi6ns{b6A4k%nUPKy`E?Kz zp^#3xpHeX9TD-$uV?pxVH-v43oEtewm>19gwe0On3NHfBmm(xb2}ZrC_-8ffI}E|u zd*zA{cq{33wDX8Og{Y%*rAXP<`Gt8<lr?f~!n-Q8hUH=pd!wXQyjN`@C6-bp#2A~` zSmPu<>DzRc@@7I2B7#IWs?bxSEWA131#S#SNB9WERi!vjR2TksIdjzZ`sH3{zW56s zzD$mosH;U&WDURb(Ej6(PNEPexI0F-{{(t&Q~gc&59Woeef;02!YPub3y$ApXgf(c zD{f^^OP+nDL`&p{^`>rJpi0cB5rKl9F|thjX~v5$Lv)>*gj8ee-+5{a4Nt#VSXz$} z$>Zpt3Haj-^Z(tl{{&n)?n8g^i7%-BTi==Xzx2ohGi`l1>8FR2Dayd^1pz+V@?l_+ zGdUI^GUfFUwl&FKPv1_$`Guzpjeb52w|pc~?M?f8M`$1;2otzA*(~+a@E*A-RU!aT zjw+i2f!$NO{KCX==!5mOCTgk|VBc1ap|dwwrfqHGD4Lm@P2Duh>**T;{+>2M8wLGr zmLFlV7ZoFQrcf(3Y#KWEp-`x<*#_WyKenZU=xAV5G3>hV?T{th(SeAwn84?pqoV3# z3d4!F$c*r_h0hnSCw}<C@@luYD2g{V?P9D#G|`Ura=*mnU|cHGh~|qu6%W7DVJQY# zQInCox8#T599N%Jc7Bi8(Jr>rQZKsFw7GQw9?9Emk#*BCRCh!}U(0+LRVY`Yd{6g# z#^L1c-Evfy36onFP;m6^C55s22Jpuvk3sf7zLmaceE_$|@$g=!9k*Aa4`pfj-`(_K z71~BS+@H`-rDE?aj4l+FZ8bHIKSdg*3E-`jGTy!qtRu84-0nr3?54T>rtp7!Nla!_ ze%IIc5OJAkEgc=U*2ZQvAZx=)kl+X3-|)x+4w*51lnbbABMZFyHdx@TSw`7+;W}_M zs2cEr_@p*~Rm7b_<PX~2nT`6rIk-!&vnDuH73iM1ewD8Gb0G`$1L4~=bVUl@IO@zI zsQynNF5;Ulm-B3<LM<b3VKaHh?8qzPu9NHa*pyb|1leqPg79Sxci=g)&d7p!zO+t= zs*M+n;OMqwBMUU3KoO-fg24VVg)(0cPhtIkEkKdN9Ls#I{chxl(WaOM@#b?Qzpn%K z8TdQ4`i%JCjl|T%7sAmAVHnqb8a?(7tv8v!vBP*Mcn0GqG5N79BiIl9Lxbj<!O`2z zlbFnCl;t3_h&OW4<Dp?ozk*BRFXgsp&%D_DHU^2xM>eWXD{3z#G(@Mj`l6i)JLPq4 zD~1xlKzQ_fNnF;!&3DYTb@KX^`-Z5D-dkFv>HY|DDk|HAlqoY+@f_N?>TR88L0)bf z&nV&EFCfNPRLuITUoe!nz`4;#UsvNTt>5V-e<R9&ZI}K&!2U)eo?O$>QkYu`bc|jk z+H-^b;M;Z9o-NvDzW1ABHU2<qg8YS0E;`-Zjn`iBrD_R_!pD^*x#V-Z3(F^u(|eGv zTzpHMw8+;vo6qFJ9Pf>%_14&Ws8D@jyJhe{hl-!07%r0M?C6%udb6r~lxmqBmc?7& zx=OULJ#(q}=vSwZF<JnA#O7PqUfSn*WZuUf?)KJ1n^ufLEU^K-GB|!S7&UiA1hU{R z0+-suXQxgUroohSCcW31in9B>O9xvk_p^B0Gfl?ER<V7*pei=XOhT7|=td=*gOQ?1 z4>-?4jaX=86{YB0=mue4^?OI(XMo%u&>pKlhqZ#Z)Es6L1e|a7eT)yyFn~4%tDHAO zu|G@VE4)BNo4Emt(#}#ny?NJEwE4YvvdR416*56qd{&_`_7MB?buvvvRZS+X_B{vC z^*iQgDt`wJp){)@fSsvxf^@@Ixdz;zVkp|n;Gs9Qx_Ip6-gUEn)JGGNQAa?>v@5}B zoxZN-nsX$4|JQ*95gi*p#LiS@Ek6c!zY19cEf+>fbR%$n5^oX>b4#R3PF2@?<_&y= z)y7$G)OeC4we%utc^#lV*5~}Y+Vm@sA<p(6Vb0$CXHPkha~A&>-TuGm_WxnJ{l5lA zJo%=rYg@HFNpeXDcebQ^Dp#j{n*AY%iaCSHB!_3ehyk-!OFpmE6b2Hqc|(<i+D%^U z1g_nn*aX{7-Pu(&JN-MQ^+oD(-?wBp-?k-G@OC>dl!oz*y;El@?L0xtol_6QAGBmm zee^NoTf3=5mI+oWkk7HW=I*<_FSp@k1MZ*@#=0$qZb`_ug5TJ5E@t}xhjfHD>e*u? z(v+~_v`W+)Ak~t7UW|fIHRgnl)y20b(KfXve6R55LBMXOWY@uqNkar$8?K5_0MF(l zA$gok=d#CYMiFflr~D@H%GJn2hc`}Q3xd~oG{)K#s+~5*^3{s3m&7#Q=Vmkn0jm82 zfjkwasWBk;lN35d#pgzV{7(^m#aS`D$WQ*%*N>h%pUw(~8tv}0j0FdMA#Fx0NIZFh zvywDYBiwrz!f4|xymAc-id=2#bebyD3-(Ylv?NT>)jfao;n4lfj@4?7kH4c3kg-4? zZkqK+7*YGBNrpAMWQ<V064#=D=D~!IH#T&^6p)_5yUmNG{LWpVPn8x#hJhpV>^;k_ zR2wFi;*~a3qzg35!yWitZL`TcL36LELSW-<D0u1{i4Lph93SF=bb;%cIT3}OY<4<_ z^{_;9zNssI+J+7(bt08a@UT7nfNPC5qr#*9;v}Ql&1tWM*Lf&-e5U<Jr0`92l^ICd zHuI9t4m>it#ve6o1ib&&{QrW;^*yhh^#<~)Kksqg__6HJpf<y5jH4d=jjUS>juNMu z2{`|SuS`#HJ?Y@a$9xWLFGhP)v0YLrV~9Wqx?z|9gM6^GL4o_LMLB;%Xhd$OmZ$<L z^$XMSK3tpY$QEj}XT|qi{l43oG=1wbB*RUh_%2-jqMT@AC@KT3Du@55ZSwyCH(RL{ z&Ix_o9VUBFFV19DcVb;Xd2cN{XI@!qLndtkkder+R7>dOKZc{~Hs4W>VA0nb0Hq+T z5s$HrXbC;=ebd7}O*XKMGnQI8rP%^{@?0dHw#b?itTO6Pqma(!otEfyr4L~5qsg@z z3wW)`efTRWA?uBIMK=lkLY5#VWv8ivTbsN<PvRKPH_sVDmk&D+E?Lp20M8tm<D3<1 z^YF_YID*me#yNhvdcdtr4}CiT%-hkI<ibcaMdl82)a402`Y1I}?R7M~bMM!YZ19Q8 zXL(>5a=EfXf6Apl=7xDmlV$jQNT~m2J)yZ_b9Bw4HeX3Z`5OKvs3kSmcJHdAMt+5H z$cCa3$THXw8s*VeeVP0>v&wY7b5-QcV`7WuYCi2Kn=-M1?SN2x+;Zy}XYvZfH3aQ= zEE@vccwHd!KK~(fKn}1tzx7x~ERC~rWr<F9@&S6?Bt9bQR`3rlhy^?LE_`j?{n;Xg z+nb$6j8j|M-hKjh`9O61kkHPswqTDJx|-#>8#2P%X+TWx&j1bj<R0wJ@(3C)m!@7- z;rD2H?XYb2tCVxWln0@7xN^M*!&x|su9?UfpQs0|9$ptea2Bp`ZSE-XNcy?kD_0ag zP9f)o_Otut1XG_gxraGJEQrd$b8=5`b?B<aVC2JWS3OkqdC1htll_s3<TZQbyb=rg zs+1Vk+cy^v=_EL+AMGw5zNxs{-H}YE%_$1oJk}Jt<GXwP{kI^PA}}&noY0&ZV%lwz zzZ>&Sl|g1kjiCn<ckOQGnQo*0Og8Ad0I+P9)0I8`UaU-$dC8qC+lwQgtwr}m+=FkI zBlC}iYLno*)#T}R^F6=mQ_tu%`&artE~P}MET*XJfxLHiP}h8ZVa>zd?Kkp|4qs~; zcC`a?EtnQ7B0nvl-nmLjtlm>Qmm=F~64-=-6F}}q^G_GlFP!g_@ek%RKoZ65hn{Fo znM?uhmDnc3P1{ZRq6QBK?tmEXh?#Q=<~JYMe$806{;^&BPNADU3~9tJvG6c-Z()qW zFN+9x$)o&EO<LPv50AtyXOgbMS~n`CDtx8EN`oFwE_o_}SR9>A!lhGf!hOn%QZ}{F zA>Dy*uv`gx$4~kQtl2%?ARqMQ@e=wlMEu?#Zqp9{^ybnfs@G7x;E$V(KLhq@bV#F7 zh!&sWJxw)nlXCe+P-m-|C;V25$;3G!+e@z(x5UkcsGi>bzh#L3!vj#9^&R$&do8^t zDQSJJaK5gwQhM>-IrHNuZKNvLN%i6S{ggTqGlG2c$QyiMxqg)YlTNW2IDN@!FB?Kd zRXSjHUYmWYi{<*RV57pFMCswuZJuv*=MBMCE8jx=MZ1|31itJ)2v|(b;kE&+JiiqE zrJ0U;spPQfdUpNR1n~^j&+uFGusq%T%s0?;t<MC8^Bk^fe0V18%^1rvw2FN8ywv#6 zj>Bo^3MF<h${x5w0_!wR%3U*_t;5u%)LajR(-?e{P|A=USL~c+&q+l^?D`qt>L~s! zyph)$g-<z%IJvJt%<1o)IKLUrjJU@&47RR8#x97UrXb^l;>iHbkdn10CzbXAC2LJr z#N2^K+*4le`&qtS1IZKPy_^&De<&w55n<M)H@*@yIih|qhhiFb7=3evW#niAgs4vo zzi;MMI(mYlHK>p`Qku)Xd`f2c9lyB1x7N#Mk6_)one|dHW1gmvN(Pn#$g{XRK^}B3 zZS6AZ2k4e7csq;X6ADSW9$N_=kcS!`p1hTVb<N#Bur=sIIyq8#4AyZ<4*1wIaML$% zH(y|o-T13+6Y6H+h%3P7&{SqNouIT)<DN_L+2xcZ@+TM^B8Wn_LmrvVm@!Q7rn|qJ zy=o9(nJOjowA;fANX^2;tmWXiAo*t5JfJt;?K5kyWVN1X0En|Q_Dx+NOTLVt35AVY zaP_C~lK$xtj>Q`(zM}oFx!zhH!2;d(suTPgR}e+npC1RxUe6zK_4|vB6M+|gkiloa zu*8@dk#)?@h3eZ>%p`338|l6B{Oniy%H2#<0Yqn{6<uMnvG2BCiJS-!V@1C58Oase zxz5f(;r#m8H6Mu6QMOJkWG&RAwrf0jeAWFRtLQ<ON#@*&Kz`=Y=f}D-ce<28OA^j5 zEUx8<5!b7*)KYTf%{{+w@sLwgFS5Uyo$uV)YR?h!9j2+?@%bE|b$j(yCcC+CbaSn* zr4EfotNJ^7NVOz4NACNYEpV}Zuvi1j-h7nNi+a>FxRQZxg84o&l6@LSQBW$-Mzs!g z-OeFxWXeq5+}C%Xa%xet(2E4gVW)m%RIBG^_7MB0Wlk`Y^M;g=%5!3e2Dc&Plm5_J z&G2D@l^8^UP>c#_d+kov@l7{<?$>Y&qA?8E83D3C0Si0#{uUVWN45?Gk8`U7?N9D> ze0KjW&J3q$PHbaorY;2d1bn-CM2(7wuBOB|C{A`gjm8j5U_iW(iX`d_<qffGYtf23 z(3SG4^7Nl*02S+<znDCx|DH!B<@`+O9*@`M!TXXN6h$>fR?S^{>dVfzKZ0i})<?R@ z6ta)P=7|;mTk8KvjsNLeC3}jd`}4}1H77mF)w&&!c@qE*ywIXlvG4fM>sWl$E_HG~ z7I(R8j^pXdthev1ZDo|->dIang8vY{HTs(^$S67SyKY0d`v<dZKOzhZC#;-UtkrEy zj`>j-W8!=e<-){$;l`#$wx)+4J)R}e^-oGnX|GMx8=$qbBr45;&OF`>3H2~!gLruS z2Y|YIQUMzLCJPm4gYQhOw=PC@MeK;sc78d)R#a^%U815&7d%<B3UDg9BTn0CILT}F zQiNtHP5+XLs2DG+7bCt!^hT!5=Un#df+bN@D}m$7XHSIFWG~fRSn_o%0Ly4B+Quc* zFT@$NL__q{p3PvmK^Ih>SIByF93+-Ryp1j@g6X;%`IjWVk=m(wxo8DTfC~JGN9cSI z;`99UTL9aK%8?ppf1nfb*3@%DfdXWIThkN`&05YhM%3VE-PaFQDWaz&V|AHy%^nBk z7jc|EET&smb_2fq`4RpE7wq*SHSBmvY)Evkt2X~7ub{+p`HYNeh}c1$10#7fRO0hH zidbyl<~HF28YPP;C=@VvUAGM-Ys*LEYR^PkOqKoC>D3)Mf=%&bZX2R^hn0`bb6Z}u zUUH}K){1xUiE@2)&`vsUuECt@tSdtE$>;?wv!2)V+8Jqm^^`A&HTsCAzeLVg;axL= z3x&H==X1LT%~?f)v$>oV-1m)dgb%|no+OlX7i&C<-w&!s+v7Ta^fo+(r#`&Ks&Z_O z)BZJJ_M1f)xz6e&-TUg%P1DP-MuU9d+!;)}y_@<6ia_p>-@SVzY3_P>{vJsh5=n?_ zv4<FqK)(NQKB)3<Rsi-|HX2Oa@3i`UuMDAMC>nsCJt)qDDFclXK^az?1IIRhs={~v z;Gi(J6TBiqtU`K`xeTRQ)0X829=|e|UuCyRZoO`N%fGpY=Dp5)%9xRx3`b_ty^)NL z;g{K3a;eKM*lR|tSbx4}DYds;n;$_Np0+DAbIc;c1cT+M>#H#IpsLaXvb_3vhWta8 z7SZC%=v=)2ZbMMlU?{asxM?FMgQ;(S!OA0)B9wz~f|%~ut;ub8$P2l7xWBbs&8U=0 z^Npt5)}ptfgowCA8VZ9R-eO{NnoC&RM*l!BQEqa)IO1o8u}q#B0>WmrE`GSMF!*jZ z=6AaBf7*xtrN`t#mRQ36Wv|_ukU5&<isNtgw;}|Nc<<m(kG6%>ZyMf)mOL^MocmA% zu1eUcElr*-!i?4Kk#9q$r=k6_M@L2rg{r6Lg5QkTc`uuI_BNXbr+avvqne<mL>p&b zU4PYcW@ZO{@$QCn+<p_CRz67N{z^=ZT@L@}@o(GaiK1Gfn{j1HE4N%9UA3rP_Om10 zONvqXytjP5vzK(Eo|no&g=gpg2f|r8id{7-v8%5-y#NG8c21qOWD4U2Nxyy1_*>88 zc0OK8Nbl2^2RLoF#T0%!qzHuQaP5w=Rw3tx-x61TffU!<gI|y~jV!g;BV}9+G-e_( zlV}tc56%xrFY5o1ab;%q3D724h9E#~5m(YICDCD$iv;agEgd#MD$fl2ejM5Fl;<B$ zAE;5nr3ILkfzuN(5wsuQ)Sq6Lv%<a~Y*hS+vx4=D;p+M?bnsKHLsO>Bc-U?HlP>Jv zaY)b*vn!{6OyByRJ(!#EeimW&lT@SyTs}H=%3bE=_04AkZor$SpQuE?TGD4E^sSrr zqsmOWH0(?Q7Ip#W7uZf7{Gwo*^6EJg*}MlpYkAUshw}M?B7^pfaaEQOT(RGTSuQjM z?%hA*^?og7=e$?#{PTIkU?am(Vt<2fZ#^H^(&?VVJ1*?t3shAelnZ%Rta6;qOi-JE zh!-rUizWPuskNKihkoyLu4p0Xx^jF&$=A{mc)_i`#%I^I6CieV{cN2exwW|O-cHjm zlTq25q80>n?8~7Hkgm+to#Ke;6`DwGBIov=*9gQIRDEm(bxpquUgZh6PZZ}y*lmeM zHrGv=F$8qA8I&R=7qQQsJX)r_hBbI?ertEJKSd)7K)B0*y10nCkk(B$Pr7dhZHTK! zL`A3FF;~B~^iK7^D0>I-IC!WJbt)bIuC@0Dg=H2wB}{R8Qa}oaJ>=DOnAOmuxSIP@ zrBh5suB_K!*HtcgTi&SA5&?qauSvUlCBd61!VZ6xx3b*;kApg6zP%X!Du0`~k=^3N zTo&Q5F_WZ2GqmrGk%M9dq<jj&!0GX>VRawDh}0Wiz)7F2P>67O1gc2Xbe;~aCG^)L z<L<4}+b!#WdAGp;lrGf^FW(Nzm4Z`DhAq=gXsKemR=dw-gmuYvri4C)3H$^#)&6bK zZxq|5&igRY=<_{zROEUIKoG5&1z~4CP_L(=^7}7A&VRCMk_A~~Est{*j(nGQ6bI&g zpNNDLjT;6pkt0Wx-trk;1Y-tO%1Fjl-6c)FHBM5cj}PgjPwv_k+fQAAtOv0KDC8-f zjHd6qo;|YbvisanUANHaN!s5kwB8e$ublvfF8^HFoP{X*so*5mG~0w%)P<#VQzJ)W zuNhym7sEVo$i+k#&Y0D9yY?_Wq8E%BXn?s1rUXpIb)@&^_-lmoybJ(bxwo9?lie`k zL#8=jQ}tL^ve)X{k=fHwl_N)Xr_e9!#lQ^#U>-0Vu=T@L9T^{;Ik0B6hM66Ip|l>F zJK+kF{$8E7lbjlqzh<93QGKxXBX789*!t*Q&O~#IRHB7wuNGXM+%x3mr`f&8^2xf< z_FY!%PPw(no3|#G3U9LTAsG_H$Iq`^kw&N#7{|S{2B*{COFF47zVg8$t4FCv8Tu&1 zduQU{hWV`Z;BXosKtlrjMGV6A7-T_Mx5<6j^E;X$b>9VS=6qjN;;A=7XNfyS9sl=r zru>_m6+2}EayEIbl1JC|vSgs2%Ekbie(=#{Qku+?MTgdE@K#;^r0cRZni7%-t+ZMA z0rD=>Ygx3%)JunbQ#SuYNMuQwk50gQCM-bJ^1}r9Xm@?L?GW?C<Bb@P@GT4pyf^8| z6mHDnw<?&@pb}`a@P4IEO0dLotwujV!IPDbfql8%rWJN|-gD-Lmp43oqGV{l*~Wh5 zxW<+6qaGQ*g2u2fcM4-St9^4QV%2mg|L&K8ET@<MC!F2NssG0Wm8EQI*KZSMn=Q7@ zl7MyK+@s-~y_Vacy}K(&ACLG?ka|LAh8g#{{96z;QVpx#nn%2u#|9G{ahPk$9wAR+ zMZ>?VR;Xu7SR<du44|&eTp2^jEo)uI_}md)RUK=ZTK71rdQ1>xE6NKb)|&&%E>tKD zwWqc)Gr54?@{)Tdrao&uc0L~Kvn>3fsMP6ik9JzC0!#98_9lmU96P>&V6fJK#yrIo zQDgv=r`2CLu|$G(Btq(kZTZsGIC$n~|5Lg8c4a1E%`ApA<`w<hw}qE`Da!isc`>g( zo>4#p$rEQK21JY80DjG2t_Uz5<^nIj6@$~}R(qN8;1i|lkJkvdkg|yIAC?h-5x@L# ziWT#b@R{2h8R{1w0v299IQ@oZO2$pt|ERS&rgJCz&bp>rpt93wNMd*~T)w-0$&kVw zt@JG(W%mq&DgfCn^}=4+G9sV!vX<?cw2n3?W3YyuZN66q8;V@c`SoTRwY^~;@N6I| z`pYzk#bsJ$$8ISGe5DfCWkES+FgWW#I|})q1DVP3bP5zzV||I%a3zm_vq#j1v6muF z^xv2W5>hgabhgUCru#JVtk|01t|(hluDDCFY&))1^^S0hLH2Qs*{<_N;Y-%-$Ti2A z9!on_<3v(Q?Q}K~W&JajUatbl;16V|^Ub^ip2otjUE4FV_h~MC=#F`N^cHzkF#?&* zb}H&2rOG}Qaq<de>{mU1Ebqh<yP$ZEtSWS*;xuX#`ezCJQG|B>Z`*ff$ycB0H%i_L z#>7>&O}Q`&=>3+u$(3m>lk}9{u0L}=EB^WG1h=*O!lb9!yqC=W%=6MJ>|p-ynBKZw zrbT<U&sy)E(Y|NRn%zfB?@hO#d4A!ZH9bl<rHXuHW(G`Y{PgOceTa~V`g|s>p6^wk zQ*WGHw7z>~r*$3IRDY4QpyRlfBQmQJw;Yj;D$5aB25LFtys&+0&;dK;HHWJ&uiIc2 z`{Q@&9P{XM+kNvt|17#}aqIs~RtA>HGif?6st^B27CWc1!7=6KI|+sZ>ws09jA7OF zrwT`A)*Q0acvvN&QlH-0#n!;g1YLK7w(k}{x6e<bZ-2)8TcLHc*2Fyf`qyBcU2MWc z{^_s6Uq5ZH&EDTq4_w3Ybo!6K>ra-y-n>8QJU^@dj*EXE)k)00|Am>sBDXI{W7iF{ zc^(tx4{qfwYME%)`dq*-AmUZCt@yRo&X&_ML>QN?-=w_!$(<XYESFb1uw3&M&@exG z-uLE~+T-{185q=$0GF=Va2;*=WAk9D@WgK{+=5P1jSHIt=5+YgPg`uAd+7ZkiSF+w z4nA49Z%6m@_r{0L&Qr|%wC?Y^xpRDPepU?-$~(Dp%Eo<~-}XINvPW;q{NPpVx89EU zeDv*wUHj&5(f_i1)6M58VaLJ>)TjKIduhVE%d=|3WbAj|`?mR-{@HEPmyAQhKbL>q zv^ntn*9gzwNw;p~c`rWSW1QD_WLwy|192CCZY<brVYsj&b6uw51DBcHJ$`$7+dE#H zbk0=Vpe-n2z<BlTiId^G-2$?fCZ6JazlNh@;x(2;LBVHhJGiQC-yPXf%jwfH`-yq3 z+4kSx*YO{U_U3r<YS)%rKZE?Y8hT%kZmR_Lh4WRu9Ttj8eqB(y?y7BD-2AJc;i`1s z81dWlek$$WRouUOGQViyz6>tAQ+wA*&b9kodAPmn<F+g3Gw1uhW&w^_oy_Dsn#Q1g zN1yQ$ck`>hqyz6Z_+0+N7r1HnqMFV|>$vRSLNhuhC@=|2mp7VB-xQqYGI?o0S*NSh z#>b~M!dlksoz2lJS$WCIR@Q#?WA!sDHtUFJ=g#kOPL#VcVb7`hz0R}ybLSkk{jYj= zit6sko}6>-W?u#cjj_c?S=Zj3_gVJ*>Pz}%-eq;e`&QQ5ypr|FPC_Y@=UR*UbUST) z2wF#&Q=7HiJ-NL0*tY0}6=F5B-|2Mv?>qqPe@E|=Se4|-QTcS~*Wmlni%qxnZSnKp zd|qX(QQaXPdvVUAXQrzH_mml3d#IhSX*}B^`R`mi?#iV$f6dp-oG+aA1-OFk4i7LP z_SMTj)9IWHTJkbE^$d%b_>nymj2y2l?cHspB=G3(#h4G>r8f_}V3}L{UfcIn^v=06 z#O+g<w(NcOt~k}>z_bNbW_up2+a6xK(b3{buNm8;C;7*FPOe+%?{!=5_S=n4Mo(r( z-f!F2^Y`TupL^-g`ab?YCl(*|%75`~b+KC!pMrh6!sbssmVYMd<K~O{d$+xo_4#ey zwYg={?A=E{3QzjhIsf0TfY-*F!S_y|&0;rvl6!9Ry&pe6ed1S|=6e~qCs$qOBRMPg z$Qh|eo6<f39Jt4}7*8Cs#%=+Jbr*OXZ%M2saETsVl&Gb2Q0E;m`13z>c5sxm>?>2y O+CfiOKbLh*2~7Y3L;mUj literal 0 HcmV?d00001 diff --git a/assignments/src/MV3500Cohort2020JulySeptember/homework2/Mahan/README.md b/assignments/src/MV3500Cohort2020JulySeptember/homework2/Mahan/README.md index 0144d62d03..6b0b4f34a9 100644 --- a/assignments/src/MV3500Cohort2020JulySeptember/homework2/Mahan/README.md +++ b/assignments/src/MV3500Cohort2020JulySeptember/homework2/Mahan/README.md @@ -10,3 +10,11 @@ References include * [assignments source subdirectories](../../../../../assignments/src) show examples from previous cohorts. Questions and innovation are always welcome, good luck! + +Coded two classes: +MahanServer +MahanClient + +1. Run the MahanServer once +2. Run the MahanClient as many times as you want +3. Enjoy the messages from the two consoles \ No newline at end of file -- GitLab