.wfsà+n&} RfcssDA R R RՆC…+n&}+S)5ھDimgDA+S+S+S!*  Rs;/VjsDA R R RO;y9?- RI*backup_battery.htmlDmXфl/ R R Rl32
Backup Battery Monitoring Configuration
 
Loading .....
 
Switch Config State
AC power lost detection OFF  
UPS module detection OFF  
UPS power low detection OFF  
Switch A input OFF    
Switch B input OFF    
 
 

8? Rxc!kcatv_config.htmlDmXф R R RSUt CATV Configuration
CATV Configuration
 
Loading .....
 
CATV State:   Open
 
CATV State:  
 
   

2v7P R 7[J|colors.css<5 R R RAIt td.hd { color:black; background-color:#efefef } input { color:black } .logobody { border-bottom:black 2px solid } .footerbody { border-top: black 2px solid; background-color: sn:d; background-color: sn:d; back ovlor: sn:d; backgrouns kgrouns kgrouns kgr:hg8 kgxf backgrouns kgrouns oloor:black } balinkput { col ovlor: sn: balink:hoverput { col ovlbackgrouns kgrouns olo#1f8cfaor: sn: balink:activeput { col #1f8cfabackgrouns kgrouns oloor:black } bacellnd-color: sn:d; back or:black 0x> R7zpVmenu.cssH*v R R RMG*l8}.menulink { font-weight: bold; font-size: 9pt; cursor:pointer; font-family: "verdana", "sans-serif", "arial"; text-align: left; text-decoration: none; color: #000000 } .menulink:hover { color: #000000; background-color: #5AACFF } .menulink:active { color: #0155AA; background-color: white } .mymenulink { font-weight: bold; font-size: 9pt; cursor:pointer; font-family: "verdana", "sans-serif", "arial"; text-align: left; text-decoration: none; color: #000000 } .mymenulink:hover { color: #000000; background-color: #5AACFF } .mymenulink:active { color: #0155AA; background-color: #B7B7B7 } 5JN R s5$stylemain.css u R R RuuR.button_style { border-style: solid; border-color:#000000; border-width: 1px; padding-left: 4px; padding-right: 4px; padding-top: 1px; padding-bottom: 1px } .input_style { border: 1px solid #C0C0C0; padding-left: 4px; padding-right: 4px; padding-top: 1px; padding-bottom: 1px } body { margin: 0px; font: 12px verdana, arial, ms sans serif; color: #000000; background-color: #ffffff } body.pop { margin: 13px; font: 12px verdana, arial, ms sans serif; color: #000000; background-color: #ffffff } td { font-size: 9pt; font-family: "verdana", "sans-serif", "arial" } td.hd { font-weight: bold; font-size: 9pt; font-family: "verdana", "sans-serif", "arial"; color:black; background-color:#efefef } input { font-size: 9pt; font-family: "verdana", "sans-serif", "arial" } .menulink { font-weight: bold; font-size: 9pt; width: 100%; cursor:pointer; font-family: "verdana", "sans-serif", "arial"; text-align: left; text-decoration: none } a.dare { color: #000000; text-decoration: underline } a.dare:active { color: #1f8cfa; text-decoration: underline } a.dare:visited { color: #000000 } a.dare:hover { color: #1f8cfa; text-decoration: underline } 5JN R sc]vctc_info.htmlDmXф 4 R R R(׻b$9 MAC Address Table
CTC Configuration Parameters
 
Loading .....
 ID      Port List   
   1    2 3 4
EtherLinkState
USPolicing PORT1
EthPortDSRateLimit PORT1
LinkRate
phyAdminStatus PORT1
EthPortPause PORT1
EthPortVlanMode PORT1
EthPortVlanId PORT1
MulticastTagOper PORT1
MaxGroupNum PORT1
LoopDetect PORT1 PORT4
EthAutoNeg PORT1
MulticastMode PORT1
MSFastLeave PORT1




< Rұ'animated_loading.gifl CG ( R R R( ( l\JGIF89a k>LXd\hs})8 cnw߁kugr;I$3$* Q],8F0?뮂⋭쳌{.=!6Dޮ촖杫뱔כ,;uR^@M+^i硲⌁S_GT&5DQLY("KXNZANx߂&fq!1 -<~`kER! NETSCAPE2.0! k, akjj 2k0!  Ņ Ʌց! k, ckX'jj jFj&jH,jj' *[ăZQɃ! k, Pk$# / j  ͊! k, TkEP!\* RY&j jj)¹L̡ѝ! k, Xk D  jj!02 ! k, Wk14W%"@S_V.j(B-Nj:TA ] GԖ! k, Pkj / #$  ͇! k, fkk)?j >MjjC -OjK j,UjI3j%^< ;ˆ5=LJJ.̆(! k, akjj 2k0!  Ņ Ʌց! k, k8jj97+)54?j >a1XMje'C -bd jFOf3j&K j,ijHUjIhc,j3j%`gj^ 8N;!H-n$XEd 6hŽ4.BUD85x`H" ^4) 0$0)AV%LA&X(keuvW)PD"Ȃ5!8L;" @]8PxPl`p ! 7HJExP LzܨD ah΃tdHF)&D 2<(!LB@ “ ޑo57BP` ! k, /k!k, k8jj97+)54?j >a1XMje'C -bd jFOf3j&K j,ijHUjIhc,j3j%`gj^ 8N;!H-n$XEd 6hŽ4.BUD85x`H" ^4) 0$0)AV%LA&X(keuvW)PD"Ȃ5!8L;" @]8PxPl`p ! 7HJExP LzܨD ah΃tdHF)&D 2<(!LB@ “ ޑo57BP` ;5JN R *ANYK_LOGO.jpgDmXф } R R R`]JFIF,,C     C   ;" }!1AQa"q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz w!1AQaq"2B #3Rbr $4%&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz ?S((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((MPIz7Q@ EPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEVu+M"[l!]Oq DAX|S Kk\M-I2<+y#=lE,:$_.1Og*h^ϧjhVR^jW}|RhVb˯?Qω1`->Ȟ}= ?U5w|s/:"[p=x0Ҕ\gg!)Iv^E'bSXh=S4+f<7eڂLb:hwh/f g]JlS?ڣ2zfE%mA,O^s~_OkVAP7^Eyb|U}2,-)ݞ~_uLOT]VdS+X3|N&_rԾ1=\ԖyCNWR NIw$_I ;UFGMffyw5xZzkGߴO+GDmVgQ"-ՠxT|.TVׇ6ld^!Za]xs e;Ke]SMu!}Z3Dx~^6xG _tWm<OiS1|ØaT_x;~/?n41ƞ,GaD~ǫ4kO주/I>,єk:/&]\4Kar#?C^,Ҭπ<#M9eER_zkgY 5;TcKec_Y+|1Ek?5'٩xWC5ӚOgRst}X{߆,}AEUuK=f> Itw #qVc] (Q@Q@Q@Q@Q@RZ+߷ρ~\i:2RH, mCt 6^T ?Rū!-;olWͰwߗc8jnVrϹE~,_}| \ߜ\OһA0Rx۫xHd}nҋ_wM_l9V'_uoUn!ҼBT[ZNމ6}M}H`9{q+(d/=kFQEt@QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQLT'WX@Yԓ_ Q xo55çH_W5|M,4yǷ^ͽcxF^>jF̗7h={é4Lt!Ӿ?3WcSVTkoaSfsMBcQɮ2?թ\_Anl^ʮY~ &oujtv[K_2{\-Wr曻?ji8x(ElI/ *ΟZXyu)w>G&q[6_$0? ?U޴BwjqoZ4כJw>uH<Ξ#*%}6%Bͽ{ >cin&_m)|{TP7Cwh2m?Jm ;u[ƨZN?o[φeF?ⓗ~FOߍ|5mbjV+t6Mos(/7'H5Eu mOs1HLdU۟_ l?"5~-¤8 *0yGV~Gj?Oύ!^}+qָsVk}^܏-QEc,5Pk8r^JIO?uj6w? ~L[fOu?PF+ʼe#"v| A3m5 1*d_èYw &3 (J_Q +ǟK "I#CF-,]~#x99 Ϗd'?Ze^ZesfF%FOɳ:*֥h_Oew$SȪi+|3on-Mo߂S-7Tx4@f8_DmXф } R R RU2l?-ZH x]~[+0Frӳ,2/W?I/_Gu~_ź/x5mT4RUGB;Zc狾kxS[Ү2_)Uuω46p^Gk!uDr@@wkiT&|_cWƬONɦ䶽KngkZhBx_o?-. U=8(ߴ ueq1G5#_j~" ƿM0Mwtڍ͌lω t]uAF1>s.κWƭ^yZwM~2| .;孯;Tu(eNdd s%/<;iu~:mRnxXc#\7~>j6Z&Y`bk %IF ʶ9R20WoZ_CKe&a n!a_89̭FydJf}[ _#(b^֜ѫ;/`sK_:~^ J;^:ٲ0}Սzq m\ i~j(0((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((+?|8ڷu%stcL$ ^MR~ښ.4=׼jˁh0Ydpӑ߸r{u߈> [ĺprxQUG ^-g/}9qiv_{OuO?iJbIegqqFk(ZywgV_2:`At_{ +>}z:EֳK`McTwf tվ'^ R`Oieg>ˁVхWŻSZwx|=OS{Ek'φO>.$&al*~$W?$7湗:NvydQƾ0iz&k ıF@+N ХU9g'ft)Z|vq~x3U|)  y`3H?ېMv4Vv-+|ƥiXogXc_1WqVHZʼ$9um+o_P i Wxl @Tu^Ov.п%vihY\!ta Utwzج3V7AӦݓWǢQExEPEPI;ɟPj|y;WndwI*A;i>"JUTon!c`U~Iwe>)bb{'WJ..VgӭRM;~?loxL741nTy|!ãU𾤳 6D*ppM~!WA_ |IkxoSJ-RhՇFSH ׵jm WWs,FԱ__r׽?wecAy:B[Zz7sа>^" 't&fV3' 55>Q[HQEQE>tşxy\m/JA_If] UhђN7ueM}IgFH5 fpH${o**? Q*rUĀ|Ύ$`)I?EѬ|;zeV:}K(T`(W˟R-gX>n{0V'SV+eΓו~(?/V->qexM#V?f;sXYO'_#Yjd~_՞G&}Ÿ)yS~ (|(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((+? }wI>3  g.'t^-q?mee}ltnBÿfqӠ$~}I$M|grކUP3{iIvtww=73Iqq3$V,O$ޢZU[iu2,P[y$rpTrI5ڶI7FD xWٵx6n$O(z)<澇`~%[ék|Im$=A*?8**03b~#|K,FӖΦuӲ{o߃DmXф } R R R 6&yg5)C[e \0)WgEr(_7|U[6+keoƃvaE|+2]T7)7uU??hO|2x_+=:K%><G.LKC]F-Oh}|?~&;^v&{(' =++]~WGAEON|!uygW'cK],O"QI?( tK? h~B[½4P?|'?w=t00H?${*[?O3U oYy;Q_D~2QEQE-:jP?P&aZ4Ri5fTe(IJ.>) _g.yAU)t/zizAhd?~]ü-yR|9SGyKKG <Ŀu!vDfK+~;0 =EsW])SNTM]?O)&D>#V,ݨJ~j}~ g>U~ yrVtFIk;X լ$"؁8c޽~yq/;y|OGO^}zD:ɊFeF?CC~j~߰ sæoA22&n?Pjq}b߇82ẉP5.{?O~kE~?? dW^7>trOxTu+I/d1Omp$VS58\j-:>%q&a%i//⏯u٭3Y\Eqo+QųWº10}y?eVu_"Mz4x3rvBOho~k^wrcp!Nco9S5~5HaqCIoG,W2}Ot!xE'R2>ǭ3ƞ fЯ'k9|4|+Iͳ+mpr8#/sIT㭈\zwN/SC '#z;_D A(oul~S uV c>tkA,"SJ*A?'뚷̶zKorơc#Wt˽◍S>=n$*ynԜ8J~a*ejQg53zu.]o ]}};OO]>'#,,|+􂼷l/m#6)&Gڵ-ˁeA좽J/ü.4՟qq:φ?᎗QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEa7wSVۛ4#J0!>|oS_4;ojnء9vBԂy Ak^{$fv'$y$پez}O;ൎs?O܋M}u~KX$y&ou&c&H"!==$_RTvWm]Xx7Sodo''dxkkW/lz!'y[KݿiۯMցq<^GkdՁqOԯCg+xmo:ƭ&pҷr4*/+f,I$y$W}ldh˸jv^K}Š(4P/ x~Ş!t]6qj1?G`?3YO_%_AO~Ua]؛t5Յ5Iu}2'W WgýšxgRc~H}15E~EF;#jURmݽ[ ((((~,<!Z|:'\+~ 0}BK[HU ~W/"_lmc;q*>Ts6rk7=5^;GU[S*ھĖ||wEWßEP]7^%Yu jFoE]}\QR2FznXEWMyGe=xxb l[b~G?c$kpGq_m~߷焤ěu +]rLY{r:}_Z%/RdjwOwnwG_=~ԿAirj6b-ƖR q}Z6W]\" 8teasV+ѧEtbM¤껦~:ÿ_x:|nd%Qz2aXu#O~VGXYmIZ2'#?~7NAc&c e#_O^~gOv^?o 3 Mtskڼj#5;@ O ߜ%̶wO 0t6*GBzb烪C滞pRbUX˺LajdOG5bqbp'Àw e SUiAxSk^OtQEny!_-~_;f/:j( !p0WZ+ xnEt_*qy..8gZ:_,k[/7 :\wA<,:2 Pk?R>0% bp~[eUd~OB𯌯t'"S[PDmXф } R R R0㨘"%݈kcprrN3t#K0]Zr_+YDU,˸9jsWJD}^n.F@}-gk_F%W.&K[p}rCq[z/*qSJr[/Oxw hxQ8f\KsҌ5/n=N+>&{*F2XbOhFY`Kxw^\j֦dž$=ܹVԤSx󀾾; >ijcaKݧg.~_=>7_ 6hrj, #*s-E~q^LMGRgUa2\,px(r?{}[}[ (\(|Q־tʫҕ -?r–kIw^Š(L((Fu?ڄj^L<Owꎇi%,]*:% 2HdE~?ss?\Þ"[Kg,tAJ>l4tZYoo$s(K3#jYE}5+h/ :8 Ωk yn`@?}+\nx:xĘ%'}WxXq3Ě Y|Xd^XwVwIN>V9$U쵭3 RzD{hyME5v[mR,ꄜaەcWoܖ^|p?Xmyu=:+#XdP")T!lմaEP (((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((o4cTiž=ȪIǩ8&We%+]K>4^ѮsxѶ ,A_CĮK]oŚ?Pqg"=@S\u~c<]w>/CpWO o?zo^35mХW|Ru3`Gxďiѡ-NmSs՛TgOχG4tFLW q)ovla8jIv?||P<ҵz˼c^e}T"PjZ+?ۋ'QhwA^"5; aػWѴȣHcXB"0>UJ4)FvH3 6:Qz% (<(((((-׺nu+},Ak_u4)q *,daW7 |g6M;Vǣ[ILyB}PgkJ8DŽߴW'G/(#(((ú?^gI}5ұP1FG+ XRU#տcG5ۯ3Ady潷 7ɳoj^GG\"7`cĺ7{K^2j?fsvVd5l~E/a<#cន5Z_Ue-Vk0kE-3:7FJZMw]c}DDžGLh$q]}UЊ+9EŸtqR VdMuOf~:hoMY50#|Yd2B;* |H|A|WZtCpFx6e%Oֿn<;~|C'ӵ+daB:؂+rlg]?G'VSzmJߤ}(x(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((+o)Ɔ=#ᾝqmG!VQKL־5+mM/&[{KXyc&5LG>,,>rL@,I Qr{gXcCGy~],fYW }fYzpQ]&xv[ʣ>L#O ?+9(vZWO Fu;F)$Ϲ?IЮ&隀{=%d_p%ÅDmXф } R R R@/#ǩh>ݚ z~Ӵ].Ӵtz$hT~B,&8Z1Cϳ*IV Ji_FGlpBܑ_>' +&Rl%UIZM&6:a[TxE;qkv??|3ᵖ?Po`+B((M?k{6>"˵,9KHMC_ >^UxSO\jwK QCҿp|9YxW@tm6o?4P? +2,7=W^[GE WO*)IfQ_p,Q@Q@Q@Q@Q@Q@|g*? Gý;V0nMQZHdo;2Ҿ(x#GN/jP ?yFFiX>K_M |6ծ1jŮt#qү?'~WRU:?!0o^5GR_ˮj^o2[H}ю/_e}P5(O!~V ď nP?.fo'P>#|yu"+Io xk8>]CKSGK6&}۞]ω&xŖ[Jħl'?xK#S_C*ce5vxIjg]OGխu"Sn, K%^ea_'}Q#(+4QE2B((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((_>OZ^& nat 1+/VժW|I)tk|ڿJGO)Y^CEZu}o|?-w c|![m3]}zqa5Lw3N5+K H{Rb^@P>E_OxRiLH]`I/Y񮼓khlµ~ͣk'5 cR g;cYQ_ۻ?*1VH(EQ@V+vBn/#zT~$i6쉔I#&7ϮHΗi?\Ov_ >v;L:e(Ǜ!񮾿Q}zQ>ͫcohEhߛaEWqEPEPESZLT_"}p? =,izA@CԟPWşů~!КG3J>hSWxsZuZwYOЃ_ὕk?<02^I"Q_:~QEQEQE^k6:;Η62+O_ ?Mo큸O? _Uwѳu+ՏUfAWcc}K5_O?;$YSk5} O qo--?L4Dbs_her<iC׈|+{fa-V+챸u*]^޽1v^5^v? (ƕsj׺mF 9h:1VAucVџޱRgKj^Gq6햄:hjw|I':5Ļ, eY^EhULEW~nQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQHX-ѽ?:uѽ?:uѽ?:u҆@ EPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEp@d8` Ih6h?R,h6h?QtYh?Qi?0Er˱fi?0Rq|RLu⋃[J(!EPEPEPEPEPEPEPEPEPEPEPEPEPEPTu^-y'geo%DR jx'3٫o]Τsk+R&O,K1P^J1ݿ[ƾ'5^j^Ip9b>8Z(ɛrwgNN +/D}|8?hx7եr~>cM~WK 7^)tmR,ab9]ďb+<)=$OԤI(/]D7wQXs<I*I~j?&ToVꐏ%T~mA?g/ Uۜ1¿+PjCo 2 kY>H-eࢊ+@((.{[7ma܀Mز4i]QP2Ic)h2#e&@ ڟDooS{G_OČ+&JvtQE~Q@Q@Q@ wX*$_~nmv? hc׊ ^oi?x.i*0]k/qZ4,?&ў_AQR;4~*xڸ*6_FAEVǘQEQE ?oK_XL,yR07.;B>4|״Ha7~$(}K' 4ZT}gY*v/r_4S 1V08 gQEQEQEWc{ >'kV峦^*xD!ek2pwF5Jt*I?}/,m-eY#YbC =5b ~ ^id/4pD9Ǖ/!4U(]U3-Tޜ~k?%?o_6{~]aMV<}K7 W͕S>~kŐǙ洙ʙz`~uQ?82yA'yAr?wE?/C:>dnȯ!9vDmXф } R R RPR&4^;h#e?%_1|2$̹Ҍd[,߶\Nß^`a'%u8'4QE}QEQEQEQEQE k-[Dg$p8c?_]%]䥥83v"6<瑟ʟ_>?2&vt,܈Tg!#u\⼌veK^g|/X&Q]_ܗ~_|-ŗjq,# g`sEa_0x Y?\Ɖgr_*Zk_P5G5/(_ wʿ= _/Q w+(5?Gm4έ/\ 5^|NA#?2o)4d(TVbƣO dxE'?VKqX,u?9_Z1uQ_QZ^AZsk4w6x剃#A_?]OqGTIDraaLgo8' Qīȸª3I?%- |wz˅!.i&3EDp{jEN5liaq]z4Š(9(Ofzփϥjɻ}&먕}Ոk+MSYd5Ɍn8jo#r`5tM=Z3o-w՟kk(̾[?l#>/B( Y{F>[,jjϋP 4V|^Q(Vw?=_-w}ڏ㗷' ;tZr锇]>ۧ4;G"0et8*GB ua z|ͮ͞u9Vqэ9tbO]_[3&}"*Mg9>/"K}QExEPEPEP_P.,1:ܩ?/*_N_^^iSꏽDaۚ.ۚ.Q4n{8*/nj_4nj_5F.A GA Th{8*/nj_5Q4ihHX=k  }%ğ/W~q w??M袊0 (?.m>?#+C񦽤i%Q(uLU`I$^ W7o?^}x$5~cQbj%'>g? *. s(]}z74_()UxU4Wge? ohQSy?*FO hgi7mYQQg~_>\\ʣM*#W1Gz?~%O,/sߊz E_Y[8$yXt:qnV *&YV+:[||KtE ?9녢mS}v |_w_>%BOn??||KuG||KtE ?9녢mS/E ?9Ɵ➭megȰZ< @y}>p>)0Bøʽ=*e5ل|]eJ2~z쏜 VW}Luz0HUI+ƹᖟc{QnGu BK.FQ' 'zWTB;#OWmEevAEV QEQEQEWŸT|ᴓ庻TOus0~X﷗# gRiA[-N;O A^sj+ջ߷Y/49ALgF+溒y乚IvY;'I^vܫ.hh4◯wwog }y?xWO1¬JC_ mq-S#E4LXc_ň4_I?N;F=WXh.z_$ug'W_$zmQ_X>Q@Q@h?!n?*} } R R R` 1txbU1:jrZAhuK= c_=7g Z3Y6 Qh1+f60VĴ\_x1Ln2 #O,Dz %0?SX_?7QUx7:PO2a=+Leܘkb}mbdC4mFhRxc:Ə6|>kG]O+)tw&E?1ʨ~YzHg?yZs^pO38a^MxWό ӟV&+Hsƃ۹NI\ W擜IN8l5QU[$QEAQEQEQEQEQEQEQEQEQEQEzZZxB wdDWp=A'Vs_t>=[̤1A O .Ď#9`M>g}Qt**3~~7/ 5K2GݾVnk?Q袊(+MSYd5|{ɪx/,#xgGOKG%Q_EPEPEP7evmuM xR9Ml :T^GgZ|G֤q­<ǯt'#uE SU)yf+',k}QEQ@Q@|EK{ $EWQ%&2?7 ( (  }%ğ/W?Kg?_J O-||G;z(M?B(NI!koNI!ko_??%Q\G҅Q@Q@b/x޿Nk }%_/K6s_d՟^'E? (p(((( E' o_,WR/8Mzb/?zAq(<ࢊ((_'? kf)r*e՚#tCOGQE_T.^z/)ӪrMx9GEO>;+((+ Qӿ~~W=%+2|&~o/sND(⠢(((G} t;\\\kRFܤz8>÷^kϏ4_ u__lxɱcsriǵ~-xĺ|C뚽jzqq;wcg:*~Yo>kbcOHnˢ+OТ((ig^_JAo䑈 z@+)();$zg:Pʃ?*I쮉sGҴh(R!5*`+Y m4˯^bVA2b>?AXװf ꔯ/[[\P0qqJ>}n (P((((?k\q0l7ZB5_ܯm? |VtTW?Hhχ֛wա##}in|9)s??z,$yݯ -9+HNijv~utrFOv?ri#㦾|QuݺQ(j/gYrj r瓓j+BcR_rQE@QEW~ _Ooqfӌj 3w1jc6y+iH ?jk˰ZFe_Տ, &I{>ʂ(c5 @E~ nQEQEQE+ 773O w"+#wl~?׼U]. gFQE~ė0&js FK?ŏҾc^%h?2袊c+O&G|wx}Z Dž~`?ߌ|WZ=QkdNu:0aQ#%w aekGKX#g/i=R.s#C>K_JIIlzBTV[MvkF(2 ( (#X&eE(*F#?K<1Al#m'=}T|[.= XBqmzTrֲ7O9{|?::o\/8XZ}?4袊 ( ( (;?x_`Ei3U ชTbXv n~5McG0JiR૮kke_4?Gi/vc.o(nsZn>gi>}q ]9o?ў3ԺJԣl/?i\n%{SFïXLaZLV#-j_|Z?q(QEQEQEQEp_#/o>)VTOٱѧl$@eK湸g2I#19$*x>nQ}L ?)c?~g絜 HH-(5zݎ (l(((((((((((*k+ɴ.hn u9Pᑁ *(I3oD*|B'E~IT{VWƟL?6>ɤj~j~Su> } R R Rm@@ | q.TxT{?.YNqEZ1^ ( T_Y }_>~j3zK!x*/uu>xSNW֏/uoهh*zGLm<S5=*Rgn;q3b84S+S(+/*_N__n_T' *Χꏾ?)0IEWQEQEWK-$~O(8[(DmXф } R R Rp{-+BJ( }%_/K6s_K."z_)Ӛ %t^:;J)QEQ@Q@Q@Q@R/8Mzbǿm~aS՟#" {QEyQ@Q@R8?!U_5MW_-~?_?(? rM~W/K^Jn+ο?XJ(Q_ءEPEP_Jk@/;\ױ3۟r'tQE~Q@Q@#0U$&M~<<\/dl5*_ Wd{9>U_:Ra7eտ$>AhcsiW>g4{k-专8|eAqhE~]^Y.pЂߛz0+ ( ( t~͞Tc⟈m~v rs~UGRhl$~u]'b#h;k3L-tm6;[+X vhP;9.K5o^/)l$yQ{t>RQ_n-Q@Q@Q@Q@Q@t+D%'&MR~7?JL5{5||45C_X4ߴ=ˑr/_'Lm}zܻ\]?SN2|=k\gw piWNt_F7~h}||?0i`=r5=H)JG({v>$]\^nVn⍎|GP(+؏b%SOCrepVy헒AEWEPw4sНOM z }c= 8).xԱϹV$82,a_FkVzsey \A2Vk\O쥼./'vl׹]__ߣlEWПQ@Q@d64ƫq JKYJzx=kQIՙpNjM+ {[Rݛ(?+fR=j|&GjEGPL.~Iaz6-at[zt?k8{Q/J_ɠ+p((GQ_? .ZWgcFr}I ~N6߁V ~Ε|?J~y/#)\ t w'ӯ_? Cnqk?=ۈb_ncm zg"­? nJ>~$뚔דޥKMOJu~EPEPEPEP7Ty|q}8?,Wõgqyk:4wT V6QEygQ@Q@ad$ie 1=~~i^(d2`0Z''nW>JkGxo d W'亷> ¯|@#~յ_%"X wuT<0"%ecmEkioJ8a@:T0)%ͷo'؏q ?mrGG1u//.c __]~Z`ar[ͿMAԿ憎?3ЃQu/EE oKe 52Ll ٯٚ( =?? a?dxѾFkk mR[[xfRC:GSx#ھ#` 3U/|Si*e܁0z_3T:/.qx+G .Z)'xU-{y^)Q VF*GPE2`p(((_%xzp?r=FQ ~- N?u__d84. Z_Yx×FN`rLW1E P@#^]K;=`_?7.oiNA{yv}?ܪ+~s\ˈl(ޠVG_q8;bUEqviQEg(W_T' *ݯO|a9UyYOO}Ra=_#z((([pC`Vk '!ZY2?O?~9Q_@~<Aқ:_*/ؽW?T~P#(=?B((@/;\~*?_wc(}g"1?O袊 * ( (9ψ~<Ҿx+W>7?碢1 gnau1e5U{'k( sDݨI|cg?-kJ?v?\xm?X,L}Yin~VŠ(?e ( ( 4kv:Fk%}2[2;(u~͟6◈mqytqʯ;!w`VT_$|gxw.6+^_g߳W ltDsjbSQ_a׫QE~NiAB ]l~"xD6~oӰQEQEQEQEQEQE#}_o~(KV__&U5;_) tߛ?|!/Ob p!PK̉Z>}j?a|98vp}J*G[M1_OW xFM\º % #pJ{++:Su#>3UoOm'Y|ﶞHN}UJ"j-)EIlŠ(PUFaim)v >_^8>gV7o<50+Oet7kyEg9_H =?<0+yiyxskg1Q^}nh ( ( Hr`$~Q?39&3ﴇO`ֿ-d_ U[;Rˆ$ o>}kq?UOg'KVCߏz|׫GAࢊ(((N(жeWL>hO_zƓwj׺e-m}g3 )_Us?GŨ<[c/љ%*>T ܥܗp";?~Nw|]Lj{ZuO袊((U_? mcVjD 4 5]Z/3$)f:챵!(Xz0+~:ԗ:U(`uRz\ h-5ɋ@CfԊ"֡~gi=3 ^x턷vS<,矹-9?+>jBn|oɓP\}dQXU|~6Yo|:kq^g6jG-ɟkGҖqK_pQEQEQEQEC/4X1`%WƕgS'0XQErQEQE}})oω70mg58^*{1C_?>! a0.[%Ӌ{&~_B}CGG Z_s?^#9}3J+z??R׿?K^/?}^b~1Yq5:??Q򼞞gٍlͨ8Qoy{yuݰ> >ҟ(uboLm+G ?Q_ J~Τg٦Uc[V0qYhV ~Vgي8ͱ?XĴ?>?XJJ /Ű+?K ( ( :QE~~?n| ^7Zqn9f(!ܛI=7{~Q>~0¹y?V*܂L $Oj]ҲOpou?8$Ϊ {{QEQ@Q@xq|g!i6Śhc<`Ժ٨YUt*تx҃R_'\e*H#pE%{MYm`]o:хPl;)_Z)P*r3-0t>5~aEV'QEz'G_iĺի?H~/'G ,7Gi7%D# ^i>?|YŪ2dWqAI|@ݻ?WV6s8aw=DmXф } R R RS;#w@5=vOX&ϝ^Mvܱu;S|"9c1xc;M{__oӞ۸EvGʉA^)_X5|8uQ++Hm$`~NߑbiqF#2jr_6~EQEQEQEQE~fPcK母+*?  |~eT?8IVQEy܅Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@g.G_~y/g񿉿Q ? +?* T_Y }_>~j3zK!k  |Qiẅ~9+,ΛWSqpq y_@+>(((?ď1o]r4==q>^g/kI,7vk)AehxE% OpOTuqXXJOwʮZ՟]>*'?qW>9|EmԾ8}_󏊿 |UO?_"G/~0R{]>*'?RߋWqlÖM,d'_'QKG)poE`7t~)=h[xB!t>RR :QMSTp"E$QEAQEQEQE}$_6zO4@7_-eX7qi3Kʣ_r=7 o/WQ 1 ( _*/ؽW~bPxw 䢇'EQEQEQEQEQEQEQEQEQEC?ZUԢ)*`i:=^gI~=|I[=R&9-r}7|WսVG10ơ4Pt%Z-{'qOba%I^]#>weԒ(?Š(((((((Q<3$-|W@f<|g5x#̹R=N.3p\߳%yٍ/k+ڟe ]9_|+|e mE|X-wL$s^=S̺]_B ʙv=FOܯp}-+<vt'}^9zxC/:ٛU3BD݊mW5g[I~Znby#·Q_){r_!(7oO/Ə~k&?N{d %Vj~RabB +O6ڽ^f]Bb c'i/m }5Q[ioƱCHaU@v%~BpJ;# 6jFߢJQEny!EPEP^iFW0X#wz)K)H|s}Z ৆~U?FA;Wb~/W\N^}Q^ ޟcu̷2O#K4]sf'$梢J ((((k;.ặHCF ؃_?X~3!wc_gr,`Ha_7P+5{c?z׿b}#ٽϧxi[Rn|#+((( G98 =qncbI.M/HJ~^1zΪt紅ȒlB{ ?~,WOǣJo &'`>T+O53ʼW~`$&KZou~*A_K ox{}>ج_u x3٧&HT˩39X2J\/M~7?*)VQ{IOh< ( ( ( (?3?X1`%Wƕ_K?>jҿ2*zܜ$? (B((((((((((((_W|U`C]]WKyjA뤕kQ^QEPEP_c/x? _l'DO'qQoEWQEW†;Z B]R81"G Fe8 +Y&OiV|19Zlg&Hr`>|{rK?<*FL;懭I5+EgQEQEQEQEQEQEQEQEQEQEQETVS7Z[D"QrI+o'7ڟ-O n/:=Dc OC]Xl<5cJ=O;ͨdy}\}wV藫3o|? >gj퓣\9/)q`+ШS8GeTW&ܟwaEU_T.^z/)ӪrMx9GEO>;+(((((((((Tttkhu*῵ݗG$ (~m_:o˧>h}0}v~:퇉K_KK:d*Gk<EOGOFxrօDmXф } R R RRԀHXwJrMi}ӣ/EQ@Q@Q@Q@Q@Q@Q@Qoh]~mFJRj̨E٣oƾW5 ]iwY2ѹR~Z 1ߎ۶l%݂LG(#wMB>@2L9[C߯UwGOq˱ף}&\79 dD_: 5RfUꎤ#@o_m~*|46gE9De+2>~k*t43H-&%_zo:21__7#㯊t8t7 // ~WğSO۞ ѼeAe|967d8s?s˯8Ynt]rrJ?&6mlV6~@ڞҲX]}K,cQZuw~j֖M/7vOYaC}1VR2>O"e|V23_W~_eҮ5 Ӧ r36X}1^ ~qe8g;+ꟳ3k㗅t "l кqxw~+{ z;6jl4aȷFfl/gt/qpL%;MXZ/Y| -|U>!U :]<>We%Kd ѣ4x2.ZS_6cUukJS=q4س$:W^@rVS^-_kxK×>/NY.N+8F3Gk_ú%t 7HO.;XSG~Z;mfxxnqY:[hҕWŜW(ezR߬$aEWQ@Q@Q@Q@T?,~J/ %_5|i_f=ONsՅQ^a!EPEPE},~zεXMu4F6'?z: %jYN*Hg,S ^rSi̺+yo5G: %jv_y7?~e_χ3x[?ןf/Tb;/?&̺+yo5G: %j\geDE~ï>_oƨ^|;ĿQß_?2OuÿK-χ3x[?qxs~Kg]UCGkhֵ}{6U]y5L,]Ϲɳ} QErQEQEJ|U__K+*!W}~V%O (򠯟?o5Oeu&? `?-QE~V|Q@Q@Q@d~_zQ&->:/kt*?募uNi<ѭש1 F4+UqYF}[,R~s;>Vh͍43[̅^7SVAVk=O}Ǎ|!h X]Y1zok hd9Q8R:;WU9%G$. bhi5/OEW}pQEQEQEQEQEQEWK-$~O(8[xAbim\,5$B"<202OW_ş^x]ZIE2afIcaAcX$׼%1ka: Ͽ<`W<+u)+3 S% JӲ|o+?[ ( ( ( ( ( ( ( ( ( (fاſ.uMR)7CAn۲WvZ[E}C>G Q>G W_1_;i0G;i0G1_OGW?__| ~ k6ei]NwpAVpը$=<u撔0XkVӲ2=((?W#,׮G/q+t<.1 u{-SMP.-"8hR >]LLX|EQ [?MƊ٣㕗υ~-V!mNv[_c׫F%Vb'Gpm5濭(0((((((((W³sk6fzcg@6uC_mz}+qgu4N2e>+_;|C;,Jl D>#|V}k?_o9UX>hO_x/ yntw߾ciX 2l`?cڿ=+7*Ŗ[ħt'?k~N}Ը&YQ[kKU?r>s]["};R{YӾR g DmXф } R R R+e(Bf ~!gkKnB.m^F'‰պe_g_콨|7sVnFdey=M;Wܴ-sapSp^74zVQEu>QEQESV-t=.Qm!y4U,}պ/ 1oQxR}0S%`D{oJXj2.u3Ǝv[Wgw߉_>)xŗEcob~X@+NrݟXza$쒲>/ªw?x .q«1Kgvz'WBUpA/gh)k$"Z"0G&Xyt~'%J9%bjZ+p((((((((( o?\>#XAou" •፷~"U{cy\qD϶GzF4˝Sak{I^ qGRUΰƿ[KgYS*ߠn> <|Qދm%7_jw WU ?,<Ú\~]k@!T ԓOrM|k.}/W)wVE`WOcGIk/ O@pLϓ'A9=XcCGy~]ȏ 7_wC_Y^w8z({ϋ5먼K`u?Ǵz>kZe+oeg[HBU[EaF,2oVޤ]YQ]QEQEQEQE~fPcK母+*?  |~eT?8IVQEy܅Q@Q@_N6;}9_1:4]u~u,7K (ϓ ( ( ( (>_ɵJB5C_Q6 ZF(k3S¿KKQEAEPEPK+*!W}~h.G_KYoou?(Oʂ|y~BQEYQEQEQE~~1áP3¦*w\n Y(z/=G|~!~_S o?&/q2]ҎLG͝rRuXjxnOc#|?7[]Sz fďX13k:U=Z5t3k\VSs'࣌=k_TVEW!AEPEPEPEPEP_c/x? _l'DO'qQoEWQEQETs/ ѬH]eX#(6.b||:4ZLla]Z?k:~+QHO]U}LrKWpl~e1TWAtnAֿg/ClʤΰNj5a G_XG1>}?i~ ?W~*kW?]_ekshm_?_@Kwg>s%[\FvRWSAT5_ +k*P?8ĵnxVtQEQEQEX[l;! `dOwW9 ].j={~VG;YoC.0㺜/uS WrJ>+е M9>V ]@(=zO o?? a,i}0h◊dMpl7s8 ,K],<]&׋)'~ d6f<0ՑL@>_q5 *+ޣB?7IW"}EWPQEW?QOٿMnkScDl8Y:9Eum $J$E `PGjaOϠsaO;?_?xgM;(WV-srB ꄁORk ԧB5?r} O5uO=QEQ@Q@ ~Roqy+1b!S?$zI>Xw[k-⸂D TZGiKL[luVV5Y↓ѯ̐[8x[#`qڗ?LǗc(GUSos+B((($($~5׿s|q5Kyſ2F]=+o ^-V >dj mNM|v}8x$U[%(0+&E>%&}-0HznPW^Snm >;yGȌO+ ]Fu<*嵰>/~Q\¿_*>h>[xϺe>⺺R2Svg5j50eFkZ4QEQQEQEQEQEQEQEQEQEWb˿?waO(uZ!h&Pc)(;KHR ac@ ztW#cf6XDYb <f {g'kR8=i7[Q6R32}ѫ?<>'xXF/w <:*/z\~c<]wSOC(pWO=[/$CK%jPm;K?咶f}X*Οů:/4&QFdV/#{*cۏxKN'4i046-NTc'Ԟ$L/h`ʨ~s3f(?B(((((*?  |}C/4̳?ʞDmXф } R R RZF(of'9Š(0(( &ѧBC+?'WFa pş>~aEWyaEPEPEPEPQ6 ZF(k{ 3&ya+_ |y]W" ~Q (x((? u%w_?>*/%C׫?MaQ^PWϟ޲k:T_Y qjG0?J(+?(()GQ@!?<uWb?+ ]~KqG;+?KaEVEC+ # cuyuYk¿P?'N::QmFXePF <A pc0pSc8o\5X>zJ=$t}=.=?!|$G`K i1VyXyo+j'Zk)p }Mtk(=p(((([ V_^K^Y|AҼ'~?LEx_%Q\QEQE{1'QouW-~=~u_I5~?uG/.aEWҟQ@Q@Q@Q@Q@~bPxwN %ÿ/E7_xc%??(OP((?%G{K{NW5_Jk?aLb9(H?((3 j> <>Mʃ%Xu|W7;:ڽa;A N]|5tZu z1/28IܧFg9C{?oӊ?_8~[3-mݟQE|)\QEQEoj]xD6ڞ: úGpH*)[ԧ Е:j={}+OÝ#zK2K_W%~ \DJ$nYd0=A e4} ,:l|BxR__`{1*GocKxkL~[;7 +hW ~kaL)^VO^i`H*FAko /:݌[t['zRO5~ U%Vybrt8ד(<(?~x.ksm-._cA>Nq9l.20U6^m?P~5IiF@*$;}A ޾\/&/'I$sv'$ܒjZX.2Y>^QEzEP7k|8戝SMfA;ioEOeuҼǛ eO~hŧt{Re.`:?/?|3'I,_=wW&?"C-Ω.Y~Hr}1z4^?wq2%Ln&V/6^g?N'|@m|g^%H46Y7ʨⴂ8ab5ªI_aҍ(?3޾yUoEtKQExAEPEPEPEPEPgK?>jҾcG_WYOSaEW}QEQEhӿ!wӕMN_NW8Z~c0+0(((((]#_5kk<z^?+(Q_<~QEQE}~J|U__k՟&GS0(t+MSYd5|{ɪx/,#xgGOKG%Q_EPEPJ:JU@ cA?ZW;<O!-tU?zn-QyaEV QEC]дhViyC=$F e=C}1R[j]Jv?]^ xgPc_Db Gv G Eyx 1]>*p/>|q.g_Ѭ~26_xfL^Ɏr=iN:ڸv2C4&[5хQYEPEPEP_c/x? _l'DO'qQoEWQEQEQEQEQEQEY|AҼkaYy-~O<_/J (d((cNI&Zz?< ].jݥ/-z_\Š(? ( ( ( ( ( rM~W/K^Jn+ο?XJ(Q_ءEPEP_Jk@/;\ױ3۟r'tQE~Q@Q@Cygi=)qm:4r*WR0TqNtgN'o jH  {xe~ uQQ6{(;O%[ُp+^<)ڭjV3ż ~i^hv[yy 2e^_e/.QEW~QEQE/JWh[?n|z%FZ+1O-_|xHbgBx&e8=@O/<e?~eå-?r>8Ҿ$7I6?4J&;2T+I)-;VT+J.=[*Š((((((_t_/ ̾e\ƒEgwRýwTN +t5pu.YŦEz?j~׭ZT1H{ {+oSZ㧄;t_i1nFa&>JВ8 Hkk \$RVFy?,^_g q5&*ʬt{>Nyjvs-4WYHAItQrq"T>~__xw?]xw?]X + ~aAP{E~!C|StC|Stol?c*s?oh/hoR Qo2M_ɵJB5C_Q6 ZF(k3S¿KKQEAEPEPK+*!W}~h.G_KYoou?(Oʂ|y~BQEYQEQE֒}~'M0YO+Zv! үףVOͅQTbQEQEr>?ً:q ) ^".kВ$٦QEAQEQE?Kg?_J +%ؿ'A^[O7wQE~ Q@Q@Q@Q@Q@Q@ +kֿk/9?Wg ȯ ^+B((y?< ].jǯcNI&Z_ץ(S (((((_*/ؽW~bPxw 䢇'EQEQEi?+ Qӿ{G>?7IW"}EWPQEQEQEWQٿWO\Z"ŭ$CǪS_vT6ŝ)skqE,2daHrbt Ϣ3?SP_.ϡE{oi>|qcnԷ]i7 $ ҕsZi0Ҽ&lFQEdwQ@Q@g;hBV˭..:I{e~"^=b?6|-glu˦jR !Ђ2<H5+6=/P05<ϧ]9z:"ޕz]Mc}m" ͻ7! [q0Su]O+xK~ZX3['>]:tWĿcītovGO'eX:RH#~CgY; ļ.:}I._<F u8Pjg=U:%_edA< Mx'5%PAk-1[ʥ$U `Jq}Ϧ7xqIJg^]Oz+^37+\%>E +OkoT43syܕrw~Ӻx*ja-%uW8j(Š(((((((+a__OAX nvAUS|WfpjQݷdl+>~7{m:luz>89o|BƙV#p8^M}eeoCkivРH"(ҾJV'Eۯϱ?xB$\vv^OgV`5L O5R3INdf3W'79veZtKN1k46hl#g#p[|jkwoj1kK-B##_?9X/A]jZRgrH17+û˿o'\\{?8-6r-^|mD5C_?<Bn?Rx4_.4`ItC &,__p^%G:4]uQ=;Kg[iK-!X;T^t(Ɠwc5*'+v( ( ( ( (>`ɵJB5CkXдY=WOԭ 0]²#*OЛ&wK[کKl~<}G灩s|WRKtcуkG'M?YG*OЛ&~}^%Gv*OЛ&T7@d?M"/? } >tRx4¤?  !hW?/ |]WKCO|1q$>SȻ[+Hf\mW`p ERn\UC9cM4EW|WϿ? j:eg%7c|r2+ԥNk=L} c28Zv } OݟV_F?[xK}"k??/ k? CFkgWѿ/&V_F?OmѴm/oWѿ/&~}C"i4Sx=k_Wѿ/&7E~~C"gLm ZK_f47vQE(((A]TU` &fKYqe=~=Jm|&GfzIPXr ֯*53\udi*e`TG-X)5Gχf .ڸ>_5E~ñ_?)?|&/ڿ(pO~]__OA(c*21G&/"4'UAdbv?¯  bb/?(pO~]K-$~O()?zGu k7WvfDn"G$Nrۂq414sx 4,3 нy9?]?$k Qӿ{_; ן3I=>+J>kכs$ۼ1c{tCb#VmY_oF!Ş 9M[/jsKIFOi>QE}qQEQEQEQEyO+. a:Y/PvuV9~3jI$lf{{y p"{&q+I-7%$8%5.W{50){Zm.krw׫?67OF+G߅ ?'!@/?~=6/Q@?G?0C_ =Q*{Jm_+}`{Q5>("I.ڕ{f#pGbko+G߅ yMNlחBiGnе:r})qoqULXbx~{j<˕m(dQ@Q@Q@Q@Q@Q@Q@ ־#aX`6wjk3_葀xz"zF0{+/g܃x)Y]$5[{ a1UсAE_'W|u\|ƪaq 8 #`^=}^%#hlEnw~4ો8Y/!7+xO&yu _+<*3Lje^Dzu*F&qG3އ[V4- o e^,SwG H',0q*49 $^)9Ipd!cp{ꏀ j𮙤ȣhӑ+eknAyii 黿h| <1a̓ofwDmXф } R R R"9A>=k@<3Ci}a+h=U+ahᕩFs|<̳Yϲ{/H^ҧFJӠb1+'Ҵt~Z ^:em3sG F.'uKvcTwb@ਹ;E]ԫ 0u*F+Vމ/6b[[M{qO6h 4)@d=VIC'pp-~{׼jW"`$rջ>Fs}]*VZ]|.4X,'Trh{%t0((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((ri>)Vh&,%ͫlp2 wTNt5c_7TӳGxLQ?|$խ#9{ dk(S,Z?%TWg7kmxDu wA;_)( JzXqBjQ{4Genw"C6?e_C:!)մa#ܫeEv،/ng<-gɼmI}Gu~=࿊?j5 \Mn6ï k+OnȮnfx$(}CE}cmj?Xgc36?"LXjZo5~k.&s멯垏Z?'~p·W{0;k柈ſ $kx^<3 a"sggo=Vz*~~#PYA~/Nlmk: MʍWX# Xu;b[n;C#,y5Z{׫%ʾ~Ǔ]`Z%Ŀ3Śެţl.z袾zR4 =-5FbI$|4G~.u[2HI! {fBg'gϏezaT/'w0Zw{)nWðZz!dyy\xg ?2߼?^}Q9O +jo0)Œ(C vФQ"(UD @aOepjYw.qcĒp(O?òAEW|QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEo h4ҵ.WӦ%qƏ&v}[vcl[`Q_sQ\x%RXϯ}O9CSYu[;Cͯ=w)mo/Up鶚wְLd0ЩHV >7d3%' ~x<ڋhw_.czWoۍcb#o\Y|\UOpvjk~ɗgfml"3O_z0袊=CH\3Rӧv5 עh?'uwmr&+XUO^`pQ揣4(_[Mj] *%)|Eu,~*;TyT{^ůa"$AGgc?ʬ$+JOM|e݅D } R R R}}mFd^bQz ~?l_7ȟwGUygSJ%@C~5kL^ Cn`?~[G )uoI/י7vڦ{AO^_%nq}|^2-_?]ꢻi8o1~#*5b|YDZ}bWF>_;^٤~ecmZG b~WhRTU/D|&33f2VG7Q[`QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQE5JN R a-z|barrow_ico.gif1 L R R RLL&v4`GIF89a!,# 2Ddtmjrj;7g  R0xf!banner_left.gifs R R RhzGIF89a'I{f!,'z H*\ȰÇ#JHŋ3jȱǏ CIɓ(S\ɲ˗0cʜI͛8sɳϟ@ JѣH*]ʴӧPJJիXjʵׯ`ÊKٳh ;>K  Rg &Ibanner_left_curve2.gifW[i R R R w GIF89a/,8<#'9MS{CUZ!򴻽 ꋛ^banner_right_top_curve.gifq R R Rqqhn3GIF89a F g})>E!Kck{%7?FZ`ߟaxZov7U^!%ٺ!, F'di^gۮ+:5{y󽟫F1D2G')J?*n]7&eYfm{qY@}~{z-.-'R5~1W6W'&% # "DEO RL IL ?IB ;3 >7-2':% a00AD0B;3 R ʝ.|;favicon.ico&W~ R R R~~2IP h(  H00HHHHHH00HHHHHH0000HHHH00HHHHHHHHHHHHHHH000000HHHHHH0000000000HHHHHHHHHHHH00000000HHHHHHHHHH00HHHH00HHHHHHHHg0x> R`=4Glogo.gif j< R R R BOQFGIF89aJ~BZ꫊T t3=a:rAAώᬱzqikӯAΡ#eM)ǚt˖ǴY|]ԾiBq-Ueւ4굛mMPh֮콦`x8z]eҜ­xQһğ㵺Hq,{<&ɏ~Ti!}۴H}EYUӰZanN҇ݥl&2z|X~hF1+\j$n(` aw\^WLyסq}j&l&ŷu:/Ob,GbDϟo)PQ|>{?o+JI`KkgPOMvl7ֆ_P!_ĸo[@JCP J+^hz.ٙamF ITĕTt,0X %2.-ar(PA6xσ16$ TcTHu< D%Tt+ Uֹbc瞃M @'TP"Q7ml x?A(*{VgBVO, @&a?z1n#P)>:>Y "&(?7Í { O Qd@vu @@&8h/*LRpр?XƨA SʻI#)S* 6cϳ+60 ur̒(* )Æh!?#QF%C *@R@Ɉb9, بX1?|<\"I>V+L& I`J IvX j< FHY*r/r?0zk%$P$ 6&c-ɈlG0~g SE3 #HH8A-a l q#+?GA}*`7<{ !  Q% L@ڐ[]|@ }kχa?P4``@mpa(5.w GHF.:O><=EOӫZ؋2t{8Gc"_T}؏BL" -k ހ ^AXgc` E B,e"9` IPACLf"U'ǰҕʌfH$@,߀ @B^H/. >A i*aleݙ\CԆ,pr>A4󠅄'M2G T7 DMBuyR1IkBC"#U MzEhDȜ&d R K eTԃ u,3`f4*SN0\"U~TU0dMj[ f4:Cՙq`CW\uugarXE=`Cj@ =.2f/HJV| 野"RdU>S6Ӱ%k'+ZъԀ|d=-Zӆp!DV>Y0NX16DX=q904[V̬4{7|!EFC6DkpB̮Eۣ ! "fB_3P|LhË`\h̦f]O A.~]Y2r]^P &}u{$P{sG| jsi,,G r&"O/itNPv-S*%stvT'!/$*n"!-".L.DD'G"]HFÑFRLA;2v7P R Anet_up.gifSp R R Rppl85КGIF89ap,``` hhhPPPtxt8H8H(mxm06H6Q`QP  h ipi@@@@x0 H zz8((8(JXJxxxHHH@pH,ri0tJE(x^c:t$"#QCG4ԝ· 2||1.P!|NG$u*::G()t*+O80O"1S "T3*5u.o+*;+'B @H(SN:)3K)Ff? :TP&=d[%[A5jL-$Ele \Xǖp`7 .Hwf@XL1 n CFU Ai&ȁ t :4cz%AmX`FO4i($WC!GwСWn tXΝͅ ?m"Պ3ȷFR6}H?ޏ[?0I?#$l 4 =FHO=VX=\h@lD%qψ#qpĊBсts% aC\ώtx !d>DId7EaM r qZ—!e8cf8ci8Or3vީg0 'I(?c( (BڨCVZB O91?%@Ъ 'a9|Qѭ: G1"2I%$(0L2cLDNTPh1 @ )(Sn ɜK )X`eV־nE3vF^ W!~aFXb c 40 W iF;YVC4ZD 0[mI4o¡aqQ ռ\u\t`Ѳ5אЃ|_g$_ݢhCɃJhHb*%0v`8"=bCbRE6iON /&Ft饗`~Kxqm8.'uzg~( zLJBZ6ߏ'x2L9V*Ae`Nt+( [(RL~ԬL1e@:D Tq-ENI @d]20/ze,c2|aqFE/} 1 cfXTcf24AY T3eYll@3 g9 ΂39AQE:khZa2>-P\M<^kX'BQД` x hcZ&JiJҔlaJV` .(^-H@X兴ch[@B_]Ea 41XrHi@{X%"5D(f7"o3j8"rjxQ:H,,0G@ AiݾwMCwxO)Jŷw1Oʞw>m+ÿ(Bb| `+3&Q,ǂϲaђq@"f.!@#u @XZ/5c3A9:S>/#dEpdJtM%1OUR5π:dU@!32u0Da%V,dfp3k3lWg`gXD@ѡwz:g}F E<@wGxn QiQY$ 7HyHjUIIzAI#s{k; 5$79IR\|6% s|]br:Χ&&$sb}ms;}݇($z@< )f~) o=u*ף*EVG +Qr}0,#a)a 71!-Y,ǐ QH "@)6R .&xYR5a53r']Exw:|wn8T#3tX_6nG 6 oiyEjI7!tZIZv8X#Ȳ\Z{)&lMRKhX\\`ҳ0]L%Ƌm;;(z(ţ`Ni~Қ=PoOqekp+`>推,(AΒaqw {˷B.@ ŁKrY+.S`fA5=s_SBxJu2`jUӒ O :. `5fZ3ʻmgougsE9 {vyW0FEXt5>@:z6땷6xy y@Zm7#&ksc#z% P9lYl\^|ϕ:aL\m:ԧ]z"(~M< h^v~U{ZObuqeQ+Q`b paSaȪђ??`0@ISX.26&S,h: B[`y1 1t@(UZUpd;$c2fy2Rǵ[v4DiS4pwgCP )Wz/:N)5`Xh%iAiqiin By72Z"5"p"+2q#\J}JJUl{tK$|%F͢C:; Y6+ 7fyKj IMڱ|r8sIszC:{tP{^zEl$PSR% ̶U:ir|]puҋG;&TnBnND_Wo#l*'ܵ\%q>WP yP-? }Q??-B& .Vl/cST8 6Z |#7F$i\FKia2b2%ʹ HE<2l(YOn*_N)Y*)cwP O/:2QsZC ȠH܁@ ,/i jQB}BI!i#CkUdЭDE`2:V~,OV:;YȍpȉDwU+W+hrYh|G/6;h3by>^"jzIjE7%BzN>{kϥk[799 FOm |.1M;((}Ό?o*F "1+Lcܕ%BSOOl uc(!CE:c'U+P KZHf:Z4SdT#-[,- ,V`UA@ТE]& Šu֭]` Ď F 0 @ g1h 5Qemv݃zi3#Vȕ 6^P{71A ɕRwWX3kٳ_~aǎk!#V-6(I$JZ)%\z &biZj HT0(n9ਥ ddܫ+v,xb貋0kTk cn`U*83܁@MVI4R[m53Ad3rˍ~ 9 s9**ذ IZx~O@T;B )tC #;$uC]F .eu1G |z$&%'A4ѤJ,(K/CeL1DSM5A$v>s?{'4 COQ~ A =:TK4SOBǓQOޜTSU>1h5["a9:ؐPBP ^: Y`u)oD) VE]\@v ZYu|!. */ 0K!`P0PD1c*!`&p2F45 A f""ɦ6X` &8A͐CQNςil@$#FG>F6vGld J4(Bb7{ԭCx#Q) n+bh4n\bT܎xA"qD"&ԋocILjR<9M! Չue `vĉ$w~g9Dsx"G'-y{^91 O?Wr{ A  YhCwoW8E~%?b+$X JB,`KcZVOu [NqJR\  w}er " .**_ K [ 0GL!0 OD|L5"s"PWqgMn88hD#p8pϞ::v6cHlPm=OCрIlC&!Noe(+!"}õ7R2Fsƍ.qZT^J17׹YIX"o30uD n wK F0ߑPT?x.R<ُ=à?g*{ jao}ծ!9VGtT,UP'- -+eT0r] POA,c^mQ!\P.`&1 f +Aw`l3exxhdRF٘qg|YoHF 8ErԠw8籒,u>^~FxH"TD"0>[Ï4۱m`m٦R(n@=k7 *8h,ii#?¥T$&r\dk[thfЫiLn8l_=iO~Z78DmXфVe R R R q@ t ozx>Nw+c'~PE'|0{~K0P!SaQs? bdAcȟ,Z @Ђ|@( @ S@wzLk/HZB,!!jU3Ai2 ",3x340BYG:ky44xH(CIpmІS-JHM$- <ҵ{PK8bs.{6h"&"; 3/o<d/rsC:}pEo2T!i.ę%|hD%%I,6p)/-J*JkB6/=&vʯZL%E䑔N(y+NLQL>Pl(shFc]( ڟ1 c1P1BR o xC  $S/%Ǹ@}L)ۋTȾ P1PCL.[ȘV` d3٢-j %%䫖I;` ɒ#E;阅GИZK6CÓģIX9JJ KbC{ȅ><{@ KJ %:P6_J&=D'_Єm+-Kz5IM؄7A`BAs"u>=H7K{O=LQLz5 b>0( __ᕌGE,P,@h?plI@@ @R-ܥ) U2S芜 /HS$#A p*_*!QVy! `V`";(; x¾ސ0,u}# Yy,cI#ԴO[!QPQ7tQ-VY;=>/Z>FL[˜Maf0՞?Ehs@=Ҵ?fj̨Q(ok0 ǜM11R5tBΘCΫX/աS!)λ0 Vۡ-`VȘ9H Dc*cjWآO 4IW+L:;ȺGpyKPxCSF<Xâk$\C|]l a\eJaUcXl!K^0Y_f"=$Dk/l,m^/4!<<̝Etcgv>qB'y^S%8:uZL+۔-Zichp l\, g!? po&MPΗSs0.ebXU/@*|N"\:2:OAX8^2Pl3ˢ:Z =P*LyFcCAtD9Z~NzuRBBIA% SүÈJPiX9Jh ѣ"GbE b&έ$vܕbi扜:w E'QACg(J)-p,˨,MMgtRŀ ubn!{+Z\rrQ&^]Mu}Yం Pb1;0P^̙0U1bȐAWh9@wCxP"q^I`.AX7`h„qPk;4)&KVwk֯P-ЯOͅ;^-h oij:o" >hŁOaO@8(=%Z.pDBс(A&DԸDR@1 0I> 8F8iBx/Q>p%0y 8dhQ IIZ ?y#:8 DD%x{PG|RDJ9|XKzzMW (tBO@ % ~I-ՔRcUVeeZkWaE:gPZɸ\̲0)D{^]X)^N`f*˜cUVY*gyf&j6C;3&vnJ \qE "6(gs-7DmXфVe R R R0vPXl7`],|A$W;{Q-ټHDM,DCaMԲA MpP2G/[;G=E;RG.@P!,t}uTБBKPQ7BB[?AL$IœG=vQPy;D_H&jS`SQ<+0 CB?1L PFXIdIĸi5z' N9t`L"TSY(b+_JZ )UbiYZV0 "@-B^/_cd2b !NsUblځV`h  SDl Ib9s,E`'wDFC+[Rֲ bh 6lOx \k {7A cB< ل'PC"G6!VQk!G%` Tk%z=t!Bev1]"hQ>.1!\"c{&0 ^x×u4-NHvآ;## l/B <nBd:}@LeǙZ7qd3kJ849 0g'=`h?r$!?@Q@`ʁFqO$ ^Hq)_a>Pk :PP$EK( 0t  y*ЁJ,.Ϣ S/J2py;BvP&, .A Vрgက HMjg8StfBҹƸ8xc#Yr3Qk@|AwO"QHDno3` B Up$1&'y R.ఁỹ.=!5Rz{pS-[#u/9KtBA|8؜и" Ir} *$4Ggx*aJ ҕt:q3{"`pbSH >wщak(C'8PØ^9RFYQ'TH`O|+'PU҇*'`Q"TCD >ͨMAH/n7aM[R ;ݴ>V A 4Np"wS8ljߑ@%5+Ϣp?]zI!I ,9 Jӗ\ATn(nz'u73PoCmJRT*ZW|k[ rAKBn 0#Cҕ 6Nw&+b¦zMV?e`o 4T|EegcSl9"=amX`>0#mرjngn($І&TT7$+)2?w x}!(yM¿U+W=.A,\ ExX\&@3 M/AM@4 8-R;l0l=ɚ?I8 ?I 쁞 J]BQ]=`tT?l0dmI|1TJ9dńLO`՚ϛ)1(URJ^T2EZ4U8޲x\p)E^lP 02,C)a! Pd]Q^Uy!Fj؞k!B;0V$daVf,,mQǐP@T,X}̀_`t[I=fC$,h-pLhC6dvMB w . `=̃H.TBT< ,q- ``~u 1a} 0%$@O84H@94HAC%TB8D'4DFEa9LٙhpYM(E1O!ERՙ!hA%%6[lb'L]X1Z[[,йfp. Pi ăă6l$[%m.(6wٛ=D/I`RZ‰|uI >C2ȍ``\5LVNP P1]-A|胛A %ԓS>BM'$NXC.A XAX:B=DFe \TGyBF@\~BKե]aMN@4fS-<1P:\ PW $YEY \t\DK @XUi6 , @P Qڹ\yZ/6*Z# 'rd-r(Lf)G| Phc"CAQÁ*('y8A8\ť X>A/=l h$8Cp .\&>,a,ɊQe$8'4H9@4DLC>JEAO?T8ͩH\ʦ-DDèx ` QR RA!Y"K)$|&UP f)v_PFZ*jfeHF!f /!k3Q;84Ѐ)33ޚZD,_uvAi}w,P@5xx,|g#$ͼg `C$ug<@@v-&\$uNRHSI:3U\Ž$4i\/DM5y(8&h׌)8Ӽ\Cl‘Γ>SRIV.0C 8|tB'xM YNxLJSJ]%1ԧ O`*b"P]S1d:)lfAh.q\XPi"iK**@Fbee u*K_jo, 2.g̳: uz./h9}Q@xyBxH J$hYMnC`&ԅpͿTH =M$ ۨd h274$؍ިhBDA\h %0ύ@%'A A%?p)B0VCPlD`FڎCu 2ūDTeC3Ve R R R@TT, b"jQ(*)EB$$&NA  ©Zj*z ! a]BlmK" k8+cQ1# Gqܚt~6Mt,4Xu4hQö/jkkY|^@Bm;6MNg@M脈BvW(lsRBEԬzU+q7XwM%RJf</$XA$ȵp\:2I0\r  00N0 ?60T0|CAA1C8YbDzWe*I&]UQg+"ã 2RRwpu (eED@E 2vlK `u+SB ^isAΜga0djCfj7]V4uVjDmk]2ȆWr_IpF, 7ޘ4pU8M4(T Ve R R RTC 1fDǙ!]k*pѬY8_p vuj xDG&PܸQ %>|[e0.<\(m|SG%Mı^8@Ȇr} B:ԿtIv!C^"#󩣎o2")'C;8b&8B(< ٘pQgFqDg}|' (2=BLqX" ~,& NPŸrN: =Lӟa(Jǜ켳ٓs0b@9CXt9J) PB!NQcATR @TU- t9&WeMZ 1@hd"bYd+"2 飏FJeXg\z/ `  `c]:J1Aj|*+2ph* wVI,ւ`땹E < j ! cYqD2.lG83JK 5ly 62h2x4N08`\'鰻.Ǟ"J гs>`ȏ.!b |< $"| 7" %B;B,;4C#rD#Dm@YPNK7%`~@?B,_5UBґU) \ X: b,+P0t L)uld[b3 I*h.wx!^D@ ^y@W@DHZ֢".6@ŴhXEc20 c@MehV\#g83 j0 l`h<02PH $$x ?p&lppstk =3mG鹇7ts0 %"@kBp%.BɬR/$ d#D\TT)h52><Ckݏ$"i#$<Rg$tJ?`~$NQ~xqD''{ UD1*}TPIY~Б? ) pǐpS-VBHd2R=򬐌X2T-n[ V͕ t5#(u yKim*0 +Xi8+CXk E!4ڒEtq4ұ1 0g$YG@e.5:zf4cOóZyz0Bf MoI`N%9:[– @ȏT V"n}Ӎr%z9 ^Ё*1 %QpQ3 kR KLWݓ!NӉ@u@B~$ZH8< -AMʒ>9w 0TT k^?J#.GUGAQI%%?JѯSz)D!T4=Ft@- W@ -C!F-V),xd5"LGDRBViV _:O.vF1ĞR/ B*!2JKXD [ ޒź\ 7X4@8dY8B Ր4[YkYhCs@g<{kb3 @l4I?$0[Z:[q푋\' ژˁ@7B,k]2o>L  y!o Է35 }hQ%,FU]̣N&҂'0IK'?8!%'bD1KgB&OPzޞ\=V8G=z=C0Ja A&@Q!9ULRuX4OV@ CT ẐP 4# u5x!pp] g(Oakр!j^+-LT"EK_Z ch8̨qPB 9hY0 Yqf%qk i 7nѴ(;9p ", tGzGa3lKHyRngXO`|A@Phҧ}v NSNȂ TdL% NUhVjTW Ψa !YY Jh$NhZX&\J]Bx^b  O+2o-".&0/Nd!Fd* d/2*Caf.TJ 5 Of#Z$A؀aϒA#k/`H=KMM.an? $?p>+@6m;`?tsBF@nF@ ֩@6jg60 q2L}iKPL `dzdNdb.{fnGL(ZŪV"^P%r"]r`%Bth^~)e O/+@`0/ˊ.b@O.>F08(d(*3LB#HKP^Pkൌb i~j,I9(9Mlk#?.Eڍq-!B@əQ54pÁ`fdua ]Ev8H8!@%l :I `L$Vņa<$NjL{ȧe&q,gR~G  @e UPX%anNT !XJ4.B#D̠J%N ݰ[ P!_(.u(|b]/p) /Xh@`s1/o,12!A)21m> 0H1,cHt`j hvogr ~@h^khF⡑fi n˒ٴFںfڶ;*!DmXфVe R R RP͂x{:#cpz< .J JоE05?' l\Gi \"&$@ 6K``g X.M>d,*OL{X\4cgQhrg}@ G GPUnV.I l!!A+5h+ <(#2$⎄e%^"\\jėe hk/O`(,Qa02+&/!3-T@ ߡ((CL(gȴHࠠ /p1Ͷ@7 `VmsC 67;s0 qE =8&:>`27wy J@/D Z'$ٱD*T\\>z ԕ +?s 3`~#w @wwɁB{#I̡ʡ<]bdO|~EAcƎ0Rt2S:dy~TveT)H)*WʰLXV` X. Y@bZ %a^EMsbjoj‡f@B+hm%-%.-*ѱ"%ycERD2E w|RЁ(pUhR V,W ]J*0"Z`,K TV岆 /(4* A!vʠ.a2b*QAO73?fd(o)@ #K3P3tTCgր t@ڀ3@rU9oz>IWj  *rua:onr?0A byABIr|zr~9Y3zD̩G@!I `!̞`cb "]ONM2pz4p4"{^KbhYx8dU٠/1i3.9;qUivݣ:q@O `Sߢ|Eq{sExtL?} ~v,v2@A[@:j`CGB^Z,2J̡i Fۻ.~RNaeKeMӡd #($ 0"Ю^ ^%%\Mr^4j0E_l-m+B*93&0Í)@ 2o+p5uQhA{O8T ` 7OcC8˃ |ðOX#Z %{+{#4Y1ij {<ًr|r] }W?E PI^畸r"_Y ӕ  M^P&jO-6|GEl ,QBv}n4=DTn S`4I)ZIf|&WJ3B}Z JBi8&,κ p@ A^BXbX]Ɖ2-8ϰB."Иsdxfas/hF6~ N7j8C'jnXPB:cgR99.ztԵT7 )@*y?xW*" ,!xZ%.^Z ˬC(`찃ʂ .!0\ a0a `2@ <3*"Cc4>e<Af@A@*bCEJ4Hp 0"VZ@ApIAC&,XcAm^';qvBM$= CA6>,<hC?ȃ)l*=T@BDQ%iH"ԁI&k1yL6ٔ7Ov hhRJU/WeV]>y쳉YiZ\Е^EB' 0u(1aQ%xbxdEvYVCch pjWv#&[m'ܦ(`ġGqs;3W1Y0tQ7uJw]xߑ'^2 Y p|E _$@`& ;0 !@r(10L 1 C7J- 044;?J5@MH#MEJI2)"QF9Oa^,NY:Hl\`r߹'Z}x1dpX5I,0(HR >%, C\aXr.0^KՉ"a~u@\#&12z݌Lj1dnЇ96-SlncHsQ!)HG7E6#J`jZk7.pA^Ï}j%`En B]byd_(oCD_b X` ;QZ!Mi~=5Fi7ANs3ewMΫ=]TA%)n/uLq*#4\c߫gDVUH.n0%/@&O%C\XVe R R R`VV h}򵌐-l -jgh.êfYKV> v( r(7U%'zpqbw.FO㯀xE#e Q`Ҁ S4|zQBS;Vk5!FI6SH֖ f {ؽ& bhCb\'CN'z38!d`f3#$B:&% zg7Fa,(}53xë͆y{8<0=e@r}"*?eq*b.F"Qr"QR.A,0d6SsRBaF,NV-CSqeXU3 LghCkmUSguvAuw G0ju!ERVt n0 \EUWa&1sXqw{w0x 3~4FY@#4YYFZj4AyjjyYy[_Q[kz  oClV70{ɶ7K{#b8c"vm`L/ P#9#nA":`:s^n^E ["o;_kx&lloPOs`T=S cp޳( ) >Q PQB*b? * Rxc&7@%05S@"27,9,̢s-G!TB1eHP5atuo!/ vu_ffLVk0vguvW`ZXi02,hF1c8C33PrHH#jyvqZUjZ6舒0z 7%&8s#n$:$ 6M ^n8N&^b_jP sog~ot`Ә`{(Pu(>a QpB?Hùq*Rb!RЏ"XYs<"H PBsFJtrGg.y5f;tRYu`uDc_f~!2)gTV1Tg{caCyFFt4b2( i~:3HvHfGjfPj65j5!6l _[\d! P{s{ B"$"gm3L9]`:$$Mno}_T&k@0 `FOpO'G(ݓ(ha>o8*YZqQr !+.ApSߐA"TA dJ3TV-ž"C N7mA'iWz0 AE rU;3 R l$*ag)sep_top.gifo{m+ R R R++[nGIF87a @ ` @ @@@`@@@@@` `@``````` @` @` @` @`@ @@@`@@@@@ @ @@ @` @ @ @ @ @@@ @@@@@`@@@@@@@@@@`@ `@@`@``@`@`@`@`@@ @@@`@@@@@@ @@@`@@@@@@ @@@`@@@@@@ @@@`@@@@@ @` @ ` @ @@@`@@@@@` `@``````` @` @`ࠀ @` @` @` @ ` @ @@@`@@@@@` `@``````` @` @` @`𠠤!, Hp`@;6U+S0"2zowee_logo.gifk &~h' +S+S+S' ' V>B>yGIF89aF)))((('''pppEEE~~~AAAccceee&&&Ր777!!!,,, ---HHHIII 444###ίꨨ555LLLJJJ 躺qqqdddþOOOĩ唔NNN CCCggg999=== BBBwwwmmmMMMbbbnnn|||yyyZZZXXX::: """sss***FFFhhhvvviii>>>???;;;]]]oooSSS$$$WWWzzzPPP\\\UUU222TTTVVVDDD+++KKK888[[[...666߈000YYY{{{ttt^^^kkkxxx%%%aaarrr}}}RRR111@@@___333QQQuuu```<<hbh)ē#*@ 2"LN*WF`p\&Ab6̳ 9XrMud"]^_LH7A(BxYu<`CA(@!{hnr> E 4X6QL '=I| TU)$!VݹBt N$2sУ QGr!tbjqwt z @1$Q+^WP!ȝYgN-B h_ # $GɡCZQ9i f S൰md؁ UeS沄xC0w; n IC(7 ȃ_S oͽ!Jea鑆U$ <R!Ɉ w; zPa Y{>!5enIC=RɎ 1 =8|C =|+p RAA'0) |;9AFPF!~u2=~C8&(vfǸ-Et@߉7ë  p/w3)d!f Ytga@. k PKN,&vdzzH" =x;!xrA@hbрcňXZ-ff(N Θlm[;"pA~@Nw q8N@hCQ 3}mLA)DFApa4A)r4XV̮H s`. 4VB!^ºb 5!=`4xFՓC P895?al ީDp  JpH^9D Ɯ#\ށ;o<T"} Y#! p@I8oD:TA[`$c\0AA mnVlD_!HB r.I_K"-r 0I" ^0ᕀ ]btgQ <9`tF @vh'`50 eꖂaPqsfs dXQ0BW0 FQ*4"%}[h(0+ VegT@t؇~8Xx؈;;y9?- +ShN1zowee_logo_anyk.gifbC Q +S +S +SQQHA@=lGIF89aF3f3333f333ff3fffff3f3f̙3f3333f3333333333f3333333f3f33ff3f3f3f3333f3333333f3̙333333f333ff3ffffff3f33f3ff3f3f3ffff3fffffffffff3fffffff3fff̙ffff3fffff3f̙3333f33̙3ff3ffff̙f3f̙3f̙̙3f̙3f3333f333ff3fffff̙̙3̙f̙̙̙3f̙3f3f3333f333ff3fffff3f3f̙3f!,F H*\ȰÇ#JŁfȱǏ CIɓn`/ )e7;ɳϟ@ j%ŗ%ʴӧPL)?X3'FqԳhnM˶mj`ۉ_fmkݺsg`Z&`~E$Y1`ǎvxĠ?3*벱֏7}V63&j(QQgcų߽;O^cR;fw\}oJwnc`7:\m6Mp'1Еg5\`%:W_*dUizU v;Ƀm to 2&Y%5)n!XxYEY mc0-C! d~ͅ: x 0? !A`k{/mAE/1PҢV%XAeMT$N :XFW3ڂFVڤ|2՛m}b(.زFe@ cL%ŌkcAv JFr l -A5($,A3{f`ompU1lٛf '.qR"3qBiL+ɔծ;D h<4BF2i>Oju.If jju~l1(V>] 0*.a2Hx m+Z=|&۔Pcʍ/kL$r康%ԞxBǐJL ]fG'YX.(Y+Y}1\j$w&`%J.\_eW%"+fO K<>VqIməFr::jod>}^]q4. ΅d=6orA$OGo*Q$Bj2?qM֊LxWMT2͈iCGQB."f7R0kRyA-rp_M!RR\i3zů]eOTZ#M:$% ZbNQ$2CVT!k"GFj}$5FK*ZƄ3Qd9Gi1NJ OsEub 4mxTcpSy*WڮEh[s#g,FMjoci|Gx x7qA9@ӌ}d\2m'W.:8Q :ཤޛnjT;eQDŁ|U;쮸E^&9{u6L%6r,w'^3[ l 0*ў|H>fѧ]3WGݰEnrem/e92YŮhyuـ犱zNqr cx"وKl7]Čv̬ݭ. 3W}Noݲjxf^o>qbl"z%5t9!`G~AaSJtr l3c?نa^n_1l%P#Z]u%zuqJ D:R-JBF0ik.Nbb3ӦMUm7^֗CƓ[9ɐ5hM+}u X3,A,TWsz}SEUqL+sԀC" N]]\5fh|Wv9ϩ~x*vݧK iǶY$4M{&&KQ3V\ўgF[OF2oYCCS&Oު&RS;a[^{B1i9_^"qcf#8:ʺ |Q Z\J7\R̢j/"w=Ú -"ɇf8w aW2W.M%{xL{?:Rڠ1-]4Lu}MYQ-,ju.M`)LyvgCsLGS0{hgNeÀJTIEo'+E}~EJswkv.TwetbP`}5i .0]Iok%wlye`h.7:x2Akb([Wu/;z9tĆVbERR1">%60X3Eo]Q tITyt?傔H_{|e'}lQ4f;wsMep$';"nZEU+u+E?2JD]W` 1E58aFQ@eId*Y!cw@5:fuHiB"R[g!,v.,0% Hr=%:;u Ǡ1';ZS{=7rDyK"gmv1+X]`d4)8Eh \AD'?BxUV+1DkA:DDƠt<ֳAf_ؐ$CREBMxQM/c+Qbg^|xxT Vf>Cv1+74!')$OT%Ơ9@rY29  S&E! 5>0ES4Is4隅S3 h)2:7saCÁ%3-BJI8ҋ.47wIӜ EPON Management <body> </body> 6U R||ip_config.htmlDmXф R R R[p IP Configuration
IP Configuration
 
