From e3a5eb28efd00f5f8f47a47031202192c134dab3 Mon Sep 17 00:00:00 2001 From: CyC2018 <1029579233@qq.com> Date: Tue, 20 Mar 2018 14:48:44 +0800 Subject: [PATCH] auto commit --- notes/计算机操作系统.md | 40 +++++++++++++++--- pics/aa202729-769d-4d2a-b103-f45b412ceaf4.jpg | Bin 0 -> 13312 bytes 2 files changed, 33 insertions(+), 7 deletions(-) create mode 100644 pics/aa202729-769d-4d2a-b103-f45b412ceaf4.jpg diff --git a/notes/计算机操作系统.md b/notes/计算机操作系统.md index fe8a58b3..5d1555ba 100644 --- a/notes/计算机操作系统.md +++ b/notes/计算机操作系统.md @@ -1,6 +1,7 @@ * [一、 概述](#一-概述) * [操作系统基本特征](#操作系统基本特征) + * [操作系统基本功能](#操作系统基本功能) * [系统调用](#系统调用) * [大内核和微内核](#大内核和微内核) * [中断分类](#中断分类) @@ -54,14 +55,41 @@ 异步指进程不是一次性执行完毕,而是走走停停,以不可知的速度向前推进。 +## 操作系统基本功能 + +### 1. 进程管理 + +进程控制、进程同步、进程通信、死锁处理、处理机调度等。 + +### 2. 内存管理 + +内存分配、地址映射、内存保护与共享和内存扩充等功能。 + +### 3. 文件管理 + +文件存储空间的管理、目录管理及文件读写管理和保护等。 + +### 4. 设备管理 + +完成用户的 I/O 请求,方便用户使用各种设备,并提高设备的利用率,主要包括缓冲管理、设备分配、设备处理和虛拟设备等功能。 + ## 系统调用 如果一个进程在用户态需要用到操作系统的一些功能,就使用系统调用从而陷入内核,由操作系统代为完成。 -需要由系统调用请求的功能有设备管理、文件管理、进程管理、进程通信、存储器管理等。 -

+Linux 系统的系统调用有以下这些: + +| Task | Commands | +| :---: | --- | +| 进程控制 | fork(); exit(); wait(); | +| 进程通信 | pipe(); shmget(); mmap(); | +| 文件操作 | open(); read(); write(); | +| 设备操作 | ioctl(); read(); write(); | +| 信息维护 | getpid(); alarm(); sleep(); | +| 安全 | chmod(); umask(); chown(); | + ## 大内核和微内核 ### 1. 大内核 @@ -245,7 +273,7 @@ void P2() { **使用信号量实现生产者-消费者问题**
-题目描述:使用一个缓冲区来保存物品,只有缓冲区没有满,生产者才可以放入物品;只有缓冲区不为空,消费者才可以拿走物品。 +问题描述:使用一个缓冲区来保存物品,只有缓冲区没有满,生产者才可以放入物品;只有缓冲区不为空,消费者才可以拿走物品。 因为缓冲区属于临界资源,因此需要使用一个互斥量 mutex 来控制对缓冲区的互斥访问。 @@ -359,7 +387,7 @@ end; ## 进程通信 -进程通信可以看成是不同进程间的线程通信,对于同一个进程内线程的通信方式,主要使用信号量、条件变量等同步机制。 +

### 1. 管道 @@ -507,9 +535,6 @@ void test(i) { // 尝试拿起两把筷子 } ``` - - - # 三、死锁 ## 死锁的必要条件 @@ -741,6 +766,7 @@ CSCAN 对 SCAN 进行了改动,要求磁头始终沿着一个方向移动。 - Tanenbaum A S, Bos H. Modern operating systems[M]. Prentice Hall Press, 2014. - 汤子瀛, 哲凤屏, 汤小丹. 计算机操作系统[M]. 西安电子科技大学出版社, 2001. - Bryant, R. E., & O’Hallaron, D. R. (2004). 深入理解计算机系统. +- [Operating System Notes](https://applied-programming.github.io/Operating-Systems-Notes/) - [进程间的几种通信方式](http://blog.csdn.net/yufaw/article/details/7409596) - [Operating-System Structures](https://www.cs.uic.edu/\~jbell/CourseNotes/OperatingSystems/2_Structures.html) - [Processes](http://cse.csusb.edu/tongyu/courses/cs460/notes/process.php) diff --git a/pics/aa202729-769d-4d2a-b103-f45b412ceaf4.jpg b/pics/aa202729-769d-4d2a-b103-f45b412ceaf4.jpg new file mode 100644 index 0000000000000000000000000000000000000000..a0c32b7a0a1df7aa9c8951559a4716009f1c32f4 GIT binary patch literal 13312 zcmeHtS5#Ebw`LRNELP7!pLJ}gPyZ6XQ$jC@ZNJ+^lXsF03s3}NEsTioJ zY3bB%S=nHcDpXz1wa{%Hgc|MnjOLSjNfVmfkCa=QQRa`OW~eGl*s4~>t<1-L_v zhfj@n(*@uJ0PqNJd;3p^|9io^bKA$eME8hENN+13r~r5H@bT{u;Q!O>+u9+w-vI>F zgftJtl<(3SSQBx1(uu!I%Dcz?tfqtBa1_JyKd9_MlW9(o0yuJ+t}LKJ2*Nyd;9qM`9lH%-+zdRjQSWIlbn*8mY(rBGb_KK z5LQ%NQd(A9SC43D{NB|3v$Lzar}tN1|JeA%>LWcy0-pjV{>a8dvJJkd~%9A zJO2k49svK}VEqTO{{a{EEv`ER1o#9*|KP&A<9{po)C7bN#O~548xUE0(sGHvyGQpd zDX*r3nEQz#hW?G$Cz2D|35Rs=&P?iCK40GW?PpEL`DBaY+{KHrnM4+do&_e3`x*=awlr|S3O_WA z9#@&#yq)A7V2N%wDl-*&!6;E$-$ohgbSEz5-44hToj9k0atJ>bsNZ!!Q$`8-N?X{b zQ-)z?DH)F( zT5zJP#hoJ`r|-^pasYq(4j`CaT!fzqJOo!*H&S*PPbbI)d<&MsOfI#fb#&PUH4)6o z=r;j;5w8pe>ev8f#5`em50N%ly|7lrRSg4R<-@tFf~WbJax~ZJt-3paoaoG33fd<9EPX9Ev_;eEZVzl%)n#8DBKugl4 z*jp=;-1KFfjbJg3qa)x#A2I??D#YY=0uyz(Po^#@miWYmrgbnCCm zs!AY4-LTX&$(av1!t1js(msyLN zzc+x_)=k3xp&Kw=kZl=3Iqg_q*v5(6*(h@mN|Qk%H1N_JP$=&pENeNW($I15Y_<=qA6^SwMb`z5}q zD%%%@GZyuq8F##+Le2 zO}et6atiX`O(j<>D8L$Pan0<|I~8i}Bu9u2iZrWa{-L9ASepD`*3veO&6akljSMcE z{;0U7s$yvnHCPKlecLez6dpY#r~iVw0Z=(z^N$H5|NF%Jd}B9YWgqt(g~Y6C!*@=Nu9BxaQ7@!ILl@%5m{ILK@VU@4FScRrVwf!EXPSi;;)}e=7_Q8rUd$5>eX3T}@G?)12KZdVX8>2O7 zUMC_=MT?v>PCODVXcfCh=tJODo2VL7WVm8ojzY1*F)VnQI4Xk&=D+5kBG7G;C}(5$ zCj{D@j(jAjjv74g3&M9_@o)?@R4E@DU-3g*yy^dtY2i zoKD4-%&gREJLQC!+3)?jpOD{z!Iepuc#o!yc7E)9^>ZM(tWIQ9Q`I*+|37D)PXbV% zYF{k}MO&}5-@zqz5fZe|n)`O2rgw!cy?lYY^c%z9$c@jX27+Udk0)C3P?c&{d_U*p z!YQe@r#u>hn))Lz$S4%hWl4Y9EvuE^H<#g{ommbMJ~I^(U-(^xxjBX2RuN5{=X#sw zl1TWC2ICj<4BNGRPu$H&dHlyBIy%{mvgIkQm0PG$=4#oS9Zm3}-t*9c^p#SSV>fJH ze#THEmW$4pBJT04NM*WuleoZMDO7vZx%vm+kY}eF3EDi!j`U$Et_A6l;nGpl(_WZQ zs=+G(E%$@K7%>Cm7!vuC{K9YlzHwDK^yX3=DMqunRYtZrHa0Yz3i#A~U#Sg$98#_0 zGx18z@Iz|;-%;_HEYIX-2U=8!%B!nPGlVDwaH@2L=~S~6V)gmg)aY8Bp1t0K44%)? zop?PIWj9n~-??-cMvwbNRU+=`T7oxWXmGoM z^D=)U%>O(_xc(7;DdLmV;{7XffI`fR(X87Y{>i^o|9-*kqA^ef&>0&3##7~!_)>!B z(tRy-J!$|^vGgE;=;?sza3ik+DhDH<>d4zLdpeed_h4w*-gyr zq8%npg{yK&Ie41V!quMM0H}$IoiUtuaH?_-3eLQ=rkg9rzf`Ilq^76ut)B%jC-UVG zeFONxiGYL10v&!AzM9?j0O)kl!eV|DNU;k_U-Jcwi!L$Uh?x#9Bmxw> z5~+igu%gkeKpQN>y;ju~ZAl^9-)`B=aAH!rjE0ru(GubKTz;E$eE|35oA?LuhQNC< zl4T`70Dg4mVwSiHJ4+kGvSaX656+TZh|9CE-g*Rd+~0}WcoBsLj>P>EEz`D57dQyx zR?>V!A+Bxfd%amz7PA(&PA~!5c$vp6vDQEmc`*F+LZ-5apj(`20YBkh$DgA7JjecJ zuY~CQS%`;b{kRW~VXl8ljLkq)DIad2O5U*7A?PZpG3GcYrN8;3T#ziBQs1RhfhG72 zHuvxNYA%(NNi#)Vd9X+g(uOYG^K8q7tc;hHk+mT&)Gxe%fJQ9q)SM*z9(T;K*X7Tm zJMIQ1O@CIasd|;wbcZ-qanLSv|Co9~avRN-Sp9L)Z`!dgC8pw}YIzm~6K@Y7c8+^4flYZ_m*$JcEG)MU}Gzp}O5QvwKmOVAvdMbcx9Ggoye=1oTT zk`I2a*zsB>d{rjO<48LXWuzsu;x%S{a`?iS17cp4dd^B`pz6n#r%I=fr>U)T{`)Rx z+@(`NumWcCq#eGjUhHJ-gmhZ#>wOJiOV$P8Cu_jduO9{*<07!-9iiM~t%`-S5OC+* z*AFL23N@^nAzpA+5kLHf``$fXsy^U);32Me)j#r*PaW}7w7O< z8!16){ZZs-+E2`5HR-DSnBwvs1`y}Ch%dX=wxA%Xt+t9_4-(d6p92Q7za7b@CuDN?i4za5;(LlFjyV%CJz{c(Wf}vn|7^0)F*rs#vZ0 z{Ze2cr`XrgujUjXT%kdb0#s}5wn>UQvsj;C?N?;sG;`1j@$Ss^dfgGc$t{@FCZzbA ztuoh|wEUO0H`}@QP)P|hDX`GE(9l>#j3zsWi$?+nUnKPL^EtKMy#Da#v70W(={?le zXma7owIl|A2rT|d>BuJSGdzxvlY67ispoY-Q%uc~ilFU662^BX?M&h;l^uC0yoS^C|qX>XQQ-2~0A zIX3{qslDh<@rB1PPS>dF+cAkl+;;a{>J^u+N1vKcn8m$S0WxRlRX6YHB?W|0 zjXT+}9w|*a-vL|5L9EuDHEC<=Hh(X#lbxx-aap8 z#^>nm}&g z+ro-ixQg~YTiMHN<{c~Y1Z3@H%c%ibh|AW)ml%oN3WG_`81tpvq2YM)?b8dM?t7Q4 zm9D0jpx^c%fIF5>UOr+AKYEY#RlR->(f5cGO_hV4Hdj!uqME93_G##Vc!sp53Up_vG!CpE%QN(P5$kfck z(mhpYIqk6G)U#XQo8Ija+oIbzHyK;m?xa_lSLJ*Xv+)xh@}XiR3L%OU^ytm=*(EQI zTKSNhu2}6pr%*U)p@$Q^0rU!5q`9={+<~NCj)sI4?RRkqjvTkYhdsGY5Ujb%fZDk| zL7Q}G@3d3R3-?C($RmAA-zbc~?eyZd`5MzMcHEz!49wxCCKDETRa*P>?GayeS*eO& zhzj3ssoRB0uo%wHyTplhey0|f#fjLO($~ON{S0nAWFla8eQP0S@>@IIAnAR~0GMR6 zuh@KR2R0`hU#^C+sCYypsgn9gtizHl(6}-boM}(WX`mx$p>kBwf`7~;4LZHGZ>`=_ zx6iPDlLG85FTnpVp(MX5hu^;ed~oPA=8c+n2Y%+D-$#faa2EY``F#U;L&*$QN4pty z8ooF%)pT{wkB;V&GRFJJaS^o+GQvJxxo*QU>P-imRf;>E|M|koNwI~|ZZ%hDWv~&X zVEzNR3$RwBqw#X7xqAOF${f2k_c_VNeyoqG<_u}C^MmruW0#}Bhz{$vY^%Az%aP%_ zUqfhmO+mhz(=<8*utxC8KR%Tqi@6ry?ET5dS`UIt+gqa^w{a$+3PCMV4X$t?PdGL0$ELn|6=BPIimw`Hs zx_*T7SFwn-QrBs(Znn>vSDF6M?pPfWE!O4!D*8=%*w?6BOY3QU@H`x6 z({%%2QsBh-cLqW`A(y}h$vsei=)2H@Nx)9SrSni#!IJ>x<> zi?is+Us^Hib?2~XJ6W=hYs6G3%di~?E*yQ8k%$)=?s@2tFvk;NhE1je5ch@(ei>I_ z-f9kQS!I9G2kgVDr=1K0)YK5XJyR07`_`n&d&s}l*3Or|To~yFhH}Sl*T!dq+Cnww zJ)ZRJ2D@R2Iu$rE4hhFls`+hmhmSx~ZHqQyH+q_>rx|mR0(cAEnwA@IAS};infm&n z`A(=P=A_-B*mQP#T2eOjy?pbT3Dx}I8~ZFne?c)5ZZ--*54Edo!=I}v2qYF%S`Kk| z)@;!x_57<1bvGA{%>v3_`dO&H9^J0Wi6709^U1k?Eb!KWI`7`uW;|#Ao@mqmmqjU= zektZJu^mySnu;b{Dh!UbYfhN-ij5i{^-!q9?YrmOM^BB6`Wx- z=($VSNImQc`U<}!$qMl{YR4?c`ihdMmaEllOHOIB7S5ZvA1@Ua?5@5&D&B$O?PzwF{8 ze`>D1CNputbfVgFJ1HqOi{=(}pu*jQ85vR;tSUoKvg@ps@HYv)-#A;ZtEcCj?rvQ9 z%Dz3?>48g}GgbbMMQgbxepd936pedYQYyR;UKYZas)TGRF@pZhfx z7}30TZ;uKUHe%CBX-_{Yt=c(fbe4_HPCes0kR3igJl!=YQRm$cKT3O0?9wO7tp4hG zT->!S$qAeuSEq&1i`oZPx}OLu>eTBT3<>-=0#LxBe*nBR0p8#T+c{iFTm*V&pTSvj z-?s6d@X>_;Bq->$mlVZt?;q|)d_+(t1C4LZBShOwj)-qegwRtMG*Hbx5B(f-olj7a zFH=B(zfC-HRNk<}U(?JcyRie3!j_vVVv;T9J47EV;YY|bC3~K|`Thk=3z~o2wQ&d^ zryNck6`f_!;K9|8kO~OHMzW#p>>*C8{`193dY7l*b#QJwMi)%Iu(QmB;NNf?ph$bL zcHV5V%tlvCUM|%&}^cvhlC;u?Bb} zlPhOsFk{1Z$YH@lpNdi4FLtkzo|XfYFSnaFW#xvN>M!0b9}gPyn3vl3=nCpC9r_2# z*V`T||Ao;SE_Vh>K)qkoou83j(-*tgxVRFfxsXBk)Bsn4;&VGo^_6>4{#Bn3fcY{o z#>w!efQ~Zk3`5>1H0yf0F z7yxE`DRpWy3mo9YO;>`QpRxLR4)9;JgpI6P9_2i0X#V&?$V!((lF3d1-TGHm)@#`t z`JqgCt7aJIVG(PnG^*LcMxFEWoZ2d)B_Js&XL3Up5tgXWc&;s+Hs!T-0}xs}vA%LC zz`$crlgyR8;5u-R0%YcD-&el-tMncMw)QSh<3Ro`w)$js3aL7V6kJgH@w5@`@+}eVcIYe% zD##m<0|_*KRxJXSkn@cF@)IJ|BdgLN)MLl>IN3{kRH9(IC-Q9VRG9A{ClDiJEb@W_ zKAh~q&&PZ&Ok0gs?oNnGihl7%mE&yVayD#tX+?iC?0|B~A{}kK;;HS(Y=Ye_6QbCA z5utj9sijY)PB}}BN?Bqy4=H1FX<9W=ii{Ac&QPXtAt1R*7o`urGi|*lQ>55~b>;0R zFE9D9{$K?5Xo(s-m1tc6YREo^wf)KUu@BeKM?aedl+q7h|K?!#pbvJ$DHlJ4g%mRL zOpMG+%*Gi#6s|j{-paPw)N$Je6Z$~$aV9;@`}4lS-d5j7MJneFCik)ej1>ijyZOSN zY=QC<*bTz7rnEPL5Xj!_b&I*a?#K*LgNo7eB$kgulw1e?IZP#<;cD+<;Dm1g`lpue?sv?iMAPysXI}o zqJKq!r>3=qtO1fb3bNlaCz3-{9dPGCicBuKG{>S*EkI6kk!Tl+0)+%AWlyeQmgjNB zWN6`8ZaL3aY~(VR;-PI4eiwa^=A=n@Mp@IbRHOnI#Gxl;K_zb|-Mnz>2C!q(m?{RE z?JaIoEezJhm=V?N!g(Y$Iy zNa6_VDb#;wcPjRl0aBnDyVS@cT>j{D5n}ht!2U4oB2g)X_y~Al8G8SBt8fLE<9TEv z+Sh}w9Qu>5(p<=Vy{%JkFiBhzO_%(mdcNKlhK+3c2C)EP7t&dZ63exvKIXVA6XNm* zMPR@_+p|h`i$PmyBTfRFu}ZsYH^H{(^P^qA^o{wi&PC;AbBG1@*^E#*KyBH#hh4@G7Wj?{1z z*dmbgfPTL2Q8w`dr_ZSh-{42U9cX=2*Tm?NF~%=Rwmlm7IYzukSu(vhD)R==((`Pi zRL&pHfw_(Yxjogci%TA2ujiLd`Si_X@$DXm&(?57T57`?Cw(sZfou|tu}smN+YMVD z80Iv|hVM%KeuAG9rU?cGfBM(S*>F^eL*U}Ix?C>cQh7a{Vf$o1px#09r|lE`-8x@S zgI~336@}u}zwWQGoGXGxg<3TWmbT2}n-@(%&wlHX#+4V4Q9<#+%(%qej*T_(Q$S5e2`2m3yu*y2#N0Y8Hvn``BT9WNw6~}$MIog$+Mg6l zhI~20#56av2N?=_6>I|!R>b!H*eAY}$L7GGg^Nz1q%E2v=$d+;Cdug+H47PUy2Q>- zIb`FeXWtHHP!-lxLl#v81%BO+3m1g5tEI9zsG|adr;joR-j^F{_EhbFQ#e)WOwt1% z{6nFs(wn@T6qc}(+|h6UuB|O-n&q^SR$Y@HS4X=EkTBotsBw-_b?fBLyN$vk!C1y_ zQJP>y9Bg$+u(KKT)hmOx!^<7MXJstFBE*^Wa&J?*|H@?(%nWJQ!SF@yBPz{NZhv=; zJcR=6ujvdHZ_g|KK0=fD#fXG)0+qi_I^%pYE9V$R!XPjK1xlB4Mw_9|!n zxg33HHYJ8aF^#3c&S`eY%W>nz?_XivD<3xbyU*`d{tPhoi@(~;BZyzPIuTm>Kp|L# zfp)fe_qvp@KU{u1YoX~aKN$A0;HBY0u2DkTQG18S?9)yKUW|P#n%&Q0b{!d}>-MV4 z5pO+!ZIuaLSb)(@azF)D-u*c&tk4tW*C6QrPIt<%=~P;N=SbEEr6pHwto}o{a9cae z{qHsOSg_Q?mo&53n+ML#Xus#>+!j)UR>bk846=V#+iW-V49OO}`86;jE#k!w_}L!avFxl{(F(P8+w|$MnyMZ)d*N zW^iuh-6-|6wFy;I-PLGa7EISxbZoXaY#vJ~{9I$iQzrnB6?A9j1w z#n-@i{d;rMB4y(YaWQlAnvG@>yIL!Q8_v&$+Dwo4$BWI+9lAi2qnEGPY>a9X)(b8Y zI?39f2_{Wl6XJsO$88h(C2NpINYd)=I9K^ZgKfdp^0o0lDTR}n$MxQ}O(FS{9PC94 zkc?l4gc(_4!}mOP^uQcerkZPu%4@$ABRc3ePi_F@mkvdx;lS~|RL?(W-BLljk37$& zNmuvpZJTq{I7xl9j+=k+Il-|{tlW0p>^tD-Xy>m>Pia`!XyTI>C#9=zk6{D8rSgqk zCXYxe+>U^rNN&rI-~rRYFx$J*cdKET<;c0o!WiR*)GB|TnT{%1h_99Gl0}M#r*BdD z--}>_{G;vBu@s;c^0jbxm_a3ZpC+>BC}2RprW8*@)N>si6!o1Izn{7u0;2 zB=9^wf*i!Wo@m!(deZnHsxrRQD1HHPAYIz3T;|wcvzXXu&Ox@wqdcB#UI&}oR^X4_ zl{Nn2TWXO$!xJg~QWCF2p2&RvucCv1hX^&|Dqz2IVy)ASGo5oLM<;MODp;l%XQUOY zJ1#smHzt>+x~IpJvaJ(n8l3L!hGx&O4VZ~r%6^kZ=)ag_vBF8PqrlpF;aJbkRf>shZL*Saakf)DV3 z@{+Dod!iln)oopJ+d9eu5x^o2cAV!5hpgDX!^K>%0Uw!~EA-@i#Koy2y55A;C-#qn zGB3o3Tqt*mS5zSLuP}!bKu|-_xEIqRd`OOsVvQhcoCDWZ*g3suDv)LH!qMHj7?7X_nv28QL#h&n~C^V4t053})q!`vdhxBA?%k`fzvm5t2eLD4 zI>ge$lzQC9veNzZXc%*)Zm|iLA?;g$y3vH2tK8rj)G5u#Pb}N^a3a)KB(u`gML*N$ zVm@fIqa!Hb)sOR)=@G^Hde0$jIf_dgJ? z3J$ZC*0=Ov-I+neLWr(xmZ{HGvE{Kao`b@i`*75tVIe>AB-b-Y7KF~d5fhH`Uz zUlD3^C)ECR*<(Bzo_Dx$!!M)q&sRB0+EwXZGI%aCRlaG)nW15y?TmD@4F3LtrCvJ= z{s5o6$1Z=o1X{Zl&X_^0L9_J7q{SCjBm8&Q;;ixZNEuFztVVWauy=r?z3=M#f``Dy zq$l}NigpMhp`lF+R;B$EP{0b5qz^qp=ZNI2S1BD*JZ_XV?gKg6s;UA7#V$TO(39N0K2YH~rHr$iIi~E#c#eF%+2D?y7C$K!|i0=zd#0_b17^;Lc6+I@VRjuGt6FHvqRS zjoCkT96TsVUQAL2VCPR$stlpo7Q-B>N_TIJC+5oypRl}OHyRgviPrD29FG-M@0&0Lf1 zQDQ0ZP#k6`zMkr<5CeR`f2g{t17f@|gOsjfblTq^ZKVO>RD;on0=|(`Qf3d6Ca6;% zJcs-m`7&MU3^_bW#cV_c&y(Y|qXeeKJ~Y<2{ZDL0C zJv?!0#Fe7r)lH^gE#tehAB@F+5)G;^yK;PctEi~8h`U@z;f+`qRk!&KPH;=!8vs^1^=oxa;p;8^`6PmpmDv z?X6yV-we6~`8vQ6{>${Ob}rUrLOz>TcF50bkDgO6IA*?GScQ%oDqo{ES3;tcVRee%I*0odny->v8aTtl1eo;lz+RJj;G4GPS z*_xuQlXKl%H#;Yq4i^uWZaT-u^h!VORE!x;6)FE)Fk2NM6{D!-O9z;9tu7ouj9Lah z9@133FN3?pM}2ok{?4Mv&R|~rBV2ZOq{`C*>=1ACI^GZJk53PzOEsJ&?`xagIG_Fj z$KRPA3h>QS-)I_OvP-7tli_oI%sdio->gW9<9mi_YfOS|8BaMXkr|3LAu9qDc7_B&}7Su-#vpQl+H1LB>SUC%e@TRdFoE36+xb1DCLsZXe* zY93?3Ejhp7aae#UHhB3!kwo^^QzPy+nw0n=@2!{9tB;60>Gu^7ZtJohQ-FYRV6(YLo(B9h}eYZ%{2-O&Mn)hqjzCw|^JBXJKZ-bNe zn%EIc(@M!0C096>hj{QeXNs59{l{y-`}psx9BEkfXhnO@7)7#Ro4YNj5OyHB)(C%! zdHBicZ`$-2B?UX866yXNH8tfcj>3}CdlRv7lj9<^X)*%JvjvAnUH*w!hu$To<~r=- z+oTxMpXL7KJrQuHH)zYj7iUaw0tm&dPu8 z_Z{!MCBj8SxErDi(_cmd*4JKt3k7xt^Wkc2u;Sz(x~%aF6V0~d;cZsU4<$-AwW{)y z8Jy3U{NU-LJ_5j+c<+}J#~n*g=X)I!YvQPiv3Kk1IZ1aU=Z@oVvxIEYd#xJ4kEk8o zK{7Uq2mQ|t`W+6c_%S>20wDhkl}hX#Uv9^sHof{yI8Dt}0WW3 zG=<6B?dt{Ij`gOCz2009s=u?%cly@1*+@3i1#iWt9RkG{tOUIJzbGW+SVxp{I8LaS znGA#L_Y;aI5N?befrMv>3AZY)$^E^8cwP&;_(r9;3X*guI?3@%{@HDT9Puj{5KLv! zXSY)M$W7k%Ot+@|;fN4NC7am*=Zh7S&s(xuPO)!$oZzA&uqTTkOUW&FUU{pL6#zQ` zKyv<~_+d%eBV2@SgZjvyOoSAXI>p}7-y`xTCo#D9h4Y0{OPs%hpKm{Q&qsdIb2t?{ zGXjLh#}vbZeQ=3r2+Pu_1oZB+ONlAhxriynnE+~Tqdl9zbJ`QntIVT)2Au4vDb}i> zJ}`{fHdBB{i}JkV_>>+IbV0l|1Sy*Dnig=@HM4!Ejh7R)kt4Wele$tM;;REb->NxG zl<1K@kj>&`*fN)p1%JICPz4uZ9c*fA{?sSmdCUJS9OxbFf-SFawS!=P+BCLTwoKE> z!@VM%O4b@C1bdO4KzH|kV9Gq(dG0$!TPOieDH?8_(j}#m#Jhj5b>jmOXO7GKKN(5f zs`p|ZmlXggwT=xn%{VOFT52Zh4PN}q@cfGg_=gJkC!=OAJqD0h?${uE{9(#GzEEl^ zxoSERg_8JJPpE`!gd$H$BTZMQ*s4l>BRp7~c#(ydae7x>vRb;cHz6=@R)0gI0t{h%p-4 zu@b`ikb|m`{rprB1{6Uu%mXZO1A8eC4pRy8zAz%m0hab(L3p zuCH75MeZlOl_jQ9GG}V(B-hFW;fVyLH)`M`jvi!oei$>I3z_rBJZiN& ZB|qrS|1ISH@1ghq*Kf+3+5fNq{|$Tn@p=FN literal 0 HcmV?d00001