function Box(c,h,d,b,f,a){this.x=c;this.y=h;this.width=d;this.height=b;var e=1000000;this.accumX=this.accumY=0;this.x1=this.y1=-e;this.x2=this.y2=e;var g=QaDV.sub(f,a);if(g[0]>0){this.x1=this.x-g[0]}else{if(g[0]<0){this.x2=this.x-g[0]}}if(g[1]>0){this.y1=this.y-g[1]}else{if(g[1]<0){this.y2=this.y-g[1]}}}Box.prototype.get_intersection_region=function(a){var d=Math.max(this.x,a.x);var f=Math.max(this.y,a.y);var c=Math.min(this.x+this.width,a.x+a.width);var e=Math.min(this.y+this.height,a.y+a.height);if(c>d&&e>f){return[c-d,e-f]}else{return[0,0]}};LO={organize_labels:function(g){var e=[];for(var d=0,a=g.length;d<a;d++){var b=g[d];var f=new Box(b.x(),b.y(),b.width(),b.height(),b.closest_corner(),b.restricted_location);e.push(f)}var c=0;while(this.step(e)){c++}for(var d=0,a=g.length;d<a;d++){var b=g[d];var f=e[d];b.location[0]+=f.x-b.x();b.location[1]+=f.y-b.y()}},STEP_SIZE:0.6,hf:function(b){var a=30;var g=Math.floor(b.x/a);var f=Math.floor(b.y/a);var d=Math.floor((b.x+b.width)/a);var c=Math.floor((b.y+b.height)/a);var i=[];for(var h=g;h<=d;h++){for(var e=f;e<=c;e++){i.push(e*3217+h)}}return i},step:function(g){var s=false;var D=this.STEP_SIZE;var p=new Hash();for(var y=0,l=g.length;y<l;y++){var C=g[y];var f=this.hf(C);for(var w=0,q=f.length;w<q;w++){var n=p.get(f[w]);if(n==null){n=[];p.set(f[w],n)}n.push(y)}}var E=new Hash();var z=p.values();for(var y=0,l=z.length;y<l;y++){var A=z[y];for(var w=0,q=A.length;w<q;w++){var C=g[A[w]];for(var u=w+1,t=A.length;u<t;u++){var B=g[A[u]];var c=C.get_intersection_region(B);if(c[0]<1||c[1]<1){continue}var m=[A[w],A[u]];if(m[0]>m[1]){m=[m[1],m[0]]}E.set(m,[m,c])}}}var r=E.values();for(var y=0,l=r.length;y<l;y++){var h=r[y];var C=g[h[0][0]];var B=g[h[0][1]];var c=h[1];s=true;var e=[C.x,C.y];var d=[B.x,B.y];var o=QaDV.sub(e,d);if(o[0]==0){o[0]=1}if(o[1]==0){o[1]=1}if(c[1]<c[0]){c[0]=0}else{c[1]=0}o[0]=o[0]/Math.abs(o[0])*c[0];o[1]=o[1]/Math.abs(o[1])*c[1];C.accumX+=D*o[0];C.accumY+=D*o[1];B.accumX-=D*o[0];B.accumY-=D*o[1]}for(var y=0,l=g.length;y<l;y++){var C=g[y];C.x+=C.accumX;C.y+=C.accumY;C.x=Math.max(C.x,C.x1);C.x=Math.min(C.x,C.x2);C.y=Math.max(C.y,C.y1);C.y=Math.min(C.y,C.y2);C.accumX=0;C.accumY=0}return s}};