war3-model
Version:
Warcraft 3 model parser, generator, convertor and previewer
6 lines • 194 kB
JavaScript
/*!
war3-model v3.4.1
https://github.com/4eb0da/war3-model
Released under the MIT License.
*/
var t;t=function(){var t,e,r,i,n,a,o,s,l,h,u,c,f,g,m;!function(t){t[t.WrapWidth=1]="WrapWidth",t[t.WrapHeight=2]="WrapHeight"}(t||(t={})),function(t){t[t.None=0]="None",t[t.Transparent=1]="Transparent",t[t.Blend=2]="Blend",t[t.Additive=3]="Additive",t[t.AddAlpha=4]="AddAlpha",t[t.Modulate=5]="Modulate",t[t.Modulate2x=6]="Modulate2x"}(e||(e={})),function(t){t[t.DontInterp=0]="DontInterp",t[t.Linear=1]="Linear",t[t.Hermite=2]="Hermite",t[t.Bezier=3]="Bezier"}(r||(r={})),function(t){t[t.Unshaded=1]="Unshaded",t[t.SphereEnvMap=2]="SphereEnvMap",t[t.TwoSided=16]="TwoSided",t[t.Unfogged=32]="Unfogged",t[t.NoDepthTest=64]="NoDepthTest",t[t.NoDepthSet=128]="NoDepthSet"}(i||(i={})),function(t){t[t.ConstantColor=1]="ConstantColor",t[t.SortPrimsFarZ=16]="SortPrimsFarZ",t[t.FullResolution=32]="FullResolution"}(n||(n={})),function(t){t[t.DropShadow=1]="DropShadow",t[t.Color=2]="Color"}(a||(a={})),function(t){t[t.DontInheritTranslation=1]="DontInheritTranslation",t[t.DontInheritRotation=2]="DontInheritRotation",t[t.DontInheritScaling=4]="DontInheritScaling",t[t.Billboarded=8]="Billboarded",t[t.BillboardedLockX=16]="BillboardedLockX",t[t.BillboardedLockY=32]="BillboardedLockY",t[t.BillboardedLockZ=64]="BillboardedLockZ",t[t.CameraAnchored=128]="CameraAnchored"}(o||(o={})),function(t){t[t.Helper=0]="Helper",t[t.Bone=256]="Bone",t[t.Light=512]="Light",t[t.EventObject=1024]="EventObject",t[t.Attachment=2048]="Attachment",t[t.ParticleEmitter=4096]="ParticleEmitter",t[t.CollisionShape=8192]="CollisionShape",t[t.RibbonEmitter=16384]="RibbonEmitter"}(s||(s={})),function(t){t[t.Box=0]="Box",t[t.Sphere=2]="Sphere"}(l||(l={})),function(t){t[t.EmitterUsesMDL=32768]="EmitterUsesMDL",t[t.EmitterUsesTGA=65536]="EmitterUsesTGA"}(h||(h={})),function(t){t[t.Unshaded=32768]="Unshaded",t[t.SortPrimsFarZ=65536]="SortPrimsFarZ",t[t.LineEmitter=131072]="LineEmitter",t[t.Unfogged=262144]="Unfogged",t[t.ModelSpace=524288]="ModelSpace",t[t.XYQuad=1048576]="XYQuad"}(u||(u={})),function(t){t[t.Blend=0]="Blend",t[t.Additive=1]="Additive",t[t.Modulate=2]="Modulate",t[t.Modulate2x=3]="Modulate2x",t[t.AlphaKey=4]="AlphaKey"}(c||(c={})),function(t){t[t.Head=1]="Head",t[t.Tail=2]="Tail"}(f||(f={})),function(t){t[t.Omnidirectional=0]="Omnidirectional",t[t.Directional=1]="Directional",t[t.Ambient=2]="Ambient"}(g||(g={})),function(t){t[t.Unshaded=32768]="Unshaded",t[t.SortPrimsFarZ=65536]="SortPrimsFarZ",t[t.Unfogged=262144]="Unfogged"}(m||(m={}));var d=Object.freeze({__proto__:null,get TextureFlags(){return t},get FilterMode(){return e},get LineType(){return r},get LayerShading(){return i},get MaterialRenderMode(){return n},get GeosetAnimFlags(){return a},get NodeFlags(){return o},get NodeType(){return s},get CollisionShapeType(){return l},get ParticleEmitterFlags(){return h},get ParticleEmitter2Flags(){return u},get ParticleEmitter2FilterMode(){return c},get ParticleEmitter2FramesFlags(){return f},get LightType(){return g},get ParticleEmitterPopcornFlags(){return m}});function p(t,e,r){var i=e[0],n=e[1],a=e[2],o=e[3],s=i+i,l=n+n,h=a+a,u=i*s,c=i*l,f=i*h,g=n*l,m=n*h,d=a*h,p=o*s,v=o*l,T=o*h,A=r[0],b=r[1],P=r[2];return t[0]=1-(g+d),t[1]=c+T,t[2]=f-v,t[3]=0,t[4]=c-T,t[5]=1-(u+d),t[6]=m+p,t[7]=0,t[8]=f+v,t[9]=m-p,t[10]=1-(u+g),t[11]=0,t[12]=A-(t[0]*A+t[4]*b+t[8]*P),t[13]=b-(t[1]*A+t[5]*b+t[9]*P),t[14]=P-(t[2]*A+t[6]*b+t[10]*P),t[15]=1,t}function v(t,e){return t+Math.random()*(e-t)}function T(t,e,r){var i=t.createShader(r);return t.shaderSource(i,e),t.compileShader(i),t.getShaderParameter(i,t.COMPILE_STATUS)?i:(alert(t.getShaderInfoLog(i)),null)}function A(t){return t instanceof WebGL2RenderingContext}var b,P={TextureID:0,NormalTextureID:1,ORMTextureID:2,EmissiveTextureID:3,TeamColorTextureID:4,ReflectionsTextureID:5},E=["TextureID","NormalTextureID","ORMTextureID","EmissiveTextureID","TeamColorTextureID","ReflectionsTextureID"],L=function(){function t(t){this.str=t,this.pos=0}return t.prototype.char=function(){return this.pos>=this.str.length&&y(this,"incorrect model data"),this.str[this.pos]},t}();function y(t,e){throw void 0===e&&(e=""),new Error("SyntaxError, near ".concat(t.pos)+(e?", "+e:""))}function x(t){if("/"===t.char()&&"/"===t.str[t.pos+1]){for(t.pos+=2;t.pos<t.str.length&&"\n"!==t.str[++t.pos];);return++t.pos,!0}return!1}var F=/\s/i;function S(t){for(;t.pos<t.str.length&&F.test(t.char());)++t.pos}var R=/[a-z]/i,C=/[a-z0-9]/i;function M(t){if(!R.test(t.char()))return null;var e=t.char();for(++t.pos;C.test(t.char());)e+=t.str[t.pos++];return S(t),e}function V(t,e){t.char()===e&&(++t.pos,S(t))}function D(t,e){t.char()!==e&&y(t,"extected ".concat(e)),++t.pos,S(t)}function I(t){if('"'===t.char()){for(var e=++t.pos;'"'!==t.char();)++t.pos;++t.pos;var r=t.str.substring(e,t.pos-1);return S(t),r}return null}var B,U=/[-0-9]/,w=/[-+.0-9e]/i;function _(t){if(U.test(t.char())){var e=t.pos;for(++t.pos;w.test(t.char());)++t.pos;var r=parseFloat(t.str.substring(e,t.pos));return S(t),r}return null}function O(t,e,r){if("{"!==t.char())return null;for(e||(e=[],r=0),D(t,"{");"}"!==t.char();){var i=_(t);null===i&&y(t,"expected number"),e[r++]=i,V(t,",")}return D(t,"}"),e}function N(t,e,r){if("{"!==t.char())return 0;var i=r;for(D(t,"{");"}"!==t.char();){var n=_(t);null===n&&y(t,"expected number"),e[r++]=n,V(t,",")}return D(t,"}"),r-i}function k(t,e){if("{"!==t.char())return e[0]=_(t),e;var r=0;for(D(t,"{");"}"!==t.char();){var i=_(t);null===i&&y(t,"expected number"),e[r++]=i,V(t,",")}return D(t,"}"),e}function G(t){var e=null,r={};for("{"!==t.char()&&(null===(e=I(t))&&(e=_(t)),null===e&&y(t,"expected string or number")),D(t,"{");"}"!==t.char();){var i=M(t);if(i||y(t),"Interval"===i){var n=new Uint32Array(2);r[i]=O(t,n,0)}else"MinimumExtent"===i||"MaximumExtent"===i?(n=new Float32Array(3),r[i]=O(t,n,0)):(r[i]=O(t)||I(t),null===r[i]&&(r[i]=_(t)));V(t,",")}return D(t,"}"),[e,r]}!function(t){t[t.INT1=0]="INT1",t[t.FLOAT1=1]="FLOAT1",t[t.FLOAT3=2]="FLOAT3",t[t.FLOAT4=3]="FLOAT4"}(B||(B={}));var H,X=((b={})[B.INT1]=1,b[B.FLOAT1]=1,b[B.FLOAT3]=3,b[B.FLOAT4]=4,b);function K(t,e,i,n){var a={Frame:e,Vector:null},o=i===B.INT1?Int32Array:Float32Array,s=X[i];return a.Vector=k(t,new o(s)),D(t,","),n!==r.Hermite&&n!==r.Bezier||(M(t),a.InTan=k(t,new o(s)),D(t,","),M(t),a.OutTan=k(t,new o(s)),D(t,",")),a}function W(t,e){var i={LineType:r.DontInterp,GlobalSeqId:null,Keys:[]};_(t),D(t,"{");var n=M(t);for("DontInterp"!==n&&"Linear"!==n&&"Hermite"!==n&&"Bezier"!==n||(i.LineType=r[n]),D(t,",");"}"!==t.char();){var a=M(t);if("GlobalSeqId"===a)i[a]=_(t),D(t,",");else{var o=_(t);null===o&&y(t,"expected frame number or GlobalSeqId"),D(t,":"),i.Keys.push(K(t,o,e,i.LineType))}}return D(t,"}"),i}function q(t,r){var n={Alpha:null,TVertexAnimId:null,Shading:0,CoordId:0};for(D(t,"{");"}"!==t.char();){var a=M(t),o=!1;if(a||y(t),"static"===a&&(o=!0,a=M(t)),!o&&("TextureID"===a||r.Version>=1100&&a in P))n[a]=W(t,B.INT1);else if(o||"Alpha"!==a)if("Unshaded"===a||"SphereEnvMap"===a||"TwoSided"===a||"Unfogged"===a||"NoDepthTest"===a||"NoDepthSet"===a)n.Shading|=i[a];else if("FilterMode"===a)"None"!==(l=M(t))&&"Transparent"!==l&&"Blend"!==l&&"Additive"!==l&&"AddAlpha"!==l&&"Modulate"!==l&&"Modulate2x"!==l||(n.FilterMode=e[l]);else if("TVertexAnimId"===a)n.TVertexAnimId=_(t);else if(r.Version>=900&&"EmissiveGain"===a)n[a]=o?_(t):W(t,B.FLOAT1);else if(r.Version>=1e3&&"FresnelColor"===a)if(o){var s=new Float32Array(3);n[a]=O(t,s,0)}else n[a]=W(t,B.FLOAT3);else if(r.Version>=1e3&&("FresnelOpacity"===a||"FresnelTeamColor"===a))n[a]=o?_(t):W(t,B.FLOAT1);else{var l;null===(l=_(t))&&(l=M(t)),n[a]=l}else n[a]=W(t,B.FLOAT1);V(t,","),x(t),S(t)}return D(t,"}"),n}function Y(t,e,r){var i=_(t),n=new(r===H.FLOAT?Float32Array:Uint8Array)(i*e);D(t,"{");for(var a=0;a<i;++a)O(t,n,a*e),D(t,",");return D(t,"}"),n}function z(t,e,r){var i={Name:I(t),ObjectId:null,Parent:null,PivotPoint:null,Flags:s[e]};for(D(t,"{");"}"!==t.char();){var n=M(t);if(n||y(t),"Translation"===n||"Rotation"===n||"Scaling"===n||"Visibility"===n){var a=B.FLOAT3;"Rotation"===n?a=B.FLOAT4:"Visibility"===n&&(a=B.FLOAT1),i[n]=W(t,a)}else if("BillboardedLockZ"===n||"BillboardedLockY"===n||"BillboardedLockX"===n||"Billboarded"===n||"CameraAnchored"===n)i.Flags|=o[n];else if("DontInherit"===n)D(t,"{"),"Translation"===(l=M(t))?i.Flags|=o.DontInheritTranslation:"Rotation"===l?i.Flags|=o.DontInheritRotation:"Scaling"===l&&(i.Flags|=o.DontInheritScaling),D(t,"}");else if("Path"===n)i[n]=I(t);else{var l=M(t)||_(t);("GeosetId"===n&&"Multiple"===l||"GeosetAnimId"===n&&"None"===l)&&(l=null),i[n]=l}V(t,","),x(t),S(t)}return D(t,"}"),r.Nodes[i.ObjectId]=i,i}function j(t){for(var e;void 0!==t.char()&&"{"!==t.char();)++t.pos;for(e=1,++t.pos;void 0!==t.char()&&e>0;)"{"===t.char()?++e:"}"===t.char()&&--e,++t.pos;S(t)}!function(t){t[t.INT=0]="INT",t[t.FLOAT=1]="FLOAT"}(H||(H={}));var Z,Q,J={Version:function(t,e){var r=G(t);r[0];var i=r[1];i.FormatVersion&&(e.Version=i.FormatVersion)},Model:function(t,e){var r=G(t),i=r[0],n=r[1];e.Info=n,e.Info.Name=i},Sequences:function(t,e){_(t),D(t,"{");for(var r=[];"}"!==t.char();){M(t);var i=G(t),n=i[0],a=i[1];a.Name=n,a.NonLooping="NonLooping"in a,a.MoveSpeed=a.MoveSpeed||0,a.Rarity=a.Rarity||0,r.push(a)}D(t,"}"),e.Sequences=r},Textures:function(e,r){var i=[];for(_(e),D(e,"{");"}"!==e.char();){M(e);var n=G(e);n[0];var a=n[1];a.Flags=0,"WrapWidth"in a&&(a.Flags+=t.WrapWidth,delete a.WrapWidth),"WrapHeight"in a&&(a.Flags+=t.WrapHeight,delete a.WrapHeight),i.push(a)}D(e,"}"),r.Textures=i},Materials:function(t,e){var r=[];for(_(t),D(t,"{");"}"!==t.char();){var i={RenderMode:0,Layers:[]};for(M(t),D(t,"{");"}"!==t.char();){var a=M(t);if(a||y(t),"Layer"===a)i.Layers.push(q(t,e));else if("PriorityPlane"===a||"RenderMode"===a)i[a]=_(t);else if("ConstantColor"===a||"SortPrimsFarZ"===a||"FullResolution"===a)i.RenderMode|=n[a];else{if(!(e.Version>=900&&e.Version<=1100&&"Shader"===a))throw new Error("Unknown material property "+a);i[a]=I(t)}V(t,",")}D(t,"}"),r.push(i)}D(t,"}"),e.Materials=r},Geoset:function(t,e){var r={Vertices:null,Normals:null,TVertices:[],VertexGroup:new Uint8Array(0),Faces:null,Groups:null,TotalGroupsCount:null,MinimumExtent:null,MaximumExtent:null,BoundsRadius:0,Anims:[],MaterialID:null,SelectionGroup:null,Unselectable:!1};for(D(t,"{");"}"!==t.char();){var i=M(t);if(i||y(t),"Vertices"===i||"Normals"===i||"TVertices"===i){var n=3;"TVertices"===i&&(n=2);var a=Y(t,n,H.FLOAT);"TVertices"===i?r.TVertices.push(a):r[i]=a}else if("VertexGroup"===i)r[i]=new Uint8Array(r.Vertices.length/3),O(t,r[i],0);else if("Faces"===i){var o=_(t),s=_(t),l=0;r.Faces=new Uint16Array(s),D(t,"{"),"Triangles"!==M(t)&&y(t,"unexpected faces type"),D(t,"{");for(var h=0;h<o;++h){var u=N(t,r.Faces,l);u||y(t,"expected array"),l+=u,V(t,",")}l===s&&s%3==0||y(t,"mismatched faces array"),D(t,"}"),D(t,"}")}else if("Groups"===i){var c=[];for(_(t),r.TotalGroupsCount=_(t),D(t,"{");"}"!==t.char();)M(t),c.push(O(t)),V(t,",");D(t,"}"),r.Groups=c}else if("MinimumExtent"===i||"MaximumExtent"===i)a=new Float32Array(3),r[i]=O(t,a,0),D(t,",");else if("BoundsRadius"===i||"MaterialID"===i||"SelectionGroup"===i)r[i]=_(t),D(t,",");else if("Anim"===i){var f=G(t);f[0];var g=f[1];void 0===g.Alpha&&(g.Alpha=1),r.Anims.push(g)}else"Unselectable"===i?(r.Unselectable=!0,D(t,",")):e.Version>=900&&("LevelOfDetail"===i?(r.LevelOfDetail=_(t),D(t,",")):"Name"===i?(r.Name=I(t),D(t,",")):"Tangents"===i?r.Tangents=Y(t,4,H.FLOAT):"SkinWeights"===i&&(r.SkinWeights=Y(t,8,H.INT)))}D(t,"}"),e.Geosets.push(r)},GeosetAnim:function(t,e){var r={GeosetId:-1,Alpha:1,Color:null,Flags:0};for(D(t,"{");"}"!==t.char();){var i=M(t),n=!1;if(i||y(t),"static"===i&&(n=!0,i=M(t)),"Alpha"===i)r.Alpha=n?_(t):W(t,B.FLOAT1);else if("Color"===i)if(n){var o=new Float32Array(3);r.Color=O(t,o,0),r.Color.reverse()}else{r.Color=W(t,B.FLOAT3);for(var s=0,l=r.Color.Keys;s<l.length;s++){var h=l[s];h.Vector.reverse(),h.InTan&&(h.InTan.reverse(),h.OutTan.reverse())}}else"DropShadow"===i?r.Flags|=a[i]:r[i]=_(t);V(t,",")}D(t,"}"),e.GeosetAnims.push(r)},Bone:function(t,e){var r=z(t,"Bone",e);e.Bones.push(r)},Helper:function(t,e){var r=z(t,"Helper",e);e.Helpers.push(r)},Attachment:function(t,e){var r=z(t,"Attachment",e);e.Attachments.push(r)},PivotPoints:function(t,e){var r=_(t),i=[];D(t,"{");for(var n=0;n<r;++n)i.push(O(t,new Float32Array(3),0)),D(t,",");D(t,"}"),e.PivotPoints=i},EventObject:function(t,e){var r={Name:I(t),ObjectId:null,Parent:null,PivotPoint:null,EventTrack:null,Flags:s.EventObject};for(D(t,"{");"}"!==t.char();){var i=M(t);if(i||y(t),"EventTrack"===i){var n=_(t);r.EventTrack=O(t,new Uint32Array(n),0)}else if("Translation"===i||"Rotation"===i||"Scaling"===i){var a="Rotation"===i?B.FLOAT4:B.FLOAT3;r[i]=W(t,a)}else r[i]=_(t);V(t,",")}D(t,"}"),e.EventObjects.push(r),e.Nodes[r.ObjectId]=r},CollisionShape:function(t,e){var r={Name:I(t),ObjectId:null,Parent:null,PivotPoint:null,Shape:l.Box,Vertices:null,Flags:s.CollisionShape};for(D(t,"{");"}"!==t.char();){var i=M(t);if(i||y(t),"Sphere"===i)r.Shape=l.Sphere;else if("Box"===i)r.Shape=l.Box;else if("Vertices"===i){var n=_(t),a=new Float32Array(3*n);D(t,"{");for(var o=0;o<n;++o)O(t,a,3*o),D(t,",");D(t,"}"),r.Vertices=a}else if("Translation"===i||"Rotation"===i||"Scaling"===i){var h="Rotation"===i?B.FLOAT4:B.FLOAT3;r[i]=W(t,h)}else r[i]=_(t);V(t,",")}D(t,"}"),e.CollisionShapes.push(r),e.Nodes[r.ObjectId]=r},GlobalSequences:function(t,e){var r=[],i=_(t);D(t,"{");for(var n=0;n<i;++n)"Duration"===M(t)&&r.push(_(t)),V(t,",");D(t,"}"),e.GlobalSequences=r},ParticleEmitter:function(t,e){var r={ObjectId:null,Parent:null,Name:null,Flags:0};for(r.Name=I(t),D(t,"{");"}"!==t.char();){var i=M(t),n=!1;if(i||y(t),"static"===i&&(n=!0,i=M(t)),"ObjectId"===i||"Parent"===i)r[i]=_(t);else if("EmitterUsesMDL"===i||"EmitterUsesTGA"===i)r.Flags|=h[i];else if(n||"Visibility"!==i&&"Translation"!==i&&"Rotation"!==i&&"Scaling"!==i&&"EmissionRate"!==i&&"Gravity"!==i&&"Longitude"!==i&&"Latitude"!==i)if("Particle"===i){for(D(t,"{");"}"!==t.char();){var a=M(t),o=!1;"static"===a&&(o=!0,a=M(t)),o||"LifeSpan"!==a&&"InitVelocity"!==a?"LifeSpan"===a||"InitVelocity"===a?r[a]=_(t):"Path"===a&&(r.Path=I(t)):r[a]=W(t,B.FLOAT1),V(t,",")}D(t,"}")}else r[i]=_(t);else{var s=B.FLOAT3;"Visibility"===i||"EmissionRate"===i||"Gravity"===i||"Longitude"===i||"Latitude"===i?s=B.FLOAT1:"Rotation"===i&&(s=B.FLOAT4),r[i]=W(t,s)}V(t,",")}D(t,"}"),e.ParticleEmitters.push(r)},ParticleEmitter2:function(t,e){var r={Name:I(t),ObjectId:null,Parent:null,PivotPoint:null,Flags:s.ParticleEmitter,FrameFlags:0};for(D(t,"{");"}"!==t.char();){var i=M(t),n=!1;if(i||y(t),"static"===i&&(n=!0,i=M(t)),n||"Speed"!==i&&"Latitude"!==i&&"Visibility"!==i&&"EmissionRate"!==i&&"Width"!==i&&"Length"!==i&&"Translation"!==i&&"Rotation"!==i&&"Scaling"!==i&&"Gravity"!==i&&"Variation"!==i)if("Variation"===i||"Gravity"===i||"ReplaceableId"===i||"PriorityPlane"===i)r[i]=_(t);else if("SortPrimsFarZ"===i||"Unshaded"===i||"LineEmitter"===i||"Unfogged"===i||"ModelSpace"===i||"XYQuad"===i)r.Flags|=u[i];else if("Both"===i)r.FrameFlags|=f.Head|f.Tail;else if("Head"===i||"Tail"===i)r.FrameFlags|=f[i];else if("Squirt"===i)r[i]=!0;else if("DontInherit"===i){D(t,"{");var a=M(t);"Translation"===a?r.Flags|=o.DontInheritTranslation:"Rotation"===a?r.Flags|=o.DontInheritRotation:"Scaling"===a&&(r.Flags|=o.DontInheritScaling),D(t,"}")}else if("SegmentColor"===i){var l=[];for(D(t,"{");"}"!==t.char();){M(t);var h=new Float32Array(3);O(t,h,0);var g=h[0];h[0]=h[2],h[2]=g,l.push(h),V(t,",")}D(t,"}"),r.SegmentColor=l}else"Alpha"===i?(r.Alpha=new Uint8Array(3),O(t,r.Alpha,0)):"ParticleScaling"===i?(r[i]=new Float32Array(3),O(t,r[i],0)):"LifeSpanUVAnim"===i||"DecayUVAnim"===i||"TailUVAnim"===i||"TailDecayUVAnim"===i?(r[i]=new Uint32Array(3),O(t,r[i],0)):"Transparent"===i||"Blend"===i||"Additive"===i||"AlphaKey"===i||"Modulate"===i||"Modulate2x"===i?r.FilterMode=c[i]:r[i]=_(t);else{var m=B.FLOAT3;switch(i){case"Rotation":m=B.FLOAT4;break;case"Speed":case"Latitude":case"Visibility":case"EmissionRate":case"Width":case"Length":case"Gravity":case"Variation":m=B.FLOAT1}r[i]=W(t,m)}V(t,",")}D(t,"}"),e.ParticleEmitters2.push(r),e.Nodes[r.ObjectId]=r},Camera:function(t,e){var r={Name:null,Position:null,FieldOfView:0,NearClip:0,FarClip:0,TargetPosition:null};for(r.Name=I(t),D(t,"{");"}"!==t.char();){var i=M(t);if(i||y(t),"Position"===i)r.Position=new Float32Array(3),O(t,r.Position,0);else if("FieldOfView"===i||"NearClip"===i||"FarClip"===i)r[i]=_(t);else if("Target"===i){for(D(t,"{");"}"!==t.char();){var n=M(t);"Position"===n?(r.TargetPosition=new Float32Array(3),O(t,r.TargetPosition,0)):"Translation"===n&&(r.TargetTranslation=W(t,B.FLOAT3)),V(t,",")}D(t,"}")}else"Translation"!==i&&"Rotation"!==i||(r[i]=W(t,"Rotation"===i?B.FLOAT1:B.FLOAT3));V(t,",")}D(t,"}"),e.Cameras.push(r)},Light:function(t,e){var r={Name:I(t),ObjectId:null,Parent:null,PivotPoint:null,Flags:s.Light,LightType:0};for(D(t,"{");"}"!==t.char();){var i=M(t),n=!1;if(i||y(t),"static"===i&&(n=!0,i=M(t)),n||"Visibility"!==i&&"Color"!==i&&"Intensity"!==i&&"AmbIntensity"!==i&&"AmbColor"!==i&&"Translation"!==i&&"Rotation"!==i&&"Scaling"!==i&&"AttenuationStart"!==i&&"AttenuationEnd"!==i)if("Omnidirectional"===i||"Directional"===i||"Ambient"===i)r.LightType=g[i];else if("Color"===i||"AmbColor"===i){var a=new Float32Array(3);O(t,a,0);var o=a[0];a[0]=a[2],a[2]=o,r[i]=a}else r[i]=_(t);else{var l=B.FLOAT3;switch(i){case"Rotation":l=B.FLOAT4;break;case"Visibility":case"Intensity":case"AmbIntensity":case"AttenuationStart":case"AttenuationEnd":l=B.FLOAT1}if(r[i]=W(t,l),"Color"===i||"AmbColor"===i)for(var h=0,u=r[i].Keys;h<u.length;h++){var c=u[h];c.Vector.reverse(),c.InTan&&(c.InTan.reverse(),c.OutTan.reverse())}}V(t,",")}D(t,"}"),e.Lights.push(r),e.Nodes[r.ObjectId]=r},TextureAnims:function(t,e){var r=[];for(_(t),D(t,"{");"}"!==t.char();){var i={};for(M(t),D(t,"{");"}"!==t.char();){var n=M(t);if(n||y(t),"Translation"!==n&&"Rotation"!==n&&"Scaling"!==n)throw new Error("Unknown texture anim property "+n);var a="Rotation"===n?B.FLOAT4:B.FLOAT3;i[n]=W(t,a),V(t,",")}D(t,"}"),r.push(i)}D(t,"}"),e.TextureAnims=r},RibbonEmitter:function(t,e){var r={Name:I(t),ObjectId:null,Parent:null,PivotPoint:null,Flags:s.RibbonEmitter,HeightAbove:null,HeightBelow:null,Alpha:null,Color:null,LifeSpan:null,TextureSlot:null,EmissionRate:null,Rows:null,Columns:null,MaterialID:0,Gravity:null,Visibility:null};for(D(t,"{");"}"!==t.char();){var i=M(t),n=!1;if(i||y(t),"static"===i&&(n=!0,i=M(t)),n||"Visibility"!==i&&"HeightAbove"!==i&&"HeightBelow"!==i&&"Translation"!==i&&"Rotation"!==i&&"Scaling"!==i&&"Alpha"!==i&&"TextureSlot"!==i)if("Color"===i){var a=new Float32Array(3);O(t,a,0);var o=a[0];a[0]=a[2],a[2]=o,r[i]=a}else r[i]=_(t);else{var l=B.FLOAT3;switch(i){case"Rotation":l=B.FLOAT4;break;case"Visibility":case"HeightAbove":case"HeightBelow":case"Alpha":l=B.FLOAT1;break;case"TextureSlot":l=B.INT1}r[i]=W(t,l)}V(t,",")}D(t,"}"),e.RibbonEmitters.push(r),e.Nodes[r.ObjectId]=r},FaceFX:function(t,e){e.Version<900&&y(t,"Unexpected model chunk FaceFX");var r={Name:I(t),Path:""};for(D(t,"{");"}"!==t.char();){var i=M(t);i||y(t),"Path"===i&&(r.Path=I(t)),V(t,",")}D(t,"}"),e.FaceFX=e.FaceFX||[],e.FaceFX.push(r)},BindPose:function(t,e){e.Version<900&&y(t,"Unexpected model chunk BindPose");var r={Matrices:[]};D(t,"{"),M(t);var i=_(t);D(t,"{");for(var n=0;n<i;++n){var a=new Float32Array(12);O(t,a,0),V(t,","),r.Matrices.push(a)}D(t,"}"),D(t,"}"),e.BindPoses=e.BindPoses||[],e.BindPoses.push(r)},ParticleEmitterPopcorn:function(t,e){e.Version<900&&y(t,"Unexpected model chunk ParticleEmitterPopcorn");var r={Name:I(t),ObjectId:null,Parent:null,PivotPoint:null,Flags:s.ParticleEmitter};for(D(t,"{");"}"!==t.char();){var i=M(t),n=!1;if(i||y(t),"static"===i&&(n=!0,i=M(t)),n||"LifeSpan"!==i&&"EmissionRate"!==i&&"Speed"!==i&&"Color"!==i&&"Alpha"!==i&&"Visibility"!==i&&"Rotation"!==i&&"Scaling"!==i&&"Translation"!==i)if("LifeSpan"===i||"EmissionRate"===i||"Speed"===i||"Alpha"===i)r[i]=_(t);else if("Color"===i){var a=new Float32Array(3);r[i]=O(t,a,0)}else"ReplaceableId"===i?r[i]=_(t):"Path"===i||"AnimVisibilityGuide"===i?r[i]=I(t):"Unshaded"===i||"SortPrimsFarZ"===i||"Unfogged"===i?"Unshaded"===i?r.Flags|=m.Unshaded:"Unfogged"===i?r.Flags|=m.Unfogged:"SortPrimsFarZ"===i&&(r.Flags|=m.SortPrimsFarZ):r[i]=_(t);else{var o=B.FLOAT3;switch(i){case"LifeSpan":case"EmissionRate":case"Speed":case"Alpha":case"Visibility":o=B.FLOAT1}r[i]=W(t,o)}V(t,",")}D(t,"}"),e.ParticleEmitterPopcorns=e.ParticleEmitterPopcorns||[],e.ParticleEmitterPopcorns.push(r),e.Nodes[r.ObjectId]=r}},$=!0,tt=-1;!function(t){t[t.INT1=0]="INT1",t[t.FLOAT1=1]="FLOAT1",t[t.FLOAT3=2]="FLOAT3",t[t.FLOAT4=3]="FLOAT4"}(Q||(Q={}));var et=((Z={})[Q.INT1]=1,Z[Q.FLOAT1]=1,Z[Q.FLOAT3]=3,Z[Q.FLOAT4]=4,Z),rt=function(){function t(t){this.ab=t,this.pos=0,this.length=t.byteLength,this.view=new DataView(this.ab),this.uint=new Uint8Array(this.ab)}return t.prototype.keyword=function(){var t=String.fromCharCode(this.uint[this.pos],this.uint[this.pos+1],this.uint[this.pos+2],this.uint[this.pos+3]);return this.pos+=4,t},t.prototype.expectKeyword=function(t,e){if(this.keyword()!==t)throw new Error(e)},t.prototype.uint8=function(){return this.view.getUint8(this.pos++)},t.prototype.uint16=function(){var t=this.view.getUint16(this.pos,$);return this.pos+=2,t},t.prototype.int32=function(){var t=this.view.getInt32(this.pos,$);return this.pos+=4,t},t.prototype.float32=function(){var t=this.view.getFloat32(this.pos,$);return this.pos+=4,t},t.prototype.float32Array=function(t){for(var e=new Float32Array(t),r=0;r<t;++r)e[r]=this.float32();return e},t.prototype.uint8Array=function(t){for(var e=new Uint8Array(t),r=0;r<t;++r)e[r]=this.uint8();return e},t.prototype.str=function(t){for(var e=t;0===this.uint[this.pos+e-1]&&e>0;)--e;var r=String.fromCharCode.apply(String,this.uint.slice(this.pos,this.pos+e));return this.pos+=t,r},t.prototype.animVector=function(t){var e={Keys:[]},i=t===Q.INT1,n=et[t],a=this.int32();e.LineType=this.int32(),e.GlobalSeqId=this.int32(),e.GlobalSeqId===tt&&(e.GlobalSeqId=null);for(var o=0;o<a;++o){var s={};s.Frame=this.int32(),s.Vector=i?new Int32Array(n):new Float32Array(n);for(var l=0;l<n;++l)s.Vector[l]=i?this.int32():this.float32();if(e.LineType===r.Hermite||e.LineType===r.Bezier)for(var h=0,u=["InTan","OutTan"];h<u.length;h++){var c=u[h];for(s[c]=new Float32Array(n),l=0;l<n;++l)s[c][l]=i?this.int32():this.float32()}e.Keys.push(s)}return e},t}();function it(t,e){t.BoundsRadius=e.float32();for(var r=0,i=["MinimumExtent","MaximumExtent"];r<i.length;r++){var n=i[r];t[n]=new Float32Array(3);for(var a=0;a<3;++a)t[n][a]=e.float32()}}var nt=80;function at(t,e,r){var i=r.pos,n=r.int32();for(e.Name=r.str(nt),e.ObjectId=r.int32(),e.ObjectId===tt&&(e.ObjectId=null),e.Parent=r.int32(),e.Parent===tt&&(e.Parent=null),e.Flags=r.int32();r.pos<i+n;){var a=r.keyword();if("KGTR"===a)e.Translation=r.animVector(Q.FLOAT3);else if("KGRT"===a)e.Rotation=r.animVector(Q.FLOAT4);else{if("KGSC"!==a)throw new Error("Incorrect node chunk data "+a);e.Scaling=r.animVector(Q.FLOAT3)}}t.Nodes[e.ObjectId]=e}var ot={VERS:function(t,e){t.Version=e.int32()},MODL:function(t,e){t.Info.Name=e.str(336),e.int32(),it(t.Info,e),t.Info.BlendTime=e.int32()},SEQS:function(t,e,r){for(var i=e.pos;e.pos<i+r;){var n=e.str(80),a={};a.Name=n;var o=new Uint32Array(2);o[0]=e.int32(),o[1]=e.int32(),a.Interval=o,a.MoveSpeed=e.float32(),a.NonLooping=e.int32()>0,a.Rarity=e.float32(),e.int32(),it(a,e),t.Sequences.push(a)}},MTLS:function(t,e,r){for(var i=e.pos;e.pos<i+r;){e.int32();var n={Layers:[]};n.PriorityPlane=e.int32(),n.RenderMode=e.int32(),t.Version>=900&&t.Version<1100&&(n.Shader=e.str(80)),e.expectKeyword("LAYS","Incorrect materials format");for(var a=e.int32(),o=0;o<a;++o){var s=e.pos,l=e.int32(),h={};if(h.FilterMode=e.int32(),h.Shading=e.int32(),h.TextureID=e.int32(),h.TVertexAnimId=e.int32(),h.TVertexAnimId===tt&&(h.TVertexAnimId=null),h.CoordId=e.int32(),h.Alpha=e.float32(),t.Version>=900&&(h.EmissiveGain=e.float32(),t.Version>=1e3&&(h.FresnelColor=e.float32Array(3),h.FresnelOpacity=e.float32(),h.FresnelTeamColor=e.float32())),t.Version>=1100){h.ShaderTypeId=e.int32();for(var u=e.int32(),c=0;c<u;++c){var f=e.int32();e.int32();var g=c;"KMTF"===(m=e.keyword())?h[E[g]]=e.animVector(Q.INT1):(h[E[g]]=f,e.pos-=4)}}for(;e.pos<s+l;){var m;if("KMTA"===(m=e.keyword()))h.Alpha=e.animVector(Q.FLOAT1);else if("KMTF"===m)h.TextureID=e.animVector(Q.INT1);else if("KMTE"===m&&t.Version>=900)h.EmissiveGain=e.animVector(Q.FLOAT1);else if("KFC3"===m&&t.Version>=1e3)h.FresnelColor=e.animVector(Q.FLOAT3);else if("KFCA"===m&&t.Version>=1e3)h.FresnelOpacity=e.animVector(Q.FLOAT1);else{if(!("KFTC"===m&&t.Version>=1e3))throw new Error("Unknown layer chunk data "+m);h.FresnelTeamColor=e.animVector(Q.FLOAT1)}}n.Layers.push(h)}t.Materials.push(n)}},TEXS:function(t,e,r){for(var i=e.pos;e.pos<i+r;){var n={};n.ReplaceableId=e.int32(),n.Image=e.str(256),e.int32(),n.Flags=e.int32(),t.Textures.push(n)}},GEOS:function(t,e,r){for(var i=e.pos;e.pos<i+r;){var n={};e.int32(),e.expectKeyword("VRTX","Incorrect geosets format");var a=e.int32();n.Vertices=new Float32Array(3*a);for(var o=0;o<3*a;++o)n.Vertices[o]=e.float32();e.expectKeyword("NRMS","Incorrect geosets format");var s=e.int32();for(n.Normals=new Float32Array(3*s),o=0;o<3*s;++o)n.Normals[o]=e.float32();e.expectKeyword("PTYP","Incorrect geosets format");var l=e.int32();for(o=0;o<l;++o)if(4!==e.int32())throw new Error("Incorrect geosets format");e.expectKeyword("PCNT","Incorrect geosets format");var h=e.int32();for(o=0;o<h;++o)e.int32();e.expectKeyword("PVTX","Incorrect geosets format");var u=e.int32();for(n.Faces=new Uint16Array(u),o=0;o<u;++o)n.Faces[o]=e.uint16();e.expectKeyword("GNDX","Incorrect geosets format");var c=e.int32();for(n.VertexGroup=new Uint8Array(c),o=0;o<c;++o)n.VertexGroup[o]=e.uint8();e.expectKeyword("MTGC","Incorrect geosets format");var f=e.int32();for(n.Groups=[],o=0;o<f;++o)n.Groups[o]=new Array(e.int32());e.expectKeyword("MATS","Incorrect geosets format"),n.TotalGroupsCount=e.int32();var g=0,m=0;for(o=0;o<n.TotalGroupsCount;++o)g>=n.Groups[m].length&&(g=0,m++),n.Groups[m][g++]=e.int32();n.MaterialID=e.int32(),n.SelectionGroup=e.int32(),n.Unselectable=e.int32()>0,t.Version>=900&&(n.LevelOfDetail=e.int32(),n.Name=e.str(80)),it(n,e);var d=e.int32();for(n.Anims=[],o=0;o<d;++o){var p={};it(p,e),n.Anims.push(p)}var v=e.keyword();if(t.Version>=900)for(;;){if(e.pos>=e.length)throw new Error("Unexpected EOF");if("TANG"===v){if(n.Tangents)throw new Error("Incorrect geoset, multiple Tangents");var T=e.int32();n.Tangents=e.float32Array(4*T)}else if("SKIN"===v){if(n.SkinWeights)throw new Error("Incorrect geoset, multiple SkinWeights");T=e.int32(),n.SkinWeights=e.uint8Array(T)}else if("UVAS"===v)break;v=e.keyword()}else if("UVAS"!==v)throw new Error("Incorrect geosets format");var A=e.int32();for(n.TVertices=[],o=0;o<A;++o){e.expectKeyword("UVBS","Incorrect geosets format");for(var b=e.int32(),P=new Float32Array(2*b),E=0;E<2*b;++E)P[E]=e.float32();n.TVertices.push(P)}t.Geosets.push(n)}},GEOA:function(t,e,r){for(var i=e.pos;e.pos<i+r;){var n=e.pos,a=e.int32(),o={};o.Alpha=e.float32(),o.Flags=e.int32(),o.Color=new Float32Array(3);for(var s=0;s<3;++s)o.Color[s]=e.float32();for(o.GeosetId=e.int32(),o.GeosetId===tt&&(o.GeosetId=null);e.pos<n+a;){var l=e.keyword();if("KGAO"===l)o.Alpha=e.animVector(Q.FLOAT1);else{if("KGAC"!==l)throw new Error("Incorrect GeosetAnim chunk data "+l);o.Color=e.animVector(Q.FLOAT3)}}t.GeosetAnims.push(o)}},BONE:function(t,e,r){for(var i=e.pos;e.pos<i+r;){var n={};at(t,n,e),n.GeosetId=e.int32(),n.GeosetId===tt&&(n.GeosetId=null),n.GeosetAnimId=e.int32(),n.GeosetAnimId===tt&&(n.GeosetAnimId=null),t.Bones.push(n)}},HELP:function(t,e,r){for(var i=e.pos;e.pos<i+r;){var n={};at(t,n,e),t.Helpers.push(n)}},ATCH:function(t,e,r){for(var i=e.pos;e.pos<i+r;){var n=e.pos,a=e.int32(),o={};at(t,o,e),o.Path=e.str(256),e.int32(),o.AttachmentID=e.int32(),e.pos<n+a&&(e.expectKeyword("KATV","Incorrect attachment chunk data"),o.Visibility=e.animVector(Q.FLOAT1)),t.Attachments.push(o)}},PIVT:function(t,e,r){for(var i=r/12,n=0;n<i;++n)t.PivotPoints[n]=new Float32Array(3),t.PivotPoints[n][0]=e.float32(),t.PivotPoints[n][1]=e.float32(),t.PivotPoints[n][2]=e.float32()},EVTS:function(t,e,r){for(var i=e.pos;e.pos<i+r;){var n={};at(t,n,e),e.expectKeyword("KEVT","Incorrect EventObject chunk data");var a=e.int32();n.EventTrack=new Uint32Array(a),e.int32();for(var o=0;o<a;++o)n.EventTrack[o]=e.int32();t.EventObjects.push(n)}},CLID:function(t,e,r){for(var i=e.pos;e.pos<i+r;){var n={};at(t,n,e),n.Shape=e.int32(),n.Shape===l.Box?n.Vertices=new Float32Array(6):n.Vertices=new Float32Array(3);for(var a=0;a<n.Vertices.length;++a)n.Vertices[a]=e.float32();n.Shape===l.Sphere&&(n.BoundsRadius=e.float32()),t.CollisionShapes.push(n)}},GLBS:function(t,e,r){var i=e.pos;for(t.GlobalSequences=[];e.pos<i+r;)t.GlobalSequences.push(e.int32())},PREM:function(t,e,r){for(var i=e.pos;e.pos<i+r;){var n=e.pos,a=e.int32(),o={};for(at(t,o,e),o.EmissionRate=e.float32(),o.Gravity=e.float32(),o.Longitude=e.float32(),o.Latitude=e.float32(),o.Path=e.str(256),e.int32(),o.LifeSpan=e.float32(),o.InitVelocity=e.float32();e.pos<n+a;){var s=e.keyword();if("KPEV"===s)o.Visibility=e.animVector(Q.FLOAT1);else if("KPEE"===s)o.EmissionRate=e.animVector(Q.FLOAT1);else if("KPEG"===s)o.Gravity=e.animVector(Q.FLOAT1);else if("KPLN"===s)o.Longitude=e.animVector(Q.FLOAT1);else if("KPLT"===s)o.Latitude=e.animVector(Q.FLOAT1);else if("KPEL"===s)o.LifeSpan=e.animVector(Q.FLOAT1);else{if("KPES"!==s)throw new Error("Incorrect particle emitter chunk data "+s);o.InitVelocity=e.animVector(Q.FLOAT1)}}t.ParticleEmitters.push(o)}},PRE2:function(t,e,r){for(var i=e.pos;e.pos<i+r;){var n=e.pos,a=e.int32(),o={};at(t,o,e),o.Speed=e.float32(),o.Variation=e.float32(),o.Latitude=e.float32(),o.Gravity=e.float32(),o.LifeSpan=e.float32(),o.EmissionRate=e.float32(),o.Width=e.float32(),o.Length=e.float32(),o.FilterMode=e.int32(),o.Rows=e.int32(),o.Columns=e.int32();var s=e.int32();o.FrameFlags=0,0!==s&&2!==s||(o.FrameFlags|=f.Head),1!==s&&2!==s||(o.FrameFlags|=f.Tail),o.TailLength=e.float32(),o.Time=e.float32(),o.SegmentColor=[];for(var l=0;l<3;++l){o.SegmentColor[l]=new Float32Array(3);for(var h=0;h<3;++h)o.SegmentColor[l][h]=e.float32()}for(o.Alpha=new Uint8Array(3),l=0;l<3;++l)o.Alpha[l]=e.uint8();for(o.ParticleScaling=new Float32Array(3),l=0;l<3;++l)o.ParticleScaling[l]=e.float32();for(var u=0,c=["LifeSpanUVAnim","DecayUVAnim","TailUVAnim","TailDecayUVAnim"];u<c.length;u++){var g=c[u];for(o[g]=new Uint32Array(3),l=0;l<3;++l)o[g][l]=e.int32()}for(o.TextureID=e.int32(),o.TextureID===tt&&(o.TextureID=null),o.Squirt=e.int32()>0,o.PriorityPlane=e.int32(),o.ReplaceableId=e.int32();e.pos<n+a;){var m=e.keyword();if("KP2V"===m)o.Visibility=e.animVector(Q.FLOAT1);else if("KP2E"===m)o.EmissionRate=e.animVector(Q.FLOAT1);else if("KP2W"===m)o.Width=e.animVector(Q.FLOAT1);else if("KP2N"===m)o.Length=e.animVector(Q.FLOAT1);else if("KP2S"===m)o.Speed=e.animVector(Q.FLOAT1);else if("KP2L"===m)o.Latitude=e.animVector(Q.FLOAT1);else if("KP2G"===m)o.Gravity=e.animVector(Q.FLOAT1);else{if("KP2R"!==m)throw new Error("Incorrect particle emitter2 chunk data "+m);o.Variation=e.animVector(Q.FLOAT1)}}t.ParticleEmitters2.push(o)}},CAMS:function(t,e,r){for(var i=e.pos;e.pos<i+r;){var n=e.pos,a=e.int32(),o={};for(o.Name=e.str(80),o.Position=new Float32Array(3),o.Position[0]=e.float32(),o.Position[1]=e.float32(),o.Position[2]=e.float32(),o.FieldOfView=e.float32(),o.FarClip=e.float32(),o.NearClip=e.float32(),o.TargetPosition=new Float32Array(3),o.TargetPosition[0]=e.float32(),o.TargetPosition[1]=e.float32(),o.TargetPosition[2]=e.float32();e.pos<n+a;){var s=e.keyword();if("KCTR"===s)o.Translation=e.animVector(Q.FLOAT3);else if("KTTR"===s)o.TargetTranslation=e.animVector(Q.FLOAT3);else{if("KCRL"!==s)throw new Error("Incorrect camera chunk data "+s);o.Rotation=e.animVector(Q.FLOAT1)}}t.Cameras.push(o)}},LITE:function(t,e,r){for(var i=e.pos;e.pos<i+r;){var n=e.pos,a=e.int32(),o={};at(t,o,e),o.LightType=e.int32(),o.AttenuationStart=e.float32(),o.AttenuationEnd=e.float32(),o.Color=new Float32Array(3);for(var s=0;s<3;++s)o.Color[s]=e.float32();for(o.Intensity=e.float32(),o.AmbColor=new Float32Array(3),s=0;s<3;++s)o.AmbColor[s]=e.float32();for(o.AmbIntensity=e.float32();e.pos<n+a;){var l=e.keyword();if("KLAV"===l)o.Visibility=e.animVector(Q.FLOAT1);else if("KLAC"===l)o.Color=e.animVector(Q.FLOAT3);else if("KLAI"===l)o.Intensity=e.animVector(Q.FLOAT1);else if("KLBC"===l)o.AmbColor=e.animVector(Q.FLOAT3);else if("KLBI"===l)o.AmbIntensity=e.animVector(Q.FLOAT1);else if("KLAS"===l)o.AttenuationStart=e.animVector(Q.INT1);else{if("KLAE"!==l)throw new Error("Incorrect light chunk data "+l);o.AttenuationEnd=e.animVector(Q.INT1)}}t.Lights.push(o)}},TXAN:function(t,e,r){for(var i=e.pos;e.pos<i+r;){for(var n=e.pos,a=e.int32(),o={};e.pos<n+a;){var s=e.keyword();if("KTAT"===s)o.Translation=e.animVector(Q.FLOAT3);else if("KTAR"===s)o.Rotation=e.animVector(Q.FLOAT4);else{if("KTAS"!==s)throw new Error("Incorrect light chunk data "+s);o.Scaling=e.animVector(Q.FLOAT3)}}t.TextureAnims.push(o)}},RIBB:function(t,e,r){for(var i=e.pos;e.pos<i+r;){var n=e.pos,a=e.int32(),o={};at(t,o,e),o.HeightAbove=e.float32(),o.HeightBelow=e.float32(),o.Alpha=e.float32(),o.Color=new Float32Array(3);for(var s=0;s<3;++s)o.Color[s]=e.float32();for(o.LifeSpan=e.float32(),o.TextureSlot=e.int32(),o.EmissionRate=e.int32(),o.Rows=e.int32(),o.Columns=e.int32(),o.MaterialID=e.int32(),o.Gravity=e.float32();e.pos<n+a;){var l=e.keyword();if("KRVS"===l)o.Visibility=e.animVector(Q.FLOAT1);else if("KRHA"===l)o.HeightAbove=e.animVector(Q.FLOAT1);else if("KRHB"===l)o.HeightBelow=e.animVector(Q.FLOAT1);else if("KRAL"===l)o.Alpha=e.animVector(Q.FLOAT1);else{if("KRTX"!==l)throw new Error("Incorrect ribbon emitter chunk data "+l);o.TextureSlot=e.animVector(Q.INT1)}}t.RibbonEmitters.push(o)}},FAFX:function(t,e,r){if(t.Version<900)throw new Error("Mismatched version chunk");var i=e.pos;for(t.FaceFX=t.FaceFX||[];e.pos<i+r;){var n={Name:"",Path:""};n.Name=e.str(80),n.Path=e.str(260),t.FaceFX.push(n)}},BPOS:function(t,e,r){if(t.Version<900)throw new Error("Mismatched version chunk");var i=e.pos;t.BindPoses=t.BindPoses||[];for(var n=e.int32(),a={Matrices:[]},o=0;o<n;++o){var s=e.float32Array(12);a.Matrices.push(s)}if(t.BindPoses.push(a),e.pos!==i+r)throw new Error("Mismatched BindPose data")},CORN:function(t,e,r){if(t.Version<900)throw new Error("Mismatched version chunk");var i=e.pos;for(t.ParticleEmitterPopcorns=t.ParticleEmitterPopcorns||[];e.pos<i+r;){var n=e.pos,a=e.int32(),o={};for(at(t,o,e),o.LifeSpan=e.float32(),o.EmissionRate=e.float32(),o.Speed=e.float32(),o.Color=e.float32Array(3),o.Alpha=e.float32(),o.ReplaceableId=e.int32(),o.Path=e.str(260),o.AnimVisibilityGuide=e.str(260);e.pos<n+a;){var s=e.keyword();if("KPPA"===s)o.Alpha=e.animVector(Q.FLOAT1);else if("KPPC"===s)o.Color=e.animVector(Q.FLOAT3);else if("KPPE"===s)o.EmissionRate=e.animVector(Q.FLOAT1);else if("KPPL"===s)o.LifeSpan=e.animVector(Q.FLOAT1);else if("KPPS"===s)o.Speed=e.animVector(Q.FLOAT1);else{if("KPPV"!==s)throw new Error("Incorrect particle emitter popcorn chunk data "+s);o.Visibility=e.animVector(Q.FLOAT1)}}t.ParticleEmitterPopcorns.push(o)}}},st=6,lt=1e-6;function ht(t){if(void 0===t&&(t=1),0===t)return"";for(var e="\t",r=1;r<t;++r)e+="\t";return e}function ut(t){return'"'.concat(t,'"')}function ct(t,e,r){return void 0===e&&(e=null),void 0===r&&(r=0),ht(r)+t+" "+(null!==e?("number"==typeof(i=e)?String(i):ut(i))+" ":"")+"{\n";var i}function ft(t){return void 0===t&&(t=0),ht(t)+"}\n"}var gt=/(\..+?)0+$/,mt=/\.0+$/,dt=/^-0$/;function pt(t){return t.toFixed(st).replace(gt,"$1").replace(mt,"").replace(dt,"0")}function vt(t,e){void 0===e&&(e=!1);var r="";if(e)for(var i=t.length-1;i>=0;--i)i<t.length-1&&(r+=", "),r+=pt(t[i]);else for(i=0;i<t.length;++i)i>0&&(r+=", "),r+=pt(t[i]);return"{ "+r+" }"}function Tt(t){for(var e="",r=0;r<t.length;++r)r>0&&(e+=", "),e+=String(t[r]);return"{ "+e+" }"}function At(t,e,r,i){return void 0===i&&(i=1),"".concat(ht(i)+function(t){return t?"static ":""}(r)+t," ").concat(e,",\n")}function bt(t,e,r,i){return void 0===r&&(r=null),void 0===i&&(i=1),At(t,String(e),r,i)}function Pt(t,e,r,i){return void 0===r&&(r=null),void 0===i&&(i=1),At(t,pt(e),r,i)}function Et(t,e,r,i){return void 0===r&&(r=null),void 0===i&&(i=1),At(t,e,r,i)}function Lt(t,e,r,i){return void 0===r&&(r=null),void 0===i&&(i=1),At(t,ut(e),r,i)}function yt(t,e,r,i){return void 0===r&&(r=null),void 0===i&&(i=1),At(t,vt(e),r,i)}function xt(t,e,r,i){return void 0===r&&(r=null),void 0===i&&(i=1),At(t,Tt(e),r,i)}function Ft(t,e){return void 0===e&&(e=1),ht(e)+t+",\n"}function St(t,e,r,i,n){return void 0===r&&(r=0),void 0===i&&(i=null),void 0===n&&(n=1),e!==r&&null!=e?bt(t,e,i,n):""}function Rt(t,e,r,i,n){return void 0===r&&(r=0),void 0===i&&(i=null),void 0===n&&(n=1),Math.abs(e-r)>lt?Pt(t,e,i,n):""}function Ct(t,e,i,n,a){return void 0===i&&(i=0),void 0===n&&(n=1),void 0===a&&(a=!1),null==e?"":"number"==typeof e?"number"==typeof i&&Math.abs(e-i)<lt?"":Pt(t,e,!0,n):ct(t,e.Keys.length,n)+Ft(function(t){switch(t){case r.DontInterp:return"DontInterp";case r.Linear:return"Linear";case r.Bezier:return"Bezier";case r.Hermite:return"Hermite"}return""}(e.LineType),n+1)+(null!==e.GlobalSeqId?bt("GlobalSeqId",e.GlobalSeqId,null,n+1):"")+e.Keys.map((function(t){return function(t,e,r){void 0===e&&(e=2),void 0===r&&(r=!1);var i=ht(e)+t.Frame+": "+(1===t.Vector.length?pt(t.Vector[0]):vt(t.Vector,r))+",\n";return t.InTan&&(i+=ht(e+1)+"InTan "+(1===t.InTan.length?pt(t.InTan[0]):vt(t.InTan,r))+",\n",i+=ht(e+1)+"OutTan "+(1===t.OutTan.length?pt(t.OutTan[0]):vt(t.OutTan,r))+",\n"),i}(t,n+1,a)})).join("")+ft(n)}function Mt(t){return ct("Anim",t.Name,1)+xt("Interval",t.Interval,null,2)+Rt("Rarity",t.Rarity,0,null,2)+Rt("MoveSpeed",t.MoveSpeed,0,null,2)+(t.NonLooping?Ft("NonLooping",2):"")+yt("MinimumExtent",t.MinimumExtent,null,2)+yt("MaximumExtent",t.MaximumExtent,null,2)+Rt("BoundsRadius",t.BoundsRadius,0,null,2)+ft(1)}function Vt(e){return ct("Bitmap",null,1)+Lt("Image",e.Image,null,2)+St("ReplaceableId",e.ReplaceableId,0,null,2)+(e.Flags&t.WrapWidth?Ft("WrapWidth",2):"")+(e.Flags&t.WrapHeight?Ft("WrapHeight",2):"")+ft(1)}function Dt(t){return ct("TVertexAnim",null,1)+(t.Translation?Ct("Translation",t.Translation,null,2):"")+(t.Rotation?Ct("Rotation",t.Rotation,null,2):"")+(t.Scaling?Ct("Scaling",t.Scaling,null,2):"")+ft(1)}function It(t,e,r){for(var i="",n=e.length/r,a=0;a<n;++a)i+=ht(2)+vt(e.slice(a*r,(a+1)*r))+",\n";return ct(t,n,1)+i+ft(1)}function Bt(t){return ct("Anim",null,1)+yt("MinimumExtent",t.MinimumExtent,null,2)+yt("MaximumExtent",t.MaximumExtent,null,2)+Rt("BoundsRadius",t.BoundsRadius,0,null,2)+ft(1)}function Ut(t,e,r,i){if(void 0===i&&(i=1),e){if(!(e instanceof Float32Array))return Ct(t,e,null,i,!0);if(!r||(o=e,void 0===(s=1)&&(s=0),Math.abs(o[0]-s)>lt||Math.abs(o[1]-s)>lt||Math.abs(o[2]-s)>lt)){for(var n="",a=2;a>=0;--a)a<2&&(n+=", "),n+=pt(e[a]);return"".concat(ht(i)).concat(r?"static ":"").concat(t," { ").concat(n," },\n")}}var o,s;return""}function wt(t){return ct("GeosetAnim")+bt("GeosetId",t.GeosetId)+Ct("Alpha",t.Alpha,1)+Ut("Color",t.Color,!0)+(t.Flags&a.DropShadow?Ft("DropShadow"):"")+ft()}function _t(t){return bt("ObjectId",t.ObjectId)+St("Parent",t.Parent,null)+(e=t.Flags,r=[],e&o.DontInheritTranslation&&r.push("Translation"),e&o.DontInheritRotation&&r.push("Rotation"),e&o.DontInheritScaling&&r.push("Scaling"),r.length?ht(1)+"DontInherit { "+r.join(", ")+" },\n":"")+(t.Flags&o.Billboarded?Ft("Billboarded"):"")+(t.Flags&o.BillboardedLockX?Ft("BillboardedLockX"):"")+(t.Flags&o.BillboardedLockY?Ft("BillboardedLockY"):"")+(t.Flags&o.BillboardedLockZ?Ft("BillboardedLockZ"):"")+(t.Flags&o.CameraAnchored?Ft("CameraAnchored"):"")+(void 0!==t.Translation?Ct("Translation",t.Translation):"")+(void 0!==t.Rotation?Ct("Rotation",t.Rotation):"")+(void 0!==t.Scaling?Ct("Scaling",t.Scaling):"");var e,r}function Ot(t){return ct("Bone",t.Name)+_t(t)+(null!==t.GeosetId?bt("GeosetId",t.GeosetId):Et("GeosetId","Multiple"))+(null!==t.GeosetAnimId?bt("GeosetAnimId",t.GeosetAnimId):Et("GeosetAnimId","None"))+ft()}function Nt(t){return ct("Light",t.Name)+_t(t)+Ft(function(t){switch(t){case g.Omnidirectional:return"Omnidirectional";case g.Directional:return"Directional";case g.Ambient:return"Ambient"}return""}(t.LightType))+Ct("AttenuationStart",t.AttenuationStart)+Ct("AttenuationEnd",t.AttenuationEnd)+Ut("Color",t.Color,!0)+Ct("Intensity",t.Intensity,null)+Ut("AmbColor",t.AmbColor,!0)+Ct("AmbIntensity",t.AmbIntensity,null)+Ct("Visibility",t.Visibility,1)+ft()}function kt(t){return ct("Helper",t.Name)+_t(t)+ft()}function Gt(t){return ct("Attachment",t.Name)+_t(t)+bt("AttachmentID",t.AttachmentID)+(t.Path?Lt("Path",t.Path):"")+Ct("Visibility",t.Visibility,1)+ft()}function Ht(t){return ct("ParticleEmitter",t.Name)+_t(t)+(t.Flags&h.EmitterUsesMDL?Ft("EmitterUsesMDL"):"")+(t.Flags&h.EmitterUsesTGA?Ft("EmitterUsesTGA"):"")+Ct("EmissionRate",t.EmissionRate)+Ct("Gravity",t.Gravity)+Ct("Longitude",t.Longitude)+Ct("Latitude",t.Latitude)+Ct("Visibility",t.Visibility)+ct("Particle",null,1)+Ct("LifeSpan",t.LifeSpan,null,2)+Ct("InitVelocity",t.InitVelocity,null,2)+Lt("Path",t.Path,!1,2)+ft(1)+ft()}function Xt(t){return ct("ParticleEmitter2",t.Name)+_t(t)+Ft(function(t){switch(t){case c.Blend:return"Blend";case c.Additive:return"Additive";case c.Modulate:return"Modulate";case c.Modulate2x:return"Modulate2x";case c.AlphaKey:return"AlphaKey"}return""}(t.FilterMode))+Ct("Speed",t.Speed,null)+Ct("Variation",t.Variation,null)+Ct("Latitude",t.Latitude,null)+Ct("Gravity",t.Gravity,null)+Ct("EmissionRate",t.EmissionRate,null)+Ct("Width",t.Width,null)+Ct("Length",t.Length,null)+Ct("Visibility",t.Visibility,1)+(r=t.SegmentColor,ct("SegmentColor",null,1)+r.map((function(t){return Ut("Color",t,!1,2)})).join("")+ht()+"},\n")+xt("Alpha",t.Alpha)+yt("ParticleScaling",t.ParticleScaling)+yt("LifeSpanUVAnim",t.LifeSpanUVAnim)+yt("DecayUVAnim",t.DecayUVAnim)+yt("TailUVAnim",t.TailUVAnim)+yt("TailDecayUVAnim",t.TailDecayUVAnim)+St("Rows",t.Rows,0)+St("Columns",t.Columns,0)+bt("TextureID",t.TextureID)+St("Time",t.Time,0)+St("LifeSpan",t.LifeSpan,0)+St("TailLength",t.TailLength,0)+St("PriorityPlane",t.PriorityPlane,0)+St("ReplaceableId",t.ReplaceableId,null)+(t.Flags&u.SortPrimsFarZ?Ft("SortPrimsFarZ"):"")+(t.Flags&u.LineEmitter?Ft("LineEmitter"):"")+(t.Flags&u.ModelSpace?Ft("ModelSpace"):"")+(t.Flags&u.Unshaded?Ft("Unshaded"):"")+(t.Flags&u.Unfogged?Ft("Unfogged"):"")+(t.Flags&u.XYQuad?Ft("XYQuad"):"")+(t.Squirt?Ft("Squirt"):"")+Ft((e=t.FrameFlags)&f.Head&&e&f.Tail?"Both":e&f.Head?"Head":e&f.Tail?"Tail":"")+ft();var e,r}function Kt(t){return ct("RibbonEmitter",t.Name)+_t(t)+Ct("HeightAbove",t.HeightAbove,null)+Ct("HeightBelow",t.HeightBelow,null)+Ct("Alpha",t.Alpha,null)+Ut("Color",t.Color,!0)+Ct("TextureSlot",t.TextureSlot,null)+Ct("Visibility",t.Visibility,1)+bt("EmissionRate",t.EmissionRate)+bt("LifeSpan",t.LifeSpan)+St("Gravity",t.Gravity,0)+bt("Rows",t.Rows)+bt("Columns",t.Columns)+bt("MaterialID",t.MaterialID)+ft()}function Wt(t){return ct("EventObject",t.Name)+_t(t)+function(t){for(var e="",r=0;r<t.length;++r)e+=ht(2)+t[r]+",\n";return ct("EventTrack",t.length,1)+e+ft(1)}(t.EventTrack)+ft()}function qt(t){return ct("Camera",t.Name)+Pt("FieldOfView",t.FieldOfView)+Pt("FarClip",t.FarClip)+Pt("NearClip",t.NearClip)+yt("Position",t.Position)+Ct("Translation",t.Translation)+Ct("Rotation",t.Rotation)+ct("Target",null,1)+yt("Position",t.TargetPosition,null,2)+Ct("Translation",t.TargetTranslation,null,2)+ft(1)+ft()}function Yt(t){var e="";return t.Shape===l.Box?(e=Ft("Box"),e+=ct("Vertices",2,1)+ht(2)+vt(t.Vertices.slice(0,3))+",\n"+ht(2)+vt(t.Vertices.slice(3,6))+",\n"+ft(1)):(e=Ft("Sphere"),e+=ct("Vertices",1,1)+ht(2)+vt(t.Vertices)+",\n"+ft(1)+Pt("BoundsRadius",t.BoundsRadius)),ct("CollisionShape",t.Name)+_t(t)+e+ft()}function zt(t){return ct("FaceFX",t.Name)+Lt("Path",t.Path)+ft()}function jt(t){var e=ct("Matrices",t.Matrices.length,1)+t.Matrices.map((function(t){return ht(2)+vt(t)+","})).join("\n")+"\n"+ft(1);return ct("BindPose")+e+ft()}function Zt(t){return ct("ParticleEmitterPopcorn",t.Name)+_t(t)+(t.Flags&m.Unshaded?Ft("Unshaded"):"")+(t.Flags&m.SortPrimsFarZ?Ft("SortPrimsFarZ"):"")+(t.Flags&m.Unfogged?Ft("Unfogged"):"")+Ct("LifeSpan",t.LifeSpan,null)+Ct("EmissionRate",t.EmissionRate,0)+Ct("Speed",t.Speed,0)+Ut("Color",t.Color,!0)+Ct("Alpha",t.Alpha,1)+St("ReplaceableId",t.ReplaceableId,0,null)+Lt("Path",t.Path,!1)+Lt("AnimVisibilityGuide",t.AnimVisibilityGuide,!1)+Ct("Visibility",t.Visibility)+ft()}var Qt,Jt,$t=[function(t){return ct("Version")+bt("FormatVersion",t.Version)+ft()},function(t){return ct("Model",t.Info.Name)+St("NumGeosets",t.Geosets.length)+St("NumGeosetAnims",t.GeosetAnims.length)+St("NumHelpers",t.Helpers.length)+St("NumBones",t.Bones.length)+(t.Lights.length?St("NumLights",t.Lights.length):"")+St("NumAttachments",t.Attachments.length)+St("NumEvents",t.EventObjects.length)+St("NumParticleEmitters",t.ParticleEmitters.length)+(t.ParticleEmitters2.length?St("NumParticleEmitters2",t.ParticleEmitters2.length):"")+(t.RibbonEmitters.length?St("NumRibbonEmitters",t.RibbonEmitters.length):"")+bt("BlendTime",t.Info.BlendTime)+yt("MinimumExtent",t.Info.MinimumExtent)+yt("MaximumExtent",t.Info.MaximumExtent)+Rt("BoundsRadius",t.Info.BoundsRadius)+ft()},function(t){return ct("Sequences",t.Sequences.length)+t.Sequences.map(Mt).join("")+ft()},function(t){return t.GlobalSequences&&t.GlobalSequences.length?ct("GlobalSequences",t.GlobalSequences.length)+t.GlobalSequences.map((function(t){return bt("Duration",t)})).join("")+ft():""},function(t){return t.Textures.length?ct("Textures",t.Textures.length)+t.Textures.map(Vt).join("")+ft():""},function(t){return t.Materials.length?ct("Materials",t.Materials.length)+t.Materials.map((function(r){return function(t,r){var a="";return t.Version>=900&&t.Version<1100&&r.Shader&&(a=Lt("Shader",r.Shader,!1,2)),ct("Material",null,1)+(r.RenderMode&n.ConstantColor?Ft("ConstantColor",2):"")+(r.RenderMode&n.SortPrimsFarZ?Ft("SortPrimsFarZ",2):"")+(r.RenderMode&n.FullResolution?Ft("FullResolution",2):"")+St("PriorityPlane",r.PriorityPlane,0,null,2)+St("RenderMode",r.RenderMode,0,null,2)+a+r.Layers.map((function(r){return function(t,r){var n="";return t.Version>=900&&(n+=void 0!==r.EmissiveGain?Ct("EmissiveGain",r.EmissiveGain,1,3):"",t.Version>=1e3&&(n+=void 0!==r.FresnelColor?Ut("FresnelColor",r.FresnelColor,!0,3):"",n+=void 0!==r.FresnelOpacity?Ct("FresnelOpacity",r.FresnelOpacity,0,3):"",n+=void 0!==r.FresnelTeamColor?Ct("FresnelTeamColor",r.FresnelTeamColor,0,3):"")),t.Version>=1100&&(n+=bt("ShaderTypeId",r.ShaderTypeId||0,null,3),E.slice(1).forEach((function(t){var e=r[t];void 0!==e&&(n+=Ct(t,e,null,3))}))),ct("Layer",null,2)+Et("FilterMode",function(t){switch(t){case e.None:return"None";case e.Transparent:return"Transparent";case e.Blend:return"Blend";case e.Additive:return"Additive";case e.AddAlpha:return"AddAlpha";case e.Modulate:return"Modulate";case e.Modulate2x:return"Modulate2x"}return""}(r.FilterMode),null,3)+(void 0!==r.Alpha?Ct("Alpha",r.Alpha,1,3):"")+(void 0!==r.TextureID?Ct("TextureID",r.TextureID,null,3):"")+(r.Shading&i.TwoSided?Ft("TwoSided",3):"")+(r.Shading&i.Unshaded?Ft("Unshaded",3):"")+(r.Shading&i.Unfogged?Ft("Unfogged",3):"")+(r.Shading&i.SphereEnvMap?Ft("SphereEnvMap",3):"")+(r.Shading&i.NoDepthTest?Ft("NoDepthTest",3):"")+(r.Shading&i.NoDepthSet?Ft("NoDepthSet",3):"")+St("CoordId",r.CoordId,0,null,3)+St("TVertexAnimId",r.TVertexAnimId,null,null,3)+n+ft(2)}(t,r)})).join("")+ft(1)}(t,r)})).join("")+ft():""},function(t){return t.TextureAnims.length?ct("TextureAnims",t.TextureAnims.length)+t.TextureAnims.map(Dt).join("")+ft():""},function(t){return t.Geosets.length?t.Geosets.map((function(e){return function(t,e){var r,i,n="";return t.Version>=900&&(n+=(void 0!==e.LevelOfDetail?bt("LevelOfDetail",e.LevelOfDetail):"")+(e.Name?Lt("Name",e.Name):"")+(e.Tangents?It("Tangents",e.Tangents,4):"")+(e.SkinWeights?It("SkinWeights",e.SkinWeights,8):"")),ct("Geoset")+It("Vertices",e.Vertices,3)+It("Normals",e.Normals,3)+It("TVertices",e.TVertices[0],2)+function(t){if(!t.length)return"";for(var e="",r=0;r<t.length;++r)e+=ht(2)+t[r]+",\n";return ct("VertexGroup",null,1)+e+ft(1)}(e.VertexGroup)+(i=e.Faces,ct("Faces 1 ".concat(i.length),null,1)+ct("Triangles",null,2)+ht(3)+Tt(i)+",\n"+ft(2)+ft(1))+function(t){for(var e=0,r="",i=0,n=t;i<n.length;i++){var a=n[i];e+=a.length,r+=ht(2)+"Matrices "+Tt(a)+",\n"}return ct("Groups ".concat(t.length," ").concat(e),null,1)+r+ft(1)}(e.Groups)+yt("MinimumExtent",e.MinimumExtent)+yt("MaximumExtent",e.MaximumExtent)+Rt("BoundsRadius",e.BoundsRadius)+((r=e.Anims)?r.map(Bt).join(""):"")+bt("MaterialID",e.MaterialID)+bt("SelectionGroup",e.SelectionGroup)+(e.Unselectable?Ft("Unselectable"):"")+n+ft()}(t,e)})).join(""):""},function(t){return t.GeosetAnims.length?t.GeosetAnims.map(wt).join(""):""},function(t){return t.Bones.length?t.Bones.map(Ot).join(""):""},function(t){return t.Lights.length?t.Lights.map(Nt).join(""):""},function(t){return t.Helpers.map(kt).join("")},function(t){return t.Attachments.map(Gt).join("")},function(t){return ct("PivotPoints",t.PivotPoints.length)+t.PivotPoints.map((function(t){return"".concat(ht()).concat(vt(t),",\n")})).join("")+ft()},function(t){return t.ParticleEmitters.map(Ht).join("")},function(t){return t.ParticleEmitters2.map(Xt).join("")},function(t){return t.RibbonEmitters.map(Kt).join("")},function(t){return t.EventObjects.map(Wt).join("")},function(t){return t.Cameras.map(qt).join("")},function(t){return t.CollisionShapes.map(Yt).join("")},function(t){return t.Version<900||!t.FaceFX?"":t.FaceFX.map(zt).join("")},function(t){return t.Version<900||!t.BindPoses?"":t.BindPoses.map(jt).join("")},function(t){return t.Version<900||!t.ParticleEmitterPopcorns?"":t.ParticleEmitterPopcorns.map(Zt).join("")}],te=!0,ee=-1,re=function(){function t(t){this.ab=t,this.uint=new