IP setting will take effect only after saving configuration and reboot ONU.
 
Loading .....
 
Current IP Address:  
Current Subnet Mask:  
 
1قB R cookie.jsck R R RwZ8ӕ! function getCookie(sName) { var aCookie = document.cookie.split(";"); for (var i=0; i < aCookie.length; i++) { var aCrumb = aCookie[i].split("="); if (sName == aCrumb[0]) { return aCrumb[1]; } } return null; } function LoginUser(sName) { try { var login_user = getCookie(sName).split("|"); return login_user[0]; } catch(E){} return ""; } function getAdminName(sName) { try { var login_user = getCookie(sName).split("|"); return login_user[1]; } catch(E){} return ""; } function getUserName(sName) { try { var login_user = getCookie(sName).split("|"); return login_user[2]; } catch(E){} return ""; } function getWebLanguage(sName) { try { var login_user = getCookie(sName).split("|"); return login_user[3]; } catch(E){} return ""; } function getCookieVal (offset) { var endstr = document.cookie.indexOf (";", offset); if (endstr == -1) endstr = document.cookie.length; return unescape(document.cookie.substring(offset, endstr)); } function GetCookie (name) { var arg = name + "="; var alen = arg.length; var clen = document.cookie.length; var i = 0; while (i < clen) { var j = i + alen; if (document.cookie.substring(i, j) == arg) return getCookieVal (j); i = document.cookie.indexOf(" ", i) + 1; if (i == 0) break; } return ; } function SetLangCookie(value) { var CookieName = "user"; var cval = GetCookie (CookieName); if (cval == null) return; var cookie = cval.split("|"); var tempcookie = CookieName +"=", tempval = ""; var i = 0; for(i = 0; i< cookie.length; i++) { if (i) tempval += "|"; if (i == 3) tempval += value; else tempval += cookie[i]; } tempcookie +=tempval; document.cookie= tempcookie; } 3 R **)P{߻language.jsDmXф R R R~qWFgy*{ type: [ "English", "简体中文" ], info: [ { h_loop_test: { title:"Loopback Test", innerHTML: { in_hd:"Loopback Test", in_p01:"UNI loop back test - this test configures the UNI to be in loop back mode, sends a frame to the UNI and then waits to receive the same frame. In case the frame is received incorrectly, or a timeout has passed, the test returns failure else success." }, value: { bt_apply:"Start UNI loopback test" }, js_string: { str_start:"Starting UNI loop back test", str_test:"PHY loopback test ", str_ok:"passed", str_failed:"failed", str_port_id:"Port ID", str_result_h:"PHY Loopback Test Result", str_chport:"At least one port be selected please!" } }, h_stats: { title:"Statistics", innerHTML: { in_hd:"Statistics", in_clear:"  Clears all of the statistic counters.", txt_step:"Loading...", in_pon_name:"Name", in_pon_value:"Value", in_mpcp_name:"Name", in_mpcp_value:"Value", in_uni_name:"Name", in_uni_port:"Ehternet Port ", in_speed_name:"Name", in_speed_port:"Port List" }, value: { bt_clear:"Clear statistics", bt_refresh:"Refresh" }, js_string: { str_port:"Ehternet Port", str_eth_port:"Ehternet Port", str_port_speed:"Port Speed", str_clear:"Clear all statistics", str_ok:"successfully.", str_failed:"failed." } }, h_ipconf: { title:"IP Configuration", innerHTML: { in_hd:"IP Configuration", in_hd_mac:"MAC Address Configuration ", txt_step:"Loading.....", in_cur_ip:"Current IP Address:", in_cur_mask:"Current Subnet Mask:", in_new_ip:"ONU IP Address:", in_new_mask:"ONU Subnet Mask:", in_cur_vlan:"VLAN:", in_cur_pri:"Priority:", in_cur_host_ip:"ONU IP Address:", in_cur_host_mask:"ONU Subnet Mask:", in_cur_remote_ip:"Host IP:", in_cur_remote_mask:"Host Subnet Mask:", in_cur_remote_gate_way:"Host Gateway:", in_new_vlan:"VLAN:", in_new_pri:"Priority:", in_new_remote_ip:"Host IP:", in_new_remote_mask:"Host Subnet Mask:", in_new_remote_gateway:"Host Gateway:", in_cur_mac:"Current Mac Address:", in_config_mac:"Config Mac Address:", in_new_mac:"New Mac Address:", in_mac_intro:"MAC need reboot to take effect and the new MAC will be saved automatically.", in_ip_intro:"IP setting will take effect only after saving configuration and reboot ONU." }, value: { bt_apply:"Apply", bt_refresh:"Refresh" }, js_string: { str_set:"Change IP configuration ", set_ok:"successfully.", set_failed:"failed.", ip_err:"IP address is error.", invalid_num_err:"Invalid Number.", invalid_vlan_err:"Invalid VLAN.", invalid_pri_err:"Invalid Priority.", invalid_mac_err:"Invalid Mac Addr.", mask_err:"Netmask address is error." } }, h_mtu_config: { title:"MTU Configuration", innerHTML: { in_hd:"MTU Configuration", in_txt_mtu_display:"MTU:", in_txt_mtu:"MTU:" }, value: { bt_apply:"Apply", bt_refresh:"Refresh" }, js_string: { str_set:"Set MTU ", str_set_ok:"successfully.", str_set_fail:"failed." } }, h_mactbl: { title:"MAC Address Table", innerHTML: { in_hd:"MAC Address Table", txt_step:"Loading.....", in_txt_aging_01:"MAC Address Ageing:", in_txt_aging_02:"MAC Address Ageing:", in_txt_limit_01:"MAC limit:", in_txt_limit_02:"MAC limit:", in_fmt01:" 0 is disable, 1 ~ 458 seconds  ", in_fmt02:" 0 is disable, 1 ~ 458 seconds  ", in_fmt_mac01:" 0 is unlimit, Varying from 1 ~ 48 DmXф R R Rͬsc", in_fmt_mac02:" 0 is unlimit, Varying from 1 ~ 48 ", td_port_1:"port 1", td_port_2:"port 2", td_port_3:"port 3", td_port_4:"port 4", port_1:"port 1", port_2:"port 2", port_3:"port 3", port_4:"port 4", in_total_num:"Total Number", in_id:"ID", in_mac:"MAC Address", in_sta:"Static", in_portl:"Port", in_td_port_id:"Port ID" }, option_text: { filter: [ "Show All", "Dynamic", "Static" ] }, value: { bt_apply:"Apply", bt_refresh:"Refresh" }, js_string: { str_set:"Change address table configuration ", set_ok:"successfully.", set_failed:"failed.", str_input_err:"Only input numbers.", age_out_of_rang:"Ageing time out of range.", port_mac_limit_rang:"Mac limit out of range.", str_sec:"s", str_all_ports:"All Ports", str_port:"Port" } }, h_macbin: { title:"MAC Binding Configuration", innerHTML: { in_hd:"MAC Binding Configuration", txt_step:"Loading.....", in_port1:"Port 1", in_port2:"Port 2", in_port3:"Port 3", in_port4:"Port 4", in_td_port:"Port:", in_td_new_mac:"MAC Address:" }, value: { bt_add:"Add", bt_refresh:"Refresh" }, js_string: { str_add:"Add MAC address ", str_del:"Delete MAC address ", set_ok:"successfully.", set_failed:"failed.", str_invalid_mac:"Invalid MAC address.", str_mac_max:"MAC address binding in this port reach max limit", str_mac_exist:"MAC address already exist.", str_mac_same_diff_port:"Can't bind the same mac on different port.", str_del_btn:"Del" } }, h_rstonu: { title:"Reset ONU", innerHTML: { in_hd:"Reset ONU", txt_step:"Loading.....", in_rstonu:"Reset ONU", in_rstfac:"Reset to factory default settings" }, value: { bt_apply:"Apply" }, js_string: { str_resting:"Reseting the ONU.....", str_sec:"s", str_failed:"Reset ONU failed.", str_resume:"Reset to factory default setting failed." } }, h_mc_conf: { title:"Multicast Configuration", innerHTML: { in_hd:"Multicast Configuration", in_snooping_txt_01:"Multicast Mode:", in_snooping_txt_02:"Multicast Mode:", in_txt_mc_aging_01:"Multicast Mac Aging:", in_txt_mc_aging_02:"Multicast Mac Aging:", in_mc_fmt01:"seconds", in_mc_fmt02:"seconds" }, value: { bt_apply:"Apply", bt_refresh:"Refresh" }, option_text: { igmp_en: [ "IGMP Snooping", "CTC IGMP", "Disable" ] }, js_string: { set_config:"Change multicast configuration ", set_ok:"successfully.", set_failed:"failed.", out_of_rang:"Aging time out of range.", state_arr: [ "IGMP Snooping", "CTC IGMP", "Disable" ] } }, h_save: { title:"Save Configuration", innerHTML: { in_hd:"Save Configuration", in_save:"Save Configuration to Flash" }, value: { bt_apply:"Save Config" }, js_string: { str_save:"Save configuration to flash ", str_ok:"successfully.", str_failed:"failed." } }, h_update_if: { title:"Upload Firmware Image", innerHTML: { in_filename:"APP Firmware(.wlb):   ", in_filename_mif:"Multi Image(.mif): ", in_filename_wfs:"JFFS2 Image(.wfs): " }, value: { bt_update_mif:"Update Firmware", bt_update_wlb:"Update Firmware", bt_update_wfs:"Update Firmware" }, js_string: { str_mif_err:"The firmware's type must be .mif", str_wlb_err:"The firmware's type must be .wlb", str_wfs_err:"The firmware's type must be .wfs" } }, h_update: { title:"Update FirmwareDmXф R R R {37)", innerHTML: { in_hd:"Update Firmware", td_intro:"
  • Obtain an updated firmware image file from your ISP.
  • Enter the path to the image file location in the box below or click "Browse" to locate the image file.
  • Click "Update Firmware" once to upload the new image file.
  • ", in_note:"NOTE: The update process takes about 2 minutes to complete, and don't refresh your page while upload,after uploaded your ONU will reboot.", step_title:"step_title", txt_step:"Loading....." }, js_string: { str_other_run:"Another file transfer process in running.", str_sec:"s", str_setp:"STEP ", str_loading:"Loading.....", str_updating:"Updating firmware image.....", str_img_verify_fail:"Verify the firmware failed, please check and try again later.", str_update_ok:"Updating firmware successfully.", str_reseting:"Reseting the ONU....." } }, h_man_cfg: { title:"Configuration Export/Import", innerHTML: { in_cfg_exp_imp:"Configuration Export/Import", in_cfg_exp:"Configuration Export:", in_cfg_imp:"Configuration Import:", in_cfg_imping:"Configuration importing....." }, value: { bt_cfg_exp:"Export", bt_cfg_imp:"Import" }, js_string: { str_cfg_sec:"s", str_cfg_exp_fail:"Configuration export failed.", str_cfg_imp_ok:"Configuration import successfully.", str_cfg_verify_fail:"Verify the configuration file failed, please check and try again later.", str_cfg_rsting_onu:"Resetting ONU....." } }, h_setup_menu: { title:"left_frame", innerHTML: { in_menusys:"Status", in_over:"Overview" , in_opm:"Optical Power Status" , in_ctc_info:"CTC Configuration Parameters", in_menuset:"Setup", in_onu:"ONU Config", in_ip:"IP Config", /*add by yangph*/ in_catv:"CATV Config", in_sw:"Switch Config", in_bridge:"Bridge Config", in_port:"Port Config", in_iso:"Port Isolation", in_mac_tb:"Address Table", link_vlan:"Vlan Config", in_vlan:"Vlan Config", in_vlan_mode:"Vlan Mode", in_vlan_tbl:"Vlan Table", in_qos:"Qos Config", in_qos_algo:"Algorithm", in_qos_prio_mapping:"Priority Mapping", in_qos_prio_regen:"Priority Regeneration", link_igmp:"Multicast", in_mc_config:"Multicast Config", in_mc_vlan:"Vlan Table", in_mac_bin:"Mac Binding", in_bc_ctrl:"Storm Control", in_port_rate_ctrl:"Port Rate Limit", in_loop_detect:"Loop Detect", in_mtu_conf:"MTU Config", in_mc_ctl:"Multicast Vlan", in_qos_voq:"Priority Queue Threshold", in_ds_shaper:"Downstream Shaping", in_ups:"Backup Battery Monitoring Configuration", in_menumgt:"Management", link_diag:"Diagnostics", in_loop:"Loopback Test", in_stat:"Statistics", in_laser:"Laser Config", in_mac_addr_conf:"MAC Addr Config", in_ip_conf:"In-band IP Config", in_laser_on:"Laser On Config", in_flow_ctrl:"Switch Uplink Flow Ctrl", in_mgmt_mtu_config:"Management Data MTU Config", in_save:"Save Config", in_update:"Update Firmware", in_cfg_exp_imp:"Configuration Export/Import", in_rest:"Reset ONU", in_menuuser:"User", in_admin:"Admin Account", in_user:"User Account" } }, h_qos_alg: { title:"Qos Config >> Algorithm", innerHTML: { in_hd_algo:"Qos Config >> Algorithm", txt_step:"Loading.....", in_algo_00:"Algorithm:", in_algo_01:"Algorithm:" }, value: { bt_refresh:"Refresh", bt_apply:"Apply" }, js_string: { str_set_alg:"Apply Qos algorithm ", str_set_ok:"successfully.", str_set_fail:"failed." } }, h_qos_usr_pri_map: { title:"Qos Config >> User Priority Mapping", DmXф R R R0OVd innerHTML: { in_hd_pri_map:"Qos Config >> User Priority Mapping", txt_step:"Loading.....", in_usr_pri:" User Priority", in_queue_mapping:"Queue Mapping" }, value: { bt_refresh:"Refresh", bt_apply:"Apply" }, js_string: { str_pri_map:"Priority mapping ", str_set_ok:"successfully.", str_set_fail:"failed." } }, h_qos_usr_pri_regen: { title:"Qos Config >> User Priority Regeneration", innerHTML: { in_hd:"Qos Config >> User Priority Regeneration", txt_step:"Loading.....", in_port:"PORT", in_en:"Enable", in_old_new_pri:"Old PRI --> New PRI" }, value: { bt_refresh:"Refresh", bt_apply:"Apply" }, js_string: { str_usr_pri_regen:"User priority regenerate ", set_ok:"successfully.", set_fail:"failed." } }, h_voq_cfg: { title:"Priorty Queue Threshold", innerHTML: { in_hd_voq_th:"Qos Config >> Priorty Queue Threshold", in_q_type:"Queue Type:", in_voq_id:"Queue", in_voq_buf:"Buffer" }, value: { bt_refresh:"Refresh", bt_apply:"Apply" }, option_text: { a_que_type: [ "Downstream", "Upstream" ] }, js_string: { str_input_err:"Only input numbers.", str_voq_thresh_range:"VOQ threshold out of range.", str_set:"VOQ threshold configurate ", set_ok:"successfully.", set_failed:"failed." } }, h_onu_conf: { title:"ONU Configuration", innerHTML: { in_hd:"ONU Configuration", txt_step:"Loading.....", in_ctc_stack_status:"CTC Stack Status:", in_onu_sn_00:"SN:", in_onu_loid_passwd_00:"LOID-PASSWORD:", in_mac_00:"ONU MAC:", in_fec_00:"FEC mode:", in_onu_sn_01:"SN:", in_onu_loid_passwd_01:"LOID-PASSWORD:", in_fec_01:"FEC mode:" }, value: { bt_refresh:"Refresh", bt_apply:"Apply" }, option_text: { a_fec_mode: [ "Disable", "Enable" ],a_ctc_switch: [ "Disable", "Enable" ] }, js_string: { fec_arr: [ "", "Unknown status", "Enable", "Disable" ],ctc_status_arr: [ "Disable", "Enable" ], str_set:"Change ONU configuration ", set_ok:"successfully.", set_fail:"failed.", str_input_err:"Only input numbers and letters.", str_auth_input_err:"Loid and Password can not start/end with \"@.,\"?!:;`\"", mac_err:"MAC address format is error.", str_mac_prompt:"Note: Change for MAC must be saved and reboot the system to take effect!", str_mac_out_range:"Note: The range of mac address is from 00:19:C6:79:00:00 to 00:19:C6:7F:FF:FF." } }, h_storm_ctrl: { title:"Storm Configuration", innerHTML: { in_hd:"Storm Configuration", txt_step:"Loading...", in_port:"Port", in_bs:"BC Suppression", in_rate:"Rate", in_td_port:"Port:", in_td_bs:"BC Suppression:" }, value: { bt_refresh:"Refresh", bt_apply:"Apply" }, option_text: { bs_switch: [ "BroadCast", "MC and BC", "All Pactets", "Disable" ] }, js_string: { str_input_err:"Only input numbers.", str_bs_thresh:"BC suppression rate out of range.", str_set:"Apply storm configuration ", set_ok:"successfully.", set_fail:"failed." } }, h_port_rate_ctrl: { title:"Port Rate Configuration", innerHTML: { in_hd:"Port Rate Configuration", txt_step:"Loading...", in_port:" Port ", in_pause:" Pause ", in_uspolic:" US Policing ", in_dslimit:"DS Rate Limiting", in_td_port:"Port", in_td_pause:"Pause", in_td_us:"US Policing", in_tdDmXф R R R@}zo"H_ds:"DS Rate Limiting" }, value: { bt_refresh:"Refresh", bt_apply:"Apply" }, option_text: { rate_switch: [ "Disable", "Enable" ] , pause: [ "Disable", "Enable" ] , us_switch: [ "Disable", "Enable" ] , ds_switch: [ "Disable", "Enable" ] }, js_string: { str_rate_thresh:"Port rate out of range ", str_set:"Setting port rate", set_ok:" successfully", set_fail:" failed" } }, h_ports: { title:"Port Configuration", innerHTML: { in_hd:"Port Configuration", txt_step:"Loading...", in_port:" Port ", in_link:" Link ", in_phy:" PHYAdmin ", in_autoneg:" AutoNeg ", in_workingmode:" WorkingMode ", in_pause:" Pause ", in_td_port:"Port", in_td_phy:"PHYAdmin", in_td_settingmode:"Mode", in_td_pause:"Pause" }, value: { bt_refresh:"Refresh", bt_apply:"Apply" }, option_text: { phyadmin: [ "Disable", "Enable" ], autoneg: [ "Disable", "Enable" ], settingmode: [ "Auto Neg", "10M/HD", "10M/FD", "100M/HD", "100M/FD", "1000M/FD", "1000M/HD" ], pause: [ "Off", "On" ] }, js_string: { str_set:"Apply port configuration ", set_ok:"successfully.", set_fail:"failed." } }, h_vlanmode: { title:"VLAN Mode Configuration", innerHTML: { in_hd:"VLAN Mode Configuration", txt_step:"Loading.....", in_port:"Port", in_v_mode:"VLAN Mode", in_d_vid:"Default VID", in_td_port:"Port:", in_td_v_mode:"VLAN Mode:", in_td_d_vid:"Default VID:", in_td_trans:"Translation:", in_td_no:"No.", in_td_old_tag:"Old Tag", in_td_new_tag:"New Tag", in_td_trunk_no1:"No.", in_td_trunk_no2:"No.", in_td_trunk_tag1:"Tag", in_td_trunk_tag2:"Tag" }, value: { bt_refresh:"Refresh", bt_apply:"Apply" }, option_text: { mode: [ "Transparent", "Tag", "Translation", "Trunk" ] }, js_string: { str_dvid_err:"Default VID is error.", str_tag_err:"Tag is error.", str_no_tag_err:"No Tag is set.", str_old_tag_err:"Old Tag is error.", str_new_tag_err:"New Tag is error.", str_invalid_num_err:"Invalid Number.", str_set:"Vlan mode configurate ", set_ok:"successfully.", set_fail:"failed." } }, h_port_iso: { title:"Port Isolation Configuration", innerHTML: { in_hd:"Port Isolation Configuration", txt_step:"Loading.....", in_port_iso:"Port Isolation:", td_port_iso:"Port Isolation:" }, value: { bt_refresh:"Refresh", bt_apply:"Apply" }, option_text: { a_port_iso: [ "Disable", "Enable" ] }, js_string: { enable: [ "Disable", "Enable" ], str_set:"Set port isolation configuration ", set_ok:"successfully.", set_fail:"failed." } }, /*add by yangph*/ h_catv: { title:"CATV Configuration", innerHTML: { in_hd:"CATV Configuration", txt_step:"Loading.....", in_catv:"CATV State:", td_catv:"CATV State:" }, value: { bt_refresh:"Refresh", bt_apply:"Apply" }, option_text: { a_catv: [ "Close", "Open" ] }, js_string: { enable: [ "Close", "Open" ], str_set:"Set CATV configuration ", set_ok:"successfully.", set_fail:"failed." } }, h_loop_detect: { title:"Loop Detect Configuration", innerHTML: { in_hd:"Loop Detect Configuration", txt_step:"Loading.....", in_port:"Port",DmXф R R RP`Ά*8r in_loop_detect:"Loop Detect", td_port:"Port:", td_loop_detect:"Loop Detect:" }, value: { bt_refresh:"Refresh", bt_apply:"Apply" }, option_text: { a_loop_detect: [ "Disable", "Enable" ] }, js_string: { enable: [ "Disable", "Enable" ], str_set:"Set loop detect ", set_ok:"successfully.", set_fail:"failed." } }, h_laser_on: { title:"Laser On Configuration", innerHTML: { in_hd:"Laser On Configuration", txt_step:"Loading.....", in_laser_on:" Laser On Control ", td_laser_on:"Laser On Control", in_td_laser_on:"Laser On Control" }, value: { bt_refresh:"Refresh", bt_apply:"Apply" }, option_text: { a_set: [ "Always On", "Always Off", "On/Off" ] }, js_string: { enable: [ "Always On", "Always Off", "On/Off" ], str_set:"Set Laser On configuration ", set_ok:"successfully.", set_fail:"failed." } }, h_adv_flow_ctrl: { title:"Switch Uplink Flow Control Configuration", innerHTML: { in_hd:"Switch Uplink Flow Control", txt_step:"Loading.....", in_flow_ctrl:" Flow Control ", td_flow_ctrl:"Flow Control", in_td_flow_ctrl:"Flow Control" }, value: { bt_refresh:"Refresh", bt_apply:"Apply" }, option_text: { a_set: [ "Disable", "Enable" ] }, js_string: { enable: [ "Disable", "Enable" ], str_set:"Switch Uplink Flow Control", set_ok:"successfully.", set_fail:"failed." } }, h_opm: { title:"Optical Power Status", innerHTML: { in_hd:"Optical Power Status", in_td_temp:"Temperature:", in_td_voltage:"Voltage:", in_td_bias:"Bias:" , in_td_tx_opt_power:"Tx Optical Power:", in_td_rx_opt_power:"Rx Optical Power:" }, value: { bt_refresh:"Refresh" } }, h_ctc_info: { title:"CTC Configuration Parameters", innerHTML: { in_hd:"CTC Configuration Parameters", in_id:"Name", in_port_list:"Port List" , in_port_link_status:"EtherLinkState", in_port_us_policing:"EthUSPolicing", in_port_ds_rate_limit :"EthPortDSRateLimit", in_port_link_rate:"LinkRate" , in_port_admin_status :"PhyAdminStatus" , in_port_pause:"EthPortPause" , in_port_vlan_mode:"EthPortVlanMode" , in_port_vlan_id:"VlanId" , in_port_mc_tag_oper:"MulticastTagOper" , in_port_max_igmp_group:"MaxGroupNum" , in_port_loop_detect:"LoopDetect", in_port_auto_neg:"EthAutoNeg", in_mc_mode :"MulticastMode", in_ms_fast_leave:"MSFastLeave" } , js_string: { str_NotActive:"None" }, option_text:{ vlan_mode: [ "Transparent Mode" , "Tag Mode", "Translation Mode", "Aggregation Mode" , "Trunk Mode" ] , mc_tag_oper: [ "Disable", "Enable", "Others" ] , enable: [ "Disable", "Enable" ] , mc_mode: [ "SNOOPING" , "CTC Multicast Mode", "Disable" ], enable2: [ "Disable", "Enable" ] }, value: { bt_refresh:"Refresh" } }, h_sysst: { title:"System Overview", innerHTML: { in_hd:"System Overview", txt_step:"Loading.....", in_td_type:"Type:", in_td_onu_conn_st:"ONU PON Connection State:", in_td_reg_st:"Register Status:", in_td_oam_link:"OAM Link:", in_td_auth_st:"Authorization State:", in_td_pon_loopback:"PON Loopback:", in_td_olt_mac:"OLT MAC Address:", in_td_llid:"LLID:", DmXф R R R`7߫5 in_td_uptime:"ONU Uptime:", in_td_onu_ip:"ONU IP Address:", in_td_onu_netmask:"ONU Subnet Mask:", in_td_onu_mac:"ONU MAC Address:", in_td_flash_chksum:"Flash Checksum:", in_td_eeprom_chksum:"EEPROM Checksum:", in_td_app_ver:"Software Version:", in_td_ctc_spec_ver:"CTC Spec Version:", in_td_hw_ver:"Hardware Version:", in_td_oam_ver:"OAM Version:", in_onu_sn:"ONU SN", in_td_onu_vendor_id:"Vendor ID:", in_td_onu_model:"ONU Model:", in_td_onu_id:"ONU ID:", in_td_onu_hw_ver:"Hardware Version:", in_td_onu_soft_ver:"Software Version:", in_td_onu_fm_ver:"FirmwareVer:", in_chip_id:"Chipset ID", in_td_chipset_vendor_id:"Vendor ID:", in_td_chipset_chip_model:"Chip Model:", in_td_chipset_rev:"Revision:", in_td_chipset_ic_ver:"IC_Version/Date:", in_onu_capa:"ONU Capabilities", in_td_capabi_service_supported:"Service Supported:", in_td_capabi_ge_num:"Number of GE Ports:", in_td_capabi_ge_bitmap:"Bitmap of GE Ports:", in_td_capabi_fe_num:"Number of FE Ports:", in_td_capabi_fe_bitmap:"Bitmap of FE Ports:", in_td_capabi_pots_num:"Number of POTS ports:", in_td_capabi_e1_num:"Number of E1 port:", in_td_capabi_us_que_num:"Number of US Queues:", in_td_capabi_max_us_queue:"QueueMax per US Port:", in_td_capabi_ds_que_num:"Number of DS Queues:", in_td_capabi_max_ds_queue:"QueueMax per DS Port:", in_td_capabi_battery_backup:"Battery Backup:", in_td_afec_ability:"FEC Ability:", in_td_fec_mode:"FEC mode:" }, value: { bt_refresh:"Refresh" }, js_string: { onu_conn_st_arr: [ "Disconnected", "Connected" ], reg_st_arr: [ "Deregistered", "Registered" ], oam_link_arr: [ "Down", "Up" ], auth_st_arr: [ "Unauthorized", "Authorized" ], disable_arr: [ "Disable", "Enable" ], uptime_arr: [ "days", "hours", "minutes", "seconds" ], oam_ver_arr: [ "Draft 2.0", "Standard" ], battery_arr: [ "No", "Yes" ], afec_ability_arr: [ "", "Unknown", "Supported", "Unsupported" ], fec_mode_arr: [ "", "Unknown", "Enable", "Disable" ] } }, h_admin: { title:"Admin Account", innerHTML: { in_hd:"Admin Account", txt_step:"Loading.....", in_intro:"Admin account has unrestricted access to change and view configuration of your ONU. ", in_username:"User Name:", in_old_pwd:"Old Password:", in_new_pwd:"New Password:", in_repwd:"Confirm New Password:" }, value: { bt_apply:"Apply" }, js_string: { str_chgpwd:"Change password ", str_ok:"successfully.", str_failed:"failed.", str_pwd_err:"Invalid password.", str_usr_err:"Invalid username.", str_input_err:"Invalid character.", str_old_pwd_err:"Old password is error." } }, h_user: { title:"User Account", innerHTML: { in_hd:"User Account", txt_step:"Loading.....", in_intro:"User account has limited access to view configuration of your ONU. ", in_username:"User Name:", in_old_pwd:"Old Password:", in_new_pwd:"New Password:", in_repwd:"Confirm New Password:" }, value: { bt_apply:"Apply" }, js_string: { str_chgpwd:"Change password ", str_ok:"successfully.", str_failed:"failed.", str_pwd_err:"Invalid password.", str_usr_err:"Invalid username.", str_input_err:"Invalid character.", str_old_pwd_err:"Old password is error." } }, h_ds_shape: { title:"Downstream Shpaing Configuration", innerHTML: { in_hd_ds_shaping:"Downstream Shaping Configuration", txt_shpae_mode:"Shaping Mode", txt_sh_rate:"Rate", in_shpae_mode:"Shaping Mode", in_sh_raDmXф R R Rp-@=te:"Rate", in_sh_rate_type:"Shaping Rate Type" }, value: { bt_refresh:"Refresh", bt_apply:"Apply" }, option_text: { a_sh_rate_type: [ "Not Limited", "Limited" ], a_shape_mode: [ "Disable", "Enable" ] }, js_string: { str_set:"Downstream Shaping Config ", set_ok:"Successfully", set_failed:"Fail", set_outofrange:"Out of range" } }, h_ups_cfg: { title:"Backup Battery Monitoring Configuration", innerHTML: { in_hd_bb_cfg:"Backup Battery Monitoring Configuration", in_bb_alarm_state:"Alarm Status", in_bb_avail:"Backup Battery Support", in_bb_alarm_status:"Backup Battery Alarm Status", in_bb_alarm_switch:"Switch", in_bb_alarm_config:"Configuration", in_ups_avail:"UPS Available", in_ac_lost:"AC power lost detection", in_ups_det:"UPS module detection", in_ups_low:"UPS power low detection", in_ainput:"Switch A input", in_binput:"Switch B input", in_alarm_sig:"Alarm Signal", in_log_state:"Logical State", in_switch:"Alarm Switch", in_alarm_info:"Alarm Info" }, value: { bt_refresh:"Refresh", bt_apply:"Apply" }, option_text: { a_alarm_sig: [ "AC power lost detection", "UPS module detection", "UPS power low detection", "Switch A input", "Switch B input" ], a_log_state: [ "Low Available", "High Available" ], a_alarm_info: [ "Unknown type", "Temperature", "Humidity", "Smoke", "Door access control" ], a_switch: [ "Off", "On" ] }, js_string: { str_set:"Change Backup Battery configuration ", str_set_ok:"successfully.", str_set_failed:"failed.", alarm_status: [ "Off", "On" ], trigger: [ "Low Trigger", "High Trigger" ] } } }, { h_ban: { title:"PON Banner", innerHTML: { in_st:"系统状态", in_se:"高级配置", in_ma:"系统管理", in_ma_adv:"高级系统管理", in_us:"用户管理" } }, h_loop_test: { title:"回环测试", innerHTML: { in_hd:"回环测试", in_p01:"UNI回环测试 - 这个测试配置UNI成回环模式发送一个帧到UNI然后等待接收相同的帧,如果收到则测试成功超时则失败" }, value: { bt_apply:"开始UNI回环测试" }, js_string: { str_start:"正在进行回环测试", str_test:"回环测试", str_ok:"通过", str_failed:"失败", str_port_id:"端口号", str_result_h:"回环测试结果", str_chport:"请至少指定一个测试端口" } }, h_stats: { title:"流量统计", innerHTML: { in_hd:"流量统计", in_clear:"  清除统计计数器", txt_step:"正在加载...", in_pon_name:"名称", in_pon_value:"值", in_mpcp_name:"名称", in_mpcp_value:"值", in_uni_name:"名称", in_uni_port:"以太网端口", in_speed_name:"名称", in_speed_port:"端口列表" }, value: { bt_clear:"清除统计", bt_refresh:"刷新" }, js_string: { str_port:"以太网端口", str_eth_port:"以太网端口", str_port_speed:"端口速率", str_clear:"清除统计", str_ok:"成功.", str_failed:"失败." } }, h_ipconf: { title:"IP 设置", innerHTML: { in_hd:"IP 设置", in_hd_mac:"MAC 地址设置", txt_step:"正在加载.....", in_cur_ip:"当前IP地址:", in_cur_mask:"当前子网掩码:", in_new_ip:"ONU IP地址:", in_new_mask:"ONU子网掩码:", in_cur_vlan:"VLAN:", in_cur_pri:"优先级:", in_cur_host_ip:"ONU IP地址:", in_cur_host_mask:"ONU IP掩码:", "F R R RGFT+ Cin_cur_remote_ip:"主机 IP地址:", in_cur_remote_mask:"主机 IP掩码:", in_cur_remote_gate_way:"主机网关:", in_new_vlan:"VLAN:", in_new_pri:"优先级:", in_new_remote_ip:"主机 IP地址:", in_new_remote_mask:"主机 IP掩码:", in_new_remote_gateway:"主机网关:", in_cur_mac:"正在使用MAC地址:", in_config_mac:"新配置的MAC地址:", in_new_mac:"MAC 地址:", in_mac_intro:"MAC地址设置自动保存,重启后生效", in_ip_intro:"IP设置保存到配置并重启ONU后生效." }, value: { bt_apply:"应用", bt_refresh:"刷新" }, js_string: { str_set:"更改IP配置", set_ok:"成功.", set_failed:"失败.", ip_err:"IP地址错误.", invalid_num_err:"输入不合法的数字", invalid_vlan_err:"VLAN不合法", invalid_pri_err:"优先级不合法", invalid_mac_err:"不合法的MAC地址", mask_err:"子网掩码错误." } }, h_mtu_config: { title:"MTU配置", innerHTML: { in_hd:"MTU配置", in_txt_mtu_display:"MTU:", in_txt_mtu:"MTU:" }, value: { bt_apply:"应用", bt_refresh:"刷新" }, js_string: { str_set:"设置MTU", str_set_ok:"成功.", str_set_fail:"失败." } }, h_mactbl: { title:"MAC地址表", innerHTML: { in_hd:"MAC地址表", txt_step:"正在加载.....", in_txt_aging_01:"MAC地址老化时间:", in_txt_aging_02:"MAC地址老化时间:", in_txt_limit_01:"MAC地址限制数:", in_txt_limit_02:"MAC地址限制数:", in_fmt01:" 0表示禁用, 1 ~ 458 秒  ", in_fmt02:" 0表示禁用, 1 ~ 458 秒  ", in_fmt_mac01:" 0 表示无限制, 范围1 ~ 48 ", in_fmt_mac02:" 0 表示无限制, 范围1 ~ 48 ", td_port_1:"端口1", td_port_2:"端口2", td_port_3:"端口3", td_port_4:"端口4", port_1:"端口1", port_2:"端口2", port_3:"端口3", port_4:"端口4", in_total_num:"总数", in_id:"编号", in_mac:"MAC地址", in_sta:"静态", in_portl:"端口", in_td_port_id:"端口ID" }, option_text: { filter: [ "显示所有", "动态地址", "静态地址" ] }, value: { bt_apply:"应用", bt_refresh:"刷新" }, js_string: { str_set:"更改地址表配置", set_ok:"成功.", set_failed:"失败.", str_input_err:"允许输入数字.", age_out_of_rang:"老化时间超出范围.", port_mac_limit_rang:"MAC地址限制超出范围.", str_sec:"秒", str_all_ports:"所有端口", str_port:"端口" } }, h_macbin: { title:"MAC地址绑定", innerHTML: { in_hd:"MAC地址绑定", txt_step:"正在加载.....", in_port1:"端口 1", in_port2:"端口 2", in_port3:"端口 3", in_port4:"端口 4", in_td_port:"端口:", in_td_new_mac:"MAC 地址:" }, value: { bt_add:"添加", bt_refresh:"刷新" }, js_string: { str_add:"添加MAC地址", str_del:"删除MAC地址", set_ok:"成功.", set_failed:"失败.", str_invalid_mac:"非法的MAC地址.", str_mac_max:"该端口MAC地址绑定已满", str_mac_exist:"MAC地址已经存在.", str_mac_same_diff_port:"不同的端口不能绑定相同的MAC地址.", str_del_btn:"删除" } }, h_mc_conf: { title:"组播配置", innerHTML: { in_hd:"组播配置", in_snooping_txt_01:"组播模式:", iU% R R RxxYʾڎ n_snooping_txt_02:"组播模式:", in_txt_mc_aging_01:"组播MAC老化时间:", in_txt_mc_aging_02:"组播MACDmXф R R R化时间:", in_mc_fmt01:"秒", in_mc_fmt02:"秒" }, value: { bt_apply:"应用", bt_refresh:"刷新" }, option_text: { igmp_en: [ "IGMP Snooping", "CTC IGMP", "禁用" ] }, js_string: { set_config:"更改组播配置", set_ok:"成功.", set_failed:"失败.", out_of_rang:"老化时间超出范围.", state_arr: [ "IGMP Snooping", "CTC IGMP", "禁用" ] } }, h_rstonu: { title:"重启ONU", innerHTML: { in_hd:"重启ONU", txt_step:"正在加载.....", in_rstonu:"重启ONU", in_rstfac:"恢复默认设置并重启ONU" }, value: { bt_apply:"应用" }, js_string: { str_resting:"正在重启ONU.....", str_sec:"秒", str_failed:"重启ONU失败.", str_resume:"恢复默认配置失败." } }, h_save: { title:"保存配置信息", innerHTML: { in_hd:"保存配置信息", in_save:"保存配置信息到FLASH" }, value: { bt_apply:"保存配置" }, js_string: { str_save:"保存配置信息到FLASH", str_ok:"成功.", str_failed:"失败." } }, h_update_if: { title:"上传固件升级文件", innerHTML: { in_filename:"APP 固件文件(.wlb):   ", in_filename_mif:"MIF 固件文件(.mif):   ", in_filename_wfs:"JFFS2 固件文件(.wfs): " }, value: { bt_update_mif:"固件升级", bt_update_wlb:"固件升级", bt_update_wfs:"固件升级" }, js_string: { str_mif_err:"固件文件后缀必须是.mif", str_wlb_err:"固件文件后缀必须是.wlb", str_wfs_err:"固件文件后缀必须是.wfs" } }, h_update: { title:"固件升级", innerHTML: { in_hd:"固件升级", td_intro:"
  • 从你的ISP获取一个最新版本的固件文件.
  • 选择正确的固件文件的路径.
  • 点击"固件升级"按钮开始升级.
  • ", in_note:"注意: 整个升级过程大约需要2分钟,升级过程请不要刷新页面,升级完成后ONU将自动重启.", step_title:"", txt_step:"正在加载....." }, js_string: { str_other_run:"另一个升级进程正在运行", str_sec:"秒", str_setp:"步骤 ", str_loading:"正在加载.....", str_updating:"正在升级固件文件.....", str_img_verify_fail:"固件验证失败,检查后重试.", str_update_ok:"固件升级成功.", str_reseting:"正在重启ONU....." } }, h_man_cfg: { title:"配置导出/导入", innerHTML: { in_cfg_exp_imp:"配置导出/导入", in_cfg_exp:"配置导出:", in_cfg_imp:"配置导入:", in_cfg_imping:"正在导入配置....." }, value: { bt_cfg_exp:"导出", bt_cfg_imp:"导入" }, js_string: { str_cfg_sec:"秒", str_cfg_exp_fail:"配置导出失败.", str_cfg_imp_ok:"配置导入成功.", str_cfg_verify_fail:"配置文件验证失败,检查后重试.", str_cfg_rsting_onu:"正在重启ONU....." } }, h_mgt_menu: { innerHTML: { link_diag:"诊断", in_loop:"UNI 回环测试", in_stat:"流量统计", in_laser:"光收发器设置", in_save:"保存配置", in_update:"固件升级", in_mac_addr_conf:"MAC地址配置", in_ip_conf:"带内IP配置", in_laser_on:"常发光控制", in_mgmt_mtu_config:"管理数据MTU配置", in_flow_ctrl:"Switch上联口流控", in_rest:"重启ONU" } }, h_setup_menu: { title:"left_frame", innerHTML: { in_menusys:"系统状态", in_over:"系统状态" , in_opm:"光模块状态" , in_ctc_info:"CTC 配置信DmXф R R R{P䁯", in_menuset:"高级配置", in_onu:"ONU设置", in_ip:"IP设置", /*add by yangph*/ in_catv:"CATV设置", in_sw:"Switch设置", in_bridge:"Bridge设置", in_port:"端口设置", in_iso:"端口隔离", in_mac_tb:"地址表", link_vlan:"Vlan 配置", in_vlan:"Vlan 配置", in_vlan_mode:"Vlan 模式", in_vlan_tbl:"Vlan表", in_qos:"Qos 配置", in_qos_algo:"算法", in_qos_prio_mapping:"优先级映射", in_qos_prio_regen:"优先级再生", link_igmp:"多播", in_mc_config:"多播配置", in_mc_vlan:"Vlan 表", in_bc_ctrl:"广播风暴抑制", in_port_rate_ctrl:"端口限速", in_loop_detect:"环回检测", in_mtu_conf:"MTU 配置", in_mac_bin:"MAC绑定", in_mc_ctl:"多播Vlan", in_qos_voq:"队列块占用状态", in_ds_shaper:"下行限速配置", in_ups:"备电监控设置", in_menumgt:"系统管理", link_diag:"诊断", in_loop:"UNI 回环测试", in_stat:"流量统计", in_laser:"光收发器设置", in_mac_addr_conf:"MAC地址配置", in_ip_conf:"带内IP配置", in_laser_on:"常发光控制", in_flow_ctrl:"Switch上联口流控", in_mgmt_mtu_config:"管理数据MTU配置", in_save:"保存配置", in_update:"固件升级", in_cfg_exp_imp:"配置导出/导入", in_rest:"重启ONU", in_menuuser:"用户管理", in_admin:"管理员帐号", in_user:"用户帐号" } }, h_sys_menu: { innerHTML: { in_over:"系统状态" , in_opm:"光模块状态" , in_ctc_info:"CTC 配置信息" } }, h_user_menu: { innerHTML: { in_admin:"管理员帐号", in_user:"用户帐号" } }, h_qos_alg: { title:"Qos 配置 >> 算法", innerHTML: { in_hd_algo:"Qos 配置 >> 算法", txt_step:"正在加载.....", in_algo_00:"算法:", in_algo_01:"算法:" }, value: { bt_refresh:"刷新", bt_apply:"应用" }, js_string: { str_set_alg:"应用Qos算法", str_set_ok:"成功.", str_set_fail:"失败." } }, h_qos_usr_pri_map: { title:"Qos 配置 >> 用户优先级到队列的映射", innerHTML: { in_hd_pri_map:"QoS 配置 >> 用户优先级到队列的映射", txt_step:"正在加载.....", in_usr_pri:"用户优先级", in_queue_mapping:"队列映射" }, value: { bt_refresh:"刷新", bt_apply:"应用" }, js_string: { str_pri_map:"用户优先级映射", str_set_ok:"成功.", str_set_fail:"失败." } }, h_qos_usr_pri_regen: { title:"QoS 配置 >> 用户优先级再生", innerHTML: { in_hd:"Qos 配置 >> 用户优先级再生", txt_step:"正在加载.....", in_port:"端口", in_en:"使能", in_old_new_pri:"旧优先级 --> 新优先级" }, value: { bt_refresh:"刷新", bt_apply:"应用" }, js_string: { str_usr_pri_regen:"用户优先级再生", set_ok:"成功.", set_fail:"失败." } }, h_voq_cfg: { title:"", innerHTML: { in_hd_voq_th:"Qos配置 >> 优先级队列设置", in_q_type:"队列类型:", in_voq_id:"队列", in_voq_buf:"队列块" }, value: { bt_refresh:"刷新", bt_apply:"应用" }, option_text: { a_que_type: [ "下行", "上行" ] }, js_string: { str_input_err:"允许输入数字", str_voq_thresh_range:"队列块值超出范围", str_set:"设置队列块", set_ok:"成功.", set_failed:"失败." } }, h_onu_conf: { title:"ONU设置", innerHTML: { in_hd:"ONU设罅DmXф R R R:vv)Ɋ", txt_step:"正在加载.....", in_ctc_stack_status:"CTC栈状态:", in_onu_sn_00:"SN:", in_onu_loid_passwd_00:"LOID-PASSWORD:", in_mac_00:"ONU MAC:", in_fec_00:"前向纠错:", in_onu_sn_01:"SN:", in_onu_loid_passwd_01:"LOID-PASSWORD:", in_fec_01:"前向纠错:" }, value: { bt_refresh:"刷新", bt_apply:"应用" }, option_text: { a_fec_mode: [ "禁用", "激活" ], a_ctc_switch: [ "禁用", "启用" ] }, js_string: { fec_arr: [ "", "状态未知", "激活", "禁用" ], ctc_status_arr: [ "禁用", "启用" ], str_set:"更改ONU设置", set_ok:"成功.", set_fail:"失败.", str_input_err:"允许输入数字和字母.", str_auth_input_err:"Loid 和 Password 不能以\"@.,\"?!:;`\"开头和结尾.", mac_err:"MAC地址格式错误.", str_mac_prompt:"注意: 对MAC地址的修改需要保存并重启系统后才能生效", str_mac_out_range:"注意: MAC 地址允许的范围:00:19:C6:79:00:00 ~ 00:19:C6:7F:FF:FF." } }, h_storm_ctrl: { title:"广播抑制", innerHTML: { in_hd:"广播抑制", txt_step:"载入...", in_port:"端口", in_bs:"广播抑制", in_rate:"速率", in_td_port:"端口:", in_td_bs:"广播抑制:" }, value: { bt_refresh:"刷新", bt_apply:"应用" }, option_text: { bs_switch: [ "广播", "组播广播", "所有", "禁用" ] }, js_string: { str_input_err:"允许输入数字.", str_bs_thresh:"广播抑制值超出范围.", str_set:"应用广播抑制", set_ok:"成功.", set_fail:"失败." } }, h_port_rate_ctrl: { title:"端口限速", innerHTML: { in_hd:"端口限速", txt_step:"正在加载...", in_port:" 端口 ", in_pause:" 流控 ", in_uspolic:" 上行限速 ", in_dslimit:"下行限速", in_td_port:"端口", in_td_pause:"流控", in_td_us:"上行限速", in_td_ds:"下行限速" }, value: { bt_refresh:"刷新", bt_apply:"应用" }, option_text: { rate_switch: [ "禁用", "激活" ], pause: [ "禁用", "激活" ] , us_switch: [ "禁用", "激活" ] , ds_switch: [ "禁用", "激活" ] }, js_string: { str_rate_thresh:"速率超出范围", str_set:"设置端口限速", set_ok:"成功", set_fail:"失败" } }, h_ports: { title:"端口设置", innerHTML: { in_hd:"端口设置", txt_step:"正在加载...", in_port:" 端口 ", in_link:" 连接 ", in_phy:" PHY管理 ", in_autoneg:" 自协商 ", in_workingmode:" 工作模式 ", in_pause:" 流控 ", in_td_port:"端口", in_td_phy:"PHY管理", in_td_settingmode:"模式", in_td_pause:"流控" }, value: { bt_refresh:"刷新", bt_apply:"应用" }, option_text: { phyadmin: [ "禁用", "激活" ], autoneg: [ "禁用", "激活" ], settingmode: [ "自动协商", "十兆半双工", "十兆全双工", "百兆半双工", "百兆全双工", "千兆全双工", "千兆半双工" ], pause: [ "禁用", "激活" ] }, js_string: { str_set:"应用端口设置", set_ok:"成功.", set_fail:"失败." } }, h_vlanmode: { title:"VLAN 模式", innerHTML: { in_hd:"VLAN 模式", DmXф R R R&# txt_step:"正在加载.....", in_port:"端口", in_v_mode:"VLAN 模式", in_d_vid:"缺省 VID", in_td_port:"端口:", in_td_v_mode:"VLAN 模式:", in_td_d_vid:"缺省 VID:", in_td_trans:"Translation:", in_td_no:"编号", in_td_old_tag:"旧Tag", in_td_new_tag:"新Tag", in_td_trunk_no1:"编号", in_td_trunk_no2:"编号", in_td_trunk_tag1:"Tag", in_td_trunk_tag2:"Tag" }, value: { bt_refresh:"刷新", bt_apply:"应用 " }, option_text: { mode: [ "Transparent", "Tag", "Translation" , "Trunk" ] }, js_string: { str_dvid_err:"Default VID 有误.", str_tag_err:"Tag 有误.", str_no_tag_err:"没设置Tag", str_old_tag_err:"旧Tag输入不合理", str_new_tag_err:"新Tag输入不合理", str_invalid_num_err:"输入不合法的数字", str_set:"保存 VLAN 模式", set_ok:"成功.", set_fail:"失败." } }, h_port_iso: { title:"端口隔离", innerHTML: { in_hd:"端口隔离", txt_step:"正在加载.....", in_port_iso:"端口隔离:", td_port_iso:"端口隔离:" }, value: { bt_refresh:"刷新", bt_apply:"应用 " }, option_text: { a_port_iso: [ "禁用", "激活" ] }, js_string: { enable: [ "禁用", "激活" ], str_set:"设置端口隔离", set_ok:"成功.", set_fail:"失败." } }, /*add by yangph*/ h_catv: { title:"CATV状态", innerHTML: { in_hd:"CATV状态", txt_step:"正在加载.....", in_catv:"CATV状态:", td_catv:"CATV状态:" }, value: { bt_refresh:"刷新", bt_apply:"应用 " }, option_text: { a_catv: [ "打开", "关闭" ] }, js_string: { enable: [ "打开", "关闭" ], str_set:"设置端口隔离", set_ok:"成功.", set_fail:"失败." } }, h_loop_detect: { title:"环回检测", innerHTML: { in_hd:"环回检测", txt_step:"正在加载.....", in_port:"端口", in_loop_detect:"环回检测", td_port:"端口:", td_loop_detect:"环回检测:" }, value: { bt_refresh:"刷新", bt_apply:"应用 " }, option_text: { a_loop_detect: [ "禁用", "激活" ] }, js_string: { enable: [ "禁用", "激活" ], str_set:"设置环回检测", set_ok:"成功.", set_fail:"失败." } }, h_laser_on: { title:"常发光控制", innerHTML: { in_hd:"常发光控制", txt_step:"正在加载.....", in_laser_on:" 常发光控制 ", in_td_laser_on:"常发光控制", td_laser_on:"常发光控制" }, value: { bt_refresh:"刷新", bt_apply:"应用 " }, option_text: { a_set: [ "开启", "关闭" ] }, js_string: { enable: [ "开启", "关闭" ], str_set:"设置常发光控制", set_ok:"成功.", set_fail:"失败." } }, h_adv_flow_ctrl: { title:"Switch 上联口流控", innerHTML: { in_hd:"Switch 上联口流控", txt_step:"正在加载.....", in_flow_ctrl:" 流控 ", in_td_flow_ctrl:"流控", td_flow_ctrl:"流控" }, value: { bt_refresh:"刷新", bt_apply:"应用 " }, option_text: { a_set: [ "禁用", "开启" ] }, js_string: { enable: [ "禁用", "开启" ], str_set:"设置流控", set_ok:"成功.", set_fail:"失败." } }, h_opm: { title:"光模块状态", innerHTML: { in_hd:"光模块状态", in_td_tempDmXф R R RH=&':"工作温度:", in_td_voltage:"供电电压:", in_td_bias:"偏置电流:", in_td_tx_opt_power:"发送光功率:", in_td_rx_opt_power:"接收光功率:" }, value: { bt_refresh:"刷新" } } , h_ctc_info: { title:"CTC 配置信息", innerHTML: { in_hd:"CTC配置信息" , in_id:"名称", in_port_list:"端口列表", in_port_link_status:"连接状态", in_port_us_policing:"上行管制", in_port_ds_rate_limit :"下行限速" , in_port_link_rate:"连接速率" , in_port_admin_status :"使能状态" , in_port_pause:"流控状态" , in_port_vlan_mode :"VLAN 模式 " , in_port_vlan_id:"VlanId", in_port_mc_tag_oper :"组播剥离", in_port_max_igmp_group :"组播最大数", in_port_loop_detect:"回环检测", in_port_auto_neg:"自协商状态", in_mc_mode :"组播模式", in_ms_fast_leave:"组播快速离开" } , js_string: { str_NotActive:"未激活" }, option_text:{ vlan_mode: [ "透传模式" , "Tag模式", "转换模式", "聚合模式", "Trunk 模式" ] , mc_tag_oper: [ "禁用", "使能", "其他" ] , enable: [ "未激活", "激活" ] , mc_mode: [ "SNOOPING" , "CTC 可控组播", "禁用" ], enable2: [ "关闭", "打开" ] }, value: { bt_refresh:"刷新" } }, h_sysst: { title:"系统状态", innerHTML: { in_hd:"系统状态", txt_step:"正在加载...", in_td_type:"型号:", in_td_onu_conn_st:"PON连接状态", in_td_reg_st:"注册状态:", in_td_oam_link:"OAM 连接:", in_td_auth_st:"认证状态", in_td_pon_loopback:"PON回环:", in_td_olt_mac:"OLT MAC地址:", in_td_llid:"LLID:", in_td_uptime:"ONU运行时间:", in_td_onu_ip:"ONU IP地址:", in_td_onu_netmask:"ONU子网掩码:", in_td_onu_mac:"ONU MAC地址:", in_td_flash_chksum:"Flash校验和:", in_td_eeprom_chksum:"EEPROM校验和:", in_td_app_ver:"软件版本:", in_td_ctc_stack_ver:"CTC协议栈版本", in_td_ctc_spec_ver:"CTC规范版本:", in_td_hw_ver:"硬件版本:", in_td_fm_ver:"固件版本:", in_td_oam_ver:"OAM版本:", in_onu_sn:"ONU序列号", in_td_onu_vendor_id:"厂商ID:", in_td_onu_model:"ONU Model:", in_td_onu_id:"ONU ID:", in_td_onu_hw_ver:"硬件版本:", in_td_onu_soft_ver:"软件版本:", in_td_onu_fm_ver:"固件版本:", in_chip_id:"芯片编号", in_td_chipset_vendor_id:"厂商编号:", in_td_chipset_chip_model:"芯片Model:", in_td_chipset_rev:"修订:", in_td_chipset_ic_ver:"IC版本/日期:", in_onu_capa:"ONU性能", in_td_capabi_service_supported:"支持的服务:", in_td_capabi_ge_num:"千兆端口数量:", in_td_capabi_ge_bitmap:"千兆端口分布:", in_td_capabi_fe_num:"百兆端口数量:", in_td_capabi_fe_bitmap:"百兆端口分布:", in_td_capabi_pots_num:"POTS端口数量:", in_td_capabi_e1_num:"E1端口数量:", in_td_capabi_us_que_num:"上行队列数:", in_td_capabi_max_us_queue:"每端口上行最大队列数:", in_td_capabi_ds_que_num:"下行队列数:", in_td_capabi_max_ds_queue:"每端口下行最大队列数:", in_td_capabi_battery_backup:"备用电池:", in_td_afec_ability:"前向纠错能力:", in_td_fec_mode:"前向纠错状态:" }, value: { bt_refresh:"刷新" }, js_string: { onu_conn_st_arr: [ "断开", "连接" ], reg_st_arr: [ "注销", "注册" ], oam_link_arr: [ "断开", "连接" ],ߕe6 R R RJ;yw auth_st_arr: [ "未认证", "认证" ], disable_arr: [ "禁用", "激活" ], uptime_arr: [ "日", "小时", "分", "秒" ], oam_ver_arr: [ "草案 2.0", "标准" ], battery_arr: [ "无", "有" ], afec_ability_arr: [ "", "未知", "支持", "不支持" ], fec_mode_arr: [ "", "未知", "激活", "禁用" ] } }, h_admin: { title:"管理员帐号", innerHTML: { in_hd:"管理员帐号", txt_step:"正在加载.....", in_intro:"管理员帐号可以查看和更改你的ONU配置.", in_username:"用户名:", in_old_pwd:"旧密码:", in_new_pwd:"新密码:", in_repwd:"  确认密码:" }, value: { bt_apply:"应用" }, js_string: { str_chgpwd:"更改密码", str_ok:"成功.", str_failed:"失败.", str_pwd_err:"错误的密码.", str_usr_err:"错误的用户名.", str_input_err:"非法字符", str_old_pwd_err:"旧密码错误" } }, h_user: { title:"用户帐号", innerHTML: { in_hd:"用户帐号", txt_step:"正在加载.....", in_intro:"普通用户帐号只能查看ONU配置.", in_username:"用户名:", in_old_pwd:"旧密码:", in_new_pwd:"新密码:", in_repwd:"确认密码:" }, value: { bt_apply:"应用" }, js_string: { str_chgpwd:"更改密码", str_ok:"成功.", str_failed:"失败.", str_pwd_err:"错误的密码.", str_usr_err:"错误的用户名.", str_input_err:"非法字符", str_old_pwd_err:"旧密码错误." } }, h_ds_shape: { title:"下行限速", innerHTML: { in_hd_ds_shaping:"下行限速", txt_shpae_mode:"Shaping方式", txt_sh_rate:"限制速率", in_shpae_mode:"Shaping方式", in_sh_rate:"限制速率", in_sh_rate_type:"限速" }, value: { bt_refresh:"刷新", bt_apply:"应用" }, option_text: { a_sh_rate_type: [ "不限速", "限速" ], a_shape_mode: [ "关闭", "打开" ] }, js_string: { str_set:"设置下行限速", set_ok:"成功", set_failed:"失败", set_outofrange:"超出范围" } }, h_ups_cfg: { title:"备电监控", innerHTML: { in_hd_bb_cfg:"备电监控", in_bb_alarm_state:"告警状态", in_bb_avail:"支持备电", in_bb_alarm_status:"告警开关状态", in_bb_alarm_switch:"告警开关", in_bb_alarm_config:"告警配置", in_ups_avail:"装有备电模块", in_ac_lost:"交流掉电", in_ups_det:"UPS在线", in_ups_low:"UPS输出电压低", in_ainput:"A路开关输入", in_binput:"B路开关输入", in_alarm_sig:"告警信号", in_log_state:"逻辑状态", in_switch:"告警开关", in_alarm_info:"告警信息" }, value: { bt_refresh:"刷新", bt_apply:"应用" }, option_text: { a_alarm_sig: [ "交流掉电", "UPS在线", "UPS输出电压低", "A路开关输入", "B路开关输入" ], a_log_state: [ "低有效", "高有效" ], a_alarm_info: [ "未知类型", "温度", "湿度", "烟雾", "门禁" ], a_switch: [ "关", "开" ] }, js_string: { str_set:"修改备电监控设置", str_set_ok:"成功", str_set_failed:"失败", alarm_status: [ "关", "开" ], trigger: [ "低有效", "高有效" ] } } } ] } 3 R 7klang_cmn.js ޵= R R R= = :aDvar g_lang_info = { type: [ "English", "简体中文" ], info: [ { cmn: { innerHTML: { txt_step:"Loading..." }, option_text: { enable_disable: [ "Enable", "Disable" ], disable_enable: [ "Disable", "Enable" ] }, value: { bt_refresh:"Refresh", bt_apply:"Apply" }, js_string: { set_ok:"successfully", set_failed:"Fail", enable_disable: [ "Enable", "Disable" ], disable_enable: [ "Disable", "Enable" ], set_outofrange:"Out of range" } } }, { cmn: { innerHTML: { txt_step:"载入中..." }, option_text: { enable_disable: [ "激活", "禁用" ], disable_enable: [ "禁用", "激活" ] }, value: { bt_refresh:"刷新", bt_apply:"应用" }, js_string: { set_ok:"成功", set_failed:"失败", enable_disable: [ "激活", "禁用" ], disable_enable: [ "禁用", "激活" ], set_outofrange:"超出范围" } } } ] }; /D RUG`vmenu.js_h$  R R RSZ// Local Lib here. function open_close_menu(obj, open) { if( obj.style.display == 'none' ) { obj.style.display = '' } else{ obj.style.display = 'none' } } function addEvent(obj, evt, fn) { try { obj.addEventListener(evt, fn, false); return true;} catch(E) {} try { obj.attachEvent("on"+evt, fn); return true;} catch(E) {} return false; } function getEventElement(e) { if (e.srcElement) { return e.srcElement; } else if (e.originalTarget) { return e.originalTarget; } return null; } var menu_list = []; function addMenuEvent(name_src, name_dst) { try { var obj_src = $(name_src); var obj_dst = $(name_dst); obj_dst.setAttribute("show", "false"); obj_src.setAttribute("obj_name", name_dst); open_close_menu(obj_dst, false); addEvent(obj_src, "click", showHideMeun); menu_list.push(obj_src); } catch (e) { alert(e); } } function showHideMeun(e) { var obj_src = getEventElement(e); try { var obj_dst = $(obj_src.getAttribute("obj_name")); var str_show = "collapse"; if (obj_dst.getAttribute("show") == "false") { obj_dst.setAttribute("show", "true"); open_close_menu(obj_dst, true); } else { open_close_menu(obj_dst, false); obj_dst.setAttribute("show", "false"); } } catch(e) { alert(e); } } 4/)\u! R  {prototype.jsDmXф!%d R R Rxϡ//* Prototype JavaScript framework, version 1.5.0 * (c) 2005-2007 Sam Stephenson * * Prototype is freely distributable under the terms of an MIT-style license. * For details, see the Prototype web site: http://prototype.conio.net/ * /*--------------------------------------------------------------------------*/ var Prototype = { Version: '1.5.0', BrowserFeatures: { XPath: !!document.evaluate }, ScriptFragment: '(?:)((\n|\r|.)*?)(?:<\/script>)', emptyFunction: function() {}, K: function(x) { return x } } var Class = { create: function() { return function() { this.initialize.apply(this, arguments); } } } var Abstract = new Object(); Object.extend = function(destination, source) { for (var property in source) { destination[property] = source[property]; } return destination; } Object.extend(Object, { inspect: function(object) { try { if (object === undefined) return 'undefined'; if (object === null) return 'null'; return object.inspect ? object.inspect() : object.toString(); } catch (e) { if (e instanceof RangeError) return '...'; throw e; } }, keys: function(object) { var keys = []; for (var property in object) keys.push(property); return keys; }, values: function(object) { var values = []; for (var property in object) values.push(object[property]); return values; }, clone: function(object) { return Object.extend({}, object); } }); Function.prototype.bind = function() { var __method = this, args = $A(arguments), object = args.shift(); return function() { return __method.apply(object, args.concat($A(arguments))); } } Function.prototype.bindAsEventListener = function(object) { var __method = this, args = $A(arguments), object = args.shift(); return function(event) { return __method.apply(object, [( event || window.event)].concat(args).concat($A(arguments))); } } Object.extend(Number.prototype, { toColorPart: function() { var digits = this.toString(16); if (this < 16) return '0' + digits; return digits; }, succ: function() { return this + 1; }, times: function(iterator) { $R(0, this, true).each(iterator); return this; } }); var Try = { these: function() { var returnValue; for (var i = 0, length = arguments.length; i < length; i++) { var lambda = arguments[i]; try { returnValue = lambda(); break; } catch (e) {} } return returnValue; } } /*--------------------------------------------------------------------------*/ var PeriodicalExecuter = Class.create(); PeriodicalExecuter.prototype = { initialize: function(callback, frequency) { this.callback = callback; this.frequency = frequency; this.currentlyExecuting = false; this.registerCallback(); }, registerCallback: function() { this.timer = setInterval(this.onTimerEvent.bind(this), this.frequency * 1000); }, stop: function() { if (!this.timer) return; clearInterval(this.timer); this.timer = null; }, onTimerEvent: function() { if (!this.currentlyExecuting) { try { this.currentlyExecuting = true; this.callback(this); } finally { this.currentlyExecuting = false; } } } } String.interpret = function(value){ return value == null ? '' : String(value); } Object.extend(String.prototype, { gsub: function(pattern, replacement) { var result = '', source = this, match; replacement = arguments.callee.prepareReplacement(replacement); while (source.length > 0) { if (match = source.match(pattern)) { result += source.slice(0, match.index); result += String.interpret(replacement(match)); source = source.slice(match.index + match[0].length); } else { result += source, source = ''; } } DmXф!%d R R Rfb9 return result; }, sub: function(pattern, replacement, count) { replacement = this.gsub.prepareReplacement(replacement); count = count === undefined ? 1 : count; return this.gsub(pattern, function(match) { if (--count < 0) return match[0]; return replacement(match); }); }, scan: function(pattern, iterator) { this.gsub(pattern, iterator); return this; }, truncate: function(length, truncation) { length = length || 30; truncation = truncation === undefined ? '...' : truncation; return this.length > length ? this.slice(0, length - truncation.length) + truncation : this; }, strip: function() { return this.replace(/^\s+/, '').replace(/\s+$/, ''); }, stripTags: function() { return this.replace(/<\/?[^>]+>/gi, ''); }, stripScripts: function() { return this.replace(new RegExp(Prototype.ScriptFragment, 'img'), ''); }, extractScripts: function() { var matchAll = new RegExp(Prototype.ScriptFragment, 'img'); var matchOne = new RegExp(Prototype.ScriptFragment, 'im'); return (this.match(matchAll) || []).map(function(scriptTag) { return (scriptTag.match(matchOne) || ['', ''])[1]; }); }, evalScripts: function() { return this.extractScripts().map(function(script) { return eval(script) }); }, escapeHTML: function() { var div = document.createElement('div'); var text = document.createTextNode(this); div.appendChild(text); return div.innerHTML; }, unescapeHTML: function() { var div = document.createElement('div'); div.innerHTML = this.stripTags(); return div.childNodes[0] ? (div.childNodes.length > 1 ? $A(div.childNodes).inject('',function(memo,node){ return memo+node.nodeValue }) : div.childNodes[0].nodeValue) : ''; }, toQueryParams: function(separator) { var match = this.strip().match(/([^?#]*)(#.*)?$/); if (!match) return {}; return match[1].split(separator || '&').inject({}, function(hash, pair) { if ((pair = pair.split('='))[0]) { var name = decodeURIComponent(pair[0]); var value = pair[1] ? decodeURIComponent(pair[1]) : undefined; if (hash[name] !== undefined) { if (hash[name].constructor != Array) hash[name] = [hash[name]]; if (value) hash[name].push(value); } else hash[name] = value; } return hash; }); }, toArray: function() { return this.split(''); }, succ: function() { return this.slice(0, this.length - 1) + String.fromCharCode(this.charCodeAt(this.length - 1) + 1); }, camelize: function() { var parts = this.split('-'), len = parts.length; if (len == 1) return parts[0]; var camelized = this.charAt(0) == '-' ? parts[0].charAt(0).toUpperCase() + parts[0].substring(1) : parts[0]; for (var i = 1; i < len; i++) camelized += parts[i].charAt(0).toUpperCase() + parts[i].substring(1); return camelized; }, capitalize: function(){ return this.charAt(0).toUpperCase() + this.substring(1).toLowerCase(); }, underscore: function() { return this.gsub(/::/, '/').gsub(/([A-Z]+)([A-Z][a-z])/,'#{1}_#{2}').gsub(/([a-z\d])([A-Z])/,'#{1}_#{2}').gsub(/-/,'_').toLowerCase(); }, dasherize: function() { return this.gsub(/_/,'-'); }, inspect: function(useDoubleQuotes) { var escapedString = this.replace(/\\/g, '\\\\'); if (useDoubleQuotes) return '"' + escapedString.replace(/"/g, '\\"') + '"'; else return "'" + escapedString.replace(/'/g, '\\\'') + "'"; } }); String.prototype.gsub.prepareReplacement = function(replacement) { if (typeof replacement == 'function') return replacement; var template = new Template(replacement); return function(match) { return template.evaluate(match) }; } String.prototype.parseQuery = String.prototype.toQueryParams; var Template = Class.create(); Template.Pattern = /(^|.DmXф!%d R R R ra Ɋ4|\r|\n)(#\{(.*?)\})/; Template.prototype = { initialize: function(template, pattern) { this.template = template.toString(); this.pattern = pattern || Template.Pattern; }, evaluate: function(object) { return this.template.gsub(this.pattern, function(match) { var before = match[1]; if (before == '\\') return match[2]; return before + String.interpret(object[match[3]]); }); } } var $break = new Object(); var $continue = new Object(); var Enumerable = { each: function(iterator) { var index = 0; try { this._each(function(value) { try { iterator(value, index++); } catch (e) { if (e != $continue) throw e; } }); } catch (e) { if (e != $break) throw e; } return this; }, eachSlice: function(number, iterator) { var index = -number, slices = [], array = this.toArray(); while ((index += number) < array.length) slices.push(array.slice(index, index+number)); return slices.map(iterator); }, all: function(iterator) { var result = true; this.each(function(value, index) { result = result && !!(iterator || Prototype.K)(value, index); if (!result) throw $break; }); return result; }, any: function(iterator) { var result = false; this.each(function(value, index) { if (result = !!(iterator || Prototype.K)(value, index)) throw $break; }); return result; }, collect: function(iterator) { var results = []; this.each(function(value, index) { results.push((iterator || Prototype.K)(value, index)); }); return results; }, detect: function(iterator) { var result; this.each(function(value, index) { if (iterator(value, index)) { result = value; throw $break; } }); return result; }, findAll: function(iterator) { var results = []; this.each(function(value, index) { if (iterator(value, index)) results.push(value); }); return results; }, grep: function(pattern, iterator) { var results = []; this.each(function(value, index) { var stringValue = value.toString(); if (stringValue.match(pattern)) results.push((iterator || Prototype.K)(value, index)); }) return results; }, include: function(object) { var found = false; this.each(function(value) { if (value == object) { found = true; throw $break; } }); return found; }, inGroupsOf: function(number, fillWith) { fillWith = fillWith === undefined ? null : fillWith; return this.eachSlice(number, function(slice) { while(slice.length < number) slice.push(fillWith); return slice; }); }, inject: function(memo, iterator) { this.each(function(value, index) { memo = iterator(memo, value, index); }); return memo; }, invoke: function(method) { var args = $A(arguments).slice(1); return this.map(function(value) { return value[method].apply(value, args); }); }, max: function(iterator) { var result; this.each(function(value, index) { value = (iterator || Prototype.K)(value, index); if (result == undefined || value >= result) result = value; }); return result; }, min: function(iterator) { var result; this.each(function(value, index) { value = (iterator || Prototype.K)(value, index); if (result == undefined || value < result) result = value; }); return result; }, partition: function(iterator) { var trues = [], falses = []; this.each(function(value, index) { ((iterator || Prototype.K)(value, index) ? trues : falses).push(value); }); return [trues, falses]; }, pluck: function(property) { var results = []; this.each(function(value, index) { results.push(DmXф!%d R R R0 U뷎avalue[property]); }); return results; }, reject: function(iterator) { var results = []; this.each(function(value, index) { if (!iterator(value, index)) results.push(value); }); return results; }, sortBy: function(iterator) { return this.map(function(value, index) { return {value: value, criteria: iterator(value, index)}; }).sort(function(left, right) { var a = left.criteria, b = right.criteria; return a < b ? -1 : a > b ? 1 : 0; }).pluck('value'); }, toArray: function() { return this.map(); }, zip: function() { var iterator = Prototype.K, args = $A(arguments); if (typeof args.last() == 'function') iterator = args.pop(); var collections = [this].concat(args).map($A); return this.map(function(value, index) { return iterator(collections.pluck(index)); }); }, size: function() { return this.toArray().length; }, inspect: function() { return '#'; } } Object.extend(Enumerable, { map: Enumerable.collect, find: Enumerable.detect, select: Enumerable.findAll, member: Enumerable.include, entries: Enumerable.toArray }); var $A = Array.from = function(iterable) { if (!iterable) return []; if (iterable.toArray) { return iterable.toArray(); } else { var results = []; for (var i = 0, length = iterable.length; i < length; i++) results.push(iterable[i]); return results; } } Object.extend(Array.prototype, Enumerable); if (!Array.prototype._reverse) Array.prototype._reverse = Array.prototype.reverse; Object.extend(Array.prototype, { _each: function(iterator) { for (var i = 0, length = this.length; i < length; i++) iterator(this[i]); }, clear: function() { this.length = 0; return this; }, first: function() { return this[0]; }, last: function() { return this[this.length - 1]; }, compact: function() { return this.select(function(value) { return value != null; }); }, flatten: function() { return this.inject([], function(array, value) { return array.concat(value && value.constructor == Array ? value.flatten() : [value]); }); }, without: function() { var values = $A(arguments); return this.select(function(value) { return !values.include(value); }); }, indexOf: function(object) { for (var i = 0, length = this.length; i < length; i++) if (this[i] == object) return i; return -1; }, reverse: function(inline) { return (inline !== false ? this : this.toArray())._reverse(); }, reduce: function() { return this.length > 1 ? this : this[0]; }, uniq: function() { return this.inject([], function(array, value) { return array.include(value) ? array : array.concat([value]); }); }, clone: function() { return [].concat(this); }, size: function() { return this.length; }, inspect: function() { return '[' + this.map(Object.inspect).join(', ') + ']'; } }); Array.prototype.toArray = Array.prototype.clone; function $w(string){ string = string.strip(); return string ? string.split(/\s+/) : []; } if(window.opera){ Array.prototype.concat = function(){ var array = []; for(var i = 0, length = this.length; i < length; i++) array.push(this[i]); for(var i = 0, length = arguments.length; i < length; i++) { if(arguments[i].constructor == Array) { for(var j = 0, arrayLength = arguments[i].length; j < arrayLength; j++) array.push(arguments[i][j]); } else { array.push(arguments[i]); } } return array; } } var Hash = function(obj) { Object.extend(this, obj || {}); }; Object.extend(Hash, { toQueryString: function(obj) { var parts = []; this.prototype._each.call(obj, function(pair) { if (!paDmXф!%d R R R@v%UMir.key) return; if (pair.value && pair.value.constructor == Array) { var values = pair.value.compact(); if (values.length < 2) pair.value = values.reduce(); else { key = encodeURIComponent(pair.key); values.each(function(value) { value = value != undefined ? encodeURIComponent(value) : ''; parts.push(key + '=' + encodeURIComponent(value)); }); return; } } if (pair.value == undefined) pair[1] = ''; parts.push(pair.map(encodeURIComponent).join('=')); }); return parts.join('&'); } }); Object.extend(Hash.prototype, Enumerable); Object.extend(Hash.prototype, { _each: function(iterator) { for (var key in this) { var value = this[key]; if (value && value == Hash.prototype[key]) continue; var pair = [key, value]; pair.key = key; pair.value = value; iterator(pair); } }, keys: function() { return this.pluck('key'); }, values: function() { return this.pluck('value'); }, merge: function(hash) { return $H(hash).inject(this, function(mergedHash, pair) { mergedHash[pair.key] = pair.value; return mergedHash; }); }, remove: function() { var result; for(var i = 0, length = arguments.length; i < length; i++) { var value = this[arguments[i]]; if (value !== undefined){ if (result === undefined) result = value; else { if (result.constructor != Array) result = [result]; result.push(value) } } delete this[arguments[i]]; } return result; }, toQueryString: function() { return Hash.toQueryString(this); }, inspect: function() { return '#'; } }); function $H(object) { if (object && object.constructor == Hash) return object; return new Hash(object); }; ObjectRange = Class.create(); Object.extend(ObjectRange.prototype, Enumerable); Object.extend(ObjectRange.prototype, { initialize: function(start, end, exclusive) { this.start = start; this.end = end; this.exclusive = exclusive; }, _each: function(iterator) { var value = this.start; while (this.include(value)) { iterator(value); value = value.succ(); } }, include: function(value) { if (value < this.start) return false; if (this.exclusive) return value < this.end; return value <= this.end; } }); var $R = function(start, end, exclusive) { return new ObjectRange(start, end, exclusive); } var Ajax = { getTransport: function() { return Try.these( function() {return new XMLHttpRequest()}, function() {return new ActiveXObject('Msxml2.XMLHTTP')}, function() {return new ActiveXObject('Microsoft.XMLHTTP')} ) || false; }, activeRequestCount: 0 } Ajax.Responders = { responders: [], _each: function(iterator) { this.responders._each(iterator); }, register: function(responder) { if (!this.include(responder)) this.responders.push(responder); }, unregister: function(responder) { this.responders = this.responders.without(responder); }, dispatch: function(callback, request, transport, json) { this.each(function(responder) { if (typeof responder[callback] == 'function') { try { responder[callback].apply(responder, [request, transport, json]); } catch (e) {} } }); } }; Object.extend(Ajax.Responders, Enumerable); Ajax.Responders.register({ onCreate: function() { Ajax.activeRequestCount++; }, onComplete: function() { Ajax.activeRequestCount--; } }); Ajax.Base = function() {}; Ajax.Base.prototype = { setOptions: function(options) { this.options = { method: 'post', asynchronous: true, DmXф!%d R R RP̂w contentType: 'application/x-www-form-urlencoded', encoding: 'UTF-8', parameters: '' } Object.extend(this.options, options || {}); this.options.method = this.options.method.toLowerCase(); if (typeof this.options.parameters == 'string') this.options.parameters = this.options.parameters.toQueryParams(); } } Ajax.Request = Class.create(); Ajax.Request.Events = ['Uninitialized', 'Loading', 'Loaded', 'Interactive', 'Complete']; Ajax.Request.prototype = Object.extend(new Ajax.Base(), { _complete: false, initialize: function(url, options) { this.transport = Ajax.getTransport(); this.setOptions(options); this.request(url); }, request: function(url) { this.url = url; this.method = this.options.method; var params = this.options.parameters; if (!['get', 'post'].include(this.method)) { // simulate other verbs over post params['_method'] = this.method; this.method = 'post'; } params = Hash.toQueryString(params); if (params && /Konqueror|Safari|KHTML/.test(navigator.userAgent)) params += '&_=' // when GET, append parameters to URL if (this.method == 'get' && params) this.url += (this.url.indexOf('?') > -1 ? '&' : '?') + params; try { Ajax.Responders.dispatch('onCreate', this, this.transport); this.transport.open(this.method.toUpperCase(), this.url, this.options.asynchronous); if (this.options.asynchronous) setTimeout(function() { this.respondToReadyState(1) }.bind(this), 10); this.transport.onreadystatechange = this.onStateChange.bind(this); this.setRequestHeaders(); var body = this.method == 'post' ? (this.options.postBody || params) : null; this.transport.send(body); /* Force Firefox to handle ready state 4 for synchronous requests */ if (!this.options.asynchronous && this.transport.overrideMimeType) this.onStateChange(); } catch (e) { this.dispatchException(e); } }, onStateChange: function() { var readyState = this.transport.readyState; if (readyState > 1 && !((readyState == 4) && this._complete)) this.respondToReadyState(this.transport.readyState); }, setRequestHeaders: function() { var headers = { 'X-Requested-With': 'XMLHttpRequest', 'X-Prototype-Version': Prototype.Version, 'Accept': 'text/javascript, text/html, application/xml, text/xml, */*' }; if (this.method == 'post') { headers['Content-type'] = this.options.contentType + (this.options.encoding ? '; charset=' + this.options.encoding : ''); /* Force "Connection: close" for older Mozilla browsers to work * around a bug where XMLHttpRequest sends an incorrect * Content-length header. See Mozilla Bugzilla #246651. */ if (this.transport.overrideMimeType && (navigator.userAgent.match(/Gecko\/(\d{4})/) || [0,2005])[1] < 2005) headers['Connection'] = 'close'; } // user-defined headers if (typeof this.options.requestHeaders == 'object') { var extras = this.options.requestHeaders; if (typeof extras.push == 'function') for (var i = 0, length = extras.length; i < length; i += 2) headers[extras[i]] = extras[i+1]; else $H(extras).each(function(pair) { headers[pair.key] = pair.value }); } for (var name in headers) this.transport.setRequestHeader(name, headers[name]); }, success: function() { return !this.transport.status || (this.transport.status >= 200 && this.transport.status < 300); }, respondToReadyState: function(readyState) { var state = Ajax.Request.Events[readyState]; var transport = this.transport, json = this.evalJSON(); if (state == 'Complete') { try { this._complete = true; (this.options['on' + this.transport.status] || this.options['on' + (this.success() ? 'DmXф!%d R R R`EToSuccess' : 'Failure')] || Prototype.emptyFunction)(transport, json); } catch (e) { this.dispatchException(e); } if ((this.getHeader('Content-type') || 'text/javascript').strip(). match(/^(text|application)\/(x-)?(java|ecma)script(;.*)?$/i)) this.evalResponse(); } try { (this.options['on' + state] || Prototype.emptyFunction)(transport, json); Ajax.Responders.dispatch('on' + state, this, transport, json); } catch (e) { this.dispatchException(e); } if (state == 'Complete') { // avoid memory leak in MSIE: clean up this.transport.onreadystatechange = Prototype.emptyFunction; } }, getHeader: function(name) { try { return this.transport.getResponseHeader(name); } catch (e) { return null } }, evalJSON: function() { try { var json = this.getHeader('X-JSON'); return json ? eval('(' + json + ')') : null; } catch (e) { return null } }, evalResponse: function() { try { return eval(this.transport.responseText); } catch (e) { this.dispatchException(e); } }, dispatchException: function(exception) { (this.options.onException || Prototype.emptyFunction)(this, exception); Ajax.Responders.dispatch('onException', this, exception); } }); Ajax.Updater = Class.create(); Object.extend(Object.extend(Ajax.Updater.prototype, Ajax.Request.prototype), { initialize: function(container, url, options) { this.container = { success: (container.success || container), failure: (container.failure || (container.success ? null : container)) } this.transport = Ajax.getTransport(); this.setOptions(options); var onComplete = this.options.onComplete || Prototype.emptyFunction; this.options.onComplete = (function(transport, param) { this.updateContent(); onComplete(transport, param); }).bind(this); this.request(url); }, updateContent: function() { var receiver = this.container[this.success() ? 'success' : 'failure']; var response = this.transport.responseText; if (!this.options.evalScripts) response = response.stripScripts(); if (receiver = $(receiver)) { if (this.options.insertion) new this.options.insertion(receiver, response); else receiver.update(response); } if (this.success()) { if (this.onComplete) setTimeout(this.onComplete.bind(this), 10); } } }); Ajax.PeriodicalUpdater = Class.create(); Ajax.PeriodicalUpdater.prototype = Object.extend(new Ajax.Base(), { initialize: function(container, url, options) { this.setOptions(options); this.onComplete = this.options.onComplete; this.frequency = (this.options.frequency || 2); this.decay = (this.options.decay || 1); this.updater = {}; this.container = container; this.url = url; this.start(); }, start: function() { this.options.onComplete = this.updateComplete.bind(this); this.onTimerEvent(); }, stop: function() { this.updater.options.onComplete = undefined; clearTimeout(this.timer); (this.onComplete || Prototype.emptyFunction).apply(this, arguments); }, updateComplete: function(request) { if (this.options.decay) { this.decay = (request.responseText == this.lastText ? this.decay * this.options.decay : 1); this.lastText = request.responseText; } this.timer = setTimeout(this.onTimerEvent.bind(this), this.decay * this.frequency * 1000); }, onTimerEvent: function() { this.updater = new Ajax.Updater(this.container, this.url, this.options); } }); function $(element) { if (arguments.length > 1) { for (var i = 0, elements = [], length = arguments.length; i < length; i++) elements.push($(arguments[i])); return elements; } if (typeof element == 'string') element = document.getElementById(element); return EleDmXф!%d R R RpOment.extend(element); } if (Prototype.BrowserFeatures.XPath) { document._getElementsByXPath = function(expression, parentElement) { var results = []; var query = document.evaluate(expression, $(parentElement) || document, null, XPathResult.ORDERED_NODE_SNAPSHOT_TYPE, null); for (var i = 0, length = query.snapshotLength; i < length; i++) results.push(query.snapshotItem(i)); return results; }; } document.getElementsByClassName = function(className, parentElement) { if (Prototype.BrowserFeatures.XPath) { var q = ".//*[contains(concat(' ', @class, ' '), ' " + className + " ')]"; return document._getElementsByXPath(q, parentElement); } else { var children = ($(parentElement) || document.body).getElementsByTagName('*'); var elements = [], child; for (var i = 0, length = children.length; i < length; i++) { child = children[i]; if (Element.hasClassName(child, className)) elements.push(Element.extend(child)); } return elements; } }; /*--------------------------------------------------------------------------*/ if (!window.Element) var Element = new Object(); Element.extend = function(element) { if (!element || _nativeExtensions || element.nodeType == 3) return element; if (!element._extended && element.tagName && element != window) { var methods = Object.clone(Element.Methods), cache = Element.extend.cache; if (element.tagName == 'FORM') Object.extend(methods, Form.Methods); if (['INPUT', 'TEXTAREA', 'SELECT'].include(element.tagName)) Object.extend(methods, Form.Element.Methods); Object.extend(methods, Element.Methods.Simulated); for (var property in methods) { var value = methods[property]; if (typeof value == 'function' && !(property in element)) element[property] = cache.findOrStore(value); } } element._extended = true; return element; }; Element.extend.cache = { findOrStore: function(value) { return this[value] = this[value] || function() { return value.apply(null, [this].concat($A(arguments))); } } }; Element.Methods = { visible: function(element) { return $(element).style.display != 'none'; }, toggle: function(element) { element = $(element); Element[Element.visible(element) ? 'hide' : 'show'](element); return element; }, hide: function(element) { $(element).style.display = 'none'; return element; }, show: function(element) { $(element).style.display = ''; return element; }, remove: function(element) { element = $(element); element.parentNode.removeChild(element); return element; }, update: function(element, html) { html = typeof html == 'undefined' ? '' : html.toString(); $(element).innerHTML = html.stripScripts(); setTimeout(function() {html.evalScripts()}, 10); return element; }, replace: function(element, html) { element = $(element); html = typeof html == 'undefined' ? '' : html.toString(); if (element.outerHTML) { element.outerHTML = html.stripScripts(); } else { var range = element.ownerDocument.createRange(); range.selectNodeContents(element); element.parentNode.replaceChild( range.createContextualFragment(html.stripScripts()), element); } setTimeout(function() {html.evalScripts()}, 10); return element; }, inspect: function(element) { element = $(element); var result = '<' + element.tagName.toLowerCase(); $H({'id': 'id', 'className': 'class'}).each(function(pair) { var property = pair.first(), attribute = pair.last(); var value = (element[property] || '').toString(); if (value) result += ' ' + attribute + '=' + value.inspect(true); }); return result + '>'; }, recursivelyCollect: function(element, property) { element = $(element); var elements = []; while (element = element[property]) if (elem\ }@! %d R R R  dJent.nodeType == 1) elements.push(Element.extend(element)); return elements; }, ancestors: function(element) { return $(element).recursivelyCollect('parentNode'); }, descendants: function(element) { return $A($(element).getElementsByTagName('*')); }, immediateDescendants: function(element) { if (!(element = $(element).firstChild)) return []; while (element && element.nodeType != 1) element = element.nextSibling; if (element) return [element].concat($(element).nextSiblings()); return []; }, previousSiblings: function(element) { return $(element).recursivelyCollect('previousSibling'); }, nextSiblings: function(element) { return $(element).recursivelyCollect('nextSibling'); }, siblings: function(element) { element = $(element); return element.previousSiblings().reverse().concat(element.nextSiblings()); }, match: function(element, selector) { if (typeof selector == 'string') selector = new Selector(selector); return selector.match($(element)); }, up: function(element, expression, index) { return Selector.findElement($(element).ancestors(), expression, index); }, down: function(element, expression, index) { return Selector.findElement($(element).descendants(), expression, index); }, previous: function(element, expression, index) { return Selector.findElement($(element).previousSiblings(), expression, index); }, next: function(element, expression, index) { return Selector.findElement($(element).nextSiblings(), expression, index); }, getElementsBySelector: function() { var args = $A(arguments), element = $(args.shift()); return Selector.findChildElements(element, args); }, getElementsByClassName: function(element, className) { return document.getElementsByClassName(className, element); }, readAttribute: function(element, name) { element = $(element); if (document.all && !window.opera) { var t = Element._attributeTranslations; if (t.values[name]) return t.values[name](element, name); if (t.names[name]) name = t.names[name]; var attribute = element.attributes[name]; if(attribute) return attribute.nodeValue; } return element.getAttribute(name); }, getHeight: function(element) { return $(element).getDimensions().height; }, getWidth: function(element) { return $(element).getDimensions().width; }, classNames: function(element) { return new Element.ClassNames(element); }, hasClassName: function(element, className) { if (!(element = $(element))) return; var elementClassName = element.className; if (elementClassName.length == 0) return false; if (elementClassName == className || elementClassName.match(new RegExp("(^|\\s)" + className + "(\\s|$)"))) return true; return false; }, addClassName: function(element, className) { if (!(element = $(element))) return; Element.classNam,-la! %d R R R|!:es(element).add(className); return element; }, removeClassName: function(element, className) { if (!(element = $(element))) return; Element.classNames(element).remove(className); return element; }, toggleClassName: function(element, className) { if (!(element = $(element))) return; Element.classNames(element)[element.hasClassName(className) ? 'remove' : 'add'](className); return element; }, observe: function() { Event.observe.apply(Event, arguments); return $A(arguments).first(); }, stopObserving: function() { Event.stopObserving.apply(Event, arguments); return $A(arguments).first(); }, // removes whitespace-only text node children cleanWhitespace: function(element) { element = $(element); var node = element.firstChild; while (node) { var nextNode = node.nextSibling; if (node.nodeType == 3 && !/\S/.test(node.nodeValue)) element.removeChild(node); DmXф! %d R R R$ node = nextNode; } return element; }, empty: function(element) { return $(element).innerHTML.match(/^\s*$/); }, descendantOf: function(element, ancestor) { element = $(element), ancestor = $(ancestor); while (element = element.parentNode) if (element == ancestor) return true; return false; }, scrollTo: function(element) { element = $(element); var pos = Position.cumulativeOffset(element); window.scrollTo(pos[0], pos[1]); return element; }, getStyle: function(element, style) { element = $(element); if (['float','cssFloat'].include(style)) style = (typeof element.style.styleFloat != 'undefined' ? 'styleFloat' : 'cssFloat'); style = style.camelize(); var value = element.style[style]; if (!value) { if (document.defaultView && document.defaultView.getComputedStyle) { var css = document.defaultView.getComputedStyle(element, null); value = css ? css[style] : null; } else if (element.currentStyle) { value = element.currentStyle[style]; } } if((value == 'auto') && ['width','height'].include(style) && (element.getStyle('display') != 'none')) value = element['offset'+style.capitalize()] + 'px'; if (window.opera && ['left', 'top', 'right', 'bottom'].include(style)) if (Element.getStyle(element, 'position') == 'static') value = 'auto'; if(style == 'opacity') { if(value) return parseFloat(value); if(value = (element.getStyle('filter') || '').match(/alpha\(opacity=(.*)\)/)) if(value[1]) return parseFloat(value[1]) / 100; return 1.0; } return value == 'auto' ? null : value; }, setStyle: function(element, style) { element = $(element); for (var name in style) { var value = style[name]; if(name == 'opacity') { if (value == 1) { value = (/Gecko/.test(navigator.userAgent) && !/Konqueror|Safari|KHTML/.test(navigator.userAgent)) ? 0.999999 : 1.0; if(/MSIE/.test(navigator.userAgent) && !window.opera) element.style.filter = element.getStyle('filter').replace(/alpha\([^\)]*\)/gi,''); } else if(value == '') { if(/MSIE/.test(navigator.userAgent) && !window.opera) element.style.filter = element.getStyle('filter').replace(/alpha\([^\)]*\)/gi,''); } else { if(value < 0.00001) value = 0; if(/MSIE/.test(navigator.userAgent) && !window.opera) element.style.filter = element.getStyle('filter').replace(/alpha\([^\)]*\)/gi,'') + 'alpha(opacity='+value*100+')'; } } else if(['float','cssFloat'].include(name)) name = (typeof element.style.styleFloat != 'undefined') ? 'styleFloat' : 'cssFloat'; element.style[name.camelize()] = value; } return element; }, getDimensions: function(element) { element = $(element); var display = $(element).getStyle('display'); if (display != 'none' && display != null) // Safari bug return {width: element.offsetWidth, height: element.offsetHeight}; // All *Width and *Height properties give 0 on elements with display none, // so enable the element temporarily var els = element.style; var originalVisibility = els.visibility; var originalPosition = els.position; var originalDisplay = els.display; els.visibility = 'hidden'; els.position = 'absolute'; els.display = 'block'; var originalWidth = element.clientWidth; var originalHeight = element.clientHeight; els.display = originalDisplay; els.position = originalPosition; els.visibility = originalVisibility; return {width: originalWidth, height: originalHeight}; }, makePositioned: function(element) { element = $(element); var pos = Element.getStyle(element, 'position'); if (pos == 'static' || !pos) { element._madePositioned = true; element.style.position = 'relative'; // Opera returns the DmXф! %d R R R)N[offset relative to the positioning context, when an // element is position relative but top and left have not been defined if (window.opera) { element.style.top = 0; element.style.left = 0; } } return element; }, undoPositioned: function(element) { element = $(element); if (element._madePositioned) { element._madePositioned = undefined; element.style.position = element.style.top = element.style.left = element.style.bottom = element.style.right = ''; } return element; }, makeClipping: function(element) { element = $(element); if (element._overflow) return element; element._overflow = element.style.overflow || 'auto'; if ((Element.getStyle(element, 'overflow') || 'visible') != 'hidden') element.style.overflow = 'hidden'; return element; }, undoClipping: function(element) { element = $(element); if (!element._overflow) return element; element.style.overflow = element._overflow == 'auto' ? '' : element._overflow; element._overflow = null; return element; } }; Object.extend(Element.Methods, {childOf: Element.Methods.descendantOf}); Element._attributeTranslations = {}; Element._attributeTranslations.names = { colspan: "colSpan", rowspan: "rowSpan", valign: "vAlign", datetime: "dateTime", accesskey: "accessKey", tabindex: "tabIndex", enctype: "encType", maxlength: "maxLength", readonly: "readOnly", longdesc: "longDesc" }; Element._attributeTranslations.values = { _getAttr: function(element, attribute) { return element.getAttribute(attribute, 2); }, _flag: function(element, attribute) { return $(element).hasAttribute(attribute) ? attribute : null; }, style: function(element) { return element.style.cssText.toLowerCase(); }, title: function(element) { var node = element.getAttributeNode('title'); return node.specified ? node.nodeValue : null; } }; Object.extend(Element._attributeTranslations.values, { href: Element._attributeTranslations.values._getAttr, src: Element._attributeTranslations.values._getAttr, disabled: Element._attributeTranslations.values._flag, checked: Element._attributeTranslations.values._flag, readonly: Element._attributeTranslations.values._flag, multiple: Element._attributeTranslations.values._flag }); Element.Methods.Simulated = { hasAttribute: function(element, attribute) { var t = Element._attributeTranslations; attribute = t.names[attribute] || attribute; return $(element).getAttributeNode(attribute).specified; } }; // IE is missing .innerHTML support for TABLE-related elements if (document.all && !window.opera){ Element.Methods.update = function(element, html) { element = $(element); html = typeof html == 'undefined' ? '' : html.toString(); var tagName = element.tagName.toUpperCase(); if (['THEAD','TBODY','TR','TD'].include(tagName)) { var div = document.createElement('div'); switch (tagName) { case 'THEAD': case 'TBODY': div.innerHTML = '' + html.stripScripts() + '
    '; depth = 2; break; case 'TR': div.innerHTML = '' + html.stripScripts() + '
    '; depth = 3; break; case 'TD': div.innerHTML = '
    ' + html.stripScripts() + '
    '; depth = 4; } $A(element.childNodes).each(function(node){ element.removeChild(node) }); depth.times(function(){ div = div.firstChild }); $A(div.childNodes).each( function(node){ element.appendChild(node) }); } else { element.innerHTML = html.stripScripts(); } setTimeout(function() {html.evalScripts()}, 10); return element; } }; Object.extend(Element, Element.Methods);DmXф! %d R R RKLjc var _nativeExtensions = false; if(/Konqueror|Safari|KHTML/.test(navigator.userAgent)) ['', 'Form', 'Input', 'TextArea', 'Select'].each(function(tag) { var className = 'HTML' + tag + 'Element'; if(window[className]) return; var klass = window[className] = {}; klass.prototype = document.createElement(tag ? tag.toLowerCase() : 'div').__proto__; }); Element.addMethods = function(methods) { Object.extend(Element.Methods, methods || {}); function copy(methods, destination, onlyIfAbsent) { onlyIfAbsent = onlyIfAbsent || false; var cache = Element.extend.cache; for (var property in methods) { var value = methods[property]; if (!onlyIfAbsent || !(property in destination)) destination[property] = cache.findOrStore(value); } } if (typeof HTMLElement != 'undefined') { copy(Element.Methods, HTMLElement.prototype); copy(Element.Methods.Simulated, HTMLElement.prototype, true); copy(Form.Methods, HTMLFormElement.prototype); [HTMLInputElement, HTMLTextAreaElement, HTMLSelectElement].each(function(klass) { copy(Form.Element.Methods, klass.prototype); }); _nativeExtensions = true; } } var Toggle = new Object(); Toggle.display = Element.toggle; /*--------------------------------------------------------------------------*/ Abstract.Insertion = function(adjacency) { this.adjacency = adjacency; } Abstract.Insertion.prototype = { initialize: function(element, content) { this.element = $(element); this.content = content.stripScripts(); if (this.adjacency && this.element.insertAdjacentHTML) { try { this.element.insertAdjacentHTML(this.adjacency, this.content); } catch (e) { var tagName = this.element.tagName.toUpperCase(); if (['TBODY', 'TR'].include(tagName)) { this.insertContent(this.contentFromAnonymousTable()); } else { throw e; } } } else { this.range = this.element.ownerDocument.createRange(); if (this.initializeRange) this.initializeRange(); this.insertContent([this.range.createContextualFragment(this.content)]); } setTimeout(function() {content.evalScripts()}, 10); }, contentFromAnonymousTable: function() { var div = document.createElement('div'); div.innerHTML = '' + this.content + '
    '; return $A(div.childNodes[0].childNodes[0].childNodes); } } var Insertion = new Object(); Insertion.Before = Class.create(); Insertion.Before.prototype = Object.extend(new Abstract.Insertion('beforeBegin'), { initializeRange: function() { this.range.setStartBefore(this.element); }, insertContent: function(fragments) { fragments.each((function(fragment) { this.element.parentNode.insertBefore(fragment, this.element); }).bind(this)); } }); Insertion.Top = Class.create(); Insertion.Top.prototype = Object.extend(new Abstract.Insertion('afterBegin'), { initializeRange: function() { this.range.selectNodeContents(this.element); this.range.collapse(true); }, insertContent: function(fragments) { fragments.reverse(false).each((function(fragment) { this.element.insertBefore(fragment, this.element.firstChild); }).bind(this)); } }); Insertion.Bottom = Class.create(); Insertion.Bottom.prototype = Object.extend(new Abstract.Insertion('beforeEnd'), { initializeRange: function() { this.range.selectNodeContents(this.element); this.range.collapse(this.element); }, insertContent: function(fragments) { fragments.each((function(fragment) { this.element.appendChild(fragment); }).bind(this)); } }); Insertion.After = Class.create(); Insertion.After.prototype = Object.extend(new Abstract.Insertion('afterEnd'), { initializeRange: function() { this.range.setStartAfter(this.element); }, insertContent: function(fragments) { fragments.each((function(fragment) { this.element.DmXф!%d R R R-i(5parentNode.insertBefore(fragment, this.element.nextSibling); }).bind(this)); } }); /*--------------------------------------------------------------------------*/ Element.ClassNames = Class.create(); Element.ClassNames.prototype = { initialize: function(element) { this.element = $(element); }, _each: function(iterator) { this.element.className.split(/\s+/).select(function(name) { return name.length > 0; })._each(iterator); }, set: function(className) { this.element.className = className; }, add: function(classNameToAdd) { if (this.include(classNameToAdd)) return; this.set($A(this).concat(classNameToAdd).join(' ')); }, remove: function(classNameToRemove) { if (!this.include(classNameToRemove)) return; this.set($A(this).without(classNameToRemove).join(' ')); }, toString: function() { return $A(this).join(' '); } }; Object.extend(Element.ClassNames.prototype, Enumerable); var Selector = Class.create(); Selector.prototype = { initialize: function(expression) { this.params = {classNames: []}; this.expression = expression.toString().strip(); this.parseExpression(); this.compileMatcher(); }, parseExpression: function() { function abort(message) { throw 'Parse error in selector: ' + message; } if (this.expression == '') abort('empty expression'); var params = this.params, expr = this.expression, match, modifier, clause, rest; while (match = expr.match(/^(.*)\[([a-z0-9_:-]+?)(?:([~\|!]?=)(?:"([^"]*)"|([^\]\s]*)))?\]$/i)) { params.attributes = params.attributes || []; params.attributes.push({name: match[2], operator: match[3], value: match[4] || match[5] || ''}); expr = match[1]; } if (expr == '*') return this.params.wildcard = true; while (match = expr.match(/^([^a-z0-9_-])?([a-z0-9_-]+)(.*)/i)) { modifier = match[1], clause = match[2], rest = match[3]; switch (modifier) { case '#': params.id = clause; break; case '.': params.classNames.push(clause); break; case '': case undefined: params.tagName = clause.toUpperCase(); break; default: abort(expr.inspect()); } expr = rest; } if (expr.length > 0) abort(expr.inspect()); }, buildMatchExpression: function() { var params = this.params, conditions = [], clause; if (params.wildcard) conditions.push('true'); if (clause = params.id) conditions.push('element.readAttribute("id") == ' + clause.inspect()); if (clause = params.tagName) conditions.push('element.tagName.toUpperCase() == ' + clause.inspect()); if ((clause = params.classNames).length > 0) for (var i = 0, length = clause.length; i < length; i++) conditions.push('element.hasClassName(' + clause[i].inspect() + ')'); if (clause = params.attributes) { clause.each(function(attribute) { var value = 'element.readAttribute(' + attribute.name.inspect() + ')'; var splitValueBy = function(delimiter) { return value + ' && ' + value + '.split(' + delimiter.inspect() + ')'; } switch (attribute.operator) { case '=': conditions.push(value + ' == ' + attribute.value.inspect()); break; case '~=': conditions.push(splitValueBy(' ') + '.include(' + attribute.value.inspect() + ')'); break; case '|=': conditions.push( splitValueBy('-') + '.first().toUpperCase() == ' + attribute.value.toUpperCase().inspect() ); break; case '!=': conditions.push(value + ' != ' + attribute.value.inspect()); break; case '': case undefined: conditions.push('element.hasAttribute(' + attribute.name.inspect() + ')'); break; default: throw 'Unknown operator ' + attribute.operator + ' in selector'; } }); } return conditions.join(' && '); },DmXф!%d R R RfND compileMatcher: function() { this.match = new Function('element', 'if (!element.tagName) return false; \ element = $(element); \ return ' + this.buildMatchExpression()); }, findElements: function(scope) { var element; if (element = $(this.params.id)) if (this.match(element)) if (!scope || Element.childOf(element, scope)) return [element]; scope = (scope || document).getElementsByTagName(this.params.tagName || '*'); var results = []; for (var i = 0, length = scope.length; i < length; i++) if (this.match(element = scope[i])) results.push(Element.extend(element)); return results; }, toString: function() { return this.expression; } } Object.extend(Selector, { matchElements: function(elements, expression) { var selector = new Selector(expression); return elements.select(selector.match.bind(selector)).map(Element.extend); }, findElement: function(elements, expression, index) { if (typeof expression == 'number') index = expression, expression = false; return Selector.matchElements(elements, expression || '*')[index || 0]; }, findChildElements: function(element, expressions) { return expressions.map(function(expression) { return expression.match(/[^\s"]+(?:"[^"]*"[^\s"]+)*/g).inject([null], function(results, expr) { var selector = new Selector(expr); return results.inject([], function(elements, result) { return elements.concat(selector.findElements(result || element)); }); }); }).flatten(); } }); function $$() { return Selector.findChildElements(document, $A(arguments)); } var Form = { reset: function(form) { $(form).reset(); return form; }, serializeElements: function(elements, getHash) { var data = elements.inject({}, function(result, element) { if (!element.disabled && element.name) { var key = element.name, value = $(element).getValue(); if (value != undefined) { if (result[key]) { if (result[key].constructor != Array) result[key] = [result[key]]; result[key].push(value); } else result[key] = value; } } return result; }); return getHash ? data : Hash.toQueryString(data); } }; Form.Methods = { serialize: function(form, getHash) { return Form.serializeElements(Form.getElements(form), getHash); }, getElements: function(form) { return $A($(form).getElementsByTagName('*')).inject([], function(elements, child) { if (Form.Element.Serializers[child.tagName.toLowerCase()]) elements.push(Element.extend(child)); return elements; } ); }, getInputs: function(form, typeName, name) { form = $(form); var inputs = form.getElementsByTagName('input'); if (!typeName && !name) return $A(inputs).map(Element.extend); for (var i = 0, matchingInputs = [], length = inputs.length; i < length; i++) { var input = inputs[i]; if ((typeName && input.type != typeName) || (name && input.name != name)) continue; matchingInputs.push(Element.extend(input)); } return matchingInputs; }, disable: function(form) { form = $(form); form.getElements().each(function(element) { element.blur(); element.disabled = 'true'; }); return form; }, enable: function(form) { form = $(form); form.getElements().each(function(element) { element.disabled = ''; }); return form; }, findFirstElement: function(form) { return $(form).getElements().find(function(element) { return element.type != 'hidden' && !element.disabled && ['input', 'select', 'textarea'].include(element.tagName.toLowerCase()); }); }, focusFirstElement: function(form) { form = $(form); form.findFirstElement().activate(); return form; } } Object.extenDmXф!%d R R Rw d(Form, Form.Methods); /*--------------------------------------------------------------------------*/ Form.Element = { focus: function(element) { $(element).focus(); return element; }, select: function(element) { $(element).select(); return element; } } Form.Element.Methods = { serialize: function(element) { element = $(element); if (!element.disabled && element.name) { var value = element.getValue(); if (value != undefined) { var pair = {}; pair[element.name] = value; return Hash.toQueryString(pair); } } return ''; }, getValue: function(element) { element = $(element); var method = element.tagName.toLowerCase(); return Form.Element.Serializers[method](element); }, clear: function(element) { $(element).value = ''; return element; }, present: function(element) { return $(element).value != ''; }, activate: function(element) { element = $(element); element.focus(); if (element.select && ( element.tagName.toLowerCase() != 'input' || !['button', 'reset', 'submit'].include(element.type) ) ) element.select(); return element; }, disable: function(element) { element = $(element); element.disabled = true; return element; }, enable: function(element) { element = $(element); element.blur(); element.disabled = false; return element; } } Object.extend(Form.Element, Form.Element.Methods); var Field = Form.Element; var $F = Form.Element.getValue; /*--------------------------------------------------------------------------*/ Form.Element.Serializers = { input: function(element) { switch (element.type.toLowerCase()) { case 'checkbox': case 'radio': return Form.Element.Serializers.inputSelector(element); default: return Form.Element.Serializers.textarea(element); } }, inputSelector: function(element) { return element.checked ? element.value : null; }, textarea: function(element) { return element.value; }, select: function(element) { return this[element.type == 'select-one' ? 'selectOne' : 'selectMany'](element); }, selectOne: function(element) { var index = element.selectedIndex; return index >= 0 ? this.optionValue(element.options[index]) : null; }, selectMany: function(element) { var values, length = element.length; if (!length) return null; for (var i = 0, values = []; i < length; i++) { var opt = element.options[i]; if (opt.selected) values.push(this.optionValue(opt)); } return values; }, optionValue: function(opt) { // extend element because hasAttribute may not be native return Element.extend(opt).hasAttribute('value') ? opt.value : opt.text; } } /*--------------------------------------------------------------------------*/ Abstract.TimedObserver = function() {} Abstract.TimedObserver.prototype = { initialize: function(element, frequency, callback) { this.frequency = frequency; this.element = $(element); this.callback = callback; this.lastValue = this.getValue(); this.registerCallback(); }, registerCallback: function() { setInterval(this.onTimerEvent.bind(this), this.frequency * 1000); }, onTimerEvent: function() { var value = this.getValue(); var changed = ('string' == typeof this.lastValue && 'string' == typeof value ? this.lastValue != value : String(this.lastValue) != String(value)); if (changed) { this.callback(this.element, value); this.lastValue = value; } } } Form.Element.Observer = Class.create(); Form.Element.Observer.prototype = Object.extend(new Abstract.TimedObserver(), { getValue: function() { return Form.Element.getValue(this.element); } }); Form.Observer = Class.create(); Form.Observer.prototype = Object.extend(new Abstract.TimedObserver()DmXф!%d R R RuT$ij, { getValue: function() { return Form.serialize(this.element); } }); /*--------------------------------------------------------------------------*/ Abstract.EventObserver = function() {} Abstract.EventObserver.prototype = { initialize: function(element, callback) { this.element = $(element); this.callback = callback; this.lastValue = this.getValue(); if (this.element.tagName.toLowerCase() == 'form') this.registerFormCallbacks(); else this.registerCallback(this.element); }, onElementEvent: function() { var value = this.getValue(); if (this.lastValue != value) { this.callback(this.element, value); this.lastValue = value; } }, registerFormCallbacks: function() { Form.getElements(this.element).each(this.registerCallback.bind(this)); }, registerCallback: function(element) { if (element.type) { switch (element.type.toLowerCase()) { case 'checkbox': case 'radio': Event.observe(element, 'click', this.onElementEvent.bind(this)); break; default: Event.observe(element, 'change', this.onElementEvent.bind(this)); break; } } } } Form.Element.EventObserver = Class.create(); Form.Element.EventObserver.prototype = Object.extend(new Abstract.EventObserver(), { getValue: function() { return Form.Element.getValue(this.element); } }); Form.EventObserver = Class.create(); Form.EventObserver.prototype = Object.extend(new Abstract.EventObserver(), { getValue: function() { return Form.serialize(this.element); } }); if (!window.Event) { var Event = new Object(); } Object.extend(Event, { KEY_BACKSPACE: 8, KEY_TAB: 9, KEY_RETURN: 13, KEY_ESC: 27, KEY_LEFT: 37, KEY_UP: 38, KEY_RIGHT: 39, KEY_DOWN: 40, KEY_DELETE: 46, KEY_HOME: 36, KEY_END: 35, KEY_PAGEUP: 33, KEY_PAGEDOWN: 34, element: function(event) { return event.target || event.srcElement; }, isLeftClick: function(event) { return (((event.which) && (event.which == 1)) || ((event.button) && (event.button == 1))); }, pointerX: function(event) { return event.pageX || (event.clientX + (document.documentElement.scrollLeft || document.body.scrollLeft)); }, pointerY: function(event) { return event.pageY || (event.clientY + (document.documentElement.scrollTop || document.body.scrollTop)); }, stop: function(event) { if (event.preventDefault) { event.preventDefault(); event.stopPropagation(); } else { event.returnValue = false; event.cancelBubble = true; } }, // find the first node with the given tagName, starting from the // node the event was triggered on; traverses the DOM upwards findElement: function(event, tagName) { var element = Event.element(event); while (element.parentNode && (!element.tagName || (element.tagName.toUpperCase() != tagName.toUpperCase()))) element = element.parentNode; return element; }, observers: false, _observeAndCache: function(element, name, observer, useCapture) { if (!this.observers) this.observers = []; if (element.addEventListener) { this.observers.push([element, name, observer, useCapture]); element.addEventListener(name, observer, useCapture); } else if (element.attachEvent) { this.observers.push([element, name, observer, useCapture]); element.attachEvent('on' + name, observer); } }, unloadCache: function() { if (!Event.observers) return; for (var i = 0, length = Event.observers.length; i < length; i++) { Event.stopObserving.apply(this, Event.observers[i]); Event.observers[i][0] = null; } Event.observers = false; }, observe: function(element, name, observer, useCapture) { element = $(element); useCapture = useCapture || false; if (name =DmXф!%d R R R= 'keypress' && (navigator.appVersion.match(/Konqueror|Safari|KHTML/) || element.attachEvent)) name = 'keydown'; Event._observeAndCache(element, name, observer, useCapture); }, stopObserving: function(element, name, observer, useCapture) { element = $(element); useCapture = useCapture || false; if (name == 'keypress' && (navigator.appVersion.match(/Konqueror|Safari|KHTML/) || element.detachEvent)) name = 'keydown'; if (element.removeEventListener) { element.removeEventListener(name, observer, useCapture); } else if (element.detachEvent) { try { element.detachEvent('on' + name, observer); } catch (e) {} } } }); /* prevent memory leaks in IE */ if (navigator.appVersion.match(/\bMSIE\b/)) Event.observe(window, 'unload', Event.unloadCache, false); var Position = { // set to true if needed, warning: firefox performance problems // NOT neeeded for page scrolling, only if draggable contained in // scrollable elements includeScrollOffsets: false, // must be called before calling withinIncludingScrolloffset, every time the // page is scrolled prepare: function() { this.deltaX = window.pageXOffset || document.documentElement.scrollLeft || document.body.scrollLeft || 0; this.deltaY = window.pageYOffset || document.documentElement.scrollTop || document.body.scrollTop || 0; }, realOffset: function(element) { var valueT = 0, valueL = 0; do { valueT += element.scrollTop || 0; valueL += element.scrollLeft || 0; element = element.parentNode; } while (element); return [valueL, valueT]; }, cumulativeOffset: function(element) { var valueT = 0, valueL = 0; do { valueT += element.offsetTop || 0; valueL += element.offsetLeft || 0; element = element.offsetParent; } while (element); return [valueL, valueT]; }, positionedOffset: function(element) { var valueT = 0, valueL = 0; do { valueT += element.offsetTop || 0; valueL += element.offsetLeft || 0; element = element.offsetParent; if (element) { if(element.tagName=='BODY') break; var p = Element.getStyle(element, 'position'); if (p == 'relative' || p == 'absolute') break; } } while (element); return [valueL, valueT]; }, offsetParent: function(element) { if (element.offsetParent) return element.offsetParent; if (element == document.body) return element; while ((element = element.parentNode) && element != document.body) if (Element.getStyle(element, 'position') != 'static') return element; return document.body; }, // caches x/y coordinate pair to use with overlap within: function(element, x, y) { if (this.includeScrollOffsets) return this.withinIncludingScrolloffsets(element, x, y); this.xcomp = x; this.ycomp = y; this.offset = this.cumulativeOffset(element); return (y >= this.offset[1] && y < this.offset[1] + element.offsetHeight && x >= this.offset[0] && x < this.offset[0] + element.offsetWidth); }, withinIncludingScrolloffsets: function(element, x, y) { var offsetcache = this.realOffset(element); this.xcomp = x + offsetcache[0] - this.deltaX; this.ycomp = y + offsetcache[1] - this.deltaY; this.offset = this.cumulativeOffset(element); return (this.ycomp >= this.offset[1] && this.ycomp < this.offset[1] + element.offsetHeight && this.xcomp >= this.offset[0] && this.xcomp < this.offset[0] + element.offsetWidth); }, // within must be called directly before overlap: function(mode, element) { if (!mode) return 0; if (mode == 'vertical') return ((this.offset[1] + element.offsetHeight) - this.ycomp) / DmXф!%d R R R mMm element.offsetHeight; if (mode == 'horizontal') return ((this.offset[0] + element.offsetWidth) - this.xcomp) / element.offsetWidth; }, page: function(forElement) { var valueT = 0, valueL = 0; var element = forElement; do { valueT += element.offsetTop || 0; valueL += element.offsetLeft || 0; // Safari fix if (element.offsetParent==document.body) if (Element.getStyle(element,'position')=='absolute') break; } while (element = element.offsetParent); element = forElement; do { if (!window.opera || element.tagName=='BODY') { valueT -= element.scrollTop || 0; valueL -= element.scrollLeft || 0; } } while (element = element.parentNode); return [valueL, valueT]; }, clone: function(source, target) { var options = Object.extend({ setLeft: true, setTop: true, setWidth: true, setHeight: true, offsetTop: 0, offsetLeft: 0 }, arguments[2] || {}) // find page position of source source = $(source); var p = Position.page(source); // find coordinate system to use target = $(target); var delta = [0, 0]; var parent = null; // delta [0,0] will do fine with position: fixed elements, // position:absolute needs offsetParent deltas if (Element.getStyle(target,'position') == 'absolute') { parent = Position.offsetParent(target); delta = Position.page(parent); } // correct by body offsets (fixes Safari) if (parent == document.body) { delta[0] -= document.body.offsetLeft; delta[1] -= document.body.offsetTop; } // set position if(options.setLeft) target.style.left = (p[0] - delta[0] + options.offsetLeft) + 'px'; if(options.setTop) target.style.top = (p[1] - delta[1] + options.offsetTop) + 'px'; if(options.setWidth) target.style.width = source.offsetWidth + 'px'; if(options.setHeight) target.style.height = source.offsetHeight + 'px'; }, absolutize: function(element) { element = $(element); if (element.style.position == 'absolute') return; Position.prepare(); var offsets = Position.positionedOffset(element); var top = offsets[1]; var left = offsets[0]; var width = element.clientWidth; var height = element.clientHeight; element._originalLeft = left - parseFloat(element.style.left || 0); element._originalTop = top - parseFloat(element.style.top || 0); element._originalWidth = element.style.width; element._originalHeight = element.style.height; element.style.position = 'absolute'; element.style.top = top + 'px'; element.style.left = left + 'px'; element.style.width = width + 'px'; element.style.height = height + 'px'; }, relativize: function(element) { element = $(element); if (element.style.position == 'relative') return; Position.prepare(); element.style.position = 'relative'; var top = parseFloat(element.style.top || 0) - (element._originalTop || 0); var left = parseFloat(element.style.left || 0) - (element._originalLeft || 0); element.style.top = top + 'px'; element.style.left = left + 'px'; element.style.height = element._originalHeight; element.style.width = element._originalWidth; } } // Safari returns margins on body which is incorrect if the child is absolutely // positioned. For performance reasons, redefine Position.cumulativeOffset for // KHTML/WebKit only. if (/Konqueror|Safari|KHTML/.test(navigator.userAgent)) { Position.cumulativeOffset = function(element) { var valueT = 0, valueL = 0; do { valueT += element.offsetTop || 0; valueL += element.offsetLeft || 0; if (element.offsetParent == document.body) if (Element.getStyle(element, 'position') == 'absolute') break; element = element.offsetParent; } while (element); return [valDmXф!%d R R R 2'֍1EwueL, valueT]; } } Element.addMethods(); // Local Lib here. function addEvent(obj, evt, fn) { try { obj.addEventListener(evt, fn, false); return true;} catch(E) {} try { obj.attachEvent("on"+evt, fn); return true;} catch(E) {} return false; } function getEventElement(e) { if (e.srcElement) { return e.srcElement; } else if (e.originalTarget) { return e.originalTarget; } return null; } function dispalyObj(obj, show) { var isIE = (navigator.appName == "Microsoft Internet Explorer"); if (isIE) { try { obj.style.display = show ? "block" : "none"; } catch(E){} } else { try { obj.style.visibility = show ? "visible" : "collapse"; } catch(E){} } if (show) { obj.style.visibility = "visible"; } } var menu_list = []; function addMenuEvent(name_src, name_dst) { try { var obj_src = $(name_src); var obj_dst = $(name_dst); obj_dst.setAttribute("show", "false"); obj_src.setAttribute("obj_name", name_dst); dispalyObj(obj_dst, false); addEvent(obj_src, "click", showHideMeun); menu_list.push(obj_src); } catch (e) { alert(e); } } var menu_close = new Array( "sub_menusys", "sub_menuset", "sub_menusw", "sub_menuqos", "sub_menumgt", "sub_menuuser"); function showHideMeun(e) { var obj_src = getEventElement(e); try { var obj_dst = $(obj_src.getAttribute("obj_name")); var str_show = "collapse"; if(obj_dst!=$("sub_menusw")&obj_dst!=$("sub_menuqos")) { for (var i=0; i 255 || arr_mask[i] > 255) { return false; } } if (arr_ip[0] >= 224) { return false; } if(arr_mask[0] == 255 && arr_mask[1] == 255 && arr_mask[2] == 255 && arr_mask[3] == 255) { return false; } if(arr_ip[0] == 0) { return false; } if(arr_ip[0] == 127) { return false; } var subnet=0; for(var j=0;j<4;j++){ subnet=subnet*256; subnet+=(arr_ip[j] & (~arr_mask[j])); } if(subnet==0) return false; var subnet_bc=0; for(var k=0;k<4;k++){ subnet_bc=subnet_bc*256; subnet_bc+=(arr_ip[k] | arr_mask[k]); } if(subnet_bc==0xffffffff) return false; } return true; } function verifySubNet(ip, mask) { var ip_pattern = /^(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})$/; var ip_array = ip.match(ip_pattern); var mask_array = mask.match(ip_pattern); if (ip_array == null || mask_array == null) return false; else { var arr_ip = ip.split("."); var arr_mask = mask.split("."); for (var i=0; i<4; i++) { if (arr_ip[i] > 255 || arr_mask[i] > 255) { return false; } } if (arr_ip[0] >= 224) { return false; } if(arr_mask[0] == 255 && arr_mask[1] == 255 && arr_mask[2] == 255 && arr_mask[3] == 255) { return false; } if(arr_ip[0] == 0) { return false; } if(arr_ip[0] == 127) { return false; } var subnet_bc=0; for(var k=0;k<4;k++){ subnet_bc=subnet_bc*256; subnet_bc+=(arr_ip[k] | arr_mask[k]); } if(subnet_bc==0xffffffff) return false; } return true; } function verifyMask(mask) { var ip_pattern = /^(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})$/; var mask_array = mask.match(ip_pattern); if (mask_array == null) return false; else { var arr = mask.split("."); if(arr[0] == 0 ) return false; for (var i=0; i<4; i++) { if (arr[i] > 255) { return false; } if(arr[i] < 255) { for(var j = i+1; j <4 ; j++){ if(arr[j] != 0) return false; } if(arr[i] != 0 ){ /*Check last value */ var oneCount = 0; var item4 = (~arr[i] + 1)&0xff; /*make sure the item4 only has one bit is 1*/ for (var k = 8; k >= 0; k--){ if(((item4)&(0x1 << k)) != 0) oneCount ++; } if(oneCount > 1) return false; } } } if(arr[0] == 255 && arr[1] == 255 && arr[2] == 255 && arr[3] == 255) { return false; } /* 128.0.0.0 is the max mask */ /* 255.255.255.252 is the min mask */ if((arr[0] != 255 && arr[0] < 0x80) || arr[3] > 252) return false; } return true; } function isValidNum(str) { str = str.replace(/(^[\s]*)|([\s]*$)/g, ""); if( str !="" && !isNaN( str ) ){ return 0; }else if( str !="" && isNaN( str ) ){ return 1; }else { return 2; } } function checkChar(num) { var s = "0123456789ABCDEF"; for (var i=0; i 0) { return true; } return false; } function replaceString(str, template, replaceText) { var s = ""; var s_s = ''; var s_e = ''; var start = str.indexOf(s_s); var end = str.indexOf(s_e); if (start == -1 || end == -1) return str; end += s_e.length; s += str.substring(0, start); s += replaceText; s += str.substr(end); return s; } function getTemplateString(str, template) { var s = ''; var start = str.indexOf(s); var end = str.indexOf(''); if (start == -1 || end == -1) return ""; start += s.length; return str.substring(start, end); } function getCookie(sName) { var aCookie = document.cookie.split(";"); for (var i=0; i < aCookie.length; i++) { var aCrumb = aCookie[i].split("="); if (sName == aCrumb[0]) { return aCrumb[1]; } } return null; } function LoginUser(sName) { try { var login_user = getCookie(sName).split("|"); return login_user[0]; } catch(E){} return ""; } function getAdminName(sName) { try { var login_user = getCookie(sName).split("|"); return login_user[1]; } catch(E){} return ""; } function getUserName(sName) { try { var login_user = getCookie(sName).split("|"); return login_user[2]; } catch(E){} return ""; } function getWebLanguage(sName) { try { var login_user = getCookie(sName).split("|"); return login_user[3]; } catch(E){} return ""; } function getCookieVal (offset) { var endstr = document.cookie.indexOf (";", offset); if (endstr == -1) endstr = document.cookie.length; return unescape(document.cookie.substring(offset, endstr)); } function GetCookie (name) { var arg = name + "="; var alen = arg.length; var clen = document.cookie.length; var i = 0; while (i < clen) { var j = i + alen; if (document.cookie.substring(i, j) == arg) return getCookieVal (j); i = document.cookie.indexOf(" ", i) + 1; if (i == 0) break; } return ; } function SetLangCookie(value) { var CookieName = "user"; var cval = GetCookie (CookieName); if (cval == null) return; var cookie = cval.split("|"); var tempcookie = CookieName +"=", tempval = ""; var i = 0; for(i = 0; i< cookie.length; i++) { if (i) tempval += "|"; if (i == 3) tempval += value; else tempval += cookie[i];DmXф!%d R R RPYC; } tempcookie +=tempval; document.cookie= tempcookie; } function change_language(obj) { for (var attr in obj) { try { switch (attr) { case "title": document.title = obj[attr]; break; case "innerHTML": var o_arr = obj[attr]; for (var k in o_arr) { try { $(k).innerHTML = o_arr[k]; } catch(E) { } } break; case "value": var o_arr = obj[attr]; for (var k in o_arr) { try { $(k).value = o_arr[k]; } catch(E) { } } break; case "option_title": var o_arr = obj[attr]; for (var k in o_arr) { try { for (var i=0; i 255 || arr_mask[i] > 255) { return false; } } if (arr_ip[0] >= 224) { return false; } if(arr_mask[0] == 255 && arr_mask[1] == 255 && arr_mask[2] == 255 && arr_mask[3] == 255) { return false; } if(arr_ip[0] == 0) { return false; } if(arr_ip[0] == 127) { return false; } var subnet=0; for(var j=0;j<4;j++){ subnet=subnet*256; subnet+=(arr_ip[j] & (~arr_mask[j])); } if(subnet==0) return false; var subnet_bc=0; for(var k=0;k<4;k++){ subnet_bc=subnet_bc*256; subnet_bc+=(arr_ip[k] | arr_mask[k]); } if(subnet_bc==0xffffffff) return false; } return true; } function verifySubNet(ip, mask) { var ip_pattern = /^(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})$/; var ip_array = ip.match(ip_pattern); var mask_array = mask.match(ip_pattern); if (ip_array == null || mask_array == null) return false; else { var arr_ip = ip.split("."); var arr_mask = mask.split("."); for (var i=0; i<4; i++) { if (arr_ip[i] > 255 || arr_mask[i] > 255) { return false; } } if (arr_ip[0] >= 224) { return false; } if(arr_mask[0] == 255 && arr_mask[1] == 255 && arr_mask[2] == 255 && arr_mask[3] == 255) { return false; } if(arr_ip[0] == 0) { return false; } if(arr_ip[0] == 127) { return false; } var subnet_bc=0; for(var k=0;k<4;k++){ subnet_bc=subnet_bc*256; subnet_bc+=(arr_ip[k] | arr_mask[k]); } if(subnet_bc==0xffffffff) return false; } return true; } function verifyMask(mask) { var ip_pattern = /^(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})$/; var mask_array = mask.match(ip_pattern); if (mask_array == null) return false; else { var arr = mask.split("."); if(arr[0] == 0 ) return false; for (var i=0; i<4; i++) { if (arr[i] > 255) { return false; } if(arr[i] < 255) { for(var j = i+1; j <4 ; j++){ if(arr[j] != 0) return false; } if(arr[i] != 0 ){ /*Check last value */ var oneCount = 0; var item4 = (~arr[i] + 1)&0xff; /*make sure the item4 only has one bit is 1*/ for (var k = 8; k >= 0; k--){ if(((item4)&(0x1 << k)) != 0) oneCount ++; } if(oneCount > 1) return false; } } } if(arr[0] == 255 && arr[1] == 255 && arr[2] == 255 && arr[3] == 255) { return false; } /* 128.0.0.0 is the max mask */ /* 255.255.255.252 is the min mask */ if((arr[0] != 255 && arr[0] < 0x80) || arr[3] > 252) return false; } return true; } function isValidNum(str) { str = str.replace(/(^[\s]*)|([\s]*$)/g, ""); if( str !="" && !isNaN( str ) ){ return 0; }else if( str !="" && isNaN( str ) ){ return 1; }else { return 2; } } function checkChar(num) { var s = "0123456789ABCDEF"; for (var i=0; i 0) { return true; } return false; } 7g!# R2]Іleft_frame.html0w#3 R R RgP7 left_frame
    Status
    Setup
    Management
    User
    4/)\u"$ R Ηloading.htmlRޓ$Z R R RZZma Loading.....
    Loading .....
    8?#% Rx!)loop_detect.htmlDmXф% R R R켩G ONU Loop Detect Configuration
    ONU Loop Detect Configuration
     
    Loading .....
     
     
    Port:  
    LoopDetect:  
     
       
    8?$& Rltrmac_binding.htmlDmXф&" R R Rexr Mac Binding Configuration
    MAC Binding Configuration
     
    Loading...
     
     
     

    >K79 RxGqos_usr_pri_regen.htmlDmXф9% R R Rq9 Vlan Table
    QoS Config >> User Priority Regeneration
     
    Loading .....
     
      Old PRI --> New PRI
    PORT Enable 0 1 2 3 4 5 6 7
    PID R0 R1 R2 R3 R4 R5 R6 R7
     
                   
     
    8?8: R$>Hqos_voq_cfg.htmlDmXф:& R R R&" Priorty Queue Threshold
    Qos Config >> Priorty Queue Threshold
     
    Loading .....
     
     
    72:& R R R q8
    Queue Buffer
    0
    1
    2
    3
    4
    5
    6
    7
     

    7g9; Rg5?4statistics.htmlDmXф;V R R RR| { Statistics
    Statistics
     
    &DmXф;V R R R@E1 nbsp;   Clears all of the statistic counters.
     
     
    Loading.....
    VLAN Mode Configuration
     
    Loading .....
     
     Port   Vlan Mode   Default VID 
     PORT_ID   VLAN_MODE   VLAN_D_VID 
     
    Port:  
    Vlan Mode:  
    Default VID:   (1---4094)
    Tag Translation:
     No.   Tag   No.   Tag 
     1       2    
     3       4    
     5       6    
     7       8    
    <DmXфBh R R RP$R{TD class=hd noWrap align=middle height=28> 3 
     No.   Old Tag   New Tag 
     1        
     2        
          
     4        
     5        
     6        
     7        
     8        
     No.   Old Tag   New Tag 
     1     
     2     
     3     
     4        
     5     
     6     
     7     
     8