astrodendro-0.2.0+dfsg1.orig/0000755000175000017500000000000012773161345015335 5ustar noahfxnoahfxastrodendro-0.2.0+dfsg1.orig/docs/0000755000175000017500000000000013075265772016272 5ustar noahfxnoahfxastrodendro-0.2.0+dfsg1.orig/docs/wcsaxes_docs_screenshot.png0000644000175000017500000050370012773156651023726 0ustar noahfxnoahfxPNG  IHDRx  sBIT|d pHYsaa?i IDATxwtT{OK/$H@EbCA 6@=걁؏(T, ŎAPD@z 6I )$kEvyg2yy  j{#C !B/(^Qx D@"E !B/(^Qx D@"E !B/(^Qx D@"E !B/(^Qx D@"E !B/(^Qx D@"E !B/(^Qx D@"E !B/(^Q,=.^d%''4cUf58%Esj{"ХKM<'$^TnI/v ^8k뮓n' $%Eڵix,v_d24wڞ  cFmO#G*))Iڵ.]Zsׯ_{G{e2cǎ2Ǖa_׳>[ӷGH.]p8dZk{*'׫={jŊ7|S]t/^MVzkUVjٲ/_^q-['|RfG}~I]vYN'0dj{'iӦi6mjIռys=W{ր_|Q˖-+ziȐ!e?j֬ڷo7 -iӦUߖdիu 7(&&F۷oWϞ=F7ސ$XB]vUttRSS5y䠱{EM6Zf.bEEEQF;v챽iȴiԠA@+Iu_rUz~:uuD^p6oެk8ի5eʔ2ԺukjJxtW(55UcǎUjjNM0A=zPN /(&&FÆ Ӷm*a_:KƍS-? pYtڵkWf{ǎUPP 6kT<AxxJM6M^7===]sՠA 5l0 EDDhȑzW4f_x4qJg=7nn}wjР{cv'ݮ2Kٳ\(--Mg}4irLF{ 4H/Vx%i?ũy抉рۛ7oxmݺ׎ ZԩlrwQXX2%I\־}@x=z(..Niiimiii:묳V]PbbbйqqqjԨQ1cccukwn|||'q\JOOxط`EEEy5>Jyyyg@xnݺ)!!AiiiZf>l5n8a8֎BA||vZf{5m4}gׯ$)##CSNՕW^)8vǎ*((P-j.&MRTT{TF{YV]}՚ta4w\y꫒m $^S\\ԩo=hL}w0`"## g ҄ d24p}a[U[m(d2oѣꫯpSN裏ԬYc=+33S=X1%o xN*ǣ!C;QƉ*ZdڷoiO?~>Z8_/^vtg /(^Qx DYj{=[ђ%Kj{vڞpL>Wۓ@h.]FI:uݻ?Ԉ#*Faa4`I&4iR^WCU˖-5{lp|> /k*yd0eJ+sV;)e BmpZ~).NoŽk ҦH{9.<~e>$E P[fgkon/Irs׫yhl9\,ɈY3_MQÆWu;wjo/X;{ ͟Msy핼>em{"PĥV(aӦMdܹs{e2zjp ճgOĨQFz7$I+VP׮]TM<9h,5JmڴQLLtWhŊA]кu낶_veJHHPzzz ?f^z^EO^z]I֭7o)STz tIII2Llzj= SAA<ϑ{2 TmR?cK^pyrޝ#ڞ1ZZ_Vބj{*ǕgNYTJ dE>d ܕT<(w\FG˗+yKD%eTx^O(c 9R]ӵٻW̛+ Kb֭[UV$ǣ+B;vRSSuwj„ ѣ:u^xA1116lmk/uUWi=zV\.]}\W_URRzy^I~믿 {n߿_:t(cǎZ[,=Z~&M;vhŊ#G9s$ܡCEGG+**JVVVVdu,,Ez:G nVJټQ~A<,kV8߉~*} McٿpeJJRm*/eRVTԑw~v<cJ%/Y\Wm{sUW͛~,CCfڏE+RӦMӫ*ɟkܹz'jذaz$IVJJF؞$]r%jѢ&N\tghƍA:tZh{/F\\{=]ve3fQFo߾2d1<N4%o'''ٗL\.Y xꩧd4t@p&M4o<+}o#hٲezsNo5xg(޲U3$?Z1-ha2z鲞~bnUژSI5 z$޼jPŏyN!rLY5}Vǟ(W<_-I2bb{2EESU޼Y E^kMA4yd/ڵ$׫A;|_ũyڲeK ܕ͛+>>^[n ll?{<egg+**J͛7/S5ҽ{wr-zꩧ4uTEFF߮{p8Tn?1ǏO<[oU^zvƌ޽{_Ubb$)//OG}$I۷"##CVn>?«(~k:.ozd2dEtﮨ#dNsDs)Ér[6W91QN}ͲoWs42eNNVXΊ'pF'/rVZyJ=({*y;vt\;W#Gڼyf͒BNlĵiyWEϗn9!A vy_֦J,OBn>__uƏ$4N_s4m3U'ȵzǨ`];*gɵNMSXe^9!_ȹ|Y2EGܰ.@{uΟ_>ǽ[rϥ*{T0mz(}~D+[r|<;wWP ҰaEr.X(OF MS(gOEpL>F5%ʳgbGf{*߾,͛ɽaO,*},MN wpr.X(oAAx=z(..Niii7--Mgu6m8."""{^n%bcc>/7Զmۂz%%%9__|˗kɪ[Q'?QIܢ2 +9K=Ԟ={o+~%UV;vƌ42dz!͟?X(x ~Օ[ynR0dDDq˽nr׭W)J8Q֭5sjep<%iX,2""ٻWo2ze}3f(^ ν~˹`$ɔ$_Q|99$SLs?V U]Ti >\u^x^+q`ǎ/?_S~LyՁnοUyZL&kqXm(_~ˈ-:|JyN?VR6ȫJgT我r.X8Έk*V{f%7A2_~|*SL]U#cfei+޺U :OB0dDEWX(r-_)JIP \$./d'4k;8qe؊;\#൶=S?,-啻srI3=>E{ l6Gz-vz炎+ip(sL^{1|޽d@Җ,Y}I/vh%15CuJv%&&VZpB\.]uUAۛ6mO?] lKII$կ_?ؒ7{lX۞|>|iYy[&Tkɟ*dDG+y ֕k*S{nUne4\?)r@g^9a.Vθ7^45FR$}7^Ftޟn?2Ir_|I SRb[).N>[EtɧZJG(Gp(kɤȨdfʵ~$ҢE%)޺UԑMEJ}z˨ 9BϿ{f?,-Or_yE΅dJLT̽= ȠA4qD͜9Sk֬Puڴiڵ}ݠYYYe*xu7uܹ^x۷܅AP *))I-*o…j۶m\.I V C0av6%#OnY5R*4Iu.n-[vFme= HwO^glm(q'UrXI=*-煱8}+ẢuLqq:S}i|P[or|3C2 ?󴢆^|~BE>}/ZJÃ?)_QbC0E}F2[}Ui>g)̦O>oNދViddȳ}d3~̥^7&k巍f/?_ѷTC_^(:M?L&%LxG_\-gCWTϦڪe`[ɛ;2""Tw'~zbQXΪ;}]UTeޤ|t 0Vuݵ *-%Y8 C+dDG˰PѬY*5Ky|'\^LQQJ/оz-O/sJ>N\嗐uM JKKSZZ>l5n8蘣Ymbԝ:ujxڵK'NԸq㔚믿^NO֯_?}7A?7 I֭Ν;߷km:y,Y 6R={0}A0u޽n AbKFqek*OH־neoN|J2:f|+_N[f" ̭Ҝ|* 0[+<.kڠ7-V&=Z;Uժ[FVx\d%IE v|={Üts6EEA޽G4F͊_lO_x׋˄'u wK+2UzvEAni(_}]˜2ڡ;θh~%K7=W#)+?IR̭[o+a;mׯUJٰNet` UtpW&/h˧;*xժZ'OVAA^z?> Ih{izSO=nI;wʕ+5i$5i$Yf魷O<&tE?#C믿_}v/[z5uT]|ź뮻c3Ѝ74^˖-եK͞=[tꩧkĉݻn^Sdd#<{L=zP޽|rM0AC Qӣc͊uoŸf?Z\͛$Kތ ;A^ IDAT?SGVr矒$x3_qf!q\)42_{|>yv풹x 6|f"=㩼Ҷ8˛)sb|N\I;S;OyQ |U)[WY[K%5U愄47cVIElIќ96%I]ktn>SY$?L1152nтʾ>IR+fr3'%+a9Y7-* MS!߯<;vҤbǽ$[2ZNǫT4g/4h&L ɤ|<0r+x+^?|M4Iiiij߾[=csssu7]vzG뮻4n8O:u8!Kھ}$`>3aÆ)66V5Ҝ9stTXXz꥗^z.7qD5o\|kEGG .O?f裏N:zt=(99Y>{c ȫ*꾒?/ZH￯ŸfʛoseW ;ܧ #7SWR؞59,,|^Vpk2I夓S]I@ݿs+>pb!R;wʵya+:ÐM^=eJN>Tc 6ePd>7ߒ{Jfg}5I{q)IFzyZN9EΝ%I9ϿpJCqՕ$njo}=*Ϲ4U~#/4h)*JIQk,6i@)u1LT-s\JYܫw'HWֆZʎ/R\T~>WokT8*-d__L Ks3Ձ+; ;"z_%I~?:ܘLOQγ|99r|Ms)QQro٢W4=v MWkt΍6Tdȩ UoU:,U5# \^]yNkӦOETCKɲ<=p)ɓڥ{$_]6+r >Dd~u(|1Rdf{ӕλe[Kk_?+ٻ$ɽqmyW=r Y7V]"{Z>v˹jrƿ] edntr$v[+7Z^>;ݽm{mSw^T.B^(ŰCYT4k*#2RC*9gQ{#r@ *=[gϖl6"#˓JèV+sz6Y7 {eud2b>#pl؅9΋csTw{Mh0+,,aIMUߔyۿdG Wv?X"Mʼid2+F]U!ܩkL& dĨ +@^=d,^ˈU7^Q#FD"SO̳}qL a(WOCRCh3I];%LxGbuQʽn͊e˴wlaJRy)?=B#PB-) wUr.Z$!\Tں".\Wp)⋔D;wʛ'St̩ek^vsOV˛/S:49EѣlΪZJec|Jkʍrϣ*79Ww>ϑaܨm(+ޫg ex1_CLsby땩~}ZV}9 _EK4}|V>|­fՋ Sg>)>>Xe۳c69 .o/{zfI.ٖlVԄ*>Yd (ȭ 9ڐvU8N^KLY[Ɖȭ\ڼ/OaVS7.ªJx HԲa\U6N\N<p'?_e۳d6tNcp%DJ^3*q(-%%pߵ; ק0.mnux,&<)C/N{)ѭ]f ۫;'u5[5͓n3iB)C儬c9ۓߙ/IxC7.ֽ8@);kކ[6O o2jZ?FMOQS8/ӣ:Qa:x :qj }tVVVSaVb.5AIسAK]N-Ӿ +ߩ? ;!ǫ1ajJtN)VEؗS٬7f(+HQ6}j]pax)>Ҧ0u8%QWMQQ>hBIA83EF?{fո޼fI\e8QV-ZoQRz{Ck.p**̢qtj.?3EMEkOC^k%2G"%\Yˑ>_ ϿdVYOl.>B5|G>[S˷g)3)٤u#uq$Ej>h )u"q)?ҔeHiG-OˣV%IZ6P1 PJq@W]Uo _V<^Ӗ}yt^'W:j=G&-\i6 [tڭ]Ф̹Nbfג ikoG+IJ*-aNTpuhp=2e2$Y&Y̆ҋ,a]]JRfn-Rn[*~ c{'dimQڨ|J[e; n ݑ%p<2dx9oNTi~톤.|,lR,T߯ԅ;D,*r{vO7Kw땡%!uy!sM){t9^ń[u~5{_a4E 0NNj~xޜA6:ޞZ[35zR}zyUV-]/VvS^__DMl2Դ;4-zJM.S4k^ CםNVRl$`S 6$i5cn=*Տ gw_X6Kr{է}#]9U''F0 =ǿmE;/W锤(Hk"tr j{R&U;W7j7kxuuue]nvehڽj8d[npQh, ; 97Uq6YGOjl,&z0f^\y\?.B3F_ 79uu kd.I&E,zt^$M*&;{.ܡ(nnV+߯׆=L<04.$Z/;7'Mc]G;d'Fտծ=CjR'iĄڲ/O.W6jLҧxx]ծ\KikyX9)N-RԲaTf ȭ~\/Cҳ٧ 3 C-RbZgWwkPU?oTvSIW'ʦ]*&¢W~X 7=Ь52$t'4.ҦK$Y^/NNW_Dvk~\Fl)Д;-z~_ N}hf6탪[WϫDWYӷuP5b)mQGC:K_^vܙ-ah̠,nLX_w+a۫ojM=Y}V[zeX5Wj1.5AoQߘ~Zn۔!w9U;KȽEZ#+P]P:{/:U{wTeWZ C]ي5[_ꗵ{չi]wǤ/^pѽZ*1:Lo |])^&YC?E ||+rؠp4%Ξ3_ hV mNGm",@0#Lb22 դ wNiZ^39MEYti4})L[Y⣱l{ޝIԽMڟRqI7fiٍuc&wh3@-[:WҸi5tE۲KJFXt֪ԋޘ~ݢ5S3m^ҮڏE 0 TCMկi,}P3xԧl+zvjv++cgWx"WXgϑ?y}ޕ=?y{N={}5Vq^(:Q6IRZM( ձIn9?^;siɱM""UsnxvAIޯ5J 8X)׆ٛ^ڶ?O-Szzʖ-.|E=}y0Y}:G^s5w>u9~v{v?തJnk Y==LՉiao=$xQ8#E=W9^-ߑ)lo+_ fuoH*r{4q%b[WW,^G'#?;JW2K^O؊kbޭ4zRmܛns7b2Բa.lQOWk؈NcJAK1Jʡe/ pyTXgҀPB 5cޛ$7u4hYHr24 yϻ== ؅GɕCp뗦M`bfpaIX 65`lm-X| w\6ub[ulsSH*>T4v/BSG#_?>k X)/%!l@]O»l4\mpaf[~wv}LgAyAAAO4UMcx{p? " ־:wu?jl-(` IDATٕ<$\C`Yf-ŏ.8}$/N ڻc'b&ϘAӾ_I?/E5ATkAw{3|3cfoj\x{W7$+  {HSNY ذ MLVoO Q?g]Lf ZN6}Ζlk6[پ xqCq%{: dW U\UuzƦbqX_}s\6g $lj;UnkЖ +nʲT9ec*1=H[S6<A8HWAAkOW"ׄJd0to⣙G F~ЋX=oچ$MNo/nC!HhJoϭ ע}z9bP.W^|l<Z7wD⾏қ*O4Z^pa{W(#zں'G>H%ӅbԀy ˞ .sl]hh?UETXh Gq;tEO1Cw#0$$'Vi<Ѹ '{iYrA\ބh"շӁxAAA[q'O,k+v=NO8ذ = O}T TQi2yA~xDյKfG8IlkspşÍ}]7sJh G_,k+v!kk'V=Hs6mo3/ف:<@G$89~5Mi*nb"yƴ_8~ &%Xl\bwƊ\xj~:}H&XYyy- AbZ^ۃ'5n𹺱?{jUpa:Ixz9 ں伪3-XGT5v׸mwv*$o>@K[Uk6δsϕxfA qe8n$XOdMAAS*yD)X{Tˏh?U sp1s#on o3G$LX}z~r4uWB*K8=AɈ%xw]ppB~/, +%bxI15gWv}WXN cq3+܀Dz;H / ˧..\b6<K 7/.> 7=a^w7676X xw՗"{ٸ`0l'E!`3' MH>35=]c!ƑwWNu_k{,y4X^ވ{goD^DWsN|z xawǍ k+wť; x# 3F;WW)8s N ^[ ׃Nۓޮ ׍#eW:>W~zV/ϛ?O/ !{]O(_Ξ`/ s8}BԶՍu^[RYNS{ |r bo99'qx<"?PzxdM<x<wBUU;<_mAcKOü X[;P֍H9~eA3' ̣#pR<6a.tFRQ&#J,םWĻ갩m]1lF0~hN=g58ng˦atlCk8Pq1MQ˦w`ަFԵvǧ#2\*^XlGUC'ڻcxmT0qhNW4OVǯ;mnDKg!?>j77iX!nt*lkƺ]hh5CgcxI3 e'*9I\;kkOxn% OyA^s"|75=Q8r|1 |, <oڍ7VƆmh#?EeY.] p׎nmMhh;5 ޔRNUKgٓඞ/tXל=3'`iԵv# LJB2gYË }dҭGNG5XV݌=Q^s'E+gutzX.2,kY/: `64wFcaxI* qa8q !FdoN Tx \}Շz UW]u!  a(xSYY ˃ϷJ}SJ;sԣ8DwUδl2tx<Biu$hZU2:u*$ w~"@,KL*8ۦ*V-cr?S}T|Mz8Nx<>em6i}?j/us{EaZ;:8eY9{<wjtmmmuTQ\t8>Lc^vctgQA~βAD5D ׋P(fj=յub{jz{+SסDU}gu_zTRkNWAIl۶ (//G45jͻP__AAA/HW1ʖxMA9]Aģlx<L^\i]x [W}'kvƘi@tH$`YVzPxh,;-Ŵv/^޶.PךQU7?]۪]ӝ!Z#u}>T N{HBФף)`3!ޞ8sM&, >>O∮?toM^z'he^[O!f k,}_ !gSzUZ9Tv=   HW 4_*d*Lx<#`AA']=y07y@x@Fit jn|<4h֩PʑŨ \HN1iPxt0c|hTSpoP:PJAfj^lY4S_ >JY+ h}0-WrǦsS麘TtOLTPJݾt{4ټoi\MU\!ձd"W7F-CUٔҴJXKYuITxwqhnnFQQ{9̟??kB\yYlڴ ---xgx0n8z}Rՠmi:@&j3]f{S&yf D:/)h*/x2J\ʪWǃ`0VFWcf|}XM~ ۶3{\G;u SW2\յTih[W- |^u$_W Wr*U$T˪}>_ƾPRYtn&`⛗z{~W2~jٶ e4wSg˯l^|ykO=u`0T|ΖeU/焖g>!T ܴP/,§gAYС΀ߚM>P!  $+|*Wyl2DII21ݾB L+cUԼ  rNt̼oRt6w^_JR0肹on@r&U.(9[)~,fKׇxPMd@碛z5j-v#_W/y_ql tb)<(|\tsǘ@MAN8%I%(GMKU=n%C/|*P .ѶmgH3Fޞ/ܲYqphH&C=liٌH+<E"K0xtME:ԋ[[!ϟ\rcZp=TφeYbbv@fUJj\1sgp) '95enEsw3"m`1Y#CNxyKXٸzDQr1';V'3s7^V4,CCW#Cqjih%^Kfk.נ#ց|_>QgG_Ҝ- ->qF"bkp7]&N۷̙3q7N;AAh~`4 *z< Quxq ~gZ O,T> uxzÓpxxW Obrџs:c{-B/]0 hcqpkwz̶<#ځՍq^z< v]K~h" r9p`kVlm݊j`֩wDSWQVB]g-mEK7`bD § B/;3gGN<쳘5k6n܈z- p_:b&OGyp`o4IO0t@عNIKU3>gj<>.WdSvltɦgq~ ݣ$qRQu._C՗u?[{>xzЩMt%M&ƓQWfSS.RČ\KPqWP(玉qk>ggiI~i"DfT׋j[%t BΗ ?w/=4mٸh%8 04w(I:i%x{ox7}S7O.>ۏ G_I&a|R{ԴU㙍OcQB<1|oojKB܉,T~ʏmwaNl}i_7˴Zǘ11h,`Mji=ٱt~wK؉>:8t x%& : e!ıc.DIpAZEA"^x~ꪫpǏ~#̘1+9眃۷cʔ)=AAa೫c'.\5+/}<,Dea%0&f>9c"_8|)~6`ACfx.DGy?im_4bE[̆ngێ IDAThD܉# 'oɸa/w-wpֈO&{mljCOO!-x1 *gA8 &)rc_O~oVZJKKQZGa<O䛪`T)pټDLJDь2\1Ų +WYrŪsK2ŕ\L:0_ʣ @>6jjO&fMj1WMR5.y;/ýM{1JN^buw^{Z166֭]W~>0su-Uh|~&E35)>键|D|<:Y~?.V}b1g `w|VXTu91K0l*.y,iWSW#$-FKBL+/O ;ڷcu*4v7!tP(DIpMY#fbxphj$̘#gǺ'z,&S휋׫^ö֭hka%n{ߟ{8NށɥGg|$5mZ6-ڊ72L+?g8# F%Ս2AEԜYܽxgiW';>=ztǻ3mZ׶MkiCEp\q >{ąz5:/,؛u\3h<ף{H$XZp3 # FaQBU='#~)64ow}/7At!^ܹsqSȑ?*?J{{;IA7  Aojp~埛ckAIXpiFM[5'/FW[[`ւ[ԕ2ؖ@sW3>WO 4u#nܽ.5םk75mXӴ'@QQ'p, ˲P(JkOU,_;ݑ* džECsg{ӾF[Z6soDgw9h<|Ne0_!q ՄM{6@舦eNpxq m}|H,i Mkr\ĝẳc'nq;эx7lB}qGw]im:I/o}ɭMDe6l[ճoK +TZd_ug|>hTS&m~㞍P9v7@<"ñv!6A,K~gcʧ P F'iӦaΜ9i 6lK񹱟G1'= =ܽ.\7;Z6 ^Xsjf__G I$u{{M@*?h,ڢmxv3X{> aL=r&~{SxO4EEE #?g͚˲py?CSSt~hYj70%0~?qoJ<-# ltf́GMmӠ)CkfYVF0Cw FO hm9П+mWl4pfJ`2`n.ʃhԸ϶mg]&# fXE( rzMHjbQxqp @͑!˲2@CgY&/?/*Lʿ d~NxBIuו * A=rSy.ެzmUnε]8Jآ_<# Fca}̓`g'܀cʏq?, c▓oO lƛo1il}mV1LN0P+<<<i 1w燰`)#.H_/Lﴏ2b(.e\=ilE/ 3}@D [pDh=%B]g v:y* +2ңwߺ[Z`AG_R&sckM{/  㾀A9z۽SL(7_ǭoqUxJ>l.p9& :*^?AonTUUYIr wo{XѰx?q|I*$+|j5k`͚Է>(}M7\d \y3f c޼yk1mڴC3xAAAq@!~8KwE8Ƙ1i]m8tliٌK&x{` ,嬑g -w|sgH%WgYxyXѰ6-K`Ɛxu+XV4#Ϳ?xC(I:hT~]TM7x݈vŻRd]0Z"-l11<|=\6r VfӞMX^= ?wݟ_qֈ}h O╭/cq"2Γmqu,_x;:K^߲,Bn2%(j+$i;ofمdKLԝ>WWϙz=mt^uu=IŨ'c6)U->y+.Nͮr;?7ω/Sb9zڴTmfâ;\΢RWe#~ k`u*ljل;wh-/onIT5׮2MG{csfĜԽy7Z>$nW!9e$|o˩ϻh0PCu[`Jc)eS)Z> 7 pܐ1p O⡹C/jI`MȒI9YV4뵡5>;B|vt7ıe3 ,_>~4'8cęiu "חk2bvk^kU΅w+}ل˱v!bN %r-&D}=6Nuuqn'J ֔o>\EZիQ(^@§lEee%~a4  @$ ggH=&y ^".D[ w,5n2Q%bƶԣD$kj"m /쁲 H[*p2ulj|jv8I,T0(8hiǬul0c 3ܴXB!SrHڢmH$` ߁$:sOW`߃ńɷnx`149ճ~iMƍ8l# Fک!ߟ7<{' ;Ŀ;w# ᛓVs? cgs¸KvNWԊkmA8< 2!d2ب&WRūO*Lj_3uINC=:+WMjG70OթHMIŲ%kyϨJQd㡪oZ*#M S]Q?:P,M\ҵ~|l\ps4^ 麡p,W}*aU6ח^ UΓ{ʘԨs^0Lk* &BS{$+lv˛Λ.l*nz2@w}{/}U z|S˦aj4ܳ.]~(yGz[_-Xx_ &]RI}JHqS*gaqbo^mm[i-5sNM>\)[[ x7`/5w@oI"(˲pLtS>@7ua<4t5{6Plހ\̉iNm|_>lF"@>W OY5@1vu<Ɓ'!\IWqPk?4w~BaV|>}*U>ޞcQp`UJc +noxsp3qZ#0w<^ p=K&^د~=ϳ^;F؜-7gҠ9YQ^K= Z MB {,sV/$IY#gf|>,6\rո?ܯA8|   ;;vZNw-XS4}SE܉dmI:F&' )/mz$TtD~?gԹ> 07 K--iFmsjfgoyUmUe|~戳`{ltǻʶmssR>S˦A_[nC=A4{noKU 4?'URJ˲ ]UR)ExjV r@i4RQ%Km:RWi:UFO{3S%U),7w^/+Ur*"S^RROF-k{Tjͩ[AՏTtyU=jPZ E\y*E0=S3 zV_TŪWh,W2|:/m~=ZdWk/ZOySr<ת՘~?@?s5G {{5v޴MtukKν:WzVOPе@Ue(ZZZpbP󣟂 |5lܳNA/\`mxl#x*p_<Wy[oQ,lмa(/I;:횷p{P,Fenm[vr}x%icP<x-| 1$w nbi\^?,[ouKİi5nZ 2ki0$w(^z NE3;^mVSAb 'T C=QEX1%,R7>_$ծ 6u≖x"+Hd$cUZ yй[ ZχT]>Wв])h*I>63lIԫ.}Ս_/ tck֗i\}OܨU6uPzvt\Gܾ&S?{]_?tyyjWg=E Nj$iJIc#AS)fܘ#g"UaI,[Nj7]$2Q,m܎®{`B/1'H"▥A>q'?7>o,X* )eSa~Ni=x ȂQ[q;}~`,B/D^oסy_d|!0F<&ԇqXtǻcoݩUfò,ԴUlB:ݤ_!_?9"`p]&^wc(S*N5zf㫓 +݌.eoBM'ތ>mٸaMcX۴;^w|!8IU`ɥG";;vg\!+NL-3GwobvB^] IDATu!$.}1NW\> 8466|;X޿!`{ f̉횷\5x7Ǜ֯㒱˨_W߸g]),Uq7kۭͩH:4kG}] p?+{ u.xEG  |޽~I%¡9cI"k^j4u5"# $8 Ga'Ԋӌ>XehXp-baB; Cg`J|Ͼo׼y梪ucy|7 `j4RqjF݀OkavԲm6xsPYx.=ڵ'nؓ -?r$g7^ Nm?Ę8vAH[4MGvu()ż]Pu- ڈDrJ3'{iAINe.ǐ]9 SlAGy< iT@*0|)Ɠƕhjr-4?#+95s*cҠppr)g]>͕G^S+Në^Uhj@W<|**pdɑ8qIF]i5vvDk]0r}y; GsF5alXl\ZDQ1"f W&}ꗡ -,/* ap 1(4<?=g8eةx lm݂X'_<UcO#ዕe$ccҥ8cQXXjD ] W<I+M*ի΂dEccUI:4(e"cSmRu+ yT٬>*:II@z]Fͦ=|_J0;rNTsu/WR!?t_Zz^վܨh4jTުTDڡL ?@ʚTl =sէN)A nYzй+I] +m/^[,6IeA5V~RZ N]Qsm'3~mJڊ%K`tyRAA! ^AAGq{{;Z[[AAA8ܐ W#(JvDV䌾RNJD);$W~wL\")Du#5iHSsU]7ݺ5Nx|\bt^|G2o*IھsjRuC=u&V:V(ys\U_MUdvz뒵qDg&d1F~թu_*Ľ2]TQKFmM_w|{9'wAAA/g-AAAAA(xa@}PLe***׸w.5RzeT=DUX,Zy }y=U}poU4)":gSqj6MJxSQR*'|Si&WzM^Z+*y| U}UP^s?ZoϮz`:/t&s i>^͍*+Wj3ϩݯuAAAWAAAA0E$#0@yi0*ӤjY4y:_YT)%T>/C=u. N&2.u\ݧS:uN}(t M&W"|C_· i[| бW$I-U6}{gYV_+TӶ)M)UyJ_|ЕW3U dS'Ɍ0CӝWX)y_zl>X,qU߫toЂ   :$+qG@?u6l0%L=mz&gM&tG{fQnI@~,"x!Ӳ~?^鏘8Iնi=L6t=t; sFLwZۆ v,w,p&k3mj¯GB@&{3%蒽l:=[^llu5oK]? f``xB:_S7AAAlE     a(xa\=<OHĭd&nu^ޗ.̙>bn|t Ḋ&2=NǓ-jO6&fׁC:3$|ퟟ)BR4}~T!UTgϤ㧊N:fY2=\y;,˔)W":4X,B2ϕTyί_]B@J+m%5v`ݝq|2'uן???_;xSMk{:}D˜ RUqk Uh+   ¾ ^AAAAAQ *ݸg BkRs#U *՛Щز͇36u&%3kլTǕt"ϏzҲ:N1SrQUrE#U6s+mw۶qyB!.kyPLLlvVwLkHҴO]yu)}mXqp%5*^{)r]AǥU]&?S}gB{{{Z=8hق   ! ^AAAAAQ ,WF=7M^:oGoTAfjl~H$bsX0&ŜeY*G>0}D(:03l6zUC}`Y2c66WS,oS_k1Bt2ԀTUT@U&; |=Z'tjh4}mH$Z;P"Wٶ<+^o2ѴF:rɕ: 0)}>QZ&NڎzOmIvh.et hUYS0>d=?G,&e6M׏8F{ ݵbJ"x2Cw_QWVl zU/MT}[{UOd[AAA ^AAAAAQ Bގ WBT:,*NzTU:!WrU8[x?:x   pD+    p" ^A PU:*EjISfy㞗Tyۤse ONƕԤ5j?ҕ]|~t}re(7U,d=ugX4#UTŴl"+Cכ\J$W>3AaR:vsǕѦZ7⚿Ӛ:_~P]լ W5w*Sb~kǕɏ\׎u~ߪ?' AAA hb,.)hhPd@ t= oy*Cj5O.'kO hs˙iDP4D[d}ԝhֱm;ccd+?S^7#pGsC_i͔LL{̟~3t>guk޴ "-c-a7¶dc#M̂DxfƟ#fl-a-4  a3!, !R]r9|}9?ZB]AsBA B!B!B E ^!N^XG.`^4s)8RTQ¦Tݬx[f+e REQ$UhϮW!B B!B!BBWSB ՟PUUu|SY)M44dkm網,ˤj+Y><;*gǃE۶M*3P.+G2;MyS+8^oh SjGSfzY{]f]^*;#>H+R[gvu͕^QD'.ur ȓO܌2+xS޷~xMFυO(Z^eJ(B!B!B!B E ^!N ^3{]ﳺʹΫ Vzy^ ,Ҳo+t}[YaK?)uSe;ԏ+Ͼ?jפxNz{]o>Q[#u#UƬTqlx/)x}^S~|S~ϖ9RBՏ]+֯qVγRϯE r?R3Rq|:_7[ۯe{Em:?#|UUu}}{$˲^ٯ]!B!x(+)ȣe '286FT$,RVˬ+h۶ Eǥh7+ #ul;:*'_tqIRAvOȊMtmx Hɺ|`oyq6Jf|mY0˗v} {6$x`q`=x^#k+`DC!B!!!B!B!x"mbRrEQYzkÎ{RgQ7N2啌q+?VmmצjFəX7L:jGVcˎ+Y5{eײe)kH F DY˒T"~.Rl_fe\_g\LkmN~r< fH!?퉵'IVF!jh>\pBh/D#+^ӢqB!BB!B!B E ^!N mۆ{XUi NTmۑ^)L5LkRM|)uWfF~n+L ~/'6s0;m䵛JS ^ċ‘4g?)sT{z5g_5R~sJ@_k/ߓyG>_gJy]8<ɤ 7 /f#\L땙Qy`Q畱HyqRΫ=~qǷa.e%c4`sLΟ^qe~ٻ4RaZf5μy.wܯ;TW~yoXDaۑ鍔~"?@JQ t} YUu=_y?"b?XuOQܫ?8!B!KA^!B!q5\vA7C!W\+Wt3N qJ Ku SWñ"ͫXM}A~VEcZJ*|qy\>>sW<fxyN=3\W\|zYx'^q~Dc!ăGG?~B!D?G?C?qPWS`0 >fA>.m ReW>m  X`'9ARRA<(|]*ᗿǾ.x]@~*їo ?oeGqSk7jzqvxDATR@[#я(~Jd }v [NbF Ť~r ?{:9Q¼6˒.{fESᢤ\nt_0B<8~y{t3?'A7ChnN7ӋrFxB!b+3g𖷼A7ChnN7ӋyexYrHy(uّa&L[6f5ke;ZSPF @,RqcD*R'>eM)3#hX=p(=88uկ&jߥ_I)c Yt:_$+_lU)e//JZgyEkꍒU^˶ڔe͗Wj[gݶ~i HNǗ)yD DQB!Bq_B!B!B E ^!N S빹L9h9{FJF.UY%UQ(DG)R".S;4X"O])b/Ͽ}81֮gū/7RmڶGqe9ϣ#Z1+My q; IDATXm%1ua%WӫGϸ~hp^9uԲ^ޫY6I 9z?ߏB!BKB!B!^A}{M 47Esszܼ2ڔɝe8ַկ~uGQyp48V~h}Y&TF{SbDvW=zǫ%ScԶ>=1U˗|/ǫZSMgX_GT/+S ,0;qXgΜ Ow8^g)5i]*< V$)3^J+:Լ,Kf1^'c^uZggX>yٕ*q+`0H{訣ms4RUU(B!⾑W!B!B!^ȃWSBe J=Syze>K;{JEepz2PVF>:"rKYUUro_am>S*0f^q<_#+3۶M*3:fv2WS*jW)ј5kۏ3ɲ+S>^־,:h|< shoc"9 eu|'R z{*{%gNjE^B!Bx8%p`>,`Q2'9fNӤ5B*1[T3'L` '2{o۸r@9@%Dw}|޿Fd]O%t TҸN3mBˎGVNOE_^*9`TƊۘ-[>F5x";XDx QBVvzCcв/R{./~Dv,lQuGڷ?-B!B!B!B!+)x8x!+:T*0vJїR ZAbfuntyRz,*ps{|LgU$^Q"kx 6ɜ̗R {.'}Ecjaqr<+R ܶmGu1W+j _/fesM)VS6yX­,;jHkšYO=JSqak kQGk^~:v\W? <$o;^w~_Qb9MVWβ:˪HJh9() ^^Ss}}?ؗR !B! B!B!BBWSB]s5+gB}j#nxcUWU}鴣^<7YNJնm;*8ë6;H=P}(R76r\W2zU[nW]2i5xLEj ޢ(:~^q)uYIūWg|:k"iVDv|Dm^/N6^)ױLy\_F>f,;!VG><}ZoVV޷;Ws]LVdzE߼1?ϙR$ϼUx :[eRM˪R?.jHׇWc7U!k[lA/=o׷ү>G| Ԗ<.^iL}mPT !B!G^!N m.Rv(iu@ՅnS:"VrY9 Gɝ"H1 /UQ8+^f`,<9Ԏ^W |UMGy8Sxlzs~|mdT=Ǘ{^/~ݤ姬|Qh 5EvMy)?WJ%[f`c$+<>+y\mjf0hfR }{^VgqJu,B!P5!W/^7 irt'zxjs6JB!B?r=d#_[ë:MJs^-,z=)p{\j<{uO`Vm;*CVE "KyGAYIq[>+m]MFY,5R$d<.a}玟cO!X.NyoO4B!Bq(+iWlk|Y'K_Ƹx7WX[ß__Uxx!B!!D^!N J[V=Vz]*;UF޹})?L)_.a&⼪/O2%yfS:"Tksj*چ,ˎ7RrcբmOTpL\Fe8L`4_g=:mj!AX՘)]+^k3+׉JxkߖH]ouUk+Fns)^y=ff5_g7}x~#qWT `վ^#9?R~8FZ!B!XB!j* x Oq0}L !B!B|(+)+ߊX,(PME~Feūen^JFKӗgeL4-2`WVYz5)[/7t05HSUUͽL +#`y٬,;mm g6n߾ ?x'08sA5˼s VJyfŶ_?쿚Qޏ65f6˲)e=[UUC-˲v_dr`1HgGc, ([ثVXS $X>xJ2Ht$;WQx6GAEk׻DSdpW5!xL{yϟ?xk^3/^!k[<@S76vE?wDD+NVUUǮrUUu" ep35w>%m`|?Hp?R }RvF n"|B9_ʵ2 ?#;/o@!ׂc<w/B!/\J!#)o3~_͗B!B!KCXAG@X:;IHfvꌔv-` K5Ղ>'˥Mt iSFV|۷Qb6 @=+}yjڽ!d9\`Tԧ>}s߾xY[dYicص>)+*4yd?&" ~kҫY˲֟T2>ٲ mVNQOXL={iy^Xjc] 2ܝL& ~^N&N\WUUB!B/R !a?u7;wnc:V]++_v !B!)x8%e+"jT).*g )WT޿EޛWSp;|ٓ}\M+m)SvIX=|5>ۮl~=v.駟ܼys1Zſ>qL%*2ˏ3+MK׫.MeI"vUU-M`h g5h6ޣ>xE/Khu8\כgc\EρTH1zM=Y\a>'sq[6/B!BBBNYbMvugB!B!H+),K̎G*Fc0Y!jzl^΍Ԇ |qSJFnlag( cjȧՄvX/eWz%AmGH 888;ΫWm\U)erQ3߮?p8E/kFy)զ_o#iG96"Z[]4΋;ѭjgkG^)OT{~.qq=YB!B{BoG /ٞ"B!B_B"2}hS >(:^9ǪSVz5++b.ixU+ t>zk}y߇Tz+ÅvFh\rX5?)%c4qݬ*:FQ7 bVZ9N=I?7c4/,ˤaU~̸vOf)D}?/gYT/[K^i^zx\"w˛L&s.ywƞ۶x*\[,;˴1$B!B x8%mnv8<pxL&@P0, xUD]Il(|ДxQp-Qk+/}W$u}qbp횝(n#z=?\-JO?J^KY>e}sdvڶMoP^!B!W2!sO{EB!B!XBڶ+gRΈvTc^,V*OK)V:Sv^gt4=&=VEQQ, rm4Rbxkఏˣzu]Yr5(uc0O*e(_Ly QVa!5~/#U+HE}=ƪvV6G2ƣ$d?RS5Mtvxl.z^yhxYJ&B!JW!ϹA{փ?& !B!"B^P}X}rRn0eOJ%+Y8%to`Ӕ㽄Mfu}9{u=WRs e.KZXmjH%WUn-sEQtԛoW'1Pz_^>ܔ/*6\=Y9=xHux%/+BYٶ~VGrǁՎ^jVnmUZ"u{)#/^y쿋@÷+5ѩ,ˎo2ϷWi;))p!B!XB|Pm[$`g "krNPEQt-|m- &s@4"u'[֎T}@bՃ~h0MzXei۲/7ݹO `YwpC޻{Y@{ٱ|?oQBTۯ5M˶,y8uϾMF r}~Ϧmduu"ڗ~+ X4r}xr~ ^'~ <CRb-8i:y/q⾲8RFk(I%jد%V2G+Z <ϓkяY *3eeVfz)Rd\ߏf #_[Vy!+ov/&Edj*PV Ek_kJJJzlUje['29>Mʲc1=u}yG۶p[_Ǜe-5 Us۶5ReGy28s镝)Y?#*᪪=iyxG>\ Ԕo1)UMy :=EQt7|掔ĩD' IDAT^6y !Wy !C ^!/6p3^wp_8=YckJ$%B>lB!R qJHeR'Z{0WSF5e?We/Q*e+Oܨ)?޿ϲdEblrR`_wL۶w/Swd]ezIbE6s*<BTrߥ[?}5J!/; qJz!!{(9eB'kC N8 rd`|+utDG-cqt?.VXv@k>MTYsEljҴ8*r<1b @{{x2|<kOn#h Ѩײ,;>k DE6}QbDr=Sǯ??Q"BƇ@d-m-,BdǷ>kǾ~`6>s{jٸ! !E^!Mm-G#|L m} y'ArkwYmL &Skw[M= o_o >5BʠsdM3B!PWSWo@3XYUUGaJt<_Pvpy79mc舺?tIRG`x" D|mXA (p(wqԟxԉy3ֿ4u(ޝ۳~w,q ,ǵO⃫ַ+8ǰyt*p8=+-{Ǹ<ïH)l[L_#yO)([D*ogd1amelz:H[EDT[xer*IBDdwܧC|nB!0: (S8KgVV{uݢM ^>v3O>vz^B!8A7E!/3R qJ(r8ޱB󾡜L𾐜ʘNOȗՍ|_Eޝ\m3|d2YPWz \o'4RGG=,ˎleUaK>,pe3xaVh mm Oa>M:]~q_1[wM70f8ٕ!>7ߺ8_@MU{%:R{/ߔ{Z9U:]mxn+61 {o~>h^<隆RRtXTjG /B!]BqOVǶ xvuee~e|<9~y\a*;(g3[!B!BtWSBY :kde,R25>ýy{hb/RrY͖yGǃU'*R F>j[yQ ^B5`Y5a{^G5镉OMf>[KǸﯮs(g7n̕[]/as2ݽzy]c2`ZM4'A׶1 UeRq7uW꒽g)g Ng:feUU'Y7+ Oǰi: `ub'Rl>^ˑʞKўbs؏=?sqr"%B'nR !2 !Ht߽~ ?}߿? U1uE 4p8/2ܚukdB!R !PWSjj?VzF0cHG#W6doxee+|9vt: -x aVr}YhߍF;#oUmyR:(Y앃wc8眽2k#5xl^i|ϭ#/Vkjj?EMoME2ϑg_ ˪GRg)y},K)WƳթY {i3·+WVqz$eJeGXRs]EQtG<ϋ] mh65䟛RF !B!20Nfa P@|) >|" zr`wQbD 8 A] \ 0OdG}懏x$\SͲl^eٙrx+W?<.Nj„Ɗ,4x@Gmmئ$S)~|8mpշ- r38#v[_3sOR(I>']_If!BIքBd.߶6P%|dS1cwxx;g9wv!y۵8n޽aB!:>,!BH+)'8u)LUz$DԴ,J"ƶ N?}cWǦeY`WZ[b(׎vZЫyg(=%u'r0E_?eېyY܎o޵{@ ~c7ܾ"d&~ ]g&12<Qe#^ W,ExONB.?v:w%Fsw~ⱏ+{^gEaV{c2,' ?|?SELf> ol-h~Vjg]"⥒'N@୷nz9UB!xW!DmYxWyg,8 yw7_ΟCe0SG'YgjB00r ()BG)x8%p2VE^^Ք0Q^9~^9X) SkOUUԮa5,_yFg29O( <ж9hy__? z(u*QW|uYrA?RsDo.ړ=k }T<ٯ{8/\ϴs?{ ߟt:oc}z?B7#yY&BBXn@m1l[Y3yub"OTVB]x.0βlFMyk?+=5/^ jx9eϬlB|*{}s25V𲯹GBiȳ 8<ć|ۡ쌄BGx!bi}Z ,K ǁ'SK =7/ m|m2`/=ͺB̒^e>5[F_lƫA >cB!1rV>!B<(+)`Gy= tk GVLk'^um<`0o};sJ^_P~~PYAOJiǙI{pWWuKu{yy>?ʙO?]3'Οu8XT~NJiuW-@k\{m} ]_[_qXn-^5#}35b/_.V s_<-)}9V x\ !B!2aǜnG-`E,a|T;|5e5'3Tz8p8G}@%'At?Q"5Y}dѸumU ̂R_X]kn5ʦ$,67 ܕXͲyy5hIA4ha {k_7O\Y >;fڴ-wlȱR7(oo[v/`f1~?~ hop?:@bj- jpMY45>asϖ xÒ:٥1KDyl%!v??g}P~ln+,:s_!B!I!Cgysә''A]?8 ~C7Zb>=_O_>Pz]ox 'B!B!ÆBʲ\PrթQ/cF4]^)ʊ4pQBH%ȉXB65)?"GDh)=*E2rR`dUUV]e>|-mb,{-;o;8wumeiͯ)-\l4aoo׮稲xnru( LqyήuuFH2|`{ {yٙÍ5![w^WXoZ|ܚWdaeku)My_F:طJ$VƯ7/Y٫mځ~oyoSv?|¬Xfeԟkb)DuB!1 !C/<6cg3[x;?aHgVV ~Lxʙ( p7^v;VRl{v+}},ks;ӤhB!B!U՜Q/NՊKcpilco_rBK+7lƦ:kQR-V kTF yIϖ}X^7'2_ſtxr@~<.}f ;weQz t}ܹsvZΝ͛7qh4.nm_M`i[;x b>W[UJ_wwkZ2ć\FrxcϮ^)ΊYk{K&rV̲gĬzFjuMP!덽j ;̯>i\J yʟ?;R˒?gm nr]OUx%*p4.O!B!!^!x <;l5 *~YL,iV׶WΝyzE/K++,ڶxOFNYl'\,>x2 5ݽ߿G!tж.AچG!?R qJ`JVFǤ^fVyoF__WϗjT"W8g'SRdeeWLs@ ڵM:GZdQO}$FV^΁(kkcvю5sdsu]'Io@g_[>? ła#ʱsO.\oIlmy>{|7Xxj2Ey62_[/]i7{v͍u|9β$k3o q`6(J|P_/*<;Q$q\+J.m_)_.0O/! s9QYg388._ GO!╏B4KG?{/ mwnlC,еUAŷϭtoK ^sx׷u 'E}$B!B<o L6][;f-KF,ORWn+3N;JSV;zXg Vkcl<:+Ӕ~RɘB:J2e}GϹol`TO4(gk>v‚rʰ9q:ׯ_Ǘ%'cĶm\-&EiX̀^k).pm? {{ޛ/_ڭ]s|ѹX9 VǷ6pmB]jVdocbh9o,:ַ/eA%R .6 _)WٳIUޏ3FIx+ޞvO,Ky?vBQZ5!B !C͗@!7jSdu=Sg~|_ w7fY_om`(hF!# !╏B꺞+"-%LU=xMQfJ?S 9fQ2YU-(0'3j:F'4MG$dVط)E2+zƪ롟Ȝmnnn8εϣyVU5Ov 'J񵵵09HﮭCO>>kU ?7{=6fج*ͫЯ+~v}wwg >^ IDAT5L]jZ, A{|7OYJ\C'+.[4s)f#{r׫9[1JDgpYyg}EjJ¥EQt?N&B6ϏOwBGxB<0v}߸ˣ9Z\L=7n0g6q,7]Ǡiس?`Gy&B!p*n[L{k!Bu]wTQFy۫Ot<+A2V/S0XYYUMz嚕m*HgF`k~VRzE$iJyiFJ^U^Il/ۓiZLzYcgJޝNJ'|)rWVS[NxwίY+[;vnmŲ618#v뎕6[ch&Y˪tQOۺ5(ϽZټ~s̎|h8Y9ciyՆWُamKyeQ{<٫+7+~>\;uBB!Z,fB!xxQWSS}ѿ`8x*l>%#XgA#@Sd8`|m-|d/KŁe7×o(l];aiW௯kwww+3gt׮];cka .̯{> v;ىJ);~},0iyxR楬<|pY?+U$S[ފƅǎ˴ꊞ5?.Q"941lmEGSS " =Ndp㟕~hV5!WC#]!G^!xwv4@^XGW |x /wva!ow:&_B!Y<$B<(+)!k2ǁW \׶mG)%JmϬ*8WrFQ,eK,:^VSI&yԜ܋hGm-X hr98::NĶ۱X]]\xfptt4WZ_Ϟ=~ooo1kۨm ~s8*/Kl7 >2@UQz8x% [z~jثSZmG!'!xE ܚ~=zp?C/U֤>B!^2p(^!F ^!N eY.(=MJSc%IzgsgcUUIVmQr#,ˎ-R 3~Q[ڸx`UWaBɦJc?__sug/`?P*窪] }q]]]z͗[[[\t [[[0}駁 p/`s:ڤſ>; eWHzjT6>WkˊW{%mDZ.۫9yMLkk2K4'0+x#o`V牕<ϓ#؏6|++,yBD` BG)x!c/gJޭw:!ϣYa>j>VGהo{TUQڥTQ_#q4$f`4O֯ +N66)LA>pʙm﨧m._Xqyܹ:3kmX=b6ױ7,cac)+dyy6կCT:a&罚5ڿ/ҽ 272Y~?Wb6R3?5\Ɖ't7a]!^ dB!m0u>>`pzQju. Vr0: ^@@|y6vFmxe  hl4M'菏 Ed5mO {E\ǻp긮'/Mӏ?j W8N8I9{㲟xEo2`wwp ^.ܧ>imfM KW|;zaEMY"rS >H%Ipu]'4#mYRGdugu3l#-fYHj/=3BaȢA!bq} rk?v Ƴ z<߽[`u{kwj`u7Fam#lC-B~B!xxWSz$3+ ';>ɑgWFGE*U|?׏ܟm1:6UUuGDVFM}wض//Rk{ѰvJ0y_s|pkq`͍KU;h4'S{_ 8<%??WjlΞ=U9|úF^xtv:Wr㕢;;; .]w2֭[۷o8QC+WYO3?hgd&g\Ydo~R.٣h>V6OԶkاֶ>kyh 5<χ(I d_zq}M,S++e#ȯXT{^מa.;۬B_X7kB!^+b>MxN3{ ƫ´2߿u=TH0B ;z!B|eH+)a:.X5)L-vttpMseySPe\c`x?Y[8Vg[P5"5l4fv+wYY앳^c7ƲnEQRyvw@FF C\3NxEQE9E(@M./vƤlqq쨪8Owx [++*()3nѦq]d/~+f~ w_Be!.x*(rz ^E pu=E)QW6. Rqjնmn2䪴 ]?h7ӭ6S9R'dSRqkJ$-45WʶMإo'ukqB:ZTVbOu5_NX&ys9tvvc6m%5PT}}}W&ʣd2pg'ut")4oŰ"RmҼ[M(S1YƤA *L}qS- 5MkAݸTbƠD$cO%rr))Zм|"ysĐ(ADR|@nkVsCpVEQA(19!,=0~y, ãp|sՅ-bsm 2؉!ĕM*wEQEQEQ3 *':-iJCHW#GJSbJQ=o JǕkז+ Yw9Im'Ǥ蔯e>?RA)t2%cN8FM./ `3}'y]pg[[qN0=/&7zcc|gNj&M** J`R&IT_F$ ݶ .:C! `ږϙTXuaJ&!lO.'Nײ*=b0yޚڔ˔0(&3oC[WꞞO&UR=m6KU-WJ䊥4$(%)V;C$---Xt1%ZoV+W^|((rl(iHM./tvcR!P 30h>r. d S2ͼ=(:a`G4N )(g0*;ackk+1vS;,Ԏm5pߺT((G*xeDMM31IضuB&[z\V4)xIƕsRgR&ٲ,I'H`E&RY>H |s%%@~k(\oYXx kfD&G ~E#WFr9Ǵp] cV!kTXA*Ç{IKc5M T*kRpOV#|p*Kbjc#WJTJg2Zncگoc:J?ҿִƃ?p8vLjT5S_qUԲ ~R]K}b-5r^Aw:( /|p]8yb s0}ǻ-ƌ[o9n}Z8 ݛ+[3(P(iF` BoǠH<7vf[ԇN/ PEQ[o!, 6U+D\sw_1+v%#QQEQ*xe=q#OY&+y ?L˲|jE^T$WII*h'TTW *f^9L.GUA SU徫A^j+Dxjb <',9e*mD2p;/D|ReYUN/&WX8مS&#S((UQ4ĵ, o TN<L/* }On{O\208vaEQE9CR,TkV‮qCƵ?+EQd ^E@l2+HeF\G۾-vz^3%M 5SR$Zm&U/o.ּ_RhR ymq5zL&>uI)դ(wRKuX9Kšl{*x152XSR<\{ܭTWW5TUsׇU+wSvd]'uT9 y2 e6_2O*W}nj6jlyJ`1d' rV\,S _8뒫C/(霢(JYeaJ\]]]hhh.|wSLdZZZp7dwGQEQԪ(rZ[ Y=pɖaz:mX,땪J2)w9/zoĶM((e[z{{}?|%xpG݆cG ~D˖-s(rPLL@iOF>pؗ@ HJ l6+d=&? e3EsEevW]J+o )($x"ݍ,ׅ`˗Uぺ̘Q(r"PLru]O%&IȽoIA)D鴧>*R>FQ? >4WIe+Wyr5&5TTr%3 ˘\'}}:YnjޏD"vk varjj0)`(w] !jt6Br B!x<^= '޾4i0kV/2q+xseaSjrmw-۶}s&j5̓|EuJ嫩z Uj(/yuOXG~I~\ʻrjM ^eT"TUHq-W=2`ߛvtңWEؒ`ҥUEQ UE9 wG8)Gc /[b,P!g 'Bc)ƻOrEQeb1[0{0>.>ƺH5pߺTFkkxEQ*xebhoRJEjMR>TQ]n+J8h \)aŽ{#)WJAP(ʕ<_;MlRhb13% VǢNIm7`HPﺘ²md- &7"{sN*#o >[;erppۿHn؀=l,eϴ )EM^| P? K_N亣\a-+4yR߸x$ǬTJT\,zM~@ zz[nÕ|{" |\qHR+OAcEQ#aƭނ7f͆;/N{en ~d=wvvS霋=8 ݛ+ӊUEQU B**J#oA)ӭ2hhJxT*( 6ty+)Ix$DҚ &G,Y)O4)ȓU&x y L ضєuK{aYhEf{B X6ƯiPL'|Qz$8bC.ÇT{1]|Y<GUUUQ&;i]Dv|ɸLv2躮xL <YAAKb)SsASُp8;~3ٹZ_<+-m ښ<G>_jѠ(xosBފ+@EeNgM:>\Å ?>dk"ZQEQA2ApHGj1y{>W\f R[鳠e}nlچ+^ L0Y"ɹr6Hqo\) &cV&X?Ȳ٬>:C! f2d s8#&pN*op8h#ٶSkPCê*<ثP[[ `4I LbH&FP4]mlLZSBϓxڒ,o,WJE2͟JQuOȱL&S :LAn^F#|;y>sߖ'T}kRSÔ/ކ?$VEfz z.:˸K \6qqZZZp7?wA)R'>eD֥hEQD ^EQӄeaG4'++Z 6F,okJEE/W*v  Z).ҡ!| _gAd(q adt.|8Fwww2Dd265bҥ:XkkԜVE(rjSEQƓOLh=2eʘ iEQE9(icY*oBS!7I'zzp_&;0)(MMMk,g,D*Ol޼۵# hll)Ֆuuu|tPp,WQO?4I t:)?/G*}(qEs4wԾ,klMji^_6+5_矙kl6 u ex(쏬wKcJ^dd26Ue3rFji1&/r;X,[/|%HoZ5[RUkQ$.($??BV6Rې>C)rщ ?`R(+(񢩩 v[L{F퓖.]μ}gggk*ھE;wmO h^vS{ߏ 6(ݪ6VcC#XPL,*RJL*UH$jT24%^9`J;(URyw>4)nL&SJX,S[J*Op'HYW66 "Tr@eeYrp:.~9R+iT{庥1R)=Ȋ[9.> !:cQ:k(~t*o#Hɕ~f122RԾTu'I㹊Ju}ȱs!_P(䫇}Xec(r3H$Jڊos)X1!!r$WQ /5H~J |}M`6,ۆ/_z}/nw7;?sbYYÕ91;EQEQ477.b^t&qI{yLt-_ *LJ[ Pp.sԩS> 6*TǬ9'Km(xedJ!!zu?"麮*?zGh,cjMF'9捏,+ǽ9I.4t>Aۓ2M96&uk4eW]q\'c6d3d3岈gD088Azs}04fjPmMHZO^T4wr- _s l?r>~l>nw/#@?Wֲ,6\L&L&曎;%ݽ@>ry\΋8^>1^׀3?H9|('&=^8pR}H{TwwYf1g@[YY6,*σۜ͛7.͛@͛O +S^9:~"3mnNjH( 2Ad2EM۶)k_ۍen- KjAɩ2hז\x?m3>ONSYG0ݲN2/`t)AP3?|SAəxJDϺZ/C dv]R\Xja^yB9.>p~.rTD"Rg@xhbH$6 M?ttuqspY&{IE' -rb{ Nd. 4(O6pyLJ&-dgZ=#&x5i"8︕b^M(ʉ_:֮]pEّ_o>7 ⻂~z,]7t/_nػw/.]zķS}G.mmmUW]u̷ʓ-7ox }v<ؾ};۱l2L<ٳ"8ƲPC)3}?nc؈6466( *QEQ0~SW_6cuZ<\WU5s?5վz2e=P;.9tvcC !VVboX]*(J9477c۶m[⯏eC.^Kحضmz!IԺ*K]j MR#Rr_W˗/78vXrX㥈^d 6o<.uiMܩ(墿edV]eٔLxR%u"#WmxYH*O~fm\+g|R'UxJPRdvNJ@S#,x2!B\%M?'kssFEl SGQf`G,Y,5,DW +Z[I;`<\6 hk+pٚp8l\@q2*[>&廜 {Ԥ ȍoou׀Tr%m[>)obsǏ B~EV|{]<*HԄ?xW裏{>{<[Y-k{޽@>KJ^:W !0&mO-oyKr܃ۼ(x.}'*|-tvvbʔ)7gAss1՛g7nĶmۊgUQC(QQWtC7+jqo菜\+_]1kkTEQLSS.\׾f,CWbݺue`nlقe˖v²e~88+Ս$=ߠgQ*J/s٘>}z`ݦ8W@w]NtT?KƒGkqCR(%QL(9WNoTR]tRIDR RqTQR|pE˶xA S*R98TRUA]RTrR+KՈiRLmquOf ׉I)n4}qqE̫;_`(?TU!c;`вlggrWci-m.GFt"FP'hd}&rϙzB7RK|{+=Ee`w]y&5 RW,ڢ$t,[qIW2W+>I1KJ>~W [RMުAyRޛҏK/~u!͍TJ-[ҟo/C}&/`^)^Y i}#aйOQd|r/  z{{,ٰl?$ +ո<[H$뮻i&R=pz^ O~h ԿK.u]gl+w9ր4W-K,?gX ם;wzp^_~9Q}Cxgq7}6(g6UEQײ,/[#!l>Ό[_JEQEo}~p&gVuǢ23tҤIH$X|9֯_;%DJ/Ԝto˖- H$^a8p-y1s߾"J5c)\i_a̙3>ycdH$}8rATL^VA2A eJR82 2 4=zIG 7%>FH$X,X,p8Q5E}}mJheY^Y,L"Lbhhʘ܎架!u^TO4)!!CۘETk/RQ=4m\{s94ꫨ@}}=QSSTUU{]]]=s‰FC!|)Am<Q]]jTTThe_i4J9G۶Ki4㯨~Ҕ|cZ]9@ODڒedk1h}9^<Ə#<Ⱦ n&^S[T<)ڏ|_ԏ(rw f })2ǃ&LAXqDK cҤI6^3~VVVi3!;z͏Y7Z#XE庐kUZyd@tQG^4ǜ\˲M^>h5,3亗tI^16i-Q}ҚK*(DcX|y2|y3!mvvYoذ~2ī{\끟577ٳ{^*}FվD/)n2fWWWn^Y j|_ & ާc?)L,#oSy ?#:11uTO>Ym۶pEQG(qlog ƣ\d A#N|G{>,BcLaMg.((GM7݄믿\^ߘ5kָe͚5hmm| y!ǎ;2 6wܢko{TZ]]t:}c|՘:u}衇~Q o֭GhCCCs[%ߧ)qwsm?r"ʣx _|[n=>𾜪j^EQJƅ2AIҔ`f1RЗFL$%ŽdDT7O0s]xަ)ܞC2I&I[yt'~dWDnAcGsV_Wo}I=b {e B^4dҫ{3芄|}vWT W؆I0/@mmezeaˌxD$CC6Kҙ_=u1?CKu%Zy~lǔ(T3L 5%T:1&`&) /5?8-jTC9fCy> L&m# O29 o oyxr5/'TSD(D… q5W2[SS/^ 駟Ţ$ݾNy޽{=\uUXlϟl===yy`` P]tO>dY}F`>A466{mc̙x|uڵ#siCCCWD)i_gcxXx^v]]]ˡo}[}u2G26|(rrQ(2]>,ƒn\މ:pCgÅ"+q|_%CTWW,kz,zSHb NME λ(/K/Snٲ7n~⡇“O>...-[[[=_|˖-}Ü9s0{lc"ף!l= R`!8td~ŵEeZZZH$T?\z3]*{|N)8cTnݺSr7Hqq8SO~&X d۶1gY+7ފ^U +A20)2Œ̒'=eTR=TʷTE"^s%T}/HUյ\L{r{L*\N\!Iϥʑ+h;v>JTRL޴_R FW+W9|8*m!dѾມepSXn}tuOʼn0bLi?Yӏ}}X7c܃U/Cèp,+YQH ײp )s8w/z1P-;<< ^^ XOCyvڅ?իqĔ)S]`4|{"H_^Scyvvvbҥ$_f ֯_SJd pΟ?y0CJAUˮcʕXhO+[n$ W]uTN+ǣT}+D(% C?, .;@!=2emp!zVW7щJ'v|Mga$- S0PS>KO+(d vvvz۷7nO<1n| >,`J֮]3gM>fBvXs`渮S;n߾^GW_S{vuuRɱm ,( ?;N΢$Wsi91̾GR460-y!Eǎ;0o.R|3'o>׻eS?..ص ͇:`YYmkgBc>_A]&ꬃ]`q0;\И͕JP&Jvɓ'ڼg S@S8VB!:ʑ$"n OUU"_4Xʦ+{y\wm#hUT{\ΧJ\y'5)%r-rnyۙTAN~Key_M"o!+ ,W[Qe"tD͛7cݺux̷o񢠮ɣ߮Oߡ_}U;~&OlTBR6ȧm=ys(9gcĪUՅjbϞ=>U&T駟ƻn 6`Æ '?(7 OI,-'x衇p嗗å7M-[hkkCc;)>RaN),뮻W^y%w`ƍG!d˗8PRbOU;VL\^@oG,Zs/^UVo;ۋn޼L&qwn@kk+rӟ4fΜÚ5kDKQƍ@\ MMYY[ϚC,aD 7⢂ȫhob_]q @_d 㲡 c[8apk_$תF-"WT੪ʠEQeB܌;/6mڄ+WⓟQ%T<,,E"U^(袋祂3?>SP|^P.' _D"o˗/PnFe R}ǎE׃ؾ}wՑ 5y&s;&eLcgg'nf|H$riWWW/_˗㨂|V T7ھjmm=~s#s9G}2n9oO& (PrF{޻+`G?*7FR dY|HeY/&TJi{?,!Ji9VN(;yuqHo=pnrWM _(vMtֻJ8s&_r\"⸸6M7Cyv\.t_-g-P$RP Fg,߆xAKs5u۫xp]$1#dcmHb SR˕5Jۦi[W%SZ틄Yxܳ(+{6\o&eTΚ_ybyiy^m]4/ mM֗f}^犢(;mnnƂ qC|*ݸ uZK MxJ HyG|޼/:00K}/z)/(F4?k@~oߎfgsKwchii)뺮mmmK,+OW+?SªU&M}2eʘ_8[6i \B6kx=염۔ Lm4<8^/B&r*d2_yS9aa @,[ l\Xtv>KmwS/@^[G杏{{P¤!8e!"VX d_K>F4EM XV( Jڣ9j;Mw8 5{7z=|mٶCð|@qpRȹ.2CNlqГ.F4,(y#?_ \Λ8/_ *X.Ys% TE9CijjK/W^y/9+'x/ɏW^PݺubE(=~0 vpcc/ f188 ZK~[yҮ;VX1mMp_gy---iӦyV|~lmmM7X믿]vyIѺq" Y/뽄coM R^׮]/%1 ,wU,S__Eyw?.KdK1WBOOn џe,F)\ԢAQ b``J/l6w]Ee#i&ya߾}hiiݻo} ^z 뿢D#}߇!|$q>x[.Űq ۧ]KwIa²,_@`-'}vO?8x𠱌~gOc۶mH$^250XFMMM`_{{{#~NP<y{>|(umΝ;Ϗw}G?u]L&.<@r\+xI&UAB/T"WItK4F}%e=ۥu]_R3*kR%s]ק\/To<ӗ}Sr&&1mhR[A6 ( { ۶>K.pCxdӼAkb.^vr#j ]۶†fպZ mD0FS76R#?ITd2HB8XS"5M]I56b*::q޽>8; #\Wޚ?.!o@d=-8^ fbZR}B} U:?~M}4]Ɏ/p/qD~L2H[666Bx0en:8w{|v./\BOuup h6XUiSތ',Dr0(,^{~;\+W׾1Y~% fϞӧV9\! }zK3w\|ǽ[u]%K0-g/e@ȤkA)bΝE 3 Lر{1HSЖJU`\LTVUUcZ'4:Jv 5k)'4iRх)i˵(e" ^&fO:;O} _|1lEE œ- IDATd2iul% </3qT5yCr)?ukJT$R ȿIKmO) :ɌKKTYY#̓~q?X܍/WIKTzIYeOε۔HPp=iA:qPeN,0V+"G+E^*iiΝ `T%{nR)0oҩ4pOj:4H1U\Bq mYt]\w4aDi~rR Lotu/Y`:dsk9.^/ʚLt˺^)dlŋ_V <쳱s1믫Ã>|#c=?d}cxᇍp /~_~ٳgڵkq'/c)M={6^}ղʆB!os=W=eMpt)^|EL2d`{έL$ @Qݦ8&T+!׿Jus3aR}s`AE҂KmG}^WW%3nJܖH$p]w _1 +U*5>,f̘Qoڷo 444GVI"3ƭddT tZ(m'a66bXQUv]Ӄ}3ORϏMzM^b@ V.nhtޒ!(,\6lwq/^}m۶@"[cccYR R%Aɓ'/Ν;> f͚U}pEᬳ*+ 'GKӘ:8 tasxFM b /0D"Q,wYrr2l&rvs9߭غu+.]ZYkk+nV|ܯRc&5p{{;V^'eg 8^!SXXW9inn}Q۫qW `ۮࢋ.B8 /Ot7o.2yH%yjU*u,)!h4"}ԖIqJ_2 H$S;|M ;T"r5])5TJ.W /YT^* /x@^-LNLĹQnUô/rM8Ss8 XFLHB=U>1uy\캮oHT%=mOV}Jo8zwxxSrY31`7qH;*+p(Eo" ;j.q<VrI*4x^ǴT N9 b7?ȧ:=9ܿ8H >>ylIE}&{+f}<7Od_yҟOR% 7 &˕(J0\KovtvvO~_W%ٻw/.2{c*B_5k=\lڴx`ss3n"={ ?OpWL=^%P B N}Wݶm[ɺ˱w>:vr===Xt)ϟ_pE)+mDp)%x;S%޻k|w%/p+rcc^zsA[[,XKԩS1g߅XS)L,T //bG?Q$ cڵ8x V\i,M6!HƘ߽o]hhh5k̗81uT͛H$܌~+6rUEss3 u` A he !@)ۇe˖a׮]EKu)(M5fפI&tͶm̜9+V֭[}cq4~7n,yq+c{$[c%Ym{䏊*x3k/zl۶qMM >Oz_y{`,YW\qŸ+פ?TjrT+p2WJL_< _ F>f* )WJݠ1}'/>A\|4WUR(gT>/O~:4T7fYC6vgs(>ֆ5M^[[4fq<W2hSȒXSt:]4~>ց4ٶЕsz R?w@ J67a(\|EQ'W>o9xS& B`awu5olAag4,2TNiLa,I#W ķm۷MkS&^j5aRv8Kp fE'4_rڝ+x/_A~Ί(ʱԄŋcXv-oݑzJjkk1cƌ1u>oll,|ݽ{7޻Qyߪ>L'+W$"ˊuf]K͊v]eyû^X9,(L`!&@Nds:~j멞&\WNwW=zNj*|ǚ5kjQ˃w*Ц&mBdɒ*,}4$fD}ǫE4_ Gw|_A&Եwy'VXoǓan{{{N[[[LN?$+%0p뭷[onҥU޳: >(j|_Fcc#7pì'9Tha Puv'}йs].X(oK|8I]V!nU'Aft:8$Smmm.ɠ l===ߘV<mʕ+dk<gՃzjp);Y mnnQ2v\;w-ڪ(sp稿a[mkgP%h*Էx:cXmGG߾Ū6n܈??v[U"~byf|r`3hm8,t馋X1^~OcIC=>4EpYO/'(Vb=v$C<`l2 юgރx;YΗr\?}m3'ylKr p4H1+(AAjժl\p+O?4킲xO<{G[qi!qn ׾ hnn}݇ bhhw6m{gb߾}X jg$ pwq=\?/}* ~&r M%iGGnv|Ԫ}O=TappXl[k}EdL'(P❩Rv~ĦMh"KGܝt͛}.C=T5|dݰ`իqW+WyӚa|cG}Buu*E'sV6Z"uQՍ8w|(hjD>]\WX,ƞzl٪ ɦ~y\<gi&T%cH(Aq(@G2 `&cja𐏏NeiUU OkoueaCι_6O4FԹ:z ѧC-8㌀u 8pi3DKK ݍ]v -7MIcc/5N?t,__f\V-fK<g}ϯy1ZE]+89S{ mrI̔CcL&l@uK&~ꩧPK%=UeSAUPXqjx۶m{|tł0$+ )a`WI!Ccc8ct E+_`c~N#a;Xv0 x)9.F"p %">:g͹nA6žv*z饗nŊ~@Psx@L_|E?QQ*d2-L'/GTi#g#CƘBUφa`m҂EJm8{Cxz޼\ͮJհUU*>hC\yo|9[*:R?6F שJAAW ]֭C&~hjyJ|S;՞) Z_px;ށ.hF&|+_77Ļx^)l=xGe~ `߾}ő&۳gϴsf2&KW+h>|vzYyxX}x ]?NajeG œD# E,m d0G)<^"&~p3 쭯+x:fY?!xݿhG{#YpRg+ N!vZ}Þ={҂{fU{wZX?~۶m8S۶a͚5^tlqYg!NTGUVUu' &c=kׯiU_O?4?_oC˗h4:%{ RˉƍW;jvV!CV*Z% )ugUyw.9jXuƕ_g*0Yu?bbnÕ<=O-0WQU+W \-~}ah43Hqy:e$=Na~T09TǠX,2-s_kLWV( t0&@i^Ű7<fs8wuJ驍޺  2}~?˗/0qn>::ZЀRBۏ|p[ t6՘Z_Z(la bFJ] tX<4 ll‘5F[UGopum,rY؜ S;Fx9] c~ty||<VU 0[^W߯YHpRaϞ=86gFUp6l؀ 6LM'pWYeGGZ|_֮ $fɠʬ gÇ޽{Uu %\{ 7^hg>ٲo2TȺ-܂{uO_+;bx(jGXޚHWiVF?<ǃ'R)4Òxi 0tAO:t[R7]P6ux?rpU?~cIQފ XUJ^;'l|bp1a`k [ *Ax<^ ̌XU'R nKZHWݏ)݃~N}u>Âe|`Y#Q yX +54l2߈ [p6v[ZZm.n݊y8S3 Zlݺ5~0d2X|9;\aɂCGNWU\}hmm .N.is=ׯ~7Y :100`z~h<wlŊo3a޼y]ڑz׻OVM<ӃkO}SSp!^Aacx5ū\m63:⮋K)5#DG-xLAMP'<0',^7ďZAh|tBq8*oL&.8p---8sׇ!=SSqC!N# JMHn&Lt.d٪`yVq5:;;q'bΝGARZ5eO#U>UUpv <:::BSO >3U-#{Gņ Ŋ+W]uլd2 9W|r"A *ն\ˣmJ5UjEDs"s:n\*ԍj+p(]"fS1שu6 =cP|U)}JNYac:Rj,v IDAT86UK<GP` ---7o@Q݈+o5uИjӿa8 zM} d|)=WF"K%AHW|Ôj n@ VeM,9Pǂ|*=L K QU:Բe ¯g|JR KnTmv9aJ|z  DkZk{q ۷ow]?)Okk׮g@]}}=ZZZ0880#N6Tp: Dt*l߾}1Gک•¶m*{{{Cٺu+^y)[K}k"^Af6t"ZQ wŢ(ێGq_7:ْBߙX#z144bAtk׮߯]DZ{na```jjj0֯_?؏4?||ӟ7tni7%.߿uIpWGa&(CUY%L`͛q',:u4\mpp0d25=c *ŀNK `$S^өиҎO}u>m&3~=?a hV_ü>.rPs*SM̕H$Y N]LO{4^eYH&Q1W7x>:?g:o EK X &Fe_5vJ8vd^AsT`.yhmZ($M5 #n_\ ^+ a>JN.~1J~7W766>X,  +XOIغu+n֣Nq]wi: n馀t0a6X,4l1w"+VO<߲e_?W0x~z|s?*ghh<@~ ]]]ƍ~)y s  gU.W,q%ZsgL(7'.'_t6:mÞO  ,&nnijNav1MA$9?|Ax#,|׭[W ݻw/zmpoWPY-j| qwc5Ht)Gz<$v \l!TB`2*u`Æ سg."3 ZaѴZ`b۶m3ڿw.msWWYva]`"+V,[n_}^xaVo.9M@[zAưԆqiд݁ڟNTC^^.훂- {h/WAJSe'J.$ODxSIj0F~XT̊3>N4?.4ƃDnt[H$? ]ze4<:.0lH4_ +@flxWaf%Y3͕j\l@[ϓYpI6&υa(D-8$Z* J @禚'u]qZĄyX8< 4"h.0|xx^c#^L% 5ۗ1]t~\P"E7__Ki ;~Pچq:  1Ls={҂z 7tS}ݿ'+lZKnzDmyR144 /+V_3{4t훱mB}}=/_>`\ L<%3<_xHK&?HWm2:W SQ՘.zdqVDCT- Ul?|N Gta*c6t<#,ɚm~UmS,fk^6=Mz0hm16לŒ l ǂROv L0Rfmk/AAfZk׮ŶmېdvuLUffE?pYg @9qM7FCC/3/jbNe\yXxq pFCE/Gʷk.կBU^-܂}s= LӬRvqe&a \ $B-X%@ޛh4өTRL=sb/-=: _XtuIxga< $y/s55LhF@ KEU}}Vssmn ɖ`e;j:Akk+`޼y/{g0 *q@M멬W8sI9AɼL.rرn2 ---U+ܥu]xW~immp`TQ;fJUd2.A 1Kdv0âb9w  XXo-GA@w4X3GLܓLםaB@JK᩺>4<Ņ kKaAAAm(֮]ؽ{o3188&رB{sUٖqx9ڷVM7݄O}S3 x;ށ~WJ"ӗ`I±xa`YDӶh ;)V.W}ruUrJj 򭕉^ V8WmZSC}j"YʕTSЧ ~ǁjбuQocUu9&W6.՘S`yr@\}KJu޽=^G{.]D"{ m Øñ^jmʍݻM4^@Xl\ ('ASO u]cŲ,S(❅"ıG"ؾ`8vxŋ/_Wpoo?R.뜏t#Z,bQeseS#\Y<azrtOGYsZ'^u֨vT9jÓpĉJxi8PJ@hxdRxUS X!z*7xcf42jAAA8ޠ5kkfV7 ===Xny*NPB:FOOϴN6QKe˖iE{HW\qVOWK0T{grEUq/H8YG% K |(cXT*qP˲O;*퇂Kѩt*kyPMGaIJR'it6aS̏Y_))y< [DZ,t*ήd#%<.\A[q_"yH6QIvL&l(YMx4\L8%û'n~ЀQ/  5P^ڵkn:߿wӦM&U^袋SOaݺu>|xU"h"tuuѾ9B<תHʎbRL)À WQuz*<(JUZuU9\S0%1 P54W\KҖjzM (u^z8\ANuڶ]]uJo=4 uFx9!Emu=NH%r0r< r39M8  E|zh:ۋ%?.[ W/MoKܮqa|*NU7zjzBww7U}*R5:xKG(VPo<N. Wr5Rf9`F@i}= s$̣\UжmcVоkWSE~Sl  z/ Jؖd|5,UǩPkh4Rx<N.X_%(HWA8 4=cy@%Жs6k$FX,w"j]HJXAn%aHH;^% G8a%f$7`  VC駟W_l6H$뮻j~lU&W 3QnFlذt\$+sJSJj3>SbȤ0/Wqm}ԿUa{j<>\ ԓlat,*ODTrwh4݇y2UJuuP!?T!L=_Tt;u=MDUDe}垾Y'p]]r<`<_<e;Sڊb]p=z0 dq%NJCf8lq˲%(VT{ͿR`۶m_fׇqpL8 :\7I愺}؎ 6 RGu Y^oJfu_|W*:hX坛fԧɸ;/}I(9<MkWTFyр VVS[ Q]V"(T]m^eaIڨPu+ *OAT AS hr.>OXmh40u&,1:>X,~v$1~qfp] \44TݱJrG"XQiӟx=K_罉 @qP_( *k|>w{v `"mh:t{:v-̍ð<4zx/(_liƢ1,Blw6IAAj‚_~9v؁~=в^~PԪBC03I(\FUJSM\*xy]0+Y]3L*Vji|`i:@n=A|&!LlUITTya;?S QJQN̗)dS> 0etpq-ed2|1Mɢ Ü r]|p~$sjQ|b,Zb1h"C~q*Js[mS(Bkuo z) ʯ|.Za \AA8Hۃ. W_}52 nzU׿qeij~A :G%Ձo1 X??:Tㆉ;[PycyD*e=y^<@_,O+0s;nx^v2HEx)Ǐ 88juJn-"!Yu]/OX5<,<>o^7AAAxԾWƺud|8o}˷|8i^C0Gr+NףyWF"PU 0+UpŜySzSS.o+WQ1@I)ڐF"Pocpޥ E=|╾*%*E>THEU;1NUO)TMi`;܇x]֑UAA'Ncڵ5k`ؾ};nF_$}k!^A#r9z=XUu,_$|ɪj\t]7TuFSޫg,Wq% v}Z+T"=+ySU,'cIۦjI {rjYhWr!m{JNUװuW3 L, À?- `_2R=J؈f@K]샯u=S(7(R$X,=k 0 DL8^@dJ%?Ul~ ~w57!_WJ9NMgw"\[[D"4.{m(5U[.c(ʗ_#y=r_p4>tnZJ.lE;*a:AAPI֮]uaǎxpu׉JW pO-`,b?;;j !FX N.`Š_ kj▿G>,ɢZ2Ģxs>c|F\YTwayK٦& [Nr9pKEH:AAA86PV^+{nk·ҜMZ&CwAAB^{-n#.kppp[&HW4) 00K@F_r AAae$tˌÒf& xӄr<Ыctn@4n\ g@ac{|Y=KAa|A5hO סZ8QzǑKxg~M 1r$ #iY"\%XimmmY R{%XBF붷?c{8ƒz(<܌&sYU-f~te_?@)˖T[1eY8LCeccx+_,3<`WΗ~ؓL"wc+}xn#bFmځnh(hWm ^_u-5ڡJm mF  ‘|v}1T"A <+~JᦖfgK%mxDo)UD,.GrS.Fqς4wa`yr?0:l(9CK HTbQ[cO$d"-QyPZ G]L  p } O~\*p" ^A#Rk\ʓz9Ur(}KMP/Wsu)n6_LΟΞũmjIUW$̶m ; ,SQ&FԵSNo.A /`᫯ᬿͮT"ZyoY?ņzmkG1â2Zխmx[a͉86["9l, «1EqgclARqfiht]$ ۏŘiѴmt_On+m,FUM!lj* x^'=Wxy~;j#\AAft:kǎ;g\}f5{a"^A0a)fc1nlĎt8V> 0Y,b(v3+gohOS'ˠXBd%q,<܄ig,tl\; @aǭ-(&AAAc o=v !tj6Am;<",T5PˣJZ\Ua~'KUTvNsOXKW( =T C &U<44l6bH 9Xuʱ9f˂Sk~,j+Nh_E-U>  =Q nZ{蚦j\>}WUkUKwڥ;_t{ʉ  0[\s5;188N=$+ b$a$R Ƈ߿T)8^Th,h(V,8*˱cx1924bcS#V$2KAAޒi|_5\f7EE$+sq|%WRk%RW~TjT},Umj)]u~|^U>SR%reRRP/b2\HǛXu66t~:U/\۶x9mkusW$|a"}V?%%KAl^mds[AAft:~|O.^|E N-$YAа9CC0Y9~+워.#nniө$DD)  ›g?Y_ vBOOϛ, \׭RqkJQj@_3LYIW|y2on.]B8+W6pk U *⎖÷Ud`UeYft yu zӲ,<_NNMN>TQ:#Wi$^ d]8W1(J~Ws歪Se۶6ՋKLA>a!^>|<"^,bbm ,xWq$+7wK3FXCv:]=~2Y>tN H,L/p%q9WXz\u>r:=x SD)uMͥR)`SkAAhj*|+_??UMD+ %2MԈR%47vJ޶|{y>::+IpfȟZAAA') D+s.*<]R0E%Ur%U%t%%3D""*ܸλ'RP\X6Uui=WqX4k/7u ^f::uzϕJ=Ja"3,$ ZZ\|f744('~%?q\>:0V<9H9.*8«qa8z+IޔU)UKyu1>>{sC*â蔪_WA{bsm ZDjzsoZyQy6]T{L9)yq &~ӵ%?   MVZn k֬y" o)^Zb'dX*!mJrp+l+&́,+]AAan2 D8#(s&+x#Sj:Z,}Ui+VK3V0_\eU\By)1m;ʥmj>3jY^T)}[+U+:CuLbX`칪*|~]U|P)wMMMUq[۶aYvFׁ8v]PL3+uSr+ 4?ТE~Z,q \vpphS1)g8육uQ_0]:\Nt|Vms* &eW=8߇yFSe>)AA7Eqxa@u*l:  h*Tp! ZWh]!xIu%,% ;!mTuDi4ˬ8lh.{ܪ]4 CԢmV2ׯK< R$=JPQ(Â$Wa x{6;aq.-H3A=X9 {%@)ĎS{>^k8jV]10@ӽk`B!Ubbx5x(+!,9+X6N+̌4M;=3cɐ)^^MNJ8%KJKr$ IDATB(#k^ym/Ĕ^ܥ*hNdf+ٛodW_k9ۯW{pYVT>~2{  pL3ɕ#'cee+W\ϟoUUheܟ~l>.//#k8Ve a6/ǧ9ƯocD*V#vz>u)}uZ1EL-SvkyWqx1 ]-0'B!Z~ ^#!xp_o_A}hmky.uW r_Y5eYSރ7ie^e?Fl -S?ԺjؼJѺqʖƪO5M7[`cN|4jgyK/!p p &Y0WpKuAQß⏏lȑ#8z| C}_ ;njqK{Ox,_wދ~Ҝ=?5S {V gY֩f#M>v4B!wu0pĉk*PW!9rni? W[3 7_? ܛodo vEϕeg}+et{2c5x !B!X?~I4-O^^敥.R38c ^b [mU1Xqޛd3VyU+4K)+Dy+yl :x}=[?d[yo,㩲Ã>y+]M쿳D >Fam-S}RvwwS:^ `Lz{Èm|YygqgB!Z$k' qHo l&|t 8Xo{>hfNKsRQXȰOM[!x<De-Z6qx]cAX6b98KdT큮k5F`0@W;v Abo}H4ݯ{8#G\| K&yu6q6z}d>wKKO=eg3v +++f^YVVM?yķ)Ē%>j}d^`K}.߯O|2K^_?NlrlXB!B_R~B!^nQjrzS|.D~qlaԥ*R.ե]痓*r[$kN*yals,+wcI=UU׌W|ǒ^UUz2n%W[WЮ7߱ٳg~F'޳a}2d+p4[Ia>]qnA`Jv<7ZZ{^f}z+WC''b% ^V Sɉ|=yfUloԁދ8WVd.dW'mOӖW&ϳflYj"oezX5iĒuyVU,[dU]|U}W!d3{=<[9_@Uc.^CpW.]l{< ޸ֵk{o3].f|ɮ5BV*NeP[[[+WB˗/cwOFZ(ᰵ?B@σ{~^~36bJoe=ߏon߷K.+׹.->{Q67k ݵ8B!>}?S?kvbܿ}B)[]'OǞ}eϟOQ0!B!x5Ex8Dx5ZKj t(Lj]^1.R8b5VأĆ#emL +XAȾiΩEXB#֏+-;ޛڰ恕׶yeecgE&{ZjEŒwK]! XyBܞd>~-KO`Ԭ9}sy{Fqk~O¥ ܰ?NHE-UcϟGy<]zm|*5pf2lqziO:_&t U5k5sL=cU`^I cnX{?>>ڞ~~t,kx,Nop_`o,ƞB!BIoBq]KoY'_,|W6ie8X^]_8q׮oU?з0ő‰ }&޵@2NbK`Y&8o^#89o=4EKi J%B!UQWCj:V5+ֺn#MM镪]+{z+;I)m}}I4L=S"??\V.+4m̓ycx>|"|&5d} _2Q5$)27g#>pEǺWC<^Wl[O?8v*_+gsŞu]%2Ɣ;~V<9g׌F溥~eY֔3]n{ߛާX!B!^) q- hqA@r' 38(烯80O]AE|`&6F]O d%}J|BX=+V>́;ξ&|y)">su~KXHu,MUXV8]H +81PV%pi BcY^6~Z'RN?H-ތͯg&f_g`u1>?LZqI攂`O{e"鶲ɤQr=>xoIx<+Y]hmBs0txU5+:y.jgGևaӆ+ ѯW6+q3oGxuıĔB!Br(+⺥)q86>ref~u\s[]~-oK*n Fo xފ+W,.w8#8:|/$ ͉(uHi}C-n^a.)=ȟy4m) +zg^ ^>=?չ{B!GO^nWd>B!K7|}K ; +T[K.swǸug5mke펳(" {xß9/q]~ntiLNj7j !B!)x8Dxm33|Y,>cVVo:i=|ʰgoj}Y=*?d_+ +x-qy$}YV0wy Mle$i&oVNӖ3Esئ=v};M+HiOn|twd|v*^Wd+JN_k<o:E]ÿVcÑ'*Nƕi+n>I8x[E},@m,J c?]׼!Y;2uT}GqOwd=̒Y<XK 5`)¹ɚo'6-/}emg%0hpKY:ag}]Ǐύf_olY1QOseguЏ1~DhumEQ4eb{63K~~|H/ ޲%Ml<.0fo2pc:B!Bq(+QMjl uó \%п7C^ѕ:j'9Eq/^Dؗ ? O{._gn8|":qkg]x|m|Xsܽ}`3B!BqQWC'8b2^e;j϶1u!+cX}zsrvQ-?vm|m s#$8P'?Wx S7`cw,_zFJUeJ| 9ybxuYƱćO?=^ud]Mslw$IK*np9{B!B\ !@[{WmGwNPM+җ6q7|2V_,Bz28Oi~&l7J&B!x5(+G>>-^*Pmп#a ,]TWH{1MkG%U :p3 x4ǀ,>n֫jnt*Q% ox'_\YfRemf)ɓΧzB!B!j,<++Wv`5պ[LaY Kեch4jy6;S󼥔{L?mikX5Z1E6 m ,˖6DVζ=YMWy@T+tLY5v0Bya\J>}sL&M_6ujy!M_WgIٚ=_7ݟjY_ƅ,Ɠ{=ەeUUaee+Q ? ?6.d]A IDATe)~\i?<+YiSޞYae3zҕz+{^AEVՏNC׽y] !B!բBk+Xoew`HuYBvQ(KlA/ 1L\1ܖB!BB,fP75A~Kix%.{S|4YUyG*B|xwoUU5 WVuݔWVu̕\WZ/*ޯԏqxX=is+gc*cByƼ 9WfYH]]zN9^y)YiQNe)!slfp4Mjkwgggz?/>vx} _z58n=O `#oxx:N8uOiڴ7ͫWr>6F!B!x5(+!' >J/% r;UJ@Y=-8[# o#9eYg@8Y6G]tx~+}]emLɳ8X]*oK.[?zczbl!d6+ HP=9ac~7*^my ګ-!={E1gbe$i?'4e{~iA-xp}ok=͡]Ius$oS=cs'i޾fmlKB!ji3 !׀sy&@UK!B!PŜrUt(50o[WVŎ$/Rz z^Kf^fxU!?.m ϔs~XiG}_YWt)xuR'icWs␏s5"Ne*Nk3ާTL]=\`ti/k]ÉRbչ~w6@P,8MYdb|m[ Vv+ڲ:fe+1w|g#0}kSa VˇZVB!BJJ!ġ&9 ,1p.uwB!B7R qHۛS̈HY՛+άndޮ񾥬Z3|X5Jژ׫XQj|]o BV1j~e嬕.Cfp㺽օs^着Ztu̓|jvy!B!ՠBCry !B!BJ/>K<7ғ^1ȊLCt)ʲl)bJMw^ Ujc#֟.5R"w"2^QlmzUîse~/=W9r[VZYV|d?gs1F#!B!+E^! >UBM>Hau%?΁KznN]A_Hj[#H]㺻2ަs0@dSb¿='6|?x\_exX-O>@ @%Ȼ7!Bz֭c;֛1,8}u]w&. #'-ce,Bhc rveY,V T %G>h诙L&M+1 n+;mx,`5/,i|`@CB!BBշ4o稶i%PUHA@U`Yc(B!B78 qHc) 9+|"#V2_15),'b󊽮#FLEjQG-xvzq,V7Il7Jfyީ6,kY^p.tkg~D62 XB]3OQJ$3)w, I^5V^ll%j%2i-e,~ KMn߃D5/`NUEKSW+0^إޠu1zB$ymcz}[8kg*V߳<3|-o{0t*<- w~OKD]D*}dEOƾ޿t=#"Ey=+v~'?O<ֆ)}2G^>$B!WB!f)47{ WyjB!B!x8$i:b͘Uxܵטr+7ҔsyUU-OVV~+3VzkGeLe>~|=]~Æ"eNԵyda$-U.9˲fҏ+MӖ:׫lL{ OLQ5W[ce], MTyo G7Mhj!u l~q EQDsenjcR{TEQߏɲlw.{ܥmgYu;N1̹opϾ}~fY6۟R+{^C-?#b vVyX+S+ !B!ˡ:\u$WU,郞}8EI|۰~Y}0of h4jx~Cc֋ u5B,qͧfq2ʁ,7~,a]W0t, u%ֺbb3omwK!v=5B2Gd`$`je,'~M~$dbu}8L:u6?LĂ/H>#lEQ<93B\,ׁ]! |JM!B!^ !8TԠC!B!x#,WGrVbZ ycǓ;'*RVP4MӖEUIZ=||+Og+l<[Mm&O#ǫkWUլJt̋g'&d\pb ̫nY6fO/S2xl04Y[=8Y<5@1>eؘct#?'[j㘕 !B!+A'!B\g!$+ǚ2GC^Þ !B!xQWCOH=_YXE=VzEp+ݺwr{ڴrK3{fz&$E <<1(){wz&-ë^ ̊F$O&3;w.3q =<ϋ̫ٗ:RMzg SD﷼ծM}z>Y> *yb򹇢u$i)y^X uzNŪK*S0Tw_l=S8\oÈ%mcu_okkclB!吁Bq!dӯcoB!B\kUv!(?2([ZZj镻OTzu++Xz\TG˪Zcb5WrYSu܍yZ幈w޳֏ h+Db[{֯t:(y'{^rWvի}YiѨ1k޲^yk:~ϻ=镫Wj_|3@UƼ8Y~^h(3y3Wr<߾ :M!B!BX3Vy5XL +"Yq:N[jS2++N'I7+cJD_մ+˲QY=^e3fl19xu++2ؔ)ٻ5YTVWZ=HkPsb~~OR9l,[þ<9T|TUպ턅_E~B!Br(+!!˲V=3oqy܈y[cn| f胶l,X냊]q8jbv/u4y]+Ŏ{bAml큮d}>d֐t~MЪk> vهeAfeM;׳,C[mꋏzAT/||f`37ϊE^ەxԍ>y^YYi)>Ē~MMl|}]mii%bey~sQ!B!^ !)΋?==$wag;f]e⯋%K6XU[z(̑ <{qZ=+[v=h%}wb*W볩~>'{-MӖ;sl1vC ^!B!ī!y"B!8 *zg|{^KUngQeKɉ4mlFAhz֚ZӮ9%{]BKk㏵Bh];+^}B;GT_^m-,y㱵bg+;N[qCk+ װ.`eo#l>RBsB'ICv5m?f_,/R/?vX퓸3+I=|~.UUz.uB!B\ R !0\} @=Fw}mB!BIF8$u=,cu" 7$+Un^ 9Vy%1ּ1zo׫mY9rfqX1]R@:+Cc}*îymP/-+o͋N-'R4+dWvyAc~ЬV^y]Sr[\Ǎr^kx*Vx]lMS͵6f(߇EQ`A|t_{շI1#LYܬ8P4``Q,--WR|9~M.u{}c;>Gc}B!BE^!␓njdTB!B!f(+!,F;^U ޮWOLQ*ŘgebZS-P㱱Z(/jZ~YMԉ^VvOךyoV$o#e|T1O$*Xy{,wgV~+e'0gN$ LWx0p6>}/ڲ,PEKد{3|`43]~^=+`6zy,SUUˋ|yѽB!BR9`KAXƾ` > \_o@$$}Ji}-[=t=MN{ 8IDu~R,P1bl+0kqvB6>VWA.X}b?59YG. @+뗷" 3׏oسe ?x|q׹$|>1[kKp6!B!x%M!8Xn}B!BqWC?*96SK2+;}[]ǔYZeǷ>w% 9NS r_c6 Vk)1cc֯_y,«(_nuoÈ)!'f3Yͪ_flj~1 qQV.JB@nuU!ե'QMszqOYq=˯$s}s(!v 6F^R{ ;+9}K<ϛ:y'Ik_= B!Bq5(+Br'@/#;udw&_F׺B!B! qIӴQɉyL^!N򡭪32~lbެnwWv{z.JXfr2˲/v}.Wn|~x/x-RzܳתR&I\oJVF{^sfWB$IZ SVWUժ;jaO׾xUv$"J>X;v)˲D*`{?IaХ{_aU|ڀO~,R~϶_c]?̓B!B\- !5Gj#7#9~2| ȷmB!B\P*]7c{Ͳ*{EZ]fh-c}65x<׆Wfz/X_'+4}bjTjo1+hZMVzƼ4{W+ꋵޗk;s{\zD[&IJ^^՚._W5/ۥ*׃* sD{toDzZ~U@q,[:hx£@U *$n~11ޘIo}zwvvIYuyOSXc](ǟW!B!XB!u!lE:h}= $+B!B\/(+!Ti@[ަ4ڞ@[SgJ IDATՠZ2`^U1U,SƼn:Ugߦ͑yrϏsᱲzڷe>{"+fMbY}G}0bp8G{:U@zn/9 "9P bI=.Ko6f Bs7hh7/cW2| xgDs1,&$joY~o[Xߋh}YM'D>Bב$'Qc$M`u&Iu TW^{M2)V?bd2i%֋٪t%'Yؚva% gORÄB!B,B2BzyLߛɛ 3BoهP>/r*A[~Wv 򎏣wFX="B!5!+"MULAإb:::] X3v1Ů'MciZ+o)"<[|JY?EW *5I'=ׄs;_'l^hyL*YEJ.;Eܘ3 Z{;b{ ̶7mQ=Թ)m@w ,m }=#8 yAdi|S~VQ`>S;.cFZN44E2XA2\AX>zo8@>QmoZ >ƞKБۊ)pb6]'$vww>ßP貧B!BA^!:C(@CZ@e$wumv~p=`kaOu %P!B!"02N_԰^Swǔf1*HjS2*3b ژWʱӏ1H<יiߏ&ecɼ˗=W,+1I $IZjZNVUU+.$i%,9Dj/ .˲߹K KWb-z  : ^$z?0\GUVG[~?"(]S"ew#^Zߊ&+]y>3+d?m|^Mm=mj_Wu2yj.ŬWwi"x41R.uޫ2 ӸAuެeYyJm?/]Fϩ>־n#{*Ʒy/xe_ίKOv=g8P1EѺ龍E{᠂+87̂ j$}K({<#oʻ>aYujO=uKmK* $?^5 woy.yZ3{['~֘?'LOv6V{-˲ʍ)g|wB!x8$u=<@x,9V}oQή@J,WH㲠!D- x8xG}/kO]MPFYse`8=ދu :ds]E],n}/wUUѠ>p(Qub2~@=ZE+xk|l Hux8!הQbp:_>H2,8A?^zɱ3Bű7!];4e$=& `d3y@Y~`e΢'Akc?(t;LzX-X<ŷSq.t%pEѨ߼z`u.+Bh_%cEgL٥Y9i%Mw|P?9O95ƛPL~Xy1yOHN _uo㷣:}yo 7V+y_'V9N6!vU.kox< Bԧ?׺"p9hm/Z)xBCFXͨG,}yۻ񮹯 pc~1*<~;pf B߿ !B!xYBmdWëHY x]ViUp^|0Y6ԨVeWg,yLۏ)O x%aWB9_լZ,3Ww%b3bdV6Ɣ޷خ79wesj`n0} NeI~]\ͩ=~XѼhrVWU<0O a8Baè6Q]~WV~ˣ`]K`Md=tiK .;M]Ϣ:^Qg;k6%h2l+xN,ygNx玓-Rzeb|Y!B!xBFU.hn?pvdi=^țk_O| p>u]}qPWCBaȷ?.(YD06 KDe,y+@<,˷ a; D@ U_(JKŁ~ߔ[6d^[Ă8񚿆ܯ(ZcJykhuey}V~P0,GQ@HGv٘ x["E s{eYFX>? t{ d`0{n VQi3<[>V~08gχ (ZxGuMoWUF B~W~˿|׺ Fsx^/"~~ZwСBq Vqd'n T 5_iOk[p ?3u1y !ĵB!"HG^! UU5.ܘՎ^SZ]yLiYٶ w61UTFX<׼Ҏ#Xmr¨*Ћ͡}gke1V\P~'cuNJS/㕄lE^1_\blGb{24=׀uc]~K*u''[~Gѿ,BH@x쏑]_Im\ގ^0|a?6.(6{;$)q6n@ot:]:ގ%@cb|)uZ9͵WbB\tS!,Bׇ{ßF?o7Ŵ P(v q w^+B!"B,MV"V.ַ߳;;;s NKd2i<fe{_1j^eeLNJ;Y0Jؘ5Rd2JSjjPW8zǫYikin+y(Z߱w҉V=uMBʋc>E%{nA~(m:Ptx3ȆȎwӇ~gyhYu&\b嬇VNӴVs=uZ{$_B!BxB!1u9E]LB!9'!d0پF'⣯aϠ#@Gv#~ŃB!B!^; qH(rԔ\e՗Wj̫72~[E ^<6#Go̧ξSd|y%"9_?zpe-/\=N-u/dd`0hyUԱ`ެg䪪:[u~U1?W#W Xkoiii׿e٨m_ثW6j'ޝ@ĭ=u>$xJocQP= T9pc^КC\F!H>SC>'sU` kcgr۽^O/zz57? !B!+AB!!<0&_-OŹ?ӧӧ_s VN~FHAX:նa |dC d27tC?Cg?{W]/">رcH-cpq .^-{ _h-,N-F//mo{VWWq|#<*y}ַɟٳgǏ=y~7~UVks_"I{ュ>5WCB]Q+AY JY1P`^MƊL޻V+<~|.]}CG>w}ۇS~~_~9z+*LNNY.s\ve{˗/?q\p뮻pqR`77׽~:n݊뮻gur g?݋Xz5&''q-oy }Qٟ|__clllHIBdS.0H1Z`֬"nљVd%HjsujD*rxBc' %KZemxˉ$xa~I {v,Xy<8m9hzc˧mz Id}M x/$9Ѳui/ZS_hj7g'E^{*>bDKW{oPt'+{~lI Zp=XGFF*A`9_$5[p>@\g{ѩ)ꫯ0oѩ+W{AMݻrJu]8sx[:T}7nڵk7|3.b|S•W^ `y~GsW-馛yf,Y/~oxp~۷odž p饗Ր'n6s9C?C8phm yΝ;c7`ǎ ؾ};3sY4!(#X~E5Eke!Z᧡O[4F8}C!\H;Sjwvx≃ػCf+W0nz.6l[n;w]w ׾Vw/ pa=/O=xK_Z'7imqcڵC" [o 7܀k6CA^! S)!~!cy>Aգ7n+c}`c6nt~>_W[#~lLQ}i u $A{ 40X!e)ȑG1Q{9vsL "L " Yi["CG" 4Cjs?65{ff=zbtti۳?s(~^vB:lذ ,zs?<z^O駟 _gsΐe:,q<^sO9眃Ilڴs(O9LNNbx7Q\,ûn\y啥GBB!< j/i!]|8}EF)4N~@ކˀb iq+(vm1.( IDAT.%k٦=t O?,Ζu`@o5g̖O=#kn݊#&l[@:ܹ~F[nE$eh6X|zmݺ\pAN`zmC3e|9\};Ӣ}ci哟$~뿂k}[(+<(R iJC|u=FQu޽OqNE~zB>UiG?VLIB>Xy|R1cfNknW%5γ= ijD`8QO( 2D(C-S1}׀>t 0S̾qב,\8l@/|Qh" m=[@{1"AK0 H.At⥈F m6=knoDg022mZȎ;||`s xBLApew1XoklFqK׶ :<cqh`|+^,vm-b`~_M}&Yap*8SYyVo5k}6sN-:99GGv=?}c瞕/z?WnëzW|Xxͯ~y%"fEW:Vׅ_,+eU{HO(m^աmo8Fh'e6#"Wog<,+N~)hV eӢ7w^tQ;"@<Y"m =!%m6807#]:]vrj&vsl6Cs潩yO=m}'XUkeg-aEB0GqDІ׮^H)Uh͹g֭X|yoG,˰}̽^;wZ/3K/Ş={|>ki_7MlܸQksxO^{-N^{ -|rgP(:{їQtD'Ȓ٦ֽ=w `!?gy&6mڄ~gLT3w]~1lذ!I_j1b`jLw$IeYV;{V{rwfզ^u fo4eݖްk,+wݡeTy)B\}F{}~=?FQIZu}g?'~+w׫}_.rdYV&2g?%XfA׾W:u{]ޅ^e˖'066.|/ǓO>+۾};/կ~u,pW?//~qO?]ys/_^&9p7⦛n*nFr)8qM7|'sPF!*w}7>l~Xx@~ |UkȈOI쁛eYce}ttʀe Nfqpx~۶vTY7 6ʀx[ 4k ?ױm r~X[>%tm umx\e<>9qXיϓ}K۾e8aO5]^tt?>ݛ܀ԝnxV`ej%cˎA~˦Ǻ^L-U4M`PL]t5/@G(zSFS/p0^p+\}21P^3xf:? zS{nik}JԆ4q6#dcz~y]q]wᬳΪE+7ވX~= wy'nfwy{<]wvލ-[$~~T]uUXhqyXd ?: wq~.\~K|Ɵ韖яbŊ:?hyફ۽{7ᦛn^#-zkh;fhm~| _Î;h"/W_.hf~;v;繁Bd,vZ,Z|߂#|ZP=y8HEQ cG݁`}uIP ,;FcmX_4-[03xݻ j[=>Hiu$AzNJ擽qُQXtG >x+-?B@^s: ZD ?n@||p=?Nj~ +׻'1q@6h4*1?~~BL5 z.9=7'&&}fcct:صkB!BbE !b+Ce@f8m6p5GQ.E{(rDOrOHoD{Ꞹȏ?#dB!B_ 1OF*j^GMMX{nJeWeV_?lqz뷽Z!qu0c~xoX KV+?TOKLle:JUW|rX4_-Bź_Yi0sT%^;Vsz[Gxڰk^i,F P BhV1[4m#ߵv jʾ^nϒTE0r%G = (#Ec:_-G2 й_+u-,Y!B9@r" >vGêcoB:Rzs)B!xBgdxn`@,+:ׁ5SΟ{^0"F N.C<{B!B G^! ^Rͥɲ(8.\-5HO~徱R{%.R[dx+06foVJ*Аzuey'Rqs*^W'ػ0=5Xsh4*~^J2jKN$Uܾdqe±A㡡1{wK_`\DNz/ڍ;B!B_ 1OȲTuJv+Y 8tLQ>f|ˆQqOx^{KVFTڙͽ^WVsyf'_l6k=bFEq `Pgp~dAhc{(}R*_++YI*]_]pa^$I:<4j**P*Nb+SSSC17|8?*Xh귶LMm`9GΥ %oāveë}B!BA^!`0{>Z*X$Z xrW]m],$y,P<]`53Y2" :ݽ!B! xG$gԉjY*3}B&Vy'U$e^+ԣ^YuRq"7c}cdO#㊲4du"ݫ ea5.'5c++q^<V >*交up!foVd ID{g$r!%r]r5?F7ȟ|Pt/Y;}mb}CVTF؋ԏ(NaQ;F;.C~.=l6k=k=!]O'80?>=OQpPRK#.g?j!B!8B BkHW |[?_JD W 0RSqNqOgȞڄ|G|EpS"N'CCm#]?LjB!B'b)FGG {rVvʪK<+ckh}92UjH!lBD?4M5c_Y?:O`7:SmC=O}~CGS.Bcie\|'v z?ɝe} CcHBsO~6ތ3^FpGbO8#ߟVX 8l'#/>ɪл(nS.Frرj]Wxjt}Vrt?\kYn@w/:Ng]!B! 1Oh6CXSy$eUc]6eK5+!5tZWmȋ۫}FQ^g?O>SuFco ^VZ ͟+y]VOQR !B!~.b)(ǭpbN499Y%B1>ȁXhZ5Y8eY5[V ]f9O8ul| J41v>~ 8B\׳TŮUꁯ<|?f}]8\u<ڧ I֥(=]D{6{6c@k!S^=}݂@@HC (Ad-ϝ'?54gi:{ @lDQ F<;ݏZ{ [gzָ@ٰpu䴢w||=ye=x5$_LXq$ee=˲dm!]럁uI{ Lϳ͹m&6v{!B!8PBqHјIfSϠ|''ftAEG4};Q@@<>M>@?tf"|f, $q=VQs w6߅hb+%;np!'P((B!bx'z`!>5Nr +Xɶ1s`Vmƪ\㕀>AWq,ëx<0 8:V>+YY?>{%W+'5й ouJJWs[+O'+wY>+ kxE)y6F1E B?N6=DYe_U>\(A^E]'{&IRQMXQt/\n2l1@s J2(v>:G!v>bFmx~YUayB!B|E^!h JЫ@YfevcUW}^9k+XQq0yWԁ^ˊRVfYVW/4g!1+!Yl6+seYER֩(˟WuuCmze\S=7>u}S繜$ zކѴ/q)Ws~Vh=^!I !B! x'[>g?66`~Ȧ=Bj*L'`ǣ=EQT@/ 18qQerhWgg hs#|8xNӴ8-d0W"+a['73B yxO:9񄒭}L3:}Qbddd3d@#Mq@ajj ynrLﷱEWL_:cQ~ !g ֠wy B|eZM:{1y\} OE@NnA|i<˧U[,X+fjŞ G!=7]rtO{= cB!B\@^! IJD\ͼv^V'ǚYim3M]_}u6^aǝlLʶy6d V>nb(z߬ ^.R=󜅬BnVvr,HjnU{Y4x ':.UgP&OM`ѓ^d.;Fj@|dOӞC35;˱oDZ!:6eQ!] Š8r/[-`"Y[`~QCB!BqZ`YUc0111bשIגּ_VZ0M$m^%WV+|ڱV'cvkMulX}zCj|)J3Ugժa?^Jp^ļ_8m@Eć~#( ?&^Uq:w߈9#e\I{ (a^g/:~L{v+s+5{(MCIbr~mO.)W⳯4?$)U8UK2v3?w16 g+`_`#=.y=FMĭܺ:{+MTnkx3qY͋+֣(*հ{u{ ߣIa}zw0`jjj3ov}`P< [B!@PWݻw_"8oCX "X&> 2($ITslV#c|$I%hユzoY}%>3|`>`h ]n.ٔ@!0q/J{Wև{>kv{`0v ˲ a߯\g/eEo ]x9H؁?|yg:|ͥ hNYl Xg͵oa?ؒ!Xӡ{&૽z1&'}mqs=B!B?(+pp^aٲeظqc3SANMMa:'&&lٲ28b ݻ⠐݁ ;*0I t_V!B!bY 1޽{1>>;٦M066^UV+>!ډ'͛7S."ٟ^w^Tl Կ_wh 2 VR+ZZ?FE*FQQ.xJ>VKrja\eupHRB2Mӊ*+h;[iKL*JH6W ^C_^=mjMkS$xz%H[WbV%x_b[ρW%󿇔[ea++{jd|YyeY=x \ %~3Ǐ޴}mz]WIb: B!bPWZ}\qCwq袋piabb_җ~6m¿뿖FGGquo;>N=T?/{B!B!yB[+p }|f7M]|ӟ{^/.?{߈/7o駟~@Ǹ'@c?P!VR(ɪXgZL Ban~){ʊ/m({?W$k4W=ۘY٘iEɫ:05fEe[<^%0oNI׋qG9doK hB{54J{p_ yֵ1!h{Fgϵ]ccs"kWw??%B!Bc۶mC??7nk^~`nG+va83أsϞ=صkvڅݻwۅB!B!C ^{.¡}QuQ͛7K.ҥKcccUڵk;wyj Vּ"W2e?OP65Z}z]Umql<_!%#{dVoeZDorrOQWWj8˲ZݐkH1 L++S4M9֩y"n]}yk94g֝KŊא6.~+;޲z+σ?[;Ɠ= T^'1Ԭtc~~w~VX|jyV>`y߯ksrwzB!BA^3VZرc.}r-OS+~>/Y< !B!BQ9͒%K* ^`ZW [n-܂GRE~x+iToӔ O9VmR zZHܖbqyգo*Xl*a{mZ=<~տǯ* {11ګn~wgqƳ'IȯOBŁ- JWخ68;D9eY%ʼn*A6`@˗}~_ pSQ{ Y0#hf{ ,8X(`s<~FȎa V3C xrpo0Tl c(yIz{[Ko_x󀃝>`]yiI3555ԯKf2}op9dAׅ<={8PmNn!B!/(+G?BE?g֭+֭矏o۶mC8O} W^yB!B!% %<~[n/{3?cXeEj;S'#tde6YyU!eo#IZ寷1`W.yUg]"8f#q+[g'Xu KO}q!)W-|8-4zUdχL6z{mWd@U9K_^)_իm.?>Vrދ~P|c6xW, a5{FB2mq\_B!Bq $B!B!E ^! yArB?Yp"p6"=*9P]SbTSp0Ԫ>RㅒرUv#8}9}f0WE>d\&ԯ}y-XߡLժz.a''ה/Q:{efl_Bdš]=A9\^땙?:[;X[E[癙ie>}YVr=~h4*YV]^VoX:(+}?l~[V/c TXB:+|{U!2_7?C=Oh}XQVz/k~fEqgxa_+qGFFq1s~{>4l6d?G7B!@W!B!B!Qb0 JPj Ɋ+FE˰blfܧd'+|d_V~^9X5!]˪>nժ5CLV}.usfqy\Wsp[ITR849ɼ^9Zo >U¦eUWzg%O}_B{ŲR+xy}+ګC{з T셝eY ^8=`~̬ Y9Uؼj9\׾',B!B |qi \XlVqV99R(>csPϏ/IzC lV~3>mzr=꒑EQE  YN%K$YU= j68;P{UV l;qeun?lme}_gq B[MZZ}Bj ~\S#^w=0|9I=W|ޮueIW׾p;PmrrrB!BhB!B!BC)x'q8 k!iB!Bq H+B!B!(R 1OhZ0蚘P혦iEq7#+4Uz$ -IgWqy&Jvy|3+^ S4e^<VͲ0e5׋fC*:ŪW\^Q?B뽉y<BJ\^*7!6j*s=NGc0T_Q~A:دֆ%K ya/'Ws%VcC<U~y=C'={`bbWB!Bq (+(4}p;N[=>pr5Ug Ah6eAP93څz|.u@P[|y(y]]@4A_O9 `x}(PiJh6!\0ϓ^vD〮8qw,gfYV ۳g͚5en~!B!\(+BqB!B(+<+}R1Vygx?ͯ )V9y(d T^y ~y+wY9?3\Y)e\B #*ld!+C4%ë9I'bVTԟE]=v~zv(iTHm؞ ݣu,~<|ZޙKJUo S C gЩVMa_vį\?`m'aөV%+B!BP5!B!B!8DWy]dQjw^]IX5a5Kcٽ{VľVG'b_]:f"ݯ{u B2m]?Xix%}Hmkcި 3Wx)Zw|mqYHkzvHJ|y(*IڰLe?;+y- s]pFQTFk޹j)|Y\x'SѐWo^s!-B!B ^!B!B!8DWyBRŲ+Hʵ:~_Y5şXf~҆ᕼV7_oSSSE}f}ijG?_ qvyoZ}F)UʬU<:>*lVo=_:3ޏl6e)+)U~֖3eN]yS[z[{j}}Po}}EQ @UkXBw^x}~ސya?WW-B!uH+B!B!(R 1OȲlάsHYhVUc2٣mΥRޜ33RԔF ȊZ~Lպ*im{%և}GBc^쇜$IezU:e_lhGmY}J?:Umu˾-̮zS}|`^J:5wuW~Tu7nGQTߢ(*uP[[;NEa*h{߿;|B!bPWyJq\9 fq&>P#ꒈ~z~` @>p@lC>QѿfYV9>Gyfi|p 4wdd>ϫi2t܂j>{(? z '.z|>Zg@_pakVFK((ꯏPϬ_~ (b nv?ۓnwt:](ϼ{_VYu@^!B!υ,B!B!E ^! sѨ(J 5ܫS9iZ*LIGJcڡD_>EA祚!_HjP(Sӱ+*C~j|ګ=?@q4`"SEQJHӴ2P21m uu6 YslGYY9gu VlGQTQw0n^[gy9G!-'3z:;T=9>iV͐UKgK߯H8+'s=B!b_$B!B!E ^!^Vk^c5WX?hHMgj5+X1jEci1UOUW0X>!/P42I-]a{r`db Bmxb}u_^TkeX}-QUTs'Y=ע._:Y#drsyx]y-|6+jVzY }j^kr>^6[Vez,*o!B!B 1Oࠕ6 >A2$IR |& &&&jP‐tq"`^~XՎzl-|R2 >[P0 BѨ|в._C>.>WnX4 ZN 8+{2Ψ V&I2m/$uA[/"mݼx꾠1^W^h4$J>_߳/Av%_(_p8+_4q3eA/_JW"^/8B!@EB!B!BH+<'d;L(Jv+[TQs`V`ɚ]7.R>U:dLͥY$}Ee(?._C}%Z| NRmYNgWrPB5İq"4)2݆ ~I>=Ns0 1l<+^k:ö#\֯/CV4u}v M̶7qW2D B!B R !B!B!!B{DXVVfȃeߐ{u2K 㾱֫H7խn˄B!B?H+B!B!(R 1O^!j/+i^ΛZʆ7wRq\{>}fddn[jadաW$2ӫ?/!~V&!̯aZjs՛yO}׹Npe˘B{O׳WZWG'| `0^v~+R5XW#eW^>to87~>\~B!b_H+B!B!(R 1OjISڱhTcaeiHƪːBo^kʶ׬~Vַբ|=+YiUgЬm֩鼿mUEEj LSԫy] f0T1ieX״n~CeB DDe\u{[MWuzﻐ,LNNuٺߓ<~aZ ^V[?{^`0(C?SR]iZ' ?( ~f~ԭpQ(^k5mW!B!buuI|FFF޳@o8,IOPr,`6`Bs0Ăi/DQo46 uIρ>'I C؊dC(!T&r+  C7kn/ ?S7WHm}f'ܳݻm 8h4*k` 䠠჆lIN{N^.[$(n{Vө 5x\q76B*=Ҫ>o_9sʠ#L4)Ԁbc35XTQFT*u6Ś(X[`)X )U:I XMi埚^Srk6~f\9mXy+ytˍu8Վwyi=_hEX%$6'i_ZʣܞqiMtC]RNx~Oi ϩ)R5b_. L%}?Oj/S ߾X+ZZK]Kxؓf+177WI&C--ltѨ,Ha%fY 닥8Ixy.V*m|neaLԴ&s3d~( 3/Jx]Wu1{^%=ZoɰR5eZ3"u{^%KmGf=4iBit*<>hҚԚy|OBjkuzW:O9T:2z/4<*E_uaͱGۭXze~ߌ-5O_[MUiF}<:̗R>˵=V)QS݂gZw.~FRJ{}/(*fYˆjFL'"Yt#i;2gϞm4*%NK)Z3ۣº$ >h^qlI=_Ѩ$x=9 *IQM z׏SJK5ФK׺zTCWۦw:dK]S=׋Qu`>_ֶܶM%unnҶ9ϥ1TT~_R^osݞ_COڬ}xҾz5kD ߋuҵ>{ nb5ߥix1LN$>"8$GN2NOiI:4EJtľ._'r ._I'r'AbZ@['"#~-uJ @A?Nl6k2>.Znuؗ&.u[O:%H_*MkK'|ۣcNG_LK$-BOe tn_%3/JxJn3U(&u>κGcgZ>...Nm{I}\K)LG^KMn[8('֫j.5WZl+bwjErR;||* ƤB}y|_8Z޻}*kMYZZ:F>%Kcu=!e/7 cuT^QR8Ǔfmכ\y}'?w.۪ߏh\[V8zW1$sUÕRbH" `֣'JiLe2Sh+Յm4$nWWr<Os>z<]Jxv%U艹NSI@z pXsq]mfY!9t:tٯ~<~xX4i) gM~~/ JzGzuseK}(UKufYfj8$x`FV ujjUySuuu95Mu}YwRjdOiMOO9jD5]v+I[O6J4:^I9>>z|վj2Tӓ:u HosDIR*Q= &p~mGә'KR7)M8k 8ױu}%'tۚt2T$b5o{+IqE%'Fw9 0HcT]&J/_lM/!Ag?z(-?w.TZίtJh-7=Ѕ۴]%3/JxNOe*/`{,3v%ͧid4^j|sOj{4Aɺl&=Qzmժ$L=<+uR:^qk'ϧVy}2};w\]/|^l6+j*}[i|RVRsۺR^WgJ[QWWXk֥>'i^+ӫ_vϬ6EX%榒ZHfSc&KINj&Ğ^wJ]\ $a&JcoFJE<^UڿRWu:fVҀFM|ץ}iَlRZ嶞|c{;jq=))Ҙjk?g'xR?Vs:9֛$p8UyjJXO?{쉈}xΟbvg]z3Qkە^f:g5=xu9ƫQ= O='[=MĪRԄ_gM8{5ibT+w[WVj=׾:y5kLG(;&Bx<#{nu]m^0ϥ۔>[ֵ6~ykl&|r1# ^`Ev҉|lR9|diiiU'=XO&xf[IB]H'unnO4ŝq}oi1<~&r_(,ϡ> DW҉?=U*-_+=ųz>qwJsPGi8Lyh4k~rW'䨎:H- 㧯g_ ?Gv8)_w=u79,HI^o^祥\Vf|A{өQGn lSIt?L%`FVx\\L34X۝$==VZPo4 ܹ3"%2kP?m/u)TJj.j>yRNӟu% 4iZ{RTujM$z }ӞV)%[ۣx%O?7JTRd2Ώʺ{i8N~δ\IjK^=&Rv>{T?ktՄier<2Oߟ^e4U]Dglky=ݟDrZķ_3-=mk)R]iQA8! 3/Jh}J]Ѻuݕ[Hz^5_39WZʓFVG\J\^s0Taժ7*O?q<d֙TkԶ9˕q?Y{kwK QOqu10Og?I~]uv?Եy=I椟级tZzO{[K+-?k>Zrq)9Ef ^`Ś[iR6d[*%U =7+92Lc׼4J}_szFdgP5Poh4*WR_gOzRk {aY\WLڒͬGzd9 n'ݻwGDĮ]u\==&}$]pvh4˞ הu`P?yGMץ5q^Ww8޻wߥҹjZSpkO kx_k~oU~+%u>{ԓp V Љ,-|bW.M-<z[mǜqv-r"RInKYrROϑr2')<:EQ{gdO8dO{Z^=Dq/D OivMD&̀: jك҄+-`(-&?xOG{Q'hK dE8uץTA'KE~_u%t hEX%Tbԓ<38tAlKzeiii\T 5D/$UJa-nIQO"6|_},v+ AZ*PZ4x!*)x׍>ޟB{,$j\rו6KF1} dE[^rJ3___LR./okiAB?q.W&}AEʘ {ϯs鳿gEX%$ḴTI%]*Slu8Mזx-@Ψ{^%M牵fYIeNM&U]Y](䫶˓mCtcEכliPMxIZJWoh4lS.ZZ?5<\|y}^.%NfǬ.4%iܬ]k)cOĥdfqKkmߺt,ՑJcK ^O籔ew?_,TK۟(o= ]ӹr]=m}L]ѨAf ^`hZS)_nںNm$Q5wM]WK@OJP#uW}e{UJiMnmMT%5}cXWUӁZ?VϥgOIO(J uyyr/I+%^uie>Ƽzz}`㑉knOu{ЯӤw&յVm#CH;in}~^Uvz}j&'x5=_vRGݿsA ^/ ^Q$xUb4MR\Z3eBZTkfݞ$<=)ROy t0T>+KFS}V,%=-z^^;Nt.w5jMzt~:y[J/9;N%~5ZkjP|^COMyVmU҄e.?gun+)lϏz]i} ¿M)5 / ^` Gu'q߈&J d*-4Tz'.}n.FQ9t-ՉңϺx/𘖧{0'z繹Je%|A9OZVOпt{F'6s}A9&'/8.tqҽm~`RÀ_o'$_p8ON&gn7enwr`Qf ^` dѨQ5i1"V^,JuBfTLe̷Īa~O"&} =x~rǶ=YJ]zG/z{t <]ZnᴕwJ +)yz;ii<5^P^GWZ.uO...Vڨ9,'W5{sssw:GiQ2OQwSQWf""*%O<_KWKFhӞ ψ$`FV ]Ь0Om&Je5/죩wrGS~^А9R8N2' =Mt&LqJ=IdѨE41H]T'U_GQzQ'g^unnq(ՓN^UΞ.zDnr 4q^G󴰎ט6uZfZۭMkܯ?x7L[@Pk#^6 /aX뜼V=cYW۸^bz0HDՊ5kDľ4э&*Aƫsպ&wZRSrǕ|Ӛ^VStyM~_Imzq<hv=\mq%ѹ05˓Y7hrZi뜴o>'KsѨ5}z^nsΩ*q'suuj*Lj_^RSZTw?{k4VJuєw}>VV^'?Qlii)vq1S=ܑnk/`0۷f̤h?t3" Bsss'f%Ei~^XVӹu `0ٷh4js[MyMLq$aILi;VZSzL+.//rs1y^WiR]M_5}a٬Ԫu?5XդsgbiiiOjh?)iuryyI^/x<s|KGTk%^.//WRrӺz]{RFcr\~/=)49!q]k!8UPk5R0 `2l6'(OZ*M"[:'N|$SiN>9IGub$&)urNOIңy}RG ҄(MM6>WKcWh\ө'*Ri;OŔ^&HZVzErrPǧ~}s>iJ>sc •&/ި z"xZjxr"9^yVU\']> [źSZ.ǨGR+?(tb1{iVtWrCX%FQ,--Eľ4X݂X.`ǃKrVUI]4tA8ZyqsHCҭVk*I)?mk[tJf.8𙧅'!K ^Mk<uĄnT۞v}[V߽.Q}u}F'[wx<yZV+MNjSq\ȽNxJ]1}K'}U'=GT Ǯur'~e'zڦ?G7:Vg/yQ۔ʅM+$cso^B|2't{/o~ժܺYDKN:sZ>u^?+uץ4_7Le)MkKL*Kۨz ղڻ߯ ?-[DDs=wb=M/{eǎ|JXٳ>{032ٝv}Zrhlٲ%7f1#j۶m) G9#dii)l~wqG9f0/ `5bf0/(&xUj{{w#֭[f3h4[n%6lk֬;.=xko|#f4ؾ}{?S?ׯoP:cSOg>8cݺuq//ƃ>X<,Yġn83baa!N?馛 P_??6l~8Fqۏ~qwƇ?شiSڵ+ij>[~4'?X\\={T~uָ+kW\?3?6l8}<s=}.~9>Dߏo=__%\2vV,k_~y\tEۿOOiӦسgO|Slr[;c~^^^-(8{^|ĿǏ؏El[:2o~lW\'|r<裏Nmw4$&xUꤓN~ַo|u]qwy{_җb֭q饗ƍ7X~#b_nͫ~`9O=T[n'>ذaC\{S:fܖꫯ /0뮈>(?x+"1nN'.=;<.ykhc׮]/׽uSy . n:߬Yz(oW\qW^ye޽;{/qߏFxk3p 0yo-w\uUW2= {G7 q1~\s5q'e]V{ܟ;#~ַ7tS-o9T8^ʘk֬w4Yā۷툈x0Ygf3L;-ٳ'֮]x+UzUze~kz(~׾ԧώ;oe??Fľ s=7֬Yk֬wOLmr?G7J43??c<Ǘt:DZvڸ`]6??x|K_eDěsΉ7Cޟ@G|_7N뮻'|3qy?>IAя ^`#۷o԰|zjdM|TΟٟooDߏ׾GڳgOg?[:f6nKKKvǙq~>~z\}ձyظqcD[CPG&>ni/O;c8QaF;S(Z\\ /0_5FQDD|+_Gy$>_Wu2fj8?w7oEuGEظ-,,D+gyyyl:ZǭooFٌ|pWո{nOw+ڸcqWrT>Lm{EEݎGyr80 ̰N:)""~Gߟԩꪫt:زeKlٲ%vO>cG3kkqmo}[u3WO<1al۶mj^۷ol~~>֭[۷oo|#f\xS۾]>s rIDATm\JWwZXn]dUW]v[x㍓_nd<̈xG .lo~3FQlذ4z۹sgl۶-?{~?q t:SGD ժ4~֭[zmhBq7n'|r|DĶm{, qwO/'+?#e,"|\}O~p7uUq;sbݺuq-L-b/akwعsg믿>""wL;묳b<Wmo6"^899{[ׯ{N޿b4C`8x|즛n;v3<_}$iӦXvmG?3<3v[k׮/~O#<kuǶmbݺu[;i^{mX~ap[n%ʸ袋o{|_;#n?}yнظm߾=≮5yMDD<q}\0؞={bÆ O'>x^=Xzqgc=}?o|W~W'/| 7)zh4pȍZrʸhƸlO7xabcǎꯎO;x~~~׿~~v< *?K'p¸O>e]vT}Fx<<ްax~~~|'7m4޵ka>$x`FQf0/(&x`F1 3 ^QLbf0/(&x`F1 3 ^QLbf0/(&x`F1 3 ^QLbf0/(&x`F1 3 ^QLbf0/(&x`F1 3 ^QLbf0/(&x`F1 3 ^QLbf0/(&x`F1 3 ^QLbf0רL 6RIENDB`astrodendro-0.2.0+dfsg1.orig/docs/schematic_tree.png0000644000175000017500000005140312224573643021754 0ustar noahfxnoahfxPNG  IHDRs>枖!sBIT|d pHYsRRXV0tEXtSoftwarewww.inkscape.org< IDATxwxTeB]abo[\몿Z-[ev׺ RT:H/;8'83I$J{yfr[ݑNFOUYx)U]œHSIb s""""ILaNDDD$)̉$19$0'"""DDDDœHSIb s""""ILaNDDD$)̉$19$0'"""DDDDœH9f$|X'+ "ZkUeEDfR˜HSIb s""""ILaNDDD$)̉$19$0'"""DDDDœHSIb s""""ILaNDDD$)̉$19$0'"""DDDDœHSIb s""""ILaNDDD$Uu5mt[w^Ha fv  ;`%u3]I>)BwCaa#puGppsyXEYm`008hQLf6xݿH4f3;f߿`` IhDDbdf`%!p99ao6c+"Rj پס h A:K0k+pJC}3U!"{ZVA 3{ݳX=I 9̎ޡ7ѭ?cqz =]/ gf""fV ཧMׁMN M]ؖ s65fv/H쬦u5끇(l{5k#Zvyp4xoqgw׶tfv20"|:Ϭ{H̾ qo./Zte`h^kOφ1 8W$"ifr͕}d`oLƷGpgK5RУ)?\|efrT[Dpv &mP' ~.=*Z5'½ 3gK(wߐʋH*fvMvW45fvㄶHuA:#Gפw3I tOO{F"=},ffo2^<̬nxzUqPY_c:)㜧 ggYYe"֌uWxt M(^):ofHYk`,p~ÈS^4#wl _F|3[lS;mf0GIdR; ?wZ9k,q`/pk\j]ZN&1?Pf8$Xe?{N:51nC3׀zFK)K`OBp%0UtEbQf3fv(\#3of'Y>YC)f8|dr)`VYu.繈%/֬6<2 kef "13xmi!z6 j#d&NfNa#Rʧs@WWFa̎3%`$Q\p?fB]~)|)O=JR ~RKӫY0"~)6ͬ{"/"YBG>߃fveE0F@ck" $ŝ"mfPg{Tew~w pYx#N & ` *',@)$w e=nM0irCDBxρK)6if of!O| 6 :b\xf;U`pЃ`ۋE& c&xkB06[ _OqԱ XEW"ŵ |!\{"?-G4 I!17 -wʯ@F*ѻ㹖 nե+RS-!خ, 'RY=|UqqOӀc{Ͱ;hTw?9~_ݧwݧ8w نUawC0`zD#BnU}7q"֜?[3 mfVwDEVˬ|+_5?,3kG 5ѨC)weu'Jfvga&X/n68\`%X),08w&"R\`&ef5HAȃfv:`Եh" 3KR"aVE'E,KpABJ[WIDГ@$0RdC؝K7"|DQ"`p?hf-X,%{'U"(}x#h>hO "h``$O3?Xtw(zf%>l[6 _tLD-cCѷ\̎~)e!"w(x:cJ| v@nA["axDZu*uv umD+iaGi>eF亟Son>"wX'ǮZ/|Al,/rhzy[!㸇d0*/$*ȅ́wVb s68TuB}:A fp`343bfwUL&蕸̚ @DDpYѼT4V =x^%z A2Kw13Kbw ̢̦4 4<$+o2 ܰ -"*&DL}=@V;ݽRg2e-Og!ึ.o3Y7`->^Q6>X"%.M#X8(T9+4 FW` G10ցߎ?8|YS,`ͣ;)~ O }D O~n{/K4(ء2\< qݣ0:}Q1'XA[ qͅ'U0a[Npo# t&Xgqoam:T4` ؤ*~Kf=\r f mODJgfc->%hwQETcw*a;ए _^wTf{;wN;?~W)'Ӌ`Ϙ"wD*gz?_QA.n"}z`HE{bVCbra.t 0.ɏ;򱉟ptxtMDD _{i>1 WЄGK ZKd/P\ l"[~b "/=OsH}K<283=| =p{樈_sN)5ں6 )o,41z'\1-d%`]p"{YG"5>{϶&`K Kb9N^r /&vOg"b]^]}7xjf_1VD\("Vx ^[PXx >LME /'"RӅ[` _c首i1r=x?;g$L)س(D$qj$% .zbv',_o}΅ۂOV篭nsVlN&`YZy)?3`4>UQ}.E;5Bfpp3h\ײra VDzT*oہ+]h́D},!~wO""eql4vY5xkT S -%X)U YKt[<IJ.M wT6w_ .ܖA[ `CD^ sp-~+Aܵ1#!+_UHqA[cEc+ݯՇRY= ݪ"R)U/ "oTUʡnVp +!"5{UALJOw:7x "Ӫ"R󨛵qUU]I3[t]eYEDDDœHSIb s""""ILaNDDD$)̉$19$0'"""DDDDœHSIb s""""ILaNDDD$)̉$19$0'"""DDDDœHSIb s""""ILaNDDD$)̉Pf H|Ҫ"""ReҁԪO-s""""ILaNDDD$)̉$19$0'"""DDDDœHSIb s""""IL;@H, 0` !|l3"""Օœgn@8B+USADDRbY\<^66|D#݊kˁ&I* sR 8G `vᇻJT9$qRBW=ڷGh߂ZЩUSSIM1RSHM lޱ vakfu[&exlάTpT6s`-ύDDD6 s5nMûqq|Fuݦ ЩU둝lؖXumeņX뷰bVVnFVvCUL`Tۢ^Ha3k_;k[:(N%Wil\ZYu'+oeɚ^91{:@N7g1oݧ>>A?HQQ J}?x1ԷsT fFFhѨ}otZ7{O!Eٝ[QuwU?Hy)@fvpWjoNiK)ftjՄNp!]ߙ͸YKEn1.^w )w_]9eڇ|{Mf+\ bfFV.<>!ۼaLse붬]a[A[4hT7N0u39o=wA[§u[k..2پwb[j*+B!3 g=xW-;2gmkS:)9M:kMXc>``K=,%-~q#O Vڬڏ++n^TEz {!~>_!X+VKGD+Y)fv>KsYcqfmbS,~ؙܽKѡŵ=WWTYaZDڶO_{:ܱk,_>N-nHVg>6QuN&Eݛ/3WuI$3^A> ׺isÐRٰ-sݕxxVo8 J_}owNn с)ҵf`UID$ D3n2o: _F{Gp,wp[{_a6X3{̺Sfv=afNfvmf_3{̊,afk 4vfv}nfٯJgg3 3 f]ifE534Qyn>g??GP}46/'[3nrbmڞg?츦ӆMpy˙z{tx/InI3`f]ӿ6ypffn+pZf 2 WV)g@8k@C'Y^N49p|]blfwl 5] <>=8houd s7$lf*wAPp C@[Yfvtku.0 (,x[fv pX^^ß> bfQvqX??R /[eA(P[xJO[x~% !>?H0w p,7w/v#}.ŋH&u D|*:2OԪIkϋ>qI1l^c-swٸǶ?.tNj]Ϲi4oX7P<]]LLkpO!1r~4qX ~we6&$J&FĻ-j+!s<3; ׀=KCXT3{>̬ۖ-A9 3뛬K(؏xq sf )67߳#2- ,uQ%>e҂jZՁلV6GSnKmԦ]Sʷ Q c s}e.hȧGYylmc弟,. _ݛgVRۧax'>J #D#䂆Pq=rAaWDd sP4'uŔ/$r#CEyʴ{a 5[Z=;_Cg/7n2S|cU囙Y관T1O')qMj۬!-UކMXu*b>~Eo[i>(Qk3[ O0w(A_tׅQ^#'i=;p80\/{\EV@)Qm=]vܥyS+nط'ӣ{lFkK)dqKv .Y1̞]z;ZVZ[ͻ-a;5Dzp^Q)ۨ^q}Iz ;c[ r1z &Xn|hWIɏ$@{n~$ 3FD\NUX;N]𛟟1WqN3۱UӲF#o|tMyeEe_ތ ߯1eNs G|B)g/_iq?e7C\wuXC:<2U(uU#W+ȉHx֤Ⱦc7ȅ4'V1&2O{ sםӎ9|]G8]KKn Sf|o'ul$tjժ!dK9,s6nȱżK \&"Mw_Fp,Hhw? OɅ">Yv_>-y1 sR]ϹqߧK;n5a*r?[3MKM)׬۫7)k 3fGiGto׿?Yu'3ncZ)Sd6Wrtjq{wߝ%jm3&w_My]7zZ-+v6 oVv~ -K&3ˤ]Ĵki&%g:8= ;s ƚITDDp_G<GBI~(*i3x՚&@TsfBE;j;wO:.a.m8ov(Q1S:m9yv,~ݿ8XϽgd5[&5= >ݟ)H,K ?GŃʵgpގ` ^jpAjFz]u299^*=ux\zJL{d?dbl^n ]z Z\ ff L={wj.8ty+9wl79H{"rvhP'}:qh嬥|:maɊkP̬/p7>ER[-8wۋYڸCnzUEߪ{+̉HE0q@,*.vS Os )0tҵ\{,_JYv̿Y8}$dVG= VZ)A rE)>/^r"__i;}K:^C_>Cjdž͂+op;}kQ@d&SxwTA5zfI'w\bf t P+ܼ<>4'ͣS&\6֭*W߿:~9#6`o*TKxx:?Vm͒ZDݯlvh&ni$a~jβJgmݙo<gUQDDj,PZLVU3|({BVv|O-9g`wNׅ]ڐD3ag-[ GœD-'u u9P`OK0c7ˉ}~]8Ө^eW;jrW>1vGvzœݗw(KZwdr䍱3xc ̌prΜү3vm[ee|2/.rϫZ"""QQrqyaf= ZL*\o+ͱ4mP~9_gZ6_ud8*2`2p//Eœ$~ zz pamܖ[fָiD-Gk}SVb7ݝ7 V̥l-,qlaP٫)Ip?`f &M/02J:77/y+3oRBNn\:?~wDDDœT:w1'h5ra?}v'-J~YPV2|}/2dq3k "v" f{uGDDD9I* ̭꺈 ~VœHSIb s""""ILaNDDD$)̉$19$0'"""DDDDœHSIb s""""I,+ "jf6*""RZH(̉E|ߟo""԰+ Q7̬ H|ݫ"R[R`]F@sUXI>s}iUWBb0'"RM}oH%Q7HSIb s""""ILaNDDD$)̉$19$0'"""DDDDœHSIb s""""ILaNDDD$)̉$19$0'"""DDDDœHSIb s""""ILaNDDD$)̉$19$0'"""DDDDXZUW@DD$fz\ /|=0?"NaNDDJf П ul; ƻV꘻WuDD$l >|7Wauff[ˀpy1V=EFaNDH0gf}emHOK#s%/e݆MSՄ ⹈HeQ&5̙Y_ Ž^vmztL9{W+nWV ,g%_y?, c|`Xsb9Y)̉TUN:32.:4;{݆L-'OciL~QeM'wߔЊAaNDH0gfwy|@q1xfV k&N-[uZ0UxEE0'"RM$K3Z#כ&>+R^^~ǰF3lfϏjN`G0BݱR)DDdsfpLKsCX-]4%.-;c' 9jbosf֒`hcw yݕUWmݶOFg1b6Ϝ L h*R(̉T{s`ۧcuj'9 .Ľ\nn.|˰ch8ӖÁ/=B+)՞œH5ہ?or>|_uPܲuysrsv ׫VN6~?,Yư0lhMJNNnYd Ý/:J0'"RMa#X7 ==ơ}zrz?.4sڭ)ٻn\Ai-2SSl禝Yy3RrsIٕkYy)=-#kcꦤfԭUnm[hfԪU?2nYihNM솣5$J s""̬0w﮽:V.'7ogҦY*Q3NZ,УOձ~mu9 i?yZ4( |O(j9jbo sf֟[_s>R΀{ {69vzŽeǮ9~RԭCVIuYgI^v{!R6-j Wo0}Վo;6[߃{M䵷lgc'0|XF|1Z{x:>Ld}d0'"RMea' ٫#?1FծVdmܼ<E_ӯYޡaWmylҰJ'Yydl =eݝ)b |,SMQ]0'"RM-a.aP =[%_x#wtnդEvxgƟt )FjY^gE:/+;'S;zzF2ˉlݶAw|DD('ˏϯRbwlܹ}U9+W)G[=(̉T{Q мiVL;zٯy_{O?uq b̦/CԊ~鼕64uB5;;7'l2̀=\s_xEc{y;XdyIEJT)*""%JƍY}K Rb7eE6$ 0C_YT!e֝YO5`=˴WoӑiSߪ/vBAjڛ,_zKz)n.ND=HhIDATg~kf7t MEDD>hf{^iO\n]HK+y5];wBD{ <Æ^Ҭv)J1쾇غ3^Ɔ9st=ؖ]r*pw<}ö n[V'gkfflͮ3m=;׶IK/9Kظyоfw8Ϊ^GZDDubـ3pUHKQ=ˁtjosJ{}A?63d+fL˛د]w];}ms)^޺V.9ĦNק<˺Q߹zZfM;]5lPH/Ϩ.scuFokQ zTV[5i+NYfҒ>^>SO.C5k0bfFkfg{ݟ4ۀb8vo5?}au?X7Ҙ9uwZ7mĀ13筘SZԴ ~ui/m\Q_ݠC&%ڭsǶRF{¶4\WV#AW^F;ܷIl ۯY8i귟E{ͿvޝGW]y?I!! vH@ Ae+. .PTvhg:tsjsvPG-Z3Ɏ,DV &73܄ro?s~oys?GR&rUӗwDM.`αFq ?XwW5az'UwēνFv"p8mXg[Sg k > Zk'ipC?ԉƘg@0'yœH`xE] l^h ફ#sa(?KdE/r_,ύܔ]u*\r]'L~S>4%16ڣj2^c*7|pݾG˳bb6ٱ`PLdO|7yz{o?+[kWzOYkO,ѡ5ݶos~lOӘ9d-7,^笵1ŲfhނG',Uk{&693uxЉ3{{BBRra}C W ؜o6쟻&#>6۝YPǐ̐^IvA&y][t3Ys6i1w64`eK&q^0d ucݝ >̉>uZ1pc sz8T9zt͸wq7~. s<WUzb+.)xiOnȌ7m+s |.N͘}n˰W]^=]k+Wp[FOz y)^8=RWsv3H90oSVxN]Q7x4K{nVV^4Ƽl=pSKlAݗTw~d:?`YZlȾ}SJc2F3&'ю:1V ]Ü]=)!We%gRSv_^)jcLscpwxKXkWcnT{1&Z{n+z2'"ǹ 6Y͊uIC%y\3;rW;w/PlTN?<̑nΊʒʤ^ݼ/qXk['˪NEt|*]1$H2\ =U:v1&xɇk5Z ZcLњDDo'pO g7\mOOyu}V{u$_ d)'ٞDƄU]y[Z1=cc_ʁcc^6}kV`,j9j8Q;~Lq֜9ڭւrVo!n9aCy]PWhR?Y+㒽\Be=M؀G EqO`wip#ہ/kZݸ{_в X_ 5?gI" )g9NW3[[c2y{[}~m{ߩ~k]YY蚘ͪ 9roo4J'?0kNc{uQ¼mqwLMInvE|{) Goxs i s""A=9c ̹_z [ye<|*?/\Uq^)+ *0UQuuD8]狝s K-tR{J>k_835Ж=<^;,[᷿7x{i s""A9c%)!s,67Ndy.W% ERZVFyy.+*(/",,Hb$:*ϱcӻ'Q-SqJ˜,#;% ߫go:ę Oգ7u/w.cmՉw s""A=9ݺZM~$%t!)!8*+()+Ҳz[)Eť\(,̯ ᪞IЏA6x׏E|gsh1grrlټǑс蒪~2'U5ν eZ--MaND$H0` 7m)$$WsӤ4q,#g>۷[]]Ϳv1U\Z/ V0'"$s0D.Ibxsߛ}'zusvDs [wxZV4KœHha.cU-R$I@,p*i`+.l%tּn@L#[20kӤIcF`]:uZUɛo/EQqIsW 9 Ha1Ƙ0Ҷ1&Ln7vlbx>D4o?g/Ƒ?.~ bn։(̉`s1&< m蘤x xYIݟ}O_5{j=lkVn9 0 X.Km{t矟>6Ջ% XǏy} U Vm9 0׺1]@\g&x[%GRZl u!.$JaND$H(̵ cLgesO=)ZXelߝء[l5@9 0׶1)s< zs׌cڍ 9r|ˊ_|FVs:Xf=Ս$(̉ 'nAsaavKgzvVBRBN)̉ 3xK: r`哶0'"$?cLp3PHymRT͖d뭵 ߦhH˰=a%1qD,pZ[͓0'""ƬEM+;5œHS ` s""""LaNDDD$)̉090'"""DDDDœHS ` s""""LaNDDD$)̉090'"""DDDDœHmQIENDB`astrodendro-0.2.0+dfsg1.orig/docs/catalog.rst0000644000175000017500000002624212773156651020443 0ustar noahfxnoahfxComputing Dendrogram Statistics =============================== For 2D position-position (PP) and 3D position-position-velocity (PPV) observational data, the :doc:`api/astrodendro.analysis` module can be used to compute basic properties for each Dendrogram structure. There are two ways to compute statistics - on a structure-by-structure basis and as a catalog, both of which are described below. Deriving statistics for individual structures --------------------------------------------- In order to derive statistics for a given structure, you will need to use the :class:`~astrodendro.analysis.PPStatistic` or the :class:`~astrodendro.analysis.PPVStatistic` classes from the :doc:`api/astrodendro.analysis` module, e.g.:: >>> from astrodendro.analysis import PPStatistic >>> stat = PPStatistic(structure) where ``structure`` is a :class:`~astrodendro.structure.Structure` instance from a dendrogram. The resulting object then has methods to compute various statistics. Using the example data from :doc:`using`:: >>> from astrodendro import Dendrogram >>> from astropy.io import fits >>> image = fits.getdata('PerA_Extn2MASS_F_Gal.fits') >>> d = Dendrogram.compute(image, min_value=2.0, min_delta=1., min_npix=10) we can get statistics for the first structure in the trunk, which is a leaf:: >>> from astrodendro.analysis import PPStatistic >>> d.trunk[0] >>> stat = PPStatistic(d.trunk[0]) >>> stat.major_sigma # length of major axis on the sky >>> stat.minor_sigma # length of minor axis on the sky >>> stat.position_angle # position angle on the sky .. note:: The objects returned are Astropy :class:`~astropy.units.quantity.Quantity` objects, which are Numpy scalars or arrays with units attached. For more information, see the `Astropy Documentation `_. In most cases, you should be able to use these objects directly, but if for any reason you need to access the underlying value, then you can do so with the ``value`` and ``unit`` attributes:: >>> q = 1.882980574564531 * u.pix >>> q.unit Unit("pix") >>> q.value 1.882980574564531 Specifying meta-data when computing statistics ---------------------------------------------- In some cases, meta-data can or should be specified. To demonstrate this, we will use a different data set which is a small section (:download:`L1551_scuba_850mu.fits`) of a SCUBA 850 micron map from the `SCUBA Legacy Catalog `_. This map has a pixel scale of 6 arcseconds per pixel and a circular beam with a full-width at half maximum (FWHM) of 22.9 arcseconds. First, we compute the dendrogram as usual:: >>> from astropy.io import fits >>> from astrodendro import Dendrogram >>> image = fits.getdata('L1551_scuba_850mu.fits') >>> d = Dendrogram.compute(image, min_value=0.1, min_delta=0.02) then we set up a Python dictionary containing the required meta-data:: >>> from astropy import units as u >>> metadata = {} >>> metadata['data_unit'] = u.Jy / u.beam >>> metadata['spatial_scale'] = 6 * u.arcsec >>> metadata['beam_major'] = 22.9 * u.arcsec # FWHM >>> metadata['beam_minor'] = 22.9 * u.arcsec # FWHM Note that the meta-data required depends on the units of the data and whether you are working in position-position or position-position-velocity (see `Required metadata`_). Finally, as before, we use the :class:`~astrodendro.analysis.PPStatistic` class to extract properties for the first structure:: >>> from astrodendro.analysis import PPStatistic >>> stat = PPStatistic(d.trunk[0], metadata=metadata) >>> stat.major_sigma >>> stat.minor_sigma >>> stat.position_angle >>> stat.flux Note that the major and minor sigma on the sky of the structures are now in arcseconds since the spatial scale was specified, and the flux (density) has been converted from Jy/beam to Jy. Note also that the flux does not include any kind of background subtraction, and is just a plain sum of the values in the structure, converted to Jy Making a catalog ---------------- In order to produce a catalog of properties for all structures, it is also possible to make use of the :func:`~astrodendro.analysis.pp_catalog` and :func:`~astrodendro.analysis.ppv_catalog` functions. We demonstrate this using the same SCUBA data as used above:: >>> from astropy.io import fits >>> from astrodendro import Dendrogram, pp_catalog >>> image = fits.getdata('L1551_scuba_850mu.fits') >>> d = Dendrogram.compute(image, min_value=0.1, min_delta=0.02) >>> from astropy import units as u >>> metadata = {} >>> metadata['data_unit'] = u.Jy / u.beam >>> metadata['spatial_scale'] = 6 * u.arcsec >>> metadata['beam_major'] = 22.9 * u.arcsec >>> metadata['beam_minor'] = 22.9 * u.arcsec >>> cat = pp_catalog(d, metadata) >>> cat.pprint(show_unit=True, max_lines=10) _idx flux major_sigma minor_sigma ... radius x_cen y_cen Jy arcsec arcsec ... arcsec pix pix ---- --------------- ------------- ------------- ... ------------- ------------- ------------- 7 0.241196886798 20.3463077838 8.15504176036 ... 12.8811874315 168.053017504 3.98809714744 51 0.132470059814 14.2778133293 4.81100492125 ... 8.2879810685 163.25495657 9.13394216473 60 0.0799106574322 9.66298008473 3.47364264736 ... 5.79359471511 169.278409915 15.1884110291 ... ... ... ... ... ... ... ... 1203 0.183438198239 22.7202518034 4.04690367115 ... 9.58888264776 15.3760934458 100.136384362 1384 2.06217635837 38.1060171889 19.766115194 ... 27.4446338168 136.429313911 107.190835447 1504 1.90767291972 8.64476839751 8.09070477357 ... 8.36314946298 68.818705665 120.246719845 The catalog function returns an Astropy :class:`~astropy.table.table.Table` object. Note that :func:`~astrodendro.analysis.pp_catalog` and :func:`~astrodendro.analysis.ppv_catalog` generate warnings if required meta-data is missing and sensible defaults can be assumed. If no sensible defaults can be assumed (e.g. for ``data_unit``) then an exception is raised. Unlike clumpfind-style algorithms, there is not a one-to-one mapping between identifiers and pixels in the map: each pixel may belong to multiple nested branches in the catalog. Available statistics -------------------- For a full list of available statistics for each type of statistic class, see :class:`~astrodendro.analysis.PPStatistic` and :class:`~astrodendro.analysis.PPVStatistic`. For more information on the quantities listed in these pages, consult the paper on `Bias Free Measurements of Molecular Cloud Properties `_ or `the original dendrogram paper `_. In the terminology of the dendrogram paper, the quantities in :class:`~astrodendro.analysis.PPStatistic` and :class:`~astrodendro.analysis.PPVStatistic` adopt the "bijection" paradigm. Required metadata ----------------- As described above, the metadata needed by the statistic routines depends on what statistics are required and on the units of the data. With the exception of ``wcs``, all meta-data should be specified as `Astropy Quantity `_ objects (e.g., ``3 * u.arcsec``): * ``data_unit`` is **required** in order to compute the flux, so it is needed for both the :func:`~astrodendro.analysis.pp_catalog` and :func:`~astrodendro.analysis.ppv_catalog` functions, as well as for the ``flux`` attribute of the :class:`~astrodendro.analysis.PPStatistic` and :class:`~astrodendro.analysis.PPVStatistic` classes. Note: if ``data_unit`` is given as ``K``, it is interpreted as units of main beam brightness temperature, following the conventions in the astropy `Brightness Temperature / Flux Density equivalency `_ . * ``spatial_scale`` is **required** if the data are in units of surface brightness (e.g. ``MJy/sr``, ``Jy/beam``, or ``K``) so as to be able to convert the surface brightness to the flux in each pixel. Even if the data are not in units of surface brightness, the ``spatial_scale`` can **optionally** be specified, causing any derived size (e.g. ``major_sigma``) to be in the correct units instead of in pixels. * ``velocity_scale`` can **optionally** be specified for PPV data, causing ``v_rms`` to be in the correct units instead of in pixels. * ``beam_major`` and ``beam_minor`` are **required** if the data units depend on the beam (e.g. ``Jy/beam`` or ``K``). * ``vaxis`` can **optionally** be specified when using 3-dimensional data to indicate which dimension corresponds to the velocity. By default, this is ``0``, which corresponds to the third axis in a FITS file (because the dimensions are reversed in numpy). * ``wavelength`` is **required** if the data are in monochromatic flux densities per unit wavelength because the fluxes need to be converted to monochromatic flux densities per unit frequency. It is also required if the data are in brightness temperature units of ``K``. * ``wcs`` can **optionally** be specified and should be a :class:`~astropy.wcs.WCS` instance. If specified, it allows ``x_cen``, ``y_cen``, and ``v_cen`` to be in the correct world coordinates rather than in pixel coordinates. Example ------- The following example shows how to combine the plotting functionality in :doc:`plotting` and the analysis tools shown above, to overlay ellipses approximating the structures on top of the structures themselves: .. plot:: :include-source: from astropy.io import fits from astrodendro import Dendrogram from astrodendro.analysis import PPStatistic import matplotlib.pyplot as plt from matplotlib.patches import Ellipse hdu = fits.open('PerA_Extn2MASS_F_Gal.fits')[0] d = Dendrogram.compute(hdu.data, min_value=2.0, min_delta=1., min_npix=10) p = d.plotter() fig = plt.figure() ax = fig.add_subplot(1, 1, 1) ax.imshow(hdu.data, origin='lower', interpolation='nearest', cmap=plt.cm.Blues, vmax=6.0) for leaf in d.leaves: p.plot_contour(ax, structure=leaf, lw=3, colors='red') s = PPStatistic(leaf) ellipse = s.to_mpl_ellipse(edgecolor='orange', facecolor='none') ax.add_patch(ellipse) ax.set_xlim(75., 170.) ax.set_ylim(120., 260.) As shown above, the :class:`~astrodendro.analysis.PPStatistic` and :class:`~astrodendro.analysis.PPVStatistic` classes have a :meth:`~astrodendro.analysis.PPStatistic.to_mpl_ellipse` method to convert the first and second moments of the structures into schematic ellipses. astrodendro-0.2.0+dfsg1.orig/docs/using.rst0000644000175000017500000001746012224574707020155 0ustar noahfxnoahfxComputing and exploring dendrograms =================================== For a graphical description of the actual algorithm used to compute dendrograms, see :doc:`algorithm`. Computing a Dendrogram ---------------------- Dendrograms can be computed from an n-dimensional array using: >>> from astrodendro import Dendrogram >>> d = Dendrogram.compute(array) where ``array`` is a Numpy array and ``d`` is then an instance of the :class:`~astrodendro.dendrogram.Dendrogram` class, which can be used to access the computed dendrogram (see `Exploring the Dendrogram`_ below). Where the ``array`` comes from is not important - for example it can be read in from a FITS file, from an HDF5 file, or it can be generated in memory. If you are interested in making a dendrogram from data in a FITS file, you can do: >>> from astropy.io import fits >>> array = fits.getdata('observations.fits') >>> from astrodendro import Dendrogram >>> d = Dendrogram.compute(array) .. There should probably be a stronger/bolder warning against doing this example blindly because it will create a LOT of dendro branches. The computation may take anywhere between less than a second to several minutes depending on the size and complexity of the data. By default, the above command will compute a dendrogram where there are as many levels in the dendrograms as pixels, which is likely not what you are interested in. There are several options to control the computation of the dendrogram and can be passed to the :meth:`~astrodendro.dendrogram.Dendrogram.compute` method: * ``min_value``: the minimum value to consider in the dataset - any value lower than this will not be considered in the dendrogram. If you are working with observations, it is likely that you will want to set this to the "detection level," for example 3- or 5-sigma, so that only significant values are included in the dendrogram. By default, all values are used. * ``min_delta``: how significant a leaf has to be in order to be considered an independent entity. The significance is measured from the difference between its peak flux and the value at which it is being merged into the tree. If you are working with observational data, then you could set this to, e.g., 1-sigma, which means that any leaf that is locally less than 1-sigma tall is combined with its neighboring leaf or branch and is no longer considered a separate entity. * ``min_npix``: the minimum number of pixels/values needed for a leaf to be considered an independent entity. When the dendrogram is being computed, and when a leaf is about to be joined onto a branch or another leaf, if the leaf has fewer than this number of pixels, then it is combined with the branch or leaf it is being merged with and is no longer considered a separate entity. By default, this parameter is set to zero, so there is no minimum number of pixels required for leaves to remain independent entities. These options are illustrated graphically in :doc:`algorithm`. As an example, we can use a publicly available extinction map of the Perseus star-formation region from the The COordinated Molecular Probe Line Extinction Thermal Emission (COMPLETE) Survey of Star Forming Regions (:download:`PerA_Extn2MASS_F_Gal.fits`, originally obtained from ``_). The units of the map are magnitudes of extinction, and we want to make a dendrogram of all structures above a minimum value of 2 magnitudes, and we only consider leaves with at least 10 pixels and which have a peak to base difference larger than one magnitude of extinction:: >>> from astrodendro import Dendrogram >>> from astropy.io import fits >>> image = fits.getdata('PerA_Extn2MASS_F_Gal.fits') >>> d = Dendrogram.compute(image, min_value=2.0, min_delta=1., min_npix=10) By default, the computation will be silent, but for large dendrograms, it can be useful to have an idea of how long the computation will take:: >>> d = Dendrogram.compute(image, min_value=2.0, min_delta=1., min_npix=10, verbose=True) Generating dendrogram using 6,386 of 67,921 pixels (9% of data) [=========================> ] 64% The '9% of data' indicates that only 9% of the data are over the `min_value` threshold. Exploring the Dendrogram ------------------------ Once the dendrogram has been computed, you will want to explore/visualize it. You can access the full tree from the computed dendrogram. Assuming that you have computed a dendrogram with:: >>> d = Dendrogram.compute(array, ...) you can now access the full tree from the ``d`` variable. The first place to start is the *trunk* of the tree (the ``trunk`` attribute), which is a `list` of all the structures at the lowest level. Unless you left ``min_value`` to the default setting, which would mean that all values in the dataset are used, it's likely that not all structures are connected. So the ``trunk`` is a collection of items at the lowest level, each of which could be a leaf or a branch (itself having leaves and branches). In the case of the Perseus extinction map, we get:: >>> d.trunk [, , , ] In the above case, the trunk contains two leaves and two branches. Since ``trunk`` is just a list, you can access items in it with e.g.:: >>> d.trunk[1] Branches have a ``children`` attribute that returns a list of all sub-structures, which can include branches and leaves. Thus, we can return the sub-structures of the above branch with:: >>> d.trunk[1].children [, ] which shows that the child branch is composed of two more branches. We can therefore access the sub-structures of these branch with e.g.:: >>> d.trunk[1].children[0].children [, ] which shows this branch splitting into two leaves. We can access the properties of leaves as follows:: >>> leaf = d.trunk[1].children[0].children[0] >>> leaf.indices (array([143, 142, 142, 142, 139, 141, 141, 141, 143, 140, 140]), array([116, 114, 115, 116, 115, 114, 115, 116, 115, 115, 114])) >>> leaf.values array([ 2.7043395 , 2.57071948, 3.4551146 , 3.29953575, 2.53844047, 2.59633183, 3.11309052, 2.70936489, 2.81024122, 2.76864815, 2.52840114], dtype=float32) A full list of attributes and methods for leaves and branches (i.e. structures) is available from the :class:`~astrodendro.structure.Structure` page, while a list of attributes and methods for the dendrogram itself is available from the :class:`~astrodendro.dendrogram.Dendrogram` page. Saving and loading the dendrogram --------------------------------- A :class:`~astrodendro.dendrogram.Dendrogram` object can be exported to an HDF5 file (requires h5py) or FITS file (requires astropy). To export the dendrogram to a file, use:: >>> d.save_to('my_dendrogram.hdf5') or:: >>> d.save_to('my_dendrogram.fits') and to load and existing dendrogram:: >>> d = Dendrogram.load_from('my_other_dendrogram.hdf5') or:: >>> d = Dendrogram.load_from('my_other_dendrogram.fits') If you wish, you can use this to separate the computation and analysis of the dendrogram into two scripts, to ensure that the dendrogram is only computed once. For example, you could have a script ``compute.py`` that contains:: from astropy.io import fits from astrodendro import Dendrogram array = fits.getdata('observations.fits') d = Dendrogram.compute(array) d.save_to('dendrogram.fits') and a second file containing:: from astrodendro import Dendrogram d = Dendrogram.load_from('dendrogram.fits') # any analysis code here astrodendro-0.2.0+dfsg1.orig/docs/schematic_structure_1.png0000644000175000017500000007063012224573643023300 0ustar noahfxnoahfxPNG  IHDRJUsBIT|d pHYs B(xtEXtSoftwarewww.inkscape.org< IDATxux}uwctwt ؀"b؁Ҍ jl0`a?&_V0Lu) B Xzg?쥻)%~u 0*QEZY@ ` ?}QpWY[Y@"s,$bX̕HD\X̵'/ """"j2RRkRN*W0R^*329#yMR,Uwt0kREu !D`8~  $b˓ y{ ~^"ߞZAIY%JQ\V?1EҊ*F[ȼⵟ@Qe2hAK\/c q [9q0I7}<`gN0 kS ťVn*ٸP3 SbEQD r;6n-kq=t F '{všNbd^Źge*.fj|I[ a(CЂ!,MgBՓF: -_rE r򑙝Y9ڴK&fs s0:cf(zP #B%гCƏ>;rpZ[Gfv.2/"R.EEΕBVq[ | )zD(SG ] pLµ Yv6֪'r*h5,EQmЂ|?Oxp8f긑N0<͈MT']kRoծS')3zXkhA!D`. ᱸSԣ -7'6#RH#+'/ >tS4q,@µ4zX,Z!;E3rV<:3rpVQY33|&]tJ~ᒥRqe@?)EQ]E/ȄQ5O-Z4k*,M[%z=3/#!4s4.Qv2=CRm>Ux 4NKdBx A>/~U0cVsQju8q ' XdZWִͭpGI 4NKdBHO Ύ7?pt N_@B&<<%VkE ^AQ]R=vMs$b㐈MO4eڔ*NGlI͑c+zmP8J~Ru'] B1eY0ygi K]-HI=c)Q+.V3(Q.Ȅ> O|K$כlTVSW$fȆ3Ls$0줤(ʔtڂL @ү_ _HQLdZGS V^)*na90Ӵ7EuM BK'/gIwNSG?"N|TgzNU] .`dX[ݬ1EO"t%2"bť6pIFsәR _;ʴ@P }'c;Eݓ’2Kcڄ3DVݹ] MΥSdBJ_knv,z J Nh\"Fk*NmcUIIQT{1|8/KzoG$:@BKġciVv\Sq HIIQ2ۂLDۗOv,2 qɧ{\02^]U[X@2/{aO S˗_/cQk.fh|"fdz=͇ q}0L +!)-*Ȅ{YrGpy<Z55Kx",~w>S0Lq7pw DoFc;E4ape9s(Rv9-0-=a(a/)EQfQ !^0 w.lǢ(S؄#1ǘ{7?jj C0qN 2!bH9ɁXeZJ&®Ge2mSJ`(*Ix&] !!0c:ٲ:^ghڶ04$9îmڐ:dBH\ ڊX%\Á8p7{)dA& aԐķeEuҊ*CĺJ8d&)\A& *:Ick-vޢ(,Ex\"=OpSUa()I7&U !=efϖ|>v,nBV#>4;oljιs4mFBQwf22ųiw| ˥ ?(0 p 2{G) K۶Tz3EݜIdBtxdv˦wxN_FQʹRp:=3KeF כL 2K"/,D1Eu"յ81ڄVv&t"RI` BH ZZgy(|IerD&$cD,s8N&W$RŽ3 e'%ELqpEsm~v.DT#1ʚڶ;ay@$ߙ X)Ȅc׻9kzcEumip 2f_m;rVpC!:[K=\Hmm(uq 2NzI0r>0y"RT3zA&I,iҢE&ǁx&">IߢTN+Ƶ úZ !&#@egwEe娩GT44I fM}cYעT> }׏T2l7:):qe~'[>bbz=v=\ʻrYo,,ւF/m/-e֪T3W+R{F&ݚB1wen!q8Y&k?םQ:  `Ch<3Eg~cv_"t [Wܭ۹g\hL/̀=,{A, UUyU5őcLBFѴ]wav8(k]7]tD$ {a?n0Zu v.ʴU6)D_M*BqmJtwq:|qFusvg;*u-J%ѸDTT״ pF \d'%e.ڭ Ba%a唱#C9t F\%ptTo*xaZIIv)qȕKlzSLUt:G?{9‘Du>zQNʪH_l` =?p=98}c so\s 0Z㧤 ա߿njc#>77}kC3\1ysj?G]5&WXɱaI#k77CeU8q>W(n k Cq`GA0mɺ=[6TuEUnO?].v&NW>{Cd'K8\͘aW<2yؑJLhpdaZTڶ8y=PA&< OK (9C5OonY3pU:rIͥ*%&*{P@Kyȁg{᱉8'SVvshaIIu.ȄG8GX`V3^%//=~o~x?ۙ(~I[T[ӳ:xʺQmҨa寯Z5l`_F Ier&Dxl""m MIHaFJP]"UIڳ~8JnY]_.I^*Qi1"E8 %h`+4õ^DfW/N. 1i'W~w!fy376Ζt:ΜDԱפg^5Z7Uj~ {ޜ0r6fVz?qQ=b2?}|h(RՍ;Nezhu:M ƻ?lE2[@K\~R }v-["wT)i\Ĭs*v6ls'ԌēHHbckke`h{vs]=dB- cbݝ<{ 6pyZ)ZN}oBo  mjষкL&_x |w}k+K:bZ7=J>hmdpkfDZu {k ;ǧ'=:W@NY]+ۢr#=%Lы=>~sP * oVNSSCUhwnNY}ϗV.Sw+K cQusXdB2s0*NYP\v׫>z:]dB5 cc{cЁ t=!W>{b T64ONrVh7&&ю[e!}EǪ_nOe$AW3o⺀aGb+cOr--m5NzNϽ|8o^Ǩ9˪D:2xcG|Opҟvyd#FIHC2 ٭gq}h.usXdB s "Vg0Lea]dB% c[1aЎ.VNeLLlSޖCx\^C)~} GAi#'_:I<>>bl!(RkuM3ߙYsǷ,9P 'q$h\@ =2 NJuUH,8߾>m[dg)fe7xyTлe_.}oF(9nGAxCR7?eHPsJv ? t܅e#">s8Jv!R׷p/80"P?a긑F OULXO{;!qқ;t#6 (&=. ~Lqn^(uK z_ʽ;_tf)xՑcLT@KIi ? `W4'98ZG߱=<,iY9kc@!oٰHy;g͜.lLG{7^z84^q(:AP<@۵a2vR)ȇLÍxGw ]pUlV9:kk<$~Vp4vuiO'/VLiY5c7y(Ӗ_^{GvlWEU ckw.%Fmm ԰}-.(p8ʌSw[TZn#_mQonrƽǂgqiA |~`+2m*ϫz$ӓLݎJFxqfˎ=)mZ]ki]3 ^Jvܩ ?c#:MXdHUYFK[-0L }ma7PMח,*/u.fɯnQ&@&W`T6#;V=?_1jÍi>><? (Mx^]2xw_ =Xfag*ӯ8˕jW.b.*섨qVR(w*=|G_8"̙͆5E6.\آy~_7ETT)) 6=>qXi&_*CNDXzҹk]0 c)[bOڬ50a ۭ 7^\o3H'Q-33؜3ݹ0A}LKCS3{nIbki/Qik~:lsj685^G"[p[;K&Ș4Z~Ϩ~xUT~2y 8{- iOގ9ye[Rjuz >yUKPʬ)U*:"/(n& f?7+ȓDzy NG>ܜJ޴(A-Xy^7x)i y_W螽Ӟ~LHFЇFF1I4o _B.,La'gj^5lVL7JQScYlx: ?‚ܕKy\!BX;pӂw*yXYfs8,-ޱ(MO,5׃.B泑 2!]dw/ .[뙹eu]%nLpa7;v9]RdSlxb ۙN{'2 Hv%^4CC˶9@w[S&;t.-Я!ƞn;B@vvw><2̨땵 Nql &ղjFm,L ?`rETav[:@xe;sPԍ퉬clzL0f Jzf|H^6z;ՒșLzw'H#U 0YUw/ʢEiTprBR+|b9>}'Q0j]?{EɁŨCxØqS*>ۗa,b_)zW7 <޾%S.5^Bx\NQ^A1Q(mm,R#չ@wr1t#_ 1 _[(5z'f7EhLycHE]ӳv`V0ᮒ3ȩz_Lq!&!-W Kf J#E03kWaxuռ5&3!"n]h~iyW+lg[bGR&lB/ Sy< !DhqI}b*xhAF py뜻PSk5}v hu&%XJ2kΎ8w$ۮXo_!q͒JyZ!nv'0CQ`H/?F{rU":no G–ȴ c;I^xf}k`Ԝe:J@9 x;"P`o/lWJa!` W+xyϦ 3+e\o?]Wz1',x3uOBIb;mziK7 IS^ݛfLk3qPϰ@xQ`6m(ٻɵoW8:|;/D3;YF+!)PXd;x\z3''Ξc'&ye}[tYv70 (?۲]7}Qku.=C{lxiNq;pS%yŪOEzr0=8hm cZTJH(`;Gݼ\G^z$.T4E3b4ghp w_s`ަ;c  Lmء7wcwvґ3 B}/{6a^avn+i&=\ #N]}(ʵzͻ7ŒA~.vF}mx .f~ʬ5=fcE\c1)\.BBfsX#.FNnx1aRٌBR}a=jQkt2Je=+eVe\@D[i=z忽0hA#{HlkaUJ`i,܊.9d LJVmqptioZ`rS\#ǵS8v6= = cdq\n:BEHGwRY]iK:}1gPeî3잉OGCo.^:@Q[=pōfwŻ>8 Spp;9z:Kd7Yx&|%+9+v6쾂S%-?>7i#B0B-=?t l8&{I 4ʔ:e}kZ~w)WZU[:w۟k&;Bo=2.c:êS0&߳p8&!x2뮾 DldxqjInqndaKf=?:O}Jl3B<^i.zXBli[Cskוo~둡"?s\ll^veD8lJEiEUxK/ !wѦ s/w7uh=ł}WzeNdV݂e F_ dNY֢r$Io2.YSmu!voc{2x꬜|_ʖ5+ ]0_v7qѣ[`?YWr+WL:,̯fF$u Lz:fE|%OM߇ Uhf٦LC-`a(=ֻ_p~Ǚ-MSr!d>">t؊rƗ[[m(,`ɼ1wV/dic+X$rjF@?7iAnʭf d+*ǞnТN3SOuҖZ)KcR`y?msݳ%czuKRVw E+v}ϞOw =?s)`)ޗ{huz-\<ۭT%pGޔ:hgF!#uL޴hnfB0U(b39_M.ZYbokkmpVZQaSʋ_ t4ɍmƠI}U~ّvr޺Zo$ݨYLY@|DܯZ\ ʼQ{/`JOl,DqJ^=Klg1Jk}?xteu b;[hN]ظv֠\vtc=,;徛VK NMLp@0elPijr'>6EvA*q~8:ƴGm16eē^/`8dwqC+v(Ĺ^N-N&ʫW`RHU^>=vSa= f=ByrzŒֵn,GF,xݿ̢3XXKA*մU`}JdsQՖN='|xd_3݊mU)hvv[,igRSנ5j谂+&c;~ih43zc ga$“KݞQ4Epcz:O@FBcT AT:vݲ%\F5 3D} &鯽c.>&{v^zE>/Q&">IP+n ɉdgϛ^ecmIp,j1uZtz&fSk{_[Pg%:njWNWJґ^/o^2o?ݻm?3Y9& kصGXwQ$$Skp ;H >W hoaڹ#zFP}}ǽug範 V2۫~Sb;y!ɧ;ch'X~ۂl !񣗭wSߜP4fu Xaa+r L"QȎ/G񃜔ϨC8*^<%@mn]-I~.vz-/%}C|=UZFt Ja葷gG֪eM)oo]b%v´-t oaws4iEuY$|R-ygEՍf7l߳~A?E'(ݘ.P؇f3V_A{eH˓\gO|m-gb !ɛ sd5_h+u IDATɉy:t{RNwIohe|2+Si1k ޼`lֽSǎl{BgN+=Ncv_]~nR߀ly >ܝXw:JdX!+[^/b!$ݡixwoq{t#&7KVHmЏLaRWx_GC憼S#01vV@/kfa;9,>=l`i^j;{ӗ= `z+2wi Wl#n\8jyC]B|"V V*݁vvLjdْNq N}5Ro-`GzZ›59 Ƚf;:̧u *̎ؾd,ԋ1IJrqrً1OW!tȄdq@?{t;ky{ʮZ$@UCS@ҹ~u )MwڨYՅ:nlt_%%"pZE-ۙRIGѸd\offѼ_cD[ifnTyuMiG1̹ MlHl0 b((6}PwdcmŽtpȘѣn˾P8}L{<-_#$v!"[4Ք7ЋٶjV yF^y}vMsKzҷjU[fhTmfvyOka[7 vq8ݧn,lwLTkuf{̋z0}ѐl$=0 f;׭th.Ύ?yl6=EYHLXטwꙃMu&,*-o%$ :iAn5sXxZMlg`^u_:yhU:ׄsC=˧Be^J#=~hk+׽>.҅XB<ζV Jaٴ_v$5bwd5pVuFbSl]#8 >8v.ϗqhn v$lR][Z rdd[v;xݞ]4b!ug#i*!~is;~Ytt]<\90ÿ>oaii=m(=>[;gh8-/yGt;9[#``o^m(g/k㢪?, 0Ȏ저 嚚k?5JK%--5-2s]qW\pwPda3ra_b3|Q{'"nk**uջuebp^o\oӜf\Y}<ˍ~xѬFqaNgd|bTfpC+RJ !:%ܸ:WO:s8?we.~sn͛]/'[ jG㳗jRHo: ̺nlzQqdh4ҟ;/lW:mck2n@Z [KԼNUY[J4%@6ڳ>^7* )i25/|S޳rY Ft.ߣe0bh"!;aPitۮ ^IBsP~C+dZ\*DA& P)(U4\exZYHdmͧ z EnS9[N7:gS]Taxc˱27ܨݜ*n6 p>6^7MC^0W7çYX| ~m[ aI"SoNM1QxJ5! zٜ塔\@b࣮zCXKq]>gnsNEwTҰ+tKwn֫*-C$KBk'-q{2ǣ"zukTx|WHᝒŚKfkJfS3=8gL1*?X[ID++iq½|k1VGSs۶lf3Y3Oy=Ů#WpOe^9e׺]6Aִjyp|0TjOENkתzw06Ywĵ41q~~ͧaًDa\U.Ne׾9Wӧ}i:\X]@Dfwޖ#^^.>yd]믵fwH*䕶%~K˞Ȕ JJtR|flz솏7jxfWVTw} "~>,VfCw3ӷ{gl'R5rz#O7]*?IQu Vlmxt;V-do\L>yS'p0,jˏn.&}p oT 23;s3#Z0n uԆ!Q'L/fb19)[78g+-1oe]Tv~n~/7;lYS6&{ݸ2B&xK@ը\)c]kp @݌lSVwxm}4.xK6-m3}vՂ٪!".6qGbڣ0Z[w-b[niΎFxSֆ6G664$'yÇG.KYwKcW S< L~wI5xn.hijr ]Gmyx\G<6V3}sǵKx<|z⼱9Y SSL(Wi[As?z6?y.FMR{==F 滖ڒV0z%1PzY9w- rtV\Gݙ?L(+}ի[gpໞGV~O7?w-A>6V&3NԊZ) dJi.8FcvmͷBIԖ=];#8nLN \7`)YI|ϱ+㇥|SlnǚMLY"|Q?X^فlX"#l .u }wK./1FWp7;zòyI,o\e-Dz%kN^MK/S뼆4 *%RjgBdB$ICwRo(Jluђ5?g:wb\/NMvt{蒝.?\V?orr޽`!o4keԲ>H0a|R[Rܩ/$QJRZ `'lزdF70m([c=iCn9udĊݮ'v"faj\`ˊ-P(S˗x]ILo)"6_8M \,%qO<sA.;_uNRJc$b]o{n᭬>Ի^gwk/4Z?hqSk{Fq2L)= 9ȒI?bsր1FMT?xz;:ˤ]M˹4jE޵}v|dY"W|ukl?s!kP|RێETEx5 ~u Lu#)Eæm)GYJl#BfLf3]c_3ߟ1 36=P\_?v%{Wyn O멫JJe%vZ66O:Ҁ6J-J)} S 3n߶k$/%>aQ]XJM.H]lɕל_?u< gEo.S@{6]Kmr&DdJi#Ů!WIq`]Ejvaؔ;~6Zp╊,=S{[evbX\%2uAAQmS7Sr/R0sGh@w̋gV e}&Ѵ.P( ;CU#_绞:D0soӲy&݇?qb)d $hӲy5T&SSzRP@{avݚ ]_Ic3ŵ-C4>?opTN|S\#tȌ?c') h#/W(|)Pۼ=5w/ l)QTwTަ{ cbldrm+voնgcM[J|w{/6v ן}h`:`^F&m}`gڥ|>S;Dz~@_o)+4p4RJ+l $ܺn ]2GX8c ?WKеGE.}Qtk׋ +eZtT`Dvhw=|(*S:\ܰ|f7/c}^=V~Q!֢ |h;{ezu;}!:FRJY'F>z/ hzm1NWb?p,ޝ)*ҁ ~O Bk~+xD2THXнh1+R"ֺ\)Z-:vx?IcDbmg:^'n'=L&ໞvZZF-6Iu5eejvQp͕3ѡg0޿$.bȲC;1(ԔbCqĿF8#I^}p;F𣔦U![6qbXZt:N}!6#B:mG.*N*n@ޡqCQ A^NF9JuQi;߲/Uxl?n Ny;x}8YFv:1OXr:cʇ^duY,pRa.Kb,,P*i؄ ꫷Xd:kZ3D|6c r psptrHRܺXQ)~ENGأs9k!o sĂ̸o'J͍\uwyZ׻o_}xi-YF)c^9r@Cl\Mtdj]AQ1o$.\I̿x:)5M_Xd./W8ND,,(sR@wGq4ZZ[ kh:ubZΣKN\LL{dS S4-o,D۹}C.MDa/v89dEog{k Ruhg׵L=`]@b0m-\ ܯ+?T7J|]Ffv~ڃ̢iYJ {s RRb'U;Z|툏Nj% @ B(Siuy%y%%43TUX&)))-d Bq+ +ΪK0EVRyG_,l7ktS\)"CpqkK%0RW@Bk-%'}VQJչ9iY̬Ü\qvnYn^$H"+q@)QpQB)!D( uN ,ts9797p~t) d^ܥk-'oOו*MI1ߦDokozTzڶO)ڧ=ʁ z\?ǖ0 ü]CөJ^p}͔@[y?-WidV&Gk>,4-:Dm`2t[]]&HMI˰ќjzNaQs?,2W2we~;-z8D)=WtJi0_.]]Z]0 cwj 9"=nrת@o15v) Jt:O!8N`1PGȏVk 0UwNj^8Bxd(~|!Snz#ߝOXzjU4T{J}ne98_a4ip:dSmg,lgRf )^+ȼrҋ?~;! `1PC(Gv=).0wx-aSBǓ<;ikgK ?1LRRJ{H_+*?OM%|zR55IqT`!~oۓ`7Bw.|M&0)zSWK]KtrBd] (ņ#W}Q,' ?oQu=1|m"+J)^k4"xDji\4k Sa +G7k?vk :xiuEŦJa|~=4ΚI>IDATL5X^TR*Ч|/DH8^_n1WZy}aS +cŏW$., -+vǤ|㬣}p{vmV [Gc0hJyq}(/} &%IyطG(9aNQ%?ga[RJijۮ{ n|\NqYⲃq)]1KC.92J)\}b-Q^j="0 \ \9b`o2f@IDXK8j**mN @k  7mPzB3K/,Rqx͑8,UU^b]#WwwuV:lH#_3AT\@Bi}J_T>PZM*T8JM *JjTjRVkZ!5ZFt\|QG{[A4pC{f'GǷ+q TU[xs4r C)=\5+#A#P ٞvJHB%GiK 4|DAn ]k`PT|ݦ{]Rר\!`8ZZ:6J}$ `cek+)lvq:4-4Z-4 ʿka [P/rŴD 嫌bS{ʖ}*5 ! d8򶷵фh*lwWQI;пzxp Dea.Xk,-,Ԅt8V8NmtNGZtÈA-߰#d)e3B犠n %8[6ڰMm Z5 AVpsq՚9G}R(Ҡ?EPUi o| olXV\ @SiBdV'#akm> _k/.X˕2 SU %>dݯl?+{(JiQMQ A!mmr>'QJu[9SBWHAƶc|tNصC8t#0u:, >2@fDBza{ U8ѩ. "0Lm/, X x} S MpW@Gx<%Jףp@nxkT)Ø-`ʬRYa6φ@fZdd@o5D[Ƕd@n߫+<\_y]a^Pxo\ݱ3*NUҴڮ2gakjBߌFF ?oO>d[0U:R%~G2g}0& "%}w2_$l4 `ϵ oW4Z CJiu@f:Ѕ' ` 7уG ـ0yQJ ]Gr'pdJ!kX 3Lg.6 tS#7zI@>Kd:tL,plsWgZl2#oe`:fd>h`[} SbڜŊvpLiX 3L=EQv`&{'B&~1v;&~2WY*+~Ԃ7Ua9B9Їs/藰DVtnZ3cR\I/zkY)w߰@f#b8==\ƏLxmZԤY9`r( c- |n d1B)י?~*K$ܻC>?!A0IV&4ӫ?]sy/21B~ԇ"aݽS{:m(N?aN [vbYJ~VU@fAi?@77gd7{Lrx4~P | )*X 3!By*k#ϛ3S]g/(pb=QJ䳮aLaȑ޺/?,d570c v]EOcZC)UXZa0&i륛 bo`奧cb+bJi!U; x@́㥝 f]N}[vT2),C00`iY035R5ZK]erc ,yJ ͛1U8lS A8uRE2XA)籴Za2p菘 ESZ76;yZ+׈e+ x,ֱ@fy,#[]`7DH\_v?b 5Z/20/b `6$ffb)ㅟMſ|7cr fwݬ+-W\#:S ,y%K es>Ҙ:FR P}asN'2NvcG\U,BHGX@Ɓtj׆^QJu,\W|)ZE3~+)0r$5158?{~SIV8-}e7PJKx,^`0L#xyJjZ01fb11%5>6nݥݰe:bpf(Z*_X 3 Sc!n.N+}j9_$k,ROszěI+_)x*^c0L#>CI@?vnoa "BntSpW9]_>EYT daj@m_|8ɢkD81pv2R"Jw@;(I:_$D"x_t:&`wqݶQʜ|i &Ji2O%5 b`ө%7rTrGcסc=ORYܬݏ?(?U "0@bf=v;a-Z1+(cm!X _Ӕ {\d!\{X 3 S' N}z(9A}xuIiwfˮeדR()ЇJiU6 90 a7mӼIw |O`4-¹8qbD&W^C $!ROLe,!"oa?_</;jbKeep*]˚Zl?E)~@f^ x ;П~Jѻ{'2WWmZ9prxSq;V].aX>kasTp,TQkE3520F)fxssv*tsي̭J k+Rm2y9JJe(DVkI ee()-CLRM^AXSXTBs J?G2;v:d|X 3 c!~{H7YG}2x)rbj daLgloiȠʷ!rT)}I^ANIENDB`astrodendro-0.2.0+dfsg1.orig/docs/viewer_screenshot.png0000644000175000017500000027626612164331161022541 0ustar noahfxnoahfxPNG  IHDR ׽RiCCPICC ProfileXXPAݗsFr$眃$$ & $ ( (AwwuWWWuUmWWtt+`K=MN{GN @4vq 077lNHR*wP7 svuu $,F $<Lo=mIo]?6֖Z ` ..!^f8#ܼH~$@S^MGݼ]`H!وwHX>]\V'4%;~:#Ɗt& V?iN`Lz".#*췱VPptw)J"nb"R)/Z?u.SO]+_&EYD!_P(-`Q 2P:kN7 H b 2A(ŠTpAx0&0g6A@L CRtҁ!Kr@(L"T ]jP zB څ0`>XV5`#>{8- ~@E( fG'"@"*VD%bA4HN(RA!O!Ybd ك||\CBQ(aeBERQjT#5ZDmhz4?Zv@Oet'z=`0La* äb.cna:0cE6 ˁb$l!&;](q8%UZqøE ϏW[}gEz|/-~"Y"Ygdv!N@A$&D>:ёF@%vg4b %Mc_)p'(b( )S SR(((]()K([((7h$̨nR=ZPQPSPWRwS hihhihziiѴihdlJ# O21h0x0331l103z0f060N02q2012=daF2 1[0G2_ae^eeQfqc`2 Zfdd`cgc fͶNϮ˞ξAqÇ#'?gg+>W85!#Gl$i82ÍV^1*z^;o߀?Q@M@ ZPAOLpD*}˄GEP""""SQ :bbbIbž;𗨒x#I-i($*CJHMDj\(+ ,]FXC+YYs]rr!rr+JH?Wʀ͠`P0ΰLj`deTlX8ĸ6143ykkh ͘2d0(h)ikgEcuզup.[ ['Z-;mvsq>͎G[jǍc: -:::M?u '8r3󾋙Kˆk뚛%+=70|545kߧ#$E͘)ex'aNn{>wpcvYjmEweӱO?ﭦ~RUo|?δ~Ϯ ̀ͽm]ݥ}~сA/_o]B\Ҁ==q4#o 50n AD2 0cqxU2S1bJڃv^!ŎmC37%y (-)|I_tK\@B2QNzB?ؤ^pY-][-n^!dcgkmŶmyz֜x&WQ7 wK^.V>*~ߜG `S !oa5yQ1 bU5%%{=*~zg`dֻKdݼ[DW$rYح$JGks+U?7jj5o:Eʿ}~]{64>lm~Q[ڎβ']ݱ=VOv=:=EPpHq˒q ITͫ>R~ɾ]ɝUw~Ny";,Ϯ,|*7okk`t=g˦')v{ğ"ȻD=F+!H-((ʩiV(\Ә0ϲIHq /Pp]Ae $Ll\| J?UЪ,G%L55hhKDƛ%HLʰβɰMvv>{D;.]n%|>#~%AI!BC9B&oGFFDKfeL@'l&~8ӟt7 %Tsi.g2g==?{kFV/_/m_,V, ,.2_ruڻוUϮWrۯhM#^;bMKZQdN>>^fWNw\Odo쾲gϯ_z!:79;fRg\gbu*Usqoz -x-{ȏ蟑>z[[uvw_@F+Fd#è8zs DKr) rMTԵ4yqt^ LtL,cl%\GSy"x]t9˅BEDa)g7eer LʔUTѪGԲս55(Β#BC^9"c3Ii9'v<+okeͬmX{C:w5ǂH'Σ.~n*i;|}_@d`o`Su!]f3(B%b621-qs }8ẍ́ļ3^IB)gRAsi/22]dcO_㗫wӼcy1.c3JʘH+^U&[!^)PuWKA$[ηnxyg}G6;N uv&<)W3Yw&\})5~~իi73G.d.G1c;~ Z<ϴ=O+>$G00'`s֫D<$I8 !1Mc|@H'1[`!u? Γ`/4C0 H,o Ep#L1TB +Q(##FChut" br0\Xl v&k-2SJ&Ӊ_ɭHL'P\r֥~L@DDMgI7O΀f(dclf2eZfNcdg-gsefxY~D>o6? QpMhBx1'qE Z5R7ee (*)SRX:h> F\&2fmD[8=KNd%N؞urrv$ nN }{ݥcWvPT:mtP+P9s,H5`@ a zH2 ׭CzJK)A:UT[:M5Ig, "/> pHYs   IDATxTOu b`DHB"d':qW.]cf Β e6f]4Dfɂ׍ :0!Q̐bllAwuWwu?NWwWC7zիs~<9NUWy'H$$I$Iƪn$I$I4X$I$I `I$I$iL3%I$I1$I$I4X$I$IӲG#) F $I$IC"HvFJB;6R$I$IB v*I$IkTV$I$IRug,F=5Ġ.I$I3%Vg`J$I$i`2 F02 \ PU$I$IҥbA:/ W-X$I$I&ιp tζVp+I$It zζUe?A ` S*Yɒ$I$IJO1WB,$I$I ɤU&25Aa` jj֒$I$I Wzje ְ!xI*m`%I$Iƺ&[((_lI9Aa `ej*L̈́-I$I4V %hs3wDX`,o͓$I$I LzXJિ-#I$It!Jn:#:V?L: 5`e@K$I$UC`T:2n@m: VnLW=(N^I/1$I$I:DV :$>;Xptӹ㜛ns&M%77ʳj$I$Ihooرcvڵ}ժUzZзֹ ;Lq3O-Y憅 ۜOtttuV$I$IR,rrr3<7VzhYߐ MFA `CfVY%\"D4=J$I$)N'>O h"uH`Q0;0 &5\92I߰#yYnYY-LI$I$bܸq77E3gr>%呝@Ȓl;Fsۈ5#StB+'κ;y؛[Jt] 3ڛ,Q$I$I*H\Aw,7`5XXC!0~rtttF9{o`ťTVM ki9uΟGAA999.~- +.+(! zr n):ݯ"&LHոtvũ=!u?ؿSW0h$I$Iӟ'wH5؃s݇ \{`Ttsx~{\_q\g?DWuO/c ߃Lgyg/ĔLXe,EYD(E랧9OsWqS,4h{~[pyd^|hϰ9r򷄺NI4Tt:v9 q<-WSFN~&ͯx'?z$I.NCkX kHg2mXuuຮ.obr~%oIxuu17yqV;?Gȟ::uGr \q]yȍIIQmO?Bt?!~k<})RȸH!EaNt㍓3JC\*rhL$غo3L38$)3!x>t~J˩_@W_7マu=P$IE7;= @}Pz]}0 V8_{ڙ{)'(>yx'<8M7rOqrv6c(5"l%z㻁BΚ5rͻD|ֹ YA T]4ԓWCeac[]S$ UBwud Bۛ9kD?ΟRŋ?)E<'y:`F$Ig)Lj V3P>sv.: k_ Ntw_CdASN{!ƀ^'jee 'eP./8rtuiunI3&R9rdg9u8P&;^BggNfdq{*IҰSjڭ_7O`X;?}@dBIaN\K|uɯYWDyz|!X tgxoZgvEIs O",oX8i $IFtgtC $n~V`, <ؗ#ǘDIP/\ʂI#m픶t00'?_i^%]AnDrʋ @^ byd@N%GuEtY9KJ "7";+D"AG".b]]u 76%Ua ph.0YyqzE s_x~f>j.!B]tͶ,jvnnuSuq?wj~&x\ɔ-nw"$I)=zWpU0֓HZ7]`*PmUu) ;0kn9䑀\(.~t?BBSV[>rǕ.+<́;;=pN;Pj:K )*ȧ4pa vuΡ-h^a$ 89pp =^߾xw]q/V<< xDwx?C=B Z{W>5h{;"|kq3>t'6;%;$I)1`+9'VV HS/ʁ5Аu$nOz4{kh&VBy)w?ʺWhiGcǎ{zQv 0Y%%PX 9=#vgN@Gve XtRKAv6l( Z;i $J'e1lJ4hk_|3{::Gu%j~ zZ@[] ]]z`u 4'8L*OaI…E|gsME9h,I4rz;_Qs.X hi몫ﯽ?۹ {WYSR$8z$x̼xguN/(m}6SBBr AW\btQn3E\[6hǀ/Iw(^w!Dx<ƔO!up6SE-?>8]%?N՝?{M9=uԟ:sgj/fFU. >*,MS'G9]>NZHGk_Y%IV] `)C Mo.7lgǾ-[:q(oGo~Swgd8B@H3M``^}(]HuJAc1G$IG tu51sjoODI$I$ Z*]nU"Ͳsos` Hez]{{׷I$I$i@EEE\qwor&y{sp|XݍD8C kkkG$I$INJ] 4u6w$o]/8=PކO$I$i7nXiiie]<~Ȟ$I$IFN1b7kuR Wv8XC|o0%I$It>dhvs^INP:P$I$i%@qf95nF\pBI$I$ L&8F;s`I$I$f&fsNfAuy$I$I3P4 V BtI2$I$Il i駜W$5I;z[%o?쉾$I$I4Lb4c_&֕$I$I(Sy#j$r``2I \]] ]bg\~ υ4*Z[[fH$ UC@"ͲD?ˆPX2һ^G$-[Ē$IiALXC vKt][(] d] z~ Lͦq t3`T8|.s!gMMML:5$I#8LZ?fzHFra&_iP\6ڍ% JJJF-,!I$FǼ$I.&3&g e(<.$I$I~ya#d߁$I$I xHߢ*헨(oǞx5V|!1vh'7ݴph7/!:FKaǪFu5=i ďOq$۟͢䩽GF$I%s1݆14ǖ&7f|uk茵8Ľ;[_ǂCA$ 衝|nzj.{j#U1̺Min|hڍ~ym$Ih/pu^c6Ý=}'ְ`vsS>-qųHr9ơq*}Pzbk^{$Ekٻל+fS,7"J_=HwV$\ſL//.w๽0Bop=k?wAV}n)O/$IVu4J^'1@ygmBxi-Z5`fN1=f_ _/OZe<. WVD"K/Υ6|:eV|vڐ[$k5D.T~Wo\ș|Ӽ+םK$X!\¯|SO}]ÂULv,{d3wͩNbuGv}>=ʡy?xW%5zM_>3˙Qͼd*;&a}qyuY;,xn͙/ܒ$i XX1oV`OaF9>iȌg;$IFY'_X]`͓x'Iȣq3߾ e6 7rς5ڍ$IB֚Yb>Y=N-oڡ'zw^? DkXtωTErJ*W^!$ıWdgI$Ie,I$I$iSi$uI3/Qg/s!gͽ?I$ +Xhg]zN5i iԴK$i҈d˖-k$I&L0͐$I҈&Ht$I3$I$I4X$I$I `I$I$iL3%I$I1$I$I4X$I$I `' IDATI$I$iL3%I$I1$I$Iƴn.^uuuv3,+˸$쵶RYY9͐$I҈fH4*lbK$i҈(((95ܚL>Ç)--H.@MMML:AI$ XQ!&v32@II %%%I҅(Hv$I.J&$I$IҘfK$I$IcCex~ww];ڍ$S{%k-Ue#V9Ή۳4V{>N98@^$]쁥0?z;+F!$]ryf5̚4kFye-q3ٿA1G^ìrX|CE+ca;$J E,}`5 Vmk7Ot6>/f*[{斲sb-OϺv;!ItbGXs1r,S$|;?Zk>&;w:FYYs*>:y$IC/᪹,;~ 4ʏ\_L"X.v%Elxfvmei^9@p}NwE/k<j6$]mf(p=up Efx'ƪYĎ$Ԕ;hAH$X޶/jP.XpV}0cjDB_t{tBd(ݥk3$I ާ''=GzII=:{SW/,`Ǯ_P(LY+j$Ig"R5M / 7}}bx5p#|\$I#X0,}ضݫGA$)S峸{>l}迳H3w`".Yu*vRrLmih~6~k-WNdEm5OTC', $Ic=.2%Wֱi2>|BŃ(|I4Dܺr=o߱K5{)t@5Ix<>]]͒m=g?' | ,E=y#.J}mqR5MhuM퐝Ǹ>6'o\$IUUU1s/.hǓIz%?tA*{`I$)TTdfV-NW$b`,I$I$i҈Jp P3g%I\ssh7A$dK#"pG!gajm%I:[K$IA4"*++ٲe ޱPtiiiia„ I,n$I?H$ ?K$I$iL3%I$I1$I$I4X$I$I `I$I$iL3%I$I1$I$I4X$I$I `I$I$iLUWWG~~h7Ct[ǵ:Eĉ I,:n$Ib˖-TVVv3$I.4" z~ LͦH.ZpaJKKG14}SgH;(I`K# l!I(5PRRBII([x ItQ[I#$I$IX$I$IB(I4JϾB{^WΣY1ji$97.diWᩍ/s=w1%w/It&͋S[sC 15F5bK/ՃĀ葃yi'/9@ʖ͵;w55p` }`ݚ5_y+$Ie]_apdSl~qv2TM^U_.wܖ4w>ozyS -Œr }~A$<օ:ض X-4l 7)B eBG0pOYlϩkk 쨜ٟZ=S\X$q#>dSkyxf#,`7}Ԝɒ$I Z.[vOnL KW?Vܮ]l?G@+ؑ'Ǝ5|wϑtIi93n+˿Ɔa6ios?Kyn)sM$IE|<R֭|gVQjꚁZ6/Y ,aX>M^F$AV,ZwYf^e\ >9@+EݝSwġ$IEօ.<Kgwu҂B(cr< x)fޕ-[|Вs`61p2}X"}8HLfA==547 \D>]򑗈/$>654S{`'wÒ-%I% H$_ z'<{d<svs8;Ʈ]{ģ4-)$7 (x.gox:m$[PFcc#yg)**pX|s v$[Qtaw>˚gtm~6`WEUҟh6nn ӽ$IPUU3gp袻w<љ4g^sL{|N . \PBE4(Iʭv=ړty'p㿲3WZȆn (o˂BvZ8$I: `I$\*2\@E?1IK9$I$I4K#3$INhnnL|h7A$dK#"L}bT!IM:n:hwI$eFDee%[lp"Iy„ F$IX1I;$I~&q$I$IҘfK$I$Ic,I$I$i$I$I4$I$IҘfK$I$Ic,I$I$i$I$I4$I$IҘfK$I$Ic,I$I$i$I$I4$I$IҘfK$I$Ic,I$I$i$I$I4$I$IҘfK$I$Ic,I$I$i$I$I4$I$IҘfK$I$Ic,I$I$i$I$I4$I$IҘfK$I$Ic,I$I$i$I$I4evt񪫫p!IyJeeh7C$bK#{!IҨزeA,IadK#ɓ'EQQn;y#GRʽu%kkkK):u*udmS?v&NR &#[[[3ՕR+M"H)^|͔rk=-,,$HA$IFTVVYYY cN6ҭ3?֑n VGg,]4:opp1^ CLm|mf`m8{3ށ~>=y3!Ox`06}L7`;oO9zwlSQQ~`vA=-Q?N)_y} 쵐{d{u{&Kk`t=4@ڴilQ ):۷o_J9| z ^=2X(++<ض{(]༪rZ }7Z;`=u=>u ֑31؃2I$}tqw>u\})yNK/0???|зbt26d$!Rmmm}&&&m.(..N)Ԥ]auI;?8l)`9 &`e:&MJ)B)))I)?~O.vPo(x,;YKp>ߋ@sl KYprpt+sz[ ^ϯKL86>'$I:w$I$IҘfK$I$Ic,I$I$i҈*..N.ɓSʥ)`^tO9SRRM)sL0!|}]t#[I$ {`I$I$iL%.vhOsI]N9>/7>=o s$I$I=.a}!6xd ꢥ]:5q I (ۿ~'+֬]ju7$I$I4uI}mSt!ٳA1G^ìrX|CE+X>scg^g=ԩS)9^* )**J)ss[')%泩H)sBA<:\4\.} I{*c%%x|_~y:z뭔r0GN0K0w=`nt^ve)౥oJw{E ^7`,oVk$x]sI(+xsq|۞.7W=̉4X,9 ^Wv ~=Optyĉ)`M4O".x =  V3fH))#GRc ^GSGJ30y ~?~<:Ww2k|zkiǪC۫w6>o6:oj^wژ1SLI ƣ|pe;;?)ix`ެ?y}yX1}us*O0Q0w@]]]Jرc) &lo~`ޤtyyti<اǧ9i Bn fsUUUyo```+"<@&,(x AX<;#^ W_RJ|AsoئNS9#؎t(o&xmN:<&xͤ\ ~~7:sO335W5o.~?9NM ^3!Z9ydm$;樂qoޫ>D"ѧn]>xm"Kś| [ӏĸsF]NĠ*N:Z WQN_ţ ԝl%SX:5sqڀ2&MHW{Zmzbq )// {QZNwQ+̔8!& Dj9ٚMe8Ԏ#oi)0>cpVt79 ('.L9^#AC;koմ ;{NVB6ga{[5~U{+׳:}UwPųphtOWW}9s% XJ;9a[#5p 58а9Q~k7L"Gsے$]ȒX4k^CVϰhKdo =olI^{6 7X(>mVK͹5{2}."ZlއGִoܲox&w IDAT+zgfExz4ɵkٸ;0{J[[xfGYQ Usmv5_skn+e7ncX9FGGo;V魴m7yKOݟUQVnx[#g;ݻ/5 )8}<^\mቿl+7KoPuial ^/#yWѣ|n[+bqp}-'+\5fþ}Pw0% * )Xvjm}sH$i(ᚹطA7DMm)r#|zrhNn[r&01zjaCRo3쬾L@)2u۶xNvV ^Epa8-=L}-mmI]Hb sŷ&3N$curǹIi'5>I!5a*t>r3jt;N4ll$ @7B ][$ <*ʼַ~_ _p' F>x 4/JzvЇsɫ[9r=۱e>7E]'ڏ+CBwx-7jbpPg;u17&M"R? v$ŏ+ڑ#hPoݗIo;#wy2gJ+vwD}^܉MEW;xo;s+9'G2ԁc?¾}GћM&|]5CM뵝}uL,[bBIowɶb7Lylya;ozuX_O&xjy:?Ʒs`{5W*px/cy"`ƨz|wSRSRpsĻk7W-IHMk5B@om.?޴|CiKTlύ/o@C [{~ITnފ<Ğp%<:Ŏ3!݉Xw9/cfj"6~5[ !!#Q3+{z݃#@\ r2?룅B!/E7Sw#cou=Nn¶7S vZ'O_;W_o8Y؋#'7j㙍׶#e.*OOb8>āwd"yxQr5z'q^|&Ųŝ`3?Ƴi6a._B#;@N><2+/b0Ἃ]h_VX(?{ŝxj 6oF510 ˌnVUS&#'O2zLE#<>:B4ɤaDyP?ܘx8P,_`Pqף.)9ID ~ r`,[Xɵ>`K]8s E,_li5 wԚE,0r׭Ɉ]3 v~v$&BnīW`LƊqq\<6:nRs?$6y-ěUKY~#WxnDHu2\kknY[[x~3% n/?7E\OO^W{q]yz^ۛ ޟn3ԃ&4ÑDh/}k(<3jP:(&~Z#퓻&q5<-kv+!䵟9: 0AEzrW`wɍTN:* 'Gba9G[ky^k܄:(Vs% ]F]8Qlb{"{xe??O/3#_ G~_kD/|_-͛?bW gxfSh{HΪr+J,D+>ۗZnHu"PK!Bh %3ޔLg¿|6m~<ԃ~&^Q ~=kxw\/3@'sر:_Hm,Xǟ7yS!OI~ɛ0q:{jPgWg6bbI'ʏ4Gxqtkϓ+7z9 ԠmhDaNj9*m@3||BLB!Q`lGmw)IĆ~]=q$,DBNd^^}XDh"%M|a.쎋vORt] g.]A0?>v“9鎴̍+ԉwťato8N6=h<'~Q/Gތ83$^Pz\z } y3}"0@Bʍ̑٧p Uko>OHv-o~sy ~}k@~YB-B!BDc~58t纟(g2Z?󟿅^TLOG~~q}j# .)|IQ.[?֭[ԨqɝK5xVso.zdb#x{/BvNǞox;TR?UM$;Ve^;t ?zz+n}8q5onjB0l(̝N>p:[9.knf$r|SB%Ŭ v\3㉽*.qثZ*p] k۰WR6W]}xȂk2]>'vհHG(((0b cǎqIIɔ׸JF̾#=]M.fʕFbĮz<\lϣ߈Ϟ=kn)3]]=64o;X'ya.Ł;ڟփ ;PըG5velPU}ˊϹчύ[lczTs|i+ؘ SOC| %hGo?yzv-w`WWlGw%[P  FÏ1Omϩj˸Ӕ$-9=7ot7A}뗗ݴbןw/V/nxe|)ngW!ǻk57vr&9za%X(%B!A&Ïam/v+yB `EFE:t|{ݶ5EU" ߋDOKcy8c(?ak{5o`mUa{Fm~_W;fKx uzo^[&vbwo׆5'Qe+|mQ=+@*Tb}6?[@BKү[׍Qe?x3sPiGe%j+VgQp/=6o`u5"޲[F_5xe~+@M}xl+QvIc;Ib  u_vA ܯ?sRmBӟ tވZ<㥪ؾw_pՓ?[x;jjڌBDa?^&BܶB!7x2TG%vgO!#?ě<?`k?}/}/=EsUٻZBiV?F&jSxi _,v'1WWjz o^cJ`pjb|ڹ]bC'OW7LEsU|_GAAquK.1I/|c+.!\~! ׍_G8#Up\>5J0#1|L-ƛ؈X8!#WLCCQ/8xB>r4#<\cuG]Gٚ!u Z8)TJ`Y!/0_VO_%K1rJ04`' s%R8rrƿX1FmsͿ/.7'啽ZDi}bk^}SN9ѰWɕ|9rҏ;16Ur5dŚ% ; W<]bN65ZDknK'Ll+ Z^#Uw~qmZ|s%yϑ3g`||J` !vH`B!B!(%B!B!5J` !B!By 6'g.]j,q.++3r vg%.g ;KΎvO.M ư{/?{a [\Z#fߍ_up%Bg\ǨYsa'|bg..'{3i:{{>=zԈ]N ?.c^֚Λ皫Fᚫj25yM\Tϙn v3=yq=\x~צkMb `/g.tYuB!7v` !B!ByXB!B!b^B!B!(%B!B!5Y%++ː_| YcH28s[et YjdddK6}-~A#v >mmmFln ` Ys\7zK4,Wv"ϝ;7}Ys`sQQs[8qAAF|ID#Ϟv-ao 5]eG.󻥥ňy\23q[x|sss2G5#θ\Laoo\.}VQQa<؎#pr3=Z .~亱{UkأsU.\[e0| / {ٳF\VVf<\e^zk&-^؈y g_˗τ+W1[.\{rn?|q{]묶ֈ5sn `͙3gxݺuS!Bqk,!B!B1QK!B!BkB!B!9ĬgxCiiiF.ݸzF̞ Lz]׵|rC1Y\,řK:/^())1b<|_쫩3bʔZe<󸸼isjhh0b}=r窫y^qqqqU}8>u[eذ2`cnnyL׸e|M۵ހ>ܮT`o> b֭η/%B!_u\"r|qy] sZo@u 7-իW ͒%K 1ߦ͈#oad#待{ IDATf7 )wFkOxb#f'k+cffCc*b`;-~27HᶱU3ZZZ=b^v׸Uy53̈],߇]T1bvq[{|ylE|ϮbLMEEEFZ#Fczs=F̞,#vy=.t>>ny6xsMܯ?.'s|B!7B(B!B!5ځ%B!<*|.nz\pP۵֣XB!B!b^B!B!U -y[bd-fҥK%>w}xxغϑ7dH| K]o3bIs\}炂#fKq%$篱8y TO'`Y8%˧,;}\"psx>=[tvvKbRb#tu oߦ&#ζ]XXh.7cڵ5,>>tyx.<$9b.<<܇r 1?g\?}\Yk!BG;B!B!ļF ,!B!B1QK!B!Bk8'SNY0bFbG ;Μ9cՋ8XaثRRRbr`{Vڬk؁î.3>>*1\Wv3]_g8uy ;\N$φa+`͢EDzg=\aMv5dGE4v2ۋ*^3z,^؈q񳨵Ո]S./ ;-[f}nʺ5y,/(1a[Έ@/^4bv&JKK3bvDbKnneW r#twwOy }.|_Wݹa`;r8fO c'r}s;d |\ˁsNJ=b3qq1pB.3b&q\<?~܈](^7Fk3PSSc{\L܏<\/fgk隻< kq~yh}]~oll4b^w]pŒִB!qK!B!BkB!"}uB}]\'(%w B!Bq; U /;`Sv@]]%mmmVSޗ؞ LGGǴe;wϨɈ]~vwf||܈U;#vѰ7?W\9x{O[_ÞG%%%F^-8υ5+/\@Z{d X9{kٳXt| 7bWǎV"~2ث눝W\ +Wf#wvquvvZ5e]G|<](--5bȘ><z)Zg3lڴi b;X|hBc:z$ N^ ի(=t)$Sp ΞE0?>J!B!|G;b)67c,) a(jcN}=54!tG`"ycc1+WP8v-oB!BXIa˻ x-xr#r"'LB}8>>ݎ"Tmy9w"Y# ߏ˹_{8:~WXɫ4[XzR!\^I,!B!mX¢x5_-];`׎-׷Pe 5kRs~~uoI#䏍ƍ`}ǛeLxy]/7b_s܈Y"|לa%{ry]0F쒚=|.ɓV<\(ǛpY/g$x~ !BG ,q2@hhPIq_\R?> ԡ Lkb6h] '#ő 8ޔ6DcAW NN c2|ksΝCRo/J?׮N,!B!X¢ر X־E^ +j@BrP) 2нlٔ[xXDZG O<\X=uWrrPvz{܌(!B!MǏUe^$@~t<\C0@a^:yTc&kč -H!`x4!XXގф4-['s(b V `\;B@JGqkQIV>J^hR},@GW[x<1p!BqkPK[^_p#<6??}F|qEBrA>888C[jѰihhȈ咐`vS}wa ވىuu9SqiŽ\*N1{\*g1z\װۈҬ2SVVfܧ˗/`o @O/j u^h'V \ZsA64`,6?l7H<:2H™ի9֭,/HłɝWի6@r2Mz(5[[{hmE3bPh~a4Y*`"Avvuaّ#ϟ܉Y#6 uè[TQw-,DOqB\H? J.B1K(%L˕v$.[/~?zm'|Z k`y'Jpn.?;E]m_j3NBvm-rDv^: d_S|^HkjBчJD]ߏ+Wϰ |/} ɝ( #ijBø+mX\m|B!BYD ,A$ǯeɯV=*ِ c ^|Ϭ˜ q B \gt+jk80 zGkkQzbyuuaIm-bѽb:WƐr"b:E }ag! K>I}} Q\q47!wbGƢۣB!b/^ۏӁ ̔k2+{z݃#@\ r2mK@ `b`;pس(v>4!l {\Bؑ2ϊ/"lGNkku ]#v՝YK,1bF\{woc' `Mj?zbßt$y))Aca40\3c">@vWvM]˗REbbcQKڐw,ZV" зz5"kӧdoRߏ ee\vy|"; yn"O.wD.';W;v59dk\纳K`?'(yM^crXϊ2`5Vojj2b~f<,bY y\ˉcB!X⺤dz)OJ&r"s b,.11]?87b``ǎM~-N]Z+WVZ!q'Oe ]֢3'JUUdG &>`a1C-B!%w5}}XYSD.^uXN[Aߊz{k "a<>݋#'O?F"//!eGiihL8)B! !Z"+O(d$ QO?Eɓɫ4[իѶt) uOH|{wp89z45!+B!7v`YNa M\+=;wp|/'Pvw (F|E#niiȦ7utt=UHo°;vհǍt}.{32U_~U%MIA_Q.Hjˉy^:?!.]BZk+x} ṑ\#@eǏ#btm؀JW@o( 7?Y 3Cxt?;k21;\e.x>3\&`3#vq577[ecf1?0SR0C_AMׇ .anWE3>%#!]ٷo\WA!+]p*Έz!#fwٳc}ğaon))(9r+*•po {9aYz3.GN^^Gep%#>aŋ `Gڴ qq@T{x޴_P(q[n)vWvt WqK_E1G.;x>:r=7ag`7{\C!/IC'iEB!B;BRH^mR4>B{V0<<)E/11jFׇNZB!/NqGI^yB"ysq[00( *.F%2 Q!Bq{#bV|qyu؁… 2-Ů-vFq >'vո)Da ]2ػj. _.v<;b7 {\bbb2=uU#f'`l s c@^ NFERRѯ} EQ 8"wuuYװi||܈]Mdeekn9sƈӧXQŋ-oZNNU;MűvݵCG!gp NBse%Oll,<>^/<><|>0.l^7r9؋ߵL#v?r1-|sUFr=WSRR2e=\7^-?j*/˵ c!Bqs'! ү\A q_*Y 2. IDAT>KCC?G1!E F2k!B!--OqǓ20u'OUɫ;ז;tǛ@jĚ8al-u:!B!MOqǓ60O(;>yq,pe"ۛ88WpOI@afC?B!BXB۞є;;y11hܰ%ԄN| _?Ǖ3$X"Ah]MM(}ڈ-.<׭[g.0׵q8,igaKΰ98ƂfCD|g! Xoct,<[͸]זQdgZ$QiXܝԼ',Kˣ9p!.~+(ڿCC@x#˨ECBl,bƐ80k+KYP%q!~ #~ "3ۧ/]&~1?{xňyx-Eyfb |B!yBۈX4m0՘T4UU\@v]tu}a8::3K!BqwrBܩč đ41? &'c0/o@N.Y ~xNuB!J` !n;GFA$ `ht,_>U3$~pK>`FG8J'B!tP*]]]' {D:::ӈϝ;g.gboɚ5k刉.C-`W ;q\0qyk>e'`;bocþ&n/7ndk/pf&++Y<.t0vkh|_}N\ E s?^!Yjx\LݓDo#444^ NDZ{;2/]¹Jt9Y|(1{{^yɎ7 ^\s\&/⹼Mcw5W[G2B'B!nB6ď`էߏDp"m1@ZN['NcHt$B!B ,!mAV~)͈C ~`UFg'B^/>?olL^ۚ˅Řcď"6B!w'r` !%X =X+90;4{jj9z(w;rb !K2b.z+e\*ZFmq>#6v#fˑ3b#͈+װW .\hIY!  1)) W¥ 7tR#fˁ_}}F1bsЈy]DtkqБ Zm|f qSȉ%B,!<&xEz;>`q <Eim-/%B01λ🄫WQHB!@;ǃ OΕ "ϣm))L;I 5gxQoǒÇݍ?FߪU|B!B;B{cczѲl:3>/q2;' JME0-0B!Bu(%mtĝX\%B!{B1dee!6Z.X ϹĹF̢dD.^VV65uuuFnC~ + ]c,{@iiˈY ri+}\.xdNw_ięE.unn;%5g5ϸOx}\i^,f ˳y v݋cQG#D^zgܛKy#9_xшˍ {?~܈YH3/_^P뛥.y<#^gF3^<߹~q>oB!ͣXB!B!b^3:[J܁9 G!Bqg#ByOb?R8z^d #IIpQd= A1?X==HA٧c,N?ƄB!Y%66g 0bUrDf})\իW[װˎ$v{}.ˮ Ze[}6@ry|Naa8JO@\T}"@NZ}ц'*6Ăj_Spi|fŊVylxnњMY%m;v|ⶸDӹ\6H7*c} OȼrޣGQX9s*󬻻ۺ]j| e>{/^lrsNJ?ވy\>Bvl_אy_RRb<6./ż<#&ƛ_B!֠bޒt2JC(.\911A= ܀496DсY]p2V|Z{ ibMKٍQGHw BQjk'b!.G/$]!\4n؀.׮I^%wv;!**Pz$\'дfͭl%FRR$Vٳh^|%ĕ(bQ1"^v !w !PbDZqL,訕(oى`b"N_˙h^ѱۊg !(JJ{w{{4X_~hl !sv`Y%99Mkb3N%. ;b8겮q[awM=B. #;`|>3U=4Pr]dff_3gqZUV6#+.D|1y3.jg7MٳXqF{{љc˗#6#^q^/<bcc ?˓.5.֦;WӍk^5%W3@r9xM|v{"s7%$&&Z=WFrq{9S9Y{Dg׳&n#B'ʼxcqq*+0*hj01W7{l ?J^I!6>1##y<۰a/֥#7A E0z Wь^E4uq,{- fg?wpqٲ9B!b6PK*@`Z%KF|=1K[1 Y .4bYװ`zђ,gٲK̒`#nUKϸm FFFGp٣ydf";J|1Qc=$$`|J>ӧppMtVVsr?[epgcL;oMśO[-u%9ͺ=^'م`<#@@N&3@&3 &3_nj-j]%b{`UX>sT<.ԟS&4gsL%,,,X<MW\w 3OMrOy1mV]]me>]JmTWWg͸}Lei9K~'\_񻨽ݒL$>ϒOloNkB!QK8x*r#as:Qr0؈Pn.***ӯ t:7Q=0۷1rGl>oDͣGcuK%B!LB<UVaB ,(X7x$PU+Sxt700[[DҰM!B ,!SN ^-bsC԰5g'mDbHbS9AGgB! X"}8033cIX.aFDQQ%.*Wђf {VLnsv!|mypۃ lW.{b7-:هcʧҒv69>I8b1DQKHz\.񸭝GFF,inwv>·M4vq}y\ڝ=ZvbA\PvUrfw^*'zms]s\VvvR__%swwbi+Q|~qj Kz!B!m(%JKKŭ¾'"J1]ؑ>v|/^b_Paòsm?K4iػcqp7jaD"B![~D#ve/Z&  "`9%/g$?rr0pZZlǴsى3{h{w-c+9hWm-9~6p>T_%S0g&E.'`/9 XYImrs`֖x>NLw ??~mK {ېiʗ=Z7ص.Çmyp}=cz3˖t$w:xu,zlyp3gbbvAvf #5vr ,^v\c/mod9=UJ-S8AAAL99|~$T\^sfKl޽<>SklhhȒ6&y!\|۟}ךBthYc+ȟ+Bە+(4'DvāRX/|Dsrq`%: ee.*FG=zFbϝÒ"]CPL!x^\%B݁V` \0\,*B8utXn ҬX.(ҦS| iԓp)߼QݼSzA˗?;}./#D!b=*sVBloHBl2Uߏ`~>ΝC3X.*;FT rpPۑ}7on['R2uP647I|b~.i驇LI!(%+,[X߱1[Y<ts*(vG"A/-!TZ_dNݷ< ן Ӗ4K &_㷽^@B~J~`a,ߏ<ekXBKeKUU({}LO!|Ԇ,y6sE(Ѐ~&r aۼX}k* 6r.\:<?D0paTVW[q_~0??v6K{{{-={Xҙyڌ߉敩\r0|^tb\e%`$J'X1҂Dpyyy`ݻkWV>J4 !x)DB]{S"JQpn^uK\M JKaq$ V9 ("K2w8P1:#̞>8q67c %%X,)BqbI f,3>cx+|bl+B<Nd ! ,!6BhjB}$A0B[4w*1+muQueۑhzD  a9z)7]M2]}>wS RG4a 'k~~ޒf\II-WN@ `Is_f ajwvK]~ݒ>~%T^fjgWC~rYMsV{ cins!v4ڮD~<3/);2n6ՅZ|'?׎b-_Uo^ z~م TUWWbOHF 4WpBbWܝJ =. xtWj%BZ]%Z&ċXFN>)~o O63ƣ۳EEJ,[P,¾CH*z{ѣ.g$o[W\Zj bySA,!b3 (BB[ź˿tC~?=ͩ3h `-Y\\\"ۭ^d gfw87lJ80bn ^%IZ.]B8ݼǧN: !6`ui[E 怎o'h!P!ē/\ėOwZ-ނ >p8 F7Hss%iIOOO[---<~L{Uh')PPPEk9pxNX6N v,ȑ#<؛3' (VR\S ۄ3.?eAA-5JK1U\P#gg6.mmmkv2J6b,ءq|QO|>Aٳ]Sxq+ |7|49jjj,iWwףu[ֿ1~__~/Ngp87X}rJlV|>K-@׉ bm !d ̼ug|8a~[K03XUJMMN!"i{?oGL"сnx<<ťOri)*1J|:+C*EŃXNmV!D: B9,) n)JxQPKM&5UX(+C b ;de 3"mÇ ^&A-Y(%DHY b%62؈a{ؾ,"XP|6lQ@Eo/ VCWCmgV" !s`wI2 DVA  i\ DVɫ^Ka`w:6vטಧ>g}h}as{~u5@vⰿ\)W {&Y8/oi{}n*nL3D gMjsss]YE$sŮ) r ƫ޾)<ڿ {gib%#6TJk+srP?: χɣGmKe->f= 699i{yf#<޹oL%n~.z1H{1oW<٣fʃ=b{4Ϧm&s#%J0zNYx-k1V㠖a1+_umbYd T4'0؈R-*‘wQ2)8] 44`8Gݕ+(0H!Dj ߺH7~;cRC*(v Z1dfnXBd()8#LOcQ[(¢aM)+#GւXO?P ۙ@C VV !ٳRZ (Dld  ӓl8}-/rP>2C7n`K{ߏ@ n= (ޏ?Fweeq-T s33h|57nWY RuwDDǫA,~U !Ķ#B?|S8ё )@S F H3Ł7Q4?׋sL|)wțþ>BZ>=O NK%]Bf1K'΢WB(ѣYr<gq4`=X͑Ȁ]|m \{΢8!AX]y?HN >okL2T Γ]mĒ[hG*~t> wK_6`pĸ,..FN(|ꢺ~ՈR@mX0Y;ә6H !@ qxA,fZ&b{csSy1t[2VYp5p/d{zvbOHFrV.; ;Bvv+OϚ UztmM)KAW^KPc~e!Z ^嬬` 'Omug0 \YqB݌!Ԉ>4XA7/a}zm+L~'+*,ۇBjӣ }B<N'Pjؖh~Na4 Y !"RWrt<B xϫ434Ǐ=Uς!5|#+/5!=UT=+Npq[*\۶q}~]LBPx# D;ƁWkx^`s>=ۍ)[ox~GG~K?/e{6ճf:DVm۸>O[.tOLrN E$va[YYAăspea4޼7ް9Ǒ\/kR1Z[zrVV,+!"m}MM~g4~يTilW3NL7k[!{gj  h|]= 3B;|0OcߥKp8|B^/Ϝ1Z_#ds33p`&&࡭G!OT͢!u 彽30G4 ܭUJ!7"l_dV&l$]Z@ΧfvsH픕?O,|yK7RE_Q!?"JOObH߄1ob`(qa1n®R2Z\_vcii)mYԑ=B\6^&f!9G$sy%8`{_P?1 3gP@cǃex|M4 pK@ݍ[0ЀކL{đy߿ohN&qسcǖ4lS^3 #pĿlhhhyr9k&ON$#2n$v 839c\aK47&Γ!?&79espp>ǮbXFcZ&$]OFA fSRNB<hBd@STPEq. QOOcp>p~>:?ytExbn݂3:t(mukzL56b Iu͝;xʹY̔ɓ@ɓZy%Bmɻnu ŋ[] v. ` !k bݼht y33zĜNOO'.N'"|Z]{UZwɓkֆx8 8ڸ=R7bV&>#O.ƞ!ܒ"ّdHqٸ~3s,%[} IDATX&;-iW\ yTWW[<ۈ۔CM؛gr`[<6M*~q;p@|W !B!w*T ,!B!Bl Z%2E,! Ckk#Ǿ۷QF>!B!Cx)B(J4ȂMj޺Œ_$|288hIle&:K~9OԺNc13аMfi+[UU%arIQt86JMzx)// OFeg'<|bMSIx,}7o.fi7  rq]tBz,,)IXc4yL40mr]K&7 ~k9N4Yw˦-dyG[[ۆ`i;=cH߮<|>-p8l;B)ѱuX-BmXBMÑ4X"Xى1ڊ !hj fOD*J197w6BXBg&XyS09 _o/fD1Ԅ=pètU@+фBEϿ 'bl 1\857=}l7?O!7+ٻY(-E_[MA%~!\0|>xfOwM3V0&>@!wֿ{iUb7SHS}Ydʫeq DQB!RyXN￿H0S(H]}wK  ` !6 [U+,.*x%Bm)0? F}?`gwsV@lP$ a[|O-?999p㨾E,|РB!ORj;؎e˔'鋝\O!v `bq\%a`2h=cccՓ.Ovbv?*\.|], JJJlװ:uuu4{_C<GSW.] &Q__obyfן=A޸G¿Laq d`444XܿEEE< >e65Η}FW^+**ly۝]M}\W(v>|В6w~.io+35illM%`z7{?Cޟ;{vmq]i1ow~ZV.lSShv hS=~}B!ċijZ>&ByLOO[2ҍ[f\)v w;Lg>ۈW  -Y5Luu[&icE9yc X-{$1Z!v&'jh[V` !+^ ^"TPG#lo61_}K>j5`imyRCVgψ- 4]؃1|Og* N,А%+S'[^FNNny}w2i7տ̰GXADZcy@0mƁ4nٽmfr\YYc}l>ϒvןP&ƙ]ϲ=;&y]%|{VL^{ثN6K::9,xt,iu|^Dn :ar;ω]5M K>`e^Qw=m qߔ$10ëxnovIn/@{&?Yb7`/aZ-947~4M~`G3334;{;rXHn=sӼwkZZZ,iӻK%^]]%N?o&]s&_{Li[ !BA+BQȟ+W6\с1op 7onXB!B!ij[DCOA8/8x::(IÇML 'uD"g$VE!B!.B[0_\XbP܉mB %%pÈȜĶG1؈b4*+ÖL[\J^OGx[Grp\xby 73Wm+qq<>{1eCC^+ 'pBXDA(::]gl mwcq`00҂[q!B!XB<j;;Q1OF+`8qvt\wi eek_ b+3oF.I bUfJ0kj>Q c+5x5yΟٳ;}unn !B!x ! >cߝ;h}<< ֣3gYZBm _ }kXIN bE"܆PhpØ/#tbϣg?obG/_FE,@,8ZZL8[J{Z !B!xPKdR$خa_Nػbh,29 $v&vg k껺PݍӉSLvx^߿2گ!r!i[h/Pҗ_ |?kiY3XU \H4{0N54`ik a7eB@$*/cmmXjo#o54qגZkk%mr"ϸ?y~!bqgd3]ec{`tWWT3,]]{_Ok:uʒ6yWTVVfIe7`{K+**,i/]K]c&ך6Ӕ;5i7&;2yq}٫e&W{\fKz0B!ώXBdLO#p)"pđ#w/b@_#_ wz{?lo>  ʰ"O^*/Goܘh-,, `a=ri)/JĢA`mukPىB!B(%D_X@PP*̦9jְr#HA&CȝFu<ǏML}%**B(ȴ2fN3*(@(B´2DjK B!Bl  q1vv>Ń(Dyg'ǞwQ}` C͈;xx8f++ Gȣd[/,B!BMA+DV͵xd4ǎ-t~vDbkػ^\\b<*-EkG>D4dBzʊnѣtrTt]kj%Wq{=t2"2m!d{CSn6nԾ[jn n^`A444XaGIb L^%^{4es^_vOee%c;޽{4(c=Bv|y,>J}\mUbެt*N}cr8egG`#\v~70y#\S6b<&%mz'g1ﹹ9Q!B<; ` Efkk vcСuƞѺ:D51|hS@_N',a5x| Rb8Յ![yba̷#ƦӒaLN$Ȱ'5DZlqs2q5\.vaz.;qybb’qgbll̒fo<`ZW8ark-ًegߓtO<س cLp;sM)M2ݹ.&'+~汗J:_,ο6o*߿/p+PXK(Il \,-Eӈlxn܁#}aO<#+E3g*GAٳX]!B!Xk? __=U|C|ovԖElljŎe]HR_<:uʖˤY6l&NTVVe%fg 0?եڒ.ǏJQg"TV]"|nY[~|O:169yq4kP21pN9B,n‚%mYg}g*˚Y`E>`IXe<%`/?w]mt ɹ}L.X7&%}yHX f0Q(yƷN?6a {Xt-))100`Iݻ5便%A#B!QK?;H~Ms pxM!~م׎b_ 7>`իpc_NӉflG|D|Ή DrrWd)B!Bd6,/s᷾/_Ƿ'n *Rsx JE_\\\[ëv 8@+B2tl Hp1W_h_ivdz)X*)aEBm՝B!{ σ_z9$wyuBwj<8q [1ގ&@ӵk(J;Pq1^OM 8B!BhGta 0~{x j* a' msiI333cI+Ǐ}. IDAT٫! > Ӊ]^*+n.}혟Gg?v GX1k>v6vIG++1뿎KP# =!=a3.5/{L޴aK~+SYؑSVVfI|G1>~. "ުj#-iK6a_n5'?{=bʓەMG۝YnJe2fxϊ.`GEr%mTVVn9`w\");+; uulrl" ڵkB!ijXŠ_ݷێq_A07y־/5x ԧ³hN.]zX`X ~Vb|pQţhrE+B!B<1Z%7Y:ygރ|F`c'rMo$=̍=ۦg{ƞI=m';uu*815mLp;L/! BOtC>~#T^ ƽ[ bE(vlmˍh] tB6}췿EJk+s#""""""6]`tl@,V.l=0MϾ+2gs84[>u }-xTԕǡFQ ȧ>/1v\}ܽȍq[Gy6ll,:|x98D'#70d{ᲕMy/)[1?U CERo/FGTqJFGԄuuܬH7nssш'?߅>8*;;)sυ :8ӌc566@ $\s8* #wde| $+sʜ> g5\!~-,,t[7O?N>픭 0<BBOV>O3e&P}D:"""#GwACCg'pbb1882|[BII `Ŋx׮d>}O>\=]9|?L5v9lv9q9uuXG,Y!z{[XG1٪@ S̟?ǃ>5k ** gѣM6aƍ@|||ȋ""">%2 SdoմΒ+XPX_rWq;>GGcظJDD$XǛw k֬Att4"""Rzls633]"""tU3VwbwX\UFL~<(rb1CCBu[(w_M]Jolxt4j7l񈜈yjjhv((C=tC("" ˻{9*F.`ɜtUd l8NrҥKgիcڵgƼ&Lqʡ.#""Ǐc߁c8gi*3i">ߏq3ml&Ε82~ĵRt4Nq'&!θ!+s)[AIV. gw8W*ݸ[ˣP~+?)sq~WwwWyM~v;ye2x Yr.w+ڦ)|'kwxNXzXksskάXbm(N<9 u4֢czL9nhhGDYgI 9K_w<:8J++8UQ襈%)) YYYƪUL^ܭ=zɂ|~߁{-wʍ X"arЅh#2.^76b@DD W~|2}kx7vZa߾} """r#8Aƣqjj]>+rO<xj*ɟ Ann.{9pYxtKT}}="2,H| { ކ?$qaxxqf-HV&pY !w#܌hNԍ6622┏;攭R̹;/qƦ&|y*x8ʞ\8 +ʌ&7@__S~_|vXK_feo1| =+qlb̹ <7uYk󬯯Ϝrc_f>IIIx'o~AJJg,<%"o|fGG̺u!"""">>>?$%%!))&HDDDn&>EDū╈ ;Dd֢D47#i՚5x%""""""7.`ɜu2OΝ;}]]]8g%TLIIW?LLL8/(C,3\ob***rʜ™9딹rG]#S{7* ' @+f9Ǜ3X833x?Nʳ xqn5V .N?^/]2uXo9C<6V6qޭl"sP]]yq֜pFxxm K.uyn5Wy}[m fDDDD#"W!)/f""""""2tKdFſ1CSw'v4`(""""""7.`BB0>|]jZ=iiŚO>E,%s*11aqqqN3Μ9KJJ:8{[m*,,t^ʕXqRPt Ns)W3Q8"(qm8G8C'_1Έ^WN|U݇IjnnNpUgp&XY6'|)++sʜV^^[ZZ2gXqyqg\c}#+7)'''N;||*C֌ [))WXl,ROn;Pu}h;;[EDDDDDX"W5#A l2 >Bjw7E7<<INF}'/b8w,w0/ Bm7χn@m r,4a4.nw"-[PĆm#hz(SnDDEu'O^U~ݼSSU{Aoaa>4~Kp0n,TfV088x Bm7χn@mgW%s P\ .**rH+(9ioopujnnvʣ˗J#Et|+Y=Ҫ1 piZD{g'b|Y1 ?{EGs0gzme |H0>$,ERRҕ[!浵Nw0i<ϡ> *8ù9ٚ˗/wmZsH5s8k:!yyywxhdXϭ0)xiY}Cf)s༵.P^w|l֋-ʜ2#f3V|~OKKsKP`B-6y X禞ea]DDD;(9tKJL wVV")AXg E X'GIY_ѣkoXL SSى.X""" YVV~ob[4]/bO=N8j\@ڵGQU Qh̋XPu=LMҏ?Fz{; EDD2XDDrODE !ɝxMԎ/bpb"&"#QsXHF~ Xӏ\,-E=#""""""̩1'sI?G_Bί29rīs& Xvvv:.ŚO>A(~; ҼbQXSB5Y9Ke">immNU0p=vVgpv piLLL "##1::Y:yfwNǎ@NNSL$+8<8#3<+f9g||3 Ǘ,&o+G YMWsr./ecie`qg1qnu^eN3ڼm_9GN9z2Spp?:7^r>o9Oz>nOwz·'v¾Tġ ڎGǽ{o(|uZƶG_^nћ4~'}@>|}7yxv18 ߏO2yvډ;w|pb_;vY>]۟7|jď =݁%&Z؈%|QW#`&ҕs樅m(7}+V g y؈Ӏax7`sYGgo*WTq>`ˋxQܑUcy))طzr# _ {Uj&V]m/֊\/o]Û@˱_ʰk?c}n_6=ڄi;!0/ZkM/7*| z^هlŒb/>?:_˱С;Oیx࿆| X2bcc.\3+wsT8#3U8s8)sNYBDD kjw܁L|̜˗|rg`ߎd⮳gQF qlݤؖ"IzHzP8n IDAT(3l"Ms s&إKϭl&<7*#ɚgWcm~O@ `~.(jmawFߝlmǷ^y/;?m9}zLEcqמ?GAyaňܩ3t D%Mذfq'̯y}*.c96?͝jy"@L=v-;vo.L eg+-hnB__KQ6٦p/]UG-6b|5b`l?މBB/(ع_܃ a>_f,03}'H|<:ΚU[GѾx1z_PEDD$h+NTn]ea]&/*e+@46L_4{onr윾.,ΎGt Pv/!.1|Cxv5_~r`6O/nߎM?o* >IX04`xbϧ>w6|jp۾HЧ=cCB9kP4Ɍ/r3(K$ 5O^FXduu34y':`?/mYPwF#1zؘjo#"9}{ܠ8#{Gg_߱3n \00i`Fwe|oUa?N-6`'0tvKxCx=ر {*>%zj6lܶ o600eZw0_=Dw|BD>GFѓ@K~[$"x\+CԯG蛧&]QQu[9 97P-~b"!l^_Kr>:]El|穧koo6v<N/P#{dZ2~G1%Ov~Q@Tr6DU(:> g7Chϗ+Fq/eʠW<_,ϑH. jt҃,9pKKw3EDD$Xl>*65~Qo-^/ϙϖ]biNsR0߿_6nK{<ߍ%p5C8y0x\Cx?oNУi(.kyǶVk#'17a\ 2krﶚ'6.: `7*e 1)˴:l6 r89%s*&& {98Ä/_:8lõ9C?()s1ෝ҃C?Ğc06ձ䠼 S1w1pvge0P뉉 DFF:!~8Ěϭ@d>sS|[|,rn:5Sa3sCvx?2Ϲ-UUUNN+_b x} zNJr?o|}k}[߹NzIon+:N^lAB8ϟL<>-ƽ[ b |ǁ}ٳ{l#~Ua}Y'p]r:q]s3+k #y,νNësxN9jojk,[TCQZ 999HG#Gez"lE(XDDDDDDnTD>7Ƣ1bcq13g֭C * (8zʋQ(&7J'""""""rtKD22pf:GG_EW.`,&g֯֊ȭ@ʜZzG}3R"5]Y<%>ù;6\' g@;傂oPR܇MMM^m:`ձcBDk+eq\q61w݅A#O8ʓ\%IMMjz8k8k<VHyeqKOOwּa?G*TFgq٫ٜxrj;1hkks<|wes ʳ/>+7OtuuuyupxyN7? --<ϋX"bSDE!%ǎ}X(:r{ŠqHDDDDDDZ|X鍍EW--x%""""""sBȌ/b{9>l% X+tKTSS}NseVX9 s8ιSgy'Ns8G 8ʙ%Φ%8; ;pG!Y55>͕鍉5k4: tt̸_lrx,x9 ss8#z8 Ag<'+bZZS.+7-T g Zق;^ߜqu~X]]S8k6z<۬sl枈\]YOO'GHooG/nӿ8Lyea\/]YhKJphSDDDDDDDDš.`HX#2RSSPnpim`\cߵ|9L9T1?B N[}f}Pt>93!V(2st@bbSP\6qϜd7̱zZZZryySM gqv3+7 ΍\-hnnvʼ9ϫȫ)p=^3ʑ~~9&E>69Kֱs;9\l*+#g|lVr8sx.[w<7}2kޏl|Nq>44 ,9;DDDDDDDD$,1jGԬ~Sw}zq8vFJi#(O }ȵXj8n}kBN pض86 `o(|uZƶG_@ZEDDDDDDDOxgQ|gxxhVĮbkE.7_.Sx^]NNNGG!̹"y8g*'--ͫ\83 K,q?\'3.^mmpFs87u:/]m6V5 ,ZvXYL|=e+k-TnřVtm9e~繙Ƽ:8W,ܯylz{{:8k+ʚ 2xl-Κ>>gqh?ޫ*ݚܯeeeN)[|~rx>y:s?r۸Okjj:%"""2Gt!}Rm_CiX `pt'*l†5SO^?} kXBy!lRʼn{ Dw e";S~%(;ظm|C. \0zkEDDGtEDDDFqʶ`ka}5-.1(E"+y4@vN0;),,iY%g5w*V9\\j+Wq8fٲeNٹpS~93㿖,"9c}9y|K:eǟ.qrJlebq[8̚y^de^fYYT*W)Eekeͅ:9s1g9K y)sϭ9"|yl/2׎\?]O n"NnFE @+~KDDDdʂ~e[PG4a/cQTʰ_y{r#1vWO;DDDDDDDD.`k*`߾]OoT~4< [L~WxDDDDDDDdnbKCxvd{tLi[.`5JD,[%'';V.s/[Z yVxkkS tqyda+C9uttxq`19e+%//)ZgPΞ=}|'Xϟ9յ^y~/ideeyȍ+"""""""""GDDDDDDDD$5e`ɜq\%r8W}8si?k)[U|<}¹:VgqΌmlŋ/gpUu^|ۆY\3ceqnvK.OwĹKw2ϳիW;垞\SSmMN󜬶\~7+WY\V&~^7Ns'k+㍳O5Wymx|qx9Z|syyl|suUUWCexuwBw?7uNTX""""""""tKDDDDDDDDš.`HXS̩('gpv XUŹ3IY.VFpF XXYccS.++Εù3eep,qUn΍t^<87ʱ ,tsxNp) g/7ts9:˗;e9L_`r#MsV1|}mB<9~;.&CC*jKKKˌu|֋-fX""""""""tKDDDDDDDDš.`HXS̩x'7{(+3P8߉y88… 6/^tʜw-v wO/^9ʙ T=cu?ψǓ3n !-יF^#HZtWl2xqg:,*θ9+UCC]ϟw|㫬~xجcDDDD, k%""""""""aMDDDDDDDD$)Kn*+83c8Ssu.] ˗:8߇O8#Y(V&gpvKFFFȶr 3c,\pޓᱲ2rxpßz8)sV#g+󬾾)sPc<;pʜce3x<9G38W Gx[`5gZ6q旵|U[[;c[y㛛딭s|ofc&2DDDD X""""""""tKDDDDDDDDš2dN 992'O3119);;)sF͒%KrjjS\%f693uuuNY8s83,"nHܶ"y@~CeXpʓ s;RRR:y^q^~.iq;G0u """"Ow`HX, k%""""""""aMX2+sV8sg+G&Hq> gp )a2mmm6}}}Nn?g}'vλln':ep;?3x>dV)j#GV],1#c~nZ^^S>uꔷ PSo5qEs`6wN...)[9R_y(+' fWI.[}ZOΧ7eeeytww;eWV7EDDDX""""""""tKDDDDDDDDš.`HX, k q9Zalbb)s8Nfɒ%NC98C9j;8s`1T~1aڡ9?cGV06Axr} NU}_uX!<9Ě^t;V=txsq?:`Ǫ ^gV8_;>^<k2ҧ{u4448eV/ugUW_e/^tʡֹdžsqo~IAP~k)]DDDd, k%""""""""aMDDDDDDDD$)Kؘbg¬LYL@|v/2cgpgpF cٲe^܏* 83Pago4Vњ5kٳgv>xyG^Ǖ锭;c;Oy>~BeSͦmN+eeeNm N9T'(%%e:[ZZ:xMՅlM^gwvv:e4nWxrSSS2 /]W@ZX###:ϋX""""""""tKDDDDDDDDš.`HXS̩''?߅sF8#Ū8ae~8{ҥK6rWgpŋm8߅Y۽: 2J6}_em\\q;Nl:휙7 ;NUJJJr< m8k,'')~Z#mx.;eVކʍ9Y<.97yhm}e ;VNu 䔹Okk[dSrYyQ>gXssҸ`< fl\"""""7 X""""""""tKDDDDDDDDš2dN89*V6HKKS<бrx~Y.VJkkS\+d``)sYY-k(wBqpX8>}:`x>dqg"qg 2~>ƪ)s3Νlg|Zm:8ϋNJ "#/_m|o;DDDDDDDD$5] X"""""""".s*)) v9æ9t:8 f!߉69 u~5sq3}s1UGjjSu+̘ 8L,99٫#T|s^sXqZx577;e+g3q;fxpV.?gQ38s?3V "2ʹm/v?x^\uMsXDDDDBX""""""""tKDDDDDDDDš.`HXS̩(''(bᜥdμ Νlϯ !n|̙9y6|~9ϊƬwr]8G/UVVS~r8x.8X9im2_ZZ y+,Xaa+ކ?Gde1^Kkr5Gx]8?9Z+:Ν;Xx~[cǹp===N 9g\SYg~]Wգq+Ԛå9;)))[A\WWKKK;00mm0a[0b,Yp0Uhynɓ':8:??)[R__ʜjsC~h9/srrrrn^8}¸yߏ}sõv677;e^wnomuxfddx f8 ٭mBDDDD;Fvq@WUU7}z~.\0kw1TVVw3>WZZZ~rƊHxXrb$nZillrʕ+ozDDD/_C%eH7^D866bxx{G\=@6# a=Rztf6 666Hg;둩PcJlٴUgcV#T\leچ>[vwx?\9?Bm!GV<7G"""`0ju56cccs>'z̑P6?/_FTT3|,<|޸󱈈 XrU%pw3*`'|5ށ棙7u9ry~wDn'Nw """"%WPޏx!++ ?ϼdϻdggw3DDDD>WtKNZOc3uMϾ+7XYo~?ވx%W-s7ޛspNFnf|7IDDDDDDD>tKITr&ruJDDDDDDDn]9vx95_ތWw@ "`\]p_{񯶢d*m :Դ y}x z, o뛀2l:7~g^{ lf~ O;Rz%FSOq"+OϡXDDD$<+AZ~E^7[mݬ%І< 5`3oP_*w?` 0Y m) ڎ>ymhOي_~qYE*4v /@ 8Q-.ЂSšfױvr6j_#ѮqRЧ3MHX2GZ-/⭧G[yez+h>ѾZZ9\Z*nk#4G7K>'O-jI?,ĿĪ԰Ou-M6;{ P c|zgڛµoԳJs5;!oスuיWႛtIIP*=:+}>Y̞s:ؒTgpױT+ִZRj J$טҩji{UYisz)]o<@[!RԠg$T7*Ŀos`ap|Lg̒zycW<NOrOiVi/^V{'KuŗK/W=Ft]xť:l~lujoYnY:xRMS+fK =Ͼ&-}N.i4ՠE֭Ois{>~n^$]p"EYI_UcK6wIo*_aY6E2Do,+^e+xcWf>=/cbhY>ut>Gsr&/n~WW?.zI?qm0v+uE]{4;nѱ |cͮ]/?]_$5.}XvK/U;e]PPҢ^W޵`SColܵ㾬Wݭ[c^W$%SzOr|뽮u^ ,!Y77ӕFbPpCKfu*Qr+ҤN*F}s[SWjU8$[MWhTmM`%BM1 cΕ= U"b)\FQTVԂ%jT_5!&0Z|WK.DZw`e<gy&uPuXaXt*pKvGwy'uPukHXrGdeY2to,{}>d>cyuPukHX---_m;=}WuPf1¾g>KARV<:_-+կΚ/=FM\бXuOjJZjIJ;Rnk%*➪F#J%+PxƃMgD T5Zq\cV)g K̲ez-Kβ$۲PW#KQL҄YTev c*Ք&eeSN6m[B}d}n= ;3:$i[[SEwԾm<U\+{O5y4Q#gonҿc":JRGd'Gzuuש!ksG+ajQF])cS#c<c_/H/aI2ep_Ԟ##TKYuN3See/~KsO Uwr]Bs9G̝#HkN˗Y/ՍOJ'TGlۢxaT6LWsm&W{cVk :<;z{6ڬZ?,^ӦO7Ub.?" >e]KjZ`AtOG㤓N-ܢ}¼f,HX{^<#cY]I%#+R1ƒ5V/[P=bHXmwwrV^+kAQ35,Y:U^b4}=WwF[NÆEF+tjG*SO\îxMަ+~9l"IzuꩧjݏnXõ(y7T$u]GnUu8)9'zLQ%bMw=͛WɎ;2xT3F7|FV JjnUͶ&}wv%>seY[vc?O_/gk]6./ոQ\6hoV}G{O3d۱Vnj^wGo*>n\]cLz^*A*)i?%1mt'Jb*dJl,?\'axr=<#S\%=G릻 '5d޲223\'kXϙWjٽ1RE\i?WM8`L&5r?s.A;4+5I{9:UUe啕KR)fKXzީᕚl?\OJsdNeIJT)yc*ր֡x\TS<=7҈҄~{ā>uD_?{>;4Ċ QMFX\1:$7ǕRԑn{M?:`_%,K1yIwIJo芙"1puhkK:HJSdTYċVGƆ-k|׾Q2eghSF6~x^hiS}Tq+&׸Jy:OnJ)GIՄa^zH˷VKX-:j-mئmIG5:2<Ӓ%Kt뭷0M~zhĨiƌ^z\o0[_컺*;٧a|+6me*+$ܮ3qCu)TRR,K#S)u]u8:G펣TJ63ڴp? *zG-kM Z{O%q[o={ZM:USŘ$I-ٳm6]_RkY[zTZpfΜw1JykؠQkg8rW1;Lf7=lИ'&]W)tω" !`'Ŷ,KM{O>M}LJ-/iEhiĈj]|~% ױ'3UVV:}h7c㵪lNhw闧/[ r]/=I1-Ma3T9^J3'JȸΖ/OiKצC'˖ۑRs^ԡ;ꄎM]GL]avLqoDkۑJCW9O]'S,3(rRFzzoGZ]Wiyz/+NcG2מe醥hiT(*7YoF&MKvۊ[qM.Qգ{;U$IwRדJ)xr\GNQS 0\gXn[ݮ>5k,GuHJ)U=5?':s`yƤDrOSxxEB C* 5uޭwn=j1bP,IfɤUyEU5e=…ukR)QRΤt8+yO'ڲxKz,7InW:JTT:Qx'Kh7:4L:<#'MddR>)uuO/}{hY/YYKzfYڠfR7gؒ\#%]G힧QL~֩qp]5;mƍy޾9sjkU2r+=5~dYlKVOf]zUVV=dxF)וqܾ8|teYݡHY$uHN%eL*QЧBBU'iu6ɮMl.ח;>u˺ÆyOrP?M^z9C6QUW ۺ2RCG>;rD5e1[N~uHtWVGLW7Xtƃ h}V>uf[Kvב%K6nV2妇z:]O'êTW=/_yy>`hnӉ|V֯ =ǘw?";f3dS0Q*5\}>>m:;$2t=VZj'0P\[()fYq[%)$Cku:_\]Ck1OJmR<~UJt鎓J'LRJ]QGJnk`ԡq\ë#!)XRuILcKZ8Jz:%1I1ϒYc Wmk:UƲ:mKmOb%۶$ٖew{%8!u.&%:s.I:35~8Ǒ8JRz[_K5i!` +F1YNdHnRrZ%Ci.vWں鄓gVGt.zyՎ:2L皒INJ1ӪO;O!@WL{%}2~jn$ڬQrFTk稤dgx˘۰ fjQ=3Gw{'~8vscL5 uhS{YJyJJ,O UT3FGĕ`z?6n(IӦi̘:IO-#5lVjtȞl޷:q ?IX#ίC;Cɓ'2r*x_2<wdH^"nBEy2%?MSL[r\MW`d$ya{שDin>l5}w%M&_u?Jg||o=F蟎Gg=g)n͕epNj+lՔEu|8蠃+cUKKZZZdY/T޿{PAؠChԩZfMs\ۖב| G礻23:wѓO>K.Ŀ:k. tE݄fMRTlϱ4PJlK眭nUՌQ+M2nz""K*JZ5m8)'ja=BJaN^~=ܴUGN?h.R~nDe˲hrB\y:o;| u%sSI7pC]fΜ#8k;Y躮<̲ށe$%]ozꩧtgVe22lه݁e̦b1=ZiKKt2OR{b^U=RްvYr|\\^%='yڳZ}N{OՋ祟a2sŽ<Ƕ~kRuPG:˖- irl\B*j.2׿ :zP VZg}6kxSOK/rVc?؞ VTGz'*P*, ʖDYth 'Wt`A=0iU*#YJ;؄e)0+8t09*ЊFuq4P)uOW&è` 2 ,Pru`I+d๢³l5x5O! QI.ະJzdL|FTQRxUL'KUOXvS]XaFu``/XQV0 v_h"*8*$ WQ6ՅZ(>RΫ{XVpXD ˧+d/Vop]>Iªl nLS3V lP5|2IX&>S e8a5)m D ܳaUp9(X $.,a^z"aWX lwat`?CyVv/t\'vv]\&_B>ׇͅ50Sj),a|RBۍz?0j8aT@‡FuVEMoUTVTX \-U=,ʬW *lapN,P !/Jh50؍5{gXQC J|6t$BKCD $.[gSX60lHaQAXèά`a`ceY'W,&̻?ʄOa!|!se 9>bdN6l0.mQ`3),V{ rlC Uo#+80Իc+T3d0s=)<Ju]eGuRe{2aTv.luX}=y0.Ve'gx,e rWQ ޹OŽi 'q_ j {9q{@?GIDATΫL|aDAZX.' Ի>VA50؍ ?0] YR!!a?`bɿ6P,T°gyXO% VC-W k|zwd PTϹ^nlUyWL.+a.,mQx6,0,ʜ; aUf9sTTC+Rza`Mق>ud S3PRA3a[VsԐ|ZEe)نF QaXԵdؠ_V0l]X2*84B|)pl{p?boS.,>aC sM+̊9*N.e=Ly\,\"WXՁ\___aͧ`9{0*$29T0sLXwU>ˊXX`( j,GaR+>Ir`m?HWR;%lw]`߃ۣdbOCP!{X;gXIJ 6T)|\O}&P||඾W=>}% X.lDugEMm+ށU>P+, †FRBkgjw\ !7jxyruYb*WHmگ/Հ  ӧ!Raݫs,5zJ r[#ξ `I}2˅̕ϜWAZX suaק.W !6P!ۢS O5m(ruWlІ Kʫ +l]UtZA(Wp\hgVغ\ـv_IׁH=곿`wV>-P *d|y@D16 [ShWVsOXR3Svdu[SGQc;hց}N,)Nl 9o!|rKPzށ,`Uf]|obXEGGWQtr1X'Ēvު|GRHvni,)g%}X`P՗Bz`W XdI@B+аY>pC /_% lӁs1TPduҟX?OA~U. zPxRGW]Z+h-î. C08- 3$|t `*_ =.Ȇ E E E E E<Yf7IENDB`astrodendro-0.2.0+dfsg1.orig/docs/algorithm.rst0000644000175000017500000001340612224576244021010 0ustar noahfxnoahfxAn Illustrated Description of the Core Algorithm ================================================ This page contains an explanation of the algorithm behind the Python dendrogram code. This is demonstrated with a step by step example of how the algorithm constructs the tree structure of a very simple one-dimensional dataset. Even though this dataset is very simple, what is described applies to datasets with any number of dimensions. Basic example ------------- The following diagram shows a one-dimensional dataset (with flux versus position) in the solid black line, with the corresponding dendrogram for that dataset overplotted in green: .. image:: algorithm/simple_final.png :align: center In the rest of this document, we will refer to the individual points in this dataset as *pixels*. The way the algorithm works is to construct the tree starting from the brightest pixels in the dataset, and progressively adding fainter and fainter pixels. We will illustrate this by showing the current value being considered, with the following blue dashed line: .. image:: algorithm/simple_step1.png :align: center Let's now start moving this line down, starting from the peak pixel in the dataset. We create our first structure from this pixel. We then move to the pixel with the next largest value, and each time, we decide whether to join the pixel to an existing structure, or create a new structure. We only start a new structure if the value of the pixel is greater than its immediate neighbors, and therefore is a local maximum. The first structure being constructed is shown below: .. image:: algorithm/simple_step2.png :align: center We have now found a local maximum, so rather than add this pixel to the first structure, we create a new structure. As we move further down, both structures keep growing, until we reach a pixel that is not a local maximum, and is adjacent to both existing structures: .. image:: algorithm/simple_step3.png :align: center At this point, we merge the structures into a branch, which is shown by a green horizontal line. As we move down further, the branch continues to grow, and we very quickly find two more local maxima which cause new structures to be created: .. image:: algorithm/simple_step4.png :align: center These structures eventually merge, and we end up with a single tree: .. image:: algorithm/simple_final.png :align: center Accounting for noise -------------------- Setting a minimum value (``min_value``) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Most real-life datasets are likely to contain some level of noise, and below a certain value of the noise, there is no point in expanding the tree since it will not be measuring anything physical; new branches will be 'noise spikes'. By default, the minimum value is set to negative infinity, which means all pixels are added to the tree. However, you will very likely want to change this so that only significant features above the noise are included. Let's go back to the original data. We have left the outline of the complete tree for reference. We now set a minimum value, which we show below with the purple line. This is controlled by the ``min_value`` option in :meth:`~astrodendro.dendrogram.Dendrogram.compute`. .. image:: algorithm/min_value_final.png :align: center The effect on the tree is simply to get rid of (or *prune*) any structure peaking below this minimum. In this case, the peak on the right is no longer part of the tree since it is below the minimum specified value. Setting a minimum significance for structures (``min_delta``) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ If our data are noisy, we also want to avoid including *local* maxima that - while above the minimum absolute value specified above - are only identified because of noise, so we can also define a minimum height required for a structure to be retained. This is the ``min_delta`` parameter in :meth:`~astrodendro.dendrogram.Dendrogram.compute`. We show the value corresponding to the current value being considered plus this minimum height: .. image:: algorithm/small_delta_step1.png :align: center In this case, ``min_delta`` is set to 0.01. As we now move down in flux as before, the structure first appears red. This indicates that the structure is not yet part of the tree: .. image:: algorithm/small_delta_step2.png :align: center Once the height of the structure exceeds the minimum specified, the structure can now be considered part of the tree: .. image:: algorithm/small_delta_step3.png :align: center In this case, all structures that are above the minimum value are also all large enough to be significant, so the tree is the same as before: .. image:: algorithm/small_delta_final.png :align: center We can now repeat this experiment, but this time, with a larger minimum height for structures to be retained (``min_delta=0.025``). Once we reach the point where the second peak would have been merged, we can see that it is not high enough above the merging point to be considered an independent structure: .. image:: algorithm/large_delta_step1.png :align: center and the pixels are then simply added to the first structure, rather than creating a branch: .. image:: algorithm/large_delta_step2.png :align: center We can now see that the final tree looks a little different to the original one, because the second largest peak was deemed insignificant: .. image:: algorithm/large_delta_final.png :align: center Additional options ------------------ In addition to the minimum height of a structure, it is also possible to specify the minimum number of pixels that a structure should contain in order to remain an independent structure (``min_npix``), and in the future, it will be possible to specify arbitrary criteria, such as the proximity to a given point or set of coordinates. astrodendro-0.2.0+dfsg1.orig/docs/scatter_screenshot.png0000644000175000017500000017335312773156651022715 0ustar noahfxnoahfxPNG  IHDR"}FQ!iCCPICC ProfileX YwTTK{' Cr9saCf(QD  &`DDP1PD$ŧ}{vsVWWWWuWwu3Gu47p(@x 4ц6|N쎬o` Gb#| T45̎<ĸ|,TDAqqv4Fx#@0",)2t@9._G&""j X?&I& ؄NNGÇJS'3@ ;c)k5JzQQݨv @ nzPvcX`X1z3R?%KѫGW$C(Kkp!#"^h1ĺh#.bgh64E 7D#>PEzFv¯<"␵8C$ZXF()(ػW_1b{/-t//-p WHK;l-4} C^DtdWp> $(5 )3{5"> r@>8 N pԀz v z g`L ,` D!N!%H҃L!|`(A|B eCO -4-C?aL,k5 {p gÅp\ 7mp/~O@Pl(A,JeڅD4TUB(j ZCch,I NC+6t?z1<i $br0%:L+f3X, +UGV6[¶`oa`+8'‘qq\9 w7!(јxDdє4ЌҬ2Ҋj M=B[KEvvτL|"~@ 4  !PFDGxKX#IyҝE7AH$ 8b!x^ޒ>>~ -(! iɌiWv1E0052g#Hb$SR)TCMfF1 333ge`aX4 ,XUX]YX+YoN,َ]acnȞ~}}À##ONNS0c휯\R\\\Ypyxy F]c3 ;7̯O?@@@ `Y!u!q!,Wxa }‹"""D. -+*&.&vP]lNCRW}1n]j򊟥IEcROugtuCCJB(Ɣ REհ]aö["h"|#:#IaQ|QIQOsbbN,RuPwlG r?6A/2Gk$Ȥds{{ܗma4(//]8=;}&<>(K!(~]ټ\ȡϡ'.ŗƗNٔu-ߨxViTrdժS.=ʙg۪ŪKj5 5j]k8PU_y>Tc}zCC#O M^M&e/makɿ._x+}W5^&zd+sk^Ԗܶ>ӪK݂ݕ7XodlLr+BoptOmO1sݛtu׺@ACmT =V19DIψH蝧O>{del /'3^b^b|Uu7-SjS7ޚ|nr3Jfg?8)Bg'H|_3Kԥ傯_Sַb{ռ?4t9(۔ڲzMP `<y< r݅% b0 wxZFc0S*\( ӡL TW,|~lW8М\xys kcϐn󗿪rZ_&AaQqIishF[;]ZFNvΎ..nn=<=:mTCp!/oÞEv全1TragܗބĨ$d͔{[JMSOG̢szreGn>qʱb'JJ˔U*T+UOUi2;xx k9)9 +/kjixe+W Iwuu=>۽vSkoQ\@Gw[|}(:h(`(qQgn>we˫cMqN-~9]rsm?)/>}%eB$WPX;V:A-EHnpF@bq89W>*|*!ΝDϔOgf&Qc[7$@t:&<,J3O|"MQVBNE^SASQYIROQR6V4;+tu6342R7312c4ǚ[,ZX[^UlHvwsvpø-yui\=>2dfW‚mC)L"#ݣԢI17űqsI,)WfKI֕~8#41YZrJ'o~?ttZ18 R2ԓUO>yَꑚsu^[^4n5 6^ i9|򗫪>i'vvRʯ?Q~m~ʝݟHT~9ivTϳ^'_:J~}ݩwWggek>Y_K _eWH5种[v ,<9t u(".ˆanap$}Cvx~)]}9C"R96{l8I\f`A-@PtjAro0; zxBBPG ;4&;ѳV)&ɺƱtXCl""v'½ DIkC{;L " #ttgbqށA(-Lb00^e3ag4|u[O: KB~M.!=acab$RYҁ26rr z.Jߪ6]W\;AA>a x;\V'Kml lzw؇:P.9wrsr/Mr.3@V3w L"ʢxb}R2:r jZJFʶ*U#r4kniD^[64657M7жڴ-{kA1 ^g=>V=#K L [ڈvqKx7ޟZiCBYG(kט~ؠpߑ֣+E&'hKz5'iN=[WR[=_xɶy%2k*};Vuh SPePћ^|4]{홅SvW}^r塯s߶s*p^q։_DjJ-H~XX!e0T%Ѿr(c<r;,.F&-9F8AFWA'+w30A LM$[s9 2k +;#S;W'w:%/;' DEK=b#kO$E+dG~Vp,ak_77j450{naeyf܎b*t߹{MQ] l  k6&T'&ٛM+`,/ݜ}Q>Tp(Xe1%IJ *S4T}woh<֢ykm흝 ]"7*oJxۭݳI> z?db1'^M~zͫҦg?$>ſ=<|^޵CZO31Fs6n oQU?6HYiR~|U \Ƕ׫7k$%eO;)+;/AL? pHYs  iTXtXML:com.adobe.xmp 802 637 [@IDATx յkF]"P\иhD< QQ$M█ .n4JD#>y1JDP n"(˰ 3̾T4RO/{ouՙ:K@HbnND(Wኀ@P% 0E@D@D@Ҭh[1+" " "%fEB)Lh#4+VLD YQP SD@D@D (͊S" " " QB@iV,6Jm@P% 0E@D@D@Ҭh[1+" " "%fEB)Lh#4+VLD YQP SD@D@D (͊S" " " QB@iV,6Jm@Hn$T)"VR;e*" "! .caChk"$ An%R;-" " ={*-s4" " " #ϹW,Y~cz[PG$4$@u0:'9Nf !Z,ǚuzѹD@D@D & lY Lx@ jVБʡd?~Ocz2JGGe!ػW06"97l,ý55@ǶX/_?҈@DjVDkP%x(2 `]]fhfMvom4w," " C'Jɐo/_3cD5Up]eȶF51J-U,&7{4f5 + ``,)+2+ o/JH 4+*IA@)o㫴LzэkY/)MmW¡Q6]z,YE  ٧s^IJC4q4˾ @Mm.ԿQ aDҬ"]d6~'bpfk櫴k0:4&MUBӬ֖W.1W5o͏"J\ CIoc}@tLj Ft5zw 5J zoաl͕C/6+@A5@Thcb7qWacFiMo $7E$ֲ_CWi10Wcn)Y"B JȸTD T|[}5@phXl %BdҬr_]cU.`-[_˯"YJ"_@Th-} nٚ^=l:= ijMo "+%Z{(}[7ƾ}Lݕ@D YѲRSI8(}iW &Ccph׻D@He"JWCۛg4wKG{dp3Yn^&.'ߘMdLմ5t4C]j,YCiFL4)K"66FpM_}F/A\N@iHቀ ؓie{]O^r:dߪ3eWaM A8)*:]6M~2F0FcMFDҬH׸"-LpkMF+ V_ @_{t7~vȑLiJkUM]`eJ'F[7I7PQl"rTMաA516-M7oKS _e3c&lZeSڛ0ߪQ1 [%{(rZ(p?G}5v%[6vەn@f-ac7sF1)Re,$Ʈ &U%U_}kJ{_*EfIzjd#4JTa/ߪhc.MGc!2?cOqZɏj(!49JSe/SRtب*%5@26錒:zA Q*h4hL]UW(zh"fFjdvFIF T)j 6F#AJ@i[WFq&4Fc# |s¹աJl`v7o碣Ğ`d}KApȾUIy bō4l4&"揫,az}C}f?F U#)cS%Ch`i=l,8FGJQ KM M 5N9J26%&S†CaH8à Q;(caC+JhB|(gĻ ?M%D{+,:؅@C2ņA à@oobFIvqd/!|6Pkmil4VJh`QHh2Kv⭷6}jƍpCszמ=BFw{wo_-V%y5bqvV˾LlPiw>{gͦ¯mF8;|Gx{ђac Hh&z\ ӆ%>6ԣ K3dVsvCA_phO,!c1l >MLx6}iqK87f.ؕ&T "@ }6# 4_4 &i ol,k΃c{joӮ'nهg&0rPwos:&-#r55-' %?9aw[8Kw3GT_nnR@] ɫ8 ؕ/Cx5dCSkBP6؋im|̼pt7 ]?J ?v>g|)Ym/ay!#|c!+MXWwʸSu{W~w9894HDưQf׿ⵓ`ܐ1= ;WƜnt}95F $(jp]-:6hGGL6B2%JsѢ 荆zZ4C 4F_sltA_l6ԋ?pE o,YjM1F Ꜽښ6^W[SP`3!cMeٓo̝t_o_4>[_揝?\_ht1|{/_ ]@݆MsCc U\oҍ7pZ˜7(<3:J,..U%K/^r࣎8ĒV5|IB.]szXiaRޡ=:ȝg%?x8ڪO~fUzH/>XUӽq1{ϊUqҐeMeklsh]VG|e`ϸA1(w)7!6G,4s`,iH?A $[M0:C^l5pnD <=iУ#sy{;N>U4vɕSg4xvlسA g뚖oas%XvὟ5f'jjC?g1 `aivi^.gz:4fW FodjzcOo9WH>J{+dfZD9V1YQa/(yS,h’@33z51st_{>8VG^^ad꒓[[]J4R0zr}ݏ얙f.9)).ܟcP/w(У JB ē@6vhOV9"̴M(yh@+q#†Cx`ט^̥L</azlnS Kca_(}7)atVv, E?hPoZxnq=>?|]?۲yD~8*ym_~U3^;sհk3 f吉xfgֹ^p[>k;=*l}7*îUy\VG'C4qYK?fO5@=lya.(dE Dd+Kt`Z9[#+#23#SƔꢄ[YjD`%1Gzˠ.U$TWYix+++eزС CWE}lU%G׬*J4}^Tq!* 辷bg2jJkkS1Dm}MuBubջ=)bt3)8[T4 4Cdzy&՜Q*4C:g!Q ؑ>!5.h5Lv2Zq8(t%PdL4q;@cdN|+d9VrV]S핕={rWL}#w-󊭺m%r{c"{WWnת,ϳ<}57 Reεw7uW[x>&ŅF̥_|>|?y Xlxvug wTVR"51ذYԴC$fd''${RƺƔC*R=oңgא2Rv%#KzFFRjZR*kS$kvui>#N+1c& =mL b ggJtiC0TB+6j(VT d@ YEɡ1t}g. EoIJ=ޫOΫ]:Ⱥ⼡&}}úd_sO*][q 12 KF j'X]ܵˡ47 QCl/i }.#<2ɛSBc Xʞ9أZYY3G.rZXY9X:l^+>wqH+  9х),aJGv}Q ZфcJV3ZքgNKcYCƇ]MuRoz 6窱Ŏey>ĥW'>=o[&zd < TЀƉ=sl߅ONA֜[d09y]<;$@!c;)+1!ꭇ?=x˷37}ZcN}? X!B? -|5dx)(9"F`ϨPU{ Zӳ5ReH,B;%MPRMT͛Y5e 6({mc @/s -\O:)}#=?6zp03\J2Ux|5olm7@S UBfFyڕRÒM^@Z#ڼ[@TE +ޭGFI]rnVe}ê;kHO肝,<ѨQmAQz tGGnZU3;"x:A&?'䉐BA M3Q N{h73gpfcp J 2Zً@6R=lTfĠg+Clahx{ hh dhE/V=fXcwEUyfd}z}xvɧѸxsZ py˃>jzS^]tiN3}߮U] fw';RzuhJu O-JL4,/hzeϏ9J^fdBdT2d2hSW h@% VƆQB%rh,|l(7l ˀ ܚ[=5#!)\ 2zy}kÆ> ݒk]EWef<oa7wwzx^g[vWw1贔k3 mi]F ~w ѣܵs)Gu5JEn b8У>˩صFzJ썡=jy~#$8/ޓt[4yyyL+PE/<?7+)\v]WxF2< 'f.\?\AC ]A ~0N@W(aIvA6Ȭ l`!P6`Pbv%6̑/гX$DY?ƞJT1Gi M9dlhEVXh@QxN1$@"!Pb[t J%J*P#hC]8GȌC30hbPQ J4~lU(i 4CNb1H,Ͻ&3)ꡄ44Z ,2:F]{Y4h %6 ai 0plfnF8/&ʬ.Ta &F(Q6m`J 6tlOLD[ڕ V4Rc]@x8NǨRX5JJ#Co4k\"*j}!ڹn&2JfTvM۽Isj6gd*1eD 3%A\'Yz1jzM̤ fR@pXzc+e`V4՘ cÂ94:Əf6U tqtqC5|i/5h!x[ZMAVVN(Q52 csb " " FgaYF*dl 6hepbGVmepj)֞,ݿd0'=#JGpjhӬ΄\P6 j}!s]d/" " "yDlgmPBu[0, diW6J*5,dTޖCZE@D@D@BA~.>pI ` C_]Q}LZ א5;s4: 5Fo}GFD@D@D J[eTGա7}# G;70+Mh=`%x$ ›D7efh&" " "N<#kZX C0M!R2LigثF !{MG," " "m:I71$ 4M4hʾ%B,7@ɂd ;M# MdIO-Z !*Sko—fqp peROl2"UQƷjlLh,Cf9ށݍU& Z" " " A'`¶G@ԳjnIkUǚBf9;z4-^ƻy W8ߓ2z*Cqk~e,$}ؕOs)Ah ǒ," " "s1FU(qDȾv*9biV`F~$}V Fi­`D@D@D N8l5jhBVeYmkssjV;o zraTU.ptqӚrطV֚©aiq&@FߚOE@D@D@BD,Ӵ 6[ZګCfkzo/˚][J9#{P:?m!:SD@D@D@B gaG!2vD&j-D'2[^ tPn͕" " " '87,ʗ} NUJH8qC;qf]t)3fkIA6QA8dgw'YZZگ_oP喕߻ge=6scMgyR +͊Cz[k|QHhdD$;xLHv}- ZS^jYg>0e?yhk}7j?yVK D@D@D@"E@W"E9nF9Sӆ/go|`y/n&"l\~37g.S(`-ITn +})<#MW"ϠEo̻*[YX}ZSBVYsl=;(r:XV] f=ƺʲ+Oq!xh3 @gkYpꇩ(4t>oTqSz#>/ U.q&M}ѫ3hXV (rϪd~٬%UT[i9yMoʟPlBSy.X{`3ϼ=SP$" " " (: Rjvn));+7,bгY#vY¦N" " " "p0JFH" " " "!J:MD@D@D@D`={$vţ-g]CWe5} p+&n .bٸU,[bu-_w>zlT.gyI-1c8Dޅ(--hA jAɠrk~ucLl9rM9>ug>0e?yhk}j" " " !4%kQYe/{Y-k^XdK2YV0~XO\ií_ЭC,J|DFsœ.81a8Y]noXƼ~9}V~C @ ٬H@.lTs,p߉͘bxwuuu[/&ͪ8|.WD@D@DmfmE5QD V@/rZ:J\d%M/xzu*kg=em`n*i-]tItC/.&tW߿?f5q$k 14yY.[̲5wOSxYٺE[SfϟuU^|d?wYa Gҥ͛߇u` &" " m#8BElMW.;⊹OW8^ʲƞ1!{S򧿱l얆cƌ ۪ZZoӧ&N:-)(qơkiiiGjc VsiZap!5. ?\uU'|rCCe]VS0"_C&4+0Vn~ٯxQ3S2>8ϳ+O=zcᅥj/5] 5 Oٳ;s,Lw(iVߺ;ܲ KюnYa'0aXս{Jhhz“ UvX(w#E@D@Df,N7 adu饗5-ǕlJ8ɓ'W,HO?7uгY(/$… "<޽;֭ۛo__6m?~; '" " "Ҭpn~,x +o-_9֧~z/~k&np|}6+"Gc7iٝw04@P;@4k߾}AvNwx+o̙]w]ccc;}\D@D@:E@iV𩳃&lՌK.sϔ)S?_@4@P i#1ѳS!Bx^ '<#~-DVD@DfpQ8$dZYOBBw}w |_B,)iE@D@bҬ_pO/;9s |J-\lkj" " F@iVh҈Z ǭѣG. La*Y;fŋxÖ-["IYq",<='NXQQ0PUD@D@E@iVHO7_bw^>-" " !"4+D`mHc{z3l֣> xZOSg\F@i;HWvލ7:_7^z6/yTI{>haHD@D@L@WڌJm#4a׮]m&y5'GnO^h^=ڦέu]ƍMC: VPApNQQ^M_!V'ŶuQw^pH/" "?fZi%]bx(~a_DyfOMMM0i8 4+9S ŗ JhhgO&TvaܠA}Y\Z|/~; YOiV'9ºK˖UJ6%zɓf׿}D ,~ƃ𛊊 ?޽; Wx42d+" " $4-н:+X?yڵux{LJh#4l#(@f#?_RRA!7$" " MfiW>P<(yѣ /Z]tްJ:hYm$vҫY#~'LHHXdɯvM\" " "`'4NCrp٬={cxwn&FpYZ؈&???;;sNQ:oqҤI+XbEBaDҬcn_ti[QzY.J+lJbf)5S">hʕdffqnݺܹsƌm'Ch"4KBH >㏇{,$)^dz0^{-,cj!4MkYyἇ ~b¢2Ȋ׬X=ů)v3<~߹D'?ghVUUU8E@D@@@ow*xc([s+_ &338> yV?jYִ^z.]>Q9n8Gk8xΡ;֣>:lذ 6r-zkp˛ U2ەfeV?{W͘dz-޻ʚȢeIXK[Ժt“ⷾ-|]wݵzjU" " A@WܲNi9aIL]le*۲qMuA[p̘1999Sd\³Y|~Ĉ 3qM>Ì~m|3WD@Z#H]t5-7lŒɧYu-~~}x|K>K&me U <]$%%/@vwh[v!" "nJܵ>5{k̮~w=rq3|.[^] 7z>c*'|2n," " ~ (%ʚⲚ>\vU/Xtksof䏟`0mL6Z_ϲ~|>X:ߎkܷoӃXD@D@b,k_M%W2zy?Ze|g5ߘy4vBX`K/ BD@Dfdq2Xkc7֔Ul|VY#zgZVъ'f쪮n{c]Ie8|Wհ-FᛧbWzWMCX"?~Ͽ}OsӞ\*|?7U|Թ^ᓮCA?:~7o p`c\Q AcYEC.Q MMx_ ৬xgEwj˟.B r q\CZEEEhQ*w}\sMRR/R [b^耧MGݔC8ұ%''C& iC{M%n6A QnA뉭 Ssa D<F(`{W9_2KD@D (͊tT̃1p'^rʕ+4HPIq5v,=ý_;wq}/wwj2X$4+W5J4l0<^: Z ,ؽ{w<<9nܸȇD@iV@M; 4 Ӭ{\m~ѣfΜ9T'xWg?{b8Yg&`Jkiiix{sa.  .P!>5\sǺ0<J:M]:E|fر{.n?).W&&&nڴ_vYh GDpl|5C73fCTL'4ԣs_(1ha%ʕ+ׅ{Sz%Wi\1\?#lVe-4jA뮻bjz+ p7'^U`Pn"Q* )7p)~o_v֭[n]f`3g_?Ż.DԒyp7n }~Fjic;c;{V5hБfEEx ol.qwgbZH~fU]vZJ %K5^ |ŋ駱07fi/ ?4+$[sJ|f… (4'· `y$Vcsb7+Y殙T|뢋.?~88C=4dʱX{Y1:ǥ3f`&͗_~S)-#kẼ!~ <W^]B9~#FDtBJt]8>?c. 3!]ySO߿3~7 X à" h@4tm^{nOsư>KV/vT;AINRI'籘]m߾߯;Ν{-M`/_eeeȴ@js]r"]buu55+[涉]`U3`o,k\~pOLM%c>-_ zFY x{A '<4 p _C5(D.㣊 >97x4nu5] ZSJw,=~q;_4+**m#<{Q]]i{rY>~.jL_}ռ<s,C{ѩ/Y~D@YSV\\Vˮn`-|0=A\:{,J<^bfHᥗ^ xc~O8^<3~T! ^!nWn+ @~jJ6הּ+X"rɯ&MՒ曀 wxLkmך_W\l506^Yg9`FSNIoڴ G")z90naC\_ܚcBJBNKm)[K`5dñƂyo),FδO(x9Zg[}dʲ….XeMpl,^Ȅ P.Z(~~FL-(ov2g9q /2n ۷/ի:gioY^ʷ>d]|^Ci/.[4s?uor9?tfƱӞ\*|jﳐ#|`Ι8`\4,$fxcǎ> f&ʼn NNceN"Uӧ_f={bf~@7 ;ƭjY:5ڳj5v VƐSGo|{c5(3挾dgEԘ?`ʎgvSQm%g˦2&Kxq}ǸoQciqG!к:95uҡ3`ڵ|va} TK g]XZ;jH𫸯j_F eY<9VӸy=7$Eα8k7dzl̙SS0JYxXPZIȱ .zRu&lަ-vUD@iV@&c) _:1kѽ^$kڴi#nhxq1| P/1 "g ] UϚ/G`p,JԼǏGCIxZtyg2.ha5#C7c`I~ /5w7 םwmn"K@WB/tRb)2 ~(~S^DmlʱpC=b6(6Ϊm +Pjg_5eU nƺ |?ԡ?KSP1p@*,, C9X%'py#|-;?OcuʚWMP/e<*>V6G^ŏOHm:xc=4lذ 6( ξ"/1M74 |Wq;*ihrm%4:jWUç=pCO'E]Dq$I egϞ'$ZK?4./8„ _5۰M#jefeZI-X}<WP^,] 5/u7gH人:y0e4[n[V/N$7Yx|S=pDY^w c,xf٦ %e֖:PxdY\ Ev/\CXxpסZw>ӧxļnHꟺMB|Y1h$Hz:O iK\{$7[(y @܇d̥ۏdرT|4XNfQ,w  @ 5p۩Zd֙3gnܸa  fYbئO[7p{ O>NȞQG2߄svd:o̅_l⑝ak<&L Q*//6BBB -ZTVVcǎSm`QQlw'i_NN]܂>ҩS:PxրG$BTTTˤE^ЅZ~-zKHq%-pɒsNx5Mo^w>|7|sȑ2ׯ_j; ~}CZ?~S=5ep,@F  HYmA_ʢ 9O1vU&*imfVvO^av-}{M. ar_~(/䤤Cϭnݺknq044tfŅ˚z_:ģk׮zf2V$ E2eǷM[2?,XƢ>I'q8jÍ-r˩.] ֭ۘ1chpƌ\! ވh0((sݵAjs˖-z6w謊 L={-[UYPj4T1.]:*~ sYzݘ{si!jE`WX4ׯSP7|N?g=Om6u.*"> 7o%A]u,)deqFv,yu@@L2K,Sx`G!_x([tPEIGoJ 7yKѝ}$0j@aGb:D5P?fѢ!"o`cIP\~UJ#F=b[7 )ȝ*p3MlKjeè(@@ 6K4UZ4iyñ>ajJe_9 ʄ M:oyDTYk) c'=ɩ^:?υS^ЈnM>g\\?YvaGEj9mevRvTsA]udB:utMp feq˲Z:UtsFYeu-b6<}>C^N!=x=prjҥ *RyNN!߸Ѐ7$(RB5[^{>Mg~o.ړ޽{g<8@@\dM?(Ĺ+:`T 96.42N;*55uӦM>0R^s}eu@E2fBp9X4t)sCINq\Vg j--hMmAPUfr)T98=<==9FiK[cF:.23fF͢Oxrp-Y5_b2nW[yhm 2z[ΝkzSP׌o~nGQ^.9xV=  ",QM+c"~ (((Xf H[YYY mwbL'w0,eU74ٳgsGeQt1&B13ϐ狼).,,|Zyyy?y@뀎gdΝkjj(< 2K.A@@fܔQ-0w*Z!9Z,q$Ӻc(<ؖdmy5{fp>2̢<[{;vl:6Y>  b#xirnM0 Vr<@lL2@ќep1nŊTH/oxW%\Hr:`!%e*l l'&&vQY,[PD!@{1 ~溥-E)~ꈶfUVV憢5XB!PB0mA=tW_}533S,[fGϞ=IGjZ@I,{@@H,1 lj=Ρ_Rַ(oV׮]Gg9;{̲U|ӦM8pFyלopYYVbCu,MDqAvh瞣5}qYh @f9wM9 YqVZ1Ϛ5B?o~[r:!Z1, 8i IIIrhR?OKo;BN3D  Ybq:9sP89[oٵ#6y(+Ynۖ# @f96r4\3P~iioi7r:>}m9rocW<ezwڑ Сѣ )p<,3o+=Z=]&&&RnYY]aϲ!L4 ",m_˷DZ+ oߞ4 r @  Yv{q7 ɹ, /Prh',g}[/ؐd a) V>}jkk52,6   \x`<==_uSbztVMΛE7zY6_Vj%66̱-ӧP1fۖ͢Y=Mrd¹ؖt_}m[yk2ENE  0YC9}R03fP O]]mmkHiQ@ڶ`8d#i^_o* ?ydjj/|`%e*'dɒ#G>|?\~U?zzǩ_~YJ,,:雂nA@ lэdÜ'xQܹRdҥKRRҡCDeŊڵkɢ5 YX460M!Ҝ-Q0#.ݳ;Zl}oÅ4s=)))$~(xŋpРAݺu( lO>u-ZD-~8:ƀ@ hyD]LuL`@MnFWwܓrNjӖ&;02V/b~ UVV9n JLoC[8E u}ƍtG\"[)hH*‘p p?'m@6$eCjJyPZy٢6lOev}W)h`{~fnJfE[Sckܷ s<<<}S:ͽ{ҪPl.Yb -ej% ;w'E(fWJ<0vX[1cbނّ:t:a ̊+za 6l'/ ~ )&0`pal#Ne+Z۷oSl0)Y(--\C 1]wA܃ĉi al(TE^~]C(djFܙ)I~$-Do{ǎտj1hK9[)7*];`xD6_ʢE†D KHgdy->0}̘1j sssVzz9s 눳pORҩSJ$E%y=  `!x,jeǷqiԝ+|LwJέ6XԓH"ܹsis,=VJ :,O j =>[t7a(}1[q*f1mj5>XAD4Kopcl׿:2S@@5 ZCϖ`7 _x(-WURacLmc 6Tc-ɒLfؔJ/_CJ)Y64/'Μ9\bD3;ӓ R,޺AQSz, o]$e.JlbHĦ'Zs75`mݺu˖-卑{q0D~d/lɬϫjwD@@FͲHk Z;'ܺa~~~a!eɬ .&  `,8ZM;***<<,unݺq{Zc6m`A܃ c[8 p///CBB &le۶m.el \1pD9( dVbb6lr U޽C=dU6+HH:udرcjA@K,wf&")0yA/ܹ|*~~~&/uGeڷoիWk{?~S=5eʔjZUnYD[EA@@<\8\`wCYf5Q Q7W_-++{w Mظqv_zuwh<oߞ>w\&JW2A@@@ <;vw]C(hCéS2*htֻ/|٪"HS05}ѣM4 e^TxBDІ'N$Ifo^D&}üj{t;|$۷o' L-3,1ώm3- !l27"22IU* m YqᲦE'xtհfs% 0ݚ#aD̺tRmmms͢@@@ D8)0ɬr -䨇=zgc¼yh9mevRvg6iUM4,Z=sU͢2s 6˹; ).1]WPP2W^yŨ̢g.-֭~J˰A%?a3v5lǎ5Ozr: 48ndƴ!eEee%ɬ³|}} mdzf{S˳*.L2kD={k3=ܓ"LWvڷ8{mlܶд4Wk׮z!Y-քw)IneCƂ+K  DYNokh3.-aDf)s>\:i[[,BZf̀8E@\&],..ج>)Q'Lg}fTXbuCY%  YlI/+&Ռŷ3#|L4U8qtKZa1faFU%ooh' ;'4oTXsu%ԝї ?G~Pvc?3вMC[l};S6HP0ZS]9Bŕ ?W6VeXjs0ZՈx*S\|NcUty@7[²v2 Z $`iWi"Bvf~j*K&-iAZCQ[H lf+4{ef[v V(Qp2_4ɼ !n†m)'r"|]e1*[6)62\Λs/}{-7\EHx XncffH<Gd9šUqנ^CK5F,,zҥKeee{1<"`PTaŤ ٫'E*(|QmtHZܶ9zp[1KhG$(tmnU!e=aw MGR)뿤XY.Ybl(ڻ1kE`5CR BM;Ƭ] IPR*[o%&&:*OOO(AI}Qzec嬹@  ` x,:E9%ޫd 7%LYY$0*vMkYH{s1k^~:P-{Aܺ!4m5x52Mה;&+W.H݌_LbyUem錖h?ϟﬡS{~~>Ncc9k/XN2rVKf3b6Սc'QVY]xʞE&*vhĩS̢dNXD֦ \BO [ڔ.]گQPHX 5z''''%%:tNIvѭ[7a^SSN ow}m#?=nBӲ@fُklIk׎=}4@fيÇ^ hsa,,ш64zonfk 92(W!*3eG;)6ámv~ifz7qhYhݐ:`ݐӹ뮻-?fa7y53c XG)n_< 8OcOMM)~Qjz֬Y/_F~,G|؍YvC^ xpay#3Γ|{|fxʕ{H$Dzg  &o }}NF=^FI|h4ω0ޥhCgBMX+/&uE/E!Y=F|Ӳyh@@r$mqe礗 6xo9U~zZzg<:ؒ>}PfvZʅa޹,ݱc>Kn `"9/h(IҺIox d7ְw< oxIvLJdܹ [FS  N!bpO-BZСe&[eeeMtKߐrh-[ !Y"v@@@< 31PzaիWSlQPP@15ď>HY[h)!3ѝ[>9Vzzzuuʖ%i,K@,ך/[Z۵kGy1у֪HАxK:ٱc2Q CVPl9s.ڴjLTB ɢ=en@M- _JF);Z#ACo=sssԖvX֖=jZڵ2eʦM⋿/^Z/֐ij  6YbC^+.;T٢]wȂ~X/; ;|o8+o32]"E,Z`mM.XiA  v EC;@u&M,APZ+((yz-R9'(êU\dv4{聾WR9n8RZ-'68 iE< "%"ǘetO@-RWbH{0ci^(#<H6x&ߣ>d^wGN,reQ}Jea .ZU<<=E9&8dȋ_e8V\;LY% eggO0$oA+_IFFFZsZZڱcȉE,KSYJE +s `й_~.F+Ec)'NЊjhK[ouҤIw6mիW_|EC{#R.ӕq@@ @ffZ1YE(żC6tuL'"wibCPK]ߟ ){!C~+**^A#Zp!-Ȇrbh4,>O+:uviBICF$#(C0pFKsGi/!!!//@#GPQBAkgϞ 8>czKl ÍE   ,GPv>(;5)ƈZI"Fc ["\ؖxKKL%?/ESRJ: Q  ry(j59`Ё^3}i,*!5c aexKz15DڔN>F\2,G 7m6@RZ¶h~ Kpn9ZrMIITǎr^!.A@܉d;ͦ §|TBQ!!!Æ aXB<|5K)Rh_|W4bIr@@ Sl)XvpxRhp+S7|h^izp   ~ oNm0">5|߾}MGSg|ef#M@-W'3kЕkЇ  N",'wn)zl6Xte, 5A@@Ͳ7aW٘#=3Ȼ=sO\ /HjuP,L4LAhg'#VՌbDhc8_pgJeuEV)'WyFÇ?'ZeݐP@@A2K \>-!b$TS7ݵ\9 CF[=zͥ05nK@B6:e-L`((v쉍7 A@@E @fyvc / Vcz4.!|*'>&:hCDrڵÇ<   nJ2K[QJ2l)\XYŷwf)'? Qڅ{v޴iV}]qN{J 9fp6}&jJս]4􍵋㗤ލMLTg„U|)-L!!!Æ 3*]+ZͿ??&''q)oM^S]@@\d&Kd"n59=kؒZFɡq 9W$(M/ D3f Uނ#  n@2&QfK}4|I-TndL(~.](qYYwm:@@@@lV[ilN-}P/VC!eYmy[>va'MD\s\۷u<   nA2-sPUK+NR;wma, ,$ǘ;(G-Nj   rnt䑺q -|кnP@@x<[6J^6IK2=F   `WYvb[ c @f9{_6DjqOp wyrmð#$ڪAٰZ 6Om+   !eh@@@j_,pE   mdV }@fه+Zh W@@@C2>\*@'   `YVA@@<Ȭ6̲W    @f؇d}U6O2@@@> yYm+   !ek5++y[NaQUUb$i.a'lk_ÇjhY E9ϵ.ݳ;ZzHɕ1]%H@fd" gb㙌 2RMJKyM/Nj(8ט0a.*2B<&Z# %H\Nٲ/Sb&~TWWW$%Y,NknJ0f]+.\؆ّj1 Rό6aÆZg  Io߾~k@f5p٥|SŎƚ1cbނّY+G&|*&gp===_{5J?%@r.j< @f(|"W3/3SX%TL% ط6% i|@WH'A@@4l$!?K:KUELQIk37J k{:L#M   І @fvɹ7Tb҆Փ">j(fj@@@7۷Sxghv;@"XwV3N'@faX ` (VVo{7,LάW%uU_a/)+ s2Fl 8`@4􍵋㗤Ś:32NjJe_? +W.Hg3Q+^; xhZ[7ŝ?5 B%A%s> ZM)< 鄻%n=z4!!Vt@;ҒZFbQ,UUzЩZO4԰]?A]zhϑF;cGd=Ycc~ ӣ\j~#اHu.gclhA^CO@]e?*9y|L14g`ρ Oѣ *w|XW@C=Tah@;^R5,0:1c8H6,nՇn̏)u*\ب3#GU<(ARD"OC&Q NsW> N.O?B*O\Z5W7 mق?$P4 zg>G)Kӏ؞8e_bA{A],i:jTMðizVy?%YXqi #2ˢbߨ8iyLl|BMnF򦌃IMREAҼLɱ])̎Jhܻ~MQqݎ'gG-XzfdIl 囘xS2SNcF"ʂw%bb=Xi_'OVG͏J}pm,8:'$Tɴ8vEG)xbcՅ?H\x_AU+&.دi*m: 5Se)wL;GX3ͰgJLA+ C_e?@Ҭ4KؕY8噍 cWlX6D##O\r M1S4V0['L49kQGZlHlz*w@2c+nC7R'6F?*<|n!.7Sb ]rK4郃G aNPK왁LɹE /X˜ڕv~85--eqs SRjj۫\EVnH[`ra?~9>*J)pPo6a|늁Y#FuGϋ eQSyM9B WUtmD]%Dt1R$Y\E{K<LM8(]K ŏJP`9c6it< 8Q f Z[&qgc67$j湛R7S.F9v$E?Z1mAr"aSc ?n$&T]=u[֬쬭Iqkj7[o+{ޕs~g1:5eЯfIuQ効oױҴY ~L9L+d(N9en[D?*MŸV7*\",e,oFSjhCa-!||b#OKH8VVc'sl׬nIֶke-=mm0>ѲV~i W3bDf/2ؔmi*#$X*8,$zh3icu?Ŀ#WOU ]{G_ziemFOSBnoWR>Z4oа?ZOyr27~dg+GtnQm5Tz۩o͵fokYaZ!3_ǦaTngfmPo[bcNQjvFfSfQlPtj9{LcK$*j&ˡGG)BbQ) 4d-]g7E3GFGC]׉C~21pj8]Ŋ )Q+b݌Wpmh2g]4ggW>a˽;3Ly7!yi&5?_ӱ' 7RP ä''5Q,޺A) ))_? HYА9+NH% ʹsVNFJHRRک d<:q-paHrP!_vZ\?*ThWU{H1lgV@x+`jeiqu+8,z 9ԕeeZF_ lj~kW]n{+ $ȱ k$uòZ rַL( AYZ\A+`F̄-7R$-Sa:Rs@b̥tKt>yGԜ Ri;Zׇk6O80PeFIFlJ&Q>!jl,ʼ" ip {q#6E'fdg(,8    vYb!    \t`6 @f}`rщ & ϭ7Jչƭ(PI4r  :R& 'Lhu+;CsT2Fo,;U# ݃ I+kJӮ*+8Sѹw?+ԥ+ԝsGx :g%tY6K2N='p~ߚtv(ni>} &f^&Uc(HX= t'lt՞y -H͞mǫSSv1(E!T\~f@lF6C@% wGn^cӶgސ!a%/4V|쬵-1ցş9ȣ(O).fkmg*u %oCq3 T3܇'E1غ)jC9W01U̮]LL=AZGwR/oK^fD xiga\>@f*@5UVҰ8V%TfH پ=x'ÔS\TZEi*Q+?yeL8V q@hhoh@"gso?[ܐh7=DqvH&5V.!BSyL *:L댛33ys=Kp,@F  Vb]t7v0e&Ƨ'8VUo|S܉SP/TT"<.PTH“zN[OѣGm5@ `gjFOqTJ.v]]VV)J}u PJ7UU^e|; Bdee 4J$;d2-;p ;C%ɝ ?B hfłBDI6iPPP㹑?}mH#pf9 =:poY=@f9 =:poY=@f9 =:poY=@f9 =:poY=@f9 =:poY=f;~~~aaaNA@@07YtG_ @@@ih4@@@ 7?ܮ8c jX,gY8@Y|GaL1zKHh@[Yb-d"***0+Z f-1p!mEfY>%gޘګOYRSVIZRO$Z_6SaI#f8ތzzW{Rdo'_.h4ŕ ;4s]Ҥ%Vb{Qû#h+2K"1N֗^ [quT˅Own7 5R(,ۚ \^h"]oީcw&ˢޜދws_ -<71 [j1]RxY"7^x㍣GK={&_xRģBY; |j jZ \=pF8]>Gӱ6>tv>6^Sy& qʘhG[ ;"ƅ*0MjVT\^rx@vOuϨ 2Q^ :~W^$Mܭ}*RU+hIO=ԱcS̐ଘ u'N\fM@y'ӑ W"<{~v, w+b8 .]ϥ+aڻ# }߯<0 ".EFYCGkt~UUJz~,WZ9{CO/zzJzhI^Qkj[ڹ:(K[>+jG(ԆRwӋ:/*.83t~}ڭcAzL_t}ݺSy8vRoC {!Õرͩ5/(kW?uz-^/O&ѭ?>P|əSQ\('"89e8\y鹺oԷZVz12<߳0N˰c= >>}TGUWWuCf_~zDT!ޝ2^9n- 8ՋI~zu )F*JҚaHxxBݒ}>޾~#Q$j?^`=7*j<;绘n m'da/UUG@me/ wKϪ=ENK7$^"ܡ=iriFrZY\Yn>~cc՗7W+;T]3oz5_B$D*ꂗا{xJ=eR:]S' ЃME[_O,aEwu,3N"EhPV~٨ˠS_;  iUQpm ቋ#o STufO&F^ yr89dZi Wj7qG.H%2')-?N>Xʪ:*-˯#GfܙaI/^^rUMp^:cbݐAhzOظR~r`o-zd=!ZS_#^}u e<8Cf,3f9HTrḲKZe?q{ײ܃M#oJ`]}}R0jz.nܱ|O59!Ez56nٹl?@@\_N6S*9r͉;>>;/}vW;3㓿'L(-a/*O' l=/ZU/c ϢU$С?zYF{RImJU_h)qު6]{۟}iw}CO[_`cQ + *Vz(*ΛŦZQר4rkv ,W22{  7 wAt8(888""jR7z߫l~6I_,ӻ  /o1JTU[W]UӥQw0PHPxzH8t}4Tꦠ öJ {"ϊk~~ ۦJ{}؂^۪)kVl=Y|<37jK&lF]T&|e 7wN˅$ e^^^~5:Jm}=$UWG'Ub/yT1[TE;wn7t%reܹӧXj zO=']-:5q#FU&kMUm*rƱ3.H Vi[Znᐦ1Yzh-ӽ. ſPFSrh's1߫N=/]#ƪ({_I޶l>LRi[C {!ݠ$O .i4Yʲ%nZ!؜Ό'V4( uDih=xJUa^/7{ 0({MTmʝq۪^how|~i?SzZiX~7g)8ϏZAG1]K~!&lٲzP(HXT${haоtY~ևlrT k>d[_#WN:U B./Uy[fɓ'eA639֚;z\ Ee4'Von- Uޢ"sEҢFz6ٕ(h/U*ճẻ<5(`>HhǷTԪY[WOy_7oAw >9Ӑ"mB{qU7nP/TH5ub9V}J mECrʦ3x_dWߟSHxFN!bEhhPQJPw Bޞ5!܃پ[r1=g^3ջcX'45,u}o;6q%,&g>OTM?W8[~=?[K>ݑd!;S ymxa‹)& %,4<iiIikǺCUZJ~@‹[rK|S&zn~|ڇ~~O֭pi5CIe>=TDǓ̥;U4HcoĈ>  b Vd^˲8>i@vdpmJ'(:v=]Qoiee{g_η홢 lb%~'y5j@x@򡘏2 ׾x̣eϮIRÚ-Z 7;<ңFNz歼DOyJ4bFBLJ+Yzt QYʒH=9 0աC ~wC92dStNa{P>9S(go/EФtzѐR{x6EsIDAT~l*5A7h+2|5ICȧE4k=|G[c{?Ў4|َ=MJRW$8ՠ^u>ܟ2[p}y\{oZ c(%4h:N]Ff“aI/e[!q^iZhWcTu\9#UB%M@/KPv^F|S=Ŷ,D}q~7$ZZP}R~^1hErIw}Ձufuޅͥ;(z=uAMqGcpIF~]8Zm+pS0jvz,4_:f3>$qCR7INЊa]{uտrQ{EdgrY{1:jeڵv;>f=ff;IAҒN+Uc"BkƷǴLV[|ͪ Hi-&\Yԝкᾋ6E8L'–=_;] ޫ3&zưt lYiviC-8g0e2.wex*t1v`Nh|0`Xh>]P}#;V'ukMEu(o%.g 4h+29*Zk8(6K, E+d¦Z{xJ$ϙ6;㢱M:IdD]S|F´!=R+\Y}EE6jgz?zXΡzuZp-UzԌPV͆gJ7W@q[6: vWfV9QvC]TDt2  &`[T} 0GQQzF l,h*>}4aK jFrZ9`]=ꕑ]妁1̤> /r~=Sd3Fx~nY»|iӦ=\<Œ e:#ü»#G=zsIax}r "MРk@@Jp %NZ߂ n4zm5Wʟg;nۖw3YƾhF! k̀Q=BI' 2q^ [wҲU3bJޥѧnWz뭧N2l_-FYy,o_|. }EKI Bu~;v=T#w @\~q3J2pΨ;4^Thy?UO!]6–to7_)C~ /~rrC/쫋@2%o^>+]U]]@xG6Y5$0s ?/a@@R iqWbYF@8\!|]:>.›tO+Ew_ vwBF/79(N-J\\\Aqk dddPfگ2wcxo\v+ :``.{jpiȨܻ-U̓1+)o8iB>(xn4d17[~:P@ua,Wp>] п4Дʏ[8U.~?Ͽ˟rf `K`4GOuԁ:PoO^[E>%oH$ __/{/M򔸴 R &{YD):` 䙴~cHcgK.0quԁ:P*^;4;tFSbǬ%N4->H0Kb{gs׵S0|1s:|xkJZЙb_ϒ/ m'Ձ:P@x5r 7!Pl_<ɖϮC~'鳓g8f> 1ik ~03Tv)uԁ:Puyȇ(v2i@vu*6fyfV^Ĺˉԁ:Pk:ʻ&t^Ay 2B>),lbpȄkkn2DL#/d>RM}nJh@u܏w\``<%Rڙlry4<6+=ҽ9fwb=FjCWuTBI.F;+H uԁ:p悙zRJ!Yi0=yu1 7VbJҀ7HJY*L/R0KCMm8icuԁsw %MRL+[ޙC,}Ǭy,`jYRTDR0S\%gr PI8OkgFuԁ:RMsQ" )q XdlKI@t8?OƬ#];,o˱)< m.Hɑ i0z1e*&f%yY@uಛ/mJ̢*&Ĥ2K&чqL}|+133O3cSFi")€PqDt#'gAuԁ/H,XK$M@lն0ƽJa 0|1˓Ê`)&f-)1c#6˽t,D "aI29i$J# :P@oן@ 6])k(.\oSςtqy|Y[LY7QSp9x9ߠ<4 _SBi O.r d+)T0Lԁ:P9M$\<޶c@` = $ɹ1ǃY)$ '#>M8N99QO*@?baΦ[F+^uԁ:m+HM˜R^$]*\,dǬl%#7,% "Ѝe p;F xFeĮ:P@_G&+k w֮t Xz,RyχYd <_Sc2`H{% ^F4%1dv @uޞ|`IbvoD*8 {'cgb2R@b̬>?bSfFK5,_ JKC,K@X@u80_#3Le),(j)ed5fq~FY[/i`I5+ynD]T/?Z5E6ө)uԁ:x P2C*oPr`. >)[v}SH*`vp y1J "K)V@u|12f:)xHN82D[(70|||ИfdAuԁ/ &N-Q+`24T@ly"xИ 's:8q"dKLRAuԁ7u`.agC {:i,L-LE<ߙXli,_2:P@_Ձ9pƤ< i & w~VvYz"~3iJ˄r&Nhs^*S@u4RD~"wpHNSC,Nx8,LwfI jRuԁ:P2Ӊq i@Hk|dR={|13mfV;g ~3.[fԁ:PtԒR$$Mu2;ޙl\kec 6IENDB`astrodendro-0.2.0+dfsg1.orig/docs/algorithm/0000755000175000017500000000000012773161345020253 5ustar noahfxnoahfxastrodendro-0.2.0+dfsg1.orig/docs/algorithm/simple_step3.png0000644000175000017500000007604612176652656023414 0ustar noahfxnoahfxPNG  IHDRXsBIT|d pHYsԂb IDATxwxչ?"ieX.r0.k1`5@%܄@%17$$B%\qDz*VVھ~,3ZŒ,Jg4wΙ3g8UUUB!dXS]!BN:! tB!B( !PB! @'B@N!0Ba:! tB!B( !PB! @'B@N!0Ba:! tB!B( !PB! @'B@N!0Ba:! tB!B( !PB! @'B@N!0Ba:! tB!B( !PB! R]@(q\KUUF ߏvD"D"B!D"A# ##!BE(BQȲd2bfjBl6nvl6vntjn?. p\p8f;kDQDss3  mDFގ@ /F$ ,Y 8<σyf<A`X`aXvax`vÁ x<x^x<deebh$I|hhh@KK ~9hkkC(B((bD"b$ tڶ&I߾ff& XgӉt88l6 33nf9E[m`HV>FϷ($Ikmms-v;nն^deev -- n?lz `ժU5k^z%pݎldZaZm6N'fx&I>tBQ(Q!2bB(be󡵵hooGcc#$IlFvvAp;!ǣYhEXքFE=/m{{;0"0ގ`0x@B0p\AFFnjs\tbbl6C}kYۉhZ]k5~p8h4@ ĉAȲ ˥oO3mofA-vN y};k;~YI2m;kʼnڊ6}!^~Pku\jH;skjuXy ڊ466P(Ap8BZZiYVA`J$=QV`, &hhOχH˥ӑ~jMwPO_UU~mb1\;X@HhomYCC=жշoff&^~xυAdf?'o{mߧhpXi?wO455 6p4mK1m/m{\;##GLr ,(1cyڦ&FFҢ8%v,?':e}Z[Z7##YYY bX( JJJ`emmmMϧ8DQAai0m'\틩jm[zs\zZ W@KK  miZhaZ[۩k-J۩j!Ldeet:eݞ#Q+f+ ;6c?p---g:նzo“fm`hZ\.囓Ձ PZZ UUq@ϯsr}_Ѷ0mO{3n~?\.x\.\&B!ɥO,E 8ш˗/ 7܀#FǬY?yܹ6mǃ>A8FQl6DѤB!Cjճ`-.k׮\)S`Ÿ^{-:wtR\wu83pN Bp:կ~@ 4Ba?ݰhc߾}Xj.b3F_Рt:u*JKK{n]. (N7 !;;VV5iBHuZ w" 33w}wOfݻ~zlܸ---xq5t]χ+BȐJ @)S7D,C4yPK!+Ydk,K~x<$VD!da% Š2!+Y`@OOOOuBR,0tG"&=$d!+Y`@LB,TUUS]D*b1}?K!Xöf !KY`@onnFFFF B,ea!KY`@gCB!R6YBH tV&',e !KY`@g !a) LG!Xz4jMuBR,0ltTF!Xcfv B!R6~?3GeB,0lG"f=$?,ea=l6 B!)R6%I .BH B ,0l˲̛H!X(̜7!?,e2B!R6EB[YƫUUa2R]!b) ,3sTFTU(.!,`Uq.i&bթ.!,0tš6\~ŴipW5eBЁjK d@=hnn+yϾ, V\X:q̼Ѻ>,:DQ\2.RNui Y,eay4D駟˗/QQW.]۷رc.!,0l QS]!_Gaa!c̚5 6 ǡ- YQVV*BTIȐR636l؀y!8`;v,2U2`029m 8~8j(1 "lML[~HR6srrԔ29-Z&<.+2LIbז=z42ı tyb\F^^,6S c. v(!,0l;Nff"u5*9Ȫ ϧ,0l#"B5@( x-2PUU2 X p:|.~Baa!dYNx\VexSǿ) KY`@[[[S]!( P\\),(..ÇZtBNJ:Y1&b19@?$I(--E]]3(dr1&cv\EGK\UU#t`% ,MOi֋2,0tggg331-н^o㪪x(xnn.V+< XC:KS㩯jě )8c`(--@'$d=##K1!==e&YI('IƎdGȰJ:Y1@ ә0 o[LDhB ]e=Z脜,0t[,DTAHv*l&RWmT=z1VЁn٘x1i-b@N-Rb1TWW'\B,VЁrTS0C@1c˓R#!+Y`@Zb.~ikkCZZZ-tՍ@4)G ՊdJȐJ:A(.~ioo6-& "rSѣGHwBNJ:- o"1@ թ]Q.cN]F-tB:tN7 Ö]=&Gw&MݻU&!C+Y`@X,L7!x:(p[|W\$L:hiiIf Ydd2dXE@]N,yiZ|,0t IR]!}uvu(Ȳguj@ii), vڕZ XCɭB 5!Be.;CL42i-ti(pZ1jnDI0a\t@bLNTUγ_Iqa[$!+Y`@gK{{;]i4:-e&L@cc#&ttY4DPݻ@wXđtv` ",K tv"]./--m@BVЁŘx477bt9(YHדǨI&aϞ=V#!+Y0]UUY?яpфe={6^y啄xPSSIe? u>.w N@ k@H} Z d -k b˖-2ł}ᦛn¡C7|3/^^{ ,+o"1Y4/*X<7("O]v11!,6_qFСC7]v ##W_}5^|E|6oތ|Xl =~~1 p@E}_әʗIH|>w{ VDϡ˲S"&Lr ΃Dy׳`6-_~]v:,`P@u^z)Xr%̙3EEEo~D";h4 ͆_p\p\I]Gss3233m oAT8[N=WJϟd= avܹs](((+**TWWc 0uԄpVh4 c;D׸nHwbh6Mςn ٳ7|3}YA@]]/wމ pя~@ 'd(knnFVVVf,v(3Πkщahz-= asnÒ%K? wŸqPWWUVNxw܁K./xիQZZ@ 1dddxav  u$aĉx饗TBHiY0 @3g***n:,]fZ@zz:,Y;Cyy96l؀Kv91w;1!C(hjj걅( \f1>a?~=^GXɂa/#Fᆱ;77˖-`Z#!- ";;sv9mɓ'Q7oޠLPJ s胁&X=v;-Nc]_5jL&J+Y`@ooogM$ cUU2u?_[RR႕,0|pބvFNNNQU6u@|cǢb$d`% HaB0܉P(DSa=UUdELFBV I,XzB8ǩ_5A0!FR6ЛvaXR] !*?#Fn͐S\QS KY`@ooogb^b,$l .^ #$Xg 1ÇcԨQ dU =''<رcRuj*\?q=s 'd p8 ݞ2`̘1 tKaXxKzmmxpg`% pχ`f~3D"Y!,HZ+ ;vHx\UU477' Kcb8|0 I=OqE]e HcڵPzLC}}=x^!,HZ_~]v͘1cz݊(H6-$tTUUAQ\tD"( rsspum IDATp:8iMv9ʕ+O{  in2O׿o?><_|_ 4ܽ8*+ݒS>ycA8-^zNN΀իqyd2! l P7p֯_^!,H9n_}v|DKK ֯_˗' K%qaS>8DHɲ\ןVp6lE IZ-<χd»{Z!dI tUUv.~?e4޽{QVVG(l&[R7oތh4yAQb8gu:2Xʂ=܃+w>3b…%KGe<1cƜr@U ]f}䠽P5Y;v,8C[ n[?pD"Xx1֮]۫A`c) ^x!?b͚5={6>#,[,,Vл Ǹqzuheq>\n:̛7$8б$ s`J 9KYW1|Ȳ~,;NF*ɔuW`Gĉ!)qRvyyyǏcر}1c˖-o~X,6SLjƍ1s>R$իWsŽދg}ӧO믿(߿bܸqp@,w-t > Ekl߾$a֬YeYrO%83gĦMBKY@gqUW᪫Bss39_~?|^u#$[!,0;zN#ݷlժy'Q1w\l޼_!d I ;͸;ysϟ?;w/RD7̷d9p<Ooqbr 6wx/ZAAAg۶mO)qBRv)̙;b) R*222p饗W^IzUUMd6WEEƎ랬^wlhjjW۶mÙg81BUUL>h`I9 #`ݺu5ڵk/x2&cԋ8DhZ3Gyy9fΜRS 󑖖]vy] 4V ڊkb…yU$!Cݗ_~ 7n\ҭEQPPPcǎRm۶a̙S"ęlO0K.,HCޓd2ю } HȲBB!|>ոcL>=am.2&Mp8#Gi] $  %L<̛Hv!,frAA׿SWWÇc֬YfU:}6>H@b) ,㭷BKKK[ۈy2H`2f!l;pFݧh!K >{UUUG; ={v[乮w3X,9KYAqMX Q\\[/$,UVVb޼y}1ȴe"+;;V|g1b֖LVegRUFBeeeE@c) %%%ؾ};>caǎسgv܉3<~{2HQa$IګS._DUU>w\b.s_Y1z><2Xʂ]6m4z.&ݏ yG(;vlw:ojvyG( F)Y(>sX@,())~ڧ#d I'I.\صkZ[[.YVDє@ȩ,@pZ}L ك;v@$umdYso!,H(w [o;L;q:)S 8Nw9 I0~xw7o Պɓ'wn$I(..F[[[s$ KY@?r|>."))[?!w^ii, q6m̙3OUUE???k$eXʂ=;oLG@b) ԯ`٘y " tq*QXub1̞=y>.\:TUdCX((,,DMMM$d tVB6itqbB?(3g<.S__͛7 /Be,P߾SNss3o]tBQph3f3cؼy3?gGUUG儃Ɋ}b̘1}z.p8E@S: PTz[8v,""Gc"CQNӲ8x3a|xaqM7aΜ9x衇0k,LZ< Vfi4,.x^8-N; Q [DEjegg(Iұ 4ff"Qկ0{l8N`7BQȲ/8*nc9= fSn5YaMx<[_ݯ\H0q&( V\/2/^[gv=`r1)̏D{;tYa4`ך 40KYRWW1c *QB( Q 7Φ/hB,"Ua6sX";BKK|m/'|Іݻðyl<&Ma܎ᰂZ6jesƾ}aB Aᰂ9s\HK3O>~p )ra9 EUס"rUnv?~yyy0CIBEE~`Pcɒ4}y$!U$O?]_aϞ0xyW_{[><\.cXqE,n`HO71َDhn,a;ޓMx6 DQŤIvrK^wwq^zKzz45Iy8cU[+AeBVKY`@Eǎp-k`5/ONc>hLjf i 09nfsLJ7QFxx<;PHƑ#1r~ < QU֭!*ӟcL7[qcG7*+#ػ7tMI7~ǿ_AS)Sruu wYi/9"=S?Q6[ Ԛ ;V6[|Wc36@455!==(*xcİ=v,W\{Ø4r|g`%EQQj,`ǎ0frYշzPoh;v愝ɦMF4)L7T ۄg-JVhT;Ls*vG2;PU`\;P^c pwp9}{O<~aȁ\Qa^ù瞋"+Br,. ;(yʿPH׿^8p`2jjb_oYNZq / a]YΝ!i܂믷OpU^la.^\ >.۷p@5at-[_:~8 R *"|nǠkȑC-MMM0b̛7O#@fdde=V ׄ^(Ffi;+p@fߞ?lƍiW{1q f\tQ}#GZ0}f…]G#/όkӟG0ÎT>>sEؼy<-KVt0q kGn̙Yӎ9s12{mhnP\re6m`:\723\ل<3?O~?oH^}}=rrR롨 x.9nɲ}v[,XK2s.ҳ`81t\nG6? $;…R&9sv\yryyǠGy繰qc_~̞]kXb-u 3Ū'?!lJEqHhw{SO5@U]l'p啇?5<^SKOX|y;m8p ɓmHK3!/όQg444|I ^DpWbԨQ[oիW{MYM$yzʂ]M(0yAYD/Š#ܹNde O нv|y&OE<|rsV8}(- +ooҥiO}8,^3^svD"ؑ#[[e}vsO֭㢋q>CcǎMi ר|C$BwKoqܹl/9<[o&LHzM$yX\-{|?1_>,ZT U_rxz]R+L3Ɗ6W]uo8i W]_E*eK+{߾0L<&NV%v{c {e8t#C1#~q/ફj/b;ׅ]°۷fێѣQRbAyy盐f{P^mU؎=ɩ"//Od:_PPEQАHe<쳸kQz(,,?Hr2[.Issغu^{E_L{r1~\.Ǝ{ݢ <8<1X^xߞ >ݎ &SҪ[c ()v;H&S}EQԝ;֭S>/S\=T`9|8~q*I]*//W:,n]w< 5>O)9Ԭ6=zTIY߉nvDU<,cTEQԶ6n+VHz]$yCs\0u#aSMp%dML1.aѢEhjj~#{X`Rh$--\jyTU%?/X1nXq<.2Z0Vn@`ppw"aڵa8rnQsJr7Guu<݋j\tEc'_wעwNjm$yXC:3MO?o|Idf#*G1qDKx뭷ꫯ!R> XdI2֭l9眣?vrĂ r;$6n&lxGoHb@ #܁w5 p᤬o׮]4#_w͟?1] VЁQPo3Ę1cꫯFqq1VX򆬖pORC[b̙n0QUU`Swu~Rs7>h2JS>;?J&0vXTVVuwsЙ)S`Æ ^I.VЁq$.&L{Nb oG|>Cvqܹ0}Nz'}ظqER,@gMjTUŇ~?SLVr 7<`89PQQ1ٳg1bĈNz\oΜ9ؿ?ӄd ;w^xaeNf_t5`Hd\leeehhhg,wɓ,vw9c _|1hc% ɞ(}]\.̛7ӲL'|rzS-נk&Lطoߠ/ĤI\SK ۷oH C>?c\{?'?nۇ^xrYa2f{h"X,NzӭeJojǎ.`ܸq8僶YQQQwM&NJV`Hs= sLX҂3gg?vލ: Yf!338q"nfL6-҄h4`FFcc#6oެOzN'z- ##p#ޏ9())IidW())@?r"H-t.iӦXɂ!(''|/ׯK/uy7pgСCo_=sN\s5Xr%;Fٳ'a~lQaX " K 6@UU,\+r{Upс,qHkjjHu))?~vk ƍr.כ>}:D$FO Bz wC6׭[|}(((Ŵi֦?_}5 `hmmESSDQbA^^x!IAUrr2駟].K[nAzz:o򚛛2tɾ&N/rݻxPTTԯߟ:u*dY^28?fҳ`^YY0 ϱ`N75\2s9/~o|⋻DEf8/ ֬Yr\뮻K/f@PЀT ޓKy&OÇ# ߻w/&N~Ϟ=YI-}9K,G}/§ KyRU#K.\ݎg}Z牊ž={|doĢЁ^v||B4hl՘Bd2<3gxO-Z^"-[VT*+:w *5ydaɢ\jx4h@0hC$(NgϞRY׬Y3Pk׮>E $-)))b< o;d2|wx"K!d._,w=44M6ĸlF=q?wU*ԩ#bG,Z iAKoa4+̮(]ӧw'u.qlْo38Ё^ɓ'}v'O(T)%>>N*P:ܿݻw;w`˖-XhaÆի~XX]v!!!A)-x?66iiix׽:GJJ (r{ēz 6$1id!!!|פ]v?3RDzP^'WZZ4ٳ{ŪUФIL>ӦMiD;v |K(,ݺuÖ-[>3.;2QM}bNK^>IMMu{ DA#11/qqsATT6lad\. 0'5|f\cGnn.ݻSO5j7o˕I $+fo3 ;;ۭue;P͚DLL F^z'agw܉h4h>GTXǏ{x>Ɠz 4dBIIǶ:+9M'Z~i둜j4 غu+FC+}oEϞ=ѤI=˝cǎ8~e|AۣcVDkSbƍزe 8k֬AJJ /^\cj|PԩHfݻ;wjI'7oN1i[Xɓ*&Uưapddd[np^u3 o,]tq;lƾ}0p@r-[ʕ+^]?bfA'N>28\ p99O(P*MS4(w|0 .vT 4>,fϞ#$$[nśoMb7`qa 7{ *2L!Mvx.:w7bT9ѣZ۷WC½{DqLJI $+4 1Lz2M4P*Qbr;se,DN_Y+ +VgsڐoG:M"O?ǻ˝snw0f0V+dR;ϕt9VQmFhJWtvgϞrBΝ;ѠAm֫ky\u˗/ ..jĤt17Mr4EIHr ze߬X tϏz J=]<[9-JFR}w}+L&bcc6UGΩqzujt:>|0 oߎ!Cx]Ξhٲ%Y݈b ziihf6&gϞL&9})#H_j 6GPI $+4M%&PTTc\t ]v|HVU*rhZ| 08vwη)@='""ݻwaw͆CbϱrJUh֭[1ydL2KI $+Ejo>:w̷)_3l08p˅#99 f͚Uc4C QQRELZ YA5;v EK.|B5 2 Vϟ?ׯڵkѯ_ǾgA/D&a͚5hҤ & :E $-:o3޽{SA@p 2k׮>?qx3je:um'Ģt1%vwƐ!C6@GFFF.^s޸qcƌA~oWqU7** ˖-ڵk%V,Z iA Ã6Cp;v 8p ߦƏ?l69:WMWޔW_ /iӦBԼA,Z iA Aaa!f={ ""|B Jc>>sL=\ĕIDAT{7oFhhu1'.7( ~-ܹDO_̈E $-kv܉}>Od z6m qjgڵXl,Y:uLU[h>_}RSSe?"-t-,;"33YYY1bߦEHLLIJe˼>Gvv6&Ocbʔ)nn z qqq}m A2cڴi8qRRR<>d2aĈhԨ[d2|Ƃ <ϟHZU*(zet_FI½A>Dtt4<>7ĵkװqFt:jR\Y}Y̞=Dž <_HZŔe8pƍǷ)B֢W{8rtR%y6)) ͛7DŽ t:="-+Jɽ+z_~%bbbЩS'M! rCEǎ1uTڟÇcʔ)_{|=,KZƊ+pI,Z#bI JM/^ݻ1sL2JR/|Mq|gO7##ѣG,]ԫ{ੇ;wi0"-kZQ7/Fz0zhM! rx]vUω'͛cӦMP(^]Q#22 VWĢtR ·UVo G"C$))  СC?rekٰxbt[ƾ}ux6΢hfdeeaƌ^_HZe2d&}<ٳgqx76 `[hƦMK/ah׮  `٘c|5k&')b(̛7OF1rH4lǏG||<6cĢCbiSN}o>$$$ȑ#{.8Q0`>r/-[t:!ZU\.lذHNNƦMe`'}ڵkԩS;v,233q-t4-xi)X@322puL&v!.. ,Y+Váh0i$̟?ƃ`6acǎHLL27pp__t:ݻwcʕA_y|G  r;#<۷G6-Fc("^Y_P(P( N޽gbPgy駟0uTrrlj\6m˜1cwȑ#8x.\UDa``2dggŋ0 j1bV^.]o 6m˗/'^ܸq:tѵkW.rҝ;wΉyII -[[zh"ׯn&@FFVXp]/pad24 \M66l:w;b*Pxtּ/$-!!!8q 5kþ}`20vX|Gsrssp80n8[h۶->}~5ko߾rw8x饗0l0K>}:Oη( P@m1 m( \.h9t A4;w.FT>}uօlFHHZniӦe˖HHHg}#w}vhZdffɓ(w~ JBѼ?'ASt/j9-w]###[n ~% HJJ”)SVnȤe˖8cǖnb qĢtpHU֭ձFZZzȽX,h{3@2bI Xze@h[G i"-r MĢt,U E &{Ģbm@ xD,Z iA/))A`` fTh䒲T-_HY)'!e\NU!iA>6@ <"-fQ=$E $-F$d!#-|,d2WF j·)FR7ٟHV].V+j5ߦTZFvv6 , & F%%%0L(--Eii)f3l6V+v;nrtrגdP*PPTPh4Ph4 FA`` RhNt:hZPU+eEQT*A@v`0& EEE000\[,XV`0p[V88N ˖; ula~m69g;}`;B3o{q[\!440r-{\LZG˞mS`6a=5 x(q-Kv[%a˻"[oܸÇC.oWp8 V.Ʉpjjk8>Dlt: XX7$$qpN\CR\\ NQQq0 Z(`^zzl'-b qYL!44Ίv `0Flv؎%g+CVV, kpqo޼ ш xXp!^yL敏>M6k۷/ׯ$$$$^T-ZpB[/"ϖ )S %%3f@LL <ȷI#((r~:Zn};wSNG׮]ubݺuڵ+f vw H=qaÆ jh׮>̍&j"~BBBr9Zn:`h4 4h"s̩A'A@ Dt@ Dtq:HKKCVVV`ذaXlY#%%}W\۷oWj;tAcΜ98p~w4W_}9BBB<Ν;͛d_>`ɒ%tR5 ЪU+̚5 ZH{xꫯ~'ڵk+ 66ϟի1rH1d$$$xG`ƍ1bD@@WF^hP(%ziذ!7n쓲 UC2#jg;hWݝ|gSUU!BotBpB( !PB! @'B@N!0Ba:! tB!B( !PB! @'B@N!0Ba:! tB!B( !PB! @'B@N!0Ba:! tB!B( !PB! @'B@N!0Ba:! tB!B( !PB! @'B@N!0jtFQǁ8KUUDpYA!!! ! H``h CE(BQȲ?bnjBFF\.~?<\.z ۝6Y#" ڊH$@ h4h4p8oX,x<6B!x<I ˲8y6 6͠$---hkkC @SSqDQ-"$I?v?wkۜ8}mK ϧ~|@fffGSğ'={6^}Up˅<p8p8ѝN'<l6xvE>tBQ(Q!2A@$A< E @ 455!# gϞ$Il?Zn}'/vXV8N;6K(zHi_ڶ6DQb1DQ" pX6-BZZZD`z,|>}z/nn׷fjշڵVs0kFBz@[o8,x^Njy};k89vn,$AL{qnU1AXVdggUZ~|>V׫9Na}N`^sk>/PH ZZZ܌gH$favEFF222i9gv0%IFڏ(AXKK~0;hh@ fH ׫233~ݵY?wvA?8ֵA;Ҿ[Ah>;;[߾999~жjb?o{mߧhhTi?wOΆB!466 Vp mKw?_7>l{1|$'Qb6E̙3 /Lo666xF˂t>M!x.$P<]w݅orR,_~$]!b% L. X2!,0u{^B! b VviǓkRm?UvJ,苩[N,B,0uvq b VԁvD.BXSc#!c% L U 2xd&B,0u;&DB!J:v;MJ!&J:Y9*#2xdfAE b VԁiB!J:ЭV+dY6 B!b% L1&B !+Y`@'BXa@g ! J>Y9B!dpX tDB!J:eYb1 B!b% L f]!tntB JU7557 :|/;UUQUUe^Qx ! +Y`5Zv-.]X,Kk7n܈7?~<,Yxǎ(ؼy3͛?X?""Y! +Y6O'̙3QPP뮻%%%:u*Ƿ-.\W_}ӦM_^VkKFp\F$B!),H@߽{7N>iK/w}ҥw'OD"x0w\wp @EI΋"Tp,.-?歭/`>Ç1i$aٲe(--O~n׺ zxzz!$?;г ݥE 8B!Nu]6l>̞=yǮ]i&A,_V?я:=n<D<O!.-Z^{-֮] 'Oŋcѣ]&//K.w܁ӧ}"<~#  BأyW,HwiB/**èQnSLAEEvZx^>É'pwx8VZKbǎ8uXj(FAHFII f̘FS fTUU\!,0mv`t$xwq- #,#F@FFK+$$5 tӉxsK$$% tiB>SX,̙3!$y 2fΜݻw]"!),0ml6fN駟bp:8V>ȲcǢH2 I9,eiv0cÆ ;w.AqevbC\%!,0ua 5443f̀(8q9)8`pV iC&MUUS (χ\TWW\)!,0mgdd0&sDii)2 ?TU,())ɓ' R6=Berك &]qG5RBRKY`@|̼ܪ0i$H=cb NSaÆJ I=,eiļTUž}0q΁.:KJJP[["$ KY`@|FA9uBƍ:{(BCCzXzvv6. ]///qDU^SS Iq,ei=??FAeEصۏ? Iq,eir1s݄WMM ai3Yy; ˅ӧOQ&!),0m{<ff"u1w~*[(**,0mgff"#] !vIcЁ(๎,1bjkk(R6ЭV+<ѥ2h()),˝~/2,) KY`@{7]!( jkkQZZ%[eƢrVԁ*;|!mK$TTT̙3t"$QXSeM$T__(((v-qUUQVV#!+Y`@giR~b>gϞt.G&!|d=// hx(p88rHj$$t#S__6 oHฎq,&*sjmmEfffYx dsG9I0zh:t(6XS:K Bx<&[vq9ީ.2FI-tBJ:v;e2(---MUU8-ND3_i˨?~an +Y`@w:LĜzwn!bzEEA'].!),0u{^&*s ݞrگJ@QF8 Idp@ dPZ[[m !u Çp:XSj(FAȠv19%UUȑ#;!`% Lv7S(r]Qxm^p@׆Q drB$miiNk{/}ĉJV},J:- %iIEB!dffv;GkkƍjOdjB$ dӃݍCW\b.-tnݻR+!,0uz!$]h 6UUᲺ^CL8b% Lu("$i-t6EQ{ diDI0~x\b% L,ĜZZZ]nSU^~%Iƌm Vʩb.mmmWN3mr,?~<Ξ=Є\(Vԁ.rIu=pN a' \Qaۍ.kmm)wpY\ n|CS !i,0u ěḨ vNq4ǺeeeӝԳ ݥM[Vك+VxG,NoZq_t`0χBZ&` b."ONcщihsy= ]\Cw%KEᅬ1c̙3xOv<n<>TTTtO(`茘Gss3z"=$I0a^}ա,S)- ]zee%n:,]6 PXXӧO233d̛7sŁa,]hlj9IU(ڼ ^}񨫫CKKKa+Y6WÆ ￯AAnQTT jPxyyy^Cw\ɱ]UUL4 @{sŸ́2V mVs9{, ''SAqrX,ZJ+Y`@okkcM$UOTUEX蹗;> Jx Vub.*VgЁ fFIH`% LZOaBICCx*+DE>@{Ǹc)wbjd=T$9syyyUU O$7G2!fJ:CMJӧQTTY{AR^]Q9,رc J:е3 I'Z6K[}rOtȑHH:a% L @$&Nso Y{USTTժ/;L F|>vK!TUE]] g )}u( JKKNL,0m11w/1IpByȲ#GR KY`@ge13g@>[`,PTS,:Sb) LL$@̥0|>qTt?5카@I7,eiV"h *8:O㗕@k$$ H$mt Ǒѯ*[z\\v$:g?  {lB,0m 332ǏqA%X-[!yذa'N\p{=(/_n_I& nḄ W =??<ԩS sݺuxױrJ|{~!~& IFr.9|0Fg@T@{>}BK<Ә>}:ܰ0f^:73 %9I i( cΝ~*UA@MM Ǝ I}( |N˲„vZ<8Ծκ xGQ__z낟Da) 說^M7ݤxSSfΜ~"%t&9 Peeec[BWhhh:}]x<\yh5\< IDATcʕ$ KY@X,xQSS+o&ϟ#G_sD LKСnYYYya! @OH'7o, B:Dp]wa8y?!R$]w݅/رcׯǝwޙ2da^b555Z(**!&)NejFذa-ZImihJX,<$ KY@WU% 6݋cq)řS7oF<ܹs( BB[YۍK. [oży_ .Q.X:*#p5q?[R N[=??mmmD"q͚5ѣqZ}{,ŋv~BKY@kXf ̙曓!hj_`BR1f̘~ YymBvo_\Xuaܹ$ AEح;KIp#r OXʂCemi~ݟ8D(6wn-[p8{<#wAE\|ؼy󠞇Db) <Ο?۶mî]k%o"ϛv[f> e9 pZ)h?V\\ !U]]ѣGL@ǡ;<466/3fЯsrP*M1,Hj&XvO&VD¾`ܸqqb|@- \& 5kV@b]ZPTT ޽{EHI ] .yGFvv6/_RI+3fL]EȪ"tϐkV_W0w\,ZȐS% Iu3~((..ƩS#Gh1mo9st~k2yLAAv>i!F`) )ĉ",%%%(--EYY~Z/ %NX:*#l;tΝ;1g#g9p8p~_|aÆnUYTUEyy9:"$XʂzYYv؁O?عs'ك]vaƌw2:a騌K$TWWע,@ǔ.׽QU#Fp / Ρ1,cȑ:x $Xʂ [:u*233=PZ3IyǏ(=ztw:ǵ/jxG( )Y8mۆg}@,(++g}6#$Xʂu$ .޽---zn9qCk /]ho0<πi!{ȑ~Νb袋zNz1sn[8n#.{l[,hf:B,H_t:y Μ9QQRR2g!a 3gl>,\PUNQ듊'Op$KY`@g#avZ8CTmZE8rΞ=}yf\s5=^?Z,BeGP`) Ln7I ÇNqWUU̙3kQ9EAQQN>=Z P,ei ]!=J u*((QGu{o+^PU>x@Ccc$B t6֢tӷrYaBX,nn]a|;rɱ^Ok-|r!XS:+c N<Çj%(A` ছnBCC>N=s())%Kz=P^a!c HL+ ˤL}VBRɓ'1eʔ:q6.x<(s `̙9s&~i\yy7o ڇȲ aq $|]UUN>QF rXIi'NYO_o=Qcd"CVd(eZV gpg~ _s*++O`٘x"^0l2ڽveceu%rfATD6[^^$KY`@`fv QQ__]CWe,.TļY[+oWBՃ^R$X8 L+WC=^{ /Ƴy/~gg$A!F[;br]Q4Fazsrr:C t׋P(dttbZE"8$EOߞpccx裇ep݈xnsy^?[Ve8r@D(r\9\Z/~VN{R6srrp8.NPl E\:mBFD k.sj;𢭥fCFFM.C Rfbafa6jo >Q999hjj!;,ei`ka{–SN:qP`wY\C<`ذa&:1 +Y`@gi?–AuKwpNsHKe ><%hillĪU駟IYYYhnn6 BG~~abXm?)={ eǎXhOkob<#D,0u4aK*zk>okV\$IC\=yq1kj6~ӟbŊؿ!5a% L,MGrijD8,n/(hhh;,Xb-[Ç#*Ff AII |ɤD,0u{^&z6AiF\h֩fBq8, ڵkqq|F4ՇIGyoVJt#C,0u;&z6`;u/;A[[$IBNN3I@d{wQVVɓ'gr ?$.C^oǻ ׳l馛z c% LYYY(I*AXűcpwӎ<` T8D\VWRQTT@߻w]<2\/aٲe8pZIVԁuTg᭷/K)||cW^;#UV]bJiii`l 8VgR]QC&Ynl6."]멪K/^^Rk#J:}>3楲'2e .]p{' ,XhnVۿ-y-322 8ĤXZ,$-M6a̙X,** ttӉX,ftL۱c֬Y˗#v>xO=zpnQaXŨ:ƍq%@׋ke={6`% LtHeQXX uNvK/\mj8s rss}=9C>FĉI_[[Z\zE@EW\UU&6\dT?wy'DQv:QAp}aذax 85 ;;AdE$^ZZP(I[n̞=[= ԩSf͚F,0uv4Pyo~ 8 xꩧbVB|>SV>y71PSS۽{7:]i^<駟Ҩ tVR;#3f`zNTex(--OS#JM)4ʰɹ[nŬY@DQļyP[[HtfbD"xq7_ަx?{5qi}nspEQsEdddȑ#C\b֭={v@nqX~G,0uߏw]neYÙ$իhѢnà?ӉJǪUP[[;SNX(x(jrTTT!.21nܸ[ SSL@g +Yҁ ,5k_f̚5 < p%}ٳg#''YYY0a>L:8f%5ٳؼy3.]e\gEwuLرcc `-)-͆!X &L,˝nk(:u*v5dc% R6EQs=ؾ};֯_W_}֭[oa8z(>#w}7&ڵ ˖-ʕ+q)={{jv("3|>3|+^t믿ǏU)nNgrP@V@$aܸqCz];Xކ뉢iӦaLLDb6~ܟH$gAK@_npe٘:u*Z[[~rXV,X---hll(x<(,,Dnnn%Ij믿 כɜ 6`Ĉ]zNTkgff??ԔԄ;ĩ ŎOj ]$L0سg~?{OOEI 2-&?gֳ ݥl:t&Mw&Gm۰`.׿Ʋe0vX\~~믿]w]LDQf40k֬(7DW_ɓ'Yfjhh@~~~JDTJ T$aҤIA(ػwokر H2N!ۍ#G@Q>|K.s=χg}ơC "~i9rwqa??< { lb'OݻqWw@Vbx|8zl޼Yςt~7# "77\s x \>6 O?4*!O>яxG~~>Fn[$ff$5棏>7o^-N'q`ʕhjjJT)رc(++3<Ёk袒@1cb*Űo>L6ǹ'I&N8\.= ]^4|ظq#lق3ft:zsja}*|xWz!֯_c 0&>śl@?~_g~DTUM@WU>x(nX0nܸ!o>ɓ'w3\O&>b V e[@{+S!Æ 0m4̘1uuuسg׿K.򷬜fIX qpÊ+pф>v*immE8ưaRbGL%=EQČ3i׮]8&L>} דe8~`% R:+??<V^۷cɒ%/iٴi >;t:Q'|Lm:#F0<(EEX'=%I”)SPUU3;wȑ#p8zO_@bKh}d_X,%/r|NTe<Xj6o<2S6zԨQWimnDO:H$o߾3gy땗>1XSz<Hq.l:QQqw`֬YַPý{bذa)RP>!1Onb$IرcfΜ秿FpȑGJ:CM&$aÆ X`A52h8K/}l)=/l5jȢ>eee wa̘1z_l6M3?XS:+GeF/qF2=,_[l㤪j=@{ =ו@,`H ]EL>[nMcn۶ aʔ)ޯ?dYFii>>Iod&F[n~~'N4'q뭷^E?~|ʴ]Vbۣ۶mKغu+Ǝ };\Oe1T7@[N4bժUhkk_h4ӓ#G _Д( sTVVy#v7 ,sC\tEضm?֖-[rz2z%%%@J:е*mذӧO?z鏕,HYBL\71OqmAX뜟sNTe@UU{=477c޼y>}:\.N'6l؀{kpmnwG(D *+Xo `۶"񸂅 ᆎ۷G_!#C UBUᮻlanI#+ˎlOGo͆N:ۭoKUU;~  x N -(ypAD"'ᩧ2oocɒl,GO!W *$Iϗ ;c3'P]=<i\5%aV\<^9æ!*w\CW#+˂F}Nw=S*IBSQ(*8iSߊhT(8хoY_/⡇Nq^}v{_\.O9vli "^ rszyX,CwRpj:^pLzTTT`f|{K/G =+7bAcoz]El6 ;BQTavᰌ$ D2矯DZcioUWY:}lg9Ӎ3 \+nYYQԾRz먭PSG4@Q쨭݀^xVBC /؈XLE,breIZb 23y;~;wFqͣ؂Ҏb1*XU$ APPXz9(ؼ9ڃ8SBCû8s N> UW22d~a,^X?X׾1)xl22,ޢ"Quuux;y E$ EE8_Dp6--2*+XcM81Ž^8SU/ \z;>2v8c{peBU :E e2n-gguk^M7u|vw⣏,zyaǂyGQoْnz:$pAJF)R (p/آ"^ ` !"  5-i6G! ɦ0<2 ͛az|Xѣw8z(͛W>c deeaUvR={6v܉{9 7j@ΝҴWO'>7x|7 X0.=7&Dgϛ#Gg#Tn4}$x&T(V d*m͜G ֮-B^6[iY2rd8ڵY1{=6o.L̛g $66Xn]%mf-[}{; !:ȌWȐ!Od'~V dȐ dӱ,F򪼿pG~72qD"HӦMIjj*8Vοf矵r!uƍ糲ƒgy]vrqxbhj-?P>Uh5j1aذK8wΎk&Ԕ-AnnH7wK>?%1n\ZT!9//Mz_4(#Gѻyn|qZݭqL[>;㥗a웵ӧhXLڷ?S:3WߺilU"]4#rrjyht#'ǁL:v]8uʊwϗع/ڱzuSdeř3m1sfG2`mZUFgdd !!cƌ?^+agoߎx4lذE08_M ~cp9ٳ0(m*t^6l%%%^ky?A >0nlkзoiռypH黖ٳźuE8u EJJP̚u^{/2%`u hX\'n-W_j-5`7¦M-#m[Kʕ_VRg#ѡU+zH; ] ysn77?v;Mz4na^#/ڼJwaAoy>HMMŮ]P=M&6oތ#G֢څ771Addd"޽{W*ꔗWɞ_Zw ƿs/\=^v_:DbźuE3&f "$-HMmCk_@X0SF!99 WءofDpm6 ˁc,neK܉)Sd \J;v Fz . 9طτ,23m A.,7bpܐ!B\@h gUA(,xѣ{ݻwڵkuM6l6c„ (;uNL ۷Vi׮]h۶0g*Ș<͑;YzJ zTDN[w͚!3ӊC޿t%nSxz^MSK`,[D0=u8r Œ%ФIik8'ljO?m1B(1[o5DӦ{Lé cD`\:dFǎ( 8̴"99 EQ f+n4ucCfL3glxHLYe+eN;↜cʔ);v,._{5/@߾}ѤI:TZ30U2sXb!^qZZյts/]^zyuoPB7W_ g8y҂. (**5_  >^{U .N}bq=#ݻcҤ(vC$&'OZt f ..+Vx~pF}~CYyA"г98;vܹ3Ѹp֭U8tȌz2ШQZΝԯ@NNiM05*V̛w ZeeLLG޽uT*[xW9ˁٳgױʚ0O"ILL׽ZҥKr ZQhР]u͏ m"Ր;o,ׅ=^tSOEbЋCwcǎ`֬{%޽|˗b(DE1d+ Ggر6غ%bbˁ-my̟_mZckE>jeX9sҥ Uc(J<^_ϛLLL ^-p* ؋2}ts88}{1=q+trD/ ?խ"6l(ZW]pZU@f,dtV>V8#JZ[2}7RIzM+oʕٳg]TW=>3ͰYfd֬YUȐ!wպuubرcI=uT |r7 P04(Æ1\xD+KTԝ;F{,k]uAZy[ "55Uo RW#F޽{q ѣܐOƳ>c"))ܗ%11KZV޽C ֵcZjW:"nZ% ѣ^M*sZJީ3 LY4|tgXbCs{HOOСCѾ}{̝;'NDxx86oތ3fiӦXRfptp {ar~yKp)f|T|ҐeXa;AqЭ[7_6AL v; Pky3]/..yyy8H ЫR(Pnb ++ڃXZF4o5,W*cvQְxVE~VX{U( iii?~8q Vky3]{ŋ}=xH |-6VW 222+.ڂoj[*p8n:DDDO>վ˰^ ܌Źs}=xH ].WFi:h׮2|5 ϥL޽aXpr?8k֬ȑ#P(ݧ*x!/..YYYվE<kv]2!O^|O[uKwr??x rrr0~]ئM;wʑ) ` ]J#z=~|f𘔑߿?mVk֬ALL k|-oi6FJ^%Q\ ^jw!Cø~vÁ^0n9~3gjt]GJ^%L[#}Lh4*$8wAA&ؾi&ո˽aÆ *AJ^Ƶ@hӦ M "/XCd8߈Q/\t -[[O"CE||<^|EaΜ9֠ȥKмysePD(W5>DGGc߾}bKT)yAzHHdYBN&R5t)l+L&^JGSJ۷oM!~:))yA N@QJZ?06o|ׯ}5̘1 4@TTׯH̘1ׯ_z|)yAztt4ŖPTNZ52d8pW˚UVuHMMŸqqFlڴ SLڵkѶm[Q{ | )yAF:u/.]@T-#.w1b￯kn̟?O<F/bѢE:l(< ^gϢ{xGlٲ:H Ѓ %RBpAKl)v{}7IDATOtt4zUÇ{g| BCCճyfL2SNŏ?X)yA:0jm.\|tMl)_3bݻ0qDڵ ?#̙jX'|d=ZH inm<a(Aߡ{ѣ!ɰbŊ:9 5k`}N𷡗y]"ɰzj4i#FD&H еZ-L&2|HHH(ێ@񎨨($''c͚5~]v7o!pni4lڴ 'MV xA@&N;wDrrR(I0f8qgΜs^zcǎ/WG CaҥXfM@GFF@l>a00dP(`РA ÷~[+s85jZ-VZ(,qb0 /hC^[O?!:::t[ " 0qD,[VϞ=Ǐƍq}9q!0/{ǖIb Dm}v 0~JA׌ӧׯy֬YK⣏>GVVLcԩU:1yt SLᨶFD*^І5ne͚5@ŖBAhp1}t>|Xł#G"&&}YrҾ2 _}{yϟIVV[n|w5j J : 2HII3fҥKX~=ZmlP\Yڷosb8}xA@V٩ ݋?O>R(> ^3Xk4߿}駟zXަE4inWWmJ2݉? ҥR(>vÇGΝ1mڴ*?ԩS'NzxJJc^_I&gΜΝ;1{lڵJ)/jeW_xw'裏O>Oum@n ZUmFMj%K~3fR(> vx嗑;vÇ-Z`Æ P(պVu{U,Xf͚a„ : /hCW*lb,X/ G]IJJ Çop`ɒ%իbcc{nU:uj^5kVH e2Y sEƍsω-z²,6l؀'NDv0x`4lsŔ)S?ycǎOc5H b B) Qٹs'~G[AAAbˡ0nF6WiK#x`F^oa0 d e!.9+P!n!@߿x>c7kSQPP~'Gw'*LS>i2a88NL<G3=лooA+m-* AYtts۶M_ V=\ `(d{ڵk6lv؁}V g>v† S(ezi׮ك#G`kאyk@*^O8˗/btԩ뇈G}˗Zɓ`<#(((jΝ;_~JEMt\B% 88X[n8q;w7|l :|Zh!< ŧW(t;v[F0ͷmc`? BBf͚A 7nظq#T*^ʕ+1m4rrj *ʣ 6`ر|eHKK+0BF$pbYYY8s L&4 FUV!11QA,]lӦMl2juիW'޽9)77QQQ`ҥؼy3^z%<±/=Zo 8q˗//K\.!d`Yr C6m0bt ;w(T .nïVXOzxx8>d^_~%v ł㭷Bnn.\˅'|?<ڶm0:t_իWcw\x1be՘9s&fΜ) E+VŖAcL&m޽{!V ~i4o<ٳj8z(իՊpbhժ _ylݺq~ݎ ( K9Bakx|F#x9Yf8q]$22RX( %%SNEddGIVpԩێ-餫Q(J#/iCJC*dV^jk6hjBP(T7P(@F*^І.ZBPT XGP(D*^І녈s B LmR@P(#/.HP(#/hC7  [BPDD*^І^RReTle)o MhZU NUUt/6|DEE-BP(""/hCZ{HP(#/hC7tA B p>˽.X,Q(eYf-ŧ ? OH 9nJ[JT*deeAPf?hDII l6l6, l6f3JJJ`X`4a4aZp8`t:Nv גdP*PT \.JNZJZFhh(j5BBB jG"<<Z ܕbqqqP*`w@9Nd2`0bVVfYHsݎL&s-3rne, X\.RZRNJBHHj5t:áhDDD $$QQQw\=JP`ZdNrfVyyy(**hl`@qq1, , N'l6\.8-me2  2 r\Hc> 988aaah4Xh 22:cGrACף(,,ҟmaZt:r<Χ; FFZFN/NCHHBCCV'! /2rkn݊%KgϞ Zh!!((ƒR B!RL&~LGq8NnvCxXxs...^Gaa!f3L&JJJBh!hB($$DxX}"˅5xq:ImII V+l6V+ V+JJJ`6c d2Ab@P@{Axx8t:PxڴZ0CTBT P( ˅tә/D=h4 V+v;L&`efnC >ʋJ/r9Xҙ#e+enrp8 (kpzA(F#r9"""Jo!!!tVV+T؂h<̎'f^/F>L&>Fz!??_EEE0Bh4 S@B"44~ o>/ )%t:J^*cf٣?(**JVʆ0 |Mwz4."ps"?|?>#""􍌌DDDPa r2 *JϷ=_?|j ?{3k2PPP 4\ AhhkY>zU@/4o߾Y|9!^z -[$ڵ#| ByDEEܹs ӧOǍ7yf3gY ͆O>iii»^li>!K,u됝]v_||CK.ؼy3A]={[0i$s`4_8tȑ#" n.]ئP(0x`X,={>}:@׮]aZŐ+:vW\ؖL\\.a` (+q >QQQԩS; 06:t(d2222uVM6EDDмys8e}˗e˖H_89990hԨ E0a$[oM l2 0 4@JJ 3r-gF˖- ^ڵk1l0SNŁ0k,$$$ --MlI>Ghh(r9pe :tҥ j>ɓa6QXXBx|P(v 'm۶8pH_Hɓ'#::ϟlƹsw (Vŕ+W`475k&4瞃ddeJhZ>}7n-[&z@A,q^VEJJ ڵkJEaĉwO!M/~{ƍm]{DzvZt]lY> ?ǻaÆ4U“O>uAѠ]vطoЛH{ III刍<1c@V#22Rli>ŋ&Lt0`ز|ab ̛7͚5:uIQQ*iӦXbϟ/*dΜ9tdffm۶5 LX"9~z۷J|Zh!,AmO?c=_|K@x 5t BP$P( EPCP( EPCPۍ_s1K.8p&}_5&BBQ ^|EݻXO<Jͼ[nɁL&C k.s裏oO?ѣ[Ɯ9shn;'xrJ5k0atNªU0j(̙3$ j_#GP(h BY;;w/rssqiX,<0 wyׯ_qenK\o&Μ91c#e2nܸL={ҥKxWvZܹYYYJƍ<-[ d2vٳ B=vZa?B˲t݈bo E<`0β,fϞ֭[y~:͛7#..믿"##\t ۶mƍe0 ] rme@bb"BBB0`ϸx"ZjYf?Bh8駟FvЩSH R)gzŘFEBIhl @!3GN!:!B PB!*@N!:!B PB!*@N!:!B PB!*@N!:!B PB!*@N!:!B PB!*@N!:!B PB!*@N!:!B PB!*@N!:!B PB!*@N!:!B PB!*@N!ċ ` Ļ(""B~?xv   vxxt:jtbbd2t")) qj#phiiAccCaD"e{m/osa㊼-f3, v],`ۑәpǑƈ~xwkaڴixW0 f3ӕh4h4"99YL&XVz% t:#t(Bp8h4  eùhllF}}="z=ӕ]XŢ/^8h9_:9lRv#  "r!v)&Ess3~?z=l6222 ݮexǃf455^ٯ~?}b --M Lá'h4*A2D0R knnV*c>/!?[ZZԄH$ͦN'NRm/R~y?r (3GY׋r0 RKF˚C1bh`i6A)SJAفBB3_"Fڶ /[]rkKn&''#---&P A@~~~L uh.K9\.%pZZZE(Rz ۶r/ܪ+ nNS -0͆r%*׫4B>˕2b)v<σ|r˫m@U9ĜN'RSSjU*f9[poL&pԱreE}: *ʕo}Bؾ2#ok!W PlJ7##C@((((8v؀=/ UlrMKKKL%W>y{j!o'xwy' /2ǃfYnANNN-zZq.Qt: %%yyyg"x B!p %_r199`7t, ~鄮m<n|W`0 ###ERDQDmm$SRRyer$iV>/ ( aʕ[|3dEQx饗D]BJ-Y@7.!8RKh:m6^oA!$Ԓ=%!YV뀟R+VC۩h[N"oDɂhn2TB!ԒtP(bB#dbǻBH-Y@A!Ԓt\@!Ԓt7!jMhTŇH!Ԓt@ӃBƩ% 4jB?d]#ǻBH-Y@WK7 !SKh:9C4w1!đZ@Ӂ0*>DB!,t, A] B!q,tt:U|BO-Y@g&aK!d`% 4BM-Y@'BBӁ.B!gF-Y@WKW !QKPC$jMz4Nw1!đZ@ӁNE߿\pX"!SKp.@omܸW\q K,QWxg0vX,^W!oߎ̝;ҵUB!Ԓ > |AL2Æ _L8p뭷?) ,I&a̙`4aqo9l6-BԒ CMM n6[dطoW\qVZ*>|~WƜ9s|>XV AN< QTUE c HM/a8,~_UWٔ2n@^ٽnJdfr(,w; [p,YbΝA ?5#qyF/a Ɔ4¡^sc.ЄE,hnp a=VÆI׿pڴɏm6oEyyapB>L飒Coš5N̘aB4*^zɅ3M(.6؀؀w7I9Żz-6͈,Tt=pXO .]yp60D@J HDDl"7ykuZ7f2!)Ş=< $|s"pXѱ-u[QTǯ݄ r^t k{jǎ N5JȚ|QmR#r س''/ ;;}' /!~\rOFQT PWEYYnc HK^xt_x_$~!D]$͞Cy`&{Uc ":Ml' &M2qoAUUɓhhPUoz R^uazuWAv HIaH3׹\ 8|.@eˬX23L ?2B=QPG($bT 6 ARfdp8֮lX%%|7GtYn.tl 1B_Eq " qcy99zL,fܒmۂS?TKڞQBzq Z;Ə7-X2 UUX, ,8{&$ hz뻼.kYC`P@~~k.+C0(b,~{x\3VHBay~wxXaөo{éE ;[I(B"y$ wN@}{^jSO`b **>\(^݃_ 0f"1$KJxrKL'OFP^v̞m^t8ڵn+;ZF# /4,00 @$")5}%{QSE$-mn21ñcL`]w%*~df3wٺ(X&^T!,H$ F$''w|L>@N| UUNp`0^kdž ~l6%|f6>{C8r$>hTDmmÆ.

pXZjeqƘQu劢2ɓEl!mׂ=0q+Wڑ;px!CWOYH4n.ŋ-Wj@aeea}z55Eē'" (}Akŕ+O7A]~?QQEĿE3wYm H׏okRO>,tS/Y'^w];n; / zLuuXZw =3*Cy9/|!1^,'$fA"`DQdS?Ɵ'lٲ%E@ֺn(䑓!+mG鵡}.<_. DN!/#.Q速$w0RweV N```00͕FB!Q F駯vHMᢋﳬ #A'"`e.2cvtu 4 Ş#_]hhh=|u6pPF#(,bapyFRٸN>/;DO0hdN:̚ſ;~mŞz,1 ! A6u9ϋppt`eYt>5U^qᰈ=;~HoQ~w8לoBnМii:h_Ƽ<8]y~mi8,vya"2~CxW==]sՂ(2Jmq!fZreNWH4fD""v!sOw,Tn,0c֬փkCC0NL8˭8i8K]Ī|;۷8\pPHi55QRf[Q &M&+Vc<#Jẘa($]ӵfh3ۇW^yuipXbKyǃ&!4_~A0 N4Ŗ-A hd0sfl!q_h@ "%9:ģ"pXUU>D"!HpXT}%z麘R+Acx b^e\xal~GH=s)ǧRҥXίb8jOTLLTUE+eN' Z>^rC[ou<{yP]H y,?b_Vc~^edpߟHDDMMDP$r/C4*UsJl"nKg6\nm[_BA'^1 fN:/. !8QShvfP(#&-SSh62?!SSh6[ZZT3;!QSh6=jjeBGMY@BH) 4ҽ%iС~}̘aZ[k~PHIJoxZÆ91q' Iua1۶yqdII,9GVmxOp$ D 0X,^P$B!jfc1jK~^Ѩf& S};rEAccF>^| t͸teymm^0 ^}5CzZ44HeZϳxUSF]]6iil6:=V% 4prEgpÕeal1 IDATAV-r< ztX;o0(hFD$t Z@a`PEc^wPUcV/31ujAz& E )S,1ppL 230;|x^ j]g83fEVV0z`P1;l`P!)9wQYdba1B i[s=9pXږsq=JkTfnga?ee[_gVB!&TI+(0;JBcD1&L?YfuN4*Bc 0YlƆm}}ӄ Æu'Xn@R%3RK lܹv P]s"^"@vG9lB"|>&ņmIIs-x^D8,ngsc?P>/5;} +e5 'xGNN Anp1a [?x^:-]Ӱ}?_Ƞ;?_p6De(\QlL>ė_z Izp=R.WVhTTXRקva&L&i{1wnpXđ#ABѶ՜hQ^ܴmo7.`P:\sM2=8׿Zpmᆙ=fAlO8=fϞ:uuaXq=6"k |f0rp8~GJw1 \|E]oF4 ,^zV~Q0O碲[ ²eGd'ZĞMNaܸJRf\~Qǚ5L}xS;< v3ǎ8qGN'?I~cK/{qˊ[pڵ+#dHM$ v,!7 J1~><o̙Vc-ࡇuוc,^@YYO>Y9Ҁ?w`2x&\talZu\X*Veļ} /gAcc~ {q` b0=,qPyJqx1V>YYֆ1l?M#6ҡF7X0 `ժ 5{a۶"՜wR[7pBHW\q/_'O";~B$q\q].oSO*]:=v RrKnb&F2KHK "f϶W0jG0u)SzlAFg nwQ Ol{5]رf<_?o5{4`$3> @ꪞ2ł/pc4+RR8)7"HM!''tڵسG::s #\s5`(8p87Ĺ M=eA"ldB(r[KD0 .xسǏGSn:/N^P]v{aXā3˽*+y\}u2*Wq F0 0sf F2"=oՒ%<`5z ^hSʜW;qN~3B!i]CCF*SAħCYSεcD""QMrJKKQ]] Q˰`YӦM_24D-Y?6y_TwpaFTTVUӐcP.BҥG JQdH,^|PVl)V^^|1/|lfYXL(\,Yҥ8yRm8t(ڇٳ(,4b'됝mܹv9ªUHNރ/'gӦMpZ,#}L}ųx Y=eA"l ]w͒aǎ?śo9ðXX̞mů~5 t}SOhd rVyYP\lFRo5wu۷qGvw5γ`$KwUNLٽ¨1eFqٸ? Ha۶m={6ك'ƹ -gCf[>_-(0ehwD@FOաSLQ&BTZcǎPΙdP~S brK&LMW%99iii(--KԔ táha20j(om@NNQ/^XXw]cǎ ^IjzFF] BΈ#G찬m{~~>Q,B@n6Usބhױc0|pͱrw80ͨ2) 4VU5:~xAff&t'5eft" !Ļ([UUrrr:]~\TTT FIj:qZhiiyeBN]D( HMY@э.!"***׫h;!PKh:t= y#F8u* HjMfSŇH٫ Хk,tiR~=o]&K-Y@OOOẄ́D{ dggh4ȑ#gX$d]MShntyeXEAA=:#$a% 4ɪThp9tѣQVVvFHBQKh:t=^V]^XXH-tBQKh: BPAH477#%%e N}>rH8q 0ԒtɤhSw- <*++fI(jMfSť D|>_ׁ.s9PRRrVFH"QKh:ЍF#xw12=//F>#$a% 4!ǻ:лht:HwBPKh: *>DM^6e @;6zh͢PԒt b/z'SƏbpԒt&D<:]2l- &MMMgx$ d]!ƻY8tyw]HԒtD] BL겵Zcƌ`޽{ZI$jMzWo2ɭ :]Lq1~x۷ﬕD,|wu#d([f,vzٚlر4 !% 4j6577>>f\Ԓttmq(w;v,UqhBΔZ@ӁF$A\.]|zW-y;G'D=Y a x>kiiЋ..Σbo9;$$% 4<ϫC$r./]t?~<]Nԓ (bÆ {qĉe>}:x㍘׭[UUU/ty!CYKK <Ӡ8@:~СR>BZ o… [oaعs`0СCQ^^~E᭷{SˇHt9A׳Io>ULAșPK$;8u{=|WByy9~`߾}HJJBrr2~⥗^®]q>l߾YYYl2̜9S}ƍAVV\@ee%'| &Č 0B8MMMHIIvn)))ϧDL&.a8 >,DQwԩSok֬O?nǽ 'd(kllDZZZBɓ'ӵD3|۟?PɂD0cx!>c3Nkz(fիW+ċ/e~zĬzѨю.Af~qW_Ȣ2du5FJ΂D0>c b͸+ÇGMM tbŘ;w.̙|嗸+:p8}rDQDCCCZuҥkhnn@Z% & -- W_}u˳+6 ˖-r}χ-#!gC(Bzzz4F9s X I$jɂ9~6 іz豅2l]GN[MSKh:n*>D-aÆu^o QVV6`#$Ѩ% 4j8oBEzcݮA=g\.BZ@Ӂޛ„ 5`YljeVQQuMSKh:~?MJΩSNz zl 9wˁPKh:н^/MJNMMMF}ԨQF8~Ĥ,tfLB:л.ѣG@% 4<#hK[轘F%jzCCv; CBHTWW#;;WNC^^Љ&) 4n[smF8uT]sPXXH-tIjZ.S r)DQ1b@wȑ4(h@8q׫{3(رc.!JMY@KD@|\.l$"5efbĻɉ'p8_nn.b3_Gy<s2PԔ f8x>9qDErrr.[{7x#<+!,,l{<՜7!q19W9dffeY9rFիuEQ9tN ԜI?0&O_cB.\r%O~w 5e ۰gϞ*BMmyǎCQQYyÇH`ƍ{Cmm-3~ B`]E]K.USL{5@ 0LJЧ.L.3l0x>V_~π1c0o!d) 5EQZx_|-[6i޶t >1czC'9k7oތ9se[_}bΜ9|qҞ`PżyFSO!⦛nۈWAڄÉ'0nܸ^?FDߺ[VWWc}.c Ν;?2L2F_}N!d ) 㢋.]w݅g}&M»z8VMÇ!"ƎЧ.L-Zc݈D"1cFe0:u*m֯!d ) -П}Y\wu؈Ǐcڵb D* uʈɷ6-((c:(n`0{Ν;a4r:9s&oޯ!d ) -W^FYF7w޼yصk݋kVQHb| eGARRAVVVgo0iҤF]uϜ96w}=hhhkH~yŖٔ)SƑSS j7 6oެ\~lܸ&M̢[념x*))9ӧ@e<JJJ: rR Á}hjɂA flܸ ,˲`YGFJJ x, ! OkO]vAEL>= ] xe8p@_ҹA7rHlٲH۶m &Ѣ:444`~}mykڶmېa~wی;~m_ҹC8]t̙  mYB>_Oҵ'O| Nhz ƎC .,re`tt ! СC8Omi_O۳gO`#}z-B  .L,[yy9{;UVV18vX={JJJ8B`P=?DSSSL]ވvbtf!v1= c Y:]U`0Is5e Tn’<+z^w0CM2neee3gN}-LF1_5=u:F>.eD IDAT,@ݻi&\.ٳ޽{qyaժUQjD"(--ŭڧNk2e̙3ZPXXا!MMY0hM8Nyyy8L'N C[ٽyڵ ZغukK@PS ڠH$ ۇzNFB,@$??Gպ{A0w  45erS|Xf`tV>/e '8N[rs9%%%}۶m0pKկrԔǏGKK ,Y7|3f@ nOHo 6q]n00|>LG@RS _d2C$t)>ޘ>}:v:~),XsLrrrPUUկrrԔt $wCw6[OD]0c =z.qeu<9?|^ #lPSh6-j>DNrw2ٳg@|2鱷 33555(%!gNMY@Z.!]fcϴ=''Fºu:][o/FZZZ0=we%L) 4jSEE>.w+Guqž}_bŊ*Co[轙Ȇ,tCNUUUu}u&סˮj/?,]`F7{W"jZI$) 4NS}+!CvH)S෿r7:^^כ^y:NAMY03 ZdHqyW"BF>.mf,\7x#f̘|ӦMʛV%آ2,˰a0A`ذaF%Ԕ táفa"++_g3)0L"~8ƹ/ok׮ŢE/D"D Bu/E8F%z]-tq$.Ԕ tbҩjدk ÚXrV\ ETP$EMY@OMMC(hwq!Osh,۫00deH\) 4;(NCөr.T whHMMEccYBSSh6u؞ɓ'az*>sgz={odgg=Iܨ% 4jKuu5uy`aĈC- x7i&R=~j͞Cd455ŻtP[[A3T8pVWvލ *DŽ%KL&S\E>d[jHԥN>;^DQ@OKKek`^{-F|X~=뮸 d]M u . ?jkkD{qq;(gtJ @h !4* (\AQğⵠb*" )R" =B $m~,3dI!e3=gi3g3U FGaɒ%8w/6|X]L."++ M4 BNNO+Ē%K0ydt`uZ"""m"h_ VƆ0+PB0 {&w;\W{"##=; 9^{5lذAX]PbfcCׯZ-z)QLBJJJp8«.:O͛7UVѣzSLBU|nwE ZWdggcȐ!믿۷cРA(..4 kNkڴ)hƵk| 0زe F5^.xGrJ2$bĢ~-AAAxox`ٰw^߿2 =21h hZlݺէ|X]Ӊ&lyw.Gy'NK/Dx ^e"""|COLLDnݠRmw/S(6lt#-kAW*X,|!jg[i;/V, *í[@Q'/|*$<<7oiB>}m{dbԨQ8z(/ X],!ҥKѤI;@M4o8<_f lB*33gff!q5\v ^ȑ#0 vE,Zׂ.VP1L1m4d2Ϝ~ѬY3LQXX`Hk,-[`cǎzz7F.]gF-bt\ʷe֭(**Œ3mU*xyf2`};!H+W|^rr2ylo>*CE Z**7nD׮]Ѷm[ >hٲ%>C_'X x[\|';v ݻw/ɀĵk| h_ L&-1ضmƍ籽R&aXnRSS}e BӦM6|@pp0z==-ap1;*EQ믿>o4 ŷdΝ0*wӧOG˖-{Dϻw T_AQڵk/{Z׮]C^^^ł^I3((;wFBBBG-btzb۶mС -:_~8tPEhtD0 vލCwg%O?4֧Ɵ=** .\tRRRf͚Wrx?^nB wӧQFw/wJo&֮]듡Wa4aXlDEE!''W_9sw_eFgn'O7G,Zׂk_¶m۠jWwӦMCƍG՗֭[ƗkY:t8w\sYtԩ}UԢVqԩ2b }O`ӦM/(([oyUڪ?wrN'$mwoߎ!C@.Wa-R_~Wy8MqT8oE!--p:pk|D"ALL t!-74h O?_PPݻǙ3gЧOz聐cǎ5kt4jr!77\Mu݉Ξ=AAA~7իVZj+T*jժ^իX,Ё`tM#h`ncѢE8pN< ˗/c6l؀8\|v¬YSO!??OɓtRܸqHIIm!aa4E>o0 \1jxWrJdddxDAZ Zͷ) AFGG;Xh߾}\/66Ν#~L&  ѴiSF.]P\\?`޼yT*ŠAPXX3GpnL&n'ٳʵZ-^|E,_ׯ_5NNN5jķ#)|,p z~jj*:vXv>%%śfx2^jrҥK;v,-ZN?/^Zŋa۱pBߺu .]͛7KfA.cƌ0 V ׯ_Grr2FQq5HΝ F>5n޼n_a-Pϙ3gйsZ͛Ao|Ç9-hVǍRbԨQXf ƌرcd2.\aÆiӦ0?VMhԨڴiPlri8d2d2h4h4Fk.4|cj:saҥϯիGeȽSNH$HNNm6Ξ=[8ԩS l=_R8-hNáCpQtգtA30|pF .wƏ?V ͆Bc6M7Q(ر={Ssbx_xBaa :O޳ eiXjj*v;tRDGGcΝ^7bw/;>>ʡf͚]͛HIIMЧOreEX,޽#G0|,Yg5FQ0k@׮]&%%{ 2Px@Ђ^[5j^{ ۷oɓ'+HٽDbb"JKK+]^W͛;r}!R*&&gΜuЦM*WTg@֭aXpMoG h(X,(JG^XuPu'Voc8|p!tw`V%..&O\r111ذaC#>>o3<`ի?^9r*Z4;uD&5|Ģ~-B UPIHH@\\\,Շ;ݻ#99{Ƅ ЫW/,_^MZ8ur=znpԩ:O;rw^rgAoE aAMa۷&M9QFؼy3O|駘1cfΜ8w}h׮5kr@„8q6 {ՎPI|.]޽;f3Ξ=[ !!SN+ 4mڔzGLZෂn2`E1qjS? !Cڵkؽ{7<4lݺ厗dhԨ4iƍCAnбcGh=)zTZ ŋ]-? @VbDFFAoI V juZ*f߾}(3w-Z̙31sLnfC~~>󑗗\֭[FVV6n܈?мys 2ǏLj#ͭ1x`Ao8?..s=Wk$$$jd^ɤoAAA|ѠIHH@ΝkOwrM6EӦM<Ν;{nX-[ܹs1gz*((Czބ ү_?lܸ崺ˎLk&<<+!&-Iqb'^·;0tP,ZgΜ^Ctt4֭[a]vraԨQ^3K||<222SkZNk\/"" reol6CRmF%//iiiZ[݉YɈŤI{mf͚yZ ;9998<_sj\Yf0L())ma &- NMw'Z:v~ k׮Ů][6m„ hwB=""!!!޷oT{BPzRڎGLZׂ.g|-ZpkqfNו'"997F߾}/:7nhēO>e ֆ.]Ԫk.t >&4iʪma &-[AZ|pȑjž݉z8p&LɓX; 8-['+߳Yz쉿yw^<5:&N[\zzz 1i hw3'6 Ǐ#!J?yxtVDKle,wӧk4==8p`ӫnCFR!<8vbcck`E *cܸqسgЯ_ ]ɓ1x`YCs_>}T;lzVid^vp…ZC1ifAŞnH8qFˀp9P`.RzBEU7MѠ( J|0 .D=]tiӦ!((6m /VZof.  Tͦåyאp^%')<)ΞowC޽{cX,tAXV >ViդQy'Ĥ~+թ1LHKKd.PJ`1`r<Ď2 ѪWVŠݶyy>ӆ|s>Ak pB[5nj}3mce<] %]w ~PfYn[Ek+MϗvNm۶YfԩSҪr(poĤ~+bzoKRRRrWiFˠV͖ʾYb+eTeg+PHPTK@ ୷_Ʉ8tA0 qw9UZݧ 66ZR-[0v؃뜳 IDATZsMk;􆇘oT43}ɩS Hj)]bGS4@+2ieG"mP%ƍǣe5k+o#pc޽x+=.)) W^?\j2]բqƸtR#@MoX,^/$''#**J4CTނ -DlJYn1`ZCSt&nFEENbtT8Brr2:w̷ y`2pĉ \.Y&LS|.׋FZZZ#ojU+Ajj* `+C_gϞ :t2eJҩ}СΟ?_mO &-[AF_qMb\<&fR) ͚5û7:bT{ lĤ~[l: #)))@z0 tCѣnٰ~zbȑH$}ƍ(((p;P!f͚! kbt-4RSSѡCo@ޟ05 ˗/1 ?CRM)BΝqM-b+j'.\@tt4fӧĉ8|0N>]P{ӧO{%}oK$\QPHOOG۶m6CѣG#&& +`ԨQuZ{~75v튴4 @Ĥ~+4M%&5h߾=ߦ2)η4/hѢxb]6ݻrɓ^PI ıd2vh0n-Wiln^ViQ؈rRZZq dsF;mۆYgADl{7մީS'h4߸kt.?ĤD "%%Eq BB籽:-(sv('% s/en@8]wzXވ2gqX jV=JRw#o]PjmFԩSh۶-t:ݽCB!@yf&B2gwasb\@rgK"͎2rQ\ZMիVXa[ I Ve2f4˷ !ʜiMU[Å/e_~qeiƋ 1iSa)))C^Iϳr8dؽ &-[A墹͍7PPPM!(woѾ}{n}>0L|Bb}:u:JKK6Ap9Ý@T |Bb}:j5iAWQFa|AQztaaaؿ?ߦoz\z#ldjdJ)$2a-q9\X9[mFL&XKX:a7a78`7a-nVj  v90ێ@()HHRHR2R-2;djzj)z9$ Or*HNe 0pRdd>|l%d;،688,k6{dq2`\ \Nႇ:Ih ZFҐ%d%k*y.UAJT2(P( v:T Vyuyͮ/. 6 3V Ͱ0嚸g˱` K{9..;_JBLZJ{|.׺*[42˴T)u!jur?֬Yׯ{-ꀥm.4Cb+Ly& ̰l0a-Sϰpiwz;Yn'l%T_VڝrաwXƝzE3 bo]h4ғ^}@[T!*HD$2 (%5`U,d:isVjUn\w\eHRHURΦb+SˠCs+UJ=f:Vܝv:ﶀv(q7nrG\ʽ4nZ9TA*.Z9 o߶vÂ$v~gg86骠$G.ܮo\#]FTJ\Hh.i 7m;q9\p9]\m eʊ-#0+JQ pWr-rN9QJ!S*﫸ͬ8mY`7ØkIe2k 2(t NlZp&UHrwޖW.oe?N~<Z`36NG9|;U\y($!Uş"EUXpx6=vN)uve2BT\CPF`@r5RhA`d Zi فo@”gwhU 򑛚 n4;8 a;-yaEa'C@6M݄Gn3Mqy7P5!$*m>B^ᮏr!WAzN Ā RjE]<p5-:a.0(ȣwVVlq*uiMݩ o@% wem EAJwv_W@zf0 :yv85l۶ 7yNvN+mq [8=iufq+X];d{l(6Z9wAGەk:Uȅ9PRl˲\޳[Za+uosX(,q.v{{ [i(mDʵr*D.Zwk@G- Φwڜ[ kb-=Sn@M# l1PzRk(;Ҡ)n䳣4rFT1 Ȏ2@ ZZQ _@nMw9\*Ziփ[W\# /\|puUH<)\sR+k~ֹ(Zv])B։,mc+C9[)ek~+{}3=|#Xw -@Ԙ$n䟓1bdѢo 4֔k JRRs7n(w~;)NTl6@?ɓlo;Jl%0Q@|W5&tNfa ;ŝpd%PQsGNpuM+py& 312QՏBKhK;/ak((L-CxpL5?߼GU%RLZׂ.gѽ{w pf 0\aиsc_+F-q|GREW a6Il o$I8#NnU4kՁƕWPx`/N޿.2c h):k|5RקV{Ĥ~+z^4 k׮#fضmo60 |dgg{m@b7=?Mvu Cbt C>Gu+~EufWpB3wy|s_+Ʊ%Up'<Ԑ }1+i'nj%V\z)R.EW<&.0~>ŰYq+2g"u}R0m9|0J%DZ=y",,'iZ gφZԩSѻwo4#G`ҥXf V\QFM6-s:Z hK;/Zh;-»zYZ^ő?/Pz~ !j0 A4W&-:7L%CHYu C hܥ1jC(^# 02mWVTZ)fvM,?0mA df1o3999D"azOp0g0SNea(8&''=z4C4?x-?_sj)'jt7sa9 tq3+=RlaV [|1o:jebGcr999 0 7nٳg*͂^F^r-' \.Ν;- ͆c۶mO/s)6 y<44raΜ9yfNFi5TĢ~-rUŗ_~XՋoSEܽ#<={bժߏYfMVfQJ%-[cǎ?qz h_ BMgϞŎ;K/UBrh? .O>ؤ$<0`,YR{P:~۫pX]V⽉7Xh6mI&m APȐo `sQ <mڴ LVj;pBDFF'j5 bt\·+V_&BQdݛ,XG#<~[͆EGTT:5rgQTXz5RRR0o޼ZK$Q*ZhoSн M_cڴiܹ3Ff͚W_3<}IYj[nXd bٲeuCE |'2 vo3xeǎ߱n:( !'D!'Cz~`Pm蛦hP %Ev`RZZ 80 0p1.0 gW}OL_"//3f'y(vTlhn;EQ9m;52sL?~>,7o.Jbtr67 1sL :x# %FNv<Ŏ2 ѪWQV<"ߜ eR!fVH5ZR,tܽE\+NܶKB2IWq~al߾uX_ \.L>F˖-#3 $P@e $תw[Uϖ+-=߻gvW6{ W9'z0A(۸`GHټ R)]^._رc1bO8q-h_ PF_obؼy37oη97h$5iqy7\}S*ؼy3f̘I&X`(^ՉE zR?0 |M|GO1zhM"x흉b/J%V^?}믿rpyQ _7D/襥x0h ݻc8QF_X/Y\\ `8x`0RJJJ0qD|W^yoAٓ(8qcy6mͷ5F,Z xAGpB4ٳgcڵ <[0x`NG?RO?46nqDºu]v_%bN HFzէs?qqL2ɸqx -;$\r& v޽;`ŋl2?* 3g… 1fl6fٳ'E*boMN'c,_/_ѣ_M6|G  vD2'ݺuCn6Zr(" V^ddVZn©Sa(J}݇B\gφT*T*EvT*=ZM_1ydz9pBQJ\Ad6 & yyyHKKٳga0V1aZ }g ζj K.%^\v =zѷo_sRVVBCC91/))7|M6_|A?#FlP )) ˖-se80 D!Jh:`ܸqݻ7z)YB}R[+i򅄠=((Gرczj|?`20eBFFN_|:uB`` 9aÆիx\p@*Ǹqxcܹ;w.fD#@%Sm1 Q={@*V A4?>OT*$&&ĉhҤ f39s]vo-[@V#99ǎCXXV+ d24hޟAStl=_V9-hGFF")) 7np~ X`f͚!v̙3-n'ZpȽ<5iҤVF:G X@CbJEޛ?#-kAK@ G,Zׂ^TT-#"-kA/,,<?e@ jXn"@ jX|A @m=1\P@z|>$GCΧ¯=77|A fQ=$BF@ h}'&I2P4hX,M4 wCB,Zෂr`ZT*6(J9WO3IDATA&b(--EII , , L&, F#JJJ`2PZZRfl6XVvnrtriI$r(J( HR(Jt:T*(JT*@RAC@P@RqV hZjP哼( ѐ@v`0& EEE000\[,XV`0pV+N'70i4MC&iHRrT*rt:(JzT*t:AV#((z 2zL&Ü9s`6!HjOpFf999(((@ii)WF#QTTU.o% 2 2 RcrY 00j}z@yDxl8%%%(**B~~>jlʷn8l޿\S+jj* j:+l"44:z zadb.~–-[h"~-4 T*¸P(P(=J2<\D}B0 \.\.v;N'l6L&V+l6\TTBh4`0p8d :+jz=ǰE*r1ي}XHmII f3, f3a6QRR +x0LdjhԨʓMrF\.\.W&A*r3[yVͥMfVF8Nh4hZ.?27xQ*вI*i.2RQ~5l6 ce\\ZZ T`QŊ^Nlj\MP@V{[N̬emdˋ`Cii) QPP\\L&h4reWV#44LZ V VpDZ) o, )\#kF|JZ6l [qYgfqs!>lfp\ 88k0z\y/J!HT*|w޳uaf{Ϭ`@^^q)..EQ/66K{wE^v ǏTڰ~++@l2L jjEAAWq} trb{]lo!44CPXohtH9)**Ve`+,Ve{jFe600=0V`n;+n PPPU`+}Q6,;e+ARg{^eTY DHHBCC9h4\c!Fl್"fpebp[LW5z6n̰y60+jZ6jԈ+lcU0 S#7EEE\.a6ٺm`yMQ}Y̞=YgV @~=˽駟"<<N]t 3gļy_bXg|W|#(:{ }Y^!#\Ε#́6M0 8,[a׿`ڶmtܙ/x =1c~̙3n¦M0l0̝;g+CJJ , kݻ{Wo0Xh֭[˗/c׮]w}Ƿiȑ#ի6mڄ˗/sϷiaϣ=\#G`޽ꫯpq Ӊtm2 Fd¹svZ̙35l6a.XVdddxlͅD"AVV71M(/._ <# T*E U[.\-&o2zhH$$''c˖-0`Zj`uְl|A˖-C۶mp~333a4Ѽysg}'|/yGVZt)p,XƳ> h۶-),,/~g˄ǬYy!66{$T\rQQQܾ#G ++ zB9s&F#󑟟 xdp:|21m4t #Fb~yw۷cƍHLLL&^!wA<޽{`0W^|_xS\\-[?ax1rHw}h4*w:Dpp0n݊ɓ'Cyj* 2* 2 111\͛E^ poH@8o&a6'@*rɓ;q˅kעW^x1tPkDGGcȑ~[K.͛iǏ8ʕ+1c{]?Gjj_ | riK/ۣuСCi&DGG>d0 tlݺ6l͛AQedd+W^Çc߾}tڵky/d2JKK=Ν1c:wݻG N {a?3g0*[. Đ!C@.c֭h$o8(UV˗>}@R;nzY۟M jYN 쒶{Ũf2Zݵk VgB N  @D @D @D @D @D @D @D @D @D @D @D @D @D @=yM*IENDB`astrodendro-0.2.0+dfsg1.orig/docs/algorithm/min_value_final.png0000644000175000017500000010006312176652656024120 0ustar noahfxnoahfxPNG  IHDRXsBIT|d pHYsԂb IDATxwt?lVdd˝ !Mh7$w( C8|CBP.v↍-ےmYշO`YmZ|1hWGw-( !Lz@!@'B@N!0Ba:! tB!B( !PB! @'B@N!0Ba:! tB!B( !PB! @'B@N!0Ba:! tB!B( !PB! @'B@N!0Ba:! tB!B( !PB! @'B@N!0Ba:! tB! Ћ,8]JTEA$A0сp8p8`0p8@ A|>|>B!Z[[҂k`0rAzz:ӵ穵vşAdJE-/AVd,t9P?mmmhii(p8x<ڱ!##Z.] +կw絓sd]}!3ρﳲ,1--M{_bl6phzSԓP(}/~f~?K{{;8CzzU=u_|,Q_u_\kVV>#q(**Jpŗa]eTVVW^Aii֪mjj@HH---ځS}3" Iu [@mq.x333%Pl6dYFiii0Hv$];k֦8~D"*zR[aAX [Smժ' 꾾0l322 x}_ TkMPIzbv<σ.-_ՖׅT@vv6rrrtɲswI\z+, q}r᷿mJ 5q=nF-m6rss,-(ImIgee,Hun@@2HE"}.'iI/x +VЁt:.BXC׻ B!:b% {\.WJ\fqq'*Wѡ=WI*YCY!Ď,0tl6D" #VЁr .BXCe#!رtV*B+Y`@g !رtċH!$vdfbpd2B!c% V ]!tV.B+Y`@X,$I2!舕,0tsċH!$vdd2Ae #VЁn6x !Ď,0tsBVN!XC:! C: X! +Y`@gR !ذ BbJ:%Ilֻ B!:b% ,*++nŘ2e >h"9sp=nbOBp:zIB+Yo>;wO{ ݞBHjtc=Z_v-`ظq#lق<3XtimkkØ1chB!I,H@I&D"z=>/ 21TBHX&]e!---BI6dAJt*mmmHOO׻ B!:b% zA!DGd=31BHXC:+B+Y`@LBbJp(z)XXBm~X֔ !Ď,0l777#33S2!舥,0lwtt01LBHX:+ !Ď,0l2BHX:+BKY`@ga!!ر tB KY`@ge?B!c) Hv]2!舥,0ltVF!$6,eaف!Ć,0l|>f!Ć,0lafB KY`@yVU2!舥,0lŢwBtRPB1,.I3/"!ذ tAoB!$6,e2B!a) ,d2O!leE Elֻ B!:b) $1sVFE,zAHc) +bq%w[nEyy9f!$鱒tBXގo|Ô)SpmU! `@WEW_}XX2zEHRc% 1"t]lND\,?7t׿]!I,0lL&4Di&>}wujj*,Y{ٳg.R6- Aл BFqq1M@sgL߿_IN,eafy $.E~[oH>1bӱk.+$$9 tÁH$wEUUpBHP iaƌ.R6m63YY~=f3fΜ p[ݐ$ طo%Xje2 !ׯnj3p8q#ڼ$ cƌAmm-etXa͛1o<< HlEQǎӹJBKY`@zAȠ566ӦM 8)%Џ9s$v d!i'N(%t{:dYENNtR6әy߿%%%:'E|HAQHb9sFJ I>,eav]!v?^8 eee8qΕ|XeE$ƶ~L8( }ᨫӹRBKY`@gg#1.EQp!L0k.-b2!R6н^/|>e2(gϞرc@A`1[\rhllԱZBKY`@Bsse2(}2{AP8,{'OLl$9& dP@/..}I`%v񚚚HHc) N&ĸN<|l6{LqEĹs(R6n73:uʺ?I`1Y((((\,0lgdd   ] !1;s 1@g ]e>ޒ$aĈգLBKY`@X,phkkӻBbV[[bH"l2,0l[[[.ȲZt ti-IJJJpINEXC:Kijj(**1/$"Q__L B⅕,0t{<&^DbL WUK\QHG +Y`@giR~b<ϟdggw{ę]Z1b\aÆ1315г|_Q8dE}:XCab1@ %w w tKGIHVЁnevBڽGvUUU,J:- Aл Bbk6p@W#G\,0tl6&^DbL~%wYz]F-tBJ:НN'-TAR=tr)'L'LB+Y`@lL7!-eY_dE'OƹsҒr IZdl6x\AGFFFˤ9nرcZ +Y`@X,EQ20`OeYF3mn-t(//fþ}R+!Ɏ,0t_z!$U 1EQ8CWM0a% =u("$٩-t1YᶹK<$eDQ1n8\a% ,ĘZ[[S~%"FGmVʥb,:WI#j$I7nΟ?Є +Y`@$NC$;uesBct脰 lzAȀ;8N@X xyy9\.v54BXC:Lxaz9@KcE p!TJT+k?!jjj<Ѐ3gbʕ]駟駟ƙ3g>Q{CHkkkCfff-nUOÇY V ŋ[oaѢEرcfÇqĉ\s z-,\{Xy|fQYL-v" ۷ 5 V ezǖ-[PXX'N&ۇ4dff;k;wb`ժUضm q!r-8x `. hn=LBֆ^(Ŏ=tI0yda;v ƍr I @N&I˂T2-˗oܹsQZZ Be_馛xױtR̞=#F׾5|>_"^z%x<x<]ĢٽEdCD9[nWazkղ եL۷sݺu(..Faa#FN>wyU0y.Cv;"HB⧥YYY}B@&zCs8Z tłpcٲePO>d- w?]z~Kkd܌^f+I5AԩSi,:1 8￯eAK{<Z曐e1FzX=\?C׿?0LXf ˻<#-- v3b---B(bx7TBFo},Hu)gFUU6l؀%Kjq9@FFZ̟?Ñ#Gyf,YP׉9IV,,X=>}ܸqCkkka+Y29997Ç^^n^PPP j~HÆ DX 芢`ĉ:̛7oj&$)s}(r߄}^rw=CWl6RXCzGG/"1FWz( g5Y!*b.2F Ipԩ8WJHj`% 5%NQ,~/&\[V|x-t QsYQRRB-tbH,ea{zB7L}J$9ZĐX:+C~[`̐K$:Cb) L$@PTTs9'Ot}NKT4@WnKKKގAHH*a) `.K2G#WR$M^pz0ă(x饗p 7?9x&$^Xzkk+222.AIII8([!yӧOFսދz P< GIDb) >&8N<="E`7ۣjd2ٳqsÆ Xb^u|Ƈ!>S'$^Xz(Ի BK t!L s D?SbՏJ| /p8m,eA]e<#ػwo+Dai!1qI31AeXL]r$ q #G`ݺux'qsu^OAH tEQ|r|Z777Q"%p$t Fmm-dYFiiiTR6Kt-tYAēo IDATv㪫BK4;QTT _6 an6_'OĕW^wy ,@uu5^{~'7ܽ8l햖\Ʉ:sssk֬a6Ł`07nę3gB⁥,H=߱g|DKK 6n܈+e|ܽ8N< ł~qR8Nq$!// 1 aXx1DQDKi49 UW]ٌ?xP!$^Xʂ(].>Oa,,u pA3&GfGB/o۶ H̓,~_]%p\;w.:I,eABm݆c(//ǢEuKʈ1TWWK.C}梣`0׮]aÆaԨQ8vxm^=ku;j,eAB`ڵ9s&[nIx8s+%$GbQ Y3L;y|)M.36ly "8 Y:X/@@yB.R$X`$I¯kHO,l6mB*Ǐ >8Dfg':5j5B!رo9rӧOb[  } x[+Y@ommźuh"L&L&5 YYYxgY !) G:IH( 2 (.IlV(8q"80mBzЮ}eeeظq#DQ֭[!2JJJPVV2I)hjj995I0lذ:m۶ iii9r$|>VpX/|!"ƍݻwx[rb+yxb]OU$$:t0z-ȰgD3,gϞP]va>S,̙{l7NB.R)ĉZD2t !)ðX,HbA ƽ{ˤ7Lq=.I&LP(SN h[KY{e ̋Hv hhnraa!QL}}=N<3ftNR$XLf;rȀj$$Xʂ$Ix僭ĝ;w&.f33Yێ?#Gh1uhF3 ̙3|K&L^^l66i!z`) )",())AiivY'.X:+#l;v͛71َl?_Æ nlj'۷cG{{{$E,\ ǎz[KY@/--Ş={~zc޽8pKL6 >`"肥2.QQUUQ-|5u_E#B3gxq=$ #G!R$lڔ)S\Cbz$@5*qKZ=>PɲÇG=%k$Ν;/轑$ شiӀ~xb) )NE,Zo>&j=D"@H( B?SC:ݻpfk$iW7 ᅬ~8v#Z!bzG8t;r Q1vX9r$ݶmv;&N&E%%%hoovDa) NB[[z/2D(mD3f̀8)S=>/uѷn݊ӧX(0q&J V]#a) O>=;o'`ѢEnCQ8Oʲb9sfu,eMehu:hqZgFuu5Ο?sm6\wu?W[$B$ Qu#d( t̋HؤzQQр~NgŴ]EQ0sL?{>Mfr.2 pܹj%dXF0Ի BzU[[ ;efSuȣK.}Y[+xzkÆ CSSSLu2X,eaM())A%L _:>n-/7ow>?C%B䃐`) 謌=$l:s bZ xX֘Cy|hllĚ5k3f`5a7a5[nOA3 nN(F#,j|܆ hll@' R6әG4440{ىE1aX͝-v glkr,̙!gxcak^+^A})^}tL-._gBBM&XalqD,ea]!=((**iM?'x `eY ~8"go KrDa2KKAH AVdB3K_HeOZXzvv6"v҅:@MUutt+@wxq a2Zl:Z{oYV2D,ea{[Vff+SP al!ݎ,Fssn t [Ξ= -CMivvdYiMtVЁҔ-uuu1u;pcH%Ib&\ׯmߓc% {233ҢwtЀ\Bl6%Ԃ4GLC|ޯ^r?pn?{ŋc_wyОnԻyyyn{ȧde999[ øPVVڳxwf<D,0t4aK2z{^wkPW\khh(CũS|rԊxOz?ϰl2>|XHⰒt#l9wc%.8 Yb_%Zj˲!$I²e˰tR!$Z=bBͅdfKEQD ׳Z曱b Zad=33%E~?ʕ+.1зqB#!.˲.lذVf}(KxG%68d2l^2Oɓ'cɒ%h tvz2ÌŋnҙP===]8CX '.IBߺu+*++a6<\OQ\} c% pX2g]< BP@/DDJGCC8 ׋ - B .e̝;<y^$u];v $+Y`@g#D2ӟ|\}8t. O?4^}U9rDjC}}=rrr`28" <*u>ӧO'gmm-jkkq饗B=דeW^y%E~HbtVʒU _u]DyߏÇ㩧ҹڊ,d fΜzII ~:'}3fhco2220e]6!b% 6 Mp2T>#;xu:Q~!ۧc_l1%n#FN<۷Æ rkzH ,iTXC:+geǴiPTTD%IM7݄g?ӣԤ҂ [)1@/ӵ@AQ[[HⰒtժb q-hD"xꩧoz4Ν;m 2L\HKKCuuoKQ|1cF@i(={68ƍ>Xdd2 bէ~@ %Ktpt(;@II ~ӟQrhnnuwH0̉۞$aԨQ8vؐoMMM={v1i$l޼y#J:9aCdժU7nJKK7(x';ѣ 6%%w%l[(b y 8qbz<.2lٲe#JP3"&EQzj\uU]:7J/,,4t5ЍEcƌAUUՐo@^^^5\y̞=GebPVNo޽8}4nt g\zM6@p8)$I˜1c؈!1q6\OQTTTv=b% 芢0B&UV`]t(oG^^!{744\}L3%EQ0zhÇt[„ zrgϞ!$+Y~z|[|---G}TbnKLgժUXxqat(+Wv(KM:gϞzQ&YIUrp7%IBUUƎs z,ca% :c…Xv-~<҂ӧ^1w\46v.1c dgg#33Ǐߏ)StG"XքM;y$0ƏIߏohnnƗ_~K_ٳgqy8p6l6A@ `bp=APQQÇ31Ѩ .i}Æ (((e]Bdeeaʔ)hooמkGEYY, .\V455Anl6#''Ң(b`Ŋxz,cĉ$JAq¯3fhY6Џ;'jjܹ .o~,]cƌ_q 78DX.KYv-,X-GyN'#73gYfjllDnnnR@HL T(bĉ8y$~l=^n֘1ctԧf]rB. ՐeǏǒ%K/_ıcrp1xtpq??myl6{Cv13g`߾}׾BNT]v㥗^wI1M-tABe&L(CP1iҤ>OrPTTD_۶mӲ %mr-|u]z 7x#O>j?BXfve2#G"''(ZZpp Ygd2a:(qx믣9^&SNT@: rbF ٌwa:tp=Q1a„!-@ztjYŖ-[cL6ӦM{/!hW` qgy1Y|'9s&nwW;2(7x_*&%EQ&E?Oxf;vH:t `ҤI=h>ӸGJ$m leϞ=K!ÇPQQiӦ|svYV.$p8իWw.v;z),[ 'NN&>|xRCmK 6m6z<}8Ǐ9 ד$ eee}dARzrssO`ժUؽ{72{lݺ>_} :Js=7*#t Yz tQ1yd߿?W*݋#Gn멁QWW>X&=Zp8)`HKKvbN'*I}Y\۶m̤Kt]@2e `߽{7*++{p2Z+Y`@D"}mܸs@ n:QApwbwPÃbIRe^~)I&"((bϞ=p#F8TWWǭ>VЁi28E7o… {t@*:_ױ=≦( ihhEiii\;9r@ӦM뷅p=Պ\̏:VЁY޶oߎ@ /0t?3`ǎ1dUUUQFl8snӥ.N/"nsΝ8'Oy ד$ %%%$tVmÆ HKK.&ӉB!/^ owUEG|͛7cŨr]&ۑ h 5tc֭]v(5kVW@'2FYqAGJ:[[[mٌ~DՎSk׮ɓ'1ydO?g*G"l.@@5kv9ߵc8Nm d^qq1P8tuJ͛7cԩQ̓<Ӊ Rڵ sފYf7@{{{\10كٳg'zXX }APYY={ c1}~p=u=u J$,CMQ~&EQ_~{T-ˡNT$L&\9~_{}݇Sbĉ5jlh_Ю]0n8L<?~|B~ӦMp?~|%9cEǭ X,l޼9@B}}=⊨:nF;\Oӝ= t9IWׯq5kVT{dn&+e@N7pnX,X,VMMMhllDCCq9{/ (**ŋo|\s͐ռj*,ZH.f1Y``2tz`X0uTl۶ <@Lc˖-8ӧOop=IPTTDRKY`@ommEffe͛7cҤIx<|>?Ӊʲp_E/3L0ڿp;wg}իWc())~ЁΎq]v{x>u\O2\OeeXKY`Nqݫ[K/rӉDeH$`0<ɓ'駟[bx'0vXqgAe\uUIuW'F 1K̚5 555hllw }p=IP\\ӧO ҉,HBPS@555ȑ#;wnJ(PZZ_Wسg***p;˴VɓKQ.į~a ӧO9oqv$I>|v"HRKY@Nb0gΜ['zO':P999Xb׿>CEEŠ|p뭷v5,fg|dggti{ݺusF>p=D,֫D,euV1QL2L':X~/ݻK/_c]㎤R[A>kK)StzjL0QLzPb;wnR6#3/o={:xNWƭފK_}?X`ANh}:F?>^nu8x^_⪫TI,ea=v]FJy;wĜ9s(WEQ::_,A9sP__?JQSSz}Z(,,URKY`@`b2~=ݻpgpl7ߏG}l2yE~#L< ,H*EQඹVYY PVZ͆.l@- דeŨR6Yh۷ofiρܟL`v~m{G7͛K/%mW!7(++POիWcΜ9Q3p E#GK),02LL/1ip܈mdEQ_QȲd`Y7x#.2|G(--ҥK1gB!X,pO0Qp-h.܇{K.Wm9wQTk@ Dd*xQ+n3E7td\FEAv@a 1^?:U&@Bݩ>HDI*AR$K z y+.p0 &9 E;L N 3o﷉693Xęs<8!QEN A&2$YBH !!+.^ɫO㕼հx|X2L6 _u;Ld j <م8sނ0sfMvlX5;9`Z<‚C@tU*C! r"/~KS$K(J yQ89-nA/ "(ԩBvލnݺUyUФIxҗ # %%pE>1+Fznr-ΆkՙWy8 MM ʢ^3櫽X(- P,?/C@ |=+~x$E(^ I 2$UEZQ0`2,X8+gx`MzKB[ hrމbԉe/|H9 Z6Q ~z'p wG z7WFuZf}&~(*A.fa#QǍ7ݎ7V)\5ײeKÇC1+襥x-ٽ{78C6mjա ^ j^ؚx@`|0P E5.|m/|qqߗTUE Ab6'Xae]UU{lذ?|ٳǏtbAÆ qߋy1+@NW͊жmۨZjg׊ӥVp,Ym3$;Dff&$I(;w1b6lXWp=c܁ju?Jd1ĬADe B݋{$xX';;j5Ca`ʯ2`q $Iŋqת3!&I=N۶m})HZ(JTudggjI&6%`UUѧOp¾e˖  ڂްaCa޽Wt_ʵHZ N7݋n0 _5nl0`>33B^udddUVWt}BD^v;~_~M Fc|ZBGkơCJ_0*A8MSߏz;w֭[_}~g<쳵v!v8&m_ U&Qec[n ͆m۶QAGI SEvv6AV.aH۪/TB! BJ!5EURC)!H V}Ze*#ߗO_ȇ/ /v#+6YyO_Kŀd$Kx sG,F҂ttEcUcݻw#%%f0PUoy+\#Kt/֗U,I` .4s6U <8Lpל3oM!ɒ`:*s!B9]tQ$Iҥ ̙BHja$-YA> {A.E" pe+#V;<1xTS"|s?Fl#j УGzRJc$-YA7RTv! ;;{(Z2d?>Ʀ0F຦SNm۶QA'I bvؚ(6OFaa!]e-ơ+]Á6m)я fbz5X#++ pM7EJ+UIеkW*#iA @II`ZhԨQMD\Bڵ+"mI b6g::S5ٿ?=j6(WGe?C͡T#iAvZ(,,`y6͕x6{xU/^eTӼ doaW0 k,[וlB*K +?)fkժ}7PF҂tӉǏ{ #A lx3NTYE$*y%|, B *CB2B BR d ER e!5U(bex3ăXf_ؿ` H 09MN:Ui4rPF8, "—#_GrFKߪB )V<5'ra_ZhO++8S8v$+DNqfw:iYAlz5k6eC}fW8a7q[*ftkL80\f96\@ Q AY/IT*A@Uo[xݦb+X89!:D]5{y3_n-i⮄p!T™6+?%Loʕ[>.o},EBʇ+[Xh']/VkfL!X `++/D89i7tY fReAIri/{Ϋpb&qQ""ěҒE ¾tmlD@¾/Û`xna6E. mʅ-Wݷo ۯo@8p!ye ouaI3qa_Dp|\>/2%;(jY!͗}2Boi4,ڕ!XX-$X¢hw." k( ҅{_/M<|>hrkX-(8TyP$%U@BBPzq?#"e,@R.(*AW *M 4PCU巠A+ZhWp6qلpP+5naprs)Jp, ײBސ{}D4Tk%9%ᖜ~252у-MB8HİpiAh&DK8ZW%<3);m]a KU(@ |V 4heGre^Y׼V40֊Vk;C x~9>ܲc3ߵ7Шc#p ܯ*o<{_{]_kzFtSG<9Nı, &"T@bP|;sFvK?޳^=-7 f [YAZ|p6qis~GA jt'p\.:Z° ,X-pUזd @:n}9ؒm%۪ށ[cq8:? -@BJr, L5G{^tO#,?rw?CѨc#=@ 3ډ<ȇ5 R:Bۛ'N+8~ oW1Ĭi2/h׮ A t|ӧ/_~}i<hܸ1ШQ#$&&'ٳgڈĦ7 @}(>^l_gv ǶGV"M"Lpmdz=Gqf/F$]v!{Q6exq_IDATbȘ 7A:9ػxošt`$-NqˋQ֭[a6i Nk#//sń `Z1ft ,b۶m5kϟ/  &i?ߎ~)hܱ1]o{-C]J>&ZAAh7¦W6qhE@^-}Hn_ on]"gsJN`{j UE5$ Eڔ{%wqG͠D Dڌz q䣏>e+Vm0g f3 c:_E^^uiS(z͐!C~V֨cbڵo0u F:˲x1x`13[iF҂tX͛7at=ҦP 1aΜ9WӦM… 1|X a޼y~!CSXm1ĴvxvsV^B*txp]waĉ`-iAGQQQ͈:֬Ydt!ҦP(d2aر5kV>e޽K.EBBBǪDr?a#77ʚ1Ĵ\.CtkVZ~USb:1qDbWt?{g[oZ\3cJJ ^y̘1[l"#Fт.N]l 6,ҦP("%%k}`=z4}jS9|It Ǐ$I>b-iAw:1?\Bϟ7ҦPΘ8q"oߎ|> 6 ͚5G}T!*Qu,q9s&87|g1-&QY]( K >(FJAǠ_9Dzz:233k|O<#G`Ű>rs7駟ƴiӰwoˎ hAL V٩ ֯_SNa̘16бW˲xalڴ}Ox.{VZ(5W}(Zӂ.b=+h߾=tiS(Q6w:w &Tٸq#}QOرck|?BjJlٳO?a5_}(Zӂn2 #ի1eڴJ$4] ,b̙8tx*ݳg?gϞjԴݺu_phAL j5swAF0rHBR0ɽHOO_dffo1۷oG^ЪU+,Y ^mU6mZl|`Vר/E bZEQD 3gz)R) CL 4w>sݷ$w{m֭}jaX0oDA "mFDYz5,Z&)P(# k2  0ڲ a1rG BdUABB@@m/v܅[Z3>Q Gy(TPO5}290 !%TqƍÎ;ciӦ(Zӂβ,TUƍCFFrY8M!:*SUUi+` Z qhYA9YR!fMH1Uj^㶞;TpmQm_y?*rgˀA*& p{?c >}{/[y睵Nb-yAgٳifeq]p]XUY&VZ-š=+kI5[+"'ꢧ s]% l{Qd <#Fԡő(ZӂZ /`ŊXb6mis(r aPw׼$EJ: X"0ufX<FxTg-Nq!/7ĠA"mqڙQ lƼykFdCY~~>3=z »ヒVZE< %PZ(ر#:vi33a_ ͛?O e˖zw9޽K.ltM(**_| &y<֭[l6Wqɒ%5jmzٴi6l0y^OHχ|8pjŰa0w\t=_BZhsԲ-ZY_mN<[oUG=rssyII >C,_ѧOӧj$՛ كٳgYAq`Y[>G+\8q,c̘1x'Ѯ];\.l۶ }ŧ~yaݺu/2xߏ!CD[VI&aҤI6B1$6`3a~z|TaF={X,lٲ;wu]ߏxm'ND֭ѫW/|/V\ Պ,OHNNp`0A` B ahJ@+˿VN-[Ğ={p $&& dffGEbbb&֭[_~B!B8Fтt r̮ZzaZ> BoQ~ Xs3 Be1-F( R{1-8 B&Fт"}9 B&Fтt UP(J1PA7HP(c-iAw݈ B Fт8HqY^(˥V U~>Wգ>hiACRRR͠P(J1Ĵ~C=P(J1Ĵ{^ B8Fтj Q(˲HMME )Qd¿o}}(Z* fsM,f 8uJKKQRR@ @ χ@ ׋|>~$! " P(UU(~/ "f3L&xlblbA\\, N'l6L&,툏nj0W 55(ek PPP χb~~x^@`%%%x<`0Y(gmKne,A˲y(b@E8f8NX,8j">>N p:HJJr(A0qD~pWk?,^~ϟGaa!JKKtzvQ\\ χP(I IdY8ݿ @pukirfrjDbb"G#,EEE())Aqq1 tk`0߯P(Y4]/a\ZZX,Zp8zIIIp8p:*! - 0+W;#o}l6, d2`2gt AtE/-B*TUE(($ >`$Eb^%%%˃,zBjꅐ3v]x׀ 6-ib t2mII ~?~?n7~?JJJzua񠨨> nA O6ݮgfQ!_AwZ!Z]+5KKKu~? <.zP6 v]4klօVۯN<σeYZ)l_Q=e$g(/pEEEpz\ZZ 瑐U;N8Vݮl& ViD٫YF-x<w(--EQQ kχBx^=ZV$%%iZaa886ɤyP dYH{B!=+**҃1[!gqq1 !2f3v^6\.\.v- gykyPK}\~BnwI\ ֵA !!Aobb"tB=8fYO^+~=i/-iy ??_n0 8=j>aY6/eɓ'1tP|Ƭ˲' -q|> ( " P/8Ĩe"@PE|@ZKui- x}KpvX<ʠXZ-L+kZjZغ\.]v;5qh@aa!<^hjVkAXjA;I IRVjV*/PZBbb"tlz\W$I|-*..ӸGaa[h\ͿtU7Z@xa0Z 0B5ݮ|4h{-Xv!_妸B%Z[+C50x0a„H+&fBP(#ӽ o&7nݻw>|ƍɓ$ג@ cƌB6'ؼy3~Z!b=9s`͑6%hٲ% UUkӋ- AbŊ[cJԳtRtЁB I㉰CNNq8DEq@{'ҦE ˗/' A.2j(j͊:{9""EQOGȦM"mZpwdلB?$%%w}7^{fΜ'ܹsX|9I&E!;;@>6lؠ?+ꫯ"mZT@;#EѣXv- Gڴc۶mҥ /_GꝺnH5<| ;m۶aÆ 1cva+c*Q(8rHA~,\'ND ]v' ĉ>qͅ,zǸ֡jqQ8qw<:ui*t!}ؠ7% qʕ+ѳgOh HJJ_I"mfL@=ʘ={6RRR@g8''^M6~m<29+hѢYf_~hܸ1233ѫW/yQ@ ejۑ4f;v308>o޼9Xh~Xk׮ѣquaѣG͊Z1M423-jEZZ6nܨ&R>T zh۶-nV96->}:6lؠs8ׯ_͊9ssϡe˖zIaa(E3g[L:7x#edgg]vW42Љe(ѣXx16nQUV6R 믿ƚ5kO?aСxgٺJMNP(! B* B*J=GQlݺٕ?bȐ!~ǏǏ?sc?39sIP.}ND)n< ֯_ǏeY[oxa1֭rrrq7nk/>#FiSNjh= <>?/0|<С~̝;ÇL4 F^ƱX,Xx1 vEP:ڵ W?Ob޽|ӧn7_ٳgj*;v mڴAFF>^//}aȑzmp9pG_W,XWƁܹsǔ)Sc|w?~<֬Yزe F\Wpk֬ٵsDlY R%6l vaȡCHQQi֬_,=z+WBIOO'~;9qDc!/Y  ,Y+н{wA!駟&O=T˖-#v!&RZZJ8`?Bz:طoN<xǏG֭1{l3)))9!##k׮|qmaq3 e/SQaMEܯ_?l޼ϟǾ}?oŲe˰ey5CP.GD),YYY֭<NW_}`[9n+WkHNNs={w}7n&l6@BBBW999HHH_QFpT8fܹݻ7, A@zzKӦMѼy:B#HKKCNK(%ND1?Si1n8BжmۋGrwxW!"kW\.> 3 ˅-ZYf8z(lقݻb\ttܹ_B:B1!m[Y!BvZP( :BP(vP( PAP( PAP( PAP( PAP( PAP( PAP( PAP( PAP( PAP( PAP( PAP( PAP( PAP( ?P*IENDB`astrodendro-0.2.0+dfsg1.orig/docs/algorithm/large_delta_step1.png0000644000175000017500000011220212176652656024345 0ustar noahfxnoahfxPNG  IHDRXsBIT|d pHYsԂb IDATxyxT?Yf_3YY nX+E k[ZhǧomV?bVbEQ @š@ Lf=9aBB&9y]W.1g2s}܇4M!B46 B@'B,B tB!( ! @'B,B tB!( ! @'B,B tB!( ! @'B,B tB!( ! @'B,B tB!( ! @'B,B tB!( ! @'B,B tB!( ! @'B,B tB!( ! @'B,B tB!( ! @'B,t2EUU0 a2].4 Hh---HRHRH$HRhiiA"@4E4E2($$ BQs8np:|p\p:p\p\x8N~\.|>v#''~P~yyyZ{#208$Ԅh4jxHpDD$AER)Yjuq~m6l68:6`0h`nnN`~|lZkCe477---hll4׿_AL&[$Ȳlz?rabK gz7E^^|>~?;5F;zsaƌx0 \.pp ''<НN'<l6xvǙ?NiTU$ @E$ Q̓p8f466"#e6 n6OB~kF֨$Ȱ fzBp @SSby4q7*eF#DQ(i-_mԍבeT E^^Ǭ,\LNI^xN]tx^E |}~iL2g5\ od.+S_BH?`,yf:t7|-r)`f/Z?OqܹD7t̙x(B$/E!O68̂n@\C1o<3# qk k.L0 e]R׿nYh^wy'^/^o}'B!}8s嗛Y0 :0bшW]uj 2VŒ3geY|Xv-(/_qw p:O!pY0 瞋5k{&N o?={M~~>-Z/'tjjjڼ&HbYi b=yȟẑn@ ۷y睇#F́n&MByy9lق5kB$Z O>dM$χC!uF t" 77rK9j>lٲ1>3455am8ѣO\ !{Vɂ1qDkE D"a[!UnFDBdwaLBHY% >Ѓ`A!$YTB9dAVU#sVɂX,fH!笒iZ (SY9BJY-X,67 !Rdm766"''' AVʂ Kܦ@!笔YVBHY) 6Эr!!Rdm[e2~B!=g,@}BzJYn&BzJYn! k]8LBHY) 6ЭT+#3Vʂ p8lف!􌕲 k=ZVF!gYT2B+eA(l.! Rdm˲ 3] B!d,@'Y芢Xf#B+eA$InB!gYVB+eA`٬B`,ƷMq\A!$Y芢XVF4M.!ߢtuk׮Eyy9BV^Y% : H$ /ՁiZ@HzG؈V<xOCp3ga<6EiӰyL~JYn,Bȇ~3ftaD|vEѣQUUD"bX) 6n7e|駘3gDQ0 vM0rH@eeeKIHc,@.!ǭ555:u*$I0Α;vpI Y`H$ M0]G!//.)! k=Xf#e8N'ʈ Q~hEQP\\d?Vʂ tǃX,brܶn݊qƙ]1 w>l0ٳ'%%Rdm|>lDݶlق &@ez !C&%%Rdm[id#^o]NЋQUUeP[Y>h4 PDHgНNgec@TD(ZnDY1vX\oY% :ЭIvjnn64MĤ_ɲQFaΝ' Vɂtt@JT{rdCe`ر3 9^VɂtEQ4DHg<@woȑtdA$LnD"rTvaÆS@BdAV(؈$466n;(\yThc֭' Vɂ蚦>/K߿?mYmm-fΜ^x!.N8pɲm?wp999.@Ll5uOX (*oyx饗0||2ݎ۷kŞ={_=,X^z gq6nܘ~Vو$DvbYށmڠ$I2e 6ol 59Vɂ >W^y}={/͛Kh;jN̂n:󨭭lݺ_=VXMpmy8=8|0૯²e%5h>/Zg0 )R.IN:$d <믿nf@7`'?… CUU5j>{կ^M7c=ezj&pXvFGSSrrr:,7n~YTBHY0 @5k***GaѢEl":t pB̝;s;駟bѢE`L&NaظQM,p(=,8hظQ@]';VƍT2ŁFU]2b1uy>:=ORU5Hp0$^y%obpsy$Ovb+5Ѩ \.aݺe4Ɏy?$Sr187 p^:$#/͖D6JF "J#AW^oa vmd, cP]_UU444tBWU^Q1i;555hnn68B+Y0 @<\x.2d~m dɒ_1hРj …_/syxz88,X#D"ƍ!=ŝw@QFLh8l7‡+"U̝Bq1JKyM=ۉ~W>Hxf>#mᆶ;}5[`Yw,'ڱre gƟƃ!{ y+S)W_ غUO're{1e ԳWchlTpb ?߬h_qL`GQQ<(wkFn.8σU,_ވ/\zUފ㢋A>T m~ |0ɓذ!i27&Awz es!: tM0a9s朰2ҟ+ 轭&ק[qw_. [Wp.,\]w5av"7iX&^řgqzN4xcF#?Ä vL,S[yy~#?"/Ci)q:M}CصK)W'9ǃO>Ibf8mg88EQS#èQv|;zl^z)%Kp8ھeO>I!Vqe>Z h x +aB\Q 99,~x(~#?~sq nᰊ#{B.ԋ|D"S(( vp92o3N=vu:GaqvANUAq'BKKK7boZK« IDATݻ%w}2Ǜo1cwC3.L4+?y=~z6G2b~~rnhPd=h1x0`Ci ~?<5vnVaN Ç۰mPŦMNKطOJl1e=N3ϴ Psj=4a'%{Hذ!n fԩ,N;eV*a Yx*R)[RbCNN8ÅjɤXL/و>oY!z%Hn7#lYe cn ~?8p@=V4 ^qQ~nYY*++{ e@-l ~SMG"Сۂ \uEolYδt XwK :,G4 %~(G.vHɓ5 * rm&_#4zgp=ҥW n7^.om<O1^ a>xT(ҥKq^]OE%K=ӧKQ-$}VUkG `VOwᤓZ'Q) Nsi)EáC v}_z;Us E >50h6Vdvק  C0i^/FnWq-O2ʷZ_Fe`􌨪Y;6TU=Q<0w+mʕQTVJff|9+[pccvys$ s=1޾=x0SOuA;,2zu¬0'~@Z[ g07υ ZUU2l6}@ ҭb1 ,;r1iu AQ:i-CSW6=6mDBʕ1$q( ]2pX~H Bá.W X'mlӣ7g;k8tHƍI--*JKmr}Կફ|iom!IYi(*ҎCA hn7Or߱c;=l(CU1*|i_|qz[aݮٳ+ 3wͶ7-dRC(ĦLoQU%CݸOp7ߌC[OhGϒ#s܀δ4TTDց ?ks`&I\.OK.Du; CVeFs!!Tw4_{ -A=ۙӰcU`Y=8,^=34n YŸqv'M+ I d|Y# [oѸ@{J559ynT@sv^)(0qb# @ePezXD$B姜Lvm.e5}v1`@_v-zlٲ%E!˪QRR7|ӧOu,_kc߲}hnnn+faժUxvY|B+eAv[e"]C=k메>s$Iؽ{7)$! ;.Ei`Е }d!8GY) 69ʗb]h 8ҼF0Y?wᄡkVʂ fc~d(--M= @Vd\׮ 2~\{ۑL&|r>LRdmGQ\7!c޽6lX]P88GZ`YE裏s'^7O_+OHoRdm'I\c~d׮]1b1rvGСC[Do~tIp8ep\q{xVʂ> tUUq7cӦMi4 Չ_{bѐ原C-tUU]rWEEE;v5kpm!^:xvjkkꫯg[}蚦gŋollĴiPTTVDoIRp:;~\&!MUUTUEYYYE|Z說uuu]7xguo[㌦7ox Bz8<ػw/;͛ݻwYТѨ%%٣Pv`Yq1@/((@_z5Ν ejzŃa$ \}-1++eA^C+`ƍԄ?W]uU_}i{Iػw/xǠAZaRR]( Q[[{\eL&OqgOViPUgu8o}\CHoRikvrFJ!HvضmF '.uA̙3@Ӿ on|߰Riz뭸K0w\|(// V{n1o[r N[---H$=.||9A T ,5k=9Ѭ}s}Y|9s&},Y,V|{%ڹs'Fե[XEۥK4sr>œ9sšc(/2N;4T 9Oży( |A(뮻.c#^UUw 8ߏqAcarPSSc#L/ğgsW #K0qD8|g>1`,V^O?_+V`ʔ)XreFZ$YVFoΝ4 F0 bb ^GZ> >|Geܸq#dYƌ3^UKr76}tzT+}+V^K/طoyqꪫԍ؛T+#ַw^@iii^0 Rnˁx`{t@?磡GeܰaNv_40G}i2e 8qVʂ> p8}yO]fKVوv؁1ctV/a HBZ3L4Ŏ;0}@A!`,BzUOk֬,Xȑ# |, !JEEF@ tiBhjjvaڴiiEiheYƄ un!}}:oذa!2֮] UUQZZaÆe1PЀqu9>9EA~~~[~ÇG45oܶv4Y1vX|W,BH2r y~3g<̌<>x$!7|5jT& `FUU <6l=Bd,={qt"!|zbr ඹ7Dp[eܴiLfқ*`H&طo_>d,x,Zf#k۳gJKKukMTԻU >|{Ō34nǎ*#!JY'( ^u455؍~(F,Bm׮]>|xfB`^UU1*3glEδ;(,,n7'!$}2(|Kqq1JKKQVVfvb(F+ʈUVV# aP:s~|p`Ϟ=]/C AQQ"HڲFzwaPYY"Y) $ʰqF|ᇈD"شin݊SNOӾ(F+ʈuɲ x]fYQ! !iJJJB={@RÇV偐f,&O`0幨O4y̤ۿ?$Iȑ#|aFt2dHdׯozYY>n!JYgdY7oFsss_}tAh9>[q)όݽ{w^i&R)|;v( Y) tqXlY_~txa{x3rL&3tŶm0zn50 E(Gh4ڥ碯]ӧO\؃ z+eA?n3=;gA5 ӟ^22b]=zt*ƣSl***xb,XgƼy&ߏ>\BcϞ=(//iak_Cc>tƍǙgc܋0 ]G'c,:0xWp JetHUUTWWۗDYDQkɓ')^/Mi G8ukf:Bz_L N2XÇ!Iu0Tvg](b̙/;}ݪU0N?uHWU8p@IHoRdu[e &ژARJwYG$ fݻQ__kjkkn:s9^?l;_/**!qz }РA8tPJRdm{<$LUUUuoeUr=jSF.饗~^aFrGCCCIRdm[CbMUUU(-- @Qٞ JoѦ_O?ŕW^yc:m+b{Z xX) :Эr!%KOv9wfrt\TD8[CRE,^uuuXzuڲxXpa MetM ˲eZId`R2E04:57˨HHTBDB ?ߏ˿*5öІ?83nq?T c.f|Y nӦq٭Flߞv34(;6WGǓ=D+ TJi()a2#kJiHT<*Kp/R) M7`0|E8,nCPVֺ_z˴Y$iH4p[_ıiS'׺6lWjUP'ӿzfq9((h=ڕBK  $iH$T~ia'{JP <GIm {HhiQܬ`LN?]D͆~ZAU/a]̦im6bɒsQVVkV#%*TE+`n ,4hTA8`?4a$UWbɒsM ZeQRbgjطO4he[U"BUs6ۑ~ IDATLudRC<̙:n!Tq]5f9Qci;<-[")lۦ>JjhnVqza7*E\"ˀϧ IL!T9̟ߺZZ7*׏_yAJ 8ƍs}F}3zY!W0?>_ؿ_@$ PH3Ɖ[G|ſ݂hTEC]rue˪rXx<~!iO N^I+/woɤ^dr.] tYv©2 M\.MM2Vn%^-xf̛ǴinjWGoàA60 myE;fSӴϕ'ĖN&kưm[LI;Rk!zbEI'U˖W2:i()ךOI0~x{ク袋cDhx0d2o#4೏d!U.sX3Ql$B_23Os`×*cp0(-qOZSUyz7-Lh8|pz/HDŦΝ)|i "(j(*ƣUX*+, ~N;u}_LJFt뻬́s[K]Rf @(b19/܄: ~.LZ1?Y0Pdm>|#F@,5WxrKAZM[b%%v,DQūoP2j۶$z+EѰ`A'wuԈx&lߞBs2cp:3WÄ VCwdRC ᩧp݇ 3Ciu%ng >ۈSطOpy=*iQVVUV˪ a2=?i˪ Q` H4M3{R)\.<쳸+z\^Bz+Y0P *qE<pR Mp5΃6͍kk 䓍_7j~èaoźu1]éĎ)TW*>aٲj|Y q}C).,^=TgoF}߅Q\s;vYP xF|U?\v0zEC}+ҺIFSQس6ԩn{`w\ziH2B=+@TSa+aMYr96iD D <ʂ$kl6pd2 fkKM1iBrn1^eq;q4_re.݋n6~b~ GÆ9c0;DQZwf{M6Zh DBB MiRD@x/"^ (^k RDPR[  ^̐%=ݙydy̙=9'g*yn`̘@k粭U+)~!,Xݕl@J8PFK`R8wΌ3gP*ƌq 安_";Ο70gN6^6>T%''jտtӺܷz(!&kԦ SIH$٭[6P6c9/ώWCbbҡՒ=;mYX\}(,Վ̴`vn3_ykAt(..vx񫈋S .N r0ztv0׭+Fx< SٮÇ_BL:jTTHO7cЋر#4ۈ&zׄux1,z {8w΄cPܩX312RC)S̿pDDHp o9V7nPgS7oZk=.5Xe-NgƍT_]3XA}Q.5kVul!]uF͚5UJMT>'i}IfIzwR:we[BC!d$Iܹs$;\į{q*uǧ yP!׾>o mԿ7-7/Bnn._ÏD~~>"##}&_|)Ssΰ:8,xtR,Z֭M/_zƇZEQp:BdZ(  aw!'30'Uf޽¬YY'I1|lܸ_]&bfcs… 0`j5|I^LB`/⤜> _emz\oԩd|n).ðaPXX^{ ۶mÐ!CD'lA|;).""$I>I(o3f x\OGիQ%-kAtxoxaZw^,_v~i `=P/% """"==xmw/{Ǒg6-kA{sAlܸK,AhPXt낕+W_ŏ?ȶkP>džsC"`̶G& Zݧ h_ FAyy9f~xLx1i$˂JЂӱƗ=thժ{F=P褜n[&aĈh_ \.lf ^={7IU܉~gX,XhVr[n j_DFF͛>MСCׯ_wL=Ǐgee"Y|91n8UO_… l)]7|?䞝qu 0m{u#<(Ž;|boUUF#~GL6 Nu3_z%DEEW_eLQRRroӦ z&'8qзo_-kѢu={6-kAJjU~wge~p=Ll"$Y~=::pU*jZ7x`۷OXC~-|iqM6{=Luø=ڴi{WqbgAvW\Iz'N@Ϟ=li2qu58|_]"nm/1Lغu+ƏﶽR"`Xn}e&'EDDf/w VEffӢ( 'N`ݽ=p@ h_ :Ip:lKvPEks'3ϠM6xw|a"g)**bݏ;p ;vĥKQXXXtڵ+no![nEΝ㶽6wR+Ɔ z{ii_@N|ro@BBB}  Cf;E AMEa׮]>|x}u8+y~ۛ&r\x餥!00QQUC׶\/)) .\P;E ^<l=ʾ܉r}25 f3g3ٳgq=Xkjtpi&{~-U/lݺjw_}q':m4he"gu׺gtΝ;Ο?tΝ;jSRę3ge E 8/?͛7Wo&Ν[cow8Dٶm TZe_}r9a͚5>6999PP?ЩS' p8pE6\HxAy_ӂ_bȐ!/?mqq1zw}gϞE~իХK̘1ݺus[`XfGa\M}݉Μ9:f_v жm[V{EBmzUЯ]\c}[n̤:~-ଠl6,Yӧ_aʕؿ?sƍ+W`Ν1c|IƔ)S|r䠠iiinm6R)l6 /Mrr2(СCk<>Cj V^,Oi T*T*6!XӍN:Uz 8cǎŘ1c]fb H`ټ={`ZK/+Wƍ&GXXfp{իWrttҥ#P}ZZ'` Z!w/T* Ӊ˗/cܸqXd 4 {=\t J.]fŋYfpoݺ˗/͛S% Tg}zkp bԨQאtΜ9PT㏛j^͛~2(kzΞ=]6lRf]W9rтg}񨨨@HHFkbر۷C"`1b"""`2{nE$о}{jVInC"@"@RAR7;w$I5!\FYfa(**jڵkG`e=.."jŹsGS9qqq^}- zGP0ZKFC޽[g}#G`pk.|wPհZ믿>gϞuSRRо}ZWg@v`6qMO'|^ z}1͐l ;V:NTT⭷š5kpȑF]d&11FO>cF&:t|G`h_ bL&c ^_o߾ I={?˥鈊L5 Y'&&lÁ3g)Y׮];L'|t^/8vn>jE";w}Ye.\9{PPڶmщq0 ٳgg]&!,,o#h_ :_Zels1 jMS6'$$`Μ9x7p&]k\x;vd 6{耫~ ]ĉ ~=zLlӦ {_y-kA{ٿ?Zm=Μ~I&y=nx"> )&)) 'Ot N8*.料ZnWq _3+3ׯ_zB$d2~gcر0LM̄bsR/! ekгgO M<;~8z]qGGG3+7| h4h89r r'ڶm[lݺO#<#YbN'BFO>u[߹:uBVV,K`h z]o2߿^{YIRRlقd 6 yyy.=zڵCHHۦ0zpP] ^_BBBЮ];>|:uv{ڴiӉ'2|mFȑ#DիW;aÆa߾}z*qfѣHJJb 7hac3?郓'O6:ǎB+N ?|t.l$''#11^NgϞHMME߾}1qD+WDYYGgΜហC,GѣΜ9qǎCϞ=Ct[k°ebHLL=܃;"**  a> 9uV+˪w#"\\ֳgOL&;w (Brr2zz_L&CDD >i hf0 [dee!''{ovaÆaذa~:vڅ"##;/Hph;wF||ӧOgYV(((@~~>nݺi zII t:f4kѵk?gӝT*EDD"""j=G;k.Z mڴ9s0{lz*..ơCW_y욞 J3`lڴ崾+L5Beu'-Iq|&r5݉FÇcɒ%8{,=cźu<6 sN8N=#4lF\IJJBVVu~CiCj re >i dB`یfKaa!222굮2lm(A0SSSɓ'٭[">>QQQ9BC?zhDž 0pzӐzQQQ0(//om܀OZ @8p4hB;ѦХK矱sN$$$4)^͛1qDZYCoժ5o>8aN=`>i_ :ÇѺukf-n}2i$E߿?~F]gӦM0 x'i `w3wV+N<(G(\p')r9{,Z:^z%8k$''x嗽le,wׯ433YYY`jr;ŋJG}~;n28{9qԩ-iGvr D$A  EQ;߿?>1cƠ[nxW0m4t:l޼/"ڶm/(8)'(7(PU7]C•{tԔt`$Hf;}aDl69X,9rdjH=668OI VS)Th4"##ѓHBA.v݂Et;,XDF}\e -wfm+LEum#x?cx7k;߬&B )@Dj&ʿʶ`5@)Q֘/ݻ7l6Μ9S̭["** qqqJ!bbb.\\\齉/IKKDbbb' mtm!ݛ,5}bEWЕKK_]VL!ɠ( I@O>o Fܥ3gFs(O !!jU)oq5:2wcǎ\QAo~I V+**x3ї9s"=/v$A "#YV؜6 "&c,Z0mlʽ4{/݋^{RRRp5s}h4ԩSw:Xv-&Nؤ ]F'|t›V( 邠W] =tF={TСCԩSNCcΝq…z{ |t>l7oDII MNəc|F,cĈ߫ݿvZjժQ^ ! ;w \n'-j6iHIKK^ E #|A?~yyynۭV+֯_{4,=IܹsMJWI r85S뤥ATۗ?ᤜs@$_~q۾i&7yh{TTF@OZෂ~Fzz::w,[ }Chh(F+W2(ᅬÇ{l!CAk׮8{G-|+ {/"66m38i3|~o6m3 [KAЫBod3m, 4(stD91)WEA9cuK?[nŌ3 "O(s ARѣ{t{I Aiii ,%Iʴ4n\2gsؘr"RTgPlDAapay"ʜnhX(ѻwo=zA o]&bmF̙3С4M!` x.D9l:pRN ӳ%xs*~iGH(sNG&VEQI V% v;f4RRRQɸe갂$H(Cpa OE0`}\r۷ނOZෳx*6E!--MнWY3tvaؽ'-[AJ&''ňg"MPP:uĬ>|tB̶͂T!\HJJ'-[Ah4(//gیfT*ѪU+M`!\HJJBjj*F#ۦ>i>l,8]@pSO^v$''m@=өT*t==z4.\ȶ,#D]tAhh(϶)OZִZ-]CVb" 8NX-V#,X-pXlmmY`3`Radbt}۝pX(mG @DRr121H \~ •G2 b2 R"'QSS@B(L#2Tɹqڝ0a3ژ K+?vVvvmRnUn3ژ|(';{N$RD$DR$ DRj)rWoNBNy W+CoהrO;a5Xa*6Rfc{[VX,0ݹGUͮ(%DID Ťۇ.RuD%qLbWYAT#ecڵq-vKͰ\ߦ>[`)Xh S ; ]v'6[v}BkTK(],Uµ]r'rZ\5"o{v;t8F +[a*qU5:i#\e[)[r"CԘpsegeiipX]yo.5Tdܓ %$(%id `DM,3eL\yK6Ly0`.1jp5"2^G9+Č|k(LyDVI!Vğ"AT[0t{6Av6N٩pvMH(LCPD`@R`%tu0vn#d21Fr5 W ],BAzV1fhm(PQA!G$ /bE0a Hڌc9LL^ % "8&퇷2UOGɕ\-t\łnOuCˤ^X`tTo 
؄ҬRY.]QTm$q\Ls*햿L+*TT*H5Rv8[E>asfi嗸 .Vz23f:,X V q@WtnET-6J{t{۽]U*]\V# efX],=K 6َrHn3gz!ie"KFT-Ep`(vkJYt} lzs)ی]/ۣ:%jXn7ٙ.=@n# +&# 2(F>=J#H SAS0uy0Pj;N\ 통CuMCُ^\w "OyW\t@*)bru.*6 WK{*P_`30eeRKgylo~oBerAdff",,A$"Eʽd@u$NN6nA$nsC$A*TUqӧOGll,͛#|Úk0:u=$'mĤ͓p#mo{mn$ORD"<\s_썟A_g@H1Fت$r TZ: grrJ="X.Y/W9wӦMyr9L&S9OFBBg{KZ/ IJecK;0rHd!"PU S ǖéOp58)O-ëN ]p[WDĵ!<1vo{j @1n_q2 g)&u0 ~c?GZo]ƙ~]@Ոl3h HRlݺ5(BQQ<6R V1 `=?،6v E2>!QV8L%&dDˤ(^_vpN P*!Q_Ƒh=5P vEcixb{4'-[A3oqY@\\coVqc>O;''/""##_D^^^OH1t8u m8t3p,JǙS7 S!aZ~{7w Lm?f3S7Qzr N/?uiH[kn'|r?2XJ-z G>})]I vR\hh( 69rr\ iadDݻʵ6K"inF~(( v:MCTx"{D"k$ F/Ѣ[ هQ~ǖC`tˮZ-SL&llYz!c [K-zhVS"ꫯn,X@z)(-TNyewة|j̘1IԷ~뱴|OԙgSߞjй7OݤL&(Է(+.t:pТE ̜9p܊\heZ/pgȐ!JرcҰZ0an݊>׿ÊBc!ZZ@Dt:1{l|7زe |AA;i>h~ ~ xK.}efg5NӦMΝ;`޼ynF>$I|7n&M{mtsOZෂkv9t@~6ECΤI j*\矱vZ5~̱+D"֬Y6m`X~-jzm38ɮ]MTNj#$$ƍڵk=~;woW{rH1T*i&ܸq3gm h_ :{͆۷cܸql" &O;wc׼~:LQF_8'1J^ll,K]֫_=88l9:2NgxV+}Qj ɚrj {cȐ!={6/D1E Zu:JJJ6sرHLLd^ 0m4,_#~_~e9s7nDPPP:)g_Z{|/Zׂȋf֭9rd~Cp4fϞb_IYv-K,]z9uMfС}],[ n}h_|)RSS'mС/?Sbƌ:>_z%?(R)p a zy 6_|X~=juϫkR\euW^y/FzzaG_OQv<={p ؔ<#4hF݃o߾?zˣp _]T⽉'Xd """0ydM(aC_… m۶j9~8cÆ H$J*/Ftt4x X,F]-kAJ0l:Xj j !wOpB3?0{&oV+,Y{111ؽ{7 ( Yiii;wnoE ZE"LW^y[?M0Bݳ$ 6ôiеkW=QQQxWc߾}Ms:ѣ VXd; _@̶l"H`6Uoߎ?֭L&c(lwdLϏ } "D WECLk(8(( N ]qwעY2Ly| ~gg'e(6Ԙt`$Hf;A:9l G3}t\ 'P'"BDT&LtwMT,nUS#>r2xfnA:bR\f3-o)No1v:ޢD*alUGQe[%@TTq-[Fr[fP %%+Vp(vPH$!RΝ;c۷/z͋YޤNW?ttNǏcܸqXf ޽FSNŻヒ\deen㩧K/8رc1b;YwvnX,c=dz+ǜ9s0g%* m3^ ٳb1^pт BP8ua2ٳgcǎ:t(>o~ J8qBCCݮoX HRx\@@a$+Q*4w8]7'L bƌv2ر#Ξ=[l6!-ഠᐺ<7\R$7|N{ Bxo& E Z*h<|Rf -kA/))a< '|t,Uh<|Ayp_ l! "|rhZͨe.ZB>!GsΧuׂ^PP`h_ dC-kA7 B@?/Zy_h4U& =HDll,f3ۦpL_9-[Aw:X,lR'rH$0͸q***P^^  rFTTT& V6lp:p8LZ"Rr2 br r P(jPTdP(GVCAVCT AT*I6~fzeee0(--dd``l6bzoX`p8|)b7I I$IB,C*BP@*B@.CBP@@ATBA"((Z!!!FH$={6L&D"Qv`0d2!??Ũ`ʱ`@YYJKKa4a4a`Za6aZat:H$bW"@"@$A,3yL@-bOWlCGfcD~ha2`6a2PVVɄr Fh())hD"ZFXXt:4 SyҶjaVTJJLJ$b&|+:i銞d2b@3Q^JZ']/rZz?]9b$3]F*76*p8Fnjedt>+** 4hjh4jid2(J7 =ty}@II QPPkшb *J0T*VV86LM廟A1e1?6i01РRnC.CV3uC`` |Vwz((`1 FV˔ :b1D"r9S{?td21=(,,d:.eee LFu }oׯc„ won3.\FLX,X,(..f*N0]!8S={\tm=^N7AE8Á2")++ci8zX,f^] W&ݫ t^W@F+j55W@qq1z=SiFݰZV+V[ϗJyU(RE,00 aPR1j2O7JKK2n2P\\̔i Ko2] 1C5jƔ{u(R~鑛RF.] t]M70&/fΜl2~+|¯g7>CDFF̙3̶˗/c;wnsKf3كe˖fm8t}Q|UzUr VZCm Ƅ t:z֭Ø1ce3(γqF HQE?h4jܸqTBBY;dggSJH$PcDzmgؼy3Eh!CPSLN'fq PRJL9@8pm8)Ԋ+(CT׮]O?e  ;v,BBBp~ٳg֭[ؼy3F9sl%wHKKl{2MEaɒ%Xn\;w_5ۦqcǎO>ؼy3\L8p ۦqgypTTToիWq1ݻ˖-ɓ'Y?c8dffmH$=z4F#Ο?gFXX )) & sYb ++m[AAD"rssaۙqmBr #$$b={2TtYx"l˛<ɘ1c ~  B۶mkVm3A9Ɗ+СCf&E3 -[p5>c<l*.ڶm1rHDFFb…:t(^xvM W\ANII ~'}:BCCqE \p?#JPBEE1j(꫈f4zzSNeGV#==NǏ?˗_ 9I UXp!v \?ӦMC$U_֭[$*$O?mgxGEE z)[J]vD#z3aСňA^0yd( mOw^fFȑ#63UVantIqq1*m۶Xj^{5&C.]pa!..IXFw\rׯ!J駟}l%̠( ;v؁'N`„ ?4Ax0" A 4s9INN_69k׮!99zcW\7o69Mޡ p2̟?{k@$|I|Gt\b޷o_dggC$!22;wdҥK;/I:u¼yT*x\^}U<իW֮]'x8{,~<9s`ܸq:t(W`Bcĉ(B]@>}۷o?"==F?>uV\z:uÙҫW&5%3-8Yˠ,YY %/YȂP$j5L0uHQ&y&~wqO~vs|>TTT^t:1??=hmm&؈Euu5... l}Fo/Hll܈(/wwwb6 x>HaaΊR\\,'''!eE౗tB`XfHGG"RWW'""COD3t/JUUݡ>Bcc#RSS166zl6,..<v;t:D?+ND+TU&&&–".++:9LMM`0h4~ORcp8Ӊ:E? >>(//nGff&qqq+ۍJĄjETT TU nd,}}q]]]37lmmr!//l!mdddncttkkk8??NfHccdd.+^II  8C'E ]ӡiiiHNN%l6DGGGpݘ EA~~~?>>X,FauuHMMEKK a0RYYY!!@'šoA444@Dv;22~& VpPU5GdPH}EQ`2  ł?&{D̏WۣZD`0Q(--#ai#"":0Љ4NDD t""" `iHDDD@'"":0Љ4NDD t""" `icIENDB`astrodendro-0.2.0+dfsg1.orig/docs/algorithm/simple_step1.png0000644000175000017500000007362012176652656023405 0ustar noahfxnoahfxPNG  IHDRXsBIT|d pHYsԂb IDATxwt?lҪZŲpm1` ݔ7N $$PLq \dUem2cV+ig9G3hv5ߙ;A@!B!:! tB!B( !PB! @'B@N!0Ba:! tB!B( !PB! @'B@N!0Ba:! tB!B( !PB! @'B@N!0Ba:! tB!B( !PB! @'B@N!0Ba:! tB!B( !PB! ]\xq8NR"^/\.jjj` Ӊf\.vvn|>x^~~<# JV`0h`0`Za4a0`4шfzFb )) &)nMMMp\hll锶Ess3"  JY !qT*T*Z-T*4 t:F#t:V+ `4aZɄ$$$$ 99 HMMNiuO @cc#N'n7Q__.}N'χ@ l[Z-m_V V Z F#mc;n٤lfdd`fCBBRRR`Zjej# hnnFcc#/vKoߏ@ }zۋۜ8i"nK*}.~ZHHH@bb"l6[G+'|>&LqF#Ҥ/^^GRRn0`6jtPҏ<σy~A|>\.x^|>E F444NͨA VEZZEd2I;E\G]4 z}ȎMK!%677vv np:Rp8V łt$%%jJ;O6"1ft:t:ijZh4iY܉Z]ы5v& !DzN' f3,=Ń \9i4T*i;\Xt2q;Ekhh@SSch4HNNİOHHjjX,^d ;{"uQ8shhh@}}=jjjB}}=N5LHMMd2bb 11zbmz^|ߠx00~t 9ΐ ﳱ0 X,ҾffI> !]뭷qAŃusĿ-.m,mߔ$''K BjA>}#nLĿYÁZĥ !11QR|LKFך/7x#$] tQTT?˓jkkk/E}}COk ?K<϶3ޤ$N X $Hill^ ij0q',\S<m:lm6ĭ, pW@}}=? q/baB|SϼZSCf!%%Rf`h4ʹ:G`0뮃FҰF}}xz+R tNt9K) J$I''',wsf3Ne^zxby|r VXw}@@r+Y@7xu:eB+YW^WW7xeeem-]/RmL|B"Jh. \֭xЯ_?ۘ;w|˖-x70l0̙3{/N8m6466K.7|#5~&Y!D,@ꩧSOüy󐓓ѣG.~?̚5 ˗/ǘ1c0ydzX,hnFQ_BH `% "ۇ3gEN}I>|s=8u> ˅{ӧOGVVVt:a6f9:!r:mSRĻ?`ƌR755̙3uӑ#G`ȑ… gy{vX,<X,X,Q!Dos7KY 88--Zŋ#;;_}<i}J{b֭x'h㏇`C!$6z) ]\ϝ;֭e] ._~9}QM7݄cǎyNZZϟocǎEeeeu\.f3?pH B#[{RĻ8CġC`޼y4hZ6j(֭bW_}m^r!-- zz>j!(,wq|{]P\\7b˖-ǓO> yncc# hB!1,@ .}|>^/Vk\.&*B+Ydt:]v$$$D"B!,Nq}rA!DFdf]!tCB!c% LG!$rdp0!B+Y ]|>4 %},ebZmB"R(6ꐔ$wBdR(6Л@!$r,ebqB"R(6YwH!$r,eb !D,Pt0BHX:KM!D,Pl2!ȱ t ^/wBdR(6Y:*#@@B"R(6v;3GeB"R(6=3c !D,Pl|>hZ "#@h.BX tB!R(6Ѓ 3"!Ȱ tuB!a) B KY@y*b}B!`+ -" jeBKY@r>AeX6.D8K rxx$'k0dAZ~W O+@!q娯8T#d`s'Yӄb7F F0`dqIQ?:v4ɂsGO#vp5+W]u~˻vKUЯwu<h4t:u?ﯓo~$$AZdel+^z%HLLi-kk(-na00gN#^}5vm/pR*oL~ -߾݉Ua4`0hsAee^ l65mGSSuu0h:mMpyF0;ӤUU~<`o|y.tsWP[Ѩy_9GuX,*}f% _GSS0urUUGC SCSSZ̞ 7W7 =_Vte1}˹Zzi{s"#΀:x^_7k^76qMHJ:<lmhQ ܍2NaF;V5,0mMpRZmti:|>m|``=> n3&<|>kt;4_omxzzzh[:ujTWh |/?i VÔ)>X'|HNV׿Ku%Vl@0̙@F\; rsu8‡ /4K\ss&bhIIj a~d^\D_|6b͚&sO'=4 q -M{p>X_NgKcz;[aFOCp啉|;01cf-MEE&|]3&L0#9Y_"_~ٌRR \uسdg5HO7O+{M~)rrr0e <.B@qqʂx@t|.ߵ˅K9 ?fh98'v\w]~-/W#%E͛ 1m۷;qᅇ0kV)t7rpuI8|؃y'JדOt$46mcWHCo= Z dž m޽nYӄ+(_RJJ{)ǒ%IC#VX(ŋO$=[0w $ֆC,Fee%a%%%脜'Yknj$w8$mԨQcK*IIIHMMEii,Xzbb"3"Qb  4Hzu8S(R(6f3ecCܺq19#$ ṫH#G yL٨vi<@n2rѴ$ bĈwr(tP !b) Vv]2ӧOpH=EwAAjjjY!1,Pl'''N2C..?~x#$ t]!="z~~~e'NFY @n4nBȀ:kM08sL4#$汔 t@DN88Cff&t'<,ebfv] !;urrr]v @yyy4"$n tFٌƮW&$FO@'-@nlhh B"<ˑˬY^ IDATvtC>k={EBz+Y@X,L|Da_PPr>V@сҤDyY,k=]$,Pt13Q=8rH_EHa% ,MG zVO.RPPPGF7XEF B"qwpV1p@NH+d]1!er8X,.8~Ƿ/K#$t%wD@ogWш#P\\WewXENc Q&ݎv8UgF™3gP__ߗ7XEZF0 Bpf&#GgOXEFA  BMlhZggC N޽{>B +Y@h Bbx6h]Lqj1b۷#$vz2 h4\ũ&6lM.Ct>@L Z񌣣!ChrB,P|B:A>Æ CMM &XEz0JM@TSS]љӝNo~:N2Fa4wp& ;w #d1!婫NdjwS@Cj5FAc ;YW.֮]{ 'O YVUU'⣏> Y͚5x'pԩ6:CH,kllDRRR\G?tPGHc̜9wy=V>DL!:;Ƣ>s) ]\C1g|yWƐ!CpY|xCֿ{qUWwށJ·~u8:#Q__tQ8S>˗/Y MO4 ذaϟV 3g6 s%\ӧ7ov߃aw ]DCCC,@T\{.ի\sM;Ndffj5 ׋N몗;h2}^xJ5u,555Su>x`j*Q4V@сćHEگ_N ]!//eeeV!,P|p݄(8z###½QZZWd=„Ě*T.':ZkN,Pt\.ĝg"-- j8t=l cǎˁ`% {%q̙3a }РA8qD+#$>p$$ք@xMrB,Pl|>&Y}ԯпh4Ä( KY@jNBa5tZ\:C'R(6Л(K0ٳgC2ؑp (KY@geQg" )(KY@ge",'O憵~8‖@?~xuX:]ģzԄƈk#$ t$wtɓ' (// x1o< |ڄ@&wtɓ'on;***"|K,> ۍ'|W]uxm,ebn3s݄(Ǒֺ^?LT*>}:Blذ|-[U_YoV>!,PlnF [9A a_CWHOOǙ3gzRgرcq/oF ]vn /^ؽ{7~_7nĢEYK%q1h4gN8 *$n7oٳT\qPXzuއRD5AiZ ca#Q&)&m۶b̙R =)) SL@'1,j?Cq%DAAf͚զ\4tTFѣa7ݿf\H]iii9r$3*.r[@ !Q +߰vZL8}暨wZf LXpa 2${ ]\'c7l؀ӧC:TL>NSyBRD1c ^}UAvmxyjZ&N'N<ÇkroZYYwFۍ۷^봆"zlٲǏқXʂ[oqƛo1cO? 3sTFwaaÆ^䞙 ؽ{7&Mi zǏ֭[#zBzKY@7q 7n@]]N8?8-Z`0RuTF'ڴ tSjNۡb 5O<۶m}M,eA{E]].]*͛;c ر{R|ˎ9vy9C8YYYsN3&QG'OFEEEOHX$\}裏ݹ!r+--5tHKKCmmmwƍ "qDv,eAToaiL#Gn:3& !r*))СCHvTN.cQRRҦ[G @bb""Q [f͂JJ'|2WJKK5d =99zر `ĉ5t89{Bծ}ظq#n 瑛&QjbĈa?G yEYm֭HHHh m ]vu!F_ӧcٲ>8٦%;<[-cO>;w-Q+apСp!5@NqǎzGZ Fd/o[999p\hlln? F ۍ'NtM,e@ &T*3"a۱cǐ Vs"=CVQQsp6ϻ"8ty& * 矣>]܈;vF!j53,mGH0P^^s)SIsKYNqMXrrrCnk!,j/w:KF0p:@HWJKKhjኴƢoݺzZ rssԄj%Xʂ'؈sbŊ6sFnޟp8pD6v=oݺǏZwdgguȆ,]yi6ӧfaȐ!xWZba樌~^O 5|p-<6l؀_W]qS%$Xʂj\s5PZZ /ɓ1cƌh!IHH@sssߗ8vX=;C8p L&S6ݽ{7jjju:qtȆ,:qXreޮKzG2󨨨@^^^+TȎj5FSkX,.;u6]!##[3қXʂUٳt8q"o:_}f͚s\rrrpԩ$XE:+!ff` D&MѣGQSSjl۶ W\qEu:XdbC$l=ɘ"SN'}׿;\8sLUs,ebl6r]!*//bfs{䞓Aa͚5.q饗"55ḮP[[qKY@gi!aSyy9rss#>I;\uUXjUW۷7oƢEª!3p&!tV6:uJ]=.kQ]].^z 999X`Aqto$&&"0sD KY@l[ E= 6-=݋3HwkpZ k::KYbd3***Eޑ@.w\)[7mXũ_YdL4 O=&Lŷ-FQZ_ũqT8y?xŠ_~Zz4(ߗH Dff"BVVVDWq*h4)t9 q l2O xAbL Ш:$$$3͞$ 8Nx^z!$8j; HThj ir" @Z-j53[ĩP# 6|8RRRPWWCX:֍ [N> Yq_;t<{8D6d)[*++㎈ܢQCc-裏~zia+Ykz *Z/=T)))ؿTޫ#wٳ}ܹsAֺHc% }RF–ji|\AZ:lG~~>Μ9?~-~aj"J(:YP%\?ZfB _lj'"9-"ǛoCRV@сҔ-gΜAFFeD~VVxGuuuTޯ`07| .İaޠwurrrOG&]db0ѳ1 MJ'뻼5i!jgZSSkmݺu8y$n:֭ݿ7nĉ'xbQnVuD]"33S6Z8 ̝;Wzz7tJJJP\\HtVĺM6aʕx嗑/ ޠG cŊrStԑSg< rL.ahZ\tEcL̜9_|ETk#J(:ЭV+3͋eo1j(xLpqy[=))I:y999Q?Cߺu+`4qeQ3,Pt x<`ڞ={vZ7Jj3諯 KCZq}K!YYY{nٲSLi-W\qo.K/|XE:+!bٲeːh{}2##O<~m>|X2cٳg FޙDɽ"j(//ǴiBoebΜ9k֬Jm$XE:+GeraŊXhZ-{N#<"G1r :wZpDsO?37 yfoxU^̪ ǎO?~|; 8c G퀃D+Y@j unW5\xG;KVG}~)82cҙ3g)w7;$''#!!G?4;/"p7y}$XEJr5kt Φ[gy&%Ƭ:qM-a(++*//GmmmAgRR.l޼#J(:9a}d6l Cl:Qf?㽱QM0dȐ|{3Ͳ ӦMÖ-[."V1o?.bŋ#++ oĘ@/,,DiiiaِfYg&MÇ31M(9,P|޷w^TTT+hD |I|'Qiz5N'fE[aa!Jqq1Fw΢"]6}d=sU+իaX0}6™NtѢEׯ~U1 @˸gEs hذaC4vih)X PRRg QZZCvjF@g +YӁ[oa̙\CcxP\\)S0a )) Çw܁ѣG Mz fw`۶mT w:;III~ @^^u}]h4"//Oĉx<7=ZTGJl~k.lܸ˗/dž uV\cB6 IDATرcqw[nA]]݋ bٲe8}4jjj~?t:~?N'ϓ͛!f͚:4Z,4 fΜl6C!##HHHy@ F>%ڿ&s6mڄ ''9;a?ʋyuuuHII IǢq>{b$$$`=ԨQ}ڊ@o3a) ]zYYYH/ԣGbǎ9sfuD.\B\tExpWb޼y3j} )ڵk1cƌ^y-ł˗/ǩSz5c]uu5.@KKCyFǏp8pÇBl߿oEd"f5!ɄGy9r/ Պeee0L(++dz>Gr_UU#GڼNÒ%Kp8lN¾}pw^wvwf3^|Ş*++9kkF }vb\p??11@C~϶mۤ,w1\s v;RSSqW?ƕW^ ꫯj.Cff&n7[(KR!==Djj*|>_jj00QY_CRK/p6ZV}XlzZb;qDt>bj۷_' Lj#~h EՊ-[`7n\ӦMK,s8ΐ.| {=X,|>lܸݙ|>bꫯ0q^k{Jv,!]ٳz='C8ߏѣGu5kRUDndA̞-gٓ&M)$;;Mo1c`ܸqSLi\VYb7|9skGśo[kʡN3fƠuƍÞ={zu dqI& %dALz/Į]: Id֭?x)))xcxX:Cy@5j(# ٳtDK8} xPYYٛLz< e0DBBBȨD:dSO=>۶m5bxM6SƎ ڵK3]L 4pȑ^ȋ,Pt{^z`ƍ1ydT}1~x~L5cfGK @iitX LqI&aǎ!7Tꉟ~ m>_  ,Pt766xyfL2%FHz|'hnnƕW^ ݣ׋GSa48l`p:l8qb{/L ,PtvXVˈk`۶môiZիk.,X '^+5j̕#~Vrۢ7nUrg\x]n߁!Cɓz=ȋ,P|wF:w455aԩaߛL4 V͛1{l={W^W? *w)ײ{ ;<\(((֭[{Z;wD hw;\/77<=-Ȍ,Pt744 11Q2ڶm۠V1a„DgϞ5jV\w4ieMybǎ=~F1Kv'q,Ptҭ*͛1vذgYDǏ}aɸpbhjj+^w@e^TTݻwc܏?LJupS?V foA`⺉\Aq 7ۜUVG,YvƎ#GbFJJ RSS&mBE;wɓe|jCƏۍFܿ@l޼?ឡzdffR9@rhfɓ'qi\|a?o1{l̞=oi&/@}}}Z-ӑ~aذa5j0|;6; <<*][ӝ=@d bb]䲊 fG%*\QAQv3d@d0E &d,`$@HIUW}I譾Nu9*dee?35Nݕ:t@pRl^oԥV{0 3܁kmm׮p8PVV2Ÿz*PXX4,^жm[zm۶@n2.t-++ qqq^.pwq[>Ν;waʕ;1guDr߿|^ӟF)T9 @ZZ^g\DCGhZnp=)N*c );;їqN1F#d8q / 66ׯa茌 x<9/oBθӧ.^bzz111|r@^YAR6m6t:eR7ڄN[ g"!!SL#ٷoxuB pMqw7֭[ $$$4izOٌtL8яUz111>!r=R'_I) dR_(h׮-nc馚L8SNou}˝ӫW/OpgEe8,`z eo[ UrmR_roCot;EC}bÆ ?Æ iYcccQ\\,DJY @oFj"??瓹:A hUb ;,uBq6.Ma[ R BYo>k kv{7v8,Ы.% Nǎkm۶M6޽Or]Μ9#)pIä t)}oҒxУG`3:{\Xqڿ_eJB2:].^y?jE=n9p3׷[}j 0 ػw-eYlٲcǎ9wsFx jɜؒ;RsT W;@ q͌p;8 ⿵i?~ya=^Z /x}^7g ~8w#‘Rc[vݯfEnn.v*CT#;;Ǭ_4hQ0 Nڵ+Μ9p tJ<@87'ϥ#V+=z=֬Y'6i~yo/׋E~~#‘R6kjj$WRXɓ')oSyF{˗1mڴ&-[n8sLG $!,mKƖod2{ќ<&e* C֭[oz5k(f4nݺnt"nRnGQ^^P&X@o!FÇQTTTvÁ 6Gi| e;IԩSMZ.iyRnn7Jq)-vyyyK[NoŶm0k, Aڙezb^=GJY@N%// 3K!A!0ޘj.Yn'?RlpRj,sCo]v6* zz@ǎCN`4~ E#31?a9 lxr!ef}:1wXr%XJR6j5\.e$$$]h5dbev@(jkwAAA:v IsR,)57eG#{gy{R65dv#>>^RhFEDDK.D tN.t!77萻ьrӧO ",mFTUU ]F@8}4z=bbb.fk>} 77VURH#H) d4piÝ94p@\.dee ] i)el?z뮻.fkػwХFR6CBB$s9,Ǐ} `Ȑ!عsХFR6ЃaX.C `2p ] (xÆ ñcP\\,t)RV̥ SMfk!Cv-p%!R7iNǏGXXڶm+t)D`tR\j t=H) djl ?P~'$$$Pό!w/%&&b޽^FZ@ց.ӑ#GгgO "@xgРA|2?0')el]Jg66ٌK.н5h h4l۶MXEYYHA= t) &\N8N#P x`0`Ȑ!HOOoe_r>,Zn(qij>G̤ h]8pZzh55 YYY-YjtuGŦM3gbڵ޽G FJY @p:9ݻ74ХC?~<oien,X?8&NsaѢEh~7z->}ǘ1c|f)H) dAAAPT9o,b8pХCދq{Ǘ_~Л֓3gb֬Yo@ ,m3 #C-?}BgϞfx<L>o1o޼:_p;bm }Ǝɓ'Gɕ@HFۿ?A~.}ɓ'CTbʕ .ĺuf >Y赾.Q*Xz5N?^ӦJ: few}#NTTƎ5k322_翯qgL#-- +fϞT@ց.Atbǎ;vХ" SLANNN:׼tNÇ㥗^qSXl֬Y#ajH ]߿5jХ" #F@XX+I`0j*(oGŃ>I/pL&;w"::=zB$!((ӧO2nܹsq1lڴ |rCa駟=})J:$q"m۶ Æ ^?iRRRP^^ 64u֬Ye˖?ߨ4t2cNobҥnR}H*Y -f\aĉBBt IIIXlϯ3gbڴi5kV1{93g΄@$,urY:tХe&%%FVVϵZ8q"bbb'4BicJ%>s@&,uIb_n7aҤI4+]tFB||cÆ 0 ~^C'vbXp!Ns={-AxC}ꫯu0J:z$7%K;)S.I||<^z%b7}Ç;bƍP>-ף* .DcƧRYFn cʕ_B'Ñz1 rT=ƍW_}ŷ%K0p@tvBXXa!wNիd]T椏[?>ڵkgyFRQݿ 6n܈GyӧOG\\F6m`9s&&9A>|?+V4J.@HjNS2c|X~=.u\ ZO`f? @(0BaY. *:XueY`a=`ɽgK1ѩXvJKKObcжc[&z۔k?|*;0pp^INNƑ#GSOm۶B*Y @W(x|8+L<ُ K*Y @뇱%ؼy36oތm ] rQ ^)n)SHMMWuRY'G,_w{=z%"8w& {sjXz5~m,Z=zƍJKKqIDjxy۷#Gs=WzJ"11? ϓ!oTUUax뭷c޼yBD(pi؆1  ѣhݺ5&Mmbӧbcc.kRqpB( ̞=֭s]}իHLLC}ȑxR? iiiuvTᵆx<_ƍ) ;zݻwȑ#6mrssq 裥dC `Zt:QTT={")) ?+V 鐜 b̘1(--f^z!)){].,On999رcK`бcG#DT<3>w}B(@o WƟgjjtz*;M6AL&|ט={6T*T*:w V[g{7n܈S}!33. Jů,pj8uf3z=&NUV_~BnM;۾}{,_]t ?>GN*,,DTTUUUXl C ៻xb >Np̀999XbŵzY. ,BTBP@R!88aaa֭Ə}W^8 +$q3:V:qa;Wg}]vjbڴix7QXX/r's=ݻ#,, СC_`صkWw\PTxG0~xƙ3g̙#tHR&:N2H3370 Jq(_ݻ鐝GUVlG׮]Ν;#11.?/-[@#77?#~MM V, !Q0& BOYDw999rJO"##RSS1k,DFF9dҹsg8qt:iv1B9dv8Zjs- z}#ؤ>v;t:ތBL*Y @^!I% d%pBI*Y @7LsBI*Y @ʥ B|',@H!wRYzee%BCC.B*]F, ?)f "Em8NGm8N u **J2!H*Y @lB裸tBBI% D?{sZ+#4BXvK $RAMM ZХ4H"??jv+QUU ł*XVTWW6 555p:O /KTB@"((* ZF:Z:t App00 `EڊaB@DYYf3*++aZQQQ·nGMM `6kjjrvv~,{C  j * :FZ!!!t0^Gxx8BBBDEEr(Zl6(J\.***`X`P\\rTWWbAee%***`ZaZt:p8`p8rxnh[RɷZZRJۘ[988aaaXh9 Add$FcddBUU***PVVƷ?6_N'\.sεʷ90vECCAh4/{ш",,Y#,BVD4a_eb˖-Xd x|'NCtt4!((]"88jt\8N>mUUl6v;l6*++aPUUxf& Vjva4'W`?h4h4|jT*ݹv6"\[sszj&͆f> jkXv 'phZ>hJBۙ[GjlԮv;. !ڙ{/jdBee%aJBDDSŅ}HHF#_`w؂pg0sru֮[_f3>TWWd2%%%zmZQ^^¯zQQQ|`z  "44W[PP;._v\.F?L&~gb>(//V` aaa kvgv>ܺ^kϲ,_?9vֹ>W\\722cHH^pmRT*j}?nf3>f|ǥ 44_nm p}Z/] &@ >lr+rYV+PMM jjjP^^o8qvπp=.oxx8 ⁶¹nTVVJ>p***ٌ(zaFv/`rZn'kaq`@DD;n(//l7{m2nǒN:xsիHOOСC1g3\pBff&.]#G\}֭CJJ n6@>}`ل(Wp555xbJJJT*QXXşh'6\xƍCTTT*z)uVuٳeRɟF R\lٲ B(u]p8B) "b tԉ?^~˗/bm۶,Z=P% 7DZ|9 ֭[#55xꩧr.U4 ЩS'~d2aڵxL|f͚,(E&99eee(++Cjjjj5n7 PYYӧ{>|@ ^^ɈٳgaXp_G"`ŋQ]]˗/c_:]<300͘6mxܜ`ɓ'xpa>m۶h׮_ڂ0"r/2`BRয়~xsݻܹsߠP(pȑ:p|I|gXn] 4/ɓ'e=!-z脈07P(0w\twut8\,c֭شi6o aЧO.^xC_pЯ_?`ذaq9t?<BVs|IšgϞ$@'DĞ~z[/^`Y]voFᡇ[oF[">>NBXX>:gaaah߾=bbbPPPl:^W^لu wI[CsT, ZݨСC\!7BIqBPB!@N!H:!"BPB!@N!H:!"BPB!@N!H:!"BPB!P1&L)IENDB`astrodendro-0.2.0+dfsg1.orig/docs/algorithm/small_delta_final.png0000644000175000017500000010006312176652656024422 0ustar noahfxnoahfxPNG  IHDRXsBIT|d pHYsԂb IDATxwt?lVdd˝ !Mh7$w( C8|CBP.v↍-ےmYշO`YmZ|1hWGw-( !Lz@!@'B@N!0Ba:! tB!B( !PB! @'B@N!0Ba:! tB!B( !PB! @'B@N!0Ba:! tB!B( !PB! @'B@N!0Ba:! tB!B( !PB! @'B@N!0Ba:! tB! Ћ,8]JTEA$A0сp8p8`0p8@ A|>|>B!Z[[҂k`0rAzz:ӵ穵vşAdJE-/AVd,t9P?mmmhii(p8x<ڱ!##Z.] +կw絓sd]}!3ρﳲ,1--M{_bl6phzSԓP(}/~f~?K{{;8CzzU=u_|,Q_u_\kVV>#q(**Jpŗa]eTVVW^Aii֪mjj@HH---ځS}3" Iu [@mq.x333%Pl6dYFiii0Hv$];k֦8~D"*zR[aAX [Smժ' 꾾0l322 x}_ TkMPIzbv<σ.-_ՖׅT@vv6rrrtɲswI\z+, q}r᷿mJ 5q=nF-m6rss,-(ImIgee,Hun@@2HE"}.'iI/x +VЁt:.BXC׻ B!:b% {\.WJ\fqq'*Wѡ=WI*YCY!Ď,0tl6D" #VЁr .BXCe#!رtV*B+Y`@g !رtċH!$vdfbpd2B!c% V ]!tV.B+Y`@X,$I2!舕,0tsċH!$vdd2Ae #VЁn6x !Ď,0tsBVN!XC:! C: X! +Y`@gR !ذ BbJ:%Ilֻ B!:b% ,*++nŘ2e >h"9sp=nbOBp:zIB+Yo>;wO{ ݞBHjtc=Z_v-`ظq#lق<3XtimkkØ1chB!I,H@I&D"z=>/ 21TBHX&]e!---BI6dAJt*mmmHOO׻ B!:b% zA!DGd=31BHXC:+B+Y`@LBbJp(z)XXBm~X֔ !Ď,0l777#33S2!舥,0lwtt01LBHX:+ !Ď,0l2BHX:+BKY`@ga!!ر tB KY`@ge?B!c) Hv]2!舥,0ltVF!$6,eaف!Ć,0l|>f!Ć,0lafB KY`@yVU2!舥,0lŢwBtRPB1,.I3/"!ذ tAoB!$6,e2B!a) ,d2O!leE Elֻ B!:b) $1sVFE,zAHc) +bq%w[nEyy9f!$鱒tBXގo|Ô)SpmU! `@WEW_}XX2zEHRc% 1"t]lND\,?7t׿]!I,0lL&4Di&>}wujj*,Y{ٳg.R6- Aл BFqq1M@sgL߿_IN,eafy $.E~[oH>1bӱk.+$$9 tÁH$wEUUpBHP iaƌ.R6m63YY~=f3fΜ p[ݐ$ طo%Xje2 !ׯnj3p8q#ڼ$ cƌAmm-etXa͛1o<< HlEQǎӹJBKY`@zAȠ566ӦM 8)%Џ9s$v d!i'N(%t{:dYENNtR6әy߿%%%:'E|HAQHb9sFJ I>,eav]!v?^8 eee8qΕ|XeE$ƶ~L8( }ᨫӹRBKY`@gg#1.EQp!L0k.-b2!R6н^/|>e2(gϞرc@A`1[\rhllԱZBKY`@Bsse2(}2{AP8,{'OLl$9& dP@/..}I`%v񚚚HHc) N&ĸN<|l6{LqEĹs(R6n73:uʺ?I`1Y((((\,0lgdd   ] !1;s 1@g ]e>ޒ$aĈգLBKY`@X,phkkӻBbV[[bH"l2,0l[[[.ȲZt ti-IJJJpINEXC:Kijj(**1/$"Q__L B⅕,0t{<&^DbL WUK\QHG +Y`@giR~b<ϟdggw{ę]Z1b\aÆ1315г|_Q8dE}:XCab1@ %w w tKGIHVЁnevBڽGvUUU,J:- Aл Bbk6p@W#G\,0tl6&^DbL~%wYz]F-tBJ:НN'-TAR=tr)'L'LB+Y`@lL7!-eY_dE'OƹsҒr IZdl6x\AGFFFˤ9nرcZ +Y`@X,EQ20`OeYF3mn-t(//fþ}R+!Ɏ,0t_z!$U 1EQ8CWM0a% =u("$٩-t1YᶹK<$eDQ1n8\a% ,ĘZ[[S~%"FGmVʥb,:WI#j$I7nΟ?Є +Y`@$NC$;uesBct脰 lzAȀ;8N@X xyy9\.v54BXC:Lxaz9@KcE p!TJT+k?!jjj<Ѐ3gbʕ]駟駟ƙ3g>Q{CHkkkCfff-nUOÇY V ŋ[oaѢEرcfÇqĉ\s z-,\{Xy|fQYL-v" ۷ 5 V ezǖ-[PXX'N&ۇ4dff;k;wb`ժUضm q!r-8x `. hn=LBֆ^(Ŏ=tI0yda;v ƍr I @N&I˂T2-˗oܹsQZZ Be_馛xױtR̞=#F׾5|>_"^z%x<x<]ĢٽEdCD9[nWazkղ եL۷sݺu(..Faa#FN>wyU0y.Cv;"HB⧥YYY}B@&zCs8Z tłpcٲePO>d- w?]z~Kkd܌^f+I5AԩSi,:1 8￯eAK{<Z曐e1FzX=\?C׿?0LXf ˻<#-- v3b---B(bx7TBFo},Hu)gFUU6l؀%Kjq9@FFZ̟?Ñ#Gyf,YP׉9IV,,X=>}ܸqCkkka+Y29997Ç^^n^PPP j~HÆ DX 芢`ĉ:̛7oj&$)s}(r߄}^rw=CWl6RXCzGG/"1FWz( g5Y!*b.2F Ipԩ8WJHj`% 5%NQ,~/&\[V|x-t QsYQRRB-tbH,ea{zB7L}J$9ZĐX:+C~[`̐K$:Cb) L$@PTTs9'Ot}NKT4@WnKKKގAHH*a) `.K2G#WR$M^pz0ă(x饗p 7?9x&$^Xzkk+222.AIII8([!yӧOFսދz P< GIDb) >&8N<="E`7ۣjd2ٳqsÆ Xb^u|Ƈ!>S'$^Xz(Ի BK t!L s D?SbՏJ| /p8m,eA]e<#ػwo+Dai!1qI31AeXL]r$ q #G`ݺux'qsu^OAH tEQ|r|Z777Q"%p$t Fmm-dYFiiiTR6Kt-tYAēo IDATv㪫BK4;QTT _6 an6_'OĕW^wy ,@uu5^{~'7ܽ8l햖\Ʉ:sssk֬a6Ł`07nę3gB⁥,H=߱g|DKK 6n܈+e|ܽ8N< ł~qR8Nq$!// 1 aXx1DQDKi49 UW]ٌ?xP!$^Xʂ(].>Oa,,u pA3&GfGB/o۶ H̓,~_]%p\;w.:I,eABm݆c(//ǢEuKʈ1TWWK.C}梣`0׮]aÆaԨQ8vxm^=ku;j,eAB`ڵ9s&[nIx8s+%$GbQ Y3L;y|)M.36ly "8 Y:X/@@yB.R$X`$I¯kHO,l6mB*Ǐ >8Dfg':5j5B!رo9rӧOb[  } x[+Y@ommźuh"L&L&5 YYYxgY !) G:IH( 2 (.IlV(8q"80mBzЮ}eeeظq#DQ֭[!2JJJPVV2I)hjj995I0lذ:m۶ iii9r$|>VpX/|!"ƍݻwx[rb+yxb]OU$$:t0z-ȰgD3,gϞP]va>S,̙{l7NB.R)ĉZD2t !)ðX,HbA ƽ{ˤ7Lq=.I&LP(SN h[KY{e ̋Hv hhnraa!QL}}=N<3ftNR$XLf;rȀj$$Xʂ$Ix僭ĝ;w&.f33Yێ?#Gh1uhF3 ̙3|K&L^^l66i!z`) )",())AiivY'.X:+#l;v͛71َl?_Æ nlj'۷cG{{{$E,\ ǎz[KY@/--Ş={~zc޽8pKL6 >`"肥2.QQUUQ-|5u_E#B3gxq=$ #G!R$lڔ)S\Cbz$@5*qKZ=>PɲÇG=%k$Ν;/轑$ شiӀ~xb) )NE,Zo>&j=D"@H( B?SC:ݻpfk$iW7 ᅬ~8v#Z!bzG8t;r Q1vX9r$ݶmv;&N&E%%%hoovDa) NB[[z/2D(mD3f̀8)S=>/uѷn݊ӧX(0q&J V]#a) O>=;o'`ѢEnCQ8Oʲb9sfu,eMehu:hqZgFuu5Ο?sm6\wu?W[$B$ Qu#d( t̋HؤzQQр~NgŴ]EQ0sL?{>Mfr.2 pܹj%dXF0Ի BzU[[ ;efSuȣK.}Y[+xzkÆ CSSSLu2X,eaM())A%L _:>n-/7ow>?C%B䃐`) 謌=$l:s bZ xX֘Cy|hllĚ5k3f`5a7a5[nOA3 nN(F#,j|܆ hll@' R6әG4440{ىE1aX͝-v glkr,̙!gxcak^+^A})^}tL-._gBBM&XalqD,ea]!=((**iM?'x `eY ~8"go KrDa2KKAH AVdB3K_HeOZXzvv6"v҅:@MUutt+@wxq a2Zl:Z{oYV2D,ea{[Vff+SP al!ݎ,Fssn t [Ξ= -CMivvdYiMtVЁҔ-uuu1u;pcH%Ib&\ׯmߓc% {233ҢwtЀ\Bl6%Ԃ4GLC|ޯ^r?pn?{ŋc_wyОnԻyyyn{ȧde999[ øPVVڳxwf<D,0t4aK2z{^wkPW\khh(CũS|rԊxOz?ϰl2>|XHⰒt#l9wc%.8 Yb_%Zj˲!$I²e˰tR!$Z=bBͅdfKEQD ׳Z曱b Zad=33%E~?ʕ+.1зqB#!.˲.lذVf}(KxG%68d2l^2Oɓ'cɒ%h tvz2ÌŋnҙP===]8CX '.IBߺu+*++a6<\OQ\} c% pX2g]< BP@/DDJGCC8 ׋ - B .e̝;<y^$u];v $+Y`@g#D2ӟ|\}8t. O?4^}U9rDjC}}=rrr`28" <*u>ӧO'gmm-jkkq饗B=דeW^y%E~HbtVʒU _u]DyߏÇ㩧ҹڊ,d fΜzII ~:'}3fhco2220e]6!b% 6 Mp2T>#;xu:Q~!ۧc_l1%n#FN<۷Æ rkzH ,iTXC:+geǴiPTTD%IM7݄g?ӣԤ҂ [)1@/ӵ@AQ[[HⰒtժb q-hD"xꩧoz4Ν;m 2L\HKKCuuoKQ|1cF@i(={68ƍ>Xdd2 bէ~@ %Ktpt(;@II ~ӟQrhnnuwH0̉۞$aԨQ8vؐoMMM={v1i$l޼y#J:9aCdժU7nJKK7(x';ѣ 6%%w%l[(b y 8qbz<.2lٲe#JP3"&EQzj\uU]:7J/,,4t5ЍEcƌAUUՐo@^^^5\y̞=GebPVNo޽8}4nt g\zM6@p8)$I˜1c؈!1q6\OQTTTv=b% 芢0B&UV`]t(oG^^!{744\}L3%EQ0zhÇt[„ zrgϞ!$+Y~z|[|---G}TbnKLgժUXxqat(+Wv(KM:gϞzQ&YIUrp7%IBUUƎs z,ca% :c…Xv-~<҂ӧ^1w\46v.1c dgg#33Ǐߏ)StG"XքM;y$0ƏIߏohnnƗ_~K_ٳgqy8p6l6A@ `bp=APQQÇ31Ѩ .i}Æ (((e]Bdeeaʔ)hooמkGEYY, .\V455Anl6#''Ң(b`Ŋxz,cĉ$JAq¯3fhY6Џ;'jjܹ .o~,]cƌ_q 78DX.KYv-,X-GyN'#73gYfjllDnnnR@HL T(bĉ8y$~l=^n֘1ctԧf]rB. ՐeǏǒ%K/_ıcrp1xtpq??myl6{Cv13g`߾}׾BNT]v㥗^wI1M-tABe&L(CP1iҤ>OrPTTD_۶mӲ %mr-|u]z 7x#O>j?BXfve2#G"''(ZZpp Ygd2a:(qx믣9^&SNT@: rbF ٌwa:tp=Q1a„!-@ztjYŖ-[cL6ӦM{/!hW` qgy1Y|'9s&nwW;2(7x_*&%EQ&E?Oxf;vH:t `ҤI=h>ӸGJ$m leϞ=K!ÇPQQiӦ|svYV.$p8իWw.v;z),[ 'NN&>|xRCmK 6m6z<}8Ǐ9 ד$ eee}dARzrssO`ժUؽ{72{lݺ>_} :Js=7*#t Yz tQ1yd߿?W*݋#Gn멁QWW>X&=Zp8)`HKKvbN'*I}Y\۶m̤Kt]@2e `߽{7*++{p2Z+Y`@D"}mܸs@ n:QApwbwPÃbIRe^~)I&"((bϞ=p#F8TWWǭ>VЁi28E7o… {t@*:_ױ=≦( ihhEiii\;9r@ӦM뷅p=Պ\̏:VЁY޶oߎ@ /0t?3`ǎ1dUUUQFl8snӥ.N/"nsΝ8'Oy ד$ %%%$tVmÆ HKK.&ӉB!/^ owUEG|͛7cŨr]&ۑ h 5tc֭]v(5kVW@'2FYqAGJ:[[[mٌ~DՎSk׮ɓ'1ydO?g*G"l.@@5kv9ߵc8Nm d^qq1P8tuJ͛7cԩQ̓<Ӊ Rڵ sފYf7@{{{\10كٳg'zXX }APYY={ c1}~p=u=u J$,CMQ~&EQ_~{T-ˡNT$L&\9~_{}݇Sbĉ5jlh_Ю]0n8L<?~|B~ӦMp?~|%9cEǭ X,l޼9@B}}=⊨:nF;\Oӝ= t9IWׯq5kVT{dn&+e@N7pnX,X,VMMMhllDCCq9{/ (**ŋo|\s͐ռj*,ZH.f1Y``2tz`X0uTl۶ <@Lc˖-8ӧOop=IPTTDRKY`@ommEffe͛7cҤIx<|>?Ӊʲp_E/3L0ڿp;wg}իWc())~ЁΎq]v{x>u\O2\OeeXKY`Nqݫ[K/rӉDeH$`0<ɓ'駟[bx'0vXqgAe\uUIuW'F 1K̚5 555hllw }p=IP\\ӧO ҉,HBPS@555ȑ#;wnJ(PZZ_Wسg***p;˴VɓKQ.į~a ӧO9oqv$I>|v"HRKY@Nb0gΜ['zO':P999Xb׿>CEEŠ|p뭷v5,fg|dggti{ݺusF>p=D,֫D,euV1QL2L':X~/ݻK/_c]㎤R[A>kK)StzjL0QLzPb;wnR6#3/o={:xNWƭފK_}?X`ANh}:F?>^nu8x^_⪫TI,ea=v]FJy;wĜ9s(WEQ::_,A9sP__?JQSSz}Z(,,URKY`@`b2~=ݻpgpl7ߏG}l2yE~#L< ,H*EQඹVYY PVZ͆.l@- דeŨR6Yh۷ofiρܟL`v~m{G7͛K/%mW!7(++POիWcΜ9Q3p E#GK),02LL/1ip܈mdEQ_QȲd`Y7x#.2|G(--ҥK1gB!X,pO0Qp-h.܇{K.Wm9wQTk@ Dd*xQ+n3E7td\FEAv@a 1^?:U&@Bݩ>HDI*AR$K z y+.p0 &9 E;L N 3o﷉693Xęs<8!QEN A&2$YBH !!+.^ɫO㕼հx|X2L6 _u;Ld j <م8sނ0sfMvlX5;9`Z<‚C@tU*C! r"/~KS$K(J yQ89-nA/ "(ԩBvލnݺUyUФIxҗ # %%pE>1+Fznr-ΆkՙWy8 MM ʢ^3櫽X(- P,?/C@ |=+~x$E(^ I 2$UEZQ0`2,X8+gx`MzKB[ hrމbԉe/|H9 Z6Q ~z'p wG z7WFuZf}&~(*A.fa#QǍ7ݎ7V)\5ײeKÇC1+襥x-ٽ{78C6mjա ^ j^ؚx@`|0P E5.|m/|qqߗTUE Ab6'Xae]UU{lذ?|ٳǏtbAÆ qߋy1+@NW͊жmۨZjg׊ӥVp,Ym3$;Dff&$I(;w1b6lXWp=c܁ju?Jd1ĬADe B݋{$xX';;j5Ca`ʯ2`q $Iŋqת3!&I=N۶m})HZ(JTudggjI&6%`UUѧOp¾e˖  ڂްaCa޽Wt_ʵHZ N7݋n0 _5nl0`>33B^udddUVWt}BD^v;~_~M Fc|ZBGkơCJ_0*A8MSߏz;w֭[_}~g<쳵v!v8&m_ U&Qec[n ͆m۶QAGI SEvv6AV.aH۪/TB! BJ!5EURC)!H V}Ze*#ߗO_ȇ/ /v#+6YyO_Kŀd$Kx sG,F҂ttEcUcݻw#%%f0PUoy+\#Kt/֗U,I` .4s6U <8Lpל3oM!ɒ`:*s!B9]tQ$Iҥ ̙BHja$-YA> {A.E" pe+#V;<1xTS"|s?Fl#j УGzRJc$-YA7RTv! ;;{(Z2d?>Ʀ0F຦SNm۶QA'I bvؚ(6OFaa!]e-ơ+]Á6m)я fbz5X#++ pM7EJ+UIеkW*#iA @II`ZhԨQMD\Bڵ+"mI b6g::S5ٿ?=j6(WGe?C͡T#iAvZ(,,`y6͕x6{xU/^eTӼ doaW0 k,[וlB*K +?)fkժ}7PF҂tӉǏ{ #A lx3NTYE$*y%|, B *CB2B BR d ER e!5U(bex3ăXf_ؿ` H 09MN:Ui4rPF8, "—#_GrFKߪB )V<5'ra_ZhO++8S8v$+DNqfw:iYAlz5k6eC}fW8a7q[*ftkL80\f96\@ Q AY/IT*A@Uo[xݦb+X89!:D]5{y3_n-i⮄p!T™6+?%Loʕ[>.o},EBʇ+[Xh']/VkfL!X `++/D89i7tY fReAIri/{Ϋpb&qQ""ěҒE ¾tmlD@¾/Û`xna6E. mʅ-Wݷo ۯo@8p!ye ouaI3qa_Dp|\>/2%;(jY!͗}2Boi4,ڕ!XX-$X¢hw." k( ҅{_/M<|>hrkX-(8TyP$%U@BBPzq?#"e,@R.(*AW *M 4PCU巠A+ZhWp6qلpP+5naprs)Jp, ײBސ{}D4Tk%9%ᖜ~252у-MB8HİpiAh&DK8ZW%<3);m]a KU(@ |V 4heGre^Y׼V40֊Vk;C x~9>ܲc3ߵ7Шc#p ܯ*o<{_{]_kzFtSG<9Nı, &"T@bP|;sFvK?޳^=-7 f [YAZ|p6qis~GA jt'p\.:Z° ,X-pUזd @:n}9ؒm%۪ށ[cq8:? -@BJr, L5G{^tO#,?rw?CѨc#=@ 3ډ<ȇ5 R:Bۛ'N+8~ oW1Ĭi2/h׮ A t|ӧ/_~}i<hܸ1ШQ#$&&'ٳgڈĦ7 @}(>^l_gv ǶGV"M"Lpmdz=Gqf/F$]v!{Q6exq_IDATbȘ 7A:9ػxošt`$-NqˋQ֭[a6i Nk#//sń `Z1ft ,b۶m5kϟ/  &i?ߎ~)hܱ1]o{-C]J>&ZAAh7¦W6qhE@^-}Hn_ on]"gsJN`{j UE5$ Eڔ{%wqG͠D Dڌz q䣏>e+Vm0g f3 c:_E^^uiS(z͐!C~V֨cbڵo0u F:˲x1x`13[iF҂tX͛7at=ҦP 1aΜ9WӦM… 1|X a޼y~!CSXm1ĴvxvsV^B*txp]waĉ`-iAGQQQ͈:֬Ydt!ҦP(d2aر5kV>e޽K.EBBBǪDr?a#77ʚ1Ĵ\.CtkVZ~USb:1qDbWt?{g[oZ\3cJJ ^y̘1[l"#Fт.N]l 6,ҦP("%%k}`=z4}jS9|It Ǐ$I>b-iAw:1?\Bϟ7ҦPΘ8q"oߎ|> 6 ͚5G}T!*Qu,q9s&87|g1-&QY]( K >(FJAǠ_9Dzz:233k|O<#G`Ű>rs7駟ƴiӰwoˎ hAL V٩ ֯_SNa̘16бW˲xalڴ}Ox.{VZ(5W}(Zӂ.b=+h߾=tiS(Q6w:w &Tٸq#}QOرck|?BjJlٳO?a5_}(Zӂn2 #ի1eڴJ$4] ,b̙8tx*ݳg?gϞjԴݺu_phAL j5swAF0rHBR0ɽHOO_dffo1۷oG^ЪU+,Y ^mU6mZl|`Vר/E bZEQD 3gz)R) CL 4w>sݷ$w{m֭}jaX0oDA "mFDYz5,Z&)P(# k2  0ڲ a1rG BdUABB@@m/v܅[Z3>Q Gy(TPO5}290 !%TqƍÎ;ciӦ(Zӂβ,TUƍCFFrY8M!:*SUUi+` Z qhYA9YR!fMH1Uj^㶞;TpmQm_y?*rgˀA*& p{?c >}{/[y睵Nb-yAgٳifeq]p]XUY&VZ-š=+kI5[+"'ꢧ s]% l{Qd <#Fԡő(ZӂZ /`ŊXb6mis(r aPw׼$EJ: X"0ufX<FxTg-Nq!/7ĠA"mqڙQ lƼykFdCY~~>3=z »ヒVZE< %PZ(ر#:vi33a_ ͛?O e˖zw9޽K.ltM(**_| &y<֭[l6Wqɒ%5jmzٴi6l0y^OHχ|8pjŰa0w\t=_BZhsԲ-ZY_mN<[oUG=rssyII >C,_ѧOӧj$՛ كٳgYAq`Y[>G+\8q,c̘1x'Ѯ];\.l۶ }ŧ~yaݺu/2xߏ!CD[VI&aҤI6B1$6`3a~z|TaF={X,lٲ;wu]ߏxm'ND֭ѫW/|/V\ Պ,OHNNp`0A` B ahJ@+˿VN-[Ğ={p $&& dffGEbbb&֭[_~B!B8Fтt r̮ZzaZ> BoQ~ Xs3 Be1-F( R{1-8 B&Fт"}9 B&Fтt UP(J1PA7HP(c-iAw݈ B Fт8HqY^(˥V U~>Wգ>hiACRRR͠P(J1Ĵ~C=P(J1Ĵ{^ B8Fтj Q(˲HMME )Qd¿o}}(Z* fsM,f 8uJKKQRR@ @ χ@ ׋|>~$! " P(UU(~/ "f3L&xlblbA\\, N'l6L&,툏nj0W 55(ek PPP χb~~x^@`%%%x<`0Y(gmKne,A˲y(b@E8f8NX,8j">>N p:HJJr(A0qD~pWk?,^~ϟGaa!JKKtzvQ\\ χP(I IdY8ݿ @pukirfrjDbb"G#,EEE())Aqq1 tk`0߯P(Y4]/a\ZZX,Zp8zIIIp8p:*! - 0+W;#o}l6, d2`2gt AtE/-B*TUE(($ >`$Eb^%%%˃,zBjꅐ3v]x׀ 6-ib t2mII ~?~?n7~?JJJzua񠨨> nA O6ݮgfQ!_AwZ!Z]+5KKKu~? <.zP6 v]4klօVۯN<σeYZ)l_Q=e$g(/pEEEpz\ZZ 瑐U;N8Vݮl& ViD٫YF-x<w(--EQQ kχBx^=ZV$%%iZaa886ɤyP dYH{B!=+**҃1[!gqq1 !2f3v^6\.\.v- gykyPK}\~BnwI\ ֵA !!Aobb"tB=8fYO^+~=i/-iy ??_n0 8=j>aY6/eɓ'1tP|Ƭ˲' -q|> ( " P/8Ĩe"@PE|@ZKui- x}KpvX<ʠXZ-L+kZjZغ\.]v;5qh@aa!<^hjVkAXjA;I IRVjV*/PZBbb"tlz\W$I|-*..ӸGaa[h\ͿtU7Z@xa0Z 0B5ݮ|4h{-Xv!_妸B%Z[+C50x0a„H+&fBP(#ӽ o&7nݻw>|ƍɓ$ג@ cƌB6'ؼy3~Z!b=9s`͑6%hٲ% UUkӋ- AbŊ[cJԳtRtЁB I㉰CNNq8DEq@{'ҦE ˗/' A.2j(j͊:{9""EQOGȦM"mZpwdلB?$%%w}7^{fΜ'ܹsX|9I&E!;;@>6lؠ?+ꫯ"mZT@;#EѣXv- Gڴc۶mҥ /_GꝺnH5<| ;m۶aÆ 1cva+c*Q(8rHA~,\'ND ]v' ĉ>qͅ,zǸ֡jqQ8qw<:ui*t!}ؠ7% qʕ+ѳgOh HJJ_I"mfL@=ʘ={6RRR@g8''^M6~m<29+hѢYf_~hܸ1233ѫW/yQ@ ejۑ4f;v308>o޼9Xh~Xk׮ѣquaѣG͊Z1M423-jEZZ6nܨ&R>T zh۶-nV96->}:6lؠs8ׯ_͊9ssϡe˖zIaa(E3g[L:7x#edgg]vW42Љe(ѣXx16nQUV6R 믿ƚ5kO?aСxgٺJMNP(! B* B*J=GQlݺٕ?bȐ!~ǏǏ?sc?39sIP.}ND)n< ֯_ǏeY[oxa1֭rrrq7nk/>#FiSNjh= <>?/0|<С~̝;ÇL4 F^ƱX,Xx1 vEP:ڵ W?Ob޽|ӧn7_ٳgj*;v mڴAFF>^//}aȑzmp9pG_W,XWƁܹsǔ)Sc|w?~<֬Yزe F\Wpk֬ٵsDlY R%6l vaȡCHQQi֬_,=z+WBIOO'~;9qDc!/Y  ,Y+н{wA!駟&O=T˖-#v!&RZZJ8`?Bz:طoN<xǏG֭1{l3)))9!##k׮|qmaq3 e/SQaMEܯ_?l޼ϟǾ}?oŲe˰ey5CP.GD),YYY֭<NW_}`[9n+WkHNNs={w}7n&l6@BBBW999HHH_QFpT8fܹݻ7, A@zzKӦMѼy:B#HKKCNK(%ND1?Si1n8BжmۋGrwxW!"kW\.> 3 ˅-ZYf8z(lقݻb\ttܹ_B:B1!m[Y!BvZP( :BP(vP( PAP( PAP( PAP( PAP( PAP( PAP( PAP( PAP( PAP( PAP( PAP( PAP( PAP( ?P*IENDB`astrodendro-0.2.0+dfsg1.orig/docs/algorithm/simple_final.png0000644000175000017500000007443612176652656023450 0ustar noahfxnoahfxPNG  IHDRXsBIT|d pHYsԂb IDATxwt?lVdd˝ !Mh7$w( C8|CBP.v↍-ےmYշO`YmZ|1hWGw-( !Lz@!@'B@N!0Ba:! tB!B( !PB! @'B@N!0Ba:! tB!B( !PB! @'B@N!0Ba:! tB!B( !PB! @'B@N!0Ba:! tB!B( !PB! @'B@N!0Ba:! tB! Ћ,8]JTEA$A0сp8p8`0p8@ A|>|>B!Z[[҂k`0rAzz:ӵ穵vşAdJE-/AVd,t9P?mmmhii(p8x<ڱ!##Z.] +կw絓sd]}!3ρﳲ,1--M{_bl6phzSԓP(}/~f~?K{{;8CzzU=u_|,Q_u_\kVV>#q(**Jpŗa]eTVVW^Aii֪mjj@HH---ځS}3" Iu [@mq.x333%Pl6dYFiii0Hv$];k֦8~D"*zR[aAX [Smժ' 꾾0l322 x}_ TkMPIzbv<σ.-_ՖׅT@vv6rrrtɲswI\z+, q}r᷿mJ 5q=nF-m6rss,-(ImIgee,Hun@@2HE"}.'iI/x +VЁt:.BXC׻ B!:b% {\.WJ\fqq'*Wѡ=WI*YCY!Ď,0tl6D" #VЁr .BXCe#!رtV*B+Y`@g !رtċH!$vdfbpd2B!c% V ]!tV.B+Y`@X,$I2!舕,0tsċH!$vdd2Ae #VЁn6x !Ď,0tsBVN!XC:! C: X! +Y`@gR !ذ BbJ:%Ilֻ B!:b% ,*++nŘ2e >h"9sp=nbOBp:zIB+Yo>;wO{ ݞBHjtc=Z_v-`ظq#lق<3XtimkkØ1chB!I,H@I&D"z=>/ 21TBHX&]e!---BI6dAJt*mmmHOO׻ B!:b% zA!DGd=31BHXC:+B+Y`@LBbJp(z)XXBm~X֔ !Ď,0l777#33S2!舥,0lwtt01LBHX:+ !Ď,0l2BHX:+BKY`@ga!!ر tB KY`@ge?B!c) Hv]2!舥,0ltVF!$6,eaف!Ć,0l|>f!Ć,0lafB KY`@yVU2!舥,0lŢwBtRPB1,.I3/"!ذ tAoB!$6,e2B!a) ,d2O!leE Elֻ B!:b) $1sVFE,zAHc) +bq%w[nEyy9f!$鱒tBXގo|Ô)SpmU! `@WEW_}XX2zEHRc% 1"t]lND\,?7t׿]!I,0lL&4Di&>}wujj*,Y{ٳg.R6- Aл BFqq1M@sgL߿_IN,eafy $.E~[oH>1bӱk.+$$9 tÁH$wEUUpBHP iaƌ.R6m63YY~=f3fΜ p[ݐ$ طo%Xje2 !ׯnj3p8q#ڼ$ cƌAmm-etXa͛1o<< HlEQǎӹJBKY`@zAȠ566ӦM 8)%Џ9s$v d!i'N(%t{:dYENNtR6әy߿%%%:'E|HAQHb9sFJ I>,eav]!v?^8 eee8qΕ|XeE$ƶ~L8( }ᨫӹRBKY`@gg#1.EQp!L0k.-b2!R6н^/|>e2(gϞرc@A`1[\rhllԱZBKY`@Bsse2(}2{AP8,{'OLl$9& dP@/..}I`%v񚚚HHc) N&ĸN<|l6{LqEĹs(R6n73:uʺ?I`1Y((((\,0lgdd   ] !1;s 1@g ]e>ޒ$aĈգLBKY`@X,phkkӻBbV[[bH"l2,0l[[[.ȲZt ti-IJJJpINEXC:Kijj(**1/$"Q__L B⅕,0t{<&^DbL WUK\QHG +Y`@giR~b<ϟdggw{ę]Z1b\aÆ1315г|_Q8dE}:XCab1@ %w w tKGIHVЁnevBڽGvUUU,J:- Aл Bbk6p@W#G\,0tl6&^DbL~%wYz]F-tBJ:НN'-TAR=tr)'L'LB+Y`@lL7!-eY_dE'OƹsҒr IZdl6x\AGFFFˤ9nرcZ +Y`@X,EQ20`OeYF3mn-t(//fþ}R+!Ɏ,0t_z!$U 1EQ8CWM0a% =u("$٩-t1YᶹK<$eDQ1n8\a% ,ĘZ[[S~%"FGmVʥb,:WI#j$I7nΟ?Є +Y`@$NC$;uesBct脰 lzAȀ;8N@X xyy9\.v54BXC:Lxaz9@KcE p!TJT+k?!jjj<Ѐ3gbʕ]駟駟ƙ3g>Q{CHkkkCfff-nUOÇY V ŋ[oaѢEرcfÇqĉ\s z-,\{Xy|fQYL-v" ۷ 5 V ezǖ-[PXX'N&ۇ4dff;k;wb`ժUضm q!r-8x `. hn=LBֆ^(Ŏ=tI0yda;v ƍr I @N&I˂T2-˗oܹsQZZ Be_馛xױtR̞=#F׾5|>_"^z%x<x<]ĢٽEdCD9[nWazkղ եL۷sݺu(..Faa#FN>wyU0y.Cv;"HB⧥YYY}B@&zCs8Z tłpcٲePO>d- w?]z~Kkd܌^f+I5AԩSi,:1 8￯eAK{<Z曐e1FzX=\?C׿?0LXf ˻<#-- v3b---B(bx7TBFo},Hu)gFUU6l؀%Kjq9@FFZ̟?Ñ#Gyf,YP׉9IV,,X=>}ܸqCkkka+Y29997Ç^^n^PPP j~HÆ DX 芢`ĉ:̛7oj&$)s}(r߄}^rw=CWl6RXCzGG/"1FWz( g5Y!*b.2F Ipԩ8WJHj`% 5%NQ,~/&\[V|x-t QsYQRRB-tbH,ea{zB7L}J$9ZĐX:+C~[`̐K$:Cb) L$@PTTs9'Ot}NKT4@WnKKKގAHH*a) `.K2G#WR$M^pz0ă(x饗p 7?9x&$^Xzkk+222.AIII8([!yӧOFսދz P< GIDb) >&8N<="E`7ۣjd2ٳqsÆ Xb^u|Ƈ!>S'$^Xz(Ի BK t!L s D?SbՏJ| /p8m,eA]e<#ػwo+Dai!1qI31AeXL]r$ q #G`ݺux'qsu^OAH tEQ|r|Z777Q"%p$t Fmm-dYFiiiTR6Kt-tYAēo IDATv㪫BK4;QTT _6 an6_'OĕW^wy ,@uu5^{~'7ܽ8l햖\Ʉ:sssk֬a6Ł`07nę3gB⁥,H=߱g|DKK 6n܈+e|ܽ8N< ł~qR8Nq$!// 1 aXx1DQDKi49 UW]ٌ?xP!$^Xʂ(].>Oa,,u pA3&GfGB/o۶ H̓,~_]%p\;w.:I,eABm݆c(//ǢEuKʈ1TWWK.C}梣`0׮]aÆaԨQ8vxm^=ku;j,eAB`ڵ9s&[nIx8s+%$GbQ Y3L;y|)M.36ly "8 Y:X/@@yB.R$X`$I¯kHO,l6mB*Ǐ >8Dfg':5j5B!رo9rӧOb[  } x[+Y@ommźuh"L&L&5 YYYxgY !) G:IH( 2 (.IlV(8q"80mBzЮ}eeeظq#DQ֭[!2JJJPVV2I)hjj995I0lذ:m۶ iii9r$|>VpX/|!"ƍݻwx[rb+yxb]OU$$:t0z-ȰgD3,gϞP]va>S,̙{l7NB.R)ĉZD2t !)ðX,HbA ƽ{ˤ7Lq=.I&LP(SN h[KY{e ̋Hv hhnraa!QL}}=N<3ftNR$XLf;rȀj$$Xʂ$Ix僭ĝ;w&.f33Yێ?#Gh1uhF3 ̙3|K&L^^l66i!z`) )",())AiivY'.X:+#l;v͛71َl?_Æ nlj'۷cG{{{$E,\ ǎz[KY@/--Ş={~zc޽8pKL6 >`"肥2.QQUUQ-|5u_E#B3gxq=$ #G!R$lڔ)S\Cbz$@5*qKZ=>PɲÇG=%k$Ν;/轑$ شiӀ~xb) )NE,Zo>&j=D"@H( B?SC:ݻpfk$iW7 ᅬ~8v#Z!bzG8t;r Q1vX9r$ݶmv;&N&E%%%hoovDa) NB[[z/2D(mD3f̀8)S=>/uѷn݊ӧX(0q&J V]#a) O>=;o'`ѢEnCQ8Oʲb9sfu,eMehu:hqZgFuu5Ο?sm6\wu?W[$B$ Qu#d( t̋HؤzQQр~NgŴ]EQ0sL?{>Mfr.2 pܹj%dXF0Ի BzU[[ ;efSuȣK.}Y[+xzkÆ CSSSLu2X,eaM())A%L _:>n-/7ow>?C%B䃐`) 謌=$l:s bZ xX֘Cy|hllĚ5k3f`5a7a5[nOA3 nN(F#,j|܆ hll@' R6әG4440{ىE1aX͝-v glkr,̙!gxcak^+^A})^}tL-._gBBM&XalqD,ea]!=((**iM?'x `eY ~8"go KrDa2KKAH AVdB3K_HeOZXzvv6"v҅:@MUutt+@wxq a2Zl:Z{oYV2D,ea{[Vff+SP al!ݎ,Fssn t [Ξ= -CMivvdYiMtVЁҔ-uuu1u;pcH%Ib&\ׯmߓc% {233ҢwtЀ\Bl6%Ԃ4GLC|ޯ^r?pn?{ŋc_wyОnԻyyyn{ȧde999[ øPVVڳxwf<D,0t4aK2z{^wkPW\khh(CũS|rԊxOz?ϰl2>|XHⰒt#l9wc%.8 Yb_%Zj˲!$I²e˰tR!$Z=bBͅdfKEQD ׳Z曱b Zad=33%E~?ʕ+.1зqB#!.˲.lذVf}(KxG%68d2l^2Oɓ'cɒ%h tvz2ÌŋnҙP===]8CX '.IBߺu+*++a6<\OQ\} c% pX2g]< BP@/DDJGCC8 ׋ - B .e̝;<y^$u];v $+Y`@g#D2ӟ|\}8t. O?4^}U9rDjC}}=rrr`28" <*u>ӧO'gmm-jkkq饗B=דeW^y%E~HbtVʒU _u]DyߏÇ㩧ҹڊ,d fΜzII ~:'}3fhco2220e]6!b% 6 Mp2T>#;xu:Q~!ۧc_l1%n#FN<۷Æ rkzH ,iTXC:+geǴiPTTD%IM7݄g?ӣԤ҂ [)1@/ӵ@AQ[[HⰒtժb q-hD"xꩧoz4Ν;m 2L\HKKCuuoKQ|1cF@i(={68ƍ>Xdd2 bէ~@ %Ktpt(;@II ~ӟQrhnnuwH0̉۞$aԨQ8vؐoMMM={v1i$l޼y#J:9aCdժU7nJKK7(x';ѣ 6%%w%l[(b y 8qbz<.2lٲe#JP3"&EQzj\uU]:7J/,,4t5ЍEcƌAUUՐo@^^^5\y̞=GebPVNo޽8}4nt g\zM6@p8)$I˜1c؈!1q6\OQTTTv=b% 芢0B&UV`]t(oG^^!{744\}L3%EQ0zhÇt[„ zrgϞ!$+Y~z|[|---G}TbnKLgժUXxqat(+Wv(KM:gϞzQ&YIUrp7%IBUUƎs z,ca% :c…Xv-~<҂ӧ^1w\46v.1c dgg#33Ǐߏ)StG"XքM;y$0ƏIߏohnnƗ_~K_ٳgqy8p6l6A@ `bp=APQQÇ31Ѩ .i}Æ (((e]Bdeeaʔ)hooמkGEYY, .\V455Anl6#''Ң(b`Ŋxz,cĉ$JAq¯3fhY6Џ;'jjܹ .o~,]cƌ_q 78DX.KYv-,X-GyN'#73gYfjllDnnnR@HL T(bĉ8y$~l=^n֘1ctԧf]rB. ՐeǏǒ%K/_ıcrp1xtpq??myl6{Cv13g`߾}׾BNT]v㥗^wI1M-tABe&L(CP1iҤ>OrPTTD_۶mӲ %mr-|u]z 7x#O>j?BXfve2#G"''(ZZpp Ygd2a:(qx믣9^&SNT@: rbF ٌwa:tp=Q1a„!-@ztjYŖ-[cL6ӦM{/!hW` qgy1Y|'9s&nwW;2(7x_*&%EQ&E?Oxf;vH:t `ҤI=h>ӸGJ$m leϞ=K!ÇPQQiӦ|svYV.$p8իWw.v;z),[ 'NN&>|xRCmK 6m6z<}8Ǐ9 ד$ eee}dARzrssO`ժUؽ{72{lݺ>_} :Js=7*#t Yz tQ1yd߿?W*݋#Gn멁QWW>X&=Zp8)`HKKvbN'*I}Y\۶m̤Kt]@2e `߽{7*++{p2Z+Y`@D"}mܸs@ n:QApwbwPÃbIRe^~)I&"((bϞ=p#F8TWWǭ>VЁi28E7o… {t@*:_ױ=≦( ihhEiii\;9r@ӦM뷅p=Պ\̏:VЁY޶oߎ@ /0t?3`ǎ1dUUUQFl8snӥ.N/"nsΝ8'Oy ד$ %%%$tVmÆ HKK.&ӉB!/^ owUEG|͛7cŨr]&ۑ h 5tc֭]v(5kVW@'2FYqAGJ:[[[mٌ~DՎSk׮ɓ'1ydO?g*G"l.@@5kv9ߵc8Nm d^qq1P8tuJ͛7cԩQ̓<Ӊ Rڵ sފYf7@{{{\10كٳg'zXX }APYY={ c1}~p=u=u J$,CMQ~&EQ_~{T-ˡNT$L&\9~_{}݇Sbĉ5jlh_Ю]0n8L<?~|B~ӦMp?~|%9cEǭ X,l޼9@B}}=⊨:nF;\Oӝ= t9IWׯq5kVT{dn&+e@N7pnX,X,VMMMhllDCCq9{/ (**ŋo|\s͐ռj*,ZH.f1Y``2tz`X0uTl۶ <@Lc˖-8ӧOop=IPTTDRKY`@ommEffe͛7cҤIx<|>?Ӊʲp_E/3L0ڿp;wg}իWc())~ЁΎq]v{x>u\O2\OeeXKY`Nqݫ[K/rӉDeH$`0<ɓ'駟[bx'0vXqgAe\uUIuW'F 1K̚5 555hllw }p=IP\\ӧO ҉,HBPS@555ȑ#;wnJ(PZZ_Wسg***p;˴VɓKQ.į~a ӧO9oqv$I>|v"HRKY@Nb0gΜ['zO':P999Xb׿>CEEŠ|p뭷v5,fg|dggti{ݺusF>p=D,֫D,euV1QL2L':X~/ݻK/_c]㎤R[A>kK)StzjL0QLzPb;wnR6#3/o={:xNWƭފK_}?X`ANh}:F?>^nu8x^_⪫TI,ea=v]FJy;wĜ9s(WEQ::_,A9sP__?JQSSz}Z(,,URKY`@`b2~=ݻpgpl7ߏG}l2yE~#L< ,H*EQඹVYY PVZ͆.l@- דeŨR6Yh۷ofiρܟL`v~m{G7͛K/%mW!7(++POիWcΜ9Q3p E#GK),02LL/1ip܈mdEQ_QȲd`Y7x#.2|G(--ҥK1gB!X,pO0Qp-h.܇{K.Wm9wqRԇ_}  &(D(*QQ1 (oFbi1 (A*A X9DDS~\fQ{'}q>ٙy>S>իS& ϟc=V{soߞO>^!d'eAuP_}{nNjI|. ~=TUxd~ŏTxd^[PD<0MM z=aB|7nX~P3TBY3:ŋ3h N;4NZ [ou<#mZ݉T%VIjI(RF7tT]%'k.3ttC0 zYψw"+.ERPdۇOp{y^Y!ϛG_Hshj6% *?hG1cd'1}gR)۠zitԉ;wRVVFaaa?K,'eAz]6 ¾8֭ooP+nf~mQ(EUZUSIi)RUTbDQWd!OKu<>\.~-%ٞD7Q4j*i#MJO15fSchFMx65fe&>(<]K/6.~bj'ߗO/"# j*qܸ z IjI4]#%HjIZT[SJZM,*Y{ps~42AuwN:fŊuY}ܹs9h׮]}ziҮ];֯_r IY&ҪU0 N;A's 7. hg|us\hFix:NZI<"UA" ԒI-I<'D(rz15hjvH놎Krrp(RpKn'PU_WL0UUx<}޻Kaa!={$xzۢt⧦itؑsRekvl{ҥKN4rVs|ߺ^84M&W_9a0uT^W֭[נ2IYJ*;VLdt%+8'dΝ;Y`~_d [laذa 4M|n_/4O>׋n#,@wҙO?Dyy9;w=ȲLY/+wWcB4Ϝ9sԩSiժ?iݤ5Zu]SN$INʂZrݪU4BIDTTXQJY|9۷o̘1A'YL+{Q5t5k4spRl뺞U'v5V"p 'd(YE$*S=) ào߾Ȳ_뱙3gRVVW_]I4Ss7k֌ҺweD7Nʂl8K<ڶnJYYe-lj-ӡCx!9) r6~gc5z.)bFQU={@oD9pC?Q`ڵ?LE1\ݤizIqq1x<IYkf8#:ڵk9N(W7ӻwo4M>tq:pRlт7rI'9f4%Čru׶m[6m?LE'eAz$qn4Mt"pabFKۗ?8EIY ȬLNWRRByy9ݻwg01\ݥR) +عsg# g9Riڵt1%2I(Wwapy0F8$'eAM| 4oۚz:0}t{=ޟ>Gfڴit9{ g=N^gѣGLC#Kב\r%^: ֬Y}G_21bzͥ^ʤIz'eAv;fWˑf&K,sAULG0k8˝4*ps9vWUSO1qD?iT$m$IL:ѣG3fr5Nʂ tIH۰avgϞ8q1H&\~,Xmk `Ĉ̛79s0rHˠ՜橧bРA :<*W9) r6Yg7iK.E$wY@$ %&t]gȲ̔)Sgwy=zs VB/EQ&O~3.rGNS P(T%+?uF tQ,:Kt1@ A:uyssxL$bj8{Ш*_;v/[c,@wҠG|G 41.G"4:dCrJ֬Ys~`ذa\xvmLeeD|\{m àYfObԩ|GGlS I&޽;:K, /P?d&}!??7x㈼\y啄B!&O|ޥ$ID(A%s4]v>r#B!9gYg޼y4mڔSN9%E8!!t]gĈL4鈌~b f̘u͸5K^>,yX^zm۶qv#dANz~~#N8Ldܹ 0@΅Z\K@T1cPVVƌ3뽦NK/?Ouϵ.7=|i4mڔ{^x%KV#dANf9RYjC q3M0\ բE K/XnGf 6$I^{X*o{3&ƞpJtG"\coӦM;OƄZdf N"_"of,^ޯ\qjՊNǻ]y޼rb1^~e֭[SO=U5fNɂtVّiW^yAw IvX.0 C׮]0aB_뭷qFO^a.T5o t4iӦ wy'>(Vw+dANf9,X?ȵ^+.Wj1M!D0qx.\ȧ~Z׽kk⋴lm$IĵxM&}ݴmۖ#GL)YӁxrX>oӇm2uӸMH$iӦ ]w9% r:=ԺXv-SLw#Z‘g&aoh**H$q\r% <7x\UUyg9sر#~aْ$6^oj*n}~c,ɍeYQ஻OdԨQbw_ifkdn{4M èu$r[ =DӧO禛nbĈL8g,_2ƍO<쿎zz Y]aжm[^|EF/~ FuX9芢hh~!ߙ>}HF8 0{TܒAvɸ]5??^CP =xe/_$ihJ$ rpPde!wCu3T=o4 6HG +{QdP8z|45'mIiTC+Q5*Uj^LIDATJUX*F4%>JY*^|n B&rZ TӋW0Qddk*ҊqgC7uZMHh Z*UŖ-RVKǨJwg?n$%%4{F_DH ٻ>>|@~ڭů:)=EBOTtlґǑj!x<[oСC袋2e W]uU+9% r:sx>Yf I8zR!BGdM(C7tٲFz歟H˞3n%` }`MHܸI%Stw~L"weܸq\}l,@EiL8s9kmW}yŕH$x9S0af⡇׿5nݻwSZZJ:ptd}WWW#pp>O?eubWee%&LO>|g XꣲC3qDF-\/3\F;v,˗/E :VZ1bzIN2]zsJd}}zϟO>}Oٱc}C}vs 70sZuYߒ)a0}tN;4͛nj35ju*$IԚu!kd2I>|8lݺ^z5޹S w\M6Il߾ݻӯ_? 'O̐!C5G}K/ݻwH$PU3<~  DMF@0{$Ί+y)))K.aĉ4iD?\.e2"d 4Flْ{|Yx<.#IcoDQEM6B!cVX{gqꩧR^^Λoرcqݸnڷou%eذa@zOYp}D4QUx<ݻYnk֬!+x78ӈF8A؃$I^7kl}AAAnwvFՙS֭4i~3ΰ/һwoضmEEEvWUUK/1k,>kg /WU (rJ&Olmii"re9n7`|N>d.rzg(5^7 dI}>dHZX39{/((` 4~W^y>|8=۶mch_o[:wL~~>˖-k̟?kꫯ/_Y7Ǐg. 8ҍ'FeGԄx$`Fٟ>`t='Yt)_}͛7'HPPP@ǎ7n۷O>֭[($I~G"LL&$IbUUUq&H*Tt:mߧi @udYzn|>pߏ' z~ (((  $ԕ$It ǃPtR(q***H$$ b]dT*EUUh~JH$;Ni[n>h׹$Iv%᰽Zn}EEEa"yyyi((P$s?G̞=g}>?A~?M6 ׋률^}>`EQx<Ȳl߬4M 0 4*xT*bsEE唖ňFTUUk.4MCQ6mj/V{#Dzn{xkftVؤi;D"A2$HPYYI"X,fxhr8 8((( OlP^ cׯ(nޭz6"V][e6V2% Rh=u`0H(Z/>Zqkvq\v=[Ȟ=˯4 UUUwgSYYioqڍ*+#p.k(l^@ P+:*U=h-/h)//]vu<X,f/@";0PP(D^^yyyy^gkY{Sad+//cXVCZ?+**(++C4|>P6瓟ojXnֲgY~4[8`5uZviVۤI c$ n7,yﺷ}j$ {=nֺghݻwJ$I"//^~~g뻱{e2dnwlkf/@ٽ{R)ReeeZ ngZz[VZbxc[t]ސTVVځSQQa7(T`m^~޳kVj$XugAg, QXXh jF퍦]X}Qf5, ;UUQUVZug@YU+iҤ EEEvAgRU|UQQa/D2{N&wars>Awcƪka5 P Bv㎳{LgTTTjZkbշV]KM7رc3g tAAp>˽xꩧhѢ+Vw1j(nF7ñL&Y`/t:*K,+駟ާW(쫤)SdɒL%iӆ!C`Pӛ~wK2\c Y3O7M4׮]ka0 dv͌F.eزeMcʲl&`^z饙.Z֘5k)I?6liFu^O?tѲƯ~+0'Oliw}&`kҥseCK/"֯_ʸqرcf͢?>åV"L/pBX￟e4ygyw)))a޼y%E:˖-G̚5>;EoX~=ռ+lڴe˖pB^x 27@2qZSYv-ӧOgܸqwqٓD"f\*b͵~k.dYf۶mhfN(~iFq edYo}Y?q\zI޽iҤ ͛7gڴi;Z5'pXw%ХK-ZdM>D>}ptؑ38 O&M2]3ϰpBRp8̀2]!ISL{M6z>պukL½ޛRe;SN9.]ʪUܹa ,ԟXFpf̘Ex<sVZu,^/^z?gDC>_租~:1tARu],Xu]ĉ)((jb˖-ȲL-7o8?#<Ÿ' @;5}\wuL:kO?oz+3h L1cW\qѫ(AC_G?m۶zj8}'x۷3w\6mDׯ}o#<š5kꪫ3eYfǎȲ'|ƍy6m}֭j}ǎܹ[no/=?K2|pm`֪UcWi26- pBk.S$sÆ fyy٪U+if޽ٳgi]v5>ls͵#IۿK&25MU^z3M4Nw]gΜi4M4ufo~4MڔeVA8zD]T׮])//g„ Y~kѣGӾ}{&O_OvȲL~7o| ]t/6m<4ڵIp\ ѩ:]v%3cƌ}"0`K,aΝYo?3gtRE!a/b8AR(ŜuYDQqMkٳg?Mr=peqEqꩧ (,,<Ζ-[(,,dΜ9 6p8\9o\p~EQڵ=K˖-9H]ph.Y=$ |In7a_ `уn~zN:qEꫯh"CwO?r/k=ӦM9W^yӧzy3<իszA8D]$IrС't۷o_~̚5N:S\\ilܸ9s{ I={oMիH|woߞn_~EQڑ#GҥKw~4D.Yo>ngyQFa&;v㡤|.q<s̡k׮ zIϧuִjՊ.]J^ho)B!iͤwB:! tB!B( !PB! @'B@N!0Ba:! tB!B( !PB! @'B@N!0Ba:! tB!B( !PB! @'B@N!0Ba:! tB!B( !PB! @'B@N!0Ba:! tB!B( !PB! ]^dYq8NR( " .]χ6aaAa! ! yD"+dY$Ifl68vX,8x^8N88Ndfft"##nvNSx<ΆJY%ڊ`0B!B!9ÈD"hkk.D"E$iϳ(8L&L&XVL&X,l68Nl6x^8dddt";;. @NN222ͦӳ?(@Phjjǁ@hiiA0D0 ypk׋ dff"+++GS._W\ӧOot:1h daۑ}n7Vx6 fYQt@eȲ A IxG0D$ڇE 疖477@~mmmtDQjŠA7.K>,ubX`;}:5lABJж! !# PmmmZ܌`0 ǃ|dggj_jmG0nl6l6ZX,>ꗈ\_j>O) !kѱ@ IvxS}Ϸzp8U/W, L&<αK2yV_܌Vb ''G;R>##^Whlv.SةXWckCss3p%} Ԅ@ w].t\x999󛛛1##C{_Ͻblϗ?wB!s=3Р5\Z[[q233\S˿KF}/5''~! 2$IX tY1uTEYY֪mhh@HHMMMfT?D$IOG[@mq.x)Pl6dYFYYY0Hu$U"immE;pD"Z//a;rڪUcfeeiAܱx^ t455k_k~eꁥj<;|/lK]myu (KU ,"//O @ۭ,;N=^ UVp;ޱVKKBhjjpX{-Vv|O{^~0>zZ^=XM`0 (ӧO'v߿jMKKK\D^QoZ=PW^yW_}ujփaM&^/|>JJJ.W@vu(zf999Aiiߟ(Xj"xzp=\.~ߥ@y<nf!??_R(;ԖtNNNBoWfAKpzA(Ƿm&*zCS蹊N:?O}1t p0B!$vdf!]!t˅`0wBtJ:н^/!!Ď,0tr!رtVM!Ď,0tv&^DB!c% 6%c% B+Y`@ZA2!舕,0tB!$vdb@$ #VЁq/"!رtY.BXClfE$;VЁq\K!$1X:!cc% B+ ,tB+Y`@gBHlX t^DB!c% $l6]!taZ.BXfӻ B!:b% *'Nr?_(8x`zA`E$;Vwڰa/^p8꫸[˷mۆ=z4n&x<|B!`+ x1PfY2!舥,0lKQ!S,]!),`QĈ8K $oߎ `ݺuzCHc% 脰_WQPP'⮻BsseBЁ(%P*꯫eX|eX:q̼u-[{W+Nߎ/zFHb) && lٲgϞ}݇j9/ƾ}py#$% tA.yQRR)S jĴԹ:BRKY`@ly^2IEQ;D$ALٳG IM,eap ]! QYYZ,X$)Ԅ G8p>}:>3K$$% tL7 !7nlƌ3qn$aԩ8p%Xje7bp88Vxm^H#G`P2 I9,eara֭[1w\< HlE'NйJBRKY`@zAHQ[[)S@plǎӹRBRKY`@Bkke7qAQ=Ӟ YzJ+%$ Lf^Dbl@ii)2|2P$ΝӹRBRKY`@wzAH:1ch]qNҹRBRKY`@z̼ Iq,ea=?? zAH\@/)){I`Zzyuuur $$ű t̸ 1ӧO6MRd~xt:q=$$e t@ĸΜ9N ),&BWEEE4ӝ˰ ,D"B!K!$fΝCIIv:Be&ˏ$I:t(jjj(R6- n7ZZZ.Ԡ$uH0_ tBR6ЁٍzAHLdYFMM JKK:p$ 8}4NeXC:Kihh2dHޑ(ŋDHtċHPPP l+2!_b% ,-OҥK.8SCe+Y`@4h3 Q=''E3AVN/((nGUUUj$$t#SWW2 Qq_NS\,0tggg3q1Vdeeu{d$w('"'N$dddt tYy0:EQĄ p455%\BR+Y`@7t>.IK #++ۅe2h v;>j(V:!J:- DQԻ BM_,& ;|_c `ҤI8p jV mŋ ۶mCqq1N:}k8p222{:v ł5k`ǎ(..Ƒ#Gd>|Ngb0 :n[χIHTZZZ6n#,u?.I&Lp8'N`Y.!)!:Id2iYҦb q3gʰ`Ȳ lov@UU/_Kb֬Y:t(n|>_~E"8x!yyy=:XVc ɓ'ӹ0?.mytMx7!2>#1/^ʕ+ /tc=|+x`2n:TTTtGFFv;Gg8B(b̘1x7TBRFOs,HwifBee%6mڄŋj q@VVn&̛7sűcǰuV,^PDž9IU,,X=^}ѨEsss2V mկ~>HXdI(**Jh 4ߏH$A::=(7n9*s IedAڌVM\t k憏H(,ea= t]!rI\q}:l&[T -/bX%8p7 K B,HZ˲'x{EQؘ24,{Hy>}#G(` qeSt]$0!~1lذO?4m)~iwߍ>I i( VX;C FL:Q"%p$> GMM dYFYYYTca) %,(((@}}}u~p86 IDAT cq!R$-f3~_Ӹk;`믿Xlj'eee}^d2!ඹu0o޼ qc8w\CH"IC ׾5455a͸YK%qiX,y]QO$ P([bѢED"PĵȲ뮻f}Q\CHI tEQ:}|>Ncai"1ÇcȑQ_?"F0;cD"̝;$/nӡraΜ9$eI 뮻0o<ܹXparQ1*\q}NBpX|! \1h >vjup7x#6l dI ocƌ?%K$}Bо `BR1bĈNY3Lhy|)-.Ϲ6mܹs;u@EW_}5.\,H꣘?>$I¯kHzH,l6r߄W @uu5ƌA>q8Ψ Z ?Bvڅ72 .^Ǐݎm۶aڴiB,Hik֭5\z ˖-äIoB2¾ǏCQ1" q~xѵЁe-Zco>ӧkj{8ôiӰ}Db) ˖-wߍ8s VXFL$ԭMKKK>q !vf<}׮]=uVuJ̞=;v~I$ ic?n{n|XbEJ"L]'O"###m9/pXǼZܞ={0iҤN]m*f͚g&lxBbR(qcժUIO!$UVVbQd;iӦu tt!33}hdAR6l… a2`20|pKf)J1"@$"k ]Q䠩}PSNXTw-"ƍC!KԾrl޼(be(//Ofz444`̘1QzPl_i5I0hР&ر6l|>܁@=z4"tO1tłksŢEt>U^Tw#p ˞Ȳb?ߧٳӦM3ѣG~ !O;u6=f3}pQX,~dE?euE7$`---q4iREoz:0$ cǎE(™3gu_$KY{e ̋Hv)irqq1ٳQŋqiL>=UTjtǎW$KY@$ :OݻQF'fn¶'Obذa$@[Ͻ&Qg̘mYPPPͦ-CXʂL;{ KII JKKQVVud KGem'Nж#quG4hv;N:ܹFaa!Z[[;]48qDEHI 2۷7nDkk+ߏC/)S裏&NX:*#Ewuwd/Կ(:th[g6d$I6lXI4 iM8YYYQE=, LR^uu5Aã8}T_T,cQ/D{n?)ʰe˖~!R$mR(Xp!hnnN]wn#Z!},@{ = ර}UUUQ]Ø9sf-%Iwo!R$u'p@H_*++aX8m6d3(bԨQ8vXTcv7ZzWii)Z[[,,eAR̙3hii-܂?Ϻvs8NB!h>|#GZ!"E`3b #FE/1mڴ.**u膥,HO?ܹs#FWURx<vUVVbȑ:UN>nw$I¦MoovY6]sa̘1xIkf,Y?PYY;7x#fϞ' MFFڒ~ǩSPQQѯiЭCCr}p%,Z} qݰIksw}7Yw'ݎp8wHe={eeeE̘]QL8ύS֮] ǃS1(,,t$KYKp0"6]x _q[;1cv>c,\z,())s]'!R:YAؤvC˱F8\BH̚5 UUUtRשÎ;p7~Os$IBaaaT,ear1"6>dȐ~6)l~E3?ի7|s^'ɲ"\p!Z KY`@wzAHjjjxz,l2B7N+駟v{[okۉ}РAhhhNBR6Y:^8H):a|+_|Х_`֭7gzoKc= $,es Ν;!CĴ/񰚭1$;P__uuW^AII n^6Eu233!"3$^XzVV}+!(@8VN3~xL:/;voz*X:]Q]I_).U\.jv>'b@Vd\ ^$Km[ww\{opkb֬Yx1}ts=hlkԮoL:H뽇ނAqW@= ű+fdI~]Ԑ*|r|{Ê+p7寡"AQhSN!(!"0! 41肥,0l{<~ [PC w@cN. 2Qhm_ w}76z{NWCdPf,~V=Iza) 蹹D"zCH'R6Uqε/= Ʒ`:~BaޯkZI]gZa69]E] bxvY"ɲ\466&鈥,0llmlOryx<>nM{oOY1x`膕,0taKmmmLIשg$ C I Zj*lܸQ$+Y`1tFSSeE]]c}Ah(P~С۷-Ҿn;p8E+Y`:K [QPPS+J{2s=t=m-㮻Byy9j`ݺuxꩧt$+Y`@giA–x&+DY+eEs _w~̙3XbjVg?-[GRIVЁҒ-.\@aaaL)Łd,˨$IXl.]!C $zJJJ /$&\d011"`"bDRR(hjjB^^^-tن 9] P]]oBځȉxꩧĄ=2pXCngbfc8vϝ!yCy=hkk(͍y ]m'=ۚg>eee?~< $'X`w ݎ7|3ua% ,탛.\k ~5k`…Lts%Zkk+ ###WN!1s'c;d2i+%([oH{Foo9,XVqXr%0VЁM.xG~ʱذqΜ9x(/ EeBW3OɄÇ]"f3BMpd0.]cǎI$+Y`@ge$mٲ.~_%2Yhd#đIP\\)m۶aΜ98 Ylu"nfڵ .]Jj}$9XC:+!RGq'}Y8vզ/"///0VNA!2宮~٤^SS\y@{Gf6Ce\{P|IRj#J:Y9*KU@q}A.<~a <<flL$~?i>sӿY_]NVV&N'6\df!Nʇ~|ݎO|8cũ<_Qn@ܳܓiСӧO'8Au0LE|ȰgtzHƍ tVR{g)S`Ȑ![g~;JKKLRSJSSjg9no =JKK$/?sL6MnߣA1)AyPSSHiVU X Gaɒ%IU$3<~֣qmmX(2drggddjKQ|>}z@ a8,NQEQ0k,p͛7x}$XCdJOxNQq=?O(9e466ƵzZPBRv;ɜÇĉ~_555hhh超]Zv1~xlݺu#J:9.9Tњ5k0zhii|R\d]QpYf'U(FAA!gh},!-t1z2'#F=:u;KgbXLn. Hr)7n׿u^ԄGx'5/wQk].$I[Ù$Κ5khѢnɎDQ`ժURS|?xYHzu WTTG$ 5jT-tE{TeL01dAJ,XׯǏ~#w˛0m4K8x ̙?O\dggc̘1x1qNH$՚ĺK.aǎXxq:{H6܌3gJJJ}ՀRɞnZQVV6>}pcƌ$u> 8Ȳ> `ĉ/>|dA xW{͛o`ӦMu}]L<N§~~7؈/K.qy\t bt6 0}޶lEQp5t;E}\UnihhAO_6/ĵ](bԨQ,TTTt{H0o I&ѣL,Db4|ǟ`0eAK@ߴipUW9998q"Z[[x'Q^^ł  n6 벿(X,Xr%<<O&sn݊Cv= =>ّJ D)qk,0q&`Z 1cȑ#vBFF{NOdYƸq Im&?ӧOײ ݥl8qƍӾ{n,XuTotR9W_}5~níi& jvZXg?zO<7xΝKd)qks9_9$TQ1n8>}~@vGkȑ HS3BUUdYɓ'xb+zO'Nrĉ/"#hoɓvaQ;w 7F}O^N݉v_Nt)EEE1*!˿аecǎ(Q1~^{;r0d 4~wٱc.e}ɒ%|7ߌz v?jŋ/믿EEEBXnve2aÆ!//(ZZppI}Oa20o޼[vOv8<#X|9Uj:s ΁K81bf3<8r&M&Ycǎa20?NS˂t^۶mî]0eʔNGO[l<W`ڵӟynWy1U|ǘ1cnw9y|;o~Kկ~RS( tu=trٌQF ȩaG ?~|ϱ(0q&JCĽO>$})B[ٳf+d&M)Sᅬ9st[VYRA8ڵkv< -[SN%SIkk+1t2>-tA0emD/qƌu&3DYqB$B ;Yҁ|ߗ۹s'222\ɞHVŽ;b-3^_qqߖ:qDQĉ ޽{1uElCD'OLh}Dd=zNyf̞=/J ɞ{ӦM÷-&O5<|0l+MJH&((b߾}:ujEQ0;:t(8CUUU#a% ~IQuV,XU}O&W_ő#G_:rS{\_EA=#d^eee w1L2 >oVYud2ܹ@W_}uadoEAEEî]bTUYYÇ'dXexl@-GAL<yns8&Lzf{KRm}XC:+&z۴i222nҞD;>ٛP(^x'O]w{FTVVb k3)A̚5 wN9F uE?3Їj}XJ IDATJ:[ZZwio֭3gN-h' j*nC(*D"$HQ[:L2@ avڅ3fBܿ:RsDQDyyvfIod]FZ$ ;vUW]y}Qw^qiSzuoG@D7D]HV\$b@ c̙,X=I#F:.c% Fhmms*h#F֭[h"\x1g} dff&EdWkb\ff&***}okϞ=E3gaq,:t(dY㮏苕,0t777' ԨvٌI&yh'NZ~=N> &wMջ>3̚5^0q&H-t1sL޽;ڵkNSZOdY_dnII 8tuJ[bQd2ٳgƝwމ3g7@kkkBca۷fJf95.N}=1nΝ6mZK* GZí}G)+Y 4EQ7ы(ظq#ZюO$I0LXj>3>z'OƸq0|p <~1cƌ.ujq- cȺl*ILP(#GyYOE֭[o~&YCKbAQQzc) ` 0͢j?W_}u]#Nznlذ[lcߨ GƄ 0uT3&)aen3]C]/s[@FK[n9+++qE\s5QMtZQNXܤ78̜93qVu|_G ĭފ%Kbb@E477MMMhhh@}}=pE\pW/K!Ch"|_ō78`5Y .{˩]Ab`رcy䑘nc۶m8ӦMDemnp$I2dMKs,eazֶn݊yO&,Ý~2٬kX{n|Xv-VXR|ţ>m6OOJ~zG< W6}( <%@B%,8!ڽzھ};ʨ3>,,CD"AyL0>,>3l߾SO=QFNO?,KVϜcA0sLTWW>4ב h5z=IPRRgϦKYߪ:B.IzЀcǎaΜ9QQg|2<χ2W¾}0i$}ݸ{5k0a%dv+iӦh?q~p\bE$aځ IO,e:?Oٳng|2ՄB!aʕ_O?&Mk{OχwygDHDQ:"777 6̙4/ž_@,?Ёbzپ};¨?㓩cѢEػw/ pW/KLzjs=%DK$L81kbر͍o!zVԹ.\wm$5 H$̋;w.vwLe tbڵ;tR?wk?-h!+r['J=G>cٰa~M8t[?jqUUUv.#-<ݻwc^4T( B-[^x>,x≨'mٲ۷oǓO>`08 5ʊ 38D ]̞=/^vUUUƼyui1Y`iZQ\\L11ߏp8Yf{fvI}~O>$ 裏ҥKXbE)0aϟd:8$bI6q&\v=}ԩ{ʢ5kfE`Gn#,=.2JJJPSSRDd۹s'l6[L[}g|2]Au]xzj\#ob֭xun22,kڵk1{HQLEÆ .4R0FMkk+K?ǤIb:eqms#"F`2uջ{7d2u8p ?[oW]u>.CGҥK1o޼N=c߾~$IܙL&93Z͗O5<9sDj(ºuK/{EQ಺s@$ w|TUΝI( H. U|QWTu*kye-k(,((41 (HILKIHB`&3|f2s3Ϝ{~9k˗! eݚD=7nW\Qw1c k?w~ɘ n605ۦC\ccPtT)EX 4f.lbo&]ѣIE7$^ifk1lTڵcpuݻwؼy3z]/FfжmZ/b#J䴂NA۶m;w<]# e=K`.:%5-44i ZAL٢U(Km 1(Qu!CUْZ٭\+pDVȋp .xD܂]! DN4[dEW 7X攰]Q+F#c޷~1Xf-".j H#[<7'&X(XuCeD("j?^Gy7_]PY"DX\."x<ZZ$`ѢE9rdǷ`n9nk.* d҂`04#%7oqh߾}t9]]*?)-#>>tV@R=i !% F wlW:&s9DCL[9O>v8tvQG'0?+Wģ>Zv[l},8'bzFt:Ѹqcڵğd҂X,VYR[Cj&*!%R/hjf"ѿcC@Q\yͅ(EΝ p(BܢGBGj4S4t;w(' eiOxlݺ:u@JD5{"9a vtO'#_~D"ظqc9s믯s:B<a-rrrcǎ:_I RVeYN\AmЩSx"0W=pP(Ӽ;bŊ~f!sSChAr|:BՎ_999)s0=)kuv+(nvlܸ?/O?GyNSNg-ji:w~M9$sR-`h۶m5D1Wk,C"Cѹsg<(**´i0|p\vegB.w恫Kc3:?ܒLZ˲)%LgJII =ۧT eYbPg p .{\ vW+ T,ڶ{/2 -[B8iii2YԦ7 ]vaشi:rnI&-HYA!eRֲmڴIq ËlW6ܢ^ _Ż pB)U'/uk=W[2 #ap?ZZA'8S]A\_^0VBX #EQ-@iA%CH A堝LZ_7t膙ƚ?p,X˖, c1uTV?#@sm~Aw"͑ Hs#z̀[tɛ<[(ڵƺu먠7 I SjD^^A6mRo=t'!p];x3㚓w̄-DF3UWfP*D)5r)C+(Kf&,S]Y`evry,1ּNtP @5TȺ JRhHj!5(]dic~ɏ4) 'DSOSHc&)uz'w ! : vát#Lu1-f&9Xz.C`LuY,j Bz~LZp8hjyfm$%M a`yY?4M;4Ccܢi'?W`Y0VA@ FP" FOTQ#!Du3S]q1C%*±0\ιݻ֭[GLZDQLlsa\T,s4zh߾=?$;:gcJ5n l \QY9Q(^zQAo@${^~C ~\.4i$ަPeNիn݊H1! eNKWt!Kʭ0 WVeN[գ: MwJ H&-HAq. EEE6A0|p9x#K tۍp8Mlʿ7/T)M2x s'p`8f9֬Z\Wu@52JP3@i2QD#vUK[ tI 2. jn.H~ČTVuD(_RuVkUlD7/6ReZ',sB"PaVFoYk0+i%3:uv̝zoի?ŋq5OWuaD_l>Ġ :bWT@Xba~"h*@Uk0@Y="||' `ZǬp].'&VMe A.5[YjX}o2 %-҃fONYyW# +-a;X4+A"'eGDfL83fZtfς|2Os$z] m ~*9`/rW #3 ZVOUwTa(Wح]}K'zѬq,ȷzwDw#7N{)ّ$|͇Vկhҭ .ua}ႁ0V= v/`9ܶ6]rP [DΨ@x{FU-G&OܼWsHrDk惯/$,}vލFj?N9H~S eLw™|waPmhp"wlwM4 9996m90{l 0芎Š BZ> n76`C0 p&-?8܀K'] cqػb/zm3[k'X|5+-/ov8X֏b+pd=M5D^NwI3#!eGKhM6K. Z;JR{'3 IDAT9sfR #`ɽK:s(cPѢ(ֽl{x+=77 =MppA2]?wEмW Z < ō{n/д[S[6?<޾LZ҂, M6l`/gIIm贵ѿ˧_n'Q}Q66>7_1U-K']oG8vy~ fb6"?/; vApV<Ρe24tRLX5~s+:XI&-HYAO?3c/Jjl]gǃAa܇ƽދM"++ M4Aff&^=zoHGa_wą/Ď;s]J`k]&t;!}&>k]f"~;J@.Mțy(WRaࠡ0@.ql1 Vq*I$져lی~$INPB]k=܃|dggs~GdK&ku=!$5!EǏGzzzI8!hܸ1&O'|2P##9|pOעT䪫(XtY;(3f /^{>ݛ "hn `Lz .5\SovX 45,I R:0RoG޽m Ҡ=z4VXq00a,[ _}MVֈfcY*FnKb-ݐH&-HYAktc}f0 >}JAמn?+ǟ1c>S̙3Æ ;sR6r 0{l=zt +ɢ)-P(f$$| t邴xBIHS#++ #GĜ9s˖-O<'xGtK$\.̟?ɓݶDhAJ z2-_%K`ȑ6BI nFlٲ۷oc8p7|3 /Ung,SyU_s9dтLیc͚5:XBIej~|rh2,Z҂LYv+VСC?~|M$(t.,q\W~.}]kNT۴hӦ &N]kuJhAJ ()w:]tAϞ=m %a.zC=0y?V]w݅?O0aBGHIYfċ/X5DE RZGR۱d<kR)\,Ư{mlق?߿?^{:m@޽xu1D%Y r%}ॗ^B&Mp7J€]DΝ+f0`ڴi> \uU1cZn[o, dтtQmFٱc}M7݄ &SN>|85kzwy'[uQnݺ^ÿ/̚5HTE xOA6#,Y_}Ν os( Nt ̖ nY0~e,Âap )|vB!eϕomwu,oͷ܌O?;0qhަ9b@E>!˰ @Zq&M† pwyIFEhAJ :˲0 #fčbL4 +QN pp nxEoaaT;uU,D ڮ|QK̙3qa5 _5:'QI-HyAO{a`ĉØ5kL9-~rg|Zյl-On<lh%{V/C"Rwt0`uEQg}#Gbذap 7ԣ%Y =Q/sc= b…h޼y͡4C-XCLPt1-`7v&I.\;7x#~'&ŭdтBc;y1"&Q(qj%K~$ g3<^x]vg}f(+((Ν;! O⪫ʕ++f>|8 %rss1`|w ],7p~iimX]4Ea>(6n܈Mbرh޼9&L^z!'''&֚dт뮻3f˲ 0`V^cǎa>< xߎWWup\^;a`ܹܹ3-[>9Rk mלN:aذaƍ[ӧX6ᥥɢ }}˖-ػw/"TUѣGѽ{w <W^yf˜1ct:1i$̘1^{- F( :=z`v"G4nwܾo}:lق%KÞ={0bhӦMͣP 5HFHnЭ[xQ#)1 C\0{lO [㱣cǎa!I/Fqq1>CL<<σyk$U>7 q^V^+W]<EQDPPP;v`Bp\GO>JBۓζj ́pe۷rґ#Geyii)^u,X1h {_|Æ W,(e̚5˜K4M!ǁeY< ߏ /GF޽ѣGJM ceZZDB zzz:֯_#Gbx뭷"`ܸqxꩧp߿aбcG~[C ヒٳgop|M222Um(A0eDQpWg?phǏGQQ]0JJJDD*EA,(4 a[l Aqx}lqog ˅^x}>233z+dxlhb%%%(,,o=˲h4joUUi]-[m3 c+. . N. ^.߭"++ ^>iiig!@!'aѢEx饗Я_?pp:ζ @zz}K AlEB` Àu @e(b_,8B(--E~~>4M ζ %.ˮ|>}XX߅y;UY%6"e]FbFF(--E8P(bD"ǃF!==^׮<-<}1nQm m[~*זVEo m(dYF(pvʀo+x$Zsry,~H`AiP,?[Ey+..F +`0瑑aU|>x^Vcl.YlkYFB!w(..FQQrDPTTp8l]˅,[0].<<Ґfogp8VY>)Ml1AXqq u}A$x<nV@`]n]VY/Bl-+bVnV d]V>;~}XȰ ;`|v|<8$Ivy>Vg= י= B(((.@ --./,\Xl=pƌomܔtMdH$ɲ YQTTdWVa."Bu~|Z[V7==YYYVt]G +@ ` NII8B!Ȳl2X *auVuaZZ+H|]^l~-[`5TPȮ4ª ,;EQ(JU Z*/PVjGff&ltv3])b le<.ӱX-Ve+ <9|mVa[5˽&:SʯsSRRR!ȵ^mVaa}ݘ@*ӫW/8'o߾6+ax7k֌0~x̝;. :uªUDه zay:te]oN6-xrJ{СCmV0 }L>[n M[YZᅬG}4V%&ӦME]t]yyyر-L=taJұg̛7V(xѦMxEi`B_bҥ1f<,/R[S(  BP* B$T)W6=F_Ϸo>|B~P(CP@ ~+V},n6@zz:S{84m˖-?W^yO>$^{5p cڴip\<#~!`Μ9[ѵkW裏0vXԩS1rH 0tb޼yϞ( BPM6aɒ%?#G`۶mD"4hgѣGxbݻ۷~!|Il߾7x=B8;v aؽ{7׿O>%Kc;v pqs=xa|7;tRڵk1n89r n-Z8wNPRP(ղrJN^~~>a믤hтo皦}EBܹ3ׯٿm!O<^,#,M*ЧO2x`B!=y+|>|rBҥ @&NH!$ *OPN$(;wFqq1rss}v8pr NkfѶm[{0x`,[ |r\}ո'Bйsga)Kt꺎Ν;#`޼y,E~m}-ZgyӧcԨQ!I+{IDATqv222=8x 222_o뭰G}tBtNҼyslٲ^|APNmS( c=BDQO{χC?vڅvǿ/`0Xa;:uBφK(J%PAP_ĤI@AN-"ߏ駟(/ѹs AoQaaѪU+h{ڵkѧO8S==zkS(:@S()5t9 !4 ˖-Ð!C> R7S( Aq B$T) BIS( PAP( % NP(J@BP($ :BP(It BP* B$T) BIS( PAP( % NP(J@BP($tIENDB`astrodendro-0.2.0+dfsg1.orig/docs/algorithm/simple_step2.png0000644000175000017500000007452612176652656023414 0ustar noahfxnoahfxPNG  IHDRXsBIT|d pHYsԂb IDATxwxչww%YE\@m68J6$<pK  pc*I%ckigu=ΖogwsNEB4J@!GN!0Ba:! tB!B( !PB! @'B@N!0Ba:! tB!B( !PB! @'B@N!0Ba:! tB!B( !PB! @'B@N!0Ba:! tB!B( !PB! @'B@N!0Ba:! tB!BtJAq8S^E`>phmmE @ C Ekk+|>n7n7~?B p8 A:Z& F:& vf& f)))0p8Z00fCjj*l6,ˠYϒp8Fx<r<  G^ D󼼞zA@@C@`0l6`0nd2pl6n#55p8HKK@FF Bko"\.^/~?-^/ZZZr  D Bujju,}ǝN}Zp:X,X,0Lp:p8HOOn^WhH$f477.  w8F$zouq]֥lbnz> v8tHq~x7ꫯbXz58lFff20HMM& Vz^<V+I_:Q!A@8B|BE g˅f466񠵵D"̔RZ,y#p8tt:Ƙ &!%h[[[ߏVx^9ؤx455]ł 90- l6l6RRR"Oh4/} J;SHD#/;aΘѐ~. MMMD"0Llttʵ!01] J}(K= ;κ9H;Bo@~K߁4yp it:hZL&|溗}ҟSߙ'߬ACCpiiiqHIIҺn鳑ǵ^C&8j]L:QTT$j/P0D0DSSᔾҏH DB!c% T%c% TB+Y@JA!DAdnB!c% T:<+]!t !ď,Puk4tBJ:еZ-"!t{ !V@N!DXU:! U: ],B+Y@gBH|X t>DB!c% T eBQ+Y0?<***:,[|9~v8QQVVap8ćH!$~dNzkݺuXh /`…͛7ѣ1|y8~8A֭[rpO>V0,BJ @cԩƥ^|L8p[nơ7WƤI0sLtM0l޲lV-BId={wu-rbϞ=r/ZwqNӑ!_`زe n7z!t:<1 a2 ~!$(g`7(Z .ĺupEaKpz=zc233h"p |N6a ֭fC8G}?!33FF1aBHuR v" ==sOۏZeeeظq#6oތ&S!ď,`2%n7G+"lXɂA1(n\.(]!tөtBJ:B+Y@ge?B!c% TBHXNEQ" )X.!c) TBx<$?@؈T  @i BR6Y9BHX:+BKY@ge2~B!c) T,wH!$~,ej&BR6YBHXz0hT B! b) T,BKY@w\D!$>,ejv3WF!$>,ej=0s!! P(^tBR6#t:eBQKY@N!DX:|BR603M!ć,PuWF!$>,ej]h4}BV. "ZeBQKY@y2B$"AP BKYƻqJ@H۲e JJJO?TrIzdִ+Dvv6&NkJEIU(J@Hz؈5o+zj*"$ t uW\nAKT/_.R65 "L/p ,YJ|X!-Z;wԩSJGHRb) T:pX27o1ex^41m4@YYX`@(R B(xpUW!  oF IN,ejd2! *]!՘;w.xG 8L>_~%X``CsqO2 I:,ejb0cӦM={6B8Cà3@E1PQQp$@Ձz.VWWjL2p!ac WJHa) TN---JAYNI7nDQS)v(//WRBKY@OIIaC$VVVɄBщ2A7FDQɓ'R6ЭV+<er݋1cȳ]q_,zqq1=p$@nۙaܸqD"`ҙ@Cuu•|X:K#zcر ĴQUUE(/,ejnv+]!gԩSx<5jiu1]uuu VKHa) TiiihllT BΊt\X80L:|رc-$R6гРt)cnZN+wK+++[ !I,Pmff:v  &l6f3jjj(R6ЭV+3:~8c/itr ]EHwBR6НN' ~ҥ'O"??_>Aky<TUU)Q&!I,Pmt:XV\.K!$nUUU1"Fo tB:R6Ёf $. 8pnv<<OLkd؈.Z=|@Ø9OƫGy$wy'_F~x<8F&Έz455!55c@D"3f V^=4#%e`7h}ƌ(//dž h"z!CPSSp:?>.̞=ĦMhѢNG0.' $Y n[ rwGFuu5= & ##W^yeW\^/rrrFBA0Dfffz3|@Eƍ2{dJ c&D]v[ VC.)..VKUc% T譭L|D]D{""lzGspPQQu2Xtu>(¤3u{:`fĈ(//: ,XU4R(iu .DƕR;Q5V@ՁhW2>}ݶEQQkD(~HFѣG;@ZtCӽA999y5zDH. q~,PuKg2H,q( 3@pȑ#V#! +Y@BD"Ltum ]麝UN'_v5a) T 0 JBHjBk=_\R KY@ommeb^.HOFnnn-tFmKxǰaèNT,PmrQӧO[D.wQ\\L* tV& RUU9r$f3L& ZmrO ۞ǎz Iv,e8KbRG 0rI^~d/܀PHD0(By1qUhj7ƙk׶YIcM94_@MM&EYx~3fؐ ۷ ̛o[+ÞsǼWB?С9Ы3gCT°Zz=~0]4N.+5, ?O=\.N'ECC<^&m|w PHD$"bŊ|mڞz4C4^}u6/{YMÍXm𼈊 f&Nv Gcc nBN^^e|_@8,bX3n-S^^[=qV.ж{ Xϳm{USF]]6:lh2 @`X7k} S_7!+KC0{ IDATJ\'W] z=áA "a4jb62?a^UWŞ>_Vر oiFd_X,Ѱ:))Z\|q {Z;n~:< bc٬/ 踼&+jt^~(>?1N 3 mס߹Ӈ'B04X4:T偀 htؖissᰈ@@D($ 7֯b.>&O6㢋>oGjge?Ǿ_oNqX4<1cL:U`x3h4E#y ȈT+++?0}2 >kn^j"/o@ #-IB!n ny}C($r4mv~lt%Kqmד'Cظ ] - +KQ︾/B($|FF0kRz /XBYSoLw67xEE`4FYY;݂ V8f.qos{ak`ך0**x<N-kqimc5pyG'k1ֶxֆCZ麘@/.+Y.33uӟ q(Fx--<|>>=9[v hh`x3{D˗WfnjѴ_ 0;i%%F8mtmYNrM{gPQQ?O]'V!-=m<ߚ`A MjtbkETv?JŘ řHGn>fce Fwn&M ۃj Ewv-V,ye˪ 0a|yNöm^Յp*(0 ?n۱e޽ b@Ę Vs?> Vj>Bэũ1= [z j9JJ6K_4F v NfͲfc!f&&@ `&2Dwu<1^(aAEEM?L4lnL]Td-E>w(7<rM>M #nK*Ƿ8x]M ~,,T/Owy[C98ؙo] _=!-Me2 uZ;.<0 88_= )ӟ ǐ!zt #Tc4KL7`_47GG[=VGƿ=\m3/ŝw;9^ϡm-رh;P?_|1L&} y y06 ӉgyrY׹a̙3۶mÄP~<.b?>'& v~?fsy^M7Ǜo6;3Q[qknZZ-X"z)˫>O>iEquuLt'k"/OeA0(ࡇ x<|y)>SZW◿kٰH dfñX,;p5j4v>B]o|I+֭ndkjظATVee~}w[o5]X, ֍矗bٲL8|0ޫyh4ZνcaɘS\p0LnC&lYV;āiiAb6Op٘> ;:`Mm4 bØ9ӆ?`Ҥ0'Cz q+Eߚzu4ɓ-x¾|GB:{3L{غuk<~?6mڄ'|@t} @>zVEH) (1]nWsMBgڵ#34b<f϶Rp Ǒ{~H@$"PTd#qE6̈N^aTr`R<|> 8Ld3OW@aa_;Ļpen ;[RbĕW:q=Yۣi,(.y*wS?㉈/P'~N85uFw7CR雋.H\hQk}_z)OEQ|LyQEwuعs'"f̘m FӦMÖ-[zBKY@_r%~?qq+xd=&zZZؾ};DQ9[C^9øqw>!s W\\7"`˖-!jTWW;׏-̸mٲ(.3zhرϯE"u:`ٸ |*qM;KH_߿|>]~ԩ>J7`ڴi`8p@p!=@AqGG'V 8Nק^_/r]vu:q}z-BKYxPd ḞHvQB|oBvĉ^?ǎp'R8BKY@ybإ}DC2Bva 6OzAA~UUU~C>k֬NwUCnn. .BIz=%k(ZEEE/z,!,HؠH$yكDtF#5ғx.twOpȑ^w׮]q@Hc) :]:N;`|V+^5ғrt:yZoF{u.-[`4;.驗---hiiVBKY@?~8\..\_]n ߯CiiiNYURZZ ݫoٲӦMZ_]u(,HU>y6ٳgtbȑxZfcf}~\Aj̘1;999]Olذ?{+y'O_Db) Bj+Xx1.̜9sIT2Áք.!}q>?ή>l0X,/msN{^i"//qt a-to'zd4.. 'NϏEM|Z'N)1l6[;`0`Ȑ!}R$ԯJ0L|MOF88s9۶m>}͛s\qɸ$ltVB6IНQf̘#Guuuغu+,X8!Cz5R6- 3"aN88sI_.kcoANNjjj⨒R6ЭV+|>eҥ*l68>?l1|p]o"##Ḟ333w @ҹMUUU(,,}6]^ Wٳ6m’%KzUCo[轙ȆR:Y9ɓy}u6KJ?OoŋfJJJ "3$2 t)_dtV~]@tԩS裏W/k{u%&D ,eAgKZ$8qQ]4 G(!߾koN~ λ7|3f̘~ӧO-+48Np8a! A19?|/!b) T)))DQ[[ܸ4iu0Lrr]?̇1Xj+K+/#$ D΂ =!|t赝333E tǣtt(u:dYrB|>K.ҥKv㤀EtMf=R6z a4.TC.@hz@j=d2!%%&!`) T;(NC2sa4j-hll!L,ej`-Nfux H|ˣkŰt#lFnnnBZ]%C&Zf_^>U,P1tHMMESSeAmm-ATػwoB^+;wą^(o.\0LE+Y:K ["b=##C>S{jD,Pu4aK2 9~DgE$I?^{ ii8{'ʕ+qEj"J:Y򏰥C Qͅ KC̝;---Jtu9@b@Ѡ*!'E׿p饗;/Os8Xx1^}UUb+Y@OMMe`|rB![~ 7nDZtRPvvu$]#''G6Qۇ'N`…mgw(++Khm$qXU:+M_|~>,233v V^wy%&fс:JAe6l^?_̞sfOhm$qXUngyW&Lk/\s ǻ)SSS#-tOx }˖-:u*f|ۙF\tE c% T& @@2k.|g/~Fa:+V  ҩAւ8:JI\TWW'57oތYfu̞ `۶m',Pu2"Z C Et<>9d? /C)UfR9}4222);3w8q"a;UUUys{g=χ(XvmBj#J:Y+KV>:,Y^wup})QfinnFZZeH̕$x< _fΜs{geggcĉRI,V@Ձn0 .Y>\.nfΦ5LxG{HbG@܋ǎKٳft9s`tVXU:+{e'LÇY7^B<*/i555)>] %%%G&kL6] 3gA,Puz.:ߏ>W\qE]m,z=~[طo_LJ555Q p8pȑ-Q_˳Ý}8lܸq#J:5 AP &]^Cw7M7݄B<裉(1i566*>;6jp#Fb_ z;?~<6m4b% T`(--D 0zĻRe;92!ݻ&M갬my睇͛7X]Dd:bE| u\d%K.Enn.~_ dIḾ^ZZ{t"//òNכ1c:4 +Y@'o8q,XaYOӉL&cz뭸؈ݻwêUp)c޽1ca ax^&.M6AE̛7+fg?^}UTVVgIER5jԀvK; #GtyOM4 `b"|>] ;HKKĉ"祗^wߍbt:̝;hhh@8j`!CH:*l6l6[&s  ??}ivmp:x'؈tː%\t3f ?`_VVÁ?aÜ9sl6.^'OLvuuuR ў%N7n;3 Ͽo>3&~޽YQ>, 9Apa,Z>,v;qTTTbp=9e˖kkkqaTWW;F(`7 3`8y$كK.eCV<ٖ7(TWWr&LQB=eee?~|܏OIIСC)!i;o֭r vIW\qn7222`}z={1\tEɁǧ~*ei4deeaذa@(HzzVV5514 vyvv,[ VBccٖ?48pt;Z{Bؿ3Iz3cرzX i;l6Y0%Aݎ͛7c۶m2eJ_|q pO/f! aƍ< G}s9'EO~w{_;\YFFSۇp8'5 k׮XɂmV3 0ZuҤI2e w^5kVDz͒ >̟?ߟ;33?V\Kk*^7iAWSL]ywz vdQYYt,H@WVV^|رcG!zlٲnwߍt<#@v2Q+PM0eeey_w׮]6lXgf@II <V@@ ɤtLꫯp8b:LӉZ,߱c<{wz>|8RQ+Y@0J7b̙h+u-`ڴi[ɓ'kf'J$Ayy|dLq3f`1T:_5JKK;L}ޞWPP ,Pu\9^9mڴ f#$F#|M{wD3I"W"RۇBdBASDa (,UQEGqU.(fN'.]jS$cd]0>xvQtڵBoٲ%eoRɂJzkNB^ܺmѢmۆ'Nϔ}V'p%VBҹuዩJM&rrrT};Ю];jֹ>",dAzmȃ9sٳ[`%ݺu͛~'+ÇUV{p]QQQhժ\ǏSwsr͛rڵku-L*YЁ^ZZPk\.G.]ܺׯۇ˗/#..7nѻ>nݺ ]F5\ >pر:?ϑ#GhH΀@1I% :4UBBBۣ,pE1f$%%a(//rjɓ')w?Gܹ3Nn݊{T*ѠA4l<:t耸8t>C  883НK.P(:5Nٕ-[@sRʂ tV֥Vai]?lkf͐T6͆b۸un޼7nׯ_Gzz:-Zhڴ)ѣGcРA6ۑ,7Zpg :t/Wϑa>zM6Nq~NJY^ZZpkYYYԩG 9JBFШQޯΝ;k.X͛7ǬY0sL(URR/s7*W^HOOvuULvq>GJY2vݾ\#pHIIŋqi>|}ūX[g322r0d< 9[n(,,͛7z۩'ի~yeCJYn6h.oݾ}n][Éza|nn.1~x<>vv۶mC&M|P yF?|Ǐy&Ο?'xxr^&M`2PQQqmD+:'Z>(aڵ@|||4 شiƌ*}K -DFFzuj{߾}v8K={@',@`BFfkq%u5n8GAϞ=f'==F>+_m ?WOر#7nc<\aÆׯ{\)eAj̋(#G5.݄NWbbbp3&L|q}W۷/7o^OU֝н9]vÇ=^Ǚ߿G䠓-ҥK- `h4=fرc^ "D}EVo_/2NTٳgsu#^УGy4]KPXX}zCa tee1I߁m3RlWVVJgtIr[>yrkf$ˎРPeMƨQ3˿s.)J7o^zey]Gŋ^@X,>5+P}9E+\ _-o۷/ajϺu>}x#fqyG#,@w8P(ԩeךR?& Ǐ].V^1ci~yO/׋E~~#‘Rl[V=,,̙3^wz*&NXx:vϟw{@"Rʂ t)l|X~wq.t2B`֭ի(wd4:bw"nRʂl: Dyyy@-`Y!:t(=jl6_O?tGc,s\'ѳgiRtB.WOi˃Vu{,@b]C2x`rnOOOGIIIOroҤ BCC^?D?؜9s:tVሎƐ!C|r6e"%%gg<90 :uӧOd>M8x}pbcc.Cԯ)S8t~Sx}'y-p),<\Rɂ t\KcTK.M6B!J.E-hذaë̙3C ӵwt'__χ`Y I) 6e2]b⁲2]vB"J)dl4k O}%&&rĉ>?)e4Rn kI~6 fU$087Bpk,:qenĶm0}t4 ANw_2i cǎÇѻwoK#,@'n0R:#CHPAj3c[՟<˜igNS[;eO>ۿ/|1˜alP(еkW>|أaI) 6Ѓ`Z.o>N)eA;j5fsw p'N@||<rPrr2mRtKe0t1$&& ]p3}իW8I) 6ХԳ \rzBT>}Rm6j`Y(**35RlKi0ri!ANcӦM}׮]K/ƍ#** 5Bdd$^z%=zLJY[n ]:tjZh5/ :YYYu_rJkk׮3<7"==ӦMÚ5kбcGA `]nKfO?!)) *JRH)wό5 ?N'͛{cƌŋpB {j%ǹsгgO >K. `=(( B2Z|eYCܸq ˱bŊzycڵXz5 tY;Ы|\"˱j*4oFD.:A2Di׮]i;` ˆ#zj?wFFy;ws.iZ~Ì3|^?JtKiP~_رcF!t)H㑓g9\ &`РAxku8doll,,YիW0RɂHܾ}[2D(//СC.I7|8y$6n܈źx!0ꫯpL*YЁ&m6 8G$5u3sL`uzիWcɒ%OѥKS[g6mg}:珤ǖ,;<3FR6m %%K,91m4L8ӧOw1/#11ӦMfF$,@ 5zjDDD`BBD3gѣ& cƌALL K/!t.+7 ?? ,>&,@ Q8NرciWr8yؗ^z .]~\mz1w\̟?gΜF%,@,;w^o4iХkF&᭷Bff&8[|/<,ioкukL2Nӣe+dA@J ϊ;㑔$t)D0tF]bƌnߏӧ3&OXֳYj5-[-xyH*YЁ$Ξ=;v`tjm!7… 裏xߜD>}_xxBݻ[ot0JtkZI|n /FF0~xK!"ŀS>_iiiؾ}}sQ$''u (IDATaJWѲeK<쳰Z^=JtT*X,\~~>VX/Ԉa蔻/aذa9r$;~l6,^{F{nyrh4Z yyyxW^?Jt sEf/ ] 1jL&Æ Ocԩ &M`ܹ6mW0x;(PΝ_-[V:J*Y!)JvԎ;?bݺu "bN։ۆ۰8d0|ˏ a]0  ߫.ep9)jeY8Y'X .sq>3Lxf֮Y۷ocԩD4mR)Piis'55ǎ?MJr dA@L& "55)))42#X J_-U=츟kR5T U= iuXQl.F: ~P\r|e~ NNkQR5p.=U] Kp9 R}]z ۷oG߾}zJ|g. SLhIJe˨3U: a0e:?WMl޳U{w$wZ, スY15`@!~wRa1 w}qbaI% :f|x l޼7oFӦM._9GwY6 .,^7Z͛7cԩ?~ k4t: NǯOn7wV d2mFN'p8`2n=sEՀ+--Eyy9cB@DDPŅ}HHz=_N؂jp=z:m/*++QZZܺu߮M&JJJ`4mW"**LV NNPj ߃ÈAXii)0f4hpϲ2p@VC0szރܶ^uWeY~nl6;X^@{p77onGDD722cHH]p^P@.CVq_Alg޳o.`˭K6n߽/^n}߯+W`P(p8 ۸L&n߾o@VV%%%7Cp:WUU[kqq.ŵxU-P tߑSVV8 XV,ZaNj+{crZ [U6,,-0Nv.wPRR4ׂse܁%~ffUkr;AnεSB,,, 088?XǙl6VYYf۴b_ ˭ߪpwp; Pt|˷Av˲lܙjܾۯpWsܺf?sdffB& ,bXn b|WB&:GARR6mڄSO ǎ@.2N.]vRĐ!C`2p9]3gD ݺul\YVV֭[~:1:֗bȑB@bbbnCmK.\/M4l0rb˖-ӧZhDEEUVlB(EfٲehӦ ~Wh4iӦ,\>P% C-tR 87FZZp]hM6Nii)֬YzJg+xdff ]脆BP/_F9rׯ_GRR tIMMhDqq1VJN(//ɓѱcG 4HoW[_ƅ `4qyG"NCaa!*++qU 4_ѲeKK_|'NO/t8s \.=gyK.|@A EF&=PN4t j .ɓ^"#﻾ۛ5kLv[nٳ'"##ѰaCY={,nҤ mG4i֭[VN:aDR(Drr2 ڷo.]`h44Yh233Kz=(tY0 VX^{ -[tSII QV-b ̛7OiΜ9xGlcǎu~x!SPPcPTOкuk"~eYlݺ;w?ѣGW_}h) tB!D|!"BPN':QFaɒ%u^ޯ, Z|ru^&!v:!"U^^W_}{ů L{1 ݻիhܸ1222~w}_|ƍh׮̙V{H{׿|իWgEBBN>+WbرYfaĈHNNpgbFc̘1!Nh8q;v8s L&r~"l۶ /_Fv퐒_/wٳg1~x\.Ǎ7 ˱g\t o&֬Y;v ??`q͛x1{l;v v´iӰsN@vv6&Nׯ?[LL[i2!laaa0 þ;mdVC=ؔeYvܹ_jOOOg{Ų,dz)S,˲\.V?!P Cii)pY\r< Mmbٲe4iڴi?F.#%%={`ի֬YߏeY3 LvNqqq0LX~=C8͛7qY:u ۷oGzz:T*Rr)FEa00g5k`S^^-[>DGG^SO=Cpp0 ""w:z*"""uVL0z}V\~A@T"..iӦh֬O!vB'Dx l6㣏>B‰'].֮]$OBJJJ爍7`P발/^LcǎU˗1uT|Xvm-™3gzB6j"r 3L&ٳѮ];j EEEHIIM 8trss,.][bƍؼy3An+,,'/_ ѣBBB0p@۷/^D۶m+J%*++=vԩԩcB{j Ԅ`0χP(D  EXL}N`2`a6a2`6t:a6p8`Za4a6͆4l6X,Y A׋`0ǃP(P(@ p8H$&~uy$A4E,S׳$Iq0 X˲`Y`0l6`0nd2pl6n#-- iiip8HOO@ff& C^DQx<B!֢>Oݏ^/< Ayh(Z:N]zz:ǩX].?[V\.X,X,L&\.8dddnC'hh4 ۍ&x<444_7  F>^Y èe]fX,vuUֻ-233ap8t:r8ؽ?Ex1yd`fYYYd4a4~M&V+zx:NQv:I "DQ by`H<ϫ_%=n7Ԅ:DQzdee;E=9ˢLPH~_ bZlTe}+ɤ\98qe#,9ֲXLDQ&;;N{ѣ/EEExۼ׭fgBHR-J5 ]R F\hZ 0˗/ɓ>eYlݺk׮<p}Žn$dB$C!0j$hϙ3+V9眃1c`ٸ{W\q9YYY;w.JL0UUU aZB!ڣ[+j$ha׮]xq`Ȑ!Zuرc1h l߾+Vf X|9^~V gBHk/,HvI;S[Zꫯ۷oիf466_Æ ;q&i% &лc̘1x<"v{ TBHi% 4 ?>KD!J$Št&BH+Yr] B! ,H@ÚBHi% R:е2!Jt~MlDB!=,`$I]Dy^O %}Zʂm~߀BzNKYЀDBHi) R6Л4q!RlkCB!=,H@uBzNKY ! ] B9-eAΛB-eAV#sZʂ H$јbBI -eAjeBzFKYx<;PCC섖.8 i=C8,{|"*o~45u~Q-}'pcbFhTRZUU_KWm}\$VV]ţ3NJK/-=ڀb=v`b/jkcY̝kŅZ{vm(aD#ځ9,[Cfʛlؽ[1{/N5b ZZ1cZwmwK>\GiD0((ށXL7[8/ش) N5a.=t:`SʕA0nO?#G3̞mŶmu6\ryEQgn]N'3ϴ`8#~=Ԉ 8l,rsu*xѣ *:۷GvWlf'A?|"Ly !OW Yl=ljq 3NJy1naxM/>…6LhBUUGUU sxbxL :lfBu90k%_~ه> 21%\,С(vq u?f?/ ƍw" 9gNxc-εB$F1uaHiHO'<<وF27Zi(^| $GFطOѣQ|i{ 뮴uƍ?{^hB($acxl@UQƍaTW모äIFO_99:, ĀDaA};͛#jW{~~:IFQP 7.X, ^\>ק'% O7׿Nép6<`:ƁGS ߴ)g&$β l =Gh$Ƶf ң2SMxIjkc03̸FfGD_9ߥaP/`Bb1$ׯ|>> (f 8kҥ>~w8Ñ#1<A8ܹV0 rkCw駛0~;msyq].tv8X̞mO~b]pHO;]p 5e->өCVQqE6x<1ѣQp`2[ÇpEwa\ɲXR>Lft$eHmQ X*~huuny09X0i >30#0y  a0m zX,,u:Tݺ%%zP6L3xPXަ7e~+_w}a>QD"PQ!nrAvm_lC}XԴ? kX;pĀEEr.( , ,0`܉bx#$I_|qW jo cY\.yyzyP]E<g;XXLX4:>ܽuIKOXÍ` n+.``Ûop)F,_o~S|99:̝kEq{4aRJKQ-P~1ÌD>6aO\u@Iβ hS 71iؽ[n=huz ̞mYg5կ\`Y[ovmgmIFr܀^ˁ$!.l6<҈ _S#q z=6Lw׿Na\N ȑ(֬ aÆƍ3``=9̘anZ,,<5ʀrY,,rs7o-nBWgYLIaL4 ?8fΜ"Ѷà7Őˢx^/"==1ez8|80l<8BxI#(`{:у~WD$"Y мic t:~ˮ _ K8PMa:``PXa^HDSGLKźa@_nR@$"x^iZ ػW$H$gĔ)= C?˥SO({ It:ɼyָ vhhbaa1еRA D9E($!a004y]^k c=D{~:Ƚ_nƄ ͗zذ! "?_#I`zy|KD|"|> yy ]<6n祈F%r*@-{&w~ WZ̏&`D: >zEL &p KS/F/`P4FX f4MTUEEEz=`6p:+ݢ(o ȓA$ ~\'ehlg?yi7w#Gww|xD?Ƹ@'?1hfst:Sy u{:Մ@@B$"1lA($IDQ_|\0o21XwpN \]0J05 eǎӦMk1r B! oCcERo aÆ0N'W>5<V`F#S+ ,FiBٸɮ]<**^RGGD!ȕA:PV[z=,]8۔ψwE [j/C($σطO@4*ԩݻy,_ʁӠV+# U+$IH"F&.@xDqb& DbDyr35/9t:`L FjؗؾW+hٺIQ QB̽ \{n>^+B姞jBqqqy֯ -?RY,R:`ԩ. !jڵ+vguVDH,ƉB/FNNƍ v'X>ҁDÞy444oŋK/%XkZɂ ta4 Ѻ/ƕW^ g$[KpE᭷Jt鷴),Bi/_5*++h""';w.6oތ#G$xKZʂ t BAHywPPPN: (Bll1c۷oOp韴)|+ԃ }t@kv[`, }w.F6?ԋC0{eԩDTW 0@vf}q׮A2}ƍA""f90oK]A/5jxNkA{r!"q} |k8rDb[1pxDQuёH,Z>0|&saw}Jx7{(veeӟo `2f6!C3y{b#0L,\.fpXCCC Q bB^^^BG2曳55Raj ׿֠^/*oaÚWjkl:dfrXt'Zʂ ted SOs x=y V+ٳqSUCN`vpXD$"A$;1/w0<'?0iU]rkaa;q%.НN= Af& DE4rf3PHD,WW xaWsUp88,n-%%FuATV0XX,,ԣyy8,. A9c`ǗB$x^D~!n-AB"a &q9tӦzZ=;/'W\,&X4cH4jea21qƌ1 ?z|bQEdfUFDpۭp8p8;?nc<''lj Hތʗݮ6leHV*s $Q +(Ϛ|<"ii͟ƷcѢ ,X.?|>:lrd00lz}}y}R#.LC($! j* ۷`00pt ~]]^^Νa>_E nw :\`fc9|؏Y/v6n{UW (/#pt5#T狡NV xj!# y],8.8E`@>~}ΟC0("aǿ޽a|Y|>Qc=4++y~{l6vVl|I d9C!qHZL7}xg_A7l˗{[!V#OøqVw nR'ZE G o>F""z& q(Ħqkع3HDB bݽ;˕#]ŋ ^[+ul21J÷P[+TXh@A駟SO=a/F;XFHGMM !IeD,\/Tiq= u  2⮻(`4Y\~[J-$lfdϞ0ƏHD^׹z\sM;*#x¸ O5#`Y檫qi͕XI^F̘Ѽ\$V+-&jM>V#jkK0fLs{puICJQWƏcB_UHF퐖-sZ^N$IyIsKW__ڲ%>7ꥹs˥9sʥ瞫$I>颋JFF!Cڸ/}}@o /*+*"Ҟ=!)n:(FG|uk@ڱ#(I$9-: r.i҈;p=giΝqUKO}˖-i}]DBdAH.l׷E̛,Acc WM9Ҍ<=.>k0dW\݇.ii:<@/&wik5/JbP#/.֚=n1 g# @u׋B|/XPHkEjO} #0*++ A$rRayyz_/sN9Wa ;JKM8L;> ; SAqZ|p9D"ߍBa_} /cqlr8\渿KǜIs:0ͨ!YgYLR6ЭVk-_Ɲgr8p sΑL,Mwqei/+]7%8>̋/G~6T㦛21w E`~}QnQ5p͇PUjLaYroēO ϕNhڵ~]Uؽ;;p:u\"Nbs8+ 8tөî]a<ǝ'$}mΏ0 PUU"$yt$e]."BP ܱ# .E"Kjbor7W`HN9Ŋ^*RO;͎XX<@ɭJ";[z=ilx23]qexjlĉ Dر#s]tlD "/OQDFnUW¸ \uUF[oKÇQPPcO/EH, Iʶ9jis~_n^[8r44Dr?P=ׁc-cpVMJSL<Leer7֭A̚UaX$<kA B&8:{o.N;mz~eO>)]w[P^С&l@n6  ;|yyzTV7x}7.4 ۶p=GPZC 7ފ'@z@'β l vjYIk Wp92ņkEf&;O>F%WC1w^rn!̱!/OXp?~>h 8;{[f]ڞĊ>X jyAݖnD~ ᤓ,Ճ〺\\!oA|i)~fEEIEꀷ??"$t$eCÇ7ɓAI /t{v4*j]g(wu]W֬Oɬ999xqE-Uerozaɒ%k kԓ,Rnٺ=Bg⦞l1m9@s@9Sm?$DMM tU1h @#FrlzQJ74)?I=uuuVZ^PFMZ,H@̄$tm0`F#{"EHJt! Gjjj`4a\~e1h ۷/GHJtiR^/\.WWG7%oii)OtI*Zɂtϗb#~Vm]>x`jr dAJ`@$It1ۍ61`ZuCATILtL&MlD:j>x`<Y4BV fiR@.Çv}BFH2JtFBV !B7m.g#FeV ] & @KT[G{СCirB~,H@JW I-MMM(wIm1b4qhBV =eSz$zuMbqE~_}E]طo^z%\~2e q!D"0Lx'`:m_444 ##tt57n"D|˟;O͂d4m6L:U}Ŋ(((@~~B@ee%oO>cǎ `4D{c:A Ff2,HvIǡ|n /$I[ݜ8=zo3<ݎ{~?OHЀY &L@ע[|j$9~뭷oQcС8z(^u/IP__ߥzG]|ZUUnwBJ+Y4]>`|999X`A2rD"deeuFHw@2}^+#!D+Y4O7!:m i{ii)t:J4dAJzSS&6"I-Мו.wbZI6Zɂt-7!Ez#77uv(++;r)])LHSSSe;Xhnk- 6IJJtA$G"++ :15>|8j.BRV t$TWWwiDnW܇ X,gINZɂLIH@^ZZ @!H+Y<Ѩ&YHjr SqzaBR ev!E![0`.=+u:NR eIspѸ `B')IKYHj9z(bث[RRBHJRlke"Z:(**2(=.!JKYNw"ɨՁqzx<=.!HKY aX] BСCp:~ίPQQkFO .c={ -Zʂ t ˕b-zw$uy`\AAe;_{P<͛Qf15-eAy:8.= //,ȑ#=-ZUV_K/e,G}O?=\>!EKY `6] Be޽2dH+IRϡt:dggxzG0a\yՕF8spW#p!AKYg."lٲ%$ҵ$5<`ذa'sss{%wލ+V{ALd555xw=-Zʂ> tId̟?_ L8]Ѫ7aL>}OBGee%DQV{w&AmmmOZlV+.۟Cb̙x饗=-Zʂ> tNz Ygߘ9s&ۇ_|[41w/IЭ.wW<;;W/3`6!J 8}ua8|q!AKYЧЯZ_͛q饗WƢEK-KRq\gΠ8@nhP(ogy&@ĸJN?އޢ,@$)k%2- aΝ6l83(.u!3P20m4 toh) 4.,\3f 0h ̚5@ZI rw;shjjB0I_}0zhr Jٳb D!EKYЧ~^W_}O>_~%,XytكCv=L.s<עZ ӧO6ﱕӧ#$"Oȱ})fΜX,z X 7pCFN&:#Gv9ܒ .c(·~~2L8Fk֬I>&-eA^_Oo[,^Ǐ;3 ۳g$Iˆ#Q垗@EkOl޼hSL F&Mڵk{>&-eAŋqe.CCC<%KâE(U+#ڧtРA]~Nwv toa4J:u*֭[ף!7i) ,o6444oW͝9s&6n܈[bɒ%}UFlyl޽p8Bg=-nӦM?~|N^;R$Sᢋ.ҥK}s'*B g{P__N/C;߳' # ,@x<UVפݻ+V(z!$vލÇw9=9Ptrχݻw^N۶m{۴}n+VY,XEii)eQI*eeeݺd Y ===zlܸ$O/C;^ѣcǎn!m}:WF4ڵk!"| BRQmm-1jԨ.?G 466ؕqƾ(FNnm{} IDATC/,,TTTt9J|ڴim.o 0 9$OUVV7a)((@QQn=ňZѶrL>[ωIz^^F#_ PoRGdt())AyyyHHoRIcXr%^/lق;v`֭8餓/GK2]heee[iM, B:uj ܭ!MKYg7. EEE}8LCAn_}Ȼj]ylܸ>hޫ_uKHoR٠h4YfmWo&шH$2ҙܔc߾}]z-[{Bno!MKYЧܕ|n|VV+@B@Hgq:XzÇݻt-ڵka4[謗^^Ge%xi) 4<ǃ9sgB9f3BPޟعs' ֭KրM6l|>_vZL4)k1`R]nu6ӧraС_ڧl*++ðaú㹃ȑ#ȕv'"VZg=uVߗ,N _ ٳ1uT̜9r8hjj%; M7oތ:}>Jŀ0 G' ,:0xw:e4] B%"*++Q\\JY}]aܸq8>ft@\Gע vkf:Bz_L&I3hѣG!BhW|o;|1k֬ϟ3`:\WPPÇ/-eAJVBmRۚ3.w2e ۇ6bݺu8;|)X," Zeeeh6 ($Ijȷ>6[0˰xϏYgǔ)Sbɸk {dz a20`(@{ rrr# ңKHOi) R6НNff"#jjjߣ Nęe&Q_ sK;d̞=,yCDHʂ(BL@%z]-,q$!)6 ~? MUUU$Gנ@5[m- Ekt:;}$!ÜIjhۓ$-eAzFF"FcCHe*ԞC(@{e.9Т'tǛL&8N\$ ezt:\@E -hhh8Cȱ)耶nlOȑ#l]nʀ㽞+ @D' ,H@ҔD['( 7hҥKrJR=}Zɂ=iiyGQ;SB -$$*E\TWQWA@]H" =B $m~,3dI!e3=gi3g3o6@(ŝ;wP^=^mp1M !!!HJJIZq 4}QlذJWX{bHYYYl`g5ł & ""߱w^̛77C,Zׂ.&q!Aw1.?ܹ?_UV!8,}'|%K… Dbt1# 4hЀo3|?<<. YYY>I$NK,Iжm[i /&MM"-kAjX`sJ(aФnߚJ~_po\!ǼyqFAL#btB!u/O>jxgE1 6(**@HHvO{?Zlق͛k׮:W;|9.аaC孯HNNFzz:}Qn~iܹs>;Ģ~-byo"t>7bѢEӊva믿m'< p.sAd2ۗvĀjm6FbtN'yBGtt4z)pw8qL0*]VЃx×=thҤ{ܹ3T*z C%.bĢ~-Jo3DMBBۇwy4Mr'_jA%s(_>Mȑ#իWL9Ǐe>e"Yt)4h1c(~Ax뭷/^LAPHzff!t5$nܸ7nO>1b]|bE Z**& +N Lӯ 5j|)8̷|iYf0 >t @Ϟ==\~ر#E,Zׂ.aZ6Cl۶ >}:,wJ|lBf0 p|?vOKLLDXXX)|-߿?8@Veh_ XZeBeӦMԩZj屽aܧz ͚5+K^^3EW$'NK.7q!-kAd;f۷oرc=WYd2̟?֭Crr$hذ!f/w^Gjjj0 N8y_Yo߾( WG-btr6Cڵ FWNtڴih֬>_(Xrssys+(B֭qZOƍ)[itCuE,ZׂNQyVKl߾m۶Edd܉`6l~9mڴɽ?{, &&Ծ>}ȑ#fĢDEp0سg Rz>2Qܹs{3r :K۶m.\tΟ?ۗZdd$j5Μ9S[x@,Z xA?p~il޼yyyxw0wr[.\?XjD"Ύ;0h R*3T*ka>7n26mڀ(ZN.]BTTTϕH$&.2Ģ |ХK|8wzꅬ,@׮] k3gDǎ=&XV΃;dggѣ;Yf!((f_~мys^`{EJ͛ת_~:PlǎIuq -v,Zӧ_a8x wƍWbݘ9s&}Yٳ4i.][n!;;IIIv;r9v;F(M\\=2CZoV\4o(hrrrVV6!ȨZrg mڴ)s… pDo|ɏdⴠ#XA?x 6l>} <<ر# c~'̝;J0`󑓓F\  44z# T+WBBgÇiӦhҤI5k駟z<Zth׮Ο?_k?wz=6mZ󣣣t:kuP;|O׮]9-V/_1 555'OĀJòxbL4 ۷/>3=F*snL&n'۷ʵZ-^y,_7o5NVVիǷ#)|,y衇p5 Z~rr2ڵkWv>))ɛfx2^jrʕ+3f -ZN?/_Z˗a۱pB_߹sW\۷GJfA.c0 V 7oDbb"^qUH̙F/ n߾n_K aj-PϹsСCjƍA|ѣG9-VǎbbȑXf F عs'd2.\CaÆ0ػw/ʢiC˖- V* LLFF(6v 1xrNË/K"77& ׯ fB!C" 11׶l8|X*3ǣ}ZP;|ɏJⴠ#ؗ:GѩS'ÇӧOǰa`4=&ٳ?3Z-l62=l6QDsNtNQ̙ŋ?W_}k a%{耻~ ]ĉ(r=JLl֬{P }O6NsQH$tڵR{۝Ap\v ظqcG|+l|gq_رcPTzQɀ 21#-kARʺJ\\bcc+e6܉vٳ'Əݻc(,,j:jř3g';;w3gxbܱcХKJż;OzG,Z , 00 xo 8qbϩÖ-[?1c ⡇B֭ѨQ# 44&ԩSlٳ'v܏rOrsZ.]`6qj/`qqq2eJl]PaÆD8bt.aHKKí[W1h 47n={pa`۶m+uL&CzРAԯ_m۶Ett4:wvD:FS`ކIqеkWHRU[/_JI#""zGLZෂn0V+ԊP6EQ{?vWmmڴ)f̘3fpl6rssdgg#++ wAff&222i&|ƍcРA7n^knmw؁ 2|#n8z(^|j]#..EUz*7nL&qĤ~+ ی:M\\:tP|hذ!6lXq8z(vڅ={`Ŋh̙֬ٳg{գT^^9k&_U>}`ӦM>-]g\rdA#4^YVG1iN^>r5݉VN!C`ѢE8woCTT֭[aݻwraȑ^3K=j_rZzM4Azzz\YAp#&-[A7PT|QgAJJJowU(n|bb"bbb0qD>M6V!̜)&L@bb"ׯ޽{~u6mшgyzo; ;vVih߾=+}NU5hQe@LZෂnZEsرc}?|M4C0~xL4 q~@ѬYZ=˝[n→tNU*AbtXifOl6NhҪr֭[ҥKJ?br7͂=]8uTr ϜT(oAQ$ua8\5j:v7xSNEPP6oތ_~͛7w \ s )MK!ᒽJ6OS6pyHS4= ={aX8ðZ6lXҪJ=** YYY8OI V+S)Jc2R\4EC%QAA+~brywy,U^#=m}6 \), qGGb…xwk=?.f x)@BKʵ<NԶh3B-S/֭v;Μ9 ۷oGFо}jUz/ ~ IDAT..I Vė$%%r!66ZfA<*ߛ-)}bV%ˀ)_VVJK( ȁ@/?;# & hۮ`FsպOALL Z-(?L6 ׯSO=Uc|e$zK=bN'$a͔:IIIPՕOy#FD7mڄUroԨF/ &-[A x?B#99m۶%Vo ȑ#|rn0O1d Ueȝ(tΝJ":Mџxmr%DEEm ! v6mN:GٳO չ8{W'h D"% uTjՊo3q5j1o<_ȑ#k~Zw )))0 ^PI Vi&KL@AA233ѦMM$dRoi_5ѴiSb^~ug]tӧfc5}5d|Qg`ZA/챽0 S̱头Ri3 ',~?Ս2ױGGؾ};fΚ }=2 ވ2WzhҹA'T$PE"xBS4 =t Dl+ٝv.<0(΃lF~pe@JUzJ֭*G1i Bjی:Ù3gЪU+t쇄C@MeŸ ^ϖe)eEe"̹՚׽{wX <d28ͨ3$$$ &&o3KmG%B9 _x+\>}駟իhٲ-$b#VYm0 8?gqɰ{ALZෂ.Esk[n!//|BQM6xT*X,ͨ$&&rsHDѣG"u1i NCQQf .\Z&Mm GHDѣG$&&d2m I t(..ی: wqSI~a8m I Tդ]IF mgHDѮ];|Bb]quleid*Ȅ$pZdlm0e`-Zdldd [ b+f6'V\vb8: K UJ!UHAhHRTʝ :9J(t Ԃ_KvrMl0;`30;8VEV vgɀq1p9]o W$ES%4h[JC"@A"@CtTV)!Sɠ RB*؝P5Z7[.،6̰Za7nnÔm-6 B+,tg|e#) v$2 h)a˻\.l] -R]P!ɹ_Xf n޼鵼6 f9EVX 0`3fk^=Öo`f[Z"R}/Z9djw>˵zDroWcew5.,tFшKOc[=)n PP 烮vWr$$ W0.N*# [ [ WMq!UJ!UI9JL-rg^Ra7б;ݕ~hN}wnVpW{rLq'ʡ Rqy,!UT-uwl ߵ}>yf:v]i&@F΅D吖7CWcYIYȿϕkP1ෂT*aZqJG4 КM]uZ0QV;+e+6~ظJ봂Uw[2Rt w4 uz+ p=3Mr{¼۷~>iwnk绿Yn{B :N،6b yVlm\+^#(w{rU{ 0GJ¸X -{Yv{okb+lmEEny|BQXa4-s7%rpHV6!PeW.r=5w<@!NB W9;`-t7^wGu HSݰavp=\v;ֶ. ^GA-b`J]Әm?:/\g=kZl: rQ:@[_ َk86ԢհVO`4reqPRfٚ :DH}#=Ç#55իy@ ZPMA*Hf^aEQId^n]C"@&LSq3f@TT^uYV[͉uFĀl6OObWCAQҏc댭{}n$:ZB#l&n/wo~Cp`? @9ѴOSD.O[H5Gƙ ,M{7E T)ūi:wӦMyJ%fsN>V]/ 7|SmB'tv^مa Cڡ4P i0ql1w]װ~8'o:~$5X*). Ȼ={eycC+ieɻ'cDI ZL69y$t·@T~!== =,whڷ)ڍkZJz9 4i#!#6(:Ƶܱ㳓9 :bp \  8ʮ+P;N鈭ӷH;oŷQ"y}rGLZෂEL0 qNP:"b\۷f0EffF *)ƭ>3dGX0(DY1AuįH^ W4fta7#uw*h8i Nu2un}r@ tG'L=8yl_ə@mq9@?@lCǵVyf}-Ghh(6l̬)|3\Nyo?=ڎm)z<  p|qsmhi35[oEH(v̄vdnYqzi$KBҺ$\/8rpˣZ`ŝ;H?ɞKCLZීͷѣP*Ni qơ~hܽ1ҏf->@][Qi㧘fc6Ef͚>os 8zy˵ 0rv4l6ƍ۷>kƍ؜6rP_SZ˅ٳgĖ-[裏zqO]"&-wEk\|ٳ'ߦucb߾}V׸\.L:w_gc4ocƌ pºKI Vqn6GEQիߦy^u&LD+V.\kb͚5>|xݙc%W(H$^͚5رcE3)E ZеZ- f={ &&|BLN 1c`͚5^ݻرc<Ÿ]$Sشin޼YfyݶX]LNnΝ;1fM!Dĉ{7nI0|p[b\Fɋw}5k;~#-kA ANNf#GЫefĈ /l60`fϞ- Qb mصk˷)(P(:u*.]᯾*Μ97"88c]BE~@FFF=}1#-kA Do}v 6V? n_kٳ:k֬w}ŋk׮:A[j?| kd_]D,Z5xD$%%a|B VZaȐ!}<`Gy.iS^q,3fɓ' /qƢQ!-kAi.o3x#??3f!Cg8Phd:aoSؿˣ` q%%aų";+r͹RAJKlf]-%ҧ_<N[e 쾒t9Km+(p9k T=7|[nÎ;пj]GE ^´i`4l22@TBBKj|zlYbْfwy# g|E.s s vA̻ U(Pկr96l؀1c`_0a/Z/bt>Ɩ-[e4nܘosuo9 MHkZo T*eL>'Nٳg`Q8aOcԨQ|D ;K^[(J^1 bÆ ܄\xQu zqq1> 0/CaȑxW\<1 T"L0}_$AC$D샡( o&N:pUW.S]тׂP E Zf(E ZЍF# B ~X@k$V@=hFTT, ߦB.!-[Aw\ZP*|@J%RRR `XpM& FEEE0L(..Fqq1f3l6V+v;mrt:$ r9J% R)J%t:T*J%T*RhP(RVEPPZ-j5(I^Q(rtv;rssa0PXXɄffF.- V+`0VNgaRv4 !@4R)r9T*r9t:J%z=T*t:V^`zV=J&a0͐H$'op8PPPٌ,塸+F(((ddnfbf*_LLDT1[hZ/{z=BBB<"lc. . vN6 & V6{XXq.((@~~>rssa4a0PTTl8d2qXZUBz{Xc"Jl>tvN؇ff0(**h䄍<|L&d2hZԫWAAAt\ڦjY@.C.s+ J|gDؼfmg+zb& DI{F#N'4 Z-l`m(JNhl$JA4l)(i6kދBb...T*Epp0רb^CqjZP(V=Ď-' f^Β6`0pCvv6WM&`4V ZVVE@@X 7[ƔĈv5ƌFGC}> R V  lgY2g-% pnٸ9Xgb|`.CBB5z=W.ؼJH$P*\y?ٺ=g}g`0 ''(pKv%a,[oܸqA*}\t pL&pjj"//8>Dlt:OIJ q.x!(׵t:QXXU$p ʍ2 c+a\d{l#b qVEpp0 ˃`*M^>(cff [=V"$$j4\#]l6NVAAWf32mX{r-Y+a7fؼfl5V|իǕ{*t)U~ّF.[ l]60ؼ( /f͚Ϭ1~+@ ^W3gpۮ\3f`ܹuΉ/X,طovGO>/TPWbŊ8rߦ7. 7n:5 [l:?!72Xa… Nc0cƌabbb!==t\.g$ =o͛N 04ir6Kp̟?\.СC|&`-[0 _b0Zb:t|W<[?z` ŋ?fϞ;w`:t(̙ó!)) ~-Ͻ+Ƿia,Z֭իW{n~4q1t7oիWI]}40m4ŋQ\\׮]ñcǰ~|78y$VDDjj6L#Gd2… Xv-fϞzżcZ-;;p8ĸ6z*#44R]t2TlYtlP ˛ɨQ H[_~h޼9-Zfm_@]`,[ Zfb{NOOhDƍ_|yL?͛7kҥ6lñ` 8/ߦ WUV\'??{1-3gD\\Ν߿oG@@R)p5DFFr; tޝG "cƌ0Enn.,X_&tի(,,ԩSѾ}{ >'ȯ3f ,, .]hŋ믿rVEZZÇ'"""6MpK0 0 """$//{ռysXo&V _ڵCPP㑔22qU_\.W_}-[m0 mۆ]vĉ7n͛糸BU!N  !@ "@ "BtѣHJJ*8;}]ӻ~:`0xqI  yN B̛7A4}YFPPH$ݻxb|Xd &LhӦ ^uRxg+WY< bccq9Z O>$`Μ93f GRa?~|e@@z`9}4v܉?@rr2L&B~Ll߾׮]C6m0dnʕ+8q"7C["Ν;H$?wyv܉nas ++ /^}U>2 z6@ G  `bb"z _}~޽{=),,֭[0|?#֮]q^~_"99ٯ  CQTX4MW_E6mТE dffbȐ!ؼy3GEbb"Ajj*mۆ7b˖-( =z஗VJ]իz= ʕ+hݺ5Νd(..8wСtRYB ʀ: `^|rK̘1 22o\W"00 G}\m۶!::ڣ|͛I&z*ѫW/TROnݪ B5 ?] p@&U꺻wСCkl@D @dR@ ":@ ":@ ":@ ":@ ":@ ":@ ":@ ":@ ":@ ":@ ":@ ":@ ":@ "xdxIENDB`astrodendro-0.2.0+dfsg1.orig/docs/algorithm/large_delta_step2.png0000644000175000017500000011250212176652656024351 0ustar noahfxnoahfxPNG  IHDRXsBIT|d pHYsԂb IDATxw|ս6gfg{U/e[\b% HBsxy8 \.%L 5{ I/؎}mlld[^ 3ZŒ,k7}b4ڳӞsΜ9èB!B!QB!&@N!:!bB PB!&@N!:!bB PB!&@N!:!bB PB!&@N!:!bB PB!&@N!:!bB PB!&@N!:!bB PB!&@N!:!bB PB!&@N!:!bB PB!&@N!:!bB PB!&( 0.J Jڊx^_ }]nx<~c׻-   Fyd1{E+x1o<<`nEEEt:t:g. ^v<f;P@EȲ AJ<A0=#0ۑL&H$ I`QTTdzz<$E]8:6(!X tLthtX d6=0Rv;|>o<|>`zp8p88XzO"ˮ2qLt<#Hѵd,SW^\.rqX5ֳlgX˲lT$I FL_pph81qp|R} 7 ;}?+zyrv-$ c;qatttدS:::L&}񠰰Lχ`0`0hN/4GzeJ$#QJX86*cd2H$ . >87B!B!]+N3kǠw]]˯Q~} `Tʺ~ 8uo߂@ `86 .؟\O+t8ӏD"6F0 Rp @GGqԷ~+ezR=A Y-_W׀OzB!@kTnw.WWDQċ/˅/ul `^يD">NaәLz+W_]zo ᑕ}] 3Z~WVB*BMM TUECCÐ]@=7H$K󊾾s^/~ ySO=uʜ rgY~x.N$|> HDgِ|TUUϓ$ /"xǷQ%:Xz1//L7p<~ߌ&oկp8P\\ˢ(P[Cwuzvwx^$\ !quo .Έ%2?駟$I.!9e,tnd2\BH% ,>D" Cf^C3*Y^_2+ZWCh]h^O% -tenB!g,t;$?|c5kcaʔ)8sq뭷b޽P֭C$ŋZE,B,Y0j{Žދ9s栤\p***0k,M7݄~o,[ >,fϞ 6N'|>8+i\}%B!#Y`T֭[؈n9䓱uV#/Br-8x R)zXh{d^ @E/E!dX%nlFv/,Yh4cҥk k.L>eeeꪫPUU￿gq|>}||! /<ꫯ6`-taH$hZ\wu3f y̛7Yŧ~k"{qwy}! NȂnT?|Z guf̘s9?7gϞn)**…^'p>5T ^D"aT!~?ȂnTʰc< 0acYKK1m̙m۰j*|>wyT*"8N8a>B_ogh7* pw}Q>`۶mXz5֬Ys=ꪫ7`ҤIǯЄBFgX"B!#Y`T ;^"`A!$̒P(bB!d=ɘCB!g,te?B!g,t' SlDB!g,`TUUs]\ %2pf˶v߀BLY`@oooG^^^A!$̔ X,f! n ! n ! n ! ҁn ! n&BLY`@7TBLY`@yN3 CfjeBLY`@D"B) ,x42B!c,lg2{H!dp̔ tA`s] B!9d,lKr] B!9d,@'bYf,˦وBLY`@E4M! ҁnZ!1SX6EZBbTUfu1!䐙.˲ijeIUU(b2) -a\!vZ ??nCȈg,tb6h]vJJJ0k,|_G8u!ҁj@Ȑz'ގ_y?8$y\,Y`@g4@ꫯᱲ~%.b˹.!#β, "Gk/.Bl޼u̔ t bAȐyWQQQO<I1t;Λ ضm[KGd,l;b2$TU[o/<#)$شiSKHd,l\.yr0 |~,cҤIؿ?RTIȈc,l{<:㏱h"a "bĉLY`@O&.!ǬƉ'Q0 x ;w渤XSss3*:[⪪6,Y`@7ӤzZ[[ݖ ۭkM.Cȑ̒"L(@G߫ aJKJJt:{a+#!Yҁn)477tv[fcm 90NUUPrd=//*kFB=.6J@9I0qDG5̒t3=eXO"͚TZgeY㩅N̒ts] B%#??7UUᲹgo߾F% ,.XB)6DYB 8pp,Y`@|UXS2ЮJv ;w22% ,N  J4E0책w}رp:΢2% ,A\Ab@Ft tUU1~xNHfK0F$֔H$u+݇kB'YҁvAd8m{O>m4l۶mIȈg,t;S\7!(;H l!.IfΜFttt gq ̒tFQIE$ B' f=^C@B>$I_|q| I(a,|XK,=%'@[2Y1eЄ+d] 2n-= )&-:ҝb,Ñb2`h@]ඹ)x<lڴQ,Y`@XO{{;G]ۭ]_LRx<Eјk/HPmTUs"#| ]e̜9L2e,.!#B2}(˲FvrJ\r%8餓P]]KBQ$^|ݻwgUW] g}682p\xG{2(((赅*9[n=W~sY0ڍ@ߺu+.\hUPQQrw`۶mY3gf]wLp:y~!C}ARLtGuu5t'r,FMsf}?8TUŊ+=8455>,_o^D"OHގ^6;DY5EQ '@]|M# FQs oƹ瞋^xFmm-zފ.O=XŻヒ$ 8NSΈuttt //k)!kKSg=E%dmݨ  ~!.Bv@ii)P{./^EaΝq81N:1!#(hkk볅( |vB@2e >p8mpY`:.u1co]RRK/'I i 9xGQQQv72r@WUӧOQYhq+3!#Y`\C?r݄XKkk+.wË}qfѣT% ,XXKKK Ǫ7g!)>F}},Y`@7ub-ŽFUU8W3'ND]]ݐ,Y`@G EU 垻6|m, ~]3W)ݺH ;w ظ13Fn=tHB,I*H$:'hjDGQb m{>={DѷCW]6ʺ}w GUU^ 7~΂,羫*8Q{HI&Q;dh0 T*T?g1g W_%q̜Ĕ)YOD*Xgzo!*|0?0qv\}S: 1)Lر?'0gHSPU "N9ݭ|’%T7yӧ;tc(BE=~Biiϻڵi$*<ӃO>agl6'ės o'8T?HU<߁._⋽˳z(?ӳo1Edž %%6LG81iR>8 ⬳$߭[yl O<$iG-J b9wN IDATn{F:PQ@UoI7E?Sx$n9ws(++,w!R( ƏYw^L8qKȈW&rqsp.vvR裌9s\~ 3g: *֮M/I Qѡ`,'qmm2x#[2(p81qGǵeo\)?ގNs㪫u+} -:y4-&Lc6!I.ḷEF v 3sĉ<|5k26qGvzuߓ1c8,~;󣢂jAo1Fwg *3{ϙBe%[4Mw;׿jfDdN\sMg;qy^|s\šCN^/9sز%z5Kppv0&\ڽ{Ѥ,M,B$+8ﴶHpUVr,\#DL8.ċ)S`Y UAUyRlx3 TTppU:,wfcpVVO:˃6ADY 2>ga,qR"/.tA+q agJäId^ƏJ"`Jttݮi뮽6*']h#VwtZ -["wцNsCUUn^; F"Z Ux\ŧ 6́FM ϮPX{d4ڏ iᦪ*>>-t;k}(:ehb@b}{^8 ᮻ1i|g?+bN~M?nȆfcpxq fr}v(sBU?1e0~C_'2ƏO-tbIG˂IJ~l6˗"!Pot2 |0 IRq5,X=Ce{o]u6l*`b7.u#b |x#v:úb䣏F<ف{ÌZ \F+d0f /n:31\pW\ `?ޞuؼ'`#2ĉמ%#⭷1ƌzc N9ŅCԖս~>{&Ȳ1c5m '2ƍeQ r`@DqN@߃3fuQc9k۵ٕ3׷M v9~@,Z @W^9.e&d$3ˤ2X.-XCthTϫ~?mm2{/Iٶـo}+'H$/]32/*+}]6eo3ַpXݮ]w:;RCQn<-mAJڥM#*fr=96_>P(d 7do'~Yi8EyQXh3=.<>%v\1 ,^ÁP(H$TUũ~HXLC@LFk%UT<\ Nnd9طOh=i6*PW'`zKP9o^gȲFkǼoT *lY ;I$NsLc3 [o%)_os0vlCF4bpڨ0ӓ-T k֤ۻLqK;[Ѩ>Hϧ|]Ɖfcvg h'uU: DTJݮ;Qu—u+;D8 +k{< N< ]+[O50~2*׿&ډ_"AP ɚenmm2BPPs FpvbeH($8ز_hhYUq≝']Dr`֣zu, RSB+*v8UUn1h G+}PmԿ(5}! n *" * ՝߽[Aa!.\Grp8'7=+s:QTNk$i/"mF: Tx>_x8Erl'yMn:.^5rͱɨF%V'I歷 s*[Y^a> :Xa KE0]V Վp%zj뤳 2 ZeezR)@:G;BYct^}5HD~ m"+S;u fmַ盅 ]H&Ushly6'E,ʎ.ϟ{^zVq=MF__,*ƌ8tРbѢEYa5%I©d2d,@[ގ˗Ϟ]d 6n܈O?+W6"Zv[2ڵ @ߏyd,oPzM6aY]쪪f]C@_`8pL  fʂ<\|xs'NwO@C[QQUM6O̺5tUU1{lq$̔H?и'}׮]Xjq'lDb~;wɓ}0E~@-c\&cΝ;wn@G㬬 `[ng2̒pV²e,Xĉ{g8BȨRWW~(Uy@UUE~~>:::\3gNdQ|$I>}:o>"lX7W$IXv-EAUUƍ7 dTiiiA[[N@OI0n{o[eEEEn:?x}O]SL'|2",'9iEOSK2}~'BPߣ( qСJi&̝;ǔ;v;\LYAq{1F'F'2*ر '+!%eHRD"*-[0{nV1eӦMC:޽{Y %3eA@N&`Y4۞={PUU5[kt \^^8p@Ԅ̛7_v922̔,7DGGGV]_7nbdlf!k.?~@3I Ik0s߿ߣWϟcQPRRaLCH.) eP܁TTT F^"bd1S[}}8`V@ WQQN'_cƌAii)h2aкǍ~!CLY0,^]]͛7>@4Ŗ-[}v|8q- G1VFK$ᦛnww6˲qnpqUUQYY9… ,?~* 53eݶ6k,B~E}qGc&#޾} "&N0ڣSE1c=%+ظq#~ӟ*ЫG } %3e $ ˖-lݺpx>GN< @h-gz޽_߲e 2 R2̔:]?|M,_|8?׋d22r4uuu8} ! 8%Iɓs~wݺup:>}zee@YUUUFݮ2\̔{E$矏?9pH9|B>äI440ecP^[[x<ޯ碯]s\eee@O]#9c,XxE P[[_ZgZ1:L4i@_ѩvxg}fnOdYƇ~|;}vY5]ԩS\VB`Z6 ^z){=K.9眃 bɒ%U C @,%d ك]fFn5t9M7oތV~齎?Z˽ ut3fʂak3 ?OqGt:dr] Bz( 8_$AgpP*f͚uÜ9s±l(--t %3e5\.i6"1&~0 x\ ?>6ly,[`\QTTT.'!CLY`@7@bNz7>k1 лE ,ݻkn:wy}sr,_9̔ tcHIc}Ơ8cP*ϟ_o;>3`( 8r̔ t׋T*bҫ"BL0?z\K/3΀˽mmm*'!LY`@7ӽĜߏO0 dE\ 2 ."[Z~)>c\s5G=,F }Bҁn{9+E5`$DF3ee= o%d$l3 ;ksaA̘1s<`u /஻Xv())NrLY03ōZdD;pQc9(T+dEۺڏ:zX㡇믿 ,ދyʫD{x=˰ZELֿeU*Z{/EEEL0aߕca,lADGE477|pU. .EV~2=UA<3۱rJs9xꙧkPUT5{a$EB3l/@HN) ,>D" G;vp;,GHWfF͟`ia R)|.c6 Wa3OGGa>m,ߣض- b4.T$V(bpY8漉bǎ4R)ɤtZ>6c_ƍ)R x^e\tQX')FĎ_"3pwAiiSXq(,T=`Olj jp Y O^]$)%-"BB5GG뎼<`۳^w4nmmmpY$eH&\,=7h,dXq<@TH_mni, 2g0oؐ[oEvXLwn/YVQ_frlݷ3Ѩv &Lpn,_6ߎ"V *Ms"nA; gpt_mmn^='M<_56hiPXca[h̒2|G@QOaŊRcy{={se458`hn a׼% IDATud( 0`-t Wډ#1~+3mKMʕmoVs7c͚<d3kAU.>@dYE:@rzlA$/28Ўbyy'Ç2v.WX.zpXI'ylYgH]vvaWU9c'h5*_~ upSh3ַ}WU E*+;'QG "7Flؐ~\zi|˖y' EeK>c^(ݮw*@PQ`l7]8,鴊dRF4A(-˲H{axꩪJw¶mi8 B!vZ |YNgWEE8,f* |lVe)\*$ ٬(>tZA" ehD<.U;N^~y\־w݇,C~> .bTwgpYpEQQ羯(*I g}xD2R)ɓ](/o>(#x\A[3;X|?|>~^ ?٘mGq K8t~tZjcG,,SNʕ+y*b1'xVQT&hiPR䱘@b8gVc ::Na>4b{VMy2x6uWq Zf`dQޭii{7ĉN̛=ʻ4 1Q^n:]gIaݹ3Gm E~ ?^oy?x^өٕ hiptb3/~;/S5넧(*}7f2 St AN~\Ӱn]O> ɠƉ;,'lg q8_V(0~!Q__MMMXj?|pw\p٬ >8ui\S`,FevȲV1'̪'17q꩝8\.m}WW;xqrQTkWƨPt6ZG1zn;""%_3:+&sK %7}x衇tqŻ1{ xdws!,]ҥ;{9<*{.68ݺWP9ۿ.g;\awCa ֭%H{+ v]*}Z1o^v(¤I71h ]!8P޽S3 Z[fjEQd\G}sNUFQQQPصkN<'⥗^ʕ+YsT TP5#|2 O<yLc0x{wqp;t@nKfcxIt(ɓ >\ɓob׮6)X k>}ZǕ+!Z)4i"BHWiS!x* -q,¡C%UbbMѪU2\1@,&a2ѵυFaΜW1mZ g5XeJA۶mYd5l3{DЛ4i{jB(|poh?|Gx1{lo6xi>7PUȿAj":*U(-aժ< Ɲ;Sx# IIXW#=݌˗x,]ɫ;3ϚdƦ@ssshBerݳ"&F#꫍#7Ga( Ǝয়i]dD׮rO)bbdj1BCJq B`kW1~m\}x __do 'OrcƍW`=SבBHzelo0i$FM6fϞf͚M<+_}T*+ ʟojmfvmH`41v?x:F /+!*qNgC^)nj !y`#9Wz7p bq*֗^ ϧcΜ`\bDxffzl63Uhٲ3x-6m$zՄX,k XWGK?<:EAAxPUFs'oͭp!ddd_`μX"… 1w\&>7J >CH$.7~]~h)L(; 5Ո#f cT ga8qBdDk8 N DӦb?ef\nˆS(ľ}mOyW4XzT "Bٳ31t>kԎp9͛mM iSU1`_ lY(22ɱ")ɀ#GJkTJ/ j|XV&$*[c."-;v@˖-ѽ{w 0ydH$sT 9311r\)71w-t@`#-̈́o/1Sy7a` p9v;0` OӉ4~1V˗ geY U]>1l0qbT*UB 0kV0x;";Ǎ& ¦Mζ`tLhDΜsqkc*޽#//o&كإ} :O*)(IxhҤ HDffGңq _}L&?5 Az3P9~8z]nÞ#GԩSi<+ZӂΙ^իѸqc3S֝ٸqcʖ^ݻwJP֭[kHdff"33}u^gEQطoGl,\tʼ^~ SNeVz$̟?aaa͆^Gaa!?xޢE hZ8}4W^N+רQ#tm<+Zӂ.->Oa̶O>;pEOuhZTg-Z?y^KAA#٠UV7nx$ӧO[nW6pXspE |ZE"VkݻwcرN+,E"-ZM6ҥK2+F&M6b@@@j5=-pi&:*A>-iA'Ivzao>tr^U8iӦE=⽨']Ю];.\DGGWUзo_?~ah/ p :j_Bhh(4ѫeAիW=d#,,ܾ"55Km<+Z~.\[naȑUNT*bظqG\ކNhik&""999LŋxG*-5:v 8w\y>-螎U+޽J=X}:u*5j>LZݻ1m<9}{W\t._;VZDDr9Ο?__Wx} w *m_rV*fA f_gϞ=bX,bNNcr8PAUz+\R7x 222iW\\ζ) ###N7ڵkWEGGʕ+Dk|ٗ^g㵂~4i}Ehh(йsg3X`! 1p@"// b7FPPjSVB J%JfԐcǎyh֬5k5k<'??lСC\|ޮEj4o޼VGEEfի~ݻ3ZZAv(Դ49s,w ͊+0i$DDD_~O0zh5i&"pA 0-R*?>֮]۷oNNNBBB6ÓTGy7oބV_t :tv''',5w#riii~:ƌ˗CR?ĵk q5X,,]iiix8zq?)lX,ӡjn߾$1jRΛ7 y]kܹs'þ%** EB=/^DNj}6m z˾N8hACk}ر(--EPPF 6`{B$aҥ6l4iie$nAAA0ҰZDDP(P(\c IC pU*^~e^u5IOOqV\;v@ @RRۯm6q #Ѹ2ƣcǎX~/LhACkT*?~NB.]ZOǎL>ÇNsrOP*0*`#+MLL z;w^y&ڴi~[ahO dD"a N?W^ +R/u놗^zS /]0Yi$Hz111ܻftWj A --mW]d܀jE\\SsG@UVꫯju o&55kz.lҭRRRЭ[*s.H3W+2IHHNpuh̛7/ƩSt-oիh۶-f0CӧOzOA] آE &>OÆ+ZӂΕ&lsj{>4u9#&&&Lu=jիWC"̙3N *ՅӧO#""\qu^}j.-iA/** 8ۥ!7nDII F Pyiii0L*$$A6m uN綁gNB==zxx833a-iA/--JbیfÉ'зo_wW8і-[b8w~R8**eK@WlpRzٳgǺ:v]vȀd}<-yAS5.]Bqq1 V;v ..ݻwr]68y$Zj Ma G`;UЪU+ZgϞj0ø:]Eʪy<,-iA/,,f4hN8@ݻtÉ<͛7[6]'ODll,f8A ٳgO9sIHHL&s鑆@Wݛl!&&(KN[nHJJB^0~xk׮Eqq[ө/L&Ο?}NY|޵kW?Э[7ּvN zÇ+Zോ7EAr [PÇcĉ.S_sCBBcO1}t̘1111xGжm[!00AAAߟeBiΞ= ٌ^zj G6u /_)St=tD&MzX,NY"##YYYxG]>-\h޼93Uat]0aШQ#{m6t:+&3"$$$a'.5kGb4i> ?Edea{;M=pC0dȐSF'-.--Fix\tNrt3gf3Μ9S@(N]HRxoc\k!>>j=[Y7a;wޭriiij LP~յ gp"?$&&h4x@D AXd 5j9s 77֭rjEQx7嵣iHξ7%$$0سgb1XjҐi֬233kw%-:BxbDGG\o'Z̚5 7oƶm0lذ*ȯ_qqqX|yqr AxxxF8pzՔ lݺ5ropI 6G9 N>ZX ;v,r7 ^tCٳ5T݊Cv+B)"JIAe EQڭӧ1j(toN F۷cܹhٲ%[:P`젨@QTt:L*<,O!Iv|=tի6o X cǎd2aJ&=Hp*/%-YAwR)^GJJJs @ )T$v(+XDF}\Y+ -d}63 H5nq?cҥxwk=֬42QNBJJ?WÂ_7fVQ:EJ$=zb{ncǎJ&"""^.OpI |Vйē$''n#&&VNV͖i+貟R*+ I!$ d"1|'xw?@#&&;BE(:7|'|idRDFpZ\hzhtYBRR"""8rt[{\alM6! u:$AhfDDRSSk{pI |VЭV+B}4ЩS':ޜ7>2=z=Ξ=[~ݎ 6`uZ_"##Rx؃KZೂn28*EҥKW]=%&&* pq-L[:|d{@Q/'Sp]f7oƳ>[|j=HuJpI |lk \r,m_N@ }۶m(((=,, ~~~L%-YAqK.}|U3cȑXv-(|:t(V+6>{wr"#GĒ%K6e\CƑ#G6>;mMV#==Z3DrD R!"ca*11ufs0`*1fbj¢TlEo S V6 VvnfSlAJJ E$R!~XD2G"HBHb$fHOFJ `/j¼zfJI0̰wZv3e@)mvǻ+u t|D+Jy.9ޥ)D2)~Ry.C;?.Ͽnì3P`C\=t96k0`,~6Gy6:ʷ_ HK N/J"~J'fA0L"G#Q v݈+lYQvr-VK/~Mo3`,62eSb*)t4 zGvpiO]w8y!LoWH2y->ўJvO{i*1! 42ّIA ]\uM6A'Wn#H:Z nVZtM]G>8/vks! pMJMLD#IDzEEP6RbffMh3 _꘲4)泂N?7QSmr1!$$F DK2 H2 2 -zm z݆@,"XEf̘H3#;6 ڄ! AplO`ؗ@n3vbAr9t wqMmi@ H욵 =D1zY[FXo-i&]0 DTW3^-wm8 gIR qΝ;h-xs nT|+WmNl읻Ñq4@QF $HpUM*^gq[urq5g hElty C΍дgS:~ %K"(G1 bmOR=fx ٥֤ٔeیENN%ӲZԢE(Ԕ)S"(d5QY%YfrrrQFQ$IR?ͿSמxF9{2(?6;Vqԯ~>RD]KZ@Po(X,FNN4 xEQF5k>KW=]ǙB,c߾}lƸq{n|'xofF> 3gVZ;v'ptKZ \v իۦ4hƎ[]c1uT߿v믿hH_1c`„ rlF7$>+F7Ǐ ݛmSxz͙0a֭[W/_t)6n܈ 6`ĈSG ~zhcǎ̠-iAW*jl8pc/4H-lu۷aN H0uT^-q_}U?[nE@@@){?*{\+Zӂωf>|x~߃Z7̙l޼Nٰa[Xݻww3i˖-ʕ+_'"\ʎHJJBrr2Ə϶)<Wch֬;)K HII~Zc2\tD‰Vl3@,mA;O<dɒ;w\aP*.Wݠto.]K^vKpE |Zйʎ;8x n߾)Sm E$IwšCpQ駟O?obI5]vɒ%hݺ5MV*\tXsϊ⫯Btt4zɶ)<^wz =zY\93g_ԩSkEl7@+m  Iزe }YL::uȑ#7x/>\'1mP]o5ko+Z d6DX,l*{Ů]i&H$bl y< тAw Aq{lAQv+R;((P`젨|{Vbs1hں) -)<$ N63,6K̘1gΜٳѴiSNƨ$ ζQXX3f`С|d8j(D *'a,v(+XDF}\FYhNՄ|C>4R R!fZH9RPg1vޢH,blGVn[%@P XvW\,<سg Px+\t_}&h1m4t:YS-RK! uVe۪zXl|]'pl)8bFha.A(۸ Hټ4 @@H־زe ƌ#FƄ h1pE |Zнf/Ǝ;c4mڔmsxr }׬ fv 0 }T*Ŏ;0}tL8.\%K8+ZӃ|xb|GO1j(MawƕJX~=>C|爉-[eyyyHMM!^ZZ>ġC*<ѣ9r$ϟ4_K,ApرrqRJJJ0a?g}_mxxe/[=A7ٳggyM6ԩSHM1\z K.I5k6n ApQܻw bD}LVIDAT!  ۶ms:fA hشi~lٲs2t 7Μ9ɓ'#)) YYYݻ7H hW?COLL͛7aXp]t CE@@`ŊXf ƍL3f`ҥ=z4`0`6qmCeV*D4 kםl6$&&b޽Xv-nܸQF/D֭6ǫSvW$qk׮ڵ+fN+ ^=/B$A$!<<Jiݻwϟ֭[!J< /`֬Y  h۶-RS lقI&^ѣGq!`P(d "EQ0CJJ ._ V \_E޽<<^ n>-;۲eK^&33ݻwgӧ9);;AAAo[oaȐ!̹_|F7 &@bb"֬YKQZ( $IB(BP۷رcѫW/уPyx]i+6V7Ղhp)3ׯǪU_AcXlՊ)S`ر#aÆ᧟~_9]jB(gرcY1o<̛7m3xx8BL$c zFՖF<Ы%ѢEC&!>>gϞEƍa0h9sm۶4h>&ŋsNr$%%vdD"H$BsAd4 zK.3ZDdee9? d Xd fΜ@'I۶mqrb8\t.YƍkuN\.}<<<<< hWnpE |Zй*=\"f o-iA/,,d"&\tLU=\^9'hO zqq16E>-%%%PlQ-:YՂxk:|^FCΧӂ ahO `C-iAt,<<<<>Wc'z2$IDFFh4mW#HܐvL&HRMTD"Fܾ}())hh^hNCII z=JKKQZZ ¼[,vl6&-@X T DPT JLT L???d2j( H$d2T*hT*!AG DFFB,$kX,χVEqq1z=`0`0<70L())VeL&XVl6&wM$HH$I ŐdPTJPՐdPTh4h4PZFPPPGD"̙3V+`02XӡEEEX,000ͰZV 0+    <˸?S !3ZF`` T* ՊBEEEg~7L0 LX,ZLw}s zE.C.C&A.CR1w JZ( "AhAuåGعs'/_~テBL&Cpp0S$ $ 4 sKR( D"Fb1 EQX,l00L0BsQQ NVjB$!88)rRBCPȬOWlMGbaDiKJJ`0`4a0P\\ t:Fhj(,,^H$RDHH4 T*SyҶ)JfV(LD"B&|+:i銞`0d2A2Q^NBR']/RZz?]9 B$3]F66o٘Fjlfdt>EY+,,Dqq1S1B(" iTbVR[J%`H$NbGz3m/mgYj(((@nn.Sz= 防+\.RRh$ .߃tcj2bD, +,,dc:ΩAߟEEE(((jT*Rd3 ,=Hy\~|7Ln|rrr&4j5S. JLy~8麏~эg{V"// 1Kz%CwEfffbܸq vgj2.\zyyyL2L0L(((`*N07]!l6U={\tm=^F 'AE8͆b")..fi8hZL&@WXt/e{IjFeߟ=0Rf;-n PPPVTAWtnX-vff٩KWtN ]"@1P(rC\l63O72n0PPPit/߲e* |1C5)J”{PUҞ"F.] t]M70&gƬYugK(§~P?vu̘1 ,hpA[.KW^e raz;5jsN-[D@@ЪU+f xA2֬Y6m0#{=` ߺu :M6h|x2U-[-[2zj >Xd  ٳgjmp iӆiǓO>ɲe̙3  ::b$By&"""} FϞ=Yw˘1ct:󑟟%K8Dlq1uTt#F`bvykƌիW鐚~`(Jdddnˆ#lu+jj>>Ǐ>|Huu5< sFGG2܂4?VFD~fɒ%&JeXe^~m&''M04tlڴtttcml޼ٌd,˜?>t:u p8c1ɓĉYMYY1Ƙ5k=zcԔzY/"sG3tyʶm&''9wD7oް~)..͛>|+Vdx^ǡ n"eeeDL;c mg>[Ysff۶-g)⊊ ={D/^p}ۉ|>bxD;Z)Nd `__7nǏ@4ѣGY}R\pBN>Ν;D"ZEPPP[ b۷ŋgiiiߏöL".]f"ܙ3g>}ҥK,XYz{{3gggimm#G8N1JJJD"ܸqOtYA޽{㡧'}2ׯښo˖-455G4C,ʩx# |rp;wPRRX۷os],bÆ ㍌|2 OEEO^uŐ_Pcǎۿʕ+s1<۷_@q='"" tP]DD""".@q (EDD\@."" tP]DD""".@q/PC:mXkIENDB`astrodendro-0.2.0+dfsg1.orig/docs/algorithm/small_delta_step3.png0000644000175000017500000011123212176652656024367 0ustar noahfxnoahfxPNG  IHDRXsBIT|d pHYsԂb IDATxy|{Irr_rSЖpx/zT+֟UkmZUEg''gQC0@ rfٝL$"fKk<<3,2!ү.!BN:!BPB!:@N!:!BPB!:@N!:!BPB!:@N!:!BPB!:@N!:!BPB!:@N!:!BPB!:@N!:!BPB!:@N!:!BPB!:@N!:!BPB!:@N!:!| ($a0 t,ˈD"CSS00 0  "Ѩh4 I `4a6a2x^x<AADQp8 A IRuq~  8:Vq˥6 . VVf. Niiip80 Zk=#hjjA}}F"B!mFb>^] hu]Z,XV8mU׻-p8t:#o^z 'O?a`X@& & n[fl6 -F#8ԝNeHIF!"A@0D$ ڏE gǃF# b0 vt5`Vvr:ڏE}]xd;?:5lѨRꏶ PpP^PMMMZ؈`0ݎLn8੖nk?fѨ_g k^- DhY@ Qa`۵V+/fY Zy<#55UTat:p8vf2`ZNO Z^-˨/~_>hhh@mm_A444 hjEzzVvv)))HII^d2iT,HFZ%Qx РpXj+W]-zo u] nZ~VV{B0Dqq1dYƁzsbsxB!{:؈BO/Yԁ."8Kt1!$^ ] DBH% >ЍFcA!$*裏b޽[lz6'2vZhTBH% D֭[##++ O<=\Gň#0g,]$Iظq#<f̘?XZFf!}zɂ~wu.L8YYY7o0vX7ވ뮻1{l<7nM& v@/Y/}˵nN; ۷o}馛p!Xt)JJJl6h4 l!@ 1,9M6a̙Z{^l޼f^۷GFvv6.R{i^>voaa{;B]q_eA/Z PF#.YW]urss`HOO^ϲ,;lذ>wy'xwHfHW!d2iY瞋uᬳ˜1cp9`ʕ. eeeޓ/qȑV l~@!D|˿{N˂_г{nK7o=WSS t;SP\\;v`ݺuF϶`0 L&L^>Bz߉B[͂_:[nixQk׮ر9֯_y睸K[`ذa?^ !yzɂ~]1f D"p8m. b!K2UFݫ|>8^,!F/Y/X<RRR] B! ,H@w\.!K$ua]=$}zɂt\BH% :~.6"!K0,ˉ.D"]O%uzʂm~ ~ !t in; @zʂ &]LS }zʂ t;$}zʂ t;$}zʂ t\BH) :0BH) 6tބBH) 6r?B!ݧ,H@D"0L.!S$mVF!{IG7W"=zʂ tϧZ!S$ma=$=zʂ tA`0] B! ,H@by> @z tB!IKOY.n6"!S$mGQݜ7!=zʂt!t i]$l~}B!W[t,8. @zʂ tQuS+#x,CD>OOYoM $ 6XfMCH,H@'Do^/.deeaرXh],BH/H@e9E G=+oǞ @mۆÇ'xIzʂ tF] Bzի &  >TI'vؑ7) 6ЍF#AHt1,w^H$#%%_uKHHߤ,H@7͈D".!=GY "B p``شiSHH,H@7f!O?q2e _fAEL8۷oOt IA7,|駘/2z ;w XІ( 2ȑRSY,><ƒ6AرFF\`YQRbࡇ<5ʈSs>$Y 3BX̅͋π'?KqolTPZ*`Æ0n͍O? a͚.܁ `Yw1rK ^yOƕW:j;K>,^Oj_¬YV<ЈcҡC"nA׿zp)8 l6օxqw~ /6oa8<@:~؃ .㏃0Oo]DPϋi1 o8p:ʂ$i=33uuu'|/|0=.7/=׊N`<VǬY44H7RS9Xʃvӭj'$I;p㍵ذ!,f3AmC Ӧ1p Y228~gm°akBZZaHȀ5˂0y SAlANANN[~ /vb3xÏ{deqHOr`8qk駽Xu9M&|]w5kP.aY{̋cMp8X,8 tRټ9^ar,& ,$ /"%#nEJ `PByy ӧW}. EIpZ{^^SNGuIҞCX,7 .ᰄʘrq<؀ b43Vc:\~y5~ۏK/u`D6m dI nÇ0f^ݻ޼y6|E&)e$(1~ @,&c`xJ/ó6a>$nsXK0##Ϗc]DU+l214jdYѨ4> ]a";nn7v;ɓX<G0xEEͣQBqq imCUTT`S,c׽tBu #'||9rdK QsNmKz%涮3 :ƻoF$Glt[DQƚ5A=*⬳_mFn tv<3ƈ _l)JDE$X,3펐;Y%m ]v] s?JtJwxw斟 Nkw&`h^yǛׂ\qbܸq6GE0ۖJ/w\K@؈jo@$"Cd8l\@]O> "Q\q33x _(]oCAAs7_Q^ѨL1|xs$(`PF̛LL(" f7o_hTر&m̛k].^= Y8yg;{z~`3D"WNʙEĚ IDQDaa!e ݨQ~5$>C($#`42)$/؄hTٷ% Zg?c`e閸4 ؼ9 QQNɓ!2Dʌ-2 >OFv6wzon[!i|\9llMڿfWzeLLU54z%ʬi5ަ% :Ջ?uuF0Ƶ^~~vT_/j^c` (uYV~w$F!2A$ _/ϑ^|C4hT t & J6W: Ɩo )ĝs8}_<v;ܹV \a4 IDAT*4YY W+VEu_B,&k4.@Fe0aB}߾(^Q)),n9{|y, R\B8v$tvr&w,Ð!Ch!K$u.;$~lsFDHiQ1h ߿JH,H@7D".!؈V8efΌP,zV!$% :f.6"INj @7rFDhzqq1A@eeeo>K/Yԁnu1U$@ f;CJV3# سgO@/Yԁn2 s}g^/RRRl;L#V>p@L&fQ I<#ބ~鄁nV.2 D# iA/Yԁn4uIr%I`G@ tu i,H@X,.!ݢz[׆2(}ԨQرcGo>O/Yԁn4uqބ$'*%I?cN9TUU7KH,H@8~)rya o9Ç 9F/Yԁ닻w J.aT;RR_` A ٳ8滢}M=TYYc7ш Hp8 `YCEQQя~zR]] a|" f39sRa ~AX*͇?(v eu_rI*<[;X,}6s(ػ7to^10x߰"R5>j7ܐ=_]-4_Va<|ըbaa)sذUUU55Qy,8mA% >ƍ~Gqiv~(!3Ӏ3S>.pXBhdvpX92 3fs%,IH2-R#Gec$~V'Zpn TeK@m,Ywk:$}p88Jd42XzV ^UUQF($rq=yhjqUD*_/[(xHKHYW g`ǯˌ O>Yd7 %ط/>j'.1c,X\Y)`ٲ 6?9,ۼ/!a6+b )@X9 ;FKդ ,_۶m;k`:.PH€;w4*``PQA~ DpTb0F"0yUb26ncϞ0s ~n]<8ؼ9jajU5N;͎ɓmmG_waPyQMM"rr q ص+HD{׿VCdD2=e" &˖Wl &S~yyF7[l?x))}LQBAޮ]С\瓰h;.ly| ( q= 78&bn+I2x& ? Te W?W~D"ʺ0+LӞzE,_^ QT*Fq? {FJũϚ+ [>.,4aƌQ EVs#2~Ii_o@M $\xc48@EwARڵkqw`m>4k󟧠Ȅկ*QRbǂnUᆪ5ʌ G[E$Lv%@+puk?y Fa@X3Pj3g%Kұsg55W39׫{sW7p̝3g:PZ/!#;|8Z}b={r \~y&NLjk"?^{ ]vvǵŤj5Hȵŋ.ܹs{ȄYeA] hluukE9>`0Nm>WhQ,I9+p5K <،HDŸ\20o^ < ˜1qEq>p /.CYpe`@F6LO"?߈8f{]<#ʏOwsR?b7A\<$ 8Kx($IwdcL7ߜ4^緹\;a4a9FiIr;ʼ}7ߤ@'I,OU,Xv-~ߠmWT `ܸq!ݥ@Gw_999(++E]۷tvK.O?[yظq#rrrǮ]`(-`0Պh4]W=yol8^݀T<"rk<@XqW\)84>ćƪU}"X Ҋ7΢J8o=c~N`cXPRa,b{()q`Ӧ.cJsEn#(x6 NJ/3'ra -q!c޽1bDO>'zeY- ~ӼzpBz(,,ĬY I. ߏgy^z)N|}|\\D"0xaZ<\+Hر1kV)|%%vs ]~@b#.؍e >{/v  %%|_J VlBYYN'!CY,,l_.{AS#+} $̘16NJY2ņ>j‘#L& \xZ?~3 ;1t{FqڻֺY; Ozoח[peJx?ҟ$FCC h=%i=55q饗t f] tQ]] عs'z曐e+W}G|7Xl}ݸ|>87mr[cm =C[>trqIh; j;2hPk[^ @a[o_8=zt騅ǏkѲGWqVZiI _3g^~eH{CѣGK/{ҥKqyᩧ˲Xf ^t:a2TLW,"?ަt#G?ߓE#j @sw&ЧNR|g?> m @UrN˅9s`ƌ())={W_am` Bm^eLe!=rkGAcccBJ/Yoq\{ڿp@=ZFB~l@HQ2PƨX OfA=NHR[[ Y}Ȑ!8nJ^ I$uphVVVLhDaa!c#K$} I.L[!CEH,H@HaBj,etx F]$% :Ѓ 1W=z/̠ik0|p!vZBH/Yԁ;!}MUUUFv}E<ɒ?% : C:@܇ @!H/Y.b.YHrt ~ylwIuuup80; !}ɑ#G۩v:q(((:IJzʂ &]\$QqѸ HW 0h j,H@4\= Q1pܢ"G i]/ ɥPPPЩwfP].B+=eA:]G] +,,vI`V5 Kˑ=X > ͛?O>,H@ollJt1wr*++]]s5Xr%BNwyoCHoS$m|>ݜ7!(**k;{,>ݢK/g;ᅢ_SIP% Kۇw굲,w:qDUUOsb|F8묳pWC8e$aoeU  8aÆ(?` ={`ݺuXr%DYTd;x뭷Nz=eA,xpB-1qD 0SWIpfWIɨ$I]rePSSiyl6̛7Og`С9s&y晓^!=EOYkqVZ3o3gbx駻t >O%c޽Х.wO<33G}͚51c, $Yj|8tI/,sW]uc۶m袋Ѐ?K,bP/p^<|וAqBN4P_}N?t$Kqs8{'BzW]帮uϗi,zAî]0l0<ߩweP3]7nD$Y2 tۍSO=zʂ^ n -Œ3yfc٭=HrؿہCDSS`wXv-2220zhJ J9眃u!u{9=eAܹs/bڵ2e >> Pbٖ!}?Cv]=^\dg())6/JEII @B*OOYЫb̙EV(k6U$peU@9rd#k]-Y9!CtP[l_v0qDL&_&MrIzʂ^fL>caܸqXzuBZhT72?dYƈ#:I垝 @Ekwl۶ X SNm & &M† Bz_/8x ^xqXd DQ쭢WzkNFcGoٲ&I;niӦaƍZ!=IOYktRcٲeusgΜ[ /[ElĖӉ.+-ta}7n\uO6 =vxBKOYov`+ܮ܉D+--Ő!Cv:ddd pĉƑSj{<g}I߷o֭[qfQtBH"ٳÇ{se|>jۉ*HIIۻ,Bz^W֭ٳ,XŐ!C;S7BHRZZڥ)k@Z詩hhh{`֭eSL/%% IDAT 2 ѣGcΝ]^!m:9b6lIPPPMjjjPWWQFu=jv呑ѭj6ll5 ی1|MEi[BΡ<ӧ~zBn0L.;KHW|)kta@~.O%1iҤ6G `Ĉؽ{wp!%=eAŕi{qt !ݻ|.]`0ӥ}mib0zhB!2h4j!$2(R K^^ PXXu(F=ʈݻ%%%]z(+vW[0L(++{6mڄ\.-wOvPTT{v$=eAzaa!mۆO?^~-v܉&LM7ňZѯX,Rx]z_WﴦbY]nO6Au@HOSڴcr.~̤+//G4CY$ غu+n-_~eKHOSڠX,ٳgoߎZtL&"HB@HGsS),,;op-:]=OocٲeVl6@B@HGJKK6XÇǞ={:5}Æ 0Lꨗ^^[e%d) z5<ǃs=jB9, BP–OHgڵ Æ Ҕ5{}U 6 >SE߰a&MwI=eAo׮&URR˅Crvʈ~bذa]~AjȑDvv _'I>3,'{?t萶\BzZ'|R,\sM3gV14NMMM\Bρk4V[n۶ 83O*`ΣSZ a[L&D$ (,,{eYvqƎS>#ĵ7h4b]2!=IOY'.fY7ѣGF< h?D;cʔ)زeK0{vϟ3`:\Cu,=eAR^B}Rۺ[Gd]0uT߿m>_SS7bܹ~Ng0S1) 6ЭVn6"'5л{1N; Nxї _0dgg$) 6m6`A UTTnru'垗?l^{ gq=##uuu.+!'COYD***PPPty睇wyՍ+oߎ K,T:B̅lizʂt=$t!mvWϳN;=s9}W{]uF X59:Ĥ>'j5Mzzz+r ה ]D_Ri'~cٳ'yt xxAQhv`wr*1hР֭[ELZෂ @aq]DDD|!H*9ѥ(`cXl͛+Wbq台160\cŸ l؝vC ߣ 21 btV Bܹs j :k¹rm9m0LTo6|X]LBb\>y~ݽ{'=ܸqWFpX0 量>K.Ņ x;Ģ~-brGhذ!f~DD\.|^IN'.]I&]vӊ^xM6ŻsE,ZׂjE1>0 P> //Ф^zoIz%ٿ?/\Ocشi &X]Pbfc}ŋ۷/Z-}YQLBEEEp8 i'@֭[ѢE t @z'OBի}nwE ZWdffbo;v`(,,4 kNkԨh͛7} 0ضmF5^J.UVQ%#-kA s/ ͆W_ğ7n#t:vr]&QF[_t|6mŋ V;NJ+믿DA=QO* y p.sAd2׏jo6t:ф2bbbSO{ÙO`„ 7o]VЃx×=thڴ{ ҥ T*z C%.bĢ~-Jo3DMbb"ۇ~4Mq'_jA%{.(DDDΝ;>Mȑ#ݻwL9Ǐe>E Z2B,[ 6Ę1c}>ٰaC/eDhh(R~=33{zz7o͛7ѷoR1b]|bE Z**& ?3N Lӯ 7n|)8̷|iy0 >t @^Jm/o^ ЩS'۷'|X].jmhPPPӧss'T*c֭d&1 wCׯ$$WrdUU&T6oތΝ;u֥7SOy}e`};lp5w tڵ&07oY;Ģ~-2`bl6c;vlU2 ,둒+3IFF5jķ|qU0 N8y{p_y_~( #h_ :Mp\|!JvXF+s':m44o/L,q@EM6|Ӻy&rrr AAAر#nE Z)"üѮ];DEE^;Q cƍ~=㽠/m۶>Ϟ= -:o߾8r"XD0 ك!CW{xigA¥KNrr2Ѹq2*[׳gO\xQnB <ٳg#GW;QRz ֭Ы0X,YkyΝC=TaY٥KӧfE Z}_ؾ};Z-y2NtԩhР>#o(X޽ o|]v .x5ϣCZ3gx4E /O?-[?//o6Ν[a… w:H$ٱc \^f_uJ%^}UY4PP?жm[PTt:q%DGG\D""C,Z hAo0p@~Zj^^v>ΝC޽֭BBBc̙ԩS V`F 8z(ANt֬Y 7nhтW;X|\QRE^7nbTC*ԩ7 ĢtݎŋСC8}4OXٴip5޽3gij>\={&M²epmdgg#99l\(y|a0hР PV믿UV!--͓& jjMm2::ګClcm۶j^ll,.\ G$[ϗ|L&N ;QF۷/"""N:;~ܹs T"??999h4hذ!BCCKp8 Jj*hZhZ_Lqa4k M6-wMz|fB`` >cO'xrss·^۷vsAףYf:?&&Nӫ%_ݺu㴠#XA|rYW^ɓ'1p2ǰ,Y&MBTTO>GƨQ]fb!`۽}aV++V֭[Bxx8fp硇a0ro߾#P}rr'"d݋j\z. W\1cxbt:|ᇸ|2j5._ ݎEիx{wŕ+Wp_*f\.a0V nBRR^q5H̙F> ܹn_Kaܹsرc@&MCzѣw+cǎEqq1BCC1rH]Gܹ2 -СCѨQ#fݻke4pj lep8ddh4h4>bcݠi>htW_IJeː[Wύ73!ː{ Hkl6?\q,ՙѡC> x/RTw@ȑ#8~8:w\ta1l0R\كZ6 gl6(DsNtNQ̙%K>_|k a%}B1dC$$$ueܹ 6ζz.T1118wNGVZU:sZl ł;wx<OE D)b@Tm(8vz}UQ[wj֬YGB}&[fހׯ,qqq0Li{eT52Ѻuk+Wo>R8&&gKW|ټDRɄDѣc;wm۶HKKj}~W5FO>:ޓJz쉭[">>FffGZlPM)wd<e˖HHHN:Qr͛ru53b|mFѣH$֭[;~:bbbiӦz믿BϞ=6=zɓ'|cǎARUFu'ĸX]H*+񈋋%oڵ+ЫW/?=z+PXXtjř3g';ѻt3gybܱcеkjż;OzG,Z ,ކa Q<7 apL8xkmsxx8n݊?~)O3f ..=ڴiƍ#$$+000,NfC^xA${#K׺v ٌz~0ǔ)Su|u{ 5"^L&vQ EZZn߾~x;1x`ܼy{Ç~ yyyedGÆ ѠAk111ҥ ڷo?t4M#y'@n J_kA|2233'JH"1i `ZR+B8pEU{;]wڬY3̘13fl6"77999FVV޽Lddd`M41n8 >knmw؁A 2|#nqqq8z(^|Z]#>>EU{&4iB&sĤ~+ یzM||<:vX|hԨ5jTq8z(vڅ={`ʕh޼9̙ٳg{ԣT^^9oc$_U}b͵>-]g\rd,#o'ʼnw/$$$T{ DNÐ!Cxb;w #::ׯ0ݻr0rH\qgϞHKKCVVVίi9rM"==^ fT*ͨ 55ZzK·;њBQ7k>)) 8q"z)ݾ};bbbиqcXyQaag_5>7++ /^D~}NM5n& EEE5 ĤD СCP qDB믿bݺuؽ{7bcc`0`˖-?~,B7m!!!>pT{BPzRڎGLZׂ.g|f͚qkqfNו & )) 4@>}/:7oh3&6lȨma &-[AZرc |M6šC0~xL4 ~aÀмys/YYwҽ{w_5G95it^Z4ALZෂn4݌P͆'O܉z R~ .|M+p:PGBB͛e+f@޽YpW^EZZ PېQT Q1b]VTT$ g|R q0܉zpB4hgFvv6V\Y6ao &&FYhh ;t1W\;v\.k^M2M6͛7kAI .رc刍Bp' f͚ 6`:th~׬Yx,^kj} !!FBNcԩ –-[/Eo`qa0徳pi>0$\WIEy.i涳۝vAW^ذa,K> ՊaÆ*У%*co:,& ES4TJ;, \.W)c?WDIPJ*j$ǕmgiC9A 5Cx|h"5G3mceJ )@BK*\ ~PfYf[yk+LϗtvgΜrBѸqctСVid^TTŋ K1i d\.|?a2v fT<;YB :0ضmƌS|܁6mpGu#^ff/9s $I{> k_h(@aEF9mP@B߷Mرcyfp {:Xd2<ؿ?x KLLč7:rjhР\R!&-Fӛ,Gf III`{By !!6c֯_`߿]QQQxb#op@*N;m`{sB}.fyL&:u. k׮_Z!&-[AZi aBʟнK\\t:W#G =='OS:5۵k/VS A8I V4Wܹsx衇6Ep`&TC~+wڵkѴiZy1|x3l׮,KFLZ5fӐ? ^ A=?Rm66l؀z(,;IuJ{Ĥ~[9NH$š)-tVK۟p1.G1Jm߼y3<|Ƚqoh k׎[!,, #GĊ+m ?Ɛ!C<6T!wбcG;w#i|X4qZ"FҥK ACw6mN:GٳO /cbbpYO-btDK> W^E֭6CQF!&&G^^^{59Nk|Ν 1GLZෂN4YbR mm !| M/f͚K,k8ڵ+\.N>1;GLZ @&nmFukI|lN fvs%de('Ja8g@6mN=;1sLip|D;tF ?p%:Z$''(.44ECCЕ^m%? 9ʜi"IhIAqQu(sRfգT*E_<I V V+fΜ9֭[CU}T`O"(sv6 . ${/{N/+()eĸ=z`ʕ`FP1i L&یzCbb"bcc6Cx;*ٜ6Pu.|(s}k׮UV-Ĥ~;GL2o0 8?gŰqɰ{ALZෂ.E'z۷o#//111|BQjѶm[n}+%L-cN4 QƓ}6~N%Ñq&+@>ШK#(UJ1/m^s7o,g~;)NTl6W}si DE"|A`` Gm:3. jP(H+9όcKw{F8)9yՁ#P5T%yWФgR_u{^(Ww]EAZdj"D` _G|BBJe(t t¶@KiN_译!#&-[Aq&- n޼I|FC.c0 rss鱑Jqơ `7> 7 eV d0~3R֧@.Mq~y͸*l›8jNu2U:z 5 @ t{gL=8yPə8wCo coj裏b˖->OxP4j!!!x嗑Y+Rf.J+h7R"h(ǹםSw vj,M߆!Pݽ>胙3149u7 `-H^(QPjϏbCPVkw"h:R6^Jbl4GR$=tHkK/l$իWc֬YP՘2e zq1,[ k׮ŪU0rZ]QFeB@-peו2CFD@\}$r z (UG?}5AP tIpCᐩd;a8 :5@M~$Epl1F؊J ?l63η)gy  `5mF"++H$̷~`3ea:ی`QF14M3??+{0gVaNpF9u1aS?b\N0,fGsw2VI (q4a ˑ  àA5k}! zh/"fصkҰl7noߎO>*7bsڐcAMHh \.fϞ[nc=1;X=goS%sedggW^|B kƎ}yq\:u*vލZG#lF4k3&L !&-[A59rEw|Bz͙0a$ V\/Z֭ڵk1|2{3JPH$Xf 7ocNJfRXmkZ ${All,6  *#44cƌڵk=~ݻw{gcǖ{qH~1Vyfܺu fm h_ {ݎ;wb̘1|B '"11ϟ5o޼I&ax7+<Ÿ*ok׮3~#-kA ANNf#GУefĈ O?l68p fϞ- Q b mصkǷ)(P(:u*-[Ù3gi&WzqUᏢ(|wȨ/fĢ~-聁ioߎaÆU'kݘ={6aÆ:]gڵodt֭ZT5uW_!!!NGĢ~]c)ʎHJJBrr2ƏϷ)hݺ5 oHMM?ɓ'c̙:>_yt?W+ Q& ߞQaCExrˌ3pI hҤ(}TE Zi nj30dP%JL\WJ*r;sE,DF{\FIXNÊ\s.A 2Y!e|KhIvYG.4r d=ꫯpm<رc Ph >t\6mF#/_Nf0$P@e $תw[Yϖ+-3+I=[n+r=VK l\ Bd@}u/˱qF3ÇO? &xb~ fon݊[I&|CxBYh(@].؜6,|5X(oJ[n1qD={ .ţ:h_OG[o>~)FŷIﰽ3TBTb͚5g!..7n&ŋ^Ћcؿ:t#G+Rjdaa!.\AeKM(**„  km !{"j(oSN!""O>$4iSgϞ#-?XhhƬYnݺR݋AСC{. ĉȑ#B*͛Kt:!ᵪp\X~=bbb{nlܸ9Pv"W;?ɓ'1yd$%%ݻ7hZR h'&&0LD׮]1d,Y˗cܸqPT1c-ZѣG#''f6 nB1d.R':hxt"11;wĊ+p55 _|Zjŷyp1jG$#K.ҥ fT XfEQD}5k2 2 j\ݻ8s 6mR x衇UVa֬YJJhӦ Je8'nܸ&M ܡCa.TDa``2T?jǏիѻwo Xp)/l-l2"֭͛믿F>}8I ļ| lقxGs?s >TfX|{]/paH$4 T F@kcǎE^н{wQB%Im?l ?~cƌ5kc޽0Lddd -- SL+: 00ǎСC?b͚5ػwo;HR[ضmj5p jBL&FsP3hBKj5AH$&&ۥp.\3g"$$ԐI6mpܹ2nbE -{8*Of 6չFjN~#-X,Ps3@gĢ~-biE Z %p@OĢ~-9@ 'bt,U BAH #-kA/,,D@@fGĢ~-EEE|Q%F R^ }H^UOՇUT_*Zгʷ@h_ lC@ h_ h$Yޗ71LhA4aX6E( XorjBTmJ(JB&b֭[(..FQQ, , L&, F#`2P\\bfl6XVvnrtriI$r(J( HR(Jt:T*(JT*@RAC@P@Rq/V hZjP哼( ѐ@v`0& 000\[,XV`0pV+N';0ei4MC&iHRrT*rt:(JzT*t:AV#((z 4zL&ٳa6!HjOpFfYYYCqq1WF# QPPU&o% 2 2 RcrY 00j}wz@ӕXq8G~~>PPP\.w ̕oq6ټw<(Wj5j5T*j5t:W~|gPt:z 00+0dB b,~¶m۰xb~-4 T*¸P(P(J2<\D½B0 \.\.v;N'l6L&V+l6w\PP|h4`0p8d :+jz=wǰE*r1يXH7mQQf3, f3 a6QTT +x0LdjGPPt:WyiZfh4\d2HR.|f+6Yيl6j`0pQ^ FV'[f/JZv?[9IR43[FJ66Jt:Ffdl>EIGaa!W1C*"88kTb8[Z-`S(PեĎ-' f^Β6`0pCqq1󑗗l\L&h4reWV#44LZ V VpDZ) 3[ƔĈ}v5ƌFc{ //JZ6d [KqIgfqslC6 App0`\`^*B"@Trg>6 f3w/cYRXX_6/ml?X zM7Ri;d2!''+@VVyyy\F&b+ɽJRglu-RŠx}+pN\ERXX NAAp0 Z([a0f?7&۫e l^@NKZ-W@^^ Wi[鳍2al6lR=_d+uURJ@ 44@F5c+ >*((ʸlF^^W- _\6KFoჍ6ۀ`EMr=pܳU0Lˎju [lk /`֬Y|:㷂N YO?8s ʕ+1cΝ[8ł}᫯nAq< evV\#Gmĸqr{ׯǨQuV3ٴica.\t:3f&661 <[)NrF"0ѣ6M0lٲ(tI&1.oǂ \r`:ķia f 0?OӺukcǎ_|FP\x?`ٸ{.lقCbΜ9<[)aX_cܳ|&ŋ~z\v wFnn.;MǎC=e\vկ_?M ӦM\xqu;v W_}'Ol@]`8N\z6L#Gd2… XnfϞp@Ϟ=a60wV+JmΆD"AFF71M(׮]CZZx B*k׮~[*-K.] ay'5j$ m6-Z@pp0BCCѲeKl6 ˗uLw}8?0hҤ w>3<×ɼE\~-[ Æ CDD.\A^Tp5nݚk_~?γec̙ܹsmT*E^^_(n߱cǐ=zh@]`̘1F… Kdp:v 1uTtÇb~ywK׌3K.h4ŋ9V@"-- HOO|&8^z%  L<^&VEJJ \.?~˖-y@ Mӕ jXp!:vR> SNC"_f͚2={O> AÆ /O>|%X5ލ7& LCVcǎ8x 7H>D  T*ETTu놉'BR!$$osKt: ƷY(\ ,@dddvMGY-Zʕ+ol0yо}{!!!СC/jq,C׮]Æ pAr|hժf ~î]p 7Y\A'A@ Dt@ Dtt:qQ$''WxL||<Ǝoݸq0 Ub ܹsi! RXXc߾}qhƳ> ^z!==ؽ{7,YK.ń m۶kZ]w>,`ժUkgA\\Ν;իW'̙3cƌAT*lذǏ^FN ӧOcΝ d2GEaa!?Fff&oߎׯm۶2d^zժUxqyL8-Hp]H$z*~m/عs'RSSݻ,K7oN<={Ǯ] }0۶mcabbb~1iii(ymiq8lݻ73da_g^}R7oۗae0ӦMcaDR~=H@(111… qyܼyO?4yi˗/ǔ)SкukD!C`?#F@߾}/p1 ;EQiNӉL&lذ+aÆȑ#qYر7oFBBd2z7@ <G  `RRz^{ ׿ [Bl۶ ~! ,, ,?#FࡇFWDzz:oaҤItYz5 JL.K&MЬY3@C'[o\f|'Jp\8}4Lraݺuѣ{9 251b8x Tʕ+shɓ'KuL>=֭[W?GJJ_ | 2iƼyжm[l2dlقoU82$"KȤd{$S&_YE29!k:`miʿϜ;,#Ixt^EUUih*M&nC׫$)MSu]eY~85ϵ^Fo V姏˥^I9T׵4Uy8xexЁuKWޫm[aywfُs:Qt @0`A:t @0`AƸMRxIENDB`astrodendro-0.2.0+dfsg1.orig/docs/installing.rst0000644000175000017500000000207712237443221021160 0ustar noahfxnoahfxInstalling ``astrodendro`` ========================== Requirements ------------ This package has the following depdenencies: * `Python `_ 2.6 or later (Python 3.x is supported) * `Numpy `_ 1.4.1 or later * `Astropy `_ 0.2.0 or later, optional (needed for reading/writing FITS files and for analysis code) * `h5py `_ 0.2.0 or later, optional (needed for reading/writing HDF5 files) Installation ------------ To install the latest stable release, you can type:: pip install astrodendro or you can download the latest tar file from `PyPI `_ and install it using:: python setup.py install Developer version ----------------- If you want to install the latest developer version of the dendrogram code, you can do so from the git repository:: git clone https://github.com/dendrograms/astrodendro.git cd astrodendro python setup.py install You may need to add the ``--user`` option to the last line if you do not have root access.astrodendro-0.2.0+dfsg1.orig/docs/_templates/0000755000175000017500000000000012773161345020422 5ustar noahfxnoahfxastrodendro-0.2.0+dfsg1.orig/docs/_templates/autosummary/0000755000175000017500000000000012773161345023010 5ustar noahfxnoahfxastrodendro-0.2.0+dfsg1.orig/docs/_templates/autosummary/class.rst0000644000175000017500000000005312167745562024653 0ustar noahfxnoahfx{% extends "autosummary_core/class.rst" %} astrodendro-0.2.0+dfsg1.orig/docs/_templates/autosummary/module.rst0000644000175000017500000000005412167745562025034 0ustar noahfxnoahfx{% extends "autosummary_core/module.rst" %} astrodendro-0.2.0+dfsg1.orig/docs/_templates/autosummary/base.rst0000644000175000017500000000005212167745562024457 0ustar noahfxnoahfx{% extends "autosummary_core/base.rst" %} astrodendro-0.2.0+dfsg1.orig/docs/plotting.rst0000644000175000017500000002310312773156651020662 0ustar noahfxnoahfxPlotting Dendrograms ==================== Once you have computed a dendrogram, you will likely want to plot it as well as over-plot the structures on your original image. Interactive Visualization ------------------------- One you have computed your dendrogram, the easiest way to view it interactively is to use the :meth:`~astrodendro.dendrogram.Dendrogram.viewer` method:: d = Dendrogram.compute(...) v = d.viewer() v.show() This will launch an interactive window showing the original data, and the dendrogram itself. Note that the viewer is only available for 2 or 3-d datasets. The main window will look like this: .. image:: viewer_screenshot.png :width: 100% Within the viewer, you can: **Highlight structures:** either click on structures in the dendrogram to highlight them, which will also show them in the image view on the left, or click on pixels in the image and have the corresponding structure be highlighted in the dendrogram plot. Clicking on a branch in the dendrogram plot or in the image will highlight that branch and all sub-structures. Multiple structures can be highlighted in different colors using the three mouse buttons: Mouse button 1 (Left-click or "regular" click), button 2 (Middle-click or "alt+click"), and button 3 (Right-click/"ctrl+click"). Each selection is independent of the other two; any of the three can be selected either by clicking on the image or the dendrogram. **Change the image stretch:** use the ``vmin`` and ``vmax`` sliders above the image to change the lower and upper level of the image stretch. **Change slice in a 3-d cube:** if you select a structure in the dendrogram for a 3-d cube, the cube will automatically change to the slice containing the peak pixel of the structure (including sub-structures). However, you can also change slice manually by using the ``slice`` slider. **View the selected structure ID:** in a computed dendrogram, every structure has a unique integer ID (the ``.idx`` attribute) that can be used to recognize the identify the structure when computing catalogs or making plots manually (see below). **Display astronomical coordinates:** If your data has an associated WCS object (for example, if you loaded your data from a FITS file with astronomical coordinate information), the interactive viewer will display the coordinates using ``wcsaxes``:: from astropy.io.fits import getdata from astropy import wcs data, header = getdata('astrodendro/docs/PerA_Extn2MASS_F_Gal.fits', header=True) wcs = wcs.WCS(header) d = astrodendro.Dendrogram.compute(data, wcs=wcs) v = d.viewer() v.show() .. image:: wcsaxes_docs_screenshot.png Note that this functionality requires that the ``wcsaxes`` package is installed. Installation instructions can be found here: http://wcsaxes.readthedocs.org/en/latest/ **Linked scatter plots:** If you have built a catalog (see :doc:`catalog`), you can also display a scatterplot of two catalog columns, linked to the viewer. The available catalog columns can be accessed as ```catalog.colnames```. Selections in the main viewer update the colors of the points in this plot:: from astrodendro.scatter import Scatter ... code to create a dendrogram (d) and catalog ... dv = d.viewer() ds = Scatter(d, dv.hub, catalog, 'radius', 'v_rms') dv.show() The catalog properties of dendrogram structures will be plotted here. You can select structures directly from the scatter plot by clicking and dragging a lasso, and the selected structures will be highlighted in other plots: .. image:: scatter_screenshot.png :width: 50% .. image:: scatter_selected_viewer_screenshot.png :width: 80% To set logarithmic scaling on either the x axis, the y axis, or both, the following convenience methods are defined:: ds.set_semilogx() ds.set_semilogy() ds.set_loglog() # To unset logarithmic scaling, pass `log=False` to the above methods, i.e. ds.set_loglog(False) Making plots for publications ----------------------------- While the viewer is useful for exploring the dendrogram, it does not allow one to produce publication-quality plots. For this, you can use the non-interactive plotting interface. To do this, you can first use the :meth:`~astrodendro.dendrogram.Dendrogram.plotter` method to provide a plotting tool:: d = Dendrogram.compute(...) p = d.plotter() and then use this to make the plot you need. The following complete example shows how to make a plot of the dendrogram of the extinction map of the Perseus region (introduced in :doc:`using`) using :meth:`~astrodendro.plot.DendrogramPlotter.plot_tree`, highlighting two of the main branches: .. plot:: :include-source: import matplotlib.pyplot as plt from astropy.io import fits from astrodendro import Dendrogram image = fits.getdata('PerA_Extn2MASS_F_Gal.fits') d = Dendrogram.compute(image, min_value=2.0, min_delta=1., min_npix=10) p = d.plotter() fig = plt.figure() ax = fig.add_subplot(1, 1, 1) # Plot the whole tree p.plot_tree(ax, color='black') # Highlight two branches p.plot_tree(ax, structure=8, color='red', lw=2, alpha=0.5) p.plot_tree(ax, structure=24, color='orange', lw=2, alpha=0.5) # Add axis labels ax.set_xlabel("Structure") ax.set_ylabel("Flux") You can find out the structure ID you need either from the interactive viewer presented above, or programmatically by accessing the ``idx`` attribute of a Structure. A :meth:`~astrodendro.plot.DendrogramPlotter.plot_contour` method is also provided to outline the contours of structures. Calling :meth:`~astrodendro.plot.DendrogramPlotter.plot_contour` without any arguments results in a contour corresponding to the value of ``min_value`` used being shown. .. plot:: :include-source: import matplotlib.pyplot as plt from astropy.io import fits from astrodendro import Dendrogram image = fits.getdata('PerA_Extn2MASS_F_Gal.fits') d = Dendrogram.compute(image, min_value=2.0, min_delta=1., min_npix=10) p = d.plotter() fig = plt.figure() ax = fig.add_subplot(1, 1, 1) ax.imshow(image, origin='lower', interpolation='nearest', cmap=plt.cm.Blues, vmax=4.0) # Show contour for ``min_value`` p.plot_contour(ax, color='black') # Highlight two branches p.plot_contour(ax, structure=8, lw=3, colors='red') p.plot_contour(ax, structure=24, lw=3, colors='orange') Plotting contours of structures in third-party packages ------------------------------------------------------- In some cases you may want to plot the contours in third party packages such as `APLpy `_ or `DS9 `_. For these cases, the best approach is to output FITS files with a mask of the structures to plot (one mask file per contour color you want to show). Let's first take the plot above and make a contour plot in APLpy outlining all the leaves. We can use the :meth:`~astrodendro.structure.Structure.get_mask` method to retrieve the footprint of a given structure: .. plot:: :include-source: import aplpy import numpy as np import matplotlib.pyplot as plt from astropy.io import fits from astrodendro import Dendrogram hdu = fits.open('PerA_Extn2MASS_F_Gal.fits')[0] d = Dendrogram.compute(hdu.data, min_value=2.0, min_delta=1., min_npix=10) # Create empty mask. For each leaf we do an 'or' operation with the mask so # that any pixel corresponding to a leaf is set to True. mask = np.zeros(hdu.data.shape, dtype=bool) for leaf in d.leaves: mask = mask | leaf.get_mask() # Now we create a FITS HDU object to contain this, with the correct header mask_hdu = fits.PrimaryHDU(mask.astype('short'), hdu.header) # We then use APLpy to make the final plot fig = aplpy.FITSFigure(hdu, figsize=(8, 6)) fig.show_colorscale(cmap='Blues', vmax=4.0) fig.show_contour(mask_hdu, colors='red', linewidths=0.5) fig.tick_labels.set_xformat('dd') fig.tick_labels.set_yformat('dd') Now let's take the example from `Making plots for publications`_ and try and reproduce the same plot. As described there, one way to find interesting structures in the dendrogram is to use the `Interactive Visualization`_ tool. This tool will give the ID of a structure as an integer (``idx``). Because we are starting from this ID rather than a :class:`~astrodendro.structure.Structure` object, we need to first get the structure, which can be done with:: structure = d[idx] where ``d`` is a :class:`~astrodendro.dendrogram.Dendrogram` instance. We also want to create a different mask for each contour so as to have complete control over the colors: .. plot:: :include-source: import aplpy from astropy.io import fits from astrodendro import Dendrogram hdu = fits.open('PerA_Extn2MASS_F_Gal.fits')[0] d = Dendrogram.compute(hdu.data, min_value=2.0, min_delta=1., min_npix=10) # Find the structures structure_08 = d[8] structure_24 = d[24] # Extract the masks mask_08 = structure_08.get_mask() mask_24 = structure_24.get_mask() # Create FITS HDU objects to contain the masks mask_hdu_08 = fits.PrimaryHDU(mask_08.astype('short'), hdu.header) mask_hdu_24 = fits.PrimaryHDU(mask_24.astype('short'), hdu.header) # Use APLpy to make the final plot fig = aplpy.FITSFigure(hdu, figsize=(8, 6)) fig.show_colorscale(cmap='Blues', vmax=4.0) fig.show_contour(hdu, levels=[2.0], colors='black', linewidths=0.5) fig.show_contour(mask_hdu_08, colors='red', linewidths=0.5) fig.show_contour(mask_hdu_24, colors='orange', linewidths=0.5) fig.tick_labels.set_xformat('dd') fig.tick_labels.set_yformat('dd') astrodendro-0.2.0+dfsg1.orig/docs/conf.py0000644000175000017500000002177612237444064017576 0ustar noahfxnoahfx# -*- coding: utf-8 -*- # # astrodendro documentation build configuration file, created by # sphinx-quickstart on Thu Jun 13 14:25:14 2013. # # This file is execfile()d with the current directory set to its containing dir. # # Note that not all possible configuration values are present in this # autogenerated file. # # All configuration values have a default; values that are commented out # serve to show the default. import sys, os # If extensions (or modules to document with autodoc) are in another directory, # add these directories to sys.path here. If the directory is relative to the # documentation root, use os.path.abspath to make it absolute, like shown here. #sys.path.insert(0, os.path.abspath('.')) # -- General configuration ----------------------------------------------------- # If your documentation needs a minimal Sphinx version, state it here. #needs_sphinx = '1.0' # Add any Sphinx extension module names here, as strings. They can be extensions # coming with Sphinx (named 'sphinx.ext.*') or your custom ones. extensions = ['matplotlib.sphinxext.plot_directive', 'sphinx.ext.autodoc', 'sphinx.ext.intersphinx', 'astropy.sphinx.ext.numpydoc', 'astropy.sphinx.ext.astropyautosummary' ] autosummary_generate = True numpydoc_show_class_members = False autoclass_content = 'class' plot_template = """ {{ source_code }} {{ only_html }} {% for img in images %} .. image:: {{ build_dir }}/{{ img.basename }}.png {%- for option in options %} {{ option }} {% endfor %} {% endfor %} {{ only_latex }} {% for img in images %} .. image:: {{ build_dir }}/{{ img.basename }}.pdf {% endfor %} {{ only_texinfo }} {% for img in images %} .. image:: {{ build_dir }}/{{ img.basename }}.png {%- for option in options %} {{ option }} {% endfor %} {% endfor %} """ # Add any paths that contain templates here, relative to this directory. templates_path = ['_templates'] # The suffix of source filenames. source_suffix = '.rst' # The encoding of source files. #source_encoding = 'utf-8-sig' # The master toctree document. master_doc = 'index' # General information about the project. project = u'astrodendro' copyright = u'2013, Thomas Robitaille, Chris Beaumont, Braden McDonald, and Erik Rosolowsky' # The version info for the project you're documenting, acts as replacement for # |version| and |release|, also used in various other places throughout the # built documents. # # The short X.Y version. version = '0.0' # The full version, including alpha/beta/rc tags. release = '0.0.0' # The language for content autogenerated by Sphinx. Refer to documentation # for a list of supported languages. #language = None # There are two options for replacing |today|: either, you set today to some # non-false value, then it is used: #today = '' # Else, today_fmt is used as the format for a strftime call. #today_fmt = '%B %d, %Y' # List of patterns, relative to source directory, that match files and # directories to ignore when looking for source files. exclude_patterns = ['_build', '_templates'] # The reST default role (used for this markup: `text`) to use for all documents. #default_role = None # If true, '()' will be appended to :func: etc. cross-reference text. #add_function_parentheses = True # If true, the current module name will be prepended to all description # unit titles (such as .. function::). #add_module_names = True # If true, sectionauthor and moduleauthor directives will be shown in the # output. They are ignored by default. #show_authors = False # The name of the Pygments (syntax highlighting) style to use. pygments_style = 'sphinx' # A list of ignored prefixes for module index sorting. #modindex_common_prefix = [] # -- Options for HTML output --------------------------------------------------- # The theme to use for HTML and HTML Help pages. See the documentation for # a list of builtin themes. html_theme = 'default' # Theme options are theme-specific and customize the look and feel of a theme # further. For a list of options available for each theme, see the # documentation. #html_theme_options = {} # Add any paths that contain custom themes here, relative to this directory. #html_theme_path = [] # The name for this set of Sphinx documents. If None, it defaults to # " v documentation". #html_title = None # A shorter title for the navigation bar. Default is the same as html_title. #html_short_title = None # The name of an image file (relative to this directory) to place at the top # of the sidebar. #html_logo = None # The name of an image file (within the static path) to use as favicon of the # docs. This file should be a Windows icon file (.ico) being 16x16 or 32x32 # pixels large. #html_favicon = None # Add any paths that contain custom static files (such as style sheets) here, # relative to this directory. They are copied after the builtin static files, # so a file named "default.css" will overwrite the builtin "default.css". # html_static_path = ['_static'] html_static_path = [] # If not '', a 'Last updated on:' timestamp is inserted at every page bottom, # using the given strftime format. #html_last_updated_fmt = '%b %d, %Y' # If true, SmartyPants will be used to convert quotes and dashes to # typographically correct entities. #html_use_smartypants = True # Custom sidebar templates, maps document names to template names. #html_sidebars = {} # Additional templates that should be rendered to pages, maps page names to # template names. #html_additional_pages = {} # If false, no module index is generated. #html_domain_indices = True # If false, no index is generated. #html_use_index = True # If true, the index is split into individual pages for each letter. #html_split_index = False # If true, links to the reST sources are added to the pages. #html_show_sourcelink = True # If true, "Created using Sphinx" is shown in the HTML footer. Default is True. #html_show_sphinx = True # If true, "(C) Copyright ..." is shown in the HTML footer. Default is True. #html_show_copyright = True # If true, an OpenSearch description file will be output, and all pages will # contain a tag referring to it. The value of this option must be the # base URL from which the finished HTML is served. #html_use_opensearch = '' # This is the file name suffix for HTML files (e.g. ".xhtml"). #html_file_suffix = None # Output file base name for HTML help builder. htmlhelp_basename = 'astrodendrodoc' # -- Options for LaTeX output -------------------------------------------------- latex_elements = { # The paper size ('letterpaper' or 'a4paper'). #'papersize': 'letterpaper', # The font size ('10pt', '11pt' or '12pt'). #'pointsize': '10pt', # Additional stuff for the LaTeX preamble. #'preamble': '', } # Grouping the document tree into LaTeX files. List of tuples # (source start file, target name, title, author, documentclass [howto/manual]). latex_documents = [ ('index', 'astrodendro.tex', u'astrodendro Documentation', u'Thomas Robitaille, Braden McDonald, Chris Beaumont, Erik Rosolowsky', 'manual'), ] # The name of an image file (relative to this directory) to place at the top of # the title page. #latex_logo = None # For "manual" documents, if this is true, then toplevel headings are parts, # not chapters. #latex_use_parts = False # If true, show page references after internal links. #latex_show_pagerefs = False # If true, show URL addresses after external links. #latex_show_urls = False # Documents to append as an appendix to all manuals. #latex_appendices = [] # If false, no module index is generated. #latex_domain_indices = True # -- Options for manual page output -------------------------------------------- # One entry per manual page. List of tuples # (source start file, name, description, authors, manual section). man_pages = [ ('index', 'astrodendro', u'astrodendro Documentation', [u'Thomas Robitaille, Braden McDonald, Chris Beaumont, Erik Rosolowsky'], 1) ] # If true, show URL addresses after external links. #man_show_urls = False # -- Options for Texinfo output ------------------------------------------------ # Grouping the document tree into Texinfo files. List of tuples # (source start file, target name, title, author, # dir menu entry, description, category) texinfo_documents = [ ('index', 'astrodendro', u'astrodendro Documentation', u'Thomas Robitaille, Braden McDonald, Chris Beaumont, Erik Rosolowsky', 'astrodendro', 'One line description of project.', 'Miscellaneous'), ] # Documents to append as an appendix to all manuals. #texinfo_appendices = [] # If false, no module index is generated. #texinfo_domain_indices = True # How to display URL addresses: 'footnote', 'no', or 'inline'. #texinfo_show_urls = 'footnote' # Example configuration for intersphinx: refer to the Python standard library. intersphinx_mapping = { 'python': ('http://docs.python.org/', None), 'numpy': ('http://docs.scipy.org/doc/numpy/', None), 'matplotlib': ('http://matplotlib.sourceforge.net/', None), 'astropy': ('http://www.astropy.org/', None), } astrodendro-0.2.0+dfsg1.orig/docs/migration.rst0000644000175000017500000000717512224030424021002 0ustar noahfxnoahfxMigration guide for previous users of ``astrodendro`` ===================================================== The ``astrodendro`` package has been in development for a couple of years, and we have recently undertaken an effort to prepare the package for a first release, which involved tidying up the programming interface to the package, and re-writing large sections. This means that the present version of ``astrodendro`` will likely not work with scripts you had if you were using the original astrodendro packages from @astrofrog and @brandenmacdonald's repositories. This page summarizes the main changes in the new code, and how to adapt your code to ensure that it will work correctly. This only covers changes that will *break* your code, but you are encouraged to look through the rest of the documentation to read about new features! Also, only the main backward-incompatible changes are mentioned, but for any questions on changes not mentioned here, please open an issue on `GitHub `_. Computing a dendrogram ---------------------- Rather than computing a dendrogram using:: d = Dendrogram(data) d.compute(...) you should now use:: d = Dendrogram.compute(data) In addition, the following options for ``compute`` have been renamed: * ``minimum_flux`` is now ``min_value`` (since we expect dendrograms to be used not only for images, but also e.g. density fields). * ``minimum_delta`` is now ``min_delta`` * ``minimum_npix`` is now ``min_npix`` Dendrogram methods and attributes --------------------------------- The following dendrogram methods have changed: * ``get_leaves()`` has now been replaced by a ``leaves`` attribute (it is no longer a method.) * the ``to_hdf5()`` and ``from_hdf5()`` methods have been replaced by :meth:`~astrodendro.dendrogram.Dendrogram.save_to` ``Leaf`` and ``Branch`` classes ------------------------------- The ``Leaf`` and ``Branch`` classes no longer exist, and have been replaced by a single :class:`~astrodendro.structure.Structure` class that instead has ``is_leaf`` and ``is_branch`` attributes. Thus, if you were checking if something was a leaf by doing e.g.:: if type(s) == Leaf: # code here or:: if isinstance(s, Leaf): # code here then you will instead need to use:: if s.is_leaf: # code here Leaf and branch attributes -------------------------- The following leaf and branch attributes have changed: * ``f`` has been replaced by a method called :meth:`~astrodendro.structure.Structure.values` that can take a ``subtree=`` option that indicates whether pixels in sub-structures should be included. * ``coords`` has been replaced by a method called :meth:`~astrodendro.structure.Structure.indices` that can take a ``subtree=`` option that indicates whether pixels in sub-structures should be included. * ``height`` now has a different definition - it is ``vmax`` for a leaf, or the smallest ``vmin`` of the children for a branch - this is used when plotting the dendrogram, to know at what height to plot the structure. Interactive visualization ------------------------- Visualizing the results of the dendrogram is now much easier, and does not require the additional ``astrocube`` package. To launch the interactive viewer (which requires only Matplotlib), once the dendrogram has been computed, you can do: >>> d.viewer() and the interactive viewer will launch. It will however no longer have the option to re-compute the dendrogram from the window, and will also no longer have an IPython terminal. For the latter, we recommend you consider using the `Glue `_ package. astrodendro-0.2.0+dfsg1.orig/docs/api/0000755000175000017500000000000012773161345017036 5ustar noahfxnoahfxastrodendro-0.2.0+dfsg1.orig/docs/api/astrodendro.plot.DendrogramPlotter.rst0000644000175000017500000000125512176270420026517 0ustar noahfxnoahfx================================== astrodendro.plot.DendrogramPlotter ================================== .. currentmodule:: astrodendro.plot .. autoclass:: DendrogramPlotter .. rubric:: Methods .. autosummary:: ~DendrogramPlotter.sort ~DendrogramPlotter.set_custom_positions ~DendrogramPlotter.plot_tree ~DendrogramPlotter.plot_contour ~DendrogramPlotter.get_lines .. rubric:: Methods (detail) .. automethod:: DendrogramPlotter.sort .. automethod:: DendrogramPlotter.set_custom_positions .. automethod:: DendrogramPlotter.plot_tree .. automethod:: DendrogramPlotter.plot_contour .. automethod:: DendrogramPlotter.get_lines astrodendro-0.2.0+dfsg1.orig/docs/api/astrodendro.pruning.rst0000644000175000017500000000044412210613275023565 0ustar noahfxnoahfxastrodendro.pruning ==================== .. currentmodule:: astrodendro.pruning .. automodule:: astrodendro.pruning .. autofunction:: min_delta .. autofunction:: min_sum .. autofunction:: min_peak .. autofunction:: min_npix .. autofunction:: contains_seeds .. autofunction:: all_true astrodendro-0.2.0+dfsg1.orig/docs/api/astrodendro.dendrogram.Dendrogram.rst0000644000175000017500000000156512176652656026334 0ustar noahfxnoahfx================================= astrodendro.dendrogram.Dendrogram ================================= .. currentmodule:: astrodendro.dendrogram .. autoclass:: Dendrogram .. rubric:: Attributes .. autosummary:: ~Dendrogram.trunk ~Dendrogram.leaves ~Dendrogram.all_structures .. rubric:: Analysis .. autosummary:: ~Dendrogram.compute ~Dendrogram.structure_at .. rubric:: Input/Output .. autosummary:: ~Dendrogram.save_to ~Dendrogram.load_from .. rubric:: Visualization .. autosummary:: ~Dendrogram.plotter ~Dendrogram.viewer .. rubric:: Methods (detail) .. automethod:: Dendrogram.compute .. automethod:: Dendrogram.structure_at .. automethod:: Dendrogram.save_to .. automethod:: Dendrogram.load_from .. automethod:: Dendrogram.plotter .. automethod:: Dendrogram.viewer astrodendro-0.2.0+dfsg1.orig/docs/api/astrodendro.dendrogram.periodic_neighbours.rst0000644000175000017500000000032312773156651030261 0ustar noahfxnoahfx========================================== astrodendro.dendrogram.periodic_neighbours ========================================== .. currentmodule:: astrodendro.dendrogram .. autofunction:: periodic_neighbours astrodendro-0.2.0+dfsg1.orig/docs/api/astrodendro.structure.Structure.rst0000644000175000017500000000167512224030234026142 0ustar noahfxnoahfx================================= astrodendro.structure.Structure ================================= .. currentmodule:: astrodendro.structure .. autoclass:: Structure .. rubric:: Attributes .. autosummary:: ~Structure.is_leaf ~Structure.is_branch ~Structure.vmin ~Structure.vmax ~Structure.height ~Structure.ancestor ~Structure.parent ~Structure.children ~Structure.descendants ~Structure.level ~Structure.newick .. rubric:: Methods .. autosummary:: ~Structure.indices ~Structure.values ~Structure.get_npix ~Structure.get_peak ~Structure.sorted_leaves ~Structure.get_mask .. rubric:: Methods (detail) .. automethod:: Structure.indices .. automethod:: Structure.values .. automethod:: Structure.get_npix .. automethod:: Structure.get_peak .. automethod:: Structure.sorted_leaves .. automethod:: Structure.get_mask astrodendro-0.2.0+dfsg1.orig/docs/api/astrodendro.analysis.rst0000644000175000017500000000211412224030234023713 0ustar noahfxnoahfxastrodendro.analysis ==================== .. currentmodule:: astrodendro.analysis .. autoclass:: PPStatistic .. rubric:: Available statistics .. autosummary:: ~PPStatistic.flux ~PPStatistic.major_sigma ~PPStatistic.minor_sigma ~PPStatistic.position_angle ~PPStatistic.radius ~PPStatistic.area_exact ~PPStatistic.area_ellipse ~PPStatistic.x_cen ~PPStatistic.y_cen ~PPStatistic.to_mpl_ellipse .. rubric:: Methods (detail) .. automethod:: PPStatistic.to_mpl_ellipse .. autoclass:: PPVStatistic .. rubric:: Available statistics .. autosummary:: ~PPVStatistic.flux ~PPVStatistic.major_sigma ~PPVStatistic.minor_sigma ~PPVStatistic.position_angle ~PPVStatistic.radius ~PPStatistic.area_exact ~PPStatistic.area_ellipse ~PPVStatistic.x_cen ~PPVStatistic.y_cen ~PPVStatistic.v_cen ~PPVStatistic.v_rms ~PPVStatistic.to_mpl_ellipse .. rubric:: Methods (detail) .. automethod:: PPStatistic.to_mpl_ellipse .. autofunction:: pp_catalog .. autofunction:: ppv_catalog astrodendro-0.2.0+dfsg1.orig/docs/Makefile0000644000175000017500000001273312533665014017727 0ustar noahfxnoahfx# Makefile for Sphinx documentation # # You can set these variables from the command line. SPHINXOPTS = SPHINXBUILD = sphinx-build PAPER = BUILDDIR = _build # Internal variables. PAPEROPT_a4 = -D latex_paper_size=a4 PAPEROPT_letter = -D latex_paper_size=letter ALLSPHINXOPTS = -d $(BUILDDIR)/doctrees $(PAPEROPT_$(PAPER)) $(SPHINXOPTS) . # the i18n builder cannot share the environment and doctrees with the others I18NSPHINXOPTS = $(PAPEROPT_$(PAPER)) $(SPHINXOPTS) . .PHONY: help clean html dirhtml singlehtml pickle json htmlhelp qthelp devhelp epub latex latexpdf text man changes linkcheck doctest gettext help: @echo "Please use \`make ' where is one of" @echo " html to make standalone HTML files" @echo " dirhtml to make HTML files named index.html in directories" @echo " singlehtml to make a single large HTML file" @echo " pickle to make pickle files" @echo " json to make JSON files" @echo " htmlhelp to make HTML files and a HTML help project" @echo " qthelp to make HTML files and a qthelp project" @echo " devhelp to make HTML files and a Devhelp project" @echo " epub to make an epub" @echo " latex to make LaTeX files, you can set PAPER=a4 or PAPER=letter" @echo " latexpdf to make LaTeX files and run them through pdflatex" @echo " text to make text files" @echo " man to make manual pages" @echo " texinfo to make Texinfo files" @echo " info to make Texinfo files and run them through makeinfo" @echo " gettext to make PO message catalogs" @echo " changes to make an overview of all changed/added/deprecated items" @echo " linkcheck to check all external links for integrity" @echo " doctest to run all doctests embedded in the documentation (if enabled)" clean: -rm -rf $(BUILDDIR)/* _generated html: $(SPHINXBUILD) -b html $(ALLSPHINXOPTS) $(BUILDDIR)/html @echo @echo "Build finished. The HTML pages are in $(BUILDDIR)/html." dirhtml: $(SPHINXBUILD) -b dirhtml $(ALLSPHINXOPTS) $(BUILDDIR)/dirhtml @echo @echo "Build finished. The HTML pages are in $(BUILDDIR)/dirhtml." singlehtml: $(SPHINXBUILD) -b singlehtml $(ALLSPHINXOPTS) $(BUILDDIR)/singlehtml @echo @echo "Build finished. The HTML page is in $(BUILDDIR)/singlehtml." pickle: $(SPHINXBUILD) -b pickle $(ALLSPHINXOPTS) $(BUILDDIR)/pickle @echo @echo "Build finished; now you can process the pickle files." json: $(SPHINXBUILD) -b json $(ALLSPHINXOPTS) $(BUILDDIR)/json @echo @echo "Build finished; now you can process the JSON files." htmlhelp: $(SPHINXBUILD) -b htmlhelp $(ALLSPHINXOPTS) $(BUILDDIR)/htmlhelp @echo @echo "Build finished; now you can run HTML Help Workshop with the" \ ".hhp project file in $(BUILDDIR)/htmlhelp." qthelp: $(SPHINXBUILD) -b qthelp $(ALLSPHINXOPTS) $(BUILDDIR)/qthelp @echo @echo "Build finished; now you can run "qcollectiongenerator" with the" \ ".qhcp project file in $(BUILDDIR)/qthelp, like this:" @echo "# qcollectiongenerator $(BUILDDIR)/qthelp/astrodendro.qhcp" @echo "To view the help file:" @echo "# assistant -collectionFile $(BUILDDIR)/qthelp/astrodendro.qhc" devhelp: $(SPHINXBUILD) -b devhelp $(ALLSPHINXOPTS) $(BUILDDIR)/devhelp @echo @echo "Build finished." @echo "To view the help file:" @echo "# mkdir -p $$HOME/.local/share/devhelp/astrodendro" @echo "# ln -s $(BUILDDIR)/devhelp $$HOME/.local/share/devhelp/astrodendro" @echo "# devhelp" epub: $(SPHINXBUILD) -b epub $(ALLSPHINXOPTS) $(BUILDDIR)/epub @echo @echo "Build finished. The epub file is in $(BUILDDIR)/epub." latex: $(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex @echo @echo "Build finished; the LaTeX files are in $(BUILDDIR)/latex." @echo "Run \`make' in that directory to run these through (pdf)latex" \ "(use \`make latexpdf' here to do that automatically)." latexpdf: $(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex @echo "Running LaTeX files through pdflatex..." $(MAKE) -C $(BUILDDIR)/latex all-pdf @echo "pdflatex finished; the PDF files are in $(BUILDDIR)/latex." text: $(SPHINXBUILD) -b text $(ALLSPHINXOPTS) $(BUILDDIR)/text @echo @echo "Build finished. The text files are in $(BUILDDIR)/text." man: $(SPHINXBUILD) -b man $(ALLSPHINXOPTS) $(BUILDDIR)/man @echo @echo "Build finished. The manual pages are in $(BUILDDIR)/man." texinfo: $(SPHINXBUILD) -b texinfo $(ALLSPHINXOPTS) $(BUILDDIR)/texinfo @echo @echo "Build finished. The Texinfo files are in $(BUILDDIR)/texinfo." @echo "Run \`make' in that directory to run these through makeinfo" \ "(use \`make info' here to do that automatically)." info: $(SPHINXBUILD) -b texinfo $(ALLSPHINXOPTS) $(BUILDDIR)/texinfo @echo "Running Texinfo files through makeinfo..." make -C $(BUILDDIR)/texinfo info @echo "makeinfo finished; the Info files are in $(BUILDDIR)/texinfo." gettext: $(SPHINXBUILD) -b gettext $(I18NSPHINXOPTS) $(BUILDDIR)/locale @echo @echo "Build finished. The message catalogs are in $(BUILDDIR)/locale." changes: $(SPHINXBUILD) -b changes $(ALLSPHINXOPTS) $(BUILDDIR)/changes @echo @echo "The overview file is in $(BUILDDIR)/changes." linkcheck: $(SPHINXBUILD) -b linkcheck $(ALLSPHINXOPTS) $(BUILDDIR)/linkcheck @echo @echo "Link check complete; look for any errors in the above output " \ "or in $(BUILDDIR)/linkcheck/output.txt." doctest: $(SPHINXBUILD) -b doctest $(ALLSPHINXOPTS) $(BUILDDIR)/doctest @echo "Testing of doctests in the sources finished, look at the " \ "results in $(BUILDDIR)/doctest/output.txt." astrodendro-0.2.0+dfsg1.orig/docs/advanced.rst0000644000175000017500000001051612773156651020573 0ustar noahfxnoahfx.. currentmodule:: astrodendro.dendrogram Advanced topics =============== Specifying a custom structure merging strategy ---------------------------------------------- By default, the decision about whether a leaf remains independent (i.e., whether it remains a leaf or its pixels get incorporated into another branch) when merged is made based on the ``min_delta`` and ``min_npix`` parameters, but in some cases, you may want to use more specialized criteria. For example, you may want only leaves overlapping with a certain position, or you may want leaves with a certain spatial or velocity extent, or a minimum peak value, to be considered independent structures. In order to accomodate this, the :meth:`~astrodendro.dendrogram.Dendrogram.compute` method can optionally take an ``is_independent`` argument which should be a function with the following call signature:: def is_independent(structure, index=None, value=None): ... where ``structure`` is the :class:`~astrodendro.structure.Structure` object that is being considered, and ``index`` and ``value`` are the pixel index and value of the pixel that is linking the structure to the rest of the tree. These last two values are only set when calling the ``is_independent`` function during the tree computation, but the ``is_independent`` function is also used at the end of the computation to prune leaves that are not attached to the tree, and in this case ``index`` and ``value`` are not set. The following example compares the dendrogram obtained with and without a custom ``is_independent`` function: .. plot:: :include-source: import matplotlib.pyplot as plt from astropy.io import fits from astrodendro import Dendrogram image = fits.getdata('PerA_Extn2MASS_F_Gal.fits') fig = plt.figure(figsize=(15,5)) # Default merging strategy d1 = Dendrogram.compute(image, min_value=2.0) p1 = d1.plotter() ax1 = fig.add_subplot(1, 3, 1) p1.plot_tree(ax1, color='black') ax1.hlines(3.5, *ax1.get_xlim(), color='b', linestyle='--') ax1.set_xlabel("Structure") ax1.set_ylabel("Flux") ax1.set_title("Default merging") # Require minimum peak value # this is equivalent to # custom_independent = astrodendro.pruning.min_peak(3.5) def custom_independent(structure, index=None, value=None): peak_index, peak_value = structure.get_peak() return peak_value > 3.5 d2 = Dendrogram.compute(image, min_value=2.0, is_independent=custom_independent) p2 = d2.plotter() ax2 = fig.add_subplot(1, 3, 2) p2.plot_tree(ax2, color='black') ax2.hlines(3.5, *ax2.get_xlim(), color='b', linestyle='--') ax2.set_xlabel("Structure") ax2.set_ylabel("Flux") ax2.set_title("Custom merging") # For comparison, this is what changing the min_value does: d3 = Dendrogram.compute(image, min_value=3.5) p3 = d3.plotter() ax3 = fig.add_subplot(1, 3, 3) p3.plot_tree(ax3, color='black') ax3.hlines(3.5, *ax3.get_xlim(), color='b', linestyle='--') ax3.set_xlabel("Structure") ax3.set_ylabel("Flux") ax3.set_title("min_value=3.5 merging") ax3.set_ylim(*ax2.get_ylim()) Several pre-implemented functions suitable for use as ``is_independent`` tests are provided in :mod:`astrodendro.pruning`. In addition, the :meth:`astrodendro.pruning.all_true` function can be used to combine several criteria. For example, the following code builds a dendrogram where each leaf contains a pixel whose value >=20, and whose pixels sum to >= 100:: from astrodendro.pruning import all_true, min_peak, min_sum custom_independent = all_true((min_peak(20), min_sum(100))) Dendrogram.compute(image, is_independent=custom_independent) Handling custom adjacency logic ------------------------------- By default, neighbours to a given pixel are considered to be the adjacent pixels in the array. However, not all data are like this. For example, all-sky cartesian maps are periodic along the X axis. You can specify custom neighbour logic by providing a ``neighbours`` function to :meth:`Dendrogram.compute`. For example, the :func:`periodic_neighbours` utility will wrap neighbours across array edges. To correctly compute dendrograms for all-sky Cartesian maps:: periodic_axis = 1 # data wraps along longitude axis Dendrogram.compute(data, neighbours=periodic_neighbours(periodic_axis)) astrodendro-0.2.0+dfsg1.orig/docs/scatter_selected_viewer_screenshot.png0000644000175000017500000032306012773156651026136 0ustar noahfxnoahfxPNG  IHDRjS!iCCPICC ProfileX YwTTK{' Cr9saCf(QD  &`DDP1PD$ŧ}{vsVWWWWuWwu3Gu47p(@x 4ц6|N쎬o` Gb#| T45̎<ĸ|,TDAqqv4Fx#@0",)2t@9._G&""j X?&I& ؄NNGÇJS'3@ ;c)k5JzQQݨv @ nzPvcX`X1z3R?%KѫGW$C(Kkp!#"^h1ĺh#.bgh64E 7D#>PEzFv¯<"␵8C$ZXF()(ػW_1b{/-t//-p WHK;l-4} C^DtdWp> $(5 )3{5"> r@>8 N pԀz v z g`L ,` D!N!%H҃L!|`(A|B eCO -4-C?aL,k5 {p gÅp\ 7mp/~O@Pl(A,JeڅD4TUB(j ZCch,I NC+6t?z1<i $br0%:L+f3X, +UGV6[¶`oa`+8'‘qq\9 w7!(јxDdє4ЌҬ2Ҋj M=B[KEvvτL|"~@ 4  !PFDGxKX#IyҝE7AH$ 8b!x^ޒ>>~ -(! iɌiWv1E0052g#Hb$SR)TCMfF1 333ge`aX4 ,XUX]YX+YoN,َ]acnȞ~}}À##ONNS0c휯\R\\\Ypyxy F]c3 ;7̯O?@@@ `Y!u!q!,Wxa }‹"""D. -+*&.&vP]lNCRW}1n]j򊟥IEcROugtuCCJB(Ɣ REհ]aö["h"|#:#IaQ|QIQOsbbN,RuPwlG r?6A/2Gk$Ȥds{{ܗma4(//]8=;}&<>(K!(~]ټ\ȡϡ'.ŗƗNٔu-ߨxViTrdժS.=ʙg۪ŪKj5 5j]k8PU_y>Tc}zCC#O M^M&e/makɿ._x+}W5^&zd+sk^Ԗܶ>ӪK݂ݕ7XodlLr+BoptOmO1sݛtu׺@ACmT =V19DIψH蝧O>{del /'3^b^b|Uu7-SjS7ޚ|nr3Jfg?8)Bg'H|_3Kԥ傯_Sַb{ռ?4t9(۔ڲzMP `<y< r݅% b0 wxZFc0S*\( ӡL TW,|~lW8М\xys kcϐn󗿪rZ_&AaQqIishF[;]ZFNvΎ..nn=<=:mTCp!/oÞEv全1TragܗބĨ$d͔{[JMSOG̢szreGn>qʱb'JJ˔U*T+UOUi2;xx k9)9 +/kjixe+W Iwuu=>۽vSkoQ\@Gw[|}(:h(`(qQgn>we˫cMqN-~9]rsm?)/>}%eB$WPX;V:A-EHnpF@bq89W>*|*!ΝDϔOgf&Qc[7$@t:&<,J3O|"MQVBNE^SASQYIROQR6V4;+tu6342R7312c4ǚ[,ZX[^UlHvwsvpø-yui\=>2dfW‚mC)L"#ݣԢI17űqsI,)WfKI֕~8#41YZrJ'o~?ttZ18 R2ԓUO>yَꑚsu^[^4n5 6^ i9|򗫪>i'vvRʯ?Q~m~ʝݟHT~9ivTϳ^'_:J~}ݩwWggek>Y_K _eWH5种[v ,<9t u(".ˆanap$}Cvx~)]}9C"R96{l8I\f`A-@PtjAro0; zxBBPG ;4&;ѳV)&ɺƱtXCl""v'½ DIkC{;L " #ttgbqށA(-Lb00^e3ag4|u[O: KB~M.!=acab$RYҁ26rr z.Jߪ6]W\;AA>a x;\V'Kml lzw؇:P.9wrsr/Mr.3@V3w L"ʢxb}R2:r jZJFʶ*U#r4kniD^[64657M7жڴ-{kA1 ^g=>V=#K L [ڈvqKx7ޟZiCBYG(kט~ؠpߑ֣+E&'hKz5'iN=[WR[=_xɶy%2k*};Vuh SPePћ^|4]{홅SvW}^r塯s߶s*p^q։_DjJ-H~XX!e0T%Ѿr(c<r;,.F&-9F8AFWA'+w30A LM$[s9 2k +;#S;W'w:%/;' DEK=b#kO$E+dG~Vp,ak_77j450{naeyf܎b*t߹{MQ] l  k6&T'&ٛM+`,/ݜ}Q>Tp(Xe1%IJ *S4T}woh<֢ykm흝 ]"7*oJxۭݳI> z?db1'^M~zͫҦg?$>ſ=<|^޵CZO31Fs6n oQU?6HYiR~|U \Ƕ׫7k$%eO;)+;/AL? pHYs  iTXtXML:com.adobe.xmp 1024 697 F~@IDATx xTչ>mr#!!@LJ(75PZbʿ*?iizrN񒪴Vs8-b9Xx( &` d|lL&[ʻZk={vcPA?A}trʀ2 (ʀ2 \dBBB.xʀ2 (ʀ2 (}e}Wpym߷l}i e@Pe@Pfo3sǻnzΖe@Pe@Pzk Ilnw28}'x/Ue@Pe@*/~[]\7»ccsOe@Pe@P1=ڻcҽ2MWa_uXCIS5U""*؄x|D`HtFFH0 {=tG|Ncq4;mf1Tƨ9 ͌M:r125HP0#Pcw!edjQ 6hmM;NHXC I MJ@rhҒIGXҀaPA"^VE,Qs0/*X\BB XHM–UGK.9 {aLr~@Of@"뇼AH[$V@(dCBJhll RBI/ qګ<6’5G!w?x/`Uc3'\a90{SyJY 9 1{DW8p:ɂFL4Qh9h,6J/|;B1 P{WD PGi2jD5"S+DV_`q$VAB(&WXGQ46mr]`UIPv*PP!$4^46I\?ǏolF/ ;*8pDP%Κ"8-1"IJ%%MJ`yHAh֮=wȤȼ%WM˧%8h2,9$/oa - KG@ @UN 5Jga)s$pH2H 6^YABd $qO-#0-!P/kO,6YW\lH.Qv^=ʻnϞ~ !?BfOhhR&`m_ðX\88`R?WWnjn%6C6 7* UV AOEzS{t gA^XTP kkk |?~ξ%mMafy|~׭nD'&& 0uo8UWǐ#w0 GfvkBqÐ"6S+_{}Tѷ˸/NOyl68 Brj< 8 Zi=`Ԣwjxk @EThrƁ;~D E qh) ҅Z@1PK1T=pp/jFÆrc`paj!KCиf跹9~hbdG8X(z`Y t_2Oq9@|t犾rvms3)+}.3 M˿t3i-;HP *ȫ@`;9(>'6~1W_;!m޶}~iICSnj/.r4w2oĔ)ׇThm{[ ˁ]ν7̙q3G6~jo?5ޏwf4BpF@! SA΁A(,d)rjh B1&%Q` &P E_ЋZ4Q.kQatd-1 h'-+ S!@ƐM`<RZ' ֿo)S|s7\u6$eѽrw|﨟C7~q<1Kky&zA*MmV\?`ˌ5\Q.1|eSI 0h gMWʹs%8h u#tuS_7uY{Ǝk"색Cc<ǎ^ߖfϙz:RVdAxaA}a㝇*FG:㌏NI.:y@] ^ n a|4#;Ej]XdafO3!Vx1ˑ@N.8Z elh "|i B P16k0%kp^g? X:!e:Bjc0"*><>a~Firdc[j|$,50G}Y/0.L0V B8}1)E4ٳQ./0షF&@X !z@&-T( MrE9G+|b2:M@4P& HD+ḿjE`6z$'$&ii$ to ?Q7n<v| Cʆ49"a!Fd9Y ;6e2;.ݡ`b #f;?-,&9$<.&\X ]WskT2MaωqPC^wŀ=B¹r1x<0*`PtD/k0вSÌ/M@%.2 D9#C+S ' (w_ڸ[#Z k\mx\cx}'<6̍M 7aaǫN%;ڛ?vy_okm/*Z[ y ?m$h  Mn婪V jТV/e?X$c&bs|q"rBH fmmZ0@m-4JQMp7aV!+WPqBD1ilӢrSL)?Qlsnr3a#6əӶdcU'OE.8fՓ/yk㝑G9OyLHڈ^Dx1C'KtD8WL#1 چu /*D8@h 2;j1x@@bxc:Т Th226 -m RhD4Wzd|SԌ H GXjaB!4Cp+b܌aC 3D10QCBv-$‹MjrB |u'CF뿱u9TEUhd\R\X~qpFG[oZ" J2>)VBP4 sEObkHP<%0<d޴FS[< @W`ᴉj+ ʉ v[`D yDRz̪w$;Œ#gO Dž 9pG/Eĥ|Ա7ሌ 8QZ<,%!#錎%ǁ̫FhYI'nB8 1"@Ἅ cExŒ1yQFChYC /PŁQH,ҘC196pAgר9~ah3 0 I!fp.PW*.7C:^Øqb8CƏ#KGc"gΨ&#>bn_wdq׿=k㕡d )=GͲy+~xٿAj^n3,egkItiU{ /CK|Q㢉;h/LA 9 ^(^+sK !i$HD @΂|+ZT^Ćpixrc&l;<{ UG\gMK2|Lj]$Ewrj?hm]5<:"4 W`&w8~#"" a*.,PpTђrXQbGb`i)@ *F1 óO-nj.ȌL.(QCE3,Ԉ90A0#` ! RA HVAWW/0 6}GdeF6U=Qpgf;[YR^;!#c!'wU-wRFj=`%7,lj oҊ3o?ii)ax}bfXcdVT7 *6V%]1f ^5)ocƌnµDlmBHDo@Ț6єZ{Q@B0`ufBjZWlr >^$دGXXFRzA @3H `qDx(pg; @CaxaP_ ^(h  :e|D`RL w0F2#MO! % 8 bZ a  #,Ss$pDsXɂ0QkM8q#v54e&9 =X@P2ֿGo8qyQR??} yfW gA &=6<.acmKSڑ}Z2yYs26!$ UTUU!=|A%PG#KFaR˾`1Z 汁 ' P#N3a^PC΃M!4%zFA _`Z`0O@,M4 F|4@BKcFc`z1B@04& BH Ñ#s$4cpXtA@B@ (E?x-`X#O0 W5Vqw7wHONkux+ꏚ)8r㭍$s9&!R X!`H(+07s^žn]$ `å5,Bh0rdQdIpy»aH5tRC%=hBHc9-Q@%QZ M=b1@Hcp*D ( GM QS8& lcp9~v́CAB(@B4)RKHŞфƈ@c\)XX!Hdq!P?W &0&9C3Hh,-0ZG԰85xL 80>s?'Oȹ1rjd|!@JgrY4/ Fe 6eJD `x⊊ @Pe@Pe@>cfL i=OqÔZ7i/^by!#oǃnZ (. "bPBZ+ʀ2 (ʀ2 (΀7Hdʀ2 (ʀ2 (3aG(ʀ2 (ʀ2 (dI&M֐C(4Q%*MxU'nd24XGDUk|ʀ2 (ʀ2 (2 yfS_ֶڴ-T;ցrJ@)V-0k+?)tW8 :}e@@DDDxxxU)ʀ2 |'-mP(Xؾ$&  I kt$Ws9@B g?۽{2_2 ?:uQ+ki%`p¬r̀*a4 `4mpItGPKFl* P"rk3 Eb. F$_$\okm./zjo-22l?exzЏ,khe@ HΉܖÒ+%Y6ooqz"[ (Lrg&]\ѡaW8%bA|||ϢxE>e@PAN$W|pSbmZm$ˇX~,Õ w&`}}n(ʀ2 (ʀ2 (@rPC ';`hY+7-\p$Ed%BtYK4ʀ2 (ʀ2 (3eiW#ҵ K@Ex` n9Jۜ M)T͔e@Pe@P0`6ل#EQ\olsrJ6{kplMZ6Z e@Pe@P3 I5?E4^& {jo;J:M& }}n VTb/k>M;+\]t*pM0\[ 6=|ӒZe@x x?_*X ~ϯSpF=+ʀ20 XLebQښ" 8p@oX@U8Vǝ"vyk5O,[8ݘ? k45P6UM1t뒣6ʀ2 Û׮\ )~kV>xwUge@ RM&"mM)QB__b-O/BMP}\[]hZC뉋n|iރw/F.5[ +v>p:2 #u 'Fl\[.\WmaNޑoϽ:l`1OLM՛WP.~X~̵ ƂG7 M[g}_e@P0i`N֔<`X !_nM7'CFG&A:#6w/? v_};œlSkr|_=-]OXֳku-Kf8W,&N\#70pz*^•/BڅR w߿c骷_h{ eHH`>2" g݊',]:hQeJ`?d/6`CmwrzXvL  x6-&gSV (LL6_>7lDF6S6 _f~J1rޝw޻aD ƥ4 ~OlW_v8lYy G׮lw2"GFUU39m)ʀ2p xZX[M.ڻW4#HPA@Ӗvlr 6}3r FDZ6S⮮HLM;3f/ື0u{">PD8~w]_YrEK Ͱ9b xL{x Og9wrsgK䎥m&T˟LaVIiؒf|}qg/i e@ Rbe`4bYOQ1@[[[>P,oLK2%\GEg:9*Oy47 y6 Y1p 9XY1fC{80bՒ4Y7ѐ}_e@/ZRlԵWP.5aZNOrрog@mԐ̙6sD^aY7֮ ]b˙;0?p4& ֗4W?wbYU3s\3ΟkooFj͆ṗvV\6=x_~~0e@ps; ^z /49צ_x\ (`@2Uݟ]X}kJhc=tݑ/X̢IO׈SpQ!5 ̒7Xqǭ+NYKƐD1?ȿ{.F֬##_|e˼u;Ze@}z:h,XZxV Bc*ʀ2p0|׏&&kC ֚o@" 4[ V4!$Jj8pfEEΫ+w\d|r&GP\@ሎ;PUN0=Λ7/l!a@`;^ 5O*--a79\S{xbbouj DRe@P.'n:~xV(JlZPB̦`Z=%q>>2-BkI]eqIASԴÙ`8 )QQQC՜BL@_#W8%ɓ#"=\rq Iطʀ2 VlYfK 'Rف 4KZŸkn|@2 (@n~W2 (@ODm4E}RҺd6h&Mb\Ү@Pe@P g `)B[|mK9@4d`;e@Pe@Pb`dQe@Pe@Pz0NGPe@Pe@ƀcGuʀ2 (ʀ2 ( c@o(ʀ2 (ʀ2 (`NPe@Pe@d ;:e@Pe@Pe l늁"ÌG`W+ǀ cg?ݻ̽0׼0?@p5X_ \ w=(>Pݧ0~K~p[xo!^9+OuƢ}עBϮus5kU5oy}U敫6XUe@Pzʀ>YƆ͇j᭟ų&wy='E1 xi1 aeJfupݚ~{ݺWڒ~-xɎҬX><[k}Y ?WѫkKnLJpDd,񬿟Je@Pπ~\eĵsH|>'ЯY}۷FSe 8i3VlƙeEe5H?JYD\UGJ=FwxCyn_9'뼝ڏo?:mmrcOsKQA (ʀ2 }¸iu{/}[)ʀ2 $Lto}*o3.v:sg-06~puEڧS2{c1w6;ǝOgƎuBØsmzM{Pe`03\9+/wCaݭӲ}c+# ^GG| e@[s¢[.+7oͽw=hY~Sec)(YO2 \'O~/ *ʀ2 \6 esz7P˅?l!a^@[cKKk`hꫫ39\P (@uZ# 2[2V&rAX_ HLlu{r$Jʀ2 \ xtʀ2 (ƀW+uAk'Va5ߒU?~$ٹـjG֫oɁ,؞(3G ?]aQT+oYlW\S;jsƹ~LOB]itCksN/c}ta =Yv(5Xzdu^ʀ2 (`10pHbGͶPbjz+c'ܷ.`ff62랖>@ƸORibȆh^@1 iz;aFL]ޏuE4p{[/VU@vb'`jƵ#fWi>Xd.T)s>z`y")\ π㩳Qe@bw?=+ .!slR kPW`ɀ ٛ]&ŕ}{x:?z͗7պmRrx9?̜x 9g%Au$o5֛Gl~~Jzٿgӷqcxj0)(ʀ2 t]6l6ٳ&%xoȤܛfLK>RC~Fșqô;]fs|o:xoXf=oCɞiIޮՇ͢q7{R[V8mSsxژgygcW0r8snj;tHǃꪋm u8Z\N V{*̵=2̈0|lҊv74 Yw:c9!n\#OW:m':qȹy 1 &.aMZ'GVnŒ)>gip{ 5g0}+y_M͠ ?'_<(%-h*ڼt ŴdWj,%z9k6g>U?+8gnh&U@W蕿3og6nzq8p}(>[vn>m||3c(3ޘ9T6" N.}ڊM_-}2Y,恂cu`Eߞ~ש,A?48c|V'_1Õҡeܐ 3oۺ84͔Gsӏ=]~~Wؙ4:qvM'3q5v[ٿi:8Xޤ5ʻ,3}-el}Xe6F7 )s+(OqjT}]N6" S߱h/3ǧe027wT]ť1Yd\%u1#Z02ӣt45-z*GO~$FmGJ]3qcG&x*ꢆf>|sU 1"{d4pҞe`P2.^W9΂'=ʼ>h_u1kE74ջr6(2foyhuZ͛Qu<)Máp#͜JbÖFy`2ל5? e-xpۦk3W97O_2{D桟?.Ï!^fkvvHQYgr NR|',1ĚF^xoxJӠyy`'5}?e51mUwnc&,k =1Yf9ϧqPl7B0]Qea׌n-9Oqm_ =K>tC+íjWrbh'I柮 ca$,u#G}(<{ֺW0E?Pˠc@o; ^64õ'w0_[ fPNQi #+(.6YK uƬ1?0o򶑝Q2 (=e)MȄ>5LjOյYpkd|M~HYpp]')#;-A@_毙FyÆoǬ;5^TĶF37FVn׷E8\;oG4atsrF>rګo{Ʊ9YKwr2k75xtO=~}g4M,ZLQ|us2:V0\E#8Џg㵩к>lјǞIz헣6_Ɇ&n[]3s;,9w`RV~+xyc6F~L\UkUqsu2yM:q1C <wK-槿 3K)sǤ=[n]ga8.=2%!P EC>׽8:9jάBKQɐ̻Nzb^{|_:RX4njQ<ֳZ0y?wIW3&̑YvuY/l mi>Nk>9/620 d,{fw\l,3̼1۶L_7{ů]=m۪U۶=(k78]cK6T}"hQeYm[uWɟ~[j|zҤ{ZZ+{œRy\,㎼oѼ[YbAæ_-wgtð搾vmNΜ;^w(eFѰ_h~:3 Ņ6 u>K++۲x>M17Z_wg݆Û3RGU@7)!fdzo ,ؒi=ŭz:#1 㯫̌Jέɓj\ Q\7H?W߬\õXաL}Ws y?8{WWk&hjJCO߼0!ߒ7zcO=u˔fd+X۟Ft3>̜veo}#U4a4gauw7$}OUwjy2`.9-ŀwOb>K^1ڍb9Ysq]Gx5(7wljH(ʀ2W _|bc}v+j"SμLK=c̞͊f|eV'&&ǽVYy3v[~VGKol}ߝr,uX;NΙ ,_ G'Sk|/cB G3~'vhƸe^n~jco6;&r ?7*!/w]>o:^u[x( (}Y~:S?;9_^v$1Z7 J'%*O;Fs6I9v:SqعۭC]w[az(cٶ0#faKdĕ{RǗgw̤ng~oK:yKЭf̶q M?ə<ȭENѽ2W?1t '̍ }yY0 c[? nD=S;F?0 .z07ig׼^cvoOAdxfxLRPeiC^+e@Pdv2ds^˗| %ӼDL*0 `#?'y1i)-ȔƆ͍9SxKIӍ##Ljĝ9)]NG>56|+fC?-O|W]olm(Ofl}1խ96y(~xCpD#6̌.D ϥꦶ3CϘ񸼋Ux<`ycK?yĐcG|?݃S'zt7lkUސQ5Fon^9+O{)f Nn73=sǜ׼pNTc8^7Foo!eP2署Mz[r- ,+Ÿ 7לb1ҿTnNeh-={#f/zp:|ms;`AǨt+ĮWVG{cbc鋯O9҂~kES2 (`S}p^Ø;8og7?o1_,pYgWMڼg ) +ZEӣB<}c"p_S3(tlCd.?я.tfތ\iaK_VcS2S"g-0WO. ) _ ۖUGNuhGfr斔7% c+O:$% #~qw΃:Ciwz(ʎĺggL(_scs 1A  AAA!ă'"^H$$@}9stw5S;33;[]ǯ~U}җ/ 8!®{cG:;uOvY?&veo?y1>{h፻IM Jj{!uo 8lYx>|LX?01mOq[&%.ϜC7p_svDtum5'!2wZ]f_Ls+gw Î ry0 5k,)NN#'a8@G#~:ns$+~-,l"O?}3n'0}A*&d^B|1t'#=N ?yϢW?czPj߹oCqiFq~drx㓨٬7%1jFciyW~dwgyXmb7 ~2#/j,yf,T a{k?N{B`8 5ߏ|zvlP$@9yw>q02FE۰ʶY!dͤGl:UC 8p6>=_ގ((HT`G*4UNV'znc7Y8C_qK[zphOv!׬:]ܕ3-҈@) him͔e36U+.#5P=6ֱ _̦mdݩKn.N]rwgɪ޽SUO5:һ?kW{ ԍRMgSi޽U?({Sv?]+lW#|^5A z8̾]N;7>t:v%p~uΑ65o6R=pmW aF/Z.@0H' HIpUW?4h6~Uݧ=z}k}۵f6l&HǧNiDp_}#;F3C ]&W;T#i9&WOYǞ΁񏟧'R6bvs.Z8kS_ǣL vyX/vE6m٨iM/O>]4S՝Mn\t'4xf/ :Y  `7nOX9b` KXUnLsWxW,=@i>2ƌclc/f8l?w-c3za[:eo;5rUMx"ի\ݑ7m՗L3P > yj=|߀I?~,wGCt٬C>u;X}SMp)Sfw6H;<`v@N)chraXؠZJvphٞSJhwQߔ߬hxdvs;6_v0|]˗ȯ4@IwM/%5)Nnݮ|} >k{zG2ȤB'HꏪJxxv{ERnjB{u4FnTS}lm8^n~;vzjd݈X&ee ܕ+Wr!kkZ0 )Ȓedy\3\&""nSQ'#W^Ubo!jT:i/"U(ac CeӟX*;V?>xtpܐS]c]rAn.Ӻ gu]E,5MYYuցIxv14=^#㱸Xױg#c&wʃCt*m}s8rX7\{O D"@ooM&ix{fzדA -sG D ^G5{/sG D"@hAq"@ D"PhPL#D"@ ^4Ҡ8 D"@(s4("@ D/xiP"@ D9S D"@M4(N D"@ʜM|{D"@ DK&^'D"@ eN(Q DM`v~~IŢʮlKgz֕̀wc,Ȯ.BR·mgSύͻ$D~h.D"p` d+ MܔQm;?^Y&i_ɖ`QƢ Vڬ~*H&>5M JfͰr@ڔĀgALR0I!0@dž@) D#5F9ﮋlcqr62Br(k2<勅`nqg;8k6ٰ ))0Kf;#VFzje6nF/v0|Ǫ&j%mfh:WOs%݉YvQzS <ɖ`He"@ }&POG3g{;TwJ3=d_&Fd4oc'}6ΉL"@聀?$Η;;w{S0wՓ_NZA6յQ9}]ŹƤ/F$JgtOoE7Sk#pM郎w;eo[=|mGG~G+cK]^{ !Gwl[)_VdQ[uF1"P2/ј%D"0?bXYe;_q㨀+jWgOGu:>>seȿS}--׈+'8:Z]I l{gZMkg9ZYqM?ٕMdmQ"c-|k1J1Pjl?jpބ<])'N1=ud3 I/C-{ ,WywrvgUpXq0'{Or?N"P9bHg"@ @؉r/¯?<ۍyIwnlɎN|f$;~#A>o_X9 q-!\<-g'pRZֻk)cV/N#&W6j*Yzun+[yG;oM΋>3-AIog9BU_ѿ VF))<~ D$ħY?&;nM w]lmIx/_ x U̙6lgSClF=RԳ))mAQG{-nw6'̯u'Bm|,!8kg*Hʝ, ^Exk`*)HEƺ+[9c9[A>2wiwZo~wW+Á<ك2Rq*(pfOABkU8g8z;,:~Λ,z[]*ij*t-Wrw9~=dVMiw mg]od+jw3!uNN6l1LFRO; %dPsV:pSYrtGcGsp$KN-qI#o'u D 0ٞl 3*٣mlw M6Ugm&ZsFўzو:Q˙!l#щI ~r4|b^g5´#š# Is]flMjE[`#qiM,%06)cŬFd̿6Kztnh4G Dvj 6㇉) IΣ| a_⟶u+R-$@oJpHe"@Huaⴔ?\93Y'Ye1fQ繦v v$\Fָ?mR]MYzMs;i6Mue?3&ϸgN.d6S z4-=H,t=cvGSֿ>;SL̺e'nQ#%iӉѹBShX:[z.e>'PЅ.D~hȈjί1o\,B"ވi2ʬ/]t׮]U%D"qOبJVǪV$~,q.檙Y#/MPKkX@gա겈e=q竽eof9Z3z3qVc#R.%qɸp0sUrvw- \FkG鮜 \Cu]4\ӂaHAȸ,#82p:?)ʸ{ =lB< DHL񜑟Ulty3>3Ent@<2)0M ؔn;Zc3UrvS eC lzJ!D"@ Do! D"@ D 2` D"@ ʼn D"@@ @0u"@ Dx KD"@ D G D"@hAq"@ D"PhPL#D"@ ^4Ҡ8 D"@(s4("@ D/{Cq"@ C6- i(v=l''AwJ a{\!4v9ȼ+QA"PD @ B Řmؔ"= ;UߏsWAe2MdmOAn@Јd@&:5I EO [*ꖈApµ,6M RlALR0I!@.@CgD" {73gt[>X`VJhj >^Fq&6ֹk3'xT4 V3rsZ,4S+ڏͷ<9i=[dΏc: νjh=Y`׊o/`̯-Fٿqn' u7YQ,8W?jޭ{}򽁀9X=OؐrY$*$%I J4 D|1NXXIZቼ)an{'ӉJ뿖׏qL:0{k'ۗ1@2HgtMwZOv EךOmZav8djt_;w.wVߚ쵿40A9_dGjc>kEnX0*8˱AXlrWA+4|2?LyW.#O'VPLQIo̷l?]5_)<' I4sȴ#I2k|lfF7)nJ - DSwd75ۓ>t{Bxv_Bt'ƍdocڰzjGL&MLO+~;vBw%ԊzO WuЯ?iS1w"|a&,~)U>Gۓ/Zk1 ,:%򽄐;"R1(lr'R+#Я%[R"@@&_K'+7z^FOi1?5C4maisYMR+?v_\tg1jt\J%1SI=Lw>){ !Ww8s5)]"PhPGj"@ =8h a[VdX@ٲ(^U6v}'5ٯhO>:uOzlke:,Edyl~ x7MLK;.WݜU';ƴؽ1w]ɿ& 7ELt'0{ 'TFߚ۫4-itHqw)'jbG"K?3v9=?JE&>e1b[Y9u~lIp4$Vn@IDAT}|Xz#n٩<"@ #Ou#86W^B՝Ƽ&YaT'(I%R"@@a\t*ȣ>δY'jyG(4pTigs3 m/ܑ8NM,I!ɽSOc㳵gKM( TyٮMbws_qcw)O tA12W^B>"c;p8TNgsD1(r\Η}U ն o\,B"ވi2ʬ/]t׮Ls" DH H&|!XV,2w|Anx-4bOD~nTՓmѲO>?a'+ K9zxسVtvgJ;";Fl_YE{еr{ !Ww>ҟYŨH.gfuTU]}c:ܘƫGv[ K9ɗ|n[ɬsQ>4: R<)9B@ @ya<:H D"@ DM:YP"@ D=S D"@@'t D"@({4(!"@ DN4dA1"@ D"PhPCL$D"@ hɂbD"@ D 쇘:H D"@: ň D"@@ @1u"@ Dt @' "@ D'@b  D"@$@N#D"@ eO&e?A"@ D"I&,(F D"@ʞM~D"@ DM:YP"@ D=S D"@@'t D"@({4(!"@ DN4dA1"@ D"PhPCL$D"@ hɂbD"@ D 쇘:H D"@: Q"@Ŀo?@]'Hॗ^2 㨣*FJP'ࠑD"PhoL( 3f,XFЖB={"@p qX|AuuuA\r>DZan)ן.fzѭe„ wJ<.M "@P'Pp8 V؁)fSR?]Y0/ź Gt&D!+V hJ@?ȷ@U7]p  D8餓 "g n/ןA/fzŬ[b]⨑D"0 _N;[JJ@qn)~隒 P:'D"@ eL&e<5"@;^T PX4(,OF D"@(! D`0 Mm YSC"@ D2!@2H D"@ȇC$ |:@"0~H6 D` *_o1I& A`wq08i$^:I,:i֭s],4M渄UBa E1۶Ĝ< P C0&@1+B`Por$!rіz}! m- A52" {UVUjB->JfJ(z ,\W瀒REZi Km)JԂ D0hD0E1KLz dMTc!WH5vJ"Ꟁ xfOQ[RUdZ7L0h%"@ʏ@!` ɐFÛ(㰦 bq&Q`Yx?:i߯`"]"$(DYrHAuU."*48ʨ9jh\椩Gob>J=V5o,yjF@%D檸̒%U3VQYJJA$kIR)Y\YXTZ*HZaN_MCD["P$M ˳4R!oZ1&~:[ cABؕ~}'f׳(-1,OA6fY?~MM؈DDj+ #CxiPQQHljuc퐹uʧYZpX?,2RC) Ev+!A T܈8JsKO%$AKRRUJ\ lT:"R[耀b(TQ:Yf-yԕ*i2W@B|*⭮rJ D"$4)P3R`{) _lmscfL|ЪꎛP#X->W߱X7L{Wě?rfsG2>io:ӿUVڎGSkqPQZ䂱G܀(!4|߫`vЯb! v#_Ùv ܴ@B%D>Ў2s)s14ӚAU[śTۋZ)JQ ,Y *J[$1%orӒҚ(.$z˧ *z#&M: 'NxZGC5=l\2; EK&E;4ezt7{5ƷB77U8{`՝̾nuZzXqӔ(kM_s[f6m\%C^^40 sk*/l?8_ r D#x/5A }&@>+Պ߄|5p-9@׾aTO'mb fG %Ff70 mu^9vWs ƿCz33wNX]]'FQ&޶{R"PozH"@ pjp`> aos>͆7NMM xPK[3MRGcfaݥuXN PFʑwC0}{;bGסgca@\*0c1buK\f<ޜxG9o4;18|nW 1[7`γ-TRTЊԳA9%#*)B^u**O JMҫ'-ҔpW)iqtEZBzJ+)<%R)l[$ JЛon!#CZر @ay4i: _&{ jL[|gm4w3X>5Լ(`pr^=a?N`O0(Ke`G* *'ڎ?dc cͮHAˆM}4,~aLA/_e0q(*G#S4LZU5gJ 䨸(o\"DUu+1bp(oUȑBT@t%:d&-V)ۊir-/ nG+QJjt]"@H#@4 +/dvMSՌpxpf=Ӷ~ʍ,g0G.`w~9o-'%rD_h~'_Rsy.7Xvr[Hw2so.I??8Tt/yąZE=6Ne'U"RoU-"0$й@CbD@hP )3G!xW®v WօG`of͖WZ)c!`F5`;eۅ-P?܊lJ/'l]!SkI5lEsaibfeQ5`۴V>2?|=l$aCw*9B?6ljUC/;&EJIH  D H==MGkrͬ:9qaECÿnʚN]&FI?ݖZx ;fpsQXDPV#3$uc6skoT+ Dr%@rR7nWMCG&&`uaYF&|c6İ&ۗ2U2 v=z)z*X(*wE&b[ q(/}D%*)*+BQ(ez1?Ϸo i@S%xң۹Zt+*,V~ nRMKvR %@_.f,k4cЎGcg*ϏπWx=Ԯ[x\ ?yZpQugV^78%ƘZM1Vpl5=b8;Efqýmf+J`vӿ12W񞤤vW#QV)!|0R "vrߺo3<*2tk̬-F]Fl5pUt"@mAn_oҼ$79}K D 4ww<[[|eӖ-?8Ϲ+X|NI7/{ԕWMvle(+'gcw`Z*-c͹&9R94b-|orRd*[TYoNㅔGZ6ڣ Rv0RgK[(QH̚ 鮢7J[׋9z^sXH˜_}[ۙ ˦)_):3Q!2iҤc9}>TU\M?ܴiӊ+"E b#@*!}@9H_,Y_\'ZeѲOcp?e9{sWǷ:W#`\ Ec6N"2g|qU-*Lr&6"bь>Z.mp3o3Qv- |ث8!-(C4(A/~v 0sN4ʝw55Zr9D` eN58?/47ezU+\#>B8?2V["#VN/DI8> 4G/kX(6DΜ9N"ZcCq"@P @.@%5Gn~-go2,2:el˝rOQkg$nNl5͕J֏hJcaxۭQiE'yDU@8-# 1|iqhc٣*`qU :s߆X1VW#aRjge]C,3@}wj;D|P2M=wIܴn/Od6x rem P D Y4(ozKK*mg9 ׆~9j߮פ{ljDž8D}Ue7/BgGӭ@;?i'?k~lAp,z ?8a5<|kBY(+T^d2`Q P i+^&*9j2 DTWс+АaݪU$_;x.T['y}7@G?oVC9^X ޽{B!}@:"@G`U?cS7*0 RXMUz9P`=a%l5Q-Oigk!?3Zeǹ,b" 1a{1\l⾙ppO~̦ U3^5^fDV-׋Ш7H٥C`ǎ_~?Q4%D(0gm{l5V6j=wk4t 2Qw-r 32ϰVB0Vs۬V!7=+ePAz- A# }-|i ˒4`xi M<`_j3-c9?MR+GB(_ Wג%ݡHRXx˾<;C˾>*`w +gh:y}ϸl3#.{R<&fdHv(SFS$:^B/q^L>_/+c c 8NЂx[aڍ齔t< _̴hu*X8z@d)gi (L `A21e%w6P5JީNMf2SrvJ,Y [oaLB(@wpM7]. @GūVJWj8WKb#Ǝ4?] =ʍStMs"K`_̭ c̷_Q#mc`gmfd$=N0 ^uYbDO0`]1.῝%~>ɣJH +׿~ D`tZf"Sp'?ݷgVb=|436Y*;.WL>ʱjjsh`Ww.8v:Z jL+&nd[rqw}IDJTG1-bDdM'T 1υB55f`WܥŶ@! "EdK"0=J[[21dp&C/9Ç,|,{xNq"@@y @y|`:}^_UpqS .~aԠkV9v@t}9Ϭo%wNR@j#QzΨZl Q24UѸV,KLkw9t)zp* / >TvZr_X/^~e͛ڽ{wy' Ξ={Μ9*B(*4((+e?oT^s7d>U@׿e9;ΛBq"@"@opxgjoW87p}ҊMnwJ8E@w#%,CIBה?x?dnξ >3^ AK|NJ_nH-V+hWY"iG9,m_!< GIv[.A/3f0.8w "@@ @ T &xx=kΑUE*<W&U f_BZ+P PtG\#C$I($Yn-d1Y1m67Z#`nZ9@| |eTTT`܌]2 RwC'*]~"{̨FKΚ{Ċ7}բ@~ D(unY׆UIC@=- E>~(#Y_{ "|Yly8!M[͞n 'mA=Jm8vO,OׂPCc~ҤI:cKK{gݿy6|Cň! i\7:_$RЁW1&sřVnOSZ"T:G }aߧE_/!ѵ~Xa_kC9&>BZdzyH3544pO߶m;~^{ )/q… T.@ T!i%ݚ"ݦn"0 , @ I/9Y;M| jVmkь~sK/}k_{qвe߲e 4[dido|û%@4=SDd%@.@YP" eNE[Nukw<_9r6_תn[w7ºV# mynʙ2p.@pʿ馛r*0@l);@w&Mxw=rG 1?LMmQȳ#QiHTレa7'gMƍ(EYmh-p^j0Rjj{BX _מomECE<< Q[I?Z!L\ ^d'I$G$IbA1evNљmU_UAěN '$k`ڳ;=h؎<'AƿbޑLeBKoiu\ATTX9"C9 ١-АbD 8~:ʨ6SlIWus4H .әG: Pa&IҲʅv\N򪚧.XVo :qc{ 0ɦe+/EĘv&눞ߚ8)*Z#MMMNݳ#bV3D~3F_F5"]@$* 4&qKjy$Ž/M ˓DuO gU )ًT#]?ڞc‰ŵ: :+Xv>f M2h{eR!@JeHr%@rY  W ?e~ίa`Va"t̾EZtKtբ]RA)zmo%zoCviPX$- |K p# G)sNǶ*uYdᯚTBEА@ET."/#P=-j~[1yee٭ sZ+qQ:.IϤ )>6I.K=/ԫVO/PR%JgKD@ՇTC&2*\$d56eX>J)U>H*̽|& #WV[wZo1¾j*a~+d[j+T_p šp}rB{ ;4(,OF@i"HlbI+Y-Px"E@  @ H'9Y|A`z7pM"%ɒ(@$iYsx\9໪5nހ4/j |>Q-ODD^ P.QRPO&"sx2s+Cd<9KJT)Bz PZK楥m5Ļ7hT S[lQ-eg( u&,DdBsLBzd٩!/$, ֒yii[fw%J>-7tSᅣޟk//Z9T45|},? j?֧޼r1sn~!Ss;ucg9{liɮs1>۟ꪮrP)^Jťg,#1W"JE@ ȁU nX OC۟FnF"QfԀOK?'0p˔읮${a oJLPŜB ;:4(,ρo[آe ں%b._2䷶?cל04)װ~sƎuɽaIvDPN _mah + E|/_3gץ_6@ʚ@iMWz(sB&2=o{SSG0 ija2*V?R)>g  *\Wo@U]UQ+u^)R*1!RH˿]*g3>uL#lÂ_U㋿s< (\(<ۥbD"@k49<.+V>V/ge)SlQKW AZո"Q&bS8PK)ZFI˚KEH !Q>u@gy,`f>yr~tzgqҤIC8qb@(/tKK>YZUmipA0*!4P(Ũ   @wd+oOxܵaNFf³:A#kW72=@, 2+ `SiͥQ6v,iPX%m%S+_џ6zܽ-=vC][5[mz;7s4wG@1r𣾺 M|22a@mWG #"qDŽT?~X7TVVǧH!kP8TsK!09/uԬ|Z`Mc-Y$g,.< S1"@ $@XQ]ʏk}ÇW%yŪ'؈JXv$)wb7(%=*NzK^4.Ao[?{58444ԅhH >*3 8c5T:檼w3b_F/dEIԕAKı_SSHd;v܉8@7Ui Q}@R@Ezj3Q5L~|#qq,PRAJ΃>*VEs'!? NfRZ:*i!].0ܥM\6W2P΁P(9_B0Uee+8ZQFDa\e犔;cG@R)IMR8S8 # sӫW!= )0"@$z} SD4cݕfQ %M z_O=׼kP| w%_9z'*Ek84 )U@ː'߉ W!"Av7"@ʗ@E U/iBA!@ Ҥr@kB`GGuߗPW9f(lv Hwsx醔|RS HI'7{Ƹn3".x?~w{}s}z nZ{6@ g} Pţ ev׊Ea2?b"w}?Eg&R!ǀ}@߸uW&ݑL@Z?xQͤI5ڐ(s/SduL`oI32Gm PUӕTP8g˭#up3#*0+w`7zGJT[j|uꛬ;gR>={ijSHKgv QqHU @1u;&so!MͫEFrU{gc͢_ Yzh@_H^[пH~hJ Ԑ&e9%)`z[$R7,ʵxe$bQV:Tx$.bjUqKjʂ-2P1i_42^y5Dե}@5 D`A D e84.Oξ޴+[Qk"b0d@iv?_Ѫ7GLb~?{PON5D`hH:W SZ(V|:(GPe/$[E$Eaı*#.!\:W0"\v^U],CodFoS>PK tq@]p7yqA:޽*.І=.dFfn`lǬD[f\ MxJs,3yt\;[s~l_0xX7U#~onDDpj*H@ʕr-t @&"L˸^@aZe//̝֯5{ aMP^xc|*D0>*[5 ;TCEdS$ l&=]9ӹsg2O_s9N}3sTNq,X'~S+e4ք~( b]os)49"?}U !oU˕h1Oe ^؏fZ<{] f4R:8V ]3B[Q;`|V*Y.B;B B|)-a @;?g{y}@~ceZ"084}4ߗT+ʭWB||`'ܓ6KC9΋eώg? E8EJ{)T# '>B"P2$(ݶ{Ӻ\Yt%x5A@ g{J_ig[/HN5gRXٯɽU9pA}D0~g*g _!J X0hdNm\5uzȯ024ٳ-[%'|^zY@ SRzɃn8Hxl 6`FH(j@P~#n/r'@`-$M `,l`pPN9~ KKtSH*QH҂Jnsâ% Lz[nTFՊݔ}S$vJ,O+7ȍuF9Yc9ߵ IbY`YtpwF'"5$횤,^tj[ zi]O*; #QnŒ`m}8⋷zlVN^VQeaBR"H@dFpŸ@|\)ZL'@UQI ’ @IDATvC?NqE|I>Cm(d bF%/LlGӢu{wSvuR1'缣}l^DHJ0]DkIc2^dmi!* PIgsjbi۔P׆'w _|י KɁ֖`;ОH#B^AoMSw%xOkBf[H+~,?YcddyMXߋ?oj{^#l, (j &_~{yFZMg:^& q/J'|U<틥{{sb^lTA`3:O4e;$]Ghu555qG氀ΡtN0&bI;G|rߎ+\~Q;h3h sx8O%< D4+Mt݁ ooxR=9?H߇YA&P yVᐴn`A@_(M̗Lj囪voųj$9պS6HAN 3:ƀ19PaC (uJOιy' 0*Ÿq^}5v޺ Hz!K^z zh 0CeU갼z7+XXZߐg r8# o$8Kc@Cl+uN&~橷HB}YO$Q`=G-Q #;W_g K)E%mk+#aqǃ903(ԓl7>He)պ::'nI|Xj^^U7o^w"ߺs4ߏ)^|tw%kEnZ~719X @ p zuS詘 &L2&x(0tI~Ea-n CQ8h"+>Ч'p7I Gg?>q~G}tCCp}JYw\xihrp{!UJ Ы1Vj}42 \aM4֡4`Q8݃$-!@4Q= 1C=ԻF> 7a0%xtp/6DO$ uޤԮVl,0 B܅gp[祡B2,/D`߰o|{9euvgWDr_d8%1zG]TlPKAGLU+*x7*[ 1lS>%UrШ Za0@_QȀ"]>K΀}pXID=/i䶇E/@_ݣ6,}UⱠ5aC Y>9GNף6DY=\ž'~de_{Th W!٣Ɔ2z?~ܸ! 3,;M7~~6o'op u1Xs/G͚sBK>cf?i?0m1 c9 ) hz 3W3?$N &J 8o+W@c.yFM 9ý+Mn<]իWc"BG+Bc2מ;gK[=ز5 C6oĆ! ZTY0=)8O7 t08:3/1'،c?5T!1o? P@w {r) /^ j1ث+R{֖uwx<7ˀZ -+Mp2 !0\?OA_][.6Xr+/AwRN]6 ΝV!##/k-DZ«-':=,oS_x qO+N;턈@ NQ$'e08nSt3d{k^U?:_󳦎o )o|YѻxIAL!Z( X!DXp!KyF?8'fD[9%v"Orn2xާHe}Q_Z^р;h! ?߮k=Q[6U?2<2huu6Z*\wi&B]= lJs/QC}׭[я~S4i҆ h!2(K@_! BgTM;ǎ% S>3\yZlu~ڔ` `s䱩5%ڂ xtj`ouO)u;UXqTq8SJ7*`Tż=ӳć*y]M>Y%CvA7660 l1M9l+I 0{ ꯷s$-ε6iw?yRoIM vYMkSŌN, [ O{[vPw\A^yvpoy^o~י]]sN&CibLyXݜ{Cm~Ac3tP3^w}!b {(ferXW/ 4/5;l|ΌmY [ %->AWLMe9A:_ +V裏91 T4 Q})'Pe@ !J RF7<LQEz>W%Ӫ@OR)袀&&4iF(N/Yz1H ^cC >0h?XG-4%뜤)ۏ&He\1?fvX n~Ku3d~p@C@V 'Ĕ#vɻK.9'|{LyEoւg->ppD1n4h_b &3 6.1+Yms6>V"X~QUU`_R[`0t@@~1Mxv"-UzV#>ˋz (ly+h>@-S?hG0)=_UG4i|;fYǍѦC340JP `I=܃=~N8Rhx S [z2 T{f'θ77s*Q7m*vs5M9O0Nހ^l =G`7^j{n>c|!FI?|瞻輎 sα{c%vꪫ&Nxc & +A@l;fmU۱Q+3Pt,?t*'|'smz P4 8%Ҥ/O0 \!ƒ>ASdr{psHP*FP 8d *tnaYE@hcc˼7 J_bDdU4Ǔ2A%lnj&ca֎7}+PLlT.}:,efʩ)]#@!jzH+!Xu1.P p%LKY?Lr衇m@qTmYm϶IǑħ~J;|f"lĕ(DKn"@l'*siXQE)g5m4I/ikpW%Lj)m2mq%R/ sl@OfOE" (y"${V43)l{"Gja 0O/ L" (#CA`"6_>R?䓨]|y7a \l7Dxb ĕ{ C WČ/M2 UukaP$R$V=dW4h\e?N6ԡN%BYPY @ek@ x F w&p^iX!y+8dFw+Srj)ήRF}&LʬOfhrϵix`v}MjUCM]K%K Ww6$}@EV HX3z%nKJ 0(xLIN{(IN8&L B5 lNAb~m;~Ν;w޼y%̎O"̵7V8%Qp;GnR5, 8( h*qf {}G >gE. \ ]-`F(J;AoI˶ONU^-Kxjꉾ~2(BCUv4iygY'<ˋ-jиk^׹ \@#`lڝAޥ苔_LmG5>z I,2,bM<T㶄y "IgtmpL1wkdu͋^C`UxzNAOjm_w:Z&{Ի~Ak^ͅ&mK20@4/|4 7P=E<5Ց:yS\%ܞ-]#xIwMۀ.Nd+F[AU]w^Ə~`G,\o/YVA-p:]0iK:n %`[FKj U`ʜAPʶY]< r#p%1Hzs@$=EnZ@bU} ҺL/3-L ,C25n $>>L ]A@YEE- $YtXm|;& -;3.2 FLL ܙY& cQЂ 0`|jB CVj_O``@QFohJz[Y1~OXk "q$|.3c.8eeUCj`](hDg[}MGjGc-P)Do9zGK.)hg0_/}_/23-~I"mE'eM-E1 G=AOt2^zu N`b{S?M1_uUz0X[(6E`x82gq&ݬ>Pو_;2@YDH0Qx^"a|—Ђ 0"Ȏo@7< F4̩͑mwιk]~'eqkY+H#TA]tt$g;xCRSgBy -a%%ɠ6| cPжl"0tWeT5Rn{]/1JI9 70-`j/b(|eO*F9Z[.2uZS=buuudjԨQ~8y]3VĬ;uSxtnr;גQjjj PH_N @/Y`б@B׸wLk}p_,F >pax1E_PށCA!]Ƅqe(8@ txH X&Ǹ]E]mQ>dm}A`# !pWׂ) < B 8F?'IG-DfQz/ph DQѿ*YX0 Qy!SMp8VwvhaoȩC.72}1 $w7V$b zdU9NsM品q HA(XI.uqQuo({tCG}-x"<ȓP+͒HY]6,K\O\_]]:Cf2>Dk#^2RI`AWS n3 '5G#wZ\qW4l&7sn ,`bocuk"%M,>G9rAן_crӳ\B?iyV"C9So鶽w<KkuuSئ99{Lóx82=Rή4ʶtOKA`x"!0nہ]^dT8B`lx"6dz-A(7s.V3yz'{=j֜R_^~3Dz1 >w]E?*t%%-\t>(A(P 1A\y gb|?S *,2i)G( Y#;=tlA.ik|i0[| !;s]ױ;FǏzpPKWXen?c5c5EI-[PjOc_ެv3UNfS. A F1-[BUPaeNQO87&Rah8tI=e& BRb Z!]Dna0j|> m&[ւ07U~Ӆ%f͌:gN3S + s(! A4^uTCZu/.OT^\O?|΄-vT쁳esAL(GSatE I DA >ʳ/oE&2LB-vRJ(^S{MXU2F(kM uwU@+uB}q@3'❤ PSS[[ ~ss3 _2&馸smV5T@ C@4% QN[g *fo`\mhvd6S%ȳ cek`;ɒ\[@(7QV,7&3*Bxlwr_kg %[C@[Ch7wW[ރ?53ꞅKל9a6ߢȲ-ͫʛ쯹q ʿd'+ =BfzOQj-XXq`~Ƅ+ߨWAU&v2nebf+dk S Ҥ[+eZ!;> P9Лm@+ he *g/Z{k0O|[L`6b\H [R:EiT+ͶbaPKt- $i^6*PLAcN?޿Y8+Nޥs4PDA+ hf2] "k1_|%i*ux製|r^;OydLSAv$ƍм%t}ؘ͐A L?.C>iD#pI/[KM (0}@29tղ,Q@~sqw.^8ZQPX ;. VBM* 0|x֙|/ZUջp9þ3a`L[ë\D&&*uA4EuPٸ1ӌu_Se;p+Q](n1fjT2]S;X綪Eqƨ*5kVNJ3ʟGfkO+۫^AE8"?J%1b-4XLCCtJ{cyx?Vme:$$z]2nJp(E1t"@P] a[ ƢcnNU6Bnu5;0Xv&E.[PM a|/W6m@+z1Iok|)x߿tRK.>bd THԴc[RozHݕl󳄇Q}6 M<_Msͮ1[ڿƴ *ӹ7tP9%ַB#7:'c驾}݁&VMVK}YJӿAӎ B@ m5=HsCsbfrixMj8tc7M3EQrM[L4*M*!^JorX]Ubii v -?eP$]0E}Qʜv@PzKV8*=CgK ~ɩ9İOVpğqシS˖-#֯_a{ol>}Ҝ(D; dVr},Ks|N%#@'ȣQHVA*=! T}T57j0 FeݕTxW.ӵD??8˗//-ɉ~ր%E]A`# A3 `xUY [ Nr ɡ@9#K@ xNߜ;s1g\M?{zҹs5oc戼bvv$֘wבF"JsBM5֛1MAƜ6[{gY8he'OGN-z6#/gzօjp^;ڿ6~UO3ީ9p?! tn NB* *bژ65Y9ʚFO'.p Puc~e/7Y՘(.NZOW?:5AY: D߅J)m~,c ng;_fzbZjUpoSꀺ4)~6ca0 v>_%`jhN8gt #?o8-f8RA`[X Ǻ\ƒB@@G;UIOG% qs'Msڎq d "DSJi8,Ѕ[훬A e<<`co%갧[9T kTOEv|qmˤ3)@Z'qcƠ>tD!qlÀAcO4M e-4\q=R|Ѽ>2/77 # \Rؔypu25iNEٝZvz؈O_ǫSm$lK(=}F3?-^+vx%noVl`%sI+!2n)AEn78X]Ur_Ɏ_H{HWVl/r7"?s_9@ j=d*"iZJ"qkfhΙbflS-ݘ>umkUI."놱flOΆ1-zeV[j|,F׏9M`/[Eĺ#u@ʫpiIlu۲H!2;y̼OUK;[R閮{tUVmvG [@cey衇B'XxNt5P4֗8fi--w MuQE%{,%CxE{.yw]wQ; ~gv@=! )ؐjf ~b-M*׌k)Rqo6;zbށMj-)y0*w;Vx3? btU?0<q~x'lx~3:BrNb:cJ?d{޿: 6NJ?G_m6" eҫ̎sfgE&'YGGbOv<I}p2,CڼyJu!TZ`Bg\>A֢)]L_xg(nnxM[qu~|R>ه\M1~rDٍ,Nwc7i:?: QT/}c}1`IԢznڽk&;@F 9LWM t.8?9[i?ѡfQID(e'עINea#{; wvvIRڋ2 ƩTUnJ#T_|U~++݆.3ᅎ]r Dٵ8]7 c)ӕ/V?R5*voJ*j>/pg"{"A@AId@J}) zl2)Du"QhQ?705 FZyK/KopÕէj.(į2|ÍOzSi V YCIA<-nTݲK:E]+T)-b'E*[u %m&ǵ5_WccxbE~{}N%br+ E@`E@Xc pږ=ۺqt1?hW\Dv϶Zd*A^rlc<25 UVD{Yoz>\/tJKϻ+6 %P_̞6u+R+ 0Td_zg%v̹gi [D"ڈZc+ODpqf[:CFU*zSſwV#6"dڼOzVu F0s1+~f^arW_82{og!$2 / E&ey,*a *@Z`bQ@5t)LL .ᖛ+[g`?~=d{XL6 s$IP]6W[GN[<ˏYʾN"hhOGGLZ%ANAT?)spk=}mXZw3+58/߭Ϩ`JZdL-ݓ&JkS=(Z$jpFImm-d3rȮVdk@IDAT ꓕ~m8`X#?RHFXUT{z^,5|}(Z\-LAŨ9vང9cw0Ώ5MI@Ѧf&#IT:jYQSL5kuZ[Fi}{˲>c;A )&(2EaGnB=wDL!R^{5}vSEA@b`=P @a"Qwcׂ>8ϩSe !otyOUc1|Ky7s=16Y;v+*  vd0؟-(h" JGЌBlp8Q3xjcnD2I@Iا&@ ۣnผ:6StyDsz2,7GqJ,qDܯ6©8@)4\e< 'j*t,*^ƞzy܈#MG}3ﮙԒ18wLZ<,_gK+L`$vts&Hva cpm]v?~+K/q<.`bV^ ڵk?wk 14={6wGP馤 C G) u-d K@S4V$yR$q2)$-(-U%cDc]P.(y˂QѾC6Iy$_sE-aA!XS(p6m< "*Ʒ,ɵP7Lg ^89M4ݧ~b&oLo\6qW]W4 ޲unDХȨLCmmIz+WF{˗vicƌ~W! _RX =+)ea  Ƨ&>/^4TԬpY7%p6 oNWS6_L~?cȘF rR8A_'!A׶>h)[[UjfUpR.U/̽&} i흆ձ/A8NǷ &'` |CA@ @D :ODgX=Ӕ<ƔQ#*2Ntʖh0QL%8T t²3[2yI尩KćC!dH :vQxy9` 0 LԢS[WÊquܴ͛7gZ 2LP@3a9|,_3K_Ǿ 2E E_%Z?puu5s1[A@m|A4A3v[Ǿ ϳ"m!E5B/!1b$]K,&Er`]QLp-M./;$€41@(Ý tަ;-ydQQeI`e= / $A t2,N·/IcڵxO[: Q٥隚NuBa o^q߽^ՍrQPLQX.ye}.s>nG<6K;Qz8 aYtԩSQj* vieGuT]]] a @?!@0f2$ϵyCJ9aS,\|7i~YsNH=W{g̔1@w)"sŔ! ԐAF|DAT4fILщv'#PúF-4 R+ AAЅn@#`?eRqgyG&ر67>BChqDPN^\ i"oΓ\*7NcGx ͯnR n; Ů>d{~?<x^>ӱ_PwzK)@DFKٗ d08v7g3m1_3;^D'\r9Rꏹd=~ =ۻ&YXlIQ0+|C d[t׮ 3a`e3jC-Q0jte^˷X7@# J' d/t`1o[@Ok #?Il=,P [,]Wh~S{Q-ҭ~huy?Q*IJeː\;x3k/>#/'Nxꩧ⊉| İSGc (A@`p<]|!GçޣO ]UOW,\ C 0]upfјJ[ٯmy(w[Fe ]o/6! P ltjM'U<m= 焥cp.)aX5GRGjB?lW㱎{ڼZ}KݼoN ,!J@ ,^V̾vb_ ? ?jQ#Yb -@m=ϳ'̤ j_Q[dy׉L+rV\`ٞwm7HfmGI! 0p> T޵OoʫD>h剿/{7m>KudXtpG9ׂH'(9U!&t)g*l[p9[*$FL@Ӄa)W+ _u^cdܨ{;q4,M|e~M2lxEV*wXMo6 H XH51  td0ПoЬjGM8sV ~߼x7tsf>{Gy-[I9\5Swz:9T{P}eOO '.)@}R2,d-7NX?xӜpjgWUӔzMjJo*U_F`gLwvn? Lyk3ڋ5v4m;5dYR#4y0 )@}J2,djV/•A |0M0k}Gs1aNo4Pb#{+|6ޖϞ\Vc}/^O@we164e@f h )A@ቀ srY ^{K=<.Xg-{|qn[08/i7J}{bmQ "Á#RŤ,lK2i$46662k 痣bd_^9_>t!HŌ{)Ŷ'OQ#/A-poFofnϡߪWQ~2 Ljq.m&_91;;`o u5w\w &Έl=(%Y9A75E/he5A`#1,?Ħt(@< c6HRX)$-qHhX`aZ@ >G] {h1 U6RI `Xq:Pgf'dam2\\gu uЍ: GA@%dKYA@70X7*v1>ew[my&0Uu# k+ Pd @e *X>Bc)sɔ=1kGc_t/Z;jsk[QgEGNK3 @@! N@g [2=8gG"R.C3AV:,AF EIkÞ̑S?ܦȀ"dݲR_(AmQsreʄYrxẸj؈YůTj: !֋em6hVꦂ^~l/K|* ,Sx0Y ϱtm >"  K.';dyґG\ yK<,sVAؙpn7oCwJW"`c`U̮ QH*ݬ%˧j ]dѧ:v6*ui;*?YKq}[c.~s&悭<כnUp! P@'2,h0ƨN E4ه\|}Z%EDU֜XAZ0MWX%h Yƚy0H[[Xෟ7;0b0 V'Md 4 E^C`6?ĤrDwӓ+OE-J݉ZCC$7e1lwf&{u9 {\W綘|BU<ԣIsD^9W n̘1Ǐ|59b&w^VQ`jlUlݳ_}G(  0gA`X#pl}}u!qE>qYFwGJ-@.p۷>~$/)].$̋2%pxXhϾK,ӑ?wS ;8#=GnA`O@Os3v ͛ׯ_IPETrHp!'Ձr&P <3QI U`RY8 Z.[jjƉ+ ꌌF7גd}}}]]?J.[11k}:9"Q9t„ ӦM[3M={+ܝ.˃' E ?L>=\8k9IU,@AcXXA@Ao@, Y0rν&AbJ-D(DFɑ%q 9 Lt* p4D;ŵQ&uoLapz}#cRg} >lbnMM ?{<۲VUCQ8UWWx6_i5Vk+`b$ǰqT"O]Z͒! #Y\AS @/"PL/UvReizڙ*v֦S5` .z,Qɧl0A@ 3?bAp;b~D vaFMN y0ƕI2}x:Fb#Q2YNw0%/tjg][0kTzo3-VIJuTq@0ؘw GQgȟyMdWU'~6B|ا&bu!A@"Pٳ~+k- i}!1==S$ D*P$]"xzĄ @ ]U-~z'L6;*umIm t @e'>݂\=;.0`v H;1LG;Y@+$e:$>7bݴB0GgV042PCLPc(eMWΛ+~ˁRY*^^z-PbAnA@! #'[5 6m<~#g) AFs'y l- "q/~)yM:0%B~Soi*z5bvu*f}@Fy2LTp,2e~G?UVF[ KY׶~~3   l7#AvEA@A d8R%T;" p`4d8$#lq_@ pPײ+̰bj$`6y1; ?{gUu;LB6 EP (KźYbZlKm]*U>hQ+(؂>93هfp]=w'λ#Rpgؑmݱv?"(ȫ^H{d>uRyo-V!`噰$$ݴlO8kχ?>B)NKD <)H4(~^gN_b ͳz&991* }eR% kwԛ=$n&b `a"` FuI?dfL ؞7 Kw7 WV6 jksHں %Y wMė'%9yʼ]it9Q.Zz8!ڎ5@URNh i2B !R2dFvgDRSڈ^pHRʫq QLPKTDMZSw*WE] roֶmP;@g*ןО$N  =d> H`X>'D!d8^>% @| C|y4:mIc%ib>8+eILLdfKjh%h@jlO)2*KK,ǸI ~ĝ!oR/ִrݵ hp@;'TxϩU}KܥD@s`z\Ku ~h)3$._- R\F 8}E{L qV9PUo^H|cuzgO=WL; 7qCMIUp@;ȔzqM'8*|uA@b&v@0е7ڏ7TkAx!l;HHZAZMhS-,PSlLٺ|.7!ǧ_)'NIٺp}V5" ϵt&~OZuQ1wU{}FL.#IVmU2h` $-roXA Y .jlR1lE4@O^U_/}-CBKUMpj#v :  C&LY:7<&-#A2 Uo jֿ*y MW-Ȅ$`\VJ)M-(j1M2 [Ok֬,%$@$@IL@b,-g?jL! }E U,xmh1~ܕWխ Ęa,(%DqkLuQ@etjEe&"30e j!PJJ5 h)ǢD֕RʨQVN zJ(vAMVgoaպyVŠf|/ C0Oa~JSyO2J$i~ 4=gtT}c6f! @ bJHq;gX[UyxJ!f_5"3lb]E ϵd"P&Bk}|Kmg65O^ R2Ms߿?n '[/HFAF[C ш#ڰMi'C0u)5ځ') (!J+a E:~4fM"EIv;XulJ-]oCAKF(Rb6@zz,A5!dTS$Y!(5V͠;K NAmX,+/jդP+ѡJfd{W%P,GT =P] FQ%R爁iH-Є]H-ۥoxtcZ˟X|țGGV ߷K/77`0Tilf R0ea)SR2F!d!V먒p555R>WF J2T<ZIwlV^5m*F!Y_*U/tP47ZZKp5^Pȫ[ⲉCYM-^$p M%L [>|ֈÒ $>>1kDDD\6:^ʏK%f{'7+q .7 ܴ-jdECݔ/t*nj1~gEvk}#B\1#4hqގ=)9^ċi6-{j4o%{'͘;mV>d{ TC`),Ro!/WugPE/SU薨Rl}K)\ wUO}-J,ed}FRrx"ajDLVO 7 핇ў$@$@$2tZƭ{MaᵩE垀- D,"  XK ]:wwȘ-X.lF%@ ޕ˸~: Q2 h徬՗ȼV[jdd{HrD%\"oC:: ɖ d"\<$sv2O 4T3Mi+D/CDl}ʠVx}m"ѾayI$q h 珸[^y#:qIQIE6aI;[N/–ť4Qa(DҐ!TAբDʁ/3 3R^[@rLR?}m9E\$ktip$ hIHG믯XK.SN:th;Y饗v9;;{Ϟ=p⋳: !3O$@vhjK*GԂNI۷*GmDB,T %2j,oV5PJ1F V? ՞6XT\^T54')Gbҳ0-pd625& VUVUɾy*>Jd!8 .(Q : 'QMa9m=Da8q:u4,%2pPz@$@A@r#ge#&k,S]`IS}U^ǬdօD Dh96 Y/PF NRIh tÈS !<ԞRcVY̨FC>x양Rj)O_¥A%.Sdt0R%uhi%Ct%QX׭[Be7ܘ$@m@`͚5nӧ FlCh9@R{,Gs*3k@>`ӣާn!UWW(< 5$RZ-"RXukkH|H c9}6!kԛL!qpvC&Ӳz"`cǎx08''a Qؔy^yMi6$@mC@zm3\;@;Yv:ք^@=@5K}-ecU IvD ʑG='~,f &%d!aZeT"|T]eUw9ȉ^1DCd_;.ݳ.00bh;jKJ,ZBb t0/M<=۷{p ?cԻw令!Cmن~6ujgd^tvvm!q.0fK=OY+/e-L"dF6hЖ)HmsAܐ=+\ZG% 2 +!b~gvŌ/=Q97gj 8@Wȑp_d/Y)0z4=U(0=KZO`޽_)j06?^|FF0a5<.b .{2d9.ֹF ӡz-XSZTd ā!k^)A(a~[m6:{EhYœ@|Թ_Cj>Ct_$"p˜ UvаanHOzjHETv8rUr?%hT98@6}Rch$)MKFY6,T[`m#OkfO&h.s̟YիssĂY1edǖ~6?;]I 7`j#+:JtGP@A0r*Ԋ_Bz!,iB67P@ď7~h0Rj̦'R!ʉ.q ᗈ+^7H-e6J]?IУK<|dB$@1 |W`,$ G`x޳wh<|9A5!;˰ߦN ;j3t!f=q@hΐ"z<9q˄2H䡼kGoMie\\>f36?ˆ,ύǿJKKq:=te9Ey󼦩3`EE< @(|A>2c-u 8P:`-*C/eqnb£|3//IHHQtE$`z ;ڪ֫(k5ӻV΀^Kbp*"&/23eg_ϳַo_A< #G T~]o`w'<[mGܵsÓY3g6x|wT־a)G%($]DFl2M_kA FaXSEXŒ =}9={ǰOpB!z{+wTJՃOXH8 I' P^jRaKKiuVB8UZk^sz ^U흼hHs\OP1' YF8ZQ  M&/7zư|{ݲ^ʂfv ]yYݢ2cT0_jҪyUl}ͤjU*i4ku@c9R@  4d4=h)|ĶF:!xy!rR돖])[jpF(tjF&]|@lJwZk˽7W=۫.As7aZPsHLY-6ӿ;}з[U-F [ɵtZ3 J~gG=^\?("h?W-Ngf|n`to;;;;ˆޒ־'m%' M;֞飴3 OB%[H3 1`=kvƇ?{U %K7-Oh/גB̾jD~UX(FW^d_~A2i7%&̗{gWw?v{z}j?켊!AАeϐy@#DKG ^Y#&CCV뜇SL]]úB;TtkSW,߇Tws>_#Ϙ挧kzT 3,qpԧh>v'޽d塜tuSo~p%ós9wtv QNhN([hΤk_"#n݋DLdeEd]-|fdeRiغd#D]bi]Hn/_2]= K˒>E o# svSy9{vZ\wy 8K)/Q](#kC"A&4O\ϼ \~%S'~ n2Uav&[);/^0zuNO1ᵿaY5&qZSQnHfӖL[~Y#'N<Z3$phBx~!T_ßROy57,(X%I;:geӶ+ŶafŸ4ׁΙk)}|F ##KYϻv >wYHځ?XUa&J;365 Gobܘag|{^;* h Ӭ{Gy3z 1zܴ#`#ٝi2-+n?R#ؼvqR_8iP"ЀӭS%@Q|`kj0ʞ'|HEWE?nm,8m1zh'2@bk1kk sMÃ;(2C]#&פݬ7rNJ;j]Zg=z4eMg+ *έC5] Q &@hؔئګEεeEjVWQX#.Mk kix^)];ZKѕ7}~}ck7n4fv읇䉍gh xtݴeE4Lh=B1mF =֐? RvI ܕ2=tRv"#-7Oόk{E`Qg̡Ǭ~oݽ٤.)s_VO k2MO\GnME⬲*Xp)fֿ## J!`"&( kmr7KlY~ܕ"Ƣ=:ڙnp(-k5U9 Oܹh%\0~ aOV?c7v|…O >P57hhtSX4Ŕ(DcTbS\ #(Į G Wd d׃@,D{U2t^,f^ETq8r)v`e=[^ j<E;x:TUWUQ.w!Ah U[\!'溹$Gl~xmN_!{tL#d~@=;uq9.(,Z:mD^8&(:q]#m³S<']ٝteoGb컅'Ģ_>kF 5vDd}Tr}-R"0h/E}C!79a_FHUZUsI?f)`}?d@IDAT2M oZ,N1!g:ZVgx*LEhD1 8Sz—vNٱ~qn X<3uT/ +:s_  YC`@i+[ZP?G)VKn)(pL"Vo⩲v3Bh@h=y飺i@Ua.YٶZ#CC\ą*^RM?kkS=ѩ[.hb,I&熜Yt:4ajz'~ө}kj7d4Xjh\g~Ea$}D7c&R;"=̡S^4uV:nSa16g,oޓqlX9MC~d荆ĥo[xjH P{;w[[:~&e=?{m!n `bekj{񭄠~ˌSDJ(%>~ݢP׶,nG%YcǎiӦWrj^{mYYYzzzϥ?>`'q3 '}FYê]E뢆\J!G/P8Cj&rR_t:3Οxia#s:. Iyy>?1$k#(ĸᗂ4AO[RWϟ?޼yxsFFƿ/҃1TTW{5-7LqA0ܥXMGVvfNEIQ't0 +(-z=+;M +G=֭;iH2$Pd625pY.(?Ua=[;a q SאڤY&Qw_9-l|*5#@SjoֺAP;G#{s$4\[1 d`2ce7"de-i?4YhU vܜl;" 2a {W1*l6r·j7ѕd}3*@HD!=Ajصsh/ 5efJK͵@2ad ( +@fHHH HEH 6eƮUڂ.DgI}^ Gw([EwTe-3p8#OV]^ <%~_wT7(|&>%cN$@$@$$QshGd~Vt/-25B< ,{ٴ1TIHH 6:HPE`dK9dq{-^ X{O1mԬ&   hHڈ A Α|᱗xLo6DX> X{NWji=Rfxq]Sh/OՀ  Hbtxq95H$RW:,r& _WuLaj7: heᄌIk.G 0~ /tzs$*ERll3`f}jԟHHچQHD@s/"nj_m\JQ]Q ji7n {1O$@$@IL@/.FG@0=VZh,! h'(X&     vB@;YhNHHHH4 HPv& hI?vIH`P]{ΜHHHHv2 GeØN'9!8yZUUՙW !:m;CyZ)F4K-V.UnCy<_u,jjjVJ& Cf" uik(^?PU" 8}>]rFb"ʅ(Æ o @`7()Z=0++bN @4-vk*:C-:ZB@F%'NhV4ܘ$@$@IC@"/ zzi>E[̼9)SRzuj Oj=3&3ONJ "#-%3 &   0:[f(9|r[W݂bʔ~'!MIHHH%j&]wҌ&i2cF=$@$@$@$@EᵩE垀-a0$@$@$@$$ҝRܕ˸S8#   hhHHHHH @h|vf+&Qk@ɦVy3#}WM*(\ߺwjV![^GqS'8y {;˄c蘉J'hyÝ"}+'#%o}waOK&OfMnN:B^=# D&;z~xSg.X({̩Oo)jE+~Dw4j؇ĒKW'7̩͐ $gRK P) \RZ`-lhV#ڰV҂O>M.<'(4mi_uitZ\wC&5+<g%_bIW"g'7-/!CĶmUvyW3~Q;;{!ybAĒ=U_o}?}V$@$@߷K+A_>&X-oO&&8lLiNYݚ|u*6`)2ƢUkֽ G'ڢ҂Z@LDfKݥ 'kjF]֨M\ӌʛz @$YcrcQo^y=s4.QRՓg.3PZQkc7icze'7͒ߴEςҢB8и!r"V/XNAIQ}nը2t$7hh $S(jAGJ(%>S @!>/ UOYcǎiӦ* 4giiȌ忝(gB޹X>~yRW߹yk =/N19q7q5W}O^iV̽1-pQ8ocysY_[X#.Q;7|mZ׾HoکI2G$@!nݺ;bf|F$ՊTɌ6=>dȄ˺7f|ʼS6KrO@tkMI*J=šmw'.)qL)_9).XYr]諊jO/0v6B$7ؠ @;$4No+;vs0={6 z}@HTX{eG9ɓ Ng^n+ι`xi"Ѥ(z-}?9pW_t}y ̥deou>?cǎ￿O>MW@Tww)vMn5;y9; Y( p- ̇B6m8pVN$@$@$@$D!ؿ/N,oqi R+X~=ds}聰 |{ӚNιnP 9~kVe:sUwWvdJfڿɃ'7~=t_[I1Wwr|y+vmp|Sя~sΌ7~ qaֺ/Ə#71ѡcU.ao ZN+ r9k }}9o|R콏kjHHHB ppdrT.(Op>@(˿z/m6)6+<|@0vZٹ/=wŐ\22/=-Gѵm3^Vl(8+)}꽏/ӷSfD/p{}>z_uR'ZzGӦM;oq5cP{z?݋yLnݺh`}tJ>B\~?_ jU"P`п97=SRv}CHHHK iGs%|_ݜE,)5U怯A)Ӟs{CNWJYRN;x}JZ; 9Ynu>_pҙ%Bo<2(M{qɪvbhe\dco tT$#=/]!$@y2植V V t)0{=z2?/vQcws1unYdĈpX,1cHPU^R_4[mfaq£%_C&x!ꚙn1 #!av TC0C$@$@$@"~<ɧKa.kM23m.Wy{=ld|[O?@raʽ;? LuZOuUnW+f3xaڬ]6|nwq>$.sZ^/l(l{ .^Hqݦђ=vTAbɌ >9N.~cvtV x|{̜oΌхrĉwJkD[CS|>y[nرcѢTU>`yۃpH~|ٶO4&Gő]|9&3nBKLã`HHHE:'y!/㾎Å+=x >eOe0Py7r])ΔԌtbھka@pwi&z8HXmY]}w߹}&RU^ձ!Pr&BVEhU_^?Ri}5յSGX>faȪk~NWqꣁ"xEY/+]_֥Opu1 `S!G^lkϲYlV Բ>9;՞jmAhQF 6Qup|#>s_~~e eHHHZF:vZ}Y.CAAzN=zL~d?='8xקa'ڞCCZ-JHU!AT-7tvGKi&N.#2VJ`m E$@$@$@#АQΤh[Җ~o`pǎQ]]rrr7Ϲ *3=|({ DV'-O~$x="EG>B5w>Sl;1GQD0v'4MS܎gK2_ߔ9K8:U6}Vzszʪ,v8΅k:禗(ܼ^vq75[)5Z,я"Kl|'O<Ž>وC4mڥK6w7p{fphQR w}CŒ;w` 8Kמ P^rPjDfHHHH@#󲲲 xtz<Ν{U?{97cTw\ї>qp(o l;W]UӭlQaj'h"9L]?[vjB:-9R}*w-_|R9W։{|޺l>pEs(%   H~@L'w!M kHHHHЃ7޾>KJJ׭פ)!o9;/c̺etmTϋ՗YLDZ}jg ;vt:^xZOEn?v>:Zb12&sQޟY<2u{tL߸/<<~RP;9ŭrR/;-#λ^.p X?f?v4d4X o_Rn3rjfΟr7X4<܋ -XT ]'|8y軺YBXx.s~/85izw$   $L|;Bq' 't[Cĩ-Ӏդgˎأ[0G(iS~£#c5謰 7_x'İ|pgt ЗG/7;o/i`Jgʪ -nϽķC|1x)n/\)W^90:"gx8?؆-Un̄K ݀v;[}FU\rI'WOߒjQw[;\zߤh{>?fF Q}ـHHH&@D8 oI")na61rVM&bշpB,_SK!vPO^=3\wnQ^8t_zxf$3" 88%X-ENs|tbNn[ÂeR0caF<⦰`XnXfɢ-MEtUNfΜ믗 ڮ=z}G^x(vrbx5-޷4F ?vA“¿ramu_EB{5NWHHHZO im>Wpq 5PSL`oV&fAi{Ər94v?iÇ-MH1GA(TR`=OZNi4o&(&N10;"|O>ѷGΩM oH+<;|`'xC":處hp)޲.5S1?^/^``-XK{(ԣ>,'   H~h*W W>q/@,2oD9ߓDǃWb\`2֟koZGq-oks{pnݣߦiu GgkVc^؏z}xIl}t!*.,\`GVlDE@&l4T{w)'^ҬlD*Hz5v5x~EM=i'<0PtXdҕ1K$@$@$@$ÜDe#~wl @hQ'Tsi΄LiS̃<{[dgW.GcOISF {lx%z! .h3:QsR;~}9 [Rf?V^i}n_X8U{8'{,Ax%㥿P[Wju .Dx`"o͠xA;(pG{.8xU5/ 4@;Yox%2[;&q&n p[o'A7 .oz֛۷[Kq h.!Q }YYezO̟t lc(,(i|/‡]pxyߥtϰup’k#`F~b3{퓅6#D:|0<oE9wXrv}`rk_3Sj m,0dc/_FF5g 4@f6|S/pjpk@k[lfM乞&˿˰['\>6MҌ_ی{VM <^Q:watѦNT32߉j1eX|@Ұa;"0Wn?tVtCb/J%N|} ovQ/=HHHHfWTCzD·rssk.Q̿kz@Yj~]GSR l ТK>~qJ '4ƍW+ K*+ߞ|2ڮx ׇORw^>ߵ=f]vdu_­)X?ڱBGKWK;>FVKԢ^/Wv0uX1TWHHHF ͩ #"J pi, &>=;@-D_{f/[oVQ"4z^{94 $XFDIڈ¶`@6FI^FЉl"jpՌ(M̐XA @sp)Hĥ*oL[;r$Ql#2QEр"HHH"̸ha!l;@NOoGL8ZJ$Z3J.9JpbVXL,,$  08,lvQ+5F9F/iXQIAp_cK.mXx\j9Js1Xs= %0cj7Ve>fQe bX2e&S]"Od8]<:igp Jj\TT4mڴOIHHHH q\bԧjUN0QO4*P@SA驩'7]b+[7 GA%--M!    0 a7jV_6+oF磈@tcU+3(eD/ 3E9d^ʌ.oJW}m?-TFszRŠjDg02f^'7lUMlf$@$@$@$@mF@u2>i Ih ,fU]"Uх]؂4To=91IM̨ʣ;    #:QLcB@^rP$\-եʨ.DiV߲53Hu17 z(KUDf + ryԐ> [Ñ}I;r.?9Uscڒcɹj.F 7`2yԁ:P@gp C G4|ײWf~{d$.G?L|ċ3 k!I :/`ԁ:P@usُkg#"7 n`|!>u4I/k\~|~ ïg'Qʧn+ |W/S@uԁ:wp~?Z=vγO?<fw~<8|LR@0f*/xIw$ uԁ:P@8r 9+cՏw9(\*o'0_H=?L&< XGwUr?N%:OΫׁ:P@uC8q{bRW[󐜂8iz) NM|Iy03  O~nG-&?i uԁ:P@q`ّoD%đ}4wP<OCҧ?[ sN> iUx zo*$sђHlt#_ؓzY@uԁ:wpZ[fJ KR5]C%dN'.YOr}E|hDS*$˙ .Қ[ϔ9#E4/8Ot qJX4ց:P@ug=D @c ø5H&f3>~k IDATxq C*C-Z]2OƽAD2O4ܔ|<(kuԁ:P@8.q0Ke@k)LD cI{.c &lb[FƯ s7qGI.F;+H uԁ:P@8^I0S=2J\IJ)ϯW=01:ߓ4 %'$,I&s)TwLq'Mm8icuԁ:Py`2dC qjFT2`-_e^ C*R@ F]D܇!+83}J9Yxύ U@uԁ:p62y1S\H CgV3R]aNm< ;, ó j| $ F/&L$oYց:P@ufySbU1" & Y4>{gVbKig]g~\/0=V, _ o$=hd[0c ԁ:P@u'EUH$5,JcniK:C-{?lƩ D pa:g?#wC?[${1tluԁ:P@8vgN9EdQ=4} CBVˏ8[PIQڍB` `_e&s#8nI @uԁ:Ps`3B tt7RHjUN°x:j7Y`Ǘ<r>l%S `ؽK?7E>2B)]ĉW==)uԁ:P@0J Ę4xh$ 40OF,Hg}7@/d{!|-": &*;'L@uԁ:Pӝ .TI XRx[n E\UGWKg>3 5t1*At Y&>M#Xuԁ:P@gpқĉW80[ZxFMWlLk4^qQҳ=a։Tg^2)%Q D}H:Dɲ2,eI @uԁ:P〃bcq lF/& dmD(x$EUA92A_Dp*C-`t^Fe0I.d7؟uԁ:P@rn^Ȕ@4LRL!&d@z?yᏰ>~ sbsFy=hpyAH!c=_2XnYHSd*`X@uԁ:p2Xp711Irb#դQXD;\wYK6z$ҍ\q~%?- VI}` %d`OG}d+)T0Lԁ:P@up[$0^a` @ `T xH΍Qx`ހ{;(gc3=|@gS-b Louԁ:P@8&It@C|SJĀKe6Y%ͲJ`)i@|_;U{?L^=D0Lnr0ӈϨU@uԁ:9321RqM|>^kt Xz,Vyz=NչL"S{td25-)`!KX@uԁ:p6U`Ibv?N(Dq@N,eTY~qefGƮh8%`N'@0Y K@X@uԁ:p~x)^b`F>sΟ2wFMVxƔw2pu׊,-~y +,I}̹_ {kLԁ:P@u8Uf 2C*ePr`.{K⅏`ʖ]Kа칛:1+;!'h('QRYJ'X@uԁ:8Y0ɀM.HTr x\?/p'l/7gnK4؅7|NvݻĤTԁ:P@u d2I`0YFd?(@,c=K%n{sdL&L{:`B*ȖtR4uԁ:P@gp ôTIev0%?# H۝<%`J~enDe9S 4s׼I7ց:P@u[8sΨF&$)Y%.cN^6/H02IENDB`astrodendro-0.2.0+dfsg1.orig/docs/diagrams/0000755000175000017500000000000012773161345020054 5ustar noahfxnoahfxastrodendro-0.2.0+dfsg1.orig/docs/diagrams/dendrograms.svg0000644000175000017500000032032312236402074023074 0ustar noahfxnoahfx image/svg+xml trunk branch leaf 2 leaf 1 leaf 3 branch leaf 1 leaf 2 leaf 3 trunk branch leaf 2 leaf 3 trunk astrodendro-0.2.0+dfsg1.orig/docs/diagrams/README.md0000644000175000017500000000021612164331161021317 0ustar noahfxnoahfxThe diagrams in this directory were created with InkScape, which can be freely downloaded from [http://inkscape.org/](http://inkscape.org/). astrodendro-0.2.0+dfsg1.orig/docs/schematic_structure_2.png0000644000175000017500000010324612224573643023301 0ustar noahfxnoahfxPNG  IHDRJUsBIT|d pHYs B(xtEXtSoftwarewww.inkscape.org< IDATxw\׹{/{-#g4gjhXf,v6o܊lQą ?ɜAq}sau xa@||mzr|m tLQu 4![B-$ې>.kR(PsI/cF]xEQփ&dB$F l q9:ث=ܔު@_o- V*J$|T̗J$|[D(X(X$Alc6"tz=J % %J% \b S\ȕ*F.W0 %J% F,7 0q0cEQMf2 `]}?˄ B!8ؼ߄VCiE*PR^JU\\j(  @vǹϗ1[(4!wB=Q`8DhK<_ CH?<\ 0 z6YRab~rIv2Mkhsy= q*;NLEZ)]㮗&A80ެREM7@ #1S'6-[4?}8W(5 e'PɳWWkĕ Ô=X4!_"px_-ҢKɳ8v9 AQպuB&< `-w7}2/AFuo 8lx(TѴi690 SMEYn !a|ɌF#fú4ťmnfpl>FpSԝ[&dBbtwU];Z9MYD'`DUґcBVv{UX\=ӽuV į}&"k6(Btb `LfC2ZמKQԿtܲi+HHh':,-ENLÆCiljVk[] lr@ST-2!  wDaQThZNDtb &K+NmʶDIQTgܲGg<.!:1{ r\NdFME&dB`S!Rظ gO:,2 J#8lo.Tsa uD;~BuXřs/!:);+O9/1L679a5'ARuCV !.˗=hS尚LT"Vݧna:}(r.]vb'伛a\"(*2!=|e)~s:,:u w}>YJF`h; c8PT7b  Ԝ]ڹ89rEY=Z4lHTU 69'ѣ$)YtB&DM>C$lILnQT38r$vDW۶Y!nU۴! EuMȄ`O=lߋl=Np6'&}@_h&=d\) Os$8pqMŽں)dM1|gNIB& د9uol'ΜǞ$?p1rۑ U{6#)&BZ\%?,PM-)j{b;&јyg2Vy;r0iBNgLy GX]bSe]eNL$`RIѴN+AKr&J8&dB !dߒiw1۵ ^J7Y`䚆FA֬oɌfZ5|D̗JBD"HDV"qr'.NNpuv#\@VCґc] 5um2 M>fKȄ(Gدs%V>,׵F& sqEչ||m~a1NT9JBP+bVwp%"ߨyZy:3:xjHIUZT3iz{$D Du.Nz7'+|<6ޞR/7;wWg{Wg'D,7DQ]a8seKUB^AzFs17QRԭ3KB&8 d߾ZG+ڨGZI除܋#5>v}=yC%Qށ.>@6hP52IlP+FJ0mRjBuz[I"+m'Gޞ]anjbPp(ao!I2;A;u,BL0n`^}mD.c'j6m17J-p9?<ܯ񾑑CƒVQ߬6T*R^Q߬hk9SӤ$*aJk:Ę iEBaD"V9j\un.&/wWxy=%>^N^n.^nB_oOCF[%k#:1{bp 1٨T1 &J7s$Mrsqd'{yu,0H>Yɷ?W&fIQհbΈ?ՊaQp>9^W^4RZy<ζUe {;:xсo <9ymG`ם>۔uYB&@ ̂YS"A {0)՗O}#"k^;*O'uw2FSX-ɯ],S/W5mGnbԇ6AvQ=CtzPR^q'&t8=ƶSpeKU&u뒄Le~~#L&oUjRMӇ,Ys\FVo06W64+. *jMEE7xKWsTx e?*#<4H >$vGrJŞ$OH6ʶ?J\YwNdFMTwU y#"BIm dSꃍb1 Ӭaj?recUʌ2EV~)Y ..aD$}"z*zRXvKUYeuug%B`;Wr%tzB& p!+v;TD>0L?Osw4,ޗ븨e9qLФP89*Di':C^:dÞ$:`<}"&؃06q'e:5!lqgsˌx Oq: ?0=<qQƳERKj>F# Ō:qp(>a UWYe5v$baPqF׷=߹lq%e:;! @?bM=7ԿC54IjT\(ɏ=_z7{kF_/껆 P̺gQ<]]jZ#{5m 2zf<7QR֢2!$ԍ(y2fNy^Kp2zC6iՊ;cJ/;u_٪s. MT9M77<4rGlLVsp 13Nb\>0()K) oKn1Um4vFN:&1163suY*Y(3f&9xn]sS?Q,oT=uL{mS𕇛RAQw89(r|̜*6 o?7c5w1,rރDU<`ü{'8s"uL&: y\=3 c0: !`n3&댸8W?+3q!ũfU1Y9?ǟ6p͛>GEPyU5S4Ji[&mUDI[g$hSϘbFS5N\XaEy6l{qE]h2; EŲP@8~԰Gsꄻ\huH>Ɏ.M&2z>E;u_JȄ~ Ɗ<ܬR{k_Vp]~yq(>ǻ(sLNid~I3z%΋Kʻ\ )NLALFo0;z(Lqm:50s1LXܪ=1 wFEXűu-rjs_ͰlTEN;1o_J$ŁHL6UԵ(0NM1`מJu$O2bp8vnX0iu? q:&, r[SI:ec#/ug E x\:ɓn^*G3{8 I)Ka%9HbFa(ބ!'ߺ:WMS*O[h!T 7/)U Q14*&F/Nᇑ@'7@?}GS}︫As4o|֋v ~%啈=CG4Bj+ 4-< !.`GtE\]bs m \s=ye>?3BimVoJv&C [' АB9|!ۥiCwbU-tbYϬx͊Wg'ů08v*1Rq !E\aZfړ# [7 n r9YK/#rR_^{R2ѨsD>]pK˕P'w A.Oj#U(lzݕ{,3g﬊tvr+H )9tt !E_[Ī3-m%dBѱ=ci|iyK=6ӆ :Vj^~gzֆiN*N0YF'#t Of-2dXᅽ4k|͂1Asy+|;/bYϾ;;s7t%NڴSvqvZ1xh/V3ZR^q3{Ku<[^WK'{2/i.Z͕lM& UFMhס߅ym+ȯlּu @̡#=I n{(-" !`G·w#te\FT!r쌺\^tPjTxŴ %c0K m:Swyj(39qԌoRm|{yߤJ%a_aMBjOV]a]v>1.}ߟVd20zCU]Syq:26MX[b u75 |qœ)Hϖ <>\AYS=s>ڻoTo\>;ĕ#̮ vWU=[&&2!5~fL=OVe|Bb{ w@uX )G/::1i5bӃ=H\n^_>Yۭ7U ?l'An?.^,rxoSaq/br='\&4s~n1u]_]&2ȳ/ؙLr(F20Zn7MȄ ѱGa戫CWM~`Oz{qCbٔ732h( yWp}`DUḄQ֍|3MCe`^⋂YG`@b e7J `s40Din%!/wxhb~/h0aC=:i.bذ3_ ac 1Ǟ"um|Ü\CYտ%dG7_~YIgz@d2ة۶7F]XZ~LFE扪^3={.]Y F`3y {;:V'SIeh1̟x(˖]\spnn"!JWiE6sñg Fcka a(wÄrDWIYz’2D,:)M^mngHK:'f 7l|l =!ސdCmG'2 '$u[CLGZi; 4s%7n={O0=L~jYjx˪(;uѸV?wWF1h۪QNY.T6Npr:$ JIOhJ=~d2hD9gF]s`_YU;HHf<{w_A IDAT^B3q `AS7wak =G?0*ecF<3 ;%b:Rn]} ;㗭U'Hw&a9 ]7!BBK6 K24A+jkb z FYa-9;[Mރde]G{`DIm:|IBIVKGE r#gOnac_EVֽ)uk1qa׸QB^ 4Geq_{rf;?NpOC?P9qDuFFB&Aҙo?}SyyQlZo)dN6 Er5^bsil@±}B+ʃˆ5]E7{=t¹:$y|/u2M~f:Սr0k6jjk<0\|ړ$τE'gOQp?Z7m?rLu楊<*Fxdi8<b͕4fT#'#U0+xw~bގj";~X璹3.edM?lQWԵ}W-a) !CssqVM'sf,(7S'.U(FQ;QxJlZ`qvYΖ[Vy؂ؓ~"s> ; B;N֡bqTW .IC$nr8z;|4ӝpnaLJg?NLYk;Zs^B+|+4G:L_=9lK7ln~ȫN4FWI&|N_nzꋥ5.c5. wq^@U{Ŝ5=twxwY{߱jAxA\Bu?˰׿ۦ+/H%>0ûmIȄrwfo[} ^+9Hүج/}lk2MARTDOkY/G FlI:S$]BY?.iDdH<\>}*߈`4/PGk}78jE%?6ζS Uu/8qGet3v>8ČA9iz(FE/+mqf0}_a4\x?p x. Ǐ}P>OPUOd_wuvd0 X EvN^kj%/-Z'ۘ9b0ݯ[6<69\|}KBԤ1 a(tK]ʢoՑ %>9>?|l63|v<h_^_|9& .m>!3&]v[7cJPLYO[q<Əjѝ=,1D 8a8[|?ғBcjB?϶K9/;'iwRb0ZXk`:1qdȞ1a0;+B!r+!Bx<8 ֬]EV}ROSez뚖t9\r#p#Y:}{`1plgx[9RMsɠێ*c, @Y1}8 'b1BW'zl[Or*;T^Y%}xBm9ڑ~rSu+51EPcJ^dnƠjq*>]\_]Ʌ;&BHZ|';v@g,ї?VsugاmF|^`=:v{B6KHW'0yH>p|'_qޜ]v[̋~X" ^[eFlwn:nJ`w 5zis̱=y}+hS=sN l`;!$mGHCη43ˉM[*_i-ZnKr ErSOk +xB]urg'GewW]vF ,ڒa+Ue7B{|&Զ-[11@B9i`y:d*b#Mױ[ck86M30Reuq>Vw/r+: %vRiKu` |NR[}@Xp vrY ϩ8X28G@7k?ћL,- X|@#Á-:U6Tvh;UP7Ӭew劊ƽS0P-1`U!^]V,Vy\-uxXJQ0,[`4.AY0LSg]5!@T;{8Md+ pqg q{xCnm;wtSfv7(aoK21oyءXnO {縜rm ;#N<}SǏrql|tzK,B޴Oj) !c]8!hS|펮1'g,sFDЈv s-Sot%5frbi{39_G  xJuߦ7[yL'YfkN5AD@̶Eѩ'bxkS- ,ܐH@ZFe}OwW5a`t߿F!fk~u[ #eM}<{qK'pvB`pvz^v?rlRpQ`z |%YwRvVf\C5{`&lP8;a7EPesT֕D_=VpP@tz]EQ|<=W4?v9d "V$sZ|FӳQz37``W!6 W bZvrVcB.WMNzذxu _n#}sye.q.:&}t_0ஏk2}2$M @\pp]GPxM=̽C8?FB>!^o@Ne\\Te2$zA/?$Џ#f/z=qs1tG! üBK6zWg'\C/,alme8ߓ^?lY.D]Rc9͕}m=_|+ aG0V1oYvdHx׻U%b`I03^L؟Ip-2k?sT̽C:6Bi6;sR5q ^ drgMwwItFI+#UTZ'wnPZ@׹4L;qԐ\[mĠy11널 ans 2:PwHd)Ul5kxTjڒJ'nb(p/٧XnR6 NNeHvvFD|^+IİןNCO5aLb/3-Kg0ρYyBnOGEc4bV0X$AT6*]T-?[V}$+]JuԶiP:M=7*h|[3&+/!Ic~dr"֜x`^9`%߉>8zvntG!=ʱ݌ [y )으@Vdj.H4x `s6Fx^.WeSc}Zo lޡ7>F6٣2o)`%څ]C*۵uoL3˳c~dtY4''[q;Ƈh< JoxD5?0k'q 2>{Io0ddH{.lj~[#GO2vʢ'j,^ -or3y<GV7rwG' \\¥g̢}Rh +zaz濇}$6)p~小wOkŷJtc*t*P>Nߎ0GHdJGEwWWUSiK4bBSwGi~-d;[)1d~5k?zsy{ZlgWVĬ|g=|N0 yl>^*ޚwE0cDѬXԩ ;[f hKmJr(Gn~߂ *ĮvNfLJjMB,zP):v\c! |~PVߎ){7o{=mVQj[DO sxqك"/9pVB"BIu,׳qٔ{f O,8Y(tG' ȿ>.U 1J#VƖueC{Yϖɣ6}(p؇*O^ߤ@Ⱥa饮ك3}qve-gT}c%wvi!o,1'GҎYA/:[C&6 r`)/wVq=8Td!$Jn4'Y>8>0NeoH`q{aCOp?[UY607=dz #:-؂>~)oT4Wۤ ;}j+F1ss}V0(Nj+m32AIFln͛0ȫ->vQ~6e=o3Թ[вjfMokgoclV,ױPoMI.|zdT}q^gQ#Qwͨ^,ױX: * ϹecFYVP\j2L}y\õA=|&ds6J} K .MzvHt IDATBeu~}~,~TPӋYMH11Vr gTm o-Y׍|cAdz-Wfm@up{ hVi}F7 ]Z9u/;̚cؑ^wݽ] g-}[ |,_a5p,WF)'O+7r}u,֦觗B'שqBknTqp&ψ猈 :qs z~VSi·Q\q].Wո87JĖ]@jucW?zwߢ8x,M{Ffp:uZ͔$hYi#dG^)9e_:[a'{>f~t:NO%%k˶ s' ^\•j5kd-{Y@oùىE./~VrKW Ɛ~`w7gU&d7i`rJ,6%q|gO2na81UDŤ8!gy?~PN}^KʨVױplLV ؽ3.)ǎrGT5>}auʟuϸt^^`P5|{ctϖMw륧y'L <+j'%ȧ)5V LQ+^A{Sj"qgt7aMDL֙~nM~n8[T-F *'v$)$>{Z&R(k?m6*qUk+چ1u? zռx>8dEuo L[8cuhZu GG%r[^pضjo{-[?%5 }?Ƞ<ߏd/ʆW- ,EϬ^^bu<ւbooX浾o6Sֻϩߞ61UڳW_Ý#SqTN$8V!鮽 (N+Fzc>Lx8 iѭ(s|p w{=7}pBdvḰt[p}ıb08 {3mw@ǿLWi\t;l"5 # ~|ޫGtz,͉C wyԣtUˏȐ/o^.N^tPD1,䧝:e^J+}k:qˍzmU2j8_/XqE5ұvNNRӻc-J% {ꑄP(@߽zGy,Y_V\#+:(ܶj@7s'UI~N}t.7AP3(ߒ3˒4` Mm#G7>o{#gg pTg!'4nV_c;&! {*:ꨭZZQj[q@=dPPT@ x́;{{x[Xh:ߍ/]McfbJt֗jSGZG[{8~7^]ڗ^u,]@1d^݊l[WM3 _uE򂛻h:_S 2.pCꀭ;K \ z\dO{~κ;7WNA&W`CI'C1Zj:&u8[D뺥iSWzI[~4p_MwSڻ>kZn>{v]c.c!;J\k#zx_?:QA+J;s 7"Ң_fK >cWkSn6vfl6K#nS+d h:HKl?5عΎ;BDo Qĕ&.Z=v:!}i0k?dYG|<\5Kˇ_; !DT_jU~=]y~٢',s#=΀>a]~w3c 2y\wv]Op֖=+:!8&cۛD\j᪕:MMh/LH~i;,/ uE5IreLu9zUEW&.[ѽk,nkr=NA8.n`z1f YS'hţ9s庰0?_4!EgMǢ-:7qѹ8"WqԤA: )Ƙ l݆m;vM;QO49Fi;gxzg Fir%D=O#I<4OUDFe>Xjڷ ~N_jA!^NGSWue\m|uZ8wyZ!"+d=]ysA&.82wVyؕx HB[3L(}OG_P(Vr;q*x$RiNx~E];vo[/<'Dwp4=cpC-Nەbj(h{&]õ)BSf#uc\s׺fd\[O;횹B_ݸfdlb1n@.pX}~>&3ap2vk_'!j4xٿCB bGÜmX{3r zDKى[\a>x ]5IJX,Fz񏟿8o:y/cZKf h>O$29D);, B j<҅@"#Ydp0 Zy~;x\fmE& \8մ! =y1$cPcUS>~`9zivh C] ;7aQV'd߻}n{X4c8. `@Ϯг+7 f-Y͝RaӿжOx:tjb֩T "1Sr&,,-W "H*I2fq9l֤s&#p*w̯GnmܧCV}\qݻK% B>tK @ϭTDŤ"=_;3Cr@e2wzO\HģtXK7vz}w[3 j!O<%;?$,}==M[iU+d})^]ڣWfWn%3Y/$c6 Fvr\DDb&MakVE&gAÆY/0hbmźo @RVAoʾÕ^?M[O`ø{s#( AZf82$;W什(v0!2Y5lhlf @a}B`1 :95!WFIB_.wBcfj\?ޢ\B+?FqjF@Xz# ]ڵf_:b{6O2l DYcPEhfl8PԢ}hz+vǃݣB"EmmߧkAl./)ۧ#p(,ӵG,WyVH>Ldz?DԳv^~7M k& <8fsW)ѩߎAw##+WRR@ku]!!rGytˍc Y_!۱Bv)PTqqܽ,AU?r~ڡPX%dX5>_q(?\vf0FwiiC|aW>÷S;q1t}aw11XJuI+Wox5Ymsм}?}V&#~ls775Y3EiZD&d~kNe::P}*gGToj*fN]_|]Hu[ALz&O=c0 E}g¢1dA|֣%O-/!d66=]Ol@ $ul3Mb⋾rJ^צ'X^B"K8X/8Rq32 yB œ D$"6=?#= qQ,@(=_+pa,=`cjsbp/:fϳbRqy b`jG[Gti;x(ݚ!QIT/֮g iPϹ\(J69%P*TVr#'žkO`gfVhh >LKS8v0}`[X  ÌAmmUbU!k]!_P2 NB|<\Ch"6ok,=;¨{b ShiX Y2sݱ;8" >%2 \6-Q$"5W=?>Ԥ8qyx!,D!:5|.YEi,WHE$?`s95C@\o`|~w\Ī÷`a|,{'mkl<e[ұ-5Km ! ü_{*=A [9ލab\x0gh{vTrVuye.-!vpsr޽71gMx8&-c{M5FS/aFX"}Whd휉s`kf ۿ}sϯ}:9lL1u)d^dFvlscvb,}~K\Ö݀?O6LExa*<+{E E"}L$l  Jzo=yv_Ɔ o.]>OYո$ y羥SJJd"!\vwYugdnѴ^d 쮅p]m+v-|yO2NSC,e>X6+^bOHx} !X5G-+6]ti>W0 =0{H;q%< 0Yչ)| }g=ﳱU+i@Ug`Xg6wv(K(.] -JT?I-sԺ-LXߧkopOCp326%!8"UB7W:;}?lT),k%2}. E?r苗\琩[ijF5 +;8a2:QruX[㟵\,7bl=rxe{_z"M]i^-U$~нy2ix#Td.ʊI*} ;.=TFdrrZkg[3XT,}ZI+}xygE3˷ \~=WMh߄Vd0xمxz@k:|'@g+܎JAKw[3dL7ͧlesC] ]m7߇X*4ӭ֟KȂ2!$agbھuFLyKgeپ=|コ0ƞؚ>H üx:0{"#_evfhbF(pIB&2(:$+IȉG *,հLQnLK[?p-2s̭F = sÖ]2mW늅-/#lL б3a ]܋~ ]. [`ו׮n[AZʘqe8\x\`[3|֣%lL7fʦSnZ7:״iٌp̯?MYm銛acRV|.? -^[ݫ0Tip2>:P_B~S[p%QD\LtEƓvp;IxϜ?:U# ~TT!xWTdr6 0[7%U j wٸc?f 3sQXIc-7%1 II/kf9wlvnN9y{y|ԍC"k% E`͑[e0o%0K*9b}l]TJ6^q&;QlXmEb\ggآm<~F5:ŦH کOM|`kjb Ny˚"e"g磇UfN̾M\ o[v_gŒQ]d{:O;Qp0Ƶ*(–̰j~; ]S͋ک x:l\HĬ!pϕjŷr|0bXw,#!KE!Sꓙ_x?ӑ1+\7gUo1Xhu|9nVT^fvYk.{ѢExbc hhu-x6@ .NzvmgEiw9x:j+r8EDBq=/ ?'+t{e!RIP$%ѥ lLdC.e43G&u`lfp5BfAM 0{s m]NY|½b`HM\bV"I^NZ_0v`?hor&CY5t@3Wc`FaDaGI\T}K?idsqa IDATS/^cli|l7vmaTbCV.\o^]Iׁ ~ֳc~9t#lǭ8Y TQG^xS#=x6GID*qO_M f3{O{tU~Ӷ\ ^>x3qyQ>EUMlz^ӄu8c%MUs 5Y>[{I HLBr靀w^I  3S '7m)ӷr_n:|<-.4ߩ󾙬Ŧlմh܈9(hвw5K}uq|Pp޿WI"1 H$50 c%0X jBzC$cס+7n-NHyiaĞAƆv-صG춭]V)m<ͧO )ȬΟC94+ ݸ`fB'/>(2y :.[`ҷ]MSuU _sT蕦nv+%3zQ@&W䵞莐ᗏlIЫaHn}w皎ڥ kX@e9z߮(bߣS-|v3a1ѯvO,Ƭ7,三٨2]h:`ɁkMR x;o[!bf.{uٶj":)"*Z1F|h/EtxT- \pi:m".Aש @/{MSWW;sM2rL`CɨjBfYCf5,Ub%w}/+;תU>ѝt艗J  lˆ^ל;$L_{>K*1p[y!/wϚeB>A#!-kB2P(9촄#oՏ3x$ݿ7``eG -WL\{kkZ肪1.9O\'Яi2aǎpiBn.I}t~tW{osnXi.-kQ+d`sVf)aWttDW)'/_#9$Ot1=չI:ٛ둰it7j.Y;ԫC>A7An'd_qXB.=20 @mkbA5&UEd/6< vgGZ}ӿYצmJƪSuK=J X8Kַ/!%vMVϖA{!"]K{'u]dAkc$!x߄᭿aPj?2ȉ W?[payHdik?m#~]mh=rRxk֡r,uŋDy 5& EVW]3єQ_.{>eJ׿WBa}`Kh[LjFș/;ST&53OSWgJzCUIFV䅐g.߾ȬPXf`ӽӬ.WEӱU4o+a[/>3&|0~ |QܦH /ZԴ+=1udokx4ig߈0MȎ,+)JMR Ifv.B]}z3ًXB aR <$]vj`anS{?C9~mZ5ΝiNAO.AA4OM*(z8ag5쁽5QE"6j#:!PBa1{_~ +(S(K }/1}ÈHݔ kTjiKq8miodikBTJv֦w~VAk˦9G г+RQj0"]vs{h𮌖a D4qk?9~y m݊o`Ei$t L$Q=̹yV2Ӊu2hf[׉:YyؚۘA;iBӤ c=݋IwSw ;typ|3<\ /xZ1X\(fڍ]ܫ{g8jٹ{kѹ8;7O BW  [nTX)aDNأaQ1<~QHTdu9&B;S)5zٛۚXX٘qkib \! MK$rxq|Q@djb\Ԫsh p4L >q zXm7vMBvm OГ1l/Jour o^{(J 3)iI)y1 I؄$YBJ*R3u "SBiaD|nX_`a$w2 b0 fX X CX,`"\QU M*P$eBVj^P' Db$-k6p S c?l_ڨMYP,uk|6'vA1R 6=%)< !{*ۯZ  `.' |TũZǣFf'd'SRu^gefq3rxYy#(Ɇ uuvD&p6}6fGwXE&=Wa4# !i_uLdO/'aSE5`/_ Q酣l TԤc`:~ٖ&<|CJБrmm8!!`ܟXcSE5T}vȊa۸EiZB8h6 +~۽Q(9ePTd 쀪'`2utV{Iy,\X2Ƭ&(,(:irƱuө[? ذ/ >' %K0%#1 #s03PEqU@صu4UJ%<? ,kk=Zy9Y*E,ZV,KI>ф l0c'ytGREiĔTe>}Mʚ=-9~L$rO&,}ohXת;3fm= AQ1jԗ5~`^Z9JR {BRMbfLRm+Yl MQ!+'Ozڭ''/?ziA*sy\PG L""+'9EVNn9!Y9P H,a$Rrv%*[8YOWWfjl$03!֖\G;3<ݜ wGytX%EQۺ_LD)XB %$u&!0L;P.x ; htu=t:d29r_[ +(DFV2-3Ker 8"\"oY*^>yLoBH4.`F9TTe1l0 x|<8^%7ljǠjispnU"j I+7 T<>-+>}b[kb7' F02ԇڮ~J% d29dr9d2E59yQdfʳrrٹ$'//pD"TdUdV.*s m0*&iG =K WަFMXUS_8;R!;}vMSfЄqV(h:OJA1S# B١JHdɲ1X/:.Q/:.箾7R<.'Օ2P(J%W(X P(X-JFP #+BQZQWUU r^YKגVQ*%?!ʶ3 I@B!7q> Jt FFV ϧKEbT}B{\BH.% a{.P=v)0*Y J%X/V"Z>ɾ^-TtqΖ0%K+- 6puw tnA0@rrr"a`m'> c#Cbtl㏂BiپgfCO#C;Tٹ0׃ }hU:Lܼp`nJGP)1sM;8ՐN߲ % QKbbd[%T0KҁP51*[6.AڙFDeQ޵%Azrdr4ƣ1櫹w4^P(ql5?S \_6nRjǶom1*ec .1Ƕo@֭;!0قXVP !Fٚ!RHw+]Jc0 |<\X{vA6Z3jBNS? ~ `*>ݹz;aOqxzy#+'sGw[5c5ؿy_ޣ!7A#OٹyrRguX !QmKUJ,0  % [w@_ѿG]ѫK{k2jqPX464,UY9yrh{Ytur8kTs)q^g/ZE^vmj)=ObK.TŰ VwCi7A!!d!;B ,b9|ÿ v>']kP&vEڳsd\sP$R)2r^3Zl;h2#>6!y !I)BkلopW*1g._9a߲ $ G^VWe BX$^ ,SfǶoBDN@s,!'!$^1фLQD$LiHB$=a, "4s!vP~2UT{ alH߼ Q1/Nbj.GNaޜ)#Heʇ:P#ECx/MUBB>` `D;zG}]ADT#"u^ndʏ& [|;i,6G\ _U\u^~ްQ*ZtlhB:$9C U^ddV MDCCԥ_.4s!ay^7zH?ƐϾ㠱ȯ__hמ7S#c^e8$x !d:!HG2E#DBҒ6}|`[t!㾝AWjL]<ΈML‹m۴{324@к%.ݸ=O"ȿݲݥl_Nm*2`Nmo}cOlYa`ƕez© ]CU@O*:uQa #J2>%vXf``EUEXS|1{q~X~W|Nd\B2Eia<|`Kz?9>T'9Bj8* 0P%iPZ>tG1EG!KJ\΁=zkr2u Xɜ}| %wlKl ӧ[JKRT} +箃:iI- ! фLQ 0=>x*ΘޯX,ZI]?,/JzVPMU4!ST0 PvowW墙41Su߽G#NjzSCMĥhB(0 ``ma.]pwh;Nhogu dkЖqE2EQ0LG>X[@s? A5Q|?ݔwAij%Bi0:&ddO,`thNQ+P=/Z'i0:&dԆa}sӿG}5IPQ5ET;kAѱsu Pjm%j.&dԎaG+|1ד,q#Y\ GGKLB;,{d9EZ58JQh.&dj 0~l-.7_/ZUO E߉sd=F۔` 0L_4,ڰl~ BBn{ +ɹ%+&j ZQXdTEk֢NDs]E,9Y)smU>H ME*a|U!4t8}о=+4EPG8r|3ⴌ,r_ `;!䅆Bj4!S Ø `+03~$磇q zJ=EbO]?w x6g@5n_!JD0ЄLQF1 Çj tL^cP56ʼn Wiuer98 .Mµ&daX ttG N># 2:_9|Ry !̝U>F\ ME9%å>0yj߬qq#΢FL*!,)n}K7}**CTW'!隉*&d,at0@? ?ozޑۢq=P[F\*)[*^- $| YB#ކ&dꅒiA=_F>:2zv[ɩ!I/ݸ#ML/w P݆pt:>)w1 @/=߮I=\%͛64FcOԣrqIx1񈌎SK!94U-4!SU1 Ur%G^emi!mٸI#/4iWhvfv.Ɨ, x`_. Documentation ------------- .. toctree:: :maxdepth: 2 installing.rst algorithm.rst using.rst plotting.rst catalog.rst advanced.rst migration.rst Reporting issues and getting help --------------------------------- Please help us improve this package by reporting issues via `GitHub `_. You can also open an issue if you need help with using the package. Developers ---------- This package was developed by: * Thomas Robitaille * Chris Beaumont * Adam Ginsburg * Braden MacDonald * Erik Rosolowsky Acknowledgments --------------- Thanks to the following users for using early versions of this package and providing valuable feedback: * Katharine Johnston Citing astrodendro ------------------ If you make use of this package in a publication, please consider adding the following acknowledgment: *This research made use of astrodendro, a Python package to compute dendrograms of Astronomical data (http://www.dendrograms.org/)* If you make use of the analysis code (:doc:`catalog`) or read/write FITS files, please also consider adding an acknowledgment for Astropy (see ``_ for the latest recommended citation). Public API ---------- .. toctree:: :maxdepth: 1 api/astrodendro.dendrogram.Dendrogram api/astrodendro.dendrogram.periodic_neighbours api/astrodendro.structure.Structure api/astrodendro.plot.DendrogramPlotter api/astrodendro.analysis api/astrodendro.pruning astrodendro-0.2.0+dfsg1.orig/docs/rtd-pip-requirements0000644000175000017500000000003712224574351022304 0ustar noahfxnoahfxnumpy matplotlib astropy aplpy astrodendro-0.2.0+dfsg1.orig/setup.cfg0000644000175000017500000000007312773161345017156 0ustar noahfxnoahfx[egg_info] tag_build = tag_date = 0 tag_svn_revision = 0 astrodendro-0.2.0+dfsg1.orig/CHANGES0000644000175000017500000000175512773161226016336 0ustar noahfxnoahfx0.2.0 (2016-09-29) ------------------ - Make sure that calling structure_at with an array, list, or tuple all behave the same. [#98] - Added support for linked scatter plots and multiple selections. [#104, #105, #109, #136] - Added support for custom functions to define what a 'neighbor' is. [#108] - Fixed a bug that caused the interactive viewer when showing a dendrogram loaded from a file. [#106, #110] - Added a 'prune' method to prune dendrograms after computing them. [#111] - Added support for brightness temperatures in Kelvin. [#112] - Cache/memoize catalog statistics. [#115] - Make sure that periodic boundaries (e.g. longitude) are properly supported. [#121] - Added progress bar for catalog computation. [#127] - Better support for image WCS. [#126, #137] - Improve the performance of dendrogram loading. [#131] - Include dendrogram parameters in HDF5 files. [#142, #145] - Give HDUs names in FITS output. [#144] 0.1.0 (2013-11-09) ------------------ Initial release astrodendro-0.2.0+dfsg1.orig/MANIFEST.in0000644000175000017500000000026112237444654017074 0ustar noahfxnoahfxinclude LICENSE include CHANGES include runtests.py recursive-include astrodendro/tests *.npz recursive-include astrodendro/tests/benchmark_data *.fits recursive-include docs * astrodendro-0.2.0+dfsg1.orig/PKG-INFO0000644000175000017500000000106312773161345016432 0ustar noahfxnoahfxMetadata-Version: 1.1 Name: astrodendro Version: 0.2.0 Summary: Python package for computation of astronomical dendrograms Home-page: http://www.dendrograms.org Author: Thomas Robitaille, Chris Beaumont, Adam Ginsburg, Braden MacDonald, and Erik Rosolowsky Author-email: thomas.robitaille@gmail.com License: UNKNOWN Description: UNKNOWN Keywords: Scientific/Engineering Platform: UNKNOWN Classifier: Development Status :: 4 - Beta Classifier: Programming Language :: Python Classifier: License :: OSI Approved :: MIT License Requires: numpy Provides: astrodendro astrodendro-0.2.0+dfsg1.orig/astrodendro.egg-info/0000755000175000017500000000000012773161345021353 5ustar noahfxnoahfxastrodendro-0.2.0+dfsg1.orig/astrodendro.egg-info/top_level.txt0000644000175000017500000000001412773161345024100 0ustar noahfxnoahfxastrodendro astrodendro-0.2.0+dfsg1.orig/astrodendro.egg-info/dependency_links.txt0000644000175000017500000000000112773161345025421 0ustar noahfxnoahfx astrodendro-0.2.0+dfsg1.orig/astrodendro.egg-info/SOURCES.txt0000644000175000017500000000531312773161345023241 0ustar noahfxnoahfxCHANGES LICENSE MANIFEST.in runtests.py setup.py astrodendro/__init__.py astrodendro/analysis.py astrodendro/dendrogram.py astrodendro/flux.py astrodendro/plot.py astrodendro/progressbar.py astrodendro/pruning.py astrodendro/scatter.py astrodendro/six.py astrodendro/structure.py astrodendro/structure_collection.py astrodendro/viewer.py astrodendro.egg-info/PKG-INFO astrodendro.egg-info/SOURCES.txt astrodendro.egg-info/dependency_links.txt astrodendro.egg-info/top_level.txt astrodendro/io/__init__.py astrodendro/io/fits.py astrodendro/io/handler.py astrodendro/io/hdf5.py astrodendro/io/util.py astrodendro/tests/__init__.py astrodendro/tests/_testdata.py astrodendro/tests/benchmark.py astrodendro/tests/build_benchmark.py astrodendro/tests/sample-data-hl.npz astrodendro/tests/test_analysis.py astrodendro/tests/test_compute.py astrodendro/tests/test_flux.py astrodendro/tests/test_index.py astrodendro/tests/test_io.py astrodendro/tests/test_is_independent.py astrodendro/tests/test_pruning.py astrodendro/tests/test_recursion.py astrodendro/tests/test_structure.py astrodendro/tests/benchmark_data/2d.fits astrodendro/tests/benchmark_data/2d1.fits astrodendro/tests/benchmark_data/2d2.fits astrodendro/tests/benchmark_data/2d3.fits astrodendro/tests/benchmark_data/3d.fits astrodendro/tests/benchmark_data/3d1.fits astrodendro/tests/benchmark_data/3d2.fits astrodendro/tests/benchmark_data/3d3.fits docs/L1551_scuba_850mu.fits docs/Makefile docs/PerA_Extn2MASS_F_Gal.fits docs/advanced.rst docs/algorithm.rst docs/catalog.rst docs/conf.py docs/index.rst docs/installing.rst docs/migration.rst docs/plotting.rst docs/rtd-pip-requirements docs/scatter_screenshot.png docs/scatter_selected_viewer_screenshot.png docs/schematic_structure_1.png docs/schematic_structure_2.png docs/schematic_tree.png docs/using.rst docs/viewer_screenshot.png docs/wcsaxes_docs_screenshot.png docs/_templates/autosummary/base.rst docs/_templates/autosummary/class.rst docs/_templates/autosummary/module.rst docs/algorithm/large_delta_final.png docs/algorithm/large_delta_step1.png docs/algorithm/large_delta_step2.png docs/algorithm/min_value_final.png docs/algorithm/simple_final.png docs/algorithm/simple_step1.png docs/algorithm/simple_step2.png docs/algorithm/simple_step3.png docs/algorithm/simple_step4.png docs/algorithm/small_delta_final.png docs/algorithm/small_delta_step1.png docs/algorithm/small_delta_step2.png docs/algorithm/small_delta_step3.png docs/api/astrodendro.analysis.rst docs/api/astrodendro.dendrogram.Dendrogram.rst docs/api/astrodendro.dendrogram.periodic_neighbours.rst docs/api/astrodendro.plot.DendrogramPlotter.rst docs/api/astrodendro.pruning.rst docs/api/astrodendro.structure.Structure.rst docs/diagrams/README.md docs/diagrams/dendrograms.svgastrodendro-0.2.0+dfsg1.orig/astrodendro.egg-info/PKG-INFO0000644000175000017500000000106312773161345022450 0ustar noahfxnoahfxMetadata-Version: 1.1 Name: astrodendro Version: 0.2.0 Summary: Python package for computation of astronomical dendrograms Home-page: http://www.dendrograms.org Author: Thomas Robitaille, Chris Beaumont, Adam Ginsburg, Braden MacDonald, and Erik Rosolowsky Author-email: thomas.robitaille@gmail.com License: UNKNOWN Description: UNKNOWN Keywords: Scientific/Engineering Platform: UNKNOWN Classifier: Development Status :: 4 - Beta Classifier: Programming Language :: Python Classifier: License :: OSI Approved :: MIT License Requires: numpy Provides: astrodendro astrodendro-0.2.0+dfsg1.orig/LICENSE0000644000175000017500000000222412167745561016347 0ustar noahfxnoahfxComputing Astronomical Dendrograms Copyright (c) 2013 Thomas P. Robitaille, Chris Beaumont, Braden MacDonald, and Erik Rosolowsky Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.astrodendro-0.2.0+dfsg1.orig/runtests.py0000644000175000017500000055621712041576200017602 0ustar noahfxnoahfx#! /usr/bin/env python sources = """ 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 """ import sys import base64 import zlib import imp class DictImporter(object): def __init__(self, sources): self.sources = sources def find_module(self, fullname, path=None): if fullname in self.sources: return self if fullname + '.__init__' in self.sources: return self return None def load_module(self, fullname): # print "load_module:", fullname from types import ModuleType try: s = self.sources[fullname] is_pkg = False except KeyError: s = self.sources[fullname + '.__init__'] is_pkg = True co = compile(s, fullname, 'exec') module = sys.modules.setdefault(fullname, ModuleType(fullname)) module.__file__ = "%s/%s" % (__file__, fullname) module.__loader__ = self if is_pkg: module.__path__ = [fullname] do_exec(co, module.__dict__) return sys.modules[fullname] def get_source(self, name): res = self.sources.get(name) if res is None: res = self.sources.get(name + '.__init__') return res if __name__ == "__main__": if sys.version_info >= (3, 0): exec("def do_exec(co, loc): exec(co, loc)\n") import pickle sources = sources.encode("ascii") # ensure bytes sources = pickle.loads(zlib.decompress(base64.decodebytes(sources))) else: import cPickle as pickle exec("def do_exec(co, loc): exec co in loc\n") sources = pickle.loads(zlib.decompress(base64.decodestring(sources))) importer = DictImporter(sources) sys.meta_path.append(importer) entry = "import py; raise SystemExit(py.test.cmdline.main())" do_exec(entry, locals()) astrodendro-0.2.0+dfsg1.orig/astrodendro/0000755000175000017500000000000012773161345017661 5ustar noahfxnoahfxastrodendro-0.2.0+dfsg1.orig/astrodendro/structure.py0000644000175000017500000003711412773156651022305 0ustar noahfxnoahfx# Licensed under an MIT open source license - see LICENSE import numpy as np def cached_property(func): memo = {} def result(self): if self not in memo: memo[self] = func(self) return memo[self] return property(result) def prefix_visit(s, key=None, reverse=False): todo = [s] while todo: st = todo.pop(0) yield st children = st.children if key is not None: children = sorted(children, key=key, reverse=reverse) todo = children + todo class Structure(object): """ A structure in the dendrogram, for example a leaf or a branch. A structure that is part of a dendrogram knows which other structures it is related to. For example, it is possible to get the parent structure containing the present structure ``s`` by using the ``parent`` attribute:: >>> s.parent Likewise, the ``children`` attribute can be used to get a list of all sub-structures:: >>> s.children [, ] A number of attributes and methods are available to explore the structure in more detail, such as the ``indices`` and ``values`` methods, which return the indices and values of the pixels that are part of the structure. These and other methods have a ``subtree=`` option, which if ``True`` (the default) returns the quantities related to structure and all sub-structures, and if ``False`` includes only the pixels that are part of the structure, but excluding any sub-structure. """ ########################################################################### # The following methods are used only by the Dendrogram class, # # for computing the dendrogram and should never be used manually: # ########################################################################### def __init__(self, indices, values, children=[], idx=None, dendrogram=None): self._dendrogram = dendrogram self.parent = None self.children = children # Make sure that the children have a reference to the present structure for child in children: child.parent = self if np.isscalar(values): # values are for a single pixel self._indices = [indices] self._values = [values] self._vmin, self._vmax = values, values elif isinstance(indices, list) and isinstance(values, list): self._indices = indices self._values = values self._vmin, self._vmax = min(values), max(values) else: # could be an array or iterator self._indices = [x for x in indices] self._values = [x for x in values] self._vmin, self._vmax = min(values), max(values) self._smallest_index = min(self._indices) self.idx = idx self._reset_cache() def _reset_cache(self): self._level = None self._ancestor = None self._descendants = None self._npix_total = None self._peak = None self._peak_subtree = None self._tree_index = None @property def smallest_index(self): return self._smallest_index @smallest_index.setter def smallest_index(self, value): self._smallest_index = value @property def parent(self): """ The parent structure containing the present structure. """ return self._parent @parent.setter def parent(self, value): self._parent = value @property def children(self): """ A list of all the sub-structures contained in the present structure. """ return self._children @children.setter def children(self, value): self._children = value @property def is_leaf(self): """ Whether the present structure is a leaf. """ return not self.children @property def is_branch(self): """ Whether the present structure is a branch. """ return not self.is_leaf def indices(self, subtree=True): """ The indices of the pixels in this branch. Parameters ---------- subtree : bool, optional Whether to recursively include all sub-structures """ if self._tree_index is not None: return self._tree_index.indices(self.idx, subtree=subtree) if subtree: sub_indices = [self.indices(subtree=False)] for child in self.children: sub_indices.append(child.indices(subtree=True)) return tuple(np.hstack(arrs) for arrs in zip(*(sub_indices))) else: return tuple(np.atleast_1d(i) for i in zip(*self._indices)) def values(self, subtree=True): """ The values of the pixels in this branch. Parameters ---------- subtree : bool, optional Whether to recursively include all sub-structures """ if self._tree_index is not None: return self._tree_index.values(self.idx, subtree=subtree) if subtree: sub_values = [self.values(subtree=False)] for child in self.children: sub_values.append(child.values(subtree=True)) return np.hstack(sub_values) else: return np.atleast_1d(self._values) @property def vmin(self): """ The minimum value of pixels belonging to the branch (excluding sub-structure). """ return self._vmin @property def vmax(self): """ The maximum value of pixels belonging to the branch (excluding sub-structure). """ return self._vmax def _add_pixel(self, index, value): """ Add a pixel to this leaf. This is a private method only intended for use by :meth:`~astrodendro.dendrogram.Dendrogram.compute` Parameters ---------- index : tuple The pixel coordinates value : float The value of the pixel """ self._indices.append(index) self._values.append(value) self._vmin, self._vmax = min(value, self.vmin), max(value, self.vmax) self._smallest_index = min(self._smallest_index, index) self._reset_cache() def _merge(self, structure): """ Merge a structure with the present structure. This is a private method only intended for use by :meth:`~astrodendro.dendrogram.Dendrogram.compute` """ self._indices.extend(structure._indices) self._values.extend(structure._values) self._vmin, self._vmax = min(structure.vmin, self.vmin), max(structure.vmax, self.vmax) self._smallest_index = min(structure._smallest_index, self._smallest_index) self._reset_cache() ########################################################################### # The following methods can be used during OR after computation # ########################################################################### @property def height(self): """ This is defined as the minimum value in the children structures, or the peak value of the present structure if it has no children. """ return min(c.vmin for c in self.children) if self.children else self.vmax @property def ancestor(self): """ Find the ancestor of this leaf/branch non-recursively. This always returns an object (may return self if the object has no parent). Results are partially cached to reduce recursion depth. The caching assumes that once an object has been given a parent, that parent will never change. This method should be equivalent to: if self.parent == None: return self else: return self.parent.ancestor """ if self.parent is None: return self if not self._ancestor: self._ancestor = self.parent # Use a loop rather than recursion to update the cached ancestor: while self._ancestor.parent: a = self._ancestor if a._ancestor: self._ancestor = a._ancestor else: self._ancestor = a.parent return self._ancestor ########################################################################### # The following methods are only reliable after the entire tree is # # computed. They should not be used in dendrogram.py # ########################################################################### def _fill_footprint(self, array, level, recursive=True): """ Set all corresponding points in `array` to the level of the structure. Parameters ---------- array : :class:`~numpy.ndarray` The array to write the footprint to recursive : bool Whether to also add the footprint for the sub-structures """ if recursive: for child in self.children: child._fill_footprint(array, level + 1) array[self.indices(subtree=False)] = level @property def level(self): """ The level of the structure, i.e. how many structures need to be traversed to reach the present structure. This is 0 for structures in the trunk, with values increasing in steps of 1 towards the leaves. """ if self._level is None: if not self.parent: self._level = 0 elif self.parent._level is not None: self._level = self.parent._level + 1 else: # We could just use: # self._level = self.parent.level + 1 # But to avoid recursion, and keep things fast, we do it this way instead: obj = self.parent diff = 1 while obj._level is None: obj = obj.parent diff += 1 # Note: we are counting on the dendrogram computation to # ensure that ._level=0 for all structures in the trunk self._level = obj._level + diff self.parent._level = self._level - 1 return self._level @cached_property def newick(self): """ Newick representation of this structure. """ if self.idx is None: raise ValueError("Cannot return Newick representation if idx is not set") if self.children: newick_items = [child.newick for child in self.children] return "(%s)%s:%.3f" % (','.join(newick_items), self.idx, self.height) else: return "%i:%.3f" % (self.idx, self.height) @property def descendants(self): """ Get a flattened list of all child leaves and branches. """ if self._descendants is None: self._descendants = [] to_add = [self] # branches with children we will need to add to the list while True: children = [] list(map(children.extend, [branch.children for branch in to_add])) self._descendants.extend(children) # Then proceed, essentially recursing through child branches: to_add = [b for b in children if not b.is_leaf] if not to_add: break return self._descendants def get_npix(self, subtree=True): """ Return the number of pixels in this structure. Parameters ---------- subtree : bool, optional Whether to recursively include all sub-structures when counting the pixels. Returns ------- n_pix : int The number of pixels in this structure """ if subtree: if self._npix_total is None: self._npix_total = self.values(subtree=True).size return self._npix_total else: return len(self.values(subtree=False)) def get_peak(self, subtree=True): """ Return (index, value) for the pixel with maximum value. Parameters ---------- subtree : bool, optional Whether to recursively include all sub-structures when searching for the peak. Returns ------- index : tuple The n-dimensional index of the peak pixel value : float The value of the peak pixel """ # populate caches without recursion def key(x): return x[1] if self._peak is None: for s in reversed(list(prefix_visit(self))): s._peak = (s._indices[s._values.index(s.vmax)], s.vmax) if s.is_leaf: s._peak_subtree = s._peak else: s._peak_subtree = max((c._peak_subtree for c in s.children), key=key) s._peak_subtree = max(s._peak_subtree, s._peak, key=key) if not subtree: return self._peak return self._peak_subtree def __repr__(self): if self.is_leaf: return "".format(self.idx) else: return "".format(self.idx) def sorted_leaves(self, sort_key=lambda s: s.get_peak(subtree=True)[1], reverse=False, subtree=True): """ Return a list of sorted leaves. Parameters ---------- sort_key : function, optional A function which given a structure will return a scalar that is then used for sorting. By default, this is set to a function that returns the peak value of a structure (including descendants). reverse : bool, optional Whether to reverse the sorting. subtree : bool, optional Whether to recursively include all sub-structures in the list. Returns ------- leaves : list A list of sorted leaves """ if self.is_leaf: return [self] if not subtree: return [s for s in sorted(self.children, key=sort_key, reverse=reverse) if s.is_leaf] # flip reverse keyword, so that nodes are properly # sorted after reversed() sts = reversed(list(prefix_visit(self, key=sort_key, reverse=not reverse))) return [s for s in sts if s.is_leaf] def get_mask(self, shape=None, subtree=True): """ Return a boolean mask outlining the structure. Parameters ---------- shape : tuple, optional The shape of the array upon which to compute the mask. This is only required if the structure is not attached to a dendrogram. subtree : bool, optional Whether to recursively include all sub-structures in the mask. Returns ------- mask : :class:`~numpy.ndarray` The mask outlining the structure (``False`` values are used outside the structure, and ``True`` values inside). """ if shape is None: shape = self._dendrogram.data.shape indices = self.indices(subtree=True) if subtree else self.indices mask = np.zeros(shape, dtype=bool) mask[indices] = True return mask astrodendro-0.2.0+dfsg1.orig/astrodendro/io/0000755000175000017500000000000012773161345020270 5ustar noahfxnoahfxastrodendro-0.2.0+dfsg1.orig/astrodendro/io/handler.py0000644000175000017500000000015712176270420022252 0ustar noahfxnoahfxfrom collections import namedtuple IOHandler = namedtuple("IOHandler", "identify import_dendro export_dendro")astrodendro-0.2.0+dfsg1.orig/astrodendro/io/fits.py0000644000175000017500000000513112773156651021613 0ustar noahfxnoahfx# Licensed under an MIT open source license - see LICENSE import os import numpy as np from .util import parse_dendrogram from .handler import IOHandler # Import and export # FITS file signature as per RFC 4047 FITS_SIGNATURE = (b"\x53\x49\x4d\x50\x4c\x45\x20\x20\x3d\x20\x20\x20\x20\x20" b"\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20" b"\x20\x54") def is_fits(filename, mode='r'): if mode == 'r' and os.path.exists(filename): fileobj = open(filename, 'rb') sig = fileobj.read(30) return sig == FITS_SIGNATURE elif filename.lower().endswith(('.fits', '.fits.gz', '.fit', '.fit.gz')): return True else: return False def dendro_export_fits(d, filename): """Export the dendrogram 'd' to the FITS file 'filename'""" from astropy.io import fits try: primary_hdu = fits.PrimaryHDU(header=d.wcs.to_header()) except AttributeError: primary_hdu = fits.PrimaryHDU() primary_hdu.header["MIN_NPIX"] = (d.params['min_npix'], "Minimum number of pixels in a leaf.") primary_hdu.header["MIN_DELT"] = (d.params['min_delta'], "Minimum branch height.") primary_hdu.header["MIN_VAL"] = (d.params['min_value'], "Minimum intensity value.") hdus = [primary_hdu, fits.ImageHDU(d.data, name='data'), fits.ImageHDU(d.index_map, name='index_map'), fits.ImageHDU(np.array([ord(x) for x in d.to_newick()]), name='newick')] hdulist = fits.HDUList(hdus) hdulist.writeto(filename, clobber=True) def dendro_import_fits(filename): """Import 'filename' and construct a dendrogram from it""" from astropy.io import fits from astropy.wcs.wcs import WCS with fits.open(filename) as hdus: try: wcs = WCS(hdus[0].header) except AttributeError: wcs = None data = hdus[1].data index_map = hdus[2].data newick = ''.join(chr(x) for x in hdus[3].data.flat) if 'MIN_NPIX' in hdus[0].header: params = {"min_npix": hdus[0].header['MIN_NPIX'], "min_value": hdus[0].header['MIN_VAL'], "min_delta": hdus[0].header['MIN_DELT']} else: params = {} return parse_dendrogram(newick, data, index_map, params, wcs) FITSHandler = IOHandler(identify=is_fits, export_dendro=dendro_export_fits, import_dendro=dendro_import_fits) astrodendro-0.2.0+dfsg1.orig/astrodendro/io/util.py0000644000175000017500000001452512773156651021632 0ustar noahfxnoahfximport numpy as np from .. import six from astropy.utils.console import ProgressBar from astropy import log def parse_newick(string): items = {} # Find maximum level current_level = 0 max_level = 0 log.debug('String loading...') for i, c in enumerate(string): if c == '(': current_level += 1 if c == ')': current_level -= 1 max_level = max(max_level, current_level) # Loop through levels and construct tree log.debug('Tree loading...') for level in range(max_level, 0, -1): pairs = [] current_level = 0 for i, c in enumerate(string): if c == '(': current_level += 1 if current_level == level: start = i if c == ')': if current_level == level: pairs.append((start, i)) current_level -= 1 for pair in pairs[::-1]: # Extract start and end of branch definition start, end = pair # Find the ID of the branch colon = string.find(":", end) branch_id = string[end + 1:colon] if branch_id == '': branch_id = 'trunk' else: branch_id = int(branch_id) # Add branch definition to overall definition items[branch_id] = eval("{%s}" % string[start + 1:end]) # Remove branch definition from string string = string[:start] + string[end + 1:] new_items = {} def collect(d): for item in d: if item in items: collect(items[item]) d[item] = (items[item], d[item]) return collect(items['trunk']) return items['trunk'] def parse_dendrogram(newick, data, index_map, params, wcs=None): from ..dendrogram import Dendrogram from ..structure import Structure d = Dendrogram() d.ndim = len(data.shape) d._structures_dict = {} d.data = data d.index_map = index_map d.params = params d.wcs = wcs try: flux_by_structure, indices_by_structure = _fast_reader(d.index_map, data) except ImportError: flux_by_structure, indices_by_structure = _slow_reader(d.index_map, data) def _construct_tree(repr): structures = [] for idx in repr: idx = int(idx) structure_indices = indices_by_structure[idx] f = flux_by_structure[idx] if type(repr[idx]) == tuple: sub_structures_repr = repr[idx][0] # Parsed representation of sub structures sub_structures = _construct_tree(sub_structures_repr) for i in sub_structures: d._structures_dict[i.idx] = i b = Structure(structure_indices, f, children=sub_structures, idx=idx, dendrogram=d) # Correct merge levels - complicated because of the # order in which we are building the tree. # What we do is look at the heights of this branch's # 1st child as stored in the newick representation, and then # work backwards to compute the merge level of this branch first_child_repr = six.next(six.itervalues(sub_structures_repr)) if type(first_child_repr) == tuple: height = first_child_repr[1] else: height = first_child_repr d._structures_dict[idx] = b structures.append(b) else: l = Structure(structure_indices, f, idx=idx, dendrogram=d) structures.append(l) d._structures_dict[idx] = l return structures log.debug('Parsing newick and constructing tree...') d.trunk = _construct_tree(parse_newick(newick)) # To make the structure.level property fast, we ensure all the items in the # trunk have their level cached as "0" for structure in d.trunk: structure._level = 0 # See the @property level() definition in structure.py d._index() return d def _fast_reader(index_map, data): """ Use scipy.ndimage.find_objects to quickly identify subsets of the data to increase speed of dendrogram loading """ flux_by_structure, indices_by_structure = {},{} from scipy import ndimage idxs = np.unique(index_map[index_map > -1]) # ndimage ignores 0 and -1, but we want index 0 object_slices = ndimage.find_objects(index_map+1) # find_objects returns a tuple that includes many None values that we # need to get rid of. object_slices = [x for x in object_slices if x is not None] index_cube = np.indices(index_map.shape) # Need to have same length, otherwise assumptions above are wrong assert len(idxs) == len(object_slices) log.debug('Creating index maps for {0} indices...'.format(len(idxs))) p = ProgressBar(len(object_slices)) for idx,sl in zip(idxs, object_slices): match = index_map[sl] == idx sl2 = (slice(None),) + sl match_inds = index_cube[sl2][:, match] coords = list(zip(*match_inds)) dd = data[sl][match].tolist() flux_by_structure[idx] = dd indices_by_structure[idx] = coords p.update() return flux_by_structure, indices_by_structure def _slow_reader(index_map, data): """ Loop over each valid pixel in the index_map and add its coordinates and data to the flux_by_structure and indices_by_structure dicts This is slower than _fast_reader but faster than that implementation would be without find_objects. The bottleneck is doing `index_map == idx` N times. """ flux_by_structure, indices_by_structure = {},{} # Do a fast iteration through d.data, adding the indices and data values # to the two dictionaries declared above: indices = np.array(np.where(index_map > -1)).transpose() log.debug('Creating index maps for {0} coordinates...'.format(len(indices))) for coord in ProgressBar(indices): coord = tuple(coord) idx = index_map[coord] if idx in flux_by_structure: flux_by_structure[idx].append(data[coord]) indices_by_structure[idx].append(coord) else: flux_by_structure[idx] = [data[coord]] indices_by_structure[idx] = [coord] return flux_by_structure, indices_by_structure astrodendro-0.2.0+dfsg1.orig/astrodendro/io/hdf5.py0000644000175000017500000000443612773156651021503 0ustar noahfxnoahfx# Licensed under an MIT open source license - see LICENSE import os import numpy as np from astropy import log from .util import parse_dendrogram from .handler import IOHandler HDF5_SIGNATURE = b'\x89HDF\r\n\x1a\n' def is_hdf5(filename, mode='r'): if mode == 'r' and os.path.exists(filename): fileobj = open(filename, 'rb') sig = fileobj.read(8) return sig == HDF5_SIGNATURE elif filename.lower().endswith(('.hdf5', '.h5')): return True else: return False def dendro_export_hdf5(d, filename): """Export the dendrogram 'd' to the HDF5 file 'filename'""" import h5py f = h5py.File(filename, 'w') f.attrs['n_dim'] = d.n_dim f.create_dataset('newick', data=d.to_newick()) ds = f.create_dataset('index_map', data=d.index_map, compression=True) ds.attrs['CLASS'] = 'IMAGE' ds.attrs['IMAGE_VERSION'] = '1.2' ds.attrs['IMAGE_MINMAXRANGE'] = [d.index_map.min(), d.index_map.max()] ds = f.create_dataset('data', data=d.data, compression=True) ds.attrs['CLASS'] = 'IMAGE' ds.attrs['IMAGE_VERSION'] = '1.2' ds.attrs['IMAGE_MINMAXRANGE'] = [d.data.min(), d.data.max()] for key in d.params.keys(): f.attrs[key] = d.params[key] try: f.create_dataset('wcs_header', data=d.wcs.to_header_string()) except AttributeError: pass f.close() def dendro_import_hdf5(filename): """Import 'filename' and construct a dendrogram from it""" import h5py from astropy.wcs.wcs import WCS log.debug('Loading HDF5 file from disk...') with h5py.File(filename, 'r') as h5f: newick = h5f['newick'].value data = h5f['data'].value index_map = h5f['index_map'].value params = {} if 'min_value' in h5f.attrs: params['min_value'] = h5f.attrs['min_value'] params['min_delta'] = h5f.attrs['min_delta'] params['min_npix'] = h5f.attrs['min_npix'] try: wcs = WCS(h5f['wcs_header'].value) except KeyError: wcs = None log.debug('Parsing dendrogram...') return parse_dendrogram(newick, data, index_map, params, wcs) HDF5Handler = IOHandler(identify=is_hdf5, export_dendro=dendro_export_hdf5, import_dendro=dendro_import_hdf5) astrodendro-0.2.0+dfsg1.orig/astrodendro/io/__init__.py0000644000175000017500000000246012176270420022373 0ustar noahfxnoahfx# Licensed under an MIT open source license - see LICENSE from .fits import FITSHandler from .hdf5 import HDF5Handler IO_FORMATS = { 'fits': FITSHandler, 'hdf5': HDF5Handler } def _valid(formats): return " and ".join(["'{0}'".format(key) for key in formats]) def load_dendrogram(filename, format=None): if format is not None: return IO_FORMATS[format].import_dendro(filename) else: for handler in IO_FORMATS.values(): if handler.identify(filename, mode='r'): return handler.import_dendro(filename) raise IOError("Could not automatically identify file format - use the " "format= option to specify which format to use (valid " "options are {0})".format(_valid(IO_FORMATS))) def save_dendrogram(dendrogram, filename, format=None): if format is not None: return IO_FORMATS[format].export_dendro(dendrogram, filename) else: for handler in IO_FORMATS.values(): if handler.identify(filename, mode='w'): return handler.export_dendro(dendrogram, filename) raise IOError("Could not automatically identify file format - use the " "format= option to specify which format to use (valid " "options are {0})".format(_valid(IO_FORMATS))) astrodendro-0.2.0+dfsg1.orig/astrodendro/pruning.py0000644000175000017500000001014112773156651021716 0ustar noahfxnoahfx# Licensed under an MIT open source license - see LICENSE """ The pruning module provides several functions to perform common pruning via the ``is_independent`` keyword in the Dendrogram :meth:`~astrodendro.dendrogram.Dendrogram.compute` method. Examples:: #prune unless leaf peak value >= 5 Dendrogram.compute(data, is_independent=min_peak(5)) #prune unless leaf contains 10 pixels Dendrogram.compute(data, is_independent=min_npix(10)) #apply both criteria is_independent = all_true((min_peak(5), min_npix(10))) Dendrogram.compute(data, is_independent=is_independent) """ import numpy as np def _ravel_multi_index(multi_index, dims, mode='raise'): # partial implementation of ravel_multi_index, # for compatibility with numpy <= 1.5 # does not implement order kwarg ndim = len(dims) if len(multi_index) != len(dims): raise ValueError("parameter multi_index must be " "a sequence of length %i" % ndim) indices = [np.asarray(m) for m in multi_index] if mode == 'raise': for i, d in zip(indices, dims): if ((i < 0) | (i >= d)).any(): raise ValueError("invalid entry in coordinates array") elif mode == 'clip': indices = [np.clip(i, 0, d - 1) for i, d in zip(indices, dims)] else: # mode == 'wrap' indices = [i % d for i, d in zip(indices, dims)] result = np.zeros(len(multi_index[0]), dtype=np.int) offset = 1 for i, d in list(zip(indices, dims))[::-1]: result += (i * offset).ravel() offset *= d return result if not hasattr(np, 'ravel_multi_index'): np.ravel_multi_index = _ravel_multi_index def all_true(funcs): """Combine several ``is_independent`` functions into one Parameters ---------- funcs : list-like A list of ``is_independent`` functions Returns ------- combined_func : function A new function which returns true of all the input functions are true """ def result(*args, **kwargs): return all(f(*args, **kwargs) for f in funcs) return result def min_delta(delta): """ Minimum delta criteria Parameters ---------- delta : float The minimum height of a leaf above its merger level """ def result(structure, index=None, value=None): if value is None: if structure.parent is not None: return (structure.height - structure.parent.height) >= delta return (structure.vmax - structure.vmin) >= delta return (structure.vmax - value) >= delta return result def min_sum(sum): """ Minimum sum criteria Parameters ---------- sum : float The minimum sum of the pixel values in a leaf """ def result(structure, index=None, value=None): return np.nansum(structure.values()) >= sum return result def min_peak(peak): """ Minimum peak criteria Parameters ---------- peak : float The minimum peak pixel value in a leaf """ def result(structure, index=None, value=None): return structure.vmax >= peak return result def min_npix(npix): """ Minimum npix criteria Parameters ---------- npix : int The minimum number of pixels in a leaf """ def result(structure, index=None, value=None): return len(structure.values()) >= npix return result def contains_seeds(seeds): """ Critieria that leaves contain at least one of a list of seed positions Parameters ---------- seeds : tuple of array-like seed locations. The ith array in the tuple lists the ith coordinate for each seed. This is the format returned, e.g., by np.where """ shp = [np.asarray(s).max() + 2 for s in seeds] rav = np.ravel_multi_index(seeds, shp) def result(structure, index=None, value=None): sid = structure.indices() if len(sid) != len(seeds): raise TypeError("Dimensions of seeds and data do not agree") rav2 = np.ravel_multi_index(sid, shp, mode='clip') return np.intersect1d(rav, rav2).size > 0 return result astrodendro-0.2.0+dfsg1.orig/astrodendro/scatter.py0000644000175000017500000001216712773156651021713 0ustar noahfxnoahfximport matplotlib.pyplot as plt from matplotlib.widgets import Lasso from matplotlib import path import matplotlib import numpy as np class Scatter(object): """ Scatter is an optional viewer that plugs into a SelectionHub. It displays catalog properties in a scatter plot. Users can select scatter points directly by clicking and dragging a lasso around points of interest. These selected points' corresponding structures will then be highlighted in all other viewers. Example use: >>> from astrodendro.scatter import Scatter # ... code to create a dendrogram (d) and catalog ... >>> dv = d.viewer() >>> ds = Scatter(d, dv.hub, catalog, 'radius', 'v_rms') >>> dv.show() To set logarithmic scaling on the x, y axes or both, the following convenience methods are defined: >>> ds.set_loglog() >>> ds.set_semilogx() >>> ds.set_semilogy() # These can be unset by passing a `log=False` keyword, i.e. >>> ds.set_loglog(False) For more information on using Scatter, see the online documentation. """ def __init__(self, dendrogram, hub, catalog, xaxis, yaxis): self.hub = hub self.dendrogram = dendrogram self.structures = list(self.dendrogram.all_structures) self.fig = plt.figure() self.axes = plt.subplot(1,1,1) self.catalog = catalog self.xdata = catalog[xaxis] self.ydata = catalog[yaxis] self.xys = np.column_stack((self.xdata, self.ydata)) self.x_column_name = xaxis self.y_column_name = yaxis self.lines2d = {} # selection_id -> matplotlib.lines.Line2D # This is a workaround for a (likely) bug in matplotlib.widgets. Lasso crashes without this fix. if matplotlib.get_backend() == 'MacOSX': self.fig.canvas.supports_blit = False self._draw_plot() self.hub.add_callback(self.update_selection) self.cid = self.fig.canvas.mpl_connect('button_press_event', self.onpress) # If things are already selected in the hub, go select them! for selection_id in self.hub.selections: self.update_selection(selection_id) def _draw_plot(self): self.axes.plot(self.xdata, self.ydata, 'o', color='w', mec='k', zorder=-5) self.axes.set_xlabel(self.x_column_name) self.axes.set_ylabel(self.y_column_name) self.fig.canvas.draw() # This is a closure - we have to pass the input key to callback somehow. def callback_generator(self, event): input_key = event.button def callback(verts): p = path.Path(verts) # `p.contains_points` has undesirable behavior that makes it necessary to explicitly exclude `nan` data. indices = np.where(p.contains_points(self.xys) & ~np.isnan(self.xdata) & ~np.isnan(self.ydata))[0] selected_structures = [self.dendrogram[i] for i in indices] if len(selected_structures) == 0: selected_structures = [None] self.hub.select(input_key, selected_structures, subtree=False) self.fig.canvas.draw_idle() del self.lasso return callback def onpress(self, event): if event.canvas.toolbar.mode != '': return if event.inaxes is None: return self.lasso = Lasso(event.inaxes, (event.xdata, event.ydata), self.callback_generator(event)) def update_selection(self, selection_id): """Highlight seleted structures""" if selection_id in self.lines2d: if self.lines2d[selection_id] is not None: self.lines2d[selection_id].remove() del self.lines2d[selection_id] structures = self.hub.selections[selection_id] struct = structures[0] if struct is None: self.fig.canvas.draw() return if self.hub.select_subtree[selection_id]: selected_indices = [leaf.idx for leaf in struct.descendants + [struct]] else: selected_indices = [leaf.idx for leaf in structures] self.lines2d[selection_id] = self.axes.plot( self.xdata[selected_indices], self.ydata[selected_indices], 'o', color=self.hub.colors[selection_id], zorder=struct.height)[0] self.fig.canvas.draw() def set_loglog(self, log=True): """ Convenience function to make the plot logarithmic """ if log: self.axes.set_xscale('log') self.axes.set_yscale('log') else: self.axes.set_xscale('linear') self.axes.set_yscale('linear') self.fig.canvas.draw() def set_semilogx(self, log=True): if log: self.axes.set_xscale('log') else: self.axes.set_xscale('linear') self.fig.canvas.draw() def set_semilogy(self, log=True): if log: self.axes.set_yscale('log') else: self.axes.set_yscale('linear') self.fig.canvas.draw() astrodendro-0.2.0+dfsg1.orig/astrodendro/progressbar.py0000644000175000017500000000665212175212345022566 0ustar noahfxnoahfx# Licensed under an MIT open source license - see LICENSE """ progressbar.py A Python module with a ProgressBar class which can be used to represent a task's progress in the form of a progress bar and it can be formated in a basic way. Here is some basic usage with the default options: >>> from progressbar import ProgressBar >>> p = ProgressBar() >>> print p [>............] 0% >>> p + 1 >>> print p [=>...........] 10% >>> p + 9 >>> print p [============>] 0% And here another example with different options: >>> from progressbar import ProgressBar >>> custom_options = { ... 'end': 100, ... 'width': 20, ... 'fill': '#', ... 'format': '%(progress)s%% [%(fill)s%(blank)s]' ... } >>> p = ProgressBar(**custom_options) >>> print p 0% [....................] >>> p + 5 >>> print p 5% [#...................] >>> p + 9 >>> print p 100% [####################] Source: https://github.com/ikame/progressbar """ import sys class ProgressBar(object): """ProgressBar class holds the options of the progress bar. The options are: start State from which start the progress. For example, if start is 5 and the end is 10, the progress of this state is 50% end State in which the progress has terminated. width -- fill String to use for "filled" used to represent the progress blank String to use for "filled" used to represent remaining space. format Format incremental """ def __init__(self, start=0, end=10, width=12, fill='=', blank='.', pformat='[%(fill)s>%(blank)s] %(progress)s%%', incremental=True): super(ProgressBar, self).__init__() self.start = start self.end = end self.width = width self.fill = fill self.blank = blank self.pformat = pformat self.incremental = incremental self.step = 100 / float(width) # fix self.reset() def __add__(self, increment): increment = self._get_progress(increment) if 100 > self.progress + increment: self.progress += increment else: self.progress = 100 return self def __str__(self): progressed = int(self.progress / self.step) # fix fill = progressed * self.fill blank = (self.width - progressed) * self.blank return self.pformat % {'fill': fill, 'blank': blank, 'progress': int(self.progress)} __repr__ = __str__ def _get_progress(self, increment): return float(increment * 100) / self.end def reset(self): """Resets the current progress to the start point""" self.progress = self._get_progress(self.start) return self class AnimatedProgressBar(ProgressBar): """Extends ProgressBar to allow you to use it straighforward on a script. Accepts an extra keyword argument named `stdout` (by default use sys.stdout) and may be any file-object to which send the progress status. """ def __init__(self, *args, **kwargs): super(AnimatedProgressBar, self).__init__(*args, **kwargs) self.stdout = kwargs.get('stdout', sys.stdout) def show_progress(self): if hasattr(self.stdout, 'isatty') and self.stdout.isatty(): self.stdout.write('\r') else: self.stdout.write('\n') self.stdout.write(str(self)) self.stdout.flush() astrodendro-0.2.0+dfsg1.orig/astrodendro/analysis.py0000644000175000017500000005507412773156651022075 0ustar noahfxnoahfx# Licensed under an MIT open source license - see LICENSE import abc import warnings from functools import wraps from weakref import WeakKeyDictionary import numpy as np from astropy.units import Quantity from astropy.table import Table from astropy import units as u from astropy.wcs import WCS from . import six from .structure import Structure from .flux import UnitMetadataWarning from .progressbar import AnimatedProgressBar __all__ = ['ppv_catalog', 'pp_catalog'] def memoize(func): # cache[instance][method args] -> method result # hold weakrefs to instances, # to stay out of the way of the garbage collector cache = WeakKeyDictionary() @wraps(func) def wrapper(self, *args): try: return cache[self][args] except KeyError: cache.setdefault(self, {})[args] = func(self, *args) return cache[self][args] except TypeError: warnings.warn("Cannot memoize inputs to %s" % func) return func(self, *args) return wrapper class MissingMetadataWarning(UserWarning): pass def _qsplit(q): """Split a potential astropy Quantity into unit/quantity""" if isinstance(1. * q, Quantity): return q.unit, q.value return 1, q def _unit(q): """Return the units associated with a number, array, unit, or Quantity""" if q is None: return None elif isinstance(1 * q, Quantity): return (1 * q).unit class ScalarStatistic(object): # This class does all of the heavy computation def __init__(self, values, indices): """ Compute pixel-level statistics from a scalar field, sampled at specific locations. Parameters ---------- values : 1D ndarray data values to use indices: tuple of 1D arrays Location of each element of values. The i-th array in the tuple describes the ith positional dimension """ self.values = values.astype(np.float) self.indices = indices @memoize def mom0(self): """The sum of the values""" return np.nansum(self.values) @memoize def mom1(self): """The intensity-weighted mean position""" m0 = self.mom0() return [np.nansum(i * self.values) / m0 for i in self.indices] @memoize def mom2(self): """The intensity-weighted covariance matrix""" mom1 = self.mom1() mom0 = self.mom0() v = self.values / mom0 nd = len(self.indices) zyx = tuple(i - m for i, m in zip(self.indices, mom1)) result = np.zeros((nd, nd)) for i in range(nd): result[i, i] = np.nansum(v * zyx[i] ** 2) for j in range(i + 1, nd): result[i, j] = result[j, i] = np.nansum(v * zyx[i] * zyx[j]) return result @memoize def mom2_along(self, direction): """ Intensity-weighted variance/covariance along 1 or more directions. Parameters ---------- direction : array like One or more set of direction vectors. Need not be normalized Returns ------- result : array The variance (or co-variance matrix) of the data along the specified direction(s). """ w = np.atleast_2d(direction).astype(np.float) for row in w: row /= np.linalg.norm(row) result = np.dot(np.dot(w, self.mom2()), w.T) if result.size == 1: result = np.asscalar(result) return result @memoize def paxes(self): """ The principal axes of the data (direction of greatest elongation) Returns ------- result : tuple Ordered tuple of ndarrays Notes ----- Each array is a normalized direction vector. The arrays are sorted in decreasing order of elongation of the data """ mom2 = self.mom2() w, v = np.linalg.eig(mom2) order = np.argsort(w) return tuple(v[:, o] for o in order[::-1]) @memoize def projected_paxes(self, axes): """ The principal axes of a projection of the data onto a subspace Paramters --------- axes : array-like, (nnew, nold) The projection to take. Each row defines a unit vector in the new coordinate system Returns -------- result : tuple Tuple of arrays (nnew items) Notes ----- The ordered principal axes in the new space """ axes = tuple(axes) mom2 = self.mom2_along(axes) w, v = np.linalg.eig(mom2) order = np.argsort(w) return tuple(v[:, o] for o in order[::-1]) @memoize def count(self): """ Number of elements in the dataset. """ return self.values.size def surface_area(self): raise NotImplementedError def perimeter(self, plane=None): raise NotImplementedError class VectorStatistic(object): def __init__(self, values_tuple, indices): raise NotImplementedError def divergence(self): raise NotImplementedError def curl(self): raise NotImplementedError class Metadata(object): """ A descriptor to wrap around metadata dictionaries. Lets classes reference self.x instead of self.metadata['x'], """ _restrict_types = None def __init__(self, key, description, default=None, strict=False): """ Parameters ---------- key : str Metadata name. description : str What the quantity describes default : scalar Default value if metadata not provided strict : bool If True, raise KeyError if metadata not provided. This overrides default """ if not isinstance(key, six.string_types): raise TypeError("Key is", key, type(key)) self.key = key self.description = description or 'no description' self.default = default self.strict = strict def __get__(self, instance, type=None): if instance is None: return self try: value = instance.metadata[self.key] except KeyError: if self.strict: raise KeyError("Required metadata item not found: %s" % self) else: if self.default is not None: warnings.warn("{0} ({1}) missing, defaulting to {2}".format(self.key, self.description, self.default), MissingMetadataWarning) value = self.default if value is not None and self._restrict_types is not None: if isinstance(value, self._restrict_types): return value else: raise TypeError("{0} should be an instance of {1}".format(self.key, ' or '.join([x.__name__ for x in self._restrict_types]))) else: return value def __str__(self): return "%s (%s)" % (self.key, self.description) class MetadataQuantity(Metadata): _restrict_types = (u.UnitBase, u.Quantity) class MetadataWCS(Metadata): _restrict_types = (WCS,) class SpatialBase(object): __metaclass__ = abc.ABCMeta wavelength = MetadataQuantity('wavelength', 'Wavelength') spatial_scale = MetadataQuantity('spatial_scale', 'Pixel width/height') beam_major = MetadataQuantity('beam_major', 'Major FWHM of beam') beam_minor = MetadataQuantity('beam_minor', 'Minor FWHM of beam') data_unit = MetadataQuantity('data_unit', 'Units of the pixel values', strict=True) wcs = MetadataWCS('wcs', 'WCS object') @abc.abstractmethod def _sky_paxes(self): raise NotImplementedError() def _world_pos(self): xyz = self.stat.mom1()[::-1] if self.wcs is None: return xyz[::-1] * u.pixel else: # TODO: set units correctly following WCS # We use origin=0 since the indices come from Numpy indexing return self.wcs.all_pix2world([xyz], 0).ravel()[::-1] @abc.abstractproperty def flux(self): raise NotImplementedError @abc.abstractproperty def x_cen(self): raise NotImplementedError() @abc.abstractproperty def y_cen(self): raise NotImplementedError() @abc.abstractproperty def position_angle(self): raise NotImplementedError() @property def major_sigma(self): """ Major axis of the projection onto the position-position (PP) plane, computed from the intensity weighted second moment in direction of greatest elongation in the PP plane. """ dx = self.spatial_scale or u.pixel a, b = self._sky_paxes() # We need to multiply the second moment by two to get the major axis # rather than the half-major axis. return dx * np.sqrt(self.stat.mom2_along(tuple(a))) @property def minor_sigma(self): """ Minor axis of the projection onto the position-position (PP) plane, computed from the intensity weighted second moment perpendicular to the major axis in the PP plane. """ dx = self.spatial_scale or u.pixel a, b = self._sky_paxes() # We need to multiply the second moment by two to get the minor axis # rather than the half-minor axis. return dx * np.sqrt(self.stat.mom2_along(tuple(b))) @property def radius(self): """ Geometric mean of ``major_sigma`` and ``minor_sigma``. """ u, a = _qsplit(self.major_sigma) u, b = _qsplit(self.minor_sigma) return u * np.sqrt(a * b) @property def area_ellipse(self): """ The area of the ellipse defined by the second moments, where the semi-major and semi-minor axes used are the HWHM (half-width at half-maximum) derived from the moments. """ return np.pi * self.major_sigma * self.minor_sigma * (2.3548 * 0.5) ** 2 def to_mpl_ellipse(self, **kwargs): """ Returns a Matplotlib ellipse representing the first and second moments of the structure. Any keyword arguments are passed to :class:`~matplotlib.patches.Ellipse` """ from matplotlib.patches import Ellipse return Ellipse((self.x_cen.value, self.y_cen.value), self.major_sigma.value * 2.3548, self.minor_sigma.value * 2.3548, angle=self.position_angle.value, **kwargs) class PPVStatistic(SpatialBase): """ Compute properties of structures in a position-position-velocity (PPV) cube. Parameters ---------- structure : :class:`~astrodendro.structure.Structure` instance The structure to compute the statistics for metadata : dict Key-value pairs of metadata """ velocity_scale = MetadataQuantity('velocity_scale', 'Velocity channel width') vaxis = Metadata('vaxis', 'Index of velocity axis (numpy convention)', default=0) def __init__(self, stat, metadata=None): if isinstance(stat, Structure): self.stat = ScalarStatistic(stat.values(subtree=True), stat.indices(subtree=True)) else: self.stat = stat if len(self.stat.indices) != 3: raise ValueError("PPVStatistic can only be used on 3-d datasets") self.metadata = metadata or {} def _sky_paxes(self): vaxis = self.vaxis ax = [(1, 0, 0), (0, 1, 0), (0, 0, 1)] ax.pop(vaxis) a, b = self.stat.projected_paxes(tuple(ax)) a = list(a) a.insert(0, vaxis) b = list(b) b.insert(0, vaxis) return tuple(a), tuple(b) @property def x_cen(self): """ The mean position of the structure in the x direction. """ p = self._world_pos() return p[2] if self.vaxis != 2 else p[1] @property def y_cen(self): """ The mean position of the structure in the y direction. """ p = self._world_pos() return p[1] if self.vaxis == 0 else p[0] @property def v_cen(self): """ The mean velocity of the structure (where the velocity axis can be specified by the ``vaxis`` metadata parameter, which defaults to 0 following the Numpy convention - the third axis in the FITS convention). """ p = self._world_pos() return p[self.vaxis] @property def flux(self): """ The integrated flux of the structure, in Jy (note that this does not include any kind of background subtraction, and is just a plain sum of the values in the structure, converted to Jy). """ from .flux import compute_flux return compute_flux(self.stat.mom0() * self.data_unit, u.Jy, wavelength=self.wavelength, spatial_scale=self.spatial_scale, velocity_scale=self.velocity_scale, beam_major=self.beam_major, beam_minor=self.beam_minor) @property def v_rms(self): """ Intensity-weighted second moment of velocity (where the velocity axis can be specified by the ``vaxis`` metadata parameter, which defaults to 0 following the Numpy convention - the third axis in the FITS convention). """ dv = self.velocity_scale or u.pixel ax = [0, 0, 0] ax[self.vaxis] = 1 return dv * np.sqrt(self.stat.mom2_along(tuple(ax))) @property def position_angle(self): """ The position angle of sky_maj, sky_min in degrees counter-clockwise from the +x axis (note that this is the +x axis in pixel coordinates, which is the ``-x`` axis for conventional astronomy images). """ a, b = self._sky_paxes() a = list(a) a.pop(self.vaxis) return np.degrees(np.arctan2(a[0], a[1])) * u.degree @property def area_exact(self): """ The exact area of the structure on the sky. """ dx = self.spatial_scale or u.pixel indices = zip(*tuple(self.stat.indices[i] for i in range(3) if i != self.vaxis)) return len(set(indices)) * dx ** 2 class PPStatistic(SpatialBase): """ Compute properties of structures in a position-position (PP) cube. Parameters ---------- structure : :class:`~astrodendro.structure.Structure` instance The structure to compute the statistics for metadata : dict Key-value pairs of metadata """ def __init__(self, stat, metadata=None): if isinstance(stat, Structure): self.stat = ScalarStatistic(stat.values(subtree=True), stat.indices(subtree=True)) else: self.stat = stat if len(self.stat.indices) != 2: raise ValueError("PPStatistic can only be used on 2-d datasets") self.metadata = metadata or {} def _sky_paxes(self): return self.stat.paxes() @property def flux(self): """ The integrated flux of the structure, in Jy (note that this does not include any kind of background subtraction, and is just a plain sum of the values in the structure, converted to Jy). """ from .flux import compute_flux return compute_flux(self.stat.mom0() * self.data_unit, u.Jy, wavelength=self.wavelength, spatial_scale=self.spatial_scale, beam_major=self.beam_major, beam_minor=self.beam_minor) @property def position_angle(self): """ The position angle of sky_maj, sky_min in degrees counter-clockwise from the +x axis. """ a, b = self._sky_paxes() return np.degrees(np.arctan2(a[0], a[1])) * u.degree @property def x_cen(self): """ The mean position of the structure in the x direction (in pixel coordinates, or in world coordinates if the WCS transformation is available in the meta-data). """ return self._world_pos()[1] @property def y_cen(self): """ The mean position of the structure in the y direction (in pixel coordinates, or in world coordinates if the WCS transformation is available in the meta-data). """ return self._world_pos()[0] @property def area_exact(self): """ The exact area of the structure on the sky. """ dx = self.spatial_scale or u.pixel return self.stat.count() * dx ** 2 class PPPStatistic(object): def __init__(self, rhostat, vstat, metadata=None): """ Derive properties from PPP density and velocity fields. This is not currently implemented Parameters ---------- rhostat : ScalarStatistic instance vstat : VectorStatistic instance """ raise NotImplementedError() @property def mass(self): pass @property def volume(self): pass @property def surface_area(self): pass @property def virial(self): pass @property def v_rms(self): pass @property def vz_rms(self): pass @property def pressure_vz(self): pass @property def pressure(self): pass def _make_catalog(structures, fields, metadata, statistic, verbose=False): """ Make a catalog from a list of structures """ result = None try: shape_tuple = structures.data.shape except AttributeError: shape_tuple = None if verbose: print("Computing catalog for {0} structures".format(len(structures))) progress_bar = AnimatedProgressBar(end=max(len(structures), 1), width=40, fill='=', blank=' ') for struct in structures: values = struct.values(subtree=True) indices = np.copy(struct.indices(subtree=True)) if shape_tuple is not None: for index_array, shape in zip(indices, shape_tuple): # catch simple cases where a structure wraps around the image boundary i2 = np.where(index_array < shape/2, index_array+shape, index_array) if i2.ptp() < index_array.ptp(): # more compact with wrapping. Use this index_array[:] = i2 stat = ScalarStatistic(values, indices) stat = statistic(stat, metadata) row = {} for lbl in fields: row[lbl] = getattr(stat, lbl) row = dict((lbl, getattr(stat, lbl)) for lbl in fields) row.update(_idx=struct.idx) # first row if result is None: sorted_row_keys = sorted(row.keys()) try: result = Table(names=sorted_row_keys, dtype=[int if x == '_idx' else float for x in sorted_row_keys]) except TypeError: # dtype was called dtypes in older versions of Astropy result = Table(names=sorted_row_keys, dtypes=[int if x == '_idx' else float for x in sorted_row_keys]) for k, v in row.items(): try: # Astropy API change result[k].unit = _unit(v) except AttributeError: result[k].units = _unit(v) # astropy.table.Table should in future support setting row items from # quantities, but for now we need to strip off the quantities new_row = {} for x in row: if row[x] is not None: # in Astropy 0.3+ we no longer need to exclude None items if isinstance(row[x], Quantity): new_row[x] = row[x].value else: new_row[x] = row[x] result.add_row(new_row) # Print stats if verbose: progress_bar + 1 progress_bar.show_progress() result.sort('_idx') if verbose: progress_bar.progress = 100 # Done progress_bar.show_progress() print("") # newline return result def ppv_catalog(structures, metadata, fields=None, verbose=True): """ Iterate over a collection of position-position-velocity (PPV) structures, extracting several quantities from each, and building a catalog. Parameters ---------- structures : iterable of Structures The structures to catalog (e.g., a dendrogram) metadata : dict The metadata used to compute the catalog fields : list of strings, optional The quantities to extract. If not provided, defaults to all PPV statistics verbose : bool, optional If True (the default), will generate warnings about missing metadata Returns ------- table : a :class:`~astropy.table.table.Table` instance The resulting catalog """ fields = fields or ['major_sigma', 'minor_sigma', 'radius', 'area_ellipse', 'area_exact', 'position_angle', 'v_rms', 'x_cen', 'y_cen', 'v_cen', 'flux'] with warnings.catch_warnings(): warnings.simplefilter("once" if verbose else 'ignore', category=MissingMetadataWarning) warnings.simplefilter("once" if verbose else 'ignore', category=UnitMetadataWarning) return _make_catalog(structures, fields, metadata, PPVStatistic, verbose) def pp_catalog(structures, metadata, fields=None, verbose=True): """ Iterate over a collection of position-position (PP) structures, extracting several quantities from each, and building a catalog. Parameters ---------- structures : iterable of Structures The structures to catalog (e.g., a dendrogram) metadata : dict The metadata used to compute the catalog fields : list of strings, optional The quantities to extract. If not provided, defaults to all PPV statistics verbose : bool, optional If True (the default), will generate warnings about missing metadata Returns ------- table : a :class:`~astropy.table.table.Table` instance The resulting catalog """ fields = fields or ['major_sigma', 'minor_sigma', 'radius', 'area_ellipse', 'area_exact', 'position_angle', 'x_cen', 'y_cen', 'flux'] with warnings.catch_warnings(): warnings.simplefilter("once" if verbose else 'ignore', category=MissingMetadataWarning) return _make_catalog(structures, fields, metadata, PPStatistic, verbose) astrodendro-0.2.0+dfsg1.orig/astrodendro/plot.py0000644000175000017500000002006512773156651021220 0ustar noahfxnoahfx# Licensed under an MIT open source license - see LICENSE import numpy as np class DendrogramPlotter(object): """ A class to plot a dendrogram object. """ def __init__(self, dendrogram): # should we copy to ensure immutability? self.dendrogram = dendrogram self._cached_positions = None self.sort() def set_custom_positions(self, custom_position): """ Manually set the positon on the structures for plotting. Parameters ---------- custom_position : function This should be a function that takes a `~astrodendro.structure.Structure`returns the position of the leaves to use for plotting. If the dataset has more than one dimension, using this may cause lines to cross. If this is used, then ``sort_key`` and ``reverse`` are ignored. """ self._cached_positions = {} for structure in self.dendrogram.all_structures: self._cached_positions[structure] = custom_position(structure) def sort(self, sort_key=None, reverse=False): """ Sort the position of the leaves for plotting. Parameters ---------- sort_key : function, optional This should be a function that takes a `~astrodendro.structure.Structure` and returns a scalar that is then used to sort the leaves. If not specified, the leaves are sorted according to their peak value. reverse : bool, optional Whether to reverse the sorting """ if sort_key is None: sort_key = lambda s: s.get_peak(subtree=True)[1] sorted_trunk_structures = sorted(self.dendrogram.trunk, key=sort_key, reverse=reverse) positions = {} x = 0 # the first index for each trunk structure for structure in sorted_trunk_structures: # Get sorted leaves sorted_leaves = structure.sorted_leaves(subtree=True, reverse=reverse) # Loop over leaves and assign positions for leaf in sorted_leaves: positions[leaf] = x x += 1 # Sort structures from the top-down sorted_structures = sorted(structure.descendants, key=lambda s: s.level, reverse=True) + [structure] # Loop through structures and assing position of branches as the mean # of the leaves for structure in sorted_structures: if not structure.is_leaf: positions[structure] = np.mean([positions[child] for child in structure.children]) self._cached_positions = positions def plot_tree(self, ax, structure=None, subtree=True, autoscale=True, **kwargs): """ Plot the dendrogram tree or a substructure. Parameters ---------- ax : :class:`~matplotlib.axes.Axes` instance The Axes inside which to plot the dendrogram structure : int or `~astrodendro.structure.Structure`, optional If specified, only plot this structure. This can be either the structure object itself, or the ID (``idx``) of the structure. subtree : bool, optional If a structure is specified, by default the whole subtree will be plotted, but this can be disabled with this option. autoscale : bool, optional Whether to automatically adapt the window limits to the tree Notes ----- Any additional keyword arguments are passed to `~matplotlib.collections.LineCollection` and can be used to control the appearance of the plot. """ # Get the lines for the dendrogram lines = self.get_lines(structures=structure, **kwargs) # Add the lines to the axes ax.add_collection(lines) # Auto-scale axes (doesn't happen by default with ``add_collection``) if autoscale: ax.margins(0.05) ax.autoscale_view(True, True, True) def plot_contour(self, ax, structure=None, subtree=True, slice=None, **kwargs): """ Plot a contour outlining all pixels in the dendrogram, or a specific. structure. Parameters ---------- ax : :class:`~matplotlib.axes.Axes` instance The Axes inside which to plot the dendrogram structure : int or `~astrodendro.structure.Structure`, optional If specified, only plot this structure. This can be either the structure object itself, or the ID (``idx``) of the structure. subtree : bool, optional If a structure is specified, by default the whole subtree will be plotted, but this can be disabled with this option. slice : int, optional If dealing with a 3-d cube, the slice at which to plot the contour. If not set, the slice containing the peak of the structure will be shown Notes ----- Any additional keyword arguments are passed to `~matplotlib.axes.Axes.contour` and can be used to control the appearance of the plot. """ if self.dendrogram.data.ndim not in [2, 3]: raise ValueError("plot_data can only be used with 2- or 3-dimensional data") if structure is None: mask = self.dendrogram.data > self.dendrogram.params['min_value'] else: if type(structure) is int: structure = self.dendrogram[structure] mask = structure.get_mask(subtree=subtree) if self.dendrogram.data.ndim == 3: if slice is None: peak_index = structure.get_peak(subtree=subtree) slice = peak_index[0][0] mask = mask[slice, :, :] # fix a common mistake when trying to set the color of contours if 'color' in kwargs and 'colors' not in kwargs: kwargs['colors'] = kwargs['color'] ax.contour(mask, levels=[0.5], **kwargs) def get_lines(self, structures=None, subtree=True, **kwargs): """ Get a collection of lines to draw the dendrogram. Parameters ---------- structures : :class:`~astrodendro.structure.Structure` The structures to plot. If not set, the whole tree will be plotted. subtree : bool, optional If a structure is specified, by default the whole subtree will be retrieved, but this can be disabled with this option. Returns ------- lines : :class:`~astrodendro.plot.StructureCollection` The lines (sub-class of LineCollection) which can be directly used in Matplotlib Notes ----- Any additional keyword arguments are passed to the `~matplotlib.collections.LineCollection` class. """ if self._cached_positions is None: raise Exception("Leaves have not yet been sorted") # Case 1: no structures are selected if structures is None: structures = list(self.dendrogram.all_structures) # Case 2: one structure is selected, and subtree is True else: if subtree: if type(structures[0]) is int: structure = self.dendrogram[structures[0]] else: structure = structures[0] structures = structure.descendants + [structure] # Case 3: subtree is False (do nothing special to `structures`) lines = [] mapping = [] for s in structures: x = self._cached_positions[s] bot = s.parent.height if s.parent is not None else s.vmin top = s.height lines.append(([x, bot], [x, top])) mapping.append(s) if s.is_branch: pc = [self._cached_positions[c] for c in s.children] lines.append(([min(pc), top], [max(pc), top])) mapping.append(s) from .structure_collection import StructureCollection sc = StructureCollection(lines, **kwargs) sc.structures = mapping return sc astrodendro-0.2.0+dfsg1.orig/astrodendro/dendrogram.py0000644000175000017500000007372412773156651022376 0ustar noahfxnoahfx# Licensed under an MIT open source license - see LICENSE # Notes: # - A structure is a Leaf or a Branch # - An ancestor is the largest structure that a structure is part of import numpy as np from collections import Iterable import copy import warnings from .structure import Structure from .progressbar import AnimatedProgressBar from .io import IO_FORMATS from . import pruning from . import six def _sorted_by_idx(d): return sorted(d, key=lambda s: s.idx) # utility dict to offsets of adjacent pixel list _offsets = dict((ndim, np.concatenate(( np.identity(ndim), np.identity(ndim) * -1)).astype(np.int)) for ndim in range(1, 8)) # the formula above generalizes this special case #_offsets[3] = np.array([(0, 0, -1), (0, 0, 1), # (0, -1, 0), (0, 1, 0), # (-1, 0, 0), (1, 0, 0)]) class Dendrogram(object): """ This class is used to compute and represent a dendrogram for a given dataset. To create a dendrogram from an array, use the :meth:`~astrodendro.dendrogram.Dendrogram.compute` class method:: >>> from astrodendro import Dendrogram >>> d = Dendrogram.compute(array) Once the dendrogram has been computed, you can explore it programmatically using the ``trunk`` attribute, which allows you to access the base-level structures in the dendrogram:: >>> d.trunk [, , , ] Structures can then be recursively explored. For more information on attributes and methods available for structures, see the :class:`~astrodendro.structure.Structure` class. The dendrogram can also be explored using an interactive viewer. To use this, use the :meth:`~astrodendro.dendrogram.Dendrogram.viewer` method:: >>> d.viewer() and an interactive Matplotlib window should open. Finally, the :meth:`~astrodendro.dendrogram.Dendrogram.plotter` method can be used to facilitate the creation of plots: >>> p = d.plotter() For more information on using the plotter and other aspects of the :class:`~astrodendro.dendrogram.Dendrogram` class, see the online documentation. """ def __init__(self): self.data = None self.n_dim = 0 # Put in a friendly error message to make sure nobody confuses the # static methods for creating a dendrogram with instance methods: def static_warning(self, *args, **kwargs): err = "Invalid use of static method. Try d=Dendrogram.compute(data)" err += " or d=Dendrogram.load_from(file)" raise AttributeError(err) self.compute = static_warning self.load_from = static_warning @staticmethod def compute(data, min_value="min", min_delta=0, min_npix=0, is_independent=None, verbose=False, neighbours=None, wcs=None): """ Compute a dendrogram from a Numpy array. Parameters ---------- data : :class:`numpy.ndarray` The n-dimensional array to compute the dendrogram for min_value : float or "min", optional The minimum data value to go down to when computing the dendrogram. Values below this threshold will be ignored. Defaults to the minimum value in the data. min_delta : float, optional The minimum height a leaf has to have in order to be considered an independent entity. min_npix : int, optional The minimum number of pixels/values needed for a leaf to be considered an independent entity. is_independent : function or list of functions, optional A custom function that can be specified that will determine if a leaf can be treated as an independent entity. The signature of the function should be ``func(structure, index=None, value=None)`` where ``structure`` is the structure under consideration, and ``index`` and ``value`` are optionally the pixel that is causing the structure to be considered for merging into/attaching to the tree. If multiple functions are provided as a list, they are all applied when testing for independence. neighbours : function, optional A function that returns the list of neighbours to a given location. Neighbours is called as ``neighbours(dendrogram, idx)``, where ``idx`` is a tuple describing the n-dimensional location of a pixel. It returns a list of N-dimensional locations of neighbours. This function can implement optional adjacency logic. .. note:: ``idx`` refers to location in a copy of the input data that has been padded with one element along each edge. wcs : WCS object, optional A WCS object that describes `data`. This is used in the interactive viewer to properly display the data's coordinates on the image axes. (Requires that `wcsaxes` is installed; see http://wcsaxes.readthedocs.org/ for install instructions.) Examples -------- The following example demonstrates how to compute a dendrogram from an dataset contained in a FITS file:: >>> from astropy.io import fits >>> array = fits.getdata('observations.fits') >>> from astrodendro import Dendrogram >>> d = Dendrogram.compute(array) Notes ----- More information about the above parameters is available from the online documentation at [www.dendrograms.org](www.dendrograms.org). """ tests = [pruning.min_delta(min_delta), pruning.min_npix(min_npix)] if is_independent is not None: if hasattr(is_independent, '__iter__'): tests.extend(is_independent) else: tests.append(is_independent) is_independent = pruning.all_true(tests) neighbours = neighbours or Dendrogram.neighbours # Default min_val to the minimum in the data if min_value == "min": min_value = np.min(data[np.isfinite(data)]) - 1 self = Dendrogram() self.data = data self.n_dim = len(data.shape) self.wcs = wcs # For reference, store the parameters used: self.params = dict(min_npix=min_npix, min_value=min_value, min_delta=min_delta) # Create a list of all points in the cube above min_value keep = self.data > min_value data_values = self.data[keep] indices = np.vstack(np.where(keep)).transpose() if verbose: print("Generating dendrogram using {:,} of {:,} pixels ({}% of data)".format(data_values.size, self.data.size, (100 * data_values.size / self.data.size))) progress_bar = AnimatedProgressBar(end=max(data_values.size, 1), width=40, fill='=', blank=' ') # Define index array indicating what structure each cell is part of # We expand each dimension by one, so the last value of each # index (accessed with e.g. [nx,#,#] or [-1,#,#]) is always zero # This permits an optimization below when finding adjacent structures self.index_map = -np.ones(np.add(self.data.shape, 1), dtype=np.int32) # Dictionary of currently-defined structures: structures = {} # Loop from largest to smallest data_value value. Each time, check if # the pixel connects to any existing leaf. Otherwise, create new leaf. count = 0 for i in np.argsort(data_values)[::-1]: def next_idx(): return i + 1 # Generate IDs index i. We add one to avoid ID 0 data_value = data_values[i] coord = tuple(indices[i]) # Print stats count += 1 if verbose and (count % 100 == 0): progress_bar + 100 progress_bar.show_progress() # Check if point is adjacent to any leaf # We don't worry about the edges, because overflow or underflow in # any one dimension will always land on an extra "padding" cell # with value zero added above when index_map was created indices_adjacent = neighbours(self, indices[i]) adjacent = [self.index_map[c] for c in indices_adjacent if self.index_map[c] > -1] # Replace adjacent elements by its ancestor adjacent = [structures[a].ancestor for a in adjacent] # Remove duplicates adjacent = _sorted_by_idx(set(adjacent)) # What happens next depends on how many unique adjacent structures there are if not adjacent: # No adjacent structures; Create new leaf: # Set absolute index of the new element idx = next_idx() # Create leaf leaf = Structure(coord, data_value, idx=idx, dendrogram=self) # Add leaf to overall list structures[idx] = leaf # Set absolute index of pixel in index map self.index_map[coord] = idx elif len(adjacent) == 1: # Add to existing leaf or branch # Add point to structure adjacent[0]._add_pixel(coord, data_value) # Set absolute index of pixel in index map self.index_map[coord] = adjacent[0].idx else: # Merge leaves # At this stage, the adjacent structures might consist of an # arbitrary number of leaves and branches. # Find all leaves that are not important enough to be # kept separate. These leaves will now be treated the # same as the pixel under consideration merge = [structure for structure in adjacent if structure.is_leaf and (structure.vmax == data_value or not is_independent(structure, index=coord, value=data_value))] # Remove merges from list of adjacent structures for structure in merge: adjacent.remove(structure) # Now, figure out what object this pixel belongs to # How many significant adjacent structures are left? if not adjacent: # if len(adjacent) == 0: # There are no separate leaves left (and no branches), so pick the # first one as the reference and merge all the others onto it belongs_to = merge.pop() belongs_to._add_pixel(coord, data_value) elif len(adjacent) == 1: # There is one significant adjacent leaf/branch left. belongs_to = adjacent[0] belongs_to._add_pixel(coord, data_value) else: # Create a branch belongs_to = Structure(coord, data_value, children=adjacent, idx=next_idx(), dendrogram=self) # Add branch to overall list structures[belongs_to.idx] = belongs_to # Set absolute index of pixel in index map self.index_map[coord] = belongs_to.idx # Add all insignificant leaves in 'merge' to the same object as this pixel: for m in merge: # print "Merging leaf %i onto leaf %i" % (i, idx) # Remove leaf structures.pop(m.idx) # Merge the insignificant structure that this pixel now belongs to: belongs_to._merge(m) # Update index map m._fill_footprint(self.index_map, belongs_to.idx) if verbose: progress_bar.progress = 100 # Done progress_bar.show_progress() print("") # newline # Create trunk from objects with no ancestors _make_trunk(self, structures, is_independent) # Save a list of all structures accessible by ID self._structures_dict = {} # Re-assign idx and update index map sorted_structures = sorted(self, key=lambda s: s.smallest_index) for idx, s in enumerate(sorted_structures): s.idx = idx s._fill_footprint(self.index_map, idx, recursive=False) self._structures_dict[idx] = s # Remove border from index map s = tuple(slice(0, s, 1) for s in data.shape) self.index_map = self.index_map[s] # Add dendrogram index self._index() # Return the newly-created dendrogram: return self def _index(self): # add dendrogram index ti = TreeIndex(self) for s in six.itervalues(self._structures_dict): s._tree_index = ti def neighbours(self, idx): """ Return a list of indices to the neighbours of a given pixel. This method can be overridden to handle custom layouts (e.g., healpix maps, periodic boundaries, etc.) Parameters ---------- idx : tuple The N-dimensional location of a pixel in the data Returns ------- List of N-dimensional locations of each neighbour """ return [tuple(c) for c in np.add(_offsets[self.n_dim], idx)] @property def trunk(self): """ A list of all structures that have no parent structure and form the base of the tree. """ return self._trunk @trunk.setter def trunk(self, value): self._trunk = value @staticmethod def load_from(filename, format=None): """ Load a previously computed dendrogram from a file. Parameters ---------- filename : str The name of the file to load the dendrogram from. By default, the file format will be automatically detected from the file extension. At this time, only HDF5 files (extension ``.hdf5``) are supported. format : str, optional The format to use to read the file. By default, this is not used and the format is auto-detected from the file extension. At this time, the only format supported is ``'hdf5'``. """ from .io import load_dendrogram return load_dendrogram(filename, format=format) def save_to(self, filename, format=None): """ Save the dendrogram to a file. Parameters ---------- filename : str The name of the file to save the dendrogram to. By default, the file format will be automatically detected from the file extension. At this time, only HDF5 files (extension ``.hdf5``) are supported. format : str, optional The format to use for the file. By default, this is not used and the format is auto-detected from the file extension. At this time, the only format supported is ``'hdf5'``. """ from .io import save_dendrogram return save_dendrogram(self, filename, format=format) @property def leaves(self): """ A flattened list of all leaves in the dendrogram. """ return [i for i in six.itervalues(self._structures_dict) if i.is_leaf] def to_newick(self): #this caches newicks, and prevents too much recursion [s.newick for s in reversed(list(self.all_structures))] return "(%s);" % ','.join([structure.newick for structure in self.trunk]) def structure_at(self, indices): """ Get the structure at the specified pixel coordinate. This will return None if no structure includes the specified pixel coordinates. Parameters ---------- indices: tuple The pixel coordinates of the structure of interest """ if len(indices) != self.index_map.ndim: raise ValueError("Must have {0:d} indices for data with {0:d} dimensions.".format(self.index_map.ndim)) # Needs to be a tuple; indexing with a list or array will return multiple idx = self.index_map[tuple(indices)] if idx > -1: return self._structures_dict[idx] return None @property def all_structures(self): """ Yields an iterator over all structures in the dendrogram, in prefix order. """ todo = list(self.trunk) while len(todo) > 0: st = todo.pop(0) yield st todo = st.children + todo def __getitem__(self, key): """Fetch structures by index value""" return self._structures_dict[key] def __len__(self): """Return number of structures in dendrogram""" return len(self._structures_dict) def __iter__(self): return self.all_structures def __eq__(self, other): if not isinstance(other, Dendrogram): return False if not (self.data == other.data).all(): return False if self.params['min_value'] != other.params['min_value']: return False self_params = self.params.copy() other_params = other.params.copy() self_params.pop('min_value') other_params.pop('min_value') # Hack for not comparing params that have not been set # There is currently no explicit way to tell if it has not been set # We assume that if it is =0, then it is not set and won't be compared for key in self_params.keys(): if self_params[key] == 0 or other_params[key] == 0: continue if self_params[key] != other_params[key]: return False # structures should have the same extent, # but idx values need not be identical. This # tests the index map for that u, ind = np.unique(self.index_map, return_index=True) u, ind2 = np.unique(self.index_map, return_index=True) return (np.sort(ind) == np.sort(ind2)).all() def plotter(self): """ Return a :class:`~astrodendro.plot.DendrogramPlotter` instance that makes it easier to construct plots. """ from .plot import DendrogramPlotter return DendrogramPlotter(self) def viewer(self): """ Launch an interactive viewer to explore the dendrogram. This functionality is only available for 2- or 3-d datasets. """ from .viewer import BasicDendrogramViewer return BasicDendrogramViewer(self) def prune(self, min_delta=0, min_npix=0, is_independent=None): ''' Prune a dendrogram after it has been computed. Parameters ---------- min_delta : float, optional The minimum height a leaf has to have in order to be considered an independent entity. min_npix : int, optional The minimum number of pixels/values needed for a leaf to be considered an independent entity. is_independent : function or list of functions, optional A custom function that can be specified that will determine if a leaf can be treated as an independent entity. The signature of the function should be ``func(structure, index=None, value=None)`` where ``structure`` is the structure under consideration, and ``index`` and ``value`` are optionally the pixel that is causing the structure to be considered for merging into/attaching to the tree. If multiple functions are provided as a list, they are all applied when testing for independence. ''' # If params set to zero, set equal to value form self.params if min_delta == 0: min_delta = self.params["min_delta"] if min_npix == 0: min_npix = self.params["min_npix"] # Check if params are too restrictive. if min_delta < self.params["min_delta"]: warnings.warn("New min_delta (%s) is less than the current min_delta \ (%s). No leaves can be pruned." \ % (min_delta, self.params["min_delta"])) else: # Update params self.params["min_delta"] = min_delta if min_npix < self.params["min_npix"]: warnings.warn("New min_npix (%s) is less than the current min_npix \ (%s). No leaves can be pruned." \ % (min_npix, self.params["min_npix"])) else: # Updates params self.params["min_npix"] = min_npix tests = [pruning.min_delta(min_delta), pruning.min_npix(min_npix)] if is_independent is not None: if isinstance(is_independent, Iterable): tests.extend(is_independent) else: tests.append(is_independent) is_independent = pruning.all_true(tests) keep_structures = self._structures_dict.copy() # Continue until there are no more leaves to prune. for struct in _to_prune(self, keep_structures, is_independent): # merge struct parent = struct.parent siblings = parent.children # If leaf has one other sibling, merge both into the parent if len(siblings) == 2: merge = copy.copy(siblings) # If leaf has multiple siblings, merge leaf into parent elif len(siblings) > 2: merge = [struct] # Merge structures into the parent for m in merge: _merge_with_parent(m, self.index_map) # Remove this structure del keep_structures[m.idx] # Create trunk from objects with no ancestors _make_trunk(self, keep_structures, is_independent) # Save a list of all structures accessible by ID self._structures_dict = keep_structures self._index() # XXX check if this is OK with non-packed idx values return self class TreeIndex(object): def __init__(self, dendrogram): """ Object that efficiently extracts the locations of Structures in an ndarray. Parameters ---------- dendrogram : Dendrogram instance The dendrogram to index """ index_map = dendrogram.index_map trunk = dendrogram.trunk sz = index_map.size nd = len(index_map.shape) assert sz == dendrogram.data.size assert index_map.min() >= -1 #map ids to [0, 1, ...] for storage efficiency uniq, bins = np.unique(index_map, return_inverse=True) packed = dict((u, i) for i, u in enumerate(uniq)) flat_idx = index_map.ravel() ri = np.argsort(bins) idx_ct = np.bincount(bins) idx_sub_ct = {} idx_cdf = np.hstack((0, np.cumsum(idx_ct))) #efficiently build up npix values structures = reversed(sorted(dendrogram._structures_dict.values(), key=lambda x: x.level)) for st in structures: idx_sub_ct[st.idx] = idx_ct[packed[st.idx]] idx_sub_ct[st.idx] += sum(idx_sub_ct[c.idx] for c in st.children) #build a 1D index array with the following properties # - values in index reference locations in flattened index_map # - every structure (+ subtree) is a continuous slice of index # - index[offset[i]] is the first location for (packed) structure i # - npix[i] gives number of pixels in (packed) structure i, # exluding subtree # - npix_subtree[i] is like above, but includes subtrees # # In summary, the locations in the flattened_index map # for structure i excluding subrees is # pi = packed[i] # index[offset[pi] : offset[pi] + npix[pi]] # and including subtrees is # index[offset[pi] : offset[pi] + npix_subtree[pi]] offset = np.zeros(idx_ct.size, dtype=np.int) npix = offset * 0 npix_subtree = offset * 0 index = -np.ones(sz, dtype=np.int) order = dendrogram.all_structures pos = 0 for o in order: sid = packed[o.idx] offset[sid] = pos npix[sid] = idx_ct[sid] npix_subtree[sid] = idx_sub_ct[o.idx] idx = ri[idx_cdf[sid]: idx_cdf[sid] + npix[sid]] assert (flat_idx[idx] == o.idx).all() index[pos: pos + npix[sid]] = idx pos += npix[sid] #turn inds back into an ndim index self._index = tuple(n.ravel()[index] for n in np.indices(index_map.shape)) self._data = dendrogram.data self._offset = offset self._npix = npix self._npix_subtree = npix_subtree self.packed = packed def indices(self, sid, subtree=True): """ Return pixel indices associated with a dendrogram structure. Returns the pixels in the original dendrogram array which are associated with a particular structure id. Parameters ---------- sid : integer The structure index to lookup. Stored in `Structure.idx` subtree : bool, optional If true, return indices for subtrees as well. Default=False Returns ------- A tuple of integer ndarrays, akin to np.where(). This can be directly used as an index into the dendrogram data array """ sid = self.packed[sid] i0 = self._offset[sid] di = self._npix_subtree[sid] if subtree else self._npix[sid] return tuple(ind[i0: i0 + di] for ind in self._index) def values(self, sid, subtree=True): return self._data[self.indices(sid, subtree=subtree)] def periodic_neighbours(axes): """ Utility for computing neighbours on datasets with periodic boundaries. This can be passed to the neighbours keyword of :meth:`Dendrogram.compute` Parameters ---------- axes : integer, or list of integers Which axes of the data are periodic Example ------- Build a dendrogram where the 0th axis wraps from top-to-bottom:: Dendrogram.compute(data, neighbours=periodic_neighbours(0)) """ try: axes[0] except TypeError: axes = [axes] def _wrap(c, shp): # note: shp is padded along each dimension, # so values to wrap occur -1, len-1 for a in axes: if c[a] < 0: c[a] = shp[a] - 2 elif c[a] == shp[a] - 1: c[a] = 0 return tuple(c) def result(dendrogram, idx): return [_wrap(c, dendrogram.index_map.shape) for c in np.add(_offsets[dendrogram.n_dim], idx)] return result def _to_prune(dendrogram, keep_structures, is_independent): ''' Yields a sequence of leaves which need to be pruned. Parameters ---------- dendrogram : Dendrogram Computed dendrogram. keep_structures : dict Contains all structures in the dendrogram. is_independent : function or list of functions, optional A custom function that can be specified that will determine if a leaf can be treated as an independent entity. ''' while True: for struct in dendrogram.all_structures: if not struct.is_leaf: continue if struct.idx not in keep_structures: # structure already deleted continue if is_independent(struct): # passes prune test continue parent = struct.parent # deal with trunks later if parent is None: continue yield struct break else: return def _merge_with_parent(m, index_map): ''' Merge a given structure into the parent. Parameters ---------- m : Structure The structure to be merged. index_map : numpy.ndarray Index map from the dendrogram. ''' parent = m.parent # Change branches coordinates to parent's m._fill_footprint(index_map, parent.idx, recursive=False) # Merge branch into parent parent._merge(m) parent.children.remove(m) # If the sibling is a branch, append on its children to the parent # and update the children's parent. if m.is_branch: parent.children.extend(m.children) for child in m.children: child.parent = parent def _make_trunk(dendrogram, keep_structures, is_independent): ''' Creates the trunk and prunes off orphan leaves. Parameters ---------- dendrogram : Dendrogram Computed dendrogram. keep_structures : dict Contains all structures in the dendrogram. is_independent : function or list of functions, optional A custom function that can be specified that will determine if a leaf can be treated as an independent entity. ''' dendrogram.trunk = _sorted_by_idx([structure for structure in six.itervalues(keep_structures) if structure.parent is None]) # Remove orphan leaves that aren't large enough leaves_in_trunk = [structure for structure in dendrogram.trunk if structure.is_leaf] for leaf in leaves_in_trunk: if not is_independent(leaf): # This leaf is an orphan, so remove all references to it: keep_structures.pop(leaf.idx) dendrogram.trunk.remove(leaf) leaf._fill_footprint(dendrogram.index_map, -1) # To make the structure.level property fast, we ensure all the structures in the # trunk have their level cached as "0" for structure in dendrogram.trunk: structure._level = 0 # See the definition of level() in structure.pyastrodendro-0.2.0+dfsg1.orig/astrodendro/viewer.py0000644000175000017500000003027112773156651021543 0ustar noahfxnoahfx# Licensed under an MIT open source license - see LICENSE from collections import defaultdict import warnings import numpy as np from .plot import DendrogramPlotter class SelectionHub(object): """ The SelectionHub manages a set of selected Dendrogram structures. Callback functions can be registered to the Hub, to be notified when a selection changes. """ def __init__(self): # map selection IDs -> list of selected dendrogram IDs self.selections = {} self.select_subtree = {} # map selection IDs -> bool self.colors = defaultdict(lambda: 'red') self.colors[1] = '#e41a1c' self.colors[2] = '#377eb8' self.colors[3] = '#4daf4a' # someday we may provide a UI to update what goes in colordict. self._callbacks = [] def add_callback(self, method): """ Register a new callback function to be invoked whenever the selection changes The callback will be called as method(id), where id is the modified selection id """ self._callbacks.append(method) def select(self, id, structures, subtree=True): """ Select new structures, and associate them with a selection ID Parameters ----------- id : int structures : list of Dendrogram Structures to select """ if not isinstance(structures, list): structures = [structures] self.selections[id] = structures self.select_subtree[id] = subtree for cb in self._callbacks: cb(id) class BasicDendrogramViewer(object): def __init__(self, dendrogram): if dendrogram.data.ndim not in [2, 3]: raise ValueError( "Only 2- and 3-dimensional arrays are supported at this time") self.hub = SelectionHub() self._connect_to_hub() self.array = dendrogram.data self.dendrogram = dendrogram self.plotter = DendrogramPlotter(dendrogram) self.plotter.sort(reverse=True) # Get the lines as individual elements, and the mapping from line to structure self.lines = self.plotter.get_lines(edgecolor='k') # Define the currently selected subtree self.selected_lines = {} self.selected_contour = {} # The keys in these dictionaries are event button IDs. # Initiate plot import matplotlib.pyplot as plt self.fig = plt.figure(figsize=(14, 8)) ax_image_limits = [0.1, 0.1, 0.4, 0.7] try: from wcsaxes import WCSAxes __wcaxes_imported = True except ImportError: __wcaxes_imported = False if self.dendrogram.wcs is not None: warnings.warn("`WCSAxes` package required for wcs coordinate display.") if self.dendrogram.wcs is not None and __wcaxes_imported: if self.array.ndim == 2: slices = ('x', 'y') else: slices = ('x', 'y', 1) ax_image = WCSAxes(self.fig, ax_image_limits, wcs=self.dendrogram.wcs, slices=slices) self.ax_image = self.fig.add_axes(ax_image) else: self.ax_image = self.fig.add_axes(ax_image_limits) from matplotlib.widgets import Slider self._clim = (np.min(self.array[~np.isnan(self.array) & ~np.isinf(self.array)]), np.max(self.array[~np.isnan(self.array) & ~np.isinf(self.array)])) if self.array.ndim == 2: self.slice = None self.image = self.ax_image.imshow(self.array, origin='lower', interpolation='nearest', vmin=self._clim[0], vmax=self._clim[1], cmap=plt.cm.gray) self.slice_slider = None else: if self.array.shape[0] > 1: self.slice = int(round(self.array.shape[0] / 2.)) self.slice_slider_ax = self.fig.add_axes([0.1, 0.95, 0.4, 0.03]) self.slice_slider_ax.set_xticklabels("") self.slice_slider_ax.set_yticklabels("") self.slice_slider = Slider(self.slice_slider_ax, "3-d slice", 0, self.array.shape[0], valinit=self.slice, valfmt="%i") self.slice_slider.on_changed(self.update_slice) self.slice_slider.drawon = False else: self.slice = 0 self.slice_slider = None self.image = self.ax_image.imshow(self.array[self.slice, :,:], origin='lower', interpolation='nearest', vmin=self._clim[0], vmax=self._clim[1], cmap=plt.cm.gray) self.vmin_slider_ax = self.fig.add_axes([0.1, 0.90, 0.4, 0.03]) self.vmin_slider_ax.set_xticklabels("") self.vmin_slider_ax.set_yticklabels("") self.vmin_slider = Slider(self.vmin_slider_ax, "vmin", self._clim[0], self._clim[1], valinit=self._clim[0]) self.vmin_slider.on_changed(self.update_vmin) self.vmin_slider.drawon = False self.vmax_slider_ax = self.fig.add_axes([0.1, 0.85, 0.4, 0.03]) self.vmax_slider_ax.set_xticklabels("") self.vmax_slider_ax.set_yticklabels("") self.vmax_slider = Slider(self.vmax_slider_ax, "vmax", self._clim[0], self._clim[1], valinit=self._clim[1]) self.vmax_slider.on_changed(self.update_vmax) self.vmax_slider.drawon = False self.ax_dendrogram = self.fig.add_axes([0.6, 0.3, 0.35, 0.4]) self.ax_dendrogram.add_collection(self.lines) self.selected_label = {} # map selection IDs -> text objects self.selected_label[1] = self.fig.text(0.6, 0.85, "No structure selected", fontsize=18, color=self.hub.colors[1]) self.selected_label[2] = self.fig.text(0.6, 0.8, "No structure selected", fontsize=18, color=self.hub.colors[2]) self.selected_label[3] = self.fig.text(0.6, 0.75, "No structure selected", fontsize=18, color=self.hub.colors[3]) x = [p.vertices[:, 0] for p in self.lines.get_paths()] y = [p.vertices[:, 1] for p in self.lines.get_paths()] xmin = np.min(x) xmax = np.max(x) ymin = np.min(y) ymax = np.max(y) self.lines.set_picker(2.) self.lines.set_zorder(0) dx = xmax - xmin self.ax_dendrogram.set_xlim(xmin - dx * 0.1, xmax + dx * 0.1) self.ax_dendrogram.set_ylim(ymin * 0.5, ymax * 2.0) self.ax_dendrogram.set_yscale('log') self.fig.canvas.mpl_connect('pick_event', self.line_picker) self.fig.canvas.mpl_connect('button_press_event', self.select_from_map) def show(self): import matplotlib.pyplot as plt plt.show() def update_slice(self, pos=None): if self.array.ndim == 2: self.image.set_array(self.array) else: self.slice = int(round(pos)) self.image.set_array(self.array[self.slice, :, :]) self.update_contours() self.fig.canvas.draw() def _connect_to_hub(self): self.hub.add_callback(self._on_selection_change) def _on_selection_change(self, selection_id): self._update_lines(selection_id) self.update_contours() self.fig.canvas.draw() def update_vmin(self, vmin): if vmin > self._clim[1]: self._clim = (self._clim[1], self._clim[1]) else: self._clim = (vmin, self._clim[1]) self.image.set_clim(*self._clim) self.fig.canvas.draw() def update_vmax(self, vmax): if vmax < self._clim[0]: self._clim = (self._clim[0], self._clim[0]) else: self._clim = (self._clim[0], vmax) self.image.set_clim(*self._clim) self.fig.canvas.draw() def select_from_map(self, event): # Only do this if no tools are currently selected if event.canvas.toolbar.mode != '': return if event.button not in self.selected_label: return if event.inaxes is self.ax_image: input_key = event.button # Find pixel co-ordinates of click ix = int(round(event.xdata)) iy = int(round(event.ydata)) if self.array.ndim == 2: indices = (iy, ix) else: indices = (self.slice, iy, ix) # Select the structure structure = self.dendrogram.structure_at(indices) self.hub.select(input_key, structure) # Re-draw event.canvas.draw() def line_picker(self, event): # Only do this if no tools are currently selected if event.canvas.toolbar.mode != '': return if event.mouseevent.button not in self.selected_label: return input_key = event.mouseevent.button # event.ind gives the indices of the paths that have been selected # Find levels of selected paths peaks = [event.artist.structures[i].get_peak(subtree=True)[1] for i in event.ind] # Find position of minimum level (may be duplicates, let Numpy decide) ind = event.ind[np.argmax(peaks)] # Extract structure structure = event.artist.structures[ind] # If 3-d, select the slice if self.slice_slider is not None: peak_index = structure.get_peak(subtree=True) self.slice_slider.set_val(peak_index[0][0]) # Select the structure self.hub.select(input_key, structure) # Re-draw event.canvas.draw() def _update_lines(self, selection_id): structures = self.hub.selections[selection_id] select_subtree = self.hub.select_subtree[selection_id] structure = structures[0] # Remove previously selected collection if selection_id in self.selected_lines: self.ax_dendrogram.collections.remove(self.selected_lines[selection_id]) del self.selected_lines[selection_id] if structure is None: self.selected_label[selection_id].set_text("No structure selected") self.remove_contour(selection_id) self.fig.canvas.draw() return self.remove_all_contours() if len(structures) <= 1: label_text = "Selected structure: {0}".format(structure.idx) elif len(structures) <=3: label_text = "Selected structures: {0}".format(', '.join([str(structure.idx) for structure in structures])) else: label_text = "Selected structures: {0}...".format(', '.join([str(structure.idx) for structure in structures[:3]])) self.selected_label[selection_id].set_text(label_text) # Get collection for this substructure self.selected_lines[selection_id] = self.plotter.get_lines( structures=structures, subtree=select_subtree) self.selected_lines[selection_id].set_color(self.hub.colors[selection_id]) self.selected_lines[selection_id].set_linewidth(2) self.selected_lines[selection_id].set_zorder(structure.height) # Add to axes self.ax_dendrogram.add_collection(self.selected_lines[selection_id]) def remove_contour(self, selection_id): if selection_id in self.selected_contour: for collection in self.selected_contour[selection_id].collections: self.ax_image.collections.remove(collection) del self.selected_contour[selection_id] def remove_all_contours(self): """ Remove all selected contours. """ for key in self.selected_contour.keys(): self.remove_contour(key) def update_contours(self): self.remove_all_contours() for selection_id in self.hub.selections.keys(): structures = self.hub.selections[selection_id] select_subtree = self.hub.select_subtree[selection_id] struct = structures[0] if struct is None: continue if select_subtree: mask = struct.get_mask(subtree=True) else: mask = reduce(np.add, [structure.get_mask(subtree=True) for structure in structures]) if self.array.ndim == 3: mask = mask[self.slice, :, :] self.selected_contour[selection_id] = self.ax_image.contour( mask, colors=self.hub.colors[selection_id], linewidths=2, levels=[0.5], alpha=0.75, zorder=struct.height) astrodendro-0.2.0+dfsg1.orig/astrodendro/flux.py0000644000175000017500000001552412773156651021224 0ustar noahfxnoahfximport warnings import numpy as np from astropy import units as u from astropy.constants import si class UnitMetadataWarning(UserWarning): pass def quantity_sum(quantities): """ In Astropy 0.3, np.sum will do the right thing for quantities, but in the mean time we need a workaround. """ return np.sum(quantities.value) * quantities.unit def compute_flux(input_quantities, output_unit, wavelength=None, spatial_scale=None, velocity_scale=None, beam_major=None, beam_minor=None): """ Given a set of flux values in arbitrary units, find the total flux in a specific set of units. Parameters ---------- input_quantities : :class:`~astropy.units.quantity.Quantity` instance A `astropy.units.quantity.Quantity` instance containing an array of flux values to be summed. output_unit : :class:`~astropy.units.core.Unit` instance The final unit to give the total flux in (should be equivalent to Jy) wavelength : :class:`~astropy.units.quantity.Quantity` instance The wavelength of the data (required if converting e.g. ergs/cm^2/s/micron to Jy) spatial_scale : :class:`~astropy.units.quantity.Quantity` instance The pixel scale of the data (should be an angle) velocity_scale : :class:`~astropy.units.quantity.Quantity` instance The pixel scale of the data (should be a velocity) beam_major : :class:`~astropy.units.quantity.Quantity` instance The beam major full width at half_maximum (FWHM) beam_minor : :class:`~astropy.units.quantity.Quantity` instance The beam minor full width at half_maximum (FWHM) """ # Start off by finding the total flux in Jy if input_quantities.unit.is_equivalent(u.Jy): # Fnu # Simply sum up the values and convert to output unit total_flux = quantity_sum(input_quantities).to(u.Jy) elif input_quantities.unit.is_equivalent(u.erg / u.cm ** 2 / u.s / u.m): # Flambda if wavelength is not None and not wavelength.unit.is_equivalent(u.m): raise ValueError("wavelength should be a physical length") # Find the frequency if wavelength is None: raise ValueError("wavelength is needed to convert from {0} to Jy".format(input_quantities.unit)) # Find frequency nu = si.c / wavelength # Convert input quantity to Fnu in Jy q = (input_quantities * wavelength / nu).to(u.Jy) # Find total flux in Jy total_flux = quantity_sum(q) elif input_quantities.unit.is_equivalent(u.MJy / u.sr): # surface brightness (Fnu) if spatial_scale is not None and not spatial_scale.unit.is_equivalent(u.degree): raise ValueError("spatial_scale should be an angle") if spatial_scale is None: raise ValueError("spatial_scale is needed to convert from {0} to Jy".format(input_quantities.unit)) # Find the area of a pixel as a solid angle pixel_area = (spatial_scale ** 2) # Convert input quantity to Fnu in Jy q = (input_quantities * pixel_area).to(u.Jy) # Find total flux in Jy total_flux = quantity_sum(q) elif input_quantities.unit.is_equivalent(u.Jy / u.beam): if spatial_scale is not None and not spatial_scale.unit.is_equivalent(u.degree): raise ValueError("spatial_scale should be an angle") if spatial_scale is None: raise ValueError("spatial_scale is needed to convert from {0} to Jy".format(input_quantities.unit)) if beam_major is not None and not beam_major.unit.is_equivalent(u.degree): raise ValueError("beam_major should be an angle") if beam_major is None: raise ValueError("beam_major is needed to convert from {0} to Jy".format(input_quantities.unit)) if beam_minor is not None and not beam_minor.unit.is_equivalent(u.degree): raise ValueError("beam_minor should be an angle") if beam_minor is None: raise ValueError("beam_minor is needed to convert from {0} to Jy".format(input_quantities.unit)) # Find the beam area beams_per_pixel = spatial_scale ** 2 / (beam_minor * beam_major * 1.1331) * u.beam # Convert input quantity to Fnu in Jy q = (input_quantities * beams_per_pixel).to(u.Jy) # Find total flux in Jy total_flux = quantity_sum(q) elif input_quantities.unit.is_equivalent(u.K): if spatial_scale is not None and not spatial_scale.unit.is_equivalent(u.degree): raise ValueError("spatial_scale should be an angle") if spatial_scale is None: raise ValueError("spatial_scale is needed to convert from {0} to Jy".format(input_quantities.unit)) if beam_major is not None and not beam_major.unit.is_equivalent(u.degree): raise ValueError("beam_major should be an angle") if beam_major is None: raise ValueError("beam_major is needed to convert from {0} to Jy".format(input_quantities.unit)) if beam_minor is not None and not beam_minor.unit.is_equivalent(u.degree): raise ValueError("beam_minor should be an angle") if beam_minor is None: raise ValueError("beam_minor is needed to convert from {0} to Jy".format(input_quantities.unit)) if wavelength is not None and not wavelength.unit.is_equivalent(u.m, equivalencies=u.spectral()): raise ValueError("wavelength should be a physical length") # Find the frequency if wavelength is None: raise ValueError("wavelength is needed to convert from {0} to Jy".format(input_quantities.unit)) warnings.warn("'Kelvin' units interpreted as main beam brightness temperature.", UnitMetadataWarning) # Find frequency nu = wavelength.to(u.Hz, equivalencies=u.spectral()) # Angular area of beam. Conversion between 2D Gaussian FWHM and effective area comes from https://github.com/radio-astro-tools/radio_beam/blob/bc906c38a65e85c6a894ee81519a642665e50f7c/radio_beam/beam.py#L8 omega_beam = np.pi * 2 / (8*np.log(2)) * beam_major * beam_minor # Find the beam area beams_per_pixel = spatial_scale ** 2 / omega_beam * u.beam # Convert input quantity to Fnu in Jy # Implicitly, this equivalency gives the Janskys in a single beam, so we make this explicit by dividing out a beam jansky_per_beam = input_quantities.to(u.Jy, equivalencies=u.brightness_temperature(omega_beam, nu)) / u.beam q = jansky_per_beam * beams_per_pixel # Find total flux in Jy total_flux = quantity_sum(q) else: raise ValueError("Flux units {0} not yet supported".format(input_quantities.unit)) if not output_unit.is_equivalent(u.Jy): raise ValueError("output_unit has to be equivalent to Jy") else: return total_flux.to(output_unit) astrodendro-0.2.0+dfsg1.orig/astrodendro/six.py0000644000175000017500000003017712211167701021033 0ustar noahfxnoahfx"""Utilities for writing code that runs on Python 2 and 3""" # Copyright (c) 2010-2013 Benjamin Peterson # # Permission is hereby granted, free of charge, to any person obtaining a copy of # this software and associated documentation files (the "Software"), to deal in # the Software without restriction, including without limitation the rights to # use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of # the Software, and to permit persons to whom the Software is furnished to do so, # subject to the following conditions: # # The above copyright notice and this permission notice shall be included in all # copies or substantial portions of the Software. # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS # FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR # COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER # IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN # CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. import operator import sys import types __author__ = "Benjamin Peterson " __version__ = "1.3.0" # True if we are running on Python 3. PY3 = sys.version_info[0] == 3 if PY3: string_types = str, integer_types = int, class_types = type, text_type = str binary_type = bytes MAXSIZE = sys.maxsize else: string_types = basestring, integer_types = (int, long) class_types = (type, types.ClassType) text_type = unicode binary_type = str if sys.platform.startswith("java"): # Jython always uses 32 bits. MAXSIZE = int((1 << 31) - 1) else: # It's possible to have sizeof(long) != sizeof(Py_ssize_t). class X(object): def __len__(self): return 1 << 31 try: len(X()) except OverflowError: # 32-bit MAXSIZE = int((1 << 31) - 1) else: # 64-bit MAXSIZE = int((1 << 63) - 1) del X def _add_doc(func, doc): """Add documentation to a function.""" func.__doc__ = doc def _import_module(name): """Import module, returning the module after the last dot.""" __import__(name) return sys.modules[name] class _LazyDescr(object): def __init__(self, name): self.name = name def __get__(self, obj, tp): result = self._resolve() setattr(obj, self.name, result) # This is a bit ugly, but it avoids running this again. delattr(tp, self.name) return result class MovedModule(_LazyDescr): def __init__(self, name, old, new=None): super(MovedModule, self).__init__(name) if PY3: if new is None: new = name self.mod = new else: self.mod = old def _resolve(self): return _import_module(self.mod) class MovedAttribute(_LazyDescr): def __init__(self, name, old_mod, new_mod, old_attr=None, new_attr=None): super(MovedAttribute, self).__init__(name) if PY3: if new_mod is None: new_mod = name self.mod = new_mod if new_attr is None: if old_attr is None: new_attr = name else: new_attr = old_attr self.attr = new_attr else: self.mod = old_mod if old_attr is None: old_attr = name self.attr = old_attr def _resolve(self): module = _import_module(self.mod) return getattr(module, self.attr) class _MovedItems(types.ModuleType): """Lazy loading of moved objects""" _moved_attributes = [ MovedAttribute("cStringIO", "cStringIO", "io", "StringIO"), MovedAttribute("filter", "itertools", "builtins", "ifilter", "filter"), MovedAttribute("input", "__builtin__", "builtins", "raw_input", "input"), MovedAttribute("map", "itertools", "builtins", "imap", "map"), MovedAttribute("reload_module", "__builtin__", "imp", "reload"), MovedAttribute("reduce", "__builtin__", "functools"), MovedAttribute("StringIO", "StringIO", "io"), MovedAttribute("xrange", "__builtin__", "builtins", "xrange", "range"), MovedAttribute("zip", "itertools", "builtins", "izip", "zip"), MovedModule("builtins", "__builtin__"), MovedModule("configparser", "ConfigParser"), MovedModule("copyreg", "copy_reg"), MovedModule("http_cookiejar", "cookielib", "http.cookiejar"), MovedModule("http_cookies", "Cookie", "http.cookies"), MovedModule("html_entities", "htmlentitydefs", "html.entities"), MovedModule("html_parser", "HTMLParser", "html.parser"), MovedModule("http_client", "httplib", "http.client"), MovedModule("email_mime_multipart", "email.MIMEMultipart", "email.mime.multipart"), MovedModule("email_mime_text", "email.MIMEText", "email.mime.text"), MovedModule("email_mime_base", "email.MIMEBase", "email.mime.base"), MovedModule("BaseHTTPServer", "BaseHTTPServer", "http.server"), MovedModule("CGIHTTPServer", "CGIHTTPServer", "http.server"), MovedModule("SimpleHTTPServer", "SimpleHTTPServer", "http.server"), MovedModule("cPickle", "cPickle", "pickle"), MovedModule("queue", "Queue"), MovedModule("reprlib", "repr"), MovedModule("socketserver", "SocketServer"), MovedModule("tkinter", "Tkinter"), MovedModule("tkinter_dialog", "Dialog", "tkinter.dialog"), MovedModule("tkinter_filedialog", "FileDialog", "tkinter.filedialog"), MovedModule("tkinter_scrolledtext", "ScrolledText", "tkinter.scrolledtext"), MovedModule("tkinter_simpledialog", "SimpleDialog", "tkinter.simpledialog"), MovedModule("tkinter_tix", "Tix", "tkinter.tix"), MovedModule("tkinter_constants", "Tkconstants", "tkinter.constants"), MovedModule("tkinter_dnd", "Tkdnd", "tkinter.dnd"), MovedModule("tkinter_colorchooser", "tkColorChooser", "tkinter.colorchooser"), MovedModule("tkinter_commondialog", "tkCommonDialog", "tkinter.commondialog"), MovedModule("tkinter_tkfiledialog", "tkFileDialog", "tkinter.filedialog"), MovedModule("tkinter_font", "tkFont", "tkinter.font"), MovedModule("tkinter_messagebox", "tkMessageBox", "tkinter.messagebox"), MovedModule("tkinter_tksimpledialog", "tkSimpleDialog", "tkinter.simpledialog"), MovedModule("urllib_robotparser", "robotparser", "urllib.robotparser"), MovedModule("winreg", "_winreg"), ] for attr in _moved_attributes: setattr(_MovedItems, attr.name, attr) del attr moves = sys.modules[__name__ + ".moves"] = _MovedItems("moves") def add_move(move): """Add an item to six.moves.""" setattr(_MovedItems, move.name, move) def remove_move(name): """Remove item from six.moves.""" try: delattr(_MovedItems, name) except AttributeError: try: del moves.__dict__[name] except KeyError: raise AttributeError("no such move, %r" % (name,)) if PY3: _meth_func = "__func__" _meth_self = "__self__" _func_closure = "__closure__" _func_code = "__code__" _func_defaults = "__defaults__" _func_globals = "__globals__" _iterkeys = "keys" _itervalues = "values" _iteritems = "items" _iterlists = "lists" else: _meth_func = "im_func" _meth_self = "im_self" _func_closure = "func_closure" _func_code = "func_code" _func_defaults = "func_defaults" _func_globals = "func_globals" _iterkeys = "iterkeys" _itervalues = "itervalues" _iteritems = "iteritems" _iterlists = "iterlists" try: advance_iterator = next except NameError: def advance_iterator(it): return it.next() next = advance_iterator try: callable = callable except NameError: def callable(obj): return any("__call__" in klass.__dict__ for klass in type(obj).__mro__) if PY3: def get_unbound_function(unbound): return unbound Iterator = object else: def get_unbound_function(unbound): return unbound.im_func class Iterator(object): def next(self): return type(self).__next__(self) callable = callable _add_doc(get_unbound_function, """Get the function out of a possibly unbound function""") get_method_function = operator.attrgetter(_meth_func) get_method_self = operator.attrgetter(_meth_self) get_function_closure = operator.attrgetter(_func_closure) get_function_code = operator.attrgetter(_func_code) get_function_defaults = operator.attrgetter(_func_defaults) get_function_globals = operator.attrgetter(_func_globals) def iterkeys(d, **kw): """Return an iterator over the keys of a dictionary.""" return iter(getattr(d, _iterkeys)(**kw)) def itervalues(d, **kw): """Return an iterator over the values of a dictionary.""" return iter(getattr(d, _itervalues)(**kw)) def iteritems(d, **kw): """Return an iterator over the (key, value) pairs of a dictionary.""" return iter(getattr(d, _iteritems)(**kw)) def iterlists(d, **kw): """Return an iterator over the (key, [values]) pairs of a dictionary.""" return iter(getattr(d, _iterlists)(**kw)) if PY3: def b(s): return s.encode("latin-1") def u(s): return s if sys.version_info[1] <= 1: def int2byte(i): return bytes((i,)) else: # This is about 2x faster than the implementation above on 3.2+ int2byte = operator.methodcaller("to_bytes", 1, "big") import io StringIO = io.StringIO BytesIO = io.BytesIO else: def b(s): return s def u(s): return unicode(s, "unicode_escape") int2byte = chr import StringIO StringIO = BytesIO = StringIO.StringIO _add_doc(b, """Byte literal""") _add_doc(u, """Text literal""") if PY3: import builtins exec_ = getattr(builtins, "exec") def reraise(tp, value, tb=None): if value.__traceback__ is not tb: raise value.with_traceback(tb) raise value print_ = getattr(builtins, "print") del builtins else: def exec_(_code_, _globs_=None, _locs_=None): """Execute code in a namespace.""" if _globs_ is None: frame = sys._getframe(1) _globs_ = frame.f_globals if _locs_ is None: _locs_ = frame.f_locals del frame elif _locs_ is None: _locs_ = _globs_ exec("""exec _code_ in _globs_, _locs_""") exec_("""def reraise(tp, value, tb=None): raise tp, value, tb """) def print_(*args, **kwargs): """The new-style print function.""" fp = kwargs.pop("file", sys.stdout) if fp is None: return def write(data): if not isinstance(data, basestring): data = str(data) fp.write(data) want_unicode = False sep = kwargs.pop("sep", None) if sep is not None: if isinstance(sep, unicode): want_unicode = True elif not isinstance(sep, str): raise TypeError("sep must be None or a string") end = kwargs.pop("end", None) if end is not None: if isinstance(end, unicode): want_unicode = True elif not isinstance(end, str): raise TypeError("end must be None or a string") if kwargs: raise TypeError("invalid keyword arguments to print()") if not want_unicode: for arg in args: if isinstance(arg, unicode): want_unicode = True break if want_unicode: newline = unicode("\n") space = unicode(" ") else: newline = "\n" space = " " if sep is None: sep = space if end is None: end = newline for i, arg in enumerate(args): if i: write(sep) write(arg) write(end) _add_doc(reraise, """Reraise an exception.""") def with_metaclass(meta, base=object): """Create a base class with a metaclass.""" return meta("NewBase", (base,), {}) astrodendro-0.2.0+dfsg1.orig/astrodendro/tests/0000755000175000017500000000000013075265772021030 5ustar noahfxnoahfxastrodendro-0.2.0+dfsg1.orig/astrodendro/tests/benchmark_data/0000755000175000017500000000000013075265772023753 5ustar noahfxnoahfxastrodendro-0.2.0+dfsg1.orig/astrodendro/tests/test_structure.py0000644000175000017500000002663012224030243024462 0ustar noahfxnoahfx# Licensed under an MIT open source license - see LICENSE # The tests here ensure that the Structure class behaves as expected and has # the correct interface. This is done by setting up a few simple examples and # ensuring that all the properties and methods are behaving as expected. import pytest import numpy as np from numpy.testing import assert_allclose from ..structure import Structure from .test_index import assert_identical_fancyindex @pytest.mark.parametrize('index', [(0,), (1, 3), (4, 5, 9)]) def test_init_leaf_scalar(index): s = Structure(index, 1.5) # Properties assert s.idx is None assert s.is_leaf assert not s.is_branch assert_identical_fancyindex(s.indices(subtree=False), tuple(np.atleast_1d(i) for i in index)) assert np.all(s.indices() == s.indices(subtree=True)) assert np.all(s.values(subtree=False) == np.array([1.5])) assert np.all(s.values(subtree=True) == s.values(subtree=False)) assert s.vmin == 1.5 assert s.vmax == 1.5 assert s.height == 1.5 assert s.level == 0 assert s.ancestor is s assert s.parent is None assert s.children == [] assert s.descendants == [] # Methods for subtree in [False, True]: assert s.get_npix(subtree=subtree) == 1 assert s.get_peak(subtree=subtree) == (index, 1.5) # Footprint array = np.zeros([20 for i in range(len(index))]) s._fill_footprint(array, level=2) assert array[index] == 2 assert np.sum(array) == 2. @pytest.mark.parametrize('index', [[(0,), (1,), (2,)], [(1, 3), (2, 2), (4, 1)], [(4, 5, 9), (3, 2, 1), (6, 7, 8)]]) def test_init_leaf_list(index): s = Structure(index, [3.1, 4.2, 5.3]) # Properties assert s.idx is None assert s.is_leaf assert not s.is_branch indices = tuple(np.atleast_1d(i) for i in zip(*index)) assert_identical_fancyindex(s.indices(subtree=False), indices) assert_identical_fancyindex(s.indices(subtree=True), indices) assert np.all(s.values(subtree=False) == np.array([3.1, 4.2, 5.3])) assert np.all(s.values(subtree=True) == s.values(subtree=False)) assert s.vmin == 3.1 assert s.vmax == 5.3 assert s.height == 5.3 assert s.level == 0 assert s.ancestor is s assert s.parent is None assert s.children == [] assert s.descendants == [] # Methods for subtree in [False, True]: assert s.get_npix(subtree=subtree) == 3 assert s.get_peak(subtree=subtree) == (index[2], 5.3) # Footprint array = np.zeros([20 for i in range(len(index[0]))]) s._fill_footprint(array, level=2) for i in index: print(i, array[i]) assert array[i] == 2 assert np.sum(array) == 6. @pytest.mark.parametrize('index', [(0,), (1, 3), (4, 5, 9)]) def test_init_branch_scalar(index): leaf_index = tuple([10 for i in range(len(index))]) leaf = Structure(leaf_index, 20.) leaf_indices = leaf.indices(subtree=False) s = Structure(index, 1.5, children=[leaf]) # Properties assert s.idx is None assert not s.is_leaf assert s.is_branch indices = tuple(np.atleast_1d(i) for i in index) indices_all = tuple(np.hstack(a) for a in zip(indices, leaf_indices)) assert_identical_fancyindex(s.indices(subtree=False), indices) assert_identical_fancyindex(s.indices(subtree=True), indices_all) assert np.all(s.values(subtree=False) == np.array([1.5])) assert np.all(s.values(subtree=True) == np.hstack(([1.5], leaf.values(subtree=False)))) assert s.vmin == 1.5 assert s.vmax == 1.5 assert s.height == 20. assert s.level == 0 assert s.ancestor is s assert s.parent is None assert s.children == [leaf] assert s.descendants == [leaf] # Leaf properties assert leaf.level == 1 assert leaf.ancestor is s assert leaf.parent is s assert leaf.children == [] assert leaf.descendants == [] # Methods assert s.get_npix(subtree=False) == 1 assert s.get_peak(subtree=False) == (index, 1.5) assert s.get_npix(subtree=True) == 2 assert s.get_peak(subtree=True) == (leaf_index, 20.) # Footprint array = np.zeros([20 for i in range(len(index))]) s._fill_footprint(array, level=2) assert array[index] == 2. assert array[leaf_index] == 3. assert np.sum(array) == 5. @pytest.mark.parametrize('index', [[(0,), (1,), (2,)], [(1, 3), (2, 2), (4, 1)], [(4, 5, 9), (3, 2, 1), (6, 7, 8)]]) def test_init_branch_list(index): ndim = len(index[0]) leaf_index = tuple([10 for i in range(ndim)]) leaf = Structure(leaf_index, 20.) leaf_indices = leaf.indices(subtree=False) s = Structure(index, [3.1, 4.2, 5.3], children=[leaf]) # Properties assert s.idx is None assert not s.is_leaf assert s.is_branch indices = tuple(np.atleast_1d(i) for i in zip(*index)) indices_all = tuple(np.hstack(a) for a in zip(indices, leaf_indices)) assert_identical_fancyindex(s.indices(subtree=False), indices) assert_identical_fancyindex(s.indices(subtree=True), indices_all) assert np.all(s.values(subtree=False) == np.array([3.1, 4.2, 5.3])) assert np.all(s.values(subtree=True) == np.hstack(([3.1, 4.2, 5.3], leaf.values(subtree=False)))) assert s.vmin == 3.1 assert s.vmax == 5.3 assert s.height == 20. assert s.level == 0 assert s.ancestor is s assert s.parent is None assert s.children == [leaf] assert s.descendants == [leaf] # Leaf properties assert leaf.level == 1 assert leaf.ancestor is s assert leaf.parent is s assert leaf.children == [] assert leaf.descendants == [] # Methods assert s.get_npix(subtree=False) == 3 assert s.get_peak(subtree=False) == (index[2], 5.3) assert s.get_npix(subtree=True) == 4 assert s.get_peak(subtree=True) == (leaf_index, 20.) # Footprint array = np.zeros([20 for i in range(ndim)]) s._fill_footprint(array, level=2) for i in index: assert array[i] == 2. assert array[leaf_index] == 3. assert np.sum(array) == 9. @pytest.mark.parametrize('index', [(0,), (1, 3), (4, 5, 9)]) def test_init_branch_scalar_3_level(index): leaf_index = tuple([10 for i in range(len(index))]) leaf = Structure(leaf_index, 20.) leaf_indices = leaf.indices(subtree=False) branch_index = tuple([9 for i in range(len(index))]) branch = Structure(branch_index, 15., children=[leaf]) branch_indices = branch.indices(subtree=False) s = Structure(index, 1.5, children=[branch]) # Properties assert s.idx is None assert not s.is_leaf assert s.is_branch indices = tuple(np.atleast_1d(i) for i in index) indices_all = tuple(np.hstack(a) for a in zip(indices, branch_indices, leaf_indices)) assert_identical_fancyindex(s.indices(subtree=False), indices) assert_identical_fancyindex(s.indices(subtree=True), indices_all) assert np.all(s.values(subtree=False) == np.array([1.5])) assert np.all(s.values(subtree=True) == np.hstack((s.values(subtree=False), branch.values(subtree=False), leaf.values(subtree=False)))) assert s.vmin == 1.5 assert s.vmax == 1.5 assert s.height == 15. assert s.level == 0 assert s.ancestor is s assert s.parent is None assert s.children == [branch] assert set(s.descendants) == set([branch, leaf]) # order should not matter # Branch properties assert branch.level == 1 assert branch.ancestor is s assert branch.parent is s assert branch.children == [leaf] assert branch.descendants == [leaf] # Leaf properties assert leaf.level == 2 assert leaf.ancestor is s assert leaf.parent is branch assert leaf.children == [] assert leaf.descendants == [] # Methods assert s.get_npix(subtree=False) == 1 assert s.get_peak(subtree=False) == (index, 1.5) assert s.get_npix(subtree=True) == 3 assert s.get_peak(subtree=True) == (leaf_index, 20.) # Footprint array = np.zeros([20 for i in range(len(index))]) s._fill_footprint(array, level=2) assert array[index] == 2. assert array[branch_index] == 3. assert array[leaf_index] == 4. assert np.sum(array) == 9. @pytest.mark.parametrize('index', [[(0,), (1,), (2,)], [(1, 3), (2, 2), (4, 1)], [(4, 5, 9), (3, 2, 1), (6, 7, 8)]]) def test_init_branch_list_3_level(index): ndim = len(index[0]) leaf_index = tuple([10 for i in range(ndim)]) leaf = Structure(leaf_index, 20.) leaf_indices = leaf.indices(subtree=False) branch_index = tuple([9 for i in range(ndim)]) branch = Structure(branch_index, 15., children=[leaf]) branch_indices = branch.indices(subtree=False) s = Structure(index, [3.1, 4.2, 5.3], children=[branch]) # Properties assert s.idx is None assert not s.is_leaf assert s.is_branch indices = tuple(np.atleast_1d(i) for i in zip(*index)) indices_all = tuple(np.hstack(a) for a in zip(indices, branch_indices, leaf_indices)) assert_identical_fancyindex(s.indices(subtree=False), indices) assert_identical_fancyindex(s.indices(subtree=True), indices_all) assert np.all(s.values(subtree=False) == np.array([3.1, 4.2, 5.3])) assert np.all(s.values(subtree=True) == np.hstack((s.values(subtree=False), branch.values(subtree=False), leaf.values(subtree=False)))) assert s.vmin == 3.1 assert s.vmax == 5.3 assert s.height == 15. assert s.level == 0 assert s.ancestor is s assert s.parent is None assert s.children == [branch] assert s.descendants == [branch, leaf] # Branch properties assert branch.level == 1 assert branch.ancestor is s assert branch.parent is s assert branch.children == [leaf] assert branch.descendants == [leaf] # Leaf properties assert leaf.level == 2 assert leaf.ancestor is s assert leaf.parent is branch assert leaf.children == [] assert leaf.descendants == [] # Methods assert s.get_npix(subtree=False) == 3 assert s.get_peak(subtree=False) == (index[2], 5.3) assert s.get_npix(subtree=True) == 5 assert s.get_peak(subtree=True) == (leaf_index, 20.) # Footprint array = np.zeros([20 for i in range(ndim)]) s._fill_footprint(array, level=2) for i in index: assert array[i] == 2. assert array[branch_index] == 3. assert array[leaf_index] == 4. assert np.sum(array) == 13. def test_add_pixel(): s = Structure(1, 10.) assert s.get_npix() == 1 assert s.get_peak() == (1, 10) assert s.vmin == 10. assert s.vmax == 10. s._add_pixel(2, 8.) assert s.get_npix() == 2 assert s.get_peak() == (1, 10) assert s.vmin == 8. assert s.vmax == 10. s._add_pixel(3, 12.) assert s.get_npix() == 3 assert s.get_peak() == (3, 12.) assert s.vmin == 8. assert s.vmax == 12. def test_sorted_leaves(): l1 = Structure(1, 10., idx=1) l2 = Structure(2, 8., idx=2) s = Structure(3, 5., children=[l1, l2], idx=3) assert s.sorted_leaves() == [l2, l1] assert s.sorted_leaves(reverse=True) == [l1, l2] def key(x): return x.idx assert s.sorted_leaves(sort_key=key) == [l1, l2] s2 = Structure(4, 3., children=[s], idx=4) assert s2.sorted_leaves() == [l2, l1] assert s2.sorted_leaves(subtree=False) == [] # TODO: add newick tests astrodendro-0.2.0+dfsg1.orig/astrodendro/tests/test_analysis.py0000644000175000017500000003657612773156651024304 0ustar noahfxnoahfx# Licensed under an MIT open source license - see LICENSE import pytest from mock import patch import numpy as np from numpy.testing import assert_allclose import astropy.units as u from astropy.wcs import WCS from ._testdata import data from ..analysis import (ScalarStatistic, PPVStatistic, ppv_catalog, Metadata, PPStatistic, pp_catalog) from .. import Dendrogram, periodic_neighbours from ..structure import Structure def assert_allclose_quantity(a, b): if not isinstance(a, u.Quantity): raise TypeError("a is not a quantity") if not isinstance(b, u.Quantity): raise TypeError("b is not a quantity") assert_allclose(a.value, b.value) assert a.unit == b.unit wcs_2d = WCS(header=dict(cdelt1=1, crval1=0, crpix1=1, cdelt2=2, crval2=0, crpix2=1)) wcs_3d = WCS(header=dict(cdelt1=1, crval1=0, crpix1=1, cdelt2=2, crval2=0, crpix2=1, cdelt3=3, crval3=0, crpix3=1)) def benchmark_stat(): x = np.array([216, 216, 216, 216, 216, 217, 216, 216, 216, 217, 216, 217, 218, 216, 217, 216, 216, 217, 216, 217, 216]) y = np.array([48, 50, 51, 47, 48, 48, 49, 50, 46, 46, 47, 47, 47, 48, 48, 49, 46, 46, 47, 46, 47]) z = np.array([11, 11, 11, 12, 12, 12, 12, 12, 13, 13, 13, 13, 13, 13, 13, 13, 14, 14, 14, 15, 15]) indices = (z, y, x) values = data[indices] return ScalarStatistic(values, indices) def benchmark_values(): result = {} result['mom0'] = 45.8145142 result['mom1'] = [12.8093996, 47.6574211, 216.3799896] result['mom2'] = [ [1.2831592097072804, -1.1429260442312184, 0.1653071908000249], [-1.1429260442312184, 2.0107706426889038, -0.2976682802749759], [0.1653071908000249, -0.2976682802749759, 0.3306051333187136]] result['mom2_100'] = 1.2831592097072804 result['mom2_010'] = 2.0107706426889038 result['mom2_011'] = 0.8730196376110217 result['paxis1'] = [0.5833025351190873, -0.8016446861607931, 0.1308585101314019] result['paxis2'] = [0.8038500408313988, 0.5466096691013617, -0.2346124069614796] result['paxis3'] = [-0.1165472624260408, -0.2420406304632855, -0.9632409194100563] result['sig_maj'] = np.sqrt(2.0619485) result['sig_min'] = np.sqrt(0.27942730) result['area_exact_pp'] = 21 result['area_exact_ppv'] = 10 return result class TestScalarStatistic(object): def setup_method(self, method): self.stat = benchmark_stat() def test_mom0(self): stat = self.stat assert_allclose(stat.mom0(), benchmark_values()['mom0']) def test_mom1(self): stat = self.stat assert_allclose(stat.mom1(), benchmark_values()['mom1']) def test_mom2(self): stat = self.stat assert_allclose(stat.mom2(), benchmark_values()['mom2']) def test_mom2_along(self): stat = self.stat v = benchmark_values() assert_allclose(stat.mom2_along((1, 0, 0)), v['mom2_100']) assert_allclose(stat.mom2_along((2, 0, 0)), v['mom2_100']) assert_allclose(stat.mom2_along((0, 1, 0)), v['mom2_010']) assert_allclose(stat.mom2_along((0, 1, 1)), v['mom2_011']) def test_count(self): stat = self.stat assert_allclose(stat.count(), 21) def test_sky_paxes(self): stat = self.stat v1, v2, v3 = stat.paxes() v = benchmark_values() # doesn't matter if v = vex * -1. assert_allclose(np.abs(np.dot(v1, v['paxis1'])), 1) assert_allclose(np.abs(np.dot(v2, v['paxis2'])), 1) assert_allclose(np.abs(np.dot(v3, v['paxis3'])), 1) def test_projected_paxes(self): stat = self.stat v = benchmark_values() v1, v2 = stat.projected_paxes(((0, 1, 0), (0, 0, 1))) assert_allclose(stat.mom2_along((0, v1[0], v1[1])), v['sig_maj'] ** 2) assert_allclose(stat.mom2_along((0, v2[0], v2[1])), v['sig_min'] ** 2) def test_projected_paxes_int(self): ind = (np.array([0, 1, 2]), np.array([0, 1, 2]), np.array([0, 1, 2])) v = np.array([1, 1, 1]) stat = ScalarStatistic(v, ind) a, b = stat.projected_paxes(((0, 1, 0), (0, 0, 1))) assert_allclose(a, [1 / np.sqrt(2), 1 / np.sqrt(2)]) class TestScalar2D(object): def setup_method(self, method): x = np.array([213, 213, 214, 211, 212, 212]) y = np.array([71, 71, 71, 71, 71, 71]) z = np.array([46, 45, 45, 44, 46, 43]) ind = (z, y, x) val = data[ind].copy() ind = (z, x) val[0] = 0 # we'll replace this with nan in a subclass self.stat = ScalarStatistic(val, ind) def test_mom0(self): assert_allclose(self.stat.mom0(), 19.2793083) def test_mom1(self): assert_allclose(self.stat.mom1(), [44.6037369, 212.4050598]) def test_mom2(self): assert_allclose(self.stat.mom2(), [[1.0321983103326871, 0.3604276691031663], [0.3604276691031663, 1.0435691076146387]]) def test_mom2_along(self): assert_allclose(self.stat.mom2_along((0, 1)), 1.0435691076146387) def test_count(self): assert_allclose(self.stat.count(), 6) def test_sky_paxes(self): v1, v2 = self.stat.paxes() v1ex = [0.7015083489012299, 0.7126612353859795] v2ex = [0.7126612353859795, -0.7015083489012299] assert_allclose(np.abs(np.dot(v1, v1ex)), 1) assert_allclose(np.abs(np.dot(v2, v2ex)), 1) class TestScalarNan(TestScalar2D): def setup_method(self, method): x = np.array([213, 213, 214, 211, 212, 212]) y = np.array([71, 71, 71, 71, 71, 71]) z = np.array([46, 45, 45, 44, 46, 43]) ind = (z, y, x) val = data[ind].copy() ind = (z, x) # all tests should be the same as superclass, # since nan should = 0 weight val[0] = np.nan self.stat = ScalarStatistic(val, ind) class TestPPVStatistic(object): def setup_method(self, method): self.stat = benchmark_stat() self.v = benchmark_values() def metadata(self, **kwargs): result = dict(data_unit=u.Jy, wcs=wcs_3d) result.update(**kwargs) return result def test_x_cen(self): p = PPVStatistic(self.stat, self.metadata()) assert_allclose(p.x_cen, self.v['mom1'][2]) p = PPVStatistic(self.stat, self.metadata(vaxis=2)) assert_allclose(p.x_cen, self.v['mom1'][1] * 2) def test_y_cen(self): p = PPVStatistic(self.stat, self.metadata()) assert_allclose(p.y_cen, self.v['mom1'][1] * 2) p = PPVStatistic(self.stat, self.metadata(vaxis=2)) assert_allclose(p.y_cen, self.v['mom1'][0] * 3) def test_v_cen(self): p = PPVStatistic(self.stat, self.metadata()) assert_allclose(p.v_cen, self.v['mom1'][0] * 3) p = PPVStatistic(self.stat, self.metadata(vaxis=2)) assert_allclose(p.v_cen, self.v['mom1'][2]) def test_major_sigma(self): p = PPVStatistic(self.stat, self.metadata(spatial_scale=2 * u.arcsec)) assert_allclose_quantity(p.major_sigma, self.v['sig_maj'] * 2 * u.arcsec) def test_minor_sigma(self): p = PPVStatistic(self.stat, self.metadata(spatial_scale=4 * u.arcsec)) assert_allclose_quantity(p.minor_sigma, self.v['sig_min'] * 4 * u.arcsec) def test_radius(self): p = PPVStatistic(self.stat, self.metadata(spatial_scale=4 * u.arcsec)) assert_allclose_quantity(p.radius, np.sqrt(self.v['sig_min'] * self.v['sig_maj']) * 4 * u.arcsec) def test_area_exact(self): p = PPVStatistic(self.stat, self.metadata(spatial_scale=4 * u.arcsec)) assert_allclose_quantity(p.area_exact, (4 * u.arcsec) ** 2 * self.v['area_exact_ppv']) def test_area_ellipse(self): p = PPVStatistic(self.stat, self.metadata(spatial_scale=4 * u.arcsec)) assert_allclose_quantity(p.area_ellipse, (4 * u.arcsec) ** 2 * self.v['sig_min'] * self.v['sig_maj'] * np.pi * (2.3548 * 0.5) ** 2) def test_v_rms(self): p = PPVStatistic(self.stat, self.metadata()) assert_allclose_quantity(p.v_rms, np.sqrt(self.v['mom2_100']) * u.pixel) p = PPVStatistic(self.stat, self.metadata(vaxis=1, velocity_scale=10 * u.km / u.s)) assert_allclose_quantity(p.v_rms, np.sqrt(self.v['mom2_010']) * 10 * u.km / u.s) def test_position_angle(self): x = np.array([0, 1, 2]) y = np.array([1, 1, 1]) z = np.array([0, 1, 2]) v = np.array([1, 1, 1]) ind = (z, y, x) stat = ScalarStatistic(v, ind) p = PPVStatistic(stat, self.metadata()) assert_allclose_quantity(p.position_angle, 0 * u.degree) ind = (z, x, y) stat = ScalarStatistic(v, ind) p = PPVStatistic(stat, self.metadata()) assert_allclose_quantity(p.position_angle, 90 * u.degree) def test_units(self): m = self.metadata(spatial_scale=1 * u.deg, velocity_scale=1 * u.km / u.s, data_unit=1 * u.K, distance=1 * u.pc) p = PPVStatistic(self.stat, m) assert p.v_rms.unit == u.km / u.s assert p.major_sigma.unit == u.deg assert p.minor_sigma.unit == u.deg assert p.radius.unit == u.deg class TestPPStatistic(object): def setup_method(self, method): self.stat = benchmark_stat() # this trick essentially collapses along the 0th axis # should preserve sky_maj, sky_min self.stat.indices = (self.stat.indices[1], self.stat.indices[2]) self.v = benchmark_values() def metadata(self, **kwargs): result = dict() result.update(**kwargs) return result def test_major_sigma(self): p = PPStatistic(self.stat, self.metadata(spatial_scale=2 * u.arcsec)) assert_allclose_quantity(p.major_sigma, self.v['sig_maj'] * 2 * u.arcsec) def test_minor_sigma(self): p = PPStatistic(self.stat, self.metadata(spatial_scale=4 * u.arcsec)) assert_allclose_quantity(p.minor_sigma, self.v['sig_min'] * 4 * u.arcsec) def test_radius(self): p = PPStatistic(self.stat, self.metadata(spatial_scale=4 * u.arcsec)) assert_allclose_quantity(p.radius, np.sqrt(self.v['sig_min'] * self.v['sig_maj']) * 4 * u.arcsec) def test_area_exact(self): p = PPStatistic(self.stat, self.metadata(spatial_scale=4 * u.arcsec)) assert_allclose_quantity(p.area_exact, (4 * u.arcsec) ** 2 * self.v['area_exact_pp']) def test_area_ellipse(self): p = PPStatistic(self.stat, self.metadata(spatial_scale=4 * u.arcsec)) assert_allclose_quantity(p.area_ellipse, (4 * u.arcsec) ** 2 * self.v['sig_min'] * self.v['sig_maj'] * np.pi * (2.3548 * 0.5) ** 2) def test_position_angle(self): x = np.array([0, 1, 2]) y = np.array([1, 1, 1]) v = np.array([1, 1, 1]) ind = (y, x) stat = ScalarStatistic(v, ind) p = PPStatistic(stat, self.metadata()) assert_allclose_quantity(p.position_angle, 0 * u.degree) ind = (x, y) stat = ScalarStatistic(v, ind) p = PPStatistic(stat, self.metadata()) assert_allclose_quantity(p.position_angle, 90 * u.degree) def test_statistic_dimensionality(): d = Dendrogram.compute(np.ones((10, 10))) with pytest.raises(ValueError) as exc: PPVStatistic(d.trunk[0]) assert exc.value.args[0] == "PPVStatistic can only be used on 3-d datasets" PPStatistic(d.trunk[0]) d = Dendrogram.compute(np.ones((10, 10, 10))) with pytest.raises(ValueError) as exc: PPStatistic(d.trunk[0]) assert exc.value.args[0] == "PPStatistic can only be used on 2-d datasets" PPVStatistic(d.trunk[0]) class TestCataloger(object): files = [] cataloger = None def stat(self): raise NotImplementedError() def metadata(self): raise NotImplementedError() def make_catalog(self, s=None, md=None, fields=None): s = s or [self.stat()] structures = [Structure(zip(*x.indices), x.values) for x in s] md = md or self.metadata() return self.cataloger(structures, md, fields) def test_benchmark(self): c = self.make_catalog() assert c.dtype.names == tuple(sorted(self.fields)) assert len(c) == 1 c = self.make_catalog(s=[self.stat()] * 3) assert len(c) == 3 return c def test_field_selection(self): stat = self.stat() md = self.metadata() c = self.cataloger([Structure(zip(*stat.indices), stat.values)], md, fields=['x_cen']) assert c.dtype.names == ('_idx', 'x_cen',) class TestPPVCataloger(TestCataloger): fields = ['_idx', 'flux', 'major_sigma', 'minor_sigma', 'radius', 'area_ellipse', 'area_exact', 'v_rms', 'position_angle', 'x_cen', 'y_cen', 'v_cen'] cataloger = staticmethod(ppv_catalog) def stat(self): return benchmark_stat() def metadata(self): return dict(vaxis=1, data_unit=u.Jy, wcs=wcs_3d) class TestPPCataloger(TestCataloger): fields = ['_idx', 'flux', 'major_sigma', 'minor_sigma', 'radius', 'area_ellipse', 'area_exact', 'position_angle', 'x_cen', 'y_cen'] cataloger = staticmethod(pp_catalog) def stat(self): bs = benchmark_stat() bs.indices = (bs.indices[1], bs.indices[2]) return bs def metadata(self): return dict(data_unit=u.Jy, wcs=wcs_2d) def test_wraparound_catalog(): x_centered = np.array( [[0, 1, 0, 0, 0, 0], [0, 1, 1, 1, 0, 0], [0, 0, 0, 0, 0, 0]] ) # same structure as x_centered, but shifted to the boundary x_straddling = np.array( [[0, 0, 0, 0, 0, 1], [1, 1, 0, 0, 0, 1], [0, 0, 0, 0, 0, 0]] ) d_centered = Dendrogram.compute(x_centered, min_value=0.5, neighbours=periodic_neighbours(1)) d_straddling = Dendrogram.compute(x_straddling, min_value=0.5, neighbours=periodic_neighbours(1)) assert len(d_centered) == len(d_straddling) metadata = {'data_unit': u.Jy} # dummy unit to get the catalog to compute catalog_centered = pp_catalog(d_centered, metadata) catalog_straddling = pp_catalog(d_straddling, metadata) assert catalog_centered['major_sigma'][0] == catalog_straddling['major_sigma'][0] assert catalog_centered['position_angle'][0] == catalog_straddling['position_angle'][0] assert catalog_centered['radius'][0] == catalog_straddling['radius'][0] assert catalog_centered['area_exact'][0] == catalog_straddling['area_exact'][0] assert catalog_centered['x_cen'][0] == catalog_straddling['x_cen'][0] - 4 # offset by 4 px assert catalog_centered['y_cen'][0] == catalog_straddling['y_cen'][0] # default behavior is to NOT join structures on data edges, let's make sure that we aren't fooling ourselves. d_broken = Dendrogram.compute(x_straddling, min_value=0.5) assert len(d_straddling) != len(d_broken) # don't let pytest test abstract class del TestCataloger def test_metadata_protocol(): class Foo(object): x = Metadata('x', 'test') y = Metadata('y', 'test', default=5) z = Metadata('z', 'test', strict=True) def __init__(self, md): self.metadata = md f = Foo(dict(x=10)) assert f.x == 10 assert f.y == 5 with pytest.raises(KeyError): f.z astrodendro-0.2.0+dfsg1.orig/astrodendro/tests/test_pruning.py0000644000175000017500000000525612773156651024132 0ustar noahfxnoahfximport numpy as np from ..pruning import * from ..structure import Structure from ..dendrogram import Dendrogram from .test_index import assert_permuted_fancyindex data = np.array([[0, 0, 0, 0], [0, 2, 1, 0], [0, 1, 0, 0], [0, 0, 0, 0]]) st = Structure(zip(*np.where(data)), data[np.where(data)]) def test_npix(): assert min_npix(3)(st) assert not min_npix(4)(st) def test_min_delta(): assert min_delta(1)(st) assert not min_delta(1.1)(st) assert min_delta(1.1)(st, value=0) def test_min_peak(): assert min_peak(2)(st) assert not min_peak(2.1)(st) def test_min_sum(): assert min_sum(4)(st) assert not min_sum(4.1)(st) def test_contains_seeds(): assert contains_seeds(np.where(data == 2))(st) assert contains_seeds(np.where(data == 1))(st) assert contains_seeds(([1], [1]))(st) assert not contains_seeds(np.where(data == 0))(st) def test_all_true(): c1 = min_npix(3) c2 = min_peak(2) c3 = min_npix(4) assert all_true((c1, c2))(st) assert not all_true((c1, c2, c3))(st) def test_multi_ravel(): from ..pruning import _ravel_multi_index x = _ravel_multi_index([[0, 1], [0, 1]], [3, 3]) np.testing.assert_array_equal(x, [0, 4]) x = _ravel_multi_index([[1, 0], [0, 1]], [4, 2]) np.testing.assert_array_equal(x, [2, 1]) x = _ravel_multi_index([[0], [9]], [5, 3], mode='clip') np.testing.assert_array_equal(x, [2]) x = _ravel_multi_index([[0], [9]], [5, 3], mode='wrap') np.testing.assert_array_equal(x, [0]) def compare_dendrograms(d1, d2): assert len(d1) == len(d2) assert (np.sort([leaf.vmax for leaf in d1.all_structures]) == np.sort([leaf.vmax for leaf in d2.all_structures])).all() assert (np.sort([leaf.vmin for leaf in d1.all_structures]) == np.sort([leaf.vmin for leaf in d2.all_structures])).all() for s in d1.all_structures: ind1 = np.where(d1.index_map == s.idx) idx2 = d2.index_map[ind1][0] ind2 = np.where(d2.index_map == idx2) assert_permuted_fancyindex(ind1, ind2) class TestPostPruning(object): def setup_class(self): from ._testdata import data self.data = data def test_min_delta(self): d1 = Dendrogram.compute(self.data, min_delta=1.0, min_npix=8, min_value=1.4) d2 = Dendrogram.compute(self.data, min_npix=8, min_value=1.4) d2.prune(min_delta=1.0) compare_dendrograms(d1, d2) def test_min_npix(self): d1 = Dendrogram.compute(self.data, min_npix=8, min_delta=0.3, min_value=1.4) d2 = Dendrogram.compute(self.data, min_delta=0.3, min_value=1.4) d2.prune(min_npix=8) compare_dendrograms(d1, d2) astrodendro-0.2.0+dfsg1.orig/astrodendro/tests/test_is_independent.py0000644000175000017500000000443512773156651025436 0ustar noahfxnoahfx# These tests ensure that the ``is_independent`` function is working correctly import pytest import numpy as np from ..dendrogram import Dendrogram class TestCustomMerge(object): def setup_class(self): self.data = np.array([0, 3.3, 5.5, 2.1, 1.0, 6.0, 4.4, 1.5, 4.1, 0.5]) def test_reference(self): d = Dendrogram.compute(self.data) branches = [s for s in d.all_structures if s.is_branch] leaves = [s for s in d.all_structures if s.is_leaf] assert len(branches) == 2 assert len(leaves) == 3 def test_position_criterion(self): def position(structure, index=None, value=None): return (np.any(structure.indices()[0] == 6) or np.any(structure.indices()[0] == 8)) d = Dendrogram.compute(self.data, is_independent=position) branches = [s for s in d.all_structures if s.is_branch] leaves = [s for s in d.all_structures if s.is_leaf] assert len(branches) == 1 assert len(leaves) == 2 # Check that leaf that used to contain pixels 1, 2, and 3 is now just # part of the main branch. assert np.all(branches[0].indices(subtree=False) == np.array([0, 1, 2, 3, 4, 7, 9])) # Try and reproduce the benchmark tests using a function instead of arguments from .build_benchmark import BENCHMARKS @pytest.mark.parametrize(('filename'), BENCHMARKS.keys()) def test_benchmark(filename): from astropy.io import fits import os path = os.path.join(os.path.dirname(__file__), 'benchmark_data', filename) p = BENCHMARKS[filename] data = fits.getdata(path, 1) # Now define a function that will test the criteria def is_independent_test(structure, index=None, value=None): if value is None: value = structure.vmin if 'min_delta' in p: if structure.vmax - value < p['min_delta']: return False if 'min_npix' in p: if len(structure.values()) < p['min_npix']: return False return True d1 = Dendrogram.compute(data, is_independent=is_independent_test, min_value=p['min_value'] if 'min_value' in p else "min") d2 = Dendrogram.load_from(path) assert d1 == d2 astrodendro-0.2.0+dfsg1.orig/astrodendro/tests/benchmark.py0000644000175000017500000000321612224030243023310 0ustar noahfxnoahfx# Licensed under an MIT open source license - see LICENSE import timeit import os from ._testdata import data from .. import Dendrogram def benchmark_compute(): print("Data loaded. Starting dendrogram computations...") def test1(): Dendrogram.compute(data, min_npix=4, min_value=1.4, min_delta=0.3) print(" Completed an iteration of test1.") def test2(): Dendrogram.compute(data, min_npix=8, min_value=1.4) print(" Completed an iteration of test2.") num = 3 t1 = timeit.timeit(test1, number=num) / num t2 = timeit.timeit(test2, number=num) / num print("test1 average over {num} computations: {result:.3} s".format(num=num, result=t1)) print("test2 average over {num} computations: {result:.3} s".format(num=num, result=t2)) print("Total average compute time: {0:.3}s".format((t1 + t2) / 2)) def benchmark_hdf5(): print("\nGenerating complex dendrogram for HDF5 import/export...") d = Dendrogram.compute(data, min_npix=2, min_value=1.4, min_delta=0.01) print("Dendrogram generated. Testing import and export...") filename = '.astrodendro-hdf5-benchmark.hdf5' if os.path.exists(filename): os.remove(filename) num = 2 def testHDF5(): print('Exporting...') d.save_to(filename) print('Importing...') d2 = Dendrogram.load_from(filename) os.remove(filename) t = timeit.timeit(testHDF5, number=num) / num print("Total average export+import time: {0:.3}s".format(t)) if __name__ == '__main__': try: benchmark_compute() benchmark_hdf5() except KeyboardInterrupt: print("Cancelled.") astrodendro-0.2.0+dfsg1.orig/astrodendro/tests/test_index.py0000644000175000017500000000626412224030243023532 0ustar noahfxnoahfx# Licensed under an MIT open source license - see LICENSE import numpy as np from ..dendrogram import Dendrogram, TreeIndex def assert_permuted_fancyindex(x, y): """ Assert that two fancy indices (tuples of integer ndarrays) are permutations of each other """ if not isinstance(x, tuple) or not(isinstance(x[0], np.ndarray)): raise TypeError("First argument not a fancy index: %s" % x) if not isinstance(y, tuple) or not(isinstance(y[0], np.ndarray)): raise TypeError("Second argument not a fancy index: %s" % y) dtype = [('%i' % i, 'i') for i in range(len(x))] x = np.array(list(zip(*x)), dtype=dtype) y = np.array(list(zip(*y)), dtype=dtype) np.testing.assert_array_equal(np.sort(x), np.sort(y)) def assert_identical_fancyindex(x, y): for xx, yy in zip(x, y): np.testing.assert_array_equal(xx, yy) class TestIndex(object): def setup_method(self, method): pass def assert_valid_index(self, d, index): """Assert that a dendrogram index is correct""" #subtree=False is a permutation of np.where(index_map == x) for s in d.all_structures: ind = index.indices(s.idx, subtree=False) expected = np.where(d.index_map == s.idx) assert_permuted_fancyindex(ind, expected) #subtree=True is the same, but includes descendents for s in d.all_structures: ind = index.indices(s.idx, subtree=True) expected = [np.where(d.index_map == ss.idx) for ss in [s] + s.descendants] expected = tuple(np.hstack(i) for i in zip(*expected)) assert_permuted_fancyindex(ind, expected) def test_single_trunk(self): data = np.array([[1, 1, 1, 1], [1, 5, 1, 1], [1, 4, 3, 5], [1, 1, 1, 4]]) d = Dendrogram.compute(data) assert len(d) == 3 self.assert_valid_index(d, TreeIndex(d)) def test_two_trunk(self): data = np.array([[1, 1, 1, 1], [1, 5, 1, 1], [1, 4, 1, 5], [1, 1, 1, 4]]) d = Dendrogram.compute(data, min_value=2) assert len(d.trunk) == 2 self.assert_valid_index(d, TreeIndex(d)) def test_single_structure(self): data = np.array([[1, 1, 1, 1], [1, 5, 1, 1], [1, 4, 1, 1], [1, 1, 1, 1]]) d = Dendrogram.compute(data) assert len(d) == 1 self.assert_valid_index(d, TreeIndex(d)) def test_cube(self): np.random.seed(42) data = np.random.random((5, 5, 5)) d = Dendrogram.compute(data) self.assert_valid_index(d, TreeIndex(d)) def test_1d(self): np.random.seed(42) data = np.random.random(5) d = Dendrogram.compute(data) assert len(d) > 0 self.assert_valid_index(d, TreeIndex(d)) def test_4d(self): np.random.seed(42) data = np.random.random((3, 3, 3, 3)) d = Dendrogram.compute(data) assert len(d) > 0 self.assert_valid_index(d, TreeIndex(d)) astrodendro-0.2.0+dfsg1.orig/astrodendro/tests/test_io.py0000644000175000017500000001314712773156651023055 0ustar noahfxnoahfx# Licensed under an MIT open source license - see LICENSE " Test import and export of dendrograms " import os import pytest import numpy as np from .. import Dendrogram from ..structure import Structure from .test_index import assert_permuted_fancyindex from astropy.wcs import WCS class TestIO(object): def setup_method(self, method): n = np.nan self.data = np.array([[[n, n, n, n, n, n, n, n], [n, 4, n, n, n, n, n, n], [n, n, n, 1, n, n, 0, 5], [3, n, n, 2, 3, 2, 0, n]], [[n, n, n, n, n, n, n, n], [1, n, n, n, n, n, n, n], [1, n, 1, 1, 0, n, 0, 1], [2, n, n, 1, 3, 1, n, 1]], [[n, 2, 3, 4, n, n, n, n], [1, 1, n, n, n, n, n, n], [n, n, n, n, n, n, 0, 1], [n, n, n, 1, 0, 1, 0, n]]]) self.test_filename = None def teardown_method(self, method): if self.test_filename and os.path.exists(self.test_filename): os.remove(self.test_filename) def compare_dendrograms(self, d1, d2): " Helper method that ensures d1 and d2 are equivalent " # Do we get the same number of structures? assert len(d1) == len(d2) # Do we recover the data exactly? np.testing.assert_array_equal(d1.data, d2.data) # Now check that the structures are the same: for s in d2: idx = s.idx structure1, structure2 = d1[idx], d2[idx] assert_permuted_fancyindex(structure1.indices(subtree=False), structure2.indices(subtree=False)) assert np.all(np.sort(structure1.values(subtree=False)) == np.sort(structure2.values(subtree=False))) assert isinstance(structure1, type(structure2)) # Compare the coordinates and data values of all peak pixels: assert structure1.get_peak(subtree=True) == \ structure2.get_peak(subtree=True) assert structure2._tree_index is not None # Below are the actual tests for each import/export format: def test_hdf5(self): self.test_filename = 'astrodendro-test.hdf5' d1 = Dendrogram.compute(self.data, verbose=False) d1.save_to(self.test_filename, format='hdf5') d2 = Dendrogram.load_from(self.test_filename, format='hdf5') self.compare_dendrograms(d1, d2) def test_fits(self): self.test_filename = 'astrodendro-test.fits' d1 = Dendrogram.compute(self.data, verbose=False) d1.save_to(self.test_filename, format='hdf5') d2 = Dendrogram.load_from(self.test_filename, format='hdf5') self.compare_dendrograms(d1, d2) def test_hdf5_auto(self): d1 = Dendrogram.compute(self.data, verbose=False) # recognize from extension d1.save_to('astrodendro-test.hdf5') # no way to tell with pytest.raises(IOError): d1.save_to('astrodendro-test') # no way to tell, so have to explicitly give format d1.save_to('astrodendro-test', format='hdf5') # recognize from extension d2 = Dendrogram.load_from('astrodendro-test.hdf5') # recognize from signature d2 = Dendrogram.load_from('astrodendro-test') def test_fits_auto(self): d1 = Dendrogram.compute(self.data, verbose=False) # recognize from extension d1.save_to('astrodendro-test.fits') # no way to tell with pytest.raises(IOError): d1.save_to('astrodendro-test') # no way to tell, so have to explicitly give format d1.save_to('astrodendro-test', format='fits') # recognize from extension d2 = Dendrogram.load_from('astrodendro-test.fits') # recognize from signature d2 = Dendrogram.load_from('astrodendro-test') def test_hdf5_with_wcs(self): self.test_filename = 'astrodendro-test-wcs.hdf5' test_wcs = WCS(header=dict(cdelt1=1, crval1=0, crpix1=1, cdelt2=2, crval2=0, crpix2=1, cdelt3=3, crval3=0, crpix3=1)) d1 = Dendrogram.compute(self.data, verbose=False, wcs=test_wcs) d1.save_to(self.test_filename, format='hdf5') d2 = Dendrogram.load_from(self.test_filename, format='hdf5') assert d2.wcs.to_header_string() == d1.wcs.to_header_string() def test_fits_with_wcs(self): self.test_filename = 'astrodendro-test-wcs.fits' test_wcs = WCS(header=dict(cdelt1=1, crval1=0, crpix1=1, cdelt2=2, crval2=0, crpix2=1, cdelt3=3, crval3=0, crpix3=1)) d1 = Dendrogram.compute(self.data, verbose=False, wcs=test_wcs) d1.save_to(self.test_filename, format='fits') d2 = Dendrogram.load_from(self.test_filename, format='fits') assert d2.wcs.to_header_string() == d1.wcs.to_header_string() @pytest.mark.parametrize('ext', ('fits', 'hdf5')) def test_reload_retains_dendro_reference(self, ext): # regression test for issue 106 d1 = Dendrogram.compute(self.data, verbose=False) self.test_filename = 'astrodendro-test.%s' % ext d1.save_to(self.test_filename) d2 = Dendrogram.load_from(self.test_filename) for s in d1: np.testing.assert_array_equal(d2[s.idx].get_mask(subtree=True), d1[s.idx].get_mask(subtree=True)) astrodendro-0.2.0+dfsg1.orig/astrodendro/tests/test_recursion.py0000644000175000017500000000477112773156651024462 0ustar noahfxnoahfx# Licensed under an MIT open source license - see LICENSE import sys import numpy as np import matplotlib.pyplot as plt plt.switch_backend('Agg') from .. import Dendrogram class TestRecursionLimit(object): """ Test that we can efficiently compute deep dendrogram trees without hitting the recursion limit. Note: plot() uses recursion but we should be able to *compute* dendrograms without using deep recursion, even if we aren't yet able to plot them without using recursion. """ def setup_method(self, method): self._oldlimit = sys.getrecursionlimit() sys.setrecursionlimit(100) # Reduce recursion limit dramatically (default is 1000) size = 10000 # number of leaves desired in the dendrogram self._make_data(size) def _make_data(self, size): data1 = np.arange(size * 2) # first row data2 = np.arange(size * 2) # second row data2[::2] += 2 data1[-1] = 0 # set the last pixel in the first row to zero, to trigger a deep ancestor search data = np.vstack((data1, data2)) self.data = data self.size = size # result looks like this: # [[ 0, 1, 2, 3, 4, 5, ...], # [ 2, 1, 4, 3, 6, 5, ...]] # Notice every second column has a local maximum # so there are [size] local maxima in the array def test_compute(self): d = Dendrogram.compute(self.data) assert len(d.leaves) == self.size, "We expect {n} leaves, not {a}.".format(n=self.size, a=len(d.leaves)) def test_computing_level(self): d = Dendrogram.compute(self.data) # Now pick a structure near the middle of the dendrogram: mid_structure = d.structure_at((0, self.size // 2)) # Compute its level: sys.setrecursionlimit(100000) _ = mid_structure.level # Check that .level satisfies the recurrence relation: # 0 if root else parent.level + 1 for structure in d.all_structures: if structure.parent is None: assert structure.level == 0 else: assert structure.level == structure.parent.level + 1 def test_plot(self): sys.setrecursionlimit(self._oldlimit) ax = plt.gca() sys.setrecursionlimit(150) d = Dendrogram.compute(self.data) p = d.plotter() p.plot_tree(ax) def teardown_method(self, method): sys.setrecursionlimit(self._oldlimit) astrodendro-0.2.0+dfsg1.orig/astrodendro/tests/test_flux.py0000644000175000017500000000746612773156651023433 0ustar noahfxnoahfximport pytest import numpy as np from astropy import units as u from ..flux import compute_flux def strip_parentheses(string): return string.replace('(', '').replace(')', '') COMBINATIONS = \ [ (np.array([1, 2, 3]) * u.Jy, u.Jy, {}, 6 * u.Jy), (np.array([1, 2, 3]) * u.mJy, u.Jy, {}, 0.006 * u.Jy), (np.array([1, 2, 3]) * u.erg / u.cm ** 2 / u.s / u.Hz, u.Jy, {}, 6e23 * u.Jy), (np.array([1, 2, 3]) * u.erg / u.cm ** 2 / u.s / u.micron, u.Jy, {'wavelength': 2 * u.micron}, 8005538284.75565 * u.Jy), (np.array([1, 2, 3]) * u.Jy / u.arcsec ** 2, u.Jy, {'spatial_scale': 2 * u.arcsec}, 24. * u.Jy), (np.array([1, 2, 3]) * u.Jy / u.beam, u.Jy, {'spatial_scale': 2 * u.arcsec, 'beam_major': 1 * u.arcsec, 'beam_minor': 0.5 * u.arcsec}, 42.36166269526079 * u.Jy), (np.array([1, 2, 3]) * u.K, u.Jy, {'spatial_scale': 2 * u.arcsec, 'beam_major': 1 * u.arcsec, 'beam_minor': 0.5 * u.arcsec, 'wavelength': 2 * u.mm}, 0.38941636582186634 * u.Jy), (np.array([1, 2, 3]) * u.K, u.Jy, {'spatial_scale': 2 * u.arcsec, 'beam_major': 1 * u.arcsec, 'beam_minor': 0.5 * u.arcsec, 'wavelength': 100 * u.GHz}, 0.17331365650395836 * u.Jy), ] @pytest.mark.parametrize(('input_quantities', 'output_unit', 'keywords', 'output'), COMBINATIONS) def test_compute_flux(input_quantities, output_unit, keywords, output): q = compute_flux(input_quantities, output_unit, **keywords) np.testing.assert_allclose(q.value, output.value) assert q.unit == output.unit def test_monochromatic_wav_missing(): with pytest.raises(ValueError) as exc: compute_flux(np.array([1, 2, 3]) * u.erg / u.cm ** 2 / u.s / u.micron, u.Jy) assert exc.value.args[0] == 'wavelength is needed to convert from erg / (cm2 micron s) to Jy' def test_monochromatic_wav_invalid_units(): with pytest.raises(ValueError) as exc: compute_flux(np.array([1, 2, 3]) * u.erg / u.cm ** 2 / u.s / u.micron, u.Jy, wavelength=3 * u.L) assert exc.value.args[0] == 'wavelength should be a physical length' def test_surface_brightness_scale_missing(): with pytest.raises(ValueError) as exc: compute_flux(np.array([1, 2, 3]) * u.Jy / u.arcsec ** 2, u.Jy) assert strip_parentheses(exc.value.args[0]) == 'spatial_scale is needed to convert from Jy / arcsec2 to Jy' def test_surface_brightness_invalid_units(): with pytest.raises(ValueError) as exc: compute_flux(np.array([1, 2, 3]) * u.Jy / u.arcsec ** 2, u.Jy, spatial_scale=3 * u.m) assert exc.value.args[0] == 'spatial_scale should be an angle' def test_per_beam_scale_missing(): with pytest.raises(ValueError) as exc: compute_flux(np.array([1, 2, 3]) * u.Jy / u.beam, u.Jy, beam_major=3 * u.arcsec, beam_minor=2. * u.arcsec) assert strip_parentheses(exc.value.args[0]) == 'spatial_scale is needed to convert from Jy / beam to Jy' with pytest.raises(ValueError) as exc: compute_flux(np.array([1, 2, 3]) * u.Jy / u.beam, u.Jy, spatial_scale=3 * u.arcsec, beam_minor=2. * u.arcsec) assert strip_parentheses(exc.value.args[0]) == 'beam_major is needed to convert from Jy / beam to Jy' with pytest.raises(ValueError) as exc: compute_flux(np.array([1, 2, 3]) * u.Jy / u.beam, u.Jy, spatial_scale=3 * u.arcsec, beam_major=2. * u.arcsec) assert strip_parentheses(exc.value.args[0]) == 'beam_minor is needed to convert from Jy / beam to Jy' def test_per_beam_invalid_units(): with pytest.raises(ValueError) as exc: compute_flux(np.array([1, 2, 3]) * u.Jy / u.beam, u.Jy, spatial_scale=3 * u.arcsec, beam_major=3 * u.m, beam_minor=2. * u.arcsec) assert exc.value.args[0] == 'beam_major should be an angle' with pytest.raises(ValueError) as exc: compute_flux(np.array([1, 2, 3]) * u.Jy / u.beam, u.Jy, spatial_scale=3 * u.arcsec, beam_major=3 * u.arcsec, beam_minor=2. * u.m) assert exc.value.args[0] == 'beam_minor should be an angle' astrodendro-0.2.0+dfsg1.orig/astrodendro/tests/test_compute.py0000644000175000017500000002572412773156651024126 0ustar noahfxnoahfx# Licensed under an MIT open source license - see LICENSE import numpy as np import pytest from .. import Dendrogram, periodic_neighbours, Structure class Test2DimensionalData(object): def test_dendrogramWithNan(self): n = np.nan data = np.array([[n, n, n, n, n, n, n, n], [n, 4, n, n, n, n, n, n], [n, n, n, 1, n, n, 0, 5], [3, n, n, 2, 3, 2, 0, n]]) d = Dendrogram.compute(data) ######################################## # Check the trunk elements: leaves = [structure for structure in d.trunk if structure.is_leaf] branches = [structure for structure in d.trunk if structure not in leaves] assert len(leaves) == 2, "We expect two leaves among the lowest structures (the trunk)" assert len(branches) == 1, "We expect one branch among the lowest structures (the trunk)" for leaf in leaves: assert len(leaf.values(subtree=False)) == 1, "Leaves in the trunk are only expected to contain one point" assert leaf.parent is None assert leaf.ancestor == leaf assert leaf.get_npix() == 1 if leaf.values(subtree=False)[0] == 4: assert list(zip(*leaf.indices(subtree=False)))[0] == (1, 1) elif leaf.values(subtree=False)[0] == 3: assert list(zip(*leaf.indices(subtree=False)))[0] == (3, 0) else: self.fail("Invalid value of flux in one of the leaves") ######################################## # Check properties of the branch: branch = branches[0] assert branch.parent is None assert branch.ancestor == branch assert branch.get_npix(subtree=False) == 1 # only pixel is a 0 assert branch.get_npix(subtree=True) == 7 assert len(branch.children) == 2 for leaf in branch.children: assert leaf.is_leaf assert leaf.ancestor == branch assert leaf.parent == branch if 5 in leaf.values(subtree=False): assert sum(leaf.values(subtree=False)) == 5 elif 3 in leaf.values(subtree=False): assert sum(leaf.values(subtree=False)) == 1 + 2 + 3 + 2 else: self.fail("Invalid child of the branch") def test_mergeLevelAndHeight(self): n = np.nan data = np.array([[n, n, n, n, n, ], [n, 4, 2, 5, n, ], [n, n, n, n, 0, ]]) d = Dendrogram.compute(data) branch, leaf4, leaf5 = d.trunk[0], d.structure_at((1, 1)), d.structure_at((1, 3)) assert leaf4.height == 4. assert leaf5.height == 5. assert branch.height == 4. def test_dendrogramWithConstBackground(self): # Test a highly artificial array containing a lot of equal pixels data = np.array([[1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1], [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1], [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1], [1, 1, 1, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1], [1, 1, 3, 5, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1], [1, 1, 2, 3, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1], [1, 1, 1, 1, 3, 4, 3, 1, 1, 1, 1, 1, 1, 1], [1, 1, 1, 1, 2, 3, 2, 1, 1, 1, 1, 1, 1, 1], [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1], [1, 1, 1, 1, 2, 3, 2, 1, 1, 1, 1, 1, 1, 1], [1, 1, 1, 1, 3, 4, 3, 1, 1, 2, 2, 1, 1, 1], [1, 1, 1, 1, 2, 3, 2, 1, 1, 1, 1, 1, 1, 1], [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1], [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1], ]) d = Dendrogram.compute(data) assert len(d) <= 7 # Some of the '1' valued pixels get included with the leaves and branches, # hence number of structures is currently 7 and not 6 as expected. # Fixing this is probably more trouble than it's worth. leaf_with_twos = d.structure_at((10, 9)) assert leaf_with_twos.height == 2 # Check that all structures contain a reference to the dendrogram for structure in d: assert structure._dendrogram is d class Test3DimensionalData(object): def setup_method(self, method): from ._testdata import data self.data = data def test_dendrogramComputation(self): d = Dendrogram.compute(self.data, min_npix=8, min_delta=0.3, min_value=1.4) # This data with these parameters should produce 55 leaves assert len(d.leaves) == 55 # Now check every pixel in the data cube (this takes a while). st_map = -np.ones(self.data.shape, dtype=np.int) for st in d.all_structures: st_map[st.indices(subtree=False)] = st.idx #check that vmin/vmax/peak are correct for st in d.all_structures: assert st.vmin == self.data[st.indices(subtree=False)].min() assert st.vmax == self.data[st.indices(subtree=False)].max() pk_exp = self.data[st.indices(subtree=True)].max() ind, pk = st.get_peak(subtree=True) assert self.data[ind] == pk assert pk_exp == pk # The "right" way to do this is loop through indices, # and repeatedly call structure_at(). However, this is quite slow # structure_at is a thin wrapper around index_map, # and we compare index_map to st_map instead np.testing.assert_array_equal(st_map, d.index_map) # here, we test a few values of structure_at for coord in np.indices(self.data.shape).reshape(self.data.ndim, np.prod(self.data.shape)).transpose()[::100]: coord = tuple(coord) f = self.data[coord] structure = d.structure_at(coord) if structure is not None: assert structure.idx == st_map[coord], "Pixel at {0} is claimed to be part of {1}, but that structure does not contain the coordinate {0}!".format(coord, structure) else: assert st_map[coord] == -1 class TestNDimensionalData(object): def test_4dim(self): " Test 4-dimensional data " data = np.zeros((5, 5, 5, 5)) # Create a 5x5x5x5 array initialized to zero # N-dimensional data is hard to conceptualize so I've kept this simple. # Create a local maximum (value 5) at the centre data[2, 2, 2, 2] = 5 # add some points around it with value 3. Note that '1:4:2' is equivalent to saying indices '1' and '3' data[2, 1:4:2, 2, 2] = data[2, 2, 1:4:2, 2] = data[2, 2, 2, 1:4:2] = 3 # Add a trail of points of value 2 connecting one of those 3s to a 4 data[0:3, 0, 2, 2] = 2 # Sets [0, 0, 2, 2], [1, 0, 2, 2], and [2, 0, 2, 2] all equal to 2 -> will connect to the '3' at [2, 1, 2, 2] data[0, 0, 2, 1] = 4 # Now dendrogram it: d = Dendrogram.compute(data, min_value=1) # We expect two leaves: leaves = d.leaves assert len(leaves) == 2 # We expect one branch: branches = [i for i in d.all_structures if i.is_branch] assert len(branches) == 1 assert len(d.trunk) == 1 assert d.trunk[0] == branches[0] # The maxima of each leaf should be at [2,2,2,2] and [0,3,2,1] for leaf in leaves: assert leaf.get_peak() in (((2, 2, 2, 2), 5.), ((0, 0, 2, 1), 4.)) assert leaves[0].get_peak() != leaves[1].get_peak() # Check out a few more properties of the leaf around the global maximum: leaf = d.structure_at((2, 2, 2, 2)) assert leaf.vmax == 5 assert leaf.vmin == 2 assert leaf.get_npix() == 1 + 6 + 2 # Contains 1x '5', 6x '3', and 2x '2'. The other '2' should be in the branch # Check that the only pixel in the branch is a '2' at [0,0,2,2] assert (list(zip(*branches[0].indices(subtree=False))), branches[0].values(subtree=False)) == ([(0, 0, 2, 2), ], [2., ]) def test_periodic(): x = np.array([[0, 0, 0, 0, 0, ], [1, 1, 0, 1, 1], [0, 0, 0, 0, 0]]) d = Dendrogram.compute(x, min_value=0.5, neighbours=periodic_neighbours(1)) expected = np.array([[-1, -1, -1, -1, -1], [0, 0, -1, 0, 0], [-1, -1, -1, -1, -1]]) np.testing.assert_array_equal(d.index_map, expected) def test_periodic_left(): x = np.array([[1, 0, 0, 0, 0], [1, 0, 0, 0, 1], [1, 0, 0, 0, 0]]) d = Dendrogram.compute(x, min_value=0.5, neighbours=periodic_neighbours(1)) expected = np.array([[0, -1, -1, -1, -1], [0, -1, -1, -1, 0], [0, -1, -1, -1, -1]]) np.testing.assert_array_equal(d.index_map, expected) def test_periodic_left_narrow(): x = np.array([[0, 0, 0, 0, 0], [1, 1, 0, 0, 1], [0, 0, 0, 0, 0]]) d = Dendrogram.compute(x, min_value=0.5, neighbours=periodic_neighbours(1)) expected = np.array([[-1, -1, -1, -1, -1], [0, 0, -1, -1, 0], [-1, -1, -1, -1, -1]]) np.testing.assert_array_equal(d.index_map, expected) def test_periodic_right(): x = np.array([[0, 0, 0, 0, 1], [1, 0, 0, 0, 1], [0, 0, 0, 0, 1]]) d = Dendrogram.compute(x, min_value=0.5, neighbours=periodic_neighbours(1)) expected = np.array([[-1, -1, -1, -1, 0], [0, -1, -1, -1, 0], [-1, -1, -1, -1, 0]]) np.testing.assert_array_equal(d.index_map, expected) def test_periodic_right_narrow(): x = np.array([[0, 0, 0, 0, 0], [1, 0, 0, 1, 1], [0, 0, 0, 0, 0]]) d = Dendrogram.compute(x, min_value=0.5, neighbours=periodic_neighbours(1)) expected = np.array([[-1, -1, -1, -1, -1], [0, -1, -1, 0, 0], [-1, -1, -1, -1, -1]]) np.testing.assert_array_equal(d.index_map, expected) from .build_benchmark import BENCHMARKS @pytest.mark.parametrize(('filename'), BENCHMARKS.keys()) def test_benchmark(filename): from astropy.io import fits import os path = os.path.join(os.path.dirname(__file__), 'benchmark_data', filename) p = BENCHMARKS[filename] data = fits.getdata(path, 1) d1 = Dendrogram.compute(data, **p) d2 = Dendrogram.load_from(path) assert d1 == d2 # Check that all structures contain a reference to the dendrogram for structure in d1: assert structure._dendrogram is d1 astrodendro-0.2.0+dfsg1.orig/astrodendro/tests/build_benchmark.py0000644000175000017500000000175312224030243024473 0ustar noahfxnoahfximport os import numpy as np from astropy.io import fits from astrodendro import Dendrogram BENCHMARKS = {'2d1.fits': {'min_value': 2.5, 'min_npix': 20}, '2d2.fits': {'min_value': 2.5}, '2d3.fits': {'min_value': 2.5, 'min_delta': 1}, '3d1.fits': {'min_value': 4.5, 'min_npix': 20}, '3d2.fits': {'min_value': 4.5}, '3d3.fits': {'min_value': 4.5, 'min_delta':1}} def main(): data = fits.getdata(os.path.join('benchmark_data', '2d.fits')) for outfile in '2d1.fits 2d2.fits 2d3.fits'.split(): d = Dendrogram.compute(data, verbose=True, **BENCHMARKS[outfile]) d.save_to(os.path.join('benchmark_data', outfile)) data = fits.getdata(os.path.join('benchmark_data', '3d.fits')) for outfile in '3d1.fits 3d2.fits 3d3.fits'.split(): d = Dendrogram.compute(data, verbose=True, **BENCHMARKS[outfile]) d.save_to(os.path.join('benchmark_data', outfile)) if __name__ == "__main__": main() astrodendro-0.2.0+dfsg1.orig/astrodendro/tests/__init__.py0000644000175000017500000000000012224030243023101 0ustar noahfxnoahfxastrodendro-0.2.0+dfsg1.orig/astrodendro/tests/_testdata.py0000644000175000017500000000260612224030243023330 0ustar noahfxnoahfx""" Realistic data for unit tests and benchmarks This module provides a 107x107x602 pixel data cube where all the flux values greater than 1.4 represent real data from L1448 13co, but all other (lesser) values are randomly generated. """ import os try: import gzip except AttributeError: # gzip tries to import from the "io" package, which causes an error # if the user's current directory is the "astrodendro" directory # which has its own "io" package. raise RuntimeError("This test cannot be run from a folder with an 'io'" " subfolder. Please change to a different directory" " and re-run this test.") import numpy as np # First, load the data cube from the file: _datafile_path = os.path.join(os.path.dirname(__file__), 'sample-data-hl.npz') # data file contains saved flux_values and indices from L1448 13co, # a data cube which originally had a shape of (107, 107, 602) # but filtered to only include data points above value of 1.4 arrays = np.load(_datafile_path) _flux_values = arrays['flux_values'] _indices = arrays['coords'] # Create a new data cube filled with random values no greater than 1.4 # (these will later be filtered out, but that filtering should be part of # the tests and benchmark) data = np.random.normal(0, 0.25, (107, 107, 602)) for i in range(_flux_values.size): data[tuple(_indices[i])] = _flux_values[i] astrodendro-0.2.0+dfsg1.orig/astrodendro/__init__.py0000644000175000017500000000044712773161167022001 0ustar noahfxnoahfx# Licensed under an MIT open source license - see LICENSE from .dendrogram import Dendrogram, periodic_neighbours from .structure import Structure from .analysis import ppv_catalog, pp_catalog from .plot import DendrogramPlotter from .viewer import BasicDendrogramViewer __version__ = '0.2.0' astrodendro-0.2.0+dfsg1.orig/astrodendro/structure_collection.py0000644000175000017500000000047712534017621024506 0ustar noahfxnoahfx# Licensed under an MIT open source license - see LICENSE from matplotlib.collections import LineCollection class StructureCollection(LineCollection): @property def structures(self): return self._structures @structures.setter def structures(self, values): self._structures = values astrodendro-0.2.0+dfsg1.orig/setup.py0000755000175000017500000000373512773161161017056 0ustar noahfxnoahfx#!/usr/bin/env python from setuptools import setup, Command from distutils.command.build_py import build_py class DendroTest(Command): user_options = [] def initialize_options(self): pass def finalize_options(self): pass def run(self): import os import shutil import tempfile # First ensure that we build the package so that 2to3 gets executed self.reinitialize_command('build', inplace=False) self.run_command('build') build_cmd = self.get_finalized_command('build') new_path = os.path.abspath(build_cmd.build_lib) # Copy the build to a temporary directory for the purposes of testing # - this avoids creating pyc and __pycache__ directories inside the # build directory tmp_dir = tempfile.mkdtemp(prefix='astrodendro-test-') testing_path = os.path.join(tmp_dir, os.path.basename(new_path)) shutil.copytree(new_path, testing_path) import sys import subprocess errno = subprocess.call([sys.executable, os.path.abspath('runtests.py')], cwd=testing_path) raise SystemExit(errno) setup(name='astrodendro', version='0.2.0', url='http://www.dendrograms.org', description='Python package for computation of astronomical dendrograms', author='Thomas Robitaille, Chris Beaumont, Adam Ginsburg, Braden MacDonald, and Erik Rosolowsky', author_email='thomas.robitaille@gmail.com', packages=['astrodendro', 'astrodendro.io', 'astrodendro.tests'], package_data={'astrodendro.tests':['*.npz', 'benchmark_data/*fits']}, provides=['astrodendro'], requires=['numpy'], cmdclass={'build_py': build_py, 'test': DendroTest}, keywords=['Scientific/Engineering'], classifiers=[ "Development Status :: 4 - Beta", "Programming Language :: Python", "License :: OSI Approved :: MIT License", ], )