From 967cb5ff8186349637b2271e7c448abfad492275 Mon Sep 17 00:00:00 2001 From: Patrick Durand Date: Fri, 5 Feb 2021 08:17:27 +0100 Subject: [PATCH] add viewer for IPRscan predictions --- jar/pb-ui-5.4.2.jar | Bin 415276 -> 415498 bytes .../blastviewer/BlastSummaryViewerPanel.java | 27 ++++- .../ViewQueryIprScanPredictionsAction.java | 113 ++++++++++++++++++ .../blastviewer/resources/messages.properties | 7 ++ .../blastviewer/resources/view_features.png | Bin 0 -> 1392 bytes .../ViewQueryIprScanPredictionsDialog.java | 113 ++++++++++++++++++ .../plealog/blastviewer/version.properties | 4 +- 7 files changed, 259 insertions(+), 5 deletions(-) create mode 100644 src/bzh/plealog/blastviewer/actions/summary/ViewQueryIprScanPredictionsAction.java create mode 100644 src/bzh/plealog/blastviewer/resources/view_features.png create mode 100755 src/bzh/plealog/blastviewer/summary/ViewQueryIprScanPredictionsDialog.java diff --git a/jar/pb-ui-5.4.2.jar b/jar/pb-ui-5.4.2.jar index 5d3c383aa11fc460a35802c9006b28f2db8bd345..795679c86006b121d603fe8af3c6842b4396fd4c 100644 GIT binary patch delta 20665 zcmZX61y~g8`!*Z1bV*C2G)PEEHxg2U3W5^SC@CT6iXbg1jFf;PZ4ingh;&Mbbc2AP zlmUpK-|Wnu-~V{Nb1tvB_qm^b-+5mL3)aVin+HA4&*J zY6fU2|EYtJgcVu{q-#V`{wv7;#3TQonBanL1Vswc&7=NXP6px$m--Q)BPOB_9~E&Y z;9~$z5k6Mo|WM zBlgID>}E-kw#<@BftwewxYYAx6mWQ3j8JM483!>HdBVU|t&k~_5d>8N^k!%nTx0OT z!C;+D2m|Y~aW25eKb*@jvBIT`rXi$qcqLN85=BBXhXPS+SWd!-SK0AKp{U!45)0Tu`pP(dxC)bPNmea#L%w{ ziTd;EH3S3%?Eo<4eS@6^1_^1s2zBwEJKWByo~-joOpzQC0_*i~{8 zk`d-qDf%PelQG~Bcy1J6sv66~lf&N5m#QKC$$5MgNrtJCiV`k#HGfNO4=S`40}i-B zh4xPXTvhJ%RLH0XHy9()yP6)-!majx?~hQ+AGEk&iTF1jSdwb`qYD;rZj&P_!n>OY z;P|zP3?c17Fx(z6juf>`NUbJ<4CM^hUb9AxDuqY9CX*4>1eaKIkp&e_3F|HLp;qAb zfdi7LAF!xX3grt|Q==+}lBa`ZLAt1TDnb@Dq^D7*;Gi{UEl`E9EZrWp1#{o+QPyx~ zHD;Gk#u$3StfUwGAZZOXf*(Udat5SlLi5!0yP$Fq7v63tO2qArtEduq^3{l3Lz%+O zskwd~m4b!4IkaW=^b0iY=un`YHky;Lj8KDW%K!sdzYNfVZnsd|uwE~3>?Kb$3CS@W z=rfHvQj-*px`!kr8i_JPyy9a}02~R7x`X-!=Y2Z?MT(G#$*6t|?5gX}XWA^nOeX<1 z`B0qjA_exBpyA%~Uq(nf4Tpt#ZiD8&VhHep3Wl+`~2wIRK?Kg5s*#8$^93Ivhr2AmJj$Q8Nf~o<^NU zg4E5R_z=ChIg}%U^gg1F0&wkDR#1uX$i3J`xgw;;E-I1&Zb!!fbLJnYcN-|s>;W`f z|68(agfVDd#QiBO`ZGKXMM~soQrM>|9a;-<6>$h1iY#i`WV?+*Pzinjm^g-X76)?f z0K7HkOlWCX8;oK>|D-0&wMQ+~kxS5AyP7IV&jt4H0!%e;Sm)aVudNcz$T(?&nx(4wj+=)(w5!ld;9)Zb>9`p~S+sVD?HF#YH!={Pk z`5E*H#1foCb0Jy0{D?L|IzX|Cet@t~zx*?kCf3nsk@&Jd(Jly^`wRV;Sl^$2hSmUu zsX)U1Mq@+~e_~`9=+XtXyGDQp10d)a1LguUe-ha+QHU2dP7EvJS%w>viFg^{!Kfn3 z<_)sKGwsl5c#wnYG8jRyfgVR%W5|!0Kum;%F!hL=6;TXyr6+_dmB2(JZI_k7h$Ag_ zQo`Vn_Fd7&oJ7#8Q$K!^AthW7cufk;4ceJp&QVGzls6vRiFg`x}T!0>2}0m z5Z41P7&-)f^uQ<~CWp&-Zc#(IlA%E<8YtIOEI6tfJ8ujNlIt~J3=U~Scp!!WK^dVK z8wBl!VKkBaRc>QA5ewTW%mUI7tr!f5uv77vT11wafI*g8kURym2ABRb1%pD!gH+6K z1pQ9K$Rq9)?qPP&@EmtI`r+;hS1117N7n(4E zG;qeF{g@s^ujm7Ycz)T9U@jtg#*tEwPD33H!;z5K6Y>-WXJ;_%pc)^J4orH10l-r{ zILaECam**gG4~WE3PB|^m^?~2gwbcrTSP{?j!{LB=_bYiq& zKf*Y!nodS+J2Dcf%vb>=d>t#+1?i^%7nTvZeNYj>9;YLN!kU*pQjiC`-LPWdTS_b~ zcuovQ12!sRi{Ml|l(56dV!_oOpXCQVOR+J-iv=Mr7q}jY#nmLKVy`3fnNAP8inRB@ z082bYD~zy;NE++L*ja=fFvs3RF1Y<5uiXqZHO$Ef_aB_;1JJaOJA)-Im`T>yQp8rp z7K=y9YPf)nhh?C#J@zZy5vA#JQ)_x-)-Wn0K_gt}^@F29gVSm7tzj4PJAf}X;v6aYq{nj6Q9Fc7YV7rifnuD-w zI5-W_<#(y2kYiF5;hshSoRP=TgMZ|3Ea`I4m4xvowiu(Y# zm=}pXhi4z6|D7xD<`jIrr6R>Mn-Lw>QF&*+h1{-)JSOL6cus-BJw=uG&+B~TlFvHu zFW%z%o+l`NIV?SWT6|?H!Xai>(?rv7BmI7V`ZP;D?KRU+Jrik{M9n=HLO)f_obYm< z?#c4t4w_#NLHS2hmOZ1~SXxqTc3;7cAND3*F>i5S&zgFk3XV%XXvpodo(*t3=tB=ziwTjplZI*=*p@XxPm0 zOg*;dhw-0jO*1bN8-w$S=qTTUNo!9~bjZ6gY6sQm0^!dT8W%B5< z+uIbxdCr@6W0bOS!6^XC0n8>Iad#n%~LD0_I!dX&$#Z~b~_ z#M=iYJeZh!8NR%w0qwZ=G1`;HF3(+9LD)b-TBdD@oO?nHM9~gp|(b$F2Z;B zv)IQ)yYq97OrImK>y2eg{B9j1Q_nro-)`gJ$A30Q#$4sajZO0j4qowyfGr1%cy0Tq zcl__>@T_iL7wn}PUWizv)ZUjoa^#wU#8SSY!&B~@hz_anwEU&9%#ZtM<`+^oI;6rp zT*T^6L|-oDOrFqh5w9e3D2@CgQ`>OSB)&+d)y3>^aRUzcTzgyJ|%$#cTp^L|10(dFD?6S;?%F?-s>xof~OK z(~GKwEc~gb#|o-0u^Vl7SFrwEW;`)+quJni-H|r`u6P}}@fSDlJ-(otUyAbkkkWK$ z^ui%e+lw-)=?&dNzbKBE3LX;k8fS|;pRC^^*B&p$ynHQ2B~S06uJo(A>x%|q?1qMm z)pK?aom%moAI%`IvnIoxb5O- z2kq8|EpDc>3zG7BFY^UoxvlTn8U0}zmDIaoshseqIXMeVJx7#n-Z|AD0Z6@M%q2X3zW?&up33#nXmZ#y6VZ zHW4b_T(GvZ*b-8=V!6;h= zn`u85S=ClCSrUGr!SpR7^dT8Ve0E9u^L?3;BMcYvVsASntN$whCeHM5)R5PGn>?L@ z;TLxQ6MCfj*uG!pd_;!hzfmTg)w$wXz?@R@sX> zWQg?Ub0wC{+f>*vEysKlPR-89+Q+txk6W(Q&lgv}a(WKON_Ce9%DPa|1 zV;-Rqp=6D_Ql*2g#&%OSnze7o$G8Kh%W6VG{uHjEb4*lL@;49pG8iXxxlFVPoiDNN zy=}fI7fvQ~YBY)5oiCkhN~osfy$y#*&hwLnnUf#GPYw9A9n?Nb^u<1$GPoWgJ-MVW zdAsMb`TLjn>p|R7M@&AL$>~Zu*2>P;?iZTAnoOKKuT{U8Y+~D;-_Ue2Q?Fwq^I^#8 z>>E3qx=C^`&fjG!d>A6nZ9o@n>pYR2zH^V%C_#3sxR)>gOB{1fcS@{lcHcY8-jRg? z|Mw@d4QFG&+7+IC51jfYa#HH9@pc!*{oL)#PR~^iCNlAJouU4Gm;2=8DbkB63%Z=c zqe?wfR@(eU*6T*a3v+sgc(nOk4(Ygzy9ly%4nKC03{i5tmtJEyo!ODlh5z!(Gm?py zg{<@B3FVZeL^88;BBNhQbf!vl7pZ@2ck!jlJa3lUW_@vLhll+khg-_Z@{y}=$c_cA zBxIyt2<}@q#V>XB-ao8HGk8_V+#+6=Genrq%C>M`g_FsbE!A7$NxffNP;4_AKg{R< zisVR+{=@T3#`LnbcTVMGFUMBK3cV<+y(IOJ<(+kDihfMF>FS1m_E_f16| z-|Za@C)bD9?)ESXzvx{zj0`uuF=5cct^H?e43lwaa*BZ3da`!nX;S4e=IyYrI;>M7R8_2zB|)(|LfVY(~Z0#rSFS# zO%#gx9?I!g30Mq}6;o2u{t?-@DM-2D^YeN(>U1iJD8F5IO3F=ATlG66Dj!BZl1vod zpjFy!}qE^I4!AcGtTk#x~yP`+1M%j-`rb=P8`Q#rM zX6wWbD|*B(l@>~SHt$m%et!7z3*M8M;97xjK-*!?ls^n#U5z`izRDa|+22-ikA!)| zslP>q-m2;Pk#uM8Go!6Jjbru~oLah@(%7<_PnM|32c9pbnVP`qmoa@fD|PZTuG^1C zLX6V)0!@U7AWd`z4KzzQ?J#m`Z=SVb){>!mrQM(mCfuEDGf~~ zA6d)fMuT;MepN8*_bEc#^r47)`u^gY>sR5@kxGDm-*3l)nn!HrrWfm4xQ>d zJvtB0J0jFMneySs4wnyx_ReNhUzeh8&Xi90A!DT$My-Ya=1qCvDX}VGgF;;V_C$lv!X%NUizCOOKU#VF=>mFJtL3KzUqACD}Ov) zBeD7I(q!CA%JUqS!Mh7#aSwD?Bm0-CgD@91N=s5nu2*kM#x&IOha3J%Y!cnmH@qzK z`pePYT=fk)TD*x}+0ElGZFu6|7<-j1sf7Kekn~Z^4@ziiHtIOxr|7oD0ls~4*~sqv z+@Z9~Y@S|9G3r^%*!%p+mi_OULZwzoKV^4aQX)?_@xL}1;=yITT%oI5Rke1*P2qD4 zE>L@;>lP4?NiakF<_xoPZbJ{sDIR&c)-aCO~ ztr5+_t|JdCKO&Vc9%UsV30FeC*-s)n1bQjpnBfN&{PV+*@+tp1Xw{ z^qU&!e_Q!+G4rnGo69`<9w~B1#aqDFBOkjK*I&N=E+`ZmEwrnX2Viwd_}n#o-C}r( z88sN0_Va{dd2Y>LG;=LE{%iWRiSJ0^BQF2>*{wDgWFKr^USW-6{%w$tJPD z_qLUX1+S47n?!M3swWo|Wi@MbyP?e#Ut(%^gG%_N)@{DYPVUz)pJ&CX#Q!;V#kR3E z?dR^5P}-U&4$>Qo!@n5otQ&XABq^Jf2V{-+Nk&FQb~Ts`wiF9@d9Pf*7x$TM3&*5( zi+ge2k>ZBUZE3%06QNywCXr3u^`DF^@;*E7jMka)Ogrtb>4vcY$&D^snl%h|iZPc{PPZwTIKjJasB$;Gs~Wk@kyrg^0AY~n@d^*0Y@ z&sw^+VR|O6PhM}hb@6mQ6SrMv^CZKvLquG-2v-xSB}eO1r7d12?lv!>-Dn1G%Y4d) zl@>3bgUk5BU-xcBy}FSdx8c3R5WigzJJVW}y{mG6?w5$_9ktncVF2IpBk^TWTTGwy z7jff#sqllA7`4SteA^+l_Q$y_Z^L&fkKLDedvX4$MJNjYuGNb%)U0u)^ciKK^sM3J zHLJ#%#Rbvb5T++@&%Sz@qIPj%m^OkDm6)3u z_5Z!p(jdA^%XB60c{_f-;pGn;%b%rrwVwH`@|QKc-;M!^LO~y5yvn>8K067#X$)`A zMl*(qOddOHOm;=3wYA~ZE-j0fw+}xPUle83>5rv+CPI@3iaQFgIs|(o46=R9TJm(7 z8g(?n`nB`%BC#z;Eg9oFCw=Jy9Vi@)oRSVz%3qmMUu7A**Jfc}a_>njThrs{3=w4` z&G+qM?lEJ=Qc<5fjeR2dmP$8S&;N0JaM!0->}FAma*;w@$dc&1XVJM?#$^Q^wm_pL zVHRIA<1@k{=d${?T=-cmmHn7%n0-9xYm{xo&a@n2x{qfu{OOp%mtMAsj-+g%sHjvg zKeX&yVNE~uLEJstftoEt!Q?jBVy%jbmA-n(u0Q$%>37!; z(R@air))n@s50K6KHPXNPVMk!uHDjPcc9ku9> zkgvN>O+7QiC$`3)lpM3-kmb9f@@ybVCX*d|nR=7UOUNN;HT7FkPsPa&ZGme#0`)W!KY*YsfqRonBw7s5#tjcmSX=pN zKK{O9)-WoB%i-9c z7%oGyI0n6q?Q=odY)QR)RJl$#o%#u*nkvxCOm2@ky9h7LbYIA5@OABs7R+N{=d2*}Y3A^k*(uOithxN@%jNNB zC6610J6?Yq-VOgfYMs*HIp>^GqWbZOp;_0pPf&Z#Z`>){Qz zm#L{aF>f9@v00Wx9dPAx4YrF^>zYf%upV%H<~z00U3v6)MfvBZYKo??{NL6R?A)y% zGn^cIZl;$SCvH~9p3`F^0eO=E?Hht;6pq=L|M3Hs3=+5mIQ-N|>KG%gLWmv!D?e?n*e6M&sHo#>6 zliWX>PK`eKQ6&DnP>iW|nXpF6cx7de*+S6AjtYM2GakOQM-yWbHZBWB73NP?E;&zV z9s11M-mzbJ@34F`qeRLF{~J*aYC`X@`EFv`OSZz8L2=%vy?#UGY1)ECl2=SND%1I$ zZbY>CQdl34!*}XPIrvsDcZ|b zve871{l!dKRI{`oPaF-PB7EsE1}A8fe%NB_v+RR`pWVz7x-Ub~_x<-~pBBPw_jN-g-Mz61?wbO2kLF~u zpUl}P$HkdbyX4{7^Y=ass!{_>JlQJwmrS%sm&`4c(!M18ygVRD%XG@~t;i|Qf?MXl z%}>>7ReL;0zj zh4klzCyI-1^R2Y-&zp~9t6agb5LpZT=J}ithiX3!Mx6COjW5h6&mDb09=?3hPf@ry z(zr*@Rn7JxH$K*3yT*T%aVF@!smMSf0h zI&+2natY?}v6inDUHZ;xhmBhgox%n`)+`5{Y_(}=ck7jbM-O{HI;Uv8(6CTC`3FPB z`G<7J*-S!jG;|Md(BrQ=q^+$jOV4nfET>4Vb@%x3Dz$aw!=9`&XV<_t{V=AiB}6zzVb1tN z&$-9fl6*WKKc)*B-$|za@Y#Nt1ApOh%ubw#kYyK#fb15^2Y*N4$>MzYyyA;YS~G{z z7}~fpVZXsUCyUP}_77BaiC%vmxZ=Cl*W*5a%?IQ3G;=q4SBU>g$#;)m4=SS9?+j75 zI^^dGsJ0pJ`N;Jt`;`?Ibh3P{oHjDgrISx0{T`tip1FHeujkG#&8f+g6(>UtCJSP+ z#wNT5S}s(W(AT)*=jD7}3#f|M(ko{S3#s5;IjGtL1P|CqjTuW0pzVq)Q}=zLY?ZuYM7)2^w^Q4{ekU`yxJWOL(p!v~@vJ;p~S zRJ8>^%GB<-&v(y@X6}jvxSxyqQP8EUa+v+~rx*)sdQusmT>Q(63>O(_T^;U)>t$0{ zlaIKayE#5;H~nD8M^f#NOnrjm;hfbnS+S2Nd{4+eeX$+wLwc1u&O1dww?*R=$06F3 zRo#vc9r32I^~k*0snFA*hV(PTEsnQ(&n9}zE6tPZ zD3`=+#1_eHsYq*0;=7iv(w`sRso;-0;1E1J(lR(t8oQe>aO3Fx%6Z>a-q%+;xHo;C zU5j)HJ+sfMVUe2UnD(4wZd>4U!Q&+!F)#gmADM!ck#+> zO93nD8}AJ*45Y=i6fN6pbllbjYLcBLju`1{NovVAeK6W#C0m!8IygWz>stA~muDth zHrjk3ZaEq-ezF5(ol29bc9!;0VRqnJd}T6?8f|YKSLdl74vxx{9hw!z<+1@8Px7qSgBuGGai?p82gvDiFQmuFaZ5kH(fR#a z^Nbo@YM{UN>A1qHid`R{zb$9vbMC$Ts_5w5hrdpKxGgN%>36#8`CR0iwF1rp52_92Y@Y~>v1n#AU)d$Sn@K)Xaz`UghH`NzviiXE5?wxD_mKG#<;vF{ z!}OBWN>lSIj!ActsgC5T8aiv^E zmYy^%UC(vwq!ia_rG@-Ma+!Nr`M7zLZP5%%!E@0)m0y+91pT<3$HRxx8o7o|HqYeL zi>!9)w#RpR2JH{qub*(jTfJu$m>L~qot#UIxK+5|-C{U)LsWX#tX6>GZ9#`$Ww0%J z)Z_AD{)|swRjxPGD~%g2bFt^HT`y^?TX>;%T8@vQqQCB|{Mn2{@5Y?YCj>5BO#aPf zS9rnEYozDWE$1@|^GQ-!9D>aG$8;65j;}xG;is?gKDCy9*J+rhp>7m^o~f^L;F`Kj zRa8N9QDR98IrkZUhF77yr>yUFvGZ=MeYw=RAfObjT=_gQG&I^;YHKI#=-~zlU8ex= z{f{CH$6Ecqh27ef|Ay&09NRvQ74{%)Sn?We>#7V5>iKMc;Vs$rw{@GAEZeWx%pc@V zUj}4>_Ud;QX`Nby8R(oq3Vi$LpE>V-u>1%J@bWwwc6vOamOAJ2$`?gmT-E!dD-Q+# z82M-VbqS6}Qrli$inA=539(vUms}~j;;^c!x>$!2brMTRFtj%D)@zy{-nv}MbXZ<{ z?*|X>*WCDs@)rm9W4wO}0|%#rc9d6stR%mZURHg4tzf24qQ;Gs{abG>UVq2jbLJGA z&|=QDo}?Z9CAy{zr+42|xgz&I-n(tpUtTqm9~+e9rJTv>iCSq2WtDAU4GKF zWecOirjlja^-3!dy%p&BDjP-(dHYY!l6skG5I~Nt^ssS zqn=J2hs<*PY;JyVar?PrTF_T{d%?uaO={$emUo+G!0stMgOrehP;f(PL_~r7GGnn&slmWXq|G&EUl_Csqmn)tnkXh zu7|WJrT+BQoEF2^cPt#GJ#+`U$iJpbpU5?xSnPV$xe;QnEaJn~nE2BySb6qIuj#yr zg?VDXzH5e-0PV%+Qa`I_Qh7~ky}z)j99;b~S($q6jd4AVkb$6{^NNYh10%zb7c~-R z&n056Ri9dNI^jea;`)%HE3sM`5U6_oV!rY4UT1 zZ%&V`y@BG++Wu1LLRB8;Q(11Spfh~BLVI}7ySCgVFKabJfx(4;xAyiM7kp9ZjP8tI z%1jWhM__x&K{(CDywBhC<|`qgz>Zw{j(XbNsIVm~_2XpGI{jTP@9v+LW?mIzph%>r zBEOlKmZ*N=XSTg*mtNzT3i@Yro_W>H%yCIZ^QvNYJ-hdkjG!7x>j|HGoh$V#-+vn z*gMPdwKKZ2J@)tX>c1J?a`8D%^R3LX#{K;XB^t^}_lg5qx+uSUV*2K5NBNw3Hk<5) zihTCUKOHOD=u)ugOi&Ozj7yx*zih(69O!fEy_m4cvL|bLy27?5J+;JDCA@97(eID0 z9OrLZ^<#7sOcwPm87-6(l*C8c5J&f--)%w)7*&ZD%piMrS|F%Cf)OE zsGB3D&Ln+yUKrzfuI$_)PAQxZ;5gZ#%+^9bT42{|_Ob)d2;xL4 zx(+>w;4n1J>8t9CZPuM&V|D_9qp0T_TbVm#I#4upo_;5oE}_@tdJfsRH}+I?7#(}c ziX%mRm3SN&MO{k;o?oxIHQA?s{V9D!B`wE}WlR3x^A#S?Cjl=xqwKqc{I9+~7LfWa z;Oz2x6yMLOeNVsutcSKxsaGIB|GmExK7rbn=q(wdb1M z`L#@EO*r;GYF{`(U#3j+M()11dD;X$>BFw8J{<ckh=s*dBY|WNXqqNd zj(~ED$>7AM-s|2!g}$r?q%y3h7evpfSn?ZiOv_T7HT`qoy+~G<#Uenn!F&GdB<n={?#oPC7t-}l~G zTV!lkJwYY^K2-kDm!kIz1|Ew-lONV#I#=Z)tWZ z->a%Tc1ApBvNhLdH#?pt@E&(=V)GQo(aGQ^2R^&EUh&T~E`8H^?UOjQdr0CzOn}7G zhhzJd6THg}s`NfqBP;@6lfS*y_;YjH*e|Z=-JYn=u6x{=a=&$kAK5xX|Cuy=x76%! zh0r^@c~g6+3GHJ|%pPN0viftDA6uH!by_oMhK|%-K7Bo@#$B4XwSt?Y&grc3vD9#O zD~+gv?Z>*js%Y9adw;cKj}@>N^%ST$osZDaau%*-CF#!Dzu%JovaUD3S^PQ6;^=HK zXOtIx<3TlFL=sxxHZyy7;se+1c6@aI+;A7gN}x|rU7Yodh62`vXYz>7?dM`otNrr| zX!2t5qP8Y&bFXdFo^1F$=U(DheB%{hWbCi}jw$YB*gR=rQuX%7J++TXk5aDT?@E^} z7%MdUwwv{`&~)1r3xKn^V_q~?ho$voPZ)??7g$N<>c=s9rdd_SlP&vA#Zuy@Z|Q>H z$jZ+=d;Id{CRzDu?`FKhx21-$3Nc3!^6q)XcZ_RenBiMBF5$Zs)B|BT%q=z^-HRNj zb9BzHo80rdvj5>l?x~jZ?`yFC@U9fn;NN8%*F+YB8cA3L)kW(VS*3s8lC~4PvJMO-P2@r`4o7(MM!x@JeVu&V%yx=hnr}&!Kdfl zr10S%Peje?MAS=$A8ybI!d@s1u<&iczw-D~0lq7E`$K6wRoKLJfy9C}>a0j|yYSok z54N)ChUG-Fpyv}m#>w`>!sE%e+ZiQ$k00frwc=npV~}vc#2S11(?dy<#z2u`&jxZo zG0PuJN&|7KhI^gq-#MasqBWXvSGpy$9cgzK)FbWfX@B{IMA}z>r@-g?3O{;^mut+= zNC?C8pD!-j^RkdPKL{)pE&ffq^^3xWcfI!Q!NtG-mLV>keq$bbqqBzw{9})TUU&QF z?+;0eICA`>Gb?8q&NBX?Mpa5a;4@>s{5+0YLrL$^8S)`bG;@Tz&NKJ(zf$6T{O`qN zuxY&Bcs#YUsy2I8<#B$|{e|`$pH3X8?aBKq)d!~2@stz?)or{BY1nzaGZhH#Z*NG{ zpuW$!Q>iGl&M&g2&?$H8>VI^I=IhgR@==UOC%QEC;~iYX?0Uu|dt3XvimdbXB%2@7 zhq38OMFu3Ug<|=+#8t1f&(5OzoUM9Vz3IVw8%)1L(^@^mF1T#r;^eLBTIVk_Z#)YE zTSM&YxZ6nWLxt?`JW7|zH!0&cJbtHSARg;x)KpsScJ77b7q@&R_rbL}|E1ML{QfcC zfG+bs6THW2xpj)9!u@)GUE$Tz{&%-hhK$}RToy?vq-!&~lU-Wu_rm?-P+f|gOJ!#M zlHdVnA|HSL;@$o@movThn9|cv<5uE3N(09Ism_Z#anx$Q9aYX_%d9ui6dE`#o-cKI z$@1_a!Clc5g+{#co#4|O4_nRGjP!fBgxrG3FMpTCKcJWpE*Y+NcC*T19X=*@W;j5= z{jgYUW(vy-Q{#}JRyFXeXNO|ueKkp0gB$m&b=D^%gt(YmSlaXs$$=kkIS)J%u(W+Q z_FZIQ->v`FX|YWH^O}V(hIJAe@(#a9DQQo3P&#w|%i9b#`;WAgT0{K)f^B`Vln%xf z&aw~l;s@|o24tdznRbPO)X1*~zP#3Y*T_5aWYbF{<=gJ}ZDa1g7D##4yExk|-f}mB z#^dKIy*;CAnXr^%7wB51-XXevU&nL0o~eD<|F-Sow7g;o6V=Yt(ReW(s`3w?e2xpA zJL{fnSo@-DQ~f&oE4!E*&gXFma9dQpL8+x+9N4g1^3LoBq5*at{`-X)%U7VaYwbj0K1}i z#_bMPyDdh1@%opBzS53;?x#1GXdaoi9s8c#$9(bRrK-}bb!pW`E)m_ZD{Q&*$G=8p zeM@hn$#3^tQ12PwCUI z39C*Md@Q@qpWtuv%T(P{lVjDnw<2P~Rg=%; zy4zb5qnxj2GpY>>RAes%KPYv#^+?{084PJOC<&CB9*>aJZZxUBuPq)avKUqAQu5&C zs8ZCgKRbMQ@~lt3O!5-pKEgJ^4P{#M*5iRJiCTBY?myUTU(7JD8K@Z2$*`Z+`gMLT z#=24C=}0I2+$Y5?@wn^*(dUH%fqgPB`Zs!x9{tW2am=$hAXCk_!H+$!A7ARbo=rh< z$7lQ@#mTSwd)A50nW&0ONB+Fiszv>F?BU`b3?s|IeZ*f1e3cN1y`^Mlwvr{)a2pmy?~^j-_i zydD?X;Qf(XhBscr`r)-N6VIm_E<|~Ru;m#27PY>n!f#8-!F!V3)nMp#y2~fmz*)A^ zHPxe9B-=e_xGM)7H@-Mgt2qv~$jaz5)V+KhPg=T0ef1BXS~%Y2_t7~1b!t^dr8^vE z^nJXv7j~|4l}C+o@D!JQxc2nQwWs1?iy!eyj&P2E+#e@ynR|TAH)K=|t)~dS z8&HfNl3PoDTkUvtNY(oBcJM88%JPNZj~n@mHHO2KnbnK0564YKL^b07zAyyOg`C9o zL2vJ>V~|}kcD-1jCa(^=gZ$w;^9?o!`E$2oBla!w>hD1-Rtw&0>QPudDM|Hh3FX4Q>g03)%S;w~B>! zwGcK^ZGXY?A={_ezhT*sw~gihV2SUCE1&>otkgZpuT)-CcA}+T8K-^n!UI@rTTK8KRc!{7_qJSjQx-SwyHWDpP0eFwFc8b6l z{7OEktPLRBuq1T=a>PJcAGn2tZ8QWaDc29UgbX$=5Qs!j;x*tZHEcl|4LpP`z{jybH$eo3!~vgS&Mh8r zN4yOu08$8|NCuEia5V=h0J6QVhAIt+q=H8;Egyi!mXJwB0bm597sdZHTe%bvM4UL6 z1IlQ4*UYzB-gAARXE~rXUB(G+{v7 z46uV>10W86GHQW7%{Krt@F%vnfF%rk-U6p!(D)WGhCz8dq$u79$ie=vv_YT38UZN+ zm)-$==x+qz9k3u(6JYg!7U4~h1tIhaDVk zgSth?jiMbegaKTnUpp~n=#v>i4Ao}=(`P#%KZHK#cK{Bs1lI|8!62v;xD10&okZ$X z7c>J2-mAL+cNp+?1D-HQ>IS@FfawA3V292w_YcPoUKvc#I0XJbue#YBY@CRAQ%R_qeRcXV^CWNl@5(TbrFF2I1m7XSL2W$f`o4ZxC(>J z38+$nglv)s0w$rh5G2!+#D<@mA~xa86j4WP8gfX8{%9I-g8}^v5Cwy*8DbBCSs((I z#Lp7jyE98{_{BM*PUjpkXRUc6RYm}W=nM;hFASm=07n?CFF;lV>fA@Dy#&zv571r& z!eB|qBGFuOi8$Qg5^+ZDFA=-pvJ4Fh!F*zwIJHiGf~p`$sz3cR*;f9UY%9?EN1)hN ziB#k&F~s^Rv4_r|fe={d<7Z;dR$rjH2v&n%h^^CJBZB8^#B$iziHY4@2W(*FnRQ}@ z1{*|4$p$e5?_*HtVqLr6h?C^} zcOupFo!DNnAH)Lh{vhV_=LgZV=Qgpxxou)Tr*?=A>vo9e^08eamAOlFi2X_QT;1AK^t3L>pCXTZu7^U68!AnEhcib)5NiYhBEKt)Z9CE(sp>fCzsX`;VAoRup zGA(anaLC-lVsXe)@Oh7^Zf zPiV<-=CGejWH@9keN9G8>?k?z3`|`oCq|zmC+a9r5UFGe9MYU`6hz8^5_cB1Dxf6# zp{63na-u?-0=7~Sb-1Z7&8#5C;tE%Mxx}(KcM#? zaEysaCHw={nTT~6F%zpOVco zRx@nG5Gsd>A+iq>=MRP*hg{Bl*>T9_Y>^#@ENkaEaL8rx9S05%2Q}fu`NN=%lQ=U) zxo`=vq>c-h3IlU)+-(?)bK_!R;KGBu34>K0q90FQVyqcnToO$A^5N28Kyd^Y1%tas zaPcrWa+El+i;m)urI>@Cm{DiIuV@!}FC#>y7OA(tu&F(P$U40i)o-WDTH+XMe%*g(1yH~~1=i4zdbp7kF(^8}6$4)%YqK$DQ@{1XW}7KB~B z|CbH&QZ#5Pj-!GN|L?m?5|WdD8ScOMk0JDJCKGH!c&tU9YDq{G|FY4pC)jX-&?7Dv z=++5P!MW2ZLAiT0{EuP*r{7=?fo`XXIdu0vpSlcnX#?6ZtnimV%BKGrF@t~+?hx#6 zh2XEZ4WUHZplz(5`T(SyV0E#&GU#b*9&#u7mn*s+ME|-njt3b&WylM8A0oXoh@}FT zm5BlN2~_#}e^FX0IA++&Mg^jzKKze50_Mr#kTN?7l*kZ5MSg%fU_1Z=)N!COEME^?m+89BVADkM6cKXh!LIDU~)(KuL#}P_W4JQao zt<@mu!W1ISR>O(H(k_A&H-|_YR(`- ziL7Dy;Er(I+Dxi9?;Xsz%LdQi8dhkowlFMD$Izw|v(0A(5%aUOm$Rb1ME&RAn8eZ#+O_$dBmb4&+E z2_}(4KNvElO&t0-Ehv#&RR2}lq=bGGCvJjx8vGR#CY z7hZ$@zeaDhal-I?{Gtsxtz`I{=Y)sYSO=o^xezKw2geN?lo6zx0*KT|0Q!v>!g&fO z(5OrWnn3jz5Qgxt`o)C*rw^&<;ts>EJar*geIkETWT2V|KuT+Bh(a@Bpf3f;;Qb!p z06{la4AG_1!wJF>!#FlfET9=SPe(!`{#V3$$^W^f1ViJw!qx^Oq|rrT^(4g;l=_dV6F;DihGZzt=Bn9fB$kxM>J5f_QC! z419KyIK&Mnq0lJZfAMts#4%8YHW8tz4gRLEV7NZO1)orGv)&MtQjGqmbQsK@C-(iZ zCQYm})b})~?|&~^y{8HKs&Lj*SjUT(Aq@#=AB@Uh1>UkGXo-TKEugHY4TuS^89)II z&i#*~0vpZ(I56fEakl^8S6Tl(Lo93wM$lJ;hPXp;=quNfr*xn{aN(ix{JUYsPT-ai zjvHJzB=+L45ft^aJ3%S}I&=aIu!Fz81p6y@t;>k&8zUS8H{rx3P4!sZf|?Nq{Z4?y zU#c_UrV&mRZl=^JC<>=9Vj6S`#|cM~*Xm}WgUo244xRYR)Y~6Xoq<$g2Y(0-MgkG3 zS|D^5tc(&zgVv0fPMjM0T`SK2&Plrvg1#{L#F*F@aq=m7b7)A4pfmRG6J|7;pvseO zfuOo;RRrU{N6Wt47;lLmWDa7YhXWz<4YP%t_u znDJlLDc%85ro?+(J5#8zqC|o~1*|p2alqw{5u_8z1gSD;nGCH;U8clofMxI?&4c>l?g-ppVR_j;c`6bTR;V+7pJG#K1XW3p+Z^f)VfiK_4gW*ihsSGso$`X=Rv0Y2A86uss6u)C2V3syU7krckFLYM}UElvXjo@_+XX1Mc#l z+n}@wKPRF4R{-j=e;MIRp;H3B=n?K3zYv_tKmHf5VgX$*36zHgL58tL%^@qsSg*WJ^V6nS~@H z<$pWp)aTvz|LgJSabEXpJYVB_o$EUHxvxvqW0ulV7D`hC43>B<9TYwPQ z-wMzqoyU?uj4N1q=-P)80%;Zi%KziY4lM*WwE>j>fE_St+W!yp0Klmop#DcQji7mB z3!q3^0>}{mC!nhW?l^S4j8lNFmAGTjwVXrZDR)dJ>FzC;K<^4Z)Q^asJrii7$HAgHi=@bbZo&!cGDS?C?2}SN;94i+|6rfU7 z3ecLN45CC|i7a*%7KPH8R ze5xw+Kp<3#4Nx$ZeJUt4cpUNKR^Y>4Py@_ z$*ILc=ACL#py9jWVt`0gmer7N??aOmx5v9a^MyKiTtj!F~K;=Z(z~s z)N^ohJ@-$+K1DLmL!zX#>;)*yy#T!|--X2PlqU8l|v;bHz;XNVEWA6aQ%6B<< zQV8d*nh6USy2B9f(ivj6Qh0{DA(L3 zL3uz`sQE&PdIYsaO*#Xr1v0ET&4ju|4(Wa3K`las1P3Hhn-J@@6zT$$QjN+nlpGDj z3)Du%P(T#11wQs}z(7DdbWo`K|p` zf=g)tl;R`|^#7DOR{+wQzHC$)9D&zER6U%qNFIsYVWHPHDvS)u{MD~R>HCE7SVe(m z4+-Nzn6W8qgfVDt7}*GmUWV#is7Q*2Zs{5o8ngzCa+?kv0#g`9^i7BY! zMj7^*&@GpeBxyOp{%t_KW{epPcX>@WD|!S2sgb5lwQvzC-!twfwqp!l$mm}yeuyjHSEd$#!$fB2EDM}7) z4&O@F%IF8M-mWSd2hXurb|W0V5@OfG9yIAukZvDfsX3{R-iD2>G|@FMAhj;~8cf9- zpatQse{O=VfD7+!g)XFl`cT<+-ZvGbPQ>tllIPH@pq&T$5!4;HGw6NTJIOip3E0fQ z7ma~=X8!0CFm*2gy$d-9?_NT$9GDi~xQvExDH(2~GoJ}7f;Ks{A{=;NtZ52H@51rC z#G} zGTIP^1Jlq|aLOi`=dVZZ&o<(e%*t zTjSe-u7Rb(uhB^m1vYl0-$La{>p^eAHNX1?{RNs|!J8iu;i<_#eF9FSIbpB0b7&K| zieyXZhcIsW3R)PZK72*n!2V@-&}U#?_D^&flF$C10oF%hDqy$2(HKz}PmBZuFGe*2 zR2Tr}9ihiK!d(>4f(eIFSU51uFtQ96CLKl@IE+z&$LcysfpsTg2)sza6EYYGN28JFugQ0<`IWLSNY{FV{ zIFynQFbNuzq9Oz=%8a9^aq`13!LbHkz~JCo+`59HhpDs>j6F?C4Pu<%zB<~L0JPR7W=aPp~`Ei}~K zE_}oH#t6w_2ur@@!9yNLQUWmmaHd%CV1xir&N#5jh{kDGW|cV%WeZyf_*#p&A2#qTD$08kzT)1sIrX0uv5X z#gmvEc(FHJ#x%h^>aQ3Tm@-|%oP!c7e7T8%+p_5=rWB$;Uo>{|AUMzrgWZFoG{s_( z*hq=7x8QM)C&vzuKabVG6XvCfy9=08fY#o~%EK5DNI30ow@=Lee3u0PMM* z8G8mUr2r?E0e%cn7Qr5+AvsutALYx-f!&^1F|dgoOAU@4!%>0F3fMv@3NJ)?;UxAEY^&^m#lvYeI$~oW9%$^0 z{RV+3ek@hmAPm_W4ti(@4@OG~%^fQMyZknLl|F~Cq;3$wk2nNv zZjjs)TMN~{!xIZXoHd-o>cghw-q@$`E!}hxdlcsVxQy+B<7o}Ve!)Ruh|c#WJt6=T zqYj=@1V9r-94$zB6Uz)v9wSU63^%aPpqh5yz;*(Vh10%;co5<1sU16*6Na_LTaGaP z_VoyQ-EDxrNu)6ode~4PQseMR!=iM6FO^1L@>un+h3+|8PQ#BBz8+&M+H!Tp7b~l( zsuas69?Bkdc{CwbeYx^-%~fwNo4U704qbh7%~v2vUW4w{8I{_thJZfh`SHq$fX~eq zTjRtzS~AJbM5|NNnM&g)!+r&V`X%@)B}HxCWFK?Yo3Ap~n`p84%*JnR{2&h8R0Fuo z{p__ES1o5+^S4R*YQUM?`h6*Y>&%=1GT35rYd8$j|15@0}&FEbJu~>mb4w-J*)VchoY#vUlBvU*y0yDEx9>=%_% zhtBofsT#8Df;pE?r8r;F-qdW-#gh#GVEZY@7A)<~_Dg#>g0DAq#8n^>$4x4x%UoTo zLrkHlwpLPChi$XI8TBSLS$E0$!io3-ifrrZt+4^`w^bxXb#xuSQA6^t!s~*=;#NpI zbHg}eV{eD|qSrFtDAm%zJ#+LtMYy7Cu10}7#a5jnRisgPqBkD>sqS)8 zh}}abM&1`6o@?2t{&GL=b{DQoL}K^-5XEi5G#L8lbIr-#)k*W$MB*JqLr%Cg__lFuC1^yu(}p?KKoJ8mfMm` zQZ5kEQcj{ppWpM`un66{@yV#f*dnij=u>*X=A9E88KP{IwEd^5e7@$#;4pQ7ex>hy z0TC@m_u1=(?|G6G##ptVbY3F${BoG+a=x;A*9r?HhucK_ooSO9uLgYD z$cr3ti49wBzoUeeHH)`EN0Td4q?1$}m5I>4DZcTE0)1+}w>%vCD{xnR(@BnxS6Hc>~2zi z;dh>k6nRuda>lYIY@*bWP0V^!>bmQbI{EeDCt^Ds+AT`zJ0tAxlID0`M9bmNoz3lg zm@dKiu5!^dV{G}U#}VGz0Eyr(&rHz**&|O}?^?Drmk677Nl%0Zx#K=0p^Ai7QYa-A z*UGfY6e@{(zqx&_;x2hp)#8~!t|FV8SNp?K`g7ov$B?m`B4*HKw7oFXGwVJs@3U`O z=Si=RLS^Sto{pH?Gwd6=b&LI!!5^8YpLV&($Ezy!P|jT%xACjeHeow-V&ds0uYq?> z>_nLNkg||RQT1!`Pvb}Ldl?A^_;jCV%eT+EEFZw-Vbc3Ed{H46&Cg3KctjwrRAMkZ zD~>$>h7zmsL!V69%tgH{{4eec@8&}kzAvo;aQUFf27o;Sn8v2$+yO zQ>M?&U-23jQkYb6Bx`Z>jz0a1SA+H0Y{xoRj3;68RtBv)oQ-yg4bXkMZIRlA+;QMUIw^8BtB>TcgRICE;anfQ)V zypa>XgNs#(>XhJJiSzQ2`40+6OF7TKa*EyZ!FHNm$hgPr%rabexIllK`z?;&Q)W%( zW=C_vs~q9jXkArjg^J7Uz0d4*x;JOfrg@P1Hg(VE@h|z@RGs3uA2v!(mvr*l*4a# zD-*K_VX`=pz~`oGWI(yw6U}Q@M_i5wysY3^-gz|V)pz;vRTlE(j!#q@qE7`H*}lYy z*N>Of@rmSpi#$JS_;yzIF~>2QhuKc}_=K5mw!wu3Wvc82Z>30q-6f^S5&8wzxlg2~ zzB6LS$ld(hOUk9D6mN?2JAJ;WzRnpA-bt7g^WU#TQ0jv<&m2>kV-&bAnSZvf8)fLsSQo zcOyp)!`LC$$M3R5H*$#I)-J@}TOnqOT)#d}{xhm+ANA)2JqZ!vD?-iGT`UfM+FeY< zF2hg2Z%RKj&^=W)aPBX8l9))sP`v4KHm@8`213CH9bvf z^NmJ4QIr09r?4OS?(?zcc6WO`)=~s#l^Uz|n?jh`y4m@<{bMK1JLnDGM^1)!c-Uv+ zGsoYzxBFzN_LPa%jvWOiV^^m~ud?(ekH64w-VzS1A`6gwMgDT~=3BpOWuaWA4=BoA zW4Pua?Zx4;cI5i62<*7r#;>`v`i2))}Ov(9dg6}dh%7yIhWhfwNbf&y6vso37AgH zJyw;{DPF3*7i13GMHsHxUA7qf)_pRSH=8xJ@+}i4YtMX3w)s>(HLb3ZOSBb^>}bHIr>*F*;~m`yw@7QxPKe( zv4@}j^;2}Y_cX`09I*emCHC3+HuauhjpOXhY5TqVi$AFizU*&r_yDJE)+mV^id%Zc z?!DV)rEd7tRKpmeb4RhqTd}LGuy&h?Y5((#?2#X)+&9QCl01lFzuP@ge!+y3X-6~7 zG(!4F6!SCP!%T5#DXpSMLNxev5i%{>ngY5@4^z(=y3z;=v(@UKA`M}Wf|O#p+G&7DrWO)jR5z&D=28i&**cUSHFMJ+MEh@U4fb7l}*8EIXQMM0T0$N(R@CJ+(hIi(r zY!9bIGXgI8w(afbv`QcN_*ZL`@>9}}h|~+6W2kt;{l;vXF=a>8MR}GVJ1;V$ge^PH zEW@*jQf8HXNHTOP-0PZR*ux4nUS_X#9amf|&%NR0yS7EGwIQ!af@90ByE1LPIm?mq z%P5SKEs9ys@657atB3NTqdfR#w=@335!;(h*1U9^;i0F}*=YQD)t#>iF~=@8k69~A zy3IN4x3ui0RmOO0+LeQMKSXlf5b5E@mG+u3?P#UJ8FYbP}pyqn(!Oy^EJ8{MDnY%tF7eUpr)pxph-PQ+(_3nH& zl${^$+k?Ygq+s*0N8=N0)6u4rf|vOME!qwkN5iLcJeswUX z;Fw2s!al=qxXr5{9SYsm=DgwPq1-8XumtA5rE6zl*!lk4%XaActj zzlFQ>brZ z{QN0h7u7lD;?t4B{zFIC1@!bx7T30j^V1K@#D>3OkC3LBp!>E|Z`~UldGRFK^p9`G zUZ>1QbZHe6`aybU11vk68u zv9TKV5A{WT*;<-@Vu;br)lf4bOYgYRd_098XSEd^d-mdVRK5Z2k?h<29Exv?U$dTn z3SjQvNH%Qp-q%1IOF2|7+P7cy`RUuACfi*Jp6oSn*gJh%gui%bO6XJFnm~Pi^YU6) zSiZbQ>(JW8BcHwG>CbRmW``6Ma^oMKkPk55$qYN5YT)?AjZUH9N^V$CYI)?L(tb@* z#@d^KG~O;r0>`3_7^Y?YADn%w8NM*wcBsON-eHF4>273Js(Pu6)HRzP3#O=Tc{MI7 z%J#D?14g9U%H9nAg2C8KCJ&FhM=+;Lrx_BT)ZRWhV?Iz4d4=>s^JaQ~yH@%Fes=S1 zrv7O0gHWp5KP;?vBZ&nCCQC@OC1olczI(}2X7;QTY0(&M+cj8Jq-I!ww6UHp;R~Zr zNQH%8dF3W3PpR_aQSRLL z`OP2J;=(@FwIjNA*K=W+FW>K2U<6wlh|< zSE*>$NOsouIDKhK6VKKYz_e=3*$ z7VY|2T{kfa&y8}F%sQ!ml7Nb^&nUi4d_~M>q|Mujs!+iYo154M5rHZuOEaWV~iomBV{NyS<4EidM}>={LeAj z?5k17+Bl=)K8>)RtJmffd_R)Xne8_?`h+H0W<7^_K+`^E@VA6Rbx3=cRmt0omzRrq zs61z$1nSbevYR(_w71UC8ihD0J&Nd*S*Kh#(o%XH=^M!#6{t=>dC274jIg^Gc?13HFMAoUlH+A z9K2cMduFV#Jzi$rb)DX5&(icnGog!ssKl3nsJ8k>9z;*7dp*D&3a+z_%f?G^azg=`H40F(Rc^}4P(ovk3hp$QT za^Ae|*lN&LzG!*Z5cJ}uy_Wi`faiK{uN=oXCUCbSn-q#FT>s+uGkXxww(B3wT4m|x8)&<_O6i6es;s`646xDKklIU zUZ_Uc2;NP#>--pY@s}Xg*~s@6v6}eqv#$JiKWJ#EP11GSx_1pv2|m~47d$G>r*kP} zBFV!?T1e(<}%lVc$j3n^UZBCnmWhSA@Hbw|}FY2l#xu%+tIJpPZ;}8_Lwv z@)BTt>&jhVmNhdM`B7zW1c!d$fOAe$bG`SQ@?FL{H?M&p^ZT?t5q7T=G>M{dG-i_e(=saBQRK(InE7cFyq{UFXd+ z#%{l0etrJq?YjMYnr-P``ZdFub_#oOF5x1M?v(#qtt^NM~%04Y1+gf>Wb^glOvs{RE)_g6{+{T(86YBHF+IFNe8tWrbNsyQ ztDgD+w+P*)nES4%QQI^1>%R;mWo$)x`|n0Ngh-p*O| zy~oZ5S;`4B9%;Ml^QHbij$IwRTS`D2vmM?qL}(~FjYGycq*~gU&N=gn;f-M(j~!wo zK9jAP$igC-)1E)Lo`;Zj@A2XrnD% zY%9Gp%|k@s^op6-Tt?Urx$Fy^T`IJXo_ff#9O*r0KG+%g*3J4*V*Rqh%_{*{&13aS z@rzobf_kUAWdc3qBeJ|YOl_x^&52x8j-5ZXXTaJ@xC|SNh->iL&zraA1mw5HNe8@OlQdj9lHYlxlbLc%5kxp6z%&db^%LhET( zRQuDcFk?G#>Y^PuLt)p~W@p)_&Gg2&|B~pnKE0iW%!YY^Mt{y8)ZDz2NOw^o!?zo+ z@u}un2CBIUS5$}i)QsiS)~wKJ>YER~nZ1(8mP70BFw4Ktaqc218WzhbIEKD6EVk5P zma2em|3t0sZ_Hj`SCv$d;-^S8RKf@*o~btAy3K;&mAutxug~sr;nwvL`JSj-UKAcz z;+xskRj)97wwiw)n7*VWPPO4#_SDDbqYyqr1x;Rbg-?gGb5-jn$@L7D@JjnQ zmyuo8h*lnLgAB`gdOA7!`ao=#XNHRCi|)lbX)3Fyyi^9-O|xBv)q+$8b+rOMDanNv z$I#sd0bA;{loD4yDcYode?1^yDkk{R=D1C#b8p5qQ-v#Br1>Eqg)(|WN{bb(MHPFQepT775V5a>e-;pwXrL&el<@>%0GRK6%RDQh}klk*>tL?6E` zdxnBFKO=p{uc7KXRoSHeg%6Ur-ii8)RQOomm{#Da!%DP9H%Wy4E=|2bGVhJsRU_%| zkD>2(cwc@j3U(aRb1tB+>U~EJSUt8sw7B<3znIF3m|p1+ssU3&cr7#+7u+4`e(D`S zQoQnPB}4vvb@EGT(N}kl=`tRvIN@=E>KDc-v#U5q+^5D_sdhLt?aYHTYey+`59vOB zaP;z6PPgB4cgGUlS1Z(x{3PyNb01IBh8xePXgo>2Gn$SL^{bT>MtvQA-@h~f2W zmf4tf?~fb)wY3V9$>6@E{a~i+W&8I7naf?P3)LN06=&8SlQDVTb1dtbAb(`w|D)}J z$&tBa@`}>gDX&?eFwt+;$?~{FRO@B51irW{zV!s7*=qTPuQ?4-kL2w~KT+iMuq*xU zadPo6=YAX7x_+#O7_g}a9)*fdh6OO#=T9x=`r+htO&IMpf`gBt`iqWZO)q$ma@$6a zq>zw{(Q-=NVdrV3OfvkIec1B?82zd?go0<{@t#>kwLcRrUBD-M)%Tt*P?K3>!@{K8U@t)d#`>t6$xPxn0zU1B>gTiO~- zevx}o=9V%4F4?;)mh!5aDam{S#6n`E*WXlmSSAh!X}@D0*R9@}PKnBxDL#HYe2Uk9 z`z-LKwX=3Ruw6~E)t)}f_siRS8H)!mGOx`FYEKEATonlY<@O@K#yYOKcjC<{o#|tX zc;c~Z<9uIUO84FMI`ZtTdPRK44vpf^e;-Y(x^B+dNoZpMQ zUfdFQ;)>~fChwDMzprPK_Zj3O!s<$Qee9S@QVdmkv;DVYWIp`*+^OupEp|%cPVCiL zzowWwKkc$r&d90w%6*+Rk}14)b8F!Ibu)!7{I3g@_Rp(J<@nHh#}mjiu8UQ=h-$r- zXrJyD_t+3EOFkYxopYo5kL0j3bfjFK!j(iPr}cc>w3m*M z&tM*2DlpY;FJj`?ro7TpNK6!#y=r!iQa$j-<=X;zC(JNN+!I;H1u}Uv@ zeN~0C-rJwg)2LQ+A8ETx?$W?We*C$`ys6k8=}>QM_WRwTo0)kDY4rn@hkmLi<#cwLiO{rmXrgzZzemS)=cAYPLPvS$9?I`L z2e~_@p8M!+2<=HzHL~8C*Gs!Tp?`mejj#JSMWfajd1cW$x+Qnb<&qD7_zmy{75lY! zF{5ulVOw(|UsqyF=I}`?p7^9&S1anyFcLd*KAPdu02ZLqZ#9}Xp%=I_$j%W zS=tHAizS3%>Bxk6%Z2lQt&ZQ_ncq}|Q;ugj z+m5yVl234E7JuGyy4c=$aqhIC-`RqIkx5;qrQ+X;Be9nIx0c8r?dyGSz+P>0n1BA8 zi}0%gBXk@C`dPueEkIbfnXuXMCKb5vj3R6)I{1;mM-fMg&$qU-V6b8MosMD+yR2bG zYbX=Va$?9olAMOJ=f=$&th6!dXTSE?hmRIqUD4`ax&LmfEKzl;#F{71B{@Dw*Xp;< zb&cw-<1b?{J(|N098aiY342Rh;UR83;zjRiyANHFp24X3;A zcP;MD7h3usi{!%_A1%mnk&bk)_hN~`Wz5d+;8H~j5^Xu2+EG5)v77tCl;}70?Un1a zpg-+Uk6ddxXlw7WE*))STi-P!d#JoJ@K*bMv5)5K)lpY0>r0&SML9H5=?DEOKd^Fj z37Lj5iWz)JStjkiPg5YV>_eG%RCRB=bCoRdjD3)EOTy3~-mG6P@ugBRlaa7tUCtTG z4^Q5_f8o1udp$on=|#qRUNRV@>}}#sY4Ex8VRFJl9kn4A=R<B(Gzd^MXY^*!(&!^MSvaFn&-rDUbj0IYYY!JY7thl8r0ArByQ4YIlJJjXkEKf zSuE`QDW1e2o$S3i?|hqS?}@@`fz)@42rpX5 zJ}D_$a9lCUbGp>j9A3wvO*UE=eI}l)KeL>dRvt~& z$GU1alYKR6o>JFbHIL=22nfBjxk9aLlgz?d;w!);)?e=AG%)wFh%ei6&2ld3y=A8` zS<5FicGIPvz+C*`H%1BxmGf`1L_Cl99cDRhCU)V~K-WF*MRzQwAY&$#lzN=5GeG!C z%gRSb*$5^+qkG*wRgc9ah`j~H+50}b19huMXm4F4zxCqm?wy9itP29i#B^`CR(t;- z58trPC2IuRlUTE62I$8gJ9GUwyWlZ!%Ml>{T8We1|7no(9Ir7w^aP{$+F_%Q=cyfw z+lw&jC*ez`rKeiMwDPqkiY5P!n@6G&^7I*7h(f1ecKgEzK+-<^L zbQX=R8JIs$$ytbhvt zsYpdLmTmTmrd>W%5;s(v)^Sq)t95yp_N9_%*JQm<9*s_UV~wv0`XV;!Kz)AP#9X8I zwETDKrB|UC8J#NGr=F)SKHI!GQQ2(qlhMfGLE`8Kc2c3`v%1N(i8g1K!^T7{3wd?J zh*pxtY4gP0e80F*s^(t%F0ypbENfgLI`-2Kf%m_|9=fcVJhh!x;F7xV%r8XdHdWBn z$-ICf)|qBzHI9da4t7-o4&G7Xg*f#?HVWgPX)XxW4z^?KM04)W$jpxlnp^us|NfM0_7ckn|7;xC zh|Pp4<`!%dyy5dh2UZo{smjrV{Q*l4^Cm2ZyF4z_k-NmKu*~>}fcNSF>0a*ktZAHWUula~X@A*BJhS<$-tf?rdOLD4@Na zDoY$|1%w^C99ZaZQi?WVGpL^ijJ*mG00OUBvabX|_MjjUdYGDc#10>;SyCi`O*qi5ZU=Wt7 zC<5=Gjp-n(766|tqS6LPVFOluAQX0+Z3rBPoqezXkZry3RzN!}wXp?=;W2Y|0JdPg zQ|>@I%-cQ(SiyRx-ar~mt@r|pFeP#UK+fh|y9l_!Bf;m!|6GzVYOy$Yqw!%cfVPGs z5HN!4?|l`x1f8R*`4j=uMT)}dJ zG>HIj&3-)a87{!WT>v@q@*xR;kBrqUB?Dpb9_fIG05a(D`G6tp{$tUfaX!kUHNEA)I_#vm0uY2o4P34VK0@L3yad=#7{ZZMaH#=+4s?S2 zjezRG`9<(dBOn10X^jAMq7fWA5FKm|XKVu0A>vCbzy@Aw0>q(DBJG4vO-+Cd^l7UJ zu!0DaWAOD%xiA8j_!xfOs; zdV;+NPO4e~Sx80*Ko=q)-xh6%Z-PrUFux6ePSAqTr_Dc~2%0942_YOd5NrpILZ1k@ zrVw$s1JHwr^BsUbL_F^Rv>^iB3FtrsA#TGzI&5HdC!taY2`+R31`t6=kPS3@g@g=! z%K!6;kfkN0B>S3xc2H^jYrqBK%)JJDA;P)~@P>$vE<_~SP3X%5ABo+-If&Tr2F^o- zPY>V+5z{?@6GUkC0uB(7*9$m81n>qiKmP`BhB*CyIC6c6PHG?EejrNe2hKt&Uj4us zh#2VyydXkj0Pul`X9Gxpe1nK{a1ih~5Ty(OS0I((A>bCo7zP3$#^qtaA0n29fnbO@ zGlJ+&j{r9yj@u{_XZI-LK=Ca?l)OdqWgUY(fw#tx;w+3IbvyYE2!e1%-yz7R?~$5R zzDKg+`~X~rbifZt#N)svh!HrBr1|*|VL1Vp1gxJxoQr-$DvACC%_Bv;VQ{X7ze)&epn&lixk5?DmCNL>8WXp4UuZ3zg2 zkhhi)k=rujqGuVYq2>y371C*0L1LEsg5*{41t}fRSAXQ9H^1JW@31{L50<6D<>%I}TpeTG?^%`f;2C2d|DL95_7WUz`(n5hC(9 zktQYO!o@+HbS_*HL`WXS-GPYO!?-Aj(Bj6yi_I%;1V^6-@%54imjLOQ^5T*qVu2S2 z&*c~Ra4`@E#gFv(9ex}wwFQW_Cmkw!|lB#na~4Ne_J zCY8RUNIVKMIC#CUkwL;ZEQ^#SK^6xu#-zs(7gvrUd2JrUCI8>kX{mCE6H<8`8`}FW zxGs+4IXK|P1xhAjNeCw-0SYMd>j(17iT{z0%i{#N2+t?xw;cjEYY7kHw+UyVPZEyF z{rQ)7(+%W4j!bQ_#|ifL!2j4UAIAwFKCn-;E;>I)_=e_7_%>(z$Cz-9gzz=L%l5`FU@kx3t+4&BN)*!2B@{LR2$xgcbvphDnU48dGK6&zd$xw8X0 zA%xK}B)rf4w-AQIe*wrq&k-z3iYkIntx7;T{PwRH2O6m2_@TNU5ivJRB&7I~@c-Xb zGsa;3wOK4BSgnfGwdVlp%DexF2;cMtAgD6afJ3c>$dn0@ssB?oVB$aeS5M$XApQTn z3HZPILQ{YB89e@#EeQK!HEOGiRwR2CT9K`34xrPNQ-TBUvT6n4CQyi ziQ0dI+WGWXpAO`lCp5FEI%2eTXm^E{;N%#=Q0X5h*O&fdq^yqPf=24JI-w|wD}P0l zAn8{^KZ(6Xf(B%AUXPFy5%seZ5eff;N44?Shytu01?V6=VGRPF$UY?c^FD(cs@XWh zN%>x4A|fkV!ruk?2T2qKR%qaqAp5lgdri^1mkeMB>$H%5@YE#8^T_|o z`5vnkhS4I*rZf{Rf$1fqqI>FW?s)`kCy*dgrl18%7(f-MHnfClf7fw{@PYGO&~j2RjtBJqD5OiCQ+ zD?$Lix&(mh@&_Svf>e5hGtc$9NQCcy7@vqD%o0&_L_{+G09Yve)rZUbP0-IPgP`(( z@c-W%S3(msGsGPR-xvZ6po11b0>WUJQ8~UHPR>i zWtW4VhvLmRkUul{D`)**!e#1IQ67YfCKDFTX*n4XQ1UEcZh|d9 z2|oKH>OK&ixA`lg2Nwb8cC?=zYTiX{y-mY&;&yQfS(&&p>Bd(Xt)8g z(MobcU>^u`yu?4jQJ#ZU6O3>apsEp$9@2llw)V_~pszw`*njoi&;Qluf>eo}Z}0Jvt3qXbJ# zk>+NWQN4;H)R%@(U*mr=wU2?3{%1sOh7*G@Rm=$Cy^i~T$SG422=|_-3eqXB?ru^> z5{9IUP|JU(n_mh44{HjL#vGX}q|6B}))N1pN>S!GUMP+y2TJ?*{#AmTfrR+h{=pv~ zIYAgfxqtGCc<@)B?SGLPjj9%H5%ehu`v2a!d3mt@lX8Fwd~Ja=&!h#x^+w@;L_Ed7 zA+i7S0AfCHPHwq_P=JF!%b@*F7!r^EW9wK#=$3=^4@#@cl7MYj`d7{Y#+3og&~w;- zUX1oz;uz7XkN;}P{_jEU($O#}!&LJ}(fKu!NwpSl5{0KZ$~XmGz?5>{=Z{}24f(dqyI diff --git a/src/bzh/plealog/blastviewer/BlastSummaryViewerPanel.java b/src/bzh/plealog/blastviewer/BlastSummaryViewerPanel.java index 0b671af..0b89c6c 100644 --- a/src/bzh/plealog/blastviewer/BlastSummaryViewerPanel.java +++ b/src/bzh/plealog/blastviewer/BlastSummaryViewerPanel.java @@ -67,6 +67,7 @@ import bzh.plealog.bioinfo.ui.util.TableSearcherComponentAPI; import bzh.plealog.bioinfo.ui.util.TableSearcherComponentAction; import bzh.plealog.blastviewer.actions.summary.ChooseClassificationAction; +import bzh.plealog.blastviewer.actions.summary.ViewQueryIprScanPredictionsAction; import bzh.plealog.blastviewer.actions.summary.GlobalFilterAction; import bzh.plealog.blastviewer.actions.summary.GlobalSaveAction; import bzh.plealog.blastviewer.actions.summary.ImportIprScanDomainsAction; @@ -95,6 +96,7 @@ public class BlastSummaryViewerPanel extends JPanel { private GlobalSaveAction _saveAction; private ChooseClassificationAction _classifSelectAction; private OpenBasicViewerAction _openBasicViewerAction; + private ViewQueryIprScanPredictionsAction _viewQueryIPRAction; private MyImportIprScanDomainsAction _importIprScan; private BlastSummaryViewerController _bvController; private JButton _startSearchBtn; @@ -122,7 +124,11 @@ public void setContent(QueryBase query, BlastEntry entry) { _importIprScan.setTable(_summaryTable); _importIprScan.SetQuery(query); _openBasicViewerAction.setTable(_summaryTable); - + _viewQueryIPRAction.setTable(_summaryTable); + + _openBasicViewerAction.setEnabled(false); + _viewQueryIPRAction.setEnabled(false); + QueryBaseUI qBaseUI; qBaseUI = new QueryBaseUI(query); SummaryTableModel resultTableModel = new SummaryTableModel(); @@ -330,8 +336,7 @@ private JToolBar getToolbar() { btn = tBar.add(_openBasicViewerAction); btn.setToolTipText(BVMessages.getString("BlastHitList.open.tip")); btn.setText(BVMessages.getString("BlastHitList.open.btn")); - - + icon = EZEnvironment.getImageIcon("filterRes.png"); if (icon != null) { _filterAction = new GlobalFilterAction("", icon); @@ -368,6 +373,17 @@ private JToolBar getToolbar() { btn.setToolTipText(BVMessages.getString("BlastHitList.iprscan.tip")); btn.setText(BVMessages.getString("BlastHitList.iprscan.btn")); + icon = EZEnvironment.getImageIcon("view_features.png"); + if (icon != null) { + _viewQueryIPRAction = new ViewQueryIprScanPredictionsAction("", icon); + } else { + _viewQueryIPRAction = new ViewQueryIprScanPredictionsAction(BVMessages.getString("BlastHitList.edit.btn")); + } + _viewQueryIPRAction.setEnabled(true); + btn = tBar.add(_viewQueryIPRAction); + btn.setToolTipText(BVMessages.getString("BlastHitList.edit.tip")); + btn.setText(BVMessages.getString("BlastHitList.edit.btn")); + icon = EZEnvironment.getImageIcon("meta_path_24_24.png"); if (icon != null) { _classifSelectAction = new ChooseClassificationAction("", icon); @@ -428,8 +444,13 @@ public void valueChanged(ListSelectionEvent event) { return; if (_summaryTable.getSelectedRowCount()!=1) { _hitListPane.resetDataModel(); + _openBasicViewerAction.setEnabled(false); + _viewQueryIPRAction.setEnabled(false); return; } + _openBasicViewerAction.setEnabled(true); + _viewQueryIPRAction.setEnabled(true); + int row = _summaryTable.getSelectedRow(); if (row<0) { _hitListPane.resetDataModel(); diff --git a/src/bzh/plealog/blastviewer/actions/summary/ViewQueryIprScanPredictionsAction.java b/src/bzh/plealog/blastviewer/actions/summary/ViewQueryIprScanPredictionsAction.java new file mode 100644 index 0000000..2e044f2 --- /dev/null +++ b/src/bzh/plealog/blastviewer/actions/summary/ViewQueryIprScanPredictionsAction.java @@ -0,0 +1,113 @@ +/* Copyright (C) 2021 Patrick G. Durand + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * You may obtain a copy of the License at + * + * https://www.gnu.org/licenses/agpl-3.0.txt + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + */ +package bzh.plealog.blastviewer.actions.summary; + +import java.awt.event.ActionEvent; + +import javax.swing.AbstractAction; +import javax.swing.Icon; +import javax.swing.JOptionPane; +import javax.swing.SwingUtilities; + +import com.plealog.genericapp.api.EZEnvironment; +import com.plealog.genericapp.api.log.EZLogger; + +import bzh.plealog.bioinfo.api.data.searchresult.SROutput; +import bzh.plealog.bioinfo.ui.blast.resulttable.SummaryTable; +import bzh.plealog.bioinfo.ui.blast.resulttable.SummaryTableModel; +import bzh.plealog.blastviewer.resources.BVMessages; +import bzh.plealog.blastviewer.summary.ViewQueryIprScanPredictionsDialog; + +/** + * This class implements the action to view Interposcan predictions + * made on a query. + * + * @author Patrick G. Durand + */ +public class ViewQueryIprScanPredictionsAction extends AbstractAction { + private static final long serialVersionUID = -3984245135396746453L; + private SummaryTable _table; + private boolean _running = false; + + /** + * Action constructor. + * + * @param name + * the name of the action. + */ + public ViewQueryIprScanPredictionsAction(String name) { + super(name); + } + + /** + * Action constructor. + * + * @param name + * the name of the action. + * @param icon + * the icon of the action. + */ + public ViewQueryIprScanPredictionsAction(String name, Icon icon) { + super(name, icon); + } + + /** + * Set data object. + */ + public void setTable(SummaryTable table) { + _table = table; + } + + private void doAction() { + if (_running || _table==null || _table.getSelectedRowCount()!=1) + return; + + _running = true; + + //get selected SROuput + SROutput sro = (SROutput) _table.getValueAt( + _table.getSelectedRow(), + SummaryTableModel.RESULT_DATA_COL); + if (sro.isEmpty()) { + return; + } + + ViewQueryIprScanPredictionsDialog dlg = new ViewQueryIprScanPredictionsDialog( + JOptionPane.getFrameForComponent(_table), sro.getIteration(0).getIterationQueryID()); + + dlg.setData(sro.getIteration(0).getIterationQueryFeatureTable(), sro.getIteration(0).getIterationQueryLength()); + dlg.setVisible(true); + } + + public void actionPerformed(ActionEvent event) { + SwingUtilities.invokeLater(new Runnable() { + @Override + public void run() { + try { + doAction(); + } catch (Throwable t) { + EZLogger.warn(BVMessages.getString("OpenFileAction.err") + + t.toString()); + } finally { + _running = false; + EZEnvironment.setDefaultCursor(); + } + } + }); + } + +} diff --git a/src/bzh/plealog/blastviewer/resources/messages.properties b/src/bzh/plealog/blastviewer/resources/messages.properties index 6d51e7b..8627922 100755 --- a/src/bzh/plealog/blastviewer/resources/messages.properties +++ b/src/bzh/plealog/blastviewer/resources/messages.properties @@ -70,6 +70,8 @@ BlastHitList.save.btn=Save BlastHitList.save.tip=Save results in a file BlastHitList.open.btn=Open BlastHitList.open.tip=Open selected BLAST result to review details +BlastHitList.edit.btn=View IPRScan +BlastHitList.edit.tip=View Inteproscan predictions FilterEntryAction.msg1=Applying filter: %s FilterEntryAction.msg2=No results @@ -205,3 +207,8 @@ BlastSummaryViewerPanel.title=Query/hit table SRCOverviewPanel.show.btn=Show Hits SRCOverviewPanel.show.tip=Show selected classification entries on Hits Table + +EditQueryClassificationDialog.btnOk.text=OK +EditQueryClassificationDialog.btnCancel.text=Cancel +EditQueryClassificationDialog.btnAdd.text=Add +EditQueryClassificationDialog.this.title=Interproscan predictions on %s diff --git a/src/bzh/plealog/blastviewer/resources/view_features.png b/src/bzh/plealog/blastviewer/resources/view_features.png new file mode 100644 index 0000000000000000000000000000000000000000..621ed91d37106fcc2e88d630d549198408112744 GIT binary patch literal 1392 zcmV-$1&{iPP)WdKcYATc!{L3L*!GB7YTATcpIGch_bG$1Q5F)%RM{uz1z000McNliru z)&&<0I59&6npOY+010qNS#tmY3h)2`3h)6!tTdPa000DMK}|sb0I`n?{9y$E00hWM zL_t(|+MQNiOdM4d{$_S|clLkjB2=Kj7HSY}OR6z#ld51%ZGEU|te6@N8hvbxiSfZl z6Viuj>=TJG@xk~~qgIomrnZJOKq|#HQ2DhWN@)vh_Xk*ZW@l%v=iZ&dE``>3!?*X& zF!y}teCM1yBf%bTe((jWemH`hX#o=bSqzrM@-t&#%p%aWL&B|_b2qP#{_%Ft&!2VE z)-=JwgT{v+pJD%Xoc(ox9d0|3YTA4FE!r9($Q#*J?k;-vS@Bqu-65wt+D1va% zgNi4f40=k!r;JPnLs!rJK>tdt7s*`$iOG_^k{}g6!DW&1J4rDCMzU3gJ=oTIG+-LJ zQx2!14EFu_9X%3XOR^GyT;%uakjOf-Ndz(d7-kMNn^bI#hM}~*9&kF9PYgY4jSQUs zel5ugfpwoWaT3Xvj+4aVY4r9CVrY003%Ui_2wVB|MYDkiLz>D{Rm9c zL^hj6hO}NvFC(MrXx_aI&+U7h?wio)I<=6-*k8B(U!PG<5WysE`;D+rL=g5eba(d% zLxy1xG9*nFy1ooWF`=pwyj~f}q=tsZ=TTc%5047?gI+|+N>Ei(g>zk3OUTqygzwC4bF6rD_v#C#_+ zNI$}1MR@D;fs*T?$W-+8CD7h}1t(8Fi@yHfv9G1Yj)2Z7OQPR2!L+7pcX&@4bYsU%tXCM=PjQGeRONU;-rqe!IK_ zSX$CCJUl`2Wzc`A7l)3tlKWCY*%lM8Y4_$ z`o=O$=0eTZIvhCi4qR@JkjBKu1a>{=JM*!oojBWh0eg0P$;%WOlwn#Pgf@lAfm%GW z-7AiCheLtW=@$FAal@2ES8qrFyJ4!TYcVw$#ic8{F!*Rw5MB@UgQ~(qvs<;{rd-G} za@1kG$;_h8UWb6Qr_$t&mL0@a0oO4b90000