From 1a9bd97ff8a0cd39a36fa0cfc5eb9a51f54980bc Mon Sep 17 00:00:00 2001 From: Vladislav Khorev Date: Mon, 1 Dec 2014 23:58:28 +0000 Subject: [PATCH] fixing minor bugs --- rudict/frequent_nouns_2000.csv | 18 +- rudict/frequent_nouns_2000.xlsx | Bin 55234 -> 55146 bytes rudict/grammar_case.csv | 2 +- rudict/grammar_case.xlsx | Bin 13278 -> 13270 bytes rudict/rudict/main.cpp | 1 + rudict/rudict/noun.cpp | 431 ++++++++++++++++++++++---------- rudict/rudict/noun.h | 3 + 7 files changed, 319 insertions(+), 136 deletions(-) diff --git a/rudict/frequent_nouns_2000.csv b/rudict/frequent_nouns_2000.csv index 56dbf6b..3611bb8 100644 --- a/rudict/frequent_nouns_2000.csv +++ b/rudict/frequent_nouns_2000.csv @@ -1,4 +1,4 @@ -Номер;Слово;Род / число;Есть единственное число;Есть множественное число;Есть стандартное множественное число;Есть стандартное множественное число, полученное путем удаления последней гласной из базы;Есть стандартное окончание множественного числа;Есть альтернативное окончание множественного числа;Специальные мн. числа;Может быть одушевленным;Может быть неодушевленным;Специальная форма падежа;1 +Номер;Слово;Род / число;Есть единственное число;Есть множественное число;Есть стандартное множественное число;Есть стандартное множественное число, полученное путем удаления последней гласной из базы;Есть стандартное окончание множественного числа;"Есть альтернативное окончание множественного числа ""а/я""";Специальные мн. числа;Может быть одушевленным;Может быть неодушевленным;Специальная форма падежа;1 307;любовь;ж;1;0;0;0;0;0;;0;1;;1 338;помощь;ж;1;0;0;0;0;0;;0;1;;1 589;борьба;ж;1;0;0;0;0;0;;0;1;;1 @@ -73,7 +73,7 @@ 292;улица;ж;1;1;1;0;1;0;;0;1;;1 299;мысль;ж;1;1;1;0;1;0;;0;1;;1 300;дорога;ж;1;1;1;0;1;0;;0;1;;1 -301;мать;ж;1;1;0;0;1;0;матери;1;0;;1 +301;мать;ж;1;1;0;0;0;0;матери;1;0;;1 309;мама;ж;1;1;1;0;1;0;;1;0;;1 315;школа;ж;1;1;1;0;1;0;;0;1;;1 318;цель;ж;1;1;1;0;1;0;;0;1;;1 @@ -144,7 +144,7 @@ 808;площадь;ж;1;1;1;0;1;0;;0;1;;1 823;линия;ж;1;1;1;0;1;0;;0;1;;1 830;губа;ж;1;1;1;0;1;0;;0;1;;1 -834;дочь;ж;1;1;0;0;1;0;дочери;0;1;;1 +834;дочь;ж;1;1;0;0;0;0;дочери;1;0;;1 836;среда;ж;1;1;1;0;1;0;;0;1;;1 862;грудь;ж;1;1;1;0;1;0;;0;1;;1 869;услуга;ж;1;1;1;0;1;0;;0;1;;1 @@ -370,7 +370,7 @@ 479;проект;м;1;1;1;0;1;0;;0;1;;1 484;директор;м;1;1;1;0;1;1;;1;0;;1 494;срок;м;1;1;1;0;1;0;;0;1;;1 -495;палец;м;1;1;0;0;0;0;пальцы;0;1;;1 +495;палец;м;1;1;0;1;0;0;;0;1;;1 496;опыт;м;1;1;1;0;1;0;;0;1;;1 512;лес;м;1;1;0;0;0;1;;0;1;;1 517;состав;м;1;1;1;0;1;0;;0;1;;1 @@ -457,7 +457,7 @@ 839;солдат;м;1;1;1;0;1;0;;1;0;;1 840;художник;м;1;1;1;0;1;0;;1;0;;1 842;волос;м;1;1;1;0;1;0;;0;1;;1 -847;ветер;м;1;1;0;1;0;0;ветра;0;1;;1 +847;ветер;м;1;1;0;1;1;1;;0;1;;1 849;парень;м;1;1;0;1;1;0;;1;0;;1 853;генерал;м;1;1;1;0;1;0;;1;0;;1 855;огонь;м;1;1;0;1;1;0;;0;1;;1 @@ -570,7 +570,7 @@ 1396;март;м;1;1;1;0;1;0;;0;1;;1 1398;клиент;м;1;1;1;0;1;0;;1;0;;1 1403;фронт;м;1;1;1;0;1;0;;0;1;;1 -1406;стул;м;1;1;0;0;0;0;стулья;0;1;;1 +1406;стул;м;1;1;0;0;1;0;стулья;0;1;;1 1420;музей;м;1;1;1;0;1;0;;0;1;;1 1423;след;м;1;1;1;0;1;0;;0;1;;1 1425;полковник;м;1;1;1;0;1;0;;1;0;;1 @@ -659,18 +659,18 @@ 1854;эксперт;м;1;1;1;0;1;0;;1;0;;1 1861;автобус;м;1;1;1;0;1;0;;0;1;;1 1866;кадр;м;1;1;1;0;1;0;;1;1;;1 -1874;лев;м;1;1;0;1;1;0;львы;1;0;;1 +1874;лев;м;1;1;0;1;1;0;;1;0;;1 1876;порог;м;1;1;1;0;1;0;;0;1;;1 1881;ремонт;м;1;1;1;0;1;0;;0;1;;1 1891;памятник;м;1;1;1;0;1;0;;0;1;;1 1892;корень;м;1;1;0;1;1;0;;0;1;;1 1905;штаб;м;1;1;1;0;1;0;;0;1;;1 -1907;владелец;м;1;1;0;1;1;0;владельцы;1;0;;1 +1907;владелец;м;1;1;0;1;1;0;;1;0;;1 1908;компьютер;м;1;1;1;0;1;0;;0;1;;1 1911;инженер;м;1;1;1;0;1;0;;1;0;;1 1926;выпуск;м;1;1;1;0;1;0;;0;1;;1 1927;кулак;м;1;1;1;0;1;0;;0;1;;1 -1928;лед;м;1;1;0;1;1;0;льды;0;1;;1 +1928;лед;м;1;1;0;1;1;0;;0;1;;1 1938;корпус;м;1;1;1;0;1;1;;0;1;;1 1940;недостаток;м;1;1;0;1;1;0;;0;1;;1 1942;сапог;м;1;1;1;0;1;0;;0;1;;1 diff --git a/rudict/frequent_nouns_2000.xlsx b/rudict/frequent_nouns_2000.xlsx index a78ef5d2dbcea329b5eea77db0455fe4155f1f9e..2524d0adaec73d69bfcfb83f4ca019e13607f6c7 100644 GIT binary patch literal 55146 zcmeFY^;=baw>=CZsWj3hsnXpcAR#5vE#2KMB_$vr-5}lFZ0VBj+;n$0@7m~nKleG$ zbI$t*oG(A@YkM)*{LDG#7-O!@+J2CPd5Q%E2ZaCy1@#i@Er-vbB{US&Q&=b{OelmW z>cUo*_6C;r+6pe#26meC&KBmR8Bd?QN`ra=#Q(pa|HB9rD)d;kGNLspZwrVtD+Q$o zYF{Z`SjlTutrp^|Y!!k$mldtIO%^`;iX+{ep61qZ~7f5=BX(9g!ma_lwZiSY;pT zDz8Z-wtGjg(lpDA@wkOa1WgK|b1j%jp0j*GL@Q&$Iwm#x497q|U*B8HjMO&c?EYy- z47WacrMTKb`-G}-ZTr#jQs@MkCSb|<^6-C0FJbiHZ@yD}Gu_s+Nm?q^oC zKTdGG2RBJmn7$pkH2EReeL*vshgzuLLq8?7D|)htcyy}7fpds+^BpB@jFU4wX$C6R zNe3sQnEUMcQ}5@y!nVd!=U)l03T9E}lQZ6uEXEw65ZnVgdw76>`tV<5TBXQHehP3; z3i$0aK&INZ2Ih7Q^pMy8C(r-Gn*2xWg^|*-ZH&*q9EjfrbYG0me?t?Jbb2e^@KV9^ zv&0-~RcIy!!90kX5KRH!7e>sh$@8{%cAhtMyZhz&GHYQ71{M!_wNufT*lQaH_%~Fx zF`_nwOYP{6<7eaN@nY{?UO6^}zbUBAO_%HelZ%cXiIkxY(ktU5VrCJ3!RCwiR_l~j zUC_NOh8`D^-z)l3TEmgH9W|KfH5rq=g)9)rCAB*e|DxMY*J!%fz1#fd*%iK`yfK$a zscwobH<^pJzWL7+kwg&YojaXOQujwPR*XyLL9s5%v@2R!_}UyaWF9Hf2WKpd2N9>K$qyJP*A8q1VEX8lBG~# z-g1-?t66NBh!*U0Wm0Y_7iF>&j4NcE(CIizFv(?7$n984G-JB_M9UXviK&`nnd0S# z&3?4G_OA1ujRSXZS&q@{`^fN5g+p($S|Vf-UlrS>E4}vcx-qpE3UZKIlQM;UJ@1`m zG~I_Y8p^(tHDTrh)tg;uUo68rc#QGJFx(y)$qC8g&APRzQc4kW>0As{airGfO_x@O zUk0C$Zi;Vuh>&&dSYw`G9dY|-eUz=)k7JI41($Y#49vMun zOp}GI{+`y2pdE(!3;a;@qNuuNExF&ZYb5*`Trm=MX~cpZr$STNi0|Tt z^Sn4H$KQ!p6s#6&U`NMrLci4#h{$cqGu)VTRK4WFDva32md0IVVj>REnKIOs+Zged z`_&>v6M%pJ;X(UsyVNL4)TtZU-PjM>JXopPJXpIEv$}HfSM(1i=Bx^Rn{Z?W$xa<6 z8viHHtn7W;S6f-@7A?ziICxl37_f{Q>E_#J+&n#Qb5N!$_ttr!32r2Z9p6`92(7tB zeQYFXXmTE<1Bc8-=N_%v``p~kn4uMnqZ?q8FHZ;EDcgGoUAo^IE-r<6Y% zCbYr}CN$qmkufqVy9{|h_p+tpQkzH7)FteE8w;&|F;QJcjdl!kf?15Zf-bRx^_EgY-p~oJ3E?}wY2iM zUb@!4zs&)AmNr*6*_rJ`si%VHXKtzioc2A->Ry0u&-P=TEce>IJg>Go&vCRZ7q0bhD*F4Ac~Y%z_vf9wKsFl_ zdqrne;Rl{oRhVFphxv=i$>y2*yP6XAhq#B+mYahjaATRr&3b5Z;%LQ|J9m9qncYbz z+ynFd+4$gt!9rqKPQ~SH+a)-5?ErPd?dYIn{qA_q@@h8IUH9U`>~a2ZB(&lw;ZAiD z)-EeJ?u=ENJ-RKL-ZQCUTOfZOa2H3kCk=mVT1ZB#Y@0g~lA_mtB3yK5&&^(q-H-qZ zA;NtvqhhS0eA#K@a{QDhbs#^h;`%bfi=4(5BVu2;)5z6q{IjF>#7}wnrJ!;8;W3uX zDDqo&^NQ<kH z^frK1G02hc*^OvrNx6F8w#{b}33JM^{1Jc&;Ckf&+2EcEq9KL|vBTEWKm}9u@b>?NUbCOOr=LtE;y5 zyj>M4t}Z2xpWi7+S*L%!g^`Vo^DcqC&gGKO=1v9K*+e5?4rfGo-wqoKMbPLLdaN8m zW4=W-2t^<6He0)pEQ*^G5k>5a>_jpY4{0A`Ww_@Ss zUFh$)M`_E+Q<|&&mC63%Pu@I@CICg#UJ(@rWhpBZHi@hs;X3+rwM%|L~L6r6S8AQ{&=oO?C@5(RXUgQH6s#dW9~7;}f5t-cgf7yOXj$ zG2}}I6_mO9kHGNMsT3t)dyVQdrqfqu?CS1rLNjH~pTAjVk zbJ`-I&zWPsdx5jqb+y@h4`(l4cVrNhE1va#^2b2uu-OqhS{^e=MEW@vo$nHQpVz1L z<<{{=wyYFRuqXHDCN7Py`xQ$_V` zeOGC8d~2siFg7Gaf!ro0-M#Ssj2v10>G$&t4Jz}E9j?N*Me=6l;pbm#%GE=9$c~$c z>P)0pVF$;2+!hb$wqXo9P88ycF~Vsv2VdMgYjW!LQ9;f)u%S{Eh@q>l>`+V_j>>f> zOhv_c`hY#$ktv7E)90wq)}Qh#s%-z{6XkQ+aOHkCxX{)b#}^-#9j2Xvgus3p$WP*1 zXsNwX+Mamae*-sE74#x$iW04+D2n(6*?OYnSFy^n)Gm~F`C8P0AwGB&>VydSn_ z3e;p{_)IYHT{b@_5X4>|cJIfix)iq76*T@SlPClYPb^~a6YbHPRwnGsTzoq2yXrjj z)Mu|3dnlQ|hDFo9qCGBGVvj@mE}RW38Jx&K!$ZQq#q+7_lm&klVHL-=^?+w;^|4LU*zVnl+nQljZ0mm~RURK)nb6Ni=KlRpDTKdoA z++nV5qVgs?;wstYQJM9^;c&7cc(P^=O=3FH-S1;aYBr^hmEotEYg7>{HO$BaR@8~< z5W`0P$s&<@o#C#Q}!Z(?jMG^+C4MWn3 z(h!ODU%V5`sp|&^$U)B_5mt}AWI%HgZ!A_i)ArTsmSRx#4H>m}CQ3Xu9J6q;hK|BM zKsYERWMzYso3Aj*f9pr^Yr8mIH>LP;8;MO_^sUMu6Rrw6v7#PVV-6=tNZZmYsc^;{ zq?Ep|+$WxGLiTrx4i6d{eYoUvfflFEzHud>S6a7%j<6sz$~WzS{AP5*P4Kh2JTd6~ z4AWqp*I_&_c+6>TzU4b^P^rrt;}k^XTCApyHCJVb&uuM8^kdb{RWP(!4VIKU_SuW< znVWX(QuEvg7T51!(8$DXX2~$QOxb7%os%|fBzwJf8ag{&l3_r<8| zJoZ+lLxaaMc>nd~7YrC)J8YY_wS*Q@A~r`PRGhP{w{+e(U(br`Ii-xwnviRWW?`Pw z$+I2XFABGTN5hR9mK)h9B$XMjjs^k(_fXI~K**jo%#oxoKM30ES$L9Pz-o(4t* zapjOMASp7+cP%cfGgk zc(7RV^Qo=rez_Ug(0u|{Kt0|y;|){C%hmB8V_GZ2Y2q0XZtNc-sW8oOQe2RC8)lxy zbxKJ_@QJx!G%c+1HaP?{oSa2En{WrfiM5u_^fGPWi^)pI|1#=d++S^*r&Ty!PDy-P zh5(-CpD&4f0wBi)H1c&6=3jwY-`#`Ro=?838HIQo4*esFAftEr}l-}oDi8Z99 z&*I8PPqo`L!7(tahY>YS^f2eQ}(5R z+_hjQvx%Xx9ub7Wj&=Rg63dDUoavF-?BnDDnax+;R(#m)j+%E~Xr9fibwZ9x)bmcy zDDs4@T`}oCUFgUY68N~Y>IL_!B}p7S-`(Iuxb)tJ75n9dTPQt#fHn$q^*(g!SMP)d zbahrjQN7LthpDFgyPp%EWG!G{-bP|x3{x{Z4m{61LE&{!KFif(jyv{ycSuMd*m>&Y zZyUJiSst-3Z+|2_+1wRHJZZpaE@1~%U><}F15zyV5xn;vwH4z4K^EBU-MeprL zDit~tE_XaRg90nSkCk~v)=iT{2;aGD!&3z?3z*c4bD0#JkWsNvGQ87TrVxrsJv~V0 z(=}1m7Om#C2-w5u>%Xny?8qf&gE#-s6UTJcWT31}^=6W|mpDLcgq|;vVs$~<&(}|v z`z_O(>(=!Nu~sn%3t(#|jocvp&2epPq^EKrx4@fxZ)Uo+5N0x?7Ulg0Y4Ebrm6;8BYb_@#clz zWbvqP`=ax8Tw3j@9h#8&7ulaACAyIU;m3k6yv7-KDKznvt1{r-<9d>UFO-@h0*A+a zg`Idk@Ojj9^X8}d%Y9ryV}woA-G)38CC~oF?^Oeo$vlAR{Q2ejhJTvcFeiny5kClOxP;bn9s%pqbanp=zbIg+_|d$yc+HHM5k5AagwYp%QfoH~ELd+5|v zF;X*Ln0aI(Eipw?o5<~gZ-{`kNMM!5NZOJB?B``H+ zDedTO&njUuwi^!&B7Cw-dcM1y!rh`8%@M(5Bzecx&3U#q*zl!!OI6|Z5S!g|C^yo~ z_M|T*d3gf83`zAtw2Jq9`nxiCdCJBz>Uwu0Qko@HiUz8yCaFA|d;8uE$)0{)$PMHa zzX*l;nDiF_FLs*tNC2KO{Mpr!yV52Xu?dS&Y#xStGoDjF>m9=0_^)?E1j`zJJVmj*GAR~}Mlc;1 z!z;$zjwZf_11!8Vwgc0`-FVz~rZUItNgT=1@1)pN-pG*4ouO5j!KX&!z-c!3+FwT9 z`#pV;Y3*I$(vAgMyE^hrd@K01Fs^noC9eB=B+1rWH7}ApqrsKZLUse)ybC_04URR> zG^3$%v$^{^?&%>eRXwa{eiTZwz+`j6w2DM$fA*^Cl!5(^in?dHQko(vFXR#1^z1LL ze*T<`s<~0eV|^J$Q6$28XS#+v9T+^HvEnhWtS{pu5xm)XRN^8#U`KG3u`G8{*Aedg zNu`?# zi%G{%X_%;I`&BiW;fCqXqIr(?{EySJv-|Z`lF~jb6dR?+J+X265QwSS7(mJ5lbF8t zRb@)^?c~&_$<*}}MCrb(pp(^uy-;?A!+ZUSweNLz`DjhHZQBbJUEFq7P&t>k^Agr4 zirFT53WoQmMk(qC2g$0*D_artAl5={6$~l8<4w({y4O*~l|1qSwd2KVpF7M=+0i~U z<&YT)DUeT_ll~GuMK?4#crQWRp@-+5o7js@kh@vUYVta)!r;~B#c~gq_nOsmcl@R) z;tEAo{pWjDl!)|XZN=4fDX(%7$>##@{-A)P8RRI*Vbk&9vXq8|Pdr-PSKP5L`E|D@ z3JP2U@yR~a>eQBVY=5}TzggUuAHsV`f49*i7R+FoBKsn8k5wd0-n>}KTL3wM3EkqV z0!x>>3m?;^fn{^5ZCOD^g_UozW6PQ|Whg78=9sDs(GrQw$|uOwp<`Y#JJ4M5w7U1s z{%iF3&x^H^pZM#)q7O}z1-tFG@52&XH0rsqnXb5M#!`HD<+91h5waSzQ6`EGR?z3Q zxxdyYoCnCWsQ{mS-jH=&X-Th6VA5o2%TXj($#RU}JKu{skzCEHxqH1Fq>Mn-xl|bB zrU{&HD`=Rm;f=DYZ%t4z)jNIe*)!@IhN+$W(tx;QF88NtDF%;lu9kM0wRAGx7fW;r zF_e`7Mg7T?YqSN%JF_7jUS*?;C=z9{(VKEp#LJ3^(LSxswiYL~djYH0nwv*uD>T@> z_G@hDlSYhUD-R6u-&V}YcLfEY^jOENWv$tMlJ{aaYnbxy#uU?R#Jy$c z?j5T{?O<2H7OAN-J-biIut9l4m6eKS;o;9{`ufC7iB=IF?(_ z!1p#T)E>?Wq>7aV#j~W2Pa`bla{cFc$n$(LC?XitZbRGUh)prY|C-B6L(vmxLkY;L$STfm2wv3N&)NZAy<6#w zGNKZ{Fb(EmsQB-qJ5Je6rk2OAp`U*pscMMh_Dhdzz49jMOIQ*oQQP-s2`c@P48L(F zUk#sNli^O2bDAVtVn|R=D^3N!rO^Dn1`Z_N&WMi=$Ed34UbRGL|AdBSW4ULtJi9*n z)aJeabmmxCH`DOm0rh~^&;YjuC! zpRZGDt#?Ct4}Q-rSaJTqrucfY#3gqK_L_>JgMHHd+kS*MGQqTH33yb|P_Xb=p&DNu z4Yo+_E9q=gH64}i_StRsQv6Ki)D363b#@}6Bu5artpK5tY*-~>Gk zjHeWIJ`nYd=?qpiURj~E?BEt59Vte1_nE#uf0(+lnkWx&3W5%pJ6;rp>SL3}+$0uN zl)7;h#v7i!bE7&b$Khn%CdvM^Xs%i;`7ry(N+Oh8 zC;|4(>-?9Zg__Cz&F6(jJv9ZTA(i??ON| z)%--}zixJvkEa74y1pkqVE)G^Ej$*?k}be*gn)-`?6(W7JGTl#gP&__)`M&8i8s7? z1coRPv}5&8{8#mGj7tyQX6Qg~%Q&~^un_5Zzv+z9Hz&Zz$h;5g`lj;YS((2a#T{;& zXZv(n7-HTx{`F~zAQ#4-s}O>r!hBPUV{Q0K2AQe@+Eou_Uv9pSs`tBL9wfY$nV}7f$}ul;#c3vIpTl%v;RsbA5^CoMwF0z^I}Zoy`vGxZv7XR zQ8SAG4#PZhUR4OD=yI+l4g;3?GqF2o!3??i=IOoF{OS(QV7S0e^x|3hU%Qe!2hDcq zMMqEpQ%|k}i_+_ftogP2HdILx&>PUgZJvU^*kF*Ml=Qq35FaAmL^f$wc;$SB7SUZz zhUGIe%~6qR7*GMTGh;1&J*B0+X(bQ*C0dI0)TErQa>ajWa`4;;z9OfBy2958b@A%; z?So1$ies>lk952&@L6@Z9$6E0xrx5H&mx4Zb4hrfzMF&xbF`&lzLNe_(A*B-borXl&G7840{PGO3ITbXa2 z3P#@Gur+3Y8g=d3UV!kmd_LX{AT^I3wS++4H<}$vWUcZ%zOC^o!NRA@$ylO%l}0h6 z`W8o{WS2p-!SA_Vy^i0cMvnaJ{%E6D-Cqo!Vf9bvR?RaW9 zKg&vd@WWXEs+Y@k9v*^kf8*ipi7z;XkoRFZ6AW_G|IC3gCcmVKp=+qw;WiP<=~pJf zuo<(Wb!>|<4}~uM1U79pt-c=y+1VjD7jd$^{=||}kdtb0t%s<8VvjW5T6gp6J(}sy zBF^l7PA2Zf;7!RRYbT7*U&+*%FPvb~HRZwl!IeYR)Ow$^bU$vvtFWAKze5)zC)BYF zvN}TP{4zXGC33QZy+zFw5-?XUT}VYH8fz~hEBQmp*w+s&Hm^qzp=v#`NL`5~J6o>i zusF;Q(L1;0l0G|ufFTo6EM39?$6vwWl4{wzr+d$2MA^oo^W_M+lwJYf&#&?N#gvR% zl$*+*HGb)UGe$p%Q6=rh*;{6CDn%4IccFgZWS^1B5bS8~awL5h;lQ^}b*WT1h<1cx zBRCwi)cmd#dw(=&k?Jtt^kWR^avud#`!RFa*%fD&upecgAl}dvFU4@)nCI8A`I;Xo zN?9vE7Q_Q>Of3jAkE5&~-afHPm#`;lOH!r#WOa2z=QaD_cF%7@pDJKxB!WzsQnaw9 z#?O25(Np}@{JMNFN4!Qq%PVDH6xLpgfVmL*8rKyl;tc{sWRCaWzL!PDc?mj~5~VTG zUWM3Za_icSlN*NW!SO&((>e`b##z>-#`&oqkm`T+IYi zqrgf-zevk^^!NC1#-BH)^N5R*j0(+E#o12$Xs|0@vSfbrAS%QDVf&T9_y;p=XkkVdF%ZIoL-%+WByFhe3s zEkl+VD!fG_g@0IdV4$@Um}wvzuSv6@_!PtAp$60rj+fHVwT^DlFuM1?=q&koJKiG1 zoFZ6TaY1sr7OlMLF$5*o$ngy?n7S=714LkuK;2 zWvu95^0gGhSzN~!TQF-D{D#(>`OneR8eG{HEL^z<~UeU z6@9$$eV)1{xk{%)73}2O4E%!j*NPX-@H)fNR;Jw6 z{O@v3Zt$m@ZH+ML!xrgJR~Sk93gQ}BH5R6^BxjPPT^02lIzqo%ppz!MY30e&OeSa* zD_Ppx$`q*fkGq$|o4I&qjhkFqR!!7dsW)Kkvi3HwR26WQY~FBn(IA`@RB3d)j>ebC zlC$6my*V*>{*^Z?ypG{#(@60d=s$iJrw|d#a1Hok#W!H#A^%=>cJ?mj29FQ7e<(^? z&N8CS<7^Tk?7i@yt*d_dI&cL6;TtyW@{{=y3vFScd#P3g8Yy3@)?<1R(oHwqPKKYIk#);76+2Uqr ziUxeZVESlGn!o9)r$i@tsVPzP_KKqSwU(rJ{Oc^(E#z0!C=_TNkj!$9UJS znZxODHOX6B{DinGI?RZC1w_os;7iHTcECEr)tg5odnnn1I^$MiwY1awn*GWmS^fQ6 zoole))qb&vPWnVS+D0K57CQ_lx2{E+CkC-^n}^7dp&6vzlFz%rM&PYX&3MgvdDVJd z)<0ZXgC3x9GUZ{4OnX^hfQE@nPxi_Zi}9!|=q*P#?pcjZWso#jnsx;`Cx$&GZPn~R zgRZhxS(c=_JI31a=_j4*&vQ@neG;G0)#?x;8^ZB=%F_H$O^o^OV z?z7!bU#ZXad6D*5Pj5Ro{!WT`KSiDb1 z*cd|GxKxh31z7*@Uo>jY5^TFpg@TG`eF}y9Z@0hyy7B#$UanBw%5d4k@qo#oh*-Xy5{Q4j;z(U|JaTf>4>?=Cdn2x$zF6>_~|$B z-HpJ)-Sx6nIEg^h-QoRBY#WCYgEnuo*U3^&&B4R*UEjkAh~$3n^0*^sumt>YdOeAH zKmzi*8tjr~c(`+VIPr47xIiU&I2mOK4^P!5ZM%^LgKpPOHo(muXWOHR+Qi_d`_uja zFfn+gdys^`+3gPR;h+oDczrtC)io)wCg6IpQ*g9z`LI2|Q*)pl^BnA{5w+4bC;;*} zxoivI@bb90ytk7$K02D5Ol7*41vTF7$@ib{_b1pNXnEZZg6_|)toR#mkYC^5o=?`K zKEy{gyC3cM*VKR-9}bVsQoTA{9`vS~J>~5-9s)){Za3>I0kR~X_qWI+O>bbxWqVs}gK!lF?KF_shZW`(Feah1bAZATRf$L4mt3 zQT_4!UY8c0w^t{3Dp)e^9~=S@x5!{@`BSg-rTtCIjHi3s&279jzz+e7W} zgAB_t&L#&R zcG|!t;Z_gFlK89x99{_E`_n-ZVu7Z&G>c=vpX*G-t@v+)u`WRj3r+82!!KWHKaf8h zfPtthoZGXb#Q7yl7Qy@FerHBxkayH1HY%9ZT9IE7sTRwX+r%VtWS#BZ74t zUe0${X9vwUmrDl>j66DvsY7dVJ728e-D@vVpXb_tFqtUqL3YJ)e5J-hdE?O=gPGQ^-hlV!VjZ|9nS_14(2cq06Lg;&DHTjO&lSvH)kX})od z=+4k9Dpq*q9n?32>n24KCe^ZR6(hBF51AvigSvSMrzR-crj0@m?j~gRzoMu{MpY~# znK(Mv2RKA~Kd$dH^t04Ae_oX|suOrf|8X~oU?+C3k}af5X?s*@WAmP!P&zrQ!mnETr*ASj@RIfIW60He zuh@C8V}*%2_bbY7if)3rb7%*qhGk)g{5oSA7p5@II(s+YiIy3SaxZsboDKZ@A*yIH0TtACF;u?aJGmOpqM%vRD`KX&)H4=T{~Np~ z7Tk$YrEO~6Cr(R-8~1A|c4S8T16Ai982+`JqvGuo7inzs&rv{eu<>KZLn zPYWB}TtEAsY_Z^~z)gMc$kzz6BeYKyDeI4!oz-a7uXwI){#nLjd?^t{mYa7n%8UDF z$3UZn9ZAfRs7SSoz~!@f`;gYzMyE>$$VC|5o|TdM745kpO4<&W*= z^L|_LtY6j6+fBHJMEkDC*f(KPCx&5!nr zvQi%`a#7pX*xk~l-cSTvOb`ZuBvNUo3ngU!y1?jJ1H%K*#eBbqAO|iuiG3fg4Nq*d zcsf}u9CC$%5oM2Izk}Mpy1tli^x6Ny-{{L*HQ{W1K{Ut}o|r(S0jBN;?LWOr98Wkb zB#ke`ll|8T@(d-UP3fp-q_R{8VXRCnJIK`a2{-uXbH-k!V=0+*QuJmE|LnL2CEFpY zv#2T^^@fzeeEC2)$&Rdx%FQd2FKF3tViQskve!Q=V(CPBN_c~Yc5KcPgO`fUvmxTy zdl-u+fi6L$R^lI$|O#{Y!y znbRJ}{W&knA@D`E_z01*K76PmvbsX(5B~z@rtdk=Np+tG6espBH(_3^%e*D;aQiLW zgB*j|eMRtU`MN++^Y)>105wqxfKtgKs1iBXhz|5&G6Gx7E+yyW*l-8uDDu_5L8#Xy zfxj2G`|#2q;!L-$9tW>AmZ3h7%5J#h-+HVkb=5UyYTYN?=f<+#slMAbkp35j>Tw!c zZ@u(L?%t+=G5~9-9ON37Ppl!I25O1uPk4Zk?CS4{0wlX9(}R5o^|*zvo0cN@j0;uf zJ!l1ejStmh*fjSzpMPR_!Cspa8iS z)?Yx?Zovq4SM*O^?Lje8+p^!puki=9TK!Czg--Kt>i z1R>J|=_ay4sY#Tp!u)GCXRDeVv+*?+`!GL4DQ9r9Uf0nom5< z9sgqqc6=^YCkdem$vkYxqwHc{nJ#SzwVBBx5?Hf@yOYn^&Ea_1ed!WgQu;rQ8kU-| zOjXzEg4eTApk6p3uGre}%)R@}T>hZ?dAvyDDaj&4;a>0QaI?uNlBeL;==l~K*_ zyt~sZebnO2C$RqR^SAXik8EcC42_t%Up+8c3-SWCL; zt<8g>C4@cpnM;~bh>)=$LYDUahmZjhrv0=affY)rcR66#u*G*uUb6I|>cI)Q^Zgbx zdEhg=1W(kgGUY+4T-0oG1}p`c@+p@Zp1PA^KJ}-k+Mep`0^yVr80v+}P)8ig*ZXe+ z7_g~A3?dVifMu`~8ItTYyUc$*JA*_j{o)o2yeM-<>@|C+l9@VgH-DGbhVv|{i}^yj z0Fbgn4`s4~C&Il64X;b7(`Jw~@B0*v?~ zJ7gLyY)Q^7ko#}nwc)`VAB5yY{0Nes7*c-b8kKdeYs##eZ>7e!byz4?J{43Wz3IGJp$pH6nvzoFT)Em6A z8>_=5VwBQTJ!};$ssSYSm%2JuQ3CiXPS)OPgJz!Aa~Np{QdRie zFZloGw5>9kpewshAQtQ=3E(B|uJlc6qTL9X8D{Du-y&!omo1`h0{i&**dGBTdw$JpG>Q>_qG5qiof{qNOK;54?u4CZG9?!S7nm> z+F>AFA*ln9|F6tTs^R())MpyhB-eqc$8$ZWaWVrdH9kDck_px_)xVmf{?pK=djj~E zeH-I;!SK;1wM7;C8V6Aj0;j$>O)i8u(C@1MSP9hyI=Ce;oY?dyw3oxuB=ldg6hN)< z2>{)4Ac}XT2uXIHUFBcq!9BV%vKrtNq`Fzl`QLFv5p}=kDrZ6Y)^pFzWugn@Q~e)C z%zqpBAt8$6^n=^A!^?{|pB^}8JpPCSGPr-D@keq2tuh1;)}wgv-TGcQ^nWK87=VZa zFtob>>Nei%2G%Iz;le1ob;%o+O_)~Uw*{eI2HSY>w?>OjFXpJFZ}E&tD}7FZS5`I; zIDCXE*Ad7pf4kLEdfK?*VWAJe5b&E=z${!5hmay6uK=6ig#O7UXh>}5!2>^FLsAtI z&k*QX%7Pb8^Tr`yKc@W+b|MwY&1baZ+a}KI3-(ps{VNtPSpkz)V3G^^M4m%{q?&rv zemi&aZ^wf7>+(?|c(`4_gLkJM4Y`5X3rzZp)6qYcK{^Jp`9Dqs1V@^)T+j9c({WRh z0HlKK2XPERV*nJG^nW_W=R=ht(~2Wdt~cQG(l~UamA_au#bexl+dQ)0Z&@!-eoh5R zIPJm+b)O_jNq*)EcjN4Z>G#0sC@KsZdh?OSjEt47t}y7sU)nx#q`5#}8V(!+X&!%t zX^w_}pwYUJz-lOr7ai=STeAg1{(KlNic|!5ij-&2RVPzkA5B26_S)@ z`6AK*U(~D;r!i6R`7e7}w}`z-J1`y+6F~NbS!L#{Oc1eQFx##O9_vfEmIAVF|K;9~ zSEJxUv6vLP7HG$K!>`yks;1ip{hn$b zWsG%&(~myu(DNJJn`9&ri>+*Gly7~f85tD8ZmJcjia)d_c8yGJfwzA#0)p<;fdXl; zmWx*>wBxk49);X)xuHOTIKA093ozl|St0HX`Jl4v^aiaeiv;|y^Ang@Z%ocQT33OK z9)&@P^N&c)D^5ZB8};`96D}UJHWf|}j{O}ASTY2FGDugBI~Vp#Pz}4&3_-fFXOXFj z6p+`v9!P(GZc-o<(*wzS=hEG^!l0D)u`<+54SpQ`nm&13c@6m-_NOo4Ud&~5ZK)Xb zK9YYJ>?kSlHJOF$HnYZU-Bm|ma(7{y^d7DKNd3Uz`@)`JxVBrY>+M{_*OiNfJ%5h< zj=+xo4bR5o;_#>Nn-y#J4O~P^3+LY>6_NYSxIYzbQ%8`Z^hpv|Yhdc61*|cn(#E>P zY`3szE(G|uCEL7gGNUHa>DvnEiOSch6KzwAri*n|(ONdI>ueK5?K2=&p+EU~yxhVP zbHPM5AyL?OM`q3~6f=tIW}w(++hkIyWYBk3J)CdU$3_DOTzEg(f2=5d)!K+wf<|KtL0v|mJXrzg_s?z7Y69m4&Y8wq)y?jRK;?gdUzIStk;>eVcsB!rx^`p($(#ST3WOIil4?hO} z)I@Rm_%pxspe7JG(FVLdbN+ONe@)1}g?Vj$H2@kk?T)`STiYUI`Y++Ym3e2SylJw0 z#462S_yc6F{rJ_JF9uPc1H~j!$4mqp^uAnQC-LQ62XfL4{2i}}6H}7@Si5ZY?!lC8 z_TW)iL!(4$Ofra{aUE{S{P1lS14gBdkWO;qKmjWdTQ<>n5u@_mqn~h z8~I-6ugZ0~G-EfUWT|6@1@@c;C=?-$6}?dhdfbAvTSW}1rwgWUa%ckryHVd(N4D_5 zD(yvVWa(ou)G?4KoFE8}^cY!>@c=*BPPyzys82g=L4~}lQVX`A<#@$VdeqI)eA`$6 zOV|DXmV63Gj?;J70REEHqb{SJD)BDzh<^+xBEjD z(EGi|*~UwwYh9B$V~`m* zXhPW11+b-AWk5UChhMBdDsG#t9w1UdFNA_yb$?1O^w>Un#M=?Td-|A9eZVaBRLI=^ zF}YLS4^a&YH~_(F;L0Kh-M8yY-H|=Q9`U;s{F%y9S2Bn^uP2c&8oMK1?W?#(KRIg- z$PRUapH4s<7}lTh|88@OV*vvAz^ou(fRA|70Ym*wu5e(!^5O6h+DiY%uVfH1P0bXA zvbC6GDr_PzT>IOPEBbX4;3s!j?Hg(Pk;^7}5{djAkZQ_rt;IO3?5K?Dyduu;zWo`` z*cvy=zdGflMRiNrGY1-%fd{-GBHCt}okpj}Id zO6S&2uQLHnYwp(!r}rhEnoPUsMvMgpQKrd;RQxuAzu7YSo9qVS0NLp_>Kg0LO{S-9 zB|;%*{13r+mq6`TEy=9)kHP?Ok>6p0;0FvBV3*CWwUz<(lg0SD#wdOc|1OlCjg~lN|v7It;DJLB-gCBuwY73dsrfc6Ky)YhY1^Mw_UCKU3=_UV96lFjvn1E z6H>neK<`bvSpb(<`W!b}uBaVb(9wgZc)qi4*{*(Fn7|Kn6IL0oyhp8idm=5{eQ@eA zx}f#2hP<(ilH72mjadKUj@u&l8=z%&7jAT)ZMF)Qi}W?%JhvqpUb_+!Pbh#SU# z;o02dm>??PBen-TYz{*Dp5sigg)^~jc23M_IO8W>laU;Q4aiiB#9}2)8z*Y}!s&lI zeDO1gkwK1lv`Mp60+1?J49C`J`Jeg6jv@RZ+v7U;6AUa5w?=^WPF$K4REm1K5egT2 zy>!h~M`w7uja8fgz60ujwg8kN2NeG9*qrOG^xzu{SKn4v;$Pgf`%hjo`zUf5Ni2xh zRHOXuHS}9(m?2+*(*Wi$-v?klOd5yt)HsKQi-h4Qvoe$LN3z-1@BNV9>=P4`#N~>5 z5a0YF_>ql2@{`3_{;?QFVQ50i!;7b8nSks2R>?v3kD-PAtV9mrR#z=C5EUoVM*=D? zWjBTFHW}%`7kOAbW0HI!vD{%LMoV?Gyg$0n*%j0-p zu0Ljzb=(ZNBgg|X!*H|l0qZbtqRloBFy|jifG__BrrLdxexqtQRC}O-+ov$}w>bmFKolcO>)+Vij4*cy zSFcbq3@~3!5wbQRWBM=m6i$y`KKDTNv{=R2!hQwpdfn_y2swkA?1g6h{f{q zG}>=|6s6mD0RVVlPUequ1~OVdvdbR9=`qUefPPN{sRM z(>!M;Q~YZpM>|s-2BoUhg6o!T>#zM=(g(HU85CDacBc|#TAc!|@%(@-u?QMOi!VYF zMNI0SNpw(-Y{~l|M*vsY)7U+XVo%O+-X+}Go9`|;^2JC`2ydZN+fB7kw%t0ujUyuJX;d7q{m8oeA~rWrYht8> zD+&JY;}tBWAp5E-*c|pX7MU<%)Ax$@7X;y(papEAq4-P5Yw>qdEuW2iOr7O$?X-Qp z@#t8^j*41r&UO1lGU0>$u>ONvg<2$+xwn`W+t0RAgZLA%(7vx+@9(_aFZsVlN z%G}XlqMq`t7fTf6JkkGTvRp;;$D6-|QwU3QV^ZO>aij&CbK?Y=L|D2%LWz}m7?$5a z%Ujm0ZZwYjRamqBX442raq|ROLON}eUXgp`gEadH4^snTK*_vs2}uh-V+kFl-E zNe+23tHGNmMrePS)oRw|Mzycf_| zpNp=wjYG!$+%P!Jdl;y(BHiv8!nTY&Kc8Hq%A52eBry}8(zp?S0ZNKan|K^-#|)Ku zbCnzE0mPqgT|$5NEc6>D(a7LSI$VtC_t_{kaMD<>SUgPndtW`3t+etslEY*)pa%2M zA9?-+-`n!lbzZzl{#>5sUgh*2ch5-Kxq@|n@4J|d&0!+7=-cqmzFQvgDA^#ok2>8V z08$59Tw>;Nuow2+%VVMK-@q@CK`+0VL?o^Jte9p|b;=-mJQ0go&qPYRq6S7~BGc>R zu9A#Q|1i12Liub-z@YHvA#9kz9?$*R z8jcUO>bGx7kRA`+@zgYDDLMEd;T`K3|VKrcS*`1aIW>6{`940PIOM z|6}>>(Kv@+8uzWL7%f;yKquhfCn!m!@X``7+25vCj~UMOfjmFi;hG`yaBH^5q-Kr0 z-q|okVzLYkAT$c5KNX8EL*(^1ds^v&qH|(KsTXlu$|V;dZHlfx!*_?!c&3eXSz>ba zHbhx+?j{XiTU5lA5(?vOH4jy z4m%Wr%mp3K)T{>`V@QO&eiYGp{c`t0QTM9GTAlf=3u)Xd^f&AmlgXFg)ndpUd+dK0 zUYoIau5zyaTY3DPkbhaq{mY}qAe!xP4s?P%3x^9P+FapZI9%ZRhOj6#5y#gKuu4r5 zR@&EFwGnP!I_uq`zx^!gP!^x3-OXAFoTmSSIEGT_Y69-Or>lb2>&_81l*M z*yZC4Vz)d>FT14?x5XbX>J!x5)Mlwowpdxwcw{D&jnrq!E>8;!)}2FtIzwc6C@*;Z z#*un_^zUUnslIQ~ot5;F@1vB({(fErmPs~fr>jQ$=o47HpU22B*j96cmr7)rQzixV z*#hR~+q-!|>lulLZTl_A65U?kbH*yus}lBy^LA2uWB(k9KW>pupZb0qXC6Ih{Wa^* zp+kcQ%hCi+YMk{9R$#f&l>fe^1AT#x4)o90s{Ry^VK8cbaM+Q0qA?r0W<8fo;wLT- z11tP(W5?{04U7gBRe4UF`pZRz=I}%VmeaCVL-h$2<3D4A2{O?&FXtfHRHyK28wnHI z1^?;WSGstRTJ{@kRT{O9r^`7&4$Lsnt$~xLl>y{^X0b{r(bw&{h=sPR?z1Wo+D)f_ zz;j5HtRp+|k6SDlnYh&0mwJZSo<%R-cFwgVR&WN>(DwtSHh@y=GjGP)v{6GQS^L8& z{JvC|r&eqaIPDICI#c#NhSCH+@*r_9r{p`TC>g^j>PQmmX+yw4`-= z1cfg>6{;_B6uwL+lBlh96={N`InCX+Y+lbor~I01?SqZouzuY9Ao^N^3|_vt;z&2GeLVuSkaY)n*L3$o#d^SYzTrZqg{@fE-HxH7fTmZFsm75=zg& zh%2NYOk9-fe9h;aSX{CCk{H0|pP=vCEe8`J5}ro!N{_vyOJ*>88TZc+MFkxd9@i^^ zwB(>~fr65W!(i|s9KTs{pFY!^ z+gi2v_AYkcXkAuJs&HSiv;Alb2EPd22S0?I+D>~F6040g-j})#@H2CmY$i-fv;Kk%S#J zSw7w82RmP1c1vmPZr9y9lYEWyyC>G|-^2bmP)mg1)GrvNY}%VJENP|T0p(FI+wE)} z=Ag{s5OlrJDHXsj$7+O3M1llz-X#D$##BYokfr1y)tS&L*1PhTsHvpY*M^H3Ui!C` z?b{F5yNFF)_=qKX?X*v*4bC^6~LTlVM1LEvJ683MwFgpPd|QPxiH`bxQx)^&XlVp*s5cX_&W_Jr8s z=w7^e0xWr4vkzOcsx)kg8&Zm7L*-nQJqfI#qN^r)F`g!+Lc`Y!vy917cqjq?CH?3V z@PYT((ujDuaw`ghCM-u=k2B1$825QE#s4#FBQXFN1H;M@C*&QT;e;kd37(Y zMB||#uGGhWOCHV$FF2n;T~4lgTqO)h>hwE zZC@*0lydE3;PZWc3Ore^lE9K54oOJ<()9ze}Gi#ov;nd|n_W*yO!GnZrOmH>mRN~gmldIA4&?Q8xnyxE! zj-a{pX4cKaf5N#>On%vM2D!2lFQDy7vV(bkYn}7)m1~sAUr6Bz4VV&11k%q|I|Gm~ zA4O{qRbpDcg+p(~q(*}xM1i;Ee;53y1zi2{JEQg?94s8bV|7GXfOD})5vn5II=e#e zI2Itf`4Y!j3*o6%fKLS>=7Rqd^>N*F891>qNTg7Q^+8}f(=022^3?xU$0Lt$X}jO2 zBX3A{ghsztNb^XSFR1iiKIC60A{KJm=Tsuxkoo}Crz%+ZJruPSc+}F~RQs8$Gd&k{ zoC5K`V9NZe+Ke^B3*-S<(6Kv+IdA0&Z1?o^F$z9hn0lZV%5okmUrG1 zp@5|k??TlfL9)QwKZv&l-9R!MNRUZ0aC=Ex*%+uuWY8)wyB*+})>Djug-@7)g-0Rv zo*=&7m(HF$X+;hw7g;E`E;~IS%iQ=EwJr9(TDLts&B4)0B8KM*?whXQC4$rk92D@7 zND|Q0nS+~F4ct46M3RI@-jzo<6bUmWMX=e8#q3ph0tWQsL%6(b`F4CUb)#PXgj4u< zKurD%tc-pf)fNAZu!Vi{bSmfO3>GS&fc5`ts%}Mm`!Q9LUWGe^bGHI*-rLwJqQJBq zHyOTKq?x`0v*C&sjN|1~q35UI?nA4VBV;wQnT4$P@r201x=@`sfM?KmX<<-dV|^5s z(Bkfk0X^DU1UuNkR|zj}ApH zE~DSdn2&I^MDFbQuM#UzKZFO0xxou%6rk+)hc+L8`wwkf#2caPLlrUFA37q&N=X2% zVny;R=%Ao@lcy$tZSj}w$vBn;F;Dq)w{7<{t}Awgv)0UQ^@2x6|4t3A&xn&x!8}aM zlBf1)S7XmcYp${6QR>Ks`qDn455m+2Iy>O}d7=W$gn$5WC~>^A%f{35Rr~$#Zr|g1 z(1pNN=)EvsM&!q zFOJuVdPT})^o38U4pb?M?ee(5EpqE5v_)JMO3c|@8~dwT1r11$7LyOzhaYx z=@zr0%kfoX^+Vci=t!a@3s38Z3~t@GAvE(b)Y)kx`L|zs1D-&fFnG(EpkhMKE9V~G z?-(&X$5*M%h-tz)uPoz=-@`n4OJ{}vYotx9X4F5ai1&2%jfuBOFlHx@Sep#Sp*$1 z{%mabw1?$A3N~63I=$a8psfR975zRuJ%I3pT!06zHy*fMJERg>1EjG8Y+HVZO$N_@ zWYsmBp%yE7_e$pVlzS>adX-Ug{-TZ#7wu`4EdTz)N0gUpt`EmI>&KUduAW=;-Qbkw zm5bb=+Z!*)%=ym!lgH1uT4t~78RAnc7#Skr`su^v#?Ojej>?9DyBW16kzUneag6;& z9ZsL<%JR*6#AeR3z5=2WRR9HESGmcke%uPef_YH%)S3u?7%VR>3pb8r4vQ|V(>>%# z%CR)B4rlISNm~MLac}U#nZ1yAcmeW_87#I>uwkQB8c%zqb>DmI<5v(GY4BsWBb2J$ zNFycP$(4FtvKJu77ED;BnKlQ0o?(B)leBHP8f_g~Ftm?BIz$m9kDC%qOSY8OPz!Qx zj#)^j{$<-(+Fh*9vMi|FM0k;SA;^_ms%CF~v@1w?75%ujC13NHu?^;}tSe16jG*3n z0ReT$bIc^PER@=v!fZ3?@U-<=BRkJcmaVkivp~`kaGV{3K06A~@ksE;TNL7mIE>k* zO8!#ZO)a6QN|W`P$F)_I;}RxoD4JXJh|6imJV`cK8NPNid#Fa5!d%lHhjGsS+`5Jo zReC@7=Dg}>!LT#>N~I1pTkW<8NijNfTKp)u`;?ui=1OL@kSQxVq7mIBl6_fC-FvXB zy|bR~S?*Fj;i1N>-aFOWVO%}INfR|L`!#o}z*r>xB_whLKmt$b}c+Mloz~ekB z+k>D>8z~suM+KF?db^lAWRxBmpMk#nGt6tA!k45Ptw6#iq#}!%`JRs zGMQIB8hqgm0=D>dK^^4#WWXWY- zBgKJkKolJ!-Em}JM<_6VzEuHFRNRt&lO%GcWNOl7sWx|*BAw~xit`2B(gYcE+4MG1 zaN~5VF)?VpzmXRGYfvV`6W%{x?M_C1wt_HF-$mhr<0`xi;Zy*p|5u!P0{{@Z#70Z<00Gq1H{zzj8|HGQ9;OUB<85J)tjV}ExqqJH-V1-h+ch||4HvBnWg6oEaHXUWUqwl_s z`BCA6ISt<$)3D+T=|9dZ3J)od>KTPK>@8gQKfN-SVB)~Ql_|Xd@(9IU%~B*7jT@>L zq_EexI7i4Bns%KD@ssz~zM<~lH9hSe5hZQE=l=bZOs4PdMBAfDdODXxx7*h03iLC3 z$#oWgm(l!c_eOl>Ka#y>#nhGj@5C31f1M}%pxDITtZ%XNwYBG}ycfm_R%=xZDNhJ$ z+r~yN2v)6*n4fv>F4O<7umYm$v&G`i)HOD=eOPqHtkl5DB-Hj%fCoD&gL>2U_2NiD zfN6)m^A`r%=T>+%(iXCZngl8NYue9U&1*6CuaZWSZW+m;9D2+PNd1%oKTb-$6cQSNevhc+?RwXc@VeY?RR7!x z*99L5bo$(D?IJTD=@rg7sIl&~@5zJT&V5~OE4{hXQSu)+`N+MMO5O%jv0JA?c3)Ia z4dG7LPCG5H&{)&=io98n%`s)0mXxd+$#r%}k8+Nb4J_5&7GN6oY-~@@;>f)7wmX~3 zG>-iAO?kc1l1JgsdJW-3@SOxW5og6GxmIgfY)+dQh&S;QJL=pDb~q{Npx>$@rJMP` z+#5RRr1Z!wXe_5YyVCYGCiD9b{KUEXq$i7(FVx%hQhnWPp9&SSRzk4j^C}!zyG7ye0iRIkGi*n9JU<3!EJ_blplm8&w@{ciEghE*;T-|DA{bf zz3+jJKJuTkzpLsGfDUp5KOh|(bhRopzYg1@FOjuG-QL*=xBE^{gk5DVN%~T3mKgjA z^-gr~B2N1!x02_03vO=NprRL;7K!<_^r!Zc&aF^yteE>+#{#yu>R91jLhnd#kR@32 z9O6Bppi=CctkH6esm*Xjr2}b zjQ@j?2@jr%cT$L+n4lvBTl;>GqGt1>BeIDRjY^!{nn3b1YVsB zA3M!m7%TeaUUld_@4D@8PEVv<^-OPZztQI{Th~6&+SB_7^1iF(H@|P`Pu|4}gijDY zfo#Jdbq_7WT9zcKh?@mLs@D%lUI@f`jjVk18{B1Aw|ZxXE~l;cOti*!wCHmv#D#2c z?#WsMaHgKQsmNBM+gp9PUvvBJ`BuelO|@&!x@2zq==PDZePD!eDsl!v;>#538kh4f zR&x)p!YTr&pO7i&E00oDe!2I;G~9d8JNx2o(Q5b+-u%}(+yYHQ_2F=RwgD|6s$|6> zjrs)#77G%$Y{=ZWHG&vxagM0RO%tuw>ifIeeQb|LH9U4Xd69cQXq|=2+T2DnW83KY znHx>8u-7euV{98-Y_7omu|5alg7)sXW{GMOx1$$%mmClau+`wBE4Ry zOozi}grZ+U&Or5)|A5-s))T4hMyhve96nueZUq*$2bNa2RBd{o*)9pVJ@@r7HJb=9H5WHEbufJ; z#b-O2%cb4mt$4+bz`qd>|GAPHu>xxlN9={gcSDI_ItDTwnWe^maJ%l;z6ujxU-dh` z&Lev!>a0Kd`WRbh_E3~ZzT9H>r51~P)7P+ypBZO|o(=js>4&7q6+I2K)p~^XUee_%(zTZFz{=~{ zkzB?PhLM?jSs|S(RW*ugX&u53zD_GEJaWp=^?74 zRLxZp|CX31@<!A_N z_QQ~5%e)_r7;R=JPPd$MtA1J;9XY-@>7x!Gl`owrYgw4-(9V)mw5ek) z9MF&xt5kPYC9`W;BkgeHv2$l1$8j=5O(I`^Q~n$uS5_hAGA|CJ)siAJD`_q%2cA~C zyQbWn=j7R-bF5QKuXh=3(B}pV&U@^>wHo0v?-oY;fedT21=p(%k|WgVf0o{yR~a5y zemAV8-yg{{j`TX17NJz>)*>qEW>xBS_=co{Ai*gK=ho?N_w3L)cC=#`Wi78VJP5SE zLflX>w?k)`<{V|&vBC$&bksg451GEMq1-Uc>@27F!QAw_PmX20(s2ALo+yQ}ru}j~ zIo*DPzrm*=dlnS7kdCd$_K8iX_-QTA$up1SM|9E>ZP!ZwveK@-NVbIMVp${htsQiUUi|9lK1{#6{@8tWo^;$FQ7GjGaS}J^0*_~?%9u9=Q(z? zmIBrh-FV&Y(+0JF=Epk~hc)-u8M{In=DiD+VrN>Ob6BcKF@J($Y&*pKj?<3MF|HFO zhj)ux`K&(AFe2B{Uf`ex1Ew%k^l|#lc^(Bh)h?Yb=P&M99V_TYUx>K4)0ItM zS^2EZZF9iSk3pu`E+=WUCA&9}*=@0AYVs3YpO)-$@ERv{fZEPuLO5~ZjJf)J3e)#% zbZV(fH>K@}O(+KKN5W^Nj!*V@+AQ_>fqJ|udp5+_Z&=HzcxwK1ZA5QQOy5xK-iXpM z?{D9$fM4;Lo_zekrL}wya0P=9$}QyVjPkn;ok(1rd^oF*GaO^PR^MD&vbei`qx>6~ z<^}W%ft!%Sk5OC?fZBD2TX1)V4SEH0kZHBRvW=l zvnkB6WsTwycM#!I%_h(|eWeo!49k<0-pO(D5eg1@EcL?~k+ceRpK0lzE%Rbp+x-yW zAipLCU%mIcTq9v1d&jbZ>Kj#XJev38BmFu{!v;i!;9q(jIpYT*GJ+&4o84@%vyVx% zJ0d%~>Z?e7T~8dy${oW2HJv(RG$)9o6+Q>P8tTvtY0IwGL*9WrJ&RXK1@CR3Z2~C3 zahK7yWB_oNG);O8G_F&Nvuf(faODj{grOU#7hXDLG7>NM$?iW1i5s%i5!$+KcDD0G zfo)BeAIUq;spR|5@oH!^ z>v6hV>N7|CNsYw~Lv2#mla|VQzx%`r^CM%sM)fbRFlwZMW$Rz2B&~6Y#I*e$*lUmN z65r@rryHQU)F}L**y&LJw&9{Ce4*Ycpp6i-`2KnwBSSd$wJ!V`0 zimj6>%-5u=%#X;jO;Ym7_P;FxFUrg}4KywJiqj_nSH?70uiD&g+&Yd4Z2&&{lX^*Q zAD26i>KC>=_dr3LeLOS&5B_{@(h=dvuKdSuguCZQynrLnUTq2FL}IyZ=qrWji-H}o zyytxxAoq}I!sgBWaygYKWq|Dx{Ul%e%xiiWP#V9ib0;lfK8Kb-8*mh_P2R-a_ zzY|^ez{hgB2fK!ht+@#m$5+Re%X4f})bwV-Opa|)9at>>jdXayQ;FHZu|(o=LE++s02SZFI1^gbzqb@Mo)EGCp+6eYT>`e90jBYim+lxY*irr z^S+21#hvQghOShGFk^R48Nbnr%i>E@ir2KaeVo(8H>15u?vq?uUi6=1Ub@FRV;_-T zte^$&2}7rW3}b%h<6$s@HW*i%2gSGv-A+D>NB+13Q{G9uqT`e|@IJ?^(b5OG! z9n!iCd35YHHtQ=>d23dyT8_2#toakAXi!(DRxG}%?}LKsxdksA8c_zb5MDfW0UZ65 zy~d=YorQROS52phQ8*--atl9VWjGiDNi*YpQt-a^%OZO&TZ23_UK}Nct;Y_y9vJk= z&R20Ik^M|ps}k>OeLq#-QECYPP{;sN*GLn%7i*qJ^w#0KX1coDGX`>a*Y3AKXy#d8 zRq`p$KT&?h@uj;P(5P!kgUkbi-?CX+Ax}=xQ`pQ5h?|of#(`ZpO&EICFvll;cdUnW zn_o?*%Gi0HWNt&qJP}a9o;f-qXs_tHtXH9nBPJK*_+-^4iWnmEo)yoRtS>rD?iJ zNwv294dQu~qiyc&=*Yg}dKQ-JC``IWDs+6wF(9sH|G}I5;~0CLOJw~izdKQdq>!s0 zSg_Yh`vKE8XsU25PqG=n8c9o*oMazE$o_%&SH>VySGoxTK)5{DY#Hqrr4F=ySwWuV z)e8HJf%*&$h0>BbX1NKtG*OZ4{3ZqlE?NSkDD)sp&gN>!(R zhFyn#q2nbSN5@7=%gj>-8X6v&Z*}EVm>NN|;XgTda`F|C+39B=Fak8} zz@_z_E>ivC`M!!iXZ-jbouzl`yusTL{qeI5L?G`MxMuR`Df;I|#kD<)L%uRfRlCrJ2fRB9_#{ZFj$P;*K$DIVohS-<{Ag_%Z62u&okmVO zV-U@&2cpqeTbyCHHH4uwg^@rYEuYxcc|9tsykw;GK{ZBjd9;jVr4XeE3 zfd>8=0uYK7p<0j$1b8ggFE|6y!n6FKAHpSLd{&fN_bK^kjYcG;Ro7Q=!!lR zhb0kFC|)2Lzxt(KJ*2O8!*tMGU}T&hk}~bWl6Fy&ANSNhPa{^?qilaS^sH&u8Gwff zIXvinbRxB-GbmC&rye*T9*Q_5@GS?gd9UUN-Z(0IrFXO+x5HPM#*$#4@trQ51K0{k z!WK{tRUs{@E^*};Mrh%=>8+M#R+pYHi3Ps~x$lO7C&e5bS$q*Br>%~K5Q8uPe&{YI zWEY@7m|qpIwMfp${^%ZxC6~Kv@&#V&r`sy(i`3RnyAPwM5)XXragI=UBrSTYPhq{C z6(UHk2T-|HSfQ_}V5^W@fou!6biRHZPKp_t14Y|qQN_-b@myp}@#$xu+P2QC_u zJA;ktd$MoJ9xQ776iC{OQFu_IVWcE{h=BVg6?z=#?PxNdi#j%}1d16~`z%*D6@GX7OGH{D8C7BWL5FTFL?^ zut}aM3Qa9aHH-O(qdPNCEpHTGDDMyNB`qPMpgLOtcqJG)(Z6jeNxxXDxo62KGgvLq zzG-G#_|-mC2SU>Ifm`4xmHPo#Nh2aj%Kn}+Y--f{z@kUv)G687%kAC4^tW>4?1tcL ztJa6=(heY^7m!_X$i4?Yof^xt^scF8KkT6*48da?Dt|9vd~z_%06KQ6P`h~plr61e zx1;OqgKyNk?GbB5^#1A?QQA+JB4V`o`I;mNTMh} z)@=SoTv}Ws5FSO}L$T%7QGn_k+|hB4TA&S~y4YZ{ zknaqYj<1t5;L=`4OR(-gUPVSt#p|rGN*hio!)nt@4s> zvrUh>pO|U)8&rSbfl%zp;SK>nZ6_2Xhc*umqehBLq{z0r!OS?)ONri{@_vYN&YHew zPALhUbb$eR&c64W9Zf#Cz;d)hdVyX?VNflFm);VtcKxBtaMGiJ?H;tZ=$m8m))7&d z7E(|x&qL_dH!Qoq8`Agv#6h_|Q85pYP145uKyT3$7i6*cyw)NQs6iU_AnVEZHnA8(mFTB+B4i+xIPk(8^v=mp!1~*@rX{sx)F;5|G1QB4$%-om z9JGh}5a}IPXZAQ`jYNv-fT*RYFV8zx)P}`a{@Fd8%-H3(OY0;-^*n0n;Klh3ct=HL zYI;hQ8%34w3^~jr78BkIX!bxk7%zLpm0}r})f(Np5t#(;Be7R27u1cN-fSO+| zhypIj888K12iH&JhqZ3s`!KVWrYL*cH6Ze-*Zyq(? zJ9Q__IB(V$j&_U`)F@EbDz-v@EyS7QC3&X+tWRlpUU)Ie1L*mO4sRJt1J2LaXlOhd6V4+sr{e zgX*I1SA#@2=1PlxWendifwz@vw||GXb4aumkdNXkfQ5nRx$q6ZJOk||F^ayP-{FE< zo%6X?&UVLz*|RY~jxJDe!jqQwdp~BC;+NmzEXfzHWoq9ih791K*ly1pKsQAK75p>`K`j->Hi4hJ!|EkmbLoqaAY&wT$bkykNzwMnZHVAP+ zJ7bniig2Coe|3ux)j=&2RuQC61X``ynTR!3Sk0Ufb>$R>l=sfE$MGhVhR@W7Tc~19 z$j2*I)Urn1u*zpMO{-arwy!WC--A?v*Sd|O8LpUPau*QRfqd!WP6KT@?}7yMQXZN0 z_PJJrxEMs54S2PJ4RN&iV*jhN;!?330(mB-D5x$ni5zKB>uTBO<^0Zkd8e`lS@BzL zyP3_qBSJntH3QDLXP*XK_Bza#?OhDMTGR=0&$PC{ZaAk0Rt%gH0Hy4~R#1rpj#r|L zeF&8^?A~@NQR@*ktnr+QH>X5$QYPzzBkr;wR3eMhhQC31Q1}m3yRzjn^Vkl-0E54h zgsaH>*$#p?&fm4RPeS(Au8d&LC0AO(z)nuPqt)E5UB=R!kSYH3xDYPHCzzEOjHEPv8^E_d!LX^KhD$2!yF0P*8L@HGIgWM_iuE~vphy^1h$FIXkle#_6 zBdt2I#3&gCe!_nla~IK(IA5cQrXTi^mAiKB2rYZg9K84$%qf+mdYt1F$2_g>S!oXk zFW(`Bd7Q2?N5j|9E~-$5zkp$^gjF?%-kcVvgtk3=tt?irE_3{@JBgc&#-RR#PhHNMkcfFqaMVHuK&D8r?KlBP6}kog6E$ z^rQ2-O z2ywjQ-Had5Ac-%-8QEe@i4muW)dVz0{)tr$=b|uz+iq0?sA$C20GnO zMpDk@J`OmJjD*I{j;+8YAktl6VrB((iY`V2YWHF0tecumXy&9+-kY)FhKj2x_{J1$`;mco*V8^cQDhy1Ol5yv%jNh*6Ikp-cdEJD|d^Y&@gB$xaK#e7wL^O5p0 z$3Qf4G`3Gi8Rm$LLY1odq>-R*B7JZ1sLfQAUe}u&y~Z2B_2na3=V2C##p^3bn~SE7 z^kF_|;B(?;7g3EUIq+*nGEJxvkpE3S@?X_T}@a%bm(OKn;H?C-zrIm z7e%>bML+d0e>d-iZ|(+P+Dk;!M}j%CPTQ<}GIbGEvi|I~2UYNW$8K#((+8QzHDA|B!x5Q}bOszVbnP(Mmkcq7&Oln#3FQ6ai zYu2fGr{BV7&V*!)LK1G)Eonw_i}J z7LhX!Y#gVx5z^Djn%5Ky`Qte`dEJvWEVnMYF&b(!zU*-cA0$N6Pf8*gt%iz*pY-e+ zqTJf5Fqo9mPQ7-oed_%ID?ex-hy*a1rv_tHnc(BYK#b%QkPH;1in&9G(sCFNoZEGg zNDuP~xYdnKPxpiwN2+wLD#AdMXk>C7ELqEAXhB4fkn3)Zps*))c8ifbe2Ot~SZR}e zS_>w&zW3fZ7Cr`fR}-czVeT)CNkkKchgiZ+76OgI{3vjkq5m;ah~#dMQ!C&lgid-F zms{@b^mx4W)&IR-tr}ncqXp4^{mNN#qX91x43)u1Cd?|zcV^$?iOtWyakXxM>G6Ti z9{XBQhoJB=`dqnDbSPuoL>fR>4Sg%N#rR^6v>cXDF=i>>(>x@oParnXg84l`GTnJ* zd$sBp=V8o|i`CQycNfH}E6j-eMB<1(GZv3h3!potlY-Ub26}S-1nAE<;?7MOy{!uD zE=yfmGE%dYGm4(QzkM$7o2X2L;a_QwbGs9A0*qQ%v0ri6XV^aSl>MdDmFsn4N6Q>9 zg~GEpu$u;#S*=PQX(0RF2y~oKp>?y2=P=-j{eO+1j_lp6CrvIp)IY_6AykTl6e1Wa zhznEF+LLVScYHkuT~xWSqeh6<33%GKM3B6N%K$O(IaI*NFeYmWaxiXR!JB=OUAL(5Ki6P&dLhvv>oPutAc}oi z0a=d_ZWxq)9QR@vS+vIiIM_KW#*D!#6@S<#MnBMtU>Xt(ID_lSNEj6bS@8Ii%Q8rP zm8|Lv^Y6`7Dsn)d86)&|)OZSzw2aV-OJc#-%(WS$`b=LL_Au9G$HQaVY(#eE_}+zlrw-{M8Hrikdc6HB(iN6N0#uw5`(ek(%Lr1Jqy4; z24FTcTMbPJk11v=-zlVA_8t3V8gkkLo4^6H)n<@I9!*u4S1tCZ^33jfUE(J`BgmHA z#P@JWzB&Q(f!WQsQnwmsruwi&2EOQoNhT=dGZw%7^d2c75m9)a#7Dw=I6w1pZH}-) zy5QCsivRO7NgN*vhkapsdGk^iwtT|6#2RK=;|yX|E$C;SkpuqcEj24<9s_4}~M_J-!*&3fapOgA0Zo5rcAr zA&^lVQJTPCBQfN!IHX``4j1iCiKDVbn8}cgn2rN<+S}=L`5Zopn+#M}hghf$(GV>z zXTQ3Q;G}z5?G+ft9(m@1Q8Y&ja7F~73o3;0LEsj|2zJK3yw&zDIHFI=mEr0@G2G&o zb>6Lj2QulJ?=^G-yJ`3cv2VH^$nDz-br;V3;I2NpIPhQgq+jxR8Ck;rFytw(^GL|% zOziFaJ~$MN*r(e50*^89<06xik@V?2F%|UKD+;GrLeYcoKbu*?@VxvQK@pCGg`WQ_ zf+X^JY0x0=t>q!sJU9GHtby$Ep>3p%6(SWFzXq#|R~nAgII}Vw!r;;a$%aoe>hp%n z26~7rWZ*O2a^<ys92QNR&4-~SpC$o}PsGW`Cln|f*nJd_eG%s=n~N@248j=a|82}3 zVqv|(mmzBitv!XQZ`0IJO(m6GMS`mhsKWVESpo{zMhYJ>$kaSy9A$jR?!W0r6QnD7 zfq*Y{4gQ_nZND*H(@ma7;Nk;zE#O@Vz47B45CUopJ3icD9EDdS_cHqvtY<*WTe3?7T~AiQiyXQ z)A=6nEYrDLyafK?CyJ%;mv%1HitmCFy1(#aeyh;E5ND+GCag%w$vkzGRJxUiU0IGe zo)kzc%IZ{h3dAgoB{1OnOYC5>Y}Mll6(@~4VKw_-=!Dkfmk_1%Lbr(e z&ZZh#B0;Lb=$r%3h~#NdgL*G;NW{qbS8yL6$Z;hwjB^98SB}acTzaK zytk`kS?4IR0xw2l;&<4z)$p``PJU47+|2VsHjJWxy~jwSh23eD`TYMFmyP;nq}F-( z+#vVDY{mLxrI1!L&%e+PCzTSagVWIc9~fYU`#))XQ%k_UdjH-ARB?=(SOPa)>A`y0 zNGl@Tba~AOOR8X&)+11!)X> zAV)AY4(NRwn6k72#z~A;*#*Mn(E2*Bp=;G7exTEcUB^q0E2Vo>g>zqJ`P0Xsu?}B}h_1j(o)?K1Ax}l5r`AbN8`nEP7)M#&4Nj8g#KUv80oswb zQ*A>*(L)s$eh%;hP&Nm-Bf4abn;JIXf`bD9Pk~~4K>O0JyzVTZk3iY7{F_Bzqst`` zh@uFx@T_x31cw4SYA_vQAik|AsDx(7w=$N>t{6WXa)dIq+!a;&{hVE__=HItBzPJg z$<|&MS&&~j*gQn7Na)T}I0y0Ap$53}B#`SAuY5RdOUR4G<)rq5yV;`P-p=h@g!9LY zbK!a!jQ67!!oTd>H*UXi+<r*Yc!w~M*&T-UU{VJD z+)HX&lFf#M<52}yz)+|c=KUReHDqc!iCxmO;jC3Q;NOsHzRKyTi$p3;Glk(v zi1~L}79rxcrC~gLdkB$c)I)1gkb_iX1UBXRY} z?vqmVAsIoYqog%+IJ4J$Z#7JvK!)x$MA#7$5}&gDcAohHn3dv= zVG9CpNG|A-p`F7q`Gv%a=5OH*Nr2&rAtLZy1|%R{BFOyU=kHot4@|PsPJjHWbV}k+ zT1t~yiyMX027@7!la|xs($dKRwbJPU;dSanti2!U_^h@LE-B0wofJefGu56XY zsH0O(6eo7Vkg5)FW*zEP{7T4_dvB26yob4+K8nVZi34gpv1htS*6i`2M@y>l{{2k5 z=hQqxTqdo%vxYo!jV~Hjr!c$RE}a0)2${hUN~!8Vu25SED))gJ4B9l1uzqDa#@?YjfAhcfh)}EQ zG;Dt4q0i9DW^&XRG(f5odC6-Dn!1ntCbV@RRH2^LloUAWTpD%c&X=D-oiu`<*Nb6M zx}gy|P~ws!djYl4<-`V%IFKckx2s016HRiNaA0n-2l2uJE|=79yD21v`ZeQH;qUXH z^@R?M-!_cJuQJYV&G|rUjwjvOX<40^>9C6^abjigQjL$CtR*&AOdB6{yT9^@_o`ak zAKuK_S#9fYvSaIm(@X3YZl3D?wCT0kk>_1oV?3(H>W%J5n&x@yWdGh9@$IILwiAg3 zw|eRu>mTBm{v?j=u^z*A4)aJ~COo>@M-$b^(&zgJrWNIN^j*+x?14sCr%PI&=E+1J z4=yaGg;L=1;<1$sC<(;pn8fvfE0QWfzp<0o!4qkZ5?QMItXVV-w$w4gIO@df+<>11 z4VdBdkHfrUvd7iZ=A|S2n1?q}Crd<5F$dJI7t{9m0RcZ*-!)1qPviMbF${JMEk6TM zigU6!LQsjX!S}$fji~goK4-WE${xC%rVKH0(*6h@^AR{#t;K+?{7H$62S zuO@0+Ie7HdI2>r%xNhTND1rCNF9Gv`!r|p1!t`^@81wTw{Ke1}?wCU4U3aqSP}@s_ zrg5~zO<-5%mOI%n{|>)bi0(5s`u!F3$b@he6=c|`V@vG)VS3wW%>h=M3G&)D!bt(t zAgI{~L=B4Z-K3GtJu`ieaazfA(1tW_^ARKqy19t*%R5>A!gj|Z?Ud>mZ-Lf?c+lyt zX7OaruyrwX5%*oKXigc2jwOco;r=Gu02TPVq@`27e_@6lq<3^R(t_PLS>qE|cm7Bs zZ*eDOeG}CH*eykZH>}?22UFK>gRaIA3*Mny3Vqr;j07K#hrScs^~C#?LT27j$Js-a z*U1%oP$^d*cpTXbIs~+?^q^p1{Dh0dke>vP95MFyQ!m0w<7h5b6OB@zSOI%Gw5bz^(dp@B*}RCF*HP*Q1`0rx^POdzu#kMLGX-LjGHUG0uubYvJ%}p zzRm-c>Vry!)uQoFxJGj1yPKxa4f%pVwgArzWMkRe?`pm-X_0-o z`!420IN8}#1Xqr^fbHm61uBWPL;-~8;Lp0&66uLJzh&otLP&MnwCU&r3rJ-r;c3OJ z8`fG371X$ROzRYfRe6Iu6S|7>-UN4>@$7D?oWjH9znU{U*x>qTZF@YXT;BYEO>h!j z)yc{m8LR?d=0gTXrOOuX+ars90q19-2>$Hsad3r(m*X|jtgL<3B|Hal5vy;AX|=a# zSHwwFeqDWHj9_2r;acOLQjgn~BYfb9^QD}dhOlRzyQnz@)pMwGk*F&Fm56@%49- zPJ$aBv*0f_zx@ze5eYG%pZA)Z$miX0CHiXOEfKPieq6&+n2aviL;VD=@*(!UZ83ny zY{Mhg5E@a7L~ES{D5StR-#{M%FBt&^pn8>86^~3T0SjbYQi#U#Hj@`7{I#v~ovcVX2h{Fjmu^dZ9Sg7saGX=@mT2Lw|jf(zj%iH zv6N!tLl)zm$dggnDp3@Jrzq2~zo z#Y+^LPXJnl0ug^o4Gd;jA4M5j8|+q6C(q4v=NV->($~aQ84BUSE#fcP=*=B~uyUKi z9D#vpU(8ftR-P|8CtC4_43r*Fae?m-Pr<+io@;8mV_r!cg zkl?E7vrNy9okt)1xB6#bUM|EFcs|jBb?kiWSE=ep$gzHZut1GNBRB_ymhWzoFLGQB zk%PqfacYcNwO7w_+u3MiHV0RLDW7B!*A8 zA`cw zcBU={r!~Z#me(_0M&}X>J2@Yortu+B(FxI0=f?Np-2%Ki_k-t&a(Ka2Q>{g{Mx4XwB|!f?N5?)3F*tIZ@zov~@4FCj!yze=?K|FsFI6elCNj-SK+2gw53X_Y}3WwZy??L(d z@5edE^u&LFWL!24-G#d5E5f$o%niJvXr2df+kZxAZ)uziCqXCi6O0hi8+$rtpfN#8 zD(_hy%Pn=0_dC#2zimq$4^w)Q9Yi(JV=!PLBRj4zc1@lQV^q}Uz#mS^4cm$UvYSeW z=RH2`dfkk-dGnYtdVUAz#UFyp9da+8vIYhC>`{u?)(1juN5-Ki4b>_C~#EFeb53endPgXD2`XH3^=& zH2*Fit$CL{(Nogb$@wVu53`J|gYz4{^|D=JZ)?`2AskVCgIVp+?=;exswscMOi>FbFqTb}tep z?SEbi^Yioce4r7xfU<^@f7Rzgko(V5_Jj7_CqqSCe6bE%yag?G{oRo8clq})mOpVW zzRlv=hGD;D-2DC5AJamk#>35SnY0ABCu}Q)-tOHEb?WW;-jYjSCna=JoLU5wo>Cvgcj&=867Gkgtcn&?rvIvFeyVi6)&-|jIptaz{*cUB z9J`NsZ%ZA#biv&9(d{)AS+|$2ZKNd{OidlnmsM*Nt$~-lkOEA1g^ix7gEzfoR>o_= zXnfD&uUs^fxf(~t_PSaHn^u>&cZj{VcX?>4;L!SxPwdj)gzE@UpdMt|V(gill_H)|9Rc+<PJyv<)e@s>eQ^iByw{$4VQ^U*!JMt^|2?lDK;-r8Q-9wpC=P-?rbQ`|P2+!Gj zEwCjl^j-;--?77SMcOhY?~^wdlr4Tu-BsAu-+9T`b-Q>^+vaEOGP;Y&s@L{=Uf%rP zQNz888sV`HUPE>7fE5+qmCqd*J$;M*C$#CzY} z*u3YZz6#&s#PI5jq=xGGujg76wpAOrKT-XflThTHZ)^5Q$=H zbB5-qJ9%~ezxJ*@9?Ims{Zsjo^=Y$>u<(uG`xt}BF=E)ph5l4i&d<67CGRZS|l z!mO~9#H`IF_e6vkBIH`Rj7v;rMvP(nKIa)-w0*zd-~Yc~yu2`>D}3788>h120Jr1L$;YY)!A?l zj^(V9hoqsf_77YAD9#cd@Smq4UCUs!Dx)NW1ci;IpT3GaTYc$u#j7{bq*Tq^OEK%o zf%hiXP*=+J4yZcc541LRyb~7c+;^J%OKKvr1{#Cya5FF1T~09(+)Z85r`T4?gu|^} zW*#Y6ato{Sk+GdgitWyDI9??@9CxanXm1>EvEeI5jBId<0b`E%VaJqP*X7wyA86yn zvTLg&;SF(M${8_`*$n?#s z2MPDEDa2^@B9`u6ZzZ;lo2}(o+U}s81t!w?{^s4p5-g#FF7lIlAxp+EN+_Z5mK?bl zvNEtIez=#Laj?QBmbEM;$uvTigW6Wdyk97yQou#OJ|2a*A!x{KR$tl|MR;>Vl49%ggO369(kiU?b^y7gA3@LuzmN zP)2crFL*Mjy{nI<+*%qgMU5CetJ`?5n%Vv0Lk-wSrj_kT-3%)D^GZuof(-e){0&SG zS)KyZ48zjs#u4s9qElyN* z(`O!nq?d*~$4!D`J${5A#(#2;2KldwTaL1K3aF?1**E$zqty#5@DseW*9v#Lb;Y{l zk~3Ssp`&l0mdHHb>Sfrai#$~G;#Jhj6Jq2>-69mGmIU+N4{2X6DP-lZK?XwbMT3D5 z*{G&nQLpJoOH3&@!4}m=7ss2>!(QNLxrBu8XVM=xeRO4pVirZA72e<-cdHW(W}2fn z7}__wHE)8A7z|Kg(FbP~4C*^%Rc}f{g9_Hl1Z1)g$%tjW#C1vDZl^mG{I|j!QSf1U zXt89%U@l-*Pvk;E7EF{<0t8&wDNTK6UYLeNcLva5oka z5$L`fBf}cJaRSS0yPK22@bF3pB}o8Nn)P-)CmJok)$KWBzUA;uUyIV=ZOp;7Ft0xu zyur+}pGmD`t+Ca{Jf8|@y>Ek`Zgf2@zYdKoPSI8MKRmKJ?2*-#*)&)wuVO?<3_+}F z{dZGgGd2|-7=irV|4;r=qyJJ=y6e&36CZA-d-1#S>lFMvJxw6)fK&LNR=wbuSVeHz zuGAuQy);Uys0k_@ zj~wgf&Rk^I*MwvUA1(5jUk4VX2`orRsS*A7$?A8c&Wt=~$f$yOhC1^g2Mb>#wjX{# zW@MDJ#o!%B*9rL^v(`W^M=Q%-pM-`RY#TYuRJrbDf?w%YkL+sw4DI98oa&IMQ9zsy zv08CvaExgp*dovmafDk|MDU0(Gx{^GQgRD7NIcR47LcdqWDmGvMRG| zSq$-{c>ME5m@fZp7vlE^ax4~h+OMUCnMW{<^I)-{G$w-*Uzuo?e@8RUkmOCWaFIEXmN#L4Z$R?&h+t3{rN=$+|Ot#vG zHjEWqts`f{Tn85(dZ0}53q7>P%W_eCg-k8?>rfa5-w=3wh1I5Q3ZKeymW#JAl{-!Z zeepQ4)F`_9pMeXgj0}Q0h)Rq~7->lT;rts~aknHE)iv^jr@Z7Cx;3$7cBi$WBI zA7Cn@(rV9KI4gg)^co{2(l)it+GoBJOstr54xEi2XFl@79HT`TB10yVUxz&M(!aE4 zfVJE?Ki%lT2-JYwMkwJ4giqME7U|@p&M(nwae|JhxwqSz$H3}{$I`ugWtI(&u|+HJ zckAfd?{uon{`J@jYuILe%D*7OY%Ya0D>UJH+oDKciG>Z$!@g6{30Y5aBP3tJg7#K> z$d1DC;@`qL0fw{bhA&LG7MszMLD1Hmq>@x!ag3X8a!2lUem_7_Swrx>4`3x(93r81 znW^3MMyf#l6et~@m`crL_YIsqh`W~fwDpc`XI^@w4+-fXhcFsy0zecCg#Mjx@N`B{ zgjPVnV?Ps~o=f*83?P14Y>409TndRj^`j;pE)P)W6ll!zn`NUYia>^}-!V*W9DTpE z|AWw+m)Sd9wgs6_vd7yYn}B#F{Q0zSK!<d=j+53(yQ9%v73;I&l$Y3N6_Y zVJHsRS!^LioT>UCj!Ej@9G&I9B|S{3=NBY;P1L)PU5ntbc*OouPWEn0LRcQdodWKf zaa~s81q>B|{J+!UaPA=s)nDNQ3u>eZku-FDy{WLf};xPhJ1=5D^J9CV27u+d@pf3a}0_(nBeXsX}~e zBLa0XgegV~uSZX8-&oki`g;y1H7Ju^&wK%IWJAK!Pwb758bF|t7{~ouh#oV)MjVe3 zCqi!P8;lHA81)*dlB#MxfgDH+_lcwW47vffjPY^0h;FJPqKR^+4Uq#6WzkGQB6bAp z3UMo5XdleLSn3ZUBY6XHDY_{bHqQcahKC#r=}kX^7D5~G9cp8GD=h zNPV8Hio*NA$yFi<7_x67_Tw69cPEG&GjtxIaRnq^e6 z$)%e_1wL*g&5|V70&lGNa*ZB}H1qCl(B+1wX1zAx)oMjdyrJ_mrtu}AjSJ)C;BpJ5 z5#ucAe}P8BW$FPupga0&NwcS)D;ghA3KzI^raQ(VMHNyMf5LX;`^GV>5mEMEpul8; z`X?U&dITD17LY*QtPmfO_wc-)aCnHs3N+QZ2I$5yfEleQVQJQLUQ#V^?x)j}(`z z!mkX@NW|s?JSY?erjfL1m`>|ZG`B`|*HDRBO%bKnI+Qi0_L2EZfeH!$2twD(fW3#w zHV();HjW>7TKcz__*GM7^WSr7KSQ>BH<-s&e%XN2_Y_zodeaR*G$^F#B&A-O_aPt0 zE@Sj?5pybk5GQDw5q`sm2lzrjYXfZnQ$zZElL!Dt9SJT4-u^lmXv>RhsGci-wQB!FGQ#|EtZbEXxn9hb+IMjC(1=HG1y?|WebSTlr5u!;02T;b)=?JG7NgsK1=|FWZbM%?0ii3 zAS1Bxc!|A>5^gEa%cR%aL^VvXU~JsS&_l4`N?E2;A8T9Bu>VorgN;R~G^G>QR4-lCt)GeZ+D+})!>X%X{qATPxI5B-& zS#}hgu>rF2ec)Q{F|O4fVs$>$LC^jma?32DqN->5&yEesHhwczyyv$Zt?9^lt} zXw>%=2<`+Z^J27chY4z+xwFvbXVaA{C!BfdnUTX{n_!9{-PK0yJ8^%W#=N!>-`prp z(~XWOI`82%pQI99y!t#&Y?;3*Nd7f1WUmk-4W^;A;r7VDMx`E1R8dR*X=@pEy z<9%)1;s#il&L<5|GjR@CK3yKz*2dUV{eLjTbUok#^*1{BzLnMK5#X*N$ojQ&>gnA{ zj70ohMg}eOjO~$h8pQ--&a69H zAnF1^!A6e_%*pz-bg)#!27PQEnH#~wH3$+VR$TK=*+3Om97!&x?YDEaxe5>h5?#vf zB~|;}W-Yw7qG7*XV)@c}_phQr5B`4P(TAdr#ZCR5(IwPWr;LCbLi`hADL$G2Kgp&#qUuICDIoIUY?3(z(U=tx9*`I{ zF!>@J%x{H49h8twp4NRa?`44;fI*#=3};Cgf8L?n*#-2h?kM8R`SJn-5?cC^Da*98?fTRF6Q)am3cSJ8 z!60G~Iz6#C6IH2OUF;-nob=QG)OH5M3~m_dpVFa6kena$DIgW?wA$@x?C2!iK#Ho8 zzvSRxP`J#6K^;i!{te;^@Mt*TYPA&>yqx9=SwQ>J!J!iOTp70+i}e}W%AZ)@0GvKL zpcMgqj)X^_NOTQU97UXUjlrrS*3{ZQk@YsSL$= zybn8Oz{|v|a50`Z7QR}rAcvm_r>apTHAnLIm*k0+k?{7cYlU+#$wSg3>dF4*ZTVB* zb+nz!UBKq~fPmPiKsr7_J3y?|q9vW{c~o}`JFi{V3_Jf~nt9>13O;DOCWG&L^%q)nok@ggX*-kyq5xBQ z*Dw`gL3o8q=Xo9iM~Xu?seH)aNyQ9~T?d%8%oBzCg`X54h>0sKIq;C2g zVVSGUUV7MK6#vx3aO=Vq+; z?{2a1*C1L&W~O9jH+58(+tMKz9`20L4;W*=31a#4xx7kzf$tc5 zSdywQkdTkn5hMvZC&fmo{=7b>nts5z!_=GHV$BZ0`?f6nRJmlwvv6vn z(j{PwLJ26&Im0n{KEZ>3il3ZPqxz@Bj}`N?%%I_M#s~b=*w`ByWh}3~N`APVlVwIN zNS}JVB5??>=g*_#r``_);r0Cmm5iy;VZO^BE2w%?R~UT1bwS)o&BC`e&{Ljx55JC~ z?>AM&q)|W2nPAcwQ?>z5V_%k&%M`WMzoVkld=81d5 zNyOhW=Y-+37Cu;4aIuT1qT#gXZkr(ADfeZ?TzM8wsRK89fJgUBq1ⅅD`@pX$Na*){C%$@SWS#}G2YgD9Y_a|z9i!nVzJFPtLjJv$`7MYezljg(n3SCNL1kPA1UFJ|u zZkWjaoJY*)-LQ9pEmF+mY&zS~0ZVP=ALfPj#=Uemc zs#@S`Ntjek@V`nhv%F5Lxw<(K-5uO49NgWVh>oPMe^+0B%n6XtDx>0U3k83VNK4Ky z*fuP>*O_a(cR^^v_qj)UGYAJQ*S-4dvYhW?YEdAirtJOe_{HuTCndw??@$vJJ5k`` zdGD`6+?H`e=R{+*JR;v${!2c+-4ww7`XUH324c^awy zM1A1;${(8|->??2R7zGUc#LiTJ68EhP`voh_q1PkPY{M%%=jrB*N_7OT64w%Uq)DR zi$utt?wC$TuZxz0hIK=R^RF)ddH6OrHnW>K#C0{vT9yC8E5XY++iT5}HAVO855BzC zebeZ09Ch)HJr%(U53Rzg5^De46?>*!EN$+gj41tdPdmAeF+E~cYg7H=`IASj4h-ZA z=6-8TW%4FRZo!x?hB00E)EAbr_T&{;jF#SE8?0mJ>`=ZZ zwlMU@2R$!GDRDaCRo#In5~;eg)t=aIb}4z6dYgDoDl3Yo=O-Ya_Q-ItskN)n7&ChA zn7FRy&b}jsDJ6qFlTT%TJw6*BC@!aR=JC&|T#n?;loBPnz75<+uD&E|&J9vengy>CP~@T}g()-+n;ODz6aCMCUc(&gmJy^IK!M$ogz zR{2+J56>yds+UhOTorWbcTb-{)AFQyk;JP#dWW@p&C8vV8|JN8uVtzEdgD*L&HFUJ zn|yKbs71s5_}xL5cKr1BWQB9?;-`+!nmYI24Ln{XWj~Ucw)~XzrnQsrId2+=TZZ|= zK{rk>3)-nQV(QE{XNb*_W|rz5oon}I#Tol@J3;+}A8Yl4nHF!)+jZd_S5RVBFUaaC z76jujXYsf78U%hiS(OMH_SQ?PtE%{lV{CV75Tg`ZP&cOAi`XpD=H!)_4(0F|8!)h z3xo=yJAOae)q!M#Cigz$nGIwd*r33L;(K9Z6Q9ul4VDMq&EYgjZ9V$@y5f1gTM-kC*eT6tBtn2CG=6uY>#Ti}uo9!G{c$B;c+6aTSDmkN_DcE|UoiAJXx)TMn zF5N9&Dk9?Q0LytsWp}t4s7yL(=jL$S!X09!Bk5cBuS3{qTm&_Dz#uBjXu)aqr^}O0 zIyktKrtb**Mg8C2PiHAkBo9WQ2nJ>56LE(2p-b*39S9D>Ppp-%@9Dw!i%)dJfLw=0 zBxdx;@+aXvxsy*jeDh`s61NqPQ$<8VpUf3mHlylE)vs^n^KE?HfthEWFPn+15)t{w z$>;0pUvF8T8(3I_b>e@sfqmWR%$WVTN$5}Q7k!$J;QNe4Vemvmet^G4q DMv}eK literal 55234 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

