From 7d9536c2fb5c5a3bad903fe8a89416d53210e53f Mon Sep 17 00:00:00 2001 From: Nikhisha Date: Wed, 7 Aug 2024 21:59:28 +0530 Subject: [PATCH] udp-multi-threading-resources --- docs/.vitepress/config.mjs | 3 +++ docs/assets/resources/multi-threading.png | Bin 0 -> 47673 bytes docs/assets/resources/udp-ip-packet.png | Bin 0 -> 4934 bytes docs/guides/index.md | 2 ++ docs/guides/resources/multi-threading.md | 15 +++++++++++++++ docs/guides/resources/sockets.md | 2 +- docs/guides/resources/udp.md | 20 ++++++++++++++++++++ 7 files changed, 41 insertions(+), 1 deletion(-) create mode 100644 docs/assets/resources/multi-threading.png create mode 100644 docs/assets/resources/udp-ip-packet.png create mode 100644 docs/guides/resources/multi-threading.md create mode 100644 docs/guides/resources/udp.md diff --git a/docs/.vitepress/config.mjs b/docs/.vitepress/config.mjs index 63dfd8d..816ad1b 100644 --- a/docs/.vitepress/config.mjs +++ b/docs/.vitepress/config.mjs @@ -51,6 +51,9 @@ export default defineConfig({ link: '/guides/resources/blocking-and-non-blocking-sockets', }, { text: 'HTTP', link: '/guides/resources/http' }, + { text: 'UDP', link: '/guides/resources/udp' }, + { text: 'Multi-threading', link: '/guides/resources/multi-threading' }, + // { text: 'Internet Protocol (IP)', link: '/guides/resources/ip' }, // { text: 'File descriptors', link: '/guides/resources/file-descriptors' }, diff --git a/docs/assets/resources/multi-threading.png b/docs/assets/resources/multi-threading.png new file mode 100644 index 0000000000000000000000000000000000000000..c62904c36e2ff014d362fff7294c11186633b861 GIT binary patch literal 47673 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%0A4b0+C zzkQnJ_j(~cCe*>$@2X%)v7z&bd!=!*P<>4%vXI{q#Tv*AYegGHV1^fYUoWU4s7o#7 zb$?iarF%%JiYhMWTntu_y7#&{KbkjDLnHC&{zOh@DBZGbl8&a}fWSzjXo$hFn`@s& zkBi*w_+W|>4K59X{FcSG&v_MQ+)_6h8dB-+Xq`ln;wtKD>+hE%ez~7k{q{9MW)K}$ ze0aEbzFtYeT}g(cbW>OV1Y6lN_Erj2_iQbR(UCmfMV`Jwb=OMmG2>mC4CPKRQ@cFs z?c_O4TEc9yX{CB;3CY*nADf2M9-brNLYg&?RzV#(jucoY3Zva_4pZmturCG>M4o1# z=zbDG4l$E9El_$m8)q;a{BixnZAy|JHEOlZpF_79bc|ledvLV4P99) zI}_+BRVs71fm64myrkRrWi)}OyZq)#lT;#0$D0pm=0Xki)70w8xx|{ns?ACTrLQ`# z{?Rh&U$PdOngt>VpNL{7f`0ZD5J77eRU7|aJr1zHis(`fCxWg3H67h9<2d;H{{srg ze^jsk2TM->P?`BZWPSfwUHY##$jwC%LAyqHPa?=hs*niE^%yVC02Cb%Oe+!eAnYLh z|Fw$!xtBoQ@NKfO6cmit^0##tZftLg^1rFqw#*@I!d@subC>Mgg*CGu>Z9QS<0~)l z5DkV3xUgWpOx-&zMSX3JwUYd-90=yyT=~u!oA$Y5MhTt41sCDQV>DBga7tCAb0@HlsjH1j0NO71pNwSJ9k3Y0K62u`WA956;n7!P&opg zYE%wAA9DBIa3NA=Lk4Kuo%aJOna~_`Ebi7Xk3nysLH%@TpBW5u}XOVMeT6BrG7d#oL`b zAq@Z61OEzM|C7j0A&HeIsMkb5HYpH5OJ~O%X!AsY4UaR&sS)2dfLIB21X2lyvm9gr zq@?A)?%DpvM*POvSIE*DK<>&BAAq|%O_7{Zr<{-NB};~*mFYu0Hb)(kt)e(xW9 z;GdR5T8u*hJ#e>9$f39s>cm+1#l+m{A`p=w`){*MJE6Oe7Eo=d{R9ugr7Ye*atrpT z&@i}LQE}f`EZUN~_58zVJvX zq{%#Sep+BbXk_*In=E1e%33tbgtVFPgvNOJ%`?=3&KXr8D*#R*z_V1gB=8!jHeudEOhCi^P@a)PpetBRij zsKL$A`WphmQ8->se1p;)mX8n&p+=yU-HD*@27iuBF$92;y9@}-L&z~K;BUtNWjO~w zunon(^S_i#2oeNzqwf*Bm{UYs)(Jfx@P=UOP9o^KZjah=)->w)+98YR85z(RYz9OL z%jiQQC=9YMfO95-sMul%_i~bA_8_&0-MgE&p(hs#0muaGsi$=d$U70gfT|#YUYZjh ztR~F4g75$)^7{XxCEL?!WgWnC2eJ;ql@Hx2h#)7EX8)y~x#i>7!mXKC>8>5m#n*K8 zIQm_$W<=i{pg7BjDt^7Pa_E`h<_t}&@^^Nga<0($u<+O5u+qeb=#s+PpS|26g7z~u zonQO_H1hcBVnkrWQWwqy*N~YhRM{Bw-9_z+dJ816yh(aPR>(9kmEJ2o!LT&oNsXidkp^@DN&i!1A*U5g2B~ zE^rE_`|TsDSis*zw;{*+YKOTT0~kPc1tg>ufG-Ucpm3KU$G~Z5*l(Z9fdSUYbi|3z z&pFkLvBv?*>Ne9Z#Of#%f1VTn9?{zN+kXceV1Q{~JdGh34E|-#kcFE|sJ(S0ffP)5 z2th9(0Lz|L`0XfXfTIXH5Jqw)2%IaNSVj-%@c|GHNB~FY{rg3fKsf1c0^{BT|6jU> zDf<+gDD0`;SvH(!f%CExfwCIYJ{Q_>=Y&3~da~Y0tS3T9Gn+s0!^_Bs(p;bCkJ8hz zQ>q2U)XS$v8oq!4H z-l^Ce|yh-HTJP1 z+MBTt@)T~DUW<7m1Q*mRra!FRSKzys#3$dXSIod)`)Sx%XH=185P$W@zNP-6Ywo9Y zGsVQ2$mh;H!g)37H}u{;eDvn=oyj{~(YM6RtQT2~9g8Iul~`MTAhQf|jHn)Iltl4X zMi%D`YiC3%+Mw;SvSAlBupv1M=4HH9c@Y~@5fA*lI^z4hPT8yq<7%!y@vzyg4!UIm zet-W9|FFIrLRe9BZt3|G4=UKhx=g8J;}@|jQ6FaHXG+v`6$Q{o{#zgamp!sZ*gq{X3Tctx_#i5&BEcQ5G41&e31N(av{w~fta$ES1vcmJlC zf}s(l@;#FO6FsWw%`9G7+L&Rv<&99CVe9wVePqFF&*Lkd@ zJvSMjTwKiL@08=!A9MHwao!4le;6;l0690|Tw_)=#O*7+>-WyAtyH6zyv(v>^UiVl zyRYcGE0xV2a^bh5cFvx?NTL z;^=<&@?3r)!+fkk9=Q5YKf(N%6@@9S#o>9;V}MGY zaNF}2cUZ(u(Nu%Tr05_E3}!0Ua;@nb|w%MZkAD?lV4IzjPI zVys0r0C_gBALJ)9YBiS#di@Kr`wfU>!9dzJ5DL)c_ai7=J4cJ?nwJ!!@;9Fo)WdSq&`uf#n+12*%pzW>KTDW$>*AeL zK0pyz&C%m$7qfu0XBbxqpw{Sq-T^bBRTBJw`l)`jyn{UcotkUS|=I> zuAB=~x>z~3Rava%tHOc&tZ6GVZ-4PxTg1Q>)d7~(OV6K^U^%y%i6A~5>9hDV3L;2b zt`Bxx^YfSxx{wI~QZLh48xb^ZA3h!(C`eBtoZFjZ{Al)GnZ&yXGe5}%~F0n9xAb&y6ZHMzg4#y&R30NL8F-NqUSE~BEM`HkNHY- zwY;#hVjiRtnXA~cU{rVsZuIHSG2oIHsy-3jRXSpdNsvK+qoM?@hP?S0&!VpCX>?B~ znQtfdAz9$^KL|J00er&CGes{=;p$(J~K3R(3DsagfZ$m#^Ykb_aQ zTHUO}+76DwErmy`6LY2&tV2-)j5z@|d=}y0nY86JU)Ma$3HJ4x{@4qHTJ`EA@vvmrNSBrjs+- zQ^z0H(%KA|n|FAwBz8@jNzl+IE~XB_1XMKrk-|zk1d{b9IF2UPDBnJ%7h)dqi2|zW z#aMm=x7ixa4uvjD2fJp>4HxAWxvVg+MrCOHsko}#U|lU{WNgxK#JRMKoyqldrlp?t zy@7PnPnlL06Z7USs7gTPF$70(Q%2jc)KJX8R=Nx9=&PZd$6f5r8Z}cd?cB^~UtA^c z_6pEMNkGW(wiuO?#)Y+yScSvEb<~98=k1zEExLqPC1hzyZv3Iw+Dijw&NkqZ%)`ax zd^>K=fsF*U#+F(UPN9KY&)bZg>NVi$nd>XsgPtpO$)XM8JawMl3KVzi1~ zVOWyXIqd$%!T*`Cg(83)+1gqvrj~o~sXbq}LWPoAomc>XNjI}_e4O~VoIn)V`~V@m z-w!`|NO9T_h)9EcQ2^Tdan964kQ=}qyRr=L7CIW61&_tMp5&N>$r< zNf@qQbwL)wJ-1|A6VpHyf6*8FIjB7ItvA0iXRD9XSuk`N;i<^bI?-y;LuoX3unk>u zm~b{z`ZVRWW!C>|Q6|XCGscSgel|Z`qmzbLbjf;Tg=0%~5~kKGeJHnkKiDR%DWiyG`8lM!4E@eAW2UOfYsooA^r z4E^yXxbVq^G4qtFtV;8V+;2BLU9PmUaj|FQE(O#sDmv#(bqIIURs;r|Is{x?VCSJ6 zZ+rZFo53lccltPoK{O&xP|UF@IibiH19WFxgj$-ej7f-sab_p8M^=OVv4I0c4XIwa zrK}s9A&Rqsea-3#1r=pf6g?UYqcSq>PNOx$V>1Lhn9{YJfjs>9 zp;k5^QD%7dXt}9g$m-O2-2u;oJqitE#U%~59}$>FyaRM}VrNH`3wer2%%tvJrEZAq zT;aaFG4vkd1^o&a(Ez;OFf-(h5r@DYkQ8*%%Ae3UGtcy?nTYE%RYQLe^{!IgVaX z`}rTL-jyb1fUHSjvd&&^LiRI+o~dE;07wv@T!0>5wSjDG>6{5?2tR>k|0y^AZDhQn?o3IzFK20nC=?Lcat3kvimOmpsf z?I9*0KM?ziMdLAP0Wn#>0tFVq_-4ek&RGYn7`D3bdobR0$uWpZC02(y8lVW(fZB}G zSbcPApOq!uZ^)+5h!T-HnD)#Js`7SI*RSqhErUuOP8i;-h?|a2s70b~o0(0TO--*! z>_p8?5J8s}*cOpERfPfE{YrUDwoQ~v=VU{gZ)oq_GCpOl-gT@)EPkvins<~-Z;q;F z{zWA$@8^oi!`2DtPyI;YKCDN3$I%Y>yIC#%)jpHK4)XZKcpn~QdP?VtLv(_JX+{>EW}aeDw1smi+otRGi8*w zxpbCS*Eq`7p^&UznUS75AtCY#O9ZJ5<4r%{?~f5Ux(Z-Z@>bbRB@TtQRm1neu^g)TtB;l~L<542>h<1ZT z&M5Ckf>u7yk$5F89!uIXD_1^fGu*&eu;%-MG1)oCyho|xYOk9!=o!;p7na*sr%N9< z1We9WnHXwx6$$~61Um9;SfohP|CFzrz@tqYG!$W4e_H@cy9})LtJ6qR2o@Epe1oA zO#Bgq-b+@&8~y$SR@iDpeU|+!Yqn`<_~tj7@=3R@u3PtWBuLgWuV7<>75uWzVOh>q~J|iR0pfoQPH>j>WxSMOyZoUmDY_ z_LGl{-K5t`0-*CTIKHfxE?3x4;RK2C25T?SZBsLiN!7G^B<;632kXoMc>&VIrPmun z&APeesQgnY!*3}Zdhx*wvc6djgw<_ioLV)^{Lm9eF`t#z0thegSFOcJ%$B`i91C|K zC~<*Uz@{EL=W|yp)m@H~$RU4Pf3^38R18CYS%gM~rrieBw`?$;f_d99!GnVz2gYc2 z3?2sx<5cFipk(EZvtcgWZ#!{`-L6JQWUOREaTN;o9VmpA!O(QB z-V%Rza2|!3OT7`(E~mOuX4!f1@XPy@n_V(2F4(89R^sj;g=mwtvl?{_aapnMoFOK? z)wkPh%MUBZCr+KWhoC}A-xptzouj#nl)%?N{!eyh{I_L|6cTe_1?iOmiQ5}VK!+&P zJmtz16cq%yttPTb%S%=3WAhT!C0SFGl{}65ewcjO#?OXD&|_IcpgT%HUWNbD^oOZ( zb*EVXj;W6B0&MXQ0RmbFpo=Gp4fUdUa-a+9wg4o2$%G5pK*6w;z_1O_Mab_BCM{XN z>Egb>pAQsA1$27}a{yiB5yjI2bTKg$FEm3zK>Xef7p#;^1aBV_W1OW`2 z{sg#^GiR!&9KcrNV~Rt9=&=A|KAaO@1VLNjzd1HgK1X2k z0Fr&iF>9GjIEVTUslg(;fPs=d0!X&?|0~O8TKn0t+Dt0V@snfeu~gD6H5WIIg()r- zs=_#R8PKITEn5NE8oqjk25sJw+YMNTj8&RVdMv1vHyV$pXCei=>ZWd`5fuGO= zB~ucI6+l?=cQGA#e#I(z?YR+YqO|KTd|aNynQ}$N4J~lHAl=2tU%916E`si_wd8fg zAIOxY*j*G`K3QfqSZ=KSnCraboaa0N{jr4lJ1N0mn*Zp3X$gSx$N$6f3$EcNIyf`V z69c)2!mPGxU0KyC8#y>XDl)ceP>+gp{v5*pFvL9nY5bW5t%$S>$$1KkHRdluDyAHt z*{GE%)OA~%?_IQ|k24;>Upc2=Qy@(R+Ji9SseT+N`Yd)@k&L;)DHer-SOaWS4R#OC z$z42EJAbix$`hHI^CnKb4-^;}I6faCa0k4jb1XHjyT7V7R@t4nXF-vIV}!19vDdIR&>71PHnE8QG5=W)i9&IM*0 zA74yGg*dq0P~Tcse-f+Am2=)m|3{EqIF_|K63_8GQC3FFw0M~F?)5*30y)T+lT_*A zT;LBVEwnjg-C2~{p|lmT;QW(YKrBernmYYv!>4%WrJf)v)o4|gcjLLqXhY*IzH*2j zX7Nq_%7K-AlyR=sgvyqH8!~QK8`&iRRM{KE(J?eQ(K}_Bnm3i2id+wdpIkOGHEk(V zrlRT2c{QD-r>>BC6!S}5@6Rs4^@fVd5nIM$@pn!f}_@;LjMe{O_wB6Um&C!99>;8z3M3$|^eodmD>RUvQlu@MhLnnpE zPO9RqYyc<3u`yS08mXW6idZY4ZJNdVD+j3dxxi?Gx|JC2uOW-%&n5XEmBG~^zzc*swkB8TxM|4DxdzMt+e62)&=IOVSmxG^uM0w)*Qmo}Uw10UhR6}MX z^S70~kdj6#LmyFDP!xWk*E+q(!0_e}$EYwp(kXU7siDg!)w$yBh7K!FaqkQJh)p)- z#@ILR>fC9Y+vcU=aFX~5cCO6s7eCf4J@tK|G1FQWDWk8E$vTtGPD4iN#z)zO2MHEA zE77TC3U~g@h`>P4aX#}z>ka2QBwXE9x1{0jLX?$xUS~h+B)TY;`Gl-ek0Qr^e8ifo z>z;rQeqe)!rlphe9om|sRPVTF7Ll?)$;&KW?VLO4(E>l7^_kNMr93(yk{S;1YM_&+*YG~gBjQyG>zYCFHc zDf7C2=$N+&%6s7=PFGLK8_X7xa(d|*afcENbA>@r zKWAke9VATh7%uuTFU(a^hS4_;jMH?BKgVDfzvBF^f!t<1-96Pk!?Y(!06GL&at`jW z`#P=J@+en*#A4E)T@I)3W=vM8ey}h0x4ED0U$V&P|GC`HUK8y$0c6G%y+tl()>&pYW$8x%&L%QUyc@q_F0LUzaLewh6)lk3un zHznxeC&gAH{j%cfjg4oRPsUs1-DuWp%s6U^AWF-`vxE?~2)_o+{KAgKvNNFH{(?40 z=1Zd4J9xPU(A9x1JzuDJ)=6$=0#^}qPq$3<;-7)w8G%&yZ?jjOKXc(*|C^KaWc18v z-wqJmF3rwPYr4C;=a_2VEU)#Aog};2+Zm_M9rt3WB(9LV9@QItEtg8RNidN+!BG8E zQWy{4)8zZnLFEcB|BMp$dBj5Cd6Is0%xHwR3(!FL7F4CxTmb%1U(8211U zD7sYQfkqd*q9+hcew`4wj#1>lC9Je`VTfORfP5$qkO?vF7w&|y_Gi4HDuUbZdPgS@G zq{KswkYi1Ye6CA!uk?+X!gHl5H4T?g-xvG7_Jo%|b9qP&*YkK?;dHsWYYoOXUIx%f zN^lGj^s5{W=ucWhOAx!3_6K;iy}*n382Nv8)hO`XN)RIGV;9yK=-~YJr!KDm1TB6p z=nq};+b}?g2H;X67m3Skh-WcBEW`R7%`DG!e& zFACC;@S#jm2ED_iuEu1Y*k8-jw(X{A1z#584xcBg!IT|@DvK$QF3G8aI1kPUtDC3* zX=PjmR>Sm3@V1>_AdmB9WitNTL+UqcBG{c|*iv40>5jZK5PM$`J(#>?6SU}hvsX|K zaOFv@`i=xWO`m1{FS#p|V?90*N;ij;#Bn#AWg676Y74n_>x>(|_6pD|2mWtGtQ9$A zKQ=l{BkDR?I4aklV7-cakM<>dWl)i~YgJ_m##W3YbaVN;eDxwNpk42we`lg&2xuEZ zdLH$C58%!>+yVI*up|kchmkr?CxBn<AV)*& zY9R105iQD#M9|62-@RP)MixFIhs7 zxn4Jl8HFo98?Vd7kJsp_(bNRcYwSJjPAJws`eE(=NkH{VXae+J+sUY0J-GMK-5s+GZf|yb@n;WWHuxhSLSS1PdLM2K%}|# zZ;4K(kd-VhpJ669_pCC>cWltYyf>FS+<+!JuS~z0e%RetHKAZ6TT(9}{b{x11X4BH zokjPBWhp%PhbDLj`hGZ|Bu%wd8>bV!m}SQ0?HiR5Y0aXfovk z4Z91c8r6!We}>R=FO|%J=LX}V5BCn?*qD}qivx7dFUCW>E$vP-IyzN{w=!22e09HH zQP4FjdC}PKci|@pm(-*{5d1rx&Of349B-XF2F)OTdYTbI!-;(^&;_eleC(Dz5w!E1 z2tpb__S?mCi*)FL6`(nt=Q;SCflX_!F|H`O6=g*xGDBiFS-a0-J#crnrlqn_rD=8W zd6bFn!1IbPo3)F$`apXZOqMnZ17P$3(|T%O!eKRmqjX$Ek};0=tmVC};lNdsQYuJ< zf?dsrbfK=EkG_iA969cU?O+~l}iCV$i49CUjj+EC6YNIlml6|a9r&Pp#fp`Y_6 zkJ%tkGxd3fyoS1xy%B?PWAUOx*O!T3sd5O8NjyKsKFnJu)HslB#7&}Ykg~G66cd#V zgsm8a0`&7|`%~p$Tl*)*J(DHDQm@TM4f4B&oi%+dk^ZxQT4KX)WEWn+pnntiQvz8P zM+Oe9Y3P;1@ES;^k7M;#&(np)?r88L!&Xu#8bJzkQ^AbAvgIg5Q$uu7^)VW+x01yx zP`&nomXOg)34-RH=Wkvhy`-!g$wgnKzLme%pl+1OMESbqNA89EA8&GbF6^mS6Gls# zILn89;eEx76fMYeY9&_cix4_XgdGmj8n3354_{YL2qAZ|Cf(`d1Cbovo%Scqpt2aq zG*fXSSmkBBvlU{Jj&5&yD9M|?JXgszt2f~@v)=@1L$X=GRk5>Gi{@#D)hy25+63#FElkSGLqfUEDT?6-Yo z@%iDw(pyfBJh~`gQ=qV{Xxk(Z1S_lnAh7}JiWi0v$08Mnx&&_k=3`e7w$_kea>+9Q z6-Wrh^Q0b~(f#h2&#R{WMjL;AB1jI8_zo#A&Dy`Jxs3$Mr^iJ;Mj&K~bHYUDgeLb0z^diz03O;k5<&Mnff^<4XJ7}DB}X@;AH}%~-YnufqtH7o z1YUdhcjJn&PJxfKecVKR~pYA`ydPK;e|k5e3BM@|ZnjCs11zq6DJy zNE6U3#D7|Cx&g~F|B6E_IPlDa-MeRGz0dQc8h7v5s zhq6Yj0R>3>g6J8mFOVCtz<`M+OOT*ZmC0L$*!ua|+WCuamk8Y)x9XL6M?{{j4pqtS zua)ey+_=SP|FEI{X{?8)U#!bD?7%hB^#O9{le}=az-L&f873(Y9kFrhof^QU2eVok zjKRnT&rt5P+LJvM=zaP&6F4&$k_D5^7>HDCp7F8IEleD)%S zkSrby6yzI#C<8Xd^#Gf4z%7VV#wCDoCzmv+Vb)Fp^L}DQ@e$>7C;I>#R=`SM})Xr@*mGJ_o$S*73N zA)jWQ#>E^lYJUC-X{Dc+knhtbx%HRJEBvD3JjB>b6V`?txrdrkQ7Nql@T+iF(?o;Z z3qyt42>_GK<=x3stWBKOJ2G?K-kLGzGe~Yx5~&zz;BrID=3%Kes*S4SInPi2@=1M& z^jub~nyyX;bE&p^L>)hW^sa69hD9P>kl9Q?LUBod??Rg<`TLg7R1)UJTh~6Gz2Waj z^H_FI&+pfB_XnD#l8t=>mtkrxa;VpEKR37wStiqX<&1(8BjHN*;C!j4&kqYVdhGWh ziw|l`I(wimojeuBa?cZZvs9D1%*`RtlwUTtHyOD|Bcn8}qBPuB46N1f?tSf2)s0UW z(t$b_l)D*w>Vf4our(cEGRMI4Ltb0p*4fLW*Q!#fMI^okNmfj;_~+_!H+f{;Ixaem z;bQJHJF?fK65!6#5g`QHKb0-T;fG1oz|4BN_daUf72wXc_4|}7;=SX)Z9MY~zC4dQ z?@Um_lA}WKvQ9j;St7ggF5$D+k5&>-xSeGAFf81pE5mt$<;!8mfu>1MJmC+Ye>L=j z)QXhH|4KGK$$)lNUGJIL`X~a0G>?-Lq zl?OdZ=~6L^(}yzgVy)u_w>Q~VazkSTllRo?yRFnw!9E8Hv$Zkre>W?4vVO7=w0v9V z4%xA4giox&0Y;p-Tl>)1Gw)XDE>ANcWhg+L+*73MK+zol%?#%^PIDI()Cyo0ZBb|S zA8xGcxB?i+R~Ex$ay6AKO|fOHv)UELwxIJekY}yjY4#k}C#A%^g-{9 zwHQ3Sz)bb2)F=ol zRX{{~C-jIAI)sjNrAjBE_k#R(^Rud@5e+7`04p(mB-!CUXruG#4v;B5y#q3)QS0AW@H7F}ugtIQ zg&Gc94koM)HGW-VqOXq;OpBisRuz;tSj<*NU9CBHXv=je8MkRV zS}9r_2A_dN-R^dQUd(Y#A6LOrtF)Fqe}B5{$yI}+W{h9zIX)(413Bg~w!k%Tekqi6 zqZGWm3DkEtRWjz`OyZE2C5{BGtpJ~aYh~-_PlD)88|IU2F(I@?xi>$Q%2S;!?rz@J zQ9E_4x!8kJ=4K$LeQpprKkp~@4ffCEnPlH%*&6a3@rlo@VL1*|TgBz+IC-2?Vu0U% zsa!Ld`)RL(-nkcWw>(%)@KJewTl;Qhmq1Qvj%F3*+YvJv zev{smRi@j48frEfF;G1y&~5w`HMZ~v$2NZdc_7IhLQr`5jZA=sU}Qo=Bpm29PXq&n zN09as*C>4Az;&IRp16U=dC`!JK)<2urhZi~2bzfors;o-u6wU4$NMwWOjU+ZU_LAg z%a)2r)+vs1Hz*L}GxVzyQ&N_7Y_#F&kC}d(56GU{Hyjx}SLs!6H{4H^5-t?bxKuQ( zVlZ^N13#`;`q{9qaB&PAp`@5y4xQUALme`Ge3;`@Cv#Y{xy=&;$Eg{E<#u#?^xgGn z3<)7{%S?EBw?ha>OK4EVyGzp53Q!uLU0EkUx=8RD5~>Al*>t=3LO-z9dLsEBigsQZ zh>?aqS#z=(j)uPnPLfbIOE~G^pZr( zvX0iJqn%%SoGEOn;&>)3ddu~>D!x;LMc?IXy}vK*m1pu~T9qHmQ^EDoFe}CE%;(oU9U9GW*g-k*`jXi6G`%(!4K z?~Fkx)K3HiOO<%2oK@r7U&_vNR(@KDcL$$_ROet%hB7X=e)KaetNbi(oPPHhnGi1g zF&TM6q)57s{hAFLFT5^YAZ=h7oVj=(sv9?Me4nReyF7~bH*{*mkBN>0B>4aHgz7Uy zSyb6a0vr>|KkR0=BDewNNe|HD!I#%Ok9@m!oZW{;O@GM6V!(ALtby*Hsbr&mT2Ek> zL`SDUuDwI!K#?cg{}n!Yz0cbU1;huLgZMB6-!%bS zFD`^Gen>j@eo{mrLtH2+yI7iRk{#qp^XWEuCi%MPRu~QudUh*{keWF}6e2v&GFouY zk9D&2NGE{x(5TX2XAPN47BOQK!3CT;7Y==7JT5-<0EdF=>G+hFL`4(EUwQJz&X%Ri zDIX4%qZ2>BlY-KTEve$%vId|9f=VTTcinIR@Gj;KCm?<14_sgfohBOYBm%W5?J9tH zF#{ZI#CQ1-$JhaOBYA+`P|pBG(5JUv*H07C0YB-5TmkF`;GahH02y>W>GUcH5CSnD zaLE1F?*MP9DI~ulK^hMfL$Uw}e+;na#dPe%{Q9Yv~6)kF`Uu}8_?w!o;6 zUrL{F)EV{WC${H2rl-RKj~s=NUU=0_S>TCFcQ|~fdK59PV>rWQ?m|FUtV}wEEco*peEaBXwrv?)U8mZsJcW}h?f7zkc#yf4gRzrJMZ*+AFo8~YcKLYUnvQB z>t)DjZ)Ud$P$)nr@I_gC)LLOe`XD=IE~v@K7OJSYzvq64FL#qL<(NV;CiEqoaU(E` z<8tK|8wLJoWiTWATY+~qk*!(Hx1P`IQn3leR_a$niJhL@NATVdNy8IrdQ*K!rZ<5l z(5yVM8zlB#k`$rfLTID;al&YBdci|K7n-94|A`x>jC^cgmphL+&hd7g2+YD~>;oW# z=q)P>$Ar7#P1jrmOT>*@$D(2jfI{&2_5nT_Ogz9R-2i-&OQrV;sEvSJmx5zi@xuG$ z@F}1kI1sPB@BqefLz#2{m{kIR*_qJH``{=%AmPBD0xXuFqu1QwfO@S?{s1uJ00a)W zF=!(3^^fb(5MFu$aZ7Q0M;=VNbpV)saT%u}0f1RgrAm@*xgZ_@%%1d{q`&Al)NYn2 z@e;U&YtOl8A9CX{<5j+zZ2&O4!`me6d;pkXvM1ImCD=X|VKh%eJ;cw&{0x{S*AXTs zqUs^9nBID`_g8|qAhg37ZC-HI(kRWoyXKd3TLvv{=p!15bdMx%{0i3s*=#9o;YV?_E&M9JuEZN6d3pO6u521*!MF`Ahgyp&Au*- za%WQp;SXT}Jj*jS;Q+hh;b|G!dKs)zeIrNKg=f+R1^}1~(vu*Sp-WDH~YaTk_@+Gx{bb+vqrK!Kv^T^J58-L62Y;Le4 zYi!_)5*^931d|=hub{}Lv6sAK6+E}oUsX6n?e2Xe%j+t{5CeIz`UZKb`(}+Mo$8S- zOOx$8;b!-DO3b&f_in^%4jA_cxqlqai@QwUc4Mt0X>M|_+Hz`YtlyKiji0NKk=NL}Kukh<-?3U!TZ{ZQsT zBYV4i4(kkmi&NnoR3aY}j<*vbH4g(thsb*m>YEQ%S(_!m#O z^A)`dpeY*x56ahYK%Tjpb2>>jjt7v0@Nrh8dtoE_q3MVA`-=-s7cF??HAD!P9DXLx zUr%EFEXSQXMDVEFekp{_l{>pVrpTOYFxF@)$xq(196lOxz+z15ki#-UpzFdYMh^ zg8HMUTzmn1vIuz8i@d)K^nnKM{h$f_u2uZYZ5|}m-cLxQ#Rev!%d#$(nI_j=9E9ta zk6Hv+*QbUqvs(Eee9e`uNA55ITFE9)(>y~OIcgIT$MCIp03eOoROy7^UUa1qNmK(X zMbBi6+o}7)w$|cSf;^Pxw^H!TLKm&4fzY-Y7NNRpI!l~x|;B!#JEZB z84xZK8YA3-9j9s!6E@xFcNwjgH@SSIWpzy?WLbT%30@E9Mi9wJZFQ64ZHvGH2v1KI zjzDvwaXcl&jFrgTd70&;>MtmM=;9N{nX5c56s1ygDv#ah;*xn}RgKmFr$FUnh>s1m zb!IWpU31IUh`67Jb8mJFh{F+Pxb6LyazIZw>sT^G|0Rh^o_-2$_IQB!`Z0WSA(8YZ zG#UC}_%9Pg-in5TcEm%261TL7*MT)TKS#c9^4|nM|MgT+#1LKZ!VO?5*wdzM%=C)^ z`ZH!rW!8^K-CvrECZ}s_xXGn9SQiT^G$U0}`lOdbI0e&)8CdJv!q=IN%J|AMT~{;v za%Z5~jl?N!Rb;`g-$di(lZ*STih@_L*2Iq=Pj?y;w4TVG4dGAt7-TC>9U9-6dGGRI zu&oiJla7w9(00!N5~*unC|C1+r~9!Ce_osa@@hPULoYetd$vXietW90f!ain97U#0 z!igS1hlC-I&{N_;65A)71CKb~iPV;|9=i2pFY>zYGgY#^lpkE2UuNZx_(xpcbT~T4 zgc|JaD0*iS#z4O%!t4=xxAXlNc+jhD*+e-vrOeeVp*hR1(-CIkT_2l}xTe9YGL_KP zDdBA?m>~Zd-q&V_^-v-)N(?~`k#KCc5V%(!eclW3QMfz6Lv5d*X>}Yw19RIkcP6cd z@Xvy;^~X+n9V0D^RYYIv-sIjZmI-<|_7J>ezhk-EWaQBu$*A8W(wZ5 zPk06v&zbDPCjD+=|2aMLuXYr-@g{VDA)2y?pVgpEIrO&2FtRXA!0+_2x>3ai$C@qi zffw}xx8h7up#>A24C##w*>Cy!9%~107&_>c14+v>7xNSNvxJg56Rp=4g?s!91_dKx z(x0x?zoBuQ^SWXLs0Fg6p31Q-3L6{TGd;@a#G{(CU9vbbl-qUrH*55#rTRy05q`a$ zd#dkU1em(lfS+ol&((Yc{#;K!-}ueQ5hsO6$Wcji~`Zh&tq^QCfAz$!#NCHSgOrR2PfeG#QM z1b4p-#?ba|z!PgpoTWuqyPLj|xlALzxL$q-wnG-doj3C2bFGLBGR#SKlcakTq9VN5#;WXz#UfbPkN9M@(Cg zO+9O7%$u9&zqk@tEKdye<;7pjldG=kgz~>YTGjb z6?UkM;k5AyX9cDK=hd@wOz>A?Zvex+!y1(3%a%Gav{FZ$C&C&nbxy^NaFxpiwUL_& zHul!tSCEp3M;WeEY4G{}ZAYYkaedeB$&iK<3z5y^K?&Rh2(GPOrau;|&S38#w7M!5 z>j87&^s#(B$`xQ3)@f$smYwFi7^Vo)`uqzd_jApBNt zxSDC$2eff~X_R(A0|!P-7w>@f-4TE-5yza#*R8t0JcMh=p=OfCgGuiF2%xG20Eu#U zGGae66dd65mp}S>_xQt-hrb?)Lk&cOK#b=QYbBhH`a@4g%^o;rEo=R0V)^|GB#)zQ68bg+xKdC3ml&4B~AXcL@w4Of+`LYOufphF}EVXP2a}pB_6z*6h zBvkIM8}-i2dhTt?J!-*@iR3gxhSn9JtKR7T(O{W>&$=kwlQiDuw?&(-j^g$1v5I|nO19daru<{@9O{jE*LKk0AveY(;^>GD3WsxzF z%T>GLSydP$%~zPA;s@N!drOIO&yz=#4MwI;Eh&<7Bgts)8SBO7a7){F@ryL~bzE_| zf?Dp77%m>#S`*7Y#s0g%4TOw;JtJG&URvBc?n$+u;4KP^#m+vH(?Z(H^yg4_B!8%^ z_AwHhn~k;%(|-_r=gk*Cou$V~v)nUDG?~^vr-Z-!_~Ujf>8aAD0OqB0emR3oBzBrrUaR0!Dfi_rTu;MiTS{IRWMxUS?&AOxG*e4Q33P2r3aSzMrKd5Bjbi%N}L1lI`%`GJF1(z zHo)ibFG+XNE8L_>IfF_k{B7VrFAG9PZ+wEllk#WfMIX}G9 zN`q1`(HiXS#UbZZ_5e~=`` ztiD7qNn=CzZ;Dgy=7Mqe=Fl9wi$J}u?t8!|0_yb_UMEf2elq0xJ}qqedqx02oa+fB z>mT7*(7vRWA}FTszq1?mH`C?Abur9;_3sM&QBrZsx6npHItC zFQVs!<9HF=0O@QX6JB=$3SWn%8uy~=-0K}BBkeZUE>Z@8$4`09ZFPbVtFP~Uh1=^T zXB>{R-br@@m^Dvk!r>Ul4aucP0?us~g*}gwib{g+UG%xaB>Y8@%s^99b2&l7ebZ6Y z1*+Prm1Bplis%;kUby}*j&p}*$7pcEKH~AfldaQ7WKAA7>&S<)SvGdYQ+-qrXMQHq zo)!nV`cN+9n4~djN2s+S!xbtdyF_oX+B!cb#JurIzt$=muC`%Qb>``~t`mtawBBKt zyBgS0Yc&Aq>a_9x{gQQbRRUzUEgt^a65!u}fydMUOpTsPIIsphDgp3-lt4y##MRY% zq>r%`exv`lBct(s&)-=RQ)bOL*4*Hrp^q{CLOcPT`kUCn5Gu$0D5A71X(mrPwUl zM`Oiy8%y9?Na45-(G~86m}fhR^Axe!wd>5{E$g|ce?>7iPU!3K3`dd_Tbj0Jx_e%_ zWJ>jF(pqKnD^c5sbQNZ8sXATPEculDEeG@Q=q`9&0l^OFIBf&obi5@1x0N59Yd~_{ zF6{V5X6%IArOE+vS?&X?I?85D$^O}KYWPIPI1pY^7wORP`%B>dJBuV=0LY&JVh#Y= z|K@5uyNwRBa1WZzC}7%>TG0d%IDoI^dNaen$OG1Ol)y(50u%~NcgDx+_bofob0SC* zRU+WD#}D!!-_Y^|@@Jn|IO$^O_nQK+#sBU1glh(jNM8VkFciR$rOhjI5PCM@?;VAS zAq9z>TL{v-&UXcJ2T|wy^Y%|{Xa5(;`SfCeU9V-vQqO-U=ihSDsDPRgwfgcdFz7Tp z7nXn1_JavqIPHEV(U$qrvn#K$8WX~8>hpZSE5G>C;L3{T+Mb#aKlubb_uo4q|RSQlz@X0n) zt-n-@$G)*=frA~(Z8!Dl;OtKg_V-rUx^AQnDcs!Vj^9be%gv-ZYLJC1FFh~l1k}=wuJUvcrz5+P_8i%SVZgBc5|J;@Bywg!KjLk| zas|5bUD#jcQeMeGZ+a6S897kDdd5@q-QAc_fAO-_$!GZTru`x3NUy7j%eG#WAnnBT znqGY#mA31<5zh)49!gW6GRzbIM2vHW>~o(OLlu)g zw8$L_cQ;f%Z%dcT`^XD)`~lB|XuAZ*X(1zC+p*U99JHW|*XgfB85|_Q`>Z*kr-4oG zi@jLjNeIn?yGB*t(EEG91W4RWDSq0Vh=yLivchcWstL6fo4wkqPZt@p>222KbgAu1 zoV+gm>vo&+$9maUrL7Utmr|0(8$BfA98#*A)`u6X*$HCz`UHtrC-#M};YJHD^Pd|7 z^-qk2^D9-HWJ~5~JvBWx92QwDF(FojP%&);9&>v%fjbHFs>#9=r8lRGP?L|R%wAA! z+S1Ouw0);@9?`lI5`le+bW6Dd%N7)_VdLl{o^VZJ$h{N+dF?4mSD^%o5HEr}T!HbbS)xWSzurV=t3f^@%SlRv!bdg=z6>q4|Q`Ubxu=4-S_EIoB!ciQ7uJSjF#9qd_=86t=ZV{hOdZRd!k()nBa$tYUQPP z^x)Xc7h+Ze{GI{dN1A96ZKtB3=f1Vbbh*J zGuNME=^^e_ECRPNm4!M4#sqg%o^BWlP7fw7G95KYfEtY%*0374U6CJry{a9gYT!_X z<_Ha*uVd^}Z8S}|98uzSO%NSh;cb^-b_db&9kZl3G-2nV-vb=6st(mU3N?v)aJ8pv zNYL`5QH#WU6IZG7r*CAgbbThLBaKTqQC@pH9E(ns)KtoLLGicrc+pT@RlZ=N!;Vdh z_oac~lI>j*e`2TTL-j@=S&WO?Cr}^Dsd5i;AhfW2mkCMTn?nrynrxOe0BGd0cWdY|@R;zmTGzzdxN)#hFhWG8+P$0*sU=o=SkTvgSeL^A)B9 z;>Jw%TT&_w;ZEXd_*_r*L9W|YhbERK(NOQFq3s~S=wm1}*)YLj>oz`kfXG?y*Ad?o znbm>Na`n!9Rbw14vbOwAsfD{e(1s$!jSOS}<8NS!3aA9A`GJPGcUhRgHh`LM$E|0r z(U%IEh-h)WwT&tC5ji)lNHJ5gOb_tAlmH{W`WOf)b=M3A(9xq13th9w^YAGbbyAfI z0H{RQ4a9hx0|hNbp(pVA&1x-r?_3dlpFg33-&3!Oex|Fm6Y$UzLGG>tGpHUt0$cF{ zHv*_LNfc&kfE#-`Wj!RnlJ~&nd_0qRqsx&n+L>84=*zL%$oKh|&+#zi2juBx8BhzJ z^?)K0X3?>l36{|_rE0y&wvXemy*e>(@3_no;#XE;p((1?x=g};;-SE)as*2^Ob2DN z(mi9y$RYWc8=w|)!>d=6!XYbgTltjTd#ak_0g}QAg^bo3P5o)`(8!Hbs@33)S zX?qgg{lZ2+T}{{a3LrLfzz;_|iA4ZMX04i5yf1%2qQ&RMclp_Q@`{lzD6kh46((pM z8=jMhc@*9?4M>KD?#Kl*lPR8(tI__@FiShaCv*c%`f#7^<>pz_|48U%MWNA zty2=y5glQ_#=H$2TKOz!P_QW+apIccTz6IYqSfNMJc|M3dER(>Q&%IG-D;b<%A%=+80k*jF~}qw~<&{2=;h5>zimH{Ttys zb8x+>Q$mFE5`iEZI4UXXvS-{j`*x!07<( z@(M$>Ws^NN)1P*_LtBYU@O00s{a{OB%0a@(CML*BM!>)TSv)#APjNf8l{DUanH?e{ zrqYGK`B4b`Y!mrkP{^}Y_9O`)!!Uai&q6uSOU_BE{e;(_OK5hzlOKPk`F`cbMe31L zn*0xj;O%{br(?1uDh3E&uM9q|V~|k}bSC`uUba>0i&B<7-Ou z6CfRvWLzHSRG=dyc2>GI!55Dz`PQPhV1QUFetW}=zGI_=*W7LA(~pkZFFEBu=^cXE zI0^W1!JhQ5tH)xt$^ZcDteM)3^m4v{Tp35qnoXGhUgW*Co0W7&SO#uQQU zR{j-Em`Q9a<5XT21*?HBtu(6@6_vQ}Qr(S<}ysGM>;VWHN#0sJ_ zxKAsMoz0TwM)gG4Eas1Pw6?F+{b=a^vGzz0%R{BNP3gUK2F>g&7UZkXcPPnR$h;qV zcPpI3W4*h-k)3m4hWL%siu1E->G#+_LOP=<7NWLFPUpWy+-Q$5t-%*_2HaqmxPIYS zWsvvzJllZVh6ZcvU}ijxpQz`y7~)lp_N-4v%D9+8w(isIw1f^e_}?J%I{x65i%tLt z;lGi~TjoU37}z2(T}iOS2e|emt9wX9)WqyDTfcdCBPbRUrWdZrKo+i~TYEn~zjz%o z8D4*X>z6Vs~x>j`wJ0tNn1_=;rH zMr3tIG~EXgX7&lIbkG6)++haYUQ#P(zMz?d5VFZg+s_r|+}82jMfAzHZg0WQZ5ljB zY5Ae)SE=(VpT1!ZJp}D$NV@tW*wrLHGxb^O^Pz|uz-<7a=tuWY2=O&MDeq+|(^1=G zUwYSK?#}h)Q7|jqkg$j?y;zJ_@l}w5($>t}Ozo9p#Pa(oH%an%+&|RJNT*x(fX_zk zJM}yWpq{s1Ob!fM;L6s?VKnVtwYn1A`Ngymg6U*YF|U1p&Lbd?V!rW# z?(2i&b~svOt06-(D-Z0>0|VC*B#}0e(y?+rTSWJQVj9cHI0l7h{m z2X&JlQT{X`Yt!_kIHFNKSY}+MlmNl|n4Xk$6I_PWn5FDi&CCQYe4n9IH^_XRV^@@;UcYu4_DJ5+rY`Pc|CTMUct-4&{0vH75x|E3NcZwD zK*wQn+xxxC;>$8?>$m#F)=au|dsfVc*1jfGTnh3h+rG1Wul9(eNjFj_u#$0cnsMu1 znEqBNQ;2*&-aBh<-_?w9g+#GmQmp{H!cmAf^Y_J5Hi@5{xdU%N=qN0U@!)PchRD5I zb9y%$s`Jh|A(DQ?8x;vdDcf8ZO#-CDF-%C}(LrQYLL;EDs=eXOFnV8@jwp*Cdw!Ww zNZ>B|d1wl%sEd1llWD-hv6p)*6jg_xrMW*)@fskyo^d30Lma;#mpAvs->>a%2k4l8 z0UfiQN+i%01IS&dL838GZm!C6H8OG-?oJC6Pl0FdFG6s)$9=aPC+n-J@!PL1Ne{iT zIX#%U{jl;K3r!ODP>NCO=`od4+#ynMN~D|~gx~<2buQZCX|?A@w8ryzXdNPm){`hv zkB~!~Ct?k%ISM&#FZ!JSMh0t_n(tykiQW{(#&kBG8v{+q}sh@tBYU8m>V?~)+E_8ARSd{cRZSyGdo;Wsk1X{0I8N%w?fUXsGj zE=nzu)L0AwkwkciT4lu4FM;JR%itHr!!HTy&%gU)vFC5x*^h?lFJ07s$*lgDyzj3W z#=pGzPbP!EYZ(7_5WbJaKhbvi<;MQz-2!iZ?;^undVsze&?LVKEP;?ha|OFC1$Z(6 z5d>a83fRbjw;8dh$;1FZvfmBm-@E?*CF=e^Zg2hvhTxAI$^Fe~|NWbv@F8JNSkUoB z_oERFQB3b*ovhBP-BfbBXra?^Sh0n%2CUZowofK3V(!bFB}1v@jvtko-iS@7$kVYe z;r7E&gwrDEcc+DIp?^9qEb*Wk{qr=gKTkCK^Hey1K@VWG|6?cXS@{wT3CUOhsXe#i zeF^rmj>*cu5VJ3P&A+wHI6`N13mQ8gV-U8SG@Mv`l=9quol_^pFt4#5Vk69J(D*rkEZ z>1+W4v{r!!?^TR+!;A`y)+c>!$+D%MRZdX)NL5H&lDtb^H?^nh$E&B&XqO{aGYzY3 zrL*#TDUwbvZ5x?V;*NqVxlY~FW1(~P#Y2N$b7x$kuMP>_KmFYf&E3-b=?zKT>^KGg2lUCLp$))Dd4_A5q_c{vbfp$mQWI ze=EG|me2#`Dkk%8?eOpbjS@R&)aH(?y_fu?ose({i4A_1po>*`oq{8!W6dP$O>iXC zDero*fzyf#?Hyrk^%82l?6cul0yY*@7PV(z#K#(HWfXtje;}4rT1bV5$>}R8yVx|P z%LGn5dHY~R5>6#qWFJEv*Mwq)3zjQUkiPpboVY?X5tBWv+skAe0eF8N|*ECSAjw@Ns zXc*(c87}o<9D-vE>zI-L^bEZ-&r~zp@ZA*)WE)m(h1@3=c3f? zU1B-8R!vu9)w^bl0af=+Eoiny%W@)#{e9KQ`Gd0>gaGqnI?k@6COQ-siCt>~qaz&sJZK2KUn# zgy#0gszgbl;Jl2OuRZwYTJ#|4gg~xXw4CIFoMBj$R!?Uv0`^gTXEo2FJcQA}I&BE| ziSBC{+tX#RWV(JmrY{_|5*bmoDYI_QgejHMO_^^>$vM8JTp0WIPOoJLy%qh#VeO&e z1l>L5`Eg25ZmdTa8H}Q)M8<3@6h_^dDwHmOb++DiQ$HI{r}q(4SUMRq)x@VaHQy5) zv*j`<{yw|<>ttM^6hB_;z(&-@ z0oCEYR^1|XMl6D$q7kyH|87O=8PVFgz(0(NhHz$Dcpo0$JowhCIo}%qg#Xt?{aH1fy z^P=F)gDVe}HQjdvi^AO&g8I}VA|(fHpd{`-jN{w&Tg}V?ZMG$COOv*?QF6KQQ|Y>+ z(|vjH$geT0X8lXm0JxtLM!ZA56EoLfCtJj&+ z+&ai2ZM`zRvZ=%(hcQ?8e9d5flO}^$2mG-C%=W8X1!|Sl+B{RDa$ooH{1@yh_JubY zu5s>=lj*@rAuQMwz7zzP^1zH0*YSsXYeO4r;z#xGXAdfvT})eT>qzfU+*)4F3ub0` zBt#M;EG*WRx0LkRIhzUCN(`MlFX-k3GjX_Fw+$~h%jBR*sEFdEJyaBdl%&XuT!xO% zICuNWL~n_}nBHY(^~~t?DcESPq4~2`a`>GflA99gq(U4+n7XQzCo>#Dw0C*h6%?k z&CpTvfA4MA5! zTqn{7IVZU`XnS7dgx%~b;-`AF9OxF?aVc@_2;Z5IS>?0zrsU>QadL51^v(m!p8|3$n<}4&8E;44?KW6}FguQNurDExWJguq(l*{#Y3~9$hSp%{<^i55k6-H%DPf&nA)y)qcL@ws`|W3#C(d4Kw*DS20e+*XO3xtaw^M zWfbwE9yR1Mw+`XoEU^K$O^Y&QrC0302{mwk+wtzuEpe#rPYq z{*!C(zXD8tL6LsDSpVKX{99q6e{oR%{=ff66TN>tCHx2e(rX_J`HH}}26(FEz!CsV z!&@L=(Wtt#m;0tr-VG>cw^-0Q@v;j~ni)AK%a9+lKWt8S83f(Qja*fD%~cdW_!OME zeu})s>DDd$`}dO46(#Kh6G7vIyIn65H^g9V0PAQOyu(zuTTMgqR9OWWrI!F1TZ0&8 zb!Qs@dI3`yTy5eB@SHV1iga`cz9tSbtOX7odbPj)-Pq^?f(G7I2A_EH-SxZ%|-wUh_R3-~~Cz{ZSt*{V)!mr2eNU^G2VBnGSW;o$37u;)(> zHLq;y$JbXN1Qwt3`_1tcJoNj$v=P!)kQ;IC@}O07iT(`%*= zSn^bixCoMeC?kBr3<3BYXm5Igh=kB_z^4X`WqQ0#+>0Vn0OuM1_S=W%0G+kj2Jan! zZUkI~w&x{!b_9)+2JD&Yk9l$e?zO2+5CXjoVDi-K1)%_rBIelc`d(4{#{tSyg=yeh zv;j&422l+6J~f*Na61)RB<0iv0(b`xsy=Yj`Ex}79MM15=$}vhpZn;a`{CagI XXZ8g2BmT^u{>(@Jhco=>Z-f62H!>$I literal 0 HcmV?d00001 diff --git a/docs/assets/resources/udp-ip-packet.png b/docs/assets/resources/udp-ip-packet.png new file mode 100644 index 0000000000000000000000000000000000000000..c890b7b745352dc1c9d680090e6b8e2586e38521 GIT binary patch literal 4934 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 literal 0 HcmV?d00001 diff --git a/docs/guides/index.md b/docs/guides/index.md index 4f3005b..9de1d64 100644 --- a/docs/guides/index.md +++ b/docs/guides/index.md @@ -18,6 +18,8 @@ The guides feature supplementary documentation intended for your reference as yo - ✅ [Linux epoll](/guides/resources/introduction-to-linux-epoll) - [Blocking & Non-Blocking Sockets](/guides/resources/blocking-and-non-blocking-sockets) - 🟡 [HTTP](/guides/resources/http) +- 🟡 [UDP](/guides/resources/udp) +- 🟡 [Multi-threading](/guides/resources/multi-threading) ## References diff --git a/docs/guides/resources/multi-threading.md b/docs/guides/resources/multi-threading.md new file mode 100644 index 0000000..8657cb3 --- /dev/null +++ b/docs/guides/resources/multi-threading.md @@ -0,0 +1,15 @@ +# MULTI-THREADING + +Thread is the smallest unit of execution within a process. Threads within the same process share memory and resources, facilitating communication and data sharing. Multi-threading is the ability of a program or an operating system to enable more than one user at a time without requiring multiple copies of the program running on the computer. + +Creating a thread is less expensive than creating a new process because the newly created thread uses the current process address space. + +**Concurrency**: Multiple threads are making progress at the same time. This is more about dealing with multiple tasks at once rather than running them simultaneously. + +**Non-blocking Operations**: Threads enable non-blocking I/O operations, where one thread can handle input/output operations while other threads continue executing without waiting. + +**Faster Response Times**: With the ability to process multiple requests concurrently, client requests can be handled more quickly, reducing the time each client waits for a response. + +**Handling High Loads**: Concurrent servers can scale to handle a large number of simultaneous connections, making them suitable for high-traffic applications like web servers, email servers, and database servers. + +![multi-threading.png](/assets/resources/multi-threading.png) \ No newline at end of file diff --git a/docs/guides/resources/sockets.md b/docs/guides/resources/sockets.md index 98207ce..06a6107 100644 --- a/docs/guides/resources/sockets.md +++ b/docs/guides/resources/sockets.md @@ -6,7 +6,7 @@ Sockets are the interface to use the [TCP protocol](https://en.wikipedia.org/wik ![socket.png](/assets/phase-0-overview/socket.png) -Sockets in networking are typically classified into two types: +The main two types of sockets in networking: - `SOCK_STREAM`: Stream sockets ensure that data is delivered in the order it was sent and without errors. For example web browsing ([HTTP](https://en.wikipedia.org/wiki/HTTP)), email ([STMP](https://en.wikipedia.org/wiki/Simple_Mail_Transfer_Protocol)), etc use this socket type ([TCP](https://en.wikipedia.org/wiki/Transmission_Control_Protocol)). - `SOCK_DGRAM`: Datagram sockets send packets of data, called datagrams, without establishing a connection or ensuring delivery. For example video streaming, online gaming etc. use this socket type ([UDP](https://en.wikipedia.org/wiki/User_Datagram_Protocol)). diff --git a/docs/guides/resources/udp.md b/docs/guides/resources/udp.md new file mode 100644 index 0000000..56be790 --- /dev/null +++ b/docs/guides/resources/udp.md @@ -0,0 +1,20 @@ +# UDP + +**User Datagram Protocol (UDP)** is part of the Transport Layer of the TCP/IP suite. UDP provides a connectionless communication method for sending data between devices. Unlike TCP, UDP does not guarantee data delivery, ordering, or error recovery. Instead, it offers a simpler, faster way to transmit data with minimal overhead. + +When sending data over the network from the Application layer, we create a UDP socket. To send and receive data using this socket, we use the socket programming APIs provided by the operating system. These APIs include system calls like `sendto()` and `recvfrom()`, which facilitate the transmission of data between the Application layer and the Transport layer. + +![udp-ip-packet.png](/assets/resources/udp-ip-packet.png) + +Here’s how UDP handles data: +1. **Socket Creation:** + - **UDP Socket:** An application creates a UDP socket using the `socket()` system call, specifying the UDP protocol. +2. **Data Transmission:** +- **Sending Data:** When data is sent via a UDP socket, the data is provided to the `sendto()` system call. The data is then encapsulated in UDP packets (datagrams). +- **Receiving Data:** The `recvfrom()` system call is used to receive data from the socket. The received UDP datagram is then passed up to the application layer. +3. **UDP Datagram Structure:** + - **Datagram Format:** A UDP datagram consists of a UDP header and the data payload. The UDP header includes fields such as: + - **Source Port:** The port number of the sending application. + - **Destination Port:** The port number of the receiving application. + - **Length:** The length of the UDP header and payload. + - **Checksum:** Used for error checking, but it's optional in IPv4. \ No newline at end of file