From f36c1b1388aba414b87195041fa27be8ab6a0ce9 Mon Sep 17 00:00:00 2001 From: RichardG867 Date: Fri, 15 Oct 2021 14:44:58 -0300 Subject: [PATCH] pcireg: Add support for PCI configuration mechanism 2 --- clib/clib.c | 204 ++++++++++++++++++++++++++++++++++++++-------- clib/clib.h | 5 ++ pcireg/PCIREG.EFI | Bin 46128 -> 47237 bytes pcireg/PCIREG.EXE | Bin 50708 -> 51336 bytes pcireg/pcireg.c | 16 ++-- 5 files changed, 182 insertions(+), 43 deletions(-) diff --git a/clib/clib.c b/clib/clib.c index 8ae20bc..15c879f 100644 --- a/clib/clib.c +++ b/clib/clib.c @@ -30,6 +30,8 @@ #include "clib.h" +uint8_t pci_mechanism = 0, pci_device_count = 0; + #ifdef __WATCOMC__ static union REGPACK rp; /* things break if this is not a global variable... */ #endif @@ -323,16 +325,62 @@ pci_cf8(uint8_t bus, uint8_t dev, uint8_t func, uint8_t reg) } +int +pci_init() +{ + multi_t cf8; + cf8.u32 = 0x80000000; + + /* Determine the supported PCI configuration mechanism. */ + cli(); + outb(0xcf8, 0x00); + outb(0xcfa, 0x00); + if ((inb(0xcf8) == 0x00) && (inb(0xcfa) == 0x00)) { + pci_mechanism = 2; + pci_device_count = 32; + } else { + outl(0xcf8, cf8.u32); + cf8.u32 = inl(0xcf8); + if (cf8.u32 == 0x80000000) { + pci_mechanism = 1; + pci_device_count = 16; + } + } + sti(); + if (pci_mechanism == 0) + printf("Failed to probe PCI configuration mechanism (%04X%04X). Is this a PCI system?\n", cf8.u16[1], cf8.u16[0]); + + return pci_mechanism; +} + + uint8_t pci_readb(uint8_t bus, uint8_t dev, uint8_t func, uint8_t reg) { uint8_t ret; - uint16_t data_port = 0xcfc | (reg & 0x03); - uint32_t cf8 = pci_cf8(bus, dev, func, reg); - cli(); - outl(0xcf8, cf8); - ret = inb(data_port); - sti(); + uint16_t data_port; + uint32_t cf8; + + switch (pci_mechanism) { + case 1: + data_port = 0xcfc | (reg & 0x03); + cf8 = pci_cf8(bus, dev, func, reg); + cli(); + outl(0xcf8, cf8); + ret = inb(data_port); + sti(); + break; + + case 2: + cf8 = pci_readl(bus, dev, func, reg); + ret = cf8 >> ((reg & 0x03) << 3); + break; + + default: + ret = 0xff; + break; + } + return ret; } @@ -340,12 +388,29 @@ pci_readb(uint8_t bus, uint8_t dev, uint8_t func, uint8_t reg) uint16_t pci_readw(uint8_t bus, uint8_t dev, uint8_t func, uint8_t reg) { - uint16_t ret, data_port = 0xcfc | (reg & 0x02); - uint32_t cf8 = pci_cf8(bus, dev, func, reg); - cli(); - outl(0xcf8, cf8); - ret = inw(data_port); - sti(); + uint16_t ret, data_port; + uint32_t cf8; + + switch (pci_mechanism) { + case 1: + data_port = 0xcfc | (reg & 0x02); + cf8 = pci_cf8(bus, dev, func, reg); + cli(); + outl(0xcf8, cf8); + ret = inw(data_port); + sti(); + break; + + case 2: + cf8 = pci_readl(bus, dev, func, reg); + ret = cf8 >> ((reg & 0x02) << 3); + break; + + default: + ret = 0xffff; + break; + } + return ret; } @@ -353,11 +418,33 @@ pci_readw(uint8_t bus, uint8_t dev, uint8_t func, uint8_t reg) uint32_t pci_readl(uint8_t bus, uint8_t dev, uint8_t func, uint8_t reg) { - uint32_t ret, cf8 = pci_cf8(bus, dev, func, reg); - cli(); - outl(0xcf8, cf8); - ret = inl(0xcfc); - sti(); + uint16_t data_port; + uint32_t ret, cf8; + + switch (pci_mechanism) { + case 1: + cf8 = pci_cf8(bus, dev, func, reg); + cli(); + outl(0xcf8, cf8); + ret = inl(0xcfc); + sti(); + break; + + case 2: + func = 0x80 | (func << 1); + data_port = 0xc000 | (dev << 8) | (reg & 0xfc); + cli(); + outb(0xcf8, func); + outb(0xcfa, bus); + ret = inl(data_port); + sti(); + break; + + default: + ret = 0xffffffff; + break; + } + return ret; } @@ -365,35 +452,84 @@ pci_readl(uint8_t bus, uint8_t dev, uint8_t func, uint8_t reg) void pci_writeb(uint8_t bus, uint8_t dev, uint8_t func, uint8_t reg, uint8_t val) { - uint16_t data_port = 0xcfc | (reg & 0x03); - uint32_t cf8 = pci_cf8(bus, dev, func, reg); - cli(); - outl(0xcf8, cf8); - outb(data_port, val); - sti(); + uint8_t shift; + uint16_t data_port; + uint32_t cf8; + + switch (pci_mechanism) { + case 1: + data_port = 0xcfc | (reg & 0x03); + cf8 = pci_cf8(bus, dev, func, reg); + cli(); + outl(0xcf8, cf8); + outb(data_port, val); + sti(); + break; + + case 2: + cf8 = pci_readl(bus, dev, func, reg); + shift = (reg & 0x03) << 3; + cf8 &= ~(0x000000ff << shift); + cf8 |= val << shift; + pci_writel(bus, dev, func, reg, cf8); + break; + } } void pci_writew(uint8_t bus, uint8_t dev, uint8_t func, uint8_t reg, uint16_t val) { - uint16_t data_port = 0xcfc | (reg & 0x02); - uint32_t cf8 = pci_cf8(bus, dev, func, reg); - cli(); - outl(0xcf8, cf8); - outw(data_port, val); - sti(); + uint8_t shift; + uint16_t data_port; + uint32_t cf8; + + switch (pci_mechanism) { + case 1: + data_port = 0xcfc | (reg & 0x02); + cf8 = pci_cf8(bus, dev, func, reg); + cli(); + outl(0xcf8, cf8); + outw(data_port, val); + sti(); + break; + + case 2: + cf8 = pci_readl(bus, dev, func, reg); + shift = (reg & 0x02) << 3; + cf8 &= ~(0x0000ffff << shift); + cf8 |= val << shift; + pci_writel(bus, dev, func, reg, cf8); + break; + } } void pci_writel(uint8_t bus, uint8_t dev, uint8_t func, uint8_t reg, uint32_t val) { - uint32_t cf8 = pci_cf8(bus, dev, func, reg); - cli(); - outl(0xcf8, cf8); - outl(0xcfc, val); - sti(); + uint16_t data_port; + uint32_t cf8; + + switch (pci_mechanism) { + case 1: + cf8 = pci_cf8(bus, dev, func, reg); + cli(); + outl(0xcf8, cf8); + outl(0xcfc, val); + sti(); + break; + + case 2: + func = 0x80 | (func << 1); + data_port = 0xc000 | (dev << 8) | (reg & 0xfc); + cli(); + outb(0xcf8, func); + outb(0xcfa, bus); + outl(data_port, val); + sti(); + break; + } } diff --git a/clib/clib.h b/clib/clib.h index 448077c..ee199c8 100644 --- a/clib/clib.h +++ b/clib/clib.h @@ -41,6 +41,10 @@ typedef union { #pragma pack(pop) +/* Global variables. */ +extern uint8_t pci_mechanism, pci_device_count; + + /* String functions. */ extern int parse_hex_u8(char *val, uint8_t *dest); extern int parse_hex_u16(char *val, uint16_t *dest); @@ -113,6 +117,7 @@ extern void outl(uint16_t port, uint32_t data); /* PCI I/O functions. */ extern uint32_t pci_cf8(uint8_t bus, uint8_t dev, uint8_t func, uint8_t reg); +extern int pci_init(); extern uint8_t pci_readb(uint8_t bus, uint8_t dev, uint8_t func, uint8_t reg); extern uint16_t pci_readw(uint8_t bus, uint8_t dev, uint8_t func, uint8_t reg); extern uint32_t pci_readl(uint8_t bus, uint8_t dev, uint8_t func, uint8_t reg); diff --git a/pcireg/PCIREG.EFI b/pcireg/PCIREG.EFI index 290ad9fbe08d707f4232d26dc7bba366f3f85b97..444ed814636f196497802b756b9f4df47b66d4ca 100644 GIT binary patch delta 17194 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 delta 16045 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 B(w_hT diff --git a/pcireg/PCIREG.EXE b/pcireg/PCIREG.EXE index 6be08c588e6c5b1b8354e32aa9b45573d5e4d445..cee77586b0e0deac57ca6456acc23ff18cfc66f5 100644 GIT binary patch delta 12920 zcma)j2|yFa`uOf9ggXgI2*?o*5pNniP~@nhT|ogOC|VD^QD0kIAyM0>BsSV+vp}n3 zeO7&~7^~Lyy&l*$VykFuuwE5xeOOziV(rFwP^5@}$^V-T;A^e#|0~^{Z)U#vuKDJh zZ)W3`GJ$E6AR}j%iC9AT5?;hH!tFj0K==@ZY#2dA6Q2Ka0KNpzk>LbUIf5V_>?R0v zF+to9n&iKB2SLQ|+>{YJeO_$-)I4MQ1PP%_tG+^5e5SW#IWKC5+KL?P)@rzL!6m*ZK%-+)z_VB_4Tpb>3GJDG0X)nbsL~@g*-oRrkPvb z-?tbPRdYRpU!zksoGa`(m>T_UhL97-g9!%froFs$|? ztQX~+1k)=Pr6gUHul@zUbzUI1lS-^9ob~K%o5m_6xREh4^SFILNb6VmqnuSU$~sF^MsE@g9-&Rm|Er{r@^E(tZEOC-V3D90qOHR>DPKm`w-S`a&8*Og(+vU2z%AFy=<{ddV)#Z5L3sckT%TLYpX!H`L)b9uS2Y9-wUbzVwhISP2N5oR=xRecPMKIIur=w;+hSUEZ8j={==?&7+Yaq#>u@45+P zNAU$uyDnlE-wu5FcHrv-zPIJv{jP3hpY;JB7({X%Ds)<)))(|Mp77&LeJnTRhEksd z?b4}v`MiT_tS&;s&A{DOn$&PP08wVzCv~-UcIxw5Vd`St;v)ly#LM~CNzk1D-9n>H zXzY~ebB&!oI<8H$L?Q$MmPrPS=1V~M)#BZv}4VHcXK)v=RAek z^lrsZYezZ$7R^5A`{5&NKg$x`+7wl%yN-b(w!j zM~{`}6miZ$tO~^R_A`5@`f0fy@jL{?-Pak5IY!#OqcKa}W0t|JkwP?tO6-d= zL~+!ceb6$|z`l*K#uFlERG!BA0qJZuH3NUsd5x)EV`|V?KLT_|O>9L`lgEJKaS%eO+{y zp|s1VWTCmROYJrnbg0|Rbi4XGY)(T%82T1d(9B%$wP~L*cDQw3X>PYRg{Ae4u=$K) zj@A8abWn+xnfv6`2>-#{!TdxDZ7wx zuWEL$y2W$M=UL_fPZNF3RNCZTbfjWw<9zsFM#xf0DXcS8~bNzV)t&;CA!RPvyowa8A7gz%MQ?2QIuaxgy1-*WZzL}$7k=>9Fv>BbD z#!lb0{$~0*Ua-?C=U`)}*IGZ1VE1C2a$~1(ow)Lbd}uU5Hdim8I7w_bauHA18iP%w z!fXq;QBYt}Eiqo9M2hH!yyUOen%)!axIt0>Yq1$i8wqW;vGfk1rOOLi%IP+4h#VAN z#1=NzH5qM6b8d_JHq2m3F1Jp=c4Bul z(Kqb$uKR@RZZ2$9yV-)q z49L2EgPoS4Ig-BP^aqb7oU&S)BOsi1;fNFYu#I*ZboX6!hl6^^(sv*^m{$n$wBb+=(FAJgqB1!QGLdU}AlW5~5$Ab#d?{l@H5!2EDfC~Rg6 zT3EW3TNUJ?XQprA<+lTnu7m-SxxlGz%d>t6^>ermD(JuL)#^)V!dlh!>DKB4++Z%a ziN|~iV|MT~XeYQb*E{O9?om5>M(Oxbg}2r2e16mteiWu+=7+}gnq)Hc^v4|M_lzCm z8SCnexn1h(hf)b{pA=1!^rJfapp}w=)cHPWr=&0SK_7HX5;g{BU4Pi~`LqkNjIDi~ zDhEgO?7Ja`4nOVn|IRc}ur!YPT!K=hkppCXz#eV%Em9j~XzI$ZeoC0fxk91Mv79h8 zHRtD5r$EcCP-Kvf(0>jcRP`&+@F9j^m=7d$>!7}q?|BuV%@~3;>$u^vzA1!Yfa~gd z=Dg!Xi^fV3oGoZ(##qO!0F5<{4)Uc>e5*6Z7wV%PHVay;+mYWyuXkUc0m-~;JlDZy_tX%VO;Xvou(0@DbQ&d-|RrQyb6 zI)=3*xhmq2ALIGq{iBGZw$+v04 z(P7!s)Jsa#C5sTpMLohE*9XPRpIR2I#L^EFX*ho#(gQ?dsFrS<3~Qt<1$L-)6CY18 z0`c~7g5X+%opH|o9h!SS1hp}^eXU23dKUI zRe{zh2I{|20HT|2W9hauA+e5z4d?XZBJkPj5Q00baQ@39z>q%((3{44@?^$3+grn} z0Me9sf*7Vmil?Ly+Gb&P4mV+a5h^(fBZ>|V2^tQKJ}^Js){P25nZX082Xa&rJVF2G zvrA9nd|2*Dod0LuECJgR1Y6o>HnzZ7Ut`7RiUo3y%Er<*>Ds0zC=1KmGWtIY*RJgZ=o~0JKCoFz`niWJBuPEZj*H_@W)kh=EnmBI9vk6N@Lf-~DIu zIiD1tZ@)Jcy4XUzV-UfpQ5jAeP?vH{&InA!OykU+&20w#qO{t@<|r{HYh=LN~%k&|1qQ`~=Wf zz5P|){lWekZXe&D1<*hF{>=cPUQC9E8lg?kL+Stxr{kgZ06m8xE<$JxfE0sn;c|tr zM(?4CVIvevY$4t{{gfJmv!wF#+ye17wK1v1AmZ7s{}OIo@42D>ehig`WF(wvElp5 zy~4c2dTXJCt5<>m6ybPF$g`>tqD86%y;V$bvxIOznt1sTVdzlTRJRA*fp_6P~U+CJs+4)ADGpKvpj-MICdVIpw$l z*R@K5Q-dU)D-6Fs&%`(^&KT3GHamSEW}@xUOhDW)t$3iv+s>Sae>M$R25vZ+mOGu! zMW);iJKaf`3ft}U0|KsT@ub3{<0y?E8L6?y9L$Mi5jDV^*+pl>aIuYv(q`k;}+kkYYb;<7`y2tc8y1l z(T*L1g(-T#wDhj(PLCOdaIpn(L`=+tK*GHzn`J9gW=d=+CradlPuy=v5w%NKi^|TY zh%zNw(k7l|{YNZ%IXamPLsijVkP%hS#VASN0L8}3I@uAi0-0l<5(Ow2Re+-EXzWai z@=>5Z{YFy(3Y6b(($HMVsvI^cTe7iDn*vWBo9)LyHTglYr0fUg9@EaPR^ZdIZf=S= z7oF-Ck&`Q7lO{==hZAdXX~~s1KW4=6K4&O(5n2h1cu5I6tkO=q2w?iKhkv1CphRfQRTG1A1*b8dC|;3T)<97zwXB8WRjI`Q#cNVa z@CGQ&@Ki{-F>Wp`c(x4~qvk>D$+K0(gKfg>N&Xeb4sQ)H+9Ys9jb~Kt()cn}i&XHV zr=_BfZGzSgDSH8;EdLj8NNsOgX4N8xy~~RT^)K{~g^_FVP1Fm5D-v*dN)icN0O;@unaKMjqN4a&((~@VCQi z?j10ulR<Puy4z9z5i+ls5z&kRH75+kKq!wylz!Les!hSyX} zfCTDHtOx@N4Kr=0PZRl5;TXBGUMGM%u0sUHy^k!zwv&rc`tS^LGFm@;IC%?wHhf;V zJsmvUn>op}ICec`8XTn$Yeiu}Byrjrik=!VK57H*_k~!OBFdAMXxiv5fp#QR@dfcv zZZFz2;^qF+(w$#9bGR?kAu@QUQH1V8(u<8`C%S6A2m*!+tOk-*ZbpeC75!fadXO`{ z;_e~2$XMD==$7GV`hHqmDsvn|r_u8xY4QrH8aY&=Ov5B#0Xcqjtxu0YcSp|B-%bT8 zt%fPy(QOmGy>&MMqF^Bu90^dc5gRXSl_?V`t&q9m{EhWygq30l0`Pc4CX>$s1OWoj zS#Jw8HgIp=g*66WZD+7a(AB0>9M(wIcP^8bOmCYg5@??`+QiPgtdN~U0X{oJbVv+a z?NxQn43)RJvCeVt1Nk@i4$Na_h?qH4CB&Q6LM91fj58^Rj7Q0%%E$<0AJvZ>Qgv%o zJQ_6BHl|N~V%x@gJ*9)|F^GD1(eUJxWIgIi9vUD>0W<5izzJ?`uqN zmb!F4{0Y)g?8aZax8YC9&1|7dplX(;sG5;6Z6HwoS6T-7G-^)Ep+=5HPp1cyKcVUA zG`SD$Ob?@GjYZb<2=edf`}Ds05=r|Jjl>`>kqFrdBA6Z@u*|$dh(-9Cb>0miKZvQt zw$M?G7qeDa`;3qvm~@z(wL<$degqUoySVll5kWY=!ea*CU}}NR8N6^u1eX2asOD|t z$qlHw#!m#y@e7SCgz|yst4R%7^K^9ZfnUb?+L=!0&-;CJ%_)Vh;(O~mx1xVNJ%Buj zE{As!_MfEJ_s!)h75ZvilGk<~Y9BWz_R=%VDn-RHw%L5e&@|fbhq@+qgEJH+xRd27kW^+RDd^%k#u+gY7Xi z^ixLK$n5dyOaYa^{!=(U-M3Jfz<%{%2Gl;zNMBz>xoe?~avmL<&K6MXueq&kLxSHI z+2hfa@vo?TX(=5-N7Do8p>!fWnogxN>1p&r`X%~h`c*h-ZKW;r$MjM99Nj=)qwmn@ z!T7s+E>o7pWj+nh^YBz=-OcdF3Dcj5UZ(?9D0lp)!ESz++R!IKNmOnvre6F!?z znq8XxBb4}gyuKcKOS|zN^EUs$(2wbRp3f!}PkB_= zmu7RBt{mLJWvdafKAOqtg+-+|{KJoWIP zHFUZD-+!KT@PV$3^q4|nJPZF%qsnKCxv*fzx1Hc2|0m?#GRN-!AF?8z&8FhnIYP8y zqEz|UWUCHLe3^Xq!;EWp=Xpmt>K-`GJphr?8Jg%v2+|0F&aYf4eg>R)nKLAfpm24s zr|MI#T*5<+9S@!;HCmgM_yo?#mX%67#q!e#n|M{ALQ?4 z$LEaADa=`$vpvU}a}lN<79=+);>iNZCZ8JYF+I$ID+8}ehxGoF@x8N$d3R+b^xe>v zfyQQ!n}l*Lx&Pu_>Wf?_U&7oOR{I(p3)(QW)K~AA(UwrTI|GbZm{7R~m-7=U_u_J4 zLgjv3E>5UCkbzET_Z>z|kxmJlBFLFD)im|W)Cp5&Pr(X2AC~SeS_aTxL=F_46EgQP z+c>Iz2OS;@E{>hQKQdP7lq*v!rdX#OpCZZ&$&+frG*95LC1>=LChb~Is!XjJs~NAM zHB&Sz__b4-jnuh)~`#Gb^Nn6f!!$_kBV}KQDC_3xk&>&Mt4kXEzb~_=Zni{ ziMfowij1f|cUH!q9pX{A1d-VWZnuOt&}=Z!6V?mbGG%PohZzu@xjRy0qxTPqPCV|~ZjYr7~`%_RXTxg-jFGb#qrcvx-GEdWI_a8+G?xeTy3*px${CcB^t!2OC;yXdNwr6|| z+CUA^g4U}Xa?Z?Tub7(*O%!E|gWF$jKdJ3e@Qot${gSa%&QcUolt|qxLX(OHQ*Rel ztu9I>sn+@Ev!%}|7cXZoad8ficg1oLs`3s%YnG#=WeG8<%l*I6%IX{?zQFz>Fq?hH zX!mp8EF^V4z`u2V)y8FSQsg$IeC{Rc&R?UEhYV9RH0JAN9q1M)%)^asF@z8OvvB$QjF zgw|)r<)$5%61K^V>06-c4Od-mi|tvC7~eO=X3GD|B1J6qQniMWL{m z6_qlDMX9iqDe%2lWtal;E7In;Tm?Vwv%}|o{pwNcI|-p~)W&+PaN{@HflM=Z9<3}^ zkyYr;;;|vYcKB|dKNWw{x(q)O5!r!?Azg!hEmlY8$%=)EHIPE9*2?M{Nl2x^g7}0` zjPq*MS~RL8JGNCSC?0O;)aZntik;qu&e-CJPvxcy@FDc|QrR~6jpQ5Xy^;j-HS}Fc zqJFJxnoJ8n{#z@9Z*3>JdNCZm>vbudvWBtMdV3L&T>^hrnI~hECIvU{6ZnB5{!zyd ztT<10WSXq*=NV-U6*Z8KzX$2~o_Wq=Y&zgxQr8Rygt}krekT9(r-WSzyi|EI=bp;7 zvdFY)GO!M3`J~dMs1;#pEO|0eAFfC%^H8NWL;=U2SmsjQ&tR@7I5n_hHfb$7qwTY7 zt&BY9{MD1vvyk~G*28r|7#tTiP7&#Z>gzT~kvNYzUbz)i-3oUgK$$t7BI-anx{%TMsOw*Lez2%TO4|5C zEk4rrxxDf6TK~#sDWhzbVncEJjxaXhfKBJTBM>!L?bKCxlkcFx>+}J8WrX&Q$%ZFl zQ`P6|rU()PgKRd&=2mW(Rl^rHxC5SW2QD0s;|8~KrwpzRjUN;Fc{n>?h_my?s-*R1 zQo2*-y8~OTEx1;MVRZi0jNC=L;k*LssNojnH<+a>6~~!|o_XP1yW#SPzwH4j;XC=r z-Ok@Q$8Pw-aFb~P1L;GZSMu}Vx_+G$j)LGx^Nr!;TC~qdmMJTuDh5ajb{#&}1~nmu!_Ey0+6ZaZ>qi;B#ZCse4;ZBJm8XSSb>nHx20 zrfs_MmiVh}^7Rk5p)qeqDxuSzbY}Z$_^}immsO%2mw)cGPC_rdy=Ls@;Ihlrn?uSj zvRx@xbUrB^tA#1;C4l!z#uEWsdxh}^eO;@jo(t$ zZ+kLHCZTyd!o0`Iox)3^Ok~)x$NNo%Wv|SVjRx;jh3%D*M1?(`^#<=!nXcg*N${__ z^|f!JMLS1F%7S5m!%6&5Byn_QH(V>igK9XA6OR=D@xyuxQ^N1eu|svM-apD+N9>S~+eS68xaoxo5_u}R})OhbhzS!T3n z*EPm7LSy=9lw291S1b4c0VCn2Q8iv>iBnkO6_x~rr9iRXwt>K7;?3UM7#sY?m4qvv zJ_Ms01Y5y)8BfkODX|``l=zKhfFkj-m5|hmhA5(m>1U;L`{@bGFa@WAZ+`e|82kD* zDf{l1Qbv^o(n0;*MybVX1YDPlMwcq1^`jMr^!H&$f}hrpPzcxg)QZ#!AHpf%?zj+w7YVcf>nBiv%qbIa+Shp)9@OwQKokF^+}d! zg}R1Ou2onJ3d<{s$^iYcG3GmBvCAz7{I7z0+@^Hc2D=>&4mVA{^^0L z&RYD*uvZmCnQDasjE`^qAeN?j6_4i91cw)+mOTS~7Apv?mtFKK>igbovKZ;#3sn^> z+}Z%H9AB#Nzu_MQci2Za1hPq!WvqA{`s}^_2~1B7=6aoKQ$>USH~02xz50A(yyT98 zy|>=#OB^llK|+3e`+C7(?|^!k(ucsmzgA6#DIX^@+D65* zQ3BQED!+ZvBw1WFc>joyg}N2bt$1M13i_tF? zzqoKov}Sx(^r9D66fIw>D_)>o{^E-07nUqqwqV8bk{6-}^iz+RiJyT9(OD(Y+GWd2 zq8IQZN?tC}E_vbUs*jHLrK-*!vryDNKU7zffC6kj=z|j~G7gk!PiD?EgB12Yb$u$Qt|pj?TPV&pCSS#Z}tT3*ZW@SIXgQuJ2N}G zJ7;z`S~dzcR|(Q*6)K2g!k_RV4iFyCTY-chLF^t&5Ng8v-$j65&=5pHJV7LmBZxP4 z5X8vm38Eu7W+~ z>*T>LxXq(ctazLR#4#tUX*U--*h;(CHyVVR3oec3LK^pE4AX=;tOagO7qD?%(O91^ z)5(!TUGD+6<^pqzbXbNloy?WToZ$m>_5gwli<%GS7cfnn+*8?ThzC{sLW%ez+!dp$ zUtvQ4VLvG6-pBGvMac;V<>eRg+u#FsyQuiaqQV6W9Xh*^;Et*0=W*|YAbmjXVL7Y( zTFyy4g+K#MAFJ+b+U*8ShgnsXoE6u|1*$`GxwuJ=JGtsNI*oR_oO|THQai8IE;nqf z-4B8r<=kg(*Q>nX1z2#wJf@lXfzx5pI#%@>h~5OE8$k5uylB+}(SC$|y`1|=jk^<= ztX2Ezt6TeLr|?H1k_mNT&~-B(;tTBsy{z8S0mB$l+w5vEJ}r5)bV5LkN(#GRINH|}AN;Q?rH^8(pOuzoIc(R@W{q5CWa zZf^BG=)-JQwH0){$?M2_phHC1zmao6qj@FL9p8YGK2UOuSJv*W8x-C;DE$_c9!K#4 zxiKVizE_LLLc1*meU_pgPJ|ULVpZEg(c8SDQxW$&<4f58E$3d3!cGd^@$df5e9!A^ z-|+*KJ*6kSctgYv9uInXJm~!q^!_C0?)3F{c7Y$vfsrJ)DFPi8XpGken-2wWdj{EB z<)#Y1IQ>((dHMVV)!E&Ij=PS@cAC_27XhNIv|mcOeqqWoy)dQNP`rOQ5#OF~&jNB2 zkcDQ4(A+CA=9qi^3|yBeS0V%h=14|~vL#@Axws)qVpkJf!(i9f&S500&5{_KeAHH- zlmJ5jrUekL4wu3t&Xq_#(8eRmlDKMJi=Cen`$rQR&@>k`J?7O!VNDkwqG>?Crd-g3 z)!f(O*RSQ$eH})xlK1wH=jA^N^4-zUlMF0<8kTzdln&x!&C&0ERv29Is55bR>)JpegF6itp z0%ZoK@YpQC#z<293{$)sgIFaDfihcS?jg(Xo1PTy8jLkYHu>rS>PD>}~w;b15x^xQ%w*=2T(fjR*RbK z)NvD4;C+{%Nl19gu6fEXTZ?)$o_uRTx27x4N_Sc43zmwDp0W#eF{R^10<$r2uOGqE z7q|&ZhQ7qKu=HhaV>jb~Pf{Fn5ae!DH;ksBWYkO>r;KFjYh1OLuH@-2V7xoRmD3Q1 z*%qrUM>QUcQ*)I$$sFb^cbS7ADnw^bm{3T$d^lusyOOcu4uSN@k(Fg)_Vtpan!c|xCUuDC+z z>FR=;)%0y{zZ^RJBwKX8rNit{T61n{u9}@xa!%(O0h7~duIME6k(RGDU6wY@1utk7Po}A7Zt~0LTYwvmp{lEu2JLL8iz+%EI)`FXwE-QT-nlkV$a1;7admN$T zhnXK`7-Y=_NJj?Tg$QGzxhC34Sm|yHeY%N00}xDsvrY6l!b4x#D<;??BgYn;X6dus zE;)QocNz8Cy@LRKAG=9zEplr-Y{B_-NQZ84%kD9BCrMv%Md0;s80@CIO%>fyR?|(pMlWSX2ZbO2_~|Q}D@><$#?K za-R=kn)VUG_*QO)in|jGUrqZ9;J_*2;K2CSWF>^XAp1tZj14!>Iz*+ru38S`-Z75& zR!t*k?SsiNF3idNqO;2g?lCNyUxqs7$M~-JR#%K?qWukMej^MP8*O&`8UpvdL*;Yl z!ccr*0@W)=PX`VSS_f3W_#-Uc$<@fvw!k6AJiv$=Aoh(B=G$WhU=bDo%jdJ({3;QH zMS!80<6Pz-SAcyYu&6Ks7P5T`RDv--UZHgl8n_2}8_4fBxQY?{pjiug@LcKBT!4}0 z76zl#py^ayFnTpewcuIc!kW+By03Xbzo6xz{hFs^1lGJ1G$&(zw%{^&or`{;d}x20 zr2B0YgOEEY&e$tu4lpMe7@>m8_LrdfiBOQ$a9Ioy;nREeO28c8F#!^=VduS%{ZF{e z9fFn)&u1eg_6V2tKo|V3WgTOXmT7#La1ulqf_J2VAIa~+l z866LLwGgWT)bkZL_-|7%kPk{cyZ?h8=A&r^#vzT#U z7q<8x(2shs)}rA%v3IC2m-|==&g-JDkosU#M_+!!SYaOb7REWBCQKcj`FRb=fMJ#B zRq6OSbAdoLyab4u7=mVgkQ}aodNNO02T(kQJoGi^CAa-Gp^l5jbxkXC+CP;v(C@Qxy-}e8enTh z$AZ;?JEi-i1pgI0H3;1e9zA(qU@9Rp1lZGkble#Qh%v1u$+C#O0g!FL!jEs{-Uv(; zVvY*n_yTk6BgpvH>Q`>Mxxa^?V%cnoHWKfF36jUj2cd(q$)hE}DKuB~3Cnz%={_M* zz2&A`P|(E|^;Oe1IY-2=Le47D82MP^9y#vRIFXLq%|k|jc3`NP?wSd!sw)}3tZSzI zIcEvN$@d|GLvmM)YnXRR9r|7J`Ma4V@z7nak3JT%Mcu6L367zAs>>;sM(y$;luW)! zF^FmoK;eqT6p|sMVuZ0o1|5MmEZvnVB-YUIsXY2;BlrY(G{F_hT>tc%F#2~UJlGj{ zQ*Xw;&{xL=foRH_DTc9<;;||M+}&VM=kyTv6;QbnY#x4ya^57YnIte+g*xEY*(-q5 z3VePrmi;5KUx8*196@ajMlTJ_H2!gibU!^W4ECny|1~?8fWrxbt?06vZ^DU!&W?94 z1U3u2V6NzruI_k9|6yTwOCk3d`_Mgyxk>6=bI+SII%8crJm!9LxGyB zES!A2>c_x7`4)sO%ZYqz(LH$j^7C}MJo`E5c^)vzcoFa+jU~9v{^+=Jpz0kN-pB@| zQbgGR7^pIVa}eo#m8dT0gjG?G1R+V(2??4UqMQ)!XD{^AaeE}-eKw~XrWRY!g9G+( zUkipUg{XH z)ZY+XB1k~21vhX$ThIwRoJNo?0yaPAj(+pbqd}pGN&Cg-LsC!KO+V~_8yncaXyl+YPr=g3&7ldbo$A|ky+zr1G?h3ycel#35 z=>%u>y`LbMuPAkS++rVd1xHpyGAAH7aWztKVyTo}M8Omu14&IFnKD*?*S^>vcCkUA zoez$;F~k;Kg3RI>AY3#;U1%=@u>Ao~3xl^g6&x(Z5vw;q*-= z=eGH-#}Euzp&`)z9ke|X2yI;lP?{t&0vAyxBl)!cvX#CHIWr_A&;s%RXk?`?Tj*|=*!3u12Q1Xx-Zo%k%G3I| zlw#O5Pj*|UQ8)(W^l7g4C&q9L$tUVvmZf(fJaRw&?0mAbpJwzDp^pnXojIK;4ZKGYmI`UDffP%yFIB$v3r9u%bG8UpaT{IKs=6U+6(Q%b?a zZGFEnZVEmm?YC|@Z{7EIoz2&oTP+;|n6%}>-|+Ucf~^C4oVM%yk>h&;#6}FE)(X%^ z5i0o;f?pSmNC&5orGe;N#4FTc3OyYeYurKQ@q1on6`b5&7HhdsGvq;#>=!!h5d^pP z_hhbT-D{9zyUytBB7!TX=I0kc3h_ge=$u^8BXL-Zf5j^{lAmDM}Gg=vy7vE~nl5koD7(fwDlHyhMkZ7VR zZX_fH1oss=zks)y!l#9YV+63BXj=PiAB13y2Yb%V)q2o}Q3EGju^jBR9EZ-}jSIAV z`425&R{XK$Jlt|n4D6Tp@QTNi^S!#f!m-BX9vtbzJZOx1u#q{=eC-_U;l;a%|I@H$ zH{3 zEG=YnL=AnvMh9%uK_Q%vz|e?^`7k!zyRt$@m2$kqk$h;Sd{oGxJ8j9L3(|5?)$wG} zc!{2Lhzspw)#%*dL{fyphkQo*)t?xmB>lVPmF))E{vJ8H88cSYEoW5S^7>&z=Tp>e zIa)hx64fn7`-Wv1lO$!c*n~-v$}W8}Jb7$(00Y&;yQPwl#Hp=i=vN%an zKAP1FT|f38<=~@!NZCY$>t9Sll7vl2khu26H{#NkByoMjKnvHm{7zm1f>tRZBT_ce zZo;)5s)->`MeBzTq`Ks2+wdfRY=mJTv__|g&m1;Y!6bCS0sJJ%O2679NpfaDsko?c zp@UVBHxrMSw!5~onE|#Wq#F@VK7y8wh!DawPN=UMF`6VR>-Ua4MUr#SmeFy>9|qQ~ zlhzrfbrn*p>WUQZNhr5teY-xoS!9wnJkumHN{J>>g;ZdlH>Fvmmu`mlD(U+pT@ri4 zNQ`KO_bRD-WRM9%z0_%AORo#nzsd)-;Z4+mm%Hy6Q|#^OtK0D~fm|Xav}BFqYMVYDRkx^ou-F zyVHy0q&LBJp}i7DmN%q z*ARmwj>;M9AZr`&6`erVpL zLgOzfAmz4cwy(Ntny;_nGC&pmhdtl+i;|pJe zd=?-G3c$|#+5p+cy>{Jo8Q=KLV-tYXWl-!(k*w{VBV9SSYnn))pKNxB;V??bK1u;U zJ5RJ%j5LX15L=jXA(H?RBtLN$8HZ{UtH>A>mo$_dUq2@)7B9S)lcUHxXj}4O@+2xw z8KW4GjMJRW4DEJp=)X}V>fcJ4O_2%csk&N{v+k7Y@S#%05 zo;-mxp{cKalTk$nxCtKtez*J9GokAUxM}Xv@v~+SJ z(xuI!zE4H(qzxp$NB@&XlkcFuv@ohC6@^ZTAXlOZQ-&B9NxJu^NKE2I5+R!@0=N4? zj~C&1gHPb*T>|kVndVyPxq)JQnAO7OsX~HawBYsC!ltPK1Qg~bar0CWLAbuaZH8Q8 znnBJtcx4U_sygZXt9ZPi}X3xS*;2{k(miTn|Nq`=A(mO%wWnCH3!&E z>uFQRqyUHj?DBv(&u3dRO&wxLp+af&L*|&I(5Vh%M?&?>{~n2wEjiHIQEO|G^pv)v}>1Ao@T&Nt}oNH zYyq|QyvNSA#RYtJB@KNz^(D>UGd{}rETb{wNXD^@mW;NHQyE;w?F=eYnmH(QaORlI zgv^XgUFM?9<(aE8*JajZq6PGIqlNy2w$Nwb37lr3r%c;GSJJx^Tt^^agk;=?~~Pp!{sc zZn^=UL-1UKr`tGVZu;DGRhBAiHI(@Ib3GcUsw^-5S2~8`dF-%kRo0K9n;etB&>>V57Iwt-$#K?KNOGt;#wJ_1(1BfDfR4 zO%90R^m%l9r)~p@bln5Eufg zmH$eINnGLzNhK&;r8D@dU$xSQhn(B)KGbS-YG(XHG@~KeDO7eEdLp|<`p4CQJlU$b ze{C>!n)S4~!vsvz}h?z+<=g%yIp@s#?jf{A>L8Y_49_4jCjKSOds&q>4 zJe>cjoN>O})8dA#-=2ncSVx&ssd|z1g45{%BUitcPg0 zJ$ur_1}$BeB0E0o?5vJimu6j`CFa+TDhs`)8zT2klTjY$j@!<+ZpX3Pcc!5x-8c#y z*P}}q?sd9z+U@Feadp19x=_re|5ao}^K%Q+|2QFj4VPdt+s4&Ncn2*62R&rHpxe1= zVcBUAoVjaK^I6~D#n{d?l#>?$v#)+x9vMU}eiW@(G#3|5i=M#6h{qp;qTcd&1xdYK zg!~ro*L_~Zp5m5tv4t!w1oPE(LQQNk_?rN;tEgW2q`!Lv$QlS(k?1C>};Z zaj@7%brhqgmdv3>Ek<7~nMzGqjD$-^Mow7F{)bDu$~L=v*snY}iUvTO;;!5T6MS{46FNvp6G1^@+ib^c5|FI;6q&63!fzLdv6h6iN#KkzlUhz|4RP8l@LZ3ogo{5V- zwRFG{y{yH#(jV0S0Lm6#GdBgeE*FsoKhVFqsQ%(JuTkWBRQBBS)PiU0x#uPc{8lMy z%M_e&HyZxJRR2|uFPF)go_#5(?1kI`Du?BJNVlQB47I*6v&bs@+0-nmk`=9UEZSPgc*XGMR%pgfUQ?b5Drc&b6w*;{LZ`C zf?XH4!ei220X{h|T`%AwWV{0X3D;MeM%auO(8a77-QNKxA-w-E|knWEM$w^0h)Dh1wo)`}F6Uy%;yiF)|KR})+;8_OrI?InbU ziIuH-VdWA12*|n*qZYl2`~Y?8(?Wup;7T<=7hhJi!!@$|E0AK+rl4sCjan-!6~;G0 zYOE@ewVWj(MFtPze7_Xu%c>Iex*>b;S*f7(5mT?uApAt^@-_7iE{*s^ZaJaxSYLfc zwiSLi_bT!!iz7?X__BDo4oH*f)vUNg2Dd1OxmGc3qgxHhoVby3H2eAxkX?d)R;iUS zO1*+h{1|?;hJR0Rk`-%Z`_p7C=jK(l)iky^Z@nu&a%<-z*8x@wygz9gM*&02&n@T3 zALprjt!IJb1K`-bh*5$r6%4}8+7el0YMKnZ!)^PxRi_5TVxQj<6WKU zu=|kee}PsBhg{c~<9uK29*^tmT29(5;$S*JS4hVm@>sOyg2TB~oW~rjT?buV2L~D; znK_s&x`h5&9x@5#f?<=qIC9Q}x8Ur`U2>msS0}sTSdZlT$ApWk@;b0sd{%vMrrk^Oxu_FC7#W)X&wrZPQeVIAySpgS5k5xD`Q zbh_ps({_JcxUM=lpMry%MMYpGT#k;ZbKT(1)xlZqW#%S0$QbH6ou3ECnQNr5#e1pi`Bl#boiCm0e<||1MnVfnG&>F=60CGn`NYNi?s z0>3%dPuVZo!)*Nr>>QH1WvM5t*OLJ&t5#N>s4`c5RfRUxY@)tr>xXQ(EF||L@n#K~ zizaUl2YBJ;1j=2D(B@pIT-=;U?yZmdn~H>rcFP!eFWYh#-b-HxxPJ5N`zYgaF;j4b zRelS_WmfqO6mUcOH58Y2ne@%3va2STk;=nft|l+nAurcKv8#>yK-6{6q?aB`6rC3z zn{f76V$r2zsjiw@P7F7-wU^+1x%L9Qx!UvazT{l#;Z})YQwP_$^ks%d-@Z9FdHGht zpz%hG5p#9Ml|b|)EZce%ey0QbV3lZF z`?+3w3_7-LRa(Wss`iG8kg6ZpzU0#ezvP~BVRHA%kyXly5GK|XQu70Q-ji@aYP$d@ z`ySO@sU06YY=G0b8sK1KP4$)A6G?I~`tq$X-_dfH@F&rDboQ;CzN;0sO)}dg#J;Tx z+ax22nxXf8k7ylSJh^uO0ki$geyM_KyY()f<55Skt7?^sJ8=rwt7{yl zpWTU$H3CyJ#U_lEF>N)Xp)zw*cFWmVMrhW?pf_w0#s~!;A)qCk530t>Y*K|yrm%%6 zZ0U-%j`aj?6KnO|$~fSMk0hMf3?dknQh`}{agMC`R`62%5t~90-)<))&7x3+nwWb` z`q)q-VN)qM72J~G>jL)G^-}hoT~bCh7_5W(JKsocK57M{ib07x)y5cwN&B~8!T`Uw zRx5;S{F+4(3O~Xn;O@A8)%G~(vK1?waIu(Y(rykW^wXO}P;gr)PVK2xDOjb~INRe2 zM!8sFcIfyXuu+z7&4nymphD9K(O6+yrm!tl)G8Dj&vZs5R@k0dpnx+4e4frUHHrQf zOmeMmMk!OU1tLZn28AD^jDRA5QKmo<$SAc?h#6%X6jCNZs_<8)^K@~jf>BNaFpyDY z0+@v2-<|8jy9=@JzU77L$GkUy3|p=ss#Jvva6UfEgJ7ECQ#y%D73|ZYy!S`==@f+C zr%ALNncrVX7NIlmhpLJc9(^EJjZanhA9jy~6X`EYgV=uKa!t#(Irv zV@=zDBe&ku`wTi_{>c*sAKzBHKk?9TQ{OD1mBX{WE`8lVnjnyL)^{s%}N8UY$WtDp5bZQoVeIUR}Cm zhuiA5hlE98^=t z^p#(I&Y?FbYHa|T;)ug_6xFOErAXTxN2a0Ynj-`4CcEh*{5`ksxpinu^FL@mHJn_j y>$LEu0!Cu^*%k2ik-