Browse Source

Merging with orgicus' branch.

Mr.doob 14 years ago
parent
commit
e72b82cda2
39 changed files with 20217 additions and 541 deletions
  1. BIN
      .DS_Store
  2. 167 167
      build/Three.js
  3. 168 168
      build/ThreeDebug.js
  4. 205 206
      build/ThreeExtras.js
  5. BIN
      examples/.DS_Store
  6. 176 0
      examples/blender249_dice.html
  7. 165 0
      examples/c4d_coloured_box.html
  8. 399 0
      examples/c4d_deltaInc_bot.html
  9. 134 0
      examples/c4d_deltaInc_nano_lights.html
  10. 173 0
      examples/c4d_dice.html
  11. 190 0
      examples/c4d_dodeca.html
  12. BIN
      examples/geometry/.DS_Store
  13. 162 0
      examples/geometry/BotArmL.js
  14. 190 0
      examples/geometry/BotArmR.js
  15. 563 0
      examples/geometry/BotLowerBody.js
  16. 920 0
      examples/geometry/BotUpperBody.js
  17. 87 0
      examples/geometry/Box6.js
  18. 70 0
      examples/geometry/Dice.js
  19. 61 0
      examples/geometry/Dice249UV.js
  20. 659 0
      examples/geometry/DodecaEdges.js
  21. 77 0
      examples/geometry/NanoArmL.js
  22. 77 0
      examples/geometry/NanoArmR.js
  23. 434 0
      examples/geometry/NanoBody.js
  24. 1072 0
      examples/geometry/Q5.js
  25. BIN
      examples/geometry/dice.gif
  26. 4394 0
      examples/obj/Q5/Q5.js
  27. 5790 0
      examples/obj/Q5/Q5.obj
  28. BIN
      examples/obj/nano/.DS_Store
  29. 953 0
      examples/obj/nano/Nano.js
  30. 1137 0
      examples/obj/nano/Nano.obj
  31. 575 0
      examples/obj/nano/nanoBody.js
  32. 609 0
      examples/obj/nano/nanoBody.obj
  33. BIN
      utils/exporters/.DS_Store
  34. BIN
      utils/exporters/blender/.DS_Store
  35. 150 0
      utils/exporters/blender/2.49/threejs_export.py
  36. BIN
      utils/exporters/cinema4d/.DS_Store
  37. 163 0
      utils/exporters/cinema4d/Three.js
  38. 189 0
      utils/exporters/cinema4d/export_to_three.js.py
  39. 108 0
      utils/exporters/cinema4d/template.html

BIN
.DS_Store


+ 167 - 167
build/Three.js

@@ -1,167 +1,167 @@
-// Three.js r29 - http://github.com/mrdoob/three.js
-var THREE=THREE||{};THREE.Color=function(a){this.autoUpdate=true;this.setHex(a)};
-THREE.Color.prototype={setRGB:function(a,c,e){this.r=a;this.g=c;this.b=e;if(this.autoUpdate){this.updateHex();this.updateStyleString()}},setHex:function(a){this.hex=~~a&16777215;if(this.autoUpdate){this.updateRGBA();this.updateStyleString()}},updateHex:function(){this.hex=~~(this.r*255)<<16^~~(this.g*255)<<8^~~(this.b*255)},updateRGBA:function(){this.r=(this.hex>>16&255)/255;this.g=(this.hex>>8&255)/255;this.b=(this.hex&255)/255},updateStyleString:function(){this.__styleString="rgb("+~~(this.r*255)+
-","+~~(this.g*255)+","+~~(this.b*255)+")"},toString:function(){return"THREE.Color ( r: "+this.r+", g: "+this.g+", b: "+this.b+", hex: "+this.hex+" )"}};THREE.Vector2=function(a,c){this.x=a||0;this.y=c||0};
-THREE.Vector2.prototype={set:function(a,c){this.x=a;this.y=c;return this},copy:function(a){this.x=a.x;this.y=a.y;return this},addSelf:function(a){this.x+=a.x;this.y+=a.y;return this},add:function(a,c){this.x=a.x+c.x;this.y=a.y+c.y;return this},subSelf:function(a){this.x-=a.x;this.y-=a.y;return this},sub:function(a,c){this.x=a.x-c.x;this.y=a.y-c.y;return this},multiplyScalar:function(a){this.x*=a;this.y*=a;return this},unit:function(){this.multiplyScalar(1/this.length());return this},length:function(){return Math.sqrt(this.x*
-this.x+this.y*this.y)},lengthSq:function(){return this.x*this.x+this.y*this.y},negate:function(){this.x=-this.x;this.y=-this.y;return this},clone:function(){return new THREE.Vector2(this.x,this.y)},toString:function(){return"THREE.Vector2 ("+this.x+", "+this.y+")"}};THREE.Vector3=function(a,c,e){this.x=a||0;this.y=c||0;this.z=e||0};
-THREE.Vector3.prototype={set:function(a,c,e){this.x=a;this.y=c;this.z=e;return this},copy:function(a){this.x=a.x;this.y=a.y;this.z=a.z;return this},add:function(a,c){this.x=a.x+c.x;this.y=a.y+c.y;this.z=a.z+c.z;return this},addSelf:function(a){this.x+=a.x;this.y+=a.y;this.z+=a.z;return this},addScalar:function(a){this.x+=a;this.y+=a;this.z+=a;return this},sub:function(a,c){this.x=a.x-c.x;this.y=a.y-c.y;this.z=a.z-c.z;return this},subSelf:function(a){this.x-=a.x;this.y-=a.y;this.z-=a.z;return this},
-cross:function(a,c){this.x=a.y*c.z-a.z*c.y;this.y=a.z*c.x-a.x*c.z;this.z=a.x*c.y-a.y*c.x;return this},crossSelf:function(a){var c=this.x,e=this.y,g=this.z;this.x=e*a.z-g*a.y;this.y=g*a.x-c*a.z;this.z=c*a.y-e*a.x;return this},multiplySelf:function(a){this.x*=a.x;this.y*=a.y;this.z*=a.z;return this},multiplyScalar:function(a){this.x*=a;this.y*=a;this.z*=a;return this},divideScalar:function(a){this.x/=a;this.y/=a;this.z/=a;return this},dot:function(a){return this.x*a.x+this.y*a.y+this.z*a.z},distanceTo:function(a){var c=
-this.x-a.x,e=this.y-a.y;a=this.z-a.z;return Math.sqrt(c*c+e*e+a*a)},distanceToSquared:function(a){var c=this.x-a.x,e=this.y-a.y;a=this.z-a.z;return c*c+e*e+a*a},length:function(){return Math.sqrt(this.x*this.x+this.y*this.y+this.z*this.z)},lengthSq:function(){return this.x*this.x+this.y*this.y+this.z*this.z},negate:function(){this.x=-this.x;this.y=-this.y;this.z=-this.z;return this},normalize:function(){var a=Math.sqrt(this.x*this.x+this.y*this.y+this.z*this.z);a>0?this.multiplyScalar(1/a):this.set(0,
-0,0);return this},setLength:function(a){return this.normalize().multiplyScalar(a)},isZero:function(){return Math.abs(this.x)<1.0E-4&&Math.abs(this.y)<1.0E-4&&Math.abs(this.z)<1.0E-4},clone:function(){return new THREE.Vector3(this.x,this.y,this.z)},toString:function(){return"THREE.Vector3 ( "+this.x+", "+this.y+", "+this.z+" )"}};THREE.Vector4=function(a,c,e,g){this.x=a||0;this.y=c||0;this.z=e||0;this.w=g||1};
-THREE.Vector4.prototype={set:function(a,c,e,g){this.x=a;this.y=c;this.z=e;this.w=g;return this},copy:function(a){this.x=a.x;this.y=a.y;this.z=a.z;this.w=a.w||1;return this},add:function(a,c){this.x=a.x+c.x;this.y=a.y+c.y;this.z=a.z+c.z;this.w=a.w+c.w;return this},addSelf:function(a){this.x+=a.x;this.y+=a.y;this.z+=a.z;this.w+=a.w;return this},sub:function(a,c){this.x=a.x-c.x;this.y=a.y-c.y;this.z=a.z-c.z;this.w=a.w-c.w;return this},subSelf:function(a){this.x-=a.x;this.y-=a.y;this.z-=a.z;this.w-=a.w;
-return this},multiplyScalar:function(a){this.x*=a;this.y*=a;this.z*=a;this.w*=a;return this},divideScalar:function(a){this.x/=a;this.y/=a;this.z/=a;this.w/=a;return this},lerpSelf:function(a,c){this.x+=(a.x-this.x)*c;this.y+=(a.y-this.y)*c;this.z+=(a.z-this.z)*c;this.w+=(a.w-this.w)*c},clone:function(){return new THREE.Vector4(this.x,this.y,this.z,this.w)},toString:function(){return"THREE.Vector4 ("+this.x+", "+this.y+", "+this.z+", "+this.w+")"}};
-THREE.Ray=function(a,c){this.origin=a||new THREE.Vector3;this.direction=c||new THREE.Vector3};
-THREE.Ray.prototype={intersectScene:function(a){var c,e,g=a.objects,h=[];a=0;for(c=g.length;a<c;a++){e=g[a];if(e instanceof THREE.Mesh)h=h.concat(this.intersectObject(e))}h.sort(function(q,m){return q.distance-m.distance});return h},intersectObject:function(a){function c(O,s,f,d){d=d.clone().subSelf(s);f=f.clone().subSelf(s);var i=O.clone().subSelf(s);O=d.dot(d);s=d.dot(f);d=d.dot(i);var o=f.dot(f);f=f.dot(i);i=1/(O*o-s*s);o=(o*d-s*f)*i;O=(O*f-s*d)*i;return o>0&&O>0&&o+O<1}var e,g,h,q,m,b,l,y,E,H,
-w,F=a.geometry,P=F.vertices,N=[];e=0;for(g=F.faces.length;e<g;e++){h=F.faces[e];H=this.origin.clone();w=this.direction.clone();q=a.matrix.transform(P[h.a].position.clone());m=a.matrix.transform(P[h.b].position.clone());b=a.matrix.transform(P[h.c].position.clone());l=h instanceof THREE.Face4?a.matrix.transform(P[h.d].position.clone()):null;y=a.rotationMatrix.transform(h.normal.clone());E=w.dot(y);if(E<0){y=y.dot((new THREE.Vector3).sub(q,H))/E;H=H.addSelf(w.multiplyScalar(y));if(h instanceof THREE.Face3){if(c(H,
-q,m,b)){h={distance:this.origin.distanceTo(H),point:H,face:h,object:a};N.push(h)}}else if(h instanceof THREE.Face4)if(c(H,q,m,l)||c(H,m,b,l)){h={distance:this.origin.distanceTo(H),point:H,face:h,object:a};N.push(h)}}}return N}};
-THREE.Rectangle=function(){function a(){q=g-c;m=h-e}var c,e,g,h,q,m,b=true;this.getX=function(){return c};this.getY=function(){return e};this.getWidth=function(){return q};this.getHeight=function(){return m};this.getLeft=function(){return c};this.getTop=function(){return e};this.getRight=function(){return g};this.getBottom=function(){return h};this.set=function(l,y,E,H){b=false;c=l;e=y;g=E;h=H;a()};this.addPoint=function(l,y){if(b){b=false;c=l;e=y;g=l;h=y}else{c=Math.min(c,l);e=Math.min(e,y);g=Math.max(g,
-l);h=Math.max(h,y)}a()};this.addRectangle=function(l){if(b){b=false;c=l.getLeft();e=l.getTop();g=l.getRight();h=l.getBottom()}else{c=Math.min(c,l.getLeft());e=Math.min(e,l.getTop());g=Math.max(g,l.getRight());h=Math.max(h,l.getBottom())}a()};this.inflate=function(l){c-=l;e-=l;g+=l;h+=l;a()};this.minSelf=function(l){c=Math.max(c,l.getLeft());e=Math.max(e,l.getTop());g=Math.min(g,l.getRight());h=Math.min(h,l.getBottom());a()};this.instersects=function(l){return Math.min(g,l.getRight())-Math.max(c,l.getLeft())>=
-0&&Math.min(h,l.getBottom())-Math.max(e,l.getTop())>=0};this.empty=function(){b=true;h=g=e=c=0;a()};this.isEmpty=function(){return b};this.toString=function(){return"THREE.Rectangle ( left: "+c+", right: "+g+", top: "+e+", bottom: "+h+", width: "+q+", height: "+m+" )"}};THREE.Matrix3=function(){this.m=[]};THREE.Matrix3.prototype={transpose:function(){var a;a=this.m[1];this.m[1]=this.m[3];this.m[3]=a;a=this.m[2];this.m[2]=this.m[6];this.m[6]=a;a=this.m[5];this.m[5]=this.m[7];this.m[7]=a;return this}};
-THREE.Matrix4=function(){};
-THREE.Matrix4.prototype={n11:1,n12:0,n13:0,n14:0,n21:0,n22:1,n23:0,n24:0,n31:0,n32:0,n33:1,n34:0,n41:0,n42:0,n43:0,n44:1,identity:function(){this.n11=1;this.n21=this.n14=this.n13=this.n12=0;this.n22=1;this.n32=this.n31=this.n24=this.n23=0;this.n33=1;this.n43=this.n42=this.n41=this.n34=0;this.n44=1},copy:function(a){this.n11=a.n11;this.n12=a.n12;this.n13=a.n13;this.n14=a.n14;this.n21=a.n21;this.n22=a.n22;this.n23=a.n23;this.n24=a.n24;this.n31=a.n31;this.n32=a.n32;this.n33=a.n33;this.n34=a.n34;this.n41=
-a.n41;this.n42=a.n42;this.n43=a.n43;this.n44=a.n44},lookAt:function(a,c,e){var g=new THREE.Vector3,h=new THREE.Vector3,q=new THREE.Vector3;q.sub(a,c).normalize();g.cross(e,q).normalize();h.cross(q,g).normalize();this.n11=g.x;this.n12=g.y;this.n13=g.z;this.n14=-g.dot(a);this.n21=h.x;this.n22=h.y;this.n23=h.z;this.n24=-h.dot(a);this.n31=q.x;this.n32=q.y;this.n33=q.z;this.n34=-q.dot(a);this.n43=this.n42=this.n41=0;this.n44=1},transform:function(a){var c=a.x,e=a.y,g=a.z,h=a.w||1;a.x=this.n11*c+this.n12*
-e+this.n13*g+this.n14*h;a.y=this.n21*c+this.n22*e+this.n23*g+this.n24*h;a.z=this.n31*c+this.n32*e+this.n33*g+this.n34*h;h=this.n41*c+this.n42*e+this.n43*g+this.n44*h;if(a.w)a.w=h;else{c=1/h;a.x*=c;a.y*=c;a.z*=c}return a},crossVector:function(a){var c=new THREE.Vector4;c.x=this.n11*a.x+this.n12*a.y+this.n13*a.z+this.n14*a.w;c.y=this.n21*a.x+this.n22*a.y+this.n23*a.z+this.n24*a.w;c.z=this.n31*a.x+this.n32*a.y+this.n33*a.z+this.n34*a.w;c.w=a.w?this.n41*a.x+this.n42*a.y+this.n43*a.z+this.n44*a.w:1;return c},
-multiply:function(a,c){this.n11=a.n11*c.n11+a.n12*c.n21+a.n13*c.n31+a.n14*c.n41;this.n12=a.n11*c.n12+a.n12*c.n22+a.n13*c.n32+a.n14*c.n42;this.n13=a.n11*c.n13+a.n12*c.n23+a.n13*c.n33+a.n14*c.n43;this.n14=a.n11*c.n14+a.n12*c.n24+a.n13*c.n34+a.n14*c.n44;this.n21=a.n21*c.n11+a.n22*c.n21+a.n23*c.n31+a.n24*c.n41;this.n22=a.n21*c.n12+a.n22*c.n22+a.n23*c.n32+a.n24*c.n42;this.n23=a.n21*c.n13+a.n22*c.n23+a.n23*c.n33+a.n24*c.n43;this.n24=a.n21*c.n14+a.n22*c.n24+a.n23*c.n34+a.n24*c.n44;this.n31=a.n31*c.n11+a.n32*
-c.n21+a.n33*c.n31+a.n34*c.n41;this.n32=a.n31*c.n12+a.n32*c.n22+a.n33*c.n32+a.n34*c.n42;this.n33=a.n31*c.n13+a.n32*c.n23+a.n33*c.n33+a.n34*c.n43;this.n34=a.n31*c.n14+a.n32*c.n24+a.n33*c.n34+a.n34*c.n44;this.n41=a.n41*c.n11+a.n42*c.n21+a.n43*c.n31+a.n44*c.n41;this.n42=a.n41*c.n12+a.n42*c.n22+a.n43*c.n32+a.n44*c.n42;this.n43=a.n41*c.n13+a.n42*c.n23+a.n43*c.n33+a.n44*c.n43;this.n44=a.n41*c.n14+a.n42*c.n24+a.n43*c.n34+a.n44*c.n44},multiplySelf:function(a){var c=this.n11,e=this.n12,g=this.n13,h=this.n14,
-q=this.n21,m=this.n22,b=this.n23,l=this.n24,y=this.n31,E=this.n32,H=this.n33,w=this.n34,F=this.n41,P=this.n42,N=this.n43,O=this.n44;this.n11=c*a.n11+e*a.n21+g*a.n31+h*a.n41;this.n12=c*a.n12+e*a.n22+g*a.n32+h*a.n42;this.n13=c*a.n13+e*a.n23+g*a.n33+h*a.n43;this.n14=c*a.n14+e*a.n24+g*a.n34+h*a.n44;this.n21=q*a.n11+m*a.n21+b*a.n31+l*a.n41;this.n22=q*a.n12+m*a.n22+b*a.n32+l*a.n42;this.n23=q*a.n13+m*a.n23+b*a.n33+l*a.n43;this.n24=q*a.n14+m*a.n24+b*a.n34+l*a.n44;this.n31=y*a.n11+E*a.n21+H*a.n31+w*a.n41;
-this.n32=y*a.n12+E*a.n22+H*a.n32+w*a.n42;this.n33=y*a.n13+E*a.n23+H*a.n33+w*a.n43;this.n34=y*a.n14+E*a.n24+H*a.n34+w*a.n44;this.n41=F*a.n11+P*a.n21+N*a.n31+O*a.n41;this.n42=F*a.n12+P*a.n22+N*a.n32+O*a.n42;this.n43=F*a.n13+P*a.n23+N*a.n33+O*a.n43;this.n44=F*a.n14+P*a.n24+N*a.n34+O*a.n44},multiplyScalar:function(a){this.n11*=a;this.n12*=a;this.n13*=a;this.n14*=a;this.n21*=a;this.n22*=a;this.n23*=a;this.n24*=a;this.n31*=a;this.n32*=a;this.n33*=a;this.n34*=a;this.n41*=a;this.n42*=a;this.n43*=a;this.n44*=
-a},determinant:function(){return this.n14*this.n23*this.n32*this.n41-this.n13*this.n24*this.n32*this.n41-this.n14*this.n22*this.n33*this.n41+this.n12*this.n24*this.n33*this.n41+this.n13*this.n22*this.n34*this.n41-this.n12*this.n23*this.n34*this.n41-this.n14*this.n23*this.n31*this.n42+this.n13*this.n24*this.n31*this.n42+this.n14*this.n21*this.n33*this.n42-this.n11*this.n24*this.n33*this.n42-this.n13*this.n21*this.n34*this.n42+this.n11*this.n23*this.n34*this.n42+this.n14*this.n22*this.n31*this.n43-
-this.n12*this.n24*this.n31*this.n43-this.n14*this.n21*this.n32*this.n43+this.n11*this.n24*this.n32*this.n43+this.n12*this.n21*this.n34*this.n43-this.n11*this.n22*this.n34*this.n43-this.n13*this.n22*this.n31*this.n44+this.n12*this.n23*this.n31*this.n44+this.n13*this.n21*this.n32*this.n44-this.n11*this.n23*this.n32*this.n44-this.n12*this.n21*this.n33*this.n44+this.n11*this.n22*this.n33*this.n44},transpose:function(){function a(c,e,g){var h=c[e];c[e]=c[g];c[g]=h}a(this,"n21","n12");a(this,"n31","n13");
-a(this,"n32","n23");a(this,"n41","n14");a(this,"n42","n24");a(this,"n43","n34");return this},clone:function(){var a=new THREE.Matrix4;a.n11=this.n11;a.n12=this.n12;a.n13=this.n13;a.n14=this.n14;a.n21=this.n21;a.n22=this.n22;a.n23=this.n23;a.n24=this.n24;a.n31=this.n31;a.n32=this.n32;a.n33=this.n33;a.n34=this.n34;a.n41=this.n41;a.n42=this.n42;a.n43=this.n43;a.n44=this.n44;return a},flatten:function(){return[this.n11,this.n21,this.n31,this.n41,this.n12,this.n22,this.n32,this.n42,this.n13,this.n23,this.n33,
-this.n43,this.n14,this.n24,this.n34,this.n44]},toString:function(){return"| "+this.n11+" "+this.n12+" "+this.n13+" "+this.n14+" |\n| "+this.n21+" "+this.n22+" "+this.n23+" "+this.n24+" |\n| "+this.n31+" "+this.n32+" "+this.n33+" "+this.n34+" |\n| "+this.n41+" "+this.n42+" "+this.n43+" "+this.n44+" |"}};THREE.Matrix4.translationMatrix=function(a,c,e){var g=new THREE.Matrix4;g.n14=a;g.n24=c;g.n34=e;return g};THREE.Matrix4.scaleMatrix=function(a,c,e){var g=new THREE.Matrix4;g.n11=a;g.n22=c;g.n33=e;return g};
-THREE.Matrix4.rotationXMatrix=function(a){var c=new THREE.Matrix4;c.n22=c.n33=Math.cos(a);c.n32=Math.sin(a);c.n23=-c.n32;return c};THREE.Matrix4.rotationYMatrix=function(a){var c=new THREE.Matrix4;c.n11=c.n33=Math.cos(a);c.n13=Math.sin(a);c.n31=-c.n13;return c};THREE.Matrix4.rotationZMatrix=function(a){var c=new THREE.Matrix4;c.n11=c.n22=Math.cos(a);c.n21=Math.sin(a);c.n12=-c.n21;return c};
-THREE.Matrix4.rotationAxisAngleMatrix=function(a,c){var e=new THREE.Matrix4,g=Math.cos(c),h=Math.sin(c),q=1-g,m=a.x,b=a.y,l=a.z;e.n11=q*m*m+g;e.n12=q*m*b-h*l;e.n13=q*m*l+h*b;e.n21=q*m*b+h*l;e.n22=q*b*b+g;e.n23=q*b*l-h*m;e.n31=q*m*l-h*b;e.n32=q*b*l+h*m;e.n33=q*l*l+g;return e};
-THREE.Matrix4.makeInvert=function(a){var c=new THREE.Matrix4;c.n11=a.n23*a.n34*a.n42-a.n24*a.n33*a.n42+a.n24*a.n32*a.n43-a.n22*a.n34*a.n43-a.n23*a.n32*a.n44+a.n22*a.n33*a.n44;c.n12=a.n14*a.n33*a.n42-a.n13*a.n34*a.n42-a.n14*a.n32*a.n43+a.n12*a.n34*a.n43+a.n13*a.n32*a.n44-a.n12*a.n33*a.n44;c.n13=a.n13*a.n24*a.n42-a.n14*a.n23*a.n42+a.n14*a.n22*a.n43-a.n12*a.n24*a.n43-a.n13*a.n22*a.n44+a.n12*a.n23*a.n44;c.n14=a.n14*a.n23*a.n32-a.n13*a.n24*a.n32-a.n14*a.n22*a.n33+a.n12*a.n24*a.n33+a.n13*a.n22*a.n34-a.n12*
-a.n23*a.n34;c.n21=a.n24*a.n33*a.n41-a.n23*a.n34*a.n41-a.n24*a.n31*a.n43+a.n21*a.n34*a.n43+a.n23*a.n31*a.n44-a.n21*a.n33*a.n44;c.n22=a.n13*a.n34*a.n41-a.n14*a.n33*a.n41+a.n14*a.n31*a.n43-a.n11*a.n34*a.n43-a.n13*a.n31*a.n44+a.n11*a.n33*a.n44;c.n23=a.n14*a.n23*a.n41-a.n13*a.n24*a.n41-a.n14*a.n21*a.n43+a.n11*a.n24*a.n43+a.n13*a.n21*a.n44-a.n11*a.n23*a.n44;c.n24=a.n13*a.n24*a.n31-a.n14*a.n23*a.n31+a.n14*a.n21*a.n33-a.n11*a.n24*a.n33-a.n13*a.n21*a.n34+a.n11*a.n23*a.n34;c.n31=a.n22*a.n34*a.n41-a.n24*a.n32*
-a.n41+a.n24*a.n31*a.n42-a.n21*a.n34*a.n42-a.n22*a.n31*a.n44+a.n21*a.n32*a.n44;c.n32=a.n14*a.n32*a.n41-a.n12*a.n34*a.n41-a.n14*a.n31*a.n42+a.n11*a.n34*a.n42+a.n12*a.n31*a.n44-a.n11*a.n32*a.n44;c.n33=a.n13*a.n24*a.n41-a.n14*a.n22*a.n41+a.n14*a.n21*a.n42-a.n11*a.n24*a.n42-a.n12*a.n21*a.n44+a.n11*a.n22*a.n44;c.n34=a.n14*a.n22*a.n31-a.n12*a.n24*a.n31-a.n14*a.n21*a.n32+a.n11*a.n24*a.n32+a.n12*a.n21*a.n34-a.n11*a.n22*a.n34;c.n41=a.n23*a.n32*a.n41-a.n22*a.n33*a.n41-a.n23*a.n31*a.n42+a.n21*a.n33*a.n42+a.n22*
-a.n31*a.n43-a.n21*a.n32*a.n43;c.n42=a.n12*a.n33*a.n41-a.n13*a.n32*a.n41+a.n13*a.n31*a.n42-a.n11*a.n33*a.n42-a.n12*a.n31*a.n43+a.n11*a.n32*a.n43;c.n43=a.n13*a.n22*a.n41-a.n12*a.n23*a.n41-a.n13*a.n21*a.n42+a.n11*a.n23*a.n42+a.n12*a.n21*a.n43-a.n11*a.n22*a.n43;c.n44=a.n12*a.n23*a.n31-a.n13*a.n22*a.n31+a.n13*a.n21*a.n32-a.n11*a.n23*a.n32-a.n12*a.n21*a.n33+a.n11*a.n22*a.n33;c.multiplyScalar(1/a.determinant());return c};
-THREE.Matrix4.makeInvert3x3=function(a){var c=a.flatten();a=new THREE.Matrix3;var e=c[10]*c[5]-c[6]*c[9],g=-c[10]*c[1]+c[2]*c[9],h=c[6]*c[1]-c[2]*c[5],q=-c[10]*c[4]+c[6]*c[8],m=c[10]*c[0]-c[2]*c[8],b=-c[6]*c[0]+c[2]*c[4],l=c[9]*c[4]-c[5]*c[8],y=-c[9]*c[0]+c[1]*c[8],E=c[5]*c[0]-c[1]*c[4];c=c[0]*e+c[1]*q+c[2]*l;if(c==0)throw"matrix not invertible";c=1/c;a.m[0]=c*e;a.m[1]=c*g;a.m[2]=c*h;a.m[3]=c*q;a.m[4]=c*m;a.m[5]=c*b;a.m[6]=c*l;a.m[7]=c*y;a.m[8]=c*E;return a};
-THREE.Matrix4.makeFrustum=function(a,c,e,g,h,q){var m,b,l;m=new THREE.Matrix4;b=2*h/(c-a);l=2*h/(g-e);a=(c+a)/(c-a);e=(g+e)/(g-e);g=-(q+h)/(q-h);h=-2*q*h/(q-h);m.n11=b;m.n12=0;m.n13=a;m.n14=0;m.n21=0;m.n22=l;m.n23=e;m.n24=0;m.n31=0;m.n32=0;m.n33=g;m.n34=h;m.n41=0;m.n42=0;m.n43=-1;m.n44=0;return m};THREE.Matrix4.makePerspective=function(a,c,e,g){var h;a=e*Math.tan(a*Math.PI/360);h=-a;return THREE.Matrix4.makeFrustum(h*c,a*c,h,a,e,g)};
-THREE.Matrix4.makeOrtho=function(a,c,e,g,h,q){var m,b,l,y;m=new THREE.Matrix4;b=c-a;l=e-g;y=q-h;a=(c+a)/b;e=(e+g)/l;h=(q+h)/y;m.n11=2/b;m.n12=0;m.n13=0;m.n14=-a;m.n21=0;m.n22=2/l;m.n23=0;m.n24=-e;m.n31=0;m.n32=0;m.n33=-2/y;m.n34=-h;m.n41=0;m.n42=0;m.n43=0;m.n44=1;return m};
-THREE.Vertex=function(a,c){this.position=a||new THREE.Vector3;this.positionWorld=new THREE.Vector3;this.positionScreen=new THREE.Vector4;this.normal=c||new THREE.Vector3;this.normalWorld=new THREE.Vector3;this.normalScreen=new THREE.Vector3;this.__visible=true};THREE.Vertex.prototype={toString:function(){return"THREE.Vertex ( position: "+this.position+", normal: "+this.normal+" )"}};
-THREE.Face3=function(a,c,e,g,h){this.a=a;this.b=c;this.c=e;this.centroid=new THREE.Vector3;this.normal=g instanceof THREE.Vector3?g:new THREE.Vector3;this.vertexNormals=g instanceof Array?g:[];this.material=h instanceof Array?h:[h]};THREE.Face3.prototype={toString:function(){return"THREE.Face3 ( "+this.a+", "+this.b+", "+this.c+" )"}};
-THREE.Face4=function(a,c,e,g,h,q){this.a=a;this.b=c;this.c=e;this.d=g;this.centroid=new THREE.Vector3;this.normal=h instanceof THREE.Vector3?h:new THREE.Vector3;this.vertexNormals=h instanceof Array?h:[];this.material=q instanceof Array?q:[q]};THREE.Face4.prototype={toString:function(){return"THREE.Face4 ( "+this.a+", "+this.b+", "+this.c+" "+this.d+" )"}};THREE.UV=function(a,c){this.u=a||0;this.v=c||0};
-THREE.UV.prototype={copy:function(a){this.u=a.u;this.v=a.v},toString:function(){return"THREE.UV ("+this.u+", "+this.v+")"}};THREE.Geometry=function(){this.vertices=[];this.faces=[];this.uvs=[]};
-THREE.Geometry.prototype={computeCentroids:function(){var a,c,e;a=0;for(c=this.faces.length;a<c;a++){e=this.faces[a];e.centroid.set(0,0,0);e.centroid.addSelf(this.vertices[e.a].position);e.centroid.addSelf(this.vertices[e.b].position);e.centroid.addSelf(this.vertices[e.c].position);if(e instanceof THREE.Face3)e.centroid.divideScalar(3);else if(e instanceof THREE.Face4){e.centroid.addSelf(this.vertices[e.d].position);e.centroid.divideScalar(4)}}},computeNormals:function(a){var c,e,g,h,q,m,b=new THREE.Vector3,
-l=new THREE.Vector3;g=0;for(h=this.vertices.length;g<h;g++){q=this.vertices[g];q.normal.set(0,0,0)}g=0;for(h=this.faces.length;g<h;g++){q=this.faces[g];if(a&&q.vertexNormals.length){b.set(0,0,0);c=0;for(e=q.normal.length;c<e;c++)b.addSelf(q.vertexNormals[c]);b.divideScalar(3)}else{c=this.vertices[q.a];e=this.vertices[q.b];m=this.vertices[q.c];b.sub(m.position,e.position);l.sub(c.position,e.position);b.crossSelf(l)}b.isZero()||b.normalize();q.normal.copy(b)}},computeBoundingBox:function(){if(this.vertices.length>
-0){this.bbox={x:[this.vertices[0].position.x,this.vertices[0].position.x],y:[this.vertices[0].position.y,this.vertices[0].position.y],z:[this.vertices[0].position.z,this.vertices[0].position.z]};for(var a=1,c=this.vertices.length;a<c;a++){vertex=this.vertices[a];if(vertex.position.x<this.bbox.x[0])this.bbox.x[0]=vertex.position.x;else if(vertex.position.x>this.bbox.x[1])this.bbox.x[1]=vertex.position.x;if(vertex.position.y<this.bbox.y[0])this.bbox.y[0]=vertex.position.y;else if(vertex.position.y>
-this.bbox.y[1])this.bbox.y[1]=vertex.position.y;if(vertex.position.z<this.bbox.z[0])this.bbox.z[0]=vertex.position.z;else if(vertex.position.z>this.bbox.z[1])this.bbox.z[1]=vertex.position.z}}},toString:function(){return"THREE.Geometry ( vertices: "+this.vertices+", faces: "+this.faces+" )"}};
-THREE.Camera=function(a,c,e,g){this.position=new THREE.Vector3(0,0,0);this.target={position:new THREE.Vector3(0,0,0)};this.up=new THREE.Vector3(0,1,0);this.matrix=new THREE.Matrix4;this.projectionMatrix=THREE.Matrix4.makePerspective(a,c,e,g);this.autoUpdateMatrix=true;this.updateMatrix=function(){this.matrix.lookAt(this.position,this.target.position,this.up)};this.toString=function(){return"THREE.Camera ( "+this.position+", "+this.target.position+" )"}};THREE.Light=function(a){this.color=new THREE.Color(a)};
-THREE.AmbientLight=function(a){THREE.Light.call(this,a)};THREE.AmbientLight.prototype=new THREE.Light;THREE.AmbientLight.prototype.constructor=THREE.AmbientLight;THREE.DirectionalLight=function(a,c){THREE.Light.call(this,a);this.position=new THREE.Vector3(0,1,0);this.intensity=c||1};THREE.DirectionalLight.prototype=new THREE.Light;THREE.DirectionalLight.prototype.constructor=THREE.DirectionalLight;
-THREE.PointLight=function(a,c){THREE.Light.call(this,a);this.position=new THREE.Vector3;this.intensity=c||1};THREE.DirectionalLight.prototype=new THREE.Light;THREE.DirectionalLight.prototype.constructor=THREE.PointLight;
-THREE.Object3D=function(){this.position=new THREE.Vector3;this.rotation=new THREE.Vector3;this.scale=new THREE.Vector3(1,1,1);this.matrix=new THREE.Matrix4;this.translationMatrix=new THREE.Matrix4;this.rotationMatrix=new THREE.Matrix4;this.scaleMatrix=new THREE.Matrix4;this.screen=new THREE.Vector3;this.autoUpdateMatrix=this.visible=true;this.updateMatrix=function(){this.matrixPosition=THREE.Matrix4.translationMatrix(this.position.x,this.position.y,this.position.z);this.rotationMatrix=THREE.Matrix4.rotationXMatrix(this.rotation.x);
-this.rotationMatrix.multiplySelf(THREE.Matrix4.rotationYMatrix(this.rotation.y));this.rotationMatrix.multiplySelf(THREE.Matrix4.rotationZMatrix(this.rotation.z));this.scaleMatrix=THREE.Matrix4.scaleMatrix(this.scale.x,this.scale.y,this.scale.z);this.matrix.copy(this.matrixPosition);this.matrix.multiplySelf(this.rotationMatrix);this.matrix.multiplySelf(this.scaleMatrix)}};THREE.Particle=function(a){THREE.Object3D.call(this);this.material=a instanceof Array?a:[a];this.autoUpdateMatrix=false};
-THREE.Particle.prototype=new THREE.Object3D;THREE.Particle.prototype.constructor=THREE.Particle;THREE.Line=function(a,c){THREE.Object3D.call(this);this.geometry=a;this.material=c instanceof Array?c:[c]};THREE.Line.prototype=new THREE.Object3D;THREE.Line.prototype.constructor=THREE.Line;
-THREE.Mesh=function(a,c,e){THREE.Object3D.call(this);this.geometry=a;this.material=c instanceof Array?c:[c];this.overdraw=this.doubleSided=this.flipSided=false;this.materialFaceGroup={};this.sortFacesByMaterial();e&&this.normalizeUVs();this.geometry.computeBoundingBox()};THREE.Mesh.prototype=new THREE.Object3D;THREE.Mesh.prototype.constructor=THREE.Mesh;
-THREE.Mesh.prototype.sortFacesByMaterial=function(){function a(E){var H=[];c=0;for(e=E.length;c<e;c++)E[c]==undefined?H.push("undefined"):H.push(E[c].toString());return H.join("_")}var c,e,g,h,q,m,b,l,y={};g=0;for(h=this.geometry.faces.length;g<h;g++){q=this.geometry.faces[g];m=q.material;b=a(m);if(y[b]==undefined)y[b]={hash:b,counter:0};l=y[b].hash+"_"+y[b].counter;if(this.materialFaceGroup[l]==undefined)this.materialFaceGroup[l]={faces:[],material:m,vertices:0};q=q instanceof THREE.Face3?3:4;if(this.materialFaceGroup[l].vertices+
-q>65535){y[b].counter+=1;l=y[b].hash+"_"+y[b].counter;if(this.materialFaceGroup[l]==undefined)this.materialFaceGroup[l]={faces:[],material:m,vertices:0}}this.materialFaceGroup[l].faces.push(g);this.materialFaceGroup[l].vertices+=q}};THREE.Mesh.prototype.normalizeUVs=function(){var a,c,e,g,h;a=0;for(c=this.geometry.uvs.length;a<c;a++){h=this.geometry.uvs[a];e=0;for(g=h.length;e<g;e++){if(h[e].u!=1)h[e].u-=Math.floor(h[e].u);if(h[e].v!=1)h[e].v-=Math.floor(h[e].v)}}};THREE.FlatShading=0;
-THREE.SmoothShading=1;THREE.NormalBlending=0;THREE.AdditiveBlending=1;THREE.SubtractiveBlending=2;
-THREE.LineBasicMaterial=function(a){this.color=new THREE.Color(16711680);this.opacity=1;this.blending=THREE.NormalBlending;this.linewidth=1;this.linejoin=this.linecap="round";if(a){a.color!==undefined&&this.color.setHex(a.color);if(a.opacity!==undefined)this.opacity=a.opacity;if(a.blending!==undefined)this.blending=a.blending;if(a.linewidth!==undefined)this.linewidth=a.linewidth;if(a.linecap!==undefined)this.linecap=a.linecap;if(a.linejoin!==undefined)this.linejoin=a.linejoin}this.toString=function(){return"THREE.LineBasicMaterial (<br/>color: "+
-this.color+"<br/>opacity: "+this.opacity+"<br/>blending: "+this.blending+"<br/>linewidth: "+this.linewidth+"<br/>linecap: "+this.linecap+"<br/>linejoin: "+this.linejoin+"<br/>)"}};
-THREE.MeshBasicMaterial=function(a){this.id=THREE.MeshBasicMaterialCounter.value++;this.color=new THREE.Color(15658734);this.env_map=this.map=null;this.combine=THREE.Multiply;this.reflectivity=1;this.refraction_ratio=0.98;this.opacity=1;this.shading=THREE.SmoothShading;this.blending=THREE.NormalBlending;this.wireframe=false;this.wireframe_linewidth=1;this.wireframe_linejoin=this.wireframe_linecap="round";if(a){a.color!==undefined&&this.color.setHex(a.color);if(a.map!==undefined)this.map=a.map;if(a.env_map!==
-undefined)this.env_map=a.env_map;if(a.combine!==undefined)this.combine=a.combine;if(a.reflectivity!==undefined)this.reflectivity=a.reflectivity;if(a.refraction_ratio!==undefined)this.refraction_ratio=a.refraction_ratio;if(a.opacity!==undefined)this.opacity=a.opacity;if(a.shading!==undefined)this.shading=a.shading;if(a.blending!==undefined)this.blending=a.blending;if(a.wireframe!==undefined)this.wireframe=a.wireframe;if(a.wireframe_linewidth!==undefined)this.wireframe_linewidth=a.wireframe_linewidth;
-if(a.wireframe_linecap!==undefined)this.wireframe_linecap=a.wireframe_linecap;if(a.wireframe_linejoin!==undefined)this.wireframe_linejoin=a.wireframe_linejoin}this.toString=function(){return"THREE.MeshBasicMaterial (<br/>id: "+this.id+"<br/>color: "+this.color+"<br/>map: "+this.map+"<br/>env_map: "+this.env_map+"<br/>combine: "+this.combine+"<br/>reflectivity: "+this.reflectivity+"<br/>refraction_ratio: "+this.refraction_ratio+"<br/>opacity: "+this.opacity+"<br/>blending: "+this.blending+"<br/>wireframe: "+
-this.wireframe+"<br/>wireframe_linewidth: "+this.wireframe_linewidth+"<br/>wireframe_linecap: "+this.wireframe_linecap+"<br/>wireframe_linejoin: "+this.wireframe_linejoin+"<br/>)"}};THREE.MeshBasicMaterialCounter={value:0};
-THREE.MeshLambertMaterial=function(a){this.id=THREE.MeshLambertMaterialCounter.value++;this.color=new THREE.Color(15658734);this.env_map=this.map=null;this.combine=THREE.Multiply;this.reflectivity=1;this.refraction_ratio=0.98;this.opacity=1;this.shading=THREE.SmoothShading;this.blending=THREE.NormalBlending;this.wireframe=false;this.wireframe_linewidth=1;this.wireframe_linejoin=this.wireframe_linecap="round";if(a){a.color!==undefined&&this.color.setHex(a.color);if(a.map!==undefined)this.map=a.map;
-if(a.env_map!==undefined)this.env_map=a.env_map;if(a.combine!==undefined)this.combine=a.combine;if(a.reflectivity!==undefined)this.reflectivity=a.reflectivity;if(a.refraction_ratio!==undefined)this.refraction_ratio=a.refraction_ratio;if(a.opacity!==undefined)this.opacity=a.opacity;if(a.shading!==undefined)this.shading=a.shading;if(a.blending!==undefined)this.blending=a.blending;if(a.wireframe!==undefined)this.wireframe=a.wireframe;if(a.wireframe_linewidth!==undefined)this.wireframe_linewidth=a.wireframe_linewidth;
-if(a.wireframe_linecap!==undefined)this.wireframe_linecap=a.wireframe_linecap;if(a.wireframe_linejoin!==undefined)this.wireframe_linejoin=a.wireframe_linejoin}this.toString=function(){return"THREE.MeshLambertMaterial (<br/>id: "+this.id+"<br/>color: "+this.color+"<br/>map: "+this.map+"<br/>env_map: "+this.env_map+"<br/>combine: "+this.combine+"<br/>reflectivity: "+this.reflectivity+"<br/>refraction_ratio: "+this.refraction_ratio+"<br/>opacity: "+this.opacity+"<br/>shading: "+this.shading+"<br/>blending: "+
-this.blending+"<br/>wireframe: "+this.wireframe+"<br/>wireframe_linewidth: "+this.wireframe_linewidth+"<br/>wireframe_linecap: "+this.wireframe_linecap+"<br/>wireframe_linejoin: "+this.wireframe_linejoin+"<br/> )"}};THREE.MeshLambertMaterialCounter={value:0};
-THREE.MeshPhongMaterial=function(a){this.id=THREE.MeshPhongMaterialCounter.value++;this.color=new THREE.Color(15658734);this.ambient=new THREE.Color(328965);this.specular=new THREE.Color(1118481);this.shininess=30;this.env_map=this.specular_map=this.map=null;this.combine=THREE.Multiply;this.reflectivity=1;this.refraction_ratio=0.98;this.opacity=1;this.shading=THREE.SmoothShading;this.blending=THREE.NormalBlending;this.wireframe=false;this.wireframe_linewidth=1;this.wireframe_linejoin=this.wireframe_linecap=
-"round";if(a){if(a.color!==undefined)this.color=new THREE.Color(a.color);if(a.ambient!==undefined)this.ambient=new THREE.Color(a.ambient);if(a.specular!==undefined)this.specular=new THREE.Color(a.specular);if(a.shininess!==undefined)this.shininess=a.shininess;if(a.map!==undefined)this.map=a.map;if(a.specular_map!==undefined)this.specular_map=a.specular_map;if(a.env_map!==undefined)this.env_map=a.env_map;if(a.combine!==undefined)this.combine=a.combine;if(a.reflectivity!==undefined)this.reflectivity=
-a.reflectivity;if(a.refraction_ratio!==undefined)this.refraction_ratio=a.refraction_ratio;if(a.opacity!==undefined)this.opacity=a.opacity;if(a.shading!==undefined)this.shading=a.shading;if(a.blending!==undefined)this.blending=a.blending;if(a.wireframe!==undefined)this.wireframe=a.wireframe;if(a.wireframe_linewidth!==undefined)this.wireframe_linewidth=a.wireframe_linewidth;if(a.wireframe_linecap!==undefined)this.wireframe_linecap=a.wireframe_linecap;if(a.wireframe_linejoin!==undefined)this.wireframe_linejoin=
-a.wireframe_linejoin}this.toString=function(){return"THREE.MeshPhongMaterial (<br/>id: "+this.id+"<br/>color: "+this.color+"<br/>ambient: "+this.ambient+"<br/>specular: "+this.specular+"<br/>shininess: "+this.shininess+"<br/>map: "+this.map+"<br/>specular_map: "+this.specular_map+"<br/>env_map: "+this.env_map+"<br/>combine: "+this.combine+"<br/>reflectivity: "+this.reflectivity+"<br/>refraction_ratio: "+this.refraction_ratio+"<br/>opacity: "+this.opacity+"<br/>shading: "+this.shading+"<br/>wireframe: "+
-this.wireframe+"<br/>wireframe_linewidth: "+this.wireframe_linewidth+"<br/>wireframe_linecap: "+this.wireframe_linecap+"<br/>wireframe_linejoin: "+this.wireframe_linejoin+"<br/>"+ +")"}};THREE.MeshPhongMaterialCounter={value:0};
-THREE.MeshDepthMaterial=function(a){this.near=1;this.far=1E3;this.opacity=1;this.blending=THREE.NormalBlending;if(a){if(a.near!==undefined)this.near=a.near;if(a.far!==undefined)this.far=a.far;if(a.opacity!==undefined)this.opacity=a.opacity;if(a.blending!==undefined)this.blending=a.blending}this.__2near=2*this.near;this.__farPlusNear=this.far+this.near;this.__farMinusNear=this.far-this.near;this.toString=function(){return"THREE.MeshDepthMaterial"}};
-THREE.MeshNormalMaterial=function(a){this.opacity=1;this.shading=THREE.FlatShading;this.blending=THREE.NormalBlending;if(a){if(a.opacity!==undefined)this.opacity=a.opacity;if(a.shading!==undefined)this.shading=a.shading;if(a.blending!==undefined)this.blending=a.blending}this.toString=function(){return"THREE.MeshNormalMaterial"}};THREE.MeshFaceMaterial=function(){this.toString=function(){return"THREE.MeshFaceMaterial"}};
-THREE.MeshCubeMaterial=function(a){this.id=THREE.MeshCubeMaterial.value++;this.env_map=null;this.blending=THREE.NormalBlending;if(a)if(a.env_map!==undefined)this.env_map=a.env_map;this.toString=function(){return"THREE.MeshCubeMaterial( id: "+this.id+"<br/>env_map: "+this.env_map+" )"}};THREE.MeshCubeMaterialCounter={value:0};
-THREE.MeshShaderMaterial=function(a){this.id=THREE.MeshShaderMaterialCounter.value++;this.vertex_shader=this.fragment_shader="void main() {}";this.uniforms={};this.shading=THREE.SmoothShading;this.blending=THREE.NormalBlending;this.wireframe=false;this.wireframe_linewidth=1;this.wireframe_linejoin=this.wireframe_linecap="round";if(a){if(a.fragment_shader!==undefined)this.fragment_shader=a.fragment_shader;if(a.vertex_shader!==undefined)this.vertex_shader=a.vertex_shader;if(a.uniforms!==undefined)this.uniforms=
-a.uniforms;if(a.shading!==undefined)this.shading=a.shading;if(a.blending!==undefined)this.blending=a.blending;if(a.wireframe!==undefined)this.wireframe=a.wireframe;if(a.wireframe_linewidth!==undefined)this.wireframe_linewidth=a.wireframe_linewidth;if(a.wireframe_linecap!==undefined)this.wireframe_linecap=a.wireframe_linecap;if(a.wireframe_linejoin!==undefined)this.wireframe_linejoin=a.wireframe_linejoin}this.toString=function(){return"THREE.MeshShaderMaterial (<br/>id: "+this.id+"<br/>blending: "+
-this.blending+"<br/>wireframe: "+this.wireframe+"<br/>wireframe_linewidth: "+this.wireframe_linewidth+"<br/>wireframe_linecap: "+this.wireframe_linecap+"<br/>wireframe_linejoin: "+this.wireframe_linejoin+"<br/>)"}};THREE.MeshShaderMaterialCounter={value:0};
-THREE.ParticleBasicMaterial=function(a){this.color=new THREE.Color(16711680);this.map=null;this.opacity=1;this.blending=THREE.NormalBlending;this.offset=new THREE.Vector2;if(a){a.color!==undefined&&this.color.setHex(a.color);if(a.map!==undefined)this.map=a.map;if(a.opacity!==undefined)this.opacity=a.opacity;if(a.blending!==undefined)this.blending=a.blending}this.toString=function(){return"THREE.ParticleBasicMaterial (<br/>color: "+this.color+"<br/>map: "+this.map+"<br/>opacity: "+this.opacity+"<br/>blending: "+
-this.blending+"<br/>)"}};THREE.ParticleCircleMaterial=function(a){this.color=new THREE.Color(16711680);this.opacity=1;this.blending=THREE.NormalBlending;if(a){a.color!==undefined&&this.color.setHex(a.color);if(a.opacity!==undefined)this.opacity=a.opacity;if(a.blending!==undefined)this.blending=a.blending}this.toString=function(){return"THREE.ParticleCircleMaterial (<br/>color: "+this.color+"<br/>opacity: "+this.opacity+"<br/>blending: "+this.blending+"<br/>)"}};
-THREE.ParticleDOMMaterial=function(a){this.domElement=a;this.toString=function(){return"THREE.ParticleDOMMaterial ( domElement: "+this.domElement+" )"}};THREE.Texture=function(a,c,e,g){this.image=a;this.loaded=false;this.mapping=c!==undefined?c:THREE.UVMapping;this.wrap_s=e!==undefined?e:THREE.ClampToEdge;this.wrap_t=g!==undefined?g:THREE.ClampToEdge;this.toString=function(){return"THREE.Texture (<br/>image: "+this.image+"<br/>wrap_s: "+this.wrap_s+"<br/>wrap_t: "+this.wrap_t+"<br/>)"}};
-THREE.UVMapping=0;THREE.ReflectionMap=1;THREE.RefractionMap=2;THREE.Multiply=0;THREE.Mix=1;THREE.Repeat=0;THREE.ClampToEdge=1;THREE.MirroredRepeat=2;THREE.TextureCube=function(a,c){this.image=a;this.mapping=c?c:THREE.ReflectionMap;this.toString=function(){return"THREE.TextureCube (<br/>image: "+this.image+"<br/>mapping: "+this.mapping+"<br/>)"}};
-THREE.Scene=function(){this.objects=[];this.lights=[];this.addObject=function(a){this.objects.push(a)};this.removeObject=function(a){a=this.objects.indexOf(a);a!==-1&&this.objects.splice(a,1)};this.addLight=function(a){this.lights.push(a)};this.removeLight=function(a){a=this.lights.indexOf(a);a!==-1&&this.lights.splice(a,1)};this.toString=function(){return"THREE.Scene ( "+this.objects+" )"}};
-THREE.Projector=function(){function a(f,d){var i=0,o=1,k=f.z+f.w,j=d.z+d.w,n=-f.z+f.w,t=-d.z+d.w;if(k>=0&&j>=0&&n>=0&&t>=0)return true;else if(k<0&&j<0||n<0&&t<0)return false;else{if(k<0)i=Math.max(i,k/(k-j));else if(j<0)o=Math.min(o,k/(k-j));if(n<0)i=Math.max(i,n/(n-t));else if(t<0)o=Math.min(o,n/(n-t));if(o<i)return false;else{f.lerpSelf(d,i);d.lerpSelf(f,1-o);return true}}}var c=null,e,g,h,q=[],m,b,l=[],y,E,H=[],w=new THREE.Vector4,F=new THREE.Matrix4,P=new THREE.Matrix4,N=new THREE.Vector4,O=
-new THREE.Vector4,s;this.projectScene=function(f,d){var i,o,k,j,n,t,Q,r,T,x,v,U,I,z,p,B,M;c=[];h=_face4Count=b=E=0;d.autoUpdateMatrix&&d.updateMatrix();F.multiply(d.projectionMatrix,d.matrix);Q=f.objects;i=0;for(o=Q.length;i<o;i++){r=Q[i];r.autoUpdateMatrix&&r.updateMatrix();T=r.matrix;x=r.rotationMatrix;v=r.material;U=r.overdraw;if(r instanceof THREE.Mesh){I=r.geometry.vertices;k=0;for(j=I.length;k<j;k++){z=I[k];z.positionWorld.copy(z.position);T.transform(z.positionWorld);p=z.positionScreen;p.copy(z.positionWorld);
-F.transform(p);p.multiplyScalar(1/p.w);z.__visible=p.z>0&&p.z<1}z=r.geometry.faces;k=0;for(j=z.length;k<j;k++){p=z[k];if(p instanceof THREE.Face3){n=I[p.a];t=I[p.b];B=I[p.c];if(n.__visible&&t.__visible&&B.__visible)if(r.doubleSided||r.flipSided!=(B.positionScreen.x-n.positionScreen.x)*(t.positionScreen.y-n.positionScreen.y)-(B.positionScreen.y-n.positionScreen.y)*(t.positionScreen.x-n.positionScreen.x)<0){e=q[h]=q[h]||new THREE.RenderableFace3;e.v1.positionWorld.copy(n.positionWorld);e.v2.positionWorld.copy(t.positionWorld);
-e.v3.positionWorld.copy(B.positionWorld);e.v1.positionScreen.copy(n.positionScreen);e.v2.positionScreen.copy(t.positionScreen);e.v3.positionScreen.copy(B.positionScreen);e.normalWorld.copy(p.normal);x.transform(e.normalWorld);e.centroidWorld.copy(p.centroid);T.transform(e.centroidWorld);e.centroidScreen.copy(e.centroidWorld);F.transform(e.centroidScreen);B=p.vertexNormals;s=e.vertexNormalsWorld;n=0;for(t=B.length;n<t;n++){M=s[n].copy(B[n]);x.transform(M)}e.z=e.centroidScreen.z;e.meshMaterial=v;e.faceMaterial=
-p.material;e.overdraw=U;if(r.geometry.uvs[k]){e.uvs[0]=r.geometry.uvs[k][0];e.uvs[1]=r.geometry.uvs[k][1];e.uvs[2]=r.geometry.uvs[k][2]}c.push(e);h++}}else if(p instanceof THREE.Face4){n=I[p.a];t=I[p.b];B=I[p.c];M=I[p.d];if(n.__visible&&t.__visible&&B.__visible&&M.__visible)if(r.doubleSided||r.flipSided!=((M.positionScreen.x-n.positionScreen.x)*(t.positionScreen.y-n.positionScreen.y)-(M.positionScreen.y-n.positionScreen.y)*(t.positionScreen.x-n.positionScreen.x)<0||(t.positionScreen.x-B.positionScreen.x)*
-(M.positionScreen.y-B.positionScreen.y)-(t.positionScreen.y-B.positionScreen.y)*(M.positionScreen.x-B.positionScreen.x)<0)){e=q[h]=q[h]||new THREE.RenderableFace3;e.v1.positionWorld.copy(n.positionWorld);e.v2.positionWorld.copy(t.positionWorld);e.v3.positionWorld.copy(M.positionWorld);e.v1.positionScreen.copy(n.positionScreen);e.v2.positionScreen.copy(t.positionScreen);e.v3.positionScreen.copy(M.positionScreen);e.normalWorld.copy(p.normal);x.transform(e.normalWorld);e.centroidWorld.copy(p.centroid);
-T.transform(e.centroidWorld);e.centroidScreen.copy(e.centroidWorld);F.transform(e.centroidScreen);e.z=e.centroidScreen.z;e.meshMaterial=v;e.faceMaterial=p.material;e.overdraw=U;if(r.geometry.uvs[k]){e.uvs[0]=r.geometry.uvs[k][0];e.uvs[1]=r.geometry.uvs[k][1];e.uvs[2]=r.geometry.uvs[k][3]}c.push(e);h++;g=q[h]=q[h]||new THREE.RenderableFace3;g.v1.positionWorld.copy(t.positionWorld);g.v2.positionWorld.copy(B.positionWorld);g.v3.positionWorld.copy(M.positionWorld);g.v1.positionScreen.copy(t.positionScreen);
-g.v2.positionScreen.copy(B.positionScreen);g.v3.positionScreen.copy(M.positionScreen);g.normalWorld.copy(e.normalWorld);g.centroidWorld.copy(e.centroidWorld);g.centroidScreen.copy(e.centroidScreen);g.z=g.centroidScreen.z;g.meshMaterial=v;g.faceMaterial=p.material;g.overdraw=U;if(r.geometry.uvs[k]){g.uvs[0]=r.geometry.uvs[k][1];g.uvs[1]=r.geometry.uvs[k][2];g.uvs[2]=r.geometry.uvs[k][3]}c.push(g);h++}}}}else if(r instanceof THREE.Line){P.multiply(F,T);I=r.geometry.vertices;z=I[0];z.positionScreen.copy(z.position);
-P.transform(z.positionScreen);k=1;for(j=I.length;k<j;k++){n=I[k];n.positionScreen.copy(n.position);P.transform(n.positionScreen);t=I[k-1];N.copy(n.positionScreen);O.copy(t.positionScreen);if(a(N,O)){N.multiplyScalar(1/N.w);O.multiplyScalar(1/O.w);m=l[b]=l[b]||new THREE.RenderableLine;m.v1.positionScreen.copy(N);m.v2.positionScreen.copy(O);m.z=Math.max(N.z,O.z);m.material=r.material;c.push(m);b++}}}else if(r instanceof THREE.Particle){w.set(r.position.x,r.position.y,r.position.z,1);F.transform(w);
-w.z/=w.w;if(w.z>0&&w.z<1){y=H[E]=H[E]||new THREE.RenderableParticle;y.x=w.x/w.w;y.y=w.y/w.w;y.z=w.z;y.rotation=r.rotation.z;y.scale.x=r.scale.x*Math.abs(y.x-(w.x+d.projectionMatrix.n11)/(w.w+d.projectionMatrix.n14));y.scale.y=r.scale.y*Math.abs(y.y-(w.y+d.projectionMatrix.n22)/(w.w+d.projectionMatrix.n24));y.material=r.material;c.push(y);E++}}}c.sort(function(Y,C){return C.z-Y.z});return c};this.unprojectVector=function(f,d){var i=new THREE.Matrix4;i.multiply(THREE.Matrix4.makeInvert(d.matrix),THREE.Matrix4.makeInvert(d.projectionMatrix));
-i.transform(f);return f}};
-THREE.DOMRenderer=function(){THREE.Renderer.call(this);var a=null,c=new THREE.Projector,e,g,h,q;this.domElement=document.createElement("div");this.setSize=function(m,b){e=m;g=b;h=e/2;q=g/2};this.render=function(m,b){var l,y,E,H,w,F,P,N;a=c.projectScene(m,b);l=0;for(y=a.length;l<y;l++){w=a[l];if(w instanceof THREE.RenderableParticle){P=w.x*h+h;N=w.y*q+q;E=0;for(H=w.material.length;E<H;E++){F=w.material[E];if(F instanceof THREE.ParticleDOMMaterial){F=F.domElement;F.style.left=P+"px";F.style.top=N+"px"}}}}}};
-THREE.CanvasRenderer=function(){function a(G,X,S,D){var u,J,$,R,W=G.lights;G=0;for(u=W.length;G<u;G++){J=W[G];$=J.color;R=J.intensity;if(J instanceof THREE.DirectionalLight){J=S.dot(J.position)*R;if(J>0){D.r+=$.r*J;D.g+=$.g*J;D.b+=$.b*J}}else if(J instanceof THREE.PointLight){ra.sub(J.position,X);ra.normalize();J=S.dot(ra)*R;if(J>0){D.r+=$.r*J;D.g+=$.g*J;D.b+=$.b*J}}}}function c(G,X,S,D,u,J){if(u.opacity!=0){q(u.opacity);m(u.blending);Q=G.positionScreen.x;r=G.positionScreen.y;T=X.positionScreen.x;
-x=X.positionScreen.y;v=S.positionScreen.x;U=S.positionScreen.y;var $=Q,R=r,W=T,aa=x,Z=v,ca=U;s.beginPath();s.moveTo($,R);s.lineTo(W,aa);s.lineTo(Z,ca);s.lineTo($,R);s.closePath();if(u instanceof THREE.MeshBasicMaterial)if(u.map)h(Q,r,T,x,v,U,u.map.image,D.uvs[0].u,D.uvs[0].v,D.uvs[1].u,D.uvs[1].v,D.uvs[2].u,D.uvs[2].v);else u.wireframe?e(u.color.__styleString,u.wireframe_linewidth):g(u.color.__styleString);else if(u instanceof THREE.MeshLambertMaterial){if(u.map&&!u.wireframe){h(Q,r,T,x,v,U,u.map.image,
-D.uvs[0].u,D.uvs[0].v,D.uvs[1].u,D.uvs[1].v,D.uvs[2].u,D.uvs[2].v);m(THREE.SubtractiveBlending)}if(da)if(u.shading==THREE.SmoothShading&&!u.wireframe){z.r=p.r=B.r=ea.r;z.g=p.g=B.g=ea.g;z.b=p.b=B.b=ea.b;a(J,D.v1.positionWorld,D.vertexNormalsWorld[0],z);a(J,D.v2.positionWorld,D.vertexNormalsWorld[1],p);a(J,D.v3.positionWorld,D.vertexNormalsWorld[2],B);M.r=(p.r+B.r)*0.5;M.g=(p.g+B.g)*0.5;M.b=(p.b+B.b)*0.5;V=b(z,p,B,M);h(Q,r,T,x,v,U,V,0,0,1,0,0,1)}else{fa.r=ea.r;fa.g=ea.g;fa.b=ea.b;a(J,D.centroidWorld,
-D.normalWorld,fa);I.r=u.color.r*fa.r;I.g=u.color.g*fa.g;I.b=u.color.b*fa.b;I.updateStyleString();u.wireframe?e(I.__styleString,u.wireframe_linewidth):g(I.__styleString)}else u.wireframe?e(u.color.__styleString,u.wireframe_linewidth):g(u.color.__styleString)}else if(u instanceof THREE.MeshDepthMaterial){Y=u.__2near;C=u.__farPlusNear;A=u.__farMinusNear;z.r=z.g=z.b=1-Y/(C-G.positionScreen.z*A);p.r=p.g=p.b=1-Y/(C-X.positionScreen.z*A);B.r=B.g=B.b=1-Y/(C-S.positionScreen.z*A);M.r=(p.r+B.r)*0.5;M.g=(p.g+
-B.g)*0.5;M.b=(p.b+B.b)*0.5;V=b(z,p,B,M);h(Q,r,T,x,v,U,V,0,0,1,0,0,1)}else if(u instanceof THREE.MeshNormalMaterial){I.r=l(D.normalWorld.x);I.g=l(D.normalWorld.y);I.b=l(D.normalWorld.z);I.updateStyleString();u.wireframe?e(I.__styleString,u.wireframe_linewidth):g(I.__styleString)}}}function e(G,X){if(i!=G)s.strokeStyle=i=G;if(k!=X)s.lineWidth=k=X;s.stroke()}function g(G){if(o!=G)s.fillStyle=o=G;s.fill()}function h(G,X,S,D,u,J,$,R,W,aa,Z,ca,ja){var ia=$.width-1,ga=$.height-1;R*=ia;W*=ga;aa*=ia;Z*=ga;
-ca*=ia;ja*=ga;S-=G;D-=X;u-=G;J-=X;aa-=R;Z-=W;ca-=R;ja-=W;ga=1/(aa*ja-ca*Z);ia=(ja*S-Z*u)*ga;Z=(ja*D-Z*J)*ga;S=(aa*u-ca*S)*ga;D=(aa*J-ca*D)*ga;G=G-ia*R-S*W;X=X-Z*R-D*W;s.save();s.transform(ia,Z,S,D,G,X);s.clip();s.drawImage($,0,0);s.restore()}function q(G){if(f!=G)s.globalAlpha=f=G}function m(G){if(d!=G){switch(G){case THREE.NormalBlending:s.globalCompositeOperation="source-over";break;case THREE.AdditiveBlending:s.globalCompositeOperation="lighter";break;case THREE.SubtractiveBlending:s.globalCompositeOperation=
-"darker"}d=G}}function b(G,X,S,D){ha[0]=~~(G.r*255);ha[1]=~~(G.g*255);ha[2]=~~(G.b*255);ha[4]=~~(X.r*255);ha[5]=~~(X.g*255);ha[6]=~~(X.b*255);ha[8]=~~(S.r*255);ha[9]=~~(S.g*255);ha[10]=~~(S.b*255);ha[12]=~~(D.r*255);ha[13]=~~(D.g*255);ha[14]=~~(D.b*255);na.putImageData(sa,0,0);qa.drawImage(oa,0,0);return pa}function l(G){return G<0?Math.min((1+G)*0.5,0.5):0.5+Math.min(G*0.5,0.5)}function y(G,X){var S=X.x-G.x,D=X.y-G.y,u=1/Math.sqrt(S*S+D*D);S*=u;D*=u;X.x+=S;X.y+=D;G.x-=S;G.y-=D}var E=null,H=new THREE.Projector,
-w=document.createElement("canvas"),F,P,N,O,s=w.getContext("2d"),f=1,d=0,i=null,o=null,k=1,j,n,t,Q,r,T,x,v,U,I=new THREE.Color,z=new THREE.Color,p=new THREE.Color,B=new THREE.Color,M=new THREE.Color,Y,C,A,V,ba=new THREE.Rectangle,K=new THREE.Rectangle,L=new THREE.Rectangle,da=false,fa=new THREE.Color,ea=new THREE.Color,ka=new THREE.Color,la=new THREE.Color,va=Math.PI*2,ra=new THREE.Vector3;new THREE.UV;new THREE.UV;new THREE.UV;new THREE.UV;var oa,na,sa,ha,pa,qa,ma=16;oa=document.createElement("canvas");
-oa.width=oa.height=2;na=oa.getContext("2d");na.fillStyle="rgba(0,0,0,1)";na.fillRect(0,0,2,2);sa=na.getImageData(0,0,2,2);ha=sa.data;pa=document.createElement("canvas");pa.width=pa.height=ma;qa=pa.getContext("2d");qa.translate(-ma/2,-ma/2);qa.scale(ma,ma);ma--;this.domElement=w;this.autoClear=true;this.setSize=function(G,X){F=G;P=X;N=F/2;O=P/2;w.width=F;w.height=P;ba.set(-N,-O,N,O)};this.clear=function(){if(!K.isEmpty()){K.inflate(1);K.minSelf(ba);s.clearRect(K.getX(),K.getY(),K.getWidth(),K.getHeight());
-K.empty()}};this.render=function(G,X){var S,D,u,J,$,R,W,aa;s.setTransform(1,0,0,-1,N,O);this.autoClear&&this.clear();E=H.projectScene(G,X);if(da=G.lights.length>0){$=G.lights;ea.setRGB(0,0,0);ka.setRGB(0,0,0);la.setRGB(0,0,0);S=0;for(D=$.length;S<D;S++){u=$[S];J=u.color;if(u instanceof THREE.AmbientLight){ea.r+=J.r;ea.g+=J.g;ea.b+=J.b}else if(u instanceof THREE.DirectionalLight){ka.r+=J.r;ka.g+=J.g;ka.b+=J.b}else if(u instanceof THREE.PointLight){la.r+=J.r;la.g+=J.g;la.b+=J.b}}}S=0;for(D=E.length;S<
-D;S++){u=E[S];L.empty();if(u instanceof THREE.RenderableParticle){j=u;j.x*=N;j.y*=O;J=0;for($=u.material.length;J<$;J++){R=j;W=u;var Z=u.material[J];if(Z.opacity!=0){q(Z.opacity);m(Z.blending);aa=void 0;var ca=void 0,ja=void 0,ia=void 0,ga=void 0,ta=void 0,ua=void 0;if(Z instanceof THREE.ParticleBasicMaterial){if(Z.map){ga=Z.map;ta=ga.width>>1;ua=ga.height>>1;ja=W.scale.x*N;ia=W.scale.y*O;aa=ja*ta;ca=ia*ua;L.set(R.x-aa,R.y-ca,R.x+aa,R.y+ca);if(ba.instersects(L)){s.save();s.translate(R.x,R.y);s.rotate(-W.rotation);
-s.scale(ja,-ia);s.translate(-ta,-ua);s.drawImage(ga,0,0);s.restore()}}}else if(Z instanceof THREE.ParticleCircleMaterial){if(da){fa.r=ea.r+ka.r+la.r;fa.g=ea.g+ka.g+la.g;fa.b=ea.b+ka.b+la.b;I.r=Z.color.r*fa.r;I.g=Z.color.g*fa.g;I.b=Z.color.b*fa.b;I.updateStyleString()}else I.__styleString=Z.color.__styleString;aa=W.scale.x*N;ca=W.scale.y*O;L.set(R.x-aa,R.y-ca,R.x+aa,R.y+ca);if(ba.instersects(L)){Z=I.__styleString;if(o!=Z)s.fillStyle=o=Z;s.save();s.translate(R.x,R.y);s.rotate(-W.rotation);s.scale(aa,
-ca);s.beginPath();s.arc(0,0,1,0,va,true);s.closePath();s.fill();s.restore()}}}}}else if(u instanceof THREE.RenderableLine){j=u.v1;n=u.v2;j.positionScreen.x*=N;j.positionScreen.y*=O;n.positionScreen.x*=N;n.positionScreen.y*=O;L.addPoint(j.positionScreen.x,j.positionScreen.y);L.addPoint(n.positionScreen.x,n.positionScreen.y);if(ba.instersects(L)){J=0;for($=u.material.length;J<$;){W=j;aa=n;R=u.material[J++];if(R.opacity!=0){q(R.opacity);m(R.blending);s.beginPath();s.moveTo(W.positionScreen.x,W.positionScreen.y);
-s.lineTo(aa.positionScreen.x,aa.positionScreen.y);s.closePath();if(R instanceof THREE.LineBasicMaterial){I.__styleString=R.color.__styleString;W=R.linewidth;if(k!=W)s.lineWidth=k=W;W=I.__styleString;if(i!=W)s.strokeStyle=i=W;s.stroke();L.inflate(R.linewidth*2)}}}}}else if(u instanceof THREE.RenderableFace3){j=u.v1;n=u.v2;t=u.v3;j.positionScreen.x*=N;j.positionScreen.y*=O;n.positionScreen.x*=N;n.positionScreen.y*=O;t.positionScreen.x*=N;t.positionScreen.y*=O;if(u.overdraw){y(j.positionScreen,n.positionScreen);
-y(n.positionScreen,t.positionScreen);y(t.positionScreen,j.positionScreen)}L.addPoint(j.positionScreen.x,j.positionScreen.y);L.addPoint(n.positionScreen.x,n.positionScreen.y);L.addPoint(t.positionScreen.x,t.positionScreen.y);if(ba.instersects(L)){J=0;for($=u.meshMaterial.length;J<$;){aa=u.meshMaterial[J++];if(aa instanceof THREE.MeshFaceMaterial){R=0;for(W=u.faceMaterial.length;R<W;)(aa=u.faceMaterial[R++])&&c(j,n,t,u,aa,G)}else c(j,n,t,u,aa,G)}}}K.addRectangle(L)}s.setTransform(1,0,0,1,0,0)}};
-THREE.SVGRenderer=function(){function a(p,B,M){var Y,C,A,V;Y=0;for(C=p.lights.length;Y<C;Y++){A=p.lights[Y];if(A instanceof THREE.DirectionalLight){V=B.normalWorld.dot(A.position)*A.intensity;if(V>0){M.r+=A.color.r*V;M.g+=A.color.g*V;M.b+=A.color.b*V}}else if(A instanceof THREE.PointLight){t.sub(A.position,B.centroidWorld);t.normalize();V=B.normalWorld.dot(t)*A.intensity;if(V>0){M.r+=A.color.r*V;M.g+=A.color.g*V;M.b+=A.color.b*V}}}}function c(p,B,M,Y,C,A){x=g(v++);x.setAttribute("d","M "+p.positionScreen.x+
-" "+p.positionScreen.y+" L "+B.positionScreen.x+" "+B.positionScreen.y+" L "+M.positionScreen.x+","+M.positionScreen.y+"z");if(C instanceof THREE.MeshBasicMaterial)d.__styleString=C.color.__styleString;else if(C instanceof THREE.MeshLambertMaterial)if(f){i.r=o.r;i.g=o.g;i.b=o.b;a(A,Y,i);d.r=C.color.r*i.r;d.g=C.color.g*i.g;d.b=C.color.b*i.b;d.updateStyleString()}else d.__styleString=C.color.__styleString;else if(C instanceof THREE.MeshDepthMaterial){n=1-C.__2near/(C.__farPlusNear-Y.z*C.__farMinusNear);
-d.setRGB(n,n,n)}else C instanceof THREE.MeshNormalMaterial&&d.setRGB(h(Y.normalWorld.x),h(Y.normalWorld.y),h(Y.normalWorld.z));C.wireframe?x.setAttribute("style","fill: none; stroke: "+d.__styleString+"; stroke-width: "+C.wireframe_linewidth+"; stroke-opacity: "+C.opacity+"; stroke-linecap: "+C.wireframe_linecap+"; stroke-linejoin: "+C.wireframe_linejoin):x.setAttribute("style","fill: "+d.__styleString+"; fill-opacity: "+C.opacity);b.appendChild(x)}function e(p,B,M,Y,C,A,V){x=g(v++);x.setAttribute("d",
-"M "+p.positionScreen.x+" "+p.positionScreen.y+" L "+B.positionScreen.x+" "+B.positionScreen.y+" L "+M.positionScreen.x+","+M.positionScreen.y+" L "+Y.positionScreen.x+","+Y.positionScreen.y+"z");if(A instanceof THREE.MeshBasicMaterial)d.__styleString=A.color.__styleString;else if(A instanceof THREE.MeshLambertMaterial)if(f){i.r=o.r;i.g=o.g;i.b=o.b;a(V,C,i);d.r=A.color.r*i.r;d.g=A.color.g*i.g;d.b=A.color.b*i.b;d.updateStyleString()}else d.__styleString=A.color.__styleString;else if(A instanceof THREE.MeshDepthMaterial){n=
-1-A.__2near/(A.__farPlusNear-C.z*A.__farMinusNear);d.setRGB(n,n,n)}else A instanceof THREE.MeshNormalMaterial&&d.setRGB(h(C.normalWorld.x),h(C.normalWorld.y),h(C.normalWorld.z));A.wireframe?x.setAttribute("style","fill: none; stroke: "+d.__styleString+"; stroke-width: "+A.wireframe_linewidth+"; stroke-opacity: "+A.opacity+"; stroke-linecap: "+A.wireframe_linecap+"; stroke-linejoin: "+A.wireframe_linejoin):x.setAttribute("style","fill: "+d.__styleString+"; fill-opacity: "+A.opacity);b.appendChild(x)}
-function g(p){if(Q[p]==null){Q[p]=document.createElementNS("http://www.w3.org/2000/svg","path");z==0&&Q[p].setAttribute("shape-rendering","crispEdges");return Q[p]}return Q[p]}function h(p){return p<0?Math.min((1+p)*0.5,0.5):0.5+Math.min(p*0.5,0.5)}var q=null,m=new THREE.Projector,b=document.createElementNS("http://www.w3.org/2000/svg","svg"),l,y,E,H,w,F,P,N,O=new THREE.Rectangle,s=new THREE.Rectangle,f=false,d=new THREE.Color(16777215),i=new THREE.Color(16777215),o=new THREE.Color(0),k=new THREE.Color(0),
-j=new THREE.Color(0),n,t=new THREE.Vector3,Q=[],r=[],T=[],x,v,U,I,z=1;this.domElement=b;this.autoClear=true;this.setQuality=function(p){switch(p){case "high":z=1;break;case "low":z=0}};this.setSize=function(p,B){l=p;y=B;E=l/2;H=y/2;b.setAttribute("viewBox",-E+" "+-H+" "+l+" "+y);b.setAttribute("width",l);b.setAttribute("height",y);O.set(-E,-H,E,H)};this.clear=function(){for(;b.childNodes.length>0;)b.removeChild(b.childNodes[0])};this.render=function(p,B){var M,Y,C,A,V,ba,K,L;this.autoClear&&this.clear();
-q=m.projectScene(p,B);I=U=v=0;if(f=p.lights.length>0){K=p.lights;o.setRGB(0,0,0);k.setRGB(0,0,0);j.setRGB(0,0,0);M=0;for(Y=K.length;M<Y;M++){C=K[M];A=C.color;if(C instanceof THREE.AmbientLight){o.r+=A.r;o.g+=A.g;o.b+=A.b}else if(C instanceof THREE.DirectionalLight){k.r+=A.r;k.g+=A.g;k.b+=A.b}else if(C instanceof THREE.PointLight){j.r+=A.r;j.g+=A.g;j.b+=A.b}}}M=0;for(Y=q.length;M<Y;M++){K=q[M];s.empty();if(K instanceof THREE.RenderableParticle){w=K;w.x*=E;w.y*=-H;C=0;for(A=K.material.length;C<A;C++)if(L=
-K.material[C]){V=w;ba=K;L=L;var da=U++;if(r[da]==null){r[da]=document.createElementNS("http://www.w3.org/2000/svg","circle");z==0&&r[da].setAttribute("shape-rendering","crispEdges")}x=r[da];x.setAttribute("cx",V.x);x.setAttribute("cy",V.y);x.setAttribute("r",ba.scale.x*E);if(L instanceof THREE.ParticleCircleMaterial){if(f){i.r=o.r+k.r+j.r;i.g=o.g+k.g+j.g;i.b=o.b+k.b+j.b;d.r=L.color.r*i.r;d.g=L.color.g*i.g;d.b=L.color.b*i.b;d.updateStyleString()}else d=L.color;x.setAttribute("style","fill: "+d.__styleString)}b.appendChild(x)}}else if(K instanceof
-THREE.RenderableLine){w=K.v1;F=K.v2;w.positionScreen.x*=E;w.positionScreen.y*=-H;F.positionScreen.x*=E;F.positionScreen.y*=-H;s.addPoint(w.positionScreen.x,w.positionScreen.y);s.addPoint(F.positionScreen.x,F.positionScreen.y);if(O.instersects(s)){C=0;for(A=K.material.length;C<A;)if(L=K.material[C++]){V=w;ba=F;L=L;da=I++;if(T[da]==null){T[da]=document.createElementNS("http://www.w3.org/2000/svg","line");z==0&&T[da].setAttribute("shape-rendering","crispEdges")}x=T[da];x.setAttribute("x1",V.positionScreen.x);
-x.setAttribute("y1",V.positionScreen.y);x.setAttribute("x2",ba.positionScreen.x);x.setAttribute("y2",ba.positionScreen.y);if(L instanceof THREE.LineBasicMaterial){d.__styleString=L.color.__styleString;x.setAttribute("style","fill: none; stroke: "+d.__styleString+"; stroke-width: "+L.linewidth+"; stroke-opacity: "+L.opacity+"; stroke-linecap: "+L.linecap+"; stroke-linejoin: "+L.linejoin);b.appendChild(x)}}}}else if(K instanceof THREE.RenderableFace3){w=K.v1;F=K.v2;P=K.v3;w.positionScreen.x*=E;w.positionScreen.y*=
--H;F.positionScreen.x*=E;F.positionScreen.y*=-H;P.positionScreen.x*=E;P.positionScreen.y*=-H;s.addPoint(w.positionScreen.x,w.positionScreen.y);s.addPoint(F.positionScreen.x,F.positionScreen.y);s.addPoint(P.positionScreen.x,P.positionScreen.y);if(O.instersects(s)){C=0;for(A=K.meshMaterial.length;C<A;){L=K.meshMaterial[C++];if(L instanceof THREE.MeshFaceMaterial){V=0;for(ba=K.faceMaterial.length;V<ba;)(L=K.faceMaterial[V++])&&c(w,F,P,K,L,p)}else L&&c(w,F,P,K,L,p)}}}else if(K instanceof THREE.RenderableFace4){w=
-K.v1;F=K.v2;P=K.v3;N=K.v4;w.positionScreen.x*=E;w.positionScreen.y*=-H;F.positionScreen.x*=E;F.positionScreen.y*=-H;P.positionScreen.x*=E;P.positionScreen.y*=-H;N.positionScreen.x*=E;N.positionScreen.y*=-H;s.addPoint(w.positionScreen.x,w.positionScreen.y);s.addPoint(F.positionScreen.x,F.positionScreen.y);s.addPoint(P.positionScreen.x,P.positionScreen.y);s.addPoint(N.positionScreen.x,N.positionScreen.y);if(O.instersects(s)){C=0;for(A=K.meshMaterial.length;C<A;){L=K.meshMaterial[C++];if(L instanceof
-THREE.MeshFaceMaterial){V=0;for(ba=K.faceMaterial.length;V<ba;)(L=K.faceMaterial[V++])&&e(w,F,P,N,K,L,p)}else L&&e(w,F,P,N,K,L,p)}}}}}};
-THREE.WebGLRenderer=function(a){function c(f,d){var i=b.createProgram();b.attachShader(i,h("fragment","#ifdef GL_ES\nprecision highp float;\n#endif\n"+f));b.attachShader(i,h("vertex","uniform mat4 objectMatrix;\nuniform mat4 modelViewMatrix;\nuniform mat4 projectionMatrix;\nuniform vec3 cameraPosition;\nattribute vec3 position;\nattribute vec3 normal;\nattribute vec2 uv;\n"+d));b.linkProgram(i);b.getProgramParameter(i,b.LINK_STATUS)||alert("Could not initialise shaders\nVALIDATE_STATUS: "+b.getProgramParameter(i,
-b.VALIDATE_STATUS)+", gl error ["+b.getError()+"]");i.uniforms={};return i}function e(f,d){var i,o,k;i=0;for(o=d.length;i<o;i++){k=d[i];f.uniforms[k]=b.getUniformLocation(f,k)}}function g(f){f.position=b.getAttribLocation(f,"position");b.enableVertexAttribArray(f.position);f.normal=b.getAttribLocation(f,"normal");b.enableVertexAttribArray(f.normal);f.uv=b.getAttribLocation(f,"uv");b.enableVertexAttribArray(f.uv)}function h(f,d){var i;if(f=="fragment")i=b.createShader(b.FRAGMENT_SHADER);else if(f==
-"vertex")i=b.createShader(b.VERTEX_SHADER);b.shaderSource(i,d);b.compileShader(i);if(!b.getShaderParameter(i,b.COMPILE_STATUS)){alert(b.getShaderInfoLog(i));return null}return i}function q(f){switch(f){case THREE.Repeat:return b.REPEAT;case THREE.ClampToEdge:return b.CLAMP_TO_EDGE;case THREE.MirroredRepeat:return b.MIRRORED_REPEAT}return 0}var m=document.createElement("canvas"),b,l,y,E=new THREE.Matrix4,H,w=new Float32Array(16),F=new Float32Array(16),P=new Float32Array(16),N=new Float32Array(9),O=
-new Float32Array(16);a=function(f,d){if(f){var i,o,k,j=pointLights=maxDirLights=maxPointLights=0;i=0;for(o=f.lights.length;i<o;i++){k=f.lights[i];k instanceof THREE.DirectionalLight&&j++;k instanceof THREE.PointLight&&pointLights++}if(pointLights+j<=d){maxDirLights=j;maxPointLights=pointLights}else{maxDirLights=Math.ceil(d*j/(pointLights+j));maxPointLights=d-maxDirLights}return{directional:maxDirLights,point:maxPointLights}}return{directional:1,point:d-1}}(a,4);this.domElement=m;this.autoClear=true;
-try{b=m.getContext("experimental-webgl",{antialias:true})}catch(s){}if(!b){alert("WebGL not supported");throw"cannot create webgl context";}b.clearColor(0,0,0,1);b.clearDepth(1);b.enable(b.DEPTH_TEST);b.depthFunc(b.LEQUAL);b.frontFace(b.CCW);b.cullFace(b.BACK);b.enable(b.CULL_FACE);b.enable(b.BLEND);b.blendFunc(b.ONE,b.ONE_MINUS_SRC_ALPHA);b.clearColor(0,0,0,0);(function(f,d){var i=[f?"#define MAX_DIR_LIGHTS "+f:"",d?"#define MAX_POINT_LIGHTS "+d:"","uniform bool enableLighting;\nuniform bool useRefract;\nuniform int pointLightNumber;\nuniform int directionalLightNumber;\nuniform vec3 ambientLightColor;",
-f?"uniform vec3 directionalLightColor[ MAX_DIR_LIGHTS ];":"",f?"uniform vec3 directionalLightDirection[ MAX_DIR_LIGHTS ];":"",d?"uniform vec3 pointLightColor[ MAX_POINT_LIGHTS ];":"",d?"uniform vec3 pointLightPosition[ MAX_POINT_LIGHTS ];":"","uniform mat4 viewMatrix;\nuniform mat3 normalMatrix;\nvarying vec3 vNormal;\nvarying vec2 vUv;\nvarying vec3 vLightWeighting;",d?"varying vec3 vPointLightVector[ MAX_POINT_LIGHTS ];":"","varying vec3 vViewPosition;\nvarying vec3 vReflect;\nuniform float mRefractionRatio;\nvoid main(void) {\nvec4 mPosition = objectMatrix * vec4( position, 1.0 );\nvViewPosition = cameraPosition - mPosition.xyz;\nvec3 nWorld = mat3( objectMatrix[0].xyz, objectMatrix[1].xyz, objectMatrix[2].xyz ) * normal;\nvec4 mvPosition = modelViewMatrix * vec4( position, 1.0 );\nvec3 transformedNormal = normalize( normalMatrix * normal );\nif ( !enableLighting ) {\nvLightWeighting = vec3( 1.0, 1.0, 1.0 );\n} else {\nvLightWeighting = ambientLightColor;",
-f?"for( int i = 0; i < MAX_DIR_LIGHTS; i++ ) {":"",f?"vec4 lDirection = viewMatrix * vec4( directionalLightDirection[ i ], 0.0 );":"",f?"float directionalLightWeighting = max( dot( transformedNormal, normalize(lDirection.xyz ) ), 0.0 );":"",f?"vLightWeighting += directionalLightColor[ i ] * directionalLightWeighting;":"",f?"}":"",d?"for( int i = 0; i < MAX_POINT_LIGHTS; i++ ) {":"",d?"vec4 lPosition = viewMatrix * vec4( pointLightPosition[ i ], 1.0 );":"",d?"vPointLightVector[ i ] = normalize( lPosition.xyz - mvPosition.xyz );":
-"",d?"float pointLightWeighting = max( dot( transformedNormal, vPointLightVector[ i ] ), 0.0 );":"",d?"vLightWeighting += pointLightColor[ i ] * pointLightWeighting;":"",d?"}":"","}\nvNormal = transformedNormal;\nvUv = uv;\nif ( useRefract ) {\nvReflect = refract( normalize(mPosition.xyz - cameraPosition), normalize(nWorld.xyz), mRefractionRatio );\n} else {\nvReflect = reflect( normalize(mPosition.xyz - cameraPosition), normalize(nWorld.xyz) );\n}\ngl_Position = projectionMatrix * mvPosition;\n}"].join("\n"),
-o=[f?"#define MAX_DIR_LIGHTS "+f:"",d?"#define MAX_POINT_LIGHTS "+d:"","uniform int material;\nuniform bool enableMap;\nuniform bool enableCubeMap;\nuniform bool mixEnvMap;\nuniform samplerCube tCube;\nuniform float mReflectivity;\nuniform sampler2D tMap;\nuniform vec4 mColor;\nuniform float mOpacity;\nuniform vec4 mAmbient;\nuniform vec4 mSpecular;\nuniform float mShininess;\nuniform float m2Near;\nuniform float mFarPlusNear;\nuniform float mFarMinusNear;\nuniform int pointLightNumber;\nuniform int directionalLightNumber;",
-f?"uniform mat4 viewMatrix;":"",f?"uniform vec3 directionalLightDirection[ MAX_DIR_LIGHTS ];":"","varying vec3 vNormal;\nvarying vec2 vUv;\nvarying vec3 vLightWeighting;",d?"varying vec3 vPointLightVector[ MAX_POINT_LIGHTS ];":"","varying vec3 vViewPosition;\nvarying vec3 vReflect;\nuniform vec3 cameraPosition;\nvoid main() {\nvec4 mapColor = vec4( 1.0, 1.0, 1.0, 1.0 );\nvec4 cubeColor = vec4( 1.0, 1.0, 1.0, 1.0 );\nif ( enableMap ) {\nmapColor = texture2D( tMap, vUv );\n}\nif ( enableCubeMap ) {\ncubeColor.r = textureCube( tCube, vec3( -vReflect.x, vReflect.yz ) ).r;\ncubeColor.g = textureCube( tCube, vec3( -vReflect.x + 0.005, vReflect.yz ) ).g;\ncubeColor.b = textureCube( tCube, vec3( -vReflect.x + 0.01, vReflect.yz ) ).b;\n}\nif ( material == 5 ) { \nvec3 wPos = cameraPosition - vViewPosition;\ngl_FragColor = textureCube( tCube, vec3( -wPos.x, wPos.yz ) );\n} else if ( material == 4 ) { \ngl_FragColor = vec4( 0.5*normalize( vNormal ) + vec3(0.5, 0.5, 0.5), mOpacity );\n} else if ( material == 3 ) { \nfloat w = 0.5;\ngl_FragColor = vec4( w, w, w, mOpacity );\n} else if ( material == 2 ) { \nvec3 normal = normalize( vNormal );\nvec3 viewPosition = normalize( vViewPosition );",
-d?"vec4 pointDiffuse  = vec4( 0.0, 0.0, 0.0, 0.0 );":"",d?"vec4 pointSpecular = vec4( 0.0, 0.0, 0.0, 0.0 );":"",d?"for( int i = 0; i < MAX_POINT_LIGHTS; i++ ) {":"",d?"vec3 pointVector = normalize( vPointLightVector[ i ] );":"",d?"vec3 pointHalfVector = normalize( vPointLightVector[ i ] + vViewPosition );":"",d?"float pointDotNormalHalf = dot( normal, pointHalfVector );":"",d?"float pointDiffuseWeight = max( dot( normal, pointVector ), 0.0 );":"",d?"float pointSpecularWeight = 0.0;":"",d?"if ( pointDotNormalHalf >= 0.0 )":
-"",d?"pointSpecularWeight = pow( pointDotNormalHalf, mShininess );":"",d?"pointDiffuse  += mColor * pointDiffuseWeight;":"",d?"pointSpecular += mSpecular * pointSpecularWeight;":"",d?"}":"",f?"vec4 dirDiffuse  = vec4( 0.0, 0.0, 0.0, 0.0 );":"",f?"vec4 dirSpecular = vec4( 0.0, 0.0, 0.0, 0.0 );":"",f?"for( int i = 0; i < MAX_DIR_LIGHTS; i++ ) {":"",f?"vec4 lDirection = viewMatrix * vec4( directionalLightDirection[ i ], 0.0 );":"",f?"vec3 dirVector = normalize( lDirection.xyz );":"",f?"vec3 dirHalfVector = normalize( lDirection.xyz + vViewPosition );":
-"",f?"float dirDotNormalHalf = dot( normal, dirHalfVector );":"",f?"float dirDiffuseWeight = max( dot( normal, dirVector ), 0.0 );":"",f?"float dirSpecularWeight = 0.0;":"",f?"if ( dirDotNormalHalf >= 0.0 )":"",f?"dirSpecularWeight = pow( dirDotNormalHalf, mShininess );":"",f?"dirDiffuse  += mColor * dirDiffuseWeight;":"",f?"dirSpecular += mSpecular * dirSpecularWeight;":"",f?"}":"","vec4 totalLight = mAmbient;",f?"totalLight += dirDiffuse + dirSpecular;":"",d?"totalLight += pointDiffuse + pointSpecular;":
-"","if ( mixEnvMap ) {\ngl_FragColor = vec4( mix( mapColor.rgb * totalLight.xyz * vLightWeighting, cubeColor.rgb, mReflectivity ), mapColor.a );\n} else {\ngl_FragColor = vec4( mapColor.rgb * cubeColor.rgb * totalLight.xyz * vLightWeighting, mapColor.a );\n}\n} else if ( material == 1 ) {\nif ( mixEnvMap ) {\ngl_FragColor = vec4( mix( mColor.rgb * mapColor.rgb * vLightWeighting, cubeColor.rgb, mReflectivity ), mColor.a * mapColor.a );\n} else {\ngl_FragColor = vec4( mColor.rgb * mapColor.rgb * cubeColor.rgb * vLightWeighting, mColor.a * mapColor.a );\n}\n} else {\nif ( mixEnvMap ) {\ngl_FragColor = mix( mColor * mapColor, cubeColor, mReflectivity );\n} else {\ngl_FragColor = mColor * mapColor * cubeColor;\n}\n}\n}"].join("\n");
-l=c(o,i);b.useProgram(l);e(l,["viewMatrix","modelViewMatrix","projectionMatrix","normalMatrix","objectMatrix","cameraPosition","enableLighting","ambientLightColor","material","mColor","mAmbient","mSpecular","mShininess","mOpacity","enableMap","tMap","enableCubeMap","tCube","mixEnvMap","mReflectivity","mRefractionRatio","useRefract","m2Near","mFarPlusNear","mFarMinusNear"]);f&&e(l,["directionalLightNumber","directionalLightColor","directionalLightDirection"]);d&&e(l,["pointLightNumber","pointLightColor",
-"pointLightPosition"]);b.uniform1i(l.uniforms.enableMap,0);b.uniform1i(l.uniforms.tMap,0);b.uniform1i(l.uniforms.enableCubeMap,0);b.uniform1i(l.uniforms.tCube,1);b.uniform1i(l.uniforms.mixEnvMap,0);b.uniform1i(l.uniforms.useRefract,0);g(l)})(a.directional,a.point);this.setSize=function(f,d){m.width=f;m.height=d;b.viewport(0,0,m.width,m.height)};this.clear=function(){b.clear(b.COLOR_BUFFER_BIT|b.DEPTH_BUFFER_BIT)};this.setupLights=function(f,d){var i,o,k,j,n,t=[],Q=[],r=[];j=[];n=[];b.uniform1i(f.uniforms.enableLighting,
-d.lights.length);i=0;for(o=d.lights.length;i<o;i++){k=d.lights[i];if(k instanceof THREE.AmbientLight)t.push(k);else if(k instanceof THREE.DirectionalLight)r.push(k);else k instanceof THREE.PointLight&&Q.push(k)}i=k=j=n=0;for(o=t.length;i<o;i++){k+=t[i].color.r;j+=t[i].color.g;n+=t[i].color.b}b.uniform3f(f.uniforms.ambientLightColor,k,j,n);j=[];n=[];i=0;for(o=r.length;i<o;i++){k=r[i];j.push(k.color.r*k.intensity);j.push(k.color.g*k.intensity);j.push(k.color.b*k.intensity);n.push(k.position.x);n.push(k.position.y);
-n.push(k.position.z)}if(r.length){b.uniform1i(f.uniforms.directionalLightNumber,r.length);b.uniform3fv(f.uniforms.directionalLightDirection,n);b.uniform3fv(f.uniforms.directionalLightColor,j)}j=[];n=[];i=0;for(o=Q.length;i<o;i++){k=Q[i];j.push(k.color.r*k.intensity);j.push(k.color.g*k.intensity);j.push(k.color.b*k.intensity);n.push(k.position.x);n.push(k.position.y);n.push(k.position.z)}if(Q.length){b.uniform1i(f.uniforms.pointLightNumber,Q.length);b.uniform3fv(f.uniforms.pointLightPosition,n);b.uniform3fv(f.uniforms.pointLightColor,
-j)}};this.createBuffers=function(f,d){var i,o,k,j,n,t,Q,r,T=[],x=[],v=[],U=[],I=[],z=0,p=f.materialFaceGroup[d],B;k=false;i=0;for(o=f.material.length;i<o;i++){meshMaterial=f.material[i];if(meshMaterial instanceof THREE.MeshFaceMaterial){n=0;for(B=p.material.length;n<B;n++)if(p.material[n]&&p.material[n].shading!=undefined&&p.material[n].shading==THREE.SmoothShading){k=true;break}}else if(meshMaterial&&meshMaterial.shading!=undefined&&meshMaterial.shading==THREE.SmoothShading){k=true;break}if(k)break}B=
-k;i=0;for(o=p.faces.length;i<o;i++){k=p.faces[i];j=f.geometry.faces[k];n=j.vertexNormals;faceNormal=j.normal;k=f.geometry.uvs[k];if(j instanceof THREE.Face3){t=f.geometry.vertices[j.a].position;Q=f.geometry.vertices[j.b].position;r=f.geometry.vertices[j.c].position;v.push(t.x,t.y,t.z);v.push(Q.x,Q.y,Q.z);v.push(r.x,r.y,r.z);if(n.length==3&&B)for(j=0;j<3;j++)U.push(n[j].x,n[j].y,n[j].z);else for(j=0;j<3;j++)U.push(faceNormal.x,faceNormal.y,faceNormal.z);if(k)for(j=0;j<3;j++)I.push(k[j].u,k[j].v);T.push(z,
-z+1,z+2);x.push(z,z+1);x.push(z,z+2);x.push(z+1,z+2);z+=3}else if(j instanceof THREE.Face4){t=f.geometry.vertices[j.a].position;Q=f.geometry.vertices[j.b].position;r=f.geometry.vertices[j.c].position;j=f.geometry.vertices[j.d].position;v.push(t.x,t.y,t.z);v.push(Q.x,Q.y,Q.z);v.push(r.x,r.y,r.z);v.push(j.x,j.y,j.z);if(n.length==4&&B)for(j=0;j<4;j++)U.push(n[j].x,n[j].y,n[j].z);else for(j=0;j<4;j++)U.push(faceNormal.x,faceNormal.y,faceNormal.z);if(k)for(j=0;j<4;j++)I.push(k[j].u,k[j].v);T.push(z,z+
-1,z+2);T.push(z,z+2,z+3);x.push(z,z+1);x.push(z,z+2);x.push(z,z+3);x.push(z+1,z+2);x.push(z+2,z+3);z+=4}}if(v.length){p.__webGLVertexBuffer=b.createBuffer();b.bindBuffer(b.ARRAY_BUFFER,p.__webGLVertexBuffer);b.bufferData(b.ARRAY_BUFFER,new Float32Array(v),b.STATIC_DRAW);p.__webGLNormalBuffer=b.createBuffer();b.bindBuffer(b.ARRAY_BUFFER,p.__webGLNormalBuffer);b.bufferData(b.ARRAY_BUFFER,new Float32Array(U),b.STATIC_DRAW);p.__webGLUVBuffer=b.createBuffer();b.bindBuffer(b.ARRAY_BUFFER,p.__webGLUVBuffer);
-b.bufferData(b.ARRAY_BUFFER,new Float32Array(I),b.STATIC_DRAW);p.__webGLFaceBuffer=b.createBuffer();b.bindBuffer(b.ELEMENT_ARRAY_BUFFER,p.__webGLFaceBuffer);b.bufferData(b.ELEMENT_ARRAY_BUFFER,new Uint16Array(T),b.STATIC_DRAW);p.__webGLLineBuffer=b.createBuffer();b.bindBuffer(b.ELEMENT_ARRAY_BUFFER,p.__webGLLineBuffer);b.bufferData(b.ELEMENT_ARRAY_BUFFER,new Uint16Array(x),b.STATIC_DRAW);p.__webGLFaceCount=T.length;p.__webGLLineCount=x.length}};this.renderBuffer=function(f,d,i){var o,k,j,n,t,Q,r,
-T,x,v;if(d instanceof THREE.MeshShaderMaterial){if(!d.program){d.program=c(d.fragment_shader,d.vertex_shader);t=["viewMatrix","modelViewMatrix","projectionMatrix","normalMatrix","objectMatrix","cameraPosition"];for(v in d.uniforms)t.push(v);e(d.program,t);g(d.program)}v=d.program}else v=l;if(v!=y){b.useProgram(v);y=v}if(d instanceof THREE.MeshShaderMaterial){t=v;T=d.uniforms;var U,I;for(k in T){U=T[k].type;x=T[k].value;I=t.uniforms[k];if(U=="i")b.uniform1i(I,x);else if(U=="f")b.uniform1f(I,x);else if(U==
-"t"){b.uniform1i(I,x);x=T[k].texture;if(x instanceof THREE.TextureCube&&x.image.length==6){if(!x.image.__webGLTextureCube&&!x.image.__cubeMapInitialized&&x.image.loadCount==6){x.image.__webGLTextureCube=b.createTexture();b.bindTexture(b.TEXTURE_CUBE_MAP,x.image.__webGLTextureCube);b.texParameteri(b.TEXTURE_CUBE_MAP,b.TEXTURE_WRAP_S,b.CLAMP_TO_EDGE);b.texParameteri(b.TEXTURE_CUBE_MAP,b.TEXTURE_WRAP_T,b.CLAMP_TO_EDGE);b.texParameteri(b.TEXTURE_CUBE_MAP,b.TEXTURE_MAG_FILTER,b.LINEAR);b.texParameteri(b.TEXTURE_CUBE_MAP,
-b.TEXTURE_MIN_FILTER,b.LINEAR_MIPMAP_LINEAR);for(U=0;U<6;++U)b.texImage2D(b.TEXTURE_CUBE_MAP_POSITIVE_X+U,0,b.RGBA,b.RGBA,b.UNSIGNED_BYTE,x.image[U]);b.generateMipmap(b.TEXTURE_CUBE_MAP);b.bindTexture(b.TEXTURE_CUBE_MAP,null);x.image.__cubeMapInitialized=true}b.activeTexture(b.TEXTURE1);b.bindTexture(b.TEXTURE_CUBE_MAP,x.image.__webGLTextureCube)}}}this.loadCamera(v,f);this.loadMatrices(v)}else if(d instanceof THREE.MeshPhongMaterial||d instanceof THREE.MeshLambertMaterial||d instanceof THREE.MeshBasicMaterial){f=
-d.color;o=d.opacity;j=d.wireframe;n=d.wireframe_linewidth;Q=d.map;r=d.env_map;t=d.combine==THREE.Mix;k=d.reflectivity;x=d.env_map&&d.env_map.mapping==THREE.RefractionMap;T=d.refraction_ratio;b.uniform4f(v.uniforms.mColor,f.r*o,f.g*o,f.b*o,o);b.uniform1i(v.uniforms.mixEnvMap,t);b.uniform1f(v.uniforms.mReflectivity,k);b.uniform1i(v.uniforms.useRefract,x);b.uniform1f(v.uniforms.mRefractionRatio,T)}if(d instanceof THREE.MeshNormalMaterial){o=d.opacity;b.uniform1f(v.uniforms.mOpacity,o);b.uniform1i(v.uniforms.material,
-4)}else if(d instanceof THREE.MeshDepthMaterial){o=d.opacity;j=d.wireframe;n=d.wireframe_linewidth;b.uniform1f(v.uniforms.mOpacity,o);b.uniform1f(v.uniforms.m2Near,d.__2near);b.uniform1f(v.uniforms.mFarPlusNear,d.__farPlusNear);b.uniform1f(v.uniforms.mFarMinusNear,d.__farMinusNear);b.uniform1i(v.uniforms.material,3)}else if(d instanceof THREE.MeshPhongMaterial){f=d.ambient;k=d.specular;t=d.shininess;b.uniform4f(v.uniforms.mAmbient,f.r,f.g,f.b,o);b.uniform4f(v.uniforms.mSpecular,k.r,k.g,k.b,o);b.uniform1f(v.uniforms.mShininess,
-t);b.uniform1i(v.uniforms.material,2)}else if(d instanceof THREE.MeshLambertMaterial)b.uniform1i(v.uniforms.material,1);else if(d instanceof THREE.MeshBasicMaterial)b.uniform1i(v.uniforms.material,0);else if(d instanceof THREE.MeshCubeMaterial){b.uniform1i(v.uniforms.material,5);r=d.env_map}if(Q){if(!d.map.__webGLTexture&&d.map.image.loaded){d.map.__webGLTexture=b.createTexture();b.bindTexture(b.TEXTURE_2D,d.map.__webGLTexture);b.texImage2D(b.TEXTURE_2D,0,b.RGBA,b.RGBA,b.UNSIGNED_BYTE,d.map.image);
-b.texParameteri(b.TEXTURE_2D,b.TEXTURE_WRAP_S,q(d.map.wrap_s));b.texParameteri(b.TEXTURE_2D,b.TEXTURE_WRAP_T,q(d.map.wrap_t));b.texParameteri(b.TEXTURE_2D,b.TEXTURE_MAG_FILTER,b.LINEAR);b.texParameteri(b.TEXTURE_2D,b.TEXTURE_MIN_FILTER,b.LINEAR_MIPMAP_LINEAR);b.generateMipmap(b.TEXTURE_2D);b.bindTexture(b.TEXTURE_2D,null)}b.activeTexture(b.TEXTURE0);b.bindTexture(b.TEXTURE_2D,d.map.__webGLTexture);b.uniform1i(v.uniforms.tMap,0);b.uniform1i(v.uniforms.enableMap,1)}else b.uniform1i(v.uniforms.enableMap,
-0);if(r){if(d.env_map&&d.env_map instanceof THREE.TextureCube&&d.env_map.image.length==6){if(!d.env_map.image.__webGLTextureCube&&!d.env_map.image.__cubeMapInitialized&&d.env_map.image.loadCount==6){d.env_map.image.__webGLTextureCube=b.createTexture();b.bindTexture(b.TEXTURE_CUBE_MAP,d.env_map.image.__webGLTextureCube);b.texParameteri(b.TEXTURE_CUBE_MAP,b.TEXTURE_WRAP_S,b.CLAMP_TO_EDGE);b.texParameteri(b.TEXTURE_CUBE_MAP,b.TEXTURE_WRAP_T,b.CLAMP_TO_EDGE);b.texParameteri(b.TEXTURE_CUBE_MAP,b.TEXTURE_MAG_FILTER,
-b.LINEAR);b.texParameteri(b.TEXTURE_CUBE_MAP,b.TEXTURE_MIN_FILTER,b.LINEAR_MIPMAP_LINEAR);for(o=0;o<6;++o)b.texImage2D(b.TEXTURE_CUBE_MAP_POSITIVE_X+o,0,b.RGBA,b.RGBA,b.UNSIGNED_BYTE,d.env_map.image[o]);b.generateMipmap(b.TEXTURE_CUBE_MAP);b.bindTexture(b.TEXTURE_CUBE_MAP,null);d.env_map.image.__cubeMapInitialized=true}b.activeTexture(b.TEXTURE1);b.bindTexture(b.TEXTURE_CUBE_MAP,d.env_map.image.__webGLTextureCube);b.uniform1i(v.uniforms.tCube,1)}b.uniform1i(v.uniforms.enableCubeMap,1)}else b.uniform1i(v.uniforms.enableCubeMap,
-0);b.bindBuffer(b.ARRAY_BUFFER,i.__webGLVertexBuffer);b.vertexAttribPointer(v.position,3,b.FLOAT,false,0,0);b.bindBuffer(b.ARRAY_BUFFER,i.__webGLNormalBuffer);b.vertexAttribPointer(v.normal,3,b.FLOAT,false,0,0);if(Q){b.bindBuffer(b.ARRAY_BUFFER,i.__webGLUVBuffer);b.enableVertexAttribArray(v.uv);b.vertexAttribPointer(v.uv,2,b.FLOAT,false,0,0)}else b.disableVertexAttribArray(v.uv);if(j){b.lineWidth(n);b.bindBuffer(b.ELEMENT_ARRAY_BUFFER,i.__webGLLineBuffer);b.drawElements(b.LINES,i.__webGLLineCount,
-b.UNSIGNED_SHORT,0)}else{b.bindBuffer(b.ELEMENT_ARRAY_BUFFER,i.__webGLFaceBuffer);b.drawElements(b.TRIANGLES,i.__webGLFaceCount,b.UNSIGNED_SHORT,0)}};this.renderPass=function(f,d,i,o,k){var j,n,t,Q,r;t=0;for(Q=d.material.length;t<Q;t++){j=d.material[t];if(j instanceof THREE.MeshFaceMaterial){j=0;for(n=i.material.length;j<n;j++)if((r=i.material[j])&&r.blending==o&&r.opacity<1==k){this.setBlending(r.blending);this.renderBuffer(f,r,i)}}else if((r=j)&&r.blending==o&&r.opacity<1==k){this.setBlending(r.blending);
-this.renderBuffer(f,r,i)}}};this.render=function(f,d){var i,o;this.initWebGLObjects(f);this.autoClear&&this.clear();d.autoUpdateMatrix&&d.updateMatrix();this.loadCamera(l,d);this.setupLights(l,f);i=0;for(o=f.__webGLObjects.length;i<o;i++){webGLObject=f.__webGLObjects[i];if(webGLObject.__object.visible){this.setupMatrices(webGLObject.__object,d);this.loadMatrices(l);this.renderPass(d,webGLObject.__object,webGLObject,THREE.NormalBlending,false)}}i=0;for(o=f.__webGLObjects.length;i<o;i++){webGLObject=
-f.__webGLObjects[i];if(webGLObject.__object.visible){this.setupMatrices(webGLObject.__object,d);this.loadMatrices(l);this.renderPass(d,webGLObject.__object,webGLObject,THREE.AdditiveBlending,false);this.renderPass(d,webGLObject.__object,webGLObject,THREE.SubtractiveBlending,false);this.renderPass(d,webGLObject.__object,webGLObject,THREE.AdditiveBlending,true);this.renderPass(d,webGLObject.__object,webGLObject,THREE.SubtractiveBlending,true);this.renderPass(d,webGLObject.__object,webGLObject,THREE.NormalBlending,
-true)}}};this.initWebGLObjects=function(f){var d,i,o,k,j;if(!f.__webGLObjects)f.__webGLObjects=[];d=0;for(i=f.objects.length;d<i;d++){o=f.objects[d];if(o instanceof THREE.Mesh)for(k in o.materialFaceGroup){j=o.materialFaceGroup[k];if(!j.__webGLVertexBuffer){this.createBuffers(o,k);j.__object=o;f.__webGLObjects.push(j)}}}};this.removeObject=function(f,d){var i,o;for(i=f.__webGLObjects.length-1;i>=0;i--){o=f.__webGLObjects[i].__object;d==o&&f.__webGLObjects.splice(i,1)}};this.setupMatrices=function(f,
-d){f.autoUpdateMatrix&&f.updateMatrix();E.multiply(d.matrix,f.matrix);w.set(d.matrix.flatten());F.set(E.flatten());P.set(d.projectionMatrix.flatten());H=THREE.Matrix4.makeInvert3x3(E).transpose();N.set(H.m);O.set(f.matrix.flatten())};this.loadMatrices=function(f){b.uniformMatrix4fv(f.uniforms.viewMatrix,false,w);b.uniformMatrix4fv(f.uniforms.modelViewMatrix,false,F);b.uniformMatrix4fv(f.uniforms.projectionMatrix,false,P);b.uniformMatrix3fv(f.uniforms.normalMatrix,false,N);b.uniformMatrix4fv(f.uniforms.objectMatrix,
-false,O)};this.loadCamera=function(f,d){b.uniform3f(f.uniforms.cameraPosition,d.position.x,d.position.y,d.position.z)};this.setBlending=function(f){switch(f){case THREE.AdditiveBlending:b.blendEquation(b.FUNC_ADD);b.blendFunc(b.ONE,b.ONE);break;case THREE.SubtractiveBlending:b.blendFunc(b.DST_COLOR,b.ZERO);break;default:b.blendEquation(b.FUNC_ADD);b.blendFunc(b.ONE,b.ONE_MINUS_SRC_ALPHA)}};this.setFaceCulling=function(f,d){if(f){!d||d=="ccw"?b.frontFace(b.CCW):b.frontFace(b.CW);if(f=="back")b.cullFace(b.BACK);
-else f=="front"?b.cullFace(b.FRONT):b.cullFace(b.FRONT_AND_BACK);b.enable(b.CULL_FACE)}else b.disable(b.CULL_FACE)}};
-THREE.RenderableFace3=function(){this.z=null;this.v1=new THREE.Vertex;this.v2=new THREE.Vertex;this.v3=new THREE.Vertex;this.centroidWorld=new THREE.Vector3;this.centroidScreen=new THREE.Vector3;this.normalWorld=new THREE.Vector3;this.vertexNormalsWorld=[new THREE.Vector3,new THREE.Vector3,new THREE.Vector3];this.faceMaterial=this.meshMaterial=null;this.overdraw=false;this.uvs=[null,null,null]};
-THREE.RenderableParticle=function(){this.rotation=this.z=this.y=this.x=null;this.scale=new THREE.Vector2;this.material=null};THREE.RenderableLine=function(){this.z=null;this.v1=new THREE.Vertex;this.v2=new THREE.Vertex;this.material=null};
+// Three.js r30 - http://github.com/mrdoob/three.js
+var THREE=THREE||{};THREE.Color=function(a){this.autoUpdate=true;this.setHex(a)};
+THREE.Color.prototype={setRGB:function(a,c,d){this.r=a;this.g=c;this.b=d;if(this.autoUpdate){this.updateHex();this.updateStyleString()}},setHex:function(a){this.hex=~~a&16777215;if(this.autoUpdate){this.updateRGBA();this.updateStyleString()}},updateHex:function(){this.hex=~~(this.r*255)<<16^~~(this.g*255)<<8^~~(this.b*255)},updateRGBA:function(){this.r=(this.hex>>16&255)/255;this.g=(this.hex>>8&255)/255;this.b=(this.hex&255)/255},updateStyleString:function(){this.__styleString="rgb("+~~(this.r*255)+
+","+~~(this.g*255)+","+~~(this.b*255)+")"},toString:function(){return"THREE.Color ( r: "+this.r+", g: "+this.g+", b: "+this.b+", hex: "+this.hex+" )"}};THREE.Vector2=function(a,c){this.x=a||0;this.y=c||0};
+THREE.Vector2.prototype={set:function(a,c){this.x=a;this.y=c;return this},copy:function(a){this.x=a.x;this.y=a.y;return this},addSelf:function(a){this.x+=a.x;this.y+=a.y;return this},add:function(a,c){this.x=a.x+c.x;this.y=a.y+c.y;return this},subSelf:function(a){this.x-=a.x;this.y-=a.y;return this},sub:function(a,c){this.x=a.x-c.x;this.y=a.y-c.y;return this},multiplyScalar:function(a){this.x*=a;this.y*=a;return this},unit:function(){this.multiplyScalar(1/this.length());return this},length:function(){return Math.sqrt(this.x*
+this.x+this.y*this.y)},lengthSq:function(){return this.x*this.x+this.y*this.y},negate:function(){this.x=-this.x;this.y=-this.y;return this},clone:function(){return new THREE.Vector2(this.x,this.y)},toString:function(){return"THREE.Vector2 ("+this.x+", "+this.y+")"}};THREE.Vector3=function(a,c,d){this.x=a||0;this.y=c||0;this.z=d||0};
+THREE.Vector3.prototype={set:function(a,c,d){this.x=a;this.y=c;this.z=d;return this},copy:function(a){this.x=a.x;this.y=a.y;this.z=a.z;return this},add:function(a,c){this.x=a.x+c.x;this.y=a.y+c.y;this.z=a.z+c.z;return this},addSelf:function(a){this.x+=a.x;this.y+=a.y;this.z+=a.z;return this},addScalar:function(a){this.x+=a;this.y+=a;this.z+=a;return this},sub:function(a,c){this.x=a.x-c.x;this.y=a.y-c.y;this.z=a.z-c.z;return this},subSelf:function(a){this.x-=a.x;this.y-=a.y;this.z-=a.z;return this},
+cross:function(a,c){this.x=a.y*c.z-a.z*c.y;this.y=a.z*c.x-a.x*c.z;this.z=a.x*c.y-a.y*c.x;return this},crossSelf:function(a){var c=this.x,d=this.y,g=this.z;this.x=d*a.z-g*a.y;this.y=g*a.x-c*a.z;this.z=c*a.y-d*a.x;return this},multiplySelf:function(a){this.x*=a.x;this.y*=a.y;this.z*=a.z;return this},multiplyScalar:function(a){this.x*=a;this.y*=a;this.z*=a;return this},divideScalar:function(a){this.x/=a;this.y/=a;this.z/=a;return this},dot:function(a){return this.x*a.x+this.y*a.y+this.z*a.z},distanceTo:function(a){var c=
+this.x-a.x,d=this.y-a.y;a=this.z-a.z;return Math.sqrt(c*c+d*d+a*a)},distanceToSquared:function(a){var c=this.x-a.x,d=this.y-a.y;a=this.z-a.z;return c*c+d*d+a*a},length:function(){return Math.sqrt(this.x*this.x+this.y*this.y+this.z*this.z)},lengthSq:function(){return this.x*this.x+this.y*this.y+this.z*this.z},negate:function(){this.x=-this.x;this.y=-this.y;this.z=-this.z;return this},normalize:function(){var a=Math.sqrt(this.x*this.x+this.y*this.y+this.z*this.z);a>0?this.multiplyScalar(1/a):this.set(0,
+0,0);return this},setLength:function(a){return this.normalize().multiplyScalar(a)},isZero:function(){return Math.abs(this.x)<1.0E-4&&Math.abs(this.y)<1.0E-4&&Math.abs(this.z)<1.0E-4},clone:function(){return new THREE.Vector3(this.x,this.y,this.z)},toString:function(){return"THREE.Vector3 ( "+this.x+", "+this.y+", "+this.z+" )"}};THREE.Vector4=function(a,c,d,g){this.x=a||0;this.y=c||0;this.z=d||0;this.w=g||1};
+THREE.Vector4.prototype={set:function(a,c,d,g){this.x=a;this.y=c;this.z=d;this.w=g;return this},copy:function(a){this.x=a.x;this.y=a.y;this.z=a.z;this.w=a.w||1;return this},add:function(a,c){this.x=a.x+c.x;this.y=a.y+c.y;this.z=a.z+c.z;this.w=a.w+c.w;return this},addSelf:function(a){this.x+=a.x;this.y+=a.y;this.z+=a.z;this.w+=a.w;return this},sub:function(a,c){this.x=a.x-c.x;this.y=a.y-c.y;this.z=a.z-c.z;this.w=a.w-c.w;return this},subSelf:function(a){this.x-=a.x;this.y-=a.y;this.z-=a.z;this.w-=a.w;
+return this},multiplyScalar:function(a){this.x*=a;this.y*=a;this.z*=a;this.w*=a;return this},divideScalar:function(a){this.x/=a;this.y/=a;this.z/=a;this.w/=a;return this},lerpSelf:function(a,c){this.x+=(a.x-this.x)*c;this.y+=(a.y-this.y)*c;this.z+=(a.z-this.z)*c;this.w+=(a.w-this.w)*c},clone:function(){return new THREE.Vector4(this.x,this.y,this.z,this.w)},toString:function(){return"THREE.Vector4 ("+this.x+", "+this.y+", "+this.z+", "+this.w+")"}};
+THREE.Ray=function(a,c){this.origin=a||new THREE.Vector3;this.direction=c||new THREE.Vector3};
+THREE.Ray.prototype={intersectScene:function(a){var c,d,g=a.objects,h=[];a=0;for(c=g.length;a<c;a++){d=g[a];if(d instanceof THREE.Mesh)h=h.concat(this.intersectObject(d))}h.sort(function(q,m){return q.distance-m.distance});return h},intersectObject:function(a){function c(M,t,f,e){e=e.clone().subSelf(t);f=f.clone().subSelf(t);var i=M.clone().subSelf(t);M=e.dot(e);t=e.dot(f);e=e.dot(i);var o=f.dot(f);f=f.dot(i);i=1/(M*o-t*t);o=(o*e-t*f)*i;M=(M*f-t*e)*i;return o>0&&M>0&&o+M<1}var d,g,h,q,m,b,l,y,C,E,
+w,D=a.geometry,N=D.vertices,J=[];d=0;for(g=D.faces.length;d<g;d++){h=D.faces[d];E=this.origin.clone();w=this.direction.clone();q=a.matrix.transformVector3(N[h.a].position.clone());m=a.matrix.transformVector3(N[h.b].position.clone());b=a.matrix.transformVector3(N[h.c].position.clone());l=h instanceof THREE.Face4?a.matrix.transformVector3(N[h.d].position.clone()):null;y=a.rotationMatrix.transformVector3(h.normal.clone());C=w.dot(y);if(C<0){y=y.dot((new THREE.Vector3).sub(q,E))/C;E=E.addSelf(w.multiplyScalar(y));
+if(h instanceof THREE.Face3){if(c(E,q,m,b)){h={distance:this.origin.distanceTo(E),point:E,face:h,object:a};J.push(h)}}else if(h instanceof THREE.Face4)if(c(E,q,m,l)||c(E,m,b,l)){h={distance:this.origin.distanceTo(E),point:E,face:h,object:a};J.push(h)}}}return J}};
+THREE.Rectangle=function(){function a(){q=g-c;m=h-d}var c,d,g,h,q,m,b=true;this.getX=function(){return c};this.getY=function(){return d};this.getWidth=function(){return q};this.getHeight=function(){return m};this.getLeft=function(){return c};this.getTop=function(){return d};this.getRight=function(){return g};this.getBottom=function(){return h};this.set=function(l,y,C,E){b=false;c=l;d=y;g=C;h=E;a()};this.addPoint=function(l,y){if(b){b=false;c=l;d=y;g=l;h=y}else{c=Math.min(c,l);d=Math.min(d,y);g=Math.max(g,
+l);h=Math.max(h,y)}a()};this.addRectangle=function(l){if(b){b=false;c=l.getLeft();d=l.getTop();g=l.getRight();h=l.getBottom()}else{c=Math.min(c,l.getLeft());d=Math.min(d,l.getTop());g=Math.max(g,l.getRight());h=Math.max(h,l.getBottom())}a()};this.inflate=function(l){c-=l;d-=l;g+=l;h+=l;a()};this.minSelf=function(l){c=Math.max(c,l.getLeft());d=Math.max(d,l.getTop());g=Math.min(g,l.getRight());h=Math.min(h,l.getBottom());a()};this.instersects=function(l){return Math.min(g,l.getRight())-Math.max(c,l.getLeft())>=
+0&&Math.min(h,l.getBottom())-Math.max(d,l.getTop())>=0};this.empty=function(){b=true;h=g=d=c=0;a()};this.isEmpty=function(){return b};this.toString=function(){return"THREE.Rectangle ( left: "+c+", right: "+g+", top: "+d+", bottom: "+h+", width: "+q+", height: "+m+" )"}};THREE.Matrix3=function(){this.m=[]};THREE.Matrix3.prototype={transpose:function(){var a;a=this.m[1];this.m[1]=this.m[3];this.m[3]=a;a=this.m[2];this.m[2]=this.m[6];this.m[6]=a;a=this.m[5];this.m[5]=this.m[7];this.m[7]=a;return this}};
+THREE.Matrix4=function(){};
+THREE.Matrix4.prototype={n11:1,n12:0,n13:0,n14:0,n21:0,n22:1,n23:0,n24:0,n31:0,n32:0,n33:1,n34:0,n41:0,n42:0,n43:0,n44:1,identity:function(){this.n11=1;this.n21=this.n14=this.n13=this.n12=0;this.n22=1;this.n32=this.n31=this.n24=this.n23=0;this.n33=1;this.n43=this.n42=this.n41=this.n34=0;this.n44=1},copy:function(a){this.n11=a.n11;this.n12=a.n12;this.n13=a.n13;this.n14=a.n14;this.n21=a.n21;this.n22=a.n22;this.n23=a.n23;this.n24=a.n24;this.n31=a.n31;this.n32=a.n32;this.n33=a.n33;this.n34=a.n34;this.n41=
+a.n41;this.n42=a.n42;this.n43=a.n43;this.n44=a.n44},lookAt:function(a,c,d){var g=new THREE.Vector3,h=new THREE.Vector3,q=new THREE.Vector3;q.sub(a,c).normalize();g.cross(d,q).normalize();h.cross(q,g).normalize();this.n11=g.x;this.n12=g.y;this.n13=g.z;this.n14=-g.dot(a);this.n21=h.x;this.n22=h.y;this.n23=h.z;this.n24=-h.dot(a);this.n31=q.x;this.n32=q.y;this.n33=q.z;this.n34=-q.dot(a);this.n43=this.n42=this.n41=0;this.n44=1},transformVector3:function(a){var c=a.x,d=a.y,g=a.z;a.x=this.n11*c+this.n12*
+d+this.n13*g+this.n14;a.y=this.n21*c+this.n22*d+this.n23*g+this.n24;a.z=this.n31*c+this.n32*d+this.n33*g+this.n34;a.multiplyScalar(1/(this.n41*c+this.n42*d+this.n43*g+this.n44));return a},transformVector4:function(a){var c=a.x,d=a.y,g=a.z,h=a.w;a.x=this.n11*c+this.n12*d+this.n13*g+this.n14*h;a.y=this.n21*c+this.n22*d+this.n23*g+this.n24*h;a.z=this.n31*c+this.n32*d+this.n33*g+this.n34*h;a.w=this.n41*c+this.n42*d+this.n43*g+this.n44*h;return a},crossVector:function(a){var c=new THREE.Vector4;c.x=this.n11*
+a.x+this.n12*a.y+this.n13*a.z+this.n14*a.w;c.y=this.n21*a.x+this.n22*a.y+this.n23*a.z+this.n24*a.w;c.z=this.n31*a.x+this.n32*a.y+this.n33*a.z+this.n34*a.w;c.w=a.w?this.n41*a.x+this.n42*a.y+this.n43*a.z+this.n44*a.w:1;return c},multiply:function(a,c){var d=a.n11,g=a.n12,h=a.n13,q=a.n14,m=a.n21,b=a.n22,l=a.n23,y=a.n24,C=a.n31,E=a.n32,w=a.n33,D=a.n34,N=a.n41,J=a.n42,M=a.n43,t=a.n44,f=c.n11,e=c.n12,i=c.n13,o=c.n14,j=c.n21,k=c.n22,n=c.n23,s=c.n24,G=c.n31,r=c.n32,R=c.n33,x=c.n34,u=c.n41,U=c.n42,P=c.n43,
+z=c.n44;this.n11=d*f+g*j+h*G+q*u;this.n12=d*e+g*k+h*r+q*U;this.n13=d*i+g*n+h*R+q*P;this.n14=d*o+g*s+h*x+q*z;this.n21=m*f+b*j+l*G+y*u;this.n22=m*e+b*k+l*r+y*U;this.n23=m*i+b*n+l*R+y*P;this.n24=m*o+b*s+l*x+y*z;this.n31=C*f+E*j+w*G+D*u;this.n32=C*e+E*k+w*r+D*U;this.n33=C*i+E*n+w*R+D*P;this.n34=C*o+E*s+w*x+D*z;this.n41=N*f+J*j+M*G+t*u;this.n42=N*e+J*k+M*r+t*U;this.n43=N*i+J*n+M*R+t*P;this.n44=N*o+J*s+M*x+t*z},multiplySelf:function(a){var c=this.n11,d=this.n12,g=this.n13,h=this.n14,q=this.n21,m=this.n22,
+b=this.n23,l=this.n24,y=this.n31,C=this.n32,E=this.n33,w=this.n34,D=this.n41,N=this.n42,J=this.n43,M=this.n44;this.n11=c*a.n11+d*a.n21+g*a.n31+h*a.n41;this.n12=c*a.n12+d*a.n22+g*a.n32+h*a.n42;this.n13=c*a.n13+d*a.n23+g*a.n33+h*a.n43;this.n14=c*a.n14+d*a.n24+g*a.n34+h*a.n44;this.n21=q*a.n11+m*a.n21+b*a.n31+l*a.n41;this.n22=q*a.n12+m*a.n22+b*a.n32+l*a.n42;this.n23=q*a.n13+m*a.n23+b*a.n33+l*a.n43;this.n24=q*a.n14+m*a.n24+b*a.n34+l*a.n44;this.n31=y*a.n11+C*a.n21+E*a.n31+w*a.n41;this.n32=y*a.n12+C*a.n22+
+E*a.n32+w*a.n42;this.n33=y*a.n13+C*a.n23+E*a.n33+w*a.n43;this.n34=y*a.n14+C*a.n24+E*a.n34+w*a.n44;this.n41=D*a.n11+N*a.n21+J*a.n31+M*a.n41;this.n42=D*a.n12+N*a.n22+J*a.n32+M*a.n42;this.n43=D*a.n13+N*a.n23+J*a.n33+M*a.n43;this.n44=D*a.n14+N*a.n24+J*a.n34+M*a.n44},multiplyScalar:function(a){this.n11*=a;this.n12*=a;this.n13*=a;this.n14*=a;this.n21*=a;this.n22*=a;this.n23*=a;this.n24*=a;this.n31*=a;this.n32*=a;this.n33*=a;this.n34*=a;this.n41*=a;this.n42*=a;this.n43*=a;this.n44*=a},determinant:function(){return this.n14*
+this.n23*this.n32*this.n41-this.n13*this.n24*this.n32*this.n41-this.n14*this.n22*this.n33*this.n41+this.n12*this.n24*this.n33*this.n41+this.n13*this.n22*this.n34*this.n41-this.n12*this.n23*this.n34*this.n41-this.n14*this.n23*this.n31*this.n42+this.n13*this.n24*this.n31*this.n42+this.n14*this.n21*this.n33*this.n42-this.n11*this.n24*this.n33*this.n42-this.n13*this.n21*this.n34*this.n42+this.n11*this.n23*this.n34*this.n42+this.n14*this.n22*this.n31*this.n43-this.n12*this.n24*this.n31*this.n43-this.n14*
+this.n21*this.n32*this.n43+this.n11*this.n24*this.n32*this.n43+this.n12*this.n21*this.n34*this.n43-this.n11*this.n22*this.n34*this.n43-this.n13*this.n22*this.n31*this.n44+this.n12*this.n23*this.n31*this.n44+this.n13*this.n21*this.n32*this.n44-this.n11*this.n23*this.n32*this.n44-this.n12*this.n21*this.n33*this.n44+this.n11*this.n22*this.n33*this.n44},transpose:function(){function a(c,d,g){var h=c[d];c[d]=c[g];c[g]=h}a(this,"n21","n12");a(this,"n31","n13");a(this,"n32","n23");a(this,"n41","n14");a(this,
+"n42","n24");a(this,"n43","n34");return this},clone:function(){var a=new THREE.Matrix4;a.n11=this.n11;a.n12=this.n12;a.n13=this.n13;a.n14=this.n14;a.n21=this.n21;a.n22=this.n22;a.n23=this.n23;a.n24=this.n24;a.n31=this.n31;a.n32=this.n32;a.n33=this.n33;a.n34=this.n34;a.n41=this.n41;a.n42=this.n42;a.n43=this.n43;a.n44=this.n44;return a},flatten:function(){return[this.n11,this.n21,this.n31,this.n41,this.n12,this.n22,this.n32,this.n42,this.n13,this.n23,this.n33,this.n43,this.n14,this.n24,this.n34,this.n44]},
+toString:function(){return"| "+this.n11+" "+this.n12+" "+this.n13+" "+this.n14+" |\n| "+this.n21+" "+this.n22+" "+this.n23+" "+this.n24+" |\n| "+this.n31+" "+this.n32+" "+this.n33+" "+this.n34+" |\n| "+this.n41+" "+this.n42+" "+this.n43+" "+this.n44+" |"}};THREE.Matrix4.translationMatrix=function(a,c,d){var g=new THREE.Matrix4;g.n14=a;g.n24=c;g.n34=d;return g};THREE.Matrix4.scaleMatrix=function(a,c,d){var g=new THREE.Matrix4;g.n11=a;g.n22=c;g.n33=d;return g};
+THREE.Matrix4.rotationXMatrix=function(a){var c=new THREE.Matrix4;c.n22=c.n33=Math.cos(a);c.n32=Math.sin(a);c.n23=-c.n32;return c};THREE.Matrix4.rotationYMatrix=function(a){var c=new THREE.Matrix4;c.n11=c.n33=Math.cos(a);c.n13=Math.sin(a);c.n31=-c.n13;return c};THREE.Matrix4.rotationZMatrix=function(a){var c=new THREE.Matrix4;c.n11=c.n22=Math.cos(a);c.n21=Math.sin(a);c.n12=-c.n21;return c};
+THREE.Matrix4.rotationAxisAngleMatrix=function(a,c){var d=new THREE.Matrix4,g=Math.cos(c),h=Math.sin(c),q=1-g,m=a.x,b=a.y,l=a.z;d.n11=q*m*m+g;d.n12=q*m*b-h*l;d.n13=q*m*l+h*b;d.n21=q*m*b+h*l;d.n22=q*b*b+g;d.n23=q*b*l-h*m;d.n31=q*m*l-h*b;d.n32=q*b*l+h*m;d.n33=q*l*l+g;return d};
+THREE.Matrix4.makeInvert=function(a){var c=new THREE.Matrix4;c.n11=a.n23*a.n34*a.n42-a.n24*a.n33*a.n42+a.n24*a.n32*a.n43-a.n22*a.n34*a.n43-a.n23*a.n32*a.n44+a.n22*a.n33*a.n44;c.n12=a.n14*a.n33*a.n42-a.n13*a.n34*a.n42-a.n14*a.n32*a.n43+a.n12*a.n34*a.n43+a.n13*a.n32*a.n44-a.n12*a.n33*a.n44;c.n13=a.n13*a.n24*a.n42-a.n14*a.n23*a.n42+a.n14*a.n22*a.n43-a.n12*a.n24*a.n43-a.n13*a.n22*a.n44+a.n12*a.n23*a.n44;c.n14=a.n14*a.n23*a.n32-a.n13*a.n24*a.n32-a.n14*a.n22*a.n33+a.n12*a.n24*a.n33+a.n13*a.n22*a.n34-a.n12*
+a.n23*a.n34;c.n21=a.n24*a.n33*a.n41-a.n23*a.n34*a.n41-a.n24*a.n31*a.n43+a.n21*a.n34*a.n43+a.n23*a.n31*a.n44-a.n21*a.n33*a.n44;c.n22=a.n13*a.n34*a.n41-a.n14*a.n33*a.n41+a.n14*a.n31*a.n43-a.n11*a.n34*a.n43-a.n13*a.n31*a.n44+a.n11*a.n33*a.n44;c.n23=a.n14*a.n23*a.n41-a.n13*a.n24*a.n41-a.n14*a.n21*a.n43+a.n11*a.n24*a.n43+a.n13*a.n21*a.n44-a.n11*a.n23*a.n44;c.n24=a.n13*a.n24*a.n31-a.n14*a.n23*a.n31+a.n14*a.n21*a.n33-a.n11*a.n24*a.n33-a.n13*a.n21*a.n34+a.n11*a.n23*a.n34;c.n31=a.n22*a.n34*a.n41-a.n24*a.n32*
+a.n41+a.n24*a.n31*a.n42-a.n21*a.n34*a.n42-a.n22*a.n31*a.n44+a.n21*a.n32*a.n44;c.n32=a.n14*a.n32*a.n41-a.n12*a.n34*a.n41-a.n14*a.n31*a.n42+a.n11*a.n34*a.n42+a.n12*a.n31*a.n44-a.n11*a.n32*a.n44;c.n33=a.n13*a.n24*a.n41-a.n14*a.n22*a.n41+a.n14*a.n21*a.n42-a.n11*a.n24*a.n42-a.n12*a.n21*a.n44+a.n11*a.n22*a.n44;c.n34=a.n14*a.n22*a.n31-a.n12*a.n24*a.n31-a.n14*a.n21*a.n32+a.n11*a.n24*a.n32+a.n12*a.n21*a.n34-a.n11*a.n22*a.n34;c.n41=a.n23*a.n32*a.n41-a.n22*a.n33*a.n41-a.n23*a.n31*a.n42+a.n21*a.n33*a.n42+a.n22*
+a.n31*a.n43-a.n21*a.n32*a.n43;c.n42=a.n12*a.n33*a.n41-a.n13*a.n32*a.n41+a.n13*a.n31*a.n42-a.n11*a.n33*a.n42-a.n12*a.n31*a.n43+a.n11*a.n32*a.n43;c.n43=a.n13*a.n22*a.n41-a.n12*a.n23*a.n41-a.n13*a.n21*a.n42+a.n11*a.n23*a.n42+a.n12*a.n21*a.n43-a.n11*a.n22*a.n43;c.n44=a.n12*a.n23*a.n31-a.n13*a.n22*a.n31+a.n13*a.n21*a.n32-a.n11*a.n23*a.n32-a.n12*a.n21*a.n33+a.n11*a.n22*a.n33;c.multiplyScalar(1/a.determinant());return c};
+THREE.Matrix4.makeInvert3x3=function(a){var c=a.flatten();a=new THREE.Matrix3;var d=c[10]*c[5]-c[6]*c[9],g=-c[10]*c[1]+c[2]*c[9],h=c[6]*c[1]-c[2]*c[5],q=-c[10]*c[4]+c[6]*c[8],m=c[10]*c[0]-c[2]*c[8],b=-c[6]*c[0]+c[2]*c[4],l=c[9]*c[4]-c[5]*c[8],y=-c[9]*c[0]+c[1]*c[8],C=c[5]*c[0]-c[1]*c[4];c=c[0]*d+c[1]*q+c[2]*l;if(c==0)throw"matrix not invertible";c=1/c;a.m[0]=c*d;a.m[1]=c*g;a.m[2]=c*h;a.m[3]=c*q;a.m[4]=c*m;a.m[5]=c*b;a.m[6]=c*l;a.m[7]=c*y;a.m[8]=c*C;return a};
+THREE.Matrix4.makeFrustum=function(a,c,d,g,h,q){var m,b,l;m=new THREE.Matrix4;b=2*h/(c-a);l=2*h/(g-d);a=(c+a)/(c-a);d=(g+d)/(g-d);g=-(q+h)/(q-h);h=-2*q*h/(q-h);m.n11=b;m.n12=0;m.n13=a;m.n14=0;m.n21=0;m.n22=l;m.n23=d;m.n24=0;m.n31=0;m.n32=0;m.n33=g;m.n34=h;m.n41=0;m.n42=0;m.n43=-1;m.n44=0;return m};THREE.Matrix4.makePerspective=function(a,c,d,g){var h;a=d*Math.tan(a*Math.PI/360);h=-a;return THREE.Matrix4.makeFrustum(h*c,a*c,h,a,d,g)};
+THREE.Matrix4.makeOrtho=function(a,c,d,g,h,q){var m,b,l,y;m=new THREE.Matrix4;b=c-a;l=d-g;y=q-h;a=(c+a)/b;d=(d+g)/l;h=(q+h)/y;m.n11=2/b;m.n12=0;m.n13=0;m.n14=-a;m.n21=0;m.n22=2/l;m.n23=0;m.n24=-d;m.n31=0;m.n32=0;m.n33=-2/y;m.n34=-h;m.n41=0;m.n42=0;m.n43=0;m.n44=1;return m};
+THREE.Vertex=function(a,c){this.position=a||new THREE.Vector3;this.positionWorld=new THREE.Vector3;this.positionScreen=new THREE.Vector4;this.normal=c||new THREE.Vector3;this.normalWorld=new THREE.Vector3;this.normalScreen=new THREE.Vector3;this.__visible=true};THREE.Vertex.prototype={toString:function(){return"THREE.Vertex ( position: "+this.position+", normal: "+this.normal+" )"}};
+THREE.Face3=function(a,c,d,g,h){this.a=a;this.b=c;this.c=d;this.centroid=new THREE.Vector3;this.normal=g instanceof THREE.Vector3?g:new THREE.Vector3;this.vertexNormals=g instanceof Array?g:[];this.material=h instanceof Array?h:[h]};THREE.Face3.prototype={toString:function(){return"THREE.Face3 ( "+this.a+", "+this.b+", "+this.c+" )"}};
+THREE.Face4=function(a,c,d,g,h,q){this.a=a;this.b=c;this.c=d;this.d=g;this.centroid=new THREE.Vector3;this.normal=h instanceof THREE.Vector3?h:new THREE.Vector3;this.vertexNormals=h instanceof Array?h:[];this.material=q instanceof Array?q:[q]};THREE.Face4.prototype={toString:function(){return"THREE.Face4 ( "+this.a+", "+this.b+", "+this.c+" "+this.d+" )"}};THREE.UV=function(a,c){this.u=a||0;this.v=c||0};
+THREE.UV.prototype={copy:function(a){this.u=a.u;this.v=a.v},toString:function(){return"THREE.UV ("+this.u+", "+this.v+")"}};THREE.Geometry=function(){this.vertices=[];this.faces=[];this.uvs=[]};
+THREE.Geometry.prototype={computeCentroids:function(){var a,c,d;a=0;for(c=this.faces.length;a<c;a++){d=this.faces[a];d.centroid.set(0,0,0);d.centroid.addSelf(this.vertices[d.a].position);d.centroid.addSelf(this.vertices[d.b].position);d.centroid.addSelf(this.vertices[d.c].position);if(d instanceof THREE.Face3)d.centroid.divideScalar(3);else if(d instanceof THREE.Face4){d.centroid.addSelf(this.vertices[d.d].position);d.centroid.divideScalar(4)}}},computeNormals:function(a){var c,d,g,h,q,m,b=new THREE.Vector3,
+l=new THREE.Vector3;g=0;for(h=this.vertices.length;g<h;g++){q=this.vertices[g];q.normal.set(0,0,0)}g=0;for(h=this.faces.length;g<h;g++){q=this.faces[g];if(a&&q.vertexNormals.length){b.set(0,0,0);c=0;for(d=q.normal.length;c<d;c++)b.addSelf(q.vertexNormals[c]);b.divideScalar(3)}else{c=this.vertices[q.a];d=this.vertices[q.b];m=this.vertices[q.c];b.sub(m.position,d.position);l.sub(c.position,d.position);b.crossSelf(l)}b.isZero()||b.normalize();q.normal.copy(b)}},computeBoundingBox:function(){if(this.vertices.length>
+0){this.bbox={x:[this.vertices[0].position.x,this.vertices[0].position.x],y:[this.vertices[0].position.y,this.vertices[0].position.y],z:[this.vertices[0].position.z,this.vertices[0].position.z]};for(var a=1,c=this.vertices.length;a<c;a++){vertex=this.vertices[a];if(vertex.position.x<this.bbox.x[0])this.bbox.x[0]=vertex.position.x;else if(vertex.position.x>this.bbox.x[1])this.bbox.x[1]=vertex.position.x;if(vertex.position.y<this.bbox.y[0])this.bbox.y[0]=vertex.position.y;else if(vertex.position.y>
+this.bbox.y[1])this.bbox.y[1]=vertex.position.y;if(vertex.position.z<this.bbox.z[0])this.bbox.z[0]=vertex.position.z;else if(vertex.position.z>this.bbox.z[1])this.bbox.z[1]=vertex.position.z}}},toString:function(){return"THREE.Geometry ( vertices: "+this.vertices+", faces: "+this.faces+" )"}};
+THREE.Camera=function(a,c,d,g){this.position=new THREE.Vector3(0,0,0);this.target={position:new THREE.Vector3(0,0,0)};this.up=new THREE.Vector3(0,1,0);this.matrix=new THREE.Matrix4;this.projectionMatrix=THREE.Matrix4.makePerspective(a,c,d,g);this.autoUpdateMatrix=true;this.updateMatrix=function(){this.matrix.lookAt(this.position,this.target.position,this.up)};this.toString=function(){return"THREE.Camera ( "+this.position+", "+this.target.position+" )"}};THREE.Light=function(a){this.color=new THREE.Color(a)};
+THREE.AmbientLight=function(a){THREE.Light.call(this,a)};THREE.AmbientLight.prototype=new THREE.Light;THREE.AmbientLight.prototype.constructor=THREE.AmbientLight;THREE.DirectionalLight=function(a,c){THREE.Light.call(this,a);this.position=new THREE.Vector3(0,1,0);this.intensity=c||1};THREE.DirectionalLight.prototype=new THREE.Light;THREE.DirectionalLight.prototype.constructor=THREE.DirectionalLight;
+THREE.PointLight=function(a,c){THREE.Light.call(this,a);this.position=new THREE.Vector3;this.intensity=c||1};THREE.DirectionalLight.prototype=new THREE.Light;THREE.DirectionalLight.prototype.constructor=THREE.PointLight;
+THREE.Object3D=function(){this.position=new THREE.Vector3;this.rotation=new THREE.Vector3;this.scale=new THREE.Vector3(1,1,1);this.matrix=new THREE.Matrix4;this.translationMatrix=new THREE.Matrix4;this.rotationMatrix=new THREE.Matrix4;this.scaleMatrix=new THREE.Matrix4;this.screen=new THREE.Vector3;this.autoUpdateMatrix=this.visible=true;this.updateMatrix=function(){this.matrixPosition=THREE.Matrix4.translationMatrix(this.position.x,this.position.y,this.position.z);this.rotationMatrix=THREE.Matrix4.rotationXMatrix(this.rotation.x);
+this.rotationMatrix.multiplySelf(THREE.Matrix4.rotationYMatrix(this.rotation.y));this.rotationMatrix.multiplySelf(THREE.Matrix4.rotationZMatrix(this.rotation.z));this.scaleMatrix=THREE.Matrix4.scaleMatrix(this.scale.x,this.scale.y,this.scale.z);this.matrix.copy(this.matrixPosition);this.matrix.multiplySelf(this.rotationMatrix);this.matrix.multiplySelf(this.scaleMatrix)}};THREE.Particle=function(a){THREE.Object3D.call(this);this.material=a instanceof Array?a:[a];this.autoUpdateMatrix=false};
+THREE.Particle.prototype=new THREE.Object3D;THREE.Particle.prototype.constructor=THREE.Particle;THREE.Line=function(a,c){THREE.Object3D.call(this);this.geometry=a;this.material=c instanceof Array?c:[c]};THREE.Line.prototype=new THREE.Object3D;THREE.Line.prototype.constructor=THREE.Line;
+THREE.Mesh=function(a,c,d){THREE.Object3D.call(this);this.geometry=a;this.material=c instanceof Array?c:[c];this.overdraw=this.doubleSided=this.flipSided=false;this.materialFaceGroup={};this.sortFacesByMaterial();d&&this.normalizeUVs();this.geometry.computeBoundingBox()};THREE.Mesh.prototype=new THREE.Object3D;THREE.Mesh.prototype.constructor=THREE.Mesh;
+THREE.Mesh.prototype.sortFacesByMaterial=function(){function a(C){var E=[];c=0;for(d=C.length;c<d;c++)C[c]==undefined?E.push("undefined"):E.push(C[c].toString());return E.join("_")}var c,d,g,h,q,m,b,l,y={};g=0;for(h=this.geometry.faces.length;g<h;g++){q=this.geometry.faces[g];m=q.material;b=a(m);if(y[b]==undefined)y[b]={hash:b,counter:0};l=y[b].hash+"_"+y[b].counter;if(this.materialFaceGroup[l]==undefined)this.materialFaceGroup[l]={faces:[],material:m,vertices:0};q=q instanceof THREE.Face3?3:4;if(this.materialFaceGroup[l].vertices+
+q>65535){y[b].counter+=1;l=y[b].hash+"_"+y[b].counter;if(this.materialFaceGroup[l]==undefined)this.materialFaceGroup[l]={faces:[],material:m,vertices:0}}this.materialFaceGroup[l].faces.push(g);this.materialFaceGroup[l].vertices+=q}};THREE.Mesh.prototype.normalizeUVs=function(){var a,c,d,g,h;a=0;for(c=this.geometry.uvs.length;a<c;a++){h=this.geometry.uvs[a];d=0;for(g=h.length;d<g;d++){if(h[d].u!=1)h[d].u-=Math.floor(h[d].u);if(h[d].v!=1)h[d].v-=Math.floor(h[d].v)}}};THREE.FlatShading=0;
+THREE.SmoothShading=1;THREE.NormalBlending=0;THREE.AdditiveBlending=1;THREE.SubtractiveBlending=2;
+THREE.LineBasicMaterial=function(a){this.color=new THREE.Color(16711680);this.opacity=1;this.blending=THREE.NormalBlending;this.linewidth=1;this.linejoin=this.linecap="round";if(a){a.color!==undefined&&this.color.setHex(a.color);if(a.opacity!==undefined)this.opacity=a.opacity;if(a.blending!==undefined)this.blending=a.blending;if(a.linewidth!==undefined)this.linewidth=a.linewidth;if(a.linecap!==undefined)this.linecap=a.linecap;if(a.linejoin!==undefined)this.linejoin=a.linejoin}this.toString=function(){return"THREE.LineBasicMaterial (<br/>color: "+
+this.color+"<br/>opacity: "+this.opacity+"<br/>blending: "+this.blending+"<br/>linewidth: "+this.linewidth+"<br/>linecap: "+this.linecap+"<br/>linejoin: "+this.linejoin+"<br/>)"}};
+THREE.MeshBasicMaterial=function(a){this.id=THREE.MeshBasicMaterialCounter.value++;this.color=new THREE.Color(15658734);this.env_map=this.map=null;this.combine=THREE.Multiply;this.reflectivity=1;this.refraction_ratio=0.98;this.opacity=1;this.shading=THREE.SmoothShading;this.blending=THREE.NormalBlending;this.wireframe=false;this.wireframe_linewidth=1;this.wireframe_linejoin=this.wireframe_linecap="round";if(a){a.color!==undefined&&this.color.setHex(a.color);if(a.map!==undefined)this.map=a.map;if(a.env_map!==
+undefined)this.env_map=a.env_map;if(a.combine!==undefined)this.combine=a.combine;if(a.reflectivity!==undefined)this.reflectivity=a.reflectivity;if(a.refraction_ratio!==undefined)this.refraction_ratio=a.refraction_ratio;if(a.opacity!==undefined)this.opacity=a.opacity;if(a.shading!==undefined)this.shading=a.shading;if(a.blending!==undefined)this.blending=a.blending;if(a.wireframe!==undefined)this.wireframe=a.wireframe;if(a.wireframe_linewidth!==undefined)this.wireframe_linewidth=a.wireframe_linewidth;
+if(a.wireframe_linecap!==undefined)this.wireframe_linecap=a.wireframe_linecap;if(a.wireframe_linejoin!==undefined)this.wireframe_linejoin=a.wireframe_linejoin}this.toString=function(){return"THREE.MeshBasicMaterial (<br/>id: "+this.id+"<br/>color: "+this.color+"<br/>map: "+this.map+"<br/>env_map: "+this.env_map+"<br/>combine: "+this.combine+"<br/>reflectivity: "+this.reflectivity+"<br/>refraction_ratio: "+this.refraction_ratio+"<br/>opacity: "+this.opacity+"<br/>blending: "+this.blending+"<br/>wireframe: "+
+this.wireframe+"<br/>wireframe_linewidth: "+this.wireframe_linewidth+"<br/>wireframe_linecap: "+this.wireframe_linecap+"<br/>wireframe_linejoin: "+this.wireframe_linejoin+"<br/>)"}};THREE.MeshBasicMaterialCounter={value:0};
+THREE.MeshLambertMaterial=function(a){this.id=THREE.MeshLambertMaterialCounter.value++;this.color=new THREE.Color(15658734);this.env_map=this.map=null;this.combine=THREE.Multiply;this.reflectivity=1;this.refraction_ratio=0.98;this.opacity=1;this.shading=THREE.SmoothShading;this.blending=THREE.NormalBlending;this.wireframe=false;this.wireframe_linewidth=1;this.wireframe_linejoin=this.wireframe_linecap="round";if(a){a.color!==undefined&&this.color.setHex(a.color);if(a.map!==undefined)this.map=a.map;
+if(a.env_map!==undefined)this.env_map=a.env_map;if(a.combine!==undefined)this.combine=a.combine;if(a.reflectivity!==undefined)this.reflectivity=a.reflectivity;if(a.refraction_ratio!==undefined)this.refraction_ratio=a.refraction_ratio;if(a.opacity!==undefined)this.opacity=a.opacity;if(a.shading!==undefined)this.shading=a.shading;if(a.blending!==undefined)this.blending=a.blending;if(a.wireframe!==undefined)this.wireframe=a.wireframe;if(a.wireframe_linewidth!==undefined)this.wireframe_linewidth=a.wireframe_linewidth;
+if(a.wireframe_linecap!==undefined)this.wireframe_linecap=a.wireframe_linecap;if(a.wireframe_linejoin!==undefined)this.wireframe_linejoin=a.wireframe_linejoin}this.toString=function(){return"THREE.MeshLambertMaterial (<br/>id: "+this.id+"<br/>color: "+this.color+"<br/>map: "+this.map+"<br/>env_map: "+this.env_map+"<br/>combine: "+this.combine+"<br/>reflectivity: "+this.reflectivity+"<br/>refraction_ratio: "+this.refraction_ratio+"<br/>opacity: "+this.opacity+"<br/>shading: "+this.shading+"<br/>blending: "+
+this.blending+"<br/>wireframe: "+this.wireframe+"<br/>wireframe_linewidth: "+this.wireframe_linewidth+"<br/>wireframe_linecap: "+this.wireframe_linecap+"<br/>wireframe_linejoin: "+this.wireframe_linejoin+"<br/> )"}};THREE.MeshLambertMaterialCounter={value:0};
+THREE.MeshPhongMaterial=function(a){this.id=THREE.MeshPhongMaterialCounter.value++;this.color=new THREE.Color(15658734);this.ambient=new THREE.Color(328965);this.specular=new THREE.Color(1118481);this.shininess=30;this.env_map=this.specular_map=this.map=null;this.combine=THREE.Multiply;this.reflectivity=1;this.refraction_ratio=0.98;this.opacity=1;this.shading=THREE.SmoothShading;this.blending=THREE.NormalBlending;this.wireframe=false;this.wireframe_linewidth=1;this.wireframe_linejoin=this.wireframe_linecap=
+"round";if(a){if(a.color!==undefined)this.color=new THREE.Color(a.color);if(a.ambient!==undefined)this.ambient=new THREE.Color(a.ambient);if(a.specular!==undefined)this.specular=new THREE.Color(a.specular);if(a.shininess!==undefined)this.shininess=a.shininess;if(a.map!==undefined)this.map=a.map;if(a.specular_map!==undefined)this.specular_map=a.specular_map;if(a.env_map!==undefined)this.env_map=a.env_map;if(a.combine!==undefined)this.combine=a.combine;if(a.reflectivity!==undefined)this.reflectivity=
+a.reflectivity;if(a.refraction_ratio!==undefined)this.refraction_ratio=a.refraction_ratio;if(a.opacity!==undefined)this.opacity=a.opacity;if(a.shading!==undefined)this.shading=a.shading;if(a.blending!==undefined)this.blending=a.blending;if(a.wireframe!==undefined)this.wireframe=a.wireframe;if(a.wireframe_linewidth!==undefined)this.wireframe_linewidth=a.wireframe_linewidth;if(a.wireframe_linecap!==undefined)this.wireframe_linecap=a.wireframe_linecap;if(a.wireframe_linejoin!==undefined)this.wireframe_linejoin=
+a.wireframe_linejoin}this.toString=function(){return"THREE.MeshPhongMaterial (<br/>id: "+this.id+"<br/>color: "+this.color+"<br/>ambient: "+this.ambient+"<br/>specular: "+this.specular+"<br/>shininess: "+this.shininess+"<br/>map: "+this.map+"<br/>specular_map: "+this.specular_map+"<br/>env_map: "+this.env_map+"<br/>combine: "+this.combine+"<br/>reflectivity: "+this.reflectivity+"<br/>refraction_ratio: "+this.refraction_ratio+"<br/>opacity: "+this.opacity+"<br/>shading: "+this.shading+"<br/>wireframe: "+
+this.wireframe+"<br/>wireframe_linewidth: "+this.wireframe_linewidth+"<br/>wireframe_linecap: "+this.wireframe_linecap+"<br/>wireframe_linejoin: "+this.wireframe_linejoin+"<br/>"+ +")"}};THREE.MeshPhongMaterialCounter={value:0};
+THREE.MeshDepthMaterial=function(a){this.near=1;this.far=1E3;this.opacity=1;this.blending=THREE.NormalBlending;if(a){if(a.near!==undefined)this.near=a.near;if(a.far!==undefined)this.far=a.far;if(a.opacity!==undefined)this.opacity=a.opacity;if(a.blending!==undefined)this.blending=a.blending}this.__2near=2*this.near;this.__farPlusNear=this.far+this.near;this.__farMinusNear=this.far-this.near;this.toString=function(){return"THREE.MeshDepthMaterial"}};
+THREE.MeshNormalMaterial=function(a){this.opacity=1;this.shading=THREE.FlatShading;this.blending=THREE.NormalBlending;if(a){if(a.opacity!==undefined)this.opacity=a.opacity;if(a.shading!==undefined)this.shading=a.shading;if(a.blending!==undefined)this.blending=a.blending}this.toString=function(){return"THREE.MeshNormalMaterial"}};THREE.MeshFaceMaterial=function(){this.toString=function(){return"THREE.MeshFaceMaterial"}};
+THREE.MeshCubeMaterial=function(a){this.id=THREE.MeshCubeMaterial.value++;this.env_map=null;this.blending=THREE.NormalBlending;if(a)if(a.env_map!==undefined)this.env_map=a.env_map;this.toString=function(){return"THREE.MeshCubeMaterial( id: "+this.id+"<br/>env_map: "+this.env_map+" )"}};THREE.MeshCubeMaterialCounter={value:0};
+THREE.MeshShaderMaterial=function(a){this.id=THREE.MeshShaderMaterialCounter.value++;this.vertex_shader=this.fragment_shader="void main() {}";this.uniforms={};this.shading=THREE.SmoothShading;this.blending=THREE.NormalBlending;this.wireframe=false;this.wireframe_linewidth=1;this.wireframe_linejoin=this.wireframe_linecap="round";if(a){if(a.fragment_shader!==undefined)this.fragment_shader=a.fragment_shader;if(a.vertex_shader!==undefined)this.vertex_shader=a.vertex_shader;if(a.uniforms!==undefined)this.uniforms=
+a.uniforms;if(a.shading!==undefined)this.shading=a.shading;if(a.blending!==undefined)this.blending=a.blending;if(a.wireframe!==undefined)this.wireframe=a.wireframe;if(a.wireframe_linewidth!==undefined)this.wireframe_linewidth=a.wireframe_linewidth;if(a.wireframe_linecap!==undefined)this.wireframe_linecap=a.wireframe_linecap;if(a.wireframe_linejoin!==undefined)this.wireframe_linejoin=a.wireframe_linejoin}this.toString=function(){return"THREE.MeshShaderMaterial (<br/>id: "+this.id+"<br/>blending: "+
+this.blending+"<br/>wireframe: "+this.wireframe+"<br/>wireframe_linewidth: "+this.wireframe_linewidth+"<br/>wireframe_linecap: "+this.wireframe_linecap+"<br/>wireframe_linejoin: "+this.wireframe_linejoin+"<br/>)"}};THREE.MeshShaderMaterialCounter={value:0};
+THREE.ParticleBasicMaterial=function(a){this.color=new THREE.Color(16711680);this.map=null;this.opacity=1;this.blending=THREE.NormalBlending;this.offset=new THREE.Vector2;if(a){a.color!==undefined&&this.color.setHex(a.color);if(a.map!==undefined)this.map=a.map;if(a.opacity!==undefined)this.opacity=a.opacity;if(a.blending!==undefined)this.blending=a.blending}this.toString=function(){return"THREE.ParticleBasicMaterial (<br/>color: "+this.color+"<br/>map: "+this.map+"<br/>opacity: "+this.opacity+"<br/>blending: "+
+this.blending+"<br/>)"}};THREE.ParticleCircleMaterial=function(a){this.color=new THREE.Color(16711680);this.opacity=1;this.blending=THREE.NormalBlending;if(a){a.color!==undefined&&this.color.setHex(a.color);if(a.opacity!==undefined)this.opacity=a.opacity;if(a.blending!==undefined)this.blending=a.blending}this.toString=function(){return"THREE.ParticleCircleMaterial (<br/>color: "+this.color+"<br/>opacity: "+this.opacity+"<br/>blending: "+this.blending+"<br/>)"}};
+THREE.ParticleDOMMaterial=function(a){this.domElement=a;this.toString=function(){return"THREE.ParticleDOMMaterial ( domElement: "+this.domElement+" )"}};THREE.Texture=function(a,c,d,g){this.image=a;this.loaded=false;this.mapping=c!==undefined?c:THREE.UVMapping;this.wrap_s=d!==undefined?d:THREE.ClampToEdge;this.wrap_t=g!==undefined?g:THREE.ClampToEdge;this.toString=function(){return"THREE.Texture (<br/>image: "+this.image+"<br/>wrap_s: "+this.wrap_s+"<br/>wrap_t: "+this.wrap_t+"<br/>)"}};
+THREE.UVMapping=0;THREE.ReflectionMapping=1;THREE.RefractionMapping=2;THREE.Multiply=0;THREE.Mix=1;THREE.Repeat=0;THREE.ClampToEdge=1;THREE.MirroredRepeat=2;THREE.TextureCube=function(a,c){this.image=a;this.mapping=c?c:THREE.ReflectionMap;this.toString=function(){return"THREE.TextureCube (<br/>image: "+this.image+"<br/>mapping: "+this.mapping+"<br/>)"}};
+THREE.Scene=function(){this.objects=[];this.lights=[];this.addObject=function(a){this.objects.push(a)};this.removeObject=function(a){a=this.objects.indexOf(a);a!==-1&&this.objects.splice(a,1)};this.addLight=function(a){this.lights.push(a)};this.removeLight=function(a){a=this.lights.indexOf(a);a!==-1&&this.lights.splice(a,1)};this.toString=function(){return"THREE.Scene ( "+this.objects+" )"}};
+THREE.Projector=function(){function a(f,e){var i=0,o=1,j=f.z+f.w,k=e.z+e.w,n=-f.z+f.w,s=-e.z+e.w;if(j>=0&&k>=0&&n>=0&&s>=0)return true;else if(j<0&&k<0||n<0&&s<0)return false;else{if(j<0)i=Math.max(i,j/(j-k));else if(k<0)o=Math.min(o,j/(j-k));if(n<0)i=Math.max(i,n/(n-s));else if(s<0)o=Math.min(o,n/(n-s));if(o<i)return false;else{f.lerpSelf(e,i);e.lerpSelf(f,1-o);return true}}}var c=null,d,g,h,q=[],m,b,l=[],y,C,E=[],w=new THREE.Vector4,D=new THREE.Matrix4,N=new THREE.Matrix4,J=new THREE.Vector4,M=
+new THREE.Vector4,t;this.projectScene=function(f,e){var i,o,j,k,n,s,G,r,R,x,u,U,P,z,p,K,H;c=[];h=b=C=0;e.autoUpdateMatrix&&e.updateMatrix();D.multiply(e.projectionMatrix,e.matrix);G=f.objects;i=0;for(o=G.length;i<o;i++){r=G[i];r.autoUpdateMatrix&&r.updateMatrix();R=r.matrix;x=r.rotationMatrix;u=r.material;U=r.overdraw;if(r instanceof THREE.Mesh){P=r.geometry.vertices;j=0;for(k=P.length;j<k;j++){z=P[j];z.positionWorld.copy(z.position);R.transformVector3(z.positionWorld);p=z.positionScreen;p.copy(z.positionWorld);
+D.transformVector4(p);p.multiplyScalar(1/p.w);z.__visible=p.z>0&&p.z<1}z=r.geometry.faces;j=0;for(k=z.length;j<k;j++){p=z[j];if(p instanceof THREE.Face3){n=P[p.a];s=P[p.b];K=P[p.c];if(n.__visible&&s.__visible&&K.__visible)if(r.doubleSided||r.flipSided!=(K.positionScreen.x-n.positionScreen.x)*(s.positionScreen.y-n.positionScreen.y)-(K.positionScreen.y-n.positionScreen.y)*(s.positionScreen.x-n.positionScreen.x)<0){d=q[h]=q[h]||new THREE.RenderableFace3;d.v1.positionWorld.copy(n.positionWorld);d.v2.positionWorld.copy(s.positionWorld);
+d.v3.positionWorld.copy(K.positionWorld);d.v1.positionScreen.copy(n.positionScreen);d.v2.positionScreen.copy(s.positionScreen);d.v3.positionScreen.copy(K.positionScreen);d.normalWorld.copy(p.normal);x.transformVector3(d.normalWorld);d.centroidWorld.copy(p.centroid);R.transformVector3(d.centroidWorld);d.centroidScreen.copy(d.centroidWorld);D.transformVector3(d.centroidScreen);K=p.vertexNormals;t=d.vertexNormalsWorld;n=0;for(s=K.length;n<s;n++){H=t[n]=t[n]||new THREE.Vector3;H.copy(K[n]);x.transformVector3(H)}d.z=
+d.centroidScreen.z;d.meshMaterial=u;d.faceMaterial=p.material;d.overdraw=U;if(r.geometry.uvs[j]){d.uvs[0]=r.geometry.uvs[j][0];d.uvs[1]=r.geometry.uvs[j][1];d.uvs[2]=r.geometry.uvs[j][2]}c.push(d);h++}}else if(p instanceof THREE.Face4){n=P[p.a];s=P[p.b];K=P[p.c];H=P[p.d];if(n.__visible&&s.__visible&&K.__visible&&H.__visible)if(r.doubleSided||r.flipSided!=((H.positionScreen.x-n.positionScreen.x)*(s.positionScreen.y-n.positionScreen.y)-(H.positionScreen.y-n.positionScreen.y)*(s.positionScreen.x-n.positionScreen.x)<
+0||(s.positionScreen.x-K.positionScreen.x)*(H.positionScreen.y-K.positionScreen.y)-(s.positionScreen.y-K.positionScreen.y)*(H.positionScreen.x-K.positionScreen.x)<0)){d=q[h]=q[h]||new THREE.RenderableFace3;d.v1.positionWorld.copy(n.positionWorld);d.v2.positionWorld.copy(s.positionWorld);d.v3.positionWorld.copy(H.positionWorld);d.v1.positionScreen.copy(n.positionScreen);d.v2.positionScreen.copy(s.positionScreen);d.v3.positionScreen.copy(H.positionScreen);d.normalWorld.copy(p.normal);x.transformVector3(d.normalWorld);
+d.centroidWorld.copy(p.centroid);R.transformVector3(d.centroidWorld);d.centroidScreen.copy(d.centroidWorld);D.transformVector3(d.centroidScreen);d.z=d.centroidScreen.z;d.meshMaterial=u;d.faceMaterial=p.material;d.overdraw=U;if(r.geometry.uvs[j]){d.uvs[0]=r.geometry.uvs[j][0];d.uvs[1]=r.geometry.uvs[j][1];d.uvs[2]=r.geometry.uvs[j][3]}c.push(d);h++;g=q[h]=q[h]||new THREE.RenderableFace3;g.v1.positionWorld.copy(s.positionWorld);g.v2.positionWorld.copy(K.positionWorld);g.v3.positionWorld.copy(H.positionWorld);
+g.v1.positionScreen.copy(s.positionScreen);g.v2.positionScreen.copy(K.positionScreen);g.v3.positionScreen.copy(H.positionScreen);g.normalWorld.copy(d.normalWorld);g.centroidWorld.copy(d.centroidWorld);g.centroidScreen.copy(d.centroidScreen);g.z=g.centroidScreen.z;g.meshMaterial=u;g.faceMaterial=p.material;g.overdraw=U;if(r.geometry.uvs[j]){g.uvs[0]=r.geometry.uvs[j][1];g.uvs[1]=r.geometry.uvs[j][2];g.uvs[2]=r.geometry.uvs[j][3]}c.push(g);h++}}}}else if(r instanceof THREE.Line){N.multiply(D,R);P=r.geometry.vertices;
+z=P[0];z.positionScreen.copy(z.position);N.transformVector4(z.positionScreen);j=1;for(k=P.length;j<k;j++){n=P[j];n.positionScreen.copy(n.position);N.transformVector4(n.positionScreen);s=P[j-1];J.copy(n.positionScreen);M.copy(s.positionScreen);if(a(J,M)){J.multiplyScalar(1/J.w);M.multiplyScalar(1/M.w);m=l[b]=l[b]||new THREE.RenderableLine;m.v1.positionScreen.copy(J);m.v2.positionScreen.copy(M);m.z=Math.max(J.z,M.z);m.material=r.material;c.push(m);b++}}}else if(r instanceof THREE.Particle){w.set(r.position.x,
+r.position.y,r.position.z,1);D.transformVector4(w);w.z/=w.w;if(w.z>0&&w.z<1){y=E[C]=E[C]||new THREE.RenderableParticle;y.x=w.x/w.w;y.y=w.y/w.w;y.z=w.z;y.rotation=r.rotation.z;y.scale.x=r.scale.x*Math.abs(y.x-(w.x+e.projectionMatrix.n11)/(w.w+e.projectionMatrix.n14));y.scale.y=r.scale.y*Math.abs(y.y-(w.y+e.projectionMatrix.n22)/(w.w+e.projectionMatrix.n24));y.material=r.material;c.push(y);C++}}}c.sort(function(S,B){return B.z-S.z});return c};this.unprojectVector=function(f,e){var i=new THREE.Matrix4;
+i.multiply(THREE.Matrix4.makeInvert(e.matrix),THREE.Matrix4.makeInvert(e.projectionMatrix));i.transformVector3(f);return f}};
+THREE.DOMRenderer=function(){THREE.Renderer.call(this);var a=null,c=new THREE.Projector,d,g,h,q;this.domElement=document.createElement("div");this.setSize=function(m,b){d=m;g=b;h=d/2;q=g/2};this.render=function(m,b){var l,y,C,E,w,D,N,J;a=c.projectScene(m,b);l=0;for(y=a.length;l<y;l++){w=a[l];if(w instanceof THREE.RenderableParticle){N=w.x*h+h;J=w.y*q+q;C=0;for(E=w.material.length;C<E;C++){D=w.material[C];if(D instanceof THREE.ParticleDOMMaterial){D=D.domElement;D.style.left=N+"px";D.style.top=J+"px"}}}}}};
+THREE.CanvasRenderer=function(){function a(I,Y,V,F){var v,L,$,Q,X=I.lights;I=0;for(v=X.length;I<v;I++){L=X[I];$=L.color;Q=L.intensity;if(L instanceof THREE.DirectionalLight){L=V.dot(L.position)*Q;if(L>0){F.r+=$.r*L;F.g+=$.g*L;F.b+=$.b*L}}else if(L instanceof THREE.PointLight){sa.sub(L.position,Y);sa.normalize();L=V.dot(sa)*Q;if(L>0){F.r+=$.r*L;F.g+=$.g*L;F.b+=$.b*L}}}}function c(I,Y,V,F,v,L){if(v.opacity!=0){q(v.opacity);m(v.blending);R=I.positionScreen.x;x=I.positionScreen.y;u=Y.positionScreen.x;
+U=Y.positionScreen.y;P=V.positionScreen.x;z=V.positionScreen.y;var $=R,Q=x,X=u,aa=U,Z=P,ca=z;t.beginPath();t.moveTo($,Q);t.lineTo(X,aa);t.lineTo(Z,ca);t.lineTo($,Q);t.closePath();if(v instanceof THREE.MeshBasicMaterial)if(v.map)h(R,x,u,U,P,z,v.map.image,F.uvs[0].u,F.uvs[0].v,F.uvs[1].u,F.uvs[1].v,F.uvs[2].u,F.uvs[2].v);else v.wireframe?d(v.color.__styleString,v.wireframe_linewidth):g(v.color.__styleString);else if(v instanceof THREE.MeshLambertMaterial){if(v.map&&!v.wireframe){h(R,x,u,U,P,z,v.map.image,
+F.uvs[0].u,F.uvs[0].v,F.uvs[1].u,F.uvs[1].v,F.uvs[2].u,F.uvs[2].v);m(THREE.SubtractiveBlending)}if(ta)if(!v.wireframe&&v.shading==THREE.SmoothShading&&F.vertexNormalsWorld.length==3){K.r=H.r=S.r=ga.r;K.g=H.g=S.g=ga.g;K.b=H.b=S.b=ga.b;a(L,F.v1.positionWorld,F.vertexNormalsWorld[0],K);a(L,F.v2.positionWorld,F.vertexNormalsWorld[1],H);a(L,F.v3.positionWorld,F.vertexNormalsWorld[2],S);B.r=(H.r+S.r)*0.5;B.g=(H.g+S.g)*0.5;B.b=(H.b+S.b)*0.5;O=b(K,H,S,B);h(R,x,u,U,P,z,O,0,0,1,0,0,1)}else{ha.r=ga.r;ha.g=ga.g;
+ha.b=ga.b;a(L,F.centroidWorld,F.normalWorld,ha);p.r=v.color.r*ha.r;p.g=v.color.g*ha.g;p.b=v.color.b*ha.b;p.updateStyleString();v.wireframe?d(p.__styleString,v.wireframe_linewidth):g(p.__styleString)}else v.wireframe?d(v.color.__styleString,v.wireframe_linewidth):g(v.color.__styleString)}else if(v instanceof THREE.MeshDepthMaterial){A=v.__2near;W=v.__farPlusNear;ea=v.__farMinusNear;K.r=K.g=K.b=1-A/(W-I.positionScreen.z*ea);H.r=H.g=H.b=1-A/(W-Y.positionScreen.z*ea);S.r=S.g=S.b=1-A/(W-V.positionScreen.z*
+ea);B.r=(H.r+S.r)*0.5;B.g=(H.g+S.g)*0.5;B.b=(H.b+S.b)*0.5;O=b(K,H,S,B);h(R,x,u,U,P,z,O,0,0,1,0,0,1)}else if(v instanceof THREE.MeshNormalMaterial){p.r=l(F.normalWorld.x);p.g=l(F.normalWorld.y);p.b=l(F.normalWorld.z);p.updateStyleString();v.wireframe?d(p.__styleString,v.wireframe_linewidth):g(p.__styleString)}}}function d(I,Y){if(i!=I)t.strokeStyle=i=I;if(j!=Y)t.lineWidth=j=Y;t.stroke();da.inflate(Y*2)}function g(I){if(o!=I)t.fillStyle=o=I;t.fill()}function h(I,Y,V,F,v,L,$,Q,X,aa,Z,ca,ka){var ja,fa;
+ja=$.width-1;fa=$.height-1;Q*=ja;X*=fa;aa*=ja;Z*=fa;ca*=ja;ka*=fa;V-=I;F-=Y;v-=I;L-=Y;aa-=Q;Z-=X;ca-=Q;ka-=X;fa=1/(aa*ka-ca*Z);ja=(ka*V-Z*v)*fa;Z=(ka*F-Z*L)*fa;V=(aa*v-ca*V)*fa;F=(aa*L-ca*F)*fa;I=I-ja*Q-V*X;Y=Y-Z*Q-F*X;t.save();t.transform(ja,Z,V,F,I,Y);t.clip();t.drawImage($,0,0);t.restore()}function q(I){if(f!=I)t.globalAlpha=f=I}function m(I){if(e!=I){switch(I){case THREE.NormalBlending:t.globalCompositeOperation="source-over";break;case THREE.AdditiveBlending:t.globalCompositeOperation="lighter";
+break;case THREE.SubtractiveBlending:t.globalCompositeOperation="darker"}e=I}}function b(I,Y,V,F){ia[0]=n(0,k(255,~~(I.r*255)));ia[1]=n(0,k(255,~~(I.g*255)));ia[2]=n(0,k(255,~~(I.b*255)));ia[4]=n(0,k(255,~~(Y.r*255)));ia[5]=n(0,k(255,~~(Y.g*255)));ia[6]=n(0,k(255,~~(Y.b*255)));ia[8]=n(0,k(255,~~(V.r*255)));ia[9]=n(0,k(255,~~(V.g*255)));ia[10]=n(0,k(255,~~(V.b*255)));ia[12]=n(0,k(255,~~(F.r*255)));ia[13]=n(0,k(255,~~(F.g*255)));ia[14]=n(0,k(255,~~(F.b*255)));oa.putImageData(ua,0,0);ra.drawImage(pa,
+0,0);return qa}function l(I){return I<0?k((1+I)*0.5,0.5):0.5+k(I*0.5,0.5)}function y(I,Y){var V=Y.x-I.x,F=Y.y-I.y,v=1/Math.sqrt(V*V+F*F);V*=v;F*=v;Y.x+=V;Y.y+=F;I.x-=V;I.y-=F}var C=null,E=new THREE.Projector,w=document.createElement("canvas"),D,N,J,M,t=w.getContext("2d"),f=1,e=0,i=null,o=null,j=1,k=Math.min,n=Math.max,s,G,r,R,x,u,U,P,z,p=new THREE.Color,K=new THREE.Color,H=new THREE.Color,S=new THREE.Color,B=new THREE.Color,A,W,ea,O,T=new THREE.Rectangle,ba=new THREE.Rectangle,da=new THREE.Rectangle,
+ta=false,ha=new THREE.Color,ga=new THREE.Color,la=new THREE.Color,ma=new THREE.Color,xa=Math.PI*2,sa=new THREE.Vector3,pa,oa,ua,ia,qa,ra,na=16;pa=document.createElement("canvas");pa.width=pa.height=2;oa=pa.getContext("2d");oa.fillStyle="rgba(0,0,0,1)";oa.fillRect(0,0,2,2);ua=oa.getImageData(0,0,2,2);ia=ua.data;qa=document.createElement("canvas");qa.width=qa.height=na;ra=qa.getContext("2d");ra.translate(-na/2,-na/2);ra.scale(na,na);na--;this.domElement=w;this.autoClear=true;this.setSize=function(I,
+Y){D=I;N=Y;J=D/2;M=N/2;w.width=D;w.height=N;T.set(-J,-M,J,M)};this.clear=function(){if(!ba.isEmpty()){ba.inflate(1);ba.minSelf(T);t.clearRect(ba.getX(),ba.getY(),ba.getWidth(),ba.getHeight());ba.empty()}};this.render=function(I,Y){var V,F,v,L,$,Q,X,aa;t.setTransform(1,0,0,-1,J,M);this.autoClear&&this.clear();C=E.projectScene(I,Y);if(ta=I.lights.length>0){$=I.lights;ga.setRGB(0,0,0);la.setRGB(0,0,0);ma.setRGB(0,0,0);V=0;for(F=$.length;V<F;V++){v=$[V];L=v.color;if(v instanceof THREE.AmbientLight){ga.r+=
+L.r;ga.g+=L.g;ga.b+=L.b}else if(v instanceof THREE.DirectionalLight){la.r+=L.r;la.g+=L.g;la.b+=L.b}else if(v instanceof THREE.PointLight){ma.r+=L.r;ma.g+=L.g;ma.b+=L.b}}}V=0;for(F=C.length;V<F;V++){v=C[V];da.empty();if(v instanceof THREE.RenderableParticle){s=v;s.x*=J;s.y*=M;L=0;for($=v.material.length;L<$;L++){Q=s;X=v;var Z=v.material[L];if(Z.opacity!=0){q(Z.opacity);m(Z.blending);aa=void 0;var ca=void 0,ka=void 0,ja=void 0,fa=void 0,va=void 0,wa=void 0;if(Z instanceof THREE.ParticleBasicMaterial){if(Z.map){fa=
+Z.map;va=fa.width>>1;wa=fa.height>>1;ka=X.scale.x*J;ja=X.scale.y*M;aa=ka*va;ca=ja*wa;da.set(Q.x-aa,Q.y-ca,Q.x+aa,Q.y+ca);if(T.instersects(da)){t.save();t.translate(Q.x,Q.y);t.rotate(-X.rotation);t.scale(ka,-ja);t.translate(-va,-wa);t.drawImage(fa,0,0);t.restore()}}}else if(Z instanceof THREE.ParticleCircleMaterial){if(ta){ha.r=ga.r+la.r+ma.r;ha.g=ga.g+la.g+ma.g;ha.b=ga.b+la.b+ma.b;p.r=Z.color.r*ha.r;p.g=Z.color.g*ha.g;p.b=Z.color.b*ha.b;p.updateStyleString()}else p.__styleString=Z.color.__styleString;
+aa=X.scale.x*J;ca=X.scale.y*M;da.set(Q.x-aa,Q.y-ca,Q.x+aa,Q.y+ca);if(T.instersects(da)){Z=p.__styleString;if(o!=Z)t.fillStyle=o=Z;t.save();t.translate(Q.x,Q.y);t.rotate(-X.rotation);t.scale(aa,ca);t.beginPath();t.arc(0,0,1,0,xa,true);t.closePath();t.fill();t.restore()}}}}}else if(v instanceof THREE.RenderableLine){s=v.v1;G=v.v2;s.positionScreen.x*=J;s.positionScreen.y*=M;G.positionScreen.x*=J;G.positionScreen.y*=M;da.addPoint(s.positionScreen.x,s.positionScreen.y);da.addPoint(G.positionScreen.x,G.positionScreen.y);
+if(T.instersects(da)){L=0;for($=v.material.length;L<$;){X=s;aa=G;Q=v.material[L++];if(Q.opacity!=0){q(Q.opacity);m(Q.blending);t.beginPath();t.moveTo(X.positionScreen.x,X.positionScreen.y);t.lineTo(aa.positionScreen.x,aa.positionScreen.y);t.closePath();if(Q instanceof THREE.LineBasicMaterial){p.__styleString=Q.color.__styleString;X=Q.linewidth;if(j!=X)t.lineWidth=j=X;X=p.__styleString;if(i!=X)t.strokeStyle=i=X;t.stroke();da.inflate(Q.linewidth*2)}}}}}else if(v instanceof THREE.RenderableFace3){s=
+v.v1;G=v.v2;r=v.v3;s.positionScreen.x*=J;s.positionScreen.y*=M;G.positionScreen.x*=J;G.positionScreen.y*=M;r.positionScreen.x*=J;r.positionScreen.y*=M;if(v.overdraw){y(s.positionScreen,G.positionScreen);y(G.positionScreen,r.positionScreen);y(r.positionScreen,s.positionScreen)}da.addPoint(s.positionScreen.x,s.positionScreen.y);da.addPoint(G.positionScreen.x,G.positionScreen.y);da.addPoint(r.positionScreen.x,r.positionScreen.y);if(T.instersects(da)){L=0;for($=v.meshMaterial.length;L<$;){aa=v.meshMaterial[L++];
+if(aa instanceof THREE.MeshFaceMaterial){Q=0;for(X=v.faceMaterial.length;Q<X;)(aa=v.faceMaterial[Q++])&&c(s,G,r,v,aa,I)}else c(s,G,r,v,aa,I)}}}ba.addRectangle(da)}t.setTransform(1,0,0,1,0,0)}};
+THREE.SVGRenderer=function(){function a(p,K,H){var S,B,A,W;S=0;for(B=p.lights.length;S<B;S++){A=p.lights[S];if(A instanceof THREE.DirectionalLight){W=K.normalWorld.dot(A.position)*A.intensity;if(W>0){H.r+=A.color.r*W;H.g+=A.color.g*W;H.b+=A.color.b*W}}else if(A instanceof THREE.PointLight){s.sub(A.position,K.centroidWorld);s.normalize();W=K.normalWorld.dot(s)*A.intensity;if(W>0){H.r+=A.color.r*W;H.g+=A.color.g*W;H.b+=A.color.b*W}}}}function c(p,K,H,S,B,A){x=g(u++);x.setAttribute("d","M "+p.positionScreen.x+
+" "+p.positionScreen.y+" L "+K.positionScreen.x+" "+K.positionScreen.y+" L "+H.positionScreen.x+","+H.positionScreen.y+"z");if(B instanceof THREE.MeshBasicMaterial)e.__styleString=B.color.__styleString;else if(B instanceof THREE.MeshLambertMaterial)if(f){i.r=o.r;i.g=o.g;i.b=o.b;a(A,S,i);e.r=B.color.r*i.r;e.g=B.color.g*i.g;e.b=B.color.b*i.b;e.updateStyleString()}else e.__styleString=B.color.__styleString;else if(B instanceof THREE.MeshDepthMaterial){n=1-B.__2near/(B.__farPlusNear-S.z*B.__farMinusNear);
+e.setRGB(n,n,n)}else B instanceof THREE.MeshNormalMaterial&&e.setRGB(h(S.normalWorld.x),h(S.normalWorld.y),h(S.normalWorld.z));B.wireframe?x.setAttribute("style","fill: none; stroke: "+e.__styleString+"; stroke-width: "+B.wireframe_linewidth+"; stroke-opacity: "+B.opacity+"; stroke-linecap: "+B.wireframe_linecap+"; stroke-linejoin: "+B.wireframe_linejoin):x.setAttribute("style","fill: "+e.__styleString+"; fill-opacity: "+B.opacity);b.appendChild(x)}function d(p,K,H,S,B,A,W){x=g(u++);x.setAttribute("d",
+"M "+p.positionScreen.x+" "+p.positionScreen.y+" L "+K.positionScreen.x+" "+K.positionScreen.y+" L "+H.positionScreen.x+","+H.positionScreen.y+" L "+S.positionScreen.x+","+S.positionScreen.y+"z");if(A instanceof THREE.MeshBasicMaterial)e.__styleString=A.color.__styleString;else if(A instanceof THREE.MeshLambertMaterial)if(f){i.r=o.r;i.g=o.g;i.b=o.b;a(W,B,i);e.r=A.color.r*i.r;e.g=A.color.g*i.g;e.b=A.color.b*i.b;e.updateStyleString()}else e.__styleString=A.color.__styleString;else if(A instanceof THREE.MeshDepthMaterial){n=
+1-A.__2near/(A.__farPlusNear-B.z*A.__farMinusNear);e.setRGB(n,n,n)}else A instanceof THREE.MeshNormalMaterial&&e.setRGB(h(B.normalWorld.x),h(B.normalWorld.y),h(B.normalWorld.z));A.wireframe?x.setAttribute("style","fill: none; stroke: "+e.__styleString+"; stroke-width: "+A.wireframe_linewidth+"; stroke-opacity: "+A.opacity+"; stroke-linecap: "+A.wireframe_linecap+"; stroke-linejoin: "+A.wireframe_linejoin):x.setAttribute("style","fill: "+e.__styleString+"; fill-opacity: "+A.opacity);b.appendChild(x)}
+function g(p){if(G[p]==null){G[p]=document.createElementNS("http://www.w3.org/2000/svg","path");z==0&&G[p].setAttribute("shape-rendering","crispEdges");return G[p]}return G[p]}function h(p){return p<0?Math.min((1+p)*0.5,0.5):0.5+Math.min(p*0.5,0.5)}var q=null,m=new THREE.Projector,b=document.createElementNS("http://www.w3.org/2000/svg","svg"),l,y,C,E,w,D,N,J,M=new THREE.Rectangle,t=new THREE.Rectangle,f=false,e=new THREE.Color(16777215),i=new THREE.Color(16777215),o=new THREE.Color(0),j=new THREE.Color(0),
+k=new THREE.Color(0),n,s=new THREE.Vector3,G=[],r=[],R=[],x,u,U,P,z=1;this.domElement=b;this.autoClear=true;this.setQuality=function(p){switch(p){case "high":z=1;break;case "low":z=0}};this.setSize=function(p,K){l=p;y=K;C=l/2;E=y/2;b.setAttribute("viewBox",-C+" "+-E+" "+l+" "+y);b.setAttribute("width",l);b.setAttribute("height",y);M.set(-C,-E,C,E)};this.clear=function(){for(;b.childNodes.length>0;)b.removeChild(b.childNodes[0])};this.render=function(p,K){var H,S,B,A,W,ea,O,T;this.autoClear&&this.clear();
+q=m.projectScene(p,K);P=U=u=0;if(f=p.lights.length>0){O=p.lights;o.setRGB(0,0,0);j.setRGB(0,0,0);k.setRGB(0,0,0);H=0;for(S=O.length;H<S;H++){B=O[H];A=B.color;if(B instanceof THREE.AmbientLight){o.r+=A.r;o.g+=A.g;o.b+=A.b}else if(B instanceof THREE.DirectionalLight){j.r+=A.r;j.g+=A.g;j.b+=A.b}else if(B instanceof THREE.PointLight){k.r+=A.r;k.g+=A.g;k.b+=A.b}}}H=0;for(S=q.length;H<S;H++){O=q[H];t.empty();if(O instanceof THREE.RenderableParticle){w=O;w.x*=C;w.y*=-E;B=0;for(A=O.material.length;B<A;B++)if(T=
+O.material[B]){W=w;ea=O;T=T;var ba=U++;if(r[ba]==null){r[ba]=document.createElementNS("http://www.w3.org/2000/svg","circle");z==0&&r[ba].setAttribute("shape-rendering","crispEdges")}x=r[ba];x.setAttribute("cx",W.x);x.setAttribute("cy",W.y);x.setAttribute("r",ea.scale.x*C);if(T instanceof THREE.ParticleCircleMaterial){if(f){i.r=o.r+j.r+k.r;i.g=o.g+j.g+k.g;i.b=o.b+j.b+k.b;e.r=T.color.r*i.r;e.g=T.color.g*i.g;e.b=T.color.b*i.b;e.updateStyleString()}else e=T.color;x.setAttribute("style","fill: "+e.__styleString)}b.appendChild(x)}}else if(O instanceof
+THREE.RenderableLine){w=O.v1;D=O.v2;w.positionScreen.x*=C;w.positionScreen.y*=-E;D.positionScreen.x*=C;D.positionScreen.y*=-E;t.addPoint(w.positionScreen.x,w.positionScreen.y);t.addPoint(D.positionScreen.x,D.positionScreen.y);if(M.instersects(t)){B=0;for(A=O.material.length;B<A;)if(T=O.material[B++]){W=w;ea=D;T=T;ba=P++;if(R[ba]==null){R[ba]=document.createElementNS("http://www.w3.org/2000/svg","line");z==0&&R[ba].setAttribute("shape-rendering","crispEdges")}x=R[ba];x.setAttribute("x1",W.positionScreen.x);
+x.setAttribute("y1",W.positionScreen.y);x.setAttribute("x2",ea.positionScreen.x);x.setAttribute("y2",ea.positionScreen.y);if(T instanceof THREE.LineBasicMaterial){e.__styleString=T.color.__styleString;x.setAttribute("style","fill: none; stroke: "+e.__styleString+"; stroke-width: "+T.linewidth+"; stroke-opacity: "+T.opacity+"; stroke-linecap: "+T.linecap+"; stroke-linejoin: "+T.linejoin);b.appendChild(x)}}}}else if(O instanceof THREE.RenderableFace3){w=O.v1;D=O.v2;N=O.v3;w.positionScreen.x*=C;w.positionScreen.y*=
+-E;D.positionScreen.x*=C;D.positionScreen.y*=-E;N.positionScreen.x*=C;N.positionScreen.y*=-E;t.addPoint(w.positionScreen.x,w.positionScreen.y);t.addPoint(D.positionScreen.x,D.positionScreen.y);t.addPoint(N.positionScreen.x,N.positionScreen.y);if(M.instersects(t)){B=0;for(A=O.meshMaterial.length;B<A;){T=O.meshMaterial[B++];if(T instanceof THREE.MeshFaceMaterial){W=0;for(ea=O.faceMaterial.length;W<ea;)(T=O.faceMaterial[W++])&&c(w,D,N,O,T,p)}else T&&c(w,D,N,O,T,p)}}}else if(O instanceof THREE.RenderableFace4){w=
+O.v1;D=O.v2;N=O.v3;J=O.v4;w.positionScreen.x*=C;w.positionScreen.y*=-E;D.positionScreen.x*=C;D.positionScreen.y*=-E;N.positionScreen.x*=C;N.positionScreen.y*=-E;J.positionScreen.x*=C;J.positionScreen.y*=-E;t.addPoint(w.positionScreen.x,w.positionScreen.y);t.addPoint(D.positionScreen.x,D.positionScreen.y);t.addPoint(N.positionScreen.x,N.positionScreen.y);t.addPoint(J.positionScreen.x,J.positionScreen.y);if(M.instersects(t)){B=0;for(A=O.meshMaterial.length;B<A;){T=O.meshMaterial[B++];if(T instanceof
+THREE.MeshFaceMaterial){W=0;for(ea=O.faceMaterial.length;W<ea;)(T=O.faceMaterial[W++])&&d(w,D,N,J,O,T,p)}else T&&d(w,D,N,J,O,T,p)}}}}}};
+THREE.WebGLRenderer=function(a){function c(f,e){var i=b.createProgram();b.attachShader(i,h("fragment","#ifdef GL_ES\nprecision highp float;\n#endif\n"+f));b.attachShader(i,h("vertex","uniform mat4 objectMatrix;\nuniform mat4 modelViewMatrix;\nuniform mat4 projectionMatrix;\nuniform vec3 cameraPosition;\nattribute vec3 position;\nattribute vec3 normal;\nattribute vec2 uv;\n"+e));b.linkProgram(i);b.getProgramParameter(i,b.LINK_STATUS)||alert("Could not initialise shaders\nVALIDATE_STATUS: "+b.getProgramParameter(i,
+b.VALIDATE_STATUS)+", gl error ["+b.getError()+"]");i.uniforms={};return i}function d(f,e){var i,o,j;i=0;for(o=e.length;i<o;i++){j=e[i];f.uniforms[j]=b.getUniformLocation(f,j)}}function g(f){f.position=b.getAttribLocation(f,"position");b.enableVertexAttribArray(f.position);f.normal=b.getAttribLocation(f,"normal");b.enableVertexAttribArray(f.normal);f.uv=b.getAttribLocation(f,"uv");b.enableVertexAttribArray(f.uv)}function h(f,e){var i;if(f=="fragment")i=b.createShader(b.FRAGMENT_SHADER);else if(f==
+"vertex")i=b.createShader(b.VERTEX_SHADER);b.shaderSource(i,e);b.compileShader(i);if(!b.getShaderParameter(i,b.COMPILE_STATUS)){alert(b.getShaderInfoLog(i));return null}return i}function q(f){switch(f){case THREE.Repeat:return b.REPEAT;case THREE.ClampToEdge:return b.CLAMP_TO_EDGE;case THREE.MirroredRepeat:return b.MIRRORED_REPEAT}return 0}var m=document.createElement("canvas"),b,l,y,C=new THREE.Matrix4,E,w=new Float32Array(16),D=new Float32Array(16),N=new Float32Array(16),J=new Float32Array(9),M=
+new Float32Array(16);a=function(f,e){if(f){var i,o,j,k=pointLights=maxDirLights=maxPointLights=0;i=0;for(o=f.lights.length;i<o;i++){j=f.lights[i];j instanceof THREE.DirectionalLight&&k++;j instanceof THREE.PointLight&&pointLights++}if(pointLights+k<=e){maxDirLights=k;maxPointLights=pointLights}else{maxDirLights=Math.ceil(e*k/(pointLights+k));maxPointLights=e-maxDirLights}return{directional:maxDirLights,point:maxPointLights}}return{directional:1,point:e-1}}(a,4);this.domElement=m;this.autoClear=true;
+try{b=m.getContext("experimental-webgl",{antialias:true})}catch(t){}if(!b){alert("WebGL not supported");throw"cannot create webgl context";}b.clearColor(0,0,0,1);b.clearDepth(1);b.enable(b.DEPTH_TEST);b.depthFunc(b.LEQUAL);b.frontFace(b.CCW);b.cullFace(b.BACK);b.enable(b.CULL_FACE);b.enable(b.BLEND);b.blendFunc(b.ONE,b.ONE_MINUS_SRC_ALPHA);b.clearColor(0,0,0,0);(function(f,e){var i=[f?"#define MAX_DIR_LIGHTS "+f:"",e?"#define MAX_POINT_LIGHTS "+e:"","uniform bool enableLighting;\nuniform bool useRefract;\nuniform int pointLightNumber;\nuniform int directionalLightNumber;\nuniform vec3 ambientLightColor;",
+f?"uniform vec3 directionalLightColor[ MAX_DIR_LIGHTS ];":"",f?"uniform vec3 directionalLightDirection[ MAX_DIR_LIGHTS ];":"",e?"uniform vec3 pointLightColor[ MAX_POINT_LIGHTS ];":"",e?"uniform vec3 pointLightPosition[ MAX_POINT_LIGHTS ];":"","uniform mat4 viewMatrix;\nuniform mat3 normalMatrix;\nvarying vec3 vNormal;\nvarying vec2 vUv;\nvarying vec3 vLightWeighting;",e?"varying vec3 vPointLightVector[ MAX_POINT_LIGHTS ];":"","varying vec3 vViewPosition;\nvarying vec3 vReflect;\nuniform float mRefractionRatio;\nvoid main(void) {\nvec4 mPosition = objectMatrix * vec4( position, 1.0 );\nvViewPosition = cameraPosition - mPosition.xyz;\nvec3 nWorld = mat3( objectMatrix[0].xyz, objectMatrix[1].xyz, objectMatrix[2].xyz ) * normal;\nvec4 mvPosition = modelViewMatrix * vec4( position, 1.0 );\nvec3 transformedNormal = normalize( normalMatrix * normal );\nif ( !enableLighting ) {\nvLightWeighting = vec3( 1.0, 1.0, 1.0 );\n} else {\nvLightWeighting = ambientLightColor;",
+f?"for( int i = 0; i < MAX_DIR_LIGHTS; i++ ) {":"",f?"vec4 lDirection = viewMatrix * vec4( directionalLightDirection[ i ], 0.0 );":"",f?"float directionalLightWeighting = max( dot( transformedNormal, normalize(lDirection.xyz ) ), 0.0 );":"",f?"vLightWeighting += directionalLightColor[ i ] * directionalLightWeighting;":"",f?"}":"",e?"for( int i = 0; i < MAX_POINT_LIGHTS; i++ ) {":"",e?"vec4 lPosition = viewMatrix * vec4( pointLightPosition[ i ], 1.0 );":"",e?"vPointLightVector[ i ] = normalize( lPosition.xyz - mvPosition.xyz );":
+"",e?"float pointLightWeighting = max( dot( transformedNormal, vPointLightVector[ i ] ), 0.0 );":"",e?"vLightWeighting += pointLightColor[ i ] * pointLightWeighting;":"",e?"}":"","}\nvNormal = transformedNormal;\nvUv = uv;\nif ( useRefract ) {\nvReflect = refract( normalize(mPosition.xyz - cameraPosition), normalize(nWorld.xyz), mRefractionRatio );\n} else {\nvReflect = reflect( normalize(mPosition.xyz - cameraPosition), normalize(nWorld.xyz) );\n}\ngl_Position = projectionMatrix * mvPosition;\n}"].join("\n"),
+o=[f?"#define MAX_DIR_LIGHTS "+f:"",e?"#define MAX_POINT_LIGHTS "+e:"","uniform int material;\nuniform bool enableMap;\nuniform bool enableCubeMap;\nuniform bool mixEnvMap;\nuniform samplerCube tCube;\nuniform float mReflectivity;\nuniform sampler2D tMap;\nuniform vec4 mColor;\nuniform float mOpacity;\nuniform vec4 mAmbient;\nuniform vec4 mSpecular;\nuniform float mShininess;\nuniform float m2Near;\nuniform float mFarPlusNear;\nuniform float mFarMinusNear;\nuniform int pointLightNumber;\nuniform int directionalLightNumber;",
+f?"uniform mat4 viewMatrix;":"",f?"uniform vec3 directionalLightDirection[ MAX_DIR_LIGHTS ];":"","varying vec3 vNormal;\nvarying vec2 vUv;\nvarying vec3 vLightWeighting;",e?"varying vec3 vPointLightVector[ MAX_POINT_LIGHTS ];":"","varying vec3 vViewPosition;\nvarying vec3 vReflect;\nuniform vec3 cameraPosition;\nvoid main() {\nvec4 mapColor = vec4( 1.0, 1.0, 1.0, 1.0 );\nvec4 cubeColor = vec4( 1.0, 1.0, 1.0, 1.0 );\nif ( enableMap ) {\nmapColor = texture2D( tMap, vUv );\n}\nif ( enableCubeMap ) {\ncubeColor = textureCube( tCube, vec3( -vReflect.x, vReflect.yz ) );\n}\nif ( material == 5 ) { \nvec3 wPos = cameraPosition - vViewPosition;\ngl_FragColor = textureCube( tCube, vec3( -wPos.x, wPos.yz ) );\n} else if ( material == 4 ) { \ngl_FragColor = vec4( 0.5*normalize( vNormal ) + vec3(0.5, 0.5, 0.5), mOpacity );\n} else if ( material == 3 ) { \nfloat w = 0.5;\ngl_FragColor = vec4( w, w, w, mOpacity );\n} else if ( material == 2 ) { \nvec3 normal = normalize( vNormal );\nvec3 viewPosition = normalize( vViewPosition );",
+e?"vec4 pointDiffuse  = vec4( 0.0, 0.0, 0.0, 0.0 );":"",e?"vec4 pointSpecular = vec4( 0.0, 0.0, 0.0, 0.0 );":"",e?"for( int i = 0; i < MAX_POINT_LIGHTS; i++ ) {":"",e?"vec3 pointVector = normalize( vPointLightVector[ i ] );":"",e?"vec3 pointHalfVector = normalize( vPointLightVector[ i ] + vViewPosition );":"",e?"float pointDotNormalHalf = dot( normal, pointHalfVector );":"",e?"float pointDiffuseWeight = max( dot( normal, pointVector ), 0.0 );":"",e?"float pointSpecularWeight = 0.0;":"",e?"if ( pointDotNormalHalf >= 0.0 )":
+"",e?"pointSpecularWeight = pow( pointDotNormalHalf, mShininess );":"",e?"pointDiffuse  += mColor * pointDiffuseWeight;":"",e?"pointSpecular += mSpecular * pointSpecularWeight;":"",e?"}":"",f?"vec4 dirDiffuse  = vec4( 0.0, 0.0, 0.0, 0.0 );":"",f?"vec4 dirSpecular = vec4( 0.0, 0.0, 0.0, 0.0 );":"",f?"for( int i = 0; i < MAX_DIR_LIGHTS; i++ ) {":"",f?"vec4 lDirection = viewMatrix * vec4( directionalLightDirection[ i ], 0.0 );":"",f?"vec3 dirVector = normalize( lDirection.xyz );":"",f?"vec3 dirHalfVector = normalize( lDirection.xyz + vViewPosition );":
+"",f?"float dirDotNormalHalf = dot( normal, dirHalfVector );":"",f?"float dirDiffuseWeight = max( dot( normal, dirVector ), 0.0 );":"",f?"float dirSpecularWeight = 0.0;":"",f?"if ( dirDotNormalHalf >= 0.0 )":"",f?"dirSpecularWeight = pow( dirDotNormalHalf, mShininess );":"",f?"dirDiffuse  += mColor * dirDiffuseWeight;":"",f?"dirSpecular += mSpecular * dirSpecularWeight;":"",f?"}":"","vec4 totalLight = mAmbient;",f?"totalLight += dirDiffuse + dirSpecular;":"",e?"totalLight += pointDiffuse + pointSpecular;":
+"","if ( mixEnvMap ) {\ngl_FragColor = vec4( mix( mapColor.rgb * totalLight.xyz * vLightWeighting, cubeColor.rgb, mReflectivity ), mapColor.a );\n} else {\ngl_FragColor = vec4( mapColor.rgb * cubeColor.rgb * totalLight.xyz * vLightWeighting, mapColor.a );\n}\n} else if ( material == 1 ) {\nif ( mixEnvMap ) {\ngl_FragColor = vec4( mix( mColor.rgb * mapColor.rgb * vLightWeighting, cubeColor.rgb, mReflectivity ), mColor.a * mapColor.a );\n} else {\ngl_FragColor = vec4( mColor.rgb * mapColor.rgb * cubeColor.rgb * vLightWeighting, mColor.a * mapColor.a );\n}\n} else {\nif ( mixEnvMap ) {\ngl_FragColor = mix( mColor * mapColor, cubeColor, mReflectivity );\n} else {\ngl_FragColor = mColor * mapColor * cubeColor;\n}\n}\n}"].join("\n");
+l=c(o,i);b.useProgram(l);d(l,["viewMatrix","modelViewMatrix","projectionMatrix","normalMatrix","objectMatrix","cameraPosition","enableLighting","ambientLightColor","material","mColor","mAmbient","mSpecular","mShininess","mOpacity","enableMap","tMap","enableCubeMap","tCube","mixEnvMap","mReflectivity","mRefractionRatio","useRefract","m2Near","mFarPlusNear","mFarMinusNear"]);f&&d(l,["directionalLightNumber","directionalLightColor","directionalLightDirection"]);e&&d(l,["pointLightNumber","pointLightColor",
+"pointLightPosition"]);b.uniform1i(l.uniforms.enableMap,0);b.uniform1i(l.uniforms.tMap,0);b.uniform1i(l.uniforms.enableCubeMap,0);b.uniform1i(l.uniforms.tCube,1);b.uniform1i(l.uniforms.mixEnvMap,0);b.uniform1i(l.uniforms.useRefract,0);g(l)})(a.directional,a.point);this.setSize=function(f,e){m.width=f;m.height=e;b.viewport(0,0,m.width,m.height)};this.clear=function(){b.clear(b.COLOR_BUFFER_BIT|b.DEPTH_BUFFER_BIT)};this.setupLights=function(f,e){var i,o,j,k,n,s=[],G=[],r=[];k=[];n=[];b.uniform1i(f.uniforms.enableLighting,
+e.lights.length);i=0;for(o=e.lights.length;i<o;i++){j=e.lights[i];if(j instanceof THREE.AmbientLight)s.push(j);else if(j instanceof THREE.DirectionalLight)r.push(j);else j instanceof THREE.PointLight&&G.push(j)}i=j=k=n=0;for(o=s.length;i<o;i++){j+=s[i].color.r;k+=s[i].color.g;n+=s[i].color.b}b.uniform3f(f.uniforms.ambientLightColor,j,k,n);k=[];n=[];i=0;for(o=r.length;i<o;i++){j=r[i];k.push(j.color.r*j.intensity);k.push(j.color.g*j.intensity);k.push(j.color.b*j.intensity);n.push(j.position.x);n.push(j.position.y);
+n.push(j.position.z)}if(r.length){b.uniform1i(f.uniforms.directionalLightNumber,r.length);b.uniform3fv(f.uniforms.directionalLightDirection,n);b.uniform3fv(f.uniforms.directionalLightColor,k)}k=[];n=[];i=0;for(o=G.length;i<o;i++){j=G[i];k.push(j.color.r*j.intensity);k.push(j.color.g*j.intensity);k.push(j.color.b*j.intensity);n.push(j.position.x);n.push(j.position.y);n.push(j.position.z)}if(G.length){b.uniform1i(f.uniforms.pointLightNumber,G.length);b.uniform3fv(f.uniforms.pointLightPosition,n);b.uniform3fv(f.uniforms.pointLightColor,
+k)}};this.createBuffers=function(f,e){var i,o,j,k,n,s,G,r,R=[],x=[],u=[],U=[],P=[],z=0,p=f.materialFaceGroup[e],K;j=false;i=0;for(o=f.material.length;i<o;i++){meshMaterial=f.material[i];if(meshMaterial instanceof THREE.MeshFaceMaterial){n=0;for(K=p.material.length;n<K;n++)if(p.material[n]&&p.material[n].shading!=undefined&&p.material[n].shading==THREE.SmoothShading){j=true;break}}else if(meshMaterial&&meshMaterial.shading!=undefined&&meshMaterial.shading==THREE.SmoothShading){j=true;break}if(j)break}K=
+j;i=0;for(o=p.faces.length;i<o;i++){j=p.faces[i];k=f.geometry.faces[j];n=k.vertexNormals;faceNormal=k.normal;j=f.geometry.uvs[j];if(k instanceof THREE.Face3){s=f.geometry.vertices[k.a].position;G=f.geometry.vertices[k.b].position;r=f.geometry.vertices[k.c].position;u.push(s.x,s.y,s.z);u.push(G.x,G.y,G.z);u.push(r.x,r.y,r.z);if(n.length==3&&K)for(k=0;k<3;k++)U.push(n[k].x,n[k].y,n[k].z);else for(k=0;k<3;k++)U.push(faceNormal.x,faceNormal.y,faceNormal.z);if(j)for(k=0;k<3;k++)P.push(j[k].u,j[k].v);R.push(z,
+z+1,z+2);x.push(z,z+1);x.push(z,z+2);x.push(z+1,z+2);z+=3}else if(k instanceof THREE.Face4){s=f.geometry.vertices[k.a].position;G=f.geometry.vertices[k.b].position;r=f.geometry.vertices[k.c].position;k=f.geometry.vertices[k.d].position;u.push(s.x,s.y,s.z);u.push(G.x,G.y,G.z);u.push(r.x,r.y,r.z);u.push(k.x,k.y,k.z);if(n.length==4&&K)for(k=0;k<4;k++)U.push(n[k].x,n[k].y,n[k].z);else for(k=0;k<4;k++)U.push(faceNormal.x,faceNormal.y,faceNormal.z);if(j)for(k=0;k<4;k++)P.push(j[k].u,j[k].v);R.push(z,z+
+1,z+2);R.push(z,z+2,z+3);x.push(z,z+1);x.push(z,z+2);x.push(z,z+3);x.push(z+1,z+2);x.push(z+2,z+3);z+=4}}if(u.length){p.__webGLVertexBuffer=b.createBuffer();b.bindBuffer(b.ARRAY_BUFFER,p.__webGLVertexBuffer);b.bufferData(b.ARRAY_BUFFER,new Float32Array(u),b.STATIC_DRAW);p.__webGLNormalBuffer=b.createBuffer();b.bindBuffer(b.ARRAY_BUFFER,p.__webGLNormalBuffer);b.bufferData(b.ARRAY_BUFFER,new Float32Array(U),b.STATIC_DRAW);p.__webGLUVBuffer=b.createBuffer();b.bindBuffer(b.ARRAY_BUFFER,p.__webGLUVBuffer);
+b.bufferData(b.ARRAY_BUFFER,new Float32Array(P),b.STATIC_DRAW);p.__webGLFaceBuffer=b.createBuffer();b.bindBuffer(b.ELEMENT_ARRAY_BUFFER,p.__webGLFaceBuffer);b.bufferData(b.ELEMENT_ARRAY_BUFFER,new Uint16Array(R),b.STATIC_DRAW);p.__webGLLineBuffer=b.createBuffer();b.bindBuffer(b.ELEMENT_ARRAY_BUFFER,p.__webGLLineBuffer);b.bufferData(b.ELEMENT_ARRAY_BUFFER,new Uint16Array(x),b.STATIC_DRAW);p.__webGLFaceCount=R.length;p.__webGLLineCount=x.length}};this.renderBuffer=function(f,e,i){var o,j,k,n,s,G,r,
+R,x,u;if(e instanceof THREE.MeshShaderMaterial){if(!e.program){e.program=c(e.fragment_shader,e.vertex_shader);s=["viewMatrix","modelViewMatrix","projectionMatrix","normalMatrix","objectMatrix","cameraPosition"];for(u in e.uniforms)s.push(u);d(e.program,s);g(e.program)}u=e.program}else u=l;if(u!=y){b.useProgram(u);y=u}if(e instanceof THREE.MeshShaderMaterial){s=u;R=e.uniforms;var U,P;for(j in R){U=R[j].type;x=R[j].value;P=s.uniforms[j];if(U=="i")b.uniform1i(P,x);else if(U=="f")b.uniform1f(P,x);else if(U==
+"t"){b.uniform1i(P,x);x=R[j].texture;if(x instanceof THREE.TextureCube&&x.image.length==6){if(!x.image.__webGLTextureCube&&!x.image.__cubeMapInitialized&&x.image.loadCount==6){x.image.__webGLTextureCube=b.createTexture();b.bindTexture(b.TEXTURE_CUBE_MAP,x.image.__webGLTextureCube);b.texParameteri(b.TEXTURE_CUBE_MAP,b.TEXTURE_WRAP_S,b.CLAMP_TO_EDGE);b.texParameteri(b.TEXTURE_CUBE_MAP,b.TEXTURE_WRAP_T,b.CLAMP_TO_EDGE);b.texParameteri(b.TEXTURE_CUBE_MAP,b.TEXTURE_MAG_FILTER,b.LINEAR);b.texParameteri(b.TEXTURE_CUBE_MAP,
+b.TEXTURE_MIN_FILTER,b.LINEAR_MIPMAP_LINEAR);for(U=0;U<6;++U)b.texImage2D(b.TEXTURE_CUBE_MAP_POSITIVE_X+U,0,b.RGBA,b.RGBA,b.UNSIGNED_BYTE,x.image[U]);b.generateMipmap(b.TEXTURE_CUBE_MAP);b.bindTexture(b.TEXTURE_CUBE_MAP,null);x.image.__cubeMapInitialized=true}b.activeTexture(b.TEXTURE1);b.bindTexture(b.TEXTURE_CUBE_MAP,x.image.__webGLTextureCube)}}}this.loadCamera(u,f);this.loadMatrices(u)}else if(e instanceof THREE.MeshPhongMaterial||e instanceof THREE.MeshLambertMaterial||e instanceof THREE.MeshBasicMaterial){f=
+e.color;o=e.opacity;k=e.wireframe;n=e.wireframe_linewidth;G=e.map;r=e.env_map;s=e.combine==THREE.Mix;j=e.reflectivity;x=e.env_map&&e.env_map.mapping==THREE.RefractionMapping;R=e.refraction_ratio;b.uniform4f(u.uniforms.mColor,f.r*o,f.g*o,f.b*o,o);b.uniform1i(u.uniforms.mixEnvMap,s);b.uniform1f(u.uniforms.mReflectivity,j);b.uniform1i(u.uniforms.useRefract,x);b.uniform1f(u.uniforms.mRefractionRatio,R)}if(e instanceof THREE.MeshNormalMaterial){o=e.opacity;b.uniform1f(u.uniforms.mOpacity,o);b.uniform1i(u.uniforms.material,
+4)}else if(e instanceof THREE.MeshDepthMaterial){o=e.opacity;k=e.wireframe;n=e.wireframe_linewidth;b.uniform1f(u.uniforms.mOpacity,o);b.uniform1f(u.uniforms.m2Near,e.__2near);b.uniform1f(u.uniforms.mFarPlusNear,e.__farPlusNear);b.uniform1f(u.uniforms.mFarMinusNear,e.__farMinusNear);b.uniform1i(u.uniforms.material,3)}else if(e instanceof THREE.MeshPhongMaterial){f=e.ambient;j=e.specular;s=e.shininess;b.uniform4f(u.uniforms.mAmbient,f.r,f.g,f.b,o);b.uniform4f(u.uniforms.mSpecular,j.r,j.g,j.b,o);b.uniform1f(u.uniforms.mShininess,
+s);b.uniform1i(u.uniforms.material,2)}else if(e instanceof THREE.MeshLambertMaterial)b.uniform1i(u.uniforms.material,1);else if(e instanceof THREE.MeshBasicMaterial)b.uniform1i(u.uniforms.material,0);else if(e instanceof THREE.MeshCubeMaterial){b.uniform1i(u.uniforms.material,5);r=e.env_map}if(G){if(!e.map.__webGLTexture&&e.map.image.loaded){e.map.__webGLTexture=b.createTexture();b.bindTexture(b.TEXTURE_2D,e.map.__webGLTexture);b.texImage2D(b.TEXTURE_2D,0,b.RGBA,b.RGBA,b.UNSIGNED_BYTE,e.map.image);
+b.texParameteri(b.TEXTURE_2D,b.TEXTURE_WRAP_S,q(e.map.wrap_s));b.texParameteri(b.TEXTURE_2D,b.TEXTURE_WRAP_T,q(e.map.wrap_t));b.texParameteri(b.TEXTURE_2D,b.TEXTURE_MAG_FILTER,b.LINEAR);b.texParameteri(b.TEXTURE_2D,b.TEXTURE_MIN_FILTER,b.LINEAR_MIPMAP_LINEAR);b.generateMipmap(b.TEXTURE_2D);b.bindTexture(b.TEXTURE_2D,null)}b.activeTexture(b.TEXTURE0);b.bindTexture(b.TEXTURE_2D,e.map.__webGLTexture);b.uniform1i(u.uniforms.tMap,0);b.uniform1i(u.uniforms.enableMap,1)}else b.uniform1i(u.uniforms.enableMap,
+0);if(r){if(e.env_map&&e.env_map instanceof THREE.TextureCube&&e.env_map.image.length==6){if(!e.env_map.image.__webGLTextureCube&&!e.env_map.image.__cubeMapInitialized&&e.env_map.image.loadCount==6){e.env_map.image.__webGLTextureCube=b.createTexture();b.bindTexture(b.TEXTURE_CUBE_MAP,e.env_map.image.__webGLTextureCube);b.texParameteri(b.TEXTURE_CUBE_MAP,b.TEXTURE_WRAP_S,b.CLAMP_TO_EDGE);b.texParameteri(b.TEXTURE_CUBE_MAP,b.TEXTURE_WRAP_T,b.CLAMP_TO_EDGE);b.texParameteri(b.TEXTURE_CUBE_MAP,b.TEXTURE_MAG_FILTER,
+b.LINEAR);b.texParameteri(b.TEXTURE_CUBE_MAP,b.TEXTURE_MIN_FILTER,b.LINEAR_MIPMAP_LINEAR);for(o=0;o<6;++o)b.texImage2D(b.TEXTURE_CUBE_MAP_POSITIVE_X+o,0,b.RGBA,b.RGBA,b.UNSIGNED_BYTE,e.env_map.image[o]);b.generateMipmap(b.TEXTURE_CUBE_MAP);b.bindTexture(b.TEXTURE_CUBE_MAP,null);e.env_map.image.__cubeMapInitialized=true}b.activeTexture(b.TEXTURE1);b.bindTexture(b.TEXTURE_CUBE_MAP,e.env_map.image.__webGLTextureCube);b.uniform1i(u.uniforms.tCube,1)}b.uniform1i(u.uniforms.enableCubeMap,1)}else b.uniform1i(u.uniforms.enableCubeMap,
+0);b.bindBuffer(b.ARRAY_BUFFER,i.__webGLVertexBuffer);b.vertexAttribPointer(u.position,3,b.FLOAT,false,0,0);b.bindBuffer(b.ARRAY_BUFFER,i.__webGLNormalBuffer);b.vertexAttribPointer(u.normal,3,b.FLOAT,false,0,0);if(G){b.bindBuffer(b.ARRAY_BUFFER,i.__webGLUVBuffer);b.enableVertexAttribArray(u.uv);b.vertexAttribPointer(u.uv,2,b.FLOAT,false,0,0)}else b.disableVertexAttribArray(u.uv);if(k){b.lineWidth(n);b.bindBuffer(b.ELEMENT_ARRAY_BUFFER,i.__webGLLineBuffer);b.drawElements(b.LINES,i.__webGLLineCount,
+b.UNSIGNED_SHORT,0)}else{b.bindBuffer(b.ELEMENT_ARRAY_BUFFER,i.__webGLFaceBuffer);b.drawElements(b.TRIANGLES,i.__webGLFaceCount,b.UNSIGNED_SHORT,0)}};this.renderPass=function(f,e,i,o,j){var k,n,s,G,r;s=0;for(G=e.material.length;s<G;s++){k=e.material[s];if(k instanceof THREE.MeshFaceMaterial){k=0;for(n=i.material.length;k<n;k++)if((r=i.material[k])&&r.blending==o&&r.opacity<1==j){this.setBlending(r.blending);this.renderBuffer(f,r,i)}}else if((r=k)&&r.blending==o&&r.opacity<1==j){this.setBlending(r.blending);
+this.renderBuffer(f,r,i)}}};this.render=function(f,e){var i,o;this.initWebGLObjects(f);this.autoClear&&this.clear();e.autoUpdateMatrix&&e.updateMatrix();this.loadCamera(l,e);this.setupLights(l,f);i=0;for(o=f.__webGLObjects.length;i<o;i++){webGLObject=f.__webGLObjects[i];if(webGLObject.__object.visible){this.setupMatrices(webGLObject.__object,e);this.loadMatrices(l);this.renderPass(e,webGLObject.__object,webGLObject,THREE.NormalBlending,false)}}i=0;for(o=f.__webGLObjects.length;i<o;i++){webGLObject=
+f.__webGLObjects[i];if(webGLObject.__object.visible){this.setupMatrices(webGLObject.__object,e);this.loadMatrices(l);this.renderPass(e,webGLObject.__object,webGLObject,THREE.AdditiveBlending,false);this.renderPass(e,webGLObject.__object,webGLObject,THREE.SubtractiveBlending,false);this.renderPass(e,webGLObject.__object,webGLObject,THREE.AdditiveBlending,true);this.renderPass(e,webGLObject.__object,webGLObject,THREE.SubtractiveBlending,true);this.renderPass(e,webGLObject.__object,webGLObject,THREE.NormalBlending,
+true)}}};this.initWebGLObjects=function(f){var e,i,o,j,k;if(!f.__webGLObjects)f.__webGLObjects=[];e=0;for(i=f.objects.length;e<i;e++){o=f.objects[e];if(o instanceof THREE.Mesh)for(j in o.materialFaceGroup){k=o.materialFaceGroup[j];if(!k.__webGLVertexBuffer){this.createBuffers(o,j);k.__object=o;f.__webGLObjects.push(k)}}}};this.removeObject=function(f,e){var i,o;for(i=f.__webGLObjects.length-1;i>=0;i--){o=f.__webGLObjects[i].__object;e==o&&f.__webGLObjects.splice(i,1)}};this.setupMatrices=function(f,
+e){f.autoUpdateMatrix&&f.updateMatrix();C.multiply(e.matrix,f.matrix);w.set(e.matrix.flatten());D.set(C.flatten());N.set(e.projectionMatrix.flatten());E=THREE.Matrix4.makeInvert3x3(C).transpose();J.set(E.m);M.set(f.matrix.flatten())};this.loadMatrices=function(f){b.uniformMatrix4fv(f.uniforms.viewMatrix,false,w);b.uniformMatrix4fv(f.uniforms.modelViewMatrix,false,D);b.uniformMatrix4fv(f.uniforms.projectionMatrix,false,N);b.uniformMatrix3fv(f.uniforms.normalMatrix,false,J);b.uniformMatrix4fv(f.uniforms.objectMatrix,
+false,M)};this.loadCamera=function(f,e){b.uniform3f(f.uniforms.cameraPosition,e.position.x,e.position.y,e.position.z)};this.setBlending=function(f){switch(f){case THREE.AdditiveBlending:b.blendEquation(b.FUNC_ADD);b.blendFunc(b.ONE,b.ONE);break;case THREE.SubtractiveBlending:b.blendFunc(b.DST_COLOR,b.ZERO);break;default:b.blendEquation(b.FUNC_ADD);b.blendFunc(b.ONE,b.ONE_MINUS_SRC_ALPHA)}};this.setFaceCulling=function(f,e){if(f){!e||e=="ccw"?b.frontFace(b.CCW):b.frontFace(b.CW);if(f=="back")b.cullFace(b.BACK);
+else f=="front"?b.cullFace(b.FRONT):b.cullFace(b.FRONT_AND_BACK);b.enable(b.CULL_FACE)}else b.disable(b.CULL_FACE)}};THREE.RenderableFace3=function(){this.z=null;this.v1=new THREE.Vertex;this.v2=new THREE.Vertex;this.v3=new THREE.Vertex;this.centroidWorld=new THREE.Vector3;this.centroidScreen=new THREE.Vector3;this.normalWorld=new THREE.Vector3;this.vertexNormalsWorld=[];this.faceMaterial=this.meshMaterial=null;this.overdraw=false;this.uvs=[null,null,null]};
+THREE.RenderableParticle=function(){this.rotation=this.z=this.y=this.x=null;this.scale=new THREE.Vector2;this.material=null};THREE.RenderableLine=function(){this.z=null;this.v1=new THREE.Vertex;this.v2=new THREE.Vertex;this.material=null};

+ 168 - 168
build/ThreeDebug.js

@@ -1,168 +1,168 @@
-// ThreeDebug.js r29 - http://github.com/mrdoob/three.js
-var THREE=THREE||{};THREE.Color=function(a){this.autoUpdate=true;this.setHex(a)};
-THREE.Color.prototype={setRGB:function(a,c,e){this.r=a;this.g=c;this.b=e;if(this.autoUpdate){this.updateHex();this.updateStyleString()}},setHex:function(a){this.hex=~~a&16777215;if(this.autoUpdate){this.updateRGBA();this.updateStyleString()}},updateHex:function(){this.hex=~~(this.r*255)<<16^~~(this.g*255)<<8^~~(this.b*255)},updateRGBA:function(){this.r=(this.hex>>16&255)/255;this.g=(this.hex>>8&255)/255;this.b=(this.hex&255)/255},updateStyleString:function(){this.__styleString="rgb("+~~(this.r*255)+
-","+~~(this.g*255)+","+~~(this.b*255)+")"},toString:function(){return"THREE.Color ( r: "+this.r+", g: "+this.g+", b: "+this.b+", hex: "+this.hex+" )"}};THREE.Vector2=function(a,c){this.x=a||0;this.y=c||0};
-THREE.Vector2.prototype={set:function(a,c){this.x=a;this.y=c;return this},copy:function(a){this.x=a.x;this.y=a.y;return this},addSelf:function(a){this.x+=a.x;this.y+=a.y;return this},add:function(a,c){this.x=a.x+c.x;this.y=a.y+c.y;return this},subSelf:function(a){this.x-=a.x;this.y-=a.y;return this},sub:function(a,c){this.x=a.x-c.x;this.y=a.y-c.y;return this},multiplyScalar:function(a){this.x*=a;this.y*=a;return this},unit:function(){this.multiplyScalar(1/this.length());return this},length:function(){return Math.sqrt(this.x*
-this.x+this.y*this.y)},lengthSq:function(){return this.x*this.x+this.y*this.y},negate:function(){this.x=-this.x;this.y=-this.y;return this},clone:function(){return new THREE.Vector2(this.x,this.y)},toString:function(){return"THREE.Vector2 ("+this.x+", "+this.y+")"}};THREE.Vector3=function(a,c,e){this.x=a||0;this.y=c||0;this.z=e||0};
-THREE.Vector3.prototype={set:function(a,c,e){this.x=a;this.y=c;this.z=e;return this},copy:function(a){this.x=a.x;this.y=a.y;this.z=a.z;return this},add:function(a,c){this.x=a.x+c.x;this.y=a.y+c.y;this.z=a.z+c.z;return this},addSelf:function(a){this.x+=a.x;this.y+=a.y;this.z+=a.z;return this},addScalar:function(a){this.x+=a;this.y+=a;this.z+=a;return this},sub:function(a,c){this.x=a.x-c.x;this.y=a.y-c.y;this.z=a.z-c.z;return this},subSelf:function(a){this.x-=a.x;this.y-=a.y;this.z-=a.z;return this},
-cross:function(a,c){this.x=a.y*c.z-a.z*c.y;this.y=a.z*c.x-a.x*c.z;this.z=a.x*c.y-a.y*c.x;return this},crossSelf:function(a){var c=this.x,e=this.y,g=this.z;this.x=e*a.z-g*a.y;this.y=g*a.x-c*a.z;this.z=c*a.y-e*a.x;return this},multiplySelf:function(a){this.x*=a.x;this.y*=a.y;this.z*=a.z;return this},multiplyScalar:function(a){this.x*=a;this.y*=a;this.z*=a;return this},divideScalar:function(a){this.x/=a;this.y/=a;this.z/=a;return this},dot:function(a){return this.x*a.x+this.y*a.y+this.z*a.z},distanceTo:function(a){var c=
-this.x-a.x,e=this.y-a.y;a=this.z-a.z;return Math.sqrt(c*c+e*e+a*a)},distanceToSquared:function(a){var c=this.x-a.x,e=this.y-a.y;a=this.z-a.z;return c*c+e*e+a*a},length:function(){return Math.sqrt(this.x*this.x+this.y*this.y+this.z*this.z)},lengthSq:function(){return this.x*this.x+this.y*this.y+this.z*this.z},negate:function(){this.x=-this.x;this.y=-this.y;this.z=-this.z;return this},normalize:function(){var a=Math.sqrt(this.x*this.x+this.y*this.y+this.z*this.z);a>0?this.multiplyScalar(1/a):this.set(0,
-0,0);return this},setLength:function(a){return this.normalize().multiplyScalar(a)},isZero:function(){return Math.abs(this.x)<1.0E-4&&Math.abs(this.y)<1.0E-4&&Math.abs(this.z)<1.0E-4},clone:function(){return new THREE.Vector3(this.x,this.y,this.z)},toString:function(){return"THREE.Vector3 ( "+this.x+", "+this.y+", "+this.z+" )"}};THREE.Vector4=function(a,c,e,g){this.x=a||0;this.y=c||0;this.z=e||0;this.w=g||1};
-THREE.Vector4.prototype={set:function(a,c,e,g){this.x=a;this.y=c;this.z=e;this.w=g;return this},copy:function(a){this.x=a.x;this.y=a.y;this.z=a.z;this.w=a.w||1;return this},add:function(a,c){this.x=a.x+c.x;this.y=a.y+c.y;this.z=a.z+c.z;this.w=a.w+c.w;return this},addSelf:function(a){this.x+=a.x;this.y+=a.y;this.z+=a.z;this.w+=a.w;return this},sub:function(a,c){this.x=a.x-c.x;this.y=a.y-c.y;this.z=a.z-c.z;this.w=a.w-c.w;return this},subSelf:function(a){this.x-=a.x;this.y-=a.y;this.z-=a.z;this.w-=a.w;
-return this},multiplyScalar:function(a){this.x*=a;this.y*=a;this.z*=a;this.w*=a;return this},divideScalar:function(a){this.x/=a;this.y/=a;this.z/=a;this.w/=a;return this},lerpSelf:function(a,c){this.x+=(a.x-this.x)*c;this.y+=(a.y-this.y)*c;this.z+=(a.z-this.z)*c;this.w+=(a.w-this.w)*c},clone:function(){return new THREE.Vector4(this.x,this.y,this.z,this.w)},toString:function(){return"THREE.Vector4 ("+this.x+", "+this.y+", "+this.z+", "+this.w+")"}};
-THREE.Ray=function(a,c){this.origin=a||new THREE.Vector3;this.direction=c||new THREE.Vector3};
-THREE.Ray.prototype={intersectScene:function(a){var c,e,g=a.objects,h=[];a=0;for(c=g.length;a<c;a++){e=g[a];if(e instanceof THREE.Mesh)h=h.concat(this.intersectObject(e))}h.sort(function(q,m){return q.distance-m.distance});return h},intersectObject:function(a){function c(P,r,f,d){d=d.clone().subSelf(r);f=f.clone().subSelf(r);var i=P.clone().subSelf(r);P=d.dot(d);r=d.dot(f);d=d.dot(i);var o=f.dot(f);f=f.dot(i);i=1/(P*o-r*r);o=(o*d-r*f)*i;P=(P*f-r*d)*i;return o>0&&P>0&&o+P<1}var e,g,h,q,m,b,l,y,E,I,
-w,F=a.geometry,Q=F.vertices,O=[];e=0;for(g=F.faces.length;e<g;e++){h=F.faces[e];I=this.origin.clone();w=this.direction.clone();q=a.matrix.transform(Q[h.a].position.clone());m=a.matrix.transform(Q[h.b].position.clone());b=a.matrix.transform(Q[h.c].position.clone());l=h instanceof THREE.Face4?a.matrix.transform(Q[h.d].position.clone()):null;y=a.rotationMatrix.transform(h.normal.clone());E=w.dot(y);if(E<0){y=y.dot((new THREE.Vector3).sub(q,I))/E;I=I.addSelf(w.multiplyScalar(y));if(h instanceof THREE.Face3){if(c(I,
-q,m,b)){h={distance:this.origin.distanceTo(I),point:I,face:h,object:a};O.push(h)}}else if(h instanceof THREE.Face4)if(c(I,q,m,l)||c(I,m,b,l)){h={distance:this.origin.distanceTo(I),point:I,face:h,object:a};O.push(h)}}}return O}};
-THREE.Rectangle=function(){function a(){q=g-c;m=h-e}var c,e,g,h,q,m,b=true;this.getX=function(){return c};this.getY=function(){return e};this.getWidth=function(){return q};this.getHeight=function(){return m};this.getLeft=function(){return c};this.getTop=function(){return e};this.getRight=function(){return g};this.getBottom=function(){return h};this.set=function(l,y,E,I){b=false;c=l;e=y;g=E;h=I;a()};this.addPoint=function(l,y){if(b){b=false;c=l;e=y;g=l;h=y}else{c=Math.min(c,l);e=Math.min(e,y);g=Math.max(g,
-l);h=Math.max(h,y)}a()};this.addRectangle=function(l){if(b){b=false;c=l.getLeft();e=l.getTop();g=l.getRight();h=l.getBottom()}else{c=Math.min(c,l.getLeft());e=Math.min(e,l.getTop());g=Math.max(g,l.getRight());h=Math.max(h,l.getBottom())}a()};this.inflate=function(l){c-=l;e-=l;g+=l;h+=l;a()};this.minSelf=function(l){c=Math.max(c,l.getLeft());e=Math.max(e,l.getTop());g=Math.min(g,l.getRight());h=Math.min(h,l.getBottom());a()};this.instersects=function(l){return Math.min(g,l.getRight())-Math.max(c,l.getLeft())>=
-0&&Math.min(h,l.getBottom())-Math.max(e,l.getTop())>=0};this.empty=function(){b=true;h=g=e=c=0;a()};this.isEmpty=function(){return b};this.toString=function(){return"THREE.Rectangle ( left: "+c+", right: "+g+", top: "+e+", bottom: "+h+", width: "+q+", height: "+m+" )"}};THREE.Matrix3=function(){this.m=[]};THREE.Matrix3.prototype={transpose:function(){var a;a=this.m[1];this.m[1]=this.m[3];this.m[3]=a;a=this.m[2];this.m[2]=this.m[6];this.m[6]=a;a=this.m[5];this.m[5]=this.m[7];this.m[7]=a;return this}};
-THREE.Matrix4=function(){};
-THREE.Matrix4.prototype={n11:1,n12:0,n13:0,n14:0,n21:0,n22:1,n23:0,n24:0,n31:0,n32:0,n33:1,n34:0,n41:0,n42:0,n43:0,n44:1,identity:function(){this.n11=1;this.n21=this.n14=this.n13=this.n12=0;this.n22=1;this.n32=this.n31=this.n24=this.n23=0;this.n33=1;this.n43=this.n42=this.n41=this.n34=0;this.n44=1},copy:function(a){this.n11=a.n11;this.n12=a.n12;this.n13=a.n13;this.n14=a.n14;this.n21=a.n21;this.n22=a.n22;this.n23=a.n23;this.n24=a.n24;this.n31=a.n31;this.n32=a.n32;this.n33=a.n33;this.n34=a.n34;this.n41=
-a.n41;this.n42=a.n42;this.n43=a.n43;this.n44=a.n44},lookAt:function(a,c,e){var g=new THREE.Vector3,h=new THREE.Vector3,q=new THREE.Vector3;q.sub(a,c).normalize();g.cross(e,q).normalize();h.cross(q,g).normalize();this.n11=g.x;this.n12=g.y;this.n13=g.z;this.n14=-g.dot(a);this.n21=h.x;this.n22=h.y;this.n23=h.z;this.n24=-h.dot(a);this.n31=q.x;this.n32=q.y;this.n33=q.z;this.n34=-q.dot(a);this.n43=this.n42=this.n41=0;this.n44=1},transform:function(a){var c=a.x,e=a.y,g=a.z,h=a.w||1;a.x=this.n11*c+this.n12*
-e+this.n13*g+this.n14*h;a.y=this.n21*c+this.n22*e+this.n23*g+this.n24*h;a.z=this.n31*c+this.n32*e+this.n33*g+this.n34*h;h=this.n41*c+this.n42*e+this.n43*g+this.n44*h;if(a.w)a.w=h;else{c=1/h;a.x*=c;a.y*=c;a.z*=c}return a},crossVector:function(a){var c=new THREE.Vector4;c.x=this.n11*a.x+this.n12*a.y+this.n13*a.z+this.n14*a.w;c.y=this.n21*a.x+this.n22*a.y+this.n23*a.z+this.n24*a.w;c.z=this.n31*a.x+this.n32*a.y+this.n33*a.z+this.n34*a.w;c.w=a.w?this.n41*a.x+this.n42*a.y+this.n43*a.z+this.n44*a.w:1;return c},
-multiply:function(a,c){this.n11=a.n11*c.n11+a.n12*c.n21+a.n13*c.n31+a.n14*c.n41;this.n12=a.n11*c.n12+a.n12*c.n22+a.n13*c.n32+a.n14*c.n42;this.n13=a.n11*c.n13+a.n12*c.n23+a.n13*c.n33+a.n14*c.n43;this.n14=a.n11*c.n14+a.n12*c.n24+a.n13*c.n34+a.n14*c.n44;this.n21=a.n21*c.n11+a.n22*c.n21+a.n23*c.n31+a.n24*c.n41;this.n22=a.n21*c.n12+a.n22*c.n22+a.n23*c.n32+a.n24*c.n42;this.n23=a.n21*c.n13+a.n22*c.n23+a.n23*c.n33+a.n24*c.n43;this.n24=a.n21*c.n14+a.n22*c.n24+a.n23*c.n34+a.n24*c.n44;this.n31=a.n31*c.n11+a.n32*
-c.n21+a.n33*c.n31+a.n34*c.n41;this.n32=a.n31*c.n12+a.n32*c.n22+a.n33*c.n32+a.n34*c.n42;this.n33=a.n31*c.n13+a.n32*c.n23+a.n33*c.n33+a.n34*c.n43;this.n34=a.n31*c.n14+a.n32*c.n24+a.n33*c.n34+a.n34*c.n44;this.n41=a.n41*c.n11+a.n42*c.n21+a.n43*c.n31+a.n44*c.n41;this.n42=a.n41*c.n12+a.n42*c.n22+a.n43*c.n32+a.n44*c.n42;this.n43=a.n41*c.n13+a.n42*c.n23+a.n43*c.n33+a.n44*c.n43;this.n44=a.n41*c.n14+a.n42*c.n24+a.n43*c.n34+a.n44*c.n44},multiplySelf:function(a){var c=this.n11,e=this.n12,g=this.n13,h=this.n14,
-q=this.n21,m=this.n22,b=this.n23,l=this.n24,y=this.n31,E=this.n32,I=this.n33,w=this.n34,F=this.n41,Q=this.n42,O=this.n43,P=this.n44;this.n11=c*a.n11+e*a.n21+g*a.n31+h*a.n41;this.n12=c*a.n12+e*a.n22+g*a.n32+h*a.n42;this.n13=c*a.n13+e*a.n23+g*a.n33+h*a.n43;this.n14=c*a.n14+e*a.n24+g*a.n34+h*a.n44;this.n21=q*a.n11+m*a.n21+b*a.n31+l*a.n41;this.n22=q*a.n12+m*a.n22+b*a.n32+l*a.n42;this.n23=q*a.n13+m*a.n23+b*a.n33+l*a.n43;this.n24=q*a.n14+m*a.n24+b*a.n34+l*a.n44;this.n31=y*a.n11+E*a.n21+I*a.n31+w*a.n41;
-this.n32=y*a.n12+E*a.n22+I*a.n32+w*a.n42;this.n33=y*a.n13+E*a.n23+I*a.n33+w*a.n43;this.n34=y*a.n14+E*a.n24+I*a.n34+w*a.n44;this.n41=F*a.n11+Q*a.n21+O*a.n31+P*a.n41;this.n42=F*a.n12+Q*a.n22+O*a.n32+P*a.n42;this.n43=F*a.n13+Q*a.n23+O*a.n33+P*a.n43;this.n44=F*a.n14+Q*a.n24+O*a.n34+P*a.n44},multiplyScalar:function(a){this.n11*=a;this.n12*=a;this.n13*=a;this.n14*=a;this.n21*=a;this.n22*=a;this.n23*=a;this.n24*=a;this.n31*=a;this.n32*=a;this.n33*=a;this.n34*=a;this.n41*=a;this.n42*=a;this.n43*=a;this.n44*=
-a},determinant:function(){return this.n14*this.n23*this.n32*this.n41-this.n13*this.n24*this.n32*this.n41-this.n14*this.n22*this.n33*this.n41+this.n12*this.n24*this.n33*this.n41+this.n13*this.n22*this.n34*this.n41-this.n12*this.n23*this.n34*this.n41-this.n14*this.n23*this.n31*this.n42+this.n13*this.n24*this.n31*this.n42+this.n14*this.n21*this.n33*this.n42-this.n11*this.n24*this.n33*this.n42-this.n13*this.n21*this.n34*this.n42+this.n11*this.n23*this.n34*this.n42+this.n14*this.n22*this.n31*this.n43-
-this.n12*this.n24*this.n31*this.n43-this.n14*this.n21*this.n32*this.n43+this.n11*this.n24*this.n32*this.n43+this.n12*this.n21*this.n34*this.n43-this.n11*this.n22*this.n34*this.n43-this.n13*this.n22*this.n31*this.n44+this.n12*this.n23*this.n31*this.n44+this.n13*this.n21*this.n32*this.n44-this.n11*this.n23*this.n32*this.n44-this.n12*this.n21*this.n33*this.n44+this.n11*this.n22*this.n33*this.n44},transpose:function(){function a(c,e,g){var h=c[e];c[e]=c[g];c[g]=h}a(this,"n21","n12");a(this,"n31","n13");
-a(this,"n32","n23");a(this,"n41","n14");a(this,"n42","n24");a(this,"n43","n34");return this},clone:function(){var a=new THREE.Matrix4;a.n11=this.n11;a.n12=this.n12;a.n13=this.n13;a.n14=this.n14;a.n21=this.n21;a.n22=this.n22;a.n23=this.n23;a.n24=this.n24;a.n31=this.n31;a.n32=this.n32;a.n33=this.n33;a.n34=this.n34;a.n41=this.n41;a.n42=this.n42;a.n43=this.n43;a.n44=this.n44;return a},flatten:function(){return[this.n11,this.n21,this.n31,this.n41,this.n12,this.n22,this.n32,this.n42,this.n13,this.n23,this.n33,
-this.n43,this.n14,this.n24,this.n34,this.n44]},toString:function(){return"| "+this.n11+" "+this.n12+" "+this.n13+" "+this.n14+" |\n| "+this.n21+" "+this.n22+" "+this.n23+" "+this.n24+" |\n| "+this.n31+" "+this.n32+" "+this.n33+" "+this.n34+" |\n| "+this.n41+" "+this.n42+" "+this.n43+" "+this.n44+" |"}};THREE.Matrix4.translationMatrix=function(a,c,e){var g=new THREE.Matrix4;g.n14=a;g.n24=c;g.n34=e;return g};THREE.Matrix4.scaleMatrix=function(a,c,e){var g=new THREE.Matrix4;g.n11=a;g.n22=c;g.n33=e;return g};
-THREE.Matrix4.rotationXMatrix=function(a){var c=new THREE.Matrix4;c.n22=c.n33=Math.cos(a);c.n32=Math.sin(a);c.n23=-c.n32;return c};THREE.Matrix4.rotationYMatrix=function(a){var c=new THREE.Matrix4;c.n11=c.n33=Math.cos(a);c.n13=Math.sin(a);c.n31=-c.n13;return c};THREE.Matrix4.rotationZMatrix=function(a){var c=new THREE.Matrix4;c.n11=c.n22=Math.cos(a);c.n21=Math.sin(a);c.n12=-c.n21;return c};
-THREE.Matrix4.rotationAxisAngleMatrix=function(a,c){var e=new THREE.Matrix4,g=Math.cos(c),h=Math.sin(c),q=1-g,m=a.x,b=a.y,l=a.z;e.n11=q*m*m+g;e.n12=q*m*b-h*l;e.n13=q*m*l+h*b;e.n21=q*m*b+h*l;e.n22=q*b*b+g;e.n23=q*b*l-h*m;e.n31=q*m*l-h*b;e.n32=q*b*l+h*m;e.n33=q*l*l+g;return e};
-THREE.Matrix4.makeInvert=function(a){var c=new THREE.Matrix4;c.n11=a.n23*a.n34*a.n42-a.n24*a.n33*a.n42+a.n24*a.n32*a.n43-a.n22*a.n34*a.n43-a.n23*a.n32*a.n44+a.n22*a.n33*a.n44;c.n12=a.n14*a.n33*a.n42-a.n13*a.n34*a.n42-a.n14*a.n32*a.n43+a.n12*a.n34*a.n43+a.n13*a.n32*a.n44-a.n12*a.n33*a.n44;c.n13=a.n13*a.n24*a.n42-a.n14*a.n23*a.n42+a.n14*a.n22*a.n43-a.n12*a.n24*a.n43-a.n13*a.n22*a.n44+a.n12*a.n23*a.n44;c.n14=a.n14*a.n23*a.n32-a.n13*a.n24*a.n32-a.n14*a.n22*a.n33+a.n12*a.n24*a.n33+a.n13*a.n22*a.n34-a.n12*
-a.n23*a.n34;c.n21=a.n24*a.n33*a.n41-a.n23*a.n34*a.n41-a.n24*a.n31*a.n43+a.n21*a.n34*a.n43+a.n23*a.n31*a.n44-a.n21*a.n33*a.n44;c.n22=a.n13*a.n34*a.n41-a.n14*a.n33*a.n41+a.n14*a.n31*a.n43-a.n11*a.n34*a.n43-a.n13*a.n31*a.n44+a.n11*a.n33*a.n44;c.n23=a.n14*a.n23*a.n41-a.n13*a.n24*a.n41-a.n14*a.n21*a.n43+a.n11*a.n24*a.n43+a.n13*a.n21*a.n44-a.n11*a.n23*a.n44;c.n24=a.n13*a.n24*a.n31-a.n14*a.n23*a.n31+a.n14*a.n21*a.n33-a.n11*a.n24*a.n33-a.n13*a.n21*a.n34+a.n11*a.n23*a.n34;c.n31=a.n22*a.n34*a.n41-a.n24*a.n32*
-a.n41+a.n24*a.n31*a.n42-a.n21*a.n34*a.n42-a.n22*a.n31*a.n44+a.n21*a.n32*a.n44;c.n32=a.n14*a.n32*a.n41-a.n12*a.n34*a.n41-a.n14*a.n31*a.n42+a.n11*a.n34*a.n42+a.n12*a.n31*a.n44-a.n11*a.n32*a.n44;c.n33=a.n13*a.n24*a.n41-a.n14*a.n22*a.n41+a.n14*a.n21*a.n42-a.n11*a.n24*a.n42-a.n12*a.n21*a.n44+a.n11*a.n22*a.n44;c.n34=a.n14*a.n22*a.n31-a.n12*a.n24*a.n31-a.n14*a.n21*a.n32+a.n11*a.n24*a.n32+a.n12*a.n21*a.n34-a.n11*a.n22*a.n34;c.n41=a.n23*a.n32*a.n41-a.n22*a.n33*a.n41-a.n23*a.n31*a.n42+a.n21*a.n33*a.n42+a.n22*
-a.n31*a.n43-a.n21*a.n32*a.n43;c.n42=a.n12*a.n33*a.n41-a.n13*a.n32*a.n41+a.n13*a.n31*a.n42-a.n11*a.n33*a.n42-a.n12*a.n31*a.n43+a.n11*a.n32*a.n43;c.n43=a.n13*a.n22*a.n41-a.n12*a.n23*a.n41-a.n13*a.n21*a.n42+a.n11*a.n23*a.n42+a.n12*a.n21*a.n43-a.n11*a.n22*a.n43;c.n44=a.n12*a.n23*a.n31-a.n13*a.n22*a.n31+a.n13*a.n21*a.n32-a.n11*a.n23*a.n32-a.n12*a.n21*a.n33+a.n11*a.n22*a.n33;c.multiplyScalar(1/a.determinant());return c};
-THREE.Matrix4.makeInvert3x3=function(a){var c=a.flatten();a=new THREE.Matrix3;var e=c[10]*c[5]-c[6]*c[9],g=-c[10]*c[1]+c[2]*c[9],h=c[6]*c[1]-c[2]*c[5],q=-c[10]*c[4]+c[6]*c[8],m=c[10]*c[0]-c[2]*c[8],b=-c[6]*c[0]+c[2]*c[4],l=c[9]*c[4]-c[5]*c[8],y=-c[9]*c[0]+c[1]*c[8],E=c[5]*c[0]-c[1]*c[4];c=c[0]*e+c[1]*q+c[2]*l;if(c==0)throw"matrix not invertible";c=1/c;a.m[0]=c*e;a.m[1]=c*g;a.m[2]=c*h;a.m[3]=c*q;a.m[4]=c*m;a.m[5]=c*b;a.m[6]=c*l;a.m[7]=c*y;a.m[8]=c*E;return a};
-THREE.Matrix4.makeFrustum=function(a,c,e,g,h,q){var m,b,l;m=new THREE.Matrix4;b=2*h/(c-a);l=2*h/(g-e);a=(c+a)/(c-a);e=(g+e)/(g-e);g=-(q+h)/(q-h);h=-2*q*h/(q-h);m.n11=b;m.n12=0;m.n13=a;m.n14=0;m.n21=0;m.n22=l;m.n23=e;m.n24=0;m.n31=0;m.n32=0;m.n33=g;m.n34=h;m.n41=0;m.n42=0;m.n43=-1;m.n44=0;return m};THREE.Matrix4.makePerspective=function(a,c,e,g){var h;a=e*Math.tan(a*Math.PI/360);h=-a;return THREE.Matrix4.makeFrustum(h*c,a*c,h,a,e,g)};
-THREE.Matrix4.makeOrtho=function(a,c,e,g,h,q){var m,b,l,y;m=new THREE.Matrix4;b=c-a;l=e-g;y=q-h;a=(c+a)/b;e=(e+g)/l;h=(q+h)/y;m.n11=2/b;m.n12=0;m.n13=0;m.n14=-a;m.n21=0;m.n22=2/l;m.n23=0;m.n24=-e;m.n31=0;m.n32=0;m.n33=-2/y;m.n34=-h;m.n41=0;m.n42=0;m.n43=0;m.n44=1;return m};
-THREE.Vertex=function(a,c){this.position=a||new THREE.Vector3;this.positionWorld=new THREE.Vector3;this.positionScreen=new THREE.Vector4;this.normal=c||new THREE.Vector3;this.normalWorld=new THREE.Vector3;this.normalScreen=new THREE.Vector3;this.__visible=true};THREE.Vertex.prototype={toString:function(){return"THREE.Vertex ( position: "+this.position+", normal: "+this.normal+" )"}};
-THREE.Face3=function(a,c,e,g,h){this.a=a;this.b=c;this.c=e;this.centroid=new THREE.Vector3;this.normal=g instanceof THREE.Vector3?g:new THREE.Vector3;this.vertexNormals=g instanceof Array?g:[];this.material=h instanceof Array?h:[h]};THREE.Face3.prototype={toString:function(){return"THREE.Face3 ( "+this.a+", "+this.b+", "+this.c+" )"}};
-THREE.Face4=function(a,c,e,g,h,q){this.a=a;this.b=c;this.c=e;this.d=g;this.centroid=new THREE.Vector3;this.normal=h instanceof THREE.Vector3?h:new THREE.Vector3;this.vertexNormals=h instanceof Array?h:[];this.material=q instanceof Array?q:[q]};THREE.Face4.prototype={toString:function(){return"THREE.Face4 ( "+this.a+", "+this.b+", "+this.c+" "+this.d+" )"}};THREE.UV=function(a,c){this.u=a||0;this.v=c||0};
-THREE.UV.prototype={copy:function(a){this.u=a.u;this.v=a.v},toString:function(){return"THREE.UV ("+this.u+", "+this.v+")"}};THREE.Geometry=function(){this.vertices=[];this.faces=[];this.uvs=[]};
-THREE.Geometry.prototype={computeCentroids:function(){var a,c,e;a=0;for(c=this.faces.length;a<c;a++){e=this.faces[a];e.centroid.set(0,0,0);e.centroid.addSelf(this.vertices[e.a].position);e.centroid.addSelf(this.vertices[e.b].position);e.centroid.addSelf(this.vertices[e.c].position);if(e instanceof THREE.Face3)e.centroid.divideScalar(3);else if(e instanceof THREE.Face4){e.centroid.addSelf(this.vertices[e.d].position);e.centroid.divideScalar(4)}}},computeNormals:function(a){var c,e,g,h,q,m,b=new THREE.Vector3,
-l=new THREE.Vector3;g=0;for(h=this.vertices.length;g<h;g++){q=this.vertices[g];q.normal.set(0,0,0)}g=0;for(h=this.faces.length;g<h;g++){q=this.faces[g];if(a&&q.vertexNormals.length){b.set(0,0,0);c=0;for(e=q.normal.length;c<e;c++)b.addSelf(q.vertexNormals[c]);b.divideScalar(3)}else{c=this.vertices[q.a];e=this.vertices[q.b];m=this.vertices[q.c];b.sub(m.position,e.position);l.sub(c.position,e.position);b.crossSelf(l)}b.isZero()||b.normalize();q.normal.copy(b)}},computeBoundingBox:function(){if(this.vertices.length>
-0){this.bbox={x:[this.vertices[0].position.x,this.vertices[0].position.x],y:[this.vertices[0].position.y,this.vertices[0].position.y],z:[this.vertices[0].position.z,this.vertices[0].position.z]};for(var a=1,c=this.vertices.length;a<c;a++){vertex=this.vertices[a];if(vertex.position.x<this.bbox.x[0])this.bbox.x[0]=vertex.position.x;else if(vertex.position.x>this.bbox.x[1])this.bbox.x[1]=vertex.position.x;if(vertex.position.y<this.bbox.y[0])this.bbox.y[0]=vertex.position.y;else if(vertex.position.y>
-this.bbox.y[1])this.bbox.y[1]=vertex.position.y;if(vertex.position.z<this.bbox.z[0])this.bbox.z[0]=vertex.position.z;else if(vertex.position.z>this.bbox.z[1])this.bbox.z[1]=vertex.position.z}}},toString:function(){return"THREE.Geometry ( vertices: "+this.vertices+", faces: "+this.faces+" )"}};
-THREE.Camera=function(a,c,e,g){this.position=new THREE.Vector3(0,0,0);this.target={position:new THREE.Vector3(0,0,0)};this.up=new THREE.Vector3(0,1,0);this.matrix=new THREE.Matrix4;this.projectionMatrix=THREE.Matrix4.makePerspective(a,c,e,g);this.autoUpdateMatrix=true;this.updateMatrix=function(){this.matrix.lookAt(this.position,this.target.position,this.up)};this.toString=function(){return"THREE.Camera ( "+this.position+", "+this.target.position+" )"}};THREE.Light=function(a){this.color=new THREE.Color(a)};
-THREE.AmbientLight=function(a){THREE.Light.call(this,a)};THREE.AmbientLight.prototype=new THREE.Light;THREE.AmbientLight.prototype.constructor=THREE.AmbientLight;THREE.DirectionalLight=function(a,c){THREE.Light.call(this,a);this.position=new THREE.Vector3(0,1,0);this.intensity=c||1};THREE.DirectionalLight.prototype=new THREE.Light;THREE.DirectionalLight.prototype.constructor=THREE.DirectionalLight;
-THREE.PointLight=function(a,c){THREE.Light.call(this,a);this.position=new THREE.Vector3;this.intensity=c||1};THREE.DirectionalLight.prototype=new THREE.Light;THREE.DirectionalLight.prototype.constructor=THREE.PointLight;
-THREE.Object3D=function(){this.position=new THREE.Vector3;this.rotation=new THREE.Vector3;this.scale=new THREE.Vector3(1,1,1);this.matrix=new THREE.Matrix4;this.translationMatrix=new THREE.Matrix4;this.rotationMatrix=new THREE.Matrix4;this.scaleMatrix=new THREE.Matrix4;this.screen=new THREE.Vector3;this.autoUpdateMatrix=this.visible=true;this.updateMatrix=function(){this.matrixPosition=THREE.Matrix4.translationMatrix(this.position.x,this.position.y,this.position.z);this.rotationMatrix=THREE.Matrix4.rotationXMatrix(this.rotation.x);
-this.rotationMatrix.multiplySelf(THREE.Matrix4.rotationYMatrix(this.rotation.y));this.rotationMatrix.multiplySelf(THREE.Matrix4.rotationZMatrix(this.rotation.z));this.scaleMatrix=THREE.Matrix4.scaleMatrix(this.scale.x,this.scale.y,this.scale.z);this.matrix.copy(this.matrixPosition);this.matrix.multiplySelf(this.rotationMatrix);this.matrix.multiplySelf(this.scaleMatrix)}};THREE.Particle=function(a){THREE.Object3D.call(this);this.material=a instanceof Array?a:[a];this.autoUpdateMatrix=false};
-THREE.Particle.prototype=new THREE.Object3D;THREE.Particle.prototype.constructor=THREE.Particle;THREE.Line=function(a,c){THREE.Object3D.call(this);this.geometry=a;this.material=c instanceof Array?c:[c]};THREE.Line.prototype=new THREE.Object3D;THREE.Line.prototype.constructor=THREE.Line;
-THREE.Mesh=function(a,c,e){THREE.Object3D.call(this);this.geometry=a;this.material=c instanceof Array?c:[c];this.overdraw=this.doubleSided=this.flipSided=false;this.materialFaceGroup={};this.sortFacesByMaterial();e&&this.normalizeUVs();this.geometry.computeBoundingBox()};THREE.Mesh.prototype=new THREE.Object3D;THREE.Mesh.prototype.constructor=THREE.Mesh;
-THREE.Mesh.prototype.sortFacesByMaterial=function(){function a(E){var I=[];c=0;for(e=E.length;c<e;c++)E[c]==undefined?I.push("undefined"):I.push(E[c].toString());return I.join("_")}var c,e,g,h,q,m,b,l,y={};g=0;for(h=this.geometry.faces.length;g<h;g++){q=this.geometry.faces[g];m=q.material;b=a(m);if(y[b]==undefined)y[b]={hash:b,counter:0};l=y[b].hash+"_"+y[b].counter;if(this.materialFaceGroup[l]==undefined)this.materialFaceGroup[l]={faces:[],material:m,vertices:0};q=q instanceof THREE.Face3?3:4;if(this.materialFaceGroup[l].vertices+
-q>65535){y[b].counter+=1;l=y[b].hash+"_"+y[b].counter;if(this.materialFaceGroup[l]==undefined)this.materialFaceGroup[l]={faces:[],material:m,vertices:0}}this.materialFaceGroup[l].faces.push(g);this.materialFaceGroup[l].vertices+=q}};THREE.Mesh.prototype.normalizeUVs=function(){var a,c,e,g,h;a=0;for(c=this.geometry.uvs.length;a<c;a++){h=this.geometry.uvs[a];e=0;for(g=h.length;e<g;e++){if(h[e].u!=1)h[e].u-=Math.floor(h[e].u);if(h[e].v!=1)h[e].v-=Math.floor(h[e].v)}}};THREE.FlatShading=0;
-THREE.SmoothShading=1;THREE.NormalBlending=0;THREE.AdditiveBlending=1;THREE.SubtractiveBlending=2;
-THREE.LineBasicMaterial=function(a){this.color=new THREE.Color(16711680);this.opacity=1;this.blending=THREE.NormalBlending;this.linewidth=1;this.linejoin=this.linecap="round";if(a){a.color!==undefined&&this.color.setHex(a.color);if(a.opacity!==undefined)this.opacity=a.opacity;if(a.blending!==undefined)this.blending=a.blending;if(a.linewidth!==undefined)this.linewidth=a.linewidth;if(a.linecap!==undefined)this.linecap=a.linecap;if(a.linejoin!==undefined)this.linejoin=a.linejoin}this.toString=function(){return"THREE.LineBasicMaterial (<br/>color: "+
-this.color+"<br/>opacity: "+this.opacity+"<br/>blending: "+this.blending+"<br/>linewidth: "+this.linewidth+"<br/>linecap: "+this.linecap+"<br/>linejoin: "+this.linejoin+"<br/>)"}};
-THREE.MeshBasicMaterial=function(a){this.id=THREE.MeshBasicMaterialCounter.value++;this.color=new THREE.Color(15658734);this.env_map=this.map=null;this.combine=THREE.Multiply;this.reflectivity=1;this.refraction_ratio=0.98;this.opacity=1;this.shading=THREE.SmoothShading;this.blending=THREE.NormalBlending;this.wireframe=false;this.wireframe_linewidth=1;this.wireframe_linejoin=this.wireframe_linecap="round";if(a){a.color!==undefined&&this.color.setHex(a.color);if(a.map!==undefined)this.map=a.map;if(a.env_map!==
-undefined)this.env_map=a.env_map;if(a.combine!==undefined)this.combine=a.combine;if(a.reflectivity!==undefined)this.reflectivity=a.reflectivity;if(a.refraction_ratio!==undefined)this.refraction_ratio=a.refraction_ratio;if(a.opacity!==undefined)this.opacity=a.opacity;if(a.shading!==undefined)this.shading=a.shading;if(a.blending!==undefined)this.blending=a.blending;if(a.wireframe!==undefined)this.wireframe=a.wireframe;if(a.wireframe_linewidth!==undefined)this.wireframe_linewidth=a.wireframe_linewidth;
-if(a.wireframe_linecap!==undefined)this.wireframe_linecap=a.wireframe_linecap;if(a.wireframe_linejoin!==undefined)this.wireframe_linejoin=a.wireframe_linejoin}this.toString=function(){return"THREE.MeshBasicMaterial (<br/>id: "+this.id+"<br/>color: "+this.color+"<br/>map: "+this.map+"<br/>env_map: "+this.env_map+"<br/>combine: "+this.combine+"<br/>reflectivity: "+this.reflectivity+"<br/>refraction_ratio: "+this.refraction_ratio+"<br/>opacity: "+this.opacity+"<br/>blending: "+this.blending+"<br/>wireframe: "+
-this.wireframe+"<br/>wireframe_linewidth: "+this.wireframe_linewidth+"<br/>wireframe_linecap: "+this.wireframe_linecap+"<br/>wireframe_linejoin: "+this.wireframe_linejoin+"<br/>)"}};THREE.MeshBasicMaterialCounter={value:0};
-THREE.MeshLambertMaterial=function(a){this.id=THREE.MeshLambertMaterialCounter.value++;this.color=new THREE.Color(15658734);this.env_map=this.map=null;this.combine=THREE.Multiply;this.reflectivity=1;this.refraction_ratio=0.98;this.opacity=1;this.shading=THREE.SmoothShading;this.blending=THREE.NormalBlending;this.wireframe=false;this.wireframe_linewidth=1;this.wireframe_linejoin=this.wireframe_linecap="round";if(a){a.color!==undefined&&this.color.setHex(a.color);if(a.map!==undefined)this.map=a.map;
-if(a.env_map!==undefined)this.env_map=a.env_map;if(a.combine!==undefined)this.combine=a.combine;if(a.reflectivity!==undefined)this.reflectivity=a.reflectivity;if(a.refraction_ratio!==undefined)this.refraction_ratio=a.refraction_ratio;if(a.opacity!==undefined)this.opacity=a.opacity;if(a.shading!==undefined)this.shading=a.shading;if(a.blending!==undefined)this.blending=a.blending;if(a.wireframe!==undefined)this.wireframe=a.wireframe;if(a.wireframe_linewidth!==undefined)this.wireframe_linewidth=a.wireframe_linewidth;
-if(a.wireframe_linecap!==undefined)this.wireframe_linecap=a.wireframe_linecap;if(a.wireframe_linejoin!==undefined)this.wireframe_linejoin=a.wireframe_linejoin}this.toString=function(){return"THREE.MeshLambertMaterial (<br/>id: "+this.id+"<br/>color: "+this.color+"<br/>map: "+this.map+"<br/>env_map: "+this.env_map+"<br/>combine: "+this.combine+"<br/>reflectivity: "+this.reflectivity+"<br/>refraction_ratio: "+this.refraction_ratio+"<br/>opacity: "+this.opacity+"<br/>shading: "+this.shading+"<br/>blending: "+
-this.blending+"<br/>wireframe: "+this.wireframe+"<br/>wireframe_linewidth: "+this.wireframe_linewidth+"<br/>wireframe_linecap: "+this.wireframe_linecap+"<br/>wireframe_linejoin: "+this.wireframe_linejoin+"<br/> )"}};THREE.MeshLambertMaterialCounter={value:0};
-THREE.MeshPhongMaterial=function(a){this.id=THREE.MeshPhongMaterialCounter.value++;this.color=new THREE.Color(15658734);this.ambient=new THREE.Color(328965);this.specular=new THREE.Color(1118481);this.shininess=30;this.env_map=this.specular_map=this.map=null;this.combine=THREE.Multiply;this.reflectivity=1;this.refraction_ratio=0.98;this.opacity=1;this.shading=THREE.SmoothShading;this.blending=THREE.NormalBlending;this.wireframe=false;this.wireframe_linewidth=1;this.wireframe_linejoin=this.wireframe_linecap=
-"round";if(a){if(a.color!==undefined)this.color=new THREE.Color(a.color);if(a.ambient!==undefined)this.ambient=new THREE.Color(a.ambient);if(a.specular!==undefined)this.specular=new THREE.Color(a.specular);if(a.shininess!==undefined)this.shininess=a.shininess;if(a.map!==undefined)this.map=a.map;if(a.specular_map!==undefined)this.specular_map=a.specular_map;if(a.env_map!==undefined)this.env_map=a.env_map;if(a.combine!==undefined)this.combine=a.combine;if(a.reflectivity!==undefined)this.reflectivity=
-a.reflectivity;if(a.refraction_ratio!==undefined)this.refraction_ratio=a.refraction_ratio;if(a.opacity!==undefined)this.opacity=a.opacity;if(a.shading!==undefined)this.shading=a.shading;if(a.blending!==undefined)this.blending=a.blending;if(a.wireframe!==undefined)this.wireframe=a.wireframe;if(a.wireframe_linewidth!==undefined)this.wireframe_linewidth=a.wireframe_linewidth;if(a.wireframe_linecap!==undefined)this.wireframe_linecap=a.wireframe_linecap;if(a.wireframe_linejoin!==undefined)this.wireframe_linejoin=
-a.wireframe_linejoin}this.toString=function(){return"THREE.MeshPhongMaterial (<br/>id: "+this.id+"<br/>color: "+this.color+"<br/>ambient: "+this.ambient+"<br/>specular: "+this.specular+"<br/>shininess: "+this.shininess+"<br/>map: "+this.map+"<br/>specular_map: "+this.specular_map+"<br/>env_map: "+this.env_map+"<br/>combine: "+this.combine+"<br/>reflectivity: "+this.reflectivity+"<br/>refraction_ratio: "+this.refraction_ratio+"<br/>opacity: "+this.opacity+"<br/>shading: "+this.shading+"<br/>wireframe: "+
-this.wireframe+"<br/>wireframe_linewidth: "+this.wireframe_linewidth+"<br/>wireframe_linecap: "+this.wireframe_linecap+"<br/>wireframe_linejoin: "+this.wireframe_linejoin+"<br/>"+ +")"}};THREE.MeshPhongMaterialCounter={value:0};
-THREE.MeshDepthMaterial=function(a){this.near=1;this.far=1E3;this.opacity=1;this.blending=THREE.NormalBlending;if(a){if(a.near!==undefined)this.near=a.near;if(a.far!==undefined)this.far=a.far;if(a.opacity!==undefined)this.opacity=a.opacity;if(a.blending!==undefined)this.blending=a.blending}this.__2near=2*this.near;this.__farPlusNear=this.far+this.near;this.__farMinusNear=this.far-this.near;this.toString=function(){return"THREE.MeshDepthMaterial"}};
-THREE.MeshNormalMaterial=function(a){this.opacity=1;this.shading=THREE.FlatShading;this.blending=THREE.NormalBlending;if(a){if(a.opacity!==undefined)this.opacity=a.opacity;if(a.shading!==undefined)this.shading=a.shading;if(a.blending!==undefined)this.blending=a.blending}this.toString=function(){return"THREE.MeshNormalMaterial"}};THREE.MeshFaceMaterial=function(){this.toString=function(){return"THREE.MeshFaceMaterial"}};
-THREE.MeshCubeMaterial=function(a){this.id=THREE.MeshCubeMaterial.value++;this.env_map=null;this.blending=THREE.NormalBlending;if(a)if(a.env_map!==undefined)this.env_map=a.env_map;this.toString=function(){return"THREE.MeshCubeMaterial( id: "+this.id+"<br/>env_map: "+this.env_map+" )"}};THREE.MeshCubeMaterialCounter={value:0};
-THREE.MeshShaderMaterial=function(a){this.id=THREE.MeshShaderMaterialCounter.value++;this.vertex_shader=this.fragment_shader="void main() {}";this.uniforms={};this.shading=THREE.SmoothShading;this.blending=THREE.NormalBlending;this.wireframe=false;this.wireframe_linewidth=1;this.wireframe_linejoin=this.wireframe_linecap="round";if(a){if(a.fragment_shader!==undefined)this.fragment_shader=a.fragment_shader;if(a.vertex_shader!==undefined)this.vertex_shader=a.vertex_shader;if(a.uniforms!==undefined)this.uniforms=
-a.uniforms;if(a.shading!==undefined)this.shading=a.shading;if(a.blending!==undefined)this.blending=a.blending;if(a.wireframe!==undefined)this.wireframe=a.wireframe;if(a.wireframe_linewidth!==undefined)this.wireframe_linewidth=a.wireframe_linewidth;if(a.wireframe_linecap!==undefined)this.wireframe_linecap=a.wireframe_linecap;if(a.wireframe_linejoin!==undefined)this.wireframe_linejoin=a.wireframe_linejoin}this.toString=function(){return"THREE.MeshShaderMaterial (<br/>id: "+this.id+"<br/>blending: "+
-this.blending+"<br/>wireframe: "+this.wireframe+"<br/>wireframe_linewidth: "+this.wireframe_linewidth+"<br/>wireframe_linecap: "+this.wireframe_linecap+"<br/>wireframe_linejoin: "+this.wireframe_linejoin+"<br/>)"}};THREE.MeshShaderMaterialCounter={value:0};
-THREE.ParticleBasicMaterial=function(a){this.color=new THREE.Color(16711680);this.map=null;this.opacity=1;this.blending=THREE.NormalBlending;this.offset=new THREE.Vector2;if(a){a.color!==undefined&&this.color.setHex(a.color);if(a.map!==undefined)this.map=a.map;if(a.opacity!==undefined)this.opacity=a.opacity;if(a.blending!==undefined)this.blending=a.blending}this.toString=function(){return"THREE.ParticleBasicMaterial (<br/>color: "+this.color+"<br/>map: "+this.map+"<br/>opacity: "+this.opacity+"<br/>blending: "+
-this.blending+"<br/>)"}};THREE.ParticleCircleMaterial=function(a){this.color=new THREE.Color(16711680);this.opacity=1;this.blending=THREE.NormalBlending;if(a){a.color!==undefined&&this.color.setHex(a.color);if(a.opacity!==undefined)this.opacity=a.opacity;if(a.blending!==undefined)this.blending=a.blending}this.toString=function(){return"THREE.ParticleCircleMaterial (<br/>color: "+this.color+"<br/>opacity: "+this.opacity+"<br/>blending: "+this.blending+"<br/>)"}};
-THREE.ParticleDOMMaterial=function(a){this.domElement=a;this.toString=function(){return"THREE.ParticleDOMMaterial ( domElement: "+this.domElement+" )"}};THREE.Texture=function(a,c,e,g){this.image=a;this.loaded=false;this.mapping=c!==undefined?c:THREE.UVMapping;this.wrap_s=e!==undefined?e:THREE.ClampToEdge;this.wrap_t=g!==undefined?g:THREE.ClampToEdge;this.toString=function(){return"THREE.Texture (<br/>image: "+this.image+"<br/>wrap_s: "+this.wrap_s+"<br/>wrap_t: "+this.wrap_t+"<br/>)"}};
-THREE.UVMapping=0;THREE.ReflectionMap=1;THREE.RefractionMap=2;THREE.Multiply=0;THREE.Mix=1;THREE.Repeat=0;THREE.ClampToEdge=1;THREE.MirroredRepeat=2;THREE.TextureCube=function(a,c){this.image=a;this.mapping=c?c:THREE.ReflectionMap;this.toString=function(){return"THREE.TextureCube (<br/>image: "+this.image+"<br/>mapping: "+this.mapping+"<br/>)"}};
-THREE.Scene=function(){this.objects=[];this.lights=[];this.addObject=function(a){this.objects.push(a)};this.removeObject=function(a){a=this.objects.indexOf(a);a!==-1&&this.objects.splice(a,1)};this.addLight=function(a){this.lights.push(a)};this.removeLight=function(a){a=this.lights.indexOf(a);a!==-1&&this.lights.splice(a,1)};this.toString=function(){return"THREE.Scene ( "+this.objects+" )"}};
-THREE.Projector=function(){function a(f,d){var i=0,o=1,k=f.z+f.w,j=d.z+d.w,n=-f.z+f.w,t=-d.z+d.w;if(k>=0&&j>=0&&n>=0&&t>=0)return true;else if(k<0&&j<0||n<0&&t<0)return false;else{if(k<0)i=Math.max(i,k/(k-j));else if(j<0)o=Math.min(o,k/(k-j));if(n<0)i=Math.max(i,n/(n-t));else if(t<0)o=Math.min(o,n/(n-t));if(o<i)return false;else{f.lerpSelf(d,i);d.lerpSelf(f,1-o);return true}}}var c=null,e,g,h,q=[],m,b,l=[],y,E,I=[],w=new THREE.Vector4,F=new THREE.Matrix4,Q=new THREE.Matrix4,O=new THREE.Vector4,P=
-new THREE.Vector4,r;this.projectScene=function(f,d){var i,o,k,j,n,t,R,s,T,x,v,U,J,z,p,B,N;c=[];h=_face4Count=b=E=0;d.autoUpdateMatrix&&d.updateMatrix();F.multiply(d.projectionMatrix,d.matrix);R=f.objects;i=0;for(o=R.length;i<o;i++){s=R[i];s.autoUpdateMatrix&&s.updateMatrix();T=s.matrix;x=s.rotationMatrix;v=s.material;U=s.overdraw;if(s instanceof THREE.Mesh){J=s.geometry.vertices;k=0;for(j=J.length;k<j;k++){z=J[k];z.positionWorld.copy(z.position);T.transform(z.positionWorld);p=z.positionScreen;p.copy(z.positionWorld);
-F.transform(p);p.multiplyScalar(1/p.w);z.__visible=p.z>0&&p.z<1}z=s.geometry.faces;k=0;for(j=z.length;k<j;k++){p=z[k];if(p instanceof THREE.Face3){n=J[p.a];t=J[p.b];B=J[p.c];if(n.__visible&&t.__visible&&B.__visible)if(s.doubleSided||s.flipSided!=(B.positionScreen.x-n.positionScreen.x)*(t.positionScreen.y-n.positionScreen.y)-(B.positionScreen.y-n.positionScreen.y)*(t.positionScreen.x-n.positionScreen.x)<0){e=q[h]=q[h]||new THREE.RenderableFace3;e.v1.positionWorld.copy(n.positionWorld);e.v2.positionWorld.copy(t.positionWorld);
-e.v3.positionWorld.copy(B.positionWorld);e.v1.positionScreen.copy(n.positionScreen);e.v2.positionScreen.copy(t.positionScreen);e.v3.positionScreen.copy(B.positionScreen);e.normalWorld.copy(p.normal);x.transform(e.normalWorld);e.centroidWorld.copy(p.centroid);T.transform(e.centroidWorld);e.centroidScreen.copy(e.centroidWorld);F.transform(e.centroidScreen);B=p.vertexNormals;r=e.vertexNormalsWorld;n=0;for(t=B.length;n<t;n++){N=r[n].copy(B[n]);x.transform(N)}e.z=e.centroidScreen.z;e.meshMaterial=v;e.faceMaterial=
-p.material;e.overdraw=U;if(s.geometry.uvs[k]){e.uvs[0]=s.geometry.uvs[k][0];e.uvs[1]=s.geometry.uvs[k][1];e.uvs[2]=s.geometry.uvs[k][2]}c.push(e);h++}}else if(p instanceof THREE.Face4){n=J[p.a];t=J[p.b];B=J[p.c];N=J[p.d];if(n.__visible&&t.__visible&&B.__visible&&N.__visible)if(s.doubleSided||s.flipSided!=((N.positionScreen.x-n.positionScreen.x)*(t.positionScreen.y-n.positionScreen.y)-(N.positionScreen.y-n.positionScreen.y)*(t.positionScreen.x-n.positionScreen.x)<0||(t.positionScreen.x-B.positionScreen.x)*
-(N.positionScreen.y-B.positionScreen.y)-(t.positionScreen.y-B.positionScreen.y)*(N.positionScreen.x-B.positionScreen.x)<0)){e=q[h]=q[h]||new THREE.RenderableFace3;e.v1.positionWorld.copy(n.positionWorld);e.v2.positionWorld.copy(t.positionWorld);e.v3.positionWorld.copy(N.positionWorld);e.v1.positionScreen.copy(n.positionScreen);e.v2.positionScreen.copy(t.positionScreen);e.v3.positionScreen.copy(N.positionScreen);e.normalWorld.copy(p.normal);x.transform(e.normalWorld);e.centroidWorld.copy(p.centroid);
-T.transform(e.centroidWorld);e.centroidScreen.copy(e.centroidWorld);F.transform(e.centroidScreen);e.z=e.centroidScreen.z;e.meshMaterial=v;e.faceMaterial=p.material;e.overdraw=U;if(s.geometry.uvs[k]){e.uvs[0]=s.geometry.uvs[k][0];e.uvs[1]=s.geometry.uvs[k][1];e.uvs[2]=s.geometry.uvs[k][3]}c.push(e);h++;g=q[h]=q[h]||new THREE.RenderableFace3;g.v1.positionWorld.copy(t.positionWorld);g.v2.positionWorld.copy(B.positionWorld);g.v3.positionWorld.copy(N.positionWorld);g.v1.positionScreen.copy(t.positionScreen);
-g.v2.positionScreen.copy(B.positionScreen);g.v3.positionScreen.copy(N.positionScreen);g.normalWorld.copy(e.normalWorld);g.centroidWorld.copy(e.centroidWorld);g.centroidScreen.copy(e.centroidScreen);g.z=g.centroidScreen.z;g.meshMaterial=v;g.faceMaterial=p.material;g.overdraw=U;if(s.geometry.uvs[k]){g.uvs[0]=s.geometry.uvs[k][1];g.uvs[1]=s.geometry.uvs[k][2];g.uvs[2]=s.geometry.uvs[k][3]}c.push(g);h++}}}}else if(s instanceof THREE.Line){Q.multiply(F,T);J=s.geometry.vertices;z=J[0];z.positionScreen.copy(z.position);
-Q.transform(z.positionScreen);k=1;for(j=J.length;k<j;k++){n=J[k];n.positionScreen.copy(n.position);Q.transform(n.positionScreen);t=J[k-1];O.copy(n.positionScreen);P.copy(t.positionScreen);if(a(O,P)){O.multiplyScalar(1/O.w);P.multiplyScalar(1/P.w);m=l[b]=l[b]||new THREE.RenderableLine;m.v1.positionScreen.copy(O);m.v2.positionScreen.copy(P);m.z=Math.max(O.z,P.z);m.material=s.material;c.push(m);b++}}}else if(s instanceof THREE.Particle){w.set(s.position.x,s.position.y,s.position.z,1);F.transform(w);
-w.z/=w.w;if(w.z>0&&w.z<1){y=I[E]=I[E]||new THREE.RenderableParticle;y.x=w.x/w.w;y.y=w.y/w.w;y.z=w.z;y.rotation=s.rotation.z;y.scale.x=s.scale.x*Math.abs(y.x-(w.x+d.projectionMatrix.n11)/(w.w+d.projectionMatrix.n14));y.scale.y=s.scale.y*Math.abs(y.y-(w.y+d.projectionMatrix.n22)/(w.w+d.projectionMatrix.n24));y.material=s.material;c.push(y);E++}}}c.sort(function(Y,C){return C.z-Y.z});return c};this.unprojectVector=function(f,d){var i=new THREE.Matrix4;i.multiply(THREE.Matrix4.makeInvert(d.matrix),THREE.Matrix4.makeInvert(d.projectionMatrix));
-i.transform(f);return f}};
-THREE.DOMRenderer=function(){THREE.Renderer.call(this);var a=null,c=new THREE.Projector,e,g,h,q;this.domElement=document.createElement("div");this.setSize=function(m,b){e=m;g=b;h=e/2;q=g/2};this.render=function(m,b){var l,y,E,I,w,F,Q,O;a=c.projectScene(m,b);l=0;for(y=a.length;l<y;l++){w=a[l];if(w instanceof THREE.RenderableParticle){Q=w.x*h+h;O=w.y*q+q;E=0;for(I=w.material.length;E<I;E++){F=w.material[E];if(F instanceof THREE.ParticleDOMMaterial){F=F.domElement;F.style.left=Q+"px";F.style.top=O+"px"}}}}}};
-THREE.CanvasRenderer=function(){function a(G,X,S,D){var u,K,$,L,W=G.lights;G=0;for(u=W.length;G<u;G++){K=W[G];$=K.color;L=K.intensity;if(K instanceof THREE.DirectionalLight){K=S.dot(K.position)*L;if(K>0){D.r+=$.r*K;D.g+=$.g*K;D.b+=$.b*K}}else if(K instanceof THREE.PointLight){ra.sub(K.position,X);ra.normalize();K=S.dot(ra)*L;if(K>0){D.r+=$.r*K;D.g+=$.g*K;D.b+=$.b*K}}}}function c(G,X,S,D,u,K){if(u.opacity!=0){q(u.opacity);m(u.blending);R=G.positionScreen.x;s=G.positionScreen.y;T=X.positionScreen.x;
-x=X.positionScreen.y;v=S.positionScreen.x;U=S.positionScreen.y;var $=R,L=s,W=T,aa=x,Z=v,ca=U;r.beginPath();r.moveTo($,L);r.lineTo(W,aa);r.lineTo(Z,ca);r.lineTo($,L);r.closePath();if(u instanceof THREE.MeshBasicMaterial)if(u.map)h(R,s,T,x,v,U,u.map.image,D.uvs[0].u,D.uvs[0].v,D.uvs[1].u,D.uvs[1].v,D.uvs[2].u,D.uvs[2].v);else u.wireframe?e(u.color.__styleString,u.wireframe_linewidth):g(u.color.__styleString);else if(u instanceof THREE.MeshLambertMaterial){if(u.map&&!u.wireframe){h(R,s,T,x,v,U,u.map.image,
-D.uvs[0].u,D.uvs[0].v,D.uvs[1].u,D.uvs[1].v,D.uvs[2].u,D.uvs[2].v);m(THREE.SubtractiveBlending)}if(da)if(u.shading==THREE.SmoothShading&&!u.wireframe){z.r=p.r=B.r=ea.r;z.g=p.g=B.g=ea.g;z.b=p.b=B.b=ea.b;a(K,D.v1.positionWorld,D.vertexNormalsWorld[0],z);a(K,D.v2.positionWorld,D.vertexNormalsWorld[1],p);a(K,D.v3.positionWorld,D.vertexNormalsWorld[2],B);N.r=(p.r+B.r)*0.5;N.g=(p.g+B.g)*0.5;N.b=(p.b+B.b)*0.5;V=b(z,p,B,N);h(R,s,T,x,v,U,V,0,0,1,0,0,1)}else{fa.r=ea.r;fa.g=ea.g;fa.b=ea.b;a(K,D.centroidWorld,
-D.normalWorld,fa);J.r=u.color.r*fa.r;J.g=u.color.g*fa.g;J.b=u.color.b*fa.b;J.updateStyleString();u.wireframe?e(J.__styleString,u.wireframe_linewidth):g(J.__styleString)}else u.wireframe?e(u.color.__styleString,u.wireframe_linewidth):g(u.color.__styleString)}else if(u instanceof THREE.MeshDepthMaterial){Y=u.__2near;C=u.__farPlusNear;A=u.__farMinusNear;z.r=z.g=z.b=1-Y/(C-G.positionScreen.z*A);p.r=p.g=p.b=1-Y/(C-X.positionScreen.z*A);B.r=B.g=B.b=1-Y/(C-S.positionScreen.z*A);N.r=(p.r+B.r)*0.5;N.g=(p.g+
-B.g)*0.5;N.b=(p.b+B.b)*0.5;V=b(z,p,B,N);h(R,s,T,x,v,U,V,0,0,1,0,0,1)}else if(u instanceof THREE.MeshNormalMaterial){J.r=l(D.normalWorld.x);J.g=l(D.normalWorld.y);J.b=l(D.normalWorld.z);J.updateStyleString();u.wireframe?e(J.__styleString,u.wireframe_linewidth):g(J.__styleString)}}}function e(G,X){if(i!=G)r.strokeStyle=i=G;if(k!=X)r.lineWidth=k=X;r.stroke()}function g(G){if(o!=G)r.fillStyle=o=G;r.fill()}function h(G,X,S,D,u,K,$,L,W,aa,Z,ca,ja){var ia=$.width-1,ga=$.height-1;L*=ia;W*=ga;aa*=ia;Z*=ga;
-ca*=ia;ja*=ga;S-=G;D-=X;u-=G;K-=X;aa-=L;Z-=W;ca-=L;ja-=W;ga=1/(aa*ja-ca*Z);ia=(ja*S-Z*u)*ga;Z=(ja*D-Z*K)*ga;S=(aa*u-ca*S)*ga;D=(aa*K-ca*D)*ga;G=G-ia*L-S*W;X=X-Z*L-D*W;r.save();r.transform(ia,Z,S,D,G,X);r.clip();r.drawImage($,0,0);r.restore()}function q(G){if(f!=G)r.globalAlpha=f=G}function m(G){if(d!=G){switch(G){case THREE.NormalBlending:r.globalCompositeOperation="source-over";break;case THREE.AdditiveBlending:r.globalCompositeOperation="lighter";break;case THREE.SubtractiveBlending:r.globalCompositeOperation=
-"darker"}d=G}}function b(G,X,S,D){ha[0]=~~(G.r*255);ha[1]=~~(G.g*255);ha[2]=~~(G.b*255);ha[4]=~~(X.r*255);ha[5]=~~(X.g*255);ha[6]=~~(X.b*255);ha[8]=~~(S.r*255);ha[9]=~~(S.g*255);ha[10]=~~(S.b*255);ha[12]=~~(D.r*255);ha[13]=~~(D.g*255);ha[14]=~~(D.b*255);na.putImageData(sa,0,0);qa.drawImage(oa,0,0);return pa}function l(G){return G<0?Math.min((1+G)*0.5,0.5):0.5+Math.min(G*0.5,0.5)}function y(G,X){var S=X.x-G.x,D=X.y-G.y,u=1/Math.sqrt(S*S+D*D);S*=u;D*=u;X.x+=S;X.y+=D;G.x-=S;G.y-=D}var E=null,I=new THREE.Projector,
-w=document.createElement("canvas"),F,Q,O,P,r=w.getContext("2d"),f=1,d=0,i=null,o=null,k=1,j,n,t,R,s,T,x,v,U,J=new THREE.Color,z=new THREE.Color,p=new THREE.Color,B=new THREE.Color,N=new THREE.Color,Y,C,A,V,ba=new THREE.Rectangle,H=new THREE.Rectangle,M=new THREE.Rectangle,da=false,fa=new THREE.Color,ea=new THREE.Color,ka=new THREE.Color,la=new THREE.Color,va=Math.PI*2,ra=new THREE.Vector3;new THREE.UV;new THREE.UV;new THREE.UV;new THREE.UV;var oa,na,sa,ha,pa,qa,ma=16;oa=document.createElement("canvas");
-oa.width=oa.height=2;na=oa.getContext("2d");na.fillStyle="rgba(0,0,0,1)";na.fillRect(0,0,2,2);sa=na.getImageData(0,0,2,2);ha=sa.data;pa=document.createElement("canvas");pa.width=pa.height=ma;qa=pa.getContext("2d");qa.translate(-ma/2,-ma/2);qa.scale(ma,ma);ma--;this.domElement=w;this.autoClear=true;this.setSize=function(G,X){F=G;Q=X;O=F/2;P=Q/2;w.width=F;w.height=Q;ba.set(-O,-P,O,P)};this.clear=function(){if(!H.isEmpty()){H.inflate(1);H.minSelf(ba);r.clearRect(H.getX(),H.getY(),H.getWidth(),H.getHeight());
-H.empty()}};this.render=function(G,X){var S,D,u,K,$,L,W,aa;r.setTransform(1,0,0,-1,O,P);this.autoClear&&this.clear();E=I.projectScene(G,X);r.fillStyle="rgba(0, 255, 255, 0.5)";r.fillRect(ba.getX(),ba.getY(),ba.getWidth(),ba.getHeight());if(da=G.lights.length>0){$=G.lights;ea.setRGB(0,0,0);ka.setRGB(0,0,0);la.setRGB(0,0,0);S=0;for(D=$.length;S<D;S++){u=$[S];K=u.color;if(u instanceof THREE.AmbientLight){ea.r+=K.r;ea.g+=K.g;ea.b+=K.b}else if(u instanceof THREE.DirectionalLight){ka.r+=K.r;ka.g+=K.g;ka.b+=
-K.b}else if(u instanceof THREE.PointLight){la.r+=K.r;la.g+=K.g;la.b+=K.b}}}S=0;for(D=E.length;S<D;S++){u=E[S];M.empty();if(u instanceof THREE.RenderableParticle){j=u;j.x*=O;j.y*=P;K=0;for($=u.material.length;K<$;K++)a:{L=j;W=u;var Z=u.material[K];if(Z.opacity!=0){q(Z.opacity);m(Z.blending);aa=void 0;var ca=void 0,ja=void 0,ia=void 0,ga=void 0,ta=void 0,ua=void 0;if(Z instanceof THREE.ParticleBasicMaterial){if(Z.map){ga=Z.map;ta=ga.width>>1;ua=ga.height>>1;ja=W.scale.x*O;ia=W.scale.y*P;aa=ja*ta;ca=
-ia*ua;M.set(L.x-aa,L.y-ca,L.x+aa,L.y+ca);if(!ba.instersects(M))break a;r.save();r.translate(L.x,L.y);r.rotate(-W.rotation);r.scale(ja,-ia);r.translate(-ta,-ua);r.drawImage(ga,0,0);r.restore()}r.beginPath();r.moveTo(L.x-10,L.y);r.lineTo(L.x+10,L.y);r.moveTo(L.x,L.y-10);r.lineTo(L.x,L.y+10);r.closePath();r.strokeStyle="rgb(255,255,0)";r.stroke()}else if(Z instanceof THREE.ParticleCircleMaterial){if(da){fa.r=ea.r+ka.r+la.r;fa.g=ea.g+ka.g+la.g;fa.b=ea.b+ka.b+la.b;J.r=Z.color.r*fa.r;J.g=Z.color.g*fa.g;
-J.b=Z.color.b*fa.b;J.updateStyleString()}else J.__styleString=Z.color.__styleString;aa=W.scale.x*O;ca=W.scale.y*P;M.set(L.x-aa,L.y-ca,L.x+aa,L.y+ca);if(ba.instersects(M)){Z=J.__styleString;if(o!=Z)r.fillStyle=o=Z;r.save();r.translate(L.x,L.y);r.rotate(-W.rotation);r.scale(aa,ca);r.beginPath();r.arc(0,0,1,0,va,true);r.closePath();r.fill();r.restore()}}}}}else if(u instanceof THREE.RenderableLine){j=u.v1;n=u.v2;j.positionScreen.x*=O;j.positionScreen.y*=P;n.positionScreen.x*=O;n.positionScreen.y*=P;
-M.addPoint(j.positionScreen.x,j.positionScreen.y);M.addPoint(n.positionScreen.x,n.positionScreen.y);if(ba.instersects(M)){K=0;for($=u.material.length;K<$;){W=j;aa=n;L=u.material[K++];if(L.opacity!=0){q(L.opacity);m(L.blending);r.beginPath();r.moveTo(W.positionScreen.x,W.positionScreen.y);r.lineTo(aa.positionScreen.x,aa.positionScreen.y);r.closePath();if(L instanceof THREE.LineBasicMaterial){J.__styleString=L.color.__styleString;W=L.linewidth;if(k!=W)r.lineWidth=k=W;W=J.__styleString;if(i!=W)r.strokeStyle=
-i=W;r.stroke();M.inflate(L.linewidth*2)}}}}}else if(u instanceof THREE.RenderableFace3){j=u.v1;n=u.v2;t=u.v3;j.positionScreen.x*=O;j.positionScreen.y*=P;n.positionScreen.x*=O;n.positionScreen.y*=P;t.positionScreen.x*=O;t.positionScreen.y*=P;if(u.overdraw){y(j.positionScreen,n.positionScreen);y(n.positionScreen,t.positionScreen);y(t.positionScreen,j.positionScreen)}M.addPoint(j.positionScreen.x,j.positionScreen.y);M.addPoint(n.positionScreen.x,n.positionScreen.y);M.addPoint(t.positionScreen.x,t.positionScreen.y);
-if(ba.instersects(M)){K=0;for($=u.meshMaterial.length;K<$;){aa=u.meshMaterial[K++];if(aa instanceof THREE.MeshFaceMaterial){L=0;for(W=u.faceMaterial.length;L<W;)(aa=u.faceMaterial[L++])&&c(j,n,t,u,aa,G)}else c(j,n,t,u,aa,G)}}}H.addRectangle(M)}r.lineWidth=1;r.strokeStyle="rgba( 255, 0, 0, 0.5 )";r.strokeRect(H.getX(),H.getY(),H.getWidth(),H.getHeight());r.setTransform(1,0,0,1,0,0)}};
-THREE.SVGRenderer=function(){function a(p,B,N){var Y,C,A,V;Y=0;for(C=p.lights.length;Y<C;Y++){A=p.lights[Y];if(A instanceof THREE.DirectionalLight){V=B.normalWorld.dot(A.position)*A.intensity;if(V>0){N.r+=A.color.r*V;N.g+=A.color.g*V;N.b+=A.color.b*V}}else if(A instanceof THREE.PointLight){t.sub(A.position,B.centroidWorld);t.normalize();V=B.normalWorld.dot(t)*A.intensity;if(V>0){N.r+=A.color.r*V;N.g+=A.color.g*V;N.b+=A.color.b*V}}}}function c(p,B,N,Y,C,A){x=g(v++);x.setAttribute("d","M "+p.positionScreen.x+
-" "+p.positionScreen.y+" L "+B.positionScreen.x+" "+B.positionScreen.y+" L "+N.positionScreen.x+","+N.positionScreen.y+"z");if(C instanceof THREE.MeshBasicMaterial)d.__styleString=C.color.__styleString;else if(C instanceof THREE.MeshLambertMaterial)if(f){i.r=o.r;i.g=o.g;i.b=o.b;a(A,Y,i);d.r=C.color.r*i.r;d.g=C.color.g*i.g;d.b=C.color.b*i.b;d.updateStyleString()}else d.__styleString=C.color.__styleString;else if(C instanceof THREE.MeshDepthMaterial){n=1-C.__2near/(C.__farPlusNear-Y.z*C.__farMinusNear);
-d.setRGB(n,n,n)}else C instanceof THREE.MeshNormalMaterial&&d.setRGB(h(Y.normalWorld.x),h(Y.normalWorld.y),h(Y.normalWorld.z));C.wireframe?x.setAttribute("style","fill: none; stroke: "+d.__styleString+"; stroke-width: "+C.wireframe_linewidth+"; stroke-opacity: "+C.opacity+"; stroke-linecap: "+C.wireframe_linecap+"; stroke-linejoin: "+C.wireframe_linejoin):x.setAttribute("style","fill: "+d.__styleString+"; fill-opacity: "+C.opacity);b.appendChild(x)}function e(p,B,N,Y,C,A,V){x=g(v++);x.setAttribute("d",
-"M "+p.positionScreen.x+" "+p.positionScreen.y+" L "+B.positionScreen.x+" "+B.positionScreen.y+" L "+N.positionScreen.x+","+N.positionScreen.y+" L "+Y.positionScreen.x+","+Y.positionScreen.y+"z");if(A instanceof THREE.MeshBasicMaterial)d.__styleString=A.color.__styleString;else if(A instanceof THREE.MeshLambertMaterial)if(f){i.r=o.r;i.g=o.g;i.b=o.b;a(V,C,i);d.r=A.color.r*i.r;d.g=A.color.g*i.g;d.b=A.color.b*i.b;d.updateStyleString()}else d.__styleString=A.color.__styleString;else if(A instanceof THREE.MeshDepthMaterial){n=
-1-A.__2near/(A.__farPlusNear-C.z*A.__farMinusNear);d.setRGB(n,n,n)}else A instanceof THREE.MeshNormalMaterial&&d.setRGB(h(C.normalWorld.x),h(C.normalWorld.y),h(C.normalWorld.z));A.wireframe?x.setAttribute("style","fill: none; stroke: "+d.__styleString+"; stroke-width: "+A.wireframe_linewidth+"; stroke-opacity: "+A.opacity+"; stroke-linecap: "+A.wireframe_linecap+"; stroke-linejoin: "+A.wireframe_linejoin):x.setAttribute("style","fill: "+d.__styleString+"; fill-opacity: "+A.opacity);b.appendChild(x)}
-function g(p){if(R[p]==null){R[p]=document.createElementNS("http://www.w3.org/2000/svg","path");z==0&&R[p].setAttribute("shape-rendering","crispEdges");return R[p]}return R[p]}function h(p){return p<0?Math.min((1+p)*0.5,0.5):0.5+Math.min(p*0.5,0.5)}var q=null,m=new THREE.Projector,b=document.createElementNS("http://www.w3.org/2000/svg","svg"),l,y,E,I,w,F,Q,O,P=new THREE.Rectangle,r=new THREE.Rectangle,f=false,d=new THREE.Color(16777215),i=new THREE.Color(16777215),o=new THREE.Color(0),k=new THREE.Color(0),
-j=new THREE.Color(0),n,t=new THREE.Vector3,R=[],s=[],T=[],x,v,U,J,z=1;this.domElement=b;this.autoClear=true;this.setQuality=function(p){switch(p){case "high":z=1;break;case "low":z=0}};this.setSize=function(p,B){l=p;y=B;E=l/2;I=y/2;b.setAttribute("viewBox",-E+" "+-I+" "+l+" "+y);b.setAttribute("width",l);b.setAttribute("height",y);P.set(-E,-I,E,I)};this.clear=function(){for(;b.childNodes.length>0;)b.removeChild(b.childNodes[0])};this.render=function(p,B){var N,Y,C,A,V,ba,H,M;this.autoClear&&this.clear();
-q=m.projectScene(p,B);J=U=v=0;if(f=p.lights.length>0){H=p.lights;o.setRGB(0,0,0);k.setRGB(0,0,0);j.setRGB(0,0,0);N=0;for(Y=H.length;N<Y;N++){C=H[N];A=C.color;if(C instanceof THREE.AmbientLight){o.r+=A.r;o.g+=A.g;o.b+=A.b}else if(C instanceof THREE.DirectionalLight){k.r+=A.r;k.g+=A.g;k.b+=A.b}else if(C instanceof THREE.PointLight){j.r+=A.r;j.g+=A.g;j.b+=A.b}}}N=0;for(Y=q.length;N<Y;N++){H=q[N];r.empty();if(H instanceof THREE.RenderableParticle){w=H;w.x*=E;w.y*=-I;C=0;for(A=H.material.length;C<A;C++)if(M=
-H.material[C]){V=w;ba=H;M=M;var da=U++;if(s[da]==null){s[da]=document.createElementNS("http://www.w3.org/2000/svg","circle");z==0&&s[da].setAttribute("shape-rendering","crispEdges")}x=s[da];x.setAttribute("cx",V.x);x.setAttribute("cy",V.y);x.setAttribute("r",ba.scale.x*E);if(M instanceof THREE.ParticleCircleMaterial){if(f){i.r=o.r+k.r+j.r;i.g=o.g+k.g+j.g;i.b=o.b+k.b+j.b;d.r=M.color.r*i.r;d.g=M.color.g*i.g;d.b=M.color.b*i.b;d.updateStyleString()}else d=M.color;x.setAttribute("style","fill: "+d.__styleString)}b.appendChild(x)}}else if(H instanceof
-THREE.RenderableLine){w=H.v1;F=H.v2;w.positionScreen.x*=E;w.positionScreen.y*=-I;F.positionScreen.x*=E;F.positionScreen.y*=-I;r.addPoint(w.positionScreen.x,w.positionScreen.y);r.addPoint(F.positionScreen.x,F.positionScreen.y);if(P.instersects(r)){C=0;for(A=H.material.length;C<A;)if(M=H.material[C++]){V=w;ba=F;M=M;da=J++;if(T[da]==null){T[da]=document.createElementNS("http://www.w3.org/2000/svg","line");z==0&&T[da].setAttribute("shape-rendering","crispEdges")}x=T[da];x.setAttribute("x1",V.positionScreen.x);
-x.setAttribute("y1",V.positionScreen.y);x.setAttribute("x2",ba.positionScreen.x);x.setAttribute("y2",ba.positionScreen.y);if(M instanceof THREE.LineBasicMaterial){d.__styleString=M.color.__styleString;x.setAttribute("style","fill: none; stroke: "+d.__styleString+"; stroke-width: "+M.linewidth+"; stroke-opacity: "+M.opacity+"; stroke-linecap: "+M.linecap+"; stroke-linejoin: "+M.linejoin);b.appendChild(x)}}}}else if(H instanceof THREE.RenderableFace3){w=H.v1;F=H.v2;Q=H.v3;w.positionScreen.x*=E;w.positionScreen.y*=
--I;F.positionScreen.x*=E;F.positionScreen.y*=-I;Q.positionScreen.x*=E;Q.positionScreen.y*=-I;r.addPoint(w.positionScreen.x,w.positionScreen.y);r.addPoint(F.positionScreen.x,F.positionScreen.y);r.addPoint(Q.positionScreen.x,Q.positionScreen.y);if(P.instersects(r)){C=0;for(A=H.meshMaterial.length;C<A;){M=H.meshMaterial[C++];if(M instanceof THREE.MeshFaceMaterial){V=0;for(ba=H.faceMaterial.length;V<ba;)(M=H.faceMaterial[V++])&&c(w,F,Q,H,M,p)}else M&&c(w,F,Q,H,M,p)}}}else if(H instanceof THREE.RenderableFace4){w=
-H.v1;F=H.v2;Q=H.v3;O=H.v4;w.positionScreen.x*=E;w.positionScreen.y*=-I;F.positionScreen.x*=E;F.positionScreen.y*=-I;Q.positionScreen.x*=E;Q.positionScreen.y*=-I;O.positionScreen.x*=E;O.positionScreen.y*=-I;r.addPoint(w.positionScreen.x,w.positionScreen.y);r.addPoint(F.positionScreen.x,F.positionScreen.y);r.addPoint(Q.positionScreen.x,Q.positionScreen.y);r.addPoint(O.positionScreen.x,O.positionScreen.y);if(P.instersects(r)){C=0;for(A=H.meshMaterial.length;C<A;){M=H.meshMaterial[C++];if(M instanceof
-THREE.MeshFaceMaterial){V=0;for(ba=H.faceMaterial.length;V<ba;)(M=H.faceMaterial[V++])&&e(w,F,Q,O,H,M,p)}else M&&e(w,F,Q,O,H,M,p)}}}}}};
-THREE.WebGLRenderer=function(a){function c(f,d){var i=b.createProgram();b.attachShader(i,h("fragment","#ifdef GL_ES\nprecision highp float;\n#endif\n"+f));b.attachShader(i,h("vertex","uniform mat4 objectMatrix;\nuniform mat4 modelViewMatrix;\nuniform mat4 projectionMatrix;\nuniform vec3 cameraPosition;\nattribute vec3 position;\nattribute vec3 normal;\nattribute vec2 uv;\n"+d));b.linkProgram(i);b.getProgramParameter(i,b.LINK_STATUS)||alert("Could not initialise shaders\nVALIDATE_STATUS: "+b.getProgramParameter(i,
-b.VALIDATE_STATUS)+", gl error ["+b.getError()+"]");i.uniforms={};return i}function e(f,d){var i,o,k;i=0;for(o=d.length;i<o;i++){k=d[i];f.uniforms[k]=b.getUniformLocation(f,k)}}function g(f){f.position=b.getAttribLocation(f,"position");b.enableVertexAttribArray(f.position);f.normal=b.getAttribLocation(f,"normal");b.enableVertexAttribArray(f.normal);f.uv=b.getAttribLocation(f,"uv");b.enableVertexAttribArray(f.uv)}function h(f,d){var i;if(f=="fragment")i=b.createShader(b.FRAGMENT_SHADER);else if(f==
-"vertex")i=b.createShader(b.VERTEX_SHADER);b.shaderSource(i,d);b.compileShader(i);if(!b.getShaderParameter(i,b.COMPILE_STATUS)){alert(b.getShaderInfoLog(i));return null}return i}function q(f){switch(f){case THREE.Repeat:return b.REPEAT;case THREE.ClampToEdge:return b.CLAMP_TO_EDGE;case THREE.MirroredRepeat:return b.MIRRORED_REPEAT}return 0}var m=document.createElement("canvas"),b,l,y,E=new THREE.Matrix4,I,w=new Float32Array(16),F=new Float32Array(16),Q=new Float32Array(16),O=new Float32Array(9),P=
-new Float32Array(16);a=function(f,d){if(f){var i,o,k,j=pointLights=maxDirLights=maxPointLights=0;i=0;for(o=f.lights.length;i<o;i++){k=f.lights[i];k instanceof THREE.DirectionalLight&&j++;k instanceof THREE.PointLight&&pointLights++}if(pointLights+j<=d){maxDirLights=j;maxPointLights=pointLights}else{maxDirLights=Math.ceil(d*j/(pointLights+j));maxPointLights=d-maxDirLights}return{directional:maxDirLights,point:maxPointLights}}return{directional:1,point:d-1}}(a,4);this.domElement=m;this.autoClear=true;
-try{b=m.getContext("experimental-webgl",{antialias:true})}catch(r){}if(!b){alert("WebGL not supported");throw"cannot create webgl context";}b.clearColor(0,0,0,1);b.clearDepth(1);b.enable(b.DEPTH_TEST);b.depthFunc(b.LEQUAL);b.frontFace(b.CCW);b.cullFace(b.BACK);b.enable(b.CULL_FACE);b.enable(b.BLEND);b.blendFunc(b.ONE,b.ONE_MINUS_SRC_ALPHA);b.clearColor(0,0,0,0);(function(f,d){var i=[f?"#define MAX_DIR_LIGHTS "+f:"",d?"#define MAX_POINT_LIGHTS "+d:"","uniform bool enableLighting;\nuniform bool useRefract;\nuniform int pointLightNumber;\nuniform int directionalLightNumber;\nuniform vec3 ambientLightColor;",
-f?"uniform vec3 directionalLightColor[ MAX_DIR_LIGHTS ];":"",f?"uniform vec3 directionalLightDirection[ MAX_DIR_LIGHTS ];":"",d?"uniform vec3 pointLightColor[ MAX_POINT_LIGHTS ];":"",d?"uniform vec3 pointLightPosition[ MAX_POINT_LIGHTS ];":"","uniform mat4 viewMatrix;\nuniform mat3 normalMatrix;\nvarying vec3 vNormal;\nvarying vec2 vUv;\nvarying vec3 vLightWeighting;",d?"varying vec3 vPointLightVector[ MAX_POINT_LIGHTS ];":"","varying vec3 vViewPosition;\nvarying vec3 vReflect;\nuniform float mRefractionRatio;\nvoid main(void) {\nvec4 mPosition = objectMatrix * vec4( position, 1.0 );\nvViewPosition = cameraPosition - mPosition.xyz;\nvec3 nWorld = mat3( objectMatrix[0].xyz, objectMatrix[1].xyz, objectMatrix[2].xyz ) * normal;\nvec4 mvPosition = modelViewMatrix * vec4( position, 1.0 );\nvec3 transformedNormal = normalize( normalMatrix * normal );\nif ( !enableLighting ) {\nvLightWeighting = vec3( 1.0, 1.0, 1.0 );\n} else {\nvLightWeighting = ambientLightColor;",
-f?"for( int i = 0; i < MAX_DIR_LIGHTS; i++ ) {":"",f?"vec4 lDirection = viewMatrix * vec4( directionalLightDirection[ i ], 0.0 );":"",f?"float directionalLightWeighting = max( dot( transformedNormal, normalize(lDirection.xyz ) ), 0.0 );":"",f?"vLightWeighting += directionalLightColor[ i ] * directionalLightWeighting;":"",f?"}":"",d?"for( int i = 0; i < MAX_POINT_LIGHTS; i++ ) {":"",d?"vec4 lPosition = viewMatrix * vec4( pointLightPosition[ i ], 1.0 );":"",d?"vPointLightVector[ i ] = normalize( lPosition.xyz - mvPosition.xyz );":
-"",d?"float pointLightWeighting = max( dot( transformedNormal, vPointLightVector[ i ] ), 0.0 );":"",d?"vLightWeighting += pointLightColor[ i ] * pointLightWeighting;":"",d?"}":"","}\nvNormal = transformedNormal;\nvUv = uv;\nif ( useRefract ) {\nvReflect = refract( normalize(mPosition.xyz - cameraPosition), normalize(nWorld.xyz), mRefractionRatio );\n} else {\nvReflect = reflect( normalize(mPosition.xyz - cameraPosition), normalize(nWorld.xyz) );\n}\ngl_Position = projectionMatrix * mvPosition;\n}"].join("\n"),
-o=[f?"#define MAX_DIR_LIGHTS "+f:"",d?"#define MAX_POINT_LIGHTS "+d:"","uniform int material;\nuniform bool enableMap;\nuniform bool enableCubeMap;\nuniform bool mixEnvMap;\nuniform samplerCube tCube;\nuniform float mReflectivity;\nuniform sampler2D tMap;\nuniform vec4 mColor;\nuniform float mOpacity;\nuniform vec4 mAmbient;\nuniform vec4 mSpecular;\nuniform float mShininess;\nuniform float m2Near;\nuniform float mFarPlusNear;\nuniform float mFarMinusNear;\nuniform int pointLightNumber;\nuniform int directionalLightNumber;",
-f?"uniform mat4 viewMatrix;":"",f?"uniform vec3 directionalLightDirection[ MAX_DIR_LIGHTS ];":"","varying vec3 vNormal;\nvarying vec2 vUv;\nvarying vec3 vLightWeighting;",d?"varying vec3 vPointLightVector[ MAX_POINT_LIGHTS ];":"","varying vec3 vViewPosition;\nvarying vec3 vReflect;\nuniform vec3 cameraPosition;\nvoid main() {\nvec4 mapColor = vec4( 1.0, 1.0, 1.0, 1.0 );\nvec4 cubeColor = vec4( 1.0, 1.0, 1.0, 1.0 );\nif ( enableMap ) {\nmapColor = texture2D( tMap, vUv );\n}\nif ( enableCubeMap ) {\ncubeColor.r = textureCube( tCube, vec3( -vReflect.x, vReflect.yz ) ).r;\ncubeColor.g = textureCube( tCube, vec3( -vReflect.x + 0.005, vReflect.yz ) ).g;\ncubeColor.b = textureCube( tCube, vec3( -vReflect.x + 0.01, vReflect.yz ) ).b;\n}\nif ( material == 5 ) { \nvec3 wPos = cameraPosition - vViewPosition;\ngl_FragColor = textureCube( tCube, vec3( -wPos.x, wPos.yz ) );\n} else if ( material == 4 ) { \ngl_FragColor = vec4( 0.5*normalize( vNormal ) + vec3(0.5, 0.5, 0.5), mOpacity );\n} else if ( material == 3 ) { \nfloat w = 0.5;\ngl_FragColor = vec4( w, w, w, mOpacity );\n} else if ( material == 2 ) { \nvec3 normal = normalize( vNormal );\nvec3 viewPosition = normalize( vViewPosition );",
-d?"vec4 pointDiffuse  = vec4( 0.0, 0.0, 0.0, 0.0 );":"",d?"vec4 pointSpecular = vec4( 0.0, 0.0, 0.0, 0.0 );":"",d?"for( int i = 0; i < MAX_POINT_LIGHTS; i++ ) {":"",d?"vec3 pointVector = normalize( vPointLightVector[ i ] );":"",d?"vec3 pointHalfVector = normalize( vPointLightVector[ i ] + vViewPosition );":"",d?"float pointDotNormalHalf = dot( normal, pointHalfVector );":"",d?"float pointDiffuseWeight = max( dot( normal, pointVector ), 0.0 );":"",d?"float pointSpecularWeight = 0.0;":"",d?"if ( pointDotNormalHalf >= 0.0 )":
-"",d?"pointSpecularWeight = pow( pointDotNormalHalf, mShininess );":"",d?"pointDiffuse  += mColor * pointDiffuseWeight;":"",d?"pointSpecular += mSpecular * pointSpecularWeight;":"",d?"}":"",f?"vec4 dirDiffuse  = vec4( 0.0, 0.0, 0.0, 0.0 );":"",f?"vec4 dirSpecular = vec4( 0.0, 0.0, 0.0, 0.0 );":"",f?"for( int i = 0; i < MAX_DIR_LIGHTS; i++ ) {":"",f?"vec4 lDirection = viewMatrix * vec4( directionalLightDirection[ i ], 0.0 );":"",f?"vec3 dirVector = normalize( lDirection.xyz );":"",f?"vec3 dirHalfVector = normalize( lDirection.xyz + vViewPosition );":
-"",f?"float dirDotNormalHalf = dot( normal, dirHalfVector );":"",f?"float dirDiffuseWeight = max( dot( normal, dirVector ), 0.0 );":"",f?"float dirSpecularWeight = 0.0;":"",f?"if ( dirDotNormalHalf >= 0.0 )":"",f?"dirSpecularWeight = pow( dirDotNormalHalf, mShininess );":"",f?"dirDiffuse  += mColor * dirDiffuseWeight;":"",f?"dirSpecular += mSpecular * dirSpecularWeight;":"",f?"}":"","vec4 totalLight = mAmbient;",f?"totalLight += dirDiffuse + dirSpecular;":"",d?"totalLight += pointDiffuse + pointSpecular;":
-"","if ( mixEnvMap ) {\ngl_FragColor = vec4( mix( mapColor.rgb * totalLight.xyz * vLightWeighting, cubeColor.rgb, mReflectivity ), mapColor.a );\n} else {\ngl_FragColor = vec4( mapColor.rgb * cubeColor.rgb * totalLight.xyz * vLightWeighting, mapColor.a );\n}\n} else if ( material == 1 ) {\nif ( mixEnvMap ) {\ngl_FragColor = vec4( mix( mColor.rgb * mapColor.rgb * vLightWeighting, cubeColor.rgb, mReflectivity ), mColor.a * mapColor.a );\n} else {\ngl_FragColor = vec4( mColor.rgb * mapColor.rgb * cubeColor.rgb * vLightWeighting, mColor.a * mapColor.a );\n}\n} else {\nif ( mixEnvMap ) {\ngl_FragColor = mix( mColor * mapColor, cubeColor, mReflectivity );\n} else {\ngl_FragColor = mColor * mapColor * cubeColor;\n}\n}\n}"].join("\n");
-l=c(o,i);b.useProgram(l);e(l,["viewMatrix","modelViewMatrix","projectionMatrix","normalMatrix","objectMatrix","cameraPosition","enableLighting","ambientLightColor","material","mColor","mAmbient","mSpecular","mShininess","mOpacity","enableMap","tMap","enableCubeMap","tCube","mixEnvMap","mReflectivity","mRefractionRatio","useRefract","m2Near","mFarPlusNear","mFarMinusNear"]);f&&e(l,["directionalLightNumber","directionalLightColor","directionalLightDirection"]);d&&e(l,["pointLightNumber","pointLightColor",
-"pointLightPosition"]);b.uniform1i(l.uniforms.enableMap,0);b.uniform1i(l.uniforms.tMap,0);b.uniform1i(l.uniforms.enableCubeMap,0);b.uniform1i(l.uniforms.tCube,1);b.uniform1i(l.uniforms.mixEnvMap,0);b.uniform1i(l.uniforms.useRefract,0);g(l)})(a.directional,a.point);this.setSize=function(f,d){m.width=f;m.height=d;b.viewport(0,0,m.width,m.height)};this.clear=function(){b.clear(b.COLOR_BUFFER_BIT|b.DEPTH_BUFFER_BIT)};this.setupLights=function(f,d){var i,o,k,j,n,t=[],R=[],s=[];j=[];n=[];b.uniform1i(f.uniforms.enableLighting,
-d.lights.length);i=0;for(o=d.lights.length;i<o;i++){k=d.lights[i];if(k instanceof THREE.AmbientLight)t.push(k);else if(k instanceof THREE.DirectionalLight)s.push(k);else k instanceof THREE.PointLight&&R.push(k)}i=k=j=n=0;for(o=t.length;i<o;i++){k+=t[i].color.r;j+=t[i].color.g;n+=t[i].color.b}b.uniform3f(f.uniforms.ambientLightColor,k,j,n);j=[];n=[];i=0;for(o=s.length;i<o;i++){k=s[i];j.push(k.color.r*k.intensity);j.push(k.color.g*k.intensity);j.push(k.color.b*k.intensity);n.push(k.position.x);n.push(k.position.y);
-n.push(k.position.z)}if(s.length){b.uniform1i(f.uniforms.directionalLightNumber,s.length);b.uniform3fv(f.uniforms.directionalLightDirection,n);b.uniform3fv(f.uniforms.directionalLightColor,j)}j=[];n=[];i=0;for(o=R.length;i<o;i++){k=R[i];j.push(k.color.r*k.intensity);j.push(k.color.g*k.intensity);j.push(k.color.b*k.intensity);n.push(k.position.x);n.push(k.position.y);n.push(k.position.z)}if(R.length){b.uniform1i(f.uniforms.pointLightNumber,R.length);b.uniform3fv(f.uniforms.pointLightPosition,n);b.uniform3fv(f.uniforms.pointLightColor,
-j)}};this.createBuffers=function(f,d){var i,o,k,j,n,t,R,s,T=[],x=[],v=[],U=[],J=[],z=0,p=f.materialFaceGroup[d],B;k=false;i=0;for(o=f.material.length;i<o;i++){meshMaterial=f.material[i];if(meshMaterial instanceof THREE.MeshFaceMaterial){n=0;for(B=p.material.length;n<B;n++)if(p.material[n]&&p.material[n].shading!=undefined&&p.material[n].shading==THREE.SmoothShading){k=true;break}}else if(meshMaterial&&meshMaterial.shading!=undefined&&meshMaterial.shading==THREE.SmoothShading){k=true;break}if(k)break}B=
-k;i=0;for(o=p.faces.length;i<o;i++){k=p.faces[i];j=f.geometry.faces[k];n=j.vertexNormals;faceNormal=j.normal;k=f.geometry.uvs[k];if(j instanceof THREE.Face3){t=f.geometry.vertices[j.a].position;R=f.geometry.vertices[j.b].position;s=f.geometry.vertices[j.c].position;v.push(t.x,t.y,t.z);v.push(R.x,R.y,R.z);v.push(s.x,s.y,s.z);if(n.length==3&&B)for(j=0;j<3;j++)U.push(n[j].x,n[j].y,n[j].z);else for(j=0;j<3;j++)U.push(faceNormal.x,faceNormal.y,faceNormal.z);if(k)for(j=0;j<3;j++)J.push(k[j].u,k[j].v);T.push(z,
-z+1,z+2);x.push(z,z+1);x.push(z,z+2);x.push(z+1,z+2);z+=3}else if(j instanceof THREE.Face4){t=f.geometry.vertices[j.a].position;R=f.geometry.vertices[j.b].position;s=f.geometry.vertices[j.c].position;j=f.geometry.vertices[j.d].position;v.push(t.x,t.y,t.z);v.push(R.x,R.y,R.z);v.push(s.x,s.y,s.z);v.push(j.x,j.y,j.z);if(n.length==4&&B)for(j=0;j<4;j++)U.push(n[j].x,n[j].y,n[j].z);else for(j=0;j<4;j++)U.push(faceNormal.x,faceNormal.y,faceNormal.z);if(k)for(j=0;j<4;j++)J.push(k[j].u,k[j].v);T.push(z,z+
-1,z+2);T.push(z,z+2,z+3);x.push(z,z+1);x.push(z,z+2);x.push(z,z+3);x.push(z+1,z+2);x.push(z+2,z+3);z+=4}}if(v.length){p.__webGLVertexBuffer=b.createBuffer();b.bindBuffer(b.ARRAY_BUFFER,p.__webGLVertexBuffer);b.bufferData(b.ARRAY_BUFFER,new Float32Array(v),b.STATIC_DRAW);p.__webGLNormalBuffer=b.createBuffer();b.bindBuffer(b.ARRAY_BUFFER,p.__webGLNormalBuffer);b.bufferData(b.ARRAY_BUFFER,new Float32Array(U),b.STATIC_DRAW);p.__webGLUVBuffer=b.createBuffer();b.bindBuffer(b.ARRAY_BUFFER,p.__webGLUVBuffer);
-b.bufferData(b.ARRAY_BUFFER,new Float32Array(J),b.STATIC_DRAW);p.__webGLFaceBuffer=b.createBuffer();b.bindBuffer(b.ELEMENT_ARRAY_BUFFER,p.__webGLFaceBuffer);b.bufferData(b.ELEMENT_ARRAY_BUFFER,new Uint16Array(T),b.STATIC_DRAW);p.__webGLLineBuffer=b.createBuffer();b.bindBuffer(b.ELEMENT_ARRAY_BUFFER,p.__webGLLineBuffer);b.bufferData(b.ELEMENT_ARRAY_BUFFER,new Uint16Array(x),b.STATIC_DRAW);p.__webGLFaceCount=T.length;p.__webGLLineCount=x.length}};this.renderBuffer=function(f,d,i){var o,k,j,n,t,R,s,
-T,x,v;if(d instanceof THREE.MeshShaderMaterial){if(!d.program){d.program=c(d.fragment_shader,d.vertex_shader);t=["viewMatrix","modelViewMatrix","projectionMatrix","normalMatrix","objectMatrix","cameraPosition"];for(v in d.uniforms)t.push(v);e(d.program,t);g(d.program)}v=d.program}else v=l;if(v!=y){b.useProgram(v);y=v}if(d instanceof THREE.MeshShaderMaterial){t=v;T=d.uniforms;var U,J;for(k in T){U=T[k].type;x=T[k].value;J=t.uniforms[k];if(U=="i")b.uniform1i(J,x);else if(U=="f")b.uniform1f(J,x);else if(U==
-"t"){b.uniform1i(J,x);x=T[k].texture;if(x instanceof THREE.TextureCube&&x.image.length==6){if(!x.image.__webGLTextureCube&&!x.image.__cubeMapInitialized&&x.image.loadCount==6){x.image.__webGLTextureCube=b.createTexture();b.bindTexture(b.TEXTURE_CUBE_MAP,x.image.__webGLTextureCube);b.texParameteri(b.TEXTURE_CUBE_MAP,b.TEXTURE_WRAP_S,b.CLAMP_TO_EDGE);b.texParameteri(b.TEXTURE_CUBE_MAP,b.TEXTURE_WRAP_T,b.CLAMP_TO_EDGE);b.texParameteri(b.TEXTURE_CUBE_MAP,b.TEXTURE_MAG_FILTER,b.LINEAR);b.texParameteri(b.TEXTURE_CUBE_MAP,
-b.TEXTURE_MIN_FILTER,b.LINEAR_MIPMAP_LINEAR);for(U=0;U<6;++U)b.texImage2D(b.TEXTURE_CUBE_MAP_POSITIVE_X+U,0,b.RGBA,b.RGBA,b.UNSIGNED_BYTE,x.image[U]);b.generateMipmap(b.TEXTURE_CUBE_MAP);b.bindTexture(b.TEXTURE_CUBE_MAP,null);x.image.__cubeMapInitialized=true}b.activeTexture(b.TEXTURE1);b.bindTexture(b.TEXTURE_CUBE_MAP,x.image.__webGLTextureCube)}}}this.loadCamera(v,f);this.loadMatrices(v)}else if(d instanceof THREE.MeshPhongMaterial||d instanceof THREE.MeshLambertMaterial||d instanceof THREE.MeshBasicMaterial){f=
-d.color;o=d.opacity;j=d.wireframe;n=d.wireframe_linewidth;R=d.map;s=d.env_map;t=d.combine==THREE.Mix;k=d.reflectivity;x=d.env_map&&d.env_map.mapping==THREE.RefractionMap;T=d.refraction_ratio;b.uniform4f(v.uniforms.mColor,f.r*o,f.g*o,f.b*o,o);b.uniform1i(v.uniforms.mixEnvMap,t);b.uniform1f(v.uniforms.mReflectivity,k);b.uniform1i(v.uniforms.useRefract,x);b.uniform1f(v.uniforms.mRefractionRatio,T)}if(d instanceof THREE.MeshNormalMaterial){o=d.opacity;b.uniform1f(v.uniforms.mOpacity,o);b.uniform1i(v.uniforms.material,
-4)}else if(d instanceof THREE.MeshDepthMaterial){o=d.opacity;j=d.wireframe;n=d.wireframe_linewidth;b.uniform1f(v.uniforms.mOpacity,o);b.uniform1f(v.uniforms.m2Near,d.__2near);b.uniform1f(v.uniforms.mFarPlusNear,d.__farPlusNear);b.uniform1f(v.uniforms.mFarMinusNear,d.__farMinusNear);b.uniform1i(v.uniforms.material,3)}else if(d instanceof THREE.MeshPhongMaterial){f=d.ambient;k=d.specular;t=d.shininess;b.uniform4f(v.uniforms.mAmbient,f.r,f.g,f.b,o);b.uniform4f(v.uniforms.mSpecular,k.r,k.g,k.b,o);b.uniform1f(v.uniforms.mShininess,
-t);b.uniform1i(v.uniforms.material,2)}else if(d instanceof THREE.MeshLambertMaterial)b.uniform1i(v.uniforms.material,1);else if(d instanceof THREE.MeshBasicMaterial)b.uniform1i(v.uniforms.material,0);else if(d instanceof THREE.MeshCubeMaterial){b.uniform1i(v.uniforms.material,5);s=d.env_map}if(R){if(!d.map.__webGLTexture&&d.map.image.loaded){d.map.__webGLTexture=b.createTexture();b.bindTexture(b.TEXTURE_2D,d.map.__webGLTexture);b.texImage2D(b.TEXTURE_2D,0,b.RGBA,b.RGBA,b.UNSIGNED_BYTE,d.map.image);
-b.texParameteri(b.TEXTURE_2D,b.TEXTURE_WRAP_S,q(d.map.wrap_s));b.texParameteri(b.TEXTURE_2D,b.TEXTURE_WRAP_T,q(d.map.wrap_t));b.texParameteri(b.TEXTURE_2D,b.TEXTURE_MAG_FILTER,b.LINEAR);b.texParameteri(b.TEXTURE_2D,b.TEXTURE_MIN_FILTER,b.LINEAR_MIPMAP_LINEAR);b.generateMipmap(b.TEXTURE_2D);b.bindTexture(b.TEXTURE_2D,null)}b.activeTexture(b.TEXTURE0);b.bindTexture(b.TEXTURE_2D,d.map.__webGLTexture);b.uniform1i(v.uniforms.tMap,0);b.uniform1i(v.uniforms.enableMap,1)}else b.uniform1i(v.uniforms.enableMap,
-0);if(s){if(d.env_map&&d.env_map instanceof THREE.TextureCube&&d.env_map.image.length==6){if(!d.env_map.image.__webGLTextureCube&&!d.env_map.image.__cubeMapInitialized&&d.env_map.image.loadCount==6){d.env_map.image.__webGLTextureCube=b.createTexture();b.bindTexture(b.TEXTURE_CUBE_MAP,d.env_map.image.__webGLTextureCube);b.texParameteri(b.TEXTURE_CUBE_MAP,b.TEXTURE_WRAP_S,b.CLAMP_TO_EDGE);b.texParameteri(b.TEXTURE_CUBE_MAP,b.TEXTURE_WRAP_T,b.CLAMP_TO_EDGE);b.texParameteri(b.TEXTURE_CUBE_MAP,b.TEXTURE_MAG_FILTER,
-b.LINEAR);b.texParameteri(b.TEXTURE_CUBE_MAP,b.TEXTURE_MIN_FILTER,b.LINEAR_MIPMAP_LINEAR);for(o=0;o<6;++o)b.texImage2D(b.TEXTURE_CUBE_MAP_POSITIVE_X+o,0,b.RGBA,b.RGBA,b.UNSIGNED_BYTE,d.env_map.image[o]);b.generateMipmap(b.TEXTURE_CUBE_MAP);b.bindTexture(b.TEXTURE_CUBE_MAP,null);d.env_map.image.__cubeMapInitialized=true}b.activeTexture(b.TEXTURE1);b.bindTexture(b.TEXTURE_CUBE_MAP,d.env_map.image.__webGLTextureCube);b.uniform1i(v.uniforms.tCube,1)}b.uniform1i(v.uniforms.enableCubeMap,1)}else b.uniform1i(v.uniforms.enableCubeMap,
-0);b.bindBuffer(b.ARRAY_BUFFER,i.__webGLVertexBuffer);b.vertexAttribPointer(v.position,3,b.FLOAT,false,0,0);b.bindBuffer(b.ARRAY_BUFFER,i.__webGLNormalBuffer);b.vertexAttribPointer(v.normal,3,b.FLOAT,false,0,0);if(R){b.bindBuffer(b.ARRAY_BUFFER,i.__webGLUVBuffer);b.enableVertexAttribArray(v.uv);b.vertexAttribPointer(v.uv,2,b.FLOAT,false,0,0)}else b.disableVertexAttribArray(v.uv);if(j){b.lineWidth(n);b.bindBuffer(b.ELEMENT_ARRAY_BUFFER,i.__webGLLineBuffer);b.drawElements(b.LINES,i.__webGLLineCount,
-b.UNSIGNED_SHORT,0)}else{b.bindBuffer(b.ELEMENT_ARRAY_BUFFER,i.__webGLFaceBuffer);b.drawElements(b.TRIANGLES,i.__webGLFaceCount,b.UNSIGNED_SHORT,0)}};this.renderPass=function(f,d,i,o,k){var j,n,t,R,s;t=0;for(R=d.material.length;t<R;t++){j=d.material[t];if(j instanceof THREE.MeshFaceMaterial){j=0;for(n=i.material.length;j<n;j++)if((s=i.material[j])&&s.blending==o&&s.opacity<1==k){this.setBlending(s.blending);this.renderBuffer(f,s,i)}}else if((s=j)&&s.blending==o&&s.opacity<1==k){this.setBlending(s.blending);
-this.renderBuffer(f,s,i)}}};this.render=function(f,d){var i,o;this.initWebGLObjects(f);this.autoClear&&this.clear();d.autoUpdateMatrix&&d.updateMatrix();this.loadCamera(l,d);this.setupLights(l,f);i=0;for(o=f.__webGLObjects.length;i<o;i++){webGLObject=f.__webGLObjects[i];if(webGLObject.__object.visible){this.setupMatrices(webGLObject.__object,d);this.loadMatrices(l);this.renderPass(d,webGLObject.__object,webGLObject,THREE.NormalBlending,false)}}i=0;for(o=f.__webGLObjects.length;i<o;i++){webGLObject=
-f.__webGLObjects[i];if(webGLObject.__object.visible){this.setupMatrices(webGLObject.__object,d);this.loadMatrices(l);this.renderPass(d,webGLObject.__object,webGLObject,THREE.AdditiveBlending,false);this.renderPass(d,webGLObject.__object,webGLObject,THREE.SubtractiveBlending,false);this.renderPass(d,webGLObject.__object,webGLObject,THREE.AdditiveBlending,true);this.renderPass(d,webGLObject.__object,webGLObject,THREE.SubtractiveBlending,true);this.renderPass(d,webGLObject.__object,webGLObject,THREE.NormalBlending,
-true)}}};this.initWebGLObjects=function(f){var d,i,o,k,j;if(!f.__webGLObjects)f.__webGLObjects=[];d=0;for(i=f.objects.length;d<i;d++){o=f.objects[d];if(o instanceof THREE.Mesh)for(k in o.materialFaceGroup){j=o.materialFaceGroup[k];if(!j.__webGLVertexBuffer){this.createBuffers(o,k);j.__object=o;f.__webGLObjects.push(j)}}}};this.removeObject=function(f,d){var i,o;for(i=f.__webGLObjects.length-1;i>=0;i--){o=f.__webGLObjects[i].__object;d==o&&f.__webGLObjects.splice(i,1)}};this.setupMatrices=function(f,
-d){f.autoUpdateMatrix&&f.updateMatrix();E.multiply(d.matrix,f.matrix);w.set(d.matrix.flatten());F.set(E.flatten());Q.set(d.projectionMatrix.flatten());I=THREE.Matrix4.makeInvert3x3(E).transpose();O.set(I.m);P.set(f.matrix.flatten())};this.loadMatrices=function(f){b.uniformMatrix4fv(f.uniforms.viewMatrix,false,w);b.uniformMatrix4fv(f.uniforms.modelViewMatrix,false,F);b.uniformMatrix4fv(f.uniforms.projectionMatrix,false,Q);b.uniformMatrix3fv(f.uniforms.normalMatrix,false,O);b.uniformMatrix4fv(f.uniforms.objectMatrix,
-false,P)};this.loadCamera=function(f,d){b.uniform3f(f.uniforms.cameraPosition,d.position.x,d.position.y,d.position.z)};this.setBlending=function(f){switch(f){case THREE.AdditiveBlending:b.blendEquation(b.FUNC_ADD);b.blendFunc(b.ONE,b.ONE);break;case THREE.SubtractiveBlending:b.blendFunc(b.DST_COLOR,b.ZERO);break;default:b.blendEquation(b.FUNC_ADD);b.blendFunc(b.ONE,b.ONE_MINUS_SRC_ALPHA)}};this.setFaceCulling=function(f,d){if(f){!d||d=="ccw"?b.frontFace(b.CCW):b.frontFace(b.CW);if(f=="back")b.cullFace(b.BACK);
-else f=="front"?b.cullFace(b.FRONT):b.cullFace(b.FRONT_AND_BACK);b.enable(b.CULL_FACE)}else b.disable(b.CULL_FACE)}};
-THREE.RenderableFace3=function(){this.z=null;this.v1=new THREE.Vertex;this.v2=new THREE.Vertex;this.v3=new THREE.Vertex;this.centroidWorld=new THREE.Vector3;this.centroidScreen=new THREE.Vector3;this.normalWorld=new THREE.Vector3;this.vertexNormalsWorld=[new THREE.Vector3,new THREE.Vector3,new THREE.Vector3];this.faceMaterial=this.meshMaterial=null;this.overdraw=false;this.uvs=[null,null,null]};
-THREE.RenderableParticle=function(){this.rotation=this.z=this.y=this.x=null;this.scale=new THREE.Vector2;this.material=null};THREE.RenderableLine=function(){this.z=null;this.v1=new THREE.Vertex;this.v2=new THREE.Vertex;this.material=null};
+// ThreeDebug.js r30 - http://github.com/mrdoob/three.js
+var THREE=THREE||{};THREE.Color=function(a){this.autoUpdate=true;this.setHex(a)};
+THREE.Color.prototype={setRGB:function(a,c,d){this.r=a;this.g=c;this.b=d;if(this.autoUpdate){this.updateHex();this.updateStyleString()}},setHex:function(a){this.hex=~~a&16777215;if(this.autoUpdate){this.updateRGBA();this.updateStyleString()}},updateHex:function(){this.hex=~~(this.r*255)<<16^~~(this.g*255)<<8^~~(this.b*255)},updateRGBA:function(){this.r=(this.hex>>16&255)/255;this.g=(this.hex>>8&255)/255;this.b=(this.hex&255)/255},updateStyleString:function(){this.__styleString="rgb("+~~(this.r*255)+
+","+~~(this.g*255)+","+~~(this.b*255)+")"},toString:function(){return"THREE.Color ( r: "+this.r+", g: "+this.g+", b: "+this.b+", hex: "+this.hex+" )"}};THREE.Vector2=function(a,c){this.x=a||0;this.y=c||0};
+THREE.Vector2.prototype={set:function(a,c){this.x=a;this.y=c;return this},copy:function(a){this.x=a.x;this.y=a.y;return this},addSelf:function(a){this.x+=a.x;this.y+=a.y;return this},add:function(a,c){this.x=a.x+c.x;this.y=a.y+c.y;return this},subSelf:function(a){this.x-=a.x;this.y-=a.y;return this},sub:function(a,c){this.x=a.x-c.x;this.y=a.y-c.y;return this},multiplyScalar:function(a){this.x*=a;this.y*=a;return this},unit:function(){this.multiplyScalar(1/this.length());return this},length:function(){return Math.sqrt(this.x*
+this.x+this.y*this.y)},lengthSq:function(){return this.x*this.x+this.y*this.y},negate:function(){this.x=-this.x;this.y=-this.y;return this},clone:function(){return new THREE.Vector2(this.x,this.y)},toString:function(){return"THREE.Vector2 ("+this.x+", "+this.y+")"}};THREE.Vector3=function(a,c,d){this.x=a||0;this.y=c||0;this.z=d||0};
+THREE.Vector3.prototype={set:function(a,c,d){this.x=a;this.y=c;this.z=d;return this},copy:function(a){this.x=a.x;this.y=a.y;this.z=a.z;return this},add:function(a,c){this.x=a.x+c.x;this.y=a.y+c.y;this.z=a.z+c.z;return this},addSelf:function(a){this.x+=a.x;this.y+=a.y;this.z+=a.z;return this},addScalar:function(a){this.x+=a;this.y+=a;this.z+=a;return this},sub:function(a,c){this.x=a.x-c.x;this.y=a.y-c.y;this.z=a.z-c.z;return this},subSelf:function(a){this.x-=a.x;this.y-=a.y;this.z-=a.z;return this},
+cross:function(a,c){this.x=a.y*c.z-a.z*c.y;this.y=a.z*c.x-a.x*c.z;this.z=a.x*c.y-a.y*c.x;return this},crossSelf:function(a){var c=this.x,d=this.y,g=this.z;this.x=d*a.z-g*a.y;this.y=g*a.x-c*a.z;this.z=c*a.y-d*a.x;return this},multiplySelf:function(a){this.x*=a.x;this.y*=a.y;this.z*=a.z;return this},multiplyScalar:function(a){this.x*=a;this.y*=a;this.z*=a;return this},divideScalar:function(a){this.x/=a;this.y/=a;this.z/=a;return this},dot:function(a){return this.x*a.x+this.y*a.y+this.z*a.z},distanceTo:function(a){var c=
+this.x-a.x,d=this.y-a.y;a=this.z-a.z;return Math.sqrt(c*c+d*d+a*a)},distanceToSquared:function(a){var c=this.x-a.x,d=this.y-a.y;a=this.z-a.z;return c*c+d*d+a*a},length:function(){return Math.sqrt(this.x*this.x+this.y*this.y+this.z*this.z)},lengthSq:function(){return this.x*this.x+this.y*this.y+this.z*this.z},negate:function(){this.x=-this.x;this.y=-this.y;this.z=-this.z;return this},normalize:function(){var a=Math.sqrt(this.x*this.x+this.y*this.y+this.z*this.z);a>0?this.multiplyScalar(1/a):this.set(0,
+0,0);return this},setLength:function(a){return this.normalize().multiplyScalar(a)},isZero:function(){return Math.abs(this.x)<1.0E-4&&Math.abs(this.y)<1.0E-4&&Math.abs(this.z)<1.0E-4},clone:function(){return new THREE.Vector3(this.x,this.y,this.z)},toString:function(){return"THREE.Vector3 ( "+this.x+", "+this.y+", "+this.z+" )"}};THREE.Vector4=function(a,c,d,g){this.x=a||0;this.y=c||0;this.z=d||0;this.w=g||1};
+THREE.Vector4.prototype={set:function(a,c,d,g){this.x=a;this.y=c;this.z=d;this.w=g;return this},copy:function(a){this.x=a.x;this.y=a.y;this.z=a.z;this.w=a.w||1;return this},add:function(a,c){this.x=a.x+c.x;this.y=a.y+c.y;this.z=a.z+c.z;this.w=a.w+c.w;return this},addSelf:function(a){this.x+=a.x;this.y+=a.y;this.z+=a.z;this.w+=a.w;return this},sub:function(a,c){this.x=a.x-c.x;this.y=a.y-c.y;this.z=a.z-c.z;this.w=a.w-c.w;return this},subSelf:function(a){this.x-=a.x;this.y-=a.y;this.z-=a.z;this.w-=a.w;
+return this},multiplyScalar:function(a){this.x*=a;this.y*=a;this.z*=a;this.w*=a;return this},divideScalar:function(a){this.x/=a;this.y/=a;this.z/=a;this.w/=a;return this},lerpSelf:function(a,c){this.x+=(a.x-this.x)*c;this.y+=(a.y-this.y)*c;this.z+=(a.z-this.z)*c;this.w+=(a.w-this.w)*c},clone:function(){return new THREE.Vector4(this.x,this.y,this.z,this.w)},toString:function(){return"THREE.Vector4 ("+this.x+", "+this.y+", "+this.z+", "+this.w+")"}};
+THREE.Ray=function(a,c){this.origin=a||new THREE.Vector3;this.direction=c||new THREE.Vector3};
+THREE.Ray.prototype={intersectScene:function(a){var c,d,g=a.objects,h=[];a=0;for(c=g.length;a<c;a++){d=g[a];if(d instanceof THREE.Mesh)h=h.concat(this.intersectObject(d))}h.sort(function(q,m){return q.distance-m.distance});return h},intersectObject:function(a){function c(M,r,f,e){e=e.clone().subSelf(r);f=f.clone().subSelf(r);var i=M.clone().subSelf(r);M=e.dot(e);r=e.dot(f);e=e.dot(i);var o=f.dot(f);f=f.dot(i);i=1/(M*o-r*r);o=(o*e-r*f)*i;M=(M*f-r*e)*i;return o>0&&M>0&&o+M<1}var d,g,h,q,m,b,l,y,C,E,
+w,D=a.geometry,O=D.vertices,J=[];d=0;for(g=D.faces.length;d<g;d++){h=D.faces[d];E=this.origin.clone();w=this.direction.clone();q=a.matrix.transformVector3(O[h.a].position.clone());m=a.matrix.transformVector3(O[h.b].position.clone());b=a.matrix.transformVector3(O[h.c].position.clone());l=h instanceof THREE.Face4?a.matrix.transformVector3(O[h.d].position.clone()):null;y=a.rotationMatrix.transformVector3(h.normal.clone());C=w.dot(y);if(C<0){y=y.dot((new THREE.Vector3).sub(q,E))/C;E=E.addSelf(w.multiplyScalar(y));
+if(h instanceof THREE.Face3){if(c(E,q,m,b)){h={distance:this.origin.distanceTo(E),point:E,face:h,object:a};J.push(h)}}else if(h instanceof THREE.Face4)if(c(E,q,m,l)||c(E,m,b,l)){h={distance:this.origin.distanceTo(E),point:E,face:h,object:a};J.push(h)}}}return J}};
+THREE.Rectangle=function(){function a(){q=g-c;m=h-d}var c,d,g,h,q,m,b=true;this.getX=function(){return c};this.getY=function(){return d};this.getWidth=function(){return q};this.getHeight=function(){return m};this.getLeft=function(){return c};this.getTop=function(){return d};this.getRight=function(){return g};this.getBottom=function(){return h};this.set=function(l,y,C,E){b=false;c=l;d=y;g=C;h=E;a()};this.addPoint=function(l,y){if(b){b=false;c=l;d=y;g=l;h=y}else{c=Math.min(c,l);d=Math.min(d,y);g=Math.max(g,
+l);h=Math.max(h,y)}a()};this.addRectangle=function(l){if(b){b=false;c=l.getLeft();d=l.getTop();g=l.getRight();h=l.getBottom()}else{c=Math.min(c,l.getLeft());d=Math.min(d,l.getTop());g=Math.max(g,l.getRight());h=Math.max(h,l.getBottom())}a()};this.inflate=function(l){c-=l;d-=l;g+=l;h+=l;a()};this.minSelf=function(l){c=Math.max(c,l.getLeft());d=Math.max(d,l.getTop());g=Math.min(g,l.getRight());h=Math.min(h,l.getBottom());a()};this.instersects=function(l){return Math.min(g,l.getRight())-Math.max(c,l.getLeft())>=
+0&&Math.min(h,l.getBottom())-Math.max(d,l.getTop())>=0};this.empty=function(){b=true;h=g=d=c=0;a()};this.isEmpty=function(){return b};this.toString=function(){return"THREE.Rectangle ( left: "+c+", right: "+g+", top: "+d+", bottom: "+h+", width: "+q+", height: "+m+" )"}};THREE.Matrix3=function(){this.m=[]};THREE.Matrix3.prototype={transpose:function(){var a;a=this.m[1];this.m[1]=this.m[3];this.m[3]=a;a=this.m[2];this.m[2]=this.m[6];this.m[6]=a;a=this.m[5];this.m[5]=this.m[7];this.m[7]=a;return this}};
+THREE.Matrix4=function(){};
+THREE.Matrix4.prototype={n11:1,n12:0,n13:0,n14:0,n21:0,n22:1,n23:0,n24:0,n31:0,n32:0,n33:1,n34:0,n41:0,n42:0,n43:0,n44:1,identity:function(){this.n11=1;this.n21=this.n14=this.n13=this.n12=0;this.n22=1;this.n32=this.n31=this.n24=this.n23=0;this.n33=1;this.n43=this.n42=this.n41=this.n34=0;this.n44=1},copy:function(a){this.n11=a.n11;this.n12=a.n12;this.n13=a.n13;this.n14=a.n14;this.n21=a.n21;this.n22=a.n22;this.n23=a.n23;this.n24=a.n24;this.n31=a.n31;this.n32=a.n32;this.n33=a.n33;this.n34=a.n34;this.n41=
+a.n41;this.n42=a.n42;this.n43=a.n43;this.n44=a.n44},lookAt:function(a,c,d){var g=new THREE.Vector3,h=new THREE.Vector3,q=new THREE.Vector3;q.sub(a,c).normalize();g.cross(d,q).normalize();h.cross(q,g).normalize();this.n11=g.x;this.n12=g.y;this.n13=g.z;this.n14=-g.dot(a);this.n21=h.x;this.n22=h.y;this.n23=h.z;this.n24=-h.dot(a);this.n31=q.x;this.n32=q.y;this.n33=q.z;this.n34=-q.dot(a);this.n43=this.n42=this.n41=0;this.n44=1},transformVector3:function(a){var c=a.x,d=a.y,g=a.z;a.x=this.n11*c+this.n12*
+d+this.n13*g+this.n14;a.y=this.n21*c+this.n22*d+this.n23*g+this.n24;a.z=this.n31*c+this.n32*d+this.n33*g+this.n34;a.multiplyScalar(1/(this.n41*c+this.n42*d+this.n43*g+this.n44));return a},transformVector4:function(a){var c=a.x,d=a.y,g=a.z,h=a.w;a.x=this.n11*c+this.n12*d+this.n13*g+this.n14*h;a.y=this.n21*c+this.n22*d+this.n23*g+this.n24*h;a.z=this.n31*c+this.n32*d+this.n33*g+this.n34*h;a.w=this.n41*c+this.n42*d+this.n43*g+this.n44*h;return a},crossVector:function(a){var c=new THREE.Vector4;c.x=this.n11*
+a.x+this.n12*a.y+this.n13*a.z+this.n14*a.w;c.y=this.n21*a.x+this.n22*a.y+this.n23*a.z+this.n24*a.w;c.z=this.n31*a.x+this.n32*a.y+this.n33*a.z+this.n34*a.w;c.w=a.w?this.n41*a.x+this.n42*a.y+this.n43*a.z+this.n44*a.w:1;return c},multiply:function(a,c){var d=a.n11,g=a.n12,h=a.n13,q=a.n14,m=a.n21,b=a.n22,l=a.n23,y=a.n24,C=a.n31,E=a.n32,w=a.n33,D=a.n34,O=a.n41,J=a.n42,M=a.n43,r=a.n44,f=c.n11,e=c.n12,i=c.n13,o=c.n14,j=c.n21,k=c.n22,n=c.n23,t=c.n24,G=c.n31,s=c.n32,S=c.n33,x=c.n34,u=c.n41,U=c.n42,R=c.n43,
+z=c.n44;this.n11=d*f+g*j+h*G+q*u;this.n12=d*e+g*k+h*s+q*U;this.n13=d*i+g*n+h*S+q*R;this.n14=d*o+g*t+h*x+q*z;this.n21=m*f+b*j+l*G+y*u;this.n22=m*e+b*k+l*s+y*U;this.n23=m*i+b*n+l*S+y*R;this.n24=m*o+b*t+l*x+y*z;this.n31=C*f+E*j+w*G+D*u;this.n32=C*e+E*k+w*s+D*U;this.n33=C*i+E*n+w*S+D*R;this.n34=C*o+E*t+w*x+D*z;this.n41=O*f+J*j+M*G+r*u;this.n42=O*e+J*k+M*s+r*U;this.n43=O*i+J*n+M*S+r*R;this.n44=O*o+J*t+M*x+r*z},multiplySelf:function(a){var c=this.n11,d=this.n12,g=this.n13,h=this.n14,q=this.n21,m=this.n22,
+b=this.n23,l=this.n24,y=this.n31,C=this.n32,E=this.n33,w=this.n34,D=this.n41,O=this.n42,J=this.n43,M=this.n44;this.n11=c*a.n11+d*a.n21+g*a.n31+h*a.n41;this.n12=c*a.n12+d*a.n22+g*a.n32+h*a.n42;this.n13=c*a.n13+d*a.n23+g*a.n33+h*a.n43;this.n14=c*a.n14+d*a.n24+g*a.n34+h*a.n44;this.n21=q*a.n11+m*a.n21+b*a.n31+l*a.n41;this.n22=q*a.n12+m*a.n22+b*a.n32+l*a.n42;this.n23=q*a.n13+m*a.n23+b*a.n33+l*a.n43;this.n24=q*a.n14+m*a.n24+b*a.n34+l*a.n44;this.n31=y*a.n11+C*a.n21+E*a.n31+w*a.n41;this.n32=y*a.n12+C*a.n22+
+E*a.n32+w*a.n42;this.n33=y*a.n13+C*a.n23+E*a.n33+w*a.n43;this.n34=y*a.n14+C*a.n24+E*a.n34+w*a.n44;this.n41=D*a.n11+O*a.n21+J*a.n31+M*a.n41;this.n42=D*a.n12+O*a.n22+J*a.n32+M*a.n42;this.n43=D*a.n13+O*a.n23+J*a.n33+M*a.n43;this.n44=D*a.n14+O*a.n24+J*a.n34+M*a.n44},multiplyScalar:function(a){this.n11*=a;this.n12*=a;this.n13*=a;this.n14*=a;this.n21*=a;this.n22*=a;this.n23*=a;this.n24*=a;this.n31*=a;this.n32*=a;this.n33*=a;this.n34*=a;this.n41*=a;this.n42*=a;this.n43*=a;this.n44*=a},determinant:function(){return this.n14*
+this.n23*this.n32*this.n41-this.n13*this.n24*this.n32*this.n41-this.n14*this.n22*this.n33*this.n41+this.n12*this.n24*this.n33*this.n41+this.n13*this.n22*this.n34*this.n41-this.n12*this.n23*this.n34*this.n41-this.n14*this.n23*this.n31*this.n42+this.n13*this.n24*this.n31*this.n42+this.n14*this.n21*this.n33*this.n42-this.n11*this.n24*this.n33*this.n42-this.n13*this.n21*this.n34*this.n42+this.n11*this.n23*this.n34*this.n42+this.n14*this.n22*this.n31*this.n43-this.n12*this.n24*this.n31*this.n43-this.n14*
+this.n21*this.n32*this.n43+this.n11*this.n24*this.n32*this.n43+this.n12*this.n21*this.n34*this.n43-this.n11*this.n22*this.n34*this.n43-this.n13*this.n22*this.n31*this.n44+this.n12*this.n23*this.n31*this.n44+this.n13*this.n21*this.n32*this.n44-this.n11*this.n23*this.n32*this.n44-this.n12*this.n21*this.n33*this.n44+this.n11*this.n22*this.n33*this.n44},transpose:function(){function a(c,d,g){var h=c[d];c[d]=c[g];c[g]=h}a(this,"n21","n12");a(this,"n31","n13");a(this,"n32","n23");a(this,"n41","n14");a(this,
+"n42","n24");a(this,"n43","n34");return this},clone:function(){var a=new THREE.Matrix4;a.n11=this.n11;a.n12=this.n12;a.n13=this.n13;a.n14=this.n14;a.n21=this.n21;a.n22=this.n22;a.n23=this.n23;a.n24=this.n24;a.n31=this.n31;a.n32=this.n32;a.n33=this.n33;a.n34=this.n34;a.n41=this.n41;a.n42=this.n42;a.n43=this.n43;a.n44=this.n44;return a},flatten:function(){return[this.n11,this.n21,this.n31,this.n41,this.n12,this.n22,this.n32,this.n42,this.n13,this.n23,this.n33,this.n43,this.n14,this.n24,this.n34,this.n44]},
+toString:function(){return"| "+this.n11+" "+this.n12+" "+this.n13+" "+this.n14+" |\n| "+this.n21+" "+this.n22+" "+this.n23+" "+this.n24+" |\n| "+this.n31+" "+this.n32+" "+this.n33+" "+this.n34+" |\n| "+this.n41+" "+this.n42+" "+this.n43+" "+this.n44+" |"}};THREE.Matrix4.translationMatrix=function(a,c,d){var g=new THREE.Matrix4;g.n14=a;g.n24=c;g.n34=d;return g};THREE.Matrix4.scaleMatrix=function(a,c,d){var g=new THREE.Matrix4;g.n11=a;g.n22=c;g.n33=d;return g};
+THREE.Matrix4.rotationXMatrix=function(a){var c=new THREE.Matrix4;c.n22=c.n33=Math.cos(a);c.n32=Math.sin(a);c.n23=-c.n32;return c};THREE.Matrix4.rotationYMatrix=function(a){var c=new THREE.Matrix4;c.n11=c.n33=Math.cos(a);c.n13=Math.sin(a);c.n31=-c.n13;return c};THREE.Matrix4.rotationZMatrix=function(a){var c=new THREE.Matrix4;c.n11=c.n22=Math.cos(a);c.n21=Math.sin(a);c.n12=-c.n21;return c};
+THREE.Matrix4.rotationAxisAngleMatrix=function(a,c){var d=new THREE.Matrix4,g=Math.cos(c),h=Math.sin(c),q=1-g,m=a.x,b=a.y,l=a.z;d.n11=q*m*m+g;d.n12=q*m*b-h*l;d.n13=q*m*l+h*b;d.n21=q*m*b+h*l;d.n22=q*b*b+g;d.n23=q*b*l-h*m;d.n31=q*m*l-h*b;d.n32=q*b*l+h*m;d.n33=q*l*l+g;return d};
+THREE.Matrix4.makeInvert=function(a){var c=new THREE.Matrix4;c.n11=a.n23*a.n34*a.n42-a.n24*a.n33*a.n42+a.n24*a.n32*a.n43-a.n22*a.n34*a.n43-a.n23*a.n32*a.n44+a.n22*a.n33*a.n44;c.n12=a.n14*a.n33*a.n42-a.n13*a.n34*a.n42-a.n14*a.n32*a.n43+a.n12*a.n34*a.n43+a.n13*a.n32*a.n44-a.n12*a.n33*a.n44;c.n13=a.n13*a.n24*a.n42-a.n14*a.n23*a.n42+a.n14*a.n22*a.n43-a.n12*a.n24*a.n43-a.n13*a.n22*a.n44+a.n12*a.n23*a.n44;c.n14=a.n14*a.n23*a.n32-a.n13*a.n24*a.n32-a.n14*a.n22*a.n33+a.n12*a.n24*a.n33+a.n13*a.n22*a.n34-a.n12*
+a.n23*a.n34;c.n21=a.n24*a.n33*a.n41-a.n23*a.n34*a.n41-a.n24*a.n31*a.n43+a.n21*a.n34*a.n43+a.n23*a.n31*a.n44-a.n21*a.n33*a.n44;c.n22=a.n13*a.n34*a.n41-a.n14*a.n33*a.n41+a.n14*a.n31*a.n43-a.n11*a.n34*a.n43-a.n13*a.n31*a.n44+a.n11*a.n33*a.n44;c.n23=a.n14*a.n23*a.n41-a.n13*a.n24*a.n41-a.n14*a.n21*a.n43+a.n11*a.n24*a.n43+a.n13*a.n21*a.n44-a.n11*a.n23*a.n44;c.n24=a.n13*a.n24*a.n31-a.n14*a.n23*a.n31+a.n14*a.n21*a.n33-a.n11*a.n24*a.n33-a.n13*a.n21*a.n34+a.n11*a.n23*a.n34;c.n31=a.n22*a.n34*a.n41-a.n24*a.n32*
+a.n41+a.n24*a.n31*a.n42-a.n21*a.n34*a.n42-a.n22*a.n31*a.n44+a.n21*a.n32*a.n44;c.n32=a.n14*a.n32*a.n41-a.n12*a.n34*a.n41-a.n14*a.n31*a.n42+a.n11*a.n34*a.n42+a.n12*a.n31*a.n44-a.n11*a.n32*a.n44;c.n33=a.n13*a.n24*a.n41-a.n14*a.n22*a.n41+a.n14*a.n21*a.n42-a.n11*a.n24*a.n42-a.n12*a.n21*a.n44+a.n11*a.n22*a.n44;c.n34=a.n14*a.n22*a.n31-a.n12*a.n24*a.n31-a.n14*a.n21*a.n32+a.n11*a.n24*a.n32+a.n12*a.n21*a.n34-a.n11*a.n22*a.n34;c.n41=a.n23*a.n32*a.n41-a.n22*a.n33*a.n41-a.n23*a.n31*a.n42+a.n21*a.n33*a.n42+a.n22*
+a.n31*a.n43-a.n21*a.n32*a.n43;c.n42=a.n12*a.n33*a.n41-a.n13*a.n32*a.n41+a.n13*a.n31*a.n42-a.n11*a.n33*a.n42-a.n12*a.n31*a.n43+a.n11*a.n32*a.n43;c.n43=a.n13*a.n22*a.n41-a.n12*a.n23*a.n41-a.n13*a.n21*a.n42+a.n11*a.n23*a.n42+a.n12*a.n21*a.n43-a.n11*a.n22*a.n43;c.n44=a.n12*a.n23*a.n31-a.n13*a.n22*a.n31+a.n13*a.n21*a.n32-a.n11*a.n23*a.n32-a.n12*a.n21*a.n33+a.n11*a.n22*a.n33;c.multiplyScalar(1/a.determinant());return c};
+THREE.Matrix4.makeInvert3x3=function(a){var c=a.flatten();a=new THREE.Matrix3;var d=c[10]*c[5]-c[6]*c[9],g=-c[10]*c[1]+c[2]*c[9],h=c[6]*c[1]-c[2]*c[5],q=-c[10]*c[4]+c[6]*c[8],m=c[10]*c[0]-c[2]*c[8],b=-c[6]*c[0]+c[2]*c[4],l=c[9]*c[4]-c[5]*c[8],y=-c[9]*c[0]+c[1]*c[8],C=c[5]*c[0]-c[1]*c[4];c=c[0]*d+c[1]*q+c[2]*l;if(c==0)throw"matrix not invertible";c=1/c;a.m[0]=c*d;a.m[1]=c*g;a.m[2]=c*h;a.m[3]=c*q;a.m[4]=c*m;a.m[5]=c*b;a.m[6]=c*l;a.m[7]=c*y;a.m[8]=c*C;return a};
+THREE.Matrix4.makeFrustum=function(a,c,d,g,h,q){var m,b,l;m=new THREE.Matrix4;b=2*h/(c-a);l=2*h/(g-d);a=(c+a)/(c-a);d=(g+d)/(g-d);g=-(q+h)/(q-h);h=-2*q*h/(q-h);m.n11=b;m.n12=0;m.n13=a;m.n14=0;m.n21=0;m.n22=l;m.n23=d;m.n24=0;m.n31=0;m.n32=0;m.n33=g;m.n34=h;m.n41=0;m.n42=0;m.n43=-1;m.n44=0;return m};THREE.Matrix4.makePerspective=function(a,c,d,g){var h;a=d*Math.tan(a*Math.PI/360);h=-a;return THREE.Matrix4.makeFrustum(h*c,a*c,h,a,d,g)};
+THREE.Matrix4.makeOrtho=function(a,c,d,g,h,q){var m,b,l,y;m=new THREE.Matrix4;b=c-a;l=d-g;y=q-h;a=(c+a)/b;d=(d+g)/l;h=(q+h)/y;m.n11=2/b;m.n12=0;m.n13=0;m.n14=-a;m.n21=0;m.n22=2/l;m.n23=0;m.n24=-d;m.n31=0;m.n32=0;m.n33=-2/y;m.n34=-h;m.n41=0;m.n42=0;m.n43=0;m.n44=1;return m};
+THREE.Vertex=function(a,c){this.position=a||new THREE.Vector3;this.positionWorld=new THREE.Vector3;this.positionScreen=new THREE.Vector4;this.normal=c||new THREE.Vector3;this.normalWorld=new THREE.Vector3;this.normalScreen=new THREE.Vector3;this.__visible=true};THREE.Vertex.prototype={toString:function(){return"THREE.Vertex ( position: "+this.position+", normal: "+this.normal+" )"}};
+THREE.Face3=function(a,c,d,g,h){this.a=a;this.b=c;this.c=d;this.centroid=new THREE.Vector3;this.normal=g instanceof THREE.Vector3?g:new THREE.Vector3;this.vertexNormals=g instanceof Array?g:[];this.material=h instanceof Array?h:[h]};THREE.Face3.prototype={toString:function(){return"THREE.Face3 ( "+this.a+", "+this.b+", "+this.c+" )"}};
+THREE.Face4=function(a,c,d,g,h,q){this.a=a;this.b=c;this.c=d;this.d=g;this.centroid=new THREE.Vector3;this.normal=h instanceof THREE.Vector3?h:new THREE.Vector3;this.vertexNormals=h instanceof Array?h:[];this.material=q instanceof Array?q:[q]};THREE.Face4.prototype={toString:function(){return"THREE.Face4 ( "+this.a+", "+this.b+", "+this.c+" "+this.d+" )"}};THREE.UV=function(a,c){this.u=a||0;this.v=c||0};
+THREE.UV.prototype={copy:function(a){this.u=a.u;this.v=a.v},toString:function(){return"THREE.UV ("+this.u+", "+this.v+")"}};THREE.Geometry=function(){this.vertices=[];this.faces=[];this.uvs=[]};
+THREE.Geometry.prototype={computeCentroids:function(){var a,c,d;a=0;for(c=this.faces.length;a<c;a++){d=this.faces[a];d.centroid.set(0,0,0);d.centroid.addSelf(this.vertices[d.a].position);d.centroid.addSelf(this.vertices[d.b].position);d.centroid.addSelf(this.vertices[d.c].position);if(d instanceof THREE.Face3)d.centroid.divideScalar(3);else if(d instanceof THREE.Face4){d.centroid.addSelf(this.vertices[d.d].position);d.centroid.divideScalar(4)}}},computeNormals:function(a){var c,d,g,h,q,m,b=new THREE.Vector3,
+l=new THREE.Vector3;g=0;for(h=this.vertices.length;g<h;g++){q=this.vertices[g];q.normal.set(0,0,0)}g=0;for(h=this.faces.length;g<h;g++){q=this.faces[g];if(a&&q.vertexNormals.length){b.set(0,0,0);c=0;for(d=q.normal.length;c<d;c++)b.addSelf(q.vertexNormals[c]);b.divideScalar(3)}else{c=this.vertices[q.a];d=this.vertices[q.b];m=this.vertices[q.c];b.sub(m.position,d.position);l.sub(c.position,d.position);b.crossSelf(l)}b.isZero()||b.normalize();q.normal.copy(b)}},computeBoundingBox:function(){if(this.vertices.length>
+0){this.bbox={x:[this.vertices[0].position.x,this.vertices[0].position.x],y:[this.vertices[0].position.y,this.vertices[0].position.y],z:[this.vertices[0].position.z,this.vertices[0].position.z]};for(var a=1,c=this.vertices.length;a<c;a++){vertex=this.vertices[a];if(vertex.position.x<this.bbox.x[0])this.bbox.x[0]=vertex.position.x;else if(vertex.position.x>this.bbox.x[1])this.bbox.x[1]=vertex.position.x;if(vertex.position.y<this.bbox.y[0])this.bbox.y[0]=vertex.position.y;else if(vertex.position.y>
+this.bbox.y[1])this.bbox.y[1]=vertex.position.y;if(vertex.position.z<this.bbox.z[0])this.bbox.z[0]=vertex.position.z;else if(vertex.position.z>this.bbox.z[1])this.bbox.z[1]=vertex.position.z}}},toString:function(){return"THREE.Geometry ( vertices: "+this.vertices+", faces: "+this.faces+" )"}};
+THREE.Camera=function(a,c,d,g){this.position=new THREE.Vector3(0,0,0);this.target={position:new THREE.Vector3(0,0,0)};this.up=new THREE.Vector3(0,1,0);this.matrix=new THREE.Matrix4;this.projectionMatrix=THREE.Matrix4.makePerspective(a,c,d,g);this.autoUpdateMatrix=true;this.updateMatrix=function(){this.matrix.lookAt(this.position,this.target.position,this.up)};this.toString=function(){return"THREE.Camera ( "+this.position+", "+this.target.position+" )"}};THREE.Light=function(a){this.color=new THREE.Color(a)};
+THREE.AmbientLight=function(a){THREE.Light.call(this,a)};THREE.AmbientLight.prototype=new THREE.Light;THREE.AmbientLight.prototype.constructor=THREE.AmbientLight;THREE.DirectionalLight=function(a,c){THREE.Light.call(this,a);this.position=new THREE.Vector3(0,1,0);this.intensity=c||1};THREE.DirectionalLight.prototype=new THREE.Light;THREE.DirectionalLight.prototype.constructor=THREE.DirectionalLight;
+THREE.PointLight=function(a,c){THREE.Light.call(this,a);this.position=new THREE.Vector3;this.intensity=c||1};THREE.DirectionalLight.prototype=new THREE.Light;THREE.DirectionalLight.prototype.constructor=THREE.PointLight;
+THREE.Object3D=function(){this.position=new THREE.Vector3;this.rotation=new THREE.Vector3;this.scale=new THREE.Vector3(1,1,1);this.matrix=new THREE.Matrix4;this.translationMatrix=new THREE.Matrix4;this.rotationMatrix=new THREE.Matrix4;this.scaleMatrix=new THREE.Matrix4;this.screen=new THREE.Vector3;this.autoUpdateMatrix=this.visible=true;this.updateMatrix=function(){this.matrixPosition=THREE.Matrix4.translationMatrix(this.position.x,this.position.y,this.position.z);this.rotationMatrix=THREE.Matrix4.rotationXMatrix(this.rotation.x);
+this.rotationMatrix.multiplySelf(THREE.Matrix4.rotationYMatrix(this.rotation.y));this.rotationMatrix.multiplySelf(THREE.Matrix4.rotationZMatrix(this.rotation.z));this.scaleMatrix=THREE.Matrix4.scaleMatrix(this.scale.x,this.scale.y,this.scale.z);this.matrix.copy(this.matrixPosition);this.matrix.multiplySelf(this.rotationMatrix);this.matrix.multiplySelf(this.scaleMatrix)}};THREE.Particle=function(a){THREE.Object3D.call(this);this.material=a instanceof Array?a:[a];this.autoUpdateMatrix=false};
+THREE.Particle.prototype=new THREE.Object3D;THREE.Particle.prototype.constructor=THREE.Particle;THREE.Line=function(a,c){THREE.Object3D.call(this);this.geometry=a;this.material=c instanceof Array?c:[c]};THREE.Line.prototype=new THREE.Object3D;THREE.Line.prototype.constructor=THREE.Line;
+THREE.Mesh=function(a,c,d){THREE.Object3D.call(this);this.geometry=a;this.material=c instanceof Array?c:[c];this.overdraw=this.doubleSided=this.flipSided=false;this.materialFaceGroup={};this.sortFacesByMaterial();d&&this.normalizeUVs();this.geometry.computeBoundingBox()};THREE.Mesh.prototype=new THREE.Object3D;THREE.Mesh.prototype.constructor=THREE.Mesh;
+THREE.Mesh.prototype.sortFacesByMaterial=function(){function a(C){var E=[];c=0;for(d=C.length;c<d;c++)C[c]==undefined?E.push("undefined"):E.push(C[c].toString());return E.join("_")}var c,d,g,h,q,m,b,l,y={};g=0;for(h=this.geometry.faces.length;g<h;g++){q=this.geometry.faces[g];m=q.material;b=a(m);if(y[b]==undefined)y[b]={hash:b,counter:0};l=y[b].hash+"_"+y[b].counter;if(this.materialFaceGroup[l]==undefined)this.materialFaceGroup[l]={faces:[],material:m,vertices:0};q=q instanceof THREE.Face3?3:4;if(this.materialFaceGroup[l].vertices+
+q>65535){y[b].counter+=1;l=y[b].hash+"_"+y[b].counter;if(this.materialFaceGroup[l]==undefined)this.materialFaceGroup[l]={faces:[],material:m,vertices:0}}this.materialFaceGroup[l].faces.push(g);this.materialFaceGroup[l].vertices+=q}};THREE.Mesh.prototype.normalizeUVs=function(){var a,c,d,g,h;a=0;for(c=this.geometry.uvs.length;a<c;a++){h=this.geometry.uvs[a];d=0;for(g=h.length;d<g;d++){if(h[d].u!=1)h[d].u-=Math.floor(h[d].u);if(h[d].v!=1)h[d].v-=Math.floor(h[d].v)}}};THREE.FlatShading=0;
+THREE.SmoothShading=1;THREE.NormalBlending=0;THREE.AdditiveBlending=1;THREE.SubtractiveBlending=2;
+THREE.LineBasicMaterial=function(a){this.color=new THREE.Color(16711680);this.opacity=1;this.blending=THREE.NormalBlending;this.linewidth=1;this.linejoin=this.linecap="round";if(a){a.color!==undefined&&this.color.setHex(a.color);if(a.opacity!==undefined)this.opacity=a.opacity;if(a.blending!==undefined)this.blending=a.blending;if(a.linewidth!==undefined)this.linewidth=a.linewidth;if(a.linecap!==undefined)this.linecap=a.linecap;if(a.linejoin!==undefined)this.linejoin=a.linejoin}this.toString=function(){return"THREE.LineBasicMaterial (<br/>color: "+
+this.color+"<br/>opacity: "+this.opacity+"<br/>blending: "+this.blending+"<br/>linewidth: "+this.linewidth+"<br/>linecap: "+this.linecap+"<br/>linejoin: "+this.linejoin+"<br/>)"}};
+THREE.MeshBasicMaterial=function(a){this.id=THREE.MeshBasicMaterialCounter.value++;this.color=new THREE.Color(15658734);this.env_map=this.map=null;this.combine=THREE.Multiply;this.reflectivity=1;this.refraction_ratio=0.98;this.opacity=1;this.shading=THREE.SmoothShading;this.blending=THREE.NormalBlending;this.wireframe=false;this.wireframe_linewidth=1;this.wireframe_linejoin=this.wireframe_linecap="round";if(a){a.color!==undefined&&this.color.setHex(a.color);if(a.map!==undefined)this.map=a.map;if(a.env_map!==
+undefined)this.env_map=a.env_map;if(a.combine!==undefined)this.combine=a.combine;if(a.reflectivity!==undefined)this.reflectivity=a.reflectivity;if(a.refraction_ratio!==undefined)this.refraction_ratio=a.refraction_ratio;if(a.opacity!==undefined)this.opacity=a.opacity;if(a.shading!==undefined)this.shading=a.shading;if(a.blending!==undefined)this.blending=a.blending;if(a.wireframe!==undefined)this.wireframe=a.wireframe;if(a.wireframe_linewidth!==undefined)this.wireframe_linewidth=a.wireframe_linewidth;
+if(a.wireframe_linecap!==undefined)this.wireframe_linecap=a.wireframe_linecap;if(a.wireframe_linejoin!==undefined)this.wireframe_linejoin=a.wireframe_linejoin}this.toString=function(){return"THREE.MeshBasicMaterial (<br/>id: "+this.id+"<br/>color: "+this.color+"<br/>map: "+this.map+"<br/>env_map: "+this.env_map+"<br/>combine: "+this.combine+"<br/>reflectivity: "+this.reflectivity+"<br/>refraction_ratio: "+this.refraction_ratio+"<br/>opacity: "+this.opacity+"<br/>blending: "+this.blending+"<br/>wireframe: "+
+this.wireframe+"<br/>wireframe_linewidth: "+this.wireframe_linewidth+"<br/>wireframe_linecap: "+this.wireframe_linecap+"<br/>wireframe_linejoin: "+this.wireframe_linejoin+"<br/>)"}};THREE.MeshBasicMaterialCounter={value:0};
+THREE.MeshLambertMaterial=function(a){this.id=THREE.MeshLambertMaterialCounter.value++;this.color=new THREE.Color(15658734);this.env_map=this.map=null;this.combine=THREE.Multiply;this.reflectivity=1;this.refraction_ratio=0.98;this.opacity=1;this.shading=THREE.SmoothShading;this.blending=THREE.NormalBlending;this.wireframe=false;this.wireframe_linewidth=1;this.wireframe_linejoin=this.wireframe_linecap="round";if(a){a.color!==undefined&&this.color.setHex(a.color);if(a.map!==undefined)this.map=a.map;
+if(a.env_map!==undefined)this.env_map=a.env_map;if(a.combine!==undefined)this.combine=a.combine;if(a.reflectivity!==undefined)this.reflectivity=a.reflectivity;if(a.refraction_ratio!==undefined)this.refraction_ratio=a.refraction_ratio;if(a.opacity!==undefined)this.opacity=a.opacity;if(a.shading!==undefined)this.shading=a.shading;if(a.blending!==undefined)this.blending=a.blending;if(a.wireframe!==undefined)this.wireframe=a.wireframe;if(a.wireframe_linewidth!==undefined)this.wireframe_linewidth=a.wireframe_linewidth;
+if(a.wireframe_linecap!==undefined)this.wireframe_linecap=a.wireframe_linecap;if(a.wireframe_linejoin!==undefined)this.wireframe_linejoin=a.wireframe_linejoin}this.toString=function(){return"THREE.MeshLambertMaterial (<br/>id: "+this.id+"<br/>color: "+this.color+"<br/>map: "+this.map+"<br/>env_map: "+this.env_map+"<br/>combine: "+this.combine+"<br/>reflectivity: "+this.reflectivity+"<br/>refraction_ratio: "+this.refraction_ratio+"<br/>opacity: "+this.opacity+"<br/>shading: "+this.shading+"<br/>blending: "+
+this.blending+"<br/>wireframe: "+this.wireframe+"<br/>wireframe_linewidth: "+this.wireframe_linewidth+"<br/>wireframe_linecap: "+this.wireframe_linecap+"<br/>wireframe_linejoin: "+this.wireframe_linejoin+"<br/> )"}};THREE.MeshLambertMaterialCounter={value:0};
+THREE.MeshPhongMaterial=function(a){this.id=THREE.MeshPhongMaterialCounter.value++;this.color=new THREE.Color(15658734);this.ambient=new THREE.Color(328965);this.specular=new THREE.Color(1118481);this.shininess=30;this.env_map=this.specular_map=this.map=null;this.combine=THREE.Multiply;this.reflectivity=1;this.refraction_ratio=0.98;this.opacity=1;this.shading=THREE.SmoothShading;this.blending=THREE.NormalBlending;this.wireframe=false;this.wireframe_linewidth=1;this.wireframe_linejoin=this.wireframe_linecap=
+"round";if(a){if(a.color!==undefined)this.color=new THREE.Color(a.color);if(a.ambient!==undefined)this.ambient=new THREE.Color(a.ambient);if(a.specular!==undefined)this.specular=new THREE.Color(a.specular);if(a.shininess!==undefined)this.shininess=a.shininess;if(a.map!==undefined)this.map=a.map;if(a.specular_map!==undefined)this.specular_map=a.specular_map;if(a.env_map!==undefined)this.env_map=a.env_map;if(a.combine!==undefined)this.combine=a.combine;if(a.reflectivity!==undefined)this.reflectivity=
+a.reflectivity;if(a.refraction_ratio!==undefined)this.refraction_ratio=a.refraction_ratio;if(a.opacity!==undefined)this.opacity=a.opacity;if(a.shading!==undefined)this.shading=a.shading;if(a.blending!==undefined)this.blending=a.blending;if(a.wireframe!==undefined)this.wireframe=a.wireframe;if(a.wireframe_linewidth!==undefined)this.wireframe_linewidth=a.wireframe_linewidth;if(a.wireframe_linecap!==undefined)this.wireframe_linecap=a.wireframe_linecap;if(a.wireframe_linejoin!==undefined)this.wireframe_linejoin=
+a.wireframe_linejoin}this.toString=function(){return"THREE.MeshPhongMaterial (<br/>id: "+this.id+"<br/>color: "+this.color+"<br/>ambient: "+this.ambient+"<br/>specular: "+this.specular+"<br/>shininess: "+this.shininess+"<br/>map: "+this.map+"<br/>specular_map: "+this.specular_map+"<br/>env_map: "+this.env_map+"<br/>combine: "+this.combine+"<br/>reflectivity: "+this.reflectivity+"<br/>refraction_ratio: "+this.refraction_ratio+"<br/>opacity: "+this.opacity+"<br/>shading: "+this.shading+"<br/>wireframe: "+
+this.wireframe+"<br/>wireframe_linewidth: "+this.wireframe_linewidth+"<br/>wireframe_linecap: "+this.wireframe_linecap+"<br/>wireframe_linejoin: "+this.wireframe_linejoin+"<br/>"+ +")"}};THREE.MeshPhongMaterialCounter={value:0};
+THREE.MeshDepthMaterial=function(a){this.near=1;this.far=1E3;this.opacity=1;this.blending=THREE.NormalBlending;if(a){if(a.near!==undefined)this.near=a.near;if(a.far!==undefined)this.far=a.far;if(a.opacity!==undefined)this.opacity=a.opacity;if(a.blending!==undefined)this.blending=a.blending}this.__2near=2*this.near;this.__farPlusNear=this.far+this.near;this.__farMinusNear=this.far-this.near;this.toString=function(){return"THREE.MeshDepthMaterial"}};
+THREE.MeshNormalMaterial=function(a){this.opacity=1;this.shading=THREE.FlatShading;this.blending=THREE.NormalBlending;if(a){if(a.opacity!==undefined)this.opacity=a.opacity;if(a.shading!==undefined)this.shading=a.shading;if(a.blending!==undefined)this.blending=a.blending}this.toString=function(){return"THREE.MeshNormalMaterial"}};THREE.MeshFaceMaterial=function(){this.toString=function(){return"THREE.MeshFaceMaterial"}};
+THREE.MeshCubeMaterial=function(a){this.id=THREE.MeshCubeMaterial.value++;this.env_map=null;this.blending=THREE.NormalBlending;if(a)if(a.env_map!==undefined)this.env_map=a.env_map;this.toString=function(){return"THREE.MeshCubeMaterial( id: "+this.id+"<br/>env_map: "+this.env_map+" )"}};THREE.MeshCubeMaterialCounter={value:0};
+THREE.MeshShaderMaterial=function(a){this.id=THREE.MeshShaderMaterialCounter.value++;this.vertex_shader=this.fragment_shader="void main() {}";this.uniforms={};this.shading=THREE.SmoothShading;this.blending=THREE.NormalBlending;this.wireframe=false;this.wireframe_linewidth=1;this.wireframe_linejoin=this.wireframe_linecap="round";if(a){if(a.fragment_shader!==undefined)this.fragment_shader=a.fragment_shader;if(a.vertex_shader!==undefined)this.vertex_shader=a.vertex_shader;if(a.uniforms!==undefined)this.uniforms=
+a.uniforms;if(a.shading!==undefined)this.shading=a.shading;if(a.blending!==undefined)this.blending=a.blending;if(a.wireframe!==undefined)this.wireframe=a.wireframe;if(a.wireframe_linewidth!==undefined)this.wireframe_linewidth=a.wireframe_linewidth;if(a.wireframe_linecap!==undefined)this.wireframe_linecap=a.wireframe_linecap;if(a.wireframe_linejoin!==undefined)this.wireframe_linejoin=a.wireframe_linejoin}this.toString=function(){return"THREE.MeshShaderMaterial (<br/>id: "+this.id+"<br/>blending: "+
+this.blending+"<br/>wireframe: "+this.wireframe+"<br/>wireframe_linewidth: "+this.wireframe_linewidth+"<br/>wireframe_linecap: "+this.wireframe_linecap+"<br/>wireframe_linejoin: "+this.wireframe_linejoin+"<br/>)"}};THREE.MeshShaderMaterialCounter={value:0};
+THREE.ParticleBasicMaterial=function(a){this.color=new THREE.Color(16711680);this.map=null;this.opacity=1;this.blending=THREE.NormalBlending;this.offset=new THREE.Vector2;if(a){a.color!==undefined&&this.color.setHex(a.color);if(a.map!==undefined)this.map=a.map;if(a.opacity!==undefined)this.opacity=a.opacity;if(a.blending!==undefined)this.blending=a.blending}this.toString=function(){return"THREE.ParticleBasicMaterial (<br/>color: "+this.color+"<br/>map: "+this.map+"<br/>opacity: "+this.opacity+"<br/>blending: "+
+this.blending+"<br/>)"}};THREE.ParticleCircleMaterial=function(a){this.color=new THREE.Color(16711680);this.opacity=1;this.blending=THREE.NormalBlending;if(a){a.color!==undefined&&this.color.setHex(a.color);if(a.opacity!==undefined)this.opacity=a.opacity;if(a.blending!==undefined)this.blending=a.blending}this.toString=function(){return"THREE.ParticleCircleMaterial (<br/>color: "+this.color+"<br/>opacity: "+this.opacity+"<br/>blending: "+this.blending+"<br/>)"}};
+THREE.ParticleDOMMaterial=function(a){this.domElement=a;this.toString=function(){return"THREE.ParticleDOMMaterial ( domElement: "+this.domElement+" )"}};THREE.Texture=function(a,c,d,g){this.image=a;this.loaded=false;this.mapping=c!==undefined?c:THREE.UVMapping;this.wrap_s=d!==undefined?d:THREE.ClampToEdge;this.wrap_t=g!==undefined?g:THREE.ClampToEdge;this.toString=function(){return"THREE.Texture (<br/>image: "+this.image+"<br/>wrap_s: "+this.wrap_s+"<br/>wrap_t: "+this.wrap_t+"<br/>)"}};
+THREE.UVMapping=0;THREE.ReflectionMapping=1;THREE.RefractionMapping=2;THREE.Multiply=0;THREE.Mix=1;THREE.Repeat=0;THREE.ClampToEdge=1;THREE.MirroredRepeat=2;THREE.TextureCube=function(a,c){this.image=a;this.mapping=c?c:THREE.ReflectionMap;this.toString=function(){return"THREE.TextureCube (<br/>image: "+this.image+"<br/>mapping: "+this.mapping+"<br/>)"}};
+THREE.Scene=function(){this.objects=[];this.lights=[];this.addObject=function(a){this.objects.push(a)};this.removeObject=function(a){a=this.objects.indexOf(a);a!==-1&&this.objects.splice(a,1)};this.addLight=function(a){this.lights.push(a)};this.removeLight=function(a){a=this.lights.indexOf(a);a!==-1&&this.lights.splice(a,1)};this.toString=function(){return"THREE.Scene ( "+this.objects+" )"}};
+THREE.Projector=function(){function a(f,e){var i=0,o=1,j=f.z+f.w,k=e.z+e.w,n=-f.z+f.w,t=-e.z+e.w;if(j>=0&&k>=0&&n>=0&&t>=0)return true;else if(j<0&&k<0||n<0&&t<0)return false;else{if(j<0)i=Math.max(i,j/(j-k));else if(k<0)o=Math.min(o,j/(j-k));if(n<0)i=Math.max(i,n/(n-t));else if(t<0)o=Math.min(o,n/(n-t));if(o<i)return false;else{f.lerpSelf(e,i);e.lerpSelf(f,1-o);return true}}}var c=null,d,g,h,q=[],m,b,l=[],y,C,E=[],w=new THREE.Vector4,D=new THREE.Matrix4,O=new THREE.Matrix4,J=new THREE.Vector4,M=
+new THREE.Vector4,r;this.projectScene=function(f,e){var i,o,j,k,n,t,G,s,S,x,u,U,R,z,p,K,H;c=[];h=b=C=0;e.autoUpdateMatrix&&e.updateMatrix();D.multiply(e.projectionMatrix,e.matrix);G=f.objects;i=0;for(o=G.length;i<o;i++){s=G[i];s.autoUpdateMatrix&&s.updateMatrix();S=s.matrix;x=s.rotationMatrix;u=s.material;U=s.overdraw;if(s instanceof THREE.Mesh){R=s.geometry.vertices;j=0;for(k=R.length;j<k;j++){z=R[j];z.positionWorld.copy(z.position);S.transformVector3(z.positionWorld);p=z.positionScreen;p.copy(z.positionWorld);
+D.transformVector4(p);p.multiplyScalar(1/p.w);z.__visible=p.z>0&&p.z<1}z=s.geometry.faces;j=0;for(k=z.length;j<k;j++){p=z[j];if(p instanceof THREE.Face3){n=R[p.a];t=R[p.b];K=R[p.c];if(n.__visible&&t.__visible&&K.__visible)if(s.doubleSided||s.flipSided!=(K.positionScreen.x-n.positionScreen.x)*(t.positionScreen.y-n.positionScreen.y)-(K.positionScreen.y-n.positionScreen.y)*(t.positionScreen.x-n.positionScreen.x)<0){d=q[h]=q[h]||new THREE.RenderableFace3;d.v1.positionWorld.copy(n.positionWorld);d.v2.positionWorld.copy(t.positionWorld);
+d.v3.positionWorld.copy(K.positionWorld);d.v1.positionScreen.copy(n.positionScreen);d.v2.positionScreen.copy(t.positionScreen);d.v3.positionScreen.copy(K.positionScreen);d.normalWorld.copy(p.normal);x.transformVector3(d.normalWorld);d.centroidWorld.copy(p.centroid);S.transformVector3(d.centroidWorld);d.centroidScreen.copy(d.centroidWorld);D.transformVector3(d.centroidScreen);K=p.vertexNormals;r=d.vertexNormalsWorld;n=0;for(t=K.length;n<t;n++){H=r[n]=r[n]||new THREE.Vector3;H.copy(K[n]);x.transformVector3(H)}d.z=
+d.centroidScreen.z;d.meshMaterial=u;d.faceMaterial=p.material;d.overdraw=U;if(s.geometry.uvs[j]){d.uvs[0]=s.geometry.uvs[j][0];d.uvs[1]=s.geometry.uvs[j][1];d.uvs[2]=s.geometry.uvs[j][2]}c.push(d);h++}}else if(p instanceof THREE.Face4){n=R[p.a];t=R[p.b];K=R[p.c];H=R[p.d];if(n.__visible&&t.__visible&&K.__visible&&H.__visible)if(s.doubleSided||s.flipSided!=((H.positionScreen.x-n.positionScreen.x)*(t.positionScreen.y-n.positionScreen.y)-(H.positionScreen.y-n.positionScreen.y)*(t.positionScreen.x-n.positionScreen.x)<
+0||(t.positionScreen.x-K.positionScreen.x)*(H.positionScreen.y-K.positionScreen.y)-(t.positionScreen.y-K.positionScreen.y)*(H.positionScreen.x-K.positionScreen.x)<0)){d=q[h]=q[h]||new THREE.RenderableFace3;d.v1.positionWorld.copy(n.positionWorld);d.v2.positionWorld.copy(t.positionWorld);d.v3.positionWorld.copy(H.positionWorld);d.v1.positionScreen.copy(n.positionScreen);d.v2.positionScreen.copy(t.positionScreen);d.v3.positionScreen.copy(H.positionScreen);d.normalWorld.copy(p.normal);x.transformVector3(d.normalWorld);
+d.centroidWorld.copy(p.centroid);S.transformVector3(d.centroidWorld);d.centroidScreen.copy(d.centroidWorld);D.transformVector3(d.centroidScreen);d.z=d.centroidScreen.z;d.meshMaterial=u;d.faceMaterial=p.material;d.overdraw=U;if(s.geometry.uvs[j]){d.uvs[0]=s.geometry.uvs[j][0];d.uvs[1]=s.geometry.uvs[j][1];d.uvs[2]=s.geometry.uvs[j][3]}c.push(d);h++;g=q[h]=q[h]||new THREE.RenderableFace3;g.v1.positionWorld.copy(t.positionWorld);g.v2.positionWorld.copy(K.positionWorld);g.v3.positionWorld.copy(H.positionWorld);
+g.v1.positionScreen.copy(t.positionScreen);g.v2.positionScreen.copy(K.positionScreen);g.v3.positionScreen.copy(H.positionScreen);g.normalWorld.copy(d.normalWorld);g.centroidWorld.copy(d.centroidWorld);g.centroidScreen.copy(d.centroidScreen);g.z=g.centroidScreen.z;g.meshMaterial=u;g.faceMaterial=p.material;g.overdraw=U;if(s.geometry.uvs[j]){g.uvs[0]=s.geometry.uvs[j][1];g.uvs[1]=s.geometry.uvs[j][2];g.uvs[2]=s.geometry.uvs[j][3]}c.push(g);h++}}}}else if(s instanceof THREE.Line){O.multiply(D,S);R=s.geometry.vertices;
+z=R[0];z.positionScreen.copy(z.position);O.transformVector4(z.positionScreen);j=1;for(k=R.length;j<k;j++){n=R[j];n.positionScreen.copy(n.position);O.transformVector4(n.positionScreen);t=R[j-1];J.copy(n.positionScreen);M.copy(t.positionScreen);if(a(J,M)){J.multiplyScalar(1/J.w);M.multiplyScalar(1/M.w);m=l[b]=l[b]||new THREE.RenderableLine;m.v1.positionScreen.copy(J);m.v2.positionScreen.copy(M);m.z=Math.max(J.z,M.z);m.material=s.material;c.push(m);b++}}}else if(s instanceof THREE.Particle){w.set(s.position.x,
+s.position.y,s.position.z,1);D.transformVector4(w);w.z/=w.w;if(w.z>0&&w.z<1){y=E[C]=E[C]||new THREE.RenderableParticle;y.x=w.x/w.w;y.y=w.y/w.w;y.z=w.z;y.rotation=s.rotation.z;y.scale.x=s.scale.x*Math.abs(y.x-(w.x+e.projectionMatrix.n11)/(w.w+e.projectionMatrix.n14));y.scale.y=s.scale.y*Math.abs(y.y-(w.y+e.projectionMatrix.n22)/(w.w+e.projectionMatrix.n24));y.material=s.material;c.push(y);C++}}}c.sort(function(T,B){return B.z-T.z});return c};this.unprojectVector=function(f,e){var i=new THREE.Matrix4;
+i.multiply(THREE.Matrix4.makeInvert(e.matrix),THREE.Matrix4.makeInvert(e.projectionMatrix));i.transformVector3(f);return f}};
+THREE.DOMRenderer=function(){THREE.Renderer.call(this);var a=null,c=new THREE.Projector,d,g,h,q;this.domElement=document.createElement("div");this.setSize=function(m,b){d=m;g=b;h=d/2;q=g/2};this.render=function(m,b){var l,y,C,E,w,D,O,J;a=c.projectScene(m,b);l=0;for(y=a.length;l<y;l++){w=a[l];if(w instanceof THREE.RenderableParticle){O=w.x*h+h;J=w.y*q+q;C=0;for(E=w.material.length;C<E;C++){D=w.material[C];if(D instanceof THREE.ParticleDOMMaterial){D=D.domElement;D.style.left=O+"px";D.style.top=J+"px"}}}}}};
+THREE.CanvasRenderer=function(){function a(I,Y,V,F){var v,L,$,N,X=I.lights;I=0;for(v=X.length;I<v;I++){L=X[I];$=L.color;N=L.intensity;if(L instanceof THREE.DirectionalLight){L=V.dot(L.position)*N;if(L>0){F.r+=$.r*L;F.g+=$.g*L;F.b+=$.b*L}}else if(L instanceof THREE.PointLight){sa.sub(L.position,Y);sa.normalize();L=V.dot(sa)*N;if(L>0){F.r+=$.r*L;F.g+=$.g*L;F.b+=$.b*L}}}}function c(I,Y,V,F,v,L){if(v.opacity!=0){q(v.opacity);m(v.blending);S=I.positionScreen.x;x=I.positionScreen.y;u=Y.positionScreen.x;
+U=Y.positionScreen.y;R=V.positionScreen.x;z=V.positionScreen.y;var $=S,N=x,X=u,aa=U,Z=R,ca=z;r.beginPath();r.moveTo($,N);r.lineTo(X,aa);r.lineTo(Z,ca);r.lineTo($,N);r.closePath();if(v instanceof THREE.MeshBasicMaterial)if(v.map)h(S,x,u,U,R,z,v.map.image,F.uvs[0].u,F.uvs[0].v,F.uvs[1].u,F.uvs[1].v,F.uvs[2].u,F.uvs[2].v);else v.wireframe?d(v.color.__styleString,v.wireframe_linewidth):g(v.color.__styleString);else if(v instanceof THREE.MeshLambertMaterial){if(v.map&&!v.wireframe){h(S,x,u,U,R,z,v.map.image,
+F.uvs[0].u,F.uvs[0].v,F.uvs[1].u,F.uvs[1].v,F.uvs[2].u,F.uvs[2].v);m(THREE.SubtractiveBlending)}if(ta)if(!v.wireframe&&v.shading==THREE.SmoothShading&&F.vertexNormalsWorld.length==3){K.r=H.r=T.r=ga.r;K.g=H.g=T.g=ga.g;K.b=H.b=T.b=ga.b;a(L,F.v1.positionWorld,F.vertexNormalsWorld[0],K);a(L,F.v2.positionWorld,F.vertexNormalsWorld[1],H);a(L,F.v3.positionWorld,F.vertexNormalsWorld[2],T);B.r=(H.r+T.r)*0.5;B.g=(H.g+T.g)*0.5;B.b=(H.b+T.b)*0.5;P=b(K,H,T,B);h(S,x,u,U,R,z,P,0,0,1,0,0,1)}else{ha.r=ga.r;ha.g=ga.g;
+ha.b=ga.b;a(L,F.centroidWorld,F.normalWorld,ha);p.r=v.color.r*ha.r;p.g=v.color.g*ha.g;p.b=v.color.b*ha.b;p.updateStyleString();v.wireframe?d(p.__styleString,v.wireframe_linewidth):g(p.__styleString)}else v.wireframe?d(v.color.__styleString,v.wireframe_linewidth):g(v.color.__styleString)}else if(v instanceof THREE.MeshDepthMaterial){A=v.__2near;W=v.__farPlusNear;ea=v.__farMinusNear;K.r=K.g=K.b=1-A/(W-I.positionScreen.z*ea);H.r=H.g=H.b=1-A/(W-Y.positionScreen.z*ea);T.r=T.g=T.b=1-A/(W-V.positionScreen.z*
+ea);B.r=(H.r+T.r)*0.5;B.g=(H.g+T.g)*0.5;B.b=(H.b+T.b)*0.5;P=b(K,H,T,B);h(S,x,u,U,R,z,P,0,0,1,0,0,1)}else if(v instanceof THREE.MeshNormalMaterial){p.r=l(F.normalWorld.x);p.g=l(F.normalWorld.y);p.b=l(F.normalWorld.z);p.updateStyleString();v.wireframe?d(p.__styleString,v.wireframe_linewidth):g(p.__styleString)}}}function d(I,Y){if(i!=I)r.strokeStyle=i=I;if(j!=Y)r.lineWidth=j=Y;r.stroke();da.inflate(Y*2)}function g(I){if(o!=I)r.fillStyle=o=I;r.fill()}function h(I,Y,V,F,v,L,$,N,X,aa,Z,ca,ka){var ja,fa;
+ja=$.width-1;fa=$.height-1;N*=ja;X*=fa;aa*=ja;Z*=fa;ca*=ja;ka*=fa;V-=I;F-=Y;v-=I;L-=Y;aa-=N;Z-=X;ca-=N;ka-=X;fa=1/(aa*ka-ca*Z);ja=(ka*V-Z*v)*fa;Z=(ka*F-Z*L)*fa;V=(aa*v-ca*V)*fa;F=(aa*L-ca*F)*fa;I=I-ja*N-V*X;Y=Y-Z*N-F*X;r.save();r.transform(ja,Z,V,F,I,Y);r.clip();r.drawImage($,0,0);r.restore()}function q(I){if(f!=I)r.globalAlpha=f=I}function m(I){if(e!=I){switch(I){case THREE.NormalBlending:r.globalCompositeOperation="source-over";break;case THREE.AdditiveBlending:r.globalCompositeOperation="lighter";
+break;case THREE.SubtractiveBlending:r.globalCompositeOperation="darker"}e=I}}function b(I,Y,V,F){ia[0]=n(0,k(255,~~(I.r*255)));ia[1]=n(0,k(255,~~(I.g*255)));ia[2]=n(0,k(255,~~(I.b*255)));ia[4]=n(0,k(255,~~(Y.r*255)));ia[5]=n(0,k(255,~~(Y.g*255)));ia[6]=n(0,k(255,~~(Y.b*255)));ia[8]=n(0,k(255,~~(V.r*255)));ia[9]=n(0,k(255,~~(V.g*255)));ia[10]=n(0,k(255,~~(V.b*255)));ia[12]=n(0,k(255,~~(F.r*255)));ia[13]=n(0,k(255,~~(F.g*255)));ia[14]=n(0,k(255,~~(F.b*255)));oa.putImageData(ua,0,0);ra.drawImage(pa,
+0,0);return qa}function l(I){return I<0?k((1+I)*0.5,0.5):0.5+k(I*0.5,0.5)}function y(I,Y){var V=Y.x-I.x,F=Y.y-I.y,v=1/Math.sqrt(V*V+F*F);V*=v;F*=v;Y.x+=V;Y.y+=F;I.x-=V;I.y-=F}var C=null,E=new THREE.Projector,w=document.createElement("canvas"),D,O,J,M,r=w.getContext("2d"),f=1,e=0,i=null,o=null,j=1,k=Math.min,n=Math.max,t,G,s,S,x,u,U,R,z,p=new THREE.Color,K=new THREE.Color,H=new THREE.Color,T=new THREE.Color,B=new THREE.Color,A,W,ea,P,Q=new THREE.Rectangle,ba=new THREE.Rectangle,da=new THREE.Rectangle,
+ta=false,ha=new THREE.Color,ga=new THREE.Color,la=new THREE.Color,ma=new THREE.Color,xa=Math.PI*2,sa=new THREE.Vector3,pa,oa,ua,ia,qa,ra,na=16;pa=document.createElement("canvas");pa.width=pa.height=2;oa=pa.getContext("2d");oa.fillStyle="rgba(0,0,0,1)";oa.fillRect(0,0,2,2);ua=oa.getImageData(0,0,2,2);ia=ua.data;qa=document.createElement("canvas");qa.width=qa.height=na;ra=qa.getContext("2d");ra.translate(-na/2,-na/2);ra.scale(na,na);na--;this.domElement=w;this.autoClear=true;this.setSize=function(I,
+Y){D=I;O=Y;J=D/2;M=O/2;w.width=D;w.height=O;Q.set(-J,-M,J,M)};this.clear=function(){if(!ba.isEmpty()){ba.inflate(1);ba.minSelf(Q);r.clearRect(ba.getX(),ba.getY(),ba.getWidth(),ba.getHeight());ba.empty()}};this.render=function(I,Y){var V,F,v,L,$,N,X,aa;r.setTransform(1,0,0,-1,J,M);this.autoClear&&this.clear();C=E.projectScene(I,Y);r.fillStyle="rgba(0, 255, 255, 0.5)";r.fillRect(Q.getX(),Q.getY(),Q.getWidth(),Q.getHeight());if(ta=I.lights.length>0){$=I.lights;ga.setRGB(0,0,0);la.setRGB(0,0,0);ma.setRGB(0,
+0,0);V=0;for(F=$.length;V<F;V++){v=$[V];L=v.color;if(v instanceof THREE.AmbientLight){ga.r+=L.r;ga.g+=L.g;ga.b+=L.b}else if(v instanceof THREE.DirectionalLight){la.r+=L.r;la.g+=L.g;la.b+=L.b}else if(v instanceof THREE.PointLight){ma.r+=L.r;ma.g+=L.g;ma.b+=L.b}}}V=0;for(F=C.length;V<F;V++){v=C[V];da.empty();if(v instanceof THREE.RenderableParticle){t=v;t.x*=J;t.y*=M;L=0;for($=v.material.length;L<$;L++)a:{N=t;X=v;var Z=v.material[L];if(Z.opacity!=0){q(Z.opacity);m(Z.blending);aa=void 0;var ca=void 0,
+ka=void 0,ja=void 0,fa=void 0,va=void 0,wa=void 0;if(Z instanceof THREE.ParticleBasicMaterial){if(Z.map){fa=Z.map;va=fa.width>>1;wa=fa.height>>1;ka=X.scale.x*J;ja=X.scale.y*M;aa=ka*va;ca=ja*wa;da.set(N.x-aa,N.y-ca,N.x+aa,N.y+ca);if(!Q.instersects(da))break a;r.save();r.translate(N.x,N.y);r.rotate(-X.rotation);r.scale(ka,-ja);r.translate(-va,-wa);r.drawImage(fa,0,0);r.restore()}r.beginPath();r.moveTo(N.x-10,N.y);r.lineTo(N.x+10,N.y);r.moveTo(N.x,N.y-10);r.lineTo(N.x,N.y+10);r.closePath();r.strokeStyle=
+"rgb(255,255,0)";r.stroke()}else if(Z instanceof THREE.ParticleCircleMaterial){if(ta){ha.r=ga.r+la.r+ma.r;ha.g=ga.g+la.g+ma.g;ha.b=ga.b+la.b+ma.b;p.r=Z.color.r*ha.r;p.g=Z.color.g*ha.g;p.b=Z.color.b*ha.b;p.updateStyleString()}else p.__styleString=Z.color.__styleString;aa=X.scale.x*J;ca=X.scale.y*M;da.set(N.x-aa,N.y-ca,N.x+aa,N.y+ca);if(Q.instersects(da)){Z=p.__styleString;if(o!=Z)r.fillStyle=o=Z;r.save();r.translate(N.x,N.y);r.rotate(-X.rotation);r.scale(aa,ca);r.beginPath();r.arc(0,0,1,0,xa,true);
+r.closePath();r.fill();r.restore()}}}}}else if(v instanceof THREE.RenderableLine){t=v.v1;G=v.v2;t.positionScreen.x*=J;t.positionScreen.y*=M;G.positionScreen.x*=J;G.positionScreen.y*=M;da.addPoint(t.positionScreen.x,t.positionScreen.y);da.addPoint(G.positionScreen.x,G.positionScreen.y);if(Q.instersects(da)){L=0;for($=v.material.length;L<$;){X=t;aa=G;N=v.material[L++];if(N.opacity!=0){q(N.opacity);m(N.blending);r.beginPath();r.moveTo(X.positionScreen.x,X.positionScreen.y);r.lineTo(aa.positionScreen.x,
+aa.positionScreen.y);r.closePath();if(N instanceof THREE.LineBasicMaterial){p.__styleString=N.color.__styleString;X=N.linewidth;if(j!=X)r.lineWidth=j=X;X=p.__styleString;if(i!=X)r.strokeStyle=i=X;r.stroke();da.inflate(N.linewidth*2)}}}}}else if(v instanceof THREE.RenderableFace3){t=v.v1;G=v.v2;s=v.v3;t.positionScreen.x*=J;t.positionScreen.y*=M;G.positionScreen.x*=J;G.positionScreen.y*=M;s.positionScreen.x*=J;s.positionScreen.y*=M;if(v.overdraw){y(t.positionScreen,G.positionScreen);y(G.positionScreen,
+s.positionScreen);y(s.positionScreen,t.positionScreen)}da.addPoint(t.positionScreen.x,t.positionScreen.y);da.addPoint(G.positionScreen.x,G.positionScreen.y);da.addPoint(s.positionScreen.x,s.positionScreen.y);if(Q.instersects(da)){L=0;for($=v.meshMaterial.length;L<$;){aa=v.meshMaterial[L++];if(aa instanceof THREE.MeshFaceMaterial){N=0;for(X=v.faceMaterial.length;N<X;)(aa=v.faceMaterial[N++])&&c(t,G,s,v,aa,I)}else c(t,G,s,v,aa,I)}}}ba.addRectangle(da)}r.lineWidth=1;r.strokeStyle="rgba( 255, 0, 0, 0.5 )";
+r.strokeRect(ba.getX(),ba.getY(),ba.getWidth(),ba.getHeight());r.setTransform(1,0,0,1,0,0)}};
+THREE.SVGRenderer=function(){function a(p,K,H){var T,B,A,W;T=0;for(B=p.lights.length;T<B;T++){A=p.lights[T];if(A instanceof THREE.DirectionalLight){W=K.normalWorld.dot(A.position)*A.intensity;if(W>0){H.r+=A.color.r*W;H.g+=A.color.g*W;H.b+=A.color.b*W}}else if(A instanceof THREE.PointLight){t.sub(A.position,K.centroidWorld);t.normalize();W=K.normalWorld.dot(t)*A.intensity;if(W>0){H.r+=A.color.r*W;H.g+=A.color.g*W;H.b+=A.color.b*W}}}}function c(p,K,H,T,B,A){x=g(u++);x.setAttribute("d","M "+p.positionScreen.x+
+" "+p.positionScreen.y+" L "+K.positionScreen.x+" "+K.positionScreen.y+" L "+H.positionScreen.x+","+H.positionScreen.y+"z");if(B instanceof THREE.MeshBasicMaterial)e.__styleString=B.color.__styleString;else if(B instanceof THREE.MeshLambertMaterial)if(f){i.r=o.r;i.g=o.g;i.b=o.b;a(A,T,i);e.r=B.color.r*i.r;e.g=B.color.g*i.g;e.b=B.color.b*i.b;e.updateStyleString()}else e.__styleString=B.color.__styleString;else if(B instanceof THREE.MeshDepthMaterial){n=1-B.__2near/(B.__farPlusNear-T.z*B.__farMinusNear);
+e.setRGB(n,n,n)}else B instanceof THREE.MeshNormalMaterial&&e.setRGB(h(T.normalWorld.x),h(T.normalWorld.y),h(T.normalWorld.z));B.wireframe?x.setAttribute("style","fill: none; stroke: "+e.__styleString+"; stroke-width: "+B.wireframe_linewidth+"; stroke-opacity: "+B.opacity+"; stroke-linecap: "+B.wireframe_linecap+"; stroke-linejoin: "+B.wireframe_linejoin):x.setAttribute("style","fill: "+e.__styleString+"; fill-opacity: "+B.opacity);b.appendChild(x)}function d(p,K,H,T,B,A,W){x=g(u++);x.setAttribute("d",
+"M "+p.positionScreen.x+" "+p.positionScreen.y+" L "+K.positionScreen.x+" "+K.positionScreen.y+" L "+H.positionScreen.x+","+H.positionScreen.y+" L "+T.positionScreen.x+","+T.positionScreen.y+"z");if(A instanceof THREE.MeshBasicMaterial)e.__styleString=A.color.__styleString;else if(A instanceof THREE.MeshLambertMaterial)if(f){i.r=o.r;i.g=o.g;i.b=o.b;a(W,B,i);e.r=A.color.r*i.r;e.g=A.color.g*i.g;e.b=A.color.b*i.b;e.updateStyleString()}else e.__styleString=A.color.__styleString;else if(A instanceof THREE.MeshDepthMaterial){n=
+1-A.__2near/(A.__farPlusNear-B.z*A.__farMinusNear);e.setRGB(n,n,n)}else A instanceof THREE.MeshNormalMaterial&&e.setRGB(h(B.normalWorld.x),h(B.normalWorld.y),h(B.normalWorld.z));A.wireframe?x.setAttribute("style","fill: none; stroke: "+e.__styleString+"; stroke-width: "+A.wireframe_linewidth+"; stroke-opacity: "+A.opacity+"; stroke-linecap: "+A.wireframe_linecap+"; stroke-linejoin: "+A.wireframe_linejoin):x.setAttribute("style","fill: "+e.__styleString+"; fill-opacity: "+A.opacity);b.appendChild(x)}
+function g(p){if(G[p]==null){G[p]=document.createElementNS("http://www.w3.org/2000/svg","path");z==0&&G[p].setAttribute("shape-rendering","crispEdges");return G[p]}return G[p]}function h(p){return p<0?Math.min((1+p)*0.5,0.5):0.5+Math.min(p*0.5,0.5)}var q=null,m=new THREE.Projector,b=document.createElementNS("http://www.w3.org/2000/svg","svg"),l,y,C,E,w,D,O,J,M=new THREE.Rectangle,r=new THREE.Rectangle,f=false,e=new THREE.Color(16777215),i=new THREE.Color(16777215),o=new THREE.Color(0),j=new THREE.Color(0),
+k=new THREE.Color(0),n,t=new THREE.Vector3,G=[],s=[],S=[],x,u,U,R,z=1;this.domElement=b;this.autoClear=true;this.setQuality=function(p){switch(p){case "high":z=1;break;case "low":z=0}};this.setSize=function(p,K){l=p;y=K;C=l/2;E=y/2;b.setAttribute("viewBox",-C+" "+-E+" "+l+" "+y);b.setAttribute("width",l);b.setAttribute("height",y);M.set(-C,-E,C,E)};this.clear=function(){for(;b.childNodes.length>0;)b.removeChild(b.childNodes[0])};this.render=function(p,K){var H,T,B,A,W,ea,P,Q;this.autoClear&&this.clear();
+q=m.projectScene(p,K);R=U=u=0;if(f=p.lights.length>0){P=p.lights;o.setRGB(0,0,0);j.setRGB(0,0,0);k.setRGB(0,0,0);H=0;for(T=P.length;H<T;H++){B=P[H];A=B.color;if(B instanceof THREE.AmbientLight){o.r+=A.r;o.g+=A.g;o.b+=A.b}else if(B instanceof THREE.DirectionalLight){j.r+=A.r;j.g+=A.g;j.b+=A.b}else if(B instanceof THREE.PointLight){k.r+=A.r;k.g+=A.g;k.b+=A.b}}}H=0;for(T=q.length;H<T;H++){P=q[H];r.empty();if(P instanceof THREE.RenderableParticle){w=P;w.x*=C;w.y*=-E;B=0;for(A=P.material.length;B<A;B++)if(Q=
+P.material[B]){W=w;ea=P;Q=Q;var ba=U++;if(s[ba]==null){s[ba]=document.createElementNS("http://www.w3.org/2000/svg","circle");z==0&&s[ba].setAttribute("shape-rendering","crispEdges")}x=s[ba];x.setAttribute("cx",W.x);x.setAttribute("cy",W.y);x.setAttribute("r",ea.scale.x*C);if(Q instanceof THREE.ParticleCircleMaterial){if(f){i.r=o.r+j.r+k.r;i.g=o.g+j.g+k.g;i.b=o.b+j.b+k.b;e.r=Q.color.r*i.r;e.g=Q.color.g*i.g;e.b=Q.color.b*i.b;e.updateStyleString()}else e=Q.color;x.setAttribute("style","fill: "+e.__styleString)}b.appendChild(x)}}else if(P instanceof
+THREE.RenderableLine){w=P.v1;D=P.v2;w.positionScreen.x*=C;w.positionScreen.y*=-E;D.positionScreen.x*=C;D.positionScreen.y*=-E;r.addPoint(w.positionScreen.x,w.positionScreen.y);r.addPoint(D.positionScreen.x,D.positionScreen.y);if(M.instersects(r)){B=0;for(A=P.material.length;B<A;)if(Q=P.material[B++]){W=w;ea=D;Q=Q;ba=R++;if(S[ba]==null){S[ba]=document.createElementNS("http://www.w3.org/2000/svg","line");z==0&&S[ba].setAttribute("shape-rendering","crispEdges")}x=S[ba];x.setAttribute("x1",W.positionScreen.x);
+x.setAttribute("y1",W.positionScreen.y);x.setAttribute("x2",ea.positionScreen.x);x.setAttribute("y2",ea.positionScreen.y);if(Q instanceof THREE.LineBasicMaterial){e.__styleString=Q.color.__styleString;x.setAttribute("style","fill: none; stroke: "+e.__styleString+"; stroke-width: "+Q.linewidth+"; stroke-opacity: "+Q.opacity+"; stroke-linecap: "+Q.linecap+"; stroke-linejoin: "+Q.linejoin);b.appendChild(x)}}}}else if(P instanceof THREE.RenderableFace3){w=P.v1;D=P.v2;O=P.v3;w.positionScreen.x*=C;w.positionScreen.y*=
+-E;D.positionScreen.x*=C;D.positionScreen.y*=-E;O.positionScreen.x*=C;O.positionScreen.y*=-E;r.addPoint(w.positionScreen.x,w.positionScreen.y);r.addPoint(D.positionScreen.x,D.positionScreen.y);r.addPoint(O.positionScreen.x,O.positionScreen.y);if(M.instersects(r)){B=0;for(A=P.meshMaterial.length;B<A;){Q=P.meshMaterial[B++];if(Q instanceof THREE.MeshFaceMaterial){W=0;for(ea=P.faceMaterial.length;W<ea;)(Q=P.faceMaterial[W++])&&c(w,D,O,P,Q,p)}else Q&&c(w,D,O,P,Q,p)}}}else if(P instanceof THREE.RenderableFace4){w=
+P.v1;D=P.v2;O=P.v3;J=P.v4;w.positionScreen.x*=C;w.positionScreen.y*=-E;D.positionScreen.x*=C;D.positionScreen.y*=-E;O.positionScreen.x*=C;O.positionScreen.y*=-E;J.positionScreen.x*=C;J.positionScreen.y*=-E;r.addPoint(w.positionScreen.x,w.positionScreen.y);r.addPoint(D.positionScreen.x,D.positionScreen.y);r.addPoint(O.positionScreen.x,O.positionScreen.y);r.addPoint(J.positionScreen.x,J.positionScreen.y);if(M.instersects(r)){B=0;for(A=P.meshMaterial.length;B<A;){Q=P.meshMaterial[B++];if(Q instanceof
+THREE.MeshFaceMaterial){W=0;for(ea=P.faceMaterial.length;W<ea;)(Q=P.faceMaterial[W++])&&d(w,D,O,J,P,Q,p)}else Q&&d(w,D,O,J,P,Q,p)}}}}}};
+THREE.WebGLRenderer=function(a){function c(f,e){var i=b.createProgram();b.attachShader(i,h("fragment","#ifdef GL_ES\nprecision highp float;\n#endif\n"+f));b.attachShader(i,h("vertex","uniform mat4 objectMatrix;\nuniform mat4 modelViewMatrix;\nuniform mat4 projectionMatrix;\nuniform vec3 cameraPosition;\nattribute vec3 position;\nattribute vec3 normal;\nattribute vec2 uv;\n"+e));b.linkProgram(i);b.getProgramParameter(i,b.LINK_STATUS)||alert("Could not initialise shaders\nVALIDATE_STATUS: "+b.getProgramParameter(i,
+b.VALIDATE_STATUS)+", gl error ["+b.getError()+"]");i.uniforms={};return i}function d(f,e){var i,o,j;i=0;for(o=e.length;i<o;i++){j=e[i];f.uniforms[j]=b.getUniformLocation(f,j)}}function g(f){f.position=b.getAttribLocation(f,"position");b.enableVertexAttribArray(f.position);f.normal=b.getAttribLocation(f,"normal");b.enableVertexAttribArray(f.normal);f.uv=b.getAttribLocation(f,"uv");b.enableVertexAttribArray(f.uv)}function h(f,e){var i;if(f=="fragment")i=b.createShader(b.FRAGMENT_SHADER);else if(f==
+"vertex")i=b.createShader(b.VERTEX_SHADER);b.shaderSource(i,e);b.compileShader(i);if(!b.getShaderParameter(i,b.COMPILE_STATUS)){alert(b.getShaderInfoLog(i));return null}return i}function q(f){switch(f){case THREE.Repeat:return b.REPEAT;case THREE.ClampToEdge:return b.CLAMP_TO_EDGE;case THREE.MirroredRepeat:return b.MIRRORED_REPEAT}return 0}var m=document.createElement("canvas"),b,l,y,C=new THREE.Matrix4,E,w=new Float32Array(16),D=new Float32Array(16),O=new Float32Array(16),J=new Float32Array(9),M=
+new Float32Array(16);a=function(f,e){if(f){var i,o,j,k=pointLights=maxDirLights=maxPointLights=0;i=0;for(o=f.lights.length;i<o;i++){j=f.lights[i];j instanceof THREE.DirectionalLight&&k++;j instanceof THREE.PointLight&&pointLights++}if(pointLights+k<=e){maxDirLights=k;maxPointLights=pointLights}else{maxDirLights=Math.ceil(e*k/(pointLights+k));maxPointLights=e-maxDirLights}return{directional:maxDirLights,point:maxPointLights}}return{directional:1,point:e-1}}(a,4);this.domElement=m;this.autoClear=true;
+try{b=m.getContext("experimental-webgl",{antialias:true})}catch(r){}if(!b){alert("WebGL not supported");throw"cannot create webgl context";}b.clearColor(0,0,0,1);b.clearDepth(1);b.enable(b.DEPTH_TEST);b.depthFunc(b.LEQUAL);b.frontFace(b.CCW);b.cullFace(b.BACK);b.enable(b.CULL_FACE);b.enable(b.BLEND);b.blendFunc(b.ONE,b.ONE_MINUS_SRC_ALPHA);b.clearColor(0,0,0,0);(function(f,e){var i=[f?"#define MAX_DIR_LIGHTS "+f:"",e?"#define MAX_POINT_LIGHTS "+e:"","uniform bool enableLighting;\nuniform bool useRefract;\nuniform int pointLightNumber;\nuniform int directionalLightNumber;\nuniform vec3 ambientLightColor;",
+f?"uniform vec3 directionalLightColor[ MAX_DIR_LIGHTS ];":"",f?"uniform vec3 directionalLightDirection[ MAX_DIR_LIGHTS ];":"",e?"uniform vec3 pointLightColor[ MAX_POINT_LIGHTS ];":"",e?"uniform vec3 pointLightPosition[ MAX_POINT_LIGHTS ];":"","uniform mat4 viewMatrix;\nuniform mat3 normalMatrix;\nvarying vec3 vNormal;\nvarying vec2 vUv;\nvarying vec3 vLightWeighting;",e?"varying vec3 vPointLightVector[ MAX_POINT_LIGHTS ];":"","varying vec3 vViewPosition;\nvarying vec3 vReflect;\nuniform float mRefractionRatio;\nvoid main(void) {\nvec4 mPosition = objectMatrix * vec4( position, 1.0 );\nvViewPosition = cameraPosition - mPosition.xyz;\nvec3 nWorld = mat3( objectMatrix[0].xyz, objectMatrix[1].xyz, objectMatrix[2].xyz ) * normal;\nvec4 mvPosition = modelViewMatrix * vec4( position, 1.0 );\nvec3 transformedNormal = normalize( normalMatrix * normal );\nif ( !enableLighting ) {\nvLightWeighting = vec3( 1.0, 1.0, 1.0 );\n} else {\nvLightWeighting = ambientLightColor;",
+f?"for( int i = 0; i < MAX_DIR_LIGHTS; i++ ) {":"",f?"vec4 lDirection = viewMatrix * vec4( directionalLightDirection[ i ], 0.0 );":"",f?"float directionalLightWeighting = max( dot( transformedNormal, normalize(lDirection.xyz ) ), 0.0 );":"",f?"vLightWeighting += directionalLightColor[ i ] * directionalLightWeighting;":"",f?"}":"",e?"for( int i = 0; i < MAX_POINT_LIGHTS; i++ ) {":"",e?"vec4 lPosition = viewMatrix * vec4( pointLightPosition[ i ], 1.0 );":"",e?"vPointLightVector[ i ] = normalize( lPosition.xyz - mvPosition.xyz );":
+"",e?"float pointLightWeighting = max( dot( transformedNormal, vPointLightVector[ i ] ), 0.0 );":"",e?"vLightWeighting += pointLightColor[ i ] * pointLightWeighting;":"",e?"}":"","}\nvNormal = transformedNormal;\nvUv = uv;\nif ( useRefract ) {\nvReflect = refract( normalize(mPosition.xyz - cameraPosition), normalize(nWorld.xyz), mRefractionRatio );\n} else {\nvReflect = reflect( normalize(mPosition.xyz - cameraPosition), normalize(nWorld.xyz) );\n}\ngl_Position = projectionMatrix * mvPosition;\n}"].join("\n"),
+o=[f?"#define MAX_DIR_LIGHTS "+f:"",e?"#define MAX_POINT_LIGHTS "+e:"","uniform int material;\nuniform bool enableMap;\nuniform bool enableCubeMap;\nuniform bool mixEnvMap;\nuniform samplerCube tCube;\nuniform float mReflectivity;\nuniform sampler2D tMap;\nuniform vec4 mColor;\nuniform float mOpacity;\nuniform vec4 mAmbient;\nuniform vec4 mSpecular;\nuniform float mShininess;\nuniform float m2Near;\nuniform float mFarPlusNear;\nuniform float mFarMinusNear;\nuniform int pointLightNumber;\nuniform int directionalLightNumber;",
+f?"uniform mat4 viewMatrix;":"",f?"uniform vec3 directionalLightDirection[ MAX_DIR_LIGHTS ];":"","varying vec3 vNormal;\nvarying vec2 vUv;\nvarying vec3 vLightWeighting;",e?"varying vec3 vPointLightVector[ MAX_POINT_LIGHTS ];":"","varying vec3 vViewPosition;\nvarying vec3 vReflect;\nuniform vec3 cameraPosition;\nvoid main() {\nvec4 mapColor = vec4( 1.0, 1.0, 1.0, 1.0 );\nvec4 cubeColor = vec4( 1.0, 1.0, 1.0, 1.0 );\nif ( enableMap ) {\nmapColor = texture2D( tMap, vUv );\n}\nif ( enableCubeMap ) {\ncubeColor = textureCube( tCube, vec3( -vReflect.x, vReflect.yz ) );\n}\nif ( material == 5 ) { \nvec3 wPos = cameraPosition - vViewPosition;\ngl_FragColor = textureCube( tCube, vec3( -wPos.x, wPos.yz ) );\n} else if ( material == 4 ) { \ngl_FragColor = vec4( 0.5*normalize( vNormal ) + vec3(0.5, 0.5, 0.5), mOpacity );\n} else if ( material == 3 ) { \nfloat w = 0.5;\ngl_FragColor = vec4( w, w, w, mOpacity );\n} else if ( material == 2 ) { \nvec3 normal = normalize( vNormal );\nvec3 viewPosition = normalize( vViewPosition );",
+e?"vec4 pointDiffuse  = vec4( 0.0, 0.0, 0.0, 0.0 );":"",e?"vec4 pointSpecular = vec4( 0.0, 0.0, 0.0, 0.0 );":"",e?"for( int i = 0; i < MAX_POINT_LIGHTS; i++ ) {":"",e?"vec3 pointVector = normalize( vPointLightVector[ i ] );":"",e?"vec3 pointHalfVector = normalize( vPointLightVector[ i ] + vViewPosition );":"",e?"float pointDotNormalHalf = dot( normal, pointHalfVector );":"",e?"float pointDiffuseWeight = max( dot( normal, pointVector ), 0.0 );":"",e?"float pointSpecularWeight = 0.0;":"",e?"if ( pointDotNormalHalf >= 0.0 )":
+"",e?"pointSpecularWeight = pow( pointDotNormalHalf, mShininess );":"",e?"pointDiffuse  += mColor * pointDiffuseWeight;":"",e?"pointSpecular += mSpecular * pointSpecularWeight;":"",e?"}":"",f?"vec4 dirDiffuse  = vec4( 0.0, 0.0, 0.0, 0.0 );":"",f?"vec4 dirSpecular = vec4( 0.0, 0.0, 0.0, 0.0 );":"",f?"for( int i = 0; i < MAX_DIR_LIGHTS; i++ ) {":"",f?"vec4 lDirection = viewMatrix * vec4( directionalLightDirection[ i ], 0.0 );":"",f?"vec3 dirVector = normalize( lDirection.xyz );":"",f?"vec3 dirHalfVector = normalize( lDirection.xyz + vViewPosition );":
+"",f?"float dirDotNormalHalf = dot( normal, dirHalfVector );":"",f?"float dirDiffuseWeight = max( dot( normal, dirVector ), 0.0 );":"",f?"float dirSpecularWeight = 0.0;":"",f?"if ( dirDotNormalHalf >= 0.0 )":"",f?"dirSpecularWeight = pow( dirDotNormalHalf, mShininess );":"",f?"dirDiffuse  += mColor * dirDiffuseWeight;":"",f?"dirSpecular += mSpecular * dirSpecularWeight;":"",f?"}":"","vec4 totalLight = mAmbient;",f?"totalLight += dirDiffuse + dirSpecular;":"",e?"totalLight += pointDiffuse + pointSpecular;":
+"","if ( mixEnvMap ) {\ngl_FragColor = vec4( mix( mapColor.rgb * totalLight.xyz * vLightWeighting, cubeColor.rgb, mReflectivity ), mapColor.a );\n} else {\ngl_FragColor = vec4( mapColor.rgb * cubeColor.rgb * totalLight.xyz * vLightWeighting, mapColor.a );\n}\n} else if ( material == 1 ) {\nif ( mixEnvMap ) {\ngl_FragColor = vec4( mix( mColor.rgb * mapColor.rgb * vLightWeighting, cubeColor.rgb, mReflectivity ), mColor.a * mapColor.a );\n} else {\ngl_FragColor = vec4( mColor.rgb * mapColor.rgb * cubeColor.rgb * vLightWeighting, mColor.a * mapColor.a );\n}\n} else {\nif ( mixEnvMap ) {\ngl_FragColor = mix( mColor * mapColor, cubeColor, mReflectivity );\n} else {\ngl_FragColor = mColor * mapColor * cubeColor;\n}\n}\n}"].join("\n");
+l=c(o,i);b.useProgram(l);d(l,["viewMatrix","modelViewMatrix","projectionMatrix","normalMatrix","objectMatrix","cameraPosition","enableLighting","ambientLightColor","material","mColor","mAmbient","mSpecular","mShininess","mOpacity","enableMap","tMap","enableCubeMap","tCube","mixEnvMap","mReflectivity","mRefractionRatio","useRefract","m2Near","mFarPlusNear","mFarMinusNear"]);f&&d(l,["directionalLightNumber","directionalLightColor","directionalLightDirection"]);e&&d(l,["pointLightNumber","pointLightColor",
+"pointLightPosition"]);b.uniform1i(l.uniforms.enableMap,0);b.uniform1i(l.uniforms.tMap,0);b.uniform1i(l.uniforms.enableCubeMap,0);b.uniform1i(l.uniforms.tCube,1);b.uniform1i(l.uniforms.mixEnvMap,0);b.uniform1i(l.uniforms.useRefract,0);g(l)})(a.directional,a.point);this.setSize=function(f,e){m.width=f;m.height=e;b.viewport(0,0,m.width,m.height)};this.clear=function(){b.clear(b.COLOR_BUFFER_BIT|b.DEPTH_BUFFER_BIT)};this.setupLights=function(f,e){var i,o,j,k,n,t=[],G=[],s=[];k=[];n=[];b.uniform1i(f.uniforms.enableLighting,
+e.lights.length);i=0;for(o=e.lights.length;i<o;i++){j=e.lights[i];if(j instanceof THREE.AmbientLight)t.push(j);else if(j instanceof THREE.DirectionalLight)s.push(j);else j instanceof THREE.PointLight&&G.push(j)}i=j=k=n=0;for(o=t.length;i<o;i++){j+=t[i].color.r;k+=t[i].color.g;n+=t[i].color.b}b.uniform3f(f.uniforms.ambientLightColor,j,k,n);k=[];n=[];i=0;for(o=s.length;i<o;i++){j=s[i];k.push(j.color.r*j.intensity);k.push(j.color.g*j.intensity);k.push(j.color.b*j.intensity);n.push(j.position.x);n.push(j.position.y);
+n.push(j.position.z)}if(s.length){b.uniform1i(f.uniforms.directionalLightNumber,s.length);b.uniform3fv(f.uniforms.directionalLightDirection,n);b.uniform3fv(f.uniforms.directionalLightColor,k)}k=[];n=[];i=0;for(o=G.length;i<o;i++){j=G[i];k.push(j.color.r*j.intensity);k.push(j.color.g*j.intensity);k.push(j.color.b*j.intensity);n.push(j.position.x);n.push(j.position.y);n.push(j.position.z)}if(G.length){b.uniform1i(f.uniforms.pointLightNumber,G.length);b.uniform3fv(f.uniforms.pointLightPosition,n);b.uniform3fv(f.uniforms.pointLightColor,
+k)}};this.createBuffers=function(f,e){var i,o,j,k,n,t,G,s,S=[],x=[],u=[],U=[],R=[],z=0,p=f.materialFaceGroup[e],K;j=false;i=0;for(o=f.material.length;i<o;i++){meshMaterial=f.material[i];if(meshMaterial instanceof THREE.MeshFaceMaterial){n=0;for(K=p.material.length;n<K;n++)if(p.material[n]&&p.material[n].shading!=undefined&&p.material[n].shading==THREE.SmoothShading){j=true;break}}else if(meshMaterial&&meshMaterial.shading!=undefined&&meshMaterial.shading==THREE.SmoothShading){j=true;break}if(j)break}K=
+j;i=0;for(o=p.faces.length;i<o;i++){j=p.faces[i];k=f.geometry.faces[j];n=k.vertexNormals;faceNormal=k.normal;j=f.geometry.uvs[j];if(k instanceof THREE.Face3){t=f.geometry.vertices[k.a].position;G=f.geometry.vertices[k.b].position;s=f.geometry.vertices[k.c].position;u.push(t.x,t.y,t.z);u.push(G.x,G.y,G.z);u.push(s.x,s.y,s.z);if(n.length==3&&K)for(k=0;k<3;k++)U.push(n[k].x,n[k].y,n[k].z);else for(k=0;k<3;k++)U.push(faceNormal.x,faceNormal.y,faceNormal.z);if(j)for(k=0;k<3;k++)R.push(j[k].u,j[k].v);S.push(z,
+z+1,z+2);x.push(z,z+1);x.push(z,z+2);x.push(z+1,z+2);z+=3}else if(k instanceof THREE.Face4){t=f.geometry.vertices[k.a].position;G=f.geometry.vertices[k.b].position;s=f.geometry.vertices[k.c].position;k=f.geometry.vertices[k.d].position;u.push(t.x,t.y,t.z);u.push(G.x,G.y,G.z);u.push(s.x,s.y,s.z);u.push(k.x,k.y,k.z);if(n.length==4&&K)for(k=0;k<4;k++)U.push(n[k].x,n[k].y,n[k].z);else for(k=0;k<4;k++)U.push(faceNormal.x,faceNormal.y,faceNormal.z);if(j)for(k=0;k<4;k++)R.push(j[k].u,j[k].v);S.push(z,z+
+1,z+2);S.push(z,z+2,z+3);x.push(z,z+1);x.push(z,z+2);x.push(z,z+3);x.push(z+1,z+2);x.push(z+2,z+3);z+=4}}if(u.length){p.__webGLVertexBuffer=b.createBuffer();b.bindBuffer(b.ARRAY_BUFFER,p.__webGLVertexBuffer);b.bufferData(b.ARRAY_BUFFER,new Float32Array(u),b.STATIC_DRAW);p.__webGLNormalBuffer=b.createBuffer();b.bindBuffer(b.ARRAY_BUFFER,p.__webGLNormalBuffer);b.bufferData(b.ARRAY_BUFFER,new Float32Array(U),b.STATIC_DRAW);p.__webGLUVBuffer=b.createBuffer();b.bindBuffer(b.ARRAY_BUFFER,p.__webGLUVBuffer);
+b.bufferData(b.ARRAY_BUFFER,new Float32Array(R),b.STATIC_DRAW);p.__webGLFaceBuffer=b.createBuffer();b.bindBuffer(b.ELEMENT_ARRAY_BUFFER,p.__webGLFaceBuffer);b.bufferData(b.ELEMENT_ARRAY_BUFFER,new Uint16Array(S),b.STATIC_DRAW);p.__webGLLineBuffer=b.createBuffer();b.bindBuffer(b.ELEMENT_ARRAY_BUFFER,p.__webGLLineBuffer);b.bufferData(b.ELEMENT_ARRAY_BUFFER,new Uint16Array(x),b.STATIC_DRAW);p.__webGLFaceCount=S.length;p.__webGLLineCount=x.length}};this.renderBuffer=function(f,e,i){var o,j,k,n,t,G,s,
+S,x,u;if(e instanceof THREE.MeshShaderMaterial){if(!e.program){e.program=c(e.fragment_shader,e.vertex_shader);t=["viewMatrix","modelViewMatrix","projectionMatrix","normalMatrix","objectMatrix","cameraPosition"];for(u in e.uniforms)t.push(u);d(e.program,t);g(e.program)}u=e.program}else u=l;if(u!=y){b.useProgram(u);y=u}if(e instanceof THREE.MeshShaderMaterial){t=u;S=e.uniforms;var U,R;for(j in S){U=S[j].type;x=S[j].value;R=t.uniforms[j];if(U=="i")b.uniform1i(R,x);else if(U=="f")b.uniform1f(R,x);else if(U==
+"t"){b.uniform1i(R,x);x=S[j].texture;if(x instanceof THREE.TextureCube&&x.image.length==6){if(!x.image.__webGLTextureCube&&!x.image.__cubeMapInitialized&&x.image.loadCount==6){x.image.__webGLTextureCube=b.createTexture();b.bindTexture(b.TEXTURE_CUBE_MAP,x.image.__webGLTextureCube);b.texParameteri(b.TEXTURE_CUBE_MAP,b.TEXTURE_WRAP_S,b.CLAMP_TO_EDGE);b.texParameteri(b.TEXTURE_CUBE_MAP,b.TEXTURE_WRAP_T,b.CLAMP_TO_EDGE);b.texParameteri(b.TEXTURE_CUBE_MAP,b.TEXTURE_MAG_FILTER,b.LINEAR);b.texParameteri(b.TEXTURE_CUBE_MAP,
+b.TEXTURE_MIN_FILTER,b.LINEAR_MIPMAP_LINEAR);for(U=0;U<6;++U)b.texImage2D(b.TEXTURE_CUBE_MAP_POSITIVE_X+U,0,b.RGBA,b.RGBA,b.UNSIGNED_BYTE,x.image[U]);b.generateMipmap(b.TEXTURE_CUBE_MAP);b.bindTexture(b.TEXTURE_CUBE_MAP,null);x.image.__cubeMapInitialized=true}b.activeTexture(b.TEXTURE1);b.bindTexture(b.TEXTURE_CUBE_MAP,x.image.__webGLTextureCube)}}}this.loadCamera(u,f);this.loadMatrices(u)}else if(e instanceof THREE.MeshPhongMaterial||e instanceof THREE.MeshLambertMaterial||e instanceof THREE.MeshBasicMaterial){f=
+e.color;o=e.opacity;k=e.wireframe;n=e.wireframe_linewidth;G=e.map;s=e.env_map;t=e.combine==THREE.Mix;j=e.reflectivity;x=e.env_map&&e.env_map.mapping==THREE.RefractionMapping;S=e.refraction_ratio;b.uniform4f(u.uniforms.mColor,f.r*o,f.g*o,f.b*o,o);b.uniform1i(u.uniforms.mixEnvMap,t);b.uniform1f(u.uniforms.mReflectivity,j);b.uniform1i(u.uniforms.useRefract,x);b.uniform1f(u.uniforms.mRefractionRatio,S)}if(e instanceof THREE.MeshNormalMaterial){o=e.opacity;b.uniform1f(u.uniforms.mOpacity,o);b.uniform1i(u.uniforms.material,
+4)}else if(e instanceof THREE.MeshDepthMaterial){o=e.opacity;k=e.wireframe;n=e.wireframe_linewidth;b.uniform1f(u.uniforms.mOpacity,o);b.uniform1f(u.uniforms.m2Near,e.__2near);b.uniform1f(u.uniforms.mFarPlusNear,e.__farPlusNear);b.uniform1f(u.uniforms.mFarMinusNear,e.__farMinusNear);b.uniform1i(u.uniforms.material,3)}else if(e instanceof THREE.MeshPhongMaterial){f=e.ambient;j=e.specular;t=e.shininess;b.uniform4f(u.uniforms.mAmbient,f.r,f.g,f.b,o);b.uniform4f(u.uniforms.mSpecular,j.r,j.g,j.b,o);b.uniform1f(u.uniforms.mShininess,
+t);b.uniform1i(u.uniforms.material,2)}else if(e instanceof THREE.MeshLambertMaterial)b.uniform1i(u.uniforms.material,1);else if(e instanceof THREE.MeshBasicMaterial)b.uniform1i(u.uniforms.material,0);else if(e instanceof THREE.MeshCubeMaterial){b.uniform1i(u.uniforms.material,5);s=e.env_map}if(G){if(!e.map.__webGLTexture&&e.map.image.loaded){e.map.__webGLTexture=b.createTexture();b.bindTexture(b.TEXTURE_2D,e.map.__webGLTexture);b.texImage2D(b.TEXTURE_2D,0,b.RGBA,b.RGBA,b.UNSIGNED_BYTE,e.map.image);
+b.texParameteri(b.TEXTURE_2D,b.TEXTURE_WRAP_S,q(e.map.wrap_s));b.texParameteri(b.TEXTURE_2D,b.TEXTURE_WRAP_T,q(e.map.wrap_t));b.texParameteri(b.TEXTURE_2D,b.TEXTURE_MAG_FILTER,b.LINEAR);b.texParameteri(b.TEXTURE_2D,b.TEXTURE_MIN_FILTER,b.LINEAR_MIPMAP_LINEAR);b.generateMipmap(b.TEXTURE_2D);b.bindTexture(b.TEXTURE_2D,null)}b.activeTexture(b.TEXTURE0);b.bindTexture(b.TEXTURE_2D,e.map.__webGLTexture);b.uniform1i(u.uniforms.tMap,0);b.uniform1i(u.uniforms.enableMap,1)}else b.uniform1i(u.uniforms.enableMap,
+0);if(s){if(e.env_map&&e.env_map instanceof THREE.TextureCube&&e.env_map.image.length==6){if(!e.env_map.image.__webGLTextureCube&&!e.env_map.image.__cubeMapInitialized&&e.env_map.image.loadCount==6){e.env_map.image.__webGLTextureCube=b.createTexture();b.bindTexture(b.TEXTURE_CUBE_MAP,e.env_map.image.__webGLTextureCube);b.texParameteri(b.TEXTURE_CUBE_MAP,b.TEXTURE_WRAP_S,b.CLAMP_TO_EDGE);b.texParameteri(b.TEXTURE_CUBE_MAP,b.TEXTURE_WRAP_T,b.CLAMP_TO_EDGE);b.texParameteri(b.TEXTURE_CUBE_MAP,b.TEXTURE_MAG_FILTER,
+b.LINEAR);b.texParameteri(b.TEXTURE_CUBE_MAP,b.TEXTURE_MIN_FILTER,b.LINEAR_MIPMAP_LINEAR);for(o=0;o<6;++o)b.texImage2D(b.TEXTURE_CUBE_MAP_POSITIVE_X+o,0,b.RGBA,b.RGBA,b.UNSIGNED_BYTE,e.env_map.image[o]);b.generateMipmap(b.TEXTURE_CUBE_MAP);b.bindTexture(b.TEXTURE_CUBE_MAP,null);e.env_map.image.__cubeMapInitialized=true}b.activeTexture(b.TEXTURE1);b.bindTexture(b.TEXTURE_CUBE_MAP,e.env_map.image.__webGLTextureCube);b.uniform1i(u.uniforms.tCube,1)}b.uniform1i(u.uniforms.enableCubeMap,1)}else b.uniform1i(u.uniforms.enableCubeMap,
+0);b.bindBuffer(b.ARRAY_BUFFER,i.__webGLVertexBuffer);b.vertexAttribPointer(u.position,3,b.FLOAT,false,0,0);b.bindBuffer(b.ARRAY_BUFFER,i.__webGLNormalBuffer);b.vertexAttribPointer(u.normal,3,b.FLOAT,false,0,0);if(G){b.bindBuffer(b.ARRAY_BUFFER,i.__webGLUVBuffer);b.enableVertexAttribArray(u.uv);b.vertexAttribPointer(u.uv,2,b.FLOAT,false,0,0)}else b.disableVertexAttribArray(u.uv);if(k){b.lineWidth(n);b.bindBuffer(b.ELEMENT_ARRAY_BUFFER,i.__webGLLineBuffer);b.drawElements(b.LINES,i.__webGLLineCount,
+b.UNSIGNED_SHORT,0)}else{b.bindBuffer(b.ELEMENT_ARRAY_BUFFER,i.__webGLFaceBuffer);b.drawElements(b.TRIANGLES,i.__webGLFaceCount,b.UNSIGNED_SHORT,0)}};this.renderPass=function(f,e,i,o,j){var k,n,t,G,s;t=0;for(G=e.material.length;t<G;t++){k=e.material[t];if(k instanceof THREE.MeshFaceMaterial){k=0;for(n=i.material.length;k<n;k++)if((s=i.material[k])&&s.blending==o&&s.opacity<1==j){this.setBlending(s.blending);this.renderBuffer(f,s,i)}}else if((s=k)&&s.blending==o&&s.opacity<1==j){this.setBlending(s.blending);
+this.renderBuffer(f,s,i)}}};this.render=function(f,e){var i,o;this.initWebGLObjects(f);this.autoClear&&this.clear();e.autoUpdateMatrix&&e.updateMatrix();this.loadCamera(l,e);this.setupLights(l,f);i=0;for(o=f.__webGLObjects.length;i<o;i++){webGLObject=f.__webGLObjects[i];if(webGLObject.__object.visible){this.setupMatrices(webGLObject.__object,e);this.loadMatrices(l);this.renderPass(e,webGLObject.__object,webGLObject,THREE.NormalBlending,false)}}i=0;for(o=f.__webGLObjects.length;i<o;i++){webGLObject=
+f.__webGLObjects[i];if(webGLObject.__object.visible){this.setupMatrices(webGLObject.__object,e);this.loadMatrices(l);this.renderPass(e,webGLObject.__object,webGLObject,THREE.AdditiveBlending,false);this.renderPass(e,webGLObject.__object,webGLObject,THREE.SubtractiveBlending,false);this.renderPass(e,webGLObject.__object,webGLObject,THREE.AdditiveBlending,true);this.renderPass(e,webGLObject.__object,webGLObject,THREE.SubtractiveBlending,true);this.renderPass(e,webGLObject.__object,webGLObject,THREE.NormalBlending,
+true)}}};this.initWebGLObjects=function(f){var e,i,o,j,k;if(!f.__webGLObjects)f.__webGLObjects=[];e=0;for(i=f.objects.length;e<i;e++){o=f.objects[e];if(o instanceof THREE.Mesh)for(j in o.materialFaceGroup){k=o.materialFaceGroup[j];if(!k.__webGLVertexBuffer){this.createBuffers(o,j);k.__object=o;f.__webGLObjects.push(k)}}}};this.removeObject=function(f,e){var i,o;for(i=f.__webGLObjects.length-1;i>=0;i--){o=f.__webGLObjects[i].__object;e==o&&f.__webGLObjects.splice(i,1)}};this.setupMatrices=function(f,
+e){f.autoUpdateMatrix&&f.updateMatrix();C.multiply(e.matrix,f.matrix);w.set(e.matrix.flatten());D.set(C.flatten());O.set(e.projectionMatrix.flatten());E=THREE.Matrix4.makeInvert3x3(C).transpose();J.set(E.m);M.set(f.matrix.flatten())};this.loadMatrices=function(f){b.uniformMatrix4fv(f.uniforms.viewMatrix,false,w);b.uniformMatrix4fv(f.uniforms.modelViewMatrix,false,D);b.uniformMatrix4fv(f.uniforms.projectionMatrix,false,O);b.uniformMatrix3fv(f.uniforms.normalMatrix,false,J);b.uniformMatrix4fv(f.uniforms.objectMatrix,
+false,M)};this.loadCamera=function(f,e){b.uniform3f(f.uniforms.cameraPosition,e.position.x,e.position.y,e.position.z)};this.setBlending=function(f){switch(f){case THREE.AdditiveBlending:b.blendEquation(b.FUNC_ADD);b.blendFunc(b.ONE,b.ONE);break;case THREE.SubtractiveBlending:b.blendFunc(b.DST_COLOR,b.ZERO);break;default:b.blendEquation(b.FUNC_ADD);b.blendFunc(b.ONE,b.ONE_MINUS_SRC_ALPHA)}};this.setFaceCulling=function(f,e){if(f){!e||e=="ccw"?b.frontFace(b.CCW):b.frontFace(b.CW);if(f=="back")b.cullFace(b.BACK);
+else f=="front"?b.cullFace(b.FRONT):b.cullFace(b.FRONT_AND_BACK);b.enable(b.CULL_FACE)}else b.disable(b.CULL_FACE)}};THREE.RenderableFace3=function(){this.z=null;this.v1=new THREE.Vertex;this.v2=new THREE.Vertex;this.v3=new THREE.Vertex;this.centroidWorld=new THREE.Vector3;this.centroidScreen=new THREE.Vector3;this.normalWorld=new THREE.Vector3;this.vertexNormalsWorld=[];this.faceMaterial=this.meshMaterial=null;this.overdraw=false;this.uvs=[null,null,null]};
+THREE.RenderableParticle=function(){this.rotation=this.z=this.y=this.x=null;this.scale=new THREE.Vector2;this.material=null};THREE.RenderableLine=function(){this.z=null;this.v1=new THREE.Vertex;this.v2=new THREE.Vertex;this.material=null};

+ 205 - 206
build/ThreeExtras.js

@@ -1,206 +1,205 @@
-// ThreeExtras.js r29 - http://github.com/mrdoob/three.js
-var THREE=THREE||{};THREE.Color=function(a){this.autoUpdate=true;this.setHex(a)};
-THREE.Color.prototype={setRGB:function(a,b,d){this.r=a;this.g=b;this.b=d;if(this.autoUpdate){this.updateHex();this.updateStyleString()}},setHex:function(a){this.hex=~~a&16777215;if(this.autoUpdate){this.updateRGBA();this.updateStyleString()}},updateHex:function(){this.hex=~~(this.r*255)<<16^~~(this.g*255)<<8^~~(this.b*255)},updateRGBA:function(){this.r=(this.hex>>16&255)/255;this.g=(this.hex>>8&255)/255;this.b=(this.hex&255)/255},updateStyleString:function(){this.__styleString="rgb("+~~(this.r*255)+
-","+~~(this.g*255)+","+~~(this.b*255)+")"},toString:function(){return"THREE.Color ( r: "+this.r+", g: "+this.g+", b: "+this.b+", hex: "+this.hex+" )"}};THREE.Vector2=function(a,b){this.x=a||0;this.y=b||0};
-THREE.Vector2.prototype={set:function(a,b){this.x=a;this.y=b;return this},copy:function(a){this.x=a.x;this.y=a.y;return this},addSelf:function(a){this.x+=a.x;this.y+=a.y;return this},add:function(a,b){this.x=a.x+b.x;this.y=a.y+b.y;return this},subSelf:function(a){this.x-=a.x;this.y-=a.y;return this},sub:function(a,b){this.x=a.x-b.x;this.y=a.y-b.y;return this},multiplyScalar:function(a){this.x*=a;this.y*=a;return this},unit:function(){this.multiplyScalar(1/this.length());return this},length:function(){return Math.sqrt(this.x*
-this.x+this.y*this.y)},lengthSq:function(){return this.x*this.x+this.y*this.y},negate:function(){this.x=-this.x;this.y=-this.y;return this},clone:function(){return new THREE.Vector2(this.x,this.y)},toString:function(){return"THREE.Vector2 ("+this.x+", "+this.y+")"}};THREE.Vector3=function(a,b,d){this.x=a||0;this.y=b||0;this.z=d||0};
-THREE.Vector3.prototype={set:function(a,b,d){this.x=a;this.y=b;this.z=d;return this},copy:function(a){this.x=a.x;this.y=a.y;this.z=a.z;return this},add:function(a,b){this.x=a.x+b.x;this.y=a.y+b.y;this.z=a.z+b.z;return this},addSelf:function(a){this.x+=a.x;this.y+=a.y;this.z+=a.z;return this},addScalar:function(a){this.x+=a;this.y+=a;this.z+=a;return this},sub:function(a,b){this.x=a.x-b.x;this.y=a.y-b.y;this.z=a.z-b.z;return this},subSelf:function(a){this.x-=a.x;this.y-=a.y;this.z-=a.z;return this},
-cross:function(a,b){this.x=a.y*b.z-a.z*b.y;this.y=a.z*b.x-a.x*b.z;this.z=a.x*b.y-a.y*b.x;return this},crossSelf:function(a){var b=this.x,d=this.y,f=this.z;this.x=d*a.z-f*a.y;this.y=f*a.x-b*a.z;this.z=b*a.y-d*a.x;return this},multiplySelf:function(a){this.x*=a.x;this.y*=a.y;this.z*=a.z;return this},multiplyScalar:function(a){this.x*=a;this.y*=a;this.z*=a;return this},divideScalar:function(a){this.x/=a;this.y/=a;this.z/=a;return this},dot:function(a){return this.x*a.x+this.y*a.y+this.z*a.z},distanceTo:function(a){var b=
-this.x-a.x,d=this.y-a.y;a=this.z-a.z;return Math.sqrt(b*b+d*d+a*a)},distanceToSquared:function(a){var b=this.x-a.x,d=this.y-a.y;a=this.z-a.z;return b*b+d*d+a*a},length:function(){return Math.sqrt(this.x*this.x+this.y*this.y+this.z*this.z)},lengthSq:function(){return this.x*this.x+this.y*this.y+this.z*this.z},negate:function(){this.x=-this.x;this.y=-this.y;this.z=-this.z;return this},normalize:function(){var a=Math.sqrt(this.x*this.x+this.y*this.y+this.z*this.z);a>0?this.multiplyScalar(1/a):this.set(0,
-0,0);return this},setLength:function(a){return this.normalize().multiplyScalar(a)},isZero:function(){return Math.abs(this.x)<1.0E-4&&Math.abs(this.y)<1.0E-4&&Math.abs(this.z)<1.0E-4},clone:function(){return new THREE.Vector3(this.x,this.y,this.z)},toString:function(){return"THREE.Vector3 ( "+this.x+", "+this.y+", "+this.z+" )"}};THREE.Vector4=function(a,b,d,f){this.x=a||0;this.y=b||0;this.z=d||0;this.w=f||1};
-THREE.Vector4.prototype={set:function(a,b,d,f){this.x=a;this.y=b;this.z=d;this.w=f;return this},copy:function(a){this.x=a.x;this.y=a.y;this.z=a.z;this.w=a.w||1;return this},add:function(a,b){this.x=a.x+b.x;this.y=a.y+b.y;this.z=a.z+b.z;this.w=a.w+b.w;return this},addSelf:function(a){this.x+=a.x;this.y+=a.y;this.z+=a.z;this.w+=a.w;return this},sub:function(a,b){this.x=a.x-b.x;this.y=a.y-b.y;this.z=a.z-b.z;this.w=a.w-b.w;return this},subSelf:function(a){this.x-=a.x;this.y-=a.y;this.z-=a.z;this.w-=a.w;
-return this},multiplyScalar:function(a){this.x*=a;this.y*=a;this.z*=a;this.w*=a;return this},divideScalar:function(a){this.x/=a;this.y/=a;this.z/=a;this.w/=a;return this},lerpSelf:function(a,b){this.x+=(a.x-this.x)*b;this.y+=(a.y-this.y)*b;this.z+=(a.z-this.z)*b;this.w+=(a.w-this.w)*b},clone:function(){return new THREE.Vector4(this.x,this.y,this.z,this.w)},toString:function(){return"THREE.Vector4 ("+this.x+", "+this.y+", "+this.z+", "+this.w+")"}};
-THREE.Ray=function(a,b){this.origin=a||new THREE.Vector3;this.direction=b||new THREE.Vector3};
-THREE.Ray.prototype={intersectScene:function(a){var b,d,f=a.objects,g=[];a=0;for(b=f.length;a<b;a++){d=f[a];if(d instanceof THREE.Mesh)g=g.concat(this.intersectObject(d))}g.sort(function(i,k){return i.distance-k.distance});return g},intersectObject:function(a){function b(K,u,h,e){e=e.clone().subSelf(u);h=h.clone().subSelf(u);var m=K.clone().subSelf(u);K=e.dot(e);u=e.dot(h);e=e.dot(m);var r=h.dot(h);h=h.dot(m);m=1/(K*r-u*u);r=(r*e-u*h)*m;K=(K*h-u*e)*m;return r>0&&K>0&&r+K<1}var d,f,g,i,k,c,j,y,s,D,
-q,w=a.geometry,v=w.vertices,z=[];d=0;for(f=w.faces.length;d<f;d++){g=w.faces[d];D=this.origin.clone();q=this.direction.clone();i=a.matrix.transform(v[g.a].position.clone());k=a.matrix.transform(v[g.b].position.clone());c=a.matrix.transform(v[g.c].position.clone());j=g instanceof THREE.Face4?a.matrix.transform(v[g.d].position.clone()):null;y=a.rotationMatrix.transform(g.normal.clone());s=q.dot(y);if(s<0){y=y.dot((new THREE.Vector3).sub(i,D))/s;D=D.addSelf(q.multiplyScalar(y));if(g instanceof THREE.Face3){if(b(D,
-i,k,c)){g={distance:this.origin.distanceTo(D),point:D,face:g,object:a};z.push(g)}}else if(g instanceof THREE.Face4)if(b(D,i,k,j)||b(D,k,c,j)){g={distance:this.origin.distanceTo(D),point:D,face:g,object:a};z.push(g)}}}return z}};
-THREE.Rectangle=function(){function a(){i=f-b;k=g-d}var b,d,f,g,i,k,c=true;this.getX=function(){return b};this.getY=function(){return d};this.getWidth=function(){return i};this.getHeight=function(){return k};this.getLeft=function(){return b};this.getTop=function(){return d};this.getRight=function(){return f};this.getBottom=function(){return g};this.set=function(j,y,s,D){c=false;b=j;d=y;f=s;g=D;a()};this.addPoint=function(j,y){if(c){c=false;b=j;d=y;f=j;g=y}else{b=Math.min(b,j);d=Math.min(d,y);f=Math.max(f,
-j);g=Math.max(g,y)}a()};this.addRectangle=function(j){if(c){c=false;b=j.getLeft();d=j.getTop();f=j.getRight();g=j.getBottom()}else{b=Math.min(b,j.getLeft());d=Math.min(d,j.getTop());f=Math.max(f,j.getRight());g=Math.max(g,j.getBottom())}a()};this.inflate=function(j){b-=j;d-=j;f+=j;g+=j;a()};this.minSelf=function(j){b=Math.max(b,j.getLeft());d=Math.max(d,j.getTop());f=Math.min(f,j.getRight());g=Math.min(g,j.getBottom());a()};this.instersects=function(j){return Math.min(f,j.getRight())-Math.max(b,j.getLeft())>=
-0&&Math.min(g,j.getBottom())-Math.max(d,j.getTop())>=0};this.empty=function(){c=true;g=f=d=b=0;a()};this.isEmpty=function(){return c};this.toString=function(){return"THREE.Rectangle ( left: "+b+", right: "+f+", top: "+d+", bottom: "+g+", width: "+i+", height: "+k+" )"}};THREE.Matrix3=function(){this.m=[]};THREE.Matrix3.prototype={transpose:function(){var a;a=this.m[1];this.m[1]=this.m[3];this.m[3]=a;a=this.m[2];this.m[2]=this.m[6];this.m[6]=a;a=this.m[5];this.m[5]=this.m[7];this.m[7]=a;return this}};
-THREE.Matrix4=function(){};
-THREE.Matrix4.prototype={n11:1,n12:0,n13:0,n14:0,n21:0,n22:1,n23:0,n24:0,n31:0,n32:0,n33:1,n34:0,n41:0,n42:0,n43:0,n44:1,identity:function(){this.n11=1;this.n21=this.n14=this.n13=this.n12=0;this.n22=1;this.n32=this.n31=this.n24=this.n23=0;this.n33=1;this.n43=this.n42=this.n41=this.n34=0;this.n44=1},copy:function(a){this.n11=a.n11;this.n12=a.n12;this.n13=a.n13;this.n14=a.n14;this.n21=a.n21;this.n22=a.n22;this.n23=a.n23;this.n24=a.n24;this.n31=a.n31;this.n32=a.n32;this.n33=a.n33;this.n34=a.n34;this.n41=
-a.n41;this.n42=a.n42;this.n43=a.n43;this.n44=a.n44},lookAt:function(a,b,d){var f=new THREE.Vector3,g=new THREE.Vector3,i=new THREE.Vector3;i.sub(a,b).normalize();f.cross(d,i).normalize();g.cross(i,f).normalize();this.n11=f.x;this.n12=f.y;this.n13=f.z;this.n14=-f.dot(a);this.n21=g.x;this.n22=g.y;this.n23=g.z;this.n24=-g.dot(a);this.n31=i.x;this.n32=i.y;this.n33=i.z;this.n34=-i.dot(a);this.n43=this.n42=this.n41=0;this.n44=1},transform:function(a){var b=a.x,d=a.y,f=a.z,g=a.w||1;a.x=this.n11*b+this.n12*
-d+this.n13*f+this.n14*g;a.y=this.n21*b+this.n22*d+this.n23*f+this.n24*g;a.z=this.n31*b+this.n32*d+this.n33*f+this.n34*g;g=this.n41*b+this.n42*d+this.n43*f+this.n44*g;if(a.w)a.w=g;else{b=1/g;a.x*=b;a.y*=b;a.z*=b}return a},crossVector:function(a){var b=new THREE.Vector4;b.x=this.n11*a.x+this.n12*a.y+this.n13*a.z+this.n14*a.w;b.y=this.n21*a.x+this.n22*a.y+this.n23*a.z+this.n24*a.w;b.z=this.n31*a.x+this.n32*a.y+this.n33*a.z+this.n34*a.w;b.w=a.w?this.n41*a.x+this.n42*a.y+this.n43*a.z+this.n44*a.w:1;return b},
-multiply:function(a,b){this.n11=a.n11*b.n11+a.n12*b.n21+a.n13*b.n31+a.n14*b.n41;this.n12=a.n11*b.n12+a.n12*b.n22+a.n13*b.n32+a.n14*b.n42;this.n13=a.n11*b.n13+a.n12*b.n23+a.n13*b.n33+a.n14*b.n43;this.n14=a.n11*b.n14+a.n12*b.n24+a.n13*b.n34+a.n14*b.n44;this.n21=a.n21*b.n11+a.n22*b.n21+a.n23*b.n31+a.n24*b.n41;this.n22=a.n21*b.n12+a.n22*b.n22+a.n23*b.n32+a.n24*b.n42;this.n23=a.n21*b.n13+a.n22*b.n23+a.n23*b.n33+a.n24*b.n43;this.n24=a.n21*b.n14+a.n22*b.n24+a.n23*b.n34+a.n24*b.n44;this.n31=a.n31*b.n11+a.n32*
-b.n21+a.n33*b.n31+a.n34*b.n41;this.n32=a.n31*b.n12+a.n32*b.n22+a.n33*b.n32+a.n34*b.n42;this.n33=a.n31*b.n13+a.n32*b.n23+a.n33*b.n33+a.n34*b.n43;this.n34=a.n31*b.n14+a.n32*b.n24+a.n33*b.n34+a.n34*b.n44;this.n41=a.n41*b.n11+a.n42*b.n21+a.n43*b.n31+a.n44*b.n41;this.n42=a.n41*b.n12+a.n42*b.n22+a.n43*b.n32+a.n44*b.n42;this.n43=a.n41*b.n13+a.n42*b.n23+a.n43*b.n33+a.n44*b.n43;this.n44=a.n41*b.n14+a.n42*b.n24+a.n43*b.n34+a.n44*b.n44},multiplySelf:function(a){var b=this.n11,d=this.n12,f=this.n13,g=this.n14,
-i=this.n21,k=this.n22,c=this.n23,j=this.n24,y=this.n31,s=this.n32,D=this.n33,q=this.n34,w=this.n41,v=this.n42,z=this.n43,K=this.n44;this.n11=b*a.n11+d*a.n21+f*a.n31+g*a.n41;this.n12=b*a.n12+d*a.n22+f*a.n32+g*a.n42;this.n13=b*a.n13+d*a.n23+f*a.n33+g*a.n43;this.n14=b*a.n14+d*a.n24+f*a.n34+g*a.n44;this.n21=i*a.n11+k*a.n21+c*a.n31+j*a.n41;this.n22=i*a.n12+k*a.n22+c*a.n32+j*a.n42;this.n23=i*a.n13+k*a.n23+c*a.n33+j*a.n43;this.n24=i*a.n14+k*a.n24+c*a.n34+j*a.n44;this.n31=y*a.n11+s*a.n21+D*a.n31+q*a.n41;
-this.n32=y*a.n12+s*a.n22+D*a.n32+q*a.n42;this.n33=y*a.n13+s*a.n23+D*a.n33+q*a.n43;this.n34=y*a.n14+s*a.n24+D*a.n34+q*a.n44;this.n41=w*a.n11+v*a.n21+z*a.n31+K*a.n41;this.n42=w*a.n12+v*a.n22+z*a.n32+K*a.n42;this.n43=w*a.n13+v*a.n23+z*a.n33+K*a.n43;this.n44=w*a.n14+v*a.n24+z*a.n34+K*a.n44},multiplyScalar:function(a){this.n11*=a;this.n12*=a;this.n13*=a;this.n14*=a;this.n21*=a;this.n22*=a;this.n23*=a;this.n24*=a;this.n31*=a;this.n32*=a;this.n33*=a;this.n34*=a;this.n41*=a;this.n42*=a;this.n43*=a;this.n44*=
-a},determinant:function(){return this.n14*this.n23*this.n32*this.n41-this.n13*this.n24*this.n32*this.n41-this.n14*this.n22*this.n33*this.n41+this.n12*this.n24*this.n33*this.n41+this.n13*this.n22*this.n34*this.n41-this.n12*this.n23*this.n34*this.n41-this.n14*this.n23*this.n31*this.n42+this.n13*this.n24*this.n31*this.n42+this.n14*this.n21*this.n33*this.n42-this.n11*this.n24*this.n33*this.n42-this.n13*this.n21*this.n34*this.n42+this.n11*this.n23*this.n34*this.n42+this.n14*this.n22*this.n31*this.n43-
-this.n12*this.n24*this.n31*this.n43-this.n14*this.n21*this.n32*this.n43+this.n11*this.n24*this.n32*this.n43+this.n12*this.n21*this.n34*this.n43-this.n11*this.n22*this.n34*this.n43-this.n13*this.n22*this.n31*this.n44+this.n12*this.n23*this.n31*this.n44+this.n13*this.n21*this.n32*this.n44-this.n11*this.n23*this.n32*this.n44-this.n12*this.n21*this.n33*this.n44+this.n11*this.n22*this.n33*this.n44},transpose:function(){function a(b,d,f){var g=b[d];b[d]=b[f];b[f]=g}a(this,"n21","n12");a(this,"n31","n13");
-a(this,"n32","n23");a(this,"n41","n14");a(this,"n42","n24");a(this,"n43","n34");return this},clone:function(){var a=new THREE.Matrix4;a.n11=this.n11;a.n12=this.n12;a.n13=this.n13;a.n14=this.n14;a.n21=this.n21;a.n22=this.n22;a.n23=this.n23;a.n24=this.n24;a.n31=this.n31;a.n32=this.n32;a.n33=this.n33;a.n34=this.n34;a.n41=this.n41;a.n42=this.n42;a.n43=this.n43;a.n44=this.n44;return a},flatten:function(){return[this.n11,this.n21,this.n31,this.n41,this.n12,this.n22,this.n32,this.n42,this.n13,this.n23,this.n33,
-this.n43,this.n14,this.n24,this.n34,this.n44]},toString:function(){return"| "+this.n11+" "+this.n12+" "+this.n13+" "+this.n14+" |\n| "+this.n21+" "+this.n22+" "+this.n23+" "+this.n24+" |\n| "+this.n31+" "+this.n32+" "+this.n33+" "+this.n34+" |\n| "+this.n41+" "+this.n42+" "+this.n43+" "+this.n44+" |"}};THREE.Matrix4.translationMatrix=function(a,b,d){var f=new THREE.Matrix4;f.n14=a;f.n24=b;f.n34=d;return f};THREE.Matrix4.scaleMatrix=function(a,b,d){var f=new THREE.Matrix4;f.n11=a;f.n22=b;f.n33=d;return f};
-THREE.Matrix4.rotationXMatrix=function(a){var b=new THREE.Matrix4;b.n22=b.n33=Math.cos(a);b.n32=Math.sin(a);b.n23=-b.n32;return b};THREE.Matrix4.rotationYMatrix=function(a){var b=new THREE.Matrix4;b.n11=b.n33=Math.cos(a);b.n13=Math.sin(a);b.n31=-b.n13;return b};THREE.Matrix4.rotationZMatrix=function(a){var b=new THREE.Matrix4;b.n11=b.n22=Math.cos(a);b.n21=Math.sin(a);b.n12=-b.n21;return b};
-THREE.Matrix4.rotationAxisAngleMatrix=function(a,b){var d=new THREE.Matrix4,f=Math.cos(b),g=Math.sin(b),i=1-f,k=a.x,c=a.y,j=a.z;d.n11=i*k*k+f;d.n12=i*k*c-g*j;d.n13=i*k*j+g*c;d.n21=i*k*c+g*j;d.n22=i*c*c+f;d.n23=i*c*j-g*k;d.n31=i*k*j-g*c;d.n32=i*c*j+g*k;d.n33=i*j*j+f;return d};
-THREE.Matrix4.makeInvert=function(a){var b=new THREE.Matrix4;b.n11=a.n23*a.n34*a.n42-a.n24*a.n33*a.n42+a.n24*a.n32*a.n43-a.n22*a.n34*a.n43-a.n23*a.n32*a.n44+a.n22*a.n33*a.n44;b.n12=a.n14*a.n33*a.n42-a.n13*a.n34*a.n42-a.n14*a.n32*a.n43+a.n12*a.n34*a.n43+a.n13*a.n32*a.n44-a.n12*a.n33*a.n44;b.n13=a.n13*a.n24*a.n42-a.n14*a.n23*a.n42+a.n14*a.n22*a.n43-a.n12*a.n24*a.n43-a.n13*a.n22*a.n44+a.n12*a.n23*a.n44;b.n14=a.n14*a.n23*a.n32-a.n13*a.n24*a.n32-a.n14*a.n22*a.n33+a.n12*a.n24*a.n33+a.n13*a.n22*a.n34-a.n12*
-a.n23*a.n34;b.n21=a.n24*a.n33*a.n41-a.n23*a.n34*a.n41-a.n24*a.n31*a.n43+a.n21*a.n34*a.n43+a.n23*a.n31*a.n44-a.n21*a.n33*a.n44;b.n22=a.n13*a.n34*a.n41-a.n14*a.n33*a.n41+a.n14*a.n31*a.n43-a.n11*a.n34*a.n43-a.n13*a.n31*a.n44+a.n11*a.n33*a.n44;b.n23=a.n14*a.n23*a.n41-a.n13*a.n24*a.n41-a.n14*a.n21*a.n43+a.n11*a.n24*a.n43+a.n13*a.n21*a.n44-a.n11*a.n23*a.n44;b.n24=a.n13*a.n24*a.n31-a.n14*a.n23*a.n31+a.n14*a.n21*a.n33-a.n11*a.n24*a.n33-a.n13*a.n21*a.n34+a.n11*a.n23*a.n34;b.n31=a.n22*a.n34*a.n41-a.n24*a.n32*
-a.n41+a.n24*a.n31*a.n42-a.n21*a.n34*a.n42-a.n22*a.n31*a.n44+a.n21*a.n32*a.n44;b.n32=a.n14*a.n32*a.n41-a.n12*a.n34*a.n41-a.n14*a.n31*a.n42+a.n11*a.n34*a.n42+a.n12*a.n31*a.n44-a.n11*a.n32*a.n44;b.n33=a.n13*a.n24*a.n41-a.n14*a.n22*a.n41+a.n14*a.n21*a.n42-a.n11*a.n24*a.n42-a.n12*a.n21*a.n44+a.n11*a.n22*a.n44;b.n34=a.n14*a.n22*a.n31-a.n12*a.n24*a.n31-a.n14*a.n21*a.n32+a.n11*a.n24*a.n32+a.n12*a.n21*a.n34-a.n11*a.n22*a.n34;b.n41=a.n23*a.n32*a.n41-a.n22*a.n33*a.n41-a.n23*a.n31*a.n42+a.n21*a.n33*a.n42+a.n22*
-a.n31*a.n43-a.n21*a.n32*a.n43;b.n42=a.n12*a.n33*a.n41-a.n13*a.n32*a.n41+a.n13*a.n31*a.n42-a.n11*a.n33*a.n42-a.n12*a.n31*a.n43+a.n11*a.n32*a.n43;b.n43=a.n13*a.n22*a.n41-a.n12*a.n23*a.n41-a.n13*a.n21*a.n42+a.n11*a.n23*a.n42+a.n12*a.n21*a.n43-a.n11*a.n22*a.n43;b.n44=a.n12*a.n23*a.n31-a.n13*a.n22*a.n31+a.n13*a.n21*a.n32-a.n11*a.n23*a.n32-a.n12*a.n21*a.n33+a.n11*a.n22*a.n33;b.multiplyScalar(1/a.determinant());return b};
-THREE.Matrix4.makeInvert3x3=function(a){var b=a.flatten();a=new THREE.Matrix3;var d=b[10]*b[5]-b[6]*b[9],f=-b[10]*b[1]+b[2]*b[9],g=b[6]*b[1]-b[2]*b[5],i=-b[10]*b[4]+b[6]*b[8],k=b[10]*b[0]-b[2]*b[8],c=-b[6]*b[0]+b[2]*b[4],j=b[9]*b[4]-b[5]*b[8],y=-b[9]*b[0]+b[1]*b[8],s=b[5]*b[0]-b[1]*b[4];b=b[0]*d+b[1]*i+b[2]*j;if(b==0)throw"matrix not invertible";b=1/b;a.m[0]=b*d;a.m[1]=b*f;a.m[2]=b*g;a.m[3]=b*i;a.m[4]=b*k;a.m[5]=b*c;a.m[6]=b*j;a.m[7]=b*y;a.m[8]=b*s;return a};
-THREE.Matrix4.makeFrustum=function(a,b,d,f,g,i){var k,c,j;k=new THREE.Matrix4;c=2*g/(b-a);j=2*g/(f-d);a=(b+a)/(b-a);d=(f+d)/(f-d);f=-(i+g)/(i-g);g=-2*i*g/(i-g);k.n11=c;k.n12=0;k.n13=a;k.n14=0;k.n21=0;k.n22=j;k.n23=d;k.n24=0;k.n31=0;k.n32=0;k.n33=f;k.n34=g;k.n41=0;k.n42=0;k.n43=-1;k.n44=0;return k};THREE.Matrix4.makePerspective=function(a,b,d,f){var g;a=d*Math.tan(a*Math.PI/360);g=-a;return THREE.Matrix4.makeFrustum(g*b,a*b,g,a,d,f)};
-THREE.Matrix4.makeOrtho=function(a,b,d,f,g,i){var k,c,j,y;k=new THREE.Matrix4;c=b-a;j=d-f;y=i-g;a=(b+a)/c;d=(d+f)/j;g=(i+g)/y;k.n11=2/c;k.n12=0;k.n13=0;k.n14=-a;k.n21=0;k.n22=2/j;k.n23=0;k.n24=-d;k.n31=0;k.n32=0;k.n33=-2/y;k.n34=-g;k.n41=0;k.n42=0;k.n43=0;k.n44=1;return k};
-THREE.Vertex=function(a,b){this.position=a||new THREE.Vector3;this.positionWorld=new THREE.Vector3;this.positionScreen=new THREE.Vector4;this.normal=b||new THREE.Vector3;this.normalWorld=new THREE.Vector3;this.normalScreen=new THREE.Vector3;this.__visible=true};THREE.Vertex.prototype={toString:function(){return"THREE.Vertex ( position: "+this.position+", normal: "+this.normal+" )"}};
-THREE.Face3=function(a,b,d,f,g){this.a=a;this.b=b;this.c=d;this.centroid=new THREE.Vector3;this.normal=f instanceof THREE.Vector3?f:new THREE.Vector3;this.vertexNormals=f instanceof Array?f:[];this.material=g instanceof Array?g:[g]};THREE.Face3.prototype={toString:function(){return"THREE.Face3 ( "+this.a+", "+this.b+", "+this.c+" )"}};
-THREE.Face4=function(a,b,d,f,g,i){this.a=a;this.b=b;this.c=d;this.d=f;this.centroid=new THREE.Vector3;this.normal=g instanceof THREE.Vector3?g:new THREE.Vector3;this.vertexNormals=g instanceof Array?g:[];this.material=i instanceof Array?i:[i]};THREE.Face4.prototype={toString:function(){return"THREE.Face4 ( "+this.a+", "+this.b+", "+this.c+" "+this.d+" )"}};THREE.UV=function(a,b){this.u=a||0;this.v=b||0};
-THREE.UV.prototype={copy:function(a){this.u=a.u;this.v=a.v},toString:function(){return"THREE.UV ("+this.u+", "+this.v+")"}};THREE.Geometry=function(){this.vertices=[];this.faces=[];this.uvs=[]};
-THREE.Geometry.prototype={computeCentroids:function(){var a,b,d;a=0;for(b=this.faces.length;a<b;a++){d=this.faces[a];d.centroid.set(0,0,0);d.centroid.addSelf(this.vertices[d.a].position);d.centroid.addSelf(this.vertices[d.b].position);d.centroid.addSelf(this.vertices[d.c].position);if(d instanceof THREE.Face3)d.centroid.divideScalar(3);else if(d instanceof THREE.Face4){d.centroid.addSelf(this.vertices[d.d].position);d.centroid.divideScalar(4)}}},computeNormals:function(a){var b,d,f,g,i,k,c=new THREE.Vector3,
-j=new THREE.Vector3;f=0;for(g=this.vertices.length;f<g;f++){i=this.vertices[f];i.normal.set(0,0,0)}f=0;for(g=this.faces.length;f<g;f++){i=this.faces[f];if(a&&i.vertexNormals.length){c.set(0,0,0);b=0;for(d=i.normal.length;b<d;b++)c.addSelf(i.vertexNormals[b]);c.divideScalar(3)}else{b=this.vertices[i.a];d=this.vertices[i.b];k=this.vertices[i.c];c.sub(k.position,d.position);j.sub(b.position,d.position);c.crossSelf(j)}c.isZero()||c.normalize();i.normal.copy(c)}},computeBoundingBox:function(){if(this.vertices.length>
-0){this.bbox={x:[this.vertices[0].position.x,this.vertices[0].position.x],y:[this.vertices[0].position.y,this.vertices[0].position.y],z:[this.vertices[0].position.z,this.vertices[0].position.z]};for(var a=1,b=this.vertices.length;a<b;a++){vertex=this.vertices[a];if(vertex.position.x<this.bbox.x[0])this.bbox.x[0]=vertex.position.x;else if(vertex.position.x>this.bbox.x[1])this.bbox.x[1]=vertex.position.x;if(vertex.position.y<this.bbox.y[0])this.bbox.y[0]=vertex.position.y;else if(vertex.position.y>
-this.bbox.y[1])this.bbox.y[1]=vertex.position.y;if(vertex.position.z<this.bbox.z[0])this.bbox.z[0]=vertex.position.z;else if(vertex.position.z>this.bbox.z[1])this.bbox.z[1]=vertex.position.z}}},toString:function(){return"THREE.Geometry ( vertices: "+this.vertices+", faces: "+this.faces+" )"}};
-THREE.Camera=function(a,b,d,f){this.position=new THREE.Vector3(0,0,0);this.target={position:new THREE.Vector3(0,0,0)};this.up=new THREE.Vector3(0,1,0);this.matrix=new THREE.Matrix4;this.projectionMatrix=THREE.Matrix4.makePerspective(a,b,d,f);this.autoUpdateMatrix=true;this.updateMatrix=function(){this.matrix.lookAt(this.position,this.target.position,this.up)};this.toString=function(){return"THREE.Camera ( "+this.position+", "+this.target.position+" )"}};THREE.Light=function(a){this.color=new THREE.Color(a)};
-THREE.AmbientLight=function(a){THREE.Light.call(this,a)};THREE.AmbientLight.prototype=new THREE.Light;THREE.AmbientLight.prototype.constructor=THREE.AmbientLight;THREE.DirectionalLight=function(a,b){THREE.Light.call(this,a);this.position=new THREE.Vector3(0,1,0);this.intensity=b||1};THREE.DirectionalLight.prototype=new THREE.Light;THREE.DirectionalLight.prototype.constructor=THREE.DirectionalLight;
-THREE.PointLight=function(a,b){THREE.Light.call(this,a);this.position=new THREE.Vector3;this.intensity=b||1};THREE.DirectionalLight.prototype=new THREE.Light;THREE.DirectionalLight.prototype.constructor=THREE.PointLight;
-THREE.Object3D=function(){this.position=new THREE.Vector3;this.rotation=new THREE.Vector3;this.scale=new THREE.Vector3(1,1,1);this.matrix=new THREE.Matrix4;this.translationMatrix=new THREE.Matrix4;this.rotationMatrix=new THREE.Matrix4;this.scaleMatrix=new THREE.Matrix4;this.screen=new THREE.Vector3;this.autoUpdateMatrix=this.visible=true;this.updateMatrix=function(){this.matrixPosition=THREE.Matrix4.translationMatrix(this.position.x,this.position.y,this.position.z);this.rotationMatrix=THREE.Matrix4.rotationXMatrix(this.rotation.x);
-this.rotationMatrix.multiplySelf(THREE.Matrix4.rotationYMatrix(this.rotation.y));this.rotationMatrix.multiplySelf(THREE.Matrix4.rotationZMatrix(this.rotation.z));this.scaleMatrix=THREE.Matrix4.scaleMatrix(this.scale.x,this.scale.y,this.scale.z);this.matrix.copy(this.matrixPosition);this.matrix.multiplySelf(this.rotationMatrix);this.matrix.multiplySelf(this.scaleMatrix)}};THREE.Particle=function(a){THREE.Object3D.call(this);this.material=a instanceof Array?a:[a];this.autoUpdateMatrix=false};
-THREE.Particle.prototype=new THREE.Object3D;THREE.Particle.prototype.constructor=THREE.Particle;THREE.Line=function(a,b){THREE.Object3D.call(this);this.geometry=a;this.material=b instanceof Array?b:[b]};THREE.Line.prototype=new THREE.Object3D;THREE.Line.prototype.constructor=THREE.Line;
-THREE.Mesh=function(a,b,d){THREE.Object3D.call(this);this.geometry=a;this.material=b instanceof Array?b:[b];this.overdraw=this.doubleSided=this.flipSided=false;this.materialFaceGroup={};this.sortFacesByMaterial();d&&this.normalizeUVs();this.geometry.computeBoundingBox()};THREE.Mesh.prototype=new THREE.Object3D;THREE.Mesh.prototype.constructor=THREE.Mesh;
-THREE.Mesh.prototype.sortFacesByMaterial=function(){function a(s){var D=[];b=0;for(d=s.length;b<d;b++)s[b]==undefined?D.push("undefined"):D.push(s[b].toString());return D.join("_")}var b,d,f,g,i,k,c,j,y={};f=0;for(g=this.geometry.faces.length;f<g;f++){i=this.geometry.faces[f];k=i.material;c=a(k);if(y[c]==undefined)y[c]={hash:c,counter:0};j=y[c].hash+"_"+y[c].counter;if(this.materialFaceGroup[j]==undefined)this.materialFaceGroup[j]={faces:[],material:k,vertices:0};i=i instanceof THREE.Face3?3:4;if(this.materialFaceGroup[j].vertices+
-i>65535){y[c].counter+=1;j=y[c].hash+"_"+y[c].counter;if(this.materialFaceGroup[j]==undefined)this.materialFaceGroup[j]={faces:[],material:k,vertices:0}}this.materialFaceGroup[j].faces.push(f);this.materialFaceGroup[j].vertices+=i}};THREE.Mesh.prototype.normalizeUVs=function(){var a,b,d,f,g;a=0;for(b=this.geometry.uvs.length;a<b;a++){g=this.geometry.uvs[a];d=0;for(f=g.length;d<f;d++){if(g[d].u!=1)g[d].u-=Math.floor(g[d].u);if(g[d].v!=1)g[d].v-=Math.floor(g[d].v)}}};THREE.FlatShading=0;
-THREE.SmoothShading=1;THREE.NormalBlending=0;THREE.AdditiveBlending=1;THREE.SubtractiveBlending=2;
-THREE.LineBasicMaterial=function(a){this.color=new THREE.Color(16711680);this.opacity=1;this.blending=THREE.NormalBlending;this.linewidth=1;this.linejoin=this.linecap="round";if(a){a.color!==undefined&&this.color.setHex(a.color);if(a.opacity!==undefined)this.opacity=a.opacity;if(a.blending!==undefined)this.blending=a.blending;if(a.linewidth!==undefined)this.linewidth=a.linewidth;if(a.linecap!==undefined)this.linecap=a.linecap;if(a.linejoin!==undefined)this.linejoin=a.linejoin}this.toString=function(){return"THREE.LineBasicMaterial (<br/>color: "+
-this.color+"<br/>opacity: "+this.opacity+"<br/>blending: "+this.blending+"<br/>linewidth: "+this.linewidth+"<br/>linecap: "+this.linecap+"<br/>linejoin: "+this.linejoin+"<br/>)"}};
-THREE.MeshBasicMaterial=function(a){this.id=THREE.MeshBasicMaterialCounter.value++;this.color=new THREE.Color(15658734);this.env_map=this.map=null;this.combine=THREE.Multiply;this.reflectivity=1;this.refraction_ratio=0.98;this.opacity=1;this.shading=THREE.SmoothShading;this.blending=THREE.NormalBlending;this.wireframe=false;this.wireframe_linewidth=1;this.wireframe_linejoin=this.wireframe_linecap="round";if(a){a.color!==undefined&&this.color.setHex(a.color);if(a.map!==undefined)this.map=a.map;if(a.env_map!==
-undefined)this.env_map=a.env_map;if(a.combine!==undefined)this.combine=a.combine;if(a.reflectivity!==undefined)this.reflectivity=a.reflectivity;if(a.refraction_ratio!==undefined)this.refraction_ratio=a.refraction_ratio;if(a.opacity!==undefined)this.opacity=a.opacity;if(a.shading!==undefined)this.shading=a.shading;if(a.blending!==undefined)this.blending=a.blending;if(a.wireframe!==undefined)this.wireframe=a.wireframe;if(a.wireframe_linewidth!==undefined)this.wireframe_linewidth=a.wireframe_linewidth;
-if(a.wireframe_linecap!==undefined)this.wireframe_linecap=a.wireframe_linecap;if(a.wireframe_linejoin!==undefined)this.wireframe_linejoin=a.wireframe_linejoin}this.toString=function(){return"THREE.MeshBasicMaterial (<br/>id: "+this.id+"<br/>color: "+this.color+"<br/>map: "+this.map+"<br/>env_map: "+this.env_map+"<br/>combine: "+this.combine+"<br/>reflectivity: "+this.reflectivity+"<br/>refraction_ratio: "+this.refraction_ratio+"<br/>opacity: "+this.opacity+"<br/>blending: "+this.blending+"<br/>wireframe: "+
-this.wireframe+"<br/>wireframe_linewidth: "+this.wireframe_linewidth+"<br/>wireframe_linecap: "+this.wireframe_linecap+"<br/>wireframe_linejoin: "+this.wireframe_linejoin+"<br/>)"}};THREE.MeshBasicMaterialCounter={value:0};
-THREE.MeshLambertMaterial=function(a){this.id=THREE.MeshLambertMaterialCounter.value++;this.color=new THREE.Color(15658734);this.env_map=this.map=null;this.combine=THREE.Multiply;this.reflectivity=1;this.refraction_ratio=0.98;this.opacity=1;this.shading=THREE.SmoothShading;this.blending=THREE.NormalBlending;this.wireframe=false;this.wireframe_linewidth=1;this.wireframe_linejoin=this.wireframe_linecap="round";if(a){a.color!==undefined&&this.color.setHex(a.color);if(a.map!==undefined)this.map=a.map;
-if(a.env_map!==undefined)this.env_map=a.env_map;if(a.combine!==undefined)this.combine=a.combine;if(a.reflectivity!==undefined)this.reflectivity=a.reflectivity;if(a.refraction_ratio!==undefined)this.refraction_ratio=a.refraction_ratio;if(a.opacity!==undefined)this.opacity=a.opacity;if(a.shading!==undefined)this.shading=a.shading;if(a.blending!==undefined)this.blending=a.blending;if(a.wireframe!==undefined)this.wireframe=a.wireframe;if(a.wireframe_linewidth!==undefined)this.wireframe_linewidth=a.wireframe_linewidth;
-if(a.wireframe_linecap!==undefined)this.wireframe_linecap=a.wireframe_linecap;if(a.wireframe_linejoin!==undefined)this.wireframe_linejoin=a.wireframe_linejoin}this.toString=function(){return"THREE.MeshLambertMaterial (<br/>id: "+this.id+"<br/>color: "+this.color+"<br/>map: "+this.map+"<br/>env_map: "+this.env_map+"<br/>combine: "+this.combine+"<br/>reflectivity: "+this.reflectivity+"<br/>refraction_ratio: "+this.refraction_ratio+"<br/>opacity: "+this.opacity+"<br/>shading: "+this.shading+"<br/>blending: "+
-this.blending+"<br/>wireframe: "+this.wireframe+"<br/>wireframe_linewidth: "+this.wireframe_linewidth+"<br/>wireframe_linecap: "+this.wireframe_linecap+"<br/>wireframe_linejoin: "+this.wireframe_linejoin+"<br/> )"}};THREE.MeshLambertMaterialCounter={value:0};
-THREE.MeshPhongMaterial=function(a){this.id=THREE.MeshPhongMaterialCounter.value++;this.color=new THREE.Color(15658734);this.ambient=new THREE.Color(328965);this.specular=new THREE.Color(1118481);this.shininess=30;this.env_map=this.specular_map=this.map=null;this.combine=THREE.Multiply;this.reflectivity=1;this.refraction_ratio=0.98;this.opacity=1;this.shading=THREE.SmoothShading;this.blending=THREE.NormalBlending;this.wireframe=false;this.wireframe_linewidth=1;this.wireframe_linejoin=this.wireframe_linecap=
-"round";if(a){if(a.color!==undefined)this.color=new THREE.Color(a.color);if(a.ambient!==undefined)this.ambient=new THREE.Color(a.ambient);if(a.specular!==undefined)this.specular=new THREE.Color(a.specular);if(a.shininess!==undefined)this.shininess=a.shininess;if(a.map!==undefined)this.map=a.map;if(a.specular_map!==undefined)this.specular_map=a.specular_map;if(a.env_map!==undefined)this.env_map=a.env_map;if(a.combine!==undefined)this.combine=a.combine;if(a.reflectivity!==undefined)this.reflectivity=
-a.reflectivity;if(a.refraction_ratio!==undefined)this.refraction_ratio=a.refraction_ratio;if(a.opacity!==undefined)this.opacity=a.opacity;if(a.shading!==undefined)this.shading=a.shading;if(a.blending!==undefined)this.blending=a.blending;if(a.wireframe!==undefined)this.wireframe=a.wireframe;if(a.wireframe_linewidth!==undefined)this.wireframe_linewidth=a.wireframe_linewidth;if(a.wireframe_linecap!==undefined)this.wireframe_linecap=a.wireframe_linecap;if(a.wireframe_linejoin!==undefined)this.wireframe_linejoin=
-a.wireframe_linejoin}this.toString=function(){return"THREE.MeshPhongMaterial (<br/>id: "+this.id+"<br/>color: "+this.color+"<br/>ambient: "+this.ambient+"<br/>specular: "+this.specular+"<br/>shininess: "+this.shininess+"<br/>map: "+this.map+"<br/>specular_map: "+this.specular_map+"<br/>env_map: "+this.env_map+"<br/>combine: "+this.combine+"<br/>reflectivity: "+this.reflectivity+"<br/>refraction_ratio: "+this.refraction_ratio+"<br/>opacity: "+this.opacity+"<br/>shading: "+this.shading+"<br/>wireframe: "+
-this.wireframe+"<br/>wireframe_linewidth: "+this.wireframe_linewidth+"<br/>wireframe_linecap: "+this.wireframe_linecap+"<br/>wireframe_linejoin: "+this.wireframe_linejoin+"<br/>"+ +")"}};THREE.MeshPhongMaterialCounter={value:0};
-THREE.MeshDepthMaterial=function(a){this.near=1;this.far=1E3;this.opacity=1;this.blending=THREE.NormalBlending;if(a){if(a.near!==undefined)this.near=a.near;if(a.far!==undefined)this.far=a.far;if(a.opacity!==undefined)this.opacity=a.opacity;if(a.blending!==undefined)this.blending=a.blending}this.__2near=2*this.near;this.__farPlusNear=this.far+this.near;this.__farMinusNear=this.far-this.near;this.toString=function(){return"THREE.MeshDepthMaterial"}};
-THREE.MeshNormalMaterial=function(a){this.opacity=1;this.shading=THREE.FlatShading;this.blending=THREE.NormalBlending;if(a){if(a.opacity!==undefined)this.opacity=a.opacity;if(a.shading!==undefined)this.shading=a.shading;if(a.blending!==undefined)this.blending=a.blending}this.toString=function(){return"THREE.MeshNormalMaterial"}};THREE.MeshFaceMaterial=function(){this.toString=function(){return"THREE.MeshFaceMaterial"}};
-THREE.MeshCubeMaterial=function(a){this.id=THREE.MeshCubeMaterial.value++;this.env_map=null;this.blending=THREE.NormalBlending;if(a)if(a.env_map!==undefined)this.env_map=a.env_map;this.toString=function(){return"THREE.MeshCubeMaterial( id: "+this.id+"<br/>env_map: "+this.env_map+" )"}};THREE.MeshCubeMaterialCounter={value:0};
-THREE.MeshShaderMaterial=function(a){this.id=THREE.MeshShaderMaterialCounter.value++;this.vertex_shader=this.fragment_shader="void main() {}";this.uniforms={};this.shading=THREE.SmoothShading;this.blending=THREE.NormalBlending;this.wireframe=false;this.wireframe_linewidth=1;this.wireframe_linejoin=this.wireframe_linecap="round";if(a){if(a.fragment_shader!==undefined)this.fragment_shader=a.fragment_shader;if(a.vertex_shader!==undefined)this.vertex_shader=a.vertex_shader;if(a.uniforms!==undefined)this.uniforms=
-a.uniforms;if(a.shading!==undefined)this.shading=a.shading;if(a.blending!==undefined)this.blending=a.blending;if(a.wireframe!==undefined)this.wireframe=a.wireframe;if(a.wireframe_linewidth!==undefined)this.wireframe_linewidth=a.wireframe_linewidth;if(a.wireframe_linecap!==undefined)this.wireframe_linecap=a.wireframe_linecap;if(a.wireframe_linejoin!==undefined)this.wireframe_linejoin=a.wireframe_linejoin}this.toString=function(){return"THREE.MeshShaderMaterial (<br/>id: "+this.id+"<br/>blending: "+
-this.blending+"<br/>wireframe: "+this.wireframe+"<br/>wireframe_linewidth: "+this.wireframe_linewidth+"<br/>wireframe_linecap: "+this.wireframe_linecap+"<br/>wireframe_linejoin: "+this.wireframe_linejoin+"<br/>)"}};THREE.MeshShaderMaterialCounter={value:0};
-THREE.ParticleBasicMaterial=function(a){this.color=new THREE.Color(16711680);this.map=null;this.opacity=1;this.blending=THREE.NormalBlending;this.offset=new THREE.Vector2;if(a){a.color!==undefined&&this.color.setHex(a.color);if(a.map!==undefined)this.map=a.map;if(a.opacity!==undefined)this.opacity=a.opacity;if(a.blending!==undefined)this.blending=a.blending}this.toString=function(){return"THREE.ParticleBasicMaterial (<br/>color: "+this.color+"<br/>map: "+this.map+"<br/>opacity: "+this.opacity+"<br/>blending: "+
-this.blending+"<br/>)"}};THREE.ParticleCircleMaterial=function(a){this.color=new THREE.Color(16711680);this.opacity=1;this.blending=THREE.NormalBlending;if(a){a.color!==undefined&&this.color.setHex(a.color);if(a.opacity!==undefined)this.opacity=a.opacity;if(a.blending!==undefined)this.blending=a.blending}this.toString=function(){return"THREE.ParticleCircleMaterial (<br/>color: "+this.color+"<br/>opacity: "+this.opacity+"<br/>blending: "+this.blending+"<br/>)"}};
-THREE.ParticleDOMMaterial=function(a){this.domElement=a;this.toString=function(){return"THREE.ParticleDOMMaterial ( domElement: "+this.domElement+" )"}};THREE.Texture=function(a,b,d,f){this.image=a;this.loaded=false;this.mapping=b!==undefined?b:THREE.UVMapping;this.wrap_s=d!==undefined?d:THREE.ClampToEdge;this.wrap_t=f!==undefined?f:THREE.ClampToEdge;this.toString=function(){return"THREE.Texture (<br/>image: "+this.image+"<br/>wrap_s: "+this.wrap_s+"<br/>wrap_t: "+this.wrap_t+"<br/>)"}};
-THREE.UVMapping=0;THREE.ReflectionMap=1;THREE.RefractionMap=2;THREE.Multiply=0;THREE.Mix=1;THREE.Repeat=0;THREE.ClampToEdge=1;THREE.MirroredRepeat=2;THREE.TextureCube=function(a,b){this.image=a;this.mapping=b?b:THREE.ReflectionMap;this.toString=function(){return"THREE.TextureCube (<br/>image: "+this.image+"<br/>mapping: "+this.mapping+"<br/>)"}};
-THREE.Scene=function(){this.objects=[];this.lights=[];this.addObject=function(a){this.objects.push(a)};this.removeObject=function(a){a=this.objects.indexOf(a);a!==-1&&this.objects.splice(a,1)};this.addLight=function(a){this.lights.push(a)};this.removeLight=function(a){a=this.lights.indexOf(a);a!==-1&&this.lights.splice(a,1)};this.toString=function(){return"THREE.Scene ( "+this.objects+" )"}};
-THREE.Projector=function(){function a(h,e){var m=0,r=1,p=h.z+h.w,o=e.z+e.w,x=-h.z+h.w,C=-e.z+e.w;if(p>=0&&o>=0&&x>=0&&C>=0)return true;else if(p<0&&o<0||x<0&&C<0)return false;else{if(p<0)m=Math.max(m,p/(p-o));else if(o<0)r=Math.min(r,p/(p-o));if(x<0)m=Math.max(m,x/(x-C));else if(C<0)r=Math.min(r,x/(x-C));if(r<m)return false;else{h.lerpSelf(e,m);e.lerpSelf(h,1-r);return true}}}var b=null,d,f,g,i=[],k,c,j=[],y,s,D=[],q=new THREE.Vector4,w=new THREE.Matrix4,v=new THREE.Matrix4,z=new THREE.Vector4,K=
-new THREE.Vector4,u;this.projectScene=function(h,e){var m,r,p,o,x,C,S,B,V,G,E,W,O,I,A,L,T;b=[];g=_face4Count=c=s=0;e.autoUpdateMatrix&&e.updateMatrix();w.multiply(e.projectionMatrix,e.matrix);S=h.objects;m=0;for(r=S.length;m<r;m++){B=S[m];B.autoUpdateMatrix&&B.updateMatrix();V=B.matrix;G=B.rotationMatrix;E=B.material;W=B.overdraw;if(B instanceof THREE.Mesh){O=B.geometry.vertices;p=0;for(o=O.length;p<o;p++){I=O[p];I.positionWorld.copy(I.position);V.transform(I.positionWorld);A=I.positionScreen;A.copy(I.positionWorld);
-w.transform(A);A.multiplyScalar(1/A.w);I.__visible=A.z>0&&A.z<1}I=B.geometry.faces;p=0;for(o=I.length;p<o;p++){A=I[p];if(A instanceof THREE.Face3){x=O[A.a];C=O[A.b];L=O[A.c];if(x.__visible&&C.__visible&&L.__visible)if(B.doubleSided||B.flipSided!=(L.positionScreen.x-x.positionScreen.x)*(C.positionScreen.y-x.positionScreen.y)-(L.positionScreen.y-x.positionScreen.y)*(C.positionScreen.x-x.positionScreen.x)<0){d=i[g]=i[g]||new THREE.RenderableFace3;d.v1.positionWorld.copy(x.positionWorld);d.v2.positionWorld.copy(C.positionWorld);
-d.v3.positionWorld.copy(L.positionWorld);d.v1.positionScreen.copy(x.positionScreen);d.v2.positionScreen.copy(C.positionScreen);d.v3.positionScreen.copy(L.positionScreen);d.normalWorld.copy(A.normal);G.transform(d.normalWorld);d.centroidWorld.copy(A.centroid);V.transform(d.centroidWorld);d.centroidScreen.copy(d.centroidWorld);w.transform(d.centroidScreen);L=A.vertexNormals;u=d.vertexNormalsWorld;x=0;for(C=L.length;x<C;x++){T=u[x].copy(L[x]);G.transform(T)}d.z=d.centroidScreen.z;d.meshMaterial=E;d.faceMaterial=
-A.material;d.overdraw=W;if(B.geometry.uvs[p]){d.uvs[0]=B.geometry.uvs[p][0];d.uvs[1]=B.geometry.uvs[p][1];d.uvs[2]=B.geometry.uvs[p][2]}b.push(d);g++}}else if(A instanceof THREE.Face4){x=O[A.a];C=O[A.b];L=O[A.c];T=O[A.d];if(x.__visible&&C.__visible&&L.__visible&&T.__visible)if(B.doubleSided||B.flipSided!=((T.positionScreen.x-x.positionScreen.x)*(C.positionScreen.y-x.positionScreen.y)-(T.positionScreen.y-x.positionScreen.y)*(C.positionScreen.x-x.positionScreen.x)<0||(C.positionScreen.x-L.positionScreen.x)*
-(T.positionScreen.y-L.positionScreen.y)-(C.positionScreen.y-L.positionScreen.y)*(T.positionScreen.x-L.positionScreen.x)<0)){d=i[g]=i[g]||new THREE.RenderableFace3;d.v1.positionWorld.copy(x.positionWorld);d.v2.positionWorld.copy(C.positionWorld);d.v3.positionWorld.copy(T.positionWorld);d.v1.positionScreen.copy(x.positionScreen);d.v2.positionScreen.copy(C.positionScreen);d.v3.positionScreen.copy(T.positionScreen);d.normalWorld.copy(A.normal);G.transform(d.normalWorld);d.centroidWorld.copy(A.centroid);
-V.transform(d.centroidWorld);d.centroidScreen.copy(d.centroidWorld);w.transform(d.centroidScreen);d.z=d.centroidScreen.z;d.meshMaterial=E;d.faceMaterial=A.material;d.overdraw=W;if(B.geometry.uvs[p]){d.uvs[0]=B.geometry.uvs[p][0];d.uvs[1]=B.geometry.uvs[p][1];d.uvs[2]=B.geometry.uvs[p][3]}b.push(d);g++;f=i[g]=i[g]||new THREE.RenderableFace3;f.v1.positionWorld.copy(C.positionWorld);f.v2.positionWorld.copy(L.positionWorld);f.v3.positionWorld.copy(T.positionWorld);f.v1.positionScreen.copy(C.positionScreen);
-f.v2.positionScreen.copy(L.positionScreen);f.v3.positionScreen.copy(T.positionScreen);f.normalWorld.copy(d.normalWorld);f.centroidWorld.copy(d.centroidWorld);f.centroidScreen.copy(d.centroidScreen);f.z=f.centroidScreen.z;f.meshMaterial=E;f.faceMaterial=A.material;f.overdraw=W;if(B.geometry.uvs[p]){f.uvs[0]=B.geometry.uvs[p][1];f.uvs[1]=B.geometry.uvs[p][2];f.uvs[2]=B.geometry.uvs[p][3]}b.push(f);g++}}}}else if(B instanceof THREE.Line){v.multiply(w,V);O=B.geometry.vertices;I=O[0];I.positionScreen.copy(I.position);
-v.transform(I.positionScreen);p=1;for(o=O.length;p<o;p++){x=O[p];x.positionScreen.copy(x.position);v.transform(x.positionScreen);C=O[p-1];z.copy(x.positionScreen);K.copy(C.positionScreen);if(a(z,K)){z.multiplyScalar(1/z.w);K.multiplyScalar(1/K.w);k=j[c]=j[c]||new THREE.RenderableLine;k.v1.positionScreen.copy(z);k.v2.positionScreen.copy(K);k.z=Math.max(z.z,K.z);k.material=B.material;b.push(k);c++}}}else if(B instanceof THREE.Particle){q.set(B.position.x,B.position.y,B.position.z,1);w.transform(q);
-q.z/=q.w;if(q.z>0&&q.z<1){y=D[s]=D[s]||new THREE.RenderableParticle;y.x=q.x/q.w;y.y=q.y/q.w;y.z=q.z;y.rotation=B.rotation.z;y.scale.x=B.scale.x*Math.abs(y.x-(q.x+e.projectionMatrix.n11)/(q.w+e.projectionMatrix.n14));y.scale.y=B.scale.y*Math.abs(y.y-(q.y+e.projectionMatrix.n22)/(q.w+e.projectionMatrix.n24));y.material=B.material;b.push(y);s++}}}b.sort(function($,M){return M.z-$.z});return b};this.unprojectVector=function(h,e){var m=new THREE.Matrix4;m.multiply(THREE.Matrix4.makeInvert(e.matrix),THREE.Matrix4.makeInvert(e.projectionMatrix));
-m.transform(h);return h}};
-THREE.DOMRenderer=function(){THREE.Renderer.call(this);var a=null,b=new THREE.Projector,d,f,g,i;this.domElement=document.createElement("div");this.setSize=function(k,c){d=k;f=c;g=d/2;i=f/2};this.render=function(k,c){var j,y,s,D,q,w,v,z;a=b.projectScene(k,c);j=0;for(y=a.length;j<y;j++){q=a[j];if(q instanceof THREE.RenderableParticle){v=q.x*g+g;z=q.y*i+i;s=0;for(D=q.material.length;s<D;s++){w=q.material[s];if(w instanceof THREE.ParticleDOMMaterial){w=w.domElement;w.style.left=v+"px";w.style.top=z+"px"}}}}}};
-THREE.CanvasRenderer=function(){function a(P,aa,Y,N){var F,R,da,U,Z=P.lights;P=0;for(F=Z.length;P<F;P++){R=Z[P];da=R.color;U=R.intensity;if(R instanceof THREE.DirectionalLight){R=Y.dot(R.position)*U;if(R>0){N.r+=da.r*R;N.g+=da.g*R;N.b+=da.b*R}}else if(R instanceof THREE.PointLight){sa.sub(R.position,aa);sa.normalize();R=Y.dot(sa)*U;if(R>0){N.r+=da.r*R;N.g+=da.g*R;N.b+=da.b*R}}}}function b(P,aa,Y,N,F,R){if(F.opacity!=0){i(F.opacity);k(F.blending);S=P.positionScreen.x;B=P.positionScreen.y;V=aa.positionScreen.x;
-G=aa.positionScreen.y;E=Y.positionScreen.x;W=Y.positionScreen.y;var da=S,U=B,Z=V,ea=G,ca=E,ga=W;u.beginPath();u.moveTo(da,U);u.lineTo(Z,ea);u.lineTo(ca,ga);u.lineTo(da,U);u.closePath();if(F instanceof THREE.MeshBasicMaterial)if(F.map)g(S,B,V,G,E,W,F.map.image,N.uvs[0].u,N.uvs[0].v,N.uvs[1].u,N.uvs[1].v,N.uvs[2].u,N.uvs[2].v);else F.wireframe?d(F.color.__styleString,F.wireframe_linewidth):f(F.color.__styleString);else if(F instanceof THREE.MeshLambertMaterial){if(F.map&&!F.wireframe){g(S,B,V,G,E,W,
-F.map.image,N.uvs[0].u,N.uvs[0].v,N.uvs[1].u,N.uvs[1].v,N.uvs[2].u,N.uvs[2].v);k(THREE.SubtractiveBlending)}if(H)if(F.shading==THREE.SmoothShading&&!F.wireframe){I.r=A.r=L.r=ba.r;I.g=A.g=L.g=ba.g;I.b=A.b=L.b=ba.b;a(R,N.v1.positionWorld,N.vertexNormalsWorld[0],I);a(R,N.v2.positionWorld,N.vertexNormalsWorld[1],A);a(R,N.v3.positionWorld,N.vertexNormalsWorld[2],L);T.r=(A.r+L.r)*0.5;T.g=(A.g+L.g)*0.5;T.b=(A.b+L.b)*0.5;X=c(I,A,L,T);g(S,B,V,G,E,W,X,0,0,1,0,0,1)}else{Q.r=ba.r;Q.g=ba.g;Q.b=ba.b;a(R,N.centroidWorld,
-N.normalWorld,Q);O.r=F.color.r*Q.r;O.g=F.color.g*Q.g;O.b=F.color.b*Q.b;O.updateStyleString();F.wireframe?d(O.__styleString,F.wireframe_linewidth):f(O.__styleString)}else F.wireframe?d(F.color.__styleString,F.wireframe_linewidth):f(F.color.__styleString)}else if(F instanceof THREE.MeshDepthMaterial){$=F.__2near;M=F.__farPlusNear;J=F.__farMinusNear;I.r=I.g=I.b=1-$/(M-P.positionScreen.z*J);A.r=A.g=A.b=1-$/(M-aa.positionScreen.z*J);L.r=L.g=L.b=1-$/(M-Y.positionScreen.z*J);T.r=(A.r+L.r)*0.5;T.g=(A.g+L.g)*
-0.5;T.b=(A.b+L.b)*0.5;X=c(I,A,L,T);g(S,B,V,G,E,W,X,0,0,1,0,0,1)}else if(F instanceof THREE.MeshNormalMaterial){O.r=j(N.normalWorld.x);O.g=j(N.normalWorld.y);O.b=j(N.normalWorld.z);O.updateStyleString();F.wireframe?d(O.__styleString,F.wireframe_linewidth):f(O.__styleString)}}}function d(P,aa){if(m!=P)u.strokeStyle=m=P;if(p!=aa)u.lineWidth=p=aa;u.stroke()}function f(P){if(r!=P)u.fillStyle=r=P;u.fill()}function g(P,aa,Y,N,F,R,da,U,Z,ea,ca,ga,la){var ja=da.width-1,ha=da.height-1;U*=ja;Z*=ha;ea*=ja;ca*=
-ha;ga*=ja;la*=ha;Y-=P;N-=aa;F-=P;R-=aa;ea-=U;ca-=Z;ga-=U;la-=Z;ha=1/(ea*la-ga*ca);ja=(la*Y-ca*F)*ha;ca=(la*N-ca*R)*ha;Y=(ea*F-ga*Y)*ha;N=(ea*R-ga*N)*ha;P=P-ja*U-Y*Z;aa=aa-ca*U-N*Z;u.save();u.transform(ja,ca,Y,N,P,aa);u.clip();u.drawImage(da,0,0);u.restore()}function i(P){if(h!=P)u.globalAlpha=h=P}function k(P){if(e!=P){switch(P){case THREE.NormalBlending:u.globalCompositeOperation="source-over";break;case THREE.AdditiveBlending:u.globalCompositeOperation="lighter";break;case THREE.SubtractiveBlending:u.globalCompositeOperation=
-"darker"}e=P}}function c(P,aa,Y,N){ia[0]=~~(P.r*255);ia[1]=~~(P.g*255);ia[2]=~~(P.b*255);ia[4]=~~(aa.r*255);ia[5]=~~(aa.g*255);ia[6]=~~(aa.b*255);ia[8]=~~(Y.r*255);ia[9]=~~(Y.g*255);ia[10]=~~(Y.b*255);ia[12]=~~(N.r*255);ia[13]=~~(N.g*255);ia[14]=~~(N.b*255);na.putImageData(ta,0,0);qa.drawImage(oa,0,0);return pa}function j(P){return P<0?Math.min((1+P)*0.5,0.5):0.5+Math.min(P*0.5,0.5)}function y(P,aa){var Y=aa.x-P.x,N=aa.y-P.y,F=1/Math.sqrt(Y*Y+N*N);Y*=F;N*=F;aa.x+=Y;aa.y+=N;P.x-=Y;P.y-=N}var s=null,
-D=new THREE.Projector,q=document.createElement("canvas"),w,v,z,K,u=q.getContext("2d"),h=1,e=0,m=null,r=null,p=1,o,x,C,S,B,V,G,E,W,O=new THREE.Color,I=new THREE.Color,A=new THREE.Color,L=new THREE.Color,T=new THREE.Color,$,M,J,X,l=new THREE.Rectangle,n=new THREE.Rectangle,t=new THREE.Rectangle,H=false,Q=new THREE.Color,ba=new THREE.Color,fa=new THREE.Color,ka=new THREE.Color,ra=Math.PI*2,sa=new THREE.Vector3;new THREE.UV;new THREE.UV;new THREE.UV;new THREE.UV;var oa,na,ta,ia,pa,qa,ma=16;oa=document.createElement("canvas");
-oa.width=oa.height=2;na=oa.getContext("2d");na.fillStyle="rgba(0,0,0,1)";na.fillRect(0,0,2,2);ta=na.getImageData(0,0,2,2);ia=ta.data;pa=document.createElement("canvas");pa.width=pa.height=ma;qa=pa.getContext("2d");qa.translate(-ma/2,-ma/2);qa.scale(ma,ma);ma--;this.domElement=q;this.autoClear=true;this.setSize=function(P,aa){w=P;v=aa;z=w/2;K=v/2;q.width=w;q.height=v;l.set(-z,-K,z,K)};this.clear=function(){if(!n.isEmpty()){n.inflate(1);n.minSelf(l);u.clearRect(n.getX(),n.getY(),n.getWidth(),n.getHeight());
-n.empty()}};this.render=function(P,aa){var Y,N,F,R,da,U,Z,ea;u.setTransform(1,0,0,-1,z,K);this.autoClear&&this.clear();s=D.projectScene(P,aa);if(H=P.lights.length>0){da=P.lights;ba.setRGB(0,0,0);fa.setRGB(0,0,0);ka.setRGB(0,0,0);Y=0;for(N=da.length;Y<N;Y++){F=da[Y];R=F.color;if(F instanceof THREE.AmbientLight){ba.r+=R.r;ba.g+=R.g;ba.b+=R.b}else if(F instanceof THREE.DirectionalLight){fa.r+=R.r;fa.g+=R.g;fa.b+=R.b}else if(F instanceof THREE.PointLight){ka.r+=R.r;ka.g+=R.g;ka.b+=R.b}}}Y=0;for(N=s.length;Y<
-N;Y++){F=s[Y];t.empty();if(F instanceof THREE.RenderableParticle){o=F;o.x*=z;o.y*=K;R=0;for(da=F.material.length;R<da;R++){U=o;Z=F;var ca=F.material[R];if(ca.opacity!=0){i(ca.opacity);k(ca.blending);ea=void 0;var ga=void 0,la=void 0,ja=void 0,ha=void 0,ua=void 0,va=void 0;if(ca instanceof THREE.ParticleBasicMaterial){if(ca.map){ha=ca.map;ua=ha.width>>1;va=ha.height>>1;la=Z.scale.x*z;ja=Z.scale.y*K;ea=la*ua;ga=ja*va;t.set(U.x-ea,U.y-ga,U.x+ea,U.y+ga);if(l.instersects(t)){u.save();u.translate(U.x,U.y);
-u.rotate(-Z.rotation);u.scale(la,-ja);u.translate(-ua,-va);u.drawImage(ha,0,0);u.restore()}}}else if(ca instanceof THREE.ParticleCircleMaterial){if(H){Q.r=ba.r+fa.r+ka.r;Q.g=ba.g+fa.g+ka.g;Q.b=ba.b+fa.b+ka.b;O.r=ca.color.r*Q.r;O.g=ca.color.g*Q.g;O.b=ca.color.b*Q.b;O.updateStyleString()}else O.__styleString=ca.color.__styleString;ea=Z.scale.x*z;ga=Z.scale.y*K;t.set(U.x-ea,U.y-ga,U.x+ea,U.y+ga);if(l.instersects(t)){ca=O.__styleString;if(r!=ca)u.fillStyle=r=ca;u.save();u.translate(U.x,U.y);u.rotate(-Z.rotation);
-u.scale(ea,ga);u.beginPath();u.arc(0,0,1,0,ra,true);u.closePath();u.fill();u.restore()}}}}}else if(F instanceof THREE.RenderableLine){o=F.v1;x=F.v2;o.positionScreen.x*=z;o.positionScreen.y*=K;x.positionScreen.x*=z;x.positionScreen.y*=K;t.addPoint(o.positionScreen.x,o.positionScreen.y);t.addPoint(x.positionScreen.x,x.positionScreen.y);if(l.instersects(t)){R=0;for(da=F.material.length;R<da;){Z=o;ea=x;U=F.material[R++];if(U.opacity!=0){i(U.opacity);k(U.blending);u.beginPath();u.moveTo(Z.positionScreen.x,
-Z.positionScreen.y);u.lineTo(ea.positionScreen.x,ea.positionScreen.y);u.closePath();if(U instanceof THREE.LineBasicMaterial){O.__styleString=U.color.__styleString;Z=U.linewidth;if(p!=Z)u.lineWidth=p=Z;Z=O.__styleString;if(m!=Z)u.strokeStyle=m=Z;u.stroke();t.inflate(U.linewidth*2)}}}}}else if(F instanceof THREE.RenderableFace3){o=F.v1;x=F.v2;C=F.v3;o.positionScreen.x*=z;o.positionScreen.y*=K;x.positionScreen.x*=z;x.positionScreen.y*=K;C.positionScreen.x*=z;C.positionScreen.y*=K;if(F.overdraw){y(o.positionScreen,
-x.positionScreen);y(x.positionScreen,C.positionScreen);y(C.positionScreen,o.positionScreen)}t.addPoint(o.positionScreen.x,o.positionScreen.y);t.addPoint(x.positionScreen.x,x.positionScreen.y);t.addPoint(C.positionScreen.x,C.positionScreen.y);if(l.instersects(t)){R=0;for(da=F.meshMaterial.length;R<da;){ea=F.meshMaterial[R++];if(ea instanceof THREE.MeshFaceMaterial){U=0;for(Z=F.faceMaterial.length;U<Z;)(ea=F.faceMaterial[U++])&&b(o,x,C,F,ea,P)}else b(o,x,C,F,ea,P)}}}n.addRectangle(t)}u.setTransform(1,
-0,0,1,0,0)}};
-THREE.SVGRenderer=function(){function a(A,L,T){var $,M,J,X;$=0;for(M=A.lights.length;$<M;$++){J=A.lights[$];if(J instanceof THREE.DirectionalLight){X=L.normalWorld.dot(J.position)*J.intensity;if(X>0){T.r+=J.color.r*X;T.g+=J.color.g*X;T.b+=J.color.b*X}}else if(J instanceof THREE.PointLight){C.sub(J.position,L.centroidWorld);C.normalize();X=L.normalWorld.dot(C)*J.intensity;if(X>0){T.r+=J.color.r*X;T.g+=J.color.g*X;T.b+=J.color.b*X}}}}function b(A,L,T,$,M,J){G=f(E++);G.setAttribute("d","M "+A.positionScreen.x+
-" "+A.positionScreen.y+" L "+L.positionScreen.x+" "+L.positionScreen.y+" L "+T.positionScreen.x+","+T.positionScreen.y+"z");if(M instanceof THREE.MeshBasicMaterial)e.__styleString=M.color.__styleString;else if(M instanceof THREE.MeshLambertMaterial)if(h){m.r=r.r;m.g=r.g;m.b=r.b;a(J,$,m);e.r=M.color.r*m.r;e.g=M.color.g*m.g;e.b=M.color.b*m.b;e.updateStyleString()}else e.__styleString=M.color.__styleString;else if(M instanceof THREE.MeshDepthMaterial){x=1-M.__2near/(M.__farPlusNear-$.z*M.__farMinusNear);
-e.setRGB(x,x,x)}else M instanceof THREE.MeshNormalMaterial&&e.setRGB(g($.normalWorld.x),g($.normalWorld.y),g($.normalWorld.z));M.wireframe?G.setAttribute("style","fill: none; stroke: "+e.__styleString+"; stroke-width: "+M.wireframe_linewidth+"; stroke-opacity: "+M.opacity+"; stroke-linecap: "+M.wireframe_linecap+"; stroke-linejoin: "+M.wireframe_linejoin):G.setAttribute("style","fill: "+e.__styleString+"; fill-opacity: "+M.opacity);c.appendChild(G)}function d(A,L,T,$,M,J,X){G=f(E++);G.setAttribute("d",
-"M "+A.positionScreen.x+" "+A.positionScreen.y+" L "+L.positionScreen.x+" "+L.positionScreen.y+" L "+T.positionScreen.x+","+T.positionScreen.y+" L "+$.positionScreen.x+","+$.positionScreen.y+"z");if(J instanceof THREE.MeshBasicMaterial)e.__styleString=J.color.__styleString;else if(J instanceof THREE.MeshLambertMaterial)if(h){m.r=r.r;m.g=r.g;m.b=r.b;a(X,M,m);e.r=J.color.r*m.r;e.g=J.color.g*m.g;e.b=J.color.b*m.b;e.updateStyleString()}else e.__styleString=J.color.__styleString;else if(J instanceof THREE.MeshDepthMaterial){x=
-1-J.__2near/(J.__farPlusNear-M.z*J.__farMinusNear);e.setRGB(x,x,x)}else J instanceof THREE.MeshNormalMaterial&&e.setRGB(g(M.normalWorld.x),g(M.normalWorld.y),g(M.normalWorld.z));J.wireframe?G.setAttribute("style","fill: none; stroke: "+e.__styleString+"; stroke-width: "+J.wireframe_linewidth+"; stroke-opacity: "+J.opacity+"; stroke-linecap: "+J.wireframe_linecap+"; stroke-linejoin: "+J.wireframe_linejoin):G.setAttribute("style","fill: "+e.__styleString+"; fill-opacity: "+J.opacity);c.appendChild(G)}
-function f(A){if(S[A]==null){S[A]=document.createElementNS("http://www.w3.org/2000/svg","path");I==0&&S[A].setAttribute("shape-rendering","crispEdges");return S[A]}return S[A]}function g(A){return A<0?Math.min((1+A)*0.5,0.5):0.5+Math.min(A*0.5,0.5)}var i=null,k=new THREE.Projector,c=document.createElementNS("http://www.w3.org/2000/svg","svg"),j,y,s,D,q,w,v,z,K=new THREE.Rectangle,u=new THREE.Rectangle,h=false,e=new THREE.Color(16777215),m=new THREE.Color(16777215),r=new THREE.Color(0),p=new THREE.Color(0),
-o=new THREE.Color(0),x,C=new THREE.Vector3,S=[],B=[],V=[],G,E,W,O,I=1;this.domElement=c;this.autoClear=true;this.setQuality=function(A){switch(A){case "high":I=1;break;case "low":I=0}};this.setSize=function(A,L){j=A;y=L;s=j/2;D=y/2;c.setAttribute("viewBox",-s+" "+-D+" "+j+" "+y);c.setAttribute("width",j);c.setAttribute("height",y);K.set(-s,-D,s,D)};this.clear=function(){for(;c.childNodes.length>0;)c.removeChild(c.childNodes[0])};this.render=function(A,L){var T,$,M,J,X,l,n,t;this.autoClear&&this.clear();
-i=k.projectScene(A,L);O=W=E=0;if(h=A.lights.length>0){n=A.lights;r.setRGB(0,0,0);p.setRGB(0,0,0);o.setRGB(0,0,0);T=0;for($=n.length;T<$;T++){M=n[T];J=M.color;if(M instanceof THREE.AmbientLight){r.r+=J.r;r.g+=J.g;r.b+=J.b}else if(M instanceof THREE.DirectionalLight){p.r+=J.r;p.g+=J.g;p.b+=J.b}else if(M instanceof THREE.PointLight){o.r+=J.r;o.g+=J.g;o.b+=J.b}}}T=0;for($=i.length;T<$;T++){n=i[T];u.empty();if(n instanceof THREE.RenderableParticle){q=n;q.x*=s;q.y*=-D;M=0;for(J=n.material.length;M<J;M++)if(t=
-n.material[M]){X=q;l=n;t=t;var H=W++;if(B[H]==null){B[H]=document.createElementNS("http://www.w3.org/2000/svg","circle");I==0&&B[H].setAttribute("shape-rendering","crispEdges")}G=B[H];G.setAttribute("cx",X.x);G.setAttribute("cy",X.y);G.setAttribute("r",l.scale.x*s);if(t instanceof THREE.ParticleCircleMaterial){if(h){m.r=r.r+p.r+o.r;m.g=r.g+p.g+o.g;m.b=r.b+p.b+o.b;e.r=t.color.r*m.r;e.g=t.color.g*m.g;e.b=t.color.b*m.b;e.updateStyleString()}else e=t.color;G.setAttribute("style","fill: "+e.__styleString)}c.appendChild(G)}}else if(n instanceof
-THREE.RenderableLine){q=n.v1;w=n.v2;q.positionScreen.x*=s;q.positionScreen.y*=-D;w.positionScreen.x*=s;w.positionScreen.y*=-D;u.addPoint(q.positionScreen.x,q.positionScreen.y);u.addPoint(w.positionScreen.x,w.positionScreen.y);if(K.instersects(u)){M=0;for(J=n.material.length;M<J;)if(t=n.material[M++]){X=q;l=w;t=t;H=O++;if(V[H]==null){V[H]=document.createElementNS("http://www.w3.org/2000/svg","line");I==0&&V[H].setAttribute("shape-rendering","crispEdges")}G=V[H];G.setAttribute("x1",X.positionScreen.x);
-G.setAttribute("y1",X.positionScreen.y);G.setAttribute("x2",l.positionScreen.x);G.setAttribute("y2",l.positionScreen.y);if(t instanceof THREE.LineBasicMaterial){e.__styleString=t.color.__styleString;G.setAttribute("style","fill: none; stroke: "+e.__styleString+"; stroke-width: "+t.linewidth+"; stroke-opacity: "+t.opacity+"; stroke-linecap: "+t.linecap+"; stroke-linejoin: "+t.linejoin);c.appendChild(G)}}}}else if(n instanceof THREE.RenderableFace3){q=n.v1;w=n.v2;v=n.v3;q.positionScreen.x*=s;q.positionScreen.y*=
--D;w.positionScreen.x*=s;w.positionScreen.y*=-D;v.positionScreen.x*=s;v.positionScreen.y*=-D;u.addPoint(q.positionScreen.x,q.positionScreen.y);u.addPoint(w.positionScreen.x,w.positionScreen.y);u.addPoint(v.positionScreen.x,v.positionScreen.y);if(K.instersects(u)){M=0;for(J=n.meshMaterial.length;M<J;){t=n.meshMaterial[M++];if(t instanceof THREE.MeshFaceMaterial){X=0;for(l=n.faceMaterial.length;X<l;)(t=n.faceMaterial[X++])&&b(q,w,v,n,t,A)}else t&&b(q,w,v,n,t,A)}}}else if(n instanceof THREE.RenderableFace4){q=
-n.v1;w=n.v2;v=n.v3;z=n.v4;q.positionScreen.x*=s;q.positionScreen.y*=-D;w.positionScreen.x*=s;w.positionScreen.y*=-D;v.positionScreen.x*=s;v.positionScreen.y*=-D;z.positionScreen.x*=s;z.positionScreen.y*=-D;u.addPoint(q.positionScreen.x,q.positionScreen.y);u.addPoint(w.positionScreen.x,w.positionScreen.y);u.addPoint(v.positionScreen.x,v.positionScreen.y);u.addPoint(z.positionScreen.x,z.positionScreen.y);if(K.instersects(u)){M=0;for(J=n.meshMaterial.length;M<J;){t=n.meshMaterial[M++];if(t instanceof
-THREE.MeshFaceMaterial){X=0;for(l=n.faceMaterial.length;X<l;)(t=n.faceMaterial[X++])&&d(q,w,v,z,n,t,A)}else t&&d(q,w,v,z,n,t,A)}}}}}};
-THREE.WebGLRenderer=function(a){function b(h,e){var m=c.createProgram();c.attachShader(m,g("fragment","#ifdef GL_ES\nprecision highp float;\n#endif\n"+h));c.attachShader(m,g("vertex","uniform mat4 objectMatrix;\nuniform mat4 modelViewMatrix;\nuniform mat4 projectionMatrix;\nuniform vec3 cameraPosition;\nattribute vec3 position;\nattribute vec3 normal;\nattribute vec2 uv;\n"+e));c.linkProgram(m);c.getProgramParameter(m,c.LINK_STATUS)||alert("Could not initialise shaders\nVALIDATE_STATUS: "+c.getProgramParameter(m,
-c.VALIDATE_STATUS)+", gl error ["+c.getError()+"]");m.uniforms={};return m}function d(h,e){var m,r,p;m=0;for(r=e.length;m<r;m++){p=e[m];h.uniforms[p]=c.getUniformLocation(h,p)}}function f(h){h.position=c.getAttribLocation(h,"position");c.enableVertexAttribArray(h.position);h.normal=c.getAttribLocation(h,"normal");c.enableVertexAttribArray(h.normal);h.uv=c.getAttribLocation(h,"uv");c.enableVertexAttribArray(h.uv)}function g(h,e){var m;if(h=="fragment")m=c.createShader(c.FRAGMENT_SHADER);else if(h==
-"vertex")m=c.createShader(c.VERTEX_SHADER);c.shaderSource(m,e);c.compileShader(m);if(!c.getShaderParameter(m,c.COMPILE_STATUS)){alert(c.getShaderInfoLog(m));return null}return m}function i(h){switch(h){case THREE.Repeat:return c.REPEAT;case THREE.ClampToEdge:return c.CLAMP_TO_EDGE;case THREE.MirroredRepeat:return c.MIRRORED_REPEAT}return 0}var k=document.createElement("canvas"),c,j,y,s=new THREE.Matrix4,D,q=new Float32Array(16),w=new Float32Array(16),v=new Float32Array(16),z=new Float32Array(9),K=
-new Float32Array(16);a=function(h,e){if(h){var m,r,p,o=pointLights=maxDirLights=maxPointLights=0;m=0;for(r=h.lights.length;m<r;m++){p=h.lights[m];p instanceof THREE.DirectionalLight&&o++;p instanceof THREE.PointLight&&pointLights++}if(pointLights+o<=e){maxDirLights=o;maxPointLights=pointLights}else{maxDirLights=Math.ceil(e*o/(pointLights+o));maxPointLights=e-maxDirLights}return{directional:maxDirLights,point:maxPointLights}}return{directional:1,point:e-1}}(a,4);this.domElement=k;this.autoClear=true;
-try{c=k.getContext("experimental-webgl",{antialias:true})}catch(u){}if(!c){alert("WebGL not supported");throw"cannot create webgl context";}c.clearColor(0,0,0,1);c.clearDepth(1);c.enable(c.DEPTH_TEST);c.depthFunc(c.LEQUAL);c.frontFace(c.CCW);c.cullFace(c.BACK);c.enable(c.CULL_FACE);c.enable(c.BLEND);c.blendFunc(c.ONE,c.ONE_MINUS_SRC_ALPHA);c.clearColor(0,0,0,0);(function(h,e){var m=[h?"#define MAX_DIR_LIGHTS "+h:"",e?"#define MAX_POINT_LIGHTS "+e:"","uniform bool enableLighting;\nuniform bool useRefract;\nuniform int pointLightNumber;\nuniform int directionalLightNumber;\nuniform vec3 ambientLightColor;",
-h?"uniform vec3 directionalLightColor[ MAX_DIR_LIGHTS ];":"",h?"uniform vec3 directionalLightDirection[ MAX_DIR_LIGHTS ];":"",e?"uniform vec3 pointLightColor[ MAX_POINT_LIGHTS ];":"",e?"uniform vec3 pointLightPosition[ MAX_POINT_LIGHTS ];":"","uniform mat4 viewMatrix;\nuniform mat3 normalMatrix;\nvarying vec3 vNormal;\nvarying vec2 vUv;\nvarying vec3 vLightWeighting;",e?"varying vec3 vPointLightVector[ MAX_POINT_LIGHTS ];":"","varying vec3 vViewPosition;\nvarying vec3 vReflect;\nuniform float mRefractionRatio;\nvoid main(void) {\nvec4 mPosition = objectMatrix * vec4( position, 1.0 );\nvViewPosition = cameraPosition - mPosition.xyz;\nvec3 nWorld = mat3( objectMatrix[0].xyz, objectMatrix[1].xyz, objectMatrix[2].xyz ) * normal;\nvec4 mvPosition = modelViewMatrix * vec4( position, 1.0 );\nvec3 transformedNormal = normalize( normalMatrix * normal );\nif ( !enableLighting ) {\nvLightWeighting = vec3( 1.0, 1.0, 1.0 );\n} else {\nvLightWeighting = ambientLightColor;",
-h?"for( int i = 0; i < MAX_DIR_LIGHTS; i++ ) {":"",h?"vec4 lDirection = viewMatrix * vec4( directionalLightDirection[ i ], 0.0 );":"",h?"float directionalLightWeighting = max( dot( transformedNormal, normalize(lDirection.xyz ) ), 0.0 );":"",h?"vLightWeighting += directionalLightColor[ i ] * directionalLightWeighting;":"",h?"}":"",e?"for( int i = 0; i < MAX_POINT_LIGHTS; i++ ) {":"",e?"vec4 lPosition = viewMatrix * vec4( pointLightPosition[ i ], 1.0 );":"",e?"vPointLightVector[ i ] = normalize( lPosition.xyz - mvPosition.xyz );":
-"",e?"float pointLightWeighting = max( dot( transformedNormal, vPointLightVector[ i ] ), 0.0 );":"",e?"vLightWeighting += pointLightColor[ i ] * pointLightWeighting;":"",e?"}":"","}\nvNormal = transformedNormal;\nvUv = uv;\nif ( useRefract ) {\nvReflect = refract( normalize(mPosition.xyz - cameraPosition), normalize(nWorld.xyz), mRefractionRatio );\n} else {\nvReflect = reflect( normalize(mPosition.xyz - cameraPosition), normalize(nWorld.xyz) );\n}\ngl_Position = projectionMatrix * mvPosition;\n}"].join("\n"),
-r=[h?"#define MAX_DIR_LIGHTS "+h:"",e?"#define MAX_POINT_LIGHTS "+e:"","uniform int material;\nuniform bool enableMap;\nuniform bool enableCubeMap;\nuniform bool mixEnvMap;\nuniform samplerCube tCube;\nuniform float mReflectivity;\nuniform sampler2D tMap;\nuniform vec4 mColor;\nuniform float mOpacity;\nuniform vec4 mAmbient;\nuniform vec4 mSpecular;\nuniform float mShininess;\nuniform float m2Near;\nuniform float mFarPlusNear;\nuniform float mFarMinusNear;\nuniform int pointLightNumber;\nuniform int directionalLightNumber;",
-h?"uniform mat4 viewMatrix;":"",h?"uniform vec3 directionalLightDirection[ MAX_DIR_LIGHTS ];":"","varying vec3 vNormal;\nvarying vec2 vUv;\nvarying vec3 vLightWeighting;",e?"varying vec3 vPointLightVector[ MAX_POINT_LIGHTS ];":"","varying vec3 vViewPosition;\nvarying vec3 vReflect;\nuniform vec3 cameraPosition;\nvoid main() {\nvec4 mapColor = vec4( 1.0, 1.0, 1.0, 1.0 );\nvec4 cubeColor = vec4( 1.0, 1.0, 1.0, 1.0 );\nif ( enableMap ) {\nmapColor = texture2D( tMap, vUv );\n}\nif ( enableCubeMap ) {\ncubeColor.r = textureCube( tCube, vec3( -vReflect.x, vReflect.yz ) ).r;\ncubeColor.g = textureCube( tCube, vec3( -vReflect.x + 0.005, vReflect.yz ) ).g;\ncubeColor.b = textureCube( tCube, vec3( -vReflect.x + 0.01, vReflect.yz ) ).b;\n}\nif ( material == 5 ) { \nvec3 wPos = cameraPosition - vViewPosition;\ngl_FragColor = textureCube( tCube, vec3( -wPos.x, wPos.yz ) );\n} else if ( material == 4 ) { \ngl_FragColor = vec4( 0.5*normalize( vNormal ) + vec3(0.5, 0.5, 0.5), mOpacity );\n} else if ( material == 3 ) { \nfloat w = 0.5;\ngl_FragColor = vec4( w, w, w, mOpacity );\n} else if ( material == 2 ) { \nvec3 normal = normalize( vNormal );\nvec3 viewPosition = normalize( vViewPosition );",
-e?"vec4 pointDiffuse  = vec4( 0.0, 0.0, 0.0, 0.0 );":"",e?"vec4 pointSpecular = vec4( 0.0, 0.0, 0.0, 0.0 );":"",e?"for( int i = 0; i < MAX_POINT_LIGHTS; i++ ) {":"",e?"vec3 pointVector = normalize( vPointLightVector[ i ] );":"",e?"vec3 pointHalfVector = normalize( vPointLightVector[ i ] + vViewPosition );":"",e?"float pointDotNormalHalf = dot( normal, pointHalfVector );":"",e?"float pointDiffuseWeight = max( dot( normal, pointVector ), 0.0 );":"",e?"float pointSpecularWeight = 0.0;":"",e?"if ( pointDotNormalHalf >= 0.0 )":
-"",e?"pointSpecularWeight = pow( pointDotNormalHalf, mShininess );":"",e?"pointDiffuse  += mColor * pointDiffuseWeight;":"",e?"pointSpecular += mSpecular * pointSpecularWeight;":"",e?"}":"",h?"vec4 dirDiffuse  = vec4( 0.0, 0.0, 0.0, 0.0 );":"",h?"vec4 dirSpecular = vec4( 0.0, 0.0, 0.0, 0.0 );":"",h?"for( int i = 0; i < MAX_DIR_LIGHTS; i++ ) {":"",h?"vec4 lDirection = viewMatrix * vec4( directionalLightDirection[ i ], 0.0 );":"",h?"vec3 dirVector = normalize( lDirection.xyz );":"",h?"vec3 dirHalfVector = normalize( lDirection.xyz + vViewPosition );":
-"",h?"float dirDotNormalHalf = dot( normal, dirHalfVector );":"",h?"float dirDiffuseWeight = max( dot( normal, dirVector ), 0.0 );":"",h?"float dirSpecularWeight = 0.0;":"",h?"if ( dirDotNormalHalf >= 0.0 )":"",h?"dirSpecularWeight = pow( dirDotNormalHalf, mShininess );":"",h?"dirDiffuse  += mColor * dirDiffuseWeight;":"",h?"dirSpecular += mSpecular * dirSpecularWeight;":"",h?"}":"","vec4 totalLight = mAmbient;",h?"totalLight += dirDiffuse + dirSpecular;":"",e?"totalLight += pointDiffuse + pointSpecular;":
-"","if ( mixEnvMap ) {\ngl_FragColor = vec4( mix( mapColor.rgb * totalLight.xyz * vLightWeighting, cubeColor.rgb, mReflectivity ), mapColor.a );\n} else {\ngl_FragColor = vec4( mapColor.rgb * cubeColor.rgb * totalLight.xyz * vLightWeighting, mapColor.a );\n}\n} else if ( material == 1 ) {\nif ( mixEnvMap ) {\ngl_FragColor = vec4( mix( mColor.rgb * mapColor.rgb * vLightWeighting, cubeColor.rgb, mReflectivity ), mColor.a * mapColor.a );\n} else {\ngl_FragColor = vec4( mColor.rgb * mapColor.rgb * cubeColor.rgb * vLightWeighting, mColor.a * mapColor.a );\n}\n} else {\nif ( mixEnvMap ) {\ngl_FragColor = mix( mColor * mapColor, cubeColor, mReflectivity );\n} else {\ngl_FragColor = mColor * mapColor * cubeColor;\n}\n}\n}"].join("\n");
-j=b(r,m);c.useProgram(j);d(j,["viewMatrix","modelViewMatrix","projectionMatrix","normalMatrix","objectMatrix","cameraPosition","enableLighting","ambientLightColor","material","mColor","mAmbient","mSpecular","mShininess","mOpacity","enableMap","tMap","enableCubeMap","tCube","mixEnvMap","mReflectivity","mRefractionRatio","useRefract","m2Near","mFarPlusNear","mFarMinusNear"]);h&&d(j,["directionalLightNumber","directionalLightColor","directionalLightDirection"]);e&&d(j,["pointLightNumber","pointLightColor",
-"pointLightPosition"]);c.uniform1i(j.uniforms.enableMap,0);c.uniform1i(j.uniforms.tMap,0);c.uniform1i(j.uniforms.enableCubeMap,0);c.uniform1i(j.uniforms.tCube,1);c.uniform1i(j.uniforms.mixEnvMap,0);c.uniform1i(j.uniforms.useRefract,0);f(j)})(a.directional,a.point);this.setSize=function(h,e){k.width=h;k.height=e;c.viewport(0,0,k.width,k.height)};this.clear=function(){c.clear(c.COLOR_BUFFER_BIT|c.DEPTH_BUFFER_BIT)};this.setupLights=function(h,e){var m,r,p,o,x,C=[],S=[],B=[];o=[];x=[];c.uniform1i(h.uniforms.enableLighting,
-e.lights.length);m=0;for(r=e.lights.length;m<r;m++){p=e.lights[m];if(p instanceof THREE.AmbientLight)C.push(p);else if(p instanceof THREE.DirectionalLight)B.push(p);else p instanceof THREE.PointLight&&S.push(p)}m=p=o=x=0;for(r=C.length;m<r;m++){p+=C[m].color.r;o+=C[m].color.g;x+=C[m].color.b}c.uniform3f(h.uniforms.ambientLightColor,p,o,x);o=[];x=[];m=0;for(r=B.length;m<r;m++){p=B[m];o.push(p.color.r*p.intensity);o.push(p.color.g*p.intensity);o.push(p.color.b*p.intensity);x.push(p.position.x);x.push(p.position.y);
-x.push(p.position.z)}if(B.length){c.uniform1i(h.uniforms.directionalLightNumber,B.length);c.uniform3fv(h.uniforms.directionalLightDirection,x);c.uniform3fv(h.uniforms.directionalLightColor,o)}o=[];x=[];m=0;for(r=S.length;m<r;m++){p=S[m];o.push(p.color.r*p.intensity);o.push(p.color.g*p.intensity);o.push(p.color.b*p.intensity);x.push(p.position.x);x.push(p.position.y);x.push(p.position.z)}if(S.length){c.uniform1i(h.uniforms.pointLightNumber,S.length);c.uniform3fv(h.uniforms.pointLightPosition,x);c.uniform3fv(h.uniforms.pointLightColor,
-o)}};this.createBuffers=function(h,e){var m,r,p,o,x,C,S,B,V=[],G=[],E=[],W=[],O=[],I=0,A=h.materialFaceGroup[e],L;p=false;m=0;for(r=h.material.length;m<r;m++){meshMaterial=h.material[m];if(meshMaterial instanceof THREE.MeshFaceMaterial){x=0;for(L=A.material.length;x<L;x++)if(A.material[x]&&A.material[x].shading!=undefined&&A.material[x].shading==THREE.SmoothShading){p=true;break}}else if(meshMaterial&&meshMaterial.shading!=undefined&&meshMaterial.shading==THREE.SmoothShading){p=true;break}if(p)break}L=
-p;m=0;for(r=A.faces.length;m<r;m++){p=A.faces[m];o=h.geometry.faces[p];x=o.vertexNormals;faceNormal=o.normal;p=h.geometry.uvs[p];if(o instanceof THREE.Face3){C=h.geometry.vertices[o.a].position;S=h.geometry.vertices[o.b].position;B=h.geometry.vertices[o.c].position;E.push(C.x,C.y,C.z);E.push(S.x,S.y,S.z);E.push(B.x,B.y,B.z);if(x.length==3&&L)for(o=0;o<3;o++)W.push(x[o].x,x[o].y,x[o].z);else for(o=0;o<3;o++)W.push(faceNormal.x,faceNormal.y,faceNormal.z);if(p)for(o=0;o<3;o++)O.push(p[o].u,p[o].v);V.push(I,
-I+1,I+2);G.push(I,I+1);G.push(I,I+2);G.push(I+1,I+2);I+=3}else if(o instanceof THREE.Face4){C=h.geometry.vertices[o.a].position;S=h.geometry.vertices[o.b].position;B=h.geometry.vertices[o.c].position;o=h.geometry.vertices[o.d].position;E.push(C.x,C.y,C.z);E.push(S.x,S.y,S.z);E.push(B.x,B.y,B.z);E.push(o.x,o.y,o.z);if(x.length==4&&L)for(o=0;o<4;o++)W.push(x[o].x,x[o].y,x[o].z);else for(o=0;o<4;o++)W.push(faceNormal.x,faceNormal.y,faceNormal.z);if(p)for(o=0;o<4;o++)O.push(p[o].u,p[o].v);V.push(I,I+
-1,I+2);V.push(I,I+2,I+3);G.push(I,I+1);G.push(I,I+2);G.push(I,I+3);G.push(I+1,I+2);G.push(I+2,I+3);I+=4}}if(E.length){A.__webGLVertexBuffer=c.createBuffer();c.bindBuffer(c.ARRAY_BUFFER,A.__webGLVertexBuffer);c.bufferData(c.ARRAY_BUFFER,new Float32Array(E),c.STATIC_DRAW);A.__webGLNormalBuffer=c.createBuffer();c.bindBuffer(c.ARRAY_BUFFER,A.__webGLNormalBuffer);c.bufferData(c.ARRAY_BUFFER,new Float32Array(W),c.STATIC_DRAW);A.__webGLUVBuffer=c.createBuffer();c.bindBuffer(c.ARRAY_BUFFER,A.__webGLUVBuffer);
-c.bufferData(c.ARRAY_BUFFER,new Float32Array(O),c.STATIC_DRAW);A.__webGLFaceBuffer=c.createBuffer();c.bindBuffer(c.ELEMENT_ARRAY_BUFFER,A.__webGLFaceBuffer);c.bufferData(c.ELEMENT_ARRAY_BUFFER,new Uint16Array(V),c.STATIC_DRAW);A.__webGLLineBuffer=c.createBuffer();c.bindBuffer(c.ELEMENT_ARRAY_BUFFER,A.__webGLLineBuffer);c.bufferData(c.ELEMENT_ARRAY_BUFFER,new Uint16Array(G),c.STATIC_DRAW);A.__webGLFaceCount=V.length;A.__webGLLineCount=G.length}};this.renderBuffer=function(h,e,m){var r,p,o,x,C,S,B,
-V,G,E;if(e instanceof THREE.MeshShaderMaterial){if(!e.program){e.program=b(e.fragment_shader,e.vertex_shader);C=["viewMatrix","modelViewMatrix","projectionMatrix","normalMatrix","objectMatrix","cameraPosition"];for(E in e.uniforms)C.push(E);d(e.program,C);f(e.program)}E=e.program}else E=j;if(E!=y){c.useProgram(E);y=E}if(e instanceof THREE.MeshShaderMaterial){C=E;V=e.uniforms;var W,O;for(p in V){W=V[p].type;G=V[p].value;O=C.uniforms[p];if(W=="i")c.uniform1i(O,G);else if(W=="f")c.uniform1f(O,G);else if(W==
-"t"){c.uniform1i(O,G);G=V[p].texture;if(G instanceof THREE.TextureCube&&G.image.length==6){if(!G.image.__webGLTextureCube&&!G.image.__cubeMapInitialized&&G.image.loadCount==6){G.image.__webGLTextureCube=c.createTexture();c.bindTexture(c.TEXTURE_CUBE_MAP,G.image.__webGLTextureCube);c.texParameteri(c.TEXTURE_CUBE_MAP,c.TEXTURE_WRAP_S,c.CLAMP_TO_EDGE);c.texParameteri(c.TEXTURE_CUBE_MAP,c.TEXTURE_WRAP_T,c.CLAMP_TO_EDGE);c.texParameteri(c.TEXTURE_CUBE_MAP,c.TEXTURE_MAG_FILTER,c.LINEAR);c.texParameteri(c.TEXTURE_CUBE_MAP,
-c.TEXTURE_MIN_FILTER,c.LINEAR_MIPMAP_LINEAR);for(W=0;W<6;++W)c.texImage2D(c.TEXTURE_CUBE_MAP_POSITIVE_X+W,0,c.RGBA,c.RGBA,c.UNSIGNED_BYTE,G.image[W]);c.generateMipmap(c.TEXTURE_CUBE_MAP);c.bindTexture(c.TEXTURE_CUBE_MAP,null);G.image.__cubeMapInitialized=true}c.activeTexture(c.TEXTURE1);c.bindTexture(c.TEXTURE_CUBE_MAP,G.image.__webGLTextureCube)}}}this.loadCamera(E,h);this.loadMatrices(E)}else if(e instanceof THREE.MeshPhongMaterial||e instanceof THREE.MeshLambertMaterial||e instanceof THREE.MeshBasicMaterial){h=
-e.color;r=e.opacity;o=e.wireframe;x=e.wireframe_linewidth;S=e.map;B=e.env_map;C=e.combine==THREE.Mix;p=e.reflectivity;G=e.env_map&&e.env_map.mapping==THREE.RefractionMap;V=e.refraction_ratio;c.uniform4f(E.uniforms.mColor,h.r*r,h.g*r,h.b*r,r);c.uniform1i(E.uniforms.mixEnvMap,C);c.uniform1f(E.uniforms.mReflectivity,p);c.uniform1i(E.uniforms.useRefract,G);c.uniform1f(E.uniforms.mRefractionRatio,V)}if(e instanceof THREE.MeshNormalMaterial){r=e.opacity;c.uniform1f(E.uniforms.mOpacity,r);c.uniform1i(E.uniforms.material,
-4)}else if(e instanceof THREE.MeshDepthMaterial){r=e.opacity;o=e.wireframe;x=e.wireframe_linewidth;c.uniform1f(E.uniforms.mOpacity,r);c.uniform1f(E.uniforms.m2Near,e.__2near);c.uniform1f(E.uniforms.mFarPlusNear,e.__farPlusNear);c.uniform1f(E.uniforms.mFarMinusNear,e.__farMinusNear);c.uniform1i(E.uniforms.material,3)}else if(e instanceof THREE.MeshPhongMaterial){h=e.ambient;p=e.specular;C=e.shininess;c.uniform4f(E.uniforms.mAmbient,h.r,h.g,h.b,r);c.uniform4f(E.uniforms.mSpecular,p.r,p.g,p.b,r);c.uniform1f(E.uniforms.mShininess,
-C);c.uniform1i(E.uniforms.material,2)}else if(e instanceof THREE.MeshLambertMaterial)c.uniform1i(E.uniforms.material,1);else if(e instanceof THREE.MeshBasicMaterial)c.uniform1i(E.uniforms.material,0);else if(e instanceof THREE.MeshCubeMaterial){c.uniform1i(E.uniforms.material,5);B=e.env_map}if(S){if(!e.map.__webGLTexture&&e.map.image.loaded){e.map.__webGLTexture=c.createTexture();c.bindTexture(c.TEXTURE_2D,e.map.__webGLTexture);c.texImage2D(c.TEXTURE_2D,0,c.RGBA,c.RGBA,c.UNSIGNED_BYTE,e.map.image);
-c.texParameteri(c.TEXTURE_2D,c.TEXTURE_WRAP_S,i(e.map.wrap_s));c.texParameteri(c.TEXTURE_2D,c.TEXTURE_WRAP_T,i(e.map.wrap_t));c.texParameteri(c.TEXTURE_2D,c.TEXTURE_MAG_FILTER,c.LINEAR);c.texParameteri(c.TEXTURE_2D,c.TEXTURE_MIN_FILTER,c.LINEAR_MIPMAP_LINEAR);c.generateMipmap(c.TEXTURE_2D);c.bindTexture(c.TEXTURE_2D,null)}c.activeTexture(c.TEXTURE0);c.bindTexture(c.TEXTURE_2D,e.map.__webGLTexture);c.uniform1i(E.uniforms.tMap,0);c.uniform1i(E.uniforms.enableMap,1)}else c.uniform1i(E.uniforms.enableMap,
-0);if(B){if(e.env_map&&e.env_map instanceof THREE.TextureCube&&e.env_map.image.length==6){if(!e.env_map.image.__webGLTextureCube&&!e.env_map.image.__cubeMapInitialized&&e.env_map.image.loadCount==6){e.env_map.image.__webGLTextureCube=c.createTexture();c.bindTexture(c.TEXTURE_CUBE_MAP,e.env_map.image.__webGLTextureCube);c.texParameteri(c.TEXTURE_CUBE_MAP,c.TEXTURE_WRAP_S,c.CLAMP_TO_EDGE);c.texParameteri(c.TEXTURE_CUBE_MAP,c.TEXTURE_WRAP_T,c.CLAMP_TO_EDGE);c.texParameteri(c.TEXTURE_CUBE_MAP,c.TEXTURE_MAG_FILTER,
-c.LINEAR);c.texParameteri(c.TEXTURE_CUBE_MAP,c.TEXTURE_MIN_FILTER,c.LINEAR_MIPMAP_LINEAR);for(r=0;r<6;++r)c.texImage2D(c.TEXTURE_CUBE_MAP_POSITIVE_X+r,0,c.RGBA,c.RGBA,c.UNSIGNED_BYTE,e.env_map.image[r]);c.generateMipmap(c.TEXTURE_CUBE_MAP);c.bindTexture(c.TEXTURE_CUBE_MAP,null);e.env_map.image.__cubeMapInitialized=true}c.activeTexture(c.TEXTURE1);c.bindTexture(c.TEXTURE_CUBE_MAP,e.env_map.image.__webGLTextureCube);c.uniform1i(E.uniforms.tCube,1)}c.uniform1i(E.uniforms.enableCubeMap,1)}else c.uniform1i(E.uniforms.enableCubeMap,
-0);c.bindBuffer(c.ARRAY_BUFFER,m.__webGLVertexBuffer);c.vertexAttribPointer(E.position,3,c.FLOAT,false,0,0);c.bindBuffer(c.ARRAY_BUFFER,m.__webGLNormalBuffer);c.vertexAttribPointer(E.normal,3,c.FLOAT,false,0,0);if(S){c.bindBuffer(c.ARRAY_BUFFER,m.__webGLUVBuffer);c.enableVertexAttribArray(E.uv);c.vertexAttribPointer(E.uv,2,c.FLOAT,false,0,0)}else c.disableVertexAttribArray(E.uv);if(o){c.lineWidth(x);c.bindBuffer(c.ELEMENT_ARRAY_BUFFER,m.__webGLLineBuffer);c.drawElements(c.LINES,m.__webGLLineCount,
-c.UNSIGNED_SHORT,0)}else{c.bindBuffer(c.ELEMENT_ARRAY_BUFFER,m.__webGLFaceBuffer);c.drawElements(c.TRIANGLES,m.__webGLFaceCount,c.UNSIGNED_SHORT,0)}};this.renderPass=function(h,e,m,r,p){var o,x,C,S,B;C=0;for(S=e.material.length;C<S;C++){o=e.material[C];if(o instanceof THREE.MeshFaceMaterial){o=0;for(x=m.material.length;o<x;o++)if((B=m.material[o])&&B.blending==r&&B.opacity<1==p){this.setBlending(B.blending);this.renderBuffer(h,B,m)}}else if((B=o)&&B.blending==r&&B.opacity<1==p){this.setBlending(B.blending);
-this.renderBuffer(h,B,m)}}};this.render=function(h,e){var m,r;this.initWebGLObjects(h);this.autoClear&&this.clear();e.autoUpdateMatrix&&e.updateMatrix();this.loadCamera(j,e);this.setupLights(j,h);m=0;for(r=h.__webGLObjects.length;m<r;m++){webGLObject=h.__webGLObjects[m];if(webGLObject.__object.visible){this.setupMatrices(webGLObject.__object,e);this.loadMatrices(j);this.renderPass(e,webGLObject.__object,webGLObject,THREE.NormalBlending,false)}}m=0;for(r=h.__webGLObjects.length;m<r;m++){webGLObject=
-h.__webGLObjects[m];if(webGLObject.__object.visible){this.setupMatrices(webGLObject.__object,e);this.loadMatrices(j);this.renderPass(e,webGLObject.__object,webGLObject,THREE.AdditiveBlending,false);this.renderPass(e,webGLObject.__object,webGLObject,THREE.SubtractiveBlending,false);this.renderPass(e,webGLObject.__object,webGLObject,THREE.AdditiveBlending,true);this.renderPass(e,webGLObject.__object,webGLObject,THREE.SubtractiveBlending,true);this.renderPass(e,webGLObject.__object,webGLObject,THREE.NormalBlending,
-true)}}};this.initWebGLObjects=function(h){var e,m,r,p,o;if(!h.__webGLObjects)h.__webGLObjects=[];e=0;for(m=h.objects.length;e<m;e++){r=h.objects[e];if(r instanceof THREE.Mesh)for(p in r.materialFaceGroup){o=r.materialFaceGroup[p];if(!o.__webGLVertexBuffer){this.createBuffers(r,p);o.__object=r;h.__webGLObjects.push(o)}}}};this.removeObject=function(h,e){var m,r;for(m=h.__webGLObjects.length-1;m>=0;m--){r=h.__webGLObjects[m].__object;e==r&&h.__webGLObjects.splice(m,1)}};this.setupMatrices=function(h,
-e){h.autoUpdateMatrix&&h.updateMatrix();s.multiply(e.matrix,h.matrix);q.set(e.matrix.flatten());w.set(s.flatten());v.set(e.projectionMatrix.flatten());D=THREE.Matrix4.makeInvert3x3(s).transpose();z.set(D.m);K.set(h.matrix.flatten())};this.loadMatrices=function(h){c.uniformMatrix4fv(h.uniforms.viewMatrix,false,q);c.uniformMatrix4fv(h.uniforms.modelViewMatrix,false,w);c.uniformMatrix4fv(h.uniforms.projectionMatrix,false,v);c.uniformMatrix3fv(h.uniforms.normalMatrix,false,z);c.uniformMatrix4fv(h.uniforms.objectMatrix,
-false,K)};this.loadCamera=function(h,e){c.uniform3f(h.uniforms.cameraPosition,e.position.x,e.position.y,e.position.z)};this.setBlending=function(h){switch(h){case THREE.AdditiveBlending:c.blendEquation(c.FUNC_ADD);c.blendFunc(c.ONE,c.ONE);break;case THREE.SubtractiveBlending:c.blendFunc(c.DST_COLOR,c.ZERO);break;default:c.blendEquation(c.FUNC_ADD);c.blendFunc(c.ONE,c.ONE_MINUS_SRC_ALPHA)}};this.setFaceCulling=function(h,e){if(h){!e||e=="ccw"?c.frontFace(c.CCW):c.frontFace(c.CW);if(h=="back")c.cullFace(c.BACK);
-else h=="front"?c.cullFace(c.FRONT):c.cullFace(c.FRONT_AND_BACK);c.enable(c.CULL_FACE)}else c.disable(c.CULL_FACE)}};
-THREE.RenderableFace3=function(){this.z=null;this.v1=new THREE.Vertex;this.v2=new THREE.Vertex;this.v3=new THREE.Vertex;this.centroidWorld=new THREE.Vector3;this.centroidScreen=new THREE.Vector3;this.normalWorld=new THREE.Vector3;this.vertexNormalsWorld=[new THREE.Vector3,new THREE.Vector3,new THREE.Vector3];this.faceMaterial=this.meshMaterial=null;this.overdraw=false;this.uvs=[null,null,null]};
-THREE.RenderableParticle=function(){this.rotation=this.z=this.y=this.x=null;this.scale=new THREE.Vector2;this.material=null};THREE.RenderableLine=function(){this.z=null;this.v1=new THREE.Vertex;this.v2=new THREE.Vertex;this.material=null};
-var GeometryUtils={merge:function(a,b){var d=b instanceof THREE.Mesh,f=a.vertices.length,g=d?b.geometry:b,i=a.vertices,k=g.vertices,c=a.faces,j=g.faces,y=a.uvs;g=g.uvs;d&&b.updateMatrix();for(var s=0,D=k.length;s<D;s++){var q=new THREE.Vertex(k[s].position.clone());d&&b.matrix.transform(q.position);i.push(q)}s=0;for(D=j.length;s<D;s++){d=j[s];var w;k=d.vertexNormals;if(d instanceof THREE.Face3)w=new THREE.Face3(d.a+f,d.b+f,d.c+f);else if(d instanceof THREE.Face4)w=new THREE.Face4(d.a+f,d.b+f,d.c+
-f,d.d+f);d=0;for(i=k.length;d<i;d++){q=k[d];w.vertexNormals.push(q.clone())}c.push(w)}s=0;for(D=g.length;s<D;s++){f=g[s];c=[];d=0;for(i=f.length;d<i;d++)c.push(new THREE.UV(f[d].u,f[d].v));y.push(c)}}},ImageUtils={loadArray:function(a){var b,d,f=[];b=f.loadCount=0;for(d=a.length;b<d;++b){f[b]=new Image;f[b].loaded=0;f[b].onload=function(){f.loadCount+=1;this.loaded=1};f[b].src=a[b]}return f}},SceneUtils={addMesh:function(a,b,d,f,g,i,k,c,j,y){b=new THREE.Mesh(b,y);b.scale.x=b.scale.y=b.scale.z=d;b.position.x=
-f;b.position.y=g;b.position.z=i;b.rotation.x=k;b.rotation.y=c;b.rotation.z=j;a.addObject(b);return b},addPanoramaCubeWebGL:function(a,b,d){d=new THREE.MeshCubeMaterial({env_map:d});b=new THREE.Mesh(new Cube(b,b,b,1,1,null,true),d);a.addObject(b);return b},addPanoramaCube:function(a,b,d){var f=[];f.push(new THREE.MeshBasicMaterial({map:new THREE.Texture(d[0])}));f.push(new THREE.MeshBasicMaterial({map:new THREE.Texture(d[1])}));f.push(new THREE.MeshBasicMaterial({map:new THREE.Texture(d[2])}));f.push(new THREE.MeshBasicMaterial({map:new THREE.Texture(d[3])}));
-f.push(new THREE.MeshBasicMaterial({map:new THREE.Texture(d[4])}));f.push(new THREE.MeshBasicMaterial({map:new THREE.Texture(d[5])}));mesh=new THREE.Mesh(new Cube(b,b,b,1,1,f,true),new THREE.MeshFaceMaterial);a.addObject(mesh);return mesh},addPanoramaCubePlanes:function(a,b,d){var f=b/2;b=new Plane(b,b);var g=Math.PI/2,i=Math.PI;SceneUtils.addMesh(a,b,1,0,0,-f,0,0,0,new THREE.MeshBasicMaterial({map:new THREE.Texture(d[5])}));SceneUtils.addMesh(a,b,1,-f,0,0,0,g,0,new THREE.MeshBasicMaterial({map:new THREE.Texture(d[0])}));
-SceneUtils.addMesh(a,b,1,f,0,0,0,-g,0,new THREE.MeshBasicMaterial({map:new THREE.Texture(d[1])}));SceneUtils.addMesh(a,b,1,0,f,0,g,0,i,new THREE.MeshBasicMaterial({map:new THREE.Texture(d[2])}));SceneUtils.addMesh(a,b,1,0,-f,0,-g,0,i,new THREE.MeshBasicMaterial({map:new THREE.Texture(d[3])}))}},ShaderUtils={lib:{fresnel:{uniforms:{mRefractionRatio:{type:"f",value:1.02},mFresnelBias:{type:"f",value:0.1},mFresnelPower:{type:"f",value:2},mFresnelScale:{type:"f",value:1},tCube:{type:"t",value:1,texture:null}},
-fragment_shader:"uniform samplerCube tCube;\nvarying vec3 vReflect;\nvarying vec3 vRefract[3];\nvarying float vReflectionFactor;\nvoid main() {\nvec4 reflectedColor = textureCube( tCube, vec3( -vReflect.x, vReflect.yz ) );\nvec4 refractedColor = vec4( 1.0, 1.0, 1.0, 1.0 );\nrefractedColor.r = textureCube( tCube, vec3( -vRefract[0].x, vRefract[0].yz ) ).r;\nrefractedColor.g = textureCube( tCube, vec3( -vRefract[1].x, vRefract[1].yz ) ).g;\nrefractedColor.b = textureCube( tCube, vec3( -vRefract[2].x, vRefract[2].yz ) ).b;\nrefractedColor.a = 1.0;\ngl_FragColor = mix( refractedColor, reflectedColor, clamp( vReflectionFactor, 0.0, 1.0 ) );\n}",
-vertex_shader:"uniform float mRefractionRatio;\nuniform float mFresnelBias;\nuniform float mFresnelScale;\nuniform float mFresnelPower;\nvarying vec3 vReflect;\nvarying vec3 vRefract[3];\nvarying float vReflectionFactor;\nvoid main(void) {\nvec4 mvPosition = modelViewMatrix * vec4( position, 1.0 );\nvec4 mPosition = objectMatrix * vec4( position, 1.0 );\nvec3 nWorld = normalize ( mat3( objectMatrix[0].xyz, objectMatrix[1].xyz, objectMatrix[2].xyz ) * normal );\nvec3 I = mPosition.xyz - cameraPosition;\nvReflect = reflect( I, nWorld );\nvRefract[0] = refract( normalize( I ), nWorld, mRefractionRatio );\nvRefract[1] = refract( normalize( I ), nWorld, mRefractionRatio * 0.99 );\nvRefract[2] = refract( normalize( I ), nWorld, mRefractionRatio * 0.98 );\nvReflectionFactor = mFresnelBias + mFresnelScale * pow( 1.0 + dot( normalize( I ), nWorld ), mFresnelPower );\ngl_Position = projectionMatrix * mvPosition;\n}"}}},
-Cube=function(a,b,d,f,g,i,k){function c(w,v,z,K,u,h,e,m){var r=f||1,p=g||1,o=r+1,x=p+1;u=u/r;h=h/p;var C=j.vertices.length,S;if(w=="x"&&v=="y"||w=="y"&&v=="x")S="z";else if(w=="x"&&v=="z"||w=="z"&&v=="x")S="y";else if(w=="z"&&v=="y"||w=="y"&&v=="z")S="x";for(iy=0;iy<x;iy++)for(ix=0;ix<o;ix++){var B=new THREE.Vector3;B[w]=(ix*u-y)*z;B[v]=(iy*h-s)*K;B[S]=e;j.vertices.push(new THREE.Vertex(B))}for(iy=0;iy<p;iy++)for(ix=0;ix<r;ix++){j.faces.push(new THREE.Face4(ix+o*iy+C,ix+o*(iy+1)+C,ix+1+o*(iy+1)+C,
-ix+1+o*iy+C,null,m));j.uvs.push([new THREE.UV(ix/r,iy/p),new THREE.UV(ix/r,(iy+1)/p),new THREE.UV((ix+1)/r,(iy+1)/p),new THREE.UV((ix+1)/r,iy/p)])}}THREE.Geometry.call(this);var j=this,y=a/2,s=b/2,D=d/2;k=k?-1:1;if(i!==undefined)if(i instanceof Array)this.materials=i;else{this.materials=[];for(var q=0;q<6;q++)this.materials.push([i])}else this.materials=[];c("z","y",1*k,-1,d,b,-y,this.materials[0]);c("z","y",-1*k,-1,d,b,y,this.materials[1]);c("x","z",1*k,1,a,d,s,this.materials[2]);c("x","z",1*k,-1,
-a,d,-s,this.materials[3]);c("x","y",1*k,-1,a,b,D,this.materials[4]);c("x","y",-1*k,-1,a,b,-D,this.materials[5]);(function(){for(var w=[],v=[],z=0,K=j.vertices.length;z<K;z++){for(var u=j.vertices[z],h=false,e=0,m=w.length;e<m;e++){var r=w[e];if(u.position.x==r.position.x&&u.position.y==r.position.y&&u.position.z==r.position.z){v[z]=e;h=true;break}}if(!h){v[z]=w.length;w.push(new THREE.Vertex(u.position.clone()))}}z=0;for(K=j.faces.length;z<K;z++){u=j.faces[z];u.a=v[u.a];u.b=v[u.b];u.c=v[u.c];u.d=
-v[u.d]}j.vertices=w})();this.computeCentroids();this.computeNormals()};Cube.prototype=new THREE.Geometry;Cube.prototype.constructor=Cube;
-var Cylinder=function(a,b,d,f,g){function i(j,y,s){k.vertices.push(new THREE.Vertex(new THREE.Vector3(j,y,s)))}THREE.Geometry.call(this);var k=this,c;for(c=0;c<a;c++)i(Math.sin(6.283*c/a)*b,Math.cos(6.283*c/a)*b,0);for(c=0;c<a;c++)i(Math.sin(6.283*c/a)*d,Math.cos(6.283*c/a)*d,f);for(c=0;c<a;c++)k.faces.push(new THREE.Face4(c,c+a,a+(c+1)%a,(c+1)%a));if(d!=0){i(0,0,-g);for(c=a;c<a+a/2;c++)k.faces.push(new THREE.Face4(2*a,(2*c-2*a)%a,(2*c-2*a+1)%a,(2*c-2*a+2)%a))}if(b!=0){i(0,0,f+g);for(c=a+a/2;c<2*
-a;c++)k.faces.push(new THREE.Face4((2*c-2*a+2)%a+a,(2*c-2*a+1)%a+a,(2*c-2*a)%a+a,2*a+1))}this.computeCentroids();this.computeNormals()};Cylinder.prototype=new THREE.Geometry;Cylinder.prototype.constructor=Cylinder;
-var Plane=function(a,b,d,f){THREE.Geometry.call(this);var g,i=a/2,k=b/2;d=d||1;f=f||1;var c=d+1,j=f+1;a=a/d;var y=b/f;for(g=0;g<j;g++)for(b=0;b<c;b++)this.vertices.push(new THREE.Vertex(new THREE.Vector3(b*a-i,-(g*y-k),0)));for(g=0;g<f;g++)for(b=0;b<d;b++){this.faces.push(new THREE.Face4(b+c*g,b+c*(g+1),b+1+c*(g+1),b+1+c*g));this.uvs.push([new THREE.UV(b/d,g/f),new THREE.UV(b/d,(g+1)/f),new THREE.UV((b+1)/d,(g+1)/f),new THREE.UV((b+1)/d,g/f)])}this.computeCentroids();this.computeNormals()};
-Plane.prototype=new THREE.Geometry;Plane.prototype.constructor=Plane;
-var Sphere=function(a,b,d){THREE.Geometry.call(this);var f,g=Math.max(3,b||8),i=Math.max(2,d||6);b=[];for(d=0;d<i+1;d++){f=d/i;var k=a*Math.cos(f*Math.PI),c=a*Math.sin(f*Math.PI),j=[],y=0;for(f=0;f<g;f++){var s=2*f/g,D=c*Math.sin(s*Math.PI);s=c*Math.cos(s*Math.PI);(d==0||d==i)&&f>0||(y=this.vertices.push(new THREE.Vertex(new THREE.Vector3(s,k,D)))-1);j.push(y)}b.push(j)}var q,w,v;a=b.length;for(d=0;d<a;d++){g=b[d].length;if(d>0)for(f=0;f<g;f++){j=f==g-1;i=b[d][j?0:f+1];k=b[d][j?g-1:f];c=b[d-1][j?
-g-1:f];j=b[d-1][j?0:f+1];D=d/(a-1);q=(d-1)/(a-1);w=(f+1)/g;s=f/g;y=new THREE.UV(1-w,D);D=new THREE.UV(1-s,D);s=new THREE.UV(1-s,q);var z=new THREE.UV(1-w,q);if(d<b.length-1){q=this.vertices[i].position.clone();w=this.vertices[k].position.clone();v=this.vertices[c].position.clone();q.normalize();w.normalize();v.normalize();this.faces.push(new THREE.Face3(i,k,c,[new THREE.Vector3(q.x,q.y,q.z),new THREE.Vector3(w.x,w.y,w.z),new THREE.Vector3(v.x,v.y,v.z)]));this.uvs.push([y,D,s])}if(d>1){q=this.vertices[i].position.clone();
-w=this.vertices[c].position.clone();v=this.vertices[j].position.clone();q.normalize();w.normalize();v.normalize();this.faces.push(new THREE.Face3(i,c,j,[new THREE.Vector3(q.x,q.y,q.z),new THREE.Vector3(w.x,w.y,w.z),new THREE.Vector3(v.x,v.y,v.z)]));this.uvs.push([y,s,z])}}}this.computeCentroids();this.computeNormals()};Sphere.prototype=new THREE.Geometry;Sphere.prototype.constructor=Sphere;THREE.Loader=function(a){this.statusDomElement=(this.showStatus=a)?this.addStatusElement():null};
-THREE.Loader.prototype={addStatusElement:function(){var a=document.createElement("div");a.style.fontSize="0.8em";a.style.textAlign="left";a.style.background="#b00";a.style.color="#fff";a.style.width="140px";a.style.padding="0.25em 0.25em 0.25em 0.5em";a.style.position="absolute";a.style.right="0px";a.style.top="0px";a.style.zIndex=1E3;a.innerHTML="Loading ...";return a},updateProgress:function(a){var b="Loaded ";b+=a.total?(100*a.loaded/a.total).toFixed(0)+"%":(a.loaded/1E3).toFixed(2)+" KB";this.statusDomElement.innerHTML=
-b},loadAsciiOld:function(a,b){var d=document.createElement("script");d.type="text/javascript";d.onload=b;d.src=a;document.getElementsByTagName("head")[0].appendChild(d)},loadAscii:function(a,b,d){var f=(new Date).getTime();a=new Worker(a);a.onmessage=function(g){THREE.Loader.prototype.createModel(g.data,b,d)};a.postMessage(f)},loadBinary:function(a,b,d){var f=(new Date).getTime();a=new Worker(a);var g=this.showProgress?THREE.Loader.prototype.updateProgress:null;a.onmessage=function(i){THREE.Loader.prototype.loadAjaxBuffers(i.data.buffers,
-i.data.materials,b,d,g)};a.onerror=function(i){alert("worker.onerror: "+i.message+"\n"+i.data);i.preventDefault()};a.postMessage(f)},loadAjaxBuffers:function(a,b,d,f,g){var i=new XMLHttpRequest,k=f+"/"+a,c=0;i.onreadystatechange=function(){if(i.readyState==4)i.status==200||i.status==0?THREE.Loader.prototype.createBinModel(i.responseText,d,f,b):alert("Couldn't load ["+k+"] ["+i.status+"]");else if(i.readyState==3){if(g){if(c==0)c=i.getResponseHeader("Content-Length");g({total:c,loaded:i.responseText.length})}}else if(i.readyState==
-2)c=i.getResponseHeader("Content-Length")};i.open("GET",k,true);i.overrideMimeType("text/plain; charset=x-user-defined");i.setRequestHeader("Content-Type","text/plain");i.send(null)},createBinModel:function(a,b,d,f){var g=function(i){function k(l,n){var t=s(l,n),H=s(l,n+1),Q=s(l,n+2),ba=s(l,n+3),fa=(ba<<1&255|Q>>7)-127;t=(Q&127)<<16|H<<8|t;if(t==0&&fa==-127)return 0;return(1-2*(ba>>7))*(1+t*Math.pow(2,-23))*Math.pow(2,fa)}function c(l,n){var t=s(l,n),H=s(l,n+1),Q=s(l,n+2);return(s(l,n+3)<<24)+(Q<<
-16)+(H<<8)+t}function j(l,n){var t=s(l,n);return(s(l,n+1)<<8)+t}function y(l,n){var t=s(l,n);return t>127?t-256:t}function s(l,n){return l.charCodeAt(n)&255}function D(l){var n,t,H;n=c(a,l);t=c(a,l+p);H=c(a,l+o);l=j(a,l+x);THREE.Loader.prototype.f3(u,n,t,H,l)}function q(l){var n,t,H,Q,ba,fa;n=c(a,l);t=c(a,l+p);H=c(a,l+o);Q=j(a,l+x);ba=c(a,l+C);fa=c(a,l+S);l=c(a,l+B);THREE.Loader.prototype.f3n(u,m,n,t,H,Q,ba,fa,l)}function w(l){var n,t,H,Q;n=c(a,l);t=c(a,l+V);H=c(a,l+G);Q=c(a,l+E);l=j(a,l+W);THREE.Loader.prototype.f4(u,
-n,t,H,Q,l)}function v(l){var n,t,H,Q,ba,fa,ka,ra;n=c(a,l);t=c(a,l+V);H=c(a,l+G);Q=c(a,l+E);ba=j(a,l+W);fa=c(a,l+O);ka=c(a,l+I);ra=c(a,l+A);l=c(a,l+L);THREE.Loader.prototype.f4n(u,m,n,t,H,Q,ba,fa,ka,ra,l)}function z(l){var n,t;n=c(a,l);t=c(a,l+T);l=c(a,l+$);THREE.Loader.prototype.uv3(u,r[n*2],r[n*2+1],r[t*2],r[t*2+1],r[l*2],r[l*2+1])}function K(l){var n,t,H;n=c(a,l);t=c(a,l+M);H=c(a,l+J);l=c(a,l+X);THREE.Loader.prototype.uv4(u,r[n*2],r[n*2+1],r[t*2],r[t*2+1],r[H*2],r[H*2+1],r[l*2],r[l*2+1])}var u=
-this,h=0,e,m=[],r=[],p,o,x,C,S,B,V,G,E,W,O,I,A,L,T,$,M,J,X;THREE.Geometry.call(this);THREE.Loader.prototype.init_materials(u,f,i);e={signature:a.substr(h,8),header_bytes:s(a,h+8),vertex_coordinate_bytes:s(a,h+9),normal_coordinate_bytes:s(a,h+10),uv_coordinate_bytes:s(a,h+11),vertex_index_bytes:s(a,h+12),normal_index_bytes:s(a,h+13),uv_index_bytes:s(a,h+14),material_index_bytes:s(a,h+15),nvertices:c(a,h+16),nnormals:c(a,h+16+4),nuvs:c(a,h+16+8),ntri_flat:c(a,h+16+12),ntri_smooth:c(a,h+16+16),ntri_flat_uv:c(a,
-h+16+20),ntri_smooth_uv:c(a,h+16+24),nquad_flat:c(a,h+16+28),nquad_smooth:c(a,h+16+32),nquad_flat_uv:c(a,h+16+36),nquad_smooth_uv:c(a,h+16+40)};h+=e.header_bytes;p=e.vertex_index_bytes;o=e.vertex_index_bytes*2;x=e.vertex_index_bytes*3;C=e.vertex_index_bytes*3+e.material_index_bytes;S=e.vertex_index_bytes*3+e.material_index_bytes+e.normal_index_bytes;B=e.vertex_index_bytes*3+e.material_index_bytes+e.normal_index_bytes*2;V=e.vertex_index_bytes;G=e.vertex_index_bytes*2;E=e.vertex_index_bytes*3;W=e.vertex_index_bytes*
-4;O=e.vertex_index_bytes*4+e.material_index_bytes;I=e.vertex_index_bytes*4+e.material_index_bytes+e.normal_index_bytes;A=e.vertex_index_bytes*4+e.material_index_bytes+e.normal_index_bytes*2;L=e.vertex_index_bytes*4+e.material_index_bytes+e.normal_index_bytes*3;T=e.uv_index_bytes;$=e.uv_index_bytes*2;M=e.uv_index_bytes;J=e.uv_index_bytes*2;X=e.uv_index_bytes*3;h+=function(l){var n,t,H,Q=e.vertex_coordinate_bytes*3,ba=l+e.nvertices*Q;for(l=l;l<ba;l+=Q){n=k(a,l);t=k(a,l+e.vertex_coordinate_bytes);H=
-k(a,l+e.vertex_coordinate_bytes*2);THREE.Loader.prototype.v(u,n,t,H)}return e.nvertices*Q}(h);h+=function(l){var n,t,H,Q=e.normal_coordinate_bytes*3,ba=l+e.nnormals*Q;for(l=l;l<ba;l+=Q){n=y(a,l);t=y(a,l+e.normal_coordinate_bytes);H=y(a,l+e.normal_coordinate_bytes*2);m.push(n/127,t/127,H/127)}return e.nnormals*Q}(h);h+=function(l){var n,t,H=e.uv_coordinate_bytes*2,Q=l+e.nuvs*H;for(l=l;l<Q;l+=H){n=k(a,l);t=k(a,l+e.uv_coordinate_bytes);r.push(n,t)}return e.nuvs*H}(h);h+=function(l){var n,t=e.vertex_index_bytes*
-3+e.material_index_bytes,H=l+e.ntri_flat*t;for(n=l;n<H;n+=t)D(n);return H-l}(h);h+=function(l){var n,t=e.vertex_index_bytes*3+e.material_index_bytes+e.normal_index_bytes*3,H=l+e.ntri_smooth*t;for(n=l;n<H;n+=t)q(n);return H-l}(h);h+=function(l){var n,t=e.vertex_index_bytes*3+e.material_index_bytes,H=t+e.uv_index_bytes*3,Q=l+e.ntri_flat_uv*H;for(n=l;n<Q;n+=H){D(n);z(n+t)}return Q-l}(h);h+=function(l){var n,t=e.vertex_index_bytes*3+e.material_index_bytes+e.normal_index_bytes*3,H=t+e.uv_index_bytes*3,
-Q=l+e.ntri_smooth_uv*H;for(n=l;n<Q;n+=H){q(n);z(n+t)}return Q-l}(h);h+=function(l){var n,t=e.vertex_index_bytes*4+e.material_index_bytes,H=l+e.nquad_flat*t;for(n=l;n<H;n+=t)w(n);return H-l}(h);h+=function(l){var n,t=e.vertex_index_bytes*4+e.material_index_bytes+e.normal_index_bytes*4,H=l+e.nquad_smooth*t;for(n=l;n<H;n+=t)v(n);return H-l}(h);h+=function(l){var n,t=e.vertex_index_bytes*4+e.material_index_bytes,H=t+e.uv_index_bytes*4,Q=l+e.nquad_flat_uv*H;for(n=l;n<Q;n+=H){w(n);K(n+t)}return Q-l}(h);
-h+=function(l){var n,t=e.vertex_index_bytes*4+e.material_index_bytes+e.normal_index_bytes*4,H=t+e.uv_index_bytes*4,Q=l+e.nquad_smooth_uv*H;for(n=l;n<Q;n+=H){v(n);K(n+t)}return Q-l}(h);this.computeCentroids();this.computeNormals()};g.prototype=new THREE.Geometry;g.prototype.constructor=g;b(new g(d))},createModel:function(a,b,d){var f=function(g){var i=this;THREE.Geometry.call(this);THREE.Loader.prototype.init_materials(i,a.materials,g);(function(){var k,c,j,y,s;k=0;for(c=a.vertices.length;k<c;k+=3){j=
-a.vertices[k];y=a.vertices[k+1];s=a.vertices[k+2];THREE.Loader.prototype.v(i,j,y,s)}})();(function(){function k(v,z){THREE.Loader.prototype.f3(i,v[z],v[z+1],v[z+2],v[z+3])}function c(v,z){THREE.Loader.prototype.f3n(i,a.normals,v[z],v[z+1],v[z+2],v[z+3],v[z+4],v[z+5],v[z+6])}function j(v,z){THREE.Loader.prototype.f4(i,v[z],v[z+1],v[z+2],v[z+3],v[z+4])}function y(v,z){THREE.Loader.prototype.f4n(i,a.normals,v[z],v[z+1],v[z+2],v[z+3],v[z+4],v[z+5],v[z+6],v[z+7],v[z+8])}function s(v,z){var K,u,h;K=v[z];
-u=v[z+1];h=v[z+2];THREE.Loader.prototype.uv3(i,a.uvs[K*2],a.uvs[K*2+1],a.uvs[u*2],a.uvs[u*2+1],a.uvs[h*2],a.uvs[h*2+1])}function D(v,z){var K,u,h,e;K=v[z];u=v[z+1];h=v[z+2];e=v[z+3];THREE.Loader.prototype.uv4(i,a.uvs[K*2],a.uvs[K*2+1],a.uvs[u*2],a.uvs[u*2+1],a.uvs[h*2],a.uvs[h*2+1],a.uvs[e*2],a.uvs[e*2+1])}var q,w;q=0;for(w=a.triangles.length;q<w;q+=4)k(a.triangles,q);q=0;for(w=a.triangles_uv.length;q<w;q+=7){k(a.triangles_uv,q);s(a.triangles_uv,q+4)}q=0;for(w=a.triangles_n.length;q<w;q+=7)c(a.triangles_n,
-q);q=0;for(w=a.triangles_n_uv.length;q<w;q+=10){c(a.triangles_n_uv,q);s(a.triangles_n_uv,q+7)}q=0;for(w=a.quads.length;q<w;q+=5)j(a.quads,q);q=0;for(w=a.quads_uv.length;q<w;q+=9){j(a.quads_uv,q);D(a.quads_uv,q+5)}q=0;for(w=a.quads_n.length;q<w;q+=9)y(a.quads_n,q);q=0;for(w=a.quads_n_uv.length;q<w;q+=13){y(a.quads_n_uv,q);D(a.quads_n_uv,q+9)}})();this.computeCentroids();this.computeNormals()};f.prototype=new THREE.Geometry;f.prototype.constructor=f;b(new f(d))},v:function(a,b,d,f){a.vertices.push(new THREE.Vertex(new THREE.Vector3(b,
-d,f)))},f3:function(a,b,d,f,g){a.faces.push(new THREE.Face3(b,d,f,null,a.materials[g]))},f4:function(a,b,d,f,g,i){a.faces.push(new THREE.Face4(b,d,f,g,null,a.materials[i]))},f3n:function(a,b,d,f,g,i,k,c,j){i=a.materials[i];var y=b[c*3],s=b[c*3+1];c=b[c*3+2];var D=b[j*3],q=b[j*3+1];j=b[j*3+2];a.faces.push(new THREE.Face3(d,f,g,[new THREE.Vector3(b[k*3],b[k*3+1],b[k*3+2]),new THREE.Vector3(y,s,c),new THREE.Vector3(D,q,j)],i))},f4n:function(a,b,d,f,g,i,k,c,j,y,s){k=a.materials[k];var D=b[j*3],q=b[j*
-3+1];j=b[j*3+2];var w=b[y*3],v=b[y*3+1];y=b[y*3+2];var z=b[s*3],K=b[s*3+1];s=b[s*3+2];a.faces.push(new THREE.Face4(d,f,g,i,[new THREE.Vector3(b[c*3],b[c*3+1],b[c*3+2]),new THREE.Vector3(D,q,j),new THREE.Vector3(w,v,y),new THREE.Vector3(z,K,s)],k))},uv3:function(a,b,d,f,g,i,k){var c=[];c.push(new THREE.UV(b,d));c.push(new THREE.UV(f,g));c.push(new THREE.UV(i,k));a.uvs.push(c)},uv4:function(a,b,d,f,g,i,k,c,j){var y=[];y.push(new THREE.UV(b,d));y.push(new THREE.UV(f,g));y.push(new THREE.UV(i,k));y.push(new THREE.UV(c,
-j));a.uvs.push(y)},init_materials:function(a,b,d){a.materials=[];for(var f=0;f<b.length;++f)a.materials[f]=[THREE.Loader.prototype.createMaterial(b[f],d)]},createMaterial:function(a,b){function d(i){i=Math.log(i)/Math.LN2;return Math.floor(i)==i}var f,g;if(a.map_diffuse&&b){g=document.createElement("canvas");f=new THREE.MeshLambertMaterial({map:new THREE.Texture(g)});g=new Image;g.onload=function(){if(!d(this.width)||!d(this.height)){var i=Math.pow(2,Math.round(Math.log(this.width)/Math.LN2)),k=Math.pow(2,
-Math.round(Math.log(this.height)/Math.LN2));f.map.image.width=i;f.map.image.height=k;f.map.image.getContext("2d").drawImage(this,0,0,i,k)}else f.map.image=this;f.map.image.loaded=1};g.src=b+"/"+a.map_diffuse}else if(a.col_diffuse){g=(a.col_diffuse[0]*255<<16)+(a.col_diffuse[1]*255<<8)+a.col_diffuse[2]*255;f=new THREE.MeshLambertMaterial({color:g,opacity:a.transparency})}else f=a.a_dbg_color?new THREE.MeshLambertMaterial({color:a.a_dbg_color}):new THREE.MeshLambertMaterial({color:15658734});return f}};
+// ThreeExtras.js r30 - http://github.com/mrdoob/three.js
+var THREE=THREE||{};THREE.Color=function(a){this.autoUpdate=true;this.setHex(a)};
+THREE.Color.prototype={setRGB:function(a,c,d){this.r=a;this.g=c;this.b=d;if(this.autoUpdate){this.updateHex();this.updateStyleString()}},setHex:function(a){this.hex=~~a&16777215;if(this.autoUpdate){this.updateRGBA();this.updateStyleString()}},updateHex:function(){this.hex=~~(this.r*255)<<16^~~(this.g*255)<<8^~~(this.b*255)},updateRGBA:function(){this.r=(this.hex>>16&255)/255;this.g=(this.hex>>8&255)/255;this.b=(this.hex&255)/255},updateStyleString:function(){this.__styleString="rgb("+~~(this.r*255)+
+","+~~(this.g*255)+","+~~(this.b*255)+")"},toString:function(){return"THREE.Color ( r: "+this.r+", g: "+this.g+", b: "+this.b+", hex: "+this.hex+" )"}};THREE.Vector2=function(a,c){this.x=a||0;this.y=c||0};
+THREE.Vector2.prototype={set:function(a,c){this.x=a;this.y=c;return this},copy:function(a){this.x=a.x;this.y=a.y;return this},addSelf:function(a){this.x+=a.x;this.y+=a.y;return this},add:function(a,c){this.x=a.x+c.x;this.y=a.y+c.y;return this},subSelf:function(a){this.x-=a.x;this.y-=a.y;return this},sub:function(a,c){this.x=a.x-c.x;this.y=a.y-c.y;return this},multiplyScalar:function(a){this.x*=a;this.y*=a;return this},unit:function(){this.multiplyScalar(1/this.length());return this},length:function(){return Math.sqrt(this.x*
+this.x+this.y*this.y)},lengthSq:function(){return this.x*this.x+this.y*this.y},negate:function(){this.x=-this.x;this.y=-this.y;return this},clone:function(){return new THREE.Vector2(this.x,this.y)},toString:function(){return"THREE.Vector2 ("+this.x+", "+this.y+")"}};THREE.Vector3=function(a,c,d){this.x=a||0;this.y=c||0;this.z=d||0};
+THREE.Vector3.prototype={set:function(a,c,d){this.x=a;this.y=c;this.z=d;return this},copy:function(a){this.x=a.x;this.y=a.y;this.z=a.z;return this},add:function(a,c){this.x=a.x+c.x;this.y=a.y+c.y;this.z=a.z+c.z;return this},addSelf:function(a){this.x+=a.x;this.y+=a.y;this.z+=a.z;return this},addScalar:function(a){this.x+=a;this.y+=a;this.z+=a;return this},sub:function(a,c){this.x=a.x-c.x;this.y=a.y-c.y;this.z=a.z-c.z;return this},subSelf:function(a){this.x-=a.x;this.y-=a.y;this.z-=a.z;return this},
+cross:function(a,c){this.x=a.y*c.z-a.z*c.y;this.y=a.z*c.x-a.x*c.z;this.z=a.x*c.y-a.y*c.x;return this},crossSelf:function(a){var c=this.x,d=this.y,f=this.z;this.x=d*a.z-f*a.y;this.y=f*a.x-c*a.z;this.z=c*a.y-d*a.x;return this},multiplySelf:function(a){this.x*=a.x;this.y*=a.y;this.z*=a.z;return this},multiplyScalar:function(a){this.x*=a;this.y*=a;this.z*=a;return this},divideScalar:function(a){this.x/=a;this.y/=a;this.z/=a;return this},dot:function(a){return this.x*a.x+this.y*a.y+this.z*a.z},distanceTo:function(a){var c=
+this.x-a.x,d=this.y-a.y;a=this.z-a.z;return Math.sqrt(c*c+d*d+a*a)},distanceToSquared:function(a){var c=this.x-a.x,d=this.y-a.y;a=this.z-a.z;return c*c+d*d+a*a},length:function(){return Math.sqrt(this.x*this.x+this.y*this.y+this.z*this.z)},lengthSq:function(){return this.x*this.x+this.y*this.y+this.z*this.z},negate:function(){this.x=-this.x;this.y=-this.y;this.z=-this.z;return this},normalize:function(){var a=Math.sqrt(this.x*this.x+this.y*this.y+this.z*this.z);a>0?this.multiplyScalar(1/a):this.set(0,
+0,0);return this},setLength:function(a){return this.normalize().multiplyScalar(a)},isZero:function(){return Math.abs(this.x)<1.0E-4&&Math.abs(this.y)<1.0E-4&&Math.abs(this.z)<1.0E-4},clone:function(){return new THREE.Vector3(this.x,this.y,this.z)},toString:function(){return"THREE.Vector3 ( "+this.x+", "+this.y+", "+this.z+" )"}};THREE.Vector4=function(a,c,d,f){this.x=a||0;this.y=c||0;this.z=d||0;this.w=f||1};
+THREE.Vector4.prototype={set:function(a,c,d,f){this.x=a;this.y=c;this.z=d;this.w=f;return this},copy:function(a){this.x=a.x;this.y=a.y;this.z=a.z;this.w=a.w||1;return this},add:function(a,c){this.x=a.x+c.x;this.y=a.y+c.y;this.z=a.z+c.z;this.w=a.w+c.w;return this},addSelf:function(a){this.x+=a.x;this.y+=a.y;this.z+=a.z;this.w+=a.w;return this},sub:function(a,c){this.x=a.x-c.x;this.y=a.y-c.y;this.z=a.z-c.z;this.w=a.w-c.w;return this},subSelf:function(a){this.x-=a.x;this.y-=a.y;this.z-=a.z;this.w-=a.w;
+return this},multiplyScalar:function(a){this.x*=a;this.y*=a;this.z*=a;this.w*=a;return this},divideScalar:function(a){this.x/=a;this.y/=a;this.z/=a;this.w/=a;return this},lerpSelf:function(a,c){this.x+=(a.x-this.x)*c;this.y+=(a.y-this.y)*c;this.z+=(a.z-this.z)*c;this.w+=(a.w-this.w)*c},clone:function(){return new THREE.Vector4(this.x,this.y,this.z,this.w)},toString:function(){return"THREE.Vector4 ("+this.x+", "+this.y+", "+this.z+", "+this.w+")"}};
+THREE.Ray=function(a,c){this.origin=a||new THREE.Vector3;this.direction=c||new THREE.Vector3};
+THREE.Ray.prototype={intersectScene:function(a){var c,d,f=a.objects,g=[];a=0;for(c=f.length;a<c;a++){d=f[a];if(d instanceof THREE.Mesh)g=g.concat(this.intersectObject(d))}g.sort(function(i,k){return i.distance-k.distance});return g},intersectObject:function(a){function c(I,t,h,e){e=e.clone().subSelf(t);h=h.clone().subSelf(t);var l=I.clone().subSelf(t);I=e.dot(e);t=e.dot(h);e=e.dot(l);var r=h.dot(h);h=h.dot(l);l=1/(I*r-t*t);r=(r*e-t*h)*l;I=(I*h-t*e)*l;return r>0&&I>0&&r+I<1}var d,f,g,i,k,b,j,x,s,D,
+o,v=a.geometry,u=v.vertices,y=[];d=0;for(f=v.faces.length;d<f;d++){g=v.faces[d];D=this.origin.clone();o=this.direction.clone();i=a.matrix.transformVector3(u[g.a].position.clone());k=a.matrix.transformVector3(u[g.b].position.clone());b=a.matrix.transformVector3(u[g.c].position.clone());j=g instanceof THREE.Face4?a.matrix.transformVector3(u[g.d].position.clone()):null;x=a.rotationMatrix.transformVector3(g.normal.clone());s=o.dot(x);if(s<0){x=x.dot((new THREE.Vector3).sub(i,D))/s;D=D.addSelf(o.multiplyScalar(x));
+if(g instanceof THREE.Face3){if(c(D,i,k,b)){g={distance:this.origin.distanceTo(D),point:D,face:g,object:a};y.push(g)}}else if(g instanceof THREE.Face4)if(c(D,i,k,j)||c(D,k,b,j)){g={distance:this.origin.distanceTo(D),point:D,face:g,object:a};y.push(g)}}}return y}};
+THREE.Rectangle=function(){function a(){i=f-c;k=g-d}var c,d,f,g,i,k,b=true;this.getX=function(){return c};this.getY=function(){return d};this.getWidth=function(){return i};this.getHeight=function(){return k};this.getLeft=function(){return c};this.getTop=function(){return d};this.getRight=function(){return f};this.getBottom=function(){return g};this.set=function(j,x,s,D){b=false;c=j;d=x;f=s;g=D;a()};this.addPoint=function(j,x){if(b){b=false;c=j;d=x;f=j;g=x}else{c=Math.min(c,j);d=Math.min(d,x);f=Math.max(f,
+j);g=Math.max(g,x)}a()};this.addRectangle=function(j){if(b){b=false;c=j.getLeft();d=j.getTop();f=j.getRight();g=j.getBottom()}else{c=Math.min(c,j.getLeft());d=Math.min(d,j.getTop());f=Math.max(f,j.getRight());g=Math.max(g,j.getBottom())}a()};this.inflate=function(j){c-=j;d-=j;f+=j;g+=j;a()};this.minSelf=function(j){c=Math.max(c,j.getLeft());d=Math.max(d,j.getTop());f=Math.min(f,j.getRight());g=Math.min(g,j.getBottom());a()};this.instersects=function(j){return Math.min(f,j.getRight())-Math.max(c,j.getLeft())>=
+0&&Math.min(g,j.getBottom())-Math.max(d,j.getTop())>=0};this.empty=function(){b=true;g=f=d=c=0;a()};this.isEmpty=function(){return b};this.toString=function(){return"THREE.Rectangle ( left: "+c+", right: "+f+", top: "+d+", bottom: "+g+", width: "+i+", height: "+k+" )"}};THREE.Matrix3=function(){this.m=[]};THREE.Matrix3.prototype={transpose:function(){var a;a=this.m[1];this.m[1]=this.m[3];this.m[3]=a;a=this.m[2];this.m[2]=this.m[6];this.m[6]=a;a=this.m[5];this.m[5]=this.m[7];this.m[7]=a;return this}};
+THREE.Matrix4=function(){};
+THREE.Matrix4.prototype={n11:1,n12:0,n13:0,n14:0,n21:0,n22:1,n23:0,n24:0,n31:0,n32:0,n33:1,n34:0,n41:0,n42:0,n43:0,n44:1,identity:function(){this.n11=1;this.n21=this.n14=this.n13=this.n12=0;this.n22=1;this.n32=this.n31=this.n24=this.n23=0;this.n33=1;this.n43=this.n42=this.n41=this.n34=0;this.n44=1},copy:function(a){this.n11=a.n11;this.n12=a.n12;this.n13=a.n13;this.n14=a.n14;this.n21=a.n21;this.n22=a.n22;this.n23=a.n23;this.n24=a.n24;this.n31=a.n31;this.n32=a.n32;this.n33=a.n33;this.n34=a.n34;this.n41=
+a.n41;this.n42=a.n42;this.n43=a.n43;this.n44=a.n44},lookAt:function(a,c,d){var f=new THREE.Vector3,g=new THREE.Vector3,i=new THREE.Vector3;i.sub(a,c).normalize();f.cross(d,i).normalize();g.cross(i,f).normalize();this.n11=f.x;this.n12=f.y;this.n13=f.z;this.n14=-f.dot(a);this.n21=g.x;this.n22=g.y;this.n23=g.z;this.n24=-g.dot(a);this.n31=i.x;this.n32=i.y;this.n33=i.z;this.n34=-i.dot(a);this.n43=this.n42=this.n41=0;this.n44=1},transformVector3:function(a){var c=a.x,d=a.y,f=a.z;a.x=this.n11*c+this.n12*
+d+this.n13*f+this.n14;a.y=this.n21*c+this.n22*d+this.n23*f+this.n24;a.z=this.n31*c+this.n32*d+this.n33*f+this.n34;a.multiplyScalar(1/(this.n41*c+this.n42*d+this.n43*f+this.n44));return a},transformVector4:function(a){var c=a.x,d=a.y,f=a.z,g=a.w;a.x=this.n11*c+this.n12*d+this.n13*f+this.n14*g;a.y=this.n21*c+this.n22*d+this.n23*f+this.n24*g;a.z=this.n31*c+this.n32*d+this.n33*f+this.n34*g;a.w=this.n41*c+this.n42*d+this.n43*f+this.n44*g;return a},crossVector:function(a){var c=new THREE.Vector4;c.x=this.n11*
+a.x+this.n12*a.y+this.n13*a.z+this.n14*a.w;c.y=this.n21*a.x+this.n22*a.y+this.n23*a.z+this.n24*a.w;c.z=this.n31*a.x+this.n32*a.y+this.n33*a.z+this.n34*a.w;c.w=a.w?this.n41*a.x+this.n42*a.y+this.n43*a.z+this.n44*a.w:1;return c},multiply:function(a,c){var d=a.n11,f=a.n12,g=a.n13,i=a.n14,k=a.n21,b=a.n22,j=a.n23,x=a.n24,s=a.n31,D=a.n32,o=a.n33,v=a.n34,u=a.n41,y=a.n42,I=a.n43,t=a.n44,h=c.n11,e=c.n12,l=c.n13,r=c.n14,n=c.n21,p=c.n22,w=c.n23,C=c.n24,L=c.n31,B=c.n32,U=c.n33,F=c.n34,E=c.n41,V=c.n42,T=c.n43,
+J=c.n44;this.n11=d*h+f*n+g*L+i*E;this.n12=d*e+f*p+g*B+i*V;this.n13=d*l+f*w+g*U+i*T;this.n14=d*r+f*C+g*F+i*J;this.n21=k*h+b*n+j*L+x*E;this.n22=k*e+b*p+j*B+x*V;this.n23=k*l+b*w+j*U+x*T;this.n24=k*r+b*C+j*F+x*J;this.n31=s*h+D*n+o*L+v*E;this.n32=s*e+D*p+o*B+v*V;this.n33=s*l+D*w+o*U+v*T;this.n34=s*r+D*C+o*F+v*J;this.n41=u*h+y*n+I*L+t*E;this.n42=u*e+y*p+I*B+t*V;this.n43=u*l+y*w+I*U+t*T;this.n44=u*r+y*C+I*F+t*J},multiplySelf:function(a){var c=this.n11,d=this.n12,f=this.n13,g=this.n14,i=this.n21,k=this.n22,
+b=this.n23,j=this.n24,x=this.n31,s=this.n32,D=this.n33,o=this.n34,v=this.n41,u=this.n42,y=this.n43,I=this.n44;this.n11=c*a.n11+d*a.n21+f*a.n31+g*a.n41;this.n12=c*a.n12+d*a.n22+f*a.n32+g*a.n42;this.n13=c*a.n13+d*a.n23+f*a.n33+g*a.n43;this.n14=c*a.n14+d*a.n24+f*a.n34+g*a.n44;this.n21=i*a.n11+k*a.n21+b*a.n31+j*a.n41;this.n22=i*a.n12+k*a.n22+b*a.n32+j*a.n42;this.n23=i*a.n13+k*a.n23+b*a.n33+j*a.n43;this.n24=i*a.n14+k*a.n24+b*a.n34+j*a.n44;this.n31=x*a.n11+s*a.n21+D*a.n31+o*a.n41;this.n32=x*a.n12+s*a.n22+
+D*a.n32+o*a.n42;this.n33=x*a.n13+s*a.n23+D*a.n33+o*a.n43;this.n34=x*a.n14+s*a.n24+D*a.n34+o*a.n44;this.n41=v*a.n11+u*a.n21+y*a.n31+I*a.n41;this.n42=v*a.n12+u*a.n22+y*a.n32+I*a.n42;this.n43=v*a.n13+u*a.n23+y*a.n33+I*a.n43;this.n44=v*a.n14+u*a.n24+y*a.n34+I*a.n44},multiplyScalar:function(a){this.n11*=a;this.n12*=a;this.n13*=a;this.n14*=a;this.n21*=a;this.n22*=a;this.n23*=a;this.n24*=a;this.n31*=a;this.n32*=a;this.n33*=a;this.n34*=a;this.n41*=a;this.n42*=a;this.n43*=a;this.n44*=a},determinant:function(){return this.n14*
+this.n23*this.n32*this.n41-this.n13*this.n24*this.n32*this.n41-this.n14*this.n22*this.n33*this.n41+this.n12*this.n24*this.n33*this.n41+this.n13*this.n22*this.n34*this.n41-this.n12*this.n23*this.n34*this.n41-this.n14*this.n23*this.n31*this.n42+this.n13*this.n24*this.n31*this.n42+this.n14*this.n21*this.n33*this.n42-this.n11*this.n24*this.n33*this.n42-this.n13*this.n21*this.n34*this.n42+this.n11*this.n23*this.n34*this.n42+this.n14*this.n22*this.n31*this.n43-this.n12*this.n24*this.n31*this.n43-this.n14*
+this.n21*this.n32*this.n43+this.n11*this.n24*this.n32*this.n43+this.n12*this.n21*this.n34*this.n43-this.n11*this.n22*this.n34*this.n43-this.n13*this.n22*this.n31*this.n44+this.n12*this.n23*this.n31*this.n44+this.n13*this.n21*this.n32*this.n44-this.n11*this.n23*this.n32*this.n44-this.n12*this.n21*this.n33*this.n44+this.n11*this.n22*this.n33*this.n44},transpose:function(){function a(c,d,f){var g=c[d];c[d]=c[f];c[f]=g}a(this,"n21","n12");a(this,"n31","n13");a(this,"n32","n23");a(this,"n41","n14");a(this,
+"n42","n24");a(this,"n43","n34");return this},clone:function(){var a=new THREE.Matrix4;a.n11=this.n11;a.n12=this.n12;a.n13=this.n13;a.n14=this.n14;a.n21=this.n21;a.n22=this.n22;a.n23=this.n23;a.n24=this.n24;a.n31=this.n31;a.n32=this.n32;a.n33=this.n33;a.n34=this.n34;a.n41=this.n41;a.n42=this.n42;a.n43=this.n43;a.n44=this.n44;return a},flatten:function(){return[this.n11,this.n21,this.n31,this.n41,this.n12,this.n22,this.n32,this.n42,this.n13,this.n23,this.n33,this.n43,this.n14,this.n24,this.n34,this.n44]},
+toString:function(){return"| "+this.n11+" "+this.n12+" "+this.n13+" "+this.n14+" |\n| "+this.n21+" "+this.n22+" "+this.n23+" "+this.n24+" |\n| "+this.n31+" "+this.n32+" "+this.n33+" "+this.n34+" |\n| "+this.n41+" "+this.n42+" "+this.n43+" "+this.n44+" |"}};THREE.Matrix4.translationMatrix=function(a,c,d){var f=new THREE.Matrix4;f.n14=a;f.n24=c;f.n34=d;return f};THREE.Matrix4.scaleMatrix=function(a,c,d){var f=new THREE.Matrix4;f.n11=a;f.n22=c;f.n33=d;return f};
+THREE.Matrix4.rotationXMatrix=function(a){var c=new THREE.Matrix4;c.n22=c.n33=Math.cos(a);c.n32=Math.sin(a);c.n23=-c.n32;return c};THREE.Matrix4.rotationYMatrix=function(a){var c=new THREE.Matrix4;c.n11=c.n33=Math.cos(a);c.n13=Math.sin(a);c.n31=-c.n13;return c};THREE.Matrix4.rotationZMatrix=function(a){var c=new THREE.Matrix4;c.n11=c.n22=Math.cos(a);c.n21=Math.sin(a);c.n12=-c.n21;return c};
+THREE.Matrix4.rotationAxisAngleMatrix=function(a,c){var d=new THREE.Matrix4,f=Math.cos(c),g=Math.sin(c),i=1-f,k=a.x,b=a.y,j=a.z;d.n11=i*k*k+f;d.n12=i*k*b-g*j;d.n13=i*k*j+g*b;d.n21=i*k*b+g*j;d.n22=i*b*b+f;d.n23=i*b*j-g*k;d.n31=i*k*j-g*b;d.n32=i*b*j+g*k;d.n33=i*j*j+f;return d};
+THREE.Matrix4.makeInvert=function(a){var c=new THREE.Matrix4;c.n11=a.n23*a.n34*a.n42-a.n24*a.n33*a.n42+a.n24*a.n32*a.n43-a.n22*a.n34*a.n43-a.n23*a.n32*a.n44+a.n22*a.n33*a.n44;c.n12=a.n14*a.n33*a.n42-a.n13*a.n34*a.n42-a.n14*a.n32*a.n43+a.n12*a.n34*a.n43+a.n13*a.n32*a.n44-a.n12*a.n33*a.n44;c.n13=a.n13*a.n24*a.n42-a.n14*a.n23*a.n42+a.n14*a.n22*a.n43-a.n12*a.n24*a.n43-a.n13*a.n22*a.n44+a.n12*a.n23*a.n44;c.n14=a.n14*a.n23*a.n32-a.n13*a.n24*a.n32-a.n14*a.n22*a.n33+a.n12*a.n24*a.n33+a.n13*a.n22*a.n34-a.n12*
+a.n23*a.n34;c.n21=a.n24*a.n33*a.n41-a.n23*a.n34*a.n41-a.n24*a.n31*a.n43+a.n21*a.n34*a.n43+a.n23*a.n31*a.n44-a.n21*a.n33*a.n44;c.n22=a.n13*a.n34*a.n41-a.n14*a.n33*a.n41+a.n14*a.n31*a.n43-a.n11*a.n34*a.n43-a.n13*a.n31*a.n44+a.n11*a.n33*a.n44;c.n23=a.n14*a.n23*a.n41-a.n13*a.n24*a.n41-a.n14*a.n21*a.n43+a.n11*a.n24*a.n43+a.n13*a.n21*a.n44-a.n11*a.n23*a.n44;c.n24=a.n13*a.n24*a.n31-a.n14*a.n23*a.n31+a.n14*a.n21*a.n33-a.n11*a.n24*a.n33-a.n13*a.n21*a.n34+a.n11*a.n23*a.n34;c.n31=a.n22*a.n34*a.n41-a.n24*a.n32*
+a.n41+a.n24*a.n31*a.n42-a.n21*a.n34*a.n42-a.n22*a.n31*a.n44+a.n21*a.n32*a.n44;c.n32=a.n14*a.n32*a.n41-a.n12*a.n34*a.n41-a.n14*a.n31*a.n42+a.n11*a.n34*a.n42+a.n12*a.n31*a.n44-a.n11*a.n32*a.n44;c.n33=a.n13*a.n24*a.n41-a.n14*a.n22*a.n41+a.n14*a.n21*a.n42-a.n11*a.n24*a.n42-a.n12*a.n21*a.n44+a.n11*a.n22*a.n44;c.n34=a.n14*a.n22*a.n31-a.n12*a.n24*a.n31-a.n14*a.n21*a.n32+a.n11*a.n24*a.n32+a.n12*a.n21*a.n34-a.n11*a.n22*a.n34;c.n41=a.n23*a.n32*a.n41-a.n22*a.n33*a.n41-a.n23*a.n31*a.n42+a.n21*a.n33*a.n42+a.n22*
+a.n31*a.n43-a.n21*a.n32*a.n43;c.n42=a.n12*a.n33*a.n41-a.n13*a.n32*a.n41+a.n13*a.n31*a.n42-a.n11*a.n33*a.n42-a.n12*a.n31*a.n43+a.n11*a.n32*a.n43;c.n43=a.n13*a.n22*a.n41-a.n12*a.n23*a.n41-a.n13*a.n21*a.n42+a.n11*a.n23*a.n42+a.n12*a.n21*a.n43-a.n11*a.n22*a.n43;c.n44=a.n12*a.n23*a.n31-a.n13*a.n22*a.n31+a.n13*a.n21*a.n32-a.n11*a.n23*a.n32-a.n12*a.n21*a.n33+a.n11*a.n22*a.n33;c.multiplyScalar(1/a.determinant());return c};
+THREE.Matrix4.makeInvert3x3=function(a){var c=a.flatten();a=new THREE.Matrix3;var d=c[10]*c[5]-c[6]*c[9],f=-c[10]*c[1]+c[2]*c[9],g=c[6]*c[1]-c[2]*c[5],i=-c[10]*c[4]+c[6]*c[8],k=c[10]*c[0]-c[2]*c[8],b=-c[6]*c[0]+c[2]*c[4],j=c[9]*c[4]-c[5]*c[8],x=-c[9]*c[0]+c[1]*c[8],s=c[5]*c[0]-c[1]*c[4];c=c[0]*d+c[1]*i+c[2]*j;if(c==0)throw"matrix not invertible";c=1/c;a.m[0]=c*d;a.m[1]=c*f;a.m[2]=c*g;a.m[3]=c*i;a.m[4]=c*k;a.m[5]=c*b;a.m[6]=c*j;a.m[7]=c*x;a.m[8]=c*s;return a};
+THREE.Matrix4.makeFrustum=function(a,c,d,f,g,i){var k,b,j;k=new THREE.Matrix4;b=2*g/(c-a);j=2*g/(f-d);a=(c+a)/(c-a);d=(f+d)/(f-d);f=-(i+g)/(i-g);g=-2*i*g/(i-g);k.n11=b;k.n12=0;k.n13=a;k.n14=0;k.n21=0;k.n22=j;k.n23=d;k.n24=0;k.n31=0;k.n32=0;k.n33=f;k.n34=g;k.n41=0;k.n42=0;k.n43=-1;k.n44=0;return k};THREE.Matrix4.makePerspective=function(a,c,d,f){var g;a=d*Math.tan(a*Math.PI/360);g=-a;return THREE.Matrix4.makeFrustum(g*c,a*c,g,a,d,f)};
+THREE.Matrix4.makeOrtho=function(a,c,d,f,g,i){var k,b,j,x;k=new THREE.Matrix4;b=c-a;j=d-f;x=i-g;a=(c+a)/b;d=(d+f)/j;g=(i+g)/x;k.n11=2/b;k.n12=0;k.n13=0;k.n14=-a;k.n21=0;k.n22=2/j;k.n23=0;k.n24=-d;k.n31=0;k.n32=0;k.n33=-2/x;k.n34=-g;k.n41=0;k.n42=0;k.n43=0;k.n44=1;return k};
+THREE.Vertex=function(a,c){this.position=a||new THREE.Vector3;this.positionWorld=new THREE.Vector3;this.positionScreen=new THREE.Vector4;this.normal=c||new THREE.Vector3;this.normalWorld=new THREE.Vector3;this.normalScreen=new THREE.Vector3;this.__visible=true};THREE.Vertex.prototype={toString:function(){return"THREE.Vertex ( position: "+this.position+", normal: "+this.normal+" )"}};
+THREE.Face3=function(a,c,d,f,g){this.a=a;this.b=c;this.c=d;this.centroid=new THREE.Vector3;this.normal=f instanceof THREE.Vector3?f:new THREE.Vector3;this.vertexNormals=f instanceof Array?f:[];this.material=g instanceof Array?g:[g]};THREE.Face3.prototype={toString:function(){return"THREE.Face3 ( "+this.a+", "+this.b+", "+this.c+" )"}};
+THREE.Face4=function(a,c,d,f,g,i){this.a=a;this.b=c;this.c=d;this.d=f;this.centroid=new THREE.Vector3;this.normal=g instanceof THREE.Vector3?g:new THREE.Vector3;this.vertexNormals=g instanceof Array?g:[];this.material=i instanceof Array?i:[i]};THREE.Face4.prototype={toString:function(){return"THREE.Face4 ( "+this.a+", "+this.b+", "+this.c+" "+this.d+" )"}};THREE.UV=function(a,c){this.u=a||0;this.v=c||0};
+THREE.UV.prototype={copy:function(a){this.u=a.u;this.v=a.v},toString:function(){return"THREE.UV ("+this.u+", "+this.v+")"}};THREE.Geometry=function(){this.vertices=[];this.faces=[];this.uvs=[]};
+THREE.Geometry.prototype={computeCentroids:function(){var a,c,d;a=0;for(c=this.faces.length;a<c;a++){d=this.faces[a];d.centroid.set(0,0,0);d.centroid.addSelf(this.vertices[d.a].position);d.centroid.addSelf(this.vertices[d.b].position);d.centroid.addSelf(this.vertices[d.c].position);if(d instanceof THREE.Face3)d.centroid.divideScalar(3);else if(d instanceof THREE.Face4){d.centroid.addSelf(this.vertices[d.d].position);d.centroid.divideScalar(4)}}},computeNormals:function(a){var c,d,f,g,i,k,b=new THREE.Vector3,
+j=new THREE.Vector3;f=0;for(g=this.vertices.length;f<g;f++){i=this.vertices[f];i.normal.set(0,0,0)}f=0;for(g=this.faces.length;f<g;f++){i=this.faces[f];if(a&&i.vertexNormals.length){b.set(0,0,0);c=0;for(d=i.normal.length;c<d;c++)b.addSelf(i.vertexNormals[c]);b.divideScalar(3)}else{c=this.vertices[i.a];d=this.vertices[i.b];k=this.vertices[i.c];b.sub(k.position,d.position);j.sub(c.position,d.position);b.crossSelf(j)}b.isZero()||b.normalize();i.normal.copy(b)}},computeBoundingBox:function(){if(this.vertices.length>
+0){this.bbox={x:[this.vertices[0].position.x,this.vertices[0].position.x],y:[this.vertices[0].position.y,this.vertices[0].position.y],z:[this.vertices[0].position.z,this.vertices[0].position.z]};for(var a=1,c=this.vertices.length;a<c;a++){vertex=this.vertices[a];if(vertex.position.x<this.bbox.x[0])this.bbox.x[0]=vertex.position.x;else if(vertex.position.x>this.bbox.x[1])this.bbox.x[1]=vertex.position.x;if(vertex.position.y<this.bbox.y[0])this.bbox.y[0]=vertex.position.y;else if(vertex.position.y>
+this.bbox.y[1])this.bbox.y[1]=vertex.position.y;if(vertex.position.z<this.bbox.z[0])this.bbox.z[0]=vertex.position.z;else if(vertex.position.z>this.bbox.z[1])this.bbox.z[1]=vertex.position.z}}},toString:function(){return"THREE.Geometry ( vertices: "+this.vertices+", faces: "+this.faces+" )"}};
+THREE.Camera=function(a,c,d,f){this.position=new THREE.Vector3(0,0,0);this.target={position:new THREE.Vector3(0,0,0)};this.up=new THREE.Vector3(0,1,0);this.matrix=new THREE.Matrix4;this.projectionMatrix=THREE.Matrix4.makePerspective(a,c,d,f);this.autoUpdateMatrix=true;this.updateMatrix=function(){this.matrix.lookAt(this.position,this.target.position,this.up)};this.toString=function(){return"THREE.Camera ( "+this.position+", "+this.target.position+" )"}};THREE.Light=function(a){this.color=new THREE.Color(a)};
+THREE.AmbientLight=function(a){THREE.Light.call(this,a)};THREE.AmbientLight.prototype=new THREE.Light;THREE.AmbientLight.prototype.constructor=THREE.AmbientLight;THREE.DirectionalLight=function(a,c){THREE.Light.call(this,a);this.position=new THREE.Vector3(0,1,0);this.intensity=c||1};THREE.DirectionalLight.prototype=new THREE.Light;THREE.DirectionalLight.prototype.constructor=THREE.DirectionalLight;
+THREE.PointLight=function(a,c){THREE.Light.call(this,a);this.position=new THREE.Vector3;this.intensity=c||1};THREE.DirectionalLight.prototype=new THREE.Light;THREE.DirectionalLight.prototype.constructor=THREE.PointLight;
+THREE.Object3D=function(){this.position=new THREE.Vector3;this.rotation=new THREE.Vector3;this.scale=new THREE.Vector3(1,1,1);this.matrix=new THREE.Matrix4;this.translationMatrix=new THREE.Matrix4;this.rotationMatrix=new THREE.Matrix4;this.scaleMatrix=new THREE.Matrix4;this.screen=new THREE.Vector3;this.autoUpdateMatrix=this.visible=true;this.updateMatrix=function(){this.matrixPosition=THREE.Matrix4.translationMatrix(this.position.x,this.position.y,this.position.z);this.rotationMatrix=THREE.Matrix4.rotationXMatrix(this.rotation.x);
+this.rotationMatrix.multiplySelf(THREE.Matrix4.rotationYMatrix(this.rotation.y));this.rotationMatrix.multiplySelf(THREE.Matrix4.rotationZMatrix(this.rotation.z));this.scaleMatrix=THREE.Matrix4.scaleMatrix(this.scale.x,this.scale.y,this.scale.z);this.matrix.copy(this.matrixPosition);this.matrix.multiplySelf(this.rotationMatrix);this.matrix.multiplySelf(this.scaleMatrix)}};THREE.Particle=function(a){THREE.Object3D.call(this);this.material=a instanceof Array?a:[a];this.autoUpdateMatrix=false};
+THREE.Particle.prototype=new THREE.Object3D;THREE.Particle.prototype.constructor=THREE.Particle;THREE.Line=function(a,c){THREE.Object3D.call(this);this.geometry=a;this.material=c instanceof Array?c:[c]};THREE.Line.prototype=new THREE.Object3D;THREE.Line.prototype.constructor=THREE.Line;
+THREE.Mesh=function(a,c,d){THREE.Object3D.call(this);this.geometry=a;this.material=c instanceof Array?c:[c];this.overdraw=this.doubleSided=this.flipSided=false;this.materialFaceGroup={};this.sortFacesByMaterial();d&&this.normalizeUVs();this.geometry.computeBoundingBox()};THREE.Mesh.prototype=new THREE.Object3D;THREE.Mesh.prototype.constructor=THREE.Mesh;
+THREE.Mesh.prototype.sortFacesByMaterial=function(){function a(s){var D=[];c=0;for(d=s.length;c<d;c++)s[c]==undefined?D.push("undefined"):D.push(s[c].toString());return D.join("_")}var c,d,f,g,i,k,b,j,x={};f=0;for(g=this.geometry.faces.length;f<g;f++){i=this.geometry.faces[f];k=i.material;b=a(k);if(x[b]==undefined)x[b]={hash:b,counter:0};j=x[b].hash+"_"+x[b].counter;if(this.materialFaceGroup[j]==undefined)this.materialFaceGroup[j]={faces:[],material:k,vertices:0};i=i instanceof THREE.Face3?3:4;if(this.materialFaceGroup[j].vertices+
+i>65535){x[b].counter+=1;j=x[b].hash+"_"+x[b].counter;if(this.materialFaceGroup[j]==undefined)this.materialFaceGroup[j]={faces:[],material:k,vertices:0}}this.materialFaceGroup[j].faces.push(f);this.materialFaceGroup[j].vertices+=i}};THREE.Mesh.prototype.normalizeUVs=function(){var a,c,d,f,g;a=0;for(c=this.geometry.uvs.length;a<c;a++){g=this.geometry.uvs[a];d=0;for(f=g.length;d<f;d++){if(g[d].u!=1)g[d].u-=Math.floor(g[d].u);if(g[d].v!=1)g[d].v-=Math.floor(g[d].v)}}};THREE.FlatShading=0;
+THREE.SmoothShading=1;THREE.NormalBlending=0;THREE.AdditiveBlending=1;THREE.SubtractiveBlending=2;
+THREE.LineBasicMaterial=function(a){this.color=new THREE.Color(16711680);this.opacity=1;this.blending=THREE.NormalBlending;this.linewidth=1;this.linejoin=this.linecap="round";if(a){a.color!==undefined&&this.color.setHex(a.color);if(a.opacity!==undefined)this.opacity=a.opacity;if(a.blending!==undefined)this.blending=a.blending;if(a.linewidth!==undefined)this.linewidth=a.linewidth;if(a.linecap!==undefined)this.linecap=a.linecap;if(a.linejoin!==undefined)this.linejoin=a.linejoin}this.toString=function(){return"THREE.LineBasicMaterial (<br/>color: "+
+this.color+"<br/>opacity: "+this.opacity+"<br/>blending: "+this.blending+"<br/>linewidth: "+this.linewidth+"<br/>linecap: "+this.linecap+"<br/>linejoin: "+this.linejoin+"<br/>)"}};
+THREE.MeshBasicMaterial=function(a){this.id=THREE.MeshBasicMaterialCounter.value++;this.color=new THREE.Color(15658734);this.env_map=this.map=null;this.combine=THREE.Multiply;this.reflectivity=1;this.refraction_ratio=0.98;this.opacity=1;this.shading=THREE.SmoothShading;this.blending=THREE.NormalBlending;this.wireframe=false;this.wireframe_linewidth=1;this.wireframe_linejoin=this.wireframe_linecap="round";if(a){a.color!==undefined&&this.color.setHex(a.color);if(a.map!==undefined)this.map=a.map;if(a.env_map!==
+undefined)this.env_map=a.env_map;if(a.combine!==undefined)this.combine=a.combine;if(a.reflectivity!==undefined)this.reflectivity=a.reflectivity;if(a.refraction_ratio!==undefined)this.refraction_ratio=a.refraction_ratio;if(a.opacity!==undefined)this.opacity=a.opacity;if(a.shading!==undefined)this.shading=a.shading;if(a.blending!==undefined)this.blending=a.blending;if(a.wireframe!==undefined)this.wireframe=a.wireframe;if(a.wireframe_linewidth!==undefined)this.wireframe_linewidth=a.wireframe_linewidth;
+if(a.wireframe_linecap!==undefined)this.wireframe_linecap=a.wireframe_linecap;if(a.wireframe_linejoin!==undefined)this.wireframe_linejoin=a.wireframe_linejoin}this.toString=function(){return"THREE.MeshBasicMaterial (<br/>id: "+this.id+"<br/>color: "+this.color+"<br/>map: "+this.map+"<br/>env_map: "+this.env_map+"<br/>combine: "+this.combine+"<br/>reflectivity: "+this.reflectivity+"<br/>refraction_ratio: "+this.refraction_ratio+"<br/>opacity: "+this.opacity+"<br/>blending: "+this.blending+"<br/>wireframe: "+
+this.wireframe+"<br/>wireframe_linewidth: "+this.wireframe_linewidth+"<br/>wireframe_linecap: "+this.wireframe_linecap+"<br/>wireframe_linejoin: "+this.wireframe_linejoin+"<br/>)"}};THREE.MeshBasicMaterialCounter={value:0};
+THREE.MeshLambertMaterial=function(a){this.id=THREE.MeshLambertMaterialCounter.value++;this.color=new THREE.Color(15658734);this.env_map=this.map=null;this.combine=THREE.Multiply;this.reflectivity=1;this.refraction_ratio=0.98;this.opacity=1;this.shading=THREE.SmoothShading;this.blending=THREE.NormalBlending;this.wireframe=false;this.wireframe_linewidth=1;this.wireframe_linejoin=this.wireframe_linecap="round";if(a){a.color!==undefined&&this.color.setHex(a.color);if(a.map!==undefined)this.map=a.map;
+if(a.env_map!==undefined)this.env_map=a.env_map;if(a.combine!==undefined)this.combine=a.combine;if(a.reflectivity!==undefined)this.reflectivity=a.reflectivity;if(a.refraction_ratio!==undefined)this.refraction_ratio=a.refraction_ratio;if(a.opacity!==undefined)this.opacity=a.opacity;if(a.shading!==undefined)this.shading=a.shading;if(a.blending!==undefined)this.blending=a.blending;if(a.wireframe!==undefined)this.wireframe=a.wireframe;if(a.wireframe_linewidth!==undefined)this.wireframe_linewidth=a.wireframe_linewidth;
+if(a.wireframe_linecap!==undefined)this.wireframe_linecap=a.wireframe_linecap;if(a.wireframe_linejoin!==undefined)this.wireframe_linejoin=a.wireframe_linejoin}this.toString=function(){return"THREE.MeshLambertMaterial (<br/>id: "+this.id+"<br/>color: "+this.color+"<br/>map: "+this.map+"<br/>env_map: "+this.env_map+"<br/>combine: "+this.combine+"<br/>reflectivity: "+this.reflectivity+"<br/>refraction_ratio: "+this.refraction_ratio+"<br/>opacity: "+this.opacity+"<br/>shading: "+this.shading+"<br/>blending: "+
+this.blending+"<br/>wireframe: "+this.wireframe+"<br/>wireframe_linewidth: "+this.wireframe_linewidth+"<br/>wireframe_linecap: "+this.wireframe_linecap+"<br/>wireframe_linejoin: "+this.wireframe_linejoin+"<br/> )"}};THREE.MeshLambertMaterialCounter={value:0};
+THREE.MeshPhongMaterial=function(a){this.id=THREE.MeshPhongMaterialCounter.value++;this.color=new THREE.Color(15658734);this.ambient=new THREE.Color(328965);this.specular=new THREE.Color(1118481);this.shininess=30;this.env_map=this.specular_map=this.map=null;this.combine=THREE.Multiply;this.reflectivity=1;this.refraction_ratio=0.98;this.opacity=1;this.shading=THREE.SmoothShading;this.blending=THREE.NormalBlending;this.wireframe=false;this.wireframe_linewidth=1;this.wireframe_linejoin=this.wireframe_linecap=
+"round";if(a){if(a.color!==undefined)this.color=new THREE.Color(a.color);if(a.ambient!==undefined)this.ambient=new THREE.Color(a.ambient);if(a.specular!==undefined)this.specular=new THREE.Color(a.specular);if(a.shininess!==undefined)this.shininess=a.shininess;if(a.map!==undefined)this.map=a.map;if(a.specular_map!==undefined)this.specular_map=a.specular_map;if(a.env_map!==undefined)this.env_map=a.env_map;if(a.combine!==undefined)this.combine=a.combine;if(a.reflectivity!==undefined)this.reflectivity=
+a.reflectivity;if(a.refraction_ratio!==undefined)this.refraction_ratio=a.refraction_ratio;if(a.opacity!==undefined)this.opacity=a.opacity;if(a.shading!==undefined)this.shading=a.shading;if(a.blending!==undefined)this.blending=a.blending;if(a.wireframe!==undefined)this.wireframe=a.wireframe;if(a.wireframe_linewidth!==undefined)this.wireframe_linewidth=a.wireframe_linewidth;if(a.wireframe_linecap!==undefined)this.wireframe_linecap=a.wireframe_linecap;if(a.wireframe_linejoin!==undefined)this.wireframe_linejoin=
+a.wireframe_linejoin}this.toString=function(){return"THREE.MeshPhongMaterial (<br/>id: "+this.id+"<br/>color: "+this.color+"<br/>ambient: "+this.ambient+"<br/>specular: "+this.specular+"<br/>shininess: "+this.shininess+"<br/>map: "+this.map+"<br/>specular_map: "+this.specular_map+"<br/>env_map: "+this.env_map+"<br/>combine: "+this.combine+"<br/>reflectivity: "+this.reflectivity+"<br/>refraction_ratio: "+this.refraction_ratio+"<br/>opacity: "+this.opacity+"<br/>shading: "+this.shading+"<br/>wireframe: "+
+this.wireframe+"<br/>wireframe_linewidth: "+this.wireframe_linewidth+"<br/>wireframe_linecap: "+this.wireframe_linecap+"<br/>wireframe_linejoin: "+this.wireframe_linejoin+"<br/>"+ +")"}};THREE.MeshPhongMaterialCounter={value:0};
+THREE.MeshDepthMaterial=function(a){this.near=1;this.far=1E3;this.opacity=1;this.blending=THREE.NormalBlending;if(a){if(a.near!==undefined)this.near=a.near;if(a.far!==undefined)this.far=a.far;if(a.opacity!==undefined)this.opacity=a.opacity;if(a.blending!==undefined)this.blending=a.blending}this.__2near=2*this.near;this.__farPlusNear=this.far+this.near;this.__farMinusNear=this.far-this.near;this.toString=function(){return"THREE.MeshDepthMaterial"}};
+THREE.MeshNormalMaterial=function(a){this.opacity=1;this.shading=THREE.FlatShading;this.blending=THREE.NormalBlending;if(a){if(a.opacity!==undefined)this.opacity=a.opacity;if(a.shading!==undefined)this.shading=a.shading;if(a.blending!==undefined)this.blending=a.blending}this.toString=function(){return"THREE.MeshNormalMaterial"}};THREE.MeshFaceMaterial=function(){this.toString=function(){return"THREE.MeshFaceMaterial"}};
+THREE.MeshCubeMaterial=function(a){this.id=THREE.MeshCubeMaterial.value++;this.env_map=null;this.blending=THREE.NormalBlending;if(a)if(a.env_map!==undefined)this.env_map=a.env_map;this.toString=function(){return"THREE.MeshCubeMaterial( id: "+this.id+"<br/>env_map: "+this.env_map+" )"}};THREE.MeshCubeMaterialCounter={value:0};
+THREE.MeshShaderMaterial=function(a){this.id=THREE.MeshShaderMaterialCounter.value++;this.vertex_shader=this.fragment_shader="void main() {}";this.uniforms={};this.shading=THREE.SmoothShading;this.blending=THREE.NormalBlending;this.wireframe=false;this.wireframe_linewidth=1;this.wireframe_linejoin=this.wireframe_linecap="round";if(a){if(a.fragment_shader!==undefined)this.fragment_shader=a.fragment_shader;if(a.vertex_shader!==undefined)this.vertex_shader=a.vertex_shader;if(a.uniforms!==undefined)this.uniforms=
+a.uniforms;if(a.shading!==undefined)this.shading=a.shading;if(a.blending!==undefined)this.blending=a.blending;if(a.wireframe!==undefined)this.wireframe=a.wireframe;if(a.wireframe_linewidth!==undefined)this.wireframe_linewidth=a.wireframe_linewidth;if(a.wireframe_linecap!==undefined)this.wireframe_linecap=a.wireframe_linecap;if(a.wireframe_linejoin!==undefined)this.wireframe_linejoin=a.wireframe_linejoin}this.toString=function(){return"THREE.MeshShaderMaterial (<br/>id: "+this.id+"<br/>blending: "+
+this.blending+"<br/>wireframe: "+this.wireframe+"<br/>wireframe_linewidth: "+this.wireframe_linewidth+"<br/>wireframe_linecap: "+this.wireframe_linecap+"<br/>wireframe_linejoin: "+this.wireframe_linejoin+"<br/>)"}};THREE.MeshShaderMaterialCounter={value:0};
+THREE.ParticleBasicMaterial=function(a){this.color=new THREE.Color(16711680);this.map=null;this.opacity=1;this.blending=THREE.NormalBlending;this.offset=new THREE.Vector2;if(a){a.color!==undefined&&this.color.setHex(a.color);if(a.map!==undefined)this.map=a.map;if(a.opacity!==undefined)this.opacity=a.opacity;if(a.blending!==undefined)this.blending=a.blending}this.toString=function(){return"THREE.ParticleBasicMaterial (<br/>color: "+this.color+"<br/>map: "+this.map+"<br/>opacity: "+this.opacity+"<br/>blending: "+
+this.blending+"<br/>)"}};THREE.ParticleCircleMaterial=function(a){this.color=new THREE.Color(16711680);this.opacity=1;this.blending=THREE.NormalBlending;if(a){a.color!==undefined&&this.color.setHex(a.color);if(a.opacity!==undefined)this.opacity=a.opacity;if(a.blending!==undefined)this.blending=a.blending}this.toString=function(){return"THREE.ParticleCircleMaterial (<br/>color: "+this.color+"<br/>opacity: "+this.opacity+"<br/>blending: "+this.blending+"<br/>)"}};
+THREE.ParticleDOMMaterial=function(a){this.domElement=a;this.toString=function(){return"THREE.ParticleDOMMaterial ( domElement: "+this.domElement+" )"}};THREE.Texture=function(a,c,d,f){this.image=a;this.loaded=false;this.mapping=c!==undefined?c:THREE.UVMapping;this.wrap_s=d!==undefined?d:THREE.ClampToEdge;this.wrap_t=f!==undefined?f:THREE.ClampToEdge;this.toString=function(){return"THREE.Texture (<br/>image: "+this.image+"<br/>wrap_s: "+this.wrap_s+"<br/>wrap_t: "+this.wrap_t+"<br/>)"}};
+THREE.UVMapping=0;THREE.ReflectionMapping=1;THREE.RefractionMapping=2;THREE.Multiply=0;THREE.Mix=1;THREE.Repeat=0;THREE.ClampToEdge=1;THREE.MirroredRepeat=2;THREE.TextureCube=function(a,c){this.image=a;this.mapping=c?c:THREE.ReflectionMap;this.toString=function(){return"THREE.TextureCube (<br/>image: "+this.image+"<br/>mapping: "+this.mapping+"<br/>)"}};
+THREE.Scene=function(){this.objects=[];this.lights=[];this.addObject=function(a){this.objects.push(a)};this.removeObject=function(a){a=this.objects.indexOf(a);a!==-1&&this.objects.splice(a,1)};this.addLight=function(a){this.lights.push(a)};this.removeLight=function(a){a=this.lights.indexOf(a);a!==-1&&this.lights.splice(a,1)};this.toString=function(){return"THREE.Scene ( "+this.objects+" )"}};
+THREE.Projector=function(){function a(h,e){var l=0,r=1,n=h.z+h.w,p=e.z+e.w,w=-h.z+h.w,C=-e.z+e.w;if(n>=0&&p>=0&&w>=0&&C>=0)return true;else if(n<0&&p<0||w<0&&C<0)return false;else{if(n<0)l=Math.max(l,n/(n-p));else if(p<0)r=Math.min(r,n/(n-p));if(w<0)l=Math.max(l,w/(w-C));else if(C<0)r=Math.min(r,w/(w-C));if(r<l)return false;else{h.lerpSelf(e,l);e.lerpSelf(h,1-r);return true}}}var c=null,d,f,g,i=[],k,b,j=[],x,s,D=[],o=new THREE.Vector4,v=new THREE.Matrix4,u=new THREE.Matrix4,y=new THREE.Vector4,I=
+new THREE.Vector4,t;this.projectScene=function(h,e){var l,r,n,p,w,C,L,B,U,F,E,V,T,J,A,Q,N;c=[];g=b=s=0;e.autoUpdateMatrix&&e.updateMatrix();v.multiply(e.projectionMatrix,e.matrix);L=h.objects;l=0;for(r=L.length;l<r;l++){B=L[l];B.autoUpdateMatrix&&B.updateMatrix();U=B.matrix;F=B.rotationMatrix;E=B.material;V=B.overdraw;if(B instanceof THREE.Mesh){T=B.geometry.vertices;n=0;for(p=T.length;n<p;n++){J=T[n];J.positionWorld.copy(J.position);U.transformVector3(J.positionWorld);A=J.positionScreen;A.copy(J.positionWorld);
+v.transformVector4(A);A.multiplyScalar(1/A.w);J.__visible=A.z>0&&A.z<1}J=B.geometry.faces;n=0;for(p=J.length;n<p;n++){A=J[n];if(A instanceof THREE.Face3){w=T[A.a];C=T[A.b];Q=T[A.c];if(w.__visible&&C.__visible&&Q.__visible)if(B.doubleSided||B.flipSided!=(Q.positionScreen.x-w.positionScreen.x)*(C.positionScreen.y-w.positionScreen.y)-(Q.positionScreen.y-w.positionScreen.y)*(C.positionScreen.x-w.positionScreen.x)<0){d=i[g]=i[g]||new THREE.RenderableFace3;d.v1.positionWorld.copy(w.positionWorld);d.v2.positionWorld.copy(C.positionWorld);
+d.v3.positionWorld.copy(Q.positionWorld);d.v1.positionScreen.copy(w.positionScreen);d.v2.positionScreen.copy(C.positionScreen);d.v3.positionScreen.copy(Q.positionScreen);d.normalWorld.copy(A.normal);F.transformVector3(d.normalWorld);d.centroidWorld.copy(A.centroid);U.transformVector3(d.centroidWorld);d.centroidScreen.copy(d.centroidWorld);v.transformVector3(d.centroidScreen);Q=A.vertexNormals;t=d.vertexNormalsWorld;w=0;for(C=Q.length;w<C;w++){N=t[w]=t[w]||new THREE.Vector3;N.copy(Q[w]);F.transformVector3(N)}d.z=
+d.centroidScreen.z;d.meshMaterial=E;d.faceMaterial=A.material;d.overdraw=V;if(B.geometry.uvs[n]){d.uvs[0]=B.geometry.uvs[n][0];d.uvs[1]=B.geometry.uvs[n][1];d.uvs[2]=B.geometry.uvs[n][2]}c.push(d);g++}}else if(A instanceof THREE.Face4){w=T[A.a];C=T[A.b];Q=T[A.c];N=T[A.d];if(w.__visible&&C.__visible&&Q.__visible&&N.__visible)if(B.doubleSided||B.flipSided!=((N.positionScreen.x-w.positionScreen.x)*(C.positionScreen.y-w.positionScreen.y)-(N.positionScreen.y-w.positionScreen.y)*(C.positionScreen.x-w.positionScreen.x)<
+0||(C.positionScreen.x-Q.positionScreen.x)*(N.positionScreen.y-Q.positionScreen.y)-(C.positionScreen.y-Q.positionScreen.y)*(N.positionScreen.x-Q.positionScreen.x)<0)){d=i[g]=i[g]||new THREE.RenderableFace3;d.v1.positionWorld.copy(w.positionWorld);d.v2.positionWorld.copy(C.positionWorld);d.v3.positionWorld.copy(N.positionWorld);d.v1.positionScreen.copy(w.positionScreen);d.v2.positionScreen.copy(C.positionScreen);d.v3.positionScreen.copy(N.positionScreen);d.normalWorld.copy(A.normal);F.transformVector3(d.normalWorld);
+d.centroidWorld.copy(A.centroid);U.transformVector3(d.centroidWorld);d.centroidScreen.copy(d.centroidWorld);v.transformVector3(d.centroidScreen);d.z=d.centroidScreen.z;d.meshMaterial=E;d.faceMaterial=A.material;d.overdraw=V;if(B.geometry.uvs[n]){d.uvs[0]=B.geometry.uvs[n][0];d.uvs[1]=B.geometry.uvs[n][1];d.uvs[2]=B.geometry.uvs[n][3]}c.push(d);g++;f=i[g]=i[g]||new THREE.RenderableFace3;f.v1.positionWorld.copy(C.positionWorld);f.v2.positionWorld.copy(Q.positionWorld);f.v3.positionWorld.copy(N.positionWorld);
+f.v1.positionScreen.copy(C.positionScreen);f.v2.positionScreen.copy(Q.positionScreen);f.v3.positionScreen.copy(N.positionScreen);f.normalWorld.copy(d.normalWorld);f.centroidWorld.copy(d.centroidWorld);f.centroidScreen.copy(d.centroidScreen);f.z=f.centroidScreen.z;f.meshMaterial=E;f.faceMaterial=A.material;f.overdraw=V;if(B.geometry.uvs[n]){f.uvs[0]=B.geometry.uvs[n][1];f.uvs[1]=B.geometry.uvs[n][2];f.uvs[2]=B.geometry.uvs[n][3]}c.push(f);g++}}}}else if(B instanceof THREE.Line){u.multiply(v,U);T=B.geometry.vertices;
+J=T[0];J.positionScreen.copy(J.position);u.transformVector4(J.positionScreen);n=1;for(p=T.length;n<p;n++){w=T[n];w.positionScreen.copy(w.position);u.transformVector4(w.positionScreen);C=T[n-1];y.copy(w.positionScreen);I.copy(C.positionScreen);if(a(y,I)){y.multiplyScalar(1/y.w);I.multiplyScalar(1/I.w);k=j[b]=j[b]||new THREE.RenderableLine;k.v1.positionScreen.copy(y);k.v2.positionScreen.copy(I);k.z=Math.max(y.z,I.z);k.material=B.material;c.push(k);b++}}}else if(B instanceof THREE.Particle){o.set(B.position.x,
+B.position.y,B.position.z,1);v.transformVector4(o);o.z/=o.w;if(o.z>0&&o.z<1){x=D[s]=D[s]||new THREE.RenderableParticle;x.x=o.x/o.w;x.y=o.y/o.w;x.z=o.z;x.rotation=B.rotation.z;x.scale.x=B.scale.x*Math.abs(x.x-(o.x+e.projectionMatrix.n11)/(o.w+e.projectionMatrix.n14));x.scale.y=B.scale.y*Math.abs(x.y-(o.y+e.projectionMatrix.n22)/(o.w+e.projectionMatrix.n24));x.material=B.material;c.push(x);s++}}}c.sort(function(W,M){return M.z-W.z});return c};this.unprojectVector=function(h,e){var l=new THREE.Matrix4;
+l.multiply(THREE.Matrix4.makeInvert(e.matrix),THREE.Matrix4.makeInvert(e.projectionMatrix));l.transformVector3(h);return h}};
+THREE.DOMRenderer=function(){THREE.Renderer.call(this);var a=null,c=new THREE.Projector,d,f,g,i;this.domElement=document.createElement("div");this.setSize=function(k,b){d=k;f=b;g=d/2;i=f/2};this.render=function(k,b){var j,x,s,D,o,v,u,y;a=c.projectScene(k,b);j=0;for(x=a.length;j<x;j++){o=a[j];if(o instanceof THREE.RenderableParticle){u=o.x*g+g;y=o.y*i+i;s=0;for(D=o.material.length;s<D;s++){v=o.material[s];if(v instanceof THREE.ParticleDOMMaterial){v=v.domElement;v.style.left=u+"px";v.style.top=y+"px"}}}}}};
+THREE.CanvasRenderer=function(){function a(R,aa,Z,O){var H,S,ca,X,$=R.lights;R=0;for(H=$.length;R<H;R++){S=$[R];ca=S.color;X=S.intensity;if(S instanceof THREE.DirectionalLight){S=Z.dot(S.position)*X;if(S>0){O.r+=ca.r*S;O.g+=ca.g*S;O.b+=ca.b*S}}else if(S instanceof THREE.PointLight){ta.sub(S.position,aa);ta.normalize();S=Z.dot(ta)*X;if(S>0){O.r+=ca.r*S;O.g+=ca.g*S;O.b+=ca.b*S}}}}function c(R,aa,Z,O,H,S){if(H.opacity!=0){i(H.opacity);k(H.blending);U=R.positionScreen.x;F=R.positionScreen.y;E=aa.positionScreen.x;
+V=aa.positionScreen.y;T=Z.positionScreen.x;J=Z.positionScreen.y;var ca=U,X=F,$=E,da=V,ba=T,ha=J;t.beginPath();t.moveTo(ca,X);t.lineTo($,da);t.lineTo(ba,ha);t.lineTo(ca,X);t.closePath();if(H instanceof THREE.MeshBasicMaterial)if(H.map)g(U,F,E,V,T,J,H.map.image,O.uvs[0].u,O.uvs[0].v,O.uvs[1].u,O.uvs[1].v,O.uvs[2].u,O.uvs[2].v);else H.wireframe?d(H.color.__styleString,H.wireframe_linewidth):f(H.color.__styleString);else if(H instanceof THREE.MeshLambertMaterial){if(H.map&&!H.wireframe){g(U,F,E,V,T,J,
+H.map.image,O.uvs[0].u,O.uvs[0].v,O.uvs[1].u,O.uvs[1].v,O.uvs[2].u,O.uvs[2].v);k(THREE.SubtractiveBlending)}if(fa)if(!H.wireframe&&H.shading==THREE.SmoothShading&&O.vertexNormalsWorld.length==3){Q.r=N.r=W.r=ga.r;Q.g=N.g=W.g=ga.g;Q.b=N.b=W.b=ga.b;a(S,O.v1.positionWorld,O.vertexNormalsWorld[0],Q);a(S,O.v2.positionWorld,O.vertexNormalsWorld[1],N);a(S,O.v3.positionWorld,O.vertexNormalsWorld[2],W);M.r=(N.r+W.r)*0.5;M.g=(N.g+W.g)*0.5;M.b=(N.b+W.b)*0.5;q=b(Q,N,W,M);g(U,F,E,V,T,J,q,0,0,1,0,0,1)}else{ea.r=
+ga.r;ea.g=ga.g;ea.b=ga.b;a(S,O.centroidWorld,O.normalWorld,ea);A.r=H.color.r*ea.r;A.g=H.color.g*ea.g;A.b=H.color.b*ea.b;A.updateStyleString();H.wireframe?d(A.__styleString,H.wireframe_linewidth):f(A.__styleString)}else H.wireframe?d(H.color.__styleString,H.wireframe_linewidth):f(H.color.__styleString)}else if(H instanceof THREE.MeshDepthMaterial){K=H.__2near;Y=H.__farPlusNear;m=H.__farMinusNear;Q.r=Q.g=Q.b=1-K/(Y-R.positionScreen.z*m);N.r=N.g=N.b=1-K/(Y-aa.positionScreen.z*m);W.r=W.g=W.b=1-K/(Y-Z.positionScreen.z*
+m);M.r=(N.r+W.r)*0.5;M.g=(N.g+W.g)*0.5;M.b=(N.b+W.b)*0.5;q=b(Q,N,W,M);g(U,F,E,V,T,J,q,0,0,1,0,0,1)}else if(H instanceof THREE.MeshNormalMaterial){A.r=j(O.normalWorld.x);A.g=j(O.normalWorld.y);A.b=j(O.normalWorld.z);A.updateStyleString();H.wireframe?d(A.__styleString,H.wireframe_linewidth):f(A.__styleString)}}}function d(R,aa){if(l!=R)t.strokeStyle=l=R;if(n!=aa)t.lineWidth=n=aa;t.stroke();P.inflate(aa*2)}function f(R){if(r!=R)t.fillStyle=r=R;t.fill()}function g(R,aa,Z,O,H,S,ca,X,$,da,ba,ha,ma){var ka,
+ia;ka=ca.width-1;ia=ca.height-1;X*=ka;$*=ia;da*=ka;ba*=ia;ha*=ka;ma*=ia;Z-=R;O-=aa;H-=R;S-=aa;da-=X;ba-=$;ha-=X;ma-=$;ia=1/(da*ma-ha*ba);ka=(ma*Z-ba*H)*ia;ba=(ma*O-ba*S)*ia;Z=(da*H-ha*Z)*ia;O=(da*S-ha*O)*ia;R=R-ka*X-Z*$;aa=aa-ba*X-O*$;t.save();t.transform(ka,ba,Z,O,R,aa);t.clip();t.drawImage(ca,0,0);t.restore()}function i(R){if(h!=R)t.globalAlpha=h=R}function k(R){if(e!=R){switch(R){case THREE.NormalBlending:t.globalCompositeOperation="source-over";break;case THREE.AdditiveBlending:t.globalCompositeOperation=
+"lighter";break;case THREE.SubtractiveBlending:t.globalCompositeOperation="darker"}e=R}}function b(R,aa,Z,O){ja[0]=w(0,p(255,~~(R.r*255)));ja[1]=w(0,p(255,~~(R.g*255)));ja[2]=w(0,p(255,~~(R.b*255)));ja[4]=w(0,p(255,~~(aa.r*255)));ja[5]=w(0,p(255,~~(aa.g*255)));ja[6]=w(0,p(255,~~(aa.b*255)));ja[8]=w(0,p(255,~~(Z.r*255)));ja[9]=w(0,p(255,~~(Z.g*255)));ja[10]=w(0,p(255,~~(Z.b*255)));ja[12]=w(0,p(255,~~(O.r*255)));ja[13]=w(0,p(255,~~(O.g*255)));ja[14]=w(0,p(255,~~(O.b*255)));pa.putImageData(ua,0,0);sa.drawImage(qa,
+0,0);return ra}function j(R){return R<0?p((1+R)*0.5,0.5):0.5+p(R*0.5,0.5)}function x(R,aa){var Z=aa.x-R.x,O=aa.y-R.y,H=1/Math.sqrt(Z*Z+O*O);Z*=H;O*=H;aa.x+=Z;aa.y+=O;R.x-=Z;R.y-=O}var s=null,D=new THREE.Projector,o=document.createElement("canvas"),v,u,y,I,t=o.getContext("2d"),h=1,e=0,l=null,r=null,n=1,p=Math.min,w=Math.max,C,L,B,U,F,E,V,T,J,A=new THREE.Color,Q=new THREE.Color,N=new THREE.Color,W=new THREE.Color,M=new THREE.Color,K,Y,m,q,z=new THREE.Rectangle,G=new THREE.Rectangle,P=new THREE.Rectangle,
+fa=false,ea=new THREE.Color,ga=new THREE.Color,la=new THREE.Color,na=new THREE.Color,xa=Math.PI*2,ta=new THREE.Vector3,qa,pa,ua,ja,ra,sa,oa=16;qa=document.createElement("canvas");qa.width=qa.height=2;pa=qa.getContext("2d");pa.fillStyle="rgba(0,0,0,1)";pa.fillRect(0,0,2,2);ua=pa.getImageData(0,0,2,2);ja=ua.data;ra=document.createElement("canvas");ra.width=ra.height=oa;sa=ra.getContext("2d");sa.translate(-oa/2,-oa/2);sa.scale(oa,oa);oa--;this.domElement=o;this.autoClear=true;this.setSize=function(R,
+aa){v=R;u=aa;y=v/2;I=u/2;o.width=v;o.height=u;z.set(-y,-I,y,I)};this.clear=function(){if(!G.isEmpty()){G.inflate(1);G.minSelf(z);t.clearRect(G.getX(),G.getY(),G.getWidth(),G.getHeight());G.empty()}};this.render=function(R,aa){var Z,O,H,S,ca,X,$,da;t.setTransform(1,0,0,-1,y,I);this.autoClear&&this.clear();s=D.projectScene(R,aa);if(fa=R.lights.length>0){ca=R.lights;ga.setRGB(0,0,0);la.setRGB(0,0,0);na.setRGB(0,0,0);Z=0;for(O=ca.length;Z<O;Z++){H=ca[Z];S=H.color;if(H instanceof THREE.AmbientLight){ga.r+=
+S.r;ga.g+=S.g;ga.b+=S.b}else if(H instanceof THREE.DirectionalLight){la.r+=S.r;la.g+=S.g;la.b+=S.b}else if(H instanceof THREE.PointLight){na.r+=S.r;na.g+=S.g;na.b+=S.b}}}Z=0;for(O=s.length;Z<O;Z++){H=s[Z];P.empty();if(H instanceof THREE.RenderableParticle){C=H;C.x*=y;C.y*=I;S=0;for(ca=H.material.length;S<ca;S++){X=C;$=H;var ba=H.material[S];if(ba.opacity!=0){i(ba.opacity);k(ba.blending);da=void 0;var ha=void 0,ma=void 0,ka=void 0,ia=void 0,va=void 0,wa=void 0;if(ba instanceof THREE.ParticleBasicMaterial){if(ba.map){ia=
+ba.map;va=ia.width>>1;wa=ia.height>>1;ma=$.scale.x*y;ka=$.scale.y*I;da=ma*va;ha=ka*wa;P.set(X.x-da,X.y-ha,X.x+da,X.y+ha);if(z.instersects(P)){t.save();t.translate(X.x,X.y);t.rotate(-$.rotation);t.scale(ma,-ka);t.translate(-va,-wa);t.drawImage(ia,0,0);t.restore()}}}else if(ba instanceof THREE.ParticleCircleMaterial){if(fa){ea.r=ga.r+la.r+na.r;ea.g=ga.g+la.g+na.g;ea.b=ga.b+la.b+na.b;A.r=ba.color.r*ea.r;A.g=ba.color.g*ea.g;A.b=ba.color.b*ea.b;A.updateStyleString()}else A.__styleString=ba.color.__styleString;
+da=$.scale.x*y;ha=$.scale.y*I;P.set(X.x-da,X.y-ha,X.x+da,X.y+ha);if(z.instersects(P)){ba=A.__styleString;if(r!=ba)t.fillStyle=r=ba;t.save();t.translate(X.x,X.y);t.rotate(-$.rotation);t.scale(da,ha);t.beginPath();t.arc(0,0,1,0,xa,true);t.closePath();t.fill();t.restore()}}}}}else if(H instanceof THREE.RenderableLine){C=H.v1;L=H.v2;C.positionScreen.x*=y;C.positionScreen.y*=I;L.positionScreen.x*=y;L.positionScreen.y*=I;P.addPoint(C.positionScreen.x,C.positionScreen.y);P.addPoint(L.positionScreen.x,L.positionScreen.y);
+if(z.instersects(P)){S=0;for(ca=H.material.length;S<ca;){$=C;da=L;X=H.material[S++];if(X.opacity!=0){i(X.opacity);k(X.blending);t.beginPath();t.moveTo($.positionScreen.x,$.positionScreen.y);t.lineTo(da.positionScreen.x,da.positionScreen.y);t.closePath();if(X instanceof THREE.LineBasicMaterial){A.__styleString=X.color.__styleString;$=X.linewidth;if(n!=$)t.lineWidth=n=$;$=A.__styleString;if(l!=$)t.strokeStyle=l=$;t.stroke();P.inflate(X.linewidth*2)}}}}}else if(H instanceof THREE.RenderableFace3){C=
+H.v1;L=H.v2;B=H.v3;C.positionScreen.x*=y;C.positionScreen.y*=I;L.positionScreen.x*=y;L.positionScreen.y*=I;B.positionScreen.x*=y;B.positionScreen.y*=I;if(H.overdraw){x(C.positionScreen,L.positionScreen);x(L.positionScreen,B.positionScreen);x(B.positionScreen,C.positionScreen)}P.addPoint(C.positionScreen.x,C.positionScreen.y);P.addPoint(L.positionScreen.x,L.positionScreen.y);P.addPoint(B.positionScreen.x,B.positionScreen.y);if(z.instersects(P)){S=0;for(ca=H.meshMaterial.length;S<ca;){da=H.meshMaterial[S++];
+if(da instanceof THREE.MeshFaceMaterial){X=0;for($=H.faceMaterial.length;X<$;)(da=H.faceMaterial[X++])&&c(C,L,B,H,da,R)}else c(C,L,B,H,da,R)}}}G.addRectangle(P)}t.setTransform(1,0,0,1,0,0)}};
+THREE.SVGRenderer=function(){function a(A,Q,N){var W,M,K,Y;W=0;for(M=A.lights.length;W<M;W++){K=A.lights[W];if(K instanceof THREE.DirectionalLight){Y=Q.normalWorld.dot(K.position)*K.intensity;if(Y>0){N.r+=K.color.r*Y;N.g+=K.color.g*Y;N.b+=K.color.b*Y}}else if(K instanceof THREE.PointLight){C.sub(K.position,Q.centroidWorld);C.normalize();Y=Q.normalWorld.dot(C)*K.intensity;if(Y>0){N.r+=K.color.r*Y;N.g+=K.color.g*Y;N.b+=K.color.b*Y}}}}function c(A,Q,N,W,M,K){F=f(E++);F.setAttribute("d","M "+A.positionScreen.x+
+" "+A.positionScreen.y+" L "+Q.positionScreen.x+" "+Q.positionScreen.y+" L "+N.positionScreen.x+","+N.positionScreen.y+"z");if(M instanceof THREE.MeshBasicMaterial)e.__styleString=M.color.__styleString;else if(M instanceof THREE.MeshLambertMaterial)if(h){l.r=r.r;l.g=r.g;l.b=r.b;a(K,W,l);e.r=M.color.r*l.r;e.g=M.color.g*l.g;e.b=M.color.b*l.b;e.updateStyleString()}else e.__styleString=M.color.__styleString;else if(M instanceof THREE.MeshDepthMaterial){w=1-M.__2near/(M.__farPlusNear-W.z*M.__farMinusNear);
+e.setRGB(w,w,w)}else M instanceof THREE.MeshNormalMaterial&&e.setRGB(g(W.normalWorld.x),g(W.normalWorld.y),g(W.normalWorld.z));M.wireframe?F.setAttribute("style","fill: none; stroke: "+e.__styleString+"; stroke-width: "+M.wireframe_linewidth+"; stroke-opacity: "+M.opacity+"; stroke-linecap: "+M.wireframe_linecap+"; stroke-linejoin: "+M.wireframe_linejoin):F.setAttribute("style","fill: "+e.__styleString+"; fill-opacity: "+M.opacity);b.appendChild(F)}function d(A,Q,N,W,M,K,Y){F=f(E++);F.setAttribute("d",
+"M "+A.positionScreen.x+" "+A.positionScreen.y+" L "+Q.positionScreen.x+" "+Q.positionScreen.y+" L "+N.positionScreen.x+","+N.positionScreen.y+" L "+W.positionScreen.x+","+W.positionScreen.y+"z");if(K instanceof THREE.MeshBasicMaterial)e.__styleString=K.color.__styleString;else if(K instanceof THREE.MeshLambertMaterial)if(h){l.r=r.r;l.g=r.g;l.b=r.b;a(Y,M,l);e.r=K.color.r*l.r;e.g=K.color.g*l.g;e.b=K.color.b*l.b;e.updateStyleString()}else e.__styleString=K.color.__styleString;else if(K instanceof THREE.MeshDepthMaterial){w=
+1-K.__2near/(K.__farPlusNear-M.z*K.__farMinusNear);e.setRGB(w,w,w)}else K instanceof THREE.MeshNormalMaterial&&e.setRGB(g(M.normalWorld.x),g(M.normalWorld.y),g(M.normalWorld.z));K.wireframe?F.setAttribute("style","fill: none; stroke: "+e.__styleString+"; stroke-width: "+K.wireframe_linewidth+"; stroke-opacity: "+K.opacity+"; stroke-linecap: "+K.wireframe_linecap+"; stroke-linejoin: "+K.wireframe_linejoin):F.setAttribute("style","fill: "+e.__styleString+"; fill-opacity: "+K.opacity);b.appendChild(F)}
+function f(A){if(L[A]==null){L[A]=document.createElementNS("http://www.w3.org/2000/svg","path");J==0&&L[A].setAttribute("shape-rendering","crispEdges");return L[A]}return L[A]}function g(A){return A<0?Math.min((1+A)*0.5,0.5):0.5+Math.min(A*0.5,0.5)}var i=null,k=new THREE.Projector,b=document.createElementNS("http://www.w3.org/2000/svg","svg"),j,x,s,D,o,v,u,y,I=new THREE.Rectangle,t=new THREE.Rectangle,h=false,e=new THREE.Color(16777215),l=new THREE.Color(16777215),r=new THREE.Color(0),n=new THREE.Color(0),
+p=new THREE.Color(0),w,C=new THREE.Vector3,L=[],B=[],U=[],F,E,V,T,J=1;this.domElement=b;this.autoClear=true;this.setQuality=function(A){switch(A){case "high":J=1;break;case "low":J=0}};this.setSize=function(A,Q){j=A;x=Q;s=j/2;D=x/2;b.setAttribute("viewBox",-s+" "+-D+" "+j+" "+x);b.setAttribute("width",j);b.setAttribute("height",x);I.set(-s,-D,s,D)};this.clear=function(){for(;b.childNodes.length>0;)b.removeChild(b.childNodes[0])};this.render=function(A,Q){var N,W,M,K,Y,m,q,z;this.autoClear&&this.clear();
+i=k.projectScene(A,Q);T=V=E=0;if(h=A.lights.length>0){q=A.lights;r.setRGB(0,0,0);n.setRGB(0,0,0);p.setRGB(0,0,0);N=0;for(W=q.length;N<W;N++){M=q[N];K=M.color;if(M instanceof THREE.AmbientLight){r.r+=K.r;r.g+=K.g;r.b+=K.b}else if(M instanceof THREE.DirectionalLight){n.r+=K.r;n.g+=K.g;n.b+=K.b}else if(M instanceof THREE.PointLight){p.r+=K.r;p.g+=K.g;p.b+=K.b}}}N=0;for(W=i.length;N<W;N++){q=i[N];t.empty();if(q instanceof THREE.RenderableParticle){o=q;o.x*=s;o.y*=-D;M=0;for(K=q.material.length;M<K;M++)if(z=
+q.material[M]){Y=o;m=q;z=z;var G=V++;if(B[G]==null){B[G]=document.createElementNS("http://www.w3.org/2000/svg","circle");J==0&&B[G].setAttribute("shape-rendering","crispEdges")}F=B[G];F.setAttribute("cx",Y.x);F.setAttribute("cy",Y.y);F.setAttribute("r",m.scale.x*s);if(z instanceof THREE.ParticleCircleMaterial){if(h){l.r=r.r+n.r+p.r;l.g=r.g+n.g+p.g;l.b=r.b+n.b+p.b;e.r=z.color.r*l.r;e.g=z.color.g*l.g;e.b=z.color.b*l.b;e.updateStyleString()}else e=z.color;F.setAttribute("style","fill: "+e.__styleString)}b.appendChild(F)}}else if(q instanceof
+THREE.RenderableLine){o=q.v1;v=q.v2;o.positionScreen.x*=s;o.positionScreen.y*=-D;v.positionScreen.x*=s;v.positionScreen.y*=-D;t.addPoint(o.positionScreen.x,o.positionScreen.y);t.addPoint(v.positionScreen.x,v.positionScreen.y);if(I.instersects(t)){M=0;for(K=q.material.length;M<K;)if(z=q.material[M++]){Y=o;m=v;z=z;G=T++;if(U[G]==null){U[G]=document.createElementNS("http://www.w3.org/2000/svg","line");J==0&&U[G].setAttribute("shape-rendering","crispEdges")}F=U[G];F.setAttribute("x1",Y.positionScreen.x);
+F.setAttribute("y1",Y.positionScreen.y);F.setAttribute("x2",m.positionScreen.x);F.setAttribute("y2",m.positionScreen.y);if(z instanceof THREE.LineBasicMaterial){e.__styleString=z.color.__styleString;F.setAttribute("style","fill: none; stroke: "+e.__styleString+"; stroke-width: "+z.linewidth+"; stroke-opacity: "+z.opacity+"; stroke-linecap: "+z.linecap+"; stroke-linejoin: "+z.linejoin);b.appendChild(F)}}}}else if(q instanceof THREE.RenderableFace3){o=q.v1;v=q.v2;u=q.v3;o.positionScreen.x*=s;o.positionScreen.y*=
+-D;v.positionScreen.x*=s;v.positionScreen.y*=-D;u.positionScreen.x*=s;u.positionScreen.y*=-D;t.addPoint(o.positionScreen.x,o.positionScreen.y);t.addPoint(v.positionScreen.x,v.positionScreen.y);t.addPoint(u.positionScreen.x,u.positionScreen.y);if(I.instersects(t)){M=0;for(K=q.meshMaterial.length;M<K;){z=q.meshMaterial[M++];if(z instanceof THREE.MeshFaceMaterial){Y=0;for(m=q.faceMaterial.length;Y<m;)(z=q.faceMaterial[Y++])&&c(o,v,u,q,z,A)}else z&&c(o,v,u,q,z,A)}}}else if(q instanceof THREE.RenderableFace4){o=
+q.v1;v=q.v2;u=q.v3;y=q.v4;o.positionScreen.x*=s;o.positionScreen.y*=-D;v.positionScreen.x*=s;v.positionScreen.y*=-D;u.positionScreen.x*=s;u.positionScreen.y*=-D;y.positionScreen.x*=s;y.positionScreen.y*=-D;t.addPoint(o.positionScreen.x,o.positionScreen.y);t.addPoint(v.positionScreen.x,v.positionScreen.y);t.addPoint(u.positionScreen.x,u.positionScreen.y);t.addPoint(y.positionScreen.x,y.positionScreen.y);if(I.instersects(t)){M=0;for(K=q.meshMaterial.length;M<K;){z=q.meshMaterial[M++];if(z instanceof
+THREE.MeshFaceMaterial){Y=0;for(m=q.faceMaterial.length;Y<m;)(z=q.faceMaterial[Y++])&&d(o,v,u,y,q,z,A)}else z&&d(o,v,u,y,q,z,A)}}}}}};
+THREE.WebGLRenderer=function(a){function c(h,e){var l=b.createProgram();b.attachShader(l,g("fragment","#ifdef GL_ES\nprecision highp float;\n#endif\n"+h));b.attachShader(l,g("vertex","uniform mat4 objectMatrix;\nuniform mat4 modelViewMatrix;\nuniform mat4 projectionMatrix;\nuniform vec3 cameraPosition;\nattribute vec3 position;\nattribute vec3 normal;\nattribute vec2 uv;\n"+e));b.linkProgram(l);b.getProgramParameter(l,b.LINK_STATUS)||alert("Could not initialise shaders\nVALIDATE_STATUS: "+b.getProgramParameter(l,
+b.VALIDATE_STATUS)+", gl error ["+b.getError()+"]");l.uniforms={};return l}function d(h,e){var l,r,n;l=0;for(r=e.length;l<r;l++){n=e[l];h.uniforms[n]=b.getUniformLocation(h,n)}}function f(h){h.position=b.getAttribLocation(h,"position");b.enableVertexAttribArray(h.position);h.normal=b.getAttribLocation(h,"normal");b.enableVertexAttribArray(h.normal);h.uv=b.getAttribLocation(h,"uv");b.enableVertexAttribArray(h.uv)}function g(h,e){var l;if(h=="fragment")l=b.createShader(b.FRAGMENT_SHADER);else if(h==
+"vertex")l=b.createShader(b.VERTEX_SHADER);b.shaderSource(l,e);b.compileShader(l);if(!b.getShaderParameter(l,b.COMPILE_STATUS)){alert(b.getShaderInfoLog(l));return null}return l}function i(h){switch(h){case THREE.Repeat:return b.REPEAT;case THREE.ClampToEdge:return b.CLAMP_TO_EDGE;case THREE.MirroredRepeat:return b.MIRRORED_REPEAT}return 0}var k=document.createElement("canvas"),b,j,x,s=new THREE.Matrix4,D,o=new Float32Array(16),v=new Float32Array(16),u=new Float32Array(16),y=new Float32Array(9),I=
+new Float32Array(16);a=function(h,e){if(h){var l,r,n,p=pointLights=maxDirLights=maxPointLights=0;l=0;for(r=h.lights.length;l<r;l++){n=h.lights[l];n instanceof THREE.DirectionalLight&&p++;n instanceof THREE.PointLight&&pointLights++}if(pointLights+p<=e){maxDirLights=p;maxPointLights=pointLights}else{maxDirLights=Math.ceil(e*p/(pointLights+p));maxPointLights=e-maxDirLights}return{directional:maxDirLights,point:maxPointLights}}return{directional:1,point:e-1}}(a,4);this.domElement=k;this.autoClear=true;
+try{b=k.getContext("experimental-webgl",{antialias:true})}catch(t){}if(!b){alert("WebGL not supported");throw"cannot create webgl context";}b.clearColor(0,0,0,1);b.clearDepth(1);b.enable(b.DEPTH_TEST);b.depthFunc(b.LEQUAL);b.frontFace(b.CCW);b.cullFace(b.BACK);b.enable(b.CULL_FACE);b.enable(b.BLEND);b.blendFunc(b.ONE,b.ONE_MINUS_SRC_ALPHA);b.clearColor(0,0,0,0);(function(h,e){var l=[h?"#define MAX_DIR_LIGHTS "+h:"",e?"#define MAX_POINT_LIGHTS "+e:"","uniform bool enableLighting;\nuniform bool useRefract;\nuniform int pointLightNumber;\nuniform int directionalLightNumber;\nuniform vec3 ambientLightColor;",
+h?"uniform vec3 directionalLightColor[ MAX_DIR_LIGHTS ];":"",h?"uniform vec3 directionalLightDirection[ MAX_DIR_LIGHTS ];":"",e?"uniform vec3 pointLightColor[ MAX_POINT_LIGHTS ];":"",e?"uniform vec3 pointLightPosition[ MAX_POINT_LIGHTS ];":"","uniform mat4 viewMatrix;\nuniform mat3 normalMatrix;\nvarying vec3 vNormal;\nvarying vec2 vUv;\nvarying vec3 vLightWeighting;",e?"varying vec3 vPointLightVector[ MAX_POINT_LIGHTS ];":"","varying vec3 vViewPosition;\nvarying vec3 vReflect;\nuniform float mRefractionRatio;\nvoid main(void) {\nvec4 mPosition = objectMatrix * vec4( position, 1.0 );\nvViewPosition = cameraPosition - mPosition.xyz;\nvec3 nWorld = mat3( objectMatrix[0].xyz, objectMatrix[1].xyz, objectMatrix[2].xyz ) * normal;\nvec4 mvPosition = modelViewMatrix * vec4( position, 1.0 );\nvec3 transformedNormal = normalize( normalMatrix * normal );\nif ( !enableLighting ) {\nvLightWeighting = vec3( 1.0, 1.0, 1.0 );\n} else {\nvLightWeighting = ambientLightColor;",
+h?"for( int i = 0; i < MAX_DIR_LIGHTS; i++ ) {":"",h?"vec4 lDirection = viewMatrix * vec4( directionalLightDirection[ i ], 0.0 );":"",h?"float directionalLightWeighting = max( dot( transformedNormal, normalize(lDirection.xyz ) ), 0.0 );":"",h?"vLightWeighting += directionalLightColor[ i ] * directionalLightWeighting;":"",h?"}":"",e?"for( int i = 0; i < MAX_POINT_LIGHTS; i++ ) {":"",e?"vec4 lPosition = viewMatrix * vec4( pointLightPosition[ i ], 1.0 );":"",e?"vPointLightVector[ i ] = normalize( lPosition.xyz - mvPosition.xyz );":
+"",e?"float pointLightWeighting = max( dot( transformedNormal, vPointLightVector[ i ] ), 0.0 );":"",e?"vLightWeighting += pointLightColor[ i ] * pointLightWeighting;":"",e?"}":"","}\nvNormal = transformedNormal;\nvUv = uv;\nif ( useRefract ) {\nvReflect = refract( normalize(mPosition.xyz - cameraPosition), normalize(nWorld.xyz), mRefractionRatio );\n} else {\nvReflect = reflect( normalize(mPosition.xyz - cameraPosition), normalize(nWorld.xyz) );\n}\ngl_Position = projectionMatrix * mvPosition;\n}"].join("\n"),
+r=[h?"#define MAX_DIR_LIGHTS "+h:"",e?"#define MAX_POINT_LIGHTS "+e:"","uniform int material;\nuniform bool enableMap;\nuniform bool enableCubeMap;\nuniform bool mixEnvMap;\nuniform samplerCube tCube;\nuniform float mReflectivity;\nuniform sampler2D tMap;\nuniform vec4 mColor;\nuniform float mOpacity;\nuniform vec4 mAmbient;\nuniform vec4 mSpecular;\nuniform float mShininess;\nuniform float m2Near;\nuniform float mFarPlusNear;\nuniform float mFarMinusNear;\nuniform int pointLightNumber;\nuniform int directionalLightNumber;",
+h?"uniform mat4 viewMatrix;":"",h?"uniform vec3 directionalLightDirection[ MAX_DIR_LIGHTS ];":"","varying vec3 vNormal;\nvarying vec2 vUv;\nvarying vec3 vLightWeighting;",e?"varying vec3 vPointLightVector[ MAX_POINT_LIGHTS ];":"","varying vec3 vViewPosition;\nvarying vec3 vReflect;\nuniform vec3 cameraPosition;\nvoid main() {\nvec4 mapColor = vec4( 1.0, 1.0, 1.0, 1.0 );\nvec4 cubeColor = vec4( 1.0, 1.0, 1.0, 1.0 );\nif ( enableMap ) {\nmapColor = texture2D( tMap, vUv );\n}\nif ( enableCubeMap ) {\ncubeColor = textureCube( tCube, vec3( -vReflect.x, vReflect.yz ) );\n}\nif ( material == 5 ) { \nvec3 wPos = cameraPosition - vViewPosition;\ngl_FragColor = textureCube( tCube, vec3( -wPos.x, wPos.yz ) );\n} else if ( material == 4 ) { \ngl_FragColor = vec4( 0.5*normalize( vNormal ) + vec3(0.5, 0.5, 0.5), mOpacity );\n} else if ( material == 3 ) { \nfloat w = 0.5;\ngl_FragColor = vec4( w, w, w, mOpacity );\n} else if ( material == 2 ) { \nvec3 normal = normalize( vNormal );\nvec3 viewPosition = normalize( vViewPosition );",
+e?"vec4 pointDiffuse  = vec4( 0.0, 0.0, 0.0, 0.0 );":"",e?"vec4 pointSpecular = vec4( 0.0, 0.0, 0.0, 0.0 );":"",e?"for( int i = 0; i < MAX_POINT_LIGHTS; i++ ) {":"",e?"vec3 pointVector = normalize( vPointLightVector[ i ] );":"",e?"vec3 pointHalfVector = normalize( vPointLightVector[ i ] + vViewPosition );":"",e?"float pointDotNormalHalf = dot( normal, pointHalfVector );":"",e?"float pointDiffuseWeight = max( dot( normal, pointVector ), 0.0 );":"",e?"float pointSpecularWeight = 0.0;":"",e?"if ( pointDotNormalHalf >= 0.0 )":
+"",e?"pointSpecularWeight = pow( pointDotNormalHalf, mShininess );":"",e?"pointDiffuse  += mColor * pointDiffuseWeight;":"",e?"pointSpecular += mSpecular * pointSpecularWeight;":"",e?"}":"",h?"vec4 dirDiffuse  = vec4( 0.0, 0.0, 0.0, 0.0 );":"",h?"vec4 dirSpecular = vec4( 0.0, 0.0, 0.0, 0.0 );":"",h?"for( int i = 0; i < MAX_DIR_LIGHTS; i++ ) {":"",h?"vec4 lDirection = viewMatrix * vec4( directionalLightDirection[ i ], 0.0 );":"",h?"vec3 dirVector = normalize( lDirection.xyz );":"",h?"vec3 dirHalfVector = normalize( lDirection.xyz + vViewPosition );":
+"",h?"float dirDotNormalHalf = dot( normal, dirHalfVector );":"",h?"float dirDiffuseWeight = max( dot( normal, dirVector ), 0.0 );":"",h?"float dirSpecularWeight = 0.0;":"",h?"if ( dirDotNormalHalf >= 0.0 )":"",h?"dirSpecularWeight = pow( dirDotNormalHalf, mShininess );":"",h?"dirDiffuse  += mColor * dirDiffuseWeight;":"",h?"dirSpecular += mSpecular * dirSpecularWeight;":"",h?"}":"","vec4 totalLight = mAmbient;",h?"totalLight += dirDiffuse + dirSpecular;":"",e?"totalLight += pointDiffuse + pointSpecular;":
+"","if ( mixEnvMap ) {\ngl_FragColor = vec4( mix( mapColor.rgb * totalLight.xyz * vLightWeighting, cubeColor.rgb, mReflectivity ), mapColor.a );\n} else {\ngl_FragColor = vec4( mapColor.rgb * cubeColor.rgb * totalLight.xyz * vLightWeighting, mapColor.a );\n}\n} else if ( material == 1 ) {\nif ( mixEnvMap ) {\ngl_FragColor = vec4( mix( mColor.rgb * mapColor.rgb * vLightWeighting, cubeColor.rgb, mReflectivity ), mColor.a * mapColor.a );\n} else {\ngl_FragColor = vec4( mColor.rgb * mapColor.rgb * cubeColor.rgb * vLightWeighting, mColor.a * mapColor.a );\n}\n} else {\nif ( mixEnvMap ) {\ngl_FragColor = mix( mColor * mapColor, cubeColor, mReflectivity );\n} else {\ngl_FragColor = mColor * mapColor * cubeColor;\n}\n}\n}"].join("\n");
+j=c(r,l);b.useProgram(j);d(j,["viewMatrix","modelViewMatrix","projectionMatrix","normalMatrix","objectMatrix","cameraPosition","enableLighting","ambientLightColor","material","mColor","mAmbient","mSpecular","mShininess","mOpacity","enableMap","tMap","enableCubeMap","tCube","mixEnvMap","mReflectivity","mRefractionRatio","useRefract","m2Near","mFarPlusNear","mFarMinusNear"]);h&&d(j,["directionalLightNumber","directionalLightColor","directionalLightDirection"]);e&&d(j,["pointLightNumber","pointLightColor",
+"pointLightPosition"]);b.uniform1i(j.uniforms.enableMap,0);b.uniform1i(j.uniforms.tMap,0);b.uniform1i(j.uniforms.enableCubeMap,0);b.uniform1i(j.uniforms.tCube,1);b.uniform1i(j.uniforms.mixEnvMap,0);b.uniform1i(j.uniforms.useRefract,0);f(j)})(a.directional,a.point);this.setSize=function(h,e){k.width=h;k.height=e;b.viewport(0,0,k.width,k.height)};this.clear=function(){b.clear(b.COLOR_BUFFER_BIT|b.DEPTH_BUFFER_BIT)};this.setupLights=function(h,e){var l,r,n,p,w,C=[],L=[],B=[];p=[];w=[];b.uniform1i(h.uniforms.enableLighting,
+e.lights.length);l=0;for(r=e.lights.length;l<r;l++){n=e.lights[l];if(n instanceof THREE.AmbientLight)C.push(n);else if(n instanceof THREE.DirectionalLight)B.push(n);else n instanceof THREE.PointLight&&L.push(n)}l=n=p=w=0;for(r=C.length;l<r;l++){n+=C[l].color.r;p+=C[l].color.g;w+=C[l].color.b}b.uniform3f(h.uniforms.ambientLightColor,n,p,w);p=[];w=[];l=0;for(r=B.length;l<r;l++){n=B[l];p.push(n.color.r*n.intensity);p.push(n.color.g*n.intensity);p.push(n.color.b*n.intensity);w.push(n.position.x);w.push(n.position.y);
+w.push(n.position.z)}if(B.length){b.uniform1i(h.uniforms.directionalLightNumber,B.length);b.uniform3fv(h.uniforms.directionalLightDirection,w);b.uniform3fv(h.uniforms.directionalLightColor,p)}p=[];w=[];l=0;for(r=L.length;l<r;l++){n=L[l];p.push(n.color.r*n.intensity);p.push(n.color.g*n.intensity);p.push(n.color.b*n.intensity);w.push(n.position.x);w.push(n.position.y);w.push(n.position.z)}if(L.length){b.uniform1i(h.uniforms.pointLightNumber,L.length);b.uniform3fv(h.uniforms.pointLightPosition,w);b.uniform3fv(h.uniforms.pointLightColor,
+p)}};this.createBuffers=function(h,e){var l,r,n,p,w,C,L,B,U=[],F=[],E=[],V=[],T=[],J=0,A=h.materialFaceGroup[e],Q;n=false;l=0;for(r=h.material.length;l<r;l++){meshMaterial=h.material[l];if(meshMaterial instanceof THREE.MeshFaceMaterial){w=0;for(Q=A.material.length;w<Q;w++)if(A.material[w]&&A.material[w].shading!=undefined&&A.material[w].shading==THREE.SmoothShading){n=true;break}}else if(meshMaterial&&meshMaterial.shading!=undefined&&meshMaterial.shading==THREE.SmoothShading){n=true;break}if(n)break}Q=
+n;l=0;for(r=A.faces.length;l<r;l++){n=A.faces[l];p=h.geometry.faces[n];w=p.vertexNormals;faceNormal=p.normal;n=h.geometry.uvs[n];if(p instanceof THREE.Face3){C=h.geometry.vertices[p.a].position;L=h.geometry.vertices[p.b].position;B=h.geometry.vertices[p.c].position;E.push(C.x,C.y,C.z);E.push(L.x,L.y,L.z);E.push(B.x,B.y,B.z);if(w.length==3&&Q)for(p=0;p<3;p++)V.push(w[p].x,w[p].y,w[p].z);else for(p=0;p<3;p++)V.push(faceNormal.x,faceNormal.y,faceNormal.z);if(n)for(p=0;p<3;p++)T.push(n[p].u,n[p].v);U.push(J,
+J+1,J+2);F.push(J,J+1);F.push(J,J+2);F.push(J+1,J+2);J+=3}else if(p instanceof THREE.Face4){C=h.geometry.vertices[p.a].position;L=h.geometry.vertices[p.b].position;B=h.geometry.vertices[p.c].position;p=h.geometry.vertices[p.d].position;E.push(C.x,C.y,C.z);E.push(L.x,L.y,L.z);E.push(B.x,B.y,B.z);E.push(p.x,p.y,p.z);if(w.length==4&&Q)for(p=0;p<4;p++)V.push(w[p].x,w[p].y,w[p].z);else for(p=0;p<4;p++)V.push(faceNormal.x,faceNormal.y,faceNormal.z);if(n)for(p=0;p<4;p++)T.push(n[p].u,n[p].v);U.push(J,J+
+1,J+2);U.push(J,J+2,J+3);F.push(J,J+1);F.push(J,J+2);F.push(J,J+3);F.push(J+1,J+2);F.push(J+2,J+3);J+=4}}if(E.length){A.__webGLVertexBuffer=b.createBuffer();b.bindBuffer(b.ARRAY_BUFFER,A.__webGLVertexBuffer);b.bufferData(b.ARRAY_BUFFER,new Float32Array(E),b.STATIC_DRAW);A.__webGLNormalBuffer=b.createBuffer();b.bindBuffer(b.ARRAY_BUFFER,A.__webGLNormalBuffer);b.bufferData(b.ARRAY_BUFFER,new Float32Array(V),b.STATIC_DRAW);A.__webGLUVBuffer=b.createBuffer();b.bindBuffer(b.ARRAY_BUFFER,A.__webGLUVBuffer);
+b.bufferData(b.ARRAY_BUFFER,new Float32Array(T),b.STATIC_DRAW);A.__webGLFaceBuffer=b.createBuffer();b.bindBuffer(b.ELEMENT_ARRAY_BUFFER,A.__webGLFaceBuffer);b.bufferData(b.ELEMENT_ARRAY_BUFFER,new Uint16Array(U),b.STATIC_DRAW);A.__webGLLineBuffer=b.createBuffer();b.bindBuffer(b.ELEMENT_ARRAY_BUFFER,A.__webGLLineBuffer);b.bufferData(b.ELEMENT_ARRAY_BUFFER,new Uint16Array(F),b.STATIC_DRAW);A.__webGLFaceCount=U.length;A.__webGLLineCount=F.length}};this.renderBuffer=function(h,e,l){var r,n,p,w,C,L,B,
+U,F,E;if(e instanceof THREE.MeshShaderMaterial){if(!e.program){e.program=c(e.fragment_shader,e.vertex_shader);C=["viewMatrix","modelViewMatrix","projectionMatrix","normalMatrix","objectMatrix","cameraPosition"];for(E in e.uniforms)C.push(E);d(e.program,C);f(e.program)}E=e.program}else E=j;if(E!=x){b.useProgram(E);x=E}if(e instanceof THREE.MeshShaderMaterial){C=E;U=e.uniforms;var V,T;for(n in U){V=U[n].type;F=U[n].value;T=C.uniforms[n];if(V=="i")b.uniform1i(T,F);else if(V=="f")b.uniform1f(T,F);else if(V==
+"t"){b.uniform1i(T,F);F=U[n].texture;if(F instanceof THREE.TextureCube&&F.image.length==6){if(!F.image.__webGLTextureCube&&!F.image.__cubeMapInitialized&&F.image.loadCount==6){F.image.__webGLTextureCube=b.createTexture();b.bindTexture(b.TEXTURE_CUBE_MAP,F.image.__webGLTextureCube);b.texParameteri(b.TEXTURE_CUBE_MAP,b.TEXTURE_WRAP_S,b.CLAMP_TO_EDGE);b.texParameteri(b.TEXTURE_CUBE_MAP,b.TEXTURE_WRAP_T,b.CLAMP_TO_EDGE);b.texParameteri(b.TEXTURE_CUBE_MAP,b.TEXTURE_MAG_FILTER,b.LINEAR);b.texParameteri(b.TEXTURE_CUBE_MAP,
+b.TEXTURE_MIN_FILTER,b.LINEAR_MIPMAP_LINEAR);for(V=0;V<6;++V)b.texImage2D(b.TEXTURE_CUBE_MAP_POSITIVE_X+V,0,b.RGBA,b.RGBA,b.UNSIGNED_BYTE,F.image[V]);b.generateMipmap(b.TEXTURE_CUBE_MAP);b.bindTexture(b.TEXTURE_CUBE_MAP,null);F.image.__cubeMapInitialized=true}b.activeTexture(b.TEXTURE1);b.bindTexture(b.TEXTURE_CUBE_MAP,F.image.__webGLTextureCube)}}}this.loadCamera(E,h);this.loadMatrices(E)}else if(e instanceof THREE.MeshPhongMaterial||e instanceof THREE.MeshLambertMaterial||e instanceof THREE.MeshBasicMaterial){h=
+e.color;r=e.opacity;p=e.wireframe;w=e.wireframe_linewidth;L=e.map;B=e.env_map;C=e.combine==THREE.Mix;n=e.reflectivity;F=e.env_map&&e.env_map.mapping==THREE.RefractionMapping;U=e.refraction_ratio;b.uniform4f(E.uniforms.mColor,h.r*r,h.g*r,h.b*r,r);b.uniform1i(E.uniforms.mixEnvMap,C);b.uniform1f(E.uniforms.mReflectivity,n);b.uniform1i(E.uniforms.useRefract,F);b.uniform1f(E.uniforms.mRefractionRatio,U)}if(e instanceof THREE.MeshNormalMaterial){r=e.opacity;b.uniform1f(E.uniforms.mOpacity,r);b.uniform1i(E.uniforms.material,
+4)}else if(e instanceof THREE.MeshDepthMaterial){r=e.opacity;p=e.wireframe;w=e.wireframe_linewidth;b.uniform1f(E.uniforms.mOpacity,r);b.uniform1f(E.uniforms.m2Near,e.__2near);b.uniform1f(E.uniforms.mFarPlusNear,e.__farPlusNear);b.uniform1f(E.uniforms.mFarMinusNear,e.__farMinusNear);b.uniform1i(E.uniforms.material,3)}else if(e instanceof THREE.MeshPhongMaterial){h=e.ambient;n=e.specular;C=e.shininess;b.uniform4f(E.uniforms.mAmbient,h.r,h.g,h.b,r);b.uniform4f(E.uniforms.mSpecular,n.r,n.g,n.b,r);b.uniform1f(E.uniforms.mShininess,
+C);b.uniform1i(E.uniforms.material,2)}else if(e instanceof THREE.MeshLambertMaterial)b.uniform1i(E.uniforms.material,1);else if(e instanceof THREE.MeshBasicMaterial)b.uniform1i(E.uniforms.material,0);else if(e instanceof THREE.MeshCubeMaterial){b.uniform1i(E.uniforms.material,5);B=e.env_map}if(L){if(!e.map.__webGLTexture&&e.map.image.loaded){e.map.__webGLTexture=b.createTexture();b.bindTexture(b.TEXTURE_2D,e.map.__webGLTexture);b.texImage2D(b.TEXTURE_2D,0,b.RGBA,b.RGBA,b.UNSIGNED_BYTE,e.map.image);
+b.texParameteri(b.TEXTURE_2D,b.TEXTURE_WRAP_S,i(e.map.wrap_s));b.texParameteri(b.TEXTURE_2D,b.TEXTURE_WRAP_T,i(e.map.wrap_t));b.texParameteri(b.TEXTURE_2D,b.TEXTURE_MAG_FILTER,b.LINEAR);b.texParameteri(b.TEXTURE_2D,b.TEXTURE_MIN_FILTER,b.LINEAR_MIPMAP_LINEAR);b.generateMipmap(b.TEXTURE_2D);b.bindTexture(b.TEXTURE_2D,null)}b.activeTexture(b.TEXTURE0);b.bindTexture(b.TEXTURE_2D,e.map.__webGLTexture);b.uniform1i(E.uniforms.tMap,0);b.uniform1i(E.uniforms.enableMap,1)}else b.uniform1i(E.uniforms.enableMap,
+0);if(B){if(e.env_map&&e.env_map instanceof THREE.TextureCube&&e.env_map.image.length==6){if(!e.env_map.image.__webGLTextureCube&&!e.env_map.image.__cubeMapInitialized&&e.env_map.image.loadCount==6){e.env_map.image.__webGLTextureCube=b.createTexture();b.bindTexture(b.TEXTURE_CUBE_MAP,e.env_map.image.__webGLTextureCube);b.texParameteri(b.TEXTURE_CUBE_MAP,b.TEXTURE_WRAP_S,b.CLAMP_TO_EDGE);b.texParameteri(b.TEXTURE_CUBE_MAP,b.TEXTURE_WRAP_T,b.CLAMP_TO_EDGE);b.texParameteri(b.TEXTURE_CUBE_MAP,b.TEXTURE_MAG_FILTER,
+b.LINEAR);b.texParameteri(b.TEXTURE_CUBE_MAP,b.TEXTURE_MIN_FILTER,b.LINEAR_MIPMAP_LINEAR);for(r=0;r<6;++r)b.texImage2D(b.TEXTURE_CUBE_MAP_POSITIVE_X+r,0,b.RGBA,b.RGBA,b.UNSIGNED_BYTE,e.env_map.image[r]);b.generateMipmap(b.TEXTURE_CUBE_MAP);b.bindTexture(b.TEXTURE_CUBE_MAP,null);e.env_map.image.__cubeMapInitialized=true}b.activeTexture(b.TEXTURE1);b.bindTexture(b.TEXTURE_CUBE_MAP,e.env_map.image.__webGLTextureCube);b.uniform1i(E.uniforms.tCube,1)}b.uniform1i(E.uniforms.enableCubeMap,1)}else b.uniform1i(E.uniforms.enableCubeMap,
+0);b.bindBuffer(b.ARRAY_BUFFER,l.__webGLVertexBuffer);b.vertexAttribPointer(E.position,3,b.FLOAT,false,0,0);b.bindBuffer(b.ARRAY_BUFFER,l.__webGLNormalBuffer);b.vertexAttribPointer(E.normal,3,b.FLOAT,false,0,0);if(L){b.bindBuffer(b.ARRAY_BUFFER,l.__webGLUVBuffer);b.enableVertexAttribArray(E.uv);b.vertexAttribPointer(E.uv,2,b.FLOAT,false,0,0)}else b.disableVertexAttribArray(E.uv);if(p){b.lineWidth(w);b.bindBuffer(b.ELEMENT_ARRAY_BUFFER,l.__webGLLineBuffer);b.drawElements(b.LINES,l.__webGLLineCount,
+b.UNSIGNED_SHORT,0)}else{b.bindBuffer(b.ELEMENT_ARRAY_BUFFER,l.__webGLFaceBuffer);b.drawElements(b.TRIANGLES,l.__webGLFaceCount,b.UNSIGNED_SHORT,0)}};this.renderPass=function(h,e,l,r,n){var p,w,C,L,B;C=0;for(L=e.material.length;C<L;C++){p=e.material[C];if(p instanceof THREE.MeshFaceMaterial){p=0;for(w=l.material.length;p<w;p++)if((B=l.material[p])&&B.blending==r&&B.opacity<1==n){this.setBlending(B.blending);this.renderBuffer(h,B,l)}}else if((B=p)&&B.blending==r&&B.opacity<1==n){this.setBlending(B.blending);
+this.renderBuffer(h,B,l)}}};this.render=function(h,e){var l,r;this.initWebGLObjects(h);this.autoClear&&this.clear();e.autoUpdateMatrix&&e.updateMatrix();this.loadCamera(j,e);this.setupLights(j,h);l=0;for(r=h.__webGLObjects.length;l<r;l++){webGLObject=h.__webGLObjects[l];if(webGLObject.__object.visible){this.setupMatrices(webGLObject.__object,e);this.loadMatrices(j);this.renderPass(e,webGLObject.__object,webGLObject,THREE.NormalBlending,false)}}l=0;for(r=h.__webGLObjects.length;l<r;l++){webGLObject=
+h.__webGLObjects[l];if(webGLObject.__object.visible){this.setupMatrices(webGLObject.__object,e);this.loadMatrices(j);this.renderPass(e,webGLObject.__object,webGLObject,THREE.AdditiveBlending,false);this.renderPass(e,webGLObject.__object,webGLObject,THREE.SubtractiveBlending,false);this.renderPass(e,webGLObject.__object,webGLObject,THREE.AdditiveBlending,true);this.renderPass(e,webGLObject.__object,webGLObject,THREE.SubtractiveBlending,true);this.renderPass(e,webGLObject.__object,webGLObject,THREE.NormalBlending,
+true)}}};this.initWebGLObjects=function(h){var e,l,r,n,p;if(!h.__webGLObjects)h.__webGLObjects=[];e=0;for(l=h.objects.length;e<l;e++){r=h.objects[e];if(r instanceof THREE.Mesh)for(n in r.materialFaceGroup){p=r.materialFaceGroup[n];if(!p.__webGLVertexBuffer){this.createBuffers(r,n);p.__object=r;h.__webGLObjects.push(p)}}}};this.removeObject=function(h,e){var l,r;for(l=h.__webGLObjects.length-1;l>=0;l--){r=h.__webGLObjects[l].__object;e==r&&h.__webGLObjects.splice(l,1)}};this.setupMatrices=function(h,
+e){h.autoUpdateMatrix&&h.updateMatrix();s.multiply(e.matrix,h.matrix);o.set(e.matrix.flatten());v.set(s.flatten());u.set(e.projectionMatrix.flatten());D=THREE.Matrix4.makeInvert3x3(s).transpose();y.set(D.m);I.set(h.matrix.flatten())};this.loadMatrices=function(h){b.uniformMatrix4fv(h.uniforms.viewMatrix,false,o);b.uniformMatrix4fv(h.uniforms.modelViewMatrix,false,v);b.uniformMatrix4fv(h.uniforms.projectionMatrix,false,u);b.uniformMatrix3fv(h.uniforms.normalMatrix,false,y);b.uniformMatrix4fv(h.uniforms.objectMatrix,
+false,I)};this.loadCamera=function(h,e){b.uniform3f(h.uniforms.cameraPosition,e.position.x,e.position.y,e.position.z)};this.setBlending=function(h){switch(h){case THREE.AdditiveBlending:b.blendEquation(b.FUNC_ADD);b.blendFunc(b.ONE,b.ONE);break;case THREE.SubtractiveBlending:b.blendFunc(b.DST_COLOR,b.ZERO);break;default:b.blendEquation(b.FUNC_ADD);b.blendFunc(b.ONE,b.ONE_MINUS_SRC_ALPHA)}};this.setFaceCulling=function(h,e){if(h){!e||e=="ccw"?b.frontFace(b.CCW):b.frontFace(b.CW);if(h=="back")b.cullFace(b.BACK);
+else h=="front"?b.cullFace(b.FRONT):b.cullFace(b.FRONT_AND_BACK);b.enable(b.CULL_FACE)}else b.disable(b.CULL_FACE)}};THREE.RenderableFace3=function(){this.z=null;this.v1=new THREE.Vertex;this.v2=new THREE.Vertex;this.v3=new THREE.Vertex;this.centroidWorld=new THREE.Vector3;this.centroidScreen=new THREE.Vector3;this.normalWorld=new THREE.Vector3;this.vertexNormalsWorld=[];this.faceMaterial=this.meshMaterial=null;this.overdraw=false;this.uvs=[null,null,null]};
+THREE.RenderableParticle=function(){this.rotation=this.z=this.y=this.x=null;this.scale=new THREE.Vector2;this.material=null};THREE.RenderableLine=function(){this.z=null;this.v1=new THREE.Vertex;this.v2=new THREE.Vertex;this.material=null};
+var GeometryUtils={merge:function(a,c){var d=c instanceof THREE.Mesh,f=a.vertices.length,g=d?c.geometry:c,i=a.vertices,k=g.vertices,b=a.faces,j=g.faces,x=a.uvs;g=g.uvs;d&&c.updateMatrix();for(var s=0,D=k.length;s<D;s++){var o=new THREE.Vertex(k[s].position.clone());d&&c.matrix.transformVector3(o.position);i.push(o)}s=0;for(D=j.length;s<D;s++){d=j[s];var v;k=d.vertexNormals;if(d instanceof THREE.Face3)v=new THREE.Face3(d.a+f,d.b+f,d.c+f);else if(d instanceof THREE.Face4)v=new THREE.Face4(d.a+f,d.b+
+f,d.c+f,d.d+f);d=0;for(i=k.length;d<i;d++){o=k[d];v.vertexNormals.push(o.clone())}b.push(v)}s=0;for(D=g.length;s<D;s++){f=g[s];b=[];d=0;for(i=f.length;d<i;d++)b.push(new THREE.UV(f[d].u,f[d].v));x.push(b)}}},ImageUtils={loadArray:function(a){var c,d,f=[];c=f.loadCount=0;for(d=a.length;c<d;++c){f[c]=new Image;f[c].loaded=0;f[c].onload=function(){f.loadCount+=1;this.loaded=1};f[c].src=a[c]}return f}},SceneUtils={addMesh:function(a,c,d,f,g,i,k,b,j,x){c=new THREE.Mesh(c,x);c.scale.x=c.scale.y=c.scale.z=
+d;c.position.x=f;c.position.y=g;c.position.z=i;c.rotation.x=k;c.rotation.y=b;c.rotation.z=j;a.addObject(c);return c},addPanoramaCubeWebGL:function(a,c,d){d=new THREE.MeshCubeMaterial({env_map:d});c=new THREE.Mesh(new Cube(c,c,c,1,1,null,true),d);a.addObject(c);return c},addPanoramaCube:function(a,c,d){var f=[];f.push(new THREE.MeshBasicMaterial({map:new THREE.Texture(d[0])}));f.push(new THREE.MeshBasicMaterial({map:new THREE.Texture(d[1])}));f.push(new THREE.MeshBasicMaterial({map:new THREE.Texture(d[2])}));
+f.push(new THREE.MeshBasicMaterial({map:new THREE.Texture(d[3])}));f.push(new THREE.MeshBasicMaterial({map:new THREE.Texture(d[4])}));f.push(new THREE.MeshBasicMaterial({map:new THREE.Texture(d[5])}));mesh=new THREE.Mesh(new Cube(c,c,c,1,1,f,true),new THREE.MeshFaceMaterial);a.addObject(mesh);return mesh},addPanoramaCubePlanes:function(a,c,d){var f=c/2;c=new Plane(c,c);var g=Math.PI/2,i=Math.PI;SceneUtils.addMesh(a,c,1,0,0,-f,0,0,0,new THREE.MeshBasicMaterial({map:new THREE.Texture(d[5])}));SceneUtils.addMesh(a,
+c,1,-f,0,0,0,g,0,new THREE.MeshBasicMaterial({map:new THREE.Texture(d[0])}));SceneUtils.addMesh(a,c,1,f,0,0,0,-g,0,new THREE.MeshBasicMaterial({map:new THREE.Texture(d[1])}));SceneUtils.addMesh(a,c,1,0,f,0,g,0,i,new THREE.MeshBasicMaterial({map:new THREE.Texture(d[2])}));SceneUtils.addMesh(a,c,1,0,-f,0,-g,0,i,new THREE.MeshBasicMaterial({map:new THREE.Texture(d[3])}))}},ShaderUtils={lib:{fresnel:{uniforms:{mRefractionRatio:{type:"f",value:1.02},mFresnelBias:{type:"f",value:0.1},mFresnelPower:{type:"f",
+value:2},mFresnelScale:{type:"f",value:1},tCube:{type:"t",value:1,texture:null}},fragment_shader:"uniform samplerCube tCube;\nvarying vec3 vReflect;\nvarying vec3 vRefract[3];\nvarying float vReflectionFactor;\nvoid main() {\nvec4 reflectedColor = textureCube( tCube, vec3( -vReflect.x, vReflect.yz ) );\nvec4 refractedColor = vec4( 1.0, 1.0, 1.0, 1.0 );\nrefractedColor.r = textureCube( tCube, vec3( -vRefract[0].x, vRefract[0].yz ) ).r;\nrefractedColor.g = textureCube( tCube, vec3( -vRefract[1].x, vRefract[1].yz ) ).g;\nrefractedColor.b = textureCube( tCube, vec3( -vRefract[2].x, vRefract[2].yz ) ).b;\nrefractedColor.a = 1.0;\ngl_FragColor = mix( refractedColor, reflectedColor, clamp( vReflectionFactor, 0.0, 1.0 ) );\n}",
+vertex_shader:"uniform float mRefractionRatio;\nuniform float mFresnelBias;\nuniform float mFresnelScale;\nuniform float mFresnelPower;\nvarying vec3 vReflect;\nvarying vec3 vRefract[3];\nvarying float vReflectionFactor;\nvoid main(void) {\nvec4 mvPosition = modelViewMatrix * vec4( position, 1.0 );\nvec4 mPosition = objectMatrix * vec4( position, 1.0 );\nvec3 nWorld = normalize ( mat3( objectMatrix[0].xyz, objectMatrix[1].xyz, objectMatrix[2].xyz ) * normal );\nvec3 I = mPosition.xyz - cameraPosition;\nvReflect = reflect( I, nWorld );\nvRefract[0] = refract( normalize( I ), nWorld, mRefractionRatio );\nvRefract[1] = refract( normalize( I ), nWorld, mRefractionRatio * 0.99 );\nvRefract[2] = refract( normalize( I ), nWorld, mRefractionRatio * 0.98 );\nvReflectionFactor = mFresnelBias + mFresnelScale * pow( 1.0 + dot( normalize( I ), nWorld ), mFresnelPower );\ngl_Position = projectionMatrix * mvPosition;\n}"}}},
+Cube=function(a,c,d,f,g,i,k){function b(v,u,y,I,t,h,e,l){var r=f||1,n=g||1,p=r+1,w=n+1;t=t/r;h=h/n;var C=j.vertices.length,L;if(v=="x"&&u=="y"||v=="y"&&u=="x")L="z";else if(v=="x"&&u=="z"||v=="z"&&u=="x")L="y";else if(v=="z"&&u=="y"||v=="y"&&u=="z")L="x";for(iy=0;iy<w;iy++)for(ix=0;ix<p;ix++){var B=new THREE.Vector3;B[v]=(ix*t-x)*y;B[u]=(iy*h-s)*I;B[L]=e;j.vertices.push(new THREE.Vertex(B))}for(iy=0;iy<n;iy++)for(ix=0;ix<r;ix++){j.faces.push(new THREE.Face4(ix+p*iy+C,ix+p*(iy+1)+C,ix+1+p*(iy+1)+C,
+ix+1+p*iy+C,null,l));j.uvs.push([new THREE.UV(ix/r,iy/n),new THREE.UV(ix/r,(iy+1)/n),new THREE.UV((ix+1)/r,(iy+1)/n),new THREE.UV((ix+1)/r,iy/n)])}}THREE.Geometry.call(this);var j=this,x=a/2,s=c/2,D=d/2;k=k?-1:1;if(i!==undefined)if(i instanceof Array)this.materials=i;else{this.materials=[];for(var o=0;o<6;o++)this.materials.push([i])}else this.materials=[];b("z","y",1*k,-1,d,c,-x,this.materials[0]);b("z","y",-1*k,-1,d,c,x,this.materials[1]);b("x","z",1*k,1,a,d,s,this.materials[2]);b("x","z",1*k,-1,
+a,d,-s,this.materials[3]);b("x","y",1*k,-1,a,c,D,this.materials[4]);b("x","y",-1*k,-1,a,c,-D,this.materials[5]);(function(){for(var v=[],u=[],y=0,I=j.vertices.length;y<I;y++){for(var t=j.vertices[y],h=false,e=0,l=v.length;e<l;e++){var r=v[e];if(t.position.x==r.position.x&&t.position.y==r.position.y&&t.position.z==r.position.z){u[y]=e;h=true;break}}if(!h){u[y]=v.length;v.push(new THREE.Vertex(t.position.clone()))}}y=0;for(I=j.faces.length;y<I;y++){t=j.faces[y];t.a=u[t.a];t.b=u[t.b];t.c=u[t.c];t.d=
+u[t.d]}j.vertices=v})();this.computeCentroids();this.computeNormals()};Cube.prototype=new THREE.Geometry;Cube.prototype.constructor=Cube;
+var Cylinder=function(a,c,d,f,g){function i(j,x,s){k.vertices.push(new THREE.Vertex(new THREE.Vector3(j,x,s)))}THREE.Geometry.call(this);var k=this,b;for(b=0;b<a;b++)i(Math.sin(6.283*b/a)*c,Math.cos(6.283*b/a)*c,0);for(b=0;b<a;b++)i(Math.sin(6.283*b/a)*d,Math.cos(6.283*b/a)*d,f);for(b=0;b<a;b++)k.faces.push(new THREE.Face4(b,b+a,a+(b+1)%a,(b+1)%a));if(d!=0){i(0,0,-g);for(b=a;b<a+a/2;b++)k.faces.push(new THREE.Face4(2*a,(2*b-2*a)%a,(2*b-2*a+1)%a,(2*b-2*a+2)%a))}if(c!=0){i(0,0,f+g);for(b=a+a/2;b<2*
+a;b++)k.faces.push(new THREE.Face4((2*b-2*a+2)%a+a,(2*b-2*a+1)%a+a,(2*b-2*a)%a+a,2*a+1))}this.computeCentroids();this.computeNormals()};Cylinder.prototype=new THREE.Geometry;Cylinder.prototype.constructor=Cylinder;
+var Plane=function(a,c,d,f){THREE.Geometry.call(this);var g,i=a/2,k=c/2;d=d||1;f=f||1;var b=d+1,j=f+1;a=a/d;var x=c/f;for(g=0;g<j;g++)for(c=0;c<b;c++)this.vertices.push(new THREE.Vertex(new THREE.Vector3(c*a-i,-(g*x-k),0)));for(g=0;g<f;g++)for(c=0;c<d;c++){this.faces.push(new THREE.Face4(c+b*g,c+b*(g+1),c+1+b*(g+1),c+1+b*g));this.uvs.push([new THREE.UV(c/d,g/f),new THREE.UV(c/d,(g+1)/f),new THREE.UV((c+1)/d,(g+1)/f),new THREE.UV((c+1)/d,g/f)])}this.computeCentroids();this.computeNormals()};
+Plane.prototype=new THREE.Geometry;Plane.prototype.constructor=Plane;
+var Sphere=function(a,c,d){THREE.Geometry.call(this);var f,g=Math.max(3,c||8),i=Math.max(2,d||6);c=[];for(d=0;d<i+1;d++){f=d/i;var k=a*Math.cos(f*Math.PI),b=a*Math.sin(f*Math.PI),j=[],x=0;for(f=0;f<g;f++){var s=2*f/g,D=b*Math.sin(s*Math.PI);s=b*Math.cos(s*Math.PI);(d==0||d==i)&&f>0||(x=this.vertices.push(new THREE.Vertex(new THREE.Vector3(s,k,D)))-1);j.push(x)}c.push(j)}var o,v,u;a=c.length;for(d=0;d<a;d++){g=c[d].length;if(d>0)for(f=0;f<g;f++){j=f==g-1;i=c[d][j?0:f+1];k=c[d][j?g-1:f];b=c[d-1][j?
+g-1:f];j=c[d-1][j?0:f+1];D=d/(a-1);o=(d-1)/(a-1);v=(f+1)/g;s=f/g;x=new THREE.UV(1-v,D);D=new THREE.UV(1-s,D);s=new THREE.UV(1-s,o);var y=new THREE.UV(1-v,o);if(d<c.length-1){o=this.vertices[i].position.clone();v=this.vertices[k].position.clone();u=this.vertices[b].position.clone();o.normalize();v.normalize();u.normalize();this.faces.push(new THREE.Face3(i,k,b,[new THREE.Vector3(o.x,o.y,o.z),new THREE.Vector3(v.x,v.y,v.z),new THREE.Vector3(u.x,u.y,u.z)]));this.uvs.push([x,D,s])}if(d>1){o=this.vertices[i].position.clone();
+v=this.vertices[b].position.clone();u=this.vertices[j].position.clone();o.normalize();v.normalize();u.normalize();this.faces.push(new THREE.Face3(i,b,j,[new THREE.Vector3(o.x,o.y,o.z),new THREE.Vector3(v.x,v.y,v.z),new THREE.Vector3(u.x,u.y,u.z)]));this.uvs.push([x,s,y])}}}this.computeCentroids();this.computeNormals()};Sphere.prototype=new THREE.Geometry;Sphere.prototype.constructor=Sphere;THREE.Loader=function(a){this.statusDomElement=(this.showStatus=a)?this.addStatusElement():null};
+THREE.Loader.prototype={addStatusElement:function(){var a=document.createElement("div");a.style.fontSize="0.8em";a.style.textAlign="left";a.style.background="#b00";a.style.color="#fff";a.style.width="140px";a.style.padding="0.25em 0.25em 0.25em 0.5em";a.style.position="absolute";a.style.right="0px";a.style.top="0px";a.style.zIndex=1E3;a.innerHTML="Loading ...";return a},updateProgress:function(a){var c="Loaded ";c+=a.total?(100*a.loaded/a.total).toFixed(0)+"%":(a.loaded/1E3).toFixed(2)+" KB";this.statusDomElement.innerHTML=
+c},loadAsciiOld:function(a,c){var d=document.createElement("script");d.type="text/javascript";d.onload=c;d.src=a;document.getElementsByTagName("head")[0].appendChild(d)},loadAscii:function(a,c,d){var f=(new Date).getTime();a=new Worker(a);a.onmessage=function(g){THREE.Loader.prototype.createModel(g.data,c,d)};a.postMessage(f)},loadBinary:function(a,c,d){var f=(new Date).getTime();a=new Worker(a);var g=this.showProgress?THREE.Loader.prototype.updateProgress:null;a.onmessage=function(i){THREE.Loader.prototype.loadAjaxBuffers(i.data.buffers,
+i.data.materials,c,d,g)};a.onerror=function(i){alert("worker.onerror: "+i.message+"\n"+i.data);i.preventDefault()};a.postMessage(f)},loadAjaxBuffers:function(a,c,d,f,g){var i=new XMLHttpRequest,k=f+"/"+a,b=0;i.onreadystatechange=function(){if(i.readyState==4)i.status==200||i.status==0?THREE.Loader.prototype.createBinModel(i.responseText,d,f,c):alert("Couldn't load ["+k+"] ["+i.status+"]");else if(i.readyState==3){if(g){if(b==0)b=i.getResponseHeader("Content-Length");g({total:b,loaded:i.responseText.length})}}else if(i.readyState==
+2)b=i.getResponseHeader("Content-Length")};i.open("GET",k,true);i.overrideMimeType("text/plain; charset=x-user-defined");i.setRequestHeader("Content-Type","text/plain");i.send(null)},createBinModel:function(a,c,d,f){var g=function(i){function k(m,q){var z=s(m,q),G=s(m,q+1),P=s(m,q+2),fa=s(m,q+3),ea=(fa<<1&255|P>>7)-127;z=(P&127)<<16|G<<8|z;if(z==0&&ea==-127)return 0;return(1-2*(fa>>7))*(1+z*Math.pow(2,-23))*Math.pow(2,ea)}function b(m,q){var z=s(m,q),G=s(m,q+1),P=s(m,q+2);return(s(m,q+3)<<24)+(P<<
+16)+(G<<8)+z}function j(m,q){var z=s(m,q);return(s(m,q+1)<<8)+z}function x(m,q){var z=s(m,q);return z>127?z-256:z}function s(m,q){return m.charCodeAt(q)&255}function D(m){var q,z,G;q=b(a,m);z=b(a,m+n);G=b(a,m+p);m=j(a,m+w);THREE.Loader.prototype.f3(t,q,z,G,m)}function o(m){var q,z,G,P,fa,ea;q=b(a,m);z=b(a,m+n);G=b(a,m+p);P=j(a,m+w);fa=b(a,m+C);ea=b(a,m+L);m=b(a,m+B);THREE.Loader.prototype.f3n(t,l,q,z,G,P,fa,ea,m)}function v(m){var q,z,G,P;q=b(a,m);z=b(a,m+U);G=b(a,m+F);P=b(a,m+E);m=j(a,m+V);THREE.Loader.prototype.f4(t,
+q,z,G,P,m)}function u(m){var q,z,G,P,fa,ea,ga,la;q=b(a,m);z=b(a,m+U);G=b(a,m+F);P=b(a,m+E);fa=j(a,m+V);ea=b(a,m+T);ga=b(a,m+J);la=b(a,m+A);m=b(a,m+Q);THREE.Loader.prototype.f4n(t,l,q,z,G,P,fa,ea,ga,la,m)}function y(m){var q,z;q=b(a,m);z=b(a,m+N);m=b(a,m+W);THREE.Loader.prototype.uv3(t,r[q*2],r[q*2+1],r[z*2],r[z*2+1],r[m*2],r[m*2+1])}function I(m){var q,z,G;q=b(a,m);z=b(a,m+M);G=b(a,m+K);m=b(a,m+Y);THREE.Loader.prototype.uv4(t,r[q*2],r[q*2+1],r[z*2],r[z*2+1],r[G*2],r[G*2+1],r[m*2],r[m*2+1])}var t=
+this,h=0,e,l=[],r=[],n,p,w,C,L,B,U,F,E,V,T,J,A,Q,N,W,M,K,Y;THREE.Geometry.call(this);THREE.Loader.prototype.init_materials(t,f,i);e={signature:a.substr(h,8),header_bytes:s(a,h+8),vertex_coordinate_bytes:s(a,h+9),normal_coordinate_bytes:s(a,h+10),uv_coordinate_bytes:s(a,h+11),vertex_index_bytes:s(a,h+12),normal_index_bytes:s(a,h+13),uv_index_bytes:s(a,h+14),material_index_bytes:s(a,h+15),nvertices:b(a,h+16),nnormals:b(a,h+16+4),nuvs:b(a,h+16+8),ntri_flat:b(a,h+16+12),ntri_smooth:b(a,h+16+16),ntri_flat_uv:b(a,
+h+16+20),ntri_smooth_uv:b(a,h+16+24),nquad_flat:b(a,h+16+28),nquad_smooth:b(a,h+16+32),nquad_flat_uv:b(a,h+16+36),nquad_smooth_uv:b(a,h+16+40)};h+=e.header_bytes;n=e.vertex_index_bytes;p=e.vertex_index_bytes*2;w=e.vertex_index_bytes*3;C=e.vertex_index_bytes*3+e.material_index_bytes;L=e.vertex_index_bytes*3+e.material_index_bytes+e.normal_index_bytes;B=e.vertex_index_bytes*3+e.material_index_bytes+e.normal_index_bytes*2;U=e.vertex_index_bytes;F=e.vertex_index_bytes*2;E=e.vertex_index_bytes*3;V=e.vertex_index_bytes*
+4;T=e.vertex_index_bytes*4+e.material_index_bytes;J=e.vertex_index_bytes*4+e.material_index_bytes+e.normal_index_bytes;A=e.vertex_index_bytes*4+e.material_index_bytes+e.normal_index_bytes*2;Q=e.vertex_index_bytes*4+e.material_index_bytes+e.normal_index_bytes*3;N=e.uv_index_bytes;W=e.uv_index_bytes*2;M=e.uv_index_bytes;K=e.uv_index_bytes*2;Y=e.uv_index_bytes*3;h+=function(m){var q,z,G,P=e.vertex_coordinate_bytes*3,fa=m+e.nvertices*P;for(m=m;m<fa;m+=P){q=k(a,m);z=k(a,m+e.vertex_coordinate_bytes);G=
+k(a,m+e.vertex_coordinate_bytes*2);THREE.Loader.prototype.v(t,q,z,G)}return e.nvertices*P}(h);h+=function(m){var q,z,G,P=e.normal_coordinate_bytes*3,fa=m+e.nnormals*P;for(m=m;m<fa;m+=P){q=x(a,m);z=x(a,m+e.normal_coordinate_bytes);G=x(a,m+e.normal_coordinate_bytes*2);l.push(q/127,z/127,G/127)}return e.nnormals*P}(h);h+=function(m){var q,z,G=e.uv_coordinate_bytes*2,P=m+e.nuvs*G;for(m=m;m<P;m+=G){q=k(a,m);z=k(a,m+e.uv_coordinate_bytes);r.push(q,z)}return e.nuvs*G}(h);h+=function(m){var q,z=e.vertex_index_bytes*
+3+e.material_index_bytes,G=m+e.ntri_flat*z;for(q=m;q<G;q+=z)D(q);return G-m}(h);h+=function(m){var q,z=e.vertex_index_bytes*3+e.material_index_bytes+e.normal_index_bytes*3,G=m+e.ntri_smooth*z;for(q=m;q<G;q+=z)o(q);return G-m}(h);h+=function(m){var q,z=e.vertex_index_bytes*3+e.material_index_bytes,G=z+e.uv_index_bytes*3,P=m+e.ntri_flat_uv*G;for(q=m;q<P;q+=G){D(q);y(q+z)}return P-m}(h);h+=function(m){var q,z=e.vertex_index_bytes*3+e.material_index_bytes+e.normal_index_bytes*3,G=z+e.uv_index_bytes*3,
+P=m+e.ntri_smooth_uv*G;for(q=m;q<P;q+=G){o(q);y(q+z)}return P-m}(h);h+=function(m){var q,z=e.vertex_index_bytes*4+e.material_index_bytes,G=m+e.nquad_flat*z;for(q=m;q<G;q+=z)v(q);return G-m}(h);h+=function(m){var q,z=e.vertex_index_bytes*4+e.material_index_bytes+e.normal_index_bytes*4,G=m+e.nquad_smooth*z;for(q=m;q<G;q+=z)u(q);return G-m}(h);h+=function(m){var q,z=e.vertex_index_bytes*4+e.material_index_bytes,G=z+e.uv_index_bytes*4,P=m+e.nquad_flat_uv*G;for(q=m;q<P;q+=G){v(q);I(q+z)}return P-m}(h);
+h+=function(m){var q,z=e.vertex_index_bytes*4+e.material_index_bytes+e.normal_index_bytes*4,G=z+e.uv_index_bytes*4,P=m+e.nquad_smooth_uv*G;for(q=m;q<P;q+=G){u(q);I(q+z)}return P-m}(h);this.computeCentroids();this.computeNormals()};g.prototype=new THREE.Geometry;g.prototype.constructor=g;c(new g(d))},createModel:function(a,c,d){var f=function(g){var i=this;THREE.Geometry.call(this);THREE.Loader.prototype.init_materials(i,a.materials,g);(function(){var k,b,j,x,s;k=0;for(b=a.vertices.length;k<b;k+=3){j=
+a.vertices[k];x=a.vertices[k+1];s=a.vertices[k+2];THREE.Loader.prototype.v(i,j,x,s)}})();(function(){function k(u,y){THREE.Loader.prototype.f3(i,u[y],u[y+1],u[y+2],u[y+3])}function b(u,y){THREE.Loader.prototype.f3n(i,a.normals,u[y],u[y+1],u[y+2],u[y+3],u[y+4],u[y+5],u[y+6])}function j(u,y){THREE.Loader.prototype.f4(i,u[y],u[y+1],u[y+2],u[y+3],u[y+4])}function x(u,y){THREE.Loader.prototype.f4n(i,a.normals,u[y],u[y+1],u[y+2],u[y+3],u[y+4],u[y+5],u[y+6],u[y+7],u[y+8])}function s(u,y){var I,t,h;I=u[y];
+t=u[y+1];h=u[y+2];THREE.Loader.prototype.uv3(i,a.uvs[I*2],a.uvs[I*2+1],a.uvs[t*2],a.uvs[t*2+1],a.uvs[h*2],a.uvs[h*2+1])}function D(u,y){var I,t,h,e;I=u[y];t=u[y+1];h=u[y+2];e=u[y+3];THREE.Loader.prototype.uv4(i,a.uvs[I*2],a.uvs[I*2+1],a.uvs[t*2],a.uvs[t*2+1],a.uvs[h*2],a.uvs[h*2+1],a.uvs[e*2],a.uvs[e*2+1])}var o,v;o=0;for(v=a.triangles.length;o<v;o+=4)k(a.triangles,o);o=0;for(v=a.triangles_uv.length;o<v;o+=7){k(a.triangles_uv,o);s(a.triangles_uv,o+4)}o=0;for(v=a.triangles_n.length;o<v;o+=7)b(a.triangles_n,
+o);o=0;for(v=a.triangles_n_uv.length;o<v;o+=10){b(a.triangles_n_uv,o);s(a.triangles_n_uv,o+7)}o=0;for(v=a.quads.length;o<v;o+=5)j(a.quads,o);o=0;for(v=a.quads_uv.length;o<v;o+=9){j(a.quads_uv,o);D(a.quads_uv,o+5)}o=0;for(v=a.quads_n.length;o<v;o+=9)x(a.quads_n,o);o=0;for(v=a.quads_n_uv.length;o<v;o+=13){x(a.quads_n_uv,o);D(a.quads_n_uv,o+9)}})();this.computeCentroids();this.computeNormals()};f.prototype=new THREE.Geometry;f.prototype.constructor=f;c(new f(d))},v:function(a,c,d,f){a.vertices.push(new THREE.Vertex(new THREE.Vector3(c,
+d,f)))},f3:function(a,c,d,f,g){a.faces.push(new THREE.Face3(c,d,f,null,a.materials[g]))},f4:function(a,c,d,f,g,i){a.faces.push(new THREE.Face4(c,d,f,g,null,a.materials[i]))},f3n:function(a,c,d,f,g,i,k,b,j){i=a.materials[i];var x=c[b*3],s=c[b*3+1];b=c[b*3+2];var D=c[j*3],o=c[j*3+1];j=c[j*3+2];a.faces.push(new THREE.Face3(d,f,g,[new THREE.Vector3(c[k*3],c[k*3+1],c[k*3+2]),new THREE.Vector3(x,s,b),new THREE.Vector3(D,o,j)],i))},f4n:function(a,c,d,f,g,i,k,b,j,x,s){k=a.materials[k];var D=c[j*3],o=c[j*
+3+1];j=c[j*3+2];var v=c[x*3],u=c[x*3+1];x=c[x*3+2];var y=c[s*3],I=c[s*3+1];s=c[s*3+2];a.faces.push(new THREE.Face4(d,f,g,i,[new THREE.Vector3(c[b*3],c[b*3+1],c[b*3+2]),new THREE.Vector3(D,o,j),new THREE.Vector3(v,u,x),new THREE.Vector3(y,I,s)],k))},uv3:function(a,c,d,f,g,i,k){var b=[];b.push(new THREE.UV(c,d));b.push(new THREE.UV(f,g));b.push(new THREE.UV(i,k));a.uvs.push(b)},uv4:function(a,c,d,f,g,i,k,b,j){var x=[];x.push(new THREE.UV(c,d));x.push(new THREE.UV(f,g));x.push(new THREE.UV(i,k));x.push(new THREE.UV(b,
+j));a.uvs.push(x)},init_materials:function(a,c,d){a.materials=[];for(var f=0;f<c.length;++f)a.materials[f]=[THREE.Loader.prototype.createMaterial(c[f],d)]},createMaterial:function(a,c){function d(i){i=Math.log(i)/Math.LN2;return Math.floor(i)==i}var f,g;if(a.map_diffuse&&c){g=document.createElement("canvas");f=new THREE.MeshLambertMaterial({map:new THREE.Texture(g)});g=new Image;g.onload=function(){if(!d(this.width)||!d(this.height)){var i=Math.pow(2,Math.round(Math.log(this.width)/Math.LN2)),k=Math.pow(2,
+Math.round(Math.log(this.height)/Math.LN2));f.map.image.width=i;f.map.image.height=k;f.map.image.getContext("2d").drawImage(this,0,0,i,k)}else f.map.image=this;f.map.image.loaded=1};g.src=c+"/"+a.map_diffuse}else if(a.col_diffuse){g=(a.col_diffuse[0]*255<<16)+(a.col_diffuse[1]*255<<8)+a.col_diffuse[2]*255;f=new THREE.MeshLambertMaterial({color:g,opacity:a.transparency})}else f=a.a_dbg_color?new THREE.MeshLambertMaterial({color:a.a_dbg_color}):new THREE.MeshLambertMaterial({color:15658734});return f}};

BIN
examples/.DS_Store


+ 176 - 0
examples/blender249_dice.html

@@ -0,0 +1,176 @@
+<!DOCTYPE HTML>
+<html lang="en">
+	<head>
+		<title>three.js - geometry - blender mesh</title>
+		<meta charset="utf-8">
+		<meta name="viewport" content="width=device-width; initial-scale=1.0; maximum-scale=1.0; user-scalable=0;"/>
+		<style type="text/css">
+			body {
+				font-family: Monospace;
+				background-color: #f0f0f0;
+				margin: 0px;
+				overflow: hidden;
+			}
+		</style>
+	</head>
+	<body>
+
+		<script type="text/javascript" src="../build/Three.js"></script>
+
+		<script type="text/javascript" src="geometry/Dice249UV.js"></script>
+		<script type="text/javascript" src="js/Stats.js"></script>
+
+		<script type="text/javascript">
+	//*
+			var SCREEN_WIDTH = window.innerWidth;
+			var SCREEN_HEIGHT = window.innerHeight;
+
+			var container;
+			var stats;
+
+			var camera;
+			var scene;
+			var renderer;
+
+			var model;
+
+			var targetRotation = 0;
+			var targetRotationOnMouseDown = 0;
+
+			var mouseX = 0;
+			var mouseXOnMouseDown = 0;
+			var mouseY = 0;
+
+			var windowHalfX = window.innerWidth / 2;
+			var windowHalfY = window.innerHeight / 2;
+
+			init();
+			setInterval(loop, 1000/60);
+
+			function init() {
+
+				container = document.createElement('div');
+				document.body.appendChild(container);
+
+				var info = document.createElement('div');
+				info.style.position = 'absolute';
+				info.style.top = '10px';
+				info.style.width = '100%';
+				info.style.textAlign = 'center';
+				info.innerHTML = 'Drag to spin';
+				container.appendChild(info);
+
+				camera = new THREE.Camera( 70, SCREEN_WIDTH / SCREEN_HEIGHT, 1, 10000 );
+				camera.position.y = 250;
+				camera.position.z = 500;
+				camera.target.position.y = 0;
+
+				scene = new THREE.Scene();
+				
+				//model
+				model = new THREE.Mesh( new Dice249UV(), new THREE.MeshBasicMaterial( { map: loadImage( 'geometry/dice.gif' ) } ) );
+				model.rotation.x = Math.PI * .5;
+				model.rotation.z = Math.PI * .25;
+				model.scale = new THREE.Vector3(70,70,70);
+				scene.addObject(model);
+
+				renderer = new THREE.CanvasRenderer();
+				renderer.setSize( SCREEN_WIDTH, SCREEN_HEIGHT );
+
+				container.appendChild( renderer.domElement );
+
+				stats = new Stats();
+				stats.domElement.style.position = 'absolute';
+				stats.domElement.style.top = '0px';
+				container.appendChild( stats.domElement );
+
+				document.addEventListener( 'mousedown', onDocumentMouseDown, false );
+				document.addEventListener( 'touchstart', onDocumentTouchStart, false );
+				document.addEventListener( 'touchmove', onDocumentTouchMove, false );
+			}
+
+			//
+
+			function onDocumentMouseDown( event ) {
+
+				event.preventDefault();
+
+				document.addEventListener( 'mousemove', onDocumentMouseMove, false );
+				document.addEventListener( 'mouseup', onDocumentMouseUp, false );
+				document.addEventListener( 'mouseout', onDocumentMouseOut, false );
+
+				mouseXOnMouseDown = event.clientX - windowHalfX;
+				targetRotationOnMouseDown = targetRotation;
+			}
+
+			function onDocumentMouseMove( event ) {
+
+				mouseX = event.clientX - windowHalfX;
+				mouseY = event.clientY - windowHalfY;
+
+				targetRotation = targetRotationOnMouseDown + ( mouseX - mouseXOnMouseDown ) * 0.02;
+			}
+
+			function onDocumentMouseUp( event ) {
+
+				document.removeEventListener( 'mousemove', onDocumentMouseMove, false );
+				document.removeEventListener( 'mouseup', onDocumentMouseUp, false );
+				document.removeEventListener( 'mouseout', onDocumentMouseOut, false );
+			}
+
+			function onDocumentMouseOut( event ) {
+
+				document.removeEventListener( 'mousemove', onDocumentMouseMove, false );
+				document.removeEventListener( 'mouseup', onDocumentMouseUp, false );
+				document.removeEventListener( 'mouseout', onDocumentMouseOut, false );
+			}
+
+			function onDocumentTouchStart( event ) {
+
+				if ( event.touches.length == 1 ) {
+
+					event.preventDefault();
+
+					mouseXOnMouseDown = event.touches[ 0 ].pageX - windowHalfX;
+					targetRotationOnMouseDown = targetRotation;
+
+				}
+			}
+
+			function onDocumentTouchMove( event ) {
+
+				if ( event.touches.length == 1 ) {
+
+					event.preventDefault();
+
+					mouseX = event.touches[ 0 ].pageX - windowHalfX;
+					targetRotation = targetRotationOnMouseDown + ( mouseX - mouseXOnMouseDown ) * 0.05;
+
+				}
+			}
+
+			//
+
+			function loop() {
+				
+				model.rotation.z += ( targetRotation - model.rotation.z ) * 0.05;
+
+				renderer.render(scene, camera);
+				stats.update();
+			}
+			function loadImage( path ) {
+
+				var image = document.createElement( 'img' );
+				var texture = new THREE.Texture( image, THREE.UVMapping )
+
+				image.onload = function () { texture.loaded = true; };
+				image.src = path;
+
+				return texture;
+
+			}
+
+		</script>
+
+	</body>
+</html>

+ 165 - 0
examples/c4d_coloured_box.html

@@ -0,0 +1,165 @@
+<!DOCTYPE HTML>
+<html lang="en">
+	<head>
+		<title>three.js - geometry - c4d mesh</title>
+		<meta charset="utf-8">
+		<meta name="viewport" content="width=device-width; initial-scale=1.0; maximum-scale=1.0; user-scalable=0;"/>
+		<style type="text/css">
+			body {
+				font-family: Monospace;
+				background-color: #000000;
+				color: #DEDEDE;
+				margin: 0px;
+				overflow: hidden;
+			}
+		</style>
+	</head>
+	<body>
+
+		<script type="text/javascript" src="../build/Three.js"></script>
+
+		<script type="text/javascript" src="geometry/Box6.js"></script>
+
+		<script type="text/javascript" src="js/Stats.js"></script>
+
+		<script type="text/javascript">
+	//*
+			var SCREEN_WIDTH = window.innerWidth;
+			var SCREEN_HEIGHT = window.innerHeight;
+
+			var container;
+			var stats;
+
+			var camera;
+			var scene;
+			var renderer;
+
+			var model,material;
+
+			var targetRotation = 0;
+			var targetRotationOnMouseDown = 0;
+
+			var mouseX = 0;
+			var mouseXOnMouseDown = 0;
+
+			var windowHalfX = window.innerWidth / 2;
+			var windowHalfY = window.innerHeight / 2;
+
+			init();
+			setInterval(loop, 1000/60);
+
+			function init() {
+
+				container = document.createElement('div');
+				document.body.appendChild(container);
+
+				var info = document.createElement('div');
+				info.style.position = 'absolute';
+				info.style.top = '10px';
+				info.style.width = '100%';
+				info.style.textAlign = 'center';
+				info.innerHTML = 'Drag to spin';
+				container.appendChild(info);
+
+				camera = new THREE.Camera( 70, SCREEN_WIDTH / SCREEN_HEIGHT, 1, 10000 );
+				camera.position.y = 250;
+				camera.position.z = 500;
+				camera.target.position.y = 50;
+
+				scene = new THREE.Scene();
+
+				//model
+				var geometry = new Box6();
+				geometry.autoColor();
+				model = new THREE.Mesh( geometry, new THREE.MeshFaceMaterial());
+				model.rotation.x = Math.PI * .5;
+				scene.addObject(model);
+
+				renderer = new THREE.CanvasRenderer();
+				renderer.setSize( SCREEN_WIDTH, SCREEN_HEIGHT );
+
+				container.appendChild( renderer.domElement );
+
+				stats = new Stats();
+				stats.domElement.style.position = 'absolute';
+				stats.domElement.style.top = '0px';
+				container.appendChild( stats.domElement );
+				
+				document.addEventListener( 'mousedown', onDocumentMouseDown, false );
+				document.addEventListener( 'touchstart', onDocumentTouchStart, false );
+				document.addEventListener( 'touchmove', onDocumentTouchMove, false );
+			}
+
+			//
+
+			function onDocumentMouseDown( event ) {
+
+				event.preventDefault();
+
+				document.addEventListener( 'mousemove', onDocumentMouseMove, false );
+				document.addEventListener( 'mouseup', onDocumentMouseUp, false );
+				document.addEventListener( 'mouseout', onDocumentMouseOut, false );
+
+				mouseXOnMouseDown = event.clientX - windowHalfX;
+				targetRotationOnMouseDown = targetRotation;
+			}
+
+			function onDocumentMouseMove( event ) {
+
+				mouseX = event.clientX - windowHalfX;
+
+				targetRotation = targetRotationOnMouseDown + ( mouseX - mouseXOnMouseDown ) * 0.02;
+			}
+
+			function onDocumentMouseUp( event ) {
+
+				document.removeEventListener( 'mousemove', onDocumentMouseMove, false );
+				document.removeEventListener( 'mouseup', onDocumentMouseUp, false );
+				document.removeEventListener( 'mouseout', onDocumentMouseOut, false );
+			}
+
+			function onDocumentMouseOut( event ) {
+
+				document.removeEventListener( 'mousemove', onDocumentMouseMove, false );
+				document.removeEventListener( 'mouseup', onDocumentMouseUp, false );
+				document.removeEventListener( 'mouseout', onDocumentMouseOut, false );
+			}
+
+			function onDocumentTouchStart( event ) {
+
+				if ( event.touches.length == 1 ) {
+
+					event.preventDefault();
+
+					mouseXOnMouseDown = event.touches[ 0 ].pageX - windowHalfX;
+					targetRotationOnMouseDown = targetRotation;
+
+				}
+			}
+
+			function onDocumentTouchMove( event ) {
+
+				if ( event.touches.length == 1 ) {
+
+					event.preventDefault();
+
+					mouseX = event.touches[ 0 ].pageX - windowHalfX;
+					targetRotation = targetRotationOnMouseDown + ( mouseX - mouseXOnMouseDown ) * 0.05;
+
+				}
+			}
+
+			//
+
+			function loop() {
+
+				model.rotation.z += ( targetRotation - model.rotation.z ) * 0.05;
+
+				renderer.render(scene, camera);
+				stats.update();
+			}
+
+		</script>
+
+	</body>
+</html>

+ 399 - 0
examples/c4d_deltaInc_bot.html

@@ -0,0 +1,399 @@
+<!DOCTYPE HTML>
+<html lang="en">
+	<head>
+		<title>three.js - geometry - C4D exporter colour test</title>
+		<meta charset="utf-8">
+		<meta name="viewport" content="width=device-width; initial-scale=1.0; maximum-scale=1.0; user-scalable=0;"/>
+		<style type="text/css">
+			body {
+				font-family: Monospace;
+				background-color: #252525;
+				color: #FFFFFF;
+				margin: 0px;
+				overflow: hidden;
+			}
+			a{
+				color: #FE8101;
+			}
+				#colour-picker {
+					margin:auto;
+					position:absolute;
+					bottom:10px;
+					left:50%;
+					margin-left:-400px;
+					width:800px;
+					height:50px;
+					border:1px solid #000;
+				}
+				#colour-picker #left, #colour-picker #right {
+					width:50px;
+					height:50px;
+					line-height:50px;
+					text-align:center;
+					moz-user-select:none;
+					webkit-user-select:none;
+					user-select:none;
+					cursor:pointer;
+				}
+				#colour-picker #left {
+					position:absolute;
+					left:0px;
+					border-right:1px solid #000;
+				}
+
+				#colour-picker #right {
+					position:absolute;
+					right:0px;
+					border-left:1px solid #000;
+				}
+				#colour-picker #colours-container {
+					overflow:hidden;
+					width:700px;
+					height:50px;
+					position:absolute;
+					left:51px;
+				}
+				#colour-picker #colours-scroller {
+				}
+				#colour-picker .colours {
+					float:left;
+				}
+				#colour-picker .colours div {
+					width:174px;
+					border-right:1px solid #000;
+					height:50px;
+					float:left;
+					background-color:#ccc;
+				}
+				#colour-picker .colours div:last-child {
+					border-right:1px solid #fff;
+				}
+		</style>
+	</head>
+	<body>
+		<!--<Colour picker>-->
+		<div id="colour-picker">
+			<div id="left">
+				&lt;
+			</div>
+			<div id="colours-container">
+				<div id="colours-scroller">
+				</div>
+			</div>
+			<div id="right">
+				&gt;
+			</div>
+		</div>
+		<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js"></script>	
+		<script>
+			//Big thanks to Max Novakovic for the color picker! woo hoo!
+			//for more handy js for Max's projects on github: https://github.com/betamax
+		
+			var colours = [{"c3":"#F0EDE8","c2":"#E3E4AA","c1":"#959684","c4":"#070707"},{"c3":"#4B4B4B","c2":"#010101","c1":"#020202","c4":"#252525"},{"c3":"#FDFDFD","c2":"#FC0000","c1":"#010101","c4":"#99D0EE"},{"c3":"#FFFFC9","c2":"#FBFD04","c1":"#FF0500","c4":"#111111"},{"c3":"#FFFFFF","c2":"#811881","c1":"#111111","c4":"#F60081"},{"c3":"#FFC306","c2":"#040301","c1":"#5D9412","c4":"#0AA0C3"},{"c3":"#111111","c2":"#C8EBF1","c1":"#FC0007","c4":"#FE8101"},{"c3":"#5A065C","c2":"#E6057B","c1":"#FB9205","c4":"#FAFF02"},{"c3":"#F70084","c2":"#7BC20C","c1":"#02A4CB","c4":"#030301"},{"c3":"#FDFDFD","c2":"#FF0700","c1":"#111111","c4":"#CB0305"},{"c3":"#FBFF04","c2":"#8BD9E5","c1":"#F1017E","c4":"#111111"},{"c3":"#FF3F08","c2":"#EF0276","c1":"#029FC8","c4":"#080705"},{"c3":"#FEFEFE","c2":"#FF0305","c1":"#A5D1EE","c4":"#0B3098"},{"c3":"#FFFFFF","c2":"#CEECF6","c1":"#FCFD09","c4":"#020202"}];
+			function createColourPicker(colours){
+
+				var container_width = 700,
+				total_length = colours.length * container_width;
+
+				$("#colours-scroller").css("width", total_length + "px");
+
+				for(var i = 0, j = colours.length; i < j; i++) {
+					var container = $("<div />"),
+					c1 = $("<div />"),
+					c2 = $("<div />"),
+					c3 = $("<div />"),
+					c4 = $("<div />");
+
+					container.addClass("colours");
+
+					c1.css("background-color", colours[i].c1.replace("0x", "#"));
+					c2.css("background-color", colours[i].c2.replace("0x", "#"));
+					c3.css("background-color", colours[i].c3.replace("0x", "#"));
+					c4.css("background-color", colours[i].c4.replace("0x", "#"));
+
+					container.append(c1);
+					container.append(c2);
+					container.append(c3);
+					container.append(c4);
+
+					$("#colours-scroller").append(container);
+
+				}
+
+				$("#right").unbind("click");
+				$("#right").bind("click", function(e){
+					$("#colours-scroller").stop(true, true);
+					var current_margin = parseInt($("#colours-scroller").css("margin-left").replace("px", ""));
+					if(Math.abs(current_margin-container_width) != total_length) {
+						$("#colours-scroller").animate({"margin-left": current_margin-container_width+"px"});
+					}
+				});
+
+				$("#left").unbind("click");
+				$("#left").bind("click", function(e){
+					$("#colours-scroller").stop(true, true);
+					var current_margin = parseInt($("#colours-scroller").css("margin-left").replace("px", ""));
+					if(current_margin+container_width != container_width) {
+						$("#colours-scroller").animate({"margin-left": current_margin+container_width+"px"});
+					}
+				});
+
+				$(".colours").unbind("click");
+				$(".colours").bind("click", function(e){
+					var divs = $(this).children("div"),
+					c1 = $(divs[0]).css("background-color"),
+					c2 = $(divs[1]).css("background-color"),
+					c3 = $(divs[2]).css("background-color"),
+					c4 = $(divs[3]).css("background-color");
+
+					// console.log("c1: " + rgb2hex(c1), "c2: " + rgb2hex(c2), "c3: " + rgb2hex(c3), "c4: " + rgb2hex(c4))
+					
+					for(var i = 0 ; i < geoms.length ; i++){
+						
+						if(geoms[i].colors['c1'] != undefined) geoms[i].colors['c1'] =  parseInt(rgb2hex(c1));
+						if(geoms[i].colors['c2'] != undefined) geoms[i].colors['c2'] =  parseInt(rgb2hex(c2));
+						if(geoms[i].colors['c3'] != undefined) geoms[i].colors['c3'] =  parseInt(rgb2hex(c3));
+						if(geoms[i].colors['c4'] != undefined) geoms[i].colors['c4'] =  parseInt(rgb2hex(c4));
+						geoms[i].autoColor();
+					}
+					
+				});
+				
+				function rgb2hex(rgbString){
+					var parts = rgbString
+					        .match(/^rgb\((\d+),\s*(\d+),\s*(\d+)\)$/)
+					;
+					// parts now should be ["rgb(0, 70, 255", "0", "70", "255"]
+
+					delete (parts[0]);
+					for (var i = 1; i <= 3; ++i) {
+					    parts[i] = parseInt(parts[i]).toString(16);
+					    if (parts[i].length == 1) parts[i] = '0' + parts[i];
+					}
+					var hexString = '0x'+parts.join('');
+					return hexString;
+				}
+
+			}
+
+			$(function(){
+				createColourPicker(colours);
+			});
+		</script>
+		<!--</Colour picker>-->
+			
+		<script type="text/javascript" src="../build/Three.js"></script>
+
+		<script type="text/javascript" src="geometry/BotUpperBody.js"></script>
+		<script type="text/javascript" src="geometry/BotLowerBody.js"></script>
+		<script type="text/javascript" src="geometry/BotArmL.js"></script>
+		<script type="text/javascript" src="geometry/BotArmR.js"></script>
+		<script type="text/javascript" src="js/Stats.js"></script>
+
+		<script type="text/javascript">
+	//*
+			var SCREEN_WIDTH = window.innerWidth;
+			var SCREEN_HEIGHT = window.innerHeight;
+
+			var container;
+			var stats;
+
+			var camera;
+			var scene;
+			var renderer;
+			
+			var model,armR,armL,upperBody;
+			var geoms = [];
+			var armLDist,armRDist;
+			
+			var targetRotation = 0;
+			var targetRotationOnMouseDown = 0;
+
+			var mouseX = 0;
+			var mouseXOnMouseDown = 0;
+			var mouseY = 0;
+
+			var windowHalfX = window.innerWidth / 2;
+			var windowHalfY = window.innerHeight / 2;
+
+			init();
+			setInterval(loop, 1000/60);
+
+			function init() {
+
+				container = document.createElement('div');
+				document.body.appendChild(container);
+
+				var info = document.createElement('div');
+				info.style.position = 'absolute';
+				info.style.top = '10px';
+				info.style.width = '100%';
+				info.style.textAlign = 'center';
+				info.innerHTML = '<h3>Original design by <a href="http://www.deltainc.nl/">deltaInc</a></h3><br />Color Picker by <a href="http://maxnov.com/">Max Novakovic</a><br />Drag to spin';
+				container.appendChild(info);
+
+				camera = new THREE.Camera( 70, SCREEN_WIDTH / SCREEN_HEIGHT, 1, 10000 );
+				camera.position.y = -200;
+				camera.position.z = 500;
+				camera.target.position.y = -250;
+
+				scene = new THREE.Scene();
+
+				//model
+				var upperGeom = new BotUpperBody();
+				upperBody = new THREE.Mesh( upperGeom, new THREE.MeshFaceMaterial());
+				var armLGeom = new BotArmL();
+				armL = new THREE.Mesh( armLGeom, new THREE.MeshFaceMaterial());
+				var armRGeom = new BotArmR();
+				armR = new THREE.Mesh( armRGeom, new THREE.MeshFaceMaterial());
+				lowerGeom = new BotLowerBody();
+				model = new THREE.Mesh( lowerGeom, new THREE.MeshFaceMaterial());
+				lowerGeom.autoColor();
+				armRGeom.autoColor();
+				armLGeom.autoColor();
+				upperGeom.autoColor();
+				geoms = [lowerGeom,upperGeom,armLGeom,armRGeom];
+				
+				initModel(model,lowerGeom);
+				initModel(upperBody,upperGeom);
+				initModel(armL,armLGeom);
+				initModel(armR,armRGeom);
+				
+				armRDist = upperBody.position.distanceTo(armR.position) * .73;
+				armLDist = upperBody.position.distanceTo(armL.position) * .73;
+				
+				scene.addObject(model);
+				scene.addObject(upperBody);
+				scene.addObject(armR);
+				scene.addObject(armL);
+
+				renderer = new THREE.CanvasRenderer();
+				renderer.setSize( SCREEN_WIDTH, SCREEN_HEIGHT );
+
+				container.appendChild( renderer.domElement );
+
+				stats = new Stats();
+				stats.domElement.style.position = 'absolute';
+				stats.domElement.style.top = '0px';
+				container.appendChild( stats.domElement );
+
+				document.addEventListener( 'mousedown', onDocumentMouseDown, false );
+				document.addEventListener( 'touchstart', onDocumentTouchStart, false );
+				document.addEventListener( 'touchmove', onDocumentTouchMove, false );
+			}
+
+			//
+
+			function onDocumentMouseDown( event ) {
+
+				event.preventDefault();
+
+				document.addEventListener( 'mousemove', onDocumentMouseMove, false );
+				document.addEventListener( 'mouseup', onDocumentMouseUp, false );
+				document.addEventListener( 'mouseout', onDocumentMouseOut, false );
+
+				mouseXOnMouseDown = event.clientX - windowHalfX;
+				targetRotationOnMouseDown = targetRotation;
+			}
+
+			function onDocumentMouseMove( event ) {
+
+				mouseX = event.clientX - windowHalfX;
+				mouseY = event.clientY - windowHalfY;
+
+				targetRotation = targetRotationOnMouseDown + ( mouseX - mouseXOnMouseDown ) * 0.02;
+			}
+
+			function onDocumentMouseUp( event ) {
+
+				document.removeEventListener( 'mousemove', onDocumentMouseMove, false );
+				document.removeEventListener( 'mouseup', onDocumentMouseUp, false );
+				document.removeEventListener( 'mouseout', onDocumentMouseOut, false );
+			}
+
+			function onDocumentMouseOut( event ) {
+
+				document.removeEventListener( 'mousemove', onDocumentMouseMove, false );
+				document.removeEventListener( 'mouseup', onDocumentMouseUp, false );
+				document.removeEventListener( 'mouseout', onDocumentMouseOut, false );
+			}
+
+			function onDocumentTouchStart( event ) {
+
+				if ( event.touches.length == 1 ) {
+
+					event.preventDefault();
+
+					mouseXOnMouseDown = event.touches[ 0 ].pageX - windowHalfX;
+					targetRotationOnMouseDown = targetRotation;
+
+				}
+			}
+
+			function onDocumentTouchMove( event ) {
+
+				if ( event.touches.length == 1 ) {
+
+					event.preventDefault();
+
+					mouseX = event.touches[ 0 ].pageX - windowHalfX;
+					targetRotation = targetRotationOnMouseDown + ( mouseX - mouseXOnMouseDown ) * 0.05;
+
+				}
+			}
+
+			//
+
+			function loop() {
+				model.rotation.z += ( targetRotation - model.rotation.z ) * 0.025;
+				//armL.rotation.x += ( targetRotation - model.rotation.z ) * 0.01;
+				//armL.rotation.x -= ( targetRotation - model.rotation.z ) * 0.01;
+				upperBody.rotation.y = -model.rotation.z * 0.5;
+				
+				armL.rotation.y = armR.rotation.y = upperBody.rotation.y;
+				
+				/*
+				armL.position.x = upperBody.position.x + (Math.cos(upperBody.rotation.y) * armRDist);
+				armL.position.z = upperBody.position.z + (Math.sin(upperBody.rotation.y) * armRDist);
+				//armL.rotation.x = upperBody.rotation.y * .005;
+				armL.rotation.y = upperBody.rotation.y;
+				//armR.rotation.x -= 0.005;
+			
+				
+				armR.position.x = upperBody.position.x - (Math.cos(upperBody.rotation.y) * armLDist);
+				armR.position.z = upperBody.position.z - (Math.sin(upperBody.rotation.y) * armLDist);
+				//armR.rotation.x = upperBody.rotation.y * .005;//gimbal lock ?
+				armR.rotation.y = upperBody.rotation.y;
+				//*/
+				renderer.render(scene, camera);
+				stats.update();
+			}
+			function initBitmapMaterial(url) {
+
+				texture = document.createElement( 'canvas' );
+				texture.width = 128;
+				texture.height = 128;
+
+				material = new THREE.MeshBitmapMaterial( texture );
+
+				var temp = new Image();
+				temp.onload = function () {
+					material.bitmap = this;
+					renderer.render(scene, camera);
+				};
+				temp.src = url;
+			}
+			function initModel(model,geom){
+				geom.autoColor();
+				model.position = geom.getPosition();
+				model.rotation = geom.getRotation();
+				model.rotation.x += Math.PI;
+				// model.rotation.y += Math.PI;
+				// model.rotation.z += Math.PI;
+				model.scale    = geom.getScale();
+			}
+
+		</script>
+
+	</body>
+</html>

+ 134 - 0
examples/c4d_deltaInc_nano_lights.html

@@ -0,0 +1,134 @@
+<!DOCTYPE HTML>
+<html lang="en">
+	<head>
+		<title>three.js - nano with point light</title>
+		<meta charset="utf-8">
+		<style type="text/css">
+			body {
+				background-color: #000000;
+				margin: 0px;
+				overflow: hidden;
+			}
+
+			#info {
+				position: absolute;
+				top: 0px; width: 100%;
+				color: #ffffff;
+				padding: 5px;
+				font-family: Monospace;
+				font-size: 13px;
+				text-align: center;
+			}
+
+			a {
+				color: #FF8628;
+				text-decoration: none;
+			}
+
+			a:hover {
+				color: #FFAB4C;
+			}
+		</style>
+	</head>
+	<body>
+
+		<div id="container"></div>
+		<div id="info">
+			<a href="http://github.com/mrdoob/three.js" target="_blank">three.js</a> - point lights demo.<br />
+			Nano design by <a href="http://deltainc.nl" target="_blank">DeltaInc</a><br />
+			<small>Based on pointlights example</small>
+		</div>
+
+		<script type="text/javascript" src="../build/Three.js"></script> 
+		<script type="text/javascript" src="obj/nano/Nano.js"></script> 
+
+		<script type="text/javascript">
+
+			var camera, scene, renderer,
+			particle1, particle2, particle2,
+			light1, light2, light3,
+			object;
+
+			init();
+			setInterval( loop, 1000 / 60 );
+
+			function init() {
+
+				var container = document.getElementById( 'container' );
+
+				camera = new THREE.Camera( 65, window.innerWidth / window.innerHeight, 1, 1000 );
+				camera.position.z = 100;
+
+				scene = new THREE.Scene();
+
+				object = new THREE.Mesh( new Nano(), new THREE.MeshLambertMaterial( { color: 0xffffff, shading: THREE.FlatShading } ) );
+				object.overdraw = true;
+				object.scale = new THREE.Vector3(.25,.25,.25);
+				scene.addObject( object );
+
+				particle1 = new THREE.Particle( new THREE.ParticleCircleMaterial( { color: 0xFC0007 } ) );
+				particle1.scale.x = particle1.scale.y = particle1.scale.z = 0.5;
+				scene.addObject( particle1 );
+
+				particle2 = new THREE.Particle( new THREE.ParticleCircleMaterial( { color: 0xC8EBF1 } ) );
+				particle2.scale.x = particle2.scale.y = particle2.scale.z = 0.5;
+				scene.addObject( particle2 );
+
+				particle3 = new THREE.Particle( new THREE.ParticleCircleMaterial( { color: 0xFE8101 } ) );
+				particle3.scale.x = particle3.scale.y = particle3.scale.z = 0.5;
+				scene.addObject( particle3 );
+
+				scene.addLight( new THREE.AmbientLight( 0x00020 ) );
+				
+				light1 = new THREE.PointLight( 0xFC0007 );
+				scene.addLight( light1 );
+
+				light2 = new THREE.PointLight( 0xC8EBF1 );
+				scene.addLight( light2 );
+
+				light3 = new THREE.PointLight( 0xFE8101 );
+				scene.addLight( light3 );
+
+				renderer = new THREE.CanvasRenderer();
+				renderer.setSize( window.innerWidth, window.innerHeight );
+				container.appendChild( renderer.domElement );
+
+			}
+
+			function loop() {
+
+				var time = new Date().getTime() * 0.0005;
+
+				object.rotation.y -= 0.01;
+
+				particle1.position.x = Math.sin( time * 0.7 ) * 30;
+				particle1.position.y = Math.cos( time * 0.5 ) * 40;
+				particle1.position.z = Math.cos( time * 0.3 ) * 30;
+
+				light1.position.x = particle1.position.x;
+				light1.position.y = particle1.position.y;
+				light1.position.z = particle1.position.z;
+
+				particle2.position.x = Math.cos( time * 0.3 ) * 30;
+				particle2.position.y = Math.sin( time * 0.5 ) * 40;
+				particle2.position.z = Math.sin( time * 0.7 ) * 30;
+
+				light2.position.x = particle2.position.x;
+				light2.position.y = particle2.position.y;
+				light2.position.z = particle2.position.z;
+
+				particle3.position.x = Math.sin( time * 0.7 ) * 30;
+				particle3.position.y = Math.cos( time * 0.3 ) * 40;
+				particle3.position.z = Math.sin( time * 0.5 ) * 30;
+
+				light3.position.x = particle3.position.x;
+				light3.position.y = particle3.position.y;
+				light3.position.z = particle3.position.z;
+
+				renderer.render(scene, camera);
+
+			}
+
+		</script>
+	</body>
+</html>

+ 173 - 0
examples/c4d_dice.html

@@ -0,0 +1,173 @@
+<!DOCTYPE HTML>
+<html lang="en">
+	<head>
+		<title>three.js - geometry - c4d mesh</title>
+		<meta charset="utf-8">
+		<meta name="viewport" content="width=device-width; initial-scale=1.0; maximum-scale=1.0; user-scalable=0;"/>
+		<style type="text/css">
+			body {
+				font-family: Monospace;
+				background-color: #f0f0f0;
+				margin: 0px;
+				overflow: hidden;
+			}
+		</style>
+	</head>
+	<body>
+
+		<script type="text/javascript" src="../build/Three.js"></script>
+		<script type="text/javascript" src="geometry/Dice.js"></script>
+		<script type="text/javascript" src="js/Stats.js"></script>
+
+		<script type="text/javascript">
+	//*
+			var SCREEN_WIDTH = window.innerWidth;
+			var SCREEN_HEIGHT = window.innerHeight;
+
+			var container;
+			var stats;
+
+			var camera;
+			var scene;
+			var renderer;
+
+			var model,material;
+
+			var targetRotation = 0;
+			var targetRotationOnMouseDown = 0;
+
+			var mouseX = 0;
+			var mouseXOnMouseDown = 0;
+			var mouseY = 0;
+
+			var windowHalfX = window.innerWidth / 2;
+			var windowHalfY = window.innerHeight / 2;
+
+			init();
+			setInterval(loop, 1000/60);
+
+			function init() {
+
+				container = document.createElement('div');
+				document.body.appendChild(container);
+
+				var info = document.createElement('div');
+				info.style.position = 'absolute';
+				info.style.top = '10px';
+				info.style.width = '100%';
+				info.style.textAlign = 'center';
+				info.innerHTML = 'Drag to spin';
+				container.appendChild(info);
+
+				camera = new THREE.Camera( 70, SCREEN_WIDTH / SCREEN_HEIGHT, 1, 10000 );
+				camera.position.y = 150;
+				camera.position.z = 500;
+				camera.target.position.y = 50;
+
+				scene = new THREE.Scene();
+
+				//model
+				model = new THREE.Mesh( new Dice(), new THREE.MeshBasicMaterial( { map: loadImage( 'geometry/dice.gif' ) } ) );
+				model.rotation.x = Math.PI * .5;
+				model.scale = new THREE.Vector3(.75,.75,.75);
+				scene.addObject(model);
+
+				renderer = new THREE.CanvasRenderer();
+				renderer.setSize( SCREEN_WIDTH, SCREEN_HEIGHT );
+
+				container.appendChild( renderer.domElement );
+
+				stats = new Stats();
+				stats.domElement.style.position = 'absolute';
+				stats.domElement.style.top = '0px';
+				container.appendChild( stats.domElement );
+
+				document.addEventListener( 'mousedown', onDocumentMouseDown, false );
+				document.addEventListener( 'touchstart', onDocumentTouchStart, false );
+				document.addEventListener( 'touchmove', onDocumentTouchMove, false );
+			}
+
+			//
+
+			function onDocumentMouseDown( event ) {
+
+				event.preventDefault();
+
+				document.addEventListener( 'mousemove', onDocumentMouseMove, false );
+				document.addEventListener( 'mouseup', onDocumentMouseUp, false );
+				document.addEventListener( 'mouseout', onDocumentMouseOut, false );
+
+				mouseXOnMouseDown = event.clientX - windowHalfX;
+				targetRotationOnMouseDown = targetRotation;
+			}
+
+			function onDocumentMouseMove( event ) {
+
+				mouseX = event.clientX - windowHalfX;
+				mouseY = event.clientY - windowHalfY;
+
+				targetRotation = targetRotationOnMouseDown + ( mouseX - mouseXOnMouseDown ) * 0.02;
+			}
+
+			function onDocumentMouseUp( event ) {
+
+				document.removeEventListener( 'mousemove', onDocumentMouseMove, false );
+				document.removeEventListener( 'mouseup', onDocumentMouseUp, false );
+				document.removeEventListener( 'mouseout', onDocumentMouseOut, false );
+			}
+
+			function onDocumentMouseOut( event ) {
+
+				document.removeEventListener( 'mousemove', onDocumentMouseMove, false );
+				document.removeEventListener( 'mouseup', onDocumentMouseUp, false );
+				document.removeEventListener( 'mouseout', onDocumentMouseOut, false );
+			}
+
+			function onDocumentTouchStart( event ) {
+
+				if ( event.touches.length == 1 ) {
+
+					event.preventDefault();
+
+					mouseXOnMouseDown = event.touches[ 0 ].pageX - windowHalfX;
+					targetRotationOnMouseDown = targetRotation;
+
+				}
+			}
+
+			function onDocumentTouchMove( event ) {
+
+				if ( event.touches.length == 1 ) {
+
+					event.preventDefault();
+
+					mouseX = event.touches[ 0 ].pageX - windowHalfX;
+					targetRotation = targetRotationOnMouseDown + ( mouseX - mouseXOnMouseDown ) * 0.05;
+
+				}
+			}
+
+			//
+
+			function loop() {
+				model.rotation.z += ( targetRotation - model.rotation.z ) * 0.05;
+
+				renderer.render(scene, camera);
+				stats.update();
+			}
+			function loadImage( path ) {
+
+				var image = document.createElement( 'img' );
+				var texture = new THREE.Texture( image, THREE.UVMapping )
+
+				image.onload = function () { texture.loaded = true; };
+				image.src = path;
+
+				return texture;
+
+			}
+
+		</script>
+
+	</body>
+</html>

+ 190 - 0
examples/c4d_dodeca.html

@@ -0,0 +1,190 @@
+<!DOCTYPE HTML>
+<html lang="en">
+	<head>
+		<title>three.js - geometry - c4d mesh</title>
+		<meta charset="utf-8">
+		<meta name="viewport" content="width=device-width; initial-scale=1.0; maximum-scale=1.0; user-scalable=0;"/>
+		<style type="text/css">
+			body {
+				font-family: Monospace;
+				background-color: #f0f0f0;
+				margin: 0px;
+				overflow: hidden;
+			}
+		</style>
+	</head>
+	<body>
+
+		<script type="text/javascript" src="../build/Three.js"></script>
+		<script type="text/javascript" src="geometry/DodecaEdges.js"></script>
+		<script type="text/javascript" src="js/Stats.js"></script>
+
+		<script type="text/javascript">
+	//*
+			var SCREEN_WIDTH = window.innerWidth;
+			var SCREEN_HEIGHT = window.innerHeight;
+
+			var container;
+			var stats;
+
+			var camera;
+			var scene;
+			var renderer;
+
+			var model,model2,model3,material;
+
+			var targetRotation = 0;
+			var targetRotationOnMouseDown = 0;
+
+			var mouseX = 0;
+			var mouseXOnMouseDown = 0;
+
+			var windowHalfX = window.innerWidth / 2;
+			var windowHalfY = window.innerHeight / 2;
+
+			init();
+			setInterval(loop, 1000/60);
+
+			function init() {
+
+				container = document.createElement('div');
+				document.body.appendChild(container);
+
+				var info = document.createElement('div');
+				info.style.position = 'absolute';
+				info.style.top = '10px';
+				info.style.width = '100%';
+				info.style.textAlign = 'center';
+				info.innerHTML = 'Drag to spin dodecahedrons';
+				container.appendChild(info);
+
+				camera = new THREE.Camera( 70, SCREEN_WIDTH / SCREEN_HEIGHT, 1, 10000 );
+				camera.position.y = 350;
+				camera.position.z = 750;
+				camera.target.position.y = 150;
+
+				scene = new THREE.Scene();
+
+				//model
+				var geometry = new DodecaEdges();
+				for (var i = 0; i < geometry.faces.length; i++) geometry.faces[i].material = [ new THREE.MeshBasicMaterial( {color:Math.random() * 0xffffff} ) ];
+				model = new THREE.Mesh( geometry, new THREE.MeshFaceMaterial());
+				var s = 3;
+				model.scale = new THREE.Vector3(s,s,s);
+				
+				
+				model2 = new THREE.Mesh( geometry, new THREE.MeshFaceMaterial());
+				model2.rotation.x = Math.PI;
+				model2.scale = new THREE.Vector3(s*1.610833,s*1.610833,s*1.610833);
+				model3 = new THREE.Mesh( geometry, new THREE.MeshFaceMaterial());
+				model3.scale = new THREE.Vector3(s*3.2216,s*3.2216,s*3.2216);
+				
+				
+				scene.addObject(model);
+				scene.addObject(model3);
+				scene.addObject(model2);
+				
+				
+				renderer = new THREE.CanvasRenderer();
+				renderer.setSize( SCREEN_WIDTH, SCREEN_HEIGHT );
+
+				container.appendChild( renderer.domElement );
+
+				stats = new Stats();
+				stats.domElement.style.position = 'absolute';
+				stats.domElement.style.top = '0px';
+				container.appendChild( stats.domElement );
+
+				document.addEventListener( 'mousedown', onDocumentMouseDown, false );
+				document.addEventListener( 'touchstart', onDocumentTouchStart, false );
+				document.addEventListener( 'touchmove', onDocumentTouchMove, false );
+			}
+
+			//
+
+			function onDocumentMouseDown( event ) {
+
+				event.preventDefault();
+
+				document.addEventListener( 'mousemove', onDocumentMouseMove, false );
+				document.addEventListener( 'mouseup', onDocumentMouseUp, false );
+				document.addEventListener( 'mouseout', onDocumentMouseOut, false );
+
+				mouseXOnMouseDown = event.clientX - windowHalfX;
+				targetRotationOnMouseDown = targetRotation;
+			}
+
+			function onDocumentMouseMove( event ) {
+
+				mouseX = event.clientX - windowHalfX;
+
+				targetRotation = targetRotationOnMouseDown + ( mouseX - mouseXOnMouseDown ) * 0.02;
+			}
+
+			function onDocumentMouseUp( event ) {
+
+				document.removeEventListener( 'mousemove', onDocumentMouseMove, false );
+				document.removeEventListener( 'mouseup', onDocumentMouseUp, false );
+				document.removeEventListener( 'mouseout', onDocumentMouseOut, false );
+			}
+
+			function onDocumentMouseOut( event ) {
+
+				document.removeEventListener( 'mousemove', onDocumentMouseMove, false );
+				document.removeEventListener( 'mouseup', onDocumentMouseUp, false );
+				document.removeEventListener( 'mouseout', onDocumentMouseOut, false );
+			}
+
+			function onDocumentTouchStart( event ) {
+
+				if ( event.touches.length == 1 ) {
+
+					event.preventDefault();
+
+					mouseXOnMouseDown = event.touches[ 0 ].pageX - windowHalfX;
+					targetRotationOnMouseDown = targetRotation;
+
+				}
+			}
+
+			function onDocumentTouchMove( event ) {
+
+				if ( event.touches.length == 1 ) {
+
+					event.preventDefault();
+
+					mouseX = event.touches[ 0 ].pageX - windowHalfX;
+					targetRotation = targetRotationOnMouseDown + ( mouseX - mouseXOnMouseDown ) * 0.05;
+
+				}
+			}
+
+			//
+
+			function loop() {
+
+				model3.rotation.y = model2.rotation.y = model.rotation.y += ( targetRotation - model.rotation.y ) * 0.05;
+
+				renderer.render(scene, camera);
+				stats.update();
+			}
+			function initBitmapMaterial(url) {
+
+				texture = document.createElement( 'canvas' );
+				texture.width = 128;
+				texture.height = 128;
+
+				material = new THREE.MeshBitmapMaterial( texture );
+
+				var temp = new Image();
+				temp.onload = function () {
+					material.bitmap = this;
+					renderer.render(scene, camera);
+				};
+				temp.src = url;
+			}
+
+		</script>
+
+	</body>
+</html>

BIN
examples/geometry/.DS_Store


+ 162 - 0
examples/geometry/BotArmL.js

@@ -0,0 +1,162 @@
+var BotArmL = function () {
+
+	var scope = this;
+
+	THREE.Geometry.call(this);
+
+	v( 92.491638, 127.223816, -37.000000 );
+	v( 92.491638, 21.679474, -37.000000 );
+	v( 138.491638, 127.223816, -37.000000 );
+	v( 138.491638, 21.679474, -37.000000 );
+	v( 138.491638, 127.223816, 37.000000 );
+	v( 138.491638, 21.679474, 37.000000 );
+	v( 92.491638, 127.223816, 37.000000 );
+	v( 92.491638, 21.679474, 37.000000 );
+	v( 92.491638, 192.692810, -37.000000 );
+	v( 138.491638, 192.692810, -37.000000 );
+	v( 138.491638, 192.692810, 37.000000 );
+	v( 92.491638, 192.692810, 37.000000 );
+	v( 138.491638, 192.692810, 26.723249 );
+	v( 138.491638, 127.223816, 26.723249 );
+	v( 150.491623, 204.761200, -26.723249 );
+	v( 138.491638, 192.692810, -26.723249 );
+	v( 111.229446, 192.692810, 26.723249 );
+	v( 111.229446, 192.692810, -26.723249 );
+	v( 150.491623, 36.327454, -26.825705 );
+	v( 138.491638, 127.223816, -26.723249 );
+	v( 150.491623, 204.761200, 26.723249 );
+	v( 111.229446, 204.761200, 26.723249 );
+	v( 150.491623, 36.327454, 26.825705 );
+	v( 138.491638, 36.327454, -26.825705 );
+	v( 138.491638, 36.327454, 26.825705 );
+	v( 111.229446, 204.761200, -26.723249 );
+	v( 92.441467, 21.679474, -26.500002 );
+	v( 123.675186, 21.679474, -26.500002 );
+	v( 123.675186, 21.679474, 26.500002 );
+	v( 92.441467, 21.679474, 26.500002 );
+	v( 92.441467, -36.918777, -26.500002 );
+	v( 123.675186, -6.918777, -26.500002 );
+	v( 123.675186, -6.918777, 26.500002 );
+	v( 92.441467, -36.918777, 26.500002 );
+
+	f4( 2, 3, 1, 0, 0.000000, 0.000000, 1.000000 );
+	uv( 1.000000, 1.000000, 1.000000, 0.000000, 0.000000, 0.000000, 0.000000, 1.000000);
+	f4( 11, 6, 11, 6, 0.000000, 0.000000, 1.000000 );
+	uv( 0.000000, 1.000000, 1.000000, 1.000000, 0.000000, 1.000000, 1.000000, 1.000000);
+	f4( 6, 7, 5, 4, 0.000000, 0.000000, 1.000000 );
+	uv( 1.000000, 1.000000, 1.000000, 0.000000, 0.000000, 0.000000, 0.000000, 1.000000);
+	f4( 0, 1, 7, 6, 0.000000, 0.000000, 1.000000 );
+	uv( 1.000000, 1.000000, 1.000000, 0.000000, 0.000000, 0.000000, 0.000000, 1.000000);
+	f4( 31, 32, 33, 30, 0.000000, 0.000000, 0.000000 );
+	uv( 0.834036, 0.834036, 0.834036, 0.165964, 0.165964, 0.165964, 0.165964, 0.834036);
+	f4( 2, 19, 23, 3, 0.000000, 0.000000, 0.000000 );
+	uv( 0.000000, 1.000000, 1.000000, 1.000000, 1.000000, 0.000000, 0.000000, 0.000000);
+	f4( 4, 10, 11, 6, 0.000000, 0.000000, 0.000000 );
+	uv( 1.000000, 1.000000, 1.000000, 1.000000, 0.000000, 1.000000, 0.000000, 1.000000);
+	f4( 12, 10, 4, 13, 0.000000, 0.000000, 0.000000 );
+	uv( 0.000000, 1.000000, 1.000000, 1.000000, 1.000000, 0.000000, 0.000000, 0.000000);
+	f4( 0, 8, 9, 2, 0.000000, 0.000000, -1.000000 );
+	uv( 0.000000, 0.000000, 0.000000, 0.000000, 1.000000, 0.000000, 1.000000, 0.000000);
+	f4( 6, 11, 8, 0, 0.000000, 0.000000, -1.000000 );
+	uv( 0.000000, 1.000000, 0.000000, 1.000000, 0.000000, 0.000000, 0.000000, 0.000000);
+	f4( 9, 15, 19, 2, 0.000000, 0.000000, -1.000000 );
+	uv( 0.000000, 1.000000, 1.000000, 1.000000, 1.000000, 0.000000, 0.000000, 0.000000);
+	f4( 13, 4, 5, 24, 0.000000, 0.000000, -1.000000 );
+	uv( 0.000000, 1.000000, 1.000000, 1.000000, 1.000000, 0.000000, 0.000000, 0.000000);
+	f4( 25, 21, 20, 14, 1.000000, 0.000000, 0.000000 );
+	uv( 0.000000, 1.000000, 1.000000, 1.000000, 1.000000, 0.000000, 0.000000, 0.000000);
+	f4( 17, 8, 11, 16, 1.000000, 0.000000, 0.000000 );
+	uv( 0.000000, 1.000000, 1.000000, 1.000000, 1.000000, 0.000000, 0.000000, 0.000000);
+	f4( 21, 16, 12, 20, 1.000000, 0.000000, 0.000000 );
+	uv( 0.000000, 0.000000, 1.000000, 0.000000, 1.000000, 1.000000, 0.000000, 1.000000);
+	f4( 8, 17, 15, 9, 1.000000, 0.000000, 0.000000 );
+	uv( 0.000000, 0.000000, 1.000000, 0.000000, 1.000000, 1.000000, 0.000000, 1.000000);
+	f4( 14, 20, 22, 18, -0.919978, -0.391970, 0.000000 );
+	uv( 0.000000, 1.000000, 1.000000, 1.000000, 1.000000, 0.000000, 0.000000, 0.000000);
+	f4( 23, 18, 22, 24, -0.919978, -0.391970, 0.000000 );
+	uv( 0.000000, 1.000000, 1.000000, 1.000000, 1.000000, 0.000000, 0.000000, 0.000000);
+	f4( 16, 21, 25, 17, -0.692720, -0.721207, 0.000000 );
+	uv( 0.000000, 1.000000, 1.000000, 1.000000, 1.000000, 0.000000, 0.000000, 0.000000);
+	f4( 12, 24, 22, 20, -0.692720, -0.721207, 0.000000 );
+	uv( 0.000000, 0.000000, 1.000000, 0.000000, 1.000000, 1.000000, 0.000000, 1.000000);
+	f4( 12, 16, 11, 10, -1.000000, 0.000000, 0.000000 );
+	uv( 0.000000, 1.000000, 1.000000, 1.000000, 1.000000, 0.000000, 0.000000, 0.000000);
+	f4( 23, 24, 5, 3, -1.000000, 0.000000, 0.000000 );
+	uv( 0.000000, 1.000000, 1.000000, 1.000000, 1.000000, 0.000000, 0.000000, 0.000000);
+	f4( 14, 15, 17, 25, -1.000000, 0.000000, 0.000000 );
+	uv( 0.000000, 1.000000, 1.000000, 1.000000, 1.000000, 0.000000, 0.000000, 0.000000);
+	f4( 15, 14, 18, 23, -1.000000, 0.000000, 0.000000 );
+	uv( 0.000000, 1.000000, 1.000000, 1.000000, 1.000000, 0.000000, 0.000000, 0.000000);
+	f4( 3, 27, 26, 1, 0.000000, 0.000000, -1.000000 );
+	uv( 1.000000, 1.000000, 0.834036, 0.834036, 0.165964, 0.834036, 0.000000, 1.000000);
+	f4( 5, 28, 27, 3, 0.000000, 0.000000, -1.000000 );
+	uv( 1.000000, 0.000000, 0.834036, 0.165964, 0.834036, 0.834036, 1.000000, 1.000000);
+	f4( 7, 29, 28, 5, 0.000000, 0.000000, -1.000000 );
+	uv( 0.000000, 0.000000, 0.165964, 0.165964, 0.834036, 0.165964, 1.000000, 0.000000);
+	f4( 1, 26, 29, 7, 0.000000, 0.000000, -1.000000 );
+	uv( 0.000000, 1.000000, 0.165964, 0.834036, 0.165964, 0.165964, 0.000000, 0.000000);
+	f4( 27, 31, 30, 26, -1.000000, 0.000000, 0.000000 );
+	uv( 0.834036, 0.834036, 0.834036, 0.834036, 0.165964, 0.834036, 0.165964, 0.834036);
+	f4( 28, 32, 31, 27, -1.000000, 0.000000, 0.000000 );
+	uv( 0.834036, 0.165964, 0.834036, 0.165964, 0.834036, 0.834036, 0.834036, 0.834036);
+	f4( 29, 33, 32, 28, -1.000000, 0.000000, 0.000000 );
+	uv( 0.165964, 0.165964, 0.165964, 0.165964, 0.834036, 0.165964, 0.834036, 0.165964);
+	f4( 26, 30, 33, 29, -1.000000, 0.000000, 0.000000 );
+	uv( 0.165964, 0.834036, 0.165964, 0.834036, 0.165964, 0.165964, 0.165964, 0.165964);
+
+	this.computeCentroids();
+	this.computeNormals(true);
+
+	scope.colors = {};
+	scope.selections = {};
+	scope.selections["c1"] = [1, 12, 14, 16, 17, 18, 19, 22, 23, 27];
+	scope.selections["c2"] = [0, 2, 3, 4, 5, 11, 21, 24, 25, 26, 28, 29, 30, 31];
+	scope.selections["c3"] = [6, 7, 8, 9, 10, 13, 15, 20];
+	scope.colors["c2"] = 0x028fd4;
+	scope.colors["c3"] = 0xe0dc0a;
+	scope.colors["c1"] = 0x000000;
+
+	scope.autoColor = function(){
+		for(var s in this.selections){
+			for(var i = 0 ; i < this.selections[s].length; i++) this.faces[this.selections[s][i]].material = [new THREE.MeshBasicMaterial({color:this.colors[s]})];
+		}
+	}
+
+	scope.getPosition = function(){	return new THREE.Vector3(0.00138092041015625, -167.945556640625, 33.943828582763672);	}
+
+	scope.getRotation = function(){	return new THREE.Vector3(0.0, 0.0, 0.0);	}
+
+	scope.getScale = function(){	return new THREE.Vector3(0.5, 0.5, 0.5);	}
+
+	function v( x, y, z ) {
+
+		scope.vertices.push( new THREE.Vertex( new THREE.Vector3( x, y, z ) ) );
+
+	}
+
+	function f3( a, b, c, nx, ny, nz ) {
+
+		scope.faces.push( new THREE.Face3( a, b, c, nx && ny && nz ? new THREE.Vector3( nx, ny, nz ) : null ) );
+
+	}
+
+	function f4( a, b, c, d, nx, ny, nz ) {
+
+		scope.faces.push( new THREE.Face4( a, b, c, d, nx && ny && nz ? new THREE.Vector3( nx, ny, nz ) : null ) );
+
+	}
+
+	function uv( u1, v1, u2, v2, u3, v3, u4, v4 ) {
+
+		var uv = [];
+		uv.push( new THREE.UV( u1, v1 ) );
+		uv.push( new THREE.UV( u2, v2 ) );
+		uv.push( new THREE.UV( u3, v3 ) );
+		if ( u4 && v4 ) uv.push( new THREE.UV( u4, v4 ) );
+		scope.uvs.push( uv );
+	}
+
+}
+
+BotArmL.prototype = new THREE.Geometry();
+BotArmL.prototype.constructor = BotArmL;

+ 190 - 0
examples/geometry/BotArmR.js

@@ -0,0 +1,190 @@
+var BotArmR = function () {
+
+	var scope = this;
+
+	THREE.Geometry.call(this);
+
+	v( -91.270126, 69.073563, -37.000000 );
+	v( -91.270126, 23.073559, -37.000000 );
+	v( -137.270111, 69.073563, -37.000000 );
+	v( -137.270111, 23.073559, -37.000000 );
+	v( -137.270111, 69.073563, 37.000000 );
+	v( -137.270111, 23.073559, 37.000000 );
+	v( -91.270126, 69.073563, 37.000000 );
+	v( -91.270126, 23.073559, 37.000000 );
+	v( -137.270111, 69.073563, 8.448944 );
+	v( -91.270126, 69.073563, 8.448944 );
+	v( -91.270126, 191.377396, -37.000000 );
+	v( -137.270111, 191.377396, -37.000000 );
+	v( -137.270111, 191.377396, 8.448944 );
+	v( -91.270126, 191.377396, 8.448944 );
+	v( -122.331985, 69.073563, 31.323776 );
+	v( -104.416565, 69.073563, 31.323776 );
+	v( -122.331985, 69.073563, 13.050186 );
+	v( -104.416565, 69.073563, 13.050186 );
+	v( -122.331985, 139.273560, 31.323776 );
+	v( -104.416565, 139.273560, 31.323776 );
+	v( -122.331985, 139.273560, 13.050186 );
+	v( -104.416565, 139.273560, 13.050186 );
+	v( -122.331985, 147.773560, 31.323776 );
+	v( -104.416565, 147.773560, 31.323776 );
+	v( -122.331985, 147.773560, 13.050186 );
+	v( -104.416565, 147.773560, 13.050186 );
+	v( -122.331985, 157.473557, 31.323776 );
+	v( -104.416565, 157.473557, 31.323776 );
+	v( -122.331985, 157.473557, 13.050186 );
+	v( -104.416565, 157.473557, 13.050186 );
+	v( -122.331985, 201.373550, 31.323776 );
+	v( -104.416565, 201.373550, 31.323776 );
+	v( -122.331985, 201.373550, 13.050186 );
+	v( -104.416565, 201.373550, 13.050186 );
+	v( -91.401825, 23.073559, -26.612669 );
+	v( -122.325165, 23.073559, -26.612669 );
+	v( -122.325165, 23.073559, 26.612663 );
+	v( -91.401825, 23.073559, 26.612663 );
+	v( -91.401825, -36.826431, -26.612669 );
+	v( -122.325165, -6.826431, -26.612669 );
+	v( -122.325165, -6.826431, 26.612663 );
+	v( -91.401825, -36.826431, 26.612663 );
+
+	f4( 1, 3, 2, 0, 0.000000, 0.000000, 1.000000 );
+	uv( 0.000000, 0.000000, 1.000000, 0.000000, 1.000000, 1.000000, 0.000000, 1.000000);
+	f4( 3, 5, 8, 2, 0.000000, 0.000000, 1.000000 );
+	uv( 0.000000, 0.000000, 1.000000, 0.000000, 0.500000, 1.000000, 0.000000, 1.000000);
+	f4( 5, 7, 6, 4, 0.000000, 0.000000, 1.000000 );
+	uv( 0.000000, 0.000000, 1.000000, 0.000000, 1.000000, 1.000000, 0.000000, 1.000000);
+	f4( 9, 7, 1, 0, 0.000000, 0.000000, 1.000000 );
+	uv( 0.500000, 1.000000, 0.000000, 0.000000, 1.000000, 0.000000, 1.000000, 1.000000);
+	f4( 41, 40, 39, 38, 1.000000, 0.000000, 0.000000 );
+	uv( 0.140674, 0.140674, 0.859326, 0.140674, 0.859326, 0.859326, 0.140674, 0.859326);
+	f4( 10, 11, 12, 13, 1.000000, 0.000000, 0.000000 );
+	uv( 0.000000, 0.000000, 1.000000, 0.000000, 1.000000, 0.500000, 0.000000, 0.500000);
+	f3( 5, 4, 8, 1.000000, 0.000000, 0.000000 );
+	uv( 1.000000, 0.000000, 1.000000, 1.000000, 0.500000, 1.000000);
+	f3( 7, 9, 6, 1.000000, 0.000000, 0.000000 );
+	uv( 0.000000, 0.000000, 0.500000, 1.000000, 0.000000, 1.000000);
+	f4( 30, 31, 33, 32, 0.000000, 0.000000, -1.000000 );
+	uv( 0.809245, 0.904623, 0.190755, 0.904623, 0.190755, 0.595377, 0.809245, 0.595377);
+	f4( 13, 12, 8, 9, 0.000000, 0.000000, -1.000000 );
+	uv( 0.000000, 0.500000, 1.000000, 0.500000, 1.000000, 0.500000, 0.000000, 0.500000);
+	f4( 12, 11, 2, 8, 0.000000, 0.000000, -1.000000 );
+	uv( 1.000000, 0.500000, 1.000000, 0.000000, 1.000000, 0.000000, 1.000000, 0.500000);
+	f4( 11, 10, 0, 2, 0.000000, 0.000000, -1.000000 );
+	uv( 1.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 1.000000, 0.000000);
+	f4( 10, 13, 9, 0, -1.000000, 0.000000, 0.000000 );
+	uv( 0.000000, 0.000000, 0.000000, 0.500000, 0.000000, 0.500000, 0.000000, 0.000000);
+	f4( 16, 17, 9, 8, -1.000000, 0.000000, 0.000000 );
+	uv( 0.500000, 1.000000, 1.000000, 1.000000, 0.000000, 1.000000, 0.500000, 1.000000);
+	f4( 17, 15, 6, 9, -1.000000, 0.000000, 0.000000 );
+	uv( 1.000000, 0.000000, 1.000000, 1.000000, 0.000000, 1.000000, 0.000000, 0.000000);
+	f4( 15, 14, 4, 6, -1.000000, 0.000000, 0.000000 );
+	uv( 1.000000, 0.000000, 0.924485, 0.924485, 1.000000, 1.000000, 0.000000, 0.000000);
+	f4( 14, 16, 8, 4, 0.696310, -0.717741, 0.000000 );
+	uv( 0.924485, 0.924485, 0.500000, 1.000000, 0.500000, 1.000000, 1.000000, 1.000000);
+	f4( 20, 21, 17, 16, 0.920953, -0.389673, 0.000000 );
+	uv( 1.000000, 0.000000, 1.000000, 1.000000, 0.000000, 1.000000, 0.000000, 0.000000);
+	f4( 21, 19, 15, 17, 0.920953, -0.389673, 0.000000 );
+	uv( 1.000000, 0.000000, 1.000000, 1.000000, 0.000000, 1.000000, 0.000000, 0.000000);
+	f4( 19, 18, 14, 15, 0.696310, -0.717741, 0.000000 );
+	uv( 1.000000, 0.000000, 1.000000, 1.000000, 0.000000, 1.000000, 0.000000, 0.000000);
+	f4( 18, 20, 16, 14, 0.000000, 1.000000, 0.000000 );
+	uv( 1.000000, 0.000000, 1.000000, 1.000000, 0.000000, 1.000000, 0.000000, 0.000000);
+	f4( 24, 25, 21, 20, 0.000000, 1.000000, 0.000000 );
+	uv( 1.000000, 0.000000, 1.000000, 1.000000, 0.000000, 1.000000, 0.000000, 0.000000);
+	f4( 25, 23, 19, 21, 0.000000, 1.000000, 0.000000 );
+	uv( 1.000000, 0.000000, 1.000000, 1.000000, 0.000000, 1.000000, 0.000000, 0.000000);
+	f4( 23, 22, 18, 19, 0.000000, 1.000000, 0.000000 );
+	uv( 1.000000, 0.000000, 1.000000, 1.000000, 0.000000, 1.000000, 0.000000, 0.000000);
+	f4( 22, 24, 20, 18, 1.000000, 0.000000, 0.000000 );
+	uv( 1.000000, 0.000000, 1.000000, 1.000000, 0.000000, 1.000000, 0.000000, 0.000000);
+	f4( 28, 29, 25, 24, 1.000000, 0.000000, 0.000000 );
+	uv( 1.000000, 0.000000, 1.000000, 1.000000, 0.000000, 1.000000, 0.000000, 0.000000);
+	f4( 29, 27, 23, 25, 1.000000, 0.000000, 0.000000 );
+	uv( 1.000000, 0.000000, 1.000000, 1.000000, 0.000000, 1.000000, 0.000000, 0.000000);
+	f4( 27, 26, 22, 23, 0.000000, 0.000000, 0.000000 );
+	uv( 1.000000, 0.000000, 1.000000, 1.000000, 0.000000, 1.000000, 0.000000, 0.000000);
+	f4( 26, 28, 24, 22, -1.000000, 0.000000, 0.000000 );
+	uv( 1.000000, 0.000000, 1.000000, 1.000000, 0.000000, 1.000000, 0.000000, 0.000000);
+	f4( 32, 33, 29, 28, -1.000000, 0.000000, 0.000000 );
+	uv( 1.000000, 0.000000, 1.000000, 1.000000, 0.000000, 1.000000, 0.000000, 0.000000);
+	f4( 33, 31, 27, 29, -1.000000, -0.000000, 0.000000 );
+	uv( 1.000000, 0.000000, 1.000000, 1.000000, 0.000000, 1.000000, 0.000000, 0.000000);
+	f4( 31, 30, 26, 27, 0.000000, 0.000000, 0.000000 );
+	uv( 1.000000, 0.000000, 1.000000, 1.000000, 0.000000, 1.000000, 0.000000, 0.000000);
+	f4( 30, 32, 28, 26, 0.000000, 1.000000, 0.000000 );
+	uv( 1.000000, 0.000000, 1.000000, 1.000000, 0.000000, 1.000000, 0.000000, 0.000000);
+	f4( 34, 35, 3, 1, 0.000000, 1.000000, 0.000000 );
+	uv( 0.140674, 0.859326, 0.859326, 0.859326, 1.000000, 1.000000, 0.000000, 1.000000);
+	f4( 35, 36, 5, 3, 0.000000, 1.000000, 0.000000 );
+	uv( 0.859326, 0.859326, 0.859326, 0.140674, 1.000000, 0.000000, 1.000000, 1.000000);
+	f4( 36, 37, 7, 5, 0.000000, 1.000000, 0.000000 );
+	uv( 0.859326, 0.140674, 0.140674, 0.140674, 0.000000, 0.000000, 1.000000, 0.000000);
+	f4( 37, 34, 1, 7, 0.000000, 0.000000, -1.000000 );
+	uv( 0.140674, 0.140674, 0.140674, 0.859326, 0.000000, 1.000000, 0.000000, 0.000000);
+	f4( 38, 39, 35, 34, 0.000000, 0.000000, -1.000000 );
+	uv( 0.140674, 0.859326, 0.859326, 0.859326, 0.859326, 0.859326, 0.140674, 0.859326);
+	f4( 39, 40, 36, 35, 0.000000, 0.000000, -1.000000 );
+	uv( 0.859326, 0.859326, 0.859326, 0.140674, 0.859326, 0.140674, 0.859326, 0.859326);
+	f4( 40, 41, 37, 36, 0.000000, 0.000000, -1.000000 );
+	uv( 0.859326, 0.140674, 0.140674, 0.140674, 0.140674, 0.140674, 0.859326, 0.140674);
+	f4( 41, 38, 34, 37, 1.000000, 0.000000, 0.000000 );
+	uv( 0.140674, 0.140674, 0.140674, 0.859326, 0.140674, 0.859326, 0.140674, 0.140674);
+
+	this.computeCentroids();
+	this.computeNormals(true);
+
+	scope.colors = {};
+	scope.selections = {};
+	scope.selections["c1"] = [8, 29, 30, 31, 32];
+	scope.selections["c2"] = [0, 1, 2, 3, 4, 5, 6, 7, 9, 10, 11, 12, 13, 14, 15, 16, 25, 26, 27, 28, 33, 34, 35, 36, 37, 38, 39, 40];
+	scope.selections["c3"] = [17, 18, 19, 20];
+	scope.selections["c4"] = [21, 22, 23, 24];
+	scope.colors["c1"] = 0x000000;
+	scope.colors["c2"] = 0x028fd4;
+	scope.colors["c4"] = 0xed3537;
+	scope.colors["c3"] = 0xe0dc0a;
+
+	scope.autoColor = function(){
+		for(var s in this.selections){
+			for(var i = 0 ; i < this.selections[s].length; i++) this.faces[this.selections[s][i]].material = [new THREE.MeshBasicMaterial({color:this.colors[s]})];
+		}
+	}
+
+	scope.getPosition = function(){	return new THREE.Vector3(-0.28577423095703125, -168.17227172851562, 33.943828582763672);	}
+
+	scope.getRotation = function(){	return new THREE.Vector3(0.0, 0.0, 0.0);	}
+
+	scope.getScale = function(){	return new THREE.Vector3(0.5, 0.5, 0.5);	}
+
+	function v( x, y, z ) {
+
+		scope.vertices.push( new THREE.Vertex( new THREE.Vector3( x, y, z ) ) );
+
+	}
+
+	function f3( a, b, c, nx, ny, nz ) {
+
+		scope.faces.push( new THREE.Face3( a, b, c, nx && ny && nz ? new THREE.Vector3( nx, ny, nz ) : null ) );
+
+	}
+
+	function f4( a, b, c, d, nx, ny, nz ) {
+
+		scope.faces.push( new THREE.Face4( a, b, c, d, nx && ny && nz ? new THREE.Vector3( nx, ny, nz ) : null ) );
+
+	}
+
+	function uv( u1, v1, u2, v2, u3, v3, u4, v4 ) {
+
+		var uv = [];
+		uv.push( new THREE.UV( u1, v1 ) );
+		uv.push( new THREE.UV( u2, v2 ) );
+		uv.push( new THREE.UV( u3, v3 ) );
+		if ( u4 && v4 ) uv.push( new THREE.UV( u4, v4 ) );
+		scope.uvs.push( uv );
+	}
+
+}
+
+BotArmR.prototype = new THREE.Geometry();
+BotArmR.prototype.constructor = BotArmR;

+ 563 - 0
examples/geometry/BotLowerBody.js

@@ -0,0 +1,563 @@
+var BotLowerBody = function () {
+
+	var scope = this;
+
+	THREE.Geometry.call(this);
+
+	v( 0.000000, 8.469804, -25.455685 );
+	v( -0.000002, 8.469804, -53.022503 );
+	v( -22.512768, 4.911262, -42.781345 );
+	v( 0.000000, 8.469804, -53.022518 );
+	v( -26.144451, 8.468858, 2.540005 );
+	v( -26.144451, -5.486561, -3.559986 );
+	v( -26.367752, 23.834919, 53.022518 );
+	v( -26.367752, 23.834919, 39.052502 );
+	v( -17.997009, 23.834919, 39.052502 );
+	v( -17.997009, 23.834919, 53.022518 );
+	v( -17.997009, 19.072422, 53.022518 );
+	v( -26.367752, 19.072422, 53.022518 );
+	v( -17.997009, 19.072422, 39.052502 );
+	v( -26.367752, 19.072422, 39.052502 );
+	v( -32.601906, 19.072418, 53.022518 );
+	v( -32.601906, 19.072418, 39.052502 );
+	v( -32.601906, 14.944919, 39.057381 );
+	v( -32.601913, 0.692018, 21.599010 );
+	v( -32.601906, -10.070072, 33.337505 );
+	v( -32.601913, -10.075294, 21.599010 );
+	v( -32.601913, -10.075294, 10.738934 );
+	v( -17.937599, 14.944919, 27.697529 );
+	v( -32.601913, 0.692018, 10.738934 );
+	v( -18.905342, -16.332626, -25.448856 );
+	v( -26.143005, -23.834919, -52.991795 );
+	v( -11.643021, -20.358688, 2.540005 );
+	v( -26.311214, 14.944919, 39.052147 );
+	v( -26.144451, -16.334915, -25.448856 );
+	v( -32.601906, -5.481800, -3.559986 );
+	v( -11.646904, -20.363503, 11.185955 );
+	v( -26.311214, 14.944919, 27.697529 );
+	v( -11.646904, 14.944919, 39.057381 );
+	v( -11.646904, 19.072418, 39.052502 );
+	v( -11.646904, -23.790085, 49.733681 );
+	v( -11.646904, 19.072418, 53.022518 );
+	v( -26.144455, 2.190541, -34.722237 );
+	v( -11.646904, 0.724927, 53.022518 );
+	v( -11.646904, 14.944919, 25.074200 );
+	v( -32.601906, 0.724927, 53.022518 );
+	v( -11.646904, 0.724927, 33.337505 );
+	v( -32.601906, 0.724927, 33.337505 );
+	v( -32.601906, -10.070072, 33.337505 );
+	v( -11.646904, -10.070072, 33.337505 );
+	v( -11.646904, -10.070072, 53.022518 );
+	v( -32.601906, -10.070072, 53.022518 );
+	v( -11.646904, -23.790085, 53.022518 );
+	v( -32.601906, -23.790085, 53.022518 );
+	v( -11.646904, -23.790085, 11.189114 );
+	v( -32.601906, -23.790085, 11.189114 );
+	v( -17.937599, 14.944919, 39.052147 );
+	v( -11.646904, -23.790085, 11.189114 );
+	v( -32.601906, -20.333195, 11.185955 );
+	v( -32.601906, -23.790085, 11.189114 );
+	v( -26.311214, 14.944919, 30.315639 );
+	v( -22.530685, 8.468865, -52.991772 );
+	v( -17.937599, 14.944919, 30.315639 );
+	v( -14.892025, -20.358364, -25.448856 );
+	v( -15.268379, -20.358364, 2.509366 );
+	v( -32.601906, -20.333195, 2.540005 );
+	v( -32.601906, 14.944919, 2.540005 );
+	v( -11.646904, 14.944919, 2.540005 );
+	v( -32.601906, 14.944919, 25.074200 );
+	v( 0.000000, -23.683624, -53.018497 );
+	v( -11.646904, 14.944919, 17.658443 );
+	v( -32.601906, 14.944919, 17.658443 );
+	v( -11.657383, 14.944919, 25.079433 );
+	v( -11.646904, 7.007417, 25.074200 );
+	v( -32.591423, 14.944919, 25.079433 );
+	v( -32.601906, 7.007417, 25.074200 );
+	v( -22.518890, 4.855207, -52.991795 );
+	v( -11.646904, -20.358219, 2.540005 );
+	v( -26.144470, -16.334919, -52.991795 );
+	v( -18.893738, -20.358040, -25.448856 );
+	v( -18.905342, -16.330708, -3.596409 );
+	v( -14.929680, 8.468858, -0.557674 );
+	v( -26.142986, -23.834915, -25.448856 );
+	v( -32.601906, -20.333195, -3.559986 );
+	v( -26.144451, -5.486561, 2.540005 );
+	v( -26.144451, -16.343426, -3.559986 );
+	v( -15.080200, -20.358364, -0.541342 );
+	v( -32.601913, -0.807982, 20.099010 );
+	v( -32.601913, -8.575294, 20.099010 );
+	v( -32.601913, -8.575294, 12.238934 );
+	v( -32.601913, -0.807982, 12.238934 );
+	v( -40.329689, -0.807982, 20.099010 );
+	v( -26.144451, 2.186163, -0.521877 );
+	v( -32.601906, -23.790085, 49.733681 );
+	v( -40.329689, -8.575294, 20.099010 );
+	v( -40.329689, -8.575294, 12.238934 );
+	v( -40.329689, -0.807982, 12.238934 );
+	v( -42.499687, -0.807982, 20.099010 );
+	v( -42.499687, -8.575294, 20.099010 );
+	v( -42.499687, -8.575294, 12.238934 );
+	v( -42.499687, -0.807982, 12.238934 );
+	v( 26.143742, -20.084923, -52.991802 );
+	v( 26.144472, -5.716291, -52.991802 );
+	v( 26.144453, -5.619403, -3.559986 );
+	v( 26.144463, -5.667847, -34.707203 );
+	v( -11.840092, 8.468939, -37.809090 );
+	v( 0.000000, 8.469853, -37.806103 );
+	v( 0.000000, 8.469804, -50.109692 );
+	v( -11.840076, 8.468966, -50.082230 );
+	v( -5.924137, 8.469396, -37.807590 );
+	v( -5.913811, 8.469384, -50.095951 );
+	v( 0.000000, 8.469831, -43.957890 );
+	v( -5.918974, 8.469390, -43.951771 );
+	v( -11.840084, 8.468952, -43.945660 );
+	v( -32.601906, -10.070072, 49.734653 );
+	v( -26.132481, 14.944919, 13.080716 );
+	v( -32.601906, 19.072418, 49.748653 );
+	v( -17.997009, 19.072422, 49.748653 );
+	v( -11.646904, 19.072418, 49.748653 );
+	v( -26.367752, 19.072422, 49.748653 );
+	v( -26.367752, 23.834919, 49.748653 );
+	v( -17.997009, 23.834919, 49.748653 );
+	v( -11.646904, -10.070072, 49.734653 );
+	v( -26.144451, 8.468858, -42.781071 );
+	v( -18.893738, -20.358040, -3.632832 );
+	v( -11.646904, 0.724927, 49.790146 );
+	v( -32.601906, 0.724927, 49.790146 );
+	v( -22.530708, 8.468858, -42.781071 );
+	v( -26.144451, 8.468858, -0.533763 );
+	v( -32.601906, -5.481800, 2.540005 );
+	v( 0.000000, -23.784893, -25.662609 );
+	v( -26.144451, 4.869660, -42.781071 );
+	v( -26.144470, 4.902339, -52.991795 );
+	v( -26.132481, 14.944919, 2.540005 );
+	v( -14.936008, 8.468858, 2.540005 );
+	v( -14.935799, 14.944919, 13.080716 );
+	v( -14.935799, 14.944919, 2.540005 );
+	v( -14.923347, 8.468858, -25.594269 );
+	v( -26.143719, -20.084915, -25.448856 );
+	v( -26.143738, -20.084919, -52.991795 );
+	v( -26.144470, -5.716290, -52.991795 );
+	v( -26.144451, -5.619403, -3.559986 );
+	v( -26.144463, -5.667847, -34.707195 );
+	v( 22.512772, 4.911263, -42.781353 );
+	v( 26.144453, 8.468858, 2.540005 );
+	v( 26.144453, -5.486561, -3.559986 );
+	v( 26.367754, 23.834923, 53.022518 );
+	v( 26.367754, 23.834923, 39.052502 );
+	v( 17.997011, 23.834923, 39.052502 );
+	v( 17.997011, 23.834923, 53.022518 );
+	v( 17.997011, 19.072422, 53.022518 );
+	v( 26.367754, 19.072422, 53.022518 );
+	v( 17.997011, 19.072422, 39.052502 );
+	v( 26.367754, 19.072422, 39.052502 );
+	v( 32.601906, 19.072418, 53.022518 );
+	v( 32.601906, 19.072418, 39.052502 );
+	v( 32.601906, 14.944919, 39.057384 );
+	v( 32.601913, 0.692018, 21.599010 );
+	v( 32.601906, -10.070072, 33.337505 );
+	v( 32.601913, -10.075294, 21.599010 );
+	v( 32.601913, -10.075294, 10.738934 );
+	v( 17.937601, 14.944919, 27.697521 );
+	v( 32.601913, 0.692018, 10.738934 );
+	v( 18.905342, -16.332626, -25.448864 );
+	v( 26.143007, -23.834923, -52.991802 );
+	v( 11.643020, -20.358688, 2.540005 );
+	v( 26.311216, 14.944919, 39.052151 );
+	v( 26.144453, -16.334915, -25.448864 );
+	v( 32.601906, -5.481800, -3.559986 );
+	v( 11.646903, -20.363503, 11.185955 );
+	v( 26.311216, 14.944919, 27.697521 );
+	v( 11.646903, 14.944919, 39.057384 );
+	v( 11.646903, 19.072418, 39.052502 );
+	v( 11.646903, -23.790089, 49.733685 );
+	v( 11.646903, 19.072418, 53.022518 );
+	v( 26.144459, 2.190542, -34.722248 );
+	v( 11.646903, 0.724927, 53.022518 );
+	v( 11.646903, 14.944919, 25.074200 );
+	v( 32.601906, 0.724927, 53.022518 );
+	v( 11.646903, 0.724927, 33.337505 );
+	v( 32.601906, 0.724927, 33.337505 );
+	v( 32.601906, -10.070072, 33.337505 );
+	v( 11.646903, -10.070072, 33.337505 );
+	v( 11.646903, -10.070072, 53.022518 );
+	v( 32.601906, -10.070072, 53.022518 );
+	v( 11.646903, -23.790089, 53.022518 );
+	v( 32.601906, -23.790089, 53.022518 );
+	v( 17.937601, 14.944919, 39.052151 );
+	v( 11.646903, -23.790089, 11.189114 );
+	v( 32.601906, -20.333195, 11.185955 );
+	v( 32.601906, -23.790089, 11.189114 );
+	v( 26.311216, 14.944919, 30.315639 );
+	v( 22.530687, 8.468867, -52.991772 );
+	v( 17.937601, 14.944919, 30.315639 );
+	v( 14.892026, -20.358364, -25.448864 );
+	v( 15.268376, -20.358364, 2.509365 );
+	v( 32.601906, -20.333195, 2.540005 );
+	v( 32.601906, 14.944919, 2.540005 );
+	v( 11.646903, 14.944919, 2.540005 );
+	v( 32.601906, 14.944919, 25.074200 );
+	v( 11.646903, 14.944919, 17.658443 );
+	v( 32.601906, 14.944919, 17.658443 );
+	v( 11.657381, 14.944919, 25.079433 );
+	v( 11.646903, 7.007418, 25.074200 );
+	v( 32.591423, 14.944919, 25.079433 );
+	v( 32.601906, 7.007418, 25.074200 );
+	v( 22.518894, 4.855207, -52.991802 );
+	v( 11.646903, -20.358223, 2.540005 );
+	v( 18.893738, -20.358044, -25.448864 );
+	v( 18.905342, -16.330708, -3.596409 );
+	v( 14.929679, 8.468858, -0.557682 );
+	v( 26.142988, -23.834915, -25.448864 );
+	v( 32.601906, -20.333195, -3.559986 );
+	v( 26.144453, -5.486561, 2.540005 );
+	v( 26.144453, -16.343426, -3.559986 );
+	v( 15.080199, -20.358364, -0.541355 );
+	v( 32.601913, -0.807982, 20.099010 );
+	v( 32.601913, -8.575294, 20.099010 );
+	v( 32.601913, -8.575294, 12.238934 );
+	v( 32.601913, -0.807982, 12.238934 );
+	v( 40.329697, -0.807982, 20.099010 );
+	v( 26.144453, 2.186163, -0.521885 );
+	v( 32.601906, -23.790089, 49.733685 );
+	v( 40.329697, -8.575294, 20.099010 );
+	v( 40.329697, -8.575294, 12.238934 );
+	v( 40.329697, -0.807982, 12.238934 );
+	v( 42.499695, -0.807982, 20.099010 );
+	v( 42.499695, -8.575294, 20.099010 );
+	v( 42.499695, -8.575294, 12.238934 );
+	v( 42.499695, -0.807982, 12.238934 );
+	v( 14.935796, 14.944919, 13.080715 );
+	v( 14.935796, 14.944919, 2.540005 );
+	v( 14.923348, 8.468858, -25.594280 );
+	v( 26.143724, -20.084915, -25.448864 );
+	v( 11.840092, 8.468940, -37.809101 );
+	v( 11.840075, 8.468966, -50.082241 );
+	v( 5.924135, 8.469398, -37.807606 );
+	v( 5.913811, 8.469384, -50.095959 );
+	v( 5.918972, 8.469390, -43.951778 );
+	v( 11.840084, 8.468953, -43.945667 );
+	v( 32.601906, -10.070072, 49.734661 );
+	v( 26.132483, 14.944919, 13.080715 );
+	v( 32.601906, 19.072418, 49.748653 );
+	v( 17.997011, 19.072422, 49.748653 );
+	v( 11.646903, 19.072418, 49.748653 );
+	v( 26.367754, 19.072422, 49.748653 );
+	v( 26.367754, 23.834923, 49.748653 );
+	v( 17.997011, 23.834923, 49.748653 );
+	v( 11.646903, -10.070072, 49.734661 );
+	v( 26.144453, 8.468858, -42.781086 );
+	v( 18.893738, -20.358044, -3.632832 );
+	v( 11.646903, 0.724927, 49.790142 );
+	v( 32.601906, 0.724927, 49.790142 );
+	v( 22.530710, 8.468858, -42.781086 );
+	v( 26.144453, 8.468858, -0.533772 );
+	v( 32.601906, -5.481800, 2.540005 );
+	v( 26.144453, 4.869661, -42.781086 );
+	v( 26.144472, 4.902339, -52.991802 );
+	v( 26.132483, 14.944919, 2.540005 );
+	v( 14.936008, 8.468858, 2.540005 );
+
+	f4( 17, 19, 41, 40, 1.000000, 0.000000, -0.000000 );
+	f4( 223, 224, 191, 193, 1.000000, 0.000000, -0.000000 );
+	f4( 51, 29, 50, 52, 1.000000, 0.000000, -0.000000 );
+	f4( 87, 88, 82, 81, 1.000000, 0.000000, -0.000000 );
+	f4( 115, 43, 45, 33, 1.000000, 0.000000, -0.000000 );
+	f4( 111, 34, 36, 118, 1.000000, 0.000000, -0.000000 );
+	f4( 38, 36, 34, 14, 1.000000, 0.000000, -0.000000 );
+	f4( 0, 99, 98, 130, 1.000000, 0.000000, -0.000000 );
+	f3( 50, 29, 42, 1.000000, 0.000000, -0.000000 );
+	f4( 37, 39, 42, 66, 1.000000, 0.000000, -0.000000 );
+	f4( 29, 70, 66, 42, 1.000000, 0.000000, -0.000000 );
+	f4( 80, 81, 19, 17, 1.000000, 0.000000, -0.000000 );
+	f4( 81, 82, 20, 19, 1.000000, 0.000000, -0.000000 );
+	f4( 82, 83, 22, 20, 1.000000, 0.000000, -0.000000 );
+	f4( 112, 13, 15, 109, 1.000000, 0.000000, -0.000000 );
+	f4( 33, 50, 42, 115, 1.000000, 0.000000, -0.000000 );
+	f4( 69, 125, 124, 2, 1.000000, 0.000000, -0.000000 );
+	f4( 117, 72, 56, 79, 1.000000, 0.000000, -0.000000 );
+	f3( 25, 70, 60, 1.000000, 0.000000, -0.000000 );
+	f4( 78, 76, 28, 134, 1.000000, 0.000000, -0.000000 );
+	f4( 51, 76, 117, 57, 1.000000, 0.000000, -0.000000 );
+	f3( 131, 75, 72, 1.000000, 0.000000, -0.000000 );
+	f4( 45, 43, 44, 46, 1.000000, 0.000000, -0.000000 );
+	f4( 104, 100, 103, 105, 1.000000, 0.000000, -0.000000 );
+	f4( 28, 76, 58, 122, 1.000000, 0.000000, -0.000000 );
+	f4( 12, 49, 55, 8, 1.000000, 0.000000, -0.000000 );
+	f4( 135, 124, 125, 133, 1.000000, 0.000000, -0.000000 );
+	f4( 5, 28, 122, 77, 1.000000, 0.000000, -0.000000 );
+	f4( 51, 57, 25, 29, 1.000000, 0.000000, -0.000000 );
+	f4( 24, 62, 123, 75, 1.000000, 0.000000, -0.000000 );
+	f4( 2, 124, 116, 120, 1.000000, 0.000000, -0.000000 );
+	f3( 28, 5, 134, 1.000000, 0.000000, -0.000000 );
+	f4( 54, 69, 2, 120, 1.000000, 0.000000, -0.000000 );
+	f4( 23, 73, 78, 27, 1.000000, 0.000000, -0.000000 );
+	f4( 112, 109, 14, 11, 1.000000, 0.000000, -0.000000 );
+	f4( 119, 16, 61, 68, 1.000000, 0.000000, -0.000000 );
+	f4( 56, 72, 75, 123, 1.000000, 0.000000, -0.000000 );
+	f4( 42, 39, 40, 41, 1.000000, 0.000000, -0.000000 );
+	f4( 74, 130, 116, 121, 1.000000, 0.000000, -0.000000 );
+	f4( 23, 27, 131, 72, 1.000000, 0.000000, -0.000000 );
+	f4( 24, 125, 69, 62, 1.000000, 0.000000, -0.000000 );
+	f4( 62, 69, 54, 3, 1.000000, 0.000000, -0.000000 );
+	f4( 89, 84, 80, 83, 1.000000, 0.000000, -0.000000 );
+	f4( 193, 191, 158, 196, 1.000000, 0.000000, -0.000000 );
+	f4( 3, 54, 101, 103, 1.000000, 0.000000, -0.000000 );
+	f3( 120, 98, 106, 1.000000, 0.000000, -0.000000 );
+	f4( 169, 244, 245, 171, 1.000000, 0.000000, -0.000000 );
+	f4( 105, 103, 101, 106, 1.000000, 0.000000, -0.000000 );
+	f4( 46, 86, 33, 45, 1.000000, 0.000000, -0.000000 );
+	f4( 84, 87, 81, 80, 1.000000, 0.000000, -0.000000 );
+	f3( 103, 100, 3, 1.000000, 0.000000, -0.000000 );
+	f3( 99, 102, 98, 1.000000, 0.000000, -0.000000 );
+	f4( 86, 52, 50, 33, 1.000000, 0.000000, -0.000000 );
+	f3( 122, 58, 20, 1.000000, 0.000000, -0.000000 );
+	f4( 105, 102, 99, 104, 1.000000, 0.000000, -0.000000 );
+	f4( 120, 106, 101, 54, 1.000000, 0.000000, -0.000000 );
+	f4( 4, 77, 122, 59, 1.000000, 0.000000, -0.000000 );
+	f4( 106, 98, 102, 105, 1.000000, 0.000000, -0.000000 );
+	f4( 108, 126, 59, 64, 1.000000, 0.000000, -0.000000 );
+	f4( 109, 15, 16, 119, 1.000000, 0.000000, -0.000000 );
+	f4( 111, 32, 12, 110, 1.000000, 0.000000, -0.000000 );
+	f4( 113, 7, 13, 112, 1.000000, 0.000000, -0.000000 );
+	f4( 114, 8, 7, 113, 1.000000, 0.000000, -0.000000 );
+	f4( 114, 9, 10, 110, 1.000000, 0.000000, -0.000000 );
+	f4( 119, 40, 39, 118, 1.000000, 0.000000, -0.000000 );
+	f4( 115, 42, 41, 107, 1.000000, 0.000000, -0.000000 );
+	f4( 86, 46, 44, 107, 1.000000, 0.000000, -0.000000 );
+	f3( 119, 68, 40, 1.000000, 0.000000, -0.000000 );
+	f4( 98, 120, 116, 130, 1.000000, 0.000000, -0.000000 );
+	f4( 63, 64, 68, 66, 1.000000, 0.000000, -0.000000 );
+	f4( 83, 80, 17, 22, 1.000000, 0.000000, -0.000000 );
+	f4( 127, 4, 126, 129, 1.000000, 0.000000, -0.000000 );
+	f4( 17, 40, 68, 22, 1.000000, 0.000000, -0.000000 );
+	f4( 79, 56, 130, 74, 1.000000, 0.000000, -0.000000 );
+	f4( 58, 51, 19, 20, 1.000000, 0.000000, -0.000000 );
+	f4( 35, 116, 124, 135, 1.000000, 0.000000, -0.000000 );
+	f4( 90, 91, 87, 84, 1.000000, 0.000000, -0.000000 );
+	f4( 121, 4, 127, 74, 1.000000, 0.000000, -0.000000 );
+	f4( 76, 78, 73, 117, 1.000000, 0.000000, -0.000000 );
+	f4( 132, 24, 75, 131, 1.000000, 0.000000, -0.000000 );
+	f4( 129, 60, 25, 57, 1.000000, 0.000000, -0.000000 );
+	f4( 85, 121, 116, 35, 1.000000, 0.000000, -0.000000 );
+	f3( 117, 79, 57, 1.000000, 0.000000, -0.000000 );
+	f4( 57, 79, 74, 127, 1.000000, 0.000000, -0.000000 );
+	f4( 128, 129, 126, 108, 1.000000, 0.000000, -0.000000 );
+	f4( 135, 133, 132, 131, 1.000000, 0.000000, -0.000000 );
+	f4( 27, 35, 135, 131, 1.000000, 0.000000, -0.000000 );
+	f4( 78, 5, 35, 27, 1.000000, 0.000000, -0.000000 );
+	f4( 77, 85, 35, 5, 1.000000, 0.000000, -0.000000 );
+	f3( 190, 137, 251, 1.000000, 0.000000, -0.000000 );
+	f4( 91, 92, 88, 87, 1.000000, 0.000000, -0.000000 );
+	f4( 4, 121, 85, 77, 1.000000, 0.000000, -0.000000 );
+	f4( 0, 130, 56, 123, 1.000000, 0.000000, -0.000000 );
+	f4( 26, 16, 15, 13, 1.000000, 0.000000, -0.000000 );
+	f4( 53, 26, 13, 7, 1.000000, 0.000000, -0.000000 );
+	f4( 23, 72, 117, 73, 1.000000, 0.000000, -0.000000 );
+	f4( 14, 109, 119, 38, 1.000000, 0.000000, -0.000000 );
+	f4( 88, 89, 83, 82, 1.000000, 0.000000, -0.000000 );
+	f4( 122, 20, 22, 59, 1.000000, 0.000000, -0.000000 );
+	f4( 7, 8, 55, 53, 1.000000, 0.000000, -0.000000 );
+	f4( 111, 110, 10, 34, 1.000000, 0.000000, -0.000000 );
+	f4( 63, 128, 108, 64, 1.000000, 0.000000, -0.000000 );
+	f4( 30, 53, 55, 21, 1.000000, 0.000000, -0.000000 );
+	f4( 19, 51, 52, 41, 1.000000, 0.000000, -0.000000 );
+	f4( 113, 112, 11, 6, 1.000000, 0.000000, -0.000000 );
+	f3( 18, 19, 20, 1.000000, 0.000000, -0.000000 );
+	f4( 114, 113, 6, 9, 1.000000, 0.000000, -0.000000 );
+	f4( 118, 31, 32, 111, 1.000000, 0.000000, -0.000000 );
+	f4( 118, 39, 37, 31, 1.000000, 0.000000, -0.000000 );
+	f4( 64, 59, 22, 68, 1.000000, 0.000000, -0.000000 );
+	f4( 10, 9, 6, 11, 1.000000, 0.000000, -0.000000 );
+	f4( 92, 93, 89, 88, 1.000000, 0.000000, -0.000000 );
+	f4( 93, 90, 84, 89, 1.000000, 0.000000, -0.000000 );
+	f4( 220, 221, 222, 219, 1.000000, 0.000000, -0.000000 );
+	f4( 66, 68, 67, 65, 1.000000, 0.000000, -0.000000 );
+	f4( 31, 49, 12, 32, 1.000000, 0.000000, -0.000000 );
+	f4( 110, 12, 8, 114, 1.000000, 0.000000, -0.000000 );
+	f4( 60, 129, 128, 63, 1.000000, 0.000000, -0.000000 );
+	f4( 25, 60, 63, 66, 1.000000, 0.000000, -0.000000 );
+	f4( 119, 118, 36, 38, 1.000000, 0.000000, -0.000000 );
+	f3( 4, 59, 126, 1.000000, 0.000000, -0.000000 );
+	f4( 115, 107, 44, 43, 1.000000, 0.000000, -0.000000 );
+	f4( 107, 41, 52, 86, 1.000000, 0.000000, -0.000000 );
+	f4( 30, 21, 65, 61, 1.000000, 0.000000, -0.000000 );
+	f4( 16, 26, 30, 61, 1.000000, 0.000000, -0.000000 );
+	f4( 31, 37, 21, 49, 1.000000, 0.000000, -0.000000 );
+	f4( 174, 152, 150, 173, 1.000000, 0.000000, -0.000000 );
+	f4( 177, 233, 241, 176, 1.000000, 0.000000, -0.000000 );
+	f4( 181, 162, 182, 183, 1.000000, 0.000000, -0.000000 );
+	f4( 211, 217, 216, 210, 1.000000, 0.000000, -0.000000 );
+	f4( 178, 176, 241, 166, 1.000000, 0.000000, -0.000000 );
+	f4( 169, 167, 237, 244, 1.000000, 0.000000, -0.000000 );
+	f4( 167, 169, 171, 147, 1.000000, 0.000000, -0.000000 );
+	f4( 227, 99, 0, 225, 1.000000, 0.000000, -0.000000 );
+	f3( 162, 181, 175, 1.000000, 0.000000, -0.000000 );
+	f4( 175, 172, 170, 196, 1.000000, 0.000000, -0.000000 );
+	f4( 196, 200, 162, 175, 1.000000, 0.000000, -0.000000 );
+	f4( 152, 210, 209, 150, 1.000000, 0.000000, -0.000000 );
+	f4( 153, 211, 210, 152, 1.000000, 0.000000, -0.000000 );
+	f4( 155, 212, 211, 153, 1.000000, 0.000000, -0.000000 );
+	f4( 148, 146, 238, 235, 1.000000, 0.000000, -0.000000 );
+	f4( 175, 181, 166, 241, 1.000000, 0.000000, -0.000000 );
+	f4( 249, 250, 199, 136, 1.000000, 0.000000, -0.000000 );
+	f4( 243, 208, 187, 201, 1.000000, 0.000000, -0.000000 );
+	f3( 200, 158, 191, 1.000000, 0.000000, -0.000000 );
+	f3( 96, 138, 161, 1.000000, 0.000000, -0.000000 );
+	f4( 243, 205, 182, 188, 1.000000, 0.000000, -0.000000 );
+	f4( 156, 201, 226, 160, 1.000000, 0.000000, -0.000000 );
+	f4( 177, 176, 178, 179, 1.000000, 0.000000, -0.000000 );
+	f4( 230, 100, 104, 231, 1.000000, 0.000000, -0.000000 );
+	f4( 189, 205, 161, 248, 1.000000, 0.000000, -0.000000 );
+	f4( 186, 180, 145, 141, 1.000000, 0.000000, -0.000000 );
+	f4( 250, 249, 97, 95, 1.000000, 0.000000, -0.000000 );
+	f4( 248, 161, 138, 206, 1.000000, 0.000000, -0.000000 );
+	f4( 158, 188, 182, 162, 1.000000, 0.000000, -0.000000 );
+	f4( 123, 62, 157, 204, 1.000000, 0.000000, -0.000000 );
+	f4( 242, 249, 136, 246, 1.000000, 0.000000, -0.000000 );
+	f4( 207, 96, 161, 205, 1.000000, 0.000000, -0.000000 );
+	f4( 136, 199, 185, 246, 1.000000, 0.000000, -0.000000 );
+	f4( 207, 202, 156, 160, 1.000000, 0.000000, -0.000000 );
+	f4( 147, 235, 238, 144, 1.000000, 0.000000, -0.000000 );
+	f4( 192, 149, 245, 198, 1.000000, 0.000000, -0.000000 );
+	f4( 204, 201, 187, 123, 1.000000, 0.000000, -0.000000 );
+	f4( 173, 172, 175, 174, 1.000000, 0.000000, -0.000000 );
+	f4( 242, 225, 203, 247, 1.000000, 0.000000, -0.000000 );
+	f3( 201, 204, 226, 1.000000, 0.000000, -0.000000 );
+	f4( 199, 250, 157, 62, 1.000000, 0.000000, -0.000000 );
+	f4( 185, 199, 62, 3, 1.000000, 0.000000, -0.000000 );
+	f4( 209, 213, 218, 212, 1.000000, 0.000000, -0.000000 );
+	f4( 183, 174, 233, 215, 1.000000, 0.000000, -0.000000 );
+	f4( 3, 230, 228, 185, 1.000000, 0.000000, -0.000000 );
+	f4( 228, 232, 246, 185, 1.000000, 0.000000, -0.000000 );
+	f4( 195, 154, 163, 192, 1.000000, 0.000000, -0.000000 );
+	f4( 228, 230, 231, 232, 1.000000, 0.000000, -0.000000 );
+	f4( 166, 215, 179, 178, 1.000000, 0.000000, -0.000000 );
+	f4( 210, 216, 213, 209, 1.000000, 0.000000, -0.000000 );
+	f3( 100, 230, 3, 1.000000, 0.000000, -0.000000 );
+	f3( 229, 99, 227, 1.000000, 0.000000, -0.000000 );
+	f4( 181, 183, 215, 166, 1.000000, 0.000000, -0.000000 );
+	f4( 155, 153, 248, 190, 1.000000, 0.000000, -0.000000 );
+	f4( 99, 229, 231, 104, 1.000000, 0.000000, -0.000000 );
+	f3( 232, 227, 246, 1.000000, 0.000000, -0.000000 );
+	f4( 248, 206, 137, 190, 1.000000, 0.000000, -0.000000 );
+	f4( 229, 227, 232, 231, 1.000000, 0.000000, -0.000000 );
+	f4( 190, 251, 234, 194, 1.000000, 0.000000, -0.000000 );
+	f4( 149, 148, 235, 245, 1.000000, 0.000000, -0.000000 );
+	f4( 145, 165, 237, 236, 1.000000, 0.000000, -0.000000 );
+	f4( 146, 140, 239, 238, 1.000000, 0.000000, -0.000000 );
+	f4( 140, 141, 240, 239, 1.000000, 0.000000, -0.000000 );
+	f4( 143, 142, 240, 236, 1.000000, 0.000000, -0.000000 );
+	f4( 172, 173, 245, 244, 1.000000, 0.000000, -0.000000 );
+	f4( 174, 175, 241, 233, 1.000000, 0.000000, -0.000000 );
+	f4( 177, 179, 215, 233, 1.000000, 0.000000, -0.000000 );
+	f3( 198, 245, 173, 1.000000, 0.000000, -0.000000 );
+	f4( 242, 246, 227, 225, 1.000000, 0.000000, -0.000000 );
+	f4( 198, 194, 193, 196, 1.000000, 0.000000, -0.000000 );
+	f4( 150, 209, 212, 155, 1.000000, 0.000000, -0.000000 );
+	f4( 251, 137, 252, 224, 1.000000, 0.000000, -0.000000 );
+	f4( 198, 173, 150, 155, 1.000000, 0.000000, -0.000000 );
+	f4( 225, 187, 208, 203, 1.000000, 0.000000, -0.000000 );
+	f4( 152, 182, 189, 153, 1.000000, 0.000000, -0.000000 );
+	f4( 249, 242, 168, 97, 1.000000, 0.000000, -0.000000 );
+	f4( 216, 220, 219, 213, 1.000000, 0.000000, -0.000000 );
+	f4( 252, 137, 247, 203, 1.000000, 0.000000, -0.000000 );
+	f4( 202, 207, 205, 243, 1.000000, 0.000000, -0.000000 );
+	f4( 204, 157, 94, 226, 1.000000, 0.000000, -0.000000 );
+	f4( 158, 191, 224, 188, 1.000000, 0.000000, -0.000000 );
+	f4( 242, 247, 214, 168, 1.000000, 0.000000, -0.000000 );
+	f3( 208, 243, 188, 1.000000, 0.000000, -0.000000 );
+	f4( 203, 208, 188, 252, 1.000000, 0.000000, -0.000000 );
+	f4( 251, 224, 223, 234, 1.000000, 0.000000, -0.000000 );
+	f4( 94, 95, 97, 226, 1.000000, 0.000000, -0.000000 );
+	f4( 97, 168, 160, 226, 1.000000, 0.000000, -0.000000 );
+	f4( 168, 138, 207, 160, 1.000000, 0.000000, -0.000000 );
+	f4( 168, 214, 206, 138, 1.000000, 0.000000, -0.000000 );
+	f4( 163, 159, 149, 192, 1.000000, 0.000000, -0.000000 );
+	f4( 217, 221, 220, 216, 1.000000, 0.000000, -0.000000 );
+	f4( 137, 206, 214, 247, 1.000000, 0.000000, -0.000000 );
+	f4( 187, 225, 0, 123, 1.000000, 0.000000, -0.000000 );
+	f4( 148, 149, 159, 146, 1.000000, 0.000000, -0.000000 );
+	f4( 146, 159, 184, 140, 1.000000, 0.000000, -0.000000 );
+	f4( 243, 201, 156, 202, 1.000000, 0.000000, -0.000000 );
+	f4( 245, 235, 147, 171, 1.000000, 0.000000, -0.000000 );
+	f4( 212, 218, 217, 211, 1.000000, 0.000000, -0.000000 );
+	f3( 153, 189, 248, 1.000000, 0.000000, -0.000000 );
+	f4( 186, 141, 140, 184, 1.000000, 0.000000, -0.000000 );
+	f4( 143, 236, 237, 167, 1.000000, 0.000000, -0.000000 );
+	f4( 234, 223, 193, 194, 1.000000, 0.000000, -0.000000 );
+	f4( 186, 184, 163, 154, 1.000000, 0.000000, -0.000000 );
+	f4( 183, 182, 152, 174, 1.000000, 0.000000, -0.000000 );
+	f4( 144, 238, 239, 139, 1.000000, 0.000000, -0.000000 );
+	f3( 152, 151, 153, 1.000000, 0.000000, -0.000000 );
+	f4( 139, 239, 240, 142, 1.000000, 0.000000, -0.000000 );
+	f4( 165, 164, 244, 237, 1.000000, 0.000000, -0.000000 );
+	f4( 170, 172, 244, 164, 1.000000, 0.000000, -0.000000 );
+	f4( 155, 190, 194, 198, 1.000000, 0.000000, -0.000000 );
+	f4( 139, 142, 143, 144, 1.000000, 0.000000, -0.000000 );
+	f4( 218, 222, 221, 217, 1.000000, 0.000000, -0.000000 );
+	f4( 213, 219, 222, 218, 1.000000, 0.000000, -0.000000 );
+	f4( 154, 170, 164, 180, 1.000000, 0.000000, -0.000000 );
+	f4( 197, 198, 196, 195, 1.000000, 0.000000, -0.000000 );
+	f4( 145, 180, 164, 165, 1.000000, 0.000000, -0.000000 );
+	f4( 141, 145, 236, 240, 1.000000, 0.000000, -0.000000 );
+	f4( 90, 93, 92, 91, 1.000000, 0.000000, -0.000000 );
+
+	this.computeCentroids();
+	this.computeNormals(true);
+
+	scope.colors = {};
+	scope.selections = {};
+	scope.selections["c1"] = [0, 1, 2, 3, 8, 9, 10, 14, 15, 16, 19, 20, 24, 27, 28, 30, 31, 32, 35, 37, 42, 43, 49, 52, 53, 56, 57, 58, 59, 60, 64, 65, 67, 69, 72, 74, 78, 80, 89, 93, 97, 98, 101, 103, 107, 108, 109, 114, 115, 117, 118, 120, 122, 123, 124, 125, 126, 128, 129, 134, 135, 136, 140, 141, 142, 145, 146, 149, 150, 153, 154, 156, 157, 158, 161, 163, 168, 169, 172, 175, 178, 179, 182, 183, 184, 185, 186, 190, 191, 193, 195, 198, 200, 204, 206, 215, 219, 223, 224, 227, 229, 233, 234, 235, 239, 240, 241];
+	scope.selections["c2"] = [4, 5, 6, 7, 17, 18, 21, 22, 25, 26, 29, 33, 34, 36, 38, 39, 40, 41, 44, 45, 46, 48, 50, 51, 54, 55, 61, 62, 63, 66, 68, 73, 75, 76, 79, 81, 82, 90, 92, 94, 95, 96, 99, 100, 102, 104, 105, 106, 110, 111, 112, 113, 116, 119, 121, 127, 130, 131, 132, 133, 143, 144, 147, 148, 151, 152, 155, 159, 160, 162, 164, 165, 166, 167, 170, 171, 174, 176, 177, 181, 187, 188, 189, 192, 194, 199, 201, 202, 205, 207, 208, 216, 218, 220, 221, 222, 225, 226, 228, 230, 231, 232, 236, 237, 238, 242, 243];
+	scope.selections["c3"] = [11, 12, 13, 47, 70, 137, 138, 139, 180, 196];
+	scope.selections["c4"] = [23, 71, 77, 83, 84, 85, 86, 87, 88, 91, 173, 197, 203, 209, 210, 211, 212, 213, 214, 217];
+	scope.colors["c1"] = 0x000000;
+	scope.colors["c2"] = 0x028fd4;
+	scope.colors["c3"] = 0xe0dc0a;
+	scope.colors["c4"] = 0xed3537;
+
+	scope.autoColor = function(){
+		for(var s in this.selections){
+			for(var i = 0 ; i < this.selections[s].length; i++) this.faces[this.selections[s][i]].material = [new THREE.MeshBasicMaterial({color:this.colors[s]})];
+		}
+	}
+
+	scope.getPosition = function(){	return new THREE.Vector3(-0.87381744384765625, -354.34426879882812, 2.7036786079406738);	}
+
+	scope.getRotation = function(){	return new THREE.Vector3(-1.5707963705062866, 0.0, 1.7484555314695172e-07);	}
+
+	scope.getScale = function(){	return new THREE.Vector3(1.6200000047683716, 1.6200000047683716, 1.6200000047683716);	}
+
+	function v( x, y, z ) {
+
+		scope.vertices.push( new THREE.Vertex( new THREE.Vector3( x, y, z ) ) );
+
+	}
+
+	function f3( a, b, c, nx, ny, nz ) {
+
+		scope.faces.push( new THREE.Face3( a, b, c, nx && ny && nz ? new THREE.Vector3( nx, ny, nz ) : null ) );
+
+	}
+
+	function f4( a, b, c, d, nx, ny, nz ) {
+
+		scope.faces.push( new THREE.Face4( a, b, c, d, nx && ny && nz ? new THREE.Vector3( nx, ny, nz ) : null ) );
+
+	}
+
+	function uv( u1, v1, u2, v2, u3, v3, u4, v4 ) {
+
+		var uv = [];
+		uv.push( new THREE.UV( u1, v1 ) );
+		uv.push( new THREE.UV( u2, v2 ) );
+		uv.push( new THREE.UV( u3, v3 ) );
+		if ( u4 && v4 ) uv.push( new THREE.UV( u4, v4 ) );
+		scope.uvs.push( uv );
+	}
+
+}
+
+BotLowerBody.prototype = new THREE.Geometry();
+BotLowerBody.prototype.constructor = BotLowerBody;

+ 920 - 0
examples/geometry/BotUpperBody.js

@@ -0,0 +1,920 @@
+var BotUpperBody = function () {
+
+	var scope = this;
+
+	THREE.Geometry.call(this);
+
+	v( -30.000000, 50.000000, -79.798981 );
+	v( -70.000000, 50.000000, -79.798981 );
+	v( -70.000000, 210.000000, -79.798981 );
+	v( -40.000000, 210.000000, -79.798981 );
+	v( -40.000000, 150.000000, -79.798981 );
+	v( 40.000000, 150.000000, -79.798981 );
+	v( 40.000000, 210.000000, -79.798981 );
+	v( 70.000000, 210.000000, -79.798981 );
+	v( 70.000000, 50.000000, -79.798981 );
+	v( 30.000000, 50.000000, -79.798981 );
+	v( 30.000000, 5.243652, -79.798981 );
+	v( -30.000000, 5.243652, -79.798981 );
+	v( 40.000000, 69.972107, -77.507408 );
+	v( -40.000000, 69.972107, -77.507408 );
+	v( -40.000000, 119.972107, -77.507408 );
+	v( 40.000000, 119.972107, -77.507408 );
+	v( -90.180664, 50.000000, 75.044548 );
+	v( -70.000000, 77.765770, 138.201019 );
+	v( -70.000000, 210.000000, 138.201019 );
+	v( -78.010635, 300.711853, -61.681286 );
+	v( 40.000000, 210.000000, -70.000000 );
+	v( -78.010635, 300.711853, 107.800003 );
+	v( 70.000000, 210.000000, 138.201019 );
+	v( 70.000000, 77.765770, 138.201019 );
+	v( -42.648903, 50.000000, 110.000000 );
+	v( 88.819336, 35.047543, 74.979904 );
+	v( -90.180664, 35.120094, 75.237579 );
+	v( 77.589371, 300.711853, 107.800003 );
+	v( 40.000000, 69.972107, -71.972038 );
+	v( -40.000000, 69.972107, -71.972038 );
+	v( -40.000000, 119.972107, -71.972038 );
+	v( 40.000000, 119.972107, -71.972038 );
+	v( 36.599998, 73.372108, -71.972038 );
+	v( -36.599998, 73.372108, -71.972038 );
+	v( -36.599998, 116.572105, -71.972038 );
+	v( 36.599998, 116.572105, -71.972038 );
+	v( -70.000000, 210.000000, 120.000000 );
+	v( 70.000000, 150.000000, 105.000000 );
+	v( -70.000000, 210.000000, -70.000000 );
+	v( 70.000000, 200.000000, 105.000000 );
+	v( 70.000000, 210.000000, 120.000000 );
+	v( 70.000000, 210.000000, -70.000000 );
+	v( -39.783688, 150.185150, -70.799431 );
+	v( -70.000000, 200.000000, 105.000000 );
+	v( 70.000000, 200.000000, 120.000000 );
+	v( -70.000000, 150.000000, 105.000000 );
+	v( -70.000000, 200.000000, 120.000000 );
+	v( 70.000000, 150.000000, -70.000000 );
+	v( -70.000000, 150.000000, -70.000000 );
+	v( -70.000000, 150.074203, -70.000000 );
+	v( 70.000000, 150.073151, -70.000000 );
+	v( 39.697052, 150.185150, -70.799431 );
+	v( -40.000000, 210.000000, -70.000000 );
+	v( -90.210632, 230.000000, -70.000000 );
+	v( -90.210632, 280.000000, -30.000000 );
+	v( -90.210632, 280.000000, 120.000000 );
+	v( -90.210632, 200.000000, 120.000000 );
+	v( -90.210632, 200.000000, 105.000000 );
+	v( -90.210632, 150.000000, 105.000000 );
+	v( -90.210632, 150.000000, -70.000000 );
+	v( -88.837646, 180.000000, -30.000000 );
+	v( -88.837646, 230.000000, -30.000000 );
+	v( -88.837646, 250.000000, -10.000000 );
+	v( -88.837646, 250.000000, 70.000000 );
+	v( -88.837646, 180.000000, 70.000000 );
+	v( 89.789368, 230.000000, -70.000000 );
+	v( 89.789368, 280.000000, -30.000000 );
+	v( 89.789368, 280.000000, 120.000000 );
+	v( 89.789368, 200.000000, 120.000000 );
+	v( 89.789368, 200.000000, 105.000000 );
+	v( 89.789368, 150.000000, 105.000000 );
+	v( 89.789368, 150.000000, -70.000000 );
+	v( 91.162354, 180.000000, -30.000000 );
+	v( 91.162354, 230.000000, -30.000000 );
+	v( 91.162354, 250.000000, -10.000000 );
+	v( 91.162354, 250.000000, 70.000000 );
+	v( 91.162354, 180.000000, 70.000000 );
+	v( -79.837646, 180.000000, -30.000000 );
+	v( -79.837646, 230.000000, -30.000000 );
+	v( -79.837646, 250.000000, -10.000000 );
+	v( -79.837646, 250.000000, 70.000000 );
+	v( -79.837646, 180.000000, 70.000000 );
+	v( 82.162354, 180.000000, -30.000000 );
+	v( 82.162354, 230.000000, -30.000000 );
+	v( 82.162354, 250.000000, -10.000000 );
+	v( 82.162354, 250.000000, 70.000000 );
+	v( 82.162354, 180.000000, 70.000000 );
+	v( -78.010635, 239.526596, -62.378723 );
+	v( -78.010635, 280.000000, -30.000000 );
+	v( -78.010635, 280.000000, 107.800003 );
+	v( 77.589371, 239.526596, -62.378723 );
+	v( 77.589371, 280.000000, -30.000000 );
+	v( 77.589371, 280.000000, 107.800003 );
+	v( 77.589371, 300.711853, -61.681286 );
+	v( -90.180664, 50.000000, 118.400002 );
+	v( -33.548904, 33.100948, 110.000000 );
+	v( -70.000000, 50.000000, 70.000000 );
+	v( -70.000000, 128.796860, 138.201019 );
+	v( -70.000000, 50.000000, -70.000000 );
+	v( -30.000000, 50.000000, -70.000000 );
+	v( 70.000000, 106.216438, 138.201019 );
+	v( 30.000000, 50.000000, -70.000000 );
+	v( 70.000000, 50.000000, -70.000000 );
+	v( 70.000000, 50.000000, 70.000000 );
+	v( -90.180664, -28.540840, 118.400002 );
+	v( 37.961815, -11.641788, 110.000000 );
+	v( -70.000000, 106.087738, 138.201019 );
+	v( 47.061813, -28.540840, 110.000000 );
+	v( -30.000000, 5.243652, -50.000000 );
+	v( 30.000000, 5.243652, -50.000000 );
+	v( -33.548904, -11.641788, 110.000000 );
+	v( -70.000000, 70.000000, -20.000000 );
+	v( -70.000000, 130.000000, 20.000000 );
+	v( -70.000000, 130.288666, -70.000000 );
+	v( -70.000000, 130.000000, 70.000000 );
+	v( 70.000000, 130.000000, 20.000000 );
+	v( 70.000000, 70.000000, 20.000000 );
+	v( -70.000000, 130.000031, -20.000000 );
+	v( 70.000000, 70.000000, -20.000000 );
+	v( 70.000000, 130.000000, -70.000000 );
+	v( 70.000000, 130.000000, 70.000000 );
+	v( 30.000000, 40.000000, -70.000000 );
+	v( 30.000000, 15.243652, -40.000000 );
+	v( 30.000000, 20.000000, -50.000000 );
+	v( 70.000000, 130.000000, -20.000000 );
+	v( 30.000000, 40.000000, -40.000000 );
+	v( -30.000000, 40.000000, -70.000000 );
+	v( -30.000000, 40.000000, -40.000000 );
+	v( -30.000000, 20.000000, -40.000000 );
+	v( -30.000000, 20.000000, -50.000000 );
+	v( -90.180664, -28.540840, 110.000000 );
+	v( -90.180664, 50.000000, 110.000000 );
+	v( -90.180664, 50.000000, 70.000000 );
+	v( -90.180664, 130.000000, 70.000000 );
+	v( -90.180664, 130.000000, 20.000000 );
+	v( -90.180664, 70.081894, 20.000000 );
+	v( -90.180664, 70.000000, -20.000000 );
+	v( -90.180664, 130.000000, -20.000000 );
+	v( -90.180664, 130.288666, -70.000000 );
+	v( -90.180664, 40.000000, -70.000000 );
+	v( -90.180664, 40.000000, -40.000000 );
+	v( -90.180664, 20.000000, -40.000000 );
+	v( -90.180664, 20.000000, -50.000000 );
+	v( -90.180664, -10.000000, -50.000000 );
+	v( -90.180664, -50.000000, -10.000000 );
+	v( -90.180664, -50.000000, 60.000000 );
+	v( -90.180664, -28.540840, 60.000000 );
+	v( 88.819336, -28.540840, 110.000000 );
+	v( 88.819336, 50.000000, 110.000000 );
+	v( 88.819336, 50.000000, 70.000000 );
+	v( 88.819336, 130.000000, 70.000000 );
+	v( 88.819336, 130.000000, 20.000000 );
+	v( 88.819336, 70.000000, 20.000000 );
+	v( 88.819336, 70.000000, -20.000000 );
+	v( 88.819336, 130.000000, -20.000000 );
+	v( 88.819336, 130.000000, -70.000000 );
+	v( 88.819336, 40.000000, -70.000000 );
+	v( 88.819336, 40.000000, -40.000000 );
+	v( 88.819336, 20.000000, -40.000000 );
+	v( 88.819336, 20.000000, -50.000000 );
+	v( 88.819336, -10.000000, -50.000000 );
+	v( 88.819336, -50.000000, -10.000000 );
+	v( 88.819336, -50.000000, 60.000000 );
+	v( 88.819336, -28.540840, 60.000000 );
+	v( -90.180664, -24.000000, 28.226105 );
+	v( -90.180664, -24.000000, -19.773895 );
+	v( -90.180664, 24.000000, -19.773895 );
+	v( -90.180664, 24.000000, 28.226105 );
+	v( 88.819336, 24.000000, -19.773895 );
+	v( 88.819336, 24.000000, 28.226105 );
+	v( 88.819336, -24.000000, -19.773895 );
+	v( 88.819336, -24.000000, 28.226105 );
+	v( -131.969193, -13.000000, -8.773895 );
+	v( -131.969193, -13.000000, 17.226105 );
+	v( -131.969193, 13.000000, 17.226105 );
+	v( -131.969193, 13.000000, -8.773895 );
+	v( 83.819328, -24.000000, 28.226105 );
+	v( 83.819328, 24.000000, 28.226105 );
+	v( 83.819328, 24.000000, -19.773895 );
+	v( 83.819328, -24.000000, -19.773895 );
+	v( 83.819328, 13.000000, -8.773895 );
+	v( 83.819328, 13.000000, 17.226105 );
+	v( 83.819328, -13.000000, 17.226105 );
+	v( 83.819328, -13.000000, -8.773895 );
+	v( 126.690536, 13.000000, -8.773895 );
+	v( 126.690536, 13.000000, 17.226105 );
+	v( 126.690536, -13.000000, -8.773895 );
+	v( 126.690536, -13.000000, 17.226105 );
+	v( 44.069336, -50.000000, -10.000000 );
+	v( 44.069336, -50.000000, 60.000000 );
+	v( 44.069336, -28.540840, 60.000000 );
+	v( 44.069336, -10.000000, -50.000000 );
+	v( -45.430664, -10.000000, -50.000000 );
+	v( -45.430664, -50.000000, -10.000000 );
+	v( -45.430664, -50.000000, 60.000000 );
+	v( -45.430664, -28.540840, 60.000000 );
+	v( 13.350517, -20.439323, 17.469305 );
+	v( 13.350517, -20.470863, -8.712248 );
+	v( -14.711840, -20.470863, -8.712248 );
+	v( -14.711840, -20.439323, 17.469305 );
+	v( 13.350517, -76.575394, 17.537935 );
+	v( 13.350517, -76.606949, -8.643618 );
+	v( -14.711840, -76.606949, -8.643618 );
+	v( -14.711840, -76.575394, 17.537935 );
+	v( 13.350517, -84.694839, 17.554567 );
+	v( 13.350517, -84.726395, -8.626986 );
+	v( -14.711840, -84.726395, -8.626986 );
+	v( -14.711840, -84.694839, 17.554567 );
+	v( 13.350517, -129.618423, 17.613504 );
+	v( 13.350517, -129.649979, -8.568048 );
+	v( -14.711840, -129.649979, -8.568048 );
+	v( -14.711840, -129.618423, 17.613504 );
+	v( 134.332764, 13.000000, -8.773895 );
+	v( 134.332764, 13.000000, 17.226105 );
+	v( 134.332764, -13.000000, -8.773895 );
+	v( 134.332764, -13.000000, 17.226105 );
+	v( 170.190567, 13.000000, -8.773895 );
+	v( 170.190567, 13.000000, 17.226105 );
+	v( 170.190567, -13.000000, -8.773895 );
+	v( 170.190567, -13.000000, 17.226105 );
+	v( -139.624573, -13.000000, -8.773895 );
+	v( -139.624573, -13.000000, 17.226105 );
+	v( -139.624573, 13.000000, 17.226105 );
+	v( -139.624573, 13.000000, -8.773895 );
+	v( -170.224594, -13.000000, -8.773895 );
+	v( -170.224594, -13.000000, 17.226105 );
+	v( -170.224594, 13.000000, 17.226105 );
+	v( -170.224594, 13.000000, -8.773895 );
+	v( -85.180664, -24.000000, 28.226105 );
+	v( -85.180664, -24.000000, -19.773895 );
+	v( -85.180664, 24.000000, -19.773895 );
+	v( -85.180664, 24.000000, 28.226105 );
+	v( -85.180664, -13.000000, 17.226105 );
+	v( -85.180664, -13.000000, -8.773895 );
+	v( -85.180664, 13.000000, -8.773895 );
+	v( -85.180664, 13.000000, 17.226105 );
+	v( -70.000000, 130.000000, 20.000000 );
+	v( -70.000000, 70.000000, -20.000000 );
+	v( 37.961815, 33.100948, 110.000000 );
+	v( -70.000000, 130.000031, -20.000000 );
+	v( -70.000000, 130.288666, -70.000000 );
+	v( -70.000000, 50.000000, 70.000000 );
+	v( -42.648903, -28.540840, 118.400002 );
+	v( -70.000000, 130.000000, 70.000000 );
+	v( 70.000000, 130.000000, 20.000000 );
+	v( 70.000000, 130.000000, 70.000000 );
+	v( 70.000000, 70.000000, 20.000000 );
+	v( 70.000000, 70.000000, -20.000000 );
+	v( 70.000000, 50.000000, 70.000000 );
+	v( -90.180664, 35.111900, 118.400002 );
+	v( 30.000000, 19.911865, -40.000000 );
+	v( 30.000000, 40.000000, -40.000000 );
+	v( 30.000000, 20.000000, -50.000000 );
+	v( -30.000000, 40.000000, -70.000000 );
+	v( 70.000000, 130.000000, -20.000000 );
+	v( 30.000000, 50.000000, -70.000000 );
+	v( 70.000000, 130.000000, -70.000000 );
+	v( 30.000000, 40.000000, -70.000000 );
+	v( 70.000000, 128.773056, 138.201019 );
+	v( -30.000000, 20.000000, -40.000000 );
+	v( -30.000000, 40.000000, -40.000000 );
+	v( 70.000000, 94.263382, 138.201019 );
+	v( -30.000000, 20.000000, -50.000000 );
+	v( -30.000000, 5.243652, -50.000000 );
+	v( -70.000000, 50.000000, -70.000000 );
+	v( -30.000000, 50.000000, -70.000000 );
+	v( 70.000000, 50.000000, -70.000000 );
+	v( -90.180664, 5.000000, -50.000000 );
+	v( 88.819336, 5.000000, -50.000000 );
+	v( 29.771923, -10.000000, -50.000000 );
+	v( -70.000000, 94.516479, 138.201019 );
+	v( -30.014065, -10.000000, -50.000000 );
+	v( 88.819336, -28.540840, 97.206703 );
+	v( -42.648903, -28.540840, 110.000000 );
+	v( 47.061813, 50.000000, 110.000000 );
+	v( -90.180664, -28.540840, 97.206703 );
+	v( 88.819336, 35.111900, 97.151810 );
+	v( 88.819336, 35.111900, 110.000000 );
+	v( -90.180664, 35.111900, 97.151810 );
+	v( -90.180664, 35.111900, 110.000000 );
+	v( -90.180664, 94.517036, 70.000000 );
+	v( 88.819336, 50.000000, 74.945549 );
+	v( -70.000000, 105.073616, 70.000000 );
+	v( -70.000000, 77.933533, 69.999985 );
+	v( 70.000000, 77.933533, 69.999985 );
+	v( 47.061813, -28.540840, 118.400002 );
+	v( 88.819336, -28.540840, 118.400002 );
+	v( 88.819336, 50.000000, 118.400002 );
+	v( 47.061813, 50.000000, 118.400002 );
+	v( 88.819336, 35.111900, 118.400002 );
+	v( -42.648903, 50.000000, 118.400002 );
+	v( 70.000000, 78.195251, 70.000000 );
+	v( 70.000000, 94.377434, 70.000000 );
+	v( 70.000000, 106.244400, 70.000000 );
+	v( 70.000000, 128.761108, 70.000000 );
+	v( -67.619431, 70.585670, 19.836960 );
+	v( 89.789368, 190.000000, -70.000000 );
+	v( -70.000000, 94.517036, 70.000000 );
+	v( 89.789368, 170.000000, -70.000000 );
+	v( 89.789368, 210.000000, -70.000000 );
+
+	f4( 98, 1, 0, 99, 0.000000, -1.000000, 0.000000 );
+	uv( 0.050000, 0.044949, 0.050000, 0.000000, 0.000000, 0.000000, 0.000000, 0.044949);
+	f4( 252, 159, 268, 109, 0.000000, -1.000000, 0.000000 );
+	uv( 0.000000, 1.000000, 1.000000, 1.000000, 1.000000, 0.000000, 0.000000, 0.000000);
+	f4( 168, 178, 179, 170, 0.000000, -1.000000, 0.000000 );
+	uv( 0.000000, 0.000000, 1.000000, 0.000000, 1.000000, 1.000000, 0.000000, 1.000000);
+	f4( 52, 3, 2, 38, 0.000000, -1.000000, 0.000000 );
+	uv( 0.000000, 1.000000, 1.000000, 1.000000, 1.000000, 0.000000, 0.000000, 0.000000);
+	f3( 49, 59, 48, 0.000000, 0.000000, 1.000000 );
+	uv( 0.874017, 0.033034, 0.869713, 0.000000, 0.869713, 0.112281);
+	f4( 174, 222, 221, 173, 0.000000, 0.000000, 1.000000 );
+	uv( 0.000000, 1.000000, 1.000000, 1.000000, 1.000000, 0.000000, 0.000000, 0.000000);
+	f4( 53, 38, 49, 59, 0.000000, 0.000000, 1.000000 );
+	uv( 0.000000, 1.000000, 1.000000, 1.000000, 1.000000, 0.000000, 0.000000, 0.000000);
+	f4( 175, 223, 222, 174, 0.000000, 0.000000, 1.000000 );
+	uv( 0.000000, 1.000000, 1.000000, 1.000000, 1.000000, 0.000000, 0.000000, 0.000000);
+	f3( 90, 93, 91, 0.000000, 0.000000, -1.000000 );
+	uv( 0.008506, 0.918433, 0.098006, 0.939836, 0.098006, 0.939836);
+	f4( 67, 92, 89, 55, 0.000000, 0.000000, -1.000000 );
+	uv( 0.348567, 1.000000, 0.330653, 0.926667, 0.330653, 0.073333, 0.348567, 0.000000);
+	f4( 5, 51, 20, 6, 0.000000, 0.000000, -1.000000 );
+	uv( 0.000568, 1.000000, 1.000000, 1.000000, 1.000000, 0.000000, 0.000000, 0.000000);
+	f4( 89, 21, 19, 88, 0.000000, 0.000000, -1.000000 );
+	uv( 0.330653, 0.073333, 0.330653, 0.073333, 0.114052, 0.040000, 0.114052, 0.040000);
+	f4( 91, 93, 27, 92, 0.000000, 1.000000, 0.000000 );
+	uv( 0.114052, 0.960000, 0.114052, 0.960000, 0.330653, 0.926667, 0.330653, 0.926667);
+	f4( 41, 7, 6, 20, 0.000000, 1.000000, 0.000000 );
+	uv( 0.575000, 0.044949, 0.575000, 0.000000, 0.537500, 0.000000, 0.537500, 0.044949);
+	f4( 75, 69, 70, 76, 0.000000, 1.000000, 0.000000 );
+	uv( 0.000000, 1.000000, 1.000000, 1.000000, 1.000000, 0.000000, 0.000000, 0.000000);
+	f3( 88, 19, 87, 0.000000, 1.000000, 0.000000 );
+	uv( 0.098006, 0.060164, 0.098006, 0.060164, 0.008506, 0.081567);
+	f4( 74, 73, 65, 66, -0.000000, -0.000000, -1.000000 );
+	uv( 0.000000, 0.000000, 1.000000, 0.000000, 1.000000, 1.000000, 0.000061, 1.000000);
+	f4( 75, 67, 68, 69, -0.000000, -0.000000, -1.000000 );
+	uv( 0.000260, 0.999765, 1.000000, 1.000000, 1.000000, 0.000000, 0.000000, 0.000113);
+	f4( 270, 17, 23, 261, 0.000000, 0.000000, -1.000000 );
+	uv( 0.875000, 1.000000, 1.000000, 1.000000, 1.000000, 0.000000, 0.875000, 0.000000);
+	f4( 66, 91, 92, 67, 0.000000, 0.000000, 0.000000 );
+	uv( 0.104280, 1.000000, 0.114052, 0.960000, 0.330653, 0.926667, 0.348567, 1.000000);
+	f3( 293, 150, 245, 0.000000, 0.000000, -1.000000 );
+	uv( 0.221141, 0.894864, 0.239072, 1.000000, 0.239072, 0.894864);
+	f4( 172, 220, 223, 175, 0.000000, 0.000000, -1.000000 );
+	uv( 0.000000, 1.000000, 1.000000, 1.000000, 1.000000, 0.000000, 0.000000, 0.000000);
+	f4( 149, 281, 25, 163, 0.000000, 0.000000, -1.000000 );
+	uv( 0.000000, 0.000000, 1.000000, 0.000000, 1.000000, 1.000000, 0.000000, 1.000000);
+	f4( 24, 290, 242, 273, 0.000000, 0.000000, -1.000000 );
+	uv( 0.000000, 1.000000, 1.000000, 1.000000, 1.000000, 0.000000, 0.000000, 0.000000);
+	f3( 291, 248, 149, 0.000000, 0.264156, 0.964480 );
+	uv( 0.191257, 0.894864, 0.143443, 0.894864, 0.143443, 1.000000);
+	f4( 49, 240, 243, 45, 0.000000, 0.000000, 1.000000 );
+	uv( 0.000000, 1.000000, 1.000000, 1.000000, 1.000000, 0.000000, 0.000000, 0.000000);
+	f4( 173, 221, 220, 172, 0.000000, 0.000000, 1.000000 );
+	uv( 0.000000, 1.000000, 1.000000, 1.000000, 1.000000, 0.000000, 0.000000, 0.000000);
+	f4( 272, 275, 146, 163, 0.000000, 0.000000, 1.000000 );
+	uv( 0.000000, 1.000000, 1.000000, 1.000000, 1.000000, 0.000000, 0.000000, 0.000000);
+	f4( 37, 245, 256, 50, 0.000000, 1.000000, 0.000000 );
+	uv( 0.000000, 1.000000, 1.000000, 1.000000, 1.000000, 0.000000, 0.000000, 0.000000);
+	f4( 215, 219, 217, 213, 0.000000, 1.000000, 0.000000 );
+	uv( 0.000000, 1.000000, 1.000000, 1.000000, 1.000000, 0.000000, 0.000000, 0.000000);
+	f3( 16, 131, 24, 0.000000, 1.000000, 0.000000 );
+	uv( 0.250000, 1.000000, 1.000000, 1.000000, 1.000000, 0.750000);
+	f4( 276, 272, 163, 25, 0.000000, 1.000000, 0.000000 );
+	uv( 0.000000, 1.000000, 1.000000, 1.000000, 1.000000, 0.000000, 0.000000, 0.000000);
+	f4( 115, 116, 118, 124, -1.000000, 0.000000, 0.000000 );
+	uv( 0.675000, 0.457793, 0.750000, 0.457793, 0.750000, 0.274307, 0.675000, 0.274307);
+	f4( 214, 218, 219, 215, -1.000000, 0.000000, 0.000000 );
+	uv( 0.000000, 1.000000, 1.000000, 1.000000, 1.000000, 0.000000, 0.000000, 0.000000);
+	f4( 171, 176, 177, 169, -1.000000, 0.000000, 0.000000 );
+	uv( 0.000000, 0.000000, 1.000000, 0.000000, 1.000000, 1.000000, 0.000000, 1.000000);
+	f4( 164, 228, 229, 165, 0.000000, 0.000000, 0.000000 );
+	uv( 0.000000, 1.000000, 1.000000, 1.000000, 1.000000, 0.000000, 0.000000, 0.000000);
+	f4( 170, 179, 176, 171, 0.000000, 1.000000, 0.000000 );
+	uv( 0.000000, 0.000000, 1.000000, 0.000000, 1.000000, 1.000000, 0.000000, 1.000000);
+	f4( 7, 41, 266, 8, 0.000000, 1.000000, 0.000000 );
+	uv( 0.000000, 1.000000, 1.000000, 1.000000, 1.000000, 0.000000, 0.000000, 0.000000);
+	f4( 101, 9, 8, 102, 0.000000, 1.000000, 0.000000 );
+	uv( 0.825000, 0.044949, 0.825000, 0.000000, 0.775000, 0.000000, 0.775000, 0.044949);
+	f3( 269, 191, 197, 0.000000, 1.000000, 0.000000 );
+	uv( 0.000000, 0.750000, 0.000000, 1.000000, 1.000000, 1.000000);
+	f4( 169, 177, 178, 168, 0.999854, 0.002757, 0.016881 );
+	uv( 0.000000, 0.000000, 1.000000, 0.000000, 1.000000, 1.000000, 0.000000, 1.000000);
+	f4( 121, 125, 122, 123, 0.999854, 0.002757, 0.016881 );
+	uv( 0.837500, 0.044949, 0.837500, 0.182564, 0.862500, 0.182564, 0.862500, 0.136693);
+	f4( 10, 9, 101, 121, 0.999854, 0.002757, 0.016881 );
+	uv( 0.875000, 0.000000, 0.825000, 0.000000, 0.825000, 0.044949, 0.837500, 0.044949);
+	f4( 121, 123, 109, 10, 0.999854, 0.002757, 0.016881 );
+	uv( 0.837500, 0.044949, 0.862500, 0.136693, 0.875000, 0.136693, 0.875000, 0.000000);
+	f4( 267, 263, 271, 143, 1.000000, 0.000000, 0.000000 );
+	uv( 0.000000, 1.000000, 1.000000, 1.000000, 1.000000, 0.000000, 0.000000, 0.000000);
+	f4( 108, 11, 10, 109, 1.000000, 0.000000, 0.000000 );
+	uv( 0.950000, 0.136693, 0.950000, 0.000000, 0.875000, 0.000000, 0.875000, 0.136693);
+	f4( 142, 262, 263, 267, 1.000000, 0.000000, 0.000000 );
+	uv( 0.000000, 1.000000, 1.000000, 1.000000, 1.000000, 0.000000, 0.000000, 0.000000);
+	f4( 263, 109, 269, 271, 1.000000, 0.000000, 0.000000 );
+	uv( 0.000000, 1.000000, 1.000000, 1.000000, 1.000000, 0.000000, 0.000000, 0.000000);
+	f4( 99, 0, 11, 126, -1.000000, 0.000000, 0.000000 );
+	uv( 1.000000, 0.044949, 1.000000, 0.000000, 0.950000, 0.000000, 0.987500, 0.044949);
+	f4( 129, 128, 127, 126, -1.000000, 0.000000, 0.000000 );
+	uv( 0.962500, 0.136693, 0.962500, 0.182564, 0.987500, 0.182564, 0.987500, 0.044949);
+	f4( 11, 108, 129, 126, -1.000000, 0.000000, 0.000000 );
+	uv( 0.950000, 0.000000, 0.950000, 0.136693, 0.962500, 0.136693, 0.987500, 0.044949);
+	f4( 75, 85, 84, 74, -1.000000, 0.000000, 0.000000 );
+	uv( 0.000000, 1.000000, 0.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000);
+	f4( 73, 83, 82, 72, 0.000000, 1.000000, 0.000000 );
+	uv( 1.000000, 1.000000, 1.000000, 1.000000, 0.000000, 0.000000, 0.000000, 0.000000);
+	f4( 74, 84, 83, 73, 0.000000, 1.000000, 0.000000 );
+	uv( 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 0.000000, 1.000000, 0.000000);
+	f4( 18, 97, 258, 22, 0.000000, 1.000000, 0.000000 );
+	uv( 0.000000, 1.000000, 0.500000, 1.000000, 0.500000, 0.000000, 0.000000, 0.000000);
+	f4( 109, 268, 160, 269, 0.000000, 1.000000, 0.000000 );
+	uv( 0.000000, 1.000000, 1.000000, 1.000000, 1.000000, 0.000000, 0.000000, 0.000000);
+	f4( 9, 10, 11, 0, -0.999787, 0.010669, -0.017650 );
+	uv( 0.000000, 1.000000, 1.000000, 1.000000, 1.000000, 0.000000, 0.000000, 0.000000);
+	f4( 12, 9, 0, 13, -0.999626, -0.006864, -0.026465 );
+	uv( 0.000000, 1.000000, 1.000000, 1.000000, 1.000000, 0.000000, 0.000000, 0.000000);
+	f4( 15, 7, 8, 12, -0.999546, -0.022870, -0.019608 );
+	uv( 0.000000, 1.000000, 1.000000, 1.000000, 1.000000, 0.000000, 0.000000, 0.000000);
+	f4( 6, 7, 15, 5, -0.999546, -0.022870, -0.019608 );
+	uv( 0.000000, 0.000000, 1.000000, 1.000000, 1.000000, 0.000000, 0.272467, 0.032596);
+	f4( 5, 15, 14, 4, 1.000000, 0.000000, 0.000000 );
+	uv( 0.000000, 1.000000, 1.000000, 1.000000, 1.000000, 0.000000, 0.000000, 0.000000);
+	f4( 14, 2, 3, 4, 1.000000, 0.000000, 0.000000 );
+	uv( 0.000000, 1.000000, 1.000000, 0.000000, 1.000000, 1.000000, 0.000000, 1.000000);
+	f4( 13, 1, 2, 14, 1.000000, 0.000000, 0.000000 );
+	uv( 0.000000, 0.000000, 1.000000, 0.000000, 1.000000, 1.000000, 0.000000, 1.000000);
+	f3( 0, 1, 13, 0.000000, 0.000000, 0.000000 );
+	uv( 0.000000, 0.000000, 1.000000, 0.000000, 1.000000, 1.000000);
+	f3( 9, 12, 8, -0.999156, 0.037673, 0.016369 );
+	uv( 0.000000, 0.000000, 1.000000, 0.000000, 1.000000, 1.000000);
+	f4( 60, 77, 78, 61, -0.999380, 0.009872, 0.033784 );
+	uv( 1.000000, 0.000000, 1.000000, 0.000000, 1.000000, 1.000000, 1.000000, 1.000000);
+	f3( 41, 65, 299, -0.999328, 0.014809, 0.033522 );
+	uv( 0.000000, 1.000000, 1.000000, 1.000000, 1.000000, 0.750000);
+	f3( 52, 38, 53, -0.999156, 0.037673, 0.016369 );
+	uv( 0.278948, 1.000000, 0.112281, 1.000000, 0.000000, 0.000000);
+	f4( 20, 52, 53, 65, -0.999787, 0.010669, -0.017650 );
+	uv( 0.723392, 1.000000, 0.278948, 1.000000, 0.000000, 0.000000, 1.000000, 0.000000);
+	f4( 3, 52, 42, 4, -0.999848, 0.016003, -0.006867 );
+	uv( 0.000000, 1.000000, 1.000000, 1.000000, 1.000000, 0.000000, 0.000000, 0.000000);
+	f3( 65, 41, 20, -0.999812, -0.013727, -0.013727 );
+	uv( 1.000000, 0.000000, 0.890059, 1.000000, 0.723392, 1.000000);
+	f4( 92, 27, 21, 89, -0.999626, -0.006864, -0.026465 );
+	uv( 0.330653, 0.926667, 0.330653, 0.926667, 0.330653, 0.073333, 0.330653, 0.073333);
+	f4( 35, 32, 33, 34, 0.000000, 0.000000, -1.000000 );
+	uv( 0.049663, 0.950337, 0.950337, 0.950337, 0.950337, 0.049663, 0.049663, 0.049663);
+	f4( 15, 31, 30, 14, 0.000000, 0.000000, -1.000000 );
+	uv( 0.000000, 1.000000, 1.000000, 1.000000, 1.000000, 0.000000, 0.000000, 0.000000);
+	f4( 12, 28, 31, 15, 0.000000, 0.000000, -1.000000 );
+	uv( 0.000000, 1.000000, 1.000000, 1.000000, 1.000000, 0.000000, 0.000000, 0.000000);
+	f4( 13, 29, 28, 12, 0.000000, 0.000000, -1.000000 );
+	uv( 0.000000, 1.000000, 1.000000, 1.000000, 1.000000, 0.000000, 0.000000, 0.000000);
+	f4( 14, 30, 29, 13, 0.000000, 0.901303, 0.433189 );
+	uv( 0.000000, 1.000000, 1.000000, 1.000000, 1.000000, 0.000000, 0.000000, 0.000000);
+	f4( 31, 35, 34, 30, 0.000000, 0.901303, 0.433189 );
+	uv( 0.000000, 1.000000, 1.000000, 1.000000, 1.000000, 0.000000, 0.000000, 0.000000);
+	f4( 28, 32, 35, 31, 0.000000, 1.000000, 0.000000 );
+	uv( 0.000000, 1.000000, 1.000000, 1.000000, 1.000000, 0.000000, 0.000000, 0.000000);
+	f4( 29, 33, 32, 28, 0.000000, 1.000000, 0.000000 );
+	uv( 0.000000, 1.000000, 1.000000, 1.000000, 1.000000, 0.000000, 0.000000, 0.000000);
+	f4( 30, 34, 33, 29, 0.000000, 0.000000, -1.000000 );
+	uv( 0.000000, 1.000000, 1.000000, 1.000000, 1.000000, 0.000000, 0.000000, 0.000000);
+	f4( 19, 93, 90, 87, 0.000000, 0.000000, -1.000000 );
+	uv( 0.098006, 0.060164, 0.098006, 0.939836, 0.008506, 0.918433, 0.008506, 0.081567);
+	f4( 21, 27, 93, 19, 0.000000, 0.000000, -1.000000 );
+	uv( 0.330653, 0.073333, 0.330653, 0.926667, 0.114052, 0.960000, 0.114052, 0.040000);
+	f3( 72, 71, 298, 0.000000, 0.000000, 0.000000 );
+	uv( 0.000000, 0.000000, 1.000000, 0.000000, 1.000000, 0.250000);
+	f4( 64, 81, 77, 60, 0.000000, 0.000000, 1.000000 );
+	uv( 0.000000, 0.000000, 0.000000, 0.000000, 1.000000, 0.000000, 1.000000, 0.000000);
+	f4( 72, 82, 86, 76, 0.000000, 0.000000, 1.000000 );
+	uv( 0.000000, 0.000000, 0.000000, 0.000000, 1.000000, 0.000000, 1.000000, 0.000000);
+	f4( 86, 83, 84, 85, 0.000000, 0.000000, 1.000000 );
+	uv( 0.000000, 0.000000, 1.000000, 0.000000, 1.000000, 1.000000, 0.000000, 1.000000);
+	f4( 76, 70, 71, 72, 0.000000, 0.000000, 1.000000 );
+	uv( 0.000000, 1.000000, 1.000000, 1.000000, 1.000000, 0.000000, 0.000000, 0.000000);
+	f4( 66, 67, 75, 74, -1.000000, 0.000000, 0.000000 );
+	uv( 0.000000, 1.000000, 1.000000, 1.000000, 1.000000, 0.000000, 0.000000, 0.000000);
+	f4( 63, 80, 81, 64, -1.000000, 0.000000, 0.000000 );
+	uv( 0.000000, 1.000000, 0.000000, 1.000000, 0.000000, 0.000000, 0.000000, 0.000000);
+	f4( 62, 79, 80, 63, -1.000000, 0.000000, 0.000000 );
+	uv( 1.000000, 1.000000, 1.000000, 1.000000, 0.000000, 1.000000, 0.000000, 1.000000);
+	f4( 61, 78, 79, 62, -1.000000, 0.000000, 0.000000 );
+	uv( 1.000000, 0.000000, 1.000000, 0.000000, 1.000000, 1.000000, 1.000000, 1.000000);
+	f4( 39, 69, 68, 44, -1.000000, 0.000000, 0.000000 );
+	uv( 0.503283, 0.890059, 0.503283, 1.000000, 0.478854, 1.000000, 0.478854, 0.890059);
+	f4( 54, 88, 87, 53, -1.000000, 0.000000, 0.000000 );
+	uv( 0.104280, 0.000000, 0.098006, 0.060164, 0.008506, 0.081567, 0.000000, 0.000000);
+	f4( 46, 56, 57, 43, -1.000000, 0.000000, 0.000000 );
+	uv( 0.478854, 0.112281, 0.478854, 0.000000, 0.503283, 0.000000, 0.503283, 0.112281);
+	f4( 76, 86, 85, 75, -1.000000, 0.000000, 0.000000 );
+	uv( 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 1.000000, 0.000000, 1.000000);
+	f4( 43, 57, 58, 45, 0.000000, 0.000000, -1.000000 );
+	uv( 0.503283, 0.112281, 0.503283, 0.000000, 0.584712, 0.000000, 0.584712, 0.112281);
+	f4( 37, 70, 69, 39, 0.000000, 0.000000, -1.000000 );
+	uv( 0.584712, 0.890059, 0.584712, 1.000000, 0.503283, 1.000000, 0.503283, 0.890059);
+	f4( 65, 90, 91, 66, 0.000000, 0.000000, -1.000000 );
+	uv( 0.000000, 1.000000, 0.008506, 0.918433, 0.098006, 0.939836, 0.104280, 1.000000);
+	f4( 53, 87, 90, 65, 0.000000, 0.000000, 0.000000 );
+	uv( 0.000000, 0.000000, 0.008506, 0.081567, 0.008506, 0.918433, 0.000000, 1.000000);
+	f4( 55, 89, 88, 54, 1.000000, 0.000000, 0.000000 );
+	uv( 0.348567, 0.000000, 0.330653, 0.073333, 0.114052, 0.040000, 0.104280, 0.000000);
+	f3( 47, 71, 50, 1.000000, 0.000000, 0.000000 );
+	uv( 0.869713, 0.890059, 0.869713, 1.000000, 0.873956, 0.967438);
+	f4( 37, 47, 71, 70, 1.000000, 0.000000, 0.000000 );
+	uv( 0.584712, 0.890059, 0.869713, 0.890059, 0.869713, 1.000000, 0.584712, 1.000000);
+	f4( 45, 58, 59, 48, 1.000000, 0.000000, 0.000000 );
+	uv( 0.584712, 0.112281, 0.584712, 0.000000, 0.869713, 0.000000, 0.869713, 0.112281);
+	f4( 52, 20, 51, 42, 0.000000, -1.000000, 0.000000 );
+	uv( 0.989261, 0.082423, 0.989261, 0.917577, 0.880452, 0.917577, 0.880452, 0.082423);
+	f3( 78, 77, 81, 0.000000, -1.000000, 0.000000 );
+	uv( 1.000000, 1.000000, 1.000000, 0.000000, 0.000000, 0.000000);
+	f4( 80, 79, 78, 81, 0.000000, -1.000000, 0.000000 );
+	uv( 0.000000, 1.000000, 1.000000, 1.000000, 1.000000, 0.000000, 0.000000, 0.000000);
+	f4( 62, 54, 53, 61, 0.000000, -1.000000, 0.000000 );
+	uv( 0.000000, 1.000000, 1.000000, 1.000000, 1.000000, 0.000000, 0.000194, 0.000185);
+	f4( 63, 55, 54, 62, 0.000000, -1.000000, 0.000000 );
+	uv( 0.000000, 1.000000, 1.000000, 1.000000, 1.000000, 0.000000, 0.000000, 0.000000);
+	f4( 57, 56, 55, 63, 0.000000, -1.000000, 0.000000 );
+	uv( 0.000000, 0.999887, 1.000000, 1.000000, 1.000000, 0.000000, 0.000260, 0.000235);
+	f4( 57, 63, 64, 58, 0.000000, -1.000000, 0.000000 );
+	uv( 0.000000, 1.000000, 1.000000, 1.000000, 1.000000, 0.000000, 0.000000, 0.000000);
+	f4( 58, 64, 60, 59, 0.000000, -1.000000, 0.000000 );
+	uv( 0.000000, 0.000000, 1.000000, 0.000000, 1.000000, 1.000000, 0.000000, 1.000000);
+	f4( 61, 53, 59, 60, -1.000000, 0.000000, 0.000000 );
+	uv( 0.000000, 1.000000, 1.000000, 1.000000, 1.000000, 0.000000, 0.000000, 0.000000);
+	f3( 83, 86, 82, -1.000000, 0.000000, 0.000000 );
+	uv( 1.000000, 1.000000, 1.000000, 0.000000, 0.000000, 0.000000);
+	f4( 40, 44, 68, 67, -1.000000, 0.000000, 0.000000 );
+	uv( 0.000000, 1.000000, 1.000000, 1.000000, 1.000000, 0.000000, 0.000000, 0.000000);
+	f4( 36, 55, 56, 46, -1.000000, 0.000000, 0.000000 );
+	uv( 0.000000, 1.000000, 1.000000, 1.000000, 1.000000, 0.000000, 0.000000, 0.000000);
+	f4( 292, 261, 23, 284, 0.000000, 0.000000, -1.000000 );
+	uv( 0.000000, 1.000000, 1.000000, 1.000000, 1.000000, 0.000000, 0.000000, 0.000000);
+	f4( 36, 18, 22, 40, 0.000000, 0.000000, -1.000000 );
+	uv( 0.000000, 1.000000, 1.000000, 1.000000, 1.000000, 0.000000, 0.000000, 0.000000);
+	f4( 67, 55, 36, 40, 0.000000, 0.000000, -1.000000 );
+	uv( 0.000000, 1.000000, 1.000000, 1.000000, 1.000000, 0.000000, 0.000000, 0.000000);
+	f4( 293, 100, 261, 292, 0.000000, 0.000000, -1.000000 );
+	uv( 0.000000, 1.000000, 1.000000, 1.000000, 1.000000, 0.000000, 0.000000, 0.000000);
+	f4( 38, 2, 1, 264, 0.000000, 1.000000, 0.000000 );
+	uv( 0.000000, 1.000000, 1.000000, 1.000000, 1.000000, 0.000000, 0.000000, 0.000000);
+	f4( 51, 5, 4, 42, 0.000000, 1.000000, 0.000000 );
+	uv( 0.000000, 1.000000, 1.000000, 1.000000, 1.000000, 0.000000, 0.000000, 0.000000);
+	f4( 220, 224, 227, 223, 0.000000, 1.000000, 0.000000 );
+	uv( 0.000000, 1.000000, 1.000000, 1.000000, 1.000000, 0.000000, 0.000000, 0.000000);
+	f4( 221, 225, 224, 220, 0.000000, 0.000000, 0.000000 );
+	uv( 0.000000, 1.000000, 1.000000, 1.000000, 1.000000, 0.000000, 0.000000, 0.000000);
+	f4( 167, 231, 228, 164, -1.000000, 0.000000, 0.000000 );
+	uv( 0.000000, 1.000000, 1.000000, 1.000000, 1.000000, 0.000000, 0.000000, 0.000000);
+	f4( 206, 210, 211, 207, -1.000000, 0.000000, 0.000000 );
+	uv( 0.000000, 1.000000, 1.000000, 1.000000, 1.000000, 0.000000, 0.000000, 0.000000);
+	f4( 165, 141, 267, 143, -1.000000, 0.000000, 0.000000 );
+	uv( 0.000000, 0.000000, 0.000000, 1.000000, 1.000000, 0.500000, 1.000000, 0.000000);
+	f4( 165, 229, 230, 166, -1.000000, 0.000000, 0.000000 );
+	uv( 0.000000, 1.000000, 1.000000, 1.000000, 1.000000, 0.000000, 0.000000, 0.000000);
+	f3( 271, 198, 192, -1.000000, 0.000000, 0.000000 );
+	uv( 0.000000, 0.250000, 1.000000, 0.000000, 0.000000, 0.000000);
+	f4( 166, 230, 231, 167, -1.000000, 0.000000, 0.000000 );
+	uv( 0.000000, 1.000000, 1.000000, 1.000000, 1.000000, 0.000000, 0.000000, 0.000000);
+	f4( 297, 280, 132, 241, -1.000000, 0.000000, 0.000000 );
+	uv( 0.191258, 0.112741, 0.191257, 0.000000, 0.143443, 0.000000, 0.143443, 0.112741);
+	f3( 297, 282, 280, -1.000000, 0.000000, 0.000000 );
+	uv( 0.191258, 0.112741, 0.215165, 0.112741, 0.191257, 0.000000);
+	f3( 293, 292, 150, 0.000000, -1.000000, 0.000000 );
+	uv( 0.221141, 0.894864, 0.203211, 0.894864, 0.239072, 1.000000);
+	f4( 245, 150, 151, 244, 0.000000, -1.000000, 0.000000 );
+	uv( 0.239072, 0.894864, 0.239072, 1.000000, 0.298840, 1.000000, 0.298840, 0.894864);
+	f4( 236, 134, 133, 243, 0.000000, -1.000000, 0.000000 );
+	uv( 0.298840, 0.112741, 0.298840, 0.000000, 0.239072, 0.000000, 0.239072, 0.112741);
+	f4( 292, 291, 149, 150, 0.000000, -1.000000, 0.000000 );
+	uv( 0.203211, 0.894864, 0.191257, 0.894864, 0.143443, 1.000000, 0.239072, 1.000000);
+	f4( 244, 151, 152, 246, 0.000000, 0.000000, 1.000000 );
+	uv( 0.298840, 0.894864, 0.298840, 1.000000, 0.370561, 1.000000, 0.370561, 0.894864);
+	f4( 135, 295, 237, 136, 0.000000, 0.000000, 1.000000 );
+	uv( 0.000000, 1.000000, 1.000000, 1.000000, 1.000000, 0.000000, 0.000000, 0.000000);
+	f4( 246, 152, 153, 247, 0.000000, 0.000000, 1.000000 );
+	uv( 0.370561, 0.894864, 0.370561, 1.000000, 0.418376, 1.000000, 0.418376, 0.894864);
+	f4( 239, 137, 136, 237, 0.000000, 0.000000, 1.000000 );
+	uv( 0.490097, 0.112741, 0.490097, 0.000000, 0.418376, 0.000000, 0.418376, 0.112741);
+	f4( 247, 153, 154, 254, 0.000000, 1.000000, 0.000000 );
+	uv( 0.418376, 0.894864, 0.418376, 1.000000, 0.490097, 1.000000, 0.490097, 0.894864);
+	f4( 240, 138, 137, 239, 0.000000, 1.000000, 0.000000 );
+	uv( 0.549865, 0.112741, 0.549865, 0.000000, 0.490097, 0.000000, 0.490097, 0.112741);
+	f4( 254, 154, 155, 256, 0.000000, 1.000000, 0.000000 );
+	uv( 0.490097, 0.894864, 0.490097, 1.000000, 0.549865, 1.000000, 0.549865, 0.894864);
+	f4( 264, 139, 138, 240, 0.000000, 1.000000, 0.000000 );
+	uv( 0.645494, 0.112741, 0.657448, 0.000000, 0.549865, 0.000000, 0.549865, 0.112741);
+	f4( 139, 264, 265, 253, 0.000000, 1.000000, 0.000000 );
+	uv( 0.657448, 0.000000, 0.645494, 0.112741, 0.645494, 0.336205, 0.657448, 0.336205);
+	f4( 266, 256, 155, 156, 0.000000, 1.000000, 0.000000 );
+	uv( 0.645494, 0.894864, 0.549865, 0.894864, 0.549865, 1.000000, 0.657448, 1.000000);
+	f4( 156, 257, 255, 266, 0.000000, 1.000000, 0.000000 );
+	uv( 0.657448, 1.000000, 0.657448, 0.671400, 0.645494, 0.671400, 0.645494, 0.894864);
+	f4( 260, 140, 139, 253, 0.000000, 1.000000, 0.000000 );
+	uv( 0.693308, 0.336205, 0.693308, 0.000000, 0.657448, 0.000000, 0.657448, 0.336205);
+	f4( 257, 156, 157, 251, -1.000000, 0.000000, 0.000000 );
+	uv( 0.657448, 0.671400, 0.657448, 1.000000, 0.693308, 1.000000, 0.693308, 0.671400);
+	f4( 259, 141, 140, 260, -1.000000, 0.000000, 0.000000 );
+	uv( 0.717216, 0.336205, 0.717216, 0.000000, 0.693308, 0.000000, 0.693308, 0.336205);
+	f4( 251, 157, 158, 250, -1.000000, 0.000000, 0.000000 );
+	uv( 0.693308, 0.671400, 0.693308, 1.000000, 0.717216, 1.000000, 0.717216, 0.671400);
+	f4( 250, 158, 159, 252, -1.000000, 0.000000, 0.000000 );
+	uv( 0.717216, 0.671400, 0.717216, 1.000000, 0.729169, 1.000000, 0.729169, 0.671400);
+	f4( 262, 142, 141, 259, 0.000000, -1.000000, 0.000000 );
+	uv( 0.729169, 0.336205, 0.729169, 0.000000, 0.717216, 0.000000, 0.717216, 0.336205);
+	f4( 184, 212, 214, 186, 0.000000, -1.000000, 0.000000 );
+	uv( 0.000000, 1.000000, 1.000000, 1.000000, 1.000000, 0.000000, 0.000000, 0.000000);
+	f4( 222, 226, 225, 221, 0.000000, -1.000000, 0.000000 );
+	uv( 0.000000, 1.000000, 1.000000, 1.000000, 1.000000, 0.000000, 0.000000, 0.000000);
+	f4( 185, 213, 212, 184, 0.000000, -1.000000, 0.000000 );
+	uv( 0.000000, 1.000000, 1.000000, 1.000000, 1.000000, 0.000000, 0.000000, 0.000000);
+	f4( 195, 194, 193, 192, 0.000000, -0.969314, 0.245825 );
+	uv( 0.000000, 1.000000, 1.000000, 1.000000, 1.000000, 0.000000, 0.000000, 0.000000);
+	f4( 223, 227, 226, 222, 0.037038, -0.985523, 0.165447 );
+	uv( 0.000000, 1.000000, 1.000000, 1.000000, 1.000000, 0.000000, 0.000000, 0.000000);
+	f3( 152, 149, 169, 0.024681, -0.980989, 0.192486 );
+	uv( 1.000000, 1.000000, 1.000000, 0.000000, 0.000000, 0.000000);
+	f4( 151, 150, 149, 152, 0.000000, 0.000000, 0.000000 );
+	uv( 0.000000, 1.000000, 1.000000, 1.000000, 1.000000, 0.000000, 0.000000, 0.000000);
+	f4( 169, 149, 163, 171, 0.000000, -1.000000, 0.000000 );
+	uv( 0.000000, 1.000000, 1.000000, 1.000000, 1.000000, 0.000000, 0.000000, 0.000000);
+	f3( 132, 16, 24, 0.000000, -1.000000, 0.000000 );
+	uv( 0.000000, 1.000000, 0.250000, 1.000000, 1.000000, 0.750000);
+	f4( 145, 164, 165, 144, 0.000000, -1.000000, 0.000000 );
+	uv( 0.000000, 0.000000, 1.000000, 0.000000, 1.000000, 1.000000, 0.000000, 1.000000);
+	f3( 165, 143, 144, 0.000000, -1.000000, 0.000000 );
+	uv( 1.000000, 1.000000, 1.000000, 0.000000, 0.000000, 0.000000);
+	f3( 141, 142, 267, -1.000000, 0.000000, 0.000000 );
+	uv( 0.000000, 1.000000, 1.000000, 1.000000, 1.000000, 0.500000);
+	f4( 166, 140, 141, 165, -1.000000, 0.000000, 0.000000 );
+	uv( 0.000000, 1.000000, 1.000000, 1.000000, 1.000000, 0.000000, 0.000000, 0.000000);
+	f4( 136, 137, 138, 139, -1.000000, 0.000000, 0.000000 );
+	uv( 0.000000, 0.000000, 1.000000, 0.000000, 1.000000, 1.000000, 0.000000, 1.000000);
+	f3( 136, 139, 140, -1.000000, 0.000000, 0.000000 );
+	uv( 0.000000, 0.000000, 1.000000, 0.000000, 1.000000, 1.000000);
+	f3( 136, 140, 166, -1.000000, 0.000000, 0.000000 );
+	uv( 0.000000, 0.000000, 1.000000, 0.000000, 1.000000, 1.000000);
+	f4( 136, 166, 167, 135, -1.000000, 0.000000, 0.000000 );
+	uv( 0.000000, 0.000000, 1.000000, 0.000000, 1.000000, 1.000000, 0.000000, 1.000000);
+	f3( 132, 280, 135, -1.000000, 0.000000, 0.000000 );
+	uv( 0.000000, 1.000000, 0.500000, 1.000000, 0.000000, 0.000000);
+	f4( 131, 94, 290, 24, -1.000000, 0.000000, 0.000000 );
+	uv( 0.000000, 1.000000, 1.000000, 1.000000, 1.000000, 0.000000, 0.000000, 0.000000);
+	f3( 167, 132, 135, -1.000000, 0.000000, 0.000000 );
+	uv( 0.000000, 0.000000, 1.000000, 0.000000, 1.000000, 1.000000);
+	f4( 132, 167, 164, 146, -1.000000, 0.000000, 0.000000 );
+	uv( 0.000000, 0.000000, 1.000000, 0.000000, 1.000000, 1.000000, 0.000000, 1.000000);
+	f3( 145, 146, 164, -1.000000, 0.000000, 0.000000 );
+	uv( 1.000000, 1.000000, 1.000000, 0.000000, 0.000000, 0.000000);
+	f3( 162, 171, 163, -1.000000, 0.000000, 0.000000 );
+	uv( 0.000000, 0.000000, 1.000000, 0.000000, 1.000000, 1.000000);
+	f4( 170, 171, 162, 161, 0.000000, 0.000000, 1.000000 );
+	uv( 0.000000, 1.000000, 1.000000, 1.000000, 1.000000, 0.000000, 0.000000, 0.000000);
+	f3( 170, 161, 160, 0.000000, 0.000000, 1.000000 );
+	uv( 0.000000, 0.000000, 1.000000, 0.000000, 1.000000, 1.000000);
+	f4( 170, 160, 268, 158, 0.000000, 0.000000, 1.000000 );
+	uv( 0.000000, 0.000000, 1.000000, 0.000000, 1.000000, 0.500000, 0.000000, 1.000000);
+	f4( 170, 158, 157, 168, 0.000000, 0.000000, 1.000000 );
+	uv( 0.000000, 0.000000, 1.000000, 0.000000, 1.000000, 1.000000, 0.000000, 1.000000);
+	f3( 153, 168, 157, 0.000000, -1.000000, 0.000000 );
+	uv( 1.000000, 1.000000, 1.000000, 0.000000, 0.000000, 0.000000);
+	f3( 153, 157, 156, 0.000000, -1.000000, 0.000000 );
+	uv( 1.000000, 1.000000, 1.000000, 0.000000, 0.000000, 0.000000);
+	f4( 155, 154, 153, 156, 0.000000, -1.000000, 0.000000 );
+	uv( 0.000000, 1.000000, 1.000000, 1.000000, 1.000000, 0.000000, 0.000000, 0.000000);
+	f4( 153, 152, 169, 168, 0.000000, -1.000000, 0.000000 );
+	uv( 0.000000, 1.000000, 1.000000, 1.000000, 1.000000, 0.000000, 0.000000, 0.000000);
+	f4( 226, 227, 224, 225, 0.000000, 0.000000, 1.000000 );
+	uv( 0.229167, 0.770833, 0.770833, 0.770833, 0.770833, 0.229167, 0.229167, 0.229167);
+	f4( 231, 235, 232, 228, 0.000000, 0.000000, 1.000000 );
+	uv( 0.000000, 1.000000, 0.229167, 0.770833, 0.229167, 0.229167, 0.000000, 0.000000);
+	f4( 230, 234, 235, 231, 0.000000, 0.000000, 1.000000 );
+	uv( 1.000000, 1.000000, 0.770833, 0.770833, 0.229167, 0.770833, 0.000000, 1.000000);
+	f4( 229, 233, 234, 230, 0.000000, 0.000000, 1.000000 );
+	uv( 1.000000, 0.000000, 0.770833, 0.229167, 0.770833, 0.770833, 1.000000, 1.000000);
+	f4( 228, 232, 233, 229, 0.000000, 0.000000, 1.000000 );
+	uv( 0.000000, 0.000000, 0.229167, 0.229167, 0.770833, 0.229167, 1.000000, 0.000000);
+	f4( 235, 174, 173, 232, 0.000000, 0.000000, 1.000000 );
+	uv( 0.229167, 0.770833, 0.229167, 0.770833, 0.229167, 0.229167, 0.229167, 0.229167);
+	f4( 234, 175, 174, 235, 0.000000, 0.000000, 1.000000 );
+	uv( 0.770833, 0.770833, 0.770833, 0.770833, 0.229167, 0.770833, 0.229167, 0.770833);
+	f4( 233, 172, 175, 234, 0.000000, 0.000000, 1.000000 );
+	uv( 0.770833, 0.229167, 0.770833, 0.229167, 0.770833, 0.770833, 0.770833, 0.770833);
+	f4( 232, 173, 172, 233, 1.000000, 0.000000, 0.000000 );
+	uv( 0.229167, 0.229167, 0.229167, 0.229167, 0.770833, 0.229167, 0.770833, 0.229167);
+	f4( 216, 217, 219, 218, 1.000000, 0.000000, 0.000000 );
+	uv( 0.229167, 0.229167, 0.770833, 0.229167, 0.770833, 0.770833, 0.229167, 0.770833);
+	f4( 178, 180, 183, 179, 1.000000, 0.000000, 0.000000 );
+	uv( 0.000000, 0.000000, 0.229167, 0.229167, 0.229167, 0.770833, 0.000000, 1.000000);
+	f4( 179, 183, 182, 176, 1.000000, 0.000000, 0.000000 );
+	uv( 0.000000, 1.000000, 0.229167, 0.770833, 0.770833, 0.770833, 1.000000, 1.000000);
+	f4( 176, 182, 181, 177, 1.000000, 0.000000, 0.000000 );
+	uv( 1.000000, 1.000000, 0.770833, 0.770833, 0.770833, 0.229167, 1.000000, 0.000000);
+	f4( 177, 181, 180, 178, 1.000000, 0.000000, 0.000000 );
+	uv( 1.000000, 0.000000, 0.770833, 0.229167, 0.229167, 0.229167, 0.000000, 0.000000);
+	f4( 180, 184, 186, 183, 1.000000, 0.000000, 0.000000 );
+	uv( 0.229167, 0.229167, 0.229167, 0.229167, 0.229167, 0.770833, 0.229167, 0.770833);
+	f4( 181, 185, 184, 180, 1.000000, 0.000000, 0.000000 );
+	uv( 0.770833, 0.229167, 0.770833, 0.229167, 0.229167, 0.229167, 0.229167, 0.229167);
+	f4( 182, 187, 185, 181, 1.000000, 0.000000, 0.000000 );
+	uv( 0.770833, 0.770833, 0.770833, 0.770833, 0.770833, 0.229167, 0.770833, 0.229167);
+	f4( 183, 186, 187, 182, 1.000000, 0.000000, 0.000000 );
+	uv( 0.229167, 0.770833, 0.229167, 0.770833, 0.770833, 0.770833, 0.770833, 0.770833);
+	f4( 187, 215, 213, 185, 1.000000, 0.000000, 0.000000 );
+	uv( 0.000000, 1.000000, 1.000000, 1.000000, 1.000000, 0.000000, 0.000000, 0.000000);
+	f4( 186, 214, 215, 187, 1.000000, 0.000000, 0.000000 );
+	uv( 0.000000, 1.000000, 1.000000, 1.000000, 1.000000, 0.000000, 0.000000, 0.000000);
+	f4( 212, 216, 218, 214, 0.000000, -1.000000, 0.000000 );
+	uv( 0.000000, 1.000000, 1.000000, 1.000000, 1.000000, 0.000000, 0.000000, 0.000000);
+	f4( 213, 217, 216, 212, 0.000000, -1.000000, 0.000000 );
+	uv( 0.000000, 1.000000, 1.000000, 1.000000, 1.000000, 0.000000, 0.000000, 0.000000);
+	f3( 268, 159, 158, 0.000000, -0.923880, -0.382683 );
+	uv( 1.000000, 0.500000, 1.000000, 1.000000, 0.000000, 1.000000);
+	f4( 146, 145, 194, 195, 0.000000, -0.923880, -0.382683 );
+	uv( 0.000000, 1.000000, 1.000000, 1.000000, 1.000000, 0.000000, 0.000000, 0.000000);
+	f4( 145, 144, 193, 194, 0.000000, -0.382683, -0.923880 );
+	uv( 0.000000, 1.000000, 1.000000, 1.000000, 1.000000, 0.000000, 0.000000, 0.000000);
+	f4( 193, 144, 143, 192, 0.000000, -0.382683, -0.923880 );
+	uv( 0.000000, 1.000000, 1.000000, 1.000000, 1.000000, 0.000000, 0.000000, 0.000000);
+	f4( 190, 189, 162, 163, 0.000000, 0.000000, -1.000000 );
+	uv( 0.000000, 1.000000, 1.000000, 1.000000, 1.000000, 0.000000, 0.000000, 0.000000);
+	f4( 162, 189, 188, 161, 0.000000, 0.000000, -1.000000 );
+	uv( 0.000000, 1.000000, 1.000000, 1.000000, 1.000000, 0.000000, 0.000000, 0.000000);
+	f4( 188, 191, 160, 161, 0.000000, -0.923880, -0.382683 );
+	uv( 0.000000, 1.000000, 1.000000, 1.000000, 1.000000, 0.000000, 0.000000, 0.000000);
+	f4( 191, 188, 189, 190, 0.000000, -0.923880, -0.382683 );
+	uv( 0.000000, 1.000000, 1.000000, 1.000000, 1.000000, 0.000000, 0.000000, 0.000000);
+	f4( 209, 208, 211, 210, 0.000000, -0.382683, -0.923880 );
+	uv( 0.167653, 0.832347, 0.832347, 0.832347, 0.832347, 0.167653, 0.167653, 0.167653);
+	f4( 271, 269, 197, 198, 0.000000, -0.382683, -0.923880 );
+	uv( 0.000000, 0.250000, 0.000000, 0.750000, 1.000000, 1.000000, 1.000000, 0.000000);
+	f4( 190, 196, 197, 191, 0.000000, 0.000000, -1.000000 );
+	uv( 0.000000, 1.000000, 0.000000, 1.000000, 1.000000, 0.000000, 0.000000, 0.000000);
+	f4( 195, 199, 196, 190, 0.000000, 0.000000, -1.000000 );
+	uv( 0.000000, 1.000000, 1.000000, 1.000000, 0.000000, 1.000000, 0.000000, 1.000000);
+	f4( 192, 198, 199, 195, 0.000000, 0.000000, -1.000000 );
+	uv( 0.000000, 1.000000, 1.000000, 1.000000, 1.000000, 0.000000, 0.000000, 0.000000);
+	f4( 197, 201, 202, 198, 0.000000, 0.000000, -1.000000 );
+	uv( 0.000000, 1.000000, 1.000000, 1.000000, 1.000000, 0.000000, 0.000000, 0.000000);
+	f4( 196, 200, 201, 197, 0.000000, 0.000000, 1.000000 );
+	uv( 0.000000, 1.000000, 1.000000, 1.000000, 1.000000, 0.000000, 0.000000, 0.000000);
+	f4( 199, 203, 200, 196, 0.000000, 0.000000, 1.000000 );
+	uv( 0.000000, 1.000000, 1.000000, 1.000000, 1.000000, 0.000000, 0.000000, 0.000000);
+	f4( 198, 202, 203, 199, 0.000000, 0.000000, 1.000000 );
+	uv( 0.000000, 1.000000, 1.000000, 1.000000, 1.000000, 0.000000, 0.000000, 0.000000);
+	f4( 201, 205, 206, 202, 0.000000, 0.000000, 1.000000 );
+	uv( 0.000000, 1.000000, 1.000000, 1.000000, 1.000000, 0.000000, 0.000000, 0.000000);
+	f4( 200, 204, 205, 201, 0.000000, 0.076104, 0.997100 );
+	uv( 0.000000, 1.000000, 1.000000, 1.000000, 1.000000, 0.000000, 0.000000, 0.000000);
+	f4( 203, 207, 204, 200, 0.000000, 0.000000, 1.000000 );
+	uv( 0.000000, 1.000000, 1.000000, 1.000000, 1.000000, 0.000000, 0.000000, 0.000000);
+	f4( 202, 206, 207, 203, 0.000000, 0.000000, 1.000000 );
+	uv( 0.000000, 1.000000, 1.000000, 1.000000, 1.000000, 0.000000, 0.000000, 0.000000);
+	f4( 205, 209, 210, 206, 0.000000, 0.076104, 0.997100 );
+	uv( 0.000000, 1.000000, 1.000000, 1.000000, 1.000000, 0.000000, 0.000000, 0.000000);
+	f4( 204, 208, 209, 205, 0.025441, 0.076153, 0.996772 );
+	uv( 0.000000, 1.000000, 1.000000, 1.000000, 1.000000, 0.000000, 0.000000, 0.000000);
+	f4( 207, 211, 208, 204, 0.000000, 0.076104, 0.997100 );
+	uv( 0.000000, 1.000000, 1.000000, 1.000000, 1.000000, 0.000000, 0.000000, 0.000000);
+	f4( 289, 288, 285, 286, 0.000000, 0.076104, 0.997100 );
+	uv( 0.500000, 0.000000, 0.000000, 0.500000, 1.000000, 0.500000, 1.000000, 0.000000);
+	f4( 149, 132, 24, 274, -0.025441, 0.076153, 0.996772 );
+	uv( 0.000000, 0.000000, 0.000000, 1.000000, 1.000000, 0.750000, 1.000000, 0.500000);
+	f4( 280, 133, 134, 135, -0.227336, -0.033900, 0.973226 );
+	uv( 0.500000, 1.000000, 1.000000, 1.000000, 1.000000, 0.000000, 0.000000, 0.000000);
+	f4( 278, 26, 146, 275, -0.347221, -0.009902, 0.937731 );
+	uv( 0.000000, 1.000000, 1.000000, 1.000000, 1.000000, 0.000000, 0.000000, 0.000000);
+	f3( 274, 281, 149, 0.038172, 0.057130, 0.997637 );
+	uv( 1.000000, 0.500000, 0.250000, 0.000000, 0.000000, 0.000000);
+	f4( 287, 289, 25, 281, 0.025441, 0.076153, 0.996772 );
+	uv( 0.000000, 1.000000, 1.000000, 1.000000, 1.000000, 0.000000, 0.000000, 0.000000);
+	f4( 249, 278, 275, 104, -0.707107, -0.017993, 0.706878 );
+	uv( 0.000000, 1.000000, 1.000000, 1.000000, 1.000000, 0.000000, 0.000000, 0.000000);
+	f3( 288, 289, 287, -0.347221, -0.009902, 0.937731 );
+	uv( 0.000000, 0.500000, 0.500000, 0.000000, 0.000000, 0.000000);
+	f4( 147, 130, 275, 272, -0.227336, -0.033900, 0.973226 );
+	uv( 0.000000, 1.000000, 1.000000, 1.000000, 1.000000, 0.000000, 0.000000, 0.000000);
+	f4( 284, 283, 241, 248, -0.382785, -0.050933, 0.922432 );
+	uv( 0.000000, 0.500000, 1.000000, 0.500000, 1.000000, 0.000000, 0.000000, 0.000000);
+	f3( 290, 94, 249, -0.382785, -0.050933, 0.922432 );
+	uv( 0.000000, 0.750000, 0.000000, 1.000000, 0.500000, 1.000000);
+	f4( 238, 95, 110, 105, -0.227336, -0.033900, 0.973226 );
+	uv( 0.107697, 0.526924, 0.107697, 0.723076, 0.892303, 0.723076, 0.892303, 0.526924);
+	f4( 242, 290, 249, 104, 0.227336, -0.033900, 0.973226 );
+	uv( 1.000000, 0.750000, 0.000000, 0.750000, 0.500000, 1.000000, 1.000000, 1.000000);
+	f3( 274, 148, 281, 0.382785, -0.050933, 0.922432 );
+	uv( 1.000000, 0.500000, 1.000000, 0.000000, 0.250000, 0.000000);
+	f4( 146, 26, 16, 132, 0.227336, -0.033900, 0.973226 );
+	uv( 0.000000, 1.000000, 1.000000, 1.000000, 1.000000, 0.000000, 0.000000, 0.000000);
+	f4( 284, 23, 17, 283, 0.347221, -0.009902, 0.937731 );
+	uv( 0.000000, 0.000000, 1.000000, 0.000000, 1.000000, 1.000000, 0.000000, 1.000000);
+	f4( 22, 258, 44, 40, 0.707107, -0.017993, 0.706878 );
+	uv( 0.000000, 1.000000, 1.000000, 1.000000, 1.000000, 0.000000, 0.000000, 0.000000);
+	f4( 294, 258, 100, 293, 0.382785, -0.050933, 0.922432 );
+	uv( 0.000000, 1.000000, 1.000000, 1.000000, 1.000000, 0.000000, 0.000000, 0.000000);
+	f4( 274, 288, 287, 148, -0.025441, 0.076153, 0.996772 );
+	uv( 0.000000, 1.000000, 1.000000, 1.000000, 1.000000, 0.000000, 0.000000, 0.000000);
+	f4( 107, 285, 288, 274, -0.038172, 0.057130, 0.997637 );
+	uv( 0.000000, 1.000000, 1.000000, 1.000000, 1.000000, 0.000000, 0.000000, 0.000000);
+	f4( 147, 286, 285, 107, 0.347221, -0.009902, 0.937731 );
+	uv( 0.000000, 1.000000, 1.000000, 1.000000, 1.000000, 0.000000, 0.000000, 0.000000);
+	f4( 273, 242, 104, 130, 0.227336, -0.033900, 0.973226 );
+	uv( 0.000000, 1.000000, 1.000000, 1.000000, 1.000000, 0.000000, 0.000000, 0.000000);
+	f4( 289, 286, 272, 276, 0.000000, 0.076104, 0.997100 );
+	uv( 0.000000, 1.000000, 1.000000, 1.000000, 1.000000, 0.000000, 0.000000, 0.000000);
+	f4( 16, 26, 249, 94, -0.038172, 0.057130, 0.997637 );
+	uv( 0.000000, 1.000000, 1.000000, 1.000000, 1.000000, 0.000000, 0.000000, 0.000000);
+	f4( 274, 238, 105, 107, -0.025441, 0.076153, 0.996772 );
+	uv( 1.000000, 0.500000, 0.926539, 0.507871, 1.000000, 0.000000, 0.000000, 0.000000);
+	f4( 24, 95, 238, 274, 0.000000, 0.000000, 0.000000 );
+	uv( 1.000000, 0.750000, 0.922269, 0.713910, 0.926539, 0.507871, 1.000000, 0.500000);
+	f4( 273, 110, 95, 24, 0.000000, 0.076104, 0.997100 );
+	uv( 0.000000, 1.000000, 1.000000, 1.000000, 0.922269, 0.713910, 1.000000, 0.750000);
+	f4( 107, 105, 110, 273, 0.025441, 0.076153, 0.996772 );
+	uv( 0.000000, 1.000000, 1.000000, 1.000000, 1.000000, 0.000000, 0.000000, 0.000000);
+	f4( 239, 237, 295, 236, 0.038172, 0.057130, 0.997637 );
+	uv( 0.000000, 0.000000, 1.000000, 0.000000, 1.000000, 1.000000, 0.000000, 1.000000);
+	f4( 97, 106, 100, 258, 0.000000, 0.000000, 0.000000 );
+	uv( 0.500000, 1.000000, 0.750000, 1.000000, 0.750000, 0.000000, 0.500000, 0.000000);
+	f4( 37, 258, 294, 245, 0.000000, 0.000000, -1.000000 );
+	uv( 0.000000, 1.000000, 1.000000, 1.000000, 1.000000, 0.000000, 0.000000, 0.000000);
+	f4( 106, 270, 261, 100, 0.000000, 0.000000, -1.000000 );
+	uv( 0.750000, 1.000000, 0.875000, 1.000000, 0.875000, 0.000000, 0.750000, 0.000000);
+	f4( 236, 295, 135, 134, 0.000000, -0.382683, -0.923880 );
+	uv( 0.000000, 0.000000, 1.000000, 0.000000, 1.000000, 1.000000, 0.000000, 1.000000);
+	f4( 44, 258, 37, 39, 0.000000, -0.382683, -0.923880 );
+	uv( 0.000000, 1.000000, 1.000000, 1.000000, 1.000000, 0.000000, 0.000000, 0.000000);
+	f3( 41, 299, 296, 0.000000, 0.000000, 1.000000 );
+	uv( 0.000000, 1.000000, 1.000000, 0.750000, 1.000000, 0.500000);
+	f3( 72, 298, 296, 0.000000, 0.264156, 0.964480 );
+	uv( 0.000000, 0.000000, 1.000000, 0.250000, 1.000000, 0.500000);
+	f4( 18, 36, 46, 97, 0.000000, 0.000000, 1.000000 );
+	uv( 0.000000, 1.000000, 1.000000, 1.000000, 1.000000, 0.000000, 0.000000, 0.000000);
+	f4( 282, 243, 133, 280, 0.000000, 0.000000, 0.000000 );
+	uv( 0.215165, 0.112741, 0.239072, 0.112741, 0.239072, 0.000000, 0.191257, 0.000000);
+	f4( 47, 41, 296, 298, 0.000000, 0.004455, 0.999990 );
+	uv( 0.000000, 0.000000, 0.000000, 1.000000, 1.000000, 0.500000, 1.000000, 0.250000);
+	f3( 298, 71, 47, 0.000000, 0.000000, 1.000000 );
+	uv( 1.000000, 0.250000, 1.000000, 0.000000, 0.000000, 0.000000);
+	f4( 72, 296, 299, 73, 0.000000, 0.264156, 0.964480 );
+	uv( 0.000000, 0.000000, 1.000000, 0.500000, 1.000000, 0.750000, 0.000000, 1.000000);
+	f3( 299, 65, 73, 0.000000, 0.000000, 0.000000 );
+	uv( 1.000000, 0.750000, 1.000000, 1.000000, 0.000000, 1.000000);
+	f4( 297, 283, 17, 270, 0.000000, 0.004455, 0.999990 );
+	uv( 0.000000, 1.000000, 1.000000, 1.000000, 1.000000, 0.000000, 0.000000, 0.000000);
+	f4( 282, 297, 270, 106, 0.000000, 0.004455, 0.999990 );
+	uv( 0.000000, 1.000000, 1.000000, 1.000000, 1.000000, 0.000000, 0.000000, 0.000000);
+	f4( 243, 282, 106, 97, 0.000000, 0.264156, 0.964480 );
+	uv( 0.000000, 1.000000, 1.000000, 1.000000, 1.000000, 0.000000, 0.000000, 0.000000);
+	f3( 45, 243, 97, 0.000000, 0.264156, 0.964480 );
+	uv( 1.000000, 1.000000, 1.000000, 0.000000, 0.000000, 0.000000);
+	f4( 46, 43, 45, 97, -0.999926, 0.001808, 0.012015 );
+	uv( 0.000000, 1.000000, 1.000000, 1.000000, 1.000000, 0.000000, 0.000000, 0.000000);
+
+	this.computeCentroids();
+	this.computeNormals(true);
+
+	scope.colors = {};
+	scope.selections = {};
+	scope.selections["c1"] = [0, 3, 10, 13, 18, 25, 28, 29, 32, 33, 37, 38, 41, 42, 43, 45, 48, 49, 50, 54, 56, 57, 58, 59, 60, 61, 62, 63, 64, 69, 73, 74, 75, 76, 116, 117, 120, 121, 122, 123, 125, 154, 157, 184, 189, 190, 191, 192, 193, 198, 199, 200, 201, 204, 205, 214, 219, 220, 221, 222, 227, 228, 229, 245, 246, 258, 260, 263, 266, 272, 275, 276];
+	scope.selections["c2"] = [5, 7, 8, 11, 12, 15, 20, 21, 22, 24, 26, 27, 31, 39, 71, 77, 78, 79, 80, 81, 82, 119, 126, 128, 130, 131, 132, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 155, 156, 158, 159, 160, 162, 163, 164, 165, 166, 167, 168, 169, 170, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 202, 203, 206, 207, 208, 209, 210, 211, 212, 213, 215, 216, 217, 218, 223, 224, 225, 226, 232, 233, 239, 241, 244, 261, 262, 267, 273];
+	scope.selections["c3"] = [1, 2, 23, 30, 34, 35, 36, 40, 46, 47, 51, 52, 53, 65, 84, 85, 86, 89, 90, 91, 95, 105, 106, 113, 124, 127, 129, 161, 171, 185, 186, 187, 188, 194, 195, 196, 197, 230, 231, 234, 235, 236, 237, 238, 240, 242, 243, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 259, 274];
+	scope.selections["c4"] = [4, 6, 9, 14, 16, 17, 19, 44, 55, 66, 67, 68, 70, 72, 83, 87, 88, 92, 93, 94, 96, 97, 98, 99, 100, 101, 102, 103, 104, 107, 108, 109, 110, 111, 112, 114, 115, 118, 133, 264, 265, 268, 269, 270, 271];
+	scope.colors["c1"] = 0x000000;
+	scope.colors["c2"] = 0x028fd4;
+	scope.colors["c3"] = 0xe0dc0a;
+	scope.colors["c4"] = 0xed3537;
+
+	scope.autoColor = function(){
+		for(var s in this.selections){
+			for(var i = 0 ; i < this.selections[s].length; i++) this.faces[this.selections[s][i]].material = [new THREE.MeshBasicMaterial({color:this.colors[s]})];
+		}
+	}
+
+	scope.getPosition = function(){	return new THREE.Vector3(0.01657867431640625, -118.11475372314453, 9.1618766784667969);	}
+
+	scope.getRotation = function(){	return new THREE.Vector3(0.0, 0.0, 0.0);	}
+
+	scope.getScale = function(){	return new THREE.Vector3(0.5, 0.5, 0.5);	}
+
+	function v( x, y, z ) {
+
+		scope.vertices.push( new THREE.Vertex( new THREE.Vector3( x, y, z ) ) );
+
+	}
+
+	function f3( a, b, c, nx, ny, nz ) {
+
+		scope.faces.push( new THREE.Face3( a, b, c, nx && ny && nz ? new THREE.Vector3( nx, ny, nz ) : null ) );
+
+	}
+
+	function f4( a, b, c, d, nx, ny, nz ) {
+
+		scope.faces.push( new THREE.Face4( a, b, c, d, nx && ny && nz ? new THREE.Vector3( nx, ny, nz ) : null ) );
+
+	}
+
+	function uv( u1, v1, u2, v2, u3, v3, u4, v4 ) {
+
+		var uv = [];
+		uv.push( new THREE.UV( u1, v1 ) );
+		uv.push( new THREE.UV( u2, v2 ) );
+		uv.push( new THREE.UV( u3, v3 ) );
+		if ( u4 && v4 ) uv.push( new THREE.UV( u4, v4 ) );
+		scope.uvs.push( uv );
+	}
+
+}
+
+BotUpperBody.prototype = new THREE.Geometry();
+BotUpperBody.prototype.constructor = BotUpperBody;

+ 87 - 0
examples/geometry/Box6.js

@@ -0,0 +1,87 @@
+var Box6 = function () {
+
+	var scope = this;
+
+	THREE.Geometry.call(this);
+
+	v( -100.000000, 100.000000, -100.000000 );
+	v( -100.000000, -100.000000, -100.000000 );
+	v( 100.000000, 100.000000, -100.000000 );
+	v( 100.000000, -100.000000, -100.000000 );
+	v( 100.000000, 100.000000, 100.000000 );
+	v( 100.000000, -100.000000, 100.000000 );
+	v( -100.000000, 100.000000, 100.000000 );
+	v( -100.000000, -100.000000, 100.000000 );
+
+	f4( 2, 3, 1, 0, 0.000000, 0.000000, 1.000000 );
+	uv( 1.000000, 1.000000, 1.000000, 0.000000, 0.000000, 0.000000, 0.000000, 1.000000);
+	f4( 4, 5, 3, 2, 0.000000, 0.000000, 1.000000 );
+	uv( 1.000000, 1.000000, 1.000000, 0.000000, 0.000000, 0.000000, 0.000000, 1.000000);
+	f4( 6, 7, 5, 4, 0.000000, 0.000000, 1.000000 );
+	uv( 1.000000, 1.000000, 1.000000, 0.000000, 0.000000, 0.000000, 0.000000, 1.000000);
+	f4( 0, 1, 7, 6, 0.000000, 0.000000, 1.000000 );
+	uv( 1.000000, 1.000000, 1.000000, 0.000000, 0.000000, 0.000000, 0.000000, 1.000000);
+	f4( 3, 5, 7, 1, -1.000000, 0.000000, 0.000000 );
+	uv( 1.000000, 1.000000, 1.000000, 0.000000, 0.000000, 0.000000, 0.000000, 1.000000);
+	f4( 4, 2, 0, 6, -1.000000, 0.000000, 0.000000 );
+	uv( 1.000000, 1.000000, 1.000000, 0.000000, 0.000000, 0.000000, 0.000000, 1.000000);
+
+	scope.colors = {};
+	scope.selections = {};
+	scope.selections["top"] = [4];
+	scope.selections["bottom"] = [5];
+	scope.selections["front"] = [2];
+	scope.selections["back"] = [0];
+	scope.selections["left"] = [3];
+	scope.selections["right"] = [1];
+	scope.colors["top"] = 0xb20000;
+	scope.colors["bottom"] = 0x00b200;
+	scope.colors["front"] = 0x0000b2;
+	scope.colors["back"] = 0x00b2b2;
+	scope.colors["left"] = 0xb200b2;
+	scope.colors["right"] = 0xb2b200;
+
+	scope.autoColor = function(){
+	    for(var s in this.selections){
+			for(var i = 0 ; i < this.selections[s].length; i++) this.faces[this.selections[s][i]].material = [ new THREE.MeshBasicMaterial( { color: this.colors[s], wireframe: false } ) ];
+		}
+	}
+
+	scope.getPosition = function(){	return new THREE.Vector3(0.0, 0.0, 0.0);	}
+
+	scope.getRotation = function(){	return new THREE.Vector3(0.0, 0.0, 0.0);	}
+
+	scope.getScale = function(){	return new THREE.Vector3(1.0, 1.0, 1.0);	}
+
+	function v( x, y, z ) {
+
+		scope.vertices.push( new THREE.Vertex( new THREE.Vector3( x, y, z ) ) );
+
+	}
+
+	function f3( a, b, c, nx, ny, nz ) {
+
+		scope.faces.push( new THREE.Face3( a, b, c, nx && ny && nz ? new THREE.Vector3( nx, ny, nz ) : null ) );
+
+	}
+
+	function f4( a, b, c, d, nx, ny, nz ) {
+
+		scope.faces.push( new THREE.Face4( a, b, c, d, nx && ny && nz ? new THREE.Vector3( nx, ny, nz ) : null ) );
+
+	}
+
+	function uv( u1, v1, u2, v2, u3, v3, u4, v4 ) {
+
+		var uv = [];
+		uv.push( new THREE.UV( u1, v1 ) );
+		uv.push( new THREE.UV( u2, v2 ) );
+		uv.push( new THREE.UV( u3, v3 ) );
+		if ( u4 && v4 ) uv.push( new THREE.UV( u4, v4 ) );
+		scope.uvs.push( uv );
+	}
+
+}
+
+Box6.prototype = new THREE.Geometry();
+Box6.prototype.constructor = Box6;

+ 70 - 0
examples/geometry/Dice.js

@@ -0,0 +1,70 @@
+var Dice = function () {
+
+	var scope = this;
+
+	THREE.Geometry.call(this);
+
+	v( -100.000000, 100.000000, -100.000000 );
+	v( -100.000000, -100.000000, -100.000000 );
+	v( 100.000000, 100.000000, -100.000000 );
+	v( 100.000000, -100.000000, -100.000000 );
+	v( 100.000000, 100.000000, 100.000000 );
+	v( 100.000000, -100.000000, 100.000000 );
+	v( -100.000000, 100.000000, 100.000000 );
+	v( -100.000000, -100.000000, 100.000000 );
+
+	f4( 2, 3, 1, 0, 0.000000, 0.000000, 1.000000 );
+	uv( 0.488325, 0.325550, 0.488325, 0.007784, 0.011675, 0.007784, 0.011675, 0.325550);
+	f4( 4, 5, 3, 2, 0.000000, 0.000000, 1.000000 );
+	uv( 0.988325, 0.325550, 0.988325, 0.007784, 0.511675, 0.007784, 0.511675, 0.325550);
+	f4( 6, 7, 5, 4, 0.000000, 0.000000, 1.000000 );
+	uv( 0.488325, 0.658883, 0.488325, 0.341117, 0.011675, 0.341117, 0.011675, 0.658883);
+	f4( 0, 1, 7, 6, 0.000000, 0.000000, 1.000000 );
+	uv( 0.988325, 0.658883, 0.988325, 0.341117, 0.511675, 0.341117, 0.511675, 0.658883);
+	f4( 3, 5, 7, 1, -1.000000, 0.000000, 0.000000 );
+	uv( 0.488325, 0.992216, 0.488325, 0.674450, 0.011675, 0.674450, 0.011675, 0.992216);
+	f4( 4, 2, 0, 6, -1.000000, 0.000000, 0.000000 );
+	uv( 0.988325, 0.992216, 0.988325, 0.674450, 0.511675, 0.674450, 0.511675, 0.992216);
+
+	scope.autoColor = function(){
+		this.colors = {};
+		this.selections = {};
+		var i = 0;
+		this.colors[""] = 0xcccccc;
+		for(var s in this.selections){
+			for(i = 0 ; i < this.selections[s].length; i++) this.faces[this.selections[s][i]].material = [ new THREE.MeshColorFillMaterial( this.colors[s],1) ];
+		}
+	}
+
+	function v( x, y, z ) {
+
+		scope.vertices.push( new THREE.Vertex( new THREE.Vector3( x, y, z ) ) );
+
+	}
+
+	function f3( a, b, c, nx, ny, nz ) {
+
+		scope.faces.push( new THREE.Face3( a, b, c, nx && ny && nz ? new THREE.Vector3( nx, ny, nz ) : null ) );
+
+	}
+
+	function f4( a, b, c, d, nx, ny, nz ) {
+
+		scope.faces.push( new THREE.Face4( a, b, c, d, nx && ny && nz ? new THREE.Vector3( nx, ny, nz ) : null ) );
+
+	}
+
+	function uv( u1, v1, u2, v2, u3, v3, u4, v4 ) {
+
+		var uv = [];
+		uv.push( new THREE.UV( u1, v1 ) );
+		uv.push( new THREE.UV( u2, v2 ) );
+		uv.push( new THREE.UV( u3, v3 ) );
+		if ( u4 && v4 ) uv.push( new THREE.UV( u4, v4 ) );
+		scope.uvs.push( uv );
+	}
+
+}
+
+Dice.prototype = new THREE.Geometry();
+Dice.prototype.constructor = Dice;

+ 61 - 0
examples/geometry/Dice249UV.js

@@ -0,0 +1,61 @@
+var Dice249UV = function () {
+
+	var scope = this;
+
+	THREE.Geometry.call(this);
+
+	v( -1.000000, -1.000000, 1.000000 );
+	v( -1.000000, 1.000000, 1.000000 );
+	v( 1.000000, -1.000000, 1.000000 );
+	v( 1.000000, 1.000000, 1.000000 );
+	v( 1.000000, -1.000000, -1.000000 );
+	v( 1.000000, 1.000000, -1.000000 );
+	v( -1.000000, -1.000000, -1.000000 );
+	v( -1.000000, 1.000000, -1.000000 );
+
+	f4( 0, 2, 3, 1, -0.577349, -0.577349, 0.577349 );
+	f4( 2, 4, 5, 3, 0.577349, -0.577349, 0.577349 );
+	f4( 4, 6, 7, 5, 0.577349, -0.577349, -0.577349 );
+	f4( 6, 0, 1, 7, -0.577349, -0.577349, -0.577349 );
+	f4( 1, 3, 5, 7, -0.577349, 0.577349, 0.577349 );
+	f4( 2, 0, 6, 4, 0.577349, -0.577349, 0.577349 );
+
+	uv( 0.011675, 0.325550, 0.488325, 0.325550, 0.488325, 0.007784, 0.011675, 0.007784);
+	uv( 0.511675, 0.325550, 0.988325, 0.325550, 0.988325, 0.007784, 0.511675, 0.007784);
+	uv( 0.011675, 0.658883, 0.488325, 0.658883, 0.488325, 0.341117, 0.011675, 0.341117);
+	uv( 0.511675, 0.658883, 0.988325, 0.658883, 0.988325, 0.341117, 0.511675, 0.341117);
+	uv( 0.011675, 0.992216, 0.488325, 0.992216, 0.488325, 0.674450, 0.011675, 0.674450);
+	uv( 0.988325, 0.674450, 0.511675, 0.674450, 0.511675, 0.992216, 0.988325, 0.992216);
+
+	function v( x, y, z ) {
+
+		scope.vertices.push( new THREE.Vertex( new THREE.Vector3( x, y, z ) ) );
+
+	}
+
+	function f3( a, b, c, nx, ny, nz ) {
+
+		scope.faces.push( new THREE.Face3( a, b, c, nx && ny && nz ? new THREE.Vector3( nx, ny, nz ) : null ) );
+
+	}
+
+	function f4( a, b, c, d, nx, ny, nz ) {
+
+		scope.faces.push( new THREE.Face4( a, b, c, d, nx && ny && nz ? new THREE.Vector3( nx, ny, nz ) : null ) );
+
+	}
+
+	function uv( u1, v1, u2, v2, u3, v3, u4, v4 ) {
+
+		var uv = [];
+		uv.push( new THREE.UV( u1, v1 ) );
+		uv.push( new THREE.UV( u2, v2 ) );
+		uv.push( new THREE.UV( u3, v3 ) );
+		if ( u4 && v4 ) uv.push( new THREE.UV( u4, v4 ) );
+		scope.uvs.push( uv );
+	}
+
+}
+
+Dice249UV.prototype = new THREE.Geometry();
+Dice249UV.prototype.constructor = Dice249UV;

+ 659 - 0
examples/geometry/DodecaEdges.js

@@ -0,0 +1,659 @@
+var DodecaEdges = function () {
+
+	var scope = this;
+
+	THREE.Geometry.call(this);
+
+	v( -12.271027, -27.912203, -93.417236 );
+	v( -12.271027, -43.452217, -93.417236 );
+	v( -4.501022, -35.682209, -93.417236 );
+	v( -12.271027, -35.682209, -85.647232 );
+	v( -20.041031, -35.682209, -93.417236 );
+	v( -12.271027, -35.682209, -101.187241 );
+	v( -12.271027, 43.452217, -93.417236 );
+	v( -12.271027, 27.912203, -93.417236 );
+	v( -4.501022, 35.682209, -93.417236 );
+	v( -12.271027, 35.682209, -85.647232 );
+	v( -20.041031, 35.682209, -93.417236 );
+	v( -12.271027, 35.682209, -101.187241 );
+	v( 81.146210, 7.770006, -35.682209 );
+	v( 81.146210, -7.770006, -35.682209 );
+	v( 88.916214, -0.000000, -35.682209 );
+	v( 81.146210, -0.000000, -27.912203 );
+	v( 73.376205, -0.000000, -35.682209 );
+	v( 81.146210, -0.000000, -43.452217 );
+	v( 81.146210, 7.770006, 35.682209 );
+	v( 81.146210, -7.770006, 35.682209 );
+	v( 88.916214, -0.000000, 35.682209 );
+	v( 81.146210, -0.000000, 43.452217 );
+	v( 73.376205, -0.000000, 35.682209 );
+	v( 81.146210, -0.000000, 27.912203 );
+	v( -12.271027, -27.912203, 93.417236 );
+	v( -12.271027, -43.452217, 93.417236 );
+	v( -4.501022, -35.682209, 93.417236 );
+	v( -12.271027, -35.682209, 101.187241 );
+	v( -20.041031, -35.682209, 93.417236 );
+	v( -12.271027, -35.682209, 85.647232 );
+	v( -12.271027, 43.452217, 93.417236 );
+	v( -12.271027, 27.912203, 93.417236 );
+	v( -4.501022, 35.682209, 93.417236 );
+	v( -12.271027, 35.682209, 101.187241 );
+	v( -20.041031, 35.682209, 93.417236 );
+	v( -12.271027, 35.682209, 85.647232 );
+	v( -105.688263, 7.770006, 35.682209 );
+	v( -105.688263, -7.770006, 35.682209 );
+	v( -97.918259, -0.000000, 35.682209 );
+	v( -105.688263, -0.000000, 43.452217 );
+	v( -113.458267, -0.000000, 35.682209 );
+	v( -105.688263, -0.000000, 27.912203 );
+	v( -105.688263, 7.770006, -35.682209 );
+	v( -105.688263, -7.770006, -35.682209 );
+	v( -97.918259, -0.000000, -35.682209 );
+	v( -105.688263, -0.000000, -27.912203 );
+	v( -113.458267, -0.000000, -35.682209 );
+	v( -105.688263, -0.000000, -43.452217 );
+	v( -47.953232, -85.647232, 0.000000 );
+	v( -47.953232, -101.187241, 0.000000 );
+	v( -40.183228, -93.417236, 0.000000 );
+	v( -47.953232, -93.417236, 7.770006 );
+	v( -55.723236, -93.417236, -0.000001 );
+	v( -47.953232, -93.417236, -7.770006 );
+	v( 23.411179, -85.647232, 0.000000 );
+	v( 23.411179, -101.187241, 0.000000 );
+	v( 31.181183, -93.417236, 0.000000 );
+	v( 23.411179, -93.417236, 7.770006 );
+	v( 15.641174, -93.417236, -0.000001 );
+	v( 23.411179, -93.417236, -7.770006 );
+	v( 23.411179, 101.187241, 0.000000 );
+	v( 23.411179, 85.647232, 0.000000 );
+	v( 31.181183, 93.417236, 0.000000 );
+	v( 23.411179, 93.417236, 7.770006 );
+	v( 15.641174, 93.417236, -0.000001 );
+	v( 23.411179, 93.417236, -7.770006 );
+	v( -47.953232, 101.187241, 0.000000 );
+	v( -47.953232, 85.647232, 0.000000 );
+	v( -40.183228, 93.417236, 0.000000 );
+	v( -47.953232, 93.417236, 7.770006 );
+	v( -55.723236, 93.417236, -0.000001 );
+	v( -47.953232, 93.417236, -7.770006 );
+	v( 45.463989, 65.505035, -57.735027 );
+	v( 45.463989, 49.965019, -57.735027 );
+	v( 53.233994, 57.735027, -57.735027 );
+	v( 45.463989, 57.735027, -49.965019 );
+	v( 37.693985, 57.735027, -57.735027 );
+	v( 45.463989, 57.735027, -65.505035 );
+	v( 45.463989, 65.505035, 57.735027 );
+	v( 45.463989, 49.965019, 57.735027 );
+	v( 53.233994, 57.735027, 57.735027 );
+	v( 45.463989, 57.735027, 65.505035 );
+	v( 37.693985, 57.735027, 57.735027 );
+	v( 45.463989, 57.735027, 49.965019 );
+	v( -70.006058, 65.505035, 57.735027 );
+	v( -70.006058, 49.965019, 57.735027 );
+	v( -62.236053, 57.735027, 57.735027 );
+	v( -70.006058, 57.735027, 65.505035 );
+	v( -77.776062, 57.735027, 57.735027 );
+	v( -70.006058, 57.735027, 49.965019 );
+	v( -70.006058, 65.505035, -57.735027 );
+	v( -70.006058, 49.965019, -57.735027 );
+	v( -62.236053, 57.735027, -57.735027 );
+	v( -70.006058, 57.735027, -49.965019 );
+	v( -77.776062, 57.735027, -57.735027 );
+	v( -70.006058, 57.735027, -65.505035 );
+	v( 45.463989, -49.965019, -57.735027 );
+	v( 45.463989, -65.505035, -57.735027 );
+	v( 53.233994, -57.735027, -57.735027 );
+	v( 45.463989, -57.735027, -49.965019 );
+	v( 37.693985, -57.735027, -57.735027 );
+	v( 45.463989, -57.735027, -65.505035 );
+	v( 45.463989, -49.965019, 57.735027 );
+	v( 45.463989, -65.505035, 57.735027 );
+	v( 53.233994, -57.735027, 57.735027 );
+	v( 45.463989, -57.735027, 65.505035 );
+	v( 37.693985, -57.735027, 57.735027 );
+	v( 45.463989, -57.735027, 49.965019 );
+	v( -70.006058, -49.965019, 57.735027 );
+	v( -70.006058, -65.505035, 57.735027 );
+	v( -62.236053, -57.735027, 57.735027 );
+	v( -70.006058, -57.735027, 65.505035 );
+	v( -77.776062, -57.735027, 57.735027 );
+	v( -70.006058, -57.735027, 49.965019 );
+	v( -70.006058, -49.965019, -57.735027 );
+	v( -70.006058, -65.505035, -57.735027 );
+	v( -62.236053, -57.735027, -57.735027 );
+	v( -70.006058, -57.735027, -49.965019 );
+	v( -77.776062, -57.735027, -57.735027 );
+	v( -70.006058, -57.735027, -65.505035 );
+	v( -11.151108, -36.495602, -89.450668 );
+	v( -68.886139, -58.548420, -53.768463 );
+	v( -14.510532, -32.444099, -92.382362 );
+	v( -72.245567, -54.496918, -56.700157 );
+	v( -15.630341, -36.495602, -96.698212 );
+	v( -73.365372, -58.548420, -61.016006 );
+	v( -12.270916, -40.547104, -93.766518 );
+	v( -70.005943, -62.599922, -58.084312 );
+	v( -71.125755, -54.924652, -55.152618 );
+	v( -49.072929, -90.606857, 2.582411 );
+	v( -75.177254, -59.240501, -56.272423 );
+	v( -53.124432, -94.922707, 1.462605 );
+	v( -71.125755, -62.172195, -59.631844 );
+	v( -49.072929, -97.854401, -1.896818 );
+	v( -67.074257, -57.856346, -58.512039 );
+	v( -45.021427, -93.538551, -0.777012 );
+	v( -49.072929, -94.230629, -3.917204 );
+	v( 22.291481, -94.230629, -3.917204 );
+	v( -49.072929, -89.970627, 0.342797 );
+	v( 22.291481, -89.970627, 0.342797 );
+	v( -49.072929, -94.230629, 4.602797 );
+	v( 22.291481, -94.230629, 4.602797 );
+	v( -49.072929, -98.490631, 0.342796 );
+	v( 22.291481, -98.490631, 0.342796 );
+	v( -11.151110, 34.868816, -96.698212 );
+	v( 46.583908, 56.921635, -61.016006 );
+	v( -14.510531, 38.920319, -93.766518 );
+	v( 43.224483, 60.973137, -58.084312 );
+	v( -15.630339, 34.868816, -89.450668 );
+	v( 42.104675, 56.921635, -53.768463 );
+	v( -12.270916, 30.817314, -92.382362 );
+	v( 45.464100, 52.870132, -56.700157 );
+	v( 44.344292, 60.545410, -59.631844 );
+	v( 22.291481, 96.227615, -1.896818 );
+	v( 40.292789, 56.229561, -58.512039 );
+	v( 18.239979, 91.911766, -0.777010 );
+	v( 44.344292, 53.297867, -55.152618 );
+	v( 22.291481, 88.980072, 2.582411 );
+	v( 48.395794, 57.613716, -56.272423 );
+	v( 26.342983, 93.295921, 1.462603 );
+	v( 22.291481, 92.603844, 4.602797 );
+	v( -49.072929, 92.603844, 4.602797 );
+	v( 22.291481, 96.863846, 0.342796 );
+	v( -49.072929, 96.863846, 0.342796 );
+	v( 22.291481, 92.603844, -3.917204 );
+	v( -49.072929, 92.603844, -3.917204 );
+	v( 22.291481, 88.343842, 0.342796 );
+	v( -49.072929, 88.343842, 0.342796 );
+	v( 80.026512, -2.333454, -39.318989 );
+	v( 44.344292, 55.401573, -61.371807 );
+	v( 76.337242, -2.803181, -34.579380 );
+	v( 40.655022, 54.931847, -56.632198 );
+	v( 80.026512, 0.706671, -31.359837 );
+	v( 44.344292, 58.441696, -53.412655 );
+	v( 83.715782, 1.176395, -36.099445 );
+	v( 48.033562, 58.911423, -58.152264 );
+	v( -13.390724, 34.868816, -88.814438 );
+	v( -13.390724, -36.495602, -88.814438 );
+	v( -17.650724, 34.868816, -93.074440 );
+	v( -17.650724, -36.495602, -93.074440 );
+	v( -13.390724, 34.868816, -97.334442 );
+	v( -13.390724, -36.495602, -97.334442 );
+	v( -9.130724, 34.868816, -93.074440 );
+	v( -9.130724, -36.495602, -93.074440 );
+	v( 80.026512, 0.706669, 40.004581 );
+	v( 44.344292, -57.028358, 62.057400 );
+	v( 76.337242, 1.176395, 35.264973 );
+	v( 40.655022, -56.558632, 57.317791 );
+	v( 80.026512, -2.333456, 32.045429 );
+	v( 44.344292, -60.068481, 54.098248 );
+	v( 83.715782, -2.803181, 36.785038 );
+	v( 48.033562, -60.538208, 58.837856 );
+	v( 46.583908, -58.548420, 61.701599 );
+	v( -11.151110, -36.495602, 97.383804 );
+	v( 45.464100, -54.496918, 57.385750 );
+	v( -12.270916, -32.444099, 93.067955 );
+	v( 42.104675, -58.548420, 54.454056 );
+	v( -15.630339, -36.495602, 90.136261 );
+	v( 43.224483, -62.599922, 58.769905 );
+	v( -14.510531, -40.547104, 94.452110 );
+	v( -13.390724, -36.495602, 89.500031 );
+	v( -13.390724, 34.868816, 89.500031 );
+	v( -17.650724, -36.495602, 93.760033 );
+	v( -17.650724, 34.868816, 93.760033 );
+	v( -13.390724, -36.495602, 98.020035 );
+	v( -13.390724, 34.868816, 98.020035 );
+	v( -9.130724, -36.495602, 93.760033 );
+	v( -9.130724, 34.868816, 93.760033 );
+	v( 44.344292, -62.172195, 60.317436 );
+	v( 22.291481, -97.854401, 2.582411 );
+	v( 40.292789, -57.856346, 59.197632 );
+	v( 18.239979, -93.538551, 1.462603 );
+	v( 44.344292, -54.924652, 55.838211 );
+	v( 22.291481, -90.606857, -1.896818 );
+	v( 48.395794, -59.240501, 56.958015 );
+	v( 26.342983, -94.922707, -0.777010 );
+	v( -15.630341, 34.868816, 97.383804 );
+	v( -73.365372, 56.921635, 61.701599 );
+	v( -12.270916, 38.920319, 94.452110 );
+	v( -70.005943, 60.973137, 58.769905 );
+	v( -11.151108, 34.868816, 90.136261 );
+	v( -68.886139, 56.921635, 54.454056 );
+	v( -14.510532, 30.817314, 93.067955 );
+	v( -72.245567, 52.870132, 57.385750 );
+	v( -71.125755, 53.297867, 55.838211 );
+	v( -49.072929, 88.980072, -1.896818 );
+	v( -75.177254, 57.613716, 56.958015 );
+	v( -53.124432, 93.295921, -0.777012 );
+	v( -71.125755, 60.545410, 60.317436 );
+	v( -49.072929, 96.227615, 2.582411 );
+	v( -67.074257, 56.229561, 59.197632 );
+	v( -45.021427, 91.911766, 1.462605 );
+	v( -106.807961, 0.706669, 32.045429 );
+	v( -71.125755, 58.441696, 54.098248 );
+	v( -110.497231, 1.176394, 36.785038 );
+	v( -74.815025, 58.911423, 58.837856 );
+	v( -106.807961, -2.333454, 40.004581 );
+	v( -71.125755, 55.401573, 62.057400 );
+	v( -103.118690, -2.803179, 35.264973 );
+	v( -67.436485, 54.931847, 57.317791 );
+	v( -106.807961, -2.333454, -31.359837 );
+	v( -71.125755, -60.068481, -53.412655 );
+	v( -110.497231, -2.803179, -36.099445 );
+	v( -74.815025, -60.538208, -58.152264 );
+	v( -106.807961, 0.706669, -39.318989 );
+	v( -71.125755, -57.028358, -61.371807 );
+	v( -103.118690, 1.176394, -34.579380 );
+	v( -67.436485, -56.558632, -56.632198 );
+	v( -106.807961, 3.446608, -35.339413 );
+	v( -106.807961, 3.446608, 36.025005 );
+	v( -111.067963, -0.813393, -35.339413 );
+	v( -111.067963, -0.813393, 36.025005 );
+	v( -106.807961, -5.073393, -35.339413 );
+	v( -106.807961, -5.073393, 36.025005 );
+	v( -102.547958, -0.813393, -35.339413 );
+	v( -102.547958, -0.813393, 36.025005 );
+	v( 80.026512, -5.073393, 36.025005 );
+	v( 80.026512, -5.073393, -35.339413 );
+	v( 75.766510, -0.813392, 36.025005 );
+	v( 75.766510, -0.813392, -35.339413 );
+	v( 80.026512, 3.446608, 36.025005 );
+	v( 80.026512, 3.446608, -35.339413 );
+	v( 84.286514, -0.813393, 36.025005 );
+	v( 84.286514, -0.813393, -35.339413 );
+	v( -49.072929, 88.980072, 2.582411 );
+	v( -71.125755, 53.297867, -55.152618 );
+	v( -53.124432, 93.295921, 1.462605 );
+	v( -75.177254, 57.613716, -56.272423 );
+	v( -49.072929, 96.227615, -1.896818 );
+	v( -71.125755, 60.545410, -59.631844 );
+	v( -45.021427, 91.911766, -0.777012 );
+	v( -67.074257, 56.229561, -58.512039 );
+	v( -73.365372, 56.921635, -61.016006 );
+	v( -15.630341, 34.868816, -96.698212 );
+	v( -70.005943, 60.973137, -58.084312 );
+	v( -12.270916, 38.920319, -93.766518 );
+	v( -68.886139, 56.921635, -53.768463 );
+	v( -11.151108, 34.868816, -89.450668 );
+	v( -72.245567, 52.870132, -56.700157 );
+	v( -14.510532, 30.817314, -92.382362 );
+	v( -11.151110, -36.495602, -96.698212 );
+	v( 46.583908, -58.548420, -61.016006 );
+	v( -12.270916, -32.444099, -92.382362 );
+	v( 45.464100, -54.496918, -56.700157 );
+	v( -15.630339, -36.495602, -89.450668 );
+	v( 42.104675, -58.548420, -53.768463 );
+	v( -14.510531, -40.547104, -93.766518 );
+	v( 43.224483, -62.599922, -58.084312 );
+	v( 44.344292, -57.028358, -61.371807 );
+	v( 80.026512, 0.706669, -39.318989 );
+	v( 40.655022, -56.558632, -56.632198 );
+	v( 76.337242, 1.176395, -34.579380 );
+	v( 44.344292, -60.068481, -53.412655 );
+	v( 80.026512, -2.333456, -31.359837 );
+	v( 48.033562, -60.538208, -58.152264 );
+	v( 83.715782, -2.803181, -36.099445 );
+	v( -15.630339, 34.868816, 90.136261 );
+	v( 42.104675, 56.921635, 54.454056 );
+	v( -14.510531, 38.920319, 94.452110 );
+	v( 43.224483, 60.973137, 58.769905 );
+	v( -11.151110, 34.868816, 97.383804 );
+	v( 46.583908, 56.921635, 61.701599 );
+	v( -12.270916, 30.817314, 93.067955 );
+	v( 45.464100, 52.870132, 57.385750 );
+	v( 44.344292, 55.401573, 62.057400 );
+	v( 80.026512, -2.333454, 40.004581 );
+	v( 40.655022, 54.931847, 57.317791 );
+	v( 76.337242, -2.803181, 35.264973 );
+	v( 44.344292, 58.441696, 54.098248 );
+	v( 80.026512, 0.706671, 32.045429 );
+	v( 48.033562, 58.911423, 58.837856 );
+	v( 83.715782, 1.176395, 36.785038 );
+	v( -49.072929, -90.606857, -1.896818 );
+	v( -71.125755, -54.924652, 55.838211 );
+	v( -53.124432, -94.922707, -0.777012 );
+	v( -75.177254, -59.240501, 56.958015 );
+	v( -49.072929, -97.854401, 2.582411 );
+	v( -71.125755, -62.172195, 60.317436 );
+	v( -45.021427, -93.538551, 1.462605 );
+	v( -67.074257, -57.856346, 59.197632 );
+	v( -68.886139, -58.548420, 54.454056 );
+	v( -11.151108, -36.495602, 90.136261 );
+	v( -72.245567, -54.496918, 57.385750 );
+	v( -14.510532, -32.444099, 93.067955 );
+	v( -73.365372, -58.548420, 61.701599 );
+	v( -15.630341, -36.495602, 97.383804 );
+	v( -70.005943, -62.599922, 58.769905 );
+	v( -12.270916, -40.547104, 94.452110 );
+	v( 22.291481, 96.227615, 2.582411 );
+	v( 44.344292, 60.545410, 60.317436 );
+	v( 18.239979, 91.911766, 1.462603 );
+	v( 40.292789, 56.229561, 59.197632 );
+	v( 22.291481, 88.980072, -1.896818 );
+	v( 44.344292, 53.297867, 55.838211 );
+	v( 26.342983, 93.295921, -0.777010 );
+	v( 48.395794, 57.613716, 56.958015 );
+	v( -71.125755, -60.068481, 54.098248 );
+	v( -106.807961, -2.333454, 32.045429 );
+	v( -74.815025, -60.538208, 58.837856 );
+	v( -110.497231, -2.803179, 36.785038 );
+	v( -71.125755, -57.028358, 62.057400 );
+	v( -106.807961, 0.706669, 40.004581 );
+	v( -67.436485, -56.558632, 57.317791 );
+	v( -103.118690, 1.176394, 35.264973 );
+	v( 44.344292, -54.924652, -55.152618 );
+	v( 22.291481, -90.606857, 2.582411 );
+	v( 40.292789, -57.856346, -58.512039 );
+	v( 18.239979, -93.538551, -0.777010 );
+	v( 44.344292, -62.172195, -59.631844 );
+	v( 22.291481, -97.854401, -1.896818 );
+	v( 48.395794, -59.240501, -56.272423 );
+	v( 26.342983, -94.922707, 1.462603 );
+	v( -106.807961, -2.333454, -39.318989 );
+	v( -71.125755, 55.401573, -61.371807 );
+	v( -110.497231, 1.176394, -36.099445 );
+	v( -74.815025, 58.911423, -58.152264 );
+	v( -106.807961, 0.706669, -31.359837 );
+	v( -71.125755, 58.441696, -53.412655 );
+	v( -103.118690, -2.803179, -34.579380 );
+	v( -67.436485, 54.931847, -56.632198 );
+
+	f4( 120, 121, 123, 122, 0.525731, -0.000000, 0.850651 );
+	uv( 0.000000, 1.000000, 0.000000, 0.000000, 0.250000, 0.000000, 0.250000, 1.000000);
+	f4( 122, 123, 125, 124, 0.525731, -0.000000, 0.850651 );
+	uv( 0.250000, 1.000000, 0.250000, 0.000000, 0.500000, 0.000000, 0.500000, 1.000000);
+	f4( 124, 125, 127, 126, -0.262866, -0.951056, 0.162460 );
+	uv( 0.500000, 1.000000, 0.500000, 0.000000, 0.750000, 0.000000, 0.750000, 1.000000);
+	f4( 126, 127, 121, 120, -0.262866, -0.951056, 0.162460 );
+	uv( 0.750000, 1.000000, 0.750000, 0.000000, 1.000000, 0.000000, 1.000000, 1.000000);
+	f4( 128, 129, 131, 130, -0.262866, -0.951056, 0.162460 );
+	uv( 0.000000, 1.000000, 0.000000, 0.000000, 0.250000, 0.000000, 0.250000, 1.000000);
+	f4( 130, 131, 133, 132, -0.262866, -0.951056, 0.162460 );
+	uv( 0.250000, 1.000000, 0.250000, 0.000000, 0.500000, 0.000000, 0.500000, 1.000000);
+	f4( 132, 133, 135, 134, -0.525731, 0.000000, -0.850651 );
+	uv( 0.500000, 1.000000, 0.500000, 0.000000, 0.750000, 0.000000, 0.750000, 1.000000);
+	f4( 134, 135, 129, 128, -0.525731, 0.000000, -0.850651 );
+	uv( 0.750000, 1.000000, 0.750000, 0.000000, 1.000000, 0.000000, 1.000000, 1.000000);
+	f4( 136, 137, 139, 138, -0.525731, 0.000000, -0.850651 );
+	uv( 0.000000, 1.000000, 0.000000, 0.000000, 0.250000, 0.000000, 0.250000, 1.000000);
+	f4( 138, 139, 141, 140, -0.525731, 0.000000, -0.850651 );
+	uv( 0.250000, 1.000000, 0.250000, 0.000000, 0.500000, 0.000000, 0.500000, 1.000000);
+	f4( 140, 141, 143, 142, 0.262866, 0.951056, -0.162460 );
+	uv( 0.500000, 1.000000, 0.500000, 0.000000, 0.750000, 0.000000, 0.750000, 1.000000);
+	f4( 142, 143, 137, 136, 0.262866, 0.951056, -0.162460 );
+	uv( 0.750000, 1.000000, 0.750000, 0.000000, 1.000000, 0.000000, 1.000000, 1.000000);
+	f4( 144, 145, 147, 146, 0.262866, 0.951056, -0.162460 );
+	uv( 0.000000, 1.000000, 0.000000, 0.000000, 0.250000, 0.000000, 0.250000, 1.000000);
+	f4( 146, 147, 149, 148, 0.262866, 0.951056, -0.162460 );
+	uv( 0.250000, 1.000000, 0.250000, 0.000000, 0.500000, 0.000000, 0.500000, 1.000000);
+	f4( 148, 149, 151, 150, 0.525731, -0.000000, 0.850651 );
+	uv( 0.500000, 1.000000, 0.500000, 0.000000, 0.750000, 0.000000, 0.750000, 1.000000);
+	f4( 150, 151, 145, 144, 0.525731, -0.000000, 0.850651 );
+	uv( 0.750000, 1.000000, 0.750000, 0.000000, 1.000000, 0.000000, 1.000000, 1.000000);
+	f4( 152, 153, 155, 154, 0.000000, -0.850651, 0.525731 );
+	uv( 0.000000, 1.000000, 0.000000, 0.000000, 0.250000, 0.000000, 0.250000, 1.000000);
+	f4( 154, 155, 157, 156, 0.000000, -0.850651, 0.525731 );
+	uv( 0.250000, 1.000000, 0.250000, 0.000000, 0.500000, 0.000000, 0.500000, 1.000000);
+	f4( 156, 157, 159, 158, -0.951056, 0.162460, 0.262866 );
+	uv( 0.500000, 1.000000, 0.500000, 0.000000, 0.750000, 0.000000, 0.750000, 1.000000);
+	f4( 158, 159, 153, 152, -0.951056, 0.162460, 0.262866 );
+	uv( 0.750000, 1.000000, 0.750000, 0.000000, 1.000000, 0.000000, 1.000000, 1.000000);
+	f4( 160, 161, 163, 162, -0.951056, 0.162460, 0.262866 );
+	uv( 0.000000, 1.000000, 0.000000, 0.000000, 0.250000, 0.000000, 0.250000, 1.000000);
+	f4( 162, 163, 165, 164, -0.951056, 0.162460, 0.262866 );
+	uv( 0.250000, 1.000000, 0.250000, 0.000000, 0.500000, 0.000000, 0.500000, 1.000000);
+	f4( 164, 165, 167, 166, -0.000000, 0.850651, -0.525731 );
+	uv( 0.500000, 1.000000, 0.500000, 0.000000, 0.750000, 0.000000, 0.750000, 1.000000);
+	f4( 166, 167, 161, 160, -0.000000, 0.850651, -0.525731 );
+	uv( 0.750000, 1.000000, 0.750000, 0.000000, 1.000000, 0.000000, 1.000000, 1.000000);
+	f4( 168, 169, 171, 170, -0.000000, 0.850651, -0.525731 );
+	uv( 0.000000, 1.000000, 0.000000, 0.000000, 0.250000, 0.000000, 0.250000, 1.000000);
+	f4( 170, 171, 173, 172, -0.000000, 0.850651, -0.525731 );
+	uv( 0.250000, 1.000000, 0.250000, 0.000000, 0.500000, 0.000000, 0.500000, 1.000000);
+	f4( 172, 173, 175, 174, 0.951056, -0.162460, -0.262866 );
+	uv( 0.500000, 1.000000, 0.500000, 0.000000, 0.750000, 0.000000, 0.750000, 1.000000);
+	f4( 174, 175, 169, 168, 0.951056, -0.162460, -0.262866 );
+	uv( 0.750000, 1.000000, 0.750000, 0.000000, 1.000000, 0.000000, 1.000000, 1.000000);
+	f4( 176, 177, 179, 178, 0.951056, -0.162460, -0.262866 );
+	uv( 0.000000, 1.000000, 0.000000, 0.000000, 0.250000, 0.000000, 0.250000, 1.000000);
+	f4( 178, 179, 181, 180, 0.951056, -0.162460, -0.262866 );
+	uv( 0.250000, 1.000000, 0.250000, 0.000000, 0.500000, 0.000000, 0.500000, 1.000000);
+	f4( 180, 181, 183, 182, 0.000000, -0.850651, 0.525731 );
+	uv( 0.500000, 1.000000, 0.500000, 0.000000, 0.750000, 0.000000, 0.750000, 1.000000);
+	f4( 182, 183, 177, 176, 0.000000, -0.850651, 0.525731 );
+	uv( 0.750000, 1.000000, 0.750000, 0.000000, 1.000000, 0.000000, 1.000000, 1.000000);
+	f4( 184, 185, 187, 186, 0.000000, 0.000000, -1.000000 );
+	uv( 0.000000, 1.000000, 0.000000, 0.000000, 0.250000, 0.000000, 0.250000, 1.000000);
+	f4( 186, 187, 189, 188, 0.000000, 0.000000, -1.000000 );
+	uv( 0.250000, 1.000000, 0.250000, 0.000000, 0.500000, 0.000000, 0.500000, 1.000000);
+	f4( 188, 189, 191, 190, 0.000000, -1.000000, 0.000000 );
+	uv( 0.500000, 1.000000, 0.500000, 0.000000, 0.750000, 0.000000, 0.750000, 1.000000);
+	f4( 190, 191, 185, 184, 0.000000, -1.000000, 0.000000 );
+	uv( 0.750000, 1.000000, 0.750000, 0.000000, 1.000000, 0.000000, 1.000000, 1.000000);
+	f4( 192, 193, 195, 194, 0.000000, -1.000000, 0.000000 );
+	uv( 0.000000, 1.000000, 0.000000, 0.000000, 0.250000, 0.000000, 0.250000, 1.000000);
+	f4( 194, 195, 197, 196, 0.000000, -1.000000, 0.000000 );
+	uv( 0.250000, 1.000000, 0.250000, 0.000000, 0.500000, 0.000000, 0.500000, 1.000000);
+	f4( 196, 197, 199, 198, 0.000000, 0.000000, 1.000000 );
+	uv( 0.500000, 1.000000, 0.500000, 0.000000, 0.750000, 0.000000, 0.750000, 1.000000);
+	f4( 198, 199, 193, 192, 0.000000, 0.000000, 1.000000 );
+	uv( 0.750000, 1.000000, 0.750000, 0.000000, 1.000000, 0.000000, 1.000000, 1.000000);
+	f4( 200, 201, 203, 202, 0.000000, 0.000000, 1.000000 );
+	uv( 0.000000, 1.000000, 0.000000, 0.000000, 0.250000, 0.000000, 0.250000, 1.000000);
+	f4( 202, 203, 205, 204, 0.000000, 0.000000, 1.000000 );
+	uv( 0.250000, 1.000000, 0.250000, 0.000000, 0.500000, 0.000000, 0.500000, 1.000000);
+	f4( 204, 205, 207, 206, 0.000000, 1.000000, 0.000000 );
+	uv( 0.500000, 1.000000, 0.500000, 0.000000, 0.750000, 0.000000, 0.750000, 1.000000);
+	f4( 206, 207, 201, 200, 0.000000, 1.000000, 0.000000 );
+	uv( 0.750000, 1.000000, 0.750000, 0.000000, 1.000000, 0.000000, 1.000000, 1.000000);
+	f4( 208, 209, 211, 210, 0.000000, 1.000000, 0.000000 );
+	uv( 0.000000, 1.000000, 0.000000, 0.000000, 0.250000, 0.000000, 0.250000, 1.000000);
+	f4( 210, 211, 213, 212, 0.000000, 1.000000, 0.000000 );
+	uv( 0.250000, 1.000000, 0.250000, 0.000000, 0.500000, 0.000000, 0.500000, 1.000000);
+	f4( 212, 213, 215, 214, 0.000000, 0.000000, -1.000000 );
+	uv( 0.500000, 1.000000, 0.500000, 0.000000, 0.750000, 0.000000, 0.750000, 1.000000);
+	f4( 214, 215, 209, 208, 0.000000, 0.000000, -1.000000 );
+	uv( 0.750000, 1.000000, 0.750000, 0.000000, 1.000000, 0.000000, 1.000000, 1.000000);
+	f4( 216, 217, 219, 218, 0.525731, -0.000000, -0.850651 );
+	uv( 0.000000, 1.000000, 0.000000, 0.000000, 0.250000, 0.000000, 0.250000, 1.000000);
+	f4( 218, 219, 221, 220, 0.525731, -0.000000, -0.850651 );
+	uv( 0.250000, 1.000000, 0.250000, 0.000000, 0.500000, 0.000000, 0.500000, 1.000000);
+	f4( 220, 221, 223, 222, -0.262866, -0.951056, -0.162460 );
+	uv( 0.500000, 1.000000, 0.500000, 0.000000, 0.750000, 0.000000, 0.750000, 1.000000);
+	f4( 222, 223, 217, 216, -0.262866, -0.951056, -0.162460 );
+	uv( 0.750000, 1.000000, 0.750000, 0.000000, 1.000000, 0.000000, 1.000000, 1.000000);
+	f4( 224, 225, 227, 226, -0.262866, -0.951056, -0.162460 );
+	uv( 0.000000, 1.000000, 0.000000, 0.000000, 0.250000, 0.000000, 0.250000, 1.000000);
+	f4( 226, 227, 229, 228, -0.262866, -0.951056, -0.162460 );
+	uv( 0.250000, 1.000000, 0.250000, 0.000000, 0.500000, 0.000000, 0.500000, 1.000000);
+	f4( 228, 229, 231, 230, -0.525731, 0.000000, 0.850651 );
+	uv( 0.500000, 1.000000, 0.500000, 0.000000, 0.750000, 0.000000, 0.750000, 1.000000);
+	f4( 230, 231, 225, 224, -0.525731, 0.000000, 0.850651 );
+	uv( 0.750000, 1.000000, 0.750000, 0.000000, 1.000000, 0.000000, 1.000000, 1.000000);
+	f4( 232, 233, 235, 234, -0.525731, 0.000000, 0.850651 );
+	uv( 0.000000, 1.000000, 0.000000, 0.000000, 0.250000, 0.000000, 0.250000, 1.000000);
+	f4( 234, 235, 237, 236, -0.525731, 0.000000, 0.850651 );
+	uv( 0.250000, 1.000000, 0.250000, 0.000000, 0.500000, 0.000000, 0.500000, 1.000000);
+	f4( 236, 237, 239, 238, 0.262866, 0.951056, 0.162460 );
+	uv( 0.500000, 1.000000, 0.500000, 0.000000, 0.750000, 0.000000, 0.750000, 1.000000);
+	f4( 238, 239, 233, 232, 0.262866, 0.951056, 0.162460 );
+	uv( 0.750000, 1.000000, 0.750000, 0.000000, 1.000000, 0.000000, 1.000000, 1.000000);
+	f4( 240, 241, 243, 242, 0.262866, 0.951056, 0.162460 );
+	uv( 0.000000, 1.000000, 0.000000, 0.000000, 0.250000, 0.000000, 0.250000, 1.000000);
+	f4( 242, 243, 245, 244, 0.262866, 0.951056, 0.162460 );
+	uv( 0.250000, 1.000000, 0.250000, 0.000000, 0.500000, 0.000000, 0.500000, 1.000000);
+	f4( 244, 245, 247, 246, 0.525731, -0.000000, -0.850651 );
+	uv( 0.500000, 1.000000, 0.500000, 0.000000, 0.750000, 0.000000, 0.750000, 1.000000);
+	f4( 246, 247, 241, 240, 0.525731, -0.000000, -0.850651 );
+	uv( 0.750000, 1.000000, 0.750000, 0.000000, 1.000000, 0.000000, 1.000000, 1.000000);
+	f4( 248, 249, 251, 250, 0.000000, -0.850651, -0.525731 );
+	uv( 0.000000, 1.000000, 0.000000, 0.000000, 0.250000, 0.000000, 0.250000, 1.000000);
+	f4( 250, 251, 253, 252, 0.000000, -0.850651, -0.525731 );
+	uv( 0.250000, 1.000000, 0.250000, 0.000000, 0.500000, 0.000000, 0.500000, 1.000000);
+	f4( 252, 253, 255, 254, -0.951057, 0.162460, -0.262865 );
+	uv( 0.500000, 1.000000, 0.500000, 0.000000, 0.750000, 0.000000, 0.750000, 1.000000);
+	f4( 254, 255, 249, 248, -0.951057, 0.162460, -0.262865 );
+	uv( 0.750000, 1.000000, 0.750000, 0.000000, 1.000000, 0.000000, 1.000000, 1.000000);
+	f4( 256, 257, 259, 258, -0.951057, 0.162460, -0.262865 );
+	uv( 0.000000, 1.000000, 0.000000, 0.000000, 0.250000, 0.000000, 0.250000, 1.000000);
+	f4( 258, 259, 261, 260, -0.951057, 0.162460, -0.262865 );
+	uv( 0.250000, 1.000000, 0.250000, 0.000000, 0.500000, 0.000000, 0.500000, 1.000000);
+	f4( 260, 261, 263, 262, -0.000000, 0.850651, 0.525731 );
+	uv( 0.500000, 1.000000, 0.500000, 0.000000, 0.750000, 0.000000, 0.750000, 1.000000);
+	f4( 262, 263, 257, 256, -0.000000, 0.850651, 0.525731 );
+	uv( 0.750000, 1.000000, 0.750000, 0.000000, 1.000000, 0.000000, 1.000000, 1.000000);
+	f4( 264, 265, 267, 266, -0.000000, 0.850651, 0.525731 );
+	uv( 0.000000, 1.000000, 0.000000, 0.000000, 0.250000, 0.000000, 0.250000, 1.000000);
+	f4( 266, 267, 269, 268, -0.000000, 0.850651, 0.525731 );
+	uv( 0.250000, 1.000000, 0.250000, 0.000000, 0.500000, 0.000000, 0.500000, 1.000000);
+	f4( 268, 269, 271, 270, 0.951056, -0.162460, 0.262866 );
+	uv( 0.500000, 1.000000, 0.500000, 0.000000, 0.750000, 0.000000, 0.750000, 1.000000);
+	f4( 270, 271, 265, 264, 0.951056, -0.162460, 0.262866 );
+	uv( 0.750000, 1.000000, 0.750000, 0.000000, 1.000000, 0.000000, 1.000000, 1.000000);
+	f4( 272, 273, 275, 274, 0.951056, -0.162460, 0.262866 );
+	uv( 0.000000, 1.000000, 0.000000, 0.000000, 0.250000, 0.000000, 0.250000, 1.000000);
+	f4( 274, 275, 277, 276, 0.951056, -0.162460, 0.262866 );
+	uv( 0.250000, 1.000000, 0.250000, 0.000000, 0.500000, 0.000000, 0.500000, 1.000000);
+	f4( 276, 277, 279, 278, 0.000000, -0.850651, -0.525731 );
+	uv( 0.500000, 1.000000, 0.500000, 0.000000, 0.750000, 0.000000, 0.750000, 1.000000);
+	f4( 278, 279, 273, 272, 0.000000, -0.850651, -0.525731 );
+	uv( 0.750000, 1.000000, 0.750000, 0.000000, 1.000000, 0.000000, 1.000000, 1.000000);
+	f4( 280, 281, 283, 282, 0.000000, 0.000000, 1.000000 );
+	uv( 0.000000, 1.000000, 0.000000, 0.000000, 0.250000, 0.000000, 0.250000, 1.000000);
+	f4( 282, 283, 285, 284, 0.000000, 0.000000, 1.000000 );
+	uv( 0.250000, 1.000000, 0.250000, 0.000000, 0.500000, 0.000000, 0.500000, 1.000000);
+	f4( 284, 285, 287, 286, 0.000000, -1.000000, 0.000000 );
+	uv( 0.500000, 1.000000, 0.500000, 0.000000, 0.750000, 0.000000, 0.750000, 1.000000);
+	f4( 286, 287, 281, 280, 0.000000, -1.000000, 0.000000 );
+	uv( 0.750000, 1.000000, 0.750000, 0.000000, 1.000000, 0.000000, 1.000000, 1.000000);
+	f4( 288, 289, 291, 290, 0.000000, -1.000000, 0.000000 );
+	uv( 0.000000, 1.000000, 0.000000, 0.000000, 0.250000, 0.000000, 0.250000, 1.000000);
+	f4( 290, 291, 293, 292, 0.000000, -1.000000, 0.000000 );
+	uv( 0.250000, 1.000000, 0.250000, 0.000000, 0.500000, 0.000000, 0.500000, 1.000000);
+	f4( 292, 293, 295, 294, 0.000000, 0.000000, -1.000000 );
+	uv( 0.500000, 1.000000, 0.500000, 0.000000, 0.750000, 0.000000, 0.750000, 1.000000);
+	f4( 294, 295, 289, 288, 0.000000, 0.000000, -1.000000 );
+	uv( 0.750000, 1.000000, 0.750000, 0.000000, 1.000000, 0.000000, 1.000000, 1.000000);
+	f4( 296, 297, 299, 298, 0.000000, 0.000000, -1.000000 );
+	uv( 0.000000, 1.000000, 0.000000, 0.000000, 0.250000, 0.000000, 0.250000, 1.000000);
+	f4( 298, 299, 301, 300, 0.000000, 0.000000, -1.000000 );
+	uv( 0.250000, 1.000000, 0.250000, 0.000000, 0.500000, 0.000000, 0.500000, 1.000000);
+	f4( 300, 301, 303, 302, 0.000000, 1.000000, 0.000000 );
+	uv( 0.500000, 1.000000, 0.500000, 0.000000, 0.750000, 0.000000, 0.750000, 1.000000);
+	f4( 302, 303, 297, 296, 0.000000, 1.000000, 0.000000 );
+	uv( 0.750000, 1.000000, 0.750000, 0.000000, 1.000000, 0.000000, 1.000000, 1.000000);
+	f4( 304, 305, 307, 306, 0.000000, 1.000000, 0.000000 );
+	uv( 0.000000, 1.000000, 0.000000, 0.000000, 0.250000, 0.000000, 0.250000, 1.000000);
+	f4( 306, 307, 309, 308, 0.000000, 1.000000, 0.000000 );
+	uv( 0.250000, 1.000000, 0.250000, 0.000000, 0.500000, 0.000000, 0.500000, 1.000000);
+	f4( 308, 309, 311, 310, 0.000000, 0.000000, 1.000000 );
+	uv( 0.500000, 1.000000, 0.500000, 0.000000, 0.750000, 0.000000, 0.750000, 1.000000);
+	f4( 310, 311, 305, 304, 0.000000, 0.000000, 1.000000 );
+	uv( 0.750000, 1.000000, 0.750000, 0.000000, 1.000000, 0.000000, 1.000000, 1.000000);
+	f4( 312, 313, 315, 314, -0.000000, 0.356822, -0.934172 );
+	uv( 0.000000, 1.000000, 0.000000, 0.000000, 0.250000, 0.000000, 0.250000, 1.000000);
+	f4( 314, 315, 317, 316, -0.000000, 0.356822, -0.934172 );
+	uv( 0.250000, 1.000000, 0.250000, 0.000000, 0.500000, 0.000000, 0.500000, 1.000000);
+	f4( 316, 317, 319, 318, -0.866025, 0.467086, 0.178411 );
+	uv( 0.500000, 1.000000, 0.500000, 0.000000, 0.750000, 0.000000, 0.750000, 1.000000);
+	f4( 318, 319, 313, 312, -0.866025, 0.467086, 0.178411 );
+	uv( 0.750000, 1.000000, 0.750000, 0.000000, 1.000000, 0.000000, 1.000000, 1.000000);
+	f4( 320, 321, 323, 322, -0.866025, 0.467086, 0.178411 );
+	uv( 0.000000, 1.000000, 0.000000, 0.000000, 0.250000, 0.000000, 0.250000, 1.000000);
+	f4( 322, 323, 325, 324, -0.866025, 0.467086, 0.178411 );
+	uv( 0.250000, 1.000000, 0.250000, 0.000000, 0.500000, 0.000000, 0.500000, 1.000000);
+	f4( 324, 325, 327, 326, 0.000000, -0.356822, 0.934172 );
+	uv( 0.500000, 1.000000, 0.500000, 0.000000, 0.750000, 0.000000, 0.750000, 1.000000);
+	f4( 326, 327, 321, 320, 0.000000, -0.356822, 0.934172 );
+	uv( 0.750000, 1.000000, 0.750000, 0.000000, 1.000000, 0.000000, 1.000000, 1.000000);
+	f4( 328, 329, 331, 330, 0.000000, -0.356822, 0.934172 );
+	uv( 0.000000, 1.000000, 0.000000, 0.000000, 0.250000, 0.000000, 0.250000, 1.000000);
+	f4( 330, 331, 333, 332, 0.000000, -0.356822, 0.934172 );
+	uv( 0.250000, 1.000000, 0.250000, 0.000000, 0.500000, 0.000000, 0.500000, 1.000000);
+	f4( 332, 333, 335, 334, 0.866025, -0.467086, -0.178411 );
+	uv( 0.500000, 1.000000, 0.500000, 0.000000, 0.750000, 0.000000, 0.750000, 1.000000);
+	f4( 334, 335, 329, 328, 0.866025, -0.467086, -0.178411 );
+	uv( 0.750000, 1.000000, 0.750000, 0.000000, 1.000000, 0.000000, 1.000000, 1.000000);
+	f4( 336, 337, 339, 338, 0.866025, -0.467086, -0.178411 );
+	uv( 0.000000, 1.000000, 0.000000, 0.000000, 0.250000, 0.000000, 0.250000, 1.000000);
+	f4( 338, 339, 341, 340, 0.866025, -0.467086, -0.178411 );
+	uv( 0.250000, 1.000000, 0.250000, 0.000000, 0.500000, 0.000000, 0.500000, 1.000000);
+	f4( 340, 341, 343, 342, -0.000000, 0.356822, -0.934172 );
+	uv( 0.500000, 1.000000, 0.500000, 0.000000, 0.750000, 0.000000, 0.750000, 1.000000);
+	f4( 342, 343, 337, 336, -0.000000, 0.356822, -0.934172 );
+	uv( 0.750000, 1.000000, 0.750000, 0.000000, 1.000000, 0.000000, 1.000000, 1.000000);
+	f4( 344, 345, 347, 346, 0.000000, 0.000000, 1.000000 );
+	uv( 0.000000, 1.000000, 0.000000, 0.000000, 0.250000, 0.000000, 0.250000, 1.000000);
+	f4( 346, 347, 349, 348, 0.000000, 0.000000, 1.000000 );
+	uv( 0.250000, 1.000000, 0.250000, 0.000000, 0.500000, 0.000000, 0.500000, 1.000000);
+	f4( 348, 349, 351, 350, -1.000000, 0.000000, 0.000000 );
+	uv( 0.500000, 1.000000, 0.500000, 0.000000, 0.750000, 0.000000, 0.750000, 1.000000);
+	f4( 350, 351, 345, 344, -1.000000, 0.000000, 0.000000 );
+	uv( 0.750000, 1.000000, 0.750000, 0.000000, 1.000000, 0.000000, 1.000000, 1.000000);
+	f4( 352, 353, 355, 354, -1.000000, 0.000000, 0.000000 );
+	uv( 0.000000, 1.000000, 0.000000, 0.000000, 0.250000, 0.000000, 0.250000, 1.000000);
+	f4( 354, 355, 357, 356, -1.000000, 0.000000, 0.000000 );
+	uv( 0.250000, 1.000000, 0.250000, 0.000000, 0.500000, 0.000000, 0.500000, 1.000000);
+	f4( 356, 357, 359, 358, 0.000000, 0.000000, -1.000000 );
+	uv( 0.500000, 1.000000, 0.500000, 0.000000, 0.750000, 0.000000, 0.750000, 1.000000);
+	f4( 358, 359, 353, 352, 0.000000, 0.000000, -1.000000 );
+	uv( 0.750000, 1.000000, 0.750000, 0.000000, 1.000000, 0.000000, 1.000000, 1.000000);
+
+	this.computeCentroids();
+	this.computeNormals(true);
+
+	scope.colors = {};
+	scope.selections = {};
+	scope.selections["edges"] = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119];
+
+	scope.autoColor = function(){
+		for(var s in this.selections){
+			for(var i = 0 ; i < this.selections[s].length; i++) this.faces[this.selections[s][i]].material = [new THREE.MeshBasicMaterial({color:this.colors[s]})];
+		}
+	}
+
+	scope.getPosition = function(){	return new THREE.Vector3(0.0, 0.0, 0.0);	}
+
+	scope.getRotation = function(){	return new THREE.Vector3(0.0, 0.0, 0.0);	}
+
+	scope.getScale = function(){	return new THREE.Vector3(1.0, 1.0, 1.0);	}
+
+	function v( x, y, z ) {
+
+		scope.vertices.push( new THREE.Vertex( new THREE.Vector3( x, y, z ) ) );
+
+	}
+
+	function f3( a, b, c, nx, ny, nz ) {
+
+		scope.faces.push( new THREE.Face3( a, b, c, nx && ny && nz ? new THREE.Vector3( nx, ny, nz ) : null ) );
+
+	}
+
+	function f4( a, b, c, d, nx, ny, nz ) {
+
+		scope.faces.push( new THREE.Face4( a, b, c, d, nx && ny && nz ? new THREE.Vector3( nx, ny, nz ) : null ) );
+
+	}
+
+	function uv( u1, v1, u2, v2, u3, v3, u4, v4 ) {
+
+		var uv = [];
+		uv.push( new THREE.UV( u1, v1 ) );
+		uv.push( new THREE.UV( u2, v2 ) );
+		uv.push( new THREE.UV( u3, v3 ) );
+		if ( u4 && v4 ) uv.push( new THREE.UV( u4, v4 ) );
+		scope.uvs.push( uv );
+	}
+
+}
+
+DodecaEdges.prototype = new THREE.Geometry();
+DodecaEdges.prototype.constructor = DodecaEdges;

+ 77 - 0
examples/geometry/NanoArmL.js

@@ -0,0 +1,77 @@
+var NanoArmL = function () {
+
+	var scope = this;
+
+	THREE.Geometry.call(this);
+
+	v( -55.812992, 87.089203, -17.499998 );
+	v( -55.812992, -17.910797, -17.499998 );
+	v( -40.812992, 87.089203, -17.499998 );
+	v( -40.812992, -17.910797, -17.499998 );
+	v( -40.812992, 87.089203, 17.500002 );
+	v( -40.812992, -17.910797, 17.500002 );
+	v( -55.812992, 87.089203, 17.500002 );
+	v( -55.812992, -17.910797, 17.500002 );
+
+	f4( 2, 3, 1, 0, 0.000000, 0.000000, 1.000000 );
+	uv( 1.000000, 1.000000, 1.000000, 0.000000, 0.000000, 0.000000, 0.000000, 1.000000);
+	f4( 4, 5, 3, 2, 0.000000, 0.000000, 1.000000 );
+	uv( 1.000000, 1.000000, 1.000000, 0.000000, 0.000000, 0.000000, 0.000000, 1.000000);
+	f4( 6, 7, 5, 4, 0.000000, 0.000000, 1.000000 );
+	uv( 1.000000, 1.000000, 1.000000, 0.000000, 0.000000, 0.000000, 0.000000, 1.000000);
+	f4( 0, 1, 7, 6, 0.000000, 0.000000, 1.000000 );
+	uv( 1.000000, 1.000000, 1.000000, 0.000000, 0.000000, 0.000000, 0.000000, 1.000000);
+	f4( 3, 5, 7, 1, -1.000000, 0.000000, 0.000000 );
+	uv( 1.000000, 1.000000, 1.000000, 0.000000, 0.000000, 0.000000, 0.000000, 1.000000);
+	f4( 4, 2, 0, 6, -1.000000, 0.000000, 0.000000 );
+	uv( 1.000000, 1.000000, 1.000000, 0.000000, 0.000000, 0.000000, 0.000000, 1.000000);
+
+	scope.colors = {};
+	scope.selections = {};
+	scope.colors["all"] = 0xcac1ba;
+	scope.selections["all"] = [0, 1, 2, 3, 4, 5];
+
+	scope.autoColor = function(){
+		for(var s in this.selections){
+			for(var i = 0 ; i < this.selections[s].length; i++) this.faces[this.selections[s][i]].material = [ new THREE.MeshColorFillMaterial( this.colors[s],1) ];
+		}
+	}
+
+	scope.getPosition = function(){	return new THREE.Vector3(-0.19130706787109375, 89.671585083007812, 33.401443481445312);	}
+
+	scope.getRotation = function(){	return new THREE.Vector3(0.0, 0.0, 0.0);	}
+
+	scope.getScale = function(){	return new THREE.Vector3(1.5, 1.5, 1.5);	}
+
+	function v( x, y, z ) {
+
+		scope.vertices.push( new THREE.Vertex( new THREE.Vector3( x, y, z ) ) );
+
+	}
+
+	function f3( a, b, c, nx, ny, nz ) {
+
+		scope.faces.push( new THREE.Face3( a, b, c, nx && ny && nz ? new THREE.Vector3( nx, ny, nz ) : null ) );
+
+	}
+
+	function f4( a, b, c, d, nx, ny, nz ) {
+
+		scope.faces.push( new THREE.Face4( a, b, c, d, nx && ny && nz ? new THREE.Vector3( nx, ny, nz ) : null ) );
+
+	}
+
+	function uv( u1, v1, u2, v2, u3, v3, u4, v4 ) {
+
+		var uv = [];
+		uv.push( new THREE.UV( u1, v1 ) );
+		uv.push( new THREE.UV( u2, v2 ) );
+		uv.push( new THREE.UV( u3, v3 ) );
+		if ( u4 && v4 ) uv.push( new THREE.UV( u4, v4 ) );
+		scope.uvs.push( uv );
+	}
+
+}
+
+NanoArmL.prototype = new THREE.Geometry();
+NanoArmL.prototype.constructor = NanoArmL;

+ 77 - 0
examples/geometry/NanoArmR.js

@@ -0,0 +1,77 @@
+var NanoArmR = function () {
+
+	var scope = this;
+
+	THREE.Geometry.call(this);
+
+	v( 40.812927, 87.089203, -17.499998 );
+	v( 40.812927, -17.910797, -17.499998 );
+	v( 55.812927, 87.089203, -17.499998 );
+	v( 55.812927, -17.910797, -17.499998 );
+	v( 55.812927, 87.089203, 17.500002 );
+	v( 55.812927, -17.910797, 17.500002 );
+	v( 40.812927, 87.089203, 17.500002 );
+	v( 40.812927, -17.910797, 17.500002 );
+
+	f4( 2, 3, 1, 0, 0.000000, 0.000000, 1.000000 );
+	uv( 1.000000, 1.000000, 1.000000, 0.000000, 0.000000, 0.000000, 0.000000, 1.000000);
+	f4( 4, 5, 3, 2, 0.000000, 0.000000, 1.000000 );
+	uv( 1.000000, 1.000000, 1.000000, 0.000000, 0.000000, 0.000000, 0.000000, 1.000000);
+	f4( 6, 7, 5, 4, 0.000000, 0.000000, 1.000000 );
+	uv( 1.000000, 1.000000, 1.000000, 0.000000, 0.000000, 0.000000, 0.000000, 1.000000);
+	f4( 0, 1, 7, 6, 0.000000, 0.000000, 1.000000 );
+	uv( 1.000000, 1.000000, 1.000000, 0.000000, 0.000000, 0.000000, 0.000000, 1.000000);
+	f4( 3, 5, 7, 1, -1.000000, 0.000000, 0.000000 );
+	uv( 1.000000, 1.000000, 1.000000, 0.000000, 0.000000, 0.000000, 0.000000, 1.000000);
+	f4( 4, 2, 0, 6, -1.000000, 0.000000, 0.000000 );
+	uv( 1.000000, 1.000000, 1.000000, 0.000000, 0.000000, 0.000000, 0.000000, 1.000000);
+
+	scope.colors = {};
+	scope.selections = {};
+	scope.colors["all"] = 0xcac1ba;
+	scope.selections["all"] = [0, 1, 2, 3, 4, 5];
+
+	scope.autoColor = function(){
+		for(var s in this.selections){
+			for(var i = 0 ; i < this.selections[s].length; i++) this.faces[this.selections[s][i]].material = [ new THREE.MeshColorFillMaterial( this.colors[s],1) ];
+		}
+	}
+
+	scope.getPosition = function(){	return new THREE.Vector3(-0.12241363525390625, 89.671585083007812, 33.401443481445312);	}
+
+	scope.getRotation = function(){	return new THREE.Vector3(0.0, 0.0, 0.0);	}
+
+	scope.getScale = function(){	return new THREE.Vector3(1.5, 1.5, 1.5);	}
+
+	function v( x, y, z ) {
+
+		scope.vertices.push( new THREE.Vertex( new THREE.Vector3( x, y, z ) ) );
+
+	}
+
+	function f3( a, b, c, nx, ny, nz ) {
+
+		scope.faces.push( new THREE.Face3( a, b, c, nx && ny && nz ? new THREE.Vector3( nx, ny, nz ) : null ) );
+
+	}
+
+	function f4( a, b, c, d, nx, ny, nz ) {
+
+		scope.faces.push( new THREE.Face4( a, b, c, d, nx && ny && nz ? new THREE.Vector3( nx, ny, nz ) : null ) );
+
+	}
+
+	function uv( u1, v1, u2, v2, u3, v3, u4, v4 ) {
+
+		var uv = [];
+		uv.push( new THREE.UV( u1, v1 ) );
+		uv.push( new THREE.UV( u2, v2 ) );
+		uv.push( new THREE.UV( u3, v3 ) );
+		if ( u4 && v4 ) uv.push( new THREE.UV( u4, v4 ) );
+		scope.uvs.push( uv );
+	}
+
+}
+
+NanoArmR.prototype = new THREE.Geometry();
+NanoArmR.prototype.constructor = NanoArmR;

+ 434 - 0
examples/geometry/NanoBody.js

@@ -0,0 +1,434 @@
+var NanoBody = function () {
+
+	var scope = this;
+
+	THREE.Geometry.call(this);
+
+	v( 10.000000, 11.000000, -21.000000 );
+	v( 10.000000, 5.000000, -26.000000 );
+	v( 10.000000, 5.000000, -26.000000 );
+	v( 10.000000, 8.000000, -12.000000 );
+	v( 10.000000, 11.000000, -12.000000 );
+	v( 10.000000, 11.000000, -21.000000 );
+	v( 10.000000, 5.000000, -26.000000 );
+	v( 10.000000, 11.000000, 14.000000 );
+	v( 10.000000, 4.000000, 22.000000 );
+	v( 10.000000, 11.000000, 26.000000 );
+	v( 10.000000, -11.000000, 26.000000 );
+	v( 10.000000, 8.000000, 14.000000 );
+	v( 10.000000, 8.000000, -12.000000 );
+	v( 10.000000, -3.000000, 22.000000 );
+	v( 10.000000, -3.000000, 18.000000 );
+	v( 10.000000, -11.000000, -26.000000 );
+	v( 10.000000, 4.000000, 18.000000 );
+	v( 10.000000, 11.000000, -12.000000 );
+	v( 10.000000, 8.000000, 14.000000 );
+	v( 10.000000, 8.000000, -12.000000 );
+	v( 10.000000, 11.000000, 14.000000 );
+	v( 10.000000, 8.000000, 14.000000 );
+	v( 10.000000, 11.000000, 26.000000 );
+	v( 10.000000, 11.000000, -12.000000 );
+	v( 10.000000, 11.000000, 14.000000 );
+	v( 10.000000, 11.000000, -21.000000 );
+	v( 10.000000, 11.000000, -21.000000 );
+	v( 10.000000, 5.000000, -26.000000 );
+	v( 10.000000, 5.000000, -26.000000 );
+	v( 5.000000, 11.000000, -12.000000 );
+	v( 3.000000, 11.000000, -12.000000 );
+	v( 4.000000, 4.000000, 22.000000 );
+	v( 4.000000, -11.000000, 26.000000 );
+	v( 4.000000, -3.000000, 22.000000 );
+	v( 4.000000, -3.000000, 18.000000 );
+	v( 4.000000, 8.000000, 14.000000 );
+	v( 4.000000, 4.000000, 18.000000 );
+	v( 3.000000, 11.000000, -17.000000 );
+	v( 4.000000, 8.000000, 14.000000 );
+	v( 4.000000, 11.000000, 26.000000 );
+	v( 4.000000, 11.000000, 14.000000 );
+	v( 5.000000, 11.000000, -17.000000 );
+	v( 4.000000, -11.000000, 14.000000 );
+	v( -5.000000, 11.000000, -17.000000 );
+	v( -4.000000, -11.000000, 14.000000 );
+	v( -5.000000, 8.000000, -12.000000 );
+	v( -3.000000, 8.000000, -12.000000 );
+	v( -3.000000, 8.000000, -17.000000 );
+	v( -5.000000, 8.000000, -17.000000 );
+	v( 5.000000, 8.000000, -12.000000 );
+	v( 3.000000, 8.000000, -12.000000 );
+	v( 3.000000, 8.000000, -17.000000 );
+	v( 5.000000, 8.000000, -17.000000 );
+	v( -4.000000, 8.000000, 7.000000 );
+	v( 4.000000, 8.000000, 7.000000 );
+	v( -4.000000, -11.000000, 7.000000 );
+	v( 4.000000, -11.000000, 7.000000 );
+	v( -4.000000, 6.000000, -5.000000 );
+	v( -4.000000, 6.000000, -8.000000 );
+	v( -4.000000, 6.000000, -1.000000 );
+	v( -4.000000, 6.000000, 1.000000 );
+	v( -4.000000, 8.000000, 1.000000 );
+	v( 4.000000, 6.000000, -5.000000 );
+	v( 4.000000, 6.000000, -8.000000 );
+	v( -4.000000, 8.000000, -1.000000 );
+	v( -4.000000, 8.000000, -5.000000 );
+	v( -4.000000, 8.000000, -8.000000 );
+	v( 4.000000, 6.000000, -1.000000 );
+	v( 4.000000, 6.000000, 1.000000 );
+	v( 4.000000, 8.000000, 1.000000 );
+	v( 4.000000, 8.000000, -1.000000 );
+	v( 4.000000, 8.000000, -5.000000 );
+	v( 4.000000, 8.000000, -8.000000 );
+	v( -10.000000, 11.000000, -21.000000 );
+	v( -10.000000, 5.000000, -26.000000 );
+	v( -10.000000, 5.000000, -26.000000 );
+	v( -10.000000, 11.000000, -12.000000 );
+	v( -10.000000, 5.000000, -26.000000 );
+	v( -10.000000, 4.000000, 22.000000 );
+	v( -10.000000, -11.000000, 26.000000 );
+	v( -10.000000, -3.000000, 22.000000 );
+	v( -10.000000, -3.000000, 18.000000 );
+	v( -10.000000, -11.000000, -26.000000 );
+	v( -10.000000, 4.000000, 18.000000 );
+	v( -10.000000, 8.000000, -12.000000 );
+	v( -10.000000, 8.000000, 14.000000 );
+	v( -10.000000, 11.000000, 26.000000 );
+	v( -10.000000, 11.000000, -12.000000 );
+	v( -10.000000, 11.000000, 14.000000 );
+	v( -10.000000, 11.000000, -21.000000 );
+	v( -10.000000, 11.000000, -21.000000 );
+	v( -10.000000, 5.000000, -26.000000 );
+	v( -10.000000, 5.000000, -26.000000 );
+	v( -5.000000, 11.000000, -12.000000 );
+	v( -3.000000, 11.000000, -12.000000 );
+	v( -4.000000, 4.000000, 22.000000 );
+	v( -4.000000, -11.000000, 26.000000 );
+	v( -4.000000, -3.000000, 22.000000 );
+	v( -4.000000, -3.000000, 18.000000 );
+	v( -4.000000, 8.000000, 14.000000 );
+	v( -4.000000, 4.000000, 18.000000 );
+	v( -3.000000, 11.000000, -17.000000 );
+	v( -4.000000, 8.000000, 14.000000 );
+	v( -4.000000, 11.000000, 26.000000 );
+	v( -4.000000, 11.000000, 14.000000 );
+	v( -5.000000, 11.000000, -17.000000 );
+	v( -4.000000, -11.000000, 14.000000 );
+	v( -5.000000, 8.000000, -12.000000 );
+	v( -3.000000, 8.000000, -12.000000 );
+	v( -3.000000, 8.000000, -17.000000 );
+	v( -5.000000, 8.000000, -17.000000 );
+	v( -4.000000, 8.000000, 7.000000 );
+	v( -4.000000, -11.000000, 7.000000 );
+	v( -4.000000, 6.000000, -5.000000 );
+	v( -4.000000, 6.000000, -8.000000 );
+	v( -4.000000, 6.000000, -1.000000 );
+	v( -4.000000, 6.000000, 1.000000 );
+	v( -4.000000, 8.000000, 1.000000 );
+	v( -4.000000, 8.000000, -1.000000 );
+	v( -4.000000, 8.000000, -5.000000 );
+	v( -4.000000, 8.000000, -8.000000 );
+	v( -10.000000, 11.000000, -21.000000 );
+	v( -10.000000, 5.000000, -26.000000 );
+	v( -10.000000, 5.000000, -26.000000 );
+	v( -10.000000, 11.000000, -12.000000 );
+	v( -10.000000, 5.000000, -26.000000 );
+	v( -10.000000, 4.000000, 22.000000 );
+	v( -10.000000, -11.000000, 26.000000 );
+	v( -10.000000, -3.000000, 22.000000 );
+	v( -10.000000, -3.000000, 18.000000 );
+	v( -10.000000, -11.000000, -26.000000 );
+	v( -10.000000, 4.000000, 18.000000 );
+	v( -10.000000, 8.000000, -12.000000 );
+	v( -10.000000, 8.000000, 14.000000 );
+	v( -10.000000, 11.000000, 26.000000 );
+	v( -10.000000, 11.000000, -12.000000 );
+	v( -10.000000, 11.000000, 14.000000 );
+	v( -10.000000, 11.000000, -21.000000 );
+	v( -10.000000, 11.000000, -21.000000 );
+	v( -10.000000, 5.000000, -26.000000 );
+	v( -10.000000, 5.000000, -26.000000 );
+	v( -5.000000, 11.000000, -12.000000 );
+	v( -3.000000, 11.000000, -12.000000 );
+	v( -4.000000, 4.000000, 22.000000 );
+	v( -4.000000, -11.000000, 26.000000 );
+	v( -4.000000, -3.000000, 22.000000 );
+	v( -4.000000, -3.000000, 18.000000 );
+	v( -4.000000, 8.000000, 14.000000 );
+	v( -4.000000, 4.000000, 18.000000 );
+	v( -3.000000, 11.000000, -17.000000 );
+	v( -4.000000, 8.000000, 14.000000 );
+	v( -4.000000, 11.000000, 26.000000 );
+	v( -4.000000, 11.000000, 14.000000 );
+	v( -5.000000, 11.000000, -17.000000 );
+	v( -4.000000, -11.000000, 14.000000 );
+	v( -5.000000, 8.000000, -12.000000 );
+	v( -3.000000, 8.000000, -12.000000 );
+	v( -3.000000, 8.000000, -17.000000 );
+	v( -5.000000, 8.000000, -17.000000 );
+	v( -4.000000, 8.000000, 7.000000 );
+	v( -4.000000, -11.000000, 7.000000 );
+	v( -4.000000, 6.000000, -5.000000 );
+	v( -4.000000, 6.000000, -8.000000 );
+	v( -4.000000, 6.000000, -1.000000 );
+	v( -4.000000, 6.000000, 1.000000 );
+	v( -4.000000, 8.000000, 1.000000 );
+	v( -4.000000, 8.000000, -1.000000 );
+	v( -4.000000, 8.000000, -5.000000 );
+	v( -4.000000, 8.000000, -8.000000 );
+	v( -10.000000, 11.000000, -21.000000 );
+	v( -10.000000, 5.000000, -26.000000 );
+	v( -10.000000, 5.000000, -26.000000 );
+	v( -10.000000, 11.000000, -12.000000 );
+	v( -10.000000, 5.000000, -26.000000 );
+	v( -10.000000, 4.000000, 22.000000 );
+	v( -10.000000, -11.000000, 26.000000 );
+	v( -10.000000, -3.000000, 22.000000 );
+	v( -10.000000, -3.000000, 18.000000 );
+	v( -10.000000, -11.000000, -26.000000 );
+	v( -10.000000, 4.000000, 18.000000 );
+	v( -10.000000, 8.000000, -12.000000 );
+	v( -10.000000, 8.000000, 14.000000 );
+	v( -10.000000, 11.000000, 26.000000 );
+	v( -10.000000, 11.000000, -12.000000 );
+	v( -10.000000, 11.000000, 14.000000 );
+	v( -10.000000, 11.000000, -21.000000 );
+	v( -10.000000, 11.000000, -21.000000 );
+	v( -10.000000, 5.000000, -26.000000 );
+	v( -10.000000, 5.000000, -26.000000 );
+	v( -5.000000, 11.000000, -12.000000 );
+	v( -3.000000, 11.000000, -12.000000 );
+	v( -4.000000, 4.000000, 22.000000 );
+	v( -4.000000, -11.000000, 26.000000 );
+	v( -4.000000, -3.000000, 22.000000 );
+	v( -4.000000, -3.000000, 18.000000 );
+	v( -4.000000, 8.000000, 14.000000 );
+	v( -4.000000, 4.000000, 18.000000 );
+	v( -3.000000, 11.000000, -17.000000 );
+	v( -4.000000, 8.000000, 14.000000 );
+	v( -4.000000, 11.000000, 26.000000 );
+	v( -4.000000, 11.000000, 14.000000 );
+
+	f3( 26, 27, 28 );
+	uv( 0.000000, 1.000000, 0.996643, 0.000000, 1.000000, 0.000000);
+	f4( 180, 173, 178, 177 );
+	uv( 1.000000, 1.000000, 1.000000, 0.000000, 0.000000, 0.000000, 0.000000, 1.000000);
+	f4( 68, 67, 59, 60 );
+	uv( 0.000000, 1.000000, 1.000000, 1.000000, 1.000000, 0.000000, 0.000000, 0.000000);
+	f4( 14, 34, 33, 13 );
+	uv( 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 0.000000, 1.000000, 0.000000);
+	f3( 21, 14, 19 );
+	uv( 0.000000, 0.000000, 1.000000, 0.000000, 1.000000, 1.000000);
+	f4( 59, 67, 70, 64 );
+	uv( 0.000000, 1.000000, 1.000000, 1.000000, 1.000000, 0.000000, 0.000000, 0.000000);
+	f4( 24, 40, 39, 22 );
+	uv( 0.000000, 0.000000, 0.000000, 0.000000, 1.000000, 1.000000, 1.000000, 1.000000);
+	f3( 55, 175, 178 );
+	uv( 1.000000, 0.000000, 0.000000, 0.000000, 1.000000, 1.000000);
+	f3( 2, 1, 0 );
+	uv( 1.000000, 1.000000, 1.000000, 0.000000, 0.000000, 0.000000);
+	f4( 0, 26, 28, 2 );
+	uv( 0.000000, 1.000000, 0.000000, 1.000000, 1.000000, 0.000000, 1.000000, 0.000000);
+	f4( 1, 27, 26, 0 );
+	uv( 0.996643, 0.000000, 0.996643, 0.000000, 0.000000, 1.000000, 0.000000, 1.000000);
+	f4( 2, 28, 27, 1 );
+	uv( 1.000000, 0.000000, 1.000000, 0.000000, 0.996643, 0.000000, 0.996643, 0.000000);
+	f4( 8, 16, 21, 24 );
+	uv( 0.000000, 0.000000, 1.000000, 0.000000, 1.000000, 1.000000, 0.000000, 1.000000);
+	f4( 22, 10, 13, 8 );
+	uv( 0.000000, 0.000000, 1.000000, 0.000000, 1.000000, 1.000000, 0.000000, 1.000000);
+	f4( 189, 183, 180, 45 );
+	uv( 1.000000, 0.000000, 1.000000, 1.000000, 0.000000, 1.000000, 0.000000, 0.000000);
+	f4( 6, 25, 4, 19 );
+	uv( 0.000000, 0.000000, 1.000000, 0.000000, 1.000000, 1.000000, 0.000000, 1.000000);
+	f4( 15, 14, 13, 10 );
+	uv( 0.000000, 0.000000, 1.000000, 0.000000, 1.000000, 1.000000, 0.000000, 1.000000);
+	f4( 70, 67, 68, 69 );
+	uv( 0.000000, 0.000000, 1.000000, 0.000000, 1.000000, 1.000000, 0.000000, 1.000000);
+	f3( 22, 8, 24 );
+	uv( 0.000000, 0.000000, 1.000000, 0.000000, 1.000000, 1.000000);
+	f4( 8, 31, 36, 16 );
+	uv( 0.000000, 1.000000, 0.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000);
+	f4( 21, 38, 40, 24 );
+	uv( 1.000000, 0.000000, 1.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000);
+	f4( 22, 39, 32, 10 );
+	uv( 0.000000, 0.000000, 0.000000, 0.000000, 1.000000, 0.000000, 1.000000, 0.000000);
+	f4( 13, 33, 31, 8 );
+	uv( 1.000000, 1.000000, 1.000000, 1.000000, 0.000000, 1.000000, 0.000000, 1.000000);
+	f4( 44, 192, 175, 55 );
+	uv( 1.000000, 1.000000, 1.000000, 0.000000, 0.000000, 0.000000, 0.000000, 1.000000);
+	f4( 16, 36, 34, 14 );
+	uv( 1.000000, 0.000000, 1.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000);
+	f4( 58, 63, 72, 66 );
+	uv( 0.000000, 1.000000, 1.000000, 1.000000, 1.000000, 0.000000, 0.000000, 0.000000);
+	f4( 49, 52, 51, 50 );
+	uv( 0.167026, 0.832973, 0.832974, 0.832973, 0.832974, 0.167026, 0.167026, 0.167026);
+	f4( 36, 40, 42, 34 );
+	uv( 0.000000, 1.000000, 1.000000, 1.000000, 1.000000, 0.000000, 0.000000, 0.000000);
+	f4( 31, 39, 40, 36 );
+	uv( 0.000000, 1.000000, 1.000000, 1.000000, 1.000000, 0.000000, 0.000000, 0.000000);
+	f4( 32, 39, 31, 33 );
+	uv( 0.000000, 1.000000, 1.000000, 1.000000, 1.000000, 0.000000, 0.000000, 0.000000);
+	f4( 32, 33, 34, 42 );
+	uv( 0.000000, 1.000000, 1.000000, 1.000000, 1.000000, 0.000000, 0.000000, 0.000000);
+	f4( 48, 47, 197, 43 );
+	uv( 1.000000, 0.000000, 1.000000, 1.000000, 0.000000, 1.000000, 0.000000, 0.000000);
+	f4( 62, 63, 58, 57 );
+	uv( 0.000000, 1.000000, 1.000000, 1.000000, 1.000000, 0.000000, 0.000000, 0.000000);
+	f4( 30, 37, 197, 190 );
+	uv( 0.000000, 1.000000, 1.000000, 1.000000, 1.000000, 0.000000, 0.000000, 0.000000);
+	f4( 41, 52, 49, 29 );
+	uv( 0.000000, 1.000000, 1.000000, 1.000000, 1.000000, 0.000000, 0.000000, 0.000000);
+	f4( 37, 51, 52, 41 );
+	uv( 0.000000, 1.000000, 1.000000, 1.000000, 1.000000, 0.000000, 0.000000, 0.000000);
+	f4( 26, 41, 29, 23 );
+	uv( 0.000000, 1.000000, 1.000000, 1.000000, 1.000000, 0.000000, 0.000000, 0.000000);
+	f4( 57, 58, 66, 65 );
+	uv( 1.000000, 1.000000, 1.000000, 0.000000, 0.000000, 0.000000, 0.000000, 1.000000);
+	f4( 30, 50, 51, 37 );
+	uv( 0.000000, 1.000000, 1.000000, 1.000000, 1.000000, 0.000000, 0.000000, 0.000000);
+	f4( 19, 23, 29, 49 );
+	uv( 0.000000, 1.000000, 1.000000, 1.000000, 1.000000, 0.000000, 0.000000, 0.000000);
+	f4( 189, 43, 186, 183 );
+	uv( 1.000000, 0.000000, 1.000000, 1.000000, 0.000000, 1.000000, 0.000000, 0.000000);
+	f4( 72, 63, 62, 71 );
+	uv( 0.000000, 0.000000, 1.000000, 0.000000, 1.000000, 1.000000, 0.000000, 1.000000);
+	f4( 19, 72, 35, 21 );
+	uv( 0.000000, 0.000000, 1.000000, 0.000000, 1.000000, 1.000000, 0.000000, 1.000000);
+	f3( 21, 16, 14 );
+	uv( 1.000000, 0.000000, 1.000000, 1.000000, 0.000000, 1.000000);
+	f4( 71, 62, 57, 65 );
+	uv( 0.000000, 1.000000, 1.000000, 1.000000, 1.000000, 0.000000, 0.000000, 0.000000);
+	f4( 69, 68, 60, 61 );
+	uv( 0.000000, 1.000000, 1.000000, 1.000000, 1.000000, 0.000000, 0.000000, 0.000000);
+	f4( 195, 66, 180, 181 );
+	uv( 1.000000, 1.000000, 1.000000, 0.000000, 0.000000, 0.000000, 0.000000, 1.000000);
+	f4( 26, 28, 188, 186 );
+	uv( 0.000000, 1.000000, 1.000000, 1.000000, 1.000000, 0.000000, 0.000000, 0.000000);
+	f4( 15, 6, 19, 14 );
+	uv( 0.000000, 0.000000, 1.000000, 0.000000, 1.000000, 1.000000, 0.000000, 1.000000);
+	f4( 10, 32, 42, 56 );
+	uv( 0.000000, 0.000000, 1.000000, 0.000000, 1.000000, 1.000000, 0.000000, 1.000000);
+	f3( 10, 56, 15 );
+	uv( 0.000000, 0.000000, 1.000000, 0.000000, 1.000000, 1.000000);
+	f4( 35, 54, 56, 42 );
+	uv( 0.000000, 1.000000, 1.000000, 1.000000, 1.000000, 0.000000, 0.000000, 0.000000);
+	f3( 187, 186, 188 );
+	uv( 0.996643, 0.000000, 0.000000, 1.000000, 1.000000, 0.000000);
+	f4( 15, 178, 188, 28 );
+	uv( 0.000000, 1.000000, 1.000000, 1.000000, 1.000000, 0.000000, 0.000000, 0.000000);
+	f4( 47, 46, 190, 197 );
+	uv( 1.000000, 0.000000, 1.000000, 1.000000, 0.000000, 1.000000, 0.000000, 0.000000);
+	f4( 193, 194, 177, 176 );
+	uv( 1.000000, 0.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 0.000000);
+	f3( 177, 181, 180 );
+	uv( 1.000000, 0.000000, 0.000000, 0.000000, 1.000000, 1.000000);
+	f4( 54, 69, 61, 53 );
+	uv( 0.000000, 1.000000, 1.000000, 1.000000, 1.000000, 0.000000, 0.000000, 0.000000);
+	f4( 199, 200, 184, 182 );
+	uv( 1.000000, 1.000000, 0.000000, 0.000000, 0.000000, 0.000000, 1.000000, 1.000000);
+	f4( 55, 53, 195, 44 );
+	uv( 1.000000, 0.000000, 1.000000, 1.000000, 0.000000, 1.000000, 0.000000, 0.000000);
+	f3( 170, 171, 169 );
+	uv( 1.000000, 0.000000, 1.000000, 1.000000, 0.000000, 0.000000);
+	f4( 188, 186, 169, 171 );
+	uv( 1.000000, 0.000000, 0.000000, 1.000000, 0.000000, 1.000000, 1.000000, 0.000000);
+	f4( 186, 187, 170, 169 );
+	uv( 0.000000, 1.000000, 0.996643, 0.000000, 0.996643, 0.000000, 0.000000, 1.000000);
+	f4( 187, 188, 171, 170 );
+	uv( 0.996643, 0.000000, 1.000000, 0.000000, 1.000000, 0.000000, 0.996643, 0.000000);
+	f4( 181, 179, 174, 184 );
+	uv( 1.000000, 1.000000, 1.000000, 0.000000, 0.000000, 0.000000, 0.000000, 1.000000);
+	f4( 176, 175, 182, 174 );
+	uv( 1.000000, 1.000000, 1.000000, 0.000000, 0.000000, 0.000000, 0.000000, 1.000000);
+	f3( 179, 181, 177 );
+	uv( 1.000000, 1.000000, 1.000000, 0.000000, 0.000000, 1.000000);
+	f4( 172, 185, 173, 180 );
+	uv( 1.000000, 1.000000, 1.000000, 0.000000, 0.000000, 0.000000, 0.000000, 1.000000);
+	f4( 176, 177, 178, 175 );
+	uv( 1.000000, 1.000000, 1.000000, 0.000000, 0.000000, 0.000000, 0.000000, 1.000000);
+	f4( 60, 59, 64, 61 );
+	uv( 1.000000, 1.000000, 1.000000, 0.000000, 0.000000, 0.000000, 0.000000, 1.000000);
+	f3( 174, 182, 184 );
+	uv( 1.000000, 0.000000, 0.000000, 0.000000, 1.000000, 1.000000);
+	f4( 196, 191, 174, 179 );
+	uv( 1.000000, 1.000000, 0.000000, 1.000000, 0.000000, 1.000000, 1.000000, 1.000000);
+	f4( 200, 198, 181, 184 );
+	uv( 0.000000, 0.000000, 1.000000, 0.000000, 1.000000, 0.000000, 0.000000, 0.000000);
+	f4( 192, 199, 182, 175 );
+	uv( 1.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 1.000000, 0.000000);
+	f4( 191, 193, 176, 174 );
+	uv( 0.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 0.000000, 1.000000);
+	f4( 56, 55, 178, 15 );
+	uv( 0.000000, 0.000000, 1.000000, 0.000000, 1.000000, 1.000000, 0.000000, 1.000000);
+	f4( 194, 196, 179, 177 );
+	uv( 0.000000, 0.000000, 1.000000, 0.000000, 1.000000, 0.000000, 0.000000, 0.000000);
+	f4( 70, 71, 65, 64 );
+	uv( 0.000000, 1.000000, 1.000000, 1.000000, 1.000000, 0.000000, 0.000000, 0.000000);
+	f4( 47, 48, 45, 46 );
+	uv( 0.832974, 0.167026, 0.832974, 0.832973, 0.167026, 0.832973, 0.167026, 0.167026);
+	f4( 44, 200, 196, 194 );
+	uv( 1.000000, 0.000000, 1.000000, 1.000000, 0.000000, 1.000000, 0.000000, 0.000000);
+	f4( 200, 199, 191, 196 );
+	uv( 1.000000, 0.000000, 1.000000, 1.000000, 0.000000, 1.000000, 0.000000, 0.000000);
+	f4( 191, 199, 192, 193 );
+	uv( 1.000000, 0.000000, 1.000000, 1.000000, 0.000000, 1.000000, 0.000000, 0.000000);
+	f4( 194, 193, 192, 44 );
+	uv( 1.000000, 0.000000, 1.000000, 1.000000, 0.000000, 1.000000, 0.000000, 0.000000);
+	f4( 72, 19, 180, 66 );
+	uv( 0.000000, 1.000000, 1.000000, 1.000000, 1.000000, 0.000000, 0.000000, 0.000000);
+	f4( 50, 30, 190, 46 );
+	uv( 0.000000, 1.000000, 1.000000, 1.000000, 1.000000, 0.000000, 0.000000, 0.000000);
+	f4( 43, 41, 26, 186 );
+	uv( 0.000000, 1.000000, 1.000000, 1.000000, 1.000000, 0.000000, 0.000000, 0.000000);
+	f4( 45, 48, 43, 189 );
+	uv( 1.000000, 0.000000, 1.000000, 1.000000, 0.000000, 1.000000, 0.000000, 0.000000);
+	f4( 56, 54, 53, 55 );
+	uv( 0.000000, 1.000000, 1.000000, 1.000000, 1.000000, 0.000000, 0.000000, 0.000000);
+
+	scope.colors = {};
+	scope.selections = {};
+	scope.colors["all"] = 0xcac1ba;
+	scope.selections["all"] = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87];
+
+	scope.autoColor = function(){
+		for(var s in this.selections){
+			for(var i = 0 ; i < this.selections[s].length; i++) this.faces[this.selections[s][i]].material = [ new THREE.MeshColorFillMaterial( this.colors[s],1) ];
+		}
+	}
+
+	scope.getPosition = function(){	return new THREE.Vector3(0.031317710876464844, 13.365085601806641, 6.3298587799072266);	}
+
+	scope.getRotation = function(){	return new THREE.Vector3(-1.5707963705062866, 0.0, 0.0);	}
+
+	scope.getScale = function(){	return new THREE.Vector3(6.0, 6.0, 6.0);	}
+
+	function v( x, y, z ) {
+
+		scope.vertices.push( new THREE.Vertex( new THREE.Vector3( x, y, z ) ) );
+
+	}
+
+	function f3( a, b, c, nx, ny, nz ) {
+
+		scope.faces.push( new THREE.Face3( a, b, c, nx && ny && nz ? new THREE.Vector3( nx, ny, nz ) : null ) );
+
+	}
+
+	function f4( a, b, c, d, nx, ny, nz ) {
+
+		scope.faces.push( new THREE.Face4( a, b, c, d, nx && ny && nz ? new THREE.Vector3( nx, ny, nz ) : null ) );
+
+	}
+
+	function uv( u1, v1, u2, v2, u3, v3, u4, v4 ) {
+
+		var uv = [];
+		uv.push( new THREE.UV( u1, v1 ) );
+		uv.push( new THREE.UV( u2, v2 ) );
+		uv.push( new THREE.UV( u3, v3 ) );
+		if ( u4 && v4 ) uv.push( new THREE.UV( u4, v4 ) );
+		scope.uvs.push( uv );
+	}
+
+}
+
+NanoBody.prototype = new THREE.Geometry();
+NanoBody.prototype.constructor = NanoBody;

+ 1072 - 0
examples/geometry/Q5.js

@@ -0,0 +1,1072 @@
+var Q5 = function () {
+
+	var scope = this;
+
+	THREE.Geometry.call(this);
+
+	v( 22.000000, 28.000000, -126.000000 );
+	v( 42.000000, 28.000000, -105.000000 );
+	v( 42.000000, 7.000000, -87.000000 );
+	v( -25.000000, 28.000000, -88.000000 );
+	v( 42.000000, 7.000000, -105.000000 );
+	v( -11.000000, 28.000000, -126.000000 );
+	v( -25.000000, 26.000000, -88.000000 );
+	v( -2.000000, 28.000000, -100.000000 );
+	v( -11.000000, 28.000000, -100.000000 );
+	v( -42.000000, -32.000000, -72.000000 );
+	v( -25.000000, 28.000000, -100.000000 );
+	v( -11.000000, 28.000000, -91.000000 );
+	v( -42.000000, 42.000000, -18.000000 );
+	v( 42.000000, 28.000000, -76.000000 );
+	v( -22.000000, 28.000000, -91.000000 );
+	v( 40.000000, -39.000000, -15.000000 );
+	v( 41.000000, -17.000000, -36.000000 );
+	v( 27.000000, 27.000000, -20.000000 );
+	v( 27.000000, 36.000000, -66.000000 );
+	v( 41.000000, 36.000000, -20.000000 );
+	v( 24.000000, 36.000000, -54.000000 );
+	v( 36.000000, 36.000000, -66.000000 );
+	v( 27.000000, 36.000000, -73.000000 );
+	v( 14.000000, 36.000000, -73.000000 );
+	v( 41.000000, 36.000000, -58.000000 );
+	v( 14.000000, 36.000000, -54.000000 );
+	v( 27.000000, 36.000000, -58.000000 );
+	v( -2.000000, 36.000000, -67.000000 );
+	v( 14.000000, 36.000000, -48.000000 );
+	v( -2.000000, 36.000000, -86.000000 );
+	v( 36.000000, 36.000000, -86.000000 );
+	v( 24.000000, 36.000000, -67.000000 );
+	v( 27.000000, 36.000000, -48.000000 );
+	v( 14.000000, 36.000000, -67.000000 );
+	v( -8.000000, 36.000000, -67.000000 );
+	v( 27.000000, 36.000000, -31.000000 );
+	v( -27.000000, -48.000000, -62.000000 );
+	v( -11.000000, 28.000000, -76.000000 );
+	v( 5.000000, 36.000000, -31.000000 );
+	v( 5.000000, 36.000000, -25.000000 );
+	v( -25.000000, 26.000000, -76.000000 );
+	v( -13.000000, -46.000000, 70.000000 );
+	v( -25.000000, -46.000000, 70.000000 );
+	v( 7.000000, -46.000000, 100.000000 );
+	v( -13.000000, -46.000000, 80.000000 );
+	v( -42.000000, -48.000000, -39.000000 );
+	v( -10.000000, -39.000000, -6.000000 );
+	v( 40.000000, -17.000000, -15.000000 );
+	v( 40.000000, -27.000000, 4.000000 );
+	v( -35.000000, -32.000000, -60.000000 );
+	v( 24.000000, -19.000000, 47.000000 );
+	v( 36.000000, -33.000000, -15.000000 );
+	v( -2.000000, 28.000000, -86.000000 );
+	v( 24.000000, -23.000000, 62.000000 );
+	v( 36.000000, 28.000000, -86.000000 );
+	v( -11.000000, -33.000000, -46.000000 );
+	v( -2.000000, 28.000000, -76.000000 );
+	v( 26.000000, -19.000000, 47.000000 );
+	v( 36.000000, 28.000000, -76.000000 );
+	v( -8.000000, -46.000000, 32.000000 );
+	v( -11.000000, -53.000000, -62.000000 );
+	v( -25.000000, -24.000000, 124.000000 );
+	v( -4.000000, -48.000000, -17.000000 );
+	v( -4.000000, -48.000000, -25.000000 );
+	v( -22.000000, -53.000000, -91.000000 );
+	v( 24.000000, -39.000000, 47.000000 );
+	v( 40.000000, -19.000000, 32.000000 );
+	v( 24.000000, -18.000000, -67.000000 );
+	v( 0.000000, -39.000000, 23.000000 );
+	v( 9.000000, -24.000000, 62.000000 );
+	v( 36.000000, -46.000000, 124.000000 );
+	v( -35.000000, -48.000000, -39.000000 );
+	v( 41.000000, -27.000000, -46.000000 );
+	v( -27.000000, -53.000000, -62.000000 );
+	v( -8.000000, 36.000000, -25.000000 );
+	v( -10.000000, -39.000000, -13.000000 );
+	v( -25.000000, -46.000000, 80.000000 );
+	v( -8.000000, -3.000000, -25.000000 );
+	v( -30.000000, -48.000000, -83.000000 );
+	v( -22.000000, -48.000000, -91.000000 );
+	v( 27.000000, -48.000000, -6.000000 );
+	v( -10.000000, -48.000000, -6.000000 );
+	v( -4.000000, 42.000000, -6.000000 );
+	v( -11.000000, 28.000000, -91.000000 );
+	v( 22.000000, -34.000000, -100.000000 );
+	v( -8.000000, -3.000000, -25.000000 );
+	v( -8.000000, -39.000000, 23.000000 );
+	v( 24.000000, -40.000000, -54.000000 );
+	v( -25.000000, -46.000000, 128.000000 );
+	v( -27.000000, -53.000000, -86.000000 );
+	v( 22.000000, -34.000000, -108.000000 );
+	v( -27.000000, -48.000000, -86.000000 );
+	v( 32.000000, -13.000000, -116.000000 );
+	v( -8.000000, 36.000000, -25.000000 );
+	v( 36.000000, -33.000000, -20.000000 );
+	v( 6.000000, -34.000000, -108.000000 );
+	v( -11.000000, -3.000000, -25.000000 );
+	v( 27.000000, 36.000000, -20.000000 );
+	v( -19.000000, -39.000000, -6.000000 );
+	v( 36.000000, -23.000000, 118.000000 );
+	v( -42.000000, -32.000000, -39.000000 );
+	v( 6.000000, -34.000000, -100.000000 );
+	v( -19.000000, 33.000000, 64.000000 );
+	v( 24.000000, 13.000000, 12.000000 );
+	v( 12.000000, 40.000000, 82.000000 );
+	v( -25.000000, 18.000000, 64.000000 );
+	v( -8.000000, -46.000000, 64.000000 );
+	v( 12.000000, 17.000000, 82.000000 );
+	v( 24.000000, 17.000000, 81.000000 );
+	v( 24.000000, 17.000000, 73.000000 );
+	v( 36.000000, 17.000000, 124.000000 );
+	v( -25.000000, 18.000000, 128.000000 );
+	v( 24.000000, 40.000000, 81.000000 );
+	v( -25.000000, 18.000000, 72.000000 );
+	v( -25.000000, 40.000000, 64.000000 );
+	v( 36.000000, 17.000000, 128.000000 );
+	v( -13.000000, 40.000000, 102.000000 );
+	v( 9.000000, 18.000000, 53.000000 );
+	v( -8.000000, 33.000000, 64.000000 );
+	v( 5.000000, 42.000000, -31.000000 );
+	v( 27.000000, 42.000000, -31.000000 );
+	v( -10.000000, 42.000000, -13.000000 );
+	v( 5.000000, 42.000000, -25.000000 );
+	v( -11.000000, 42.000000, -62.000000 );
+	v( -35.000000, 42.000000, -60.000000 );
+	v( -11.000000, 42.000000, -25.000000 );
+	v( -11.000000, 47.000000, -91.000000 );
+	v( 24.000000, 33.000000, 12.000000 );
+	v( 24.000000, 13.000000, 47.000000 );
+	v( 27.000000, 33.000000, -15.000000 );
+	v( 27.000000, 27.000000, -15.000000 );
+	v( 27.000000, 27.000000, -20.000000 );
+	v( -11.000000, 47.000000, -62.000000 );
+	v( -27.000000, 47.000000, -62.000000 );
+	v( -22.000000, 47.000000, -91.000000 );
+	v( 40.000000, 33.000000, 12.000000 );
+	v( 40.000000, 13.000000, 12.000000 );
+	v( 40.000000, 33.000000, -15.000000 );
+	v( 36.000000, 27.000000, -20.000000 );
+	v( -27.000000, 42.000000, -62.000000 );
+	v( -8.000000, 33.000000, 23.000000 );
+	v( -8.000000, 40.000000, 64.000000 );
+	v( -8.000000, 40.000000, 23.000000 );
+	v( 0.000000, 33.000000, 23.000000 );
+	v( 24.000000, 33.000000, 47.000000 );
+	v( 26.000000, 13.000000, 47.000000 );
+	v( 40.000000, 13.000000, 32.000000 );
+	v( 24.000000, 13.000000, 32.000000 );
+	v( 9.000000, 18.000000, 62.000000 );
+	v( 24.000000, 40.000000, 47.000000 );
+	v( 36.000000, 27.000000, -15.000000 );
+	v( 0.000000, 40.000000, 23.000000 );
+	v( 24.000000, 17.000000, 62.000000 );
+	v( 24.000000, 17.000000, 53.000000 );
+	v( 36.000000, 40.000000, 124.000000 );
+	v( -42.000000, 42.000000, -72.000000 );
+	v( -25.000000, 40.000000, 128.000000 );
+	v( 36.000000, 17.000000, 118.000000 );
+	v( 36.000000, 40.000000, 128.000000 );
+	v( -25.000000, 40.000000, 102.000000 );
+	v( 12.000000, 40.000000, 95.000000 );
+	v( 36.000000, 40.000000, 118.000000 );
+	v( 12.000000, 17.000000, 95.000000 );
+	v( -10.000000, 33.000000, -13.000000 );
+	v( -19.000000, 33.000000, -6.000000 );
+	v( -42.000000, 33.000000, -6.000000 );
+	v( -42.000000, 33.000000, -13.000000 );
+	v( -42.000000, 42.000000, -39.000000 );
+	v( -42.000000, 26.000000, -33.000000 );
+	v( -42.000000, 42.000000, -13.000000 );
+	v( -10.000000, 33.000000, -6.000000 );
+	v( 27.000000, 33.000000, -6.000000 );
+	v( -10.000000, 42.000000, -6.000000 );
+	v( -2.000000, -34.000000, -108.000000 );
+	v( -42.000000, 26.000000, -39.000000 );
+	v( -35.000000, 42.000000, -39.000000 );
+	v( -42.000000, 26.000000, -60.000000 );
+	v( -35.000000, 26.000000, -60.000000 );
+	v( -35.000000, 26.000000, -39.000000 );
+	v( -11.000000, 26.000000, -33.000000 );
+	v( 27.000000, 42.000000, -6.000000 );
+	v( -42.000000, 42.000000, -60.000000 );
+	v( -42.000000, 26.000000, -72.000000 );
+	v( -27.000000, 47.000000, -86.000000 );
+	v( -27.000000, 42.000000, -86.000000 );
+	v( 24.000000, -28.000000, -67.000000 );
+	v( 24.000000, -5.000000, -67.000000 );
+	v( 41.000000, -27.000000, -20.000000 );
+	v( -42.000000, -48.000000, -72.000000 );
+	v( -11.000000, -48.000000, -91.000000 );
+	v( -4.000000, -39.000000, -6.000000 );
+	v( 14.000000, -34.000000, -100.000000 );
+	v( -8.000000, -46.000000, 23.000000 );
+	v( 40.000000, -27.000000, -15.000000 );
+	v( 40.000000, -17.000000, -6.000000 );
+	v( -30.000000, -48.000000, -18.000000 );
+	v( 36.000000, -46.000000, 128.000000 );
+	v( -11.000000, -32.000000, -33.000000 );
+	v( -25.000000, -46.000000, 102.000000 );
+	v( -42.000000, -48.000000, -60.000000 );
+	v( 12.000000, -46.000000, 95.000000 );
+	v( 40.000000, -19.000000, 12.000000 );
+	v( -42.000000, -39.000000, -6.000000 );
+	v( -42.000000, -39.000000, -13.000000 );
+	v( 14.000000, -34.000000, -108.000000 );
+	v( -25.000000, -46.000000, 91.000000 );
+	v( -25.000000, -46.000000, 110.000000 );
+	v( -13.000000, -46.000000, 91.000000 );
+	v( -42.000000, -32.000000, -33.000000 );
+	v( 7.000000, -46.000000, 110.000000 );
+	v( 7.000000, -46.000000, 46.000000 );
+	v( -42.000000, -48.000000, -13.000000 );
+	v( 27.000000, -39.000000, -6.000000 );
+	v( -25.000000, -46.000000, 124.000000 );
+	v( 27.000000, -39.000000, -15.000000 );
+	v( 0.000000, -46.000000, 23.000000 );
+	v( 24.000000, -23.000000, 53.000000 );
+	v( 40.000000, -39.000000, 12.000000 );
+	v( 24.000000, -19.000000, 32.000000 );
+	v( 24.000000, -46.000000, 47.000000 );
+	v( -42.000000, -32.000000, -60.000000 );
+	v( 32.000000, 7.000000, -116.000000 );
+	v( -25.000000, -24.000000, 124.000000 );
+	v( -13.000000, -46.000000, 64.000000 );
+	v( 6.000000, 28.000000, -100.000000 );
+	v( -2.000000, 28.000000, -108.000000 );
+	v( 22.000000, 28.000000, -108.000000 );
+	v( 14.000000, 28.000000, -108.000000 );
+	v( 6.000000, 28.000000, -108.000000 );
+	v( 22.000000, 28.000000, -100.000000 );
+	v( 14.000000, 28.000000, -100.000000 );
+	v( 41.000000, -17.000000, -20.000000 );
+	v( 40.000000, 11.000000, -6.000000 );
+	v( 41.000000, 11.000000, -36.000000 );
+	v( 36.000000, -46.000000, 118.000000 );
+	v( 41.000000, 21.000000, -20.000000 );
+	v( 12.000000, -23.000000, 95.000000 );
+	v( -30.000000, 42.000000, -83.000000 );
+	v( -11.000000, 42.000000, -91.000000 );
+	v( -30.000000, 42.000000, -18.000000 );
+	v( -22.000000, 42.000000, -91.000000 );
+	v( -4.000000, 42.000000, -17.000000 );
+	v( -4.000000, 42.000000, -25.000000 );
+	v( -4.000000, 33.000000, -6.000000 );
+	v( -4.000000, 33.000000, -6.000000 );
+	v( 24.000000, 22.000000, -67.000000 );
+	v( 24.000000, 22.000000, -54.000000 );
+	v( 24.000000, -1.000000, -67.000000 );
+	v( 24.000000, 34.000000, -67.000000 );
+	v( 24.000000, -1.000000, -54.000000 );
+	v( 24.000000, 12.000000, -54.000000 );
+	v( 24.000000, 12.000000, -67.000000 );
+	v( 24.000000, 34.000000, -54.000000 );
+	v( 24.000000, -28.000000, -54.000000 );
+	v( 41.000000, 21.000000, -20.000000 );
+	v( 40.000000, 21.000000, -15.000000 );
+	v( 24.000000, -40.000000, -67.000000 );
+	v( 24.000000, -5.000000, -54.000000 );
+	v( 40.000000, 21.000000, 4.000000 );
+	v( 24.000000, -18.000000, -54.000000 );
+	v( 41.000000, 21.000000, -46.000000 );
+	v( -11.000000, 26.000000, -36.000000 );
+	v( -11.000000, -32.000000, -36.000000 );
+	v( 41.000000, 11.000000, -20.000000 );
+	v( 40.000000, 11.000000, -15.000000 );
+	v( -11.000000, 27.000000, -46.000000 );
+	v( -35.000000, -32.000000, -39.000000 );
+	v( -8.000000, 40.000000, 32.000000 );
+	v( 27.000000, -33.000000, -15.000000 );
+	v( 27.000000, -33.000000, -20.000000 );
+	v( -25.000000, 18.000000, 124.000000 );
+	v( -25.000000, 40.000000, 80.000000 );
+	v( -25.000000, 40.000000, 70.000000 );
+	v( -13.000000, 40.000000, 70.000000 );
+	v( -25.000000, 18.000000, 124.000000 );
+	v( -13.000000, 40.000000, 80.000000 );
+	v( -25.000000, 40.000000, 91.000000 );
+	v( 7.000000, 40.000000, 100.000000 );
+	v( 7.000000, 40.000000, 46.000000 );
+	v( -25.000000, 40.000000, 110.000000 );
+	v( -13.000000, 40.000000, 91.000000 );
+	v( 7.000000, 40.000000, 110.000000 );
+	v( -25.000000, 40.000000, 124.000000 );
+	v( -13.000000, 40.000000, 64.000000 );
+	v( 22.000000, -34.000000, -126.000000 );
+	v( 42.000000, -34.000000, -105.000000 );
+	v( 42.000000, -13.000000, -87.000000 );
+	v( -25.000000, -34.000000, -88.000000 );
+	v( 42.000000, -13.000000, -105.000000 );
+	v( -11.000000, -34.000000, -126.000000 );
+	v( -25.000000, -32.000000, -88.000000 );
+	v( -2.000000, -34.000000, -100.000000 );
+	v( -11.000000, -34.000000, -100.000000 );
+	v( -25.000000, -34.000000, -100.000000 );
+	v( -11.000000, -34.000000, -91.000000 );
+	v( -42.000000, -48.000000, -18.000000 );
+	v( 42.000000, -34.000000, -76.000000 );
+	v( -22.000000, -34.000000, -91.000000 );
+	v( 27.000000, -33.000000, -20.000000 );
+	v( 27.000000, -42.000000, -66.000000 );
+	v( 41.000000, -42.000000, -20.000000 );
+	v( 24.000000, -42.000000, -54.000000 );
+	v( 36.000000, -42.000000, -66.000000 );
+	v( 27.000000, -42.000000, -73.000000 );
+	v( 14.000000, -42.000000, -73.000000 );
+	v( 41.000000, -42.000000, -58.000000 );
+	v( 14.000000, -42.000000, -54.000000 );
+	v( 27.000000, -42.000000, -58.000000 );
+	v( -2.000000, -42.000000, -67.000000 );
+	v( 14.000000, -42.000000, -48.000000 );
+	v( -2.000000, -42.000000, -86.000000 );
+	v( 36.000000, -42.000000, -86.000000 );
+	v( 24.000000, -42.000000, -67.000000 );
+	v( 27.000000, -42.000000, -48.000000 );
+	v( 14.000000, -42.000000, -67.000000 );
+	v( -8.000000, -42.000000, -67.000000 );
+	v( 27.000000, -42.000000, -31.000000 );
+	v( -11.000000, -34.000000, -76.000000 );
+	v( 5.000000, -42.000000, -31.000000 );
+	v( 5.000000, -42.000000, -25.000000 );
+	v( -25.000000, -32.000000, -76.000000 );
+	v( -2.000000, -34.000000, -86.000000 );
+	v( 36.000000, -34.000000, -86.000000 );
+	v( -2.000000, -34.000000, -76.000000 );
+	v( 36.000000, -34.000000, -76.000000 );
+	v( -8.000000, -42.000000, -25.000000 );
+	v( -4.000000, -48.000000, -6.000000 );
+	v( -11.000000, -34.000000, -91.000000 );
+	v( -8.000000, -42.000000, -25.000000 );
+	v( 27.000000, -42.000000, -20.000000 );
+	v( -19.000000, -39.000000, 64.000000 );
+	v( 24.000000, -19.000000, 12.000000 );
+	v( 12.000000, -46.000000, 82.000000 );
+	v( -25.000000, -24.000000, 64.000000 );
+	v( 12.000000, -23.000000, 82.000000 );
+	v( 24.000000, -23.000000, 81.000000 );
+	v( 24.000000, -23.000000, 73.000000 );
+	v( 36.000000, -23.000000, 124.000000 );
+	v( -25.000000, -24.000000, 128.000000 );
+	v( 24.000000, -46.000000, 81.000000 );
+	v( -25.000000, -24.000000, 72.000000 );
+	v( -25.000000, -46.000000, 64.000000 );
+	v( 36.000000, -23.000000, 128.000000 );
+	v( -13.000000, -46.000000, 102.000000 );
+	v( 9.000000, -24.000000, 53.000000 );
+	v( -8.000000, -39.000000, 64.000000 );
+	v( 5.000000, -48.000000, -31.000000 );
+	v( 27.000000, -48.000000, -31.000000 );
+	v( -10.000000, -48.000000, -13.000000 );
+	v( 5.000000, -48.000000, -25.000000 );
+	v( -11.000000, -48.000000, -62.000000 );
+	v( -35.000000, -48.000000, -60.000000 );
+	v( -11.000000, -48.000000, -25.000000 );
+	v( -11.000000, -53.000000, -91.000000 );
+	v( 24.000000, -39.000000, 12.000000 );
+
+	f3( 198, 206, 61, 1.000000, 0.000000, 0.000000 );
+	uv( 0.443426, 1.000000, 0.288123, 1.000000, 0.066424, 0.000000);
+	f4( 106, 59, 210, 209, 1.000000, 0.000000, -0.000000 );
+	uv( 1.000000, 0.000000, 1.000000, 1.000000, 0.000000, 1.000000, 0.000000, 0.000000);
+	f4( 61, 333, 205, 198, 1.000000, 0.000000, 0.000000 );
+	uv( 0.066424, 0.000000, 1.000000, 0.000000, 0.610542, 1.000000, 0.443426, 1.000000);
+	f4( 28, 27, 34, 38, 0.000000, 0.000000, 0.000000 );
+	uv( 0.000000, 1.000000, 1.000000, 1.000000, 1.000000, 0.000000, 0.000000, 0.000000);
+	f4( 265, 178, 177, 37, 0.000000, -1.000000, 0.000000 );
+	uv( 0.000000, 0.704121, 1.000000, 1.000000, 1.000000, 0.000000, 0.000000, 0.000000);
+	f4( 237, 155, 181, 124, 0.000000, -1.000000, 0.000000 );
+	uv( 0.000000, 0.000000, 1.000000, 0.000000, 1.000000, 1.000000, 0.000000, 1.000000);
+	f4( 175, 167, 12, 239, 0.000000, -1.000000, 0.000000 );
+	uv( 0.000000, 1.000000, 1.000000, 1.000000, 1.000000, 0.000000, 0.000000, 0.000000);
+	f4( 317, 350, 60, 353, 0.000000, -1.000000, 0.000000 );
+	uv( 1.000000, 1.000000, 1.000000, 0.000000, 0.000000, 0.000000, 0.000000, 1.000000);
+	f4( 75, 46, 202, 203, 1.000000, 0.000000, 0.000000 );
+	uv( 1.000000, 1.000000, 1.000000, 0.000000, 0.000000, 0.000000, 0.000000, 1.000000);
+	f3( 86, 192, 59, 1.000000, 0.000000, 0.000000 );
+	uv( 1.000000, 0.000000, 1.000000, 1.000000, 0.500000, 1.000000);
+	f4( 35, 32, 28, 38, 1.000000, 0.000000, 0.000000 );
+	uv( 0.000000, 1.000000, 1.000000, 1.000000, 1.000000, 0.000000, 0.000000, 0.000000);
+	f4( 241, 242, 125, 239, 1.000000, 0.000000, 0.000000 );
+	uv( 0.000000, 0.629667, 0.590312, 0.000000, 1.000000, 0.000000, 1.000000, 0.622180);
+	f4( 237, 124, 175, 239, 0.000000, 1.000000, 0.000000 );
+	uv( 0.000000, 1.000000, 1.000000, 1.000000, 1.000000, 0.000000, 0.000000, 0.000000);
+	f4( 39, 122, 119, 38, 0.000000, 1.000000, 0.000000 );
+	uv( 0.934109, 0.000000, 1.000000, 0.000000, 1.000000, 1.000000, 0.934109, 1.000000);
+	f4( 134, 126, 238, 240, 0.000000, 1.000000, 0.000000 );
+	uv( 0.000000, 1.000000, 1.000000, 1.000000, 1.000000, 0.000000, 0.000000, 0.000000);
+	f3( 10, 3, 14, 0.000000, 1.000000, 0.000000 );
+	uv( 1.000000, 1.000000, 1.000000, 0.000000, 0.000000, 0.000000);
+	f4( 179, 168, 174, 178, -0.031905, -0.997799, 0.058124 );
+	uv( 0.000000, 0.000000, 1.000000, 0.000000, 1.000000, 1.000000, 0.000000, 1.000000);
+	f4( 180, 122, 242, 82, -0.015953, -0.999450, 0.029063 );
+	uv( 0.000000, 1.000000, 1.000000, 1.000000, 1.000000, 0.000000, 0.000000, 0.000000);
+	f4( 203, 211, 348, 75, -0.061025, -0.998041, -0.013780 );
+	uv( 1.000000, 0.000000, 1.000000, 1.000000, 0.000000, 1.000000, 0.000000, 0.000000);
+	f3( 106, 223, 345, -0.061025, -0.998041, -0.013780 );
+	uv( 1.000000, 0.000000, 1.000000, 0.295679, 0.000000, 0.000000);
+	f3( 180, 97, 120, 0.000000, 1.000000, 0.000000 );
+	uv( 0.000000, 0.000000, 1.000000, 0.000000, 1.000000, 1.000000);
+	f4( 225, 226, 0, 5, 0.000000, 1.000000, 0.000000 );
+	uv( 0.000000, 1.000000, 1.000000, 1.000000, 1.000000, 0.000000, 0.000000, 0.000000);
+	f3( 37, 56, 52, 0.000000, 1.000000, 0.000000 );
+	uv( 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000);
+	f4( 82, 172, 170, 244, 0.000000, 1.000000, 0.000000 );
+	uv( 1.000000, 0.150135, 1.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.150135);
+	f4( 241, 121, 172, 82, 0.000000, 1.000000, 0.000000 );
+	uv( 0.629667, 0.000000, 1.000000, 0.000000, 1.000000, 1.000000, 0.849865, 1.000000);
+	f4( 305, 72, 187, 300, 0.000000, 1.000000, 0.000000 );
+	uv( 1.000000, 0.000000, 1.000000, 1.000000, 0.000000, 1.000000, 0.000000, 0.000000);
+	f4( 224, 228, 225, 7, 0.000000, 1.000000, 0.000000 );
+	uv( 0.000000, 1.000000, 1.000000, 1.000000, 1.000000, 0.000000, 0.000000, 0.000000);
+	f4( 176, 181, 155, 182, 0.000000, 1.000000, 0.000000 );
+	uv( 0.000000, 1.000000, 1.000000, 1.000000, 1.000000, 0.000000, 0.000000, 0.000000);
+	f4( 125, 261, 265, 123, -1.000000, 0.000000, 0.000000 );
+	uv( 0.000000, 0.000000, 0.061993, 0.989968, 0.234396, 0.962069, 1.000000, 0.000000);
+	f4( 302, 324, 58, 21, -1.000000, 0.000000, 0.000000 );
+	uv( 0.000000, 1.000000, 1.000000, 1.000000, 1.000000, 0.000000, 0.000000, 0.000000);
+	f3( 239, 12, 169, -1.000000, 0.000000, 0.000000 );
+	uv( 0.000000, 0.622180, 0.175944, 1.000000, 0.000000, 1.000000);
+	f4( 170, 172, 121, 163, -1.000000, 0.000000, 0.000000 );
+	uv( 0.000000, 1.000000, 1.000000, 1.000000, 1.000000, 0.000000, 0.000000, 0.000000);
+	f4( 5, 0, 284, 289, 0.000000, -1.000000, 0.000000 );
+	uv( 0.000000, 1.000000, 1.000000, 1.000000, 1.000000, 0.000000, 0.000000, 0.000000);
+	f4( 236, 200, 332, 334, 0.000000, -1.000000, 0.000000 );
+	uv( 1.000000, 0.000000, 1.000000, 1.000000, 0.000000, 0.999999, 0.000000, 0.000000);
+	f3( 261, 179, 178, 0.000000, -1.000000, 0.000000 );
+	uv( 0.000000, 0.921746, 0.000000, 1.000000, 1.000000, 1.000000);
+	f4( 119, 120, 35, 38, 0.000000, -1.000000, 0.000000 );
+	uv( 0.000000, 1.000000, 1.000000, 1.000000, 1.000000, 0.000000, 0.000000, 0.000000);
+	f4( 216, 335, 339, 219, 1.000000, 0.000000, 0.000000 );
+	uv( 0.000000, 1.000000, 1.000000, 1.000000, 1.000000, 0.000000, 0.000000, 0.000000);
+	f3( 285, 296, 322, 1.000000, 0.000000, 0.000000 );
+	uv( 1.000000, 0.000000, 1.000000, 1.000000, 0.000000, 0.000000);
+	f3( 54, 58, 13, 1.000000, 0.000000, 0.000000 );
+	uv( 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000);
+	f4( 214, 212, 80, 329, 0.000000, 0.000000, 0.000000 );
+	uv( 1.000000, 1.000000, 1.000000, 0.000000, 0.000000, 0.000000, 0.000000, 1.000000);
+	f4( 293, 292, 327, 297, 0.000000, 1.000000, 0.000000 );
+	uv( 1.000000, 1.000000, 1.000000, 0.000000, 0.000000, 0.000000, 0.000000, 1.000000);
+	f4( 218, 331, 201, 66, 0.000000, 1.000000, 0.000000 );
+	uv( 1.000000, 0.000000, 1.000000, 1.000000, 0.000000, 1.000000, 0.000000, 0.000000);
+	f4( 50, 218, 66, 57, 0.000000, 1.000000, 0.000000 );
+	uv( 1.000000, 1.000000, 1.000000, 0.000000, 0.000000, 0.000000, 0.000000, 1.000000);
+	f4( 343, 223, 106, 209, 0.000000, 1.000000, 0.000000 );
+	uv( 1.000000, 0.000000, 1.000000, 1.000000, 0.000000, 1.000000, 0.000000, 0.000000);
+	f4( 52, 224, 7, 83, 0.000000, 1.000000, 0.000000 );
+	uv( 0.000000, 1.000000, 1.000000, 1.000000, 1.000000, 0.000000, 0.000000, 0.000000);
+	f4( 6, 182, 155, 237, 0.000000, 1.000000, 0.000000 );
+	uv( 0.000000, 0.000000, 1.000000, 0.000000, 1.000000, 1.000000, 0.000000, 1.000000);
+	f4( 354, 65, 68, 190, 0.000000, 1.000000, 0.000000 );
+	uv( 1.000000, 1.000000, 1.000000, 0.000000, 0.000000, 0.000000, 0.000000, 1.000000);
+	f4( 61, 213, 88, 338, 0.000000, 1.000000, 0.000000 );
+	uv( 0.066424, 0.000000, 0.066424, 1.000000, 0.000000, 1.000000, 0.000000, 0.000000);
+	f4( 237, 184, 3, 6, 0.000000, 1.000000, 0.000000 );
+	uv( 0.000000, 1.000000, 1.000000, 1.000000, 1.000000, 0.000000, 0.000000, 0.000000);
+	f4( 11, 238, 126, 37, 0.000000, 1.000000, 0.000000 );
+	uv( 1.000000, 1.000000, 1.000000, 0.500000, 1.000000, 0.000000, 0.000000, 0.000000);
+	f4( 300, 94, 269, 329, 0.000000, 1.000000, 0.000000 );
+	uv( 1.000000, 0.000000, 1.000000, 1.000000, 0.000000, 1.000000, 0.000000, 0.000000);
+	f4( 305, 300, 329, 307, 0.000000, 1.000000, 0.000000 );
+	uv( 1.000000, 0.000000, 1.000000, 1.000000, 0.000000, 1.000000, 0.000000, 0.000000);
+	f4( 249, 257, 186, 247, 1.000000, 0.000000, 0.000000 );
+	uv( 0.000000, 1.000000, 1.000000, 1.000000, 1.000000, 0.000000, 0.000000, 0.000000);
+	f4( 256, 185, 253, 87, 1.000000, 0.000000, 0.000000 );
+	uv( 1.000000, 0.000000, 1.000000, 1.000000, 0.000000, 1.000000, 0.000000, 0.000000);
+	f4( 100, 45, 211, 208, 1.000000, 0.000000, 0.000000 );
+	uv( 1.000000, 0.000000, 1.000000, 1.000000, 0.000000, 1.000000, 0.000000, 0.000000);
+	f4( 234, 99, 337, 70, 1.000000, 0.000000, 0.000000 );
+	uv( 1.000000, 0.000000, 1.000000, 1.000000, 0.431554, 1.000000, 0.431554, 0.000000);
+	f4( 327, 189, 79, 297, 0.382683, 0.000000, 0.923880 );
+	uv( 1.000000, 0.000000, 1.000000, 1.000000, 0.000000, 1.000000, 0.000000, 0.000000);
+	f4( 94, 300, 19, 138, 0.000000, 0.000000, 1.000000 );
+	uv( 0.000000, 1.000000, 1.000000, 1.000000, 1.000000, 0.000000, 0.000000, 0.000000);
+	f4( 285, 322, 84, 90, 0.000000, 0.000000, 1.000000 );
+	uv( 1.000000, 0.000000, 1.000000, 1.000000, 0.000000, 1.000000, 0.000000, 0.000000);
+	f4( 185, 67, 259, 253, 0.382683, 0.000000, 0.923880 );
+	uv( 1.000000, 0.000000, 1.000000, 1.000000, 0.000000, 1.000000, 0.000000, 0.000000);
+	f4( 67, 186, 257, 259, 0.000000, 1.000000, 0.000000 );
+	uv( 1.000000, 0.000000, 1.000000, 1.000000, 0.000000, 1.000000, 0.000000, 0.000000);
+	f4( 258, 232, 264, 255, 0.000000, 1.000000, 0.000000 );
+	uv( 0.000000, 1.000000, 1.000000, 1.000000, 1.000000, 0.000000, 0.000000, 0.000000);
+	f4( 84, 322, 321, 101, 0.000000, 1.000000, 0.000000 );
+	uv( 1.000000, 1.000000, 1.000000, 0.000000, 0.000000, 0.000000, 0.000000, 1.000000);
+	f4( 73, 60, 350, 36, 0.000000, 0.000000, 0.000000 );
+	uv( 1.000000, 0.000000, 1.000000, 1.000000, 0.000000, 1.000000, 0.000000, 0.000000);
+	f4( 130, 17, 97, 129, 0.000000, -1.000000, 0.000000 );
+	uv( 0.000000, 1.000000, 1.000000, 1.000000, 1.000000, 0.000000, 0.000000, 0.000000);
+	f4( 201, 331, 354, 217, 0.000000, -1.000000, 0.000000 );
+	uv( 1.000000, 1.000000, 1.000000, 0.000000, 0.000000, 0.000000, 0.000000, 1.000000);
+	f4( 204, 90, 84, 191, 0.000000, -1.000000, 0.000000 );
+	uv( 1.000000, 0.000000, 1.000000, 1.000000, 0.000000, 1.000000, 0.000000, 0.000000);
+	f3( 265, 261, 178, -0.015953, -0.999450, 0.029063 );
+	uv( 0.000000, 0.704121, 0.000000, 0.921746, 1.000000, 1.000000);
+	f4( 345, 86, 59, 106, 0.000000, 1.000000, 0.000000 );
+	uv( 0.000000, 0.000000, 1.000000, 0.000000, 0.500000, 1.000000, 0.000000, 1.000000);
+	f4( 29, 52, 56, 27, 0.000000, 1.000000, 0.000000 );
+	uv( 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000);
+	f4( 310, 304, 309, 308, 0.000000, 1.000000, 0.000000 );
+	uv( 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000);
+	f4( 96, 125, 93, 85, 0.000000, 1.000000, 0.000000 );
+	uv( 0.496329, 0.000000, 1.000000, 0.000000, 0.934109, 0.205017, 0.521365, 0.205016);
+	f4( 52, 29, 30, 54, 0.000000, 0.000000, -1.000000 );
+	uv( 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000);
+	f3( 179, 125, 96, 0.000000, 0.000000, -1.000000 );
+	uv( 1.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.503671);
+	f4( 269, 94, 51, 268, 0.000000, 0.000000, -1.000000 );
+	uv( 1.000000, 0.000000, 1.000000, 1.000000, 0.000000, 1.000000, 0.000000, 0.000000);
+	f3( 333, 341, 42, 0.000000, 0.000000, -1.000000 );
+	uv( 1.000000, 0.000000, 1.000000, 1.000000, 0.940894, 1.000000);
+	f4( 58, 54, 30, 21, 0.000000, 0.000000, 1.000000 );
+	uv( 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000);
+	f3( 37, 52, 11, 0.000000, 0.000000, 1.000000 );
+	uv( 0.000000, 0.000000, 1.000000, 0.000000, 1.000000, 1.000000);
+	f4( 223, 341, 330, 345, 0.000000, 0.000000, 1.000000 );
+	uv( 1.000000, 0.295679, 1.000000, 1.000000, 0.000000, 1.000000, 0.000000, 0.000000);
+	f4( 57, 66, 146, 145, 0.000000, 0.000000, 0.000000 );
+	uv( 0.000000, 1.000000, 1.000000, 1.000000, 1.000000, 0.000000, 0.000000, 0.000000);
+	f4( 177, 176, 40, 37, -1.000000, 0.000000, 0.000000 );
+	uv( 0.000000, 1.000000, 1.000000, 1.000000, 1.000000, 0.000000, 0.000000, 0.000000);
+	f4( 42, 41, 44, 76, -1.000000, 0.000000, 0.000000 );
+	uv( 0.059106, 0.006144, 0.059059, 0.326950, 0.222310, 0.323984, 0.222349, 0.005078);
+	f4( 254, 263, 233, 260, -1.000000, 0.000000, 0.000000 );
+	uv( 0.000000, 0.000000, 1.000000, 0.000000, 1.000000, 1.000000, 0.000000, 1.000000);
+	f4( 22, 30, 29, 23, 0.000000, 0.000000, 0.000000 );
+	uv( 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000);
+	f4( 22, 18, 21, 30, 0.000000, 1.000000, 0.000000 );
+	uv( 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000);
+	f4( 314, 304, 23, 33, 0.000000, 1.000000, 0.000000 );
+	uv( 0.000000, 1.000000, 1.000000, 1.000000, 1.000000, 0.000000, 0.000000, 0.000000);
+	f4( 338, 88, 196, 342, 0.000000, 1.000000, 0.000000 );
+	uv( 0.688240, 0.000000, 1.000000, 1.000000, 0.000000, 1.000000, 0.000000, 0.000000);
+	f4( 288, 92, 221, 4, 0.000000, 1.000000, 0.000000 );
+	uv( 0.000000, 1.000000, 1.000000, 1.000000, 1.000000, 0.000000, 0.000000, 0.000000);
+	f4( 196, 88, 213, 70, 0.000000, 1.000000, 0.000000 );
+	uv( 1.000000, 1.000000, 0.000000, 0.996270, 0.000264, 0.766589, 1.000000, 0.766589);
+	f4( 301, 312, 256, 87, -0.000000, 1.000000, 0.000000 );
+	uv( 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000);
+	f4( 89, 73, 36, 91, 0.000000, 1.000000, 0.000000 );
+	uv( 1.000000, 0.000000, 1.000000, 1.000000, 0.000000, 1.000000, 0.000000, 0.000000);
+	f4( 64, 89, 91, 79, 0.000000, 0.000000, 0.000000 );
+	uv( 1.000000, 0.000000, 1.000000, 1.000000, 0.000000, 1.000000, 0.000000, 0.000000);
+	f3( 350, 317, 55, 0.000000, 0.000000, -1.000000 );
+	uv( 1.000000, 0.000000, 0.792202, 0.871803, 0.234396, 0.962069);
+	f4( 36, 350, 352, 195, 0.000000, 0.000000, -1.000000 );
+	uv( 1.000000, 0.000000, 1.000000, 1.000000, 0.000000, 1.000000, 0.000000, 0.000000);
+	f3( 97, 35, 120, 0.000000, 0.000000, -1.000000 );
+	uv( 1.000000, 1.000000, 1.000000, 0.000000, 0.000000, 0.000000);
+	f4( 28, 23, 29, 27, 0.000000, 0.000000, -1.000000 );
+	uv( 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000);
+	f4( 20, 31, 33, 25, 0.000000, 1.000000, 0.000000 );
+	uv( 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000);
+	f4( 285, 288, 286, 296, 0.000000, 1.000000, 0.000000 );
+	uv( 1.000000, 0.000000, 1.000000, 1.000000, 0.000000, 1.000000, 0.000000, 0.000000);
+	f4( 337, 61, 338, 342, 0.000000, 1.000000, 0.000000 );
+	uv( 1.000000, 0.000000, 1.000000, 1.000000, 0.000000, 1.000000, 0.000000, 0.000000);
+	f4( 341, 223, 41, 42, 0.000000, 1.000000, 0.000000 );
+	uv( 0.000000, 0.006530, 0.000000, 0.328023, 0.059059, 0.326950, 0.059106, 0.006144);
+	f4( 144, 128, 103, 127, -1.000000, 0.000000, 0.000000 );
+	uv( 0.000217, 1.000000, 1.000000, 1.000000, 1.000000, 0.000000, 0.000000, 0.000000);
+	f4( 110, 157, 161, 154, -1.000000, 0.000000, 0.000000 );
+	uv( 0.431554, 1.000000, 1.000000, 1.000000, 1.000000, 0.000000, 0.431554, 0.000000);
+	f4( 150, 138, 131, 130, -1.000000, 0.000000, 0.000000 );
+	uv( 0.000000, 1.000000, 1.000000, 1.000000, 1.000000, 0.000000, 0.000000, 0.000000);
+	f4( 137, 129, 171, 135, -1.000000, 0.000000, 0.000000 );
+	uv( 0.000000, 1.000000, 1.000000, 1.000000, 1.000000, 0.000000, 0.000000, 0.000000);
+	f4( 314, 312, 301, 306, 0.000000, 1.000000, 0.000000 );
+	uv( 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000);
+	f4( 143, 144, 127, 244, 0.000000, 1.000000, 0.000000 );
+	uv( 0.000000, 0.000000, 1.000000, 0.000000, 1.000000, 1.000000, 0.000000, 1.000000);
+	f4( 108, 112, 104, 107, 0.000000, 1.000000, 0.000000 );
+	uv( 0.000000, 0.000315, 1.000000, 0.000000, 1.000000, 1.000000, 0.000000, 1.000000);
+	f4( 164, 102, 118, 140, 0.000000, 1.000000, 0.000000 );
+	uv( 0.000000, 1.000000, 1.000000, 1.000000, 1.000000, 0.000000, 0.000000, 0.000000);
+	f4( 230, 227, 228, 224, 1.000000, 0.000000, 0.000000 );
+	uv( 0.000000, 1.000000, 1.000000, 1.000000, 1.000000, 0.000000, 0.000000, 0.000000);
+	f4( 158, 156, 111, 115, 1.000000, 0.000000, 0.000000 );
+	uv( 0.000000, 1.000000, 1.000000, 1.000000, 0.688240, 0.000000, 0.000000, 0.000000);
+	f4( 104, 112, 149, 278, 0.916659, 0.005235, 0.399635 );
+	uv( 0.000000, 1.000000, 1.000000, 1.000000, 1.000000, 0.000000, 0.000000, 0.000000);
+	f4( 344, 69, 53, 216, 0.916659, 0.005235, 0.399635 );
+	uv( 1.000000, 1.000000, 0.000000, 1.000000, 0.000000, 1.000000, 1.000000, 1.000000);
+	f4( 113, 109, 108, 107, -1.000000, 0.000000, 0.000000 );
+	uv( 0.000000, 0.999939, 1.000000, 1.000000, 1.000000, 0.000000, 0.000000, 0.000000);
+	f4( 132, 123, 37, 126, -1.000000, 0.000000, 0.000000 );
+	uv( 0.000000, 0.000000, 1.000000, 0.000000, 1.000000, 1.000000, 0.000000, 1.000000);
+	f4( 239, 169, 121, 241, -1.000000, 0.000000, 0.000000 );
+	uv( 1.000000, 0.622180, 1.000000, 1.000000, 0.000000, 1.000000, 0.000000, 0.629667);
+	f4( 248, 31, 20, 252, -1.000000, 0.000000, 0.000000 );
+	uv( 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000);
+	f4( 180, 120, 119, 122, -1.000000, 0.000000, 0.000000 );
+	uv( 0.000000, 1.000000, 1.000000, 1.000000, 1.000000, 0.000000, 0.000000, 0.000000);
+	f4( 304, 303, 22, 23, -1.000000, 0.000000, 0.000000 );
+	uv( 0.000000, 1.000000, 1.000000, 1.000000, 1.000000, 0.000000, 0.000000, 0.000000);
+	f4( 178, 174, 167, 175, -1.000000, 0.000000, 0.000000 );
+	uv( 0.000000, 0.000000, 1.000000, 0.000000, 1.000000, 1.000000, 0.000000, 1.000000);
+	f4( 318, 319, 328, 315, -1.000000, 0.000000, 0.000000 );
+	uv( 1.000000, 1.000000, 1.000000, 0.000000, 0.000000, 0.000000, 0.000000, 1.000000);
+	f4( 215, 68, 65, 219, 0.000000, 1.000000, 0.000000 );
+	uv( 1.000000, 0.000000, 1.000000, 1.000000, 0.000000, 1.000000, 0.000000, 0.000000);
+	f4( 198, 343, 209, 206, 0.000000, 1.000000, 0.000000 );
+	uv( 1.000000, 0.000000, 1.000000, 1.000000, 0.000000, 1.000000, 0.000000, 0.000000);
+	f4( 278, 277, 160, 104, 0.000000, 1.000000, 0.000000 );
+	uv( 0.000000, 0.000000, 1.000000, 0.000000, 1.000000, 1.000000, 0.000000, 1.000000);
+	f4( 127, 103, 136, 135, 0.000000, 0.000000, 0.000000 );
+	uv( 0.000000, 0.000000, 1.000000, 0.000000, 1.000000, 1.000000, 0.000000, 1.000000);
+	f4( 176, 182, 6, 40, 1.000000, 0.000000, 0.000000 );
+	uv( 0.000000, 1.000000, 1.000000, 1.000000, 1.000000, 0.000000, 0.000000, 0.000000);
+	f4( 121, 169, 166, 163, 1.000000, 0.000000, 0.000000 );
+	uv( 0.000000, 1.000000, 1.000000, 1.000000, 1.000000, 0.000000, 0.000000, 0.000000);
+	f4( 154, 158, 115, 110, 1.000000, 0.000000, 0.000000 );
+	uv( 0.431554, 0.000000, 0.000000, 0.000000, 0.000000, 1.000000, 0.431554, 1.000000);
+	f4( 123, 132, 133, 139, 1.000000, 0.000000, 0.000000 );
+	uv( 0.000000, 1.000000, 1.000000, 1.000000, 1.000000, 0.000000, 0.000000, 0.000000);
+	f4( 332, 339, 335, 334, 0.000000, 0.000000, 1.000000 );
+	uv( 1.000000, 1.000000, 1.000000, 0.000000, 0.000000, 0.000315, 0.000000, 1.000000);
+	f4( 83, 8, 10, 14, -0.516126, 0.002944, 0.856507 );
+	uv( 0.000000, 0.000000, 1.000000, 0.000000, 1.000000, 1.000000, 0.000000, 1.000000);
+	f4( 213, 206, 209, 70, -0.516126, -0.002944, 0.856507 );
+	uv( 0.000264, 0.766589, 0.001144, 0.000000, 0.522512, 0.000000, 1.000000, 0.766589);
+	f4( 229, 226, 227, 230, 0.000000, 0.000000, 1.000000 );
+	uv( 0.000000, 1.000000, 1.000000, 1.000000, 1.000000, 0.000000, 0.000000, 0.000000);
+	f3( 352, 262, 197, -0.919757, 0.000000, 0.392489 );
+	uv( 0.000000, 0.000000, 0.061993, 0.989968, 0.000000, 1.000000);
+	f4( 254, 260, 24, 19, -0.919757, 0.000000, 0.392489 );
+	uv( 0.000000, 1.000000, 1.000000, 1.000000, 1.000000, 0.000000, 0.000000, 0.000000);
+	f3( 0, 226, 1, -1.000000, 0.000000, 0.000000 );
+	uv( 0.000000, 0.000000, 1.000000, 0.000000, 1.000000, 1.000000);
+	f4( 3, 184, 240, 14, -1.000000, 0.000000, 0.000000 );
+	uv( 0.000000, 1.000000, 1.000000, 1.000000, 1.000000, 0.000000, 0.000000, 0.000000);
+	f4( 114, 102, 330, 341, -0.006226, -0.998739, 0.049811 );
+	uv( 0.000000, 1.000000, 1.000000, 1.000000, 1.000000, 0.000000, 0.000000, 0.000000);
+	f4( 208, 168, 179, 197, 0.000000, -1.000000, 0.000000 );
+	uv( 0.000000, 1.000000, 1.000000, 1.000000, 1.000000, 0.000000, 0.000000, 0.000000);
+	f4( 315, 328, 93, 34, -0.015953, -0.999450, 0.029063 );
+	uv( 0.000000, 0.000000, 1.000000, 0.000000, 1.000000, 1.000000, 0.000000, 1.000000);
+	f4( 282, 156, 158, 154, 0.000000, 0.000000, 0.000000 );
+	uv( 0.000264, 0.766589, 0.000000, 0.996270, 1.000000, 1.000000, 1.000000, 0.766589);
+	f3( 353, 89, 64, 0.000000, 0.000000, 1.000000 );
+	uv( 1.000000, 0.000000, 0.000000, 0.175707, 0.337951, 0.000000);
+	f4( 92, 288, 285, 284, 0.000000, 0.000000, 1.000000 );
+	uv( 1.000000, 1.000000, 1.000000, 0.000000, 0.000000, 0.000000, 0.000000, 1.000000);
+	f3( 261, 125, 179, 0.000000, 0.000000, 1.000000 );
+	uv( 0.061993, 0.989968, 0.000000, 0.000000, 0.000000, 1.000000);
+	f4( 335, 336, 340, 334, 0.000000, 0.000000, 1.000000 );
+	uv( 1.000000, 0.000000, 1.000000, 1.000000, 0.000000, 0.999939, 0.000000, 0.000000);
+	f4( 124, 181, 176, 177, -1.000000, 0.000000, 0.000000 );
+	uv( 0.000000, 1.000000, 1.000000, 1.000000, 1.000000, 0.000000, 0.000000, 0.000000);
+	f4( 76, 44, 207, 205, -1.000000, 0.000000, 0.000000 );
+	uv( 0.222349, 0.005078, 0.222310, 0.323984, 0.389406, 0.320947, 0.389458, 0.003987);
+	f4( 150, 130, 129, 137, -1.000000, 0.000000, 0.000000 );
+	uv( 0.000000, 0.000000, 1.000000, 0.000000, 1.000000, 1.000000, 0.000000, 1.000000);
+	f4( 327, 289, 173, 291, -1.000000, 0.000000, 0.000000 );
+	uv( 1.000000, 1.000000, 1.000000, 0.000000, 0.000000, 0.000000, 0.000000, 1.000000);
+	f4( 151, 143, 140, 142, 0.000000, -1.000000, 0.000000 );
+	uv( 0.000000, 1.000000, 1.000000, 1.000000, 1.000000, 0.000000, 0.000000, 0.000000);
+	f3( 267, 142, 140, 0.000000, -1.000000, 0.000000 );
+	uv( 0.500000, 1.000000, 1.000000, 1.000000, 1.000000, 0.000000);
+	f4( 346, 347, 80, 349, 0.000000, -1.000000, 0.000000 );
+	uv( 1.000000, 0.000000, 1.000000, 1.000000, 0.000000, 1.000000, 0.000000, 0.000000);
+	f4( 190, 68, 86, 98, 0.000000, 0.000000, 0.000000 );
+	uv( 1.000000, 0.000000, 1.000000, 1.000000, 0.000000, 1.000000, 0.000000, 0.000000);
+	f3( 333, 42, 76, 0.000000, 1.000000, 0.000000 );
+	uv( 1.000000, 0.000000, 0.940894, 1.000000, 0.777651, 1.000000);
+	f4( 229, 54, 1, 226, 0.000000, 1.000000, 0.000000 );
+	uv( 0.000000, 1.000000, 1.000000, 1.000000, 1.000000, 0.000000, 0.000000, 0.000000);
+	f4( 161, 157, 162, 160, 0.000000, 1.000000, 0.000000 );
+	uv( 0.000000, 1.000000, 1.000000, 1.000000, 1.000000, 0.000000, 0.000000, 0.000000);
+	f3( 154, 161, 281, 0.000000, 0.000000, 0.000000 );
+	uv( 1.000000, 0.766589, 1.000000, 0.459138, 0.522512, 0.000000);
+	f4( 225, 5, 83, 7, -1.000000, 0.000000, 0.000000 );
+	uv( 0.000000, 0.000000, 1.000000, 0.000000, 1.000000, 1.000000, 0.000000, 1.000000);
+	f4( 36, 195, 78, 91, -1.000000, 0.000000, 0.000000 );
+	uv( 1.000000, 1.000000, 1.000000, 0.000000, 0.000000, 0.000000, 0.000000, 1.000000);
+	f4( 79, 91, 287, 297, -1.000000, 0.000000, 0.000000 );
+	uv( 1.000000, 0.000000, 1.000000, 1.000000, 0.000000, 1.000000, 0.000000, 0.000000);
+	f4( 80, 212, 190, 326, -1.000000, 0.000000, 0.000000 );
+	uv( 1.000000, 1.000000, 0.000000, 1.000000, 0.000000, 0.150135, 1.000000, 0.150135);
+	f3( 265, 37, 123, 0.000000, -1.000000, 0.000000 );
+	uv( 0.234396, 0.962069, 0.792202, 0.871803, 1.000000, 0.000000);
+	f4( 93, 39, 38, 34, 0.000000, -1.000000, 0.000000 );
+	uv( 0.000000, 0.000000, 1.000000, 0.000000, 1.000000, 1.000000, 0.000000, 1.000000);
+	f3( 283, 141, 118, 0.000000, -1.000000, 0.000000 );
+	uv( 1.000000, 0.295679, 1.000000, 0.000000, 0.000000, 0.000000);
+	f3( 272, 114, 105, 0.000000, -1.000000, 0.000000 );
+	uv( 0.940894, 1.000000, 1.000000, 1.000000, 1.000000, 0.000000);
+	f4( 178, 175, 124, 177, 0.000000, -1.000000, 0.000000 );
+	uv( 0.000000, 1.000000, 1.000000, 1.000000, 1.000000, 0.000000, 0.000000, 0.000000);
+	f4( 283, 118, 102, 114, 0.000000, -1.000000, 0.000000 );
+	uv( 1.000000, 0.295679, 0.000000, 0.000000, 0.000000, 1.000000, 1.000000, 1.000000);
+	f4( 136, 103, 147, 146, 0.000000, -1.000000, 0.000000 );
+	uv( 0.000000, 1.000000, 1.000000, 1.000000, 1.000000, 0.000000, 0.000000, 0.000000);
+	f4( 146, 147, 128, 145, 0.000000, -1.000000, 0.000000 );
+	uv( 0.000000, 0.000000, 1.000000, 0.000000, 1.000000, 1.000000, 0.000000, 1.000000);
+	f4( 345, 330, 98, 86, 0.000000, -1.000000, 0.000000 );
+	uv( 1.000000, 0.000000, 1.000000, 1.000000, 0.000000, 1.000000, 0.000000, 0.000000);
+	f3( 183, 126, 134, 0.000000, -1.000000, 0.000000 );
+	uv( 0.000000, 0.175707, 1.000000, 0.000000, 0.337951, 0.000000);
+	f4( 331, 50, 65, 354, 0.000000, -1.000000, 0.000000 );
+	uv( 1.000000, 0.000000, 1.000000, 1.000000, 0.000217, 1.000000, 0.000000, 0.000000);
+	f4( 146, 66, 201, 136, 0.000000, -1.000000, 0.000000 );
+	uv( 0.000000, 1.000000, 1.000000, 1.000000, 1.000000, 0.000000, 0.000000, 0.000000);
+	f4( 152, 148, 117, 153, 0.000000, -1.000000, 0.000000 );
+	uv( 0.000000, 1.000000, 0.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000);
+	f4( 165, 170, 163, 166, 0.000000, -1.000000, 0.000000 );
+	uv( 0.000000, 0.000000, 1.000000, 0.000000, 1.000000, 1.000000, 0.000000, 1.000000);
+	f4( 244, 171, 180, 82, 0.000000, -1.000000, 0.000000 );
+	uv( 0.000000, 0.150135, 0.000000, 1.000000, 1.000000, 1.000000, 1.000000, 0.150135);
+	f4( 133, 132, 126, 183, 0.000000, -1.000000, 0.000000 );
+	uv( 0.000000, 1.000000, 1.000000, 1.000000, 1.000000, 0.000000, 0.000000, 0.000000);
+	f4( 240, 238, 83, 14, 0.000000, 1.000000, 0.000000 );
+	uv( 0.000000, 1.000000, 1.000000, 1.000000, 1.000000, 0.000000, 0.000000, 0.000000);
+	f4( 104, 160, 162, 107, 0.000000, 1.000000, 0.000000 );
+	uv( 0.000000, 0.999999, 1.000000, 1.000000, 1.000000, 0.000000, 0.000000, 0.000000);
+	f4( 95, 204, 191, 101, 0.000000, 1.000000, 0.000000 );
+	uv( 1.000000, 0.000000, 1.000000, 1.000000, 0.000000, 1.000000, 0.000000, 0.000000);
+	f4( 118, 141, 267, 140, 0.000000, 1.000000, 0.000000 );
+	uv( 0.000000, 0.000000, 0.000000, 1.000000, 0.500000, 1.000000, 1.000000, 0.000000);
+	f4( 237, 239, 139, 184, 0.693944, 0.004799, 0.720013 );
+	uv( 0.000000, 0.000000, 1.000000, 0.000000, 1.000000, 1.000000, 0.000000, 1.000000);
+	f4( 125, 123, 139, 239, 0.916659, 0.005235, 0.399635 );
+	uv( 0.000000, 1.000000, 1.000000, 1.000000, 1.000000, 0.000000, 0.000000, 0.000000);
+	f4( 184, 183, 134, 240, 0.916659, 0.005235, 0.399635 );
+	uv( 0.000000, 1.000000, 1.000000, 1.000000, 1.000000, 0.000000, 0.000000, 0.000000);
+	f4( 139, 133, 183, 184, 0.693944, 0.004799, 0.720013 );
+	uv( 0.000000, 1.000000, 1.000000, 1.000000, 1.000000, 0.000000, 0.000000, 0.000000);
+	f4( 131, 138, 19, 97, 0.000000, -1.000000, 0.000000 );
+	uv( 0.000000, 1.000000, 1.000000, 1.000000, 1.000000, 0.000000, 0.000000, 0.000000);
+	f4( 180, 171, 129, 97, 0.000000, -1.000000, 0.000000 );
+	uv( 0.000000, 0.000000, 1.000000, 0.000000, 1.000000, 1.000000, 0.000000, 1.000000);
+	f4( 340, 61, 236, 334, 0.000000, -1.000000, 0.000000 );
+	uv( 1.000000, 0.000000, 1.000000, 1.000000, 0.000000, 1.000000, 0.000000, 0.000000);
+	f4( 52, 54, 229, 224, 0.000000, -1.000000, 0.000000 );
+	uv( 0.000000, 0.000000, 1.000000, 0.000000, 1.000000, 1.000000, 0.000000, 1.000000);
+	f3( 215, 219, 210, 1.000000, 0.000000, 0.000000 );
+	uv( 1.000000, 0.000000, 1.000000, 1.000000, 0.000000, 0.000000);
+	f4( 1, 4, 221, 0, 1.000000, 0.000000, 0.000000 );
+	uv( 0.000000, 0.000000, 1.000000, 0.000000, 1.000000, 1.000000, 0.000000, 1.000000);
+	f4( 2, 4, 1, 13, 1.000000, 0.000000, 0.000000 );
+	uv( 0.000000, 1.000000, 1.000000, 1.000000, 1.000000, 0.000000, 0.000000, 0.000000);
+	f3( 13, 1, 54, 1.000000, 0.000000, 0.000000 );
+	uv( 1.000000, 1.000000, 1.000000, 0.000000, 0.000000, 0.000000);
+	f4( 122, 39, 93, 125, 0.693944, 0.004799, 0.720013 );
+	uv( 0.000000, 1.000000, 1.000000, 1.000000, 1.000000, 0.000000, 0.000000, 0.000000);
+	f4( 169, 167, 174, 168, 0.827072, 0.000000, 0.562097 );
+	uv( 0.000000, 1.000000, 1.000000, 1.000000, 1.000000, 0.000000, 0.000000, 0.000000);
+	f4( 165, 166, 203, 202, 0.707107, 0.000000, 0.707107 );
+	uv( 0.000000, 1.000000, 1.000000, 1.000000, 1.000000, 0.000000, 0.000000, 0.000000);
+	f4( 244, 127, 135, 171, 0.693944, 0.004799, 0.720013 );
+	uv( 0.000000, 0.000000, 1.000000, 0.000000, 1.000000, 1.000000, 0.000000, 1.000000);
+	f4( 140, 143, 244, 164, -1.000000, 0.000000, 0.000000 );
+	uv( 0.000000, 1.000000, 1.000000, 1.000000, 1.000000, 0.000000, 0.000000, 0.000000);
+	f3( 206, 213, 61, -1.000000, 0.000000, 0.000000 );
+	uv( 0.288123, 1.000000, 0.066424, 1.000000, 0.066424, 0.000000);
+	f4( 97, 19, 24, 26, -1.000000, 0.000000, 0.000000 );
+	uv( 0.000000, 1.000000, 1.000000, 1.000000, 1.000000, 0.000000, 0.000000, 0.000000);
+	f4( 15, 193, 48, 217, -1.000000, 0.000000, 0.000000 );
+	uv( 1.000000, 0.000000, 1.000000, 1.000000, 0.000000, 1.000000, 0.000000, 0.000000);
+	f4( 217, 354, 190, 212, 0.000000, 0.000000, -1.000000 );
+	uv( 1.000000, 1.000000, 1.000000, 0.000000, 0.000000, 0.000000, 0.000000, 1.000000);
+	f4( 328, 319, 349, 352, 0.000000, 0.000000, -1.000000 );
+	uv( 1.000000, 0.000000, 1.000000, 1.000000, 0.000000, 1.000000, 0.000000, 0.000000);
+	f4( 246, 245, 248, 252, 0.000000, 0.000000, -1.000000 );
+	uv( 0.000000, 1.000000, 1.000000, 1.000000, 1.000000, 0.000000, 0.000000, 0.000000);
+	f4( 250, 251, 245, 246, 0.000000, 0.000000, -1.000000 );
+	uv( 0.000000, 1.000000, 1.000000, 1.000000, 1.000000, 0.000000, 0.000000, 0.000000);
+	f4( 249, 247, 251, 250, 0.000000, -1.000000, 0.000000 );
+	uv( 0.000000, 1.000000, 1.000000, 1.000000, 1.000000, 0.000000, 0.000000, 0.000000);
+	f4( 150, 51, 94, 138, 0.000000, -1.000000, 0.000000 );
+	uv( 0.000000, 1.000000, 1.000000, 1.000000, 1.000000, 0.000000, 0.000000, 0.000000);
+	f4( 305, 307, 26, 24, 0.000000, -1.000000, 0.000000 );
+	uv( 0.000000, 1.000000, 1.000000, 1.000000, 1.000000, 0.000000, 0.000000, 0.000000);
+	f4( 258, 48, 194, 232, 0.000000, -1.000000, 0.000000 );
+	uv( 0.000000, 1.000000, 1.000000, 1.000000, 1.000000, 0.000000, 0.000000, 0.000000);
+	f4( 258, 255, 137, 135, -1.000000, 0.000000, 0.000000 );
+	uv( 0.000000, 1.000000, 1.000000, 1.000000, 1.000000, 0.000000, 0.000000, 0.000000);
+	f3( 333, 76, 205, -1.000000, 0.000000, 0.000000 );
+	uv( 1.000000, 0.000000, 0.777651, 1.000000, 0.610542, 1.000000);
+	f4( 236, 99, 234, 200, -1.000000, 0.000000, 0.000000 );
+	uv( 1.000000, 0.000000, 1.000000, 1.000000, 0.000000, 1.000000, 0.000000, 0.000000);
+	f3( 279, 159, 270, -1.000000, 0.000000, 0.000000 );
+	uv( 0.288123, 1.000000, 0.443426, 1.000000, 0.066424, 0.000000);
+	f4( 282, 154, 281, 279, -1.000000, 0.000000, 0.000000 );
+	uv( 0.000264, 0.766589, 1.000000, 0.766589, 0.522512, 0.000000, 0.001144, 0.000000);
+	f4( 116, 280, 276, 159, -1.000000, 0.000000, 0.000000 );
+	uv( 0.556543, 0.317910, 0.389406, 0.320947, 0.389458, 0.003987, 0.556574, 0.002896);
+	f4( 275, 273, 272, 271, -1.000000, 0.000000, 0.000000 );
+	uv( 0.222310, 0.323984, 0.059059, 0.326950, 0.059106, 0.006144, 0.222349, 0.005078);
+	f4( 144, 143, 151, 149, -1.000000, 0.000000, 0.000000 );
+	uv( 0.000000, 1.000000, 1.000000, 1.000000, 1.000000, 0.000000, 0.000000, 0.000000);
+	f4( 280, 275, 271, 276, 1.000000, 0.000000, 0.000000 );
+	uv( 0.389406, 0.320947, 0.222310, 0.323984, 0.222349, 0.005078, 0.389458, 0.003987);
+	f3( 271, 272, 105, 1.000000, 0.000000, 0.000000 );
+	uv( 0.777651, 1.000000, 0.940894, 1.000000, 1.000000, 0.000000);
+	f3( 282, 279, 270, 1.000000, 0.000000, 0.000000 );
+	uv( 0.066424, 1.000000, 0.288123, 1.000000, 0.066424, 0.000000);
+	f3( 276, 271, 105, 1.000000, 0.000000, 0.000000 );
+	uv( 0.610542, 1.000000, 0.777651, 1.000000, 1.000000, 0.000000);
+	f4( 111, 270, 110, 115, -0.919757, 0.000000, 0.392489 );
+	uv( 0.000000, 1.000000, 1.000000, 1.000000, 1.000000, 0.000000, 0.000000, 0.000000);
+	f4( 273, 283, 114, 272, -0.919757, 0.000000, 0.392489 );
+	uv( 0.059059, 0.326950, 0.000000, 0.328023, 0.000000, 0.006530, 0.059106, 0.006144);
+	f4( 161, 160, 277, 281, -1.000000, 0.000000, 0.000000 );
+	uv( 0.840637, 0.666667, 0.000000, 1.000000, 0.000000, 0.859755, 0.182127, 0.559733);
+	f4( 151, 142, 267, 278, -1.000000, 0.000000, 0.000000 );
+	uv( 0.000000, 1.000000, 1.000000, 1.000000, 1.000000, 0.000000, 0.000000, 0.000000);
+	f4( 281, 116, 159, 279, 0.000000, 0.000000, 1.000000 );
+	uv( 0.000000, 1.000000, 1.000000, 1.000000, 1.000000, 0.000000, 0.000000, 0.000000);
+	f4( 141, 283, 116, 281, 0.000000, 0.000000, 1.000000 );
+	uv( 0.000000, 1.000000, 1.000000, 1.000000, 1.000000, 0.000000, 0.000000, 0.000000);
+	f4( 278, 267, 141, 281, 0.382683, 0.000000, 0.923880 );
+	uv( 0.000000, 1.000000, 1.000000, 1.000000, 1.000000, 0.000000, 0.000000, 0.000000);
+	f3( 149, 151, 278, 0.382683, 0.000000, 0.923880 );
+	uv( 1.000000, 1.000000, 1.000000, 0.000000, 0.000000, 0.000000);
+	f4( 156, 282, 270, 111, 0.000000, 0.000000, -1.000000 );
+	uv( 0.000000, 1.000000, 0.066424, 1.000000, 0.066424, 0.000000, 0.000000, 0.000000);
+	f4( 162, 270, 113, 107, 0.000000, 0.000000, -1.000000 );
+	uv( 0.000000, 1.000000, 1.000000, 1.000000, 1.000000, 0.000000, 0.000000, 0.000000);
+	f4( 270, 159, 276, 105, 0.000000, 0.000000, -1.000000 );
+	uv( 0.066424, 0.000000, 0.443426, 1.000000, 0.610542, 1.000000, 1.000000, 0.000000);
+	f4( 274, 162, 157, 110, 0.000000, 0.000000, -1.000000 );
+	uv( 0.000000, 1.000000, 1.000000, 1.000000, 1.000000, 0.000000, 0.000000, 0.000000);
+	f4( 99, 236, 222, 337, 0.000000, -1.000000, 0.000000 );
+	uv( 1.000000, 0.000000, 1.000000, 1.000000, 0.000000, 1.000000, 0.000000, 0.000000);
+	f4( 286, 288, 4, 2, 0.000000, -1.000000, 0.000000 );
+	uv( 0.000000, 1.000000, 1.000000, 1.000000, 1.000000, 0.000000, 0.000000, 0.000000);
+	f4( 43, 200, 234, 209, 0.000000, -1.000000, 0.000000 );
+	uv( 0.000000, 0.859755, 0.000000, 1.000000, 0.840637, 0.666667, 0.182127, 0.559733);
+	f4( 315, 308, 309, 318, 0.000000, -1.000000, 0.000000 );
+	uv( 1.000000, 0.000000, 1.000000, 1.000000, 0.000000, 1.000000, 0.000000, 0.000000);
+	f3( 266, 262, 55, -1.000000, 0.000000, 0.000000 );
+	uv( 1.000000, 1.000000, 0.000000, 0.921746, 0.000000, 0.704121);
+	f4( 199, 188, 78, 351, -1.000000, 0.000000, 0.000000 );
+	uv( 1.000000, 1.000000, 1.000000, 0.000000, 0.000000, 0.000000, 0.000000, 1.000000);
+	f4( 295, 45, 71, 195, -1.000000, 0.000000, 0.000000 );
+	uv( 1.000000, 0.000000, 1.000000, 1.000000, 0.000000, 1.000000, 0.000000, 0.000000);
+	f4( 348, 211, 195, 62, -1.000000, 0.000000, 0.000000 );
+	uv( 0.000000, 1.000000, 1.000000, 1.000000, 1.000000, 0.622180, 0.000000, 0.629667);
+	f4( 353, 60, 73, 89, -1.000000, 0.000000, 0.000000 );
+	uv( 1.000000, 0.000000, 1.000000, 1.000000, 0.000000, 1.000000, 0.000000, 0.000000);
+	f4( 330, 102, 164, 98, -1.000000, 0.000000, 0.000000 );
+	uv( 0.000000, 1.000000, 1.000000, 1.000000, 1.000000, 0.000000, 0.000000, 0.000000);
+	f4( 309, 313, 316, 318, -1.000000, 0.000000, 0.000000 );
+	uv( 1.000000, 0.000000, 1.000000, 1.000000, 0.000000, 1.000000, 0.000000, 0.000000);
+	f4( 352, 63, 62, 195, -1.000000, 0.000000, 0.000000 );
+	uv( 1.000000, 0.000000, 0.590312, 0.000000, 0.000000, 0.629667, 1.000000, 0.622180);
+	f4( 71, 351, 78, 195, -1.000000, 0.000000, 0.000000 );
+	uv( 1.000000, 0.000000, 1.000000, 1.000000, 0.000000, 1.000000, 0.000000, 0.000000);
+	f4( 346, 349, 319, 318, -1.000000, 0.000000, 0.000000 );
+	uv( 1.000000, 1.000000, 1.000000, 0.000000, 0.934109, 0.000000, 0.934109, 1.000000);
+	f4( 189, 353, 64, 79, -1.000000, 0.000000, 0.000000 );
+	uv( 1.000000, 0.000000, 1.000000, 1.000000, 0.000000, 1.000000, 0.000000, 0.000000);
+	f3( 287, 293, 297, -1.000000, 0.000000, 0.000000 );
+	uv( 1.000000, 0.000000, 1.000000, 1.000000, 0.000000, 0.000000);
+	f4( 100, 208, 197, 266, 0.000000, -1.000000, 0.000000 );
+	uv( 1.000000, 1.000000, 1.000000, 0.000000, 0.000000, 0.000000, 0.000000, 1.000000);
+	f4( 63, 349, 80, 326, 0.000000, -1.000000, 0.000000 );
+	uv( 1.000000, 0.000000, 1.000000, 1.000000, 0.000000, 1.000000, 0.000000, 0.000000);
+	f4( 342, 196, 70, 337, 0.000000, -1.000000, 0.000000 );
+	uv( 0.000000, 1.000000, 0.000000, 0.000000, 0.431554, 0.000000, 0.431554, 1.000000);
+	f4( 324, 296, 13, 58, 0.000000, -1.000000, 0.000000 );
+	uv( 0.000000, 1.000000, 1.000000, 1.000000, 1.000000, 0.000000, 0.000000, 0.000000);
+	f3( 329, 80, 347, 0.000000, 0.000000, -1.000000 );
+	uv( 1.000000, 0.000000, 0.000000, 0.000000, 1.000000, 1.000000);
+	f4( 284, 90, 173, 289, 0.000000, 0.000000, -1.000000 );
+	uv( 1.000000, 0.000000, 1.000000, 1.000000, 0.000000, 1.000000, 0.000000, 0.000000);
+	f3( 323, 317, 321, 0.000000, 0.000000, -1.000000 );
+	uv( 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000);
+	f4( 46, 81, 326, 190, 0.000000, 0.000000, -1.000000 );
+	uv( 0.000000, 0.000000, 1.000000, 0.000000, 1.000000, 0.150135, 0.000000, 0.150135);
+	f4( 81, 348, 62, 326, -1.000000, 0.000000, 0.000000 );
+	uv( 1.000000, 1.000000, 1.000000, 0.000000, 0.629667, 0.000000, 0.849865, 1.000000);
+	f3( 90, 284, 285, -1.000000, 0.000000, 0.000000 );
+	uv( 1.000000, 0.000000, 0.000000, 0.000000, 1.000000, 1.000000);
+	f4( 173, 95, 101, 291, -1.000000, 0.000000, 0.000000 );
+	uv( 1.000000, 0.000000, 1.000000, 1.000000, 0.000000, 1.000000, 0.000000, 0.000000);
+	f4( 188, 199, 220, 9, -1.000000, 0.000000, 0.000000 );
+	uv( 1.000000, 0.000000, 1.000000, 1.000000, 0.000000, 1.000000, 0.000000, 0.000000);
+	f4( 352, 350, 55, 262, 0.000000, 0.000000, -1.000000 );
+	uv( 0.000000, 0.000000, 1.000000, 0.000000, 0.234396, 0.962069, 0.061993, 0.989968);
+	f4( 308, 27, 56, 323, 0.000000, 0.000000, -1.000000 );
+	uv( 0.000000, 1.000000, 1.000000, 1.000000, 1.000000, 0.000000, 0.000000, 0.000000);
+	f3( 295, 195, 211, 0.000000, 0.000000, -1.000000 );
+	uv( 0.175944, 1.000000, 0.000000, 0.622180, 0.000000, 1.000000);
+	f4( 348, 81, 46, 75, 0.000000, 0.000000, -1.000000 );
+	uv( 1.000000, 0.000000, 1.000000, 1.000000, 0.000000, 1.000000, 0.000000, 0.000000);
+	f4( 117, 344, 216, 153, 0.000000, -1.000000, 0.000000 );
+	uv( 0.000000, 1.000000, 1.000000, 1.000000, 1.000000, 0.000000, 0.000000, 0.000000);
+	f4( 15, 51, 150, 137, 0.000000, -1.000000, 0.000000 );
+	uv( 0.000000, 1.000000, 1.000000, 1.000000, 1.000000, 0.000000, 0.000000, 0.000000);
+	f3( 266, 197, 262, 0.000000, -1.000000, 0.000000 );
+	uv( 1.000000, 1.000000, 0.000000, 1.000000, 0.000000, 0.921746);
+	f4( 316, 347, 346, 318, 0.000000, -1.000000, 0.000000 );
+	uv( 1.000000, 0.000000, 1.000000, 1.000000, 0.000000, 1.000000, 0.000000, 0.000000);
+	f4( 72, 305, 24, 260, -0.031905, -0.997799, 0.058124 );
+	uv( 0.000000, 1.000000, 1.000000, 1.000000, 1.000000, 0.000000, 0.000000, 0.000000);
+	f4( 217, 48, 258, 135, -0.006226, -0.998739, 0.049811 );
+	uv( 0.000000, 1.000000, 1.000000, 1.000000, 1.000000, 0.000000, 0.000000, 0.000000);
+	f3( 324, 322, 296, -0.015953, -0.999450, 0.029063 );
+	uv( 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000);
+	f4( 148, 69, 344, 117, 0.000000, 0.000000, 0.000000 );
+	uv( 0.000000, 1.000000, 1.000000, 1.000000, 1.000000, 0.000000, 0.000000, 0.000000);
+	f4( 86, 68, 215, 192, 1.000000, 0.000000, 0.000000 );
+	uv( 1.000000, 0.000000, 1.000000, 1.000000, 0.000000, 1.000000, 0.000000, 0.000000);
+	f4( 10, 8, 292, 293, 1.000000, 0.000000, 0.000000 );
+	uv( 0.000000, 1.000000, 1.000000, 1.000000, 1.000000, 0.000000, 0.000000, 0.000000);
+	f4( 3, 10, 293, 287, 1.000000, 0.000000, 0.000000 );
+	uv( 0.000000, 1.000000, 1.000000, 1.000000, 1.000000, 0.000000, 0.000000, 0.000000);
+	f4( 296, 286, 2, 13, 1.000000, 0.000000, 0.000000 );
+	uv( 0.000000, 1.000000, 1.000000, 1.000000, 1.000000, 0.000000, 0.000000, 0.000000);
+	f4( 291, 101, 321, 327, 1.000000, 0.000000, 0.000000 );
+	uv( 1.000000, 0.000000, 1.000000, 1.000000, 0.000000, 1.000000, 0.000000, 0.000000);
+	f4( 188, 9, 290, 78, 1.000000, 0.000000, 0.000000 );
+	uv( 1.000000, 1.000000, 1.000000, 0.000000, 0.000000, 0.000000, 0.000000, 1.000000);
+	f4( 40, 6, 290, 320, 1.000000, 0.000000, 0.000000 );
+	uv( 0.000000, 1.000000, 1.000000, 1.000000, 1.000000, 0.000000, 0.000000, 0.000000);
+	f4( 92, 284, 0, 221, 1.000000, 0.000000, 0.000000 );
+	uv( 0.000000, 1.000000, 1.000000, 1.000000, 1.000000, 0.000000, 0.000000, 0.000000);
+	f4( 287, 91, 78, 290, 0.000000, -1.000000, 0.000000 );
+	uv( 1.000000, 0.000000, 1.000000, 1.000000, 0.000000, 1.000000, 0.000000, 0.000000);
+	f4( 353, 189, 294, 317, 0.000000, -1.000000, 0.000000 );
+	uv( 1.000000, 0.000000, 1.000000, 0.500000, 1.000000, 1.000000, 0.000000, 0.000000);
+	f4( 53, 69, 148, 152, 0.000000, -1.000000, 0.000000 );
+	uv( 0.000000, 1.000000, 1.000000, 1.000000, 1.000000, 0.000000, 0.000000, 0.000000);
+	f4( 16, 72, 260, 233, 0.000000, -1.000000, 0.000000 );
+	uv( 0.000000, 1.000000, 1.000000, 1.000000, 1.000000, 0.000000, 0.000000, 0.000000);
+	f4( 32, 26, 307, 313, 0.000000, 0.000000, 1.000000 );
+	uv( 0.000000, 1.000000, 1.000000, 1.000000, 1.000000, 0.000000, 0.000000, 0.000000);
+	f4( 28, 32, 313, 309, 0.000000, 0.000000, 1.000000 );
+	uv( 0.000000, 1.000000, 1.000000, 1.000000, 1.000000, 0.000000, 0.000000, 0.000000);
+	f4( 264, 232, 194, 47, 0.000000, 0.000000, 1.000000 );
+	uv( 0.000000, 0.000000, 1.000000, 0.000000, 1.000000, 1.000000, 0.000000, 1.000000);
+	f4( 212, 214, 15, 217, 0.000000, 0.000000, 1.000000 );
+	uv( 1.000000, 0.000000, 1.000000, 1.000000, 0.000000, 1.000000, 0.000000, 0.000000);
+	f4( 169, 168, 208, 211, 0.000000, 0.000000, 1.000000 );
+	uv( 0.000000, 1.000000, 1.000000, 1.000000, 1.000000, 0.000000, 0.000000, 0.000000);
+	f3( 209, 234, 70, 0.000000, 0.000000, 1.000000 );
+	uv( 0.522512, 0.000000, 1.000000, 0.459138, 1.000000, 0.766589);
+	f4( 205, 207, 343, 198, 0.000000, 0.000000, 1.000000 );
+	uv( 0.389458, 0.003987, 0.389406, 0.320947, 0.556543, 0.317910, 0.556574, 0.002896);
+	f4( 309, 306, 25, 28, 0.000000, 0.000000, 1.000000 );
+	uv( 0.000000, 1.000000, 1.000000, 1.000000, 1.000000, 0.000000, 0.000000, 0.000000);
+	f4( 306, 301, 20, 25, -1.000000, 0.000000, 0.000000 );
+	uv( 0.000000, 0.000000, 1.000000, 0.000000, 1.000000, 1.000000, 0.000000, 1.000000);
+	f4( 47, 194, 48, 193, -1.000000, 0.000000, 0.000000 );
+	uv( 1.000000, 0.000000, 1.000000, 1.000000, 0.000000, 1.000000, 0.000000, 0.000000);
+	f4( 153, 216, 219, 149, -1.000000, 0.000000, 0.000000 );
+	uv( 0.000000, 1.000000, 1.000000, 1.000000, 1.000000, 0.000000, 0.000000, 0.000000);
+	f4( 98, 164, 165, 202, 0.000000, 0.000000, 0.000000 );
+	uv( 0.000000, 1.000000, 1.000000, 1.000000, 1.000000, 0.000000, 0.000000, 0.000000);
+	f4( 329, 298, 268, 214, 0.000000, -1.000000, 0.000000 );
+	uv( 1.000000, 0.000000, 1.000000, 1.000000, 0.000000, 1.000000, 0.000000, 0.000000);
+	f4( 290, 9, 220, 320, 0.000000, -1.000000, 0.000000 );
+	uv( 1.000000, 0.000000, 1.000000, 1.000000, 0.000000, 1.000000, 0.000000, 0.000000);
+	f4( 200, 43, 210, 332, 0.000000, -1.000000, 0.000000 );
+	uv( 1.000000, 1.000000, 1.000000, 0.000000, 0.000000, 0.000000, 0.000000, 1.000000);
+	f4( 49, 266, 55, 317, 0.000000, -1.000000, 0.000000 );
+	uv( 1.000000, 0.000000, 1.000000, 1.000000, 0.000000, 0.704121, 0.000000, 0.000000);
+	f4( 18, 22, 303, 299, 1.000000, 0.000000, 0.000000 );
+	uv( 0.000000, 0.000000, 1.000000, 0.000000, 1.000000, 1.000000, 0.000000, 1.000000);
+	f4( 323, 321, 310, 308, 1.000000, 0.000000, 0.000000 );
+	uv( 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000);
+	f4( 308, 315, 34, 27, 1.000000, 0.000000, 0.000000 );
+	uv( 0.000000, 1.000000, 1.000000, 1.000000, 1.000000, 0.000000, 0.000000, 0.000000);
+	f4( 328, 352, 96, 85, 0.000000, 0.000000, 0.000000 );
+	uv( 0.934109, 0.205017, 1.000000, 0.000000, 0.496329, 0.000000, 0.521365, 0.205016);
+	f4( 311, 310, 321, 322, -1.000000, 0.000000, 0.000000 );
+	uv( 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000);
+	f3( 352, 197, 96, -1.000000, 0.000000, 0.000000 );
+	uv( 0.000000, 0.000000, 1.000000, 0.000000, 0.000000, 0.503671);
+	f4( 59, 192, 215, 210, -1.000000, 0.000000, 0.000000 );
+	uv( 1.000000, 0.000000, 1.000000, 1.000000, 0.000000, 1.000000, 0.000000, 0.000000);
+	f4( 351, 71, 266, 49, -1.000000, 0.000000, 0.000000 );
+	uv( 1.000000, 0.000000, 1.000000, 1.000000, 0.000000, 1.000000, 0.000000, 0.000000);
+	f4( 311, 322, 324, 302, 0.000000, 1.000000, 0.000000 );
+	uv( 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000);
+	f3( 321, 317, 294, 0.000000, 1.000000, 0.000000 );
+	uv( 1.000000, 0.000000, 0.000000, 0.000000, 1.000000, 1.000000);
+	f4( 292, 8, 5, 289, 0.000000, 1.000000, 0.000000 );
+	uv( 0.000000, 1.000000, 1.000000, 1.000000, 1.000000, 0.000000, 0.000000, 0.000000);
+	f4( 220, 199, 351, 49, 0.000000, 0.000000, 0.000000 );
+	uv( 1.000000, 0.000000, 1.000000, 1.000000, 0.000000, 1.000000, 0.000000, 0.000000);
+	f4( 320, 220, 49, 317, 0.000000, 0.000000, 1.000000 );
+	uv( 1.000000, 0.000000, 1.000000, 1.000000, 0.000000, 1.000000, 0.000000, 0.000000);
+	f4( 18, 299, 302, 21, 0.000000, 0.000000, 1.000000 );
+	uv( 0.000000, 0.000000, 1.000000, 0.000000, 1.000000, 1.000000, 0.000000, 1.000000);
+	f4( 16, 231, 187, 72, 0.000000, 0.000000, 1.000000 );
+	uv( 1.000000, 1.000000, 1.000000, 0.000000, 0.000000, 0.000000, 0.000000, 1.000000);
+	f4( 310, 311, 303, 304, 0.000000, 0.000000, 1.000000 );
+	uv( 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000);
+	f4( 302, 299, 303, 311, -0.398548, 0.000000, -0.917147 );
+	uv( 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000);
+	f4( 231, 16, 233, 263, -0.930337, 0.000000, -0.366705 );
+	uv( 0.000000, 1.000000, 1.000000, 1.000000, 1.000000, 0.000000, 0.000000, 0.000000);
+	f4( 219, 339, 332, 210, -0.930337, 0.000000, -0.366705 );
+	uv( 1.000000, 0.000000, 1.000000, 1.000000, 0.000000, 1.000000, 0.000000, 0.000000);
+	f4( 50, 57, 145, 128, -0.398548, 0.000000, -0.917147 );
+	uv( 0.000000, 1.000000, 1.000000, 1.000000, 1.000000, 0.000000, 0.000000, 0.000000);
+	f4( 56, 40, 320, 323, -0.061025, -0.998041, -0.013780 );
+	uv( 0.000000, 0.000000, 1.000000, 0.000000, 1.000000, 1.000000, 0.000000, 1.000000);
+	f4( 45, 100, 266, 71, -0.035372, -0.999130, -0.022107 );
+	uv( 1.000000, 1.000000, 1.000000, 0.000000, 0.000000, 0.000000, 0.000000, 1.000000);
+	f4( 336, 53, 152, 109, -0.035372, -0.999130, -0.022107 );
+	uv( 0.000000, 1.000000, 1.000000, 1.000000, 1.000000, 0.000000, 0.000000, 0.000000);
+	f4( 340, 336, 109, 113, -0.061025, -0.998041, -0.013780 );
+	uv( 0.000000, 1.000000, 1.000000, 1.000000, 1.000000, 0.000000, 0.000000, 0.000000);
+	f4( 214, 268, 51, 15, 0.000000, -1.000000, 0.000000 );
+	uv( 1.000000, 1.000000, 1.000000, 0.000000, 0.000000, 0.000000, 0.000000, 1.000000);
+	f4( 340, 113, 105, 333, 0.000000, -1.000000, 0.000000 );
+	uv( 0.000000, 1.000000, 1.000000, 1.000000, 1.000000, 0.000000, 0.000000, 0.000000);
+	f3( 316, 329, 347, 0.000000, -1.000000, 0.000000 );
+	uv( 1.000000, 0.000000, 1.000000, 1.000000, 0.000000, 0.000000);
+	f4( 112, 108, 153, 149, 0.000000, -1.000000, 0.000000 );
+	uv( 0.000000, 0.000000, 1.000000, 0.000000, 1.000000, 1.000000, 0.000000, 1.000000);
+	f4( 312, 314, 33, 31, -1.000000, 0.000000, 0.000000 );
+	uv( 0.000000, 0.000000, 1.000000, 0.000000, 1.000000, 1.000000, 0.000000, 1.000000);
+
+	scope.colors = {};
+	scope.selections = {};
+	scope.selections["dark"] = [1, 7, 11, 13, 14, 17, 19, 20, 26, 28, 35, 39, 43, 47, 49, 59, 60, 61, 64, 66, 71, 73, 78, 82, 86, 87, 88, 90, 91, 92, 93, 94, 98, 99, 109, 113, 116, 121, 126, 131, 132, 139, 140, 142, 145, 150, 157, 160, 162, 165, 169, 175, 180, 181, 182, 183, 185, 192, 201, 203, 204, 207, 216, 220, 221, 224, 225, 226, 228, 233, 240, 243, 246, 249, 250, 252, 258, 260, 267, 281, 283, 293, 296, 303, 305, 314, 326];
+	scope.selections["light"] = [0, 2, 3, 4, 5, 6, 8, 9, 10, 12, 15, 16, 18, 21, 22, 23, 24, 25, 27, 29, 30, 31, 32, 33, 34, 36, 37, 38, 40, 41, 42, 44, 45, 46, 48, 50, 51, 52, 53, 54, 55, 56, 57, 58, 62, 63, 65, 67, 68, 69, 70, 72, 74, 75, 76, 77, 79, 80, 81, 83, 84, 85, 89, 95, 96, 97, 100, 101, 102, 103, 104, 105, 106, 107, 108, 110, 111, 112, 114, 115, 117, 118, 119, 120, 122, 123, 124, 125, 127, 128, 129, 130, 133, 134, 135, 136, 137, 138, 141, 143, 144, 146, 147, 148, 149, 151, 152, 153, 154, 155, 156, 158, 159, 161, 163, 164, 166, 167, 168, 170, 171, 172, 173, 174, 176, 177, 178, 179, 184, 186, 187, 188, 189, 190, 191, 193, 194, 195, 196, 197, 198, 199, 200, 202, 205, 206, 208, 209, 210, 211, 212, 213, 214, 215, 217, 218, 219, 222, 223, 227, 229, 230, 231, 232, 234, 235, 236, 237, 238, 239, 241, 242, 244, 245, 247, 248, 251, 253, 254, 255, 256, 257, 259, 261, 262, 263, 264, 265, 266, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 282, 284, 285, 286, 287, 288, 289, 290, 291, 292, 294, 295, 297, 298, 299, 300, 301, 302, 304, 306, 307, 308, 309, 310, 311, 312, 313, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 327, 328];
+	scope.colors["dark"] = 0x7e4a3b;
+	scope.colors["light"] = 0xa98e70;
+
+	scope.autoColor = function(){
+		for(var s in this.selections){
+			for(var i = 0 ; i < this.selections[s].length; i++) this.faces[this.selections[s][i]].material = [ new THREE.MeshColorFillMaterial( this.colors[s],1) ];
+		}
+	}
+
+	scope.getPosition = function(){	return new THREE.Vector3(0.0, 0.0, 0.0);	}
+
+	scope.getRotation = function(){	return new THREE.Vector3(-1.5707963705062866, 0.0, -1.5707963705062866);	}
+
+	scope.getScale = function(){	return new THREE.Vector3(1.0, 1.0, 1.0);	}
+
+	function v( x, y, z ) {
+
+		scope.vertices.push( new THREE.Vertex( new THREE.Vector3( x, y, z ) ) );
+
+	}
+
+	function f3( a, b, c, nx, ny, nz ) {
+
+		scope.faces.push( new THREE.Face3( a, b, c, nx && ny && nz ? new THREE.Vector3( nx, ny, nz ) : null ) );
+
+	}
+
+	function f4( a, b, c, d, nx, ny, nz ) {
+
+		scope.faces.push( new THREE.Face4( a, b, c, d, nx && ny && nz ? new THREE.Vector3( nx, ny, nz ) : null ) );
+
+	}
+
+	function uv( u1, v1, u2, v2, u3, v3, u4, v4 ) {
+
+		var uv = [];
+		uv.push( new THREE.UV( u1, v1 ) );
+		uv.push( new THREE.UV( u2, v2 ) );
+		uv.push( new THREE.UV( u3, v3 ) );
+		if ( u4 && v4 ) uv.push( new THREE.UV( u4, v4 ) );
+		scope.uvs.push( uv );
+	}
+
+}
+
+Q5.prototype = new THREE.Geometry();
+Q5.prototype.constructor = Q5;

BIN
examples/geometry/dice.gif


+ 4394 - 0
examples/obj/Q5/Q5.js

@@ -0,0 +1,4394 @@
+// Converted from: Q5.obj
+//  vertices: 1734
+//  faces: 1259 
+//  materials: 2
+//
+//  Generated with OBJ -> Three.js converter
+//  http://github.com/alteredq/three.js/blob/master/utils/exporters/convert_obj_threejs.py
+
+var Q5 = function ( urlbase ) {
+    var scope = this;
+
+    THREE.Geometry.call(this);
+
+    var materials = [	{
+	"a_dbg_color" : 0xffeeeeee,
+	"a_dbg_index" : 0,
+	"a_dbg_name" : "brown_dark"
+	},
+
+	{
+	"a_dbg_color" : 0xffee0000,
+	"a_dbg_index" : 1,
+	"a_dbg_name" : "brown_light"
+	}];
+
+    init_materials();
+    
+    var normals = [];
+
+	v(30.999997,127.000004,-24.639863);
+	v(30.999997,106.000004,-44.639861);
+	v(9.999997,88.000004,-44.639861);
+	v(31.000000,89.000004,22.360137);
+	v(9.999997,106.000004,-44.639861);
+	v(30.999999,127.000004,8.360137);
+	v(29.000000,89.000004,22.360137);
+	v(30.999999,101.000004,-0.639863);
+	v(30.999999,101.000004,8.360137);
+	v(-28.999998,73.000004,39.360137);
+	v(31.000000,101.000004,22.360137);
+	v(30.999999,92.000004,8.360137);
+	v(44.999999,19.000004,39.360137);
+	v(30.999997,77.000004,-44.639861);
+	v(31.000000,92.000004,19.360137);
+	v(-35.999998,16.000004,-42.639861);
+	v(-14.000006,37.000004,-43.639861);
+	v(29.999997,21.000004,-29.639863);
+	v(38.999999,67.000004,-29.639863);
+	v(38.999999,21.000004,-43.639861);
+	v(38.999999,55.000004,-26.639863);
+	v(38.999999,67.000004,-38.639861);
+	v(38.999999,74.000004,-29.639863);
+	v(38.999999,74.000004,-16.639863);
+	v(38.999999,59.000004,-43.639861);
+	v(38.999999,55.000004,-16.639863);
+	v(38.999999,59.000004,-29.639863);
+	v(38.999999,68.000004,-0.639863);
+	v(38.999999,49.000004,-16.639863);
+	v(38.999999,87.000004,-0.639863);
+	v(38.999999,87.000004,-38.639861);
+	v(38.999999,68.000004,-26.639863);
+	v(38.999999,49.000004,-29.639863);
+	v(38.999999,68.000004,-16.639863);
+	v(38.999999,68.000004,5.360137);
+	v(38.999999,32.000004,-29.639863);
+	v(-44.999998,63.000004,24.360141);
+	v(30.999999,77.000004,8.360137);
+	v(38.999999,32.000004,-7.639863);
+	v(38.999999,26.000004,-7.639863);
+	v(29.000000,77.000004,22.360137);
+	v(-42.999998,-69.000004,10.360141);
+	v(-42.999998,-69.000004,22.360141);
+	v(-42.999998,-99.000004,-9.639859);
+	v(-42.999998,-79.000004,10.360141);
+	v(-44.999998,40.000004,39.360145);
+	v(-35.999998,6.999996,7.360141);
+	v(-14.000006,16.000004,-42.639861);
+	v(-24.000005,-3.000004,-42.639861);
+	v(-28.999998,61.000004,32.360137);
+	v(-16.000006,-46.000004,-26.639861);
+	v(-29.999998,16.000004,-38.639861);
+	v(30.999999,87.000004,-0.639863);
+	v(-20.000006,-61.000004,-26.639859);
+	v(30.999997,87.000004,-38.639861);
+	v(-29.999998,47.000004,8.360141);
+	v(30.999999,77.000004,-0.639863);
+	v(-16.000006,-46.000004,-28.639861);
+	v(30.999997,77.000004,-38.639861);
+	v(-42.999998,-31.000004,5.360141);
+	v(-49.999998,63.000004,8.360141);
+	v(-20.999998,-123.000004,22.360141);
+	v(-44.999998,18.000004,1.360141);
+	v(-44.999998,26.000004,1.360141);
+	v(-49.999998,92.000004,19.360141);
+	v(-35.999998,-46.000004,-26.639859);
+	v(-16.000006,-31.000004,-42.639861);
+	v(-15.000006,68.000004,-26.639861);
+	v(-35.999998,-22.000004,-2.639859);
+	v(-21.000001,-61.000004,-11.639859);
+	v(-42.999998,-123.000004,-38.639857);
+	v(-44.999998,40.000004,32.360145);
+	v(-24.000005,47.000004,-43.639861);
+	v(-49.999998,63.000004,24.360141);
+	v(38.999999,26.000004,5.360137);
+	v(-35.999998,13.999996,7.360141);
+	v(-42.999998,-79.000004,22.360141);
+	v(-0.000001,26.000004,5.360137);
+	v(-44.999998,84.000004,27.360141);
+	v(-44.999998,92.000004,19.360141);
+	v(-44.999998,6.999996,-29.639859);
+	v(-44.999998,6.999996,7.360141);
+	v(44.999999,6.999996,1.360137);
+	v(30.999999,92.000004,8.360137);
+	v(-30.999998,101.000004,-24.639859);
+	v(-0.000001,26.000004,5.360137);
+	v(-35.999998,-22.000004,5.360141);
+	v(-36.999998,55.000004,-26.639859);
+	v(-42.999998,-127.000004,22.360141);
+	v(-49.999998,87.000004,24.360141);
+	v(-30.999998,109.000004,-24.639859);
+	v(-44.999998,87.000004,24.360141);
+	v(-10.000001,117.000004,-34.639861);
+	v(38.999999,26.000004,5.360137);
+	v(-29.999998,21.000004,-38.639861);
+	v(-30.999998,109.000004,-8.639859);
+	v(-0.000001,26.000004,8.360137);
+	v(38.999999,21.000004,-29.639863);
+	v(-35.999998,6.999996,16.360141);
+	v(-20.000006,-117.000004,-38.639861);
+	v(-28.999998,40.000004,39.360137);
+	v(-30.999998,101.000004,-8.639859);
+	v(35.999999,-63.000004,16.360137);
+	v(15.999999,-11.000004,-26.639861);
+	v(42.999999,-81.000004,-14.639863);
+	v(21.000000,-63.000004,22.360137);
+	v(-42.999998,-63.000004,5.360141);
+	v(19.999999,-81.000004,-14.639863);
+	v(19.999997,-80.000004,-26.639861);
+	v(19.999997,-72.000004,-26.639861);
+	v(19.999997,-123.000004,-38.639861);
+	v(21.000000,-127.000004,22.360137);
+	v(42.999999,-80.000004,-26.639863);
+	v(21.000000,-71.000004,22.360137);
+	v(42.999999,-63.000004,22.360137);
+	v(19.999997,-127.000004,-38.639861);
+	v(42.999999,-101.000004,10.360137);
+	v(20.999999,-52.000004,-11.639863);
+	v(35.999999,-63.000004,5.360137);
+	v(44.999999,32.000004,-7.639863);
+	v(44.999999,32.000004,-29.639863);
+	v(44.999999,13.999996,7.360137);
+	v(44.999999,26.000004,-7.639863);
+	v(44.999999,63.000004,8.360137);
+	v(44.999999,61.000004,32.360137);
+	v(44.999999,26.000004,8.360137);
+	v(49.999999,92.000004,8.360137);
+	v(35.999999,-11.000004,-26.639863);
+	v(15.999999,-46.000004,-26.639861);
+	v(35.999999,16.000004,-29.639863);
+	v(29.999997,16.000004,-29.639863);
+	v(29.999997,21.000004,-29.639863);
+	v(49.999999,63.000004,8.360137);
+	v(49.999999,63.000004,24.360137);
+	v(49.999999,92.000004,19.360137);
+	v(35.999999,-11.000004,-42.639861);
+	v(15.999997,-11.000004,-42.639861);
+	v(35.999999,16.000004,-42.639861);
+	v(29.999997,21.000004,-38.639861);
+	v(44.999999,63.000004,24.360137);
+	v(35.999999,-22.000004,5.360137);
+	v(42.999999,-63.000004,5.360137);
+	v(42.999999,-22.000004,5.360137);
+	v(35.999999,-22.000004,-2.639863);
+	v(35.999999,-46.000004,-26.639863);
+	v(15.999999,-46.000004,-28.639861);
+	v(15.999997,-31.000004,-42.639861);
+	v(15.999999,-31.000004,-26.639861);
+	v(20.999999,-61.000004,-11.639863);
+	v(42.999999,-46.000004,-26.639863);
+	v(29.999997,16.000004,-38.639861);
+	v(42.999999,-22.000004,-2.639863);
+	v(19.999997,-61.000004,-26.639861);
+	v(19.999997,-52.000004,-26.639861);
+	v(42.999999,-123.000004,-38.639861);
+	v(44.999999,73.000004,39.360137);
+	v(42.999999,-127.000004,22.360137);
+	v(19.999997,-117.000004,-38.639861);
+	v(42.999999,-127.000004,-38.639861);
+	v(42.999999,-101.000004,22.360137);
+	v(42.999999,-94.000004,-14.639863);
+	v(42.999999,-117.000004,-38.639861);
+	v(19.999999,-94.000004,-14.639863);
+	v(35.999999,13.999996,7.360137);
+	v(35.999999,6.999996,16.360137);
+	v(35.999999,6.999996,39.360137);
+	v(35.999999,13.999996,39.360137);
+	v(44.999999,40.000004,39.360137);
+	v(29.000000,34.000004,39.360137);
+	v(44.999999,13.999996,39.360137);
+	v(35.999999,6.999996,7.360137);
+	v(35.999999,6.999996,-29.639863);
+	v(44.999999,6.999996,7.360137);
+	v(-30.999998,109.000004,-0.639859);
+	v(29.000000,40.000004,39.360137);
+	v(44.999999,40.000004,32.360137);
+	v(29.000000,61.000004,39.360137);
+	v(29.000000,61.000004,32.360137);
+	v(29.000000,40.000004,32.360137);
+	v(28.999999,34.000004,8.360137);
+	v(44.999999,6.999996,-29.639863);
+	v(44.999999,61.000004,39.360137);
+	v(29.000000,73.000004,39.360137);
+	v(49.999999,87.000004,24.360137);
+	v(44.999999,87.000004,24.360137);
+	v(-25.000005,68.000004,-26.639859);
+	v(-2.000001,68.000004,-26.639861);
+	v(-24.000005,21.000004,-43.639861);
+	v(-44.999998,73.000004,39.360145);
+	v(-44.999998,92.000004,8.360141);
+	v(-35.999998,6.999996,1.360141);
+	v(-30.999998,101.000004,-16.639859);
+	v(-42.999998,-22.000004,5.360141);
+	v(-24.000005,16.000004,-42.639861);
+	v(-14.000006,6.999996,-42.639861);
+	v(-44.999998,19.000004,27.360141);
+	v(-42.999998,-127.000004,-38.639857);
+	v(-28.999998,34.000004,8.360141);
+	v(-42.999998,-101.000004,22.360141);
+	v(-44.999998,61.000004,39.360145);
+	v(-42.999998,-94.000004,-14.639859);
+	v(-16.000006,-11.000004,-42.639861);
+	v(-35.999998,6.999996,39.360137);
+	v(-35.999998,13.999996,39.360137);
+	v(-30.999998,109.000004,-16.639859);
+	v(-42.999998,-90.000004,22.360141);
+	v(-42.999998,-109.000004,22.360141);
+	v(-42.999998,-90.000004,10.360141);
+	v(-28.999998,34.000004,39.360137);
+	v(-42.999998,-109.000004,-9.639859);
+	v(-42.999998,-45.000004,-9.639859);
+	v(-44.999998,13.999996,39.360145);
+	v(-35.999998,6.999996,-29.639859);
+	v(-42.999998,-123.000004,22.360141);
+	v(-35.999998,16.000004,-29.639859);
+	v(-42.999998,-22.000004,-2.639859);
+	v(-20.000006,-52.000004,-26.639859);
+	v(-35.999998,-11.000004,-42.639861);
+	v(-16.000006,-31.000004,-26.639861);
+	v(-42.999998,-46.000004,-26.639859);
+	v(-28.999998,61.000004,39.360137);
+	v(9.999997,117.000004,-34.639861);
+	v(-20.999998,-123.000004,22.360141);
+	v(-42.999998,-63.000004,10.360141);
+	v(30.999999,101.000004,-8.639863);
+	v(30.999999,109.000004,-0.639863);
+	v(30.999997,109.000004,-24.639863);
+	v(30.999999,109.000004,-16.639863);
+	v(30.999999,109.000004,-8.639863);
+	v(30.999997,101.000004,-24.639863);
+	v(30.999999,101.000004,-16.639863);
+	v(-14.000006,21.000004,-43.639861);
+	v(13.999997,6.999996,-42.639861);
+	v(13.999997,37.000004,-43.639861);
+	v(-42.999998,-117.000004,-38.639857);
+	v(23.999997,21.000004,-43.639861);
+	v(-20.000001,-94.000004,-14.639859);
+	v(44.999999,84.000004,27.360137);
+	v(44.999999,92.000004,8.360137);
+	v(44.999999,19.000004,27.360137);
+	v(44.999999,92.000004,19.360137);
+	v(44.999999,18.000004,1.360137);
+	v(44.999999,26.000004,1.360137);
+	v(35.999999,6.999996,1.360137);
+	v(35.999999,6.999996,1.360137);
+	v(24.999997,68.000004,-26.639863);
+	v(24.999997,55.000004,-26.639863);
+	v(1.999999,68.000004,-26.639861);
+	v(36.999999,68.000004,-26.639863);
+	v(1.999999,55.000004,-26.639861);
+	v(14.999999,55.000004,-26.639861);
+	v(14.999999,68.000004,-26.639861);
+	v(36.999999,55.000004,-26.639863);
+	v(-25.000005,55.000004,-26.639859);
+	v(23.999997,21.000004,-43.639861);
+	v(23.999997,16.000004,-42.639861);
+	v(-36.999998,68.000004,-26.639859);
+	v(-2.000001,55.000004,-26.639861);
+	v(23.999997,-3.000004,-42.639861);
+	v(-15.000006,55.000004,-26.639861);
+	v(23.999997,47.000004,-43.639861);
+	v(28.999999,37.000004,8.360137);
+	v(-28.999998,37.000004,8.360141);
+	v(13.999997,21.000004,-43.639861);
+	v(13.999997,16.000004,-42.639861);
+	v(29.999999,47.000004,8.360137);
+	v(-28.999998,40.000004,32.360137);
+	v(42.999999,-31.000004,5.360137);
+	v(-29.999998,16.000004,-29.639859);
+	v(-29.999998,21.000004,-29.639859);
+	v(21.000000,-123.000004,22.360137);
+	v(42.999999,-79.000004,22.360137);
+	v(42.999999,-69.000004,22.360137);
+	v(42.999999,-69.000004,10.360137);
+	v(21.000000,-123.000004,22.360137);
+	v(42.999999,-79.000004,10.360137);
+	v(42.999999,-90.000004,22.360137);
+	v(42.999999,-99.000004,-9.639863);
+	v(42.999999,-45.000004,-9.639863);
+	v(42.999999,-109.000004,22.360137);
+	v(42.999999,-90.000004,10.360137);
+	v(42.999999,-109.000004,-9.639863);
+	v(42.999999,-123.000004,22.360137);
+	v(42.999999,-63.000004,10.360137);
+	v(-30.999998,127.000004,-24.639859);
+	v(-30.999998,106.000004,-44.639861);
+	v(-10.000006,88.000004,-44.639861);
+	v(-30.999998,89.000004,22.360141);
+	v(-10.000006,106.000004,-44.639861);
+	v(-30.999998,127.000004,8.360141);
+	v(-28.999998,89.000004,22.360141);
+	v(-30.999998,101.000004,-0.639859);
+	v(-30.999998,101.000004,8.360141);
+	v(-30.999998,101.000004,22.360141);
+	v(-30.999998,92.000004,8.360141);
+	v(-44.999998,19.000004,39.360145);
+	v(-30.999998,77.000004,-44.639861);
+	v(-30.999998,92.000004,19.360141);
+	v(-29.999998,21.000004,-29.639859);
+	v(-38.999998,67.000004,-29.639859);
+	v(-38.999998,21.000004,-43.639861);
+	v(-38.999998,55.000004,-26.639859);
+	v(-38.999998,67.000004,-38.639861);
+	v(-38.999998,74.000004,-29.639859);
+	v(-38.999998,74.000004,-16.639859);
+	v(-38.999998,59.000004,-43.639861);
+	v(-38.999998,55.000004,-16.639859);
+	v(-38.999998,59.000004,-29.639859);
+	v(-38.999998,68.000004,-0.639859);
+	v(-38.999998,49.000004,-16.639859);
+	v(-38.999998,87.000004,-0.639859);
+	v(-38.999998,87.000004,-38.639861);
+	v(-38.999998,68.000004,-26.639859);
+	v(-38.999998,49.000004,-29.639859);
+	v(-38.999998,68.000004,-16.639859);
+	v(-38.999998,68.000004,5.360141);
+	v(-38.999998,32.000004,-29.639859);
+	v(-30.999998,77.000004,8.360141);
+	v(-38.999998,32.000004,-7.639859);
+	v(-38.999998,26.000004,-7.639859);
+	v(-28.999998,77.000004,22.360141);
+	v(-30.999998,87.000004,-0.639859);
+	v(-30.999998,87.000004,-38.639861);
+	v(-30.999998,77.000004,-0.639859);
+	v(-30.999998,77.000004,-38.639861);
+	v(-38.999998,26.000004,5.360141);
+	v(-44.999998,6.999996,1.360141);
+	v(-30.999998,92.000004,8.360141);
+	v(-38.999998,26.000004,5.360141);
+	v(-38.999998,21.000004,-29.639859);
+	v(-35.999998,-63.000004,16.360141);
+	v(-16.000006,-11.000004,-26.639861);
+	v(-42.999998,-81.000004,-14.639859);
+	v(-20.999998,-63.000004,22.360141);
+	v(-20.000001,-81.000004,-14.639859);
+	v(-20.000006,-80.000004,-26.639859);
+	v(-20.000006,-72.000004,-26.639859);
+	v(-20.000006,-123.000004,-38.639861);
+	v(-20.999998,-127.000004,22.360141);
+	v(-42.999998,-80.000004,-26.639859);
+	v(-20.999998,-71.000004,22.360141);
+	v(-42.999998,-63.000004,22.360141);
+	v(-20.000006,-127.000004,-38.639861);
+	v(-42.999998,-101.000004,10.360141);
+	v(-21.000001,-52.000004,-11.639859);
+	v(-35.999998,-63.000004,5.360141);
+	v(-44.999998,32.000004,-7.639859);
+	v(-44.999998,32.000004,-29.639859);
+	v(-44.999998,13.999996,7.360141);
+	v(-44.999998,26.000004,-7.639859);
+	v(-44.999998,63.000004,8.360141);
+	v(-44.999998,61.000004,32.360145);
+	v(-44.999998,26.000004,8.360141);
+	v(-49.999998,92.000004,8.360141);
+	v(-35.999998,-11.000004,-26.639859);
+	v(30.362561,70.252689,-39.869548);
+	v(30.362565,70.252689,19.566505);
+	v(30.362561,96.358936,-39.869548);
+	v(30.362563,91.588718,8.326995);
+	v(30.362563,115.020237,8.326995);
+	v(30.362563,115.020237,-22.153033);
+	v(30.362565,91.588718,19.566505);
+	v(30.362561,96.358936,-39.869548);
+	v(11.639485,80.017704,-39.869546);
+	v(30.362561,70.252689,-39.869548);
+	v(-23.548987,70.252689,-39.869544);
+	v(11.795737,96.358936,-39.869546);
+	v(-5.788939,80.017704,-39.869546);
+	v(-5.788939,96.358936,-39.869546);
+	v(-23.548987,96.358936,-39.869544);
+	v(11.639485,96.358936,-39.869546);
+	v(30.362561,96.358936,-39.869548);
+	v(30.362563,115.020237,-22.153033);
+	v(11.795737,96.358936,-39.869546);
+	v(11.795737,115.020237,-22.153032);
+	v(30.362563,115.020237,8.326995);
+	v(-23.548978,115.020237,8.326995);
+	v(30.362563,115.020237,-22.153033);
+	v(-23.548978,115.020237,-22.153031);
+	v(11.795737,115.020237,-22.153032);
+	v(-5.788939,115.020237,-22.153032);
+	v(30.362563,115.020237,8.326995);
+	v(30.362563,91.588718,8.326995);
+	v(-23.548978,115.020237,8.326995);
+	v(-23.548978,91.588718,8.326995);
+	v(30.362565,91.588718,19.566505);
+	v(-23.548978,91.588718,19.566505);
+	v(30.362563,91.588718,8.326995);
+	v(-23.548978,91.588718,8.326995);
+	v(30.362565,91.588718,19.566505);
+	v(30.362565,70.252689,19.566505);
+	v(-23.548978,91.588718,19.566505);
+	v(-23.548978,70.252689,19.566505);
+	v(-23.548978,70.252689,19.566505);
+	v(30.362565,70.252689,19.566505);
+	v(-23.548987,70.252689,-39.869544);
+	v(30.362561,70.252689,-39.869548);
+	v(-5.788939,96.358936,-39.869546);
+	v(-5.788939,115.020237,-22.153032);
+	v(-23.548987,96.358936,-39.869544);
+	v(-23.548978,115.020237,-22.153031);
+	v(11.639485,80.017704,-39.869546);
+	v(11.639485,96.358936,-39.869546);
+	v(-5.788939,80.017704,-39.869546);
+	v(-5.788939,96.358936,-39.869546);
+	v(11.795737,96.358936,-39.869546);
+	v(11.795737,115.020237,-22.153032);
+	v(11.639485,96.358936,-39.869546);
+	v(-5.788939,115.020237,-22.153032);
+	v(-5.788939,96.358936,-39.869546);
+	v(-23.548978,70.252689,19.566505);
+	v(-23.548987,70.252689,-39.869544);
+	v(-23.548978,91.588718,19.566505);
+	v(-23.548978,91.588718,8.326995);
+	v(-23.548987,96.358936,-39.869544);
+	v(-23.548978,115.020237,8.326995);
+	v(-23.548978,115.020237,-22.153031);
+	v(37.257348,50.753116,-24.462756);
+	v(37.257348,61.611622,-24.462756);
+	v(37.257348,67.659382,-26.939256);
+	v(37.257348,61.241764,-26.939256);
+	v(37.257348,20.233402,-39.116385);
+	v(37.257348,20.233402,4.694823);
+	v(37.257348,53.570926,-39.116385);
+	v(37.257348,44.989857,-26.939256);
+	v(37.257348,53.570926,-26.939256);
+	v(37.257348,50.753116,-24.462756);
+	v(37.257348,50.753116,-15.509248);
+	v(37.257348,61.611622,-24.462756);
+	v(37.257348,61.241764,-35.115882);
+	v(37.257348,61.241764,-26.939256);
+	v(37.257348,79.097935,-35.115882);
+	v(37.257348,67.659382,-26.939256);
+	v(37.257348,67.659382,-15.509248);
+	v(37.257348,61.611622,-15.509248);
+	v(37.257348,61.952930,-1.020181);
+	v(37.257348,79.097935,-1.020181);
+	v(37.257348,61.952930,4.694823);
+	v(37.257348,44.989857,-15.509248);
+	v(37.257348,53.570926,-39.116385);
+	v(37.257348,50.753116,-15.509248);
+	v(37.257348,79.097935,-1.020181);
+	v(37.257348,50.753116,-24.462756);
+	v(37.257348,50.753116,-15.509248);
+	v(37.257348,44.989857,-15.509248);
+	v(37.257348,53.570926,-26.939256);
+	v(37.257348,61.952930,-1.020181);
+	v(37.257348,44.989857,-15.509248);
+	v(37.257348,20.233402,-39.116385);
+	v(37.257348,53.570926,-39.116385);
+	v(37.257348,61.241764,-26.939256);
+	v(37.257348,20.233402,4.694823);
+	v(37.257348,61.241764,-35.115882);
+	v(37.257348,61.241764,-35.115882);
+	v(37.257348,79.097935,-35.115882);
+	v(37.257348,44.989857,-26.939256);
+	v(37.257348,67.659382,-26.939256);
+	v(37.257348,61.952930,4.694823);
+	v(37.257348,79.097935,-1.020181);
+	v(37.257348,20.233402,-39.116385);
+	v(37.257348,79.097935,-35.115882);
+	v(37.257348,61.611622,-15.509248);
+	v(37.257348,61.952930,-1.020181);
+	v(37.257348,61.611622,-24.462756);
+	v(37.257348,44.989857,-26.939256);
+	v(37.257348,61.611622,-15.509248);
+	v(37.257348,67.659382,-15.509248);
+	v(37.257348,53.570926,-26.939256);
+	v(37.257348,61.952930,4.694823);
+	v(37.257348,20.233402,4.694823);
+	v(37.257348,67.659382,-15.509248);
+	v(-27.542685,44.989857,-15.509244);
+	v(-27.542692,53.570926,-39.116381);
+	v(-27.542685,61.241764,-26.939254);
+	v(-27.542685,61.241764,-35.115878);
+	v(-27.542685,67.659382,-26.939254);
+	v(-27.542685,79.097935,-1.020177);
+	v(-27.542692,20.233402,-39.116381);
+	v(-27.542685,79.097935,-35.115878);
+	v(-27.542685,61.952930,-1.020177);
+	v(-27.542685,44.989857,-26.939254);
+	v(-27.542685,53.570926,-26.939254);
+	v(-27.542685,61.952930,4.694831);
+	v(-27.542685,20.233402,4.694831);
+	v(-27.542685,67.659382,-15.509244);
+	v(-27.542685,50.753116,-24.462754);
+	v(-27.542685,50.753116,-15.509244);
+	v(-27.542685,61.611622,-24.462754);
+	v(-27.542685,61.611622,-15.509244);
+	v(34.468677,-55.066498,14.312476);
+	v(16.484316,-9.182568,-24.110869);
+	v(41.470354,-70.959412,-13.341611);
+	v(3.000002,-46.092579,-24.118193);
+	v(21.472268,-55.066498,19.479774);
+	v(3.000002,7.112095,34.589812);
+	v(-36.457075,79.297809,21.396037);
+	v(21.401139,-71.230908,-13.309886);
+	v(21.472266,-70.959412,-24.110869);
+	v(21.472266,-63.185120,-24.110869);
+	v(21.501307,-77.784622,19.502601);
+	v(3.000002,-26.782498,-38.690873);
+	v(21.472268,-77.986283,14.312476);
+	v(41.470354,-70.959412,-24.110871);
+	v(3.000002,-54.034214,-24.110862);
+	v(21.362648,-62.854984,19.868709);
+	v(41.470354,-55.066498,19.479774);
+	v(3.000002,-39.924183,-24.110862);
+	v(3.000002,31.895603,7.662685);
+	v(20.827307,-113.020176,-34.652993);
+	v(21.453468,-83.012158,14.312476);
+	v(20.827309,-113.020176,14.312476);
+	v(21.469483,-45.942105,-10.707478);
+	v(34.468677,-55.066498,4.563728);
+	v(42.457082,30.057422,-6.813527);
+	v(42.457082,30.057422,-26.915063);
+	v(42.457082,13.200306,6.045879);
+	v(42.457082,24.791035,-6.813527);
+	v(42.457082,57.524540,7.662685);
+	v(42.457082,55.732090,29.017844);
+	v(42.457082,24.791035,7.662685);
+	v(3.000002,30.057407,-6.813523);
+	v(3.000002,-63.185112,-24.110862);
+	v(47.543985,83.939030,7.662685);
+	v(28.584088,83.939030,7.662685);
+	v(34.468676,-9.182568,-24.110871);
+	v(16.484316,-40.123699,-23.735415);
+	v(34.468676,15.364780,-26.915063);
+	v(29.274447,15.364780,-26.915063);
+	v(29.274416,20.145328,-26.915055);
+	v(47.543985,57.524540,7.662685);
+	v(47.543985,57.524540,21.396033);
+	v(47.543985,83.939030,16.754829);
+	v(34.468676,-9.182568,-38.690888);
+	v(16.484314,-9.182568,-38.690888);
+	v(34.468676,15.364780,-38.690888);
+	v(29.274416,20.145328,-34.854970);
+	v(42.457082,57.524540,21.396033);
+	v(3.000002,-54.812180,19.719619);
+	v(3.000002,7.112095,12.759463);
+	v(34.468677,-18.514630,4.563728);
+	v(3.000002,-46.086453,-10.714803);
+	v(3.000002,24.791019,-6.813523);
+	v(41.470354,-55.066498,4.563724);
+	v(34.468677,-55.066498,10.323100);
+	v(41.470354,-18.514630,4.563724);
+	v(34.468677,-18.514630,-2.865578);
+	v(34.468676,-40.070996,-24.110871);
+	v(3.000002,20.145313,-26.915046);
+	v(16.484316,-39.924191,-26.072566);
+	v(16.484314,-26.782505,-38.690888);
+	v(16.484316,-26.782505,-24.110869);
+	v(21.469483,-54.028092,-10.707478);
+	v(3.000002,24.791019,7.662685);
+	v(3.000002,15.364765,-38.690873);
+	v(41.470354,-40.070996,-24.110871);
+	v(29.274447,15.364780,-34.854970);
+	v(41.470354,-18.514630,-2.865578);
+	v(3.000002,-9.182575,-38.690873);
+	v(21.472266,-54.034222,-24.110869);
+	v(21.472266,-45.948231,-24.110869);
+	v(3.000002,31.895603,34.589812);
+	v(41.499392,-77.784622,19.502601);
+	v(42.457082,66.104038,34.589820);
+	v(41.470354,-77.986283,14.312476);
+	v(3.000002,-39.924183,-26.072558);
+	v(3.000002,-54.034218,-11.057626);
+	v(20.827307,-104.236492,-34.652993);
+	v(41.470354,-113.020176,-34.652993);
+	v(41.470354,-113.020176,14.312476);
+	v(41.470354,-83.012158,-13.341611);
+	v(41.470354,-104.236492,-34.652993);
+	v(20.827309,-83.012158,-13.341609);
+	v(34.468677,13.200306,6.045879);
+	v(34.468677,7.112102,12.862453);
+	v(34.468680,7.112102,34.589820);
+	v(34.468680,13.200306,34.589820);
+	v(42.457082,36.488666,34.589820);
+	v(28.584090,31.895603,34.589820);
+	v(42.457082,13.200306,34.589820);
+	v(34.468677,7.112102,6.045879);
+	v(34.468676,7.112102,-26.915063);
+	v(42.457082,7.112102,6.045879);
+	v(3.000002,-55.066483,14.312476);
+	v(3.000002,30.057407,-26.915053);
+	v(-41.543973,79.297809,21.396037);
+	v(3.000002,-54.028084,-10.707475);
+	v(28.584090,36.488666,34.589820);
+	v(42.457082,36.488666,29.017844);
+	v(28.584090,55.732090,34.589820);
+	v(28.584090,55.732090,29.017844);
+	v(28.584090,36.488666,29.017844);
+	v(28.584088,83.939030,16.754829);
+	v(28.584088,31.895603,7.662685);
+	v(42.457082,7.112102,-26.915063);
+	v(3.000002,-62.600662,20.108558);
+	v(42.457082,55.732090,34.589820);
+	v(28.584090,66.104038,34.589820);
+	v(47.543985,79.297825,21.396033);
+	v(42.457082,79.297825,21.396033);
+	v(-28.468671,-55.066490,14.312476);
+	v(-10.484313,-9.182575,-24.110865);
+	v(-35.470351,-70.959404,-13.341605);
+	v(-15.472262,-55.066490,19.479774);
+	v(-15.401132,-71.230904,-13.309884);
+	v(-15.472265,-70.959404,-24.110865);
+	v(-15.472265,-63.185116,-24.110865);
+	v(-15.501303,-77.784615,19.502601);
+	v(-15.472262,-77.986275,14.312476);
+	v(-35.470351,-70.959404,-24.110864);
+	v(-15.362642,-62.854981,19.868705);
+	v(-35.470351,-55.066490,19.479774);
+	v(-14.827306,-113.020161,-34.652989);
+	v(-14.827303,-113.020161,14.312476);
+	v(-15.469476,-45.942097,-10.707475);
+	v(-28.468671,-55.066490,4.563728);
+	v(-36.457075,30.057407,-6.813523);
+	v(-36.457075,30.057407,-26.915055);
+	v(-36.457075,13.200306,6.045882);
+	v(-36.457075,24.791035,-6.813523);
+	v(-36.457075,57.524540,7.662688);
+	v(-36.457075,55.732090,29.017844);
+	v(-36.457075,24.791035,7.662688);
+	v(-41.543973,83.938999,7.662688);
+	v(-22.584081,83.938999,7.662688);
+	v(-28.468671,-9.182575,-24.110864);
+	v(-10.484313,-40.123692,-23.735411);
+	v(-28.468671,15.364765,-26.915055);
+	v(-23.274442,15.364765,-26.915055);
+	v(-23.274412,20.145328,-26.915047);
+	v(-41.543973,57.524540,7.662688);
+	v(-41.543973,57.524540,21.396037);
+	v(-41.543973,83.938999,16.754829);
+	v(-28.468671,-9.182575,-38.690881);
+	v(-10.484313,-9.182575,-38.690881);
+	v(-28.468671,15.364765,-38.690881);
+	v(-23.274412,20.145328,-34.854962);
+	v(-36.457075,57.524540,21.396037);
+	v(-28.468671,-18.514630,4.563728);
+	v(-35.470351,-55.066490,4.563728);
+	v(-35.470351,-18.514630,4.563728);
+	v(-28.468671,-18.514630,-2.865575);
+	v(-28.468671,-40.070996,-24.110864);
+	v(-10.484313,-39.924191,-26.072562);
+	v(-10.484313,-26.782498,-38.690881);
+	v(-10.484313,-26.782498,-24.110865);
+	v(-15.469476,-54.028088,-10.707475);
+	v(-35.470351,-40.070996,-24.110864);
+	v(-23.274442,15.364765,-34.854962);
+	v(-35.470351,-18.514630,-2.865575);
+	v(-15.472265,-54.034218,-24.110865);
+	v(-15.472265,-45.948231,-24.110865);
+	v(-35.499388,-77.784615,19.502601);
+	v(-36.457075,66.104023,34.589820);
+	v(-35.470351,-77.986275,14.312476);
+	v(-14.827306,-104.236477,-34.652989);
+	v(-35.470351,-113.020161,-34.652989);
+	v(-35.470351,-113.020161,14.312476);
+	v(-35.470351,-83.012150,-13.341605);
+	v(-35.470351,-104.236477,-34.652989);
+	v(-14.827303,-83.012150,-13.341607);
+	v(-28.468671,13.200306,6.045882);
+	v(-28.468671,7.112102,12.862453);
+	v(-28.468671,7.112102,34.589820);
+	v(-28.468671,13.200306,34.589820);
+	v(-36.457075,36.488651,34.589820);
+	v(-22.584077,31.895603,34.589820);
+	v(-36.457075,13.200306,34.589820);
+	v(-28.468671,7.112102,6.045882);
+	v(-28.468671,7.112102,-26.915055);
+	v(-36.457075,7.112102,6.045882);
+	v(-22.584077,36.488651,34.589820);
+	v(-36.457075,36.488651,29.017844);
+	v(-22.584077,55.732090,34.589820);
+	v(-22.584077,55.732090,29.017844);
+	v(-22.584077,36.488651,29.017844);
+	v(-22.584081,83.938999,16.754829);
+	v(-22.584081,31.895603,7.662688);
+	v(-36.457075,7.112102,-26.915055);
+	v(-36.457075,55.732090,34.589820);
+	v(-22.584077,66.104023,34.589820);
+	v(34.468677,-55.066498,14.312476);
+	v(16.484316,-9.182568,-24.110869);
+	v(41.470354,-70.959412,-13.341611);
+	v(3.000002,-46.092579,-24.118193);
+	v(21.472268,-55.066498,19.479774);
+	v(3.000002,7.112095,34.589812);
+	v(3.000002,20.145313,-34.854955);
+	v(21.401139,-71.230908,-13.309886);
+	v(21.472266,-70.959412,-24.110869);
+	v(21.472266,-63.185120,-24.110869);
+	v(21.501307,-77.784622,19.502601);
+	v(3.000002,-26.782498,-38.690873);
+	v(21.472268,-77.986283,14.312476);
+	v(41.470354,-70.959412,-24.110871);
+	v(3.000002,-54.034214,-24.110862);
+	v(21.362648,-62.854984,19.868709);
+	v(41.470354,-55.066498,19.479774);
+	v(3.000002,-39.924183,-24.110862);
+	v(3.000002,31.895603,7.662685);
+	v(20.827307,-113.020176,-34.652993);
+	v(21.453468,-83.012158,14.312476);
+	v(20.827309,-113.020176,14.312476);
+	v(21.469483,-45.942105,-10.707478);
+	v(34.468677,-55.066498,4.563728);
+	v(42.457082,30.057422,-6.813527);
+	v(42.457082,30.057422,-26.915063);
+	v(42.457082,13.200306,6.045879);
+	v(42.457082,24.791035,-6.813527);
+	v(42.457082,57.524540,7.662685);
+	v(42.457082,55.732090,29.017844);
+	v(42.457082,24.791035,7.662685);
+	v(3.000002,30.057407,-6.813523);
+	v(3.000002,-63.185112,-24.110862);
+	v(47.543985,83.939030,7.662685);
+	v(28.584088,83.939030,7.662685);
+	v(34.468676,-9.182568,-24.110871);
+	v(16.484316,-39.924191,-24.110869);
+	v(34.468676,15.364780,-26.915063);
+	v(29.274447,15.364780,-26.915063);
+	v(29.274416,20.145328,-26.915055);
+	v(47.543985,57.524540,7.662685);
+	v(47.543985,57.524540,21.396033);
+	v(47.543985,83.939030,16.754829);
+	v(34.468676,-9.182568,-38.690888);
+	v(16.484314,-9.182568,-38.690888);
+	v(34.468676,15.364780,-38.690888);
+	v(29.274416,20.145328,-34.854970);
+	v(42.457082,57.524540,21.396033);
+	v(3.000002,-54.812180,19.719619);
+	v(3.000002,7.112095,12.759463);
+	v(34.468677,-18.514630,4.563728);
+	v(3.000002,-46.086453,-10.714803);
+	v(3.000002,24.791019,-6.813523);
+	v(41.470354,-55.066498,4.563724);
+	v(34.468677,-55.066498,10.323100);
+	v(41.470354,-18.514630,4.563724);
+	v(34.468677,-18.514630,-2.865578);
+	v(34.468676,-40.070996,-24.110871);
+	v(3.000002,20.145313,-26.915046);
+	v(16.484316,-39.924191,-26.072566);
+	v(16.484314,-26.782505,-38.690888);
+	v(16.484316,-26.782505,-24.110869);
+	v(21.469483,-54.028092,-10.707478);
+	v(3.000002,24.791019,7.662685);
+	v(3.000002,15.364765,-38.690873);
+	v(41.470354,-40.070996,-24.110871);
+	v(29.274447,15.364780,-34.854970);
+	v(41.470354,-18.514630,-2.865578);
+	v(3.000002,-9.182575,-38.690873);
+	v(21.472266,-54.034222,-24.110869);
+	v(21.472266,-45.948231,-24.110869);
+	v(3.000002,31.895603,34.589812);
+	v(41.499392,-77.784622,19.502601);
+	v(42.457082,66.104038,34.589820);
+	v(41.470354,-77.986283,14.312476);
+	v(3.000002,-39.924183,-26.072558);
+	v(3.000002,-54.034218,-11.057626);
+	v(20.827307,-104.236492,-34.652993);
+	v(41.470354,-113.020176,-34.652993);
+	v(41.470354,-113.020176,14.312476);
+	v(41.470354,-83.012158,-13.341611);
+	v(41.470354,-104.236492,-34.652993);
+	v(20.827309,-83.012158,-13.341609);
+	v(34.468677,13.200306,6.045879);
+	v(34.468677,7.112102,12.862453);
+	v(34.468680,7.112102,34.589820);
+	v(34.468680,13.200306,34.589820);
+	v(42.457082,36.488666,34.589820);
+	v(28.584090,31.895603,34.589820);
+	v(42.457082,13.200306,34.589820);
+	v(34.468677,7.112102,6.045879);
+	v(34.468676,7.112102,-26.915063);
+	v(42.457082,7.112102,6.045879);
+	v(3.000002,-55.066483,14.312476);
+	v(3.000002,30.057407,-26.915053);
+	v(3.000002,15.364765,-34.854955);
+	v(3.000002,-54.028084,-10.707475);
+	v(28.584090,36.488666,34.589820);
+	v(42.457082,36.488666,29.017844);
+	v(28.584090,55.732090,34.589820);
+	v(28.584090,55.732090,29.017844);
+	v(28.584090,36.488666,29.017844);
+	v(28.584088,83.939030,16.754829);
+	v(28.584088,31.895603,7.662685);
+	v(42.457082,7.112102,-26.915063);
+	v(3.000002,-62.600662,20.108558);
+	v(42.457082,55.732090,34.589820);
+	v(28.584090,66.104038,34.589820);
+	v(47.543985,79.297825,21.396033);
+	v(42.457082,79.297825,21.396033);
+	v(-28.468671,-55.066490,14.312476);
+	v(-10.484313,-9.182575,-24.110865);
+	v(-35.470351,-70.959404,-13.341605);
+	v(-15.472262,-55.066490,19.479774);
+	v(-15.401132,-71.230904,-13.309884);
+	v(-15.472265,-70.959404,-24.110865);
+	v(-15.472265,-63.185116,-24.110865);
+	v(-15.501303,-77.784615,19.502601);
+	v(-15.472262,-77.986275,14.312476);
+	v(-35.470351,-70.959404,-24.110864);
+	v(-15.362642,-62.854981,19.868705);
+	v(-35.470351,-55.066490,19.479774);
+	v(-14.827306,-113.020161,-34.652989);
+	v(-14.827303,-113.020161,14.312476);
+	v(-15.469476,-45.942097,-10.707475);
+	v(-28.468671,-55.066490,4.563728);
+	v(-36.457075,30.057407,-6.813523);
+	v(-36.457075,30.057407,-26.915055);
+	v(-36.457075,13.200306,6.045882);
+	v(-36.457075,24.791035,-6.813523);
+	v(-36.457075,57.524540,7.662688);
+	v(-36.457075,55.732090,29.017844);
+	v(-36.457075,24.791035,7.662688);
+	v(-41.543973,83.938999,7.662688);
+	v(-22.584081,83.938999,7.662688);
+	v(-28.468671,-9.182575,-24.110864);
+	v(-10.484313,-39.924191,-24.110865);
+	v(-28.468671,15.364765,-26.915055);
+	v(-23.274442,15.364765,-26.915055);
+	v(-23.274412,20.145328,-26.915047);
+	v(-41.543973,57.524540,7.662688);
+	v(-41.543973,57.524540,21.396037);
+	v(-41.543973,83.938999,16.754829);
+	v(-28.468671,-9.182575,-38.690881);
+	v(-10.484313,-9.182575,-38.690881);
+	v(-28.468671,15.364765,-38.690881);
+	v(-23.274412,20.145328,-34.854962);
+	v(-36.457075,57.524540,21.396037);
+	v(-28.468671,-18.514630,4.563728);
+	v(-35.470351,-55.066490,4.563728);
+	v(-35.470351,-18.514630,4.563728);
+	v(-28.468671,-18.514630,-2.865575);
+	v(-28.468671,-40.070996,-24.110864);
+	v(-10.484313,-39.924191,-26.072562);
+	v(-10.484313,-26.782498,-38.690881);
+	v(-10.484313,-26.782498,-24.110865);
+	v(-15.469476,-54.028088,-10.707475);
+	v(-35.470351,-40.070996,-24.110864);
+	v(-23.274442,15.364765,-34.854962);
+	v(-35.470351,-18.514630,-2.865575);
+	v(-15.472265,-54.034218,-24.110865);
+	v(-15.472265,-45.948231,-24.110865);
+	v(-35.499388,-77.784615,19.502601);
+	v(-36.457075,66.104023,34.589820);
+	v(-35.470351,-77.986275,14.312476);
+	v(-14.827306,-104.236477,-34.652989);
+	v(-35.470351,-113.020161,-34.652989);
+	v(-35.470351,-113.020161,14.312476);
+	v(-35.470351,-83.012150,-13.341605);
+	v(-35.470351,-104.236477,-34.652989);
+	v(-14.827303,-83.012150,-13.341607);
+	v(-28.468671,13.200306,6.045882);
+	v(-28.468671,7.112102,12.862453);
+	v(-28.468671,7.112102,34.589820);
+	v(-28.468671,13.200306,34.589820);
+	v(-36.457075,36.488651,34.589820);
+	v(-22.584077,31.895603,34.589820);
+	v(-36.457075,13.200306,34.589820);
+	v(-28.468671,7.112102,6.045882);
+	v(-28.468671,7.112102,-26.915055);
+	v(-36.457075,7.112102,6.045882);
+	v(-22.584077,36.488651,34.589820);
+	v(-36.457075,36.488651,29.017844);
+	v(-22.584077,55.732090,34.589820);
+	v(-22.584077,55.732090,29.017844);
+	v(-22.584077,36.488651,29.017844);
+	v(-22.584081,83.938999,16.754829);
+	v(-22.584081,31.895603,7.662688);
+	v(-36.457075,7.112102,-26.915055);
+	v(-36.457075,55.732090,34.589820);
+	v(-22.584077,66.104023,34.589820);
+	v(-41.543973,79.297809,21.396037);
+	v(-36.457075,79.297809,21.396037);
+	v(34.217585,7.112102,12.862453);
+	v(34.468677,7.112102,12.862453);
+	v(34.468677,7.112102,12.654716);
+	v(41.470354,-70.959412,14.312476);
+	v(41.470354,-55.066498,14.312476);
+	v(34.468677,-70.959412,14.312476);
+	v(34.468677,-55.066498,14.312476);
+	v(34.468677,-70.959412,14.312476);
+	v(34.468677,-55.066498,14.312476);
+	v(21.472268,-70.959412,14.312476);
+	v(21.472268,-55.066498,14.312476);
+	v(21.472268,-63.185120,14.312476);
+	v(41.470354,-77.986283,14.312476);
+	v(41.470354,-70.959412,14.312476);
+	v(21.472268,-77.986283,14.312476);
+	v(34.468677,-70.959412,14.312476);
+	v(21.472268,-70.959412,14.312476);
+	v(34.468677,-70.959412,14.312476);
+	v(41.470354,-70.959412,14.312476);
+	v(34.468677,-70.959412,-13.341611);
+	v(41.470354,-70.959412,-13.341611);
+	v(28.248036,-55.066498,19.479774);
+	v(21.472268,-55.066498,19.479774);
+	v(34.468677,-55.066498,14.312476);
+	v(21.472268,-55.066498,14.312476);
+	v(21.472268,-70.959412,14.312476);
+	v(21.472268,-70.959412,-13.341609);
+	v(21.472268,-70.959412,14.312476);
+	v(21.472268,-63.185120,14.312476);
+	v(20.827309,-70.959412,14.312476);
+	v(20.827309,-63.185120,14.312476);
+	v(21.472268,-70.959412,14.312476);
+	v(21.472268,-70.959412,-13.341609);
+	v(21.472268,-63.185120,14.312476);
+	v(21.472266,-70.959412,-24.110869);
+	v(21.472266,-63.185120,-24.110869);
+	v(21.472268,-77.986283,19.479774);
+	v(21.472268,-77.986283,14.312476);
+	v(21.472268,-55.066498,19.479774);
+	v(21.472268,-70.959412,14.312476);
+	v(21.472268,-63.185120,14.312476);
+	v(21.472268,-55.066498,14.312476);
+	v(21.472268,-77.986283,19.479774);
+	v(41.470354,-77.986283,19.479774);
+	v(21.472268,-77.986283,14.312476);
+	v(41.470354,-77.986283,14.312476);
+	v(41.470354,-113.020176,14.312476);
+	v(41.470354,-77.986283,14.312476);
+	v(20.827309,-113.020176,14.312476);
+	v(21.472268,-77.986283,14.312476);
+	v(21.472268,-70.959412,14.312476);
+	v(20.827309,-70.959412,14.312476);
+	v(20.827309,-83.012158,14.312476);
+	v(34.468676,-70.959412,-24.110871);
+	v(41.470354,-70.959412,-24.110871);
+	v(41.470354,-70.959412,-13.341611);
+	v(27.365836,-77.132866,-13.341611);
+	v(34.468677,-70.959412,-13.341611);
+	v(21.472268,-70.959412,-13.341609);
+	v(20.827309,-77.132866,-13.341609);
+	v(20.827309,-70.959412,-13.341609);
+	v(41.470354,-55.066498,19.479774);
+	v(41.470354,-77.986283,19.479774);
+	v(28.248036,-55.066498,19.479774);
+	v(21.472268,-77.986283,19.479774);
+	v(21.472268,-55.066498,19.479774);
+	v(21.472266,-70.959412,-24.110869);
+	v(-0.987218,-63.185120,14.312476);
+	v(20.827309,-63.185120,14.312476);
+	v(-0.987218,-63.185120,-24.110869);
+	v(21.472268,-63.185120,14.312476);
+	v(21.472266,-63.185120,-24.110869);
+	v(20.827307,-113.020176,-34.652993);
+	v(20.827309,-113.020176,14.312476);
+	v(20.827307,-104.236492,-34.652993);
+	v(20.827309,-83.012158,14.312476);
+	v(20.827309,-83.012158,-13.341609);
+	v(41.470354,-113.020176,14.312476);
+	v(20.827309,-113.020176,14.312476);
+	v(41.470354,-113.020176,-34.652993);
+	v(20.827307,-113.020176,-34.652993);
+	v(-0.987218,-70.959412,-10.034249);
+	v(-0.987218,-70.959412,14.312476);
+	v(-0.987218,-63.185120,-24.110869);
+	v(-0.987218,-63.185120,14.312476);
+	v(41.470354,-18.514630,4.563724);
+	v(41.470354,-55.066498,4.563724);
+	v(34.468677,-18.514630,4.563728);
+	v(34.468677,-55.066498,4.563728);
+	v(34.468677,-55.066498,4.563728);
+	v(34.468677,-55.066498,10.323100);
+	v(34.468677,-18.514630,4.563728);
+	v(34.468677,-20.823170,10.323100);
+	v(41.470354,-55.066498,4.563724);
+	v(34.468677,-55.066498,10.323100);
+	v(34.468677,-55.066498,4.563728);
+	v(42.457082,30.057422,-6.813527);
+	v(-35.780379,30.057422,-6.813523);
+	v(42.457082,30.057422,-26.915063);
+	v(-35.780379,30.057422,-26.915059);
+	v(42.457082,7.112102,-26.915063);
+	v(42.457082,7.112102,6.045879);
+	v(42.457082,30.057422,-26.915063);
+	v(42.457082,13.200306,6.045879);
+	v(42.457082,13.200306,34.589820);
+	v(42.457082,24.791035,-6.813527);
+	v(42.457082,30.057422,-6.813527);
+	v(42.457082,24.791035,7.662685);
+	v(42.457082,36.488666,29.017844);
+	v(42.457082,57.524540,7.662685);
+	v(42.457082,56.632572,11.932887);
+	v(42.457082,55.732090,29.017844);
+	v(42.457082,55.732090,34.589820);
+	v(42.457082,66.104038,34.589820);
+	v(42.457082,56.632572,25.811897);
+	v(42.457082,74.881962,25.811897);
+	v(42.457082,36.488666,34.589820);
+	v(-32.272260,14.072880,-26.915059);
+	v(-32.272260,17.466770,-26.915059);
+	v(-35.780379,13.273014,-26.915059);
+	v(42.457082,7.112102,-26.915063);
+	v(42.457082,30.057422,-26.915063);
+	v(34.468676,7.112102,-26.915063);
+	v(34.468676,15.364780,-26.915063);
+	v(29.274447,20.145328,-26.915063);
+	v(-35.780379,30.057422,-26.915059);
+	v(29.274447,15.364780,-26.915063);
+	v(-20.203195,20.145328,-26.915059);
+	v(42.457082,24.791035,7.662685);
+	v(24.379296,24.791035,7.662685);
+	v(42.457082,24.791035,-6.813527);
+	v(42.457082,57.524540,7.662685);
+	v(28.584088,31.895603,7.662685);
+	v(42.457082,24.791035,7.662685);
+	v(24.379296,24.791035,7.662685);
+	v(24.379296,25.896381,7.662685);
+	v(-21.027670,31.895603,7.662688);
+	v(-35.780379,25.896381,7.662688);
+	v(-21.027670,83.919864,7.662688);
+	v(-35.780379,83.919864,7.662688);
+	v(-35.780379,57.566257,7.662688);
+	v(47.543985,57.524540,7.662685);
+	v(47.543985,83.939030,7.662685);
+	v(28.584088,83.939030,7.662685);
+	v(42.457082,36.488666,34.589820);
+	v(36.086913,36.488666,34.589820);
+	v(42.457082,36.488666,29.017844);
+	v(34.468676,7.112102,-38.690888);
+	v(34.468676,7.112102,-26.915063);
+	v(34.468676,15.364780,-38.690888);
+	v(34.468676,15.364780,-26.915063);
+	v(34.468676,15.364780,-26.915063);
+	v(29.274447,15.364780,-26.915063);
+	v(34.468676,15.364780,-38.690888);
+	v(29.274447,15.364780,-34.854970);
+	v(-20.203195,15.364780,-34.854970);
+	v(-26.606069,15.364780,-30.642693);
+	v(-26.606069,15.364780,-38.690888);
+	v(29.274447,15.364780,-34.854970);
+	v(29.274447,15.364780,-26.915063);
+	v(29.274447,20.145328,-34.854970);
+	v(29.274447,20.145328,-26.915063);
+	v(29.274447,20.145328,-26.915063);
+	v(-20.203195,20.145328,-26.915059);
+	v(29.274447,20.145328,-34.854970);
+	v(-20.203195,20.145328,-34.854970);
+	v(47.543985,57.524540,7.662685);
+	v(47.543985,57.524540,21.396033);
+	v(47.543985,83.939030,7.662685);
+	v(47.543985,79.297825,21.396033);
+	v(47.543985,83.939030,16.754829);
+	v(-35.780379,57.566257,7.662688);
+	v(-35.780379,83.919864,7.662688);
+	v(-41.543981,57.566257,7.662688);
+	v(-41.543981,83.919864,7.662688);
+	v(-21.027670,83.919864,12.439471);
+	v(-35.780379,83.919864,12.439475);
+	v(-21.027670,83.919864,7.662688);
+	v(-35.780379,83.919864,7.662688);
+	v(-21.027670,31.895603,34.589820);
+	v(-21.027670,36.268787,27.969630);
+	v(-21.027670,31.895603,7.662688);
+	v(-21.027670,83.919864,7.662688);
+	v(-21.027670,68.389744,27.969630);
+	v(-21.027670,83.919864,12.439471);
+	v(-21.027670,36.268787,34.589820);
+	v(-4.761095,31.895603,34.589820);
+	v(-21.027670,31.895603,34.589820);
+	v(28.584088,31.895603,7.662685);
+	v(-21.027670,31.895603,7.662688);
+	v(47.543985,83.939030,16.754829);
+	v(28.584088,83.939030,16.754829);
+	v(47.543985,83.939030,7.662685);
+	v(28.584088,83.939030,7.662685);
+	v(34.468676,-9.182568,-38.690888);
+	v(34.468676,-9.182568,-26.915063);
+	v(34.468676,-9.182568,-38.690888);
+	v(34.468676,7.112102,-38.690888);
+	v(16.484314,-9.182568,-38.690888);
+	v(34.468676,15.364780,-38.690888);
+	v(-26.606069,15.364780,-38.690888);
+	v(-7.371618,-9.182568,-38.690888);
+	v(-26.606069,-9.182568,-38.690888);
+	v(-26.606069,7.112102,-38.690888);
+	v(29.274447,15.364780,-34.854970);
+	v(29.274447,20.145328,-34.854970);
+	v(-20.203195,15.364780,-34.854970);
+	v(-20.203195,20.145328,-34.854970);
+	v(-41.543981,83.919864,12.439475);
+	v(-41.543981,83.919864,7.662688);
+	v(-21.027670,36.268787,34.589820);
+	v(-29.608732,36.268787,34.589820);
+	v(-21.027670,36.268787,27.969630);
+	v(34.468676,-9.182568,-26.915063);
+	v(34.468676,-9.182568,-24.110871);
+	v(34.468676,7.112102,-26.915063);
+	v(34.468677,-9.182568,0.653793);
+	v(34.468677,-9.182568,12.862453);
+	v(34.468676,4.895229,-20.849463);
+	v(34.468677,7.112102,12.862453);
+	v(34.468677,4.895229,12.654716);
+	v(34.468677,7.112102,12.654716);
+	v(16.484314,-26.782505,-38.690888);
+	v(-7.371618,-26.782505,-38.690888);
+	v(34.468676,-40.070996,-24.110871);
+	v(34.468677,-18.514630,-2.865578);
+	v(34.468676,-9.182568,-24.110871);
+	v(34.468677,-18.514630,4.563728);
+	v(34.468677,-12.348324,0.653793);
+	v(34.468677,-9.182568,0.653793);
+	v(34.468677,-55.066498,10.323100);
+	v(34.468677,-55.066498,14.312476);
+	v(34.468677,-20.823170,10.323100);
+	v(34.468677,-12.348324,14.312476);
+	v(16.484316,-39.924191,-26.072566);
+	v(16.484314,-26.782505,-38.690888);
+	v(-7.371618,-39.924191,-26.072566);
+	v(-7.371618,-33.353352,-32.381726);
+	v(-7.371618,-26.782505,-38.690888);
+	v(16.484314,-26.782505,-38.690888);
+	v(16.484316,-26.782505,-24.110869);
+	v(16.484314,-9.182568,-38.690888);
+	v(16.484316,-14.687344,-25.686597);
+	v(16.484316,-14.687344,-24.110869);
+	v(41.470354,-55.066498,14.312476);
+	v(34.468677,-55.066498,14.312476);
+	v(41.470354,-55.066498,4.563724);
+	v(34.468677,-55.066498,10.323100);
+	v(41.470354,-18.514630,4.563724);
+	v(34.468677,-18.514630,4.563728);
+	v(41.470354,-18.514630,-2.865578);
+	v(34.468677,-18.514630,-2.865578);
+	v(41.470354,-18.514630,-2.865578);
+	v(34.468677,-18.514630,-2.865578);
+	v(41.470354,-40.070996,-24.110871);
+	v(34.468676,-40.070996,-24.110871);
+	v(34.468676,-40.070996,-24.110871);
+	v(34.468676,-9.182568,-24.110871);
+	v(21.472266,-40.070996,-24.110869);
+	v(21.472266,-13.160610,-24.110869);
+	v(16.484316,-39.924191,-26.072566);
+	v(16.484316,-39.924191,-24.110869);
+	v(16.484314,-26.782505,-38.690888);
+	v(16.484316,-26.782505,-24.110869);
+	v(21.472266,-13.160610,-24.110869);
+	v(16.484316,-39.924191,-24.110869);
+	v(21.472266,-40.070996,-24.110869);
+	v(16.071385,-40.070996,-24.110869);
+	v(16.484316,-26.782505,-24.110869);
+	v(16.484316,-14.687344,-24.110869);
+	v(41.470354,-55.066498,19.479774);
+	v(28.248036,-55.066498,19.479774);
+	v(41.470354,-70.959412,-24.110871);
+	v(41.470354,-70.959412,-13.341611);
+	v(41.470354,-40.070996,-24.110871);
+	v(41.470354,-70.959412,14.312476);
+	v(41.470354,-55.066498,4.563724);
+	v(41.470354,-18.514630,4.563724);
+	v(41.470354,-18.514630,-2.865578);
+	v(41.470354,-55.066498,14.312476);
+	v(41.470354,-70.959412,-24.110871);
+	v(41.470354,-40.070996,-24.110871);
+	v(34.468676,-70.959412,-24.110871);
+	v(21.472266,-70.959412,-24.110869);
+	v(21.472266,-63.185120,-24.110869);
+	v(21.472266,-54.034222,-24.110869);
+	v(21.472266,-45.948231,-24.110869);
+	v(21.472266,-45.948231,-24.110869);
+	v(21.472266,-40.070996,-24.110869);
+	v(-0.987218,-45.948231,-24.110869);
+	v(13.768538,-40.889675,-24.110869);
+	v(16.071385,-40.070996,-24.110869);
+	v(-0.987218,-40.889675,-24.110869);
+	v(41.470354,-77.986283,14.312476);
+	v(41.470354,-77.986283,19.479774);
+	v(41.470354,-70.959412,14.312476);
+	v(41.470354,-55.066498,19.479774);
+	v(41.470354,-55.066498,14.312476);
+	v(41.470354,-113.020176,14.312476);
+	v(41.470354,-113.020176,-34.652993);
+	v(41.470354,-77.986283,14.312476);
+	v(41.470354,-104.236492,-34.652993);
+	v(41.470354,-83.012158,-13.341611);
+	v(41.470354,-70.959412,-13.341611);
+	v(41.470354,-70.959412,14.312476);
+	v(41.470354,-70.959412,-13.341611);
+	v(41.470354,-83.012158,-13.341611);
+	v(27.365836,-77.132866,-13.341611);
+	v(20.827309,-83.012158,-13.341609);
+	v(20.827309,-77.132866,-13.341609);
+	v(20.827309,-83.012158,-13.341609);
+	v(41.470354,-83.012158,-13.341611);
+	v(20.827307,-104.236492,-34.652993);
+	v(41.470354,-104.236492,-34.652993);
+	v(41.470354,-104.236492,-34.652993);
+	v(41.470354,-113.020176,-34.652993);
+	v(20.827307,-104.236492,-34.652993);
+	v(20.827307,-113.020176,-34.652993);
+	v(41.470354,-70.959412,-13.341611);
+	v(41.470354,-77.986283,14.312476);
+	v(41.470354,-70.959412,14.312476);
+	v(41.470354,-83.012158,-13.341611);
+	v(41.470354,-104.236492,-34.652993);
+	v(41.470354,-113.020176,-34.652993);
+	v(41.470354,-113.020176,14.312476);
+	v(-0.987218,-63.185120,-24.110869);
+	v(-0.987218,-54.034222,-24.110869);
+	v(-0.987218,-70.959412,-24.110869);
+	v(-0.987218,-63.185120,-24.110869);
+	v(-23.446706,-70.959412,-24.110867);
+	v(-0.987218,-54.034222,-24.110869);
+	v(-0.987218,-45.948231,-24.110869);
+	v(-0.987218,-40.889675,-24.110869);
+	v(-10.214254,-40.889675,-24.110869);
+	v(-12.373908,-40.070996,-24.110869);
+	v(-23.446706,-40.070996,-24.110867);
+	v(20.827309,-83.012158,-13.341609);
+	v(27.365836,-77.132866,-13.341611);
+	v(20.827309,-77.132866,-13.341609);
+	v(41.470354,-83.012158,-13.341611);
+	v(41.470354,-70.959412,-13.341611);
+	v(41.470354,-83.012158,-13.341611);
+	v(20.827307,-104.236492,-34.652993);
+	v(41.470354,-104.236492,-34.652993);
+	v(20.827309,-83.012158,-13.341609);
+	v(41.470354,-113.020176,-34.652993);
+	v(20.827307,-104.236492,-34.652993);
+	v(20.827307,-113.020176,-34.652993);
+	v(41.470354,-104.236492,-34.652993);
+	v(-0.987218,-54.034222,-8.124444);
+	v(-0.987218,-54.034222,-24.110869);
+	v(-0.327269,-54.034222,-8.124444);
+	v(21.472266,-54.034222,-24.110869);
+	v(-23.446706,-40.070996,-24.110867);
+	v(-12.373908,-40.070996,-24.110869);
+	v(-23.446706,-35.873516,-24.110867);
+	v(-0.987218,-54.034222,-24.110869);
+	v(-0.987218,-54.034222,-8.124444);
+	v(-0.987218,-45.948231,-24.110869);
+	v(-0.987218,-70.959412,-24.110869);
+	v(-0.987218,-70.959412,-10.034249);
+	v(-0.987218,-63.185120,-24.110869);
+	v(-35.780379,7.112102,44.639861);
+	v(-35.780379,7.112102,34.589820);
+	v(-35.780379,13.200306,44.639861);
+	v(-35.780379,13.200306,34.589820);
+	v(-35.780379,7.112102,34.589820);
+	v(-35.780379,7.112102,6.045882);
+	v(-35.780379,13.200306,34.589820);
+	v(-35.780379,13.200306,6.045882);
+	v(34.468680,13.200306,34.589820);
+	v(34.468680,7.112102,34.589820);
+	v(-35.780379,13.200306,34.589820);
+	v(-35.780379,7.112102,34.589820);
+	v(-35.780379,7.112102,6.045882);
+	v(-35.780379,7.112102,-26.915059);
+	v(-35.780379,13.200306,6.045882);
+	v(-35.780379,13.273014,-26.915059);
+	v(-35.780379,36.268787,27.969630);
+	v(-35.780379,57.566257,12.439475);
+	v(-35.780379,68.389744,27.969630);
+	v(-35.780379,83.919864,12.439475);
+	v(-35.780379,13.200306,34.589820);
+	v(-35.780379,36.268787,34.589820);
+	v(-35.780379,24.791035,7.662688);
+	v(-35.780379,25.896381,7.662688);
+	v(-35.780379,57.566257,7.662688);
+	v(-35.780379,30.057422,-26.915059);
+	v(-35.780379,24.791035,-6.813523);
+	v(-35.780379,30.057422,-6.813523);
+	v(34.468680,13.200306,34.589820);
+	v(-35.780379,13.200306,34.589820);
+	v(34.468677,13.200306,6.045879);
+	v(-35.780379,13.200306,6.045882);
+	v(34.468677,13.200306,6.045879);
+	v(34.468677,7.112102,6.045879);
+	v(-35.780379,13.200306,6.045882);
+	v(-26.606069,7.112102,6.045882);
+	v(-35.780379,7.112102,6.045882);
+	v(34.468680,7.112102,34.589820);
+	v(-26.606069,7.112102,12.862453);
+	v(-35.780379,7.112102,34.589820);
+	v(-35.780379,7.112102,6.045882);
+	v(-26.606069,7.112102,12.654720);
+	v(-26.606069,7.112102,6.045882);
+	v(34.468677,7.112102,12.862453);
+	v(34.217585,7.112102,12.862453);
+	v(34.468677,7.112102,6.045879);
+	v(34.468677,7.112102,12.654716);
+	v(34.468677,13.200306,6.045879);
+	v(34.468677,7.112102,12.862453);
+	v(34.468680,7.112102,34.589820);
+	v(34.468680,13.200306,34.589820);
+	v(-21.027670,36.268787,34.589820);
+	v(-21.027670,31.895603,34.589820);
+	v(-29.608732,36.268787,34.589820);
+	v(42.457082,36.488666,34.589820);
+	v(42.457082,13.200306,34.589820);
+	v(36.086913,36.488666,34.589820);
+	v(28.584090,36.488666,34.589820);
+	v(28.584090,31.895603,34.589820);
+	v(-4.761095,31.895603,34.589820);
+	v(-35.780379,36.268787,34.589820);
+	v(-35.780379,7.112102,-26.915059);
+	v(-26.606069,7.112102,-26.915059);
+	v(-29.608732,36.268787,34.589820);
+	v(-35.780379,36.268787,34.589820);
+	v(-21.027670,36.268787,27.969630);
+	v(-35.780379,36.268787,27.969630);
+	v(-21.027670,68.389744,27.969630);
+	v(-21.027670,36.268787,27.969630);
+	v(-35.780379,68.389744,27.969630);
+	v(-35.780379,36.268787,27.969630);
+	v(-21.027670,83.919864,12.439471);
+	v(-21.027670,68.389744,27.969630);
+	v(-35.780379,83.919864,12.439475);
+	v(-35.780379,68.389744,27.969630);
+	v(-35.780379,83.919864,12.439475);
+	v(-35.780379,57.566257,12.439475);
+	v(-41.543981,83.919864,12.439475);
+	v(-41.543981,57.566257,12.439475);
+	v(-35.780379,57.566257,12.439475);
+	v(-35.780379,57.566257,7.662688);
+	v(-35.780379,83.919864,12.439475);
+	v(-35.780379,83.919864,7.662688);
+	v(-41.543981,57.566257,12.439475);
+	v(-35.780379,57.566257,12.439475);
+	v(-41.543981,57.566257,7.662688);
+	v(-35.780379,57.566257,7.662688);
+	v(24.379296,24.791035,7.662685);
+	v(24.379296,25.896381,7.662685);
+	v(-35.780379,24.791035,7.662688);
+	v(-35.780379,25.896381,7.662688);
+	v(24.379296,24.791035,7.662685);
+	v(-35.780379,24.791035,7.662688);
+	v(42.457082,24.791035,-6.813527);
+	v(-35.780379,24.791035,-6.813523);
+	v(42.457082,30.057422,-6.813527);
+	v(42.457082,24.791035,-6.813527);
+	v(-35.780379,30.057422,-6.813523);
+	v(-35.780379,24.791035,-6.813523);
+	v(-26.606069,7.112102,-26.915059);
+	v(-26.606069,15.364780,-26.915059);
+	v(-35.780379,7.112102,-26.915059);
+	v(-32.272260,14.072880,-26.915059);
+	v(-35.780379,13.273014,-26.915059);
+	v(-20.203195,15.364780,-26.915059);
+	v(-20.203195,20.145328,-26.915059);
+	v(-32.272260,17.466770,-26.915059);
+	v(42.457082,13.200306,34.589820);
+	v(42.457082,13.200306,6.045879);
+	v(34.468677,7.112102,12.654716);
+	v(-26.606069,7.112102,12.654720);
+	v(34.468677,7.112102,6.045879);
+	v(-26.606069,7.112102,6.045882);
+	v(34.468676,7.112102,-26.915063);
+	v(-26.606069,7.112102,-26.915059);
+	v(42.457082,13.200306,6.045879);
+	v(42.457082,7.112102,6.045879);
+	v(-26.606069,-9.182568,12.862453);
+	v(-26.606069,-9.182568,-24.110867);
+	v(-26.606069,7.112102,12.862453);
+	v(-26.606069,-9.182568,-26.915059);
+	v(-26.606069,7.112102,-26.915059);
+	v(-26.606069,7.112102,12.654720);
+	v(-26.606069,7.112102,6.045882);
+	v(34.217585,7.112102,12.862453);
+	v(-26.606069,7.112102,12.862453);
+	v(34.468677,7.112102,12.862453);
+	v(34.468677,-9.182568,12.862453);
+	v(34.217585,7.112102,12.862453);
+	v(-26.606069,-9.182568,12.862453);
+	v(-26.606069,7.112102,12.862453);
+	v(34.468676,4.895229,-20.849463);
+	v(34.468677,4.895229,12.654716);
+	v(34.468676,7.112102,-26.915063);
+	v(34.468677,7.112102,12.654716);
+	v(34.468677,7.112102,6.045879);
+	v(36.086913,36.488666,34.589820);
+	v(28.584090,36.488666,34.589820);
+	v(42.457082,36.488666,29.017844);
+	v(28.584090,36.488666,29.017844);
+	v(28.584090,55.732090,34.589820);
+	v(28.584090,55.732090,29.017844);
+	v(28.584090,66.104038,34.589820);
+	v(28.584090,31.895603,34.589820);
+	v(28.584088,31.895603,7.662685);
+	v(28.584090,36.488666,34.589820);
+	v(28.584090,36.488666,29.017844);
+	v(28.584088,83.939030,7.662685);
+	v(28.584088,83.939030,16.754829);
+	v(28.584090,31.895603,34.589820);
+	v(-4.761095,31.895603,34.589820);
+	v(28.584088,31.895603,7.662685);
+	v(-41.543981,57.566257,12.439475);
+	v(-41.543981,57.566257,7.662688);
+	v(-41.543981,83.919864,12.439475);
+	v(-41.543981,83.919864,7.662688);
+	v(-20.203195,15.364780,-26.915059);
+	v(-20.203195,15.364780,-34.854970);
+	v(-20.203195,20.145328,-26.915059);
+	v(-20.203195,20.145328,-34.854970);
+	v(29.274447,15.364780,-26.915063);
+	v(29.274447,20.145328,-26.915063);
+	v(-20.203195,15.364780,-26.915059);
+	v(-20.203195,20.145328,-26.915059);
+	v(-20.203195,15.364780,-26.915059);
+	v(-26.606069,15.364780,-26.915059);
+	v(-20.203195,15.364780,-34.854970);
+	v(-26.606069,15.364780,-30.642693);
+	v(-26.606069,7.112102,-38.690888);
+	v(-26.606069,15.364780,-26.915059);
+	v(-26.606069,15.364780,-38.690888);
+	v(-26.606069,15.364780,-30.642693);
+	v(42.457082,7.112102,6.045879);
+	v(42.457082,7.112102,-26.915063);
+	v(34.468676,-9.182568,-26.915063);
+	v(34.468676,7.112102,-26.915063);
+	v(16.484316,-9.182568,-26.915061);
+	v(-26.606069,7.112102,-26.915059);
+	v(-7.371618,-9.182568,-26.915061);
+	v(-26.606069,-9.182568,-26.915059);
+	v(-26.606069,-9.182568,-38.690888);
+	v(-26.606069,-9.182568,-24.110867);
+	v(-23.446706,-9.182568,-24.110867);
+	v(-26.606069,-9.182568,-26.915059);
+	v(-7.371618,-9.182568,-24.110869);
+	v(-7.371618,-9.182568,-26.915061);
+	v(-26.606069,-9.182568,12.862453);
+	v(34.468677,-9.182568,12.862453);
+	v(-26.606069,-9.182568,-24.110867);
+	v(34.468677,-9.182568,0.653793);
+	v(-7.371618,-9.182568,-20.098485);
+	v(-7.371618,-9.182568,-24.110869);
+	v(-23.446706,-9.182568,-24.110867);
+	v(34.468676,-9.182568,-24.110871);
+	v(16.484316,-9.182568,-20.098485);
+	v(16.484316,-9.182568,-24.110869);
+	v(21.472266,-9.182568,-24.110869);
+	v(42.457082,55.732090,29.017844);
+	v(42.457082,36.488666,29.017844);
+	v(28.584090,55.732090,29.017844);
+	v(28.584090,36.488666,29.017844);
+	v(28.584090,55.732090,34.589820);
+	v(42.457082,55.732090,34.589820);
+	v(28.584090,55.732090,29.017844);
+	v(42.457082,55.732090,29.017844);
+	v(42.457082,66.104038,34.589820);
+	v(42.457082,55.732090,34.589820);
+	v(28.584090,66.104038,34.589820);
+	v(28.584090,55.732090,34.589820);
+	v(47.543985,79.297825,21.396033);
+	v(42.457082,79.297825,21.396033);
+	v(47.543985,83.939030,16.754829);
+	v(42.457082,66.104038,34.589820);
+	v(28.584090,66.104038,34.589820);
+	v(42.457082,74.881962,25.811897);
+	v(28.584088,83.939030,16.754829);
+	v(29.274447,15.364780,-26.915063);
+	v(29.274447,15.364780,-34.854970);
+	v(16.484316,-9.182568,-26.915061);
+	v(34.468676,-9.182568,-26.915063);
+	v(16.484314,-9.182568,-38.690888);
+	v(34.468676,-9.182568,-38.690888);
+	v(16.484316,-9.182568,-24.110869);
+	v(21.472266,-9.182568,-24.110869);
+	v(16.484316,-9.182568,-26.915061);
+	v(34.468676,-9.182568,-24.110871);
+	v(34.468676,-9.182568,-26.915063);
+	v(-7.371618,-9.182568,-24.110869);
+	v(-0.987218,-9.182568,-24.110869);
+	v(-7.371618,-9.182568,-26.915061);
+	v(16.484316,-9.182568,-24.110869);
+	v(16.484316,-9.182568,-26.915061);
+	v(-7.371618,-9.182568,-26.915061);
+	v(-7.371618,-9.182568,-32.381726);
+	v(-7.371618,-9.182568,-38.690888);
+	v(-26.606069,-9.182568,-26.915059);
+	v(-26.606069,-9.182568,-38.690888);
+	v(-7.371618,-26.782505,-20.098485);
+	v(-7.371618,-26.782505,-32.381726);
+	v(-7.371618,-9.182568,-20.098485);
+	v(-7.371618,-9.182568,-32.381726);
+	v(-7.371618,-9.182568,-24.110869);
+	v(-7.371618,-9.182568,-26.915061);
+	v(-0.987218,-40.070996,-24.110869);
+	v(-0.987218,-9.182568,-24.110869);
+	v(-12.373908,-40.070996,-24.110869);
+	v(-7.371618,-9.182568,-24.110869);
+	v(-23.446706,-9.182568,-24.110867);
+	v(-23.446706,-35.873516,-24.110867);
+	v(-7.371618,-9.182568,-20.098485);
+	v(16.484316,-9.182568,-20.098485);
+	v(-7.371618,-9.182568,-24.110869);
+	v(16.484316,-9.182568,-24.110869);
+	v(-0.987218,-9.182568,-24.110869);
+	v(16.484316,-9.182568,-20.098485);
+	v(16.484316,-26.782505,-20.098485);
+	v(-7.371618,-9.182568,-20.098485);
+	v(-7.371618,-26.782505,-20.098485);
+	v(16.484316,-14.687344,-25.686597);
+	v(16.484316,-14.687344,-24.110869);
+	v(16.484314,-9.182568,-38.690888);
+	v(16.484316,-26.782505,-24.110869);
+	v(16.484316,-26.782505,-20.098485);
+	v(16.484316,-9.182568,-20.098485);
+	v(16.484316,-9.182568,-26.915061);
+	v(16.484316,-9.182568,-24.110869);
+	v(16.484316,-26.782505,-24.110869);
+	v(16.484316,-14.687344,-24.110869);
+	v(16.484316,-39.924191,-24.110869);
+	v(21.472266,-13.160610,-24.110869);
+	v(21.472266,-9.182568,-24.110869);
+	v(16.484316,-9.182568,-24.110869);
+	v(16.071385,-40.070996,-24.110869);
+	v(-0.987218,-9.182568,-24.110869);
+	v(-0.987218,-40.070996,-24.110869);
+	v(21.472266,-13.160610,-24.110869);
+	v(34.468676,-9.182568,-24.110871);
+	v(21.472266,-9.182568,-24.110869);
+	v(42.457082,56.632572,11.932887);
+	v(42.457082,56.632572,25.811897);
+	v(42.457082,57.524540,7.662685);
+	v(42.457082,57.524540,21.396033);
+	v(42.457082,74.881962,25.811897);
+	v(42.457082,79.297825,21.396033);
+	v(47.543985,79.297825,21.396033);
+	v(47.543985,57.524540,21.396033);
+	v(42.457082,79.297825,21.396033);
+	v(42.457082,57.524540,21.396033);
+	v(-7.371618,-26.782505,-32.381726);
+	v(-7.371618,-26.782505,-38.690888);
+	v(-7.371618,-9.182568,-32.381726);
+	v(-7.371618,-9.182568,-38.690888);
+	v(16.484316,-26.782505,-20.098485);
+	v(-7.371618,-26.782505,-20.098485);
+	v(16.484316,-26.782505,-24.110869);
+	v(-7.371618,-26.782505,-32.381726);
+	v(16.484314,-26.782505,-38.690888);
+	v(-7.371618,-26.782505,-38.690888);
+	v(-7.371618,-39.924191,-20.098485);
+	v(-7.371618,-39.924191,-26.072566);
+	v(-7.371618,-26.782505,-20.098485);
+	v(-7.371618,-33.353352,-32.381726);
+	v(-7.371618,-26.782505,-32.381726);
+	v(-0.987218,-40.889675,-24.110869);
+	v(-0.987218,-40.070996,-24.110869);
+	v(-10.214254,-40.889675,-24.110869);
+	v(-12.373908,-40.070996,-24.110869);
+	v(16.484316,-39.924191,-20.098485);
+	v(-7.371618,-39.924191,-20.098485);
+	v(16.484316,-39.924191,-24.110869);
+	v(16.484316,-39.924191,-20.098485);
+	v(16.484316,-26.782505,-24.110869);
+	v(16.484316,-26.782505,-20.098485);
+	v(16.071385,-40.070996,-24.110869);
+	v(-0.987218,-40.070996,-24.110869);
+	v(13.768538,-40.889675,-24.110869);
+	v(-0.987218,-40.889675,-24.110869);
+	v(42.457082,57.524540,21.396033);
+	v(47.543985,57.524540,21.396033);
+	v(42.457082,57.524540,7.662685);
+	v(47.543985,57.524540,7.662685);
+	v(-7.371618,-26.782505,-32.381726);
+	v(-7.371618,-33.353352,-32.381726);
+	v(-7.371618,-26.782505,-38.690888);
+	v(-7.371618,-39.924191,-20.098485);
+	v(16.484316,-39.924191,-20.098485);
+	v(-7.371618,-39.924191,-26.072566);
+	v(16.484316,-39.924191,-24.110869);
+	v(16.484316,-39.924191,-26.072566);
+	v(37.257348,50.753116,-24.462756);
+	v(37.257348,61.611622,-24.462756);
+	v(-28.655707,50.753116,-24.462754);
+	v(-28.655707,61.611622,-24.462754);
+	v(37.257348,20.233402,-39.116385);
+	v(37.257348,20.233402,4.694823);
+	v(37.257348,53.570926,-39.116385);
+	v(37.257348,44.989857,-26.939256);
+	v(37.257348,53.570926,-26.939256);
+	v(37.257348,50.753116,-24.462756);
+	v(37.257348,50.753116,-15.509248);
+	v(37.257348,61.611622,-24.462756);
+	v(37.257348,61.241764,-35.115882);
+	v(37.257348,61.241764,-26.939256);
+	v(37.257348,79.097935,-35.115882);
+	v(37.257348,67.659382,-26.939256);
+	v(37.257348,67.659382,-15.509248);
+	v(37.257348,61.611622,-15.509248);
+	v(37.257348,61.952930,-1.020181);
+	v(37.257348,79.097935,-1.020181);
+	v(37.257348,61.952930,4.694823);
+	v(37.257348,44.989857,-15.509248);
+	v(-28.655707,50.753116,-15.509244);
+	v(37.257348,50.753116,-15.509248);
+	v(-28.655707,50.753116,-24.462754);
+	v(37.257348,50.753116,-24.462756);
+	v(-28.655707,20.233402,4.694831);
+	v(-28.655707,20.233402,-39.116381);
+	v(-28.655707,61.952930,4.694831);
+	v(-28.655707,44.989857,-15.509244);
+	v(-28.655707,50.753116,-15.509244);
+	v(-28.655707,50.753116,-24.462754);
+	v(-28.655707,61.611622,-15.509244);
+	v(-28.655707,61.952930,-1.020177);
+	v(-28.655707,67.659382,-15.509244);
+	v(-28.655707,79.097935,-1.020177);
+	v(-28.655707,67.659382,-26.939253);
+	v(-28.655707,61.241764,-26.939253);
+	v(-28.655707,61.241764,-35.115878);
+	v(-28.655707,79.097935,-35.115878);
+	v(-28.655707,61.611622,-24.462754);
+	v(-28.655707,53.570926,-39.116381);
+	v(-28.655707,44.989857,-26.939253);
+	v(-28.655707,53.570926,-26.939253);
+	v(37.257348,61.611622,-15.509248);
+	v(-28.655707,61.611622,-15.509244);
+	v(37.257348,61.611622,-24.462756);
+	v(-28.655707,61.611622,-24.462754);
+	v(37.257348,61.611622,-15.509248);
+	v(37.257348,67.659382,-15.509248);
+	v(-28.655707,61.611622,-15.509244);
+	v(-28.655707,67.659382,-15.509244);
+	v(-28.655707,67.659382,-15.509244);
+	v(37.257348,67.659382,-15.509248);
+	v(-28.655707,67.659382,-26.939253);
+	v(37.257348,67.659382,-26.939256);
+	v(37.257348,67.659382,-26.939256);
+	v(37.257348,61.241764,-26.939256);
+	v(-28.655707,67.659382,-26.939253);
+	v(-28.655707,61.241764,-26.939253);
+	v(-28.655707,61.241764,-26.939253);
+	v(37.257348,61.241764,-26.939256);
+	v(-28.655707,61.241764,-35.115878);
+	v(37.257348,61.241764,-35.115882);
+	v(37.257348,61.241764,-35.115882);
+	v(37.257348,79.097935,-35.115882);
+	v(-28.655707,61.241764,-35.115878);
+	v(-28.655707,79.097935,-35.115878);
+	v(37.257348,79.097935,-1.020181);
+	v(-28.655707,79.097935,-1.020177);
+	v(37.257348,79.097935,-35.115882);
+	v(-28.655707,79.097935,-35.115878);
+	v(37.257348,79.097935,-1.020181);
+	v(37.257348,61.952930,-1.020181);
+	v(-28.655707,79.097935,-1.020177);
+	v(-28.655707,61.952930,-1.020177);
+	v(37.257348,61.952930,4.694823);
+	v(-28.655707,61.952930,4.694831);
+	v(37.257348,61.952930,-1.020181);
+	v(-28.655707,61.952930,-1.020177);
+	v(37.257348,61.952930,4.694823);
+	v(37.257348,20.233402,4.694823);
+	v(-28.655707,61.952930,4.694831);
+	v(-28.655707,20.233402,4.694831);
+	v(-28.655707,20.233402,4.694831);
+	v(37.257348,20.233402,4.694823);
+	v(-28.655707,20.233402,-39.116381);
+	v(37.257348,20.233402,-39.116385);
+	v(37.257348,20.233402,-39.116385);
+	v(37.257348,53.570926,-39.116385);
+	v(-28.655707,20.233402,-39.116381);
+	v(-28.655707,53.570926,-39.116381);
+	v(37.257348,53.570926,-26.939256);
+	v(-28.655707,53.570926,-26.939253);
+	v(37.257348,53.570926,-39.116385);
+	v(-28.655707,53.570926,-39.116381);
+	v(37.257348,53.570926,-26.939256);
+	v(37.257348,44.989857,-26.939256);
+	v(-28.655707,53.570926,-26.939253);
+	v(-28.655707,44.989857,-26.939253);
+	v(37.257348,44.989857,-15.509248);
+	v(-28.655707,44.989857,-15.509244);
+	v(37.257348,44.989857,-26.939256);
+	v(-28.655707,44.989857,-26.939253);
+	v(37.257348,44.989857,-15.509248);
+	v(37.257348,50.753116,-15.509248);
+	v(-28.655707,44.989857,-15.509244);
+	v(-28.655707,50.753116,-15.509244);
+	v(30.362561,70.252689,-39.869548);
+	v(30.362565,70.252689,19.566505);
+	v(30.362561,96.358936,-39.869548);
+	v(30.362563,91.588718,8.326995);
+	v(30.362563,115.020237,8.326995);
+	v(30.362563,115.020237,-22.153033);
+	v(30.362565,91.588718,19.566505);
+	v(30.362561,96.358936,-39.869548);
+	v(11.639485,80.017704,-39.869546);
+	v(30.362561,70.252689,-39.869548);
+	v(-23.548987,70.252689,-39.869544);
+	v(11.795737,96.358936,-39.869546);
+	v(-5.788939,80.017704,-39.869546);
+	v(-5.788939,96.358936,-39.869546);
+	v(-23.548987,96.358936,-39.869544);
+	v(11.639485,96.358936,-39.869546);
+	v(30.362561,96.358936,-39.869548);
+	v(30.362563,115.020237,-22.153033);
+	v(11.795737,96.358936,-39.869546);
+	v(11.795737,115.020237,-22.153032);
+	v(30.362563,115.020237,8.326995);
+	v(-23.548978,115.020237,8.326995);
+	v(30.362563,115.020237,-22.153033);
+	v(-23.548978,115.020237,-22.153031);
+	v(11.795737,115.020237,-22.153032);
+	v(-5.788939,115.020237,-22.153032);
+	v(30.362563,115.020237,8.326995);
+	v(30.362563,91.588718,8.326995);
+	v(-23.548978,115.020237,8.326995);
+	v(-23.548978,91.588718,8.326995);
+	v(30.362565,91.588718,19.566505);
+	v(-23.548978,91.588718,19.566505);
+	v(30.362563,91.588718,8.326995);
+	v(-23.548978,91.588718,8.326995);
+	v(30.362565,91.588718,19.566505);
+	v(30.362565,70.252689,19.566505);
+	v(-23.548978,91.588718,19.566505);
+	v(-23.548978,70.252689,19.566505);
+	v(-23.548978,70.252689,19.566505);
+	v(30.362565,70.252689,19.566505);
+	v(-23.548987,70.252689,-39.869544);
+	v(30.362561,70.252689,-39.869548);
+	v(-5.788939,96.358936,-39.869546);
+	v(-5.788939,115.020237,-22.153032);
+	v(-23.548987,96.358936,-39.869544);
+	v(-23.548978,115.020237,-22.153031);
+	v(11.639485,80.017704,-39.869546);
+	v(11.639485,96.358936,-39.869546);
+	v(-5.788939,80.017704,-39.869546);
+	v(-5.788939,96.358936,-39.869546);
+	v(11.795737,96.358936,-39.869546);
+	v(11.795737,115.020237,-22.153032);
+	v(11.639485,96.358936,-39.869546);
+	v(-5.788939,115.020237,-22.153032);
+	v(-5.788939,96.358936,-39.869546);
+	v(-23.548978,70.252689,19.566505);
+	v(-23.548987,70.252689,-39.869544);
+	v(-23.548978,91.588718,19.566505);
+	v(-23.548978,91.588718,8.326995);
+	v(-23.548987,96.358936,-39.869544);
+	v(-23.548978,115.020237,8.326995);
+	v(-23.548978,115.020237,-22.153031);
+
+    /*
+	uv(1.000000,0.000000,1.000000,1.000000,0.000000,1.000000,0.000000,0.000000);
+	uv(0.000000,1.000000,1.000000,1.000000,1.000000,0.000000,0.000000,0.000000);
+	uv(0.000000,0.000000,1.000000,0.000000,1.000000,1.000000,0.000000,1.000000);
+	uv(0.000000,1.000000,1.000000,1.000000,1.000000,0.000000,0.000000,0.000000);
+	uv(1.000000,1.000000,1.000000,0.000000,0.000000,0.000000,0.000000,1.000000);
+	uv(1.000000,1.000000,1.000000,0.000000,0.000000,0.000000,0.000000,1.000000);
+	uv(0.000000,1.000000,1.000000,1.000000,1.000000,0.000000,0.000000,0.000000);
+	uv(0.000000,0.629667,0.590312,0.000000,1.000000,0.000000,1.000000,0.622180);
+	uv(0.000000,1.000000,1.000000,1.000000,1.000000,0.000000,0.000000,0.000000);
+	uv(0.934109,0.000000,1.000000,0.000000,1.000000,1.000000,0.934109,1.000000);
+	uv(0.000000,1.000000,1.000000,1.000000,1.000000,0.000000,0.000000,0.000000);
+	uv(1.000000,1.000000,1.000000,0.000000,0.000000,0.000000);
+	uv(0.000000,0.000000,1.000000,0.000000,1.000000,1.000000,0.000000,1.000000);
+	uv(0.000000,1.000000,1.000000,1.000000,1.000000,0.000000,0.000000,0.000000);
+	uv(1.000000,0.000000,1.000000,1.000000,0.000000,1.000000,0.000000,0.000000);
+	uv(0.000000,0.000000,1.000000,0.000000,1.000000,1.000000);
+	uv(0.000000,1.000000,1.000000,1.000000,1.000000,0.000000,0.000000,0.000000);
+	uv(0.000000,0.000000,0.000000,0.000000,0.000000,0.000000);
+	uv(1.000000,0.150135,1.000000,0.000000,0.000000,0.000000,0.000000,0.150135);
+	uv(0.629667,0.000000,1.000000,0.000000,1.000000,1.000000,0.849865,1.000000);
+	uv(1.000000,0.000000,1.000000,1.000000,0.000000,1.000000,0.000000,0.000000);
+	uv(0.000000,1.000000,1.000000,1.000000,1.000000,0.000000,0.000000,0.000000);
+	uv(0.000000,1.000000,1.000000,1.000000,1.000000,0.000000,0.000000,0.000000);
+	uv(0.000000,1.000000,1.000000,1.000000,1.000000,0.000000,0.000000,0.000000);
+	uv(0.000000,0.622180,0.175944,1.000000,0.000000,1.000000);
+	uv(0.000000,1.000000,1.000000,1.000000,1.000000,0.000000,0.000000,0.000000);
+	uv(0.000000,1.000000,1.000000,1.000000,1.000000,0.000000,0.000000,0.000000);
+	uv(1.000000,0.000000,1.000000,1.000000,0.000000,0.999999,0.000000,0.000000);
+	uv(0.000000,1.000000,1.000000,1.000000,1.000000,0.000000,0.000000,0.000000);
+	uv(0.000000,1.000000,1.000000,1.000000,1.000000,0.000000,0.000000,0.000000);
+	uv(1.000000,0.000000,1.000000,1.000000,0.000000,0.000000);
+	uv(0.000000,0.000000,0.000000,0.000000,0.000000,0.000000);
+	uv(1.000000,1.000000,1.000000,0.000000,0.000000,0.000000,0.000000,1.000000);
+	uv(1.000000,1.000000,1.000000,0.000000,0.000000,0.000000,0.000000,1.000000);
+	uv(1.000000,0.000000,1.000000,1.000000,0.000000,1.000000,0.000000,0.000000);
+	uv(1.000000,1.000000,1.000000,0.000000,0.000000,0.000000,0.000000,1.000000);
+	uv(1.000000,0.000000,1.000000,1.000000,0.000000,1.000000,0.000000,0.000000);
+	uv(0.000000,1.000000,1.000000,1.000000,1.000000,0.000000,0.000000,0.000000);
+	uv(0.000000,0.000000,1.000000,0.000000,1.000000,1.000000,0.000000,1.000000);
+	uv(1.000000,1.000000,1.000000,0.000000,0.000000,0.000000,0.000000,1.000000);
+	uv(0.066424,0.000000,0.066424,1.000000,0.000000,1.000000,0.000000,0.000000);
+	uv(0.000000,1.000000,1.000000,1.000000,1.000000,0.000000,0.000000,0.000000);
+	uv(1.000000,1.000000,1.000000,0.500000,1.000000,0.000000,0.000000,0.000000);
+	uv(1.000000,0.000000,1.000000,1.000000,0.000000,1.000000,0.000000,0.000000);
+	uv(1.000000,0.000000,1.000000,1.000000,0.000000,1.000000,0.000000,0.000000);
+	uv(0.000000,1.000000,1.000000,1.000000,1.000000,0.000000,0.000000,0.000000);
+	uv(1.000000,0.000000,1.000000,1.000000,0.000000,1.000000,0.000000,0.000000);
+	uv(1.000000,0.000000,1.000000,1.000000,0.000000,1.000000,0.000000,0.000000);
+	uv(1.000000,0.000000,1.000000,1.000000,0.431554,1.000000,0.431554,0.000000);
+	uv(1.000000,0.000000,1.000000,1.000000,0.000000,1.000000,0.000000,0.000000);
+	uv(0.000000,1.000000,1.000000,1.000000,1.000000,0.000000,0.000000,0.000000);
+	uv(1.000000,0.000000,1.000000,1.000000,0.000000,1.000000,0.000000,0.000000);
+	uv(1.000000,0.000000,1.000000,1.000000,0.000000,1.000000,0.000000,0.000000);
+	uv(1.000000,0.000000,1.000000,1.000000,0.000000,1.000000,0.000000,0.000000);
+	uv(0.000000,1.000000,1.000000,1.000000,1.000000,0.000000,0.000000,0.000000);
+	uv(1.000000,1.000000,1.000000,0.000000,0.000000,0.000000,0.000000,1.000000);
+	uv(1.000000,0.000000,1.000000,1.000000,0.000000,1.000000,0.000000,0.000000);
+	uv(0.000000,1.000000,1.000000,1.000000,1.000000,0.000000,0.000000,0.000000);
+	uv(1.000000,1.000000,1.000000,0.000000,0.000000,0.000000,0.000000,1.000000);
+	uv(1.000000,0.000000,1.000000,1.000000,0.000000,1.000000,0.000000,0.000000);
+	uv(0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000);
+	uv(0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000);
+	uv(0.496329,0.000000,1.000000,0.000000,0.934109,0.205016,0.521365,0.205016);
+	uv(0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000);
+	uv(1.000000,0.000000,0.000000,0.000000,0.000000,0.503671);
+	uv(1.000000,0.000000,1.000000,1.000000,0.000000,1.000000,0.000000,0.000000);
+	uv(0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000);
+	uv(0.000000,0.000000,1.000000,0.000000,1.000000,1.000000);
+	uv(0.000000,1.000000,1.000000,1.000000,1.000000,0.000000,0.000000,0.000000);
+	uv(0.000000,1.000000,1.000000,1.000000,1.000000,0.000000,0.000000,0.000000);
+	uv(0.059106,0.006144,0.059059,0.326950,0.222310,0.323984,0.222349,0.005078);
+	uv(0.000000,0.000000,1.000000,0.000000,1.000000,1.000000,0.000000,1.000000);
+	uv(0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000);
+	uv(0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000);
+	uv(0.000000,1.000000,1.000000,1.000000,1.000000,0.000000,0.000000,0.000000);
+	uv(0.688240,0.000000,1.000000,1.000000,0.000000,1.000000,0.000000,0.000000);
+	uv(0.000000,1.000000,1.000000,1.000000,1.000000,0.000000,0.000000,0.000000);
+	uv(1.000000,1.000000,0.000000,0.996270,0.000264,0.766589,1.000000,0.766589);
+	uv(0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000);
+	uv(1.000000,0.000000,1.000000,1.000000,0.000000,1.000000,0.000000,0.000000);
+	uv(1.000000,0.000000,1.000000,1.000000,0.000000,1.000000,0.000000,0.000000);
+	uv(1.000000,0.000000,1.000000,1.000000,0.000000,1.000000,0.000000,0.000000);
+	uv(1.000000,1.000000,1.000000,0.000000,0.000000,0.000000);
+	uv(0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000);
+	uv(0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000);
+	uv(1.000000,0.000000,1.000000,1.000000,0.000000,1.000000,0.000000,0.000000);
+	uv(1.000000,0.000000,1.000000,1.000000,0.000000,1.000000,0.000000,0.000000);
+	uv(0.000000,0.006530,0.000000,0.328023,0.059059,0.326950,0.059106,0.006144);
+	uv(0.000217,1.000000,1.000000,1.000000,1.000000,0.000000,0.000000,0.000000);
+	uv(0.431554,1.000000,1.000000,1.000000,1.000000,0.000000,0.431554,0.000000);
+	uv(0.000000,1.000000,1.000000,1.000000,1.000000,0.000000,0.000000,0.000000);
+	uv(0.000000,1.000000,1.000000,1.000000,1.000000,0.000000,0.000000,0.000000);
+	uv(0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000);
+	uv(0.000000,0.000000,1.000000,0.000000,1.000000,1.000000,0.000000,1.000000);
+	uv(0.000000,0.000315,1.000000,0.000000,1.000000,1.000000,0.000000,1.000000);
+	uv(0.000000,1.000000,1.000000,1.000000,1.000000,0.000000,0.000000,0.000000);
+	uv(0.000000,1.000000,1.000000,1.000000,1.000000,0.000000,0.000000,0.000000);
+	uv(0.000000,1.000000,1.000000,1.000000,0.688240,0.000000,0.000000,0.000000);
+	uv(0.000000,1.000000,1.000000,1.000000,1.000000,0.000000,0.000000,0.000000);
+	uv(1.000000,1.000000,0.000000,1.000000,0.000000,1.000000,1.000000,1.000000);
+	uv(0.000000,0.999939,1.000000,1.000000,1.000000,0.000000,0.000000,0.000000);
+	uv(0.000000,0.000000,1.000000,0.000000,1.000000,1.000000,0.000000,1.000000);
+	uv(1.000000,0.622180,1.000000,1.000000,0.000000,1.000000,0.000000,0.629667);
+	uv(0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000);
+	uv(0.000000,1.000000,1.000000,1.000000,1.000000,0.000000,0.000000,0.000000);
+	uv(0.000000,1.000000,1.000000,1.000000,1.000000,0.000000,0.000000,0.000000);
+	uv(0.000000,0.000000,1.000000,0.000000,1.000000,1.000000,0.000000,1.000000);
+	uv(1.000000,1.000000,1.000000,0.000000,0.000000,0.000000,0.000000,1.000000);
+	uv(1.000000,0.000000,1.000000,1.000000,0.000000,1.000000,0.000000,0.000000);
+	uv(1.000000,0.000000,1.000000,1.000000,0.000000,1.000000,0.000000,0.000000);
+	uv(0.000000,0.000000,1.000000,0.000000,1.000000,1.000000,0.000000,1.000000);
+	uv(0.000000,0.000000,1.000000,0.000000,1.000000,1.000000,0.000000,1.000000);
+	uv(0.000000,1.000000,1.000000,1.000000,1.000000,0.000000,0.000000,0.000000);
+	uv(0.000000,1.000000,1.000000,1.000000,1.000000,0.000000,0.000000,0.000000);
+	uv(0.431554,0.000000,0.000000,0.000000,0.000000,1.000000,0.431554,1.000000);
+	uv(0.000000,1.000000,1.000000,1.000000,1.000000,0.000000,0.000000,0.000000);
+	uv(1.000000,1.000000,1.000000,0.000000,0.000000,0.000315,0.000000,1.000000);
+	uv(0.000000,0.000000,1.000000,0.000000,1.000000,1.000000,0.000000,1.000000);
+	uv(0.000000,1.000000,1.000000,1.000000,1.000000,0.000000,0.000000,0.000000);
+	uv(0.000000,1.000000,1.000000,1.000000,1.000000,0.000000,0.000000,0.000000);
+	uv(0.000000,0.000000,1.000000,0.000000,1.000000,1.000000);
+	uv(0.000000,1.000000,1.000000,1.000000,1.000000,0.000000,0.000000,0.000000);
+	uv(0.000000,1.000000,1.000000,1.000000,1.000000,0.000000,0.000000,0.000000);
+	uv(0.000000,1.000000,1.000000,1.000000,1.000000,0.000000,0.000000,0.000000);
+	uv(0.000000,0.000000,1.000000,0.000000,1.000000,1.000000,0.000000,1.000000);
+	uv(0.000264,0.766589,0.000000,0.996270,1.000000,1.000000,1.000000,0.766589);
+	uv(1.000000,0.000000,0.000000,0.175707,0.337951,0.000000);
+	uv(1.000000,1.000000,1.000000,0.000000,0.000000,0.000000,0.000000,1.000000);
+	uv(1.000000,0.000000,1.000000,1.000000,0.000000,0.999939,0.000000,0.000000);
+	uv(0.000000,1.000000,1.000000,1.000000,1.000000,0.000000,0.000000,0.000000);
+	uv(0.222349,0.005078,0.222310,0.323984,0.389406,0.320947,0.389458,0.003987);
+	uv(0.000000,0.000000,1.000000,0.000000,1.000000,1.000000,0.000000,1.000000);
+	uv(1.000000,1.000000,1.000000,0.000000,0.000000,0.000000,0.000000,1.000000);
+	uv(0.000000,1.000000,1.000000,1.000000,1.000000,0.000000,0.000000,0.000000);
+	uv(1.000000,0.000000,1.000000,1.000000,0.000000,1.000000,0.000000,0.000000);
+	uv(1.000000,0.000000,1.000000,1.000000,0.000000,1.000000,0.000000,0.000000);
+	uv(0.000000,1.000000,1.000000,1.000000,1.000000,0.000000,0.000000,0.000000);
+	uv(0.000000,1.000000,1.000000,1.000000,1.000000,0.000000,0.000000,0.000000);
+	uv(0.000000,0.000000,1.000000,0.000000,1.000000,1.000000,0.000000,1.000000);
+	uv(1.000000,1.000000,1.000000,0.000000,0.000000,0.000000,0.000000,1.000000);
+	uv(1.000000,0.000000,1.000000,1.000000,0.000000,1.000000,0.000000,0.000000);
+	uv(1.000000,1.000000,0.000000,1.000000,0.000000,0.150135,1.000000,0.150135);
+	uv(0.000000,0.000000,1.000000,0.000000,1.000000,1.000000,0.000000,1.000000);
+	uv(0.000000,1.000000,1.000000,1.000000,1.000000,0.000000,0.000000,0.000000);
+	uv(0.000000,1.000000,1.000000,1.000000,1.000000,0.000000,0.000000,0.000000);
+	uv(0.000000,0.000000,1.000000,0.000000,1.000000,1.000000,0.000000,1.000000);
+	uv(1.000000,0.000000,1.000000,1.000000,0.000000,1.000000,0.000000,0.000000);
+	uv(0.000000,0.175707,1.000000,0.000000,0.337951,0.000000);
+	uv(1.000000,0.000000,1.000000,1.000000,0.000217,1.000000,0.000000,0.000000);
+	uv(0.000000,1.000000,1.000000,1.000000,1.000000,0.000000,0.000000,0.000000);
+	uv(0.000000,1.000000,0.000000,1.000000,1.000000,1.000000,1.000000,1.000000);
+	uv(0.000000,0.000000,1.000000,0.000000,1.000000,1.000000,0.000000,1.000000);
+	uv(0.000000,0.150135,0.000000,1.000000,1.000000,1.000000,1.000000,0.150135);
+	uv(0.000000,1.000000,1.000000,1.000000,1.000000,0.000000,0.000000,0.000000);
+	uv(0.000000,1.000000,1.000000,1.000000,1.000000,0.000000,0.000000,0.000000);
+	uv(0.000000,0.999999,1.000000,1.000000,1.000000,0.000000,0.000000,0.000000);
+	uv(1.000000,0.000000,1.000000,1.000000,0.000000,1.000000,0.000000,0.000000);
+	uv(0.000000,0.000000,1.000000,0.000000,1.000000,1.000000,0.000000,1.000000);
+	uv(0.000000,1.000000,1.000000,1.000000,1.000000,0.000000,0.000000,0.000000);
+	uv(0.000000,1.000000,1.000000,1.000000,1.000000,0.000000,0.000000,0.000000);
+	uv(0.000000,1.000000,1.000000,1.000000,1.000000,0.000000,0.000000,0.000000);
+	uv(0.000000,1.000000,1.000000,1.000000,1.000000,0.000000,0.000000,0.000000);
+	uv(0.000000,0.000000,1.000000,0.000000,1.000000,1.000000,0.000000,1.000000);
+	uv(1.000000,0.000000,1.000000,1.000000,0.000000,1.000000,0.000000,0.000000);
+	uv(0.000000,0.000000,1.000000,0.000000,1.000000,1.000000,0.000000,1.000000);
+	uv(1.000000,0.000000,1.000000,1.000000,0.000000,0.000000);
+	uv(0.000000,0.000000,1.000000,0.000000,1.000000,1.000000,0.000000,1.000000);
+	uv(0.000000,1.000000,1.000000,1.000000,1.000000,0.000000,0.000000,0.000000);
+	uv(1.000000,1.000000,1.000000,0.000000,0.000000,0.000000);
+	uv(0.000000,1.000000,1.000000,1.000000,1.000000,0.000000,0.000000,0.000000);
+	uv(0.000000,1.000000,1.000000,1.000000,1.000000,0.000000,0.000000,0.000000);
+	uv(0.000000,1.000000,1.000000,1.000000,1.000000,0.000000,0.000000,0.000000);
+	uv(0.000000,0.000000,1.000000,0.000000,1.000000,1.000000,0.000000,1.000000);
+	uv(0.000000,1.000000,1.000000,1.000000,1.000000,0.000000,0.000000,0.000000);
+	uv(0.000000,1.000000,1.000000,1.000000,1.000000,0.000000,0.000000,0.000000);
+	uv(1.000000,0.000000,1.000000,1.000000,0.000000,1.000000,0.000000,0.000000);
+	uv(1.000000,1.000000,1.000000,0.000000,0.000000,0.000000,0.000000,1.000000);
+	uv(1.000000,0.000000,1.000000,1.000000,0.000000,1.000000,0.000000,0.000000);
+	uv(0.000000,1.000000,1.000000,1.000000,1.000000,0.000000,0.000000,0.000000);
+	uv(0.000000,1.000000,1.000000,1.000000,1.000000,0.000000,0.000000,0.000000);
+	uv(0.000000,1.000000,1.000000,1.000000,1.000000,0.000000,0.000000,0.000000);
+	uv(0.000000,1.000000,1.000000,1.000000,1.000000,0.000000,0.000000,0.000000);
+	uv(0.000000,1.000000,1.000000,1.000000,1.000000,0.000000,0.000000,0.000000);
+	uv(0.000000,1.000000,1.000000,1.000000,1.000000,0.000000,0.000000,0.000000);
+	uv(0.000000,1.000000,1.000000,1.000000,1.000000,0.000000,0.000000,0.000000);
+	uv(1.000000,0.000000,1.000000,1.000000,0.000000,1.000000,0.000000,0.000000);
+	uv(0.556543,0.317910,0.389406,0.320947,0.389458,0.003987,0.556574,0.002896);
+	uv(0.222310,0.323984,0.059059,0.326950,0.059106,0.006144,0.222349,0.005078);
+	uv(0.000000,1.000000,1.000000,1.000000,1.000000,0.000000,0.000000,0.000000);
+	uv(0.389406,0.320947,0.222310,0.323984,0.222349,0.005078,0.389458,0.003987);
+	uv(0.000000,1.000000,1.000000,1.000000,1.000000,0.000000,0.000000,0.000000);
+	uv(0.059059,0.326950,0.000000,0.328023,0.000000,0.006530,0.059106,0.006144);
+	uv(0.840637,0.666667,0.000000,1.000000,0.000000,0.859755,0.182127,0.559733);
+	uv(0.000000,1.000000,1.000000,1.000000,1.000000,0.000000,0.000000,0.000000);
+	uv(0.000000,1.000000,1.000000,1.000000,1.000000,0.000000,0.000000,0.000000);
+	uv(0.000000,1.000000,1.000000,1.000000,1.000000,0.000000,0.000000,0.000000);
+	uv(0.000000,1.000000,1.000000,1.000000,1.000000,0.000000,0.000000,0.000000);
+	uv(1.000000,1.000000,1.000000,0.000000,0.000000,0.000000);
+	uv(0.000000,1.000000,0.066424,1.000000,0.066424,0.000000,0.000000,0.000000);
+	uv(0.000000,1.000000,1.000000,1.000000,1.000000,0.000000,0.000000,0.000000);
+	uv(0.000000,1.000000,1.000000,1.000000,1.000000,0.000000,0.000000,0.000000);
+	uv(1.000000,0.000000,1.000000,1.000000,0.000000,1.000000,0.000000,0.000000);
+	uv(0.000000,1.000000,1.000000,1.000000,1.000000,0.000000,0.000000,0.000000);
+	uv(0.000000,0.859755,0.000000,1.000000,0.840637,0.666667,0.182127,0.559733);
+	uv(1.000000,0.000000,1.000000,1.000000,0.000000,1.000000,0.000000,0.000000);
+	uv(1.000000,1.000000,1.000000,0.000000,0.000000,0.000000,0.000000,1.000000);
+	uv(1.000000,0.000000,1.000000,1.000000,0.000000,1.000000,0.000000,0.000000);
+	uv(0.000000,1.000000,1.000000,1.000000,1.000000,0.622180,0.000000,0.629667);
+	uv(1.000000,0.000000,1.000000,1.000000,0.000000,1.000000,0.000000,0.000000);
+	uv(0.000000,1.000000,1.000000,1.000000,1.000000,0.000000,0.000000,0.000000);
+	uv(1.000000,0.000000,1.000000,1.000000,0.000000,1.000000,0.000000,0.000000);
+	uv(1.000000,0.000000,0.590312,0.000000,0.000000,0.629667,1.000000,0.622180);
+	uv(1.000000,0.000000,1.000000,1.000000,0.000000,1.000000,0.000000,0.000000);
+	uv(1.000000,1.000000,1.000000,0.000000,0.934109,0.000000,0.934109,1.000000);
+	uv(1.000000,0.000000,1.000000,1.000000,0.000000,1.000000,0.000000,0.000000);
+	uv(1.000000,0.000000,1.000000,1.000000,0.000000,0.000000);
+	uv(1.000000,1.000000,1.000000,0.000000,0.000000,0.000000,0.000000,1.000000);
+	uv(1.000000,0.000000,1.000000,1.000000,0.000000,1.000000,0.000000,0.000000);
+	uv(0.000000,1.000000,0.000000,0.000000,0.431554,0.000000,0.431554,1.000000);
+	uv(0.000000,1.000000,1.000000,1.000000,1.000000,0.000000,0.000000,0.000000);
+	uv(1.000000,0.000000,0.000000,0.000000,1.000000,1.000000);
+	uv(1.000000,0.000000,1.000000,1.000000,0.000000,1.000000,0.000000,0.000000);
+	uv(0.000000,0.000000,0.000000,0.000000,0.000000,0.000000);
+	uv(0.000000,0.000000,1.000000,0.000000,1.000000,0.150135,0.000000,0.150135);
+	uv(1.000000,1.000000,1.000000,0.000000,0.629667,0.000000,0.849865,1.000000);
+	uv(1.000000,0.000000,0.000000,0.000000,1.000000,1.000000);
+	uv(1.000000,0.000000,1.000000,1.000000,0.000000,1.000000,0.000000,0.000000);
+	uv(1.000000,0.000000,1.000000,1.000000,0.000000,1.000000,0.000000,0.000000);
+	uv(0.000000,1.000000,1.000000,1.000000,1.000000,0.000000,0.000000,0.000000);
+	uv(0.175944,1.000000,0.000000,0.622180,0.000000,1.000000);
+	uv(1.000000,0.000000,1.000000,1.000000,0.000000,1.000000,0.000000,0.000000);
+	uv(0.000000,1.000000,1.000000,1.000000,1.000000,0.000000,0.000000,0.000000);
+	uv(0.000000,1.000000,1.000000,1.000000,1.000000,0.000000,0.000000,0.000000);
+	uv(1.000000,0.000000,1.000000,1.000000,0.000000,1.000000,0.000000,0.000000);
+	uv(0.000000,1.000000,1.000000,1.000000,1.000000,0.000000,0.000000,0.000000);
+	uv(0.000000,1.000000,1.000000,1.000000,1.000000,0.000000,0.000000,0.000000);
+	uv(0.000000,0.000000,0.000000,0.000000,0.000000,0.000000);
+	uv(0.000000,1.000000,1.000000,1.000000,1.000000,0.000000,0.000000,0.000000);
+	uv(1.000000,0.000000,1.000000,1.000000,0.000000,1.000000,0.000000,0.000000);
+	uv(0.000000,1.000000,1.000000,1.000000,1.000000,0.000000,0.000000,0.000000);
+	uv(0.000000,1.000000,1.000000,1.000000,1.000000,0.000000,0.000000,0.000000);
+	uv(0.000000,1.000000,1.000000,1.000000,1.000000,0.000000,0.000000,0.000000);
+	uv(1.000000,0.000000,1.000000,1.000000,0.000000,1.000000,0.000000,0.000000);
+	uv(1.000000,1.000000,1.000000,0.000000,0.000000,0.000000,0.000000,1.000000);
+	uv(0.000000,1.000000,1.000000,1.000000,1.000000,0.000000,0.000000,0.000000);
+	uv(0.000000,1.000000,1.000000,1.000000,1.000000,0.000000,0.000000,0.000000);
+	uv(1.000000,0.000000,1.000000,1.000000,0.000000,1.000000,0.000000,0.000000);
+	uv(1.000000,0.000000,1.000000,0.500000,1.000000,1.000000,0.000000,0.000000);
+	uv(0.000000,1.000000,1.000000,1.000000,1.000000,0.000000,0.000000,0.000000);
+	uv(0.000000,1.000000,1.000000,1.000000,1.000000,0.000000,0.000000,0.000000);
+	uv(0.000000,1.000000,1.000000,1.000000,1.000000,0.000000,0.000000,0.000000);
+	uv(0.000000,1.000000,1.000000,1.000000,1.000000,0.000000,0.000000,0.000000);
+	uv(0.000000,0.000000,1.000000,0.000000,1.000000,1.000000,0.000000,1.000000);
+	uv(1.000000,0.000000,1.000000,1.000000,0.000000,1.000000,0.000000,0.000000);
+	uv(0.000000,1.000000,1.000000,1.000000,1.000000,0.000000,0.000000,0.000000);
+	uv(0.389458,0.003987,0.389406,0.320947,0.556543,0.317910,0.556574,0.002896);
+	uv(0.000000,1.000000,1.000000,1.000000,1.000000,0.000000,0.000000,0.000000);
+	uv(0.000000,0.000000,1.000000,0.000000,1.000000,1.000000,0.000000,1.000000);
+	uv(1.000000,0.000000,1.000000,1.000000,0.000000,1.000000,0.000000,0.000000);
+	uv(0.000000,1.000000,1.000000,1.000000,1.000000,0.000000,0.000000,0.000000);
+	uv(0.000000,1.000000,1.000000,1.000000,1.000000,0.000000,0.000000,0.000000);
+	uv(1.000000,0.000000,1.000000,1.000000,0.000000,1.000000,0.000000,0.000000);
+	uv(1.000000,0.000000,1.000000,1.000000,0.000000,1.000000,0.000000,0.000000);
+	uv(1.000000,1.000000,1.000000,0.000000,0.000000,0.000000,0.000000,1.000000);
+	uv(0.000000,0.000000,1.000000,0.000000,1.000000,1.000000,0.000000,1.000000);
+	uv(0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000);
+	uv(0.000000,1.000000,1.000000,1.000000,1.000000,0.000000,0.000000,0.000000);
+	uv(0.934109,0.205016,1.000000,0.000000,0.496329,0.000000,0.521365,0.205016);
+	uv(0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000);
+	uv(0.000000,0.000000,1.000000,0.000000,0.000000,0.503671);
+	uv(1.000000,0.000000,1.000000,1.000000,0.000000,1.000000,0.000000,0.000000);
+	uv(1.000000,0.000000,1.000000,1.000000,0.000000,1.000000,0.000000,0.000000);
+	uv(0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000);
+	uv(1.000000,0.000000,0.000000,0.000000,1.000000,1.000000);
+	uv(0.000000,1.000000,1.000000,1.000000,1.000000,0.000000,0.000000,0.000000);
+	uv(1.000000,0.000000,1.000000,1.000000,0.000000,1.000000,0.000000,0.000000);
+	uv(1.000000,0.000000,1.000000,1.000000,0.000000,1.000000,0.000000,0.000000);
+	uv(0.000000,0.000000,1.000000,0.000000,1.000000,1.000000,0.000000,1.000000);
+	uv(1.000000,1.000000,1.000000,0.000000,0.000000,0.000000,0.000000,1.000000);
+	uv(0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000);
+	uv(0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000);
+	uv(0.000000,1.000000,1.000000,1.000000,1.000000,0.000000,0.000000,0.000000);
+	uv(1.000000,0.000000,1.000000,1.000000,0.000000,1.000000,0.000000,0.000000);
+	uv(0.000000,1.000000,1.000000,1.000000,1.000000,0.000000,0.000000,0.000000);
+	uv(0.000000,0.000000,1.000000,0.000000,1.000000,1.000000,0.000000,1.000000);
+	uv(1.000000,1.000000,1.000000,0.000000,0.000000,0.000000,0.000000,1.000000);
+	uv(0.000000,1.000000,1.000000,1.000000,1.000000,0.000000,0.000000,0.000000);
+	uv(0.000000,1.000000,1.000000,1.000000,1.000000,0.000000,0.000000,0.000000);
+	uv(1.000000,1.000000,1.000000,0.000000,0.000000,0.000000,0.000000,1.000000);
+	uv(0.000000,1.000000,1.000000,1.000000,1.000000,0.000000,0.000000,0.000000);
+	uv(1.000000,0.000000,1.000000,1.000000,0.000000,0.000000);
+	uv(0.000000,0.000000,1.000000,0.000000,1.000000,1.000000,0.000000,1.000000);
+	uv(0.000000,0.000000,1.000000,0.000000,1.000000,1.000000,0.000000,1.000000);
+	uv(1.063908,0.579473,0.980168,0.586930,0.980168,0.733265,1.102742,0.699579);
+	uv(0.102742,0.300421,0.063908,0.411678,0.063908,0.579473,0.102742,0.699579);
+	uv(1.063908,0.411678,1.102742,0.300421,0.980168,0.266734,0.980168,0.405176);
+	uv(0.397258,0.300421,0.397258,0.699579,0.494391,0.734400,0.494391,0.265600);
+	uv(0.494391,0.734400,0.397258,0.699579,0.490985,0.808478);
+	uv(0.490985,0.808478,0.640165,0.738236,0.640165,0.261764,0.490985,0.191522);
+	uv(0.980168,0.585388,0.828330,0.601546,0.980168,0.586930);
+	uv(0.494391,0.265600,0.494391,0.734400,0.490985,0.808478,0.490985,0.191522);
+	uv(0.980168,0.405176,0.980168,0.266734,0.828330,0.240533,0.828330,0.389426);
+	uv(0.397258,0.699579,0.397258,0.300421,0.102742,0.300421,0.102742,0.699579);
+	uv(0.980168,0.586930,0.828330,0.601546,0.828330,0.759467,0.980168,0.733265);
+	uv(0.980168,0.585388,0.980168,0.586930,1.063908,0.579473);
+	uv(0.490985,0.808478,0.980168,0.733265,0.828330,0.759467,0.640165,0.738236);
+	uv(0.397258,0.699579,0.102742,0.699579,0.980168,0.733265,0.490985,0.808478);
+	uv(1.397258,0.300421,1.490986,0.191522,0.980168,0.266734,1.102742,0.300421);
+	uv(0.397258,0.300421,0.494391,0.265600,0.490985,0.191522);
+	uv(0.828330,0.240533,0.828330,0.759467,0.828330,0.601546);
+	uv(0.828330,0.240533,0.828330,0.601546,0.828330,0.389426);
+	uv(0.980168,0.266734,0.490985,0.191522,0.640165,0.261764,0.828330,0.240533);
+	uv(0.640165,0.738236,0.828330,0.759467,0.828330,0.240533,0.640165,0.261764);
+	uv(0.980168,0.586930,0.980168,0.405176,0.828330,0.389426,0.828330,0.601546);
+	uv(1.063908,0.579473,1.063908,0.411678,0.980168,0.405176,0.980168,0.586930);
+	uv(1.148169,0.272470,0.971921,0.194135,1.148169,0.000000,1.148169,0.000000);
+	uv(0.351831,0.000000,0.351831,0.272470,0.148169,0.272470,0.351831,0.000000);
+	uv(0.603320,0.180830,0.581358,0.212580,0.351831,0.272470,0.603320,0.000000);
+	uv(0.836835,0.000000,0.836835,0.000000,0.836835,0.131638,0.727482,0.115296);
+	uv(0.734995,0.000000,0.734995,0.164326,0.669958,0.258501,0.603320,0.180830);
+	uv(0.828884,0.181752,0.836984,0.262512,0.669958,0.258501,0.734995,0.164326);
+	uv(0.861232,0.141117,0.908657,0.187805,0.836984,0.262512,0.828884,0.181752);
+	uv(0.971921,0.810968,0.971921,0.194135,1.148169,0.272470,1.148169,0.732955);
+	uv(0.971921,1.000000,0.971921,0.000000,0.971921,0.194135,0.971921,0.810968);
+	uv(0.000000,1.000000,0.000000,0.000000,0.000000,0.000000,0.000000,1.000000);
+	uv(0.000000,1.000000,0.000000,0.000000,0.000000,0.000000,0.000000,1.000000);
+	uv(0.148169,0.732955,0.148169,0.272470,0.351831,0.272470,0.351831,0.732955);
+	uv(0.581358,0.792715,0.581358,0.212580,0.603320,0.180830,0.603320,0.824093);
+	uv(0.351831,0.732955,0.351831,0.272470,0.581358,0.212580,0.581358,0.792715);
+	uv(0.836835,0.872340,0.836835,0.131638,0.836835,0.000000,0.836835,1.000000);
+	uv(0.603320,0.824093,0.603320,0.180830,0.669958,0.258501,0.669958,0.746963);
+	uv(0.828884,0.823185,0.828884,0.181752,0.734995,0.164326,0.734995,0.840327);
+	uv(0.669958,0.746963,0.669958,0.258501,0.836984,0.262512,0.836984,0.742945);
+	uv(0.861232,0.863074,0.861232,0.141117,0.828884,0.181752,0.828884,0.823185);
+	uv(0.908657,0.817217,0.908657,0.187805,0.861232,0.141117,0.861232,0.863074);
+	uv(0.836984,0.742945,0.836984,0.262512,0.908657,0.187805,0.908657,0.817217);
+	uv(0.727482,0.888281,0.727482,0.115296,0.836835,0.131638,0.836835,0.872340);
+	uv(0.000000,1.000000,0.000000,0.000000,0.000000,0.000000,0.000000,1.000000);
+	uv(0.734995,0.164326,0.734995,0.840327,0.727482,0.888281,0.727482,0.115296);
+	uv(0.000000,0.000000,0.000000,1.000000,0.000000,1.000000,0.000000,0.000000);
+	uv(0.828884,0.823185,0.836984,0.742945,0.669958,0.746963,0.734995,0.840327);
+	uv(0.836984,0.742945,0.908657,0.817217,0.861232,0.863074,0.828884,0.823185);
+	uv(1.148169,1.000000,1.148169,0.732955,0.971921,0.810968,1.148169,1.000000);
+	uv(0.351831,0.732955,0.148169,0.732955,0.351831,1.000000,0.351831,1.000000);
+	uv(0.603320,0.824093,0.581358,0.792715,0.351831,0.732955,0.603320,1.000000);
+	uv(0.734995,1.000000,0.734995,0.840327,0.669958,0.746963,0.603320,0.824093);
+	uv(0.836835,1.000000,0.836835,0.872340,0.727482,0.888281,0.836835,1.000000);
+	uv(0.000000,0.000000,1.000000,0.000000,1.000000,1.000000,0.000000,1.000000);
+	uv(0.000000,1.000000,1.000000,1.000000,1.000000,0.000000,0.000000,0.000000);
+	uv(0.000000,1.000000,1.000000,1.000000,1.000000,0.000000,0.000000,0.000000);
+	uv(0.000000,1.000000,1.000000,1.000000,1.000000,0.000000,0.000000,0.000000);
+	uv(0.000000,1.000000,1.000000,1.000000,1.000000,0.000000,0.000000,0.000000);
+	uv(0.000000,1.000000,1.000000,1.000000,1.000000,0.000000,0.000000,0.000000);
+	uv(1.000000,1.000000,1.000000,0.000000,0.000000,0.000000);
+	uv(0.000000,0.000000,1.000000,0.000000,1.000000,1.000000,0.000000,1.000000);
+	uv(0.000000,1.000000,1.000000,1.000000,1.000000,0.000000,0.000000,0.000000);
+	uv(1.000000,1.000000,1.000000,0.000000,0.000000,0.000000,0.000000,1.000000);
+	uv(0.000000,1.000000,1.000000,1.000000,1.000000,0.000000,0.000000,0.000000);
+	uv(0.000000,1.000000,1.000000,1.000000,1.000000,0.000000,0.000000,0.000000);
+	uv(1.000000,0.000000,1.000000,1.000000,0.000000,0.000000);
+	uv(0.000000,1.000000,1.000000,1.000000,1.000000,0.000000,0.000000,0.000000);
+	uv(0.000000,0.000000,1.000000,0.000000,1.000000,1.000000,0.000000,1.000000);
+	uv(0.000000,0.000000,1.000000,0.000000,1.000000,1.000000,0.000000,1.000000);
+	uv(1.000000,0.000000,1.000000,1.000000,0.000000,1.000000,0.000000,0.000000);
+	uv(1.000000,0.000000,1.000000,1.000000,0.000000,1.000000,0.000000,0.000000);
+	uv(0.000000,1.000000,1.000000,1.000000,1.000000,0.000000,0.000000,0.000000);
+	uv(0.000000,0.000000,1.000000,0.000000,1.000000,1.000000,0.000000,1.000000);
+	uv(0.000000,1.000000,1.000000,1.000000,1.000000,0.000000,0.000000,0.000000);
+	uv(0.000000,1.000000,1.000000,1.000000,1.000000,0.000000,0.000000,0.000000);
+	uv(0.000000,0.000000,1.000000,0.000000,1.000000,1.000000,0.000000,1.000000);
+	uv(0.000000,1.000000,1.000000,1.000000,1.000000,0.000000,0.000000,0.000000);
+	uv(1.000000,0.000000,1.000000,1.000000,0.000000,1.000000,0.000000,0.000000);
+	uv(0.000000,1.000000,1.000000,1.000000,1.000000,0.000000,0.000000,0.000000);
+	uv(1.000000,0.000000,1.000000,1.000000,0.000000,1.000000,0.000000,0.000000);
+	uv(0.000000,0.000000,1.000000,0.000000,1.000000,1.000000,0.000000,1.000000);
+	uv(1.000000,0.000000,1.000000,1.000000,0.000000,1.000000,0.000000,0.000000);
+	uv(1.000000,1.000000,1.000000,0.000000,0.000000,0.000000,0.000000,1.000000);
+	uv(0.000000,1.000000,1.000000,1.000000,1.000000,0.000000,0.000000,0.000000);
+	uv(0.000000,1.000000,1.000000,1.000000,1.000000,0.000000,0.000000,0.000000);
+	uv(0.000000,1.000000,1.000000,1.000000,1.000000,0.000000,0.000000,0.000000);
+	uv(0.000000,0.000000,1.000000,0.000000,1.000000,1.000000,0.000000,1.000000);
+	uv(0.000000,1.000000,1.000000,1.000000,1.000000,0.000000,0.000000,0.000000);
+	uv(1.000000,0.000000,1.000000,1.000000,0.000000,1.000000,0.000000,0.000000);
+	uv(0.000000,1.000000,1.000000,1.000000,1.000000,0.000000,0.000000,0.000000);
+	uv(1.000000,0.000000,1.000000,1.000000,0.000000,1.000000,0.000000,0.000000);
+	uv(0.000000,1.000000,1.000000,1.000000,1.000000,0.000000,0.000000,0.000000);
+	uv(0.000000,1.000000,1.000000,1.000000,1.000000,0.000000,0.000000,0.000000);
+	uv(0.000000,0.000000,1.000000,0.000000,1.000000,1.000000,0.000000,1.000000);
+	uv(0.000000,1.000000,1.000000,1.000000,1.000000,0.000000,0.000000,0.000000);
+	uv(0.000000,1.000000,1.000000,1.000000,1.000000,0.000000,0.000000,0.000000);
+	uv(0.000000,1.000000,1.000000,1.000000,1.000000,0.000000,0.000000,0.000000);
+	uv(1.000000,0.000000,1.000000,1.000000,0.000000,1.000000,0.000000,0.000000);
+	uv(1.000000,1.000000,1.000000,0.000000,0.000000,0.000000,0.000000,1.000000);
+	uv(1.000000,1.000000,1.000000,0.000000,0.000000,0.000000);
+	uv(1.000000,0.000000,1.000000,1.000000,0.000000,1.000000,0.000000,0.000000);
+	uv(0.000000,1.000000,1.000000,1.000000,1.000000,0.000000,0.000000,0.000000);
+	uv(0.000000,1.000000,1.000000,1.000000,1.000000,0.000000,0.000000,0.000000);
+	uv(0.000000,1.000000,1.000000,1.000000,1.000000,0.000000,0.000000,0.000000);
+	uv(0.000000,1.000000,1.000000,1.000000,1.000000,0.000000,0.000000,0.000000);
+	uv(0.000000,1.000000,1.000000,1.000000,1.000000,0.000000,0.000000,0.000000);
+	uv(0.000000,0.000000,1.000000,0.000000,1.000000,1.000000,0.000000,1.000000);
+	uv(0.000000,1.000000,1.000000,1.000000,1.000000,0.000000,0.000000,0.000000);
+	uv(0.000000,0.175707,1.000000,0.000000,0.337951,0.000000);
+	uv(1.000000,1.000000,1.000000,0.000000,0.000000,0.000000,0.000000,1.000000);
+	uv(0.000000,0.000000,1.000000,0.000000,1.000000,1.000000);
+	uv(0.000000,1.000000,0.000000,1.000000,1.000000,1.000000,1.000000,1.000000);
+	uv(0.000000,0.000000,1.000000,0.000000,1.000000,1.000000,0.000000,1.000000);
+	uv(0.000000,1.000000,1.000000,1.000000,1.000000,0.000000,0.000000,0.000000);
+	uv(0.000000,1.000000,1.000000,1.000000,1.000000,0.000000,0.000000,0.000000);
+	uv(0.000000,1.000000,1.000000,1.000000,1.000000,0.000000,0.000000,0.000000);
+	uv(0.000000,1.000000,1.000000,1.000000,1.000000,0.000000,0.000000,0.000000);
+	uv(0.000000,1.000000,1.000000,1.000000,1.000000,0.000000,0.000000,0.000000);
+	uv(0.000000,0.000000,1.000000,0.000000,1.000000,1.000000,0.000000,1.000000);
+	uv(0.000000,1.000000,1.000000,1.000000,1.000000,0.000000,0.000000,0.000000);
+	uv(1.000000,0.000000,1.000000,1.000000,0.000000,1.000000,0.000000,0.000000);
+	uv(0.000000,1.000000,1.000000,1.000000,1.000000,0.000000,0.000000,0.000000);
+	uv(0.000000,1.000000,1.000000,1.000000,1.000000,0.000000,0.000000,0.000000);
+	uv(0.000000,1.000000,1.000000,1.000000,1.000000,0.000000,0.000000,0.000000);
+	uv(0.000000,1.000000,1.000000,1.000000,1.000000,0.000000,0.000000,0.000000);
+	uv(0.000000,1.000000,1.000000,1.000000,1.000000,0.000000,0.000000,0.000000);
+	uv(1.000000,0.000000,1.000000,1.000000,0.000000,1.000000,0.000000,0.000000);
+	uv(1.000000,1.000000,1.000000,0.000000,0.000000,0.000000,0.000000,1.000000);
+	uv(1.000000,0.000000,1.000000,1.000000,0.000000,1.000000,0.000000,0.000000);
+	uv(0.000000,1.000000,1.000000,1.000000,1.000000,0.000000,0.000000,0.000000);
+	uv(0.000000,1.000000,1.000000,1.000000,1.000000,0.000000,0.000000,0.000000);
+	uv(0.000000,1.000000,1.000000,1.000000,1.000000,0.000000,0.000000,0.000000);
+	uv(0.000000,0.000000,1.000000,0.000000,1.000000,1.000000,0.000000,1.000000);
+	uv(0.000000,1.000000,1.000000,1.000000,1.000000,0.000000,0.000000,0.000000);
+	uv(0.000000,0.000000,1.000000,0.000000,1.000000,1.000000,0.000000,1.000000);
+	uv(0.000000,1.000000,1.000000,1.000000,1.000000,0.000000,0.000000,0.000000);
+	uv(1.000000,1.000000,1.000000,0.000000,0.000000,0.000000);
+	uv(0.000000,0.000000,1.000000,0.000000,1.000000,1.000000,0.000000,1.000000);
+	uv(0.000000,1.000000,1.000000,1.000000,1.000000,0.000000,0.000000,0.000000);
+	uv(0.000000,0.000000,1.000000,0.000000,1.000000,1.000000,0.000000,1.000000);
+	uv(0.000000,1.000000,1.000000,1.000000,1.000000,0.000000,0.000000,0.000000);
+	uv(0.000000,1.000000,1.000000,1.000000,1.000000,0.000000,0.000000,0.000000);
+	uv(0.000000,1.000000,1.000000,1.000000,1.000000,0.000000,0.000000,0.000000);
+	uv(0.000000,1.000000,1.000000,1.000000,1.000000,0.000000,0.000000,0.000000);
+	uv(0.000000,1.000000,1.000000,1.000000,1.000000,0.000000,0.000000,0.000000);
+	uv(0.000000,1.000000,1.000000,1.000000,1.000000,0.000000,0.000000,0.000000);
+	uv(1.000000,1.000000,1.000000,0.000000,0.000000,0.000000,0.000000,1.000000);
+	uv(1.000000,0.000000,1.000000,1.000000,0.000000,1.000000,0.000000,0.000000);
+	uv(1.000000,0.000000,1.000000,1.000000,0.000000,1.000000,0.000000,0.000000);
+	uv(1.000000,0.000000,1.000000,1.000000,0.000000,1.000000,0.000000,0.000000);
+	uv(1.000000,0.000000,1.000000,1.000000,0.000000,1.000000,0.000000,0.000000);
+	uv(1.000000,0.000000,1.000000,1.000000,0.000000,1.000000,0.000000,0.000000);
+	uv(1.000000,0.000000,1.000000,1.000000,0.000000,0.000000);
+	uv(1.000000,1.000000,1.000000,0.000000,0.000000,0.000000,0.000000,1.000000);
+	uv(1.000000,0.000000,1.000000,1.000000,0.000000,1.000000,0.000000,0.000000);
+	uv(0.000000,1.000000,1.000000,1.000000,1.000000,0.000000,0.000000,0.000000);
+	uv(1.000000,0.000000,1.000000,1.000000,0.000000,1.000000,0.000000,0.000000);
+	uv(1.000000,0.000000,1.000000,1.000000,0.000000,1.000000,0.000000,0.000000);
+	uv(0.000000,1.000000,1.000000,1.000000,1.000000,0.000000,0.000000,0.000000);
+	uv(1.000000,0.000000,1.000000,1.000000,0.000000,1.000000,0.000000,0.000000);
+	uv(0.000000,1.000000,1.000000,1.000000,1.000000,0.000000,0.000000,0.000000);
+	uv(1.000000,1.000000,1.000000,0.000000,0.000000,0.000000,0.000000,1.000000);
+	uv(1.000000,0.000000,1.000000,1.000000,0.000000,1.000000,0.000000,0.000000);
+	uv(0.000000,0.000000,1.000000,0.000000,1.000000,1.000000,0.000000,1.000000);
+	uv(1.000000,0.000000,1.000000,1.000000,0.000000,1.000000,0.000000,0.000000);
+	uv(1.000000,1.000000,1.000000,0.000000,0.000000,0.000000,0.000000,1.000000);
+	uv(1.000000,0.000000,1.000000,1.000000,0.000000,1.000000,0.000000,0.000000);
+	uv(1.000000,0.000000,1.000000,1.000000,0.000000,1.000000,0.000000,0.000000);
+	uv(1.000000,1.000000,1.000000,0.000000,0.000000,0.000000,0.000000,1.000000);
+	uv(1.000000,0.000000,1.000000,1.000000,0.000000,1.000000,0.000000,0.000000);
+	uv(1.000000,0.000000,1.000000,1.000000,0.000000,1.000000,0.000000,0.000000);
+	uv(0.000000,0.000000,1.000000,0.000000,1.000000,1.000000,0.000000,1.000000);
+	uv(0.000000,1.000000,1.000000,1.000000,1.000000,0.000000,0.000000,0.000000);
+	uv(1.000000,1.000000,1.000000,0.000000,0.000000,0.000000,0.000000,1.000000);
+	uv(1.000000,0.000000,1.000000,1.000000,0.000000,1.000000,0.000000,0.000000);
+	uv(0.000000,1.000000,1.000000,1.000000,1.000000,0.000000,0.000000,0.000000);
+	uv(1.000000,0.000000,1.000000,1.000000,0.000000,1.000000,0.000000,0.000000);
+	uv(1.000000,0.000000,1.000000,1.000000,0.000000,1.000000,0.000000,0.000000);
+	uv(1.000000,0.000000,1.000000,1.000000,0.000000,1.000000,0.000000,0.000000);
+	uv(0.000000,1.000000,1.000000,1.000000,1.000000,0.000000,0.000000,0.000000);
+	uv(1.000000,0.000000,1.000000,1.000000,0.000000,1.000000,0.000000,0.000000);
+	uv(0.000000,1.000000,1.000000,1.000000,1.000000,0.000000,0.000000,0.000000);
+	uv(1.000000,0.000000,1.000000,1.000000,0.000000,1.000000,0.000000,0.000000);
+	uv(0.000000,1.000000,1.000000,1.000000,1.000000,0.000000,0.000000,0.000000);
+	uv(1.000000,0.000000,1.000000,1.000000,0.000000,1.000000,0.000000,0.000000);
+	uv(1.000000,0.000000,1.000000,1.000000,0.000000,1.000000,0.000000,0.000000);
+	uv(0.000000,1.000000,1.000000,1.000000,1.000000,0.000000,0.000000,0.000000);
+	uv(1.000000,0.000000,1.000000,1.000000,0.000000,1.000000,0.000000,0.000000);
+	uv(1.000000,0.000000,1.000000,1.000000,0.000000,1.000000,0.000000,0.000000);
+	uv(1.000000,0.000000,1.000000,1.000000,0.000000,1.000000,0.000000,0.000000);
+	uv(0.000000,1.000000,1.000000,1.000000,1.000000,0.000000,0.000000,0.000000);
+	uv(1.000000,0.000000,1.000000,1.000000,0.000000,1.000000,0.000000,0.000000);
+	uv(1.000000,0.000000,1.000000,1.000000,0.000000,0.000000);
+	uv(0.000000,1.000000,1.000000,1.000000,1.000000,0.000000,0.000000,0.000000);
+	uv(1.000000,0.000000,1.000000,1.000000,0.000000,1.000000,0.000000,0.000000);
+	uv(1.000000,0.000000,1.000000,1.000000,0.000000,1.000000,0.000000,0.000000);
+	uv(1.000000,0.000000,1.000000,1.000000,0.000000,1.000000,0.000000,0.000000);
+	uv(1.000000,0.000000,1.000000,1.000000,0.000000,1.000000,0.000000,0.000000);
+	uv(1.000000,0.000000,1.000000,1.000000,0.000000,1.000000,0.000000,0.000000);
+	uv(1.000000,1.000000,1.000000,0.000000,0.000000,0.000000,0.000000,1.000000);
+	uv(0.000000,0.000000,1.000000,0.000000,1.000000,1.000000,0.000000,1.000000);
+	uv(1.000000,0.000000,0.000000,0.175707,0.337951,0.000000);
+	uv(0.000000,1.000000,1.000000,1.000000,1.000000,0.000000,0.000000,0.000000);
+	uv(1.000000,0.000000,0.000000,0.000000,1.000000,1.000000);
+	uv(1.000000,1.000000,0.000000,1.000000,0.000000,1.000000,1.000000,1.000000);
+	uv(1.000000,1.000000,1.000000,0.000000,0.000000,0.000000,0.000000,1.000000);
+	uv(1.000000,0.000000,1.000000,1.000000,0.000000,1.000000,0.000000,0.000000);
+	uv(1.000000,0.000000,1.000000,1.000000,0.000000,1.000000,0.000000,0.000000);
+	uv(1.000000,0.000000,1.000000,1.000000,0.000000,1.000000,0.000000,0.000000);
+	uv(1.000000,0.000000,1.000000,1.000000,0.000000,1.000000,0.000000,0.000000);
+	uv(0.000000,1.000000,1.000000,1.000000,1.000000,0.000000,0.000000,0.000000);
+	uv(0.000000,0.000000,1.000000,0.000000,1.000000,1.000000,0.000000,1.000000);
+	uv(0.000000,0.000000,1.000000,0.000000,1.000000,1.000000,0.000000,1.000000);
+	uv(0.000000,1.000000,1.000000,1.000000,1.000000,0.000000,0.000000,0.000000);
+	uv(0.000000,1.000000,1.000000,1.000000,1.000000,0.000000,0.000000,0.000000);
+	uv(0.000000,1.000000,1.000000,1.000000,1.000000,0.000000,0.000000,0.000000);
+	uv(0.000000,1.000000,1.000000,1.000000,1.000000,0.000000,0.000000,0.000000);
+	uv(0.000000,1.000000,1.000000,1.000000,1.000000,0.000000,0.000000,0.000000);
+	uv(1.000000,1.000000,1.000000,0.000000,0.000000,0.000000);
+	uv(0.000000,0.000000,1.000000,0.000000,1.000000,1.000000,0.000000,1.000000);
+	uv(0.000000,1.000000,1.000000,1.000000,1.000000,0.000000,0.000000,0.000000);
+	uv(0.000000,0.000000,1.000000,0.000000,1.000000,1.000000,0.000000,1.000000);
+	uv(0.000000,1.000000,1.000000,1.000000,1.000000,0.000000,0.000000,0.000000);
+	uv(0.000000,1.000000,1.000000,1.000000,1.000000,0.000000,0.000000,0.000000);
+	uv(0.000000,0.000000,1.000000,0.000000,1.000000,1.000000,0.000000,1.000000);
+	uv(0.000000,1.000000,1.000000,1.000000,1.000000,0.000000,0.000000,0.000000);
+	uv(0.000000,1.000000,1.000000,1.000000,1.000000,0.000000,0.000000,0.000000);
+	uv(0.000000,0.000000,1.000000,0.000000,1.000000,1.000000,0.000000,1.000000);
+	uv(0.000000,1.000000,1.000000,1.000000,1.000000,0.000000,0.000000,0.000000);
+	uv(0.000000,1.000000,1.000000,1.000000,1.000000,0.000000,0.000000,0.000000);
+	uv(0.000000,1.000000,1.000000,1.000000,1.000000,0.000000,0.000000,0.000000);
+	uv(0.000000,0.000000,1.000000,0.000000,1.000000,1.000000,0.000000,1.000000);
+	uv(0.000000,1.000000,1.000000,1.000000,1.000000,0.000000,0.000000,0.000000);
+	uv(0.000000,1.000000,1.000000,1.000000,1.000000,0.000000,0.000000,0.000000);
+	uv(0.000000,0.000000,1.000000,0.000000,1.000000,1.000000,0.000000,1.000000);
+	uv(0.000000,1.000000,1.000000,1.000000,1.000000,0.000000,0.000000,0.000000);
+	uv(0.000000,1.000000,1.000000,1.000000,1.000000,0.000000,0.000000,0.000000);
+	uv(1.000000,1.000000,1.000000,0.000000,0.000000,0.000000);
+	uv(0.000000,0.000000,1.000000,0.000000,1.000000,1.000000,0.000000,1.000000);
+	uv(0.000000,0.000000,1.000000,0.000000,1.000000,1.000000,0.000000,1.000000);
+	uv(0.000000,1.000000,1.000000,1.000000,1.000000,0.000000,0.000000,0.000000);
+	uv(0.000000,1.000000,1.000000,1.000000,1.000000,0.000000,0.000000,0.000000);
+	uv(0.000000,1.000000,1.000000,1.000000,1.000000,0.000000,0.000000,0.000000);
+	uv(0.000000,1.000000,1.000000,1.000000,1.000000,0.000000,0.000000,0.000000);
+	uv(0.000000,1.000000,1.000000,1.000000,1.000000,0.000000,0.000000,0.000000);
+	uv(0.000000,1.000000,1.000000,1.000000,1.000000,0.000000,0.000000,0.000000);
+	uv(0.000000,1.000000,1.000000,1.000000,1.000000,0.000000,0.000000,0.000000);
+	uv(0.000000,1.000000,1.000000,1.000000,1.000000,0.000000,0.000000,0.000000);
+	uv(0.000000,1.000000,1.000000,1.000000,1.000000,0.000000,0.000000,0.000000);
+	uv(0.000000,1.000000,1.000000,1.000000,1.000000,0.000000,0.000000,0.000000);
+	uv(0.000000,1.000000,1.000000,1.000000,1.000000,0.000000,0.000000,0.000000);
+	uv(0.000000,1.000000,1.000000,1.000000,1.000000,0.000000,0.000000,0.000000);
+	uv(0.000000,0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,1.000000);
+	uv(0.000000,1.000000,1.000000,1.000000,1.000000,0.000000,0.000000,0.000000);
+	uv(0.000000,1.000000,1.000000,1.000000,1.000000,0.000000,0.000000,0.000000);
+	uv(0.000000,1.000000,1.000000,1.000000,1.000000,0.000000,0.000000,0.000000);
+	uv(0.000000,1.000000,1.000000,1.000000,1.000000,0.000000,0.000000,0.000000);
+	uv(0.000000,1.000000,1.000000,1.000000,1.000000,0.000000,0.000000,0.000000);
+	uv(1.000000,1.000000,1.000000,0.000000,0.000000,0.000000);
+	uv(0.000000,1.000000,1.000000,1.000000,1.000000,0.000000,0.000000,0.000000);
+	uv(0.000000,1.000000,1.000000,1.000000,1.000000,0.000000,0.000000,0.000000);
+	uv(0.000000,1.000000,1.000000,1.000000,1.000000,0.000000,0.000000,0.000000);
+	uv(0.000000,1.000000,1.000000,1.000000,1.000000,0.000000,0.000000,0.000000);
+	uv(0.000000,1.000000,1.000000,1.000000,1.000000,0.000000,0.000000,0.000000);
+	uv(0.000000,1.000000,1.000000,1.000000,1.000000,0.000000,0.000000,0.000000);
+	uv(0.000000,0.000000,1.000000,0.000000,1.000000,1.000000,0.000000,1.000000);
+	uv(0.000000,0.000000,1.000000,0.000000,1.000000,1.000000,0.000000,1.000000);
+	uv(0.000000,0.175707,1.000000,0.000000,0.337951,0.000000);
+	uv(0.000000,1.000000,1.000000,1.000000,1.000000,0.000000,0.000000,0.000000);
+	uv(0.000000,0.000000,1.000000,0.000000,1.000000,1.000000);
+	uv(0.000000,1.000000,0.000000,1.000000,1.000000,1.000000,1.000000,1.000000);
+	uv(0.000000,0.000000,1.000000,0.000000,1.000000,1.000000,0.000000,1.000000);
+	uv(0.000000,1.000000,1.000000,1.000000,1.000000,0.000000,0.000000,0.000000);
+	uv(0.000000,1.000000,1.000000,1.000000,1.000000,0.000000,0.000000,0.000000);
+	uv(0.000000,1.000000,1.000000,1.000000,1.000000,0.000000,0.000000,0.000000);
+	uv(0.000000,1.000000,1.000000,1.000000,1.000000,0.000000,0.000000,0.000000);
+	uv(0.000000,1.000000,1.000000,1.000000,1.000000,0.000000,0.000000,0.000000);
+	uv(0.000000,0.000000,1.000000,0.000000,1.000000,1.000000,0.000000,1.000000);
+	uv(0.000000,1.000000,1.000000,1.000000,1.000000,0.000000,0.000000,0.000000);
+	uv(0.000000,1.000000,1.000000,1.000000,1.000000,0.000000,0.000000,0.000000);
+	uv(0.000000,1.000000,1.000000,1.000000,1.000000,0.000000,0.000000,0.000000);
+	uv(0.000000,1.000000,1.000000,1.000000,1.000000,0.000000,0.000000,0.000000);
+	uv(0.000000,1.000000,1.000000,1.000000,1.000000,0.000000,0.000000,0.000000);
+	uv(0.000000,1.000000,1.000000,1.000000,1.000000,0.000000,0.000000,0.000000);
+	uv(0.000000,1.000000,1.000000,1.000000,1.000000,0.000000,0.000000,0.000000);
+	uv(0.000000,1.000000,1.000000,1.000000,1.000000,0.000000,0.000000,0.000000);
+	uv(0.000000,0.000000,1.000000,0.000000,1.000000,1.000000,0.000000,1.000000);
+	uv(0.000000,1.000000,1.000000,1.000000,1.000000,0.000000,0.000000,0.000000);
+	uv(0.000000,1.000000,1.000000,1.000000,1.000000,0.000000,0.000000,0.000000);
+	uv(0.000000,1.000000,1.000000,1.000000,1.000000,0.000000,0.000000,0.000000);
+	uv(0.000000,0.000000,1.000000,0.000000,1.000000,1.000000,0.000000,1.000000);
+	uv(0.000000,0.000000,1.000000,0.000000,1.000000,1.000000,0.000000,1.000000);
+	uv(0.000000,1.000000,1.000000,1.000000,1.000000,0.000000,0.000000,0.000000);
+	uv(0.000000,0.000000,1.000000,0.000000,1.000000,1.000000,0.000000,1.000000);
+	uv(0.000000,1.000000,1.000000,1.000000,1.000000,0.000000,0.000000,0.000000);
+	uv(1.000000,1.000000,1.000000,0.000000,0.000000,0.000000);
+	uv(0.000000,0.000000,1.000000,0.000000,1.000000,1.000000,0.000000,1.000000);
+	uv(0.000000,1.000000,1.000000,1.000000,1.000000,0.000000,0.000000,0.000000);
+	uv(0.000000,0.000000,1.000000,0.000000,1.000000,1.000000,0.000000,1.000000);
+	uv(0.000000,1.000000,1.000000,1.000000,1.000000,0.000000,0.000000,0.000000);
+	uv(1.000000,1.000000,1.000000,1.000000,1.000000,0.000000,1.000000,0.000000);
+	uv(0.000000,1.000000,1.000000,1.000000,1.000000,0.000000,0.000000,0.000000);
+	uv(0.000000,1.000000,1.000000,1.000000,1.000000,0.000000,0.000000,0.000000);
+	uv(0.000000,1.000000,1.000000,1.000000,1.000000,0.000000,0.000000,0.000000);
+	uv(0.000000,1.000000,1.000000,1.000000,1.000000,0.000000,0.000000,0.000000);
+	uv(1.000000,1.000000,1.000000,0.000000,0.000000,0.000000,0.000000,1.000000);
+	uv(1.000000,0.000000,1.000000,1.000000,0.000000,1.000000,0.000000,0.000000);
+	uv(1.000000,0.000000,1.000000,1.000000,0.000000,1.000000,0.000000,0.000000);
+	uv(1.000000,0.000000,1.000000,1.000000,0.000000,1.000000,0.000000,0.000000);
+	uv(1.000000,0.000000,1.000000,1.000000,0.000000,1.000000,0.000000,0.000000);
+	uv(1.000000,0.000000,1.000000,1.000000,0.000000,1.000000,0.000000,0.000000);
+	uv(1.000000,0.000000,1.000000,1.000000,0.000000,0.000000);
+	uv(1.000000,1.000000,1.000000,0.000000,0.000000,0.000000,0.000000,1.000000);
+	uv(1.000000,0.000000,1.000000,1.000000,0.000000,1.000000,0.000000,0.000000);
+	uv(1.000000,1.000000,1.000000,0.000000,0.000000,0.000000,0.000000,1.000000);
+	uv(1.000000,0.000000,1.000000,1.000000,0.000000,1.000000,0.000000,0.000000);
+	uv(1.000000,0.000000,1.000000,1.000000,0.000000,1.000000,0.000000,0.000000);
+	uv(1.000000,1.000000,1.000000,0.000000,0.000000,0.000000,0.000000,1.000000);
+	uv(1.000000,0.000000,1.000000,1.000000,0.000000,1.000000,0.000000,0.000000);
+	uv(1.000000,0.000000,1.000000,1.000000,0.000000,1.000000,0.000000,0.000000);
+	uv(1.000000,1.000000,1.000000,0.000000,0.000000,0.000000,0.000000,1.000000);
+	uv(1.000000,0.000000,1.000000,1.000000,0.000000,1.000000,0.000000,0.000000);
+	uv(1.000000,0.000000,1.000000,1.000000,0.000000,1.000000,0.000000,0.000000);
+	uv(1.000000,0.000000,1.000000,1.000000,0.000000,1.000000,0.000000,0.000000);
+	uv(1.000000,1.000000,1.000000,0.000000,0.000000,0.000000,0.000000,1.000000);
+	uv(1.000000,0.000000,1.000000,1.000000,0.000000,1.000000,0.000000,0.000000);
+	uv(1.000000,0.000000,1.000000,1.000000,0.000000,1.000000,0.000000,0.000000);
+	uv(1.000000,1.000000,1.000000,0.000000,0.000000,0.000000,0.000000,1.000000);
+	uv(1.000000,0.000000,1.000000,1.000000,0.000000,1.000000,0.000000,0.000000);
+	uv(1.000000,0.000000,1.000000,1.000000,0.000000,1.000000,0.000000,0.000000);
+	uv(1.000000,0.000000,1.000000,1.000000,0.000000,0.000000);
+	uv(1.000000,1.000000,1.000000,0.000000,0.000000,0.000000,0.000000,1.000000);
+	uv(1.000000,1.000000,1.000000,0.000000,0.000000,0.000000,0.000000,1.000000);
+	uv(1.000000,0.000000,1.000000,1.000000,0.000000,1.000000,0.000000,0.000000);
+	uv(1.000000,0.000000,1.000000,1.000000,0.000000,1.000000,0.000000,0.000000);
+	uv(1.000000,0.000000,1.000000,1.000000,0.000000,1.000000,0.000000,0.000000);
+	uv(1.000000,0.000000,1.000000,1.000000,0.000000,1.000000,0.000000,0.000000);
+	uv(1.000000,0.000000,1.000000,1.000000,0.000000,1.000000,0.000000,0.000000);
+	uv(1.000000,0.000000,1.000000,1.000000,0.000000,1.000000,0.000000,0.000000);
+	uv(1.000000,0.000000,1.000000,1.000000,0.000000,1.000000,0.000000,0.000000);
+	uv(1.000000,0.000000,1.000000,1.000000,0.000000,1.000000,0.000000,0.000000);
+	uv(1.000000,0.000000,1.000000,1.000000,0.000000,1.000000,0.000000,0.000000);
+	uv(1.000000,0.000000,1.000000,1.000000,0.000000,1.000000,0.000000,0.000000);
+	uv(1.000000,0.000000,1.000000,1.000000,0.000000,1.000000,0.000000,0.000000);
+	uv(1.000000,0.000000,1.000000,1.000000,0.000000,1.000000,0.000000,0.000000);
+	uv(0.000000,1.000000,0.000000,0.000000,0.000000,0.000000,0.000000,1.000000);
+	uv(1.000000,0.000000,1.000000,1.000000,0.000000,1.000000,0.000000,0.000000);
+	uv(1.000000,0.000000,1.000000,1.000000,0.000000,1.000000,0.000000,0.000000);
+	uv(1.000000,0.000000,1.000000,1.000000,0.000000,1.000000,0.000000,0.000000);
+	uv(1.000000,0.000000,1.000000,1.000000,0.000000,1.000000,0.000000,0.000000);
+	uv(1.000000,0.000000,1.000000,1.000000,0.000000,1.000000,0.000000,0.000000);
+	uv(1.000000,0.000000,1.000000,1.000000,0.000000,0.000000);
+	uv(1.000000,0.000000,1.000000,1.000000,0.000000,1.000000,0.000000,0.000000);
+	uv(1.000000,0.000000,1.000000,1.000000,0.000000,1.000000,0.000000,0.000000);
+	uv(1.000000,0.000000,1.000000,1.000000,0.000000,1.000000,0.000000,0.000000);
+	uv(1.000000,0.000000,1.000000,1.000000,0.000000,1.000000,0.000000,0.000000);
+	uv(1.000000,0.000000,1.000000,1.000000,0.000000,1.000000,0.000000,0.000000);
+	uv(1.000000,0.000000,1.000000,1.000000,0.000000,1.000000,0.000000,0.000000);
+	uv(1.000000,1.000000,1.000000,0.000000,0.000000,0.000000,0.000000,1.000000);
+	uv(1.000000,1.000000,1.000000,0.000000,0.000000,0.000000,0.000000,1.000000);
+	uv(1.000000,0.000000,0.000000,0.175707,0.337951,0.000000);
+	uv(1.000000,0.000000,1.000000,1.000000,0.000000,1.000000,0.000000,0.000000);
+	uv(1.000000,0.000000,0.000000,0.000000,1.000000,1.000000);
+	uv(1.000000,1.000000,0.000000,1.000000,0.000000,1.000000,1.000000,1.000000);
+	uv(1.000000,1.000000,1.000000,0.000000,0.000000,0.000000,0.000000,1.000000);
+	uv(1.000000,0.000000,1.000000,1.000000,0.000000,1.000000,0.000000,0.000000);
+	uv(1.000000,0.000000,1.000000,1.000000,0.000000,1.000000,0.000000,0.000000);
+	uv(1.000000,0.000000,1.000000,1.000000,0.000000,1.000000,0.000000,0.000000);
+	uv(1.000000,0.000000,1.000000,1.000000,0.000000,1.000000,0.000000,0.000000);
+	uv(1.000000,0.000000,1.000000,1.000000,0.000000,1.000000,0.000000,0.000000);
+	uv(1.000000,1.000000,1.000000,0.000000,0.000000,0.000000,0.000000,1.000000);
+	uv(1.000000,0.000000,1.000000,1.000000,0.000000,1.000000,0.000000,0.000000);
+	uv(1.000000,0.000000,1.000000,1.000000,0.000000,1.000000,0.000000,0.000000);
+	uv(1.000000,0.000000,1.000000,1.000000,0.000000,1.000000,0.000000,0.000000);
+	uv(1.000000,0.000000,1.000000,1.000000,0.000000,1.000000,0.000000,0.000000);
+	uv(1.000000,0.000000,1.000000,1.000000,0.000000,1.000000,0.000000,0.000000);
+	uv(1.000000,0.000000,1.000000,1.000000,0.000000,1.000000,0.000000,0.000000);
+	uv(1.000000,0.000000,1.000000,1.000000,0.000000,1.000000,0.000000,0.000000);
+	uv(1.000000,0.000000,1.000000,1.000000,0.000000,1.000000,0.000000,0.000000);
+	uv(1.000000,1.000000,1.000000,0.000000,0.000000,0.000000,0.000000,1.000000);
+	uv(1.000000,0.000000,1.000000,1.000000,0.000000,1.000000,0.000000,0.000000);
+	uv(1.000000,0.000000,1.000000,1.000000,0.000000,1.000000,0.000000,0.000000);
+	uv(1.000000,0.000000,1.000000,1.000000,0.000000,1.000000,0.000000,0.000000);
+	uv(1.000000,1.000000,1.000000,0.000000,0.000000,0.000000,0.000000,1.000000);
+	uv(1.000000,1.000000,1.000000,0.000000,0.000000,0.000000,0.000000,1.000000);
+	uv(1.000000,0.000000,1.000000,1.000000,0.000000,1.000000,0.000000,0.000000);
+	uv(1.000000,1.000000,1.000000,0.000000,0.000000,0.000000,0.000000,1.000000);
+	uv(1.000000,0.000000,1.000000,1.000000,0.000000,1.000000,0.000000,0.000000);
+	uv(1.000000,0.000000,1.000000,1.000000,0.000000,0.000000);
+	uv(1.000000,1.000000,1.000000,0.000000,0.000000,0.000000,0.000000,1.000000);
+	uv(1.000000,0.000000,1.000000,1.000000,0.000000,1.000000,0.000000,0.000000);
+	uv(1.000000,1.000000,1.000000,0.000000,0.000000,0.000000,0.000000,1.000000);
+	uv(1.000000,0.000000,1.000000,1.000000,0.000000,1.000000,0.000000,0.000000);
+	uv(1.000000,0.000000,1.000000,1.000000,1.000000,1.000000,1.000000,0.000000);
+	uv(1.000000,0.000000,1.000000,1.000000,0.000000,1.000000,0.000000,0.000000);
+	uv(1.000000,0.000000,1.000000,1.000000,0.000000,1.000000,0.000000,0.000000);
+	uv(1.000000,0.000000,1.000000,1.000000,0.000000,1.000000,0.000000,0.000000);
+	uv(1.000000,0.000000,1.000000,1.000000,0.000000,1.000000,0.000000,0.000000);
+	uv(0.000000,1.000000,1.000000,1.000000,1.000000,0.000000);
+	uv(0.000000,0.000000,0.000000,0.000000,0.000000,0.000000);
+	uv(0.000000,0.000000,0.000000,0.000000,0.000000,0.000000);
+	uv(0.000000,0.000000,0.000000,0.000000,0.000000,0.000000);
+	uv(0.000000,0.000000,0.000000,0.000000,0.000000,0.000000);
+	uv(0.000000,0.000000,0.000000,0.000000,0.000000,0.000000);
+	uv(0.000000,0.000000,0.000000,0.000000,0.000000,0.000000);
+	uv(0.000000,0.000000,0.000000,0.000000,0.000000,0.000000);
+	uv(0.000000,0.000000,0.000000,0.000000,0.000000,0.000000);
+	uv(0.000000,0.000000,0.000000,0.000000,0.000000,0.000000);
+	uv(0.000000,0.000000,0.000000,0.000000,0.000000,0.000000);
+	uv(0.000000,0.000000,0.000000,0.000000,0.000000,0.000000);
+	uv(0.000000,0.000000,0.000000,0.000000,0.000000,0.000000);
+	uv(0.000000,0.000000,0.000000,0.000000,0.000000,0.000000);
+	uv(0.000000,0.000000,0.000000,0.000000,0.000000,0.000000);
+	uv(0.000000,0.000000,0.000000,0.000000,0.000000,0.000000);
+	uv(0.000000,0.000000,0.000000,0.000000,0.000000,0.000000);
+	uv(0.000000,0.000000,0.000000,0.000000,0.000000,0.000000);
+	uv(0.000000,0.000000,0.000000,0.000000,0.000000,0.000000);
+	uv(0.000000,0.000000,0.000000,0.000000,0.000000,0.000000);
+	uv(0.000000,0.000000,0.000000,0.000000,0.000000,0.000000);
+	uv(0.000000,0.000000,0.000000,0.000000,0.000000,0.000000);
+	uv(0.000000,0.000000,0.000000,0.000000,0.000000,0.000000);
+	uv(0.000000,0.000000,0.000000,0.000000,0.000000,0.000000);
+	uv(0.000000,0.000000,0.000000,0.000000,0.000000,0.000000);
+	uv(0.000000,0.000000,0.000000,0.000000,0.000000,0.000000);
+	uv(0.000000,0.000000,0.000000,0.000000,0.000000,0.000000);
+	uv(0.000000,0.000000,0.000000,0.000000,0.000000,0.000000);
+	uv(0.000000,0.000000,0.000000,0.000000,0.000000,0.000000);
+	uv(0.000000,0.000000,0.000000,0.000000,0.000000,0.000000);
+	uv(0.000000,0.000000,0.000000,0.000000,0.000000,0.000000);
+	uv(0.000000,0.000000,0.000000,0.000000,0.000000,0.000000);
+	uv(0.000000,0.000000,0.000000,0.000000,0.000000,0.000000);
+	uv(0.000000,0.000000,0.000000,0.000000,0.000000,0.000000);
+	uv(0.000000,0.000000,0.000000,0.000000,0.000000,0.000000);
+	uv(0.000000,0.000000,0.000000,0.000000,0.000000,0.000000);
+	uv(0.000000,0.000000,0.000000,0.000000,0.000000,0.000000);
+	uv(0.000000,0.000000,0.000000,0.000000,0.000000,0.000000);
+	uv(0.000000,0.000000,0.000000,0.000000,0.000000,0.000000);
+	uv(0.000000,0.000000,0.000000,0.000000,0.000000,0.000000);
+	uv(0.000000,0.000000,0.000000,0.000000,0.000000,0.000000);
+	uv(0.000000,0.000000,0.000000,0.000000,0.000000,0.000000);
+	uv(0.000000,0.000000,0.000000,0.000000,0.000000,0.000000);
+	uv(0.000000,0.000000,0.000000,0.000000,0.000000,0.000000);
+	uv(0.000000,0.000000,0.000000,0.000000,0.000000,0.000000);
+	uv(0.000000,0.000000,0.000000,0.000000,0.000000,0.000000);
+	uv(0.000000,0.000000,0.000000,0.000000,0.000000,0.000000);
+	uv(0.000000,0.000000,0.000000,0.000000,0.000000,0.000000);
+	uv(0.000000,0.000000,0.000000,0.000000,0.000000,0.000000);
+	uv(0.000000,0.000000,0.000000,0.000000,0.000000,0.000000);
+	uv(0.000000,0.000000,0.000000,0.000000,0.000000,0.000000);
+	uv(0.000000,0.000000,0.000000,0.000000,0.000000,0.000000);
+	uv(0.000000,0.000000,0.000000,0.000000,0.000000,0.000000);
+	uv(0.000000,0.000000,0.000000,0.000000,0.000000,0.000000);
+	uv(0.000000,0.000000,0.000000,0.000000,0.000000,0.000000);
+	uv(0.000000,0.000000,0.000000,0.000000,0.000000,0.000000);
+	uv(0.000000,0.000000,0.000000,0.000000,0.000000,0.000000);
+	uv(1.000000,1.000000,0.000000,0.000000,0.000000,1.000000);
+	uv(0.000000,0.000000,1.000000,1.000000,1.000000,0.000000);
+	uv(1.000000,0.661423,0.464092,1.000000,1.000000,1.000000);
+	uv(0.464092,1.000000,1.000000,0.661423,0.464092,0.910164);
+	uv(0.464092,0.910164,1.000000,0.661423,0.000000,0.910164);
+	uv(0.000000,0.910164,1.000000,0.661423,0.673172,0.739133);
+	uv(0.673172,0.739133,1.000000,0.661423,0.673172,0.661423);
+	uv(0.437805,0.256123,0.090594,0.566525,0.437805,0.739133);
+	uv(0.090594,0.566525,0.437805,0.256123,0.368376,0.269285);
+	uv(0.090594,0.566525,0.368376,0.269285,0.090594,0.282572);
+	uv(0.090594,0.282572,0.368376,0.269285,0.000000,0.282572);
+	uv(0.000000,0.282572,0.142719,0.269285,0.000000,0.129525);
+	uv(0.142719,0.269285,0.000000,0.282572,0.368376,0.269285);
+	uv(0.000000,0.129525,0.142719,0.269285,0.142719,0.000000);
+	uv(0.000000,0.910164,0.437805,0.739133,0.000000,0.566525);
+	uv(0.437805,0.739133,0.000000,0.910164,0.673172,0.739133);
+	uv(0.000000,0.566525,0.437805,0.739133,0.090594,0.566525);
+	uv(1.000000,0.731496,0.955160,0.548724,0.955160,0.696637);
+	uv(0.102105,1.000000,0.000000,0.000000,0.000000,1.000000);
+	uv(0.000000,0.000000,0.102105,1.000000,0.102105,0.640334);
+	uv(0.000000,0.000000,0.102105,0.640334,0.168495,0.431989);
+	uv(0.000000,0.000000,0.168495,0.431989,1.000000,0.000000);
+	uv(0.168495,0.431989,0.102105,0.640334,0.168495,0.640334);
+	uv(1.000000,0.000000,0.168495,0.431989,0.800898,0.431989);
+	uv(1.000000,0.000000,0.800898,0.431989,0.955160,0.548724);
+	uv(1.000000,0.000000,0.955160,0.548724,1.000000,0.731496);
+	uv(1.000000,1.000000,0.000000,0.000000,0.000000,1.000000);
+	uv(0.061049,1.000000,0.227543,0.879885,0.061049,0.446583);
+	uv(0.227543,0.879885,0.061049,1.000000,0.278006,1.000000);
+	uv(0.227543,0.879885,0.278006,1.000000,0.278006,0.981312);
+	uv(0.227543,0.879885,0.278006,0.981312,0.822948,0.879885);
+	uv(0.822948,0.879885,0.278006,0.981312,1.000000,0.981312);
+	uv(0.822948,0.879885,1.000000,0.981312,0.822948,0.000324);
+	uv(0.822948,0.000324,1.000000,0.981312,1.000000,0.000324);
+	uv(1.000000,0.000324,1.000000,0.981312,1.000000,0.445877);
+	uv(0.061049,0.446583,0.000000,0.000000,0.000000,0.446583);
+	uv(0.000000,0.000000,0.061049,0.446583,0.227543,0.000000);
+	uv(0.227543,0.000000,0.061049,0.446583,0.227543,0.879885);
+	uv(1.000000,1.000000,0.000000,0.000000,0.000000,1.000000);
+	uv(1.000000,0.000000,0.000000,1.000000,1.000000,1.000000);
+	uv(0.000000,1.000000,1.000000,0.000000,0.000000,0.000000);
+	uv(1.000000,1.000000,0.000000,0.914953,0.000000,1.000000);
+	uv(0.000000,0.914953,1.000000,1.000000,0.674255,0.914953);
+	uv(0.674255,0.914953,1.000000,1.000000,0.674255,0.104837);
+	uv(0.674255,0.104837,1.000000,0.000000,0.316549,0.000000);
+	uv(1.000000,0.000000,0.674255,0.104837,1.000000,1.000000);
+	uv(1.000000,0.000000,0.000000,1.000000,1.000000,1.000000);
+	uv(0.000000,1.000000,1.000000,0.000000,0.000000,0.000000);
+	uv(1.000000,1.000000,0.000000,0.000000,0.000000,1.000000);
+	uv(0.000000,0.000000,1.000000,1.000000,1.000000,0.000000);
+	uv(1.000000,0.000000,0.000000,1.000000,1.000000,1.000000);
+	uv(0.000000,1.000000,1.000000,0.000000,0.000000,0.175707);
+	uv(0.000000,0.175707,1.000000,0.000000,0.337951,0.000000);
+	uv(1.000000,1.000000,0.000000,0.000000,0.000000,1.000000);
+	uv(0.000000,0.000000,1.000000,1.000000,1.000000,0.000000);
+	uv(1.000000,1.000000,0.000000,0.000000,0.000000,1.000000);
+	uv(0.000000,0.000000,1.000000,1.000000,1.000000,0.000000);
+	uv(1.000000,1.000000,0.245856,0.915939,0.000000,1.000000);
+	uv(0.245856,0.915939,1.000000,1.000000,1.000000,0.000000);
+	uv(0.245856,0.915939,1.000000,0.000000,0.245856,0.298517);
+	uv(0.245856,0.298517,1.000000,0.000000,0.822603,0.000000);
+	uv(0.000000,0.915939,0.000000,1.000000,0.245856,0.915939);
+	uv(1.000000,1.000000,0.000000,0.000000,0.000000,0.327877);
+	uv(0.000000,0.000000,1.000000,1.000000,1.000000,0.000000);
+	uv(1.000000,1.000000,0.000000,0.000000,0.000000,1.000000);
+	uv(0.000000,0.000000,1.000000,1.000000,1.000000,0.000000);
+	uv(1.000000,0.000000,0.000000,1.000000,1.000000,1.000000);
+	uv(0.000000,1.000000,1.000000,0.000000,0.000000,0.000000);
+	uv(0.294465,1.000000,0.000000,0.336193,0.000000,1.000000);
+	uv(0.000000,0.336193,0.294465,1.000000,0.000000,0.000000);
+	uv(0.000000,0.000000,0.294465,1.000000,1.000000,0.000000);
+	uv(1.000000,0.000000,0.294465,1.000000,0.685067,1.000000);
+	uv(1.000000,0.000000,0.685067,1.000000,1.000000,1.000000);
+	uv(1.000000,0.000000,1.000000,1.000000,1.000000,0.336193);
+	uv(1.000000,1.000000,0.000000,0.000000,0.000000,1.000000);
+	uv(0.000000,0.000000,1.000000,1.000000,1.000000,0.000000);
+	uv(0.000000,1.000000,1.000000,0.000000,0.000000,0.000000);
+	uv(1.000000,0.000000,0.000000,1.000000,1.000000,1.000000);
+	uv(1.000000,1.000000,0.000000,0.000000,0.000000,1.000000);
+	uv(1.000000,0.000000,0.929503,1.000000,1.000000,1.000000);
+	uv(0.929503,1.000000,1.000000,0.000000,0.306924,1.000000);
+	uv(0.306924,1.000000,1.000000,0.000000,0.000000,1.000000);
+	uv(0.000000,1.000000,1.000000,0.000000,0.847512,0.136050);
+	uv(0.000000,1.000000,0.005222,0.136050,0.000000,0.000000);
+	uv(0.005222,0.136050,0.000000,1.000000,0.847512,0.136050);
+	uv(0.000000,0.000000,0.005222,0.136050,0.005222,0.000000);
+	uv(1.000000,1.000000,0.000000,0.000000,0.000000,1.000000);
+	uv(0.000000,0.000000,1.000000,1.000000,1.000000,0.000000);
+	uv(1.000000,0.000000,0.447073,0.203384,1.000000,0.673186);
+	uv(0.447073,0.203384,1.000000,0.000000,0.253720,0.203384);
+	uv(0.253720,0.203384,1.000000,0.000000,0.355479,0.068995);
+	uv(0.355479,0.068995,1.000000,0.000000,0.355479,0.000000);
+	uv(0.103827,0.253697,0.000000,1.000000,0.103827,1.000000);
+	uv(0.000000,1.000000,0.103827,0.253697,0.000000,0.068995);
+	uv(0.000000,0.068995,0.103827,0.253697,0.253720,0.203384);
+	uv(0.000000,0.068995,0.253720,0.203384,0.355479,0.068995);
+	uv(1.000000,1.000000,0.000000,0.000000,0.000000,1.000000);
+	uv(0.000000,0.000000,1.000000,1.000000,1.000000,0.500000);
+	uv(0.000000,0.000000,1.000000,0.500000,1.000000,0.000000);
+	uv(1.000000,0.000000,0.000000,1.000000,1.000000,1.000000);
+	uv(0.000000,1.000000,1.000000,0.000000,0.108075,0.312773);
+	uv(0.000000,0.312773,0.000000,1.000000,0.108075,0.312773);
+	uv(1.000000,1.000000,0.000000,0.000000,0.000000,1.000000);
+	uv(0.000000,0.000000,1.000000,1.000000,0.409219,0.000000);
+	uv(1.000000,1.000000,0.000000,0.000000,0.000000,1.000000);
+	uv(0.000000,0.000000,1.000000,1.000000,1.000000,0.000000);
+	uv(0.000000,1.000000,1.000000,0.000000,0.000000,0.000000);
+	uv(1.000000,0.000000,0.000000,1.000000,1.000000,1.000000);
+	uv(1.000000,1.000000,0.000000,0.000000,0.000000,1.000000);
+	uv(0.000000,0.000000,1.000000,1.000000,1.000000,0.128787);
+	uv(1.000000,0.000000,0.000000,1.000000,0.134547,1.000000);
+	uv(0.000000,1.000000,1.000000,0.000000,0.000000,0.000000);
+	uv(0.000000,1.000000,0.923544,0.994545,0.000000,0.000000);
+	uv(0.923544,0.994545,0.000000,1.000000,1.000000,1.000000);
+	uv(0.000000,0.000000,0.923544,0.994545,0.923544,0.506194);
+	uv(0.923544,0.056734,0.000000,0.000000,0.923544,0.506194);
+	uv(1.000000,1.000000,0.000000,0.000000,0.000000,1.000000);
+	uv(0.000000,0.000000,1.000000,1.000000,1.000000,0.470466);
+	uv(1.000000,0.411030,0.719721,1.000000,1.000000,1.000000);
+	uv(0.719721,1.000000,1.000000,0.411030,0.000000,1.000000);
+	uv(0.000000,1.000000,1.000000,0.411030,0.253720,0.696959);
+	uv(0.253720,0.696959,1.000000,0.411030,0.253720,0.000000);
+	uv(0.253720,0.000000,1.000000,0.411030,0.447073,0.000000);
+	uv(0.000000,0.696959,0.000000,1.000000,0.253720,0.696959);
+	uv(1.000000,1.000000,0.000000,0.000000,0.000000,1.000000);
+	uv(0.000000,0.000000,1.000000,1.000000,1.000000,0.000000);
+	uv(1.000000,1.000000,0.000000,0.000000,0.000000,1.000000);
+	uv(0.000000,0.000000,1.000000,1.000000,1.000000,0.000000);
+	uv(1.000000,0.000000,1.000000,1.000000,1.000000,0.748310);
+	uv(1.000000,0.000000,1.000000,0.748310,1.000000,0.452054);
+	uv(1.000000,0.000000,1.000000,0.452054,1.000000,0.190273);
+	uv(1.000000,1.000000,0.000000,0.000000,0.000000,1.000000);
+	uv(0.000000,0.000000,1.000000,1.000000,0.343006,0.139296);
+	uv(0.000000,0.000000,0.343006,0.139296,0.240472,0.000000);
+	uv(0.343006,0.139296,1.000000,1.000000,1.000000,0.139296);
+	uv(1.000000,0.693414,0.000000,1.000000,1.000000,1.000000);
+	uv(0.000000,1.000000,1.000000,0.693414,0.000000,0.000000);
+	uv(0.000000,0.000000,1.000000,0.693414,1.000000,0.000000);
+	uv(0.000000,0.000000,0.000000,0.000000,0.000000,0.000000);
+	uv(0.000000,0.000000,0.000000,0.000000,0.000000,0.000000);
+	uv(0.000000,0.000000,0.000000,0.000000,0.000000,0.000000);
+	uv(0.000000,0.000000,0.000000,0.000000,0.000000,0.000000);
+	uv(0.000000,0.000000,0.000000,0.000000,0.000000,0.000000);
+	uv(0.000000,0.000000,0.000000,0.000000,0.000000,0.000000);
+	uv(0.000000,0.000000,0.000000,0.000000,0.000000,0.000000);
+	uv(0.000000,0.000000,0.000000,0.000000,0.000000,0.000000);
+	uv(0.000000,0.000000,0.000000,0.000000,0.000000,0.000000);
+	uv(0.000000,0.000000,0.000000,0.000000,0.000000,0.000000);
+	uv(0.000000,0.000000,0.000000,0.000000,0.000000,0.000000);
+	uv(0.000000,0.000000,0.000000,0.000000,0.000000,0.000000);
+	uv(1.000000,0.000000,1.000000,0.167065,0.435233,0.000000);
+	uv(0.435233,0.000000,1.000000,0.167065,0.435233,0.286556);
+	uv(0.435233,0.286556,1.000000,0.167065,0.000000,0.791167);
+	uv(0.000000,0.791167,1.000000,0.167065,0.000000,1.000000);
+	uv(1.000000,1.000000,0.000000,1.000000,1.000000,0.167065);
+	uv(1.000000,1.000000,0.000000,0.000000,0.000000,1.000000);
+	uv(0.000000,0.000000,1.000000,1.000000,1.000000,0.000000);
+	uv(1.000000,1.000000,0.000000,0.748310,0.000000,1.000000);
+	uv(0.000000,0.748310,1.000000,1.000000,0.000000,0.452054);
+	uv(0.000000,0.452054,1.000000,1.000000,0.000000,0.190273);
+	uv(0.000000,0.190273,1.000000,1.000000,0.000000,0.026504);
+	uv(0.000000,0.026504,1.000000,1.000000,0.410830,0.026504);
+	uv(0.410830,0.026504,1.000000,1.000000,0.506988,0.000000);
+	uv(0.506988,0.000000,1.000000,1.000000,1.000000,0.000000);
+	uv(0.000000,0.512203,0.316743,0.512203,0.000000,1.000000);
+	uv(0.000000,1.000000,0.316743,0.512203,1.000000,1.000000);
+	uv(1.000000,0.000000,1.000000,1.000000,0.316743,0.512203);
+	uv(1.000000,1.000000,0.000000,1.000000,1.000000,0.000000);
+	uv(0.000000,0.000000,1.000000,0.000000,0.000000,1.000000);
+	uv(0.000000,1.000000,0.000000,0.000000,1.000000,1.000000);
+	uv(1.000000,0.000000,1.000000,1.000000,0.000000,0.000000);
+	uv(0.000000,0.029384,1.000000,0.000000,0.000000,0.000000);
+	uv(1.000000,0.000000,0.000000,0.029384,1.000000,1.000000);
+	uv(1.000000,0.000000,0.000000,1.000000,1.000000,1.000000);
+	uv(1.000000,0.000000,0.000000,1.000000,1.000000,1.000000);
+	uv(1.000000,0.000000,0.000000,1.000000,1.000000,1.000000);
+	uv(0.000000,0.000000,0.000000,0.000000,0.000000,0.000000);
+	uv(0.000000,0.000000,0.000000,0.000000,0.000000,0.000000);
+	uv(0.000000,0.000000,0.000000,0.000000,0.000000,0.000000);
+	uv(0.000000,0.000000,0.000000,0.000000,0.000000,0.000000);
+	uv(0.000000,0.000000,0.000000,0.000000,0.000000,0.000000);
+	uv(0.000000,0.000000,0.000000,0.000000,0.000000,0.000000);
+	uv(0.000000,0.000000,0.000000,0.000000,0.000000,0.000000);
+	uv(0.000000,0.000000,0.000000,0.000000,0.000000,0.000000);
+	uv(0.000000,0.000000,0.000000,0.000000,0.000000,0.000000);
+	uv(0.000000,0.000000,0.000000,0.000000,0.000000,0.000000);
+	uv(0.000000,0.000000,0.000000,0.000000,0.000000,0.000000);
+	uv(0.000000,0.000000,0.000000,0.000000,0.000000,0.000000);
+	uv(0.000000,0.000000,0.000000,0.000000,0.000000,0.000000);
+	uv(0.000000,0.000000,0.000000,0.000000,0.000000,0.000000);
+	uv(0.000000,0.000000,0.000000,0.000000,0.000000,0.000000);
+	uv(0.000000,0.000000,0.000000,0.000000,0.000000,0.000000);
+	uv(0.000000,0.000000,0.000000,0.000000,0.000000,0.000000);
+	uv(0.000000,0.000000,0.000000,0.000000,0.000000,0.000000);
+	uv(0.000000,0.000000,0.000000,0.000000,0.000000,0.000000);
+	uv(0.000000,0.000000,0.000000,0.000000,0.000000,0.000000);
+	uv(0.000000,0.000000,0.000000,0.000000,0.000000,0.000000);
+	uv(0.000000,0.000000,0.000000,0.000000,0.000000,0.000000);
+	uv(0.000000,0.000000,0.000000,0.000000,0.000000,0.000000);
+	uv(0.000000,0.000000,0.000000,0.000000,0.000000,0.000000);
+	uv(0.000000,0.000000,0.000000,0.000000,0.000000,0.000000);
+	uv(0.000000,0.000000,0.000000,0.000000,0.000000,0.000000);
+	uv(0.000000,0.000000,0.000000,0.000000,0.000000,0.000000);
+	uv(0.000000,0.000000,0.000000,0.000000,0.000000,0.000000);
+	uv(0.000000,0.000000,0.000000,0.000000,0.000000,0.000000);
+	uv(0.000000,0.000000,0.000000,0.000000,0.000000,0.000000);
+	uv(0.000000,0.000000,0.000000,0.000000,0.000000,0.000000);
+	uv(0.000000,0.000000,0.000000,0.000000,0.000000,0.000000);
+	uv(0.000000,0.000000,0.000000,0.000000,0.000000,0.000000);
+	uv(0.000000,0.000000,0.000000,0.000000,0.000000,0.000000);
+	uv(0.000000,0.000000,0.000000,0.000000,0.000000,0.000000);
+	uv(0.000000,0.000000,0.000000,0.000000,0.000000,0.000000);
+	uv(0.000000,0.000000,0.000000,0.000000,0.000000,0.000000);
+	uv(0.000000,0.000000,0.000000,0.000000,0.000000,0.000000);
+	uv(0.000000,0.000000,0.000000,0.000000,0.000000,0.000000);
+	uv(0.000000,0.000000,0.000000,0.000000,0.000000,0.000000);
+	uv(0.000000,0.000000,0.000000,0.000000,0.000000,0.000000);
+	uv(0.000000,0.000000,0.000000,0.000000,0.000000,0.000000);
+	uv(0.000000,0.000000,0.000000,0.000000,0.000000,0.000000);
+	uv(0.000000,0.000000,0.000000,0.000000,0.000000,0.000000);
+	uv(0.000000,0.000000,0.000000,0.000000,0.000000,0.000000);
+	uv(0.000000,0.000000,0.000000,0.000000,0.000000,0.000000);
+	uv(0.000000,0.000000,0.000000,0.000000,0.000000,0.000000);
+	uv(0.000000,0.000000,0.000000,0.000000,0.000000,0.000000);
+	uv(0.000000,0.000000,0.000000,0.000000,0.000000,0.000000);
+	uv(0.000000,0.000000,0.000000,0.000000,0.000000,0.000000);
+	uv(0.000000,0.000000,0.000000,0.000000,0.000000,0.000000);
+	uv(0.000000,0.000000,0.000000,0.000000,0.000000,0.000000);
+	uv(0.000000,0.000000,0.000000,0.000000,0.000000,0.000000);
+	uv(0.000000,0.000000,0.000000,0.000000,0.000000,0.000000);
+	uv(0.000000,0.000000,0.000000,0.000000,0.000000,0.000000);
+	uv(0.000000,0.000000,0.000000,0.000000,0.000000,0.000000);
+	uv(0.000000,0.000000,0.000000,0.000000,0.000000,0.000000);
+	uv(0.000000,0.000000,0.000000,0.000000,0.000000,0.000000);
+	uv(0.000000,0.000000,0.000000,0.000000,0.000000,0.000000);
+	uv(0.000000,0.000000,0.000000,0.000000,0.000000,0.000000);
+	uv(0.000000,0.000000,0.000000,0.000000,0.000000,0.000000);
+	uv(0.000000,0.000000,0.000000,0.000000,0.000000,0.000000);
+	uv(0.000000,0.000000,0.000000,0.000000,0.000000,0.000000);
+	uv(0.000000,0.000000,0.000000,0.000000,0.000000,0.000000);
+	uv(0.000000,0.000000,0.000000,0.000000,0.000000,0.000000);
+	uv(0.000000,0.000000,0.000000,0.000000,0.000000,0.000000);
+	uv(0.000000,0.000000,0.000000,0.000000,0.000000,0.000000);
+	uv(0.000000,0.000000,0.000000,0.000000,0.000000,0.000000);
+	uv(0.000000,0.000000,0.000000,0.000000,0.000000,0.000000);
+	uv(0.000000,0.000000,0.000000,0.000000,0.000000,0.000000);
+	uv(0.000000,0.000000,0.000000,0.000000,0.000000,0.000000);
+	uv(0.000000,0.000000,0.000000,0.000000,0.000000,0.000000);
+	uv(0.000000,0.000000,0.000000,0.000000,0.000000,0.000000);
+	uv(0.000000,0.000000,0.000000,0.000000,0.000000,0.000000);
+	uv(0.000000,0.000000,0.000000,0.000000,0.000000,0.000000);
+	uv(0.000000,0.000000,0.000000,0.000000,0.000000,0.000000);
+	uv(0.000000,0.000000,0.000000,0.000000,0.000000,0.000000);
+	uv(0.000000,0.000000,0.000000,0.000000,0.000000,0.000000);
+	uv(0.000000,0.000000,0.000000,0.000000,0.000000,0.000000);
+	uv(0.000000,0.000000,0.000000,0.000000,0.000000,0.000000);
+	uv(0.000000,0.000000,0.000000,0.000000,0.000000,0.000000);
+	uv(0.000000,0.000000,0.000000,0.000000,0.000000,0.000000);
+	uv(0.000000,0.000000,0.000000,0.000000,0.000000,0.000000);
+	uv(0.000000,0.000000,0.000000,0.000000,0.000000,0.000000);
+	uv(0.000000,0.000000,0.000000,0.000000,0.000000,0.000000);
+	uv(0.000000,0.000000,0.000000,0.000000,0.000000,0.000000);
+	uv(0.000000,0.000000,0.000000,0.000000,0.000000,0.000000);
+	uv(0.000000,0.000000,0.000000,0.000000,0.000000,0.000000);
+	uv(0.000000,0.000000,0.000000,0.000000,0.000000,0.000000);
+	uv(0.000000,0.000000,0.000000,0.000000,0.000000,0.000000);
+	uv(0.000000,0.000000,0.000000,0.000000,0.000000,0.000000);
+	uv(0.000000,0.000000,0.000000,0.000000,0.000000,0.000000);
+	uv(0.000000,0.000000,0.000000,0.000000,0.000000,0.000000);
+	uv(0.000000,0.000000,0.000000,0.000000,0.000000,0.000000);
+	uv(0.000000,0.000000,0.000000,0.000000,0.000000,0.000000);
+	uv(0.000000,0.000000,0.000000,0.000000,0.000000,0.000000);
+	uv(0.000000,0.000000,0.000000,0.000000,0.000000,0.000000);
+	uv(0.000000,0.000000,0.000000,0.000000,0.000000,0.000000);
+	uv(0.000000,0.000000,0.000000,0.000000,0.000000,0.000000);
+	uv(0.000000,0.000000,0.000000,0.000000,0.000000,0.000000);
+	uv(0.000000,0.000000,0.000000,0.000000,0.000000,0.000000);
+	uv(0.000000,0.000000,0.000000,0.000000,0.000000,0.000000);
+	uv(0.000000,0.000000,0.000000,0.000000,0.000000,0.000000);
+	uv(0.000000,0.000000,0.000000,0.000000,0.000000,0.000000);
+	uv(0.000000,0.000000,0.000000,0.000000,0.000000,0.000000);
+	uv(0.000000,0.000000,0.000000,0.000000,0.000000,0.000000);
+	uv(0.000000,0.000000,0.000000,0.000000,0.000000,0.000000);
+	uv(0.000000,0.000000,0.000000,0.000000,0.000000,0.000000);
+	uv(0.000000,0.000000,0.000000,0.000000,0.000000,0.000000);
+	uv(0.000000,0.000000,0.000000,0.000000,0.000000,0.000000);
+	uv(0.000000,0.000000,0.000000,0.000000,0.000000,0.000000);
+	uv(0.000000,0.000000,0.000000,0.000000,0.000000,0.000000);
+	uv(0.000000,0.000000,0.000000,0.000000,0.000000,0.000000);
+	uv(0.000000,0.000000,0.000000,0.000000,0.000000,0.000000);
+	uv(0.000000,0.000000,0.000000,0.000000,0.000000,0.000000);
+	uv(0.000000,0.000000,0.000000,0.000000,0.000000,0.000000);
+	uv(0.000000,0.000000,0.000000,0.000000,0.000000,0.000000);
+	uv(0.000000,0.000000,0.000000,0.000000,0.000000,0.000000);
+	uv(0.000000,0.000000,0.000000,0.000000,0.000000,0.000000);
+	uv(0.000000,0.000000,0.000000,0.000000,0.000000,0.000000);
+	uv(0.000000,0.000000,0.000000,0.000000,0.000000,0.000000);
+	uv(0.000000,0.000000,0.000000,0.000000,0.000000,0.000000);
+	uv(0.000000,0.000000,0.000000,0.000000,0.000000,0.000000);
+	uv(0.000000,0.000000,0.000000,0.000000,0.000000,0.000000);
+	uv(0.000000,0.000000,0.000000,0.000000,0.000000,0.000000);
+	uv(0.000000,0.000000,0.000000,0.000000,0.000000,0.000000);
+	uv(0.000000,0.000000,0.000000,0.000000,0.000000,0.000000);
+	uv(0.000000,0.000000,0.000000,0.000000,0.000000,0.000000);
+	uv(0.000000,0.000000,0.000000,0.000000,0.000000,0.000000);
+	uv(0.000000,0.000000,0.000000,0.000000,0.000000,0.000000);
+	uv(0.000000,0.000000,0.000000,0.000000,0.000000,0.000000);
+	uv(0.000000,0.000000,0.000000,0.000000,0.000000,0.000000);
+	uv(0.000000,0.000000,0.000000,0.000000,0.000000,0.000000);
+	uv(0.000000,0.000000,0.000000,0.000000,0.000000,0.000000);
+	uv(0.000000,0.000000,0.000000,0.000000,0.000000,0.000000);
+	uv(0.000000,0.000000,0.000000,0.000000,0.000000,0.000000);
+	uv(0.000000,0.000000,0.000000,0.000000,0.000000,0.000000);
+	uv(0.000000,0.000000,0.000000,0.000000,0.000000,0.000000);
+	uv(0.000000,0.000000,0.000000,0.000000,0.000000,0.000000);
+	uv(0.000000,0.000000,0.000000,0.000000,0.000000,0.000000);
+	uv(0.000000,0.000000,0.000000,0.000000,0.000000,0.000000);
+	uv(0.000000,0.000000,0.000000,0.000000,0.000000,0.000000);
+	uv(0.000000,0.000000,0.000000,0.000000,0.000000,0.000000);
+	uv(0.000000,0.000000,0.000000,0.000000,0.000000,0.000000);
+	uv(0.000000,0.000000,0.000000,0.000000,0.000000,0.000000);
+	uv(0.000000,0.000000,0.000000,0.000000,0.000000,0.000000);
+	uv(0.000000,0.000000,0.000000,0.000000,0.000000,0.000000);
+	uv(0.000000,0.000000,0.000000,0.000000,0.000000,0.000000);
+	uv(0.000000,0.000000,0.000000,0.000000,0.000000,0.000000);
+	uv(0.000000,0.000000,0.000000,0.000000,0.000000,0.000000);
+	uv(0.000000,0.000000,0.000000,0.000000,0.000000,0.000000);
+	uv(0.000000,0.000000,0.000000,0.000000,0.000000,0.000000);
+	uv(0.000000,0.000000,0.000000,0.000000,0.000000,0.000000);
+	uv(0.000000,0.000000,0.000000,0.000000,0.000000,0.000000);
+	uv(0.000000,0.000000,0.000000,0.000000,0.000000,0.000000);
+	uv(0.000000,0.000000,0.000000,0.000000,0.000000,0.000000);
+	uv(0.000000,0.000000,0.000000,0.000000,0.000000,0.000000);
+	uv(0.000000,0.000000,0.000000,0.000000,0.000000,0.000000);
+	uv(0.000000,0.000000,0.000000,0.000000,0.000000,0.000000);
+	uv(0.000000,0.000000,0.000000,0.000000,0.000000,0.000000);
+	uv(0.000000,0.000000,0.000000,0.000000,0.000000,0.000000);
+	uv(0.000000,0.000000,0.000000,0.000000,0.000000,0.000000);
+	uv(0.000000,0.000000,0.000000,0.000000,0.000000,0.000000);
+	uv(0.000000,0.000000,0.000000,0.000000,0.000000,0.000000);
+	uv(0.000000,0.000000,0.000000,0.000000,0.000000,0.000000);
+	uv(0.000000,0.000000,0.000000,0.000000,0.000000,0.000000);
+	uv(0.000000,0.000000,0.000000,0.000000,0.000000,0.000000);
+	uv(0.000000,0.000000,0.000000,0.000000,0.000000,0.000000);
+	uv(0.000000,0.000000,0.000000,0.000000,0.000000,0.000000);
+	uv(0.000000,0.000000,0.000000,0.000000,0.000000,0.000000);
+	uv(0.000000,0.000000,0.000000,0.000000,0.000000,0.000000);
+	uv(0.000000,0.000000,0.000000,0.000000,0.000000,0.000000);
+	uv(0.000000,0.000000,0.000000,0.000000,0.000000,0.000000);
+	uv(0.000000,0.000000,0.000000,0.000000,0.000000,0.000000);
+	uv(0.000000,0.000000,0.000000,0.000000,0.000000,0.000000);
+	uv(0.000000,0.000000,0.000000,0.000000,0.000000,0.000000);
+	uv(0.000000,0.000000,0.000000,0.000000,0.000000,0.000000);
+	uv(0.000000,0.000000,0.000000,0.000000,0.000000,0.000000);
+	uv(0.000000,0.000000,0.000000,0.000000,0.000000,0.000000);
+	uv(0.000000,0.000000,0.000000,0.000000,0.000000,0.000000);
+	uv(0.000000,0.000000,0.000000,0.000000,0.000000,0.000000);
+	uv(0.000000,0.000000,0.000000,0.000000,0.000000,0.000000);
+	uv(0.000000,0.000000,0.000000,0.000000,0.000000,0.000000);
+	uv(0.000000,0.000000,0.000000,0.000000,0.000000,0.000000);
+	uv(0.000000,0.000000,0.000000,0.000000,0.000000,0.000000);
+	uv(0.000000,0.000000,0.000000,0.000000,0.000000,0.000000);
+	uv(0.000000,0.000000,0.000000,0.000000,0.000000,0.000000);
+	uv(0.000000,0.000000,0.000000,0.000000,0.000000,0.000000);
+	uv(0.000000,0.000000,0.000000,0.000000,0.000000,0.000000);
+	uv(0.000000,0.000000,0.000000,0.000000,0.000000,0.000000);
+	uv(0.000000,0.000000,0.000000,0.000000,0.000000,0.000000);
+	uv(0.000000,0.000000,0.000000,0.000000,0.000000,0.000000);
+	uv(0.000000,0.000000,0.000000,0.000000,0.000000,0.000000);
+	uv(0.000000,0.000000,0.000000,0.000000,0.000000,0.000000);
+	uv(0.000000,0.000000,0.000000,0.000000,0.000000,0.000000);
+	uv(0.000000,0.000000,0.000000,0.000000,0.000000,0.000000);
+	uv(0.000000,0.000000,0.000000,0.000000,0.000000,0.000000);
+	uv(0.000000,0.000000,0.000000,0.000000,0.000000,0.000000);
+	uv(0.000000,0.000000,0.000000,0.000000,0.000000,0.000000);
+	uv(0.000000,0.000000,0.000000,0.000000,0.000000,0.000000);
+	uv(0.000000,0.000000,0.000000,0.000000,0.000000,0.000000);
+	uv(0.000000,0.000000,0.000000,0.000000,0.000000,0.000000);
+	uv(0.000000,0.000000,0.000000,0.000000,0.000000,0.000000);
+	uv(0.000000,0.000000,0.000000,0.000000,0.000000,0.000000);
+	uv(0.000000,0.000000,0.000000,0.000000,0.000000,0.000000);
+	uv(0.000000,0.000000,0.000000,0.000000,0.000000,0.000000);
+	uv(0.000000,0.000000,0.000000,0.000000,0.000000,0.000000);
+	uv(0.000000,0.000000,0.000000,0.000000,0.000000,0.000000);
+	uv(0.000000,0.000000,0.000000,0.000000,0.000000,0.000000);
+	uv(0.000000,0.000000,0.000000,0.000000,0.000000,0.000000);
+	uv(0.000000,0.000000,0.000000,0.000000,0.000000,0.000000);
+	uv(0.000000,0.000000,0.000000,0.000000,0.000000,0.000000);
+	uv(0.000000,0.000000,0.000000,0.000000,0.000000,0.000000);
+	uv(0.000000,0.000000,0.000000,0.000000,0.000000,0.000000);
+	uv(0.000000,0.000000,0.000000,0.000000,0.000000,0.000000);
+	uv(0.000000,0.000000,0.000000,0.000000,0.000000,0.000000);
+	uv(0.836835,0.000000,0.836835,0.872340,0.836835,1.000000);
+	uv(0.836835,0.872340,0.836835,0.000000,0.836835,0.127660);
+	uv(0.971921,0.810968,1.351831,0.732955,1.148169,0.732955);
+	uv(1.351831,0.732955,0.971921,0.810968,1.351831,1.000000);
+	uv(0.971921,1.000000,0.971921,0.810968,0.971921,1.000000);
+	uv(0.836835,0.872340,0.836835,1.000000,0.836835,1.000000);
+	uv(0.836984,0.742945,0.861232,0.863074,0.908657,0.817217);
+	uv(0.861232,0.863074,0.836984,0.742945,0.828884,0.823185);
+	uv(0.828884,0.823185,0.836984,0.742945,0.734995,0.840327);
+	uv(0.734995,0.840327,0.603320,0.824093,0.727482,0.888281);
+	uv(0.603320,0.824093,0.734995,0.840327,0.669958,0.746963);
+	uv(0.669958,0.746963,0.734995,0.840327,0.836984,0.742945);
+	uv(0.351831,0.732955,0.351831,1.000000,0.581358,0.792715);
+	uv(0.351831,1.000000,0.351831,0.732955,0.351831,1.000000);
+	uv(0.581358,0.792715,0.581358,1.000000,0.581358,1.000000);
+	uv(0.581358,0.792715,0.581358,1.000000,0.727482,0.888281);
+	uv(0.727482,0.888281,0.727482,1.000000,0.836835,0.872340);
+	uv(0.581358,0.792715,0.727482,0.888281,0.603320,0.824093);
+	uv(0.000000,0.000000,0.000000,1.000000,0.000000,0.000000);
+	uv(0.000000,1.000000,0.000000,0.000000,0.000000,1.000000);
+	uv(0.581358,0.207285,0.148169,0.267045,0.351831,0.267045);
+	uv(0.148169,0.267045,0.581358,0.207285,0.148169,0.000000);
+	uv(0.581358,0.000000,0.581358,0.207285,0.581358,0.000000);
+	uv(0.581358,0.000000,0.581358,0.207285,0.581358,0.000000);
+	uv(0.581358,0.000000,0.581358,0.207285,0.727482,0.111719);
+	uv(0.727482,0.111719,0.581358,0.207285,0.603320,0.175907);
+	uv(0.727482,0.111719,0.603320,0.175907,0.734995,0.159673);
+	uv(0.734995,0.159673,0.603320,0.175907,0.669958,0.253037);
+	uv(0.734995,0.159673,0.669958,0.253037,0.828884,0.176815);
+	uv(0.828884,0.176815,0.908657,0.182783,0.861232,0.136926);
+	uv(0.908657,0.182783,0.828884,0.176815,0.836984,0.257055);
+	uv(0.836984,0.257055,0.828884,0.176815,0.669958,0.253037);
+	uv(0.836835,0.127660,0.836835,0.000000,0.727482,0.111719);
+	uv(1.148169,0.267045,1.148169,0.000000,0.971921,0.189032);
+	uv(0.148169,0.000000,0.148169,0.267045,0.148169,0.000000);
+	uv(0.971921,0.189032,0.971921,0.000000,0.971921,0.000000);
+	uv(0.836835,0.872340,0.727482,0.111719,0.727482,0.888281);
+	uv(0.727482,0.111719,0.836835,0.872340,0.836835,0.127660);
+	uv(0.727482,0.111719,0.734995,0.840327,0.727482,0.888281);
+	uv(0.734995,0.840327,0.727482,0.111719,0.734995,0.159673);
+	uv(0.828884,0.176815,0.734995,0.840327,0.734995,0.159673);
+	uv(0.734995,0.840327,0.828884,0.176815,0.828884,0.823185);
+	uv(0.828884,0.176815,0.861232,0.863074,0.828884,0.823185);
+	uv(0.861232,0.863074,0.828884,0.176815,0.861232,0.136926);
+	uv(0.908657,0.182783,0.861232,0.863074,0.861232,0.136926);
+	uv(0.861232,0.863074,0.908657,0.182783,0.908657,0.817217);
+	uv(0.908657,0.182783,0.836984,0.742945,0.908657,0.817217);
+	uv(0.836984,0.742945,0.908657,0.182783,0.836984,0.257055);
+	uv(0.836984,0.742945,0.669958,0.253037,0.669958,0.746963);
+	uv(0.669958,0.253037,0.836984,0.742945,0.836984,0.257055);
+	uv(0.669958,0.253037,0.603320,0.824093,0.669958,0.746963);
+	uv(0.603320,0.824093,0.669958,0.253037,0.603320,0.175907);
+	uv(0.603320,0.824093,0.581358,0.207285,0.581358,0.792715);
+	uv(0.581358,0.207285,0.603320,0.824093,0.603320,0.175907);
+	uv(0.581358,0.207285,0.351831,0.732955,0.581358,0.792715);
+	uv(0.351831,0.732955,0.581358,0.207285,0.351831,0.267045);
+	uv(0.148169,0.267045,0.351831,0.732955,0.351831,0.267045);
+	uv(0.351831,0.732955,0.148169,0.267045,0.148169,0.732955);
+	uv(1.148169,0.267045,0.971921,0.810968,1.148169,0.732955);
+	uv(0.971921,0.810968,1.148169,0.267045,0.971921,0.189032);
+	uv(0.971921,0.810968,0.971921,0.000000,0.971921,1.000000);
+	uv(0.971921,0.000000,0.971921,0.810968,0.971921,0.189032);
+	uv(0.000000,0.000000,0.000000,1.000000,0.000000,1.000000);
+	uv(0.000000,1.000000,0.000000,0.000000,0.000000,0.000000);
+	uv(0.000000,1.000000,0.000000,0.000000,0.000000,1.000000);
+	uv(0.000000,0.000000,0.000000,1.000000,0.000000,0.000000);
+	uv(0.000000,0.000000,0.000000,1.000000,0.000000,1.000000);
+	uv(0.000000,1.000000,0.000000,0.000000,0.000000,0.000000);
+	uv(0.980168,0.733265,1.397258,0.699579,1.102742,0.699579);
+	uv(0.397258,0.699579,0.980168,0.733265,0.490985,0.808478);
+	uv(0.490985,0.808478,0.980168,0.733265,0.640165,0.738236);
+	uv(0.640165,0.738236,0.980168,0.733265,0.828330,0.759467);
+	uv(0.494391,0.734400,0.397258,0.699579,0.490985,0.808478);
+	uv(1.102742,0.699579,1.063908,0.579473,0.980168,0.733265);
+	uv(0.063908,0.579473,0.102742,0.699579,0.102742,0.300421);
+	uv(0.980168,0.733265,1.063908,0.579473,0.980168,0.586930);
+	uv(0.063908,0.579473,0.102742,0.300421,0.063908,0.411678);
+	uv(1.063908,0.411678,1.102742,0.300421,0.980168,0.405176);
+	uv(0.980168,0.405176,1.102742,0.300421,0.980168,0.266734);
+	uv(0.980168,0.585388,0.980168,0.586930,1.063908,0.579473);
+	uv(0.980168,0.586930,0.828330,0.759467,0.980168,0.733265);
+	uv(0.828330,0.759467,0.980168,0.586930,0.828330,0.601546);
+	uv(0.828330,0.759467,0.640165,0.261764,0.640165,0.738236);
+	uv(0.640165,0.261764,0.828330,0.759467,0.828330,0.240533);
+	uv(0.828330,0.240533,0.828330,0.759467,0.828330,0.601546);
+	uv(0.828330,0.240533,0.828330,0.601546,0.828330,0.389426);
+	uv(0.640165,0.261764,0.490985,0.808478,0.640165,0.738236);
+	uv(0.490985,0.808478,0.640165,0.261764,0.490985,0.191522);
+	uv(0.490985,0.808478,0.494391,0.265600,0.494391,0.734400);
+	uv(0.494391,0.265600,0.490985,0.808478,0.490985,0.191522);
+	uv(0.494391,0.265600,0.397258,0.699579,0.494391,0.734400);
+	uv(0.397258,0.699579,0.494391,0.265600,0.397258,0.300421);
+	uv(0.102742,0.300421,0.397258,0.699579,0.397258,0.300421);
+	uv(0.397258,0.699579,0.102742,0.300421,0.102742,0.699579);
+	uv(0.980168,0.266734,0.828330,0.389426,0.980168,0.405176);
+	uv(0.828330,0.389426,0.980168,0.266734,0.828330,0.240533);
+	uv(1.063908,0.411678,0.980168,0.585388,1.063908,0.579473);
+	uv(0.980168,0.585388,1.063908,0.411678,0.980168,0.405176);
+	uv(0.980168,0.585388,0.828330,0.601546,0.980168,0.586930);
+	uv(0.828330,0.601546,0.980168,0.585388,0.828330,0.389426);
+	uv(0.828330,0.389426,0.980168,0.585388,0.980168,0.405176);
+	uv(0.494391,0.265600,0.102742,0.300421,0.397258,0.300421);
+	uv(0.102742,0.300421,0.494391,0.265600,0.490985,0.191522);
+	uv(1.102742,0.300421,1.490986,0.191522,0.980168,0.266734);
+	uv(0.980168,0.266734,0.490985,0.191522,0.640165,0.261764);
+	uv(0.980168,0.266734,0.640165,0.261764,0.828330,0.240533);
+    */
+    
+	f4(106,59,210,209,0);
+	f4(28,27,34,38,0);
+	f4(237,155,181,124,0);
+	f4(175,167,12,239,0);
+	f4(317,350,60,353,0);
+	f4(75,46,202,203,0);
+	f4(35,32,28,38,0);
+	f4(241,242,125,239,0);
+	f4(237,124,175,239,0);
+	f4(39,122,119,38,0);
+	f4(134,126,238,240,0);
+	f3(10,3,14,0);
+	f4(179,168,174,178,0);
+	f4(180,122,242,82,0);
+	f4(203,211,348,75,0);
+	f3(180,97,120,0);
+	f4(225,226,0,5,0);
+	f3(37,56,52,0);
+	f4(82,172,170,244,0);
+	f4(241,121,172,82,0);
+	f4(305,72,187,300,0);
+	f4(224,228,225,7,0);
+	f4(176,181,155,182,0);
+	f4(302,324,58,21,0);
+	f3(239,12,169,0);
+	f4(170,172,121,163,0);
+	f4(5,0,284,289,0);
+	f4(236,200,332,334,0);
+	f4(119,120,35,38,0);
+	f4(216,335,339,219,0);
+	f3(285,296,322,0);
+	f3(54,58,13,0);
+	f4(214,212,80,329,0);
+	f4(293,292,327,297,0);
+	f4(218,331,201,66,0);
+	f4(50,218,66,57,0);
+	f4(343,223,106,209,0);
+	f4(52,224,7,83,0);
+	f4(6,182,155,237,0);
+	f4(354,65,68,190,0);
+	f4(61,213,88,338,0);
+	f4(237,184,3,6,0);
+	f4(11,238,126,37,0);
+	f4(300,94,269,329,0);
+	f4(305,300,329,307,0);
+	f4(249,257,186,247,0);
+	f4(256,185,253,87,0);
+	f4(100,45,211,208,0);
+	f4(234,99,337,70,0);
+	f4(327,189,79,297,0);
+	f4(94,300,19,138,0);
+	f4(285,322,84,90,0);
+	f4(185,67,259,253,0);
+	f4(67,186,257,259,0);
+	f4(258,232,264,255,0);
+	f4(84,322,321,101,0);
+	f4(73,60,350,36,0);
+	f4(130,17,97,129,0);
+	f4(201,331,354,217,0);
+	f4(204,90,84,191,0);
+	f4(29,52,56,27,0);
+	f4(310,304,309,308,0);
+	f4(96,125,93,85,0);
+	f4(52,29,30,54,0);
+	f3(179,125,96,0);
+	f4(269,94,51,268,0);
+	f4(58,54,30,21,0);
+	f3(37,52,11,0);
+	f4(57,66,146,145,0);
+	f4(177,176,40,37,0);
+	f4(42,41,44,76,0);
+	f4(254,263,233,260,0);
+	f4(22,30,29,23,0);
+	f4(22,18,21,30,0);
+	f4(314,304,23,33,0);
+	f4(338,88,196,342,0);
+	f4(288,92,221,4,0);
+	f4(196,88,213,70,0);
+	f4(301,312,256,87,0);
+	f4(89,73,36,91,0);
+	f4(64,89,91,79,0);
+	f4(36,350,352,195,0);
+	f3(97,35,120,0);
+	f4(28,23,29,27,0);
+	f4(20,31,33,25,0);
+	f4(285,288,286,296,0);
+	f4(337,61,338,342,0);
+	f4(341,223,41,42,0);
+	f4(144,128,103,127,0);
+	f4(110,157,161,154,0);
+	f4(150,138,131,130,0);
+	f4(137,129,171,135,0);
+	f4(314,312,301,306,0);
+	f4(143,144,127,244,0);
+	f4(108,112,104,107,0);
+	f4(164,102,118,140,0);
+	f4(230,227,228,224,0);
+	f4(158,156,111,115,0);
+	f4(104,112,149,278,0);
+	f4(344,69,53,216,0);
+	f4(113,109,108,107,0);
+	f4(132,123,37,126,0);
+	f4(239,169,121,241,0);
+	f4(248,31,20,252,0);
+	f4(180,120,119,122,0);
+	f4(304,303,22,23,0);
+	f4(178,174,167,175,0);
+	f4(318,319,328,315,0);
+	f4(215,68,65,219,0);
+	f4(198,343,209,206,0);
+	f4(278,277,160,104,0);
+	f4(127,103,136,135,0);
+	f4(176,182,6,40,0);
+	f4(121,169,166,163,0);
+	f4(154,158,115,110,0);
+	f4(123,132,133,139,0);
+	f4(332,339,335,334,0);
+	f4(83,8,10,14,0);
+	f4(229,226,227,230,0);
+	f4(254,260,24,19,0);
+	f3(0,226,1,0);
+	f4(3,184,240,14,0);
+	f4(114,102,330,341,0);
+	f4(208,168,179,197,0);
+	f4(315,328,93,34,0);
+	f4(282,156,158,154,0);
+	f3(353,89,64,0);
+	f4(92,288,285,284,0);
+	f4(335,336,340,334,0);
+	f4(124,181,176,177,0);
+	f4(76,44,207,205,0);
+	f4(150,130,129,137,0);
+	f4(327,289,173,291,0);
+	f4(151,143,140,142,0);
+	f4(346,347,80,349,0);
+	f4(190,68,86,98,0);
+	f4(229,54,1,226,0);
+	f4(161,157,162,160,0);
+	f4(225,5,83,7,0);
+	f4(36,195,78,91,0);
+	f4(79,91,287,297,0);
+	f4(80,212,190,326,0);
+	f4(93,39,38,34,0);
+	f4(178,175,124,177,0);
+	f4(136,103,147,146,0);
+	f4(146,147,128,145,0);
+	f4(345,330,98,86,0);
+	f3(183,126,134,0);
+	f4(331,50,65,354,0);
+	f4(146,66,201,136,0);
+	f4(152,148,117,153,0);
+	f4(165,170,163,166,0);
+	f4(244,171,180,82,0);
+	f4(133,132,126,183,0);
+	f4(240,238,83,14,0);
+	f4(104,160,162,107,0);
+	f4(95,204,191,101,0);
+	f4(237,239,139,184,0);
+	f4(125,123,139,239,0);
+	f4(184,183,134,240,0);
+	f4(139,133,183,184,0);
+	f4(131,138,19,97,0);
+	f4(180,171,129,97,0);
+	f4(340,61,236,334,0);
+	f4(52,54,229,224,0);
+	f3(215,219,210,0);
+	f4(1,4,221,0,0);
+	f4(2,4,1,13,0);
+	f3(13,1,54,0);
+	f4(122,39,93,125,0);
+	f4(169,167,174,168,0);
+	f4(165,166,203,202,0);
+	f4(244,127,135,171,0);
+	f4(140,143,244,164,0);
+	f4(97,19,24,26,0);
+	f4(15,193,48,217,0);
+	f4(217,354,190,212,0);
+	f4(328,319,349,352,0);
+	f4(246,245,248,252,0);
+	f4(250,251,245,246,0);
+	f4(249,247,251,250,0);
+	f4(150,51,94,138,0);
+	f4(305,307,26,24,0);
+	f4(258,48,194,232,0);
+	f4(258,255,137,135,0);
+	f4(236,99,234,200,0);
+	f4(116,280,276,159,0);
+	f4(275,273,272,271,0);
+	f4(144,143,151,149,0);
+	f4(280,275,271,276,0);
+	f4(111,270,110,115,0);
+	f4(273,283,114,272,0);
+	f4(161,160,277,281,0);
+	f4(151,142,267,278,0);
+	f4(281,116,159,279,0);
+	f4(141,283,116,281,0);
+	f4(278,267,141,281,0);
+	f3(149,151,278,0);
+	f4(156,282,270,111,0);
+	f4(162,270,113,107,0);
+	f4(274,162,157,110,0);
+	f4(99,236,222,337,0);
+	f4(286,288,4,2,0);
+	f4(43,200,234,209,0);
+	f4(315,308,309,318,0);
+	f4(199,188,78,351,0);
+	f4(295,45,71,195,0);
+	f4(348,211,195,62,0);
+	f4(353,60,73,89,0);
+	f4(330,102,164,98,0);
+	f4(309,313,316,318,0);
+	f4(352,63,62,195,0);
+	f4(71,351,78,195,0);
+	f4(346,349,319,318,0);
+	f4(189,353,64,79,0);
+	f3(287,293,297,0);
+	f4(100,208,197,266,0);
+	f4(63,349,80,326,0);
+	f4(342,196,70,337,0);
+	f4(324,296,13,58,0);
+	f3(329,80,347,0);
+	f4(284,90,173,289,0);
+	f3(323,317,321,0);
+	f4(46,81,326,190,0);
+	f4(81,348,62,326,0);
+	f3(90,284,285,0);
+	f4(173,95,101,291,0);
+	f4(188,199,220,9,0);
+	f4(308,27,56,323,0);
+	f3(295,195,211,0);
+	f4(348,81,46,75,0);
+	f4(117,344,216,153,0);
+	f4(15,51,150,137,0);
+	f4(316,347,346,318,0);
+	f4(72,305,24,260,0);
+	f4(217,48,258,135,0);
+	f3(324,322,296,0);
+	f4(148,69,344,117,0);
+	f4(86,68,215,192,0);
+	f4(10,8,292,293,0);
+	f4(3,10,293,287,0);
+	f4(296,286,2,13,0);
+	f4(291,101,321,327,0);
+	f4(188,9,290,78,0);
+	f4(40,6,290,320,0);
+	f4(92,284,0,221,0);
+	f4(287,91,78,290,0);
+	f4(353,189,294,317,0);
+	f4(53,69,148,152,0);
+	f4(16,72,260,233,0);
+	f4(32,26,307,313,0);
+	f4(28,32,313,309,0);
+	f4(264,232,194,47,0);
+	f4(212,214,15,217,0);
+	f4(169,168,208,211,0);
+	f4(205,207,343,198,0);
+	f4(309,306,25,28,0);
+	f4(306,301,20,25,0);
+	f4(47,194,48,193,0);
+	f4(153,216,219,149,0);
+	f4(98,164,165,202,0);
+	f4(329,298,268,214,0);
+	f4(290,9,220,320,0);
+	f4(200,43,210,332,0);
+	f4(18,22,303,299,0);
+	f4(323,321,310,308,0);
+	f4(308,315,34,27,0);
+	f4(328,352,96,85,0);
+	f4(311,310,321,322,0);
+	f3(352,197,96,0);
+	f4(59,192,215,210,0);
+	f4(351,71,266,49,0);
+	f4(311,322,324,302,0);
+	f3(321,317,294,0);
+	f4(292,8,5,289,0);
+	f4(220,199,351,49,0);
+	f4(320,220,49,317,0);
+	f4(18,299,302,21,0);
+	f4(16,231,187,72,0);
+	f4(310,311,303,304,0);
+	f4(302,299,303,311,0);
+	f4(231,16,233,263,0);
+	f4(219,339,332,210,0);
+	f4(50,57,145,128,0);
+	f4(56,40,320,323,0);
+	f4(45,100,266,71,0);
+	f4(336,53,152,109,0);
+	f4(340,336,109,113,0);
+	f4(214,268,51,15,0);
+	f4(340,113,105,333,0);
+	f3(316,329,347,0);
+	f4(112,108,153,149,0);
+	f4(312,314,33,31,0);
+	f4(401,405,371,396,1);
+	f4(411,403,401,396,1);
+	f4(403,411,414,409,1);
+	f4(410,394,389,412,1);
+	f3(361,356,358,1);
+	f4(387,381,415,413,1);
+	f3(407,406,405,1);
+	f4(412,389,387,413,1);
+	f4(409,414,416,408,1);
+	f4(394,410,411,396,1);
+	f4(405,406,377,371,1);
+	f3(370,366,363,1);
+	f4(387,371,377,381,1);
+	f4(394,396,371,387,1);
+	f4(410,413,414,411,1);
+	f3(410,412,413,1);
+	f3(378,377,379,1);
+	f3(378,379,380,1);
+	f4(414,413,415,416,1);
+	f4(381,377,416,415,1);
+	f4(405,409,408,406,1);
+	f4(401,403,409,405,1);
+	f4(477,472,481,480,1);
+	f4(471,483,477,480,1);
+	f4(479,482,483,471,1);
+	f4(486,485,487,488,1);
+	f4(471,484,476,479,1);
+	f4(475,478,476,484,1);
+	f4(473,474,478,475,1);
+	f4(449,472,477,459,1);
+	f4(467,481,472,449,1);
+	f4(464,480,481,467,1);
+	f4(444,471,480,464,1);
+	f4(459,477,483,469,1);
+	f4(468,482,479,462,1);
+	f4(469,483,482,468,1);
+	f4(463,487,485,442,1);
+	f4(462,479,476,458,1);
+	f4(456,475,484,470,1);
+	f4(458,476,478,460,1);
+	f4(450,473,475,456,1);
+	f4(453,474,473,450,1);
+	f4(460,478,474,453,1);
+	f4(465,488,487,463,1);
+	f4(442,485,486,443,1);
+	f4(484,470,465,488,1);
+	f4(486,443,447,471,1);
+	f4(456,460,458,470,1);
+	f4(460,453,450,456,1);
+	f4(464,459,449,467,1);
+	f4(469,459,464,447,1);
+	f4(462,468,469,447,1);
+	f4(447,470,458,462,1);
+	f4(442,463,465,443,1);
+	f4(593,580,526,514,1);
+	f4(546,525,490,524,1);
+	f4(508,566,570,567,1);
+	f4(555,535,528,527,1);
+	f4(532,534,526,580,1);
+	f4(502,497,559,554,1);
+	f3(539,545,573,1);
+	f4(497,502,491,496,1);
+	f4(573,489,512,539,1);
+	f4(610,638,653,651,1);
+	f4(567,568,510,508,1);
+	f4(546,545,556,554,1);
+	f3(674,676,673,1);
+	f4(504,498,497,496,1);
+	f4(621,519,516,618,1);
+	f4(590,586,576,587,1);
+	f4(640,661,624,641,1);
+	f4(622,631,675,623,1);
+	f4(554,556,544,542,1);
+	f4(524,490,533,532,1);
+	f4(587,519,517,518,1);
+	f4(515,578,575,572,1);
+	f4(491,502,554,542,1);
+	f4(517,529,530,536,1);
+	f4(652,678,672,679,1);
+	f4(628,616,514,528,1);
+	f4(665,670,664,666,1);
+	f4(501,563,561,499,1);
+	f4(619,623,676,621,1);
+	f4(669,617,618,677,1);
+	f4(496,501,499,504,1);
+	f4(597,531,591,598,1);
+	f4(561,505,493,504,1);
+	f4(666,578,577,665,1);
+	f4(518,595,588,589,1);
+	f4(601,653,656,657,1);
+	f4(534,526,527,555,1);
+	f4(652,678,636,495,1);
+	f4(556,545,539,544,1);
+	f4(542,544,539,512,1);
+	f4(676,665,577,592,1);
+	f4(526,527,528,514,1);
+	f4(570,566,571,569,1);
+	f4(510,568,563,501,1);
+	f4(622,623,619,629,1);
+	f4(666,621,618,617,1);
+	f3(499,561,504,1);
+	f4(675,679,672,673,1);
+	f4(566,508,510,571,1);
+	f4(510,501,496,571,1);
+	f4(590,587,518,589,1);
+	f4(489,505,542,512,1);
+	f4(533,490,550,549,1);
+	f4(549,550,525,548,1);
+	f4(650,646,554,559,1);
+	f3(597,522,531,1);
+	f4(664,671,621,666,1);
+	f3(563,491,542,1);
+	f4(558,551,511,559,1);
+	f4(574,579,572,575,1);
+	f4(580,593,581,579,1);
+	f4(530,529,522,597,1);
+	f4(518,517,536,595,1);
+	f4(491,569,571,496,1);
+	f4(536,595,562,598,1);
+	f4(563,542,505,561,1);
+	f4(591,531,522,523,1);
+	f4(584,630,636,495,1);
+	f4(536,530,597,598,1);
+	f4(593,514,513,516,1);
+	f4(588,595,562,596,1);
+	f4(635,628,528,535,1);
+	f4(596,562,598,591,1);
+	f4(658,655,656,657,1);
+	f4(665,676,674,670,1);
+	f4(623,675,673,676,1);
+	f4(517,523,522,529,1);
+	f4(576,586,577,578,1);
+	f4(615,513,516,618,1);
+	f4(516,519,578,515,1);
+	f4(588,596,591,589,1);
+	f4(590,592,577,586,1);
+	f4(589,591,523,592,1);
+	f3(592,590,589,1);
+	f4(516,515,581,593,1);
+	f4(592,523,517,519,1);
+	f4(519,587,576,578,1);
+	f4(579,581,515,572,1);
+	f4(645,613,511,551,1);
+	f4(568,567,570,569,1);
+	f4(568,563,491,569,1);
+	f4(524,573,545,546,1);
+	f4(532,580,573,524,1);
+	f4(626,668,677,616,1);
+	f4(600,625,641,624,1);
+	f4(658,654,611,655,1);
+	f4(628,635,647,627,1);
+	f4(626,634,632,668,1);
+	f4(650,604,608,646,1);
+	f3(640,637,661,1);
+	f4(601,608,604,603,1);
+	f4(614,599,661,637,1);
+	f4(643,633,533,549,1);
+	f4(612,656,655,611,1);
+	f4(648,640,641,646,1);
+	f4(649,645,551,558,1);
+	f4(604,605,609,603,1);
+	f4(505,489,599,610,1);
+	f4(664,670,674,671,1);
+	f4(661,668,632,624,1);
+	f4(548,642,643,549,1);
+	f4(639,648,646,638,1);
+	f4(633,600,624,632,1);
+	f4(619,621,671,620,1);
+	f4(663,666,617,660,1);
+	f4(646,608,601,638,1);
+	f4(630,629,619,636,1);
+	f4(495,652,679,675,1);
+	f4(511,613,650,559,1);
+	f4(504,493,602,609,1);
+	f4(651,653,607,606,1);
+	f4(617,669,667,660,1);
+	f4(621,676,592,519,1);
+	f4(606,607,603,609,1);
+	f4(675,631,584,495,1);
+	f4(602,610,651,609,1);
+	f4(662,574,575,663,1);
+	f4(672,678,620,673,1);
+	f4(555,647,635,535,1);
+	f4(627,626,634,647,1);
+	f4(632,634,534,532,1);
+	f4(637,640,648,639,1);
+	f4(637,639,638,614,1);
+	f4(605,649,558,498,1);
+	f4(628,627,626,616,1);
+	f4(659,654,658,657,1);
+	f4(653,656,612,607,1);
+	f4(605,498,504,609,1);
+	f4(615,616,677,618,1);
+	f3(651,606,609,1);
+	f4(573,574,662,661,1);
+	f4(612,611,654,659,1);
+	f4(603,607,612,659,1);
+	f4(620,671,674,673,1);
+	f4(638,610,599,614,1);
+	f4(644,600,633,643,1);
+	f4(625,644,643,642,1);
+	f4(525,625,642,548,1);
+	f3(622,584,631,1);
+	f4(616,615,513,514,1);
+	f3(601,653,638,1);
+	f4(613,645,649,650,1);
+	f4(660,667,662,663,1);
+	f4(669,677,668,667,1);
+	f4(622,629,630,584,1);
+	f4(636,619,620,678,1);
+	f4(659,657,601,603,1);
+	f4(634,647,555,534,1);
+	f4(661,599,489,573,1);
+	f4(784,771,717,705,1);
+	f4(737,716,681,715,1);
+	f4(699,757,761,758,1);
+	f4(746,726,719,718,1);
+	f4(723,725,717,771,1);
+	f4(693,688,750,745,1);
+	f3(730,736,764,1);
+	f4(688,693,682,687,1);
+	f4(764,680,703,730,1);
+	f4(748,744,725,723,1);
+	f4(758,759,701,699,1);
+	f4(737,736,747,745,1);
+	f4(776,731,702,742,1);
+	f4(695,689,688,687,1);
+	f4(684,728,785,695,1);
+	f4(781,777,767,778,1);
+	f4(746,775,686,726,1);
+	f4(691,748,724,740,1);
+	f4(745,747,735,733,1);
+	f4(715,681,724,723,1);
+	f4(778,710,708,709,1);
+	f4(706,769,766,763,1);
+	f4(682,693,745,733,1);
+	f4(708,720,721,727,1);
+	f4(745,750,683,716,1);
+	f3(716,683,697,1);
+	f4(689,695,785,712,1);
+	f4(692,754,752,690,1);
+	f4(732,743,710,707,1);
+	f4(751,768,783,698,1);
+	f4(687,692,690,695,1);
+	f4(788,722,782,789,1);
+	f4(752,696,684,695,1);
+	f4(765,764,729,685,1);
+	f4(709,786,779,780,1);
+	f4(726,686,738,719,1);
+	f4(725,717,718,746,1);
+	f4(744,775,746,725,1);
+	f4(747,736,730,735,1);
+	f4(733,735,730,703,1);
+	f4(694,776,742,749,1);
+	f4(717,718,719,705,1);
+	f4(761,757,762,760,1);
+	f4(701,759,754,692,1);
+	f4(712,694,749,689,1);
+	f4(696,680,773,728,1);
+	f3(690,752,695,1);
+	f4(773,680,764,729,1);
+	f4(757,699,701,762,1);
+	f4(701,692,687,762,1);
+	f4(781,778,709,780,1);
+	f4(680,696,733,703,1);
+	f4(724,681,741,740,1);
+	f4(740,741,716,739,1);
+	f4(739,755,691,740,1);
+	f3(788,713,722,1);
+	f4(732,707,704,711,1);
+	f3(754,682,733,1);
+	f4(749,742,702,750,1);
+	f4(765,770,763,766,1);
+	f4(771,784,772,770,1);
+	f4(721,720,713,788,1);
+	f4(709,708,727,786,1);
+	f4(682,760,762,687,1);
+	f4(727,786,753,789,1);
+	f4(754,733,696,752,1);
+	f4(782,722,713,714,1);
+	f4(716,739,755,697,1);
+	f4(727,721,788,789,1);
+	f4(784,705,704,707,1);
+	f4(779,786,753,787,1);
+	f4(774,711,704,705,1);
+	f4(787,753,789,782,1);
+	f4(719,738,774,705,1);
+	f4(751,685,765,766,1);
+	f4(769,768,751,766,1);
+	f4(708,714,713,720,1);
+	f4(767,777,768,769,1);
+	f4(783,710,743,698,1);
+	f4(707,710,769,706,1);
+	f4(779,787,782,780,1);
+	f4(781,783,768,777,1);
+	f4(780,782,714,783,1);
+	f3(783,781,780,1);
+	f4(707,706,772,784,1);
+	f4(783,714,708,710,1);
+	f4(710,778,767,769,1);
+	f4(770,772,706,763,1);
+	f4(750,702,731,683,1);
+	f4(759,758,761,760,1);
+	f4(759,754,682,760,1);
+	f4(715,764,736,737,1);
+	f4(723,771,764,715,1);
+	f4(817,859,868,807,1);
+	f4(791,816,832,815,1);
+	f4(849,845,802,846,1);
+	f4(819,826,838,818,1);
+	f4(817,825,823,859,1);
+	f4(841,795,799,837,1);
+	f3(831,828,852,1);
+	f4(792,799,795,794,1);
+	f4(805,790,852,828,1);
+	f4(825,744,748,823,1);
+	f4(803,847,846,802,1);
+	f4(839,831,832,837,1);
+	f4(804,731,776,836,1);
+	f4(795,796,800,794,1);
+	f4(785,728,793,800,1);
+	f4(855,861,865,862,1);
+	f4(686,775,838,826,1);
+	f4(824,748,691,834,1);
+	f4(830,839,837,829,1);
+	f4(824,791,815,823,1);
+	f4(810,812,862,811,1);
+	f4(854,857,808,851,1);
+	f4(837,799,792,829,1);
+	f4(821,820,810,827,1);
+	f4(683,841,837,816,1);
+	f3(683,816,697,1);
+	f4(785,800,796,712,1);
+	f4(842,844,798,797,1);
+	f4(812,743,732,809,1);
+	f4(867,856,751,698,1);
+	f4(797,798,794,800,1);
+	f4(866,822,871,872,1);
+	f4(793,801,842,800,1);
+	f4(729,852,853,685,1);
+	f4(863,869,811,864,1);
+	f4(738,686,826,819,1);
+	f4(818,817,825,838,1);
+	f4(838,775,744,825,1);
+	f4(828,831,839,830,1);
+	f4(828,830,829,805,1);
+	f4(836,776,694,840,1);
+	f4(819,818,817,807,1);
+	f4(850,845,849,848,1);
+	f4(844,847,803,798,1);
+	f4(840,694,712,796,1);
+	f4(773,790,801,728,1);
+	f3(842,797,800,1);
+	f4(852,790,773,729,1);
+	f4(803,802,845,850,1);
+	f4(794,798,803,850,1);
+	f4(811,862,865,864,1);
+	f4(829,801,790,805,1);
+	f4(835,791,824,834,1);
+	f4(816,835,834,833,1);
+	f4(691,755,833,834,1);
+	f3(813,871,822,1);
+	f4(806,809,732,711,1);
+	f3(792,844,829,1);
+	f4(804,836,840,841,1);
+	f4(851,858,853,854,1);
+	f4(860,868,859,858,1);
+	f4(813,820,821,871,1);
+	f4(827,810,811,869,1);
+	f4(850,848,792,794,1);
+	f4(843,869,827,872,1);
+	f4(801,829,844,842,1);
+	f4(813,822,866,814,1);
+	f4(755,833,816,697,1);
+	f4(871,821,827,872,1);
+	f4(806,807,868,809,1);
+	f4(843,869,863,870,1);
+	f4(806,711,774,807,1);
+	f4(872,843,870,866,1);
+	f4(774,738,819,807,1);
+	f4(853,685,751,854,1);
+	f4(751,856,857,854,1);
+	f4(813,814,810,820,1);
+	f4(856,861,855,857,1);
+	f4(743,812,867,698,1);
+	f4(857,812,809,808,1);
+	f4(866,870,863,864,1);
+	f4(856,867,865,861,1);
+	f4(814,866,864,867,1);
+	f3(865,867,864,1);
+	f4(860,808,809,868,1);
+	f4(810,814,867,812,1);
+	f4(855,862,812,857,1);
+	f4(808,860,858,851,1);
+	f4(731,804,841,683,1);
+	f4(849,846,847,848,1);
+	f4(792,844,847,848,1);
+	f4(831,852,815,832,1);
+	f4(852,859,823,815,1);
+	f3(875,874,873,1);
+	f3(878,877,876,1);
+	f3(877,878,879,1);
+	f3(882,881,880,1);
+	f3(881,882,883,1);
+	f3(883,882,884,1);
+	f3(887,886,885,1);
+	f3(886,887,888,1);
+	f3(888,887,889,1);
+	f3(892,891,890,1);
+	f3(891,892,893,1);
+	f3(896,895,894,1);
+	f3(895,896,897,1);
+	f3(899,890,898,1);
+	f3(890,899,892,1);
+	f3(902,901,900,1);
+	f3(901,902,903,1);
+	f3(906,905,904,1);
+	f3(905,906,907,1);
+	f3(907,906,908,1);
+	f3(911,910,909,1);
+	f3(910,911,912,1);
+	f3(912,911,913,1);
+	f3(913,911,914,1);
+	f3(917,916,915,1);
+	f3(916,917,918,1);
+	f3(921,920,919,1);
+	f3(920,921,922,1);
+	f3(922,921,923,1);
+	f3(923,921,924,1);
+	f3(924,921,925,1);
+	f3(926,893,892,1);
+	f3(893,926,927,1);
+	f3(930,929,928,1);
+	f3(929,930,931,1);
+	f3(929,931,932,1);
+	f3(932,931,933,1);
+	f3(936,935,934,1);
+	f3(935,936,937,1);
+	f3(937,936,938,1);
+	f3(939,892,899,1);
+	f3(892,939,926,1);
+	f3(942,941,940,1);
+	f3(941,944,943,1);
+	f3(944,941,942,1);
+	f3(947,946,945,1);
+	f3(946,947,948,1);
+	f3(948,947,949,1);
+	f3(952,951,950,1);
+	f3(951,952,953,1);
+	f3(956,955,954,1);
+	f3(955,956,957,1);
+	f3(960,959,958,1);
+	f3(959,960,961,1);
+	f3(964,963,962,1);
+	f3(963,964,965,1);
+	f3(968,967,966,1);
+	f3(971,970,969,1);
+	f3(970,971,972,1);
+	f3(975,974,973,1);
+	f3(974,975,976,1);
+	f3(976,975,977,1);
+	f3(977,975,978,1);
+	f3(978,975,979,1);
+	f3(982,981,980,1);
+	f3(981,982,983,1);
+	f3(981,983,984,1);
+	f3(984,983,985,1);
+	f3(985,987,986,1);
+	f3(987,985,983,1);
+	f3(986,987,988,1);
+	f3(977,980,989,1);
+	f3(980,977,978,1);
+	f3(989,980,981,1);
+	f3(992,991,990,1);
+	f3(995,994,993,1);
+	f3(994,995,996,1);
+	f3(994,996,997,1);
+	f3(994,997,998,1);
+	f3(997,996,999,1);
+	f3(998,997,1000,1);
+	f3(998,1000,991,1);
+	f3(998,991,992,1);
+	f3(1003,1002,1001,1);
+	f3(1006,1005,1004,1);
+	f3(1005,1006,1007,1);
+	f3(1005,1007,1008,1);
+	f3(1005,1008,1009,1);
+	f3(1009,1008,1010,1);
+	f3(1009,1010,1011,1);
+	f3(1011,1010,1012,1);
+	f3(1012,1010,1013,1);
+	f3(1004,1015,1014,1);
+	f3(1015,1004,1016,1);
+	f3(1016,1004,1005,1);
+	f3(1019,1018,1017,1);
+	f3(1022,1021,1020,1);
+	f3(1021,1022,1023,1);
+	f3(1026,1025,1024,1);
+	f3(1025,1026,1027,1);
+	f3(1027,1026,1028,1);
+	f3(1028,1030,1029,1);
+	f3(1030,1028,1026,1);
+	f3(1033,1032,1031,1);
+	f3(1032,1033,1034,1);
+	f3(1037,1036,1035,1);
+	f3(1036,1037,1038,1);
+	f3(1041,1040,1039,1);
+	f3(1040,1041,1042,1);
+	f3(1042,1041,1043,1);
+	f3(1046,1045,1044,1);
+	f3(1045,1046,1047,1);
+	f3(1050,1049,1048,1);
+	f3(1049,1050,1051,1);
+	f3(1054,1053,1052,1);
+	f3(1053,1054,1055,1);
+	f3(1053,1055,1056,1);
+	f3(1056,1055,1057,1);
+	f3(1058,1052,1053,1);
+	f3(1061,1060,1059,1);
+	f3(1060,1061,1062,1);
+	f3(1065,1064,1063,1);
+	f3(1064,1065,1066,1);
+	f3(1020,1068,1067,1);
+	f3(1068,1020,1021,1);
+	f3(1071,1070,1069,1);
+	f3(1070,1071,1072,1);
+	f3(1072,1071,1073,1);
+	f3(1073,1071,1074,1);
+	f3(1073,1074,1075,1);
+	f3(1073,1075,1076,1);
+	f3(1079,1078,1077,1);
+	f3(1078,1079,1080,1);
+	f3(1049,1082,1081,1);
+	f3(1082,1049,1051,1);
+	f3(1085,1084,1083,1);
+	f3(1088,1087,1086,1);
+	f3(1087,1088,1089,1);
+	f3(1089,1088,1090,1);
+	f3(1090,1088,1091,1);
+	f3(1090,1093,1092,1);
+	f3(1093,1090,1091,1);
+	f3(1092,1093,1094,1);
+	f3(1096,1071,1095,1);
+	f3(1071,1096,1074,1);
+	f3(1099,1098,1097,1);
+	f3(1098,1099,1100,1);
+	f3(1100,1099,1101,1);
+	f3(1101,1099,1102,1);
+	f3(1105,1104,1103,1);
+	f3(1104,1105,1106,1);
+	f3(1106,1105,1100,1);
+	f3(1106,1100,1101,1);
+	f3(1109,1108,1107,1);
+	f3(1108,1109,1110,1);
+	f3(1108,1110,1111,1);
+	f3(1114,1113,1112,1);
+	f3(1113,1114,1115,1);
+	f3(1116,1113,1115,1);
+	f3(1119,1118,1117,1);
+	f3(1118,1119,1120,1);
+	f3(1123,1122,1121,1);
+	f3(1122,1123,1124,1);
+	f3(1127,1126,1125,1);
+	f3(1126,1127,1128,1);
+	f3(1131,1130,1129,1);
+	f3(1130,1131,1132,1);
+	f3(1135,1134,1133,1);
+	f3(1134,1135,1136,1);
+	f3(1139,1138,1137,1);
+	f3(1138,1139,1140,1);
+	f3(1137,1138,1141,1);
+	f3(1142,1137,1141,1);
+	f3(1117,1144,1143,1);
+	f3(1144,1117,1118,1);
+	f3(1147,1146,1145,1);
+	f3(1146,1147,1148,1);
+	f3(1148,1147,1149,1);
+	f3(1149,1147,1150,1);
+	f3(1150,1147,1151,1);
+	f3(1152,1148,1149,1);
+	f3(1155,1154,1153,1);
+	f3(1154,1155,1129,1);
+	f3(1156,1129,1155,1);
+	f3(1129,1156,1131,1);
+	f3(1131,1156,1157,1);
+	f3(1131,1157,1158,1);
+	f3(1131,1158,1159,1);
+	f3(1162,1161,1160,1);
+	f3(1131,1162,1163,1);
+	f3(1131,1163,1164,1);
+	f3(1163,1162,1165,1);
+	f3(1168,1167,1166,1);
+	f3(1167,1168,1169,1);
+	f3(1169,1168,1170,1);
+	f3(1173,1172,1171,1);
+	f3(1172,1173,1174,1);
+	f3(1174,1173,1175,1);
+	f3(1175,1173,1176,1);
+	f3(1176,1173,1177,1);
+	f3(1180,1179,1178,1);
+	f3(1179,1180,1181,1);
+	f3(1181,1180,1182,1);
+	f3(1185,1184,1183,1);
+	f3(1184,1185,1186,1);
+	f3(1189,1188,1187,1);
+	f3(1188,1189,1190,1);
+	f3(1193,1192,1191,1);
+	f3(1191,1192,1194,1);
+	f3(1194,1192,1195,1);
+	f3(1195,1192,1196,1);
+	f3(1197,1196,1192,1);
+	f3(1198,1158,1157,1);
+	f3(1158,1198,1199,1);
+	f3(1202,1201,1200,1);
+	f3(1201,1202,1203,1);
+	f3(1203,1202,1204,1);
+	f3(1204,1202,1205,1);
+	f3(1205,1202,1206,1);
+	f3(1206,1202,1207,1);
+	f3(1207,1202,1208,1);
+	f3(1211,1210,1209,1);
+	f3(1209,1210,1212,1);
+	f3(1213,1212,1210,1);
+	f3(1216,1215,1214,1);
+	f3(1217,1214,1215,1);
+	f3(1220,1219,1218,1);
+	f3(1221,1218,1219,1);
+	f3(1224,1223,1222,1);
+	f3(1223,1224,1225,1);
+	f3(1228,1227,1226,1);
+	f3(1231,1230,1229,1);
+	f3(1234,1233,1232,1);
+	f3(1237,1236,1235,1);
+	f3(1236,1237,1238,1);
+	f3(1241,1240,1239,1);
+	f3(1240,1241,1242,1);
+	f3(1245,1244,1243,1);
+	f3(1244,1245,1246,1);
+	f3(1249,1248,1247,1);
+	f3(1248,1249,1250,1);
+	f3(1253,1252,1251,1);
+	f3(1252,1253,1254,1);
+	f3(1256,1249,1255,1);
+	f3(1249,1256,1257,1);
+	f3(1249,1257,1250,1);
+	f3(1257,1256,1258,1);
+	f3(1258,1256,1251,1);
+	f3(1258,1251,1259,1);
+	f3(1259,1251,1252,1);
+	f3(1250,1261,1260,1);
+	f3(1261,1250,1257,1);
+	f3(1260,1261,1262,1);
+	f3(1265,1264,1263,1);
+	f3(1264,1265,1266,1);
+	f3(1269,1268,1267,1);
+	f3(1268,1269,1270,1);
+	f3(1270,1269,1271,1);
+	f3(1274,1273,1272,1);
+	f3(1273,1274,1275,1);
+	f3(1273,1275,1276,1);
+	f3(1276,1275,1277,1);
+	f3(1273,1278,1272,1);
+	f3(1278,1273,1279,1);
+	f3(1282,1281,1280,1);
+	f3(1281,1282,1283,1);
+	f3(1283,1282,1284,1);
+	f3(1284,1282,1285,1);
+	f3(1288,1287,1286,1);
+	f3(1291,1290,1289,1);
+	f3(1290,1291,1243,1);
+	f3(1243,1291,1292,1);
+	f3(1243,1292,1293,1);
+	f3(1243,1293,1245,1);
+	f3(1245,1293,1294,1);
+	f3(1245,1294,1287,1);
+	f3(1245,1287,1288,1);
+	f3(1245,1288,1295,1);
+	f3(1296,1277,1275,1);
+	f3(1277,1296,1297,1);
+	f3(1300,1299,1298,1);
+	f3(1299,1300,1301,1);
+	f3(1304,1303,1302,1);
+	f3(1303,1304,1305,1);
+	f3(1308,1307,1306,1);
+	f3(1307,1308,1309,1);
+	f3(1312,1311,1310,1);
+	f3(1311,1312,1313,1);
+	f3(1316,1315,1314,1);
+	f3(1315,1316,1317,1);
+	f3(1320,1319,1318,1);
+	f3(1319,1320,1321,1);
+	f3(1324,1323,1322,1);
+	f3(1323,1324,1325,1);
+	f3(1328,1327,1326,1);
+	f3(1327,1328,1329,1);
+	f3(1332,1331,1330,1);
+	f3(1331,1332,1333,1);
+	f3(1336,1335,1334,1);
+	f3(1335,1336,1337,1);
+	f3(1337,1336,1338,1);
+	f3(1335,1340,1339,1);
+	f3(1340,1335,1341,1);
+	f3(1341,1335,1337,1);
+	f3(1343,1263,1342,1);
+	f3(1263,1343,1265,1);
+	f3(1346,1345,1344,1);
+	f3(1345,1346,1347,1);
+	f3(1348,1347,1346,1);
+	f3(1347,1348,1349,1);
+	f3(1267,1351,1350,1);
+	f3(1351,1267,1268,1);
+	f3(1354,1353,1352,1);
+	f3(1353,1354,1355,1);
+	f3(1355,1354,1356,1);
+	f3(1356,1354,1357,1);
+	f3(1356,1357,1358,1);
+	f3(1344,1360,1359,1);
+	f3(1360,1344,1345,1);
+	f3(1363,1362,1361,1);
+	f3(1362,1363,1364,1);
+	f3(1364,1363,1365,1);
+	f3(1368,1367,1366,1);
+	f3(1367,1368,1369,1);
+	f3(1369,1368,1370,1);
+	f3(1373,1372,1371,1);
+	f3(1372,1373,1374,1);
+	f3(1377,1376,1375,1);
+	f3(1380,1379,1378,1);
+	f3(1379,1380,1381,1);
+	f3(1379,1381,1382,1);
+	f3(1382,1381,1376,1);
+	f3(1382,1376,1377,1);
+	f3(1382,1377,1383,1);
+	f3(1386,1385,1384,1);
+	f3(1389,1388,1387,1);
+	f3(1388,1389,1390,1);
+	f3(1393,1392,1391,1);
+	f3(1392,1393,1394,1);
+	f3(1397,1396,1395,1);
+	f3(1396,1397,1398,1);
+	f3(1401,1400,1399,1);
+	f3(1400,1401,1402,1);
+	f3(1404,1403,1356,1);
+	f3(1403,1404,1405,1);
+	f3(1405,1404,1406,1);
+	f3(1408,1346,1407,1);
+	f3(1346,1408,1348,1);
+	f3(1411,1410,1409,1);
+	f3(1410,1411,1412,1);
+	f3(1412,1411,1413,1);
+	f3(1412,1413,1414,1);
+	f3(1356,1415,1355,1);
+	f3(1415,1356,1403,1);
+	f3(1418,1417,1416,1);
+	f3(1417,1418,1419,1);
+	f3(1419,1418,1420,1);
+	f3(1423,1422,1421,1);
+	f3(1422,1423,1424,1);
+	f3(1424,1423,1425,1);
+	f3(1425,1423,1426,1);
+	f3(1426,1423,1427,1);
+	f3(1424,1429,1428,1);
+	f3(1429,1424,1425,1);
+	f3(1428,1429,1430,1);
+	f3(1428,1430,1431,1);
+	f3(1434,1433,1432,1);
+	f3(1433,1434,1435,1);
+	f3(1438,1437,1436,1);
+	f3(1437,1438,1439,1);
+	f3(1442,1441,1440,1);
+	f3(1441,1442,1443,1);
+	f3(1446,1445,1444,1);
+	f3(1449,1448,1447,1);
+	f3(1448,1449,1450,1);
+	f3(1450,1449,1445,1);
+	f3(1450,1445,1446,1);
+	f3(1452,1399,1451,1);
+	f3(1399,1452,1401,1);
+	f3(1455,1454,1453,1);
+	f3(1454,1455,1456,1);
+	f3(1459,1458,1457,1);
+	f3(1458,1459,1460,1);
+	f3(1460,1459,1461,1);
+	f3(1464,1463,1462,1);
+	f3(1463,1464,1465,1);
+	f3(1465,1464,1466,1);
+	f3(1468,1453,1467,1);
+	f3(1453,1468,1455,1);
+	f3(1455,1468,1469,1);
+	f3(1471,1467,1470,1);
+	f3(1467,1471,1468,1);
+	f3(1468,1471,1469,1);
+	f3(1474,1473,1472,1);
+	f3(1473,1474,1475,1);
+	f3(1475,1474,1476,1);
+	f3(1475,1476,1477,1);
+	f3(1480,1479,1478,1);
+	f3(1479,1480,1481,1);
+	f3(1481,1480,1482,1);
+	f3(1482,1480,1483,1);
+	f3(1486,1485,1484,1);
+	f3(1485,1486,1487,1);
+	f3(1487,1486,1488,1);
+	f3(1491,1490,1489,1);
+	f3(1490,1491,1492,1);
+	f3(1495,1494,1493,1);
+	f3(1494,1497,1496,1);
+	f3(1497,1494,1498,1);
+	f3(1498,1494,1495,1);
+	f3(1498,1495,1499,1);
+	f3(1498,1499,1500,1);
+	f3(1503,1502,1501,1);
+	f3(1502,1505,1504,1);
+	f3(1505,1502,1506,1);
+	f3(1506,1502,1503,1);
+	f3(1506,1503,1507,1);
+	f3(1506,1507,1508,1);
+	f3(1508,1507,1509,1);
+	f3(1512,1511,1510,1);
+	f3(1515,1514,1513,1);
+	f3(1514,1515,1516,1);
+	f3(1514,1516,1517,1);
+	f3(1517,1516,1518,1);
+	f3(1521,1520,1519,1);
+	f3(1520,1521,1522,1);
+	f3(1525,1524,1523,1);
+	f3(1524,1525,1526,1);
+	f3(1529,1528,1527,1);
+	f3(1528,1529,1530,1);
+	f3(1530,1529,1531,1);
+	f3(1530,1531,1532,1);
+	f3(1535,1534,1533,1);
+	f3(1534,1535,1536,1);
+	f3(1536,1535,1537,1);
+	f3(1540,1539,1538,1);
+	f3(1539,1540,1541,1);
+	f3(1492,1542,1490,1);
+	f3(1542,1492,1543,1);
+	f3(1546,1545,1544,1);
+	f3(1545,1546,1547,1);
+	f3(1550,1549,1548,1);
+	f3(1549,1550,1551,1);
+	f3(1554,1553,1552,1);
+	f3(1553,1554,1555,1);
+	f3(1558,1557,1556,1);
+	f3(1561,1560,1559,1);
+	f3(1560,1561,1562,1);
+	f3(1562,1561,1563,1);
+	f3(1566,1565,1564,1);
+	f3(1565,1566,1567,1);
+	f3(1570,1569,1568,1);
+	f3(1569,1570,1571,1);
+	f3(1571,1570,1572,1);
+	f3(1575,1574,1573,1);
+	f3(1578,1577,1576,1);
+	f3(1577,1578,1579,1);
+	f3(1579,1578,1580,1);
+	f3(1580,1582,1581,1);
+	f3(1582,1580,1583,1);
+	f3(1583,1580,1578,1);
+	f3(1569,1585,1584,1);
+	f3(1585,1569,1571,1);
+	f3(1584,1585,1574,1);
+	f3(1584,1574,1581,1);
+	f3(1581,1574,1575,1);
+	f3(1584,1581,1582,1);
+	f3(1588,1587,1586,1);
+	f3(1587,1588,1589,1);
+	f3(1592,1591,1590,1);
+	f3(1591,1592,1593,1);
+	f3(1593,1592,1594,1);
+	f3(1594,1592,1595,1);
+	f3(1595,1592,1596,1);
+	f3(1596,1592,1597,1);
+	f3(1596,1597,1598,1);
+	f3(1598,1597,1599,1);
+	f3(1598,1599,1600,1);
+	f3(1600,1602,1601,1);
+	f3(1602,1600,1603,1);
+	f3(1603,1600,1599,1);
+	f3(1604,1595,1596,1);
+	f3(1591,1606,1605,1);
+	f3(1606,1591,1593,1);
+	f3(1605,1606,1607,1);
+	f3(1610,1609,1608,1);
+	f3(1609,1610,1611,1);
+	f3(1614,1613,1612,1);
+	f3(1613,1614,1615,1);
+	f3(1618,1617,1616,1);
+	f3(1617,1618,1619,1);
+	f3(1622,1621,1620,1);
+	f3(1621,1622,1623,1);
+	f3(1626,1625,1624,1);
+	f3(1625,1626,1627,1);
+	f3(1630,1629,1628,1);
+	f3(1629,1630,1631,1);
+	f3(1634,1633,1632,1);
+	f3(1633,1634,1635,1);
+	f3(1638,1637,1636,1);
+	f3(1637,1638,1639,1);
+	f3(1642,1641,1640,1);
+	f3(1641,1642,1643,1);
+	f3(1646,1645,1644,1);
+	f3(1645,1646,1647,1);
+	f3(1650,1649,1648,1);
+	f3(1649,1650,1651,1);
+	f3(1654,1653,1652,1);
+	f3(1653,1654,1655,1);
+	f3(1658,1657,1656,1);
+	f3(1657,1658,1659,1);
+	f3(1662,1661,1660,1);
+	f3(1661,1662,1663,1);
+	f3(1666,1665,1664,1);
+	f3(1665,1666,1667,1);
+	f3(1670,1669,1668,1);
+	f3(1669,1670,1671,1);
+	f3(1674,1673,1672,1);
+	f3(1673,1674,1675,1);
+	f3(1675,1674,1676,1);
+	f3(1676,1674,1677,1);
+	f3(1678,1673,1675,1);
+	f3(1681,1680,1679,1);
+	f3(1680,1681,1682,1);
+	f3(1679,1680,1683,1);
+	f3(1680,1682,1684,1);
+	f3(1684,1682,1685,1);
+	f3(1685,1682,1686,1);
+	f3(1687,1683,1680,1);
+	f3(1690,1689,1688,1);
+	f3(1689,1690,1691,1);
+	f3(1694,1693,1692,1);
+	f3(1693,1694,1695,1);
+	f3(1695,1694,1696,1);
+	f3(1695,1696,1697,1);
+	f3(1700,1699,1698,1);
+	f3(1699,1700,1701,1);
+	f3(1704,1703,1702,1);
+	f3(1703,1704,1705,1);
+	f3(1708,1707,1706,1);
+	f3(1707,1708,1709,1);
+	f3(1712,1711,1710,1);
+	f3(1711,1712,1713,1);
+	f3(1716,1715,1714,1);
+	f3(1715,1716,1717,1);
+	f3(1720,1719,1718,1);
+	f3(1719,1720,1721,1);
+	f3(1724,1723,1722,1);
+	f3(1723,1724,1725,1);
+	f3(1725,1724,1726,1);
+	f3(1729,1728,1727,1);
+	f3(1728,1729,1730,1);
+	f3(1728,1730,1731,1);
+	f3(1731,1730,1732,1);
+	f3(1731,1732,1733,1);
+
+    this.computeCentroids();
+    this.computeNormals();
+    
+    function material_color( mi ) {
+        var m = materials[mi];
+        if( m.col_diffuse )
+            return (m.col_diffuse[0]*255 << 16) + (m.col_diffuse[1]*255 << 8) + m.col_diffuse[2]*255;
+        else if ( m.a_dbg_color )
+            return  m.a_dbg_color;
+        else 
+            return 0xffeeeeee;
+    }
+    
+    function v( x, y, z ) {
+        scope.vertices.push( new THREE.Vertex( new THREE.Vector3( x, y, z ) ) );
+    }
+
+    function f3( a, b, c, mi ) {
+        var material = scope.materials[ mi ];
+        scope.faces.push( new THREE.Face3( a, b, c, null, material ) );
+    }
+
+    function f4( a, b, c, d, mi ) {
+        var material = scope.materials[ mi ];
+        scope.faces.push( new THREE.Face4( a, b, c, d, null, material ) );
+    }
+
+    function f3n( a, b, c, mi, n1, n2, n3 ) {
+        var material = scope.materials[ mi ];
+        var n1x = normals[n1][0];
+        var n1y = normals[n1][1];
+        var n1z = normals[n1][2];
+        var n2x = normals[n2][0];
+        var n2y = normals[n2][1];
+        var n2z = normals[n2][2];
+        var n3x = normals[n3][0];
+        var n3y = normals[n3][1];
+        var n3z = normals[n3][2];
+        scope.faces.push( new THREE.Face3( a, b, c, 
+                          [new THREE.Vector3( n1x, n1y, n1z ), new THREE.Vector3( n2x, n2y, n2z ), new THREE.Vector3( n3x, n3y, n3z )], 
+                          material ) );
+    }
+
+    function f4n( a, b, c, d, mi, n1, n2, n3, n4 ) {
+        var material = scope.materials[ mi ];
+        var n1x = normals[n1][0];
+        var n1y = normals[n1][1];
+        var n1z = normals[n1][2];
+        var n2x = normals[n2][0];
+        var n2y = normals[n2][1];
+        var n2z = normals[n2][2];
+        var n3x = normals[n3][0];
+        var n3y = normals[n3][1];
+        var n3z = normals[n3][2];
+        var n4x = normals[n4][0];
+        var n4y = normals[n4][1];
+        var n4z = normals[n4][2];
+        scope.faces.push( new THREE.Face4( a, b, c, d,
+                          [new THREE.Vector3( n1x, n1y, n1z ), new THREE.Vector3( n2x, n2y, n2z ), new THREE.Vector3( n3x, n3y, n3z ), new THREE.Vector3( n4x, n4y, n4z )], 
+                          material ) );
+    }
+
+    function uv( u1, v1, u2, v2, u3, v3, u4, v4 ) {
+        var uv = [];
+        uv.push( new THREE.UV( u1, v1 ) );
+        uv.push( new THREE.UV( u2, v2 ) );
+        uv.push( new THREE.UV( u3, v3 ) );
+        if ( u4 && v4 ) uv.push( new THREE.UV( u4, v4 ) );
+        scope.uvs.push( uv );
+    }
+
+    function init_materials() {
+        scope.materials = [];
+        for(var i=0; i<materials.length; ++i) {
+            scope.materials[i] = [ create_material( materials[i], urlbase ) ];
+        }
+    }
+    
+    function is_pow2( n ) {
+        var l = Math.log(n) / Math.LN2;
+        return Math.floor(l) == l;
+    }
+    
+    function nearest_pow2(n) {
+        var l = Math.log(n) / Math.LN2;
+        return Math.pow( 2, Math.round(l) );
+    }
+    
+    function create_material( m ) {
+        var material;
+        
+        if( m.map_diffuse && urlbase ) {
+            var texture = document.createElement( 'canvas' );
+            
+            material = new THREE.MeshBitmapMaterial( texture );
+            var image = new Image();
+            
+            image.onload = function () {
+                
+                if ( !is_pow2(this.width) || !is_pow2(this.height) ) {
+                
+                    var w = nearest_pow2( this.width );
+                    var h = nearest_pow2( this.height );
+                    material.bitmap.width = w;
+                    material.bitmap.height = h;
+                    material.bitmap.getContext("2d").drawImage( this, 0, 0, w, h );
+                }
+                else {
+                    material.bitmap = this;
+                }
+                material.loaded = 1;
+                
+            };
+            image.src = urlbase + "/" + m.map_diffuse;
+        }
+        else if( m.col_diffuse ) {
+            var color = (m.col_diffuse[0]*255 << 16) + (m.col_diffuse[1]*255 << 8) + m.col_diffuse[2]*255;
+            material = new THREE.MeshColorFillMaterial( color, m.transparency );
+        }
+        else if( m.a_dbg_color ) {
+            material = new THREE.MeshColorFillMaterial( m.a_dbg_color );
+        }
+        else {
+            material = new THREE.MeshColorFillMaterial( 0xffeeeeee );
+        }
+
+        return material;
+    }
+}
+
+Q5.prototype = new THREE.Geometry();
+Q5.prototype.constructor = Q5;

+ 5790 - 0
examples/obj/Q5/Q5.obj

@@ -0,0 +1,5790 @@
+# WaveFront *.obj file (generated by CINEMA 4D)
+
+g Q5
+usemtl brown_dark
+v -9.709829 240.020203 9.661537
+v -9.709829 219.020203 -10.338461
+v -30.709829 201.020203 -10.338461
+v -9.709826 202.020203 56.661537
+v -30.709829 219.020203 -10.338461
+v -9.709827 240.020203 42.661537
+v -11.709826 202.020203 56.661537
+v -9.709827 214.020203 33.661537
+v -9.709827 214.020203 42.661537
+v -69.709824 186.020203 73.661537
+v -9.709826 214.020203 56.661537
+v -9.709827 205.020203 42.661537
+v 4.290173 132.020203 73.661537
+v -9.709829 190.020203 -10.338461
+v -9.709826 205.020203 53.661537
+v -76.709824 129.020203 -8.338461
+v -54.709831 150.020203 -9.338461
+v -10.709829 134.020203 4.661537
+v -1.709827 180.020203 4.661537
+v -1.709827 134.020203 -9.338461
+v -1.709827 168.020203 7.661537
+v -1.709827 180.020203 -4.338461
+v -1.709827 187.020203 4.661537
+v -1.709827 187.020203 17.661537
+v -1.709827 172.020203 -9.338461
+v -1.709827 168.020203 17.661537
+v -1.709827 172.020203 4.661537
+v -1.709827 181.020203 33.661537
+v -1.709827 162.020203 17.661537
+v -1.709827 200.020203 33.661537
+v -1.709827 200.020203 -4.338461
+v -1.709827 181.020203 7.661537
+v -1.709827 162.020203 4.661537
+v -1.709827 181.020203 17.661537
+v -1.709827 181.020203 39.661537
+v -1.709827 145.020203 4.661537
+v -85.709824 176.020203 58.661541
+v -9.709827 190.020203 42.661537
+v -1.709827 145.020203 26.661537
+v -1.709827 139.020203 26.661537
+v -11.709826 190.020203 56.661537
+v -83.709824 44.020195 44.661541
+v -83.709824 44.020195 56.661541
+v -83.709824 14.020195 24.661541
+v -83.709824 34.020195 44.661541
+v -85.709824 153.020203 73.661545
+v -76.709824 120.020195 41.661541
+v -54.709831 129.020203 -8.338461
+v -64.709831 110.020195 -8.338461
+v -69.709824 174.020203 66.661537
+v -56.709831 67.020195 7.661539
+v -70.709824 129.020203 -4.338461
+v -9.709827 200.020203 33.661537
+v -60.709831 52.020195 7.661541
+v -9.709829 200.020203 -4.338461
+v -70.709824 160.020203 42.661541
+v -9.709827 190.020203 33.661537
+v -56.709831 67.020195 5.661539
+v -9.709829 190.020203 -4.338461
+v -83.709824 82.020195 39.661541
+v -90.709824 176.020203 42.661541
+v -61.709824 -9.979805 56.661541
+v -85.709824 131.020203 35.661541
+v -85.709824 139.020203 35.661541
+v -90.709824 205.020203 53.661541
+v -76.709824 67.020195 7.661541
+v -56.709831 82.020195 -8.338461
+v -55.709831 181.020203 7.661539
+v -76.709824 91.020195 31.661541
+v -61.709827 52.020195 22.661541
+v -83.709824 -9.979805 -4.338457
+v -85.709824 153.020203 66.661545
+v -64.709831 160.020203 -9.338461
+v -90.709824 176.020203 58.661541
+v -1.709827 139.020203 39.661537
+v -76.709824 127.020195 41.661541
+v -83.709824 34.020195 56.661541
+v -40.709827 139.020203 39.661537
+v -85.709824 197.020203 61.661541
+v -85.709824 205.020203 53.661541
+v -85.709824 120.020195 4.661541
+v -85.709824 120.020195 41.661541
+v 4.290173 120.020195 35.661537
+v -9.709827 205.020203 42.661537
+v -71.709824 214.020203 9.661541
+v -40.709827 139.020203 39.661537
+v -76.709824 91.020195 39.661541
+v -77.709824 168.020203 7.661541
+v -83.709824 -13.979805 56.661541
+v -90.709824 200.020203 58.661541
+v -71.709824 222.020203 9.661541
+v -85.709824 200.020203 58.661541
+v -50.709827 230.020203 -0.338461
+v -1.709827 139.020203 39.661537
+v -70.709824 134.020203 -4.338461
+v -71.709824 222.020203 25.661541
+v -40.709827 139.020203 42.661537
+v -1.709827 134.020203 4.661537
+v -76.709824 120.020195 50.661541
+v -60.709831 -3.979805 -4.338461
+v -69.709824 153.020203 73.661537
+v -71.709824 214.020203 25.661541
+v -4.709827 50.020195 50.661537
+v -24.709827 102.020195 7.661539
+v 2.290173 32.020195 19.661537
+v -19.709826 50.020195 56.661537
+v -83.709824 50.020195 39.661541
+v -20.709827 32.020195 19.661537
+v -20.709829 33.020195 7.661539
+v -20.709829 41.020195 7.661539
+v -20.709829 -9.979805 -4.338461
+v -19.709826 -13.979805 56.661537
+v 2.290173 33.020195 7.661537
+v -19.709826 42.020195 56.661537
+v 2.290173 50.020195 56.661537
+v -20.709829 -13.979805 -4.338461
+v 2.290173 12.020195 44.661537
+v -19.709827 61.020195 22.661537
+v -4.709827 50.020195 39.661537
+v 4.290173 145.020203 26.661537
+v 4.290173 145.020203 4.661537
+v 4.290173 127.020195 41.661537
+v 4.290173 139.020203 26.661537
+v 4.290173 176.020203 42.661537
+v 4.290173 174.020203 66.661537
+v 4.290173 139.020203 42.661537
+v 9.290173 205.020203 42.661537
+v -4.709827 102.020195 7.661537
+v -24.709827 67.020195 7.661539
+v -4.709827 129.020203 4.661537
+v -10.709829 129.020203 4.661537
+v -10.709829 134.020203 4.661537
+v 9.290173 176.020203 42.661537
+v 9.290173 176.020203 58.661537
+v 9.290173 205.020203 53.661537
+v -4.709827 102.020195 -8.338461
+v -24.709829 102.020195 -8.338461
+v -4.709827 129.020203 -8.338461
+v -10.709829 134.020203 -4.338461
+v 4.290173 176.020203 58.661537
+v -4.709827 91.020195 39.661537
+v 2.290173 50.020195 39.661537
+v 2.290173 91.020195 39.661537
+v -4.709827 91.020195 31.661537
+v -4.709827 67.020195 7.661537
+v -24.709827 67.020195 5.661539
+v -24.709829 82.020195 -8.338461
+v -24.709827 82.020195 7.661539
+v -19.709827 52.020195 22.661537
+v 2.290173 67.020195 7.661537
+v -10.709829 129.020203 -4.338461
+v 2.290173 91.020195 31.661537
+v -20.709829 52.020195 7.661539
+v -20.709829 61.020195 7.661539
+v 2.290173 -9.979805 -4.338461
+v 4.290173 186.020203 73.661537
+v 2.290173 -13.979805 56.661537
+v -20.709829 -3.979805 -4.338461
+v 2.290173 -13.979805 -4.338461
+v 2.290173 12.020195 56.661537
+v 2.290173 19.020195 19.661537
+v 2.290173 -3.979805 -4.338461
+v -20.709827 19.020195 19.661537
+v -4.709827 127.020195 41.661537
+v -4.709827 120.020195 50.661537
+v -4.709827 120.020195 73.661537
+v -4.709827 127.020195 73.661537
+v 4.290173 153.020203 73.661537
+v -11.709826 147.020203 73.661537
+v 4.290173 127.020195 73.661537
+v -4.709827 120.020195 41.661537
+v -4.709827 120.020195 4.661537
+v 4.290173 120.020195 41.661537
+v -71.709824 222.020203 33.661541
+v -11.709826 153.020203 73.661537
+v 4.290173 153.020203 66.661537
+v -11.709826 174.020203 73.661537
+v -11.709826 174.020203 66.661537
+v -11.709826 153.020203 66.661537
+v -11.709827 147.020203 42.661537
+v 4.290173 120.020195 4.661537
+v 4.290173 174.020203 73.661537
+v -11.709826 186.020203 73.661537
+v 9.290173 200.020203 58.661537
+v 4.290173 200.020203 58.661537
+v -65.709831 181.020203 7.661541
+v -42.709827 181.020203 7.661539
+v -64.709831 134.020203 -9.338461
+v -85.709824 186.020203 73.661545
+v -85.709824 205.020203 42.661541
+v -76.709824 120.020195 35.661541
+v -71.709824 214.020203 17.661541
+v -83.709824 91.020195 39.661541
+v -64.709831 129.020203 -8.338461
+v -54.709831 120.020195 -8.338461
+v -85.709824 132.020203 61.661541
+v -83.709824 -13.979805 -4.338457
+v -69.709824 147.020203 42.661541
+v -83.709824 12.020195 56.661541
+v -85.709824 174.020203 73.661545
+v -83.709824 19.020195 19.661541
+v -56.709831 102.020195 -8.338461
+v -76.709824 120.020195 73.661537
+v -76.709824 127.020195 73.661537
+v -71.709824 222.020203 17.661541
+v -83.709824 23.020195 56.661541
+v -83.709824 4.020195 56.661541
+v -83.709824 23.020195 44.661541
+v -69.709824 147.020203 73.661537
+v -83.709824 4.020195 24.661541
+v -83.709824 68.020195 24.661541
+v -85.709824 127.020195 73.661545
+v -76.709824 120.020195 4.661541
+v -83.709824 -9.979805 56.661541
+v -76.709824 129.020203 4.661541
+v -83.709824 91.020195 31.661541
+v -60.709831 61.020195 7.661541
+v -76.709824 102.020195 -8.338461
+v -56.709831 82.020195 7.661539
+v -83.709824 67.020195 7.661541
+v -69.709824 174.020203 73.661537
+v -30.709829 230.020203 -0.338461
+v -61.709824 -9.979805 56.661541
+v -83.709824 50.020195 44.661541
+v -9.709827 214.020203 25.661537
+v -9.709827 222.020203 33.661537
+v -9.709829 222.020203 9.661537
+v -9.709827 222.020203 17.661537
+v -9.709827 222.020203 25.661537
+v -9.709829 214.020203 9.661537
+v -9.709827 214.020203 17.661537
+v -54.709831 134.020203 -9.338461
+v -26.709829 120.020195 -8.338461
+v -26.709829 150.020203 -9.338461
+v -83.709824 -3.979805 -4.338457
+v -16.709829 134.020203 -9.338461
+v -60.709827 19.020195 19.661541
+v 4.290173 197.020203 61.661537
+v 4.290173 205.020203 42.661537
+v 4.290173 132.020203 61.661537
+v 4.290173 205.020203 53.661537
+v 4.290173 131.020203 35.661537
+v 4.290173 139.020203 35.661537
+v -4.709827 120.020195 35.661537
+v -4.709827 120.020195 35.661537
+v -15.709829 181.020203 7.661537
+v -15.709829 168.020203 7.661537
+v -38.709827 181.020203 7.661539
+v -3.709827 181.020203 7.661537
+v -38.709827 168.020203 7.661539
+v -25.709827 168.020203 7.661539
+v -25.709827 181.020203 7.661539
+v -3.709827 168.020203 7.661537
+v -65.709831 168.020203 7.661541
+v -16.709829 134.020203 -9.338461
+v -16.709829 129.020203 -8.338461
+v -77.709824 181.020203 7.661541
+v -42.709827 168.020203 7.661539
+v -16.709829 110.020195 -8.338461
+v -55.709831 168.020203 7.661539
+v -16.709829 160.020203 -9.338461
+v -11.709827 150.020203 42.661537
+v -69.709824 150.020203 42.661541
+v -26.709829 134.020203 -9.338461
+v -26.709829 129.020203 -8.338461
+v -10.709827 160.020203 42.661537
+v -69.709824 153.020203 66.661537
+v 2.290173 82.020195 39.661537
+v -70.709824 129.020203 4.661541
+v -70.709824 134.020203 4.661541
+v -19.709826 -9.979805 56.661537
+v 2.290173 34.020195 56.661537
+v 2.290173 44.020195 56.661537
+v 2.290173 44.020195 44.661537
+v -19.709826 -9.979805 56.661537
+v 2.290173 34.020195 44.661537
+v 2.290173 23.020195 56.661537
+v 2.290173 14.020195 24.661537
+v 2.290173 68.020195 24.661537
+v 2.290173 4.020195 56.661537
+v 2.290173 23.020195 44.661537
+v 2.290173 4.020195 24.661537
+v 2.290173 -9.979805 56.661537
+v 2.290173 50.020195 44.661537
+v -71.709824 240.020203 9.661541
+v -71.709824 219.020203 -10.338461
+v -50.709831 201.020203 -10.338461
+v -71.709824 202.020203 56.661541
+v -50.709831 219.020203 -10.338461
+v -71.709824 240.020203 42.661541
+v -69.709824 202.020203 56.661541
+v -71.709824 214.020203 33.661541
+v -71.709824 214.020203 42.661541
+v -71.709824 214.020203 56.661541
+v -71.709824 205.020203 42.661541
+v -85.709824 132.020203 73.661545
+v -71.709824 190.020203 -10.338461
+v -71.709824 205.020203 53.661541
+v -70.709824 134.020203 4.661541
+v -79.709824 180.020203 4.661541
+v -79.709824 134.020203 -9.338461
+v -79.709824 168.020203 7.661541
+v -79.709824 180.020203 -4.338461
+v -79.709824 187.020203 4.661541
+v -79.709824 187.020203 17.661541
+v -79.709824 172.020203 -9.338461
+v -79.709824 168.020203 17.661541
+v -79.709824 172.020203 4.661541
+v -79.709824 181.020203 33.661541
+v -79.709824 162.020203 17.661541
+v -79.709824 200.020203 33.661541
+v -79.709824 200.020203 -4.338461
+v -79.709824 181.020203 7.661541
+v -79.709824 162.020203 4.661541
+v -79.709824 181.020203 17.661541
+v -79.709824 181.020203 39.661541
+v -79.709824 145.020203 4.661541
+v -71.709824 190.020203 42.661541
+v -79.709824 145.020203 26.661541
+v -79.709824 139.020203 26.661541
+v -69.709824 190.020203 56.661541
+v -71.709824 200.020203 33.661541
+v -71.709824 200.020203 -4.338461
+v -71.709824 190.020203 33.661541
+v -71.709824 190.020203 -4.338461
+v -79.709824 139.020203 39.661541
+v -85.709824 120.020195 35.661541
+v -71.709824 205.020203 42.661541
+v -79.709824 139.020203 39.661541
+v -79.709824 134.020203 4.661541
+v -76.709824 50.020195 50.661541
+v -56.709831 102.020195 7.661539
+v -83.709824 32.020195 19.661541
+v -61.709824 50.020195 56.661541
+v -60.709827 32.020195 19.661541
+v -60.709831 33.020195 7.661541
+v -60.709831 41.020195 7.661541
+v -60.709831 -9.979805 -4.338461
+v -61.709824 -13.979805 56.661541
+v -83.709824 33.020195 7.661541
+v -61.709824 42.020195 56.661541
+v -83.709824 50.020195 56.661541
+v -60.709831 -13.979805 -4.338461
+v -83.709824 12.020195 44.661541
+v -61.709827 61.020195 22.661541
+v -76.709824 50.020195 39.661541
+v -85.709824 145.020203 26.661541
+v -85.709824 145.020203 4.661541
+v -85.709824 127.020195 41.661541
+v -85.709824 139.020203 26.661541
+v -85.709824 176.020203 42.661541
+v -85.709824 174.020203 66.661545
+v -85.709824 139.020203 42.661541
+v -90.709824 205.020203 42.661541
+v -76.709824 102.020195 7.661541
+
+vt 1 1 0
+vt 0 0 0
+vt 0 1 0
+vt 1 0 0
+vt 1 1 0
+vt 0 1 0
+vt 1 0 0
+vt 1 1 0
+vt 0 1 0
+vt 0 0 0
+vt 0 0 0
+vt 1 1 0
+vt 1 1 0
+vt 1 0 0
+vt 0 1 0
+vt 1 1 0
+vt 0 0 0
+vt 0 1 0
+vt 1 0 0
+vt 1 1 0
+vt 0 1 0
+vt 0 0 0
+vt 1 1 0
+vt 0 1 0
+vt 1 0 0
+vt 1 1 0
+vt 1 0 0
+vt 1 1 0
+vt 0 1 0
+vt 1 0 0
+vt 0 0 0
+vt 1 0 0
+vt 0.175944 0 0
+vt 1 1 0
+vt 0 1 0
+vt 1 1 0
+vt 1 0 0
+vt 0 1 0
+vt 0 0 0
+vt 0 0 0
+vt 1 1 0
+vt 1 0 0
+vt 0 0 0
+vt 1 0 0
+vt 0 1 0
+vt 1 0 0
+vt 1 1 0
+vt 0 1 0
+vt 1 0 0
+vt 0 1 0
+vt 0 0 0
+vt 0 1 0
+vt 1 1 0
+vt 0 1 0
+vt 0 1 0
+vt 1 1 0
+vt 1 1 0
+vt 0 1 0
+vt 0 0 0
+vt 1 1 0
+vt 0 1 0
+vt 1 0 0
+vt 1 1 0
+vt 0 1 0
+vt 0 1 0
+vt 1 0 0
+vt 0 1 0
+vt 0 0 0
+vt 1 1 0
+vt 0 1 0
+vt 0 1 0
+vt 0 0 0
+vt 0 1 0
+vt 1 0 0
+vt 0 0 0
+vt 1 0 0
+vt 0 1 0
+vt 1 1 0
+vt 0 0 0
+vt 1 1 0
+vt 0 0 0
+vt 1 0 0
+vt 1 1 0
+vt 0 0 0
+vt 0 1 0
+vt 0.792202 0.128197 0
+vt 1 0 0
+vt 0 1 0
+vt 1 0 0
+vt 0 1 0
+vt 0.934109 0 0
+vt 1 0 0
+vt 1 1 0
+vt 0.934109 1 0
+vt 1 1 0
+vt 0 0 0
+vt 0 1 0
+vt 0.059059 0.67305 0
+vt 0.940894 0 0
+vt 0.059106 0.993856 0
+vt 1 1 0
+vt 0 0.140245 0
+vt 0.22231 0.676016 0
+vt 1 0 0
+vt 0 0 0
+vt 0 1 0
+vt 1 1 0
+vt 1 1 0
+vt 0 0 0
+vt 0 0 0
+vt 1 0 0
+vt 0 0 0
+vt 0 1 0
+vt 1 1 0
+vt 0 0 0
+vt 1 0 0
+vt 0 1 0
+vt 1 0 0
+vt 0 0 0
+vt 0 1 0
+vt 1 1 0
+vt 0 0 0
+vt 1 0 0
+vt 0 0 0
+vt 0 1 0
+vt 1 1 0
+vt 1 0 0
+vt 0 0.295879 0
+vt 0.234396 0.037931 0
+vt 0 1 0
+vt 1 1 0
+vt 1 0 0
+vt 0 0 0
+vt 0 1 0
+vt 1 1 0
+vt 1 1 0
+vt 0.5 0 0
+vt 1 0 0
+vt 1 0 0
+vt 0 1 0
+vt 0.066424 1 0
+vt 1 0 0
+vt 0.629667 1 0
+vt 0 0.370333 0
+vt 1 1 0
+vt 0.590312 1 0
+vt 0 0 0
+vt 0.337951 1 0
+vt 1 1 0
+vt 0.000217 0 0
+vt 0 0 0
+vt 1 1 0
+vt 1 0 0
+vt 0 1 0
+vt 1 1 0
+vt 1 0 0
+vt 1 0 0
+vt 0 1 0
+vt 1 0 0
+vt 0 0 0
+vt 1 0.233411 0
+vt 0.431554 1 0
+vt 0 0 0
+vt 1 0 0
+vt 1 1 0
+vt 0 0 0
+vt 1 0 0
+vt 0 0 0
+vt 1 0 0
+vt 1 1 0
+vt 0 1 0
+vt 0 1 0
+vt 1 0 0
+vt 0.222349 0.994922 0
+vt 0.777651 0 0
+vt 0 0 0
+vt 0 1 0
+vt 0 1 0
+vt 1 1 0
+vt 0 0 0
+vt 0 1 0
+vt 0 0 0
+vt 1 0 0
+vt 1 0 0
+vt 1 1 0
+vt 1 0.849865 0
+vt 0.849865 0 0
+vt 0 1 0
+vt 1 1 0
+vt 1 0 0
+vt 0 1 0
+vt 0 0 0
+vt 1 0 0
+vt 0.521365 0.794984 0
+vt 1 1 0
+vt 0 1 0
+vt 0 0 0
+vt 0 1 0
+vt 0 0.00373 0
+vt 1 0 0
+vt 0 0 0
+vt 0 1 0
+vt 0 0.824293 0
+vt 1 0 0
+vt 1 1 0
+vt 1 1 0
+vt 1 0 0
+vt 0 1 0
+vt 1 0 0
+vt 0 0 0
+vt 0 1 0
+vt 0 0 0
+vt 1 0 0
+vt 1 1 0
+vt 0 1 0
+vt 1 0 0
+vt 0.934109 0.794984 0
+vt 1 1 0
+vt 1 0 0
+vt 0 0 0
+vt 1 0 0
+vt 1 1 0
+vt 0 0.496329 0
+vt 0.496329 1 0
+vt 0 0 0
+vt 0 1 0
+vt 1 0 0
+vt 1 1 0
+vt 0 0 0
+vt 0 1 0
+vt 1 1 0
+vt 1 0 0
+vt 1 1 0
+vt 1 0 0
+vt 1 0 0
+vt 0 0 0
+vt 0 1 0
+vt 1 0 0
+vt 0 0 0
+vt 1 0 0
+vt 1 1 0
+vt 0 0.000001 0
+vt 0 0 0
+vt 1 0 0
+vt 1 1 0
+vt 1 1 0
+vt 0 0 0
+vt 0 1 0
+vt 0 0 0
+vt 1 1 0
+vt 0 0.999685 0
+vt 1 1 0
+vt 0 1 0
+vt 1 0 0
+vt 0 1 0
+vt 1 1 0
+vt 0.431554 0 0
+vt 0 1 0
+vt 0 0 0
+vt 0.68824 1 0
+vt 0 1 0
+vt 1 0 0
+vt 1 1 0
+vt 1 0 0
+vt 0 1 0
+vt 1 1 0
+vt 0 0.000061 0
+vt 0 0.99347 0
+vt 1 0 0
+vt 0 0 0
+vt 0 1 0
+vt 0 0 0
+vt 1 1 0
+vt 1 0 0
+vt 0.556543 0.68209 0
+vt 0 1 0
+vt 0 0 0
+vt 1 0 0
+vt 0 1 0
+vt 1 1 0
+vt 1 1 0
+vt 0 0 0
+vt 1 0 0
+vt 1 0 0
+vt 0 1 0
+vt 0 0 0
+vt 1 1 0
+vt 0 0 0
+vt 0 1 0
+vt 1 0 0
+vt 1 1 0
+vt 1 0 0
+vt 1 1 0
+vt 0 0 0
+vt 1 1 0
+vt 0 0 0
+vt 1 0 0
+vt 0 1 0
+vt 0 0 0
+vt 1 1 0
+vt 1 1 0
+vt 0 0 0
+vt 1 0 0
+vt 1 1 0
+vt 0 1 0
+vt 1 0 0
+vt 0 1 0
+vt 0 1 0
+vt 1 0 0
+vt 1 0 0
+vt 0 1 0
+vt 1 1 0
+vt 0 1 0
+vt 0 0 0
+vt 0 0 0
+vt 1 1 0
+vt 1 0 0
+vt 0 1 0
+vt 1 0 0
+vt 0 0 0
+vt 1 1 0
+vt 1 1 0
+vt 0.337951 1 0
+vt 0 0 0
+vt 0 1 0
+vt 1 0 0
+vt 0 0 0
+vt 0 1 0
+vt 0 0 0
+vt 1 0 0
+vt 0 1 0
+vt 1 1 0
+vt 0 0 0
+vt 0 1 0
+vt 1 0 0
+vt 0 0 0
+vt 1 1 0
+vt 1 0 0
+vt 0 1 0
+vt 0 0 0
+vt 1 1 0
+vt 0 1 0
+vt 1 1 0
+vt 0 0 0
+vt 1 0 0
+vt 0 1 0
+vt 1 0 0
+vt 0 1 0
+vt 0 0 0
+vt 1 1 0
+vt 0.000217 0 0
+vt 1 1 0
+vt 0 0 0
+vt 0 1 0
+vt 0 0 0
+vt 0 1 0
+vt 1 1 0
+vt 1 1 0
+vt 1 1 0
+vt 0 0 0
+vt 0 0 0
+vt 0 0 0
+vt 0 1 0
+vt 1 0 0
+vt 1 1 0
+vt 1 1 0
+vt 0 0 0
+vt 0 1 0
+vt 1 1 0
+vt 0 0 0
+vt 1 1 0
+vt 0 1 0
+vt 0 0 0
+vt 1 0 0
+vt 0 0 0
+vt 0 1 0
+vt 1 0.233411 0
+vt 0.431554 1 0
+vt 1 0 0
+vt 1 1 0
+vt 0 0 0
+vt 0 0.00373 0
+vt 1 0 0
+vt 1 1 0
+vt 1 0 0
+vt 1 0 0
+vt 0 1 0
+vt 0 0 0
+vt 1 1 0
+vt 0.443426 0 0
+vt 0.556574 0.997104 0
+vt 0 0 0
+vt 1 0 0
+vt 0 1 0
+vt 0.840637 0.333333 0
+vt 1 0.540862 0
+vt 0 0 0
+vt 1 1 0
+vt 1 0 0
+vt 0 0 0
+vt 1 1 0
+vt 1 0 0
+vt 0 1 0
+vt 0 1 0
+vt 1 0 0
+vt 1 1 0
+vt 0 1 0
+vt 0 0 0
+vt 1 1 0
+vt 0 0 0
+vt 0 1 0
+vt 1 0 0
+vt 0 0 0
+vt 1 1 0
+vt 1 0 0
+vt 1 0 0
+vt 0 1 0
+vt 1 1 0
+vt 0 0 0
+vt 1 0 0
+vt 1 1 0
+vt 0 0 0
+vt 0 1 0
+vt 0 0 0
+vt 1 1 0
+vt 1 0 0
+vt 1 1 0
+vt 1 1 0
+vt 0 0 0
+vt 0 1 0
+vt 1 1 0
+vt 1 0 0
+vt 1 0 0
+vt 0 0 0
+vt 1 1 0
+vt 1 1 0
+vt 0 0 0
+vt 1 0 0
+vt 0 1 0
+vt 0 0 0
+vt 1 1 0
+vt 0 0 0
+vt 0 1 0
+vt 1 0 0
+vt 1 1 0
+vt 0 0 0
+vt 0 1 0
+vt 0 1 0
+vt 1 0 0
+vt 0 0 0
+vt 1 0 0
+vt 1 0 0
+vt 1 1 0
+vt 0 1 0
+vt 1 1 0
+vt 1 0 0
+vt 0 1 0
+vt 0 0.824293 0
+vt 0 1 0
+vt 0 0 0
+vt 1 0 0
+vt 1 1 0
+vt 1 0 0
+vt 1 0 0
+vt 1 1 0
+vt 0 1 0
+vt 0 0 0
+vt 1 0 0
+vt 1 1 0
+vt 1 0.5 0
+vt 1 1 0
+vt 1 0 0
+vt 0 0.849865 0
+vt 0 1 0
+vt 1 1 0
+vt 0 0 0
+vt 0 0 0
+vt 0 1 0
+vt 1 0 0
+vt 0 1 0
+vt 0 1 0
+vt 1 0 0
+vt 1 0 0
+vt 1 1 0
+vt 0 0.37782 0
+vt 0 1 0
+vt 1 0.37782 0
+vt 1 1 0
+vt 0 1 0
+vt 1 0 0
+vt 0 0 0
+vt 1 1 0
+vt 0 0 0
+vt 0 1 0
+vt 0.556574 0.997104 0
+vt 0.443426 0 0
+vt 1 1 0
+vt 1 0 0
+vt 1 0 0
+vt 0 0 0
+vt 0 1 0
+vt 1 1 0
+vt 1 0 0
+vt 0 0 0
+vt 0 1 0
+vt 1 1 0
+vt 0 0 0
+vt 1 0 0
+vt 1 1 0
+vt 0.389458 0.996013 0
+vt 0.610542 0 0
+vt 0.288123 0 0
+vt 0.001144 1 0
+vt 0 1 0
+vt 0.389406 0.679053 0
+vt 1 1 0
+vt 0 0 0
+vt 0 1 0
+vt 0.522512 1 0
+vt 0.182127 0.440267 0
+vt 0 0 0
+vt 0 1 0
+vt 0 1 0
+vt 0 0 0
+vt 0 1 0
+vt 0 0 0
+vt 1 0 0
+vt 1 1 0
+vt 0 0 0
+vt 0.000264 0.233411 0
+vt 0.066424 0 0
+vt 1 0 0
+vt 0 1 0
+vt 0 0 0
+vt 1 1 0
+vt 1 0 0
+vt 1 1 0
+vt 0 0 0
+vt 0 1 0
+vt 0 0 0
+vt 1 0 0
+vt 1 1 0
+vt 1 1 0
+vt 1 0 0
+vt 0 1 0
+vt 1 0 0
+vt 1 1 0
+vt 0 0 0
+vt 0 1 0
+vt 1 0 0
+vt 1 1 0
+vt 0 0 0
+vt 0 0.671977 0
+vt 1 0.704321 0
+vt 1 0 0
+vt 0 0 0
+vt 0 1 0
+vt 1 0 0
+vt 0 1 0
+vt 1 1 0
+vt 0 0 0
+vt 0 1 0
+vt 1 1 0
+vt 1 0 0
+vt 1 1 0
+vt 1 0 0
+vt 1 1 0
+vt 1 0 0
+vt 1 0 0
+vt 0 0 0
+vt 0 1 0
+vt 0 0 0
+vt 0 0 0
+vt 1 1 0
+vt 1 1 0
+vt 0 1 0
+vt 1 0 0
+vt 1 1 0
+vt 0 1 0
+vt 1 0 0
+vt 1 0.540862 0
+vt 0.840637 0.333333 0
+vt 0 0 0
+vt 1 1 0
+vt 1 0 0
+vt 1 1 0
+vt 0 0 0
+vt 0 1 0
+vt 0 0 0
+vt 1 0 0
+vt 1 0.5 0
+vt 1 1 0
+vt 0 1 0
+vt 1 1 0
+vt 1 0.37782 0
+vt 0 0.37782 0
+vt 0 1 0
+vt 0 0 0
+vt 1 1 0
+vt 0 0.370333 0
+vt 0.629667 1 0
+vt 1 1 0
+vt 0.590312 1 0
+vt 1 1 0
+vt 0 1 0
+vt 0 0.849865 0
+vt 0 0 0
+vt 1 1 0
+vt 1 0 0
+vt 0 1 0
+vt 0 0 0
+vt 1 0 0
+vt 0 1 0
+vt 1 1 0
+vt 0 1 0
+vt 0 0 0
+vt 0 1 0
+vt 0 0 0
+vt 1 1 0
+vt 1 0 0
+vt 0 1 0
+vt 0 1 0
+vt 0 0 0
+vt 0 0 0
+vt 0 1 0
+vt 1 0 0
+vt 0 1 0
+vt 0 1 0
+vt 1 1 0
+vt 0 0 0
+vt 1 0 0
+vt 1 1 0
+vt 0 0 0
+vt 0 1 0
+vt 0 0 0
+vt 1 1 0
+vt 0 1 0
+vt 1 0 0
+vt 0 0 0
+vt 0.061993 0.010032 0
+vt 0 0.078254 0
+vt 0 0.078254 0
+vt 0.061993 0.010032 0
+vt 0 1 0
+vt 1 1 0
+vt 0 1 0
+vt 1 1 0
+vt 0.234396 0.037931 0
+vt 0 0.295879 0
+vt 0 1 0
+vt 0 0 0
+vt 1 0 0
+vt 1 0 0
+vt 1 1 0
+vt 0.5 0 0
+vt 1 1 0
+vt 0 0 0
+vt 0 1 0
+vt 1 1 0
+vt 0 0 0
+vt 1 0 0
+vt 0.066424 1 0
+vt 0.777651 0 0
+vt 0.222349 0.994922 0
+vt 0.940894 0 0
+vt 0.059106 0.993856 0
+vt 0.059059 0.67305 0
+vt 0 0 0
+vt 0.22231 0.676016 0
+vt 0.610542 0 0
+vt 0.389458 0.996013 0
+vt 0 0.140245 0
+vt 1 1 0
+vt 0 1 0
+vt 0 0 0
+vt 0 1 0
+vt 0.288123 0 0
+vt 0.001144 1 0
+vt 0.389406 0.679053 0
+vt 0 1 0
+vt 0 0 0
+vt 0.182127 0.440267 0
+vt 0.522512 1 0
+vt 0.066424 0 0
+vt 0.000264 0.233411 0
+vt 1 0 0
+vt 0 0.671977 0
+vt 1 0.704321 0
+vt 1 0 0
+vt 0 1 0
+vt 1 1 0
+vt 0 0 0
+vt 1 0 0
+vt 0 1 0
+vt 1 1 0
+vt 1 0 0
+vt 0 0 0
+vt 1 1 0
+vt 0 1 0
+vt 0 0 0
+vt 1 0 0
+vt 1 1 0
+vt 0 0 0
+vt 0 1 0
+vt 1 1 0
+vt 1 1 0
+vt 0 1 0
+vt 1 1 0
+vt 0 1 0
+vt 0 0 0
+vt 0 0 0
+vt 1 1 0
+vt 1 1 0
+vt 0 1 0
+vt 1 0 0
+vt 1 0 0
+vt 0.175944 0 0
+vt 1 1 0
+vt 0 0 0
+vt 0 1 0
+vt 1 0 0
+vt 0 1 0
+vt 0 0 0
+vt 1 0 0
+vt 0 1 0
+vt 1 1 0
+vt 0 0 0
+vt 1 0 0
+vt 1 1 0
+vt 0 1 0
+vt 1 1 0
+vt 0 1 0
+vt 0 1 0
+vt 1 0 0
+vt 0 0 0
+vt 0 1 0
+vt 1 0 0
+vt 0 1 0
+vt 0 0 0
+vt 1 0 0
+vt 1 0 0
+vt 0 0 0
+vt 1 1 0
+vt 0 1 0
+vt 1 0 0
+vt 1 1 0
+vt 1 0 0
+vt 0 1 0
+vt 0 0 0
+vt 0 1 0
+vt 1 0 0
+vt 0 0 0
+vt 0 1 0
+vt 1 1 0
+vt 0 1 0
+vt 0 1 0
+vt 0 1 0
+vt 1 1 0
+vt 0 1 0
+vt 1 0 0
+vt 1 1 0
+vt 0 1 0
+vt 0 0 0
+vt 1 0 0
+vt 1 1 0
+vt 0 1 0
+vt 0 0 0
+vt 1 1 0
+vt 0 0 0
+vt 0 1 0
+vt 0.792202 0.128197 0
+vt 1 0 0
+vt 0 1 0
+vt 0.934109 0 0
+vt 1 0 0
+vt 0.934109 1 0
+vt 1 0 0
+vt 1 1 0
+vt 1 0 0
+vt 1 1 0
+vt 0 1 0
+vt 1 1 0
+vt 0 1 0
+vt 0 0 0
+vt 0 1 0
+vt 1 1 0
+vt 1 0 0
+vt 0 0 0
+vt 0 1 0
+vt 0 1 0
+vt 0 0 0
+vt 1 0 0
+vt 0.849865 0 0
+vt 1 0.849865 0
+vt 0 1 0
+vt 0 1 0
+vt 1 0 0
+vt 1 1 0
+vt 0.934109 0.794984 0
+vt 1 1 0
+vt 0 1 0
+vt 1 0 0
+vt 1 1 0
+vt 0 0 0
+vt 0 1 0
+vt 0 0 0
+vt 1 0 0
+vt 1 1 0
+vt 1 1 0
+vt 1 0 0
+vt 0 0 0
+vt 1 0 0
+vt 0 0.000001 0
+vt 0 1 0
+vt 1 1 0
+vt 0 1 0
+vt 0 0 0
+vt 1 1 0
+vt 0 0.999685 0
+vt 1 0 0
+vt 1 0 0
+vt 0 0 0
+vt 0.431554 0 0
+vt 0 1 0
+vt 1 1 0
+vt 0 0 0
+vt 0.68824 1 0
+vt 0 1 0
+vt 1 0 0
+vt 1 1 0
+vt 0 0 0
+vt 1 1 0
+vt 0 0.000061 0
+vt 1 0 0
+vt 0 1 0
+vt 0 0.99347 0
+vt 0 0 0
+vt 0 1 0
+vt 0.556543 0.68209 0
+vt 1 0 0
+vt 1 1 0
+vt 1 1 0
+vt 1 0 0
+vt 1 1 0
+vt 0 1 0
+vt 0 0 0
+vt 1 0 0
+vt 1 1 0
+vt 0 1 0
+vt 1 0 0
+vt 1 1 0
+vt 0 0 0
+vt 1 0 0
+vt 1 1 0
+vt 0 0 0
+vt 0 1 0
+vt 1 1 0
+vt 1 0 0
+vt 0 0 0
+vt 0 0 0
+vt 1 1 0
+vt 1 0 0
+vt 0 1 0
+vt 1 1 0
+vt 0 0 0
+vt 1 1 0
+vt 1 0 0
+vt 0 0 0
+vt 1 1 0
+vt 0 1 0
+vt 0 1 0
+vt 1 0 0
+
+f 107/246 224/554 342/834 331/806 346/845 
+f 207/513 210/519 235/581 71/161 214/530 
+f 262/640 266/648 38/86 124/293 126/298 180/446 
+f 50/114 267/652 198/493 263/642 56/128 318/770 
+f 266/649 262/641 180/446 179/444 178/441 38/88 
+f 155/377 162/396 282/683 280/678 283/685 
+f 142/344 268/655 143/345 141/341 119/279 
+f 103/239 115/269 284/688 142/343 119/279 
+f 283/684 280/677 160/390 277/670 272/663 273/665 115/269 106/245 271/662 
+f 334/815 342/834 43/99 77/175 206/511 199/496 207/512 214/531 62/141 
+f 87/195 193/479 60/137 107/247 346/845 
+f 353/863 351/857 318/771 56/129 263/643 198/493 
+f 107/246 60/138 211/524 210/522 
+f 29/68 28/66 35/78 39/90 
+f 238/588 156/380 182/451 125/296 
+f 176/434 168/415 13/34 240/593 
+f 318/772 351/857 61/140 354/868 
+f 76/173 47/107 203/505 204/507 
+f 36/81 33/74 29/69 39/90 
+f 242/600 243/603 126/300 240/595 
+f 238/589 125/297 176/435 240/593 
+f 40/94 123/291 120/283 39/91 
+f 135/324 127/303 239/592 241/597 
+f 11/30 4/12 15/38 
+f 180/447 169/418 175/432 179/442 
+f 181/450 123/290 243/602 83/188 
+f 204/506 212/527 349/852 76/172 
+f 181/448 98/228 121/284 
+f 226/561 227/564 1/1 6/18 
+f 38/88 57/130 53/120 
+f 83/186 173/427 171/423 245/606 
+f 242/601 122/287 173/426 83/187 
+f 306/743 73/167 188/467 301/730 
+f 225/556 229/568 226/560 8/24 
+f 177/437 182/451 156/380 183/454 
+f 303/735 325/792 59/135 22/52 
+f 240/596 13/33 170/419 
+f 171/422 173/426 122/287 164/404 
+f 6/17 1/4 285/691 290/704 
+f 237/586 201/499 333/813 335/816 
+f 120/282 121/284 36/80 39/90 
+f 217/538 336/820 340/830 220/545 
+f 286/695 297/721 323/785 
+f 55/125 59/134 14/35 
+f 215/532 213/528 81/181 330/804 
+f 294/715 293/712 328/796 298/723 
+f 219/542 332/810 202/504 67/154 
+f 51/116 219/542 67/154 58/133 
+f 344/841 224/555 107/247 210/522 
+f 53/122 225/558 8/23 84/191 
+f 7/21 183/453 156/379 238/589 
+f 355/872 66/152 69/158 191/476 
+f 62/141 214/531 89/201 339/828 
+f 238/589 185/461 4/12 7/21 
+f 12/32 239/591 127/301 38/88 
+f 301/729 95/219 270/660 330/805 
+f 306/743 301/728 330/804 308/748 
+f 250/616 258/631 187/465 248/613 
+f 257/629 186/463 254/623 88/198 
+f 101/233 46/104 212/526 209/518 
+f 235/584 100/232 338/823 71/162 
+f 328/798 190/472 80/180 298/722 
+f 95/220 301/728 20/47 139/334 
+f 286/695 323/787 85/192 91/208 
+f 186/462 68/156 260/635 254/622 
+f 68/155 187/464 258/630 260/634 
+f 259/633 233/577 265/647 256/627 
+f 85/193 323/786 322/783 102/236 
+f 74/170 61/139 351/859 37/85 
+f 131/314 18/44 98/228 130/311 
+f 202/503 332/809 355/871 218/540 
+f 205/509 91/207 85/192 192/478 
+f 30/70 53/120 57/130 28/65 
+f 311/755 305/738 310/753 309/750 
+f 97/224 126/300 94/217 86/194 
+f 53/120 30/70 31/71 55/125 
+f 180/445 126/298 97/223 
+f 270/659 95/219 52/119 269/658 
+f 59/134 55/125 31/71 22/52 
+f 38/88 53/121 12/32 
+f 58/133 67/153 147/357 146/354 
+f 178/440 177/438 41/95 38/88 
+f 43/100 42/98 45/103 77/174 
+f 255/625 264/645 234/580 261/639 
+f 23/54 31/71 30/70 24/55 
+f 23/54 19/45 22/52 31/71 
+f 315/763 305/740 24/56 34/77 
+f 339/827 89/200 197/491 343/838 
+f 289/703 93/213 222/551 5/15 
+f 197/490 89/199 214/530 71/161 
+f 302/732 313/757 257/628 88/198 
+f 90/205 74/169 37/84 92/211 
+f 65/149 90/204 92/210 80/178 
+f 37/83 351/858 353/865 196/486 
+f 98/227 36/80 121/285 
+f 29/67 24/55 30/70 28/65 
+f 21/50 32/73 34/77 26/61 
+f 286/695 289/701 287/697 297/720 
+f 338/825 62/142 339/826 343/838 
+f 342/836 224/553 42/98 43/100 
+f 145/351 129/309 104/241 128/307 
+f 111/257 158/385 162/398 155/378 
+f 151/367 139/335 132/316 131/313 
+f 138/333 130/310 172/425 136/325 
+f 315/762 313/757 302/732 307/744 
+f 144/348 145/350 128/306 245/607 
+f 109/251 113/263 105/244 108/249 
+f 165/408 103/238 119/280 141/342 
+f 231/572 228/566 229/567 225/557 
+f 159/388 157/383 112/260 116/271 
+f 105/243 113/262 150/365 279/674 
+f 345/843 70/160 54/124 217/536 
+f 114/267 110/254 109/250 108/248 
+f 133/318 124/293 38/87 127/302 
+f 240/595 170/420 122/286 242/600 
+f 249/615 32/73 21/50 253/621 
+f 181/450 121/284 120/281 123/289 
+f 305/739 304/737 23/53 24/55 
+f 179/443 175/431 168/415 176/434 
+f 319/775 320/778 329/801 316/767 
+f 216/535 69/157 66/151 220/545 
+f 199/497 344/840 210/521 207/514 
+f 279/674 278/673 161/393 105/243 
+f 128/305 104/241 137/330 136/327 
+f 177/437 183/452 7/20 41/97 
+f 122/286 170/420 167/414 164/403 
+f 155/378 159/387 116/272 111/257 
+f 124/294 133/317 134/321 140/339 
+f 333/812 340/830 336/819 335/817 
+f 84/191 9/26 11/30 15/39 
+f 230/570 227/564 228/565 231/571 
+f 255/624 261/638 25/57 20/48 
+f 1/3 227/563 2/7 
+f 4/11 185/461 241/599 15/38 
+f 115/270 103/238 331/808 342/835 
+f 209/517 169/416 180/445 198/494 
+f 316/766 329/800 94/216 35/79 
+f 283/685 157/382 159/386 155/377 
+f 354/866 90/203 65/148 
+f 93/213 289/702 286/694 285/692 
+f 336/818 337/821 341/833 335/816 
+f 125/296 182/451 177/436 178/439 
+f 77/174 45/103 208/515 206/510 
+f 151/368 131/312 130/310 138/333 
+f 328/797 290/705 174/430 292/710 
+f 152/370 144/347 141/341 143/346 
+f 347/848 348/850 81/182 350/856 
+f 191/475 69/157 87/197 99/230 
+f 230/570 55/127 2/5 227/562 
+f 162/397 158/385 163/401 161/394 
+f 226/559 6/16 84/190 8/22 
+f 37/82 196/488 79/177 92/210 
+f 80/179 92/209 288/700 298/722 
+f 81/183 213/529 191/473 327/794 
+f 94/215 40/93 39/89 35/79 
+f 179/442 176/433 125/295 178/439 
+f 137/329 104/240 148/358 147/356 
+f 147/356 148/358 129/309 146/353 
+f 346/844 331/807 99/229 87/196 
+f 184/458 127/301 135/323 
+f 332/809 51/116 66/150 355/870 
+f 147/355 67/153 202/502 137/328 
+f 153/373 149/361 118/278 154/374 
+f 166/411 171/421 164/402 167/413 
+f 245/606 172/424 181/449 83/186 
+f 134/320 133/317 127/301 184/457 
+f 241/598 239/590 84/189 15/38 
+f 105/242 161/393 163/401 108/248 
+f 96/222 205/508 192/477 102/237 
+f 238/588 240/594 140/338 185/460 
+f 126/299 124/292 140/337 240/593 
+f 185/460 184/456 135/322 241/597 
+f 140/336 134/319 184/455 185/459 
+f 132/315 139/335 20/47 98/226 
+f 181/448 172/425 130/310 98/225 
+f 341/832 62/142 237/587 335/816 
+f 53/120 55/126 230/569 225/556 
+f 216/535 220/544 211/523 
+f 2/6 5/13 222/550 1/2 
+f 3/10 5/14 2/5 14/35 
+f 14/37 2/5 55/125 
+f 123/288 40/92 94/214 126/298 
+f 170/419 168/415 175/431 169/417 
+f 166/410 167/412 204/506 203/505 
+f 245/605 128/304 136/326 172/424 
+f 141/340 144/347 245/604 165/407 
+f 98/225 20/46 25/57 27/64 
+f 16/41 194/482 49/110 218/539 
+f 218/541 355/869 191/474 213/529 
+f 329/800 320/777 350/855 353/863 
+f 247/611 246/609 249/614 253/621 
+f 251/618 252/620 246/608 247/610 
+f 250/616 248/612 252/619 251/617 
+f 151/367 52/118 95/218 139/334 
+f 306/742 308/747 27/63 25/58 
+f 259/633 49/111 195/484 233/576 
+f 259/633 256/626 138/332 136/325 
+f 237/586 100/232 235/583 201/501 
+f 117/275 281/679 277/671 160/391 
+f 276/669 274/667 273/666 272/664 
+f 145/349 144/347 152/369 150/363 
+f 281/679 276/669 272/664 277/671 
+f 112/259 271/661 111/256 116/271 
+f 274/667 284/687 115/268 273/666 
+f 162/395 161/392 278/672 282/682 
+f 152/370 143/345 268/654 279/674 
+f 282/681 117/274 160/389 280/676 
+f 142/344 284/686 117/273 282/680 
+f 279/675 268/653 142/343 282/680 
+f 150/364 152/369 279/674 
+f 157/381 283/684 271/662 112/258 
+f 163/400 271/661 114/266 108/248 
+f 275/668 163/399 158/384 111/255 
+f 100/231 237/585 223/552 338/824 
+f 287/697 289/701 5/13 3/9 
+f 44/102 201/500 235/582 210/520 
+f 316/765 309/751 310/752 319/773 
+f 200/498 189/469 79/177 352/860 
+f 296/718 46/104 72/163 196/486 
+f 349/852 212/527 196/487 63/144 
+f 354/866 61/139 74/168 90/202 
+f 331/806 103/238 165/406 99/230 
+f 310/754 314/760 317/769 319/773 
+f 353/864 64/146 63/144 196/487 
+f 72/165 352/862 79/176 196/486 
+f 347/847 350/854 320/776 319/774 
+f 190/471 354/867 65/147 80/178 
+f 288/698 294/715 298/722 
+f 101/234 209/516 198/494 267/651 
+f 64/145 350/853 81/182 327/795 
+f 343/837 197/489 71/162 338/823 
+f 325/791 297/721 14/36 59/134 
+f 330/803 81/181 348/850 
+f 285/691 91/207 174/429 290/704 
+f 324/789 318/770 322/783 
+f 47/106 82/185 327/794 191/473 
+f 82/184 349/851 63/143 327/793 
+f 91/206 285/690 286/693 
+f 174/428 96/221 102/236 292/709 
+f 189/469 200/498 221/548 10/29 
+f 309/749 28/66 57/131 324/789 
+f 296/717 196/485 212/526 
+f 349/851 82/184 47/105 76/171 
+f 118/277 345/843 217/537 154/376 
+f 16/40 52/118 151/366 138/331 
+f 317/768 348/850 347/846 319/773 
+f 73/166 306/741 25/57 261/637 
+f 218/540 49/111 259/632 136/325 
+f 325/790 323/785 297/720 
+f 149/360 70/159 345/842 118/276 
+f 87/195 69/157 216/534 193/480 
+f 11/31 9/25 293/712 294/714 
+f 4/11 11/30 294/713 288/699 
+f 297/719 287/696 3/8 14/35 
+f 292/708 102/235 322/784 328/796 
+f 189/468 10/28 291/707 79/176 
+f 41/96 7/19 291/706 321/781 
+f 93/212 285/689 1/1 222/549 
+f 288/698 92/209 79/176 291/707 
+f 354/866 190/470 295/716 318/770 
+f 54/124 70/159 149/359 153/372 
+f 17/43 73/167 261/636 234/579 
+f 33/75 27/62 308/746 314/759 
+f 29/68 33/74 314/758 310/753 
+f 265/646 233/575 195/483 48/109 
+f 213/528 215/532 16/40 218/539 
+f 170/419 169/416 209/516 212/525 
+f 206/510 208/515 344/839 199/495 
+f 310/752 307/745 26/60 29/67 
+f 307/744 302/731 21/49 26/59 
+f 48/108 195/483 49/110 194/481 
+f 154/375 217/536 220/543 150/363 
+f 99/229 165/405 166/409 203/505 
+f 330/803 299/724 269/657 215/533 
+f 291/706 10/27 221/548 321/781 
+f 201/499 44/101 211/523 333/811 
+f 19/45 23/53 304/737 300/727 
+f 324/789 322/783 311/755 309/750 
+f 309/749 316/764 35/78 28/65 
+f 329/799 353/864 97/224 86/194 
+f 312/756 311/755 322/783 323/785 
+f 353/863 198/492 97/223 
+f 60/136 193/479 216/534 211/523 
+f 352/861 72/164 267/651 50/113 
+f 312/756 323/785 325/790 303/733 
+f 322/782 318/770 295/716 
+f 293/711 9/25 6/16 290/704 
+f 221/547 200/498 352/860 50/113 
+f 321/780 221/546 50/112 318/770 
+f 19/45 300/726 303/734 22/51 
+f 17/42 232/574 188/466 73/166 
+f 311/755 312/756 304/736 305/738 
+f 303/733 300/725 304/736 312/756 
+f 232/573 17/42 234/578 264/644 
+f 220/543 340/829 333/811 211/523 
+f 51/115 58/132 146/352 129/308 
+f 57/130 41/95 321/779 324/788 
+f 46/104 101/233 267/650 72/163 
+f 337/822 54/123 153/371 110/253 
+f 341/831 337/821 110/252 114/265 
+f 215/532 269/656 52/117 16/40 
+f 341/831 114/264 106/245 334/814 
+f 317/768 330/802 348/849 
+f 113/261 109/250 154/374 150/362 
+f 313/757 315/761 34/76 32/72 
+
+g head_clean
+usemtl brown_light
+v -10.347265 183.272888 -5.568148
+v -10.347261 183.272888 53.867905
+v -10.347265 209.379135 -5.568148
+v -10.347263 204.608917 42.628395
+v -10.347263 228.040436 42.628395
+v -10.347263 228.040436 12.148367
+v -10.347261 204.608917 53.867905
+v -10.347265 209.379135 -5.568148
+v -29.070341 193.037903 -5.568146
+v -10.347265 183.272888 -5.568148
+v -64.258812 183.272888 -5.568144
+v -28.914089 209.379135 -5.568146
+v -46.498764 193.037903 -5.568146
+v -46.498764 209.379135 -5.568146
+v -64.258812 209.379135 -5.568144
+v -29.070341 209.379135 -5.568146
+v -10.347265 209.379135 -5.568148
+v -10.347263 228.040436 12.148367
+v -28.914089 209.379135 -5.568146
+v -28.914089 228.040436 12.148368
+v -10.347263 228.040436 42.628395
+v -64.258804 228.040436 42.628395
+v -10.347263 228.040436 12.148367
+v -64.258804 228.040436 12.148369
+v -28.914089 228.040436 12.148368
+v -46.498764 228.040436 12.148368
+v -10.347263 228.040436 42.628395
+v -10.347263 204.608917 42.628395
+v -64.258804 228.040436 42.628395
+v -64.258804 204.608917 42.628395
+v -10.347261 204.608917 53.867905
+v -64.258804 204.608917 53.867905
+v -10.347263 204.608917 42.628395
+v -64.258804 204.608917 42.628395
+v -10.347261 204.608917 53.867905
+v -10.347261 183.272888 53.867905
+v -64.258804 204.608917 53.867905
+v -64.258804 183.272888 53.867905
+v -64.258804 183.272888 53.867905
+v -10.347261 183.272888 53.867905
+v -64.258812 183.272888 -5.568144
+v -10.347265 183.272888 -5.568148
+v -46.498764 209.379135 -5.568146
+v -46.498764 228.040436 12.148368
+v -64.258812 209.379135 -5.568144
+v -64.258804 228.040436 12.148369
+v -29.070341 193.037903 -5.568146
+v -29.070341 209.379135 -5.568146
+v -46.498764 193.037903 -5.568146
+v -46.498764 209.379135 -5.568146
+v -28.914089 209.379135 -5.568146
+v -28.914089 228.040436 12.148368
+v -29.070341 209.379135 -5.568146
+v -46.498764 228.040436 12.148368
+v -46.498764 209.379135 -5.568146
+v -64.258804 183.272888 53.867905
+v -64.258812 183.272888 -5.568144
+v -64.258804 204.608917 53.867905
+v -64.258804 204.608917 42.628395
+v -64.258812 209.379135 -5.568144
+v -64.258804 228.040436 42.628395
+v -64.258804 228.040436 12.148369
+
+vt 0.397258 0.300421 0
+vt 0.490985 0.191522 0
+vt 0.494391 0.2656 0
+vt 1.063908 0.420527 0
+vt 0.980168 0.41307 0
+vt 0.980168 0.414612 0
+vt 0.980168 0.266735 0
+vt 0.82833 0.240533 0
+vt 0.82833 0.759467 0
+vt 0.82833 0.398454 0
+vt 0.82833 0.610574 0
+vt 0.640165 0.261764 0
+vt 0.490985 0.191522 0
+vt 0.494391 0.2656 0
+vt 0.397258 0.300421 0
+vt 0.102742 0.300421 0
+vt 1.102742 0.300421 0
+vt 1.063908 0.420527 0
+vt 0.063908 0.420527 0
+vt 1.063908 0.588322 0
+vt 0.063908 0.588322 0
+vt 0.980168 0.41307 0
+vt 0.82833 0.398454 0
+vt 0.980168 0.414612 0
+vt 0.82833 0.610574 0
+vt 0.980168 0.594824 0
+vt 0.397258 0.699579 0
+vt 1.397258 0.699579 0
+vt 1.102742 0.699579 0
+vt 0.102742 0.699579 0
+vt 0.494391 0.7344 0
+vt 0.490985 0.808478 0
+vt 1.490986 0.808478 0
+vt 0.980168 0.733266 0
+vt 0.640165 0.738236 0
+vt 0.82833 0.759467 0
+
+f 402/890 406/894 372/879 397/889 
+f 412/902 404/893 402/891 397/888 
+f 404/892 412/901 415/906 410/898 
+f 411/899 395/887 390/886 413/903 
+f 362/875 357/873 359/874 
+f 388/885 382/884 416/907 414/904 
+f 408/896 407/895 406/894 
+f 413/903 390/886 388/885 414/904 
+f 410/898 415/906 417/908 409/897 
+f 395/887 411/899 412/902 397/888 
+f 406/894 407/895 378/880 372/879 
+f 371/878 367/877 364/876 
+f 388/885 372/879 378/880 382/884 
+f 395/887 397/888 372/879 388/885 
+f 411/900 414/905 415/906 412/901 
+f 411/899 413/903 414/904 
+f 379/881 378/880 380/882 
+f 379/881 380/882 381/883 
+f 415/906 414/904 416/907 417/908 
+f 382/884 378/880 417/908 416/907 
+f 406/894 410/898 409/897 407/895 
+f 402/890 404/892 410/898 406/894 
+
+g chest_clean
+usemtl brown_light
+v -3.452477 163.773315 9.838644
+v -3.452477 174.631821 9.838644
+v -3.452477 180.679581 7.362144
+v -3.452477 174.261963 7.362144
+v -3.452477 133.253601 -4.814985
+v -3.452477 133.253601 38.996223
+v -3.452477 166.591125 -4.814985
+v -3.452477 158.010056 7.362144
+v -3.452477 166.591125 7.362144
+v -3.452477 163.773315 9.838644
+v -3.452477 163.773315 18.792152
+v -3.452477 174.631821 9.838644
+v -3.452477 174.261963 -0.814482
+v -3.452477 174.261963 7.362144
+v -3.452477 192.118134 -0.814482
+v -3.452477 180.679581 7.362144
+v -3.452477 180.679581 18.792152
+v -3.452477 174.631821 18.792152
+v -3.452477 174.973129 33.281219
+v -3.452477 192.118134 33.281219
+v -3.452477 174.973129 38.996223
+v -3.452477 158.010056 18.792152
+v -3.452477 166.591125 -4.814985
+v -3.452477 163.773315 18.792152
+v -3.452477 192.118134 33.281219
+v -3.452477 163.773315 9.838644
+v -3.452477 163.773315 18.792152
+v -3.452477 158.010056 18.792152
+v -3.452477 166.591125 7.362144
+v -3.452477 174.973129 33.281219
+v -3.452477 158.010056 18.792152
+v -3.452477 133.253601 -4.814985
+v -3.452477 166.591125 -4.814985
+v -3.452477 174.261963 7.362144
+v -3.452477 133.253601 38.996223
+v -3.452477 174.261963 -0.814482
+v -3.452477 174.261963 -0.814482
+v -3.452477 192.118134 -0.814482
+v -3.452477 158.010056 7.362144
+v -3.452477 180.679581 7.362144
+v -3.452477 174.973129 38.996223
+v -3.452477 192.118134 33.281219
+v -3.452477 133.253601 -4.814985
+v -3.452477 192.118134 -0.814482
+v -3.452477 174.631821 18.792152
+v -3.452477 174.973129 33.281219
+v -3.452477 174.631821 9.838644
+v -3.452477 158.010056 7.362144
+v -3.452477 174.631821 18.792152
+v -3.452477 180.679581 18.792152
+v -3.452477 166.591125 7.362144
+v -3.452477 174.973129 38.996223
+v -3.452477 133.253601 38.996223
+v -3.452477 180.679581 18.792152
+v -68.25251 158.010056 18.792156
+v -68.252518 166.591125 -4.814981
+v -68.25251 174.261963 7.362146
+v -68.25251 174.261963 -0.814478
+v -68.25251 180.679581 7.362146
+v -68.25251 192.118134 33.281223
+v -68.252518 133.253601 -4.814981
+v -68.25251 192.118134 -0.814478
+v -68.25251 174.973129 33.281223
+v -68.25251 158.010056 7.362146
+v -68.25251 166.591125 7.362146
+v -68.25251 174.973129 38.996231
+v -68.25251 133.253601 38.996231
+v -68.25251 180.679581 18.792156
+v -68.25251 163.773315 9.838646
+v -68.25251 163.773315 18.792156
+v -68.25251 174.631821 9.838646
+v -68.25251 174.631821 18.792156
+
+vt 0.836835 0 0
+vt 0 0 0
+vt 0.836835 0 0
+vt 0 0 0
+vt 0 0 0
+vt 0.734995 0 0
+vt 0.60332 0 0
+vt 0.351831 0 0
+vt 0 0 0
+vt 0.971921 0.189032 0
+vt 0.861232 0.136926 0
+vt 0.908657 0.182783 0
+vt 0.828884 0.176815 0
+vt 0.669958 0.253037 0
+vt 0.148169 0.267045 0
+vt 1.148169 0.267045 0
+vt 0.836984 0.257055 0
+vt 0.60332 0.175907 0
+vt 0.836835 0.12766 0
+vt 0.351831 0 0
+vt 1.148169 0 0
+vt 0 0 0
+vt 0.727482 0.111719 0
+vt 1.148169 0 0
+vt 0 0 0
+vt 0.971921 0 0
+vt 0.581358 0.207285 0
+vt 0.351831 0.267045 0
+vt 0.734995 0.159673 0
+vt 0 1 0
+vt 0.734995 1 0
+vt 0.60332 1 0
+vt 0.351831 1 0
+vt 0.971921 0.805865 0
+vt 0.861232 0.858883 0
+vt 0.908657 0.812195 0
+vt 0.828884 0.818248 0
+vt 0.669958 0.741499 0
+vt 0.148169 0.72753 0
+vt 1.148169 0.72753 0
+vt 0.836984 0.737488 0
+vt 0.60332 0.81917 0
+vt 0 1 0
+vt 0.351831 1 0
+vt 1.148169 1 0
+vt 0 1 0
+vt 0.971921 1 0
+vt 1.148169 1 0
+vt 0.581358 0.78742 0
+vt 0.351831 0.72753 0
+vt 0.734995 0.835674 0
+vt 0 1 0
+vt 0.836835 1 0
+vt 0 1 0
+vt 0.836835 1 0
+vt 0.836835 0.868362 0
+vt 0.727482 0.884704 0
+
+f 478/948 473/942 482/956 481/953 
+f 472/941 484/958 478/947 481/952 
+f 480/950 483/957 484/958 472/940 
+f 487/963 486/961 488/964 489/965 
+f 472/939 485/959 477/946 480/950 
+f 476/945 479/949 477/946 485/959 
+f 474/943 475/944 479/949 476/945 
+f 450/918 473/942 478/948 460/924 
+f 468/934 482/955 473/942 450/918 
+f 465/930 481/951 482/954 468/933 
+f 445/913 472/938 481/951 465/930 
+f 460/923 478/947 484/958 470/936 
+f 469/935 483/957 480/950 463/926 
+f 470/936 484/958 483/957 469/935 
+f 464/927 488/964 486/961 443/909 
+f 463/926 480/950 477/946 459/922 
+f 457/921 476/945 485/959 471/937 
+f 459/922 477/946 479/949 461/925 
+f 451/919 474/943 476/945 457/921 
+f 454/920 475/944 474/943 451/919 
+f 461/925 479/949 475/944 454/920 
+f 466/931 489/965 488/964 464/927 
+f 443/910 486/960 487/962 444/912 
+f 485/959 471/937 466/931 489/965 
+f 487/962 444/912 448/917 472/938 
+f 457/921 461/925 459/922 471/937 
+f 461/925 454/920 451/919 457/921 
+f 465/929 460/924 450/918 468/932 
+f 470/936 460/923 465/928 448/916 
+f 463/926 469/935 470/936 448/915 
+f 448/914 471/937 459/922 463/926 
+f 443/909 464/927 466/931 444/911 
+
+g body_clean1
+usemtl brown_light
+v -6.241148 57.953701 48.613876
+v -24.22551 103.837631 10.190531
+v 0.760529 42.060787 20.959789
+v -37.709824 66.92762 10.183207
+v -19.237558 57.953701 53.781174
+v -37.709824 120.132294 68.891212
+v -77.166901 192.318008 55.697437
+v -19.308687 41.789291 20.991514
+v -19.23756 42.060787 10.190531
+v -19.23756 49.835079 10.190531
+v -19.208519 35.235577 53.804001
+v -37.709824 86.237701 -4.389473
+v -19.237558 35.033916 48.613876
+v 0.760529 42.060787 10.190529
+v -37.709824 58.985985 10.190538
+v -19.347178 50.165215 54.170109
+v 0.760529 57.953701 53.781174
+v -37.709824 73.096016 10.190538
+v -37.709824 144.915802 41.964085
+v -19.882519 0.000023 -0.351593
+v -19.256357 30.008041 48.613876
+v -19.882517 0.000023 48.613876
+v -19.240343 67.078094 23.593922
+v -6.241148 57.953701 38.865128
+v 1.747257 143.077621 27.487873
+v 1.747257 143.077621 7.386337
+v 1.747257 126.220505 40.347279
+v 1.747257 137.811234 27.487873
+v 1.747257 170.544739 41.964085
+v 1.747257 168.752289 63.319244
+v 1.747257 137.811234 41.964085
+v -37.709824 143.077606 27.487877
+v -37.709824 49.835087 10.190538
+v 6.83416 196.959229 41.964085
+v -12.125738 196.959229 41.964085
+v -6.24115 103.837631 10.190529
+v -24.22551 72.8965 10.565985
+v -6.24115 128.384979 7.386337
+v -11.435379 128.384979 7.386337
+v -11.43541 133.165527 7.386345
+v 6.83416 170.544739 41.964085
+v 6.83416 170.544739 55.697433
+v 6.83416 196.959229 51.056229
+v -6.24115 103.837631 -4.389488
+v -24.225512 103.837631 -4.389488
+v -6.24115 128.384979 -4.389488
+v -11.43541 133.165527 -0.55357
+v 1.747257 170.544739 55.697433
+v -37.709824 58.208019 54.021019
+v -37.709824 120.132294 47.060863
+v -6.241148 94.505569 38.865128
+v -37.709824 66.933746 23.586597
+v -37.709824 137.811218 27.487877
+v 0.760529 57.953701 38.865124
+v -6.241148 57.953701 44.6245
+v 0.760529 94.505569 38.865124
+v -6.241148 94.505569 31.435822
+v -6.24115 72.949203 10.190529
+v -37.709824 133.165512 7.386354
+v -24.22551 73.096008 8.228834
+v -24.225512 86.237694 -4.389488
+v -24.22551 86.237694 10.190531
+v -19.240343 58.992107 23.593922
+v -37.709824 137.811218 41.964085
+v -37.709824 128.384964 -4.389473
+v 0.760529 72.949203 10.190529
+v -11.435379 128.384979 -0.55357
+v 0.760529 94.505569 31.435822
+v -37.709824 103.837624 -4.389473
+v -19.23756 58.985977 10.190531
+v -19.23756 67.071968 10.190531
+v -37.709824 144.915802 68.891212
+v 0.789566 35.235577 53.804001
+v 1.747257 179.124237 68.89122
+v 0.760529 35.033916 48.613876
+v -37.709824 73.096016 8.228842
+v -37.709824 58.985981 23.243774
+v -19.882519 8.783707 -0.351593
+v 0.760529 0.000023 -0.351593
+v 0.760529 0.000023 48.613876
+v 0.760529 30.008041 20.959789
+v 0.760529 8.783707 -0.351593
+v -19.882517 30.008041 20.959791
+v -6.241148 126.220505 40.347279
+v -6.241148 120.132301 47.163853
+v -6.241146 120.132301 68.89122
+v -6.241146 126.220505 68.89122
+v 1.747257 149.508865 68.89122
+v -12.125736 144.915802 68.89122
+v 1.747257 126.220505 68.89122
+v -6.241148 120.132301 40.347279
+v -6.24115 120.132301 7.386337
+v 1.747257 120.132301 40.347279
+v -37.709824 57.953716 48.613876
+v -37.709824 143.077606 7.386347
+v -82.253799 192.318008 55.697437
+v -37.709824 58.992115 23.593925
+v -12.125736 149.508865 68.89122
+v 1.747257 149.508865 63.319244
+v -12.125736 168.752289 68.89122
+v -12.125736 168.752289 63.319244
+v -12.125736 149.508865 63.319244
+v -12.125738 196.959229 51.056229
+v -12.125738 144.915802 41.964085
+v 1.747257 120.132301 7.386337
+v -37.709824 50.419537 54.409958
+v 1.747257 168.752289 68.89122
+v -12.125736 179.124237 68.89122
+v 6.83416 192.318024 55.697433
+v 1.747257 192.318024 55.697433
+v -69.178497 57.953709 48.613876
+v -51.194138 103.837624 10.190535
+v -76.180176 42.060795 20.959795
+v -56.182087 57.953709 53.781174
+v -56.110958 41.789295 20.991516
+v -56.182091 42.060795 10.190535
+v -56.182091 49.835083 10.190535
+v -56.211128 35.235584 53.804001
+v -56.182087 35.033924 48.613876
+v -76.180176 42.060795 10.190536
+v -56.072468 50.165218 54.170105
+v -76.180176 57.953709 53.781174
+v -55.537132 0.000038 -0.351589
+v -55.537128 0.000038 48.613876
+v -56.179302 67.078102 23.593925
+v -69.178497 57.953709 38.865128
+v -77.166901 143.077606 27.487877
+v -77.166901 143.077606 7.386345
+v -77.166901 126.220505 40.347282
+v -77.166901 137.811234 27.487877
+v -77.166901 170.544739 41.964088
+v -77.166901 168.752289 63.319244
+v -77.166901 137.811234 41.964088
+v -82.253799 196.959198 41.964088
+v -63.293907 196.959198 41.964088
+v -69.178497 103.837624 10.190536
+v -51.194138 72.896507 10.565989
+v -69.178497 128.384964 7.386345
+v -63.984268 128.384964 7.386345
+v -63.984238 133.165527 7.386353
+v -82.253799 170.544739 41.964088
+v -82.253799 170.544739 55.697437
+v -82.253799 196.959198 51.056229
+v -69.178497 103.837624 -4.389481
+v -51.194138 103.837624 -4.389481
+v -69.178497 128.384964 -4.389481
+v -63.984238 133.165527 -0.553562
+v -77.166901 170.544739 55.697437
+v -69.178497 94.505569 38.865128
+v -76.180176 57.953709 38.865128
+v -76.180176 94.505569 38.865128
+v -69.178497 94.505569 31.435825
+v -69.178497 72.949203 10.190536
+v -51.194138 73.096008 8.228838
+v -51.194138 86.237701 -4.389481
+v -51.194138 86.237701 10.190535
+v -56.179302 58.992111 23.593925
+v -76.180176 72.949203 10.190536
+v -63.984268 128.384964 -0.553562
+v -76.180176 94.505569 31.435825
+v -56.182091 58.985981 10.190535
+v -56.182091 67.071968 10.190535
+v -76.209213 35.235584 53.804001
+v -77.166901 179.124222 68.89122
+v -76.180176 35.033924 48.613876
+v -55.537132 8.783722 -0.351589
+v -76.180176 0.000038 -0.351589
+v -76.180176 0.000038 48.613876
+v -76.180176 30.008049 20.959795
+v -76.180176 8.783722 -0.351589
+v -55.537128 30.008049 20.959793
+v -69.178497 126.220505 40.347282
+v -69.178497 120.132301 47.163853
+v -69.178497 120.132301 68.89122
+v -69.178497 126.220505 68.89122
+v -77.166901 149.50885 68.89122
+v -63.293903 144.915802 68.89122
+v -77.166901 126.220505 68.89122
+v -69.178497 120.132301 40.347282
+v -69.178497 120.132301 7.386345
+v -77.166901 120.132301 40.347282
+v -63.293903 149.50885 68.89122
+v -77.166901 149.50885 63.319244
+v -63.293903 168.752289 68.89122
+v -63.293903 168.752289 63.319244
+v -63.293903 149.50885 63.319244
+v -63.293907 196.959198 51.056229
+v -63.293907 144.915802 41.964088
+v -77.166901 120.132301 7.386345
+v -77.166901 168.752289 68.89122
+v -63.293903 179.124222 68.89122
+
+vt 1 0 0
+vt 0 0 0
+vt 1 0 0
+vt 1 1 0
+vt 1 1 0
+vt 0 0 0
+vt 0 1 0
+vt 1 0 0
+vt 1 0 0
+vt 1 1 0
+vt 0 1 0
+vt 1 1 0
+vt 0 1 0
+vt 1 1 0
+vt 0 0 0
+vt 1 1 0
+vt 0 1 0
+vt 1 0 0
+vt 1 0 0
+vt 0 1 0
+vt 1 0 0
+vt 1 1 0
+vt 0 0 0
+vt 1 0 0
+vt 0 1 0
+vt 1 1 0
+vt 0 0 0
+vt 1 1 0
+vt 0 0 0
+vt 0 1 0
+vt 0 0 0
+vt 1 0 0
+vt 1 0 0
+vt 0 1 0
+vt 0 0 0
+vt 0 0 0
+vt 1 1 0
+vt 0 1 0
+vt 1 1 0
+vt 1 0 0
+vt 0 1 0
+vt 1 1 0
+vt 1 1 0
+vt 1 0 0
+vt 0 1 0
+vt 1 0 0
+vt 1 1 0
+vt 0 0 0
+vt 1 1 0
+vt 0 0 0
+vt 0 1 0
+vt 1 1 0
+vt 1 0 0
+vt 1 1 0
+vt 0 0 0
+vt 1 0 0
+vt 0 0 0
+vt 1 1 0
+vt 0 1 0
+vt 0 1 0
+vt 1 1 0
+vt 1 0 0
+vt 1 1 0
+vt 1 0 0
+vt 1 1 0
+vt 0 1 0
+vt 0 1 0
+vt 0 0 0
+vt 0 1 0
+vt 1 0 0
+vt 0 0 0
+vt 1 0 0
+vt 1 1 0
+vt 1 0 0
+vt 1 1 0
+vt 0 1 0
+vt 1 1 0
+vt 0 1 0
+vt 0 1 0
+vt 1 0 0
+vt 1 0 0
+vt 0 0 0
+vt 1 1 0
+vt 1 0 0
+vt 0.337951 1 0
+vt 0 1 0
+vt 0 0 0
+vt 1 1 0
+vt 0 0 0
+vt 1 0 0
+vt 0 1 0
+vt 1 1 0
+vt 0 0 0
+vt 1 0 0
+vt 0 1 0
+vt 1 0 0
+vt 0 0 0
+vt 1 1 0
+vt 0 1 0
+vt 1 1 0
+vt 0 1 0
+vt 1 0 0
+vt 1 1 0
+vt 1 0 0
+vt 0 0 0
+vt 0 1 0
+vt 1 0 0
+vt 0 1 0
+vt 1 1 0
+vt 1 1 0
+vt 1 0 0
+vt 0 1 0
+vt 0 0 0
+vt 0 0 0
+vt 0 1 0
+vt 0 0 0
+vt 0 1 0
+vt 1 1 0
+vt 1 1 0
+vt 0 1 0
+vt 0 0 0
+vt 1 1 0
+vt 1 0 0
+vt 0 0 0
+vt 0 1 0
+vt 1 1 0
+vt 0 0 0
+vt 0 1 0
+vt 0 0 0
+vt 1 0 0
+vt 1 1 0
+vt 1 1 0
+vt 0 1 0
+vt 0 0 0
+vt 0 0 0
+vt 1 0 0
+vt 0 1 0
+vt 1 1 0
+vt 0 0 0
+vt 1 1 0
+vt 1 0 0
+vt 1 0 0
+vt 1 1 0
+vt 1 0 0
+vt 0 1 0
+vt 1 1 0
+vt 0 0 0
+vt 1 0 0
+vt 1 0 0
+vt 0 0 0
+vt 0 1 0
+vt 0 0 0
+vt 1 0 0
+vt 0 1 0
+vt 1 0 0
+vt 1 1 0
+vt 0 0 0
+vt 1 1 0
+vt 0 1 0
+vt 0 1 0
+vt 1 0 0
+vt 0 0 0
+vt 1 1 0
+vt 1 0 0
+vt 0 1 0
+vt 1 0 0
+vt 0 1 0
+vt 1 1 0
+vt 0 0 0
+vt 1 0 0
+vt 0 0 0
+vt 1 0 0
+vt 1 1 0
+vt 0 0 0
+vt 1 0 0
+vt 0 1 0
+vt 1 1 0
+vt 0 0 0
+vt 0 1 0
+vt 1 1 0
+vt 1 0 0
+vt 0 0 0
+vt 0 1 0
+vt 1 1 0
+vt 1 0 0
+vt 1 1 0
+vt 0 1 0
+vt 0 0.824293 0
+vt 0 0 0
+vt 1 1 0
+vt 0 0 0
+vt 1 0 0
+vt 1 1 0
+vt 1 1 0
+vt 1 0 0
+vt 0 0 0
+vt 0 0 0
+vt 1 1 0
+vt 0 1 0
+vt 0 0 0
+vt 1 1 0
+vt 0 1 0
+vt 0 0 0
+vt 1 0 0
+vt 1 1 0
+vt 0 1 0
+vt 0 0 0
+vt 1 1 0
+vt 0 0 0
+vt 1 0 0
+vt 0 1 0
+vt 0 0 0
+vt 1 0 0
+vt 0 1 0
+vt 1 0 0
+vt 0 1 0
+vt 1 0 0
+vt 0 0 0
+vt 0 1 0
+vt 1 1 0
+vt 0 1 0
+vt 0 0.824293 0
+vt 0 0 0
+vt 1 1 0
+vt 0 1 0
+vt 1 1 0
+vt 0 0 0
+vt 1 0 0
+vt 1 0 0
+vt 1 1 0
+vt 0 0 0
+vt 1 1 0
+vt 0 1 0
+vt 1 0 0
+vt 1 1 0
+vt 0 1 0
+vt 1 1 0
+vt 0 0 0
+vt 1 1 0
+vt 0 1 0
+vt 1 0 0
+vt 0 0 0
+vt 1 0 0
+vt 1 0 0
+vt 1 1 0
+vt 0 0 0
+vt 1 0 0
+vt 0 1 0
+vt 1 1 0
+vt 0 0 0
+vt 0 1 0
+vt 0 0 0
+vt 1 0 0
+vt 0 1 0
+vt 1 0 0
+vt 0 1 0
+vt 0 0 0
+vt 0 0 0
+vt 1 1 0
+vt 1 0 0
+vt 1 1 0
+vt 0 1 0
+vt 1 1 0
+vt 1 0 0
+vt 1 1 0
+vt 0 0 0
+vt 0 0 0
+vt 1 0 0
+vt 0 1 0
+vt 1 1 0
+vt 0 0 0
+vt 0 1 0
+vt 0 0 0
+vt 1 0 0
+vt 0 0 0
+vt 1 1 0
+vt 0 0 0
+vt 1 1 0
+vt 0 1 0
+vt 0 0 0
+vt 1 0 0
+vt 0 1 0
+vt 1 1 0
+vt 1 1 0
+vt 1 1 0
+vt 1 0 0
+vt 0 1 0
+vt 0 1 0
+vt 0 0 0
+vt 1 1 0
+vt 1 0 0
+vt 0 0 0
+vt 1 0 0
+vt 1 1 0
+vt 1 0 0
+vt 1 1 0
+vt 0 1 0
+vt 1 1 0
+vt 1 0 0
+vt 0 0 0
+vt 1 0 0
+vt 0 1 0
+vt 0 0 0
+vt 1 1 0
+vt 1 0 0
+vt 0.337951 1 0
+vt 1 0 0
+vt 0 0 0
+vt 0 0 0
+vt 1 0 0
+vt 0 0 0
+vt 1 0 0
+vt 1 1 0
+vt 1 0 0
+vt 0 0 0
+vt 1 1 0
+vt 0 1 0
+vt 0 0 0
+vt 1 1 0
+vt 0 1 0
+vt 1 0 0
+vt 1 0 0
+vt 1 1 0
+vt 0 0 0
+vt 0 1 0
+vt 1 0 0
+vt 0 1 0
+vt 1 1 0
+vt 1 0 0
+vt 1 1 0
+vt 0 0 0
+vt 0 1 0
+vt 1 0 0
+vt 0 0 0
+vt 1 1 0
+vt 0 1 0
+vt 1 0 0
+vt 0 0 0
+vt 1 1 0
+vt 0 0 0
+vt 1 0 0
+vt 1 0 0
+vt 0 0 0
+vt 0 1 0
+vt 1 0 0
+vt 0 1 0
+vt 0 0 0
+vt 0 0 0
+vt 1 0 0
+vt 1 1 0
+vt 0 0 0
+vt 1 0 0
+vt 1 0 0
+vt 1 1 0
+vt 0 0 0
+vt 1 1 0
+vt 0 0 0
+vt 1 0 0
+vt 1 0 0
+vt 1 1 0
+vt 0 1 0
+vt 1 1 0
+vt 1 0 0
+vt 0 0 0
+vt 1 0 0
+vt 0 0 0
+vt 0 1 0
+vt 1 0 0
+vt 1 0 0
+vt 0 0 0
+vt 1 0 0
+vt 0 1 0
+vt 0 0 0
+vt 1 1 0
+vt 1 1 0
+vt 0 1 0
+vt 1 0 0
+vt 0 1 0
+vt 0 1 0
+vt 1 1 0
+vt 0 0 0
+vt 1 0 0
+vt 0 1 0
+vt 1 1 0
+vt 0 0 0
+vt 0 0 0
+vt 0 1 0
+vt 1 1 0
+vt 1 0 0
+vt 0 0 0
+vt 1 0 0
+vt 1 1 0
+vt 0 0 0
+vt 1 0 0
+vt 0 0 0
+vt 0 1 0
+vt 0 1 0
+vt 1 1 0
+vt 0 0 0
+vt 0 0 0
+vt 1 0 0
+vt 0 1 0
+vt 1 1 0
+vt 1 1 0
+vt 1 0 0
+vt 1 1 0
+vt 0 0 0
+vt 1 0 0
+vt 1 0 0
+vt 0 0 0
+vt 1 1 0
+vt 1 1 0
+vt 0 0 0
+vt 0 1 0
+vt 0 0 0
+vt 0 0 0
+vt 0 1 0
+vt 1 1 0
+vt 1 1 0
+vt 0 1 0
+vt 1 0 0
+vt 0 0 0
+vt 1 0 0
+vt 0 1 0
+vt 1 1 0
+vt 0 0 0
+vt 1 0 0
+vt 0 0 0
+vt 0 1 0
+vt 0 1 0
+vt 1 0 0
+vt 0 0 0
+vt 1 0 0
+vt 0 1 0
+
+f 594/1179 581/1149 527/1037 515/1013 
+f 547/1078 526/1035 491/969 525/1032 
+f 509/1000 567/1113 571/1121 568/1116 
+f 556/1092 536/1061 529/1042 528/1041 
+f 533/1052 535/1059 527/1038 581/1148 
+f 503/992 498/983 560/1103 555/1090 
+f 540/1067 546/1075 574/1130 
+f 498/982 503/991 492/973 497/980 
+f 574/1127 490/966 513/1007 540/1066 
+f 611/1218 639/1288 654/1326 652/1322 
+f 568/1115 569/1118 511/1002 509/999 
+f 547/1078 546/1076 557/1096 555/1090 
+f 675/1383 677/1388 674/1379 
+f 505/994 499/984 498/981 497/978 
+f 622/1247 520/1026 517/1018 619/1238 
+f 591/1167 587/1158 577/1135 588/1161 
+f 641/1295 662/1347 625/1254 642/1297 
+f 623/1249 632/1272 676/1387 624/1252 
+f 555/1089 557/1095 545/1074 543/1071 
+f 525/1032 491/969 534/1055 533/1052 
+f 588/1161 520/1027 518/1019 519/1024 
+f 516/1015 579/1140 576/1133 573/1125 
+f 492/972 503/991 555/1088 543/1070 
+f 518/1020 530/1045 531/1048 537/1064 
+f 653/1325 679/1396 673/1378 680/1399 
+f 629/1265 617/1233 515/1012 529/1043 
+f 666/1357 671/1373 665/1355 667/1361 
+f 502/990 564/1111 562/1106 500/988 
+f 620/1241 624/1251 677/1391 622/1247 
+f 670/1370 618/1235 619/1237 678/1393 
+f 497/980 502/989 500/987 505/995 
+f 598/1188 532/1049 592/1170 599/1190 
+f 562/1104 506/997 494/975 505/995 
+f 667/1361 579/1142 578/1137 666/1358 
+f 519/1022 596/1180 589/1163 590/1164 
+f 602/1197 654/1328 657/1335 658/1337 
+f 535/1058 527/1037 528/1040 556/1093 
+f 653/1325 679/1396 637/1283 496/976 
+f 557/1094 546/1076 540/1065 545/1073 
+f 543/1070 545/1072 540/1065 513/1006 
+f 677/1389 666/1357 578/1137 593/1174 
+f 527/1036 528/1039 529/1042 515/1010 
+f 571/1122 567/1113 572/1123 570/1119 
+f 511/1001 569/1118 564/1111 502/990 
+f 623/1249 624/1251 620/1240 630/1267 
+f 667/1359 622/1248 619/1237 618/1236 
+f 500/986 562/1105 505/995 
+f 676/1384 680/1398 673/1378 674/1379 
+f 567/1112 509/998 511/1002 572/1124 
+f 511/1001 502/989 497/979 572/1124 
+f 591/1168 588/1160 519/1023 590/1164 
+f 490/967 506/997 543/1068 513/1006 
+f 534/1054 491/968 551/1083 550/1082 
+f 550/1082 551/1083 526/1035 549/1079 
+f 651/1320 647/1307 555/1087 560/1102 
+f 598/1187 523/1028 532/1050 
+f 665/1354 672/1376 622/1247 667/1360 
+f 564/1110 492/970 543/1069 
+f 559/1099 552/1086 512/1005 560/1101 
+f 575/1132 580/1145 573/1126 576/1134 
+f 581/1147 594/1178 582/1151 580/1144 
+f 531/1047 530/1045 523/1028 598/1186 
+f 519/1022 518/1021 537/1063 596/1181 
+f 492/971 570/1120 572/1123 497/978 
+f 537/1062 596/1180 563/1108 599/1190 
+f 564/1110 543/1068 506/997 562/1104 
+f 592/1172 532/1049 523/1028 524/1031 
+f 585/1155 631/1270 637/1283 496/976 
+f 537/1062 531/1046 598/1185 599/1190 
+f 594/1177 515/1011 514/1008 517/1016 
+f 589/1162 596/1180 563/1108 597/1184 
+f 636/1280 629/1264 529/1042 536/1060 
+f 597/1183 563/1107 599/1189 592/1171 
+f 659/1339 656/1333 657/1335 658/1337 
+f 666/1356 677/1390 675/1382 671/1372 
+f 624/1250 676/1386 674/1380 677/1389 
+f 518/1020 524/1029 523/1028 530/1044 
+f 577/1136 587/1157 578/1138 579/1141 
+f 616/1231 514/1009 517/1017 619/1237 
+f 517/1016 520/1026 579/1140 516/1015 
+f 589/1162 597/1182 592/1170 590/1164 
+f 591/1167 593/1173 578/1137 587/1156 
+f 590/1165 592/1169 524/1030 593/1176 
+f 593/1175 591/1166 590/1164 
+f 517/1016 516/1014 582/1150 594/1177 
+f 593/1174 524/1029 518/1019 520/1025 
+f 520/1025 588/1159 577/1135 579/1139 
+f 580/1143 582/1150 516/1014 573/1125 
+f 646/1305 614/1225 512/1004 552/1085 
+f 569/1117 568/1114 571/1121 570/1119 
+f 569/1117 564/1109 492/970 570/1119 
+f 525/1033 574/1129 546/1075 547/1077 
+f 533/1052 581/1146 574/1128 525/1032 
+f 627/1258 669/1368 678/1394 617/1232 
+f 601/1195 626/1256 642/1296 625/1253 
+f 659/1339 655/1330 612/1222 656/1332 
+f 629/1263 636/1279 648/1312 628/1262 
+f 627/1259 635/1277 633/1273 669/1367 
+f 651/1319 605/1206 609/1215 647/1309 
+f 641/1295 638/1286 662/1344 
+f 602/1199 609/1214 605/1205 604/1203 
+f 615/1228 600/1193 662/1346 638/1285 
+f 644/1303 634/1275 534/1053 550/1082 
+f 613/1224 657/1334 656/1331 612/1221 
+f 649/1315 641/1294 642/1296 647/1309 
+f 650/1316 646/1306 552/1084 559/1098 
+f 605/1204 606/1208 610/1217 604/1201 
+f 506/996 490/966 600/1191 611/1219 
+f 665/1354 671/1371 675/1382 672/1375 
+f 662/1345 669/1366 633/1273 625/1253 
+f 549/1080 643/1300 644/1302 550/1081 
+f 640/1293 649/1314 647/1308 639/1290 
+f 634/1275 601/1195 625/1253 633/1273 
+f 620/1241 622/1246 672/1375 621/1244 
+f 664/1353 667/1359 618/1236 661/1343 
+f 647/1307 609/1214 602/1198 639/1289 
+f 631/1269 630/1266 620/1240 637/1282 
+f 496/977 653/1324 680/1397 676/1385 
+f 512/1003 614/1226 651/1318 560/1100 
+f 505/994 494/974 603/1200 610/1216 
+f 652/1323 654/1327 608/1213 607/1211 
+f 618/1235 670/1370 668/1364 661/1343 
+f 622/1245 677/1388 593/1173 520/1025 
+f 607/1210 608/1212 604/1203 610/1216 
+f 676/1384 632/1272 585/1154 496/976 
+f 603/1200 611/1218 652/1322 610/1216 
+f 663/1350 575/1131 576/1133 664/1352 
+f 673/1377 679/1396 621/1242 674/1379 
+f 556/1092 648/1310 636/1278 536/1060 
+f 628/1261 627/1258 635/1276 648/1311 
+f 633/1273 635/1277 535/1057 533/1051 
+f 638/1284 641/1294 649/1313 640/1292 
+f 638/1284 640/1291 639/1289 615/1227 
+f 606/1207 650/1317 559/1097 499/985 
+f 629/1263 628/1260 627/1257 617/1234 
+f 660/1340 655/1330 659/1338 658/1337 
+f 654/1327 657/1334 613/1223 608/1213 
+f 606/1207 499/984 505/993 610/1216 
+f 616/1230 617/1233 678/1393 619/1237 
+f 652/1321 607/1209 610/1216 
+f 574/1127 575/1131 663/1349 662/1344 
+f 613/1224 612/1220 655/1329 660/1341 
+f 604/1202 608/1212 613/1223 660/1341 
+f 621/1243 672/1374 675/1381 674/1379 
+f 639/1288 611/1218 600/1192 615/1227 
+f 645/1304 601/1194 634/1274 644/1301 
+f 626/1256 645/1304 644/1301 643/1299 
+f 526/1034 626/1255 643/1298 549/1079 
+f 623/1249 585/1153 632/1271 
+f 617/1232 616/1229 514/1008 515/1010 
+f 602/1197 654/1326 639/1287 
+f 614/1225 646/1305 650/1316 651/1318 
+f 661/1342 668/1363 663/1348 664/1351 
+f 670/1369 678/1392 669/1365 668/1362 
+f 623/1249 630/1266 631/1268 585/1152 
+f 637/1281 620/1239 621/1242 679/1395 
+f 660/1340 658/1336 602/1196 604/1201 
+f 635/1276 648/1310 556/1091 535/1056 
+f 662/1344 600/1191 490/966 574/1127 
+
+g Symmetry_1 body_clean
+usemtl brown_light
+v -6.241148 57.953701 48.613876
+v -24.22551 103.837631 10.190531
+v 0.760529 42.060787 20.959789
+v -37.709824 66.92762 10.183207
+v -19.237558 57.953701 53.781174
+v -37.709824 120.132294 68.891212
+v -37.709824 133.165512 -0.553555
+v -19.308687 41.789291 20.991514
+v -19.23756 42.060787 10.190531
+v -19.23756 49.835079 10.190531
+v -19.208519 35.235577 53.804001
+v -37.709824 86.237701 -4.389473
+v -19.237558 35.033916 48.613876
+v 0.760529 42.060787 10.190529
+v -37.709824 58.985985 10.190538
+v -19.347178 50.165215 54.170109
+v 0.760529 57.953701 53.781174
+v -37.709824 73.096016 10.190538
+v -37.709824 144.915802 41.964085
+v -19.882519 0.000023 -0.351593
+v -19.256357 30.008041 48.613876
+v -19.882517 0.000023 48.613876
+v -19.240343 67.078094 23.593922
+v -6.241148 57.953701 38.865128
+v 1.747257 143.077621 27.487873
+v 1.747257 143.077621 7.386337
+v 1.747257 126.220505 40.347279
+v 1.747257 137.811234 27.487873
+v 1.747257 170.544739 41.964085
+v 1.747257 168.752289 63.319244
+v 1.747257 137.811234 41.964085
+v -37.709824 143.077606 27.487877
+v -37.709824 49.835087 10.190538
+v 6.83416 196.959229 41.964085
+v -12.125738 196.959229 41.964085
+v -6.24115 103.837631 10.190529
+v -24.22551 73.096008 10.190531
+v -6.24115 128.384979 7.386337
+v -11.435379 128.384979 7.386337
+v -11.43541 133.165527 7.386345
+v 6.83416 170.544739 41.964085
+v 6.83416 170.544739 55.697433
+v 6.83416 196.959229 51.056229
+v -6.24115 103.837631 -4.389488
+v -24.225512 103.837631 -4.389488
+v -6.24115 128.384979 -4.389488
+v -11.43541 133.165527 -0.55357
+v 1.747257 170.544739 55.697433
+v -37.709824 58.208019 54.021019
+v -37.709824 120.132294 47.060863
+v -6.241148 94.505569 38.865128
+v -37.709824 66.933746 23.586597
+v -37.709824 137.811218 27.487877
+v 0.760529 57.953701 38.865124
+v -6.241148 57.953701 44.6245
+v 0.760529 94.505569 38.865124
+v -6.241148 94.505569 31.435822
+v -6.24115 72.949203 10.190529
+v -37.709824 133.165512 7.386354
+v -24.22551 73.096008 8.228834
+v -24.225512 86.237694 -4.389488
+v -24.22551 86.237694 10.190531
+v -19.240343 58.992107 23.593922
+v -37.709824 137.811218 41.964085
+v -37.709824 128.384964 -4.389473
+v 0.760529 72.949203 10.190529
+v -11.435379 128.384979 -0.55357
+v 0.760529 94.505569 31.435822
+v -37.709824 103.837624 -4.389473
+v -19.23756 58.985977 10.190531
+v -19.23756 67.071968 10.190531
+v -37.709824 144.915802 68.891212
+v 0.789566 35.235577 53.804001
+v 1.747257 179.124237 68.89122
+v 0.760529 35.033916 48.613876
+v -37.709824 73.096016 8.228842
+v -37.709824 58.985981 23.243774
+v -19.882519 8.783707 -0.351593
+v 0.760529 0.000023 -0.351593
+v 0.760529 0.000023 48.613876
+v 0.760529 30.008041 20.959789
+v 0.760529 8.783707 -0.351593
+v -19.882517 30.008041 20.959791
+v -6.241148 126.220505 40.347279
+v -6.241148 120.132301 47.163853
+v -6.241146 120.132301 68.89122
+v -6.241146 126.220505 68.89122
+v 1.747257 149.508865 68.89122
+v -12.125736 144.915802 68.89122
+v 1.747257 126.220505 68.89122
+v -6.241148 120.132301 40.347279
+v -6.24115 120.132301 7.386337
+v 1.747257 120.132301 40.347279
+v -37.709824 57.953716 48.613876
+v -37.709824 143.077606 7.386347
+v -37.709824 128.384964 -0.553555
+v -37.709824 58.992115 23.593925
+v -12.125736 149.508865 68.89122
+v 1.747257 149.508865 63.319244
+v -12.125736 168.752289 68.89122
+v -12.125736 168.752289 63.319244
+v -12.125736 149.508865 63.319244
+v -12.125738 196.959229 51.056229
+v -12.125738 144.915802 41.964085
+v 1.747257 120.132301 7.386337
+v -37.709824 50.419537 54.409958
+v 1.747257 168.752289 68.89122
+v -12.125736 179.124237 68.89122
+v 6.83416 192.318024 55.697433
+v 1.747257 192.318024 55.697433
+v -69.178497 57.953709 48.613876
+v -51.194138 103.837624 10.190535
+v -76.180176 42.060795 20.959795
+v -56.182087 57.953709 53.781174
+v -56.110958 41.789295 20.991516
+v -56.182091 42.060795 10.190535
+v -56.182091 49.835083 10.190535
+v -56.211128 35.235584 53.804001
+v -56.182087 35.033924 48.613876
+v -76.180176 42.060795 10.190536
+v -56.072468 50.165218 54.170105
+v -76.180176 57.953709 53.781174
+v -55.537132 0.000038 -0.351589
+v -55.537128 0.000038 48.613876
+v -56.179302 67.078102 23.593925
+v -69.178497 57.953709 38.865128
+v -77.166901 143.077606 27.487877
+v -77.166901 143.077606 7.386345
+v -77.166901 126.220505 40.347282
+v -77.166901 137.811234 27.487877
+v -77.166901 170.544739 41.964088
+v -77.166901 168.752289 63.319244
+v -77.166901 137.811234 41.964088
+v -82.253799 196.959198 41.964088
+v -63.293907 196.959198 41.964088
+v -69.178497 103.837624 10.190536
+v -51.194138 73.096008 10.190535
+v -69.178497 128.384964 7.386345
+v -63.984268 128.384964 7.386345
+v -63.984238 133.165527 7.386353
+v -82.253799 170.544739 41.964088
+v -82.253799 170.544739 55.697437
+v -82.253799 196.959198 51.056229
+v -69.178497 103.837624 -4.389481
+v -51.194138 103.837624 -4.389481
+v -69.178497 128.384964 -4.389481
+v -63.984238 133.165527 -0.553562
+v -77.166901 170.544739 55.697437
+v -69.178497 94.505569 38.865128
+v -76.180176 57.953709 38.865128
+v -76.180176 94.505569 38.865128
+v -69.178497 94.505569 31.435825
+v -69.178497 72.949203 10.190536
+v -51.194138 73.096008 8.228838
+v -51.194138 86.237701 -4.389481
+v -51.194138 86.237701 10.190535
+v -56.179302 58.992111 23.593925
+v -76.180176 72.949203 10.190536
+v -63.984268 128.384964 -0.553562
+v -76.180176 94.505569 31.435825
+v -56.182091 58.985981 10.190535
+v -56.182091 67.071968 10.190535
+v -76.209213 35.235584 53.804001
+v -77.166901 179.124222 68.89122
+v -76.180176 35.033924 48.613876
+v -55.537132 8.783722 -0.351589
+v -76.180176 0.000038 -0.351589
+v -76.180176 0.000038 48.613876
+v -76.180176 30.008049 20.959795
+v -76.180176 8.783722 -0.351589
+v -55.537128 30.008049 20.959793
+v -69.178497 126.220505 40.347282
+v -69.178497 120.132301 47.163853
+v -69.178497 120.132301 68.89122
+v -69.178497 126.220505 68.89122
+v -77.166901 149.50885 68.89122
+v -63.293903 144.915802 68.89122
+v -77.166901 126.220505 68.89122
+v -69.178497 120.132301 40.347282
+v -69.178497 120.132301 7.386345
+v -77.166901 120.132301 40.347282
+v -63.293903 149.50885 68.89122
+v -77.166901 149.50885 63.319244
+v -63.293903 168.752289 68.89122
+v -63.293903 168.752289 63.319244
+v -63.293903 149.50885 63.319244
+v -63.293907 196.959198 51.056229
+v -63.293907 144.915802 41.964088
+v -77.166901 120.132301 7.386345
+v -77.166901 168.752289 68.89122
+v -63.293903 179.124222 68.89122
+v -82.253799 192.318008 55.697437
+v -77.166901 192.318008 55.697437
+
+vt 0 0 0
+vt 1 0 0
+vt 1 0 0
+vt 1 1 0
+vt 1 1 0
+vt 0 0 0
+vt 0 1 0
+vt 1 0 0
+vt 1 1 0
+vt 1 1 0
+vt 0 0 0
+vt 1 1 0
+vt 0 1 0
+vt 1 0 0
+vt 1 1 0
+vt 0 1 0
+vt 1 1 0
+vt 0 0 0
+vt 1 1 0
+vt 0 1 0
+vt 1 0 0
+vt 0 1 0
+vt 1 0 0
+vt 1 0 0
+vt 1 1 0
+vt 0 0 0
+vt 1 0 0
+vt 0 0 0
+vt 1 0 0
+vt 0 1 0
+vt 1 1 0
+vt 0 0 0
+vt 1 0 0
+vt 0 1 0
+vt 0 1 0
+vt 1 1 0
+vt 0 0 0
+vt 1 0 0
+vt 0 0 0
+vt 0 1 0
+vt 0 0 0
+vt 0 1 0
+vt 1 0 0
+vt 0 1 0
+vt 0 0 0
+vt 0 0 0
+vt 1 1 0
+vt 1 0 0
+vt 0 1 0
+vt 1 1 0
+vt 1 1 0
+vt 0 1 0
+vt 1 0 0
+vt 0 0 0
+vt 1 1 0
+vt 0 0 0
+vt 0 1 0
+vt 1 0 0
+vt 1 1 0
+vt 0 0 0
+vt 1 0 0
+vt 0 0 0
+vt 1 1 0
+vt 0 1 0
+vt 0 1 0
+vt 1 1 0
+vt 1 0 0
+vt 1 0 0
+vt 0 1 0
+vt 0 0 0
+vt 1 1 0
+vt 1 0 0
+vt 1 1 0
+vt 0 1 0
+vt 0 1 0
+vt 0 0 0
+vt 0 0 0
+vt 1 0 0
+vt 0 1 0
+vt 0 0 0
+vt 1 0 0
+vt 1 1 0
+vt 1 0 0
+vt 1 1 0
+vt 0 1 0
+vt 0 0 0
+vt 1 1 0
+vt 0 1 0
+vt 0 1 0
+vt 1 0 0
+vt 1 0 0
+vt 0 0 0
+vt 1 1 0
+vt 1 0 0
+vt 0.337951 1 0
+vt 0 0 0
+vt 0 0 0
+vt 1 0 0
+vt 1 1 0
+vt 0 1 0
+vt 0 0 0
+vt 1 0 0
+vt 0 0 0
+vt 0 1 0
+vt 1 0 0
+vt 0 0 0
+vt 1 1 0
+vt 0 1 0
+vt 0 1 0
+vt 1 0 0
+vt 0 1 0
+vt 1 1 0
+vt 1 1 0
+vt 0 1 0
+vt 1 0 0
+vt 1 1 0
+vt 0 0 0
+vt 1 1 0
+vt 1 0 0
+vt 0 0 0
+vt 0 1 0
+vt 1 0 0
+vt 0 1 0
+vt 1 1 0
+vt 1 1 0
+vt 1 0 0
+vt 0 1 0
+vt 0 0 0
+vt 1 0 0
+vt 1 1 0
+vt 1 0 0
+vt 0 1 0
+vt 0 0 0
+vt 0 0 0
+vt 0 1 0
+vt 1 1 0
+vt 0 0 0
+vt 1 0 0
+vt 0 0 0
+vt 1 1 0
+vt 0 0 0
+vt 1 0 0
+vt 0 1 0
+vt 1 1 0
+vt 0 1 0
+vt 0 0 0
+vt 0 0 0
+vt 1 0 0
+vt 1 1 0
+vt 1 0 0
+vt 0 1 0
+vt 0 0 0
+vt 1 1 0
+vt 1 0 0
+vt 1 1 0
+vt 1 1 0
+vt 0 1 0
+vt 0 0 0
+vt 0 0 0
+vt 1 1 0
+vt 1 0 0
+vt 1 0 0
+vt 1 1 0
+vt 1 0 0
+vt 0 1 0
+vt 1 1 0
+vt 1 1 0
+vt 0 0 0
+vt 1 0 0
+vt 1 0 0
+vt 0 0 0
+vt 0 1 0
+vt 0 0 0
+vt 1 0 0
+vt 0 1 0
+vt 1 0 0
+vt 1 1 0
+vt 0 0 0
+vt 1 1 0
+vt 0 1 0
+vt 0 1 0
+vt 1 0 0
+vt 1 1 0
+vt 1 0 0
+vt 0 0 0
+vt 0 1 0
+vt 1 0 0
+vt 0 1 0
+vt 0 0 0
+vt 0 1 0
+vt 0 0 0
+vt 1 1 0
+vt 1 0 0
+vt 0 0 0
+vt 1 0 0
+vt 1 1 0
+vt 0 0 0
+vt 1 0 0
+vt 0 1 0
+vt 0 0 0
+vt 0 1 0
+vt 1 1 0
+vt 1 0 0
+vt 0 0 0
+vt 0 1 0
+vt 1 1 0
+vt 1 0 0
+vt 1 1 0
+vt 0 0 0
+vt 1 1 0
+vt 1 1 0
+vt 0 0 0
+vt 1 0 0
+vt 0 1 0
+vt 0 0 0
+vt 1 0 0
+vt 1 1 0
+vt 1 1 0
+vt 1 0 0
+vt 0 0 0
+vt 0 0 0
+vt 1 1 0
+vt 0 1 0
+vt 0 0 0
+vt 1 1 0
+vt 0 1 0
+vt 0 0 0
+vt 1 0 0
+vt 1 1 0
+vt 0 1 0
+vt 0 0 0
+vt 0 0 0
+vt 1 0 0
+vt 0 1 0
+vt 1 1 0
+vt 0 0 0
+vt 1 0 0
+vt 0 1 0
+vt 1 0 0
+vt 1 1 0
+vt 1 0 0
+vt 0 1 0
+vt 1 0 0
+vt 0 0 0
+vt 0 1 0
+vt 1 1 0
+vt 0 1 0
+vt 0 0.824293 0
+vt 0 0 0
+vt 1 1 0
+vt 0 1 0
+vt 0 0 0
+vt 1 0 0
+vt 1 0 0
+vt 1 1 0
+vt 1 1 0
+vt 0 0 0
+vt 0 1 0
+vt 1 0 0
+vt 1 1 0
+vt 0 0 0
+vt 0 1 0
+vt 1 1 0
+vt 0 0 0
+vt 1 1 0
+vt 0 1 0
+vt 1 0 0
+vt 0 1 0
+vt 1 0 0
+vt 1 0 0
+vt 1 1 0
+vt 0 0 0
+vt 1 0 0
+vt 0 1 0
+vt 1 1 0
+vt 0 0 0
+vt 0 1 0
+vt 1 1 0
+vt 0 0 0
+vt 1 0 0
+vt 0 0 0
+vt 1 0 0
+vt 0 1 0
+vt 0 0 0
+vt 0 0 0
+vt 1 1 0
+vt 1 0 0
+vt 0 1 0
+vt 1 1 0
+vt 1 1 0
+vt 0 1 0
+vt 1 0 0
+vt 0 0 0
+vt 1 1 0
+vt 0 0 0
+vt 0 1 0
+vt 1 0 0
+vt 1 1 0
+vt 0 0 0
+vt 1 0 0
+vt 0 0 0
+vt 1 1 0
+vt 0 1 0
+vt 0 1 0
+vt 1 1 0
+vt 1 0 0
+vt 1 1 0
+vt 1 0 0
+vt 1 1 0
+vt 0 1 0
+vt 0 1 0
+vt 0 0 0
+vt 0 0 0
+vt 1 0 0
+vt 0 1 0
+vt 0 0 0
+vt 1 0 0
+vt 1 1 0
+vt 1 0 0
+vt 1 1 0
+vt 0 1 0
+vt 0 0 0
+vt 1 1 0
+vt 0 1 0
+vt 0 1 0
+vt 1 0 0
+vt 1 0 0
+vt 0 0 0
+vt 1 1 0
+vt 1 0 0
+vt 0.337951 1 0
+vt 0 0 0
+vt 0 0 0
+vt 1 0 0
+vt 1 1 0
+vt 0 1 0
+vt 0 0 0
+vt 1 0 0
+vt 0 0 0
+vt 0 1 0
+vt 1 0 0
+vt 0 0 0
+vt 1 1 0
+vt 0 1 0
+vt 1 1 0
+vt 0 1 0
+vt 1 0 0
+vt 1 1 0
+vt 1 0 0
+vt 0 0 0
+vt 0 1 0
+vt 1 0 0
+vt 0 1 0
+vt 1 1 0
+vt 1 1 0
+vt 1 0 0
+vt 0 1 0
+vt 0 0 0
+vt 1 0 0
+vt 0 1 0
+vt 0 0 0
+vt 0 0 0
+vt 0 1 0
+vt 1 1 0
+vt 0 0 0
+vt 0 0 0
+vt 1 0 0
+vt 0 1 0
+vt 1 1 0
+vt 0 1 0
+vt 0 0 0
+vt 0 0 0
+vt 1 0 0
+vt 1 1 0
+vt 0 0 0
+vt 1 1 0
+vt 1 0 0
+vt 1 1 0
+vt 0 0 0
+vt 1 1 0
+vt 1 0 0
+vt 1 0 0
+vt 1 1 0
+vt 1 0 0
+vt 0 1 0
+vt 1 1 0
+vt 0 0 0
+vt 1 0 0
+vt 1 0 0
+vt 0 0 0
+vt 0 1 0
+vt 0 0 0
+vt 1 0 0
+vt 0 1 0
+vt 1 0 0
+vt 1 1 0
+vt 0 0 0
+vt 1 1 0
+vt 0 1 0
+vt 0 1 0
+vt 1 0 0
+vt 1 1 0
+vt 1 0 0
+vt 0 0 0
+vt 0 1 0
+vt 1 0 0
+vt 0 1 0
+vt 0 0 0
+vt 0 1 0
+vt 0 0 0
+vt 1 1 0
+vt 1 0 0
+vt 0 0 0
+vt 1 0 0
+vt 1 1 0
+vt 0 0 0
+vt 1 0 0
+vt 0 1 0
+vt 0 0 0
+vt 0 1 0
+vt 1 1 0
+vt 1 0 0
+vt 0 0 0
+vt 0 1 0
+vt 1 1 0
+vt 1 0 0
+vt 1 1 0
+vt 0 0 0
+vt 1 0 0
+vt 1 1 0
+vt 1 1 0
+vt 1 0 0
+vt 0 0 0
+vt 0 0 0
+vt 1 1 0
+vt 0 1 0
+vt 0 0 0
+vt 1 1 0
+vt 0 1 0
+vt 0 0 0
+vt 1 0 0
+vt 1 1 0
+vt 0 1 0
+vt 0 0 0
+vt 0 0 0
+vt 1 0 0
+vt 0 1 0
+vt 1 1 0
+vt 0 0 0
+vt 1 0 0
+vt 0 1 0
+vt 1 0 0
+vt 0 1 0
+vt 1 0 0
+vt 0 0 0
+vt 0 1 0
+vt 1 1 0
+vt 0 1 0
+vt 0 0.824293 0
+vt 0 0 0
+vt 1 1 0
+vt 0 1 0
+
+f 785/1637 772/1605 718/1480 706/1453 
+f 738/1527 717/1477 682/1403 716/1474 
+f 700/1444 758/1568 762/1576 759/1571 
+f 747/1545 727/1504 720/1486 719/1484 
+f 724/1495 726/1501 718/1481 772/1604 
+f 694/1431 689/1420 751/1554 746/1542 
+f 731/1514 737/1524 765/1585 
+f 689/1419 694/1430 683/1407 688/1417 
+f 765/1584 681/1401 704/1449 731/1513 
+f 749/1550 745/1539 726/1501 724/1495 
+f 759/1570 760/1573 702/1446 700/1443 
+f 738/1527 737/1525 748/1548 746/1542 
+f 777/1613 732/1515 703/1447 743/1536 
+f 696/1436 690/1422 689/1418 688/1415 
+f 685/1410 729/1509 786/1639 696/1434 
+f 782/1625 778/1616 768/1592 779/1619 
+f 747/1545 776/1612 687/1414 727/1503 
+f 692/1427 749/1549 725/1498 741/1534 
+f 746/1540 748/1547 736/1523 734/1520 
+f 716/1474 682/1403 725/1497 724/1495 
+f 779/1619 711/1466 709/1458 710/1463 
+f 707/1455 770/1597 767/1591 764/1580 
+f 683/1406 694/1430 746/1541 734/1519 
+f 709/1459 721/1489 722/1492 728/1507 
+f 746/1540 751/1553 684/1408 717/1478 
+f 717/1477 684/1408 698/1439 
+f 690/1421 696/1435 786/1638 713/1469 
+f 693/1429 755/1565 753/1560 691/1425 
+f 733/1516 744/1537 711/1465 708/1456 
+f 752/1557 769/1594 784/1634 699/1441 
+f 688/1417 693/1428 691/1424 696/1434 
+f 789/1648 723/1493 783/1628 790/1650 
+f 753/1558 697/1437 685/1409 696/1434 
+f 766/1588 765/1583 730/1511 686/1412 
+f 710/1461 787/1640 780/1621 781/1622 
+f 727/1502 687/1413 739/1529 720/1487 
+f 726/1500 718/1480 719/1483 747/1544 
+f 745/1538 776/1612 747/1543 726/1499 
+f 748/1546 737/1525 731/1512 736/1522 
+f 734/1519 736/1521 731/1512 704/1448 
+f 695/1433 777/1613 743/1536 750/1551 
+f 718/1479 719/1482 720/1486 706/1451 
+f 762/1577 758/1568 763/1578 761/1574 
+f 702/1445 760/1573 755/1565 693/1429 
+f 713/1469 695/1432 750/1552 690/1421 
+f 697/1438 681/1401 774/1609 729/1508 
+f 691/1423 753/1559 696/1434 
+f 774/1608 681/1401 765/1582 730/1510 
+f 758/1567 700/1442 702/1446 763/1579 
+f 702/1445 693/1428 688/1416 763/1579 
+f 782/1626 779/1618 710/1462 781/1622 
+f 681/1400 697/1437 734/1517 704/1448 
+f 725/1496 682/1402 742/1535 741/1534 
+f 741/1534 742/1535 717/1477 740/1532 
+f 740/1531 756/1566 692/1426 741/1533 
+f 789/1647 714/1470 723/1494 
+f 733/1516 708/1457 705/1450 712/1468 
+f 755/1564 683/1404 734/1518 
+f 750/1551 743/1536 703/1447 751/1553 
+f 766/1587 771/1601 764/1581 767/1590 
+f 772/1603 785/1636 773/1607 771/1600 
+f 722/1491 721/1489 714/1470 789/1646 
+f 710/1461 709/1460 728/1506 787/1641 
+f 683/1405 761/1575 763/1578 688/1415 
+f 728/1505 787/1640 754/1562 790/1650 
+f 755/1564 734/1517 697/1437 753/1558 
+f 783/1630 723/1493 714/1470 715/1473 
+f 717/1476 740/1530 756/1566 698/1439 
+f 728/1505 722/1490 789/1645 790/1650 
+f 785/1635 706/1452 705/1450 708/1456 
+f 780/1620 787/1640 754/1562 788/1644 
+f 775/1611 712/1467 705/1450 706/1451 
+f 788/1643 754/1561 790/1649 783/1629 
+f 720/1485 739/1528 775/1610 706/1451 
+f 752/1556 686/1411 766/1586 767/1590 
+f 770/1596 769/1594 752/1555 767/1589 
+f 709/1459 715/1471 714/1470 721/1488 
+f 768/1593 778/1615 769/1595 770/1598 
+f 784/1633 711/1465 744/1537 699/1440 
+f 708/1456 711/1465 770/1597 707/1455 
+f 780/1620 788/1642 783/1628 781/1622 
+f 782/1625 784/1634 769/1594 778/1614 
+f 781/1623 783/1627 715/1472 784/1633 
+f 784/1632 782/1624 781/1622 
+f 708/1456 707/1454 773/1606 785/1635 
+f 784/1631 715/1471 709/1458 711/1464 
+f 711/1464 779/1617 768/1592 770/1596 
+f 771/1599 773/1606 707/1454 764/1580 
+f 751/1553 703/1447 732/1515 684/1408 
+f 760/1572 759/1569 762/1576 761/1574 
+f 760/1572 755/1563 683/1404 761/1574 
+f 716/1475 765/1583 737/1524 738/1526 
+f 724/1495 772/1602 765/1582 716/1474 
+f 818/1716 860/1824 869/1850 808/1692 
+f 792/1654 817/1713 833/1757 816/1710 
+f 850/1795 846/1787 803/1683 847/1790 
+f 820/1722 827/1740 839/1770 819/1720 
+f 818/1717 826/1737 824/1731 860/1823 
+f 842/1777 796/1666 800/1675 838/1767 
+f 832/1754 829/1746 853/1804 
+f 793/1658 800/1674 796/1665 795/1663 
+f 806/1688 791/1652 853/1803 829/1745 
+f 826/1737 745/1539 749/1550 824/1731 
+f 804/1685 848/1792 847/1789 803/1682 
+f 840/1773 832/1755 833/1757 838/1767 
+f 805/1686 732/1515 777/1613 837/1764 
+f 796/1664 797/1668 801/1678 795/1661 
+f 786/1639 729/1509 794/1660 801/1676 
+f 856/1811 862/1829 866/1838 863/1832 
+f 687/1414 776/1612 839/1770 827/1739 
+f 825/1734 749/1549 692/1427 835/1762 
+f 831/1753 840/1772 838/1765 830/1750 
+f 825/1733 792/1654 816/1710 824/1731 
+f 811/1697 813/1705 863/1832 812/1702 
+f 855/1810 858/1816 809/1694 852/1799 
+f 838/1766 800/1674 793/1657 830/1749 
+f 822/1728 821/1725 811/1698 828/1743 
+f 684/1408 842/1776 838/1765 817/1714 
+f 684/1408 817/1713 698/1439 
+f 786/1638 801/1677 797/1667 713/1469 
+f 843/1780 845/1785 799/1673 798/1671 
+f 813/1704 744/1537 733/1516 810/1695 
+f 868/1847 857/1813 752/1557 699/1441 
+f 798/1670 799/1672 795/1663 801/1676 
+f 867/1841 823/1729 872/1859 873/1861 
+f 794/1659 802/1679 843/1778 801/1676 
+f 730/1511 853/1802 854/1807 686/1412 
+f 864/1834 870/1851 812/1700 865/1835 
+f 739/1529 687/1413 827/1738 820/1723 
+f 819/1719 818/1716 826/1736 839/1769 
+f 839/1768 776/1612 745/1538 826/1735 
+f 829/1744 832/1755 840/1771 831/1752 
+f 829/1744 831/1751 830/1749 806/1687 
+f 837/1764 777/1613 695/1433 841/1774 
+f 820/1722 819/1718 818/1715 808/1690 
+f 851/1797 846/1787 850/1796 849/1793 
+f 845/1785 848/1792 804/1684 799/1673 
+f 841/1775 695/1432 713/1469 797/1667 
+f 774/1609 791/1652 802/1680 729/1508 
+f 843/1779 798/1669 801/1676 
+f 853/1801 791/1652 774/1608 730/1510 
+f 804/1685 803/1681 846/1786 851/1798 
+f 795/1662 799/1672 804/1684 851/1798 
+f 812/1701 863/1831 866/1839 865/1835 
+f 830/1747 802/1679 791/1651 806/1687 
+f 836/1763 792/1653 825/1732 835/1762 
+f 817/1713 836/1763 835/1762 834/1760 
+f 692/1426 756/1566 834/1759 835/1761 
+f 814/1706 872/1858 823/1730 
+f 807/1689 810/1696 733/1516 712/1468 
+f 793/1655 845/1784 830/1748 
+f 805/1686 837/1764 841/1774 842/1776 
+f 852/1800 859/1820 854/1806 855/1809 
+f 861/1826 869/1849 860/1822 859/1819 
+f 814/1706 821/1725 822/1727 872/1857 
+f 828/1742 811/1699 812/1700 870/1852 
+f 851/1797 849/1794 793/1656 795/1661 
+f 844/1782 870/1851 828/1741 873/1861 
+f 802/1679 830/1747 845/1784 843/1778 
+f 814/1706 823/1729 867/1843 815/1709 
+f 756/1566 834/1758 817/1712 698/1439 
+f 872/1856 822/1726 828/1741 873/1861 
+f 807/1689 808/1691 869/1848 810/1695 
+f 844/1782 870/1851 864/1833 871/1855 
+f 807/1689 712/1467 775/1611 808/1690 
+f 873/1860 844/1781 871/1854 867/1842 
+f 775/1610 739/1528 820/1721 808/1690 
+f 854/1805 686/1411 752/1556 855/1809 
+f 752/1555 857/1813 858/1815 855/1808 
+f 814/1706 815/1707 811/1698 821/1724 
+f 857/1814 862/1828 856/1812 858/1817 
+f 744/1537 813/1704 868/1846 699/1440 
+f 858/1816 813/1704 810/1695 809/1694 
+f 867/1841 871/1853 864/1833 865/1835 
+f 857/1813 868/1847 866/1838 862/1827 
+f 815/1708 867/1840 865/1836 868/1846 
+f 866/1837 868/1845 865/1835 
+f 861/1825 809/1693 810/1695 869/1848 
+f 811/1697 815/1707 868/1844 813/1703 
+f 856/1811 863/1830 813/1703 858/1815 
+f 809/1693 861/1825 859/1818 852/1799 
+f 732/1515 805/1686 842/1776 684/1408 
+f 850/1795 847/1788 848/1791 849/1793 
+f 793/1655 845/1783 848/1791 849/1793 
+f 832/1754 853/1802 816/1711 833/1756 
+f 853/1801 860/1821 824/1731 816/1710 
+
+g body
+usemtl brown_light
+v -6.492241 120.132301 47.163853
+v -6.241148 120.132301 47.163853
+v -6.241148 120.132301 46.956116
+v 0.760529 42.060787 48.613876
+v 0.760529 57.953701 48.613876
+v -6.241148 42.060787 48.613876
+v -6.241148 57.953701 48.613876
+v -6.241148 42.060787 48.613876
+v -6.241148 57.953701 48.613876
+v -19.237558 42.060787 48.613876
+v -19.237558 57.953701 48.613876
+v -19.237558 49.835079 48.613876
+v 0.760529 35.033916 48.613876
+v 0.760529 42.060787 48.613876
+v -19.237558 35.033916 48.613876
+v -6.241148 42.060787 48.613876
+v -19.237558 42.060787 48.613876
+v -6.241148 42.060787 48.613876
+v 0.760529 42.060787 48.613876
+v -6.241148 42.060787 20.959789
+v 0.760529 42.060787 20.959789
+v -12.46179 57.953701 53.781174
+v -19.237558 57.953701 53.781174
+v -6.241148 57.953701 48.613876
+v -19.237558 57.953701 48.613876
+v -19.237558 42.060787 48.613876
+v -19.237558 42.060787 20.959791
+v -19.237558 42.060787 48.613876
+v -19.237558 49.835079 48.613876
+v -19.882517 42.060787 48.613876
+v -19.882517 49.835079 48.613876
+v -19.237558 42.060787 48.613876
+v -19.237558 42.060787 20.959791
+v -19.237558 49.835079 48.613876
+v -19.23756 42.060787 10.190531
+v -19.23756 49.835079 10.190531
+v -19.237558 35.033916 53.781174
+v -19.237558 35.033916 48.613876
+v -19.237558 57.953701 53.781174
+v -19.237558 42.060787 48.613876
+v -19.237558 49.835079 48.613876
+v -19.237558 57.953701 48.613876
+v -19.237558 35.033916 53.781174
+v 0.760529 35.033916 53.781174
+v -19.237558 35.033916 48.613876
+v 0.760529 35.033916 48.613876
+v 0.760529 0.000023 48.613876
+v 0.760529 35.033916 48.613876
+v -19.882517 0.000023 48.613876
+v -19.237558 35.033916 48.613876
+v -19.237558 42.060787 48.613876
+v -19.882517 42.060787 48.613876
+v -19.882517 30.008041 48.613876
+v -6.24115 42.060787 10.190529
+v 0.760529 42.060787 10.190529
+v 0.760529 42.060787 20.959789
+v -13.34399 35.887333 20.959789
+v -6.241148 42.060787 20.959789
+v -19.237558 42.060787 20.959791
+v -19.882517 35.887333 20.959791
+v -19.882517 42.060787 20.959791
+v 0.760529 57.953701 53.781174
+v 0.760529 35.033916 53.781174
+v -12.46179 57.953701 53.781174
+v -19.237558 35.033916 53.781174
+v -19.237558 57.953701 53.781174
+v -19.23756 42.060787 10.190531
+v -41.697044 49.835079 48.613876
+v -19.882517 49.835079 48.613876
+v -41.697044 49.835079 10.190531
+v -19.237558 49.835079 48.613876
+v -19.23756 49.835079 10.190531
+v -19.882519 0.000023 -0.351593
+v -19.882517 0.000023 48.613876
+v -19.882519 8.783707 -0.351593
+v -19.882517 30.008041 48.613876
+v -19.882517 30.008041 20.959791
+v 0.760529 0.000023 48.613876
+v -19.882517 0.000023 48.613876
+v 0.760529 0.000023 -0.351593
+v -19.882519 0.000023 -0.351593
+v -41.697044 42.060787 24.267151
+v -41.697044 42.060787 48.613876
+v -41.697044 49.835079 10.190531
+v -41.697044 49.835079 48.613876
+v 0.760529 94.505569 38.865124
+v 0.760529 57.953701 38.865124
+v -6.241148 94.505569 38.865128
+v -6.241148 57.953701 38.865128
+v -6.241148 57.953701 38.865128
+v -6.241148 57.953701 44.6245
+v -6.241148 94.505569 38.865128
+v -6.241148 92.197029 44.6245
+v 0.760529 57.953701 38.865124
+v -6.241148 57.953701 44.6245
+v -6.241148 57.953701 38.865128
+v 1.747257 143.077621 27.487873
+v -76.490204 143.077621 27.487877
+v 1.747257 143.077621 7.386337
+v -76.490204 143.077621 7.386341
+v 1.747257 120.132301 7.386337
+v 1.747257 120.132301 40.347279
+v 1.747257 143.077621 7.386337
+v 1.747257 126.220505 40.347279
+v 1.747257 126.220505 68.89122
+v 1.747257 137.811234 27.487873
+v 1.747257 143.077621 27.487873
+v 1.747257 137.811234 41.964085
+v 1.747257 149.508865 63.319244
+v 1.747257 170.544739 41.964085
+v 1.747257 169.652771 46.234287
+v 1.747257 168.752289 63.319244
+v 1.747257 168.752289 68.89122
+v 1.747257 179.124237 68.89122
+v 1.747257 169.652771 60.113297
+v 1.747257 187.902161 60.113297
+v 1.747257 149.508865 68.89122
+v -72.982086 127.093079 7.386341
+v -72.982086 130.486969 7.386341
+v -76.490204 126.293213 7.386341
+v 1.747257 120.132301 7.386337
+v 1.747257 143.077621 7.386337
+v -6.24115 120.132301 7.386337
+v -6.24115 128.384979 7.386337
+v -11.435379 133.165527 7.386337
+v -76.490204 143.077621 7.386341
+v -11.435379 128.384979 7.386337
+v -60.913021 133.165527 7.386341
+v 1.747257 137.811234 41.964085
+v -16.33053 137.811234 41.964085
+v 1.747257 137.811234 27.487873
+v 1.747257 170.544739 41.964085
+v -12.125738 144.915802 41.964085
+v 1.747257 137.811234 41.964085
+v -16.33053 137.811234 41.964085
+v -16.33053 138.91658 41.964085
+v -61.737495 144.915802 41.964088
+v -76.490204 138.91658 41.964088
+v -61.737495 196.940063 41.964088
+v -76.490204 196.940063 41.964088
+v -76.490204 170.586456 41.964088
+v 6.83416 170.544739 41.964085
+v 6.83416 196.959229 41.964085
+v -12.125738 196.959229 41.964085
+v 1.747257 149.508865 68.89122
+v -4.622913 149.508865 68.89122
+v 1.747257 149.508865 63.319244
+v -6.24115 120.132301 -4.389488
+v -6.24115 120.132301 7.386337
+v -6.24115 128.384979 -4.389488
+v -6.24115 128.384979 7.386337
+v -6.24115 128.384979 7.386337
+v -11.435379 128.384979 7.386337
+v -6.24115 128.384979 -4.389488
+v -11.435379 128.384979 -0.55357
+v -60.913021 128.384979 -0.55357
+v -67.315895 128.384979 3.658707
+v -67.315895 128.384979 -4.389488
+v -11.435379 128.384979 -0.55357
+v -11.435379 128.384979 7.386337
+v -11.435379 133.165527 -0.55357
+v -11.435379 133.165527 7.386337
+v -11.435379 133.165527 7.386337
+v -60.913021 133.165527 7.386341
+v -11.435379 133.165527 -0.55357
+v -60.913021 133.165527 -0.55357
+v 6.83416 170.544739 41.964085
+v 6.83416 170.544739 55.697433
+v 6.83416 196.959229 41.964085
+v 6.83416 192.318024 55.697433
+v 6.83416 196.959229 51.056229
+v -76.490204 170.586456 41.964088
+v -76.490204 196.940063 41.964088
+v -82.253807 170.586456 41.964088
+v -82.253807 196.940063 41.964088
+v -61.737495 196.940063 46.740871
+v -76.490204 196.940063 46.740875
+v -61.737495 196.940063 41.964088
+v -76.490204 196.940063 41.964088
+v -61.737495 144.915802 68.89122
+v -61.737495 149.288986 62.27103
+v -61.737495 144.915802 41.964088
+v -61.737495 196.940063 41.964088
+v -61.737495 181.409943 62.27103
+v -61.737495 196.940063 46.740871
+v -61.737495 149.288986 68.89122
+v -45.470921 144.915802 68.89122
+v -61.737495 144.915802 68.89122
+v -12.125738 144.915802 41.964085
+v -61.737495 144.915802 41.964088
+v 6.83416 196.959229 51.056229
+v -12.125738 196.959229 51.056229
+v 6.83416 196.959229 41.964085
+v -12.125738 196.959229 41.964085
+v -6.24115 103.837631 -4.389488
+v -6.24115 103.837631 7.386337
+v -6.24115 103.837631 -4.389488
+v -6.24115 120.132301 -4.389488
+v -24.225512 103.837631 -4.389488
+v -6.24115 128.384979 -4.389488
+v -67.315895 128.384979 -4.389488
+v -48.081444 103.837631 -4.389488
+v -67.315895 103.837631 -4.389488
+v -67.315895 120.132301 -4.389488
+v -11.435379 128.384979 -0.55357
+v -11.435379 133.165527 -0.55357
+v -60.913021 128.384979 -0.55357
+v -60.913021 133.165527 -0.55357
+v -82.253807 196.940063 46.740875
+v -82.253807 196.940063 41.964088
+v -61.737495 149.288986 68.89122
+v -70.318558 149.288986 68.89122
+v -61.737495 149.288986 62.27103
+v -6.24115 103.837631 7.386337
+v -6.24115 103.837631 10.190529
+v -6.24115 120.132301 7.386337
+v -6.241148 103.837631 34.955193
+v -6.241148 103.837631 47.163853
+v -6.24115 117.915428 13.451937
+v -6.241148 120.132301 47.163853
+v -6.241148 117.915428 46.956116
+v -6.241148 120.132301 46.956116
+v -24.225512 86.237694 -4.389488
+v -48.081444 86.237694 -4.389488
+v -6.24115 72.949203 10.190529
+v -6.241148 94.505569 31.435822
+v -6.24115 103.837631 10.190529
+v -6.241148 94.505569 38.865128
+v -6.241148 100.671875 34.955193
+v -6.241148 103.837631 34.955193
+v -6.241148 57.953701 44.6245
+v -6.241148 57.953701 48.613876
+v -6.241148 92.197029 44.6245
+v -6.241148 100.671875 48.613876
+v -24.22551 73.096008 8.228834
+v -24.225512 86.237694 -4.389488
+v -48.081444 73.096008 8.228834
+v -48.081444 79.666847 1.919674
+v -48.081444 86.237694 -4.389488
+v -24.225512 86.237694 -4.389488
+v -24.22551 86.237694 10.190531
+v -24.225512 103.837631 -4.389488
+v -24.22551 98.332855 8.614803
+v -24.22551 98.332855 10.190531
+v 0.760529 57.953701 48.613876
+v -6.241148 57.953701 48.613876
+v 0.760529 57.953701 38.865124
+v -6.241148 57.953701 44.6245
+v 0.760529 94.505569 38.865124
+v -6.241148 94.505569 38.865128
+v 0.760529 94.505569 31.435822
+v -6.241148 94.505569 31.435822
+v 0.760529 94.505569 31.435822
+v -6.241148 94.505569 31.435822
+v 0.760529 72.949203 10.190529
+v -6.24115 72.949203 10.190529
+v -6.24115 72.949203 10.190529
+v -6.24115 103.837631 10.190529
+v -19.23756 72.949203 10.190531
+v -19.23756 99.859589 10.190531
+v -24.22551 73.096008 8.228834
+v -24.22551 73.096008 10.190531
+v -24.225512 86.237694 -4.389488
+v -24.22551 86.237694 10.190531
+v -19.23756 99.859589 10.190531
+v -24.22551 73.096008 10.190531
+v -19.23756 72.949203 10.190531
+v -24.638441 72.949203 10.190531
+v -24.22551 86.237694 10.190531
+v -24.22551 98.332855 10.190531
+v 0.760529 57.953701 53.781174
+v -12.46179 57.953701 53.781174
+v 0.760529 42.060787 10.190529
+v 0.760529 42.060787 20.959789
+v 0.760529 72.949203 10.190529
+v 0.760529 42.060787 48.613876
+v 0.760529 57.953701 38.865124
+v 0.760529 94.505569 38.865124
+v 0.760529 94.505569 31.435822
+v 0.760529 57.953701 48.613876
+v 0.760529 42.060787 10.190529
+v 0.760529 72.949203 10.190529
+v -6.24115 42.060787 10.190529
+v -19.23756 42.060787 10.190531
+v -19.23756 49.835079 10.190531
+v -19.23756 58.985977 10.190531
+v -19.23756 67.071968 10.190531
+v -19.23756 67.071968 10.190531
+v -19.23756 72.949203 10.190531
+v -41.697044 67.071968 10.190531
+v -26.941288 72.130524 10.190531
+v -24.638441 72.949203 10.190531
+v -41.697044 72.130524 10.190531
+v 0.760529 35.033916 48.613876
+v 0.760529 35.033916 53.781174
+v 0.760529 42.060787 48.613876
+v 0.760529 57.953701 53.781174
+v 0.760529 57.953701 48.613876
+v 0.760529 0.000023 48.613876
+v 0.760529 0.000023 -0.351593
+v 0.760529 35.033916 48.613876
+v 0.760529 8.783707 -0.351593
+v 0.760529 30.008041 20.959789
+v 0.760529 42.060787 20.959789
+v 0.760529 42.060787 48.613876
+v 0.760529 42.060787 20.959789
+v 0.760529 30.008041 20.959789
+v -13.34399 35.887333 20.959789
+v -19.882517 30.008041 20.959791
+v -19.882517 35.887333 20.959791
+v -19.882517 30.008041 20.959791
+v 0.760529 30.008041 20.959789
+v -19.882519 8.783707 -0.351593
+v 0.760529 8.783707 -0.351593
+v 0.760529 8.783707 -0.351593
+v 0.760529 0.000023 -0.351593
+v -19.882519 8.783707 -0.351593
+v -19.882519 0.000023 -0.351593
+v 0.760529 42.060787 20.959789
+v 0.760529 35.033916 48.613876
+v 0.760529 42.060787 48.613876
+v 0.760529 30.008041 20.959789
+v 0.760529 8.783707 -0.351593
+v 0.760529 0.000023 -0.351593
+v 0.760529 0.000023 48.613876
+v -41.697044 49.835079 10.190531
+v -41.697044 58.985977 10.190531
+v -41.697044 42.060787 10.190531
+v -41.697044 49.835079 10.190531
+v -64.156532 42.060787 10.190533
+v -41.697044 58.985977 10.190531
+v -41.697044 67.071968 10.190531
+v -41.697044 72.130524 10.190531
+v -50.92408 72.130524 10.190531
+v -53.083733 72.949203 10.190531
+v -64.156532 72.949203 10.190533
+v -19.882517 30.008041 20.959791
+v -13.34399 35.887333 20.959789
+v -19.882517 35.887333 20.959791
+v 0.760529 30.008041 20.959789
+v 0.760529 42.060787 20.959789
+v 0.760529 30.008041 20.959789
+v -19.882519 8.783707 -0.351593
+v 0.760529 8.783707 -0.351593
+v -19.882517 30.008041 20.959791
+v 0.760529 0.000023 -0.351593
+v -19.882519 8.783707 -0.351593
+v -19.882519 0.000023 -0.351593
+v 0.760529 8.783707 -0.351593
+v -41.697044 58.985977 26.176956
+v -41.697044 58.985977 10.190531
+v -41.037094 58.985977 26.176956
+v -19.23756 58.985977 10.190531
+v -64.156532 72.949203 10.190533
+v -53.083733 72.949203 10.190531
+v -64.156532 77.146683 10.190533
+v -41.697044 58.985977 10.190531
+v -41.697044 58.985977 26.176956
+v -41.697044 67.071968 10.190531
+v -41.697044 42.060787 10.190531
+v -41.697044 42.060787 24.267151
+v -41.697044 49.835079 10.190531
+v -76.490204 120.132301 78.941261
+v -76.490204 120.132301 68.89122
+v -76.490204 126.220505 78.941261
+v -76.490204 126.220505 68.89122
+v -76.490204 120.132301 68.89122
+v -76.490204 120.132301 40.347282
+v -76.490204 126.220505 68.89122
+v -76.490204 126.220505 40.347282
+v -6.241146 126.220505 68.89122
+v -6.241146 120.132301 68.89122
+v -76.490204 126.220505 68.89122
+v -76.490204 120.132301 68.89122
+v -76.490204 120.132301 40.347282
+v -76.490204 120.132301 7.386341
+v -76.490204 126.220505 40.347282
+v -76.490204 126.293213 7.386341
+v -76.490204 149.288986 62.27103
+v -76.490204 170.586456 46.740875
+v -76.490204 181.409943 62.27103
+v -76.490204 196.940063 46.740875
+v -76.490204 126.220505 68.89122
+v -76.490204 149.288986 68.89122
+v -76.490204 137.811234 41.964088
+v -76.490204 138.91658 41.964088
+v -76.490204 170.586456 41.964088
+v -76.490204 143.077621 7.386341
+v -76.490204 137.811234 27.487877
+v -76.490204 143.077621 27.487877
+v -6.241146 126.220505 68.89122
+v -76.490204 126.220505 68.89122
+v -6.241148 126.220505 40.347279
+v -76.490204 126.220505 40.347282
+v -6.241148 126.220505 40.347279
+v -6.241148 120.132301 40.347279
+v -76.490204 126.220505 40.347282
+v -67.315895 120.132301 40.347282
+v -76.490204 120.132301 40.347282
+v -6.241146 120.132301 68.89122
+v -67.315895 120.132301 47.163853
+v -76.490204 120.132301 68.89122
+v -76.490204 120.132301 40.347282
+v -67.315895 120.132301 46.95612
+v -67.315895 120.132301 40.347282
+v -6.241148 120.132301 47.163853
+v -6.492241 120.132301 47.163853
+v -6.241148 120.132301 40.347279
+v -6.241148 120.132301 46.956116
+v -6.241148 126.220505 40.347279
+v -6.241148 120.132301 47.163853
+v -6.241146 120.132301 68.89122
+v -6.241146 126.220505 68.89122
+v -61.737495 149.288986 68.89122
+v -61.737495 144.915802 68.89122
+v -70.318558 149.288986 68.89122
+v 1.747257 149.508865 68.89122
+v 1.747257 126.220505 68.89122
+v -4.622913 149.508865 68.89122
+v -12.125736 149.508865 68.89122
+v -12.125736 144.915802 68.89122
+v -45.470921 144.915802 68.89122
+v -76.490204 149.288986 68.89122
+v -76.490204 120.132301 7.386341
+v -67.315895 120.132301 7.386341
+v -70.318558 149.288986 68.89122
+v -76.490204 149.288986 68.89122
+v -61.737495 149.288986 62.27103
+v -76.490204 149.288986 62.27103
+v -61.737495 181.409943 62.27103
+v -61.737495 149.288986 62.27103
+v -76.490204 181.409943 62.27103
+v -76.490204 149.288986 62.27103
+v -61.737495 196.940063 46.740871
+v -61.737495 181.409943 62.27103
+v -76.490204 196.940063 46.740875
+v -76.490204 181.409943 62.27103
+v -76.490204 196.940063 46.740875
+v -76.490204 170.586456 46.740875
+v -82.253807 196.940063 46.740875
+v -82.253807 170.586456 46.740875
+v -76.490204 170.586456 46.740875
+v -76.490204 170.586456 41.964088
+v -76.490204 196.940063 46.740875
+v -76.490204 196.940063 41.964088
+v -82.253807 170.586456 46.740875
+v -76.490204 170.586456 46.740875
+v -82.253807 170.586456 41.964088
+v -76.490204 170.586456 41.964088
+v -16.33053 137.811234 41.964085
+v -16.33053 138.91658 41.964085
+v -76.490204 137.811234 41.964088
+v -76.490204 138.91658 41.964088
+v -16.33053 137.811234 41.964085
+v -76.490204 137.811234 41.964088
+v 1.747257 137.811234 27.487873
+v -76.490204 137.811234 27.487877
+v 1.747257 143.077621 27.487873
+v 1.747257 137.811234 27.487873
+v -76.490204 143.077621 27.487877
+v -76.490204 137.811234 27.487877
+v -67.315895 120.132301 7.386341
+v -67.315895 128.384979 7.386341
+v -76.490204 120.132301 7.386341
+v -72.982086 127.093079 7.386341
+v -76.490204 126.293213 7.386341
+v -60.913021 128.384979 7.386341
+v -60.913021 133.165527 7.386341
+v -72.982086 130.486969 7.386341
+v 1.747257 126.220505 68.89122
+v 1.747257 126.220505 40.347279
+v -6.241148 120.132301 46.956116
+v -67.315895 120.132301 46.95612
+v -6.241148 120.132301 40.347279
+v -67.315895 120.132301 40.347282
+v -6.24115 120.132301 7.386337
+v -67.315895 120.132301 7.386341
+v 1.747257 126.220505 40.347279
+v 1.747257 120.132301 40.347279
+v -67.315895 103.837631 47.163853
+v -67.315895 103.837631 10.190533
+v -67.315895 120.132301 47.163853
+v -67.315895 103.837631 7.386341
+v -67.315895 120.132301 7.386341
+v -67.315895 120.132301 46.95612
+v -67.315895 120.132301 40.347282
+v -6.492241 120.132301 47.163853
+v -67.315895 120.132301 47.163853
+v -6.241148 120.132301 47.163853
+v -6.241148 103.837631 47.163853
+v -6.492241 120.132301 47.163853
+v -67.315895 103.837631 47.163853
+v -67.315895 120.132301 47.163853
+v -6.24115 117.915428 13.451937
+v -6.241148 117.915428 46.956116
+v -6.24115 120.132301 7.386337
+v -6.241148 120.132301 46.956116
+v -6.241148 120.132301 40.347279
+v -4.622913 149.508865 68.89122
+v -12.125736 149.508865 68.89122
+v 1.747257 149.508865 63.319244
+v -12.125736 149.508865 63.319244
+v -12.125736 168.752289 68.89122
+v -12.125736 168.752289 63.319244
+v -12.125736 179.124237 68.89122
+v -12.125736 144.915802 68.89122
+v -12.125738 144.915802 41.964085
+v -12.125736 149.508865 68.89122
+v -12.125736 149.508865 63.319244
+v -12.125738 196.959229 41.964085
+v -12.125738 196.959229 51.056229
+v -12.125736 144.915802 68.89122
+v -45.470921 144.915802 68.89122
+v -12.125738 144.915802 41.964085
+v -82.253807 170.586456 46.740875
+v -82.253807 170.586456 41.964088
+v -82.253807 196.940063 46.740875
+v -82.253807 196.940063 41.964088
+v -60.913021 128.384979 7.386341
+v -60.913021 128.384979 -0.55357
+v -60.913021 133.165527 7.386341
+v -60.913021 133.165527 -0.55357
+v -11.435379 128.384979 7.386337
+v -11.435379 133.165527 7.386337
+v -60.913021 128.384979 7.386341
+v -60.913021 133.165527 7.386341
+v -60.913021 128.384979 7.386341
+v -67.315895 128.384979 7.386341
+v -60.913021 128.384979 -0.55357
+v -67.315895 128.384979 3.658707
+v -67.315895 120.132301 -4.389488
+v -67.315895 128.384979 7.386341
+v -67.315895 128.384979 -4.389488
+v -67.315895 128.384979 3.658707
+v 1.747257 120.132301 40.347279
+v 1.747257 120.132301 7.386337
+v -6.24115 103.837631 7.386337
+v -6.24115 120.132301 7.386337
+v -24.22551 103.837631 7.386339
+v -67.315895 120.132301 7.386341
+v -48.081444 103.837631 7.386339
+v -67.315895 103.837631 7.386341
+v -67.315895 103.837631 -4.389488
+v -67.315895 103.837631 10.190533
+v -64.156532 103.837631 10.190533
+v -67.315895 103.837631 7.386341
+v -48.081444 103.837631 10.190531
+v -48.081444 103.837631 7.386339
+v -67.315895 103.837631 47.163853
+v -6.241148 103.837631 47.163853
+v -67.315895 103.837631 10.190533
+v -6.241148 103.837631 34.955193
+v -48.081444 103.837631 14.202915
+v -48.081444 103.837631 10.190531
+v -64.156532 103.837631 10.190533
+v -6.24115 103.837631 10.190529
+v -24.22551 103.837631 14.202915
+v -24.22551 103.837631 10.190531
+v -19.23756 103.837631 10.190531
+v 1.747257 168.752289 63.319244
+v 1.747257 149.508865 63.319244
+v -12.125736 168.752289 63.319244
+v -12.125736 149.508865 63.319244
+v -12.125736 168.752289 68.89122
+v 1.747257 168.752289 68.89122
+v -12.125736 168.752289 63.319244
+v 1.747257 168.752289 63.319244
+v 1.747257 179.124237 68.89122
+v 1.747257 168.752289 68.89122
+v -12.125736 179.124237 68.89122
+v -12.125736 168.752289 68.89122
+v 6.83416 192.318024 55.697433
+v 1.747257 192.318024 55.697433
+v 6.83416 196.959229 51.056229
+v 1.747257 179.124237 68.89122
+v -12.125736 179.124237 68.89122
+v 1.747257 187.902161 60.113297
+v -12.125738 196.959229 51.056229
+v -11.435379 128.384979 7.386337
+v -11.435379 128.384979 -0.55357
+v -24.22551 103.837631 7.386339
+v -6.24115 103.837631 7.386337
+v -24.225512 103.837631 -4.389488
+v -6.24115 103.837631 -4.389488
+v -24.22551 103.837631 10.190531
+v -19.23756 103.837631 10.190531
+v -24.22551 103.837631 7.386339
+v -6.24115 103.837631 10.190529
+v -6.24115 103.837631 7.386337
+v -48.081444 103.837631 10.190531
+v -41.697044 103.837631 10.190531
+v -48.081444 103.837631 7.386339
+v -24.22551 103.837631 10.190531
+v -24.22551 103.837631 7.386339
+v -48.081444 103.837631 7.386339
+v -48.081444 103.837631 1.919674
+v -48.081444 103.837631 -4.389488
+v -67.315895 103.837631 7.386341
+v -67.315895 103.837631 -4.389488
+v -48.081444 86.237694 14.202915
+v -48.081444 86.237694 1.919674
+v -48.081444 103.837631 14.202915
+v -48.081444 103.837631 1.919674
+v -48.081444 103.837631 10.190531
+v -48.081444 103.837631 7.386339
+v -41.697044 72.949203 10.190531
+v -41.697044 103.837631 10.190531
+v -53.083733 72.949203 10.190531
+v -48.081444 103.837631 10.190531
+v -64.156532 103.837631 10.190533
+v -64.156532 77.146683 10.190533
+v -48.081444 103.837631 14.202915
+v -24.22551 103.837631 14.202915
+v -48.081444 103.837631 10.190531
+v -24.22551 103.837631 10.190531
+v -41.697044 103.837631 10.190531
+v -24.22551 103.837631 14.202915
+v -24.22551 86.237694 14.202915
+v -48.081444 103.837631 14.202915
+v -48.081444 86.237694 14.202915
+v -24.22551 98.332855 8.614803
+v -24.22551 98.332855 10.190531
+v -24.225512 103.837631 -4.389488
+v -24.22551 86.237694 10.190531
+v -24.22551 86.237694 14.202915
+v -24.22551 103.837631 14.202915
+v -24.22551 103.837631 7.386339
+v -24.22551 103.837631 10.190531
+v -24.22551 86.237694 10.190531
+v -24.22551 98.332855 10.190531
+v -24.22551 73.096008 10.190531
+v -19.23756 99.859589 10.190531
+v -19.23756 103.837631 10.190531
+v -24.22551 103.837631 10.190531
+v -24.638441 72.949203 10.190531
+v -41.697044 103.837631 10.190531
+v -41.697044 72.949203 10.190531
+v -19.23756 99.859589 10.190531
+v -6.24115 103.837631 10.190529
+v -19.23756 103.837631 10.190531
+v 1.747257 169.652771 46.234287
+v 1.747257 169.652771 60.113297
+v 1.747257 170.544739 41.964085
+v 1.747257 170.544739 55.697433
+v 1.747257 187.902161 60.113297
+v 1.747257 192.318024 55.697433
+v 6.83416 192.318024 55.697433
+v 6.83416 170.544739 55.697433
+v 1.747257 192.318024 55.697433
+v 1.747257 170.544739 55.697433
+v -48.081444 86.237694 1.919674
+v -48.081444 86.237694 -4.389488
+v -48.081444 103.837631 1.919674
+v -48.081444 103.837631 -4.389488
+v -24.22551 86.237694 14.202915
+v -48.081444 86.237694 14.202915
+v -24.22551 86.237694 10.190531
+v -48.081444 86.237694 1.919674
+v -24.225512 86.237694 -4.389488
+v -48.081444 86.237694 -4.389488
+v -48.081444 73.096008 14.202915
+v -48.081444 73.096008 8.228834
+v -48.081444 86.237694 14.202915
+v -48.081444 79.666847 1.919674
+v -48.081444 86.237694 1.919674
+v -41.697044 72.130524 10.190531
+v -41.697044 72.949203 10.190531
+v -50.92408 72.130524 10.190531
+v -53.083733 72.949203 10.190531
+v -24.22551 73.096008 14.202915
+v -48.081444 73.096008 14.202915
+v -24.22551 73.096008 10.190531
+v -24.22551 73.096008 14.202915
+v -24.22551 86.237694 10.190531
+v -24.22551 86.237694 14.202915
+v -24.638441 72.949203 10.190531
+v -41.697044 72.949203 10.190531
+v -26.941288 72.130524 10.190531
+v -41.697044 72.130524 10.190531
+v 1.747257 170.544739 55.697433
+v 6.83416 170.544739 55.697433
+v 1.747257 170.544739 41.964085
+v 6.83416 170.544739 41.964085
+v -48.081444 86.237694 1.919674
+v -48.081444 79.666847 1.919674
+v -48.081444 86.237694 -4.389488
+v -48.081444 73.096008 14.202915
+v -24.22551 73.096008 14.202915
+v -48.081444 73.096008 8.228834
+v -24.22551 73.096008 10.190531
+v -24.22551 73.096008 8.228834
+
+vt 1 1 0
+vt 1 0 0
+vt 0 0 0
+vt 0 1 0
+vt 0 1 0
+vt 0 1 0
+vt 0 1 0
+vt 0 1 0
+vt 0 1 0
+vt 0 1 0
+vt 0 1 0
+vt 0 1 0
+vt 0 1 0
+vt 0 1 0
+vt 0 1 0
+vt 0 1 0
+vt 0 1 0
+vt 0 1 0
+vt 0 1 0
+vt 0 1 0
+vt 0 1 0
+vt 0 1 0
+vt 0 1 0
+vt 0 1 0
+vt 0 1 0
+vt 0 1 0
+vt 0 1 0
+vt 0 1 0
+vt 0 1 0
+vt 0 1 0
+vt 0 1 0
+vt 0 1 0
+vt 0 1 0
+vt 0 1 0
+vt 0 1 0
+vt 0 1 0
+vt 0 1 0
+vt 0 1 0
+vt 0 1 0
+vt 0 1 0
+vt 0 1 0
+vt 0 1 0
+vt 0 1 0
+vt 0 1 0
+vt 0 1 0
+vt 0 1 0
+vt 0 1 0
+vt 0 1 0
+vt 0 1 0
+vt 0 1 0
+vt 0 1 0
+vt 0 1 0
+vt 0 1 0
+vt 0 1 0
+vt 0 1 0
+vt 0 1 0
+vt 0 1 0
+vt 0 1 0
+vt 0 1 0
+vt 0 1 0
+vt 0 1 0
+vt 0 1 0
+vt 0 1 0
+vt 0 1 0
+vt 0 1 0
+vt 0 1 0
+vt 0 1 0
+vt 0 1 0
+vt 0 1 0
+vt 0 1 0
+vt 0 1 0
+vt 0 1 0
+vt 0 1 0
+vt 0 1 0
+vt 0 1 0
+vt 0 1 0
+vt 0 1 0
+vt 0 1 0
+vt 0 1 0
+vt 0 1 0
+vt 0 1 0
+vt 0 1 0
+vt 0 1 0
+vt 0 1 0
+vt 0 1 0
+vt 0 1 0
+vt 0 1 0
+vt 0 1 0
+vt 0 1 0
+vt 0 1 0
+vt 0 1 0
+vt 0 1 0
+vt 0 1 0
+vt 0 1 0
+vt 0 1 0
+vt 0 1 0
+vt 0 0 0
+vt 0 1 0
+vt 1 0 0
+vt 1 1 0
+vt 1 0 0
+vt 0.464092 0 0
+vt 1 0.338577 0
+vt 0.464092 0.089836 0
+vt 0 0.089836 0
+vt 0.673172 0.260867 0
+vt 0.673172 0.338577 0
+vt 0.437805 0.260867 0
+vt 0.090594 0.433475 0
+vt 0.437805 0.743877 0
+vt 0.368376 0.730715 0
+vt 0.090594 0.717428 0
+vt 0 0.717428 0
+vt 0 0.870475 0
+vt 0.142719 0.730715 0
+vt 0.142719 1 0
+vt 0 0.433475 0
+vt 0.95516 0.303363 0
+vt 0.95516 0.451276 0
+vt 1 0.268504 0
+vt 0 0 0
+vt 0 1 0
+vt 0.102105 0 0
+vt 0.102105 0.359666 0
+vt 0.168495 0.568011 0
+vt 1 1 0
+vt 0.168495 0.359666 0
+vt 0.800898 0.568011 0
+vt 0 0 0
+vt 0 1 0
+vt 1 0 0
+vt 0.061049 0.553417 0
+vt 0.227543 0.120115 0
+vt 0.061049 0 0
+vt 0.278006 0 0
+vt 0.278006 0.018688 0
+vt 0.822948 0.120115 0
+vt 1 0.018688 0
+vt 0.822948 0.999676 0
+vt 1 0.999676 0
+vt 1 0.554123 0
+vt 0 0.553417 0
+vt 0 1 0
+vt 0.227543 1 0
+vt 0 0 0
+vt 0 1 0
+vt 1 0 0
+vt 1 1 0
+vt 1 0 0
+vt 0 1 0
+vt 0 0 0
+vt 1 1 0
+vt 0 1 0
+vt 0 0 0
+vt 0 0.085047 0
+vt 1 0 0
+vt 0.674255 0.085047 0
+vt 0.674255 0.895163 0
+vt 0.316549 1 0
+vt 1 1 0
+vt 1 0 0
+vt 0 0 0
+vt 1 1 0
+vt 0 1 0
+vt 0 0 0
+vt 0 1 0
+vt 1 0 0
+vt 1 1 0
+vt 1 0 0
+vt 0 0 0
+vt 1 1 0
+vt 0 0.824293 0
+vt 0.337951 1 0
+vt 0 0 0
+vt 0 1 0
+vt 1 0 0
+vt 1 1 0
+vt 0 0 0
+vt 0 0 0
+vt 0 1 0
+vt 1 0 0
+vt 1 0 0
+vt 1 1 0
+vt 0 0 0
+vt 0.245856 0.084061 0
+vt 1 0 0
+vt 1 1 0
+vt 0.245856 0.701483 0
+vt 0.822603 1 0
+vt 0 0.084061 0
+vt 0 0.672123 0
+vt 0 1 0
+vt 1 0 0
+vt 1 1 0
+vt 0 0 0
+vt 0 1 0
+vt 1 0 0
+vt 1 1 0
+vt 1 0 0
+vt 0 0 0
+vt 0 0 0
+vt 0 0.663807 0
+vt 0 1 0
+vt 0.294465 0 0
+vt 0 1 0
+vt 1 1 0
+vt 1 1 0
+vt 0.685067 0 0
+vt 1 0 0
+vt 1 0.663807 0
+vt 0 0 0
+vt 0 1 0
+vt 1 0 0
+vt 1 1 0
+vt 0 1 0
+vt 1 1 0
+vt 0 0 0
+vt 0 1 0
+vt 1 0 0
+vt 1 0 0
+vt 0.929503 0 0
+vt 1 1 0
+vt 0.306924 0 0
+vt 0 0 0
+vt 0.847512 0.86395 0
+vt 0 1 0
+vt 0.005222 0.86395 0
+vt 0.005222 1 0
+vt 0 0 0
+vt 1 0 0
+vt 1 0.326814 0
+vt 0.447073 0.796616 0
+vt 1 1 0
+vt 0.25372 0.796616 0
+vt 0.355479 0.931005 0
+vt 0.355479 1 0
+vt 0.103827 0 0
+vt 0 0 0
+vt 0.103827 0.746303 0
+vt 0 0.931005 0
+vt 0 0 0
+vt 0 1 0
+vt 1 0 0
+vt 1 0.5 0
+vt 1 1 0
+vt 1 0 0
+vt 0 0 0
+vt 1 1 0
+vt 0.108075 0.687227 0
+vt 0 0.687227 0
+vt 1 0 0
+vt 0 0 0
+vt 1 0.529534 0
+vt 0 1 0
+vt 1 0 0
+vt 0.409219 1 0
+vt 0 0 0
+vt 0 1 0
+vt 1 0 0
+vt 1 1 0
+vt 0 1 0
+vt 1 1 0
+vt 0 0 0
+vt 1 0 0
+vt 0 1 0
+vt 1 1 0
+vt 0 0 0
+vt 0 1 0
+vt 0 1 0
+vt 1 1 0
+vt 1 0 0
+vt 1 0.871213 0
+vt 0.134547 0 0
+vt 0 0 0
+vt 1 1 0
+vt 0 1 0
+vt 0 1 0
+vt 0.923544 0.005455 0
+vt 0 0 0
+vt 1 0 0
+vt 0.923544 0.493806 0
+vt 0.923544 0.943266 0
+vt 0 0 0
+vt 0 1 0
+vt 1 0 0
+vt 0.719721 0 0
+vt 1 0.58897 0
+vt 0 0 0
+vt 0.25372 0.303041 0
+vt 0.25372 1 0
+vt 0.447073 1 0
+vt 0 0.303041 0
+vt 0 0 0
+vt 0 1 0
+vt 0 0 0
+vt 1 0 0
+vt 1 0 0
+vt 0 0 0
+vt 1 0.25169 0
+vt 0 1 0
+vt 1 0.547946 0
+vt 1 0.809727 0
+vt 0 0 0
+vt 0 1 0
+vt 1 0 0
+vt 0.343006 0.860704 0
+vt 0.240472 1 0
+vt 1 0.860704 0
+vt 1 0 0
+vt 0 0 0
+vt 1 0.306586 0
+vt 0 1 0
+vt 1 1 0
+vt 0 1 0
+vt 0 1 0
+vt 0 1 0
+vt 0 1 0
+vt 0 1 0
+vt 0 1 0
+vt 0 1 0
+vt 0 1 0
+vt 0 1 0
+vt 0 1 0
+vt 0 1 0
+vt 0 1 0
+vt 0 1 0
+vt 0 1 0
+vt 0 1 0
+vt 0 1 0
+vt 0 1 0
+vt 0 1 0
+vt 0 1 0
+vt 0 1 0
+vt 0.435233 1 0
+vt 1 0.832935 0
+vt 1 1 0
+vt 0.435233 0.713444 0
+vt 0 0.208833 0
+vt 0 0 0
+vt 1 0 0
+vt 1 0 0
+vt 1 1 0
+vt 0 0 0
+vt 0 0.25169 0
+vt 1 0 0
+vt 0 0.547946 0
+vt 0 0.809727 0
+vt 0 0.973496 0
+vt 0.41083 0.973496 0
+vt 0.506988 1 0
+vt 1 1 0
+vt 0 0 0
+vt 0.316743 0.487797 0
+vt 0 0.487797 0
+vt 1 0 0
+vt 1 1 0
+vt 1 1 0
+vt 0 0 0
+vt 1 0 0
+vt 0 1 0
+vt 1 0 0
+vt 0 1 0
+vt 0 0 0
+vt 1 1 0
+vt 0 1 0
+vt 1 1 0
+vt 0 0.970616 0
+vt 1 0 0
+vt 1 0 0
+vt 0 0 0
+vt 1 1 0
+vt 1 0 0
+vt 0 0 0
+vt 1 1 0
+vt 1 0 0
+vt 0 0 0
+vt 1 1 0
+vt 0 1 0
+vt 0 1 0
+vt 0 1 0
+vt 0 1 0
+vt 0 1 0
+vt 0 1 0
+vt 0 1 0
+vt 0 1 0
+vt 0 1 0
+vt 0 1 0
+vt 0 1 0
+vt 0 1 0
+vt 0 1 0
+vt 0 1 0
+vt 0 1 0
+vt 0 1 0
+vt 0 1 0
+vt 0 1 0
+vt 0 1 0
+vt 0 1 0
+vt 0 1 0
+vt 0 1 0
+vt 0 1 0
+vt 0 1 0
+vt 0 1 0
+vt 0 1 0
+vt 0 1 0
+vt 0 1 0
+vt 0 1 0
+vt 0 1 0
+vt 0 1 0
+vt 0 1 0
+vt 0 1 0
+vt 0 1 0
+vt 0 1 0
+vt 0 1 0
+vt 0 1 0
+vt 0 1 0
+vt 0 1 0
+vt 0 1 0
+vt 0 1 0
+vt 0 1 0
+vt 0 1 0
+vt 0 1 0
+vt 0 1 0
+vt 0 1 0
+vt 0 1 0
+vt 0 1 0
+vt 0 1 0
+vt 0 1 0
+vt 0 1 0
+vt 0 1 0
+vt 0 1 0
+vt 0 1 0
+vt 0 1 0
+vt 0 1 0
+vt 0 1 0
+vt 0 1 0
+vt 0 1 0
+vt 0 1 0
+vt 0 1 0
+vt 0 1 0
+vt 0 1 0
+vt 0 1 0
+vt 0 1 0
+vt 0 1 0
+vt 0 1 0
+vt 0 1 0
+vt 0 1 0
+vt 0 1 0
+vt 0 1 0
+vt 0 1 0
+vt 0 1 0
+vt 0 1 0
+vt 0 1 0
+vt 0 1 0
+vt 0 1 0
+vt 0 1 0
+vt 0 1 0
+vt 0 1 0
+vt 0 1 0
+vt 0 1 0
+vt 0 1 0
+vt 0 1 0
+vt 0 1 0
+vt 0 1 0
+vt 0 1 0
+vt 0 1 0
+vt 0 1 0
+vt 0 1 0
+vt 0 1 0
+vt 0 1 0
+vt 0 1 0
+vt 0 1 0
+vt 0 1 0
+vt 0 1 0
+vt 0 1 0
+vt 0 1 0
+vt 0 1 0
+vt 0 1 0
+vt 0 1 0
+vt 0 1 0
+vt 0 1 0
+vt 0 1 0
+vt 0 1 0
+vt 0 1 0
+vt 0 1 0
+vt 0 1 0
+vt 0 1 0
+vt 0 1 0
+vt 0 1 0
+vt 0 1 0
+vt 0 1 0
+vt 0 1 0
+vt 0 1 0
+vt 0 1 0
+vt 0 1 0
+vt 0 1 0
+vt 0 1 0
+vt 0 1 0
+vt 0 1 0
+vt 0 1 0
+vt 0 1 0
+vt 0 1 0
+vt 0 1 0
+vt 0 1 0
+vt 0 1 0
+vt 0 1 0
+vt 0 1 0
+vt 0 1 0
+vt 0 1 0
+vt 0 1 0
+vt 0 1 0
+vt 0 1 0
+vt 0 1 0
+vt 0 1 0
+vt 0 1 0
+vt 0 1 0
+vt 0 1 0
+vt 0 1 0
+vt 0 1 0
+vt 0 1 0
+vt 0 1 0
+vt 0 1 0
+vt 0 1 0
+vt 0 1 0
+vt 0 1 0
+vt 0 1 0
+vt 0 1 0
+vt 0 1 0
+vt 0 1 0
+vt 0 1 0
+vt 0 1 0
+vt 0 1 0
+vt 0 1 0
+vt 0 1 0
+vt 0 1 0
+vt 0 1 0
+vt 0 1 0
+vt 0 1 0
+vt 0 1 0
+vt 0 1 0
+vt 0 1 0
+vt 0 1 0
+vt 0 1 0
+vt 0 1 0
+vt 0 1 0
+vt 0 1 0
+vt 0 1 0
+vt 0 1 0
+vt 0 1 0
+vt 0 1 0
+vt 0 1 0
+vt 0 1 0
+vt 0 1 0
+vt 0 1 0
+vt 0 1 0
+vt 0 1 0
+vt 0 1 0
+vt 0 1 0
+vt 0 1 0
+vt 0 1 0
+vt 0 1 0
+vt 0 1 0
+vt 0 1 0
+vt 0 1 0
+vt 0 1 0
+vt 0 1 0
+vt 0 1 0
+vt 0 1 0
+vt 0 1 0
+vt 0 1 0
+vt 0 1 0
+vt 0 1 0
+vt 0 1 0
+vt 0 1 0
+vt 0 1 0
+vt 0 1 0
+vt 0 1 0
+vt 0 1 0
+vt 0 1 0
+vt 0 1 0
+vt 0 1 0
+vt 0 1 0
+vt 0 1 0
+vt 0 1 0
+vt 0 1 0
+vt 0 1 0
+vt 0 1 0
+vt 0 1 0
+vt 0 1 0
+vt 0 1 0
+vt 0 1 0
+vt 0 1 0
+vt 0 1 0
+vt 0 1 0
+vt 0 1 0
+vt 0 1 0
+vt 0 1 0
+vt 0 1 0
+vt 0 1 0
+vt 0 1 0
+vt 0 1 0
+vt 0 1 0
+vt 0 1 0
+vt 0 1 0
+vt 0 1 0
+vt 0 1 0
+vt 0 1 0
+vt 0 1 0
+vt 0 1 0
+vt 0 1 0
+vt 0 1 0
+vt 0 1 0
+vt 0 1 0
+vt 0 1 0
+vt 0 1 0
+vt 0 1 0
+vt 0 1 0
+vt 0 1 0
+vt 0 1 0
+vt 0 1 0
+vt 0 1 0
+vt 0 1 0
+vt 0 1 0
+vt 0 1 0
+vt 0 1 0
+vt 0 1 0
+vt 0 1 0
+vt 0 1 0
+vt 0 1 0
+vt 0 1 0
+vt 0 1 0
+vt 0 1 0
+vt 0 1 0
+vt 0 1 0
+vt 0 1 0
+vt 0 1 0
+vt 0 1 0
+vt 0 1 0
+vt 0 1 0
+vt 0 1 0
+vt 0 1 0
+vt 0 1 0
+vt 0 1 0
+vt 0 1 0
+vt 0 1 0
+vt 0 1 0
+vt 0 1 0
+vt 0 1 0
+vt 0 1 0
+vt 0 1 0
+vt 0 1 0
+vt 0 1 0
+vt 0 1 0
+vt 0 1 0
+vt 0 1 0
+vt 0 1 0
+vt 0 1 0
+vt 0 1 0
+vt 0 1 0
+vt 0 1 0
+vt 0 1 0
+vt 0 1 0
+vt 0 1 0
+vt 0 1 0
+vt 0 1 0
+vt 0 1 0
+vt 0 1 0
+vt 0 1 0
+vt 0 1 0
+vt 0 1 0
+vt 0 1 0
+vt 0 1 0
+vt 0 1 0
+vt 0 1 0
+vt 0 1 0
+vt 0 1 0
+vt 0 1 0
+vt 0 1 0
+vt 0 1 0
+vt 0 1 0
+vt 0 1 0
+vt 0 1 0
+vt 0 1 0
+vt 0 1 0
+vt 0 1 0
+vt 0 1 0
+vt 0 1 0
+vt 0 1 0
+vt 0 1 0
+vt 0 1 0
+vt 0 1 0
+vt 0 1 0
+vt 0 1 0
+vt 0 1 0
+vt 0 1 0
+vt 0 1 0
+vt 0 1 0
+vt 0 1 0
+vt 0 1 0
+vt 0 1 0
+vt 0 1 0
+vt 0 1 0
+vt 0 1 0
+vt 0 1 0
+vt 0 1 0
+vt 0 1 0
+vt 0 1 0
+
+f 876/1864 875/1863 874/1862 
+f 879/1867 878/1866 877/1865 
+f 878/1866 879/1867 880/1868 
+f 883/1871 882/1870 881/1869 
+f 882/1870 883/1871 884/1872 
+f 884/1872 883/1871 885/1873 
+f 888/1876 887/1875 886/1874 
+f 887/1875 888/1876 889/1877 
+f 889/1877 888/1876 890/1878 
+f 893/1881 892/1880 891/1879 
+f 892/1880 893/1881 894/1882 
+f 897/1885 896/1884 895/1883 
+f 896/1884 897/1885 898/1886 
+f 900/1888 891/1879 899/1887 
+f 891/1879 900/1888 893/1881 
+f 903/1891 902/1890 901/1889 
+f 902/1890 903/1891 904/1892 
+f 907/1895 906/1894 905/1893 
+f 906/1894 907/1895 908/1896 
+f 908/1896 907/1895 909/1897 
+f 912/1900 911/1899 910/1898 
+f 911/1899 912/1900 913/1901 
+f 913/1901 912/1900 914/1902 
+f 914/1902 912/1900 915/1903 
+f 918/1906 917/1905 916/1904 
+f 917/1905 918/1906 919/1907 
+f 922/1910 921/1909 920/1908 
+f 921/1909 922/1910 923/1911 
+f 923/1911 922/1910 924/1912 
+f 924/1912 922/1910 925/1913 
+f 925/1913 922/1910 926/1914 
+f 927/1915 894/1882 893/1881 
+f 894/1882 927/1915 928/1916 
+f 931/1919 930/1918 929/1917 
+f 930/1918 931/1919 932/1920 
+f 930/1918 932/1920 933/1921 
+f 933/1921 932/1920 934/1922 
+f 937/1925 936/1924 935/1923 
+f 936/1924 937/1925 938/1926 
+f 938/1926 937/1925 939/1927 
+f 940/1928 893/1881 900/1888 
+f 893/1881 940/1928 927/1915 
+f 943/1931 942/1930 941/1929 
+f 942/1930 945/1933 944/1932 
+f 945/1933 942/1930 943/1931 
+f 948/1936 947/1935 946/1934 
+f 947/1935 948/1936 949/1937 
+f 949/1937 948/1936 950/1938 
+f 953/1941 952/1940 951/1939 
+f 952/1940 953/1941 954/1942 
+f 957/1945 956/1944 955/1943 
+f 956/1944 957/1945 958/1946 
+f 961/1949 960/1948 959/1947 
+f 960/1948 961/1949 962/1950 
+f 965/1953 964/1952 963/1951 
+f 964/1952 965/1953 966/1954 
+f 969/1957 968/1956 967/1955 
+f 972/1960 971/1959 970/1958 
+f 971/1959 972/1960 973/1961 
+f 976/1964 975/1963 974/1962 
+f 975/1963 976/1964 977/1965 
+f 977/1965 976/1964 978/1966 
+f 978/1966 976/1964 979/1967 
+f 979/1967 976/1964 980/1968 
+f 983/1971 982/1970 981/1969 
+f 982/1970 983/1971 984/1972 
+f 982/1970 984/1972 985/1973 
+f 985/1973 984/1972 986/1974 
+f 986/1974 988/1976 987/1975 
+f 988/1976 986/1974 984/1972 
+f 987/1975 988/1976 989/1977 
+f 978/1966 981/1969 990/1978 
+f 981/1969 978/1966 979/1967 
+f 990/1978 981/1969 982/1970 
+f 993/1981 992/1980 991/1979 
+f 996/1984 995/1983 994/1982 
+f 995/1983 996/1984 997/1985 
+f 995/1983 997/1985 998/1986 
+f 995/1983 998/1986 999/1987 
+f 998/1986 997/1985 1000/1988 
+f 999/1987 998/1986 1001/1989 
+f 999/1987 1001/1989 992/1980 
+f 999/1987 992/1980 993/1981 
+f 1004/1992 1003/1991 1002/1990 
+f 1007/1995 1006/1994 1005/1993 
+f 1006/1994 1007/1995 1008/1996 
+f 1006/1994 1008/1996 1009/1997 
+f 1006/1994 1009/1997 1010/1998 
+f 1010/1998 1009/1997 1011/1999 
+f 1010/1998 1011/1999 1012/2000 
+f 1012/2000 1011/1999 1013/2001 
+f 1013/2001 1011/1999 1014/2002 
+f 1005/1993 1016/2004 1015/2003 
+f 1016/2004 1005/1993 1017/2005 
+f 1017/2005 1005/1993 1006/1994 
+f 1020/2008 1019/2007 1018/2006 
+f 1023/2013 1022/2012 1021/2010 
+f 1022/2012 1023/2013 1024/2014 
+f 1027/2017 1026/2016 1025/2015 
+f 1026/2016 1027/2017 1028/2018 
+f 1028/2018 1027/2017 1029/2019 
+f 1029/2019 1031/2021 1030/2020 
+f 1031/2021 1029/2019 1027/2017 
+f 1034/2024 1033/2023 1032/2022 
+f 1033/2023 1034/2024 1035/2025 
+f 1038/2028 1037/2027 1036/2026 
+f 1037/2027 1038/2028 1039/2029 
+f 1042/2032 1041/2031 1040/2030 
+f 1041/2031 1042/2032 1043/2033 
+f 1043/2033 1042/2032 1044/2034 
+f 1047/2037 1046/2036 1045/2035 
+f 1046/2036 1047/2037 1048/2038 
+f 1051/2042 1050/2041 1049/2039 
+f 1050/2041 1051/2042 1052/2044 
+f 1055/2047 1054/2046 1053/2045 
+f 1054/2046 1055/2047 1056/2048 
+f 1054/2046 1056/2048 1057/2049 
+f 1057/2049 1056/2048 1058/2050 
+f 1059/2051 1053/2045 1054/2046 
+f 1062/2054 1061/2053 1060/2052 
+f 1061/2053 1062/2054 1063/2055 
+f 1066/2058 1065/2057 1064/2056 
+f 1065/2057 1066/2058 1067/2059 
+f 1021/2009 1069/2061 1068/2060 
+f 1069/2061 1021/2009 1022/2011 
+f 1072/2065 1071/2063 1070/2062 
+f 1071/2063 1072/2065 1073/2066 
+f 1073/2066 1072/2065 1074/2067 
+f 1074/2067 1072/2065 1075/2069 
+f 1074/2067 1075/2069 1076/2070 
+f 1074/2067 1076/2070 1077/2071 
+f 1080/2074 1079/2073 1078/2072 
+f 1079/2073 1080/2074 1081/2075 
+f 1050/2040 1083/2077 1082/2076 
+f 1083/2077 1050/2040 1052/2043 
+f 1086/2080 1085/2079 1084/2078 
+f 1089/2083 1088/2082 1087/2081 
+f 1088/2082 1089/2083 1090/2084 
+f 1090/2084 1089/2083 1091/2085 
+f 1091/2085 1089/2083 1092/2086 
+f 1091/2085 1094/2088 1093/2087 
+f 1094/2088 1091/2085 1092/2086 
+f 1093/2087 1094/2088 1095/2089 
+f 1097/2091 1072/2064 1096/2090 
+f 1072/2064 1097/2091 1075/2068 
+f 1100/2094 1099/2093 1098/2092 
+f 1099/2093 1100/2094 1101/2095 
+f 1101/2095 1100/2094 1102/2096 
+f 1102/2096 1100/2094 1103/2097 
+f 1106/2100 1105/2099 1104/2098 
+f 1105/2099 1106/2100 1107/2101 
+f 1107/2101 1106/2100 1101/2095 
+f 1107/2101 1101/2095 1102/2096 
+f 1110/2104 1109/2103 1108/2102 
+f 1109/2103 1110/2104 1111/2105 
+f 1109/2103 1111/2105 1112/2106 
+f 1115/2109 1114/2108 1113/2107 
+f 1114/2108 1115/2109 1116/2110 
+f 1117/2111 1114/2108 1116/2110 
+f 1120/2116 1119/2115 1118/2113 
+f 1119/2115 1120/2116 1121/2117 
+f 1124/2120 1123/2119 1122/2118 
+f 1123/2119 1124/2120 1125/2121 
+f 1128/2124 1127/2123 1126/2122 
+f 1127/2123 1128/2124 1129/2125 
+f 1132/2132 1131/2129 1130/2128 
+f 1131/2129 1132/2132 1133/2133 
+f 1136/2136 1135/2135 1134/2134 
+f 1135/2135 1136/2136 1137/2137 
+f 1140/2140 1139/2139 1138/2138 
+f 1139/2139 1140/2140 1141/2141 
+f 1138/2138 1139/2139 1142/2142 
+f 1143/2143 1138/2138 1142/2142 
+f 1118/2112 1145/2145 1144/2144 
+f 1145/2145 1118/2112 1119/2114 
+f 1148/2148 1147/2147 1146/2146 
+f 1147/2147 1148/2148 1149/2149 
+f 1149/2149 1148/2148 1150/2150 
+f 1150/2150 1148/2148 1151/2151 
+f 1151/2151 1148/2148 1152/2152 
+f 1153/2153 1149/2149 1150/2150 
+f 1156/2157 1155/2155 1154/2154 
+f 1155/2155 1156/2157 1130/2127 
+f 1157/2158 1130/2126 1156/2156 
+f 1130/2126 1157/2158 1132/2131 
+f 1132/2131 1157/2158 1158/2160 
+f 1132/2131 1158/2160 1159/2162 
+f 1132/2131 1159/2162 1160/2163 
+f 1163/2166 1162/2165 1161/2164 
+f 1132/2130 1163/2166 1164/2167 
+f 1132/2130 1164/2167 1165/2168 
+f 1164/2167 1163/2166 1166/2169 
+f 1169/2172 1168/2171 1167/2170 
+f 1168/2171 1169/2172 1170/2173 
+f 1170/2173 1169/2172 1171/2174 
+f 1174/2177 1173/2176 1172/2175 
+f 1173/2176 1174/2177 1175/2178 
+f 1175/2178 1174/2177 1176/2179 
+f 1176/2179 1174/2177 1177/2180 
+f 1177/2180 1174/2177 1178/2181 
+f 1181/2184 1180/2183 1179/2182 
+f 1180/2183 1181/2184 1182/2185 
+f 1182/2185 1181/2184 1183/2186 
+f 1186/2189 1185/2188 1184/2187 
+f 1185/2188 1186/2189 1187/2190 
+f 1190/2193 1189/2192 1188/2191 
+f 1189/2192 1190/2193 1191/2194 
+f 1194/2197 1193/2196 1192/2195 
+f 1192/2195 1193/2196 1195/2198 
+f 1195/2198 1193/2196 1196/2199 
+f 1196/2199 1193/2196 1197/2200 
+f 1198/2201 1197/2200 1193/2196 
+f 1199/2202 1159/2161 1158/2159 
+f 1159/2161 1199/2202 1200/2203 
+f 1203/2206 1202/2205 1201/2204 
+f 1202/2205 1203/2206 1204/2207 
+f 1204/2207 1203/2206 1205/2208 
+f 1205/2208 1203/2206 1206/2209 
+f 1206/2209 1203/2206 1207/2210 
+f 1207/2210 1203/2206 1208/2211 
+f 1208/2211 1203/2206 1209/2212 
+f 1212/2215 1211/2214 1210/2213 
+f 1210/2213 1211/2214 1213/2216 
+f 1214/2217 1213/2216 1211/2214 
+f 1217/2220 1216/2219 1215/2218 
+f 1218/2221 1215/2218 1216/2219 
+f 1221/2224 1220/2223 1219/2222 
+f 1222/2225 1219/2222 1220/2223 
+f 1225/2228 1224/2227 1223/2226 
+f 1224/2227 1225/2228 1226/2229 
+f 1229/2232 1228/2231 1227/2230 
+f 1232/2235 1231/2234 1230/2233 
+f 1235/2238 1234/2237 1233/2236 
+f 1238/2241 1237/2240 1236/2239 
+f 1237/2240 1238/2241 1239/2242 
+f 1242/2245 1241/2244 1240/2243 
+f 1241/2244 1242/2245 1243/2246 
+f 1246/2249 1245/2248 1244/2247 
+f 1245/2248 1246/2249 1247/2250 
+f 1250/2253 1249/2252 1248/2251 
+f 1249/2252 1250/2253 1251/2254 
+f 1254/2257 1253/2256 1252/2255 
+f 1253/2256 1254/2257 1255/2258 
+f 1257/2260 1250/2253 1256/2259 
+f 1250/2253 1257/2260 1258/2261 
+f 1250/2253 1258/2261 1251/2254 
+f 1258/2261 1257/2260 1259/2262 
+f 1259/2262 1257/2260 1252/2255 
+f 1259/2262 1252/2255 1260/2263 
+f 1260/2263 1252/2255 1253/2256 
+f 1251/2254 1262/2265 1261/2264 
+f 1262/2265 1251/2254 1258/2261 
+f 1261/2264 1262/2265 1263/2266 
+f 1266/2269 1265/2268 1264/2267 
+f 1265/2268 1266/2269 1267/2270 
+f 1270/2273 1269/2272 1268/2271 
+f 1269/2272 1270/2273 1271/2274 
+f 1271/2274 1270/2273 1272/2275 
+f 1275/2278 1274/2277 1273/2276 
+f 1274/2277 1275/2278 1276/2279 
+f 1274/2277 1276/2279 1277/2280 
+f 1277/2280 1276/2279 1278/2281 
+f 1274/2277 1279/2282 1273/2276 
+f 1279/2282 1274/2277 1280/2283 
+f 1283/2286 1282/2285 1281/2284 
+f 1282/2285 1283/2286 1284/2287 
+f 1284/2287 1283/2286 1285/2288 
+f 1285/2288 1283/2286 1286/2289 
+f 1289/2292 1288/2291 1287/2290 
+f 1292/2295 1291/2294 1290/2293 
+f 1291/2294 1292/2295 1244/2247 
+f 1244/2247 1292/2295 1293/2296 
+f 1244/2247 1293/2296 1294/2297 
+f 1244/2247 1294/2297 1246/2249 
+f 1246/2249 1294/2297 1295/2298 
+f 1246/2249 1295/2298 1288/2291 
+f 1246/2249 1288/2291 1289/2292 
+f 1246/2249 1289/2292 1296/2299 
+f 1297/2300 1278/2281 1276/2279 
+f 1278/2281 1297/2300 1298/2301 
+f 1301/2304 1300/2303 1299/2302 
+f 1300/2303 1301/2304 1302/2305 
+f 1305/2308 1304/2307 1303/2306 
+f 1304/2307 1305/2308 1306/2309 
+f 1309/2312 1308/2311 1307/2310 
+f 1308/2311 1309/2312 1310/2313 
+f 1313/2316 1312/2315 1311/2314 
+f 1312/2315 1313/2316 1314/2317 
+f 1317/2320 1316/2319 1315/2318 
+f 1316/2319 1317/2320 1318/2321 
+f 1321/2324 1320/2323 1319/2322 
+f 1320/2323 1321/2324 1322/2325 
+f 1325/2328 1324/2327 1323/2326 
+f 1324/2327 1325/2328 1326/2329 
+f 1329/2332 1328/2331 1327/2330 
+f 1328/2331 1329/2332 1330/2333 
+f 1333/2336 1332/2335 1331/2334 
+f 1332/2335 1333/2336 1334/2337 
+f 1337/2340 1336/2339 1335/2338 
+f 1336/2339 1337/2340 1338/2341 
+f 1338/2341 1337/2340 1339/2342 
+f 1336/2339 1341/2344 1340/2343 
+f 1341/2344 1336/2339 1342/2345 
+f 1342/2345 1336/2339 1338/2341 
+f 1344/2347 1264/2267 1343/2346 
+f 1264/2267 1344/2347 1266/2269 
+f 1347/2350 1346/2349 1345/2348 
+f 1346/2349 1347/2350 1348/2351 
+f 1349/2352 1348/2351 1347/2350 
+f 1348/2351 1349/2352 1350/2353 
+f 1268/2271 1352/2355 1351/2354 
+f 1352/2355 1268/2271 1269/2272 
+f 1355/2358 1354/2357 1353/2356 
+f 1354/2357 1355/2358 1356/2359 
+f 1356/2359 1355/2358 1357/2360 
+f 1357/2360 1355/2358 1358/2361 
+f 1357/2360 1358/2361 1359/2362 
+f 1345/2348 1361/2364 1360/2363 
+f 1361/2364 1345/2348 1346/2349 
+f 1364/2367 1363/2366 1362/2365 
+f 1363/2366 1364/2367 1365/2368 
+f 1365/2368 1364/2367 1366/2369 
+f 1369/2372 1368/2371 1367/2370 
+f 1368/2371 1369/2372 1370/2373 
+f 1370/2373 1369/2372 1371/2374 
+f 1374/2377 1373/2376 1372/2375 
+f 1373/2376 1374/2377 1375/2378 
+f 1378/2381 1377/2380 1376/2379 
+f 1381/2384 1380/2383 1379/2382 
+f 1380/2383 1381/2384 1382/2385 
+f 1380/2383 1382/2385 1383/2386 
+f 1383/2386 1382/2385 1377/2380 
+f 1383/2386 1377/2380 1378/2381 
+f 1383/2386 1378/2381 1384/2387 
+f 1387/2390 1386/2389 1385/2388 
+f 1390/2393 1389/2392 1388/2391 
+f 1389/2392 1390/2393 1391/2394 
+f 1394/2397 1393/2396 1392/2395 
+f 1393/2396 1394/2397 1395/2398 
+f 1398/2401 1397/2400 1396/2399 
+f 1397/2400 1398/2401 1399/2402 
+f 1402/2405 1401/2404 1400/2403 
+f 1401/2404 1402/2405 1403/2406 
+f 1405/2408 1404/2407 1357/2360 
+f 1404/2407 1405/2408 1406/2409 
+f 1406/2409 1405/2408 1407/2410 
+f 1409/2412 1347/2350 1408/2411 
+f 1347/2350 1409/2412 1349/2352 
+f 1412/2415 1411/2414 1410/2413 
+f 1411/2414 1412/2415 1413/2416 
+f 1413/2416 1412/2415 1414/2417 
+f 1413/2416 1414/2417 1415/2418 
+f 1357/2360 1416/2419 1356/2359 
+f 1416/2419 1357/2360 1404/2407 
+f 1419/2422 1418/2421 1417/2420 
+f 1418/2421 1419/2422 1420/2423 
+f 1420/2423 1419/2422 1421/2424 
+f 1424/2427 1423/2426 1422/2425 
+f 1423/2426 1424/2427 1425/2428 
+f 1425/2428 1424/2427 1426/2429 
+f 1426/2429 1424/2427 1427/2430 
+f 1427/2430 1424/2427 1428/2431 
+f 1425/2428 1430/2433 1429/2432 
+f 1430/2433 1425/2428 1426/2429 
+f 1429/2432 1430/2433 1431/2434 
+f 1429/2432 1431/2434 1432/2435 
+f 1435/2438 1434/2437 1433/2436 
+f 1434/2437 1435/2438 1436/2439 
+f 1439/2442 1438/2441 1437/2440 
+f 1438/2441 1439/2442 1440/2443 
+f 1443/2446 1442/2445 1441/2444 
+f 1442/2445 1443/2446 1444/2447 
+f 1447/2450 1446/2449 1445/2448 
+f 1450/2453 1449/2452 1448/2451 
+f 1449/2452 1450/2453 1451/2454 
+f 1451/2454 1450/2453 1446/2449 
+f 1451/2454 1446/2449 1447/2450 
+f 1453/2456 1400/2403 1452/2455 
+f 1400/2403 1453/2456 1402/2405 
+f 1456/2459 1455/2458 1454/2457 
+f 1455/2458 1456/2459 1457/2460 
+f 1460/2463 1459/2462 1458/2461 
+f 1459/2462 1460/2463 1461/2464 
+f 1461/2464 1460/2463 1462/2465 
+f 1465/2468 1464/2467 1463/2466 
+f 1464/2467 1465/2468 1466/2469 
+f 1466/2469 1465/2468 1467/2470 
+f 1469/2472 1454/2457 1468/2471 
+f 1454/2457 1469/2472 1456/2459 
+f 1456/2459 1469/2472 1470/2473 
+f 1472/2475 1468/2471 1471/2474 
+f 1468/2471 1472/2475 1469/2472 
+f 1469/2472 1472/2475 1470/2473 
+f 1475/2478 1474/2477 1473/2476 
+f 1474/2477 1475/2478 1476/2479 
+f 1476/2479 1475/2478 1477/2480 
+f 1476/2479 1477/2480 1478/2481 
+f 1481/2484 1480/2483 1479/2482 
+f 1480/2483 1481/2484 1482/2485 
+f 1482/2485 1481/2484 1483/2486 
+f 1483/2486 1481/2484 1484/2487 
+f 1487/2490 1486/2489 1485/2488 
+f 1486/2489 1487/2490 1488/2491 
+f 1488/2491 1487/2490 1489/2492 
+f 1492/2495 1491/2494 1490/2493 
+f 1491/2494 1492/2495 1493/2496 
+f 1496/2499 1495/2498 1494/2497 
+f 1495/2498 1498/2501 1497/2500 
+f 1498/2501 1495/2498 1499/2502 
+f 1499/2502 1495/2498 1496/2499 
+f 1499/2502 1496/2499 1500/2503 
+f 1499/2502 1500/2503 1501/2504 
+f 1504/2507 1503/2506 1502/2505 
+f 1503/2506 1506/2509 1505/2508 
+f 1506/2509 1503/2506 1507/2510 
+f 1507/2510 1503/2506 1504/2507 
+f 1507/2510 1504/2507 1508/2511 
+f 1507/2510 1508/2511 1509/2512 
+f 1509/2512 1508/2511 1510/2513 
+f 1513/2516 1512/2515 1511/2514 
+f 1516/2519 1515/2518 1514/2517 
+f 1515/2518 1516/2519 1517/2520 
+f 1515/2518 1517/2520 1518/2521 
+f 1518/2521 1517/2520 1519/2522 
+f 1522/2525 1521/2524 1520/2523 
+f 1521/2524 1522/2525 1523/2526 
+f 1526/2529 1525/2528 1524/2527 
+f 1525/2528 1526/2529 1527/2530 
+f 1530/2533 1529/2532 1528/2531 
+f 1529/2532 1530/2533 1531/2534 
+f 1531/2534 1530/2533 1532/2535 
+f 1531/2534 1532/2535 1533/2536 
+f 1536/2539 1535/2538 1534/2537 
+f 1535/2538 1536/2539 1537/2540 
+f 1537/2540 1536/2539 1538/2541 
+f 1541/2544 1540/2543 1539/2542 
+f 1540/2543 1541/2544 1542/2545 
+f 1493/2496 1543/2546 1491/2494 
+f 1543/2546 1493/2496 1544/2547 
+f 1547/2550 1546/2549 1545/2548 
+f 1546/2549 1547/2550 1548/2551 
+f 1551/2554 1550/2553 1549/2552 
+f 1550/2553 1551/2554 1552/2555 
+f 1555/2558 1554/2557 1553/2556 
+f 1554/2557 1555/2558 1556/2559 
+f 1559/2562 1558/2561 1557/2560 
+f 1562/2565 1561/2564 1560/2563 
+f 1561/2564 1562/2565 1563/2566 
+f 1563/2566 1562/2565 1564/2567 
+
+g chest
+usemtl brown_light
+v -3.452477 163.773315 9.838644
+v -3.452477 174.631821 9.838644
+v -69.365532 163.773315 9.838646
+v -69.365532 174.631821 9.838646
+v -3.452477 133.253601 -4.814985
+v -3.452477 133.253601 38.996223
+v -3.452477 166.591125 -4.814985
+v -3.452477 158.010056 7.362144
+v -3.452477 166.591125 7.362144
+v -3.452477 163.773315 9.838644
+v -3.452477 163.773315 18.792152
+v -3.452477 174.631821 9.838644
+v -3.452477 174.261963 -0.814482
+v -3.452477 174.261963 7.362144
+v -3.452477 192.118134 -0.814482
+v -3.452477 180.679581 7.362144
+v -3.452477 180.679581 18.792152
+v -3.452477 174.631821 18.792152
+v -3.452477 174.973129 33.281219
+v -3.452477 192.118134 33.281219
+v -3.452477 174.973129 38.996223
+v -3.452477 158.010056 18.792152
+v -69.365532 163.773315 18.792156
+v -3.452477 163.773315 18.792152
+v -69.365532 163.773315 9.838646
+v -3.452477 163.773315 9.838644
+v -69.365532 133.253601 38.996231
+v -69.365532 133.253601 -4.814981
+v -69.365532 174.973129 38.996231
+v -69.365532 158.010056 18.792156
+v -69.365532 163.773315 18.792156
+v -69.365532 163.773315 9.838646
+v -69.365532 174.631821 18.792156
+v -69.365532 174.973129 33.281223
+v -69.365532 180.679581 18.792156
+v -69.365532 192.118134 33.281223
+v -69.365532 180.679581 7.362147
+v -69.365532 174.261963 7.362147
+v -69.365532 174.261963 -0.814478
+v -69.365532 192.118134 -0.814478
+v -69.365532 174.631821 9.838646
+v -69.365532 166.591125 -4.814981
+v -69.365532 158.010056 7.362147
+v -69.365532 166.591125 7.362147
+v -3.452477 174.631821 18.792152
+v -69.365532 174.631821 18.792156
+v -3.452477 174.631821 9.838644
+v -69.365532 174.631821 9.838646
+v -3.452477 174.631821 18.792152
+v -3.452477 180.679581 18.792152
+v -69.365532 174.631821 18.792156
+v -69.365532 180.679581 18.792156
+v -69.365532 180.679581 18.792156
+v -3.452477 180.679581 18.792152
+v -69.365532 180.679581 7.362147
+v -3.452477 180.679581 7.362144
+v -3.452477 180.679581 7.362144
+v -3.452477 174.261963 7.362144
+v -69.365532 180.679581 7.362147
+v -69.365532 174.261963 7.362147
+v -69.365532 174.261963 7.362147
+v -3.452477 174.261963 7.362144
+v -69.365532 174.261963 -0.814478
+v -3.452477 174.261963 -0.814482
+v -3.452477 174.261963 -0.814482
+v -3.452477 192.118134 -0.814482
+v -69.365532 174.261963 -0.814478
+v -69.365532 192.118134 -0.814478
+v -3.452477 192.118134 33.281219
+v -69.365532 192.118134 33.281223
+v -3.452477 192.118134 -0.814482
+v -69.365532 192.118134 -0.814478
+v -3.452477 192.118134 33.281219
+v -3.452477 174.973129 33.281219
+v -69.365532 192.118134 33.281223
+v -69.365532 174.973129 33.281223
+v -3.452477 174.973129 38.996223
+v -69.365532 174.973129 38.996231
+v -3.452477 174.973129 33.281219
+v -69.365532 174.973129 33.281223
+v -3.452477 174.973129 38.996223
+v -3.452477 133.253601 38.996223
+v -69.365532 174.973129 38.996231
+v -69.365532 133.253601 38.996231
+v -69.365532 133.253601 38.996231
+v -3.452477 133.253601 38.996223
+v -69.365532 133.253601 -4.814981
+v -3.452477 133.253601 -4.814985
+v -3.452477 133.253601 -4.814985
+v -3.452477 166.591125 -4.814985
+v -69.365532 133.253601 -4.814981
+v -69.365532 166.591125 -4.814981
+v -3.452477 166.591125 7.362144
+v -69.365532 166.591125 7.362147
+v -3.452477 166.591125 -4.814985
+v -69.365532 166.591125 -4.814981
+v -3.452477 166.591125 7.362144
+v -3.452477 158.010056 7.362144
+v -69.365532 166.591125 7.362147
+v -69.365532 158.010056 7.362147
+v -3.452477 158.010056 18.792152
+v -69.365532 158.010056 18.792156
+v -3.452477 158.010056 7.362144
+v -69.365532 158.010056 7.362147
+v -3.452477 158.010056 18.792152
+v -3.452477 163.773315 18.792152
+v -69.365532 158.010056 18.792156
+v -69.365532 163.773315 18.792156
+
+vt 0.836835 0 0
+vt 0.836835 0.12766 0
+vt 0.836835 1 0
+vt 0.836835 0.87234 0
+vt 1.148169 0.267045 0
+vt 0.351831 0.267045 0
+vt 1.351831 0.267045 0
+vt 0.971921 0.189032 0
+vt 0.351831 0 0
+vt 0.971921 0 0
+vt 1.351831 0 0
+vt 0.971921 0 0
+vt 0.836835 0 0
+vt 0.727482 0 0
+vt 0.581358 0 0
+vt 0.836835 0 0
+vt 0.836835 0.12766 0
+vt 0.908657 0.182783 0
+vt 0.861232 0.136926 0
+vt 0.836984 0.257055 0
+vt 0.828884 0.176815 0
+vt 0.734995 0.159673 0
+vt 0.727482 0.111719 0
+vt 0.60332 0.175907 0
+vt 0.669958 0.253037 0
+vt 0.581358 0.207285 0
+vt 0.581358 0 0
+vt 0.351831 0 0
+vt 0 1 0
+vt 0 0 0
+vt 0 1 0
+vt 0 0 0
+vt 0.351831 0.732955 0
+vt 0.148169 0.732955 0
+vt 1.148169 0.732955 0
+vt 0.581358 0.792715 0
+vt 0.148169 1 0
+vt 0.581358 1 0
+vt 0.581358 1 0
+vt 0.836835 1 0
+vt 0.581358 1 0
+vt 0.727482 0.888281 0
+vt 0.60332 0.824093 0
+vt 0.734995 0.840327 0
+vt 0.669958 0.746963 0
+vt 0.828884 0.823185 0
+vt 0.861232 0.863074 0
+vt 0.908657 0.817217 0
+vt 0.836984 0.742945 0
+vt 0.836835 0.87234 0
+vt 0.971921 0.810968 0
+vt 0.971921 1 0
+vt 0.148169 1 0
+vt 1.148169 1 0
+vt 0.971921 1 0
+vt 0.727482 0.111719 0
+vt 0.727482 0.888281 0
+vt 0.836835 0.12766 0
+vt 0.836835 0.87234 0
+vt 0.727482 0.111719 0
+vt 0.734995 0.159673 0
+vt 0.727482 0.888281 0
+vt 0.734995 0.840327 0
+vt 0.734995 0.840327 0
+vt 0.734995 0.159673 0
+vt 0.828884 0.823185 0
+vt 0.828884 0.176815 0
+vt 0.828884 0.176815 0
+vt 0.861232 0.136926 0
+vt 0.828884 0.823185 0
+vt 0.861232 0.863074 0
+vt 0.861232 0.863074 0
+vt 0.861232 0.136926 0
+vt 0.908657 0.817217 0
+vt 0.908657 0.182783 0
+vt 0.908657 0.182783 0
+vt 0.836984 0.257055 0
+vt 0.908657 0.817217 0
+vt 0.836984 0.742945 0
+vt 0.669958 0.253037 0
+vt 0.669958 0.746963 0
+vt 0.836984 0.257055 0
+vt 0.836984 0.742945 0
+vt 0.669958 0.253037 0
+vt 0.60332 0.175907 0
+vt 0.669958 0.746963 0
+vt 0.60332 0.824093 0
+vt 0.581358 0.207285 0
+vt 0.581358 0.792715 0
+vt 0.60332 0.175907 0
+vt 0.60332 0.824093 0
+vt 0.581358 0.207285 0
+vt 0.351831 0.267045 0
+vt 0.581358 0.792715 0
+vt 0.351831 0.732955 0
+vt 0.351831 0.732955 0
+vt 0.351831 0.267045 0
+vt 0.148169 0.732955 0
+vt 0.148169 0.267045 0
+vt 1.148169 0.267045 0
+vt 0.971921 0.189032 0
+vt 1.148169 0.732955 0
+vt 0.971921 0.810968 0
+vt 0.971921 0 0
+vt 0.971921 1 0
+vt 0.971921 0.189032 0
+vt 0.971921 0.810968 0
+vt 0 0 0
+vt 0 0 0
+vt 0 1 0
+vt 0 1 0
+vt 0 0 0
+vt 0 1 0
+vt 0 0 0
+vt 0 1 0
+vt 0 0 0
+vt 0 0 0
+vt 0 1 0
+vt 0 1 0
+
+f 1567/2570 1566/2569 1565/2568 
+f 1566/2569 1567/2570 1568/2571 
+f 1571/2575 1570/2574 1569/2572 
+f 1570/2574 1571/2575 1572/2578 
+f 1572/2577 1571/2575 1573/2579 
+f 1576/2584 1575/2583 1574/2580 
+f 1579/2587 1578/2586 1577/2585 
+f 1578/2586 1579/2587 1580/2588 
+f 1580/2588 1579/2587 1581/2589 
+f 1581/2589 1583/2591 1582/2590 
+f 1583/2591 1581/2589 1584/2592 
+f 1584/2592 1581/2589 1579/2587 
+f 1570/2573 1586/2595 1585/2593 
+f 1586/2595 1570/2573 1572/2576 
+f 1585/2593 1586/2594 1575/2582 
+f 1585/2593 1575/2582 1582/2590 
+f 1582/2590 1575/2581 1576/2584 
+f 1585/2593 1582/2590 1583/2591 
+f 1589/2598 1588/2597 1587/2596 
+f 1588/2597 1589/2598 1590/2599 
+f 1593/2603 1592/2601 1591/2600 
+f 1592/2601 1593/2603 1594/2604 
+f 1594/2605 1593/2603 1595/2606 
+f 1595/2606 1593/2603 1596/2608 
+f 1596/2608 1593/2603 1597/2609 
+f 1597/2609 1593/2603 1598/2610 
+f 1597/2609 1598/2610 1599/2611 
+f 1599/2611 1598/2610 1600/2612 
+f 1599/2611 1600/2612 1601/2613 
+f 1601/2613 1603/2615 1602/2614 
+f 1603/2615 1601/2613 1604/2616 
+f 1604/2616 1601/2613 1600/2612 
+f 1605/2617 1596/2607 1597/2609 
+f 1592/2602 1607/2621 1606/2618 
+f 1607/2620 1592/2601 1594/2604 
+f 1606/2618 1607/2619 1608/2622 
+f 1611/2625 1610/2624 1609/2623 
+f 1610/2624 1611/2625 1612/2626 
+f 1615/2629 1614/2628 1613/2627 
+f 1614/2628 1615/2629 1616/2630 
+f 1619/2633 1618/2632 1617/2631 
+f 1618/2632 1619/2633 1620/2634 
+f 1623/2637 1622/2636 1621/2635 
+f 1622/2636 1623/2637 1624/2638 
+f 1627/2641 1626/2640 1625/2639 
+f 1626/2640 1627/2641 1628/2642 
+f 1631/2645 1630/2644 1629/2643 
+f 1630/2644 1631/2645 1632/2646 
+f 1635/2649 1634/2648 1633/2647 
+f 1634/2648 1635/2649 1636/2650 
+f 1639/2653 1638/2652 1637/2651 
+f 1638/2652 1639/2653 1640/2654 
+f 1643/2657 1642/2656 1641/2655 
+f 1642/2656 1643/2657 1644/2658 
+f 1647/2661 1646/2660 1645/2659 
+f 1646/2660 1647/2661 1648/2662 
+f 1651/2665 1650/2664 1649/2663 
+f 1650/2664 1651/2665 1652/2666 
+f 1655/2669 1654/2668 1653/2667 
+f 1654/2668 1655/2669 1656/2670 
+f 1659/2673 1658/2672 1657/2671 
+f 1658/2672 1659/2673 1660/2674 
+f 1663/2677 1662/2676 1661/2675 
+f 1662/2676 1663/2677 1664/2678 
+f 1667/2681 1666/2680 1665/2679 
+f 1666/2680 1667/2681 1668/2682 
+f 1671/2685 1670/2684 1669/2683 
+f 1670/2684 1671/2685 1672/2686 
+
+g head
+usemtl brown_light
+v -10.347265 183.272888 -5.568148
+v -10.347261 183.272888 53.867905
+v -10.347265 209.379135 -5.568148
+v -10.347263 204.608917 42.628395
+v -10.347263 228.040436 42.628395
+v -10.347263 228.040436 12.148367
+v -10.347261 204.608917 53.867905
+v -10.347265 209.379135 -5.568148
+v -29.070341 193.037903 -5.568146
+v -10.347265 183.272888 -5.568148
+v -64.258812 183.272888 -5.568144
+v -28.914089 209.379135 -5.568146
+v -46.498764 193.037903 -5.568146
+v -46.498764 209.379135 -5.568146
+v -64.258812 209.379135 -5.568144
+v -29.070341 209.379135 -5.568146
+v -10.347265 209.379135 -5.568148
+v -10.347263 228.040436 12.148367
+v -28.914089 209.379135 -5.568146
+v -28.914089 228.040436 12.148368
+v -10.347263 228.040436 42.628395
+v -64.258804 228.040436 42.628395
+v -10.347263 228.040436 12.148367
+v -64.258804 228.040436 12.148369
+v -28.914089 228.040436 12.148368
+v -46.498764 228.040436 12.148368
+v -10.347263 228.040436 42.628395
+v -10.347263 204.608917 42.628395
+v -64.258804 228.040436 42.628395
+v -64.258804 204.608917 42.628395
+v -10.347261 204.608917 53.867905
+v -64.258804 204.608917 53.867905
+v -10.347263 204.608917 42.628395
+v -64.258804 204.608917 42.628395
+v -10.347261 204.608917 53.867905
+v -10.347261 183.272888 53.867905
+v -64.258804 204.608917 53.867905
+v -64.258804 183.272888 53.867905
+v -64.258804 183.272888 53.867905
+v -10.347261 183.272888 53.867905
+v -64.258812 183.272888 -5.568144
+v -10.347265 183.272888 -5.568148
+v -46.498764 209.379135 -5.568146
+v -46.498764 228.040436 12.148368
+v -64.258812 209.379135 -5.568144
+v -64.258804 228.040436 12.148369
+v -29.070341 193.037903 -5.568146
+v -29.070341 209.379135 -5.568146
+v -46.498764 193.037903 -5.568146
+v -46.498764 209.379135 -5.568146
+v -28.914089 209.379135 -5.568146
+v -28.914089 228.040436 12.148368
+v -29.070341 209.379135 -5.568146
+v -46.498764 228.040436 12.148368
+v -46.498764 209.379135 -5.568146
+v -64.258804 183.272888 53.867905
+v -64.258812 183.272888 -5.568144
+v -64.258804 204.608917 53.867905
+v -64.258804 204.608917 42.628395
+v -64.258812 209.379135 -5.568144
+v -64.258804 228.040436 42.628395
+v -64.258804 228.040436 12.148369
+
+vt 1.102742 0.300421 0
+vt 0.397258 0.300421 0
+vt 1.397258 0.300421 0
+vt 0.980168 0.266735 0
+vt 0.490985 0.191522 0
+vt 0.640165 0.261764 0
+vt 0.82833 0.240533 0
+vt 0.494391 0.2656 0
+vt 0.980168 0.266735 0
+vt 1.063908 0.420527 0
+vt 0.063908 0.420527 0
+vt 0.102742 0.300421 0
+vt 1.102742 0.300421 0
+vt 1.102742 0.699579 0
+vt 0.102742 0.699579 0
+vt 0.980168 0.41307 0
+vt 1.063908 0.588322 0
+vt 0.063908 0.588322 0
+vt 0.980168 0.594824 0
+vt 0.980168 0.733266 0
+vt 0.980168 0.414612 0
+vt 0.980168 0.266735 0
+vt 0.82833 0.240533 0
+vt 0.980168 0.41307 0
+vt 0.82833 0.398454 0
+vt 0.640165 0.261764 0
+vt 0.640165 0.738236 0
+vt 0.82833 0.240533 0
+vt 0.82833 0.759467 0
+vt 0.82833 0.398454 0
+vt 0.82833 0.610574 0
+vt 0.640165 0.261764 0
+vt 0.490985 0.191522 0
+vt 0.640165 0.738236 0
+vt 0.490985 0.808478 0
+vt 0.494391 0.2656 0
+vt 0.494391 0.7344 0
+vt 0.490985 0.191522 0
+vt 0.490985 0.808478 0
+vt 0.494391 0.2656 0
+vt 0.397258 0.300421 0
+vt 0.494391 0.7344 0
+vt 0.397258 0.699579 0
+vt 0.397258 0.699579 0
+vt 0.397258 0.300421 0
+vt 0.102742 0.699579 0
+vt 0.102742 0.300421 0
+vt 0.980168 0.594824 0
+vt 0.82833 0.610574 0
+vt 0.980168 0.733266 0
+vt 0.82833 0.759467 0
+vt 1.063908 0.420527 0
+vt 0.980168 0.414612 0
+vt 1.063908 0.588322 0
+vt 0.980168 0.594824 0
+vt 0.980168 0.41307 0
+vt 0.82833 0.398454 0
+vt 0.980168 0.414612 0
+vt 0.82833 0.610574 0
+vt 0.980168 0.594824 0
+vt 0.397258 0.699579 0
+vt 1.102742 0.699579 0
+vt 0.102742 0.699579 0
+vt 0.494391 0.7344 0
+vt 0.490985 0.808478 0
+vt 1.490986 0.808478 0
+vt 0.980168 0.733266 0
+vt 0.640165 0.738236 0
+vt 0.82833 0.759467 0
+
+f 1675/2690 1674/2689 1673/2687 
+f 1674/2688 1675/2690 1676/2691 
+f 1676/2691 1675/2690 1677/2692 
+f 1677/2692 1675/2690 1678/2693 
+f 1679/2694 1674/2688 1676/2691 
+f 1682/2699 1681/2696 1680/2695 
+f 1681/2697 1682/2698 1683/2701 
+f 1680/2695 1681/2696 1684/2702 
+f 1681/2697 1683/2701 1685/2704 
+f 1685/2703 1683/2700 1686/2705 
+f 1686/2705 1683/2700 1687/2706 
+f 1688/2707 1684/2702 1681/2696 
+f 1691/2710 1690/2709 1689/2708 
+f 1690/2709 1691/2710 1692/2711 
+f 1695/2714 1694/2713 1693/2712 
+f 1694/2713 1695/2714 1696/2715 
+f 1696/2715 1695/2714 1697/2716 
+f 1696/2715 1697/2716 1698/2717 
+f 1701/2720 1700/2719 1699/2718 
+f 1700/2719 1701/2720 1702/2721 
+f 1705/2724 1704/2723 1703/2722 
+f 1704/2723 1705/2724 1706/2725 
+f 1709/2728 1708/2727 1707/2726 
+f 1708/2727 1709/2728 1710/2729 
+f 1713/2732 1712/2731 1711/2730 
+f 1712/2731 1713/2732 1714/2733 
+f 1717/2736 1716/2735 1715/2734 
+f 1716/2735 1717/2736 1718/2737 
+f 1721/2740 1720/2739 1719/2738 
+f 1720/2739 1721/2740 1722/2741 
+f 1725/2744 1724/2743 1723/2742 
+f 1724/2743 1725/2744 1726/2745 
+f 1726/2745 1725/2744 1727/2746 
+f 1730/2750 1729/2749 1728/2747 
+f 1729/2749 1730/2750 1731/2751 
+f 1729/2748 1731/2752 1732/2753 
+f 1732/2753 1731/2751 1733/2754 
+f 1732/2753 1733/2754 1734/2755 
+

BIN
examples/obj/nano/.DS_Store


+ 953 - 0
examples/obj/nano/Nano.js

@@ -0,0 +1,953 @@
+// Converted from: Nano.obj
+//  vertices: 418
+//  faces: 190 
+//  materials: 1
+//
+//  Generated with OBJ -> Three.js converter
+//  http://github.com/alteredq/three.js/blob/master/utils/exporters/convert_obj_threejs.py
+
+var Nano = function ( urlbase ) {
+    var scope = this;
+
+    THREE.Geometry.call(this);
+
+    var materials = [	{
+	"a_dbg_color" : 0xffeeeeee,
+	"a_dbg_index" : 0,
+	"a_dbg_name" : "Mat"
+	}];
+
+    init_materials();
+    
+    var normals = [];
+
+	v(60.188229,126.000000,66.000000);
+	v(60.188229,156.000000,29.999998);
+	v(60.188229,156.000000,29.999998);
+	v(60.188229,72.000000,48.000000);
+	v(60.188229,72.000000,66.000000);
+	v(60.188229,126.000000,66.000000);
+	v(60.188229,156.000000,29.999998);
+	v(60.188229,-84.000000,66.000000);
+	v(60.188229,-132.000000,23.999998);
+	v(60.188229,-156.000000,66.000000);
+	v(60.188229,-156.000000,-66.000000);
+	v(60.188229,-84.000000,48.000000);
+	v(60.188229,72.000000,48.000000);
+	v(60.188229,-132.000000,-18.000002);
+	v(60.188229,-108.000000,-18.000002);
+	v(60.188229,156.000000,-66.000000);
+	v(60.188229,-108.000000,23.999998);
+	v(60.188229,72.000000,66.000000);
+	v(60.188229,-84.000000,48.000000);
+	v(60.188229,72.000000,48.000000);
+	v(60.188229,-84.000000,66.000000);
+	v(60.188229,-84.000000,48.000000);
+	v(60.188229,-156.000000,66.000000);
+	v(60.188229,72.000000,66.000000);
+	v(60.188229,-84.000000,66.000000);
+	v(60.188229,126.000000,66.000000);
+	v(60.188229,126.000000,66.000000);
+	v(60.188229,156.000000,29.999998);
+	v(60.188229,156.000000,29.999998);
+	v(30.188229,72.000000,66.000000);
+	v(18.188229,72.000000,66.000000);
+	v(24.188229,-132.000000,23.999998);
+	v(24.188229,-156.000000,-66.000000);
+	v(24.188229,-132.000000,-18.000002);
+	v(24.188229,-108.000000,-18.000002);
+	v(24.188229,-84.000000,48.000000);
+	v(24.188229,-108.000000,23.999998);
+	v(18.188229,102.000000,66.000000);
+	v(24.188229,-84.000000,48.000000);
+	v(24.188229,-156.000000,66.000000);
+	v(24.188229,-84.000000,66.000000);
+	v(30.188229,102.000000,66.000000);
+	v(24.188229,-84.000000,-66.000000);
+	v(-29.811771,102.000000,66.000000);
+	v(-23.811771,-84.000000,-66.000000);
+	v(-29.811771,72.000000,48.000000);
+	v(-17.811771,72.000000,48.000000);
+	v(-17.811771,102.000000,48.000000);
+	v(-29.811771,102.000000,48.000000);
+	v(30.188229,72.000000,48.000000);
+	v(18.188229,72.000000,48.000000);
+	v(18.188229,102.000000,48.000000);
+	v(30.188229,102.000000,48.000000);
+	v(-23.811771,-41.999996,48.000000);
+	v(24.188229,-41.999996,48.000000);
+	v(-23.811771,-41.999996,-66.000000);
+	v(24.188229,-41.999996,-66.000000);
+	v(-23.811771,30.000004,35.999998);
+	v(-23.811771,48.000004,35.999998);
+	v(-23.811771,6.000004,35.999998);
+	v(-23.811771,-5.999996,35.999998);
+	v(-23.811771,-5.999996,48.000000);
+	v(24.188229,30.000004,35.999998);
+	v(24.188229,48.000004,35.999998);
+	v(-23.811771,6.000004,48.000000);
+	v(-23.811771,30.000004,48.000000);
+	v(-23.811771,48.000004,48.000000);
+	v(24.188229,6.000004,35.999998);
+	v(24.188229,-5.999996,35.999998);
+	v(24.188229,-5.999996,48.000000);
+	v(24.188229,6.000004,48.000000);
+	v(24.188229,30.000004,48.000000);
+	v(24.188229,48.000004,48.000000);
+	v(-59.811771,126.000000,66.000000);
+	v(-59.811771,156.000000,29.999998);
+	v(-59.811771,156.000000,29.999998);
+	v(-59.811771,72.000000,66.000000);
+	v(-59.811771,156.000000,29.999998);
+	v(-59.811771,-132.000000,23.999998);
+	v(-59.811771,-156.000000,-66.000000);
+	v(-59.811771,-132.000000,-18.000002);
+	v(-59.811771,-108.000000,-18.000002);
+	v(-59.811771,156.000000,-66.000000);
+	v(-59.811771,-108.000000,23.999998);
+	v(-59.811771,72.000000,48.000000);
+	v(-59.811771,-84.000000,48.000000);
+	v(-59.811771,-156.000000,66.000000);
+	v(-59.811771,72.000000,66.000000);
+	v(-59.811771,-84.000000,66.000000);
+	v(-59.811771,126.000000,66.000000);
+	v(-59.811771,126.000000,66.000000);
+	v(-59.811771,156.000000,29.999998);
+	v(-59.811771,156.000000,29.999998);
+	v(-29.811771,72.000000,66.000000);
+	v(-17.811771,72.000000,66.000000);
+	v(-23.811771,-132.000000,23.999998);
+	v(-23.811771,-156.000000,-66.000000);
+	v(-23.811771,-132.000000,-18.000002);
+	v(-23.811771,-108.000000,-18.000002);
+	v(-23.811771,-84.000000,48.000000);
+	v(-23.811771,-108.000000,23.999998);
+	v(-17.811771,102.000000,66.000000);
+	v(-23.811771,-84.000000,48.000000);
+	v(-23.811771,-156.000000,66.000000);
+	v(-23.811771,-84.000000,66.000000);
+	v(-29.811771,102.000000,66.000000);
+	v(-23.811771,-84.000000,-66.000000);
+	v(-29.811771,72.000000,48.000000);
+	v(-17.811771,72.000000,48.000000);
+	v(-17.811771,102.000000,48.000000);
+	v(-29.811771,102.000000,48.000000);
+	v(-23.811771,-41.999996,48.000000);
+	v(-23.811771,-41.999996,-66.000000);
+	v(-23.811771,30.000004,35.999998);
+	v(-23.811771,48.000004,35.999998);
+	v(-23.811771,6.000004,35.999998);
+	v(-23.811771,-5.999996,35.999998);
+	v(-23.811771,-5.999996,48.000000);
+	v(-23.811771,6.000004,48.000000);
+	v(-23.811771,30.000004,48.000000);
+	v(-23.811771,48.000004,48.000000);
+	v(-59.811771,126.000000,66.000000);
+	v(-59.811771,156.000000,29.999998);
+	v(-59.811771,156.000000,29.999998);
+	v(-59.811771,72.000000,66.000000);
+	v(-59.811771,156.000000,29.999998);
+	v(-59.811771,-132.000000,23.999998);
+	v(-59.811771,-156.000000,-66.000000);
+	v(-59.811771,-132.000000,-18.000002);
+	v(-59.811771,-108.000000,-18.000002);
+	v(-59.811771,156.000000,-66.000000);
+	v(-59.811771,-108.000000,23.999998);
+	v(-59.811771,72.000000,48.000000);
+	v(-59.811771,-84.000000,48.000000);
+	v(-59.811771,-156.000000,66.000000);
+	v(-59.811771,72.000000,66.000000);
+	v(-59.811771,-84.000000,66.000000);
+	v(-59.811771,126.000000,66.000000);
+	v(-59.811771,126.000000,66.000000);
+	v(-59.811771,156.000000,29.999998);
+	v(-59.811771,156.000000,29.999998);
+	v(-29.811771,72.000000,66.000000);
+	v(-17.811771,72.000000,66.000000);
+	v(-23.811771,-132.000000,23.999998);
+	v(-23.811771,-156.000000,-66.000000);
+	v(-23.811771,-132.000000,-18.000002);
+	v(-23.811771,-108.000000,-18.000002);
+	v(-23.811771,-84.000000,48.000000);
+	v(-23.811771,-108.000000,23.999998);
+	v(-17.811771,102.000000,66.000000);
+	v(-23.811771,-84.000000,48.000000);
+	v(-23.811771,-156.000000,66.000000);
+	v(-23.811771,-84.000000,66.000000);
+	v(-29.811771,102.000000,66.000000);
+	v(-23.811771,-84.000000,-66.000000);
+	v(-29.811771,72.000000,48.000000);
+	v(-17.811771,72.000000,48.000000);
+	v(-17.811771,102.000000,48.000000);
+	v(-29.811771,102.000000,48.000000);
+	v(-23.811771,-41.999996,48.000000);
+	v(-23.811771,-41.999996,-66.000000);
+	v(-23.811771,30.000004,35.999998);
+	v(-23.811771,48.000004,35.999998);
+	v(-23.811771,6.000004,35.999998);
+	v(-23.811771,-5.999996,35.999998);
+	v(-23.811771,-5.999996,48.000000);
+	v(-23.811771,6.000004,48.000000);
+	v(-23.811771,30.000004,48.000000);
+	v(-23.811771,48.000004,48.000000);
+	v(-59.811771,126.000000,66.000000);
+	v(-59.811771,156.000000,29.999998);
+	v(-59.811771,156.000000,29.999998);
+	v(-59.811771,72.000000,66.000000);
+	v(-59.811771,156.000000,29.999998);
+	v(-59.811771,-132.000000,23.999998);
+	v(-59.811771,-156.000000,-66.000000);
+	v(-59.811771,-132.000000,-18.000002);
+	v(-59.811771,-108.000000,-18.000002);
+	v(-59.811771,156.000000,-66.000000);
+	v(-59.811771,-108.000000,23.999998);
+	v(-59.811771,72.000000,48.000000);
+	v(-59.811771,-84.000000,48.000000);
+	v(-59.811771,-156.000000,66.000000);
+	v(-59.811771,72.000000,66.000000);
+	v(-59.811771,-84.000000,66.000000);
+	v(-59.811771,126.000000,66.000000);
+	v(-59.811771,126.000000,66.000000);
+	v(-59.811771,156.000000,29.999998);
+	v(-59.811771,156.000000,29.999998);
+	v(-29.811771,72.000000,66.000000);
+	v(-17.811771,72.000000,66.000000);
+	v(-23.811771,-132.000000,23.999998);
+	v(-23.811771,-156.000000,-66.000000);
+	v(-23.811771,-132.000000,-18.000002);
+	v(-23.811771,-108.000000,-18.000002);
+	v(-23.811771,-84.000000,48.000000);
+	v(-23.811771,-108.000000,23.999998);
+	v(-17.811771,102.000000,66.000000);
+	v(-23.811771,-84.000000,48.000000);
+	v(-23.811771,-156.000000,66.000000);
+	v(-23.811771,-84.000000,66.000000);
+	v(-83.753887,-54.327301,-0.821590);
+	v(-83.753887,103.172699,-0.821590);
+	v(-61.253887,-54.327301,-0.821590);
+	v(-61.253887,103.172699,-0.821590);
+	v(-61.253887,-54.327301,-53.321590);
+	v(-61.253887,103.172699,-53.321590);
+	v(-83.753887,-54.327301,-53.321590);
+	v(-83.753887,103.172699,-53.321590);
+	v(61.253887,-54.327301,-0.821590);
+	v(61.253887,103.172699,-0.821590);
+	v(83.753887,-54.327301,-0.821590);
+	v(83.753887,103.172699,-0.821590);
+	v(83.753887,-54.327301,-53.321590);
+	v(83.753887,103.172699,-53.321590);
+	v(61.253887,-54.327301,-53.321590);
+	v(61.253887,103.172699,-53.321590);
+	v(60.188229,126.000000,66.000000);
+	v(60.188229,156.000000,29.999998);
+	v(60.188229,156.000000,29.999998);
+	v(60.188229,72.000000,48.000000);
+	v(60.188229,72.000000,66.000000);
+	v(60.188229,126.000000,66.000000);
+	v(60.188229,156.000000,29.999998);
+	v(60.188229,-84.000000,66.000000);
+	v(60.188229,-132.000000,23.999998);
+	v(60.188229,-156.000000,66.000000);
+	v(60.188229,-156.000000,-66.000000);
+	v(60.188229,-84.000000,48.000000);
+	v(60.188229,72.000000,48.000000);
+	v(60.188229,-132.000000,-18.000002);
+	v(60.188229,-108.000000,-18.000002);
+	v(60.188229,156.000000,-66.000000);
+	v(60.188229,-108.000000,23.999998);
+	v(60.188229,72.000000,66.000000);
+	v(60.188229,-84.000000,48.000000);
+	v(60.188229,72.000000,48.000000);
+	v(60.188229,-84.000000,66.000000);
+	v(60.188229,-84.000000,48.000000);
+	v(60.188229,-156.000000,66.000000);
+	v(60.188229,72.000000,66.000000);
+	v(60.188229,-84.000000,66.000000);
+	v(60.188229,126.000000,66.000000);
+	v(60.188229,126.000000,66.000000);
+	v(60.188229,156.000000,29.999998);
+	v(60.188229,156.000000,29.999998);
+	v(30.188229,72.000000,66.000000);
+	v(18.188229,72.000000,66.000000);
+	v(24.188229,-132.000000,23.999998);
+	v(24.188229,-156.000000,-66.000000);
+	v(24.188229,-132.000000,-18.000002);
+	v(24.188229,-108.000000,-18.000002);
+	v(24.188229,-84.000000,48.000000);
+	v(24.188229,-108.000000,23.999998);
+	v(18.188229,102.000000,66.000000);
+	v(24.188229,-84.000000,48.000000);
+	v(24.188229,-156.000000,66.000000);
+	v(24.188229,-84.000000,66.000000);
+	v(30.188229,102.000000,66.000000);
+	v(24.188229,-84.000000,-66.000000);
+	v(-29.811771,102.000000,66.000000);
+	v(-23.811771,-84.000000,-66.000000);
+	v(-29.811771,72.000000,48.000000);
+	v(-17.811771,72.000000,48.000000);
+	v(-17.811771,102.000000,48.000000);
+	v(-29.811771,102.000000,48.000000);
+	v(30.188229,72.000000,48.000000);
+	v(18.188229,72.000000,48.000000);
+	v(18.188229,102.000000,48.000000);
+	v(30.188229,102.000000,48.000000);
+	v(-23.811771,-41.999996,48.000000);
+	v(24.188229,-41.999996,48.000000);
+	v(-23.811771,-41.999996,-66.000000);
+	v(24.188229,-41.999996,-66.000000);
+	v(-23.811771,30.000004,35.999998);
+	v(-23.811771,48.000004,35.999998);
+	v(-23.811771,6.000004,35.999998);
+	v(-23.811771,-5.999996,35.999998);
+	v(-23.811771,-5.999996,48.000000);
+	v(24.188229,30.000004,35.999998);
+	v(24.188229,48.000004,35.999998);
+	v(-23.811771,6.000004,48.000000);
+	v(-23.811771,30.000004,48.000000);
+	v(-23.811771,48.000004,48.000000);
+	v(24.188229,6.000004,35.999998);
+	v(24.188229,-5.999996,35.999998);
+	v(24.188229,-5.999996,48.000000);
+	v(24.188229,6.000004,48.000000);
+	v(24.188229,30.000004,48.000000);
+	v(24.188229,48.000004,48.000000);
+	v(-59.811771,126.000000,66.000000);
+	v(-59.811771,156.000000,29.999998);
+	v(-59.811771,156.000000,29.999998);
+	v(-59.811771,72.000000,66.000000);
+	v(-59.811771,156.000000,29.999998);
+	v(-59.811771,-132.000000,23.999998);
+	v(-59.811771,-156.000000,-66.000000);
+	v(-59.811771,-132.000000,-18.000002);
+	v(-59.811771,-108.000000,-18.000002);
+	v(-59.811771,156.000000,-66.000000);
+	v(-59.811771,-108.000000,23.999998);
+	v(-59.811771,72.000000,48.000000);
+	v(-59.811771,-84.000000,48.000000);
+	v(-59.811771,-156.000000,66.000000);
+	v(-59.811771,72.000000,66.000000);
+	v(-59.811771,-84.000000,66.000000);
+	v(-59.811771,126.000000,66.000000);
+	v(-59.811771,126.000000,66.000000);
+	v(-59.811771,156.000000,29.999998);
+	v(-59.811771,156.000000,29.999998);
+	v(-29.811771,72.000000,66.000000);
+	v(-17.811771,72.000000,66.000000);
+	v(-23.811771,-132.000000,23.999998);
+	v(-23.811771,-156.000000,-66.000000);
+	v(-23.811771,-132.000000,-18.000002);
+	v(-23.811771,-108.000000,-18.000002);
+	v(-23.811771,-84.000000,48.000000);
+	v(-23.811771,-108.000000,23.999998);
+	v(-17.811771,102.000000,66.000000);
+	v(-23.811771,-84.000000,48.000000);
+	v(-23.811771,-156.000000,66.000000);
+	v(-23.811771,-84.000000,66.000000);
+	v(-29.811771,102.000000,66.000000);
+	v(-23.811771,-84.000000,-66.000000);
+	v(-29.811771,72.000000,48.000000);
+	v(-17.811771,72.000000,48.000000);
+	v(-17.811771,102.000000,48.000000);
+	v(-29.811771,102.000000,48.000000);
+	v(-23.811771,-41.999996,48.000000);
+	v(-23.811771,-41.999996,-66.000000);
+	v(-23.811771,30.000004,35.999998);
+	v(-23.811771,48.000004,35.999998);
+	v(-23.811771,6.000004,35.999998);
+	v(-23.811771,-5.999996,35.999998);
+	v(-23.811771,-5.999996,48.000000);
+	v(-23.811771,6.000004,48.000000);
+	v(-23.811771,30.000004,48.000000);
+	v(-23.811771,48.000004,48.000000);
+	v(-59.811771,126.000000,66.000000);
+	v(-59.811771,156.000000,29.999998);
+	v(-59.811771,156.000000,29.999998);
+	v(-59.811771,72.000000,66.000000);
+	v(-59.811771,156.000000,29.999998);
+	v(-59.811771,-132.000000,23.999998);
+	v(-59.811771,-156.000000,-66.000000);
+	v(-59.811771,-132.000000,-18.000002);
+	v(-59.811771,-108.000000,-18.000002);
+	v(-59.811771,156.000000,-66.000000);
+	v(-59.811771,-108.000000,23.999998);
+	v(-59.811771,72.000000,48.000000);
+	v(-59.811771,-84.000000,48.000000);
+	v(-59.811771,-156.000000,66.000000);
+	v(-59.811771,72.000000,66.000000);
+	v(-59.811771,-84.000000,66.000000);
+	v(-59.811771,126.000000,66.000000);
+	v(-59.811771,126.000000,66.000000);
+	v(-59.811771,156.000000,29.999998);
+	v(-59.811771,156.000000,29.999998);
+	v(-29.811771,72.000000,66.000000);
+	v(-17.811771,72.000000,66.000000);
+	v(-23.811771,-132.000000,23.999998);
+	v(-23.811771,-156.000000,-66.000000);
+	v(-23.811771,-132.000000,-18.000002);
+	v(-23.811771,-108.000000,-18.000002);
+	v(-23.811771,-84.000000,48.000000);
+	v(-23.811771,-108.000000,23.999998);
+	v(-17.811771,102.000000,66.000000);
+	v(-23.811771,-84.000000,48.000000);
+	v(-23.811771,-156.000000,66.000000);
+	v(-23.811771,-84.000000,66.000000);
+	v(-29.811771,102.000000,66.000000);
+	v(-23.811771,-84.000000,-66.000000);
+	v(-29.811771,72.000000,48.000000);
+	v(-17.811771,72.000000,48.000000);
+	v(-17.811771,102.000000,48.000000);
+	v(-29.811771,102.000000,48.000000);
+	v(-23.811771,-41.999996,48.000000);
+	v(-23.811771,-41.999996,-66.000000);
+	v(-23.811771,30.000004,35.999998);
+	v(-23.811771,48.000004,35.999998);
+	v(-23.811771,6.000004,35.999998);
+	v(-23.811771,-5.999996,35.999998);
+	v(-23.811771,-5.999996,48.000000);
+	v(-23.811771,6.000004,48.000000);
+	v(-23.811771,30.000004,48.000000);
+	v(-23.811771,48.000004,48.000000);
+	v(-59.811771,126.000000,66.000000);
+	v(-59.811771,156.000000,29.999998);
+	v(-59.811771,156.000000,29.999998);
+	v(-59.811771,72.000000,66.000000);
+	v(-59.811771,156.000000,29.999998);
+	v(-59.811771,-132.000000,23.999998);
+	v(-59.811771,-156.000000,-66.000000);
+	v(-59.811771,-132.000000,-18.000002);
+	v(-59.811771,-108.000000,-18.000002);
+	v(-59.811771,156.000000,-66.000000);
+	v(-59.811771,-108.000000,23.999998);
+	v(-59.811771,72.000000,48.000000);
+	v(-59.811771,-84.000000,48.000000);
+	v(-59.811771,-156.000000,66.000000);
+	v(-59.811771,72.000000,66.000000);
+	v(-59.811771,-84.000000,66.000000);
+	v(-59.811771,126.000000,66.000000);
+	v(-59.811771,126.000000,66.000000);
+	v(-59.811771,156.000000,29.999998);
+	v(-59.811771,156.000000,29.999998);
+	v(-29.811771,72.000000,66.000000);
+	v(-17.811771,72.000000,66.000000);
+	v(-23.811771,-132.000000,23.999998);
+	v(-23.811771,-156.000000,-66.000000);
+	v(-23.811771,-132.000000,-18.000002);
+	v(-23.811771,-108.000000,-18.000002);
+	v(-23.811771,-84.000000,48.000000);
+	v(-23.811771,-108.000000,23.999998);
+	v(-17.811771,102.000000,66.000000);
+	v(-23.811771,-84.000000,48.000000);
+	v(-23.811771,-156.000000,66.000000);
+	v(-23.811771,-84.000000,66.000000);
+    /*
+	uv(0.000000,1.000000,0.996643,0.000000,1.000000,0.000000);
+	uv(1.000000,1.000000,1.000000,0.000000,0.000000,0.000000,0.000000,1.000000);
+	uv(0.000000,1.000000,1.000000,1.000000,1.000000,0.000000,0.000000,0.000000);
+	uv(1.000000,1.000000,1.000000,1.000000,1.000000,0.000000,1.000000,0.000000);
+	uv(0.000000,0.000000,1.000000,0.000000,1.000000,1.000000);
+	uv(0.000000,1.000000,1.000000,1.000000,1.000000,0.000000,0.000000,0.000000);
+	uv(0.000000,0.000000,0.000000,0.000000,1.000000,1.000000,1.000000,1.000000);
+	uv(1.000000,0.000000,0.000000,0.000000,1.000000,1.000000);
+	uv(1.000000,1.000000,1.000000,0.000000,0.000000,0.000000);
+	uv(0.000000,1.000000,0.000000,1.000000,1.000000,0.000000,1.000000,0.000000);
+	uv(0.996643,0.000000,0.996643,0.000000,0.000000,1.000000,0.000000,1.000000);
+	uv(1.000000,0.000000,1.000000,0.000000,0.996643,0.000000,0.996643,0.000000);
+	uv(0.000000,0.000000,1.000000,0.000000,1.000000,1.000000,0.000000,1.000000);
+	uv(0.000000,0.000000,1.000000,0.000000,1.000000,1.000000,0.000000,1.000000);
+	uv(1.000000,0.000000,1.000000,1.000000,0.000000,1.000000,0.000000,0.000000);
+	uv(0.000000,0.000000,1.000000,0.000000,1.000000,1.000000,0.000000,1.000000);
+	uv(0.000000,0.000000,1.000000,0.000000,1.000000,1.000000,0.000000,1.000000);
+	uv(0.000000,0.000000,1.000000,0.000000,1.000000,1.000000,0.000000,1.000000);
+	uv(0.000000,0.000000,1.000000,0.000000,1.000000,1.000000);
+	uv(0.000000,1.000000,0.000000,1.000000,1.000000,1.000000,1.000000,1.000000);
+	uv(1.000000,0.000000,1.000000,0.000000,0.000000,0.000000,0.000000,0.000000);
+	uv(0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,1.000000,0.000000);
+	uv(1.000000,1.000000,1.000000,1.000000,0.000000,1.000000,0.000000,1.000000);
+	uv(1.000000,1.000000,1.000000,0.000000,0.000000,0.000000,0.000000,1.000000);
+	uv(1.000000,0.000000,1.000000,0.000000,0.000000,0.000000,0.000000,0.000000);
+	uv(0.000000,1.000000,1.000000,1.000000,1.000000,0.000000,0.000000,0.000000);
+	uv(0.167026,0.832973,0.832974,0.832973,0.832974,0.167026,0.167026,0.167026);
+	uv(1.000000,0.000000,1.000000,1.000000,0.000000,1.000000,0.000000,0.000000);
+	uv(0.000000,1.000000,1.000000,1.000000,1.000000,0.000000,0.000000,0.000000);
+	uv(0.000000,1.000000,1.000000,1.000000,1.000000,0.000000,0.000000,0.000000);
+	uv(0.000000,1.000000,1.000000,1.000000,1.000000,0.000000,0.000000,0.000000);
+	uv(1.000000,0.000000,1.000000,1.000000,0.000000,1.000000,0.000000,0.000000);
+	uv(0.000000,1.000000,1.000000,1.000000,1.000000,0.000000,0.000000,0.000000);
+	uv(0.000000,1.000000,1.000000,1.000000,1.000000,0.000000,0.000000,0.000000);
+	uv(0.000000,1.000000,1.000000,1.000000,1.000000,0.000000,0.000000,0.000000);
+	uv(0.000000,1.000000,1.000000,1.000000,1.000000,0.000000,0.000000,0.000000);
+	uv(0.000000,1.000000,1.000000,1.000000,1.000000,0.000000,0.000000,0.000000);
+	uv(1.000000,1.000000,1.000000,0.000000,0.000000,0.000000,0.000000,1.000000);
+	uv(0.000000,1.000000,1.000000,1.000000,1.000000,0.000000,0.000000,0.000000);
+	uv(0.000000,1.000000,1.000000,1.000000,1.000000,0.000000,0.000000,0.000000);
+	uv(1.000000,0.000000,1.000000,1.000000,0.000000,1.000000,0.000000,0.000000);
+	uv(0.000000,0.000000,1.000000,0.000000,1.000000,1.000000,0.000000,1.000000);
+	uv(0.000000,0.000000,1.000000,0.000000,1.000000,1.000000,0.000000,1.000000);
+	uv(1.000000,0.000000,1.000000,1.000000,0.000000,1.000000);
+	uv(0.000000,1.000000,1.000000,1.000000,1.000000,0.000000,0.000000,0.000000);
+	uv(0.000000,1.000000,1.000000,1.000000,1.000000,0.000000,0.000000,0.000000);
+	uv(1.000000,1.000000,1.000000,0.000000,0.000000,0.000000,0.000000,1.000000);
+	uv(0.000000,1.000000,1.000000,1.000000,1.000000,0.000000,0.000000,0.000000);
+	uv(0.000000,0.000000,1.000000,0.000000,1.000000,1.000000,0.000000,1.000000);
+	uv(0.000000,0.000000,1.000000,0.000000,1.000000,1.000000,0.000000,1.000000);
+	uv(0.000000,0.000000,1.000000,0.000000,1.000000,1.000000);
+	uv(0.000000,1.000000,1.000000,1.000000,1.000000,0.000000,0.000000,0.000000);
+	uv(0.996643,0.000000,0.000000,1.000000,1.000000,0.000000);
+	uv(0.000000,1.000000,1.000000,1.000000,1.000000,0.000000,0.000000,0.000000);
+	uv(1.000000,0.000000,1.000000,1.000000,0.000000,1.000000,0.000000,0.000000);
+	uv(1.000000,0.000000,1.000000,1.000000,1.000000,1.000000,1.000000,0.000000);
+	uv(1.000000,0.000000,0.000000,0.000000,1.000000,1.000000);
+	uv(0.000000,1.000000,1.000000,1.000000,1.000000,0.000000,0.000000,0.000000);
+	uv(1.000000,1.000000,0.000000,0.000000,0.000000,0.000000,1.000000,1.000000);
+	uv(0.000000,0.000000,1.000000,0.000000,1.000000,1.000000,0.000000,1.000000);
+	uv(1.000000,0.000000,1.000000,1.000000,0.000000,0.000000);
+	uv(1.000000,0.000000,0.000000,1.000000,0.000000,1.000000,1.000000,0.000000);
+	uv(0.000000,1.000000,0.996643,0.000000,0.996643,0.000000,0.000000,1.000000);
+	uv(0.996643,0.000000,1.000000,0.000000,1.000000,0.000000,0.996643,0.000000);
+	uv(1.000000,1.000000,1.000000,0.000000,0.000000,0.000000,0.000000,1.000000);
+	uv(1.000000,1.000000,1.000000,0.000000,0.000000,0.000000,0.000000,1.000000);
+	uv(1.000000,1.000000,1.000000,0.000000,0.000000,1.000000);
+	uv(1.000000,1.000000,1.000000,0.000000,0.000000,0.000000,0.000000,1.000000);
+	uv(1.000000,1.000000,1.000000,0.000000,0.000000,0.000000,0.000000,1.000000);
+	uv(1.000000,1.000000,1.000000,0.000000,0.000000,0.000000,0.000000,1.000000);
+	uv(1.000000,0.000000,0.000000,0.000000,1.000000,1.000000);
+	uv(1.000000,1.000000,0.000000,1.000000,0.000000,1.000000,1.000000,1.000000);
+	uv(0.000000,0.000000,1.000000,0.000000,1.000000,0.000000,0.000000,0.000000);
+	uv(1.000000,0.000000,0.000000,0.000000,0.000000,0.000000,1.000000,0.000000);
+	uv(0.000000,1.000000,1.000000,1.000000,1.000000,1.000000,0.000000,1.000000);
+	uv(0.000000,0.000000,1.000000,0.000000,1.000000,1.000000,0.000000,1.000000);
+	uv(0.000000,0.000000,1.000000,0.000000,1.000000,0.000000,0.000000,0.000000);
+	uv(0.000000,1.000000,1.000000,1.000000,1.000000,0.000000,0.000000,0.000000);
+	uv(0.832974,0.167026,0.832974,0.832973,0.167026,0.832973,0.167026,0.167026);
+	uv(0.000000,0.000000,1.000000,0.000000,1.000000,1.000000);
+	uv(1.000000,0.000000,1.000000,1.000000,0.000000,1.000000,0.000000,0.000000);
+	uv(1.000000,0.000000,1.000000,1.000000,0.000000,1.000000,0.000000,0.000000);
+	uv(1.000000,0.000000,1.000000,1.000000,0.000000,1.000000,0.000000,0.000000);
+	uv(0.000000,1.000000,1.000000,1.000000,1.000000,0.000000,0.000000,0.000000);
+	uv(0.000000,1.000000,1.000000,1.000000,1.000000,0.000000,0.000000,0.000000);
+	uv(0.000000,1.000000,1.000000,1.000000,1.000000,0.000000,0.000000,0.000000);
+	uv(0.000000,0.000000,1.000000,0.000000,1.000000,1.000000,0.000000,1.000000);
+	uv(0.000000,0.000000,1.000000,0.000000,1.000000,1.000000,0.000000,1.000000);
+	uv(0.000000,1.000000,1.000000,1.000000,1.000000,0.000000,0.000000,0.000000);
+	uv(1.000000,1.000000,1.000000,0.000000,0.000000,0.000000);
+	uv(1.000000,1.000000,1.000000,0.000000,0.000000,0.000000,0.000000,1.000000);
+	uv(1.000000,1.000000,1.000000,0.000000,0.000000,0.000000,0.000000,1.000000);
+	uv(1.000000,1.000000,1.000000,0.000000,0.000000,0.000000,0.000000,1.000000);
+	uv(1.000000,1.000000,1.000000,0.000000,0.000000,0.000000,0.000000,1.000000);
+	uv(1.000000,1.000000,1.000000,0.000000,0.000000,0.000000,0.000000,1.000000);
+	uv(1.000000,1.000000,1.000000,0.000000,0.000000,0.000000,0.000000,1.000000);
+	uv(1.000000,1.000000,1.000000,0.000000,0.000000,0.000000,0.000000,1.000000);
+	uv(1.000000,1.000000,1.000000,0.000000,0.000000,0.000000,0.000000,1.000000);
+	uv(1.000000,1.000000,1.000000,0.000000,0.000000,0.000000,0.000000,1.000000);
+	uv(1.000000,1.000000,1.000000,0.000000,0.000000,0.000000,0.000000,1.000000);
+	uv(1.000000,1.000000,1.000000,0.000000,0.000000,0.000000,0.000000,1.000000);
+	uv(1.000000,1.000000,1.000000,0.000000,0.000000,0.000000,0.000000,1.000000);
+	uv(0.000000,1.000000,0.996643,0.000000,1.000000,0.000000);
+	uv(1.000000,1.000000,1.000000,0.000000,0.000000,0.000000,0.000000,1.000000);
+	uv(0.000000,1.000000,1.000000,1.000000,1.000000,0.000000,0.000000,0.000000);
+	uv(1.000000,1.000000,1.000000,1.000000,1.000000,0.000000,1.000000,0.000000);
+	uv(0.000000,0.000000,1.000000,0.000000,1.000000,1.000000);
+	uv(0.000000,1.000000,1.000000,1.000000,1.000000,0.000000,0.000000,0.000000);
+	uv(0.000000,0.000000,0.000000,0.000000,1.000000,1.000000,1.000000,1.000000);
+	uv(1.000000,0.000000,0.000000,0.000000,1.000000,1.000000);
+	uv(1.000000,1.000000,1.000000,0.000000,0.000000,0.000000);
+	uv(0.000000,1.000000,0.000000,1.000000,1.000000,0.000000,1.000000,0.000000);
+	uv(0.996643,0.000000,0.996643,0.000000,0.000000,1.000000,0.000000,1.000000);
+	uv(1.000000,0.000000,1.000000,0.000000,0.996643,0.000000,0.996643,0.000000);
+	uv(0.000000,0.000000,1.000000,0.000000,1.000000,1.000000,0.000000,1.000000);
+	uv(0.000000,0.000000,1.000000,0.000000,1.000000,1.000000,0.000000,1.000000);
+	uv(1.000000,0.000000,1.000000,1.000000,0.000000,1.000000,0.000000,0.000000);
+	uv(0.000000,0.000000,1.000000,0.000000,1.000000,1.000000,0.000000,1.000000);
+	uv(0.000000,0.000000,1.000000,0.000000,1.000000,1.000000,0.000000,1.000000);
+	uv(0.000000,0.000000,1.000000,0.000000,1.000000,1.000000,0.000000,1.000000);
+	uv(0.000000,0.000000,1.000000,0.000000,1.000000,1.000000);
+	uv(0.000000,1.000000,0.000000,1.000000,1.000000,1.000000,1.000000,1.000000);
+	uv(1.000000,0.000000,1.000000,0.000000,0.000000,0.000000,0.000000,0.000000);
+	uv(0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,1.000000,0.000000);
+	uv(1.000000,1.000000,1.000000,1.000000,0.000000,1.000000,0.000000,1.000000);
+	uv(1.000000,1.000000,1.000000,0.000000,0.000000,0.000000,0.000000,1.000000);
+	uv(1.000000,0.000000,1.000000,0.000000,0.000000,0.000000,0.000000,0.000000);
+	uv(0.000000,1.000000,1.000000,1.000000,1.000000,0.000000,0.000000,0.000000);
+	uv(0.167026,0.832973,0.832974,0.832973,0.832974,0.167026,0.167026,0.167026);
+	uv(0.000000,1.000000,1.000000,1.000000,1.000000,0.000000,0.000000,0.000000);
+	uv(0.000000,1.000000,1.000000,1.000000,1.000000,0.000000,0.000000,0.000000);
+	uv(0.000000,1.000000,1.000000,1.000000,1.000000,0.000000,0.000000,0.000000);
+	uv(0.000000,1.000000,1.000000,1.000000,1.000000,0.000000,0.000000,0.000000);
+	uv(1.000000,0.000000,1.000000,1.000000,0.000000,1.000000,0.000000,0.000000);
+	uv(0.000000,1.000000,1.000000,1.000000,1.000000,0.000000,0.000000,0.000000);
+	uv(0.000000,1.000000,1.000000,1.000000,1.000000,0.000000,0.000000,0.000000);
+	uv(0.000000,1.000000,1.000000,1.000000,1.000000,0.000000,0.000000,0.000000);
+	uv(0.000000,1.000000,1.000000,1.000000,1.000000,0.000000,0.000000,0.000000);
+	uv(0.000000,1.000000,1.000000,1.000000,1.000000,0.000000,0.000000,0.000000);
+	uv(1.000000,1.000000,1.000000,0.000000,0.000000,0.000000,0.000000,1.000000);
+	uv(0.000000,1.000000,1.000000,1.000000,1.000000,0.000000,0.000000,0.000000);
+	uv(0.000000,1.000000,1.000000,1.000000,1.000000,0.000000,0.000000,0.000000);
+	uv(1.000000,0.000000,1.000000,1.000000,0.000000,1.000000,0.000000,0.000000);
+	uv(0.000000,0.000000,1.000000,0.000000,1.000000,1.000000,0.000000,1.000000);
+	uv(0.000000,0.000000,1.000000,0.000000,1.000000,1.000000,0.000000,1.000000);
+	uv(1.000000,0.000000,1.000000,1.000000,0.000000,1.000000);
+	uv(0.000000,1.000000,1.000000,1.000000,1.000000,0.000000,0.000000,0.000000);
+	uv(0.000000,1.000000,1.000000,1.000000,1.000000,0.000000,0.000000,0.000000);
+	uv(1.000000,1.000000,1.000000,0.000000,0.000000,0.000000,0.000000,1.000000);
+	uv(0.000000,1.000000,1.000000,1.000000,1.000000,0.000000,0.000000,0.000000);
+	uv(0.000000,0.000000,1.000000,0.000000,1.000000,1.000000,0.000000,1.000000);
+	uv(0.000000,0.000000,1.000000,0.000000,1.000000,1.000000,0.000000,1.000000);
+	uv(0.000000,0.000000,1.000000,0.000000,1.000000,1.000000);
+	uv(0.000000,1.000000,1.000000,1.000000,1.000000,0.000000,0.000000,0.000000);
+	uv(0.996643,0.000000,0.000000,1.000000,1.000000,0.000000);
+	uv(0.000000,1.000000,1.000000,1.000000,1.000000,0.000000,0.000000,0.000000);
+	uv(1.000000,0.000000,1.000000,1.000000,0.000000,1.000000,0.000000,0.000000);
+	uv(1.000000,0.000000,1.000000,1.000000,1.000000,1.000000,1.000000,0.000000);
+	uv(1.000000,0.000000,0.000000,0.000000,1.000000,1.000000);
+	uv(0.000000,1.000000,1.000000,1.000000,1.000000,0.000000,0.000000,0.000000);
+	uv(1.000000,1.000000,0.000000,0.000000,0.000000,0.000000,1.000000,1.000000);
+	uv(1.000000,0.000000,1.000000,1.000000,0.000000,1.000000,0.000000,0.000000);
+	uv(1.000000,0.000000,1.000000,1.000000,0.000000,0.000000);
+	uv(1.000000,0.000000,0.000000,1.000000,0.000000,1.000000,1.000000,0.000000);
+	uv(0.000000,1.000000,0.996643,0.000000,0.996643,0.000000,0.000000,1.000000);
+	uv(0.996643,0.000000,1.000000,0.000000,1.000000,0.000000,0.996643,0.000000);
+	uv(1.000000,1.000000,1.000000,0.000000,0.000000,0.000000,0.000000,1.000000);
+	uv(1.000000,1.000000,1.000000,0.000000,0.000000,0.000000,0.000000,1.000000);
+	uv(1.000000,1.000000,1.000000,0.000000,0.000000,1.000000);
+	uv(1.000000,1.000000,1.000000,0.000000,0.000000,0.000000,0.000000,1.000000);
+	uv(1.000000,1.000000,1.000000,0.000000,0.000000,0.000000,0.000000,1.000000);
+	uv(1.000000,1.000000,1.000000,0.000000,0.000000,0.000000,0.000000,1.000000);
+	uv(1.000000,0.000000,0.000000,0.000000,1.000000,1.000000);
+	uv(1.000000,1.000000,0.000000,1.000000,0.000000,1.000000,1.000000,1.000000);
+	uv(0.000000,0.000000,1.000000,0.000000,1.000000,0.000000,0.000000,0.000000);
+	uv(1.000000,0.000000,0.000000,0.000000,0.000000,0.000000,1.000000,0.000000);
+	uv(0.000000,1.000000,1.000000,1.000000,1.000000,1.000000,0.000000,1.000000);
+	uv(0.000000,0.000000,1.000000,0.000000,1.000000,1.000000,0.000000,1.000000);
+	uv(0.000000,0.000000,1.000000,0.000000,1.000000,0.000000,0.000000,0.000000);
+	uv(0.000000,1.000000,1.000000,1.000000,1.000000,0.000000,0.000000,0.000000);
+	uv(0.832974,0.167026,0.832974,0.832973,0.167026,0.832973,0.167026,0.167026);
+	uv(1.000000,0.000000,1.000000,1.000000,0.000000,1.000000,0.000000,0.000000);
+	uv(1.000000,0.000000,1.000000,1.000000,0.000000,1.000000,0.000000,0.000000);
+	uv(1.000000,0.000000,1.000000,1.000000,0.000000,1.000000,0.000000,0.000000);
+	uv(1.000000,0.000000,1.000000,1.000000,0.000000,1.000000,0.000000,0.000000);
+	uv(0.000000,1.000000,1.000000,1.000000,1.000000,0.000000,0.000000,0.000000);
+	uv(0.000000,1.000000,1.000000,1.000000,1.000000,0.000000,0.000000,0.000000);
+	uv(0.000000,1.000000,1.000000,1.000000,1.000000,0.000000,0.000000,0.000000);
+	uv(1.000000,0.000000,1.000000,1.000000,0.000000,1.000000,0.000000,0.000000);
+	uv(0.000000,1.000000,1.000000,1.000000,1.000000,0.000000,0.000000,0.000000);
+    */
+	f3(26,27,28,0);
+	f4(180,173,178,177,0);
+	f4(68,67,59,60,0);
+	f4(14,34,33,13,0);
+	f3(21,14,19,0);
+	f4(59,67,70,64,0);
+	f4(24,40,39,22,0);
+	f3(55,175,178,0);
+	f3(2,1,0,0);
+	f4(0,26,28,2,0);
+	f4(1,27,26,0,0);
+	f4(2,28,27,1,0);
+	f4(8,16,21,24,0);
+	f4(22,10,13,8,0);
+	f4(189,183,180,45,0);
+	f4(6,25,4,19,0);
+	f4(15,14,13,10,0);
+	f4(70,67,68,69,0);
+	f3(22,8,24,0);
+	f4(8,31,36,16,0);
+	f4(21,38,40,24,0);
+	f4(22,39,32,10,0);
+	f4(13,33,31,8,0);
+	f4(44,192,175,55,0);
+	f4(16,36,34,14,0);
+	f4(58,63,72,66,0);
+	f4(49,52,51,50,0);
+	f4(45,48,43,189,0);
+	f4(31,39,40,36,0);
+	f4(32,39,31,33,0);
+	f4(32,33,34,42,0);
+	f4(48,47,197,43,0);
+	f4(62,63,58,57,0);
+	f4(30,37,197,190,0);
+	f4(41,52,49,29,0);
+	f4(37,51,52,41,0);
+	f4(26,41,29,23,0);
+	f4(57,58,66,65,0);
+	f4(30,50,51,37,0);
+	f4(19,23,29,49,0);
+	f4(189,43,186,183,0);
+	f4(72,63,62,71,0);
+	f4(19,72,35,21,0);
+	f3(21,16,14,0);
+	f4(71,62,57,65,0);
+	f4(69,68,60,61,0);
+	f4(195,66,180,181,0);
+	f4(26,28,188,186,0);
+	f4(15,6,19,14,0);
+	f4(10,32,42,56,0);
+	f3(10,56,15,0);
+	f4(56,54,53,55,0);
+	f3(187,186,188,0);
+	f4(15,178,188,28,0);
+	f4(47,46,190,197,0);
+	f4(193,194,177,176,0);
+	f3(177,181,180,0);
+	f4(54,69,61,53,0);
+	f4(199,200,184,182,0);
+	f4(34,38,54,56,0);
+	f3(170,171,169,0);
+	f4(188,186,169,171,0);
+	f4(186,187,170,169,0);
+	f4(187,188,171,170,0);
+	f4(181,179,174,184,0);
+	f4(176,175,182,174,0);
+	f3(179,181,177,0);
+	f4(172,185,173,180,0);
+	f4(176,177,178,175,0);
+	f4(60,59,64,61,0);
+	f3(174,182,184,0);
+	f4(196,191,174,179,0);
+	f4(200,198,181,184,0);
+	f4(192,199,182,175,0);
+	f4(191,193,176,174,0);
+	f4(56,55,178,15,0);
+	f4(194,196,179,177,0);
+	f4(70,71,65,64,0);
+	f4(47,48,45,46,0);
+	f3(34,56,42,0);
+	f4(200,199,191,196,0);
+	f4(191,199,192,193,0);
+	f4(194,193,192,44,0);
+	f4(72,19,180,66,0);
+	f4(50,30,190,46,0);
+	f4(43,41,26,186,0);
+	f4(36,40,38,34,0);
+	f4(198,200,196,194,0);
+	f4(55,159,198,194,0);
+	f3(154,55,194,0);
+	f4(203,204,202,201,0);
+	f4(205,206,204,203,0);
+	f4(207,208,206,205,0);
+	f4(201,202,208,207,0);
+	f4(204,206,208,202,0);
+	f4(205,203,201,207,0);
+	f4(211,212,210,209,0);
+	f4(213,214,212,211,0);
+	f4(215,216,214,213,0);
+	f4(209,210,216,215,0);
+	f4(212,214,216,210,0);
+	f4(213,211,209,215,0);
+	f3(243,244,245,0);
+	f4(397,390,395,394,0);
+	f4(285,284,276,277,0);
+	f4(231,251,250,230,0);
+	f3(238,231,236,0);
+	f4(276,284,287,281,0);
+	f4(241,257,256,239,0);
+	f3(272,392,395,0);
+	f3(219,218,217,0);
+	f4(217,243,245,219,0);
+	f4(218,244,243,217,0);
+	f4(219,245,244,218,0);
+	f4(225,233,238,241,0);
+	f4(239,227,230,225,0);
+	f4(406,400,397,262,0);
+	f4(223,242,221,236,0);
+	f4(232,231,230,227,0);
+	f4(287,284,285,286,0);
+	f3(239,225,241,0);
+	f4(225,248,253,233,0);
+	f4(238,255,257,241,0);
+	f4(239,256,249,227,0);
+	f4(230,250,248,225,0);
+	f4(261,409,392,272,0);
+	f4(233,253,251,231,0);
+	f4(275,280,289,283,0);
+	f4(266,269,268,267,0);
+	f4(253,257,259,251,0);
+	f4(248,256,257,253,0);
+	f4(249,256,248,250,0);
+	f4(249,250,251,259,0);
+	f4(265,264,414,260,0);
+	f4(279,280,275,274,0);
+	f4(247,254,414,407,0);
+	f4(258,269,266,246,0);
+	f4(254,268,269,258,0);
+	f4(243,258,246,240,0);
+	f4(274,275,283,282,0);
+	f4(247,267,268,254,0);
+	f4(236,240,246,266,0);
+	f4(406,260,403,400,0);
+	f4(289,280,279,288,0);
+	f4(236,289,252,238,0);
+	f3(238,233,231,0);
+	f4(288,279,274,282,0);
+	f4(286,285,277,278,0);
+	f4(412,283,397,398,0);
+	f4(243,245,405,403,0);
+	f4(232,223,236,231,0);
+	f4(227,249,259,273,0);
+	f3(227,273,232,0);
+	f4(252,271,273,259,0);
+	f3(404,403,405,0);
+	f4(232,395,405,245,0);
+	f4(264,263,407,414,0);
+	f4(410,411,394,393,0);
+	f3(394,398,397,0);
+	f4(271,286,278,270,0);
+	f4(416,417,401,399,0);
+	f4(272,270,412,261,0);
+	f3(387,388,386,0);
+	f4(405,403,386,388,0);
+	f4(403,404,387,386,0);
+	f4(404,405,388,387,0);
+	f4(398,396,391,401,0);
+	f4(393,392,399,391,0);
+	f3(396,398,394,0);
+	f4(389,402,390,397,0);
+	f4(393,394,395,392,0);
+	f4(277,276,281,278,0);
+	f3(391,399,401,0);
+	f4(413,408,391,396,0);
+	f4(417,415,398,401,0);
+	f4(409,416,399,392,0);
+	f4(408,410,393,391,0);
+	f4(273,272,395,232,0);
+	f4(411,413,396,394,0);
+	f4(287,288,282,281,0);
+	f4(264,265,262,263,0);
+	f4(261,417,413,411,0);
+	f4(417,416,408,413,0);
+	f4(408,416,409,410,0);
+	f4(411,410,409,261,0);
+	f4(289,236,397,283,0);
+	f4(267,247,407,263,0);
+	f4(260,258,243,403,0);
+	f4(262,265,260,406,0);
+	f4(273,271,270,272,0);
+
+    this.computeCentroids();
+    this.computeNormals();
+    
+    function material_color( mi ) {
+        var m = materials[mi];
+        if( m.col_diffuse )
+            return (m.col_diffuse[0]*255 << 16) + (m.col_diffuse[1]*255 << 8) + m.col_diffuse[2]*255;
+        else if ( m.a_dbg_color )
+            return  m.a_dbg_color;
+        else 
+            return 0xffeeeeee;
+    }
+    
+    function v( x, y, z ) {
+        scope.vertices.push( new THREE.Vertex( new THREE.Vector3( x, y, z ) ) );
+    }
+
+    function f3( a, b, c, mi ) {
+        var material = scope.materials[ mi ];
+        scope.faces.push( new THREE.Face3( a, b, c, null, material ) );
+    }
+
+    function f4( a, b, c, d, mi ) {
+        var material = scope.materials[ mi ];
+        scope.faces.push( new THREE.Face4( a, b, c, d, null, material ) );
+    }
+
+    function f3n( a, b, c, mi, n1, n2, n3 ) {
+        var material = scope.materials[ mi ];
+        var n1x = normals[n1][0];
+        var n1y = normals[n1][1];
+        var n1z = normals[n1][2];
+        var n2x = normals[n2][0];
+        var n2y = normals[n2][1];
+        var n2z = normals[n2][2];
+        var n3x = normals[n3][0];
+        var n3y = normals[n3][1];
+        var n3z = normals[n3][2];
+        scope.faces.push( new THREE.Face3( a, b, c, 
+                          [new THREE.Vector3( n1x, n1y, n1z ), new THREE.Vector3( n2x, n2y, n2z ), new THREE.Vector3( n3x, n3y, n3z )], 
+                          material ) );
+    }
+
+    function f4n( a, b, c, d, mi, n1, n2, n3, n4 ) {
+        var material = scope.materials[ mi ];
+        var n1x = normals[n1][0];
+        var n1y = normals[n1][1];
+        var n1z = normals[n1][2];
+        var n2x = normals[n2][0];
+        var n2y = normals[n2][1];
+        var n2z = normals[n2][2];
+        var n3x = normals[n3][0];
+        var n3y = normals[n3][1];
+        var n3z = normals[n3][2];
+        var n4x = normals[n4][0];
+        var n4y = normals[n4][1];
+        var n4z = normals[n4][2];
+        scope.faces.push( new THREE.Face4( a, b, c, d,
+                          [new THREE.Vector3( n1x, n1y, n1z ), new THREE.Vector3( n2x, n2y, n2z ), new THREE.Vector3( n3x, n3y, n3z ), new THREE.Vector3( n4x, n4y, n4z )], 
+                          material ) );
+    }
+
+    function uv( u1, v1, u2, v2, u3, v3, u4, v4 ) {
+        var uv = [];
+        uv.push( new THREE.UV( u1, v1 ) );
+        uv.push( new THREE.UV( u2, v2 ) );
+        uv.push( new THREE.UV( u3, v3 ) );
+        if ( u4 && v4 ) uv.push( new THREE.UV( u4, v4 ) );
+        scope.uvs.push( uv );
+    }
+
+    function init_materials() {
+        scope.materials = [];
+        for(var i=0; i<materials.length; ++i) {
+            scope.materials[i] = [ create_material( materials[i], urlbase ) ];
+        }
+    }
+    
+    function is_pow2( n ) {
+        var l = Math.log(n) / Math.LN2;
+        return Math.floor(l) == l;
+    }
+    
+    function nearest_pow2(n) {
+        var l = Math.log(n) / Math.LN2;
+        return Math.pow( 2, Math.round(l) );
+    }
+    
+    function create_material( m ) {
+        var material;
+        /*
+        if( m.map_diffuse && urlbase ) {
+            var texture = document.createElement( 'canvas' );
+            
+            // material = new THREE.MeshBitmapMaterial( texture );
+            material = new THREE.MeshBasicMaterial( { map: loadImage( urlbase ) }
+            
+            function loadImage( path ) {
+
+        		var image = document.createElement( 'img' );
+        		var texture = new THREE.Texture( image, THREE.UVMapping )
+
+        		image.onload = function () { texture.loaded = true; };
+        		image.src = path;
+
+        		return texture;
+
+        	}
+            
+        }
+        else */
+        if( m.col_diffuse ) {
+            var color = (m.col_diffuse[0]*255 << 16) + (m.col_diffuse[1]*255 << 8) + m.col_diffuse[2]*255;
+            material = new THREE.MeshBasicMaterial( {color:color, opacity:m.transparency} );
+        }
+        else if( m.a_dbg_color ) {
+            material = new THREE.MeshBasicMaterial( {color:m.a_dbg_color} );
+        }
+        else {
+            material = new THREE.MeshBasicMaterial( {color:0xffeeeeee} );
+        }
+
+        return material;
+    }
+    
+}
+
+Nano.prototype = new THREE.Geometry();
+Nano.prototype.constructor = Nano;

+ 1137 - 0
examples/obj/nano/Nano.obj

@@ -0,0 +1,1137 @@
+# WaveFront *.obj file (generated by CINEMA 4D)
+
+g NanoBody1
+usemtl Mat
+v 60.031319 139.365082 59.670143
+v 60.031319 169.365082 23.670141
+v 60.031319 169.365082 23.670141
+v 60.031319 85.365082 41.670143
+v 60.031319 85.365082 59.670143
+v 60.031319 139.365082 59.670143
+v 60.031319 169.365082 23.670141
+v 60.031319 -70.634918 59.670143
+v 60.031319 -118.634918 17.670141
+v 60.031319 -142.634918 59.670143
+v 60.031319 -142.634918 -72.329857
+v 60.031319 -70.634918 41.670143
+v 60.031319 85.365082 41.670143
+v 60.031319 -118.634918 -24.329859
+v 60.031319 -94.634918 -24.329859
+v 60.031319 169.365082 -72.329857
+v 60.031319 -94.634918 17.670141
+v 60.031319 85.365082 59.670143
+v 60.031319 -70.634918 41.670143
+v 60.031319 85.365082 41.670143
+v 60.031319 -70.634918 59.670143
+v 60.031319 -70.634918 41.670143
+v 60.031319 -142.634918 59.670143
+v 60.031319 85.365082 59.670143
+v 60.031319 -70.634918 59.670143
+v 60.031319 139.365082 59.670143
+v 60.031319 139.365082 59.670143
+v 60.031319 169.365082 23.670141
+v 60.031319 169.365082 23.670141
+v 30.031319 85.365082 59.670143
+v 18.031319 85.365082 59.670143
+v 24.031319 -118.634918 17.670141
+v 24.031319 -142.634918 -72.329857
+v 24.031319 -118.634918 -24.329859
+v 24.031319 -94.634918 -24.329859
+v 24.031319 -70.634918 41.670143
+v 24.031319 -94.634918 17.670141
+v 18.031319 115.365082 59.670143
+v 24.031319 -70.634918 41.670143
+v 24.031319 -142.634918 59.670143
+v 24.031319 -70.634918 59.670143
+v 30.031319 115.365082 59.670143
+v 24.031319 -70.634918 -72.329857
+v -29.968681 115.365082 59.670143
+v -23.968681 -70.634918 -72.329857
+v -29.968681 85.365082 41.670143
+v -17.968681 85.365082 41.670143
+v -17.968681 115.365082 41.670143
+v -29.968681 115.365082 41.670143
+v 30.031319 85.365082 41.670143
+v 18.031319 85.365082 41.670143
+v 18.031319 115.365082 41.670143
+v 30.031319 115.365082 41.670143
+v -23.968681 -28.634914 41.670143
+v 24.031319 -28.634914 41.670143
+v -23.968681 -28.634914 -72.329857
+v 24.031319 -28.634914 -72.329857
+v -23.968681 43.365086 29.670141
+v -23.968681 61.365086 29.670141
+v -23.968681 19.365086 29.670141
+v -23.968681 7.365086 29.670141
+v -23.968681 7.365086 41.670143
+v 24.031319 43.365086 29.670141
+v 24.031319 61.365086 29.670141
+v -23.968681 19.365086 41.670143
+v -23.968681 43.365086 41.670143
+v -23.968681 61.365086 41.670143
+v 24.031319 19.365086 29.670141
+v 24.031319 7.365086 29.670141
+v 24.031319 7.365086 41.670143
+v 24.031319 19.365086 41.670143
+v 24.031319 43.365086 41.670143
+v 24.031319 61.365086 41.670143
+v -59.968681 139.365082 59.670143
+v -59.968681 169.365082 23.670141
+v -59.968681 169.365082 23.670141
+v -59.968681 85.365082 59.670143
+v -59.968681 169.365082 23.670141
+v -59.968681 -118.634918 17.670141
+v -59.968681 -142.634918 -72.329857
+v -59.968681 -118.634918 -24.329859
+v -59.968681 -94.634918 -24.329859
+v -59.968681 169.365082 -72.329857
+v -59.968681 -94.634918 17.670141
+v -59.968681 85.365082 41.670143
+v -59.968681 -70.634918 41.670143
+v -59.968681 -142.634918 59.670143
+v -59.968681 85.365082 59.670143
+v -59.968681 -70.634918 59.670143
+v -59.968681 139.365082 59.670143
+v -59.968681 139.365082 59.670143
+v -59.968681 169.365082 23.670141
+v -59.968681 169.365082 23.670141
+v -29.968681 85.365082 59.670143
+v -17.968681 85.365082 59.670143
+v -23.968681 -118.634918 17.670141
+v -23.968681 -142.634918 -72.329857
+v -23.968681 -118.634918 -24.329859
+v -23.968681 -94.634918 -24.329859
+v -23.968681 -70.634918 41.670143
+v -23.968681 -94.634918 17.670141
+v -17.968681 115.365082 59.670143
+v -23.968681 -70.634918 41.670143
+v -23.968681 -142.634918 59.670143
+v -23.968681 -70.634918 59.670143
+v -29.968681 115.365082 59.670143
+v -23.968681 -70.634918 -72.329857
+v -29.968681 85.365082 41.670143
+v -17.968681 85.365082 41.670143
+v -17.968681 115.365082 41.670143
+v -29.968681 115.365082 41.670143
+v -23.968681 -28.634914 41.670143
+v -23.968681 -28.634914 -72.329857
+v -23.968681 43.365086 29.670141
+v -23.968681 61.365086 29.670141
+v -23.968681 19.365086 29.670141
+v -23.968681 7.365086 29.670141
+v -23.968681 7.365086 41.670143
+v -23.968681 19.365086 41.670143
+v -23.968681 43.365086 41.670143
+v -23.968681 61.365086 41.670143
+v -59.968681 139.365082 59.670143
+v -59.968681 169.365082 23.670141
+v -59.968681 169.365082 23.670141
+v -59.968681 85.365082 59.670143
+v -59.968681 169.365082 23.670141
+v -59.968681 -118.634918 17.670141
+v -59.968681 -142.634918 -72.329857
+v -59.968681 -118.634918 -24.329859
+v -59.968681 -94.634918 -24.329859
+v -59.968681 169.365082 -72.329857
+v -59.968681 -94.634918 17.670141
+v -59.968681 85.365082 41.670143
+v -59.968681 -70.634918 41.670143
+v -59.968681 -142.634918 59.670143
+v -59.968681 85.365082 59.670143
+v -59.968681 -70.634918 59.670143
+v -59.968681 139.365082 59.670143
+v -59.968681 139.365082 59.670143
+v -59.968681 169.365082 23.670141
+v -59.968681 169.365082 23.670141
+v -29.968681 85.365082 59.670143
+v -17.968681 85.365082 59.670143
+v -23.968681 -118.634918 17.670141
+v -23.968681 -142.634918 -72.329857
+v -23.968681 -118.634918 -24.329859
+v -23.968681 -94.634918 -24.329859
+v -23.968681 -70.634918 41.670143
+v -23.968681 -94.634918 17.670141
+v -17.968681 115.365082 59.670143
+v -23.968681 -70.634918 41.670143
+v -23.968681 -142.634918 59.670143
+v -23.968681 -70.634918 59.670143
+v -29.968681 115.365082 59.670143
+v -23.968681 -70.634918 -72.329857
+v -29.968681 85.365082 41.670143
+v -17.968681 85.365082 41.670143
+v -17.968681 115.365082 41.670143
+v -29.968681 115.365082 41.670143
+v -23.968681 -28.634914 41.670143
+v -23.968681 -28.634914 -72.329857
+v -23.968681 43.365086 29.670141
+v -23.968681 61.365086 29.670141
+v -23.968681 19.365086 29.670141
+v -23.968681 7.365086 29.670141
+v -23.968681 7.365086 41.670143
+v -23.968681 19.365086 41.670143
+v -23.968681 43.365086 41.670143
+v -23.968681 61.365086 41.670143
+v -59.968681 139.365082 59.670143
+v -59.968681 169.365082 23.670141
+v -59.968681 169.365082 23.670141
+v -59.968681 85.365082 59.670143
+v -59.968681 169.365082 23.670141
+v -59.968681 -118.634918 17.670141
+v -59.968681 -142.634918 -72.329857
+v -59.968681 -118.634918 -24.329859
+v -59.968681 -94.634918 -24.329859
+v -59.968681 169.365082 -72.329857
+v -59.968681 -94.634918 17.670141
+v -59.968681 85.365082 41.670143
+v -59.968681 -70.634918 41.670143
+v -59.968681 -142.634918 59.670143
+v -59.968681 85.365082 59.670143
+v -59.968681 -70.634918 59.670143
+v -59.968681 139.365082 59.670143
+v -59.968681 139.365082 59.670143
+v -59.968681 169.365082 23.670141
+v -59.968681 169.365082 23.670141
+v -29.968681 85.365082 59.670143
+v -17.968681 85.365082 59.670143
+v -23.968681 -118.634918 17.670141
+v -23.968681 -142.634918 -72.329857
+v -23.968681 -118.634918 -24.329859
+v -23.968681 -94.634918 -24.329859
+v -23.968681 -70.634918 41.670143
+v -23.968681 -94.634918 17.670141
+v -17.968681 115.365082 59.670143
+v -23.968681 -70.634918 41.670143
+v -23.968681 -142.634918 59.670143
+v -23.968681 -70.634918 59.670143
+
+vt 0 0 0
+vt 0 1 0
+vt 0.996643 1 0
+vt 1 1 0
+vt 1 1 0
+vt 1 0 0
+vt 1 0 0
+vt 1 1 0
+vt 0 1 0
+vt 0 0 0
+vt 1 1 0
+vt 0 1 0
+vt 0 1 0
+vt 1 1 0
+vt 0 0 0
+vt 1 0 0
+vt 1 1 0
+vt 0 0 0
+vt 0 1 0
+vt 1 1 0
+vt 1 0 0
+vt 0 0 0
+vt 1 0 0
+vt 0 1 0
+vt 1 0 0
+vt 1 1 0
+vt 1 0 0
+vt 0 1 0
+vt 0 0 0
+vt 1 1 0
+vt 0 0 0
+vt 1 0 0
+vt 0 1 0
+vt 0 1 0
+vt 1 0 0
+vt 1 0 0
+vt 0 1 0
+vt 0 1 0
+vt 1 0 0
+vt 0 0 0
+vt 1 1 0
+vt 1 1 0
+vt 0 0 0
+vt 0.996643 1 0
+vt 0 1 0
+vt 1 0 0
+vt 1 1 0
+vt 1 1 0
+vt 0 1 0
+vt 1 0 0
+vt 0 0 0
+vt 1 1 0
+vt 0 0 0
+vt 1 1 0
+vt 0 0 0
+vt 1 0 0
+vt 0 1 0
+vt 1 1 0
+vt 0 0 0
+vt 0 1 0
+vt 1 1 0
+vt 1 0 0
+vt 1 0 0
+vt 0 1 0
+vt 1 1 0
+vt 1 0 0
+vt 0 1 0
+vt 0 0 0
+vt 1 0 0
+vt 1 0 0
+vt 1 1 0
+vt 1 0 0
+vt 0 1 0
+vt 1 1 0
+vt 0 1 0
+vt 1 0 0
+vt 0 1 0
+vt 0 0 0
+vt 1 0 0
+vt 0 1 0
+vt 0 0 0
+vt 1 0 0
+vt 0 1 0
+vt 0 1 0
+vt 1 0 0
+vt 0.167026 0.167027 0
+vt 1 1 0
+vt 0 1 0
+vt 0 1 0
+vt 0.167026 0.832974 0
+vt 1 0 0
+vt 0.832974 0.832974 0
+vt 1 1 0
+vt 1 0 0
+vt 0.832974 0.167027 0
+vt 1 1 0
+vt 1 0 0
+vt 0 1 0
+vt 1 1 0
+vt 0.167026 0.167027 0
+vt 0 0 0
+vt 1 0 0
+vt 0.167026 0.832974 0
+vt 1 1 0
+vt 1 0 0
+vt 0.832974 0.832974 0
+vt 1 1 0
+vt 1 0 0
+vt 0.832974 0.167027 0
+vt 0 1 0
+vt 1 1 0
+vt 1 0 0
+vt 0 0 0
+vt 1 1 0
+vt 0 0 0
+vt 0 1 0
+vt 1 1 0
+vt 0 1 0
+vt 0 0 0
+vt 1 1 0
+vt 1 0 0
+vt 0 1 0
+vt 1 1 0
+vt 0 0 0
+vt 1 1 0
+vt 0 0 0
+vt 1 0 0
+vt 1 1 0
+vt 0 1 0
+vt 0 0 0
+vt 1 1 0
+vt 0 1 0
+vt 1 0 0
+vt 0 0 0
+vt 1 1 0
+vt 1 0 0
+vt 0 1 0
+vt 1 1 0
+vt 0 1 0
+vt 0 0 0
+vt 0 1 0
+vt 1 1 0
+vt 1 1 0
+vt 1 0 0
+vt 1 0 0
+vt 0 0 0
+vt 1 0 0
+vt 0 0 0
+vt 0 0 0
+vt 0 1 0
+vt 1 1 0
+vt 1 0 0
+vt 0 0 0
+vt 0 0 0
+vt 1 1 0
+vt 0 1 0
+vt 1 0 0
+vt 1 0 0
+vt 0 0 0
+vt 0 1 0
+vt 0.996643 1 0
+vt 1 1 0
+vt 1 1 0
+vt 1 0 0
+vt 1 0 0
+vt 0 1 0
+vt 1 1 0
+vt 0 0 0
+vt 1 1 0
+vt 0 1 0
+vt 1 1 0
+vt 0 0 0
+vt 0 1 0
+vt 1 0 0
+vt 1 1 0
+vt 0 1 0
+vt 1 1 0
+vt 0 0 0
+vt 1 0 0
+vt 1 0 0
+vt 0 1 0
+vt 1 1 0
+vt 1 0 0
+vt 1 1 0
+vt 0 0 0
+vt 1 0 0
+vt 0 1 0
+vt 1 1 0
+vt 1 0 0
+vt 0 1 0
+vt 0 0 0
+vt 0 1 0
+vt 1 0 0
+vt 0 1 0
+vt 1 0 0
+vt 0 1 0
+vt 1 0 0
+vt 0 0 0
+vt 1 1 0
+vt 0 1 0
+vt 0 0 0
+vt 0.996643 1 0
+vt 1 1 0
+vt 1 1 0
+vt 0 1 0
+vt 1 1 0
+vt 0 0 0
+vt 0 1 0
+vt 1 1 0
+vt 0 0 0
+vt 0 0 0
+vt 1 1 0
+vt 1 0 0
+vt 0 1 0
+vt 1 1 0
+vt 0 1 0
+vt 0 0 0
+vt 1 1 0
+vt 1 0 0
+vt 1 0 0
+vt 1 0 0
+vt 0 1 0
+vt 1 1 0
+vt 0 1 0
+vt 1 1 0
+vt 0 0 0
+vt 1 1 0
+vt 0 1 0
+vt 1 0 0
+vt 0 1 0
+vt 1 1 0
+vt 0 1 0
+
+f 27/43 28/44 29/47 
+f 181/186 174/167 179/181 178/178 
+f 69/146 68/144 60/125 61/129 
+f 15/21 35/62 34/58 14/17 
+f 22/33 15/20 20/27 
+f 60/126 68/144 71/151 65/137 
+f 25/38 41/75 40/72 23/35 
+f 56/114 176/173 179/180 
+f 3/6 2/4 1/2 
+f 1/1 27/43 29/47 3/5 
+f 2/3 28/44 27/43 1/1 
+f 3/5 29/47 28/44 2/3 
+f 9/12 17/26 22/32 25/40 
+f 23/34 11/14 14/16 9/10 
+f 190/204 184/195 181/185 46/88 
+f 7/9 26/41 5/7 20/29 
+f 16/24 15/20 14/16 11/15 
+f 71/150 68/143 69/145 70/148 
+f 23/34 9/11 25/39 
+f 9/10 32/53 37/66 17/25 
+f 22/30 39/71 41/75 25/38 
+f 23/34 40/73 33/54 11/14 
+f 14/16 34/56 32/53 9/10 
+f 45/85 193/212 176/173 56/115 
+f 17/26 37/65 35/60 15/19 
+f 59/124 64/136 73/155 67/141 
+f 50/100 53/109 52/106 51/103 
+f 46/87 49/97 44/81 190/205 
+f 32/53 40/72 41/74 37/64 
+f 33/55 40/72 32/52 34/57 
+f 33/55 34/56 35/61 43/80 
+f 49/96 48/94 198/226 44/83 
+f 63/134 64/136 59/123 58/122 
+f 31/51 38/69 198/225 191/208 
+f 42/78 53/108 50/99 30/49 
+f 38/68 52/105 53/107 42/77 
+f 27/43 42/76 30/48 24/37 
+f 58/121 59/123 67/141 66/140 
+f 31/51 51/102 52/104 38/67 
+f 20/29 24/36 30/48 50/98 
+f 190/204 44/82 187/201 184/194 
+f 73/156 64/135 63/133 72/153 
+f 20/28 73/155 36/63 22/31 
+f 22/30 17/25 15/18 
+f 72/153 63/133 58/120 66/139 
+f 70/148 69/145 61/128 62/132 
+f 196/220 67/142 181/187 182/191 
+f 27/43 29/46 189/203 187/200 
+f 16/24 7/8 20/27 15/18 
+f 11/13 33/54 43/79 57/119 
+f 11/13 57/117 16/23 
+f 57/119 55/112 54/111 56/116 
+f 188/202 187/201 189/203 
+f 16/22 179/180 189/203 29/45 
+f 48/93 47/91 191/207 198/224 
+f 194/215 195/219 178/179 177/175 
+f 178/177 182/190 181/186 
+f 55/113 70/147 62/131 54/110 
+f 200/229 201/232 185/196 183/193 
+f 35/60 39/71 55/112 57/119 
+f 171/162 172/164 170/160 
+f 189/203 187/201 170/159 172/163 
+f 187/201 188/202 171/161 170/159 
+f 188/202 189/203 172/163 171/161 
+f 182/189 180/182 175/170 185/198 
+f 177/174 176/171 183/192 175/168 
+f 180/183 182/188 178/178 
+f 173/165 186/199 174/166 181/185 
+f 177/174 178/177 179/181 176/172 
+f 61/127 60/125 65/137 62/130 
+f 175/169 183/192 185/197 
+f 197/221 192/210 175/168 180/183 
+f 201/232 199/227 182/188 185/196 
+f 193/212 200/230 183/192 176/171 
+f 192/210 194/213 177/174 175/168 
+f 57/118 56/114 179/180 16/22 
+f 195/216 197/223 180/182 178/176 
+f 71/149 72/152 66/138 65/137 
+f 48/92 49/95 46/86 47/90 
+f 35/60 57/117 43/79 
+f 201/231 200/229 192/210 197/222 
+f 192/209 200/229 193/211 194/214 
+f 195/218 194/213 193/211 45/84 
+f 73/154 20/27 181/184 67/141 
+f 51/101 31/50 191/206 47/89 
+f 44/81 42/76 27/42 187/200 
+f 37/64 41/74 39/70 35/59 
+f 199/228 201/231 197/221 195/217 
+f 56/115 160/158 199/227 195/216 
+f 155/157 56/114 195/216 
+
+g NanoArmL
+usemtl Mat
+v -83.910797 -40.962219 -7.151447
+v -83.910797 116.537781 -7.151447
+v -61.410797 -40.962219 -7.151447
+v -61.410797 116.537781 -7.151447
+v -61.410797 -40.962219 -59.651447
+v -61.410797 116.537781 -59.651447
+v -83.910797 -40.962219 -59.651447
+v -83.910797 116.537781 -59.651447
+
+vt 0 1 0
+vt 1 0 0
+vt 0 0 0
+vt 0 0 0
+vt 1 1 0
+vt 0 1 0
+vt 1 1 0
+vt 0 0 0
+vt 1 0 0
+vt 1 0 0
+vt 0 1 0
+vt 1 1 0
+vt 1 0 0
+vt 0 0 0
+vt 1 1 0
+vt 0 1 0
+vt 0 0 0
+vt 1 0 0
+vt 0 1 0
+vt 1 1 0
+
+f 204/241 205/244 203/238 202/235 
+f 206/245 207/247 205/243 204/240 
+f 208/250 209/252 207/248 206/246 
+f 202/234 203/237 209/251 208/249 
+f 205/242 207/247 209/251 203/236 
+f 206/245 204/239 202/233 208/249 
+
+g NanoArmR
+usemtl Mat
+v 61.096977 -40.962219 -7.151447
+v 61.096977 116.537781 -7.151447
+v 83.596977 -40.962219 -7.151447
+v 83.596977 116.537781 -7.151447
+v 83.596977 -40.962219 -59.651447
+v 83.596977 116.537781 -59.651447
+v 61.096977 -40.962219 -59.651447
+v 61.096977 116.537781 -59.651447
+
+vt 0 1 0
+vt 1 0 0
+vt 0 0 0
+vt 0 0 0
+vt 1 1 0
+vt 0 1 0
+vt 1 1 0
+vt 0 0 0
+vt 1 0 0
+vt 1 0 0
+vt 0 1 0
+vt 1 1 0
+vt 1 0 0
+vt 0 0 0
+vt 1 1 0
+vt 0 1 0
+vt 0 0 0
+vt 1 0 0
+vt 0 1 0
+vt 1 1 0
+
+f 212/261 213/264 211/258 210/255 
+f 214/265 215/267 213/263 212/260 
+f 216/270 217/272 215/268 214/266 
+f 210/254 211/257 217/271 216/269 
+f 213/262 215/267 217/271 211/256 
+f 214/265 212/259 210/253 216/269 
+
+g NanoBody
+usemtl Mat
+v 60.031319 139.365082 59.670143
+v 60.031319 169.365082 23.670141
+v 60.031319 169.365082 23.670141
+v 60.031319 85.365082 41.670143
+v 60.031319 85.365082 59.670143
+v 60.031319 139.365082 59.670143
+v 60.031319 169.365082 23.670141
+v 60.031319 -70.634918 59.670143
+v 60.031319 -118.634918 17.670141
+v 60.031319 -142.634918 59.670143
+v 60.031319 -142.634918 -72.329857
+v 60.031319 -70.634918 41.670143
+v 60.031319 85.365082 41.670143
+v 60.031319 -118.634918 -24.329859
+v 60.031319 -94.634918 -24.329859
+v 60.031319 169.365082 -72.329857
+v 60.031319 -94.634918 17.670141
+v 60.031319 85.365082 59.670143
+v 60.031319 -70.634918 41.670143
+v 60.031319 85.365082 41.670143
+v 60.031319 -70.634918 59.670143
+v 60.031319 -70.634918 41.670143
+v 60.031319 -142.634918 59.670143
+v 60.031319 85.365082 59.670143
+v 60.031319 -70.634918 59.670143
+v 60.031319 139.365082 59.670143
+v 60.031319 139.365082 59.670143
+v 60.031319 169.365082 23.670141
+v 60.031319 169.365082 23.670141
+v 30.031319 85.365082 59.670143
+v 18.031319 85.365082 59.670143
+v 24.031319 -118.634918 17.670141
+v 24.031319 -142.634918 -72.329857
+v 24.031319 -118.634918 -24.329859
+v 24.031319 -94.634918 -24.329859
+v 24.031319 -70.634918 41.670143
+v 24.031319 -94.634918 17.670141
+v 18.031319 115.365082 59.670143
+v 24.031319 -70.634918 41.670143
+v 24.031319 -142.634918 59.670143
+v 24.031319 -70.634918 59.670143
+v 30.031319 115.365082 59.670143
+v 24.031319 -70.634918 -72.329857
+v -29.968681 115.365082 59.670143
+v -23.968681 -70.634918 -72.329857
+v -29.968681 85.365082 41.670143
+v -17.968681 85.365082 41.670143
+v -17.968681 115.365082 41.670143
+v -29.968681 115.365082 41.670143
+v 30.031319 85.365082 41.670143
+v 18.031319 85.365082 41.670143
+v 18.031319 115.365082 41.670143
+v 30.031319 115.365082 41.670143
+v -23.968681 -28.634914 41.670143
+v 24.031319 -28.634914 41.670143
+v -23.968681 -28.634914 -72.329857
+v 24.031319 -28.634914 -72.329857
+v -23.968681 43.365086 29.670141
+v -23.968681 61.365086 29.670141
+v -23.968681 19.365086 29.670141
+v -23.968681 7.365086 29.670141
+v -23.968681 7.365086 41.670143
+v 24.031319 43.365086 29.670141
+v 24.031319 61.365086 29.670141
+v -23.968681 19.365086 41.670143
+v -23.968681 43.365086 41.670143
+v -23.968681 61.365086 41.670143
+v 24.031319 19.365086 29.670141
+v 24.031319 7.365086 29.670141
+v 24.031319 7.365086 41.670143
+v 24.031319 19.365086 41.670143
+v 24.031319 43.365086 41.670143
+v 24.031319 61.365086 41.670143
+v -59.968681 139.365082 59.670143
+v -59.968681 169.365082 23.670141
+v -59.968681 169.365082 23.670141
+v -59.968681 85.365082 59.670143
+v -59.968681 169.365082 23.670141
+v -59.968681 -118.634918 17.670141
+v -59.968681 -142.634918 -72.329857
+v -59.968681 -118.634918 -24.329859
+v -59.968681 -94.634918 -24.329859
+v -59.968681 169.365082 -72.329857
+v -59.968681 -94.634918 17.670141
+v -59.968681 85.365082 41.670143
+v -59.968681 -70.634918 41.670143
+v -59.968681 -142.634918 59.670143
+v -59.968681 85.365082 59.670143
+v -59.968681 -70.634918 59.670143
+v -59.968681 139.365082 59.670143
+v -59.968681 139.365082 59.670143
+v -59.968681 169.365082 23.670141
+v -59.968681 169.365082 23.670141
+v -29.968681 85.365082 59.670143
+v -17.968681 85.365082 59.670143
+v -23.968681 -118.634918 17.670141
+v -23.968681 -142.634918 -72.329857
+v -23.968681 -118.634918 -24.329859
+v -23.968681 -94.634918 -24.329859
+v -23.968681 -70.634918 41.670143
+v -23.968681 -94.634918 17.670141
+v -17.968681 115.365082 59.670143
+v -23.968681 -70.634918 41.670143
+v -23.968681 -142.634918 59.670143
+v -23.968681 -70.634918 59.670143
+v -29.968681 115.365082 59.670143
+v -23.968681 -70.634918 -72.329857
+v -29.968681 85.365082 41.670143
+v -17.968681 85.365082 41.670143
+v -17.968681 115.365082 41.670143
+v -29.968681 115.365082 41.670143
+v -23.968681 -28.634914 41.670143
+v -23.968681 -28.634914 -72.329857
+v -23.968681 43.365086 29.670141
+v -23.968681 61.365086 29.670141
+v -23.968681 19.365086 29.670141
+v -23.968681 7.365086 29.670141
+v -23.968681 7.365086 41.670143
+v -23.968681 19.365086 41.670143
+v -23.968681 43.365086 41.670143
+v -23.968681 61.365086 41.670143
+v -59.968681 139.365082 59.670143
+v -59.968681 169.365082 23.670141
+v -59.968681 169.365082 23.670141
+v -59.968681 85.365082 59.670143
+v -59.968681 169.365082 23.670141
+v -59.968681 -118.634918 17.670141
+v -59.968681 -142.634918 -72.329857
+v -59.968681 -118.634918 -24.329859
+v -59.968681 -94.634918 -24.329859
+v -59.968681 169.365082 -72.329857
+v -59.968681 -94.634918 17.670141
+v -59.968681 85.365082 41.670143
+v -59.968681 -70.634918 41.670143
+v -59.968681 -142.634918 59.670143
+v -59.968681 85.365082 59.670143
+v -59.968681 -70.634918 59.670143
+v -59.968681 139.365082 59.670143
+v -59.968681 139.365082 59.670143
+v -59.968681 169.365082 23.670141
+v -59.968681 169.365082 23.670141
+v -29.968681 85.365082 59.670143
+v -17.968681 85.365082 59.670143
+v -23.968681 -118.634918 17.670141
+v -23.968681 -142.634918 -72.329857
+v -23.968681 -118.634918 -24.329859
+v -23.968681 -94.634918 -24.329859
+v -23.968681 -70.634918 41.670143
+v -23.968681 -94.634918 17.670141
+v -17.968681 115.365082 59.670143
+v -23.968681 -70.634918 41.670143
+v -23.968681 -142.634918 59.670143
+v -23.968681 -70.634918 59.670143
+v -29.968681 115.365082 59.670143
+v -23.968681 -70.634918 -72.329857
+v -29.968681 85.365082 41.670143
+v -17.968681 85.365082 41.670143
+v -17.968681 115.365082 41.670143
+v -29.968681 115.365082 41.670143
+v -23.968681 -28.634914 41.670143
+v -23.968681 -28.634914 -72.329857
+v -23.968681 43.365086 29.670141
+v -23.968681 61.365086 29.670141
+v -23.968681 19.365086 29.670141
+v -23.968681 7.365086 29.670141
+v -23.968681 7.365086 41.670143
+v -23.968681 19.365086 41.670143
+v -23.968681 43.365086 41.670143
+v -23.968681 61.365086 41.670143
+v -59.968681 139.365082 59.670143
+v -59.968681 169.365082 23.670141
+v -59.968681 169.365082 23.670141
+v -59.968681 85.365082 59.670143
+v -59.968681 169.365082 23.670141
+v -59.968681 -118.634918 17.670141
+v -59.968681 -142.634918 -72.329857
+v -59.968681 -118.634918 -24.329859
+v -59.968681 -94.634918 -24.329859
+v -59.968681 169.365082 -72.329857
+v -59.968681 -94.634918 17.670141
+v -59.968681 85.365082 41.670143
+v -59.968681 -70.634918 41.670143
+v -59.968681 -142.634918 59.670143
+v -59.968681 85.365082 59.670143
+v -59.968681 -70.634918 59.670143
+v -59.968681 139.365082 59.670143
+v -59.968681 139.365082 59.670143
+v -59.968681 169.365082 23.670141
+v -59.968681 169.365082 23.670141
+v -29.968681 85.365082 59.670143
+v -17.968681 85.365082 59.670143
+v -23.968681 -118.634918 17.670141
+v -23.968681 -142.634918 -72.329857
+v -23.968681 -118.634918 -24.329859
+v -23.968681 -94.634918 -24.329859
+v -23.968681 -70.634918 41.670143
+v -23.968681 -94.634918 17.670141
+v -17.968681 115.365082 59.670143
+v -23.968681 -70.634918 41.670143
+v -23.968681 -142.634918 59.670143
+v -23.968681 -70.634918 59.670143
+
+vt 0 0 0
+vt 0 1 0
+vt 0.996643 1 0
+vt 1 1 0
+vt 1 1 0
+vt 1 0 0
+vt 1 0 0
+vt 1 1 0
+vt 0 1 0
+vt 0 0 0
+vt 1 1 0
+vt 0 1 0
+vt 0 1 0
+vt 1 1 0
+vt 0 0 0
+vt 1 0 0
+vt 1 1 0
+vt 0 0 0
+vt 0 1 0
+vt 1 1 0
+vt 1 0 0
+vt 0 0 0
+vt 1 0 0
+vt 0 1 0
+vt 1 0 0
+vt 1 1 0
+vt 1 0 0
+vt 0 1 0
+vt 0 0 0
+vt 1 1 0
+vt 0 0 0
+vt 1 0 0
+vt 0 1 0
+vt 0 1 0
+vt 1 0 0
+vt 1 0 0
+vt 0 1 0
+vt 0 1 0
+vt 1 0 0
+vt 0 0 0
+vt 1 1 0
+vt 1 1 0
+vt 0 0 0
+vt 0.996643 1 0
+vt 0 1 0
+vt 1 0 0
+vt 1 1 0
+vt 1 1 0
+vt 0 1 0
+vt 1 0 0
+vt 0 0 0
+vt 1 1 0
+vt 0 0 0
+vt 1 1 0
+vt 0 0 0
+vt 1 0 0
+vt 0 1 0
+vt 1 1 0
+vt 1 1 0
+vt 0 1 0
+vt 1 0 0
+vt 0 0 0
+vt 1 0 0
+vt 0 1 0
+vt 0 0 0
+vt 1 1 0
+vt 1 0 0
+vt 0 1 0
+vt 0 0 0
+vt 1 0 0
+vt 1 1 0
+vt 1 0 0
+vt 0 1 0
+vt 1 1 0
+vt 1 0 0
+vt 0 1 0
+vt 1 0 0
+vt 0 1 0
+vt 0 0 0
+vt 0 1 0
+vt 1 0 0
+vt 1 1 0
+vt 0 0 0
+vt 1 0 0
+vt 0 1 0
+vt 0 1 0
+vt 1 1 0
+vt 1 0 0
+vt 1 1 0
+vt 0.167026 0.167027 0
+vt 0 1 0
+vt 0 1 0
+vt 0.167026 0.832974 0
+vt 1 0 0
+vt 0.832974 0.832974 0
+vt 1 1 0
+vt 1 0 0
+vt 1 0 0
+vt 0.832974 0.167027 0
+vt 1 1 0
+vt 0 1 0
+vt 1 1 0
+vt 0.167026 0.167027 0
+vt 0 0 0
+vt 1 0 0
+vt 0.167026 0.832974 0
+vt 1 1 0
+vt 1 0 0
+vt 0.832974 0.832974 0
+vt 1 1 0
+vt 1 0 0
+vt 0.832974 0.167027 0
+vt 1 1 0
+vt 1 0 0
+vt 0 1 0
+vt 1 0 0
+vt 0 0 0
+vt 0 1 0
+vt 1 1 0
+vt 0 0 0
+vt 0 0 0
+vt 0 1 0
+vt 1 1 0
+vt 1 1 0
+vt 1 0 0
+vt 0 1 0
+vt 1 1 0
+vt 0 0 0
+vt 1 1 0
+vt 0 0 0
+vt 1 0 0
+vt 1 1 0
+vt 0 1 0
+vt 0 0 0
+vt 1 1 0
+vt 0 1 0
+vt 1 0 0
+vt 0 0 0
+vt 1 1 0
+vt 1 0 0
+vt 0 1 0
+vt 1 1 0
+vt 0 1 0
+vt 0 0 0
+vt 0 1 0
+vt 1 1 0
+vt 1 1 0
+vt 1 0 0
+vt 1 0 0
+vt 0 0 0
+vt 1 0 0
+vt 0 0 0
+vt 0 0 0
+vt 0 1 0
+vt 1 1 0
+vt 1 0 0
+vt 0 0 0
+vt 0 0 0
+vt 1 1 0
+vt 0 1 0
+vt 0 0 0
+vt 0 1 0
+vt 0.996643 1 0
+vt 1 1 0
+vt 1 1 0
+vt 1 0 0
+vt 1 0 0
+vt 0 1 0
+vt 1 1 0
+vt 0 0 0
+vt 1 1 0
+vt 0 1 0
+vt 1 1 0
+vt 0 0 0
+vt 0 1 0
+vt 1 0 0
+vt 1 1 0
+vt 0 1 0
+vt 1 1 0
+vt 0 0 0
+vt 1 0 0
+vt 1 0 0
+vt 0 1 0
+vt 1 1 0
+vt 1 0 0
+vt 1 1 0
+vt 0 0 0
+vt 1 0 0
+vt 0 1 0
+vt 1 1 0
+vt 1 0 0
+vt 0 1 0
+vt 0 0 0
+vt 0 1 0
+vt 1 0 0
+vt 0 1 0
+vt 1 0 0
+vt 0 1 0
+vt 1 0 0
+vt 0 0 0
+vt 1 1 0
+vt 0 1 0
+vt 0 0 0
+vt 0.996643 1 0
+vt 1 1 0
+vt 0 1 0
+vt 1 1 0
+vt 1 1 0
+vt 0 0 0
+vt 0 1 0
+vt 1 1 0
+vt 0 0 0
+vt 0 0 0
+vt 1 1 0
+vt 1 0 0
+vt 0 1 0
+vt 1 1 0
+vt 1 1 0
+vt 0 1 0
+vt 1 0 0
+vt 0 0 0
+vt 1 0 0
+vt 0 1 0
+vt 0 0 0
+vt 1 1 0
+vt 1 0 0
+vt 0 1 0
+vt 1 1 0
+vt 0 0 0
+vt 1 1 0
+vt 1 0 0
+vt 0 1 0
+vt 1 1 0
+vt 1 0 0
+vt 0 1 0
+
+f 244/315 245/316 246/319 
+f 398/460 391/441 396/455 395/452 
+f 286/422 285/420 277/401 278/405 
+f 232/293 252/333 251/330 231/289 
+f 239/305 232/292 237/299 
+f 277/402 285/420 288/427 282/413 
+f 242/310 258/348 257/344 240/307 
+f 273/391 393/447 396/454 
+f 220/278 219/276 218/274 
+f 218/273 244/315 246/319 220/277 
+f 219/275 245/316 244/315 218/273 
+f 220/277 246/319 245/316 219/275 
+f 226/284 234/298 239/304 242/312 
+f 240/306 228/286 231/288 226/282 
+f 407/479 401/469 398/459 263/363 
+f 224/281 243/313 222/279 237/301 
+f 233/296 232/292 231/288 228/287 
+f 288/426 285/419 286/421 287/424 
+f 240/306 226/283 242/311 
+f 226/282 249/325 254/339 234/297 
+f 239/302 256/343 258/348 242/310 
+f 240/306 257/345 250/326 228/286 
+f 231/288 251/328 249/325 226/282 
+f 262/360 410/486 393/447 273/392 
+f 234/298 254/338 252/332 232/291 
+f 276/400 281/412 290/431 284/417 
+f 267/375 270/384 269/381 268/378 
+f 254/337 258/347 260/354 252/332 
+f 249/325 257/344 258/346 254/336 
+f 250/327 257/344 249/324 251/329 
+f 250/327 251/328 252/331 260/352 
+f 266/372 265/369 415/501 261/357 
+f 280/410 281/412 276/399 275/398 
+f 248/323 255/342 415/500 408/482 
+f 259/351 270/383 267/374 247/321 
+f 255/341 269/380 270/382 259/350 
+f 244/315 259/349 247/320 241/309 
+f 275/397 276/399 284/417 283/416 
+f 248/323 268/377 269/379 255/340 
+f 237/301 241/308 247/320 267/373 
+f 407/479 261/356 404/475 401/468 
+f 290/432 281/411 280/409 289/429 
+f 237/300 290/431 253/335 239/303 
+f 239/302 234/297 232/290 
+f 289/429 280/409 275/396 283/415 
+f 287/424 286/421 278/404 279/408 
+f 413/494 284/418 398/461 399/465 
+f 244/315 246/318 406/477 404/474 
+f 233/296 224/280 237/299 232/290 
+f 228/285 250/326 260/353 274/393 
+f 228/285 274/395 233/295 
+f 253/334 272/388 274/395 260/352 
+f 405/476 404/475 406/477 
+f 233/294 396/454 406/477 246/317 
+f 265/368 264/366 408/481 415/499 
+f 411/489 412/492 395/453 394/449 
+f 395/451 399/464 398/460 
+f 272/389 287/423 279/407 271/387 
+f 417/503 418/507 402/470 400/467 
+f 273/391 271/386 413/493 262/358 
+f 388/436 389/438 387/434 
+f 406/477 404/475 387/433 389/437 
+f 404/475 405/476 388/435 387/433 
+f 405/476 406/477 389/437 388/435 
+f 399/463 397/456 392/444 402/472 
+f 394/448 393/445 400/466 392/442 
+f 397/457 399/462 395/452 
+f 390/439 403/473 391/440 398/459 
+f 394/448 395/451 396/455 393/446 
+f 278/403 277/401 282/413 279/406 
+f 392/443 400/466 402/471 
+f 414/498 409/484 392/442 397/457 
+f 418/507 416/502 399/462 402/470 
+f 410/486 417/504 400/466 393/445 
+f 409/484 411/487 394/448 392/442 
+f 274/394 273/391 396/454 233/294 
+f 412/491 414/497 397/456 395/450 
+f 288/425 289/428 283/414 282/413 
+f 265/367 266/371 263/362 264/365 
+f 262/359 418/506 414/496 412/491 
+f 418/505 417/503 409/484 414/495 
+f 409/483 417/503 410/485 411/488 
+f 412/490 411/487 410/485 262/358 
+f 290/430 237/299 398/458 284/417 
+f 268/376 248/322 408/480 264/364 
+f 261/355 259/349 244/314 404/474 
+f 263/361 266/370 261/355 407/478 
+f 274/393 272/388 271/385 273/390 
+

+ 575 - 0
examples/obj/nano/nanoBody.js

@@ -0,0 +1,575 @@
+// Converted from: nanoBody.obj
+//  vertices: 217
+//  faces: 100 
+//  materials: 1
+//
+//  Generated with OBJ -> Three.js converter
+//  http://github.com/alteredq/three.js/blob/master/utils/exporters/convert_obj_threejs.py
+
+var nanoBody = function ( urlbase ) {
+    var scope = this;
+
+    THREE.Geometry.call(this);
+
+    var materials = [	{
+	"a_dbg_color" : 0xffeeeeee,
+	"a_dbg_index" : 0,
+	"a_dbg_name" : "Mat"
+	}];
+
+    init_materials();
+    
+    var normals = [];
+
+	v(-83.753887,-54.327301,-0.821590);
+	v(-83.753887,103.172699,-0.821590);
+	v(-61.253887,-54.327301,-0.821590);
+	v(-61.253887,103.172699,-0.821590);
+	v(-61.253887,-54.327301,-53.321590);
+	v(-61.253887,103.172699,-53.321590);
+	v(-83.753887,-54.327301,-53.321590);
+	v(-83.753887,103.172699,-53.321590);
+	v(61.253887,-54.327301,-0.821590);
+	v(61.253887,103.172699,-0.821590);
+	v(83.753887,-54.327301,-0.821590);
+	v(83.753887,103.172699,-0.821590);
+	v(83.753887,-54.327301,-53.321590);
+	v(83.753887,103.172699,-53.321590);
+	v(61.253887,-54.327301,-53.321590);
+	v(61.253887,103.172699,-53.321590);
+	v(60.188229,126.000000,66.000000);
+	v(60.188229,156.000000,29.999998);
+	v(60.188229,156.000000,29.999998);
+	v(60.188229,72.000000,48.000000);
+	v(60.188229,72.000000,66.000000);
+	v(60.188229,126.000000,66.000000);
+	v(60.188229,156.000000,29.999998);
+	v(60.188229,-84.000000,66.000000);
+	v(60.188229,-132.000000,23.999998);
+	v(60.188229,-156.000000,66.000000);
+	v(60.188229,-156.000000,-66.000000);
+	v(60.188229,-84.000000,48.000000);
+	v(60.188229,72.000000,48.000000);
+	v(60.188229,-132.000000,-18.000002);
+	v(60.188229,-108.000000,-18.000002);
+	v(60.188229,156.000000,-66.000000);
+	v(60.188229,-108.000000,23.999998);
+	v(60.188229,72.000000,66.000000);
+	v(60.188229,-84.000000,48.000000);
+	v(60.188229,72.000000,48.000000);
+	v(60.188229,-84.000000,66.000000);
+	v(60.188229,-84.000000,48.000000);
+	v(60.188229,-156.000000,66.000000);
+	v(60.188229,72.000000,66.000000);
+	v(60.188229,-84.000000,66.000000);
+	v(60.188229,126.000000,66.000000);
+	v(60.188229,126.000000,66.000000);
+	v(60.188229,156.000000,29.999998);
+	v(60.188229,156.000000,29.999998);
+	v(30.188229,72.000000,66.000000);
+	v(18.188229,72.000000,66.000000);
+	v(24.188229,-132.000000,23.999998);
+	v(24.188229,-156.000000,-66.000000);
+	v(24.188229,-132.000000,-18.000002);
+	v(24.188229,-108.000000,-18.000002);
+	v(24.188229,-84.000000,48.000000);
+	v(24.188229,-108.000000,23.999998);
+	v(18.188229,102.000000,66.000000);
+	v(24.188229,-84.000000,48.000000);
+	v(24.188229,-156.000000,66.000000);
+	v(24.188229,-84.000000,66.000000);
+	v(30.188229,102.000000,66.000000);
+	v(24.188229,-84.000000,-66.000000);
+	v(-29.811771,102.000000,66.000000);
+	v(-23.811771,-84.000000,-66.000000);
+	v(-29.811771,72.000000,48.000000);
+	v(-17.811771,72.000000,48.000000);
+	v(-17.811771,102.000000,48.000000);
+	v(-29.811771,102.000000,48.000000);
+	v(30.188229,72.000000,48.000000);
+	v(18.188229,72.000000,48.000000);
+	v(18.188229,102.000000,48.000000);
+	v(30.188229,102.000000,48.000000);
+	v(-23.811771,-41.999996,48.000000);
+	v(24.188229,-41.999996,48.000000);
+	v(-23.811771,-41.999996,-66.000000);
+	v(24.188229,-41.999996,-66.000000);
+	v(-23.811771,30.000004,35.999998);
+	v(-23.811771,48.000004,35.999998);
+	v(-23.811771,6.000004,35.999998);
+	v(-23.811771,-5.999996,35.999998);
+	v(-23.811771,-5.999996,48.000000);
+	v(24.188229,30.000004,35.999998);
+	v(24.188229,48.000004,35.999998);
+	v(-23.811771,6.000004,48.000000);
+	v(-23.811771,30.000004,48.000000);
+	v(-23.811771,48.000004,48.000000);
+	v(24.188229,6.000004,35.999998);
+	v(24.188229,-5.999996,35.999998);
+	v(24.188229,-5.999996,48.000000);
+	v(24.188229,6.000004,48.000000);
+	v(24.188229,30.000004,48.000000);
+	v(24.188229,48.000004,48.000000);
+	v(-59.811771,126.000000,66.000000);
+	v(-59.811771,156.000000,29.999998);
+	v(-59.811771,156.000000,29.999998);
+	v(-59.811771,72.000000,66.000000);
+	v(-59.811771,156.000000,29.999998);
+	v(-59.811771,-132.000000,23.999998);
+	v(-59.811771,-156.000000,-66.000000);
+	v(-59.811771,-132.000000,-18.000002);
+	v(-59.811771,-108.000000,-18.000002);
+	v(-59.811771,156.000000,-66.000000);
+	v(-59.811771,-108.000000,23.999998);
+	v(-59.811771,72.000000,48.000000);
+	v(-59.811771,-84.000000,48.000000);
+	v(-59.811771,-156.000000,66.000000);
+	v(-59.811771,72.000000,66.000000);
+	v(-59.811771,-84.000000,66.000000);
+	v(-59.811771,126.000000,66.000000);
+	v(-59.811771,126.000000,66.000000);
+	v(-59.811771,156.000000,29.999998);
+	v(-59.811771,156.000000,29.999998);
+	v(-29.811771,72.000000,66.000000);
+	v(-17.811771,72.000000,66.000000);
+	v(-23.811771,-132.000000,23.999998);
+	v(-23.811771,-156.000000,-66.000000);
+	v(-23.811771,-132.000000,-18.000002);
+	v(-23.811771,-108.000000,-18.000002);
+	v(-23.811771,-84.000000,48.000000);
+	v(-23.811771,-108.000000,23.999998);
+	v(-17.811771,102.000000,66.000000);
+	v(-23.811771,-84.000000,48.000000);
+	v(-23.811771,-156.000000,66.000000);
+	v(-23.811771,-84.000000,66.000000);
+	v(-29.811771,102.000000,66.000000);
+	v(-23.811771,-84.000000,-66.000000);
+	v(-29.811771,72.000000,48.000000);
+	v(-17.811771,72.000000,48.000000);
+	v(-17.811771,102.000000,48.000000);
+	v(-29.811771,102.000000,48.000000);
+	v(-23.811771,-41.999996,48.000000);
+	v(-23.811771,-41.999996,-66.000000);
+	v(-23.811771,30.000004,35.999998);
+	v(-23.811771,48.000004,35.999998);
+	v(-23.811771,6.000004,35.999998);
+	v(-23.811771,-5.999996,35.999998);
+	v(-23.811771,-5.999996,48.000000);
+	v(-23.811771,6.000004,48.000000);
+	v(-23.811771,30.000004,48.000000);
+	v(-23.811771,48.000004,48.000000);
+	v(-59.811771,126.000000,66.000000);
+	v(-59.811771,156.000000,29.999998);
+	v(-59.811771,156.000000,29.999998);
+	v(-59.811771,72.000000,66.000000);
+	v(-59.811771,156.000000,29.999998);
+	v(-59.811771,-132.000000,23.999998);
+	v(-59.811771,-156.000000,-66.000000);
+	v(-59.811771,-132.000000,-18.000002);
+	v(-59.811771,-108.000000,-18.000002);
+	v(-59.811771,156.000000,-66.000000);
+	v(-59.811771,-108.000000,23.999998);
+	v(-59.811771,72.000000,48.000000);
+	v(-59.811771,-84.000000,48.000000);
+	v(-59.811771,-156.000000,66.000000);
+	v(-59.811771,72.000000,66.000000);
+	v(-59.811771,-84.000000,66.000000);
+	v(-59.811771,126.000000,66.000000);
+	v(-59.811771,126.000000,66.000000);
+	v(-59.811771,156.000000,29.999998);
+	v(-59.811771,156.000000,29.999998);
+	v(-29.811771,72.000000,66.000000);
+	v(-17.811771,72.000000,66.000000);
+	v(-23.811771,-132.000000,23.999998);
+	v(-23.811771,-156.000000,-66.000000);
+	v(-23.811771,-132.000000,-18.000002);
+	v(-23.811771,-108.000000,-18.000002);
+	v(-23.811771,-84.000000,48.000000);
+	v(-23.811771,-108.000000,23.999998);
+	v(-17.811771,102.000000,66.000000);
+	v(-23.811771,-84.000000,48.000000);
+	v(-23.811771,-156.000000,66.000000);
+	v(-23.811771,-84.000000,66.000000);
+	v(-29.811771,102.000000,66.000000);
+	v(-23.811771,-84.000000,-66.000000);
+	v(-29.811771,72.000000,48.000000);
+	v(-17.811771,72.000000,48.000000);
+	v(-17.811771,102.000000,48.000000);
+	v(-29.811771,102.000000,48.000000);
+	v(-23.811771,-41.999996,48.000000);
+	v(-23.811771,-41.999996,-66.000000);
+	v(-23.811771,30.000004,35.999998);
+	v(-23.811771,48.000004,35.999998);
+	v(-23.811771,6.000004,35.999998);
+	v(-23.811771,-5.999996,35.999998);
+	v(-23.811771,-5.999996,48.000000);
+	v(-23.811771,6.000004,48.000000);
+	v(-23.811771,30.000004,48.000000);
+	v(-23.811771,48.000004,48.000000);
+	v(-59.811771,126.000000,66.000000);
+	v(-59.811771,156.000000,29.999998);
+	v(-59.811771,156.000000,29.999998);
+	v(-59.811771,72.000000,66.000000);
+	v(-59.811771,156.000000,29.999998);
+	v(-59.811771,-132.000000,23.999998);
+	v(-59.811771,-156.000000,-66.000000);
+	v(-59.811771,-132.000000,-18.000002);
+	v(-59.811771,-108.000000,-18.000002);
+	v(-59.811771,156.000000,-66.000000);
+	v(-59.811771,-108.000000,23.999998);
+	v(-59.811771,72.000000,48.000000);
+	v(-59.811771,-84.000000,48.000000);
+	v(-59.811771,-156.000000,66.000000);
+	v(-59.811771,72.000000,66.000000);
+	v(-59.811771,-84.000000,66.000000);
+	v(-59.811771,126.000000,66.000000);
+	v(-59.811771,126.000000,66.000000);
+	v(-59.811771,156.000000,29.999998);
+	v(-59.811771,156.000000,29.999998);
+	v(-29.811771,72.000000,66.000000);
+	v(-17.811771,72.000000,66.000000);
+	v(-23.811771,-132.000000,23.999998);
+	v(-23.811771,-156.000000,-66.000000);
+	v(-23.811771,-132.000000,-18.000002);
+	v(-23.811771,-108.000000,-18.000002);
+	v(-23.811771,-84.000000,48.000000);
+	v(-23.811771,-108.000000,23.999998);
+	v(-17.811771,102.000000,66.000000);
+	v(-23.811771,-84.000000,48.000000);
+	v(-23.811771,-156.000000,66.000000);
+	v(-23.811771,-84.000000,66.000000);
+    /*
+	uv(1.000000,1.000000,1.000000,0.000000,0.000000,0.000000,0.000000,1.000000);
+	uv(1.000000,1.000000,1.000000,0.000000,0.000000,0.000000,0.000000,1.000000);
+	uv(1.000000,1.000000,1.000000,0.000000,0.000000,0.000000,0.000000,1.000000);
+	uv(1.000000,1.000000,1.000000,0.000000,0.000000,0.000000,0.000000,1.000000);
+	uv(1.000000,1.000000,1.000000,0.000000,0.000000,0.000000,0.000000,1.000000);
+	uv(1.000000,1.000000,1.000000,0.000000,0.000000,0.000000,0.000000,1.000000);
+	uv(1.000000,1.000000,1.000000,0.000000,0.000000,0.000000,0.000000,1.000000);
+	uv(1.000000,1.000000,1.000000,0.000000,0.000000,0.000000,0.000000,1.000000);
+	uv(1.000000,1.000000,1.000000,0.000000,0.000000,0.000000,0.000000,1.000000);
+	uv(1.000000,1.000000,1.000000,0.000000,0.000000,0.000000,0.000000,1.000000);
+	uv(1.000000,1.000000,1.000000,0.000000,0.000000,0.000000,0.000000,1.000000);
+	uv(1.000000,1.000000,1.000000,0.000000,0.000000,0.000000,0.000000,1.000000);
+	uv(0.000000,1.000000,0.996643,0.000000,1.000000,0.000000);
+	uv(1.000000,1.000000,1.000000,0.000000,0.000000,0.000000,0.000000,1.000000);
+	uv(0.000000,1.000000,1.000000,1.000000,1.000000,0.000000,0.000000,0.000000);
+	uv(1.000000,1.000000,1.000000,1.000000,1.000000,0.000000,1.000000,0.000000);
+	uv(0.000000,0.000000,1.000000,0.000000,1.000000,1.000000);
+	uv(0.000000,1.000000,1.000000,1.000000,1.000000,0.000000,0.000000,0.000000);
+	uv(0.000000,0.000000,0.000000,0.000000,1.000000,1.000000,1.000000,1.000000);
+	uv(1.000000,0.000000,0.000000,0.000000,1.000000,1.000000);
+	uv(1.000000,1.000000,1.000000,0.000000,0.000000,0.000000);
+	uv(0.000000,1.000000,0.000000,1.000000,1.000000,0.000000,1.000000,0.000000);
+	uv(0.996643,0.000000,0.996643,0.000000,0.000000,1.000000,0.000000,1.000000);
+	uv(1.000000,0.000000,1.000000,0.000000,0.996643,0.000000,0.996643,0.000000);
+	uv(0.000000,0.000000,1.000000,0.000000,1.000000,1.000000,0.000000,1.000000);
+	uv(0.000000,0.000000,1.000000,0.000000,1.000000,1.000000,0.000000,1.000000);
+	uv(1.000000,0.000000,1.000000,1.000000,0.000000,1.000000,0.000000,0.000000);
+	uv(0.000000,0.000000,1.000000,0.000000,1.000000,1.000000,0.000000,1.000000);
+	uv(0.000000,0.000000,1.000000,0.000000,1.000000,1.000000,0.000000,1.000000);
+	uv(0.000000,0.000000,1.000000,0.000000,1.000000,1.000000,0.000000,1.000000);
+	uv(0.000000,0.000000,1.000000,0.000000,1.000000,1.000000);
+	uv(0.000000,1.000000,0.000000,1.000000,1.000000,1.000000,1.000000,1.000000);
+	uv(1.000000,0.000000,1.000000,0.000000,0.000000,0.000000,0.000000,0.000000);
+	uv(0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,1.000000,0.000000);
+	uv(1.000000,1.000000,1.000000,1.000000,0.000000,1.000000,0.000000,1.000000);
+	uv(1.000000,1.000000,1.000000,0.000000,0.000000,0.000000,0.000000,1.000000);
+	uv(1.000000,0.000000,1.000000,0.000000,0.000000,0.000000,0.000000,0.000000);
+	uv(0.000000,1.000000,1.000000,1.000000,1.000000,0.000000,0.000000,0.000000);
+	uv(0.167026,0.832973,0.832974,0.832973,0.832974,0.167026,0.167026,0.167026);
+	uv(0.000000,1.000000,1.000000,1.000000,1.000000,0.000000,0.000000,0.000000);
+	uv(0.000000,1.000000,1.000000,1.000000,1.000000,0.000000,0.000000,0.000000);
+	uv(0.000000,1.000000,1.000000,1.000000,1.000000,0.000000,0.000000,0.000000);
+	uv(0.000000,1.000000,1.000000,1.000000,1.000000,0.000000,0.000000,0.000000);
+	uv(1.000000,0.000000,1.000000,1.000000,0.000000,1.000000,0.000000,0.000000);
+	uv(0.000000,1.000000,1.000000,1.000000,1.000000,0.000000,0.000000,0.000000);
+	uv(0.000000,1.000000,1.000000,1.000000,1.000000,0.000000,0.000000,0.000000);
+	uv(0.000000,1.000000,1.000000,1.000000,1.000000,0.000000,0.000000,0.000000);
+	uv(0.000000,1.000000,1.000000,1.000000,1.000000,0.000000,0.000000,0.000000);
+	uv(0.000000,1.000000,1.000000,1.000000,1.000000,0.000000,0.000000,0.000000);
+	uv(1.000000,1.000000,1.000000,0.000000,0.000000,0.000000,0.000000,1.000000);
+	uv(0.000000,1.000000,1.000000,1.000000,1.000000,0.000000,0.000000,0.000000);
+	uv(0.000000,1.000000,1.000000,1.000000,1.000000,0.000000,0.000000,0.000000);
+	uv(1.000000,0.000000,1.000000,1.000000,0.000000,1.000000,0.000000,0.000000);
+	uv(0.000000,0.000000,1.000000,0.000000,1.000000,1.000000,0.000000,1.000000);
+	uv(0.000000,0.000000,1.000000,0.000000,1.000000,1.000000,0.000000,1.000000);
+	uv(1.000000,0.000000,1.000000,1.000000,0.000000,1.000000);
+	uv(0.000000,1.000000,1.000000,1.000000,1.000000,0.000000,0.000000,0.000000);
+	uv(0.000000,1.000000,1.000000,1.000000,1.000000,0.000000,0.000000,0.000000);
+	uv(1.000000,1.000000,1.000000,0.000000,0.000000,0.000000,0.000000,1.000000);
+	uv(0.000000,1.000000,1.000000,1.000000,1.000000,0.000000,0.000000,0.000000);
+	uv(0.000000,0.000000,1.000000,0.000000,1.000000,1.000000,0.000000,1.000000);
+	uv(0.000000,0.000000,1.000000,0.000000,1.000000,1.000000,0.000000,1.000000);
+	uv(0.000000,0.000000,1.000000,0.000000,1.000000,1.000000);
+	uv(0.000000,1.000000,1.000000,1.000000,1.000000,0.000000,0.000000,0.000000);
+	uv(0.996643,0.000000,0.000000,1.000000,1.000000,0.000000);
+	uv(0.000000,1.000000,1.000000,1.000000,1.000000,0.000000,0.000000,0.000000);
+	uv(1.000000,0.000000,1.000000,1.000000,0.000000,1.000000,0.000000,0.000000);
+	uv(1.000000,0.000000,1.000000,1.000000,1.000000,1.000000,1.000000,0.000000);
+	uv(1.000000,0.000000,0.000000,0.000000,1.000000,1.000000);
+	uv(0.000000,1.000000,1.000000,1.000000,1.000000,0.000000,0.000000,0.000000);
+	uv(1.000000,1.000000,0.000000,0.000000,0.000000,0.000000,1.000000,1.000000);
+	uv(1.000000,0.000000,1.000000,1.000000,0.000000,1.000000,0.000000,0.000000);
+	uv(1.000000,0.000000,1.000000,1.000000,0.000000,0.000000);
+	uv(1.000000,0.000000,0.000000,1.000000,0.000000,1.000000,1.000000,0.000000);
+	uv(0.000000,1.000000,0.996643,0.000000,0.996643,0.000000,0.000000,1.000000);
+	uv(0.996643,0.000000,1.000000,0.000000,1.000000,0.000000,0.996643,0.000000);
+	uv(1.000000,1.000000,1.000000,0.000000,0.000000,0.000000,0.000000,1.000000);
+	uv(1.000000,1.000000,1.000000,0.000000,0.000000,0.000000,0.000000,1.000000);
+	uv(1.000000,1.000000,1.000000,0.000000,0.000000,1.000000);
+	uv(1.000000,1.000000,1.000000,0.000000,0.000000,0.000000,0.000000,1.000000);
+	uv(1.000000,1.000000,1.000000,0.000000,0.000000,0.000000,0.000000,1.000000);
+	uv(1.000000,1.000000,1.000000,0.000000,0.000000,0.000000,0.000000,1.000000);
+	uv(1.000000,0.000000,0.000000,0.000000,1.000000,1.000000);
+	uv(1.000000,1.000000,0.000000,1.000000,0.000000,1.000000,1.000000,1.000000);
+	uv(0.000000,0.000000,1.000000,0.000000,1.000000,0.000000,0.000000,0.000000);
+	uv(1.000000,0.000000,0.000000,0.000000,0.000000,0.000000,1.000000,0.000000);
+	uv(0.000000,1.000000,1.000000,1.000000,1.000000,1.000000,0.000000,1.000000);
+	uv(0.000000,0.000000,1.000000,0.000000,1.000000,1.000000,0.000000,1.000000);
+	uv(0.000000,0.000000,1.000000,0.000000,1.000000,0.000000,0.000000,0.000000);
+	uv(0.000000,1.000000,1.000000,1.000000,1.000000,0.000000,0.000000,0.000000);
+	uv(0.832974,0.167026,0.832974,0.832973,0.167026,0.832973,0.167026,0.167026);
+	uv(1.000000,0.000000,1.000000,1.000000,0.000000,1.000000,0.000000,0.000000);
+	uv(1.000000,0.000000,1.000000,1.000000,0.000000,1.000000,0.000000,0.000000);
+	uv(1.000000,0.000000,1.000000,1.000000,0.000000,1.000000,0.000000,0.000000);
+	uv(1.000000,0.000000,1.000000,1.000000,0.000000,1.000000,0.000000,0.000000);
+	uv(0.000000,1.000000,1.000000,1.000000,1.000000,0.000000,0.000000,0.000000);
+	uv(0.000000,1.000000,1.000000,1.000000,1.000000,0.000000,0.000000,0.000000);
+	uv(0.000000,1.000000,1.000000,1.000000,1.000000,0.000000,0.000000,0.000000);
+	uv(1.000000,0.000000,1.000000,1.000000,0.000000,1.000000,0.000000,0.000000);
+	uv(0.000000,1.000000,1.000000,1.000000,1.000000,0.000000,0.000000,0.000000);
+    */
+	f4(2,3,1,0,0);
+	f4(4,5,3,2,0);
+	f4(6,7,5,4,0);
+	f4(0,1,7,6,0);
+	f4(3,5,7,1,0);
+	f4(4,2,0,6,0);
+	f4(10,11,9,8,0);
+	f4(12,13,11,10,0);
+	f4(14,15,13,12,0);
+	f4(8,9,15,14,0);
+	f4(11,13,15,9,0);
+	f4(12,10,8,14,0);
+	f3(42,43,44,0);
+	f4(196,189,194,193,0);
+	f4(84,83,75,76,0);
+	f4(30,50,49,29,0);
+	f3(37,30,35,0);
+	f4(75,83,86,80,0);
+	f4(40,56,55,38,0);
+	f3(71,191,194,0);
+	f3(18,17,16,0);
+	f4(16,42,44,18,0);
+	f4(17,43,42,16,0);
+	f4(18,44,43,17,0);
+	f4(24,32,37,40,0);
+	f4(38,26,29,24,0);
+	f4(205,199,196,61,0);
+	f4(22,41,20,35,0);
+	f4(31,30,29,26,0);
+	f4(86,83,84,85,0);
+	f3(38,24,40,0);
+	f4(24,47,52,32,0);
+	f4(37,54,56,40,0);
+	f4(38,55,48,26,0);
+	f4(29,49,47,24,0);
+	f4(60,208,191,71,0);
+	f4(32,52,50,30,0);
+	f4(74,79,88,82,0);
+	f4(65,68,67,66,0);
+	f4(52,56,58,50,0);
+	f4(47,55,56,52,0);
+	f4(48,55,47,49,0);
+	f4(48,49,50,58,0);
+	f4(64,63,213,59,0);
+	f4(78,79,74,73,0);
+	f4(46,53,213,206,0);
+	f4(57,68,65,45,0);
+	f4(53,67,68,57,0);
+	f4(42,57,45,39,0);
+	f4(73,74,82,81,0);
+	f4(46,66,67,53,0);
+	f4(35,39,45,65,0);
+	f4(205,59,202,199,0);
+	f4(88,79,78,87,0);
+	f4(35,88,51,37,0);
+	f3(37,32,30,0);
+	f4(87,78,73,81,0);
+	f4(85,84,76,77,0);
+	f4(211,82,196,197,0);
+	f4(42,44,204,202,0);
+	f4(31,22,35,30,0);
+	f4(26,48,58,72,0);
+	f3(26,72,31,0);
+	f4(51,70,72,58,0);
+	f3(203,202,204,0);
+	f4(31,194,204,44,0);
+	f4(63,62,206,213,0);
+	f4(209,210,193,192,0);
+	f3(193,197,196,0);
+	f4(70,85,77,69,0);
+	f4(215,216,200,198,0);
+	f4(71,69,211,60,0);
+	f3(186,187,185,0);
+	f4(204,202,185,187,0);
+	f4(202,203,186,185,0);
+	f4(203,204,187,186,0);
+	f4(197,195,190,200,0);
+	f4(192,191,198,190,0);
+	f3(195,197,193,0);
+	f4(188,201,189,196,0);
+	f4(192,193,194,191,0);
+	f4(76,75,80,77,0);
+	f3(190,198,200,0);
+	f4(212,207,190,195,0);
+	f4(216,214,197,200,0);
+	f4(208,215,198,191,0);
+	f4(207,209,192,190,0);
+	f4(72,71,194,31,0);
+	f4(210,212,195,193,0);
+	f4(86,87,81,80,0);
+	f4(63,64,61,62,0);
+	f4(60,216,212,210,0);
+	f4(216,215,207,212,0);
+	f4(207,215,208,209,0);
+	f4(210,209,208,60,0);
+	f4(88,35,196,82,0);
+	f4(66,46,206,62,0);
+	f4(59,57,42,202,0);
+	f4(61,64,59,205,0);
+	f4(72,70,69,71,0);
+
+    this.computeCentroids();
+    this.computeNormals();
+    
+    function material_color( mi ) {
+        var m = materials[mi];
+        if( m.col_diffuse )
+            return (m.col_diffuse[0]*255 << 16) + (m.col_diffuse[1]*255 << 8) + m.col_diffuse[2]*255;
+        else if ( m.a_dbg_color )
+            return  m.a_dbg_color;
+        else 
+            return 0xffeeeeee;
+    }
+    
+    function v( x, y, z ) {
+        scope.vertices.push( new THREE.Vertex( new THREE.Vector3( x, y, z ) ) );
+    }
+
+    function f3( a, b, c, mi ) {
+        var material = scope.materials[ mi ];
+        scope.faces.push( new THREE.Face3( a, b, c, null, material ) );
+    }
+
+    function f4( a, b, c, d, mi ) {
+        var material = scope.materials[ mi ];
+        scope.faces.push( new THREE.Face4( a, b, c, d, null, material ) );
+    }
+
+    function f3n( a, b, c, mi, n1, n2, n3 ) {
+        var material = scope.materials[ mi ];
+        var n1x = normals[n1][0];
+        var n1y = normals[n1][1];
+        var n1z = normals[n1][2];
+        var n2x = normals[n2][0];
+        var n2y = normals[n2][1];
+        var n2z = normals[n2][2];
+        var n3x = normals[n3][0];
+        var n3y = normals[n3][1];
+        var n3z = normals[n3][2];
+        scope.faces.push( new THREE.Face3( a, b, c, 
+                          [new THREE.Vector3( n1x, n1y, n1z ), new THREE.Vector3( n2x, n2y, n2z ), new THREE.Vector3( n3x, n3y, n3z )], 
+                          material ) );
+    }
+
+    function f4n( a, b, c, d, mi, n1, n2, n3, n4 ) {
+        var material = scope.materials[ mi ];
+        var n1x = normals[n1][0];
+        var n1y = normals[n1][1];
+        var n1z = normals[n1][2];
+        var n2x = normals[n2][0];
+        var n2y = normals[n2][1];
+        var n2z = normals[n2][2];
+        var n3x = normals[n3][0];
+        var n3y = normals[n3][1];
+        var n3z = normals[n3][2];
+        var n4x = normals[n4][0];
+        var n4y = normals[n4][1];
+        var n4z = normals[n4][2];
+        scope.faces.push( new THREE.Face4( a, b, c, d,
+                          [new THREE.Vector3( n1x, n1y, n1z ), new THREE.Vector3( n2x, n2y, n2z ), new THREE.Vector3( n3x, n3y, n3z ), new THREE.Vector3( n4x, n4y, n4z )], 
+                          material ) );
+    }
+
+    function uv( u1, v1, u2, v2, u3, v3, u4, v4 ) {
+        var uv = [];
+        uv.push( new THREE.UV( u1, v1 ) );
+        uv.push( new THREE.UV( u2, v2 ) );
+        uv.push( new THREE.UV( u3, v3 ) );
+        if ( u4 && v4 ) uv.push( new THREE.UV( u4, v4 ) );
+        scope.uvs.push( uv );
+    }
+
+    function init_materials() {
+        scope.materials = [];
+        for(var i=0; i<materials.length; ++i) {
+            scope.materials[i] = [ create_material( materials[i], urlbase ) ];
+        }
+    }
+    
+    function is_pow2( n ) {
+        var l = Math.log(n) / Math.LN2;
+        return Math.floor(l) == l;
+    }
+    
+    function nearest_pow2(n) {
+        var l = Math.log(n) / Math.LN2;
+        return Math.pow( 2, Math.round(l) );
+    }
+    
+    function create_material( m ) {
+        var material;
+        
+        if( m.map_diffuse && urlbase ) {
+            var texture = document.createElement( 'canvas' );
+            
+            material = new THREE.MeshBitmapMaterial( texture );
+            var image = new Image();
+            
+            image.onload = function () {
+                
+                if ( !is_pow2(this.width) || !is_pow2(this.height) ) {
+                
+                    var w = nearest_pow2( this.width );
+                    var h = nearest_pow2( this.height );
+                    material.bitmap.width = w;
+                    material.bitmap.height = h;
+                    material.bitmap.getContext("2d").drawImage( this, 0, 0, w, h );
+                }
+                else {
+                    material.bitmap = this;
+                }
+                material.loaded = 1;
+                
+            };
+            image.src = urlbase + "/" + m.map_diffuse;
+        }
+        else if( m.col_diffuse ) {
+            var color = (m.col_diffuse[0]*255 << 16) + (m.col_diffuse[1]*255 << 8) + m.col_diffuse[2]*255;
+            material = new THREE.MeshColorFillMaterial( color, m.transparency );
+        }
+        else if( m.a_dbg_color ) {
+            material = new THREE.MeshColorFillMaterial( m.a_dbg_color );
+        }
+        else {
+            material = new THREE.MeshColorFillMaterial( 0xffeeeeee );
+        }
+
+        return material;
+    }
+}
+
+nanoBody.prototype = new THREE.Geometry();
+nanoBody.prototype.constructor = nanoBody;

+ 609 - 0
examples/obj/nano/nanoBody.obj

@@ -0,0 +1,609 @@
+# WaveFront *.obj file (generated by CINEMA 4D)
+
+g NanoArmL
+usemtl Mat
+v -83.910797 -40.962219 -7.151447
+v -83.910797 116.537781 -7.151447
+v -61.410797 -40.962219 -7.151447
+v -61.410797 116.537781 -7.151447
+v -61.410797 -40.962219 -59.651447
+v -61.410797 116.537781 -59.651447
+v -83.910797 -40.962219 -59.651447
+v -83.910797 116.537781 -59.651447
+
+vt 0 1 0
+vt 1 0 0
+vt 0 0 0
+vt 0 0 0
+vt 1 1 0
+vt 0 1 0
+vt 1 1 0
+vt 0 0 0
+vt 1 0 0
+vt 1 0 0
+vt 0 1 0
+vt 1 1 0
+vt 1 0 0
+vt 0 0 0
+vt 1 1 0
+vt 0 1 0
+vt 0 0 0
+vt 1 0 0
+vt 0 1 0
+vt 1 1 0
+
+f 3/9 4/12 2/6 1/3 
+f 5/13 6/15 4/11 3/8 
+f 7/18 8/20 6/16 5/14 
+f 1/2 2/5 8/19 7/17 
+f 4/10 6/15 8/19 2/4 
+f 5/13 3/7 1/1 7/17 
+
+g NanoArmR
+usemtl Mat
+v 61.096977 -40.962219 -7.151447
+v 61.096977 116.537781 -7.151447
+v 83.596977 -40.962219 -7.151447
+v 83.596977 116.537781 -7.151447
+v 83.596977 -40.962219 -59.651447
+v 83.596977 116.537781 -59.651447
+v 61.096977 -40.962219 -59.651447
+v 61.096977 116.537781 -59.651447
+
+vt 0 1 0
+vt 1 0 0
+vt 0 0 0
+vt 0 0 0
+vt 1 1 0
+vt 0 1 0
+vt 1 1 0
+vt 0 0 0
+vt 1 0 0
+vt 1 0 0
+vt 0 1 0
+vt 1 1 0
+vt 1 0 0
+vt 0 0 0
+vt 1 1 0
+vt 0 1 0
+vt 0 0 0
+vt 1 0 0
+vt 0 1 0
+vt 1 1 0
+
+f 11/29 12/32 10/26 9/23 
+f 13/33 14/35 12/31 11/28 
+f 15/38 16/40 14/36 13/34 
+f 9/22 10/25 16/39 15/37 
+f 12/30 14/35 16/39 10/24 
+f 13/33 11/27 9/21 15/37 
+
+g NanoBody
+usemtl Mat
+v 60.031319 139.365082 59.670143
+v 60.031319 169.365082 23.670141
+v 60.031319 169.365082 23.670141
+v 60.031319 85.365082 41.670143
+v 60.031319 85.365082 59.670143
+v 60.031319 139.365082 59.670143
+v 60.031319 169.365082 23.670141
+v 60.031319 -70.634918 59.670143
+v 60.031319 -118.634918 17.670141
+v 60.031319 -142.634918 59.670143
+v 60.031319 -142.634918 -72.329857
+v 60.031319 -70.634918 41.670143
+v 60.031319 85.365082 41.670143
+v 60.031319 -118.634918 -24.329859
+v 60.031319 -94.634918 -24.329859
+v 60.031319 169.365082 -72.329857
+v 60.031319 -94.634918 17.670141
+v 60.031319 85.365082 59.670143
+v 60.031319 -70.634918 41.670143
+v 60.031319 85.365082 41.670143
+v 60.031319 -70.634918 59.670143
+v 60.031319 -70.634918 41.670143
+v 60.031319 -142.634918 59.670143
+v 60.031319 85.365082 59.670143
+v 60.031319 -70.634918 59.670143
+v 60.031319 139.365082 59.670143
+v 60.031319 139.365082 59.670143
+v 60.031319 169.365082 23.670141
+v 60.031319 169.365082 23.670141
+v 30.031319 85.365082 59.670143
+v 18.031319 85.365082 59.670143
+v 24.031319 -118.634918 17.670141
+v 24.031319 -142.634918 -72.329857
+v 24.031319 -118.634918 -24.329859
+v 24.031319 -94.634918 -24.329859
+v 24.031319 -70.634918 41.670143
+v 24.031319 -94.634918 17.670141
+v 18.031319 115.365082 59.670143
+v 24.031319 -70.634918 41.670143
+v 24.031319 -142.634918 59.670143
+v 24.031319 -70.634918 59.670143
+v 30.031319 115.365082 59.670143
+v 24.031319 -70.634918 -72.329857
+v -29.968681 115.365082 59.670143
+v -23.968681 -70.634918 -72.329857
+v -29.968681 85.365082 41.670143
+v -17.968681 85.365082 41.670143
+v -17.968681 115.365082 41.670143
+v -29.968681 115.365082 41.670143
+v 30.031319 85.365082 41.670143
+v 18.031319 85.365082 41.670143
+v 18.031319 115.365082 41.670143
+v 30.031319 115.365082 41.670143
+v -23.968681 -28.634914 41.670143
+v 24.031319 -28.634914 41.670143
+v -23.968681 -28.634914 -72.329857
+v 24.031319 -28.634914 -72.329857
+v -23.968681 43.365086 29.670141
+v -23.968681 61.365086 29.670141
+v -23.968681 19.365086 29.670141
+v -23.968681 7.365086 29.670141
+v -23.968681 7.365086 41.670143
+v 24.031319 43.365086 29.670141
+v 24.031319 61.365086 29.670141
+v -23.968681 19.365086 41.670143
+v -23.968681 43.365086 41.670143
+v -23.968681 61.365086 41.670143
+v 24.031319 19.365086 29.670141
+v 24.031319 7.365086 29.670141
+v 24.031319 7.365086 41.670143
+v 24.031319 19.365086 41.670143
+v 24.031319 43.365086 41.670143
+v 24.031319 61.365086 41.670143
+v -59.968681 139.365082 59.670143
+v -59.968681 169.365082 23.670141
+v -59.968681 169.365082 23.670141
+v -59.968681 85.365082 59.670143
+v -59.968681 169.365082 23.670141
+v -59.968681 -118.634918 17.670141
+v -59.968681 -142.634918 -72.329857
+v -59.968681 -118.634918 -24.329859
+v -59.968681 -94.634918 -24.329859
+v -59.968681 169.365082 -72.329857
+v -59.968681 -94.634918 17.670141
+v -59.968681 85.365082 41.670143
+v -59.968681 -70.634918 41.670143
+v -59.968681 -142.634918 59.670143
+v -59.968681 85.365082 59.670143
+v -59.968681 -70.634918 59.670143
+v -59.968681 139.365082 59.670143
+v -59.968681 139.365082 59.670143
+v -59.968681 169.365082 23.670141
+v -59.968681 169.365082 23.670141
+v -29.968681 85.365082 59.670143
+v -17.968681 85.365082 59.670143
+v -23.968681 -118.634918 17.670141
+v -23.968681 -142.634918 -72.329857
+v -23.968681 -118.634918 -24.329859
+v -23.968681 -94.634918 -24.329859
+v -23.968681 -70.634918 41.670143
+v -23.968681 -94.634918 17.670141
+v -17.968681 115.365082 59.670143
+v -23.968681 -70.634918 41.670143
+v -23.968681 -142.634918 59.670143
+v -23.968681 -70.634918 59.670143
+v -29.968681 115.365082 59.670143
+v -23.968681 -70.634918 -72.329857
+v -29.968681 85.365082 41.670143
+v -17.968681 85.365082 41.670143
+v -17.968681 115.365082 41.670143
+v -29.968681 115.365082 41.670143
+v -23.968681 -28.634914 41.670143
+v -23.968681 -28.634914 -72.329857
+v -23.968681 43.365086 29.670141
+v -23.968681 61.365086 29.670141
+v -23.968681 19.365086 29.670141
+v -23.968681 7.365086 29.670141
+v -23.968681 7.365086 41.670143
+v -23.968681 19.365086 41.670143
+v -23.968681 43.365086 41.670143
+v -23.968681 61.365086 41.670143
+v -59.968681 139.365082 59.670143
+v -59.968681 169.365082 23.670141
+v -59.968681 169.365082 23.670141
+v -59.968681 85.365082 59.670143
+v -59.968681 169.365082 23.670141
+v -59.968681 -118.634918 17.670141
+v -59.968681 -142.634918 -72.329857
+v -59.968681 -118.634918 -24.329859
+v -59.968681 -94.634918 -24.329859
+v -59.968681 169.365082 -72.329857
+v -59.968681 -94.634918 17.670141
+v -59.968681 85.365082 41.670143
+v -59.968681 -70.634918 41.670143
+v -59.968681 -142.634918 59.670143
+v -59.968681 85.365082 59.670143
+v -59.968681 -70.634918 59.670143
+v -59.968681 139.365082 59.670143
+v -59.968681 139.365082 59.670143
+v -59.968681 169.365082 23.670141
+v -59.968681 169.365082 23.670141
+v -29.968681 85.365082 59.670143
+v -17.968681 85.365082 59.670143
+v -23.968681 -118.634918 17.670141
+v -23.968681 -142.634918 -72.329857
+v -23.968681 -118.634918 -24.329859
+v -23.968681 -94.634918 -24.329859
+v -23.968681 -70.634918 41.670143
+v -23.968681 -94.634918 17.670141
+v -17.968681 115.365082 59.670143
+v -23.968681 -70.634918 41.670143
+v -23.968681 -142.634918 59.670143
+v -23.968681 -70.634918 59.670143
+v -29.968681 115.365082 59.670143
+v -23.968681 -70.634918 -72.329857
+v -29.968681 85.365082 41.670143
+v -17.968681 85.365082 41.670143
+v -17.968681 115.365082 41.670143
+v -29.968681 115.365082 41.670143
+v -23.968681 -28.634914 41.670143
+v -23.968681 -28.634914 -72.329857
+v -23.968681 43.365086 29.670141
+v -23.968681 61.365086 29.670141
+v -23.968681 19.365086 29.670141
+v -23.968681 7.365086 29.670141
+v -23.968681 7.365086 41.670143
+v -23.968681 19.365086 41.670143
+v -23.968681 43.365086 41.670143
+v -23.968681 61.365086 41.670143
+v -59.968681 139.365082 59.670143
+v -59.968681 169.365082 23.670141
+v -59.968681 169.365082 23.670141
+v -59.968681 85.365082 59.670143
+v -59.968681 169.365082 23.670141
+v -59.968681 -118.634918 17.670141
+v -59.968681 -142.634918 -72.329857
+v -59.968681 -118.634918 -24.329859
+v -59.968681 -94.634918 -24.329859
+v -59.968681 169.365082 -72.329857
+v -59.968681 -94.634918 17.670141
+v -59.968681 85.365082 41.670143
+v -59.968681 -70.634918 41.670143
+v -59.968681 -142.634918 59.670143
+v -59.968681 85.365082 59.670143
+v -59.968681 -70.634918 59.670143
+v -59.968681 139.365082 59.670143
+v -59.968681 139.365082 59.670143
+v -59.968681 169.365082 23.670141
+v -59.968681 169.365082 23.670141
+v -29.968681 85.365082 59.670143
+v -17.968681 85.365082 59.670143
+v -23.968681 -118.634918 17.670141
+v -23.968681 -142.634918 -72.329857
+v -23.968681 -118.634918 -24.329859
+v -23.968681 -94.634918 -24.329859
+v -23.968681 -70.634918 41.670143
+v -23.968681 -94.634918 17.670141
+v -17.968681 115.365082 59.670143
+v -23.968681 -70.634918 41.670143
+v -23.968681 -142.634918 59.670143
+v -23.968681 -70.634918 59.670143
+
+vt 0 0 0
+vt 0 1 0
+vt 0.996643 1 0
+vt 1 1 0
+vt 1 1 0
+vt 1 0 0
+vt 1 0 0
+vt 1 1 0
+vt 0 1 0
+vt 0 0 0
+vt 1 1 0
+vt 0 1 0
+vt 0 1 0
+vt 1 1 0
+vt 0 0 0
+vt 1 0 0
+vt 1 1 0
+vt 0 0 0
+vt 0 1 0
+vt 1 1 0
+vt 1 0 0
+vt 0 0 0
+vt 1 0 0
+vt 0 1 0
+vt 1 0 0
+vt 1 1 0
+vt 1 0 0
+vt 0 1 0
+vt 0 0 0
+vt 1 1 0
+vt 0 0 0
+vt 1 0 0
+vt 0 1 0
+vt 0 1 0
+vt 1 0 0
+vt 1 0 0
+vt 0 1 0
+vt 0 1 0
+vt 1 0 0
+vt 0 0 0
+vt 1 1 0
+vt 1 1 0
+vt 0 0 0
+vt 0.996643 1 0
+vt 0 1 0
+vt 1 0 0
+vt 1 1 0
+vt 1 1 0
+vt 0 1 0
+vt 1 0 0
+vt 0 0 0
+vt 1 1 0
+vt 0 0 0
+vt 1 1 0
+vt 0 0 0
+vt 1 0 0
+vt 0 1 0
+vt 1 1 0
+vt 1 1 0
+vt 0 1 0
+vt 1 0 0
+vt 0 0 0
+vt 1 0 0
+vt 0 1 0
+vt 0 0 0
+vt 1 1 0
+vt 1 0 0
+vt 0 1 0
+vt 0 0 0
+vt 1 0 0
+vt 1 1 0
+vt 1 0 0
+vt 0 1 0
+vt 1 1 0
+vt 1 0 0
+vt 0 1 0
+vt 1 0 0
+vt 0 1 0
+vt 0 0 0
+vt 0 1 0
+vt 1 0 0
+vt 1 1 0
+vt 0 0 0
+vt 1 0 0
+vt 0 1 0
+vt 0 1 0
+vt 1 1 0
+vt 1 0 0
+vt 1 1 0
+vt 0.167026 0.167027 0
+vt 0 1 0
+vt 0 1 0
+vt 0.167026 0.832974 0
+vt 1 0 0
+vt 0.832974 0.832974 0
+vt 1 1 0
+vt 1 0 0
+vt 1 0 0
+vt 0.832974 0.167027 0
+vt 1 1 0
+vt 0 1 0
+vt 1 1 0
+vt 0.167026 0.167027 0
+vt 0 0 0
+vt 1 0 0
+vt 0.167026 0.832974 0
+vt 1 1 0
+vt 1 0 0
+vt 0.832974 0.832974 0
+vt 1 1 0
+vt 1 0 0
+vt 0.832974 0.167027 0
+vt 1 1 0
+vt 1 0 0
+vt 0 1 0
+vt 1 0 0
+vt 0 0 0
+vt 0 1 0
+vt 1 1 0
+vt 0 0 0
+vt 0 0 0
+vt 0 1 0
+vt 1 1 0
+vt 1 1 0
+vt 1 0 0
+vt 0 1 0
+vt 1 1 0
+vt 0 0 0
+vt 1 1 0
+vt 0 0 0
+vt 1 0 0
+vt 1 1 0
+vt 0 1 0
+vt 0 0 0
+vt 1 1 0
+vt 0 1 0
+vt 1 0 0
+vt 0 0 0
+vt 1 1 0
+vt 1 0 0
+vt 0 1 0
+vt 1 1 0
+vt 0 1 0
+vt 0 0 0
+vt 0 1 0
+vt 1 1 0
+vt 1 1 0
+vt 1 0 0
+vt 1 0 0
+vt 0 0 0
+vt 1 0 0
+vt 0 0 0
+vt 0 0 0
+vt 0 1 0
+vt 1 1 0
+vt 1 0 0
+vt 0 0 0
+vt 0 0 0
+vt 1 1 0
+vt 0 1 0
+vt 0 0 0
+vt 0 1 0
+vt 0.996643 1 0
+vt 1 1 0
+vt 1 1 0
+vt 1 0 0
+vt 1 0 0
+vt 0 1 0
+vt 1 1 0
+vt 0 0 0
+vt 1 1 0
+vt 0 1 0
+vt 1 1 0
+vt 0 0 0
+vt 0 1 0
+vt 1 0 0
+vt 1 1 0
+vt 0 1 0
+vt 1 1 0
+vt 0 0 0
+vt 1 0 0
+vt 1 0 0
+vt 0 1 0
+vt 1 1 0
+vt 1 0 0
+vt 1 1 0
+vt 0 0 0
+vt 1 0 0
+vt 0 1 0
+vt 1 1 0
+vt 1 0 0
+vt 0 1 0
+vt 0 0 0
+vt 0 1 0
+vt 1 0 0
+vt 0 1 0
+vt 1 0 0
+vt 0 1 0
+vt 1 0 0
+vt 0 0 0
+vt 1 1 0
+vt 0 1 0
+vt 0 0 0
+vt 0.996643 1 0
+vt 1 1 0
+vt 0 1 0
+vt 1 1 0
+vt 1 1 0
+vt 0 0 0
+vt 0 1 0
+vt 1 1 0
+vt 0 0 0
+vt 0 0 0
+vt 1 1 0
+vt 1 0 0
+vt 0 1 0
+vt 1 1 0
+vt 1 1 0
+vt 0 1 0
+vt 1 0 0
+vt 0 0 0
+vt 1 0 0
+vt 0 1 0
+vt 0 0 0
+vt 1 1 0
+vt 1 0 0
+vt 0 1 0
+vt 1 1 0
+vt 0 0 0
+vt 1 1 0
+vt 1 0 0
+vt 0 1 0
+vt 1 1 0
+vt 1 0 0
+vt 0 1 0
+
+f 43/83 44/84 45/87 
+f 197/228 190/209 195/223 194/220 
+f 85/190 84/188 76/169 77/173 
+f 31/61 51/101 50/98 30/57 
+f 38/73 31/60 36/67 
+f 76/170 84/188 87/195 81/181 
+f 41/78 57/116 56/112 39/75 
+f 72/159 192/215 195/222 
+f 19/46 18/44 17/42 
+f 17/41 43/83 45/87 19/45 
+f 18/43 44/84 43/83 17/41 
+f 19/45 45/87 44/84 18/43 
+f 25/52 33/66 38/72 41/80 
+f 39/74 27/54 30/56 25/50 
+f 206/247 200/237 197/227 62/131 
+f 23/49 42/81 21/47 36/69 
+f 32/64 31/60 30/56 27/55 
+f 87/194 84/187 85/189 86/192 
+f 39/74 25/51 41/79 
+f 25/50 48/93 53/107 33/65 
+f 38/70 55/111 57/116 41/78 
+f 39/74 56/113 49/94 27/54 
+f 30/56 50/96 48/93 25/50 
+f 61/128 209/254 192/215 72/160 
+f 33/66 53/106 51/100 31/59 
+f 75/168 80/180 89/199 83/185 
+f 66/143 69/152 68/149 67/146 
+f 53/105 57/115 59/122 51/100 
+f 48/93 56/112 57/114 53/104 
+f 49/95 56/112 48/92 50/97 
+f 49/95 50/96 51/99 59/120 
+f 65/140 64/137 214/269 60/125 
+f 79/178 80/180 75/167 74/166 
+f 47/91 54/110 214/268 207/250 
+f 58/119 69/151 66/142 46/89 
+f 54/109 68/148 69/150 58/118 
+f 43/83 58/117 46/88 40/77 
+f 74/165 75/167 83/185 82/184 
+f 47/91 67/145 68/147 54/108 
+f 36/69 40/76 46/88 66/141 
+f 206/247 60/124 203/243 200/236 
+f 89/200 80/179 79/177 88/197 
+f 36/68 89/199 52/103 38/71 
+f 38/70 33/65 31/58 
+f 88/197 79/177 74/164 82/183 
+f 86/192 85/189 77/172 78/176 
+f 212/262 83/186 197/229 198/233 
+f 43/83 45/86 205/245 203/242 
+f 32/64 23/48 36/67 31/58 
+f 27/53 49/94 59/121 73/161 
+f 27/53 73/163 32/63 
+f 52/102 71/156 73/163 59/120 
+f 204/244 203/243 205/245 
+f 32/62 195/222 205/245 45/85 
+f 64/136 63/134 207/249 214/267 
+f 210/257 211/260 194/221 193/217 
+f 194/219 198/232 197/228 
+f 71/157 86/191 78/175 70/155 
+f 216/271 217/275 201/238 199/235 
+f 72/159 70/154 212/261 61/126 
+f 187/204 188/206 186/202 
+f 205/245 203/243 186/201 188/205 
+f 203/243 204/244 187/203 186/201 
+f 204/244 205/245 188/205 187/203 
+f 198/231 196/224 191/212 201/240 
+f 193/216 192/213 199/234 191/210 
+f 196/225 198/230 194/220 
+f 189/207 202/241 190/208 197/227 
+f 193/216 194/219 195/223 192/214 
+f 77/171 76/169 81/181 78/174 
+f 191/211 199/234 201/239 
+f 213/266 208/252 191/210 196/225 
+f 217/275 215/270 198/230 201/238 
+f 209/254 216/272 199/234 192/213 
+f 208/252 210/255 193/216 191/210 
+f 73/162 72/159 195/222 32/62 
+f 211/259 213/265 196/224 194/218 
+f 87/193 88/196 82/182 81/181 
+f 64/135 65/139 62/130 63/133 
+f 61/127 217/274 213/264 211/259 
+f 217/273 216/271 208/252 213/263 
+f 208/251 216/271 209/253 210/256 
+f 211/258 210/255 209/253 61/126 
+f 89/198 36/67 197/226 83/185 
+f 67/144 47/90 207/248 63/132 
+f 60/123 58/117 43/82 203/242 
+f 62/129 65/138 60/123 206/246 
+f 73/161 71/156 70/153 72/158 
+

BIN
utils/exporters/.DS_Store


BIN
utils/exporters/blender/.DS_Store


+ 150 - 0
utils/exporters/blender/2.49/threejs_export.py

@@ -0,0 +1,150 @@
+#!BPY
+
+# Based on Anthony D'Agostino (Scorpius)'s Raw Exported provided with Blender
+# and on Mr.doob's and Kikko's Blender 2.5a2 exporter
+# 'http://mrdoob.com', 'http://github.com/kikko'
+"""
+Name: 'three.js (.js)...'
+Blender: 245
+Group: 'Export'
+Tooltip: 'Export selected mesh to three.js (.js)'
+"""
+
+__author__ = "George Profenza"
+__url__ = ("disturb", "disturbmedia.com/blog",
+"My blog, http://tomaterial.blogspot.com")
+__version__ = "First File Exporter"
+
+__bpydoc__ = """\
+Export meshes to mr.doob's three.js 3D Engine.
+Currently supports UVs. If the model doesn't display correctly
+you might need to reverse some normals/do some cleanup.
+
+More details on the engine here:
+https://github.com/mrdoob/three.js
+
+Have fun!
+
+Usage:<br>
+	Select a mesh to be exported and go to "File->Export->three.js" .
+"""
+# $Id: raw_export.py 14597 2008-04-28 16:09:17Z campbellbarton $
+#
+# +---------------------------------------------------------+
+# | Copyright (c) 2002 Anthony D'Agostino                   |
+# | http://www.redrival.com/scorpius                        |
+# | [email protected]                                    |
+# | April 28, 2002                                          |
+# | Read and write RAW Triangle File Format (*.raw)         |
+# +---------------------------------------------------------+
+
+# ***** BEGIN GPL LICENSE BLOCK *****
+#
+# This program is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License
+# as published by the Free Software Foundation; either version 2
+# of the License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software Foundation,
+# Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
+#
+# ***** END GPL LICENCE BLOCK *****
+
+import Blender
+import BPyMesh
+import re
+
+clean = lambda varStr: re.sub('\W|^(?=\d)','_', varStr)
+
+def write(filename):
+    start = Blender.sys.time()
+    if not filename.lower().endswith('.js'):
+    	filename += '.js'
+    
+    scn= Blender.Scene.GetCurrent()
+    ob= scn.objects.active
+    if not ob:
+    	Blender.Draw.PupMenu('Error%t|Select 1 active object')
+    	return
+    
+    file = open(filename, 'wb')
+    
+    mesh = BPyMesh.getMeshFromObject(ob, None, True, False, scn)
+    if not mesh:
+    	Blender.Draw.PupMenu('Error%t|Could not get mesh data from active object')
+    	return
+    
+    mesh.transform(ob.matrixWorld)
+    
+    #classname = clean(ob.name)
+    classname = filename.split('/')[-1].replace('.js','')
+    
+    file = open(filename, "wb")
+    
+    file.write('var %s = function () {\n\n' % classname)
+    file.write('\tvar scope = this;\n\n')
+    file.write('\tTHREE.Geometry.call(this);\n\n')
+    
+    for v in mesh.verts:
+        file.write('\tv( %.6f, %.6f, %.6f );\n' % (v.co.x, v.co.z, -v.co.y)) # co
+    
+    file.write('\n')
+    
+    for f in mesh.faces:
+        if len(f.verts) == 3:
+            file.write('\tf3( %d, %d, %d, %.6f, %.6f, %.6f );\n' % (f.verts[0].index, f.verts[1].index, f.verts[2].index, f.verts[0].no.x, f.verts[0].no.z, -f.verts[0].no.y))
+        else:
+            file.write('\tf4( %d, %d, %d, %d, %.6f, %.6f, %.6f );\n' % (f.verts[0].index, f.verts[1].index, f.verts[2].index, f.verts[3].index, f.verts[0].no.x, f.verts[0].no.z, -f.verts[0].no.y))
+    face_index_pairs = [ (face, index) for index, face in enumerate(mesh.faces)]
+    
+    file.write('\n')
+    '''
+    for f in me.faces:
+		if me.faceUV:
+		    if len(f.verts) == 3:
+		        file.write('\tuv( %.6f, %.6f, %.6f, %.6f, %.6f, %.6f );\n' % (f.uv[0][0], 1.0-f.uv[0][1], f.uv[1][0], 1.0-f.uv[1][1], f.uv[2][0], 1.0-f.uv[2][1])
+	'''
+    for f in mesh.faces:
+	    if mesh.faceUV:
+	        if len(f.verts) == 3:
+	            file.write('\tuv( %.6f, %.6f, %.6f, %.6f, %.6f, %.6f );\n' % (f.uv[0].x, 1.0 - f.uv[0].y, f.uv[1].x, 1.0 - f.uv[1].y, f.uv[2].x, 1.0 - f.uv[2].y))
+	        else:
+	            file.write('\tuv( %.6f, %.6f, %.6f, %.6f, %.6f, %.6f, %.6f, %.6f);\n' % (f.uv[0].x, 1.0 - f.uv[0].y, f.uv[1].x, 1.0 - f.uv[1].y, f.uv[2].x, 1.0 - f.uv[2].y, f.uv[3].x, 1.0 - f.uv[3].y))
+	
+    file.write('\n')
+    file.write('\tfunction v( x, y, z ) {\n\n')
+    file.write('\t\tscope.vertices.push( new THREE.Vertex( new THREE.Vector3( x, y, z ) ) );\n\n')
+    file.write('\t}\n\n')
+    file.write('\tfunction f3( a, b, c, nx, ny, nz ) {\n\n')
+    file.write('\t\tscope.faces.push( new THREE.Face3( a, b, c, nx && ny && nz ? new THREE.Vector3( nx, ny, nz ) : null ) );\n\n')
+    file.write('\t}\n\n')
+    file.write('\tfunction f4( a, b, c, d, nx, ny, nz ) {\n\n')
+    file.write('\t\tscope.faces.push( new THREE.Face4( a, b, c, d, nx && ny && nz ? new THREE.Vector3( nx, ny, nz ) : null ) );\n\n')
+    file.write('\t}\n\n')
+    file.write('\tfunction uv( u1, v1, u2, v2, u3, v3, u4, v4 ) {\n\n')
+    file.write('\t\tvar uv = [];\n')
+    file.write('\t\tuv.push( new THREE.UV( u1, v1 ) );\n')
+    file.write('\t\tuv.push( new THREE.UV( u2, v2 ) );\n')
+    file.write('\t\tuv.push( new THREE.UV( u3, v3 ) );\n')
+    file.write('\t\tif ( u4 && v4 ) uv.push( new THREE.UV( u4, v4 ) );\n')
+    file.write('\t\tscope.uvs.push( uv );\n')
+    file.write('\t}\n\n')
+    file.write('}\n\n')
+    file.write('%s.prototype = new THREE.Geometry();\n' % classname)
+    file.write('%s.prototype.constructor = %s;' % (classname, classname))
+    file.close()
+
+end = Blender.sys.time()
+
+def main():
+	Blender.Window.FileSelector(write, 'three.js Export', Blender.sys.makename(ext='.js'))
+
+
+if __name__=='__main__':
+	main()

BIN
utils/exporters/cinema4d/.DS_Store


+ 163 - 0
utils/exporters/cinema4d/Three.js

@@ -0,0 +1,163 @@
+// Three.js r29 - http://github.com/mrdoob/three.js
+var THREE=THREE||{};THREE.Color=function(a){this.autoUpdate=true;this.setHex(a)};
+THREE.Color.prototype={setRGB:function(a,c,e){this.r=a;this.g=c;this.b=e;if(this.autoUpdate){this.updateHex();this.updateStyleString()}},setHex:function(a){this.hex=~~a&16777215;if(this.autoUpdate){this.updateRGBA();this.updateStyleString()}},updateHex:function(){this.hex=~~(this.r*255)<<16^~~(this.g*255)<<8^~~(this.b*255)},updateRGBA:function(){this.r=(this.hex>>16&255)/255;this.g=(this.hex>>8&255)/255;this.b=(this.hex&255)/255},updateStyleString:function(){this.__styleString="rgb("+~~(this.r*255)+
+","+~~(this.g*255)+","+~~(this.b*255)+")"},toString:function(){return"THREE.Color ( r: "+this.r+", g: "+this.g+", b: "+this.b+", hex: "+this.hex+" )"}};THREE.Vector2=function(a,c){this.x=a||0;this.y=c||0};
+THREE.Vector2.prototype={set:function(a,c){this.x=a;this.y=c;return this},copy:function(a){this.x=a.x;this.y=a.y;return this},addSelf:function(a){this.x+=a.x;this.y+=a.y;return this},add:function(a,c){this.x=a.x+c.x;this.y=a.y+c.y;return this},subSelf:function(a){this.x-=a.x;this.y-=a.y;return this},sub:function(a,c){this.x=a.x-c.x;this.y=a.y-c.y;return this},multiplyScalar:function(a){this.x*=a;this.y*=a;return this},unit:function(){this.multiplyScalar(1/this.length());return this},length:function(){return Math.sqrt(this.x*
+this.x+this.y*this.y)},lengthSq:function(){return this.x*this.x+this.y*this.y},negate:function(){this.x=-this.x;this.y=-this.y;return this},clone:function(){return new THREE.Vector2(this.x,this.y)},toString:function(){return"THREE.Vector2 ("+this.x+", "+this.y+")"}};THREE.Vector3=function(a,c,e){this.x=a||0;this.y=c||0;this.z=e||0};
+THREE.Vector3.prototype={set:function(a,c,e){this.x=a;this.y=c;this.z=e;return this},copy:function(a){this.x=a.x;this.y=a.y;this.z=a.z;return this},add:function(a,c){this.x=a.x+c.x;this.y=a.y+c.y;this.z=a.z+c.z;return this},addSelf:function(a){this.x+=a.x;this.y+=a.y;this.z+=a.z;return this},addScalar:function(a){this.x+=a;this.y+=a;this.z+=a;return this},sub:function(a,c){this.x=a.x-c.x;this.y=a.y-c.y;this.z=a.z-c.z;return this},subSelf:function(a){this.x-=a.x;this.y-=a.y;this.z-=a.z;return this},
+cross:function(a,c){this.x=a.y*c.z-a.z*c.y;this.y=a.z*c.x-a.x*c.z;this.z=a.x*c.y-a.y*c.x;return this},crossSelf:function(a){var c=this.x,e=this.y,g=this.z;this.x=e*a.z-g*a.y;this.y=g*a.x-c*a.z;this.z=c*a.y-e*a.x;return this},multiplySelf:function(a){this.x*=a.x;this.y*=a.y;this.z*=a.z;return this},multiplyScalar:function(a){this.x*=a;this.y*=a;this.z*=a;return this},divideScalar:function(a){this.x/=a;this.y/=a;this.z/=a;return this},dot:function(a){return this.x*a.x+this.y*a.y+this.z*a.z},distanceTo:function(a){var c=
+this.x-a.x,e=this.y-a.y;a=this.z-a.z;return Math.sqrt(c*c+e*e+a*a)},distanceToSquared:function(a){var c=this.x-a.x,e=this.y-a.y;a=this.z-a.z;return c*c+e*e+a*a},length:function(){return Math.sqrt(this.x*this.x+this.y*this.y+this.z*this.z)},lengthSq:function(){return this.x*this.x+this.y*this.y+this.z*this.z},negate:function(){this.x=-this.x;this.y=-this.y;this.z=-this.z;return this},normalize:function(){var a=Math.sqrt(this.x*this.x+this.y*this.y+this.z*this.z);a>0?this.multiplyScalar(1/a):this.set(0,
+0,0);return this},setLength:function(a){return this.normalize().multiplyScalar(a)},isZero:function(){return Math.abs(this.x)<1.0E-4&&Math.abs(this.y)<1.0E-4&&Math.abs(this.z)<1.0E-4},clone:function(){return new THREE.Vector3(this.x,this.y,this.z)},toString:function(){return"THREE.Vector3 ( "+this.x+", "+this.y+", "+this.z+" )"}};THREE.Vector4=function(a,c,e,g){this.x=a||0;this.y=c||0;this.z=e||0;this.w=g||1};
+THREE.Vector4.prototype={set:function(a,c,e,g){this.x=a;this.y=c;this.z=e;this.w=g;return this},copy:function(a){this.x=a.x;this.y=a.y;this.z=a.z;this.w=a.w||1;return this},add:function(a,c){this.x=a.x+c.x;this.y=a.y+c.y;this.z=a.z+c.z;this.w=a.w+c.w;return this},addSelf:function(a){this.x+=a.x;this.y+=a.y;this.z+=a.z;this.w+=a.w;return this},sub:function(a,c){this.x=a.x-c.x;this.y=a.y-c.y;this.z=a.z-c.z;this.w=a.w-c.w;return this},subSelf:function(a){this.x-=a.x;this.y-=a.y;this.z-=a.z;this.w-=a.w;
+return this},multiplyScalar:function(a){this.x*=a;this.y*=a;this.z*=a;this.w*=a;return this},divideScalar:function(a){this.x/=a;this.y/=a;this.z/=a;this.w/=a;return this},lerpSelf:function(a,c){this.x+=(a.x-this.x)*c;this.y+=(a.y-this.y)*c;this.z+=(a.z-this.z)*c;this.w+=(a.w-this.w)*c},clone:function(){return new THREE.Vector4(this.x,this.y,this.z,this.w)},toString:function(){return"THREE.Vector4 ("+this.x+", "+this.y+", "+this.z+", "+this.w+")"}};
+THREE.Ray=function(a,c){this.origin=a||new THREE.Vector3;this.direction=c||new THREE.Vector3};
+THREE.Ray.prototype={intersectScene:function(a){var c,e,g=a.objects,b=[];a=0;for(c=g.length;a<c;a++){e=g[a];if(e instanceof THREE.Mesh)b=b.concat(this.intersectObject(e))}b.sort(function(d,n){return d.distance-n.distance});return b},intersectObject:function(a){function c(v,j,L,u){u=u.clone().subSelf(j);L=L.clone().subSelf(j);var w=v.clone().subSelf(j);v=u.dot(u);j=u.dot(L);u=u.dot(w);var H=L.dot(L);L=L.dot(w);w=1/(v*H-j*j);H=(H*u-j*L)*w;v=(v*L-j*u)*w;return H>0&&v>0&&H+v<1}var e,g,b,d,n,q,o,f,h,k,
+i,m=a.geometry,l=m.vertices,s=[];e=0;for(g=m.faces.length;e<g;e++){b=m.faces[e];k=this.origin.clone();i=this.direction.clone();d=a.matrix.transform(l[b.a].position.clone());n=a.matrix.transform(l[b.b].position.clone());q=a.matrix.transform(l[b.c].position.clone());o=b instanceof THREE.Face4?a.matrix.transform(l[b.d].position.clone()):null;f=a.rotationMatrix.transform(b.normal.clone());h=i.dot(f);if(h<0){f=f.dot((new THREE.Vector3).sub(d,k))/h;k=k.addSelf(i.multiplyScalar(f));if(b instanceof THREE.Face3){if(c(k,
+d,n,q)){b={distance:this.origin.distanceTo(k),point:k,face:b,object:a};s.push(b)}}else if(b instanceof THREE.Face4)if(c(k,d,n,o)||c(k,n,q,o)){b={distance:this.origin.distanceTo(k),point:k,face:b,object:a};s.push(b)}}}return s}};
+THREE.Rectangle=function(){function a(){d=g-c;n=b-e}var c,e,g,b,d,n,q=true;this.getX=function(){return c};this.getY=function(){return e};this.getWidth=function(){return d};this.getHeight=function(){return n};this.getLeft=function(){return c};this.getTop=function(){return e};this.getRight=function(){return g};this.getBottom=function(){return b};this.set=function(o,f,h,k){q=false;c=o;e=f;g=h;b=k;a()};this.addPoint=function(o,f){if(q){q=false;c=o;e=f;g=o;b=f}else{c=Math.min(c,o);e=Math.min(e,f);g=Math.max(g,
+o);b=Math.max(b,f)}a()};this.addRectangle=function(o){if(q){q=false;c=o.getLeft();e=o.getTop();g=o.getRight();b=o.getBottom()}else{c=Math.min(c,o.getLeft());e=Math.min(e,o.getTop());g=Math.max(g,o.getRight());b=Math.max(b,o.getBottom())}a()};this.inflate=function(o){c-=o;e-=o;g+=o;b+=o;a()};this.minSelf=function(o){c=Math.max(c,o.getLeft());e=Math.max(e,o.getTop());g=Math.min(g,o.getRight());b=Math.min(b,o.getBottom());a()};this.instersects=function(o){return Math.min(g,o.getRight())-Math.max(c,o.getLeft())>=
+0&&Math.min(b,o.getBottom())-Math.max(e,o.getTop())>=0};this.empty=function(){q=true;b=g=e=c=0;a()};this.isEmpty=function(){return q};this.toString=function(){return"THREE.Rectangle ( left: "+c+", right: "+g+", top: "+e+", bottom: "+b+", width: "+d+", height: "+n+" )"}};THREE.Matrix3=function(){this.m=[]};THREE.Matrix3.prototype={transpose:function(){var a;a=this.m[1];this.m[1]=this.m[3];this.m[3]=a;a=this.m[2];this.m[2]=this.m[6];this.m[6]=a;a=this.m[5];this.m[5]=this.m[7];this.m[7]=a;return this}};
+THREE.Matrix4=function(){};
+THREE.Matrix4.prototype={n11:1,n12:0,n13:0,n14:0,n21:0,n22:1,n23:0,n24:0,n31:0,n32:0,n33:1,n34:0,n41:0,n42:0,n43:0,n44:1,identity:function(){this.n11=1;this.n21=this.n14=this.n13=this.n12=0;this.n22=1;this.n32=this.n31=this.n24=this.n23=0;this.n33=1;this.n43=this.n42=this.n41=this.n34=0;this.n44=1},copy:function(a){this.n11=a.n11;this.n12=a.n12;this.n13=a.n13;this.n14=a.n14;this.n21=a.n21;this.n22=a.n22;this.n23=a.n23;this.n24=a.n24;this.n31=a.n31;this.n32=a.n32;this.n33=a.n33;this.n34=a.n34;this.n41=
+a.n41;this.n42=a.n42;this.n43=a.n43;this.n44=a.n44},lookAt:function(a,c,e){var g=new THREE.Vector3,b=new THREE.Vector3,d=new THREE.Vector3;d.sub(a,c).normalize();g.cross(e,d).normalize();b.cross(d,g).normalize();this.n11=g.x;this.n12=g.y;this.n13=g.z;this.n14=-g.dot(a);this.n21=b.x;this.n22=b.y;this.n23=b.z;this.n24=-b.dot(a);this.n31=d.x;this.n32=d.y;this.n33=d.z;this.n34=-d.dot(a);this.n43=this.n42=this.n41=0;this.n44=1},transform:function(a){var c=a.x,e=a.y,g=a.z,b=a.w||1;a.x=this.n11*c+this.n12*
+e+this.n13*g+this.n14*b;a.y=this.n21*c+this.n22*e+this.n23*g+this.n24*b;a.z=this.n31*c+this.n32*e+this.n33*g+this.n34*b;b=this.n41*c+this.n42*e+this.n43*g+this.n44*b;if(a.w)a.w=b;else{c=1/b;a.x*=c;a.y*=c;a.z*=c}return a},crossVector:function(a){var c=new THREE.Vector4;c.x=this.n11*a.x+this.n12*a.y+this.n13*a.z+this.n14*a.w;c.y=this.n21*a.x+this.n22*a.y+this.n23*a.z+this.n24*a.w;c.z=this.n31*a.x+this.n32*a.y+this.n33*a.z+this.n34*a.w;c.w=a.w?this.n41*a.x+this.n42*a.y+this.n43*a.z+this.n44*a.w:1;return c},
+multiply:function(a,c){this.n11=a.n11*c.n11+a.n12*c.n21+a.n13*c.n31+a.n14*c.n41;this.n12=a.n11*c.n12+a.n12*c.n22+a.n13*c.n32+a.n14*c.n42;this.n13=a.n11*c.n13+a.n12*c.n23+a.n13*c.n33+a.n14*c.n43;this.n14=a.n11*c.n14+a.n12*c.n24+a.n13*c.n34+a.n14*c.n44;this.n21=a.n21*c.n11+a.n22*c.n21+a.n23*c.n31+a.n24*c.n41;this.n22=a.n21*c.n12+a.n22*c.n22+a.n23*c.n32+a.n24*c.n42;this.n23=a.n21*c.n13+a.n22*c.n23+a.n23*c.n33+a.n24*c.n43;this.n24=a.n21*c.n14+a.n22*c.n24+a.n23*c.n34+a.n24*c.n44;this.n31=a.n31*c.n11+a.n32*
+c.n21+a.n33*c.n31+a.n34*c.n41;this.n32=a.n31*c.n12+a.n32*c.n22+a.n33*c.n32+a.n34*c.n42;this.n33=a.n31*c.n13+a.n32*c.n23+a.n33*c.n33+a.n34*c.n43;this.n34=a.n31*c.n14+a.n32*c.n24+a.n33*c.n34+a.n34*c.n44;this.n41=a.n41*c.n11+a.n42*c.n21+a.n43*c.n31+a.n44*c.n41;this.n42=a.n41*c.n12+a.n42*c.n22+a.n43*c.n32+a.n44*c.n42;this.n43=a.n41*c.n13+a.n42*c.n23+a.n43*c.n33+a.n44*c.n43;this.n44=a.n41*c.n14+a.n42*c.n24+a.n43*c.n34+a.n44*c.n44},multiplySelf:function(a){var c=this.n11,e=this.n12,g=this.n13,b=this.n14,
+d=this.n21,n=this.n22,q=this.n23,o=this.n24,f=this.n31,h=this.n32,k=this.n33,i=this.n34,m=this.n41,l=this.n42,s=this.n43,v=this.n44;this.n11=c*a.n11+e*a.n21+g*a.n31+b*a.n41;this.n12=c*a.n12+e*a.n22+g*a.n32+b*a.n42;this.n13=c*a.n13+e*a.n23+g*a.n33+b*a.n43;this.n14=c*a.n14+e*a.n24+g*a.n34+b*a.n44;this.n21=d*a.n11+n*a.n21+q*a.n31+o*a.n41;this.n22=d*a.n12+n*a.n22+q*a.n32+o*a.n42;this.n23=d*a.n13+n*a.n23+q*a.n33+o*a.n43;this.n24=d*a.n14+n*a.n24+q*a.n34+o*a.n44;this.n31=f*a.n11+h*a.n21+k*a.n31+i*a.n41;
+this.n32=f*a.n12+h*a.n22+k*a.n32+i*a.n42;this.n33=f*a.n13+h*a.n23+k*a.n33+i*a.n43;this.n34=f*a.n14+h*a.n24+k*a.n34+i*a.n44;this.n41=m*a.n11+l*a.n21+s*a.n31+v*a.n41;this.n42=m*a.n12+l*a.n22+s*a.n32+v*a.n42;this.n43=m*a.n13+l*a.n23+s*a.n33+v*a.n43;this.n44=m*a.n14+l*a.n24+s*a.n34+v*a.n44},multiplyScalar:function(a){this.n11*=a;this.n12*=a;this.n13*=a;this.n14*=a;this.n21*=a;this.n22*=a;this.n23*=a;this.n24*=a;this.n31*=a;this.n32*=a;this.n33*=a;this.n34*=a;this.n41*=a;this.n42*=a;this.n43*=a;this.n44*=
+a},determinant:function(){return this.n14*this.n23*this.n32*this.n41-this.n13*this.n24*this.n32*this.n41-this.n14*this.n22*this.n33*this.n41+this.n12*this.n24*this.n33*this.n41+this.n13*this.n22*this.n34*this.n41-this.n12*this.n23*this.n34*this.n41-this.n14*this.n23*this.n31*this.n42+this.n13*this.n24*this.n31*this.n42+this.n14*this.n21*this.n33*this.n42-this.n11*this.n24*this.n33*this.n42-this.n13*this.n21*this.n34*this.n42+this.n11*this.n23*this.n34*this.n42+this.n14*this.n22*this.n31*this.n43-
+this.n12*this.n24*this.n31*this.n43-this.n14*this.n21*this.n32*this.n43+this.n11*this.n24*this.n32*this.n43+this.n12*this.n21*this.n34*this.n43-this.n11*this.n22*this.n34*this.n43-this.n13*this.n22*this.n31*this.n44+this.n12*this.n23*this.n31*this.n44+this.n13*this.n21*this.n32*this.n44-this.n11*this.n23*this.n32*this.n44-this.n12*this.n21*this.n33*this.n44+this.n11*this.n22*this.n33*this.n44},transpose:function(){function a(c,e,g){var b=c[e];c[e]=c[g];c[g]=b}a(this,"n21","n12");a(this,"n31","n13");
+a(this,"n32","n23");a(this,"n41","n14");a(this,"n42","n24");a(this,"n43","n34");return this},clone:function(){var a=new THREE.Matrix4;a.n11=this.n11;a.n12=this.n12;a.n13=this.n13;a.n14=this.n14;a.n21=this.n21;a.n22=this.n22;a.n23=this.n23;a.n24=this.n24;a.n31=this.n31;a.n32=this.n32;a.n33=this.n33;a.n34=this.n34;a.n41=this.n41;a.n42=this.n42;a.n43=this.n43;a.n44=this.n44;return a},flatten:function(){return[this.n11,this.n21,this.n31,this.n41,this.n12,this.n22,this.n32,this.n42,this.n13,this.n23,this.n33,
+this.n43,this.n14,this.n24,this.n34,this.n44]},toString:function(){return"| "+this.n11+" "+this.n12+" "+this.n13+" "+this.n14+" |\n| "+this.n21+" "+this.n22+" "+this.n23+" "+this.n24+" |\n| "+this.n31+" "+this.n32+" "+this.n33+" "+this.n34+" |\n| "+this.n41+" "+this.n42+" "+this.n43+" "+this.n44+" |"}};THREE.Matrix4.translationMatrix=function(a,c,e){var g=new THREE.Matrix4;g.n14=a;g.n24=c;g.n34=e;return g};THREE.Matrix4.scaleMatrix=function(a,c,e){var g=new THREE.Matrix4;g.n11=a;g.n22=c;g.n33=e;return g};
+THREE.Matrix4.rotationXMatrix=function(a){var c=new THREE.Matrix4;c.n22=c.n33=Math.cos(a);c.n32=Math.sin(a);c.n23=-c.n32;return c};THREE.Matrix4.rotationYMatrix=function(a){var c=new THREE.Matrix4;c.n11=c.n33=Math.cos(a);c.n13=Math.sin(a);c.n31=-c.n13;return c};THREE.Matrix4.rotationZMatrix=function(a){var c=new THREE.Matrix4;c.n11=c.n22=Math.cos(a);c.n21=Math.sin(a);c.n12=-c.n21;return c};
+THREE.Matrix4.rotationAxisAngleMatrix=function(a,c){var e=new THREE.Matrix4,g=Math.cos(c),b=Math.sin(c),d=1-g,n=a.x,q=a.y,o=a.z;e.n11=d*n*n+g;e.n12=d*n*q-b*o;e.n13=d*n*o+b*q;e.n21=d*n*q+b*o;e.n22=d*q*q+g;e.n23=d*q*o-b*n;e.n31=d*n*o-b*q;e.n32=d*q*o+b*n;e.n33=d*o*o+g;return e};
+THREE.Matrix4.makeInvert=function(a){var c=new THREE.Matrix4;c.n11=a.n23*a.n34*a.n42-a.n24*a.n33*a.n42+a.n24*a.n32*a.n43-a.n22*a.n34*a.n43-a.n23*a.n32*a.n44+a.n22*a.n33*a.n44;c.n12=a.n14*a.n33*a.n42-a.n13*a.n34*a.n42-a.n14*a.n32*a.n43+a.n12*a.n34*a.n43+a.n13*a.n32*a.n44-a.n12*a.n33*a.n44;c.n13=a.n13*a.n24*a.n42-a.n14*a.n23*a.n42+a.n14*a.n22*a.n43-a.n12*a.n24*a.n43-a.n13*a.n22*a.n44+a.n12*a.n23*a.n44;c.n14=a.n14*a.n23*a.n32-a.n13*a.n24*a.n32-a.n14*a.n22*a.n33+a.n12*a.n24*a.n33+a.n13*a.n22*a.n34-a.n12*
+a.n23*a.n34;c.n21=a.n24*a.n33*a.n41-a.n23*a.n34*a.n41-a.n24*a.n31*a.n43+a.n21*a.n34*a.n43+a.n23*a.n31*a.n44-a.n21*a.n33*a.n44;c.n22=a.n13*a.n34*a.n41-a.n14*a.n33*a.n41+a.n14*a.n31*a.n43-a.n11*a.n34*a.n43-a.n13*a.n31*a.n44+a.n11*a.n33*a.n44;c.n23=a.n14*a.n23*a.n41-a.n13*a.n24*a.n41-a.n14*a.n21*a.n43+a.n11*a.n24*a.n43+a.n13*a.n21*a.n44-a.n11*a.n23*a.n44;c.n24=a.n13*a.n24*a.n31-a.n14*a.n23*a.n31+a.n14*a.n21*a.n33-a.n11*a.n24*a.n33-a.n13*a.n21*a.n34+a.n11*a.n23*a.n34;c.n31=a.n22*a.n34*a.n41-a.n24*a.n32*
+a.n41+a.n24*a.n31*a.n42-a.n21*a.n34*a.n42-a.n22*a.n31*a.n44+a.n21*a.n32*a.n44;c.n32=a.n14*a.n32*a.n41-a.n12*a.n34*a.n41-a.n14*a.n31*a.n42+a.n11*a.n34*a.n42+a.n12*a.n31*a.n44-a.n11*a.n32*a.n44;c.n33=a.n13*a.n24*a.n41-a.n14*a.n22*a.n41+a.n14*a.n21*a.n42-a.n11*a.n24*a.n42-a.n12*a.n21*a.n44+a.n11*a.n22*a.n44;c.n34=a.n14*a.n22*a.n31-a.n12*a.n24*a.n31-a.n14*a.n21*a.n32+a.n11*a.n24*a.n32+a.n12*a.n21*a.n34-a.n11*a.n22*a.n34;c.n41=a.n23*a.n32*a.n41-a.n22*a.n33*a.n41-a.n23*a.n31*a.n42+a.n21*a.n33*a.n42+a.n22*
+a.n31*a.n43-a.n21*a.n32*a.n43;c.n42=a.n12*a.n33*a.n41-a.n13*a.n32*a.n41+a.n13*a.n31*a.n42-a.n11*a.n33*a.n42-a.n12*a.n31*a.n43+a.n11*a.n32*a.n43;c.n43=a.n13*a.n22*a.n41-a.n12*a.n23*a.n41-a.n13*a.n21*a.n42+a.n11*a.n23*a.n42+a.n12*a.n21*a.n43-a.n11*a.n22*a.n43;c.n44=a.n12*a.n23*a.n31-a.n13*a.n22*a.n31+a.n13*a.n21*a.n32-a.n11*a.n23*a.n32-a.n12*a.n21*a.n33+a.n11*a.n22*a.n33;c.multiplyScalar(1/a.determinant());return c};
+THREE.Matrix4.makeInvert3x3=function(a){var c=a.flatten();a=new THREE.Matrix3;var e=c[10]*c[5]-c[6]*c[9],g=-c[10]*c[1]+c[2]*c[9],b=c[6]*c[1]-c[2]*c[5],d=-c[10]*c[4]+c[6]*c[8],n=c[10]*c[0]-c[2]*c[8],q=-c[6]*c[0]+c[2]*c[4],o=c[9]*c[4]-c[5]*c[8],f=-c[9]*c[0]+c[1]*c[8],h=c[5]*c[0]-c[1]*c[4];c=c[0]*e+c[1]*d+c[2]*o;if(c==0)throw"matrix not invertible";c=1/c;a.m[0]=c*e;a.m[1]=c*g;a.m[2]=c*b;a.m[3]=c*d;a.m[4]=c*n;a.m[5]=c*q;a.m[6]=c*o;a.m[7]=c*f;a.m[8]=c*h;return a};
+THREE.Matrix4.makeFrustum=function(a,c,e,g,b,d){var n,q,o;n=new THREE.Matrix4;q=2*b/(c-a);o=2*b/(g-e);a=(c+a)/(c-a);e=(g+e)/(g-e);g=-(d+b)/(d-b);b=-2*d*b/(d-b);n.n11=q;n.n12=0;n.n13=a;n.n14=0;n.n21=0;n.n22=o;n.n23=e;n.n24=0;n.n31=0;n.n32=0;n.n33=g;n.n34=b;n.n41=0;n.n42=0;n.n43=-1;n.n44=0;return n};THREE.Matrix4.makePerspective=function(a,c,e,g){var b;a=e*Math.tan(a*Math.PI/360);b=-a;return THREE.Matrix4.makeFrustum(b*c,a*c,b,a,e,g)};
+THREE.Matrix4.makeOrtho=function(a,c,e,g,b,d){var n,q,o,f;n=new THREE.Matrix4;q=c-a;o=e-g;f=d-b;a=(c+a)/q;e=(e+g)/o;b=(d+b)/f;n.n11=2/q;n.n12=0;n.n13=0;n.n14=-a;n.n21=0;n.n22=2/o;n.n23=0;n.n24=-e;n.n31=0;n.n32=0;n.n33=-2/f;n.n34=-b;n.n41=0;n.n42=0;n.n43=0;n.n44=1;return n};
+THREE.Vertex=function(a,c){this.position=a||new THREE.Vector3;this.positionWorld=new THREE.Vector3;this.positionScreen=new THREE.Vector4;this.normal=c||new THREE.Vector3;this.normalWorld=new THREE.Vector3;this.normalScreen=new THREE.Vector3;this.__visible=true};THREE.Vertex.prototype={toString:function(){return"THREE.Vertex ( position: "+this.position+", normal: "+this.normal+" )"}};
+THREE.Face3=function(a,c,e,g,b){this.a=a;this.b=c;this.c=e;this.centroid=new THREE.Vector3;this.normal=g instanceof THREE.Vector3?g:new THREE.Vector3;this.vertexNormals=g instanceof Array?g:[];this.material=b instanceof Array?b:[b]};THREE.Face3.prototype={toString:function(){return"THREE.Face3 ( "+this.a+", "+this.b+", "+this.c+" )"}};
+THREE.Face4=function(a,c,e,g,b,d){this.a=a;this.b=c;this.c=e;this.d=g;this.centroid=new THREE.Vector3;this.normal=b instanceof THREE.Vector3?b:new THREE.Vector3;this.vertexNormals=b instanceof Array?b:[];this.material=d instanceof Array?d:[d]};THREE.Face4.prototype={toString:function(){return"THREE.Face4 ( "+this.a+", "+this.b+", "+this.c+" "+this.d+" )"}};THREE.UV=function(a,c){this.u=a||0;this.v=c||0};
+THREE.UV.prototype={copy:function(a){this.u=a.u;this.v=a.v},toString:function(){return"THREE.UV ("+this.u+", "+this.v+")"}};THREE.Geometry=function(){this.vertices=[];this.faces=[];this.uvs=[]};
+THREE.Geometry.prototype={computeCentroids:function(){var a,c,e;a=0;for(c=this.faces.length;a<c;a++){e=this.faces[a];e.centroid.set(0,0,0);e.centroid.addSelf(this.vertices[e.a].position);e.centroid.addSelf(this.vertices[e.b].position);e.centroid.addSelf(this.vertices[e.c].position);if(e instanceof THREE.Face3)e.centroid.divideScalar(3);else if(e instanceof THREE.Face4){e.centroid.addSelf(this.vertices[e.d].position);e.centroid.divideScalar(4)}}},computeNormals:function(a){var c,e,g,b,d,n,q=new THREE.Vector3,
+o=new THREE.Vector3;g=0;for(b=this.vertices.length;g<b;g++){d=this.vertices[g];d.normal.set(0,0,0)}g=0;for(b=this.faces.length;g<b;g++){d=this.faces[g];if(a&&d.vertexNormals.length){q.set(0,0,0);c=0;for(e=d.normal.length;c<e;c++)q.addSelf(d.vertexNormals[c]);q.divideScalar(3)}else{c=this.vertices[d.a];e=this.vertices[d.b];n=this.vertices[d.c];q.sub(n.position,e.position);o.sub(c.position,e.position);q.crossSelf(o)}q.isZero()||q.normalize();d.normal.copy(q)}},computeBoundingBox:function(){if(this.vertices.length>
+0){this.bbox={x:[this.vertices[0].position.x,this.vertices[0].position.x],y:[this.vertices[0].position.y,this.vertices[0].position.y],z:[this.vertices[0].position.z,this.vertices[0].position.z]};for(var a=1,c=this.vertices.length;a<c;a++){vertex=this.vertices[a];if(vertex.position.x<this.bbox.x[0])this.bbox.x[0]=vertex.position.x;else if(vertex.position.x>this.bbox.x[1])this.bbox.x[1]=vertex.position.x;if(vertex.position.y<this.bbox.y[0])this.bbox.y[0]=vertex.position.y;else if(vertex.position.y>
+this.bbox.y[1])this.bbox.y[1]=vertex.position.y;if(vertex.position.z<this.bbox.z[0])this.bbox.z[0]=vertex.position.z;else if(vertex.position.z>this.bbox.z[1])this.bbox.z[1]=vertex.position.z}}},toString:function(){return"THREE.Geometry ( vertices: "+this.vertices+", faces: "+this.faces+" )"}};
+THREE.Camera=function(a,c,e,g){this.position=new THREE.Vector3(0,0,0);this.target={position:new THREE.Vector3(0,0,0)};this.up=new THREE.Vector3(0,1,0);this.matrix=new THREE.Matrix4;this.projectionMatrix=THREE.Matrix4.makePerspective(a,c,e,g);this.autoUpdateMatrix=true;this.updateMatrix=function(){this.matrix.lookAt(this.position,this.target.position,this.up)};this.toString=function(){return"THREE.Camera ( "+this.position+", "+this.target.position+" )"}};THREE.Light=function(a){this.color=new THREE.Color(a)};
+THREE.AmbientLight=function(a){THREE.Light.call(this,a)};THREE.AmbientLight.prototype=new THREE.Light;THREE.AmbientLight.prototype.constructor=THREE.AmbientLight;THREE.DirectionalLight=function(a,c){THREE.Light.call(this,a);this.position=new THREE.Vector3(0,1,0);this.intensity=c||1};THREE.DirectionalLight.prototype=new THREE.Light;THREE.DirectionalLight.prototype.constructor=THREE.DirectionalLight;
+THREE.PointLight=function(a,c){THREE.Light.call(this,a);this.position=new THREE.Vector3;this.intensity=c||1};THREE.DirectionalLight.prototype=new THREE.Light;THREE.DirectionalLight.prototype.constructor=THREE.PointLight;
+THREE.Object3D=function(){this.position=new THREE.Vector3;this.rotation=new THREE.Vector3;this.scale=new THREE.Vector3(1,1,1);this.matrix=new THREE.Matrix4;this.translationMatrix=new THREE.Matrix4;this.rotationMatrix=new THREE.Matrix4;this.scaleMatrix=new THREE.Matrix4;this.screen=new THREE.Vector3;this.autoUpdateMatrix=this.visible=true;this.updateMatrix=function(){this.matrixPosition=THREE.Matrix4.translationMatrix(this.position.x,this.position.y,this.position.z);this.rotationMatrix=THREE.Matrix4.rotationXMatrix(this.rotation.x);
+this.rotationMatrix.multiplySelf(THREE.Matrix4.rotationYMatrix(this.rotation.y));this.rotationMatrix.multiplySelf(THREE.Matrix4.rotationZMatrix(this.rotation.z));this.scaleMatrix=THREE.Matrix4.scaleMatrix(this.scale.x,this.scale.y,this.scale.z);this.matrix.copy(this.matrixPosition);this.matrix.multiplySelf(this.rotationMatrix);this.matrix.multiplySelf(this.scaleMatrix)}};THREE.Particle=function(a){THREE.Object3D.call(this);this.material=a instanceof Array?a:[a];this.autoUpdateMatrix=false};
+THREE.Particle.prototype=new THREE.Object3D;THREE.Particle.prototype.constructor=THREE.Particle;THREE.Line=function(a,c){THREE.Object3D.call(this);this.geometry=a;this.material=c instanceof Array?c:[c]};THREE.Line.prototype=new THREE.Object3D;THREE.Line.prototype.constructor=THREE.Line;
+THREE.Mesh=function(a,c,e){THREE.Object3D.call(this);this.geometry=a;this.material=c instanceof Array?c:[c];this.overdraw=this.doubleSided=this.flipSided=false;this.materialFaceGroup={};this.sortFacesByMaterial();e&&this.normalizeUVs();this.geometry.computeBoundingBox()};THREE.Mesh.prototype=new THREE.Object3D;THREE.Mesh.prototype.constructor=THREE.Mesh;
+THREE.Mesh.prototype.sortFacesByMaterial=function(){function a(h){var k=[];c=0;for(e=h.length;c<e;c++)h[c]==undefined?k.push("undefined"):k.push(h[c].toString());return k.join("_")}var c,e,g,b,d,n,q,o,f={};g=0;for(b=this.geometry.faces.length;g<b;g++){d=this.geometry.faces[g];n=d.material;q=a(n);if(f[q]==undefined)f[q]={hash:q,counter:0};o=f[q].hash+"_"+f[q].counter;if(this.materialFaceGroup[o]==undefined)this.materialFaceGroup[o]={faces:[],material:n,vertices:0};d=d instanceof THREE.Face3?3:4;if(this.materialFaceGroup[o].vertices+
+d>65535){f[q].counter+=1;o=f[q].hash+"_"+f[q].counter;if(this.materialFaceGroup[o]==undefined)this.materialFaceGroup[o]={faces:[],material:n,vertices:0}}this.materialFaceGroup[o].faces.push(g);this.materialFaceGroup[o].vertices+=d}};THREE.Mesh.prototype.normalizeUVs=function(){var a,c,e,g,b;a=0;for(c=this.geometry.uvs.length;a<c;a++){b=this.geometry.uvs[a];e=0;for(g=b.length;e<g;e++){if(b[e].u!=1)b[e].u-=Math.floor(b[e].u);if(b[e].v!=1)b[e].v-=Math.floor(b[e].v)}}};THREE.FlatShading=0;
+THREE.SmoothShading=1;THREE.NormalBlending=0;THREE.AdditiveBlending=1;THREE.SubtractiveBlending=2;
+THREE.LineBasicMaterial=function(a){this.color=new THREE.Color(16711680);this.opacity=1;this.blending=THREE.NormalBlending;this.linewidth=1;this.linejoin=this.linecap="round";if(a){a.color!==undefined&&this.color.setHex(a.color);if(a.opacity!==undefined)this.opacity=a.opacity;if(a.blending!==undefined)this.blending=a.blending;if(a.linewidth!==undefined)this.linewidth=a.linewidth;if(a.linecap!==undefined)this.linecap=a.linecap;if(a.linejoin!==undefined)this.linejoin=a.linejoin}this.toString=function(){return"THREE.LineBasicMaterial (<br/>color: "+
+this.color+"<br/>opacity: "+this.opacity+"<br/>blending: "+this.blending+"<br/>linewidth: "+this.linewidth+"<br/>linecap: "+this.linecap+"<br/>linejoin: "+this.linejoin+"<br/>)"}};
+THREE.MeshBasicMaterial=function(a){this.id=THREE.MeshBasicMaterialCounter.value++;this.color=new THREE.Color(15658734);this.env_map=this.map=null;this.combine=THREE.Multiply;this.reflectivity=1;this.refraction_ratio=0.98;this.opacity=1;this.shading=THREE.SmoothShading;this.blending=THREE.NormalBlending;this.wireframe=false;this.wireframe_linewidth=1;this.wireframe_linejoin=this.wireframe_linecap="round";if(a){a.color!==undefined&&this.color.setHex(a.color);if(a.map!==undefined)this.map=a.map;if(a.env_map!==
+undefined)this.env_map=a.env_map;if(a.combine!==undefined)this.combine=a.combine;if(a.reflectivity!==undefined)this.reflectivity=a.reflectivity;if(a.refraction_ratio!==undefined)this.refraction_ratio=a.refraction_ratio;if(a.opacity!==undefined)this.opacity=a.opacity;if(a.shading!==undefined)this.shading=a.shading;if(a.blending!==undefined)this.blending=a.blending;if(a.wireframe!==undefined)this.wireframe=a.wireframe;if(a.wireframe_linewidth!==undefined)this.wireframe_linewidth=a.wireframe_linewidth;
+if(a.wireframe_linecap!==undefined)this.wireframe_linecap=a.wireframe_linecap;if(a.wireframe_linejoin!==undefined)this.wireframe_linejoin=a.wireframe_linejoin}this.toString=function(){return"THREE.MeshBasicMaterial (<br/>id: "+this.id+"<br/>color: "+this.color+"<br/>map: "+this.map+"<br/>env_map: "+this.env_map+"<br/>combine: "+this.combine+"<br/>reflectivity: "+this.reflectivity+"<br/>refraction_ratio: "+this.refraction_ratio+"<br/>opacity: "+this.opacity+"<br/>blending: "+this.blending+"<br/>wireframe: "+
+this.wireframe+"<br/>wireframe_linewidth: "+this.wireframe_linewidth+"<br/>wireframe_linecap: "+this.wireframe_linecap+"<br/>wireframe_linejoin: "+this.wireframe_linejoin+"<br/>)"}};THREE.MeshBasicMaterialCounter={value:0};
+THREE.MeshLambertMaterial=function(a){this.id=THREE.MeshLambertMaterialCounter.value++;this.color=new THREE.Color(15658734);this.env_map=this.map=null;this.combine=THREE.Multiply;this.reflectivity=1;this.refraction_ratio=0.98;this.opacity=1;this.shading=THREE.SmoothShading;this.blending=THREE.NormalBlending;this.wireframe=false;this.wireframe_linewidth=1;this.wireframe_linejoin=this.wireframe_linecap="round";if(a){a.color!==undefined&&this.color.setHex(a.color);if(a.map!==undefined)this.map=a.map;
+if(a.env_map!==undefined)this.env_map=a.env_map;if(a.combine!==undefined)this.combine=a.combine;if(a.reflectivity!==undefined)this.reflectivity=a.reflectivity;if(a.refraction_ratio!==undefined)this.refraction_ratio=a.refraction_ratio;if(a.opacity!==undefined)this.opacity=a.opacity;if(a.shading!==undefined)this.shading=a.shading;if(a.blending!==undefined)this.blending=a.blending;if(a.wireframe!==undefined)this.wireframe=a.wireframe;if(a.wireframe_linewidth!==undefined)this.wireframe_linewidth=a.wireframe_linewidth;
+if(a.wireframe_linecap!==undefined)this.wireframe_linecap=a.wireframe_linecap;if(a.wireframe_linejoin!==undefined)this.wireframe_linejoin=a.wireframe_linejoin}this.toString=function(){return"THREE.MeshLambertMaterial (<br/>id: "+this.id+"<br/>color: "+this.color+"<br/>map: "+this.map+"<br/>env_map: "+this.env_map+"<br/>combine: "+this.combine+"<br/>reflectivity: "+this.reflectivity+"<br/>refraction_ratio: "+this.refraction_ratio+"<br/>opacity: "+this.opacity+"<br/>shading: "+this.shading+"<br/>blending: "+
+this.blending+"<br/>wireframe: "+this.wireframe+"<br/>wireframe_linewidth: "+this.wireframe_linewidth+"<br/>wireframe_linecap: "+this.wireframe_linecap+"<br/>wireframe_linejoin: "+this.wireframe_linejoin+"<br/> )"}};THREE.MeshLambertMaterialCounter={value:0};
+THREE.MeshPhongMaterial=function(a){this.id=THREE.MeshPhongMaterialCounter.value++;this.color=new THREE.Color(15658734);this.ambient=new THREE.Color(328965);this.specular=new THREE.Color(1118481);this.shininess=30;this.env_map=this.specular_map=this.map=null;this.combine=THREE.Multiply;this.reflectivity=1;this.refraction_ratio=0.98;this.opacity=1;this.shading=THREE.SmoothShading;this.blending=THREE.NormalBlending;this.wireframe=false;this.wireframe_linewidth=1;this.wireframe_linejoin=this.wireframe_linecap=
+"round";if(a){if(a.color!==undefined)this.color=new THREE.Color(a.color);if(a.ambient!==undefined)this.ambient=new THREE.Color(a.ambient);if(a.specular!==undefined)this.specular=new THREE.Color(a.specular);if(a.shininess!==undefined)this.shininess=a.shininess;if(a.map!==undefined)this.map=a.map;if(a.specular_map!==undefined)this.specular_map=a.specular_map;if(a.env_map!==undefined)this.env_map=a.env_map;if(a.combine!==undefined)this.combine=a.combine;if(a.reflectivity!==undefined)this.reflectivity=
+a.reflectivity;if(a.refraction_ratio!==undefined)this.refraction_ratio=a.refraction_ratio;if(a.opacity!==undefined)this.opacity=a.opacity;if(a.shading!==undefined)this.shading=a.shading;if(a.blending!==undefined)this.blending=a.blending;if(a.wireframe!==undefined)this.wireframe=a.wireframe;if(a.wireframe_linewidth!==undefined)this.wireframe_linewidth=a.wireframe_linewidth;if(a.wireframe_linecap!==undefined)this.wireframe_linecap=a.wireframe_linecap;if(a.wireframe_linejoin!==undefined)this.wireframe_linejoin=
+a.wireframe_linejoin}this.toString=function(){return"THREE.MeshPhongMaterial (<br/>id: "+this.id+"<br/>color: "+this.color+"<br/>ambient: "+this.ambient+"<br/>specular: "+this.specular+"<br/>shininess: "+this.shininess+"<br/>map: "+this.map+"<br/>specular_map: "+this.specular_map+"<br/>env_map: "+this.env_map+"<br/>combine: "+this.combine+"<br/>reflectivity: "+this.reflectivity+"<br/>refraction_ratio: "+this.refraction_ratio+"<br/>opacity: "+this.opacity+"<br/>shading: "+this.shading+"<br/>wireframe: "+
+this.wireframe+"<br/>wireframe_linewidth: "+this.wireframe_linewidth+"<br/>wireframe_linecap: "+this.wireframe_linecap+"<br/>wireframe_linejoin: "+this.wireframe_linejoin+"<br/>"+ +")"}};THREE.MeshPhongMaterialCounter={value:0};
+THREE.MeshDepthMaterial=function(a){this.near=1;this.far=1E3;this.opacity=1;this.blending=THREE.NormalBlending;if(a){if(a.near!==undefined)this.near=a.near;if(a.far!==undefined)this.far=a.far;if(a.opacity!==undefined)this.opacity=a.opacity;if(a.blending!==undefined)this.blending=a.blending}this.__2near=2*this.near;this.__farPlusNear=this.far+this.near;this.__farMinusNear=this.far-this.near;this.toString=function(){return"THREE.MeshDepthMaterial"}};
+THREE.MeshNormalMaterial=function(a){this.opacity=1;this.shading=THREE.FlatShading;this.blending=THREE.NormalBlending;if(a){if(a.opacity!==undefined)this.opacity=a.opacity;if(a.shading!==undefined)this.shading=a.shading;if(a.blending!==undefined)this.blending=a.blending}this.toString=function(){return"THREE.MeshNormalMaterial"}};THREE.MeshFaceMaterial=function(){this.toString=function(){return"THREE.MeshFaceMaterial"}};
+THREE.MeshCubeMaterial=function(a){this.id=THREE.MeshCubeMaterial.value++;this.env_map=null;this.blending=THREE.NormalBlending;if(a)if(a.env_map!==undefined)this.env_map=a.env_map;this.toString=function(){return"THREE.MeshCubeMaterial( id: "+this.id+"<br/>env_map: "+this.env_map+" )"}};THREE.MeshCubeMaterialCounter={value:0};
+THREE.ParticleBasicMaterial=function(a){this.color=new THREE.Color(16711680);this.map=null;this.opacity=1;this.blending=THREE.NormalBlending;this.offset=new THREE.Vector2;if(a){a.color!==undefined&&this.color.setHex(a.color);if(a.map!==undefined)this.map=a.map;if(a.opacity!==undefined)this.opacity=a.opacity;if(a.blending!==undefined)this.blending=a.blending}this.toString=function(){return"THREE.ParticleBasicMaterial (<br/>color: "+this.color+"<br/>map: "+this.map+"<br/>opacity: "+this.opacity+"<br/>blending: "+
+this.blending+"<br/>)"}};THREE.ParticleCircleMaterial=function(a){this.color=new THREE.Color(16711680);this.opacity=1;this.blending=THREE.NormalBlending;if(a){a.color!==undefined&&this.color.setHex(a.color);if(a.opacity!==undefined)this.opacity=a.opacity;if(a.blending!==undefined)this.blending=a.blending}this.toString=function(){return"THREE.ParticleCircleMaterial (<br/>color: "+this.color+"<br/>opacity: "+this.opacity+"<br/>blending: "+this.blending+"<br/>)"}};
+THREE.ParticleDOMMaterial=function(a){this.domElement=a;this.toString=function(){return"THREE.ParticleDOMMaterial ( domElement: "+this.domElement+" )"}};THREE.Texture=function(a,c,e,g){this.image=a;this.loaded=false;this.mapping=c!==undefined?c:THREE.UVMapping;this.wrap_s=e!==undefined?e:THREE.ClampToEdge;this.wrap_t=g!==undefined?g:THREE.ClampToEdge;this.toString=function(){return"THREE.Texture (<br/>image: "+this.image+"<br/>wrap_s: "+this.wrap_s+"<br/>wrap_t: "+this.wrap_t+"<br/>)"}};
+THREE.UVMapping=0;THREE.ReflectionMap=1;THREE.RefractionMap=2;THREE.Multiply=0;THREE.Mix=1;THREE.Repeat=0;THREE.ClampToEdge=1;THREE.MirroredRepeat=2;THREE.TextureCube=function(a,c){this.image=a;this.mapping=c?c:THREE.ReflectionMap;this.toString=function(){return"THREE.TextureCube (<br/>image: "+this.image+"<br/>mapping: "+this.mapping+"<br/>)"}};
+THREE.Scene=function(){this.objects=[];this.lights=[];this.addObject=function(a){this.objects.push(a)};this.removeObject=function(a){a=this.objects.indexOf(a);a!==-1&&this.objects.splice(a,1)};this.addLight=function(a){this.lights.push(a)};this.removeLight=function(a){a=this.lights.indexOf(a);a!==-1&&this.lights.splice(a,1)};this.toString=function(){return"THREE.Scene ( "+this.objects+" )"}};
+THREE.Projector=function(){function a(L,u){var w=0,H=1,A=L.z+L.w,I=u.z+u.w,p=-L.z+L.w,x=-u.z+u.w;if(A>=0&&I>=0&&p>=0&&x>=0)return true;else if(A<0&&I<0||p<0&&x<0)return false;else{if(A<0)w=Math.max(w,A/(A-I));else if(I<0)H=Math.min(H,A/(A-I));if(p<0)w=Math.max(w,p/(p-x));else if(x<0)H=Math.min(H,p/(p-x));if(H<w)return false;else{L.lerpSelf(u,w);u.lerpSelf(L,1-H);return true}}}var c=null,e,g,b,d=[],n,q,o=[],f,h,k=[],i=new THREE.Vector4,m=new THREE.Matrix4,l=new THREE.Matrix4,s=new THREE.Vector4,v=
+new THREE.Vector4,j;this.projectScene=function(L,u){var w,H,A,I,p,x,Y,C,Z,O,aa,ca,M,Q,r,E,K;c=[];b=_face4Count=q=h=0;u.autoUpdateMatrix&&u.updateMatrix();m.multiply(u.projectionMatrix,u.matrix);Y=L.objects;w=0;for(H=Y.length;w<H;w++){C=Y[w];C.autoUpdateMatrix&&C.updateMatrix();Z=C.matrix;O=C.rotationMatrix;aa=C.material;ca=C.overdraw;if(C instanceof THREE.Mesh){M=C.geometry.vertices;A=0;for(I=M.length;A<I;A++){Q=M[A];Q.positionWorld.copy(Q.position);Z.transform(Q.positionWorld);r=Q.positionScreen;
+r.copy(Q.positionWorld);m.transform(r);r.multiplyScalar(1/r.w);Q.__visible=r.z>0&&r.z<1}Q=C.geometry.faces;A=0;for(I=Q.length;A<I;A++){r=Q[A];if(r instanceof THREE.Face3){p=M[r.a];x=M[r.b];E=M[r.c];if(p.__visible&&x.__visible&&E.__visible)if(C.doubleSided||C.flipSided!=(E.positionScreen.x-p.positionScreen.x)*(x.positionScreen.y-p.positionScreen.y)-(E.positionScreen.y-p.positionScreen.y)*(x.positionScreen.x-p.positionScreen.x)<0){e=d[b]=d[b]||new THREE.RenderableFace3;e.v1.positionWorld.copy(p.positionWorld);
+e.v2.positionWorld.copy(x.positionWorld);e.v3.positionWorld.copy(E.positionWorld);e.v1.positionScreen.copy(p.positionScreen);e.v2.positionScreen.copy(x.positionScreen);e.v3.positionScreen.copy(E.positionScreen);e.normalWorld.copy(r.normal);O.transform(e.normalWorld);e.centroidWorld.copy(r.centroid);Z.transform(e.centroidWorld);e.centroidScreen.copy(e.centroidWorld);m.transform(e.centroidScreen);E=r.vertexNormals;j=e.vertexNormalsWorld;p=0;for(x=E.length;p<x;p++){K=j[p].copy(E[p]);O.transform(K)}e.z=
+e.centroidScreen.z;e.meshMaterial=aa;e.faceMaterial=r.material;e.overdraw=ca;if(C.geometry.uvs[A]){e.uvs[0]=C.geometry.uvs[A][0];e.uvs[1]=C.geometry.uvs[A][1];e.uvs[2]=C.geometry.uvs[A][2]}c.push(e);b++}}else if(r instanceof THREE.Face4){p=M[r.a];x=M[r.b];E=M[r.c];K=M[r.d];if(p.__visible&&x.__visible&&E.__visible&&K.__visible)if(C.doubleSided||C.flipSided!=((K.positionScreen.x-p.positionScreen.x)*(x.positionScreen.y-p.positionScreen.y)-(K.positionScreen.y-p.positionScreen.y)*(x.positionScreen.x-p.positionScreen.x)<
+0||(x.positionScreen.x-E.positionScreen.x)*(K.positionScreen.y-E.positionScreen.y)-(x.positionScreen.y-E.positionScreen.y)*(K.positionScreen.x-E.positionScreen.x)<0)){e=d[b]=d[b]||new THREE.RenderableFace3;e.v1.positionWorld.copy(p.positionWorld);e.v2.positionWorld.copy(x.positionWorld);e.v3.positionWorld.copy(K.positionWorld);e.v1.positionScreen.copy(p.positionScreen);e.v2.positionScreen.copy(x.positionScreen);e.v3.positionScreen.copy(K.positionScreen);e.normalWorld.copy(r.normal);O.transform(e.normalWorld);
+e.centroidWorld.copy(r.centroid);Z.transform(e.centroidWorld);e.centroidScreen.copy(e.centroidWorld);m.transform(e.centroidScreen);e.z=e.centroidScreen.z;e.meshMaterial=aa;e.faceMaterial=r.material;e.overdraw=ca;if(C.geometry.uvs[A]){e.uvs[0]=C.geometry.uvs[A][0];e.uvs[1]=C.geometry.uvs[A][1];e.uvs[2]=C.geometry.uvs[A][3]}c.push(e);b++;g=d[b]=d[b]||new THREE.RenderableFace3;g.v1.positionWorld.copy(x.positionWorld);g.v2.positionWorld.copy(E.positionWorld);g.v3.positionWorld.copy(K.positionWorld);g.v1.positionScreen.copy(x.positionScreen);
+g.v2.positionScreen.copy(E.positionScreen);g.v3.positionScreen.copy(K.positionScreen);g.normalWorld.copy(e.normalWorld);g.centroidWorld.copy(e.centroidWorld);g.centroidScreen.copy(e.centroidScreen);g.z=g.centroidScreen.z;g.meshMaterial=aa;g.faceMaterial=r.material;g.overdraw=ca;if(C.geometry.uvs[A]){g.uvs[0]=C.geometry.uvs[A][1];g.uvs[1]=C.geometry.uvs[A][2];g.uvs[2]=C.geometry.uvs[A][3]}c.push(g);b++}}}}else if(C instanceof THREE.Line){l.multiply(m,Z);M=C.geometry.vertices;Q=M[0];Q.positionScreen.copy(Q.position);
+l.transform(Q.positionScreen);A=1;for(I=M.length;A<I;A++){p=M[A];p.positionScreen.copy(p.position);l.transform(p.positionScreen);x=M[A-1];s.copy(p.positionScreen);v.copy(x.positionScreen);if(a(s,v)){s.multiplyScalar(1/s.w);v.multiplyScalar(1/v.w);n=o[q]=o[q]||new THREE.RenderableLine;n.v1.positionScreen.copy(s);n.v2.positionScreen.copy(v);n.z=Math.max(s.z,v.z);n.material=C.material;c.push(n);q++}}}else if(C instanceof THREE.Particle){i.set(C.position.x,C.position.y,C.position.z,1);m.transform(i);
+i.z/=i.w;if(i.z>0&&i.z<1){f=k[h]=k[h]||new THREE.RenderableParticle;f.x=i.x/i.w;f.y=i.y/i.w;f.z=i.z;f.rotation=C.rotation.z;f.scale.x=C.scale.x*Math.abs(f.x-(i.x+u.projectionMatrix.n11)/(i.w+u.projectionMatrix.n14));f.scale.y=C.scale.y*Math.abs(f.y-(i.y+u.projectionMatrix.n22)/(i.w+u.projectionMatrix.n24));f.material=C.material;c.push(f);h++}}}c.sort(function(U,z){return z.z-U.z});return c};this.unprojectVector=function(L,u){var w=new THREE.Matrix4;w.multiply(THREE.Matrix4.makeInvert(u.matrix),THREE.Matrix4.makeInvert(u.projectionMatrix));
+w.transform(L);return L}};
+THREE.DOMRenderer=function(){THREE.Renderer.call(this);var a=null,c=new THREE.Projector,e,g,b,d;this.domElement=document.createElement("div");this.setSize=function(n,q){e=n;g=q;b=e/2;d=g/2};this.render=function(n,q){var o,f,h,k,i,m,l,s;a=c.projectScene(n,q);o=0;for(f=a.length;o<f;o++){i=a[o];if(i instanceof THREE.RenderableParticle){l=i.x*b+b;s=i.y*d+d;h=0;for(k=i.material.length;h<k;h++){m=i.material[h];if(m instanceof THREE.ParticleDOMMaterial){m=m.domElement;m.style.left=l+"px";m.style.top=s+"px"}}}}}};
+THREE.CanvasRenderer=function(){function a(D,T,P,B){var t,F,W,N,S=D.lights;D=0;for(t=S.length;D<t;D++){F=S[D];W=F.color;N=F.intensity;if(F instanceof THREE.DirectionalLight){F=P.dot(F.position)*N;if(F>0){B.r+=W.r*F;B.g+=W.g*F;B.b+=W.b*F}}else if(F instanceof THREE.PointLight){ra.sub(F.position,T);ra.normalize();F=P.dot(ra)*N;if(F>0){B.r+=W.r*F;B.g+=W.g*F;B.b+=W.b*F}}}}function c(D,T,P,B,t,F){if(t.opacity!=0){d(t.opacity);n(t.blending);Y=D.positionScreen.x;C=D.positionScreen.y;Z=T.positionScreen.x;
+O=T.positionScreen.y;aa=P.positionScreen.x;ca=P.positionScreen.y;var W=Y,N=C,S=Z,X=O,V=aa,ba=ca;j.beginPath();j.moveTo(W,N);j.lineTo(S,X);j.lineTo(V,ba);j.lineTo(W,N);j.closePath();if(t instanceof THREE.MeshBasicMaterial)if(t.map)b(Y,C,Z,O,aa,ca,t.map.image,B.uvs[0].u,B.uvs[0].v,B.uvs[1].u,B.uvs[1].v,B.uvs[2].u,B.uvs[2].v);else t.wireframe?e(t.color.__styleString,t.wireframe_linewidth):g(t.color.__styleString);else if(t instanceof THREE.MeshLambertMaterial){if(t.map&&!t.wireframe){b(Y,C,Z,O,aa,ca,
+t.map.image,B.uvs[0].u,B.uvs[0].v,B.uvs[1].u,B.uvs[1].v,B.uvs[2].u,B.uvs[2].v);n(THREE.SubtractiveBlending)}if(da)if(t.shading==THREE.SmoothShading&&!t.wireframe){Q.r=r.r=E.r=ea.r;Q.g=r.g=E.g=ea.g;Q.b=r.b=E.b=ea.b;a(F,B.v1.positionWorld,B.vertexNormalsWorld[0],Q);a(F,B.v2.positionWorld,B.vertexNormalsWorld[1],r);a(F,B.v3.positionWorld,B.vertexNormalsWorld[2],E);K.r=(r.r+E.r)*0.5;K.g=(r.g+E.g)*0.5;K.b=(r.b+E.b)*0.5;R=q(Q,r,E,K);b(Y,C,Z,O,aa,ca,R,0,0,1,0,0,1)}else{fa.r=ea.r;fa.g=ea.g;fa.b=ea.b;a(F,
+B.centroidWorld,B.normalWorld,fa);M.r=t.color.r*fa.r;M.g=t.color.g*fa.g;M.b=t.color.b*fa.b;M.updateStyleString();t.wireframe?e(M.__styleString,t.wireframe_linewidth):g(M.__styleString)}else t.wireframe?e(t.color.__styleString,t.wireframe_linewidth):g(t.color.__styleString)}else if(t instanceof THREE.MeshDepthMaterial){U=t.__2near;z=t.__farPlusNear;y=t.__farMinusNear;Q.r=Q.g=Q.b=1-U/(z-D.positionScreen.z*y);r.r=r.g=r.b=1-U/(z-T.positionScreen.z*y);E.r=E.g=E.b=1-U/(z-P.positionScreen.z*y);K.r=(r.r+
+E.r)*0.5;K.g=(r.g+E.g)*0.5;K.b=(r.b+E.b)*0.5;R=q(Q,r,E,K);b(Y,C,Z,O,aa,ca,R,0,0,1,0,0,1)}else if(t instanceof THREE.MeshNormalMaterial){M.r=o(B.normalWorld.x);M.g=o(B.normalWorld.y);M.b=o(B.normalWorld.z);M.updateStyleString();t.wireframe?e(M.__styleString,t.wireframe_linewidth):g(M.__styleString)}}}function e(D,T){if(w!=D)j.strokeStyle=w=D;if(A!=T)j.lineWidth=A=T;j.stroke()}function g(D){if(H!=D)j.fillStyle=H=D;j.fill()}function b(D,T,P,B,t,F,W,N,S,X,V,ba,ja){var ia=W.width-1,ga=W.height-1;N*=ia;
+S*=ga;X*=ia;V*=ga;ba*=ia;ja*=ga;P-=D;B-=T;t-=D;F-=T;X-=N;V-=S;ba-=N;ja-=S;ga=1/(X*ja-ba*V);ia=(ja*P-V*t)*ga;V=(ja*B-V*F)*ga;P=(X*t-ba*P)*ga;B=(X*F-ba*B)*ga;D=D-ia*N-P*S;T=T-V*N-B*S;j.save();j.transform(ia,V,P,B,D,T);j.clip();j.drawImage(W,0,0);j.restore()}function d(D){if(L!=D)j.globalAlpha=L=D}function n(D){if(u!=D){switch(D){case THREE.NormalBlending:j.globalCompositeOperation="source-over";break;case THREE.AdditiveBlending:j.globalCompositeOperation="lighter";break;case THREE.SubtractiveBlending:j.globalCompositeOperation=
+"darker"}u=D}}function q(D,T,P,B){ha[0]=~~(D.r*255);ha[1]=~~(D.g*255);ha[2]=~~(D.b*255);ha[4]=~~(T.r*255);ha[5]=~~(T.g*255);ha[6]=~~(T.b*255);ha[8]=~~(P.r*255);ha[9]=~~(P.g*255);ha[10]=~~(P.b*255);ha[12]=~~(B.r*255);ha[13]=~~(B.g*255);ha[14]=~~(B.b*255);na.putImageData(sa,0,0);qa.drawImage(oa,0,0);return pa}function o(D){return D<0?Math.min((1+D)*0.5,0.5):0.5+Math.min(D*0.5,0.5)}function f(D,T){var P=T.x-D.x,B=T.y-D.y,t=1/Math.sqrt(P*P+B*B);P*=t;B*=t;T.x+=P;T.y+=B;D.x-=P;D.y-=B}var h=null,k=new THREE.Projector,
+i=document.createElement("canvas"),m,l,s,v,j=i.getContext("2d"),L=1,u=0,w=null,H=null,A=1,I,p,x,Y,C,Z,O,aa,ca,M=new THREE.Color,Q=new THREE.Color,r=new THREE.Color,E=new THREE.Color,K=new THREE.Color,U,z,y,R,$=new THREE.Rectangle,G=new THREE.Rectangle,J=new THREE.Rectangle,da=false,fa=new THREE.Color,ea=new THREE.Color,ka=new THREE.Color,la=new THREE.Color,va=Math.PI*2,ra=new THREE.Vector3;new THREE.UV;new THREE.UV;new THREE.UV;new THREE.UV;var oa,na,sa,ha,pa,qa,ma=16;oa=document.createElement("canvas");
+oa.width=oa.height=2;na=oa.getContext("2d");na.fillStyle="rgba(0,0,0,1)";na.fillRect(0,0,2,2);sa=na.getImageData(0,0,2,2);ha=sa.data;pa=document.createElement("canvas");pa.width=pa.height=ma;qa=pa.getContext("2d");qa.translate(-ma/2,-ma/2);qa.scale(ma,ma);ma--;this.domElement=i;this.autoClear=true;this.setSize=function(D,T){m=D;l=T;s=m/2;v=l/2;i.width=m;i.height=l;$.set(-s,-v,s,v)};this.clear=function(){if(!G.isEmpty()){G.inflate(1);G.minSelf($);j.clearRect(G.getX(),G.getY(),G.getWidth(),G.getHeight());
+G.empty()}};this.render=function(D,T){var P,B,t,F,W,N,S,X;j.setTransform(1,0,0,-1,s,v);this.autoClear&&this.clear();h=k.projectScene(D,T);if(da=D.lights.length>0){W=D.lights;ea.setRGB(0,0,0);ka.setRGB(0,0,0);la.setRGB(0,0,0);P=0;for(B=W.length;P<B;P++){t=W[P];F=t.color;if(t instanceof THREE.AmbientLight){ea.r+=F.r;ea.g+=F.g;ea.b+=F.b}else if(t instanceof THREE.DirectionalLight){ka.r+=F.r;ka.g+=F.g;ka.b+=F.b}else if(t instanceof THREE.PointLight){la.r+=F.r;la.g+=F.g;la.b+=F.b}}}P=0;for(B=h.length;P<
+B;P++){t=h[P];J.empty();if(t instanceof THREE.RenderableParticle){I=t;I.x*=s;I.y*=v;F=0;for(W=t.material.length;F<W;F++){N=I;S=t;var V=t.material[F];if(V.opacity!=0){d(V.opacity);n(V.blending);X=void 0;var ba=void 0,ja=void 0,ia=void 0,ga=void 0,ta=void 0,ua=void 0;if(V instanceof THREE.ParticleBasicMaterial){if(V.map){ga=V.map;ta=ga.width>>1;ua=ga.height>>1;ja=S.scale.x*s;ia=S.scale.y*v;X=ja*ta;ba=ia*ua;J.set(N.x-X,N.y-ba,N.x+X,N.y+ba);if($.instersects(J)){j.save();j.translate(N.x,N.y);j.rotate(-S.rotation);
+j.scale(ja,-ia);j.translate(-ta,-ua);j.drawImage(ga,0,0);j.restore()}}}else if(V instanceof THREE.ParticleCircleMaterial){if(da){fa.r=ea.r+ka.r+la.r;fa.g=ea.g+ka.g+la.g;fa.b=ea.b+ka.b+la.b;M.r=V.color.r*fa.r;M.g=V.color.g*fa.g;M.b=V.color.b*fa.b;M.updateStyleString()}else M.__styleString=V.color.__styleString;X=S.scale.x*s;ba=S.scale.y*v;J.set(N.x-X,N.y-ba,N.x+X,N.y+ba);if($.instersects(J)){V=M.__styleString;if(H!=V)j.fillStyle=H=V;j.save();j.translate(N.x,N.y);j.rotate(-S.rotation);j.scale(X,ba);
+j.beginPath();j.arc(0,0,1,0,va,true);j.closePath();j.fill();j.restore()}}}}}else if(t instanceof THREE.RenderableLine){I=t.v1;p=t.v2;I.positionScreen.x*=s;I.positionScreen.y*=v;p.positionScreen.x*=s;p.positionScreen.y*=v;J.addPoint(I.positionScreen.x,I.positionScreen.y);J.addPoint(p.positionScreen.x,p.positionScreen.y);if($.instersects(J)){F=0;for(W=t.material.length;F<W;){S=I;X=p;N=t.material[F++];if(N.opacity!=0){d(N.opacity);n(N.blending);j.beginPath();j.moveTo(S.positionScreen.x,S.positionScreen.y);
+j.lineTo(X.positionScreen.x,X.positionScreen.y);j.closePath();if(N instanceof THREE.LineBasicMaterial){M.__styleString=N.color.__styleString;S=N.linewidth;if(A!=S)j.lineWidth=A=S;S=M.__styleString;if(w!=S)j.strokeStyle=w=S;j.stroke();J.inflate(N.linewidth*2)}}}}}else if(t instanceof THREE.RenderableFace3){I=t.v1;p=t.v2;x=t.v3;I.positionScreen.x*=s;I.positionScreen.y*=v;p.positionScreen.x*=s;p.positionScreen.y*=v;x.positionScreen.x*=s;x.positionScreen.y*=v;if(t.overdraw){f(I.positionScreen,p.positionScreen);
+f(p.positionScreen,x.positionScreen);f(x.positionScreen,I.positionScreen)}J.addPoint(I.positionScreen.x,I.positionScreen.y);J.addPoint(p.positionScreen.x,p.positionScreen.y);J.addPoint(x.positionScreen.x,x.positionScreen.y);if($.instersects(J)){F=0;for(W=t.meshMaterial.length;F<W;){X=t.meshMaterial[F++];if(X instanceof THREE.MeshFaceMaterial){N=0;for(S=t.faceMaterial.length;N<S;)(X=t.faceMaterial[N++])&&c(I,p,x,t,X,D)}else c(I,p,x,t,X,D)}}}G.addRectangle(J)}j.setTransform(1,0,0,1,0,0)}};
+THREE.SVGRenderer=function(){function a(r,E,K){var U,z,y,R;U=0;for(z=r.lights.length;U<z;U++){y=r.lights[U];if(y instanceof THREE.DirectionalLight){R=E.normalWorld.dot(y.position)*y.intensity;if(R>0){K.r+=y.color.r*R;K.g+=y.color.g*R;K.b+=y.color.b*R}}else if(y instanceof THREE.PointLight){x.sub(y.position,E.centroidWorld);x.normalize();R=E.normalWorld.dot(x)*y.intensity;if(R>0){K.r+=y.color.r*R;K.g+=y.color.g*R;K.b+=y.color.b*R}}}}function c(r,E,K,U,z,y){O=g(aa++);O.setAttribute("d","M "+r.positionScreen.x+
+" "+r.positionScreen.y+" L "+E.positionScreen.x+" "+E.positionScreen.y+" L "+K.positionScreen.x+","+K.positionScreen.y+"z");if(z instanceof THREE.MeshBasicMaterial)u.__styleString=z.color.__styleString;else if(z instanceof THREE.MeshLambertMaterial)if(L){w.r=H.r;w.g=H.g;w.b=H.b;a(y,U,w);u.r=z.color.r*w.r;u.g=z.color.g*w.g;u.b=z.color.b*w.b;u.updateStyleString()}else u.__styleString=z.color.__styleString;else if(z instanceof THREE.MeshDepthMaterial){p=1-z.__2near/(z.__farPlusNear-U.z*z.__farMinusNear);
+u.setRGB(p,p,p)}else z instanceof THREE.MeshNormalMaterial&&u.setRGB(b(U.normalWorld.x),b(U.normalWorld.y),b(U.normalWorld.z));z.wireframe?O.setAttribute("style","fill: none; stroke: "+u.__styleString+"; stroke-width: "+z.wireframe_linewidth+"; stroke-opacity: "+z.opacity+"; stroke-linecap: "+z.wireframe_linecap+"; stroke-linejoin: "+z.wireframe_linejoin):O.setAttribute("style","fill: "+u.__styleString+"; fill-opacity: "+z.opacity);q.appendChild(O)}function e(r,E,K,U,z,y,R){O=g(aa++);O.setAttribute("d",
+"M "+r.positionScreen.x+" "+r.positionScreen.y+" L "+E.positionScreen.x+" "+E.positionScreen.y+" L "+K.positionScreen.x+","+K.positionScreen.y+" L "+U.positionScreen.x+","+U.positionScreen.y+"z");if(y instanceof THREE.MeshBasicMaterial)u.__styleString=y.color.__styleString;else if(y instanceof THREE.MeshLambertMaterial)if(L){w.r=H.r;w.g=H.g;w.b=H.b;a(R,z,w);u.r=y.color.r*w.r;u.g=y.color.g*w.g;u.b=y.color.b*w.b;u.updateStyleString()}else u.__styleString=y.color.__styleString;else if(y instanceof THREE.MeshDepthMaterial){p=
+1-y.__2near/(y.__farPlusNear-z.z*y.__farMinusNear);u.setRGB(p,p,p)}else y instanceof THREE.MeshNormalMaterial&&u.setRGB(b(z.normalWorld.x),b(z.normalWorld.y),b(z.normalWorld.z));y.wireframe?O.setAttribute("style","fill: none; stroke: "+u.__styleString+"; stroke-width: "+y.wireframe_linewidth+"; stroke-opacity: "+y.opacity+"; stroke-linecap: "+y.wireframe_linecap+"; stroke-linejoin: "+y.wireframe_linejoin):O.setAttribute("style","fill: "+u.__styleString+"; fill-opacity: "+y.opacity);q.appendChild(O)}
+function g(r){if(Y[r]==null){Y[r]=document.createElementNS("http://www.w3.org/2000/svg","path");Q==0&&Y[r].setAttribute("shape-rendering","crispEdges");return Y[r]}return Y[r]}function b(r){return r<0?Math.min((1+r)*0.5,0.5):0.5+Math.min(r*0.5,0.5)}var d=null,n=new THREE.Projector,q=document.createElementNS("http://www.w3.org/2000/svg","svg"),o,f,h,k,i,m,l,s,v=new THREE.Rectangle,j=new THREE.Rectangle,L=false,u=new THREE.Color(16777215),w=new THREE.Color(16777215),H=new THREE.Color(0),A=new THREE.Color(0),
+I=new THREE.Color(0),p,x=new THREE.Vector3,Y=[],C=[],Z=[],O,aa,ca,M,Q=1;this.domElement=q;this.autoClear=true;this.setQuality=function(r){switch(r){case "high":Q=1;break;case "low":Q=0}};this.setSize=function(r,E){o=r;f=E;h=o/2;k=f/2;q.setAttribute("viewBox",-h+" "+-k+" "+o+" "+f);q.setAttribute("width",o);q.setAttribute("height",f);v.set(-h,-k,h,k)};this.clear=function(){for(;q.childNodes.length>0;)q.removeChild(q.childNodes[0])};this.render=function(r,E){var K,U,z,y,R,$,G,J;this.autoClear&&this.clear();
+d=n.projectScene(r,E);M=ca=aa=0;if(L=r.lights.length>0){G=r.lights;H.setRGB(0,0,0);A.setRGB(0,0,0);I.setRGB(0,0,0);K=0;for(U=G.length;K<U;K++){z=G[K];y=z.color;if(z instanceof THREE.AmbientLight){H.r+=y.r;H.g+=y.g;H.b+=y.b}else if(z instanceof THREE.DirectionalLight){A.r+=y.r;A.g+=y.g;A.b+=y.b}else if(z instanceof THREE.PointLight){I.r+=y.r;I.g+=y.g;I.b+=y.b}}}K=0;for(U=d.length;K<U;K++){G=d[K];j.empty();if(G instanceof THREE.RenderableParticle){i=G;i.x*=h;i.y*=-k;z=0;for(y=G.material.length;z<y;z++)if(J=
+G.material[z]){R=i;$=G;J=J;var da=ca++;if(C[da]==null){C[da]=document.createElementNS("http://www.w3.org/2000/svg","circle");Q==0&&C[da].setAttribute("shape-rendering","crispEdges")}O=C[da];O.setAttribute("cx",R.x);O.setAttribute("cy",R.y);O.setAttribute("r",$.scale.x*h);if(J instanceof THREE.ParticleCircleMaterial){if(L){w.r=H.r+A.r+I.r;w.g=H.g+A.g+I.g;w.b=H.b+A.b+I.b;u.r=J.color.r*w.r;u.g=J.color.g*w.g;u.b=J.color.b*w.b;u.updateStyleString()}else u=J.color;O.setAttribute("style","fill: "+u.__styleString)}q.appendChild(O)}}else if(G instanceof
+THREE.RenderableLine){i=G.v1;m=G.v2;i.positionScreen.x*=h;i.positionScreen.y*=-k;m.positionScreen.x*=h;m.positionScreen.y*=-k;j.addPoint(i.positionScreen.x,i.positionScreen.y);j.addPoint(m.positionScreen.x,m.positionScreen.y);if(v.instersects(j)){z=0;for(y=G.material.length;z<y;)if(J=G.material[z++]){R=i;$=m;J=J;da=M++;if(Z[da]==null){Z[da]=document.createElementNS("http://www.w3.org/2000/svg","line");Q==0&&Z[da].setAttribute("shape-rendering","crispEdges")}O=Z[da];O.setAttribute("x1",R.positionScreen.x);
+O.setAttribute("y1",R.positionScreen.y);O.setAttribute("x2",$.positionScreen.x);O.setAttribute("y2",$.positionScreen.y);if(J instanceof THREE.LineBasicMaterial){u.__styleString=J.color.__styleString;O.setAttribute("style","fill: none; stroke: "+u.__styleString+"; stroke-width: "+J.linewidth+"; stroke-opacity: "+J.opacity+"; stroke-linecap: "+J.linecap+"; stroke-linejoin: "+J.linejoin);q.appendChild(O)}}}}else if(G instanceof THREE.RenderableFace3){i=G.v1;m=G.v2;l=G.v3;i.positionScreen.x*=h;i.positionScreen.y*=
+-k;m.positionScreen.x*=h;m.positionScreen.y*=-k;l.positionScreen.x*=h;l.positionScreen.y*=-k;j.addPoint(i.positionScreen.x,i.positionScreen.y);j.addPoint(m.positionScreen.x,m.positionScreen.y);j.addPoint(l.positionScreen.x,l.positionScreen.y);if(v.instersects(j)){z=0;for(y=G.meshMaterial.length;z<y;){J=G.meshMaterial[z++];if(J instanceof THREE.MeshFaceMaterial){R=0;for($=G.faceMaterial.length;R<$;)(J=G.faceMaterial[R++])&&c(i,m,l,G,J,r)}else J&&c(i,m,l,G,J,r)}}}else if(G instanceof THREE.RenderableFace4){i=
+G.v1;m=G.v2;l=G.v3;s=G.v4;i.positionScreen.x*=h;i.positionScreen.y*=-k;m.positionScreen.x*=h;m.positionScreen.y*=-k;l.positionScreen.x*=h;l.positionScreen.y*=-k;s.positionScreen.x*=h;s.positionScreen.y*=-k;j.addPoint(i.positionScreen.x,i.positionScreen.y);j.addPoint(m.positionScreen.x,m.positionScreen.y);j.addPoint(l.positionScreen.x,l.positionScreen.y);j.addPoint(s.positionScreen.x,s.positionScreen.y);if(v.instersects(j)){z=0;for(y=G.meshMaterial.length;z<y;){J=G.meshMaterial[z++];if(J instanceof
+THREE.MeshFaceMaterial){R=0;for($=G.faceMaterial.length;R<$;)(J=G.faceMaterial[R++])&&e(i,m,l,s,G,J,r)}else J&&e(i,m,l,s,G,J,r)}}}}}};
+THREE.WebGLRenderer=function(a){function c(f,h){var k;if(f=="fragment")k=b.createShader(b.FRAGMENT_SHADER);else if(f=="vertex")k=b.createShader(b.VERTEX_SHADER);b.shaderSource(k,h);b.compileShader(k);if(!b.getShaderParameter(k,b.COMPILE_STATUS)){alert(b.getShaderInfoLog(k));return null}return k}function e(f){switch(f){case THREE.Repeat:return b.REPEAT;case THREE.ClampToEdge:return b.CLAMP_TO_EDGE;case THREE.MirroredRepeat:return b.MIRRORED_REPEAT}return 0}var g=document.createElement("canvas"),b,
+d,n=new THREE.Matrix4,q;a=function(f,h){if(f){var k,i,m,l=pointLights=maxDirLights=maxPointLights=0;k=0;for(i=f.lights.length;k<i;k++){m=f.lights[k];m instanceof THREE.DirectionalLight&&l++;m instanceof THREE.PointLight&&pointLights++}if(pointLights+l<=h){maxDirLights=l;maxPointLights=pointLights}else{maxDirLights=Math.ceil(h*l/(pointLights+l));maxPointLights=h-maxDirLights}return{directional:maxDirLights,point:maxPointLights}}return{directional:1,point:h-1}}(a,4);this.domElement=g;this.autoClear=
+true;try{b=g.getContext("experimental-webgl",{antialias:true})}catch(o){}if(!b){alert("WebGL not supported");throw"cannot create webgl context";}b.clearColor(0,0,0,1);b.clearDepth(1);b.enable(b.DEPTH_TEST);b.depthFunc(b.LEQUAL);b.frontFace(b.CCW);b.cullFace(b.BACK);b.enable(b.CULL_FACE);b.enable(b.BLEND);b.blendFunc(b.ONE,b.ONE_MINUS_SRC_ALPHA);b.clearColor(0,0,0,0);(function(f,h){d=b.createProgram();b.attachShader(d,c("fragment",["#ifdef GL_ES\nprecision highp float;\n#endif",f?"#define MAX_DIR_LIGHTS "+
+f:"",h?"#define MAX_POINT_LIGHTS "+h:"","uniform int material;\nuniform bool enableMap;\nuniform bool enableCubeMap;\nuniform bool mixEnvMap;\nuniform samplerCube tCube;\nuniform float mReflectivity;\nuniform sampler2D tMap;\nuniform vec4 mColor;\nuniform float mOpacity;\nuniform vec4 mAmbient;\nuniform vec4 mSpecular;\nuniform float mShininess;\nuniform float m2Near;\nuniform float mFarPlusNear;\nuniform float mFarMinusNear;\nuniform int pointLightNumber;\nuniform int directionalLightNumber;",f?
+"uniform mat4 viewMatrix;":"",f?"uniform vec3 directionalLightDirection[ MAX_DIR_LIGHTS ];":"","varying vec3 vNormal;\nvarying vec2 vUv;\nvarying vec3 vLightWeighting;",h?"varying vec3 vPointLightVector[ MAX_POINT_LIGHTS ];":"","varying vec3 vViewPosition;\nvarying vec3 vReflect;\nuniform vec3 cameraPosition;\nvoid main() {\nvec4 mapColor = vec4( 1.0, 1.0, 1.0, 1.0 );\nvec4 cubeColor = vec4( 1.0, 1.0, 1.0, 1.0 );\nif ( enableMap ) {\nmapColor = texture2D( tMap, vUv );\n}\nif ( enableCubeMap ) {\ncubeColor.r = textureCube( tCube, vec3( -vReflect.x, vReflect.yz ) ).r;\ncubeColor.g = textureCube( tCube, vec3( -vReflect.x + 0.005, vReflect.yz ) ).g;\ncubeColor.b = textureCube( tCube, vec3( -vReflect.x + 0.01, vReflect.yz ) ).b;\n}\nif ( material == 5 ) { \nvec3 wPos = cameraPosition - vViewPosition;\ngl_FragColor = textureCube( tCube, vec3( -wPos.x, wPos.yz ) );\n} else if ( material == 4 ) { \ngl_FragColor = vec4( 0.5*normalize( vNormal ) + vec3(0.5, 0.5, 0.5), mOpacity );\n} else if ( material == 3 ) { \nfloat w = 0.5;\ngl_FragColor = vec4( w, w, w, mOpacity );\n} else if ( material == 2 ) { \nvec3 normal = normalize( vNormal );\nvec3 viewPosition = normalize( vViewPosition );",
+h?"vec4 pointDiffuse  = vec4( 0.0, 0.0, 0.0, 0.0 );":"",h?"vec4 pointSpecular = vec4( 0.0, 0.0, 0.0, 0.0 );":"",h?"for( int i = 0; i < MAX_POINT_LIGHTS; i++ ) {":"",h?"vec3 pointVector = normalize( vPointLightVector[ i ] );":"",h?"vec3 pointHalfVector = normalize( vPointLightVector[ i ] + vViewPosition );":"",h?"float pointDotNormalHalf = dot( normal, pointHalfVector );":"",h?"float pointDiffuseWeight = max( dot( normal, pointVector ), 0.0 );":"",h?"float pointSpecularWeight = 0.0;":"",h?"if ( pointDotNormalHalf >= 0.0 )":
+"",h?"pointSpecularWeight = pow( pointDotNormalHalf, mShininess );":"",h?"pointDiffuse  += mColor * pointDiffuseWeight;":"",h?"pointSpecular += mSpecular * pointSpecularWeight;":"",h?"}":"",f?"vec4 dirDiffuse  = vec4( 0.0, 0.0, 0.0, 0.0 );":"",f?"vec4 dirSpecular = vec4( 0.0, 0.0, 0.0, 0.0 );":"",f?"for( int i = 0; i < MAX_DIR_LIGHTS; i++ ) {":"",f?"vec4 lDirection = viewMatrix * vec4( directionalLightDirection[ i ], 0.0 );":"",f?"vec3 dirVector = normalize( lDirection.xyz );":"",f?"vec3 dirHalfVector = normalize( lDirection.xyz + vViewPosition );":
+"",f?"float dirDotNormalHalf = dot( normal, dirHalfVector );":"",f?"float dirDiffuseWeight = max( dot( normal, dirVector ), 0.0 );":"",f?"float dirSpecularWeight = 0.0;":"",f?"if ( dirDotNormalHalf >= 0.0 )":"",f?"dirSpecularWeight = pow( dirDotNormalHalf, mShininess );":"",f?"dirDiffuse  += mColor * dirDiffuseWeight;":"",f?"dirSpecular += mSpecular * dirSpecularWeight;":"",f?"}":"","vec4 totalLight = mAmbient;",f?"totalLight += dirDiffuse + dirSpecular;":"",h?"totalLight += pointDiffuse + pointSpecular;":
+"","if ( mixEnvMap ) {\ngl_FragColor = vec4( mix( mapColor.rgb * totalLight.xyz * vLightWeighting, cubeColor.rgb, mReflectivity ), mapColor.a );\n} else {\ngl_FragColor = vec4( mapColor.rgb * cubeColor.rgb * totalLight.xyz * vLightWeighting, mapColor.a );\n}\n} else if ( material == 1 ) {\nif ( mixEnvMap ) {\ngl_FragColor = vec4( mix( mColor.rgb * mapColor.rgb * vLightWeighting, cubeColor.rgb, mReflectivity ), mColor.a * mapColor.a );\n} else {\ngl_FragColor = vec4( mColor.rgb * mapColor.rgb * cubeColor.rgb * vLightWeighting, mColor.a * mapColor.a );\n}\n} else {\nif ( mixEnvMap ) {\ngl_FragColor = mix( mColor * mapColor, cubeColor, mReflectivity );\n} else {\ngl_FragColor = mColor * mapColor * cubeColor;\n}\n}\n}"].join("\n")));
+b.attachShader(d,c("vertex",[f?"#define MAX_DIR_LIGHTS "+f:"",h?"#define MAX_POINT_LIGHTS "+h:"","attribute vec3 position;\nattribute vec3 normal;\nattribute vec2 uv;\nuniform vec3 cameraPosition;\nuniform bool enableLighting;\nuniform bool useRefract;\nuniform int pointLightNumber;\nuniform int directionalLightNumber;\nuniform vec3 ambientLightColor;",f?"uniform vec3 directionalLightColor[ MAX_DIR_LIGHTS ];":"",f?"uniform vec3 directionalLightDirection[ MAX_DIR_LIGHTS ];":"",h?"uniform vec3 pointLightColor[ MAX_POINT_LIGHTS ];":
+"",h?"uniform vec3 pointLightPosition[ MAX_POINT_LIGHTS ];":"","uniform mat4 objMatrix;\nuniform mat4 viewMatrix;\nuniform mat4 modelViewMatrix;\nuniform mat4 projectionMatrix;\nuniform mat3 normalMatrix;\nvarying vec3 vNormal;\nvarying vec2 vUv;\nvarying vec3 vLightWeighting;",h?"varying vec3 vPointLightVector[ MAX_POINT_LIGHTS ];":"","varying vec3 vViewPosition;\nvarying vec3 vReflect;\nuniform float mRefractionRatio;\nvoid main(void) {\nvec4 mPosition = objMatrix * vec4( position, 1.0 );\nvViewPosition = cameraPosition - mPosition.xyz;\nvec3 nWorld = mat3( objMatrix[0].xyz, objMatrix[1].xyz, objMatrix[2].xyz ) * normal;\nvec4 mvPosition = modelViewMatrix * vec4( position, 1.0 );\nvec3 transformedNormal = normalize( normalMatrix * normal );\nif ( !enableLighting ) {\nvLightWeighting = vec3( 1.0, 1.0, 1.0 );\n} else {\nvLightWeighting = ambientLightColor;",
+f?"for( int i = 0; i < MAX_DIR_LIGHTS; i++ ) {":"",f?"vec4 lDirection = viewMatrix * vec4( directionalLightDirection[ i ], 0.0 );":"",f?"float directionalLightWeighting = max( dot( transformedNormal, normalize(lDirection.xyz ) ), 0.0 );":"",f?"vLightWeighting += directionalLightColor[ i ] * directionalLightWeighting;":"",f?"}":"",h?"for( int i = 0; i < MAX_POINT_LIGHTS; i++ ) {":"",h?"vec4 lPosition = viewMatrix * vec4( pointLightPosition[ i ], 1.0 );":"",h?"vPointLightVector[ i ] = normalize( lPosition.xyz - mvPosition.xyz );":
+"",h?"float pointLightWeighting = max( dot( transformedNormal, vPointLightVector[ i ] ), 0.0 );":"",h?"vLightWeighting += pointLightColor[ i ] * pointLightWeighting;":"",h?"}":"","}\nvNormal = transformedNormal;\nvUv = uv;\nif ( useRefract ) {\nvReflect = refract( normalize(mPosition.xyz - cameraPosition), normalize(nWorld.xyz), mRefractionRatio );\n} else {\nvReflect = reflect( normalize(mPosition.xyz - cameraPosition), normalize(nWorld.xyz) );\n}\ngl_Position = projectionMatrix * mvPosition;\n}"].join("\n")));
+b.linkProgram(d);if(!b.getProgramParameter(d,b.LINK_STATUS)){alert("Could not initialise shaders");alert("VALIDATE_STATUS: "+b.getProgramParameter(d,b.VALIDATE_STATUS));alert(b.getError())}b.useProgram(d);d.viewMatrix=b.getUniformLocation(d,"viewMatrix");d.modelViewMatrix=b.getUniformLocation(d,"modelViewMatrix");d.projectionMatrix=b.getUniformLocation(d,"projectionMatrix");d.normalMatrix=b.getUniformLocation(d,"normalMatrix");d.objMatrix=b.getUniformLocation(d,"objMatrix");d.cameraPosition=b.getUniformLocation(d,
+"cameraPosition");d.enableLighting=b.getUniformLocation(d,"enableLighting");d.ambientLightColor=b.getUniformLocation(d,"ambientLightColor");if(f){d.directionalLightNumber=b.getUniformLocation(d,"directionalLightNumber");d.directionalLightColor=b.getUniformLocation(d,"directionalLightColor");d.directionalLightDirection=b.getUniformLocation(d,"directionalLightDirection")}if(h){d.pointLightNumber=b.getUniformLocation(d,"pointLightNumber");d.pointLightColor=b.getUniformLocation(d,"pointLightColor");d.pointLightPosition=
+b.getUniformLocation(d,"pointLightPosition")}d.material=b.getUniformLocation(d,"material");d.mColor=b.getUniformLocation(d,"mColor");d.mOpacity=b.getUniformLocation(d,"mOpacity");d.mReflectivity=b.getUniformLocation(d,"mReflectivity");d.mAmbient=b.getUniformLocation(d,"mAmbient");d.mSpecular=b.getUniformLocation(d,"mSpecular");d.mShininess=b.getUniformLocation(d,"mShininess");d.enableMap=b.getUniformLocation(d,"enableMap");b.uniform1i(d.enableMap,0);d.tMap=b.getUniformLocation(d,"tMap");b.uniform1i(d.tMap,
+0);d.enableCubeMap=b.getUniformLocation(d,"enableCubeMap");b.uniform1i(d.enableCubeMap,0);d.tCube=b.getUniformLocation(d,"tCube");b.uniform1i(d.tCube,1);d.mixEnvMap=b.getUniformLocation(d,"mixEnvMap");b.uniform1i(d.mixEnvMap,0);d.mRefractionRatio=b.getUniformLocation(d,"mRefractionRatio");d.useRefract=b.getUniformLocation(d,"useRefract");b.uniform1i(d.useRefract,0);d.m2Near=b.getUniformLocation(d,"m2Near");d.mFarPlusNear=b.getUniformLocation(d,"mFarPlusNear");d.mFarMinusNear=b.getUniformLocation(d,
+"mFarMinusNear");d.position=b.getAttribLocation(d,"position");b.enableVertexAttribArray(d.position);d.normal=b.getAttribLocation(d,"normal");b.enableVertexAttribArray(d.normal);d.uv=b.getAttribLocation(d,"uv");b.enableVertexAttribArray(d.uv);d.viewMatrixArray=new Float32Array(16);d.modelViewMatrixArray=new Float32Array(16);d.projectionMatrixArray=new Float32Array(16)})(a.directional,a.point);this.setSize=function(f,h){g.width=f;g.height=h;b.viewport(0,0,g.width,g.height)};this.clear=function(){b.clear(b.COLOR_BUFFER_BIT|
+b.DEPTH_BUFFER_BIT)};this.setupLights=function(f){var h,k,i,m,l=[],s=[],v=[];m=[];var j=[];b.uniform1i(d.enableLighting,f.lights.length);h=0;for(k=f.lights.length;h<k;h++){i=f.lights[h];if(i instanceof THREE.AmbientLight)l.push(i);else if(i instanceof THREE.DirectionalLight)v.push(i);else i instanceof THREE.PointLight&&s.push(i)}h=f=i=m=0;for(k=l.length;h<k;h++){f+=l[h].color.r;i+=l[h].color.g;m+=l[h].color.b}b.uniform3f(d.ambientLightColor,f,i,m);m=[];j=[];h=0;for(k=v.length;h<k;h++){i=v[h];m.push(i.color.r*
+i.intensity);m.push(i.color.g*i.intensity);m.push(i.color.b*i.intensity);j.push(i.position.x);j.push(i.position.y);j.push(i.position.z)}if(v.length){b.uniform1i(d.directionalLightNumber,v.length);b.uniform3fv(d.directionalLightDirection,j);b.uniform3fv(d.directionalLightColor,m)}m=[];j=[];h=0;for(k=s.length;h<k;h++){i=s[h];m.push(i.color.r*i.intensity);m.push(i.color.g*i.intensity);m.push(i.color.b*i.intensity);j.push(i.position.x);j.push(i.position.y);j.push(i.position.z)}if(s.length){b.uniform1i(d.pointLightNumber,
+s.length);b.uniform3fv(d.pointLightPosition,j);b.uniform3fv(d.pointLightColor,m)}};this.createBuffers=function(f,h){var k,i,m,l,s,v,j,L,u=[],w=[],H=[],A=[],I=[],p=0,x=f.materialFaceGroup[h],Y;m=false;k=0;for(i=f.material.length;k<i;k++){meshMaterial=f.material[k];if(meshMaterial instanceof THREE.MeshFaceMaterial){s=0;for(Y=x.material.length;s<Y;s++)if(x.material[s]&&x.material[s].shading!=undefined&&x.material[s].shading==THREE.SmoothShading){m=true;break}}else if(meshMaterial&&meshMaterial.shading!=
+undefined&&meshMaterial.shading==THREE.SmoothShading){m=true;break}if(m)break}Y=m;k=0;for(i=x.faces.length;k<i;k++){m=x.faces[k];l=f.geometry.faces[m];s=l.vertexNormals;faceNormal=l.normal;m=f.geometry.uvs[m];if(l instanceof THREE.Face3){v=f.geometry.vertices[l.a].position;j=f.geometry.vertices[l.b].position;L=f.geometry.vertices[l.c].position;H.push(v.x,v.y,v.z);H.push(j.x,j.y,j.z);H.push(L.x,L.y,L.z);if(s.length==3&&Y)for(l=0;l<3;l++)A.push(s[l].x,s[l].y,s[l].z);else for(l=0;l<3;l++)A.push(faceNormal.x,
+faceNormal.y,faceNormal.z);if(m)for(l=0;l<3;l++)I.push(m[l].u,m[l].v);u.push(p,p+1,p+2);w.push(p,p+1);w.push(p,p+2);w.push(p+1,p+2);p+=3}else if(l instanceof THREE.Face4){v=f.geometry.vertices[l.a].position;j=f.geometry.vertices[l.b].position;L=f.geometry.vertices[l.c].position;l=f.geometry.vertices[l.d].position;H.push(v.x,v.y,v.z);H.push(j.x,j.y,j.z);H.push(L.x,L.y,L.z);H.push(l.x,l.y,l.z);if(s.length==4&&Y)for(l=0;l<4;l++)A.push(s[l].x,s[l].y,s[l].z);else for(l=0;l<4;l++)A.push(faceNormal.x,faceNormal.y,
+faceNormal.z);if(m)for(l=0;l<4;l++)I.push(m[l].u,m[l].v);u.push(p,p+1,p+2);u.push(p,p+2,p+3);w.push(p,p+1);w.push(p,p+2);w.push(p,p+3);w.push(p+1,p+2);w.push(p+2,p+3);p+=4}}if(H.length){x.__webGLVertexBuffer=b.createBuffer();b.bindBuffer(b.ARRAY_BUFFER,x.__webGLVertexBuffer);b.bufferData(b.ARRAY_BUFFER,new Float32Array(H),b.STATIC_DRAW);x.__webGLNormalBuffer=b.createBuffer();b.bindBuffer(b.ARRAY_BUFFER,x.__webGLNormalBuffer);b.bufferData(b.ARRAY_BUFFER,new Float32Array(A),b.STATIC_DRAW);x.__webGLUVBuffer=
+b.createBuffer();b.bindBuffer(b.ARRAY_BUFFER,x.__webGLUVBuffer);b.bufferData(b.ARRAY_BUFFER,new Float32Array(I),b.STATIC_DRAW);x.__webGLFaceBuffer=b.createBuffer();b.bindBuffer(b.ELEMENT_ARRAY_BUFFER,x.__webGLFaceBuffer);b.bufferData(b.ELEMENT_ARRAY_BUFFER,new Uint16Array(u),b.STATIC_DRAW);x.__webGLLineBuffer=b.createBuffer();b.bindBuffer(b.ELEMENT_ARRAY_BUFFER,x.__webGLLineBuffer);b.bufferData(b.ELEMENT_ARRAY_BUFFER,new Uint16Array(w),b.STATIC_DRAW);x.__webGLFaceCount=u.length;x.__webGLLineCount=
+w.length}};this.renderBuffer=function(f,h){var k,i,m,l,s,v,j,L,u,w;if(f instanceof THREE.MeshPhongMaterial||f instanceof THREE.MeshLambertMaterial||f instanceof THREE.MeshBasicMaterial){k=f.color;i=f.opacity;l=f.wireframe;s=f.wireframe_linewidth;j=f.map;L=f.env_map;v=f.combine==THREE.Mix;m=f.reflectivity;w=f.env_map&&f.env_map.mapping==THREE.RefractionMap;u=f.refraction_ratio;b.uniform4f(d.mColor,k.r*i,k.g*i,k.b*i,i);b.uniform1i(d.mixEnvMap,v);b.uniform1f(d.mReflectivity,m);b.uniform1i(d.useRefract,
+w);b.uniform1f(d.mRefractionRatio,u)}if(f instanceof THREE.MeshNormalMaterial){i=f.opacity;b.uniform1f(d.mOpacity,i);b.uniform1i(d.material,4)}else if(f instanceof THREE.MeshDepthMaterial){i=f.opacity;l=f.wireframe;s=f.wireframe_linewidth;b.uniform1f(d.mOpacity,i);b.uniform1f(d.m2Near,f.__2near);b.uniform1f(d.mFarPlusNear,f.__farPlusNear);b.uniform1f(d.mFarMinusNear,f.__farMinusNear);b.uniform1i(d.material,3)}else if(f instanceof THREE.MeshPhongMaterial){k=f.ambient;m=f.specular;v=f.shininess;b.uniform4f(d.mAmbient,
+k.r,k.g,k.b,i);b.uniform4f(d.mSpecular,m.r,m.g,m.b,i);b.uniform1f(d.mShininess,v);b.uniform1i(d.material,2)}else if(f instanceof THREE.MeshLambertMaterial)b.uniform1i(d.material,1);else if(f instanceof THREE.MeshBasicMaterial)b.uniform1i(d.material,0);else if(f instanceof THREE.MeshCubeMaterial){b.uniform1i(d.material,5);L=f.env_map}if(j){if(!f.map.__webGLTexture&&f.map.image.loaded){f.map.__webGLTexture=b.createTexture();b.bindTexture(b.TEXTURE_2D,f.map.__webGLTexture);b.texImage2D(b.TEXTURE_2D,
+0,b.RGBA,b.RGBA,b.UNSIGNED_BYTE,f.map.image);b.texParameteri(b.TEXTURE_2D,b.TEXTURE_WRAP_S,e(f.map.wrap_s));b.texParameteri(b.TEXTURE_2D,b.TEXTURE_WRAP_T,e(f.map.wrap_t));b.texParameteri(b.TEXTURE_2D,b.TEXTURE_MAG_FILTER,b.LINEAR);b.texParameteri(b.TEXTURE_2D,b.TEXTURE_MIN_FILTER,b.LINEAR_MIPMAP_LINEAR);b.generateMipmap(b.TEXTURE_2D);b.bindTexture(b.TEXTURE_2D,null)}b.activeTexture(b.TEXTURE0);b.bindTexture(b.TEXTURE_2D,f.map.__webGLTexture);b.uniform1i(d.tMap,0);b.uniform1i(d.enableMap,1)}else b.uniform1i(d.enableMap,
+0);if(L){if(f.env_map&&f.env_map instanceof THREE.TextureCube&&f.env_map.image.length==6){if(!f.env_map.image.__webGLTextureCube&&!f.env_map.image.__cubeMapInitialized&&f.env_map.image.loadCount==6){f.env_map.image.__webGLTextureCube=b.createTexture();b.bindTexture(b.TEXTURE_CUBE_MAP,f.env_map.image.__webGLTextureCube);b.texParameteri(b.TEXTURE_CUBE_MAP,b.TEXTURE_WRAP_S,b.CLAMP_TO_EDGE);b.texParameteri(b.TEXTURE_CUBE_MAP,b.TEXTURE_WRAP_T,b.CLAMP_TO_EDGE);b.texParameteri(b.TEXTURE_CUBE_MAP,b.TEXTURE_MAG_FILTER,
+b.LINEAR);b.texParameteri(b.TEXTURE_CUBE_MAP,b.TEXTURE_MIN_FILTER,b.LINEAR_MIPMAP_LINEAR);for(i=0;i<6;++i)b.texImage2D(b.TEXTURE_CUBE_MAP_POSITIVE_X+i,0,b.RGBA,b.RGBA,b.UNSIGNED_BYTE,f.env_map.image[i]);b.generateMipmap(b.TEXTURE_CUBE_MAP);b.bindTexture(b.TEXTURE_CUBE_MAP,null);f.env_map.image.__cubeMapInitialized=true}b.activeTexture(b.TEXTURE1);b.bindTexture(b.TEXTURE_CUBE_MAP,f.env_map.image.__webGLTextureCube);b.uniform1i(d.tCube,1)}b.uniform1i(d.enableCubeMap,1)}else b.uniform1i(d.enableCubeMap,
+0);b.bindBuffer(b.ARRAY_BUFFER,h.__webGLVertexBuffer);b.vertexAttribPointer(d.position,3,b.FLOAT,false,0,0);b.bindBuffer(b.ARRAY_BUFFER,h.__webGLNormalBuffer);b.vertexAttribPointer(d.normal,3,b.FLOAT,false,0,0);if(j){b.bindBuffer(b.ARRAY_BUFFER,h.__webGLUVBuffer);b.enableVertexAttribArray(d.uv);b.vertexAttribPointer(d.uv,2,b.FLOAT,false,0,0)}else b.disableVertexAttribArray(d.uv);if(l){b.lineWidth(s);b.bindBuffer(b.ELEMENT_ARRAY_BUFFER,h.__webGLLineBuffer);b.drawElements(b.LINES,h.__webGLLineCount,
+b.UNSIGNED_SHORT,0)}else{b.bindBuffer(b.ELEMENT_ARRAY_BUFFER,h.__webGLFaceBuffer);b.drawElements(b.TRIANGLES,h.__webGLFaceCount,b.UNSIGNED_SHORT,0)}};this.renderPass=function(f,h,k,i){var m,l,s,v,j;s=0;for(v=f.material.length;s<v;s++){m=f.material[s];if(m instanceof THREE.MeshFaceMaterial){m=0;for(l=h.material.length;m<l;m++)if((j=h.material[m])&&j.blending==k&&j.opacity<1==i){this.setBlending(j.blending);this.renderBuffer(j,h)}}else if((j=m)&&j.blending==k&&j.opacity<1==i){this.setBlending(j.blending);
+this.renderBuffer(j,h)}}};this.render=function(f,h){var k,i;this.initWebGLObjects(f);this.autoClear&&this.clear();h.autoUpdateMatrix&&h.updateMatrix();b.uniform3f(d.cameraPosition,h.position.x,h.position.y,h.position.z);this.setupLights(f);k=0;for(i=f.__webGLObjects.length;k<i;k++){webGLObject=f.__webGLObjects[k];if(webGLObject.__object.visible){this.setupMatrices(webGLObject.__object,h);this.renderPass(webGLObject.__object,webGLObject,THREE.NormalBlending,false)}}k=0;for(i=f.__webGLObjects.length;k<
+i;k++){webGLObject=f.__webGLObjects[k];if(webGLObject.__object.visible){this.setupMatrices(webGLObject.__object,h);this.renderPass(webGLObject.__object,webGLObject,THREE.AdditiveBlending,false);this.renderPass(webGLObject.__object,webGLObject,THREE.SubtractiveBlending,false);this.renderPass(webGLObject.__object,webGLObject,THREE.AdditiveBlending,true);this.renderPass(webGLObject.__object,webGLObject,THREE.SubtractiveBlending,true);this.renderPass(webGLObject.__object,webGLObject,THREE.NormalBlending,
+true)}}};this.initWebGLObjects=function(f){var h,k,i,m,l;if(!f.__webGLObjects)f.__webGLObjects=[];h=0;for(k=f.objects.length;h<k;h++){i=f.objects[h];if(i instanceof THREE.Mesh)for(m in i.materialFaceGroup){l=i.materialFaceGroup[m];if(!l.__webGLVertexBuffer){this.createBuffers(i,m);l.__object=i;f.__webGLObjects.push(l)}}}};this.removeObject=function(f,h){var k,i;for(k=f.__webGLObjects.length-1;k>=0;k--){i=f.__webGLObjects[k].__object;h==i&&f.__webGLObjects.splice(k,1)}};this.setupMatrices=function(f,
+h){f.autoUpdateMatrix&&f.updateMatrix();n.multiply(h.matrix,f.matrix);d.viewMatrixArray=new Float32Array(h.matrix.flatten());d.modelViewMatrixArray=new Float32Array(n.flatten());d.projectionMatrixArray=new Float32Array(h.projectionMatrix.flatten());q=THREE.Matrix4.makeInvert3x3(n).transpose();d.normalMatrixArray=new Float32Array(q.m);b.uniformMatrix4fv(d.viewMatrix,false,d.viewMatrixArray);b.uniformMatrix4fv(d.modelViewMatrix,false,d.modelViewMatrixArray);b.uniformMatrix4fv(d.projectionMatrix,false,
+d.projectionMatrixArray);b.uniformMatrix3fv(d.normalMatrix,false,d.normalMatrixArray);b.uniformMatrix4fv(d.objMatrix,false,new Float32Array(f.matrix.flatten()))};this.setBlending=function(f){switch(f){case THREE.AdditiveBlending:b.blendEquation(b.FUNC_ADD);b.blendFunc(b.ONE,b.ONE);break;case THREE.SubtractiveBlending:b.blendFunc(b.DST_COLOR,b.ZERO);break;default:b.blendEquation(b.FUNC_ADD);b.blendFunc(b.ONE,b.ONE_MINUS_SRC_ALPHA)}};this.setFaceCulling=function(f,h){if(f){!h||h=="ccw"?b.frontFace(b.CCW):
+b.frontFace(b.CW);if(f=="back")b.cullFace(b.BACK);else f=="front"?b.cullFace(b.FRONT):b.cullFace(b.FRONT_AND_BACK);b.enable(b.CULL_FACE)}else b.disable(b.CULL_FACE)}};
+THREE.RenderableFace3=function(){this.z=null;this.v1=new THREE.Vertex;this.v2=new THREE.Vertex;this.v3=new THREE.Vertex;this.centroidWorld=new THREE.Vector3;this.centroidScreen=new THREE.Vector3;this.normalWorld=new THREE.Vector3;this.vertexNormalsWorld=[new THREE.Vector3,new THREE.Vector3,new THREE.Vector3];this.faceMaterial=this.meshMaterial=null;this.overdraw=false;this.uvs=[null,null,null]};
+THREE.RenderableParticle=function(){this.rotation=this.z=this.y=this.x=null;this.scale=new THREE.Vector2;this.material=null};THREE.RenderableLine=function(){this.z=null;this.v1=new THREE.Vertex;this.v2=new THREE.Vertex;this.material=null};

+ 189 - 0
utils/exporters/cinema4d/export_to_three.js.py

@@ -0,0 +1,189 @@
+'''
+author : "George Profenza"
+url    : ("disturb", "disturbmedia.com/blog","My blog, http://tomaterial.blogspot.com")
+
+Export meshes the three.js 3D Engine by mr.doob's et al.
+
+More details on the engine here:
+https://github.com/mrdoob/three.js
+
+Currently supports UVs. If the model doesn't display correctly
+you might need to reverse some normals/do some cleanup.
+Also, if you use Selection Tags and basic ColorMaterials, 
+the colours will be picked up as face colors. Call autoColor() on the
+model you use for this.
+The mesh transformations(position, rotation, scale) are saved
+and you can get them using: getPosition(), getRotation() and getScale()
+each returning a THREE.Vector3
+
+In short
+var myGeom = new myC4DGeom();
+var myModel = new THREE.Mesh( myGeom, new THREE.MeshFaceMaterial());
+//set transforms
+model.position = myGeom.getPosition()
+model.rotation = myGeom.getRotation()
+model.scale    = myGeom.getScale()
+//set selection tags colours
+myGeom.autoColor()
+
+More details on this exporter and more js examples here:
+https://github.com/orgicus/three.js
+
+Have fun!
+
+This script requires Cinema 4D R11.5 minimum and the Py4D Plugin:
+http://www.py4d.com/get-py4d/
+'''
+
+import c4d
+from c4d import documents,UVWTag,storage
+from c4d.utils import *
+from c4d import symbols as sy, plugins, utils, bitmaps, gui
+import math
+import re
+
+# utils
+clean = lambda varStr: re.sub('\W|^(?=\d)','_', varStr)
+# from Active State's Python recipies: http://code.activestate.com/recipes/266466-html-colors-tofrom-rgb-tuples/
+def RGBToHTMLColor(rgb_tuple):
+    return '0x%02x%02x%02x' % rgb_tuple
+def Export():
+    if not op: return
+    if op.GetType() != 5100:
+            print 'Selected Object is not an editable mesh'
+            return
+    unit = 0.001#for scale
+    fps   = doc.GetFps()
+    bd = doc.GetRenderBaseDraw()
+    scr = bd.GetFrameScreen()
+    rd = doc.GetActiveRenderData()
+    name  = op.GetName()
+    classname = clean(name)
+    
+    c4dPath = c4d.storage.GeGetC4DPath(sy.C4D_PATH_LIBRARY)
+    jsFile = open(c4dPath+'/scripts/Three.js','r')
+    js = jsFile.read()
+    htmlFile = open(c4dPath+'/scripts/template.html','r')
+    html = htmlFile.read()
+    html = html.replace('%s',classname)
+    code  = 'var %s = function () {\n\n\tvar scope = this;\n\n\tTHREE.Geometry.call(this);\n\n' % classname
+    
+    def GetMesh(code):
+        # goto 0
+        doc.SetTime(c4d.BaseTime(0, fps))
+        c4d.DrawViews( c4d.DA_ONLY_ACTIVE_VIEW|c4d.DA_NO_THREAD|c4d.DA_NO_REDUCTION|c4d.DA_STATICBREAK )
+        c4d.GeSyncMessage(c4d.EVMSG_TIMECHANGED)
+        doc.SetTime(doc.GetTime())
+        c4d.EventAdd(c4d.EVENT_ANIMATE)
+        SendModelingCommand(command = MCOMMAND_REVERSENORMALS, list = [op], mode = MODIFY_ALL, bc = c4d.BaseContainer(), doc = doc)
+        
+        verts = op.GetPointAll()
+        for v in verts:
+            code += '\tv( %.6f, %.6f, %.6f );\n' % (v.x, -v.y, v.z)
+        code += '\n'
+        ncount = 0
+        uvcount = 0
+        faces = op.GetAllPolygons()
+        normals = op.CreatePhongNormals()
+        ndirection = 1
+        hasUV = False
+        for tag in op.GetTags():
+            if tag.GetName() == "UVW":
+                uvw = tag
+                hasUV = True
+        for f in faces:
+            if(f.d == f.c):
+                if(normals):
+                    code += '\tf3( %d, %d, %d, %.6f, %.6f, %.6f );\n' % (f.a, f.b, f.c, normals[ncount].x*ndirection, normals[ncount].y*ndirection, normals[ncount].z*ndirection)
+                else:
+                    code += '\tf3( %d, %d, %d );\n' % (f.a, f.b, f.c)
+            else:
+                if(normals):
+                    code += '\tf4( %d, %d, %d, %d, %.6f, %.6f, %.6f );\n' % (f.a, f.b, f.c, f.d, normals[ncount].x*ndirection, normals[ncount].y*ndirection, normals[ncount].z*ndirection)
+                else:
+                    code += '\tf4( %d, %d, %d, %d );\n' % (f.a, f.b, f.c, f.d)
+            if hasUV:
+                uv = uvw.Get(uvcount);
+                # uvs  += '[Vector('+str(uv[0].x)+','+str(1.0-uv[0].y)+'),Vector('+str(uv[1].x)+','+str(1.0-uv[1].y)+'),Vector('+str(uv[2].x)+','+str(1.0-uv[2].y)+')],'
+                if len(uv) == 4:
+                    code += '\tuv( %.6f, %.6f, %.6f, %.6f, %.6f, %.6f, %.6f, %.6f);\n' % (uv[0].x, uv[0].y, uv[1].x, uv[1].y, uv[2].x, uv[2].y, uv[3].x, uv[3].y)
+                else:
+                    code += '\tuv( %.6f, %.6f, %.6f, %.6f, %.6f, %.6f);\n' % (uv[0].x, uv[0].y, uv[1].x, uv[1].y, uv[2].x, uv[2].y)
+                ncount += 1
+                uvcount += 1
+        code +='\n\tthis.computeCentroids();\n\tthis.computeNormals(true);\n'
+        #selection color
+        code +='\n\tscope.colors = {};\n'
+        code +='\tscope.selections = {};\n'
+        selName = ''
+        for tag in op.GetTags():  
+            if(tag.GetType() == 5616): #texture tag
+               material = tag.GetMaterial()
+               color = material[sy.MATERIAL_COLOR_COLOR]
+               tag.SetBit(c4d.BIT_ACTIVE)
+               selName = clean(tag[sy.TEXTURETAG_RESTRICTION])
+               if len(selName) == 0:    print "*** WARNING! *** Missing selection name for material: " + material.GetName()
+               code += '\tscope.colors["'+selName+'"] = '+str(RGBToHTMLColor((color.x*255,color.y*255,color.z*255)))+';\n'
+            if tag.GetType() == 5673:  #selection tag
+               # print 'selection: ' + tag.GetName()  
+               sel = tag.GetSelection()
+               selName = clean(tag.GetName())
+               ids = sel.GetAll(op.GetPointCount())
+               indices = [i for i, e in enumerate(ids) if e != 0]
+               code += '\tscope.selections["'+selName+'"] = '+str(indices)+';\n'
+               
+        code += '\n\tscope.autoColor = function(){\n'
+        code += '\t\tfor(var s in this.selections){\n'
+        code += '\t\t\tfor(var i = 0 ; i < this.selections[s].length; i++) this.faces[this.selections[s][i]].material = [new THREE.MeshBasicMaterial({color:this.colors[s]})];\n'
+        code += '\t\t}\n\t}\n'
+        
+        # model position, rotation, scale               rotation x,y,z = H,P,B => three.js x,y,z is P,H,B => y,x,z
+        p = op.GetPos()
+        r = op.GetRot()
+        s = op.GetScale()
+        code += '\n\tscope.getPosition = function(){\treturn new THREE.Vector3'+str((p.x,p.y,p.z))+';\t}\n'
+        code += '\n\tscope.getRotation = function(){\treturn new THREE.Vector3'+str((r.y,r.x,r.z))+';\t}\n'
+        code += '\n\tscope.getScale = function(){\treturn new THREE.Vector3'+str((s.x,s.y,s.z))+';\t}\n'
+        
+        code += '\n'
+        code += '\tfunction v( x, y, z ) {\n\n'
+        code += '\t\tscope.vertices.push( new THREE.Vertex( new THREE.Vector3( x, y, z ) ) );\n\n'
+        code += '\t}\n\n'
+        code += '\tfunction f3( a, b, c, nx, ny, nz ) {\n\n'
+        code += '\t\tscope.faces.push( new THREE.Face3( a, b, c, nx && ny && nz ? new THREE.Vector3( nx, ny, nz ) : null ) );\n\n'
+        code += '\t}\n\n'
+        code += '\tfunction f4( a, b, c, d, nx, ny, nz ) {\n\n'
+        code += '\t\tscope.faces.push( new THREE.Face4( a, b, c, d, nx && ny && nz ? new THREE.Vector3( nx, ny, nz ) : null ) );\n\n'
+        code += '\t}\n\n'
+        code += '\tfunction uv( u1, v1, u2, v2, u3, v3, u4, v4 ) {\n\n'
+        code += '\t\tvar uv = [];\n'
+        code += '\t\tuv.push( new THREE.UV( u1, v1 ) );\n'
+        code += '\t\tuv.push( new THREE.UV( u2, v2 ) );\n'
+        code += '\t\tuv.push( new THREE.UV( u3, v3 ) );\n'
+        code += '\t\tif ( u4 && v4 ) uv.push( new THREE.UV( u4, v4 ) );\n'
+        code += '\t\tscope.uvs.push( uv );\n'
+        code += '\t}\n\n'
+        code += '}\n\n'
+        code += '%s.prototype = new THREE.Geometry();\n' % classname
+        code += '%s.prototype.constructor = %s;' % (classname, classname)
+        
+        SendModelingCommand(command = MCOMMAND_REVERSENORMALS, list = [op], mode = MODIFY_ALL, bc = c4d.BaseContainer(), doc = doc)
+        
+        return code
+
+    code = GetMesh(code)
+    docPath = doc.GetDocumentPath() 
+    jspath = docPath+'/'+classname+'.js'
+    htmlpath = docPath+'/'+classname+'.html'
+    file = open(jspath,'w')
+    file.write(code)
+    file.close()
+    file = open(htmlpath,'w')
+    file.write(html)
+    file.close()
+    file = open(docPath+'/Three.js','w')
+    file.write(js)
+    file.close()
+    print 'Export Complete!'
+
+Export()

+ 108 - 0
utils/exporters/cinema4d/template.html

@@ -0,0 +1,108 @@
+<!DOCTYPE HTML>
+<html lang="en">
+	<head>
+		<title>three.js - geometry - %s</title>
+		<meta charset="utf-8">
+		<style type="text/css">
+			body {
+				color: #808080;
+				font-family:Monospace;
+				font-size:13px;
+				text-align:center;
+
+				background-color: #ffffff;
+				margin: 0px;
+				overflow: hidden;
+			}
+
+			#info {
+				position: absolute;
+				top: 0px; width: 100%;
+				padding: 5px;
+			}
+
+			a {
+
+				color: #0080ff;
+			}
+
+		</style>
+	</head>
+	<body>
+
+		<div id="container"></div> 
+		<div id="info"><a href="http://github.com/mrdoob/three.js" target="_blank">Using three.js - %s</a></div>
+		<script type="text/javascript" src="Three.js"></script>
+		<script type="text/javascript" src="%s.js"></script>
+
+		<script type="text/javascript">
+
+			var SCREEN_WIDTH = window.innerWidth, SCREEN_HEIGHT = window.innerHeight;
+
+			var container, stats;
+
+			var camera, scene, renderer;
+
+			var mesh;
+
+			var mouseX = 0;
+			var mouseY = 0;
+
+			var windowHalfX = window.innerWidth / 2;
+			var windowHalfY = window.innerHeight / 2;
+
+
+			init();
+			setInterval( loop, 1000 / 60 );
+
+
+			function init() {
+
+				container = document.getElementById( 'container' );
+
+				camera = new THREE.Camera( 60, SCREEN_WIDTH / SCREEN_HEIGHT, 0.0001, 10000 );
+				camera.position.z = 500;
+
+				scene = new THREE.Scene();
+				
+				var geom = new %s();
+				geom.autoColor();
+				mesh = new THREE.Mesh( geom, new THREE.MeshFaceMaterial() );
+				mesh.position = geom.getPosition();
+				mesh.rotation = geom.getRotation();
+				mesh.scale = geom.getScale();
+				scene.addObject(mesh);
+
+				renderer = new THREE.CanvasRenderer();
+				renderer.setSize( SCREEN_WIDTH, SCREEN_HEIGHT );
+
+				container.appendChild(renderer.domElement);
+
+				document.addEventListener('mousemove', onDocumentMouseMove, false);
+
+			}
+
+			
+			function onDocumentMouseMove( event ) {
+
+				mouseX = ( event.clientX - windowHalfX );
+				mouseY = ( event.clientY - windowHalfY );
+
+			}
+
+			function loop() {
+
+				camera.position.x += (mouseX - camera.position.x) * 0.05;
+				camera.position.y += (-mouseY - camera.position.y) * 0.05;
+
+				mesh.rotation.y -= 0.005;
+
+				renderer.render(scene, camera);
+				
+			}
+
+
+		</script>
+
+	</body>
+</html>