From 16c0580e584944a3ed45d6fc122789572ca7fd59 Mon Sep 17 00:00:00 2001 From: kieron <kieron@6dbc8c32-bb84-406f-8558-d1cf31a0ab0c> Date: Tue, 10 Apr 2018 21:03:37 +0000 Subject: [PATCH] git-svn-id: https://spexeah.com:8443/svn/Asuro@481 6dbc8c32-bb84-406f-8558-d1cf31a0ab0c --- Asuro.iso | Bin 5115904 -> 5115904 bytes bin/kernel.bin | Bin 57572 -> 61668 bytes iso/boot/asuro.bin | Bin 57572 -> 61668 bytes lib/E1000.ppu | Bin 15190 -> 15190 bytes lib/IDE.ppu | Bin 8930 -> 8930 bytes lib/PCI.ppu | Bin 7889 -> 7889 bytes lib/USB.ppu | Bin 3725 -> 3725 bytes lib/bios_data_area.ppu | Bin 3345 -> 3345 bytes lib/console.ppu | Bin 21006 -> 21006 bytes lib/drivermanagement.ppu | Bin 8527 -> 8572 bytes lib/eth2.ppu | Bin 2247 -> 2120 bytes lib/idt.ppu | Bin 3079 -> 3079 bytes lib/ipv4.ppu | Bin 2197 -> 2845 bytes lib/irq.ppu | Bin 974 -> 974 bytes lib/isr0.ppu | Bin 2025 -> 2025 bytes lib/isr1.ppu | Bin 2025 -> 2025 bytes lib/isr10.ppu | Bin 2038 -> 2038 bytes lib/isr11.ppu | Bin 2038 -> 2038 bytes lib/isr12.ppu | Bin 2038 -> 2038 bytes lib/isr13.ppu | Bin 2137 -> 2137 bytes lib/isr14.ppu | Bin 2038 -> 2038 bytes lib/isr15.ppu | Bin 2038 -> 2038 bytes lib/isr16.ppu | Bin 2038 -> 2038 bytes lib/isr17.ppu | Bin 2038 -> 2038 bytes lib/isr18.ppu | Bin 2038 -> 2038 bytes lib/isr2.ppu | Bin 2025 -> 2025 bytes lib/isr3.ppu | Bin 2025 -> 2025 bytes lib/isr32.ppu | Bin 1983 -> 1983 bytes lib/isr33.ppu | Bin 1983 -> 1983 bytes lib/isr4.ppu | Bin 2025 -> 2025 bytes lib/isr40.ppu | Bin 1972 -> 1972 bytes lib/isr44.ppu | Bin 3084 -> 3084 bytes lib/isr5.ppu | Bin 2025 -> 2025 bytes lib/isr6.ppu | Bin 2025 -> 2025 bytes lib/isr7.ppu | Bin 2025 -> 2025 bytes lib/isr76.ppu | Bin 1994 -> 1994 bytes lib/isr8.ppu | Bin 2025 -> 2025 bytes lib/isr9.ppu | Bin 2025 -> 2025 bytes lib/kernel.ppu | Bin 4360 -> 4447 bytes lib/keyboard.ppu | Bin 4479 -> 4479 bytes lib/libpconsole.a | Bin 102784 -> 102784 bytes lib/libpmultiboot.a | Bin 29056 -> 29056 bytes lib/libpsystem.a | Bin 184408 -> 184408 bytes lib/lists.ppu | Bin 4562 -> 4562 bytes lib/lmemorymanager.ppu | Bin 4138 -> 4138 bytes lib/mouse.ppu | Bin 2658 -> 2658 bytes lib/net.ppu | Bin 2427 -> 2751 bytes lib/nettypes.ppu | Bin 4642 -> 8211 bytes lib/netutils.ppu | Bin 1835 -> 3681 bytes lib/pmemorymanager.ppu | Bin 4034 -> 4034 bytes lib/scheduler.ppu | Bin 3289 -> 3289 bytes lib/storagemanagement.ppu | Bin 6429 -> 6429 bytes lib/strings.ppu | Bin 4852 -> 4852 bytes lib/system.ppu | Bin 12619 -> 12619 bytes lib/terminal.ppu | Bin 7660 -> 7705 bytes lib/testdriver.ppu | Bin 1392 -> 1392 bytes lib/tss.ppu | Bin 3231 -> 3231 bytes lib/util.ppu | Bin 9172 -> 9239 bytes lib/vmemorymanager.ppu | Bin 5818 -> 5863 bytes src/driver/net/include/nettypes.pas | 61 ++++++++++++- src/driver/net/include/netutils.pas | 52 ++++++++++- src/driver/net/l1/net.pas | 18 +++- src/driver/net/l2/eth2.pas | 23 ++--- src/driver/net/l3/arp.pas | 133 ++++++++++++++++++++++++++++ src/driver/net/l3/ipv4.pas | 53 ++++++++--- src/drivermanagement.pas | 12 ++- src/include/util.pas | 7 +- src/kernel.pas | 18 +++- src/terminal.pas | 3 +- src/vmemorymanager.pas | 4 +- 70 files changed, 350 insertions(+), 34 deletions(-) diff --git a/Asuro.iso b/Asuro.iso index eb8bd503082e5684cea8fd30f09f09077dda1858..577cfa82f1cfeb219e9ae518ca87e470052c5e68 100644 GIT binary patch delta 26496 zcma)k30xIb`~Mxh0~bWOC?F~-;8jskQE?YVS)5xgxYaE+HI*`#)X=g_F!aXtM$xNv z?9EEk%6je1)MOwla2d4hbuDqt-BHZkQc{!u_n9*n@$K~ff7Hygoo6}EdCr-0X70zF z6{=qju612=BRVE@?$|vc!O|%KAhBaYCxfwJVD9JPwZd!FTXJ_<&rm?i9Ba^huw=kH z(T4Pycar}q-SG80kJmNCk!!mCRlH>EnmLBFd`%7I0Mo;g)}J~IX~w4l#~a@L^hN*w zWqREZfy3|CMR14f1SXd>|8kij{r1b=0^Qo{V-0D-dXe<y^|5wJi=V|J;eYF}A%li5 ziCNR`uZA}Kx;{?+ACXsm!DC#$taI1{x%TDdJJsxj+FxM3ZPCU5m6!j&^%B#1N$Ov% zFKJgAZ-hR&w8n_}YGTRfrF_H=lnNqS(rQafLpNiKNO$EHuDfGPAA#QnTY2((Zx!k0 zZ{@lhw~As8+!kl}P248ZU9^qsuH7bzxoR7aIc~css^_=!sFrUR`MtWmjp4VcCXzm< z@u=R{M3#TmxaE3fBHgFT;_6Yc;g5<fxW9A6pne%k`fckhNZr}81S5>d9U@cHcJKjR zE|gx~!Gnz2DN5b6oji3*cZ#}jdMEFK?R$~#W8ZV#9HDftDXsioWO=|3-15{PM3%q# z!C}lqGdV#i{Ra;Jo78mK#e*2VOEmUh?BZizE|j+YkxNJXDAN7Jl<xUa6k^POxL@Tz zq9J+jKYYOU2&FA{^C8LDEz<pH_Y6MRdqjzQY7bA`YkNd7|FVbo$hKExdCXp3&5QSn zdURwj?~&g=k>!#5xaIl#M7q28aow9j>45!QI(@&$a_N3<`Jzyobbw1U4~Tm7^#R@^ z{eZ}Fub)~zP)4c!Mx^~s8GZE=5Ao<vA~zj><^wkRXOZ+vQ+o7gQEJ*9<d#Pq6zP6? za4H|{a*=deIrqD)Tx9t|Ik#*-B+{L9i0c*{66u~i#C2_lMTr}Am?wRqP<oI{|8Yd5 zI{XM%op(g!_QxZRkQ%FAVA{a+B`bDz5-fQsM|qt;eN@!BZ;tZL=|@FgdK}}O8+S}3 z{nC_{9}`(_cbr>x9T(|-dYoI{b6nK-=D+a15Bx<mbKm{tMLyIgM3yI?;Fb%7(vzmt zc2eYb)Jb!=PKx~QKgly$Db#)V6xYo<CCbLmQ|*nIZwsYEPV)!P{L>=c{if9Kj7a+E z8LsOVN{^i3^V)V+q&wy;AEP{>^q48NofGPwGj)a1W2V%0UZ{KC)D=pPo$t=aR~P9{ z)6IvpP<qvrMqd!=&c492@u5(9>jIA|_M%Al`HNiop-_73B9E$Ng-G|M3a<OHP<p3= zM-_KTr2FzEF8xd>tum$YzlwAh{K}(RCzQ&Uc};e`EUNZJmwB~+c3Cvb?p)@xEcQ3i zJevL63O<5YMA9i&_)J+Ul%6-G_N%E8_s>?olh)utjU~3=-JtqQUcTDM@bS;9qMrYD zmG`{qHBkgJuki@}c}>)}ifa$7twBn^flHFNB?{Ko3D<cR7GD>6Id+|U@xLLGK6ay} zVbR>0)mG954jl3~Yxw>f+|TVBqIe(vol9r^F7mVecOJ#%-$kRGbd!(rlQ%`WU)|)o z$8U;q-1!!-%yG9wQGI!9BCml;k>x3s5AG<OLxw&2H#>^6mArewe~1i?{ey>?_lKx^ z2mj#RyZeVI#6h>Y<*eJH?(MwIyLVG4efSQa(sS;J{BFO){a(ByvfTGB*L~)$Nc!E~ zL?dxG?}}m`@F$OX`k$g~l>W)HaZxBuy2quN_e6fbz86=w#+JhN_a}ua-nqxCL?L`$ z^)!Y5R-_~d|E<ZA5&l~Rl0f&Z(~=P&3zkI6Y>Xs5c$^tH^5MTZ&aj`*mf~P{B}p(s z>|sC2=mneMCklma^)q9+<R=NT#roBfj6q~mYYAihrk3gdOf8{)538v^(JGV|`Q&HB z@*c8elqbuSh5BF1ru}oWuzx-Lr3craL1}|91%-P^w!z=*%wd0_v33DwvK|Q#CgYO; zX}U2Okv5_J6q~8P)F$lA1)JHKut1^yQ-P*_L7-6oY@n%c4-(2J1)1`KAYuF`gUtTh zY7703s%`pTD3%{I<!=WI%?}MW&A$*Vtktq$vsNz!3&ZbM#|(dJ9ihC`C%+_?_p58x z()7AQ{jEOvmAb<C`i4mSg`e*=!{D?>Q)o4BEP8;~ku1|EJwJi%X(lBsIU$9<ZI_If zsw~njOzsrBuQ<f=^FFyfRG8iIp=NgTLWR9M7HVeCR!^w^SUpoer=GC)yX%>wbEBTn zzO%j*_rU3Sh?3$IKkL}``lhc-^@X|U8)oL>=`f+MZ^F#J=wf+NxG8@+T&y2%R>DQG zyl;dlpBf?5FZIbUi{&W|O#jmx2=%u%kcRPvB2p-y7HR4)6U%?~$s-$z^&6V;|5Ggg zt)XeZQ6r)LvyDvoKgIIj8kzQ^8VmJjHa7K_i{)1vOYI-1m5hEP`u$C<JQrow%0Huo zweo9}St}7ugt1I%V#d0xiLkEEH!<rvxT(<o*rulayr#l=bEqkg@9kzn@z7>w_%AdQ zx-V-c4d$f~EewBJv}7D#*!$5!`@cn-_9J41;ZKe+!~aK&(Ej-t>4E)FV1{c+=sv+q zWi~$6Oq4rTXz56-Iq3e)h4N9&O}SevKjM@7JA^%b)M55?zC+m4y$-Xdx5e^7Ell~G z7Q*;`Xko^8Q!IbDr754&QW#%ZOEbR9VtL<IraZHiF#e)e(r8`@al-hf#rY~hEWhrP zJ6a3%=eCxN!y;SLTIl~yYw3Z*O7QTsVNSNvE_M0qk&r###!TjlHbP_9ee$Tb!eC~$ zHD~4fZH4+*+nV+p#S5p+<ao0fUym2sKOO(z3R8Rdz_hd_3w{?B_M~>^z`WK@XzOG< zGuFE8h4KmQ&BA!Sy|6DQ+nap}>LAn~+rhN|S_ffYk93fF^1?_E>Q75B{Vx;CfAz^D zJBsx?`t&;r3;RMxGe7oDLj6gdO#K3}{H#xI?=05uEX6<YG#HUS;%~lev9q1cSb`IU zxf+#d)<sUDurGTPP5nx-{(vr~{?sl){cpPb*V$~uu#tcBjevFOYWf=8RoL$@yPA1B z+Ev(>w%yEFGP((4S=mj>;&stoSa(ypKRBU-My3z%^fyo0v)z4p?IH9vribLHd29|G zi4*B%(QMk^!;HF8Y{}Wv^faTVFe}@8O2)S^Rw<Sb>SZp2^Lq*P_xCdO{d)`Lqk2o7 zjI0&(7G~{qZ*#T=Ckge(Cz;D=L6UIPen~R>Z|x(r|7ai6eoh~u{_Z|fY|Tv9ePjUp zt(Me7un0T*ngx{AS2$?f`$`$SK$3;>$;swW6eJ6~dN$d#Z|^6RPwMBJ_>eac9fBH5 z7FOEPzdpOyPikm{(x|`C)U*A~HE_9Dezm`u_2?9#{_GS}zFI8*BjvxgIj;02GjEFO z_qkMa{FbE($LG9H9-JnOWPF;Ll-I=alWAt8_H^N(j88WQB`;m*|6sZq-`#Yf|Dgj+ z|MLb2>u>h}DV;`QiTL+9|GyuLu<sPf__YWtSA_AmcAD{LIEC_+KKTxzys+Uz(%t{# zZ)NHWek)Vhv9{lCYvDMj|8stBm*jTgUd!#Wx?Qr{<?nU{xLr24E70u<a=U7~UBPZw z9k;8l+ZEz=+1;*Cx2vApRp0FjbGyRbt_ZiQf!h`7b~SXn8o6DK-L5FNtBKpy)a`2K zc162gF>Y6^+tu9da=2YB+^&{xS1Y$G&h2XLcC~T4+PYowZdW_EtG(OR!R<<LyE?jE zo!qX@Zdan))y3`V>UMQ=ySlqwJ>0IIZdWh2tGC;g<aYIOyZX9a$!=Fax2wO~mEv}# zx?O2*SGwCZV3SM9h_(-GZ?W9Iky+sTkIk5?ga^&ASTfad7X6KxEc*o|!SC1%_T>vo zhXw;@S}ae$j@K5&<1F@)%p#j*U5sA%B)j#3lJ94GmbvFDiS}V=q*_<lOLQgOV$n~t zbuTF4?3cMpXoKD`%=KqTrhcgY$#@p<qVj>?$1T{J7nNbH^fwz@EZ(%cJGbU<YzbeM z{H&Iig5qtksO}-ND;1dC%tBvM2Ko(A3dg>r6iD^jjX}(wvXH{E+)BTf1N8T%FzIC_ zH_!%tg{+58VfimB9sTCVvXYmT{_T6lS}dNeWwpqDS&EH-H_YMfZ_}eml4A8*9bU!e zO|h=G=)bar`AU+sn@yjuM22sQ`AdV`DeT?(%Jjfhq<ckQ9?R-wE7^{JMT6A5DK>p2 zVOu;`JQ-HcaqnQ8XDhcn`5E?Awo>ZXHHN*Aqs05U`m&F6l-Z3=_OV!c+<X34^_`XI z@P1J0a>91@VO<s|?fu^A!zL|IdS+*O_In08qCKVF(A-lYd0~!_O`)Y1t%Q$oNQ;L` z0Dd8xX8M($vxRILT1)yl)05?}0=1T&0%xWyUCZ>0aQJJf4x7b0)Iax>U&sfkjz9yI z2n_;Sda>4mQ&r6<!y_EQi-+1^w(jDgf!Tl|Fc!p()#k?R-y)lq!JeDxi$`<}&Kr?f z56})6k$bP!yo=tUVK7!zWr3}zkWGkF+TuAFQn=N?Tkpw4%0@e)^M?oLr#kBCy&_Qo z!|lK$^bUlNa73sDj?fZ)K?FPgijtD8dlM`cjQaD>s>?n^l6Lh*eSCtZ`n3ooZVmBN z@VM6N#8Zj4ns`ge(u>5~LA(OuEhAngcsWVSfm*VH)p8PUfUqJ+y+rsYz_;daLPyyb zxys|sRs^D;Rf|nO?7;N65@atavaCYIM&YKv-HF95RA%~Zn8e;)s5J6plUU(Gr9;@c zi5AN`Nq+;`$UAJzxC0Z}?S)FLU&18TbdeIDmI(Dl`(`)I+md_AmV4VayQMdrczLg! zKx9=i;T84%%3DbS<YdmMGC7gGu}B$P=lBGRWqov}y27IGpFs0DjD@(B23^y65JT=& zRjpr>sZO-$OVJWxB@qV-;JiW{i{2I-Bg|_P*l4%XDC`m5vg*(34x~<Ci``0eoh!lS z1drFdjbw#xED(9)S^BF=o5raKO&y1uz7Oi^M8bA-$8b$}l85!dt5_>GKj~X5uGBS6 zS@c#TSlO#E^};yzNFGcrBvY%&z!o%DiPY6@Fg1KUH}ypxOsyU7Gi9-xrfTaAhO>it z%8Nr)=y;O@R}tLmxtV*(>WOmXZB^@FX!WKIES5Z%)f=AGBDBPlA$!9&qM0Wn(A$KN zBK(BTQepFa-`}&>J1WpSJg`^zM)sjcNs&}`&Z7*?-i%hdy(?B1L%~~1-`@p+mJ_=O zSjeUnt6oyg`WTouMb<A992HoRPymgU)#6uy85*xwv$CiqG&U0)71+ygGkd2u%8|Rx zx;5LkgwC-PpMg*H3OVlB10fjwD-5?-R#8vN&=HGeC81ifRWgvWWSN+}&j!cSKhS_i zvdUyi3boMW8HA}hp)l@<qxuI{ba$0KvP2DA4Q5VTFr$F+0KV+b26>g9Ve%8`PocaR z+PNjxkiz}?^)c*SuQE7v6_)M$5<TpR!rNY@wx3jw`M<8T2*&RhJ=SkBT4J8Q&APp= zv`UzMxvI*e6_=BbGvsm*65=V>y8;y7sOEMf?iD?{3w!-_WrGyT`oE#1C8YgoC|f@A zDLWDk<vIYx!PVTl#J!^5>Red(hGLVXAXZYK%nXjKZm^&eOL|jj(AEKtejSh2idZ$C z@biR6sELFhAv{P;C46^#mi?wOvEGG8`P_`Q=*NNThaREwZOrWdPy!<HblPe>19LAW zV)c&q%yT4o&VTD<9sZ%L2+o2X-s9#S*^z%JNwqPuD+`cPy;mL9e2L=7{t2Dd<YhEQ zdQoLnRZfzDXN4B$R4c!UHMAn6cxg2w2MqnCKdP!0mduVUUQ^9~8hkD7uI0iujC}Ft zYQ7zObp^R~`$IGIc2yOB4&*a!iPAD=Tod$nRDd}XQN{gpOQMT28uAILpB%vIEL9r! zIsrz}F0!iQrZ2)1b#dC=g(X>G#d}C}g+$hmA$kU)VjD2t`*%CA2}_kTeG;O;iKGU# zv5zQAb%gZ{$FQ9$Dj-1u39dEbf{S)TFpdNY2@W-4i{4UN_{E-QYu{2<XXjqBVKJa5 zrf2Jl)t}f)5Xa-{8X)?~))vc(j||rA0h&yhwDJTBvY2Ls?stJI3iapd3m>JqrLyM= zb`n1f2UV_T8O(m3YrreP;`$a$S}%O%ZnN<xOSZ-5w588glfSx()T^pY1Jyx>)Ci?J zLh)^-)G7+@=W|t6t0-1=BXy+#9zU8)-IKOb@YR3pa<LLI;OU_j%h$wv*mE<*Yklt$ z6c?3b)m7<7#NIH2uG*J-CuH8q;%zXZo*<*^(JhroeGL`_J!M$+((c~_28xoQjD##7 z=3AQW&CI2_o*s~Dv0(RSZ2Qp6@{s3de{b+xms+ypuPP0K$^XvTfgUSyq&y{xI6X>d z*C{hN4PRB_(=#57Ilh${Gp%TdnP^|kHz;QN8btabf>FZ=Th<COcOF{(4Ds&)1z*gs zAt8Jh8y#)NEbF)W3uBIN#V+R|X7bNt1}D^`MAZhzj5(gUmMLr6MPal1Ej>_Z=cIO_ zF#c#k>%FzJZh?$8Pv_Mh#E)so+P$O1#^+b7<j=9Bt4SpL6grEcGSg6z=jmK!AA9K? zrGvDk@L%sJk4Pa$ut?|;kKnfQJj#QeIHrWB4}36bQz>W~XiO7I8qvO_jesjPi~L<1 zjHD5%>&;;<cMwlnhgHf0Njo~om$W_2&7|4&0hkAZfu7omO<(mu(!hChl@e9we$o&O zJA6uMoBr^FL9g`%?azZI+86Xf3VH>FdJ55~MC#>OMfB$e@}T>!elX}=$Os?l6Am+I zf4v)a<AR{qwqo;FKM*uHD_5gB?*|ReV{?_Z1M(hvFz8FZpy?n&Q>sSL8!6~*6zV=i zqY|m_z!5~B@NkVO1qEMuZbn9U&{tZRLEH3JNy4Bnwc=BX{F_s%l`*Ail;<TD_dZTe ztB$cz?<+Zv$2j17G?t8232~t%s}gZrNtn5VFwkTx`e7-eo3o&wA@+{2*%q9-2TmTa z8mvF7S**(kibGn(9{)gTRHqUf!c5QMOstUa9bpSTP`XQrg~cBzv67U?j;&C(+Q~Cc zc4_H&Jd!6i4qMs*Hjp(}tKMj36mcyyL28Mvu7`gkwaanShbc(y3c{2o=-%mco?0AQ z{d+*cm)hO~e5sw$#!PK3{S!ngsE6Khtm%uW2lCHT3r@cmQ4iplGanqI9xAcm)eL$b zDbdUe;z1Mb3wj#`T~49)M>HytdiN*<y+5rwXt^h8_@a(SN_au!v^Ap+(pfiQ)brw4 z-MLCc9U}rBHdr0!Dvb@688=u)+<MA`ac}m;9mwM*+86g3ire-DqV0ruR3i1b#)x}s zYK^!_!xwi{nlJ8xcr)%m{Z;Ix1=-$g#%)Bv;|7c34knfv_hz<ZwGy43RUbCCSh3bq zIFDSZs!|gP3&y@+<;0)qJYdyBK&Yw2?n0PCSVhC?1~&aN2;Lx!8jPj}-`8j$>nOQW zJt$e<MlGk3{30;@sY&o?Jl<;VFVq=^f#0xiDAzk<dCskr<}~*lR_T$Tzfu<)2MrVm zi=IW)HT^x5O+}bmK#FgYkF|uoN<RGHf(_P{2HEl6G}|hpQ)$7gqUAQ|PXrpQ3&rkf zT|4Zkc0ftJM4D?uz)NTk-VNdfuLExxcxo77O<{K>8A$S5_j%i_^kND{rJ1g$G{x=x zNNC5QrJ6y_KR`_uyVhm<=mMe*@kA2uMd|2M@zB%@F`};xy5UW`ky~k-9a@}KZDI^m zD%ut2RWk;1n?93CL@p!gW->XSOcr5}u200~L(lGv+h^Gwai6rms!Bg`3%4Jz^6DC1 zKj<;Yv>t^8SAP{78GT<eI+NoEGu>;$YDu-vL#WaGG`-juhD%smji;7gFCN%8m#V6Y zk5)JRH<}h#R+Ar4b!T7ff%~Lpkc55d3*1eT1=mq`@!;uY4InkL=||bDM7Q+e;He2D z{j^#dK+?k`?LtyR*Grf}?G_NW0wb#5q9|kgQIXrwnd(2b`4gpSeM@UvTxQo<a2oGm zES|*oEUnqEpD05{jJsM@m7ng9_f+Nj2*Oi19*0`OA;4a|@Kc<9%k@Zu&WaBy#5*$U zB5p6MNl4)c>|HO`#apg>A%(#XZ&W@k7pzfYk`^L9Sm=?7US>X2kl8<^a7!82q~J0a z;IJ_3f_fzZ!H<P!{V;B;EUm*!G<hMryhe!|wVb+Gik*B#PjxlnUlHD3T|@Y%gvY9D z34f392z4FdZxSA)s)R2BZce&j-==<^!{$v|%4UA5#5}v18l|C;H$d+Lpq3CLkr)H4 zUW@(^9(n4I#2ZJ_J%mM=QY;r<RKI$Nn39ia)8|w(FNJYC$-(+~gUO`NlrZTKi}*}w z*3i)Vkec}GjUo2Vu`aqfTUU><!JjGprKRl6&oGmX2s==#06h+XN7&S~Y|#_(c1Arx zAq0V!lO0Sit}YSX6EyO0gYfpGX+(bp%OLd)(LYADV??pr$F%9G)y!gI#!%B>y+bwk zBVSXy-pF7w<zGq@-kDh>^Vch|)ZFjP{C}Y{%UJ2Ze4VMn%tL1?0eELF6T?Wi6|a<d zx*Ne14|tC$MZjq=%me<~$F%7Q)y$85%wWB7HS<j$)2{o=2A7Rqt29YB`uzk6{q=)1 zc)sjYy4>LBWZNuRt<<|jcQuRz<LMmi9T1GVm;?rLyPSQuR#Bvp%=Wp`OKQkcKgV0V zn^y~;{#@}$oo95$qH14{`5%v){+d4~d`2hmx)U#hcrOrdMIv}E;yukAUnuE**M4JD zzfjtaS_<Eov^Gx@!YU%X;Rdu8c!$}&{p}Fl^gM1ao<XX4WNsV9SxX;;<$G~jCC;tw zi<egmKjFeFc#NoP*flt+OXfUQhl=X3=nYu<I;BI~Wj?1}2&)KNX@FYZWV<)Rj<=FG zJu~dZn+>aM#X6;Bg9FtbHskSvbjsx65<9j|Y2N6*`&USax9xuV4m{`7E3DC%%1hzF znC?hxs7gzMcjR4f*jvG^*=JuWN+gMjlEKD_u}?RPxtq!8$%57^v9%y&&CV(jh5`QU zhvLxn*s~DJeD;GicfInAG?$%OuS}4_nX*CY<M(p~%iExQWcvUsIhM9%tjk7aY?yNs zGMIwRmv@xaTMNlOrw(LmHY%;NGf0vSiSLaJy)9Hn6E^|euPJsqCwt0EPgrx*aqYtK z`Z!U|q6WLMD>C@roQdG;-+@+NAjwzvB~wXq7W9HU_pm(A`pSHhm%oWjvy88lcxfJc z`75PE2gCU6tDftnr>$BpQIdgsa>=~s3L@|nJPow;oYnLCRCeSmrK6O=>TFWlhVa08 z8I2GQ8?Z@<8A@%d_Tf{2m0nUja<Qsv!9630e|swR0U+^FM9;>=T#P0tsUUS3MgKA$ zqUu`0Is+?{Q-M;jY6dIXqzs55I>~~K!gDRW;Y46lpV^|ylJ`mmhNntSWif?Hlg1=j zR5GW5z6eE8RfouxbklM&*kgrCT($~Ae;W@$BdtYOszRt9KEeZDB|}Bz0*s|#6qh7n zBJF{KT1i@a5Onc6;#ms83&Ty{OuRkBiz40#;;kXx4C0L@-aO(hC0=rpy<bVuLSil_ zW{$z^gNAE}S3<n0;Hf(ZyN0>EwLsm|7kFkbOsJFC3aV>aKNX8YViB99D$!F%w`+m^ zhAgBff5@h-`lC=%yB9$v2^ct&OCqCDf;l6MhFP_htS}|3iIUY4k3EIjg`*uFdl`fW z5+0$t2>(+ymZWinUj>fE<SIM{jDw+DAC6{`MM{j6#d;Pgt!gLtLmys1OLZBWTBHmL z<6+H?581SZ2au0({IN)BgwoNAl%ZyWtnm8{@-o<<Vr6`2$+K~^NHv0FN=aD0TEf07 zRz|k#J&V{l&0sAuj$ojDrvk?}@SKX9eyTkJb$rA6eXTT)Bo*I;-__1H;ZLNnd0#8h zwIF59UQ{A#lVS60#Y(=$(TenZXDg<Et;9(=EOfKdRw`#no0Z6fa(FW0USTBtP=2ES ziX7<Vr9L6$+>V^JCFhSJv%b>gSHQztx!l4<o0ZR{7;2(V!sFGL^^3y|dV39;4gXf@ zo6XtSCp^&X@8}Pyx$nhX{v3;Gb~YlbssB4lrzYJ3RbG?+sG82^amg6*nhpNX^!?L_ zw+l~Hom_-Cc_&X+6G}>caNRuXW8OMkE*tU^Q!c&2-uzA(o}EEsdW^>OGE!u`Cst1q z`3sR>p?~UGBKHvaF_9ODEG3c=`74p@iOeJNDv_&*oJ-{IL@p)r86y86auLXiC)7U) zA3B$aVXE{kh-rkUt1{u^3Gb-}5<Zgf_G%r%orK4#p@h>nFHECw!aEWkq&EDPZ7flq z^^5wJwJ25EO9h1^N|m}&#)Cznk3wtx95(Pq?hDM(JnI|%`^oie_57^Hkb~}bjfYN0 z0M+p=Tfaqd__hAFuzZWMQmRd<opK~2WRv^~TewXboK5Lp7p-5%EBSkMh|u#4<NPD} zJ)>r+H6*!}L*@sVRjfZrtqSfLV+A?c&8>`_AFNMC`cUJbBlV;jri>S_f3cS!>v$?z z^f0649E-pp4v0R3aLyKNR}v$6p@cd5Pu{lz;*d={@}uf|lginT+m-gAT>8DXP_fYB zu(F&5Yf7&!wh~lOByRdk$PGR`ZiH}y<hj|ii51-ES{6rDw`hnK=$5sF&C`^&0r6bG z{;et9A`*tcPIt012rtQtQ%%_&P3coR`n%R8%9N6n#W^bqQ_GaLauk^^J>j3Po|xad zB!70v-6DGNdHth%Fka~0rMzyHQdpzCO4sZRZU}Ze;h++-DQ%bj2M$H*ICAwYJ|=|} zrhTWMt7eTR)~2*FeSbB}$yqz}l4@30&f2N}2o^qmQG^IEUoF58<<H*iizk!q-mAz_ zB+ehS*;D@QM7X727wBD%8wGXzKkUk0<w+@;4d184wtg4tJ@X52{GI(sNa25`>`Yng zS#I!_5)X$l&U=r&zYi;B0V~_5JmkNc`nZ-g*srAfTSgOJIAOmsO_E+K+<QPtmZa^h z-p@+&)E(64{wRKrrtTrUE8%4ok?J9$;<)4(;ZcTU;gPJ`*iVf89?h;-1S0GaZ0^rW zPUi%4NSd-GVDX^4d3hZ{R5T|lhxj->Mu5-^LYne@06q%kE$GPN4=Roj<L!nkVZl}m zSINqWZ0td$aU2=ICqz7npw+1+LH0~ZSx#s6;X!3&i-aTK;g6qCu^Jm^ROsfYhM_F~ zDmj5gl`HYh$d=TC&dv~f3Oa){rhM@k^bwocr^=P|?B5NXI{gzqzpNzldM|u-Q7efz z6j*U|DK#hZ8hxQD;9s6MAhI1(b_V1Walf5>q|t>e>jq0jOU}|32qM`aRRrk&sLSFH zDLw7nLUa7I0+BAx>BQz7Qf5XH7wHVpcVVAZ(TYpGNJP~krJ>QgnjfMlDfCx-#t4^n zJFGnKe}m&24=de<q@!yK&>x!HKV*6me@q6$K&?OaH_)wlVcXL<rdhYA0<#obx1jUE zxas5Z{eiYWMR*;d+PAQtN0e6Ckq?M7%jD$KtxKu`RI<IQKk#Blb&I|*U<isV*nVOI z_&)ko9A7POX2_wVzlEi%II&vbPhUQa&Us2gBzq>lb7a0=p80x7COdIN35@(@qP@gs z*;*X76|qL)rthT@%wW<{CE6Zc&0Wd49gpG%IT^Lul=P^4E+EsBM5w3SD3nZ(_4i?j z0K0$Pj-4-Ff?IzdVKO3pj7N#Fqgo-uAfb?ZB4oj-D^LpD1GPuMrsB8$J`z}QTy+>9 z<5?4g*;I8BK_+ZvHxOmh?$zRdLySaHRCsEV@m0fEr(?=H0jazV+jmUq)NVB7#%7IP zMd5up(Z0=^bsG{9hns#4ua(sJZLH&QY}TlWZ?kq3hamp0c~2&rdK{ZINZEJqVzWku z`DSf2TX!6rHPSOTYol5Dab-~BRB|wo9E?FVco!|FS9a@vL4QWG<X@DY4Q5m~u%Q7u zJD!B|*qgs74W$L_UmR@zMd{^t>7UH+gffQPTu3&X<F%h@^M&Jv%@<E7@!Y1-;3zU@ zuA;E{%?YJp;{~KBq4g9kC8Thn{1HVolQO)3T|J?6_Fqa7tzd0VDlf)GPX=ySn*SqS zpW)|CMJJx}^=JxM#cO%%T_=_9@yjV8v@OO4jxtTOFVm~HLv06c`ZYT5>|zP06h|br zs7^HY`(~n_VN*{b(U7v;ZXAQjE>HCGT5Q1`d}{>9O!RVAeoE;bf0WvgZ+fK&-$eU- zpCR8C4ZcsohkAx3pN4O0;q$!<J528T#1uB~G<-wKs@{HJkdN{~COy;lQKp|(24zQC z4d0>0FHrb7pIC7J^4*YG<;5fR!T${0^l#|wLZrUoFfyJ+*koYdv`TMsyngQ(jXg0( z_?Qm;0x=g7v#*aCryn5ZYs74Gm~A|xBs3t8zU~af0PyZyVRz0bF|{CMA<K|Sij-$E z%F4bxj*khXXLcuwJ$+VbCH=?>&MKa`4aJCSwE6L#Z^>vMrOucRuaA6yv0n}UbOt=9 zMEI*5A9GIW8y@{E_}eJBw|Ah~9xnRwoHE|Ea6h=)58}XWZKmg!qdLozjTgnYW>@0< zOB>Zg4bD)5v@1A}#~?GePS;AitJ{xI8c6Dfw8DnB>-s!kJ&r$Lpn3|QIj<b|3pccP zA3#e3+fLYPY|KTaiL{)(1kl>xXB&L7)dg5Fm5lL@M*sK_CWA!M1FRIyYa7jba5ERU znSctVNw&eij+gM<(S>U47s7%M!1PbmydMb5AYN%TuaK~X#QU7EU4*S7>@H#N5SI88 zur~-(2wOzhRKi}`pAFOqVJ0#2i1`#@25$^u2Z&c67~XpfB*qzH_z~lZ-isKO#JIW- z9X|RgZmo!C=r;kTtJs9r`1J-dbpJ0igvBmb>MM7us=g+!`7?^qR9rL#>B9mow4i-c zFzjcPgabEy{h#m?N7x$jodQ2>+Pg|*Pqg;c?{YAC{n}@n-^nCB0KbP4d?$k!V>PZ( z+M~_VrU1;+9?fjOD&5;J_l1bpg~keXKSc9~gl*6%LZdBuGdBHKrDZSD@dfr8q&%?b zIc8vS`YpU^69fi5zIu^QbM>+st5+Rx%($pgn>?khf-_LfTplGQ$|YVm8p|1IUoKNA zml>47e;^!{NIh>4a@qVga{2k&59V?nm^|c!=gpAo>gOwjA;YV&=+(&OQ8SkmkQwt) z7WbRdIU#|*yd8bLs!H*c8NZ9_acfrF!Psb~d#<fCgm2(ypg0>Irk8A|*D&vIN;21) z`k+?)16s`tt^DEsq}GYu`AvBtyCEtRPoKK^DRuQh9Iuz3QcssS9+{sKsdoXM=}mR` zXC_IOS?x2GtTwn>;)=!96jvi$5xDB%s*5YA!dBs5VXg41uwbE!%H0-iY<pKMEjK>y zIE;_g`j6hK2KZ?JdRrVl7a3IjZTe@M=m$niS;MPJw3N$wUd0blPP1pOD(wbG9->Oe zO>esw`{XcSnPtf~o5hD_K4tMtx*HN*?n$dOcz9yqSJWn2>B)$C+JixVCfOSvc8Hz5 zsyG7TxJ_oihNY+cFkVJxb;-j<49)OknzVlh7{xMj<pGFLH3NOJLN3cN1XX(~I{O5q zgbtx?v`?vlPew|R`IJm{Ze^R<IDnTQ?t&jx<(2pTj8h23JEq1D+xc^%K()Vw1aw`5 z#q}s+!Xx+OHKnWn4URXtt_%z>K?~J#1kHASjb?UWXg2@4(mb2GQR6j|Ca*(0jWzj8 z07;YA19a5n4V>Bt&`FcO;?yR9&YE1vDHR}5lZ!Z24A4cBzvk3tfUcVS4X3^Z=%&fv z5tXgUC4k*Exs(gH0QAu0t(@8hkf6!iIi&%#)8sNv?Epy9<ei-Q9>Au_KX7UnK%gf7 z$f^GT%+%!FoZ18Mye988sBC#3;3Q4n&xHp7W@++Iocb9cOOp?BsvKahCLiL|VSw41 ze1ua+0VZqmF-{!^cvh2t;nWF$8Jc{OQ>Oq%Y4T}KWuE~YqseDEc@ChCCZFe&4uDr8 z7dUkhV7w+*aOx7kbDI1sr!E6b)a2hdbp;?(ldp2>8o*PUe4SG_0G`(5-#K+N8}J!T zzQxH(fGL{%2d8cWOx5H&oVp9pOOyZP)IES!nq0*xi+`Jvahfavpl1945Oyt2Spi0C zvdk%efEP76fKxXA>^3DYXmTJYg8(LIa&1lp1I*FnI-IHt@T4Y(aLNuaU6VsORS#gA zCfDaw7(l!xhjS_dpuHwH;8Y|)2Tg9ssYd>7vMJKWoQwi!qsdJ;)f51-W}J!!h}Ps7 zPQ`Lrb51z`keL>oY6;L=lUs2r4gf{knp156`e<@nPQ?Rc_toTfoNNz}tjQfXl>pFB zlRI*%6F`4W?#!t~fD}#c!l|wRshZr4Q{6e$gHt^@)r(WTIhDkzJ^=O+n%tL@$z0fv zQ~f!W!l_h%`kI`^sdO$Iz$pbFOp~3QdI(?<8&jz?#*eM%Rx16nUEsJi`7thkoKvGX zHJVdnIQ0al#&T*Lr^a*YNls1R)I?5A;#4N5p5l}r7HEuHEe_Ua1IB3bMgSyt6F_rK zRskHETnx}clQ#oAp~>F@w8U}*fGXGm5U0u809tFZ1~68WcL222<o^H+)#N<@k81Kh zfHX}$05D9Ge+EEO%K;wK<ii0d@R6E)6r@v=j{^+R<P!iHntTf2B~3m9@UkXf1i*k_ z0vN8zmjN)SR{+vA`5M3gO}+u3X!1>fhcvko;9*U^4KPrX?*jDH<a+?InryMPDVeXy zRvQX@o+kT)d|Z=l04_}q0zml$13aS1bpcRXc7VZ}Tn}K7CWir_h$8?{uaN+Kw-zs@ z$HoeJihPNqhCc8$+@89ITkIL!zWD?<`ZcjW;XT}%eu!Jc3su9bbjK>7-(km~f3^m< z7Wuf9;Bl(IgpY!H`VHK!mf&`D1#ZvJ$F1IS+{P5*=6V^o`qyzAyckce)kX;Ho!d&U z__cxNwk;U8umvXCw{6=<?RHV9vG}2my7BEhID}FI-{vwH8(h9qTan9p-@zdiQkK0M z$2Ky{w~%WC`LT@@&HdQg!Zml4r)zJrIUlm)mlY33Iy;Al?X)9&dWRKE|0=Qt=U&Uw z!X=T;S(3Dt`8RSt8?$B?|EO8A(q2LbcB1jR>HZ)4wvqE=`~y9<!ikNY{iTLJg{3%2 z`xJ1VwX7}tF3P#rFJmNrc1*s~0qI@KU_by%?;4O~#HY3-qrXQ-r1y=%e}qq&Hh%JS zLhx5u(#)AF1^V2sVFP2FBeNI6JHEElUvO>wOV26&CQh6+>AB~sds#ysJi?hVC$UBY z3j4l+V4<A4#~swMk^PMElV{Oz^1s69SZ9#b`hFvxUotG@vEj{~N%&azW^-rXn4>UF zW(ZP-e3>LjnLNs_Hg~?)_`eMqgU6#{(;UtQti<8$8UEj`j1X8z3ukg@c^UUZkn&Q_ z#<g&E`WuZ;S~y#dCu3-6L_``yQ-l;L874?!^!}U|3DJ}kYDY&Df+1!*`o@rlc67#C z4j2KrhP7|$JlAZ>q*>D^O>LhwY1XvK)5lL8JK@=B)5cGqICk13(3#J&`mLNvP5-XZ zlg~Xn5mhm`mGiS&A-<}xZ!iL6W7|3(W8>O7$EBSB2VWR1`vIvdWxR#u5Fkj)H-OZ& zA8XLmhG^2Eb|;t|?|ib;3ZSGy&L|56X^Ie}-V>zW5~QD**f+3u;+?Bww}A#}8NHF~ zRRWS8jR)z)eZ|JMbIytR?{*}oc5z?vb|r;3+d0okfxdP+JKMpT7UUzlt1L0W87&(X z&3Ys_8)N#<PH+y2@)ZEJq`-Hn+%VDX<T3w<!W#+Bfl|BlVjgH4K+4%jK+0M78hpa3 z-AFdAle4@!=HRcnX@U>rgk^Si_HF1ZC`wJu)XiYuc6K_Xb?l2oXE>|u?5rzoV*!cI z4$>~xEzud<(We*;mo*jtJLl9z%K22bI1vWR$zXHo65F5XOv)}->?P-M-NYq3(GXX2 zT%B<B!!-!kW4I>anu+UWTpnC+;aZ7nz(e+uM{zxc>v>$S;$pZy!BvQ>4A%i%CvjcI zbqAO2VS7n9uGoj|g>Q6mPLi_s;gcvLw3GrGl?X_w`VEjOa2Fu`no;`BUP50YZ-B<z zX3K3ryz#dLgHPoW07#Q73XmpS7$7YdN6?N^bP$l<VO;>ENqPzppr7Hm3<No%V5lJ} zQ3GmBfsj*jNI{Sza!L-!8M`u83M<^v&H1F%%vVwbsWSwr6ErR;9X73pGs-W%ls(nM z8EYMg&nYbWoyZ1kbr0vl|HHcH?CBg7NQ(+AVzKz3r}LfGK9V4LqROD|5~S`EG?qp- zzE@4{PYQcErEH1|jg0vIR~=D1sw0B<p`rotgH!`Xo6upxI1|R3Fu{b0ChTs)-WE$E z!$7jhNHw8CurMRZ`J%Ovb!YV>+M4q8_*s-x`U~4xc&4B8LkV-_)f8v*m<%ME_ynmV z>we%>qykcPY-T^CI9oIcL;Uo_4-Rt7$$E0?_*t{Y&!y&+xpk~gs<T_*y6?HAb%ldc zo$vXl`KB7dnnOxMORE7vGC`0MPLL8#km`+~ZOL9KyfF1)XO>@hH2%`Z&z_n!dHPe) zgPxr@d+MZ~(d?T+&ePR<2g)*;BxtM}tZ1-vl9Nbq4fX?K@Trd^ues0?O@p-y@4kG4 zWef^?YKU{d|L|5e#QA8P&)Yo2Pu>Xnyih6l{@9Zl&iPU@JDcHrB>TUsk&KWs@u?>S zY4Q@Ej1f&C6Qn00@yR&R6gt61Cg0bEXp?rButvRQ8wUPI!5Q*oQ!y2g98kRxe8_|Y zO*q(u873TN!VxBX#Dp#rK5ps64UIM#Pnd9=37<6KL=$ELvg~2b2)1CD^UXkCrIi;p a9`4*^eN}QfaXp0VVO#?XCD)*;!v6<`xCSx+ delta 26213 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 diff --git a/bin/kernel.bin b/bin/kernel.bin index b37e0e869aac173f08b3649b831e8e04d54e4590..30feac9b0fc88221a853dd6d040dc66048ab4fa3 100755 GIT binary patch delta 22440 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 b`iLYcm7i?rCz8BLez{?wsY(7vL-hXzwj*BD delta 18809 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 diff --git a/iso/boot/asuro.bin b/iso/boot/asuro.bin index b37e0e869aac173f08b3649b831e8e04d54e4590..30feac9b0fc88221a853dd6d040dc66048ab4fa3 100755 GIT binary patch delta 22440 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 b`iLYcm7i?rCz8BLez{?wsY(7vL-hXzwj*BD delta 18809 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 diff --git a/lib/E1000.ppu b/lib/E1000.ppu index 3f4aaf958b4b0acc77fce24222893cc8490021ff..9a1f57453602e3d5069ce4b23c47de862a5e3431 100644 GIT binary patch delta 144 zcmcascCBo}B91Dx#XhFyVSy7@85jnpEkF9h`q~EuAmC0Z$}CGQDyb|;E!H{IE!y6} z6%7(+DJ{v&S@d*nWO<9xxyjs&x=si37O?+azjiT5mN_rAq%KkVX2Wm8T_8ROkPkMZ fZp*$ksXDg%V1gi1ih0X^o|vWcbJFH2#yge(37|Ne delta 144 zcmcascCBo}B91iMxyRV^S5BI^%D|9k8xL!p{>2pxK){_+lv$QqR8m=xTC8)ZTeQ7{ zD;gxuQd*Lk<GZ;0Qr(G9Ung@j>N>ez-Shp~g@u72S?0XdlGV$8YOc=xQUv020Qq1e gZawl?&i6g>D@+h%O7XX6##^i^e%{?&#dyaO08kM-YXATM diff --git a/lib/IDE.ppu b/lib/IDE.ppu index b7975ec56b51d79a9c8f4c607c63993e1fa2a7a2..b90ec6063d270487db335153ab8e69411ef24784 100644 GIT binary patch delta 70 zcmaFl`p9)c4#%RWb0f=JjLuCgvE(?Aw}Acc`n8KEZdF$fOj~~RhxN4&3_!qFmYbTJ aUsRc!n3tHIT2!UB*vHg7EO6uh$BF=+LLb}! delta 70 zcmV-M0J;C-MdC$}YzR%GchY{y^7WB)IS577y!YnNp;3{wCnF5D3<Z8K(Wn3b000hl cZDnn5a(QiGZeeF-a%Mf9#s_bylCl5eA*<yeU;qFB diff --git a/lib/PCI.ppu b/lib/PCI.ppu index c872e5a633ddad0721e49baa0a7c8288a62d1767..025f824a8a2b358130382e2e67a8d41d3b448362 100644 GIT binary patch delta 60 zcmca;d(n164#%RWb0f=JjLuCgiBhdnTkK<M9u~*|1Oh2VnPsU(xrup+>8ZJ?c_o2q P%a8uBzV>0`=X<gM^UWGF delta 60 zcmca;d(n164u|jJ@=J9mK7E~75~Z4EJNFoS{>n)VKp>D(lv$Qql$)5Bn4X%OnpeWJ Qjfb^P|Kf^`pYO>605QuN6951J diff --git a/lib/USB.ppu b/lib/USB.ppu index 2d63c6b02166495ccbafcab0ef1c205e0b2d0725..d1a577a54ae7bb739f3e8ea0078168a6e697a9f7 100644 GIT binary patch delta 66 zcmeB`?UkKy)~rfxv5%>FSRexsu#}c$<}7+TH?q9N=p0BuAf+g?EVU>%F)uMaH8(Y{ TBrt9H(I3{=K5S-Y?BWFg2?7}B delta 66 zcmeB`?UkKy)-26-?lJcKm6I5NfTgq~Gskyv`K7uOpT2?w1X7AJ%TkMS6Y~<&Q*%@E TN_e*Mu-55cT(Oy%v5OY~P7WBy diff --git a/lib/bios_data_area.ppu b/lib/bios_data_area.ppu index 83071a7a926d2679bb295ce9a6946ea7929e5f75..23015577f0470d6ae5770a76463d5eafb4b90bab 100644 GIT binary patch delta 21 dcmbOzHBoBAWNwZswZ%TB=3#-GXLFY^0sv7@2Oj_c delta 21 dcmbOzHBoBAWNwZ$+quWs^H)yVJe#|W5dc}v2s8iy diff --git a/lib/console.ppu b/lib/console.ppu index 261b1dea16a2dc3464abcddb2d101199e10f9a3a..5b1fafe72a09165b1d7e43dbef342552fdbccdee 100644 GIT binary patch delta 21 dcmeBM!q~TjaY6});5nb&<t;|%Hr7lE1OQ?p31k2O delta 21 dcmeBM!q~TjaY6~lU&-#8x)YziZmgLU2moyX3e5lj diff --git a/lib/drivermanagement.ppu b/lib/drivermanagement.ppu index d36a1fd26e9d6ee732081c71e588ffcee0c95cb7..df7c5c2fa8d83070a05dd4d4367ff016933ea9be 100644 GIT binary patch delta 1160 zcmYjQYiv_x82;YV%i7cJblo|<te5SyTWhyowr-AT#{j#5EEv;8>NU8{QS^{7uuM>* zBokwzA;I$aLlYE(CW{D8vL9&T5By=`V$g&{5|pSv6#p47BnpV}J!d6&l0NV4dEfJW z?|J%l>7P=(T&@%bhwO()*u=SVLTrr-F}Y*$^S?(f{x&9rc(xuNbG(>3|LBprQE;93 z`K?Fxzclbw{lwbHxw&_mZZ4gEmr24oUz?e&)_%J7>gn&6zJI%ZrJi<^aM-v+4vA4F z;UdBB5Msbe3oG410%u6Y5u1#U$Q3cE;YOp~VniB|gx@KG>lDj$-5%9^Yvwv;nZ3yd zyUB`DC`lP_wvlsNxg4ICint>6;0LLR?!+%rk?z7-Nk_@nMx)CW+gXXm(Bh2JI5ybB zPOEFvZFh_5>Q=T)qA}ZM-N|Of<~b^O&)H4emRFpcC3*;L?h%^C{q9f51DBknX5{5P zq~N&RjWYoi7i9$(*#5=#PqrbC0xhVa$aYOo#bchM6veNeB*maLC#eHP#!gH#>Ufzk zj#G>YTxdQ_-I!`wqC4PKa+JoXlBFK(WWN`0C~3;zGvyTJG3U)uACB>Q`my5eqXMpZ z(=>oY>mCXNt*`UUv~PiiaMD+xHMs1{(=a@3FHj1vv>m3q5l{<M#AY>5BiOGF(pr3= z9-s-Nv>L6$n_7X^<4Y}18*p74;?wr~&&M@h4#k=n8<G*E3_Ca!tUEzL7wmx)xseIP zNX7(X3!V%l$;-P6O#aIfGM@<lDCA>wJYkf_CIp2O)(|@{-{h<k)Kx;|ff5sXEP~7g z^8>9C{J0v>DF}ZsPVE>D>U{HugJ~Ap0%I3W274)qZx~ZYL%ozmCe-W9al5(|{UHsz zLp~bBLMX;UIvz^1kiH0IXcSl3zX!4Q6qT08+dn4Sh@0WdbT7V*?4yI2jP6wK<0;Pa zOl@Y@UcsrAs6mT(I+DY5Y($y-e{m7-#|*jzwd1+g2f5%HukJHus}tjblgBy?x&deB zp~1(wBpC%kH=@=}c@OJX9kG$E%zwTvlaiRShyzT-r=3Hr^*=iMSnCNrNt^JY9>8n5 z6Wet^ZNULu*A9BDDI^TGS?(o&nQ0x`;;q7NE|{aqU%`*MKYK}TbUed0X%)6H`i$+> Xxp`xUQLXKr+BGvj`;>Wvcs&0f^>+3u delta 969 zcmYk4TWDNW6o&VIl9|k$nam|~%Oo>%&ZL=Snz=cNqc(|}tJp}*2pK6FjUh&IgxZ+2 zsg*QPf-h2#;qQxJA2gzZrBwsAg{pn5qF8V3gTXfi^+5>48$P&th{Ts~ul4_H@4e1h z`=607N7B`5t=v~>T!(5<*Qy<=JFS%WL$714^wm3~N~sg|^r$1bef_c3x>a@^+Bos` z+V$<7`Wu6;@$atw@zaghAF2OU?{Yyo8l)NyP3VRaK@L=^*Orwnd-)!6{`hWbqph{^ z7Yw0;Ij!B_x$899PKGrt=g;kGZd=Rq6|En={7fsMkAF*ix5OrE4J{blTxhtYVT7hL zfl>M!+nn~E@x5?jFP!8#XB<<!<m|-s=9cq84UaP89>5G|-B+NqUC+S7VSN$J{6O!7 zpSN@qLH;QWG43%DVZSGh7^gjNqMh(&kYKkk$wR^vmxTsj6`K4+nC6e(GuX$a=8NcJ zhp&KcR(*M7c}n8_eAkyn55M)DM}epP1r&MFpGS#X{u1t>H;_e{mB1pxd@FEPZX5`n z#-02qSVo1v1&g?gsg_f6*J~|ja1Zx~$~eHsLq+uS<xn36_;Kh(4D&#E3HS1RxQzSw zL%4|h*&L}zx1*6Snq>3}u_l(IU2ySmG-<d+aZZiRuZ+K-5b-%ARogOJQ&xn%JR8mM zeLcn-Q6F#WA+1s4uezb>8oeGv3ur8OOf9N$(qnKX=0lt>#j<GQ1z`to#d^?5t+fXk z7KAw-7UsDw?B#{lqzw7<)~pP9r!|K`rsG)*aU$M@;mzmcmw_?%v~S@7HYHZD%C*F^ zzK5hSXLWXI_Q<jl>Gy<%4L+4z@KyhBZ185%!Z#dBoeb2(aLE^1bMptsl!%|EEbOq) zSl6ErOS8&K(rbpHKWV4Ex6_}Eio7(#EXhloG&30IakGpGzHOS}Rge9fpe$MQvImh# zes88~8~+(c#n@*XQ$qjT(Z!Q9*3<LP9kZUX=9i=gefNapvS#eUX<=}$W_jkw?6J9p K+pRpDF8&KVXyJ1J diff --git a/lib/eth2.ppu b/lib/eth2.ppu index b085dda70f845badf6968fb20ff35236b14dcc21..ffedd5727bcd7cb0a969b2de585a7aa26d22872b 100644 GIT binary patch delta 521 zcmX>uctSuiARyGx*p#K2k%5`vK!6g10tW-b%*o<;e~x{v5@29pke;Zh&Adze>_mTM z-MTIN)}-p#?gI)laO9<yl$K=X6!Vt-JTXh>=OmCIGf=QDQTk@XZ^K;^=QlA0GEP=z zRAH2!?7<kw#>fm*!7_OYqaIM;FryA92O|Si>@A~(Dv*N{!c_8YmSe79WVGEpoh65n zw-sb16m(7&U^8X~IbzCW54H%wSuhD8Jr9VNPu|F8DP9O<F>12{$qhgZ16w9DvTK^( z19BgLgczl`K`KBjCD#xSqxc|K=P;Epe@_>caQ`3|m4E<8XK&XKXMevC*NBkG>sS=D zKt59kVkRX)Ajwt`pORRT2sB6lVh|(4UZ5}t9Gg6cUD@^ogu`$VNQ(eNO$$gfDG38f z&Vu;l{JfIXiV~o1eVFdcQ1y3!wA|z~?3RqrCbMy<aJ~VHvoL&}Y|Np=`5mh2@8mcR jS&jct9x&(_B!Fy2QBZ8M6s0DY!F|Zcz{NOuF^38OC`w?M delta 615 zcmX>ha9mI^ARyGx*p#K2k%5`vK!6g%d=3VNm1R567tbmRlwe?BkesNf&CGoF%tU`> z-CK`5mh*j2{0bCi;K)lYDJ{v&DgO4%c#BoV&$}Q&W}x8eWj{4n=YA=gIKPRBpJ}o( zqY5MAWDmx`$puWTlUIUy=NNS+voe|0b1(w60JVw07@Uj@j0`Xi`JzOcVhXYwY$cHz z!0IPEGKm-x>qekDMvyM1%?V5ujEq*BZ!+gFidO+eV4x1fU;+lZ0O#b5%u<ufSovAo zfkK^=yI3Ox`(es}^kg8OGx;;CrFasM#i-2+B$om)46K~Il1Wqa1dw|QB*ZAi4N?JO z2~Tch6Q2BmS%Hyh@)0%#&P@<;hTW6jvMKZKh4PL8X_3jk?3RodCbzSza9#t8voPGB vyoFtf^C48#^U3$wWi?(xd7pqZD3vgZ3IIu#qSWLvxW$YNUl=B<aHs$PNqbt0 diff --git a/lib/idt.ppu b/lib/idt.ppu index 7dc46d33967004f5453f46b211c900c6475b54e9..07bbe92aeb3f0ff7851e05849e295e6cb523f852 100644 GIT binary patch delta 19 bcmZpdXqT9f!?Eb;+{p44qjMWeCUXM-QHThB delta 19 bcmZpdXqT9f!{NKQ{8HVCPhU5dOy&jvRMH7- diff --git a/lib/ipv4.ppu b/lib/ipv4.ppu index eadae60e91639025e812039f019550f8404273da..7b0a92b7407e5c6d038f4c20e499b12ed876b348 100644 GIT binary patch literal 2845 zcmbVO&2L*p5Z`(Jh~p&GX_GWGEvSx5p$;i2DMFP%q>fWrIJR+ILm-mnCNIINzpzc3 z^iWlTzW^k}hY$$V3*tknI03490davFhh8`!xNs<^illC3<~Q%{v(r!#vDVJ+&ir;~ zc6Mg`QmL~OPo8wYLCU4Br-JI1U#Y)-y}7Xb<+lr?N-1<S4|gJWp}IQh#`G+heV7?O zFvqL;`jz3IUVaxWm$$xNZ<wVI3Z?MXcRu<KSoiCVLh+M7KAgYs=82!d=vu6l>y@JU zLiOtRCy##i2zb7RSt}LF`Qr8R$6a^7`r=bCU1hUzDL-=Ka&zJv0r9%AUN!5NzP|Rk zIrhvo&4h+}-|FU%?~iT11*Y3<yn5ojxA&Lt{BY|c7(Lv{;}wG|1~2x2;q?~_=c>ZY z<8o-!CDbRhTPS;m`Ab4^kfQV<(0wkZ-nsd?Omx<lh-NbLspy<96HU*?5>xSYRzv-y zNco8G!cdo<xP?dHjR4?*McrGVHnZ0QkP=D&bpG^l&biOFb$Qz=SQ~yCJ)kFB6*AWl zUH3!lZTB4KvMueiby&CB0@jP&*eR~q=C!tEB0nJhF!Z^-Y=Zc=edjKl<rYD}y3_6` zpDK6Q+dgf7+k5OZt#-0KWpCrBCI9Z?t=#+L|Bqz5W`qshk(7M}bD3=*&@Mm{2CuV8 z{C6SjCG<N*o%2@980Ga5@aTLGssm<^#!}hITsnFt#>tRQrIVRtBpDB#p3g)>nRGOg zjZDSkr>7#%Lyh4WWNgTG@HRzq8wQSH9Yogkq-vE$WwBDs#ikYc4_fL->JN+65O>D8 z#(6Y?$j!c*xwx8J%omI2@{8wr&xGDH%u=+&+y|_LR7P`wR}|(1Rh=F=&TF+RXFSco zQ$SPJaYo-3XY6!iY(_Jhpd@~v+qlbKtWjx{lwU4jB$r|9nGc)oa_dN}9q^%4U9NB* z*)b?PkR!VIvdFR*E~G;+(y75L8<1`NBEuA=m`kH|nzhA?ExIDJ%r9Fk8EPnGQkYq0 z9cNjG@RIth$Y-4wVh#<W)&^?kN`e1CYWm&z0WC90J;(Bcg6w7L(?~@<8ZpCsG-|>( z1a&-EMeQzbNKW9<2G%9;!f@9w+;zKwiNR(Dr2K34y<@k$a-m#kv|98VOMeG~_CPn9 z;g2O^nNSX}HWq6CEB<9GFwGECItJ_i)Jz_4a{t?2x9kyTc3#b9JF(=fo38;G2A->x z)3~DVGTO%(`2^53;6!`Sj`m14lugE_LoX)N)1g#~b3K}gBomqFOPQT6jY}ToZUpgW z-fC_s-^jC$fP@sA%6~4>hImB2<D0<<?qlky=89&Su@7tPu#G*;Bl7&1V39N3)f|6% zG|V*)<$>cGKWgL0cznpI3u}z0aDeGkww$Nx6z03C3kgQ1fTq)qrydhe>F<MFBsn`f zm6*=OX4p+Lu`_U5dTKV#C3Gi;;b6;QBRum~^R;}b&Z>^+OGSX-7UvNT!+dLjLHhD_ zIq~o@=MOp2j1ZP%NM(69)X>laz@+WuG?x?wtkh-Mf~ayUlSjM@4dL6WTW2tv)$d?e z1j~uX<EUWaVQ-{TUM{R~#yY@?4P4_9g_{OZi`*#gPVAAo$kN9}dVuMJ`Wup8xm3!R bmvV(=es4M1egsmN?SrWa%{0ekTcg%LuQDmu delta 794 zcmX|9T}YE*6n@Y5JHOf7+E3ZCbPb)%DBHX!x(M1JBXxhx409|U6wEo?vLDhex`?h~ z9qJ+yqKL4okS>apA}Az+BBF~xvM!3c3ZY_k(>b5c1JASPea<;M?{~g$+H=j(5{n(~ z40S0NLCE4+%qK=ILi8^EJT|m^eV<DR;jOd;)yc)zM@yA>Q-9B$)9<DhmVZ$~=)+@$ z(pWwhFV4Q`YP;Xco~4j0m(Lb+rH@|@+_U}3nuTnhDxb`ket!);+;gV7$dyX2d}7zk z#N#)m8{_fHk5n@c1E)l+B?pqJXpf~gno14CqRHn#83#TEH=YM;2Y>*fa-q)3LRpy( z@~Ua5d=e%DHML?`+HA9~mI5aMholbbGylYf^HQT`mMa*O!&sH-@sS+B2l7sW;-W&c zOEYJg(u&*VZMY<lz(I^EgJ8kiN+;Cedu0;#VnXd9eM>DJs%=AnuBv=14^MAmxwaI_ zHJG{eW=<nEcO$^E(&J~}t>aa#9Soe)B3^!mQFep8g>!^jOrci~sh8+@8I$@E$CX-w zevxn!=k(nhj+26*LVTA{iy3q%?STb4zG4fUR`Xh{x?|~ZCK27A_NV*0BmVxrL<Fbn znlJG9HiG19Al8bRk!(3j_4buc5VK@+JRunLj`$;ye0E~Bn91h~RJ*lSJ5MghO9Fii z=3A8hu>)1UEBs~N!pdzWHvDKeT-LWF`3~Tz#~sEd=LgcXLh*^1$AM=Z4jPSt&umkC YBWxsq+eWO6=Y}WNo)yG*fmOr*AE1|wZvX%Q diff --git a/lib/irq.ppu b/lib/irq.ppu index c93ea6470a9e4e0634d721a8d136c5164a5910a3..a772646b3c040d6c15881e3852438c151c7c7897 100644 GIT binary patch delta 19 bcmX@devW-Y4#%RWb0f=JjLvN=iDCu-SjY&e delta 19 bcmX@devW-Y4u|jJ@=J9mK7HL-62%MvToMVF diff --git a/lib/isr0.ppu b/lib/isr0.ppu index 54146ee2fc3e1c0e7972a061f80ead8235cae972..e2777dc0933b52d3ab7c2da5d369a8f147a64f2a 100644 GIT binary patch delta 19 bcmaFK|B`<~9>=1mb0f=JjLvN=D`p1(UHl0U delta 19 bcmaFK|B`<~9*6JZ@=J9mK7HL-R?H3nVMYo5 diff --git a/lib/isr1.ppu b/lib/isr1.ppu index 68acc2a03654bb112cfa0db880ae7897f592bd0c..3d1dcba355241d8fa15b9c37534fd6f070bb6f40 100644 GIT binary patch delta 19 bcmaFK|B`<~9>=1mb0f=JjLvN=D`p1(UHl0U delta 19 bcmaFK|B`<~9*6JZ@=J9mK7HL-R?H3nVMYo5 diff --git a/lib/isr10.ppu b/lib/isr10.ppu index bc8d1eaf2dfd20954400436d04b11674751ce72a..3622033ae2ca1aef335736516c15ea40ff2efb9d 100644 GIT binary patch delta 19 bcmeyy|BZh_0mq`Jb0f=JjLvPWsAC5JU<e60 delta 19 bcmeyy|BZh_0f+D6@=J9mK7HL-QO6DdV^Rty diff --git a/lib/isr11.ppu b/lib/isr11.ppu index 794f150b6fe35bc30e9a79b4205283db42144c54..0784e1e28d7d48c7841a368231358bec2aba269a 100644 GIT binary patch delta 19 bcmeyy|BZh_0mq`Jb0f=JjLvPWsAC5JU<e60 delta 19 bcmeyy|BZh_0f+D6@=J9mK7HL-QO6DdV^Rty diff --git a/lib/isr12.ppu b/lib/isr12.ppu index a27b34fa5edc85dd5871613af340a40831222a63..96e1fab61f98cd630d34f7745eb8c2963aef97e6 100644 GIT binary patch delta 19 bcmeyy|BZh_0mq`Jb0f=JjLvPWsAC5JU<e60 delta 19 bcmeyy|BZh_0f+D6@=J9mK7HL-QO6DdV^Rty diff --git a/lib/isr13.ppu b/lib/isr13.ppu index fca59c689bfafbd126d8952c204f73f7b70a7747..945ced18d71ee03123c6b9832c3e2e499231e2a7 100644 GIT binary patch delta 19 bcmca9a8qDH0mq`Jb0f=JjLvPWc*qU_T-*s{ delta 19 bcmca9a8qDH0f+D6@=J9mK7HL-@sJ$=U?vJu diff --git a/lib/isr14.ppu b/lib/isr14.ppu index eb3ebe51f8baff41cefff4c0aedf6ac5941527e1..e5024c735aa81d312cf093f35a7fb81ab5b4b134 100644 GIT binary patch delta 19 bcmeyy|BZh_0mq`Jb0f=JjLvPWsAC5JU<e60 delta 19 bcmeyy|BZh_0f+D6@=J9mK7HL-QO6DdV^Rty diff --git a/lib/isr15.ppu b/lib/isr15.ppu index 7d05af99b88038322eae42dcd5a3bc7c3bc4b50a..64aaa1762f6c7849f042730c8591a367716414c0 100644 GIT binary patch delta 19 bcmeyy|BZh_0mq`Jb0f=JjLvPWsAC5JU<e60 delta 19 bcmeyy|BZh_0f+D6@=J9mK7HL-QO6DdV^Rty diff --git a/lib/isr16.ppu b/lib/isr16.ppu index 04a4237a189804c18c4ef60a9f4614628f6e3b00..9882cc3b699f82a077c894244e28fde0069bb85f 100644 GIT binary patch delta 19 bcmeyy|BZh_0mq`Jb0f=JjLvPWsAC5JU<e60 delta 19 bcmeyy|BZh_0f+D6@=J9mK7HL-QO6DdV^Rty diff --git a/lib/isr17.ppu b/lib/isr17.ppu index a7e77644a90b720c32633e46fca2ef8f6d54d70d..2ba4301a313e7ab19e078b907efb60cc4b69dfbc 100644 GIT binary patch delta 19 bcmeyy|BZh_0mq`Jb0f=JjLvPWsAC5JU<e60 delta 19 bcmeyy|BZh_0f+D6@=J9mK7HL-QO6DdV^Rty diff --git a/lib/isr18.ppu b/lib/isr18.ppu index 149edc2d0eff490050ec74971b13cbcc545e6362..02dd233269d395d70fb985684a4518112e0d313f 100644 GIT binary patch delta 19 bcmeyy|BZh_0mq`Jb0f=JjLvPWsAC5JU<e60 delta 19 bcmeyy|BZh_0f+D6@=J9mK7HL-QO6DdV^Rty diff --git a/lib/isr2.ppu b/lib/isr2.ppu index 80108739a66b83866648552b695eaee51697c597..d5441d58e787428a01be3ea9aff853a790f6ec4b 100644 GIT binary patch delta 19 bcmaFK|B`<~9>=1mb0f=JjLvN=D`p1(UHl0U delta 19 bcmaFK|B`<~9*6JZ@=J9mK7HL-R?H3nVMYo5 diff --git a/lib/isr3.ppu b/lib/isr3.ppu index 449b20284c88fe16d7dfb12bbefba73313f3d5f4..a0b6f5ac7ec94cf3591eaf2fa30c8cf53b953ef6 100644 GIT binary patch delta 19 bcmaFK|B`<~9>=1mb0f=JjLvN=D`p1(UHl0U delta 19 bcmaFK|B`<~9*6JZ@=J9mK7HL-R?H3nVMYo5 diff --git a/lib/isr32.ppu b/lib/isr32.ppu index 001a17a31fbe2415229c5ffef133cc8bf6cc24a6..7b3ba77e736ab4aca3d8014fba85cca88b374dab 100644 GIT binary patch delta 19 bcmdnbzn_0X0mq`Jb0f=JjLvPWaAyYqSKbJe delta 19 bcmdnbzn_0X0f+D6@=J9mK7HL-;m!^KTPO*F diff --git a/lib/isr33.ppu b/lib/isr33.ppu index 582edcbb814502fdc2eb9f7cbd5898873e393878..ff73643904bd7c0e6a2facf0d9a77b1fd30d329d 100644 GIT binary patch delta 19 bcmdnbzn_0X0mq`Jb0f=JjLvPWaAyYqSKbJe delta 19 bcmdnbzn_0X0f+D6@=J9mK7HL-;m!^KTPO*F diff --git a/lib/isr4.ppu b/lib/isr4.ppu index 3f0d7b4b966827de322bbfc6782eb57d78704cee..ac262086c886b11b2f8b5113902da993eb130e78 100644 GIT binary patch delta 19 bcmaFK|B`<~9>=1mb0f=JjLvN=D`p1(UHl0U delta 19 bcmaFK|B`<~9*6JZ@=J9mK7HL-R?H3nVMYo5 diff --git a/lib/isr40.ppu b/lib/isr40.ppu index c1eb4f0ff654fb539bab36c72ac53d9a0b6ed0ff..2ccdc7ac02e58faa5c9c04c3e6cc423093ad58da 100644 GIT binary patch delta 19 bcmdnOzlDE70mq`Jb0f=JjLvPWuwe%PRy+uE delta 19 bcmdnOzlDE70f+D6@=J9mK7HL-VZ#mpS%wK= diff --git a/lib/isr44.ppu b/lib/isr44.ppu index 448aaf99011f2ce1aa974c28090e018d1c613137..b1f1df4c71270bd78dc4793d8ad30f562ad98ba2 100644 GIT binary patch delta 19 bcmeB?=#iLEz_IA*+{p44qjMW8rf>rQQi2GP delta 19 bcmeB?=#iLEz~Q^N{8HVCPhU4yOyLFqRm=&0 diff --git a/lib/isr5.ppu b/lib/isr5.ppu index 4d0898e55a80e42e2cac0fe2ad6dc95dcfff3472..b8a6bdb668486adefd4c00512aa8c5209c56cb0f 100644 GIT binary patch delta 19 bcmaFK|B`<~9>=1mb0f=JjLvN=D`p1(UHl0U delta 19 bcmaFK|B`<~9*6JZ@=J9mK7HL-R?H3nVMYo5 diff --git a/lib/isr6.ppu b/lib/isr6.ppu index efad4cd5ec4ce5d777a53cb9d19c4b944633d79a..c871a0ccb8776eb3e975ea11830fd68eab180251 100644 GIT binary patch delta 19 bcmaFK|B`<~9>=1mb0f=JjLvN=D`p1(UHl0U delta 19 bcmaFK|B`<~9*6JZ@=J9mK7HL-R?H3nVMYo5 diff --git a/lib/isr7.ppu b/lib/isr7.ppu index a4daed92f1f84323debcaa92db3880a0bbdd390d..efbde61dc68181087bcd919fdb36630bffb8649e 100644 GIT binary patch delta 19 bcmaFK|B`<~9>=1mb0f=JjLvN=D`p1(UHl0U delta 19 bcmaFK|B`<~9*6JZ@=J9mK7HL-R?H3nVMYo5 diff --git a/lib/isr76.ppu b/lib/isr76.ppu index e1e38d2a43c2a30fcbe8beaeef552747e93f8c57..7ee4cad58b0e3c51226e9c4811afccf2dd92ea20 100644 GIT binary patch delta 19 bcmX@be~N!X0mq`Jb0f=JjLvPW2x12SS%3(& delta 19 bcmX@be~N!X0f+D6@=J9mK7HL-5yTDvT*?Wf diff --git a/lib/isr8.ppu b/lib/isr8.ppu index c22763a7e7e704305d82a6c872a271cc021f4673..91bb1168da8decac5dfaebdd43e30ecef883a0cb 100644 GIT binary patch delta 19 bcmaFK|B`<~9>=1mb0f=JjLvN=D`p1(UHl0U delta 19 bcmaFK|B`<~9*6JZ@=J9mK7HL-R?H3nVMYo5 diff --git a/lib/isr9.ppu b/lib/isr9.ppu index 24610abe6e2c52a026dfbca86a6bc5f2cae487b9..8d55c618268dda7a66f27a8c44c2c96465ce523e 100644 GIT binary patch delta 19 bcmaFK|B`<~9>=1mb0f=JjLvN=D`p1(UHl0U delta 19 bcmaFK|B`<~9*6JZ@=J9mK7HL-R?H3nVMYo5 diff --git a/lib/kernel.ppu b/lib/kernel.ppu index 0a1fb481f19244ec93fcadbbb85f594faf432c34..01753f52f1dc4f32cacb1818a98ea7e564ff801f 100644 GIT binary patch delta 856 zcmZWnUq};i9RGg3?e3PkKjmqu+uYnHndr=xW%W=tL6n;RqAZl#cFx1yP3|s(f)-Q| z5t#fSC@4aq9zuK&f|SCS=&2r~e^d`euk}_$(C@da81(YxexE<zzjr14AskAj#yYza zj*AE!Y^1`_?E`pqVDedw!)GJ_VDCbx!}*}``S`%XSeLl?`Syu3mv+8bxV|o)jV%o( zx{nQ!5$tK>Ekn*I#-|@wm*1|uzeA1S%^K>QVra51=M+uRt)Z#=PrvVb`IX$mUU5Ue zEBsnnULxPH7;xrQ(=zwpT9)}!J#);=>56q;Zg_p+XXhH3uegkTMB+Lyu$tu39QsI+ zm&jv&50L~P;RO$d$vRh0;(`++|Gr{G=4we^sKZKf(D9D!60<l;Zi=!yNGtGKTGgit zfNex{1wBm^6121?=hO_tcDr_9a5e3EgvA<4q2J3q_LTI+JLwYwC5CS7|6u_GwuZ6j z-%KNCnI>S+hU-f378+e<W?IRf&MO9BQ@MxL<x;)He!!58*Op8Yjp8WXtg6d-z_86R z6#Yygn3kdHIa;f^JRPgZjg1@vjM(tjl7q!fmSS4=xd5X!%UVPKHh^|;COhNtIAE+i zT|G<Je>e%)V#92y=x-oLD<m>r6>hZ$_cIwiCSa>AqZt7uwmIjFCaXGI_I%Ym#!0aH z28|D^2R+S{71W$wFqAA%%;#1yLC(1++)>K#v$7#;bi4%l;*QeeR(pEs|1sn_>24{f z`^cInieB>3lj#ppqAD_w96pj9oK$s{_7lg_4H1SN0F9JKDNLhiDcbCGp)f-gm46h+ gsiLi<h>&aEKuzK=F+qv#B_c+icpGRJZ@lfl0ej7_XaE2J delta 866 zcmZWnO=#0#82;X-ZPMDMty}k}UDs~ikcnMg#VIJ(S;yEMb+agn9ci0&aZ56iI4`my zUc71jV4xsuh%j%$Kp1-PBpwuXAfCjXc9ww%o_xPVrLfCG^8CDC-tWox#Jxm3pD(0` zj=Apw;mDhOf^3Hfd35{6>S#-0bchf#T#u(bM}NP+dZJz!5-vQwwYB_i_h<dVD`EE3 zlefJ7{2`r&lO3Uop)ARUDrr(xR%Oi!ybO4jQ=ixACX5KVFRy>?d|JCm-L6`bTUlJn zOm6?UUff+dLu;;9`pk6)I%z+bg6PI&uEar**1Zw>(K`&?RN!Nj=fm_H=l6PC_(eVR z1J~(1Cg~d2N|*UI@YAsS1vP{UjMJ}zBzB?EtCkdPRwpn(&--G*7*f1iQl+X=W}M|4 zfUb>I-zL<U8=|;5*|P`oUJnW+Y<n1TmT3~`a_Baj-jC=r%X4z&=7MYxh&5)KStdU+ zMxfiFTkT8>qHqcCOsQ$o0)e<AMr@HGZ(4?;Rq?Du<2aV)3e#r^^f+|8onRm0w`9|D znjp~YsO)rzGLI*h9vmDbkZhdRfkKuWJC`HS=kV;FAliu-HZ9#?eg1EiK)+*R3q$k( zqFpC_97r^?Q4onDdgfJ0(by&L1nxtME;X$nHi;9#1ggAJ)pSFy5ai}W1u}F?EQ-CT zco!u@QgPu7JsnJ9sg>XeWa)bFn%LJUXK6T;1d$#Om22H71bWAFQ<J%g8AVep91C`1 zK&IS;97G)=aYVtA)x|kopGU{Ozm6;DIBYw55Zf(Q2evU&)>YiPGNa1)&i<jyzeEue VhwMZWF|s#OGId-nOVi;ae*hyywrc<Y diff --git a/lib/keyboard.ppu b/lib/keyboard.ppu index 93aa00823e7ecae583bb901db58adc8ca554f011..527bbe25919d11edb30df7d2cfe403e8dc80ce8b 100644 GIT binary patch delta 33 rcmV++0N(%qBL5<giU^|RomqE;GS0D**9{0!W~asYJJ#^CaSjdxCRGq? delta 33 rcmV++0N(%qBL5<giU>`kchY{y^7XNj*9`~^whRS+FVU#8aSjdxB0LW^ diff --git a/lib/libpconsole.a b/lib/libpconsole.a index 642522569802f9efdb51d661f4ab3e4aff314e01..0633eaaf98bff02db745aa81b95c55473bafdf12 100644 GIT binary patch delta 1480 zcmZXUe@IhN6vw%%Er%PZ)teMDwLnvuYbI-;X8jQ?-eQ7b!DQlsehEtShoQkjs3v4D zZ#9aF>9Rk}LOa=O&`AHVkVq8#Ba}djN^xLCQUjyjo4R}M`tN<t_j~TS@0@$DKdkeI zbyAMjVYfT>4&^^eU;Uz?WdY{Xe{Ep+JU~E0A7>d@2&S_ZkOSTeM>aB*c1A?FvHc=; zSk2!tR_s{DC>GqrxKhO7faM-isZ=S#pv{Ft0~V1E+D2ff{kn$j1124P$OTg6Z5|B- z+y}0r3~KEVskDEDUTHEw#=!uV!~*fD(}@>2E)HXyt5epit{Fl}V5p7omMD(~Lhn`? zVA9ivvn1~rwzc?1F-l&g&e4+*oKbS-7#aYCn$M@9KJ01LZ$hYUlvdYdz&U>pUc}nb zgX_dD;kLtr&Nx!(T%Fo-E$FW`p)g3@c&|aXg^2Lt7LHM?`7nIE6UJGg``7{Pz2jJI zc*v<0{YW)I-V+NppB~CVoluUV3zmlc*wGnzhw*GwixQxF^bc11$F^d1X1tzZHq=fm zvIb^@XX-0M6L_b8G87WmD6_oG(p;LGySv<0R+hMW%7rsQ{f81lC-gdKn|)1^lTzcq z*$O_0&h=t^^NGW$FC5M;aQHdK;nEU^@gM65p=Iq_1A^a-#0SRsy0prs6`u3{ax52X z2p=fdrUdq-r39Sm$$+fX#Pu6xPbLYk{dHmk@`)`;w;E`aTTCgAwrxp=`ko~^A6zsO z^n$HU!*2h78iE|lCq8rrR1T0}q?Bw9zAPq(WOpICz@{X~^Sg+PoeDu#4!sd`tBvT3 tl2a9^<gJotJmfO2(cVB#6*7;qy;p41>K{DQ1iQKjd!<eCa2I*2`3G;<8Pfm& delta 1480 zcmZXUe@IhN6vw%%Er%PZ)teOJj{;3)uC28MHS3SSc!q*u!DQlsehEtShoQkjs5Z!6 z-f9#T(`A2{h4W;uL6ZJqA(1HfM<{_5m7=hUMhQl}x9RS=>%aFo-|xBSzH{!qo}kVX z)Ja*|eS7VW(oo*x)c6+-L<Lw#{k4JNb1wl6eUf2dA(+WnL=Jc_9NoxN>I;i-bNeOi zuw;M7ShgdIQOv)EakY@c0rP#NQmI^oL2ES*4VXnbXdQ)}jvE@b511<LLoSfY@9=0K zP;>Aa%Al4`kxB<f>D6Wfq#g2NNz50As;ck;C&Xcl^YzMlm9-(11ctgWZyDjyK<K>+ z157#laF*m6$F^4Y7)HsZ)H!x4j5CVQ9!CR!K+A;`)Q3H7`b`Mcjnc~6G&t|+!HZZr zdvKlQ%ed|E(6@qAI$y80TnqZ^%_s~~H{Pqi#!N(baT~{|CHn|`yc@(>fd|+D9laA+ zZG6P3W&KDsLGDvCHlGP)p-w1Au^J-79_;Xi-(fsAqD2YNJ@yBy{o`A)Iy=$8Fcaz~ zmskTc!8!evp$S|wKN$+KYm{!cnOjP7a(3ITHe2lKDHqNJ4IhdLoz&}~eeN|$OiGRa zW-GX1WWE>Un@=20f8lU$k;Bi+97ZA>uKZX>2t>7O4e)<65;quE)}=U`R(a0-%duRf zA$-8DO$zK!NeWb@CIYfj6W4E&o#`aF_Sdlu$S1cX+-jgnZZ#!2+P5Vf>U$RJyniX1 zpcgDY4Tt0ZX$bOi9&w{Hpt6_v!zE<1|78(5EY}o}i)>1Qys(Q@vr{3+%Aq%6ZnF}7 uVPdKRm0T6_tdm^9H98u}=>q0aw)cvSTK$7(8h=+8VXw4F9_}J<HU9v1T^Jw$ diff --git a/lib/libpmultiboot.a b/lib/libpmultiboot.a index a75475b92a192b5b9621612b09f113d30119e161..10dd5c6c851bfff49ece367e527c227e1592b012 100644 GIT binary patch delta 539 zcmZp8%-Halae^$XrMbDK#YQDxRtRgdf|1zfF4o`7NZbXS2bthp@y)e7Z;-jI{67#} zvCRuOw=+%l7v)0IP%8QdT?M~|UcSD9p{bFvG1viMYr$IO<&d@3Drzxq&X@nhh-6%? zq71@y;+wasXd$>_n}4YvMQ|lH-_aIC<!Ulc{%giRS%yVuvzqQcMm|%ZLlExRtYD;$ zP%pMQ$<&nv$?BUnQjC-H<pnmswYq@pq?<Os5Iz*&{NA1e*$^S;g$S<r=JRg<kQJYI z1DXkP(j6wg%?jSfk<DfH<w58a+pHCE5}C^vvXU3>II+!_5|fc-15$gDx!}NEpN$Ay VP*m+;n%tAe2{%K0^TxdMOaS`bm~H?7 delta 539 zcmZp8%-Halae^$Xg_)_j<whl6RtRgdf|1zfF4o`7NZbXS2bthp@y)e7Z;-jI{67#} zvCRuOw=+%l7v)0IP%8QdT?M~|UcSD9p{bFvG1viMYr$IO<&d@3Drzxq&X@nhh-6%? zq71@y;+wasXd$>_n}4YvMQ|lH-_aIC<!Ulc{%giRS%yVuvzqQcMm|%ZLlExRtYD;$ zP%pMQ$<&nv$?BUnQjC-H<pnmswYq@pq?<Os5Iz*&{NA1e*$^S;g$S<r=JRg<kQJYI z1DXkP(j6wg%?jSfk<DfH<w58a+pHCE5}C^vvXU3>II+!_5|fc-15$gDx!}NEpN$Ay VP*m+;n%tAe2{%K0^TxdMOaN4sm(u_M diff --git a/lib/libpsystem.a b/lib/libpsystem.a index e4e1097da593f70007d996aa94f40e72b5a7472d..2387949360da6fc7d41f11663ea9610e76d9a9e6 100644 GIT binary patch delta 4180 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 BUY!5{ delta 4180 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 BTBZO1 diff --git a/lib/lists.ppu b/lib/lists.ppu index a6f18d7e5acce70db2459099424bec3d9679c313..b4c2eec40c0d385fc257e00a2667d5c82035959d 100644 GIT binary patch delta 19 bcmcbld`Wr2e2zs==SG&d7@ga=Tw4$TU?T}G delta 19 bcmcbld`Wr2d=B5m<(KMCeEPa^xwaqxV{Hl? diff --git a/lib/lmemorymanager.ppu b/lib/lmemorymanager.ppu index 606e2f112d5fe4237f766cf8b10053503a8934c7..5b265cc63ab924c7a1fb7d32cfe73714554b352f 100644 GIT binary patch delta 46 zcmZ3buu5S<lk%dcb0f=JjLtCt0bf~eYHof}Wo}|#VtQ&(mD*w-Q}eLEjZ0hk0jm=c A#sB~S delta 46 zcmZ3buu5S<ld|vP@=J9mK7C~X0=}}`)ZF}{%G|`f#PrmnG~2ny*z;FT+PJip9{|qb B6UhJo diff --git a/lib/mouse.ppu b/lib/mouse.ppu index 38b75b312e835ee02c6eac7c9f1363e6b09ea3df..4039b4cae7c0280d924d8717c531b840c68a4168 100644 GIT binary patch delta 31 pcmV+)0O0@P6yg++gb1SLomqE;GR~2VRtQmMr^Wa?*6^|FcnSGr5HtV) delta 31 ncmaDP@<?Pt3y1IG@=J9mK7F0o6UM=_jfb^P|Kf^`uPQhJ^^y+% diff --git a/lib/net.ppu b/lib/net.ppu index f4d7283923359358e6555d1c9d918d322042cb07..61b51ebdfaa6a7e748f932067d9ea92f6d6932e4 100644 GIT binary patch literal 2751 zcmbVOU1*zC7(VZpFKN>@U4KkFJBpg74#}K!ZlXg++cb>QpJhqft#eSb_H)LiX-Hyi zy(p96l@|jAe=kJ5lQCq77gL5H6G6Q2O1#h;ue{MKp<O2RdCr&fC9Oh(FPy*kea?H% z`}3XmOD5+=o;+b+6XjE1CnM_JHl;SRhkm|V9l0G+N)4frY%~#H!Kvuk9C;n&SuNll zEoRHtdw;lamK<N8yiu+=D<9@oVz=J;=qo~7mR1Yp)x2}Ic<b(o!=FA%UMn_MHi}Mp z^Yc45oFmWOG0aygxqLaaw*B1)N4DQ06L(VL_w%4t3-eB{1HpXmQjxqYuSAj--M8vK zsC#ZzvaI`d-KQQPr<ZyH>4kJAG1EGm$Yd6hiF8UJ=@uob6*C_YK2d%m{kxcu3Z(;e z;Bf*pH1MC$L!LaiSFR5_Rad1IXjSdaLpvLxxQyQ4?dL6(?nU>O?tQwqb?-OE*!3G= zzj1(3^+=<B<CU=15HK2CcWBSR+y)K2gxuGO^E~HzwiUqa93?UG8cD~qg<;g8Y!o%l zcXlkM=mGNNRJ-4m3B$QKIXju58p}J-+H&RKZEMLrZ(ZHQRAPv^3L7TI2RU!*8czdw zl4u$5uJHt~kxHDNM2e*_KX)cI6(37YL^D{V6SEWXvFYjYvG`OpIXAwLN$hu9rs3mg zR)ksJk#-8p@oYYSDZ6w<N!vrN^`asWlIT<<zi$|$6`>#P#hI}<prZy#ZKS8r@KNYo zv8pAkB*xQ5(F{#+(v&aG19*XGiFm#k+U<+;ndz~GL@Js|CF1kO4g1;8=(zUto9;+C zOKWxe+XszNGdvnJk4F1Bx2jq6664|pG(*drG-cE^0N)^59`lUqp-~KEbpFibL=^Fz z*v|%f^)Q+h;oBJ~E-q&)StT7^=JqRKlh)99dp?v_B!u2yT+BNKV7*AMgG+iHtsXwt zQeNau3Tt$oV^fyi1n@JW<>+op8LR(eDL+ro(vWBAdpra5F<RZyF072DA<xoJ2n5|g z+iNL3_XUMDy3Mh*nYZH`0Phkl&$PMzSE6HjI+4Mb5^eIkqy~~zWiR?|k$bE)-CPfn z%esjQCi)m%e+C8YTA}nLe0*e(Nn+|H%A8+s>eC`0darDv+%?J=a>{h|gzSLccaZzS zoZ7iU4wneJQ5E$)c+5o!^C9jnIhS*&+ND{i^6F~oN<3Ry##>>)KLRqW!7QuYb?|y+ zI=kVNl(ZY@PXM^5(g$`K?-a7uNPqF9EaG+vU$K&qk^TnW0Gfp9yTE0qqMxizBmW&- zl2qwF=~2fx`0QM9?f9R+{&Dfen_pg}+?OpCuNKtk+|)2#rfjG3(y{m7?l0W`_OI8- zAj#i!nRo?4wy5-F@?vyJAD1;kX+wmORbBeG!m#&_y7bV`J3BIjEyLU<VWY?jvMfax z@o;#^{hkbS#P0NB3Fx8jLH62y{L{GU;HF(K_;dr<uJ>FxlTUjCeD_;qf=ZaF7mV^n zbJHa3=Bg-G#UVoan1X@$I13L}?pffEXzOfs(gXIpz*%P<`PT0NpREBC7$4RenI=9R Y;e#IPbPbi%BlK7KCP*6Hzesle0jjejBme*a literal 2427 zcmbVN&u?2r5Z-zI5j%0(q=_ShNJ|ojiW(@WR6-mOj`LKaq>gJlrGbO>nmkpej$_%T zBpkT(ia3H$4~PRGQ3;_6apHiGkT_KQ0Z6@Y;M_wCNlj(GZ|wK{5|Cms((caAeEZ|u z+1<(K*IqhzK73P5$o!a}HO06wx4+zf_V(6;#)vWIBnl;rA`+^(E!Ea&OVDNw!S+Jk zY0lic`_?5|Leb`Kv*m8xs%)k2eEiuDgbr<N*P7c^_fq}N&*x8n{S0j}3~cSz-R5t< zzwy<vznq7j@!eLX+Whm6bKkwXvwx4qVHAl(xX`u*{TTbvc(ro1PMgCmQDjK#nARWy z3x^un)S7&Z6ed|uaGq#!y;!m@#&UM4w4S$%&j~!^V#LItg@6b_5h?-O%LGI?KJuSX z@%<cpU@D#SwZ1LtLx%^4js~IFjBaHtqPx^uw6?SkX&v_X03J|v<Ws@vLcQt6by(ye zdp!uS3(TM=^S54!x2dbP7lHNxilk`^ibiUP0n#7^T|vFmvF6a9r%k3tI3KmM2voUX zUsyua3eewNEi7j<g~e0}ouZvv%w|?r7Bbo8RDNw?y<~GW%iou^r?b$uubxMY;q&az zMo}k<Zf!H`RI68=jq66@r@G6E8HJNFg@XGO;<l_=-nDS~VkQgd>mKw87%4L-xMvy@ ztKC3P(zsG4cpzudHv^qT7C@V5Iq9Fp+`+TBQd-HZ+l5rAU}rCT$8Z#X?x@S3k0nuX zH*WO#4^MlfUg6S^3<~*Ex7rSBN%IJoY3Ru++kr^c0IU-&^FFB)B*j3cF0U>vrV!u7 zqd0H_r%|j~KJRF~yy>(YBO_zp?yta1;eNS${yo+#|E@^ATy<-}`jOs%l~P6Nhp)?& zv~SSallR#U#Pm}DZxJnL4l-q|{tr|Be?HTM&-5nOfP9G3XL=kxk7>eZ`VoPUPf!js z<&l3*XHULh8yn=&egojQM9YiA-Sao1F}+}y@KRC(zDv$PvD&OfU#mO<B{R<cG_6cU zND89M=$Ae%F!yqg?@8(aUJ@?_A#+4@5TCP5Gpv3lLIw%?co6hyLW1wOj^k~UB-M$A zd#!?0*T}i8_qH3?vrc0Zzd<+1V!j7tUco%O@jiH`wc_l$4P++|$|T9ZLy}|}ZsI4x zz4W|4`CfiS;RfERk%Z^{1-2(qBsqpUdd+R=r!?yMe}$DIZ61)E=yu54$YW9z|BIA8 zLf)Y*O@jAPJb6IH0+TV#te*LB%Vb)v)GDn`M;^o3A%ID>D^`3dw^T}%f%1_@J@MYq zL)U?$coQVaOA$|b>vA!T6H*ygog-w5q@&pd{_r?~Zj50c(QSpzqz|0v0(0&TZr6kl koazBjp?z9s<dqBQK~MUqnI7tlwwS-oh)5CDzeGC!0I0?QlK=n! diff --git a/lib/nettypes.ppu b/lib/nettypes.ppu index f631cfdd792a1bf9fd2e894b2416ddaa4a9639ab..145f81d26724daf4e52a05e280f3ad7051fa015c 100644 GIT binary patch literal 8211 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�w zlP?rX)2AFAHS%30f64VI;r$f5%ztPdQb0>KJCyP328`c({0$1^V(&eGP(m66?RVe% zaCMA>{9)_F2igz}JaiAB;eC!CF-YFb`7#-V)rt-<lrt!yX(Kp{=C;CQ0Gr@;t;29u zO4ho_Mn0L81z^W;emuEoBaiDc`Te+QQtA`gYc1;=^jv=ySu-XjOpBfC3mrDj{dGP! zv%cf9eZqTa30qDdH21Pr%U%;Uce_KUx!&Id_pvrFdld{GRT!(0<|B&tv-H`kXw;Ze zm^A+|I>1_sWiLmQ#vWHT$%JqIAZx9)T;%AK!3BjI8R_LCiVv|2iRH9$XOyd@Pu#T& z5=+VOisIN#r}>ED`&s(L@~BatR|*>zpIF9Nt4l188Tw^Ku?O<AKh9c{CKg9iMt)UE zWbQN{QJiJz6U7;$zNHkN(4NBoMSP-|HtKsy;U@O29$~GPC}xcOk&-djqeOE%S<*JV zl)bEVxL;ls9kaM(iLiJ}y{8}$WN~|u5F2N6g?u&dsJy{%+{pb}8~rW+wz4mYn%<)f zH_ZAcXn9Luf2Zu*{L42WeA@u<j`%07#{m8!`u{%wxbXwPH$)pir8jiyJ#F-T{;dt* zA%?>MDmMrAU&>zKUkpGV!MzVN+cKM*(9dR684UbK$|J4t|I2j1SYhhN3d;2JFG?db zU04n--hMfsR$&!B;v$N05MGC!{a23vu}0z;xsT+%UjGAUH83FANVegltiFahYEFsa zT0aa%Fs^p_#AZy3XVx==V5Ahr(rn*$sjXXl^zmh^HKm$Z)_p~#?iB*`GmsX5SHpE? z=6{o<RjY;CVidmkEc|jwt37oqQ+?tKw|-9spKRxU6Qp%lioab(;?BR=*F%auxyMM% zV-G$AEO;!@HJ%({601xp{I9e%Q~P8<H}y!X2aUi}wEm+4ZSh2wi4Ecd@1tFr1#e<> z_Zo3@%rLyWFM464-5xu^m|tT&W!rc@>`j2~St*_-4Z&t@-pc}wcw~wZzl3`ksoQAK zLw*U%3|z}qlp1Au(MLC(Tqn()V-(K=N<F}`JImh#$BWa2q5Ra;N&XnknP#nUPcer% zqSP^#9oezs#Mv5D@z9qT!YxUw9|5#y?9kxw(BODBCtsn@Hi###d4@UMT+hib^K-=K zgdEL3a?jF#P)EoavL~PmK+faZM$F*X)Ra~CJoJcDRd)+cFI74Y?#*V8X7-NfO4Ft4 zr=QXbZ1<ux^CX<3M4h7tN3(sofX=s(cC1T_{}tkWu$MV#AsxWCO!2B5Yn^?;w{*kN XlRhbsdkOBj&>S9Vgy-I(LZAK@xQad4 literal 4642 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 MC{kJ~^9p+M56%RmM*si- diff --git a/lib/netutils.ppu b/lib/netutils.ppu index 4ca19af00f3c29379fea0bd7301d743c8fb451a4..e51fa5a89948a814311d43a19181eb86298cf552 100644 GIT binary patch literal 3681 zcmcgvO>A355Z-yV6X(xKnmVOQ(>9Jv3NBRXk3=O9a@~hyHBDY)rzNdKWReG1#EyyG zrs;u8IU<BORHz6c!3|X$s!9j}6&xyYp$9IAD*{ePAaQA$LioOYZ=anITDM4yw6nW2 z-_D!a*&VMPXKM7|;qWC<A@!A$P)A})b)8@N=E}a6cLtSGqiCcyG?8f8t(~hC=c{2( zr>N-V$m%qTCo6^OuE@7%UZFVDQeCdr+|ql+QtH~}556Ei%=I7s{QmUP8wYMtK%2GY zid%jC`i-mZzGrSw*gCsVt}e{GCo9)(9v=DlQOaWTCAYM&xLhif3opBiUvB;G-SVl6 z3siNZNu)h+V!?u-kHVJNeDTFfpeWFBlC)|b)ttd8Y1e#C^A61?w^H6mV=cMqT;4tr z9k=uOX~)jBhoI>dB`PWkdxvHQhw3s6MMd=b=Amu>2K7yK-bWv6)OX&~tDfeeeLhqe zYuI<Czi~Y`z-WE_wg}NmbJ5(=JfwM8^N8jxnzuIE3mezhZAe{e)Ntm1T&A6=XSnXp z<~|rFA95LTZ7g7@PtuSPJY?LPnB37|5<`>3hN1rQ-o_9^zB}7>;=FrwSC@seOt~K2 zrnrPADasm2-@{hw_0mRF<9Kb&8peDNWs>iRcskjMYdDq9j^$=D6VCLBbSCLc9i7hG zen;b0;D&YETLsyQ*4*KROcIk|6$n)qXO%?zJmaFee0V>4)P#_Sq?@6+Y7NLCgM7qC z4xvY>&?UuMEn_ArR0Y)-^?qWT3V0kqhiG{r2zb}JfV0l2Lk}A<tDF~c+g20DQ~Vkz zjaHACHPDN=En$!u!a!qa8zbhfo}$vHGwhp+m^)S>TAtn{;?t8^RNizZeeBqzoy#?u zWA49~Ip#A|Dj>)01164HehoB_#)vt#R{2{ZDNfE);L}C+O~vsRfNv8m`-3=k2bt4x zFm(?e$S`bL3I57i#fp-S9VU)T{2J&@w0ay%m`RFf{W6-ND;z|dxpJQY_&L!s)b4#r z$=)Ciq{2Qql^$Dv0+Y$36BA>0dYqrV-{spwOoC5`FcLGWq%*jEA3;dEipGdM=oZWf zJpgEM7(XEn^eGw+BlCtNGIf%o+h0@Q(@pkG1^*L(zYr~bLGU9%@LA`-#_k<TzAQq; z3PSJNLSOMYbxZe3eUH9=4da*riO9Ql8{`i@@<;Ub$S+_fsTS~GeLcJ1$(o9M1;ACJ zB^yNkSP=QRecDN9j@$Xn#CYC*KA%iF>*n{%I}MYpRnJdWOW`f`DZ+76*K9kG14PS2 zaLwv|J~wIG>l}MPKWX@JG%LaK-d35xQ?%w@K;iEmH2aSymZoj!>(`DV(LXVACx&r9 z=X^x#H?Dp+<CQAf2=gz4G~>UK0}YS546>N&r!t<f5xv5*#zP*wn4$AFfM-MonE~@~ zhAOU??a(R?H@u&L*r^c%M8tV)u(+~}>y6(y&#tH;xTsCU`ACiukaf-<QqpD+BR~vm z6P@7QON+&t%W6G0x9C=@D7pst1b{sJ66fahXdrC`$PR-%7<{w`$S4cWYv&5{xclC@ z6m<j$&u_l+TX8ErK$ihL8+?rW)>C$uoWks@ZY^Vy88b*5$UVSFd>eT0ON*|%0orZ+ zIu0mFRyh!63Z1Sy@+Ws+&QhXBw+UIMEX9)h8x!i&9~@hd_UJzzM!d1_3a(zUT&%6F z$z81bi)#gsagVH6c08L;&KT(WHFV@&rPw!uE6I^Ly0o3(JiZ+~mNd3!=mx*7PmQRs Q4ji~uW=V2j{~%fW8?mN$x&QzG literal 1835 zcmcIk%}*0i5P$QwEiE4lh&4tbl2X6YXo7$-#2AY-v5}9$wkUca751>Pw1q7qXa5H; z9z2?OBpy9@@#bG(^y0yjR~4wH&hKsCc2OgEaFUswH(zh&&FtiIh2fF0&|?yYc%4fK zqfLmfpGIDeKid7!C4`7G0%D9r(Xw6Js5vD!gku4UUU0HgD=t=x?&tS!?_P!2h`3vB z&0c-#tfsb~JbMLugs5#*ZTH>Bo6pT}#V-)HEmz8JrDV@lx8IDNeQ^e|Zbk~X`++Nx z1$_`k%#w4z>MM#!20)xU)2O0ISWvs7D~fg~I*$+a5z~mZXyr50i_B9m2@+A}3|1JL z8HF^Ai$e$KBSC#<z(2q?Lq)^5Lnum$%Aj*dd&K@M-KTEl{GZ)ATQ@PQp2XCdsJCh9 zji$as)uw8t?`mM~p>D<PKwM^|6l6hA-E2b>RU?C{Am3=n<9t2=8J+J4dpbHblgStI z*(q!3_I#F`o4%2roSe^CRx($ZSj=Y-UHW;*9nXzryGpZ%xk$n$fr!RxahV6|q!*n8 z{s_P^MjkCyo2*y(L@9U<GHO5+ai}`3u;DnYso$?-aDN@y+`{O;7c#^#WdeVNbgF`4 z{ko0|xQ*d5W2=r$K2ZwOew|UnB$()7`mxN0Hmu2P_ihq&&aZ=8k(n!`r<#q>pX9{s z>{KQ_qn`gSjX_$c8D#>0c8D7@%)fV^u4tNtfCWZW<eB34hv_9YRSo6b#2wf%6d8~D zO@xHh5YQf83@xSsNd2Y9>xk5S?8Q1Xyt&|fjpv12{XNI~Dy+P)N@)Nyqt_j)x|Irz zqBx$Qdvo2X*%;fEm37;7dHTGWAn}0J7%GZKnD!{cZ0_NxZyD2;Ypm~Ama1)d`L&H= zi66o13kkFuKy_3>N4x`a6Z8Xlklza0fyowRDHvSCu?Z94C128`)~y!*`t9<Ez$rVm zMuTp#-!y#5)X}7woyq2tOWJh5&q33nZ<KX#x{rvRz&VbkZzgr@C8UA7)#H<}nn_T- M2i6vo-+&rF0f+9u>;M1& diff --git a/lib/pmemorymanager.ppu b/lib/pmemorymanager.ppu index c4c5ab110a1abea521cd81890fa82c79d0f6dc9a..0556ebb0e310bb34e760391e0274f75393452345 100644 GIT binary patch delta 19 bcmX>ke@K2p6UU;bb0f=JjLvQBvfu{*TZRbN delta 19 bcmX>ke@K2p6Nm5O@=J9mK7HNTWx)>sUeF1} diff --git a/lib/scheduler.ppu b/lib/scheduler.ppu index 4c378adf8f92e6b3fc9739abe103429cf57a8db9..9bcafba101e61a3cf09f73a111f7ae77f96b25d2 100644 GIT binary patch delta 19 bcmca9c~f%2UXBBK3)ugzU%PnYQ4t;hVucBz delta 19 bcmca9c~f%2UJlo*d%i!rurP4rQ4t;hX#)yH diff --git a/lib/storagemanagement.ppu b/lib/storagemanagement.ppu index 9b706e51d9b332bc6e327e4bc953fc37decdf352..11cead0a3b0d3d10c818e4748957fad5536a1b92 100644 GIT binary patch delta 43 zcmV+`0M!4TGMzGzhzO$PomqE;GR~2ZIS9aRpa=c0t)r3A6$nvgr^Wa?*6^|JFBs0I B73%;1 delta 43 zcmV+`0M!4TGMzGzhzL!ichY{y^7WCBIS577y!YnNp;3|16$lKr3<Z8K(WtTRFBs%1 B6<PoQ diff --git a/lib/strings.ppu b/lib/strings.ppu index 9a495ef9c744bc406891e7ed3e7ec7c954d3ca6e..3fa5be24840da04f5e956f53133f101ab20bfdb2 100644 GIT binary patch delta 19 bcmeyO`bBj@3CE(Rb0f=JjLvPWsSpAHV($rV delta 19 bcmeyO`bBj@35W0E@=J9mK7HL-Qy~NZW;qI6 diff --git a/lib/system.ppu b/lib/system.ppu index b368f65c48179923a2bfabeddc91166774169903..404e748b4b4a681cd59fe35d63cb6c1a1ed26f43 100644 GIT binary patch delta 14 WcmX?|bUJB50P_^Jvm1kd7ytk@G6wMg delta 14 WcmX?|bUJB50Q0<GXEp}^FaQ8LYX{B% diff --git a/lib/terminal.ppu b/lib/terminal.ppu index 4f0e87f61742173a41210934b684f76ae4c72225..ce6908bc6af1d7f969f4fdb9677afc81bcd7c7ee 100644 GIT binary patch delta 1953 zcmZ8iZ%kWN6u+nK>wjJgrG?V6LdPE`j%+QMZ7xAY5U`A9!Uq-%cI5#tLW^ygTSz2} zCMKfJdXgoO;6x*Sz-5|!8i|Iu7){LP62(PLG$!tYI*t2eW-|2L`}!W$o4j-T&hK}B z=e%>yd%gY8^3ld*a^zsV)A9l^Guui=*`0dEwlZ(o?p?b0PLeUE6dU8xgOO_|&J{;{ z?Qh>&9ewV_*!ALjagVi-OQn_E&v#$G`2D3H-YkA|R<Q$<%ybAO6Ill^a*!@#ap7jd z?Jkkb;;!QVB$IG^cik3U#3qnR{K?|OFF^tyZo>eCvB6Xg_1I~O9ohq|B(CLQ5%)Zo zDF3Ak#k6b;un8}iTA}6gXQovX9KbaxfbUB#y4?7NbU(D=M^ZZ+!P`;{_TdNCFmwsq zEo_gleZme1n-F$L<TZl-SR*iYIbyS#I-Hb<luYGPvkZa`iSGCcXq&K&WKCfgS<5ly zbb&z~jyleJWOCTLv$M0Q%mjlyxZ?=9J-eg`Hal<1RphYFarHcdC^}uwS5=eCnNz0J zd_l=6bhHUqT%kjLE|=EjnvG0eBR^jjy7tm#3iI5ovr1t)ONU$VcUQ<)LoU~Zl27N< zxq_O_Flfb)`wBGTwtI<slB#$GuHqjRQ%57j+zk^8X%7tSPxAA1mo6%axs`TPw1KP< zDuzWl;^Wo$Z>Shvl~w4&{hpMIXJ|e-Kgl4D%N`XDquDzqH**=i3LQA>Rbd8idY?YR zqeyCILOIQ#)2HWhf(DeYH0`^&+(#Zmq!XX5Y=a=KR(`t33kvl%4r|lTpjr}IVUASW z$vTsw#R)1pgPJOV&Xc^xaB#+O8KYKXED)nkXt>GRlYMkNn>)iG>=g=UIld?e6`U|^ z5b8C;OGIc8xR<OvTpE{0=O-tX9D~Myka^W$RhF{`OD&FSEabt2mXEAm*J1;(R|~dG z1YUm#)RMJQ7etUYtrq0JKm@+trM-!E2n5O6jHDmH*L@+G$FQF4*P5~)ulPcXA#&ME zxzilC8;YAH#Vy+T41%8*)SR2A2|VBu4+rcM0(nN@r_UI(s2P=da8O4-CsbtZ-$STJ ze=&>~E9R1>2%s;;bz*V_@JGoyrj&x{7$p>UmO_0^6fOgP{(Md`a^2ba3<d1aIo}aS zwB6rA9J?+<1Bjc|MVi=ze+3rs!+;O}_IJq-6Ui961$;c9!V-bU<;Ti_C9JGb0db)w zA@`O8h}#6LVOQ;-++Pl?;YzIv>u3oM$xoC6>zE3vuz_C$6Y^j=uz}5WDs1Apx`fRC z1&pjV@fQMa;FF>Au!FybhTKmPOog7zGII2UI~VtnLv9-GIX>8b?2*K{)`P=PD%&;M zwX$^)&pDY>6uq<ydY`^BINh96Q1V9kmvqjz#L+t4!xK=_)06-bD&7(HBf)&)z~4t! zO3x@MdI{F_)3*rblLr0)vbIx7E-yZ1>pI~#Lq0(S%d|2x$6!N8?-=M1M|pw_HZ`;t w*k1%|b2dV-XD*jbEBXAm@x{HN>)a!vHfCc)bUdS+8COmze1vxJ<NEf00SE4D6#xJL delta 1864 zcmY*ZZA@Eb6n@WbZ(G`O+fsU=w0xA0jWA@EvV=u~8yjPc!Yb)vbW4!I1#SkEv}GGi z$BZT>s3dTbC0n9m4ABscANwQ8Ow6Kj{?ILc#{JM=>f$s}6EhP-^t|uwz0^0o=f3wm z&w0-2dC$F9x_*5qmP(z7C-&K&0cK+#rs~;8)r|Fief|DVw_klE#TXl3jV0vY*{6>` zx%$`<*WhdCzPNbv&%ah*Pptm-REHCoY$FoL5?L4UAL%fb5N;;io&w1xp1k-ns1e@| z)o#W(1@6bVJ?IeIGQ11NAc8egJ)V%7pc*eo;hGq*o#1vO4|j=>27FK24NceXNH0mS z7guDJu7l8mx8*k2kN?W;(2VceD{$Q*L$|f-v37^8U7xk<w{`>OP8}+)!dA$h#sOQE zQTxej?M{c(Q9`|tQ={3@83vUlGClF78aH8MWTmK^tbIs3pJx!p>5|L7QgS#CWoBkZ zXU7@+^ME_zRdz@<*y;XO36R4v$JKKTVp#3DSQaFgJF89VxxALuD6|3J@<ckzx!jm3 z*JxF;LVmvNbT!Z=MMGpAGg^KsL%~gJ-bj#F>lxQ_V_AJJuV-c%?7}wh7S!Qg@AFWG z`O+8Q27)r_t0Cr2mN=eMY7f*F>&07*76AK)+<XBI3>9Z<rM*;NNA~}z;`oiCLmwXS zje6<{wVj@yV9<_l`gG_-)qhH9B(K$k1YYv%a0Y+zKT*1i09l_M*UmHOz()hM%I;!n z2R<9v1C{tr;Nztz0Z{HF>rRQ&N>cwAsAZzud8*N1xHuzS#HcVB7l=_MG(2QosiPF0 z$u2O6_=UpL7VhPE+QOp(Z)VRCp-u?+$SUc=$@k1pOlVmKb*hkg5&c0GlR=jrGaP8? zmQk3?3}aAl<h?>TKUPpH$U3NZLas$Nj)B1|MBr<K?!1wpR+4pE_3gnAf|31U@;OfT z8?9_LgW206*v{Ukdy@#}J#ZCjr;&UB1LcvW2sv%pd77KO9+4N=4T|82AjJD>*JpL= z_JbyRlTcB0h`vS4XHK*AHpETh=S1Wb2*t>jOlo;?G?cmBUC8tmbTP)~5<*<kE#8(x znfX~tm@r9qNJkuSi2n_jsl&(S=kisWvxU%ASj2L5Sb3NT*0e2RUe#e4zbD{OF|dr? z6*{cp8x={Vw-{JMsZxh^oUR;Hjur#!_z3|U7!My;juitNxDwW36aNk;m1HrniNjSo zY~l5)q;k9%*g`d;!!5iNxeVJR7{r!nm-iG=sL>M{M$T+>-%>L<l*V-L@L>PY!Q_Z> z2Axpo+h=q)+SW}x_e56H%-$}V?f=r^^l(mI%US(jHaXuB$2jT3yZ~)%iV9dGbcr5; z{Xj6EE(rCJmB*&FQ5yGkGx|q@`S?JnpRDt&md%L|(1uC4XUPu`!9Jx;&oS6E(LXG7 zh@-qf23rPt1lWCojX6sb?3>GG#<W~+#QIF$GIh3zXw2D3B9@%d7DlwQ8Xuu;yjR`! EA2)GbSpWb4 diff --git a/lib/testdriver.ppu b/lib/testdriver.ppu index 062ed20dc7d4ef21ad9cc7e798b70bbbefaea8f8..f89b65f4687d7dc5e7e575353f2c7f18b2a526c3 100644 GIT binary patch delta 19 bcmeys^?_@`ERMjm<wt*5U;D6e(K!|XV`mCz delta 19 bcmeys^?_@`EDoM+Jgjy47guatbdCi8Q6mUN diff --git a/lib/tss.ppu b/lib/tss.ppu index 97358db4a76657d089a2bcbac0c515426f66801c..d8f5b295ef382edc4991fcf2c09650707b7ced6b 100644 GIT binary patch delta 19 acmbO)IbU)@8%LGeVjolUu)vLdf;<34uLg|( delta 19 bcmbO)IbU)@8%LV$++*zdD<^I26XXE^O&JHG diff --git a/lib/util.ppu b/lib/util.ppu index 53c8759de6de59d08941e1794b7cc550441e0832..a37a39aa5959e9e78774a1e24e996697736e7d07 100644 GIT binary patch delta 997 zcmYjQO-xi*7`^As55o-1FfeZhX5O3kW(GuOru=ra*olUaRxx6ysiagF4K$FT2mvw1 zrVHD$GTks|LE5CYy3uHqCTwinsF4^nY8NC;W3;J%E2B%}3O}a9gts_3_xsL0_vU`* zt?pUan<x|pJG*nvAE6xTMj@%*q?9`U;@7WE&UHN)P)Z%2Ph?!5*!K_h&VSw=aL>*R ze=|Ds{N0%=j~1Vtoj*P5epRIuf<<g+4LopjSkt*1UQ|_Bb%pu(y>x$rj@nY~uCO}Z zl$x#iikcS<<%N#$M%mW|1?AG@E={t@f*~dr;yfp4iz<htpv?h?-%}QDDHk$G7ZF0o zI&_u{uQ_ydtuvpyVw+>alV#Moh(2C*#_(wg`#J22;Yf*3@_`oTW2Xm)OVuF;9AS6q zPJ>H7yIdMiyTd$NmBvo-`bAblOV>RIG<fLs-GG<(e5<J8?=>s%^GIzg0xZ_vL6C?1 zt*GY@{yPY9Umy*gCj!fe@Z-8P8aY<Cf+#zJX~cLqcpE0|`ej&rS-*k=|7f^}6u%3# zp_!LM8MN^4&_lHHf}X`zuIg!Q<C^{y89ohXk!2u~#RtqswxNw<kqp|Gijj5=-MrP5 z!H0a^^ry`5V)T(5HW&MHS4bWlrbDnibeXd5lBJ5QcXX$qqi=t|LW8eVhH4k}|4kRy zVupmlFboMoj}bGgMXpUuDKvV^>OG>iOIAKk8!Zxv1;ds&ToY{IKZYq8cx#yXCeb*j zPRvdySQ{rDt(;^?*D*dhqF`?rPgk087ED7za!fGEGp2<tyd;?BU9%Y-d}C%M7e>5O zGI1boBFBlig&q7U-iD8OJ$|b8U$^*|zh~^Vx?QiN@|vftA-32B-IAVH{(z0oFFeBS zb|3HCjhwghOe6|2h?&F}dPYPeo3vxXr})I)En|r$WBf0X=XA1>xn!Qp$%0HKoEl&t u<qiI|Y1gXo$4sX_Ll3`AMPoa~)!RIHuz&y8<CEjF3Oi7K;FnxXwY&%F@ZP`x delta 1125 zcmZWoU1$?o6uxIBlct#_&EIs=X8w}2woPigO|4b83R)H|REf0W&r4NQC}>4j=<c%U zgT71s9{QxXEWW6VLiItcSYf3Gx9Ca{e?U-t6Ge)?DE^#@O&##UocZQ_-<)&LJ?Bnr zm|LGN7PoYEb^DH!ki~Q{BQ9oz*!cI@gQIum-wy~O4v(kv%FPe|?Pwq0+%-P2%m1)S z2#Vq_IYF{(5u*(HDUM!pD1g;uQxK;qM>V*^wieIjBvdIzu`*iDNORG#013`1M1cee zMPih6QN``60RJMN^78&4dDF`me&lU0kJoZFY+1!lMa35>NNL`c#vX^77EnD#Ws_RV zwRV(iJu8RtMh@UEE3e9R>i4}Z1NolPI^6Q5=oi<T8$28Ez;dM{W!(Whmn^*X1<V~D zfd`hgTUiya=2I$v4NYED6bUm`Ia-O${`tw5flU%sp-Y{nYP?hDNJXipL?Iy5OkrFP z%}@l#!_C~Y3*i~=)33ETO5jZGZK}hbNRD)zjFhMz+oL&Zz=`O;WS~EGn=I7EOXT2j z{4RI+T%w(_m`miT@sxItmf*hDM$P!7<){TMbuTCfRd1s_R<LcuUcHr;;-sFZ_Q~sd zheQRus?Spw^oDEHjsF{-a;|?;Ti5E`chcNBkoyMu1;tf`G0#B<`@WGrmmC~oGEpJB z7fA)fhCzP(X{5{m3#I)B1to(ELDsX*al>grTrrw>CZ8A%&*Vq8F&L)Fv$%?F65CAk z=aidhWOTP6rxM`MVj}Y!IVLDwA;%U;8<$OkCur8Rd3s*6ZAHjxqz)9UHu?#}Rws30 z+%jnyE?G7$$33f^dhpr$T`&1L^1_;RvBY&msu2wtIB$oPhwOWVDSKP&nMe78@hd<6 zaMqBGs57WF@}EJzo0S!2tYg;c!<3UmOS%`4bdmeBD?O+!WzlYrb|2$|Ff)Cq$t3Yx zrWZT;eI#4J=L{cQrpPT*vKw(WRinBWRpW=u6}XXYNUdZXY}_)`KQKHpI&wr%4=o)2 JeavT@z5-}4)j|LO diff --git a/lib/vmemorymanager.ppu b/lib/vmemorymanager.ppu index f1cf407a5393872eb7ce0799561da51b8171ebfb..a1e1c07db2fb2e0b9df5028c52c56cd5a64028e0 100644 GIT binary patch delta 1545 zcmZWpOKcle6n)qB_&2sE_ITXHW7ly$ZW71&IiWz1AZn^^668QrNckj=J*}tpCybqx zbkhadP*A0Cp@4u=fdFL@Ayr6-3ISrn0#S8Sv8Ysp1gZq05-gBF72>|J$7<A(-u3vL zbANN+dsj2JGs#?TaXdTacnO%DeUs~9Uq=`_oBD8W>fo`33}fu+?c}3F-zI)IeuDmh z-C5tPH?+z-dL@13;`?6`#vJPnz5Kzi?=79#nz*)oJ}WsJM!ujKzx;E4_vWX!E^U9Y z6?6g<>^y*ABkKZ&D{ustA%vfR)G1r68yJ;A0#g>oYY>Bd_&X$^6Ght)M9KEzl1+j* z>b3+V@ny2TxI?xdZ`pbVC=$;=zrd_$6YUp{n*1Qj_TOM0|Fb{fow4Wzyzc14V~(_U z`d&!E%MKY9@H5A(Jwug`2uT>lxG+H-fDl2SAmR%`SROW`^YZPjELnVuw3B#M_(*c| zwsMA6*QyOhO;w$0hleotQ-<Eiua-4NJ-+Q!&v`kxSl5jCT9Lpmk3ax_2AV&N_cut( z78A+(xW9I^WYpGAmKa3a^6{3O7u1ydxcu>2<50d((wZsNw*29iJnEpAep<GepR9YP zP|)git;isT^Dea%;NTO~hOxoHcssxx5&Ut|YWhp`=Fa6$YESBCsgwO}=_1$B<Dzwd zmMzvn)_bH}Tg{ib1A_!!cd5Z3!Je6oyk2gW+l_Z!suUvBHB&6o$E-8j11a|ncn0sf zw_z7Ac$VZY;>9%zvs_)TtZD{>Vf@#l!z)<yJ};~Hu^GJKP55Jk3#;W?;WUE`f~dnO zJT0!t`|s0_;2kmHPu!y)!Kg3c?Iy&Qn`JP9hkQDGg}c6z)I*>vZxuU=eSRIj!wdce zxsRB=Wsc!r#QuoS23Dlh9=~z?KA^)iPDwlP82%)E4wv!Gj^onM9@XS)!8Am0IQV)h zOa#RF)@hwa1|h-RNxW_d^C|gr_-9ZVyGe(x3G#XPkMaS`>c-(}!`NgHQB1F&Nz`q6 z$`}lVAMA^m@a;Ct69#fEU#-xnap(S~>JL&)aOa4E&xKSNz|D}V&_zQfG?Q5lgSZn? z&+Q||p;vV}C~48mL$?!cdp;siI?1}L+L>iOVw$bDrSP;BQLd=u*IJ5<rI1KrcB;fl zAzF%M?M0fIB~om3EcvbkC5dx#*TGSXQOTV<g3?RYbHdQHR)#UF$|OnnIR&L3-<6~4 zxJ4Wwf{zpw9y&zjqZp2g8G<KGcmV&FQ;DpVD@z1#6cm1T9UG0>8l#(JI(&t8!JY8O zba%a>Z1tvz43sNcg+6yBU!@O1yZxc&pqq6J<0Fx1cp6$CX@!pWs2Mklry@xT^J-+| Ee_OvC4gdfE delta 1593 zcmZXUO>7%g5P;vTcjJF=lJ&Yt){WyNBq5ITTmB-UV9`(xb#c?CReGr7B-?tyKauSu z6rl!0FO*X{2oB{(6#}U(r(O^!hYAVA0VIUf3rI*kRYF2)i#VW2h?!llL)9m}dG^fr zW@g{ad-u}cq?5Va;?&Gj@;e|r;&!fIT!{&B?)i_u_g1f8NedxP?<D6&=WqOY<^=r# zPh0&$y<wKGTIJNO4?f)`osc&gRw?`0)-M--c=-3u<(ZwI-%=G2iibBS63I5q!>e7L zuFeO7f(hZZjT+vCIK=Q@NWcN?l}4eP<N%f=72^1&lz=|`h-5$Rk{rYbQWS<*;(aNC znx_*+aLDrq9K{a#X?Ou&mXE?L$zD7pYmg(YhQG>Fo-q)ZQIar@lgc!_g!knb?#V&C zq(rq8h-PvgS~=xuyh-c~{-k`adO6oz&8(Z1hM-K}ZZq0_r1PDwS&hO<$rP0Mmu<$j zpOuSsvzD!{k+RFLkb=jEvk3P5BuyzEAQ|HQ=E-8Mx^ccJpu2@nHE}*92M;oStlD_7 zuv#>okUcGYwu$%1^y3MdQanV`mswpk>veNYfPu?iqdm;Z1^SHICM)Ckp4YG<tjrb8 zn<uO{DCdJMuZv{h!Cya2Q;Mr314l~Ll|qR(2<UCWXUW8ak7bCa6mKW#&ukW~l9O%% zRiB}Dkk*@7Tcg9Q3o7h$zB{mls(%M=;x+%0)<yQ<Iyui*Hp(kzO+X660Sn&6t-x96 z!9Bl$4+62UL7cKus;<5!U<{){3yOF#xUL<1Y=0UdlnD3!k56Mdln5k9BjpYYNaLxH z1-p1VR8*6s^cLLo#_^f31>fPd@NsS6F~<|AL@c<2)yT5ShrYjW5`QNP^`Lqk=J28V z6?}p>+Rvz5%6)1EwT=|%IM?z1HYWp7?v`+lkM^)to3Au#7f7kwJ@gx083$@(=;Wi2 z?m%}5>a#s{l8m^Jx!S0*tAUv9>RyY|nBsW79MHuE9qdoSrrB96ikCZ$?P0~<O`5;R z!s8!WM`?waPBPp~$#pZ*;`f?7Q1^3vL8m81$X3Oo+cX-q-O}qr*0^mwK+;z+xAN<D zlcfSoY|{nxw~%f|%7yhNGG-%0s6^Puq_eA_OXSVhsm?B>6T}S-dLK#6jg&7m^82NC zVS`|9s%_BwY4M+{nPxNUgqwPj7{1}450Z?wkViaDy7Vy7d__QK+1U!ewqJrNH+q`b zLpBS;I1n8|HR_MekkUCv4k~Xps_TMYs$%pO^_-!9K`-IA`laJsnn<Z^mZ|vVLWRzf zZqu_)Rh(>7L_`NqW#_Z6EG%U+$1+Fe7xGS7W}#V@WqMO4><p&y!&s7he;phD59^68 A8~^|S diff --git a/src/driver/net/include/nettypes.pas b/src/driver/net/include/nettypes.pas index faf20ee4..f952f343 100644 --- a/src/driver/net/include/nettypes.pas +++ b/src/driver/net/include/nettypes.pas @@ -3,8 +3,62 @@ unit nettypes; interface type - TNetSendCallback = function(p_data : void; p_len : uint16) : sint32; - TRecvCallback = procedure(p_data : void; p_len : uint16); + + + TMACAddress = Array[0..5] of uint8; + TIPv4Address = Array[0..3] of uint8; + + TMACPair = record + Source : TMACAddress; + Destination : TMACAddress; + end; + + TIPv4Pair = record + Source : TIPv4Address; + Destination : TIPv4Address; + end; + + PPacketContext = ^TPacketContext; + TPacketContext = record + MAC : TMACPair; + IP : TIPv4Pair; + end; + + PIPv4Configuration = ^TIPv4Configuration; + TIPv4Configuration = record + Address : array[0..3] of uint8; + Gateway : array[0..3] of uint8; + Netmask : array[0..3] of uint8; + UP : Boolean; + end; + + TARPAbstractHeader = record + Hardware_Type : uint16; + Protocol_Type : uint16; + Hardware_Address_Length : uint8; + Protocol_Address_Length : uint8; + Operation : uint16; + Source_Hardware : TMACAddress; + Source_Protocol : TIPv4Address; + Destination_Hardware : TMACAddress; + Destination_Protocol : TIPv4Address; + end; + + PARPHeader = ^TARPHeader; + TARPHeader = bitpacked record + Hardware_Type_Hi : uint8; + Hardware_Type_Lo : uint8; + Protocol_Type_Hi : uint8; + Protocol_Type_Lo : uint8; + Hardware_Address_Length : uint8; + Protocol_Address_Length : uint8; + Operation_Hi : uint8; + Operation_Lo : uint8; + Source_Hardware : TMACAddress; + Source_Protocol : TIPv4Address; + Destination_Hardware : TMACAddress; + Destination_Protocol : TIPv4Address; + end; PEthernetHeader = ^TEthernetHeader; TEthernetHeader = bitpacked record @@ -57,6 +111,9 @@ type Options : uint32; end; + TNetSendCallback = function(p_data : void; p_len : uint16) : sint32; + TRecvCallback = procedure(p_data : void; p_len : uint16; p_context : PPacketContext); + const BROADCAST_MAC : Array[0..5] of uint8 = ($FF, $FF, $FF, $FF, $FF, $FF); diff --git a/src/driver/net/include/netutils.pas b/src/driver/net/include/netutils.pas index 48f0f1f2..b485a8df 100644 --- a/src/driver/net/include/netutils.pas +++ b/src/driver/net/include/netutils.pas @@ -3,14 +3,33 @@ unit netutils; interface uses - nettypes, console; + util, nettypes, console, lmemorymanager; +procedure copyMAC(src : puint8; dst : puint8); +procedure copyIPv4(src : puint8; dst : puint8); procedure writeMACAddress(mac : puint8); procedure writeIPv4Address(ip : puint8); function MACEqual(mac1 : puint8; mac2 : puint8) : boolean; +function IPEqual(ip1 : puint8; ip2 : puint8) : boolean; +function newPacketContext : PPacketContext; +procedure freePacketContext(p_context : PPacketContext); implementation +function IPEqual(ip1 : puint8; ip2 : puint8) : boolean; +var + i : uint8; + +begin + IPEqual:= true; + for i:=0 to 3 do begin + if ip1[i] <> ip2[i] then begin + IPEqual:= false; + exit; + end; + end; +end; + function MACEqual(mac1 : puint8; mac2 : puint8) : boolean; var i : uint8; @@ -51,4 +70,35 @@ begin console.writestringln(' '); end; +function newPacketContext : PPacketContext; +begin + newPacketContext:= PPacketContext(kalloc(sizeof(TPacketContext))); + memset(uint32(newPacketContext), 0, sizeof(TPacketContext)); +end; + +procedure freePacketContext(p_context : PPacketContext); +begin + kfree(void(p_context)); +end; + +procedure copyMAC(src : puint8; dst : puint8); +var + i : uint8; + +begin + for i:=0 to 5 do begin + dst[i]:= src[i]; + end; +end; + +procedure copyIPv4(src : puint8; dst : puint8); +var + i : uint8; + +begin + for i:=0 to 3 do begin + dst[i]:= src[i]; + end; +end; + end. \ No newline at end of file diff --git a/src/driver/net/l1/net.pas b/src/driver/net/l1/net.pas index 545f77b1..6fb21914 100644 --- a/src/driver/net/l1/net.pas +++ b/src/driver/net/l1/net.pas @@ -6,6 +6,7 @@ uses console, nettypes, netutils; +procedure init; procedure registerNetworkCard(SendCallback : TNetSendCallback; _MAC : puint8); procedure registerNextLayer(RecvCallback : TRecvCallback); procedure send(p_data : void; p_len : uint16); @@ -14,6 +15,9 @@ function getMAC : puint8; implementation +uses + ipv4, arp, eth2; + var CBSend : TNetSendCallback = nil; CBNext : TRecvCallback = nil; @@ -40,9 +44,14 @@ begin end; procedure recv(p_data : void; p_len : uint16); +var + context : PPacketContext; + begin //console.outputln('net', 'RECV.'); - if CBNext <> nil then CBNext(p_data, p_len); + context:= newPacketContext; + if CBNext <> nil then CBNext(p_data, p_len, context); + freePacketContext(context); end; function getMAC : puint8; @@ -50,4 +59,11 @@ begin getMAC:= MAC; end; +procedure init; +begin + eth2.register; + arp.register; + ipv4.register; +end; + end. \ No newline at end of file diff --git a/src/driver/net/l2/eth2.pas b/src/driver/net/l2/eth2.pas index 92ef9877..42a26f18 100644 --- a/src/driver/net/l2/eth2.pas +++ b/src/driver/net/l2/eth2.pas @@ -23,34 +23,37 @@ begin if EthTypes[eType] = nil then EthTypes[eType]:= RecvCB; end; -procedure recv(p_data : void; p_len : uint16); +procedure recv(p_data : void; p_len : uint16; p_context : PPacketContext); var Header : PEthernetHeader; proto_type : uint16; buf : puint8; begin - console.outputln('net.eth2', 'RECV.'); + //console.outputln('net.eth2', 'RECV.'); buf:= puint8(p_data); Header:= PEthernetHeader(buf); - console.output('net.eth2', 'DEST: '); - writeMACAddress(@Header^.dst[0]); - console.output('net.eth2', 'SRC: '); - writeMACAddress(@Header^.src[0]); + //console.output('net.eth2', 'DEST: '); + //writeMACAddress(@Header^.dst[0]); + //console.output('net.eth2', 'SRC: '); + //writeMACAddress(@Header^.src[0]); proto_type:= Header^.EthTypeHi SHL 8; proto_type:= proto_type + Header^.EthTypeLo; - console.output('net.eth2', 'PROTO: '); - console.writehexln(proto_type); + //console.output('net.eth2', 'PROTO: '); + //console.writehexln(proto_type); buf:= buf + 14; + copyMAC(@Header^.src[0], @p_context^.MAC.Source[0]); + copyMAC(@Header^.dst[0], @p_context^.MAC.Destination[0]); + if MACEqual(@Header^.dst[0], @Header^.src[0]) or MACEqual(@Header^.dst[0], @BROADCAST_MAC[0]) then begin - console.outputln('net.eth2', 'MAC HIT'); + //console.outputln('net.eth2', 'MAC HIT'); if EthTypes[proto_type] <> nil then begin - EthTypes[proto_type](void(buf), p_len - 14); + EthTypes[proto_type](void(buf), p_len - 14, p_context); end; end; end; diff --git a/src/driver/net/l3/arp.pas b/src/driver/net/l3/arp.pas index 274f1318..aa7ca3f1 100644 --- a/src/driver/net/l3/arp.pas +++ b/src/driver/net/l3/arp.pas @@ -3,9 +3,142 @@ unit arp; interface uses + util, lists, console, nettypes, netutils, eth2; +type + PARPCacheRecord = ^TARPCacheRecord; + TARPCacheRecord = record + MAC : TMACAddress; + IP : TIPv4Address; + end; + +procedure register; +function IPv4ToMAC(ip : puint8) : puint8; +function MACToIIPv4(mac : puint8) : puint8; + implementation +var + Registered : Boolean = false; + Cache : PLinkedListBase; + +function findCacheRecordByMAC(mac : puint8) : PARPCacheRecord; +var + i : uint32; + r : PARPCacheRecord; + +begin + findCacheRecordByMAC:= nil; + for i:=0 to LL_Size(Cache)-1 do begin + r:= PARPCacheRecord(LL_Get(Cache, i)); + if MACEqual(mac, @r^.MAC[0]) then begin + findCacheRecordByMAC:= r; + exit; + end; + end; +end; + +function findCacheRecordByIP(ip : puint8) : PARPCacheRecord; +var + i : uint32; + r : PARPCacheRecord; + +begin + findCacheRecordByIP:= nil; + for i:=0 to LL_Size(Cache)-1 do begin + r:= PARPCacheRecord(LL_Get(Cache, i)); + if IPEqual(ip, @r^.IP[0]) then begin + findCacheRecordByIP:= r; + exit; + end; + end; +end; + +procedure recv(p_data : void; p_len : uint16; p_context : PPacketContext); +var + Header : PARPHeader; + AHeader : TARPAbstractHeader; + CacheElement : PARPCacheRecord; + +begin + { Get our converted Header } + Header:= PARPHeader(p_data); + AHeader.Hardware_Type:= (Header^.Hardware_Type_Hi SHL 8) + Header^.Hardware_Type_Lo; + AHeader.Protocol_Type:= (Header^.Protocol_Type_Hi SHL 8) + Header^.Protocol_Type_Lo; + AHeader.Hardware_Address_Length:= Header^.Hardware_Address_Length; + AHeader.Protocol_Address_Length:= Header^.Protocol_Address_Length; + AHeader.Operation:= (Header^.Operation_Hi SHL 8) + Header^.Operation_Lo; + copyMAC(@Header^.Source_Hardware[0], @AHeader.Source_Hardware[0]); + copyIPv4(@Header^.Source_Protocol[0], @AHeader.Source_Protocol[0]); + copyMAC(@Header^.Destination_Hardware[0], @AHeader.Destination_Hardware[0]); + copyIPv4(@Header^.Destination_Protocol[0], @AHeader.Destination_Protocol[0]); + + case AHeader.Operation of + $1:begin { ARP Request } + //console.writestringln('ARP Request.'); + end; + $2:begin { ARP Reply } + //console.writestringln('ARP Reply.'); + end; + $3:begin { RARP Request } + + end; + $4:begin { RARP Reply } + + end; + $5:begin { DRARP Request } + + end; + $6:begin { DRARP Reply } + + end; + $7:begin { DRARP Error } + + end; + $8:begin { InARP Request } + + end; + $9:begin { InARP Reply } + + end; + end; +end; + +procedure register; +begin + if not Registered then begin + Cache:= LL_New(sizeof(TARPCacheRecord)); + eth2.registerType($0806, @recv); + Registered:= true; + end; +end; + +function IPv4ToMAC(ip : puint8) : puint8; +var + r : PARPCacheRecord; + +begin + register; + IPv4ToMAC:= nil; + r:= findCacheRecordByIP(ip); + if r <> nil then begin + IPv4ToMAC:= @r^.MAC[0]; + end; +end; + +function MACToIIPv4(mac : puint8) : puint8; +var + r : PARPCacheRecord; + +begin + register; + MACToIIPv4:= nil; + r:= findCacheRecordByMAC(mac); + if r <> nil then begin + MACToIIPv4:= @r^.IP[0]; + end; +end; + end. \ No newline at end of file diff --git a/src/driver/net/l3/ipv4.pas b/src/driver/net/l3/ipv4.pas index db26172b..7655002b 100644 --- a/src/driver/net/l3/ipv4.pas +++ b/src/driver/net/l3/ipv4.pas @@ -3,8 +3,8 @@ unit ipv4; interface uses - util, console, - nettypes, netutils, + util, console, terminal, + net, nettypes, netutils, eth2; procedure registerProtocol(Protocol_ID : uint8; recv_callback : TRecvCallback); @@ -14,9 +14,10 @@ implementation var Registered : Boolean = false; - Protocols : Array[0..255] of TRecvCallback; + Protocols : Array[0..255] of TRecvCallback; + Config : TIPv4Configuration; -procedure recv(p_data : void; p_len : uint16); +procedure recv(p_data : void; p_len : uint16; p_context : PPacketContext); var Header : PIPV4Header; AHeader : TIPV4AbstractHeader; @@ -25,7 +26,7 @@ var len : uint16; begin - console.outputln('net.ipv4', 'RECV.'); + //console.outputln('net.ipv4', 'RECV.'); Header:= PIPV4Header(p_data); AHeader.version:= Header^.version; AHeader.header_len:= Header^.header_len; @@ -45,16 +46,41 @@ begin end; AHeader.Options:= Header^.Options; - console.output('net.ipv4', 'Source: '); - writeIPv4Address(puint8(@AHeader.Src[0])); - console.output('net.ipv4', 'Dest: '); - writeIPv4Address(puint8(@AHeader.Dst[0])); + //console.output('net.ipv4', 'Source: '); + //writeIPv4Address(puint8(@AHeader.Src[0])); + //console.output('net.ipv4', 'Dest: '); + //writeIPv4Address(puint8(@AHeader.Dst[0])); buf:= puint8(p_data); buf:= buf + AHeader.header_len; len:= p_len - AHeader.header_len; - if Protocols[AHeader.Protocol] <> nil then Protocols[AHeader.Protocol](void(buf), len); + copyIPv4(@AHeader.Src[0], @p_context^.IP.Source[0]); + copyIPv4(@AHeader.Dst[0], @p_context^.IP.Destination[0]); + + if (IPEqual(@Config.Address[0], @AHeader.Dst[0])) OR (AHeader.Dst[3] = 255) then begin + if Protocols[AHeader.Protocol] <> nil then Protocols[AHeader.Protocol](void(buf), len, p_context); + end; +end; + +procedure terminal_command_ifconfig(params : PParamList); +begin + if paramCount(params) > 2 then begin + + end else begin + writestring(' MAC: '); + writeMACAddress(net.GetMAC); + writestring(' IPv4: '); + writeIPv4Address(@Config.Address[0]); + writestring(' Gateway: '); + writeIPv4Address(@Config.Gateway[0]); + writestring(' Netmask: '); + writeIPv4Address(@Config.Netmask[0]); + if Config.UP then + writestringln(' NetUP: true') + else + writestringln(' NetUP: false'); + end; end; procedure register; @@ -66,7 +92,14 @@ begin for i:=0 to 255 do begin Protocols[i]:= nil; end; + for i:=0 to 3 do begin + Config.Address[i]:= 0; + Config.Gateway[i]:= 0; + Config.Netmask[i]:= 0; + end; + Config.UP:= false; eth2.registerType($0800, @recv); + terminal.registerCommand('IFCONFIG', @terminal_command_ifconfig, 'Configure Network Settings.'); Registered:= true; end; end; diff --git a/src/drivermanagement.pas b/src/drivermanagement.pas index 41d63022..b80b7731 100644 --- a/src/drivermanagement.pas +++ b/src/drivermanagement.pas @@ -11,7 +11,7 @@ unit drivermanagement; interface uses - console, util, strings, lmemorymanager, terminal; + console, util, strings, lmemorymanager, terminal, tracer; const idANY = $FFFFFFFF; @@ -88,6 +88,7 @@ var i : uint32; begin + //push_trace('driver_management.terminal_command_drivers'); Drv:= Root; i:= 1; while Drv <> nil do begin @@ -119,6 +120,7 @@ begin end; Drv:= Drv^.Next; end; + //pop_trace; end; procedure terminal_command_driversex(Params : PParamList); @@ -128,6 +130,7 @@ var i : uint32; begin + //push_trace('driver_management.terminal_command_driversex'); Drv:= Root; i:= 1; while Drv <> nil do begin @@ -158,6 +161,7 @@ begin i:= i + 1; Drv:= Drv^.Next; end; + //pop_trace; end; procedure terminal_command_devices(Params : PParamList); @@ -167,6 +171,7 @@ var i : uint32; begin + //push_trace('driver_management.terminal_command_devices'); Dv:= Dev; i:= 1; while Dv <> nil do begin @@ -204,6 +209,7 @@ begin i:= i + 1; Dv:= Dv^.Next; end; + //pop_trace; end; { Main Functions } @@ -291,6 +297,7 @@ var RegList : PDriverRegistration; begin + //push_trace('driver_management.register_driver_ex'); if DeviceID = nil then exit; NewReg:= PDriverRegistration(kalloc(sizeof(TDriverRegistration))); NewReg^.Driver_Name:= stringCopy(Driver_Name); @@ -316,6 +323,7 @@ begin NewReg^.Loaded:= True; NewReg^.Driver_Load(nil); end; + //pop_trace; end; procedure register_device(Device_Name : PChar; DeviceID : PDeviceIdentifier; ptr : void); @@ -325,6 +333,7 @@ var dev_list : PDeviceRegistration; begin + //push_trace('driver_management.register_device'); drv:= Root; new_dev:= PDeviceRegistration(kalloc(sizeof(TDeviceRegistration))); new_dev^.Device_Name:= stringCopy(Device_Name); @@ -361,6 +370,7 @@ begin end; drv:= drv^.Next; end; + //pop_trace; end; end. \ No newline at end of file diff --git a/src/include/util.pas b/src/include/util.pas index 90d62412..3a592c69 100644 --- a/src/include/util.pas +++ b/src/include/util.pas @@ -14,7 +14,7 @@ unit util; interface uses - bios_data_area; + bios_data_area, tracer; procedure CLI(); procedure STI(); @@ -75,7 +75,7 @@ begin console.writestring(delim); end; end; - console.writestringln(' '); + console.writestringln(' '); end; function hi(b : uint8) : uint8; [public, alias: 'util_hi']; @@ -297,7 +297,8 @@ begin console.writestringln(fault); console.writestring(' Fault Info: '); console.writestringln(info); - console.writestringln(' '); + console.writestring(' Faulting Module: '); + console.writestringln(tracer.get_last_trace); console.writestringln(' '); halt_and_catch_fire(); end; diff --git a/src/kernel.pas b/src/kernel.pas index 356d7f10..1c0f683c 100644 --- a/src/kernel.pas +++ b/src/kernel.pas @@ -26,6 +26,7 @@ uses vmemorymanager, pmemorymanager, lmemorymanager, + tracer, drivermanagement, tss, scheduler, @@ -37,8 +38,8 @@ uses E1000, IDE, storagemanagement, - ipv4, - lists; + lists, + net; procedure kmain(mbinfo: Pmultiboot_info_t; mbmagic: uint32); stdcall; @@ -51,6 +52,8 @@ end; procedure terminal_command_meminfo(params : PParamList); begin + push_trace('kernel.terminal_command_meminfo'); + console.writestring('Lower Memory = '); console.writeint(multibootinfo^.mem_lower); console.writestringln('KB'); @@ -60,16 +63,22 @@ begin console.writestring('Total Memory = '); console.writeint(((multibootinfo^.mem_upper + 1000) div 1024) + 1); console.writestringln('MB'); + + pop_trace; end; procedure terminal_command_bsod(params : PParamList); begin + push_trace('kernel.terminal_command_bsod'); + if ParamCount(params) > 1 then begin bsod(getparam(0, params), getparam(1, params)); end else begin console.writestringln('Invalid number of params.'); console.writestringln('Usage: bsod <error> <info>'); - end; + end; + + pop_trace; end; procedure kmain(mbinfo: Pmultiboot_info_t; mbmagic: uint32); stdcall; [public, alias: 'kmain']; @@ -134,6 +143,7 @@ begin scheduler.init(); { Management Interfaces } + tracer.init(); drivermanagement.init(); storagemanagement.init(); @@ -157,7 +167,7 @@ begin console.outputln('KERNEL', 'BUS DRIVERS: INIT END.'); { Network Stack } - ipv4.register(); + net.init; { End of Boot } console.writestringln(''); diff --git a/src/terminal.pas b/src/terminal.pas index 71ef3579..e0af1d96 100644 --- a/src/terminal.pas +++ b/src/terminal.pas @@ -16,7 +16,8 @@ uses keyboard, util, lmemorymanager, - strings; + strings, + tracer; type PParamList = ^TParamList; diff --git a/src/vmemorymanager.pas b/src/vmemorymanager.pas index ace79c8f..a6cf226e 100644 --- a/src/vmemorymanager.pas +++ b/src/vmemorymanager.pas @@ -14,7 +14,8 @@ interface uses util, pmemorymanager, - console; + console, + tracer; type PPageDirEntry = ^TPageDirEntry; @@ -84,6 +85,7 @@ begin end; Directory:= Directory + KERNEL_VIRTUAL_BASE; load_current_page_directory:= PPageDirectory(Directory); + pop_trace; end; procedure init;