//=========== Stl Viewer v1.13.1, by Omri Rips, Viewstl.com, October 2021 ; admin@viewstl.com =========== function parse_3d_file(e,r,t,n){var i=null;switch(e.split(".").pop().split("?")[0].toLowerCase()){case"stl":i=parse_stl_bin(r);break;case"obj":i=parse_obj(r);break;case"vf":i=parse_vf(arrayBufferToString(r));break;case"3mf":return void parse_3mf(r,t,n);default:i=parse_stl_bin(r)}t&&t(i)}function arrayBufferToString(e,r,t){if("undefined"!=typeof TextDecoder)return new TextDecoder("utf-8").decode(e);for(var n=new Uint8Array(e),i=n.length,a="",s=0;si&&(o=i-s),a+=String.fromCharCode.apply(null,n.subarray(s,s+o))}return a}function parse_stl_ascii(e){try{var r=arrayBufferToString(e),t=[],n=[],i={};r=(r=(r=(r=(r=(r=(r=(r=(r=(r=(r=(r=r.replace(/\r/,"\n")).replace(/^solid[^\n]*/,"")).replace(/\n/g," ")).replace(/facet normal /g,"")).replace(/outer loop/g,"")).replace(/vertex /g,"")).replace(/endloop/g,"")).replace(/endfacet/g,"")).replace(/endsolid[^\n]*/,"")).replace(/facet/g,"")).replace(/\s+/g," ")).replace(/^\s+/,"");for(var a,s=0,o=r.split(" "),l=[],c=o.length/12-1,f=0;f-1&&(d=!0,_=u.getUint8(p+6,!0)/31,g=u.getUint8(p+7,!0)/31,h=u.getUint8(p+8,!0)/31);var x=80;try{var y=u.getUint32(x,!0)}catch(e){return"Can't parse file"}var m=84+50*y;if(e.byteLength!=m)return parse_stl_ascii(e);try{for(x+=4;y--;)x+=12,null==(r=f[[t=u.getFloat32(x,!0),n=u.getFloat32(x+4,!0),i=u.getFloat32(x+8,!0)]])&&(r=l.length,l.push(new Array(t,n,i)),f[[t,n,i]]=r),a=r,x+=12,null==(r=f[[t=u.getFloat32(x,!0),n=u.getFloat32(x+4,!0),i=u.getFloat32(x+8,!0)]])&&(r=l.length,l.push(new Array(t,n,i)),f[[t,n,i]]=r),s=r,x+=12,null==(r=f[[t=u.getFloat32(x,!0),n=u.getFloat32(x+4,!0),i=u.getFloat32(x+8,!0)]])&&(r=l.length,l.push(new Array(t,n,i)),f[[t,n,i]]=r),o=r,x+=12,face_color=u.getUint16(x,!0),(d?1:(32768&face_color)>>15)?(d?32768==face_color||65535==face_color?(color_red=_,color_green=g,color_blue=h):(v=!0,color_red=(31&face_color)/31,color_green=((992&face_color)>>5)/31,color_blue=((31744&face_color)>>10)/31):(v=!0,color_blue=(31&face_color)/31,color_green=((992&face_color)>>5)/31,color_red=((31744&face_color)>>10)/31),c.push(new Array(a,s,o,color_red,color_green,color_blue))):c.push(new Array(a,s,o)),x+=2;return f=null,{vertices:l,faces:c,colors:v}}catch(e){return"Can't parse file"}}function parse_vf(e){var r=JSON.parse(e),t=[],n=[];try{var a=r.vertices.length;for(i=0;i=0?e-1:e+l.length}function i(e,r,t,i){d.push(new Array(n(e),n(r),n(t)))}function a(e,r,t){void 0===e[3]?(i(e[0],e[1],e[2]),void 0!==r&&r.length>0&&(r[0],r[1],r[2])):(void 0!==t&&t.length>0?(i(e[0],e[1],e[3],(t[0],t[1],t[3])),i(e[1],e[2],e[3],(t[1],t[2],t[3]))):(i(e[0],e[1],e[3]),i(e[1],e[2],e[3])),void 0!==r&&r.length>0&&(r[0],r[1],r[3],r[1],r[2],r[3]))}/^o /gm.test(r);for(var s,o,l=[],c=[],f=[],d=[],p=/v( +[\d|\.|\+|\-|e]+)( +[\d|\.|\+|\-|e]+)( +[\d|\.|\+|\-|e]+)/,u=/vn( +[\d|\.|\+|\-|e]+)( +[\d|\.|\+|\-|e]+)( +[\d|\.|\+|\-|e]+)/,v=/vt( +[\d|\.|\+|\-|e]+)( +[\d|\.|\+|\-|e]+)/,_=/f( +-?\d+)( +-?\d+)( +-?\d+)( +-?\d+)?/,g=/f( +(-?\d+)\/(-?\d+))( +(-?\d+)\/(-?\d+))( +(-?\d+)\/(-?\d+))( +(-?\d+)\/(-?\d+))?/,h=/f( +(-?\d+)\/(-?\d+)\/(-?\d+))( +(-?\d+)\/(-?\d+)\/(-?\d+))( +(-?\d+)\/(-?\d+)\/(-?\d+))( +(-?\d+)\/(-?\d+)\/(-?\d+))?/,x=/f( +(-?\d+)\/\/(-?\d+))( +(-?\d+)\/\/(-?\d+))( +(-?\d+)\/\/(-?\d+))( +(-?\d+)\/\/(-?\d+))?/,y=r.split("\n"),m=0;m