From 8e2789dc7ca7067be0c921d053269b24caa44526 Mon Sep 17 00:00:00 2001 From: PrimozGodec
60ODdOB$baWfCz40<+RdV~U$C8SZAIlV%k+dpMkj%uXk5EN+f4nU*=|q`}3_ znQY|dq?4u>H&-}<0p_BUb{IEzIFgpR>7-G{%@dBIWga?dp>gvj8@qYwq^-uy7mj9t z`RJtK#?2p&p=EwLX~l61B%8Pe=%hWzEf|hvfCcHKamOtb&g9iCL? GaXe%ZI%xoMizb`7Md_p|$SoGmVhoGXNxP8CCnH>*PFjfEfY8er2GB`!ky||3 z+$~Ng4M%Q?#JMHtqzTC_nQY;fq?5)Zw^ZWYQgqU+ >7=#E zEfdb6Wf?kYdUDH#b7@(YPTHZ|a>*#S9G$dCx#g2B-STwOHsw|b$CL01bkb1e1|?g$ zL3Gk& -U=2EH4s&aUQ)pR}PTI!YTH#b$)}oV!GPicJ zom-nun#|lf$@Xp?I%zy}>n1z6b?KxT%?(a=bc5-nLCvj~?Bv#?lcqJdemIY5xIUe< zv$+kz`Lt|6Cyj1yNH~oIhR{h1oZB#*PRoXL(j4c8COf;KbkZ>AhJ`a2U>KdW(z)T` z0!BNWPMYl8M&V3`*@#Zs@7%`WELt|Elg2!^NjRI9P3WX$&uyCQ;x?s|Ha@pmIEMi? zqmu?dHzL{9ji8gJKeu_Zo7 #H(yZvV4(Icbt?8tV(Txrl&@!4% z8XVm=;bKOz4V|<;x^0s>w=JEtL%Qw4B@D0~ois|i?UQ=9J)Ja9x*fuWjB^J%X{&TQ zCJk;!I%&0ZJ0(T86P>hQx}C#C48Jp-G-kS8!lgXLE_Bke>2^&T-L7=f#_4to7xR$a z=%m5ZjY*o^7&>YCbi0Sk7{l(hlkh;c{9EbkZp5>cS fHnNL_uBxOzHiD|HP? zvumJ}R#R6Dmoj{jPMT0%V-j2=oiwJprf>yM(L^ULt1d~#x`a;JSY30tj4?FRNrS5k z;YuD7=%n@4jZIqISUPEkbuCG&YoU`CS=SmaXAG@$(md (mk1C;5cnb&oOD;Z}eowWJ7u5cAC zU3Ag_?8b$wX&FZ+t--E4X?NXp(k|@ACwsW@bkaiXdcrjf-$N(O#ct1VEzi3rowOah zy^;>M7oD^syS>A846rwyG%33Y;d)vo&`JBU+b7&W%RY3{*zERA%5GmeX?Aw|C7o_R zI%$A*`-f{uV}Cknjdllw>u5QEPMW6Ofk~G;kWLz@-9h1c1~`aLTCCl~WSpBwCvDg6 z;BW&2984z-+3t{VBQ1x}NvpOyG~7hXp>)#3?IwjA$$S!>w0FD1!cDXsMkkHm?(lFk zEr-)dOSqdHZe~1_>7-fQ9g%dqBj}`o+#Q*WcSq7mQ@J}T+`<@+qLX%WcXYUgF&s@N zjp*)}a4W+cLnkfj?$~fE!yHQ|&Fk*Cq{kgcCk^ecH{8ZUdg-Lq-5nop;~~e>NfW#~ zA>2;O33SpP?@kPN&~hT3G|sz|!tIRbBsyuScPEECXgQfqn(f^w;Z7cP3Z1m!yHmqm zw46#O4f^i1a3_yCjZRwk-Ra?OhB=*1n)=-t$)4^EI%)KGXC`~OGwG!H-<_50?arc; zjsSOdGQpiqCtU*WoNyQ8KZj2G2i&>gZd%Tzlg _NG_+7jtX~0vY)$xPP#1ImC63@N;>Jha91S &UChEBRR+_lL>cP*WCa=7cl13cGtbkgJDu1^kj*V9Sghr1y; z#N9wAy&&$! s zqyxp>mK^48qm!-_cYAWUyPZxtRoornVMcfdo%FD{JHsQi+({?hE$*&xKjXZMPWoQl z-QiJ&xtmTpV%)#N0}S&oI_Z^h_k_n7<{mofqH*_z$7#8jPWo%yeaU2ZAD#5vxckF{ zjO2bg>BeyngeQ2&19Z}-;~oqTG0cN>(!t{%N{(<3(Mea2dpJ4LJxnK^KJJn5Bx87l zPI`dcqv0u99;K7+Aoo~!m~lQvCw)Wi@$fXmJWeMaMed343@uO4Nw1N6GC9gUNhkeB z?y2Nx_Y|GE}Nse{T&`Ix-dp116Gd@cvT}|$}@GRqhj!ycW-1Ff% zTArtqPAK<6a-4gCPP(Jqi%GA0kxn|M+)Lq6#`zMR^isK(ljGgXbkbktUP(@Huh2=) zm3uWg(Y;D1eOT_b vYnu<=zO-lgt}*(#hrC3@^~~CY|(nxwn#2 z+*@?g_vPLWFEYT}bkY-U*M9;X8EFE9Tx!PId3nN&lF8FFDP `zSol$UmZ!PBr&&a+dp;PP*6JC&}6F6FTW=bDxGM z82(c_>2-6Tg_lV9Gdk&lbDxKoY5AN^`s3Ue;Yl9#1)X%xxi6D*+?RCHP3OJ}Pcgt( zbkb+%z7DT2lCSBc1J8XEUZv$5I_b@G--f4o)VFlfwdcM|&UN3>NhhECK0Lz!-_uEt zpZg&>&;39reShx9@GJxTNGBbE?x*k^EkDsoub}%mJWtEdbkarWehIIU$uD%$U+8`f zuha4?opc_$-@*$#>Nh&+Np$~C&UgQ&lRicFdw7uney5WTMn8=SFTn&~MS2{)G06o0 z73qKU)`T~3I`}HmA?b4_xe%Zt-IIP=lUxK)k Ss5} V=Jp^c4F=O!$b_MU0Ac9s5O1_?Xs3jf(Uo`^8N7gx1B3N?_-* z&ztZmt$Cv&z0H1rNv;8?NZ+$x9Qlj17B?!=8SR%a$+Z9#>6-RSn(!H8T+*mWU$tM# zB-a5{r03c%ZIbH&D$ zZ`NFt;-n| z=>_-8o8%^diu8&56-;t7Kt+1U{UDRv0#K3ua=)TUZUv}F@3~(Ixs+#E$*4$ox?kBO zw*ge7bKS3E!skqaRg8-Cw)<60ayvjp`riF&$dZh4HKQV(@qTq=Nm^GoD$+ae*D&D= zM!JSkk?wlGCNe6+u4z=H|K6{Kj7sZTMnyXG{n{qE1E3<^`+gl0zGS597!~R7_v<3F z@$hwxiVOhogH3WLKt+ZF`1MS37eGY@2l(|(ayLLlh6?x%O!6;)iVPg^LriiHKt+ZT z_zg|?ic~f ifX02LW!;D?#yK7fjhIq<_x_?pKKH!3m+!Ec1p!OPgls05Bm z@Ee=(4a071RAiWf-^3*M15{+tg5T7HZy9h?qavdi{AMUzjC3=jBEuT|2$MVjP?13n zesh#J2Hf1J$fyU8w(9Q~sWU1v48m`LQpm7d7!?^8;l1fvCV3E^ij0%+BTe!UKt)DP z_)#W#7@!h3hQe=Yl1Bh4GNQt7Ws*k$Dl)#pZ;hhL({624WWa?VZIZ_TDl+`SZ-WfY zfZG@q8IR$&MUJF(TcaWaH2iiZe9tS~&Zx+U4Zl4y8pCdHRAdN;-@$|*7
yAc626_0MO!7EDMTUI%osnf2>CQ$)#(?-;O!5RkMMi}9T}}9jG45(qWQd60 z%_L6(RAj)2A7hfI04g$k#P4pBrvWN5n8X)M@(e&lhL-p`lROJhk%1<@9+{Ht>Wzww zJn;=Cc@Cf=<4}CjB+mm>WK@c8G~s6wZZs+~OvN{u *twu$L#`rdq zya-T{fik{il9vD~GHk}ToA7TQ+ip~39F5-txrOK1!>Gu>8sA~U?+n{vRAi)$FPkt8 z! pBIAYpz9xAUpdzD({C*~R4WJ@piTwV^JUn)PqauTg`~fC;9iSpZ zjr@VgJPdfCQIWAn{vc!sS`RWRG8oBEG|3wP6&af34>qAc10HNtWUP`u#3XM5RAl6m zKhz{|0aRohlb>Y5^gMQwQIUa7{xB0}p!G1LA|svr;U;+-pd#a*{A82715lAsQ2q!L zX5_I)7!?^7<&QMUy8sm#B;}7XVI~GV%BaYwDSxyHGt+vsQITO({umQxq4gM}BIBz3 zu_k#BpdzEJ{Bb6EAD|**u6(Zvv+~$pqauT_{P8BtM(goLMMh=$6HJ($))S114Ab%_ zn&bn3iVWKFCz<3!fJ)#HE`PE~J_4x7fG&TE33D*IQ;dp?@bagk^wN5&QIR2E{xp+( z3{a5)VE%Ly=48Orjf#v2^Jkba7p-R)6&WJt&op6fTF*2pGG@%5Ws*+-Dl&r1pKZcC z40yItks)RN9MlT5o?}#GjF~^zgn4N_*QmGk=~*J_V@A5Hx?j3G*@F`9?*?r1=X> zn4i`QjEW3W^B0=rGk}T=S@Rc}umA&IWK;sju=$Hk@;N|7Mzr}$OjwWsFEJ`I#LZu7 z!a}rOYE)#*o4*W|7p<2W6&VEQFE_~-02LV$=dUnfVFtXysK^*Oe +!Klb6J%6JKc}9ApQITPL{w5O!(0Y?m2^`1gZ${P07;ZKy zGO*9zV#4AKdy7$#k$(PGlY9+Ok#T?iHj{h `8F1+D zHOY?v6&Zf$?=#6y02LXG=
6&bGRAH>sw)(4G>j9>H* znJ|zsJY-a4K%;-ygk@-b*r><|NB@Wk%hLLYQIR2!{!tT_qxDgvB4Z%^V tjYm z21WYE@oXZ8$Bl}NlJrlQ;7f6}PPAWHv~34>^T%BaYwO8>M8E7JP3 zQITPm{uz_}0#K1bm;PCk{0dN!A(;L-6ISA}&lwdNlj)x~$!`D^8KLQ4Fv-6GDl%Tv zzi5)*0V* }#S@FxSB;8{ z0QIk-4D zhVJMv?lrP!1Wx zTSi5OmHM|$SdC%dHYzgC)W3rg$FT1h6&ZNy-$h=d^ ~BUz zh79|En=qJR|7}!c46*+muLTVIyHSxr#eNzaX63a_V^w67u{So%Mys(ZGVIt}8`fjI z)~d)jWS_HPeOhx?MFuAOX>FLBXPefl$Vg@1&xY9 p1t0IG&{q#0$z_U$nRb;fYpTUN?7 sX6wV&OF`DvZq zs>rBoKZgw)@@#Wh6&Z%@=d@t~hMm)@$hd4jmkkTjI+s &VTPU8s>s-GKOe4w=`f#Fk-^@6eq05u^IH`e{p}a9VHo3Gz^ce_ zaKE4pi!j~=t%{5f_Y2uDoM9KTDl%Z)FKol247;#ZkrCv65gRsQ*hQ?03@P`EBF)HQ zQL7?j%>80EEXEiXvnn#^+~;k`)0(#`G78-fKuR)(0aitZrTfKg*qCQq+^Wbpb-#oS z0~o^+Rz(J``z3AIgkhJoDl(GYFNJ%-c$cy&GPK< ij0Q$%OWLdUDm3|@OZzR4NEYF<*bT~m-ovfB^h>kt0DvF{R&7OT34_t zGNRrOvSCwR#UQI9L+t&ENHd0A(W=Opd%uzmn=$N4Rz(Kk`;~22k{njHDl#hHuVTYe zw60=RWSG8R)rO^MUDc|{xP8Bx4FhRi&8o;ie!sd6BY3vet%{87_iNa&Ijw706&dR9 z*R)|7#;~SUk+J`NEgP1lbuFtRlL7qNHY`W$+Ezto2l#btaEx~yt0L0{{JJ(Q>!S z6`4Qa2ivd(!w$A8GNHh)XM?A8J*y%!4E*{wtiTx7w< mD!Kg5PX z3_HZC$fN|np$#J$?}k=IW-0igHjJWms8x|^3x1dlD>8;*Rz>D9_~ABe$*{w%icD tLBznKjyk;7(I zMP^I*5y+_wJHo2S^a;PY4J$M3=2k`KQ+N#fU6Ns)Rgno6ehVA6A%`ujip;q19{G%6 zy;YGZ7=EM;t1#Y?Rz>Dy_)#{jO6w@AB9k=ymNsn5c(=4FGHb(cWy5L=yOmXuX&ioQ z8@6NEt*wg8>+qwItI1)sRgsAvejDU!TDP$(GV{Z4i=0a9wpK-^g81!h*q-rjXH{fw zh~M6Z)yZLdt0I#{{0=s(LF*1yMP`rq9c@^X)*Y>iOegU>*{~L^J6RQ(U*dPRVQpG> zwkk5=#P4Fm4&<#d4ReDMt^$K=ppRb(cN zFQUZKTC^%MHO4pEunXgDv??-J#y6pCGHjDok;yYY!8;7kmRJ>;P2-zUHW{|rs>t*j zA5h+C4OT_w+xW3I?8>u^wJI_J$G6}ui1D^q6`7IaTW#2lVOy<=OwsXeC_{|5&8o Fh_%cchV<=k{ znF!=NZ748or&W=eLB7j|I$FD|icA&q
q}!zaQS17 nrM_e+=F=81@*eBGbV9v3Mt-^;oMS^TPabD6u@-aaKhpiuqo=DKKoWRgsxv z{&*Y4@@&Uj6`4xrPq3kd))TCX%q{aL+R#etiB?4>oB5OQroeblvMMtB%%5yS8^fM# zRb)DvKLur;%ucag%K*5|8EXDi8%hj)s#TFGYyLF6S1{(&tcuKG^QYU;&akIj6`9oL z&%oOT!=7PPWR{yh6YmPNo@rHN+M7QM?+Ub@WmRMzoIe|H1+<=RRb*nEKL_;&8J}ZS zWTu=y7w-xTd#+WHsdN53lzN6eK5=I)6UiAQ<+1t0I%@`~`S}p!EW)BD3xMg(!!N z;X nn^e+{0pv|eLXWagm1)`kvV@wHY(rV{$=@H}PM>#T~*E%evhP-fWc zt%^)G^f%bhN$U+(MP?uR8}aOA3^!U8nU3ghvZ0G%Z?Y;fKhfWeXD`FvY*l2!qQAw4 zaSVHlRgoEt{#F~hX}#5|$dpEZ8=kU^;Wn!xa~%EcHjHQ3+pUUBdh~bL&_nATRz+q( z`a4m_FeUG_Dl#q7-(|y|411SVk$IB-Zqz0Wd$(1QiIe_cc=nRRzpRSPr1baLuoq*v z$EwKGN`J2nd((QaRgt-t{ysdB8N+>6MJ8YR`)!!Ou=iUPnT_cmKrKZM4_FnMp6MUN zbDA+cXjNpsrhf>}URocrDl&o7Ka8g=tq)rjnbGMVK|RNKAF(Pj#nV5EXD`D(YE@*; zr+*Cf9K$|lRbVf82(B$oFxpBC|sM6L`uph9|6wOcV7_;(1EzlU7CMjrylh&oSPo ztcpw|^-rUYqV;L3A~Q? paw< R-k4lrg+&Rb&pVe+^GKT3@p&GAY)-j;9u_uUi$FCF|e7(}mVI ztcpyV^>3p7<=Nh}Dl(7Ozh%RLWcHR-k%_hbZ5s}v^=+#nGj07lsH+*nJ61)e-uib@ zE7SU}Rgt;4{yjX)$l*P!B9n9d`*@bo`o2|>*}DD%)YXjP1FIs_cm0PpOeBX7t%}U& z^&jC0#~41cDl);>e{93S4EwQFkr}`K6B`bp^%JWiQ-J-acn0unpIQ}}6YM|3vykzA zW>sX8u>ahKLm9*8Rz+qF`!8&mMC%t;MWzw^FKsxC)-SD!%q#X^*>E_mUs)BIXzahX zVKS{>TNRmk?7zV?mK?sZDl!$>e~af3t>0P|nVamt!&8J;@tswX$;$qF8;)SS-&+-# zz3hKLz0MeZuqra0+5d z`&n~gKU!zasmQEyKU*&BPwQ+s6`5x4XU~P>$zk@Kip)FrbL0XS+lH?q6Vd&gxxf{# z;j75ZbU#-voWL07%Bjdybw775oJi~3ITe|^?&ryclW3hMry`Tt{k*ww0GZ93Q<2&2 ze!g5dkk %lMdrWz1#;nJ#=AgHMJB}i1#@8{!!DRpks0!Sp zviS{Kf#$Q*jVNG_bhco)g3$fSC|XfANIRQM_~%ib@R3tX}kzKTq{ z_xW5nl`-UVDl!k>56FdG8FoNUMJDF^#dG0c@?AWqA~W^<61i{)txM!oWa_?OG8ed( zBzzT_%kP)Uh0}PprE)4V3*Ik{GK5L;@KwSk*ph_<183R)v5uhp>Y6-5p{>-`(^~2( z_fDGJZ%k4sC%q%P>f}GcO`g7si!inn8+s?_nj6Z!;UGj24gqi>!!QXy;!1`&Y#)j3 z$+mgz>eUO^`_t76=Vwm@|JcjGKlUr|kLwxAf{e3tVy%HOjm1J|R|lr_@7gODQouTl zou#qGwsP;t$uo_?bbqcFS-?7w*lcU+D721|wIzEw#s6R|5-_H{R36h=Xkz#U#|$rZ zw0D)qjOi*D8^-*x{A8)4H(6BHJ4goX+FP#UNqE_R?SgaLuCnSMR~&9bB4EKrOt7BT zO)pC|9=#DRtOTuxc0pUAMQ9te6Pkyv0*!xvCH$%}F#Nv~ezmIbOytS4jA?Hl(@?7K zYQ;*MOdhjC@8sFb_03q@vfPd(Jc}#Vm+QHxXSse1*5&MI9v>IuTm}nBl#>Eht8~m| zNayKW3*+0dibQ9xTXpiZ4Ta9af5|KUh-s%}md2{g5|i$aJgRG54ojAd Xc~4pIBcy1n1 vig)97)srd2u=*MtzJNmWp)P{@uWBBODaB+X!j`uy 19sL+z+>U;<$Lovf9PQDM_P%(>_+mWqxW4=tzOViNS9@*zk$ - UX!_*f6b{V_ks{ZsR6
x? z%O3YfKZc9^qaXK2zb|{-U+c$sqdi}#@8a`6)_=9})_z~a (}m&+tIHL-`93u;n%M4jo(c}Yxu|e8`CTDkLSr(!pHQA_c`wWr~P;xkymZ} zF<-{~9(mXDti4Y$T=ZkS@qB%4M|)p>?eTqu>&qVb{IBuE<6?UBb)HJg(OMSGW7R zKQZ3u_Z45f?tCSG)#kgtj;pm#?L2>Xe+=IjpUAtGN8FCb#c(md#{JQc=ZV|VkH^>U zkLkT)CB0(1Lp&}kKk|xxJa6rGw8wne*ZvqT?vK|W?f 4 ;L{|F8P-y#Lhws4Xus{;Bba;i6v~KHC2&p0)A+-R-P-#OsedYqz8Q zpZ4Q**523J^VIUG-Hze=vd8^>`Ty&2wed~uI%>n$ZrAdN=@Y}%?vM89*M^^(J?@`c zyfIw#rxrf$kM%~}u06glzA;?%YmblizWl!$zV`faJNmI6jQzls@74Wczh=eXZ_7%( zTFWQ$h<@DP*LHp?@x e(w zzZ*{sAMZ=tj_DrH7q@Ho$KztSxIb?9<<}k;!%gk@xIg;wxT*P(e{HyY m*&j2lyKL6tOfBVhwf40A3o)SlGoH6d| jNbT=g;h9W}-u!^G_vzIvO#qjEog z$8go#{9SFw=6_sA_5K(Seg4Jc<94;rebw847Cy$!a8aYJ`uO-e?u+q8d+l~S7wxsj zL|gRZ{_105eDtf8Vfa^jY>XrFp&x(8<7>lI#}nhD|7Z5 6CsyE=T_ zj(#<-XrmvGkLQUtZpUM)e{+BQi~FM=!*M&t7x&TsGkf(hj5mh+v#@a=!^PvGPaFT@ zdHFkrk72mYKW_6c+T(V#MZfxZhKX9epTGH69ajt&{p$UZ1AXqV{)^l6 M(JeHpUs_iNCAER{xIs=~MYv9aoG;_oU;EVdJs2aq-v~ zSB$$l43CfY>ho0pu098U^RGJI7`8fI+Tved`x!nS6T`=_^!u_^^W{0Jw_}{NSI1Es zrusZ_U$r0iSI5KskyErsTlAwn`Z3NJU-dR^F}}FJ+K+KmhpD#3u+hf2BaiCyL|b+E z7`Ap_JQw5SUpyw-<91*Bs_oUktIreTsP(JEb6-^2`B%LikENY)^Do+>Uww_$`{Qqh z<6q=f8xQxzxc=-nZSfq{`~S=q UbF@hO6}%j(^o*; 60#?FS$4NWG#BkNe@prUGKkkqF z;x^-nzhhYXe-^IRUcJqD;&yd>eZ|A@+{eFo9DV-PZpUyj-s HzvFi8IT=6Wst!}V9e>m3U-j{| z+qGfhe)@4=jE^?{aXZ?gAMKGd?fi@9{%^mzuR6|nOpK%Y*y{5!Ty5BBtM++3|Ek0C zH~*^rc)sdmtM~JFb(na3we7$CuH9D~ANR*|$FT7nwSL@R9X=i(eeSFNi+0-hJ8swh z=Keq97Q;(})O2W&YVYj$Z Aq3b}`gK~o2Fz80mjiH-BH-&Bn-5k0F)I+y~ZUx;2x-E1E=#J2xpu0eK zh3*F39a?}kKpUY6bS$(5%K4R?Z`lsr1KI&CLpj&73px(k4IK~N6S^04Z|DT*KG6N4 z2S5*m9t52TJs5fj^ib#|=;6>KphrQEfgTGz4%!Pn9(p45B UJtzidL#5E=q=D&p|?ZtfZhqc3wk&7 z9_YQ$`=IwjAAmjxeHi)(^ik+z(8r-qK%ay@1AP|y9Q1kU3(%LKFGF8}z6O0A`Udn( z=v&aYq3=N7g}x8{0Qw>HBj~5l&!C?}zl44T{TliW^jqk6(C?u?K!1e(1pO8IJJcHF zUub_Qm)_-qxLhKZ3%7EaRxZlQ#a6j6Dwjd!qNki#%t^(ZP|RgXx!fq12IYdCdFTM> z;?O0aOG1~1a`8qk)yO3nxric{HssQRTr!Xg`Eh|hE|ACN@VNLLm%3XA%EjWigd3Mz z<05DqLWe MSFIHaycC? za>GStxJ(Qedf6RX4{d;QX%jA4(gfvVB3wFz3x#l55H8EXML4*O1{ap#A`o2iflDrM zfdww7&;#XC30&5IOAv5rf&HKdKo5i-1my(vNzlWfheIbrkANNtJsNrp^jK&w^mynA z&=a92K~ILB0zDmi2J|fG+0b*K=R(hiUI@JidNK4e=;hF>pjSh$fnE!}9(p76Cg{!3 zTcEc>Z-d?my$gCb^j_$F& _2>LPfGwA2gFQ8vRzlMGT{TBKi^n2)!(4V2dLVt%^i#izE4>}#RKXeA@ zjL?~&Gec*A&I+9kIy-a@=$z2Gpz}cIh0YIM0J lncvoVK*+# zHWtd|(b}L~wv3B&aj_{bBE@B(xRBGHP%g2=1(mo^5*Huhl0f@Gxv&oxwV4RzqArI+ zxd;mvOgR$Dg-E!#2bbsIVjNrygUeZP@d_>}!NnW6q{8XYv!G`~&w-u`Jr8;T^g`$* z(957#La&Bi1HBe{9rQ-%P0*X6w?J=$-T}QEdN1?==!4LQppQTwg+2j&68aSMS?Kf7 z7oaagUxB^`eI5D+^lj)n(08HlLEndd0R0g95%go|C(uu!pFux|egXXw`W5sW=(o@x zpg%!>hW-Nm75W?W-%$QL2mb2?{xbnC=Fdg!xhOlARp-L!T&|o;i*s>sF8a;Iyt%|S z7jfp2&0I2>iym` o^ret9$_+09U3mb8n9WD^V#ay@)3Ku@%vLRd~gv)$z`3^3?F$TIjv;eJx) ?}Xk3{TK9J=zY)!pbtVHf<6p= z1o{~Cap)7!C!tS4pN2jMeG&Q!^i}9<&^Mv)K;MPF5B&i8A@mdIXV5R8UqZivegpj$ z`W^Ip=nv2zp+7-?f&L2p9m &}>x*~KX=*rMlp{qexhpqu# z6S@|3ZRk4Cb)oA+H-HX-4ux(6-2}QRbTjA(sDpawDCpMEZJ|3rcZTi)9Rn>u>!A(M zBD4vbKm)V|T7vEY?SPh{ozQX6Zs>Su4|GrH-p~oqeW3e7_k->aJpg(j^dRU&=%LWV zp_8FUK>112RX4d`Yq7KN-`7~-A}*C>Wkyx66msmmvdBtRC;JdCwX$pPGCN#58we-G ze1auyiuui(Tl3{YPdN`uM^|fpaK6yikT1w~xg9IX$c|zWYuw}u`IhEREc+rs>I+>> zNoPK3ZY>vE8uQ)Fok_mbhTw91Q=z%7+?nTjx(h8W`Jo-fd{3z>pLBI}4$0SdG$XnZ z`K@t6p10VJWo*RK+J&Q lrPS3S(RFmSwN(zTD<;JjJz0IBy%WinZ|UK_#x9%%WSfw#UF{`}q_L$`>c|h( zge@0Zi-^74S!nAdiPjR%gA=qAI$HJGd0wV<<+_@2!x(iv4~!fdz#UOEca)i^Ak&`5 z-eJYg?jlmEtDNsf*g`WF1j4;$wm>p=BZZ;^DR>jB#ACqbHBc!<8dh6D9%g3J)mu z;Pl f*Y2Cky$8<}%hY z!tqm5Mso9j{7{@8`K%+~&V*_NJ)}svxqj?`{0L3L)*_Ot8Byc9m?hdu`DUChFEJwp z8cI{rL6Wa>Q`!(+p$&IhV(i4}nEQE=nz=NxrjlMXBJ4~CF|)_pU#{ E0&8rnw^ku5g$)AuDJ}Npo}b8xdEdR#39EZ(Y5ePa$}7o zWOCRVN<;G7OF>5jIAeFItF58f0Au_yG~d|V(9lvGgyL5}b|CUqTf+d wk zHJ8+R$ab*Q6 $m0r$VTy&Xx=)h@TaQXk>m<(6U* zgm{6)@whBWrgFZC r_MrWXQ_lhAX3JG9fg*BdkcyyQWO;dB5dgb zC)`q0JD^rcyJ4tTd-B6j8RPcw(hF_%xL{TtQopp}YzROW^)09%@Vhv^Sl`7bN30)l z^Fc%(Vz>+((jnJUMuBZ ;j@boI=Td2G9(ROyw^Ezp+9Yrt_BBXm z!9FQ91)QB3r_hMn9SPW&moP(+`Eg58Y0^3(zdbWFBE+4f0Y~$oq*QrkX?D`|u2gLx zfKbQ)W92Tk;4bocjth%b2yQ2G#?VUsL0#E0<@9oAIty694rKxL5K93rrcw!4B4B#S zV}+6OqLBewoB3Qu?vOIZ61WK-X+ou=SYK*tYu*!~7+I`|_`-t9psS6C7RDC%48jXX zciUjSUY-Rn1z<0QP#-lcVmK+Hshn4;%yEc%7>ahetD<1{OTFatG>B1vO!R<*+Fg zx;#@^Rmkg8eTO{sr4B^-7>3d^HosA+X$UJVqypl@gKCNy1YoSK{fgu3i|we<`HYmi z#B70*Avu5#4yg)u KoqP))MX!YenQg-W)vD5t-J% zS``c$gd`|*B2iF{vW}E|kDypguh`Mi)z0GYdCn2YCrFi!B1#r(@~WFXg2!`P4weF6 z*HvF%Xe*+SVH437>i6iv+ZSG@>QSxoZZSU4CSANoqHy!M$Vke_pF9ecN=GMZE3Gvo z*(<3bRd^3;avqJF$3j22>OB)j^J(8*Y8%*@AIsE{)9~>iB^Ga oIFIIW3>HC@Z{X)-Xe`qgnHL zle`S!5Tp`rqg3K}@ZeNT2R=(tkoj|%Jm`j(P(E0FwUQ0?78{Xfc*aR3#aBySrKU;; z@*m!ik)$OSvFaC2mQ2Y-cv jU~X*XLyF{U%N#NZpG8di z`cfNKhb-c11`T4G#Jt8E&FkdhU?T5^QqiX>%x 2%cz5ATi9B}nyQ``WlW!lUTuZT0GhB(4`;^b%1aI1v z(#Uiv7Ui=GMHESbGRMnAm5fi)^ph8tJ`lN*i6imJS2Ob|lMU466%R-Epwa;4N^14) z;O0gv1a4;w-n$#}C>pp^+$p6?A1A~4{kS8GYvn12%puPg$r68j=1MBFc92gLq>seW zgoq`V;&ljhJf03sT}Yrp __0Q{&gb|SA7%lJ;y7xgkKd3>$o1xh~gHAnMp zR#UHmrJ)-KmYDR&%s4S4>?j~4>-$E0Jp6Gex8*5-muGy6>UTa0Bi8+uY999sq_Kf- zDt#&9SJ#xMY>BngluOctM2W#sRrS4GPvzsJ@@|f%2l KVvp0%SL-BIIoctxdQ-G^e1>km{{XN`6aM9ZoD&TvJKPgS_E^ zBtLn0xO_nHA D ;&Sf$~@%f$koN4Pg=y(x@qX8vFbGx_xRvDh3UuY@B8qP{~KjU)9k zPLEJ+{3c??XZCF3i@D}5UIWS-;_ATtK+@udw-r(67dt9%B=RQEfe+yPz#`)1OBRZ5 zD~`Y$cI8FBP4-DX#P>C-RBi3jHwR=YoJ4Yh &Y3 zp31Wv>B9ye(!t{yO)iq= N_(dq zrMZQH5H0HAR^&l_p_}sTZox?^&va? zLh>p-Xizu9u}Kt_ z1ztV};AKgx#e5N`Ys05-<;h*{F4XCj@CaTv0=74|gBZ7Qjd;;&Ei~a>7|%6C$g4(6 zXEJCIe 3WrAea<`mYI`l_h8aWi}c z^2vb85BCoFZFFH=p{=cex2j5E<5d*~HOLpU)C?%{k{hJnLhX$_Ah{E-(flmuZ~f9j zb%uh{)g}#Sl11V}q$+>lN^xS;!If|^D#?UX@^q#4MKBciRPL90g%^jai)ClfAl^MR zOyHuJlB5)$EliB6Q&$=~h9D)iys)l7a^nBWtj_UK(4jBM{7^(Gp7I9F zw+2)rtWmVmjBkXjQdxRfl=U-&r3shCT8ZzOY%4~sf&=4wc%`;Qf=Jtu-q<|a%#bsu zRMluPD0Ga?k7&%xGgOkEIh7Ay5Nqh@YC>L+axGP=eDSf);+smPa>l3NI6RlS@dYtR zA1r9zZ2zOaAECLM{I+LRjjs%OhUp87)YrTU-pVH4W+~Dm_ ^wsqjYk&~ z6A!sYy#3&jQ~Ah=AL1x{`ijKNA&*E@*4n%*PhC`l)m @L1Fn2L;;wGa4;PVcbhxhgTD83u h*07*GleC1-=x3Yxr6`-m^tquR8 zgEvu9Ob?mTv%`~W_Ge+k9qB5g*nyIK*D(!Hp;q;`GQ50Vp=v;FqAz>60PS?qgUem* z?YIP_No;dKJbWiWdVryP305_>)!}N&^`&n4GM2g?-(XC1b}sSjlKk4x+%FFTv_JB$ zHlVJMkE;3(^l!+8kJ5B*lQ*)eX4`nvKtdYa@v?&s6nq$?`4(@$`c8{#o;#77>*Y;T zZW?Y2(g7#NrQlz$Oi4iYuF5InYmsylGc=fXHSyXj&+;;ACar$-TYSoUExy(&tvoF; zgGl+pnY3kwC6Kq13Bv3X+lxsuw(qjFjXgnHF%^*Mz!min-qG;Ngxkr^U`D`8)7Ske zT@iX=@^ 3}DV*n2GngRi052wC-F$z%8l z%JNf|?#d~-r;_E^BqJrK+*)~A;)8R_=K>0BC3cP&kRpK-OS2en3G+7F5_z6KI-aGg znWjco@Rer<9|(vI4+nIM;tddeh|;l+%hr3rjyHa+NFNeDfmkUaCHT65sE{L(Sf~)| zv^x|mq`pUY0Ke66BftkGy;B}yTIZswL%ScEc=^ENg?AQP+i?qc+oaSswy<<)roiQC zIn%6$FV>QL>GS@|cZeK;?@D?5mb)lVJMb4GxHR_hv!pVg@qrUxjd(sSWX#WK*<&E` zK{wfy0S >YsM!LKJz#jVI2C3*{C6vJeji-SK1udV9O4I3QN56 z;4?O+f~Ij@u?bzh;L=!<7GkCfGwW!+tm9P3;b?#&AG8tc<4BsV A3XR>#KkqDVGSQ%s85+e7)7OZlXp|v<#};Pe?}|~n@lnEQc44d zjub(B_^Pc+ZD}PzCZ5vNhTMv`5qz+*l%gi@-Qn&zF-QoRhp+g&J~nP?KZ1PyR!U>6 zfkyw)DJY{Z5I4WP5h))D^6rCve#XOI6(kK4{{QuLHoI+BK^UfR6D-ZDtFYn*T0lzF zN-PqoVujqKNvtNZmDo*v2}mrtNG^ltd1ubC3sR8~Y5aZXXMW##XIzMDtL+bq3t *g)%g5b^y96FOhJ3>PlgYSwO!qzMnb-t{M$x#%z@L#VvP_Uj zaL_C^QbE4UOcN15w!3~04U$x5`HF85SmP&C2flM;R=&SoGYA2nQj6BiQV|5YrK2=O z2F~_bjI{ZVtEFAmh)o1?!NKP7NjW>rI9&)miz^JKs4PQtk*Snx`#YWmM-6luOp!D* zhHhwS{)d3Y%aOvMLj-{P#al@tKAKl0DzWKE?1`6Fqe$S>igI_bPcKigT_g?Z4UFUr zZAEFtFJ4-CSR++$E%qB)lM{L1u2U*h#)LV-a QpLtr*TK34qD$1M|AzG3?{IuUDbDKScm(oOwZjQKHI{ZZn)AnM zPpBy_*A(tY#kKK+i3snHqiaRZr`&r0hQUIgsrytEW2bZ|3iHn9J%Uo}_R_O_dZH<3 z*e{wc95x#;M8o8bCv5vM_QgPo={qD_nMMZ7l$G8+NJFn(0^kGwfcIEhY0pWyr#O^E zq*3(~i3c@cF7lm8>9f2GCZLdS5j4k+lyR?|5@Becr1X7gDn~esCZ=f2SK~2UPJq|y z!mb9JW%n;Xvxzv1$){A=3^<^01pIpE%njh%ea6qH1`pMgNLm6@xvvTC3F@Be@ayg% zK6Ar?sa%?K7Eld$`9!&Kvg*!mWhM_9>}v=TpLoTp;vrY&=@jb+QIAMk zl}AUuY0?wjmy{w;45dI}JbU#3HFlL&_ww?RnwI$_@A0t0^cj!y;vZ{ ^v&zoY3dy1(h7r<< z$A&o7QPAaUoMAX j+0v?di)>7ffwU>>|$z z%JQ&$WejHtV5Z(!;m-7cSSP$xjW@Gg(LuM>(n$Cspww(kJ3|fr&e`YVr0$T42Eda< z`5pq6<)K#$g`f!t;7xR51mp71xIsKqKx9cL^3qvJWJoX1RhJuq{%4r1R7I4!yGI&c zil8?=njSG%7R7f-uaMnPTA>~*GyUBtJ8A-*`>tr?I!HtA&B`Vckt9ZEEU}m~N6mHv z>v*r67r=wMC%dPl!gVnNjuo^MxbqWpV2J)uXJ3V^V{H}d1B@acB2-b=@u2wTHEBj@ zr<8Ta?c%2h^L%y=&K7TfJ9jjp+>Pr|jQ~G=$-z(sc2Lo*s?InD#_uU88JWc8%9yZG zF&$C^k$^KT+V)`|hRIMMg>V_g)j W%XA@6 zPT-RfMpc@7Iu;1}pw6pZN;DQyJH%c;HqokKL5U$ sM&wySs`GJfmN}3O>W}sY+2Dv_Mv1qdD~mPjsvOsI9{Lsc8Mf; z7tJzaPS&d-*lQF-blSj}#FVufW*73E1J6>CNDMU&GDbk_b|a@&TyzQFIuc~;@QR)q z$xt%m3k$jh;sr?s>#+6AILwu>X9VjMp{oMcLKs$hGgw!ya6=lH3hQQ#ai1{*3Fi}9 z0V@Cq&?!e{4LfzWikTrIF#H q}m^_??4!82Y4{jUWWO|>F;4w)VXM %@D=3Ez^yZOt>CE|Pk6h$2dn`|6HR%gK@q_?80j^b^n|D;w}V3ul9d0FD^cpf z8G7}C2rfN30z(PSV?b)eyLxAPc7_R@kMK#(@M`;1njuR|b=e7xrzC4Ks;ccY6WSI+ zt6!qSBjd>w0`Uia029opAmOd!6KD1o5QqSAQ#=E$Y0EdiiE!1b>=Q~YQ!!5&15*{4 z^D$oxJIKnb;>eLbFZh^6$nHKppE-aEaE|57dqbWvt)2#n8wCUQ#SP|KNZ8Xc)rPW_ zn@~wVNb|D9;R#Ga($MC5k5W02?6Z65c7Rah^$s}0z0D+(t70qCm~bm|`u8Ty0Q zubGejc=b@hyZ=br476Wye|&F%UbtV)2*p|cq2YL3l ;C%okKe!k!i)LB_k16cfByeB_13rae*71WQD%++ literal 0 HcmV?d00001 diff --git a/orangecontrib/text/tests/test_vectorization_base.py b/orangecontrib/text/tests/test_vectorization_base.py index 60edbe10e..f289fc66e 100644 --- a/orangecontrib/text/tests/test_vectorization_base.py +++ b/orangecontrib/text/tests/test_vectorization_base.py @@ -1,10 +1,14 @@ +import os import unittest import numpy as np import scipy.sparse as sp from orangecontrib.text.corpus import Corpus -from orangecontrib.text.vectorization.base import BaseVectorizer +from orangecontrib.text.vectorization.base import ( + BaseVectorizer, + VectorizationComputeValue, +) class BaseVectorizationTest(unittest.TestCase): @@ -32,3 +36,33 @@ def test_variable_attributes(self): for a in c2.domain.attributes: self.assertIn('foo', a.attributes) + + +class TestVectorizationComputeValue(unittest.TestCase): + def test_unpickling_old_pickle(self): + """ + Before orange3-text version 1.12.0 variable was wrongly set to current + variable (variable that has this compute value attached) instead of + original variable which caused fails after latest changes in core + Orange. Since variable from VectorizationComputeValue is never used in + practice we do not set it anymore (it is always None for + VectorizationComputeValue). + Anyway it is still set in pickles create before 1.12.0. With this test + we test that old pickle with variables that have VectorizationComputeValue + are un-pickled correctly. + """ + path = os.path.join( + os.path.dirname(os.path.abspath(__file__)), "data", "old-bow-pickle.pkl" + ) + data = Corpus.from_file(path) + self.assertEqual(len(data), 3) + self.assertIsInstance(data.domain["!"].compute_value, VectorizationComputeValue) + self.assertIsInstance( + data.domain["aboard"].compute_value, VectorizationComputeValue + ) + self.assertIsNone(data.domain["!"].compute_value.variable) + self.assertIsNone(data.domain["aboard"].compute_value.variable) + + +if __name__ == "__main__": + unittest.main() diff --git a/orangecontrib/text/vectorization/base.py b/orangecontrib/text/vectorization/base.py index 76ba44037..d98c06671 100644 --- a/orangecontrib/text/vectorization/base.py +++ b/orangecontrib/text/vectorization/base.py @@ -76,3 +76,17 @@ def __init__(self, compute_shared, name): def compute(self, _, shared_data): ind = shared_data.feature_name_to_index[self.name] return shared_data.X[:, ind] + + def __setstate__(self, state): + """ + Before orange3-text version 1.12.0 variable was wrongly set to current + variable (variable that has this compute value attached) instead of + original variable which caused fails after latest changes in core + Orange. Since variable from VectorizationComputeValue is never used in + practice we do not set it anymore (it is always None for + VectorizationComputeValue). + Anyway it is still set in pickles create before 1.12.0 and this line + removes it when unpickling old pickles. + """ + state["variable"] = None + self.__dict__.update(state)