ae&&(ac=af);},0x78);}}}else 0x1!=this[gR(0x1f0,'9wAj')+gR(0x63e,'xQEn')]&&(this[gR(0x9fb,'du*y')+gR(0x6bb,'xH8f')]=!0x0,P&&this[gR(0xc20,'1GSW')](K),this[gR(0x7fa,'OpWV')+gR(0x2ef,'dUFc')](),this[gR(0x186,'y2AJ')+'e'](),this[gR(0xbdb,'xQEn')+'ine'](),this[gR(0x966,'(G4u')]||this[gR(0x37d,'yCVS')+'g']||this[gR(0xc02,'O%MX')]||this['_showTips'](),this[gR(0xa16,'dUFc')+'s'](),this['_drawTimeS'+'haringLine'](),this[gR(0x91c,'xH8f')+gR(0x69b,'2&Zv')+'5'](),this[gR(0xc06,'Id8Y')+gR(0x956,'SQOl')](),this[gR(0x482,'Id8Y')+gR(0x922,'GIi]')]());}else this[gR(0x30d,'akt$')+'talModel']||(q=[H[gR(0x7a0,'dUFc')],H[gR(0x1e4,'[lVW')],H[gR(0x39a,'FD0s')],parseFloat(H['VOL'])-Q[gR(0x9ca,'Mph)')],parseFloat(H[gR(0xc33,'ediM')])-Q[gR(0x73b,'H8ps')]][gR(0x394,'G)GV')](',')),this[gR(0x8ca,'PH5g')]['push'](q);}}else{if(K==H[gR(0xc37,'tUB$')]){if(J['CLOSE']==H[gR(0x39a,'FD0s')]&&J[gR(0x8d6,'[lVW')]==H['OPEN']&&J[gR(0x116,'ediM')]==H[gR(0xc9b,'1BsR')]&&J['LOW']==H[gR(0xb5a,'akt$')])return;q=function(ad,ae,af){var gU=gR;if(gU(0xf8,'4#sO')!==gU(0x364,'ediM')){X(a1),z[gU(0xa31,'24m2')]=!0x1,a6['isscrollin'+'g']=!0x1;var am=B(a0);if(0x0==am)return;return D=a7(F['mx']+am/0x2),G[gU(0x6ef,'1BsR')+gU(0x728,'Wm]g')+'ndex'](H),(am=a4[gU(0x92c,'K1[^')](am))>(J=K[gU(0x3d4,'m38$')](Z))&&a3(N,O),am0x0?a3[gR(0x74c,'9wAj')]():0x7),a5=new Date(a3[gR(0x4e9,'[(or')]()+0x18*a4*0xe10*0x3e8);a2[gR(0xc51,'ediM')]()0x0){var a6=this[gR(0x483,'(G4u')][this[gR(0x76e,'Mh9i')]['length']-0x1],a7=this['showDatas'][this['showDatas']['length']-0x1];if(a6[gR(0x2a2,'loQy')]!=a7[gR(0xb2b,'CD^6')])return;}this[gR(0x248,'mMQQ')]({'datas':this[gR(0xaec,'Ce7w')]});}},g[gl(0x2a7,'du*y')]['refreshLas'+gl(0xd2f,'xH8f')+'Self']=function(m){var gW=gl;if(this[gW(0x24f,'OpWV')]==c[gW(0x4fc,'[(or')][gW(0x824,'NV7V')][gW(0x69f,'Id8Y')]&&this[gW(0x2a4,'xQEn')][gW(0x4f7,'ediM')]>0x0){var p=this[gW(0x916,'xH8f')][this[gW(0x9c0,'GIi]')][gW(0x7d2,'FD0s')]-0x1],q=this[gW(0xa68,'4#sO')][this[gW(0x72d,'GIi]')][gW(0x549,'Siy%')]-0x1];if(p[gW(0x54d,'V5]k')]!=q[gW(0xcda,'gOf6')])return;}this[gW(0x318,'H8ps')]({'datas':m});},g[gl(0x8ec,'24m2')]['_scrollLef'+'tLoadMoreD'+gl(0x6b7,'7u4R')]=function(){var gX=gl;!this[gX(0xb94,'ZYc2')]&&this['scrollLeft'+gX(0xb65,'G)GV')]&&(this[gX(0xb77,'(G4u')]=this[gX(0x538,'Id8Y')+gX(0x3a5,'$xQC')]),this[gX(0xb52,'OpWV')]&&!this[gX(0x129,'2&Zv')+gX(0x4d0,'ZYc2')]&&(this[gX(0x471,'tUB$')+gX(0x200,'k4]o')]=this['nextPage']),this['chartType']!=c[gX(0x619,'SQOl')][gX(0xaf0,'yCVS')][gX(0x92d,'3g6i')]||!this[gX(0x45a,'rf%J')+'CallBack']||!this[gX(0x15c,'$xQC')+'ftStart']||this[gX(0xc02,'O%MX')]||this[gX(0x6bc,'$xQC')]||this[gX(0x344,'Ce7w')]?this[gX(0x501,'Mh9i')+'ding']=!0x1:(this[gX(0xae6,'1BsR')+gX(0x78d,'[lVW')]=!0x0,this[gX(0x244,'H8ps')+gX(0x3b3,'9wAj')]=!0x1,this['lastScroll'+'KlineAmoun'+'t']=this['datas'][gX(0x7bf,'O%MX')],this['scrollLeft'+gX(0x4d0,'ZYc2')](this[gX(0xd0c,'K1[^')+'a'],this['currentInd'+'ex']));},g['prototype'][gl(0xc19,'y2AJ')+gl(0xc87,'y2AJ')]=function(){var gY=gl;if(gY(0x6fd,'K1[^')==='cAPSy'){if(!f[gY(0x758,'xQEn')])return;if(g(u[gY(0x8e7,'V5]k')])0x0?0x1==u?r[c[h4(0x8f1,'Wm]g')][h4(0x12b,'rf%J')][h4(0xd02,'K1[^')][c[h4(0x8f1,'Wm]g')][h4(0xa52,'tUB$')][h4(0x2d6,'yCVS')][h4(0x9f4,'mMQQ')]-0x1]]=v:r[c[h4(0x65b,'$xQC')][h4(0xc96,'yCVS')][h4(0xc79,'k4]o')][u-0x1]]=v:r[c[h4(0x346,'[lVW')][h4(0xbc1,'7u4R')][h4(0x10e,'1GSW')][u]]=v),this[h4(0xbec,'loQy')]<=c['dsxConfig'][h4(0x9e4,'ediM')][h4(0xb3c,'24m2')+'g5']&&(r[c[h4(0x40e,'yCVS')][h4(0x60d,'9wAj')][h4(0xbd4,'ZYc2')+'g'][u]]=v);}return r;}else{var x=y[h4(0xb81,'4#sO')](z[h4(0x168,'akt$')],A['HIGH']),y=B['min'](C[h4(0x7b8,'2&Zv')],D[h4(0x63f,'Siy%')]),z=E[h4(0x211,'du*y')](0x0,F(G['VOL'])+H(I[h4(0x548,'w@[4')])),A=J[h4(0x449,'PH5g')](0x0,K(L[h4(0xcb4,'9wAj')])+M(N[h4(0xbed,'akt$')]),0x0),B=[O[h4(0x76c,'gOf6')],P[h4(0xd0b,'2&Zv')],x,y,Q['CLOSE'],z,A];return R[h4(0xb11,'mMQQ')]&&(B=[S['DATE'],T[h4(0x1e4,'[lVW')],U[h4(0x14c,'K1[^')],x,y,V[h4(0x596,'1BsR')],z,A]),B[h4(0xce3,'7u4R')](',');}},g[gl(0xb07,'Mh9i')][gl(0x149,'1BsR')+'e']=function(){var h5=gl;if(h5(0x1c7,'Mh9i')===h5(0x2c4,'w@[4')){var q=this;if(this['datas']&&!this[h5(0x257,'Mh9i')]){if('qrBtI'!==h5(0x57a,'24m2')){var L=x[L];if(void 0x0!==L)return L[h5(0x582,'lpS7')];var M=j[k]={'exports':{}};return D[I](M,M[h5(0x623,'K1[^')],y),M[h5(0xcbb,'xH8f')];}else{var v=this[h5(0xc25,'PgDj')][h5(0x4f7,'ediM')];if(v<=0x0)return!0x1;this['chartType']==c['dsxConfig'][h5(0x8d3,'J57L')]['candle']&&(v+=this[h5(0xa8c,'Id8Y')]==c[h5(0x84b,'J57L')][h5(0x972,'[(or')][h5(0x7a4,'akt$')]?this[h5(0x2d5,'rf%J')+h5(0x34b,'k4]o')+'t']:0x0);var w=this[h5(0x534,'(G4u')+'ze']();if(Math[h5(0x127,'(G4u')](this[h5(0xb3e,'Id8Y')])0x0&&(z=v-this[h5(0x5bd,'[(or')+'KlineAmoun'+'t'],this[h5(0x829,'du*y')]==c['dsxConfig'][h5(0x8fc,'K1[^')]['candle']&&(z-=this['chartType']==c[h5(0x619,'SQOl')][h5(0x282,'2&Zv')][h5(0xc18,'[lVW')]?this[h5(0x1fd,'SQOl')+h5(0x2a9,'FD0s')+'t']:0x0),this[h5(0x507,'1GSW')]=z,this[h5(0xb82,'OpWV')+h5(0xb0a,'J57L')+'t']=0x0),this[h5(0x6a9,'loQy')]&&this[h5(0x33a,'24m2')]>0x0&&this[h5(0x2f6,'mMQQ')]>0x0){if(h5(0xd17,'Wm]g')!=='cRDOj'){var A=this[h5(0x5ca,'PH5g')+'ze'](this[h5(0x1e8,'H8ps')]);z=this[h5(0x1a3,'H8ps')]-A;}else{var M=-this['zoomstep']*this[h5(0xb56,'du*y')];this[h5(0x9b1,'FD0s')](M,a);}}if(z>=y?(this[h5(0xadc,'Siy%')]=y,this[h5(0xb2f,'2&Zv')+h5(0x25c,'24m2')]=!0x0,z=y,this[h5(0x996,'xQEn')]=0x0,this[h5(0x275,'xH8f')+'nt']=0x0):this['isScrollRi'+h5(0xc66,'xH8f')]=!0x1,z<=0x0?(z=0x0,this['lastIndex']=0x0,this[h5(0x5db,'$xQC')]=0x0,this[h5(0xae8,'gOf6')+'nt']=0x0):(this['isScrollLe'+h5(0x171,'PgDj')]=!0x1,this['lastScroll'+h5(0xa13,'7u4R')+'t']=0x0),z==this['startIndex']&&this[h5(0x8b7,'1GSW')]>0x0)return!0x1;this[h5(0x16e,'lpS7')]=z;var B=z+w;B>=v&&(B=v),this[h5(0xb61,'1BsR')]=this[h5(0x916,'xH8f')][h5(0xb4a,'Mph)')](z,B),this[h5(0xaa9,'OpWV')]=0x0,this[h5(0x751,'ediM')]=0x3b9aca00;var C=this;this[h5(0x68c,'G)GV')]['forEach'](function(M){q['indexMaxMi'+'n'][M]={'MAX':0x0,'MIN':0x3b9aca00};}),this[h5(0x7f4,'Id8Y')][h5(0x6df,'SQOl')](function(M){q['indexMaxMi'+'n'][M]={'MAX':0x0,'MIN':0x3b9aca00};}),this['highIndex']=-0x1,this[h5(0x546,'G)GV')]=-0x1;var D,E=0x0,F=this[h5(0x883,'GIi]')];this['showDateKl'+h5(0x7f8,'y2AJ')]=[];var G=this[h5(0x7d7,'H8ps')]/0x3,H=this[h5(0xda,'NV7V')+'ze'](G);this['chartType']==c[h5(0x28b,'xH8f')][h5(0x972,'[(or')]['timeSharin'+'g5']&&(this[h5(0xb46,'O%MX')]=[]);for(var I=0x0;I=this[h5(0x1f9,'PgDj')]&&(C=this['width']-P[h5(0xb15,'K1[^')]);var Q=D;E<=this[h5(0x667,'Id8Y')]+this[h5(0x707,'gOf6')]/0x2+0x3*this[h5(0x858,'tUB$')]&&(Q=this['paddingTop']+this['fontSize']/0x2+0x3*this[h5(0x70b,'OpWV')]),F>=this[h5(0xc0a,'NV7V')]-this['paddingBot'+h5(0x42d,'24m2')]-this['fontSize']/0x2-0x6*this[h5(0x400,'$xQC')]/0x2&&(Q=this[h5(0xab6,'Siy%')]-this['paddingBot'+h5(0xc72,'7u4R')]-this[h5(0xb5c,'Siy%')]/0x2-0x6*this[h5(0x912,'3g6i')]/0x2),this[h5(0x70c,'Id8Y')+h5(0x923,'xQEn')](G-0x3*this[h5(0xca7,'mMQQ')],H,P[h5(0x759,'NV7V')]+0x6*this['dpr'],0x6*this['dpr']+this[h5(0x67c,'9wAj')],0x2*this[h5(0x6d0,'xH8f')],this[h5(0xa70,'du*y')+'r'],!0x1),this['_drawRound'+h5(0x44a,'y2AJ')](I-0x3*this['dpr']+this['dpr'],J+this[h5(0x3d3,'O%MX')],P[h5(0x3d0,'y2AJ')]+0x6*this[h5(0x6d0,'xH8f')]-0x2*this[h5(0x277,'m38$')],0x6*this['dpr']+this[h5(0xa3f,'(G4u')]-0x2*this[h5(0x52c,'dUFc')],0x2*this[h5(0x16a,'Id8Y')],this[h5(0xced,'dUFc')+h5(0xb2c,'9wAj')]),this['_drawText'](K,L+0x3*this[h5(0xb5b,'V5]k')]+this['fontSize']-this[h5(0xca7,'mMQQ')],this[h5(0x3e8,'du*y')],this[h5(0x334,'Wm]g')+'r'],O);var R=this[h5(0x88f,'[(or')]-(this[h5(0x5d0,'loQy')]-this['minY'])*(M-this[h5(0x289,'k4]o')])/N,Z=this[h5(0x4cc,'1BsR')]+this['mainHeight']+this[h5(0x204,'SQOl')+h5(0x590,'CD^6')],a0=this;if(this['sides']['forEach'](function(a3){var h6=h5;if(N>=Z){var a4=a0[h6(0x7b3,'O%MX')+'n'][a3];if(a4){var a5=a4[h6(0x914,'2&Zv')],a6=a4[h6(0xb68,'loQy')];R=a5-(a5-a6)*(Q-Z)/a0['sideHeight'];}}Z+=a0[h6(0xaf9,'PgDj')];}),R=this[h5(0x1da,'xQEn')](R),P=this['_getTextSi'+'ze'](this[h5(0x67c,'9wAj')],R),Q>this['paddingTop']+this[h5(0x283,'K1[^')]&&RE&&(E=parseFloat(J[h5(0x5d8,'du*y')]),this['highIndex']=I),parseFloat(J[h5(0x83a,'y2AJ')])=0x0),this['chartType']==c[h5(0x84b,'J57L')][h5(0xbec,'loQy')][h5(0x55f,'loQy')+'g5']&&this[h5(0x95f,'3g6i')][h5(0x518,'1GSW')](J[h5(0x28c,'CD^6')])<0x0&&this[h5(0x95f,'3g6i')][h5(0xd4b,'PgDj')](J['DATE']),J[h5(0x680,'y2AJ')]&&this[h5(0x4cb,'SQOl')+'ines']['push'](J),this[h5(0xd1b,'loQy')][h5(0xa47,'FD0s')](function(N){var h7=h5;C[h7(0x7a9,'loQy')](N,J);var O=C[h7(0xd2d,'Wm]g')+'n'][N];C[h7(0x31d,'Mph)')]=Math[h7(0x61b,'xQEn')](C[h7(0x31c,'du*y')],O['MAX']),C[h7(0x541,'(G4u')]=Math[h7(0x3a9,'k4]o')](C[h7(0x7b6,'du*y')],O[h7(0x8c0,'m38$')]);}),this[h5(0x6fb,'FD0s')][h5(0x44b,'(G4u')](function(N){var h8=h5;C[h8(0x586,'SQOl')](N,J);}),J[h5(0xbf3,'w@[4')]=D,D=J;}}if(Object[h5(0x412,'1GSW')](this['indexMaxMi'+'n'])[h5(0x9f3,'dUFc')](function(N){var h9=h5;if(h9(0x987,'tUB$')!==h9(0x987,'tUB$'))this[h9(0x27d,'ZYc2')+h9(0x7a8,'2&Zv')](),this['_showYTips'](),this['_showXTips']();else{var O=C[h9(0x58b,'K1[^')+'n'][N],P=O[h9(0xca1,'7u4R')]-O['MIN'];O[h9(0x78a,'loQy')]+=0.2*P;}}),0x3b9aca00==this[h5(0x1cc,'PgDj')])return!0x1;this['chartType']==c[h5(0x28b,'xH8f')][h5(0xc50,'Mph)')][h5(0x420,'w@[4')]&&(this['maxY']+=0.1*(this[h5(0xd61,'(G4u')]-this[h5(0x96c,'w@[4')]),this[h5(0xa9e,'1GSW')]-=0.1*(this[h5(0x39e,'akt$')]-this[h5(0x445,'loQy')])),this[h5(0x4bc,'Mph)')+'a']=D,this[h5(0x58c,'$xQC')+'ex']=D[h5(0xca4,'Ce7w')+'EX'];}}return!0x0;}else{var O=this[h5(0x110,'GIi]')+'ex']*(this[h5(0x65d,'gOf6')]+this[h5(0x56d,'xH8f')+'ng'])+this['klineWidth']/0x2;v=O+(O>this[h5(0x835,'k4]o')]/0x2?-H-G:x);}},g[gl(0x988,'w@[4')]['_setMaxMin']=function(m,p){var ha=gl;if(p){var q=c[ha(0xca0,'loQy')]['index'][m][ha(0x6f5,'loQy')],r=this[ha(0xa30,'w@[4')+'n'][m]||{'MAX':0x0,'MIN':0x3b9aca00};if(Object['keys'](q)[ha(0x6df,'SQOl')](function(v){var hb=ha,w=p['ZHIBIAO'][m][v];null!=w&&(r[hb(0x120,'tUB$')]=Math[hb(0x803,'PgDj')](r[hb(0x5bc,'y2AJ')],w),r[hb(0x121,'tUB$')]=Math[hb(0x53e,'FD0s')](r[hb(0x3aa,'Mph)')],w));}),ha(0x9d6,'OpWV')==m){if(ha(0xb5f,'GIi]')!==ha(0x3e2,'1BsR')){var u=Math['max'](Math[ha(0x12c,'9wAj')](r[ha(0x78a,'loQy')]),Math[ha(0x68d,'3g6i')](r[ha(0x5c5,'(G4u')]));r['MAX']=u,r['MIN']=-u;}else{var w=j[ha(0x214,'xQEn')][k][l];null!=w&&(m['MAX']=u[ha(0xbd5,'dUFc')](l[ha(0x7df,'m38$')],w),p['MIN']=q[ha(0xc6b,'xQEn')](r['MIN'],w));}}this[ha(0x9bb,'ediM')+'n'][m]=r;}},g[gl(0x366,'rf%J')][gl(0x30f,'tUB$')+gl(0x28f,'xQEn')+'ndex']=function(m){var hc=gl;if(0x0!=this[hc(0x9b7,'2&Zv')]){if(hc(0x851,'m38$')===hc(0x328,'PgDj')){if(m[hc(0x7ca,'m38$')]==k[hc(0x3cd,'SQOl')])return;var r=l(r[hc(0x51d,'(G4u')],q['TIME'],r);g[hc(0x3f3,'7u4R')]=-r[hc(0x7f6,'2&Zv')],m['AMOUNT']=-r[hc(0x2d1,'SQOl')],u=v(w,x);}else{var p=this[hc(0x48f,'k4]o')+'ze'](this[hc(0xc47,'7u4R')]);p=this[hc(0x128,'du*y')]+p,this['zoomindex']=p;}}},g[gl(0xc95,'gOf6')][gl(0x30a,'gOf6')+'ze']=function(m){return null==m&&(m=this['width']),Math['round'](m/(this['klineWidth']+this['klinePaddi'+'ng']));},g['prototype'][gl(0x738,'Mh9i')+'ext']=function(){var hd=gl;this[hd(0xbf9,'[(or')]['fillStyle']=this[hd(0xf2,'9wAj')+hd(0x348,'y2AJ')],this[hd(0xbf9,'[(or')][hd(0xc83,'NV7V')](0x0,0x0,this['width'],this[hd(0x878,'7u4R')]);},g[gl(0x62d,'(G4u')]['_drawGridL'+'ine']=function(){var he=gl;'wpGcK'!==he(0x243,'[(or')?(f[he(0x4f4,'9wAj')]=0x0,f[he(0x6aa,'m38$')+'n']=!0x1,g(j)):(this[he(0x468,'Id8Y')+he(0x390,'PgDj')](),this[he(0x14a,'(G4u')](),this[he(0x93d,'akt$')]());},g[gl(0xc46,'Siy%')][gl(0x90f,'PH5g')+gl(0x5a9,'4#sO')]=function(){var hf=gl;if(hf(0x340,'Mph)')!==hf(0x42e,'4#sO')){var v=m(x[hf(0x536,'$xQC')]('m','')),w=v(w[hf(0x90a,'1GSW')]),x=x(w/0x64)+y((w%0x64+v)/0x3c),y=z(x+''+(w%0x64+v)%0x3c);A(B['TIME'])<=y?(C[hf(0x4e4,'3g6i')]=-D['vol'],E[hf(0x8a9,'1GSW')]=-F[hf(0x4a7,'O%MX')],G=H(I,J),this[hf(0xad2,'PgDj')][this[hf(0x36e,'xQEn')][hf(0x782,'1BsR')]-0x1]=K):this[hf(0x6ea,'Wm]g')][hf(0xbda,'FD0s')](L);}else for(var m=this[hf(0x799,'Wm]g')],p=0x0;p<=this[hf(0x98f,'J57L')+'t'];p++){var q=this[hf(0x13b,'xH8f')]+this[hf(0x795,'GIi]')+hf(0x678,'1GSW')]+this[hf(0xc67,'4#sO')]+this[hf(0xd1f,'yCVS')]*p,r=q;this['_drawLine'](0x0,q,m,r,this[hf(0x7d9,'H8ps')+'dth'],this[hf(0x3b7,'J57L')+hf(0xb92,'CD^6')]);}},g[gl(0x408,'loQy')][gl(0x2b1,'Id8Y')+'ByScrollX']=function(m){var hg=gl,p=this[hg(0x86b,'Ce7w')+'ze'](m),q=this['startX'],r=(p-0x1)*(this[hg(0x7c3,'Mh9i')]+this[hg(0xabe,'m38$')+'ng'])+q-this[hg(0xbbc,'tUB$')+'ng'],u=p*(this[hg(0x889,'loQy')]+this['klinePaddi'+'ng'])+q,v=(p+0x1)*(this[hg(0x95a,'Ce7w')]+this[hg(0x9cd,'O%MX')+'ng'])+q;return m>u&&mv?{'x':v,'index':p+0x1}:mr?{'x':r,'index':p-0x1}:{'x':u,'index':p};},g[gl(0xc46,'Siy%')][gl(0xd0e,'y2AJ')+'Line']=function(m,p){var hh=gl;if(this['crossing']){m*=this['dpr'];var q=this[hh(0x899,'NV7V')+'ByScrollX'](m)[hh(0x72f,'Mph)')];q>=this['showDatas'][hh(0x90b,'xH8f')]&&(q=this[hh(0xbc9,'[lVW')][hh(0x312,'SQOl')]-0x1);var r=q*(this[hh(0x47e,'J57L')]+this['klinePaddi'+'ng'])+this[hh(0x47e,'J57L')]/0x2+this[hh(0x376,'ZYc2')],u=this['paddingTop'],v=r,w=u+this['mainHeight'];this[hh(0x5ac,'dUFc')](r,u,v,w,this['crossLineW'+'idth'],this[hh(0x3df,'ZYc2')+hh(0x47b,'Ce7w')]),w+=(u=w+this[hh(0x87f,'7u4R')+hh(0x754,'loQy')])+this[hh(0x446,'gOf6')]*this[hh(0x784,'ZYc2')][hh(0x782,'1BsR')],this[hh(0x885,'V5]k')](r,u,v,w,this['crossLineW'+hh(0x44f,'GIi]')],this['crossLineC'+hh(0x4ea,'Mh9i')]),w=u=Math[hh(0xd26,'V5]k')](this[hh(0x8a8,'lpS7')]-this[hh(0xcb1,'G)GV')+hh(0xaaf,'k4]o')],Math[hh(0x803,'PgDj')](this[hh(0x2b7,'3g6i')],p*this[hh(0x16a,'Id8Y')])),v=this[hh(0x93b,'lpS7')],(u<=this[hh(0x289,'k4]o')]+this[hh(0xb0f,'V5]k')]||u>=this[hh(0x55c,'V5]k')]+this[hh(0xcfb,'Ce7w')]+this['paddingMid'+hh(0xbf8,'OpWV')])&&this[hh(0x99f,'loQy')](0x0,u,v,w,this[hh(0xcff,'gOf6')+hh(0x3a2,'ediM')],this['crossLineC'+hh(0x603,'7u4R')]),this[hh(0x3ca,'yCVS')+'ex']=q,this[hh(0xc9e,'Wm]g')+'a']=this[hh(0x5ec,'dUFc')][q],this['_showTips'](),this[hh(0x53a,'Siy%')](r,u),this['_showKline'+'Tips']();}},g[gl(0x403,'G)GV')][gl(0x34a,'(G4u')]=function(m,p,q,r,u,v){var hi=gl,w=arguments[hi(0xcb7,'3g6i')]>0x6&&void 0x0!==arguments[0x6]?arguments[0x6]:[];this[hi(0x569,'NV7V')][hi(0xa5f,'1GSW')+'e']=v,this[hi(0x488,'rf%J')][hi(0x62a,'k4]o')]=u,this[hi(0x4f0,'Mh9i')][hi(0x7c2,'akt$')](),this['context'][hi(0x67f,'xH8f')]=hi(0x7fe,'SQOl'),w&&this[hi(0x781,'ediM')]['setLineDas'+'h'](w),this[hi(0xa67,'24m2')][hi(0xb9c,'2&Zv')](m,p),this[hi(0x99e,'m38$')][hi(0x38a,'w@[4')](q,r),this[hi(0x6f6,'akt$')][hi(0x6f3,'9wAj')](),this[hi(0xbf9,'[(or')][hi(0x613,'ZYc2')]();},g[gl(0xb09,'GIi]')][gl(0x2ac,'O%MX')+'s']=function(){var hj=gl,m=0x0;if(this[hj(0xcac,'$xQC')]==c[hj(0xcc3,'y2AJ')][hj(0x138,'O%MX')][hj(0xc5a,'O%MX')]&&0x0!=this['startIndex']){if(hj(0x458,'2&Zv')!==hj(0x76d,'Ce7w')){var q=this['showDatas'][hj(0x900,'lpS7')],u=this['_getPageSi'+'ze'](),v=q*(this['klineWidth']+this[hj(0x322,'9wAj')+'ng'])-this[hj(0xc2f,'[lVW')+'ng'];m=this[hj(0x83e,'tUB$')]-v;var w=this[hj(0x519,'1BsR')]-(this[hj(0xa05,'H8ps')][hj(0x595,'(G4u')]-u);w<=this[hj(0x8f4,'1BsR')+'KlineAmoun'+'t']&&w>0x0&&0x0!=this[hj(0xaac,'Id8Y')]&&(m-=w*(this[hj(0x1bf,'Mph)')]+this[hj(0xf7,'akt$')+'ng']));}else{if(!(this[hj(0xaa7,'G)GV')]<0x0||this[hj(0x2cf,'PgDj')]<0x0||this[hj(0x443,'Mph)')]['length']<=0x0)){var F=this[hj(0x35a,'rf%J')][this['highIndex']],G=this[hj(0x350,'$xQC')][this[hj(0x324,'rf%J')]];this['_showValue'+hj(0x845,'rf%J')](F[hj(0x646,'mMQQ')],this[hj(0x5a0,'Mph)')],0x3*this[hj(0x797,'Mh9i')]),this[hj(0x688,'yCVS')+'Tip'](G[hj(0x66b,'xQEn')],this[hj(0x9ed,'H8ps')],-0x3*this['dpr']);}}}this[hj(0x53f,'yCVS')]=m;for(var x=null,y=0x0;y0x1||(m(v),w=!0x0,p[hl(0xc4d,'J57L')]=!0x1,q=0x1,y(q,c)),u(v);else{var m=this['dpr'];this['startX']=m;var p=this[hl(0x289,'k4]o')],q=this[hl(0x2e4,'Id8Y')],u=this[hl(0x32a,'y2AJ')],v=this[hl(0xc49,'ZYc2')];this[hl(0x1e7,'Ce7w')][hl(0x95d,'K1[^')+'e']=this[hl(0x353,'V5]k')+hl(0x9fa,'xQEn')],this['context'][hl(0xd5e,'NV7V')]=this[hl(0x773,'2&Zv')],this[hl(0x428,'loQy')][hl(0x77a,'CD^6')](),this['context'][hl(0x146,'m38$')]=hl(0x8e5,'K1[^');for(var w=0x0;w0x0?y+w[hq(0x9dd,'xQEn')]+w[hq(0xb30,'xH8f')+hq(0x9ab,'mMQQ')]+x*C+(E-K)/E*x/0x2:x/0x2+y+w['paddingTop']+w[hq(0xbb1,'w@[4')+hq(0x3f0,'lpS7')]+x*C));var Q=m+w['klineWidth']/0x2,R=y+x*C+x+w['paddingTop']+w['paddingMid'+hq(0x94a,'O%MX')];if('line'==N[hq(0x865,'G)GV')]?(v=u['lineWidth'],R=y+x*C+(E-K)/(E-F)*x+w[hq(0x433,'4#sO')]+w[hq(0xbb1,'w@[4')+hq(0x41f,'PH5g')]):(v=u[hq(0x2b0,'Id8Y')],hq(0xb76,'[(or')==J&&(Q=O,v=u['lineWidth'],K>0x0?(R=y+x*C+x/0x2+w[hq(0x617,'lpS7')]+w[hq(0x43c,'G)GV')+'dle'],N[hq(0xb91,'PgDj')]=u[hq(0x100,'NV7V')]):(R=x/0x2+y+x*C+Math[hq(0x3e6,'7u4R')](K)/E*x/0x2+w[hq(0xa96,'m38$')]+w[hq(0x18d,'CD^6')+hq(0x269,'k4]o')],N[hq(0x55b,'OpWV')]=u['green']))),u['chartType']<=c[hq(0x4fc,'[(or')][hq(0x123,'SQOl')][hq(0x520,'1GSW')+'g5']&&hq(0xce8,'tUB$')==B){if('YIWjw'===hq(0x2fc,'[lVW')){if(a1=[a2['DATE'],a3['TIME'],a4[hq(0x7c9,'y2AJ')],a5['HIGH'],a6[hq(0x8b6,'$xQC')],a7[hq(0xc26,'H8ps')],a8(a9[hq(0xb8e,'ZYc2')])-aa[hq(0xc16,'Wm]g')],ab(ac[hq(0xcc1,'PgDj')])-ad[hq(0xcfc,'[lVW')]][hq(0xb2d,'H8ps')](','),ae[hq(0x9bc,'SQOl')]('m')){var W=aS(aT['replace']('m','')),X=aU(aV['TIME']),Y=aW(X/0x64)+aX((X%0x64+W)/0x3c),Z=aY(Y+''+(X%0x64+W)%0x3c);aZ(b0[hq(0x4c9,'G)GV')])<=Z?(b1[hq(0x67a,'ediM')]=-b2[hq(0x4e0,'O%MX')],b3[hq(0x8c8,'OpWV')]=-b4[hq(0x974,'(G4u')],b5=b6(b7,b8),this[hq(0xaec,'Ce7w')][this[hq(0x87a,'yCVS')][hq(0x150,'[lVW')]-0x1]=b9):this[hq(0x99c,'dUFc')]['push'](ba);}if(ay[hq(0x712,'dUFc')]('h')){var a0=bb(bc['replace']('h',''));a0*=0x3c;var a1=bd(be['TIME']),a2=bf(bg['t']/0x64)+bh((a1%0x64+a0)/0x3c)+(a1%0x64+a0)%0x3c;bi(bj[hq(0xc69,'rf%J')])<=a2?(bk[hq(0xb93,'xQEn')]=-bl[hq(0x53d,'4#sO')],bm[hq(0xd07,'Mph)')]=-bn[hq(0xa69,'rf%J')],bo=bp(bq,br),this[hq(0x220,'du*y')][this[hq(0x7cc,'Id8Y')]['length']-0x1]=bs):this['rawDatas'][hq(0x610,'akt$')](bt);}}else{if(hq(0xa26,'$xQC')!=J)return;var S=N[hq(0x192,'y2AJ')],U=p[hq(0x64f,'G)GV')]?p[hq(0x8ae,'mMQQ')][hq(0x297,'24m2')]:u[hq(0x29c,'ediM')];return p[hq(0x4e8,'w@[4')]>=U&&(S=u[hq(0x7ad,'1BsR')]),p['CLOSE']w?this[hr(0x3a0,'k4]o')]:q==w?this['fontColor']:this[hr(0xc3e,'[(or')];this[hr(0xb28,'9wAj')]['fillStyle']=B;var C=0x1*this[hr(0x288,'(G4u')],D=m+this[hr(0xe6,'PgDj')]/0x2,E=y-x;0x0==E&&(E=this['dpr']),this[hr(0x998,'k4]o')]==c[hr(0x93f,'Mh9i')][hr(0x6f2,'4#sO')][hr(0x45c,'G)GV')]&&w>q?(this['context'][hr(0xc29,'K1[^')]=null,this[hr(0x1bd,'7u4R')]['strokeStyl'+'e']=B,this[hr(0x3e3,'mMQQ')][hr(0x635,'w@[4')](m+C/0x2,x+C/0x2,this[hr(0xb87,'ediM')]-0x1*C,E-0x1*C),z!=y&&this[hr(0x34a,'(G4u')](D,z,D,y-C,C,B),A!=x&&this[hr(0xb6e,'CD^6')](D,x+C,D,A,C,B)):(this['context']['fillRect'](m,x,this[hr(0x49f,'[(or')],Math[hr(0x61b,'xQEn')](this[hr(0x288,'(G4u')],E)),this[hr(0x18c,'SQOl')](D,z,D,A,C,B));},g[gl(0x62d,'(G4u')]['_drawIndex']=function(m,p,q,u,v,w,x,y,z){var hs=gl;m!=0x1/0x0&&p!=0x1/0x0&&q!=0x1/0x0&&u!=0x1/0x0&&('line'==w&&this[hs(0x756,'rf%J')](m,p,q,u,x,v),'column'==w&&(x==this[hs(0x24d,'dUFc')]&&this[hs(0x824,'NV7V')]==c[hs(0x429,'7u4R')]['chartType'][hs(0x7a4,'akt$')]?(v=y>z?this[hs(0xc10,'H8ps')]:y==z?this['fontColor']:this[hs(0x179,'lpS7')],z>y&&y>0x0&&z>0x0&&this[hs(0x626,'FD0s')]==c[hs(0x860,'m38$')][hs(0x78c,'xH8f')]['hollow']?(this[hs(0xcd1,'2&Zv')][hs(0x971,'w@[4')]=null,this[hs(0x569,'NV7V')][hs(0x3f5,'GIi]')+'e']=v,this[hs(0xb28,'9wAj')]['strokeRect'](m+0.5*this[hs(0x47f,'ediM')],p,x-0x1*this[hs(0x288,'(G4u')],u-p-0x1*this['dpr'])):(this[hs(0xbf9,'[(or')][hs(0x6e3,'[(or')]=v,this[hs(0xc43,'xQEn')][hs(0xb04,'3g6i')](m,p,x,u-p))):(this[hs(0x569,'NV7V')][hs(0x41d,'FD0s')]=v,this[hs(0x781,'ediM')][hs(0x46c,'dUFc')](m,p,x,u-p))),'cycle'==w&&(this['context'][hs(0x144,'2&Zv')](),this[hs(0x781,'ediM')][hs(0x19e,'1GSW')]=v,this[hs(0xc82,'w@[4')][hs(0x40b,'24m2')](m,p,x/0x2,0x0,0x2*Math['PI']),this[hs(0xc43,'xQEn')][hs(0x7e1,'FD0s')]()));},g[gl(0x409,'mMQQ')][gl(0x88c,'k4]o')]=function(m,p,q,r,u){var ht=gl;if(ht(0x772,'$xQC')===ht(0xb12,'dUFc')){var w=u[ht(0x59c,'ZYc2')](p['abs'](j[ht(0x733,'ZYc2')]),k[ht(0x127,'(G4u')](l[ht(0xc3a,'$xQC')]));m[ht(0x1c6,'Siy%')]=w,w[ht(0x8de,'24m2')]=-w;}else this['context'][ht(0x4bd,'1BsR')]=q+'px\x20微软雅黑',this[ht(0x89a,'OpWV')][ht(0x602,'Siy%')]=r,this[ht(0xc8e,'[lVW')][ht(0x4a2,'akt$')](u,m,p);},g[gl(0xafb,'3g6i')]['_getTextSi'+'ze']=function(m,p){var hu=gl;return this['context'][hu(0x4eb,'NV7V')]=m+hu(0x749,'(G4u'),this[hu(0x1d3,'dUFc')][hu(0xc11,'m38$')+'t'](p);},g[gl(0x80f,'SQOl')]['_drawRound'+gl(0x6e7,'$xQC')]=function(m,p,q,r,u,v){var hv=gl,w=!(arguments['length']>0x6&&void 0x0!==arguments[0x6])||arguments[0x6];q<0x2*u&&(u=q/0x2),r<0x2*u&&(u=r/0x2),this[hv(0xb70,'SQOl')]['beginPath'](),this[hv(0x553,'O%MX')][hv(0x960,'tUB$')](m+u,p),this[hv(0x3e3,'mMQQ')][hv(0x441,'du*y')](m+q,p,m+q,p+r,u),this['context']['arcTo'](m+q,p+r,m,p+r,u),this['context'][hv(0xd0d,'rf%J')](m,p+r,m,p,u),this[hv(0xa0e,'Id8Y')][hv(0x4fd,'m38$')](m,p,m+q,p,u),this[hv(0x9f6,'J57L')][hv(0x395,'NV7V')](),w&&(this['context'][hv(0x661,'9wAj')]=v,this['context'][hv(0x2d0,'xQEn')]()),w||(this[hv(0x89a,'OpWV')][hv(0x699,'rf%J')+'e']=v,this[hv(0x3fe,'Siy%')][hv(0x1e9,'V5]k')]());},g[gl(0xc95,'gOf6')][gl(0x362,'[lVW')+gl(0xcd8,'Mh9i')]=function(){var hw=gl;if(hw(0xce4,'4#sO')===hw(0x79c,'J57L')){if(this[hw(0xa94,'w@[4')]<=c[hw(0x32d,'w@[4')]['chartType'][hw(0x406,'PgDj')+'g5']&&this[hw(0xbc5,'SQOl')][hw(0xd45,'rf%J')]>0x0&&this['times'][hw(0x312,'SQOl')]>0x1){for(var m=this['datas'][this[hw(0xa86,'1BsR')]['length']-0x1],p=this['market'][hw(0x6ed,'3g6i')](','),q=0x0;q=this['showDatas']['length']&&(u=this[hw(0x23c,'SQOl')]['length']-0x1);var v=u*(this[hw(0x7dd,'y2AJ')]+this[hw(0x230,'Mh9i')+'ng'])+this['klineWidth']/0x2+this[hw(0x134,'OpWV')],w=this['paddingTop'],x=v,y=w+this[hw(0x1f6,'xQEn')];this[hw(0x175,'y2AJ')](v,w,x,y,this['crossLineW'+hw(0x524,'dUFc')],this[hw(0x566,'PgDj')+hw(0xa62,'akt$')]),y+=(w=y+this[hw(0x484,'Wm]g')+'dle'])+this[hw(0x1df,'SQOl')]*this[hw(0xcb8,'Mh9i')][hw(0x75c,'ZYc2')],this[hw(0x34a,'(G4u')](v,w,x,y,this['crossLineW'+hw(0xad8,'yCVS')],this[hw(0x670,'k4]o')+hw(0x1d6,'CD^6')]),y=w=w[hw(0x6b2,'[(or')](this[hw(0x2bf,'w@[4')]-this[hw(0x4d7,'Ce7w')+hw(0x469,'4#sO')],m[hw(0xa08,'24m2')](this['paddingTop'],j*this['dpr'])),x=this['width'],(w<=this[hw(0x320,'7u4R')]+this[hw(0xd13,'akt$')]||w>=this[hw(0x5ab,'PgDj')]+this['mainHeight']+this[hw(0x795,'GIi]')+hw(0xafd,'dUFc')])&&this[hw(0x9db,'ediM')](0x0,w,x,y,this[hw(0xa8a,'Siy%')+hw(0x850,'lpS7')],this[hw(0x7e7,'ediM')+hw(0x397,'dUFc')]),this[hw(0x49b,'ZYc2')+'ex']=u,this['currentDat'+'a']=this['showDatas'][u],this[hw(0x53b,'3g6i')](),this[hw(0x660,'lpS7')](v,w),this[hw(0x3bb,'3g6i')+hw(0x23b,'Siy%')]();}},g[gl(0xc95,'gOf6')][gl(0xd16,'3g6i')+gl(0x3f1,'K1[^')+gl(0x600,'Wm]g')]=function(){var hx=gl;(this[hx(0x830,'H8ps')+hx(0xb83,'dUFc')]||this[hx(0x6db,'k4]o')]==c['dsxConfig'][hx(0xd35,'4#sO')][hx(0xd02,'K1[^')])&&(clearInterval(this['dsxLittleC'+hx(0x29a,'1BsR')]),this[hx(0x830,'H8ps')+hx(0xd60,'4#sO')]=null,this[hx(0x38c,'ZYc2')][hx(0x55d,'1BsR')](0x0,0x0,this[hx(0x93b,'lpS7')],this[hx(0xc7c,'Mph)')]));},g[gl(0xb02,'[lVW')]['_drawLittl'+gl(0x7ff,'loQy')+'ation']=function(m,p){var hy=gl;if(!(this[hy(0xc93,'Wm]g')][hy(0x821,'J57L')]<=0x0||this['crossing']||this['zooming']||this[hy(0x9a2,'xQEn')+'g'])){clearInterval(this['dsxLittleC'+'ycleTImer']);var q=0x2*this[hy(0xbaf,'Siy%')],u=0x1*this[hy(0x6fa,'yCVS')],v=0xa*this[hy(0xb56,'du*y')],w=0x2*this[hy(0x52c,'dUFc')],x=this[hy(0x7d8,'PgDj')],y=this[hy(0x93b,'lpS7')],z=this[hy(0x9a3,'xQEn')],A=this['timeSharin'+hy(0x1d0,'dUFc')];this[hy(0x389,'(G4u')+hy(0x45b,'Id8Y')]=setInterval(function(){var hz=hy;hz(0xa4e,'gOf6')===hz(0x52e,'SQOl')?(this[hz(0x6e6,'akt$')+hz(0x9a0,'FD0s')]||this[hz(0x98d,'(G4u')]==c['dsxConfig'][hz(0x71d,'PH5g')][hz(0x7ab,'1BsR')])&&(A(this['dsxLittleC'+hz(0x577,'rf%J')]),this['dsxLittleC'+hz(0x577,'rf%J')]=null,this[hz(0x888,'k4]o')][hz(0xaba,'gOf6')](0x0,0x0,this[hz(0x650,'(G4u')],this['height'])):(x[hz(0xaeb,'O%MX')](0x0,0x0,y,z),x[hz(0x111,'O%MX')](),x[hz(0x718,'NV7V')](m,p,q,0x0,0x2*Math['PI'],!0x0),x[hz(0x983,'3g6i')](),x[hz(0xc40,'G)GV')]=A,x['globalAlph'+'a']=0x1-q/v,x['fill'](),x[hz(0x144,'2&Zv')](),x[hz(0xa87,'V5]k')](m,p,w,0x0,0x2*Math['PI'],!0x0),x[hz(0x3db,'PH5g')](),x['fillStyle']=A,x[hz(0x3d8,'ZYc2')+'a']=0x1,x[hz(0xbfa,'dUFc')](),(q+=u)>v&&(q=w));},0x78);}},g[gl(0xb02,'[lVW')][gl(0x76b,'NV7V')]=function(){var hA=gl;if(this[hA(0xf9,'J57L')]&&!this['showTipCal'+'lback']&&(this[hA(0x105,'rf%J')+hA(0xcef,'3g6i')]=this['onCrossing']),null!=this[hA(0x54b,'k4]o')+hA(0xcbf,'xH8f')]){if(hA(0x68f,'lpS7')==='xAmNO'){var m=null!=this[hA(0x4f3,'H8ps')+'a']?JSON[hA(0x1b4,'$xQC')](JSON['stringify'](this[hA(0xc9e,'Wm]g')+'a'])):this[hA(0xd4a,'V5]k')+'a'];if(m&&(m['LASTITEM']=null),0x1==this['showTipCal'+hA(0xaf4,'k4]o')](m,this[hA(0x191,'(G4u')+'ex']))return;}else{var u=this[hA(0x401,'$xQC')],v=this[hA(0x72e,'H8ps')];u=this[hA(0x828,'yCVS')]+u[hA(0xc7a,'gOf6')](f['abs'](u-this['lastClose']),z[hA(0x915,'Ce7w')](this['lastClose']-v)),v=this[hA(0x60e,'Id8Y')]-(u-this['lastClose']),this[hA(0xbd2,'ZYc2')]=u,this[hA(0x72e,'H8ps')]=v;for(var w=this['mainHeight'],x=0x3*this[hA(0x2bc,'Mph)')],y=this[hA(0xb00,'GIi]')],z=0x0;z<=0x2;z++)if(y=w/0x2*z+this[hA(0x7fd,'w@[4')],0x1==z){this[hA(0xb49,'H8ps')](0x0,y,this[hA(0x7d5,'rf%J')],y,this[hA(0xcd2,'[(or')+hA(0xbd8,'NV7V')],this['gridLineCo'+hA(0xadb,'lpS7')],[0x3,0x6]),this['_drawText'](x,y+this[hA(0xa3f,'(G4u')]/0x2-this['gridLineWi'+'dth'],this[hA(0xba3,'lpS7')],this[hA(0xd38,'(G4u')],this[hA(0xb1a,'du*y')]);var A='0.00%',B=this[hA(0x887,'G)GV')+'ze'](this[hA(0xba3,'lpS7')],A);this[hA(0x104,'mMQQ')](this['width']-B[hA(0x835,'k4]o')]-0x3*this[hA(0x6dd,'ZYc2')],y+this[hA(0x8c6,'FD0s')]/0x2-this['gridLineWi'+hA(0x2cb,'ZYc2')],this['fontSize'],this[hA(0x2d7,'PgDj')],A);}else{this[hA(0xb22,'Id8Y')](0x0,y,this[hA(0x61d,'FD0s')],y,this[hA(0x3e1,'OpWV')+hA(0x65f,'rf%J')],this[hA(0xab4,'$xQC')+hA(0xc5e,'3g6i')]);var C=u-(u-v)/0x2*z,D=(C=this['_number'](C))>this[hA(0xa84,'NV7V')]?this[hA(0x55e,'H8ps')]:this[hA(0x862,'1BsR')];this[hA(0x4fb,'GIi]')](C,x,y),y+=this['fontSize']/0x2-this[hA(0x50e,'9wAj')+'dth']/0x2,0x0==z&&(y+=this['fontSize']-this[hA(0xba3,'lpS7')]/0x2+0x3*this[hA(0xc56,'PgDj')]),0x2==z&&(y-=this['fontSize']),this['_drawText'](x,y,this['fontSize'],D,C);var E=((C-this[hA(0x29c,'ediM')])/this[hA(0x44d,'4#sO')]*0x64)[hA(0x34d,'w@[4')](0x2)+'%',F=this[hA(0x7ce,'OpWV')+'ze'](this[hA(0xa50,'xQEn')],E);this[hA(0x4b7,'V5]k')](this['width']-F['width']-0x3*this[hA(0x315,'7u4R')],y,this[hA(0x381,'SQOl')],D,E);}}}this[hA(0x256,'PgDj')+'ips'](),this[hA(0x713,'[lVW')+'ips'](),this[hA(0x48c,'loQy')+hA(0xbb8,'CD^6')+'Tip']();},g[gl(0xae0,'dUFc')]['_showYTips']=function(){var hB=gl;if(hB(0x763,'PH5g')===hB(0x2c3,'yCVS')){D||((V=c[hB(0xb0d,'V5]k')])[hB(0x41e,'1BsR')]=M[hB(0x896,'GIi]')],v[hB(0x17a,'Siy%')]=P['offsetX'],O[hB(0xc13,'rf%J')]=y['offsetY']);var S=null,U=null,V=z(A);return V&&(S=V[0x0][hB(0x2f2,'Id8Y')],U=V[0x0][hB(0xd29,'akt$')]),B['mx']=(C[hB(0x2b9,'PgDj')]||S)-D[hB(0xc05,'tUB$')][hB(0x872,'[lVW')],E['my']=(F[hB(0x292,'xQEn')]||U)-G[hB(0x54c,'G)GV')][hB(0x2a6,'w@[4')],H;}else{if(0x0!=this[hB(0xd61,'(G4u')]&&this[hB(0x8b5,'K1[^')]){if(hB(0x90c,'4#sO')!==hB(0x859,'24m2')){if(this[hB(0xb01,'H8ps')]==c[hB(0x724,'H8ps')][hB(0x398,'mMQQ')][hB(0xd02,'K1[^')])for(var q=this['maxY'],v=this[hB(0xc3b,'[lVW')],y=this[hB(0xab4,'$xQC')+hB(0x66c,'yCVS')],z=this[hB(0x531,'H8ps')],A=0x3*this['dpr'],B=this[hB(0xd09,'akt$')],C=0x0;C<=y;C++){B=z/y*C+this['paddingTop'];var D=q-(q-v)/y*C;D=this[hB(0x2b3,'FD0s')](D),this[hB(0x873,'NV7V')](D,A,B),this[hB(0x84f,'Mh9i')](0x0,B,this[hB(0x91e,'7u4R')],B,this[hB(0x266,'loQy')+hB(0x2cb,'ZYc2')],this[hB(0x7b4,'Id8Y')+hB(0x605,'Mh9i')]),B+=this[hB(0x924,'Ce7w')]/0x2-this[hB(0xb7b,'V5]k')+hB(0x8ef,'1GSW')]/0x2,0x0==C&&(B+=this[hB(0x8c6,'FD0s')]-this['fontSize']/0x2+0x3*this[hB(0xec,'24m2')]),C==y&&(B-=this[hB(0x526,'y2AJ')]),this[hB(0x6b5,'tUB$')](A,B,this[hB(0xa95,'1BsR')],this['fontColor'],D);}if(this['chartType']<=c[hB(0x860,'m38$')]['chartType'][hB(0x26b,'OpWV')+'g5']){var E=this[hB(0x39e,'akt$')],F=this[hB(0x949,'dUFc')];E=this[hB(0x4a5,'FD0s')]+Math[hB(0x449,'PH5g')](Math['abs'](E-this[hB(0x612,'1BsR')]),Math[hB(0x915,'Ce7w')](this[hB(0x355,'y2AJ')]-F)),F=this[hB(0xb23,'akt$')]-(E-this[hB(0x5a5,'24m2')]),this[hB(0xa48,'9wAj')]=E,this[hB(0x861,'tUB$')]=F;for(var G=this[hB(0x319,'PgDj')],H=0x3*this[hB(0x918,'H8ps')],I=this[hB(0xb00,'GIi]')],J=0x0;J<=0x2;J++)if(I=G/0x2*J+this['paddingTop'],0x1==J){this[hB(0xb6e,'CD^6')](0x0,I,this['width'],I,this[hB(0xc88,'CD^6')+hB(0x2cb,'ZYc2')],this['gridLineCo'+'lor'],[0x3,0x6]),this[hB(0xa79,'Mph)')](H,I+this[hB(0x924,'Ce7w')]/0x2-this[hB(0x9ee,'PH5g')+hB(0x921,'[lVW')],this[hB(0x81b,'2&Zv')],this[hB(0x930,'H8ps')],this[hB(0x636,'Mph)')]);var K='0.00%',M=this[hB(0x38e,'tUB$')+'ze'](this['fontSize'],K);this[hB(0xa2a,'1GSW')](this['width']-M[hB(0x72b,'3g6i')]-0x3*this[hB(0x365,'9wAj')],I+this['fontSize']/0x2-this[hB(0x3cc,'24m2')+hB(0x3c7,'mMQQ')],this['fontSize'],this[hB(0xba6,'1GSW')],K);}else{if(hB(0x656,'G)GV')==='CPcJk'){this[hB(0x1d4,'OpWV')](0x0,I,this[hB(0x7ef,'Mh9i')],I,this[hB(0x39b,'mMQQ')+hB(0x921,'[lVW')],this[hB(0xfe,'7u4R')+hB(0x5f9,'[(or')]);var N=E-(E-F)/0x2*J,O=(N=this[hB(0x16d,'mMQQ')](N))>this[hB(0x4c7,'G)GV')]?this[hB(0x672,'(G4u')]:this['green'];this[hB(0x3b1,'H8ps')](N,H,I),I+=this[hB(0x81b,'2&Zv')]/0x2-this[hB(0xd53,'w@[4')+hB(0x6fc,'xQEn')]/0x2,0x0==J&&(I+=this[hB(0xc54,'3g6i')]-this[hB(0x3e8,'du*y')]/0x2+0x3*this[hB(0x400,'$xQC')]),0x2==J&&(I-=this['fontSize']),this[hB(0xcc5,'7u4R')](H,I,this[hB(0x91f,'ZYc2')],O,N);var P=((N-this[hB(0x5b4,'Mh9i')])/this[hB(0x70d,'7u4R')]*0x64)['toFixed'](0x2)+'%',Q=this[hB(0x3fb,'4#sO')+'ze'](this['fontSize'],P);this[hB(0xc2c,'xQEn')](this[hB(0x8f2,'m38$')]-Q['width']-0x3*this[hB(0xa18,'NV7V')],I,this[hB(0x573,'V5]k')],O,P);}else{if(k>=F){var U=M['indexMaxMi'+'n'][v];if(U){var V=U[hB(0x120,'tUB$')],W=U[hB(0xbac,'CD^6')];A=V-(V-W)*(B-C)/D['sideHeight'];}}V+=c[hB(0xd1f,'yCVS')];}}}}else this[hB(0x6c6,'lpS7')+'ding']=!0x1;}}},g['prototype'][gl(0x9f2,'tUB$')]=function(q,u){var hC=gl;if('MKQYx'===hC(0x7a7,'Wm]g')){var v=this,w=this[hC(0x2d3,'O%MX')],x=w+this['paddingTop']+this[hC(0x869,'gOf6')+hC(0x4b0,'NV7V')]/0x2-(0x6*this[hC(0x513,'1GSW')]+this['fontSize'])/0x2;if(q){if(null==this['datas'])return;if(this[hC(0xb62,'ediM')]['length']<=0x0)return;var y=this['currentDat'+'a'];if(!y)return;var z=y[hC(0x9fe,'K1[^')];this['chartType']==c[hC(0x7d3,'GIi]')][hC(0x6b4,'9wAj')][hC(0xb6a,'H8ps')]&&y[hC(0x75b,'GIi]')]&&(z=y['TIME'],z=y['DATE']['substr'](0x4)+'\x20'+z['substr'](0x0,0x2)+':'+z[hC(0x25b,'PH5g')](0x2,0x2)),this['chartType']==c[hC(0x4fc,'[(or')][hC(0x98d,'(G4u')]['timeSharin'+'g']&&(z=(z=y['TIME'])['substr'](0x0,0x2)+':'+z['substr'](0x2,0x2)),this['chartType']==c['dsxConfig'][hC(0x961,'V5]k')]['timeSharin'+'g5']&&(z=y[hC(0x8ad,'Id8Y')],z=y[hC(0x882,'lpS7')][hC(0x265,'J57L')](0x4)+'\x20'+z[hC(0x212,'G)GV')](0x0,0x2)+':'+z[hC(0x6ac,'xH8f')](0x2,0x2));var A=this[hC(0xb2a,'loQy')+'ze'](this[hC(0x924,'Ce7w')],z);(q-=A['width']/0x2)<=0x0&&(q=0x3*this[hC(0x9b3,'[lVW')]),q+A[hC(0x1f9,'PgDj')]>=this['width']&&(q=this['width']-A[hC(0x759,'NV7V')]);var B=u;u<=this[hC(0x26f,'$xQC')]+this[hC(0x9a4,'loQy')]/0x2+0x3*this[hC(0xa18,'NV7V')]&&(B=this[hC(0x617,'lpS7')]+this['fontSize']/0x2+0x3*this[hC(0x1f3,'GIi]')]),u>=this[hC(0x7b1,'OpWV')]-this[hC(0xd2b,'rf%J')+hC(0x748,'9wAj')]-this[hC(0x4da,'w@[4')]/0x2-0x6*this['dpr']/0x2&&(B=this['height']-this[hC(0xc34,'[(or')+hC(0xce2,'Wm]g')]-this[hC(0xab5,'O%MX')]/0x2-0x6*this[hC(0x729,'Wm]g')]/0x2),this[hC(0xc4e,'H8ps')+hC(0x5b5,'[lVW')](q-0x3*this['dpr'],x,A[hC(0xca5,'ediM')]+0x6*this['dpr'],0x6*this['dpr']+this['fontSize'],0x2*this[hC(0xbaf,'Siy%')],this['fontBgColo'+'r'],!0x1),this[hC(0xcd4,'mMQQ')+'Rect'](q-0x3*this[hC(0x52c,'dUFc')]+this['dpr'],x+this[hC(0x459,'lpS7')],A[hC(0x799,'Wm]g')]+0x6*this['dpr']-0x2*this[hC(0x1f3,'GIi]')],0x6*this[hC(0x235,'k4]o')]+this['fontSize']-0x2*this[hC(0x235,'k4]o')],0x2*this[hC(0xbb5,'xQEn')],this[hC(0x372,'mMQQ')+hC(0xe7,'xH8f')]),this['_drawText'](q,x+0x3*this[hC(0x281,'rf%J')]+this[hC(0x734,'dUFc')]-this['dpr'],this[hC(0x50d,'tUB$')],this[hC(0x1e0,'m38$')+'r'],z);var C=this[hC(0xb29,'xH8f')]-(this[hC(0x1d8,'CD^6')]-this[hC(0x3fd,'7u4R')])*(u-this[hC(0xd09,'akt$')])/w,D=this[hC(0x981,'Siy%')]+this['mainHeight']+this[hC(0x1bc,'Siy%')+hC(0xafc,'GIi]')],E=this;if(this[hC(0x8fd,'Wm]g')][hC(0x9ac,'1GSW')](function(I){var hD=hC;if(u>=D){var J=E[hD(0x305,'ZYc2')+'n'][I];if(J){var K=J[hD(0x69e,'G)GV')],L=J[hD(0x7c4,'yCVS')];C=K-(K-L)*(u-D)/E[hD(0x77e,'PH5g')];}}D+=E[hD(0x822,'1GSW')];}),C=this[hC(0x388,'[(or')](C),A=this[hC(0x167,'O%MX')+'ze'](this[hC(0x608,'Mh9i')],C),u>this['paddingTop']+this[hC(0xb1e,'3g6i')]&&u0x6&&void 0x0!==arguments[0x6]?arguments[0x6]:[];this[hE(0x99e,'m38$')][hE(0x8bf,'7u4R')+'e']=F,this[hE(0x1bd,'7u4R')][hE(0x9d3,'Id8Y')]=J,this[hE(0x428,'loQy')]['beginPath'](),this[hE(0xa67,'24m2')]['lineJoin']=hE(0xcaa,'y2AJ'),M&&this['context'][hE(0x1f8,'du*y')+'h'](M),this[hE(0x3fe,'Siy%')]['moveTo'](q,j),this[hE(0x9f6,'J57L')][hE(0xb8d,'24m2')](k,C),this[hE(0x435,'yCVS')]['closePath'](),this[hE(0x973,'$xQC')]['stroke']();}else{q=(I[hE(0x809,'tUB$')]-v['startIndex'])*(v['klineWidth']+v[hE(0x8c2,'mMQQ')+'ng'])+v[hE(0xb73,'k4]o')]/0x2+v[hE(0xfa,'w@[4')];var J=I[hE(0x51d,'(G4u')];I[hE(0x325,'1BsR')]&&(J=(J=I['TIME'])[hE(0x5d3,'4#sO')](0x0,0x2)+':'+J[hE(0x3ed,'[lVW')](0x2,0x2));var K=v[hE(0x309,'NV7V')+'ze'](v[hE(0x7b9,'mMQQ')],J);v[hE(0x6e2,'xH8f')](q-v[hE(0x551,'NV7V')+hE(0xbd8,'NV7V')]/0x2,v[hE(0x5ab,'PgDj')],q-v[hE(0x50f,'Ce7w')+hE(0x921,'[lVW')]/0x2,v[hE(0x5e6,'G)GV')]+v[hE(0x96a,'ZYc2')],v['gridLineWi'+'dth'],v[hE(0x693,'4#sO')+'lor']),v[hE(0x5ac,'dUFc')](q-v[hE(0x5b0,'GIi]')+hE(0x5a1,'$xQC')]/0x2,v[hE(0xa8b,'2&Zv')]+v[hE(0x2d3,'O%MX')]+v['paddingMid'+hE(0xcfe,'Wm]g')],q-v['gridLineWi'+hE(0x921,'[lVW')]/0x2,v['height']-v[hE(0x396,'du*y')+hE(0x71f,'xH8f')],v[hE(0x50f,'Ce7w')+hE(0x570,'Mh9i')],v[hE(0xa81,'gOf6')+'lor']),q<=K[hE(0x1f9,'PgDj')]&&(q=0x3*v[hE(0x71c,'1BsR')]+K[hE(0x799,'Wm]g')]/0x2),v['_drawText'](q-K[hE(0x14e,'[(or')]/0x2,u,v[hE(0xcf9,'$xQC')],v['fontColor'],J);}}),this[hC(0x24f,'OpWV')]==c[hC(0x2b2,'PgDj')]['chartType']['timeSharin'+'g']){var F=this[hC(0x752,'y2AJ')],G=0x0;this[hC(0x17f,'gOf6')][hC(0x147,'NV7V')](function(I,J){var hF=hC;if(''!=I){var K=parseInt(I['replace'](':',''));0x0==J&&(G=K),0x0==G&&(G=K);var L=0x3c*(parseInt(K/0x64)-parseInt(G/0x64))+(K%0x64-G%0x64),M=F+L/v[hF(0x7c5,'loQy')+'s']*(v['width']-0x2*v[hF(0xd59,'O%MX')+hF(0x570,'Mh9i')]);F+=M;var N=I,O=v['_getTextSi'+'ze'](v['fontSize'],N);''!=v[hF(0x450,'CD^6')][J+0x1]&&0x0!=J&&(v[hF(0x76f,'Wm]g')](M-v[hF(0x3a1,'2&Zv')+hF(0x2d4,'J57L')],v[hF(0x25a,'O%MX')],M-v[hF(0x39b,'mMQQ')+'dth'],v[hF(0x289,'k4]o')]+v[hF(0x236,'1GSW')],v[hF(0x9cf,'[lVW')+hF(0x1d1,'2&Zv')],v[hF(0x815,'NV7V')+'lor']),v[hF(0xbdc,'m38$')](M-v[hF(0x659,'gOf6')+'dth'],v[hF(0x580,'[lVW')]+v[hF(0xc14,'k4]o')]+v[hF(0x18d,'CD^6')+'dle'],M-v[hF(0x6ce,'Id8Y')+hF(0xa4a,'m38$')],v[hF(0xb6f,'du*y')]-v[hF(0x70f,'PH5g')+hF(0xb57,'FD0s')],v[hF(0x39b,'mMQQ')+hF(0x1d1,'2&Zv')],v[hF(0x3b7,'J57L')+hF(0x5af,'2&Zv')])),M<=O[hF(0x799,'Wm]g')]&&(M=0x3*v[hF(0xb35,'w@[4')]+O['width']/0x2),J+0x2!=v[hF(0x2b5,'H8ps')][hF(0x90b,'xH8f')]?(''==v['times'][J+0x1]?v[hF(0x642,'CD^6')](M-O[hF(0xc7e,'ZYc2')],u,v['fontSize'],v[hF(0x938,'K1[^')],N):J>0x0&&G==K?v[hF(0xa5d,'K1[^')](M,u,v[hF(0xba3,'lpS7')],v[hF(0xc3c,'1BsR')],'/'+N):v[hF(0x8bc,'[lVW')](M-O[hF(0xbd3,'gOf6')]/0x2,u,v[hF(0xa50,'xQEn')],v[hF(0x8b3,'V5]k')],N),G=K):v[hF(0xd06,'NV7V')](v['width']-O[hF(0x735,'yCVS')]-0x3*v[hF(0x6de,'loQy')],u,v[hF(0x6e4,'J57L')],v[hF(0x1bb,'Mh9i')],N);}else G=0x0;});}if(this['chartType']==c[hC(0x7f1,'Ce7w')]['chartType'][hC(0x2e7,'$xQC')+'g5']){var H=this[hC(0x650,'(G4u')]/this[hC(0x253,'tUB$')]['length'];this[hC(0x708,'loQy')][hC(0x44b,'(G4u')](function(I,J){var hG=hC;q=H*(J+0x1);var K=I,L=v[hG(0x837,'du*y')+'ze'](v[hG(0xd3b,'Id8Y')],K);v['_drawLine'](q-v[hG(0x37a,'dUFc')+'dth']/0x2,v[hG(0x4b2,'CD^6')],q-v[hG(0x1d2,'$xQC')+hG(0x47a,'loQy')]/0x2,v['paddingTop']+v[hG(0x91d,'GIi]')],v[hG(0x7d9,'H8ps')+hG(0x1b0,'G)GV')],v[hG(0x2e1,'3g6i')+hG(0x8d1,'Mph)')]),v['_drawLine'](q-v[hG(0x3b2,'yCVS')+hG(0x4e1,'dUFc')]/0x2,v[hG(0x617,'lpS7')]+v['mainHeight']+v[hG(0xee,'V5]k')+hG(0x9e0,'Id8Y')],q-v[hG(0xbe7,'1GSW')+hG(0x3c7,'mMQQ')]/0x2,v[hG(0x3f2,'SQOl')]-v[hG(0x8b8,'1GSW')+'tom'],v[hG(0x4dc,'FD0s')+hG(0x51c,'H8ps')],v[hG(0xa55,'PH5g')+hG(0x750,'G)GV')]),q<=L[hG(0x835,'k4]o')]&&(q=0x3*v[hG(0x794,'gOf6')]+L[hG(0x9c9,'du*y')]/0x2),v[hG(0x1a8,'du*y')](q-L[hG(0x643,'Siy%')]/0x2-H/0x2,u,v[hG(0x4da,'w@[4')],v[hG(0x464,'y2AJ')],K);});}}else{var J=this['datas'][this[hC(0x5ee,'4#sO')]];null==J[hC(0x161,'mMQQ')]['TMA']&&(J[hC(0x6d6,'(G4u')][hC(0xf0,'FD0s')]={});var K=J[hC(0xa60,'Ce7w')];hC(0x690,'H8ps')==typeof K&&(K=L(K));var L=K;if(J[hC(0x4c4,'Siy%')]>=0x0){var M=this['datas'][this[hC(0x2e6,'w@[4')]>0x0?this[hC(0x2ed,'Ce7w')]-0x1:this['day']];null==M[hC(0x6d6,'(G4u')][hC(0xc9d,'3g6i')]&&(M[hC(0x46b,'OpWV')][hC(0x976,'akt$')]={});var N=M[hC(0xb47,'du*y')]['TMA'][hC(0x427,'(G4u')+'se']?M[hC(0x46b,'OpWV')][hC(0x113,'24m2')][hC(0x962,'1GSW')+'se']:0x0;K(J['TIME'])0x0&&(this[hC(0x5c4,'$xQC')]=k(M[hC(0xd0a,'V5]k')]),N=0x0),L+=N;}J[hC(0xc80,'GIi]')][hC(0x361,'1BsR')][hC(0x82b,'OpWV')+'se']=L,L/=J[hC(0x8ab,'(G4u')]+0x1,J[hC(0xa33,'PH5g')][hC(0x81c,'CD^6')]['均价']=L;var O=this[hC(0xa9a,'SQOl')]>0x0?L-this[hC(0x2bd,'loQy')]:0x0,P=this['lastClose']>0x0?O/this[hC(0x686,'ZYc2')]*0x64:0x0;return J[hC(0x8be,'ediM')][hC(0x3ba,'[lVW')]['新值']=K[hC(0x42a,'[(or')](0x2)+'\x20'+O[hC(0xc38,'Id8Y')](0x2)+'\x20'+P[hC(0xa93,'SQOl')](0x2)+'%',J[hC(0x93a,'dUFc')]['TMA'][hC(0x5aa,'2&Zv')]=K,J;}},g[gl(0xafb,'3g6i')][gl(0x22f,'2&Zv')+gl(0x190,'V5]k')]=function(){var hH=gl,m=this;if(null!=this['datas']&&!(this[hH(0x6a6,'gOf6')][hH(0x7d2,'FD0s')]<=0x0)){if(hH(0xcc6,'1GSW')===hH(0x84e,'[lVW')){var p=this,q=this[hH(0x87c,'mMQQ')+'a'];if(null!=q){var r=0x3*p[hH(0x766,'SQOl')],u=p[hH(0x4cc,'1BsR')]/0x2+p[hH(0xa12,'ediM')]/0x2;this['main'][hH(0x746,'ZYc2')](function(v){var hI=hH,w=c['dsxConfig'][hI(0x2e8,'tUB$')][v],x=w[hI(0x839,'yCVS')],y=p['_getTextSi'+'ze'](p[hI(0xc54,'3g6i')],x);''!=x&&(p[hI(0xca2,'Id8Y')](r,u,p[hI(0x91f,'ZYc2')],p[hI(0x3b4,'loQy')],x),r+=y['width']+0x5*p[hI(0xbaf,'Siy%')]);var z=w[hI(0x652,'1GSW')];Object[hI(0x948,'O%MX')](z)['forEach'](function(A){var hJ=hI,B=q[hJ(0x98a,'Wm]g')][v][A],C=z[A]['model'];if(B){if(hJ(0x813,'NV7V')===hJ(0x421,'Siy%')){var H=a9(aa[hJ(0x76c,'gOf6')],ab[hJ(0x57f,'H8ps')],ac);if(this['chartType']==ad[hJ(0xa2f,'ediM')][hJ(0xcac,'$xQC')][hJ(0x10e,'1GSW')]){if(b8=[b9['DATE'],ba[hJ(0x629,'k4]o')],bb[hJ(0xac5,'du*y')],bc[hJ(0xa7a,'Id8Y')],bd[hJ(0x20d,'lpS7')],be[hJ(0x2f5,'tUB$')],bf(bg[hJ(0x9a1,'(G4u')])-H['vol'],bh(bi[hJ(0x1fc,'Wm]g')])-H[hJ(0xb1f,'7u4R')]]['join'](','),bj[hJ(0x9bc,'SQOl')]('m')){var I=bT(bU[hJ(0x5ea,'y2AJ')]('m','')),J=bV(bW['TIME']),K=bX(J/0x64)+bY((J%0x64+I)/0x3c),L=bZ(K+''+(J%0x64+I)%0x3c);c0(c1[hJ(0x245,'SQOl')])<=L?(c2['VOL']=-H['vol'],c3['AMOUNT']=-H[hJ(0xa69,'rf%J')],c4=c5(c6,c7),this['rawDatas'][this[hJ(0x40c,'Mph)')]['length']-0x1]=c8):this[hJ(0x79f,'ediM')][hJ(0x1b9,'xQEn')](c9);}if(bB[hJ(0x189,'CD^6')]('h')){var M=ca(cb[hJ(0x136,'PgDj')]('h',''));M*=0x3c;var N=cc(cd[hJ(0x6f1,'lpS7')]),O=ce(cf['t']/0x64)+cg((N%0x64+M)/0x3c)+(N%0x64+M)%0x3c;ch(ci['TIME'])<=O?(cj[hJ(0x21a,'GIi]')]=-H[hJ(0x43e,'gOf6')],ck[hJ(0x392,'y2AJ')]=-H['amount'],cl=cm(cn,co),this[hJ(0xd3e,'SQOl')][this[hJ(0x60b,'FD0s')][hJ(0x801,'k4]o')]-0x1]=cp):this['rawDatas'][hJ(0x35d,'1GSW')](cq);}}else this[hJ(0x946,'yCVS')+hJ(0xb17,'9wAj')]||(aZ=[b0[hJ(0x453,'V5]k')],b1[hJ(0x4b4,'K1[^')],b2[hJ(0x2f5,'tUB$')],b3(b4[hJ(0x3c9,'G)GV')])-H['vol'],b5(b6['AMOUNT'])-H[hJ(0x48d,'GIi]')]][hJ(0xb9a,'V5]k')](',')),this[hJ(0x6cf,'tUB$')][hJ(0x66d,'tUB$')](b7);}else{var D=z[A][hJ(0x55b,'OpWV')],E=A+':'+(hJ(0x140,'$xQC')==C?B:B[hJ(0x2df,'3g6i')](0x2));if(''==D){if(hJ(0x78e,'V5]k')!==hJ(0x431,'xQEn')){var I=this[hJ(0xb03,'Ce7w')][this[hJ(0xc8c,'loQy')]>0x0?this[hJ(0x840,'[(or')]-0x1:this[hJ(0x9a6,'NV7V')]];null==I[hJ(0xc28,'FD0s')][hJ(0xbcd,'ZYc2')]&&(I[hJ(0x214,'xQEn')][hJ(0x74a,'(G4u')]={});var J=I[hJ(0x13d,'k4]o')][hJ(0x442,'PH5g')][hJ(0xcb6,'ediM')+'se']?I[hJ(0x715,'[lVW')][hJ(0xa54,'O%MX')][hJ(0xc45,'3g6i')+'se']:0x0;f(F[hJ(0x4db,'ediM')])0x0&&(this[hJ(0x686,'ZYc2')]=m(I['CLOSE']),J=0x0),j+=J;}else{var F=q['ZHIBIAO'][v][A+'.value'];D=F>m[hJ(0x4fa,'PH5g')]?m[hJ(0x910,'gOf6')]:Fac?this[hK(0x371,'mMQQ')]:ad==ae?this[hK(0x29d,'PH5g')]:this[hK(0xa89,'xQEn')],af>ag&&ah>0x0&&ai>0x0&&this[hK(0x4a8,'GIi]')]==aj['dsxConfig'][hK(0x2da,'xQEn')][hK(0xbd7,'lpS7')]?(this[hK(0xb28,'9wAj')]['fillStyle']=null,this[hK(0x3e3,'mMQQ')][hK(0xb64,'V5]k')+'e']=ak,this[hK(0x770,'(G4u')][hK(0x368,'PH5g')](al+0.5*this[hK(0x858,'tUB$')],am,an-0x1*this[hK(0x9b3,'[lVW')],ao-ap-0x1*this[hK(0x918,'H8ps')])):(this[hK(0xbf9,'[(or')]['fillStyle']=aq,this[hK(0x36a,'G)GV')][hK(0x6d2,'(G4u')](ar,as,at,au-av))):(this[hK(0x89a,'OpWV')][hK(0x41c,'1BsR')]=aw,this[hK(0x9f9,'y2AJ')][hK(0x836,'lpS7')](ax,ay,az,aA-aB))),hK(0xa25,'Mph)')==aC&&(this['context'][hK(0xbdf,'[(or')](),this[hK(0x770,'(G4u')][hK(0x743,'(G4u')]=aD,this[hK(0x232,'K1[^')]['arc'](aE,aF,aG/0x2,0x0,0x2*aH['PI']),this['context'][hK(0x65c,'PH5g')]()));else{var p=this,q=this['currentDat'+'a'];if(null!=q){var r=0x0,u=0x0,v=this['sideHeight'],w=this[hK(0x345,'(G4u')];this[hK(0x720,'PgDj')][hK(0x6df,'SQOl')](function(y,z){var hL=hK;r=0x3*p['dpr'],u=0x3*p[hL(0x400,'$xQC')]+p[hL(0x313,'[(or')]+w+v*z+p[hL(0x7fd,'w@[4')]+p[hL(0xb44,'Id8Y')+'dle'];var A=c[hL(0x94e,'9wAj')][hL(0x9ae,'Wm]g')][y],B=A[hL(0x62b,'1BsR')],C=p['_getTextSi'+'ze'](p[hL(0x381,'SQOl')],B);''!=B&&(p[hL(0x36f,'lpS7')](r,u,p[hL(0x905,'NV7V')],p[hL(0x3a8,'24m2')],B),r+=C[hL(0x69c,'24m2')]+0x5*p[hL(0x729,'Wm]g')]);var D=A[hL(0x806,'k4]o')];Object[hL(0x6d1,'du*y')](D)[hL(0x147,'NV7V')](function(E){var hM=hL,F=q['ZHIBIAO'][y][E],G=D[E][hM(0x807,'xQEn')],H=D[E][hM(0x2e5,'2&Zv')],I=D[E][hM(0x423,'1BsR')+'e'];if(F&&!(p['chartType']<=c[hM(0xb75,'OpWV')][hM(0x193,'7u4R')][hM(0x353,'V5]k')+'g5']&&'VOL'==y&&hM(0x21a,'GIi]')!=E)){if(hM(0x2c8,'ediM')===hM(0x521,'ZYc2')){if(I[hM(0x34f,'[lVW')]==q[hM(0xa78,'7u4R')]&&y[hM(0x768,'w@[4')]==q['OPEN']&&c[hM(0x681,'PH5g')]==u[hM(0xbd1,'O%MX')]&&v['LOW']==w[hM(0x8b6,'$xQC')])return;x=function(O,P,Q){var hN=hM,R=O[hN(0x5b3,'H8ps')]<=0x0?P[hN(0xbff,'Id8Y')]:O[hN(0x9ff,'(G4u')],S=E[hN(0x7de,'1GSW')](O['HIGH'],P['CLOSE']),T=F[hN(0x447,'ediM')](O[hN(0x607,'9wAj')],P[hN(0x2f5,'tUB$')]),U='d'==Q?P[hN(0xb4b,'1BsR')]:O[hN(0x35f,'m38$')],V='d'==Q?P[hN(0x5a3,'G)GV')]:O[hN(0x17b,'1BsR')];return[P[hN(0x391,'Wm]g')],R,S,T,P[hN(0x434,'J57L')],U,V][hN(0x233,'rf%J')](',');}(A,B,C),this['rawDatas'][this[hM(0x79f,'ediM')]['length']-0x1]=D;}else{if(hM(0x140,'$xQC')!=H&&(hM(0x698,'ediM')==typeof F&&(F=parseFloat(F)),F=p[hM(0x502,'y2AJ')](F)),''==G){if(hM(0xc24,'Wm]g')!==hM(0x45d,'1BsR')){var J=q[hM(0xb9d,'7u4R')][y][E+hM(0xcce,'lpS7')];J>m[hM(0xd0f,'J57L')]?m[hM(0x213,'m38$')]:Jthis[hQ(0x37b,'xQEn')]/0x2?(this[hQ(0x1c8,'k4]o')](u-x-this[hQ(0xbaf,'Siy%')],v,u-this[hQ(0x794,'gOf6')],v,this[hQ(0xa3a,'lpS7')],this[hQ(0x5da,'G)GV')]),this[hQ(0xbeb,'7u4R')](u-x-this[hQ(0xec,'24m2')]-1.5*this[hQ(0xb5b,'V5]k')],v,0x0,0x0,this[hQ(0x14d,'4#sO')],hQ(0x952,'lpS7'),0x3*this[hQ(0xbb5,'xQEn')],0x0,0x0),this[hQ(0x23f,'O%MX')](u-x-w['width']-0x7*this[hQ(0x766,'SQOl')],v+Math['abs'](q),this['fontSize'],this[hQ(0x8b3,'V5]k')],m)):(this[hQ(0xad1,'24m2')](u+this['dpr'],v,u+x+this[hQ(0x3e9,'Ce7w')],v,this['lineWidth'],this[hQ(0xab9,'Ce7w')]),this[hQ(0x4d5,'lpS7')](u+this[hQ(0x6dd,'ZYc2')]+x+1.5*this[hQ(0x281,'rf%J')],v,0x0,0x0,this[hQ(0x464,'y2AJ')],hQ(0x98e,'CD^6'),0x3*this['dpr'],0x0,0x0),this[hQ(0x5f7,'PgDj')](u+x+0x7*this['dpr'],v+Math[hQ(0x3d4,'m38$')](q),this[hQ(0xba3,'lpS7')],this[hQ(0xba6,'1GSW')],m));},g['prototype']['_showKline'+gl(0x21e,'CD^6')]=function(){var hR=gl;if('PznCm'==='GyFMy'){var V=this[hR(0x3bd,'yCVS')+'ze'](this[hR(0xdc,'gOf6')]);V=this[hR(0x46f,'dUFc')]+V,this[hR(0x805,'(G4u')]=V;}else{if(this['isShowKlin'+hR(0x989,'9wAj')]&&this[hR(0x7fc,'PgDj')]==c[hR(0x11a,'2&Zv')][hR(0x138,'O%MX')][hR(0x7a4,'akt$')]){if(!this['currentDat'+'a'])return;var q=this[hR(0x222,'du*y')],v=this[hR(0xd4a,'V5]k')+'a'][hR(0x476,'rf%J')+'EX']*(this['klineWidth']+this['klinePaddi'+'ng']),y=q/0x5,z=this[hR(0x4f3,'H8ps')+'a'],A=z[hR(0x682,'xH8f')],B=z[hR(0x1c0,'yCVS')],D=z['LOW'],E=z[hR(0x1cd,'3g6i')],F=z[hR(0x6ab,'m38$')],G=z[hR(0xadd,'xQEn')]?z[hR(0xaf2,'OpWV')]:hR(0x380,'Wm]g'),H=z[hR(0x3f3,'7u4R')],I=z['AMOUNT'],J=z['LASTCLOSE'],K=E-J,M=J>0x0?K/J*0x64:0x0,N=hR(0xc53,'H8ps')+F+'\x20'+G['substr'](0x0,0x2)+':'+G[hR(0x80a,'O%MX')](0x2,0x2),O=this[hR(0x3ab,'Id8Y')+'ze'](this['fontSize'],N),P=0x14*this[hR(0x729,'Wm]g')],Q=O[hR(0xca5,'ediM')]+0xa*this['dpr'],R=0x5*this[hR(0x3b9,'PH5g')]+0x9*(this[hR(0x84d,'akt$')]+0x5*this[hR(0x6de,'loQy')]);if(v=v>this[hR(0xcb5,'9wAj')]/0x2?P:this['width']-Q-P,this['width']>this[hR(0xb6f,'du*y')]&&this[hR(0x69c,'24m2')]>0x5*Q){var S=this['currentInd'+'ex']*(this[hR(0xb69,'V5]k')]+this[hR(0xfc,'PH5g')+'ng'])+this[hR(0xbf5,'lpS7')]/0x2;v=S+(S>this[hR(0x72b,'3g6i')]/0x2?-Q-Q:Q);}this['_drawRound'+hR(0xaae,'yCVS')](v,y,Q,R,0x3*this[hR(0x70b,'OpWV')],this[hR(0x5b7,'dUFc')+'r'],!0x1),this[hR(0xb13,'1BsR')+'Rect'](v+this[hR(0x277,'m38$')],y+this[hR(0x3b9,'PH5g')],Q-0x2*this[hR(0x794,'gOf6')],R-0x2*this[hR(0x766,'SQOl')],0x3*this[hR(0x71c,'1BsR')],this['background'+'Color'],!0x0),v+=0x5*this['dpr'],y+=this[hR(0x60c,'H8ps')]+0x5*this[hR(0x3b9,'PH5g')],this[hR(0x3be,'xQEn')+hR(0xc91,'Wm]g')](v,y,Q,'时间',N,0x0),y+=this['fontSize']+0x5*this['dpr'],this[hR(0x651,'mMQQ')+hR(0x2fb,'Ce7w')](v,y,Q,'开',A,J),y+=this[hR(0x6e4,'J57L')]+0x5*this[hR(0x766,'SQOl')],this[hR(0xc44,'gOf6')+hR(0x691,'Mh9i')](v,y,Q,'高',B,J),y+=this[hR(0x81b,'2&Zv')]+0x5*this[hR(0x729,'Wm]g')],this['_drawKline'+hR(0xbce,'1BsR')](v,y,Q,'低',D,J),y+=this[hR(0x608,'Mh9i')]+0x5*this[hR(0xb56,'du*y')],this[hR(0x260,'k4]o')+hR(0x254,'dUFc')](v,y,Q,'收',E,J),y+=this[hR(0xa3f,'(G4u')]+0x5*this[hR(0x857,'akt$')],this[hR(0x234,'(G4u')+hR(0x2cd,'G)GV')](v,y,Q,hR(0x88a,'1BsR'),K[hR(0x97d,'G)GV')](0x2),-0x1),y+=this[hR(0x7ec,'k4]o')]+0x5*this[hR(0x315,'7u4R')],this['_drawKline'+hR(0x877,'[lVW')](v,y,Q,'涨跌幅',M['toFixed'](0x2)+'%',-0x1),y+=this['fontSize']+0x5*this[hR(0x70b,'OpWV')],this[hR(0x301,'lpS7')+hR(0x537,'H8ps')](v,y,Q,hR(0x11e,'(G4u'),this['_number'](H/0x64)+'手',0x0),y+=this[hR(0x9a4,'loQy')]+0x5*this[hR(0x3d3,'O%MX')],this[hR(0x4ed,'rf%J')+hR(0x4f8,'CD^6')](v,y,Q,hR(0xc70,'SQOl'),this['_number'](I),0x0);}}},g[gl(0xc95,'gOf6')][gl(0x3c5,'1GSW')+'TipFont']=function(m,p,q,u,v,w){var hS=gl,x=this[hS(0xb2a,'loQy')+'ze'](this[hS(0x8d0,'Wm]g')],v),y=0x0==w?this[hS(0x1b3,'akt$')]:v>w?this[hS(0x7ad,'1BsR')]:v==w?this['fontColor']:this[hS(0x8e3,'7u4R')];if(-0x1==w){var z=parseFloat(v);y=0x0==z?this[hS(0xa7b,'dUFc')]:z>0x0?this[hS(0x25e,'FD0s')]:this[hS(0x63c,'[(or')];}this['_drawText'](m,p,this[hS(0x608,'Mh9i')],this[hS(0x464,'y2AJ')],u),this['_drawText'](m+q-x[hS(0x643,'Siy%')]-0xa*this[hS(0x3d3,'O%MX')],p,this[hS(0x9a4,'loQy')],y,v);},g[gl(0x62d,'(G4u')][gl(0x7c8,'k4]o')]=function(m){var hT=gl,p=0x2710;return null==m||0x0==m?'0.00':(hT(0x698,'ediM')==typeof m&&(m=parseFloat(m)),m>p*p?m=(m/p/p)[hT(0x48e,'H8ps')](0x2)+'亿':m>p?m=(m/p)[hT(0x732,'loQy')](0x2)+'万':m
+
+
+
+
+
+ 大师兄K线图
+
+
+
+
+
+
+
+
+
+
+
diff --git a/app/src/main/java/com/dsxkline/.DS_Store b/app/src/main/java/com/dsxkline/.DS_Store
new file mode 100644
index 0000000..cb71834
Binary files /dev/null and b/app/src/main/java/com/dsxkline/.DS_Store differ
diff --git a/app/src/main/java/com/dsxkline/android/MainActivity.java b/app/src/main/java/com/dsxkline/android/MainActivity.java
new file mode 100644
index 0000000..674a9bd
--- /dev/null
+++ b/app/src/main/java/com/dsxkline/android/MainActivity.java
@@ -0,0 +1,227 @@
+package com.dsxkline.android;
+
+import androidx.annotation.RequiresApi;
+import androidx.appcompat.app.AppCompatActivity;
+
+import android.os.Build;
+import android.os.Bundle;
+import android.view.View;
+import android.view.WindowManager;
+import android.widget.Button;
+import android.widget.LinearLayout;
+import android.widget.RelativeLayout;
+import android.widget.ScrollView;
+
+import com.dsxkline.android.dsxkline.DsxKline;
+import com.dsxkline.android.dsxkline.HqModel;
+import com.dsxkline.android.dsxkline.QQhq;
+
+import org.json.JSONArray;
+import org.json.JSONException;
+import org.json.JSONObject;
+
+import java.io.BufferedReader;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.InputStreamReader;
+import java.net.HttpURLConnection;
+import java.net.MalformedURLException;
+import java.net.ProtocolException;
+import java.net.URL;
+import java.util.List;
+import java.util.Map;
+
+public class MainActivity extends AppCompatActivity {
+
+ private DsxKline kline;
+ private static String code = "sh000001";
+ private static int cycle = 0;
+ private static int page = 1;
+ private static JSONArray datas = new JSONArray();
+
+ @RequiresApi(api = Build.VERSION_CODES.R)
+ @Override
+ protected void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ WindowManager wm1 = this.getWindowManager();
+ int width = wm1.getCurrentWindowMetrics().getBounds().width();
+ kline = new DsxKline(this);
+
+ setContentView(R.layout.activity_main);
+ ScrollView scrollView = findViewById(R.id.scrollView);
+ LinearLayout linearLayout = findViewById(R.id.scrollViewContent);
+ RelativeLayout.LayoutParams layoutParams = new RelativeLayout.LayoutParams(width,width);
+ layoutParams.topMargin = 50;
+ linearLayout.addView(kline,layoutParams);
+ createTabbar();
+ //addContentView(kline,layoutParams);
+ // 开始请求并加载数据
+ kline.onLoading = new DsxKline.ICallback() {
+ @Override
+ public void call(Object... args) {
+ try {
+ getStockDatas(code);
+ } catch (JSONException e) {
+ e.printStackTrace();
+ }
+ }
+ };
+ // 自动加载下一页数据
+ kline.nextPage = new DsxKline.ICallback() {
+ @Override
+ public void call(Object... args) {
+ try {
+ getStockDatas(code);
+ } catch (JSONException e) {
+ e.printStackTrace();
+ }
+ }
+ };
+ }
+
+ private void createTabbar(){
+ Button bt0 = findViewById(R.id.bt0);
+ Button bt1 = findViewById(R.id.bt1);
+ Button bt2 = findViewById(R.id.bt2);
+ Button bt3 = findViewById(R.id.bt3);
+ Button bt4 = findViewById(R.id.bt4);
+ Button bt5 = findViewById(R.id.bt5);
+ bt0.setTag(0);
+ bt1.setTag(1);
+ bt2.setTag(2);
+ bt3.setTag(3);
+ bt4.setTag(4);
+ bt5.setTag(5);
+ View.OnClickListener click = new View.OnClickListener() {
+ @RequiresApi(api = Build.VERSION_CODES.KITKAT)
+ @Override
+ public void onClick(View v) {
+ cycle = Integer.parseInt(v.getTag().toString());
+ page = 1;
+ datas = new JSONArray();
+ kline.chartType = cycle>=2? DsxKline.ChartType.candle:cycle==0? DsxKline.ChartType.timeSharing: DsxKline.ChartType.timeSharing5;
+ try {
+ kline.startLoading();
+ } catch (JSONException e) {
+ e.printStackTrace();
+ }
+ }
+ };
+ bt0.setOnClickListener(click);
+ bt1.setOnClickListener(click);
+ bt2.setOnClickListener(click);
+ bt3.setOnClickListener(click);
+ bt4.setOnClickListener(click);
+ bt5.setOnClickListener(click);
+ }
+
+ @RequiresApi(api = Build.VERSION_CODES.KITKAT)
+ public void getStockDatas(String code) throws JSONException {
+ if(kline.chartType == DsxKline.ChartType.candle) getDay(code);
+ if(kline.chartType.ordinal() <= DsxKline.ChartType.timeSharing5.ordinal())getQuotes(code);
+ }
+
+
+ @RequiresApi(api = Build.VERSION_CODES.KITKAT)
+ private void getQuotes(String code) throws JSONException {
+ List result = QQhq.getQuote(code);
+ if(result!=null){
+ HqModel model = result.get(0);
+ kline.lastClose = Double.parseDouble(model.lastClose);
+ if(cycle==0)getTimeline(code);
+ if(cycle==1)getTimeline5(code);
+ }
+
+ }
+
+ @RequiresApi(api = Build.VERSION_CODES.KITKAT)
+ private void getTimeline(String code){
+ List result = null;
+ try {
+ result = QQhq.getTimeLine(code);
+ JSONArray datas = new JSONArray(result);
+ runOnUiThread(new Runnable() {
+ @Override
+ public void run() {
+ try {
+ kline.updateKline(datas);
+ } catch (JSONException e) {
+ e.printStackTrace();
+ }
+ kline.finishLoading();
+ }
+ });
+ } catch (JSONException e) {
+ e.printStackTrace();
+ }
+
+ }
+
+ @RequiresApi(api = Build.VERSION_CODES.KITKAT)
+ private void getTimeline5(String code) throws JSONException {
+ Map result = QQhq.getFdayLine(code);
+ if(result!=null){
+ double lastClose = Double.parseDouble(result.get("lastClose").toString());
+ kline.lastClose = lastClose;
+ List data = (List) result.get("data");
+ JSONArray datas = new JSONArray(data);
+ runOnUiThread(new Runnable() {
+ @RequiresApi(api = Build.VERSION_CODES.KITKAT)
+ @Override
+ public void run() {
+ try {
+ kline.updateKline(datas);
+
+ } catch (JSONException e) {
+ e.printStackTrace();
+ }
+ kline.finishLoading();
+ }
+ });
+ }
+
+ }
+
+ @RequiresApi(api = Build.VERSION_CODES.KITKAT)
+ private void getDay(String code) throws JSONException {
+ String cycleName = "day";
+ if(cycle==2) cycleName = "day";
+ if(cycle==3) cycleName = "week";
+ if(cycle==4) cycleName = "month";
+ if(cycle==5) cycleName = "m1";
+ List result = QQhq.getkLine(code,cycleName,"","",320,"qfq");
+ if(!result.isEmpty()){
+ try {
+ JSONArray data = new JSONArray(result);
+ if(data.length()>0){
+ if(page<=1) datas = new JSONArray();
+ String a = data.toString()+(datas.length()>0?datas.toString():"");
+ a = a.replace("][",",");
+ datas = new JSONArray(a);
+ runOnUiThread(new Runnable() {
+ @Override
+ public void run() {
+ try {
+ kline.page = page;
+ kline.updateKline(datas);
+ page ++;
+
+ } catch (JSONException e) {
+ e.printStackTrace();
+ }
+ kline.finishLoading();
+ }
+ });
+ }
+
+
+ } catch (JSONException e) {
+ e.printStackTrace();
+ kline.finishLoading();
+ }
+ }
+
+ }
+
+
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/dsxkline/android/dsxkline/DsxKline.java b/app/src/main/java/com/dsxkline/android/dsxkline/DsxKline.java
new file mode 100644
index 0000000..8b39f1a
--- /dev/null
+++ b/app/src/main/java/com/dsxkline/android/dsxkline/DsxKline.java
@@ -0,0 +1,333 @@
+package com.dsxkline.android.dsxkline;
+
+import android.annotation.SuppressLint;
+import android.app.Activity;
+import android.content.Context;
+import android.graphics.Bitmap;
+import android.os.Build;
+import android.os.Bundle;
+import android.util.AttributeSet;
+import android.util.Log;
+import android.view.View;
+import android.webkit.JavascriptInterface;
+import android.webkit.ValueCallback;
+import android.webkit.WebResourceRequest;
+import android.webkit.WebResourceResponse;
+import android.webkit.WebSettings;
+import android.webkit.WebView;
+import android.webkit.WebViewClient;
+import android.widget.RelativeLayout;
+
+import androidx.annotation.Nullable;
+import androidx.annotation.RequiresApi;
+
+import org.json.JSONArray;
+import org.json.JSONException;
+import org.json.JSONObject;
+import org.json.JSONStringer;
+
+import java.util.ArrayList;
+import java.util.List;
+
+public class DsxKline extends WebView {
+
+ // 图表类型
+ public enum ChartType{
+ timeSharing, // 分时图
+ timeSharing5, // 五日分时图
+ candle, // K线图
+ } ;
+
+ // 蜡烛图实心空心
+ public enum CandleType{
+ hollow, // 空心
+ solid // 实心
+ } ;
+ // 缩放K线锁定类型
+ public enum ZoomLockType{
+ none, // 无
+ left, // 锁定左边进行缩放
+ middle, // 锁定中间进行缩放
+ right, // 锁定右边进行缩放
+ follow, // 跟随鼠标位置进行缩放,web版效果比较好
+ } ;
+
+ public interface ICallback{
+ public void call(Object ... args);
+ }
+
+ // 首页地址
+ private static final String HOMEHTML = "file:///android_asset/dsxkline/index.html";
+
+ // K线数据
+ public List datas;
+ // 主题 white dark 等
+ public String theme = "white";
+ // 图表类型 1=分时图 2=k线图
+ public ChartType chartType = ChartType.timeSharing;
+ // 蜡烛图k线样式 1=空心 2=实心
+ public CandleType candleType = CandleType.hollow;
+ // 缩放类型 1=左 2=中 3=右 4=跟随
+ public ZoomLockType zoomLockType = ZoomLockType.right;
+ // 每次缩放大小
+ public double zoomStep = 1;
+ // k线默认宽度
+ public double klineWidth = 5;
+ // 是否显示默认k线提示
+ public boolean isShowKlineTipPannel;
+ // 副图高度
+ public double sideHeight = 60;
+ // 高度
+ public double height;
+ // 宽度
+ public double width;
+ // 默认主图指标 ["MA"]
+ public String[] main = new String[]{"MA"};
+ // 默认副图指标 副图数组代表副图数量 ["VOL","MACD"]
+ public String[] sides = new String[]{"VOL","MACD"};
+ // 昨日收盘价
+ public double lastClose;
+ // 首次加载回调
+ public ICallback onLoading;
+ // 完成加载回调
+ public ICallback updateComplate;
+ // 滚动到左边尽头回调 通常用来加载下一页数据
+ public ICallback nextPage;
+ // 提示数据返回
+ public ICallback onCrossing;
+ // 右边空出k线数量
+ public int rightEmptyKlineAmount = 2;
+ // 当前页码
+ public int page = 1;
+ // 开启调试
+ public boolean debug = false;
+
+
+ public DsxKline(Context context) {
+ super(context);
+ createViews();
+ }
+
+ public DsxKline(Context context, @Nullable AttributeSet attrs) {
+ super(context, attrs);
+ createViews();
+ }
+
+ public DsxKline(Context context, @Nullable AttributeSet attrs, int defStyleAttr) {
+ super(context, attrs, defStyleAttr);
+ createViews();
+ }
+
+ @RequiresApi(api = Build.VERSION_CODES.LOLLIPOP)
+ public DsxKline(Context context, @Nullable AttributeSet attrs, int defStyleAttr, int defStyleRes) {
+ super(context, attrs, defStyleAttr, defStyleRes);
+ createViews();
+ }
+
+ private void createViews(){
+ setSettings();
+ loadUrl(HOMEHTML);
+ pageEvent();
+ }
+ private void setSettings() {
+ WebSettings settings = getSettings();
+ settings.setJavaScriptEnabled(true);; //设置WebView属性,能够执行Javascript脚本
+ settings.setCacheMode(WebSettings.LOAD_NO_CACHE);
+ settings.setLayoutAlgorithm(WebSettings.LayoutAlgorithm.NORMAL);
+ settings.setAllowFileAccess(true); //设置可以访问文件
+ settings.setBuiltInZoomControls(false); //设置不支持缩放
+ settings.setSupportZoom(true);
+ settings.setUseWideViewPort(true);
+ settings.setLoadWithOverviewMode(true);
+ settings.setAppCacheEnabled(true);
+ settings.setDomStorageEnabled(true);
+ settings.setDatabaseEnabled(true);
+ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
+ settings.setMixedContentMode(WebSettings.MIXED_CONTENT_ALWAYS_ALLOW);
+ }
+ }
+
+ @SuppressLint("NewApi")
+ private void executeJs(String js){
+ System.out.println(js);
+ try {
+ evaluateJavascript(js, new ValueCallback() {
+ @Override
+ public void onReceiveValue(String value) {
+ System.out.println(value);
+ }
+ });
+ }catch (Exception e){
+
+ }
+
+ }
+
+ /**
+ * 初始化并创建K线图组件
+ * @throws JSONException
+ */
+ @RequiresApi(api = Build.VERSION_CODES.KITKAT)
+ private void createKline() throws JSONException {
+ String m = new JSONArray(main).toString();
+ String s = new JSONArray(sides).toString();
+ if(width<=0) width = getWidth();
+ if(height<=0) width = getHeight();
+ String js = "var page = 1; "+
+ "var c=document.getElementById(\"kline\");"+
+ "var kline = new dsxKline({"+
+ "element:c,"+
+ "chartType:"+chartType.ordinal()+","+
+ "theme:\""+theme+"\", "+
+ "candleType:"+candleType.ordinal()+","+
+ "zoomLockType:"+zoomLockType.ordinal()+","+
+ "isShowKlineTipPannel:"+(isShowKlineTipPannel?"true":"false")+","+
+ "lastClose:"+lastClose+","+
+ "sideHeight:"+sideHeight+","+
+ "paddingBottom:0,"+
+ "rightEmptyKlineAmount:"+rightEmptyKlineAmount+","+
+ "autoSize:true,"+
+ "debug:"+(debug?"true":"false")+","+
+ "main:"+ m +","+
+ "sides:"+s+","+
+ "onLoading:function(o){"+
+ "window.injectedDsxKline.onLoading();"+
+ "},"+
+ "nextPage:function(data,index){"+
+ "window.injectedDsxKline.nextPage();"+
+ "},"+
+ "onCrossing:function(data,index){"+
+ "window.injectedDsxKline.onCrossing(JSON.stringify(data),index);"+
+ "},"+
+ "updateComplate:function(){"+
+ "window.injectedDsxKline.updateComplate();"+
+ "}"+
+ "});";
+ executeJs(js);
+ }
+
+ /**
+ * 更新K线图
+ * @param data
+ * @throws JSONException
+ */
+ @RequiresApi(api = Build.VERSION_CODES.KITKAT)
+ public void updateKline(JSONArray data) throws JSONException {
+ String m = new JSONArray(main).toString();
+ String s = new JSONArray(sides).toString();
+ String js = "var data = "+(data.toString())+";"+
+ "if(data!=null){"+
+ "if(kline!=null){"+
+ "kline.update({"+
+ "chartType:"+chartType.ordinal()+", "+
+ "theme:\""+theme+"\","+
+ "candleType:"+candleType.ordinal()+","+
+ "zoomLockType:"+zoomLockType.ordinal()+","+
+ "isShowKlineTipPannel:"+(isShowKlineTipPannel?"true":"false")+","+
+ "lastClose:"+lastClose+","+
+ "sides:"+s+","+
+ //"main:"+m+","+
+ "page:"+page+","+
+ "sideHeight:"+sideHeight+","+
+ "datas:data"+
+ "});"+
+ "}"+
+ "};" +
+ "kline.finishLoading();";
+
+ executeJs(js);
+ }
+
+ /**
+ * 加载数据前调用
+ * @throws JSONException
+ */
+ @RequiresApi(api = Build.VERSION_CODES.KITKAT)
+ public void startLoading() throws JSONException {
+ String js = "kline.chartType="+chartType.ordinal()+";kline.startLoading();";
+ executeJs(js);
+ }
+
+ /**
+ * 更新完K线图后调用
+ */
+ public void finishLoading(){
+ String js = "kline.finishLoading();";
+ executeJs(js);
+ }
+
+ /**
+ * JS
+ */
+ private void pageEvent(){
+ // js 通信
+ addJavascriptInterface(new DsxKlineJavascriptInterface(getContext()), "injectedDsxKline");
+ // 网页加载事件
+ setWebViewClient(new WebViewClient(){
+ @Override
+ public void onPageStarted(WebView view, String url, Bitmap favicon) {
+ super.onPageStarted(view, url, favicon);
+ }
+
+ @RequiresApi(api = Build.VERSION_CODES.KITKAT)
+ @Override
+ public void onPageFinished(WebView view, String url) {
+ super.onPageFinished(view, url);
+ System.out.println("创建K线图");
+ try {
+ createKline();
+ } catch (JSONException e) {
+ e.printStackTrace();
+ }
+ }
+
+ @Override
+ public void onReceivedHttpError(WebView view, WebResourceRequest request, WebResourceResponse errorResponse) {
+ super.onReceivedHttpError(view, request, errorResponse);
+ }
+ });
+ }
+
+ public class DsxKlineJavascriptInterface {
+ private Context context;
+
+ public DsxKlineJavascriptInterface(Context context) {
+ this.context = context;
+ }
+
+ /**
+ * 开始加载数据
+ */
+ @JavascriptInterface
+ public void onLoading() {
+ if(onLoading!=null){
+ onLoading.call();
+ }
+ }
+
+ /**
+ * 滚动到最左边,继续加载下一页数据
+ */
+ @JavascriptInterface
+ public void nextPage() {
+ if(nextPage!=null){
+ nextPage.call();
+ }
+ }
+ @JavascriptInterface
+ public void onCrossing(String data,int index){
+ if(onCrossing!=null){
+ onCrossing.call(data,index);
+ }
+ }
+
+ @JavascriptInterface
+ public void updateComplate(){
+ if(updateComplate!=null){
+ updateComplate.call();
+ }
+ }
+
+
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/dsxkline/android/dsxkline/HqModel.java b/app/src/main/java/com/dsxkline/android/dsxkline/HqModel.java
new file mode 100644
index 0000000..4f13f13
--- /dev/null
+++ b/app/src/main/java/com/dsxkline/android/dsxkline/HqModel.java
@@ -0,0 +1,18 @@
+package com.dsxkline.android.dsxkline;
+
+
+public class HqModel {
+ public String name;
+ public String code;
+ public String price;
+ public String lastClose;// 昨收
+ public String open;
+ public String high;
+ public String low;
+ public String vol;
+ public String volAmount;
+ public String date;
+ public String time;
+ public String change;
+ public String changeRatio;
+}
diff --git a/app/src/main/java/com/dsxkline/android/dsxkline/QQhq.java b/app/src/main/java/com/dsxkline/android/dsxkline/QQhq.java
new file mode 100644
index 0000000..482dda5
--- /dev/null
+++ b/app/src/main/java/com/dsxkline/android/dsxkline/QQhq.java
@@ -0,0 +1,219 @@
+package com.dsxkline.android.dsxkline;
+
+import org.json.JSONArray;
+import org.json.JSONException;
+import org.json.JSONObject;
+
+import java.io.BufferedReader;
+import java.io.InputStream;
+import java.io.InputStreamReader;
+import java.lang.reflect.Array;
+import java.net.HttpURLConnection;
+import java.net.URL;
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+public class QQhq {
+
+
+ /**
+ * 请求第三方实时行情
+ * @param {string} code 股票代码
+ * @param {object} success
+ * @param {object} fail
+ * 0: 未知 1: 名字 2: 代码 3: 当前价格 4: 昨收 5: 今开 6: 成交量(手) 7: 外盘 8: 内盘 9: 买一 10: 买一量(手) 11-18: 买二 买五 19: 卖一 20: 卖一量 21-28: 卖二 卖五 29: 最近逐笔成交 30: 时间 31: 涨跌 32: 涨跌% 33: 最高 34: 最低 35: 价格/成交量(手)/成交额 36: 成交量(手) 37: 成交额(万) 38: 换手率 39: 市盈率 40: 41: 最高 42: 最低 43: 振幅 44: 流通市值 45: 总市值 46: 市净率 47: 涨停价 48: 跌停价
+ */
+ public static List getQuote(String code){
+ String api = "http://qt.gtimg.cn/q="+code;
+ String resultStart = "v_{code}=";
+ String resultEnd = ";";
+ String data = get(api);
+ //console.log(response);
+ List list = null;
+ if(data!=null){
+ list = new ArrayList<>();
+ String[] dataList = data.split(resultEnd);
+ String[] codes = code.split(",");
+ for (int i = 0; i < dataList.length; i++) {
+ String item = dataList[i];
+ String rss = item.replace(resultStart.replace("{code}",code.toLowerCase()),"");
+ String[] rs = rss.split("~");
+ if(rs[1]!=""){
+ HqModel obj = new HqModel();
+ obj.name = rs[1];
+ obj.code = codes[i];
+ obj.price = rs[3];
+ obj.lastClose = rs[4];
+ obj.open = rs[5];
+ obj.high = rs[33];
+ obj.low = rs[34];
+ obj.vol = rs[6];
+ obj.volAmount = rs[37];
+ obj.date = rs[30].substring(0,8);
+ obj.time = rs[30].substring(8);
+ obj.change = rs[31];
+ obj.changeRatio = rs[32];
+
+ list.add(obj);
+ //console.log(obj);
+ i++;
+ }
+ }
+ }
+ return list;
+ }
+
+ public static List getTimeLine(String code) throws JSONException {
+ String api = "https://web.ifzq.gtimg.cn/appstock/app/minute/query?_var=min_data_"+code+"&code="+code+"&r=0."+(new Date().getTime());
+ if(code.startsWith("us")){
+ api = "https://web.ifzq.gtimg.cn/appstock/app/UsMinute/query?_var=min_data_"+code+"&code="+code.substring(0,2)+"."+code.substring(2)+"&r=0."+(new Date().getTime());
+ code = code.substring(0,2)+"."+code.substring(2);
+ }
+ List list = null;
+ String result = get(api);
+ if(result!=null){
+ result = result.replace("min_data_"+code.replace(".","")+"=","");
+ JSONObject rss = new JSONObject(result);
+ JSONArray data = rss.getJSONObject("data").getJSONObject(code).getJSONObject("data").getJSONArray("data");
+ String date = rss.getJSONObject("data").getJSONObject(code).getJSONObject("data").getString("date");
+ list = new ArrayList<>();
+ for (int i = 0; i < data.length(); i++) {
+ String item = data.getString(i);
+ String[] r = item.split(" ");
+ String low = date+","+item.replaceAll(" ",",");
+ list.add(low);
+ }
+ }
+ return list;
+ }
+
+ public static Map getFdayLine(String code) throws JSONException {
+ String api = "https://web.ifzq.gtimg.cn/appstock/app/day/query?_var=fdays_data_"+code+"&code="+code+"&r=0."+(new Date().getTime());
+ if(code.startsWith("us")){
+ api = "https://web.ifzq.gtimg.cn/appstock/app/dayus/query?_var=fdays_data_"+code+"&code="+code.substring(0,2)+"."+code.substring(2)+"&r=0."+(new Date().getTime());
+ code = code.substring(0,2)+"."+code.substring(2);
+ }
+ Map map = new HashMap();
+ List list = null;
+ String result = get(api);
+ double prec = 0;
+ if(result!=null){
+ result = result.replace("fdays_data_"+code.replace(".","")+"=","");
+ JSONObject rss = new JSONObject(result);
+ JSONArray data = rss.getJSONObject("data").getJSONObject(code).getJSONArray("data");
+ list = new ArrayList<>();
+ for (int i = data.length()-1; i >=0; i--) {
+ JSONObject item = data.getJSONObject(i);
+ String date = item.getString("date");
+ prec = item.getDouble("prec");
+ JSONArray d = item.getJSONArray("data");
+ for (int j = 0; j < d.length(); j++) {
+ String subitem = d.getString(j);
+ String low = date+","+subitem.replaceAll(" ",",");
+ list.add(low);
+ }
+ }
+ }
+ map.put("lastClose",prec);
+ map.put("data",list);
+ return map;
+ }
+
+ /**
+ * 获取K线图历史数据
+ * @param {string} code 股票代码
+ * @param {string} cycle 周期 day,week,month
+ * @param {string} startDate 开始日期 默认 空
+ * @param {string} endDate 结束日期 默认空
+ * @param {int} pageSize 每页大小 默认 320
+ * @param {string} fqType 复权类型 前复权=qfq,后复权=hfq
+ * @param {*} success
+ * @param {*} fail
+ */
+ public static List getkLine(String code,String cycle,String startDate,String endDate,int pageSize,String fqType) throws JSONException {
+ String api = "https://proxy.finance.qq.com/ifzqgtimg/appstock/app/newfqkline/get?_var=kline_"+cycle+fqType+"¶m="+code+","+cycle+","+startDate+","+endDate+","+pageSize+","+fqType+"&r=0.36592503777267116"+(new Date().getTime());
+ if(code.startsWith("us")){
+ code = code.substring(0,2)+"."+code.substring(2);
+ api = "https://proxy.finance.qq.com/ifzqgtimg/appstock/app/newfqkline/get?_var=kline_"+cycle+fqType+"¶m="+code+","+cycle+","+startDate+","+endDate+","+pageSize+","+fqType+"&r=0.36592503777267116"+(new Date().getTime());
+ }
+
+ List list = null;
+ String result = get(api);
+ if(result!=null){
+ result = result.replace("kline_"+cycle+fqType+"=","");
+ JSONObject rss = new JSONObject(result);
+ JSONArray data = rss.getJSONObject("data").getJSONObject(code).getJSONArray(cycle);
+ list = new ArrayList<>();
+ for (int i = 0; i < data.length(); i++) {
+ JSONArray d = data.getJSONArray(i);
+ String r = d.getString(0)+","+d.getString(1)+","+d.getString(3)+","+d.getString(4)+","+d.getString(2)+","+d.getString(5)+","+d.getString(8);
+ r = r.replaceAll("-","");
+ list.add(r);
+ }
+ }
+ return list;
+ }
+
+ public static List getMinLine (String code,String cycle,int pageSize) throws JSONException {
+
+ if(code.startsWith("us")){
+ code = code.substring(0,2)+"."+code.substring(2);
+ }
+ String api = "https://ifzq.gtimg.cn/appstock/app/kline/mkline?param="+code+","+cycle+",,"+pageSize+"&_var="+cycle+"_today&r=0.36592503777267116"+(new Date().getTime());
+
+ List list = null;
+ String result = get(api);
+ if(result!=null){
+ result = result.replace(cycle+"_today=","");
+ JSONObject rss = new JSONObject(result);
+ JSONArray data = rss.getJSONObject("data").getJSONObject(code).getJSONArray(cycle);
+ list = new ArrayList<>();
+ for (int i = 0; i < data.length(); i++) {
+ JSONArray d = data.getJSONArray(i);
+ String date = d.getString(0).substring(0,8);
+ String time = d.getString(0).substring(8);
+ String r = date+","+time+","+d.getString(1)+","+d.getString(3)+","+d.getString(4)+","+d.getString(2)+","+d.getString(5)+","+d.getString(7);
+ r = r.replaceAll("-","");
+ list.add(r);
+ }
+ }
+ return list;
+ }
+
+
+
+ private static String get(String urlstr){
+ StringBuffer sb = new StringBuffer();
+ try {
+ URL url = new URL(urlstr);
+ HttpURLConnection con = (HttpURLConnection) url.openConnection();
+ con.setConnectTimeout(30 * 1000);
+ con.setReadTimeout(20*1000);
+ InputStream is = con.getInputStream();
+ BufferedReader in = new BufferedReader(new InputStreamReader(is));
+ String line;
+ while ((line = in.readLine()) != null) {
+ sb.append(line);
+ }
+ is.close();
+ is = null;
+ in.close();
+ in = null;
+ if (con != null) {
+ con.disconnect();
+ }
+ con = null;
+
+ url = null;
+ line = null;
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ String res = sb.toString();
+ sb = null;
+ return res;
+ }
+}
diff --git a/app/src/main/res/drawable-v24/ic_launcher_foreground.xml b/app/src/main/res/drawable-v24/ic_launcher_foreground.xml
new file mode 100644
index 0000000..2b068d1
--- /dev/null
+++ b/app/src/main/res/drawable-v24/ic_launcher_foreground.xml
@@ -0,0 +1,30 @@
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/ic_launcher_background.xml b/app/src/main/res/drawable/ic_launcher_background.xml
new file mode 100644
index 0000000..07d5da9
--- /dev/null
+++ b/app/src/main/res/drawable/ic_launcher_background.xml
@@ -0,0 +1,170 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/app/src/main/res/layout/activity_main.xml b/app/src/main/res/layout/activity_main.xml
new file mode 100644
index 0000000..3bb6772
--- /dev/null
+++ b/app/src/main/res/layout/activity_main.xml
@@ -0,0 +1,94 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml b/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml
new file mode 100644
index 0000000..eca70cf
--- /dev/null
+++ b/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml b/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml
new file mode 100644
index 0000000..eca70cf
--- /dev/null
+++ b/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/mipmap-hdpi/ic_launcher.png b/app/src/main/res/mipmap-hdpi/ic_launcher.png
new file mode 100644
index 0000000..a571e60
Binary files /dev/null and b/app/src/main/res/mipmap-hdpi/ic_launcher.png differ
diff --git a/app/src/main/res/mipmap-hdpi/ic_launcher_round.png b/app/src/main/res/mipmap-hdpi/ic_launcher_round.png
new file mode 100644
index 0000000..61da551
Binary files /dev/null and b/app/src/main/res/mipmap-hdpi/ic_launcher_round.png differ
diff --git a/app/src/main/res/mipmap-mdpi/ic_launcher.png b/app/src/main/res/mipmap-mdpi/ic_launcher.png
new file mode 100644
index 0000000..c41dd28
Binary files /dev/null and b/app/src/main/res/mipmap-mdpi/ic_launcher.png differ
diff --git a/app/src/main/res/mipmap-mdpi/ic_launcher_round.png b/app/src/main/res/mipmap-mdpi/ic_launcher_round.png
new file mode 100644
index 0000000..db5080a
Binary files /dev/null and b/app/src/main/res/mipmap-mdpi/ic_launcher_round.png differ
diff --git a/app/src/main/res/mipmap-xhdpi/ic_launcher.png b/app/src/main/res/mipmap-xhdpi/ic_launcher.png
new file mode 100644
index 0000000..6dba46d
Binary files /dev/null and b/app/src/main/res/mipmap-xhdpi/ic_launcher.png differ
diff --git a/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png b/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png
new file mode 100644
index 0000000..da31a87
Binary files /dev/null and b/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png differ
diff --git a/app/src/main/res/mipmap-xxhdpi/ic_launcher.png b/app/src/main/res/mipmap-xxhdpi/ic_launcher.png
new file mode 100644
index 0000000..15ac681
Binary files /dev/null and b/app/src/main/res/mipmap-xxhdpi/ic_launcher.png differ
diff --git a/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png b/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png
new file mode 100644
index 0000000..b216f2d
Binary files /dev/null and b/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png differ
diff --git a/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png b/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png
new file mode 100644
index 0000000..f25a419
Binary files /dev/null and b/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png differ
diff --git a/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png b/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png
new file mode 100644
index 0000000..e96783c
Binary files /dev/null and b/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png differ
diff --git a/app/src/main/res/values-night/themes.xml b/app/src/main/res/values-night/themes.xml
new file mode 100644
index 0000000..8e862d6
--- /dev/null
+++ b/app/src/main/res/values-night/themes.xml
@@ -0,0 +1,16 @@
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/values/colors.xml b/app/src/main/res/values/colors.xml
new file mode 100644
index 0000000..f8c6127
--- /dev/null
+++ b/app/src/main/res/values/colors.xml
@@ -0,0 +1,10 @@
+
+
+ #FFBB86FC
+ #FF6200EE
+ #FF3700B3
+ #FF03DAC5
+ #FF018786
+ #FF000000
+ #FFFFFFFF
+
\ No newline at end of file
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
new file mode 100644
index 0000000..fde145a
--- /dev/null
+++ b/app/src/main/res/values/strings.xml
@@ -0,0 +1,3 @@
+
+ dsxkline
+
\ No newline at end of file
diff --git a/app/src/main/res/values/themes.xml b/app/src/main/res/values/themes.xml
new file mode 100644
index 0000000..c131691
--- /dev/null
+++ b/app/src/main/res/values/themes.xml
@@ -0,0 +1,16 @@
+
+
+
+
\ No newline at end of file
diff --git a/app/src/test/java/com/dsxkline/android/ExampleUnitTest.java b/app/src/test/java/com/dsxkline/android/ExampleUnitTest.java
new file mode 100644
index 0000000..1fa8736
--- /dev/null
+++ b/app/src/test/java/com/dsxkline/android/ExampleUnitTest.java
@@ -0,0 +1,17 @@
+package com.dsxkline.android;
+
+import org.junit.Test;
+
+import static org.junit.Assert.*;
+
+/**
+ * Example local unit test, which will execute on the development machine (host).
+ *
+ * @see Testing documentation
+ */
+public class ExampleUnitTest {
+ @Test
+ public void addition_isCorrect() {
+ assertEquals(4, 2 + 2);
+ }
+}
\ No newline at end of file
diff --git a/build.gradle b/build.gradle
new file mode 100644
index 0000000..9ade2a7
--- /dev/null
+++ b/build.gradle
@@ -0,0 +1,25 @@
+// Top-level build file where you can add configuration options common to all sub-projects/modules.
+buildscript {
+ repositories {
+ google()
+ mavenCentral()
+ }
+ dependencies {
+ classpath "com.android.tools.build:gradle:4.2.1"
+
+ // NOTE: Do not place your application dependencies here; they belong
+ // in the individual module build.gradle files
+ }
+}
+
+allprojects {
+ repositories {
+ google()
+ mavenCentral()
+ jcenter() // Warning: this repository is going to shut down soon
+ }
+}
+
+task clean(type: Delete) {
+ delete rootProject.buildDir
+}
\ No newline at end of file
diff --git a/gradle.properties b/gradle.properties
new file mode 100644
index 0000000..6826e61
--- /dev/null
+++ b/gradle.properties
@@ -0,0 +1,17 @@
+# Project-wide Gradle settings.
+# IDE (e.g. Android Studio) users:
+# Gradle settings configured through the IDE *will override*
+# any settings specified in this file.
+# For more details on how to configure your build environment visit
+# http://www.gradle.org/docs/current/userguide/build_environment.html
+# Specifies the JVM arguments used for the daemon process.
+# The setting is particularly useful for tweaking memory settings.
+org.gradle.jvmargs=-Xmx2048m -Dfile.encoding=UTF-8
+# When configured, Gradle will run in incubating parallel mode.
+# This option should only be used with decoupled projects. More details, visit
+# http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects
+# org.gradle.parallel=true
+# AndroidX package structure to make it clearer which packages are bundled with the
+# Android operating system, and which are packaged with your app"s APK
+# https://developer.android.com/topic/libraries/support-library/androidx-rn
+android.useAndroidX=true
\ No newline at end of file
diff --git a/gradle/wrapper/gradle-wrapper.jar b/gradle/wrapper/gradle-wrapper.jar
new file mode 100644
index 0000000..f6b961f
Binary files /dev/null and b/gradle/wrapper/gradle-wrapper.jar differ
diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties
new file mode 100644
index 0000000..cd9370a
--- /dev/null
+++ b/gradle/wrapper/gradle-wrapper.properties
@@ -0,0 +1,6 @@
+#Thu Apr 21 09:09:51 CST 2022
+distributionBase=GRADLE_USER_HOME
+distributionUrl=https\://services.gradle.org/distributions/gradle-6.7.1-bin.zip
+distributionPath=wrapper/dists
+zipStorePath=wrapper/dists
+zipStoreBase=GRADLE_USER_HOME
diff --git a/gradlew b/gradlew
new file mode 100755
index 0000000..cccdd3d
--- /dev/null
+++ b/gradlew
@@ -0,0 +1,172 @@
+#!/usr/bin/env sh
+
+##############################################################################
+##
+## Gradle start up script for UN*X
+##
+##############################################################################
+
+# Attempt to set APP_HOME
+# Resolve links: $0 may be a link
+PRG="$0"
+# Need this for relative symlinks.
+while [ -h "$PRG" ] ; do
+ ls=`ls -ld "$PRG"`
+ link=`expr "$ls" : '.*-> \(.*\)$'`
+ if expr "$link" : '/.*' > /dev/null; then
+ PRG="$link"
+ else
+ PRG=`dirname "$PRG"`"/$link"
+ fi
+done
+SAVED="`pwd`"
+cd "`dirname \"$PRG\"`/" >/dev/null
+APP_HOME="`pwd -P`"
+cd "$SAVED" >/dev/null
+
+APP_NAME="Gradle"
+APP_BASE_NAME=`basename "$0"`
+
+# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
+DEFAULT_JVM_OPTS=""
+
+# Use the maximum available, or set MAX_FD != -1 to use that value.
+MAX_FD="maximum"
+
+warn () {
+ echo "$*"
+}
+
+die () {
+ echo
+ echo "$*"
+ echo
+ exit 1
+}
+
+# OS specific support (must be 'true' or 'false').
+cygwin=false
+msys=false
+darwin=false
+nonstop=false
+case "`uname`" in
+ CYGWIN* )
+ cygwin=true
+ ;;
+ Darwin* )
+ darwin=true
+ ;;
+ MINGW* )
+ msys=true
+ ;;
+ NONSTOP* )
+ nonstop=true
+ ;;
+esac
+
+CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar
+
+# Determine the Java command to use to start the JVM.
+if [ -n "$JAVA_HOME" ] ; then
+ if [ -x "$JAVA_HOME/jre/sh/java" ] ; then
+ # IBM's JDK on AIX uses strange locations for the executables
+ JAVACMD="$JAVA_HOME/jre/sh/java"
+ else
+ JAVACMD="$JAVA_HOME/bin/java"
+ fi
+ if [ ! -x "$JAVACMD" ] ; then
+ die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME
+
+Please set the JAVA_HOME variable in your environment to match the
+location of your Java installation."
+ fi
+else
+ JAVACMD="java"
+ which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
+
+Please set the JAVA_HOME variable in your environment to match the
+location of your Java installation."
+fi
+
+# Increase the maximum file descriptors if we can.
+if [ "$cygwin" = "false" -a "$darwin" = "false" -a "$nonstop" = "false" ] ; then
+ MAX_FD_LIMIT=`ulimit -H -n`
+ if [ $? -eq 0 ] ; then
+ if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then
+ MAX_FD="$MAX_FD_LIMIT"
+ fi
+ ulimit -n $MAX_FD
+ if [ $? -ne 0 ] ; then
+ warn "Could not set maximum file descriptor limit: $MAX_FD"
+ fi
+ else
+ warn "Could not query maximum file descriptor limit: $MAX_FD_LIMIT"
+ fi
+fi
+
+# For Darwin, add options to specify how the application appears in the dock
+if $darwin; then
+ GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\""
+fi
+
+# For Cygwin, switch paths to Windows format before running java
+if $cygwin ; then
+ APP_HOME=`cygpath --path --mixed "$APP_HOME"`
+ CLASSPATH=`cygpath --path --mixed "$CLASSPATH"`
+ JAVACMD=`cygpath --unix "$JAVACMD"`
+
+ # We build the pattern for arguments to be converted via cygpath
+ ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null`
+ SEP=""
+ for dir in $ROOTDIRSRAW ; do
+ ROOTDIRS="$ROOTDIRS$SEP$dir"
+ SEP="|"
+ done
+ OURCYGPATTERN="(^($ROOTDIRS))"
+ # Add a user-defined pattern to the cygpath arguments
+ if [ "$GRADLE_CYGPATTERN" != "" ] ; then
+ OURCYGPATTERN="$OURCYGPATTERN|($GRADLE_CYGPATTERN)"
+ fi
+ # Now convert the arguments - kludge to limit ourselves to /bin/sh
+ i=0
+ for arg in "$@" ; do
+ CHECK=`echo "$arg"|egrep -c "$OURCYGPATTERN" -`
+ CHECK2=`echo "$arg"|egrep -c "^-"` ### Determine if an option
+
+ if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then ### Added a condition
+ eval `echo args$i`=`cygpath --path --ignore --mixed "$arg"`
+ else
+ eval `echo args$i`="\"$arg\""
+ fi
+ i=$((i+1))
+ done
+ case $i in
+ (0) set -- ;;
+ (1) set -- "$args0" ;;
+ (2) set -- "$args0" "$args1" ;;
+ (3) set -- "$args0" "$args1" "$args2" ;;
+ (4) set -- "$args0" "$args1" "$args2" "$args3" ;;
+ (5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;;
+ (6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;;
+ (7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;;
+ (8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;;
+ (9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;;
+ esac
+fi
+
+# Escape application args
+save () {
+ for i do printf %s\\n "$i" | sed "s/'/'\\\\''/g;1s/^/'/;\$s/\$/' \\\\/" ; done
+ echo " "
+}
+APP_ARGS=$(save "$@")
+
+# Collect all arguments for the java command, following the shell quoting and substitution rules
+eval set -- $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS "\"-Dorg.gradle.appname=$APP_BASE_NAME\"" -classpath "\"$CLASSPATH\"" org.gradle.wrapper.GradleWrapperMain "$APP_ARGS"
+
+# by default we should be in the correct project dir, but when run from Finder on Mac, the cwd is wrong
+if [ "$(uname)" = "Darwin" ] && [ "$HOME" = "$PWD" ]; then
+ cd "$(dirname "$0")"
+fi
+
+exec "$JAVACMD" "$@"
diff --git a/gradlew.bat b/gradlew.bat
new file mode 100644
index 0000000..e95643d
--- /dev/null
+++ b/gradlew.bat
@@ -0,0 +1,84 @@
+@if "%DEBUG%" == "" @echo off
+@rem ##########################################################################
+@rem
+@rem Gradle startup script for Windows
+@rem
+@rem ##########################################################################
+
+@rem Set local scope for the variables with windows NT shell
+if "%OS%"=="Windows_NT" setlocal
+
+set DIRNAME=%~dp0
+if "%DIRNAME%" == "" set DIRNAME=.
+set APP_BASE_NAME=%~n0
+set APP_HOME=%DIRNAME%
+
+@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
+set DEFAULT_JVM_OPTS=
+
+@rem Find java.exe
+if defined JAVA_HOME goto findJavaFromJavaHome
+
+set JAVA_EXE=java.exe
+%JAVA_EXE% -version >NUL 2>&1
+if "%ERRORLEVEL%" == "0" goto init
+
+echo.
+echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
+echo.
+echo Please set the JAVA_HOME variable in your environment to match the
+echo location of your Java installation.
+
+goto fail
+
+:findJavaFromJavaHome
+set JAVA_HOME=%JAVA_HOME:"=%
+set JAVA_EXE=%JAVA_HOME%/bin/java.exe
+
+if exist "%JAVA_EXE%" goto init
+
+echo.
+echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME%
+echo.
+echo Please set the JAVA_HOME variable in your environment to match the
+echo location of your Java installation.
+
+goto fail
+
+:init
+@rem Get command-line arguments, handling Windows variants
+
+if not "%OS%" == "Windows_NT" goto win9xME_args
+
+:win9xME_args
+@rem Slurp the command line arguments.
+set CMD_LINE_ARGS=
+set _SKIP=2
+
+:win9xME_args_slurp
+if "x%~1" == "x" goto execute
+
+set CMD_LINE_ARGS=%*
+
+:execute
+@rem Setup the command line
+
+set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar
+
+@rem Execute Gradle
+"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %CMD_LINE_ARGS%
+
+:end
+@rem End local scope for the variables with windows NT shell
+if "%ERRORLEVEL%"=="0" goto mainEnd
+
+:fail
+rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of
+rem the _cmd.exe /c_ return code!
+if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1
+exit /b 1
+
+:mainEnd
+if "%OS%"=="Windows_NT" endlocal
+
+:omega
diff --git a/local.properties b/local.properties
new file mode 100644
index 0000000..1a77d0f
--- /dev/null
+++ b/local.properties
@@ -0,0 +1,10 @@
+## This file is automatically generated by Android Studio.
+# Do not modify this file -- YOUR CHANGES WILL BE ERASED!
+#
+# This file should *NOT* be checked into Version Control Systems,
+# as it contains information specific to your local configuration.
+#
+# Location of the SDK. This is only used by Gradle.
+# For customization when using a Version Control System, please read the
+# header note.
+sdk.dir=/Users/fengming/Library/Android/sdk
\ No newline at end of file
diff --git a/settings.gradle b/settings.gradle
new file mode 100644
index 0000000..484c39a
--- /dev/null
+++ b/settings.gradle
@@ -0,0 +1,2 @@
+rootProject.name = "dsxkline"
+include ':app'