var aa;var ba=0xdeadbeefcafe;var ca=((ba&0xffffff)==0xefcafe);function da(a,b,c){if(a!=null)if("number"==typeof a)this.fromNumber(a,b,c);else if(b==null&&"string"!=typeof a)this.fromString(a,256);else this.fromString(a,b);}function ea(){return new da(null);}function fa(i,x,w,j,c,n){while(--n>=0){var v=x*this[i++]+w[j]+c;c=Math.floor(v/0x4000000);w[j++]=v&0x3ffffff;}return c;}function ga(i,x,w,j,c,n){var ha=x&0x7fff,ia=x>>15;while(--n>=0){var l=this[i]&0x7fff;var h=this[i++]>>15;var m=ia*l+h*ha;l=ha*l+((m&0x7fff)<<15)+w[j]+(c&0x3fffffff);c=(l>>>30)+(m>>>15)+ia*h+(c>>>30);w[j++]=l&0x3fffffff;}return c;}function ja(i,x,w,j,c,n){var ha=x&0x3fff,ia=x>>14;while(--n>=0){var l=this[i]&0x3fff;var h=this[i++]>>14;var m=ia*l+h*ha;l=ha*l+((m&0x3fff)<<14)+w[j]+c;c=(l>>28)+(m>>14)+ia*h;w[j++]=l&0xfffffff;}return c;}if(ca&&(navigator.appName=="Microsoft Internet Explorer")){da.prototype.am=ga;aa=30;}else if(ca&&(navigator.appName!="Netscape")){da.prototype.am=fa;aa=26;}else{da.prototype.am=ja;aa=28;}da.prototype.DB=aa;da.prototype.DM=((1<<aa)-1);da.prototype.DV=(1<<aa);var ka=52;da.prototype.FV=Math.pow(2,ka);da.prototype.F1=ka-aa;da.prototype.F2=2*aa-ka;var la="0123456789abcdefghijklmnopqrstuvwxyz";var ma=new Array();var na,oa;na="0".charCodeAt(0);for(oa=0;oa<=9;++oa)ma[na++]=oa;na="a".charCodeAt(0);for(oa=10;oa<36;++oa)ma[na++]=oa;na="A".charCodeAt(0);for(oa=10;oa<36;++oa)ma[na++]=oa;function pa(n){return la.charAt(n);}function qa(s,i){var c=ma[s.charCodeAt(i)];return(c==null)?-1:c;}function ra(r){for(var i=this.t-1;i>=0;--i)r[i]=this[i];r.t=this.t;r.s=this.s;}function sa(x){this.t=1;this.s=(x<0)?-1:0;if(x>0)this[0]=x;else if(x<-1)this[0]=x+ta;else this.t=0;}function ua(i){var r=ea();r.fromInt(i);return r;}function va(s,b){var k;if(b==16)k=4;else if(b==8)k=3;else if(b==256)k=8;else if(b==2)k=1;else if(b==32)k=5;else if(b==4)k=2;else{this.fromRadix(s,b);return;}this.t=0;this.s=0;var i=s.length,wa=false,xa=0;while(--i>=0){var x=(k==8)?s[i]&0xff:qa(s,i);if(x<0){if(s.charAt(i)=="-")wa=true;continue;}wa=false;if(xa==0)this[this.t++]=x;else if(xa+k>this.DB){this[this.t-1]|=(x&((1<<(this.DB-xa))-1))<<xa;this[this.t++]=(x>>(this.DB-xa));}else this[this.t-1]|=x<<xa;xa+=k;if(xa>=this.DB)xa-=this.DB;}if(k==8&&(s[0]&0x80)!=0){this.s=-1;if(xa>0)this[this.t-1]|=((1<<(this.DB-xa))-1)<<xa;}this.clamp();if(wa)da.ZERO.subTo(this,this);}function ya(){var c=this.s&this.DM;while(this.t>0&&this[this.t-1]==c)--this.t;}function za(b){if(this.s<0)return"-"+this.negate().toString(b);var k;if(b==16)k=4;else if(b==8)k=3;else if(b==2)k=1;else if(b==32)k=5;else if(b==4)k=2;else return this.toRadix(b);var Aa=(1<<k)-1,d,m=false,r="",i=this.t;var p=this.DB-(i*this.DB)%k;if(i-->0){if(p<this.DB&&(d=this[i]>>p)>0){m=true;r=pa(d);}while(i>=0){if(p<k){d=(this[i]&((1<<p)-1))<<(k-p);d|=this[--i]>>(p+=this.DB-k);}else{d=(this[i]>>(p-=k))&Aa;if(p<=0){p+=this.DB;--i;}}if(d>0)m=true;if(m)r+=pa(d);}}return m?r:"0";}function Ba(){var r=ea();da.ZERO.subTo(this,r);return r;}function Ca(){return(this.s<0)?this.negate():this;}function Da(a){var r=this.s-a.s;if(r!=0)return r;var i=this.t;r=i-a.t;if(r!=0)return r;while(--i>=0)if((r=this[i]-a[i])!=0)return r;return 0;}function Ea(x){var r=1,t;if((t=x>>>16)!=0){x=t;r+=16;}if((t=x>>8)!=0){x=t;r+=8;}if((t=x>>4)!=0){x=t;r+=4;}if((t=x>>2)!=0){x=t;r+=2;}if((t=x>>1)!=0){x=t;r+=1;}return r;}function Fa(){if(this.t<=0)return 0;return this.DB*(this.t-1)+Ea(this[this.t-1]^(this.s&this.DM));}function Ga(n,r){var i;for(i=this.t-1;i>=0;--i)r[i+n]=this[i];for(i=n-1;i>=0;--i)r[i]=0;r.t=this.t+n;r.s=this.s;}function Ha(n,r){for(var i=n;i<this.t;++i)r[i-n]=this[i];r.t=Math.max(this.t-n,0);r.s=this.s;}function Ia(n,r){var Ja=n%this.DB;var Ka=this.DB-Ja;var La=(1<<Ka)-1;var Ma=Math.floor(n/this.DB),c=(this.s<<Ja)&this.DM,i;for(i=this.t-1;i>=0;--i){r[i+Ma+1]=(this[i]>>Ka)|c;c=(this[i]&La)<<Ja;}for(i=Ma-1;i>=0;--i)r[i]=0;r[Ma]=c;r.t=this.t+Ma+1;r.s=this.s;r.clamp();}function Na(n,r){r.s=this.s;var Ma=Math.floor(n/this.DB);if(Ma>=this.t){r.t=0;return;}var Ja=n%this.DB;var Ka=this.DB-Ja;var La=(1<<Ja)-1;r[0]=this[Ma]>>Ja;for(var i=Ma+1;i<this.t;++i){r[i-Ma-1]|=(this[i]&La)<<Ka;r[i-Ma]=this[i]>>Ja;}if(Ja>0)r[this.t-Ma-1]|=(this.s&La)<<Ka;r.t=this.t-Ma;r.clamp();}function Oa(a,r){var i=0,c=0,m=Math.min(a.t,this.t);while(i<m){c+=this[i]-a[i];r[i++]=c&this.DM;c>>=this.DB;}if(a.t<this.t){c-=a.s;while(i<this.t){c+=this[i];r[i++]=c&this.DM;c>>=this.DB;}c+=this.s;}else{c+=this.s;while(i<a.t){c-=a[i];r[i++]=c&this.DM;c>>=this.DB;}c-=a.s;}r.s=(c<0)?-1:0;if(c<-1)r[i++]=this.DV+c;else if(c>0)r[i++]=c;r.t=i;r.clamp();}function Pa(a,r){var x=this.abs(),y=a.abs();var i=x.t;r.t=i+y.t;while(--i>=0)r[i]=0;for(i=0;i<y.t;++i)r[i+x.t]=x.am(0,y[i],r,i,0,x.t);r.s=0;r.clamp();if(this.s!=a.s)da.ZERO.subTo(r,r);}function Qa(r){var x=this.abs();var i=r.t=2*x.t;while(--i>=0)r[i]=0;for(i=0;i<x.t-1;++i){var c=x.am(i,x[i],r,2*i,0,1);if((r[i+x.t]+=x.am(i+1,2*x[i],r,2*i+1,c,x.t-i-1))>=x.DV){r[i+x.t]-=x.DV;r[i+x.t+1]=1;}}if(r.t>0)r[r.t-1]+=x.am(i,x[i],r,2*i,0,1);r.s=0;r.clamp();}function Ra(m,q,r){var Sa=m.abs();if(Sa.t<=0)return;var Ta=this.abs();if(Ta.t<Sa.t){if(q!=null)q.fromInt(0);if(r!=null)this.copyTo(r);return;}if(r==null)r=ea();var y=ea(),Ua=this.s,Va=m.s;var Wa=this.DB-Ea(Sa[Sa.t-1]);if(Wa>0){Sa.lShiftTo(Wa,y);Ta.lShiftTo(Wa,r);}else{Sa.copyTo(y);Ta.copyTo(r);}var Xa=y.t;var Ya=y[Xa-1];if(Ya==0)return;var Za=Ya*(1<<this.F1)+((Xa>1)?y[Xa-2]>>this.F2:0);var ab=this.FV/Za,bb=(1<<this.F1)/Za,e=1<<this.F2;var i=r.t,j=i-Xa,t=(q==null)?ea():q;y.dlShiftTo(j,t);if(r.compareTo(t)>=0){r[r.t++]=1;r.subTo(t,r);}da.ONE.dlShiftTo(Xa,t);t.subTo(y,y);while(y.t<Xa)y[y.t++]=0;while(--j>=0){var cb=(r[--i]==Ya)?this.DM:Math.floor(r[i]*ab+(r[i-1]+e)*bb);if((r[i]+=y.am(0,cb,r,j,0,Xa))<cb){y.dlShiftTo(j,t);r.subTo(t,r);while(r[i]<--cb)r.subTo(t,r);}}if(q!=null){r.drShiftTo(Xa,q);if(Ua!=Va)da.ZERO.subTo(q,q);}r.t=Xa;r.clamp();if(Wa>0)r.rShiftTo(Wa,r);if(Ua<0)da.ZERO.subTo(r,r);}function db(a){var r=ea();this.abs().divRemTo(a,null,r);if(this.s<0&&r.compareTo(da.ZERO)>0)a.subTo(r,r);return r;}function eb(m){this.m=m;}function fb(x){if(x.s<0||x.compareTo(this.m)>=0)return x.mod(this.m);else return x;}function gb(x){return x;}function hb(x){x.divRemTo(this.m,null,x);}function ib(x,y,r){x.multiplyTo(y,r);this.reduce(r);}function jb(x,r){x.squareTo(r);this.reduce(r);}eb.prototype.convert=fb;eb.prototype.revert=gb;eb.prototype.reduce=hb;eb.prototype.mulTo=ib;eb.prototype.sqrTo=jb;function kb(){if(this.t<1)return 0;var x=this[0];if((x&1)==0)return 0;var y=x&3;y=(y*(2-(x&0xf)*y))&0xf;y=(y*(2-(x&0xff)*y))&0xff;y=(y*(2-(((x&0xffff)*y)&0xffff)))&0xffff;y=(y*(2-x*y%this.DV))%this.DV;return(y>0)?this.DV-y:-y;}function lb(m){this.m=m;this.mp=m.invDigit();this.mpl=this.mp&0x7fff;this.mph=this.mp>>15;this.um=(1<<(m.DB-15))-1;this.mt2=2*m.t;}function mb(x){var r=ea();x.abs().dlShiftTo(this.m.t,r);r.divRemTo(this.m,null,r);if(x.s<0&&r.compareTo(da.ZERO)>0)this.m.subTo(r,r);return r;}function nb(x){var r=ea();x.copyTo(r);this.reduce(r);return r;}function ob(x){while(x.t<=this.mt2)x[x.t++]=0;for(var i=0;i<this.m.t;++i){var j=x[i]&0x7fff;var pb=(j*this.mpl+(((j*this.mph+(x[i]>>15)*this.mpl)&this.um)<<15))&x.DM;j=i+this.m.t;x[j]+=this.m.am(0,pb,x,i,0,this.m.t);while(x[j]>=x.DV){x[j]-=x.DV;x[++j]++;}}x.clamp();x.drShiftTo(this.m.t,x);if(x.compareTo(this.m)>=0)x.subTo(this.m,x);}function qb(x,r){x.squareTo(r);this.reduce(r);}function rb(x,y,r){x.multiplyTo(y,r);this.reduce(r);}lb.prototype.convert=mb;lb.prototype.revert=nb;lb.prototype.reduce=ob;lb.prototype.mulTo=rb;lb.prototype.sqrTo=qb;function sb(){return((this.t>0)?(this[0]&1):this.s)==0;}function tb(e,z){if(e>0xffffffff||e<1)return da.ONE;var r=ea(),ub=ea(),g=z.convert(this),i=Ea(e)-1;g.copyTo(r);while(--i>=0){z.sqrTo(r,ub);if((e&(1<<i))>0)z.mulTo(ub,g,r);else{var t=r;r=ub;ub=t;}}return z.revert(r);}function vb(e,m){var z;if(e<256||m.isEven())z=new eb(m);else z=new lb(m);return this.exp(e,z);}da.prototype.copyTo=ra;da.prototype.fromInt=sa;da.prototype.fromString=va;da.prototype.clamp=ya;da.prototype.dlShiftTo=Ga;da.prototype.drShiftTo=Ha;da.prototype.lShiftTo=Ia;da.prototype.rShiftTo=Na;da.prototype.subTo=Oa;da.prototype.multiplyTo=Pa;da.prototype.squareTo=Qa;da.prototype.divRemTo=Ra;da.prototype.invDigit=kb;da.prototype.isEven=sb;da.prototype.exp=tb;da.prototype.toString=za;da.prototype.negate=Ba;da.prototype.abs=Ca;da.prototype.compareTo=Da;da.prototype.bitLength=Fa;da.prototype.mod=db;da.prototype.modPowInt=vb;da.ZERO=ua(0);da.ONE=ua(1);function wb(){var r=ea();this.copyTo(r);return r;}function xb(){if(this.s<0){if(this.t==1)return this[0]-this.DV;else if(this.t==0)return-1;}else if(this.t==1)return this[0];else if(this.t==0)return 0;return((this[1]&((1<<(32-this.DB))-1))<<this.DB)|this[0];}function yb(){return(this.t==0)?this.s:(this[0]<<24)>>24;}function zb(){return(this.t==0)?this.s:(this[0]<<16)>>16;}function Ab(r){return Math.floor(Math.LN2*this.DB/Math.log(r));}function Bb(){if(this.s<0)return-1;else if(this.t<=0||(this.t==1&&this[0]<=0))return 0;else return 1;}function Cb(b){if(b==null)b=10;if(this.signum()==0||b<2||b>36)return"0";var Db=this.chunkSize(b);var a=Math.pow(b,Db);var d=ua(a),y=ea(),z=ea(),r="";this.divRemTo(d,y,z);while(y.signum()>0){r=(a+z.intValue()).toString(b).substr(1)+r;y.divRemTo(d,y,z);}return z.intValue().toString(b)+r;}function Eb(s,b){this.fromInt(0);if(b==null)b=10;var Db=this.chunkSize(b);var d=Math.pow(b,Db),wa=false,j=0,w=0;for(var i=0;i<s.length;++i){var x=qa(s,i);if(x<0){if(s.charAt(i)=="-"&&this.signum()==0)wa=true;continue;}w=b*w+x;if(++j>=Db){this.dMultiply(d);this.dAddOffset(w,0);j=0;w=0;}}if(j>0){this.dMultiply(Math.pow(b,j));this.dAddOffset(w,0);}if(wa)da.ZERO.subTo(this,this);}function Fb(a,b,c){if("number"==typeof b){if(a<2)this.fromInt(1);else{this.fromNumber(a,c);if(!this.testBit(a-1))this.bitwiseTo(da.ONE.shiftLeft(a-1),Gb,this);if(this.isEven())this.dAddOffset(1,0);while(!this.isProbablePrime(b)){this.dAddOffset(2,0);if(this.bitLength()>a)this.subTo(da.ONE.shiftLeft(a-1),this);}}}else{var x=new Array(),t=a&7;x.length=(a>>3)+1;b.nextBytes(x);if(t>0)x[0]&=((1<<t)-1);else x[0]=0;this.fromString(x,256);}}function Hb(){var i=this.t,r=new Array();r[0]=this.s;var p=this.DB-(i*this.DB)%8,d,k=0;if(i-->0){if(p<this.DB&&(d=this[i]>>p)!=(this.s&this.DM)>>p)r[k++]=d|(this.s<<(this.DB-p));while(i>=0){if(p<8){d=(this[i]&((1<<p)-1))<<(8-p);d|=this[--i]>>(p+=this.DB-8);}else{d=(this[i]>>(p-=8))&0xff;if(p<=0){p+=this.DB;--i;}}if((d&0x80)!=0)d|=-256;if(k==0&&(this.s&0x80)!=(d&0x80))++k;if(k>0||d!=this.s)r[k++]=d;}}return r;}function Ib(a){return(this.compareTo(a)==0);}function Jb(a){return(this.compareTo(a)<0)?this:a;}function Kb(a){return(this.compareTo(a)>0)?this:a;}function Lb(a,Mb,r){var i,f,m=Math.min(a.t,this.t);for(i=0;i<m;++i)r[i]=Mb(this[i],a[i]);if(a.t<this.t){f=a.s&this.DM;for(i=m;i<this.t;++i)r[i]=Mb(this[i],f);r.t=this.t;}else{f=this.s&this.DM;for(i=m;i<a.t;++i)r[i]=Mb(f,a[i]);r.t=a.t;}r.s=Mb(this.s,a.s);r.clamp();}function Nb(x,y){return x&y;}function Ob(a){var r=ea();this.bitwiseTo(a,Nb,r);return r;}function Gb(x,y){return x|y;}function Pb(a){var r=ea();this.bitwiseTo(a,Gb,r);return r;}function Qb(x,y){return x^y;}function Rb(a){var r=ea();this.bitwiseTo(a,Qb,r);return r;}function Sb(x,y){return x&~y;}function Tb(a){var r=ea();this.bitwiseTo(a,Sb,r);return r;}function Ub(){var r=ea();for(var i=0;i<this.t;++i)r[i]=this.DM&~this[i];r.t=this.t;r.s=~this.s;return r;}function Vb(n){var r=ea();if(n<0)this.rShiftTo(-n,r);else this.lShiftTo(n,r);return r;}function Wb(n){var r=ea();if(n<0)this.lShiftTo(-n,r);else this.rShiftTo(n,r);return r;}function Xb(x){if(x==0)return-1;var r=0;if((x&0xffff)==0){x>>=16;r+=16;}if((x&0xff)==0){x>>=8;r+=8;}if((x&0xf)==0){x>>=4;r+=4;}if((x&3)==0){x>>=2;r+=2;}if((x&1)==0)++r;return r;}function Yb(){for(var i=0;i<this.t;++i)if(this[i]!=0)return i*this.DB+Xb(this[i]);if(this.s<0)return this.t*this.DB;return-1;}function Zb(x){var r=0;while(x!=0){x&=x-1;++r;}return r;}function ac(){var r=0,x=this.s&this.DM;for(var i=0;i<this.t;++i)r+=Zb(this[i]^x);return r;}function bc(n){var j=Math.floor(n/this.DB);if(j>=this.t)return(this.s!=0);return((this[j]&(1<<(n%this.DB)))!=0);}function cc(n,Mb){var r=da.ONE.shiftLeft(n);this.bitwiseTo(r,Mb,r);return r;}function dc(n){return this.changeBit(n,Gb);}function ec(n){return this.changeBit(n,Sb);}function fc(n){return this.changeBit(n,Qb);}function gc(a,r){var i=0,c=0,m=Math.min(a.t,this.t);while(i<m){c+=this[i]+a[i];r[i++]=c&this.DM;c>>=this.DB;}if(a.t<this.t){c+=a.s;while(i<this.t){c+=this[i];r[i++]=c&this.DM;c>>=this.DB;}c+=this.s;}else{c+=this.s;while(i<a.t){c+=a[i];r[i++]=c&this.DM;c>>=this.DB;}c+=a.s;}r.s=(c<0)?-1:0;if(c>0)r[i++]=c;else if(c<-1)r[i++]=this.DV+c;r.t=i;r.clamp();}function hc(a){var r=ea();this.addTo(a,r);return r;}function ic(a){var r=ea();this.subTo(a,r);return r;}function jc(a){var r=ea();this.multiplyTo(a,r);return r;}function kc(a){var r=ea();this.divRemTo(a,r,null);return r;}function lc(a){var r=ea();this.divRemTo(a,null,r);return r;}function mc(a){var q=ea(),r=ea();this.divRemTo(a,q,r);return new Array(q,r);}function nc(n){this[this.t]=this.am(0,n-1,this,0,0,this.t);++this.t;this.clamp();}function oc(n,w){while(this.t<=w)this[this.t++]=0;this[w]+=n;while(this[w]>=this.DV){this[w]-=this.DV;if(++w>=this.t)this[this.t++]=0;++this[w];}}function pc(){}function qc(x){return x;}function rc(x,y,r){x.multiplyTo(y,r);}function sc(x,r){x.squareTo(r);}pc.prototype.convert=qc;pc.prototype.revert=qc;pc.prototype.mulTo=rc;pc.prototype.sqrTo=sc;function tc(e){return this.exp(e,new pc());}function uc(a,n,r){var i=Math.min(this.t+a.t,n);r.s=0;r.t=i;while(i>0)r[--i]=0;var j;for(j=r.t-this.t;i<j;++i)r[i+this.t]=this.am(0,a[i],r,i,0,this.t);for(j=Math.min(a.t,n);i<j;++i)this.am(0,a[i],r,i,0,n-i);r.clamp();}function vc(a,n,r){--n;var i=r.t=this.t+a.t-n;r.s=0;while(--i>=0)r[i]=0;for(i=Math.max(n-this.t,0);i<a.t;++i)r[this.t+i-n]=this.am(n-i,a[i],r,0,0,this.t+i-n);r.clamp();r.drShiftTo(1,r);}function wc(m){this.r2=ea();this.q3=ea();da.ONE.dlShiftTo(2*m.t,this.r2);this.mu=this.r2.divide(m);this.m=m;}function xc(x){if(x.s<0||x.t>2*this.m.t)return x.mod(this.m);else if(x.compareTo(this.m)<0)return x;else{var r=ea();x.copyTo(r);this.reduce(r);return r;}}function yc(x){return x;}function zc(x){x.drShiftTo(this.m.t-1,this.r2);if(x.t>this.m.t+1){x.t=this.m.t+1;x.clamp();}this.mu.multiplyUpperTo(this.r2,this.m.t+1,this.q3);this.m.multiplyLowerTo(this.q3,this.m.t+1,this.r2);while(x.compareTo(this.r2)<0)x.dAddOffset(1,this.m.t+1);x.subTo(this.r2,x);while(x.compareTo(this.m)>=0)x.subTo(this.m,x);}function Ac(x,r){x.squareTo(r);this.reduce(r);}function Bc(x,y,r){x.multiplyTo(y,r);this.reduce(r);}wc.prototype.convert=xc;wc.prototype.revert=yc;wc.prototype.reduce=zc;wc.prototype.mulTo=Bc;wc.prototype.sqrTo=Ac;function Cc(e,m){var i=e.bitLength(),k,r=ua(1),z;if(i<=0)return r;else if(i<18)k=1;else if(i<48)k=3;else if(i<144)k=4;else if(i<768)k=5;else k=6;if(i<8)z=new eb(m);else if(m.isEven())z=new wc(m);else z=new lb(m);var g=new Array(),n=3,Dc=k-1,Aa=(1<<k)-1;g[1]=z.convert(this);if(k>1){var Ec=ea();z.sqrTo(g[1],Ec);while(n<=Aa){g[n]=ea();z.mulTo(Ec,g[n-2],g[n]);n+=2;}}var j=e.t-1,w,Fc=true,ub=ea(),t;i=Ea(e[j])-1;while(j>=0){if(i>=Dc)w=(e[j]>>(i-Dc))&Aa;else{w=(e[j]&((1<<(i+1))-1))<<(Dc-i);if(j>0)w|=e[j-1]>>(this.DB+i-Dc);}n=k;while((w&1)==0){w>>=1;--n;}if((i-=n)<0){i+=this.DB;--j;}if(Fc){g[w].copyTo(r);Fc=false;}else{while(n>1){z.sqrTo(r,ub);z.sqrTo(ub,r);n-=2;}if(n>0)z.sqrTo(r,ub);else{t=r;r=ub;ub=t;}z.mulTo(ub,g[w],r);}while(j>=0&&(e[j]&(1<<i))==0){z.sqrTo(r,ub);t=r;r=ub;ub=t;if(--i<0){i=this.DB-1;--j;}}}return z.revert(r);}function Gc(a){var x=(this.s<0)?this.negate():this.clone();var y=(a.s<0)?a.negate():a.clone();if(x.compareTo(y)<0){var t=x;x=y;y=t;}var i=x.getLowestSetBit(),g=y.getLowestSetBit();if(g<0)return x;if(i<g)g=i;if(g>0){x.rShiftTo(g,x);y.rShiftTo(g,y);}while(x.signum()>0){if((i=x.getLowestSetBit())>0)x.rShiftTo(i,x);if((i=y.getLowestSetBit())>0)y.rShiftTo(i,y);if(x.compareTo(y)>=0){x.subTo(y,x);x.rShiftTo(1,x);}else{y.subTo(x,y);y.rShiftTo(1,y);}}if(g>0)y.lShiftTo(g,y);return y;}function Hc(n){if(n<=0)return 0;var d=this.DV%n,r=(this.s<0)?n-1:0;if(this.t>0)if(d==0)r=this[0]%n;else for(var i=this.t-1;i>=0;--i)r=(d*r+this[i])%n;return r;}function Ic(m){var Jc=m.isEven();if((this.isEven()&&Jc)||m.signum()==0)return da.ZERO;var u=m.clone(),v=this.clone();var a=ua(1),b=ua(0),c=ua(0),d=ua(1);while(u.signum()!=0){while(u.isEven()){u.rShiftTo(1,u);if(Jc){if(!a.isEven()||!b.isEven()){a.addTo(this,a);b.subTo(m,b);}a.rShiftTo(1,a);}else if(!b.isEven())b.subTo(m,b);b.rShiftTo(1,b);}while(v.isEven()){v.rShiftTo(1,v);if(Jc){if(!c.isEven()||!d.isEven()){c.addTo(this,c);d.subTo(m,d);}c.rShiftTo(1,c);}else if(!d.isEven())d.subTo(m,d);d.rShiftTo(1,d);}if(u.compareTo(v)>=0){u.subTo(v,u);if(Jc)a.subTo(c,a);b.subTo(d,b);}else{v.subTo(u,v);if(Jc)c.subTo(a,c);d.subTo(b,d);}}if(v.compareTo(da.ONE)!=0)return da.ZERO;if(d.compareTo(m)>=0)return d.subtract(m);if(d.signum()<0)d.addTo(m,d);else return d;if(d.signum()<0)return d.add(m);else return d;}var Kc=[2,3,5,7,11,13,17,19,23,29,31,37,41,43,47,53,59,61,67,71,73,79,83,89,97,101,103,107,109,113,127,131,137,139,149,151,157,163,167,173,179,181,191,193,197,199,211,223,227,229,233,239,241,251,257,263,269,271,277,281,283,293,307,311,313,317,331,337,347,349,353,359,367,373,379,383,389,397,401,409,419,421,431,433,439,443,449,457,461,463,467,479,487,491,499,503,509];var Lc=(1<<26)/Kc[Kc.length-1];function Mc(t){var i,x=this.abs();if(x.t==1&&x[0]<=Kc[Kc.length-1]){for(i=0;i<Kc.length;++i)if(x[0]==Kc[i])return true;return false;}if(x.isEven())return false;i=1;while(i<Kc.length){var m=Kc[i],j=i+1;while(j<Kc.length&&m<Lc)m*=Kc[j++];m=x.modInt(m);while(i<j)if(m%Kc[i++]==0)return false;}return x.millerRabin(t);}function Nc(t){var Oc=this.subtract(da.ONE);var k=Oc.getLowestSetBit();if(k<=0)return false;var r=Oc.shiftRight(k);t=(t+1)>>1;if(t>Kc.length)t=Kc.length;var a=ea();for(var i=0;i<t;++i){a.fromInt(Kc[i]);var y=a.modPow(r,this);if(y.compareTo(da.ONE)!=0&&y.compareTo(Oc)!=0){var j=1;while(j++<k&&y.compareTo(Oc)!=0){y=y.modPowInt(2,this);if(y.compareTo(da.ONE)==0)return false;}if(y.compareTo(Oc)!=0)return false;}}return true;}da.prototype.chunkSize=Ab;da.prototype.toRadix=Cb;da.prototype.fromRadix=Eb;da.prototype.fromNumber=Fb;da.prototype.bitwiseTo=Lb;da.prototype.changeBit=cc;da.prototype.addTo=gc;da.prototype.dMultiply=nc;da.prototype.dAddOffset=oc;da.prototype.multiplyLowerTo=uc;da.prototype.multiplyUpperTo=vc;da.prototype.modInt=Hc;da.prototype.millerRabin=Nc;da.prototype.clone=wb;da.prototype.intValue=xb;da.prototype.byteValue=yb;da.prototype.shortValue=zb;da.prototype.signum=Bb;da.prototype.toByteArray=Hb;da.prototype.equals=Ib;da.prototype.min=Jb;da.prototype.max=Kb;da.prototype.and=Ob;da.prototype.or=Pb;da.prototype.xor=Rb;da.prototype.andNot=Tb;da.prototype.not=Ub;da.prototype.shiftLeft=Vb;da.prototype.shiftRight=Wb;da.prototype.getLowestSetBit=Yb;da.prototype.bitCount=ac;da.prototype.testBit=bc;da.prototype.setBit=dc;da.prototype.clearBit=ec;da.prototype.flipBit=fc;da.prototype.add=hc;da.prototype.subtract=ic;da.prototype.multiply=jc;da.prototype.divide=kc;da.prototype.remainder=lc;da.prototype.divideAndRemainder=mc;da.prototype.modPow=Cc;da.prototype.modInverse=Ic;da.prototype.pow=tc;da.prototype.gcd=Gc;da.prototype.isProbablePrime=Mc;var Pc=0;var Qc=1;var Rc=2;var Sc=3;var Tc=4;var Uc=5;var Vc=6;var Wc=7;var Xc=8;var Yc=9;var Zc=["int","frac","float","complex","poly","rfrac","ser","array","function","string"];var COUT_MODE_FRAC=0;var COUT_MODE_REAL=1;var COUT_MODE_HEXA=2;var ad=1;var bd=2;var cd=3;var dd=4;var ed=5;var fd=6;var gd=7;var hd=8;var id=9;var jd=10;var kd=11;var ld=12;var md=13;var nd=14;var od=15;var pd=16;var qd=17;var rd=["invalid type(s)","division by zero","argument of zero","log of zero","invalid array number of dimensions","invalid subscript ranges","invalid matrix size","could not find roots","invalid number of arguments","the modulo must be positive","the factor argument must be >= 2","the exponent must be positive","the parameter of O() must be X^n","when composing two power series, the input must have no constant term","power serie with negative exponent forbidden here","integration would yield a log","cannot give a power expansion of log at this point"];function sd(a){var v;v=new Object();v.type=Pc;v.val=a;return v;}function td(a){return sd(new da(a+"",10));}var ud=sd(da.ZERO);var vd=sd(da.ONE);var wd=td(-1);var xd=new Array(0);var yd=COUT_MODE_FRAC;var zd=new Array(0);var Ad=1.0;var Bd,Cd,Dd;function Ed(Fd){Dd=Fd;Fd--;if(Fd<0||Fd>=rd.length){Gd("unknown error",Bd,Cd);}else{Gd(rd[Fd],Bd,Cd);}}function Hd(Id){return(Id.type==Pc&&Id.val.compareTo(da.ONE)==0);}function Jd(Id){return(Id.type==Pc&&Id.val.compareTo(wd.val)==0);}function Kd(Ld,Md){return sd(new da(Ld,Md));}function Nd(Id,Md){return Id.val.toString(Md);}function Od(Id,Pd){return sd(Id.val.add(Pd.val));}function Qd(Id,Pd){return sd(Id.val.subtract(Pd.val));}function Rd(Id){return sd(Id.val.negate());}function Sd(Id){return sd(Id.val.abs());}function Td(Id,Pd){return sd(Id.val.multiply(Pd.val));}function Ud(Id,Pd){return sd(Id.val.divide(Pd.val));}function Vd(Id,Pd){var r,b;b=Pd.val;if(b.signum()>=0){if(Id.val.signum()>=0){r=Id.val.remainder(b);}else{r=Id.val.negate();r=r.remainder(b);if(r.signum()!=0){r=b.subtract(r);}}}else{b=b.negate();if(Id.val.signum()>=0){r=Id.val.remainder(b);if(r.signum()!=0){r=b.subtract(r);}}else{r=Id.val.negate();r=r.remainder(b);r=r.negate();}}return sd(r);}function Wd(Id,Pd){return sd(Id.val.pow(Pd.val));}function Xd(Id,Pd){if(Id.type!=Pc||Pd.type!=Pc)Ed(ad);return sd(Id.val.gcd(Pd.val));}function Yd(Id,Pd){if(Zd(Id)>=0){return Ud(Id,Pd);}else{return Rd(Ud(Qd(Od(Rd(Id),Pd),vd),Pd));}}function ae(n){var r,i,n;n=be(n);r=vd;for(i=2;i<=n;i++){r=ce(r,td(i));}return r;}function de(Id,Pd){if(Id.type!=Pc||Pd.type!=Pc)Ed(ad);if(Zd(Pd)==0)Ed(bd);if(Zd(Pd)<0)Ed(jd);if(Zd(Id)<0)Id=Vd(Id,Pd);return sd(Id.val.modInverse(Pd.val));}function ee(Id,Pd){var t;if(Id.type!=Pc)Ed(ad);t=30;if(arguments.length>=2){t=be(Pd);if(t<=1)t=1;}if(Id.val.isProbablePrime(t))return vd;else return ud;}function fe(Id){if(Id.type!=Pc)Ed(ad);for(;;){Id=Od(Id,vd);if(Id.val.isProbablePrime(30))break;}return Id;}function ge(Id,Pd,he){if(Pd.type!=Pc)Ed(ad);if(Id.type==Pc&&he.type==Pc){if(Zd(he)==0)Ed(bd);if(Zd(he)<0)Ed(jd);if(Zd(Pd)<0){Id=de(Id,he);Pd=Rd(Pd);}return sd(Id.val.modPow(Pd.val,he.val));}else if(Id.type==Tc&&he.type==Tc){return ie(Id,Pd,he);}else{Ed(ad);}}function je(Id){var r,ke,s,d,le,me;if(Id.type!=Pc)Ed(ad);if(ne(Id,vd)<=0)Ed(kd);r=oe(0);ke=r.tab;d=td(2);while(pe(Vd(Id,d))){ke[ke.length]=d;Id=Ud(Id,d);}d=td(3);me=td(2);while(!Hd(Id)){if(!pe(ee(Id))){ke[ke.length]=Id;break;}for(;;){if(pe(Vd(Id,d)))break;d=Od(d,me);}for(;;){ke[ke.length]=d;Id=Ud(Id,d);if(!pe(Vd(Id,d)))break;}}r.dims[0]=ke.length;return r;}function qe(re,se){var r;r=new Object();r.type=Qc;r.num=re;r.den=se;return r;}function te(re,se){var r,s,g;s=se.val.signum();if(s==0){Ed(bd);}else if(s<0){re=Rd(re);se=Rd(se);}g=Xd(re,se);if(g.val.compareTo(da.ONE)!=0){re=Ud(re,g);se=Ud(se,g);}if(se.val.compareTo(da.ONE)==0){return re;}else{return qe(re,se);}return r;}function ue(Id){if(Id.type==Qc){return Id;}else if(Id.type==Pc){return qe(Id,vd);}else{Ed(ad);}}function ve(Id,Pd){Id=ue(Id);Pd=ue(Pd);return te(we(ce(Id.num,Pd.den),ce(Pd.num,Id.den)),ce(Id.den,Pd.den));}function xe(Id,Pd){Id=ue(Id);Pd=ue(Pd);return te(ye(ce(Id.num,Pd.den),ce(Pd.num,Id.den)),ce(Id.den,Pd.den));}function ze(Id,Pd){Id=ue(Id);Pd=ue(Pd);return te(ce(Id.num,Pd.num),ce(Id.den,Pd.den));}function Ae(Id,Pd){Id=ue(Id);Pd=ue(Pd);return te(ce(Id.num,Pd.den),ce(Id.den,Pd.num));}function Be(Id){return qe(Rd(Id.num),Id.den);}function Ce(Id){return qe(Sd(Id.num),Id.den);}function De(d){r=new Object();r.type=Rc;r.val=d;return r;}function Ee(Id){if(Id.type==Rc){return Id;}else if(Id.type==Pc){return De(new Number(Nd(Id,10)).valueOf());}else if(Id.type==Qc){return De(new Number(Nd(Id.num,10)).valueOf()/new Number(Nd(Id.den,10)).valueOf());}else{Ed(ad);}}function Fe(Id,Pd){Id=Ee(Id);Pd=Ee(Pd);return De(Id.val+Pd.val);}function Ge(Id,Pd){Id=Ee(Id);Pd=Ee(Pd);return De(Id.val-Pd.val);}function He(Id,Pd){Id=Ee(Id);Pd=Ee(Pd);return De(Id.val*Pd.val);}function Ie(Id,Pd){Id=Ee(Id);Pd=Ee(Pd);return De(Id.val/Pd.val);}function Je(Id){return De(-Id.val);}function Ke(Id){if(Id.val>=0)return td(Math.floor(Id.val));else return td(-Math.floor(-Id.val));}function Le(Id){return td(Math.floor(Id.val));}function Me(Id){return td(Math.ceil(Id.val));}function Ne(Id){return td(Math.round(Id.val));}function Oe(Id){var Ld;Ld=Id.val.toString();if(Ld.indexOf(".")<0&&Ld.indexOf("e")<0&&Ld.indexOf("NaN")<0&&Ld.indexOf("Inf")<0){Ld+=".0";}return Ld;}function Pe(Id){return De(Math.abs(Id.val));}function Qe(Id){Id=Ee(Id);return De(Math.sqrt(Id.val));}function Re(Id){Id=Ee(Id);return De(Math.exp(Id.val));}function Se(Id){Id=Ee(Id);return De(Math.log(Id.val));}function Te(Id){Id=Ee(Id);return De(Math.log(Id.val)/Math.LN2);}function Ue(Id){Id=Ee(Id);return De(Math.log(Id.val)/Math.LN10);}function Ve(Id,Pd){Id=Ee(Id);Pd=Ee(Pd);return De(Math.pow(Id.val,Pd.val));}function We(Id){Id=Ee(Id);return De(Math.sin(Id.val*Ad));}function Xe(Id){Id=Ee(Id);return De(Math.cos(Id.val*Ad));}function Ye(Id){Id=Ee(Id);return De(Math.tan(Id.val*Ad));}function Ze(Id){Id=Ee(Id);return De(Math.asin(Id.val)/Ad);}function af(Id){Id=Ee(Id);return De(Math.acos(Id.val)/Ad);}function bf(Id){Id=Ee(Id);return De(Math.atan(Id.val)/Ad);}function cf(Id,Pd){Id=Ee(Id);Pd=Ee(Pd);return De(Math.atan2(Id.val,Pd.val));}function df(){return De(Math.PI);}function ef(Id){var x;Id=Ee(Id);x=Id.val;if(x==0){x=1;}else{x=Math.PI*x;x=Math.sin(x)/x;}return De(x);}var ff=gf(ud,vd);function gf(hf,jf){r=new Object();r.type=Sc;r.re=hf;r.im=jf;return r;}function kf(hf,jf){if(pe(jf)){return hf;}else{return gf(hf,jf);}}function lf(Id){if(Id.type==Sc)return Id;else return gf(Id,ud);}function mf(Id,nf){if(Id.type==Wc){return of(Id,nf);}else if(Id.type==Tc){return pf(Id,nf);}else if(Id.type==Vc){return qf(Id,nf);}else if(Id.type==Sc){return gf(nf(Id.re),nf(Id.im));}else{Ed(ad);}}function rf(Id){if(Id.type<=Rc){return Id;}else if(Id.type==Sc){return Id.re;}else{return mf(Id,rf);}}function sf(Id){if(Id.type<=Rc){return ud;}else if(Id.type==Sc){return Id.im;}else{return mf(Id,sf);}}function tf(Id){var s;if(Id.type<=Rc){s=Zd(Id);if(s==0)Ed(cd);if(s<0)return df();else return ud;}else if(Id.type==Sc){return cf(Id.im,Id.re);}else{return mf(Id,tf);}}function uf(Id,Pd){Id=lf(Id);Pd=lf(Pd);return kf(we(Id.re,Pd.re),we(Id.im,Pd.im));}function vf(Id,Pd){Id=lf(Id);Pd=lf(Pd);return kf(ye(Id.re,Pd.re),ye(Id.im,Pd.im));}function wf(Id,Pd){Id=lf(Id);Pd=lf(Pd);return kf(ye(ce(Id.re,Pd.re),ce(Id.im,Pd.im)),we(ce(Id.re,Pd.im),ce(Id.im,Pd.re)));}function xf(Id){Id=lf(Id);return kf(yf(Id.re),yf(Id.im));}function zf(Id){Id=lf(Id);return kf(Id.re,yf(Id.im));}function Af(Id){Id=lf(Id);return we(ce(Id.re,Id.re),ce(Id.im,Id.im));}function Bf(Id){var c;Id=lf(Id);c=Af(Id);return gf(Cf(Id.re,c),yf(Cf(Id.im,c)));}function Df(Id,Pd){return wf(Id,Bf(Pd));}function Ef(Id){return Ff(Af(Id));}function Gf(Id){var Hf,r;Hf=Ee(Id.im);r=Re(Ee(Id.re));return gf(He(Xe(Hf),r),He(We(Hf),r));}function If(Id){var Hf,r;Id=lf(Id);Hf=cf(Ee(Id.im),Ee(Id.re));r=Ee(Ef(Id));return gf(Se(r),Hf);}function Jf(Id,Pd){return Gf(wf(If(Id),Pd));}function be(Id){if(typeof(Id)=="number"){return Id;}else if(Id.type==Pc){return Id.val.intValue();}else{Ed(ad);}}function oe(n){var n;r=new Object();r.type=Wc;r.dims=new Array(1);r.dims[0]=n;r.tab=new Array(n);for(i=0;i<n;i++){r.tab[i]=ud;}return r;}function Kf(h,w){var n;r=new Object();r.type=Wc;r.dims=new Array(2);r.dims[0]=h;r.dims[1]=w;n=h*w;r.tab=new Array(n);for(i=0;i<n;i++){r.tab[i]=ud;}return r;}function Lf(n){var r,i;n=be(n);r=Kf(n,n);for(i=0;i<n;i++){r.tab[i*n+i]=vd;}return r;}function Mf(Id){var r,n,i;if(Id.type!=Wc||Id.dims.length!=1)Ed(ad);n=Id.dims[0];r=Kf(n,n);for(i=0;i<n;i++){r.tab[i*n+i]=Id.tab[i];}return r;}function Nf(Id){var n,i,j;n=be(Id);r=Kf(n,n);for(i=0;i<n;i++){for(j=0;j<n;j++){r.tab[i*n+j]=Cf(vd,td(1+i+j));}}return r;}function Of(Id){var r,w,h,i,j;if(Id.type!=Wc)Ed(ad);if(Id.dims.length==1){r=new Object();r.type=Wc;r.dims=[1,Id.dims[0]];r.tab=Id.tab;return r;}else if(Id.dims.length==2){r=new Object();r.type=Wc;h=Id.dims[0];w=Id.dims[1];r.dims=[w,h];r.tab=new Array(w*h);for(i=0;i<h;i++){for(j=0;j<w;j++){r.tab[j*h+i]=Id.tab[i*w+j];}}return r;}else{Ed(ed);}}function Pf(Id){var r,n,i;n=Qf(Id);r=Id.tab[0];for(i=1;i<n;i++){r=we(r,Id.tab[i*n+i]);}return r;}function Rf(Id){var n,p,c,i,j,Sf;n=Qf(Id);p=Tf(n+1);p.tab[n]=vd;c=Lf(n);for(i=0;i<n;i++){c=ce(c,Id);Sf=yf(Cf(Pf(c),td(i+1)));p.tab[n-i-1]=Sf;for(j=0;j<n;j++)c.tab[j*n+j]=we(c.tab[j*n+j],Sf);}return p;}function Uf(Id){return Vf(Rf(Id));}function Wf(h,w){return Kf(be(h),be(w));}function Xf(h,w,Yf){var s;r=Kf(h.val.intValue(),w.val.intValue());n=h.val.intValue()*w.val.intValue();s=Yf.val.intValue();for(i=0;i<n;i++){r.tab[i]=td(s);s=(s*21+1)%100;}return r;}function Zf(Id){return oe(be(Id));}function ag(Id,Pd){var i;if(Id.dims.length!=Pd.dims.length)return false;for(i=0;i<Id.dims.length;i++){if(Id.dims[i]!=Pd.dims[i])return false;}return true;}function bg(Id,cg,Pd){var r,dg,i,n,eg,j,k,fg;dg=0;for(i=0;i<Id.nb_dims;i++){if(cg[2*i+1]!=-1)dg++;}if(Pd){if(Pd.dims.length!=dg)Ed(ed);r=null;}else{r=new Object();r.type=Wc;r.dims=new Array(dg);}n=1;j=0;for(i=0;i<Id.dims.length;i++){if(cg[2*i+1]!=-1){k=cg[2*i+1]-cg[2*i];n*=k;if(Pd){if(Pd.dims[j]!=k)Ed(fd);}else{r.dims[j]=k;}j++;}}if(!Pd){r.tab=new Array(n);}if(n!=0){eg=new Array(Id.dims.length);for(i=0;i<Id.dims.length;i++){eg[i]=cg[2*i];}i=0;for(;;){j=0;fg=1;k=Id.dims.length-1;for(;;){j+=fg*eg[k];if(k==0)break;fg*=Id.dims[k];k--;}if(Pd){Id.tab[j]=Pd.tab[i];}else{r.tab[i]=Id.tab[j];}if(++i==n)break;k=Id.dims.length-1;for(;;){if(cg[2*k+1]!=-1){if(++eg[k]==cg[2*k+1]){eg[k]=cg[2*k];}else{break;}}k--;}}}return r;}function of(Id,nf){var r;r=new Object();r.type=Wc;r.dims=Id.dims;n=Id.tab.length;r.tab=new Array(n);for(i=0;i<n;i++){r.tab[i]=nf(Id.tab[i]);}return r;}function gg(Id,Pd,nf){var r;if(!ag(Id,Pd))Ed(gd);r=new Object();r.type=Wc;r.dims=Id.dims;n=Id.tab.length;r.tab=new Array(n);for(i=0;i<n;i++){r.tab[i]=nf(Id.tab[i],Pd.tab[i]);}return r;}function hg(Id,Pd){var w,h,l,i,j,k,ig,jg,kg,ke,r;if(Id.dims.length!=2||Pd.dims.length>2)Ed(gd);l=Id.dims[1];if(l!=Pd.dims[0])Ed(gd);r=new Object();r.type=Wc;h=Id.dims[0];r.dims=new Array(Pd.dims.length);if(Pd.dims.length==2){w=Pd.dims[1];r.dims[0]=h;r.dims[1]=w;}else{w=1;r.dims[0]=h;}ke=new Array(w*h);r.tab=ke;jg=Id.tab;kg=Pd.tab;for(i=0;i<h;i++){for(j=0;j<w;j++){ig=ud;for(k=0;k<l;k++){ig=we(ig,ce(jg[i*l+k],kg[k*w+j]));}ke[i*w+j]=ig;}}return r;}function lg(Id,Pd){var s,i,n;if(Id.type!=Wc||Id.type!=Wc)Ed(ad);if(Id.dims.length!=1||Pd.dims.length!=1||Id.dims[0]!=Pd.dims[0])Ed(gd);n=Id.dims[0];s=ud;for(i=0;i<n;i++){s=we(s,ce(Id.tab[i],Pd.tab[i]));}return s;}function mg(Id,Pd){var r;if(Id.type!=Wc||Id.type!=Wc)Ed(ad);if(Id.dims.length!=1||Pd.dims.length!=1||Id.dims[0]!=Pd.dims[0]||Id.dims[0]!=3)Ed(gd);r=oe(3);r.tab[0]=ye(ce(Id.tab[1],Pd.tab[2]),ce(Id.tab[2],Pd.tab[1]));r.tab[1]=ye(ce(Id.tab[2],Pd.tab[0]),ce(Id.tab[0],Pd.tab[2]));r.tab[2]=ye(ce(Id.tab[0],Pd.tab[1]),ce(Id.tab[1],Pd.tab[0]));return r;}function Qf(Id){if(Id.dims.length!=2||Id.dims[0]!=Id.dims[1])Ed(gd);return Id.dims[0];}function ng(Id){var n,og,i,j,k,s,pg,v;n=Qf(Id);s=1;og=n*n;pg=new Array(og);for(i=0;i<og;i++)pg[i]=Id.tab[i];for(i=0;i<n;i++){for(j=i;j<n;j++){if(!pe(pg[j*n+i]))break;}if(j==n)return ud;if(j!=i){for(k=0;k<n;k++){v=pg[j*n+k];pg[j*n+k]=pg[i*n+k];pg[i*n+k]=v;}s=-s;}c=qg(pg[i*n+i]);for(j=i+1;j<n;j++){v=ce(c,pg[j*n+i]);for(k=0;k<n;k++){pg[j*n+k]=ye(pg[j*n+k],ce(pg[i*n+k],v));}}}c=td(s);for(i=0;i<n;i++)c=ce(c,pg[i*n+i]);return c;}function rg(Id){var n,sg,pg,i,j,k,og,r,c,v;n=Qf(Id);og=n*n;pg=new Array(og);for(i=0;i<og;i++)pg[i]=Id.tab[i];r=Lf(n);sg=r.tab;for(i=0;i<n;i++){for(j=i;j<n;j++){if(!pe(pg[j*n+i]))break;}if(j==n)Ed(bd);if(j!=i){for(k=0;k<n;k++){v=pg[j*n+k];pg[j*n+k]=pg[i*n+k];pg[i*n+k]=v;}for(k=0;k<n;k++){v=sg[j*n+k];sg[j*n+k]=sg[i*n+k];sg[i*n+k]=v;}}c=qg(pg[i*n+i]);for(k=0;k<n;k++){pg[i*n+k]=ce(pg[i*n+k],c);sg[i*n+k]=ce(sg[i*n+k],c);}for(j=0;j<n;j++){if(j!=i){c=pg[j*n+i];for(k=i;k<n;k++){pg[j*n+k]=ye(pg[j*n+k],ce(pg[i*n+k],c));}for(k=0;k<n;k++){sg[j*n+k]=ye(sg[j*n+k],ce(sg[i*n+k],c));}}}}return r;}function tg(Id){var pg,i,j,k,w,h,l;if(Id.dims.length!=2)Ed(gd);h=Id.dims[0];w=Id.dims[1];l=w*h;pg=new Array(l);for(i=0;i<l;i++)pg[i]=Id.tab[i];l=0;for(i=0;i<w;i++){for(j=l;j<h;j++){if(!pe(pg[j*w+i]))break;}if(j==h)continue;if(j!=l){for(k=0;k<w;k++){v=pg[j*w+k];pg[j*w+k]=pg[l*w+k];pg[l*w+k]=v;}}c=qg(pg[l*w+i]);for(k=0;k<w;k++){pg[l*w+k]=ce(pg[l*w+k],c);}for(j=l+1;j<h;j++){c=pg[j*w+i];for(k=i;k<w;k++){pg[j*w+k]=ye(pg[j*w+k],ce(pg[l*w+k],c));}}l++;}return td(l);}function ug(Id){var pg,i,j,k,w,h,l,m,r,vg,wg;if(Id.dims.length!=2)Ed(gd);h=Id.dims[0];w=Id.dims[1];l=w*h;pg=new Array(l);for(i=0;i<l;i++)pg[i]=Id.tab[i];vg=new Array(w);l=0;for(i=0;i<w;i++){vg[i]=false;for(j=l;j<h;j++){if(!pe(pg[j*w+i]))break;}if(j==h)continue;vg[i]=true;if(j!=l){for(k=0;k<w;k++){v=pg[j*w+k];pg[j*w+k]=pg[l*w+k];pg[l*w+k]=v;}}c=qg(pg[l*w+i]);for(k=0;k<w;k++){pg[l*w+k]=ce(pg[l*w+k],c);}for(j=0;j<h;j++){if(j!=l){c=pg[j*w+i];for(k=i;k<w;k++){pg[j*w+k]=ye(pg[j*w+k],ce(pg[l*w+k],c));}}}l++;Id.tab=pg;}wg=w-l;r=Kf(w,wg);k=0;for(i=0;i<w;i++){if(!vg[i]){l=0;m=0;for(j=0;j<w;j++){if(vg[j]){r.tab[j*wg+k]=yf(pg[m*w+i]);m++;}else{if(l==k){r.tab[j*wg+k]=vd;}else{r.tab[j*wg+k]=ud;}l++;}}k++;}}return r;}function xg(ke,n,yg,fg){var i,Ld;Ld="[";for(i=0;i<n;i++){if(i!=0)Ld+=", ";Ld+=zg(ke[yg+i*fg]);}Ld+="]";return Ld;}function Ag(Id){var Ld,i,n,ke;Ld="";ke=Id.tab;if(Id.dims.length==1){Ld=xg(ke,Id.dims[0],0,1);}else if(Id.dims.length==2){Ld+="\n[";for(i=0;i<Id.dims[0];i++){if(i!=0)Ld+=" ";Ld+=xg(ke,Id.dims[1],i*Id.dims[1],1);if(i!=(Id.dims[0]-1))Ld+="\n";else Ld+="]";}}else{Ld+="[cannot print more than 2 dimensions]";}return Ld;}function Tf(n){var r;r=new Object();r.type=Tc;r.tab=new Array(n);return r;}function Bg(){var r;r=Tf(2);r.tab[0]=ud;r.tab[1]=vd;return r;}function Cg(){var r;r=Tf(1);r.tab[0]=vd;return r;}function Dg(Id){var r,n,i;n=Id.tab.length;i=n;while(i>1&&pe(Id.tab[i-1]))i--;if(i==n)return Id;r=Tf(i);for(j=0;j<i;j++)r.tab[j]=Id.tab[j];return r;}function pf(Id,nf){var r,n,i;n=Id.tab.length;r=Tf(n);for(i=0;i<n;i++){r.tab[i]=nf(Id.tab[i]);}return Dg(r);}function Eg(Id){var r;if(Id.type==Tc){return Id;}else{r=Tf(1);r.tab[0]=Id;return r;}}function Fg(Id,Pd){var jg,kg,Oc,og,Gg,r,i;Id=Eg(Id);Pd=Eg(Pd);if(Id.tab.length<Pd.tab.length){Gg=Id;Id=Pd;Pd=Gg;}jg=Id.tab;kg=Pd.tab;Oc=jg.length;og=kg.length;r=Tf(Oc);for(i=0;i<og;i++){r.tab[i]=we(jg[i],kg[i]);}for(i=og;i<Oc;i++){r.tab[i]=jg[i];}return Dg(r);}function Hg(Id,Pd){var jg,kg,Oc,og,Gg,r,i,Ig;Id=Eg(Id);Pd=Eg(Pd);jg=Id.tab;kg=Pd.tab;Oc=jg.length;og=kg.length;if(og<=Oc){Ig=false;}else{Oc=kg.length;og=jg.length;Ig=true;}r=Tf(Oc);for(i=0;i<og;i++){r.tab[i]=ye(jg[i],kg[i]);}if(Ig){for(i=og;i<Oc;i++){r.tab[i]=yf(kg[i]);}}else{for(i=og;i<Oc;i++){r.tab[i]=jg[i];}}return Dg(r);}function Jg(Id,Pd){var i,j,jg,kg,Oc,og,n,r;Id=Eg(Id);Pd=Eg(Pd);jg=Id.tab;kg=Pd.tab;Oc=jg.length;og=kg.length;n=Oc+og-1;r=Tf(n);for(i=0;i<n;i++)r.tab[i]=ud;for(i=0;i<Oc;i++){for(j=0;j<og;j++){r.tab[i+j]=we(r.tab[i+j],ce(jg[i],kg[j]));}}return Dg(r);}function Kg(Id,Pd){var ke,n,v;ke=Id.tab;n=ke.length;n--;v=ke[n];while(n>0){n--;v=we(ce(v,Pd),ke[n]);}return v;}function Lg(Id){var ke,n,i,p;ke=Id.tab;n=ke.length;if(n==1){p=Tf(1);p.tab[0]=ud;}else{p=Tf(n-1);for(i=1;i<n;i++){p.tab[i-1]=ce(td(i),ke[i]);}}return Dg(p);}function Mg(Id){var ke,n,i,p;ke=Id.tab;n=ke.length;p=Tf(n+1);for(i=0;i<n;i++){p.tab[i+1]=ce(Cf(vd,td(i+1)),ke[i]);}p.tab[0]=ud;return Dg(p);}function Ng(Id){var n;n=Id.tab.length-1;if(n==0){if(pe(Id.tab[0]))n=-2147483647;}return n;}function Og(Id){var n;if(Id.type<=Sc){if(pe(Id))n=-2147483647;else n=0;}else if(Id.type==Tc){if(Id.type!=Tc)Ed(ad);n=Ng(Id);}else if(Id.type==Uc){n=Ng(Id.num);if(n>=0)n-=Ng(Id.den);}else{Ed(ad);}return td(n);}function Pg(Id,Pd,Qg){var jg,kg,Gg,Oc,og,i,j,q;Gg=Id.tab;Oc=Gg.length;kg=Pd.tab;og=kg.length;if(Oc<og){if(Qg){return Id;}else{r=Tf(1);r.tab[0]=ud;return r;}}r=Tf(Oc);jg=r.tab;for(i=0;i<Oc;i++)jg[i]=Gg[i];if(!Qg){q=Tf(Oc-og+1);}for(i=Oc-og;i>=0;i--){c=jg[i+og-1];if(!pe(c)){c=Cf(c,kg[og-1]);for(j=0;j<og;j++){jg[i+j]=ye(jg[i+j],ce(kg[j],c));}}if(!Qg)q.tab[i]=c;}if(Qg){return Dg(r);}else{return Dg(q);}}function Rg(Id,Pd){return Pg(Id,Pd,false);}function Sg(Id,Pd){var Gg;while(Ng(Pd)>=0){Gg=Pd;Pd=Tg(Id,Pd);Id=Gg;}Id=Cf(Id,Id.tab[Id.tab.length-1]);return Id;}function Ug(Id){var i,Ld,Vg,c;Ld="";for(i=Id.tab.length-1;i>=0;i--){c=Id.tab[i];if(!pe(c)||(i==0&&Id.tab.length==1)){if(i==0){Vg=zg(c);}else{if(Hd(c)){Vg="";}else if(Jd(c)){Vg="-";}else{Vg=zg(c)+"*";}Vg+="X";if(i>=2){Vg+="^"+i;}}if(Vg.charAt(0)!="-"){if(Ld!="")Ld+="+";}Ld+=Vg;}}return Ld;}function Wg(p,z,Xg,Yg){var Zg,ah,i,bh,ch,dh,d,eh,fh,ab,bb;d=Ng(p);if(d==1){return yf(Cf(p.tab[0],p.tab[1]));}Xg=gh(Xg);Zg=Lg(p);ah=Lg(Zg);for(i=0;i<Yg;i++){bh=Kg(p,z);if(ne(gh(bh),Xg)<=0)return z;ch=Kg(Zg,z);dh=Kg(ah,z);eh=ce(td(d-1),ch);eh=ce(eh,eh);fh=ce(ce(ce(td(d),td(d-1)),bh),dh);eh=Ff(ye(eh,fh));ab=we(ch,eh);bb=ye(ch,eh);if(ne(gh(bb),gh(ab))>0)ab=bb;if(pe(ab))return null;z=ye(z,Cf(ce(td(d),bh),ab));}return null;}function Vf(p){var d,i,hh,ih,j;var jh=[0.1,-1.4,1.7];if(p.type!=Tc)Ed(ad);d=Ng(p);if(d==-1){Ed(hd);}hh=oe(d);for(i=0;i<d;i++){for(j=0;j<3;j++){z=Wg(p,De(jh[j]),De(1e-10),50);if(z!=null)break;}if(j==3){Ed(hd);}hh.tab[i]=z;ih=Tf(2);ih.tab[1]=vd;ih.tab[0]=yf(z);p=Rg(p,ih);}return hh;}function ie(Id,Pd,he){var e,r,s;r=Cg();e=Pd.val;s=e.signum();if(s<0){Ed(ld);}if(s!=0){for(;;){if(!e.isEven()){r=Tg(ce(r,Id),he);}e=e.shiftRight(1);if(e.signum()==0)break;Id=Tg(ce(Id,Id),he);}}return r;}function kh(re,se){var r;r=new Object();r.type=Uc;r.num=re;r.den=se;return r;}function lh(re,se){var r,s,g;if(Ng(se)<0)Ed(bd);g=Sg(re,se);if(Ng(g)>0){re=Rg(re,g);se=Rg(se,g);}if(Ng(se)==0){return Cf(re,se.tab[0]);}else{return kh(re,se);}return r;}function mh(Id){var Pd;if(Id.type==Uc){return Id;}else{Pd=Tf(1);Pd.tab[0]=vd;return kh(Eg(Id),Pd);}}function nh(Id,Pd){Id=mh(Id);Pd=mh(Pd);return lh(we(ce(Id.num,Pd.den),ce(Pd.num,Id.den)),ce(Id.den,Pd.den));}function oh(Id,Pd){Id=mh(Id);Pd=mh(Pd);return lh(ye(ce(Id.num,Pd.den),ce(Pd.num,Id.den)),ce(Id.den,Pd.den));}function ph(Id,Pd){Id=mh(Id);Pd=mh(Pd);return lh(ce(Id.num,Pd.num),ce(Id.den,Pd.den));}function qh(Id,Pd){Id=mh(Id);Pd=mh(Pd);return lh(ce(Id.num,Pd.den),ce(Id.den,Pd.num));}function rh(Id){return kh(yf(Id.num),Id.den);}function sh(n,th){var r,i;r=new Object();r.type=Vc;r.tab=new Array(n);r.e_min=th;for(i=0;i<n;i++)r.tab[i]=ud;return r;}function uh(Id){var i,j,Ld,Vg,c;Ld="";for(j=0;j<Id.tab.length;j++){c=Id.tab[j];i=j+Id.e_min;if(!pe(c)){if(i==0){Vg=zg(c);}else{if(Hd(c)){Vg="";}else if(Jd(c)){Vg="-";}else{Vg=zg(c)+"*";}Vg+="X";if(i!=1){Vg+="^"+i;}}if(Vg.charAt(0)!="-"){if(Ld!="")Ld+="+";}Ld+=Vg;}}if(Ld!="")Ld+="+";i=Id.tab.length+Id.e_min;Ld+="O(";if(i==0){Ld+="1";}else{Ld+="X";if(i!=1){Ld+="^"+i;}}Ld+=")";return Ld;}function vh(Id){n=Id.tab.length;n--;for(i=0;i<n;i++){if(!pe(Id.tab[i]))return-1;}if(ne(Id.tab[n],vd))return-1;return n;}function wh(Id){var n,i;if(Id.type<=Tc){Id=Eg(Id);n=vh(Id);if(n<0)Ed(md);}else if(Id.type==Uc){n=vh(Id.num);if(n!=0)Ed(md);n=vh(Id.den);if(n<0)Ed(md);n=-n;}else{Ed(md);}return sh(0,n);}function xh(Id){var e;e=0;while(e<Id.tab.length&&pe(Id.tab[e]))e++;return e;}function yh(Id,n){var r,i,e,n,d;if(Id.type<=Tc){Id=Eg(Id);if(n<=0){return sh(0,0);}else{e=xh(Id);r=sh(n,e);d=Math.min(Id.tab.length-e,n);for(i=0;i<d;i++)r.tab[i]=Id.tab[i+e];return r;}}else if(Id.type==Uc){return Cf(Id.num,yh(Id.den,n));}else if(Id.type==Vc){return Id;}else{Ed(zh);}}function Ah(Id){var i,j,n,r;n=Id.tab.length;i=0;while(i<n&&pe(Id.tab[i]))i++;if(i==0){return Id;}else{r=sh(n-i,Id.e_min+i);for(j=i;j<n;j++)r.tab[j-i]=Id.tab[j];return r;}}function Bh(Id,Pd){var n,th,i,d,Ch,Dh,j,Gg,r;if(Id.type!=Vc){Gg=Id;Id=Pd;Pd=Gg;}if(Pd.type<=Tc){Pd=Eg(Pd);d=Id.e_min+Id.tab.length;if(d<=0)return Id;r=sh(Pd.tab.length,0);for(i=0;i<Pd.tab.length;i++)r.tab[i]=Pd.tab[i];Pd=r;}else if(Pd.type==Uc){d=Id.e_min+Id.tab.length;i=xh(Pd.num)-xh(Pd.den);if(d<=i)return Id;Pd=yh(Pd,d-i,false);}else{d=Math.min(Id.e_min+Id.tab.length,Pd.e_min+Pd.tab.length);}th=Math.min(Id.e_min,Pd.e_min);n=d-th;r=sh(n,th);for(i=th;i<d;i++){j=i-Id.e_min;if(j>=0&&j<Id.tab.length)Ch=Id.tab[j];else Ch=ud;j=i-Pd.e_min;if(j>=0&&j<Pd.tab.length)Dh=Pd.tab[j];else Dh=ud;r.tab[i-th]=we(Ch,Dh);}return Ah(r);}function Eh(Id,Pd){return Bh(Id,yf(Pd));}function Fh(Id,Pd){var n,i,j,r,n,th,Oc,og,k;if(Id.type!=Vc)Id=yh(Id,Pd.tab.length,false);if(Pd.type!=Vc)Pd=yh(Pd,Id.tab.length,false);th=Id.e_min+Pd.e_min;n=Math.min(Id.tab.length,Pd.tab.length);Oc=Id.tab.length;og=Pd.tab.length;r=sh(n,th);for(i=0;i<Oc;i++){k=Math.min(og,n-i);for(j=0;j<k;j++){r.tab[i+j]=we(r.tab[i+j],ce(Id.tab[i],Pd.tab[j]));}}return Ah(r);}function Gh(Id){var r,n,i,j,ig;if(Id.type!=Vc)Ed(ad);n=Id.tab.length;if(n==0)Ed(bd);r=sh(n,-Id.e_min);r.tab[0]=qg(Id.tab[0]);for(i=1;i<n;i++){ig=ud;for(j=1;j<=i;j++){ig=we(ig,ce(Id.tab[j],r.tab[i-j]));}r.tab[i]=yf(ce(ig,r.tab[0]));}return r;}function Hh(Id,Pd){if(Pd.type!=Vc){Pd=yh(Pd,Id.tab.length);}return Fh(Id,Gh(Pd));}function qf(Id,nf){var r,n,i;n=Id.tab.length;r=sh(n,Id.e_min);for(i=0;i<n;i++){r.tab[i]=nf(Id.tab[i]);}return Ah(r);}function Ih(Id,Pd){var ke,n,v,th;if(Pd.type==Tc){th=xh(Pd);if(th==0)Ed(nd);}else if(Pd.type==Uc){th=xh(Pd.num)-xh(Pd.den);if(th<=0)Ed(nd);}else if(Pd.type==Vc){if(Pd.e_min<=0)Ed(nd);}ke=Id.tab;n=ke.length;if(n!=0){n--;v=ke[n];while(n>0){n--;v=we(ce(v,Pd),ke[n]);}if(Id.e_min!=0){v=ce(v,Jh(Pd,td(Id.e_min)));}if(Pd.type==Tc||Pd.type==Uc){v=yh(v,Id.tab.length*th);}}else{if(Pd.type==Vc)return Id;else return ud;}return v;}function Kh(Id){var n,i,j,r;n=Id.tab.length;if(n==0){if(Id.e_min==0)return sh(0,0);else return sh(0,Id.e_min-1);}else{r=sh(n,Id.e_min-1);for(i=0;i<n;i++){j=Id.e_min+i;if(j==0)r.tab[i]=ud;else r.tab[i]=ce(td(j),Id.tab[i]);}return Ah(r);}}function Lh(Id){var n,i,j,r;n=Id.tab.length;if(n==0){return sh(0,Id.e_min+1);}else{r=sh(n,Id.e_min+1);for(i=0;i<n;i++){j=Id.e_min+i;if(j==-1){if(!pe(Id.tab[i]))Ed(pd);}else{r.tab[i]=ce(Cf(vd,td(j+1)),Id.tab[i]);}}return Ah(r);}}function Mh(Id){var r,i,n;n=Id.tab.length;r=sh(n-1,1);for(i=1;i<n;i++){r.tab[i-1]=Id.tab[i];}return Ah(r);}function Nh(Id){var r,n,c;if(Id.e_min<0)Ed(od);if(Id.e_min>0){c=vd;}else{if(Id.tab.length==0)return Id;c=Oh(Id.tab[0]);Id=Mh(Id);}n=Math.ceil((Id.e_min+Id.tab.length)/Id.e_min);r=sh(n,0);for(i=0;i<n;i++){r.tab[i]=Cf(c,ae(i));}return Ih(r,Id);}function Ph(Id){var r;if(Id.e_min!=0){Ed(qd);}r=Qh(Cf(Rh(Id),Id));r=we(r,Sh(Id.tab[0]));return r;}function Th(Ld){var t;r=new Object();r.type=Yc;r.str=Ld;return r;}function Uh(Id){return'"'+Id.str+'"';}function Vh(Id){if(Id.type!=Yc)Ed(ad);return Id.str;}function Wh(Id){var r;return Th(Zc[Id.type]);}function Zd(Id){if(Id.type==Pc){return Id.val.signum();}else if(Id.type==Qc){return Id.num.val.signum();}else if(Id.type==Rc){if(Id.val>0)return 1;else if(Id.val==0)return 0;else return-1;}}function pe(Id){return(Zd(Id)==0);}function ne(Id,Pd){return Zd(ye(Id,Pd));}function we(Id,Pd){Xh=Math.max(Id.type,Pd.type);if(Xh==Pc){return Od(Id,Pd);}else if(Xh==Qc){return ve(Id,Pd);}else if(Xh==Rc){return Fe(Id,Pd);}else if(Xh==Sc){return uf(Id,Pd);}else if(Xh==Tc){return Fg(Id,Pd);}else if(Xh==Uc){return nh(Id,Pd);}else if(Xh==Vc){return Bh(Id,Pd);}else if(Id.type==Wc&&Pd.type==Wc){return gg(Id,Pd,we);}else{Ed(ad);}}function ye(Id,Pd){var Xh;Xh=Math.max(Id.type,Pd.type);if(Xh==Pc){return Qd(Id,Pd);}else if(Xh==Qc){return xe(Id,Pd);}else if(Xh==Rc){return Ge(Id,Pd);}else if(Xh==Sc){return vf(Id,Pd);}else if(Xh==Tc){return Hg(Id,Pd);}else if(Xh==Uc){return oh(Id,Pd);}else if(Xh==Vc){return Eh(Id,Pd);}else if(Id.type==Wc&&Pd.type==Wc){return gg(Id,Pd,ye);}else{Ed(ad);}}function ce(Id,Pd){var Xh;Xh=Math.max(Id.type,Pd.type);if(Xh==Pc){return Td(Id,Pd);}else if(Xh==Qc){return ze(Id,Pd);}else if(Xh==Rc){return He(Id,Pd);}else if(Xh==Sc){return wf(Id,Pd);}else if(Xh==Tc){return Jg(Id,Pd);}else if(Xh==Uc){return ph(Id,Pd);}else if(Xh==Vc){return Fh(Id,Pd);}else if(Id.type==Wc&&Pd.type<=Sc){function Yh(c){return ce(c,Pd);}return of(Id,Yh);}else if(Pd.type==Wc&&Id.type<=Sc){function Yh(c){return ce(c,Id);}return of(Pd,Yh);}else if(Id.type==Wc&&Pd.type==Wc){return hg(Id,Pd);}else{Ed(ad);}}function Cf(Id,Pd){var Xh;Xh=Math.max(Id.type,Pd.type);if(Xh==Pc){return te(Id,Pd);}else if(Xh==Qc){return Ae(Id,Pd);}else if(Xh==Rc){return Ie(Id,Pd);}else if(Xh==Sc){return Df(Id,Pd);}else if(Id.type==Tc&&Pd.type<=Sc){function Zh(c){return Cf(c,Pd);}return pf(Id,Zh);}else if(Xh==Tc){return lh(Eg(Id),Eg(Pd));}else if(Xh==Uc){return qh(Id,Pd);}else if(Xh==Vc){return Hh(Id,Pd);}else if(Id.type==Wc&&Pd.type<=Sc){function Zh(c){return Cf(c,Pd);}return of(Id,Zh);}else if(Id.type==Wc&&Pd.type==Wc){return hg(Id,rg(Pd));}else{Ed(ad);}}function Tg(Id,Pd){var Xh;Xh=Math.max(Id.type,Pd.type);if(Xh==Pc){return Vd(Id,Pd);}else if(Xh==Qc||Xh==Rc){return ye(Id,ce(Pd,ai(Cf(Id,Pd))));}else if(Id.type==Wc&&Pd.type<=Rc){function bi(c){return Tg(c,Pd);}return of(Id,bi);}else if(Id.type==Tc&&Pd.type<=Rc){function bi(c){return Tg(c,Pd);}return pf(Id,bi);}else if(Id.type==Tc&&Pd.type==Tc){return Pg(Id,Pd,true);}else{Ed(ad);}}function zg(Id){var Ld,Vg;if(Id.type==Pc){if(yd==COUT_MODE_HEXA){if(Id.val.signum()<0){Ld="-";Id=Rd(Id);}else{Ld="";}Ld+="0x"+Nd(Id,16);}else{Ld=Nd(Id,10);}}else if(Id.type==Qc){if(yd==COUT_MODE_REAL){Ld=Oe(Ee(Id));}else{Ld=zg(Id.num);Ld+="/"+zg(Id.den);}}else if(Id.type==Rc){Ld=Oe(Id);}else if(Id.type==Sc){if(pe(Id.re)){Ld="";}else{Ld=zg(Id.re);}if(Hd(Id.im)){if(Ld!="")Ld+="+";Ld+="I";}else if(Jd(Id.im)){Ld+="-I";}else{Vg=zg(Id.im);if(Vg.charAt(0)!="-"){if(Ld!="")Ld+="+";}Ld+=Vg+"*I";}}else if(Id.type==Wc){Ld=Ag(Id);}else if(Id.type==Xc){Ld="[function]";}else if(Id.type==Tc){Ld=Ug(Id);}else if(Id.type==Uc){Ld="("+zg(Id.num)+")";Ld+="/("+zg(Id.den)+")";}else if(Id.type==Vc){Ld=uh(Id);}else if(Id.type==Yc){Ld=Uh(Id);}else{Ld="[cannot display this object]";}return Ld;}function ci(Id,Pd){var e,r,s;if(Id.type==Wc){r=Lf(Qf(Id));}else if(Id.type==Tc||Id.type==Uc){r=Cg();}else{r=vd;}e=Pd.val;s=e.signum();if(s!=0){if(s<0){Id=qg(Id);e=e.negate();}for(;;){if(!e.isEven()){r=ce(r,Id);}e=e.shiftRight(1);if(e.signum()==0)break;Id=ce(Id,Id);}}return r;}function Jh(Id,Pd){if(Pd.type==Pc){return ci(Id,Pd);}else if(Id.type<=Rc&&Pd.type<=Rc){return Ve(Id,Pd);}else if(Id.type<=Sc&&Pd.type<=Sc){return Jf(Id,Pd);}else if(Id.type==Vc||Pd.type==Vc){return Nh(ce(Ph(Id),Pd));}else{Ed(ad);}}function di(Id,Pd){if(Id.type==Pc&&Id.type==Pc){return Xd(Id,Pd);}else if(Id.type==Tc&&Id.type==Tc){return Sg(Id,Pd);}else{Ed(ad);}}function Oh(Id){if(Id.type<=Rc){return Re(Id);}else if(Id.type==Sc){return Gf(Id);}else if(Id.type==Vc){return Nh(Id);}else{Ed(ad);}}function Sh(Id){var s;if(Id.type<=Rc){s=Zd(Id);if(s<0){return If(Id);}else if(s==0){Ed(dd);}else{return Se(Id);}}else if(Id.type==Sc){return If(Id);}else if(Id.type==Vc){return Ph(Id);}else{Ed(ad);}}function Ff(Id){if(Id.type<=Rc){if(Zd(Id)<0){return kf(ud,Qe(yf(Id)));}else{return Qe(Id);}}else if(Id.type==Sc){return Jh(Id,De(0.5));}else if(Id.type==Vc){return Jh(Id,Cf(vd,td(2)));}else{Ed(ad);}}function ei(Id){var a;if(Id.type<=Rc){return Xe(Id);}else if(Id.type==Sc||Id.type==Vc){a=ce(ff,Id);return Cf((we(Oh(a),Oh(yf(a)))),td(2));}else{Ed(ad);}}function fi(Id){var a;if(Id.type<=Rc){return We(Id);}else if(Id.type==Sc||Id.type==Vc){a=ce(ff,Id);return Cf((ye(Oh(a),Oh(yf(a)))),ce(ff,td(2)));}else{Ed(ad);}}function gi(Id){if(Id.type<=Rc){return Ye(Id);}else if(Id.type==Sc||Id.type==Vc){return Cf(fi(Id),ei(Id));}else{Ed(ad);}}function hi(Id){var r;if(Id.type<=Rc){return Ze(Id);}else if(Id.type==Vc){r=Qh(Cf(Rh(Id),Ff(ye(vd,ce(Id,Id)))));if(Id.e_min==0)r=we(r,hi(Id.tab[0]));return r;}else{Ed(ad);}}function ii(Id){if(Id.type<=Rc){return af(Id);}else if(Id.type==Vc){return ce(df(),De(0.5))-hi(Id);}else{Ed(ad);}}function ji(Id){var r;if(Id.type<=Rc){return bf(Id);}else if(Id.type==Vc){r=Qh(Cf(Rh(Id),we(vd,ce(Id,Id))));if(Id.e_min==0)r=we(r,ji(Id.tab[0]));return r;}else{Ed(ad);}}function yf(Id){if(Id.type==Pc){return Rd(Id);}else if(Id.type==Qc){return Be(Id);}else if(Id.type==Rc){return Je(Id);}else if(Id.type==Sc){return xf(Id);}else if(Id.type==Uc){return rh(Id);}else{return mf(Id,yf);}}function qg(Id){if(Id.type<=Rc||Id.type==Tc||Id.type==Uc){return Cf(vd,Id);}else if(Id.type==Sc){return Bf(Id);}else if(Id.type==Vc){return Gh(Id);}else if(Id.type==Wc){return rg(Id);}else{Ed(ad);}}function ki(Id){if(Id.type<=Rc){return Id;}else if(Id.type==Sc){return zf(Id);}else{return mf(Id,ki);}}function gh(Id){if(Id.type<=Rc){return ce(Id,Id);}else{return Af(Id);}}function li(Id){if(Id.type==Pc){return Sd(Id);}else if(Id.type==Qc){return Ce(Id);}else if(Id.type==Rc){return Pe(Id);}else if(Id.type==Sc){return Ef(Id);}else{Ed(ad);}}function mi(Id){if(Id.type==Pc){return Id;}else if(Id.type==Qc){return Ud(Id.num,Id.den);}else if(Id.type==Rc){return Ke(Id);}else if(Id.type==Uc){return Rg(Id.num,Id.den);}else{return mf(Id,mi);}}function ai(Id){if(Id.type==Pc){return Id;}else if(Id.type==Qc){return Yd(Id.num,Id.den);}else if(Id.type==Rc){return Le(Id);}else{return mf(Id,ai);}}function ni(Id){if(Id.type==Pc){return Id;}else if(Id.type==Qc){return Rd(Yd(Rd(Id.num),Id.den));}else if(Id.type==Rc){return Me(Id);}else{return mf(Id,ni);}}function oi(Id){if(Id.type==Pc){return Id;}else if(Id.type==Qc){return Yd(Od(Id.num,Ud(Id.den,td(2))),Id.den);}else if(Id.type==Rc){return Ne(Id);}else{return mf(Id,oi);}}function pi(Id){if(Id.type==Pc||Id.type==Tc)return Id;else if(Id.type==Qc||Id.type==Uc)return Id.num;else Ed(ad);}function qi(Id){if(Id.type==Pc)return vd;else if(Id.type==Tc)return Cg();else if(Id.type==Qc||Id.type==Uc)return Id.den;else Ed(ad);}function ri(Id,Pd){if(Id.type==Tc){return Kg(Id,Pd);}else if(Id.type==Uc){return Cf(Kg(Id.num,Pd),Kg(Id.den,Pd));}else if(Id.type==Vc){return Ih(Id,Pd);}else{Ed(ad);}}function Rh(Id){if(Id.type==Tc){return Lg(Id);}else if(Id.type==Uc){return lh(ye(ce(Rh(Id.num),Id.den),ce(Id.num,Rh(Id.den))),ce(Id.den,Id.den));}else if(Id.type==Vc){return Kh(Id);}else{Ed(ad);}}function Qh(Id){if(Id.type==Tc){return Mg(Id);}else if(Id.type==Vc){return Lh(Id);}else{Ed(ad);}}function Lg(Id){var ke,n,i;ke=Id.tab;n=ke.length;if(n==1){p=Tf(1);p.tab[0]=ud;}else{p=Tf(n-1);for(i=1;i<n;i++){p.tab[i-1]=ce(td(i),ke[i]);}}return Dg(p);}function si(Id,Pd){var n;n=be(Pd);if(Id.type==Pc){if(n>=0){return sd(Id.val.shiftLeft(n));}else{return sd(Id.val.shiftRight(-n));}}else{if(n>=0){return ce(Id,sd(vd.val.shiftLeft(n)));}else{return ai(Cf(Id,sd(vd.val.shiftLeft(-n))));}}}function ti(Id,Pd){if(Id.type!=Pc||Pd.type!=Pc)Ed(ad);return sd(Id.val.or(Pd.val));}function ui(Id,Pd){if(Id.type!=Pc||Pd.type!=Pc)Ed(ad);return sd(Id.val.and(Pd.val));}function vi(Id,Pd){if(Id.type!=Pc||Pd.type!=Pc)Ed(ad);return sd(Id.val.xor(Pd.val));}function wi(Id,Pd){if(Id.type!=Pc)Ed(ad);return sd(Id.val.not());}function xi(Id){var Ld;if(Id.type!=Pc)Ed(ad);if(Id.val.signum()<0){Ld="-";Id=Rd(Id);}else{Ld="";}Ld+="0b"+Nd(Id,2);return Th(Ld);}function yi(Id){var Ld;if(Id.type!=Pc)Ed(ad);if(Id.val.signum()<0){Ld="-";Id=Rd(Id);}else{Ld="";}Ld+="0x"+Nd(Id,16);return Th(Ld);}function zi(Id,Pd){var re,se,Ai,Bi,Ci,Di,u,n,i;Id=Ee(Id);if(arguments.length>=2){Pd=Ee(Pd);}else{Pd=De(1e-15);}Ai=vd;Ci=ud;Bi=ud;Di=vd;u=Id;for(i=0;i<20;i++){n=ai(u);re=we(ce(n,Ai),Ci);se=we(ce(n,Bi),Di);if(ne(li(ye(Id,Cf(Ee(re),se))),Pd)<=0)break;u=qg(ye(u,n));Ci=Ai;Ai=re;Di=Bi;Bi=se;}return te(re,se);}var Ei,Fi,Gi,Hi,Ii;var Ji;function Ki(){Gi++;if(Gi>=Ei.length){Fi='\x00';Gi=Ei.length;}else{Fi=Ei.charAt(Gi);}}function Li(){Gi++;if(Gi>=Ei.length){Fi='\x00';Gi=Ei.length;}else{Fi=Ei.charAt(Gi);if(Fi=='<'&&Ei.charAt(Gi+1)=='<'){Fi="<<";Gi++;}else if(Fi=='>'&&Ei.charAt(Gi+1)=='>'){Fi=">>";Gi++;}}}function Mi(){while(Fi==' '||Fi=='\n'||Fi=='\t')Li();}function Ni(){Li();Mi();}function Gd(Ld,Oi,Pi){if(Oi==null)Hi=Gi;else Hi=Oi;if(Pi==null)Ii=Hi+1;else Ii=Pi;throw Ld;}function Qi(Ri,Si){var Ti;Ti=xd["var_"+Ri];if(!Ti)return null;return Ti.val;}function Ui(Ri,val,Vi){var Ti;Ti=xd["var_"+Ri];if(!Ti){Ti=new Object();xd["var_"+Ri]=Ti;Ti.val=val;}Ti.val=val;Ti.is_user=Vi;}function Wi(Xi,Yi,Zi,aj){val=new Object();val.type=Xc;val.nb_args=Zi;if(aj==null)aj=false;val.var_args=aj;val.jsfunc=Yi;Ui(Xi,val,false);}function bj(){Wi("neg",yf,1);Wi("inverse",qg,1);Wi("norm",gh,1);Wi("abs",li,1);Wi("trunc",mi,1);Wi("floor",ai,1);Wi("ceil",ni,1);Wi("round",oi,1);Wi("num",pi,1);Wi("den",qi,1);Wi("fact",ae,1);Wi("xor",vi,2);Wi("bin",xi,1);Wi("hex",yi,1);Wi("frac",zi,1,true);Wi("sqrt",Ff,1);Wi("conj",ki,1);Wi("re",rf,1);Wi("im",sf,1);Wi("arg",tf,1);Wi("gcd",di,2);Wi("invmod",de,2);Wi("isprime",ee,1,true);Wi("nextprime",fe,1);Wi("pmod",ge,3);Wi("factor",je,1);Wi("exp",Oh,1);Wi("log",Sh,1);Wi("log2",Te,1);Wi("log10",Ue,1);Wi("sin",fi,1);Wi("cos",ei,1);Wi("tan",gi,1);Wi("asin",hi,1);Wi("acos",ii,1);Wi("atan",ji,1);Wi("atan2",cf,2);Wi("sinc",ef,1);Wi("mat",Wf,2);Wi("mattest",Xf,3);Wi("mathilbert",Nf,1);Wi("vec",Zf,1);Wi("dp",lg,2);Wi("cp",mg,2);Wi("idn",Lf,1);Wi("det",ng,1);Wi("trans",Of,1);Wi("trace",Pf,1);Wi("diag",Mf,1);Wi("charpoly",Rf,1);Wi("eigenvals",Uf,1);Wi("rank",tg,1);Wi("ker",ug,1);Wi("deg",Og,1);Wi("apply",ri,2);Wi("deriv",Rh,1);Wi("integ",Qh,1);Wi("polroots",Vf,1);Wi("O",wh,1);Wi("clear",cj,0);Wi("plot",dj,2,true);Wi("solve",ej,3);Wi("convert",fj,3);Wi("typeof",Wh,1);Ui("X",Bg(),false);Ui("I",ff,false);Ui("PI",df(),false);}function gj(){var Ld,val,Md,hj,ij;Ld="";Md=10;if(Fi=='0'){Li();if(Fi=='x'||Fi=='X'){Li();while((Fi>='0'&&Fi<='9')||(Fi>='a'&&Fi<='f')||(Fi>='A'&&Fi<='F')){Ld+=Fi;Li();}Md=16;}else if(Fi=='b'||Fi=='B'){Li();while(Fi>='0'&&Fi<='1'){Ld+=Fi;Li();}Md=2;}else{Ld="0";}}if(Md==10){ij=false;while(Fi>='0'&&Fi<='9'){Ld+=Fi;Li();}if(Fi=='.'){Ld+=Fi;ij=true;Li();while(Fi>='0'&&Fi<='9'){Ld+=Fi;Li();}}if(Fi=='e'||Fi=='E'){Ld+=Fi;ij=true;Li();if(Fi=='-'||Fi=='+'){Ld+=Fi;Li();}while(Fi>='0'&&Fi<='9'){Ld+=Fi;Li();}}if(ij){val=De(new Number(Ld).valueOf());}else{val=Kd(Ld,10);}if(Fi=='i'){Li();val=kf(ud,val);}}else{val=Kd(Ld,Md);}Mi();return val;}function jj(kj,Si){var lj,Ld,mj,val;mj=Gi;Ni();lj=new Array(0);if(Fi==')'){}else{for(;;){val=nj();lj[lj.length]=val;if(Fi==')'){break;}else if(Fi!=','){Gd("comma or closing parenthesis expected");}Ni();}}Ni();if(kj.var_args){if(lj.length<kj.nb_args){Ld=kj.nb_args+" argument";if(kj.nb_args>=2)Ld+="s";Gd("at least "+Ld+" expected",Si,Gi);}}else{if(lj.length!=kj.nb_args){Ld=kj.nb_args+" argument";if(kj.nb_args>=2)Ld+="s";Gd(Ld+" expected",Si,Gi);}}Bd=Si;Cd=mj;val=kj.jsfunc.apply(null,lj);Bd=null;Cd=null;return val;}function oj(val){var i,pj,j,Dc,qj,fg,cg,n,rj,Si;Ni();if(val.type!=Wc)Gd("array expected");n=val.dims.length;cg=new Array(n*2);rj=false;for(i=0;i<n;i++){Si=Gi;pj=nj();if(pj.type!=Pc)Gd("array subscript must be an integer",Si,Gi);Dc=pj.val.intValue();if(Dc<0||Dc>=val.dims[i])Gd("array subscript out of range",Si,Gi);cg[i*2]=Dc;if(Fi==':'){Ni();Si=Gi;pj=nj();if(pj.type!=Pc)Gd("array subscript must be an integer",Si,Gi);qj=pj.val.intValue();if(qj<Dc||qj>val.dims[i])Gd("array subscript out of range",Si,Gi);cg[i*2+1]=qj;rj=true;}else{cg[i*2+1]=-1;}if(i==(n-1)){if(Fi!=']')Gd("']' expected");}else{if(Fi!=',')Gd("',' expected");}Ni();}if(rj){return cg;}else{if(n==1){j=cg[0];}else if(n==2){j=cg[2]+val.dims[1]*cg[0];}else{j=0;fg=1;i=n-1;for(;;){j+=fg*cg[i*2];if(i==0)break;fg*=val.dims[i];i--;}}return j;}}function sj(){var Ld,k,Si;Si=Gi;Li();Ld="";while(Fi>='0'&&Fi<='9'){Ld+=Fi;Li();}Mi();if(Ld==""){k=zd.length-1;if(k<0)Gd("no history",Si,Gi);}else{k=(Ld>>0)-1;if(k<0||k>=zd.length)Gd("invalid history index",Si,Gi);}return zd[k].result;}function tj(){var ke,val,r,dg,uj,n,vj;dg=0;while(Fi=='['){Ni();dg++;}uj=new Array(dg);ke=new Array(0);if(dg==1){if(Fi!=']'){for(;;){val=nj();ke[ke.length]=val;if(Fi==']')break;if(Fi!=',')Gd("comma expected");Ni();}}Ni();uj[0]=ke.length;}else if(dg==2){vj=-1;for(;;){n=0;if(Fi!=']'){for(;;){n++;val=nj();ke[ke.length]=val;if(Fi==']')break;if(Fi!=',')Gd("comma expected");Ni();}}Ni();if(vj==-1){vj=n;}else{if(n!=vj)Gd("invalid number of columns");}if(Fi==']')break;if(Fi!='[')Gd("'[' expected");Ni();}Ni();uj[0]=ke.length/vj;uj[1]=vj;}else{Gd("unsupported number of dimensions");}r=new Object();r.type=Wc;r.dims=uj;r.tab=ke;return r;}function wj(){var Si,Ld,xj,yj;Si=Gi;Ki();yj=Gi;Ld="";for(;;){if(Fi=='"')break;else if(Fi=='\x00')Gd("unterminated string",Si,Gi);else if(Fi=='\\'){xj=Gi;Ki();switch(Fi){case'\\':case'"':break;case'n':Fi='\n';break;default:Gd("unsupported string backquote sequence",xj,Gi+1);break;}Ld+=Fi;Ki();}else{Ld+=Fi;Ki();}}Ki();Mi();r=Th(Ld);r.start_pos=yj;return r;}function zj(){var Ld,Mb,val,Md,Aj,Bj;var Ri,cg,pj,Si;Si=Gi;Aj=0;if(Fi>='0'&&Fi<='9'){val=gj();}else if(Fi=='-'||Fi=='+'||Fi=='~'){Mb=Fi;Ni();val=zj();if(Mb=='-')val=yf(val);else if(Mb=='~')val=wi(val);}else if(Fi=='('){Ni();val=nj();if(Fi!=')')Gd("closing parenthesis expected",Si);Ni();}else if((Fi>='a'&&Fi<='z')||(Fi>='A'&&Fi<='Z')||Fi=='_'){Ld="";while((Fi>='a'&&Fi<='z')||(Fi>='A'&&Fi<='Z')||(Fi>='0'&&Fi<='9')||Fi=='_'){Ld+=Fi;Li();}Mi();Aj=1;Ri=Ld;}else if(Fi=='%'){val=sj();}else if(Fi=='['){val=tj();}else if(Fi=='"'){val=wj();}else{Gd("number or function expected",Si);}for(;;){if(Fi=='='){if(Aj==0)Gd("variable expected",Si,Gi);Ni();pj=nj();if(Aj==1){Ui(Ri,pj,true);Cj();}else if(Aj==2){if(typeof(cg)=="number"){val.tab[cg]=pj;}else{bg(val,cg,pj);}}Aj=0;val=pj;break;}else{Bj=Aj;if(Aj!=0){if(Aj==1){val=Qi(Ri);if(val==null){Gd("unknown variable '"+Ri+"'",Si,Gi);}}else if(Aj==2){if(typeof(cg)=="number"){val=val.tab[cg];}else{val=bg(val,cg,null);}}Aj=0;}if(Fi=='('){if(val.type!=Xc)Gd("function expected",Si,Gi);val=jj(val,Si);}else if(Fi=='['){cg=oj(val);if(Bj)Aj=2;}else{break;}}}return val;}function Dj(){var val,pj;val=zj();if(Fi=='^'){Ni();pj=Ej();val=Jh(val,pj);}return val;}function Ej(){var val,Mb;if(Fi=='-'||Fi=='+'||Fi=='~'){Mb=Fi;Ni();val=Ej();if(Mb=='-')val=yf(val);else if(Mb=='~')val=wi(val);}else{val=Dj();}return val;}function Fj(){var val,pj,Mb,Si;val=Ej();while(Fi=='*'||Fi=='/'||Fi=='%'){Si=Gi;Mb=Fi;Ni();pj=Ej();Bd=Si;Cd=Si+1;if(Mb=='*')val=ce(val,pj);else if(Mb=='/')val=Cf(val,pj);else val=Tg(val,pj);Bd=null;Cd=null;}return val;}function Gj(){var val,pj,Mb;val=Fj();while(Fi=='+'||Fi=='-'){Mb=Fi;Ni();pj=Fj();if(Mb=='+')val=we(val,pj);else val=ye(val,pj);}return val;}function Hj(){var val,pj,Mb;val=Gj();while(Fi=='<<'||Fi=='>>'){Mb=Fi;Ni();pj=Gj();if(Mb=='<<')val=si(val,pj);else val=si(val,yf(pj));}return val;}function Ij(){var val,pj;val=Hj();while(Fi=='&'){Ni();pj=Hj();val=ui(val,pj);}return val;}function Jj(){var val,pj;val=Ij();while(Fi=='|'){Ni();pj=Ij();val=ti(val,pj);}return val;}function nj(Kj){return Jj();}function Lj(Kj){var val;Bd=null;Cd=null;Ji=true;Gi=-1;Ei=Kj;Ni();for(;;){val=nj();if(Fi=='\x00'){break;}else if(Fi==';'){while(Fi==';'){Ni();}if(Fi=='\x00'){Ji=false;break;}}else{Gd("invalid characters at the end",Gi,Kj.length);}}return val;}function Mj(Kj){var val,Nj;val=Lj(Kj);Nj=new Object();zd[zd.length]=Nj;Nj.input=Kj;Nj.result=val;return zg(val);}function Oj(Kj){var Pj,Qj,val;Pj=Gi;Qj=Ei;try{Dd=-1;val=Lj(Kj.str);}catch(e){switch(Dd){case bd:case cd:case dd:val=null;break;default:Hi+=Kj.start_pos;Ii+=Kj.start_pos;throw e;break;}}Gi=Pj;Ei=Qj;return val;}function calc_set_output_mode(Rj){yd=Rj;Cj();}function calc_set_angle_mode(Rj){if(Rj=="deg")Ad=Math.PI/180.0;else Ad=1.0;}function ej(Ri,Xi,Sj){var Tj,Uj,i,Ya,Vj,Xg;Xg=De(1e-10);Ri=Vh(Ri);if(Xi.type!=Yc)Ed(ad);Sj=Ee(Sj);if(pe(Sj)){Tj=De(0.01);}else{Tj=ce(Sj,De(1.01));}Ui(Ri,Sj,true);val=Oj(Xi);Ya=Ee(val);for(i=0;i<40;i++){if(ne(li(ye(Tj,Sj)),Xg)<0)return Tj;Ui(Ri,Tj,true);val=Oj(Xi);Vj=Ee(val);Uj=ye(Tj,ce(Cf(ye(Tj,Sj),ye(Vj,Ya)),Vj));Sj=Tj;Tj=Uj;Ya=Vj;}Ed(hd);}var Wj=null;var Xj,Yj;function Zj(ak,Ld){var bk,ck,dk,ek;bk=document.getElementById(ak);bk.innerHTML='<span id="cw1">'+Ld+'</span><span id="cw2">&nbsp;</span>';ck=document.getElementById("cw1");dk=document.getElementById("cw2");ek=(dk.offsetLeft-ck.offsetLeft)/Ld.length;bk.innerHTML='';return ek;}function fk(ak,Ld){var bk,ck,dk,ek;bk=document.getElementById(ak);bk.innerHTML='<span id="cw1">'+Ld+'</span><br><span id="cw2">&nbsp;</span>';ck=document.getElementById("cw1");dk=document.getElementById("cw2");ek=(dk.offsetTop-ck.offsetTop);bk.innerHTML='';return ek;}function gk(){var hk;Xj=Zj("plot_caption_cw","123456789");Yj=fk("plot_caption_cw","123");hk=new Array(0);ik(hk,-5,5,-1,1);}function jk(kk,Sj,Tj,Ya,Vj,lk,mk){var nk,ok;nk=Math.round((0.0-Sj)/(Tj-Sj)*lk);ok=Math.round((Vj-0.0)/(Vj-Ya)*mk);kk.fillStyle="rgb(200,200,255)";kk.fillRect(nk,0,1,mk);kk.fillRect(0,ok,lk,1);}function pk(kk,Sj,Tj,lk,mk,qk,rk){var sk,p,n,i,tk,x,uk,vk,wk,xk;var bk,Ld,yk,zk,Ak,Oi;wk=2;xk=4;sk=Tj-Sj;p=Math.floor(Math.log(sk)/Math.log(10.0));p=Math.pow(10.0,p);for(;;){tk=Math.ceil(Sj/p)*p;n=Math.floor((Tj-tk)/p)+1;if(n<=2){p/=5;}else if(n<=4){p/=2;}else{break;}}for(i=0;i<n;i++){x=tk+i*p;if(qk){vk=(x-Sj)/(Tj-Sj);vk=Math.round(vk*lk);kk.fillRect(vk-wk/2,0,wk,xk);kk.fillRect(vk-wk/2,mk-xk,wk,xk);}else{vk=(Tj-x)/(Tj-Sj);vk=Math.round(vk*mk);kk.fillRect(0,vk,xk,wk);kk.fillRect(lk-xk,vk,xk,wk);}}if(rk){Ld="";yk=0;if(qk){for(i=0;i<n;i++){x=tk+i*p;if(p>=0.01&&p<=100){Ak=x.toPrecision(2);}else{Ak=x.toExponential(1);}vk=Math.round((x-Sj)/(Tj-Sj)*lk);zk=vk-Ak.length*Xj*0.5;while(yk<zk){Ld+="&nbsp;";yk+=Xj;}Ld+=Ak;yk+=Xj*Ak.length;}bk=document.getElementById("plot_caption_x");}else{for(i=n-1;i>=0;i--){x=tk+i*p;if(p>=0.01&&p<=100){Ak=x.toPrecision(2);}else{Ak=x.toExponential(1);}vk=Math.round((Tj-x)/(Tj-Sj)*mk);while((yk+Yj)<vk){Ld+='&nbsp;<br>';yk+=Yj;}Ld+=Ak+"<br>";yk+=Yj;}bk=document.getElementById("plot_caption_y");}bk.innerHTML=Ld;}}function Bk(Sj,Tj,Ri,kj){var i,n,uk,hk,x,y,Ta,val;hk=new Array(0);n=100;uk=((Tj-Sj)/(n-1));for(i=0;i<n;i++){x=Sj+uk*i;Ui(Ri,De(x),true);val=Oj(kj);if(val==null||val.type==Sc){y=NaN;}else{y=Ee(val).val;if(!isFinite(y)){y=NaN;}else{}}Ta=new Object();Ta.x=x;Ta.y=y;hk[i]=Ta;}return hk;}function Ck(kk,hk,Sj,Tj,Ya,Vj,lk,mk){var i,n,x,y,nk,ok,Dk;kk.strokeStyle="blue";kk.lineWidth=1;kk.beginPath();n=hk.length;Dk=true;for(i=0;i<n;i++){x=hk[i].x;y=hk[i].y;if(!isFinite(y)){Dk=true;}else{nk=Math.round((x-Sj)/(Tj-Sj)*lk);ok=Math.round((Vj-y)/(Vj-Ya)*mk);if(Dk){kk.moveTo(nk,ok);Dk=false;}else{kk.lineTo(nk,ok);}}}kk.stroke();}function plot_mouse_move(e){var Ek,Fk,bk,Gk,nk,ok,x,y;var Hk,lk,mk;Hk=document.getElementById('plot_output');if(!Hk)return;if(Wj==null)return;lk=Hk.clientWidth;mk=Hk.clientHeight;Gk=document.getElementById('plot_pos');Ek=0;Fk=0;bk=Hk;while(bk!=null){Ek+=bk.offsetLeft-bk.scrollLeft;Fk+=bk.offsetTop-bk.scrollTop;bk=bk.offsetParent;}nk=e.clientX-Ek;ok=e.clientY-Fk;x=(nk/lk)*(Wj.xmax-Wj.xmin)+Wj.xmin;y=Wj.ymax-(ok/mk)*(Wj.ymax-Wj.ymin);Gk.innerHTML="x="+x.toPrecision(4)+" y="+y.toPrecision(4);Ik(false);kk=Hk.getContext('2d');kk.fillStyle="red";kk.fillRect(nk,0,1,mk);kk.fillRect(0,ok,lk,1);}function plot_mouse_out(){var Hk,Gk;Hk=document.getElementById('plot_output');if(!Hk)return;if(Wj==null)return;Gk=document.getElementById('plot_pos');Gk.innerHTML="";Ik(false);}function Ik(rk){var kk,Jk,Kk,Lk,Mk,lk,mk,hk;Hk=document.getElementById('plot_output');if(!Hk)return;kk=Hk.getContext('2d');lk=Hk.clientWidth;mk=Hk.clientHeight;Jk=Wj.xmin;Kk=Wj.xmax;Lk=Wj.ymin;Mk=Wj.ymax;hk=Wj.points;kk.clearRect(0,0,lk,mk);jk(kk,Jk,Kk,Lk,Mk,lk,mk);Ck(kk,hk,Jk,Kk,Lk,Mk,lk,mk);kk.strokeStyle='black';kk.fillStyle="black";kk.lineWidth=2;kk.strokeRect(0,0,lk,mk);pk(kk,Jk,Kk,lk,mk,true,rk);pk(kk,Lk,Mk,lk,mk,false,rk);}function ik(hk,Jk,Kk,Lk,Mk){var Hk;if(!Wj)Wj=new Object();Wj.xmin=Jk;Wj.xmax=Kk;Wj.ymin=Lk;Wj.ymax=Mk;Wj.points=hk;}function dj(Ri,kj,Jk,Kk,Lk,Mk){var hk;Ri=Vh(Ri);if(kj.type!=Yc)Ed(ad);if(arguments.length>=3)Jk=Ee(Jk).val;else Jk=-5;if(arguments.length>=4)Kk=Ee(Kk).val;else Kk=5;if(arguments.length>=5)Lk=Ee(Lk).val;else Lk=null;if(arguments.length>=6)Mk=Ee(Mk).val;else Mk=null;if(Jk>=Kk)Gd("xmin must be < xmax");if(Lk!=null&&Mk!=null&&Lk>=Mk)Gd("ymin must be < ymax");hk=Bk(Jk,Kk,Ri,kj);if(Lk==null||Mk==null){var i,y;for(i=0;i<hk.length;i++){y=hk[i].y;if(isFinite(y)){if(Lk==null||y<Lk)Lk=y;if(Mk==null||y>Mk)Mk=y;}}}if(Lk>=Mk){var Gg=Lk;if(Gg==0.0){Lk=-1;Mk=1;}else{Lk=Gg*0.99;Mk=Gg*1.01;}}ik(hk,Jk,Kk,Lk,Mk);Nk=true;if(Ok!="plot")change_tab("plot");else Ik(true);return ud;}var Pk=[{name:"yocto",abbrev:"y",val:1e-24},{name:"zepto",abbrev:"z",val:1e-21},{name:"atto",abbrev:"a",val:1e-18},{name:"femto",abbrev:"f",val:1e-15},{name:"pico",abbrev:"p",val:1e-12},{name:"nano",abbrev:"n",val:1e-9},{name:"micro",abbrev:"µ",val:1e-6},{name:"milli",abbrev:"m",val:1e-3},{name:"centi",abbrev:"c",val:1e-2},{name:"deci",abbrev:"d",val:1e-1},{name:"kibi",abbrev:"Ki",val:1024},{name:"mebi",abbrev:"Mi",val:Math.pow(1024,2)},{name:"gibi",abbrev:"Gi",val:Math.pow(1024,3)},{name:"tebi",abbrev:"Ti",val:Math.pow(1024,4)},{name:"pebi",abbrev:"Pi",val:Math.pow(1024,5)},{name:"exbi",abbrev:"Ei",val:Math.pow(1024,6)},{name:"zebi",abbrev:"Zi",val:Math.pow(1024,7)},{name:"yobi",abbrev:"Yi",val:Math.pow(1024,8)},{name:"deca",abbrev:"da",val:10},{name:"hecto",abbrev:"h",val:100},{name:"kilo",abbrev:"k",val:1000},{name:"mega",abbrev:"M",val:1e6},{name:"giga",abbrev:"G",val:1e9},{name:"tera",abbrev:"T",val:1e12},{name:"peta",abbrev:"P",val:1e15},{name:"exa",abbrev:"E",val:1e18},{name:"zetta",abbrev:"Z",val:1e21},{name:"yotta",abbrev:"Y",val:1e24}];var Qk=["square","cubic"];var Rk=["m","kg","s","A","K","mol","cd"];var Sk=[{name:"meter",abbrev:"m",val:1,unit:"m",cat:"Length"},{name:"foot",names:"feet",abbrev:"ft",val:0.3048,unit:"m"},{name:"inch",names:"inches",abbrev:"in",val:0.0254,unit:"m"},{name:"mil",abbrev:"mil",val:1e-3,unit:"in"},{name:"mile",abbrev:"mi",val:5280,unit:"ft"},{name:"micron",abbrev:"",val:1e-6,unit:"m"},{name:"nautical mile",abbrev:"NM",val:1852,unit:"m"},{name:"",abbrev:"nmi",val:1852,unit:"m"},{name:"angstrom",abbrev:"",val:1e-10,unit:"m"},{name:"light year",abbrev:"ly",val:9.4607304725808e15,unit:"m"},{name:"parsec",abbrev:"pc",val:3.08567782e16,unit:"m"},{name:"astronomical unit",abbrev:"AU",val:149597870691,unit:"m"},{name:"acre",abbrev:"ac",val:4046.8564224,unit:"m^2",cat:"Surface"},{name:"are",abbrev:"a",val:100,unit:"m^2"},{name:"liter",abbrev:"L",val:1,unit:"dm^3",cat:"Volume"},{name:"second",abbrev:"s",val:1,unit:"s",cat:"Time"},{name:"minute",abbrev:"min",val:60,unit:"s"},{name:"hour",abbrev:"h",val:3600,unit:"s"},{name:"day",abbrev:"d",val:24,unit:"h"},{name:"week",abbrev:"wk",val:7,unit:"day"},{name:"month",abbrev:"mo",val:30,unit:"day"},{name:"year",abbrev:"y",val:365.25,unit:"day"},{name:"hetz",abbrev:"Hz",val:1,unit:"s^-1"},{name:"",abbrev:"fph",val:1,unit:"ft/h",cat:"Speed"},{name:"",abbrev:"mph",val:1,unit:"mi/h"},{name:"speed of light",abbrev:"c",val:2.99792458e8,unit:"m/s"},{name:"knot",abbrev:"kn",val:1,unit:"NM/h"},{name:"gravity",abbrev:"G",val:9.80665,unit:"m/s^2",cat:"Acceleration"},{name:"pascal",abbrev:"Pa",val:1,unit:"N/m^2",cat:"Pressure"},{name:"atmosphere",abbrev:"atm",val:101325,unit:"Pa"},{name:"bar",abbrev:"bar",val:1e5,unit:"Pa"},{name:"torr",abbrev:"torr",val:101325.0/760,unit:"Pa"},{name:"gramm",abbrev:"g",val:1e-3,unit:"kg",cat:"Mass"},{name:"tonne",abbrev:"t",val:1000,unit:"kg"},{name:"carat",abbrev:"ct",val:0.2,unit:"g"},{name:"pound",abbrev:"lb",val:0.45359237,unit:"kg"},{name:"ounce",abbrev:"oz",val:1/16,unit:"lb"},{name:"kelvin",abbrev:"K",val:1,unit:"K",cat:"Temperature"},{name:"degree Celsius",abbrev:"°C",val:1,unit:"K",addend:273.15},{name:"degree Rankine",abbrev:"°R",val:5/9,unit:"K"},{name:"degree Farenheit",abbrev:"°F",val:5/9,unit:"K",addend:459.67},{name:"joule",abbrev:"J",val:1,unit:"kg*m^2*s^-2",cat:"Energy"},{name:"electronvolt",abbrev:"eV",val:1.602176e-19,unit:"J"},{name:"calorie",abbrev:"cal",val:4.1868,unit:"J"},{name:"Calorie",abbrev:"Cal",val:4.1868e3,unit:"J"},{name:"ton of TNT",abbrev:"tTNT",val:4.184,unit:"GJ"},{name:"ton of oil equivalent",abbrev:"TOE",val:41.868,unit:"GJ"},{name:"watt",abbrev:"W",val:1,unit:"J/s",cat:"Power"},{name:"horsepower",abbrev:"hp",val:735.49875,unit:"W"},{name:"newton",abbrev:"N",val:1,unit:"kg*m*s^-2",cat:"Force"},{name:"ampere",abbrev:"A",val:1,unit:"A",cat:"Electric current"},{name:"coulomb",abbrev:"C",val:1,unit:"A*s",cat:"Electric charge"},{name:"farad",abbrev:"F",val:1,unit:"C/V",cat:"Electric capactiance"},{name:"volt",abbrev:"V",val:1,unit:"kg*m^2*A^-1*s^-3",cat:"Electromotive force"},{name:"ohm",abbrev:"",val:1,unit:"V/A",cat:"Electrical resistance"},{name:"siemens",abbrev:"S",val:1,unit:"A/V",cat:"Electrical conductance"},{name:"weber",abbrev:"Wb",val:1,unit:"J/A",cat:"Magnetic flux"},{name:"tesla",abbrev:"T",val:1,unit:"Wb/m^2",cat:"Magnetic field"},{name:"henry",abbrev:"H",val:1,unit:"Wb/A",cat:"Inductance"},{name:"lumen",abbrev:"lm",val:1,unit:"cd*sr",cat:"Luminous flux"},{name:"lux",abbrev:"lx",val:1,unit:"lm/m^2",cat:"Illuminance"},{name:"becquerel",abbrev:"Bq",val:1,unit:"s^-1",cat:"Radioactivity"},{name:"gray",abbrev:"Gy",val:1,unit:"J/kg",cat:"Absorbed dose"},{name:"sievert",abbrev:"Sv",val:1,unit:"J/kg",cat:"Equivalent dose"},{name:"katal",abbrev:"kat",val:1,unit:"mol/s",cat:"Catalytic activity"},{name:"radian",abbrev:"rad",val:1,unit:"rad",cat:"Angle"},{name:"degree",abbrev:"°",val:Math.PI/180,unit:"rad"},{name:"gradian",abbrev:"grad",val:Math.PI/200,unit:"rad"},{name:"steradian",abbrev:"sr",val:1,unit:"sr",cat:"Solid angle"},{name:"bit",abbrev:"bit",val:9.569940e-24,unit:"J/K",cat:"Information"},{name:"nibble",abbrev:"",val:4,unit:"bit"},{name:"byte",abbrev:"B",val:8,unit:"bit"}];var Tk=false;function Uk(unit){var i,Fi,name;name="";for(i=0;i<unit.length;i++){Fi=unit.charAt(i);if(Fi!=' '&&Fi!='\n'&&Fi!='\t')name+=Fi;}return name;}function Vk(){var i,name;for(i=0;i<Sk.length;i++){Sk[i].name1=Uk(Sk[i].name).toLowerCase();if(Sk[i].names){Sk[i].names=Uk(Sk[i].names).toLowerCase();}}Tk=true;}function Wk(name,Xk){var i,Ld,Vg,r;if(name=="")return-1;if(Xk){for(i=0;i<Sk.length;i++){Ld=Sk[i].name1;Vg=Sk[i].names;if(!Vg)Vg=Ld+"s";if(name==Ld||name==Vg)break;}}else{for(i=0;i<Sk.length;i++){Ld=Sk[i].abbrev;if(name==Ld)break;}}if(i==Sk.length)return-1;else return i;}function Yk(unit){var name,i,j,Fi,r,Ld,Vg,Zk,p;name=Uk(unit);al=name.toLowerCase();for(i=0;i<Rk.length;i++){if(name==Rk[i]){r=new Object();r.val=1;r.tab=new Array(Rk.length);for(j=0;j<r.tab.length;j++)r.tab[j]=0;r.tab[i]=1;return r;}}if(name=="rad"||name=="sr"){r=new Object();r.val=1;r.tab=new Array(Rk.length);for(j=0;j<r.tab.length;j++)r.tab[j]=0;return r;}if((i=Wk(name,false))>=0||(i=Wk(al,true))>=0){r=bl(Sk[i].unit);if(!r)return null;r.addend=Sk[i].addend;r.val*=Sk[i].val;return r;}for(i=0;i<Qk.length;i++){Ld=Qk[i];if(al.substr(0,Ld.length)==Ld){r=bl(name.substr(Ld.length));if(!r)return null;p=2+i;r.val=Math.pow(r.val,p);for(j=0;j<r.tab.length;j++){r.tab[j]*=p;}return r;}}for(j=0;j<Pk.length;j++){Ld=Pk[j].name;if(al.substr(0,Ld.length)==Ld){i=Wk(al.substr(Ld.length),true);if(i>=0){r=bl(Sk[i].unit);if(!r)return null;r.val*=Sk[i].val*Pk[j].val;return r;}else{break;}}}for(j=0;j<Pk.length;j++){Ld=Pk[j].abbrev;if(name.substr(0,Ld.length)==Ld){i=Wk(name.substr(Ld.length),false);if(i>=0){r=bl(Sk[i].unit);if(!r)return null;r.val*=Sk[i].val*Pk[j].val;return r;}else{break;}}}return null;}function bl(unit){var Fi,i,name,cl,r,j,p,dl,k;function Ni(){i++;if(i>=unit.length){Fi='\x00';i=unit.length;}else{Fi=unit.charAt(i);}}i=-1;Ni();dl=false;r=null;for(;;){name="";while(Fi!='^'&&Fi!='*'&&Fi!='/'&&Fi!='\x00'){name+=Fi;Ni();}cl=Yk(name,true);if(!cl)return null;if(Fi=='^'){Ni();j=i;while(Fi==' '||Fi=='\n'||Fi=='\t')Ni();if(Fi=='+'||Fi=='-')Ni();while(Fi>='0'&&Fi<='9')Ni();p=new Number(unit.substr(j,i-j));cl.val=Math.pow(cl.val,p);for(k=0;k<cl.tab.length;k++)cl.tab[k]*=p;}if(!dl){if(!r){r=cl;}else{r.val*=cl.val;for(k=0;k<cl.tab.length;k++)r.tab[k]+=cl.tab[k];}}else{r.val/=cl.val;for(k=0;k<cl.tab.length;k++)r.tab[k]-=cl.tab[k];}while(Fi==' '||Fi=='\n'||Fi=='\t')Ni();if(Fi=='*'){Ni();}else if(Fi=='/'){Ni();dl=true;}else{break;}}return r;}function el(r){var i,Ld;Ld="";for(i=0;i<r.tab.length;i++){if(r.tab[i]!=0){if(Ld!="")Ld+="*";Ld+=Rk[i]+"^"+r.tab[i];}}return Ld;}function fj(Id,fl,gl){var cl,ub,i,v;if(!Tk){Vk();}Id=Ee(Id).val;fl=Vh(fl);gl=Vh(gl);cl=bl(fl);if(!cl)Gd("unknown unit: "+fl);ub=bl(gl);if(!ub)Gd("unknown unit: "+gl);for(i=0;i<cl.tab.length;i++){if(cl.tab[i]!=ub.tab[i]){Gd("Unit dimensions do not match: "+el(cl)+" != "+el(ub));}}for(i=0;i<cl.tab.length;i++){if(i==4)v=1;else v=0;if(cl.tab[i]!=v)break;}if(i==cl.tab.length){if(cl.addend)Id+=cl.addend;Id*=cl.val;Id/=ub.val;if(ub.addend)Id-=ub.addend;}else{Id=Id*cl.val/ub.val;}return De(Id);}var Ok;var hl="";var il;var jl;var kl;var ll=0;var ml=false;var Nk;var nl;var ol;function pl(bk){bk.scrollTop=bk.scrollHeight-bk.clientHeight;}function ql(a){hl="";il=0;}function rl(a){hl+=a;}function sl(a){var k,l,m;k=0;while(k<a.length){if(a.charAt(k)=='\n'){k++;hl+='<br>';il=0;}else if(il>=kl){hl+='<br>';il=0;}else{l=a.length-k;m=kl-il;if(l>m)l=m;m=a.indexOf('\n',k);if(m>=0){m-=k;if(l>m)l=m;}hl+=a.substr(k,l);k+=l;il+=l;}}}function tl(n){var i;for(i=0;i<n;i++){hl+="&nbsp;";il++;}}function ul(){var vl;vl=document.getElementById("calc_output");vl.innerHTML=hl;pl(vl);}function wl(ak){var Ld,xl,ek,yl;Ld="XXXXXXXX";xl=document.getElementById(ak+"1");yl=document.getElementById(ak+"2");xl.innerHTML=Ld;ek=(yl.offsetLeft-xl.offsetLeft)/Ld.length;xl.innerHTML="";return ek;}function adjustFocus(){var zl;zl=document.getElementById("calc_input");zl.focus();}function cj(){ml=true;return ud;}function Al(){var Bl;Bl=document.getElementById("calc_error_pos");Bl.innerHTML="";}function Cl(){var vl,zl,e,Bl,Ld,i;zl=document.getElementById("calc_input");Bl=document.getElementById("calc_error_pos");try{Nk=false;vl=Mj(zl.value);if(ml){ml=false;zd=new Array(0);ll=0;ql();}else{ll=zd.length;rl('<span class="log_user">');sl(zl.value+'\n');rl('</span>');if(Ji){rl('<span class="log_result">');tl(3);sl('%'+ll+' = '+vl+'\n');rl('</span>');}}ul();zl.value="";Bl.innerHTML="";if(!Nk)change_tab("results");}catch(e){Ld='<table border="0" cellpadding="0" cellspacing="0" height="12"><tr valign="top"><td width='+(jl*Hi)+'>';for(i=0;i<(Ii-Hi);i++){Ld+='<td width='+jl+'><img src="errpos.png">';}Ld+='</tr></table>';Ld+='<table border="0" cellpadding="0" cellspacing="0"><tr><td width='+(jl*Hi)+'>';Ld+='<td><img src="errarrow.png">';Ld+='</tr></table>';Ld+='<span id="error_msg">'+e+'</span>';Bl.innerHTML=Ld;adjustFocus();}}function input_event(e){var Dl,El;Dl=e.keyCode;El=true;if(Dl==13){Cl();El=false;}else if(Dl==38){if(ll>0){ll--;document.getElementById("calc_input").value=zd[ll].input;Al();}El=false;}else if(Dl==40){if(ll<zd.length){ll++;if(ll==zd.length){document.getElementById("calc_input").value="";}else{document.getElementById("calc_input").value=zd[ll].input;}Al();}}else if(Dl!=37&&Dl!=39&&Dl!=35&&Dl!=36){Al();}Fl();return El;}function Cj(){var Gl,Ld,f,Hl,val,Ti;Gl=document.getElementById("var_list");if(!Gl)return;Ld="";for(f in xd){if(f.substr(0,4)=="var_"){Ti=xd[f];if(Ti.is_user){Hl=f.substr(4);Ld+=' '+Hl+" = "+zg(Ti.val)+'<br>';}}}if(Ld==""){Ld+="You have defined no variable.";}Gl.innerHTML=Ld;pl(Gl);}function Il(Fi){return((Fi>='a'&&Fi<='z')||(Fi>='A'&&Fi<='Z')||(Fi>='0'&&Fi<='9')||Fi=='_');}function Jl(){if(nl)clearTimeout(nl);}function Fl(){if(ol=="contextual"){if(nl)clearTimeout(nl);nl=setTimeout("contextual_help_show()",1000);}}function contextual_help_show(){var Kl,Ld,Ll,Fi,i;zl=document.getElementById("calc_input");Ld=zl.value;if(Ld==Ml)Ld="";i=Ld.length;if(i>0&&!Il(Ld.charAt(i-1))){Ll=Ld.charAt(i-1);}else{while(i>0){Fi=Ld.charAt(i-1);if(!Il(Fi))break;i--;}Ll=Ld.substr(i);}Kl=document.getElementById("help_output");if(Ll!=""){Ld="";for(i=0;i<Nl.length;i++){cmd=Nl[i].name;if(Ll==cmd.substr(0,Ll.length)){Ld+='<tr><td class="help_cmd">'+Nl[i].cmd;Ld+='<td class="help_line">'+Nl[i].line+'</tr>';}}if(Ld=="")return;Ld="<table>"+Ld+"</table>";}else{Ld=Ol;}Kl.innerHTML=Ld;}function Pl(){var Kl,i,j,cat,Ld;Kl=document.getElementById("help_output");Ld="";for(j=0;j<Ql.length;j++){Ld+='<h2>'+Ql[j].name+'</h2>\n';cat=Ql[j].cat;Ld+="<table>";for(i=0;i<Nl.length;i++){if(Nl[i].cat==cat){Ld+='<tr><td class="help_cmd">'+Nl[i].cmd;Ld+='<td class="help_line">'+Nl[i].line+'</tr>';}}Ld+="</table>";}Kl.innerHTML=Ld;}function Rl(){var Kl,i,j,cat,Ld,e;Kl=document.getElementById("help_output");Ld="";Ld+='Here are the units known by the calculator.<br>';Ld+='Example: <tt>convert(32, "inches", "cm")</tt> to convert 32 inches to centimeters.';Ld+='<table class="help_line">';Ld+='<tr style="font-weight:bold;"><td>Name<td>Abbrev<td>Value</tr>';for(j=0;j<Sk.length;j++){e=Sk[j];if(e.cat){Ld+='<tr><td style="font-weight:bold;">'+e.cat;}Ld+='<tr><td>'+e.name+'<td>'+e.abbrev+'<td>'+e.val+' '+e.unit;if(e.addend){Ld+=' (offset '+e.addend+')';}Ld+='</tr>';}Ld+='</table>';Ld+='<p>Unit prefixes:';Ld+='<table class="help_line">';Ld+='<tr style="font-weight:bold;"><td>Prefix name<td>Abbrev<td>Value</tr>';for(j=0;j<Pk.length;j++){e=Pk[j];Ld+='<tr><td>'+e.name+'<td>'+e.abbrev+'<td>'+e.val;}Ld+='</table>';Kl.innerHTML=Ld;}function change_help_tab(name){var bk,Kl;adjustFocus();if(ol==name)return;if(ol){bk=document.getElementById("but_"+ol);bk.style.backgroundColor="rgb(210,210,255)";}bk=document.getElementById("but_"+name);bk.style.backgroundColor="rgb(230,230,255)";ol=name;Jl();if(name=="contextual"){contextual_help_show();}else if(name=="tutorial"){Kl=document.getElementById("help_output");Kl.innerHTML=Sl;}else if(name=="reference"){Pl();}else if(name=="units"){Rl();}else if(name=="faq"){Kl=document.getElementById("help_output");Kl.innerHTML=Tl;}}function change_tab(name){var bk;adjustFocus();if(name==Ok)return;if(Ok){bk=document.getElementById("but_"+Ok);bk.style.backgroundColor="rgb(210,210,255)";}bk=document.getElementById("but_"+name);bk.style.backgroundColor="rgb(230,230,255)";if(Ok){if(Ok=="results"){bk=document.getElementById("calc_output");}else if(Ok=="plot"){bk=document.getElementById("plot_tab");}else if(Ok=="variables"){bk=document.getElementById("var_list");}bk.style.display="none";}if(name=="results"){bk=document.getElementById("calc_output");}else if(name=="plot"){bk=document.getElementById("plot_tab");}else if(name=="variables"){bk=document.getElementById("var_list");}bk.style.display="block";if(name=="results"){ul();ul();}else if(name=="plot"){Ik(true);}else if(name=="variables"){Cj();}Ok=name;}function calc_init(){var bk;document.getElementById("output_mode_frac").checked=(yd==COUT_MODE_FRAC);document.getElementById("output_mode_real").checked=(yd==COUT_MODE_REAL);document.getElementById("output_mode_hexa").checked=(yd==COUT_MODE_HEXA);document.getElementById("angle_mode_rad").checked=true;document.getElementById("angle_mode_deg").checked=false;bj();jl=wl("charw");bk=document.getElementById("calc_output");kl=Math.floor((bk.clientWidth-24)/wl("ocharw"));gk();adjustFocus();change_tab("results");change_help_tab("contextual");Cj();bk=document.getElementById("calc_input");bk.value=Ml;bk.select();}var Ml="Type your formula here";var Ql=[{cat:"arith",name:"Arithmetic"},{cat:"bit",name:"Bit Manipulation"},{cat:"trans",name:"Transcendental"},{cat:"linear",name:"Linear Algebra, Matrixes"},{cat:"poly",name:"Polynomial, Power series"},{cat:"plot",name:"Plot and Equation solving"},{cat:"misc",name:"Miscellaneous"}];var Nl=[{name:"inverse",cat:"arith",cmd:"inverse(x)",line:"Inverse of x"},{name:"norm",cat:"arith",cmd:"norm(x)",line:"Norm of x. For a real number, return x^2. For a complex number, return re(x)^2+im(x)^2"},{name:"abs",cat:"arith",cmd:"abs(x)",line:"Absolute value of x. For a complex number, return sqrt(re(x)^2+im(x)^2)"},{name:"trunc",cat:"arith",cmd:"trunc(x)",line:"Largest integer in absolute value &lt;= x. If x is a rational fonction, return its integer part."},{name:"floor",cat:"arith",cmd:"floor(x)",line:"Largest integer &lt;= x"},{name:"ceil",cat:"arith",cmd:"ceil(x)",line:"Smallest integer &gt;= x"},{name:"round",cat:"arith",cmd:"round(x)",line:"Closest integer to x. If halfway, takes the largest integer."},{name:"num",cat:"arith",cmd:"num(x)",line:"Return the numerator of the fraction x."},{name:"den",cat:"arith",cmd:"den(x)",line:"Return the denominator of the fraction x."},{name:"fact",cat:"arith",cmd:"fact(n)",line:"Factorial of n"},{name:"frac",cat:"arith",cmd:"frac(x[,e])",line:"Fractional approximation of x. The optional parameter e gives the precision."},{name:"bin",cat:"bit",cmd:"bin(n)",line:"Convert n to binary"},{name:"hex",cat:"bit",cmd:"hex(n)",line:"Convert n to hexadecimal"},{name:"xor",cat:"bit",cmd:"xor(a,b)",line:"Bitwise exclusive or between the integers a and b"},{name:"sqrt",cat:"arith",cmd:"sqrt(x)",line:"Square root of x"},{name:"conj",cat:"arith",cmd:"conj(x)",line:"Complex conjugate of x"},{name:"re",cat:"arith",cmd:"re(x)",line:"Real part of the complex number x"},{name:"im",cat:"arith",cmd:"im(x)",line:"Imaginary part of the complex number x"},{name:"arg",cat:"arith",cmd:"arg(x)",line:"Argument of the complex number x (-PI&lt;arg(x)&lt;=PI)"},{name:"gcd",cat:"arith",cmd:"gcd(a,b)",line:"Greatest Common Divisor of a and b (integers or polynomials)"},{name:"isprime",cat:"arith",cmd:"isprime(n[,t])",line:"Return 1 if n is prime, 0 if not. A probabilistic Miller Rabin test is done. If 1 is returned, the probability that n is not prime is 1-0.5^t. By default, t = 30"},{name:"nextprime",cat:"arith",cmd:"nextprime(n)",line:"Next pseudo prime following n. It is called a pseudo prime because a probabilistic primality test is done."},{name:"factor",cat:"arith",cmd:"factor(n)",line:"Factorization of n. Return a vector containing the prime factors of n sorted in increasing order"},{name:"invmod",cat:"arith",cmd:"invmod(x,m)",line:"Inverse of x modulo m"},{name:"pmod",cat:"arith",cmd:"pmod(a,b,m)",line:"a^b modulo m. a and m can be integers or polynomials"},{name:"exp",cat:"trans",cmd:"exp(x)",line:"Exponential of x"},{name:"log",cat:"trans",cmd:"log(x)",line:"Natural logarithm of x"},{name:"log2",cat:"trans",cmd:"log2(x)",line:"Logarithm of x in base 2"},{name:"log10",cat:"trans",cmd:"log10(x)",line:"Logarithm of x in base 10"},{name:"sin",cat:"trans",cmd:"sin(x)",line:"Sine of x"},{name:"cos",cat:"trans",cmd:"cos(x)",line:"Cosine of x"},{name:"tan",cat:"trans",cmd:"tan(x)",line:"Tangent of x"},{name:"asin",cat:"trans",cmd:"asin(x)",line:"Inverse sine of x"},{name:"acos",cat:"trans",cmd:"acos(x)",line:"Inverse cosine of x"},{name:"atan",cat:"trans",cmd:"atan(x)",line:"Inverse tangent of x"},{name:"atan2",cat:"trans",cmd:"atan2(y, x)",line:"Inverse tangent of y/x (same as arg(x+I*y), always in radians)"},{name:"sinc",cat:"trans",cmd:"sinc(x)",line:"Normalized sinc function, defined as sin(PI*x)/(PI*x)"},{name:"mat",cat:"linear",cmd:"mat(h, w)",line:"Zero filled matrix of h rows and w columns"},{name:"mathilbert",cat:"linear",cmd:"mathilbert(n)",line:"Hilbert matrix of order n"},{name:"vec",cat:"linear",cmd:"vec(n)",line:"Zero filled vector of n elements"},{name:"dp",cat:"linear",cmd:"dp(x,y)",line:"Dot product of vectors x and y"},{name:"cp",cat:"linear",cmd:"cp(x,y)",line:"Cross product of vectors x and y"},{name:"idn",cat:"linear",cmd:"idn(n)",line:"Identity matrix of order n"},{name:"det",cat:"linear",cmd:"det(a)",line:"Determinant of matrix a"},{name:"trans",cat:"linear",cmd:"trans(a)",line:"Transpose of the matrix or vector a"},{name:"trace",cat:"linear",cmd:"trace(a)",line:"Trace of matrix a"},{name:"diag",cat:"linear",cmd:"diag(v)",line:"Creates the diagonal matrix whose diagonal entries are the entries of the vector v"},{name:"charpoly",cat:"linear",cmd:"charpoly(x)",line:"characteristic polynomial of the matrix x (=det(x*Id-x))"},{name:"eigenvals",cat:"linear",cmd:"eigenvals(x)",line:"Return a vector containing the eigen values of the matrix x"},{name:"rank",cat:"linear",cmd:"rank(x)",line:"Rank of matrix x"},{name:"ker",cat:"linear",cmd:"ker(x)",line:"Basis of the kernel of matrix x"},{name:"deg",cat:"poly",cmd:"deg(p)",line:"Degree of the polynomial or rational function p. Return -(2^31 - 1) if p is the zero polynomial"},{name:"apply",cat:"poly",cmd:"apply(p, a)",line:"Evaluate the the polynomial, rational fonction or power series p by replacing the variable with a"},{name:"deriv",cat:"poly",cmd:"deriv(p)",line:"Derivative of the polynomial, rational fonction or power series p"},{name:"integ",cat:"poly",cmd:"integ(p)",line:"Formal integration of the polynomial or power series p. The constant term is set to zero"},{name:"polroots",cat:"poly",cmd:"polroots(p)",line:"Return a vector containing the roots of polynomial p."},{name:"plot",cat:"plot",cmd:"plot(var, func[,xmin]<br>[,xmax][,ymin][,ymax])",line:'Plot the function func. var is a string defining the variable. Example: plot("x", "sin(x)", -2, 2)'},{name:"solve",cat:"plot",cmd:"solve(var, f, x0)",line:'Find an approximation of the solution of f(var) = 0. x0 is the initial guess. Example: solve("x", "x^2-2", 1.5)'},{name:"convert",cat:"misc",cmd:"convert(x,unit1,unit2)",line:'Convert the quantity x expressed in unit1 to unit2. Example: <tt>convert(32, "inches", "cm")</tt> to convert 32 inches to centimeters. Unit names and abbreviations are known. All prefixes (e.g. kilo) are supported. The unit converter knowns about dimensions: <tt>convert(1, "km/h", "m/s")</tt> or <tt>convert(1, "km^2", "ft^2")</tt>.'},{name:"clear",cat:"misc",cmd:"clear()",line:"Clear the history"},{name:"typeof",cat:"misc",cmd:"typeof(x)",line:"Return a string identifying the type of x"},{name:"X",cat:"poly",cmd:"X",line:"Return the degree one polynomial 'X'"},{name:"I",cat:"arith",cmd:"I",line:"Square root of -1"},{name:"PI",cat:"trans",cmd:"PI",line:"Pi constant"},{name:"+",cat:"arith",cmd:"a+b",line:"Add two numbers, polynomials or matrixes"},{name:"-",cat:"arith",cmd:"a-b",line:"Substract two numbers, polynomials or matrixes"},{name:"*",cat:"arith",cmd:"a*b",line:"Multiply two numbers, polynomials or matrixes"},{name:"/",cat:"arith",cmd:"a/b",line:"Divide two numbers, polynomials or matrixes"},{name:"%",cat:"arith",cmd:"a%b",line:"Euclidian remainder of a divided by b, defined as 'a - floor(a/b) * b'"},{name:"&",cat:"bit",cmd:"a&amp;b",line:"Bitwise and between the integers a and b"},{name:"|",cat:"bit",cmd:"a|b",line:"Bitwise or between the integers a and b"},{name:"~",cat:"bit",cmd:"~n",line:"Bitwise not of the integer n"},{name:"^",cat:"arith",cmd:"a^b",line:"a raised to the power of y"},{name:"<<",cat:"bit",cmd:"a&lt;&lt;n",line:"Shift left by n bits. Equivalent to a*2^n"},{name:">>",cat:"bit",cmd:"a&gt;&gt;n",line:"Shift right by n bits. Equivalent to floor(a/2^n)"},{name:"[",cat:"linear",cmd:"[1,2,3]",line:"Enter a vector"},{name:"[",cat:"linear",cmd:"[[1,2][3,4]]",line:"Enter a matrix"},{name:"[",cat:"linear",cmd:"[",line:"x[n] is the nth element of vector x. x[n,m] is the matrix element on row n and colomn m. x[n1:n2] is the sub vector of x whose element indexes i are such as n1&lt;=i&lt;n2. x[n1:n2,m1:m2] similarily defines a sub matrix. x[n,m1:m2] (resp. x[n1:n2,m] extract a matrix row (resp. column)."},{name:"%",cat:"misc",cmd:"%{n}",line:"% recalls the last result. %n recalls a previous result identified by n."}];var Ol="Examples:"+"<table>"+'<tr><td class="help_cmd">1/3+1/2<td class="help_line">Exact results are given when dealing with fractions</tr>'+'<tr><td class="help_cmd">1.0/3<td class="help_line">The calculator falls back to floating point numbers when it cannot give an exact result or when you request it explicitely by using a decimal point</tr>'+'<tr><td class="help_cmd">plot("x","sin(x)")<td class="help_line">Plot the sin(x) function</tr>'+'<tr><td class="help_cmd">convert(2,"ft^2",<br>"m^2")<td class="help_line">Convert 2 square feet to square meters</tr>'+'<tr><td class="help_cmd">a=1<td class="help_line">Create a new variable "a"</tr>'+'<tr><td class="help_cmd">%<td class="help_line">Reuse last result (%n selects the nth result). Use the arrow keys {Up} and {Down} to reuse your last inputs.</tr>'+'<tr><td class="help_cmd">0x1a<td class="help_line">Hexadecimal number</tr>'+'<tr><td class="help_cmd">(1+2*I)^2<td class="help_line">Use "I" to enter complex numbers</tr>'+'<tr><td class="help_cmd">[1,2,3]*3<td class="help_line">vector operators</tr>'+'<tr><td class="help_cmd">det([[1,2][3, 4]])<td class="help_line">determinant of a 2x2 matrix</tr>'+'<tr><td class="help_cmd">(1+X)^5<td class="help_line">Use "X" to manipulate polynomials</tr>'+'<tr><td class="help_cmd">sin(X+O(X^6))<td class="help_line">Taylor expansion at order 5 of sin(x)</tr>'+"</table>";var Sl='NumCalc is a lightweight and easy to use scientific web calculator. It has the following features:'+'<ul>'+'<li>Arbitrary precision integers and fractions'+'<li>Graphical plot of arbitrary functions'+'<li>Numerical equation solving'+'<li>Unit conversions'+'<li>All computations are made locally in your browser. Your privacy is kept because no data is sent back to our servers.'+'</ul>'+"The more mathematically inclined users will also enjoy the following features:"+'<ul>'+'<li>Complex numbers including complex transcendental functions'+'<li>Polynomials, rational fonctions and Taylor series'+'<li>Linear algebra: matrix inversion, rank, eigen values and kernel extraction.'+'</ul>'+'<h2>Basic Use</h2>'+'You can type:'+'<div class="h_in">2*(1+3)</div>'+'which yields:'+'<div class="h_res">%1 = 8</div>'+'Then'+'<div class="h_in">3*%1</div>'+'which yields:'+'<div class="h_res">%2 = 24</div>'+'<tt>%1</tt> indicates that you reuse the first result. <tt>%</tt> alone is the last result.'+'<p><b>Fractions</b>: unlike other calculators, NumCalc tries to give exact results with fractions:'+'<div class="h_in">1/3+1/2</div>'+'which yields:'+'<div class="h_res">%1 = 5/6</div>'+'You can still get the approximative <em>floating point</em> result either by changing the output format (<tt>Real</tt> button on top) or by using a decimal point in your input:'+'<div class="h_in">1/3+1/2.0</div>'+'which yields:'+'<div class="h_res">%1 = 0.8333333333333333</div>'+'<p><b>Precision</b>: fractions and integers are not limited in size (except by the memory of your PC and the time you want to spent waiting for the result !). For example:'+'<div class="h_in">2^256</div>'+'yields the exact value of 2 to the power of 256.'+'<p><b>Functions</b>: all the usual mathematical functions are available such as: <tt>sqrt</tt> (square root), <tt>sin</tt>, <tt>cos</tt>, <tt>tab</tt>, <tt>log</tt> (logarithm in base e), <tt>exp</tt>, ... <br>Constants are referenced by upper case names, e.g. <tt>PI</tt> for the pi constant. Example:'+'<div class="h_in">sin(PI/8)</div>'+'<div class="h_res">%1 = 0.3826834323650898</div>'+'<p><b>Variables</b>: You can store your results in variables and reuse them in the following expressions:'+'<div class="h_in">a=sin(PI/8)</div>'+'<div class="h_in">b=sqrt(a)</div>'+'<p><b>Multiple expressions</b>: You can type several expressions on the same line by separating them with a <tt>;</tt>. If the line ends with a <tt>;</tt>, the result is not printed:'+'<div class="h_in">a=1+3;b=a^2+1;</div>'+'<p><b>Graphical plots</b>: expressions can easily be plotted:'+'<div class="h_in">plot("x", "sin(x)")</div>'+'You can specify the x range with additional parameters:'+'<div class="h_in">plot("x", "sin(x)/x",-2*PI,2*PI)</div>'+'The y range is found automatically, but you can also specify it:'+'<div class="h_in">plot("x", "sin(x)/x",-2*PI,2*PI,-1,1)</div>'+'<p><b>Equation solving</b>: NumCalc can find a numerical solution for single variable equations. Let say you want to solve cos(x)=x. You can plot the function cos(x)-x to have an idea of the position of the solution:'+'<div class="h_in">plot("x", "cos(x)-x")</div>'+'Then you can feed the calculator with the initial guess (say 0.8) to have a more precise solution:'+'<div class="h_in">solve("x", "cos(x)-x", 0.8)</div>'+'<div class="h_res">%1 = 0.7390851332151606</div>'+"<p><b>Unit convertion</b>: the calculator can convert between most physical units. It also knows how to combine units and tell whether they measure the same quantity (i.e. it does <em>dimensional analysis</em>). <br>You can specify units either by typing their full name (e.g. <tt>kilometers</tt> or by using the standar abbreviation (e.g. <tt>km</tt>). Units can be combined with <tt>*</tt>, <tt>^</tt> and <tt>/</tt> (e.g. <tt>km*h^-1</tt> or <tt>km/h</tt> are the same).<br>Example of unit conversions. Let's say you want to convert 10 meters per second to kilometers per hour:"+'<div class="h_in">convert(10, "m/s", "km/h")</div>'+'<div class="h_res">%1=36.0</div>'+'All the understood units and prefixes can be access in the online help.'+'<p><b>Binary arithmetic</b>: Use the <tt>0x</tt> prefix to enter hexadecimal numbers (e.g. <tt>0x1a</tt>). The <tt>0b</tt> prefix is used for binary numbers. You can change the output format to print hexadecimal integers (button <tt>Hexa</tt> on top).<br>'+'The calculator supports all standard bitwise logical and shift operators with a C like syntax. The notable exception is the <em>exclusive or</em> which is implemented with the <tt>xor(x,y)</tt> function because the <tt>^</tt> binary operator is reserved for powers.<br>'+"All binary arithmetic functions assume that integers are represented in two's complement notation. Hence a negative number can be seen as having an infinite number of '1' to the left.<br>"+'<h2>Advanced Use</h2>'+"You can stop reading this tutorial at this point if you don't intend to deal with more advanced mathematical objects<br>"+'<p><b>Complex numbers</b>: use the constant <tt>I</tt> to enter complex numbers:'+'<div class="h_in">(1+2*I)*(2+3*I)</div>'+'Most predefined functions deal with complex numbers:'+'<div class="h_in">exp(-I*PI)</div>'+'<p><b>Polynomials</b>: use the constant <tt>X</tt> to enter polynomials. Polynomials are represented internally as an array of their coefficient, so the actual variable used to represent them does not matter. In the calculator, the <tt>X</tt> variable is used by convention.'+'<div class="h_in">(1+X)^3</div>'+'<div class="h_res">%1 = X^3+3*X^2+3*X+1</div>'+'You can evaluate a polynomial at one point by using the <tt>apply</tt> function:'+'<div class="h_in">p=(1+X)^3;apply(p, 1/2)</div>'+'<tt>apply</tt> is also useful to substitute the X variable with another polynomial.<br>'+"A polynomial complex root finder based on the Laguerre's method is also included:"+'<div class="h_in">polroots(X^3-1)</div>'+'<p><b>Rational fonctions</b>: if you divide two polynomials you get a rational fonction and they can be manipulated as objects too:'+'<div class="h_in">deriv(1/(1+X)+2/(2+X)+3/(3+X))</div>'+'gets the derivative of the rational function. Note that integration of rational fonctions is not supported.'+'<p><b>Taylor series</b>: Taylor series are created with the <tt>O</tt> function. Taylor series can be seen as polynomials where all the terms of degrees >= O(X^n) are thrown again. To be more precise, the calculators handles Laurent series as well. It means that the exponents can be negative too.<br> Example of use:'+'<div class="h_in">(1+X+O(X^3))^(1/3)</div>'+'<div class="h_res">%1 = 1+1/3*X-1/9*X^2+O(X^3)</div>'+'Computes the order 2 taylor expansion of (1+x)^(1/3). The calculator also knows the Taylor expansion of most usual functions:'+'<div class="h_in">sin(X+O(X^4))</div>'+'<div class="h_res">%2 = X-1/6*X^3+O(X^4)</div>'+'<p><b>Linear algebra</b>: Vectors and matrixes are supported. Example:<br>'+'Enter a 3x3 matrix:'+'<div class="h_in">a=[[1,2,3][2,3,4][5,6,8]]</div>'+'Compute its determinant:'+'<div class="h_in">det(a)</div>'+'Inverse it:'+'<div class="h_in">inverse(a)</div>'+'Sub matrixes can be extracted and assigned to (same idea as the Python language):'+'<div class="h_in">a[1:3,1:3]</div>'+'<div class="h_res">%1 = [[3, 4][6, 8]]</div>'+'Extracts the 2x2 bottom left sub matrix of a.<br>'+'The functions <tt>rank</tt>, <tt>ker</tt>, <tt>charpoly</tt> and <tt>eigenvals</tt> yield respectively the rank, kernel, characteric polynomial and eigen values of a matrix.<br>'+'Vectors are also supported:'+'<div class="h_in">v=[1,2,3]</div>'+'When dealing with matrix multiplication, they are considered as column vectors, e.g:'+'<div class="h_in">a*v</div>'+'<div class="h_res">%2 = [14, 20, 41]</div>'+'<tt>dp(x,y) </tt> does the dot product of vectors. <tt>cp(x,y)</tt> does the 3 dimensional cross product of vectors. Most operations defined on numbers also work on vectors and matrixes component-wise.'+'<p><b>Primes</b>: <tt>isprime(n)</tt> and <tt>testprime(n)</tt> test if a number is prime using the Miller Rabin probabilistic test. <tt>factor(n)</tt> factorize a number using trial divisions.'+'<p><b>Modulo arithmetic</b>: although the calculator does not handle modulo N numbers as objects, it has some functions to help working with them: <tt>invmod(a,m)</tt> returns the inverse of a modulo m. <tt>pmod(a,b,m)</tt> compute a^b modulo m with less computational resources than doing <tt>a^b%m</tt>. It also works with polynomials. <br>'+'The fact that the modulo binary operator (<tt>%</tt>) applies component wise on polynomials can be used to make computation with polynomials whose coefficients are in <em>Z/nZ</em>, which helps in turns to make computations in Galois fields:'+'<div class="h_in">((1+X+X^3)*(1+X^3)%(1+X+X^4))%2</div>'+'<div class="h_res">%1 = X^3+X^2 </div>'+'Computes the product of two polynomials modulo <tt>(1+X+X^4)</tt> whose coeficients are in <em>F<sub>2</sub></em>'+'<h2>Credits</h2>'+'NumCalc borrows many ideas from <a href="http://pari.math.u-bordeaux.fr/">PARI/GP</a>, <a href="http://isthe.com/chongo/tech/comp/calc/">calc</a> and the old <a href="http://www.hpcalc.org/">HP48</a> calculator. NumCalc uses the jsbn library written by Tom Wu.'+'';var Tl='<div class="faq_q">Are my computations sent to a server ?</div>'+'<div class="faq_a">No. All computations are made locally in your browser. Hence NumCalc preserves your privacy.</div>'+'<div class="faq_q">Why aren\'t they buttons for all functions as in other PC calculators ?</div>'+'<div class="faq_a">Having buttons on screen is not useful as you already have ones on the keyboard ! We believe it is much faster and easier to enter calculus using the standard PC keys. </div>'+'<div class="faq_q">How can I reuse my previous inputs or results ?</div>'+'<div class="faq_a">With the {Up} and {Down} arrow keys you get your last inputs. With the <tt>%</tt> symbol, you get the previous result. With <tt>%N</tt>, you get the result number <em>N</em>.</div>'+'<div class="faq_q">How can I get a floating point (= real) result ?</div>'+'<div class="faq_a">NumCalc always tries to give an exact result, so it is normally a fraction. You can use the Output Format "Real" button to indicate that you wish to display fractions as real numbers (internally the result is still a fraction). If you wish to convert a fraction to a floating point result, you can add 0.0 to it: <tt>1/3+0.0</tt> . </div>'+'<div class="faq_q">Can I make symbolic calculus with NumCalc ?</div>'+'<div class="faq_a">NumCalc is not a generic symbolic calculator: it cannot simplify mathematical expressions. However, it does arbitrary precision computations involving integers, fractions, complex numbers, polynomial and matrixes, which are suffisent for many mathematical and engineering tasks. </div>'+'<div class="faq_q">How can I enter a polynomial ?</div>'+'<div class="faq_a">You must use the X variable. Try for example <tt>(1+X)^10</tt> . Polynomials are stored internally as array of coefficients. The fact that they are displayed as conventional expressions is a cosmetic feature.</div>'+'<div class="faq_q">How can I convert between units ?</div>'+'<div class="faq_a">Use the convert function. Example: <tt>convert(32, "inches", "cm")</tt> .</div>'+'<div class="faq_q">How can I get the Taylor expansion of a function ?</div>'+'<div class="faq_a">O(x^n) indicates that you are manipulating Taylor series. Example: <tt>sin(X+O(X^10))</tt> to get the Taylor expansion of sin(x) at order 9. </div>'+'<div class="faq_q">Can I get the derivative or integral of a function ?</div>'+'<div class="faq_a">NumCalc is not a symbolic calculator, so it cannot give you the result for arbitrary functions. However, as it manipulates polynomials, rational fonctions and power series, it can give the answer for them. Example: <tt>deriv((1+X^2)/(2+X))</tt>, <tt>integ(1+X^2)</tt></div>'+'<div class="faq_q">I cannot see plots. What\'s wrong ?</div>'+'<div class="faq_a">Your browser must support the <a href="http://developer.mozilla.org/en/docs/Drawing_Graphics_with_Canvas">Javascript Canvas</a>. Most recent browsers support them. We made test with Firefox 1.5 and 2.0 and MSIE 6.0</div>'+"";
