ELF>p,@@h@8 @@@@@@88@8@@@ cc< ((c(cTT@T@DDPtdppCpC44QtdRtdcc/lib64/ld-linux-x86-64.so.2GNU GNU5,Xr_JѰnkׇ{$PU!N0L(({|}~ ˊЪŹ@ĉ9.2Ϊݣk4 fUas+-P(kԿ(T{BED #n XR>uL&6$M}1."&Ss?sxyf? _d7()&]k`<g6U%.i?ZtJ.E} P'@-'@5`c6!`chcp&@$@kP*@7!`cc*@$@Xc+@m*@`+@Pc%@p+@libc.so.6socketfflush__printf_chkreaddirsprintf_IO_putcfopenstrncmpstrrchr__longjmp_chkisalpharegexecpipe__strdupconnect__fdelt_chkclosedirftellinet_ntopsignalregfree__stack_chk_fail__lxstatunlinklistenselectmkdirreallocclockabortstdin_exitdivmemchrstrpbrkstrftime__assert_failmkstemplocaltime_risspacestrtodstrtolfeofisprintfgetcfgetsstrlenisxdigitgetaddrinfomemsetisalnumstrstrislowerrmdir__errno_locationbindfseekchdirmemcmpdup2clearerrstrptime_setjmp__fprintf_chkstdoutfputcfputsregerrorlseekmemcpyfcloserandstrtoulsetsockoptmallocrealpathisupperopendir__ctype_b_locgetenvsscanfrecvfromregcompisgraphstderr__snprintf_chkreadlinkexecvpstrncatstrtoullfilenoutimesusleepgetcwdfwritefreadgettimeofdayrenamegeteuidwaitpid__fread_chklocaltimestrchrsendtovforkmktimefdopenqsortaccept__ctype_toupper_loc__ctype_tolower_locfreeaddrinfosetvbuffcntl__sprintf_chk__xstatisdigitiscntrlmemmoveaccessstrcmpstrerror__libc_start_mainferrorisasciisnprintfispunct__environ__gmon_start__GLIBC_2.11GLIBC_2.7GLIBC_2.14GLIBC_2.15GLIBC_2.4GLIBC_2.3.4GLIBC_2.2.5GLIBC_2.3  Nii Ycnii yti ui ii cCPcXc`c}hcc c(c0c8c@cHcPcXc `c hcpc xc c ccccccccȐcАcؐccccccccc c(c 0c!8c"@c#HcPc$Xc%`c&hc'pc(xc)c*c+c,c-c.c/c0c1c2ȑc3Бc|ؑc4c{c5c6c7c8c9c:c; c<(c=0c>8c?@c@HcAPcBXcC`cDhcEpcFxcGcHcIcJcKcLcMcNcOcPȒcQВcRؒcScTcUcVcWcXcYcc cZ(c[0c\8c@c]Hc^Pc_Xc``cahcbpccxcdcecfcgchcicjckclcȓcГcmؓcncocpcqcrccsctcu cv(cw0cx8cy@czHHl#HtH5l#%l#@%l#h%k#h%k#h%k#h%k#h%k#h%k#h%k#hp%k#h`%k#h P%k#h @%k#h 0%k#h %k#h %k#h%k#h%k#h%zk#h%rk#h%jk#h%bk#h%Zk#h%Rk#h%Jk#hp%Bk#h`%:k#hP%2k#h@%*k#h0%"k#h %k#h%k#h% k#h%k#h %j#h!%j#h"%j#h#%j#h$%j#h%%j#h&%j#h'p%j#h(`%j#h)P%j#h*@%j#h+0%j#h, %j#h-%j#h.%j#h/%j#h0%zj#h1%rj#h2%jj#h3%bj#h4%Zj#h5%Rj#h6%Jj#h7p%Bj#h8`%:j#h9P%2j#h:@%*j#h;0%"j#h< %j#h=%j#h>% j#h?%j#h@%i#hA%i#hB%i#hC%i#hD%i#hE%i#hF%i#hGp%i#hH`%i#hIP%i#hJ@%i#hK0%i#hL %i#hM%i#hN%i#hO%i#hP%zi#hQ%ri#hR%ji#hS%bi#hT%Zi#hU%Ri#hV%Ji#hWp%Bi#hX`%:i#hYP%2i#hZ@%*i#h[0%"i#h\ %i#h]%i#h^% i#h_%i#h`%h#ha%h#hb%h#hc%h#hd%h#he%h#hf%h#hgp%h#hh`%h#hiP%h#hj@%h#hk0%h#hl %h#hm%h#hn%h#ho%h#hp%zh#hq%rh#hr%jh#hs%bh#ht%Zh#hu%Rh#hv%Jh#hwp%Bh#hx`%:h#hyP%2h#hz@%*h#h{0%"h#h| %h#h}%h#h~% h#h%h#h%g#h%g#h%g#h%g#h%g#h1I^HHPTI@?BH>BH]-@WfDWcUH-PcHHw]øHt]PcPcUH-PcHHHH?HHu]úHt]HƿPc=Yg#uUH~]Fg#@H=`#tHtU cH]{sUHSH_AA 1AuAL 9}AD3AHЃ vHW볐E H8E H(E HE HEHEHAD 004AD 0HEfHuIL E H< t< tHnfDE\HXHw7Eu`DUH6fDHpf@uH1 HAT$ 9_HT$ HD1t Hc|7)tH(JHHff.AWAVAAUIATIUSHD(A;G,ZHG IcE)H,HcIcHH|HE1~MLDHA9A](H[]A\A]A^A_H ,HcNAm,IE @AVI1AUATUS1,IIhnID11A,HHuLL[]LA\A]A^&fDSHHHhHtcJLTtQHDKEFDA@ 8B D8L9VuH[ÉT$ H4$HhT$ H4$|AUATIUHSHHhH1@HH=uf1~'f|4<9@<TH9@4ǁǁA@A݉HLD)=~H[]A\A]4I$hi<#u<{ti<"te1<$tS~1<]a<{t<}eHcָA|\uBfD< t@Z </Hcָ|\tɅE1E1E11fDHc["w!$ՐBAAf9EɸkEb1EҸub@Af.Af.Af.T tvfD< |< ~0< t,H9~P<"t~<;tfDD<$uf.f.<[<;H9q1ÐÃ[<w<"uAWAVIAUATUSH(_(Lo dH%(HD$1<HcI11(ABl=E~(CHA9~PM|IHEEtDAttAAD@Bl}fHc%EIIF1E1IlH}H.AmLu"LcHLLLL$AELL$JKA9N(t AHA;N(L@|LE~HD$dH3%(H(L[]A\A]A^A_gHT$LD$oLD$HcT$HHLH/T$LD$HcAL\MHA{LcLHLD$LE|/mLD$II@A}HELD$HPH}LD$IGLPI/E1IFE1Jf.UHSHt0+HfDH]tDX uH[]ÐH1[]UHS@H҉tHEH[]AVAUATLcU1SHH0dH%(HD$(1tA$@=uYE1E1<]C;<\tQHt$ aHH<-u {@uLT$ T$A9ԺDDfDE1<^E1<]uHt$HT$HfHt$$HD$-HHËD$ A9D;d$$oA;@]@t@\\;fDT$ wHT$ F$CE1HA<]GDA9ĸDND;d$$DMvEt EAE1EHEHL$(dH3 %(u H0[]A\A]A^f.AUATAUHSHHdH%(HD$1B;DL`HHÀ}u<*ufDH<*ttdf1\@<*t@fDHC<*tt3H}u@EH$}tDHHtݸHL$dH3 %(uzH[]A\A]DuH{1HE‰4$HHX8@u0}t1fDELl$H$;Ll$1ATAUHSHHdH%(HD$1?@uMfEt[H;Ht$HHH$HËD$9uG}A@tZ;uEt f1HL$dH3 %(u&H[]A\D)1HcHtHH?cEt1;Df.H9H}%HcH DHf~HcHHHcHHc1HtHHH?ff.AUATUSHH8DG dH%(HD$(1EyrAABH1hIAHcHHHCLHHD$(dH3%(DkuPH8[]A\A]fDBHI>hAHc$endAI@AVIAUATE1UHSHGHAE#nIJHu/fDI~ HHхu&HSHtzIHIFHHHuH;+tMtfHCID$IFHP Ht I~ H3IFH@(Ht HsI~ HZAn1[]A\A]A^f.[]A\A]A^HSIJDSHHHHtH[DHCT$ HH4$PH{T$ H4$H[IBH1DUHSHHHdH%(HD$1lHE;H<$tH9t 0?tHL$dH3 %(uH[]f.AVBHAUIATUSA]AƄtl.LHH]tL.tgDBDbtnubHBˆEIDu EL)E[]A\A]A^LE.E0AFE[]A\A]A^[]A\A]DA^ÀitU뤐ATUSHH0G HdH%(HD$(1D`McL'LHCHHHD$(dH3%(ku H0[]A\@UHSHHdH%(HD$1HHE;H<$tH9t 0?t*HT$dH3%(uH[]N@f.Hch[f.Hcf.ATIUSHcލkHcHHLH[]A\Ð)lj 11‰Ѓ )‰1t FHL1fHWH9u1fHG1GGGHwHW fAWIAVAUATUSH(D$x 2A@ED9wDl$A;wwH([]A\A]A^A_fDt$IG E1HD$B<IGAnHcHD$D1HHH~AGI?D$tZDL4MuMIGMnI>!HH8I~L0AGMAGuI?Au`HD$AoAGIIGD$AGD$AGHD$IG H(1[]A\A]A^A_AGD$f.wN}f.AVIAUATIUHSG;GHELDmA!HEDHHu)QfH} HLхu H[Ht*HEHHHuL;#t[]A\A]A^DAtMc5HHEJHHSHHEHPHtSH} LHHEH@HtFH} LHCE1[]A\A]A^fD^ eH@L#HuLsfD40@f.Gu kf.AUE1ATUSHHGH?ttfDDH,HuLHCLeHP HtH{ HuHCH@(Ht HuH{ HCMCuH;AuCC1CCHH[]A\A]ËCSH~ H#H{ [fATUHSGtbHGIH#EHUHHu$D@H} HLЅu H[Ht"HEH@HuL9#tH[]A\[]1A\fATIUHSHu []1A\LHUHSIHB(HtIt$H{ HSHBHtH{ HID$1[]A\Il$1[]A\@SH rH@H@H@[fDHGHt HGHHGu*wHV;QW}!HHcHHHGtfDHPHWfDAUATIUH(SHLn @HHAu@@@H@@BHh ux HL(@H@H@H0HPH߃H HuHNI\$ ID$BH[]A\A]DH{AWAVAUATUSH8H_ H|$dH %(HL$(1ɋ{D4?Hc HHI@H@H@HHHHSH@HCLEHuLB<HcxEIAF1E1H$L4 DADCt<HDfL9tUL|]IHEEtDRADtC4|tCHcHCJH,Љ H[] HcDHGH,Љ H[]Df.tHWHHf.1f.HctHWHD1DATIUHS1ۅ~fDHEHW҉~wIEH[]A\A]A^fC(9}HcHHHC H0Q҉~L A$1H[]A\A]A^LHHC LHD$HD$rSHH0H~BHt$tDH#HD$H#HD$HD$HH @(D$,HL$ w H@BHD$tHD$HD$@HHt>HD$HxHtHctHD$H@HD$H1#H0[ÐHct$,HL$H|$ 藢DAVIAUATUSH~BHtALccC E,,A9EA~wH{AuHcHct{LccHCHDk LHcLCHSHDc$ExqDkDADc$k[]A\A]A^DH{AHcuHHCHH{xLXDkIcH{@DkDk[]A\A]A^DUHSHHHRHtKHH[]f.HCHt$HPHSHt$fDUHSHHXHT$0HL$8LD$@LL$HdH%(HD$1H~Bt葮HD$p$HD$HD$ HD$)@HD$$HHt.HH$0rHD$HPHT$HHuHD$dH3%(uHX[]AUSHHH9t:HoHtAHV[HtM1;^uىHH[]H[]@HGHt$PHkHt$먐HFHHt$PHt$HVfDHHeDUHSHӉHHsHtHH[]HCH߉L$ PHsT$ H[H]d@ATAUHHnHtmHBvHtAEJuHHH]A\HH]A\HfHBt$HH$PH$t$HBHFHT$HH4$PH4$HT$Hnnf.HH #HH7HH+H #HHH #HH71HHH #HÐf.ATIUHSHFHH=BtWHsHt^H&1҅u3HCH=BtHtH@HtHLHCBHk []A\fDH9V uHPHs@SH~BHHF tH1DHC [fDPu[Df.AWMAVIAUIATIUHo`SHHGxuHHNH¹ 1HLHLzLrHLjAH1[]A\A]A^A_HtHfSGxHu [fDH`tH1[@f.AUATUHSHHHHHHcHHLg`^f.Lh MtfHHH@ TLHLVH.HtAHHHcHHt,HLHt H@PuHH@HxךH˚HDžH[]A\A]DAUATUHSHHH_P1H+H%Hu2H,H&H  Hu-H'H}`fHZHpNHh貙H@6HHu LLc@1HHMuHHBAB0B:LLK HھBMMD1H{BtH[8HtAHCHuAQBLk K(IUHA1B軞H[8HufPBvHHu HH_8褘HuH8Hu#LH{LchHt{HsMuHH[]A\A]\@cfDHPH@HuDH HHHHuDHHIEL$ LPIUL$ AUIATIUHSHHpL LhHH@HH[]A\A]mf.HH@HtH@H@HfD1@XuH@@G(ff.SHH@@BH@HX [ÐHD$D$H@BH@@ HÐATAUSHHdH%(HD$1]EHH@BH@H@ @(@,~2AD$1Ldu(HHHHH$ҷL9uHL$dH3 %(Hu H[]A\輗ff.SFHrHH:H3Q҉~HH[HHD$HD$HH[SFHrHHH3Q҉~HH1[fDHHD$KHD$HH1[Ðf.UHSHHdH%(HD$1H~BtH{HtHctޔs(HCHHH,$HD$dH3%(uH[]sUHSHHH~Bt5H{HtHctnHCs(HHM U(H[]@f.SH~BHtC([AVMAUAATUSH~BHtE1x Dc(D9DNH{HtHctՓHCHD[]A\DLA]A^t@AVEAUIATIUSHHH~Bt7x+;k(|3AuPIEH[]A\A]A^fDC(9}HC HcHIEH1[]A\A]A^DBLI4$Q҉~ I$fDLHD$HD$@AVAUATIUHSH0dH%(HD$(1H~H}Bt HLNDu(AtTxBLI4$S҉<I$H\$(dH3%(H0[]A\A]A^f(14EIH@@@@H@@BL` wDHEHtH@HtHLHEBLm 1hHt$L>Ht$>W҉Hp>W҉HT$ HPD9}HL$E1HLSHL$ E1HLHt$HT$ Lctof.LHD$3HD$fLHD$HD$Hp>W҉TLHD$HD$:HFHP茒ff.AVIAUATIUHSHdH%(HD$1H~Bt,Dm(1E?D9t0E1HHLH<$LtոfD1HL$dH3 %(u H[]A\A]A^ܑff.AWAVAUIATUSHHNHQHcH,LdF N56LHE1ALLp H H@@BHcSH@rsHA$A$EEH1[]A\A]A^A_D3|kM|$MHuIcT$H{ 3EtJ9AZLE1衒ADfDLH%Lc+DE19LE1ZAHL:LLID$LPM|$6HET$ HPHuHcT$ )ff.UHSHHHdH%(HD$1H{BHDž,t HHS(HD$dH3%(uvH[]fDHE1HHH$H{t%CuEDsfDHCHPH$H{uHCHPfSHAH H7dH%(HD$1H`"HL$HHNuXH;"H3HL$AH#u-H"Ht$H|$H\$dH3%(uH [H="\ff.AWAVAAUATUSHH<$HIHxBumHj1HHHHyBuJD9uH<$11IōCH\IH<$LI\I9uHL[]A\A]A^A_1E1I,H} HDmA9C\5{Hc贐EHD$XMIAf.I,$HuHM@P< Hc@HD.< t <w ~ۀ|.\uHLL莏E9DLmE IAA9YAEHt$H<$H[]A\A]A^A_HEHPH0E9DtTHEHPHutHc^sHD$IH<$H1[]A\A]A^A_1Ll$[LIPfSHHHH3Q҉~ HH1[HHD$HD$HH1[AUIATIUHSHHH~Btu5Hs HLLH{HtHct臉HCH[]A\A]AVIAUAATIUSJ(H@BH@H=EHE HH@@@@H@@BL` ~6AUI^HMl DHu HSH LH1L9u[H]A\A]A^AWAVIAUIATUSHHH~Btu}H[ {Hc IMoHH@H@H@1fDHIIWH@IGHHuAHMe1H[]A\A]A^A_%Bw HcH`Bf~HcHHBHtHcHB@HA Bc萏cHfDAWAVAUATUSHxHndH%(HD$h1H|$H>Lr ^Iv(Htc1u)HL$hdH3 %(Hx[]A\A]A^A_fDH\$HH3Q҉'HL$H1L|$1ҾCLY11LHD$(%I~ HD$PHD$I~AHD$E1MMA!1҄{IcHD$HEIcGH~H|$HL$(H;LD$ HL$IcGHHTII(M9fJA8tEfKHT$IL0AHcLAMP HT$ MpA9~A2LT$8@t$0QHL$HLD$@NLD$@LT$8t$0HL$HH1fD@LcDz IcH>Dz AHD9MA1HFL$ HHT$Ht$PHt$HT$L$ HnHHFHPL$ HT$Ht$rH|$HD$HD$E1Hl$Ll$(LL|$PAH\$@LLHZHI9n wHD$PHl$DHxBtHt$PH|$HD$PH@ HD$Ic@:t=AD9HA4@IcQ[TcKnHL$@LD$8T$0Y螋IcLLD$8T$0HL$@AHD=HwADB uHH+D$ HD$ D9]cMXMHt=D)HcFH|$L9LHFHL$@LD$8HL$@HD$0LhLD$8AH1Ҁw,HB$Ht$0HtH|$HT$0HT$0HD$ AM!THt$PH|$HH+D$ nHD$ H|$MclHH@@BH@Lh H|$HfYLl=HD$0H|$ 2C<'1E1H|$HHT$ HT$ H|$CHW҉~2H1H[)BH[fDHHD$ HD$@fuDHCMHuDHCHUFHSHHw$t?HZH{Htj}1H[]@DBH[]DHrXBt6H[H5 "H{HtT~1fHCHPH{놺BH^HuQ҉~(HE[HCHt$HPH{Ht$HHD$藻HD$AWFAVAUATUSHHHjLuM-M1OHjH}4DmHjLeM<M11H߉ $v $HŅEE1E15DMHcILHHSHHIAE*A vvLH#H11HAcBHŹEEM, MELDHE8L9uIAuDD)LHHHHH3EH+1H[]A\A]A^A_hBaH[]A\A]A^A_DLLHL)MwD$/HHHqMD$OL}ygLHH $H $HH$K~wHIL$HSH:*HEHT$H4$PLuHT$4$HEHT$H4$PHT$4$1HEH$HPH$LeHjH}HEHPAVIAUATUSHdH%(HD$1HZH{BtHC(Lk 11LXHx:AHcIMl1IIDu(HHHH$ЙL9uI6E~II.1HL$dH3 %(u>H[]A\A]A^bBQf.L踷qyUSHHuZHjH}BtH,Hcm(H`H@@BH@Hh H3Q҉~3HH1[]bBH[]DHHD$HD$@ATFUSHHw;LbH7A$~DL#tTCH[]A\f.|B1H[]A\HT$薶HT$HrHW҉~FIEE1A@H)H5HD$HپHL$ HHD$p`LHD$ HD$@ATUHSHH0dH%(HD$(1FHD$HD$t/HrHT$xfDHHD$HILHHI)fHt$ HHD$ HxI9~1HtHHHT$ HT$HHHh H3H@@BH@Q҉H1HL$(dH3 %(H0[]A\{BAf.HuHT$HoHl$H+l$HxIBHH3Q҉~'HHHD$3HD$4HHD$HD$^AVAUATIUHSH@dH%(HD$81FHD$HD$(HrHT$t+H|$8dH3<%(CH@[]A\A]A^DHuHT$ LGu{HL$(HT$ HD$HtXH9MvH9@H)HH?H1H)HBHH?H1H)HHHXHwHFBLlI4$>W҉SI$DHT$ LB!11LAI1fHLHHl$(Hl$6HL$0H@@BH@LHD$0Hh Au(|A9I4$AE~~M,$1U11LTIHuHT$(LlH11L AI#wfL舚uLHD$vHD$HH?@"Y\fSHH H7dH%(HD$1Hf"HT$HD$HD$HHuYH5"H3HT$Hu:HT$H+T$t HH?H"HL$dH3 %(uH [H="_U[DUHSHHH~@Bt 1t HC HE1H[]f.UHSH(dH%(HD$1HH^H;#tf.H{Ht$1]{uzf.1HھBH1H|$dH3<%(H([]Ð~HMPHtHcQH9u"f.HcqH9tHI@Hu@HHT$:LHGPB@H4HFHHt$PHt$H^YAUATUHSHH(dH%(HD$1HFH=BtiH=BLfIMH=@BHt$ Lڇu>HCHtH@HtHLHD$HCBHC H*C 1ER@Ht$LKHCHtH@HtHLD$HCBC C 1EHL$dH3 %(u~H([]A\A]H HC H?H9HCBOf.HPLcHCD1HھBLr7XAUATIUSHH8HdH%(HD$(1FFHH,H}Bt4HT$ HLu0C 7q$(Bf.H}ufHT$HLt4MQ҉UHL$(dH3 %(H8[]A\A]@C 7$hBfLl$ LcH@@BH@Lh H HcSrsH1MQ҉U}HLD$9D$eD$LD$D$H@BH@@ E1H|$ A[fDLl$ IHHD$ H?IL3l$ I),H*D$ z@TD$ ZfWWD$f.Bf.fWD$f.wNX L,fDD$L,fW1Af.D$LDw\ L,eUf.UHSHHHdH%(HD$1u(1H<$HL$dH3 %(uEH[]HHHufW1Ҹf.$DfDU@AVIAUATUSNHHqHcHL,LdHlKL2tIE HCEHcCHKH,AEAE~CA$A$~TEE~[]A\A]1A^@HL譒[]A\A]1A^fLL蕒A$A$fDLLuAVAAUIATUSNHHQHcHlL$ЉNEHcVJNH,HGtE0t+EP҉U~jA$PA$~[]A\A]DA^ID$ LE1C轐H@ H H@@BHcSH@rsHыEP҉UHL虑A$PA$f.LLu[]A\A]DA^fAVAAUIATUSNHHQHcHlL$ЉNHItE0t,EP҉U~kA$PA$|[]A\A]DA^ID$ LE1C轏H@ H H@@BHcSH@rsHыEP҉UHL虐A$PA$f.LLu[]A\A]DA^fATIUSHHFHFHH,HXt$tMQ҉U~LH[]A\LH@@BH@H@ H HcSrsH1MQ҉UHLD$ 辏D$ H[]A\ÐL舎H@@BH@H@ @f.AVAAUIATUSNHHQHcHlL$ЉNHitE0t-EP҉U~lA$PA$}[]A\A]DA^ÐID$ LE1CݍH@ H H@@BHcSH@rsHыEP҉UHL蹎A$PA$f.LL蕎[]A\A]DA^fAVAUIATUSHH@NdH%(HD$81HQHcHlL$ЉNH}BI|$BHT$(HLHT$HLu*HT$ LLuC <O$ŨB1LLH0{ W$ՐBf.I|$n@}HT$0LLbC <$Bf.E1ALH@@BH@Lp H HcSrsH1}W҉UA4$VA$~~HL$8dH3 %(H@[]A\A]A^DLcI?|@E1Ajf.E1ARfLcII?AE1A2fLLD$aD$jH}2HLD$1D$+BL薔IuS҉IE@D$YD$ LD$贊D$H@BH@@ D$\D$ D$XD$ D$ E1f.D$A@D$E1f.D$ A(D$ E1f.D$AD$E1f.D$ AD$1Af.D$ LDD$1Af.D$ LDfWL$ f.a[D$ {fTfUfVHT$0HL$(Ht E1HTE1HHQ1AHLH9u&E1HD$0H9D$(AE1HD$0H9D$(AE1HD$0H9D$(AE1HD$0H9D$(AE1HD$0H9D$(ALt$(Lt$0E1HD$0H9D$(ALt$(Lt$0Lt$(L+t$0tHT$0Ht6xZHD$(HHHH?H)IL@ID$^jBGLHD$XHD$NHD$(HHT$0HHHD$(JA@AWIAVAAUATIUSHHdH%(HD$81HD$ HD$0AAHrHT$ IotKIwHT$0LzfDHD$ HHH|$A9HD$ ~7HuHT$L* AuƒHD$HH)D$ A9H\$ $LH@@BH@HX I4$ $>W҉'I$H|$8dH3<%(tHH[]A\A]A^A_fDHT$VAlH*L$LD$^D$0$b$H@B@ I4$H@L$>W҉WLHD$ $>HD$ $:A9H*D$ D$0~mAHcA)I,LI\fD^D$(HH9D$0t:HuHT$(L:AD$0u\D$(HH9D$0uL$脅$H@B@ I4$H@>W҉I$1vfIwHT$(LOA^D$(D$0LD$ $D$H@BH@@ fDBaLHD$ÅHD$ $fDH\$$HH\$ oLH$菅H$D$( HfWD$0B$G@6fD&fDAWAVAAUAATIU1SH8dH%(HD$(1HT$@Ń~KLzIHl$D9t+I7HT$LuzAuԃHl$ID9uL蓃Hh I4$H@@BH@Q҉I$E1HL$(dH3 %(DH8[]A\A]A^A_@H*HL$HcH,$$HA9YD$ $~:HuHT$ LAudAu $HA9XL$  $L‚$H@BH@X I4$Q҉~.I$+DALH$葃H$LH$|H$1E&fDfDAVIAUEATIUHSH~BHt :uFH{ HzHtH@1I[]A\A]A^ÐAtHBL1ՐfAVMAUATUSHdH%(HD$1~MAHEHLlf.HH4$L9t#HEHH"t޸ I61H|$dH3<%(u H[]A\A]A^Cft WI01f.AVAUATAUHSH:tFdtE1Aux[]A\LA]A^@HH݊HHU(Hu []DA\A]A^"fHE(HPHtSH0LsPHHSPD}HLsPIt[]A\LA]A^DHH1(B~[]A\LA]A^fL(`AUIATUHSHH8Hu HU(AMHjAu3HH3E~JH+HD[]A\A]fMiBt6HH1BHD[]A\A]fDH蘀fDHu 1HrHtHPBH1fBfAWAVAUATIUHSHHtdLsPH꾂BHA$HuH7Ht$DHt$L IA$H@>:I~LtHEHtH@HtHHIHE@BL}(HE /@Hm(HEHt3LsPHuLHCPHLsPAHD[]A\A]A^A_HuA$~dLeE1~:WLsXHHI~tJDHHH[]LA\A]A^A_@AxDH~fDHEHPHuf.AWAVAUATUHSHHdH%(HD$81MHT$Ht$ L$ LD$DDL$,D$DAHH$HD$0I1A?D$(YD$ H\$DpE1IfDHt$0>HbHIw HHAHD$0H#E9L|$0IBtLHIHtHct=IGHHL$0ELH#c|$uS11HسaAHIE9wHcD$ HL$LHHTHL$-tqH|$t]D$(u)HL$8dH3 %($HH[]A\A]A^A_ÐH4$H|fLH5H$HD$0ID$,uDH\$0H{HtHct|1HHHC`CpCtCxC|HChBHHǃǃǃǃǃHǃBHHǃ@ǃPǃTǃXǃ\HǃHBH`HǃpǃǃǃǃHǃxBHǃ@Q1ҾCHHCXHCP蹁HH xHH@@BH@H@ HwH@@BH@1H@ H1HHHCH*HߺBH1H H1H߾CH HHH߾BHSHHH BHHHHߺVB%BHߺ5B;BHߺLBQBHߺhBjBHߺBBVBBHHvBHHH@@BH@H@ HdvHH@@BH@H@ H¾BH[AWIAVAUATIUSHHH~HT$H?:sXAźBHL6uHC(HxH@Mt$PM9t!HT$HLqHC(LxsHl$%fHLuHE(L;puH(HHtպBL~I4$Q҉~.I$AHD[]A\A]A^A_f: E1ݐLHD$vHD$@HFHPH{HھBL1A뗐f.ATUHS~THGP@t0FHZLdDH3HMXHHFuHL9u1[]A\f[]A\fDBf.AVIAUAATUHS~ @1HIMtcA~HAI^AIOl.@HsHLHu/HL9u[]A\A]A^BLH;[]A\A]A^DHrAIGIlDf.AWAVAUATUSHXdH%(HD$H1H|$ t$4HT$(HD$(LhIELH=BA]MEHLcO4 tH@HtLD$LH|$ LD$11f1A<%H9DyC\[gLD$McHcH81HHHF6KLD$H]HE LHD8LLD$J| HE0H}7HELD$Im IEBJD M9HD$HE(1MD$D$0HD$8HAƐHED$@HC@A8%IcHD$M9C8HCXwBf.IAHM9vA%uAx%u IIcHD$AM`M9CHAx*HEHL$DHT$@1'BL7K|$mA$[tʿIBT$ΉL$ 4HT$L$Ml$=w9T$HHҋ K9AT$S8AUMBT$3HT$c uMED$0H(M9~HD$(HPHB Hp(HH\$ HyH3>W҉H|$ HH|$HdH3<%(HX[]A\A]A^A_DAx%|HcD$DIă{Ht A<$$HcD$@|$HC@A$CHD$[IcHT$C8[HSPAD$<^EMl$D<]t.<]t*HcHT$ fDtIAEH<]u<]E^H|$DAHcD9EIcLtLDE1DH9t-x-u0x@8~@8@pH9AuEuE/CHM`S{9lHE(wBfH{@HE(BMH|$HcI]AE^ANMl$AD$|$t$@sHD$@~T$0t1D$0H|$8HH H萋PHt9H(H9uIHL$DHT$@1'BL 4HcCHjH;E `HE W|$4Ow;p HH9D$49lHD$(H|$ Hp֦HHnHCHH{Bt H|$ HՅD{(EH{BtH|$ H豅D{(ELk E1LE1E1H\$I:C~&HD$(KH|$ JtvDEIE9KH{uHCHP0B'?HE(XBfH|$ HD$QmHD$HE(BHE(YB1ɸ(AJHcD$@HC@HcD$DI4BL|$ LnuI7HËHD$ HtHL|$ LkHH@@BH@Hh LH0HD$ H1"(BhHE(,BHD$(H|$ Hp认HHtJHt]HD$ H|$ H1lUhBH\$H|$ HkEt8H|$ kL|$ 11L"HÃL!Hcg-H|$ kAVAAUIպATIUSHHdH%(HD$1H$FHHE1HLHHtBH$LLxrBH13H$HL$dH3 %(ukH[]A\A]A^fAt׃}~HHIrLHHHxE1HLHHdfBH11@K,f.USHHHGXHoPHGPVHkPH[]Ðf.ATAԺUHSHrHDHH Q҉~ H[]A\HHHD$jHD$H[]A\fUSHHHGXHoPHGPHkPH[]Ðf.AUATIUHSH(dH%(HD$1FHD$It$H`HHHT$HH$;HD$HD$HIhH@@BH@HLh It$HHucHuH]1HL$dH3 %(H([]A\A]B1f.HHhfDHrHT$JHD$1"H{HtHct9(HD$HD$HCHC It$H~@BHH Hh)f.AWAVIAUAATIUSHAHrHH8D$ ~HLoD$ HM~IHLIۆA9IvHLt5D$ ukH[]A\A]A^A_HHtI4$E~I,$1H[]A\A]A^A_fDLffDHLfBA1ҾCL+oD$ Hf.AWAVIAUAATIUSHHrRHHE1}AAt&AEI^MlfHHLHL9uIvHLu.I4$EQ҉I,$H[]A\A]A^A_@EtHLD$ eD$ H[]A\A]A^A_@HL mHPDBH[]A\A]A^A_11LIvHLHHL:AT$(u\@AAuHD[]A\A]ÐHH1B螰HD[]A\A]HHH[]A\A]1fI|$&RuHHPHI$F~:\LcXHOHEHPHu3fDAWAVAAUATUSHHBHI׻AHD$IIuBHHu&IuBH3tAIE9tQ1Af.E9~:AHL$IcE)M,LL$IuHtuIM9uH1[]A\A]A^A_H[]A\A]A^A_ff.AWIAVAUATIUSH(dH%(HD$1HFH=@BH=B8HnIHBH+H]D$E1+@+@-u|4D$ HkHt$ H%H\$H9t ;1L(BLQHt$dH34%(AH([]A\A]A^A_f(L fDH+@ADH u@uD$EDHIGHtH@HtLLIGBEw E DDN E $1MfHt$ H$H\$AH9 D$D$ D$ 1A)AFEADNEOHV HIA$1HPIo'!fATIUHHSHHHdH%(HD$1HT$LHHEH $DMDD$B HCEDH1D9~@ɉ $DD$uA9tgHcHH4gH\$dH3%(usH[]A\D)ʃtx2E9AqD)AҾH1@H1f.HEHPHE6h f.AWAVAUIպATIUSHHdH%(HD$81Ht$L$LD$DHH$HD$0H$8D$ |$D$1Lt$,L<zT$,HL$0AHL&uqHt$0>~"L@eT$,E1HHLHD$0zH{HtHctHHCL9t^It-LLH\$0yqD$ t H4$L]]HT$8dH3%(HH[]A\A]A^A_Lt$,HcD$LLItuHL$T$,AHt$0LKytH\$0H{HtHctH$HCHxHtHctH$Ht$LH@HK"H$I4$҉~'H$I$H4$LcH$HD$0+LD$J\D$Df.UHSHH~gt*HcƍNHsLDHRrH[]fHRHsuGH[HuQ҉~9H]H[]fDB)H[]D또HD$ [D$ @f.ATIUHHSHHHdH%(HD$1DHT$LH,H}Bt HHr $E(DD$HAEDH1D9~Bɉ $DD$uD9tiHE HcHH4&H\$dH3%(uTH[]A\DD)ʃtx2D9 pD)AҾH@1@H1f.SHHt#B贛H[fHBHJHrHHt7H3Q҉~HH1[HHD$YHD$@fAWAVAUIATUSHH8dH%(HD$(1t$HrHT$ t5D$HL$(dH3 %(D$H8[]A\A]A^A_fDIuHT$$H7D$uMeI|$Bt LHpAD$(D$D$D$ H‹T$$хH9)L$VL$D$ T$$9D$ 11H H1A<$D$ST$ E1E1~(DIT$ HHAJ2I4D;|$ |݃|$t-D$M} PMl(fDIHHIM9uD$D$ 9D$~@L$HcL<)Ll:I@ID$ HHJ8I谂M9uH3ED$H+ALHW1fDpBD$@9T$L$)|$ʋ|$IωL$tf.LH^ID BH_H3Q҉~/HIUHHcvqHVD$1^HHD$VHD$}f.AVAAUATIUHSHdH%(HD$1HZ;~ H]HIt$HT$H\AtEI9\$At HH=VHL$dH3 %(DH[]A\A]A^fH{Bt HHmS(D$9|PT$ANMD$HH訁Hu~6H]냹BA+ifDxHUfDT5DAUATIUSH8dH%(HD$(1BHZFHjLlH\$  HHL9ttHuHT$LT$HL$ E1HL4Ht$ ;W҉HLD$ THt$ HD$ L9HuDI$ ɉ I$Q҉HL$(dH3 %(H8[]A\A]P҉HLD$ ATD$ ~zI$I4$~9I$1+ByhLD$ SD$ SLSHLD$ SHt$ D$ HLSv^@f.AWAVIAUIATIUSHAN LVLcHcIHABI4t1HHFA$1H[]A\A]A^A_f.jILAHc DHDHcIHM)׃~ HD BAAA-HEHGuH_)D\$ HcHHI<A$PID$A$A~ HLIljT$wL1IHqAJQT$H@H@@BLc\$ )HcHP A$IGIL$IHcƒHHHpAv Eۉ0A$uL1HHcHHfHHH9HcHBuHAMI)Hx II9~HHx IBBL1貞Rf.AWAVAUATUHSHHFdH%(H$1H4$H=B HAH\$H\$H$L{M H$DŽ$DŽ$L|$pHDŽ$HDŽ$XH$DŽ$DŽ$DŽ$H$DŽ$\$xDd$|DŽ$Ƅ$ D$;IHl$Iu)f.<\uI<$1S HD$EGD$H@BH@@ At$ IGA7^YkAD$ :A:\D$ HHǃz HH^D$ H|$(uɋD$APLsM~ HcHM A91uDVAhILADf1?HH-uAuy1uD@DPIAJIcйH+DA1A0AHAEA-uЃH|$(E1 ~0HSHHBH fHHRH9HuEH$H$H9tjH LKA1HcH B؅TDB11I,/L9t+At HHcH+ BxVԃwσL9uՅƒu E1gHH LILDnHL$D)HHL$HHM,HHQHHAHQL9uEMaKDD)HcHP ^IuHIDf11^f.AWAVIAUEATUSHH8F,HT$L$ L $D9N4HsPC9FHHH$H|$DmPHEHIFHEXIvHu`IVH}p|$ HU8}xAEHkPAÉD$$AF(E+^,Hl$(ME1DA}fHPHDmAFIcMrD$ H$MH,A>&HLHDt$ D7AD$IA9G(|MILIG@E9g4Lq|$$AG,AG0LT$)9H<$IcOʉʉL$ H4HkIW@LT$HJt*HHID)L$ AfDLSPHHIB@LT$HCP/LT$H¸HLSPIvHJIƃHCPHHLHH@A>WALH߉D$AD$Hl$(HSP} D$ HR@HSP1HH,ED$ u{Ld$Dl$ $HHeMqu~4uKH+EH}BuDHLHMquHH߉D$ %AD$ t@H8[]A\A]A^A_F0AP9H$1ҾCHE11HH$BIAV(IącfLIF@Hx%BLH^IF@LHJ(_%BLH^IA;n(}}CLHo^A9n4uIF@LcIJ|8%BLH߃I6^IF@LHJT8b_!BLH ^A;n(|H$LH1BLH?H8[]A\A]A^A_fHLH_,DLHD*nDHl$(IwLHHǃ= H߉D$ cLD$ n8BHGH3>W҉HH8[]A\A]A^A_fC$P҉S$C C$C @HH@BD$ AQBLH\fDIBLLT$PLT$Mr,HC~:H$HHH8[]A\A]A^A_HH$ >H$H=fDAW1AVEAUIATAUHSHH~DLHAA9H3HwHIHHuQ҉HEAGuwIGHDHH0AWA/AtvE~9AD$LdDHL9tH3P҉HH=L9uHD[]A\A]A^A_fDLIEDLHA/AuLH]?zHHD$uk{>ue{.u_HSHt$H|$pHT$pHSHT$xC% Ƅ$$w+H|$@Ht$160H{*BHHuHm8H3M E1IL8@H@H@fLh3HHLH+H|$@H2HuH[AH{+zLMLCpBHǺ+HD$1TLT$HC LLHD$ 6GHL$ HD$(HHT$0A\IIHT$ ALI6LITHt$ _Ht$(Ht$0L9L$2HHLXH|$@/I1IIDH$dH3 %(HĘ[]A\A]A^A_fDA1HL'!Hu H|$@1-Hm8HPLeHL'1jLfD8L8IHLq8Ht$ LU8 f.USHHHH+1+=,H H[]DHH[]fAWAVIAUIATIUSHHdH%(HD$1HH$vL0AMHL`tA$HHH,HZ6H@H@BIM}HIn(IF HMHtwAEADN1(E,A tDlHHtA9D_HHuHL$dH3 %(ELu"H[]A\A]A^A_IELPM}vuDSFHHw8tSHBHJHrHH3Q҉~QHH1[BwH[fDHBHr1HFH3>W҉HHD$6HD$뛐ATUHStCuw[]A\HLc4L` HuHÃH@@BH@~?HH]Hu DHH_8|HHu[]1A\fHh5fDAWIAVDrAUIB<ATHcIUSH#E1HL8~fDO NLID9IHDLAH߉D$ D$ H[]A\A]A^A_@UHSHHXdH%(HD$H1EHt$ uZHl HL HT$ HAHtQHcH|$HdH3<%(uWHX[]DBHL$<HD$(HL$놐H3HT$HuHD$SHBH dH%(HD$1Y:BH1t EeD9~\D$E|$D9IcEl$?BM$HI4$1I4$DBH1uKA9tSBLH>PHL$dH3 %(H([]A\A]A^A_fDD9 DI4$HdfMcHK4Q1ҾCHH3Q҉~0H1ufDA9IMcHK4OHHD$ HD$Df.AWAVAUIATUHSHhdH%(HD$X1L$8@DD$8HD$ E1ҾCLHD$HcHDE1HD$0CD$|$Dt$B<Hc5B<IHD$HcIc1LHHH$CD6HMHHL$(HLtH/HH A9DLHHL9 L}IBt LLI$AG(L}IBt LL*$3A({uKBLIuQ҉"IEAD$8tHL$ D$8HL$D$8H|$H<$DBHLcMHL$XdH3 %(Hh[]A\A]A^A_ADd$Lt$@MA~HcLLHHLIL+IcHDL HLI3 HIE AEAE(LIEBLI$LM$LSZuAD$AMI$ÍQAULL+fHhH$dH3 %(0H[]A\A]A^8'HHBL1L$AB<[t<{ABBLDDL$H$AB1XL$1HLBL{LAEAE0 H߻I8rHHBL1-LAL$$QAT$$AD$ AD$$AD$ uf.USHHHGXHoPHGP&HkPH[]Ðf.USHHu*HjHuHt=H1EH[]@(B?H[]DHEHPHuAUAATIUHSHHrNHHtN@tGH{ t@C8IT$HAuAH˿ k8Q҉t\H[]A\A]ÐIT$H1@BJH[]A\A]@1B>H[]A\A]fHHD$ D$ H[]A\A]fAUHAATUSHHHu>L+MeMtBH{`LNHtIHt_L7HHH[]A\A]IELPMeLXBHIfVH@H@vDAVAUATUSHHIMLjI}H\׻Ht:HHrH3Q҉H1H[]A\A]A^'Il$HEHuHEHPHE럐L-+"11$IImIHta=HSHIt?HHHH)LHH&It$HLHH%IImHuH3AL3H1[]A\A]A^HHD$HD$fiBA<IELPI}DIT$(BHG@Hpbf.AWAVIAUIATUHSHXdH%(HD$H1HzBHt$LD$tHAE(ljÉ$HHcIĹ 1LHHL$ID$HA$AD$Ml$A\$(AD$4IL$ID$@AEMt%I~Bt LH:AF(D$2<$HD$01HD$7fAD$,HHT$8HHID$@9$HHT$@HPHL$E1LHAh%L|$0IBt LHAG(tGHt$0BHHD$@Ht$8w_AL$4Et$4NHt$0HL$8E11H$Ht$0HL$@E1H$Ht$8BH uAD$0fD(>t$ID$H@@@@H@@BHh HD$0Ll$ 1If.Ht$0HL$8E1H$HT$@{BHI 袼IHD$8IHD$@IGHpHBI|$L;\$E1LLHHD$0HD$8HD$@z#L|$0IBLt HHt$0E(AG<HL$@E11H8#AHt$@1HtHHD$8HT$@XBHLl$ CDHD$HpHYH]`HHHHD$HpHJExrHLHRHD$HuHD$HE1BH~HuQ҉HEI|$Ht UI|$軵AEAEHL$$L艵HL$HdH3 %(HX[]A\A]A^A_Ð8B[HPIT$ L` HPHHD$(RHD$(HphBHHhLHAHH$H$HHD$HpxHHB1Ll$ ALl$ HT$@1BHL<$Ll$ AHt$8H $~H_Ll$ HXH $HJHH@HPHsLt$IFLPIvIH@LPIv輵ff.AVHЍVAUATUSHwJteHhBLp LhL`HxEu6MLHHL[]A\A]A^8BH¾4[]A\A]A^HhBLhL`HEuM1ff.AWAVAAUATUHSH8H<$HD$E1AvfDBHLBHLBHLD)؃JD=AHD$D)؃~lA9LcIJT=H HAH8-BHLXBHLEDE1)؃H<$BH3H8[]A\A]A^A_fDAODA?DHAHT$HHL$PHL$HT$HA8-JDHA)HcADt$$HD$PDl$$L|EMACEHDHD$(.@AE;D$AI /AHFHE9Mt/H<$CBD$LuAt'At9AtkH|$LfuADH<$BEHD$HL$Ht$E1H<$L׻|$$At5EutfEHT$H<$1Lt&@HD$(L8IBt H<$LEo(M LtI~Bt H<$LEn(M~ HcHTSHcHT@D9}?HcI\AH HE9}H<$HκBHL$ZHL$uHtH<$HκBHL$6HL$uLH$HH0~yH$HHtH8HH[]A\A]A^A_<11,McH<$1KTHBI< DHH<$1B"<H<$HL$HL$oAWAVAUATUHSHHHHFHt$HL$(LD$8DL$4HHD$)HD$HHL$(Hc@HD$0Dt$4E1D$HD$ A$|$Dd$IJHtKHt$HEAu\EtJ4HT$ H|$TuHD$8-u|$0uD$t,HL$(HHD[]A\A]A^A_fDHD$(E1D(ۺBD$4AtH;EA IIFEN<H|uF,McHL$8LD$BBHHHEH1k:L3LIHH袱A@LLݭEt~LE16H HuE1CH1HMc HuBH EwE9uA~HuBH KLHuE1CH1Z LA|BHFIHPIFHD$E1E1E1E1ATIUSHH HT$dH%(HD$1RtQHD$D$ HCHtH@HtHLЋD$ HC B1C HL$dH3 %(u>H []A\fHL$ E1E1`BHLtHھpBL18XUHSHHH~ Bt %tC E1H[]ÐAWAVAUATDfUHSH8dH %(HL$(1At$HT$<LzHD$E1H$E17fDM/I} BtLHEm ID9}=IwBH^ uIwBHI M7ID9|DD$D9t';\$t!HT$BHDD$+DD$MA7D9Dm DE$HL$(dH3 %(VH8[]A\A]A^A_DIwBH tIH$IwBHw =I7HT$ HDuHD$ HHD$I1BH6T@H<$/A%HEXLuPBH$HDD$HEPmLuPDD$HD$HcHuH؃~/H]LHDD$H<$DD$uHAE1H$E1A艪fATIUSHH dH%(HD$1t4B*HL$dH3 %(iH []A\ÐHrHL$E1ABdD$It$x1H8HT$At @E1AHL` H3H@@BH@Q҉H>fDHrD$1HeHIwH@@BH@H1MEHE H3~H+1@fDH@fD~f.E1!HHD$ HD$;輨ff.AWIAVAUATAUSHHhdH%(HD$X1HrHL$AA;BBucDl$Aw]D$BfDA!A MwHT$HL(A#LBH1^3fDHL$XdH3 %( Hh[]A\A]A^A_fD%Bt'fAAD$E1Ag11H#EH$AHSPu H;SX HT$胪HT$I@H@H@HHDLHItSAIG*MtI71LtI7HH4$HHLHIuLH$H3&H$YfDE1H|$ 1AHE1nB1蜬Ht$ HH3Q҉HJDAD$tBMoI}HAuHT$vHLcLp H3IŃH@@BH@o|$ L+AHt$HߺeIwHHcAHABLH %cAeBuIwHL4H;HT$L`LE`fH3A$L#AD$AA[11Hh E1H$ IHC`AFIFIIFDLhHIt]AIGMtI71LptI7H AHH4$HC L HIuLKYfDACHHbL`fASBaIwHFH=B.H=BLA11H8 LHHI HLH@@BH@Lh HHm HAFBIw1Hc_HIHIH@@BH@1MID$ 11H IIHAD$ID$I$ID$M@HHRH|$ pBLLB1*迨Ht$ H=LHH LGHHuL臠H3AEL+EBH)@AcDL@BH@HxBVfDp%>HHHD$>HHT$SHHH$HHCX HI茤IM<$AD$ID$ID$ Hm/MoZBHCPHLc`%H@@BH@L` IwHT$H9Ld$%BAw IcH4`B>?HHIH@@BH@L` /H9Mg11H MH$I|$HNBHz1LH>/HhA4AuLHz<HDH4$LH 0HL$LcPHXf.Md$@MIcD$H9uL9cXA11H8IID$HHLHIT$pLHMcd$xHLH@@BH@HHL` S11HE1IA"BfDH8LHL` H@@BH@HLHIHLHN,`BMuH3AL3AT$PIt$HH7I8Lv Lcn(IcD$HH{XYl@HIWBH1)CID$LPI|$IELPI}HvLpLch UH,6xAWAVIAUATUHSH(dH %(HL$1Ƀt$ ALd$tuD$ 1ALd$L,DDDHL9t8ItE1ALẠBHu`D$uHAL9uHcD$ DLHItҿu.H\$Hu>W҉~QH]A|HL$dH3 %(u7H([]A\A]A^A_ùB]HD$ D$ Df.AUIATIUSH8dH%(HD$(1HrHL$AA;B@Bu@|$D$$hBImLHKuHE Hch'DH|$(dH3<%(H8[]A\A]f.B\f.5BxfLL0fHB~IuLuWH\aBLIMUHL6 B~IuMIUE1E1LZ fDoIuHt$ LH@@BH@Hh I4$҉>I$E#B1҃uIUIuL#vIu%Ht$ HI4$E9I,$5BHcIuMMDIUALYf.@urUIuL{HD$ IuH~BtL=BHf.軗BfDkBLHD$HD$IULD$ AL1T@UIULD$ ALlTHl$ f.L˘f.AWAVAUAATUHSHHXdH%(HD$H1D$4HrHL$8E1ABAuED$8wB$հBAAkBHھHAH|$HdH3<%(D HX[]A\A]A^A_@{BAfAU#BwE1A HsLH  HÐHuH]WAvLk I}Bt LHI]H E}AHcWIH$҉T$ T$IDILH4HcIuAEDH4$@AH[H{> [HH@@BH@HcHP Hu>W҉HETfDAAfBf.AADBfABHsHT$@H/A1ҾCHIHD$@H~+HHD$@HSLHqHT$@HJHHL$@uHuAE LmsDALkI]H EmA}Hc荘IcAUHELD~fD;HHL9@9uDHHOf.ABHK HSHHs]sHWAAeBf.ABqHsHT$@HpAeLkMuMM D$@Emw B(H‰D$@A9 MH[H{X HHI4HAED$@ BL{MwML{IGHHD$L{IEOL{IAET$8 KD$@ EA9H|$HIH\LL9t;IcE.H$HL9D8+uH$HLuH+\$LcH+H@@BH@Lh efQBHH$H$ZHsHL$4E1ABHnD$4HSHHDHSHsLcHHH@@BH@Lh HsHL$4E1ABHtD$4ljD$HCHDHCLkHxBH$t HHH$Dp(AIEHHD$,Em1ҾCHEHD$(HD$ D1E,wH|$HDDMA9~MH4$HL$@E1HL|$@IwHEE9Et‹T$uH|$DA9E@jHT$ HtHL$Ht$(HH)kHD$(HHuHD$(HEfIWLRIwL|$@IMIWHt$LRHt$4fHT$ HtHL$Ht$(HH)H4$SHL$@E1HE)HT$@Ht$(HIcHD$A9HD$ fDHD$ HHDD$HD$ HD$AHsHL$4E1ABH/sD$4t(|$8t%HsH{kLc HD$HD$ HHSHs1ɅH,LcHHsW҉~%HEfIuLHHHD$2HD$^fDATAUH1SHuHHt#1AtHUHH[]A\[]1A\fAWAVAUAATI1USHH(I4$dH%(HD$1HHAtDIt$BHE1u+LD$11AHH)te1fDH@H3EH+1HL$dH3 %({H([]A\A]A^A_Ht$HL$HT$H zEtjLd$H3A$L#H|$1HA D1THhA11HINjD$E1E1aAID9t$~QHD$It$1HJ(9tHD$LHJ(HD$LHJT(f.H3A~8L;fDHHe%pHD蛚H莚G\AWAVAUATUHSHH(dH%(HD$1tHrBt=Hu1HE16HL$dH3 %(DH([]A\A]A^A_fDHu1HLD$11AHHt A@Ht$HL$HT$HAu11H&INjD$E1E1KAID;t$}9HD$Hu1HJ(芺uHD$LHJL(J(]H|$΋HuLHZDUBqBHSH3ItH[]HE1B1BqB>H[]DATUHSH1H`dH%(HD$X1+]HuBHHD$%tmHt$ H|$XH}1RH}1IDHT$ LH_Ht8tJ(BH訠H3Q҉~WHHL$XdH3 %(uiH`[]A\@H|$ 6]HHH3Q҉~"H1HHD$賗HD$@HHD$蛗HD$OYDf.SH1H\HHvH3Q҉~HH1[f.HHD$3HD$HH1[ATUSHdH%(H$1HHABH3HT$Ht.H$dH3 %(HĐ[]A\@HD$H|$HD$VH|$ HLd\Ht$ HHuQ҉~3HEDHrBڸt.H{1I?HHD$HD$@5WfSH1H0H|$dH%(HD$(1W҉~$H1H\$(dH3%(u#H0[fHHD$SHD$WSH1H0H|$dH%(HD$(1WHD$HHi@BHt$H3Q҉~"H1HL$(dH3 %(u!H0[HHD$ÔHD$wVUBBHSHDtH[]HE1`B1BBηH[]D~;f.AUIATIUSHH^Hu +DHHCHk(Ht Hs LHHuI]Hu -HHC0Hk@Ht Hs8LHGHuHL[]A\A]0H(Ht$ dH%(HD$1rxBHu1HxHt$ 螃uHD$HT$dH3%(uH(HTfAUATUHBSHH8dH%(HD$(1趻HSXLcPHHIHSP`LcPtAEt*HL$(dH3 %(%H8[]A\A]fBHHHD$HHHT$1NHtYHT$HUt u>AEHt$Ht$WH)J@H^H;1H=!HB1#YCHaH3Q҉~HoH踑nHHD$覑HD$ZSf.[f.AWMAVMAUIATAUHBSH 0H̃HSH(D`LhLxLp HP(HCH[]A\A]A^A_@f.ATIUHBS謹HPHtH9*uB@H9+tHHZ(Hu[]A\fHC(HB(HCHt Hs LH[]A\:HJ(HHHf.AWIAVAUIS㥛 ATUHBSHHHL$LD$dH%(HD$81L0IH|$ 1IFI$RHD$ Ht$(HHD$HH?IHHH)臂HhHL0@HLD$IHHL$H?HH)HD$LiL,L)LoHHH_ ~IHLoH_ ID$L(LG0HO8HthHwHE1@HJ@Ht IHH9r uHZ H9_ }Mt2LHB@HG@Hz@H\$8dH3%(LuHH[]A\A]A^A_ÐHG@I|$PATIUHBSH dH%(HD$1蘷H9(HPHHt'H;*uDH;+t;HHZ@HuHH|$dH3<%(HH []A\HC@HB@1H1PHL$HS㥛 HH?HHCH+$HiHH)H)HC HIHC0Ht Hs8LH言HhHJ@HHHHOOfAVAUIATAUSHHPL0dH%(HD$H1HD$D$HrHT$lAD$;mSAt$IUHHt$AAHAH11HH襕xBHHI=HHHHLH^EEH3A$L#1HL$HdH3 %(HP[]A\A]A^fDIuHL$AABBH߽葝uHH3ErD$H+AeABLHLDAvI}MHx`HHHHHٴH3Q҉WH1f.AB.e@At$IUHInIHuvfDHm@HcH}(AuHu8L轫tHELHHD$%HD$H/1HfBl&HL$HS㥛 HH?HHHH)RHL$HHHH?HH)HiH)iZRDBOfDI}Hx/InHu$Hm@HtH;EuH}(AIUBH1;UfDH=HHLH1H։In11H!HIDLMH|$ AB1kIHt$ HLHH;Hm@HuHHD$PHD$11H蚲HU8HHIH}BBHߺHD舑LHHʳJAWAVAUATUSBAHdH%(H$1H<$iAHLxHM?E1ugIt[H]HtRH|$1JHL$LsHS㥛 L+t$HH?HMiHH)I)Ls LHfDE1H|$ HHHH$HHH$ HM AfI?xLAAGt*IcIDAL5?)LHH t AGt-IcIDLAL5?)HH ĠAGt)IcIDLAL5?)HH M(D9ALMQ{E1It>LHS㥛 LD$HLH?HH)HT$HiI)MiLt$H$ H$Ht$ }KEAJH]DH8H;E1I6HË H<$衃H$HATUSHHL0dH%(HD$1D$HeHrHL$E1A`BYuEAD$H&1HL$dH3 %(u7H[]A\BHH[@D@AUIATUSHHH0dH%(HD$1t4BHL$dH3 %(H[]A\A]ÐHr1HIE&DIu1HMHHt\HugHyMtA$A$~ztkHH3E~lH+1HuHtMttLuH;Ht$|D$:LHkvH^CATBBUHSe1t[]A\ sHIH0ABH@H@H@@LHE1A'B8LHE1A-B LHE1pA4B[]A\ÐH>SHsH[ sf.1AFHg@8HGff.UHSHHHHH[]HB1$@AUIATUHSH(dH%(HD$1H/tmp/tclHD$XXXH$H.tmp.XXXHD$EtwH?Ht(H'ALcHL@L9u211AHL$dH3 %(u?H([]A\A]f.BL߻7B뾾BL@AUI;BATUHSH(dH%(H$1DHIfH|$L?HRHt$ H襆HcT$ ~| tUL?1H$dH3 %(uWH([]A\A]f.HT$HL莜r뎋EHUEH?ff.~XSD_ E1ACH@HE~-HFD;t/HA L DHH D9@tL9uID9[fIID9AWAVAUATIUSHH0H|$`<H$LD$xL$IHD$dH %(H$1oMHD$Lt$AF I.~tHD@LlDH L9tWEt}H$LCtAV HcH @IHDH9t HHM@EH L9AV ufH|$xt HD$xH$HtDŽ$DŽ$ A1E1B3Hl$D$<DHD$0D$8D$\HD$PE1D$LD$XEg<><2<|u1Bt <&u%zuAD9;l$XD$LAHL$IcAH9Hc1IlHJD$8HL$E1<&0<@u 9yEHD$0HED$HD$0D$<ED$8D$<9I9HD$0EHl$Dl$ H$ H|$`1Ҿ2BHI H|$`H LD$pT$puDt$pDD| HclEH$H\ H$Hl$`IE1H$E1DLHI#H$1āAWH$E1LHIH$1A蔁I\$IH1MBHnAD9|$pHH\lD|$pH$AAAGHHH$HHsHH$sH|$P%|$\|$\H|$P111Q?D$HH+|$8-1|$8H@M$H$|$<1|$<H$@ D$t- |$LjD$hH$HD$@D$$DD$ 9D$$pt$$H\$HcHH H:|kHD|$ HHH:|9uH\$HcƉt$,H$1ۉD$(HD$H8ۋD$tED$(D$lB>HD$P ;PHHcʋ|$HH IH@HD$P HD$@tJ:|$(t<:$D$hHD$@DŽ$DŽ$D$HD$,;D$ D$$H$H$HD$tD$l|$Ht9$t9|$lt9H|$9iH9$tH"iH$D$h4@z>B<@q<>HJD$<HL$09K|41~HD$0UHBD$\HD$PBfDHBD$\HD$PBkfDHL$D$8AHHL$HL$AAHHL$fDHBD$8HD$BfDK|41d}HD$Pf.K|41H$D$4}H$HD$D$QH\$`BH}H3S҉H\$`HHBD$<HD$0BHBD$<HD$0BtH$81Lt$`Ht$0L}LHHHHLytHHh9H96D$tt$,1ۀz&ËD$,9D$ H{H$17$D$(HD$H8I 75Lt$4RI>AVnfAV ID\$$Ht$HcÉ\$,1H dD$$D$,NH|$`.B[H|$xtH\$x;t r6H$Ht;t S6$t<6$t+6H$ D$htGD$hH$Ld$`HHl;tI$0HھHH9uH$PeD$h$D$(Lt$`HL{LHHHHLrrHHa7H64$Lt$`Ht$PLzLHHQHILrML6K4D$HD$Hx/$-4D$tK@H|$xH$4$H\$xDŽ$$$DŽ$Ht$PH|$`ID$HXD$hHDŽ$$D$lD$HD$h"H|$`BD$tD$l[!HL$MtLH|$`1ÉD$l2\$tA0HD$0BDŽ$D$tD$lD$hHDŽ$H|$`H$@pH$51H|$`HH1B0$D$hHDŽ$D$laHT$PH|$`HB1D$HD$hHDŽ$$D$lD$hHDŽ$$D$lLt$`BLwI6HË=HD$`HH$H|$`HB1@D$tD$hHDŽ$D$ltD$hHDŽ$[H|$`BD$hHDŽ$$D$l+|$Ht1n0|$(t [0|$lt H0 ߃f19\$(};\$H~;\$l~HcD$$H\$HH;H 5H=W҉t$4HD$ tHH.D$ 1D$8EH0D$$HD$@HHD$(AD$D$IHDHD$HD$~8HuE1 D;>uD;<HB HAA9uIL;t$uH|$(!_Dt$$At*11D.HDHLDD$D$Ht$H;?tT$<~Hcʀ| T$DD$ H|$HdH3<%(-HX[]A\A]A^A_fDIHt$1D>2HcU JA9tHEHRHHrJ4(RBT(AM Dl$HH1[]f.HmH3E~*H+H1[]fDHHD$SHD$@HSfDAUATIUHSHH(H ZBdH%(HD$1AuIL$^BHHAL$bBHH{IL$gBHHfAL$mBHHQAL$ qBHHTD$0HCMBH߅CHD1EM.LJ1HźCLH%HHB8H|$LBLE> 1)>IĿ>H>L>H|$ fDLH1ɺBH|$LB@HH=KLHeL^LfDkDD$HD$0sDt$l$hPBL%JI7S҉IHD$8D$,JAHHD$Ht$PH$dH$BL1MHct$hL.jI7HË~7IDD$ttL@LH$@H$CL@@AWIAVAUATIUSHXdH%(H$H1t$D$0D$E1Eu';\$It,HT$0L;39\$~zHc1HM,,I}H8-u_IuHL$~JHI<$1AH3HHUCE1A(C1XHHH[]A\BnfDHHD$8HD$@ATHIUHSHt"H1@H3HE1CH1\XI$H311HIXHMHt9u []A\fDH3HE1[]A\C1XATIԺUH^CSHH@H;q7~7HUHLHH:H3HH[]A\1ɺ\C1WfDHHHD$7HD$벐AWAAVAUATIUH1SHHHH9dH%(HD$81?A?AMl$CLHZMl$D$$CLHYHt$4L)?HUHD$HIHD$(LHYHcT$4I6H|$6H|$(L$$FLHHh`CHL$8dH3 %(HH[]A\A]A^A_1ҾCH?H3Q҉4HCHH`CfLt$(I(IH-H|$(HD$(HHLt$(fDD$$?AFAW9~!AFfALA9#^CHT>H3Q҉HI $IVLHH311ɺ\CHUU1fDCLHXuDCLHXD$$HHD$;5HD$1ҾCH=H3Q҉~lHH}u9H(H})EuI $HUHHHM HtH3E1CH1zTH31ɺCH1fTHHD$4HD$MD$I $CHHW1H|$(IsH81ҾCHIW҉HEHt$8H(H|$U1H$dH3<%( H[]A\A]A^A_f.LD$pAMH$CH1D$Ƅ$iuh@D{AlHD$$;D$ HcD$ H|$(HT$pHL$HLD$0LL$H4HHD$pLL$LD$0HL$HHD$ HDyIEfD$$9D$ HcD$ H|$(HT$xLL$0H4HH|$xLL$0;D{D$ HL$H|$L$H1D$dLD$xL1CHDT$HLL$0LL$0HDT$HIE CL1;DT$HLL$0LL$0L$HDT$HIvAlAAlIH|$AljƉD$DHD$DD{HHEHD$puEIA-A[HD$xHcD$@H4`CHH$%H$AH$IH$2XBHD$[f.AWAAVIAUIATL%(O!UH-(O!SL)1HHHtLLDAHH9uH[]A\A]A^A_Ðf.HHArgument #%d extends maximum size, skip it Argument #%d would extend maximum list size, skip it {%s} set argv {%s} set argc %d set arg0 [lindex $argv 0] if [regexp {\.tcl$} $arg0] { if [file exists $arg0] { set argv [lrange $argv 1 end] source $arg0 exit } } set flags(logging) 1 set flags(noswitching) 0 set flags(stordelay) 0 set flags(nombim) 0 set flags(logwrite) 0 set flags(nombim) 0 set flags(althuawei) 0 proc {Main} {argv argc} { global scsi usb config match device flags setup devdir loginit set flags(config) "" Log "[ParseGlobalConfig]" if {$flags(stordelay) > 0} { SetStorageDelay $flags(stordelay) } if {[lindex $argv 0] == "--symlink-name"} { puts -nonewline [SymLinkName [lindex $argv 1]] SafeExit } Log "Raw parameters: $argv" set device "noname" if {[lindex $argv 0] == "--switch-mode"} { if [string length [lindex $argv 1]] { set arg1 [lindex $argv 1] } else { Log "\nNo data from udev. Exit" SafeExit } } else { Log "\nNo command given. Exit" SafeExit } if {![regexp {(.*?):.*$} $arg1 d device]} { if {![regexp {([0-9]+-[0-9]+\.?[0-9]*.*)} $arg1 d device]} { Log "Could not determine device dir from udev values! Exit" SafeExit } } set flags(logwrite) 1 set setup(dbdir) /usr/share/usb_modeswitch set setup(dbdir_etc) /etc/usb_modeswitch.d if {![file exists $setup(dbdir)] && ![file exists $setup(dbdir_etc)]} { Log "\nError: no config database found in /usr/share or /etc. Exit" SafeExit } set bindir /usr/sbin set devList1 {} set devList2 {} set ifChk 0 set devdir /sys/bus/usb/devices/$device if {![file isdirectory $devdir]} { Log "Top device directory not found ($devdir)! Exit" SafeExit } Log "Use top device dir $devdir" set iface 0 Log "Check class of first interface ..." set config(class) [IfClass 0 $devdir] if {$config(class) < 0} { Log " No access to interface 0. Exit" SafeExit } Log " Interface 0 class is $config(class)." set ifdir [file tail [IfDir $iface $devdir]] regexp {:([0-9]+\.[0-9]+)$} $ifdir d iface set match(sVe) scsi(vendor) set match(sMo) scsi(model) set match(sRe) scsi(rev) set match(uMa) usb(manufacturer) set match(uPr) usb(product) set match(uSe) usb(serial) if {![ReadUSBAttrs $devdir]} { Log "USB attributes not found in sysfs tree. Exit" SafeExit } set config(vendor) $usb(idVendor) set config(product) $usb(idProduct) if $flags(logging) { Log "\n----------------\nUSB values from sysfs:" foreach attr {manufacturer product serial} { Log " $attr\t$usb($attr)" } Log "----------------" } if $flags(noswitching) { SysLog "usb_modeswitch: switching disabled, no action for $usb(idVendor):$usb(idProduct)" Log "\nSwitching globally disabled. Exit" SafeExit } if {$usb(bNumConfigurations) == "1"} { set configParam "-u -1" Log "bNumConfigurations is 1 - don't check for active configuration" } else { set configParam "" } set flags(os) "linux" if {$usb(idVendor) == "12d1" && [regexp -nocase {android} [exec cat /proc/version]]} { set flags(os) "android" } if {$flags(os) == "android"} { set configList [ConfigGet conflist $usb(idVendor):#android] } else { set configList [ConfigGet conflist $usb(idVendor):$usb(idProduct)] } if {[llength $configList] == 0} { Log "Aargh! Config file missing for $usb(idVendor):$usb(idProduct)! Exit" SafeExit } Log "ConfigList: $configList" set scsiNeeded 0 if {[llength $configList] > 1} { if [regexp {:s} $configList] { set scsiNeeded 1 } } if $scsiNeeded { if [ReadSCSIAttrs $devdir:$iface] { Log "----------------\nSCSI values from sysfs:" foreach attr {vendor model rev} { Log " $attr\t$scsi($attr)" } Log "----------------" } else { Log "Could not get SCSI attributes, exclude devices with SCSI match" } } else { Log "SCSI attributes not needed, move on" } set report "" foreach mconfig $configList { if [regexp {\.(dpkg|rpm)} $mconfig] {continue} Log "Check config: $mconfig" if [MatchDevice $mconfig] { Log "! matched. Read config data" set flags(config) [ConfigGet conffile $mconfig] break } else { Log "* no match, don't use this config" } } if {$flags(config) == ""} { Log "No matching config file found. Exit" SafeExit } ParseDeviceConfig $flags(config) if [regexp -nocase {0x([0-9a-f]+)} $config(TargetClass) d tc] { if {$tc == $config(class)} { Log "Class of interface 0 matches target. Do nothing" set report "ok:busdev" } } if [string length $usb(busnum)] { set busParam "-b [string trimleft $usb(busnum) 0]" set devParam "-g [string trimleft $usb(devnum) 0]" } else { set busParam "" set devParam "" } if [regexp -nocase $flags(os) $flags(config)] { Log "Note: Using generic manufacturer configuration for \"$flags(os)\"" } if $flags(althuawei) { regsub {HuaweiNewMode} $flags(config) {HuaweiAltMode} flags(config) Log "Alternative Huawei mode set globally, modify config" } if $flags(nombim) { set config(NoMBIMCheck) 1 } if {$config(NoMBIMCheck)==0 && $usb(bNumConfigurations) > 1} { Log "Device may have an MBIM configuration, check driver ..." if [CheckMBIM] { Log " driver for MBIM devices is available" Log "Find MBIM configuration number ..." if [catch {set cfgno [exec /usr/sbin/usb_modeswitch -j -Q $busParam $devParam -v $usb(idVendor) -p $usb(idProduct)]} err] { Log "Error when trying to find MBIM configuration, switch to legacy modem mode" } else { set cfgno [string trim $cfgno] if {$cfgno > 0} { set config(Configuration) $cfgno set flags(config) "Configuration=$cfgno" } else { Log " No MBIM configuration found, switch to legacy modem mode" } } } else { Log " no MBIM driver found, switch to legacy modem mode" } } if [PantechAutoSwitch] { Log "Waiting for Pantech auto-modeswitch" set report "ok:busdev" } if {$config(Configuration) == 0} { Log "Config file contains dummy method, do nothing. Exit" SafeExit } after 500 if {$config(WaitBefore) != ""} { Log "Delay time of $config(WaitBefore) seconds" append config(WaitBefore) "000" after $config(WaitBefore) } if {$report == ""} { if $flags(logging) { Log "Command line:\nusb_modeswitch -W -D $configParam $busParam $devParam -v $usb(idVendor) -p $usb(idProduct) -f \$flags(config)" catch {set report [exec /usr/sbin/usb_modeswitch -W -D $configParam $busParam $devParam -v $usb(idVendor) -p $usb(idProduct) -f "$flags(config)" 2>@1]} report Log "\nVerbose debug output of usb_modeswitch and libusb follows" Log "(Note that some USB errors are to be expected in the process)" Log "--------------------------------" Log $report Log "--------------------------------" Log "(end of usb_modeswitch output)\n" } else { catch {set report [exec /usr/sbin/usb_modeswitch -Q -D $configParam $busParam $devParam -v $usb(idVendor) -p $usb(idProduct) -f "$flags(config)" 2>@1]} report } } if {$config(Configuration) != ""} { set ifdir [regsub {(\d):\d+\.0} $ifdir "\\1:$config(Configuration).0"] } if [regexp {ok:busdev} $report] { if [CheckSuccess $devdir] { Log "Mode switching was successful, found $usb(idVendor):$usb(idProduct) ($usb(manufacturer): $usb(product))" SysLog "usb_modeswitch: switched to $usb(idVendor):$usb(idProduct) on [format %03d $usb(busnum)]/[format %03d $usb(devnum)]" } else { Log "\nTarget config not matching - current values are" LogAttributes Log "\nMode switching may have failed. Exit" SafeExit } } else { if {![file isdirectory $devdir]} { Log "Device directory in sysfs is gone! Something went wrong, abort" SafeExit } if {![regexp {ok:} $report]} { Log "\nCore program reported switching failure. Exit" SafeExit } if {![file exists $devdir/idProduct]} { after 1000 } ReadUSBAttrs $devdir $ifdir } if {[string length "$usb(idVendor)$usb(idProduct)"] < 8} { if {![regexp {ok:(\w{4}):(\w{4})} $report d usb(idVendor) usb(idProduct)]} { Log "No target vendor/product ID found or given, can't continue. Abort" SafeExit } } after 500 if {[llength [glob -nocomplain $devdir/$ifdir/ttyUSB*]] > 0} { Log "Serial USB driver bound to interface 0\n will try to guess and symlink modem port on next connect" AddToList link_list $usb(idVendor):$usb(idProduct) } if [regexp {ok:} $report] { Log "Check for AVOID_RESET_QUIRK kernel attribute" if [file exists $devdir/avoid_reset_quirk] { if [catch {exec echo "1" >$devdir/avoid_reset_quirk 2>/dev/null} err] { Log " Error setting the attribute: $err" } else { Log " AVOID_RESET_QUIRK activated" } } else { Log " not present in this kernel" } } Log "\nAll done, exit\n" SafeExit } proc {ReadSCSIAttrs} {topdir} { global scsi set counter 0 set sysdir $topdir Log "Check storage tree in sysfs ..." while {$counter < 20} { Log " loop $counter/20" if {![file isdirectory $sysdir]} { Log " sysfs device tree is gone; abort SCSI value check" return 0 } if {[set dirList [glob -nocomplain $topdir/host*]] != ""} { set sysdir [lindex $dirList 0] if {[set dirList [glob -nocomplain $sysdir/target*]] != ""} { set sysdir [lindex $dirList 0] regexp {.*target(.*)} $sysdir d subdir if {[set dirList [glob -nocomplain $sysdir/$subdir*]] != ""} { set sysdir [lindex $dirList 0] if [file exists $sysdir/vendor] { Log " Storage tree is ready" break } } } } after 500 incr counter } if {$counter == 20} { Log "SCSI tree not found; you may want to check if this path/file exists:" Log "$sysdir/vendor\n" return 0 } Log "Read SCSI values ..." foreach attr {vendor model rev} { if [file exists $sysdir/$attr] { set rc [open $sysdir/$attr r] set scsi($attr) [read -nonewline $rc] close $rc } else { set scsi($attr) "" Log "Warning: SCSI attribute \"$attr\" not found." } } return 1 } proc {ReadUSBAttrs} {dir args} { global usb set attrList {idVendor idProduct bConfigurationValue manufacturer product serial devnum busnum bNumConfigurations} set mandatoryList {idVendor idProduct bNumConfigurations} set result 1 if {$args != ""} { lappend attrList "$args/bInterfaceClass" lappend mandatoryList "$args/bInterfaceClass" } foreach attr $attrList { if [file exists $dir/$attr] { set rc [open $dir/$attr r] set usb($attr) [string trim [read -nonewline $rc]] close $rc } else { set usb($attr) "" if {[lsearch $mandatoryList $attr] > -1} { set result 0 } if {$attr == "serial"} {continue} Log " Warning: USB attribute \"$attr\" not found" } } return $result } proc {MatchDevice} {config} { global scsi usb match set devinfo [file tail $config] set infoList [split $devinfo :] set stringList [lrange $infoList 2 end] if {[llength $stringList] == 0} {return 1} foreach teststring $stringList { if {$teststring == "?"} {return 0} set tokenList [split $teststring =] set id [lindex $tokenList 0] set matchstring [lindex $tokenList 1] set blankstring "" regsub -all {_} $matchstring { } blankstring Log "match $match($id)" Log " string1 (exact): $matchstring" Log " string2 (blanks): $blankstring" Log " device string: [set $match($id)]" if {!([string match *$matchstring* [set $match($id)]] || [string match *$blankstring* [set $match($id)]])} { return 0 } } return 1 } proc {ParseGlobalConfig} {} { global flags set configFile "" set places [list /etc/usb_modeswitch.conf /etc/sysconfig/usb_modeswitch /etc/default/usb_modeswitch] foreach cfg $places { if [file exists $cfg] { set configFile $cfg break } } if {$configFile == ""} {return} set rc [open $configFile r] while {![eof $rc]} { gets $rc line if [regexp {^#} [string trim $line]] {continue} if [regexp {DisableMBIMGlobal\s*=\s*([^\s]+)} $line d val] { if [regexp -nocase {1|yes|true} $val] { set flags(nombim) 1 } } if [regexp {DisableSwitching\s*=\s*([^\s]+)} $line d val] { if [regexp -nocase {1|yes|true} $val] { set flags(noswitching) 1 } } if [regexp {EnableLogging\s*=\s*([^\s]+)} $line d val] { if [regexp -nocase {0|no|false} $val] { set flags(logging) 0 } } if [regexp {SetStorageDelay\s*=\s*([^\s]+)} $line d val] { if [regexp {\d+} $val] { set flags(stordelay) $val } } if [regexp {HuaweiAltModeGlobal\s*=\s*([^\s]+)} $line d val] { if [regexp -nocase {1|yes|true} $val] { set flags(althuawei) 1 } } } return "Use global config file: $configFile" } proc ParseDeviceConfig {cfg} { global config set config(WaitBefore) "" set config(TargetVendor) "" set config(TargetProduct) "" set config(TargetClass) "" set config(Configuration) "" set config(NoMBIMCheck) 0 set config(PantechMode) 0 set config(CheckSuccess) 20 foreach pname [lsort [array names config]] { if [regexp -line "^\[^# \]*?$pname.*?= *(0x(\\w+)|\"(\[0-9a-fA-F,\]+)\"|(\[0-9\]+)) *\$" $cfg d config($pname)] { } } set config(WaitBefore) [string trimleft $config(WaitBefore) 0] } proc ConfigGet {command config} { global setup usb flags switch $command { conflist { set configList [lsort -decreasing [glob -nocomplain $setup(dbdir_etc)/$config*]] set configList [concat $configList [lsort -decreasing [glob -nocomplain $setup(dbdir)/$config*]]] eval lappend configList [glob -nocomplain $setup(dbdir)/$usb(idVendor):#$flags(os)] if [file exists $setup(dbdir)/configPack.tar.gz] { Log "Found packed config collection $setup(dbdir)/configPack.tar.gz" if [catch {set packedList [exec tar -tzf $setup(dbdir)/configPack.tar.gz 2>/dev/null]} err] { Log "Error: problem opening config package; tar returned\n $err" return {} } set packedList [split $packedList \n] set packedConfigList [lsort -decreasing [lsearch -glob -all -inline $packedList $config*]] lappend packedConfigList [lsearch -inline $packedList $usb(idVendor):#$flags(os)] foreach packedConfig $packedConfigList { lappend configList "pack/$packedConfig" } } return $configList } conffile { if [regexp {^pack/} $config] { set config [regsub {pack/} $config {}] Log "Extract config $config from collection $setup(dbdir)/configPack.tar.gz" set configContent [exec tar -xzOf $setup(dbdir)/configPack.tar.gz $config 2>/dev/null] } else { if [regexp [list $setup(dbdir_etc)] $config] { Log "Use config file from override folder $setup(dbdir_etc)" SysLog "usb_modeswitch: use overriding config file $config; make sure this is intended" SysLog "usb_modeswitch: please report any new or corrected settings; otherwise, check for outdated files" } set rc [open $config r] set configContent [read $rc] close $rc } return $configContent } } } proc {Log} {msg} { global flags device loginit if {$flags(logging) == 0} {return} if $flags(logwrite) { if [string length $loginit] { exec echo "\nUSB_ModeSwitch log from [clock format [clock seconds]]" >/var/log/usb_modeswitch_$device exec echo "$loginit" >>/var/log/usb_modeswitch_$device set loginit "" } exec echo $msg >>/var/log/usb_modeswitch_$device } else { append loginit "\n$msg" } } proc {SafeExit} {} { global flags set flags(logwrite) 1 Log "" exit } proc {SymLinkName} {path} { global device flags proc {hasInterrupt} {ifDir} { if {[llength [glob -nocomplain $ifDir/ttyUSB*]] == 0} { Log " no ttyUSB interface - skip endpoint check" return 0 } foreach epDir [glob -nocomplain $ifDir/ep_*] { set e [file tail $epDir] Log " check $e ..." if [file exists $epDir/type] { set rc [open $epDir/type r] set type [read $rc] close $rc if [regexp {Interrupt} $type] { Log " $e has interrupt transfer type" return 1 } } } return 0 } set loginit "usb_modeswitch called with --symlink-name\n parameter: $path\n" set linkpath /sys$path/device if [file exists $linkpath] { if {[file type $linkpath] == "link"} { set rawpath [file readlink $linkpath] set trimpath [regsub -all {\.\./} $rawpath {}] if [file isdirectory /sys/$trimpath] { append loginit "\n Use path $path\n" set path /$trimpath } } } if {![regexp {([0-9]+-[0-9]+[\.0-9]*:[^/]*).*(ttyUSB[0-9]+)} $path d myDev myPort]} { if $flags(logging) { set device [clock clicks] set flags(logwrite) 1 Log "$loginit\nThis is not a ttyUSB port. Abort" } return "" } set device ttyUSB_$myDev set flags(logwrite) 1 Log "$loginit\nMy name is $myPort\n" if {![regexp {(.*?[0-9]+)\.([0-9]+)/ttyUSB} /sys$path d ifRoot ifNum]} { Log "Could not find interface in path\n $path. Abort" return "" } set ifDir $ifRoot.$ifNum Log "Check my endpoints ...\n in $ifDir" if [hasInterrupt $ifDir] { Log "\n--> I am an interrupt port" set rightPort 1 } else { Log "\n--> I am not an interrupt port\n" set rightPort 0 } if { $rightPort && ($ifNum > 0) } { Log "\nLook for lower ports with interrupt endpoints" for {set i 0} {$i < $ifNum} {incr i} { set ifDir $ifRoot.$i Log " in ifDir $ifDir ..." if [hasInterrupt $ifDir] { Log "\n--> found an interrupt interface below me\n" set rightPort 0 break } } } if {$rightPort == 0} { Log "Return empty name and exit" return "" } Log "\n--> No interrupt interface below me\n" cd /dev set idx 2 set symlinkName "gsmmodem" while {$idx < 256} { if {![file exists $symlinkName]} { set placeholder [open /dev/$symlinkName w] close $placeholder break } set symlinkName gsmmodem$idx incr idx } if {$idx == 256} {return ""} Log "Return symlink name \"$symlinkName\" and exit" return $symlinkName } proc {AddToList} {name id} { set listfile /var/lib/usb_modeswitch/$name if [file exists $listfile] { set rc [open $listfile r] set buffer [read $rc] close $rc if [string match *$id* $buffer] { return } set idList [split [string trim $buffer] \n] } lappend idList $id set buffer [join $idList "\n"] if [catch {set lc [open $listfile w]}] {return} puts $lc $buffer close $lc } proc {CheckSuccess} {devdir} { global config usb flags if {$usb(idVendor) == "1307" && $usb(idProduct) == "1169"} { set devdir [string range $devdir 0 end-1]2 } set ifdir [file tail [IfDir 0 $devdir]] if {[string length $config(TargetClass)] || [string length $config(Configuration)]} { set config(TargetVendor) $usb(idVendor) set config(TargetProduct) $usb(idProduct) } Log "Check success of mode switch for max. $config(CheckSuccess) seconds ..." set expected 1 for {set i 1} {$i <= $config(CheckSuccess)} {incr i} { after 1000 if {![file isdirectory $devdir]} { Log " Wait for device file system ($i sec.) ..." continue } else { Log " Read attributes ..." } set ifdir [IfDir 0 $devdir] if {$ifdir == ""} {continue} set ifdir [file tail $ifdir] if {![ReadUSBAttrs $devdir $ifdir]} { Log " Essential attributes are missing, continue wait ..." continue } if [string length $config(Configuration)] { if {$usb(bConfigurationValue) != $config(Configuration)} {continue} } if [string length $config(TargetClass)] { if {![regexp -nocase $usb($ifdir/bInterfaceClass) $config(TargetClass)]} { if {$config(class) != $usb($ifdir/bInterfaceClass} { set expected 0 } else {continue} } } if {![regexp -nocase $usb(idVendor) $config(TargetVendor)]} { if {![regexp -nocase $usb(idVendor) $config(vendor)]} { set expected 0 } else {continue} } if {![regexp -nocase $usb(idProduct) $config(TargetProduct)]} { if {![regexp -nocase $usb(idProduct) $config(product)]} { set expected 0 } else {continue} } if $expected { Log " All attributes matched" } else { if [regexp -nocase {/[0-9a-f]+:#} $flags(config)] { Log " idProduct has changed after generic mode-switch, assume success" } else { if [regexp {HuaweiAltMode} $flags(config)] { Log " Alternative target attributes found, assume success" } else { Log " Attributes are different but target values are unexpected:" LogAttributes } } } break } if {$i > 20} {return 0} else {return 1} } proc {IfDir} {iface devdir} { set allfiles [glob -nocomplain $devdir/*] set files [glob -nocomplain $devdir/*.$iface] if {[llength $files] == 0} { return "" } set ifdir [lindex $files 0] if {![file isdirectory $ifdir]} { return "" } return $ifdir } proc {IfClass} {iface devdir} { set ifdir [IfDir $iface $devdir] if {![file exists $ifdir/bInterfaceClass]} { return -1 } set rc [open $ifdir/bInterfaceClass r] set c [read $rc] close $rc return [string trim $c] } proc {SysLog} {msg} { global flags if {![info exists flags(logger)]} { set flags(logger) "" foreach fn {/bin/logger /usr/bin/logger} { if [file exists $fn] { set flags(logger) $fn } } Log "Logger is $flags(logger)" } if {$flags(logger) == ""} { Log "Can't add system message, no syslog helper found" return } catch {exec $flags(logger) -p syslog.notice "$msg" 2>/dev/null} } proc {SetStorageDelay} {secs} { Log "Adjust delay for USB storage devices ..." set attrib /sys/module/usb_storage/parameters/delay_use if {![file exists $attrib]} { Log "Error: could not find delay_use attribute" return } if [catch {set ch [open $attrib r+]} err] { Log "Error: could not access delay_use attribute: $err" return } if {[read $ch] < $secs} { seek $ch 0 start puts -nonewline $ch $secs Log " Delay set to $secs seconds\n" } else { Log " Current value is higher than $secs. Leave it alone\n" } close $ch } proc {CheckMBIM} {} { set kversion [exec uname -r] if [llength [glob -nocomplain /lib/modules/$kversion/kernel/drivers/net/usb/cdc_mbim*]] {return 1} if [file exists /sys/bus/usb/drivers/cdc_mbim] {return 1} return 0 } proc {CheckQMI} {} { set kversion [exec uname -r] if [llength [glob -nocomplain /lib/modules/$kversion/kernel/drivers/net/usb/qmi_wwan*]] {return 1} if [file exists /sys/bus/usb/drivers/cdc_mbim] {return 1} return 0 } proc {PantechAutoSwitch} {} { global config flags if {$config(PantechMode) == 3} {return 1} if {$config(PantechMode) == 1} { if {"$config(vendor):$config(product)" == "10a9:6080"} { set flags(config) [regsub {PantechMode *= *1} $flags(config) "PantechMode=2"] Log " PantechMode changed to 2" return 0 } elseif [CheckQMI] { set flags(config) [regsub {PantechMode *= *1} $flags(config) "PantechMode=4"] Log " PantechMode changed to 4" return 0 } else { return 1 } } else {return 0} } proc {LogAttributes} {} { global flags usb if $flags(logging) { set attrList {idVendor idProduct bConfigurationValue manufacturer product serial} foreach attr [lsort [array names usb]] { Log " [format %-26s $attr:] $usb($attr)" } } } proc {HasFF} {devdir} { set i 0 while {[set dir [IfDir $i $devdir]] != ""} { set c [exec cat $dir/bInterfaceClass] if {$c == "ff"} {return 1} incr i } return 0 } Main $argv $argc dispatcher.cinterp != ((void *)0) && "Could not create interpreter!"Evaluation returned error %d main2@2@1@1@2@1@1@1@1@1@1@1@1@1@1@1@1@1@1@1@1@1@1@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@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@02@9@9@9@9@9@9@9@9@9@9@9@9@9@9@9@9@9@9@9@9@9@9@9@9@9@9@H:@:@9@9@9@9@9@9@9@9@9@9@9@9@9@9@9@9@9@9@9@9@9@9@9@9@9@9@9@9@9@9@9@9@9@9@9@9@9@9@9@9@9@9@9@9@9@9@9@9@9@9@9@9@9@9@:@9@0<@ <@<@<@;@@<@@<@@<@@<@@<@@<@@<@@<@@<@@<@@<@@<@@<@@<@@<@@<@@<@@<@;@@<@;@@<@;@@<@@<@@<@@<@@<@@<@@<@@<@@<@@<@@<@@<@@<@@<@@<@@<@@<@@<@@<@@<@@<@@<@;@@<@@<@@<@@<@@<@@<@@<@@<@@<@@<@@<@@<@@<@@<@@<@@<@@<@@<@@<@@<@@<@@<@@<@@<@@<@@<@@<@@<@@<@@<@@<@;@;@;@@<@@<@@<@@<@@<@@<@@<@@<@@<@@<@@<@@<@@<@@<@@<@@<@@<@@<@@<@@<@@<@@<@@<@@<@@<@@<@@<@@<@@<@;@@<@;@@E@C@C@C@C@C@C@C@C@C@E@C@C@C@C@C@C@C@C@C@C@C@C@C@C@C@C@C@C@C@C@C@C@C@C@C@C@C@C@C@C@C@C@C@C@C@C@C@D@D@D@D@D@D@D@D@C@C@C@C@C@C@C@C@C@C@C@C@C@C@C@C@C@C@C@C@C@C@C@C@C@C@C@C@C@C@C@C@C@C@C@C@C@C@C@C@C@D@D@C@C@C@D@C@C@C@C@C@C@C@D@C@C@C@`D@C@pD@C@C@C@C@I@I@I@`I@`I@`I@`I@`I@`I@`I@`I@`I@`I@`I@`I@`I@`I@`I@`I@`I@`I@`I@`I@`I@`I@`I@`I@`I@`I@`I@`I@`I@I@`I@PI@@@@@v@C@C@@@@@@@4@%@@h@@@@@@@@@@@@0@(@@0@@r@h@@@@@@@@@@@@(@H@@@@@@@@@@@@@@@@8@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@8@@@@@@@h@@@@@@@@@x@R@<@&@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@OAAAAAAqA_AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA]AA_A_A_A_A_AAAAAAAOA AAA_A5A5A5A5Ap5A@5A5A5A5A5A5A5A5A5A5A5A3A@@A@A@A?Ah?A>A@@A@@A@@A@@A@@A@@A@@A@@A@A@A}BAqBAeBAYBA8BABAEAGAGAxGA`GAGAEAEAEAEAEAEAEAEAEAEAFAȀA0A0A0AЂAA}A}AAp~AAAAȀAAA@AA(AA APAЋAAA@AApAAAXAXAAЍAAAAAHAAApAAAPAPAPAAACA8A-A"AAǗAAA AAAA6AAA`APAAAPAAAءAȡAAAAAAA@@@SAgBmBBBBBrBwBBBBBBBBBBBBBBB*B2BBBBBBBBBBBBBBBBVB+B7BB BBBBB(B0B8B?BiBB BCBBBHBfBMB\BhBBCuB{B BBBBBBBBBBBZBSBBBBBBBBBBBBB BBBBB B$B(B,B0B4B8BScriptObjAddTokensiBP@BpA@B>@3@>@A@`=@CB=@3@>@A@`=@f@BBPA@@@A@=@g@ZBe@p3@BSBe@P3@B QB2@B`f@Bf@3@PA@@@A@=@=@PA@@@@@A@=@p=@PA@@@A@=@g@.%020lld>end%d%.12gunsupportedexpandjim.cscript->len < countlist index out of range(null)%p (%d) %-10s: '%.20s' FILE %s LINE %d (%d)wrong # args: should be "formatString ?arg arg ...??-nonewline? string-nonewline string ?splitChars?message ?stacktrace?list ?joinString?%#srenamedeleteinvalid command name "%#s"oldName newNamenew procedure>><=>===!=^&&||**eqni!~absroundsrandreturn-codesignalcoerced-doublescriptlinecompared-stringinterpolateddict-substitution -------------------------------------Objects still in the free list:------------------------------------- invalid dictionary value: must be a list with an even number of elementsThe second argument must be -nonewlinecan't %s "%s": command doesn't existcan't rename to "%s": command already exists%s name contains embedded nullexpected reference but got "%#s"expected integer but got "%#s"Integer value too big to be representedInvalid (infinite?) range specifiedkey "%#s" not found in dictionarycan't read "%#s": no such variablecan't unset "%#s": no such element in arraycan't %s "%#s": variable isn't arrayDict key syntax invalid as link sourcecan't upvar from variable to itself?level? otherVar localVar ?otherVar localVar ...?string format ?varName varName ...?cannot mix "%" and "%n$" conversion specifiersvariable is assigned by multiple "%n$" conversion specifiersfield width may not be specified in %c conversion"%n$" argument index out of rangedifferent numbers of variable names and field specifiersvariable is not assigned by any conversion specifierscan't read "%#s(%#s)": variable isn't arraycan't read "%#s(%#s)": no such element in arraycan't unset "%#s": no such variablebad index "%#s": must be integer?[+-]integer? or end?[+-]integer?list first last ?element element ...?list index element ?element ...?Expression has bad operands to %ssyntax error in expression: "%#s"wrong # args: should be "%#s%#s"Too many nested calls. Infinite recursion??-?no?code ... --? script ?resultVarName? ?optionVarName?%lld microseconds per iterationcondition ?then? trueBody ?elseif ...? ?else? falseBodyvarList list ?varList list ...? scriptenvironment variable "%#s" does not existvariable for initialization of static "%#s" not found in the local contextstatic variable name "%#s" duplicated in statics listtoo many fields in static specifier "%#s"procedure has argument with no nameprocedure has argument with too many fieldsprocedure has 'args' specified more than once?options? string pattern body ... ?default body? or {pattern body ?pattern body ...?}bad option "%#s": must be -exact, -glob, -regexp, -command procname or --no body specified for pattern "%#s"expected return code but got "%#s"?-code code? ?-errorinfo stacktrace? ?-level level? ?result?command "%#s" is not a procedurelist must contain an even number of elements"-command" option must be followed by comparison command"-index" option must be followed by list index?-exact|-glob|-regexp|-command 'command'? ?-bool|-inline? ?-not? ?-nocase? ?-all? list value;??%#s: %scurrent0.0.0.0Not a valid address: %saio.handle%ldfilename ?mode?stdinstdoutstderrpopenacceptaio.sockstream%ldr+:%daio.sock%ldaio.socksrv%ldaio.sockunix%ldaio.sockunixsrv%ldunix.serverdgramdgram.serverstream.server-ipv6ipv6 not supported?-ipv6? type ?address?aio.pipe%ldwUnsupported socket typeNot a filehandle: "%#s"error while reading: %serror while writing: %s1.0aiosocketnoneread?-nonewline? ?len?copytohandle ?size?gets?var??-nonewline? strrecvfromlen ?addrvar?sendtostr addresslistenbacklogflushFlush the streamReturns 1 if stream is at eofcloseCloses the streamseekoffset ?start|current|endtellReturns the original filenamendelay?0|1?none|line|fullSets buffering?readable-script??writable-script?onexception?exception-script?invalid parameter: negative lenopen stdin; open stdout; open stderrRead and return bytes from the stream. To eof if no len.Copy up to 'size' bytes to the given filehandle, or to eof if no size.Read one line and return it or store it in the varWrite the string, with newline unless -nonewlineReceive up to 'len' bytes on the socket. Sets 'addrvar' with receive address, if setSend 'str' to the given address (dgram only)Server socket only: Accept a connection and return streamSet the listen backlog for server socketSeeks in the stream (default 'current')Returns the current seek positionSet O_NDELAY (if arg). Returns current/new setting.Returns script, or invoke readable-script when readable, {} to removeReturns script, or invoke writable-script when writable, {} to removeReturns script, or invoke exception-script when oob data, {} to removeA@A`AAjAAABB BBBABBBABBBA8B $max} { set max [string length $name] } } incr max [string length $arrayname] incr max 2 foreach name [lsort [array names a $pattern]] { $puts [format "%-${max}s = %s" $arrayname\($name\) $a($name)] } } proc {file copy} {{force {}} source target} { try { if {$force ni {{} -force}} { error "bad option \"$force\": should be -force" } set in [open $source] if {$force eq "" && [file exists $target]} { $in close error "error copying \"$source\" to \"$target\": file already exists" } set out [open $target w] $in copyto $out $out close } on error {msg opts} { incr opts(-level) return {*}$opts $msg } finally { catch {$in close} } } proc popen {cmd {mode r}} { lassign [socket pipe] r w try { if {[string match "w*" $mode]} { lappend cmd <@$r & set pids [exec {*}$cmd] $r close set f $w } else { lappend cmd >@$w & set pids [exec {*}$cmd] $w close set f $r } lambda {cmd args} {f pids} { if {$cmd eq "pid"} { return $pids } if {$cmd eq "close"} { $f close foreach p $pids { os.wait $p } return } tailcall $f $cmd {*}$args } } on error {error opts} { $r close $w close error $error } } local proc pid {{chan {}}} { if {$chan eq ""} { tailcall upcall pid } if {[catch {$chan tell}]} { return -code error "can not find channel named \"$chan\"" } if {[catch {$chan pid} pids]} { return "" } return $pids } proc try {args} { set catchopts {} while {[string match -* [lindex $args 0]]} { set args [lassign $args opt] if {$opt eq "--"} { break } lappend catchopts $opt } if {[llength $args] == 0} { return -code error {wrong # args: should be "try ?options? script ?argument ...?"} } set args [lassign $args script] set code [catch -eval {*}$catchopts [list uplevel 1 $script] msg opts] set handled 0 foreach {on codes vars script} $args { switch -- $on \ on { if {!$handled && ($codes eq "*" || [info returncode $code] in $codes)} { lassign $vars msgvar optsvar if {$msgvar ne ""} { upvar $msgvar hmsg set hmsg $msg } if {$optsvar ne ""} { upvar $optsvar hopts set hopts $opts } set code [catch [list uplevel 1 $script] msg opts] incr handled } } \ finally { set finalcode [catch [list uplevel 1 $codes] finalmsg finalopts] if {$finalcode} { set code $finalcode set msg $finalmsg set opts $finalopts } break } \ default { return -code error "try: expected 'on' or 'finally', got '$on'" } } if {$code} { incr opts(-level) return {*}$opts $msg } return $msg } proc throw {code {msg ""}} { return -code $code $msg } proc {file delete force} {path} { foreach e [readdir $path] { file delete -force $path/$e } file delete $path } command "": should be Usage: "wrong # args: must be " command ..." -help" or " -help command" for help-usage -commandsambiguousUsage: -help-subcommands-subhelp-subusage -help" for help Use "$handledummy command ... ", where command is one of: C)Bformat string ended in middle of field specifiernot enough arguments for all format specifiers.%ldbad field specifier "%s"e6B6B6Be6B6B6B6B6B6B6B6Be6B6B 7B6B6B`6BX;B;B;B;B;B;B;B;B;B;B;B;B;B;B;B;B;B;B;B;B;B;B;B;B;B;B;B;B;B;B;B;B;B;B;B;B;B;B;B;B;B;B;B;B;B;B;B;B;B;B;B;B;B;B;B;B;B;B;B;B;B;B;B;B;B;B;B;B;B;B;B;B;B;B;B;B;B;B;B;B;B;B;B;B;B;B;B;B{8B;B;B;B;B;B;B;B;B;B;B:B{8B;B;B;B;B;B;B;B;B;B;B{8B;B;B;B:B;B{8B;B;B{8BCB;4P  p8P0` 8 (Xx   @ @` `!0!! "`"80#p### $ P$8p$P$h%`((0@))`* +(,@p///183xp4456h70778@8xp9999998:P@:hp:;<P=Pp=h@>`>>`?H?h?@CC(D@DXDDD EE0F8FhGpHHH8IPI0JPJJKH L @L M!M@!MX!Mx!`N!N! O"@O0"pOH"P"Q"R8#pS#S#S# T$T`$X$^%@cP%0d% e%`f &fP&pg&h&h&`h'i@'PiX'ip' j'`j'j(0k0(0lh(Po(o(o)o)p0) pP)Pph)q)`q)q)@r *rH*rh*0s*t+0vH+v+x+y,`z8,|,},p}- ~X-~--`-p .pp..0.`.`/@p/@//800000@1P(1P111122203`3P33@4@4x444`85x55P56@6667X7`7778X888(9x9p9p:нX::::(;@;X; ;;;p<<P(=0x===`(>H> >>p(?`x?p??(@0P@@`@xAA@BB BP(C`@CCCD0@D@DD`EphEE PFp F FG@G@GGH HHxH`HH I@ pI0%I@&I'J+hJ,J,Jp-0K-PK-xK2Kp4L5pL@6L@7L9 M`=pMp=M=M BMD@NpEpN0HN`HNHOIOJOL(PSxPSPX0QZQ`[Q[Q0^0R`hRjR@lSoHSSS8TPT T@TTTpUPPUxUЊU0UU8VЌPVhVVpVV WXW0W0W0X`XX@YHYYY Z `ZZ Z[ H[p[Щ[ [p@\Э\0\p]Я(]`]]@]]^P8^X^`^p^^`0___``P`0```a a8aPaxaaa@bhbbb@c@cxccdd0d Hd0`d ddHe@ePefXf0ff(gP`ggpg ghHh0ph`hhip@i xiiijPj jjkXk0xk`k@klHl0lP lp m @m `m` mp m m n Hnn noPooo`!p!`pzRx *zRx $pFJ w?;*3$"$D=,AC H lH]A[j0 ,(\ADG z CAF X4` LXd`.$|xIAr A C A  dBGE B(G0A8DPy 8A0A(B BBBA 8A0A(B BBB4<!AAG S AAB i AAE Lt\BBA A(G0w (A ABBF  (A ABBI , AK L  I g I D L p 'AU J F, AHJ f AAE ,D0 AG  AE t AK t AU AU$ AVP AA $AT4DzBPA GPV  AABA $|nADG _AA,6BAA nABL BBE E(D0A8GPn 8A0A(B BBBF $$;AGD lAA$L;AGD lAA$t/AAG cAA8Ar A C!DYDT dDBBE E(G0F8DP 8A0A(B BBBA D 8F0A(B BBBA DlBBE D(A0D@j 0A(A BBBD @4\TLhBBE E(D0A8F@\ 8A0A(B BBBA <zBGB A(A0^(A EBB$\AG m AA <pBBD D(F0 (A ABBA LvBBE B(A0A8D`f 8D0A(B BBBL 4,IADD n FAB DCA$d0ADK XFADBBB D(C0G` 0A(A BBBA <BBD D(G@! (A ABBF 4 BDD G0  AABF $L tDb J T L \<t BBA A(G`~ (A ABBG L BEB D(D0 (A BBBK A (A BBGA $ PHAG M AJ bA, x,D cADG0O AAA dt BXE A(A0u (A BBBA [ (A BBBH A (A BBEA 4 8lBAA GPW  AABA , prADG0^ AAA D \ t  , /BDA dAB - ' .d eBEB B(A0A8D`{ 8A0A(B BBBJ  8C0A(B BBBA  L BBEB D(D0u (A BBGF b (A BBBG  !< "BEA A(G0 (A ABBA D "AQ4d "wBAD b ABD AADD "|BDD M ADD D ABI HAB #*Ah #J<X#BBD I(D0 (A ABBF L\# BBB B(A0A8Dp 8D0A(B BBBI && &4&qADG z AAH ^AA,&#D',\'4BDD fAB$('AG` AA '\AD K ,'AIG@ AAI ,(ADG  AAC L4(BBA A(D0 (D ABBN D (A ABBF )4)WADG b AAH D DAO )4)gADG f DAI L DAO 4$)ADG V DAI S DAH \h*tp*.AU J IL* BBE E(A0A8DP 8A0A(B BBBA <P+uBBD A(D0W (A ABBE $+\<+BBD D(G@d (A ABBC o (C ABBI P (G ABBL <,}BBD A(D0\ (D ABBE X,`,%Ac4p,fADG0W AAK sAA4L,BDA E DBF dAB$,?AG W AH -AN A K-0T [4 -BDD l ABG t ABI Lx-BBB B(A0A8G@ 8A0A(B BBBE dl(. BBB B(A0A8D`} 8D0A(B IBBI I 8A0A(B BBBE d.\BBB E(A0A8D` 8A0A(B BBBF S 8D0A(B BBBH $</`AQ ] FK YFd0,|/7BDC jABL0wBBD D(F0I (F AEBG t(G ABBL80BBE B(D0A8Ja 8A0A(B BBBK LL3BBB E(A0D8GW 8A0A(B BBBA L9BBB B(D0A8Ga 8A0A(B BBBA T=BEE D(C0G@O 0F(A BBBJ w 0A(A BBBA $D>AG@ CB LlH?;BEB A(C0 (A BBBF s(A BBB,8@JADG0P DAO ,X@ADGp AAA 4@AAG0y AAD D FAE T@A 4l8ALADI0M DAH ZAD4PABDD0a GBL D IBQ A8DsA5Dp, BBDD Z ADG <xB1A` G HL\BBEE E(D0E8G@B 8C0A(B BBBA B2AP G Y4BBBA D(D0(A ABB<C BBA D(D@9 (D ABBI 4DFCBED D(L0P(N ABB|F,D] G FFFA]F/D j4FBDA G0  AABA $<XGXAN _ FD YF$dGUAN _ CG YC,G}ADG0i AAA $HRADG AAPHAV<PHlBEE A(C0J(A BHBTDHBEE D(C0G@j 0F(A BBBG ` 0C(A BBBF DH$BBB D(D0D` 0A(A BBBC DJBEB D(D0D@ 0A(A BBBA L,HKBBB E(A0A8GP 8C0A(B BBBF ,|LADG0k AAG $MAM0 AA | NGBBE B(A0A8DP| 8D0A(B BBBA  8A0A(B BBBE e 8C0A(B BBBG $TOMAN ] CA YC4|PpBED D(G0Q(C ABB<PPBEE D(A0(D BBBDPBBE E(A0A8G@8C0A(B BBB<8QT@QZteLlQ BBB B(A0A8DQ 8A0A(B BBBG LHZBEJ B(D0F8F@ 8A0A(B BBBG , ZAJ t AH S FG < X[-TXT p[-TX4l [AGG0b AAE S FAF d P\BEB B(A0A8GPz 8A0A(B BBBH S 8F0A(B BBBF D !^BEB A(A0D@ 0A(A BBBH 4T!_AAG0S CAH S FAF D!_BDC G0l  FABK S  FABD L!@`jBBB E(A0D8D` 8A0A(B BBBG L$"`aBBB E(D0A8D`G 8A0A(B BBBK t" b'AQ N F"0b"(b$" b<AII fAAD"8bTKED D(F0j(A ABBB04#PbL#HbLd#@bBBB B(A0A8J 8A0A(B BBBF t#dBBE E(D0@ (A BBGB G (A BBBJ h (A BBBI e (A BBGG <,$(eBEA D(G0 (A ABBD <l$e~NDG0o FAA DCAP0L$fcBBB B(A0D8G@b 8D0A(B BBBE D$8gBAD G0X  FABA q  DABH <D%gBED A(D` (A ABBF % i$A\ C C4%0ijBDD ~ ABE A AGG 4%hiLADG i CAG DFA,&iADG@[ AAG DD&0jAAG0j CAI S FAF D FAE D&jAAG E CAF S FAF D FAE <& k[BBA A(GPk (A ABBB $'@l6ADG gAA$<'XlOAG @ AA Ld'l%BEE B(D0A8DP 8A0A(B BBBA $'`mAG x AG D'moBBE A(A0G` 0A(A BBBG L$(nlBBB E(A0A8Gpy 8A0A(B BBBI 4t(qBAD GP  AABD D(rBBB D(D0Fpf 0A(A BBBF $(@uAG0 AA $)u3ADG dAA,D)uHADD@ AAB <t)wBBA D(GP (A ABBH <)`xBBD A(G` (A ABBE ,)zADG0z AAH L$*{BEB A(A0 (A BBDE L (A BBDC Lt*{BHE A(A0a (A BBED |(A BBEL*`|BHE A(A0T (A BBEA |(A BBED+}BDA G0}  AABA Z  AABB L\+}BHE A(A0S (A BBEB |(A BBED+X~\BBE A(A0Gp 0A(A BBBF L+pBEE B(D0A8D0 8A0A(B BBBG D, \,؆ Lt,ІBBE E(D0C8Dp 8A0A(B BBBE ,P ,H <,@wBEE D(D0s (A BBBB D4-BEB A(A0D@z 0A(A BBBA |-؈t-BBB D(D0[ (A BEBE W (A EBBG p (A BEBF S (A BEBC L .8BEA D(G0J (D ABBJ ` (D ABBG d\.؉BBB B(D0D8GP 8D0A(B BBBD L 8G0A(E BBBI L. BBB B(A0D8D 8A0A(B BBBB </\BID D0h  AABA W AAB$T/Ѝ%AAG YAAD|/؍BDA L0L  AABE W  AABE /09A7L/PuBEB B(D0A8GP 8D0A(B BBBC <40vBDD @ ABC A AGG Lt0BHE A(D0\ (A BBBI V (A BBGF L0@BBB B(A0A8D: 8A0A(B BBBF D1BEJ D(A0G@x 0A(A BBBC $\1%AAG YAA<1^BID D0h  AABA Y AAB$1М%AAG YAA<1؜BBD D(DP (A ABBI d,2hUBBE E(D0A8DP 8F0A(B BBBH o 8A0A(B BBBG |2`sBBE E(D0A8DP 8A0A(B BBBE a 8A0A(B BBBE k 8F0A(B BBBA L3`AGG0x AAG S FAF k CAA D FAE td3:BEA D(G0@ (D AEBA u (D ABBB V (D ABBA D (G ABBP \3BBE B(A0A8DP 8C0A(B BBBA D8F0A(B BBBL<4H.BEB B(D0A8D` 8A0A(B BBBJ 44((BDG G0  AABH 4 L4QBBB J(D0A8D7 8A0A(B BBBA D,5(ADG0o AAC o AAG S FAF 4t5BDG G0  AABF ,5AG ] AJ q CD L5BBB E(A0A8GpS 8A0A(B BBBG D,6;BEB D(D0D@y 0A(A BBBJ <t6BBD A(D` (A ABBI L6@BBE E(D0A8DPB 8C0A(B BBBK L7E BBB B(A0D8GP 8A0A(B BBBA T7:BBE E(A0A8Gp 8A0A(B BBBH > 8F0A(B BBBC  8F0A(B BBBC  8A0A(B BBGA L7cBDE E(D0D8GP 8D0A(B BBBG <8LT8BBE B(A0A8G+ 8A0A(B BBBG 48NAAG o AAF DDAL8;BBE E(D0A8GP 8A0A(B BBBA ,,9AJ v CD S FG <\9BDD R AGD i ADJ D9BEF M(G0C8DPY8A0A(B BBB,9ADGpl AAF $:pkAQ0R AA L<:BBB B(A0D8Gv 8A0A(B BBBD ,:UACG0K AAH L:Z BEB B(A0A8G 8A0A(B BBBA D ;BBE A(D0JK 0A(A BBBE ,T;p ADGPv AAD ,;P7AAG@ AAI L;`BBB B(D0C8G 8A0A(B BBBK <<BEE D(A0K (A BHED 4D<`BDD G0p  AABK L|<BJG D(D@f (A ABBI W (A ABBC <8AT$<8%AAG YAAL=@ BEE B(A0D8D` 8A0A(B BBBC Ld=BBB B(D0D8D 8A0A(B BBBE T=P[BBB D(C0G@ 0A(A BBBB s 0F(A BBBH $ >XfDg E E K e44>BDD D0  AABA Ll>hBBE H(A0C8G` 8A0A(B BBBG L>MBBB E(A0D8F 8A0A(B BBBD  ? $?L?;ucRO=`1(Gd\6fe,(hgK2*N7Bͫӵፄ'ŶF,S5f̌~qPaG5A}26~ ¤A]kcNe^V~uG Ϫ5'sES<9pdzL]f 3lE{tOO;ebZIV ؁Vh_y$YFMgB{dA0mQ;5$*+T Ԁ!"MʛEBP fߤr?wyzBn2Uy_|y>LT g> -ZqPɇ5: " _9?߄^[GhrΌ3ӂIs0(dAc%N[u1xw*D/oD=#틼H?8M}j %"v" F~sT#o+"s5H{>yuU @+OWUɔVzka1HEqN0[攠5sfNC @v{3y@F&{82\Zk2芡÷s6Y8BYԹɗ ߎTN\>ģ2&Dn a;i'0f+M@MDJwM5ūA٢M5~fw]=Qœ*8h²]+5wK 8fn3i:ii`B~:G] 7_GՈ©^;fTL6P&#gS|HZc gcgq ݊1&k uPGkܦ]jZUğ<̆&iPz_=Ȣ* /88oiE#/H`)K)!Zn-SdJ6謁GS}x$aIPA zM-)1LѥS=Z:8_tOUɝx;DT (*—$ճ| uA:D#v7:hpd@nc%ưpc;bA?}VqLjt%EtL0`S Hvy >OU8 N0+7|Ⱥ/oOJ^S.¾8󔘽w{v,)̑"\OZ6H]NfMc  N bfigX^+]1h"*&XӖkn,xn*mCBD+%74ɼqJ}>n Q~b/_,Z{{q}krZ"JNg s鴳#Aq0vYr~}5;M@rqw1BeNRchw1l4!&w oaJRj4K z2B;_,|S2-;Qʵ-~BF/3 0w8\Q~KdOQǯ["^ՍaC*,o/cgfOՇ;E=%c$W_W7uΣ4PVs#vގAW[R0痤ϓjD[=7(T27vHX"gmhU l#C:Ç}ا}1'*0FN߂҉R"#hcj7 !i=uOē%UQrzArtp}⊒$% *Ra, %oG+j@2xdw{Q19d>`?UpE^2B{9yf"%#Çqs%F \U"wԃQGk[( Uӎu&c= S ɜI{u?p.van",)W@ "ўڤ*PtjsS5cԮ:UJgl |+_- C+,T\@B@P9k" }aȳe0\]+ųV76HXOOX,ܦPwt!+[@|BOED65IyAZ rT{;%NT4@sr#64xۊr`TEi m;k$P.y)?!WJqE#;/"hіt,lg=CbmT 5[T$̀PN+끍y#"kAM^aa'N6g4^µԆF$ 386ХЧ > DPcslKX^D&jӹ2n2FI[2&4U]`BTL3|,(Y_ό#IKO6AX{rϙzj3, "gseS&^O9 wT{w'P:b UDG2nSԔR'rD|œ[dTrNeL &a0uH >< C#"DU8C'%L8Ö55[5 87d@/v)*R(em@A92S?亁sȒbu2Y IR"N\+xeZx)I a>~M9T@ 8tŴr==\I%of+Q!wUQ ;ᓌa VBRVM*(E:eu}_>(];E%9˕fvJNS_\ݾ@k{7dQ-2p"; n\+sKʹ5 Xu_uy$1,ȒJ(eOi-wC'2ױ!tBNq$#f$hvOp\gr2Q =eS?#w6uJ EHGyw88oyߺAux+ vwut{dK^z`*ºq:!)VT#^vEkפ ?B.=a{uX{^j%"LRTO;q4'o1Ek5HRZ &4)C_Η >GcQ~ "-W1Yv0/f}_YIf3rhğ)]fW2)'@[6thGG3|Hy]`w4}oR*Т[k-~/-P )\.Gx֯pγR]m;4Ԭ- T]U?}i>Ϳ[o9jZ-+o~sƜILvyJ~# Z wjD/pULl6) mwbAe1Ptbvz26=b궜P+fm/qb܏f䳁D[I-[;4bÛy!`~?g"!ffo$ ?&tjhzh¼qG]J*C?|gs6{  n+"M;U`ՂcU\r0I#ԻNp*FtQn%$L)B & @cٝUBJ|RXJk :2APD7<,%$<O>L1;yOOsQiW)Bɭj@/͇W6+L:gYZ.shstrtab.interp.note.ABI-tag.note.gnu.build-id.gnu.hash.dynsym.dynstr.gnu.version.gnu.version_r.rela.dyn.rela.plt.init.text.fini.rodata.eh_frame_hdr.eh_frame.init_array.fini_array.jcr.dynamic.got.got.plt.data.bss.gnu_debuglink.gnu_debugdata 8@8T@T !t@t$4o@> H@H8 F@No&@&[o@@@j@xtBH@H  ~#@#y$@$pp,@p,D?BD? `?B`? pCp4+C+Dbcc c (c(ccHHcHPcLXL$pX