t |
>>=q,b-=q;15>b&&(s+=e[h++]<>>24;s>>>=q;b-=q;q=v>>>16& 255;if(q&16){v&=65535;q&=15;bu){c.msg="invalid distance too far back";f.mode=30;break a}s>>>=q;b-=q;q=m-y;if(v>q){q=v-q;if(q>M&&f.sane){c.msg="invalid distance too far back";f.mode=30;break a}n=0;d=C;if(0===t){if(n+=E-q,q>3;h-=k;b-=k<<3;c.next_in=h;c.next_out=m;c.avail_in=h >>24&255)+(b>>>8&65280)+((b&65280)<<8)+((b&255)<<24)}function x(){this.mode=0;this.last=!1;this.wrap=0;this.havedict=!1;this.total=this.check=this.dmax=this.flags=0;this.head=null;this.wnext=this.whave=this.wsize=this.wbits=0;this.window=null;this.extra=this.offset=this.length=this.bits=this.hold=0;this.distcode= this.lencode=null;this.have=this.ndist=this.nlen=this.ncode=this.distbits=this.lenbits=0;this.next=null;this.lens=new y.Buf16(320);this.work=new y.Buf16(288);this.distdyn=this.lendyn=null;this.was=this.back=this.sane=0}function f(b){var c;if(!b||!b.state)return-2;c=b.state;b.total_in=b.total_out=c.total=0;b.msg="";c.wrap&&(b.adler=c.wrap&1);c.mode=1;c.last=0;c.havedict=0;c.dmax=32768;c.head=null;c.hold=0;c.bits=0;c.lencode=c.lendyn=new y.Buf32(852);c.distcode=c.distdyn=new y.Buf32(592);c.sane=1;c.back= -1;return 0}function h(b){var c;if(!b||!b.state)return-2;c=b.state;c.wsize=0;c.whave=0;c.wnext=0;return f(b)}function g(b,c){var a,f;if(!b||!b.state)return-2;f=b.state;0>c?(a=0,c=-c):(a=(c>>4)+1,48>c&&(c&=15));if(c&&(8>c||15 e;){if(0===k)break a;k--;d+=f[g++]< >>8&255;a.check=I(a.check,H,2,0);e=d=0;a.mode=2;break}a.flags=0;a.head&&(a.head.done=!1);if(!(a.wrap&1)||(((d&255)<<8)+(d>>8))%31){b.msg="incorrect header check";a.mode=30;break}if(8!==(d&15)){b.msg="unknown compression method";a.mode=30;break}d>>>=4;e-=4;r=(d&15)+8;if(0===a.wbits)a.wbits=r;else if(r>a.wbits){b.msg="invalid window size";a.mode=30;break}a.dmax=1< e;){if(0===k)break a;k--;d+=f[g++]< >8&1);a.flags&512&&(H[0]=d&255,H[1]=d>>>8&255,a.check=I(a.check,H,2,0));e=d=0;a.mode=3;case 3:for(;32>e;){if(0===k)break a;k--;d+=f[g++]< >>8&255,H[2]=d>>>16&255,H[3]= d>>>24&255,a.check=I(a.check,H,4,0));e=d=0;a.mode=4;case 4:for(;16>e;){if(0===k)break a;k--;d+=f[g++]< >8);a.flags&512&&(H[0]=d&255,H[1]=d>>>8&255,a.check=I(a.check,H,2,0));e=d=0;a.mode=5;case 5:if(a.flags&1024){for(;16>e;){if(0===k)break a;k--;d+=f[g++]< >>8&255,a.check=I(a.check,H,2,0));e=d=0}else a.head&&(a.head.extra=null);a.mode=6;case 6:if(a.flags&1024&&(l=a.length, l>k&&(l=k),l&&(a.head&&(r=a.head.extra_len-a.length,a.head.extra||(a.head.extra=Array(a.head.extra_len)),y.arraySet(a.head.extra,f,g,l,r)),a.flags&512&&(a.check=I(a.check,f,l,g)),k-=l,g+=l,a.length-=l),a.length))break a;a.length=0;a.mode=7;case 7:if(a.flags&2048){if(0===k)break a;l=0;do r=f[g+l++],a.head&&r&&65536>a.length&&(a.head.name+=String.fromCharCode(r));while(r&&l a.length&&(a.head.comment+=String.fromCharCode(r));while(r&&l e;){if(0===k)break a;k--;d+=f[g++]< >9&1,a.head.done=!0);b.adler=a.check=0;a.mode=12;break;case 10:for(;32>e;){if(0===k)break a;k--; d+=f[g++]< >>=e&7;e-=e&7;a.mode=27;break}for(;3>e;){if(0===k)break a;k--;d+=f[g++]< >>=1;e-=1;switch(d&3){case 0:a.mode=14;break;case 1:l=a;if(t){r=void 0;C=new y.Buf32(512);s=new y.Buf32(32);for(r=0;144>r;)l.lens[r++]=8;for(;256>r;)l.lens[r++]=9;for(;280> r;)l.lens[r++]=7;for(;288>r;)l.lens[r++]=8;M(1,l.lens,0,288,C,0,l.work,{bits:9});for(r=0;32>r;)l.lens[r++]=5;M(2,l.lens,0,32,s,0,l.work,{bits:5});t=!1}l.lencode=C;l.lenbits=9;l.distcode=s;l.distbits=5;a.mode=20;if(6===c){d>>>=2;e-=2;break a}break;case 2:a.mode=17;break;case 3:b.msg="invalid block type",a.mode=30}d>>>=2;e-=2;break;case 14:d>>>=e&7;for(e-=e&7;32>e;){if(0===k)break a;k--;d+=f[g++]< >>16^65535)){b.msg="invalid stored block lengths";a.mode=30;break}a.length=d& 65535;e=d=0;a.mode=15;if(6===c)break a;case 15:a.mode=16;case 16:if(l=a.length){l>k&&(l=k);l>n&&(l=n);if(0===l)break a;y.arraySet(h,f,g,l,m);k-=l;g+=l;n-=l;m+=l;a.length-=l;break}a.mode=12;break;case 17:for(;14>e;){if(0===k)break a;k--;d+=f[g++]< >>=5;e-=5;a.ndist=(d&31)+1;d>>>=5;e-=5;a.ncode=(d&15)+4;d>>>=4;e-=4;if(286 e;){if(0===k)break a; k--;d+=f[g++]< >>=3;e-=3}for(;19>a.have;)a.lens[R[a.have++]]=0;a.lencode=a.lendyn;a.lenbits=7;l={bits:a.lenbits};J=M(0,a.lens,0,19,a.lencode,0,a.work,l);a.lenbits=l.bits;if(J){b.msg="invalid code lengths set";a.mode=30;break}a.have=0;a.mode=19;case 19:for(;a.have >>24;G=l>>>16&255;x=l&65535;if(w<=e)break;if(0===k)break a;k--;d+=f[g++]< x)d>>>=w,e-=w,a.lens[a.have++]=x;else{if(16===x){for(l=w+ 2;e >>=w;e-=w;if(0===a.have){b.msg="invalid bit length repeat";a.mode=30;break}r=a.lens[a.have-1];l=3+(d&3);d>>>=2;e-=2}else if(17===x){for(l=w+3;e >>=w;e-=w;r=0;l=3+(d&7);d>>>=3;e-=3}else{for(l=w+7;e >>=w;e-=w;r=0;l=11+(d&127);d>>>=7;e-=7}if(a.have+l>a.nlen+a.ndist){b.msg="invalid bit length repeat";a.mode=30;break}for(;l--;)a.lens[a.have++]=r}}if(30===a.mode)break; if(0===a.lens[256]){b.msg="invalid code -- missing end-of-block";a.mode=30;break}a.lenbits=9;l={bits:a.lenbits};J=M(1,a.lens,0,a.nlen,a.lencode,0,a.work,l);a.lenbits=l.bits;if(J){b.msg="invalid literal/lengths set";a.mode=30;break}a.distbits=6;a.distcode=a.distdyn;l={bits:a.distbits};J=M(2,a.lens,a.nlen,a.ndist,a.distcode,0,a.work,l);a.distbits=l.bits;if(J){b.msg="invalid distances set";a.mode=30;break}a.mode=20;if(6===c)break a;case 20:a.mode=21;case 21:if(6<=k&&258<=n){b.next_out=m;b.avail_out= n;b.next_in=g;b.avail_in=k;a.hold=d;a.bits=e;E(b,z);m=b.next_out;h=b.output;n=b.avail_out;g=b.next_in;f=b.input;k=b.avail_in;d=a.hold;e=a.bits;12===a.mode&&(a.back=-1);break}for(a.back=0;;){l=a.lencode[d&(1< >>24;G=l>>>16&255;x=l&65535;if(w<=e)break;if(0===k)break a;k--;d+=f[g++]< >r)];w=l>>>24;G=l>>>16&255;x=l&65535;if(r+w<=e)break;if(0===k)break a;k--;d+=f[g++]< >>=r;e-=r;a.back+=r}d>>>=w;e-=w; a.back+=w;a.length=x;if(0===G){a.mode=26;break}if(G&32){a.back=-1;a.mode=12;break}if(G&64){b.msg="invalid literal/length code";a.mode=30;break}a.extra=G&15;a.mode=22;case 22:if(a.extra){for(l=a.extra;e >>=a.extra;e-=a.extra;a.back+=a.extra}a.was=a.length;a.mode=23;case 23:for(;;){l=a.distcode[d&(1< >>24;G=l>>>16&255;x=l&65535;if(w<=e)break;if(0===k)break a;k--;d+=f[g++]< >r)];w=l>>>24;G=l>>>16&255;x=l&65535;if(r+w<=e)break;if(0===k)break a;k--;d+=f[g++]< >>=r;e-=r;a.back+=r}d>>>=w;e-=w;a.back+=w;if(G&64){b.msg="invalid distance code";a.mode=30;break}a.offset=x;a.extra=G&15;a.mode=24;case 24:if(a.extra){for(l=a.extra;e >>=a.extra;e-=a.extra;a.back+=a.extra}if(a.offset>a.dmax){b.msg="invalid distance too far back";a.mode=30;break}a.mode=25;case 25:if(0=== n)break a;l=z-n;if(a.offset>l){l=a.offset-l;if(l>a.whave&&a.sane){b.msg="invalid distance too far back";a.mode=30;break}l>a.wnext?(l-=a.wnext,r=a.wsize-l):r=a.wnext-l;l>a.length&&(l=a.length);u=a.window}else u=h,r=m-a.offset,l=a.length;l>n&&(l=n);n-=l;a.length-=l;do h[m++]=u[r++];while(--l);0===a.length&&(a.mode=21);break;case 26:if(0===n)break a;h[m++]=a.length;n--;a.mode=21;break;case 27:if(a.wrap){for(;32>e;){if(0===k)break a;k--;d|=f[g++]< e;){if(0===k)break a;k--;d+=f[g++]< a.mode&&(27> a.mode||4!==c))f=b.output,g=b.next_out,m=z-b.avail_out,n=b.state,null===n.window&&(n.wsize=1< =n.wsize?(y.arraySet(n.window,f,g-n.wsize,n.wsize,0),n.wnext=0,n.whave=n.wsize):(k=n.wsize-n.wnext,k>m&&(k=m),y.arraySet(n.window,f,g-m,k,n.wnext),(m-=k)?(y.arraySet(n.window,f,g-m,m,0),n.wnext=m,n.whave=n.wsize):(n.wnext+=k,n.wnext===n.wsize&&(n.wnext=0),n.whave =b;b++)O[b]=0;for(D=0;DK&&(L=K);if(0===K)return E[M++]=20971520,E[M++]=20971520,C.bits=1,0;for(a=1;a =b;b++)if(k<<=1,k-=O[b],0>k)return-1;if(0 b;b++)v[b+1]=v[b]+ O[b];for(D=0;Dr?(N=w[G+t[D]],J=z[l+t[D]]):(N=96,J=0);k=1< >q)+e]=Q<<24|N<<16|J|0;while(0!==e);for(k=1< >=1;0!==k?(d&=k-1,d+=k):d=0;D++;if(0===--O[b]){if(b===K)break;b=p[u+t[D]]}if(b>L&&(d&I)!==A){0===q&&(q=L);s+=a;v=b-q;for(k= 1< =k)break;v++;k<<=1}n+=1< h.windowBits&&(h.windowBits=-h.windowBits,0===h.windowBits&&(h.windowBits=-15));!(0<=h.windowBits&&16>h.windowBits)||c&&c.windowBits||(h.windowBits+=32);15 h.windowBits&&0===(h.windowBits&15)&&(h.windowBits|=15);this.err=0;this.msg="";this.ended=!1;this.chunks=[];this.strm=new y;this.strm.avail_out=0;c=x.inflateInit2(this.strm,h.windowBits);if(c!==g.Z_OK)throw Error(m[c]);this.header=new B;x.inflateGetHeader(this.strm,this.header)};E.prototype.push= function(c,m){var p=this.strm,s=this.options.chunkSize,b,u,a,y,B;if(this.ended)return!1;u=m===~~m?m:!0===m?g.Z_FINISH:g.Z_NO_FLUSH;"string"===typeof c?p.input=h.binstring2buf(c):"[object ArrayBuffer]"===I.call(c)?p.input=new Uint8Array(c):p.input=c;p.next_in=0;p.avail_in=p.input.length;do{0===p.avail_out&&(p.output=new f.Buf8(s),p.next_out=0,p.avail_out=s);b=x.inflate(p,g.Z_NO_FLUSH);if(b!==g.Z_STREAM_END&&b!==g.Z_OK)return this.onEnd(b),this.ended=!0,!1;if(p.next_out&&(0===p.avail_out||b===g.Z_STREAM_END|| 0===p.avail_in&&(u===g.Z_FINISH||u===g.Z_SYNC_FLUSH)))if("string"===this.options.to)a=h.utf8border(p.output,p.next_out),y=p.next_out-a,B=h.buf2string(p.output,a),p.next_out=y,p.avail_out=s-y,y&&f.arraySet(p.output,p.output,a,y,0),this.onData(B);else this.onData(f.shrinkBuf(p.output,p.next_out))}while(0 p.x?w:p.x,q=q>p.y?q:p.y,n=n>p.z?n:p.z,p.symmetries&&s))for(var h=0;h p.symmetries[h].x?w:p.symmetries[h].x,q=q>p.symmetries[h].y?q:p.symmetries[h].y,n=n>p.symmetries[h].z?n:p.symmetries[h].z}return[[d,l,g],[w,q,n],[m/y,B/y,u/y]]};$3Dmol.getAtomProperty=function(b,c){var d=null;b.properties&&"undefined"!=typeof b.properties[c]?d=b.properties[c]:"undefined"!=typeof b[c]&&(d=b[c]);return d}; $3Dmol.getPropertyRange=function(b,c){for(var d=Number.POSITIVE_INFINITY,l=Number.NEGATIVE_INFINITY,g=0,w=b.length;g l&&(l=q))}isFinite(d)||isFinite(l)?isFinite(d)?isFinite(l)||(l=d):d=l:d=l=0;return[d,l]};"function"===typeof define&&define.amd&&define("$3Dmol",$3Dmol);var $3Dmol=$3Dmol||{};$3Dmol.Math={clamp:function(b,c,d){return Math.min(Math.max(b,c),d)},degToRad:function(){var b=Math.PI/180;return function(c){return c*b}}()}; $3Dmol.Quaternion=function(b,c,d,l){this.x=b||0;this.y=c||0;this.z=d||0;this.w=void 0!==l?l:1}; $3Dmol.Quaternion.prototype={constructor:$3Dmol.Quaternion,set:function(b,c,d,l){this.x=b;this.y=c;this.z=d;this.w=l;return this},copy:function(b){this.x=b.x;this.y=b.y;this.z=b.z;this.w=b.w;return this},conjugate:function(){this.x*=-1;this.y*=-1;this.z*=-1;return this},inverse:function(){return this.conjugate().normalize()},length:function(){return Math.sqrt(this.x*this.x+this.y*this.y+this.z*this.z+this.w*this.w)},normalize:function(){var b=this.length();0===b?(this.z=this.y=this.x=0,this.w=1): (b=1/b,this.x*=b,this.y*=b,this.z*=b,this.w*=b);return this},multiply:function(b){return this.multiplyQuaternions(this,b)},multiplyScalar:function(b){this.x*=b;this.y*=b;this.z*=b;this.w*=b;return this},multiplyQuaternions:function(b,c){var d=b.x,l=b.y,g=b.z,w=b.w,q=c.x,n=c.y,m=c.z,B=c.w;this.x=d*B+w*q+l*m-g*n;this.y=l*B+w*n+g*q-d*m;this.z=g*B+w*m+d*n-l*q;this.w=w*B-d*q-l*n-g*m;return this},sub:function(b){this.x-=b.x;this.y-=b.y;this.z-=b.z;this.w-=b.w;return this},clone:function(){return new $3Dmol.Quaternion(this.x, this.y,this.z,this.w)}};$3Dmol.Vector2=function(b,c){this.x=b||0;this.y=c||0};$3Dmol.Vector2.prototype={constructor:$3Dmol.Vector2,set:function(b,c){this.x=b;this.y=c;return this},subVectors:function(b,c){this.x=b.x-c.x;this.y=b.y-c.y;return this},copy:function(b){this.x=b.x;this.y=b.y;return this},clone:function(){return new $3Dmol.Vector2(this.x,this.y)}};$3Dmol.Vector3=function(b,c,d){this.x=b||0;this.y=c||0;this.z=d||0}; $3Dmol.Vector3.prototype={constructor:$3Dmol.Vector3,set:function(b,c,d){this.x=b;this.y=c;this.z=d;return this},copy:function(b){this.x=b.x;this.y=b.y;this.z=b.z;return this},add:function(b){this.x+=b.x;this.y+=b.y;this.z+=b.z;return this},addVectors:function(b,c){this.x=b.x+c.x;this.y=b.y+c.y;this.z=b.z+c.z;return this},sub:function(b){this.x-=b.x;this.y-=b.y;this.z-=b.z;return this},subVectors:function(b,c){this.x=b.x-c.x;this.y=b.y-c.y;this.z=b.z-c.z;return this},multiplyScalar:function(b){this.x*= b;this.y*=b;this.z*=b;return this},divideScalar:function(b){0!==b?(this.x/=b,this.y/=b,this.z/=b):this.z=this.y=this.x=0;return this},max:function(b){this.x=Math.max(this.x,b.x);this.y=Math.max(this.y,b.y);this.z=Math.max(this.z,b.z);return this},min:function(b){this.x=Math.min(this.x,b.x);this.y=Math.min(this.y,b.y);this.z=Math.min(this.z,b.z);return this},distanceTo:function(b){return Math.sqrt(this.distanceToSquared(b))},distanceToSquared:function(b){var c=this.x-b.x,d=this.y-b.y;b=this.z-b.z; return c*c+d*d+b*b},applyMatrix4:function(b){var c=this.x,d=this.y,l=this.z;b=b.elements;this.x=b[0]*c+b[4]*d+b[8]*l+b[12];this.y=b[1]*c+b[5]*d+b[9]*l+b[13];this.z=b[2]*c+b[6]*d+b[10]*l+b[14];return this},applyProjection:function(b){var c=this.x,d=this.y,l=this.z;b=b.elements;var g=b[3]*c+b[7]*d+b[11]*l+b[15];this.x=(b[0]*c+b[4]*d+b[8]*l+b[12])/g;this.y=(b[1]*c+b[5]*d+b[9]*l+b[13])/g;this.z=(b[2]*c+b[6]*d+b[10]*l+b[14])/g;return this},applyQuaternion:function(b){var c=this.x,d=this.y,l=this.z,g=b.x, w=b.y,q=b.z,n,m,B;n=2*(d*q-l*w);m=2*(l*g-c*q);B=2*(c*w-d*g);this.x=c+b.w*n+(m*q-B*w);this.y=d+b.w*m+(B*g-n*q);this.z=l+b.w*B+(n*w-m*g);return this},negate:function(){return this.multiplyScalar(-1)},dot:function(b){return this.x*b.x+this.y*b.y+this.z*b.z},length:function(){return Math.sqrt(this.x*this.x+this.y*this.y+this.z*this.z)},lengthSq:function(){return this.x*this.x+this.y*this.y+this.z*this.z},normalize:function(){return this.divideScalar(this.length())},cross:function(b){var c=this.x,d=this.y, l=this.z;this.x=d*b.z-l*b.y;this.y=l*b.x-c*b.z;this.z=c*b.y-d*b.x;return this},crossVectors:function(b,c){this.x=b.y*c.z-b.z*c.y;this.y=b.z*c.x-b.x*c.z;this.z=b.x*c.y-b.y*c.x;return this},getPositionFromMatrix:function(b){this.x=b.elements[12];this.y=b.elements[13];this.z=b.elements[14];return this},setEulerFromRotationMatrix:function(b,c){var d=b.elements,l=d[0],g=d[4],w=d[8],q=d[5],n=d[9],m=d[6],d=d[10];void 0===c||"XYZ"===c?(this.y=Math.asin($3Dmol.Math.clamp(w,-1,1)),.99999>Math.abs(w)?(this.x= Math.atan2(-n,d),this.z=Math.atan2(-g,l)):(this.x=Math.atan2(m,q),this.z=0)):console.error("Error with vector's setEulerFromRotationMatrix: Unknown order: "+c);return this},rotateAboutVector:function(b,c){b.normalize();var d=Math.cos(c),l=Math.sin(c),g=this.clone().multiplyScalar(d),l=b.clone().cross(this).multiplyScalar(l),d=b.clone().multiplyScalar(b.clone().dot(this)).multiplyScalar(1-d),g=g.add(l).add(d);this.x=g.x;this.y=g.y;this.z=g.z;return this},clone:function(){return new $3Dmol.Vector3(this.x, this.y,this.z)}};$3Dmol.Matrix3=function(b,c,d,l,g,w,q,n,m){this.elements=new Float32Array(9);this.set(void 0!==b?b:1,c||0,d||0,l||0,void 0!==g?g:1,w||0,q||0,n||0,void 0!==m?m:1)}; $3Dmol.Matrix3.prototype={constructor:$3Dmol.Matrix3,set:function(b,c,d,l,g,w,q,n,m){var B=this.elements;B[0]=b;B[3]=c;B[6]=d;B[1]=l;B[4]=g;B[7]=w;B[2]=q;B[5]=n;B[8]=m;return this},identity:function(){this.set(1,0,0,0,1,0,0,0,1);return this},copy:function(b){b=b.elements;this.set(b[0],b[3],b[6],b[1],b[4],b[7],b[2],b[5],b[8])},multiplyScalar:function(b){var c=this.elements;c[0]*=b;c[3]*=b;c[6]*=b;c[1]*=b;c[4]*=b;c[7]*=b;c[2]*=b;c[5]*=b;c[8]*=b;return this},getInverse:function(b,c){var d=b.elements, l=this.elements;l[0]=d[10]*d[5]-d[6]*d[9];l[1]=-d[10]*d[1]+d[2]*d[9];l[2]=d[6]*d[1]-d[2]*d[5];l[3]=-d[10]*d[4]+d[6]*d[8];l[4]=d[10]*d[0]-d[2]*d[8];l[5]=-d[6]*d[0]+d[2]*d[4];l[6]=d[9]*d[4]-d[5]*d[8];l[7]=-d[9]*d[0]+d[1]*d[8];l[8]=d[5]*d[0]-d[1]*d[4];d=d[0]*l[0]+d[1]*l[3]+d[2]*l[6];if(0===d){if(c)throw Error("Matrix3.getInverse(): can't invert matrix, determinant is 0");console.warn("Matrix3.getInverse(): can't invert matrix, determinant is 0");this.identity();return this}this.multiplyScalar(1/d);return this}, getDeterminant:function(){var b=this.elements;return b[0]*b[4]*b[8]+b[1]*b[5]*b[6]+b[2]*b[3]*b[7]-b[2]*b[4]*b[6]-b[1]*b[3]*b[8]-b[0]*b[5]*b[7]},transpose:function(){var b,c=this.elements;b=c[1];c[1]=c[3];c[3]=b;b=c[2];c[2]=c[6];c[6]=b;b=c[5];c[5]=c[7];c[7]=b;return this},clone:function(){var b=this.elements;return new $3Dmol.Matrix3(b[0],b[3],b[6],b[1],b[4],b[7],b[2],b[5],b[8])}}; $3Dmol.Matrix4=function(b,c,d,l,g,w,q,n,m,B,u,y,s,f,p,h){if("undefined"===typeof c&&"undefined"!==typeof b)this.elements=new Float32Array(b);else{var F=this.elements=new Float32Array(16);F[0]=void 0!==b?b:1;F[4]=c||0;F[8]=d||0;F[12]=l||0;F[1]=g||0;F[5]=void 0!==w?w:1;F[9]=q||0;F[13]=n||0;F[2]=m||0;F[6]=B||0;F[10]=void 0!==u?u:1;F[14]=y||0;F[3]=s||0;F[7]=f||0;F[11]=p||0;F[15]=void 0!==h?h:1}}; $3Dmol.Matrix4.prototype={constructor:$3Dmol.Matrix4,set:function(b,c,d,l,g,w,q,n,m,B,u,y,s,f,p,h){var F=this.elements;F[0]=b;F[4]=c;F[8]=d;F[12]=l;F[1]=g;F[5]=w;F[9]=q;F[13]=n;F[2]=m;F[6]=B;F[10]=u;F[14]=y;F[3]=s;F[7]=f;F[11]=p;F[15]=h;return this},identity:function(){this.set(1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1);return this},copy:function(b){b=b.elements;this.set(b[0],b[4],b[8],b[12],b[1],b[5],b[9],b[13],b[2],b[6],b[10],b[14],b[3],b[7],b[11],b[15]);return this},matrix3FromTopLeft:function(){var b=this.elements; return new $3Dmol.Matrix3(b[0],b[4],b[8],b[1],b[5],b[9],b[2],b[6],b[10])},setRotationFromEuler:function(b,c){var d=this.elements,l=b.x,g=b.y,w=b.z,q=Math.cos(l),l=Math.sin(l),n=Math.cos(g),g=Math.sin(g),m=Math.cos(w),w=Math.sin(w);if(void 0===c||"XYZ"===c){var B=q*m,u=q*w,y=l*m,s=l*w;d[0]=n*m;d[4]=-n*w;d[8]=g;d[1]=u+y*g;d[5]=B-s*g;d[9]=-l*n;d[2]=s-B*g;d[6]=y+u*g;d[10]=q*n}else console.error("Error with matrix4 setRotationFromEuler. Order: "+c);return this},setRotationFromQuaternion:function(b){var c= this.elements,d=b.x,l=b.y,g=b.z,w=b.w,q=d+d,n=l+l,m=g+g;b=d*q;var B=d*n,d=d*m,u=l*n,l=l*m,g=g*m,q=w*q,n=w*n,w=w*m;c[0]=1-(u+g);c[4]=B-w;c[8]=d+n;c[1]=B+w;c[5]=1-(b+g);c[9]=l-q;c[2]=d-n;c[6]=l+q;c[10]=1-(b+u);return this},lookAt:function(){var b=new $3Dmol.Vector3,c=new $3Dmol.Vector3,d=new $3Dmol.Vector3;return function(l,g,w){var q=this.elements;d.subVectors(l,g).normalize();0===d.length()&&(d.z=1);b.crossVectors(w,d).normalize();0===b.length()&&(d.x+=1E-4,b.crossVectors(w,d).normalize());c.crossVectors(d, b);q[0]=b.x;q[4]=c.x;q[8]=d.x;q[1]=b.y;q[5]=c.y;q[9]=d.y;q[2]=b.z;q[6]=c.z;q[10]=d.z;return this}}(),multiplyMatrices:function(b,c){var d=b.elements,l=c.elements,g=this.elements,w=d[0],q=d[4],n=d[8],m=d[12],B=d[1],u=d[5],y=d[9],s=d[13],f=d[2],p=d[6],h=d[10],F=d[14],M=d[3],x=d[7],e=d[11],d=d[15],H=l[0],t=l[4],C=l[8],z=l[12],I=l[1],K=l[5],J=l[9],A=l[13],O=l[2],E=l[6],N=l[10],L=l[14],Q=l[3],G=l[7],P=l[11],l=l[15];g[0]=w*H+q*I+n*O+m*Q;g[4]=w*t+q*K+n*E+m*G;g[8]=w*C+q*J+n*N+m*P;g[12]=w*z+q*A+n*L+m*l;g[1]= B*H+u*I+y*O+s*Q;g[5]=B*t+u*K+y*E+s*G;g[9]=B*C+u*J+y*N+s*P;g[13]=B*z+u*A+y*L+s*l;g[2]=f*H+p*I+h*O+F*Q;g[6]=f*t+p*K+h*E+F*G;g[10]=f*C+p*J+h*N+F*P;g[14]=f*z+p*A+h*L+F*l;g[3]=M*H+x*I+e*O+d*Q;g[7]=M*t+x*K+e*E+d*G;g[11]=M*C+x*J+e*N+d*P;g[15]=M*z+x*A+e*L+d*l;return this},multiplyScalar:function(b){var c=this.elements;c[0]*=b;c[4]*=b;c[8]*=b;c[12]*=b;c[1]*=b;c[5]*=b;c[9]*=b;c[13]*=b;c[2]*=b;c[6]*=b;c[10]*=b;c[14]*=b;c[3]*=b;c[7]*=b;c[11]*=b;c[15]*=b;return this},makeTranslation:function(b,c,d){this.set(1, 0,0,b,0,1,0,c,0,0,1,d,0,0,0,1);return this},transpose:function(){var b=this.elements,c;c=b[1];b[1]=b[4];b[4]=c;c=b[2];b[2]=b[8];b[8]=c;c=b[6];b[6]=b[9];b[9]=c;c=b[3];b[3]=b[12];b[12]=c;c=b[7];b[7]=b[13];b[13]=c;c=b[11];b[11]=b[14];b[14]=c;return this},getPosition:function(){var b=new $3Dmol.Vector3;return function(){console.warn("DEPRECATED: Matrix4's .getPosition() has been removed. Use Vector3.getPositionFromMatrix( matrix ) instead.");var c=this.elements;return b.set(c[12],c[13],c[14])}}(),setPosition:function(b){var c= this.elements;c[12]=b.x;c[13]=b.y;c[14]=b.z;return this},getInverse:function(b,c){var d=this.elements,l=b.elements,g=l[0],w=l[4],q=l[8],n=l[12],m=l[1],B=l[5],u=l[9],y=l[13],s=l[2],f=l[6],p=l[10],h=l[14],F=l[3],M=l[7],x=l[11],e=l[15];d[0]=u*h*M-y*p*M+y*f*x-B*h*x-u*f*e+B*p*e;d[4]=n*p*M-q*h*M-n*f*x+w*h*x+q*f*e-w*p*e;d[8]=q*y*M-n*u*M+n*B*x-w*y*x-q*B*e+w*u*e;d[12]=n*u*f-q*y*f-n*B*p+w*y*p+q*B*h-w*u*h;d[1]=y*p*F-u*h*F-y*s*x+m*h*x+u*s*e-m*p*e;d[5]=q*h*F-n*p*F+n*s*x-g*h*x-q*s*e+g*p*e;d[9]=n*u*F-q*y*F-n*m* x+g*y*x+q*m*e-g*u*e;d[13]=q*y*s-n*u*s+n*m*p-g*y*p-q*m*h+g*u*h;d[2]=B*h*F-y*f*F+y*s*M-m*h*M-B*s*e+m*f*e;d[6]=n*f*F-w*h*F-n*s*M+g*h*M+w*s*e-g*f*e;d[10]=w*y*F-n*B*F+n*m*M-g*y*M-w*m*e+g*B*e;d[14]=n*B*s-w*y*s-n*m*f+g*y*f+w*m*h-g*B*h;d[3]=u*f*F-B*p*F-u*s*M+m*p*M+B*s*x-m*f*x;d[7]=w*p*F-q*f*F+q*s*M-g*p*M-w*s*x+g*f*x;d[11]=q*B*F-w*u*F-q*m*M+g*u*M+w*m*x-g*B*x;d[15]=w*u*s-q*B*s+q*m*f-g*u*f-w*m*p+g*B*p;d=l[0]*d[0]+l[1]*d[4]+l[2]*d[8]+l[3]*d[12];if(0===d){if(c)throw Error("Matrix4.getInverse(): can't invert matrix, determinant is 0"); console.warn("Matrix4.getInverse(): can't invert matrix, determinant is 0");this.identity();return this}this.multiplyScalar(1/d);return this},isReflected:function(){return 0>this.matrix3FromTopLeft().getDeterminant()},compose:function(){var b=new $3Dmol.Matrix4,c=new $3Dmol.Matrix4;return function(d,l,g){var w=this.elements;b.identity();b.setRotationFromQuaternion(l);c.makeScale(g.x,g.y,g.z);this.multiplyMatrices(b,c);w[12]=d.x;w[13]=d.y;w[14]=d.z;return this}}(),decompose:function(){var b=new $3Dmol.Vector3, c=new $3Dmol.Vector3,d=new $3Dmol.Vector3,l=new $3Dmol.Matrix4;return function(g,w,q){var n=this.elements;b.set(n[0],n[1],n[2]);c.set(n[4],n[5],n[6]);d.set(n[8],n[9],n[10]);g=g instanceof $3Dmol.Vector3?g:new $3Dmol.Vector3;w=w instanceof $3Dmol.Quaternion?w:new $3Dmol.Quaternion;q=q instanceof $3Dmol.Vector3?q:new $3Dmol.Vector3;q.x=b.length();q.y=c.length();q.z=d.length();g.x=n[12];g.y=n[13];g.z=n[14];l.copy(this);l.elements[0]/=q.x;l.elements[1]/=q.x;l.elements[2]/=q.x;l.elements[4]/=q.y;l.elements[5]/= q.y;l.elements[6]/=q.y;l.elements[8]/=q.z;l.elements[9]/=q.z;l.elements[10]/=q.z;w.setFromRotationMatrix(l);return[g,w,q]}}(),scale:function(b){var c=this.elements,d=b.x,l=b.y;b=b.z;c[0]*=d;c[4]*=l;c[8]*=b;c[1]*=d;c[5]*=l;c[9]*=b;c[2]*=d;c[6]*=l;c[10]*=b;c[3]*=d;c[7]*=l;c[11]*=b;return this},getMaxScaleOnAxis:function(){var b=this.elements;return Math.sqrt(Math.max(b[0]*b[0]+b[1]*b[1]+b[2]*b[2],Math.max(b[4]*b[4]+b[5]*b[5]+b[6]*b[6],b[8]*b[8]+b[9]*b[9]+b[10]*b[10])))},makeFrustum:function(b,c,d,l, g,w){var q=this.elements;q[0]=2*g/(c-b);q[4]=0;q[8]=(c+b)/(c-b);q[12]=0;q[1]=0;q[5]=2*g/(l-d);q[9]=(l+d)/(l-d);q[13]=0;q[2]=0;q[6]=0;q[10]=-(w+g)/(w-g);q[14]=-2*w*g/(w-g);q[3]=0;q[7]=0;q[11]=-1;q[15]=0;return this},makePerspective:function(b,c,d,l){b=d*Math.tan($3Dmol.Math.degToRad(.5*b));var g=-b;return this.makeFrustum(g*c,b*c,g,b,d,l)},makeOrthographic:function(b,c,d,l,g,w){var q=this.elements,n=1/(c-b),m=1/(d-l),B=1/(w-g);q[0]=2*n;q[4]=0;q[8]=0;q[12]=-((c+b)*n);q[1]=0;q[5]=2*m;q[9]=0;q[13]=-((d+ l)*m);q[2]=0;q[6]=0;q[10]=-2*B;q[14]=-((w+g)*B);q[3]=0;q[7]=0;q[11]=0;q[15]=1;return this},isEqual:function(b){b=b.elements;var c=this.elements;return c[0]==b[0]&&c[4]==b[4]&&c[8]==b[8]&&c[12]==b[12]&&c[1]==b[1]&&c[5]==b[5]&&c[9]==b[9]&&c[13]==b[13]&&c[2]==b[2]&&c[6]==b[6]&&c[10]==b[10]&&c[14]==b[14]&&c[3]==b[3]&&c[7]==b[7]&&c[11]==b[11]&&c[15]==b[15]?!0:!1},clone:function(){var b=this.elements;return new $3Dmol.Matrix4(b[0],b[4],b[8],b[12],b[1],b[5],b[9],b[13],b[2],b[6],b[10],b[14],b[3],b[7],b[11], b[15])},isIdentity:function(){var b=this.elements;return 1==b[0]&&0==b[4]&&0==b[8]&&0==b[12]&&0==b[1]&&1==b[5]&&0==b[9]&&0==b[13]&&0==b[2]&&0==b[6]&&1==b[10]&&0==b[14]&&0==b[3]&&0==b[7]&&0==b[11]&&1==b[15]?!0:!1}};$3Dmol.Ray=function(b,c){this.origin=void 0!==b?b:new $3Dmol.Vector3;this.direction=void 0!==c?c:new $3Dmol.Vector3}; $3Dmol.Ray.prototype={constructor:$3Dmol.Ray,set:function(b,c){this.origin.copy(b);this.direction.copy(c);return this},copy:function(b){this.origin.copy(b.origin);this.direction.copy(b.direction);return this},at:function(b,c){return(c||new $3Dmol.Vector3).copy(this.direction).multiplyScalar(b).add(this.origin)},recast:function(){var b=new $3Dmol.Vector3;return function(c){this.origin.copy(this.at(c,b));return this}}(),closestPointToPoint:function(b,c){var d=c||new $3Dmol.Vector3;d.subVectors(b,this.origin); var l=d.dot(this.direction);return d.copy(this.direction).multiplyScalar(l).add(this.origin)},distanceToPoint:function(b){var c=new $3Dmol.Vector3;return function(b){var l=c.subVectors(b,this.origin).dot(this.direction);c.copy(this.direction).multiplyScalar(l).add(this.origin);return c.distanceTo(b)}}(),isIntersectionCylinder:function(){},isIntersectionSphere:function(b){return this.distanceToPoint(b.center)<=b.radius},isIntersectionPlane:function(b){return 0!==b.normal.dot(this.direction)||0===b.distanceToPoint(this.origin)? !0:!1},distanceToPlane:function(b){var c=b.normal.dot(this.direction);if(0===c){if(0===b.distanceToPoint(this.origin))return 0}else return-(this.origin.dot(b.normal)+b.constant)/c},intersectPlane:function(b,c){var d=this.distanceToPlane(b);return void 0===d?void 0:this.at(d,c)},applyMatrix4:function(b){this.direction.add(this.origin).applyMatrix4(b);this.origin.applyMatrix4(b);this.direction.sub(this.origin);return this},equals:function(b){return b.origin.equals(this.origin)&&b.direction.equals(this.direction)}, clone:function(){return(new $3Dmol.Ray).copy(this)}};$3Dmol.Sphere=function(b,c){this.center=void 0!==b?b:new $3Dmol.Vector3;this.radius=void 0!==c?c:0}; $3Dmol.Sphere.prototype={constructor:$3Dmol.Sphere,set:function(b,c){this.center.copy(b);this.radius=c;return this},copy:function(b){this.center.copy(b.center);this.radius=b.radius;return this},applyMatrix4:function(b){this.center.applyMatrix4(b);this.radius*=b.getMaxScaleOnAxis();return this},translate:function(b){this.center.add(b);return this},equals:function(b){return b.center.equals(this.center)&&b.radius===this.radius},clone:function(){return(new $3Dmol.Sphere).copy(this)}}; $3Dmol.Cylinder=function(b,c,d){this.c1=void 0!==b?b:new $3Dmol.Vector3;this.c2=void 0!==c?c:new $3Dmol.Vector3;this.direction=(new $3Dmol.Vector3).subVectors(this.c2,this.c1).normalize();this.radius=void 0!==d?d:0}; $3Dmol.Cylinder.prototype={constructor:$3Dmol.Cylinder,copy:function(b){this.c1.copy(b.c1);this.c2.copy(b.c2);this.direction.copy(b.direction);this.radius=b.radius;return this},lengthSq:function(){var b=new $3Dmol.Vector3;return function(){return b.subVectors(this.c2,this.c1).lengthSq()}}(),applyMatrix4:function(b){this.direction.add(this.c1).applyMatrix4(b);this.c1.applyMatrix4(b);this.c2.applyMatrix4(b);this.direction.sub(this.c1).normalize();this.radius*=b.getMaxScaleOnAxis();return this}}; $3Dmol.Triangle=function(b,c,d){this.a=void 0!==b?b:new $3Dmol.Vector3;this.b=void 0!==c?c:new $3Dmol.Vector3;this.c=void 0!==d?d:new $3Dmol.Vector3}; $3Dmol.Triangle.prototype={constructor:$3Dmol.Triangle,copy:function(b){this.a.copy(b.a);this.b.copy(b.b);this.c.copy(b.c);return this},applyMatrix4:function(b){this.a.applyMatrix4(b);this.b.applyMatrix4(b);this.c.applyMatrix4(b);return this},getNormal:function(){var b=new $3Dmol.Vector3;return function(){var c=this.a.clone();c.sub(this.b);b.subVectors(this.c,this.b);c.cross(b);c.normalize();return c}}()}; $3Dmol.EventDispatcher=function(){var b={};this.addEventListener=function(c,d){void 0===b[c]&&(b[c]=[]);-1===b[c].indexOf(d)&&b[c].push(d)};this.removeEventListener=function(c,d){var l=b[c].indexOf(d);-1!==l&&b[c].splice(l,1)};this.dispatchEvent=function(c){var d=b[c.type];if(void 0!==d){c.target=this;for(var l=0,g=d.length;l >16&255)/255;this.g=(b>>8&255)/255;this.b=(b&255)/255;return this},getHex:function(){var b=Math.round(255*this.r),c=Math.round(255*this.g),d=Math.round(255*this.b);return b<<16|c<<8|d},clone:function(){return new $3Dmol.Color(this.r, this.g,this.b)},copy:function(b){this.r=b.r;this.g=b.g;this.b=b.b;return this},scaled:function(){var b={};b.r=Math.round(255*this.r);b.g=Math.round(255*this.g);b.b=Math.round(255*this.b);b.a=1;return b}}; $3Dmol.Object3D=function(){this.id=$3Dmol.Object3DIDCount++;this.name="";this.parent=void 0;this.children=[];this.position=new $3Dmol.Vector3;this.rotation=new $3Dmol.Vector3;this.matrix=new $3Dmol.Matrix4;this.matrixWorld=new $3Dmol.Matrix4;this.quaternion=new $3Dmol.Quaternion;this.eulerOrder="XYZ";this.up=new $3Dmol.Vector3(0,1,0);this.scale=new $3Dmol.Vector3(1,1,1);this.rotationAutoUpdate=this.matrixWorldNeedsUpdate=this.matrixAutoUpdate=!0;this.useQuaternion=!1;this.visible=!0}; $3Dmol.Object3D.prototype={constructor:$3Dmol.Object3D,lookAt:function(b){this.matrix.lookAt(b,this.position,this.up);this.rotationAutoUpdate&&(!0===this.useQuaternion?this.quaternion.copy(this.matrix.decompose()[1]):this.rotation.setEulerFromRotationMatrix(this.matrix,this.eulerOrder))},add:function(b){if(b===this)console.error("Can't add $3Dmol.Object3D to itself");else{b.parent=this;this.children.push(b);for(var c=this;void 0!==c.parent;)c=c.parent;void 0!==c&&c instanceof $3Dmol.Scene&&c.__addObject(b)}}, remove:function(b){var c=this.children.indexOf(b);if(-1!==c){b.parent=void 0;this.children.splice(c,1);for(c=this;void 0!==c.parent;)c=c.parent;void 0!==c&&c instanceof $3Dmol.Scene&&c.__removeObject(b)}},updateMatrix:function(){this.matrix.setPosition(this.position);!1===this.useQuaternion?this.matrix.setRotationFromEuler(this.rotation,this.eulerOrder):this.matrix.setRotationFromQuaternion(this.quaternion);1===this.scale.x&&1===this.scale.y&&1===this.scale.z||this.matrix.scale(this.scale);this.matrixWorldNeedsUpdate= !0},updateMatrixWorld:function(b){!0===this.matrixAutoUpdate&&this.updateMatrix();if(!0===this.matrixWorldNeedsUpdate||!0===b)void 0===this.parent?this.matrixWorld.copy(this.matrix):this.matrixWorld.multiplyMatrices(this.parent.matrixWorld,this.matrix);this.matrixWorldNeedsUpdate=!1;for(b=0;b d.vertexArray.length/3)d=c(this);return d},addGeoGroup:function(){return c(this)},setUpNormals:function(b){b=b||!1;for(var c=0;c J||(w.copy(this.ray.direction).multiplyScalar(J).add(this.ray.origin),w.sub(l.a),q.copy(l.b).sub(l.a),n.copy(l.c).sub(l.a),I=q.dot(n), O=q.lengthSq(),z=n.lengthSq(),z=(O*w.dot(n)-I*w.dot(q))/(O*z-I*I),0>z||1 I||1=E?J=Math.sqrt(A):J=(z-I*K-Math.sqrt(E))/O,I=I*z-K,0>I||I*I>d.lengthSq()||0>z||x.push({clickable:M,distance:J}))));t=0;for(C=e.line.length;t F)break a;J=0>=E?F:F-Math.sqrt(E); x.push({clickable:M,distance:J});break a}}}f.sort(B);return f};return b}();$3Dmol.Projector=function(){new $3Dmol.Matrix4;var b=new $3Dmol.Matrix4;this.projectVector=function(c,d){d.matrixWorldInverse.getInverse(d.matrixWorld);b.multiplyMatrices(d.projectionMatrix,d.matrixWorldInverse);return c.applyProjection(b)};this.unprojectVector=function(c,d){d.projectionMatrixInverse.getInverse(d.projectionMatrix);b.multiplyMatrices(d.matrixWorld,d.projectionMatrixInverse);return c.applyProjection(b)}}; $3Dmol.Camera=function(b,c,d,l,g){$3Dmol.Object3D.call(this);this.fov=void 0!==b?b:50;this.aspect=void 0!==c?c:1;this.near=void 0!==d?d:.1;this.far=void 0!==l?l:2E3;this.projectionMatrix=new $3Dmol.Matrix4;this.projectionMatrixInverse=new $3Dmol.Matrix4;this.matrixWorldInverse=new $3Dmol.Matrix4;this.right=this.position.z*Math.tan(Math.PI/180*b);this.left=-this.right;this.top=this.right/this.aspect;this.bottom=-this.top;this.ortho=!!g;this.updateProjectionMatrix()};$3Dmol.Camera.prototype=Object.create($3Dmol.Object3D.prototype); $3Dmol.Camera.prototype.lookAt=function(b){this.matrix.lookAt(this.position,b,this.up);this.rotationAutoUpdate&&(!1===this.useQuaternion?this.rotation.setEulerFromRotationMatrix(this.matrix,this.eulerOrder):this.quaternion.copy(this.matrix.decompose()[1]))}; $3Dmol.Camera.prototype.updateProjectionMatrix=function(){this.ortho?this.projectionMatrix.makeOrthographic(this.left,this.right,this.top,this.bottom,this.near,this.far):this.projectionMatrix.makePerspective(this.fov,this.aspect,this.near,this.far);this.projectionMatrixInverse.getInverse(this.projectionMatrix)}; $3Dmol.SpritePlugin=function(){function b(b,c){return b.z!==c.z?c.z-b.z:c.id-b.id}var c,d,l,g,w,q,n,m,B,u;this.init=function(b){c=b.context;d=b;l=b.getPrecision();g=new Float32Array(16);w=new Uint16Array(6);b=0;g[b++]=-1;g[b++]=-1;g[b++]=0;g[b++]=0;g[b++]=1;g[b++]=-1;g[b++]=1;g[b++]=0;g[b++]=1;g[b++]=1;g[b++]=1;g[b++]=1;g[b++]=-1;g[b++]=1;g[b++]=0;g[b++]=1;b=0;w[b++]=0;w[b++]=1;w[b++]=2;w[b++]=0;w[b++]=2;w[b++]=3;q=c.createBuffer();n=c.createBuffer();c.bindBuffer(c.ARRAY_BUFFER,q);c.bufferData(c.ARRAY_BUFFER, g,c.STATIC_DRAW);c.bindBuffer(c.ELEMENT_ARRAY_BUFFER,n);c.bufferData(c.ELEMENT_ARRAY_BUFFER,w,c.STATIC_DRAW);b=$3Dmol.ShaderLib.sprite;var s=l,f=c.createProgram(),p=c.createShader(c.FRAGMENT_SHADER),h=c.createShader(c.VERTEX_SHADER),s="precision "+s+" float;\n";c.shaderSource(p,s+b.fragmentShader);c.shaderSource(h,s+b.vertexShader);c.compileShader(p);c.compileShader(h);c.getShaderParameter(p,c.COMPILE_STATUS)&&c.getShaderParameter(h,c.COMPILE_STATUS)?(c.attachShader(f,p),c.attachShader(f,h),c.linkProgram(f), c.getProgramParameter(f,c.LINK_STATUS)||console.error("Could not initialize shader"),b=f):(console.error(c.getShaderInfoLog(p)),console.error("could not initialize shader"),b=null);m=b;B={};u={};B.position=c.getAttribLocation(m,"position");B.uv=c.getAttribLocation(m,"uv");u.uvOffset=c.getUniformLocation(m,"uvOffset");u.uvScale=c.getUniformLocation(m,"uvScale");u.rotation=c.getUniformLocation(m,"rotation");u.scale=c.getUniformLocation(m,"scale");u.alignment=c.getUniformLocation(m,"alignment");u.color= c.getUniformLocation(m,"color");u.map=c.getUniformLocation(m,"map");u.opacity=c.getUniformLocation(m,"opacity");u.useScreenCoordinates=c.getUniformLocation(m,"useScreenCoordinates");u.screenPosition=c.getUniformLocation(m,"screenPosition");u.modelViewMatrix=c.getUniformLocation(m,"modelViewMatrix");u.projectionMatrix=c.getUniformLocation(m,"projectionMatrix");u.fogType=c.getUniformLocation(m,"fogType");u.fogDensity=c.getUniformLocation(m,"fogDensity");u.fogNear=c.getUniformLocation(m,"fogNear");u.fogFar= c.getUniformLocation(m,"fogFar");u.fogColor=c.getUniformLocation(m,"fogColor");u.alphaTest=c.getUniformLocation(m,"alphaTest")};this.render=function(y,s,f,p){var h=y.__webglSprites,F=h.length;if(F){var M=B,x=u,e=.5*f,H=.5*p;c.useProgram(m);c.enableVertexAttribArray(M.position);c.enableVertexAttribArray(M.uv);c.disable(c.CULL_FACE);c.enable(c.BLEND);c.bindBuffer(c.ARRAY_BUFFER,q);c.vertexAttribPointer(M.position,2,c.FLOAT,!1,16,0);c.vertexAttribPointer(M.uv,2,c.FLOAT,!1,16,8);c.bindBuffer(c.ELEMENT_ARRAY_BUFFER, n);c.uniformMatrix4fv(x.projectionMatrix,!1,s.projectionMatrix.elements);c.activeTexture(c.TEXTURE0);c.uniform1i(x.map,0);var t=M=0;(M=y.fog)?(c.uniform3f(x.fogColor,M.color.r,M.color.g,M.color.b),c.uniform1f(x.fogNear,M.near),c.uniform1f(x.fogFar,M.far),c.uniform1i(x.fogType,1),t=M=1):(c.uniform1i(x.fogType,0),t=M=0);var C,z,g,l=[];for(C=0;C 0.0) {\n vec3 cp;\n if( dotp1 < 0.0) { cp = p1;\n } else {\n cp = p2;\n }\n vec3 diff = p-cp;\n A = dot(v,v);\n B = dot(diff,v)*2.0;\n C = dot(diff,diff)-r*r;\n det = (B*B) - (4.0*C);\n if(det < 0.0) discard;\n sqrtDet = sqrt(det);\n posT = (-B+sqrtDet)/(2.0);\n negT = (-B-sqrtDet)/(2.0);\n float t = min(posT,negT);\n qi = p+v*t;\n norm = normalize(qi-cp);\n } else {\n norm = normalize(qi-(dotp1*va + p1));\n }\n vec4 clipPos = projectionMatrix * vec4(qi, 1.0);\n float ndcDepth = clipPos.z / clipPos.w;\n float depth = ((gl_DepthRange.diff * ndcDepth) + gl_DepthRange.near + gl_DepthRange.far) / 2.0;\n gl_FragDepthEXT = depth;"}; $3Dmol.ShaderLib={basic:{fragmentShader:"uniform mat4 viewMatrix;\nuniform float opacity;\nuniform vec3 fogColor;\nuniform float fogNear;\nuniform float fogFar;\nvarying vec3 vColor;\nvoid main() {\n gl_FragColor = vec4( vColor, opacity );\n float depth = gl_FragCoord.z / gl_FragCoord.w;\n float fogFactor = smoothstep( fogNear, fogFar, depth );\n gl_FragColor = mix( gl_FragColor, vec4( fogColor, gl_FragColor.w ), fogFactor );\n}",vertexShader:"uniform mat4 modelViewMatrix;\nuniform mat4 projectionMatrix;\nuniform mat4 viewMatrix;\nuniform mat3 normalMatrix;\nattribute vec3 position;\nattribute vec3 color;\nvarying vec3 vColor;\nvoid main() {\n vColor = color;\n vec4 mvPosition = modelViewMatrix * vec4( position, 1.0 );\n gl_Position = projectionMatrix * mvPosition;\n}", uniforms:{opacity:{type:"f",value:1},fogColor:{type:"c",value:new $3Dmol.Color(1,1,1)},fogNear:{type:"f",value:1},fogFar:{type:"f",value:2E3}}},sphereimposter:{fragmentShader:"uniform mat4 viewMatrix;\nuniform float opacity;\nuniform mat4 projectionMatrix;\nuniform vec3 fogColor;\nuniform float fogNear;\nuniform float fogFar;\nuniform float uDepth;\nuniform vec3 directionalLightColor[ 1 ];\nvarying vec3 vColor;\nvarying vec2 mapping;\nvarying float rval;\nvarying vec3 vLight;\nvarying vec3 center;\nvoid main() {\n float lensqr = dot(mapping,mapping);\n float rsqr = rval*rval;\n if(lensqr > rsqr)\n discard;\n float z = sqrt(rsqr-lensqr);\n vec3 cameraPos = center+ vec3(mapping.x,mapping.y,z);\n vec4 clipPos = projectionMatrix * vec4(cameraPos, 1.0);\n float ndcDepth = clipPos.z / clipPos.w;\n gl_FragDepthEXT = ((gl_DepthRange.diff * ndcDepth) + gl_DepthRange.near + gl_DepthRange.far) / 2.0;\n vec3 norm = normalize(vec3(mapping.x,mapping.y,z));\n float dotProduct = dot( norm, vLight );\n vec3 directionalLightWeighting = vec3( max( dotProduct, 0.0 ) );\n vec3 vLight = directionalLightColor[ 0 ] * directionalLightWeighting;\n gl_FragColor = vec4(vLight*vColor, opacity*opacity );\n float fogFactor = smoothstep( fogNear, fogFar, gl_FragDepthEXT/gl_FragCoord.w );\n gl_FragColor = mix( gl_FragColor, vec4( fogColor, gl_FragColor.w ), fogFactor );\n}", vertexShader:"uniform mat4 modelViewMatrix;\nuniform mat4 projectionMatrix;\nuniform mat4 viewMatrix;\nuniform mat3 normalMatrix;\nuniform vec3 directionalLightColor[ 1 ];\nuniform vec3 directionalLightDirection[ 1 ];\nattribute vec3 position;\nattribute vec3 normal;\nattribute vec3 color;\nvarying vec2 mapping;\nvarying vec3 vColor;\nvarying float rval;\nvarying vec3 vLight;\nvarying vec3 center;\nvoid main() {\n vColor = color;\n vec4 mvPosition = modelViewMatrix * vec4( position, 1.0 );\n center = mvPosition.xyz;\n vec4 projPosition = projectionMatrix * mvPosition;\n vec4 adjust = projectionMatrix* vec4(normal,0.0); adjust.z = 0.0; adjust.w = 0.0;\n vec4 lDirection = viewMatrix * vec4( directionalLightDirection[ 0 ], 0.0 );\n vLight = normalize( lDirection.xyz );\n mapping = normal.xy;\n rval = abs(normal.x);\n gl_Position = projPosition+adjust;\n}", uniforms:{opacity:{type:"f",value:1},fogColor:{type:"c",value:new $3Dmol.Color(1,1,1)},fogNear:{type:"f",value:1},fogFar:{type:"f",value:2E3},directionalLightColor:{type:"fv",value:[]},directionalLightDirection:{type:"fv",value:[]}}},lambert:{fragmentShader:"uniform mat4 viewMatrix;\nuniform float opacity;\nuniform vec3 fogColor;\nuniform float fogNear;\nuniform float fogFar;\nvarying vec3 vLightFront;\nvarying vec3 vColor;\nvoid main() {\n gl_FragColor = vec4( vec3 ( 1.0 ), opacity );\n #ifndef WIREFRAME\n gl_FragColor.xyz *= vLightFront;\n #endif\n gl_FragColor = gl_FragColor * vec4( vColor, opacity );\n float depth = gl_FragCoord.z / gl_FragCoord.w;\n float fogFactor = smoothstep( fogNear, fogFar, depth );\n gl_FragColor = mix( gl_FragColor, vec4( fogColor, gl_FragColor.w ), fogFactor );\n}", vertexShader:"uniform mat4 modelViewMatrix;\nuniform mat4 projectionMatrix;\nuniform mat4 viewMatrix;\nuniform mat3 normalMatrix;\nuniform vec3 directionalLightColor[ 1 ];\nuniform vec3 directionalLightDirection[ 1 ];\nattribute vec3 position;\nattribute vec3 normal;\nattribute vec3 color;\nvarying vec3 vColor;\nvarying vec3 vLightFront;\nvoid main() {\n vColor = color;\n vec3 objectNormal = normal;\n vec3 transformedNormal = normalMatrix * objectNormal;\n vec4 mvPosition = modelViewMatrix * vec4( position, 1.0 );\n vLightFront = vec3( 0.0 );\n transformedNormal = normalize( transformedNormal );\n vec4 lDirection = viewMatrix * vec4( directionalLightDirection[ 0 ], 0.0 );\n vec3 dirVector = normalize( lDirection.xyz );\n float dotProduct = dot( transformedNormal, dirVector );\n vec3 directionalLightWeighting = vec3( max( dotProduct, 0.0 ) );\n vLightFront += directionalLightColor[ 0 ] * directionalLightWeighting;\n gl_Position = projectionMatrix * mvPosition;\n}", uniforms:{opacity:{type:"f",value:1},fogColor:{type:"c",value:new $3Dmol.Color(1,1,1)},fogNear:{type:"f",value:1},fogFar:{type:"f",value:2E3},directionalLightColor:{type:"fv",value:[]},directionalLightDirection:{type:"fv",value:[]}}},instanced:{fragmentShader:"uniform mat4 viewMatrix;\nuniform float opacity;\nuniform vec3 fogColor;\nuniform float fogNear;\nuniform float fogFar;\nvarying vec3 vLightFront;\nvarying vec3 vColor;\nvoid main() {\n gl_FragColor = vec4( vec3 ( 1.0 ), opacity );\n #ifndef WIREFRAME\n gl_FragColor.xyz *= vLightFront;\n #endif\n gl_FragColor = gl_FragColor * vec4( vColor, opacity );\n float depth = gl_FragCoord.z / gl_FragCoord.w;\n float fogFactor = smoothstep( fogNear, fogFar, depth );\n gl_FragColor = mix( gl_FragColor, vec4( fogColor, gl_FragColor.w ), fogFactor );\n}", vertexShader:"uniform mat4 modelViewMatrix;\nuniform mat4 projectionMatrix;\nuniform mat4 viewMatrix;\nuniform mat3 normalMatrix;\nuniform vec3 directionalLightColor[ 1 ];\nuniform vec3 directionalLightDirection[ 1 ];\nattribute vec3 offset;\nattribute vec3 position;\nattribute vec3 normal;\nattribute vec3 color;\nattribute float radius;\nvarying vec3 vColor;\nvarying vec3 vLightFront;\nvoid main() {\n vColor = color;\n vec3 objectNormal = normal;\n vec3 transformedNormal = normalMatrix * objectNormal;\n vec4 mvPosition = modelViewMatrix * vec4( position * radius + offset, 1.0 );\n vLightFront = vec3( 0.0 );\n transformedNormal = normalize( transformedNormal );\n vec4 lDirection = viewMatrix * vec4( directionalLightDirection[ 0 ], 0.0 );\n vec3 dirVector = normalize( lDirection.xyz );\n float dotProduct = dot( transformedNormal, dirVector );\n vec3 directionalLightWeighting = vec3( max( dotProduct, 0.0 ) );\n vLightFront += directionalLightColor[ 0 ] * directionalLightWeighting;\n gl_Position = projectionMatrix * mvPosition;\n}", uniforms:{opacity:{type:"f",value:1},fogColor:{type:"c",value:new $3Dmol.Color(1,1,1)},fogNear:{type:"f",value:1},fogFar:{type:"f",value:2E3},directionalLightColor:{type:"fv",value:[]},directionalLightDirection:{type:"fv",value:[]}}},outline:{fragmentShader:"uniform float opacity;\nuniform vec3 outlineColor;\nuniform vec3 fogColor;\nuniform float fogNear;\nuniform float fogFar;\nvoid main() {\n gl_FragColor = vec4( outlineColor, 1 );\n}",vertexShader:"uniform mat4 modelViewMatrix;\nuniform mat4 projectionMatrix;\nuniform float outlineWidth;\nuniform float outlinePushback;\nattribute vec3 position;\nattribute vec3 normal;\nattribute vec3 color;\nvoid main() {\n vec4 norm = modelViewMatrix*vec4(normalize(normal),0.0);\n vec4 mvPosition = modelViewMatrix * vec4( position, 1.0 );\n mvPosition.xy += norm.xy*outlineWidth;\n gl_Position = projectionMatrix * mvPosition;\n mvPosition.z -= outlinePushback;\n vec4 pushpos = projectionMatrix*mvPosition;\n gl_Position.z = gl_Position.w*pushpos.z/pushpos.w;\n}", uniforms:{opacity:{type:"f",value:1},outlineColor:{type:"c",value:new $3Dmol.Color(0,0,0)},fogColor:{type:"c",value:new $3Dmol.Color(1,1,1)},fogNear:{type:"f",value:1},fogFar:{type:"f",value:2E3},outlineWidth:{type:"f",value:.1},outlinePushback:{type:"f",value:1}}},sphereimposteroutline:{fragmentShader:"uniform float opacity;\nuniform vec3 outlineColor;\nuniform vec3 fogColor;\nuniform float fogNear;\nuniform float fogFar;\nuniform mat4 projectionMatrix;\nvarying vec2 mapping;\nvarying float rval;\nvarying vec3 center;\nuniform float outlinePushback;\nvoid main() {\n float lensqr = dot(mapping,mapping);\n float rsqr = rval*rval;\n if(lensqr > rsqr)\n discard;\n float z = sqrt(rsqr-lensqr);\n vec3 cameraPos = center+ vec3(mapping.x,mapping.y,z-outlinePushback);\n vec4 clipPos = projectionMatrix * vec4(cameraPos, 1.0);\n float ndcDepth = clipPos.z / clipPos.w;\n gl_FragDepthEXT = ((gl_DepthRange.diff * ndcDepth) + gl_DepthRange.near + gl_DepthRange.far) / 2.0;\n gl_FragColor = vec4(outlineColor, 1 );\n}", vertexShader:"uniform mat4 modelViewMatrix;\nuniform mat4 projectionMatrix;\nuniform float outlineWidth;\nuniform float outlinePushback;\nattribute vec3 position;\nattribute vec3 normal;\nattribute vec3 color;\nvarying vec2 mapping;\nvarying float rval;\nvarying vec3 center;\nvoid main() {\n vec4 mvPosition = modelViewMatrix * vec4( position, 1.0 );\n center = mvPosition.xyz;\n vec4 projPosition = projectionMatrix * mvPosition;\n vec2 norm = normal.xy + vec2(sign(normal.x)*outlineWidth,sign(normal.y)*outlineWidth);\n vec4 adjust = projectionMatrix* vec4(norm,normal.z,0.0); adjust.z = 0.0; adjust.w = 0.0;\n mapping = norm.xy;\n rval = abs(norm.x);\n gl_Position = projPosition+adjust;\n}", uniforms:{opacity:{type:"f",value:1},outlineColor:{type:"c",value:new $3Dmol.Color(0,0,0)},fogColor:{type:"c",value:new $3Dmol.Color(1,1,1)},fogNear:{type:"f",value:1},fogFar:{type:"f",value:2E3},outlineWidth:{type:"f",value:.1},outlinePushback:{type:"f",value:1}}},stickimposter:{fragmentShader:[$3Dmol.ShaderUtils.stickimposterFragmentShader," float dotProduct = dot( norm, vLight );\n vec3 light = vec3( max( dotProduct, 0.0 ) );\n gl_FragColor = vec4(light*color, opacity*opacity );\n float fogFactor = smoothstep( fogNear, fogFar, depth );\n gl_FragColor = mix( gl_FragColor, vec4( fogColor, gl_FragColor.w ), fogFactor );\n}"].join("\n"), vertexShader:"uniform mat4 modelViewMatrix;\nuniform mat4 projectionMatrix;\nuniform mat4 viewMatrix;\nuniform mat3 normalMatrix;\nuniform vec3 directionalLightColor[ 1 ];\nuniform vec3 directionalLightDirection[ 1 ];\nattribute vec3 position;\nattribute vec3 normal;\nattribute vec3 color;\nattribute float radius;\nvarying vec3 vColor;\nvarying vec3 vLight;\nvarying vec3 cposition;\nvarying vec3 p1;\nvarying vec3 p2;\nvarying float r;\nvoid main() {\n vColor = color; vColor.z = abs(vColor.z);\n r = abs(radius);\n vec4 to = modelViewMatrix*vec4(normal, 1.0);\n vec4 pt = modelViewMatrix*vec4(position, 1.0);\n vec4 mvPosition = pt;\n p1 = pt.xyz; p2 = to.xyz;\n vec3 norm = to.xyz-pt.xyz;\n float mult = 1.1;\n if(length(p1) > length(p2)) {\n mvPosition = to;\n }\n vec3 n = normalize(mvPosition.xyz);\n if(color.z >= 0.0) {\n vec3 pnorm = normalize(p1);\n float t = dot(mvPosition.xyz-p1,n)/dot(pnorm,n);\n mvPosition.xyz = p1+t*pnorm;\n } else {\n vec3 pnorm = normalize(p2);\n float t = dot(mvPosition.xyz-p2,n)/dot(pnorm,n);\n mvPosition.xyz = p2+t*pnorm;\n mult *= -1.0;\n }\n vec3 cr = normalize(cross(mvPosition.xyz,norm))*radius;\n vec3 doublecr = normalize(cross(mvPosition.xyz,cr))*radius;\n mvPosition.xy += mult*(cr + doublecr).xy;\n cposition = mvPosition.xyz;\n gl_Position = projectionMatrix * mvPosition;\n vec4 lDirection = viewMatrix * vec4( directionalLightDirection[ 0 ], 0.0 );\n vLight = normalize( lDirection.xyz )*directionalLightColor[0];\n}", uniforms:{opacity:{type:"f",value:1},fogColor:{type:"c",value:new $3Dmol.Color(1,1,1)},fogNear:{type:"f",value:1},fogFar:{type:"f",value:2E3},directionalLightColor:{type:"fv",value:[]},directionalLightDirection:{type:"fv",value:[]}}},stickimposteroutline:{fragmentShader:$3Dmol.ShaderUtils.stickimposterFragmentShader+"gl_FragColor = vec4(color,1.0);}",vertexShader:"uniform mat4 modelViewMatrix;\nuniform mat4 projectionMatrix;\nuniform mat4 viewMatrix;\nuniform mat3 normalMatrix;\nuniform vec3 directionalLightColor[ 1 ];\nuniform vec3 directionalLightDirection[ 1 ];\nuniform vec3 outlineColor;\nuniform float outlineWidth;\nuniform float outlinePushback;\nattribute vec3 position;\nattribute vec3 normal;\nattribute vec3 color;\nattribute float radius;\nvarying vec3 vColor;\nvarying vec3 vLight;\nvarying vec3 cposition;\nvarying vec3 p1;\nvarying vec3 p2;\nvarying float r;\nvoid main() {\n vColor = outlineColor;\n float rad = radius+sign(radius)*outlineWidth;\n r = abs(rad);\n vec4 to = modelViewMatrix*vec4(normal, 1.0);\n vec4 pt = modelViewMatrix*vec4(position, 1.0);\n to.xyz += normalize(to.xyz)*outlinePushback;\n pt.xyz += normalize(pt.xyz)*outlinePushback;\n vec4 mvPosition = pt;\n p1 = pt.xyz; p2 = to.xyz;\n vec3 norm = to.xyz-pt.xyz;\n float mult = 1.1;\n if(length(p1) > length(p2)) {\n mvPosition = to;\n }\n vec3 n = normalize(mvPosition.xyz);\n if(color.z >= 0.0) {\n vec3 pnorm = normalize(p1);\n float t = dot(mvPosition.xyz-p1,n)/dot(pnorm,n);\n mvPosition.xyz = p1+t*pnorm;\n } else {\n vec3 pnorm = normalize(p2);\n float t = dot(mvPosition.xyz-p2,n)/dot(pnorm,n);\n mvPosition.xyz = p2+t*pnorm;\n mult *= -1.0;\n }\n vec3 cr = normalize(cross(mvPosition.xyz,norm))*rad;\n vec3 doublecr = normalize(cross(mvPosition.xyz,cr))*rad;\n mvPosition.xy += mult*(cr + doublecr).xy;\n cposition = mvPosition.xyz;\n gl_Position = projectionMatrix * mvPosition;\n vLight = vec3(1.0,1.0,1.0);\n}", uniforms:{opacity:{type:"f",value:1},fogColor:{type:"c",value:new $3Dmol.Color(1,1,1)},fogNear:{type:"f",value:1},fogFar:{type:"f",value:2E3},outlineColor:{type:"c",value:new $3Dmol.Color(0,0,0)},outlineWidth:{type:"f",value:.1},outlinePushback:{type:"f",value:1}}},lambertdouble:{fragmentShader:"uniform mat4 viewMatrix;\nuniform float opacity;\nuniform vec3 fogColor;\nuniform float fogNear;\nuniform float fogFar;\nvarying vec3 vLightFront;\nvarying vec3 vLightBack;\nvarying vec3 vColor;\nvoid main() {\n gl_FragColor = vec4( vec3 ( 1.0 ), opacity );\n #ifndef WIREFRAME\n if ( gl_FrontFacing )\n gl_FragColor.xyz *= vLightFront;\n else\n gl_FragColor.xyz *= vLightBack;\n #endif\n gl_FragColor = gl_FragColor * vec4( vColor, opacity );\n float depth = gl_FragCoord.z / gl_FragCoord.w;\n float fogFactor = smoothstep( fogNear, fogFar, depth );\n gl_FragColor = mix( gl_FragColor, vec4( fogColor, gl_FragColor.w ), fogFactor );\n}", vertexShader:"uniform mat4 modelViewMatrix;\nuniform mat4 projectionMatrix;\nuniform mat4 viewMatrix;\nuniform mat3 normalMatrix;\nuniform vec3 directionalLightColor[ 1 ];\nuniform vec3 directionalLightDirection[ 1 ];\nattribute vec3 position;\nattribute vec3 normal;\nattribute vec3 color;\nvarying vec3 vColor;\nvarying vec3 vLightFront;\nvarying vec3 vLightBack;\nvoid main() {\n vColor = color;\n vec3 objectNormal = normal;\n vec3 transformedNormal = normalMatrix * objectNormal;\n vec4 mvPosition = modelViewMatrix * vec4( position, 1.0 );\n vLightFront = vec3( 0.0 );\n vLightBack = vec3( 0.0 );\n transformedNormal = normalize( transformedNormal );\n vec4 lDirection = viewMatrix * vec4( directionalLightDirection[ 0 ], 0.0 );\n vec3 dirVector = normalize( lDirection.xyz );\n float dotProduct = dot( transformedNormal, dirVector );\n vec3 directionalLightWeighting = vec3( max( dotProduct, 0.0 ) );\n vec3 directionalLightWeightingBack = vec3( max( -dotProduct, 0.0 ) );\n vLightFront += directionalLightColor[ 0 ] * directionalLightWeighting;\n vLightBack += directionalLightColor[ 0 ] * directionalLightWeightingBack;\n gl_Position = projectionMatrix * mvPosition;\n}", uniforms:{opacity:{type:"f",value:1},fogColor:{type:"c",value:new $3Dmol.Color(1,1,1)},fogNear:{type:"f",value:1},fogFar:{type:"f",value:2E3},directionalLightColor:{type:"fv",value:[]},directionalLightDirection:{type:"fv",value:[]}}},sprite:{fragmentShader:"uniform vec3 color;\nuniform sampler2D map;\nuniform float opacity;\nuniform int fogType;\nuniform vec3 fogColor;\nuniform float fogDensity;\nuniform float fogNear;\nuniform float fogFar;\nuniform float alphaTest;\nvarying vec2 vUV;\nvoid main() {\n vec4 texture = texture2D(map, vUV);\n if (texture.a < alphaTest) discard;\n gl_FragColor = vec4(color * texture.xyz, texture.a * opacity);\n if (fogType > 0) {\n float depth = gl_FragCoord.z / gl_FragCoord.w;\n float fogFactor = 0.0;\n if (fogType == 1) {\n fogFactor = smoothstep(fogNear, fogFar, depth);\n }\n else {\n const float LOG2 = 1.442695;\n float fogFactor = exp2(- fogDensity * fogDensity * depth * depth * LOG2);\n fogFactor = 1.0 - clamp(fogFactor, 0.0, 1.0);\n }\n gl_FragColor = mix(gl_FragColor, vec4(fogColor, gl_FragColor.w), fogFactor);\n }\n}", vertexShader:"uniform int useScreenCoordinates;\nuniform vec3 screenPosition;\nuniform mat4 modelViewMatrix;\nuniform mat4 projectionMatrix;\nuniform float rotation;\nuniform vec2 scale;\nuniform vec2 alignment;\nuniform vec2 uvOffset;\nuniform vec2 uvScale;\nattribute vec2 position;\nattribute vec2 uv;\nvarying vec2 vUV;\nvoid main() {\n vUV = uvOffset + uv * uvScale;\n vec2 alignedPosition = position + alignment;\n vec2 rotatedPosition;\n rotatedPosition.x = ( cos(rotation) * alignedPosition.x - sin(rotation) * alignedPosition.y ) * scale.x;\n rotatedPosition.y = ( sin(rotation) * alignedPosition.x + cos(rotation) * alignedPosition.y ) * scale.y;\n vec4 finalPosition;\n if(useScreenCoordinates != 0) {\n finalPosition = vec4(screenPosition.xy + rotatedPosition, screenPosition.z, 1.0);\n }\n else {\n finalPosition = projectionMatrix * modelViewMatrix * vec4(0.0, 0.0, 0.0, 1.0); finalPosition /= finalPosition.w;\n finalPosition.xy += rotatedPosition; \n }\n gl_Position = finalPosition;\n}", uniforms:{}}};"undefined"===typeof console&&(console={log:function(){}}); $3Dmol.ProteinSurface=function(){var b=0,c=0,d=0,l=2,g=0,w=0,q=0,n=0,m=null,B=null,u=null,y=0,s=0,f=0,p=0,h=0,F=0,M={H:1.2,Li:1.82,Na:2.27,K:2.75,C:1.7,N:1.55,O:1.52,F:1.47,P:1.8,S:1.8,CL:1.75,BR:1.85,SE:1.9,ZN:1.39,CU:1.4,NI:1.63,X:2},x=function(b){return b.elem&&"undefined"!=typeof M[b.elem]?b.elem:"X"},e={},H={},t,C,z=[new Int32Array([1,0,0]),new Int32Array([-1,0,0]),new Int32Array([0,1,0]),new Int32Array([0,-1,0]),new Int32Array([0,0,1]),new Int32Array([0,0,-1]),new Int32Array([1,1,0]),new Int32Array([1, -1,0]),new Int32Array([-1,1,0]),new Int32Array([-1,-1,0]),new Int32Array([1,0,1]),new Int32Array([1,0,-1]),new Int32Array([-1,0,1]),new Int32Array([-1,0,-1]),new Int32Array([0,1,1]),new Int32Array([0,1,-1]),new Int32Array([0,-1,1]),new Int32Array([0,-1,-1]),new Int32Array([1,1,1]),new Int32Array([1,1,-1]),new Int32Array([1,-1,1]),new Int32Array([-1,1,1]),new Int32Array([1,-1,-1]),new Int32Array([-1,-1,1]),new Int32Array([-1,1,-1]),new Int32Array([-1,-1,-1])];this.getFacesAndVertices=function(f){var s= {},A,e;A=0;for(e=f.length;A f?e[s][indx]=-1:(d=Math.sqrt(f-d),e[s][indx]=Math.floor(d)),indx++};this.fillvoxels=function(b,c){var d,f;d=0;for(f=m.length;d V;V++)for(W=-1;2>W;W++)for(U=-1;2>U;U++)if(0!==V&&0!==W&&0!==U)for(n=V*M,z=U*B,I=0;I<=e[Z][aa];I++)C=I*W,y=A+n,t=h+C,Y=p+z,0>y||0>t||0>Y||y>=q||t>=w||Y>=g||(Y=y*ga+t*g+Y,m[Y]&1?(F=s[u[Y]],F.serial!=f.serial&&(y=A+n-Math.floor(.5+l*(F.x+b)),t=h+C-Math.floor(.5+l*(F.y+c)),F=p+z-Math.floor(.5+l*(F.z+d)),n*n+C*C+z*z W;W++)for(U=-1;2>U;U++)for(D=-1;2>D;D++)if(0!==W&&0!==U&&0!==D)for(C=W*I,M=D*Y,V=0;V<=e[aa][n];V++)z=V*U,y=A+C,t=h+z,B=p+M,0>y||0>t||0>B||y>=q||t>=w||B>= g||(B=y*ga+t*g+B,m[B]&2?(F=s[u[B]],F.serial!=f.serial&&(y=A+C-Math.floor(.5+l*(F.x+b)),t=h+z-Math.floor(.5+l*(F.y+c)),F=p+M-Math.floor(.5+l*(F.z+d)),C*C+z*z+M*M d;){var f=i+z[d][0],s=j+z[d][2],e=k+z[d][1];if(-1 b&&(b=0);e-=.5/(.1+b);for(b=0;b =e)&&(m[p]|=4)};this.fastoneshell=function(b,c){var d,f,s,e,h,p,u,y,F,t,x,C=[];if(0===b.length)return C;tnv={ix:-1,iy:-1,iz:-1};var n=w*g;u=0;for(F=b.length;uy;y++)tnv.ix=d+z[y][0],tnv.iy=f+z[y][1],tnv.iz= s+z[y][2],tnv.ix y;y++)tnv.ix=d+z[y][0],tnv.iy=f+z[y][1],tnv.iz=s+z[y][2],tnv.ixy;y++)tnv.ix=d+z[y][0],tnv.iy=f+z[y][1],tnv.iz=s+z[y][2],tnv.ixm;++m)n[e+3*m]=q.r,n[e+1+3*m]=q.g,n[e+2+3*m]=q.b;0f.length)){var q;q=f[0];f=f[f.length-1];e=h||axisDIV;q=b(q,e);f=b(f,e);if(u){e=[];var t,m,n,g,l;x=[[0,2,-6,-8],[-4,-2,6,4],[7,-1,-5,3],[-3,5,1,-7]];var B,A,w,E,N,L,Q,G,P;L=0;for(Q=q.length;LG;++G)P[A+3*G]=w.r,P[A+ 1+3*G]=w.g,P[A+2+3*G]=w.b;if(0G;G++)if(P=[B+x[G][0],B+x[G][1],B+x[G][2],B+x[G][3]],n=y.faceidx,h[n]=P[0],h[n+1]=P[1],h[n+2]=P[3],h[n+3]=P[1],h[n+4]=P[2],h[n+5]=P[3],y.faceidx+=6,E.clickable||N.clickable){l=e[P[3]].clone();n=e[P[0]].clone();var R=e[P[2]].clone();g=e[P[1]].clone();l.atom=e[P[3]].atom||null;R.atom=e[P[2]].atom||null;n.atom=e[P[0]].atom||null;g.atom=e[P[1]].atom||null;if(A){var S=l.clone().add(n).multiplyScalar(.5),X=R.clone().add(g).multiplyScalar(.5), T=l.clone().add(g).multiplyScalar(.5);0===G%2?(N.clickable&&(P=new $3Dmol.Triangle(S,T,l),m=new $3Dmol.Triangle(X,R,T),l=new $3Dmol.Triangle(T,R,l),N.intersectionShape.triangle.push(P),N.intersectionShape.triangle.push(m),N.intersectionShape.triangle.push(l)),E.clickable&&(P=new $3Dmol.Triangle(n,g,T),m=new $3Dmol.Triangle(g,X,T),l=new $3Dmol.Triangle(n,T,S),E.intersectionShape.triangle.push(P),E.intersectionShape.triangle.push(m),E.intersectionShape.triangle.push(l))):(E.clickable&&(P=new $3Dmol.Triangle(S, T,l),m=new $3Dmol.Triangle(X,R,T),l=new $3Dmol.Triangle(T,R,l),E.intersectionShape.triangle.push(P),E.intersectionShape.triangle.push(m),E.intersectionShape.triangle.push(l)),N.clickable&&(P=new $3Dmol.Triangle(n,g,T),m=new $3Dmol.Triangle(g,X,T),l=new $3Dmol.Triangle(n,T,S),N.intersectionShape.triangle.push(P),N.intersectionShape.triangle.push(m),N.intersectionShape.triangle.push(l)))}else E.clickable&&(P=new $3Dmol.Triangle(n,g,l),m=new $3Dmol.Triangle(g,R,l),E.intersectionShape.triangle.push(P), E.intersectionShape.triangle.push(m))}y.vertices+=8;N=E}p=e.length-8;y=d.updateGeoGroup(8);G=y.vertexArray;P=y.colorArray;h=y.faceArray;B=y.vertices;A=3*B;n=y.faceidx;for(L=0;4>L;L++)e.push(e[2*L]),e.push(e[p+2*L]),u=e[2*L],d=e[p+2*L],G[A+6*L]=u.x,G[A+1+6*L]=u.y,G[A+2+6*L]=u.z,G[A+3+6*L]=d.x,G[A+4+6*L]=d.y,G[A+5+6*L]=d.z,P[A+6*L]=w.r,P[A+1+6*L]=w.g,P[A+2+6*L]=w.b,P[A+3+6*L]=w.r,P[A+4+6*L]=w.g,P[A+5+6*L]=w.b;P=[B,B+2,B+6,B+4];m=[B+1,B+5,B+7,B+3];h[n]=P[0];h[n+1]=P[1];h[n+2]=P[3];h[n+3]=P[1];h[n+4]= P[2];h[n+5]=P[3];h[n+6]=m[0];h[n+7]=m[1];h[n+8]=m[3];h[n+9]=m[1];h[n+10]=m[2];h[n+11]=m[3];y.faceidx+=12;y.vertices+=8}else c(d,q,f,p,e,y)}}else if("rectangle"===x||"oval"===x||"parabola"===x)if(w=x,E=f.length,!(2>E||2>f[0].length)){h=h||axisDIV;for(N=0;N d*d+h*h+u*u)return!0}}return!1}, w=function(b,c,d,h,u){null!=c&&0!=c.vertices&&(u&&(c.initTypedArrays(),c.setUpNormals()),u=new $3Dmol.MeshDoubleLambertMaterial,u.vertexColors=$3Dmol.FaceColors,"number"===typeof d&&0<=d&&1>d&&(u.transparent=!0,u.opacity=d),u.outline=h,c=new $3Dmol.Mesh(c,u),b.add(c))},q={C:!0,CA:!0,O:!0,P:!0,OP2:!0,O2P:!0,"O5'":!0,"O3'":!0,"C5'":!0,"C2'":!0,"O5*":!0,"O3*":!0,"C5*":!0,"C2*":!0,N1:!0,N3:!0},n={DA:!0,DG:!0,A:!0,G:!0},m={DT:!0,DC:!0,U:!0,C:!0,T:!0},B={DA:!0,DG:!0,A:!0,G:!0,DT:!0,DC:!0,U:!0,C:!0,T:!0}, u=function(b,c,u,h,F,M,x){M=M||5;x=x||5;var e,H,t,C,z,I,K,J,A,O,E,N,L,Q,G,P,R=new $3Dmol.Geometry(!0),S=new $3Dmol.Geometry(!0),X=[],T=[],Y=1,V=!1,W={};for(C in $3Dmol.Gradient.builtinGradients)$3Dmol.Gradient.builtinGradients.hasOwnProperty(C)&&(W[C]=new $3Dmol.Gradient.builtinGradients[C](u[0],u[1]));var U=function(b,c){return u&&"spectrum"===c.color?c.colorscheme in W?W[c.colorscheme].valueToHex(b.resi):W.sinebow.valueToHex(b.resi):$3Dmol.getColorFromStyle(b,c).getHex()};for(J=0;J 3E4/M/x/2&&c(!0),"trace"===e.style)!C.hetflag&&("C"===C.elem&&"CA"===C.atom||D&&"P"===C.atom)&&(I=U(C,e),K=$.isNumeric(e.thickness)?e.thickness:.4,g(t,C)&&(I==z?(z=$3Dmol.CC.color(I),$3Dmol.GLDraw.drawCylinder(R,t,C,K,z,2,2)):(e=(new $3Dmol.Vector3).addVectors(t,C).multiplyScalar(.5),z=$3Dmol.CC.color(z),J=$3Dmol.CC.color(I),$3Dmol.GLDraw.drawCylinder(R,t,e,K,z,2,0),$3Dmol.GLDraw.drawCylinder(R,e,C,K,J,0,2))),t=C,z=I);else{if(C&&"C"===C.elem&&"CA"===C.atom|| D&&("P"===C.atom||0==C.atom.indexOf("O5"))){if(P)if("tube end"===C.ss)P=!1,J=new $3Dmol.Vector3(C.x,C.y,C.z),$3Dmol.GLDraw.drawCylinder(R,G,J,2,$3Dmol.CC.color(z),1,1),C.ss="h";else continue;if(t&&(!g(t,C)||"tube start"===t.ss)){"tube start"===t.ss&&(P=!0,G=new $3Dmol.Vector3(t.x,t.y,t.z),t.ss="h");Q&&(J=N?(new $3Dmol.Vector3).addVectors(t,N).multiplyScalar(.5):new $3Dmol.Vector3(t.x,t.y,t.z),$3Dmol.GLDraw.drawCylinder(R,J,Q,.4,$3Dmol.CC.color(Q.color),0,2),y(T,M,!F,N,L,E,t,Z,H),X.push(I),Q=J=null); for(J=0;!K&&J g.dot(m)&&g.negate();g.multiplyScalar(n);for(n=0;n y?(c=0,y=1):(c=-d/y,y=g/y);g=-c*d+y*g;d=Math.sqrt(g*g+u*u);1E-4>d?(u=0,g=1):(u/=d,g/=d);d=new Float32Array(9);d[0]=y;d[1]=c;d[2]=0;d[3]=-c*g;d[4]=y*g;d[5]=u;d[6]=c*u;d[7]=-y*u;d[8]=g;return d}}(),d=function(){var b=[],c=Math.pow(2,4),d,g=Math.pow(2,2),u=c/g,y;b[0]=new $3Dmol.Vector3(-1,0,0);b[u]=new $3Dmol.Vector3(0,0,1);b[2*u]=new $3Dmol.Vector3(1, 0,0);b[3*u]=new $3Dmol.Vector3(0,0,-1);for(d=3;4>=d;d++){g=Math.pow(2,d-1);u=c/g;for(y=0;y =w;w++){var x=0===w||10===w?!0:!1,e=5===w?!0:!1,H=[],t=[];for(l=0;l<=g;l++)if(e){var C=l Math.abs(C.x)&&(C.x=0),1E-5>Math.abs(C.y)&&(C.y=0),1E-5>Math.abs(C.z)&&(C.z=0),s=1===c?new $3Dmol.Vector3(0, Math.cos(0+z*h),0):new $3Dmol.Vector3(C.x,C.y,C.z),s.normalize(),u.push(C),y.push(s),H.push(u.length-1)):H.push(u.length-g)}e&&f.push(t);f.push(H)}g={vertices:u,normals:y,verticesRows:f,w:g,h:10};this.cache[b]={};return this.cache[b][c+m]=g}};this.caps={NONE:0,FLAT:1,ROUND:2};var g=0;b.drawCylinder=function(b,d,m,w,u,y,s){if(d&&m){g++;var f=s||y;u=u||{r:0,g:0,b:0};var p=[m.x,m.y,m.z];p[0]-=d.x;p[1]-=d.y;p[2]-=d.z;var p=c(p),h=l.getVerticesForRadius(w,s,"to"),F=h.w,M=h.h,x=f?M*F+2:2*F;b=b.updateGeoGroup(x); var e=h.vertices,H=h.normals,h=h.verticesRows,t=h[M/2],C=h[M/2+1],z=b.vertices,I,K,J,A,O,E,N=b.vertexArray,L=b.normalArray,Q=b.colorArray,G=b.faceArray;for(J=0;J b&&(d=10,g=8);var u=2*Math.PI,y=Math.PI,s,f;for(f=0;f<=g;f++){var p=[];for(s=0;s<=d;s++){var h=s/d,l=f/g,w={};w.x=-b*Math.cos(0+h*u)*Math.sin(0+l*y);w.y=b*Math.cos(0+l*y);w.z=b*Math.sin(0+h*u)*Math.sin(0+l*y);h=new $3Dmol.Vector3(w.x,w.y,w.z);h.normalize();c.vertices.push(w);c.normals.push(h);p.push(c.vertices.length-1)}c.verticesRows.push(p)}return this.cache[b]= c}};b.drawSphere=function(b,c,d,g){new $3Dmol.Vector3(c.x,c.y,c.z);var u=w.getVerticesForRadius(d),y=u.vertices,s=u.normals;b=b.updateGeoGroup(y.length);for(var f=b.vertices,p=b.vertexArray,h=b.colorArray,l=b.faceArray,M=b.lineArray,x=b.normalArray,e=0,H=y.length;e h.lengthSq()&&(h=e.clone(),1E-4 p;p++)u[h+3*p]=c.x,u[h+3*p+1]=c.y,u[h+3*p+2]=c.z;c=b.normalArray;s=b.colorArray;for(p=0;4>p;p++)s[h+3*p]=f.r, s[h+3*p+1]=f.g,s[h+3*p+2]=f.b;c[h+0]=-d;c[h+1]=d;c[h+2]=0;c[h+3]=-d;c[h+4]=-d;c[h+5]=0;c[h+6]=d;c[h+7]=-d;c[h+8]=0;c[h+9]=d;c[h+10]=d;c[h+11]=0;b.vertices+=4;d=b.faceArray;f=b.faceidx;d[f+0]=e;d[f+1]=e+1;d[f+2]=e+2;d[f+3]=e+2;d[f+4]=e+3;d[f+5]=e;b.faceidx+=6},I=function(b,c){if(b.style.sphere){var d=b.style.sphere;if(!d.hidden){var f=x(b,d),d=$3Dmol.getColorFromStyle(b,d);if((!0===b.clickable||b.hoverable)&&void 0!==b.intersectionShape){var e=new $3Dmol.Vector3(b.x,b.y,b.z);b.intersectionShape.sphere.push(new $3Dmol.Sphere(e, f))}z(c,b,f,d)}}},K=function(b,c,d,f,e,h,u){b=b.updateGeoGroup(4);h=b.vertices;u=b.vertexArray;var s=b.colorArray,p=b.radiusArray,y=b.normalArray,m=e.r,g=e.g;e=e.b;for(var n=3*h,t=0;4>t;t++){u[n]=c.x;y[n]=d.x;s[n]=m;n++;u[n]=c.y;y[n]=d.y;s[n]=g;n++;u[n]=c.z;y[n]=d.z;if(2>t)s[n]=e;else{var x=n,l=-e;0==l&&(l=-1E-4);s[x]=l}n++}b.vertices+=4;p[h]=-f;p[h+1]=f;p[h+2]=-f;p[h+3]=f;c=b.faceArray;d=b.faceidx;c[d+0]=h;c[d+1]=h+1;c[d+2]=h+2;c[d+3]=h+2;c[d+4]=h+3;c[d+5]=h;b.faceidx+=6};this.getCrystData=function(){return f.cryst? f.cryst:null};this.getSymmetries=function(){"undefined"==typeof f.symmetries&&(f.symmetries=[p]);return f.symmetries};this.setSymmetries=function(b){f.symmetries="undefined"==typeof b?[p]:b};this.getID=function(){return w};this.getFrames=function(){return m};this.setFrame=function(b){0!=m.length&&(n=0<=b&&b =u)u=d;else{e=$3Dmol.getExtent(d);h=[[],[],[]];for(f=0;3>f;f++)h[0][f]=e[0][f]-u,h[1][f]=e[1][f]+u,h[2][f]=e[2][f];u=[];for(f=0;f =h[0][0]&&s<=h[1][0]&&p>=h[0][1]&&p<=h[1][1]&&y>=h[0][2]&&y<=h[1][2]&&(s>=e[0][0]&& s<=e[1][0]&&p>=e[0][1]&&p<=e[1][1]&&y>=e[0][2]&&y<=e[1][2]||u.push(n[f]))}}s=d.length;for(e=0;e =u||(h={b:h,e:u},u=f.bondOrder[e],1!=u&&(h.o=u),c.b.push(h))}}return c};this.globj=function(b,c){if(null===u){var d=n,s=c,s=s||{},p=new $3Dmol.Object3D, m=[],g={},l={},q=t,w=null,F=null;s.supportsImposters?(q=I,w=new $3Dmol.Geometry(!0),w.imposter=!0,F=new $3Dmol.Geometry(!0,!0),F.imposter=!0,F.sphereGeometry=w,F.drawnCaps={}):(s.supportsAIA?(q=C,w=new $3Dmol.Geometry(!1,!0,!0),w.instanced=!0):w=new $3Dmol.Geometry(!0),F=new $3Dmol.Geometry(!0));var M,J,V,W,U={},D=[Number.POSITIVE_INFINITY,Number.NEGATIVE_INFINITY];M=0;for(V=d.length;M pa;pa++){var La=3*ea.vertices;ea.vertices++;xa[La]=aa.x+Ea[pa][0];xa[La+1]=aa.y+Ea[pa][1];xa[La+2]=aa.z+Ea[pa][2];Ha[La]=na.r;Ha[La+1]=na.g;Ha[La+2]=na.b;if(oa){var Ma=new $3Dmol.Vector3(Ea[pa][0],Ea[pa][1],Ea[pa][2]);Ma.multiplyScalar(.1);Ma.set(Ma.x+aa.x,Ma.y+aa.y, Ma.z+aa.z);aa.intersectionShape.line.push(Ma)}}}}var ha=Z,ab=d,Za=g;if(ha.style.line){var Qa=ha.style.line;if(!Qa.hidden){var va=void 0,Ca=void 0,Ra=void 0,Na=void 0,bb=Qa.linewidth||1;Za[bb]||(Za[bb]=new $3Dmol.Geometry);for(var qa=Za[bb].updateGeoGroup(6*ha.bonds.length),ma=qa.vertexArray,ra=qa.colorArray,Sa=0;Sa =Ta.serial)){var Oa=new $3Dmol.Vector3(ha.x,ha.y,ha.z),cb=new $3Dmol.Vector3(Ta.x,Ta.y,Ta.z),fb=Oa.clone().add(cb).multiplyScalar(.5), Bb=!1;if(ha.clickable||ha.hoverable)void 0===ha.intersectionShape&&(ha.intersectionShape={sphere:[],cylinder:[],line:[],triangle:[]}),ha.intersectionShape.line.push(Oa),ha.intersectionShape.line.push(fb),Ta.intersectionShape.line.push(fb),Ta.intersectionShape.line.push(cb);var ya=$3Dmol.getColorFromStyle(ha,ha.style.line),Ua=$3Dmol.getColorFromStyle(Ta,Ta.style.line);if(ha.bondStyles&&ha.bondStyles[Sa]){var $a=ha.bondStyles[Sa];if(!$a.iswire)continue;$a.radius&&(bondR=$a.radius);$a.singleBond&&(Bb= !0);"undefined"!=typeof $a.color1&&(ya=$3Dmol.CC.color($a.color1));"undefined"!=typeof $a.color2&&(Ua=$3Dmol.CC.color($a.color2))}var sa=3*qa.vertices;if(1 ha.bondOrder[Sa]&&!Bb){var gb=e(ha,Ta,Sa),Pa=cb.clone();Pa.sub(Oa);if(2==ha.bondOrder[Sa])if(gb.multiplyScalar(.1),va=Oa.clone(),va.add(gb),Ca=Oa.clone(),Ca.sub(gb),Ra=va.clone(),Ra.add(Pa),Na=Ca.clone(),Na.add(Pa),ya==Ua)qa.vertices+=4,H(ma,ra,sa,va,Ra,ya),H(ma,ra,sa+6,Ca,Na,ya);else{qa.vertices+=8;Pa.multiplyScalar(.5);var db= va.clone();db.add(Pa);var eb=Ca.clone();eb.add(Pa);H(ma,ra,sa,va,db,ya);H(ma,ra,sa+6,db,Ra,Ua);H(ma,ra,sa+12,Ca,eb,ya);H(ma,ra,sa+18,eb,Na,Ua)}else 3==ha.bondOrder[Sa]&&(gb.multiplyScalar(.1),va=Oa.clone(),va.add(gb),Ca=Oa.clone(),Ca.sub(gb),Ra=va.clone(),Ra.add(Pa),Na=Ca.clone(),Na.add(Pa),ya==Ua?(qa.vertices+=6,H(ma,ra,sa,Oa,cb,ya),H(ma,ra,sa+6,va,Ra,ya),H(ma,ra,sa+12,Ca,Na,ya)):(qa.vertices+=12,Pa.multiplyScalar(.5),db=va.clone(),db.add(Pa),eb=Ca.clone(),eb.add(Pa),H(ma,ra,sa,Oa,fb,ya),H(ma,ra, sa+6,fb,cb,Ua),H(ma,ra,sa+12,va,db,ya),H(ma,ra,sa+18,db,Ra,Ua),H(ma,ra,sa+24,Ca,eb,ya),H(ma,ra,sa+30,eb,Na,Ua)))}else ya==Ua?(qa.vertices+=2,H(ma,ra,sa,Oa,cb,ya)):(qa.vertices+=4,H(ma,ra,sa,Oa,fb,ya),H(ma,ra,sa+6,fb,cb,Ua))}}}}var ba=Z,Hb=d,ka=F;if(ba.style.stick){var ob=ba.style.stick;if(!ob.hidden){var jb=ob.radius||.25,Da=jb,Cb=ob.singleBonds||!1,kb=0,lb=0,ta=$3Dmol.getColorFromStyle(ba,ob),ua=void 0,Ia=void 0;!ba.capDrawn&&4>ba.bonds.length&&(kb=2);var la=$3Dmol.GLDraw.drawCylinder;ka.imposter&& (la=K);for(var wa=0;wa ja.bonds.length&&(lb=2),ta!=Va?(ua=(new $3Dmol.Vector3).addVectors(za,Ka).multiplyScalar(.5),la(ka,za,ua,Da,ta,kb,0),la(ka,ua,Ka,Da,Va,0,lb)):la(ka,za,Ka,Da,ta,kb,lb),ba.clickable||ja.clickable){ua=(new $3Dmol.Vector3).addVectors(za,Ka).multiplyScalar(.5);if(ba.clickable||ba.hoverable){var Ib=new $3Dmol.Cylinder(za,ua,Da),Jb=new $3Dmol.Sphere(za,Da);ba.intersectionShape.cylinder.push(Ib);ba.intersectionShape.sphere.push(Jb)}if(ja.clickable|| ja.hoverable){var Kb=new $3Dmol.Cylinder(Ka,ua,Da),Lb=new $3Dmol.Sphere(Ka,Da);ja.intersectionShape.cylinder.push(Kb);ja.intersectionShape.sphere.push(Lb)}}}else if(1 D[1]&&(D[1]=Z.resi)),m.push(Z))}}0 U.sphere&&0<=U.sphere&&(ib.transparent=!0,ib.opacity=U.sphere);nb=new $3Dmol.Mesh(w,ib);p.add(nb)}if(0 U.stick&&0<=U.stick&& (pb.transparent=!0,pb.opacity=U.stick);F.initTypedArrays();pb.wireframe&&F.setUpWireframe();Fb=new $3Dmol.Mesh(F,pb)}p.add(Fb)}for(M in g)if(g.hasOwnProperty(M)){var yb=M,zb=new $3Dmol.LineBasicMaterial({linewidth:yb,vertexColors:!0});1>U.line&&0<=U.line&&(zb.transparent=!0,zb.opacity=U.line);g[M].initTypedArrays();var Pb=new $3Dmol.Line(g[M],zb,$3Dmol.LinePieces);p.add(Pb)}for(M in l)if(l.hasOwnProperty(M)){var yb=M,Ab=new $3Dmol.LineBasicMaterial({linewidth:yb,vertexColors:!0});1>U.cross&&0<=U.cross&& (Ab.transparent=!0,Ab.opacity=U.cross);l[M].initTypedArrays();var Qb=new $3Dmol.Line(l[M],Ab,$3Dmol.LinePieces);p.add(Qb)}if(h&&f.symmetries&&0 MOLECULE/gm)?"mol2":b.match(/^HETATM/gm)||b.match(/^ATOM/gm)?"pdb":b.match(/^.*\n.*\n.\s*(\d+)\s+(\d+)/gm)?"sdf":b.match(/^%VERSION\s+\VERSION_STAMP/gm)?"prmtop":"xyz",console.log("Best guess: "+ c)));return(0,$3Dmol.Parsers[c])(b,d)};b.setAtomDefaults=function(b,d){for(var g=0;g b.mid?b.mid:.618034;var s=b.start,f=b.end,p=b.radius,h=b.radiusRatio,g=b.mid;if(s&&f){var c=m.updateGeoGroup(51),n=f.clone();n.sub(s).multiplyScalar(g);var x=s.clone().add(n),g=n.clone().negate(); this.intersectionShape.cylinder.push(new $3Dmol.Cylinder(s.clone(),x.clone(),p));this.intersectionShape.sphere.push(new $3Dmol.Sphere(s.clone(),p));var e=[];e[0]=n.clone();1E-4 n.x?n=d.selectedRegion[t]:d.selectedRegion[t].x l.y?l=d.selectedRegion[t]:d.selectedRegion[t].y e.z?e=d.selectedRegion[t]:d.selectedRegion[t].z w.x&&f[t].x B.y&&f[t].y I.z&&f[t].z this.opacity?!0:!1,opacity:this.opacity,wireframeLinewidth:this.linewidth}):new $3Dmol.MeshLambertMaterial({wireframe:this.wireframe,side:this.side,transparent:1>this.opacity?!0:!1,opacity:this.opacity,wireframeLinewidth:this.linewidth});d=new $3Dmol.Mesh(m,d);q.add(d);d=new $3Dmol.LineBasicMaterial({linewidth:this.linewidth,color:this.color}); d=new $3Dmol.Line(B,d,$3Dmol.LinePieces);q.add(d);n=q.clone();b.add(n)}};this.removegl=function(b){n&&(void 0!==n.geometry&&n.geometry.dispose(),void 0!==n.material&&n.material.dispose(),b.remove(n),n=null);q=null}}var c=function(b,c,l){var n=l.faceArr;0!==l.vertexArr.length&&0!==n.length||console.warn("Error adding custom shape component: No vertices and/or face indices supplied!");n=l.color;"undefined"==typeof n&&(n=b.color);for(var n=$3Dmol.CC.color(n),m=$3Dmol.splitMesh(l),B=0,u=m.length;Bb.vertexArr.length)return[b];var c=[{vertexArr:[],normalArr:[],faceArr:[]}];b.colorArr&&(c.colorArr=[]);for(var d=[],l=[],g=0,w=b.faceArr,q=0,n=w.length;q B;B++){var u=w[q+B];d[u]!==g&&(d[u]=g,l[u]=m.vertexArr.length,m.vertexArr.push(b.vertexArr[u]),b.normalArr&&b.normalArr[u]&&m.normalArr.push(b.normalArr[u]),b.colorArr&&b.colorArr[u]&&m.colorArr.push(b.colorArr[u]));m.faceArr.push(l[u])}64E3<=m.vertexArr.length&&(c.push({vertexArr:[], normalArr:[],faceArr:[]}),b.colorArr&&(c.colorArr=[]),g++)}return c}; $3Dmol.GLViewer=function(){return function(b,c){function d(b){var c=[];"undefined"===typeof b&&(b={});var d=[],e;if("undefined"===typeof b.model)for(e=0;e b&&(b=c);return b+1},ea=function(){var b=A.position.z- G.position.z;1>b&&(b=1);A.near=b+R;1>A.near&&(A.near=1);A.far=b+S;A.near+1>A.far&&(A.far=A.near+1);A.fov=20;A.right=b*Math.tan(Math.PI/180*20);A.left=-A.right;A.top=A.right/I;A.bottom=-A.top;A.updateProjectionMatrix();Q.fog.near=A.near+.4*(A.far-A.near);Q.fog.far=A.far;c.disableFog&&(Q.fog.near=Q.fog.far)},ca=function(b){if(Q&&(ea(),J.render(Q,A),!b&&0 c&&(c=80),G.position.z=aa+g*c,150 c||1 e&&(c=c.clone().multiplyScalar(-1),e=-e);1 e&&(e=-1);d*=Math.acos(e);c=c.clone();c.sub(b.clone().multiplyScalar(e)); c.normalize();e=Math.cos(d);d=Math.sin(d);b=new $3Dmol.Quaternion(b.x*e+c.x*d,b.y*e+c.y*d,b.z*e+c.z*d,b.w*e+c.w*d);b.normalize();return b},Qa=function(b,c,d,e,f,h){var s=Math.ceil(b/20);1>s&&(s=1);b=P.position.clone();var p=G.position.z,g=G.quaternion.clone(),m=O.clone();if(c){s=Array(s);c=s.length;for(var n=0;n b&&(b=5);R=-b/1.9;S=b/2;return this};this.center=function(b,c,e){c=void 0!==c?c:0;var f;b=b||{};var s=d(b),p=$3Dmol.getExtent(s);$.isEmptyObject(b)?($.each(h,function(b,c){if(c&&c.boundingSphere&&c.boundingSphere.center){var d=c.boundingSphere.center,e=c.boundingSphere.radius;0 g&&(g=5);R=-g/1.9;S=g/2;g=p[1][0]-p[0][0];m=p[1][1]-p[0][1];f=p[1][2]-p[0][2];g=Math.sqrt(g*g+m*m+f*f);5>g&&(g=5);p=25;for(g=0;g p&&(p=m));g=2*Math.sqrt(p);b=b.clone().multiplyScalar(-1);0 g&&(g=5);R=-g/1.9;S=g/2;g=p[1][0]-p[0][0];m=p[1][1]-p[0][1];f=p[1][2]-p[0][2];g=Math.sqrt(g*g+m*m+f*f);5>g&&(g=5);p=25;for(g=0;g p&&(p=m));g=2*Math.sqrt(p);b=b.clone().multiplyScalar(-1);p=-(.5*g/Math.tan(Math.PI/180*A.fov/2)-150);0 g){b.start=d;b.end=e;c.addLine(b);break}n.addVectors(d,s);b.start=d;b.end=n;c.addLine(b);d=n.clone();l+=f;n.addVectors(d,p);d= n.clone();l+=m}}else c.addLine(b);h.push(c);return c};this.addUnitCell=function(b){var c=new $3Dmol.GLShape({wireframe:!0});c.shapePosition=h.length;var d=b.getCrystData();if(d){if(d.matrix)b=d.matrix;else{b=d.a;var e=d.b,f=d.c,s=d.alpha,p=d.beta,d=d.gamma,s=s*Math.PI/180,p=p*Math.PI/180,d=d*Math.PI/180,g;g=Math.cos(p);s=(Math.cos(s)-Math.cos(p)*Math.cos(d))/Math.sin(d);p=Math.sqrt(Math.max(0,1-g*g-s*s));b=new $3Dmol.Matrix4(b,e*Math.cos(d),f*g,0,0,e*Math.sin(d),f*s,0,0,0,f*p,0,0,0,0,1)}e=[new $3Dmol.Vector3(0, 0,0),new $3Dmol.Vector3(1,0,0),new $3Dmol.Vector3(0,1,0),new $3Dmol.Vector3(0,0,1),new $3Dmol.Vector3(1,1,0),new $3Dmol.Vector3(0,1,1),new $3Dmol.Vector3(1,0,1),new $3Dmol.Vector3(1,1,1)];for(f=0;f b&&(b=f[c].getFrames().length);return b};this.animate=function(b){Y=!0;var c=100,d="forward",e=0;b=b||{};b.interval&&(c=b.interval);b.loop&&(d=b.loop);b.reps&&(e=b.reps);var f=this.getFrames(),h=this, s=0,p=1,g=0,m=f*e,n=setInterval(function(){var b=d;"forward"==b?(h.setFrame(s),s=(s+p)%f):"backward"==b?(h.setFrame(f-1-s),s=(s+p)%f):(h.setFrame(s),s+=p,p*=0==s%(f-1)?-1:1);h.render();++g!=m&&h.isAnimated()||clearInterval(n)},c);return this};this.stopAnimate=function(){Y=!1;return this};this.isAnimated=function(){return Y};this.addModel=function(b,c,d){var e=new $3Dmol.GLModel(f.length,q);e.addMolData(b,c,d);f.push(e);return e};this.addModels=function(b,c,d){d=d||{};d.multimodel=!0;d.frames=!0;b= $3Dmol.GLModel.parseMolData(b,c,d);for(c=0;c c[1][0]||f.y c[1][1]||f.z c[1][2]||d.push(f))}return d},Ca=function(b){return(b[1][0]-b[0][0])*(b[1][1]-b[0][1])*(b[1][2]-b[0][2])},Ra=function(b,c,d){for(var e=[],f={},h=0,s=c.length;h Ca(b))return[b];var c=b[1][0]-b[0][0],d=b[1][1]-b[0][1],e=b[1][2]-b[0][2],d=c>d&&c>e?0:d>c&&d>e?1:2,e=g(b),c=g(b);b=(b[1][d]-b[0][d])/2+b[0][d];e[1][d]=b;c[0][d]=b;b=m(e);c=m(c);return b.concat(c)};b=m(b);h=0;for(s=b.length;h=F.length)m&&"function"==typeof m&&m(n);else{var d,h=b,s=F[c].extent,p=F[c].atoms;d=F[c].toshow;var g=new $3Dmol.ProteinSurface;g.initparm(s,1===h?!1:!0,x);g.fillvoxels(B,p);g.buildboundary();if(h==$3Dmol.SurfaceType.SES||h==$3Dmol.SurfaceType.MS)g.fastdistancemap(),g.boundingatom(!1),g.fillvoxelswaals(B,p); g.marchingcube(h);d=g.getFacesAndVertices(d);h=$3Dmol.splitMesh({vertexArr:d.vertices,faceArr:d.faces});s=0;for(p=h.length;sb&&(b=0);l=0;for(y=4;l
w?(l q&&(l=q)):(l>w&&(l=w),l q)return l<= n?(w=Math.floor(255*Math.sqrt(1-(l-n)/(q-n))),w=65536*w+256*w+255):(w=Math.floor(255*Math.sqrt((l-w)/(n-w))),w=16711680+256*w+w),w};this.range=function(){return"undefined"!=typeof b&&"undefined"!=typeof c?[b,c]:null}}; $3Dmol.Gradient.ROYGB=function(b,c){"undefined"==typeof c&&$.isArray(b)&&2<=b.length&&(c=b[1],b=b[0]);this.valueToHex=function(d,l){var g,w;d*=1;l?(g=l[0],w=l[1]):(g=b,w=c);if("undefined"==typeof d)return 16777215;if(w>g)dw&&(d=w);else{d>g&&(d=g);d w?(l q&&(l=q)):(l>w&&(l=w),l F&&(F=x);e>M&&(M=e)}this.canvas.width=F;this.canvas.height=M;this.context.clearRect(0,0,this.canvas.width,this.canvas.height);p="";c.bold&&(p="bold ");this.context.font=p+w+"px "+g;this.context.fillStyle="rgba("+B.r+","+B.g+","+B.b+","+ B.a+")";this.context.strokeStyle="rgba("+u.r+","+u.g+","+u.b+","+u.a+")";this.context.lineWidth=m;l&&(l=this.context,B=g=m,F-=2*m,M-=2*m,u=0x[b]&&(x[b]=q.length,q.push(m));return x[b]},e=new Int32Array(12),H=B?l:c,B=B?g:d;for(m=0;m I;++I)z|=!!(b[(p*(m+((I&4)>>2))+t+((I&2)>>1))*h+C+(I&1)]&2)<l;l++)f[l]=Array(c.length);l=0;for(u=c.length;lf[0][l])g[l].x=c[l].x,g[l].y=c[l].y,g[l].z=c[l].z;else if(3==f[0][l]||4==f[0][l]){g[l].x=0;g[l].y=0;y=g[l].z=0;for(s=f[0][l];y Math.abs(h.resi-g.resi)||(lm.length)return d;if(m[1].match(/\d+/))f=parseFloat(m[1]);else return console.log("Warning: second line of the vasp structure file must be a number"),d;if(0>f)return console.log("Warning: Vasp implementation for negative lattice lengths is not yet available"),d;g=new Float32Array(m[2].replace(/^\s+/,"").split(/\s+/));h=new Float32Array(m[3].replace(/^\s+/,"").split(/\s+/));l=new Float32Array(m[4].replace(/^\s+/,"").split(/\s+/));var n=new $3Dmol.Matrix4(g[0],g[1],g[2],0,h[0], h[1],h[2],0,l[0],l[1],l[2],0,0,0,0,1);n.multiplyScalar(f);d.modelData=[{symmetries:[],cryst:{matrix:n}}];var n=m[5].replace(/\s+/,"").replace(/\s+$/,"").split(/\s+/),e=new Int16Array(m[6].replace(/^\s+/,"").split(/\s+/)),q=m[7].replace(/\s+/,"");if(q.match(/C/))q="cartesian";else if(q.match(/D/))q="direct";else return console.log("Warning: Unknown vasp mode in POSCAR file: mode must be either C(artesian) or D(irect)"),d;if(n.length!=e.length)return console.log("Warning: declaration of atomary species wrong:"), console.log(n),console.log(e),d;m.splice(0,8);for(var t=0,w=0,z=n.length;w f.length)return g;for(var l=f[2].replace(/^\s+/,"").replace(/\s+/g," ").split(" "),h=Math.abs(parseFloat(l[0])),l=f[3].replace(/^\s+/,"").replace(/\s+/g," ").split(" "),l=0 f.length);){var l=parseInt(f[0]);if(isNaN(l)||0>=l)break;if(f.length g.length);){var h=parseInt(g[3].substr(0,3));if(isNaN(h)||0>=h)break;var l=parseInt(g[3].substr(3,3)),m=4;if(g.length<4+h+l)break;for(var n=[],e=d[d.length-1].length,q=e+h,t,h=e;h z;z++)for(K=B[z].split("+"),A=0;AMOLECULE/),l=b.search(/@ ATOM/);if(-1==h||-1==l)break;var h=[],m=g[2].replace(/^\s+/,"").replace(/\s+/g," ").split(" "),n=parseInt(m[0]),l=0;1 ATOM"==g[q]){e=q+1;break}q=d[d.length-1].length;for(n=q+n;q BOND"==g[e++]){q=!0;break}if(q&&l)for(q=0;q d)return!1;var g=b.y-c.y,g=g*g;if(g>d)return!1; var h=b.z-c.z,h=h*h;if(h>d)return!1;f=f+g+h;return isNaN(f)?!1:.5>f?!1:f>d?!1:b.altLoc!=c.altLoc&&" "!=b.altLoc&&" "!=c.altLoc?!1:!0},n=function(b,c,d){var f=d.length,g=f,h,l;if(!c)for(c=0;c O;O++){if(R=parseInt(E.substr(P[O],5)),R=J[R],S=m[R],void 0!==G&&void 0!==S)if(N[[I,R]])for(N[[I,R]]+=1,S=0;S =O;O++)if(E=h[A].replace(/^\s*/,""),parseInt(E.substr(18,1))==O)I.elements[O-1]=parseFloat(E.substr(23,10)),I.elements[O-1+4]=parseFloat(E.substr(33,10)),I.elements[O-1+8]=parseFloat(E.substr(43,10)), I.elements[O-1+12]=parseFloat(E.substr(53)),A++;else for(;"BIOMT"==E.substr(13,5);)A++,E=h[A].replace(/^\s*/,"");I.elements[3]=0;I.elements[7]=0;I.elements[11]=0;I.elements[15]=1;z.symmetries.push(I);A--}}(new Date).getTime();A=m;h=0;for(B=A.length;hE.bonds.indexOf(O)&&(E.bonds.push(O),E.bondOrder.push(C.bondOrder[N]));d(m);H||n(z.symmetries,t,m);e&&!x&&((new Date).getTime(),g(m));(new Date).getTime();a:{x=q;e=void 0; for(e in x){x=!1;break a}x=!0}if(!x)for(A=0;A f;f++)t=parseInt(x.substr([11,16,21,26][f],5)),C=l[l.length-1][h[t]],void 0!==w&&void 0!==C&&(w.bonds.push(h[t]),w.bondOrder.push(1)); for(q=0;q =J.length||B(J[Ea]!=R))ca=!0}e.insCodeList&&String.fromCharCode(A[I]);var oa=e.groupIdList[I],na=da.groupName,Ea=K;for(R=0;R fa,chain:Z,resi:oa,icode:pa,rescode:oa+(" "!=pa?"^"+pa:""),serial:Ma,altLoc:pa,index:K,atom:ha,bonds:[],ss:B(fa),ssbegin:ea,ssend:ca,bondOrder:[],properties:{charge:ab,occupancy:La},b:Ha})}}K+=1}fa=da.bondAtomList;R=0;for(S=da.bondOrderList.length;R=K){Y=R;break}ca=U[ca];oa=U[oa];na=W[ca];xa=W[oa];na&&xa&&(na.bonds.push(oa),na.bondOrder.push(ea),xa.bonds.push(ca),xa.bondOrder.push(ea))}c.multimodel&&(c.onemol||H.push([]));if(!q)for(P=0;P=q)return[];n=d("ATOM_NAME");if(-1==n)return[];var e=f(n),t=e[0];for(i=0;i f.length);){var l=parseInt(f[1]); if(isNaN(l)||0>=l)break;if(f.length=q.atom.charCodeAt(1)?q.elem=q.atom.slice(0,2):q.elem=q.atom[0];q.x=parseFloat(n.slice(20,28));q.y=parseFloat(n.slice(28,36));q.z=parseFloat(n.slice(36,44));q.resi=n.slice(5,10);q.bonds=[];q.bondOrder=[];q.properties={};44 b||b>=this.size.x||0>c||c>=this.size.y||0>d||d>=this.size.z?0:this.data[b*this.size.y*this.size.z+c*this.size.z+d]}; $3Dmol.VolumeData.prototype.getCoordinates=function(b){var c=b/(this.size.y*this.size.z),d=b%(this.size.y*this.size.z);b%=this.size.z;c*=this.unit.x;d*=this.unit.y;b*=this.unit.z;c+=this.origin.x;d+=this.origin.y;b+=this.origin.z;return{x:c,y:d,z:b}}; $3Dmol.VolumeData.prototype.vasp=function(b){var c=b.replace(/^\s+/,"").split(/[\n\r]/),d=$3Dmol.Parsers.vasp(b)[0].length;if(0==d)console.log("No good formating of CHG or CHGCAR file, not atomic information provided in the file."),this.data=[];else{var l=parseFloat(c[1]),g;g=c[2].replace(/^\s+/,"").split(/\s+/);b=(new $3Dmol.Vector3(parseFloat(g[0]),parseFloat(g[1]),parseFloat(g[2]))).multiplyScalar(1.889725992*l);g=c[3].replace(/^\s+/,"").split(/\s+/);var w=(new $3Dmol.Vector3(parseFloat(g[0]), parseFloat(g[1]),parseFloat(g[2]))).multiplyScalar(1.889725992*l);g=c[4].replace(/^\s+/,"").split(/\s+/);g=(new $3Dmol.Vector3(parseFloat(g[0]),parseFloat(g[1]),parseFloat(g[2]))).multiplyScalar(1.889725992*l);l=b.x*(w.y*g.z-g.y*w.z)-w.x*(b.y*g.z-g.y*b.z)+g.x*(b.y*w.z-w.y*b.z);l=Math.abs(l)/Math.pow(1.889725992,3);l=1/l;c.splice(0,8+d+1);var q=c[0].replace(/^\s+/,"").replace(/\s+/g," ").split(" "),d=Math.abs(q[0]),n=Math.abs(q[1]),q=Math.abs(q[2]),m=this.origin=new $3Dmol.Vector3(0,0,0);this.size= {x:d,y:n,z:q};this.unit=new $3Dmol.Vector3(b.x,w.y,g.z);b=b.multiplyScalar(1/(1.889725992*d));w=w.multiplyScalar(1/(1.889725992*n));g=g.multiplyScalar(1/(1.889725992*q));if(0!=b.y||0!=b.z||0!=w.x||0!=w.z||0!=g.x||0!=g.y)this.matrix=new $3Dmol.Matrix4(b.x,w.x,g.x,0,b.y,w.y,g.y,0,b.z,w.z,g.z,0,0,0,0,1),this.matrix=this.matrix.multiplyMatrices(this.matrix,(new $3Dmol.Matrix4).makeTranslation(m.x,m.y,m.z)),this.origin=new $3Dmol.Vector3(0,0,0),this.unit=new $3Dmol.Vector3(1,1,1);c.splice(0,1);c=c.join(" "); c=c.replace(/^\s+/,"");c=c.split(/[\s\r]+/);c.splice(d*n*q+1);c=new Float32Array(c);for(b=0;b b.length)){var c=b[2].replace(/^\s+/,"").replace(/\s+/g," ").split(" "),d=parseFloat(c[0]),l=Math.abs(d),g=this.origin=new $3Dmol.Vector3(parseFloat(c[1]),parseFloat(c[2]),parseFloat(c[3])),c=b[3].replace(/^\s+/,"").replace(/\s+/g," ").split(" "),w=0 d&&g++;b=b.splice(l+g).join(" ");b=b.replace(/^\s+/,"");b=b.split(/[\s\r]+/);this.data=new Float32Array(b)}}; $3Dmol.VolumeData.prototype.ccp4=function(b){var c,d,l,g,w,q,n,m,B,u,y,s,f,p,h,F,M,x,e,H,t,C,z,I,K;b=new Int8Array(b);C=new Int32Array(b.buffer,0,56);var J=new Float32Array(b.buffer,0,56);d=new DataView(b.buffer);String.fromCharCode(d.getUint8(208),d.getUint8(209),d.getUint8(210),d.getUint8(211));c=[d.getUint8(212),d.getUint8(213)];if(17===c[0]&&17===c[1])for(c=b.byteLength,g=0;g c)self.atomData=b.atoms,self.volume=b.volume,self.ps=new ProteinSurface;else{var d=self.ps;d.initparm(b.expandedExtent,1==c?!1:!0,self.volume);d.fillvoxels(self.atomData,b.extendedAtoms);d.buildboundary();if(4===c||2===c)d.fastdistancemap(),d.boundingatom(!1),d.fillvoxelswaals(self.atomData,b.extendedAtoms);d.marchingcube(c);b=d.getFacesAndVertices(b.atomsToShow);self.postMessage(b)}}}.toString().replace(/(^.*?\{|\}$)/g, "");$3Dmol.workerString+="; var ProteinSurface="+$3Dmol.ProteinSurface.toString().replace(/[a-zA-Z_$]{1}[0-9a-zA-Z_$]*.MarchingCube./g,"MarchingCube.");$3Dmol.workerString+=",MarchingCube=("+$3Dmol.MarchingCubeInitializer.toString()+")();";$3Dmol.SurfaceWorker=window.URL?window.URL.createObjectURL(new Blob([$3Dmol.workerString],{type:"text/javascript"})):{postMessage:function(){}};$3Dmol.workerString=$3Dmol.workerString;$3Dmol.SurfaceWorker=$3Dmol.SurfaceWorker;