From c8ecb606fd061fb899b1cbf77f0d925fe65f8c4d Mon Sep 17 00:00:00 2001 From: Rebecca Schofield Date: Thu, 17 Sep 2015 17:14:28 -0500 Subject: [PATCH] cleared out the bad code --- Attribute.h | 30 +++++++-------- DBEngine.h | 45 +++++++++------------- OUTPUT.txt | 4 +- Relation.h | 91 ++++++------------------------------------- a.out | Bin 63298 -> 63265 bytes test.cpp | 108 ++++++++++++---------------------------------------- 6 files changed, 73 insertions(+), 205 deletions(-) diff --git a/Attribute.h b/Attribute.h index 50949a1..084706a 100755 --- a/Attribute.h +++ b/Attribute.h @@ -6,7 +6,7 @@ using namespace std; //Funtional, might need more functionality //template -class Attribute { +class Attribute{ vector values; string name; string type; @@ -21,30 +21,28 @@ public: size = 0; } - void addRow(string v) { + void addCell(string v){ values.push_back(v); size++; } - string getElementAt(int pos) - { - return values[pos]; - } - - vector getValues() { return values; } + string operator[](int i){ return values[i]; } + vector getValues(){ return values; } string getName(){ return name; } string getType(){ return type; } bool isKey(){ return key; } - int getSize(){ return size; } + int getSize(){ return size; } //may need to change primary key implementation - void display() - { - cout<<"Attribute name:\t"<< name <<"\n"; - cout<<"Elements: "; + void display(){ + cout << "-------------\n"; + cout << name << "\n" << type << "\n\n"; - for (int i = 0; i < values.size(); ++i) - { - cout<::iterator it = values.begin(); + while (it != values.end()){ + cout << *it << "\n"; + it++; } + + cout << "-------------\n"; } }; diff --git a/DBEngine.h b/DBEngine.h index dadb143..2b25e6f 100755 --- a/DBEngine.h +++ b/DBEngine.h @@ -13,25 +13,37 @@ public: size = 0; } + void createTable(string n) { + Relation r(n); + tables.push_back(r); + size++; + } + void createTable(string n, vector a) { Relation r(n, a); tables.push_back(r); + size++; } - void createTable(Relation r) { tables.push_back(r); } - vector getRelations() { return tables; } - void showTable(Relation r) { r.display(); } + void createTable(Relation r){ + tables.push_back(r); + size++; + } - Relation getTableFromName(string n) { + vector getRelations(){ return tables; } + //void showTable(Relation r){} + + Relation getTableFromName(string n){ //will return first occurence - for(int i = 0; i < tables.size(); i++) { - if (tables[i].getTableName() == n) { + for(int i = 0; i < tables.size(); i++){ + if (tables[i].getTableName() == n){ return tables[i]; } } } - void saveToFile(vector cmds) { + void saveToFile(vector cmds){ + //writes nothing meaningful ofstream file; file.open("savefile.db"); @@ -41,23 +53,4 @@ public: file.close(); } - - //void insertTuple(Relation r, vector t) { r.addTuple(t); } - - //need to add find by name - /*void deleteTuple(Relation r, int n) { - cout << "a"; - r.removeTuple(n); }*/ - - void selectTuples() { - // - } - - void project(Relation r, string n) { r.projectQuery(n); } - - void product() { /*Brandon*/ } - - bool unionComp(Relation r1, Relation r2) { - return ((r1.getSize() == r2.getSize()) && (r1.getDomains() == r2.getDomains())); - } }; diff --git a/OUTPUT.txt b/OUTPUT.txt index c79684b..2d883ab 100755 --- a/OUTPUT.txt +++ b/OUTPUT.txt @@ -53,12 +53,14 @@ With an arbitrary vector of strings as cmds (until we are able to parse effectiv engine.saveToFile(cmds); -This will result in a text file with the contents: +This will result in a db file with the contents: CREATE TABLE animals (name VARCHAR(20), kind VARCHAR(8), years INTEGER) PRIMARY KEY (name, kind); SHOW animals; + + //insert //delete diff --git a/Relation.h b/Relation.h index 995e3ea..a404706 100755 --- a/Relation.h +++ b/Relation.h @@ -9,76 +9,21 @@ class Relation { int size; public: + Relation(string n) { + name = n; + size = 0; + } Relation(string n, vector a) { name = n; att = a; size = a.size(); } - int getSize() { return size; } + //addAttribute - /*void addTuple(vector tuple) { - //Loop through the attribute columns - for(int i = 0; i < att.size(); i++) { - - //Loop through the elements in the i'th column - for(int j = 0; j < att[i].getValues().size(); j++){ - - //In this column, at this element's spot, assign an element from the tuple vector to this spot - att[i].addRow(tuple[i]); - size++; - } - } - } - - void removeTuple(int tupleNum) { - if (tupleNum > att[0].getSize() || tupleNum < 0) - { - cout<<"ERROR! index out of bound"< findTuple(string attributeType, string type) - { - vector tupleSlot; // tuples that have the attribute in question - for (int i = 0; i < att.size(); ++i)// find attribute in question - { - if(att[i].getName() == attributeType) - { - for (int j = 0; j < att[i].getSize(); ++j)//search through all the values of the attribute column - { - if (att[i].getElementAt(j) == type) - { - tupleSlot.push_back(j); - } - } - - } - } - return tupleSlot; - }*/ - - string getTableName() { - return name; - } - - void displayTableName() { - cout << "The table name is: " << name << endl; - } - - vector getAttributes() { - return att; - } + string getTableName() { return name; } + vector getAttributes() { return att; } + int getSize() { return size; } //assumes that all attribute titles are unique void projectQuery(string input) { @@ -98,24 +43,12 @@ public: } void display() { - cout<<"\nDisplay of relation--------------------------------"< getDomains() { - vector ds; - for (int i = 0; i < size; ++i) - { - ds.push_back(att[i].getType()); - } - - return ds; + cout << "--------------------------\n"; } }; diff --git a/a.out b/a.out index e1e1dddf7af997bedbbd9fe4c73080e53b082138..1a24079c2b46a44cf732db100bd1f54b509a9514 100755 GIT binary patch literal 63265 zcmd6Q3w%_?_5a-@ixCh4qD7$^F)E6N1Q3H_T^`XyBSr#B5!}2MNX_e)Yyhn&Em&D& zG+NOS|ftUy-E764)3O1@A!3M;@7ykS$lDS#In-k_0T5h=E<2F#}EiSPg%3biH%ZLP#+kBCr<7 zH4aU)rEf*6rEElH$cTg_V&D-ngJ7U3cP+|klFHD})$lo6x92C9OwGT6y1Ul++M3GA zlg8IpUr<|9-?IFI-BxgmFg^g9dfGw&6%<_af9j^vl)M_ATUR>&VS1gwE+ z#Erm@y1{ZM_7?vv^yn`#TILP^!M87aaq5eAe)pzfpnVcQ!V~cuj^8KnGkS6g;wRz9 zaGU~iWq(h_ZxDV1@jDqmzd$}rKglckF~P`qFc9q1DEx+M;t7Dq>p1%{1iz6wO+cBj zF7mxgfL9ABGq3<2bI=>jiNVU>};J z)m7uh(I!l`!r{er4fWyXXhl;r9Jaz&E)CC)EUsyeMw({SRx~$9nyv8svS|KA;c#?G zQ^T@wWkq$kqPDi7YAFb_t}1Ju)Le5*q)<|2%`@{E3s)_#2scHf0CSZ^3u+pgQM5TS zskpu-s&WC}JR`rb^s1`aSCv&1R~1Uu=8CdHq}l8&!6J*PvJ#xthpQ^0RZGbD^5x;i zNK`EzwHQeSQO(A}T_%A#njDz!D~hgXwx z!gKP_=tW`lxU#rxQW)*e$q#Eupyyf=Wzh+FW&mm<^^2oR!jYz?h9=ExvV4`u=2zF2 zF10Y;b!w;)TU=EYZe}Xq3eT-yR)b#5jx@K_MVPJ1Xaq;EA{tp<6Se9hbyanZ5H{&r zOX@0W>a8ng%m`1+&9km3DV{zfJRx^N?uFKjdGn@CFAnGDPE_c5^N?i{wJuF;GGV&J zGjQcE{+A&XMGa~^Z8A;phtO$bCri)18B0abD#H9>Ablj_hTd{&4NQH8RqD{wkVDa# z|F_@22}?)1wLq7No_jx*pfqc-&VTsca%Ph?z`eeh`NegIYl{gZ+sh@&HBC=FNoTw8 zx@y6Xb>Uf;33)EOS<6T(aN*tSX2^v%J_GX?x$tJqBfivy=Q?Y`JQtp8unFZZJl91N zmbma-YfWf$;kn+Lu-t{`x@*Ep7v8MXq^)t`Ii@DGyYTceO!$%u?_RgoyYMHP%zztR zc=`e+Y;xg^pF-MZ7vAlgbhz-w$6@|X7oPr)30*F{+xO^p;propP_*hmru`-~%5H-C z*uT0SL%V8w<~Bp`z3`1y*;ema`*0n4dI&M5myq1Ew-@28-Aq#@d%7h364Pl+cS!md zOjE^sHc9$9rs-n!te5mtOjAXB+9mx%rm31eD<%DHrm2!Wjgo$pX{usRxun0sG*z&t zRMPh|P1WlON%}6Psd7DelKwo?RH>e9N#DXWRjDUS(oIZLg?cPWe}-wQPS3%A0dZC( z(^Q$By^@~KG*zXiOVYEMri%1*Ncu{qPh@(Nq^C1YmFQV7>5G}BD)h8VdIHl_fu5C; zK96Y*aZjV9$1u&I?I}k(|Ifv-7jGVqSDx;3{b_Es4)uDtXh8nRlh+B_0l zo}$*1-a)eHf-EMUJ)B|2a00BpCeQ6h@VTY){}n1B2#uZ zz43hTe-RC^xf@>CwrEkj$+<C+QP^z80 zfwipIiX*X>!>d*t3ACK^xfO?dd%@;u&t%_UZrR`csJHhS`Yun|Q24EadjYr?wz2S5 zW_^abYHz|&D&({|WksJmus4l;*pdZF*|)(dMm)@T2`)u#YZ(Ws6kzKu)ez|us1%3> z<{7K$%+g1WkDUr9{z>|bPfDIr-gYFmi+e4T^ScfDlEzWyxcORjfFKSibg z-ABlCQqdIdDF(aFE9?Hxf@6{PJtVhnxt&>GlK5K2focR$lD`=E{Wtf+mvm`01)R*+ z{{Ffoj0C;-?70uq9K761_9iO!7zb)4*=y&ZfAvEm){05#}^!1p`o(xrPT;1p5yH|WAhmKUErGhzF|%lFCNrxbgP z1GS#)J;*_S>;od!l3xru@gQeAgWj7hRS<9AgslAzy5yY3N>h5mK^I;srA?8MeKO)l zGw5W=t~=vcBqVLV3uBwYQp%uH4E8FotTN~_&>Ki@+wu&v+7e&OI8d7awmwX$mIB}J zpi7s&LIJ0Us=q-OMn-w@*)sqR0Y;L%fF-deBQKUgB+7p5A4f5WlJi#NOyw+Oy8bZ9 zZCifBO8+SFwTuJR0kHKkilLZ|eX1XWCxX1jtFfN<;QXL3tkCqOWQz2KD0}zckD@P< za}#oU_eJ=Bk>s{5ud~vVR9_eestaK2_t=*eY^=Y&NNuaU8tXYr^@SChzN{>ez7S;( zVfFnjqmpyq-~9R_{0CKE{=!O&CBBw%w7C~x>rdF1AE1hU`y#dd#H+EMPs2&YxUfRh zE5_@Ii=;0^+0$8le|?dhBfYBMPaPBfr;yyXrI(eikoa20fjS7VbqD+M)}f>5i`2Fs zIa8FNrwtA``oaoLU+l@!7ozN?tiHd#NX`ZLEje;vtfTZY1WvwtA*wTuHrXMO7~ z_T>~d)}M|^ZKr!R*7Gbj7w8KsG<_MZ`a+cb?Y|yHUnJ*B~KYPG_ZW zNqjBiKyf3obvOHRH5==%FH&2XS7SYY!^R1HVTGtyY-Q<%GA=~fuf2a1eUY3`Ag6a< zPG?2GBe`wMc*ajrePNt!0&LyOzI=|2_1BlvS;L)PjrE+X`oaoLUsmJPN4H@QXZ8K* z7z^9>dwzWp{*PCExr|w_miSu6(M}$~)<3Z?KSmY(_C;#@nO9>y3kS%!utL+9%@d_B zMA?_K`u_SNIY)a{kD_f`E@MTPk_^T<34eo4D|CU2nL%BLHLc%nNJWPZqEzw<+w&my z?WmHr%T$>z%jA!#Y6f*sR+}G_37|sc>s&Q(4UG4&>bA9vgIo@<^#Emjt->=u+8`d} zz4T!IG*v`JlsyW$`W2PreD5!)A-M}`=fsMJOLL07CLBfeY=FPs&#EijT!VAE)O!1K zKBVhk^I|E*pP~fp*Kul-(n`-x9IQY%TC|PK`0EKot$4(~kCnI0eFTa2t%oSl-gk*v z%WOq$E$t9z78T>VX;Pxy{tf8+3;OQ!igtS=t4R^$S<>iEX=00Taz0pweEZydg3m8| zRhJ?Jsc|>XJyKfkxlQ)&KjvV7hxPVykwD9O)4zkNf9vgUkfDC270Tb{DQcenqWahE zDbmHcuOrd5^#jWFn|~I8c9{mhuNv&KZv&xUfp*!~vwVs`CrN9cmAY5_#ePmAbN>SD zUNxL~ti8YPfM2iLdx`_>&X!Fgw7GksM4}6&)1{Yt?QI8+g7v-jI%G>_y&O#b#qJrP$xxw=M`XHgB1x*4WQ0ObypJhi=k>otrx1yEgXyDOQ zBsuruq%@VIaS*ns>^T($=PwqW`)pCHlc;C^nNhU) zJKt8JXz2H!bJeBVLJc^8oqMn-)>RbfC<=5HJ-aufs4XMl%GqBV=|!7=wNr(D+jw?w znrZ~cwQS_5dV<5>p};A@LC@zM|8%*k-J-YySi+zbm@zduV@S&#S6#cULum2`({k zLoC~-^VEt8zRF0f5C*#iKh!V+HLmVx+0^dh_U~^a)2i(S=#WU;$YJl+BBw_$F;8pD zUe$DlyXl{Rw4?A48{VJY-dcF5sEShs?Jdu=#|p6JVCFWxkFhIp?@Y5~vthqhz-9kzeP@m*DTm?r3O(ItfkTmIDUv`LGm)|J>? zXa?686!}5CozxB}abRJf2}OQbqvx6jN<3C*?>}CeK@6=I+NKw%#%VL&pO4YcHn8<= zu_##IjLAzhl&wNmhVpimHNj9Oj5zsjE6r2PvL}YWlnx&o-%d42t$N#v#1-sgwkUnr zLDPquo*3dCA$jaU$K_E0j~dk&8|x4s6PJ#8^kFkJgW+_K8e?)Uy~F+u=&o_6*OHW5 zR7mUE?_9ZE+Dkp8KHA$rKl&bOmeuGgjmM&!GP;Q~Jc&EbfW9>I=(#cdiO(rNdB?S6 z^IR2z9$Y;m_g7LS9PgiLk<;Z5A~`)>%sfx3^}jX}X8k_s_%XAD9W_0tE7lUGr`uTf zH#`52j-Qb}$D8wrnzAE=-65Vj6r-gqe1fgnjAsiN1|*FP>)0=MN6dJ;1>|JTLzQqW z;aSDzcEeNOi#CxqPClP|fM2lxlX#S(Zf_~8OxpD*l%abXKm*0xumdnzlRMlkNP!v|{rsoVkHhL-l)-$lGQwjFWX{<`3I6vcLz z#NM{=rI=Q2&z5acs$Gw|_sNsG@SXGWyz;nDch&N|9@ z^i3H_GlFJ}Nx77#@!W8^heqkHhwU*XG3WM=qAz{eo-W76JM435I*IrZ+iHVpWa7YI z#ZTVV-*Wvm6!IRnJ{6)>HW=OZ4SP5Qg*LRK5Zdt{QV1$$Hx#oAirI;A>$JCUO^$I4 zyX=P$R|?T>%eoy)PzbmWkOH?^d+iWqL|1;*_PlLx64ARW==EWX67swe1f3*pE;A|uB4L5c@lSIvOF#mvo0n1 zgP3i9=#H=EYMRIW#Z@Z~TG0`-a@bBn(zdMFo}LA=`0SI!MCs!R_+!xfcJjr@hnQb_ zR=ceX4Z@IvR3;Wfqu8(uEU?ew-9oW|P#9XCrK*q0zQ7cAPmAp;YF!9JMl-21UCT_d zh26zfpuu!ad8M~kB%)eP(3CY-GmmX=qbylT+wzh2#@{=MZ2PP6#7Npp`=1b@&YBHG zx80)=L!X?xYfb4`(sqQ-7YEKLIe6>f%$eC5=>)$Wro8teIHD>W5;<*6h{jm&yJ_g#4@=frqPZjPkP%&&2PsS{=#7qKd1zo<-JGjkdlvvoIR;Uj9A&iA% zE~y#xb2E!#A7U~bEQ-C3f(Pv;R96&(6V{Eae2keH)sj}4=$+AY)T+lUFY2@_}&CeTKf1H&Emd^w$6xKT}#jrL>YMLANP z_O-kXc(!&o>3Cw_fs?7Op?7>1l2lBr+FmN&o?Y7|!b)hyzDT+jul`P?^#n;WoUUW7 zk1!XV36q#Db~W4uSJqALx#f{HDf>nzdmrNMS%a~s-`{OF%3btAh)fKkOWavJa^{Ne zh#Q$8&&P18BH~^Tac_jUA?k(e9dYk}i^UeMSK?l8Uqqo9alf%2W%H%s-_tmYuipmG zoUHsFhJ1C$&^zcLCrSSOUkfh@E!tbah`Xf|&{DsWf8*myUgi>Yx&Vs07fKB+p4$aU z?6p_R&0*yozb4(@U34y|dp8audFa*fH{cqv)*S#OjOpR@|i$ z-gm!=h-~=w+P{{#i}%NSQhEOtGsSs7Kxrk&eYeQ3FS+ZZh{MVbaz?{hxs+p!il7}s zpX|V!B)EIFx+5C2EfF&Yux;wk=@{7Kf$;LNWT!I#xS*MZCoTB^w(i`jp$F_?t{h*Wm0X&wQ(W_oYKa#X)=7o#HK!Xx++jz_g8ve~O!46?@!MVi zA7;&wM<->8&*OTN2budX@v%;kLE;iWht?J;~si6dCGa8eaTg)- z&FIV~P&eE8?1K(iU~X zlA~cvl}idchpv8(Po#0CT=xg5lJ>XL9;8;_F7ZW%uHGoC0y148Go6OE!(J?L7)W?w zC{q-B#Xf-92JSiaI_>dNAq{A!KHdT>urH^57M!_{2(*=S+^>5&Ul*Hb(^Dr~^H6s8=V&SJyls%=ub!WW>3oh^$c z=%*ScSaL}wvy`Z_Kc|Xc@rYKcn3}GZqmtO)?c)ytD`NBLIqRY4#uI^Q3#Z-a>=3dr z;D^PJF!#mxV}>F(+yz;D@L&%XpV2>ekn9bS+4gZ7sTZHaYVkR!7N5ghe2~*=DGx2# zaVLTIJh=Lsn>gO*GR|Ec7}&aQjJCKF-S($?!Ot-s;@6^VU*1c%-R&sxUVA6v=4`q{ z@E`MR`ZF@4sWAub8zt^_Hmyz1zab=LCA;l2ImN^@;!X#}c1*Xvl7&RZFt;$1&7F?v z&P?dCBgS=t1^cwPR|!Ib^XS~^c$fNrbay(&h<#9!J6Yn6%+okzpq5dQ}x*K_2* zAvu~E>}OTJbWTD@%YGLl}TMfm93>(96| z%+nQwGE3UZVO3y6-{C2FYk|Hyx}OR|^eHbR0`{?_+u!LBWS9LCD(m?f*P!H67&i3; zn{xS2)hq@x`&2a^sN0HCmi^E{W>HHH>_@kq!DDMVpp_#lTg>wRO559n51#cGwZhm? zI0aZ(AkA0oU20o~>_CfhYX#>ss4Z0p=Drqf;{LrrtiIa+;2e0sk@EWHs z6d5Z;QkKEXIG9SzS?Yig+&~J(U^=&yfCjIq=u+-b)G`Q;u?)(Jh&HEZqM~kDGGJ!Y z#q^>NrCIwUMyjY_qy6?)R)Ct;%29F)`pP}hbM}vRD*~$QrVX}V!t!tbWDBrKqhf!a zb+|_4C8o_em+TlYSR>HV3J53)7|jKAm#~S|6{y^#+O{ z<CqpokA9s&EiHw$$z!+Ojyy@b?G%}>rz{hZx@duJR!@z}l+dh{jeQ9FdQ2HpFTHe-N#9qm->C=pyo zyHqAIYbdzG-pWNl3JRU;4e(ryTh?IRSZ}|g7Fu1wJY9jTqwA5O-M$TX%;M|l&3{9R z=oX@79bIpq#A(CIhTv(xp1;aEdWSd$vAHWTrYrFs6G<}9JL2C;TDFK=NU^gxJgqCf zYK5n2m0r$vsf<-gcL!I`Zk z$X0w!g?&kRT|^lj2-%te+_Ffkniht)B`wxT|@+HzpC_AkRLGDh}A ztxCF0KVf~S_;$`GHGfd?bM|cEmGaeVt__4e<4NR-*WwyMJCilVl1Fbgv8xWOl!Jp~ zUw?ota|;OB=U~0zq{Z{yZ2Zj%ofN-Zy(&JAG;5eYtfi)`?J4cBJuR& z9yLvTPCq769`4hR=U#`DKKWy*bhFEFZMJPe#!o*AP*m)6U#A~we7%qx|9gHZRbmpt zKlKe8U#A$ldYjC2Wcr!#&xNnUepTX7L7&r)ds&ApXr1oUj~iYCx(~O{Uqw+3 zRkYK7Myg0U4xx5-C2D7zto)r+&7QxjE_B+D@u1Z?7@02>?)#P5q;%R>qFco=budyX zadj}#A>C13-z#x*Ffs}^-!QrL!N}|ISmY)lJDGGgavs}82NUK{;yKA*Ss6Q7YIyQL zCwUczsj1bu&rCM+%tnOWr+7g0I6YDOsigHC{=mu~N~Ow=c#rN6ybP!T?gRWNP649Z zUh$DoyX`!%D!O1RPeVNfhug@pL{QhFQIC1A zSIilTC7$-Mmps_XwBN?;MFJ-|bbjC)3vm47q%O;L0tV1*OhiLdo^WtZa^Miub&sVy zz#g8@rK9y9I;6;Ud^>d?s@tyRGNJFzl_PGp+H(Y-a7ba?JDP;V2WrjpxtY%FK4>3N zDvn77W1X_V?*56O*V3&riE^Oe4tor}3@Ipd3?wR1UdxxT(r>cwqsQT7 zn5QccuVs^XB1>pV;RC2+jy8Cif)0y;_wYc^NNiwPh}Vn7u4<_UBZ;x#P$+Bm5uhN#Zu5yS#Q5UBP5;* z3KXaTe#QPRyDiHUyGu_6;)ADhB73VmTx_6+>3Yz8?WwG{ZTiV__Y7{fCx}>LD>(5zGDfESxmmRp41CoH@yh_#z$@eY{*z>lS9WCzBzJFM8B&-^_{8 zTDYb)G*X?3tcjJ5lzs-;=;yXmR{Hi+pRKjqyF6R#eB9Z=xyD(a$b2X(Ax~s<>sWP0 zx;@Bp$8xpu6A}>T^6!8xH5QxfU-7(v*hhige=fAIohA<2hk3fNT}XGbKx|>VG8gUk zMPP_pEhgs{#lS{~fsLyBo9qGX&8qF?y6-6!Z?gBXaaYB!p`m{Fs>R6U?qD`LXhRRV zEZX)>-)5C`r}o-m#;0s+nIe>HU6kJ;ZkDtc1aFqK6&T+;I$Dl@zVP+H{>*kf(}S2b z^vS~4opTKFedWEDJT%>jrn@1st{sI3Fwj=dUAW*S;{)=NF&64^&yu6(MUoBF2s*Zu z_!Kk+P8mH5Jgk1T7y#$_K2in=ckxq;pD~Rms9g>GqC+(hd)>bJT~c}cipOBa ztSUT!*O|dcHw4gaFJV6YD)Z1gK8@Dfo%0X#$<)8{Yo@O6nHI%rbGl1nx8}gXxuE^L zY^$X0(ilOkI%jVQh;~UVnscxywjc*bF$W4t&i!aw>|e#PzZE_EQF?J~mwnSlGOlAkl4sqAB~E-YIHbkds-|TAPzq(psG}vIMd0lGbR>*pk*; zb8stWd%-sST~^~{Aa^hed=%lke9=>WX5s6qLrg~n$BY=klT}(#UsZ7vJ`I0; z#iB*EfYWQ5t6K17b!$#b(@l|^v&$;#tC!WFz>JDWb43%~4x_95#{KAT_V$jzho&~7yOZ#N zj<*2k0R9tj55AW9?v~!(TS2$B_V%s=90K?>U^d_$!1;hj09ON!&O|oAsetbQE&v?y z49WwJ0bB=|2lzB#3E&>UM!+M0?SP~4QMFFMsems7E&v=1oxBzBHNbU%O_(fC1Fi(z z1Nao+5x`Es(fGjJ%Yah>_W>>dw4OtG!1Dpu0bU3AG+-0p9>A{w9s%qG96bo-0H*?G zZbNy%a{zAzyby35;7q`$0cQj50jvf*0=N=zG`_OD0dOkd4*?edZU?*-@YjIr0N)0D z8t@~)J%A&&qdeerz|r^!V+3$2U^CzXz{de^1$+{49pJA4p9Xvja1UTF;1R&dxMe&V zUva(;a4KLm-~zyUz*_;o0JskDVZf&W9|zn6_%h%Tz`cN@@#W9MfKve{;E9F>fL8+E z3RnTS4zLmMX~5NhdjK~89s&Fz;OH#NdI@kU;0Qbcu>f!q;H`j{1Fi!s1$-KC3E&>U zM*)ujJ_R@$pPPLNa4O*2fC~TzbfP@q2*7oKxqwdtP6gZpxB&17;MV|0T z0$cz%;02Ti%mQ2oI2Q0}z)HY9fVTi10lXh@G``~U1mIM_=KvP~z6^LP;NJk(0jB=~ z$76z;gg=0p|kV4Y(ZealoGf?gZQecmVJS;9$Iqn)_03 z@A-gh080S>1sDaqAN#&_fQJCL0}k4S{sB$_%)s}h769e|-U>Jq@OyyOfSJF8d;o6) zd>rsWz@30Yu<{=Qya;dvzD{-$e1)liQvnwME(W|6@IkBR+|F4>$>M(I3Gt;EivhJ-|-D4S*B(fnVYQ_W^zv zaPVoC^=H8I0q4C1`2wy2tOfiN-~)i?yp3@MydQ8E;1<9`fP?=8e(@de62Pf|yL!-1 z!0GRxUBD*54S?GLw*zMEN4tRQ0S9NJ+yU?l_%z@Gz)62bIl$rXqMv~L2-r@*YQO`4 z4*(861OMOYJ(L4{4sZ@&_4^nXz;%bv9$*Q!WIF-x2Rs1y5#Zo4n1_EyKLM8k&H>yE z7zG^o5A+l8O28)o4`3^>2XOvBp}&B;KE!xpUCO|IV|CGGw)u0at9cB;zkpm&A{A!?bK)=|B zz5)0fK|jxjz8&~AeU#q^`g5R<^C_PZfZYN8TpxN4=p%Fd`!^Hxv-_Y|gFXp#$|?iD zl>UQW3OdxllfD7;DCkgsPx^My9{|0;hrSQ=ouFgc^emr|W?8#IpPWoDT$L{44|>*F zA?rmS`b^N@0Q~_UdNt@v&-QPBHR!8B_Z@%GxAswfJLo(6pzi~HcOUeObliUh-EVwy zK+ibGUw>wTo(H<0epZ7%A9TO^SA)K^kNP)&{%9ZdZwGy6ANB78-3I;4`V!FntVLKpzQuu222jLBAYy-~NMM z1G?Y%WemW&2D+d9$N_y5=)V02{VC9W`w#j{eb85f-UB+^AW!*i06qOYfBUo@^ov2y z_9?#)^!cFs_8;r)643qnmjike=zjg13Hn`q(5pfJdLQkt27MFge(TQ$(07CG$KQ6) z_w~{KKG2VV?q^>!GO-^U=ik2^&}a2Qp9y*dbU*o4gB}H)z6_>f>iP%z8qodLw+*0g z?4$nepg-A1`F)_j4El7R_A`#h{5s!Xe{w)C0Nu|%%>?~Q(EY}z8uU4!`{~bW&}%{W z8=noJKh{V2?VxY%gT4>+mqGWFe+C$T2XsIA=YT%&0{`)y3HnIT{pN2q=o9)VzZ&!q z=zi^Q0KFV^zwz4+`lF!x`7irG?*={FZ~O;gzXZD9_~w83c6pjUuC&V!x<+y>C^2K}03`W34(?uKu}K;K{|^1X_DA;c5xjP_#> zfId3UpU=T3Sk`%<`{~j7pqGR0r{^W0-_i%Y7W4-|&raqKY4U$J=udz?&4>Ot=zjy< zZ=K%>`pA5LIUfMM33NX>55@pK40?5P`$=-1gnWSs{&JoJ`ZUn}#ybl7S3&pV;{nj0 z2fe@X=DFZW6aD$%dEw(jLe{0p{Xv@Y<~d>y=s1>2)E7-3JrsT^>i5(8sh}?fJ>RGN z0?;>tUhF}qUf&A(`=GawUJ}E=b8n7)wM*Wj|H!vwQpoy{`R4iO+lhSD7ly1&%-7(Z zkNrM`d?P0N+p7^-@b^K_Wj**gd?Cv6lR*D8=ze-Q2lQJ(_tWDj=v(?I{{ZNFLHCpU z6QElc`OAG5=o3Kq(m%@c5a@S;@C5%G+6|9mr%??L3NWWKL^ z=cC+ek?%0_`K=RogFbYMzuX@O{Zi2Vl{~mschhGeP&U$z*ehKKWv7Vj& z_3T5wQ>KQjbC?gm%20aX$1M&~E~Lya%0p%mn=_pnpKR?axOo@_q4Ae?IO8 z{VCA>_;?)jw?Th8nGe0b?F9YNPx;difPUj;{`A2kaDE)}wpY~O^Fgl$J(S!&(v(99 z=o>)4kMxYYU;w=BSrqvuPYYR(Gv6>*zT#EEyEEF-ftLE#A>SLww~hJEbmdF3kGwze z*mSK=Q~dKCK)%yvXniU2&c}X^I0C=|4_$K%WJ=pT0yvUje%4OSL~A z>yU40p+6r_gZ?n+Ui!lE*aLbe=#Nrob>!tiu7sk#@%Is#OE-4z^|7 zgAtMON50CUko6gsapyyv^b*i_f_{?^y%zL~iv9V$oArZ!O>%kHc(WbeC;9>Mg_85> zdBFQe?}2_(G977_KLq-MEB*Nx0mF4C=+(*PllYj5eEX3vl$=lVu>kaOSNZdCE9eh` zJ}$XD(mD981N~Xh`;*6Z%8@Va^d~5?pYzL9&xYn<$biv zuL)UsK6Kt+TMGKMKJ;49J3$Y5(8=fBpl6nbtgn*3%bQQ;djk13AfMQeKf3ZI*^fQQ zS9)#8YGi$Xb>(x7BkRjJ#j-k(Z#m=Xt-f}P|1YOtwzeNx-uWoUImmZ%ng6_vf_^FJ zUgOU44}iV|bU*v?1n6G^{TYtu`Tl(DLB4s{d5RC~H1e?k^jV-kO1VAY zFAv_=J$R%4IPre(jp2}W3+?kxS3OrI?SGN4yWD$zlAi;hXI6x)rx4Hh$W@PPKCoXS zaCr{-yw*R~GYRw_&_Bz1@N>q`Rgd%^`Kl{J)-L8d<8I%1wHo>Of3Oe1KgqbzmCw~b zEZx@NPvSlc?u$d5PGCDZz>ft!M(maMrhQ?+q9LJG$K8|OmT@fqSp{l{1IWrWz!ukyG2)*g21cqJ}oSlAWU;_Td^eZfmAzk6nZU|PUKNPrhSHL=y zK_RAT8AEqO{HDlB(8P*3Gh@z`1 zfHm}Inf0LNGqpd1RewsXn@}#HCwm7l+opI@h4`%Fe)EBSdRW7Hi%>j%LEe){TT zZ{P$nbK%L0tZ$QFgx>Vjc1*vY(EWZTW7MGx>w&~}dIJ|wO)d<+7_cr6UT0ks{Bpp$ zKM;f=zcUSl2hte*9;1Kb1wGGZ<70ybP`LX7)&eAI7+FPDeyrt}bukiG1Q%Mf0dGB1 z$~}@kCHS{=Xe5l!t-*T()|x=@PXX%>f#6f=){oMI?;K~nlo5Prfc0KR5ci)x$_VZW zS}z5I-#^aUcwF%HLDr7U;N1hQw=;tuWLocM246hh+HrgkCy@^i3V!DV>pO#kTL)V| z8O->G6N3L3V*TTU;9WzkRYMp*I3&0&%i1V-!AFN#UmeEy zn&H7$Pqbbg9(;GW^(Tq%Ix+aoldNx!2tGB!`q2o+*Pj&p>&ez%PYQnFWUE)=2Tl$? zGtzqI6Tz20Vg2$GjBg$p{KBbL>nXvnonk$73gf+}+_vg0Yu%{ep3&Bmqk=DtvYs0i z{Q79?q0zyoa;)EelGk@X8Qgc8b;oJJwWnG4oW}ScP9y$zr}O&O>A}C9ZoMn<=d**` z&#+$34!)gjy)N-BX9T}zy-M_D4BEw02#=eDWM?{W%z-zwpvez~dhhcs}J02Jgl(ZYEbUd`}|`{==j+ z|7#w@UDL zKbbl|cxoF}-tD(7Z z*<$#8s8Feh8u1R@&UwiV>9oq9hFPKVhpIwC`La*`Gk{OCmf_lpUju&O;%maq(dwG| za7%Nf8VDS2;Fo5x(medGMk*Yxt*NXES2eeU7uD3)ST%__prXLwF@M? zx42~H_{D7ef(g0#`MDFvg9q!1S#z_em1R%JoiH&s-wLd}Q<~+R$_(6wYv2W37!K%m z4XgkzEszO8TWM*>T|$s?TrNT8aad?U8^Ermr3GgJq-O+c>Z70qTae1gJPu@T#)9*3 z37m2Vug9n7X%jQxdZexM(eE@XjF@KS=fonIk$I&mBYCG!XQ7ub6O8bYp;`_G zJ^(JTI$#P<*M-xTWey1Zn6%FXN;S?@46OAse#dPhz2vd6dq3;5{nU;WTg+ec+e$-ich?3a2kyDfU~V)xa0j*b+S{;sVp7! z26L^;2CE9s8B7*JtTH!{gd7k+6UPOeI?}*sW}FjB6vhg_jMU%5`oberXoP9|(Lnrfamxt}`YQzbd+L$X_zF24bjJ`jKlh6b=JNo~O5RL`wqJ=XpB zrO9b~3Li3)F>5iwVfgf1zn~cw=7L(9#qqF;<7?`xYFnx!c=)1r(FO5(VT`IHi*lDJ zpWyg3qx@D_4{!HyT-vxF|txQ$uw{w8F}bED0}as;G;EmsF#yNukoJs&Hg^RirT*Mo(%Z zRxV%FY6c4me5MN7(Mm;KO%-xCpkiEdr8QM^CElURt!k*Ni$MQPB$p0W?lq-zSW~33 zWib@Eq8<)|NjA1rqRx1_rhZX_p;c5?!uv8Qm?LndDv>Uj1VnD4wGCiSWzo%~jM>LU zj6wmLDr0{N(n3h#d{!fHq?8b}S#xkS(cB}L@^jKcNa5^OBeEqGznJ}x!Q><2E+0(` z2`Q?}n|*~KaY-&e6*zbKyVF9z;0#=s&yiI8l3bp%h)ccUe^XirDelh%SRD#D`y(vM z5==eUAca>L8ccb!k84a<`SKJ>bg|A%88euC2GY22&u7wR-CqL7FnrC-;vv1v~%bR^J`G?Quv~S9DS)g3CxSV~v z*~puG$RfdvyGcKQh`W6D;E<5A=^!DjC(#v*^*8Vl(A?#XOVptc4(46wDvYQpXRzN$ zDsRpiMpmmFC!35KCi5@eH)uxwW)qR8%fHx9`5%E!{!RIeNJvU#LsMamCx4Yvvv98{K@HqC{Ga^{>?eZSY5u0!a*?Q3^aUk zSHvu){Na1ck;3ye+V3&>1&NDE8~88a+~uwIa+S4RfxQYiS5wZw<51XLey=XSSC=<@ znhH!glRg23i8K83pO`Zo)aA#ra#zT9#Tgy0+s{kFoAOhV@TNKgNBNXL_dZoHN&Tg- zq?q!#x_nYIR-P_jobyU1nMtNpRtRk;r)C}^(9?HjxoOb2%bX`vKSI#wIwXS#{$;KcZk ziTDiogCRFc;_2}GHhJO)IOp;1Lh110)~AQuD2b;-D#q_}6Vq{oW&Ei`{6Ne2Ns0JD zmhpcQ@q?Z7_(VLMgux*ikBRt^mRa`_@uy%ND|e$Lp3W!F z%{t|xrdy*dv;Mfy&?@YL^tzIWPjXH)G2POW#+@1Qba|pQ2`TvORHWd~@WGGq!Jp}a z&+);Z<%2)l2Y*fqp7S}wdapNy;De|A@X8O(!K@zY9F&{-RFAT(vDG1i5}1ptS3O*> z10H&Hh2T^5iiact-1SPPu7qSV)3vX(E#)z>;7^<8hdu9#*fr^V<)+cv7VJl z_4x7sb*bkhD^vS{(g-f!6a0zzwpPfX1U@bJRQ@}GXS;i=LXyv1{N(={GI+`JPr$Pt zKL5{fsa!4V6X-bQkewulvw>%RbHDW@oqsa$UiFjgg`Xz%r_R&sfydhl)_ZN`j5uM5 z5B{@KPpW-b4Scr8e8(Mry#F&)o)2c_lrO_m8qfC-7>ebJXG1lf&-pNz8Ip!YmG$sB zVg^&sWR2&0tPFUhP{JaO=lk0XX5W23@WTa@c-f-!^ZgHoadO4;L>kZcPZ+A@itl`2 zktRQUew)GY`8kc}^MVXtl`EbL)p$N<%3$h$SL6BK3WK`hd^*FM&kEq#F5gRJI9;xI z&sgL6J{`jdx#IgH8qfE47^cY;dz_%EhwpDNd?;5uKc?|~o}Qsau9kHf@Wat=^7;BT zIzQj@W*9A3Ja?|~e6NSW^mm7@r{e^L7a}gd*7^B997DET@w_4&e)gBoEi;UlE8g?a zc)s7tV8;DEjpuvS3`67!z0!ETPt7n)u6Rc4I8{I2lVGTnE1reXc)s_*kSkY=yTW2Ch8oZJRTzw( zlxsYnPh^-aS3EZf{BRw2gKz8n^R?VefB&xWe1DQ*vRv`p;y}d@-?L%Jmn+_L)_A@T z$$+GUCpDh$p)(lyyrS`ZuY_T~T;Wp;QuXt@2@L1S73DOZ?_)9;{iy|hI8Kp_zn3Lc zyw9fd^LbkaqbJ{x{DMljJmZ7k?St>t_4EBk2BYVn9<2E1cR}3vdo-TUYckxT^>By5 zU#9R+3l-lj(|ErB&tUW+3obJCf$yC#nE7}m@LuCvqx17SBn*bnM>L+#WiwnWSKQ#% zc)r)oVA_38$q%33W>8n0w`)A#n`AKh^97Bst_%?^&wvtc)Odc6gaJtj zJ&1VqD}AVz^Z6mkmn~P=SB>ZUmJC>NC42>VuX>))`T3qJgR$GT#=k!%M6^@(pvLq4 zK8Ad`f)^+r<-q6Q8S>*x3Axz4% zV{nK`C(Htpa^U+73^&OY{+`D3dn^p5{{0%y_x>1+eYhG9wA7>fW%B<(@fsR{`tNQgK2l6#`8T=2BQx#jpzHP47qZ(tZ!>P-{)Xxlq;SuHu(7= z!CbEKcs^9x<#&4+OuGj)p5G&2FnV&vNR^-8Ibkqzo2Bu5zn)=?T=77c$*;%pT#f&{ z#-FP7r&!~Epz-{U62psfwX7F3p6@X-82fPIDT*Jy@5x}~^C^wzd+rSCibp^+p6??t zs4M(Kjpz4y7)*b6Xgr_eXZWmK@qQKzDaVWNxicUs;XaM$d-@DUp3iGMzkk7Ch>{tSbWe?;T?emR4gzYl3VzX!o!+I?2z`JFHZBhS|~{#`8xqlX^>KP+vOWw)10 zesdXkn&PKM>$%})yvFlAD2C;7g@%(NCL$+M;{+Gt{yB-XNPduwGa^v^37z{sy#wa}B zt75oGuJ|6L#*ftY5Ytw|A2gotM=_`??)gLD92b7ChQa6qzimi-Ws$;vMyS|7YWyUv zx0oRkzM}E`E(n9slR%EDhu@20FynZ!#`Aq}2BYWK1D}O?cQ8rMt91UzIF;YXXASUP z^ZkE)@JDn#e6Nk+`*Ov8fv_* z7)*bsXgt50#4tjx_)d(*^LsrEP-6-A1Mk(Z$8~`lZJ6eQX9aC!rU3ul}A0#bCdRwEmlMUkE()WbFOrx&{R*b$)*5f#HjCh2N#| ze1DRmUaq(=rSbe8A%m&^O^xUK`wZjcihcQciXVQ@gu%%9c8%xz+YBcEKQ%t2=c5_l z5y;@x-#j1ub-+^&d{36)ak=62ihr z(0IOQ$zb}mQR7dVsPO7)SwGi!z8}tTlU(sG;RUMxo^wNjIaT8y0^X~?Ki2vAJx~US zOTsG}|HibCq_-)w^{&SA`&kTTew~u5+U0kd7%rA8_Qx8}@3Jto$Q8GTfT!P^Y-gHv ze!g$cVEXkt;Jx_&i_V{+`5z*sa9*YH{0;@fIJx3GCgW8-D^Cb%i~?mEpMXSSkq`bh z;HeKA^*EY#zp3$$O%F*`X5HVX@zb>4&KD}qqhJtN55Kp@VD$59ji0RXM$Qcy&+n5l z82lH3_ma_^VcSN!n1Ck%$4DvjrR!VE^9k7zuYInr@o?|GN5 zhu=?SctEcBUZBSFJ#hxZ|C<`m@5wP3d79_S`G_eWEyW||RTZ_h;l*_g_4>KwFh1g6 zt6o2;YKk^TTkvlY_-ylxIoHe%mlT)H35SuInUK12hKp3)5MEr{P>D+9=~MYH0eG^s zu{IKoROe34zi^60Lb#@SIZ~7JE%iuibxU2{&8D5gSu>@X%V$r!x-e`~Y{tant;nOU z(n>VajECkM8?EsCN%>*+Ct6b_PgvJf)YjaB6ncsOH4v^w#-^4kN$1tnAb(l3qyP_N zH^{TM;VVk6nLe!~94-#mRn*kGADlO&Yc9XMtZ+_v&a~+zg_H-&>Bqa(W85x;dfq!c z^V74YU0poG;sduv*7IjwRTiDB{I>^iufhP# zpH&tG;X3&*4B^U(=19E2%n5}{b&h;K${vn3Rp9?C6jv2qM9Eh)MG8?z*@SQ%bGe$F zGA$Zys;O*=M%Z*-_!!!b^MwDXu4-t!Ib7GUG!m{TE~(5bEQR2}`kegm zoV+kPS(c9x!HDKhO2|7wGS8Y44&zbnaMkkV`4@%5^$ksR(9{|{?_B|EW_zx~+nidJefLTBKTdl|#9GX0n^ z!QGEaytK8fqN&<+-c>r^5yC{aCqkG+X%+v6dMzC>ot{;5wuu@kQigB6=rPIRAY)m{QytpY4^OPdPI6c8s{F@@2 z#Kuzf%4>4Fx)Pt`uFlSOq1r0=e8OanhUp` zsE=TgbFuF^5eh43Up1>N?6pF|>7fBAo1rBVpVTtxT{RnzVj{emYB-f*;^B!vnBs@H z`sXVtJy34F;UcVbAU_<}0T1`ck+&IA<0iQ#lb4dty2{1bF-cz85qWn@91$<$5Vs>- z36wq6%Ql>o3b^6o5`{u=fA9)g7%ydWATb3esf9FU;f0WD8k)s5oKy^71mmBoRN_R2 z>*(+(C$hh3=riXF>3J2x8>=kTORB$nnm+{^us9M8&uNUW^lAbY%$#0W591Zd&#%J9 zBN~~*_t&^0J9?R@QCu~Z9Gna(;|!Jb@Soi}LAUiQ3pkWeWBBB*0a6Q| zas^}|mR*7#jxgSq&%ID{m^3#WW$QyAF4aq#6mdDE+7B~VOImHCZHxpv!{l(;h2HAm=(`z9e_QHSkpBAa8YpL7 z;ZXvN{{(Oae+PhmXF;mZ@v&CZej9SFs|87>GHHp#AeBXHn~OOHiKjk=vw@ok9m4Tf z1GdbOin`*eIpIPG)#Fq}TQrwX5cf@7+~^I2+l_W+qW>BiAFq$Md5mju@=}!eAstav zf3IBaePok{^9nx|_A`(UUe8rAsQ$JXe!`ThhI)0j$YUupm0U%>c9}eR|yWwKdtFzv#Ar@C2 z!@3I7%ka*76ixyxdiHOJ3&8 z`zXcjIh0c6l*Yx6&Sg_+CXs8-q%x>?`!tSmA1_6nYL*v@?|uxE;@EnK$%8)7V=Kf; z7x&y|hLys&CsltfxH=tQ0NotlAhJDjARFmXxCv)Xh){Ty$@+xbt`W=sv~ZK0#Yo;P0{4GLE` zH-wkKE5{dtM4ixNg1sqgcG($qtkBFxUVRVtDSMTj%f{x zi}KjE&;A>x{`bPrxcCe;+E*Cg0hdM9{YKZ^NIBiafV-5+%cgp_Qmt;zz``Zm12+C# zxI*3FrPCPq%*=}1Z>jj;2*Zgs!DV@!IhS~UKz7W>)Ggm*rMN5Nnw0vepr4lFDiR+p z*M>q%Qfpu8(tEU1E77=C7RNbuEeMHQ`H$s6xW**j5BIv@Izp4ZGE79WlOGoaO}*Sy zGnQVNbhnr0Y7mAMTEs^&bcTd2pmRdza>M%>6K|zfuD#w`i$nV#91b*jj3y$X*XFR# z5oP`ab7m{&wb&Jh@%^~?O=(%n+#`)S>C$1fu)r8k;tnnKP)QCos%Y*LPc>x0_d428 zx1?|zLiw|BO)d;$RZn#eoE|{z?(s+*ca&7O82TAe9}hP^yZnzOuycu@ugfDz9QLDl zOhX=Ufy<@tqG3-d&!4#c4KIW0>R)^!xeS8y6hM3<JnXi+}s9GKa~X3MfAj#eKY*0+BawMf-lJjjE>&LbIyk*;z^$3I_w;wduY}?{@^93 z|9tn9s7?PcK3+Sv zji{asiGGB!jmf)#)N=lAoZ3;R-ju-;WBm?^+bTNRLTkf&?n=GnnH1N7pWie=5l=rX z<#wyAct^pTO9tMvfjjM_&9;kAJ^>Q1f`W+^wc-;r_H}-0c*JscU=Z=<`9TB{#tMMFZbEFARlC~^QINR~kN=TQTHN9{j55&9q zAFMp?3d#P|(T+Gien(5xxL=<;E&`uzIF>}?&dV&u@cx%vC6~nFXBo%ty1J@!2As-? zInN<0Og;q@6_lsAJeAP3|8Ui;4Tw4ViBpuq$=NW}*YV|K*y6d2YQ)bKlCs8!N4FHG zyPaW|Q8YV3LQ@cn1KhF^SBbY zT*_1*N|_|3;r|w3+B!fHnziNhRxigY#I>qV!>ArnXja>(KA+U^ z6j#y>Io>mhi^rvyuGRV|?jET}RQyN4nHb4OdFoD^Qnl25oOxo~DeiI7;665`OUgSC z#^f16Ix;@yU4**PFUxuz8c2D>G|r)(`NvXArY53)*C`5irNNx-~NuezR4TprRFBU@jR>959Dr%r* zWeI}$$m`)&i2^Q^8w1nH5JE1Ql8_}=vd4TQ@02LuLb)+;w`R;h(>@l%-yGe(IVmB; z7!MIx^W_?YrrP2+qvgE6w^Sv#w=^U-1|A?Y2nL#bS0bM#sRVso4WF}heZF$h{HJTE zn`@1!s$4X2{Ftip(N&c-jZLGQ@+Xd-I6kMLHfOA~I}`OY?WMEk3MWR6IOS_UxaW`CCx6(~e%r9T=RW8NUpf@DQ}H8Y+F|$&$L|#U z7*53RIJvW|ei{<6z0{?F_zl4Cc>MeV`7rGyuUa)Exsh=OVrb=?re}@mg z)TiF>`QU4P@HhJKdB0Ekn|$!&eE9sC5B^afyzPUZ>%-?aebS$$`OMYx1d>Up$Cdi9 za!^R(=JFbDhEl8VUMMJ~>6Y~ZVobj ztjJ}{BC{)&R5nB_>ZeteHZ)W;SdptsqIu^>BGIMwwaX)mO3NdqRaLcR%Rrblv!r2s zL*)$>VTqMAOwZ$8q^zklQePn%n5rb2Us>CLtPK_83u`K)Di!bz)AGW_Gs|YrEGaE4 z3ro_5(vmRZtag@Qk;D|a2%ObK%1WbUOUZasQ>3nI zb$M0sGU`sXQXAYYDJzRKFqUUU=GH8)M6+gBG&ELMFj<+=E^0z)w4$jpYE@TMmsQuH z<4D&US6y0JV_iCJT4Y>Ku61cq;nZo7u{mRNCRo$v&6_f{Fp`%uPNC<`Lz3}S@f4XK z2vg-g4OjkRe~gi)=s}0VxgmhROED&moi0A>dQ4qG>t5g(NH2HM8&9mnw3B8%=+IM; zA~rAm?y>7Im8Du6b)M)s_h3p)v3{b{AHHiLiQw}%6X7;oe9I+7RoK>Sk_}g zmJ6?o7Sc!;o@JSk>%yD4m9%^p-aU_pTzKQdFnxgw&-vGcVi%tCz6tYOc=`k;EOg;H z2b-|eh0icZz&aP6bH52qEs)x+PZQR=@JAaY z;6@joev=8CU3mH{CTwxx>5rJu?!p^Ci?p3CyxX_h?ZO)$jp;jGc=~T9bh+?uzsYvt z>EoGDuTZ|#9gH8%_-2XU$~aZ1d%eVO zV4SMc-6rvR#;F?JD<%FV#;FqBbrN61IJ>-ip~SCdoL${rEb-Zlvx~b!i0A#au=%BH z3!2|3Sheq9@tndP?d_3}Rj}ik-2!&JHY8-(Uq!-0i`%FR1uenTZppF=ZflRG^z0T@ zSe!HD)YT{tj{2$A+=AveOPFxwMVaVGt8wO*;dd^y3R;e3KNpP7WaOE{sRga`dI~1J z+HmHOQ&%!;LF?2&L38j;FxPX;bCRm%*gqhKMD=exAKZ@H0IR#^h3$(M$EuuLuz;+s?|=97JWb!~$-@{B+XVN0;9l6y%-fjsY3j1Q8C|WAQ|6Qu+;X5Ug>Bes zK~nZ!7&hG3^1cX{g4X+Z4-|W3+l8eN>Affvh?|*aq)NkkpxBGsE@hfJNpl}F6}0}8 zc#wAk`Ez06{gF})@%98@_g`4heA`OqX})g_!1R{y5EQh0Q;@1;d!Qr`)a7OSikc6ruQ6wuy?XHh|db+>O&gs2evSferT&7DbcW@tBrTtq_Pg2$-?kNWQa<8QOZv@98 z?HZC>x8B91zm@y@cn{P{fNe#T>WRSbzrGK?q)9KH^I4iCjJ)|Tk0y2h1!e<1NnXH` z)bYVgqJ%xW4w?GwL}s>Ucon}tWSYK&jAcX zfo-{zmG#vYDeZEv%DUf&xktaSK+~3MFOz;D%I^H|2-+eke~6UcZ4v%|LvriZr&;JY z)fV0ZwHaXB0=DHwR@PTrq_kVSD(gO5wS@(mw%k)FZ6V6eVDWt!3Q73}45N2jg#T34 zmfx_@C31fs?@?zvz_!I~%VQ{_&$dWuKlQ4t`x;EkDDZXGq3XMj_iPvIs9_y5nX~mi zR*Ehp9_00~NI&OXVE_6IDS~)AlkD`>c1iixKT%AQF{6vaSV}UI6oWm|E2$Vs>8(PNTetp=N&j2!@8dmCT>#taDb;^`08#a2 zB&A8;$^I-&5=PolNs=_W7sFRWPm&killDt9q!WpL9?jMvCFxe;k1VOKFFYGPx~R!Vg7TSfFW3P_>09`(_s3S6d|IT(9D# zEyDjYl3TY9fm33?D);yC9w_>#s!LC2WqlbIDQ%=zW!<;I$3|ONplQpbu=ER2_D>ES zL0cqcGg2mrO4=g)KT2}z)>B#NVAU4h14aLP+j92HRjjP9wn%C7y(;VeIo1zo3kx)D zsh%!vA$!)pN@c$agty@Fv?02yyK%JZ^4eF5#EUV9EoJx-F^Qx!& zJuHh*B*&pCvKU2fy8$wKnmY^jAYtIAWB@6$Sk#@PrJ+~w{)a-okM}G9VB1ZU?+5P@ zaUav8eBwd2*ot#6mfS?y?MT(9`bx_CSzeOe8;L@Njh{(%ioM6qgG?&>@Jl4uEnbBt zSwyzMz8Zxl)!+RktTJ7)`t#q}%oTUp>x7-TcOkM;$>S{{Z7mi-%v}kYh%g3D6ZtE& zlFxJ*C6ZEV?NdI?Z0CCMxBmn(U|)^8_viO65F{H%7QIA_27LjvZL1umIDD}0enYO) zyh`kzkQyhnO(=_+Mcr5|uE&apq`rdIxetN=wr#glp}r%@8rw|LyF-**xDCx}qxQCJ zC9rGA*^J)Xnv`i0%T8+fcvSw7y+G<+@tEBqH*+5YcKxfogY|W)Jp}f*{&ocINz7DiuO7DVXZT1OveEKX%Qtm;@%xV%qgPzc{Tg~MisX0WtMO&BCEoO0+P5>5{H?1()Jxf!| z20rsqTEUhdJgP#$kjI|&k`y-V<{m6)-dzxAF9__0$kHIPfJ*7eVOy8eu)Xi7M)SF& zeF^z*SGoA3qaAh~h6*LZZfFT* zT^K%e^K(WBX0Og@0pxYiz7!chjeJrIw)|?B3Vq7wnXVKiAnFtZ6xRzb$wI?=ixsql zGQG5~kN)bT)ZS~v=4OmrJ%-d6!H~+-c~>3Cf-G&w+Ae6VONY%oXzyT0$bkEF`CB-` zFb-QA@k2RJCzRu^s|7>QmGoXGY2v8wmE-^WHTucOXEJWz-SP5#~u9d1RpmLnf%4K%+5FW(#`nXKcr0x`xV8pDts7r z2fcn__+aDPZBCukKxO5d=Ry-{?NQ*5V)bYf?oxN9&W_24HcfiAVE~mDYGv>5FV)}< zwTErf3KZki8Eem{XlEhGcySEjGt5lq; zn9U?`H8C#s+4y$k=A~z*m)NL3v3sa+&gf$|`Pi)3jESDs) z6DS@IfrlL-?3Fn8e12xQH2lYOMYYn6cj>B!EViK445xbVc!ul<@34OZx=VlPizK8L zRn$8Bdsk}1htN5u8V}mrK|kUaCM(xOmvWu!pcpr;_qnuQ7!VA1Hm5JR;kUn!4=exG!w(kcr_s!DBV?YEkoB_FWXys*WsKGO>m6 z1HYLK!ff)MXg&)&XuqXKfixB_catiCs|1md=>!e|+4nW3J-%d?^b2mKwkVZ+Ozz`V zGBzq{jWN%9+7weEM%Vrk*v&z`bu0`6^>^|p0f?WF$yOLjQfm>x;$}}@PQbU2&S_L! zcl6rPEixN-+GoB_(S~jGdKkU_IdwGo=!C-UhQjScf9$kxr!j73-|V&@Lf@#4?zF$A z`^nYOa7rKrI*DEOwcLf~VslkTZXdm$f>p7q;h_D2Jni0LdcTZL+j(SeOS zpQe*xw{XL&IgHm=R_wN-=YxR3jvjsNkJyG92}=8v<~>;Wwlj-Ru9F-K+6&8oU(s%V zXRmZcd}m@&^e_4i1-=JEn_QS$P?{& zy9SQr>h@^R-pexR?Y2&Sjy{n+0yTS;v}(mcD>?#6Q7|;7@!*q^{0_>8o^pD@j<8J> zlE6`>0(o0Ao8qufCqu>nis8ZvR?ID345U$@SsV`??UEgtfKFGO>DW5TT1j*_q-WcA zzfYzX>{im;ZGQoc^q0-A{AAPqDtVj>dAqkaV2b_;!l#hYt)Edw+did?(v{M>nQc9W zyC0audXd)51Zkav*7-~8E)Fm+O}gimn6zA*9T3+}P#oLKp{#V%N2B_dR&l)9#K?mJ zcCUf%amMJhuazMj-mF?4-U2<_q6X%BvSAj+8frzm6`ctJ5@EO<*NK5S8O5xJCEhr_ zrD7vS=X&N7@~#e=SjuS(G1Hh(F&VRR#pJBx_!uP zG_7sI&#I1MvC#ISKOk{JjrK(>xj9zTHxbviI3_q*+|EVqda>{ZCJhhyGFkKGnDbpp zH-iuN;Pe#b{^g3*X1C~mCcANN(b1;0+kbpni*6%Cw;7^?L>EAOT6FhFwgnrN=r-DG z*=i%YEIp-ia)r+X-P%3mwi}b>H5L^?UUAjfgG7k2;;RwwQ(pi6Eb`KRSmcC~J(uhkE z?kZ{-DM>GpU2K&tqIR^4n*UtX{0_Hpmx{ANgN<@v%IRE8nLlL#cl6yRyURY2e7a2b z28b$g4xwp(Ui3*#0WH{Ol({0`{uj3S<-Qp;k<%CHNST=*m36B50Xj=-s1tohysZVD zYM$t{$DmS?wZ|;K=5o%=w*6<$)GVa6X}J9rtW0zy%l>jKG8`)2WgpxVqXN-szpfEO zo|wC5O)=ybws(X^$)sr*bKfb^ zj)zp+SsvQeZjS?RuC`}EHy|jkQ1mM0S@xwo(5OT6v;h9}TL+ot2x6y34tYYgQ8l%z zrFayRGy}LgW;a^fiPoZL7VLJ)eU3#y9aL*OrL_qu(S|>YdPyp@VYgk2mb==J>$E}E zb1p9pkBTh&%{N&`vX}NxNXFYsdror1ytE#2X?iZEt*TxnqAdHPmqbJu;q4f3FmN1T zZvwf0ETTKn{M~3in!W%X4zaqEZDZc%1v`}(cJDu3QW*8!OZVMW?^%{f`D1bPr5seh z)1CpwwVBLRHU*~QLbvf!XfDHsv?0r3+ibkTtiVLMH(u3XDMmS+v9*kvloMwXk$d$% zHY#~0xf#7Flki5*nWR9n#Z3KFk!z!^8U)_eOp?n9m`wW5B;1Pw198>Z+jonoor&rU z6#xI}Orod#+0fHI=W>@@)K4BqC%8q@BY%7&u}3yTs_ph)|D}6mJ$fYBEqX$-#hjJR zl&hKBA7^hWx2T53S$f5|MP~uy;}*^QweS*GqkWe2SgfYo5%05eK9gJI>@&J{AO^op zmUh@LaujjX;TD@W=mthELgdr!K&Sx|iW@M^m$yUYFb<8o?UnC|2&mbe_V53~$TQlD zW1^k*P`*wmwxS~>&Lp&X3kMCTTkLZvK`CqQZgz*g_MdnV{{Aj0RFY{gZHxVDjB41I zEou_jV&@>M*s-gOkB|i}VWS#RF-Gi#;hjTPKg;(zs2*>1Ns*`oJPo8w=)3V@^N`gW zWhID2r^>LUf6#7UBKMfQ;TXS^Pu zt%Qv^ohw(E`GyFHdnzcoIYnj81mF|u)B;&TqWa>@?msF%ciJbgG35ViTo`{riuoe= zQ9Cd@?c>o8h0V_iz7PsgDDDy3B>kh>7m@oNMa}Qg`Dv2zhS(cL&F|XRLgn|@k&~j9 zEC2`;(>!itBD`lE)zc<$-?tFhUz5y26b!= zky&=nFBMWx{D;-Ve^5>QhdJ>hrBhQbRLd3@!*jb8er(bk2+(u0{|Y-_-I)s}yTD|p zeK970&$=yFg}iPO5Pr3g(RkWNMbI_hB_s$Mnle9wK z($MDZKM<0##GUpT9AaXAv3E(aeWp$7L?Mwe*L)8}J<%BnyX{|K$SNUq+K+Mg@|Bm^ zCN1O?b1t|CiS(ZY88Y$h{+^Wc4C1hcN~ZV)n2_BY*L{vrbG}!+tJnRPS+3 z^L^MXT5o1&()4UbCnt|gF2i2k%T_WM*p96Oe`#h$C2-RWApHH`IggI1esyG1>>$8eO&&5~KflPXcXG$Nixy>lrF^>xE;en47QMoeJC`$tZJW>)1+z#MMx(=JCYW{K7{98r%RIyI` zPjZi0&aC-c*agxvsHfL8|BHJ0X0~ZJLq_6#Bs>K(E6}(E-<>htajNPLtS&hZ zVRf11-51aq$?xjsP+Wa9XfCVoS}l&`YVl{X)0DhgoQe9qSBqa)dsEJy{!3)vEZ1V~ zEJnR9L+ZV75*EfQ7F@fR?8SC_Ck%Wq3#TE94`*f5U&N>vPIu8wmo2!FoFk}P{tKta zo@Li2ES&DxPGoFd_737&vpH~F)~m!Ja!j_{g>nz$=;LR9Q#69cbEn(SzVq*F5OLmqw!h^@7Pw;I z?zsY_A+@Wl@ zbENB3(`U)OalwD|Pn6hfT<`^0SIK&qjZE;uZEnq>fpL#|TH`$O=EH0o8hNeZiKTdZ zfhQB< z)kE>$#ip5>NR{nW&m1u>&^rlRQ!KTXQiyFy#kQ_c{g9^}nh5H3#APJ9SJkLptt(z) zYPE!5E4hS7x8I`61*9_PSTo4#!kH8kj5Ob9;7n{@(GU$ycq3~xxa!W4ln2=B zv=_m2e_rk|O`U7@K9m7@Nw?2@lR+Hyq&sbj*1_&zob+ggQ`oG znbHc^o88IJe-GMkKJ|aYt4or+w^w%$%#XKMcQtg;!>b$4VJsc3H|{@^S9j&sL~W$c z)d=zF=OPq+KKc=2g?|L)m%e+}F|1wov$9F}YQZ^dSSMZ;mEDdg-V(*`bLlV0C3^co zNu_$eP3}1&QDiH|$gMPT*u7{?!=oBJcV~v{meK&0%3)_j>x_Lw#KJaLw9yiZj35&84XG%zvX*S3#EpgeV+DeMOS_ymI zlV{@7fo&+kvL|t!t2WrtB$&AQvP7iHh%;wHl&_uhXA7&Ujo?@Y)GPKp^`sNY zAsW8xKv7~F?Gd(I*3m5Ii@F>nDr#8>S)sf?@Ogj~1XJ(|U&+dF%0ia2Bnwq1CUR_V z9nUmMqM1thL54))j9S8{7*0AckCJC`$FOBC^0B2U`W8$~MaRwUjGxtDBvZw3qIJcY z`fdT4~{*)T&L~tZ`szf3{WZYq=yifL+QRpM( zUXAp1(B{qdmqn>ef_b_C8R?s4^sW)*$k!wNk`GZH2kgy6W8AbhZnk^=Dag(C4-aCb zzbqp?yaqhCVVJk!nHP=9X1fhkI2CKuKJ*&+J`m zJQif@(Y?ee3t7G;Sva~;ofb1j_k1=@aK@6M=h&*F42d|0cd_gHRFa$+K?>qyBE8_V;gV`F3a zJ!dR)=DX!U8@0W81zOs;66X`i?9uX50j*dfe8|1{7LfS1E8 z0A&^^`=QXcEtSdWzB&MW@lAj!Nsvr-wunXI@?=&L?7tF4wA)ww6-Dsd(B6t@v%iI8 zu!~IODuUmJ_Li^RK6t>Lub^csliSP45c(G_YO}BBNMW-sU>&z~P&E1}QLlx!+5O{~ zGKHUj!o@~=Tg?G7+?5U7!>zDpAFDa#$HHWn{X`I8p)mZ_gJdhdFWCu5J<*I!dK@LHplZp8?uQ zD5;DrxqP07UQh&--U)n{JsDNmk30r!;$GNSSca=dUSr(6@%P#NoK@ndI(|+%8s_$M zZW0;BY-7g1jh_?0?uJFi+FMpUETJVdsd zRif=(_5$#>`j3rg?Jq)KI&Wn&(KO*Y_O8#-3kY~l{7{tSD_ZC^y~ZD^C)XL+Be4Z6-7ENHIE?ksA)DI41%qmR$YvWi+S z$|Ptm&+aM$(JpF^W*;nQo}ay&%hjTD{ynAnlfveI6g>0q)WYUH_766pvfKU|Jt^;x zJeN>CeV*R@&nZ2}K$6=71(WvIzf;gMKO0(9m7Q7CQl34$2zOaUEz#_eMJ+dF<7rn% z{&szCqS=x_>R{XGEURGE;hyLTzp!xn;gC~#q|K`R={TpcC6$E6zay)hpa@;(!Jaq< z2Przz7i<@KVzV-UGiw>9M5FbUiyEU9Sv95A6&Li!q3+?Tit37*Xu}0rR+a>&8!)}H zp{}a*`mEZ;S@jiFrP0dTn$dj(Yqn0P%FeQuRg^_*>o2$V<6jUhrS^gPxu=oY`{tzu`&X zRLu!ct8&200B<@23j1_VPZj771Fi+!47dsKw}86Ccv|>!@LV{Jm3Mqselqf1z;6m6mTuzt$>>V?*-fixEb&O;2yw?49j{0a1`Jnz#_m;0IL9x!?T>V zfTIC70Zs?p1y~Pw0PsG*3>+!=2;eBdy?{l4Zvj>Tege1_@L1T=O@LzncL6R2JOFq* zUF)qw4qygOah(M?3UD4^5nvr) z72uz5%!k z@DShuz)t`(a7yfPn9N2276TRmE(NRtTnV@q@Ls@8fR6+20(=(m0N`H044f+a4&W%j z0hpkR0E+;t0B;3c3-~bLCcwu5cL8n#JOKDIU?gD%S@BrYC05foE?LfGPqW~uY76IM{7zKO|@Ls^z0UrlE?pHlMdjKZ_9s*nr zcnnUt{RZH8z(as@08jlj@&m2{d=PLu;8TDn|E8yBFJJ-S$ADi4%*MFw1Y8YRyc>K1 z-T=4@umkV_VA@OI6Q||g4>%ss2Al&p5))7qumkWxz~eBbKLvOd;9kHh;7Fz6>&9h( z*?`{$oDO(1{LL!B?*gs`dL>e3_GQBFk35$vndaa6aG*cy2xEinn@T_-`5AfOp$d`rxBl1_|1DpdmAMk0wn*iSdd=PNbyT}K41K>Wu zZvdv9W?8!cvjNZg8}tG2LBJ}&#{t&@)*Xa=0duhxu?O&5fQJCDK7@Kthu!!9^#Xng z%lY|$d$5|+8}x#q_g~qpu-H~gnfhrdO1+jL5J8p>8pWX4Ei}f^bNqbf&NG$J-jNF^>^Sm z{`8P_K_VS-()Zz4b9%@+7cdRKME=qszjdIm2PuxO%g+Wq|BR6QKbkl?(o6e6p98vI z{pFzF3Ho`7Ui&dZAAT z{eoWT<)9bzLSGH~RiI-UjF-Qb&j!$!f=*d`$-e{i)u5l@L*EDb#$NKLr9y{5_v@c* z&<}#{r$5s{Kk-a|{>nk02)bYSt3h7`x?lMlKwsNS`5mBd1pN%Z_Jh6)beKy|`K3Xq z`$6~9ziiMy?1erZ^z^g*^Ou8u9O!=iyBhS7p!@aj2GFO2?$^E!(3gVl$NxUimx1nA ze_GJ8)_@K-+EYH+px*;J+z3zlbkHB|gET^cz6;Z9nMu^g`!9Ui&`iaBDo}w;J^ApifMsYx}za^p8N# zN~9xBo#_Dm#F4$UAM}x+`?Zhj$FZRMwJ#g=%X*>n%+ONM{p4Q`dR;H{)u4X`bU*oQ z0DT?ke)D4o=+A=gH@^3Q{s!m+eB_sg_3Hu9ecKOu+ByF7$8^vy2Hh`zIp|mQLSGGf zHRyiw+W`7apwkyh!!L3E?f|_Fbl>)azPXq3)3E;D)=U0u&|d?6s!#pXLC-qZUw_L% zzY6p$pZu#qUk19LecAx}8qodvuLJaZK=+gXKF}Wp-FN;+!TWm2pAGuQz0jwFe$09P z{ZkJ5NYMTIXEo>rp!@be=vRU6H$FN*uj?iMKG46?OZ{mB;n#!i*T31IcY*F_pQeL; z+$jJ4EeCxf=zjgX8uS9t!KSBvZvcHZ=zjg%0s5Cf_v_z%pl|3Ue;W30p6Z334f-C? zPxs+(I_MvOKG=s|4tm;XfBjeu`f$+w^kW0)=Y#H7eh27b(69EXe;?=%fqtF`J)1b} zKfMV06^ZmqSEa3m@5I1)W)#w$kQ1^(xR0|#dY&o*{fnUc>1h?{4WRq!(OS?S1wAXV ze8gG*CeU95eTol#7w7}W`1=V5K+gf)Pfi&S@EXwlS^dEul$H(KK?*+ZD{@ROl=jHkH@iFLYhlH$)65E3~<$cl+?9+gb?Wy?w zMx1&x8T2ZY-$eRNx1nRWw#K?RK_2Buw-4#gNi0X}&1%pGj}2LciFCxt#|F^nfgbXp zlaCJ2*MWXF>1+J?;6CTM<3iSz9_6r}4D1Np1bWDW&U!|H{uJo{Mf!dI^~^!KdE-OY zY>#qSPZab=K@WM*Si^t_rSAYZVK}bQ!}SGo))|x_4daT>8v(%M5ru)c0-F&2* zbwSA5&U8a>_Z%NAZ#B{lyHJm#v;EU?-}?@v+syLDd8ebi_aNN`ll|w*L!e&?dJfCM z&l$J4B|pbtKm2CUMK22c>zRyn3oi24i}|3h2Hj6DZUX%=(Eaq{LC{|V-D}-TKA!?T zaIqdI<^Fu`L%NTU?rh{q!_VDb$}0_y^=X&*^O+5L5$JyN&UDaQLHFac9Q4hgKg_yT zdh^NltVO!np^(M@g&xP}%vDFN4YsD;2~8!xeEx9R)R6Th+{dLuoOC{ycpUWWeCT{$ zaq2Yh_L2`i$G8miD-!d&#sTY@jC2nmT_`b~w(Ijje+6_uK5hbi`gDIj9t6D>^zy{= z6Zq&ry5Aw4A0PWbKRWEsN7`}lk3sj+Q_6$SWxfx3U-BqIy2D84$43?D`7`|O+*;7* zf$nGLHi3Qz=w5yU`P>EiKF}L+pZ4JGzV_x2(p`ON$Xdj78@jb>#O&S2~v-WP`Q~=|Y9tj=t)j z?hw*#K{~N-ws$&dKc0Ktf0@7Cm<;+>(7p6V+7G%7x|e+;zc+zCe5SSwX;|`!D2Q&swDGm=m&U63aoH{k948v2*?F z*#-K$pg+udn*8fIgmi85yz3#q$Kd(tC!kjbP|jvoIhVz+2PY%l(yRUXnGbsQH6iP( z;b+B_-0}+yDR1P zqZSVit?GAYYHQlspp(+FdU^usq2Q&~mw?25|53qeYi+=ZEVu4w1hmu>0z<9|E=v7+ z;G#VN>kzT%x)ly>W^i`uR|8}5Z&zQ5qxA#^k4M_-;F^H-Jza46xxqrKPE~UBdBNWX zto-1{fK_u$$1S!VHIgt)k;l{tfpce`Wm*3fIB|Qx`Z<%lA2H*Xv$zh@TGt?BY2f{Meu=ubx$Dp z!xW4|5bjOk?KgS5kC#5`dO+8;Ep5arY1W5n$PweQCy;po5SIoQShE57z8R$Yuarr_ zf25)pV25rB-W9Oc1cGk|tUm>UPo`QwNew;|w4O-|?n$$LmB#xggTdB*R_js0^+#C` z9L4+F`vqS~w_fQN#EWTf%KdNCgWnloeW!nLOMmM}{dxbb0l{w!wr(95+>v2@dtmVK zf!2Qy4B`c?TQh>M53)K31>YKCy)`)a;b7~%!MuNcNbtu)tsiFwpUbqiW%B+9LxZ0T zvpyLbynC2+$1vXib6D`XW2_gC4*uzA>*b?)zwMYCzLjPD;n?6S$60?rHi#E<{w?>v zJuV3RuH$)q`}iOxqEC(wzBAmqdw39&^*4v}{x8Fc|LF-=BF)AVgU^nzwwxGz`9$kC za{r4F!P`%^)|?dl?n%}|C-J`Lq~PyQwf=B&@SCSv`%e!3`V{M5CkIuy^ z)3@#@6+enZgw2{hKt;s|=j}ip$5KcFwg}<^wpvtZTPRSoX|2&W^zRt@DIjZP-sTSo z3C7^lbv#|LaGNyjuc4_Quf0io*7Xkw1#*_S;RCPXNqnBB>+JvIVC0<(J?r>D_tQ~> zLP9@I!?QG;sNoC^uhMX_hRZa(UBmk|{H}&iX!yK_FKhUgh978n)L>n|hG%IwQNtM; zUZo*CZQ*yBhPP{YzlK6|T`rwA?Sib4C38!{Sw)pKjZNodjn5gEGd}B@C1qu!$4ADE zUQ}ONQ??Y}4lJu|z_$Zgc@xG?I)B^(tG1zT`4T)cKv_y8PKh<9v7vrULw(tpy3(@i@NGlGn5lCMi>8lR!pcXF&B@El88-$zSeMS4 zn>D2*Yi!QgaXEQbVC7e(T8^>wz*le$ynqYCE?uvIrNE^G(jjOoC8ghm1Zn-aAC;2c z56&`ZN3m%sDZyC)scFH=nkZ;NS@Ng%1Gx_P;5=LcC)~zs|J2P3L%6{!M_=G|6xy9) zMR2ECd5%~F(=%Vx$=3jqz*Z%lf11hb+jpK3i zN5-sy>3ik+2CiBN8Ke#xfyivr;Mo~uA;cnc0tv{Y0;r;2 z&?zGYjHbspfhY$C<^neWxOBxGlMEb!wvf9F#pIwspzvrGHTX1eJmlEG*%^#w2Bir@ zV+CH4F*yS%7T}j+QT&0xzXlJ&H2}$TN)339FAPgPz?jVHpJGO3YP%Ik&CI#@w2OwRf|W*%7rm1uUMS3RQU+~Q;hDXt_lQBOuhEK)S=%>t$jIl zXnHiYc5>>_#i_NIr4F8a&42H>C*=$al7S+O;lBF&62Ffnuf|HH5KJqG$Rd5YwM$4C=wH_u#>TDX=%MBWib`)-n1i~ zQ7USd)mf$WOUm5VTP(Fp-VuC(R*CP=>g!9d$20&tY&BHgP=PEiJibA5mmxC%Q$?aI zf0>o3WMzdk!~~OW?jO*&RBL&=zKsEsajr%Mthwg)E(djOEWNr*&Nav6y2HuEK@t~| zb6sh2-KG-;tod1Vs})+NDWP?%XGX@L(ZcNA-P)CG!2tLPQ&%p z_?FMgX^7S{}(6X{fMN?TtT{I$JCt5lD^05IdDDb5+Bu6c!)s|)kK2E%6{?)=e|kdUG}zgcGp5|_mMlYw*RUz-vF2G68* z{%ncGE{XX$ia6C9{x_$D5aW7HfVEQrXT5|;S%N9&3dHa!QLV{u)^$y(DjjD>2J*;Y z@~ar$JHyRD{7inc?%S;M+nT_9l)cGs>%et7f1S=xzR9QIU!yIWJj&AKch;S7bQp3KNRppv zKh3i{zgfrT>-=WjOa9@rIrW?ToE9h(EiTKfe|y)|g@z7a9XX<^2%sW;7#QsXm zzds>=md>B0^CzZHj2}dPirDaP_B}@G{JY5O&KPii4Q_%;!OLkyB8|b-3p9k z;jWP7y65dMU4L!@-qQIeCE!hQ29EH_KS}3LP=9GFi!}LjbpC{DtdP#XFoBRLkBfZr zuh;px0pJd%UW2>bCx4I5Kh_Lvogp#*7k%>Q(J&&6OURHAwU+qgFTYRaKP4eULey&T z$-m})m4BWB&NWegR_gqT{okeYADd92i5l3V^E(yjn}2*=-Ee%kgUM%b_xt33f1OHE zY!Ygin13knj_$kCPUFOez;969At5Syn9#+Nd?P0ogtk)@JQpC0pOK%L7dg#))t}#? z@(mcLpt&a2Z}46)72M^ggpx?9m~G~G;!~}tCq51SV8}`gsqp+Zd*Y9B_UGMsQsIRd z|12J#ZW+HT9^cF-i_&@RZ3}=5n9zV$OSK{%5E#rs8;qjgtFRyrFOATQ@P)I?gilXgvOS%gm4Q z_~DkB_u}y;lOM#+6Dzw|Kkl#7~*FU8IL<3dBf;e?oZ#YIS!ttl5m-=#06b1LNwOPDeegF*Imz~6HSk#;;~lU4;Cs0t@_ry|qI?;i)Odcc!B8kye0QPo ze2U~1d)vSd)Aw$$Rj23oRt)FK z6{o#vJiqs1D3_~c&BY|mcJX@{2E*qq8qe>882(GH_>N2C`My1aDgRxK=XYWZ>Wcm8 zG;cmjfoHw^&X?g-x#HbPjpz5L49CdTvVN}d{9cY>id?bA3954V{R+ds@zou223FqrlZ9iaH( zcgPGAr}6y0kHL)7 z3gEr^cePH>^L!W#pHFH$zt3d2Qm&Tuca7)y2@IxQeyc0vMb8Tcf3n8&J5C05#rFyt z&vObGjQ)IEmrTk_ks+Yb{uuGM&+Gr%xau9zn^p64eq znDnn`Jii}c;5P&e=b_CibUJTdC746peQ3>V$Rpa^H9)qz1SHOX0 zIXn-D!SM4F;8|~CIIPo`jtmLOq~|w-EQjZ+Fc`T_(s+Is#4tv#mUW}X^E+n-b;Y?x zzz@ZrSwE%;)v|u3)APF^2J@Whb>O}D{6MGYIVKDj$Q9?l9jo}{cias0%Nf3?@gwzk zH+J|Djpui445r^-(|DdE!~k<@&*NY)`tX9r^BgsX5pu=5|0cbjkBr=o$Hox(=eZLMr^^-Rh-f^| z!(li_u9h`ZG}OI!xXvVoC)B)#_2|#p63xU7=E76cz&nKVCsDb_@VTY?p`Q( zz7)m~I9b)pbDeUzzz^>vDJ=41EVMhqC9627bP{4SJ1UE!B$JkN1rF#0eE9l>%gn;Ih8`jT9M z(|Den$bbab!RUDw@R_c0Cq!IE>GV9$i^0g} zO5nZ5dzBCVIb9CF=Vf?IuK0FL<9S{dgOT&tGZmlwo|xfbx#C`_hqP&EB2Q(p68J=nDXz{ zc%J9NaGqST=Y6g!hvxw?79Ao@>OQt~ftV z;~$@@FxP>`@FwtVSMJ~tqfQt-T9wap85xZIX#?I%4nNfCYfcX_xw8-OTaD*AFAUq| zYFTez!7m4%dcyMu8BD$FHJ<0* zFqnD&Pa4nju^5bfo{+1`;W>p2MsH_m{KXn?E9Ts(hrba zmi0@G->&s!qQ;+|r}*Ld1Pq3s`5Mpj5g3d-*J(V@Ic0#@CHzR^c|Huo!*T_WV^#S) z7mmS{f04%X+ye$=m(T<}{TY6j&cJWe8CD2B`T6E5UCz4GLri9^mn-&fHJ;~MFc|*# zYCONgXMk8F9MX86zsO+ZY~Cy9E2ez46t9?f)==YK%^%bR6>hqJb`e;M6 z5&x!y?>0}HbH(gPQDMoPNCdIzak0y$xk%-;ktJ2Ni%^KXeJcNS18 zO_*en5UDJ0LTqB5rCw<*Z>+Aq-qaJGHC?KiF?-78;fRT`8gn13MP7B4TA~#Vcxk?_ z&Wc<;J}<)dL@UeW4eQF%s>&PWzlcOiYsw?#NLb%k#{Vi3$*rtJ`jTi-K3>MIm3MC= zmljRB^Oq7&6WDk&^!C@IAy9L^hye_2wtw4&^~NL58mxVm^II^gPAB~cKr zl7DIvSyb9k5z8=rYgrE@yL>M3+V?>g#Lk!Eq>b zX;IhFva-R#7fIN^&xm8<`X1E4dq!J7L<`aP{n&rX6F)y4$e`A8jo!tuHr? zcjeA=gfNcvi4ew9T7{oetEC~P(X&b#rlGeJ`^c?cjz;HKmo`QCErZq$S0{|CsaPI? z4XQ1Z4u~};9G|Hqnje|Yaa-GWbA0+RybS$tKIJkiRt?&KMaL&Wu4Q zS-cAC5mxLfLNQJ=p>$ffnT>&`gcmafVxE#@7^BCTivLiA<5^j~}S5snR+|?W9 zx*UgdW6oTiXN+`ZQ<&D&t(L`3KG8JOt6rv|FTL?IL!t^Y45vg&CW+j8HMJ8KRV=Bj zQPS~fL}>}t&-7o?M5MG+k^AT+ABJ7}?HXN(=^qgw6$R)xAtLIb^&ex`}g3~@3DX%I{wy~~~y!5=!VXwM{mc(sBYAP`Qx!Cs{ zBjH7}XU-~#cuk)0hiDs0rfG@9#=F=9SINfN7zanE9R8+Qe>f=+rno4s_W4Rmca&Ri zI6o^L$cw~uz{7KLaj1Ir0 z6dt;GOQ8@vBYd3}!S~wiNDRU8YK~2slOd$a+6M6&#}~p)LH{Q!mH3yDYWhOTzwB!m z`i%K7ow6_-wMAh)+xmO1d6S?4ODdv~Idw57Kn=kB=~KfsFkTgTd1Y9WL@Va-AMbIp zcJwk{qd1`|IXDTD`WY(e;aaGT=(wbirmp&>e7#OIQP*C6y}z~v{1=L*x^kTg*G zDA`BjwHKva`v}I@k&Ym5PBDP;%mA7QnaH5W0BEX=CaaQ*;{>g6lt00fu327PY?g~Y z3rcvR35K~r^|Z5IjA;y4Z}Fa^EIGsoyMpI)$J*pYfL0R!2(9%J6SeokcdjQC{@)PNwd$2 zT+?ShMNks0YAB?bqrPYOHb0T5L&136C+a}lS9`iC>73!sc z+aY!aoBwPW>yl5mLX0VD;-nIPT8`+VzkjV(F|ypkri7oC`k6WhuZN?UMt`e{8Glk) zZH?MM9pce9DCtfqU<-I1^}`y`q!z1(!q2`(K=w6!JC ziZ5fI-YrW^rxi6^>qIIS7tU*_FNs1oDjV=bptQaa1|HUBS!q>cMR-woA~w#iudAR^ zEGop#VB#zRRG5s?&2lfxKaG#-?+CaxEjM*&afK87mg>l=zzG`qaIyT9N6vfe?NO?nTWGS5MDjXr@Wp7FvTy{onQ2Ng=jt<5T5Er+A-X#Q>AUjc`2}&yV1t9Q+7*CT*S%I|nK9sazjp&P;i| z49i%@pxv>?8JFs_4A+?dE#_Gn7UQ8PEp<;ku}Y2P{ntHxFKMB1u@P#tFC1IQmPFNq zL)X|y+Ka@Fqf4p0Y^rxHGlMu| zE`B#(7QUaUS-zVK9oqQT-A<+x>@v!CVi)BETXZ>3hgzg|Ae z-2FLr2deyR8)dPn$o<6C5oO+3v%@O8tMIWRI0!EGbXn#ycTZzXx^!4gEHK97xr9sJ z8GH!TT2SrV3mx^~?*4PI-~U?QeJ)R2KuWf#fm> z&g1;pyAqD5oPANZ)lPP5;@`S(`ysB%^_-rNR{GUv`{ncZX5Iacd*wh;o{nQMEm9(n z6rgBcuL32`Z65C9k#wa?EU`Xu8#n#x5K!mS%T~6_@Rn@5oVLJET?!GzuJLB-W zO<^@wh0rThYhFa~5<*`Z*Y~n0v3W|2rhSmT*J>rc+-@2;tpbMiA3yyDeo z_xO(jj02@=@}`Ju^UiNLpeRp&E9oJq%xp)%n@a}XBZDjIghjQBPrjECDpJX4r{jq)Yo`)vE?WZl^iO=t`8^fnu#jQ zJ6fK~>{_q5O4j;kwu)jDrMR-$jA7t-ywd%#RAh#}OKcw^A!)3ejix(Axt-^j`Z}tm zo(fmUnZjyg;y+#K$Jj1*`M~++Jx;Wxj4x3p4RF3TRYFPhVqDb<)3KAHtTFo&S<=)L zsl&O=wKaHqJbHa(S#E-eCrs2)yTy8(OT+n2nOPMw` zQv4IfMB%$pgI@m+1&*%tT53QM8ngxWRxd{dVp`R!fmQpt4Qkod>w6fU;!1c($A?fc z@wgPz0Q;0%n!tv~hjO{rS)y3f3-?PQm<gzk=Cad; vec; - vec.push_back(att1); - vec.push_back(att2);*/ - - Attribute att3("name", "VARCHAR(20)", true); - att3.addRow("Fry"); - att3.addRow("Bender"); - att3.addRow("Leela"); - att3.addRow("Zoidberg"); + vector v; + v.push_back(att1); + v.push_back(att2); + v.push_back(att3); - Attribute att4("age", "INTEGER", false); - att4.addRow("22"); - att4.addRow("5"); - att4.addRow("22"); - att4.addRow("50"); + Relation r("AltFood", v); + //r.display(); - vector vec2; - vec2.push_back(att3); - vec2.push_back(att4); - - //beginning testing of core DB functions - cout << "\a"; - engine.createTable("table1", vec2); - cout << "\a"; - //engine.createTable("table2", vec); - engine.showTable(engine.getTableFromName("table1")); - - cout << "\n\n"; - - cout << "\a"; - - /*Attribute att5("name", "VARCHAR(20)", true); - att5.addRow("Yrf"); - att5.addRow("Redneb"); - att5.addRow("Aleel"); - att5.addRow("Grebdoiz"); - - cout << "\a"; - - Attribute att6("age", "INTEGER", false); - att6.addRow("44"); - att6.addRow("10"); - att6.addRow("44"); - att6.addRow("100"); - - vector vec3; - vec3.push_back(att5); - vec3.push_back(att6); - - engine.createTable("table3", vec3);*/ - - //cout << "\n"; - //cout << engine.unionComp(engine.getTableFromName("table1"), engine.getTableFromName("table2")); - //cout << engine.unionComp(engine.getTableFromName("table1"), engine.getTableFromName("table3")); - //cout << "\n"; - - //engine.project((engine.getTableFromName("table1")), "name"); - - /*vector cmds; - cmds.push_back("CREATE TABLE animals (name VARCHAR(20), kind VARCHAR(8), years INTEGER) PRIMARY KEY (name, kind);"); - cmds.push_back("SHOW animals;"); - - engine.saveToFile(cmds);*/ - - vector t; - t.push_back("Professor"); - t.push_back("180"); - - //engine.insertTuple((engine.getTableFromName("table1")), t); - //engine.deleteTuple((engine.getTableFromName("table1")), 2); - - cout << "\n\n"; - engine.showTable((engine.getTableFromName("table1"))); + engine.createTable("Food", v); + engine.createTable(r); + engine.createTable("Sadness"); + //vector rs = engine.getRelations(); + Relation r2 = engine.getTableFromName("Food"); + r2.display(); }