ojgV zda>Xw%*uLcynnBT=p5o0b0IN)X8~l(z$9pR(+zae|B~={jE;h+yJb^|kEM7k{Ik@= z7M_TqfBLlx9$I8~#q)lWH}1gKDSZh26zAOG=!bnelx}(8_7aX@ja^3LGt{7#ZIJGJ z=S2?pf}c4AeERq~84O-CPMV&JZ<{3-9CAvjZA*_&{Ys)VczQbM^B7#X@SW#^f=w!f zJ)}P)0s63uB+{&=0M5NHB&x>&2UoS~VF9~|+$jcZuhW0(0@AkO?Oor6VCyypQ&WBf zrJG1Ho|XKtbSf)UbOZ+0Z+LaPpIlx@60y69BskBQ*!Zf3=#?9I+r}8B)baSy3H!QY z&3g%rjkB?Hh}HIoHS93?&S3%`7#X&;MQW78F)t1*h+uD zT_M~N>wNdyDZ#wb=pkcn6XVuXpa(?Bb>uq;QXV&HWc0}_;=Dzd%luo?jTTqDo$>2A-qp=@5*k9t( zvN6W^CcpR04gSbP57*^O9~sxdZ)jg}6N?*K>PzgP`N!lmaftCr>&iUwH(5^}%t>gfDz8YlWU};r*t4!rAmi{TnJ0 zw$B3Ud<`zU;%@EZrLTjJb@mq&eROc;ZTtJEmw}RUES~9TNK59|kj8AM^ses6QjJ$C z-_)ga$Xd$~7YLR$88ae>n?dG}2OShiu+d3k4B|GbHyl2w_>NmPXng7k%^cE4xyLs) zahR1dB%*(wF{e}Q;j1|EJs?bBC)Z6o?d4~kKCeUqRLp0lCDRmIKOMAUr&$O>Ggvee z9C)`dF}p1c)aDzCQZ-Tdg(wLp%+eNz7mRkIO+8ZVc>)h`fzijidvQyP6 z17coNZRfdsXe_e9Ba9&@V|DciB*pF>(0x|GdLguDr;*6y%(w6jiOictSM@Q`a~vB! zY=>NHNO^YSgI z&k5U;=}yd2$7Tmx)~fCnv_yJRiTiHQQvpVn0cy;OU7~wg{T%WBv`@&?;TsA$V$_n! zhNAk}B0$}Hj)!_jCSAyOVKm;lQM<3#-uvsez-P1(=A|^UHq_uaP^5XML%?hJR{^_i&Syd`9+-VM1Uyt=<6R+a+D&DvL)e5GzP()A5Nuf~|hHBq1(i9|!3Cqs(#u#OQ5AEr*RHGG5Z?0d-Y;Tw+;2%#p>OmGi5KhpR7GP-HUir=k zg4^CHV8=_+`m@DK$UBFMH25!tPbV|nEbnseD&8@0|41K;X!N&3`(l=?9{7u2 zbHjv-?bbKB56E2+=N9^=J9HCH8g3rdnQL44t%(ir%+CwGEjM9pLUI{#p&`eL#gJHJ+%+H%R(?^d^o@Ap;)ns8F#_mE^;%inR(+;OC&}S_F;qi-rHM?vp^e&OW@6&x_~+r>!w+nKKe`KyY7J{+#d&jya4+uW89Vt2MO=l4;-~5sf+2Vo zaV|dk66emdlGxds9xLusLTW`Dh) zrjs`eF{BH#WKLyZPZo68?1))>3>Q2Ne;rbsUQc2ttk=J#NtTG&fDvW?cqzypivq2* z_m#-oVbX0>^XB)j+^#Xc^wdz`e4L%(sZ28su0#OM+Pwu&>*;UXs%%rO%5k2VS1?tr zeHxwuUI36Pb1P{p0|4mD*L1fKjXpG&FtLyF35wX3_#^eGy6CG-%+3AQ;S^mf;tR|@ zWCATdY*CY&Vqeq93wxZ`fjTzKtkZP8!m&!WGx=*jBd0WW2ceAU4teZi$GK0~hE_~&j%|8;o zBFz8j>vPkquP$!4H#@Zx;+h8N+lMAtY$8?cpCfh zV2!J+=wca~>UMfgM(_rfOS5dpt?8XOU@gF5%ELeTG54c>5CPTAIV=x(s-ynYhFX-D zW_hERWN>nyJi*Rz`&tIW;#VVLGEjF$zLb|TXl5kkna1E`| z2R%dO9V88oQ~o!YQk297Hleo1Xk9@g3p5g^AiNz~w(#Kjdif$63dwjUX+_yAIkSL3 zjQIRs(Wlj$NyXY~9632kwMQk9fyn-Otyj!Bi9{@!$WrOjCitJ;J73YP`uFzin~$p7 zTX(%2rIa%&6#Df!!MKE)RgZdG-A`x0U@2qlofJ*--ghUP3|_S_#cti`?|8Xq4WX{4U_L2 z#PeR*oH)`ot=30+6IMOX5 zWK~Xx@L=-jE?|;+feFw_4Um$Ihh7$}j>LH<-Yz>KA?kEPvI<>VttNe`J zr5*Alznyv~%L)T45<5Jm%qDz=rP5zAMm)>96APn_$WjN@Y(t&{?PCcN0ebLH;6xb% zQ`^`M1FKgbZda-D?L?~>d#dQq+JM&7iOkq_#E&?R3~yF`JuM{c)TM^(WH ziNwv}+b@ucWDg#7k?4MusE+e(K;L*jLGYAVi=u|IJp1fvb0?Bd6Yc$HV zf2`apt~cNMN&Zf7C1ttRB!bmrRh2=chXkmlM2-iNOSn3zk!TtW@pSbQ)Usn1Oi%88 z*R~+>@xw@bDrauhBb9aLv{KBK-bAV_na2!-?m4>)ib#>(M`bLNXYUx3%E66MmC>dP6wV>;S-Kj$CFwTVo~bFZ|xfsk1nPBRiWS@1bhs z+!^uN8k0Q5Q!ihIVJcCtM9s#@L7`A{aKfuJ!P4C)d&2zMrh2l@R=WXfkF&3Nt-6q} zbo+*{o8jqcVYN;t-8VvoY$a=fh?`Rrl+S|MQFSc8nnp{`TmIt*bc&F1OgEq>foSN! zL;XGM9G%>)Odg(iXQ|5C%&}rD;BS*W-N*H2tgCrR7qa&BX*AxGRrrNbEEDV%sULYA zHY3jXb>fG^CiqPOj+toGnrhJ*@<|bV9E8Hn?i^W}V@!bUxV$hKOzp)`%a;`F2`c50 z#pwOxsTz5s8tdPsUmIFV(StbM@8}E8BENu8UlKkF%rmsibmntRrk}%zEX3BtdZhm> zpLcS(pjzcy*m5I#60f7z6o~+_ib3^Lj#MF}KqF_Bco!P?P%d31$@7xd3JjoWyyZ(= zJ+>e9=kUoSWkg%Zg1HGX-x$x3fALkkGLuZLNaj~TijK*P7E^x}TRr>(S2PLRlt*ka zbli)*m75{7Kye$7Bg8E(RwBVz`6X%}TsaK|E3I`GpQ%%Jo-_k%uGLh~o#_%{;WH|m zA6`7H<&w)bEV=JWkokkOYv0335P%ZEK{$_Np5ly2gyIm7&-Cjee|^kZ`^o&|KBh^{ zZR>jFL%B;&h&}Bc_L48F_ z`B^u~|3*WwZ4vM7xZnnuJ&NgtE@fM5pcsE;rzJ^%h=gT1QW+%%XvtutX8V|IA1w!H zFkvh8lX2!icTim-dvI{4YvajRtpN_nsgJQP4zW*7OPohi+BRaWl0vz6t-=*3Fid{j zQZ9Ht`9iQZJ?lH?>-*F9svdG}*8+KjpQ(aSY|+Pw+cH90cDi4lR6;;w&1^Hab8S8wr zJBRHmTpoalyl>8{KW$(qtj{=_4{F%bM?CC#uJ>iLI^g=`qh{xFv661NZs=6Eh81dZ zoR8yz-$nGzI9UTAeQS27=X~$OXW9#6!DsuNXSbca-}M8{d6!A=$y|ZXf~DRCsMmHm zbhMwt#7ogg2qn{{m+#Y`ZVe-EU8%?1LRtUspFSeI_D~V}0S7nM_89KPza4-7b@2U~ zq8&Rg8I!#m%exR8<2bb zD2R*K_3GHx)S<7(9VqxxajE5YYAiP%avu!2UuwST4vvCc@5JZk0$HM0?s5I%%#vf2pYv(j(LuRDc^?<_TWpB}g8 zqKo+6Bkt&Z^FQHB(@W8NIY!oev%@q*K6AgiHU@;|w|2DeFi))43~qOwNr#+X?2x53 zgAei3^dTD}sXpEwr`J2QUhi1+Z>NIM5AW9oL7YDgroGQ0EWIcCOo_rdEnZhgX><#? zzHY&NX%30+ug{Z!wvhX?qceu}tviDNAQ-YSvJOEKcRx2_)Q7l|Oc~wVLAtx~MTG8d z!L}_v_i1GJ_U;}xQ~JW0ypmt7!56u{cSmPCsKSgm5Yzc=Y_HQ5^{ihI@8biedYizR zQb+>ilFZf@eEa+!d^LDrS4%+dd%S6zChY5W>AUZD=YB2znFsRnehRwJpxZoZ!(D{P z{4Ck3FNlo$xxtG%jQgpx23xfD1#?F;bURz$U`R25y9nGKaJRB^DI(}yN#Yv3#-xaN z`+Ueq9-ofn!Cq#wMf z+hpWKir>oMY}j%yky*32laA=V=Aer>1*lagi}dwdxw{H(yv-~WYa z!zrmb$K9r>bZ!rHuzl~p5I=(j5p34rNxmpCNJoxfa&Ic9-i`P+Qu$fW_>4X?_VbW~ zv1}7RCk?y~IsfMcTqAFu#au=pkxQc^w~#0{q4tS~k?c4TLneTrsb^bNl9nK4qbJUx zc`&kb|6OqTjn$qHh*{*4E}X;VOyv=0dO39|5A;M)&h8O668>4w#3^P(Gt!D~YmO7I zHiD#!w4yw?SYYPnYbQa2>sTkk|8@hn(h->N;(G)Mx9h>dnsB!J!Cs^mUgEH(?B2n1 z*>Qn?!z2%Q%}X+rI-r?|qD;88H>rp?95|$9xMdaU0WdjZ%)}>X>f5HutR$XM9;)53 zg8zkP`4TwQHaK+G-vkUzt`nG=MVH2@*LL*$K}Q{GV0>jI9r8X4Trd%f2K4X?PjR0! zMNiqk(R$}n;|}@)5RP$gymzUO>h=xgzhiZkQ% z+@yVuIrMu;9$JsZ!JDS`QrInVPtPdtX}l|pD^b#_!5Qu9B&kkrHDx!hjnfIW4RukY zM*}pjr>VS5LW9Q(UO#9lncf%HdGlCma8x@&irVo>ns<+~+AB$y4FQWab?CE4j0|&L z(>DUoJp0bA)TVi{Nn>6en9AFz#nfw7CaLK=T@|!LGdW+s%PRl4JgTytD%~EkxlYmu z44q#ihV*Q`3^h#R>Rz#3&q|k8C}iRHnplwz20R~whHnK4{|FFtJvCn=Wu4!WSTv0y zmByJX${&(Z=CLdp+YLw4cXk_HsY`7<+{AU_Ia?uF@7+9JP8C?(5=zA4Dj&FNoc2~&&qeV~`XZ4&$W_~rR9RN584Tq28d)hsQ{)!}Jz{p* z9JC?5!N53ixT72$3Y|Z(_B27c=aRwS;X$F7p$(Grlc_VQrlK7ny)ug>`0q;2w5^{!0~6hBqn~(% z)(g~+H3LIa=Nd_RH%qUhtR`;()V-#IzFOXY>Npj9$wR2DX)GY0g)FR5gj9 zvp10B>X;-97uYy07p}thrFO=)T_$7tKP^2q=(1^@bOUE+)XOd4JN22eO7~YdR7^FR z*gw8eC2>8nIR8^W9mU1DM$=5wEd}}Zs=*Nvvqe_;12bABtWIvE8?FGXH; z&~@HGFm$_t@1l4CEJWQW-e+%tzeO@XpPsXG~ z-XoJl4!fRl-z!l5&qcADlk$(wwOPEGt4r=$0Q?O8A$`(m2zm3iALQD)eUyoo#Nd?J>HdNvpZnIF~YiJt3t1_zb^==`^i7hANb4lELqa$lmuduO09_wv)YAwGe7` z&b^&O4c7K#ch=TVqH~^^wzQ_~BHY)kluL>fZq?r?1q1PDqD&47)nG0ZBg>zEOMSIf ze6$zdG$(u(FrVsE4;X;zIp6R|B8JnR((lxZU4-d|`B1wT`_hv$Ztav?V;S_q%9z zBa}{@Hb(WX{=uVJ0L-C@{WHrvsKQg+=GKL`=Lo-#Oue`Flgmk3pLD&qFa=V?JSM9K zTN$ux($ra;Lnjh*-E=6A{Nnjbvh|DcvB6#_W7BnoueXI<_Exb zwt(KJ1@^y^vx#@tyy})nI3YCxRw-T9zmZ1*p z!p)Vy_y+-{=3d7f&E?AC&~WI5*D74X9+@_kyj2Bav(|7D;{-q@wwLg#3fAr@<8o}< zqJHis2~wD$o))RoKmb6?Uz7y|9}7-(A9`b^vM zal4iIz0kWJvXZKp4y~0xplnX@UN{^oJzIeSDCdW@>{#gWbw6UC5ebxifS?vFH`xKOVAsS>d!W#t_J-K1Pn%~&F!L_U=jdKZV<#2iUl)-> zlZWM%_>a628xJXkd$5lq0(?KDonGy)9E5t02GVGoLOS$<$(*mO3~Vd@MSEDqFqfLk z#@^lt+WYa(_#!a#8etE0 zviqNGx@N1DA333~{{#`|q+H8?JuKxF4Oq=A-B}m(VfabeoQ1q)+`lKF`5$_gl;X7w z?QwYTz4tr5s5ySn(D{QmK#BH0bdBWm)wV1u@A8&$3))pQv>Az4Q1U>_JpLy;x5+>9 z!6frRedSsKIT-Z5PavP_^|_||LkJin{{!6vFw-EUGeT(ZXm4)T|M!L*QHtfq@|)g#ftv*swFPr>c_R`&g?c_Upjhw0E*`C<|Clg6 zD*6Z|)DryzPmzbAk!fm)oX%jEFOlIsUdFDj!NN!v@!l+ zo5B~5Uanu)^MWtA*98x50QU(#qk$<_2~EBHx3FpA8C(7P-39+|gF$~9^`w~l{>Jl? zcUd4oZytt&@M-anG-fBLVA(Yh(tnSW-}X%|7-yU`B4X18wT()d(GD6*@+#FcTAXCMELz60Li~x0{e7Gl}gbX7?zB=5I(420iGkZz%dQ zOdr!vh%7J9Y)Li#N4F1$WGqrt=u#I2j+FF1yK^D_5Wj<$`N=yj z(L=Ko0hZf(MHfu7Zj;pb0;e_o-qWs}d#9FOm%P82Zw3iqr)a&WRbk`(9xsQ-*DE%E z$3nY2ki?t@{s}!AN4;KJ>~)_PLi9!u2o;NGsy;L!@qrELrhYB&30P(+#^oHg4f9Ao zvC%SkpFzn=? z36+&egwJ17B%xOKK)gl8Kaa_~_AxXRyfA@xqiK=I#(87@keca#S#-~p9-}%tIF(nF zc`Q5(`exB&&`0fyhh`;g)xrO=su6V6R~{R8LTF|E_oUF%Q#{uV48Z>on#Xi^g$51f zG^&~gDvy0mpHYM{9eUGWLktELwrC#HeqZ+^hZzxNkGHUfL08>{?hR|$?^x&@eQ4O7 z!jp^|?Uvl<(7b>?Fvi5+7E#neU*({bx%kWKA1HH^@=U^d2cOi=PdCTCuG1$j(G;a= zGj{@d7VA&Edl=;Lur~zE=&s&J@n@m;HQHcOTpX;s@DB7&;v zwM$mYc4r(Sf}wZdH}xa*n~-Yg3H~&2C!;h>>8PJ)Y0IHB=DRCXSL0%wN|LlxtLSncW~o=OOmXjz@RRuOY0lc)U?LA zRUKltD0+W*DpS1s2lv)ZBHcx)sP>c?(9k=Z-(W{))Ia8GUnxOn zhyMF)L%<_Om%XlT9s&=)d4dO+-1E{eQ71qUvcZC4pDH8RHmDm2V1^~}dLNcVa=WfU z?E=YC`P0q$n?wDq7F&5nkIr(n4dyA!NEomaD6q!uI#^+wR~bUuho#eoaYpx^c0TTOguU7tabCluNV!5@l+eX#XB zYM__J!4KiTPPoqaoJMKSW=@(Q_rG9R+zri(HFAgzZSL7ZjG!xzt-?0ZLWk}*?rd;P z_#3)$-+d$#08D)Nvp?y~eCGOu&Kw=Kxc$EtuP^gL^+roML-sCDrp3zv9!I89<#w%278pa$_qXjPn1F+`*%KCz^w= z|E`#d(RMV~WDB-Kakso76m?XRME*mjP)h#=W}bxsoiDa_zSPZBHS?j0^Uzu(rZ)Vy zvbaFY(&+#>sC@}Ii5uJC$T#d~5^%1I6v;`95oS_|v%IU`v}BuUp&o-)>|x%>CzUi zh0K9QDy>SFyO0pp9Mu^pspNss%lvZ~AB3R%4HE8F00%Z}48<$HPP^}){{E+*1W*nd zF~^U)<=e-T#Vh`<;zLXSAYn=SC@kd>^L>}A{()M$(Cv5Xes`3#2uj5VZo!H;b0VZY zWSMp*X657_E6gO|T9+j`PlfpJWO-P*=2rAq8b@9KR#0j=6|_O;G;^&54)GxC8mRP; zEYsrB4q=J5%;77#mM@7Iki_ z_N<_Vgqg+v5R7sQMSi=iK&ZQzrPx38(Dv^S4H|&L-{svr`LI>&ZfC@Nm<5zyDM#>C ze=2p$J$x*hloDIO1_f-c>JBpisH4KNg|%6T)CuYU^DxJ#>vugn;s%`PD#+r%%C2$q z$BzCx8y_mEJ#^FWNMp+f{FCNmOQ<+QsWooKJ>(c$XLBQs43S+H6Onjm;uOI1IHUr@ zps$F;>7g4vjt`vCX3ocq2l@#!4Z(Oe3DfPk^9Zbva}Va53t;4n1v#`FL!fPPGc4aT zh6&ZmoKwNK#J)lYRO;{ZY}N6dYcIg{)H7}Ff$|E9STIPs!qCYB)tTD2&3`p^TcsQJ zyUo|0hBFTwb^yQr1T){XkiWyB3jGhYfkpS8WG-2|iLA>3nR3Yteszq(>JPI#t*E~w zrOW&vL6{Mw1FfNg)o0ua{iKgub)59Z;CITfMB5#tBVbbf?bi=ZVDsP_d`;b+J zEh@|x{<~>E>|n^pqy!`KEdST{5ilAQoNTC!zNEn;=!Ow=5<<7*OSV6`7(^)pJm}i)jFG}x)DXCLBu5lVR$+z`2Z^uW@>}8+cmKY z(7ASsukAns;IplVDGU~G(vQH;C8SL{oDZ9W3g>Pgt_k@UoJZ-PhCC}854Bf!9(Co; zIBl0ikn^qm@Ude=?1q*v>X`~gT0p&Q*peR6L-foE!r(d7>yv5XvS9Ny|F8M_dtKOk zb+RC>+HsnK0>|&avz0=HMK{}}!t9m58a7{ZALi?O*nCa-JzsZ9pr{q&(r!z6=b@9N zGWoKOO11su1E2&7JfK=>tP+;Qzay_V>P=|es3PFchq|$VV==upX;DOCDwIa=VMd?( zVDu>m{5v>cLq2_Bcff(EtW)AHY$%KuK!-xgU$J%LFlT-S^|S{lz&P~zjYjVJ<9>H^ z@q#I+6p8*Ihf0xu!ULB0!(hm5P~iX6tf3IqFbGKqAq?NzCjs@gzyI?+ z&wX-1_BmO54exr_I%}WG5GdOX?w<-R2Th8e$*l^k31A$BtDL1^1d3Ag7l(%BL2g}z z8MqfaY)rfn+36GsX?`|Y`C}=z2Vv|G#y$wy-;PjEN;?zA)2JV?tp9~Ixh&N_q17k~ zl}}*~#zd|=z6H6ioWfzQJKh?I(x4x=B(dT%+Q<*J|F+iogmsJ(0t30!rZtzICO;2g zhdqsC7w%@nrwrNrmbX8%tjp>EFRiq9&3=p8(xRu$D6ySFlJV`9F$W|djCYn6EH@K-hI)hOHc zredMZC?83Fex%wY@X~sE&<2wuS-hC=3k|!n= zL}mgaQ&Fl-L8-RK8kv~cz3r+6F2(-~+CBA>M`qlR=jny~T*E8Y3psNMnXZiKufA#_ zJhF-;UsVdaEp``vVj19&D^(>B{W}0Wgr|v1La2UjlN)dT1{aVrU7rh2S?=Y~l|pWd z-x1ze5%EFAe^}yDLcX94huowsF^UriRXEyvw`TS-f@QpGydL2v`?Ra+N~h5JPplo5 z&{=aD%+_A}(T84N6l~E&WESb{ZtM}B+UIqo4?fYoe@AOqSY!9zhfDb#?wy=J)NS2P zrgN^IwXL^eD4o46e(=XU>~jy1fcxqo|1{t0D{;-aTQyht1jZ6l@Mz)i_65t*oo{gF z?#y&ehfjT?g!1T?Ee?KctqOPDfQq|9i{y%;%dPWX?9cCd8@qRU8&c1ZJmj76}%{G3V@G{klIw*9G$ZCS` z`vSZD_oA1(Q$d;rzEPYcx!g4U7{`msb4c*q-NhB{I39y!c%4e>hNy>z(%5%&(Xbek0)4BIK7UW6pJtN=R{ng%Ls4w zW$t1qsoyROCpkSyEwfNQQyerH_JtCyTD@R-khh1Q`(8_OWaq9*?Ku&)$wZu?wcst~ zQEGt>VRm`wcgj`i_6*q&5!DnuLg&=n_%ssEutC%hE0GqJv27a8i1J?~3PpZznvV2q z8VLRD6$qV&2cd5Z{ub)1Q~Nvj^+fWgc7M^mxc$~c@lg6MhJjJ;Uu)6bsP<;FpT72H znAVkvC;h$`y&_K-_L8067?FEUnt7$|ZcMcMR5{bt!+So6(+Yd`B#y(LF^4gWNm2iz zh+^Tj*eLF*-4D6LtC4Q(0=$ll5MJK)qK?An9q=#sESt+|{G+u}sK-x~L2mbHG9@duE<#YV{2%`D;e;Opizx|I<}8o6ZmA_-;h5V3igCW%Gj=vaW5d_R)zl%K{qz~mMTpC zp#%w2@W+~i=nqKrH~Z?z$f9Bh6*Hj3d@n;$1Lgz%VRYmJQpy2+0F>-Xd%-u%BimLQvesI2K7b5cf$5eN1 zbL4%XL2$1KxIdIE$fkXmP22a{n|&5BVpnkK_FH!6Lk+7z`*=bE*b!_>`E}t!L+dhM z_-r6N@Lf32S!30;Z~6!KARWVolIU+~?VUAO=!1(^n|3&Edb2O`{Z0cML^Belad5fw zQmmxxGlpBzRl&PJ9^_-a?|n>e&~z}U0Y|F(g1fA3P^#L3?v307SrX#N1-!<(Y*YS! z)UOOoOu3T1mko^@Zt1Neb5d8w3CL6p+MzSFsntb7!dcUKK$K)8oJd~jl;>FEyo1`y zQh5$tH8&V`bt|Xadori}Dxq*CG^>xNWn8uU%@BT4?Rm@Yu34eX(T_Ov!4+=T{m&95 z>Q@dfgg=C?GpBngXHo~rRjH@(G#&9f`;lG-gRwkp{tc=>Pp_BPFr4MrSIgSZG@D2o z^ZM^0eUeI5y3>m~x9diEeNw&JWYwPGBzKF2rQvM1&zKhiX~|balwyscG48gbxh#h7 ziC(XzZ09FrbkRlr6{|aRVl!L=qBS@Z-i3U|{M&d7--pHJ?G-%9pF7pTcrq%!3L|FC zI7>!5p(w&6klV><4iR?nB)ZdyqHZH67wOeByRd_gLbx3by1l)scbd)T61#(+CnRi* zkvjIFJFmbIoF1q195k3~AWGiJKHalE(22+T;$7jhbf>yYAjVuGVMdG<7o?74Pw|`5 zkoK~4UdrkApGq#$m1{#nMUtT-5ac3iZ^FGT`R*2(RJz?3<~*thlf6f{DA~AO?CV*V zKw>g>>mr!qKHtvBHx!#w`^ZH;1~oT0;^MZgF{EbM$#BDQ`=QsF_|_gF$zu7?mo+;} z#zPp&`x*6tPWJ%8socSYdkye^-i>62fc6lKktG?J$J@qW+2}5hu&_8&EHcVWh_^20 zOtv^2dPZ*+6>|b6Ho2;BG$G*WUX%JYmfJ#<`*a$^Pcm>R$$&nC3|0(6{ls+$e3EBT z{5C>yD+Gwip7_>xg_o?9%nj;vnbC$%$&pSEDVMxx{P{nSJ=-lz<>}K-khU%&krDP~ zMXiV{M89{N%Erc^)ol3B!y)T!P@-Q@0?lrZt8 zZebJE!}vCTagihP%g!?MYZ3edG3?cVn^?su9lq76xUrgld$3Mq8@B5x_--97w=j@ zT4VTV>t>W*0H43>3atdR)2!ml@tl=vJeBCV2Q(yRH#vFXnT+4Y)EgXbD;W@mI%~51 zdd|_iI{tLK-qyp_-#mlTrujXnZ^ig5SVxFu>rjO4lwY3+EtHpQMU3ZbUE?H~1x{&i z#2t}mfp|b+MM4G2fv}neRzUfhH0{zp<}?0;?1*cV8eDuNY$|T^x31uH9H;FqowD|%?svsKxsWL;P3Q`BMgFHuOH@$i`MLF^9&`+;xeC9?W zYY#3$z}=pI)z5rQoo^+UKDy!B0Cgec`|iil(!xt-yXM}lYHEvh_I^uy_)t4LOp!*? zNC{N5)#|yJgM6^-g`XRkNQM^E7bv$4)66fKc~J`vf2m*_at`4eq*E5oc3l{80XcUP zN78RpQs$noxn|F2Y9D|+1*u2whH{jb6CgtVJ8F;jF2Pi~^Gv3+!J&+n0h|D(LzL34 zh->zOTR0IUx<40dkkZ95^SU=^l!Gf`T(K0qwwmga>aaYa_fjwEYpv4S2fpSlIZWIb?)?O|U3& z``1I_wqw*6wYV;#Zj|rvG2n|SolU&73hWwXmiVJia@sWD)P19V)4W8f90++ybQqd(fv_g z03&xLb+{e`H7(( z_A2FCT4b2ZnY%qZCor#M1}?>t1sxm#st2$wR4f0aWo>e(qUH+{fq72aslwAG zq~^R06pRIt)64X?yxF(BECd4`7ZL!~iLM%zHU{rc21in;Yw%CmA-fp7rQF5OY;~Tq zXyF&FS|ijRdZ^NhJCM6%e!xEM`+T`TovOo85GriDkYi%x@3kWT21sxClx88byZE6v zY|K_7kdI18L^S(8uriKNS{=A?JlV*9$YYVhbA0BHb|L!yG6BkIp|exgg&Ul38oPVj zLrx&(&8JSX8PQQu=sB)3oQ3rlW)!l5_~ zhF%MPcGDBk$X#2&U%cFunf(*yKm8SrSV<*E=C&ioExro?m?a`L&5v*y^UcZ2JGDqA zK{~=~Xct+qi+uJOx)yS{;fJak?;P5XGn53gRsctq*E@2QLhB7Uy;B6{2wg=sW8Z&` zUHNX4Lj``7P@?;@518)UuB_i#^R$tetZc(nCl>Q+re4eULY|H;?@CnWQ zQR?FNv62-@a>~IM2r%E2IaELR;|t}sn&Q@*p2#|R8^rR^O2bQ_80<4dOj-D5CnM0W zC(G~qp);i`2g!81E9$81HV@qnJiyZzs{pV9Q*eDoE4sA7!1x;wwRJ;FT)~gS#Wkof z{#P`n$%~P|MRF|GRlT%+wD2zp4VoS6u6FK=yu`N+%cPt&3!uZ(h0dHOUMjE26~%H@ z2G^i$g-QTW2}Z1jh3+7c4X$xKz1uhN(|7iMS_ItMLwU#Hr!5LFl1_}faOr{T8Pw{T#mXQ0!S0Ivj$PzTNRihnw<$3Vn*zsOatiSi1p-FmQC@P02Q2jKbSqHNU-64meogqAEe& zyrBXquL?eoSa}hpn!JGA^LVJ8w$$qXl|dC|;^I)NM~J)(Wdjr-U`;5jkyPkkZX-0y zh`^fw9q(X=sSHjgqMifA`~WJ4LP^m5u(ryARuZ9k+^dSGc&s44Mhgo?%(RLe81Os4 zGF54czC%G7#SrZLE%94^#v+#r`1l!j-r10|YLgbL%V@U` zwf|o+jG^1N>Ow5hAx!`FMfU26}|ANfRO_rZ&4E9P%J=@gc`u*9t9Id?_* zCyy&%bJkFL>={J{JEpqYXf{RumA4OWh#NC_Fl^bGI#GCR_rgRq+(7*|WL|14pJaf) zE$o3G$Dt#pho{!Ty1Lmu{CyHAys%|vEw=h@30!hQNsSmC@ozge z3L(wkm!ol8Xc+MVyLG^$kWw?BNc{Pbjm#l>^MP|lrey~Ygu|{{m}&5-N*VkYiJhyP z`NvE}dt_6tf6pQ3XdsD?n{FAYZ0-LSktcG$%Ch@CV&tKnx#uHTfmHDd7fsMJkRe?h zH?`KlC0h1Jct_~tw52a5PL^{eK52C=7vW|6x7Srn+zGMeRE^~<3+v@2v7eVDO*~vS zy)l4f5}vAZ0=uL%Ih4nWdr>KbKJL8Ayok`fSI1kU!r`5Omz2l@scUfEn{nMLTwI&7 z7v6T{F~Lde{(&S)ae|%I-0l{$lD}5NXE0r6AAIZi4NhLf72X`-{Mp3}GrRPmN|toV z(!2Mg2%_*CMMs`HocNy$~|Be zPHM)F>uZbIqcwCs{Omc>0}^!yJqr2TEdR-si1?6=e6lE5BR zDY3@bz2@PVT^T#4gIlM^Uu#T{hLucA!mB=HrZuq<)3;5Z%3cpmiTT{=z~@TB{;5ps zV-}pVO%2yTbD?|9X<5Wve$tHUKisHGv9RTDJeAnZ=LmlPQ1MA#IDN`SkmiCCa@_~u zx=Q2%5-ZJ*!4GEJ?WS}Wg*e)Y#>nZ1aQxt@v=|j~N|>HBP;csJ_hiO&prlx%VEGa( zkcthO_dsya6Xq*nF$e85Ux=vNLT7J+bxb(B9XIf0>0p>W1gVO z595voYx%W&6rOWy>G8#7AX-TZ8fAR>8aSPFT< z#Nm40b;c?uQp`m0;*61r(N!eYRN<}{lRm9m{_5nI6=+u9xmSH>SsCTvQ0x`oirzD+aw?SZHJ&=a%{mT&fGWAlehMYTU?C z?}Fv_>IEI8b^-XOZiV6pJ(=YO9XB)c4vecghmTVvmk%#@$)p`v<(;8F60&$>({14j z?~H>QxU(D^fk&-vtk2Wkwq9x538qgT#{D@o>_{-VgAdbbeDV0Zd%DLb8ly_YzP1Pb zCvlgi!2<$Q#JN2g<%c^$jvmoUTd=&~-iFjUzAhQGx>g=l{b_V|AK|Q;OCxWEca;8D zQPJXDceGgASQBHHdHHO8p6mRDXW_pGaOoT0-b*WV%4&Ij>QB4ISmLl=f&1`HkwnUs zg(YwU{@eG~$GOzaGLjS-GP%7c&k?RBeO+L3E5#&sMw)i0$SjHM(W=_*`7;=u)OJBr&i zD{#ecDqDW<=SMCoRk0!8q$8`_#x3wCklki_LeCz73Us}aITR$3r)NG}? zddmv$8(T0qCnet-AJ4v?YZxrxNm$54y{{hNjSgup6MPB z%G#e}N<@UOo23Sq!VH9=i4$(SHvVw)MD1>H5|#L}Oi*cWu{qKx$dO*=l05in&v3Kf z*^aC^XDcY%?7Kl8j};HhLTY#C9~#W96&p^i4omlE-g)wk>Q@F9s+TtV=0rfEgHPmz zqx&H4%iNO5cK#NfUNJ(4Q?|XqF?_CdaLXR|t*wS`KficdrR>?6^uX65Mah?!JRY<) zq|_*X2Y-9K${`1;QIS7wcruMDcwkt)gF zk=5ryR)_9h_;J^ zdpmp`58l)|c5svIT7fdP)sUGLj{kTE7EYRNn7>J0W?#Ui=$+T|?LEH&iKGMfzHp<= zm4@~VF3L-mT_>+{I?L1A%k}9bB1KtnGqqNh+}`fHDys}MHDbHEw6`){=u@N&uk8&W zRTeUqKYn>?6zTSBri_Sl8vW}dwsu32&m!dRkL-C*N)_s z33;|Q2e14}li4nBd%iw(TZ|e%3i&lZilCA}5j{v=g0x0J#(>)cfUI?d<&!@XhAx<% za4neQo5NWKzQjw8b?YcK0^D;2%Q$@d6kN#(TuBWy`O-)_u;BgD98S8>rVMss$S^_% znNbmh%#FIdI*A@Xnoj>7pzLGOV~_=609QthByz7iTL+`w>G1Z@7zg(3c z<-0})yMLcAa+bM|Q@rAK@LR9`@%FoI&Fec}y`IoBu_=$JTh_RY9cz(N)|E;bJH$V2 z-(B0e(>P%H7HO3KU}W97kP{;*mMIe{wVEY!uT>h@9Imu*t9&6i|Ef2N5XgSj+dx@i z&;;_7yJZLq-BZdBcZyWUA*~c=spE1lCtTizZ%nTckCBtCJl&#H{8GXM0X?1Rf{;Xt zsY&?o-+qn_pd7!JYF6B4KWYd2=DhOgz|xF{F6xA9r0-50!CdyR1yQ-P)Fk}z^3KS1 zitnd0HxsJb-^d>O_mNCJ3sH{Vidq1wUoP9Y|pGtbt16Pc>=O5zs!TT+dIFVT|kC zNfHl#B8>{6FX>W|{*lbG8C&_9cTV@4h|y(@6m5gibm4e6vtf4 z&IKbW25&smqLNt^=;pAL&aA$n_;kgWN7MR@w~|~K2|Hxli&t?>Q^p=N?wK!*e?x4% zJT!94q8v<`zGgrVM!o{3GMiV*8l;eo`@bw*?|%etujN-9Yl9RRpV06LJDZajw|Fse z>fSR$O|*%jzm)$}lYKca@K4fp~?V3L;jC)3w$qF~LtR2a$=zZI5yDrd(xOYFYj*PxZE09fT`e7uhmEd(pxYfJg zN(1*N=Oy12^uj6^-stG@YnKqZn?Jp-*le2q^@?a(sazVgp0fZc29tbb!pm=~PCuEi zqtW7K?bg}tVV6>7tCKmL7gJAM4AysHP#sq=vN;vkX{(%KoqE*hc?WE5M$G5PrH`_= z)huXz=@vy!0O>*Ll#H&rJ*PuTNxG4v=R$T==jS24Ti?1l&x@T~sbN?7!i)V%7DdoB z2u40oxA}ByKW$#P$>9x=qZE(!Jkxi*Rz-nl2fynm(O79Px-4fih!E@6SxO4Pmshnj zNqB#06wPt*fQq!K%ir$Kp%)GoqnO_YGd5|VyTan*LogxO`Vtl+(Ib#mS2CG4ND{o3 z?z$Ml?Rr}PVFTh+UD60*d7R zS>Ky;=ta55VbBYBUui}ZXaQpSD$_e)s(Ijbt)p;3+`HJNCXHp0F~5{rXe=K1RyrD6 z)0=nbg~t2=)wqT?nwx@eY|;w*uGB)4qj4_V3fYP|9&{>1vHG`(O5HEg0cS`>$^%<& z3ws-1dUUGTW{68I#D-1OBO2w=DXn=CWF`wRlPmu4mQsuG$1mk_ z|B*bp(+gB@$ucvE1~5uoOAf#lNEXLe2AIF0&}#{6D(v_kX&xolefV}^vXuwR`1cB82X;1p6IHc zz#p1eKunTt%`Zae`_co@H;woyTRlvlw^c`25qV=aroRZ%WF6WQ_L(&9OG~@m3rXL&urPx;YH}9DyfSGNgNuT0rBNx4OTfJ62_>TW zUPUiWx>(mS9H~!?i-r9|s9?hNL+=2YE1=c_;h(@E@4%p6!ODGr!rjl?V6A!Z)4yH% ztz%r?#!@yApqA11DduU$mPMY~)%0Z7W*1iTj^G`|wC{dl(LL~`t7Dsq_NRM;=-*Y z;V(l0wT^&3x`pq~7ByE_)v5aX6N7{?G`PtbMad-K(fbCcG`3=^U6s14P)&M)Csor zrBPMh@AiByHRW=c0Z-$2JEz(?<3K*z=t@hQQ-uRsp*dEe!kD-s|ldJH+1)NZn<#Rv3?krwC_G`Z>tT~ z6P&>GB+UC_G5#n^8vUD%AYxRtk&WI2k^?B>L{hj820mv^$}c5cRX9``xej0J`^1ja(6S00%n+EJq}uI9D`9K=81 zvq>Yc7vxGh2#&1zfYKH|SV&ZR8HEjro(_et6D}-h?awUDXzfC{;>G?5SFpv~Lf`6c zYudxE=*9nxvE|*4f(n$Z5Ld83T%mspWG)O- zDtYI3*lPW0`LZ|ECa3uN+9ct)=8@p+6@{1}B3+$WbjLes{;=D$WfX-Q6|7EPD zerB2CbIN`wWfb(%ZZbe|tPr=SKfh6tM}uzL?CM2ECl2TDNv{xIo%idw`YSh9HPg}~ z$<L>*s-B*>~M#TX;QwN0iFf_LEIBUb#It=%h5?I{2bog|I>ctuKcg5}N!@FxKEY zTS$8m?0&GeFn)oob?m(BFN`8%&F0`6u&7QoJKhWKYGacNSAyR8pm)wi;0&B^iP%Of zc6)l>g*E*-Beq!sIef~|+EI@YP;R|CZg#y-c@FLVo@JE9Q?pt@48~90L8mPHZuziN z2_R32+ft2l_pPjO8qcFr@Ce?KpF=UiyAQwPFKB@ZU;0mYQdY6~I zaTctxCHJhxSN0a6yqbdYDr7x$77{Inq}^THrFW8QpKH}=m%tzBD*~EaT)*R&Sx0VH z(=I!3;UeH}BW1&ed%)aG7S0PS2&uJ*Im&D<^vdNqJ*enib??L5gZs~9-r(Ame45O7;D`*h4sicvGJ-bnrG-Wg*$n{DM)f<6?WT0@PeBy8 zuq>#rdx_qZXDN3)=!&GR)AZ-5oG31B2Pf1Pcr(-o#}Gp)_-O;E$OZUY02_}eC&CdD z&;mr8d4iF8#6ABs?d0d;C6J7mkxvzj4C98(Jo{#JHFgn}xko9U?czVf)-No7UHm3L z^65mlHBzT{zaGMK5~@{b0Je)kK^|!~HpfSIS|YMKFrw-39YQwYjUB)*pT7N}%KV2Ml!Y^C7%5JNly?-EU-p>a!S?+Pl`Baf*SAfa)<|I|8LKIlV5QTUXD^xbCFQdhd^Z6h zRn6q2(sl;y)H#7e6!d?}1Ge0#DI~A7p>mc~yWcW+xAe^F+bW1)-9GmjA9~YJ-+tJe zcKj-mvFu3j@vlKS77UD?T(Uv9PjWeAOhcinPz~A%$9dzS)Du|A61Y=ml%&yvH&5~b zhK1F)z=aH+R(|ThrY7Th(4gxqA>7c1fQ8A_@^yK$|1e!SFbo!rJ4qLp#qJ&t~49uV5h++_`%l2E5$10JC}nFl#9KKPg37v zuFxB5JSF?uFUJ6}B##&%E`?WoF)V-@L7aWJ@@4ORVCHaY=`_pzX}f!9r81Z|WoLk+ z4Ys?hMf<^ZK0t(GSZ&bh|N73MJzml{3&!fMCGl9HE6gf$8aGTK1)!8$H5QR1fr#a* zwIK}uBiTE+5jL7aGMAI#JqsdHz{(Rp#{A1)Urj0XlFD!Y3ll-N-BJZ~L+}Bq044>` z9J=a$JdLtv(ps`aj`TkDv{qCmWZBFz?W%V7&Sj|ffWorri%x)JsB?=kpKtB@o75ZN z5ez}{rC=Vh4<(CUm$rE|>TgA8>jSV;z(*3-ZChtVthfYLny+I!)_Kf?+R)9;%8lar$ z*IU}kK6WIRL+sZp>G_grd6Z#LjFsDb0T}eQ@WD@)o5ototY|1e%1+zkaRpF6OHkG7 zFO6e#-;VQ35H6~yA>A;ZMHj5R1=S0G@!q&JP>OmYta9lhW9S-ozCMjF_JQwePd*=1?w)g8P(2?o9WsCZVn$;7feRz1IT z14qe5O)W_EY46vb54jP%;XT+DAKL_NhnPGJTbkssetZZFWJJ?x;j<~t0X!Xk5l5Tx z%S?Nt1+ViBLdQS^zPl2@s^)e(5;%mUVANRhO5g`t6M&!$`jKeL1A4cyR1t%f{7507 zL!jo0E)+EWWQYy7T>n1(G4xml%kaRnpy-T-RvW5@YrCLvfr`9-d4uDR0 zy=a-2O}`m$cgIQ+<|eJlMNbXGzPqPP`o`!&%u_j0sCV8-DuQ+j)SnYS%iW01TI)psHVL8K!N6fCqKemX zGr6~3BNIElv;D9Z@TWEg)O6MT0BxY?50hvPVmh7|$zVUCchw39|ZBSwa(n=P*9l#$XZ}JPh>Wim9DSr?o zMzl!}!W{LEoMP*JY6cLlLfcE8T%qZqj8rlM3Y272k`H35|KyIPMuMHz%4RqgWXsPx z(Q{G-l>kmT(KJ3@6;x08R$#bvZ z;y)WfGzCR2FePM0NT>)mq1ad|%h)nhH22L>IS_|ZGA|bprazzmCr+{xfhAlaFMANo zL(OdIpyWWxF@Po(1DaS9R{N0}4SdW!@4~I3j!=$n0%;s=enHi~RSYznP-hZcMi$~u zI?2=iVq!rGNf(-qGfg}DmX!sqgrqwF+SQTrphtaM9e_0G+j?Z7zAdx^v4-Q{*A-Zd zddR4nMGtg0@Fa{%Xk{V(oY{q>X`aPmoo19g6+d<^ylamD5IRKxFpLEKw@|PB zvseuH6sBGF{or$mK*ST1c0o&xAAqUGV+bK;ufR?L^sdk{YK40H7~CIva7C6h!d6m_ zgyMiD!1hJA5i382!2s4({il%xm@5idK8OzxG1x{t4@{|t>U$Uw=XMV(Gm~g1-c4LfMhK)&_ zrbH3ksSzeORKhZy#veX+T&P!?#IA)M!%UFW%5z;Jr-vV~-!vB29pb8U(p1RuPvt~R zy{ZUvliip&++jPn5@rny^$e!ch0Z$gKiZ;7H+of(&iLAqXd~`sR$853XqUM#_0;Id zQ~NJgC0-riEOqNXF0^jwqBcD)`mQix`szGz`q3835|-+-xz?w#Aj zhKXvQEu81_S&{a7v^YL%B~&}G{3;mD*;_r=(!A0YUzw&^JUZ;(5C4FMJYLO#>NHW; zxJP@#;Gba~>XlbdO}3W3j@IFz`Jn*0*!XE%#wv0IWdGgdqUp`;?a0m z0}Q+b;A!4JfKq7S0%!>4F-$3O6eCvcC)@X=k(d(OhRXv&*2p>bvams3I>V`Q?9Q?< zJuza%>B3jbzGQLaS2)vCZlRg10Q0>I6TNVgSANLUKCTYaSyu?~t3D4Vk8<@MJPE0S zZx~F)rRU=-OuHgByt^Ubu7hCsU=E5SV5g&bp(;bTaNx_qjZVTEVQTRAMehnHRP;E5 zP9KeNVbeqz+Gq^Q`9#vY8X-25m8p%B79Z1!YmN_5&P<;JGgwYAz&DUep^rXt#cJ0X7eb;$$4g=St0Du&G6k#E%0rjusL-n9G7uNEF=I zY@uT4OCCtR5J*0iy}=Low(B=>DMXEdh%;oc>kS|KZ@#2Gc#%kPSNOD!1DKUygK)L#9)Z>@_`6? zFy&a5L@^WyZh)*QVu$MFL;Gl_D8v@@7j9&zILDb%>&fcTo1TQBok(ET0P)!Lt{sj$ojWGD%%+wSQ z{-}-oF}ax>YVdXFrS(o)@d|nVZFZI}pPg-A>6evufWhds&7K{!6>ZPpV?%FLOzwRS z8fdT(?Ny2FcOCKvpWIVp7ECGdjwPK%M%q-34gJY|80K=ZdplPP*zfjHH5=GJ8}^WU z15ICqt< zw5secptx{ABZ+-5jwnlozDGdC^$2=FgyRFwnFz-qq6XDn*U~Fe;f3-EVZ+1<-s6_d zywukabKIu*1rGTQ2Rw+JlE4vvopoG(QOI$qea!WHQ#V-%;DN2!xHHvw`sfHlJU!UX z%1O@Of!k5MiSNeu1luOVLsj_xQ4e82BtC52v|SybePvbXEl9S!RA5o}|BEc;Qq8Gu zJaCRO^-B%^2244IEuzVuM4=6r8e%ylY)EXi97Zak5ZLG>s>uxQi5}hX&eC6*_J*X` zglHG~JFjvU5Ok4k+mN}M_|n(+V;~46M(nWN3sErBY;EnLB6iY~V9;5Nd4HYdV+e0d z`pu?YT=jXvZf8?gbC8D3$?4ev>3^oOl_3e`1_=- z{azXzuEc<{5$1mQBN&RvmBg`xgF|N`>P*O*nqsbcCUK&CiChBHr`*8aE1lPlr?=`&oy)Qt;n+K$Scc4u;TW3hrYJ^J zQKTeFi@`nfN!)afS9$~Az;F8Eh?lu8BS|pK&q4Gl_kIud;C5VN&GeDdp`mR z>)sCA!$i2hZvKpgssBXd6cQMV_#$P*`#*`1lQn7%j08xr!!;!BO$o9%2yf_|VOsH1 z2l0U5S1uv?<6=!xC?}5Mo=JWaijBUAO1wIWE&$_F9KmKVoL)glG&g;Qd{l<=g4cq! zip;cPmiCzA#!Z+v2-u=+8K6p+WMp61uuK85Gz^iYj^4mlge{vzHIDQ|^RWMbFK()y zRgmyEh{ZwqK8GBS68U_;VZsk$DT>`=-h?e9@V0fhf~qcnsRIBZ@Mt%JzZ1Zq8hO0y z1z9_8Jeixl??5;}Fi4&$w<*SK;As+F4F^QAIyDks5Qt0T?kDgV_f+0WiG9Kk`H*53 z7;f!~r;&vAgUC+JaKhQd9u4@b5H)RKUOu5%%4>y*`2@_S2rN+^1See@C7US3fTw_E z17_;nzPc+(GQ#GF$Am{Wu9_jE2f*?;qxr_$%mzSD= zDUV~SF&%_burLrMcYA6_%z=j%=9OKB)*QF zy{tD0WR&|vBzrAYT(s}|11E(uS3njc_MoHzhhIKAoN^puxmk(a%Y1NX3rb1$S~^IP z-|8l<6q$%tJ@h@2-?WClWA?CtJUEYK34PW~ zdzYHRAgb#`aRg}t783H3)$P23a{eGeB`d}UF${wJE~pNcJisF}y$In4<|7XnIC6Og zauI@J+l)cShvbGrqTsqk_6QK`jot^cXuAj-tmz>qP3J{T^W9m}y@$tsj$-!lp1E!2 zrQ;&$=R;&akEqzAyh>Yh*l{R=-cnId^&uSO4<{|PY@~#&f%7k=Rv4#jh}dDdgOpfr z5`b6%92sFkMc+!uzXL`8Nt|y(}=5e7Osq@!!WSs|fn09^=qQ>^@$CxiJ%Ec#vhI0bRaf@zGi<*l;d$ zzj+slDHC8G5BG*IS1e6-2_v<56)TN(ByG#1CuZ(SZ z6_RTL{e6j}&T(5-GGvV|0FN6=KvsjdX+Ye@pyOUi=%#>5YB5;mR{OG4;*}MNkAx#U zq$RR+srDvI{$@D9gG7NOsfJ9PZH!EO2i~ed;$_Qk%n5AL;N&$(NF|*<^{Eu51c;1=n2ySwKO?=4TA_1d{WFSvZ-auKbad7x6rHsZLMf7t*wS&+ zgV4E1oU~3UYdJOw{=nbIO9#qoyWYO~S^I&svpNWF(W=i8-X_HY9UPB(!&kQvCl zBKEK~4PHgC%(6&_x_%^+L-AoD-cN@l35^ajdsc^e&2QE=!wqzK07?Nx?>%Q@_sdjc6o6I$)DI~2%pQr;92jUkkj{yLV?URN zgz}D)8+yQ#&iUwhoumdM(uqF)%9&~32!W?70`df$E`mlAZkCV{AZ>F}5j6zIX+i0) zm5+o;=cJilf6s+?L2IQ^cpaS)Lg(#3k>2T078iK0OW(%0Iw{u-I`b#AX8~+h-r%G$ z5Tj{FxBw@!Iy!i4)GCwQ{5b0XCI}G9rYJ#;UWBn)O6ajAm1iQl^9@O;H-Zs2gdzw4 zG1^Ij;&NEALB3PLC*)90?U|B5cygqOz^YIWs9ay^qD^wdD8naB)**#xRQ9q@*{;vj zp18{TDDC`DCXsKk*!%5Jg5%i33+Ut@O2o5l;Df}V(46d3&-7NlXu=#qNI@NCsj<*D zG<`4gyM6y%zcqPE+8p-gaXC+;f)zSFUYoto-5%0hiyk$OP{sZ(4yVKr6#=uBuBI#H-NWJg_<2;CNFTg5Or%5cuDpX z`Z`^xufrXOgLZ$zLA&vZWQI@rM;#`wNbDeDkp?>828|j&)TqIAOVwLo3sQC4f3~j_ zhvC)|zEz8l~8X`C>mk_X2pr@VjOyKo%qcQx?Q`ANkwK28@j_+|vrsFbR&A2s7pa0M2I zpgNJ4t-OIDKZ59_<%!b|cr-D+&g6C1Pu_QSbI+SCan32ZeS3NQs`%XU)bcJ3r^gxk z_ZP{ERi6co3i}LB8z(NZJbwLj*bj-uwwDKSU9pT1-t zG_$lAre@+Xm-IDF*O@=StMP=KHPgpRovI3bqPKC+DPKYdUpbPqI;e%j=dW%&3ao4I zRT-hQw{QpF^s>vhtgjI;U=0xIBZ+y!lbaE%O7xg+C4&&@#-_R|C*kiWAUhOk*j`9e zUxO9N(3XSRXxy39ks7fZwR zaWL{;GjvAb=WD;g@8LM#N>>IzIe|Gy#fEYF+K*%@13dy5ySXFVhQ1D3w~kX72MtYp z*oMZN(45HR8&9|P{V5X|vyQjtkFy?%D^t1*dsEAYDwh}^&H!WC+U=1m9?`Y1_0t<( z@n`xhs1T${Of4`yW@$A+1El>`kd0!!+)(oF$GTlwjwV>44Es%n{RVbRD`lYo`@)Hk z(kp#X(YL^P;`dw=oCg}qipAkZDRA>7qZCGhbp(L;55N;JM8s$#m<&+)YuvNRAFT$R zhIGdnrt0x=)zBxbOwRI+gDYNPoi{X?jne=ts_|MJn3#d|F|hK7_{!7 zR>C~!>LkYXJ5uHPhZDS#t}Id1nY5o@VxeLVEhN+teWggA9|%)P;g-ZxOXw`=^CTNP zs-!Evq%UvB1(y?0>V4Q8N{k8W@u)M4W$ioLJ&AIyzvcejQj$+s4!qv6Y%^0-vlLM@ zFfKSfGH&U$q3uj8tSm~-urXHTzB>R5!|uEtF{W`YvDilWv`vUBxNm&$IHb2SjXJpbions+0}f0 zp7pWNn_l*-8+)+``Jndgfz$VhPlE?+!JJ*ly8c%0GSQz{S5%{bGkFpDVK#riTG!ze z`(2F+114f}{tShxjIeaPX&UC?5St?&1-GP{|5AxQ_ z_1)6Sr%uf0oUFlm`JI;1@bDH%S0ABz(QM`2F{5HJJZ)uZhqTwBGy$v(y*7gE zl!fT2qDc+Tu~}|G)ZsdA!AM09au1;gx$wv(%oFQG<~%P+9A~YWK2+*M(hX$GGY~3^ zp>FDom+Sb1BL}mXoL0-5C_T^?f$edV_-lV}*G0DcC49jaoP)=S$BYr7U-QIXT@eNOUmv+Q2A-9igEXU22@f!gO^Zxhw7I*^ zNKQlPA$~_%I^5t|XBErkDruGA#*B6f;@c;K_7>1vUetT7n*4@!Zn$A7Kd&qZjy^*v zNz{eC^lk1?>mqJD?EX<;Cbm#Pt5czQ1-NRSOeuUL~+sr%PzN# zm*<;6LjlA22K4fkbd>V3s`D&U=Mr>IHm?MLoPO}k|lZ=3FIl!saMqo8P^hVKac`m1VhJ4T60v=&fJ_SxPaOAqJt&aR<9w* zvs1-Rget)*+QS0nYA+}-?20Squ+C*fkoWc$1?}BQIGH4}>E!9BPBz%CFInS1P2C;P zu2kysI#)#62u+1hjioUtqGai)zwy+id3OvVnAbQj5f}2G1F%8cNTx zt4*&?M5a%}Xq@ZBXlS2tZ#F1XXs{7*tB)ugxX=V|as`Na{g>h?ZU)l44SI^}626U# z-5-b-)d>PHw;l18SJ<9&7^sJp!$5Dpflt)o=tvjbWX?Vvw&j=u-|EMdFZxLY#nxkZ zkmQ=ecri9@+A?sl$*K_gHR1_u&nd8HNpt5@*7Lz%OPuWPPo%%Q3$_Dyc=>~N5!Tlk znhV_*lDzw(G5j*1&IMqEQD34YAO`oxGmJm!c8EbrJ~Y0T(nQ%XTj~C9=@*2ia?_-3=4xaUR6AqzLIs-!!?EU~e3>)--!tKA!E|_yO zP=5wJp(sQ2I;IhxP@FBxx`dCMs1A86R4pC~G^xvbgMu?{$<%{fNRX~DV)DwTG2q=Y zuTeX(VfE^&P_Jjw$v}hZ)oY0XC+G$5+`b>m_nv4w`EAc813JbYtuSd0qL+|>uU_Nq zA_QC&S$9fEoRY78ErExCC!Pl?nKnST;}D6ZO`XWLz7ruNO@D0d=xrsO{M}fy53%N? zOH2%x8-6%3C|t_)`UM^p)}l`IK@{B$&cB9BZ!*2BtSCOXuotpSHPa`l2tj9J=i~Oy z*OqN4%zDV2#9l{-MgTig`c{a-o<9jULe z@`@WoT!N?G3>LoleL1AlyuFBK!W$RlD5QAH(Jq4jRScKgOs&xKKJMrvMGo|VmXUBV zIHlkXgd7@=nW=wHV7W&)^bWCbTFedP0i#y0XP)+b&`g1Rf)?YT^YgcvWk}XblrI5m zVPA+Lq2vmmz8Ua1L95yhuh=37z2_*0`QrB!^aiEBK6rzYqSK4$Wi!BR@kS2!NQskY zszhr+rq*gB9Mt)Awr@mD%=83br+?ng1oEE;Wr_S3jlfh)aSbJwYueIO2Frs(N8GW8P`C z!nKp4f`kgmiqz>>78K#F-;EzdCzmFF*;?+=x$Hr#Rm!e#HKWF|@Oc`s^@5wptDICP z_9Uo!rAii7o9tTMFvq)cOZP8tN`KbmJc>^0Bb-vxgSzI8=5cDu7OPId=479TTO)<@ z)(xq}?TdIYT=#>=)X#7>$LgkKs5`GW?#Y!^@Mev||F69(kB55u`_q1Jx=o9s6qO_u za*HBMrK=FSNF_^>Br(|;jFyY)CPiprroxp9*UgeFlZcYcSf}jShQu_Bm}bm8pYx?f zx8L(T|38mjuX#1E*E#2V_H(|U_cCys?2xx3Ch*L=*0MvhvaE=0ohOnN>Xy4d$TBf1 zjfgQI2R83d1=ou=OQHA3X>qA!u)8XLI$)@nw%Z1~>QJXV|u1k|N>%PVb?YoDmo7Y<_(l{6Qkp49MqY4njQi zQRZHVhq5Ofd`6Qt8J&Fa1p{8Y8rK%G*h02okA6=1LH3T1J2!}ql~Ee~SGjY>4rG&r z+^}0so&7EGk+DKkZAu0!W*$2z^j4TwY4(*IL$Ao29&;FeA8%-%bCp-`T$Ub@wfxbx zpsHPr{KDod?z2{hypZ{eALmrvsiWZbEU!G-=uUZdRF21>M_SUVNLhx_@t)rz@vD_c z*2g{fzEL08W%_s@31WLc|M4QHRvg360$ANkg3RF!5&qlYM}bI**Nica_QGPUMR ztLRgasj*X?^;qB<~HnN~Vvm-+&7ntN$4(``?J`bVSs+wX5)o2;C~ zBN#*u$7d~I?)~lYN}|mc7a8Y{Mne->^pJpUK~D@B`I?H#d?W3)JO0#tMx}Y>fu@aM zCsJs3oHNpORfS*N#eSj0U6!6uS2u}0Nzsu%tNJ=?jTK6wN z)s-^V5aY7C^UB9sz}yJ)X-ZXI>nly?7p&5UUV|~M;9p~U;uoKDuFMnQ+c6Li_0RT# z<{C>qdvn{jDy+Ti&D(gdbie$t1kT3=#P|g6W$LMj&;rGTG%eM&<_j|~yY`&`VWM#g zD8FJ&H>lnS+M$Jy#vC&w)PZ-Kvu==+ThtK6v6Zd=8M}Fv^1Cc#6uY#^=@p)@VJkd#!p}ji1GBYYBZXE6(&LvRrhVi&rh~aQ65nk|8e|~7UXf$gUs|^A zm6%ja8!^HIkT{5oY%Sz_0r8@ZN zLGVlCP)ElQkmQ^}$~Gl8@^W|{y>i-6NX?dJ{p9cpx;Yibw70w0{YAvPVUzYxRN!ww7| z^kvM3;6F$jj0_^=KL*4D8Q8CjPwvgOGJ4+UXXIL;y6*Rc%l+(fbCX8rixzSHLa+NE zw8sXwL7JD5xkM4MljGel*dZYg=x4MrbAznda{ui^mJl;kkZ0t+y&*IkYC}7{kWgm4 zf>~^Q`29xd7JtK41H4CZ`Ahh=%LZ$0`&P~q2eTB^kn##8;0U8Y>4XWGBWJMA%-y16 z3bL+bs!EVLsKHp1TNf&)R^>mz1p3Ig08?-xxictxcE0Crc0slU&Y%3#kN{%?oXcYZ z2T+e9`Z-3O2P3Cta+$TANeM9D{>&y*w-cY+Zw%i5GH5A?12As$7wvMU1!7DePANA; zDpjV$R=|2*?Ks8rLu>s{-%j>p_m>`d%+L>=H29f6-J6R+iZfY5N-*ydT=^lJT6S z`ZHC+pT+YpXAap0M!bXW3#<=_XUM=OmUMGfQ#Z&N&lQqa4J-ih$7RA57&V^CX1e-~ zD2{}grD7M{wknkd)XQAnR`Z!w;qUh{0@S%h>eGYwYMEfFe9~^ls5Ka$)OBO6Q3nB$ z9Tt@Oh#&*E`Roz9Qr5ay{a#oSL| zd`)0{1LJC2U4YadFFXHHEG!+QmHU?`Lgec{ml~v??dw-@O}l!T`EoiQEu8<O{{~0IIVqGNHP#l`zkH|M*9m3*wifA_k!?JyawlZ za$Prn#?0|?GrW^!6u)xumI#k8a}DH}FfBL2v}8T!cScj(y}JlCF?=msl>v6S`q6IC zGk)>Y7}HA46=<7)P+&noYy6X^E8cr`W*4|peop{{j+Cm-f-j%4<%V}aT}jtd)iXoM z`7wV`t&AijMrYSsn-{%I)LIU~jpQ3yH0cx-1~#l<3k1VjAJXz_iyti-bYc9R?m=(B zS>?H5sL{Q%NRo+kej(OiQFF7`f<3@a1JD@&Pd%euKfj5iNh48 zAxPj>=y9y8BGt57suvnu&!|PJR;xis_t_KXOXpy%)gAXUABop%5O1ap3Qd0s$H zk2Q7`(#tG@gMunBSso}o&jpjwZnad?FVFw-T>FMKTpwg)Q&|Dpj}08~KlrLrgPz9< z4-lQcFM!R^mXx&9<|<4_WRvo5h47b>bu5#h6OqZw*ggolh%uQOrsBo6d|lMxFk@)@ zU+bFjHMTtHwgmw%$g)AO@&Ky?crcjhT;f8DV|vmEb+)T80f@bPfxT;Tb9d5qh3 z`gC<_71~~pCWr2f>{LJ+8#u4Gx(_zj`S{Xw%Ycd;PZ}@(-{EBVjCqPuXy$IVt9)lVPc~yXb3q&VK8H8lKV|(azY?XT$ z$iLsHXNYsfO7_dkG6ES;Ejk*<4Fuq5EHzbyWeZ+Kw7>3yTNR%VOpR~7Q zWzD##-WEGcP&K5w!ncsLY*F;c)Yj0)YGGoETO$w0LT{LPKKqy+6)OPr=V7RoPT}r% zO7Jo+%z{AKf!N2S#)=e5(}AJQv4Hg-au*_mcqCOeeAXg8z-AU%uNpzuJGVzQj;(TVt7vCWG%B9irBW;RNl|xrUQ$x6fs9^h=9_ax?tG zUf`qA+o$6#x5k2;UUrJ-x{kxe;Ton=)4YN8a{65Wgypuz8BY0)#Nvj!`=$absMhQd ztX~IrNkB#_BhH{u+lkBQ<#rnMX^;HO$Gbt9vV|K{^f%_qOGXhA4-DCvjo|qus3Dty zx3yl*gYHzb?Mg-^KByJh{Ra8mhZpQu3tbQr2zrzao93Ya(n>5uxvTeAB@{?(thfvB z%!AzY&@rT77lstb1E(kKhK{+;CE6Yo9Xx#dWl|`>k~C_0C~Z#zovZ1yxa#2J#f=s7 zy%LefuDKk0(Q%NWR5J}QB(R$9WR9Y+ls?%O6d!Cgo`!)DU?w~U0487%Ccq+K5L~K1 z7JDq>G(O$bN9Ny_a(Y@t#IQX;Emnb&hI#bn7epUkoX29eUEn?Zj;mfML&qYUskB$R zsX#+S@6Kb?X((c&G%w*;0=&ih^$7Qrp#T=39Nhvy_9}-)I`5TJ8o{X@3t%k@f$cbk z-IVXy4vG)aUbvjDQKPl#5yzoJG^XQruVdN*3?8+`!us&*oEgcj8>k;_6DNdk zCs5itZll8GDr?mxfIbsyH}b;(F0=r{>9B$inc9b^qY%i^&luFVvEJ{JGEt=0R2D_C zk8VQq>6JSMp8bLXdij{Hp;RA*2T0CUk-Ia1q#``BKPb!>VKZDzOF-L$6a}L_6 zk`U?D!XnOg2YqJLK8!_8 zAiTe`swD$ptE#rCt1+Y&6e4mjBzF(#ImK))AeMAY-RRX@SOEm-?nd4CW zH^FD(lFDum2)Kp2qrkb_gZX;*i(-v}Nk%4jCoT?`D_se-^{El`0! zhkeG7&d)&YcqE6hP*l;Yz&ddY#A}Te7L=PeJ&{<9SB`g!AIzp>$SV^8K@bRook>$q z{V`Of%52@5R8xQx-M-gdVZmDc+_4~j4_NxsC0MUwAUd5)5IsWi={)646aBO0$AU^* zxIt_6sulqECqv)Ct&ezYEpR2#cs>B476dX{!POhWiU+$e$Po36uqvK%3qoSqp{x;A zs0~nWG!RFNjyPJ75ja}ope~BG*5fMc)pn;N85{*2?C@mlNHb8EfLep`h+&jkbC042s`t;xzh{q7ZC|k zaH!NG148*ik#0NphV`04JSR6wwjt^rgqI<-$Gag7gtH8t2_QkCDUj2)a6{8G80M_& zs{BE_^(^A?wPyW=Y+$_!o&fydIB*398ROucOR-agXlI4cvulXtm(`ZRG%h+mr3c0I zVcZCtIH{E4=H}e{K-#Kw9N>>uyT|beWv+*{t!QT%M@k(tAU+&au&OIF+ma~vVQ4t& z-2)vI(9ilP9f?)V5pgcdv0Wt+s6Uaca@B7T;YE^rEk)fe@$*_F**;}b-S z5CJHXmu!AZ=o8xpp=~)Q<-MhG(cxJ=I+3G*Od1oWdTGw?X>e3%r+lR#)yr-GF;~>5G1~pIsS0Y!P?jA@CN+pVEL6 z*=T{h-XU!@v(e(!=7xpn*lka3YKc#Y6;^4tg?doqjDm|e&c|pL)ELDcl)f@M<#ToJ zf`D;~>;>i>Gji@9&z1S*b;alb1@97RfwI;jYkTv<>8yTra6um)f;{~K;w$*gKw11X zynnCnCgyDg>TurXeUh?9)JwlBzJI{{RMbkStsz1lw*Wv{g9}%|4-Gl!mK>LY>*C|SK+ayV(NSupkt9tZ>QkRB+e;JNr<8R>#qk&rl*71DZ zzi+%lv@rr~W3G5N0D1<#ddq)iTLmRE9o)0)1iC48`X&KAX+eY7RqXtbI5h%Uv}^E@ z%TZ6T>#R?v-iRCI*TcIQhD_8`5j14ON{MYeqYRLKga@1=h|YwN2+%bE5)m$YX9;P$ zFj%#fFk(4&1o7z<0$e-1J{5;e0CZvc zgZMs2dYp}8t)ft6vu_8?RR%2=t{pVmF?5H3gDqBUl%edo1f^$eL)#_xtm5{vMnF`< z=WG}Lvmi~m!2WSfYjfD-!XcYB2Bz?8V>H1+`&48Hl1y}x!0a1mTLlBJEZcI>%MLq8 zY6FnQ3rmCT!#bA$C|Eqporjvdz3YSU$UCo(^q7zOnThiWYPM|X}4OmFtNOlxB+!j@eq ztxz8zCk?n~4V(?fy8;Rk*b9>oFjzWMo(xPdOHi(s)Sc60#dSEF-=*aPplv}xk3fuQ zG~i~~OiEqAj0oJ7+X*-+T-W__4!O-G8_~kj(4_&22eCFBRzNiy&w|aPy0O&E!hGvB z3C8I`DsNg;(PbwBuqZ&J;>JHcczK{O1)zE?xl~oDAlY98vvus8;u&v_M%X%rQ=_Vb z)D;rfj@RTsGq!Guq!N>ajWrc8eNdcBM;!x@bG5osA6MPKKAfi3OUaE#&>xVPmLi(W zAQyx4QsIS)+|N!?M)yZc6b%8?^*F}7vH<2)qVof{k@*R0Yla`VA`%{8_hUS8@YRO& z2yC{%SOsL_%qz|5d@27;!t>Xe%*J{|B|)hCCP6Y{4pTq>G6QJo*z{VMbJPrFo=rad zj)UtEjY3NE?y%{o_ko^+b}x`(1<>@xJXT2XC*Dwo9F-(|t11== zyZhUUNWxEjczfN^DfZ+oqC8Q#Ku%T{n9r*AA$(!Ks9X-;Hrf|X74|iSa7ye+f)SdT zc&IZjM8xT*ia*FvM5kqo1oB5koR@mydeJb0My>z7fGuibX4vbAodqG{Pdql$46X_- za_l$UNE(HjBR;EX)ItsZ^hu8-C?Uv&2zcEDs<6$hEo4Ubh_G8KsEy^QnZ%+BehC+K zcdFW}wNXO&d;zOSTU;R5F8(C!rZPf0@M1F@{E5X=aC?lWOqIk<$NdD~m*a>wuGh9r z!r}H##^L7TewuWI;JC+=aMDZFk>Kg1;_r51*`2AAR^P%wlKY~stcL@!bU3XeUg)aH^6;tI{I*M&N!%;y#dwh7)8eSMk zom;7NVJp{QSK(T^arULS)t+RR;&%r6r!TeB?-dkP5sFc|7e%Xm~p?Ef+sq4Sk}myyzZ0qt5_H`XXkM7i|W@oZZ%b(q?hXz6K<9> zN%i~R4O%VPb6vtTZ(5Jc!8PPg!#4@(N2>@=V{+$}wq*L*_)bZT)IPO!$MUI5S5RUY zZ$|aA4V+@5ZeF{*IX`We0aNK!EUSfX&&uDUub*HbHm>ZrYT0+DD%M+9fjr6SlB(`@ z{x3h8cM+;*SKwh%y`F-@DZ}k7Qd3L*JUrG8o|6p&no7Mi+Z~i_n8zf07J{w6d|InT&>8)`LA2V~i z>a-b0iwJ(cN5dTqw%*=xT4m*|Hy2H3>UaF&AQe2)`*!Bd(x#H)EwK;0e)iv7#x*=? zIcLkWYidu``Y$hC_WIge)@;_=(&h3#BisHVD_smvlvsCHtG!$3#%?kbq;XIFxmT3Z zm_0j)7IVMpmp^xPCv-adhwdLRtQ|C*8L?;``v#Ak)6E>@oixc^URdLwpIDq zqlc{b_7{q#{-{qE7mN;Fg+7&pKArRJT6Q>j^8c6e*X=7lisn9FZB7|$S3ya|aM?}H z&efd9+m-Ilm~$oSqprX6e2EOVH?@18{*taeS@o&oMndWP^c(J{=I37L>jsMgPWWUK zY^xnAG)9anos(D7Z|*rrO)DMf8GR=6`;p1^XC-9UdOTT|&f_{CkJ(%xfY15-+K>*Uf5mxqU4@C!U^`Xcr2HTQ@f-2+;^<}Y0CH%womqPc%l z`>$*G8~1GbX|%@bkVV72#NWchwy*hTw8AxC@|pAV*PWJk&K@bA?>Ll`x#+mm28GcN z+_wyN6I;Lzk2)b8uCF;{>MAg&&6py^EYm$S)#2?D562e{qPhpms`bt>Ejms+bm=%R ziA-2AJGZAqbk06Z6qOV7pwH**o|2&f?O;*NzJ(sp^Izw}Zxjc0m4mbbn z(2f7^pgsY%3U_aN%Yc(kUbbj*?=hZOK=$7C@;pes8xA&!2?eCU^04=GI^m_NfA}yE zN4udzE<+)3CVcbfwq~qN-T^0^e%P4Be4>TUEgY`)=~SHbHyLrbVCC-{^R*e@S772@ z=i6dFyu#uBb@TZ?`}arI*8+~wu}b`J4zTYFow#RzEfR+-sQ#u-<2(2s<7v=&INU7w Mw+g0lSRMNIUx-mEJ^%m! diff --git a/rudict/grammar_case.csv b/rudict/grammar_case.csv index b4b984f..ca9bdfe 100644 --- a/rudict/grammar_case.csv +++ b/rudict/grammar_case.csv @@ -7,7 +7,7 @@ FIRST_A_IFORM_INANIMATE;NC_SINGULAR;NGC_P1_NOMINATIVE;а;рука ;;NGC_P6_PREPOSITIONAL;е;говорю о руке ;NC_PLURAL;NGC_P1_NOMINATIVE;и;руки ;;NGC_P2_GENITIVE;;подарок для рук -;;NGC_P3_DATIVE;е;подарок рукам +;;NGC_P3_DATIVE;ам;подарок рукам ;;NGC_P4_ACCUSATIVE;и;обвиняю руки ;;NGC_P5_INSTRUMENTAL;ами;говорю с руками ;;NGC_P6_PREPOSITIONAL;ах;говорю о руках diff --git a/rudict/grammar_case.xlsx b/rudict/grammar_case.xlsx index 2caad6cce642147b7f76d8ba1424c045eca55958..ffc96215174195d0e16141d0a3ebf724fa1eb0e6 100644 GIT binary patch delta 4639 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 J_3uAh{{v_FxAFi0 diff --git a/rudict/rudict/main.cpp b/rudict/rudict/main.cpp index 1d9cd7b..ea6df40 100644 --- a/rudict/rudict/main.cpp +++ b/rudict/rudict/main.cpp @@ -11,6 +11,7 @@ int main() SetupDeclentionMap(); LoadNounDeclencionCaseTable(); LoadFrequentWordSet(); + FillDivisionCaseMaps(); //RecognizeNoun(L"стульями"); //Косяк: "вечер" diff --git a/rudict/rudict/noun.cpp b/rudict/rudict/noun.cpp index 33e1590..fa10204 100644 --- a/rudict/rudict/noun.cpp +++ b/rudict/rudict/noun.cpp @@ -77,7 +77,7 @@ NounDeclencion WStringToNounDeclencion(std::wstring str) } if (str == L"FIRST_A_IFORM_ANIMATE") { - return FIRST_A_IFORM_INANIMATE; + return FIRST_A_IFORM_ANIMATE; } if (str == L"FIRST_A_UFORM_INANIMATE") { @@ -274,6 +274,11 @@ bool NounSpecialPluralFormIsInDictionary(std::wstring nounNominativePlural) { return true; } + + if (!noun.haveSingleForm && noun.nominativeForm == nounNominativePlural) + { + return true; + } } return false; @@ -301,6 +306,11 @@ NounRecord GetNounRecordFromDictionary_BySpecialPluralForm(std::wstring nounNomi { return noun; } + + if (!noun.haveSingleForm && noun.nominativeForm == nounNominativePlural) + { + return noun; + } } return{}; @@ -339,6 +349,26 @@ bool charIsVowel(wchar_t c) } +bool charIsMissingVowelSoftenerConsolant(wchar_t c) +{ + //This test belongs to missing vowel case. + //лев -> львы (because л, then е replaced by soft sign) + //немец -> немцы (because not л, the е is not replaced, just missing) + + std::wstring consolants = L"л"; + + for (wchar_t ic : consolants) + { + if (c == ic) + { + return true; + } + } + + return false; +} + + std::set getPossibleNounEndingDivisionSet(std::wstring noun) { std::set result; @@ -354,6 +384,7 @@ std::set getPossibleNounEndingDivisionSet(std::wstring noun) if (charIsConsolant(nounBase[nounBase.size() - 1]) || nounBase[nounBase.size() - 1] == L'ь' || nounBase[nounBase.size() - 1] == L'ъ') { result.insert({ nounBase, ending, NounEndingDivision::DC_COMMON }); + result.insert({ nounBase, ending, NounEndingDivision::DC_SPECIAL_PLURAL_FORM }); } //Check missed vowel (simple case) @@ -362,11 +393,22 @@ std::set getPossibleNounEndingDivisionSet(std::wstring noun) result.insert({ nounBase, ending, NounEndingDivision::DC_LOST_VOWEL_O }); } - if (charIsConsolant(nounBase[nounBase.size() - 1]) && nounBase[nounBase.size() - 2] == L'ь') + if (charIsConsolant(nounBase[nounBase.size() - 1]) && nounBase[nounBase.size() - 2] == L'ь' && charIsMissingVowelSoftenerConsolant(nounBase[nounBase.size() - 3])) { result.insert({ nounBase, ending, NounEndingDivision::DC_LOST_VOWEL_E }); } - + + if (charIsConsolant(nounBase[nounBase.size() - 1]) && charIsConsolant(nounBase[nounBase.size() - 2]) && !charIsMissingVowelSoftenerConsolant(nounBase[nounBase.size() - 2])) + { + result.insert({ nounBase, ending, NounEndingDivision::DC_LOST_VOWEL_E }); + } + + + if (ending == L"а" || ending == L"я") + { + result.insert({ nounBase, ending, NounEndingDivision::DC_SPECIAL_PLURAL_A }); + } + } } @@ -452,51 +494,93 @@ bool charIsUFormConsolant(wchar_t c) } -bool FirstAIFormSingularCondition(const NounRecord& nounRecord) //Same for both animate and inanimate +bool AIFormEndingIsCorrect(const NounRecord& nounRecord) { - return nounRecord.haveSingleForm && (GetLastChar(nounRecord) == L'а' && charIsIFormConsolant(GetPrevLastChar(nounRecord))); + return (GetLastChar(nounRecord) == L'а' && charIsIFormConsolant(GetPrevLastChar(nounRecord))) && nounRecord.haveSingleForm || + (GetLastChar(nounRecord) == L'и' && charIsIFormConsolant(GetPrevLastChar(nounRecord))) && !nounRecord.haveSingleForm; +} + + + +bool FirstAIFormInanimateSingularCondition(const NounRecord& nounRecord) +{ + return nounRecord.haveSingleForm && nounRecord.canBeInanimate && (GetLastChar(nounRecord) == L'а' && charIsIFormConsolant(GetPrevLastChar(nounRecord))); +} + +bool FirstAIFormAnimateSingularCondition(const NounRecord& nounRecord) +{ + return nounRecord.haveSingleForm && nounRecord.canBeAnimate && (GetLastChar(nounRecord) == L'а' && charIsIFormConsolant(GetPrevLastChar(nounRecord))); } bool FirstAIFormInanimatePluralCondition(const NounRecord& nounRecord) { - return nounRecord.haveMultipleForm && nounRecord.canBeInanimate && (GetLastChar(nounRecord) == L'а' && charIsIFormConsolant(GetPrevLastChar(nounRecord))); + return nounRecord.haveMultipleForm && nounRecord.canBeInanimate && ( + (GetLastChar(nounRecord) == L'а' && charIsIFormConsolant(GetPrevLastChar(nounRecord))) || + !nounRecord.haveSingleForm && (GetLastChar(nounRecord) == L'и' && charIsIFormConsolant(GetPrevLastChar(nounRecord))) + ); } bool FirstAIFormAnimatePluralCondition(const NounRecord& nounRecord) { - return nounRecord.haveMultipleForm && nounRecord.canBeAnimate && (GetLastChar(nounRecord) == L'а' && charIsIFormConsolant(GetPrevLastChar(nounRecord))); + return nounRecord.haveMultipleForm && nounRecord.canBeAnimate && ( + (GetLastChar(nounRecord) == L'а' && charIsIFormConsolant(GetPrevLastChar(nounRecord))) || + !nounRecord.haveSingleForm && (GetLastChar(nounRecord) == L'и' && charIsIFormConsolant(GetPrevLastChar(nounRecord))) + ); } -bool FirstAUFormSingularCondition(const NounRecord& nounRecord) //Same for both animate and inanimate +bool FirstAUFormInanimateSingularCondition(const NounRecord& nounRecord) { - return nounRecord.haveSingleForm && (GetLastChar(nounRecord) == L'а' && charIsUFormConsolant(GetPrevLastChar(nounRecord))); + return nounRecord.haveSingleForm && nounRecord.canBeInanimate && (GetLastChar(nounRecord) == L'а' && charIsUFormConsolant(GetPrevLastChar(nounRecord))); } +bool FirstAUFormAnimateSingularCondition(const NounRecord& nounRecord) +{ + return nounRecord.haveSingleForm && nounRecord.canBeAnimate && (GetLastChar(nounRecord) == L'а' && charIsUFormConsolant(GetPrevLastChar(nounRecord))); +} + + bool FirstAUFormInanimatePluralCondition(const NounRecord& nounRecord) { - return nounRecord.haveMultipleForm && nounRecord.canBeInanimate && (GetLastChar(nounRecord) == L'а' && charIsUFormConsolant(GetPrevLastChar(nounRecord))); + return nounRecord.haveMultipleForm && nounRecord.canBeInanimate && ( + (GetLastChar(nounRecord) == L'а' && charIsUFormConsolant(GetPrevLastChar(nounRecord))) || + !nounRecord.haveSingleForm && (GetLastChar(nounRecord) == L'ы' && charIsUFormConsolant(GetPrevLastChar(nounRecord))) + ); } bool FirstAUFormAnimatePluralCondition(const NounRecord& nounRecord) { - return nounRecord.haveMultipleForm && nounRecord.canBeAnimate && (GetLastChar(nounRecord) == L'а' && charIsUFormConsolant(GetPrevLastChar(nounRecord))); + return nounRecord.haveMultipleForm && nounRecord.canBeAnimate && ( + (GetLastChar(nounRecord) == L'а' && charIsUFormConsolant(GetPrevLastChar(nounRecord))) || + !nounRecord.haveSingleForm && (GetLastChar(nounRecord) == L'ы' && charIsUFormConsolant(GetPrevLastChar(nounRecord))) + ); } -bool FirstYaFormSingularCondition(const NounRecord& nounRecord) //Same for both animate and inanimate +bool FirstYaFormInanimateSingularCondition(const NounRecord& nounRecord) { - return nounRecord.haveSingleForm && (GetLastChar(nounRecord) == L'я'); + return nounRecord.haveSingleForm && nounRecord.canBeInanimate && (GetLastChar(nounRecord) == L'я'); +} + +bool FirstYaFormAnimateSingularCondition(const NounRecord& nounRecord) +{ + return nounRecord.haveSingleForm && nounRecord.canBeAnimate && (GetLastChar(nounRecord) == L'я'); } bool FirstYaFormInanimatePluralCondition(const NounRecord& nounRecord) { - return nounRecord.haveMultipleForm && nounRecord.canBeInanimate && (GetLastChar(nounRecord) == L'я'); + return nounRecord.haveMultipleForm && nounRecord.canBeInanimate && ( + (GetLastChar(nounRecord) == L'я') || + !nounRecord.haveSingleForm && (GetLastChar(nounRecord) == L'и') + ); } bool FirstYaFormAnimatePluralCondition(const NounRecord& nounRecord) { - return nounRecord.haveMultipleForm && nounRecord.canBeAnimate && (GetLastChar(nounRecord) == L'я'); + return nounRecord.haveMultipleForm && nounRecord.canBeAnimate && ( + (GetLastChar(nounRecord) == L'я') || + !nounRecord.haveSingleForm && (GetLastChar(nounRecord) == L'и') + ); } @@ -509,7 +593,11 @@ bool SecondMaleIFormInanimateSingularCondition(const NounRecord& nounRecord) bool SecondMaleIFormInanimatePluralCondition(const NounRecord& nounRecord) { - return nounRecord.haveMultipleForm && nounRecord.gender == NG_MALE && nounRecord.canBeInanimate && charIsIFormConsolant(GetLastChar(nounRecord)); + return nounRecord.haveMultipleForm && nounRecord.gender == NG_MALE && nounRecord.canBeInanimate && ( + charIsIFormConsolant(GetLastChar(nounRecord)) || + !nounRecord.haveSingleForm && charIsIFormConsolant(GetPrevLastChar(nounRecord)) && GetLastChar(nounRecord) == L'и' + ); + } @@ -520,7 +608,10 @@ bool SecondMaleIFormAnimateSingularCondition(const NounRecord& nounRecord) bool SecondMaleIFormAnimatePluralCondition(const NounRecord& nounRecord) { - return nounRecord.haveMultipleForm && nounRecord.gender == NG_MALE && nounRecord.canBeAnimate && charIsIFormConsolant(GetLastChar(nounRecord)); + return nounRecord.haveMultipleForm && nounRecord.gender == NG_MALE && nounRecord.canBeAnimate && ( + charIsIFormConsolant(GetLastChar(nounRecord)) || + !nounRecord.haveSingleForm && charIsIFormConsolant(GetPrevLastChar(nounRecord)) && GetLastChar(nounRecord) == L'и' + ); } @@ -531,7 +622,10 @@ bool SecondMaleUFormInanimateSingularCondition(const NounRecord& nounRecord) bool SecondMaleUFormInanimatePluralCondition(const NounRecord& nounRecord) { - return nounRecord.haveMultipleForm && nounRecord.gender == NG_MALE && nounRecord.canBeInanimate && charIsUFormConsolant(GetLastChar(nounRecord)); + return nounRecord.haveMultipleForm && nounRecord.gender == NG_MALE && nounRecord.canBeInanimate && ( + charIsUFormConsolant(GetLastChar(nounRecord)) || + !nounRecord.haveSingleForm && charIsUFormConsolant(GetPrevLastChar(nounRecord)) && GetLastChar(nounRecord) == L'ы' + ); } @@ -542,7 +636,10 @@ bool SecondMaleUFormAnimateSingularCondition(const NounRecord& nounRecord) bool SecondMaleUFormAnimatePluralCondition(const NounRecord& nounRecord) { - return nounRecord.haveMultipleForm && nounRecord.gender == NG_MALE && nounRecord.canBeAnimate && charIsUFormConsolant(GetLastChar(nounRecord)); + return nounRecord.haveMultipleForm && nounRecord.gender == NG_MALE && nounRecord.canBeAnimate && ( + charIsUFormConsolant(GetLastChar(nounRecord)) || + !nounRecord.haveSingleForm && charIsUFormConsolant(GetPrevLastChar(nounRecord)) && GetLastChar(nounRecord) == L'ы' + ); } @@ -553,7 +650,10 @@ bool SecondMaleSSFormInanimateSingularCondition(const NounRecord& nounRecord) bool SecondMaleSSFormInanimatePluralCondition(const NounRecord& nounRecord) { - return nounRecord.haveMultipleForm && nounRecord.gender == NG_MALE && nounRecord.canBeInanimate && GetLastChar(nounRecord) == L'ь'; + return nounRecord.haveMultipleForm && nounRecord.gender == NG_MALE && nounRecord.canBeInanimate && ( + GetLastChar(nounRecord) == L'ь' || + !nounRecord.haveSingleForm && GetLastChar(nounRecord) == L'и' + ); } @@ -564,7 +664,10 @@ bool SecondMaleSSFormAnimateSingularCondition(const NounRecord& nounRecord) bool SecondMaleSSFormAnimatePluralCondition(const NounRecord& nounRecord) { - return nounRecord.haveMultipleForm && nounRecord.gender == NG_MALE && nounRecord.canBeAnimate && GetLastChar(nounRecord) == L'ь'; + return nounRecord.haveMultipleForm && nounRecord.gender == NG_MALE && nounRecord.canBeAnimate && ( + GetLastChar(nounRecord) == L'ь' || + !nounRecord.haveSingleForm && GetLastChar(nounRecord) == L'и' + ); } bool SecondNeutralEFormSingularCondition(const NounRecord& nounRecord) @@ -574,7 +677,10 @@ bool SecondNeutralEFormSingularCondition(const NounRecord& nounRecord) bool SecondNeutralEFormPluralCondition(const NounRecord& nounRecord) { - return nounRecord.haveMultipleForm && nounRecord.gender == NG_NEUTRAL && GetLastChar(nounRecord) == L'е'; + return nounRecord.haveMultipleForm && nounRecord.gender == NG_NEUTRAL && ( + GetLastChar(nounRecord) == L'е' || + !nounRecord.haveSingleForm && GetLastChar(nounRecord) == L'я' + ); } bool SecondNeutralOFormSingularCondition(const NounRecord& nounRecord) @@ -584,22 +690,37 @@ bool SecondNeutralOFormSingularCondition(const NounRecord& nounRecord) bool SecondNeutralOFormPluralCondition(const NounRecord& nounRecord) { - return nounRecord.haveMultipleForm && nounRecord.gender == NG_NEUTRAL && GetLastChar(nounRecord) == L'о'; + return nounRecord.haveMultipleForm && nounRecord.gender == NG_NEUTRAL && ( + GetLastChar(nounRecord) == L'о' || + !nounRecord.haveSingleForm && GetLastChar(nounRecord) == L'а' + ); } -bool ThirdFormSingularCondition(const NounRecord& nounRecord) //Same for both animate and inanimate +bool ThirdFormInanimateSingularCondition(const NounRecord& nounRecord) { - return nounRecord.haveSingleForm && nounRecord.gender == NG_FEMALE && GetLastChar(nounRecord) == L'ь'; + return nounRecord.haveSingleForm && nounRecord.gender == NG_FEMALE && nounRecord.canBeInanimate && GetLastChar(nounRecord) == L'ь'; } +bool ThirdFormAnimateSingularCondition(const NounRecord& nounRecord) +{ + return nounRecord.haveSingleForm && nounRecord.gender == NG_FEMALE && nounRecord.canBeAnimate && GetLastChar(nounRecord) == L'ь'; +} + + bool ThirdFormInanimatePluralCondition(const NounRecord& nounRecord) { - return nounRecord.haveMultipleForm && nounRecord.gender == NG_FEMALE && nounRecord.canBeInanimate && GetLastChar(nounRecord) == L'ь'; + return nounRecord.haveMultipleForm && nounRecord.gender == NG_FEMALE && nounRecord.canBeInanimate && ( + GetLastChar(nounRecord) == L'ь' || + !nounRecord.haveSingleForm && GetLastChar(nounRecord) == L'и' + ); } bool ThirdFormAnimatePluralCondition(const NounRecord& nounRecord) { - return nounRecord.haveMultipleForm && nounRecord.gender == NG_FEMALE && nounRecord.canBeAnimate && GetLastChar(nounRecord) == L'ь'; + return nounRecord.haveMultipleForm && nounRecord.gender == NG_FEMALE && nounRecord.canBeAnimate && ( + GetLastChar(nounRecord) == L'ь' || + !nounRecord.haveSingleForm && GetLastChar(nounRecord) == L'и' + ); } @@ -608,18 +729,18 @@ std::map, std::function < bool(const NounRe void SetupDeclentionMap() { - DeclentionConditionMap[{FIRST_A_IFORM_INANIMATE, NC_SINGULAR}] = std::bind(FirstAIFormSingularCondition, std::placeholders::_1); - DeclentionConditionMap[{FIRST_A_IFORM_ANIMATE, NC_SINGULAR}] = std::bind(FirstAIFormSingularCondition, std::placeholders::_1); + DeclentionConditionMap[{FIRST_A_IFORM_INANIMATE, NC_SINGULAR}] = std::bind(FirstAIFormInanimateSingularCondition, std::placeholders::_1); + DeclentionConditionMap[{FIRST_A_IFORM_ANIMATE, NC_SINGULAR}] = std::bind(FirstAIFormAnimateSingularCondition, std::placeholders::_1); DeclentionConditionMap[{FIRST_A_IFORM_INANIMATE, NC_PLURAL}] = std::bind(FirstAIFormInanimatePluralCondition, std::placeholders::_1); DeclentionConditionMap[{FIRST_A_IFORM_ANIMATE, NC_PLURAL}] = std::bind(FirstAIFormAnimatePluralCondition, std::placeholders::_1); - DeclentionConditionMap[{FIRST_A_UFORM_INANIMATE, NC_SINGULAR}] = std::bind(FirstAUFormSingularCondition, std::placeholders::_1); - DeclentionConditionMap[{FIRST_A_UFORM_ANIMATE, NC_SINGULAR}] = std::bind(FirstAUFormSingularCondition, std::placeholders::_1); + DeclentionConditionMap[{FIRST_A_UFORM_INANIMATE, NC_SINGULAR}] = std::bind(FirstAUFormInanimateSingularCondition, std::placeholders::_1); + DeclentionConditionMap[{FIRST_A_UFORM_ANIMATE, NC_SINGULAR}] = std::bind(FirstAUFormAnimateSingularCondition, std::placeholders::_1); DeclentionConditionMap[{FIRST_A_UFORM_INANIMATE, NC_PLURAL}] = std::bind(FirstAUFormInanimatePluralCondition, std::placeholders::_1); DeclentionConditionMap[{FIRST_A_UFORM_ANIMATE, NC_PLURAL}] = std::bind(FirstAUFormAnimatePluralCondition, std::placeholders::_1); - DeclentionConditionMap[{FIRST_YA_FORM_INANIMATE, NC_SINGULAR}] = std::bind(FirstYaFormSingularCondition, std::placeholders::_1); - DeclentionConditionMap[{FIRST_YA_FORM_ANIMATE, NC_SINGULAR}] = std::bind(FirstYaFormSingularCondition, std::placeholders::_1); + DeclentionConditionMap[{FIRST_YA_FORM_INANIMATE, NC_SINGULAR}] = std::bind(FirstYaFormInanimateSingularCondition, std::placeholders::_1); + DeclentionConditionMap[{FIRST_YA_FORM_ANIMATE, NC_SINGULAR}] = std::bind(FirstYaFormAnimateSingularCondition, std::placeholders::_1); DeclentionConditionMap[{FIRST_YA_FORM_INANIMATE, NC_PLURAL}] = std::bind(FirstYaFormInanimatePluralCondition, std::placeholders::_1); DeclentionConditionMap[{FIRST_YA_FORM_ANIMATE, NC_PLURAL}] = std::bind(FirstYaFormAnimatePluralCondition, std::placeholders::_1); @@ -645,8 +766,8 @@ void SetupDeclentionMap() DeclentionConditionMap[{SECOND_NEUTRAL_O_FORM, NC_PLURAL}] = std::bind(SecondNeutralOFormPluralCondition, std::placeholders::_1); - DeclentionConditionMap[{THIRD_FORM_INANIMATE, NC_SINGULAR}] = std::bind(ThirdFormSingularCondition, std::placeholders::_1); - DeclentionConditionMap[{THIRD_FORM_ANIMATE, NC_SINGULAR}] = std::bind(ThirdFormSingularCondition, std::placeholders::_1); + DeclentionConditionMap[{THIRD_FORM_INANIMATE, NC_SINGULAR}] = std::bind(ThirdFormInanimateSingularCondition, std::placeholders::_1); + DeclentionConditionMap[{THIRD_FORM_ANIMATE, NC_SINGULAR}] = std::bind(ThirdFormAnimateSingularCondition, std::placeholders::_1); DeclentionConditionMap[{THIRD_FORM_INANIMATE, NC_PLURAL}] = std::bind(ThirdFormInanimatePluralCondition, std::placeholders::_1); DeclentionConditionMap[{THIRD_FORM_ANIMATE, NC_PLURAL}] = std::bind(ThirdFormAnimatePluralCondition, std::placeholders::_1); @@ -686,17 +807,17 @@ bool NounScructIsAlreadyInArray(const NounStruct& nounStruct, const std::vector< bool IsDeclencionSecondType(NounDeclencion nounDeclention) { switch (nounDeclention) - { - case SECOND_MALE_IFORM_INANIMATE: - case SECOND_MALE_IFORM_ANIMATE: - case SECOND_MALE_UFORM_INANIMATE: - case SECOND_MALE_UFORM_ANIMATE: - case SECOND_MALE_SSFORM_INANIMATE: - case SECOND_MALE_SSFORM_ANIMATE: - return true; - break; - default: - return false; + { + case SECOND_MALE_IFORM_INANIMATE: + case SECOND_MALE_IFORM_ANIMATE: + case SECOND_MALE_UFORM_INANIMATE: + case SECOND_MALE_UFORM_ANIMATE: + case SECOND_MALE_SSFORM_INANIMATE: + case SECOND_MALE_SSFORM_ANIMATE: + return true; + break; + default: + return false; break; } } @@ -704,18 +825,18 @@ bool IsDeclencionSecondType(NounDeclencion nounDeclention) bool IsDeclencionAnimated(NounDeclencion nounDeclention) { switch (nounDeclention) - { - case FIRST_A_IFORM_ANIMATE: - case FIRST_A_UFORM_ANIMATE: - case FIRST_YA_FORM_ANIMATE: - case SECOND_MALE_IFORM_ANIMATE: - case SECOND_MALE_UFORM_ANIMATE: - case SECOND_MALE_SSFORM_ANIMATE: - case THIRD_FORM_ANIMATE: - return true; - break; - default: - return false; + { + case FIRST_A_IFORM_ANIMATE: + case FIRST_A_UFORM_ANIMATE: + case FIRST_YA_FORM_ANIMATE: + case SECOND_MALE_IFORM_ANIMATE: + case SECOND_MALE_UFORM_ANIMATE: + case SECOND_MALE_SSFORM_ANIMATE: + case THIRD_FORM_ANIMATE: + return true; + break; + default: + return false; break; } } @@ -735,6 +856,107 @@ bool LostVowelETest(NounTuple nounTuple, NounRecord nounRecord) return nounRecord.haveStandardMultipleFormWithMissingLastVowel; } +std::map> DivisionCaseNounModificatorMap; +std::map> DivisionCaseEndingModificatorMap; + + +std::map < NounEndingDivision::DivisionCase, std::function < bool(NounTuple) >> DivisionCaseNounTupleFilterMap; + +std::map < NounEndingDivision::DivisionCase, std::function < bool(NounTuple, NounRecord) >> DivisionCaseNounTupleRecordFilterMap; + + +void FillDivisionCaseMaps() +{ + DivisionCaseNounModificatorMap[NounEndingDivision::DC_COMMON] = [](std::wstring s){ return s; }; + + DivisionCaseNounModificatorMap[NounEndingDivision::DC_LOST_VOWEL_O] = [](std::wstring s) + { + return std::wstring(s.begin(), s.end() - 2) + L"o" + s[s.size() - 1]; + }; + + DivisionCaseNounModificatorMap[NounEndingDivision::DC_LOST_VOWEL_E] = [](std::wstring s) + { + if (s[s.size() - 2] == L'ь') + { + return std::wstring(s.begin(), s.end() - 2) + L"е" + s[s.size() - 1]; + } + else + { + return std::wstring(s.begin(), s.end() - 1) + L"е" + s[s.size() - 1]; + } + }; + + DivisionCaseNounModificatorMap[NounEndingDivision::DC_SPECIAL_PLURAL_A] = DivisionCaseNounModificatorMap[NounEndingDivision::DC_COMMON]; + + DivisionCaseNounModificatorMap[NounEndingDivision::DC_SPECIAL_PLURAL_FORM] = DivisionCaseNounModificatorMap[NounEndingDivision::DC_COMMON]; + + DivisionCaseEndingModificatorMap[NounEndingDivision::DC_COMMON] = [](std::wstring s){ return s; }; + DivisionCaseEndingModificatorMap[NounEndingDivision::DC_LOST_VOWEL_O] = DivisionCaseEndingModificatorMap[NounEndingDivision::DC_COMMON]; + DivisionCaseEndingModificatorMap[NounEndingDivision::DC_LOST_VOWEL_E] = DivisionCaseEndingModificatorMap[NounEndingDivision::DC_COMMON]; + DivisionCaseEndingModificatorMap[NounEndingDivision::DC_SPECIAL_PLURAL_A] = [](std::wstring s) + { + if (s == L"а") return L"ы"; + if (s == L"я") return L"и"; + std::cout << "Error in DivisionCaseEndingModificatorMap[NounEndingDivision::DC_SPECIAL_PLURAL_A]" << std::endl; + return L""; + }; + + DivisionCaseEndingModificatorMap[NounEndingDivision::DC_SPECIAL_PLURAL_FORM] = DivisionCaseEndingModificatorMap[NounEndingDivision::DC_COMMON]; + + + DivisionCaseNounTupleFilterMap[NounEndingDivision::DC_COMMON] = [](NounTuple t) { return true; }; + + DivisionCaseNounTupleFilterMap[NounEndingDivision::DC_LOST_VOWEL_O] = [](NounTuple t) + { + return (std::get<1>(t) == NC_PLURAL) || + ((std::get<2>(t) != NGC_P1_NOMINATIVE) && + (!(std::get<2>(t) == NGC_P4_ACCUSATIVE && !IsDeclencionAnimated(std::get<0>(t))))); + }; + + DivisionCaseNounTupleFilterMap[NounEndingDivision::DC_LOST_VOWEL_E] = DivisionCaseNounTupleFilterMap[NounEndingDivision::DC_LOST_VOWEL_O]; + + + DivisionCaseNounTupleFilterMap[NounEndingDivision::DC_SPECIAL_PLURAL_A] = [](NounTuple t) + { + return (std::get<1>(t) == NC_PLURAL) && + ( (std::get<2>(t) == NGC_P1_NOMINATIVE) || + ((std::get<2>(t) == NGC_P4_ACCUSATIVE && !IsDeclencionAnimated(std::get<0>(t))))); + }; + + DivisionCaseNounTupleFilterMap[NounEndingDivision::DC_SPECIAL_PLURAL_FORM] = [](NounTuple t) + { + return (std::get<1>(t) == NC_PLURAL); + }; + + DivisionCaseNounTupleRecordFilterMap[NounEndingDivision::DC_COMMON] = [](NounTuple t, NounRecord r) + { + return (r.haveStandardMultipleForm || std::get<1>(t) == NC_SINGULAR) && StandardTest(t, r); + }; + + DivisionCaseNounTupleRecordFilterMap[NounEndingDivision::DC_LOST_VOWEL_O] = [](NounTuple t, NounRecord r) + { + return LostVowelOTest(t, r) && StandardTest(t, r); + }; + + DivisionCaseNounTupleRecordFilterMap[NounEndingDivision::DC_LOST_VOWEL_E] = [](NounTuple t, NounRecord r) + { + return LostVowelETest(t, r) && StandardTest(t, r); + }; + + DivisionCaseNounTupleRecordFilterMap[NounEndingDivision::DC_SPECIAL_PLURAL_A] = [](NounTuple t, NounRecord r) + { + return r.haveAlternativeMultipleFormEnding && StandardTest(t, r); + }; + + + DivisionCaseNounTupleRecordFilterMap[NounEndingDivision::DC_SPECIAL_PLURAL_FORM] = [](NounTuple t, NounRecord r) + { + return r.specialMultipleForm != L"" && StandardTest(t, r); + }; + + +} + std::vector RecognizeNoun(std::wstring noun) @@ -750,91 +972,48 @@ std::vector RecognizeNoun(std::wstring noun) std::wstring nounEnding = nounEndingDivision.ending; NounEndingDivision::DivisionCase dc = nounEndingDivision.divisionCase; + std::wstring modifiedNounBase = DivisionCaseNounModificatorMap[dc](nounBase); + std::wstring modifiedNounEnding = DivisionCaseEndingModificatorMap[dc](nounEnding); - if (dc == NounEndingDivision::DC_LOST_VOWEL_O) - { - nounBase.insert(nounBase.begin() + nounBase.size() - 1, L'о'); - } - - if (dc == NounEndingDivision::DC_LOST_VOWEL_E) - { - nounBase[nounBase.size() - 2] = L'е'; - } - - std::vector possibleTupleArr = GetPossibleNounTupleArr(nounEnding); + std::vector possibleTupleArr = GetPossibleNounTupleArr(modifiedNounEnding); //Standard check for (NounTuple nounTuple : possibleTupleArr) { - bool animated = IsDeclencionAnimated(std::get<0>(nounTuple)); - bool additionalTest = true; - - if (dc == NounEndingDivision::DC_LOST_VOWEL_O) - { - additionalTest = (std::get<1>(nounTuple) == NC_PLURAL) || - ((std::get<0>(nounTuple) != NGC_P1_NOMINATIVE) && - (!(std::get<0>(nounTuple) == NGC_P4_ACCUSATIVE && !animated))); - } - if (dc == NounEndingDivision::DC_LOST_VOWEL_E) - { - additionalTest = (std::get<1>(nounTuple) == NC_PLURAL) || - ((std::get<0>(nounTuple) != NGC_P1_NOMINATIVE) && - (!(std::get<0>(nounTuple) == NGC_P4_ACCUSATIVE && !animated))); - } - - if (!additionalTest) - { - continue; - } - - std::wstring nounNominaviteSingular = GetNounNoninative(nounBase, std::get<0>(nounTuple), NC_SINGULAR); - - if (NounIsInDictionary(nounNominaviteSingular)) + if (DivisionCaseNounTupleFilterMap[dc](nounTuple)) { - NounRecord nounRecord = GetNounRecordFromDictionary(nounNominaviteSingular); + std::wstring nounNominaviteSingular = GetNounNoninative(modifiedNounBase, std::get<0>(nounTuple), NC_SINGULAR); - bool secondAdditionalTest = true; - - if (dc == NounEndingDivision::DC_LOST_VOWEL_O) - { - secondAdditionalTest = LostVowelOTest(nounTuple, nounRecord) && StandardTest(nounTuple, nounRecord); - } - else if (dc == NounEndingDivision::DC_LOST_VOWEL_E) - { - secondAdditionalTest = LostVowelETest(nounTuple, nounRecord) && StandardTest(nounTuple, nounRecord); - } - else - { - secondAdditionalTest = (nounRecord.haveStandardMultipleForm || std::get<1>(nounTuple) == NC_SINGULAR) && StandardTest(nounTuple, nounRecord); - } - - - if (secondAdditionalTest) + if (NounIsInDictionary(nounNominaviteSingular)) { - result.push_back({ std::get<2>(nounTuple), std::get<1>(nounTuple), animated, nounRecord }); + NounRecord nounRecord = GetNounRecordFromDictionary(nounNominaviteSingular); - //Check for additional form - if (IsDeclencionSecondType(std::get<0>(nounTuple))) + if (DivisionCaseNounTupleRecordFilterMap[dc](nounTuple, nounRecord)) { - if (std::get<1>(nounTuple) == NC_SINGULAR && nounRecord.haveAlternativeMultipleFormEnding) - { - //Add additional form! - result.push_back({ NGC_P1_NOMINATIVE, NC_PLURAL, animated, nounRecord }); - - if (nounRecord.canBeInanimate) - { - result.push_back({ NGC_P4_ACCUSATIVE, NC_PLURAL, animated, nounRecord }); - } - } + result.push_back({ std::get<2>(nounTuple), std::get<1>(nounTuple), IsDeclencionAnimated(std::get<0>(nounTuple)), nounRecord }); } - } + + + std::wstring nounNominavitePlural = GetNounNoninative(nounBase, std::get<0>(nounTuple), NC_PLURAL); + + if (NounSpecialPluralFormIsInDictionary(nounNominavitePlural)) + { + NounRecord nounRecord = GetNounRecordFromDictionary_BySpecialPluralForm(nounNominavitePlural); + + if (DivisionCaseNounTupleRecordFilterMap[dc](nounTuple, nounRecord)) + { + result.push_back({ std::get<2>(nounTuple), std::get<1>(nounTuple), IsDeclencionAnimated(std::get<0>(nounTuple)), nounRecord }); + } + } + } } + /* //Special plural form check for (auto nounTuple : possibleTupleArr) { @@ -869,7 +1048,7 @@ std::vector RecognizeNoun(std::wstring noun) } } - } + }*/ diff --git a/rudict/rudict/noun.h b/rudict/rudict/noun.h index 399e82c..8eecefa 100644 --- a/rudict/rudict/noun.h +++ b/rudict/rudict/noun.h @@ -126,6 +126,8 @@ struct NounEndingDivision DC_COMMON = 0, DC_LOST_VOWEL_O, DC_LOST_VOWEL_E, + DC_SPECIAL_PLURAL_A, + DC_SPECIAL_PLURAL_FORM } divisionCase; bool operator<(const NounEndingDivision& other) const @@ -184,6 +186,7 @@ bool NounFitsDeclention(NounRecord nounRecord, NounTuple nounTuple); bool IsDeclencionSecondType(NounDeclencion nounDeclention); bool IsDeclencionAnimated(NounDeclencion nounDeclention); +void FillDivisionCaseMaps(); std::vector RecognizeNoun(std::wstring noun);