( function ( global , factory ) { typeof exports === 'object' && typeof module !== 'undefined' ? factory ( exports ) : typeof define === 'function' && define . amd ? define ( [ 'exports' ] , factory ) : ( ( global = global || self ) , factory ( ( global . glMatrix = { } ) ) ) ; } ) ( this , function ( exports ) { 'use strict' ; module var EPSILON = 0.000001 ; var ARRAY_TYPE = typeof Float32Array !== 'undefined' ? Float32Array : Array ; var RANDOM = Math . random ; param { Float32ArrayConstructor | ArrayConstructor } type function setMatrixArrayType ( type ) { ARRAY_TYPE = type ; } var degree = Math . PI / 180 ; param { Number } a function toRadian ( a ) { return a * degree ; } param { Number } a param { Number } b returns { Boolean } function equals ( a , b ) { return Math . abs ( a - b ) <= EPSILON * Math . max ( 1.0 , Math . abs ( a ) , Math . abs ( b ) ) ; } if ( ! Math . hypot ) Math . hypot = function ( ) { var y = 0 , i = arguments . length ; while ( i -- ) { y += arguments [ i ] * arguments [ i ] ; } return Math . sqrt ( y ) ; } ; var common = Object . freeze ( { __proto__ : null , EPSILON : EPSILON , get ARRAY_TYPE ( ) { return ARRAY_TYPE ; } , RANDOM : RANDOM , setMatrixArrayType : setMatrixArrayType , toRadian : toRadian , equals : equals , } ) ; module returns { mat2 } function create ( ) { var out = new ARRAY_TYPE ( 4 ) ; if ( ARRAY_TYPE != Float32Array ) { out [ 1 ] = 0 ; out [ 2 ] = 0 ; } out [ 0 ] = 1 ; out [ 3 ] = 1 ; return out ; } param { ReadonlyMat2 } a returns { mat2 } function clone ( a ) { var out = new ARRAY_TYPE ( 4 ) ; out [ 0 ] = a [ 0 ] ; out [ 1 ] = a [ 1 ] ; out [ 2 ] = a [ 2 ] ; out [ 3 ] = a [ 3 ] ; return out ; } param { mat2 } out param { ReadonlyMat2 } a returns { mat2 } function copy ( out , a ) { out [ 0 ] = a [ 0 ] ; out [ 1 ] = a [ 1 ] ; out [ 2 ] = a [ 2 ] ; out [ 3 ] = a [ 3 ] ; return out ; } param { mat2 } out returns { mat2 } function identity ( out ) { out [ 0 ] = 1 ; out [ 1 ] = 0 ; out [ 2 ] = 0 ; out [ 3 ] = 1 ; return out ; } param { Number } m00 param { Number } m01 param { Number } m10 param { Number } m11 returns { mat2 } function fromValues ( m00 , m01 , m10 , m11 ) { var out = new ARRAY_TYPE ( 4 ) ; out [ 0 ] = m00 ; out [ 1 ] = m01 ; out [ 2 ] = m10 ; out [ 3 ] = m11 ; return out ; } param { mat2 } out param { Number } m00 param { Number } m01 param { Number } m10 param { Number } m11 returns { mat2 } function set ( out , m00 , m01 , m10 , m11 ) { out [ 0 ] = m00 ; out [ 1 ] = m01 ; out [ 2 ] = m10 ; out [ 3 ] = m11 ; return out ; } param { mat2 } out param { ReadonlyMat2 } a returns { mat2 } function transpose ( out , a ) { if ( out === a ) { var a1 = a [ 1 ] ; out [ 1 ] = a [ 2 ] ; out [ 2 ] = a1 ; } else { out [ 0 ] = a [ 0 ] ; out [ 1 ] = a [ 2 ] ; out [ 2 ] = a [ 1 ] ; out [ 3 ] = a [ 3 ] ; } return out ; } param { mat2 } out param { ReadonlyMat2 } a returns { mat2 } function invert ( out , a ) { var a0 = a [ 0 ] , a1 = a [ 1 ] , a2 = a [ 2 ] , a3 = a [ 3 ] ; var det = a0 * a3 - a2 * a1 ; if ( ! det ) { return null ; } det = 1.0 / det ; out [ 0 ] = a3 * det ; out [ 1 ] = - a1 * det ; out [ 2 ] = - a2 * det ; out [ 3 ] = a0 * det ; return out ; } param { mat2 } out param { ReadonlyMat2 } a returns { mat2 } function adjoint ( out , a ) { var a0 = a [ 0 ] ; out [ 0 ] = a [ 3 ] ; out [ 1 ] = - a [ 1 ] ; out [ 2 ] = - a [ 2 ] ; out [ 3 ] = a0 ; return out ; } param { ReadonlyMat2 } a returns { Number } function determinant ( a ) { return a [ 0 ] * a [ 3 ] - a [ 2 ] * a [ 1 ] ; } param { mat2 } out param { ReadonlyMat2 } a param { ReadonlyMat2 } b returns { mat2 } function multiply ( out , a , b ) { var a0 = a [ 0 ] , a1 = a [ 1 ] , a2 = a [ 2 ] , a3 = a [ 3 ] ; var b0 = b [ 0 ] , b1 = b [ 1 ] , b2 = b [ 2 ] , b3 = b [ 3 ] ; out [ 0 ] = a0 * b0 + a2 * b1 ; out [ 1 ] = a1 * b0 + a3 * b1 ; out [ 2 ] = a0 * b2 + a2 * b3 ; out [ 3 ] = a1 * b2 + a3 * b3 ; return out ; } param { mat2 } out param { ReadonlyMat2 } a param { Number } rad returns { mat2 } function rotate ( out , a , rad ) { var a0 = a [ 0 ] , a1 = a [ 1 ] , a2 = a [ 2 ] , a3 = a [ 3 ] ; var s = Math . sin ( rad ) ; var c = Math . cos ( rad ) ; out [ 0 ] = a0 * c + a2 * s ; out [ 1 ] = a1 * c + a3 * s ; out [ 2 ] = a0 * - s + a2 * c ; out [ 3 ] = a1 * - s + a3 * c ; return out ; } param { mat2 } out param { ReadonlyMat2 } a param { ReadonlyVec2 } v returns { mat2 } function scale ( out , a , v ) { var a0 = a [ 0 ] , a1 = a [ 1 ] , a2 = a [ 2 ] , a3 = a [ 3 ] ; var v0 = v [ 0 ] , v1 = v [ 1 ] ; out [ 0 ] = a0 * v0 ; out [ 1 ] = a1 * v0 ; out [ 2 ] = a2 * v1 ; out [ 3 ] = a3 * v1 ; return out ; } param { mat2 } out param { Number } rad returns { mat2 } function fromRotation ( out , rad ) { var s = Math . sin ( rad ) ; var c = Math . cos ( rad ) ; out [ 0 ] = c ; out [ 1 ] = s ; out [ 2 ] = - s ; out [ 3 ] = c ; return out ; } param { mat2 } out param { ReadonlyVec2 } v returns { mat2 } function fromScaling ( out , v ) { out [ 0 ] = v [ 0 ] ; out [ 1 ] = 0 ; out [ 2 ] = 0 ; out [ 3 ] = v [ 1 ] ; return out ; } param { ReadonlyMat2 } a returns { String } function str ( a ) { return 'mat2(' + a [ 0 ] + ', ' + a [ 1 ] + ', ' + a [ 2 ] + ', ' + a [ 3 ] + ')' ; } param { ReadonlyMat2 } a returns { Number } function frob ( a ) { return Math . hypot ( a [ 0 ] , a [ 1 ] , a [ 2 ] , a [ 3 ] ) ; } param { ReadonlyMat2 } L param { ReadonlyMat2 } D param { ReadonlyMat2 } U param { ReadonlyMat2 } a function LDU ( L , D , U , a ) { L [ 2 ] = a [ 2 ] / a [ 0 ] ; U [ 0 ] = a [ 0 ] ; U [ 1 ] = a [ 1 ] ; U [ 3 ] = a [ 3 ] - L [ 2 ] * U [ 1 ] ; return [ L , D , U ] ; } param { mat2 } out param { ReadonlyMat2 } a param { ReadonlyMat2 } b returns { mat2 } function add ( out , a , b ) { out [ 0 ] = a [ 0 ] + b [ 0 ] ; out [ 1 ] = a [ 1 ] + b [ 1 ] ; out [ 2 ] = a [ 2 ] + b [ 2 ] ; out [ 3 ] = a [ 3 ] + b [ 3 ] ; return out ; } param { mat2 } out param { ReadonlyMat2 } a param { ReadonlyMat2 } b returns { mat2 } function subtract ( out , a , b ) { out [ 0 ] = a [ 0 ] - b [ 0 ] ; out [ 1 ] = a [ 1 ] - b [ 1 ] ; out [ 2 ] = a [ 2 ] - b [ 2 ] ; out [ 3 ] = a [ 3 ] - b [ 3 ] ; return out ; } param { ReadonlyMat2 } a param { ReadonlyMat2 } b returns { Boolean } function exactEquals ( a , b ) { return a [ 0 ] === b [ 0 ] && a [ 1 ] === b [ 1 ] && a [ 2 ] === b [ 2 ] && a [ 3 ] === b [ 3 ] ; } param { ReadonlyMat2 } a param { ReadonlyMat2 } b returns { Boolean } function equals$1 ( a , b ) { var a0 = a [ 0 ] , a1 = a [ 1 ] , a2 = a [ 2 ] , a3 = a [ 3 ] ; var b0 = b [ 0 ] , b1 = b [ 1 ] , b2 = b [ 2 ] , b3 = b [ 3 ] ; return ( Math . abs ( a0 - b0 ) <= EPSILON * Math . max ( 1.0 , Math . abs ( a0 ) , Math . abs ( b0 ) ) && Math . abs ( a1 - b1 ) <= EPSILON * Math . max ( 1.0 , Math . abs ( a1 ) , Math . abs ( b1 ) ) && Math . abs ( a2 - b2 ) <= EPSILON * Math . max ( 1.0 , Math . abs ( a2 ) , Math . abs ( b2 ) ) && Math . abs ( a3 - b3 ) <= EPSILON * Math . max ( 1.0 , Math . abs ( a3 ) , Math . abs ( b3 ) ) ) ; } param { mat2 } out param { ReadonlyMat2 } a param { Number } b returns { mat2 } function multiplyScalar ( out , a , b ) { out [ 0 ] = a [ 0 ] * b ; out [ 1 ] = a [ 1 ] * b ; out [ 2 ] = a [ 2 ] * b ; out [ 3 ] = a [ 3 ] * b ; return out ; } param { mat2 } out param { ReadonlyMat2 } a param { ReadonlyMat2 } b param { Number } scale returns { mat2 } function multiplyScalarAndAdd ( out , a , b , scale ) { out [ 0 ] = a [ 0 ] + b [ 0 ] * scale ; out [ 1 ] = a [ 1 ] + b [ 1 ] * scale ; out [ 2 ] = a [ 2 ] + b [ 2 ] * scale ; out [ 3 ] = a [ 3 ] + b [ 3 ] * scale ; return out ; } /**
     * Alias for  mat2 . multiply function var mul = multiply ; /**
     * Alias for  mat2 . subtract function var sub = subtract ; var mat2 = Object . freeze ( { __proto__ : null , create : create , clone : clone , copy : copy , identity : identity , fromValues : fromValues , set : set , transpose : transpose , invert : invert , adjoint : adjoint , determinant : determinant , multiply : multiply , rotate : rotate , scale : scale , fromRotation : fromRotation , fromScaling : fromScaling , str : str , frob : frob , LDU : LDU , add : add , subtract : subtract , exactEquals : exactEquals , equals : equals$1 , multiplyScalar : multiplyScalar , multiplyScalarAndAdd : multiplyScalarAndAdd , mul : mul , sub : sub , } ) ; module description returns { mat2d } function create$1 ( ) { var out = new ARRAY_TYPE ( 6 ) ; if ( ARRAY_TYPE != Float32Array ) { out [ 1 ] = 0 ; out [ 2 ] = 0 ; out [ 4 ] = 0 ; out [ 5 ] = 0 ; } out [ 0 ] = 1 ; out [ 3 ] = 1 ; return out ; } param { ReadonlyMat2d } a returns { mat2d } function clone$1 ( a ) { var out = new ARRAY_TYPE ( 6 ) ; out [ 0 ] = a [ 0 ] ; out [ 1 ] = a [ 1 ] ; out [ 2 ] = a [ 2 ] ; out [ 3 ] = a [ 3 ] ; out [ 4 ] = a [ 4 ] ; out [ 5 ] = a [ 5 ] ; return out ; } param { mat2d } out param { ReadonlyMat2d } a returns { mat2d } function copy$1 ( out , a ) { out [ 0 ] = a [ 0 ] ; out [ 1 ] = a [ 1 ] ; out [ 2 ] = a [ 2 ] ; out [ 3 ] = a [ 3 ] ; out [ 4 ] = a [ 4 ] ; out [ 5 ] = a [ 5 ] ; return out ; } param { mat2d } out returns { mat2d } function identity$1 ( out ) { out [ 0 ] = 1 ; out [ 1 ] = 0 ; out [ 2 ] = 0 ; out [ 3 ] = 1 ; out [ 4 ] = 0 ; out [ 5 ] = 0 ; return out ; } param { Number } a param { Number } b param { Number } c param { Number } d param { Number } tx param { Number } ty returns { mat2d } function fromValues$1 ( a , b , c , d , tx , ty ) { var out = new ARRAY_TYPE ( 6 ) ; out [ 0 ] = a ; out [ 1 ] = b ; out [ 2 ] = c ; out [ 3 ] = d ; out [ 4 ] = tx ; out [ 5 ] = ty ; return out ; } param { mat2d } out param { Number } a param { Number } b param { Number } c param { Number } d param { Number } tx param { Number } ty returns { mat2d } function set$1 ( out , a , b , c , d , tx , ty ) { out [ 0 ] = a ; out [ 1 ] = b ; out [ 2 ] = c ; out [ 3 ] = d ; out [ 4 ] = tx ; out [ 5 ] = ty ; return out ; } param { mat2d } out param { ReadonlyMat2d } a returns { mat2d } function invert$1 ( out , a ) { var aa = a [ 0 ] , ab = a [ 1 ] , ac = a [ 2 ] , ad = a [ 3 ] ; var atx = a [ 4 ] , aty = a [ 5 ] ; var det = aa * ad - ab * ac ; if ( ! det ) { return null ; } det = 1.0 / det ; out [ 0 ] = ad * det ; out [ 1 ] = - ab * det ; out [ 2 ] = - ac * det ; out [ 3 ] = aa * det ; out [ 4 ] = ( ac * aty - ad * atx ) * det ; out [ 5 ] = ( ab * atx - aa * aty ) * det ; return out ; } param { ReadonlyMat2d } a returns { Number } function determinant$1 ( a ) { return a [ 0 ] * a [ 3 ] - a [ 1 ] * a [ 2 ] ; } param { mat2d } out param { ReadonlyMat2d } a param { ReadonlyMat2d } b returns { mat2d } function multiply$1 ( out , a , b ) { var a0 = a [ 0 ] , a1 = a [ 1 ] , a2 = a [ 2 ] , a3 = a [ 3 ] , a4 = a [ 4 ] , a5 = a [ 5 ] ; var b0 = b [ 0 ] , b1 = b [ 1 ] , b2 = b [ 2 ] , b3 = b [ 3 ] , b4 = b [ 4 ] , b5 = b [ 5 ] ; out [ 0 ] = a0 * b0 + a2 * b1 ; out [ 1 ] = a1 * b0 + a3 * b1 ; out [ 2 ] = a0 * b2 + a2 * b3 ; out [ 3 ] = a1 * b2 + a3 * b3 ; out [ 4 ] = a0 * b4 + a2 * b5 + a4 ; out [ 5 ] = a1 * b4 + a3 * b5 + a5 ; return out ; } param { mat2d } out param { ReadonlyMat2d } a param { Number } rad returns { mat2d } function rotate$1 ( out , a , rad ) { var a0 = a [ 0 ] , a1 = a [ 1 ] , a2 = a [ 2 ] , a3 = a [ 3 ] , a4 = a [ 4 ] , a5 = a [ 5 ] ; var s = Math . sin ( rad ) ; var c = Math . cos ( rad ) ; out [ 0 ] = a0 * c + a2 * s ; out [ 1 ] = a1 * c + a3 * s ; out [ 2 ] = a0 * - s + a2 * c ; out [ 3 ] = a1 * - s + a3 * c ; out [ 4 ] = a4 ; out [ 5 ] = a5 ; return out ; } param { mat2d } out param { ReadonlyMat2d } a param { ReadonlyVec2 } v returns { mat2d } function scale$1 ( out , a , v ) { var a0 = a [ 0 ] , a1 = a [ 1 ] , a2 = a [ 2 ] , a3 = a [ 3 ] , a4 = a [ 4 ] , a5 = a [ 5 ] ; var v0 = v [ 0 ] , v1 = v [ 1 ] ; out [ 0 ] = a0 * v0 ; out [ 1 ] = a1 * v0 ; out [ 2 ] = a2 * v1 ; out [ 3 ] = a3 * v1 ; out [ 4 ] = a4 ; out [ 5 ] = a5 ; return out ; } param { mat2d } out param { ReadonlyMat2d } a param { ReadonlyVec2 } v returns { mat2d } function translate ( out , a , v ) { var a0 = a [ 0 ] , a1 = a [ 1 ] , a2 = a [ 2 ] , a3 = a [ 3 ] , a4 = a [ 4 ] , a5 = a [ 5 ] ; var v0 = v [ 0 ] , v1 = v [ 1 ] ; out [ 0 ] = a0 ; out [ 1 ] = a1 ; out [ 2 ] = a2 ; out [ 3 ] = a3 ; out [ 4 ] = a0 * v0 + a2 * v1 + a4 ; out [ 5 ] = a1 * v0 + a3 * v1 + a5 ; return out ; } param { mat2d } out param { Number } rad returns { mat2d } function fromRotation$1 ( out , rad ) { var s = Math . sin ( rad ) , c = Math . cos ( rad ) ; out [ 0 ] = c ; out [ 1 ] = s ; out [ 2 ] = - s ; out [ 3 ] = c ; out [ 4 ] = 0 ; out [ 5 ] = 0 ; return out ; } param { mat2d } out param { ReadonlyVec2 } v returns { mat2d } function fromScaling$1 ( out , v ) { out [ 0 ] = v [ 0 ] ; out [ 1 ] = 0 ; out [ 2 ] = 0 ; out [ 3 ] = v [ 1 ] ; out [ 4 ] = 0 ; out [ 5 ] = 0 ; return out ; } param { mat2d } out param { ReadonlyVec2 } v returns { mat2d } function fromTranslation ( out , v ) { out [ 0 ] = 1 ; out [ 1 ] = 0 ; out [ 2 ] = 0 ; out [ 3 ] = 1 ; out [ 4 ] = v [ 0 ] ; out [ 5 ] = v [ 1 ] ; return out ; } param { ReadonlyMat2d } a returns { String } function str$1 ( a ) { return 'mat2d(' + a [ 0 ] + ', ' + a [ 1 ] + ', ' + a [ 2 ] + ', ' + a [ 3 ] + ', ' + a [ 4 ] + ', ' + a [ 5 ] + ')' ; } param { ReadonlyMat2d } a returns { Number } function frob$1 ( a ) { return Math . hypot ( a [ 0 ] , a [ 1 ] , a [ 2 ] , a [ 3 ] , a [ 4 ] , a [ 5 ] , 1 ) ; } param { mat2d } out param { ReadonlyMat2d } a param { ReadonlyMat2d } b returns { mat2d } function add$1 ( out , a , b ) { out [ 0 ] = a [ 0 ] + b [ 0 ] ; out [ 1 ] = a [ 1 ] + b [ 1 ] ; out [ 2 ] = a [ 2 ] + b [ 2 ] ; out [ 3 ] = a [ 3 ] + b [ 3 ] ; out [ 4 ] = a [ 4 ] + b [ 4 ] ; out [ 5 ] = a [ 5 ] + b [ 5 ] ; return out ; } param { mat2d } out param { ReadonlyMat2d } a param { ReadonlyMat2d } b returns { mat2d } function subtract$1 ( out , a , b ) { out [ 0 ] = a [ 0 ] - b [ 0 ] ; out [ 1 ] = a [ 1 ] - b [ 1 ] ; out [ 2 ] = a [ 2 ] - b [ 2 ] ; out [ 3 ] = a [ 3 ] - b [ 3 ] ; out [ 4 ] = a [ 4 ] - b [ 4 ] ; out [ 5 ] = a [ 5 ] - b [ 5 ] ; return out ; } param { mat2d } out param { ReadonlyMat2d } a param { Number } b returns { mat2d } function multiplyScalar$1 ( out , a , b ) { out [ 0 ] = a [ 0 ] * b ; out [ 1 ] = a [ 1 ] * b ; out [ 2 ] = a [ 2 ] * b ; out [ 3 ] = a [ 3 ] * b ; out [ 4 ] = a [ 4 ] * b ; out [ 5 ] = a [ 5 ] * b ; return out ; } param { mat2d } out param { ReadonlyMat2d } a param { ReadonlyMat2d } b param { Number } scale returns { mat2d } function multiplyScalarAndAdd$1 ( out , a , b , scale ) { out [ 0 ] = a [ 0 ] + b [ 0 ] * scale ; out [ 1 ] = a [ 1 ] + b [ 1 ] * scale ; out [ 2 ] = a [ 2 ] + b [ 2 ] * scale ; out [ 3 ] = a [ 3 ] + b [ 3 ] * scale ; out [ 4 ] = a [ 4 ] + b [ 4 ] * scale ; out [ 5 ] = a [ 5 ] + b [ 5 ] * scale ; return out ; } param { ReadonlyMat2d } a param { ReadonlyMat2d } b returns { Boolean } function exactEquals$1 ( a , b ) { return a [ 0 ] === b [ 0 ] && a [ 1 ] === b [ 1 ] && a [ 2 ] === b [ 2 ] && a [ 3 ] === b [ 3 ] && a [ 4 ] === b [ 4 ] && a [ 5 ] === b [ 5 ] ; } param { ReadonlyMat2d } a param { ReadonlyMat2d } b returns { Boolean } function equals$2 ( a , b ) { var a0 = a [ 0 ] , a1 = a [ 1 ] , a2 = a [ 2 ] , a3 = a [ 3 ] , a4 = a [ 4 ] , a5 = a [ 5 ] ; var b0 = b [ 0 ] , b1 = b [ 1 ] , b2 = b [ 2 ] , b3 = b [ 3 ] , b4 = b [ 4 ] , b5 = b [ 5 ] ; return ( Math . abs ( a0 - b0 ) <= EPSILON * Math . max ( 1.0 , Math . abs ( a0 ) , Math . abs ( b0 ) ) && Math . abs ( a1 - b1 ) <= EPSILON * Math . max ( 1.0 , Math . abs ( a1 ) , Math . abs ( b1 ) ) && Math . abs ( a2 - b2 ) <= EPSILON * Math . max ( 1.0 , Math . abs ( a2 ) , Math . abs ( b2 ) ) && Math . abs ( a3 - b3 ) <= EPSILON * Math . max ( 1.0 , Math . abs ( a3 ) , Math . abs ( b3 ) ) && Math . abs ( a4 - b4 ) <= EPSILON * Math . max ( 1.0 , Math . abs ( a4 ) , Math . abs ( b4 ) ) && Math . abs ( a5 - b5 ) <= EPSILON * Math . max ( 1.0 , Math . abs ( a5 ) , Math . abs ( b5 ) ) ) ; } /**
     * Alias for  mat2d . multiply function var mul$1 = multiply$1 ; /**
     * Alias for  mat2d . subtract function var sub$1 = subtract$1 ; var mat2d = Object . freeze ( { __proto__ : null , create : create$1 , clone : clone$1 , copy : copy$1 , identity : identity$1 , fromValues : fromValues$1 , set : set$1 , invert : invert$1 , determinant : determinant$1 , multiply : multiply$1 , rotate : rotate$1 , scale : scale$1 , translate : translate , fromRotation : fromRotation$1 , fromScaling : fromScaling$1 , fromTranslation : fromTranslation , str : str$1 , frob : frob$1 , add : add$1 , subtract : subtract$1 , multiplyScalar : multiplyScalar$1 , multiplyScalarAndAdd : multiplyScalarAndAdd$1 , exactEquals : exactEquals$1 , equals : equals$2 , mul : mul$1 , sub : sub$1 , } ) ; module returns { mat3 } function create$2 ( ) { var out = new ARRAY_TYPE ( 9 ) ; if ( ARRAY_TYPE != Float32Array ) { out [ 1 ] = 0 ; out [ 2 ] = 0 ; out [ 3 ] = 0 ; out [ 5 ] = 0 ; out [ 6 ] = 0 ; out [ 7 ] = 0 ; } out [ 0 ] = 1 ; out [ 4 ] = 1 ; out [ 8 ] = 1 ; return out ; } param { mat3 } out param { ReadonlyMat4 } a returns { mat3 } function fromMat4 ( out , a ) { out [ 0 ] = a [ 0 ] ; out [ 1 ] = a [ 1 ] ; out [ 2 ] = a [ 2 ] ; out [ 3 ] = a [ 4 ] ; out [ 4 ] = a [ 5 ] ; out [ 5 ] = a [ 6 ] ; out [ 6 ] = a [ 8 ] ; out [ 7 ] = a [ 9 ] ; out [ 8 ] = a [ 10 ] ; return out ; } param { ReadonlyMat3 } a returns { mat3 } function clone$2 ( a ) { var out = new ARRAY_TYPE ( 9 ) ; out [ 0 ] = a [ 0 ] ; out [ 1 ] = a [ 1 ] ; out [ 2 ] = a [ 2 ] ; out [ 3 ] = a [ 3 ] ; out [ 4 ] = a [ 4 ] ; out [ 5 ] = a [ 5 ] ; out [ 6 ] = a [ 6 ] ; out [ 7 ] = a [ 7 ] ; out [ 8 ] = a [ 8 ] ; return out ; } param { mat3 } out param { ReadonlyMat3 } a returns { mat3 } function copy$2 ( out , a ) { out [ 0 ] = a [ 0 ] ; out [ 1 ] = a [ 1 ] ; out [ 2 ] = a [ 2 ] ; out [ 3 ] = a [ 3 ] ; out [ 4 ] = a [ 4 ] ; out [ 5 ] = a [ 5 ] ; out [ 6 ] = a [ 6 ] ; out [ 7 ] = a [ 7 ] ; out [ 8 ] = a [ 8 ] ; return out ; } param { Number } m00 param { Number } m01 param { Number } m02 param { Number } m10 param { Number } m11 param { Number } m12 param { Number } m20 param { Number } m21 param { Number } m22 returns { mat3 } function fromValues$2 ( m00 , m01 , m02 , m10 , m11 , m12 , m20 , m21 , m22 ) { var out = new ARRAY_TYPE ( 9 ) ; out [ 0 ] = m00 ; out [ 1 ] = m01 ; out [ 2 ] = m02 ; out [ 3 ] = m10 ; out [ 4 ] = m11 ; out [ 5 ] = m12 ; out [ 6 ] = m20 ; out [ 7 ] = m21 ; out [ 8 ] = m22 ; return out ; } param { mat3 } out param { Number } m00 param { Number } m01 param { Number } m02 param { Number } m10 param { Number } m11 param { Number } m12 param { Number } m20 param { Number } m21 param { Number } m22 returns { mat3 } function set$2 ( out , m00 , m01 , m02 , m10 , m11 , m12 , m20 , m21 , m22 ) { out [ 0 ] = m00 ; out [ 1 ] = m01 ; out [ 2 ] = m02 ; out [ 3 ] = m10 ; out [ 4 ] = m11 ; out [ 5 ] = m12 ; out [ 6 ] = m20 ; out [ 7 ] = m21 ; out [ 8 ] = m22 ; return out ; } param { mat3 } out returns { mat3 } function identity$2 ( out ) { out [ 0 ] = 1 ; out [ 1 ] = 0 ; out [ 2 ] = 0 ; out [ 3 ] = 0 ; out [ 4 ] = 1 ; out [ 5 ] = 0 ; out [ 6 ] = 0 ; out [ 7 ] = 0 ; out [ 8 ] = 1 ; return out ; } param { mat3 } out param { ReadonlyMat3 } a returns { mat3 } function transpose$1 ( out , a ) { if ( out === a ) { var a01 = a [ 1 ] , a02 = a [ 2 ] , a12 = a [ 5 ] ; out [ 1 ] = a [ 3 ] ; out [ 2 ] = a [ 6 ] ; out [ 3 ] = a01 ; out [ 5 ] = a [ 7 ] ; out [ 6 ] = a02 ; out [ 7 ] = a12 ; } else { out [ 0 ] = a [ 0 ] ; out [ 1 ] = a [ 3 ] ; out [ 2 ] = a [ 6 ] ; out [ 3 ] = a [ 1 ] ; out [ 4 ] = a [ 4 ] ; out [ 5 ] = a [ 7 ] ; out [ 6 ] = a [ 2 ] ; out [ 7 ] = a [ 5 ] ; out [ 8 ] = a [ 8 ] ; } return out ; } param { mat3 } out param { ReadonlyMat3 } a returns { mat3 } function invert$2 ( out , a ) { var a00 = a [ 0 ] , a01 = a [ 1 ] , a02 = a [ 2 ] ; var a10 = a [ 3 ] , a11 = a [ 4 ] , a12 = a [ 5 ] ; var a20 = a [ 6 ] , a21 = a [ 7 ] , a22 = a [ 8 ] ; var b01 = a22 * a11 - a12 * a21 ; var b11 = - a22 * a10 + a12 * a20 ; var b21 = a21 * a10 - a11 * a20 ; var det = a00 * b01 + a01 * b11 + a02 * b21 ; if ( ! det ) { return null ; } det = 1.0 / det ; out [ 0 ] = b01 * det ; out [ 1 ] = ( - a22 * a01 + a02 * a21 ) * det ; out [ 2 ] = ( a12 * a01 - a02 * a11 ) * det ; out [ 3 ] = b11 * det ; out [ 4 ] = ( a22 * a00 - a02 * a20 ) * det ; out [ 5 ] = ( - a12 * a00 + a02 * a10 ) * det ; out [ 6 ] = b21 * det ; out [ 7 ] = ( - a21 * a00 + a01 * a20 ) * det ; out [ 8 ] = ( a11 * a00 - a01 * a10 ) * det ; return out ; } param { mat3 } out param { ReadonlyMat3 } a returns { mat3 } function adjoint$1 ( out , a ) { var a00 = a [ 0 ] , a01 = a [ 1 ] , a02 = a [ 2 ] ; var a10 = a [ 3 ] , a11 = a [ 4 ] , a12 = a [ 5 ] ; var a20 = a [ 6 ] , a21 = a [ 7 ] , a22 = a [ 8 ] ; out [ 0 ] = a11 * a22 - a12 * a21 ; out [ 1 ] = a02 * a21 - a01 * a22 ; out [ 2 ] = a01 * a12 - a02 * a11 ; out [ 3 ] = a12 * a20 - a10 * a22 ; out [ 4 ] = a00 * a22 - a02 * a20 ; out [ 5 ] = a02 * a10 - a00 * a12 ; out [ 6 ] = a10 * a21 - a11 * a20 ; out [ 7 ] = a01 * a20 - a00 * a21 ; out [ 8 ] = a00 * a11 - a01 * a10 ; return out ; } param { ReadonlyMat3 } a returns { Number } function determinant$2 ( a ) { var a00 = a [ 0 ] , a01 = a [ 1 ] , a02 = a [ 2 ] ; var a10 = a [ 3 ] , a11 = a [ 4 ] , a12 = a [ 5 ] ; var a20 = a [ 6 ] , a21 = a [ 7 ] , a22 = a [ 8 ] ; return a00 * ( a22 * a11 - a12 * a21 ) + a01 * ( - a22 * a10 + a12 * a20 ) + a02 * ( a21 * a10 - a11 * a20 ) ; } param { mat3 } out param { ReadonlyMat3 } a param { ReadonlyMat3 } b returns { mat3 } function multiply$2 ( out , a , b ) { var a00 = a [ 0 ] , a01 = a [ 1 ] , a02 = a [ 2 ] ; var a10 = a [ 3 ] , a11 = a [ 4 ] , a12 = a [ 5 ] ; var a20 = a [ 6 ] , a21 = a [ 7 ] , a22 = a [ 8 ] ; var b00 = b [ 0 ] , b01 = b [ 1 ] , b02 = b [ 2 ] ; var b10 = b [ 3 ] , b11 = b [ 4 ] , b12 = b [ 5 ] ; var b20 = b [ 6 ] , b21 = b [ 7 ] , b22 = b [ 8 ] ; out [ 0 ] = b00 * a00 + b01 * a10 + b02 * a20 ; out [ 1 ] = b00 * a01 + b01 * a11 + b02 * a21 ; out [ 2 ] = b00 * a02 + b01 * a12 + b02 * a22 ; out [ 3 ] = b10 * a00 + b11 * a10 + b12 * a20 ; out [ 4 ] = b10 * a01 + b11 * a11 + b12 * a21 ; out [ 5 ] = b10 * a02 + b11 * a12 + b12 * a22 ; out [ 6 ] = b20 * a00 + b21 * a10 + b22 * a20 ; out [ 7 ] = b20 * a01 + b21 * a11 + b22 * a21 ; out [ 8 ] = b20 * a02 + b21 * a12 + b22 * a22 ; return out ; } param { mat3 } out param { ReadonlyMat3 } a param { ReadonlyVec2 } v returns { mat3 } function translate$1 ( out , a , v ) { var a00 = a [ 0 ] , a01 = a [ 1 ] , a02 = a [ 2 ] , a10 = a [ 3 ] , a11 = a [ 4 ] , a12 = a [ 5 ] , a20 = a [ 6 ] , a21 = a [ 7 ] , a22 = a [ 8 ] , x = v [ 0 ] , y = v [ 1 ] ; out [ 0 ] = a00 ; out [ 1 ] = a01 ; out [ 2 ] = a02 ; out [ 3 ] = a10 ; out [ 4 ] = a11 ; out [ 5 ] = a12 ; out [ 6 ] = x * a00 + y * a10 + a20 ; out [ 7 ] = x * a01 + y * a11 + a21 ; out [ 8 ] = x * a02 + y * a12 + a22 ; return out ; } param { mat3 } out param { ReadonlyMat3 } a param { Number } rad returns { mat3 } function rotate$2 ( out , a , rad ) { var a00 = a [ 0 ] , a01 = a [ 1 ] , a02 = a [ 2 ] , a10 = a [ 3 ] , a11 = a [ 4 ] , a12 = a [ 5 ] , a20 = a [ 6 ] , a21 = a [ 7 ] , a22 = a [ 8 ] , s = Math . sin ( rad ) , c = Math . cos ( rad ) ; out [ 0 ] = c * a00 + s * a10 ; out [ 1 ] = c * a01 + s * a11 ; out [ 2 ] = c * a02 + s * a12 ; out [ 3 ] = c * a10 - s * a00 ; out [ 4 ] = c * a11 - s * a01 ; out [ 5 ] = c * a12 - s * a02 ; out [ 6 ] = a20 ; out [ 7 ] = a21 ; out [ 8 ] = a22 ; return out ; } param { mat3 } out param { ReadonlyMat3 } a param { ReadonlyVec2 } v returns { mat3 } function scale$2 ( out , a , v ) { var x = v [ 0 ] , y = v [ 1 ] ; out [ 0 ] = x * a [ 0 ] ; out [ 1 ] = x * a [ 1 ] ; out [ 2 ] = x * a [ 2 ] ; out [ 3 ] = y * a [ 3 ] ; out [ 4 ] = y * a [ 4 ] ; out [ 5 ] = y * a [ 5 ] ; out [ 6 ] = a [ 6 ] ; out [ 7 ] = a [ 7 ] ; out [ 8 ] = a [ 8 ] ; return out ; } param { mat3 } out param { ReadonlyVec2 } v returns { mat3 } function fromTranslation$1 ( out , v ) { out [ 0 ] = 1 ; out [ 1 ] = 0 ; out [ 2 ] = 0 ; out [ 3 ] = 0 ; out [ 4 ] = 1 ; out [ 5 ] = 0 ; out [ 6 ] = v [ 0 ] ; out [ 7 ] = v [ 1 ] ; out [ 8 ] = 1 ; return out ; } param { mat3 } out param { Number } rad returns { mat3 } function fromRotation$2 ( out , rad ) { var s = Math . sin ( rad ) , c = Math . cos ( rad ) ; out [ 0 ] = c ; out [ 1 ] = s ; out [ 2 ] = 0 ; out [ 3 ] = - s ; out [ 4 ] = c ; out [ 5 ] = 0 ; out [ 6 ] = 0 ; out [ 7 ] = 0 ; out [ 8 ] = 1 ; return out ; } param { mat3 } out param { ReadonlyVec2 } v returns { mat3 } function fromScaling$2 ( out , v ) { out [ 0 ] = v [ 0 ] ; out [ 1 ] = 0 ; out [ 2 ] = 0 ; out [ 3 ] = 0 ; out [ 4 ] = v [ 1 ] ; out [ 5 ] = 0 ; out [ 6 ] = 0 ; out [ 7 ] = 0 ; out [ 8 ] = 1 ; return out ; } param { mat3 } out param { ReadonlyMat2d } a returns { mat3 } function fromMat2d ( out , a ) { out [ 0 ] = a [ 0 ] ; out [ 1 ] = a [ 1 ] ; out [ 2 ] = 0 ; out [ 3 ] = a [ 2 ] ; out [ 4 ] = a [ 3 ] ; out [ 5 ] = 0 ; out [ 6 ] = a [ 4 ] ; out [ 7 ] = a [ 5 ] ; out [ 8 ] = 1 ; return out ; } param { mat3 } out param { ReadonlyQuat } q returns { mat3 } function fromQuat ( out , q ) { var x = q [ 0 ] , y = q [ 1 ] , z = q [ 2 ] , w = q [ 3 ] ; var x2 = x + x ; var y2 = y + y ; var z2 = z + z ; var xx = x * x2 ; var yx = y * x2 ; var yy = y * y2 ; var zx = z * x2 ; var zy = z * y2 ; var zz = z * z2 ; var wx = w * x2 ; var wy = w * y2 ; var wz = w * z2 ; out [ 0 ] = 1 - yy - zz ; out [ 3 ] = yx - wz ; out [ 6 ] = zx + wy ; out [ 1 ] = yx + wz ; out [ 4 ] = 1 - xx - zz ; out [ 7 ] = zy - wx ; out [ 2 ] = zx - wy ; out [ 5 ] = zy + wx ; out [ 8 ] = 1 - xx - yy ; return out ; } param { mat3 } out param { ReadonlyMat4 } a returns { mat3 } function normalFromMat4 ( out , a ) { var a00 = a [ 0 ] , a01 = a [ 1 ] , a02 = a [ 2 ] , a03 = a [ 3 ] ; var a10 = a [ 4 ] , a11 = a [ 5 ] , a12 = a [ 6 ] , a13 = a [ 7 ] ; var a20 = a [ 8 ] , a21 = a [ 9 ] , a22 = a [ 10 ] , a23 = a [ 11 ] ; var a30 = a [ 12 ] , a31 = a [ 13 ] , a32 = a [ 14 ] , a33 = a [ 15 ] ; var b00 = a00 * a11 - a01 * a10 ; var b01 = a00 * a12 - a02 * a10 ; var b02 = a00 * a13 - a03 * a10 ; var b03 = a01 * a12 - a02 * a11 ; var b04 = a01 * a13 - a03 * a11 ; var b05 = a02 * a13 - a03 * a12 ; var b06 = a20 * a31 - a21 * a30 ; var b07 = a20 * a32 - a22 * a30 ; var b08 = a20 * a33 - a23 * a30 ; var b09 = a21 * a32 - a22 * a31 ; var b10 = a21 * a33 - a23 * a31 ; var b11 = a22 * a33 - a23 * a32 ; var det = b00 * b11 - b01 * b10 + b02 * b09 + b03 * b08 - b04 * b07 + b05 * b06 ; if ( ! det ) { return null ; } det = 1.0 / det ; out [ 0 ] = ( a11 * b11 - a12 * b10 + a13 * b09 ) * det ; out [ 1 ] = ( a12 * b08 - a10 * b11 - a13 * b07 ) * det ; out [ 2 ] = ( a10 * b10 - a11 * b08 + a13 * b06 ) * det ; out [ 3 ] = ( a02 * b10 - a01 * b11 - a03 * b09 ) * det ; out [ 4 ] = ( a00 * b11 - a02 * b08 + a03 * b07 ) * det ; out [ 5 ] = ( a01 * b08 - a00 * b10 - a03 * b06 ) * det ; out [ 6 ] = ( a31 * b05 - a32 * b04 + a33 * b03 ) * det ; out [ 7 ] = ( a32 * b02 - a30 * b05 - a33 * b01 ) * det ; out [ 8 ] = ( a30 * b04 - a31 * b02 + a33 * b00 ) * det ; return out ; } param { mat3 } out param { number } width param { number } height returns { mat3 } function projection ( out , width , height ) { out [ 0 ] = 2 / width ; out [ 1 ] = 0 ; out [ 2 ] = 0 ; out [ 3 ] = 0 ; out [ 4 ] = - 2 / height ; out [ 5 ] = 0 ; out [ 6 ] = - 1 ; out [ 7 ] = 1 ; out [ 8 ] = 1 ; return out ; } param { ReadonlyMat3 } a returns { String } function str$2 ( a ) { return 'mat3(' + a [ 0 ] + ', ' + a [ 1 ] + ', ' + a [ 2 ] + ', ' + a [ 3 ] + ', ' + a [ 4 ] + ', ' + a [ 5 ] + ', ' + a [ 6 ] + ', ' + a [ 7 ] + ', ' + a [ 8 ] + ')' ; } param { ReadonlyMat3 } a returns { Number } function frob$2 ( a ) { return Math . hypot ( a [ 0 ] , a [ 1 ] , a [ 2 ] , a [ 3 ] , a [ 4 ] , a [ 5 ] , a [ 6 ] , a [ 7 ] , a [ 8 ] ) ; } param { mat3 } out param { ReadonlyMat3 } a param { ReadonlyMat3 } b returns { mat3 } function add$2 ( out , a , b ) { out [ 0 ] = a [ 0 ] + b [ 0 ] ; out [ 1 ] = a [ 1 ] + b [ 1 ] ; out [ 2 ] = a [ 2 ] + b [ 2 ] ; out [ 3 ] = a [ 3 ] + b [ 3 ] ; out [ 4 ] = a [ 4 ] + b [ 4 ] ; out [ 5 ] = a [ 5 ] + b [ 5 ] ; out [ 6 ] = a [ 6 ] + b [ 6 ] ; out [ 7 ] = a [ 7 ] + b [ 7 ] ; out [ 8 ] = a [ 8 ] + b [ 8 ] ; return out ; } param { mat3 } out param { ReadonlyMat3 } a param { ReadonlyMat3 } b returns { mat3 } function subtract$2 ( out , a , b ) { out [ 0 ] = a [ 0 ] - b [ 0 ] ; out [ 1 ] = a [ 1 ] - b [ 1 ] ; out [ 2 ] = a [ 2 ] - b [ 2 ] ; out [ 3 ] = a [ 3 ] - b [ 3 ] ; out [ 4 ] = a [ 4 ] - b [ 4 ] ; out [ 5 ] = a [ 5 ] - b [ 5 ] ; out [ 6 ] = a [ 6 ] - b [ 6 ] ; out [ 7 ] = a [ 7 ] - b [ 7 ] ; out [ 8 ] = a [ 8 ] - b [ 8 ] ; return out ; } param { mat3 } out param { ReadonlyMat3 } a param { Number } b returns { mat3 } function multiplyScalar$2 ( out , a , b ) { out [ 0 ] = a [ 0 ] * b ; out [ 1 ] = a [ 1 ] * b ; out [ 2 ] = a [ 2 ] * b ; out [ 3 ] = a [ 3 ] * b ; out [ 4 ] = a [ 4 ] * b ; out [ 5 ] = a [ 5 ] * b ; out [ 6 ] = a [ 6 ] * b ; out [ 7 ] = a [ 7 ] * b ; out [ 8 ] = a [ 8 ] * b ; return out ; } param { mat3 } out param { ReadonlyMat3 } a param { ReadonlyMat3 } b param { Number } scale returns { mat3 } function multiplyScalarAndAdd$2 ( out , a , b , scale ) { out [ 0 ] = a [ 0 ] + b [ 0 ] * scale ; out [ 1 ] = a [ 1 ] + b [ 1 ] * scale ; out [ 2 ] = a [ 2 ] + b [ 2 ] * scale ; out [ 3 ] = a [ 3 ] + b [ 3 ] * scale ; out [ 4 ] = a [ 4 ] + b [ 4 ] * scale ; out [ 5 ] = a [ 5 ] + b [ 5 ] * scale ; out [ 6 ] = a [ 6 ] + b [ 6 ] * scale ; out [ 7 ] = a [ 7 ] + b [ 7 ] * scale ; out [ 8 ] = a [ 8 ] + b [ 8 ] * scale ; return out ; } param { ReadonlyMat3 } a param { ReadonlyMat3 } b returns { Boolean } function exactEquals$2 ( a , b ) { return a [ 0 ] === b [ 0 ] && a [ 1 ] === b [ 1 ] && a [ 2 ] === b [ 2 ] && a [ 3 ] === b [ 3 ] && a [ 4 ] === b [ 4 ] && a [ 5 ] === b [ 5 ] && a [ 6 ] === b [ 6 ] && a [ 7 ] === b [ 7 ] && a [ 8 ] === b [ 8 ] ; } param { ReadonlyMat3 } a param { ReadonlyMat3 } b returns { Boolean } function equals$3 ( a , b ) { var a0 = a [ 0 ] , a1 = a [ 1 ] , a2 = a [ 2 ] , a3 = a [ 3 ] , a4 = a [ 4 ] , a5 = a [ 5 ] , a6 = a [ 6 ] , a7 = a [ 7 ] , a8 = a [ 8 ] ; var b0 = b [ 0 ] , b1 = b [ 1 ] , b2 = b [ 2 ] , b3 = b [ 3 ] , b4 = b [ 4 ] , b5 = b [ 5 ] , b6 = b [ 6 ] , b7 = b [ 7 ] , b8 = b [ 8 ] ; return ( Math . abs ( a0 - b0 ) <= EPSILON * Math . max ( 1.0 , Math . abs ( a0 ) , Math . abs ( b0 ) ) && Math . abs ( a1 - b1 ) <= EPSILON * Math . max ( 1.0 , Math . abs ( a1 ) , Math . abs ( b1 ) ) && Math . abs ( a2 - b2 ) <= EPSILON * Math . max ( 1.0 , Math . abs ( a2 ) , Math . abs ( b2 ) ) && Math . abs ( a3 - b3 ) <= EPSILON * Math . max ( 1.0 , Math . abs ( a3 ) , Math . abs ( b3 ) ) && Math . abs ( a4 - b4 ) <= EPSILON * Math . max ( 1.0 , Math . abs ( a4 ) , Math . abs ( b4 ) ) && Math . abs ( a5 - b5 ) <= EPSILON * Math . max ( 1.0 , Math . abs ( a5 ) , Math . abs ( b5 ) ) && Math . abs ( a6 - b6 ) <= EPSILON * Math . max ( 1.0 , Math . abs ( a6 ) , Math . abs ( b6 ) ) && Math . abs ( a7 - b7 ) <= EPSILON * Math . max ( 1.0 , Math . abs ( a7 ) , Math . abs ( b7 ) ) && Math . abs ( a8 - b8 ) <= EPSILON * Math . max ( 1.0 , Math . abs ( a8 ) , Math . abs ( b8 ) ) ) ; } /**
     * Alias for  mat3 . multiply function var mul$2 = multiply$2 ; /**
     * Alias for  mat3 . subtract function var sub$2 = subtract$2 ; var mat3 = Object . freeze ( { __proto__ : null , create : create$2 , fromMat4 : fromMat4 , clone : clone$2 , copy : copy$2 , fromValues : fromValues$2 , set : set$2 , identity : identity$2 , transpose : transpose$1 , invert : invert$2 , adjoint : adjoint$1 , determinant : determinant$2 , multiply : multiply$2 , translate : translate$1 , rotate : rotate$2 , scale : scale$2 , fromTranslation : fromTranslation$1 , fromRotation : fromRotation$2 , fromScaling : fromScaling$2 , fromMat2d : fromMat2d , fromQuat : fromQuat , normalFromMat4 : normalFromMat4 , projection : projection , str : str$2 , frob : frob$2 , add : add$2 , subtract : subtract$2 , multiplyScalar : multiplyScalar$2 , multiplyScalarAndAdd : multiplyScalarAndAdd$2 , exactEquals : exactEquals$2 , equals : equals$3 , mul : mul$2 , sub : sub$2 , } ) ; module returns { mat4 } function create$3 ( ) { var out = new ARRAY_TYPE ( 16 ) ; if ( ARRAY_TYPE != Float32Array ) { out [ 1 ] = 0 ; out [ 2 ] = 0 ; out [ 3 ] = 0 ; out [ 4 ] = 0 ; out [ 6 ] = 0 ; out [ 7 ] = 0 ; out [ 8 ] = 0 ; out [ 9 ] = 0 ; out [ 11 ] = 0 ; out [ 12 ] = 0 ; out [ 13 ] = 0 ; out [ 14 ] = 0 ; } out [ 0 ] = 1 ; out [ 5 ] = 1 ; out [ 10 ] = 1 ; out [ 15 ] = 1 ; return out ; } param { ReadonlyMat4 } a returns { mat4 } function clone$3 ( a ) { var out = new ARRAY_TYPE ( 16 ) ; out [ 0 ] = a [ 0 ] ; out [ 1 ] = a [ 1 ] ; out [ 2 ] = a [ 2 ] ; out [ 3 ] = a [ 3 ] ; out [ 4 ] = a [ 4 ] ; out [ 5 ] = a [ 5 ] ; out [ 6 ] = a [ 6 ] ; out [ 7 ] = a [ 7 ] ; out [ 8 ] = a [ 8 ] ; out [ 9 ] = a [ 9 ] ; out [ 10 ] = a [ 10 ] ; out [ 11 ] = a [ 11 ] ; out [ 12 ] = a [ 12 ] ; out [ 13 ] = a [ 13 ] ; out [ 14 ] = a [ 14 ] ; out [ 15 ] = a [ 15 ] ; return out ; } param { mat4 } out param { ReadonlyMat4 } a returns { mat4 } function copy$3 ( out , a ) { out [ 0 ] = a [ 0 ] ; out [ 1 ] = a [ 1 ] ; out [ 2 ] = a [ 2 ] ; out [ 3 ] = a [ 3 ] ; out [ 4 ] = a [ 4 ] ; out [ 5 ] = a [ 5 ] ; out [ 6 ] = a [ 6 ] ; out [ 7 ] = a [ 7 ] ; out [ 8 ] = a [ 8 ] ; out [ 9 ] = a [ 9 ] ; out [ 10 ] = a [ 10 ] ; out [ 11 ] = a [ 11 ] ; out [ 12 ] = a [ 12 ] ; out [ 13 ] = a [ 13 ] ; out [ 14 ] = a [ 14 ] ; out [ 15 ] = a [ 15 ] ; return out ; } param { Number } m00 param { Number } m01 param { Number } m02 param { Number } m03 param { Number } m10 param { Number } m11 param { Number } m12 param { Number } m13 param { Number } m20 param { Number } m21 param { Number } m22 param { Number } m23 param { Number } m30 param { Number } m31 param { Number } m32 param { Number } m33 returns { mat4 } function fromValues$3 ( m00 , m01 , m02 , m03 , m10 , m11 , m12 , m13 , m20 , m21 , m22 , m23 , m30 , m31 , m32 , m33 ) { var out = new ARRAY_TYPE ( 16 ) ; out [ 0 ] = m00 ; out [ 1 ] = m01 ; out [ 2 ] = m02 ; out [ 3 ] = m03 ; out [ 4 ] = m10 ; out [ 5 ] = m11 ; out [ 6 ] = m12 ; out [ 7 ] = m13 ; out [ 8 ] = m20 ; out [ 9 ] = m21 ; out [ 10 ] = m22 ; out [ 11 ] = m23 ; out [ 12 ] = m30 ; out [ 13 ] = m31 ; out [ 14 ] = m32 ; out [ 15 ] = m33 ; return out ; } param { mat4 } out param { Number } m00 param { Number } m01 param { Number } m02 param { Number } m03 param { Number } m10 param { Number } m11 param { Number } m12 param { Number } m13 param { Number } m20 param { Number } m21 param { Number } m22 param { Number } m23 param { Number } m30 param { Number } m31 param { Number } m32 param { Number } m33 returns { mat4 } function set$3 ( out , m00 , m01 , m02 , m03 , m10 , m11 , m12 , m13 , m20 , m21 , m22 , m23 , m30 , m31 , m32 , m33 ) { out [ 0 ] = m00 ; out [ 1 ] = m01 ; out [ 2 ] = m02 ; out [ 3 ] = m03 ; out [ 4 ] = m10 ; out [ 5 ] = m11 ; out [ 6 ] = m12 ; out [ 7 ] = m13 ; out [ 8 ] = m20 ; out [ 9 ] = m21 ; out [ 10 ] = m22 ; out [ 11 ] = m23 ; out [ 12 ] = m30 ; out [ 13 ] = m31 ; out [ 14 ] = m32 ; out [ 15 ] = m33 ; return out ; } param { mat4 } out returns { mat4 } function identity$3 ( out ) { out [ 0 ] = 1 ; out [ 1 ] = 0 ; out [ 2 ] = 0 ; out [ 3 ] = 0 ; out [ 4 ] = 0 ; out [ 5 ] = 1 ; out [ 6 ] = 0 ; out [ 7 ] = 0 ; out [ 8 ] = 0 ; out [ 9 ] = 0 ; out [ 10 ] = 1 ; out [ 11 ] = 0 ; out [ 12 ] = 0 ; out [ 13 ] = 0 ; out [ 14 ] = 0 ; out [ 15 ] = 1 ; return out ; } param { mat4 } out param { ReadonlyMat4 } a returns { mat4 } function transpose$2 ( out , a ) { if ( out === a ) { var a01 = a [ 1 ] , a02 = a [ 2 ] , a03 = a [ 3 ] ; var a12 = a [ 6 ] , a13 = a [ 7 ] ; var a23 = a [ 11 ] ; out [ 1 ] = a [ 4 ] ; out [ 2 ] = a [ 8 ] ; out [ 3 ] = a [ 12 ] ; out [ 4 ] = a01 ; out [ 6 ] = a [ 9 ] ; out [ 7 ] = a [ 13 ] ; out [ 8 ] = a02 ; out [ 9 ] = a12 ; out [ 11 ] = a [ 14 ] ; out [ 12 ] = a03 ; out [ 13 ] = a13 ; out [ 14 ] = a23 ; } else { out [ 0 ] = a [ 0 ] ; out [ 1 ] = a [ 4 ] ; out [ 2 ] = a [ 8 ] ; out [ 3 ] = a [ 12 ] ; out [ 4 ] = a [ 1 ] ; out [ 5 ] = a [ 5 ] ; out [ 6 ] = a [ 9 ] ; out [ 7 ] = a [ 13 ] ; out [ 8 ] = a [ 2 ] ; out [ 9 ] = a [ 6 ] ; out [ 10 ] = a [ 10 ] ; out [ 11 ] = a [ 14 ] ; out [ 12 ] = a [ 3 ] ; out [ 13 ] = a [ 7 ] ; out [ 14 ] = a [ 11 ] ; out [ 15 ] = a [ 15 ] ; } return out ; } param { mat4 } out param { ReadonlyMat4 } a returns { mat4 } function invert$3 ( out , a ) { var a00 = a [ 0 ] , a01 = a [ 1 ] , a02 = a [ 2 ] , a03 = a [ 3 ] ; var a10 = a [ 4 ] , a11 = a [ 5 ] , a12 = a [ 6 ] , a13 = a [ 7 ] ; var a20 = a [ 8 ] , a21 = a [ 9 ] , a22 = a [ 10 ] , a23 = a [ 11 ] ; var a30 = a [ 12 ] , a31 = a [ 13 ] , a32 = a [ 14 ] , a33 = a [ 15 ] ; var b00 = a00 * a11 - a01 * a10 ; var b01 = a00 * a12 - a02 * a10 ; var b02 = a00 * a13 - a03 * a10 ; var b03 = a01 * a12 - a02 * a11 ; var b04 = a01 * a13 - a03 * a11 ; var b05 = a02 * a13 - a03 * a12 ; var b06 = a20 * a31 - a21 * a30 ; var b07 = a20 * a32 - a22 * a30 ; var b08 = a20 * a33 - a23 * a30 ; var b09 = a21 * a32 - a22 * a31 ; var b10 = a21 * a33 - a23 * a31 ; var b11 = a22 * a33 - a23 * a32 ; var det = b00 * b11 - b01 * b10 + b02 * b09 + b03 * b08 - b04 * b07 + b05 * b06 ; if ( ! det ) { return null ; } det = 1.0 / det ; out [ 0 ] = ( a11 * b11 - a12 * b10 + a13 * b09 ) * det ; out [ 1 ] = ( a02 * b10 - a01 * b11 - a03 * b09 ) * det ; out [ 2 ] = ( a31 * b05 - a32 * b04 + a33 * b03 ) * det ; out [ 3 ] = ( a22 * b04 - a21 * b05 - a23 * b03 ) * det ; out [ 4 ] = ( a12 * b08 - a10 * b11 - a13 * b07 ) * det ; out [ 5 ] = ( a00 * b11 - a02 * b08 + a03 * b07 ) * det ; out [ 6 ] = ( a32 * b02 - a30 * b05 - a33 * b01 ) * det ; out [ 7 ] = ( a20 * b05 - a22 * b02 + a23 * b01 ) * det ; out [ 8 ] = ( a10 * b10 - a11 * b08 + a13 * b06 ) * det ; out [ 9 ] = ( a01 * b08 - a00 * b10 - a03 * b06 ) * det ; out [ 10 ] = ( a30 * b04 - a31 * b02 + a33 * b00 ) * det ; out [ 11 ] = ( a21 * b02 - a20 * b04 - a23 * b00 ) * det ; out [ 12 ] = ( a11 * b07 - a10 * b09 - a12 * b06 ) * det ; out [ 13 ] = ( a00 * b09 - a01 * b07 + a02 * b06 ) * det ; out [ 14 ] = ( a31 * b01 - a30 * b03 - a32 * b00 ) * det ; out [ 15 ] = ( a20 * b03 - a21 * b01 + a22 * b00 ) * det ; return out ; } param { mat4 } out param { ReadonlyMat4 } a returns { mat4 } function adjoint$2 ( out , a ) { var a00 = a [ 0 ] , a01 = a [ 1 ] , a02 = a [ 2 ] , a03 = a [ 3 ] ; var a10 = a [ 4 ] , a11 = a [ 5 ] , a12 = a [ 6 ] , a13 = a [ 7 ] ; var a20 = a [ 8 ] , a21 = a [ 9 ] , a22 = a [ 10 ] , a23 = a [ 11 ] ; var a30 = a [ 12 ] , a31 = a [ 13 ] , a32 = a [ 14 ] , a33 = a [ 15 ] ; out [ 0 ] = a11 * ( a22 * a33 - a23 * a32 ) - a21 * ( a12 * a33 - a13 * a32 ) + a31 * ( a12 * a23 - a13 * a22 ) ; out [ 1 ] = - ( a01 * ( a22 * a33 - a23 * a32 ) - a21 * ( a02 * a33 - a03 * a32 ) + a31 * ( a02 * a23 - a03 * a22 ) ) ; out [ 2 ] = a01 * ( a12 * a33 - a13 * a32 ) - a11 * ( a02 * a33 - a03 * a32 ) + a31 * ( a02 * a13 - a03 * a12 ) ; out [ 3 ] = - ( a01 * ( a12 * a23 - a13 * a22 ) - a11 * ( a02 * a23 - a03 * a22 ) + a21 * ( a02 * a13 - a03 * a12 ) ) ; out [ 4 ] = - ( a10 * ( a22 * a33 - a23 * a32 ) - a20 * ( a12 * a33 - a13 * a32 ) + a30 * ( a12 * a23 - a13 * a22 ) ) ; out [ 5 ] = a00 * ( a22 * a33 - a23 * a32 ) - a20 * ( a02 * a33 - a03 * a32 ) + a30 * ( a02 * a23 - a03 * a22 ) ; out [ 6 ] = - ( a00 * ( a12 * a33 - a13 * a32 ) - a10 * ( a02 * a33 - a03 * a32 ) + a30 * ( a02 * a13 - a03 * a12 ) ) ; out [ 7 ] = a00 * ( a12 * a23 - a13 * a22 ) - a10 * ( a02 * a23 - a03 * a22 ) + a20 * ( a02 * a13 - a03 * a12 ) ; out [ 8 ] = a10 * ( a21 * a33 - a23 * a31 ) - a20 * ( a11 * a33 - a13 * a31 ) + a30 * ( a11 * a23 - a13 * a21 ) ; out [ 9 ] = - ( a00 * ( a21 * a33 - a23 * a31 ) - a20 * ( a01 * a33 - a03 * a31 ) + a30 * ( a01 * a23 - a03 * a21 ) ) ; out [ 10 ] = a00 * ( a11 * a33 - a13 * a31 ) - a10 * ( a01 * a33 - a03 * a31 ) + a30 * ( a01 * a13 - a03 * a11 ) ; out [ 11 ] = - ( a00 * ( a11 * a23 - a13 * a21 ) - a10 * ( a01 * a23 - a03 * a21 ) + a20 * ( a01 * a13 - a03 * a11 ) ) ; out [ 12 ] = - ( a10 * ( a21 * a32 - a22 * a31 ) - a20 * ( a11 * a32 - a12 * a31 ) + a30 * ( a11 * a22 - a12 * a21 ) ) ; out [ 13 ] = a00 * ( a21 * a32 - a22 * a31 ) - a20 * ( a01 * a32 - a02 * a31 ) + a30 * ( a01 * a22 - a02 * a21 ) ; out [ 14 ] = - ( a00 * ( a11 * a32 - a12 * a31 ) - a10 * ( a01 * a32 - a02 * a31 ) + a30 * ( a01 * a12 - a02 * a11 ) ) ; out [ 15 ] = a00 * ( a11 * a22 - a12 * a21 ) - a10 * ( a01 * a22 - a02 * a21 ) + a20 * ( a01 * a12 - a02 * a11 ) ; return out ; } param { ReadonlyMat4 } a returns { Number } function determinant$3 ( a ) { var a00 = a [ 0 ] , a01 = a [ 1 ] , a02 = a [ 2 ] , a03 = a [ 3 ] ; var a10 = a [ 4 ] , a11 = a [ 5 ] , a12 = a [ 6 ] , a13 = a [ 7 ] ; var a20 = a [ 8 ] , a21 = a [ 9 ] , a22 = a [ 10 ] , a23 = a [ 11 ] ; var a30 = a [ 12 ] , a31 = a [ 13 ] , a32 = a [ 14 ] , a33 = a [ 15 ] ; var b00 = a00 * a11 - a01 * a10 ; var b01 = a00 * a12 - a02 * a10 ; var b02 = a00 * a13 - a03 * a10 ; var b03 = a01 * a12 - a02 * a11 ; var b04 = a01 * a13 - a03 * a11 ; var b05 = a02 * a13 - a03 * a12 ; var b06 = a20 * a31 - a21 * a30 ; var b07 = a20 * a32 - a22 * a30 ; var b08 = a20 * a33 - a23 * a30 ; var b09 = a21 * a32 - a22 * a31 ; var b10 = a21 * a33 - a23 * a31 ; var b11 = a22 * a33 - a23 * a32 ; return b00 * b11 - b01 * b10 + b02 * b09 + b03 * b08 - b04 * b07 + b05 * b06 ; } param { mat4 } out param { ReadonlyMat4 } a param { ReadonlyMat4 } b returns { mat4 } function multiply$3 ( out , a , b ) { var a00 = a [ 0 ] , a01 = a [ 1 ] , a02 = a [ 2 ] , a03 = a [ 3 ] ; var a10 = a [ 4 ] , a11 = a [ 5 ] , a12 = a [ 6 ] , a13 = a [ 7 ] ; var a20 = a [ 8 ] , a21 = a [ 9 ] , a22 = a [ 10 ] , a23 = a [ 11 ] ; var a30 = a [ 12 ] , a31 = a [ 13 ] , a32 = a [ 14 ] , a33 = a [ 15 ] ; var b0 = b [ 0 ] , b1 = b [ 1 ] , b2 = b [ 2 ] , b3 = b [ 3 ] ; out [ 0 ] = b0 * a00 + b1 * a10 + b2 * a20 + b3 * a30 ; out [ 1 ] = b0 * a01 + b1 * a11 + b2 * a21 + b3 * a31 ; out [ 2 ] = b0 * a02 + b1 * a12 + b2 * a22 + b3 * a32 ; out [ 3 ] = b0 * a03 + b1 * a13 + b2 * a23 + b3 * a33 ; b0 = b [ 4 ] ; b1 = b [ 5 ] ; b2 = b [ 6 ] ; b3 = b [ 7 ] ; out [ 4 ] = b0 * a00 + b1 * a10 + b2 * a20 + b3 * a30 ; out [ 5 ] = b0 * a01 + b1 * a11 + b2 * a21 + b3 * a31 ; out [ 6 ] = b0 * a02 + b1 * a12 + b2 * a22 + b3 * a32 ; out [ 7 ] = b0 * a03 + b1 * a13 + b2 * a23 + b3 * a33 ; b0 = b [ 8 ] ; b1 = b [ 9 ] ; b2 = b [ 10 ] ; b3 = b [ 11 ] ; out [ 8 ] = b0 * a00 + b1 * a10 + b2 * a20 + b3 * a30 ; out [ 9 ] = b0 * a01 + b1 * a11 + b2 * a21 + b3 * a31 ; out [ 10 ] = b0 * a02 + b1 * a12 + b2 * a22 + b3 * a32 ; out [ 11 ] = b0 * a03 + b1 * a13 + b2 * a23 + b3 * a33 ; b0 = b [ 12 ] ; b1 = b [ 13 ] ; b2 = b [ 14 ] ; b3 = b [ 15 ] ; out [ 12 ] = b0 * a00 + b1 * a10 + b2 * a20 + b3 * a30 ; out [ 13 ] = b0 * a01 + b1 * a11 + b2 * a21 + b3 * a31 ; out [ 14 ] = b0 * a02 + b1 * a12 + b2 * a22 + b3 * a32 ; out [ 15 ] = b0 * a03 + b1 * a13 + b2 * a23 + b3 * a33 ; return out ; } param { mat4 } out param { ReadonlyMat4 } a param { ReadonlyVec3 } v returns { mat4 } function translate$2 ( out , a , v ) { var x = v [ 0 ] , y = v [ 1 ] , z = v [ 2 ] ; var a00 , a01 , a02 , a03 ; var a10 , a11 , a12 , a13 ; var a20 , a21 , a22 , a23 ; if ( a === out ) { out [ 12 ] = a [ 0 ] * x + a [ 4 ] * y + a [ 8 ] * z + a [ 12 ] ; out [ 13 ] = a [ 1 ] * x + a [ 5 ] * y + a [ 9 ] * z + a [ 13 ] ; out [ 14 ] = a [ 2 ] * x + a [ 6 ] * y + a [ 10 ] * z + a [ 14 ] ; out [ 15 ] = a [ 3 ] * x + a [ 7 ] * y + a [ 11 ] * z + a [ 15 ] ; } else { a00 = a [ 0 ] ; a01 = a [ 1 ] ; a02 = a [ 2 ] ; a03 = a [ 3 ] ; a10 = a [ 4 ] ; a11 = a [ 5 ] ; a12 = a [ 6 ] ; a13 = a [ 7 ] ; a20 = a [ 8 ] ; a21 = a [ 9 ] ; a22 = a [ 10 ] ; a23 = a [ 11 ] ; out [ 0 ] = a00 ; out [ 1 ] = a01 ; out [ 2 ] = a02 ; out [ 3 ] = a03 ; out [ 4 ] = a10 ; out [ 5 ] = a11 ; out [ 6 ] = a12 ; out [ 7 ] = a13 ; out [ 8 ] = a20 ; out [ 9 ] = a21 ; out [ 10 ] = a22 ; out [ 11 ] = a23 ; out [ 12 ] = a00 * x + a10 * y + a20 * z + a [ 12 ] ; out [ 13 ] = a01 * x + a11 * y + a21 * z + a [ 13 ] ; out [ 14 ] = a02 * x + a12 * y + a22 * z + a [ 14 ] ; out [ 15 ] = a03 * x + a13 * y + a23 * z + a [ 15 ] ; } return out ; } param { mat4 } out param { ReadonlyMat4 } a param { ReadonlyVec3 } v returns { mat4 } function scale$3 ( out , a , v ) { var x = v [ 0 ] , y = v [ 1 ] , z = v [ 2 ] ; out [ 0 ] = a [ 0 ] * x ; out [ 1 ] = a [ 1 ] * x ; out [ 2 ] = a [ 2 ] * x ; out [ 3 ] = a [ 3 ] * x ; out [ 4 ] = a [ 4 ] * y ; out [ 5 ] = a [ 5 ] * y ; out [ 6 ] = a [ 6 ] * y ; out [ 7 ] = a [ 7 ] * y ; out [ 8 ] = a [ 8 ] * z ; out [ 9 ] = a [ 9 ] * z ; out [ 10 ] = a [ 10 ] * z ; out [ 11 ] = a [ 11 ] * z ; out [ 12 ] = a [ 12 ] ; out [ 13 ] = a [ 13 ] ; out [ 14 ] = a [ 14 ] ; out [ 15 ] = a [ 15 ] ; return out ; } param { mat4 } out param { ReadonlyMat4 } a param { Number } rad param { ReadonlyVec3 } axis returns { mat4 } function rotate$3 ( out , a , rad , axis ) { var x = axis [ 0 ] , y = axis [ 1 ] , z = axis [ 2 ] ; var len = Math . hypot ( x , y , z ) ; var s , c , t ; var a00 , a01 , a02 , a03 ; var a10 , a11 , a12 , a13 ; var a20 , a21 , a22 , a23 ; var b00 , b01 , b02 ; var b10 , b11 , b12 ; var b20 , b21 , b22 ; if ( len < EPSILON ) { return null ; } len = 1 / len ; x *= len ; y *= len ; z *= len ; s = Math . sin ( rad ) ; c = Math . cos ( rad ) ; t = 1 - c ; a00 = a [ 0 ] ; a01 = a [ 1 ] ; a02 = a [ 2 ] ; a03 = a [ 3 ] ; a10 = a [ 4 ] ; a11 = a [ 5 ] ; a12 = a [ 6 ] ; a13 = a [ 7 ] ; a20 = a [ 8 ] ; a21 = a [ 9 ] ; a22 = a [ 10 ] ; a23 = a [ 11 ] ; b00 = x * x * t + c ; b01 = y * x * t + z * s ; b02 = z * x * t - y * s ; b10 = x * y * t - z * s ; b11 = y * y * t + c ; b12 = z * y * t + x * s ; b20 = x * z * t + y * s ; b21 = y * z * t - x * s ; b22 = z * z * t + c ; out [ 0 ] = a00 * b00 + a10 * b01 + a20 * b02 ; out [ 1 ] = a01 * b00 + a11 * b01 + a21 * b02 ; out [ 2 ] = a02 * b00 + a12 * b01 + a22 * b02 ; out [ 3 ] = a03 * b00 + a13 * b01 + a23 * b02 ; out [ 4 ] = a00 * b10 + a10 * b11 + a20 * b12 ; out [ 5 ] = a01 * b10 + a11 * b11 + a21 * b12 ; out [ 6 ] = a02 * b10 + a12 * b11 + a22 * b12 ; out [ 7 ] = a03 * b10 + a13 * b11 + a23 * b12 ; out [ 8 ] = a00 * b20 + a10 * b21 + a20 * b22 ; out [ 9 ] = a01 * b20 + a11 * b21 + a21 * b22 ; out [ 10 ] = a02 * b20 + a12 * b21 + a22 * b22 ; out [ 11 ] = a03 * b20 + a13 * b21 + a23 * b22 ; if ( a !== out ) { out [ 12 ] = a [ 12 ] ; out [ 13 ] = a [ 13 ] ; out [ 14 ] = a [ 14 ] ; out [ 15 ] = a [ 15 ] ; } return out ; } param { mat4 } out param { ReadonlyMat4 } a param { Number } rad returns { mat4 } function rotateX ( out , a , rad ) { var s = Math . sin ( rad ) ; var c = Math . cos ( rad ) ; var a10 = a [ 4 ] ; var a11 = a [ 5 ] ; var a12 = a [ 6 ] ; var a13 = a [ 7 ] ; var a20 = a [ 8 ] ; var a21 = a [ 9 ] ; var a22 = a [ 10 ] ; var a23 = a [ 11 ] ; if ( a !== out ) { out [ 0 ] = a [ 0 ] ; out [ 1 ] = a [ 1 ] ; out [ 2 ] = a [ 2 ] ; out [ 3 ] = a [ 3 ] ; out [ 12 ] = a [ 12 ] ; out [ 13 ] = a [ 13 ] ; out [ 14 ] = a [ 14 ] ; out [ 15 ] = a [ 15 ] ; } out [ 4 ] = a10 * c + a20 * s ; out [ 5 ] = a11 * c + a21 * s ; out [ 6 ] = a12 * c + a22 * s ; out [ 7 ] = a13 * c + a23 * s ; out [ 8 ] = a20 * c - a10 * s ; out [ 9 ] = a21 * c - a11 * s ; out [ 10 ] = a22 * c - a12 * s ; out [ 11 ] = a23 * c - a13 * s ; return out ; } param { mat4 } out param { ReadonlyMat4 } a param { Number } rad returns { mat4 } function rotateY ( out , a , rad ) { var s = Math . sin ( rad ) ; var c = Math . cos ( rad ) ; var a00 = a [ 0 ] ; var a01 = a [ 1 ] ; var a02 = a [ 2 ] ; var a03 = a [ 3 ] ; var a20 = a [ 8 ] ; var a21 = a [ 9 ] ; var a22 = a [ 10 ] ; var a23 = a [ 11 ] ; if ( a !== out ) { out [ 4 ] = a [ 4 ] ; out [ 5 ] = a [ 5 ] ; out [ 6 ] = a [ 6 ] ; out [ 7 ] = a [ 7 ] ; out [ 12 ] = a [ 12 ] ; out [ 13 ] = a [ 13 ] ; out [ 14 ] = a [ 14 ] ; out [ 15 ] = a [ 15 ] ; } out [ 0 ] = a00 * c - a20 * s ; out [ 1 ] = a01 * c - a21 * s ; out [ 2 ] = a02 * c - a22 * s ; out [ 3 ] = a03 * c - a23 * s ; out [ 8 ] = a00 * s + a20 * c ; out [ 9 ] = a01 * s + a21 * c ; out [ 10 ] = a02 * s + a22 * c ; out [ 11 ] = a03 * s + a23 * c ; return out ; } param { mat4 } out param { ReadonlyMat4 } a param { Number } rad returns { mat4 } function rotateZ ( out , a , rad ) { var s = Math . sin ( rad ) ; var c = Math . cos ( rad ) ; var a00 = a [ 0 ] ; var a01 = a [ 1 ] ; var a02 = a [ 2 ] ; var a03 = a [ 3 ] ; var a10 = a [ 4 ] ; var a11 = a [ 5 ] ; var a12 = a [ 6 ] ; var a13 = a [ 7 ] ; if ( a !== out ) { out [ 8 ] = a [ 8 ] ; out [ 9 ] = a [ 9 ] ; out [ 10 ] = a [ 10 ] ; out [ 11 ] = a [ 11 ] ; out [ 12 ] = a [ 12 ] ; out [ 13 ] = a [ 13 ] ; out [ 14 ] = a [ 14 ] ; out [ 15 ] = a [ 15 ] ; } out [ 0 ] = a00 * c + a10 * s ; out [ 1 ] = a01 * c + a11 * s ; out [ 2 ] = a02 * c + a12 * s ; out [ 3 ] = a03 * c + a13 * s ; out [ 4 ] = a10 * c - a00 * s ; out [ 5 ] = a11 * c - a01 * s ; out [ 6 ] = a12 * c - a02 * s ; out [ 7 ] = a13 * c - a03 * s ; return out ; } param { mat4 } out param { ReadonlyVec3 } v returns { mat4 } function fromTranslation$2 ( out , v ) { out [ 0 ] = 1 ; out [ 1 ] = 0 ; out [ 2 ] = 0 ; out [ 3 ] = 0 ; out [ 4 ] = 0 ; out [ 5 ] = 1 ; out [ 6 ] = 0 ; out [ 7 ] = 0 ; out [ 8 ] = 0 ; out [ 9 ] = 0 ; out [ 10 ] = 1 ; out [ 11 ] = 0 ; out [ 12 ] = v [ 0 ] ; out [ 13 ] = v [ 1 ] ; out [ 14 ] = v [ 2 ] ; out [ 15 ] = 1 ; return out ; } param { mat4 } out param { ReadonlyVec3 } v returns { mat4 } function fromScaling$3 ( out , v ) { out [ 0 ] = v [ 0 ] ; out [ 1 ] = 0 ; out [ 2 ] = 0 ; out [ 3 ] = 0 ; out [ 4 ] = 0 ; out [ 5 ] = v [ 1 ] ; out [ 6 ] = 0 ; out [ 7 ] = 0 ; out [ 8 ] = 0 ; out [ 9 ] = 0 ; out [ 10 ] = v [ 2 ] ; out [ 11 ] = 0 ; out [ 12 ] = 0 ; out [ 13 ] = 0 ; out [ 14 ] = 0 ; out [ 15 ] = 1 ; return out ; } param { mat4 } out param { Number } rad param { ReadonlyVec3 } axis returns { mat4 } function fromRotation$3 ( out , rad , axis ) { var x = axis [ 0 ] , y = axis [ 1 ] , z = axis [ 2 ] ; var len = Math . hypot ( x , y , z ) ; var s , c , t ; if ( len < EPSILON ) { return null ; } len = 1 / len ; x *= len ; y *= len ; z *= len ; s = Math . sin ( rad ) ; c = Math . cos ( rad ) ; t = 1 - c ; out [ 0 ] = x * x * t + c ; out [ 1 ] = y * x * t + z * s ; out [ 2 ] = z * x * t - y * s ; out [ 3 ] = 0 ; out [ 4 ] = x * y * t - z * s ; out [ 5 ] = y * y * t + c ; out [ 6 ] = z * y * t + x * s ; out [ 7 ] = 0 ; out [ 8 ] = x * z * t + y * s ; out [ 9 ] = y * z * t - x * s ; out [ 10 ] = z * z * t + c ; out [ 11 ] = 0 ; out [ 12 ] = 0 ; out [ 13 ] = 0 ; out [ 14 ] = 0 ; out [ 15 ] = 1 ; return out ; } param { mat4 } out param { Number } rad returns { mat4 } function fromXRotation ( out , rad ) { var s = Math . sin ( rad ) ; var c = Math . cos ( rad ) ; out [ 0 ] = 1 ; out [ 1 ] = 0 ; out [ 2 ] = 0 ; out [ 3 ] = 0 ; out [ 4 ] = 0 ; out [ 5 ] = c ; out [ 6 ] = s ; out [ 7 ] = 0 ; out [ 8 ] = 0 ; out [ 9 ] = - s ; out [ 10 ] = c ; out [ 11 ] = 0 ; out [ 12 ] = 0 ; out [ 13 ] = 0 ; out [ 14 ] = 0 ; out [ 15 ] = 1 ; return out ; } param { mat4 } out param { Number } rad returns { mat4 } function fromYRotation ( out , rad ) { var s = Math . sin ( rad ) ; var c = Math . cos ( rad ) ; out [ 0 ] = c ; out [ 1 ] = 0 ; out [ 2 ] = - s ; out [ 3 ] = 0 ; out [ 4 ] = 0 ; out [ 5 ] = 1 ; out [ 6 ] = 0 ; out [ 7 ] = 0 ; out [ 8 ] = s ; out [ 9 ] = 0 ; out [ 10 ] = c ; out [ 11 ] = 0 ; out [ 12 ] = 0 ; out [ 13 ] = 0 ; out [ 14 ] = 0 ; out [ 15 ] = 1 ; return out ; } param { mat4 } out param { Number } rad returns { mat4 } function fromZRotation ( out , rad ) { var s = Math . sin ( rad ) ; var c = Math . cos ( rad ) ; out [ 0 ] = c ; out [ 1 ] = s ; out [ 2 ] = 0 ; out [ 3 ] = 0 ; out [ 4 ] = - s ; out [ 5 ] = c ; out [ 6 ] = 0 ; out [ 7 ] = 0 ; out [ 8 ] = 0 ; out [ 9 ] = 0 ; out [ 10 ] = 1 ; out [ 11 ] = 0 ; out [ 12 ] = 0 ; out [ 13 ] = 0 ; out [ 14 ] = 0 ; out [ 15 ] = 1 ; return out ; } param { mat4 } out param { quat4 } q param { ReadonlyVec3 } v returns { mat4 } function fromRotationTranslation ( out , q , v ) { var x = q [ 0 ] , y = q [ 1 ] , z = q [ 2 ] , w = q [ 3 ] ; var x2 = x + x ; var y2 = y + y ; var z2 = z + z ; var xx = x * x2 ; var xy = x * y2 ; var xz = x * z2 ; var yy = y * y2 ; var yz = y * z2 ; var zz = z * z2 ; var wx = w * x2 ; var wy = w * y2 ; var wz = w * z2 ; out [ 0 ] = 1 - ( yy + zz ) ; out [ 1 ] = xy + wz ; out [ 2 ] = xz - wy ; out [ 3 ] = 0 ; out [ 4 ] = xy - wz ; out [ 5 ] = 1 - ( xx + zz ) ; out [ 6 ] = yz + wx ; out [ 7 ] = 0 ; out [ 8 ] = xz + wy ; out [ 9 ] = yz - wx ; out [ 10 ] = 1 - ( xx + yy ) ; out [ 11 ] = 0 ; out [ 12 ] = v [ 0 ] ; out [ 13 ] = v [ 1 ] ; out [ 14 ] = v [ 2 ] ; out [ 15 ] = 1 ; return out ; } param { mat4 } out param { ReadonlyQuat2 } a returns { mat4 } function fromQuat2 ( out , a ) { var translation = new ARRAY_TYPE ( 3 ) ; var bx = - a [ 0 ] , by = - a [ 1 ] , bz = - a [ 2 ] , bw = a [ 3 ] , ax = a [ 4 ] , ay = a [ 5 ] , az = a [ 6 ] , aw = a [ 7 ] ; var magnitude = bx * bx + by * by + bz * bz + bw * bw ; if ( magnitude > 0 ) { translation [ 0 ] = ( ( ax * bw + aw * bx + ay * bz - az * by ) * 2 ) / magnitude ; translation [ 1 ] = ( ( ay * bw + aw * by + az * bx - ax * bz ) * 2 ) / magnitude ; translation [ 2 ] = ( ( az * bw + aw * bz + ax * by - ay * bx ) * 2 ) / magnitude ; } else { translation [ 0 ] = ( ax * bw + aw * bx + ay * bz - az * by ) * 2 ; translation [ 1 ] = ( ay * bw + aw * by + az * bx - ax * bz ) * 2 ; translation [ 2 ] = ( az * bw + aw * bz + ax * by - ay * bx ) * 2 ; } fromRotationTranslation ( out , a , translation ) ; return out ; } param { vec3 } out param { ReadonlyMat4 } mat return { vec3 } function getTranslation ( out , mat ) { out [ 0 ] = mat [ 12 ] ; out [ 1 ] = mat [ 13 ] ; out [ 2 ] = mat [ 14 ] ; return out ; } param { vec3 } out param { ReadonlyMat4 } mat return { vec3 } function getScaling ( out , mat ) { var m11 = mat [ 0 ] ; var m12 = mat [ 1 ] ; var m13 = mat [ 2 ] ; var m21 = mat [ 4 ] ; var m22 = mat [ 5 ] ; var m23 = mat [ 6 ] ; var m31 = mat [ 8 ] ; var m32 = mat [ 9 ] ; var m33 = mat [ 10 ] ; out [ 0 ] = Math . hypot ( m11 , m12 , m13 ) ; out [ 1 ] = Math . hypot ( m21 , m22 , m23 ) ; out [ 2 ] = Math . hypot ( m31 , m32 , m33 ) ; return out ; } param { quat } out param { ReadonlyMat4 } mat return { quat } function getRotation ( out , mat ) { var scaling = new ARRAY_TYPE ( 3 ) ; getScaling ( scaling , mat ) ; var is1 = 1 / scaling [ 0 ] ; var is2 = 1 / scaling [ 1 ] ; var is3 = 1 / scaling [ 2 ] ; var sm11 = mat [ 0 ] * is1 ; var sm12 = mat [ 1 ] * is2 ; var sm13 = mat [ 2 ] * is3 ; var sm21 = mat [ 4 ] * is1 ; var sm22 = mat [ 5 ] * is2 ; var sm23 = mat [ 6 ] * is3 ; var sm31 = mat [ 8 ] * is1 ; var sm32 = mat [ 9 ] * is2 ; var sm33 = mat [ 10 ] * is3 ; var trace = sm11 + sm22 + sm33 ; var S = 0 ; if ( trace > 0 ) { S = Math . sqrt ( trace + 1.0 ) * 2 ; out [ 3 ] = 0.25 * S ; out [ 0 ] = ( sm23 - sm32 ) / S ; out [ 1 ] = ( sm31 - sm13 ) / S ; out [ 2 ] = ( sm12 - sm21 ) / S ; } else if ( sm11 > sm22 && sm11 > sm33 ) { S = Math . sqrt ( 1.0 + sm11 - sm22 - sm33 ) * 2 ; out [ 3 ] = ( sm23 - sm32 ) / S ; out [ 0 ] = 0.25 * S ; out [ 1 ] = ( sm12 + sm21 ) / S ; out [ 2 ] = ( sm31 + sm13 ) / S ; } else if ( sm22 > sm33 ) { S = Math . sqrt ( 1.0 + sm22 - sm11 - sm33 ) * 2 ; out [ 3 ] = ( sm31 - sm13 ) / S ; out [ 0 ] = ( sm12 + sm21 ) / S ; out [ 1 ] = 0.25 * S ; out [ 2 ] = ( sm23 + sm32 ) / S ; } else { S = Math . sqrt ( 1.0 + sm33 - sm11 - sm22 ) * 2 ; out [ 3 ] = ( sm12 - sm21 ) / S ; out [ 0 ] = ( sm31 + sm13 ) / S ; out [ 1 ] = ( sm23 + sm32 ) / S ; out [ 2 ] = 0.25 * S ; } return out ; } param { mat4 } out param { quat4 } q param { ReadonlyVec3 } v param { ReadonlyVec3 } s returns { mat4 } function fromRotationTranslationScale ( out , q , v , s ) { var x = q [ 0 ] , y = q [ 1 ] , z = q [ 2 ] , w = q [ 3 ] ; var x2 = x + x ; var y2 = y + y ; var z2 = z + z ; var xx = x * x2 ; var xy = x * y2 ; var xz = x * z2 ; var yy = y * y2 ; var yz = y * z2 ; var zz = z * z2 ; var wx = w * x2 ; var wy = w * y2 ; var wz = w * z2 ; var sx = s [ 0 ] ; var sy = s [ 1 ] ; var sz = s [ 2 ] ; out [ 0 ] = ( 1 - ( yy + zz ) ) * sx ; out [ 1 ] = ( xy + wz ) * sx ; out [ 2 ] = ( xz - wy ) * sx ; out [ 3 ] = 0 ; out [ 4 ] = ( xy - wz ) * sy ; out [ 5 ] = ( 1 - ( xx + zz ) ) * sy ; out [ 6 ] = ( yz + wx ) * sy ; out [ 7 ] = 0 ; out [ 8 ] = ( xz + wy ) * sz ; out [ 9 ] = ( yz - wx ) * sz ; out [ 10 ] = ( 1 - ( xx + yy ) ) * sz ; out [ 11 ] = 0 ; out [ 12 ] = v [ 0 ] ; out [ 13 ] = v [ 1 ] ; out [ 14 ] = v [ 2 ] ; out [ 15 ] = 1 ; return out ; } param { mat4 } out param { quat4 } q param { ReadonlyVec3 } v param { ReadonlyVec3 } s param { ReadonlyVec3 } o returns { mat4 } function fromRotationTranslationScaleOrigin ( out , q , v , s , o ) { var x = q [ 0 ] , y = q [ 1 ] , z = q [ 2 ] , w = q [ 3 ] ; var x2 = x + x ; var y2 = y + y ; var z2 = z + z ; var xx = x * x2 ; var xy = x * y2 ; var xz = x * z2 ; var yy = y * y2 ; var yz = y * z2 ; var zz = z * z2 ; var wx = w * x2 ; var wy = w * y2 ; var wz = w * z2 ; var sx = s [ 0 ] ; var sy = s [ 1 ] ; var sz = s [ 2 ] ; var ox = o [ 0 ] ; var oy = o [ 1 ] ; var oz = o [ 2 ] ; var out0 = ( 1 - ( yy + zz ) ) * sx ; var out1 = ( xy + wz ) * sx ; var out2 = ( xz - wy ) * sx ; var out4 = ( xy - wz ) * sy ; var out5 = ( 1 - ( xx + zz ) ) * sy ; var out6 = ( yz + wx ) * sy ; var out8 = ( xz + wy ) * sz ; var out9 = ( yz - wx ) * sz ; var out10 = ( 1 - ( xx + yy ) ) * sz ; out [ 0 ] = out0 ; out [ 1 ] = out1 ; out [ 2 ] = out2 ; out [ 3 ] = 0 ; out [ 4 ] = out4 ; out [ 5 ] = out5 ; out [ 6 ] = out6 ; out [ 7 ] = 0 ; out [ 8 ] = out8 ; out [ 9 ] = out9 ; out [ 10 ] = out10 ; out [ 11 ] = 0 ; out [ 12 ] = v [ 0 ] + ox - ( out0 * ox + out4 * oy + out8 * oz ) ; out [ 13 ] = v [ 1 ] + oy - ( out1 * ox + out5 * oy + out9 * oz ) ; out [ 14 ] = v [ 2 ] + oz - ( out2 * ox + out6 * oy + out10 * oz ) ; out [ 15 ] = 1 ; return out ; } param { mat4 } out param { ReadonlyQuat } q returns { mat4 } function fromQuat$1 ( out , q ) { var x = q [ 0 ] , y = q [ 1 ] , z = q [ 2 ] , w = q [ 3 ] ; var x2 = x + x ; var y2 = y + y ; var z2 = z + z ; var xx = x * x2 ; var yx = y * x2 ; var yy = y * y2 ; var zx = z * x2 ; var zy = z * y2 ; var zz = z * z2 ; var wx = w * x2 ; var wy = w * y2 ; var wz = w * z2 ; out [ 0 ] = 1 - yy - zz ; out [ 1 ] = yx + wz ; out [ 2 ] = zx - wy ; out [ 3 ] = 0 ; out [ 4 ] = yx - wz ; out [ 5 ] = 1 - xx - zz ; out [ 6 ] = zy + wx ; out [ 7 ] = 0 ; out [ 8 ] = zx + wy ; out [ 9 ] = zy - wx ; out [ 10 ] = 1 - xx - yy ; out [ 11 ] = 0 ; out [ 12 ] = 0 ; out [ 13 ] = 0 ; out [ 14 ] = 0 ; out [ 15 ] = 1 ; return out ; } param { mat4 } out param { Number } left param { Number } right param { Number } bottom param { Number } top param { Number } near param { Number } far returns { mat4 } function frustum ( out , left , right , bottom , top , near , far ) { var rl = 1 / ( right - left ) ; var tb = 1 / ( top - bottom ) ; var nf = 1 / ( near - far ) ; out [ 0 ] = near * 2 * rl ; out [ 1 ] = 0 ; out [ 2 ] = 0 ; out [ 3 ] = 0 ; out [ 4 ] = 0 ; out [ 5 ] = near * 2 * tb ; out [ 6 ] = 0 ; out [ 7 ] = 0 ; out [ 8 ] = ( right + left ) * rl ; out [ 9 ] = ( top + bottom ) * tb ; out [ 10 ] = ( far + near ) * nf ; out [ 11 ] = - 1 ; out [ 12 ] = 0 ; out [ 13 ] = 0 ; out [ 14 ] = far * near * 2 * nf ; out [ 15 ] = 0 ; return out ; } param { mat4 } out param { number } fovy param { number } aspect param { number } near param { number } far returns { mat4 } function perspective ( out , fovy , aspect , near , far ) { var f = 1.0 / Math . tan ( fovy / 2 ) , nf ; out [ 0 ] = f / aspect ; out [ 1 ] = 0 ; out [ 2 ] = 0 ; out [ 3 ] = 0 ; out [ 4 ] = 0 ; out [ 5 ] = f ; out [ 6 ] = 0 ; out [ 7 ] = 0 ; out [ 8 ] = 0 ; out [ 9 ] = 0 ; out [ 11 ] = - 1 ; out [ 12 ] = 0 ; out [ 13 ] = 0 ; out [ 15 ] = 0 ; if ( far != null && far !== Infinity ) { nf = 1 / ( near - far ) ; out [ 10 ] = ( far + near ) * nf ; out [ 14 ] = 2 * far * near * nf ; } else { out [ 10 ] = - 1 ; out [ 14 ] = - 2 * near ; } return out ; } param { mat4 } out param { Object } fov param { number } near param { number } far returns { mat4 } function perspectiveFromFieldOfView ( out , fov , near , far ) { var upTan = Math . tan ( ( fov . upDegrees * Math . PI ) / 180.0 ) ; var downTan = Math . tan ( ( fov . downDegrees * Math . PI ) / 180.0 ) ; var leftTan = Math . tan ( ( fov . leftDegrees * Math . PI ) / 180.0 ) ; var rightTan = Math . tan ( ( fov . rightDegrees * Math . PI ) / 180.0 ) ; var xScale = 2.0 / ( leftTan + rightTan ) ; var yScale = 2.0 / ( upTan + downTan ) ; out [ 0 ] = xScale ; out [ 1 ] = 0.0 ; out [ 2 ] = 0.0 ; out [ 3 ] = 0.0 ; out [ 4 ] = 0.0 ; out [ 5 ] = yScale ; out [ 6 ] = 0.0 ; out [ 7 ] = 0.0 ; out [ 8 ] = - ( ( leftTan - rightTan ) * xScale * 0.5 ) ; out [ 9 ] = ( upTan - downTan ) * yScale * 0.5 ; out [ 10 ] = far / ( near - far ) ; out [ 11 ] = - 1.0 ; out [ 12 ] = 0.0 ; out [ 13 ] = 0.0 ; out [ 14 ] = ( far * near ) / ( near - far ) ; out [ 15 ] = 0.0 ; return out ; } param { mat4 } out param { number } left param { number } right param { number } bottom param { number } top param { number } near param { number } far returns { mat4 } function ortho ( out , left , right , bottom , top , near , far ) { var lr = 1 / ( left - right ) ; var bt = 1 / ( bottom - top ) ; var nf = 1 / ( near - far ) ; out [ 0 ] = - 2 * lr ; out [ 1 ] = 0 ; out [ 2 ] = 0 ; out [ 3 ] = 0 ; out [ 4 ] = 0 ; out [ 5 ] = - 2 * bt ; out [ 6 ] = 0 ; out [ 7 ] = 0 ; out [ 8 ] = 0 ; out [ 9 ] = 0 ; out [ 10 ] = 2 * nf ; out [ 11 ] = 0 ; out [ 12 ] = ( left + right ) * lr ; out [ 13 ] = ( top + bottom ) * bt ; out [ 14 ] = ( far + near ) * nf ; out [ 15 ] = 1 ; return out ; } param { mat4 } out param { ReadonlyVec3 } eye param { ReadonlyVec3 } center param { ReadonlyVec3 } up returns { mat4 } function lookAt ( out , eye , center , up ) { var x0 , x1 , x2 , y0 , y1 , y2 , z0 , z1 , z2 , len ; var eyex = eye [ 0 ] ; var eyey = eye [ 1 ] ; var eyez = eye [ 2 ] ; var upx = up [ 0 ] ; var upy = up [ 1 ] ; var upz = up [ 2 ] ; var centerx = center [ 0 ] ; var centery = center [ 1 ] ; var centerz = center [ 2 ] ; if ( Math . abs ( eyex - centerx ) < EPSILON && Math . abs ( eyey - centery ) < EPSILON && Math . abs ( eyez - centerz ) < EPSILON ) { return identity$3 ( out ) ; } z0 = eyex - centerx ; z1 = eyey - centery ; z2 = eyez - centerz ; len = 1 / Math . hypot ( z0 , z1 , z2 ) ; z0 *= len ; z1 *= len ; z2 *= len ; x0 = upy * z2 - upz * z1 ; x1 = upz * z0 - upx * z2 ; x2 = upx * z1 - upy * z0 ; len = Math . hypot ( x0 , x1 , x2 ) ; if ( ! len ) { x0 = 0 ; x1 = 0 ; x2 = 0 ; } else { len = 1 / len ; x0 *= len ; x1 *= len ; x2 *= len ; } y0 = z1 * x2 - z2 * x1 ; y1 = z2 * x0 - z0 * x2 ; y2 = z0 * x1 - z1 * x0 ; len = Math . hypot ( y0 , y1 , y2 ) ; if ( ! len ) { y0 = 0 ; y1 = 0 ; y2 = 0 ; } else { len = 1 / len ; y0 *= len ; y1 *= len ; y2 *= len ; } out [ 0 ] = x0 ; out [ 1 ] = y0 ; out [ 2 ] = z0 ; out [ 3 ] = 0 ; out [ 4 ] = x1 ; out [ 5 ] = y1 ; out [ 6 ] = z1 ; out [ 7 ] = 0 ; out [ 8 ] = x2 ; out [ 9 ] = y2 ; out [ 10 ] = z2 ; out [ 11 ] = 0 ; out [ 12 ] = - ( x0 * eyex + x1 * eyey + x2 * eyez ) ; out [ 13 ] = - ( y0 * eyex + y1 * eyey + y2 * eyez ) ; out [ 14 ] = - ( z0 * eyex + z1 * eyey + z2 * eyez ) ; out [ 15 ] = 1 ; return out ; } param { mat4 } out param { ReadonlyVec3 } eye param { ReadonlyVec3 } center param { ReadonlyVec3 } up returns { mat4 } function targetTo ( out , eye , target , up ) { var eyex = eye [ 0 ] , eyey = eye [ 1 ] , eyez = eye [ 2 ] , upx = up [ 0 ] , upy = up [ 1 ] , upz = up [ 2 ] ; var z0 = eyex - target [ 0 ] , z1 = eyey - target [ 1 ] , z2 = eyez - target [ 2 ] ; var len = z0 * z0 + z1 * z1 + z2 * z2 ; if ( len > 0 ) { len = 1 / Math . sqrt ( len ) ; z0 *= len ; z1 *= len ; z2 *= len ; } var x0 = upy * z2 - upz * z1 , x1 = upz * z0 - upx * z2 , x2 = upx * z1 - upy * z0 ; len = x0 * x0 + x1 * x1 + x2 * x2 ; if ( len > 0 ) { len = 1 / Math . sqrt ( len ) ; x0 *= len ; x1 *= len ; x2 *= len ; } out [ 0 ] = x0 ; out [ 1 ] = x1 ; out [ 2 ] = x2 ; out [ 3 ] = 0 ; out [ 4 ] = z1 * x2 - z2 * x1 ; out [ 5 ] = z2 * x0 - z0 * x2 ; out [ 6 ] = z0 * x1 - z1 * x0 ; out [ 7 ] = 0 ; out [ 8 ] = z0 ; out [ 9 ] = z1 ; out [ 10 ] = z2 ; out [ 11 ] = 0 ; out [ 12 ] = eyex ; out [ 13 ] = eyey ; out [ 14 ] = eyez ; out [ 15 ] = 1 ; return out ; } param { ReadonlyMat4 } a returns { String } function str$3 ( a ) { return ( 'mat4(' + a [ 0 ] + ', ' + a [ 1 ] + ', ' + a [ 2 ] + ', ' + a [ 3 ] + ', ' + a [ 4 ] + ', ' + a [ 5 ] + ', ' + a [ 6 ] + ', ' + a [ 7 ] + ', ' + a [ 8 ] + ', ' + a [ 9 ] + ', ' + a [ 10 ] + ', ' + a [ 11 ] + ', ' + a [ 12 ] + ', ' + a [ 13 ] + ', ' + a [ 14 ] + ', ' + a [ 15 ] + ')' ) ; } param { ReadonlyMat4 } a returns { Number } function frob$3 ( a ) { return Math . hypot ( a [ 0 ] , a [ 1 ] , a [ 2 ] , a [ 3 ] , a [ 4 ] , a [ 5 ] , a [ 6 ] , a [ 7 ] , a [ 8 ] , a [ 9 ] , a [ 10 ] , a [ 11 ] , a [ 12 ] , a [ 13 ] , a [ 14 ] , a [ 15 ] ) ; } param { mat4 } out param { ReadonlyMat4 } a param { ReadonlyMat4 } b returns { mat4 } function add$3 ( out , a , b ) { out [ 0 ] = a [ 0 ] + b [ 0 ] ; out [ 1 ] = a [ 1 ] + b [ 1 ] ; out [ 2 ] = a [ 2 ] + b [ 2 ] ; out [ 3 ] = a [ 3 ] + b [ 3 ] ; out [ 4 ] = a [ 4 ] + b [ 4 ] ; out [ 5 ] = a [ 5 ] + b [ 5 ] ; out [ 6 ] = a [ 6 ] + b [ 6 ] ; out [ 7 ] = a [ 7 ] + b [ 7 ] ; out [ 8 ] = a [ 8 ] + b [ 8 ] ; out [ 9 ] = a [ 9 ] + b [ 9 ] ; out [ 10 ] = a [ 10 ] + b [ 10 ] ; out [ 11 ] = a [ 11 ] + b [ 11 ] ; out [ 12 ] = a [ 12 ] + b [ 12 ] ; out [ 13 ] = a [ 13 ] + b [ 13 ] ; out [ 14 ] = a [ 14 ] + b [ 14 ] ; out [ 15 ] = a [ 15 ] + b [ 15 ] ; return out ; } param { mat4 } out param { ReadonlyMat4 } a param { ReadonlyMat4 } b returns { mat4 } function subtract$3 ( out , a , b ) { out [ 0 ] = a [ 0 ] - b [ 0 ] ; out [ 1 ] = a [ 1 ] - b [ 1 ] ; out [ 2 ] = a [ 2 ] - b [ 2 ] ; out [ 3 ] = a [ 3 ] - b [ 3 ] ; out [ 4 ] = a [ 4 ] - b [ 4 ] ; out [ 5 ] = a [ 5 ] - b [ 5 ] ; out [ 6 ] = a [ 6 ] - b [ 6 ] ; out [ 7 ] = a [ 7 ] - b [ 7 ] ; out [ 8 ] = a [ 8 ] - b [ 8 ] ; out [ 9 ] = a [ 9 ] - b [ 9 ] ; out [ 10 ] = a [ 10 ] - b [ 10 ] ; out [ 11 ] = a [ 11 ] - b [ 11 ] ; out [ 12 ] = a [ 12 ] - b [ 12 ] ; out [ 13 ] = a [ 13 ] - b [ 13 ] ; out [ 14 ] = a [ 14 ] - b [ 14 ] ; out [ 15 ] = a [ 15 ] - b [ 15 ] ; return out ; } param { mat4 } out param { ReadonlyMat4 } a param { Number } b returns { mat4 } function multiplyScalar$3 ( out , a , b ) { out [ 0 ] = a [ 0 ] * b ; out [ 1 ] = a [ 1 ] * b ; out [ 2 ] = a [ 2 ] * b ; out [ 3 ] = a [ 3 ] * b ; out [ 4 ] = a [ 4 ] * b ; out [ 5 ] = a [ 5 ] * b ; out [ 6 ] = a [ 6 ] * b ; out [ 7 ] = a [ 7 ] * b ; out [ 8 ] = a [ 8 ] * b ; out [ 9 ] = a [ 9 ] * b ; out [ 10 ] = a [ 10 ] * b ; out [ 11 ] = a [ 11 ] * b ; out [ 12 ] = a [ 12 ] * b ; out [ 13 ] = a [ 13 ] * b ; out [ 14 ] = a [ 14 ] * b ; out [ 15 ] = a [ 15 ] * b ; return out ; } param { mat4 } out param { ReadonlyMat4 } a param { ReadonlyMat4 } b param { Number } scale returns { mat4 } function multiplyScalarAndAdd$3 ( out , a , b , scale ) { out [ 0 ] = a [ 0 ] + b [ 0 ] * scale ; out [ 1 ] = a [ 1 ] + b [ 1 ] * scale ; out [ 2 ] = a [ 2 ] + b [ 2 ] * scale ; out [ 3 ] = a [ 3 ] + b [ 3 ] * scale ; out [ 4 ] = a [ 4 ] + b [ 4 ] * scale ; out [ 5 ] = a [ 5 ] + b [ 5 ] * scale ; out [ 6 ] = a [ 6 ] + b [ 6 ] * scale ; out [ 7 ] = a [ 7 ] + b [ 7 ] * scale ; out [ 8 ] = a [ 8 ] + b [ 8 ] * scale ; out [ 9 ] = a [ 9 ] + b [ 9 ] * scale ; out [ 10 ] = a [ 10 ] + b [ 10 ] * scale ; out [ 11 ] = a [ 11 ] + b [ 11 ] * scale ; out [ 12 ] = a [ 12 ] + b [ 12 ] * scale ; out [ 13 ] = a [ 13 ] + b [ 13 ] * scale ; out [ 14 ] = a [ 14 ] + b [ 14 ] * scale ; out [ 15 ] = a [ 15 ] + b [ 15 ] * scale ; return out ; } param { ReadonlyMat4 } a param { ReadonlyMat4 } b returns { Boolean } function exactEquals$3 ( a , b ) { return ( a [ 0 ] === b [ 0 ] && a [ 1 ] === b [ 1 ] && a [ 2 ] === b [ 2 ] && a [ 3 ] === b [ 3 ] && a [ 4 ] === b [ 4 ] && a [ 5 ] === b [ 5 ] && a [ 6 ] === b [ 6 ] && a [ 7 ] === b [ 7 ] && a [ 8 ] === b [ 8 ] && a [ 9 ] === b [ 9 ] && a [ 10 ] === b [ 10 ] && a [ 11 ] === b [ 11 ] && a [ 12 ] === b [ 12 ] && a [ 13 ] === b [ 13 ] && a [ 14 ] === b [ 14 ] && a [ 15 ] === b [ 15 ] ) ; } param { ReadonlyMat4 } a param { ReadonlyMat4 } b returns { Boolean } function equals$4 ( a , b ) { var a0 = a [ 0 ] , a1 = a [ 1 ] , a2 = a [ 2 ] , a3 = a [ 3 ] ; var a4 = a [ 4 ] , a5 = a [ 5 ] , a6 = a [ 6 ] , a7 = a [ 7 ] ; var a8 = a [ 8 ] , a9 = a [ 9 ] , a10 = a [ 10 ] , a11 = a [ 11 ] ; var a12 = a [ 12 ] , a13 = a [ 13 ] , a14 = a [ 14 ] , a15 = a [ 15 ] ; var b0 = b [ 0 ] , b1 = b [ 1 ] , b2 = b [ 2 ] , b3 = b [ 3 ] ; var b4 = b [ 4 ] , b5 = b [ 5 ] , b6 = b [ 6 ] , b7 = b [ 7 ] ; var b8 = b [ 8 ] , b9 = b [ 9 ] , b10 = b [ 10 ] , b11 = b [ 11 ] ; var b12 = b [ 12 ] , b13 = b [ 13 ] , b14 = b [ 14 ] , b15 = b [ 15 ] ; return ( Math . abs ( a0 - b0 ) <= EPSILON * Math . max ( 1.0 , Math . abs ( a0 ) , Math . abs ( b0 ) ) && Math . abs ( a1 - b1 ) <= EPSILON * Math . max ( 1.0 , Math . abs ( a1 ) , Math . abs ( b1 ) ) && Math . abs ( a2 - b2 ) <= EPSILON * Math . max ( 1.0 , Math . abs ( a2 ) , Math . abs ( b2 ) ) && Math . abs ( a3 - b3 ) <= EPSILON * Math . max ( 1.0 , Math . abs ( a3 ) , Math . abs ( b3 ) ) && Math . abs ( a4 - b4 ) <= EPSILON * Math . max ( 1.0 , Math . abs ( a4 ) , Math . abs ( b4 ) ) && Math . abs ( a5 - b5 ) <= EPSILON * Math . max ( 1.0 , Math . abs ( a5 ) , Math . abs ( b5 ) ) && Math . abs ( a6 - b6 ) <= EPSILON * Math . max ( 1.0 , Math . abs ( a6 ) , Math . abs ( b6 ) ) && Math . abs ( a7 - b7 ) <= EPSILON * Math . max ( 1.0 , Math . abs ( a7 ) , Math . abs ( b7 ) ) && Math . abs ( a8 - b8 ) <= EPSILON * Math . max ( 1.0 , Math . abs ( a8 ) , Math . abs ( b8 ) ) && Math . abs ( a9 - b9 ) <= EPSILON * Math . max ( 1.0 , Math . abs ( a9 ) , Math . abs ( b9 ) ) && Math . abs ( a10 - b10 ) <= EPSILON * Math . max ( 1.0 , Math . abs ( a10 ) , Math . abs ( b10 ) ) && Math . abs ( a11 - b11 ) <= EPSILON * Math . max ( 1.0 , Math . abs ( a11 ) , Math . abs ( b11 ) ) && Math . abs ( a12 - b12 ) <= EPSILON * Math . max ( 1.0 , Math . abs ( a12 ) , Math . abs ( b12 ) ) && Math . abs ( a13 - b13 ) <= EPSILON * Math . max ( 1.0 , Math . abs ( a13 ) , Math . abs ( b13 ) ) && Math . abs ( a14 - b14 ) <= EPSILON * Math . max ( 1.0 , Math . abs ( a14 ) , Math . abs ( b14 ) ) && Math . abs ( a15 - b15 ) <= EPSILON * Math . max ( 1.0 , Math . abs ( a15 ) , Math . abs ( b15 ) ) ) ; } /**
     * Alias for  mat4 . multiply function var mul$3 = multiply$3 ; /**
     * Alias for  mat4 . subtract function var sub$3 = subtract$3 ; var mat4 = Object . freeze ( { __proto__ : null , create : create$3 , clone : clone$3 , copy : copy$3 , fromValues : fromValues$3 , set : set$3 , identity : identity$3 , transpose : transpose$2 , invert : invert$3 , adjoint : adjoint$2 , determinant : determinant$3 , multiply : multiply$3 , translate : translate$2 , scale : scale$3 , rotate : rotate$3 , rotateX : rotateX , rotateY : rotateY , rotateZ : rotateZ , fromTranslation : fromTranslation$2 , fromScaling : fromScaling$3 , fromRotation : fromRotation$3 , fromXRotation : fromXRotation , fromYRotation : fromYRotation , fromZRotation : fromZRotation , fromRotationTranslation : fromRotationTranslation , fromQuat2 : fromQuat2 , getTranslation : getTranslation , getScaling : getScaling , getRotation : getRotation , fromRotationTranslationScale : fromRotationTranslationScale , fromRotationTranslationScaleOrigin : fromRotationTranslationScaleOrigin , fromQuat : fromQuat$1 , frustum : frustum , perspective : perspective , perspectiveFromFieldOfView : perspectiveFromFieldOfView , ortho : ortho , lookAt : lookAt , targetTo : targetTo , str : str$3 , frob : frob$3 , add : add$3 , subtract : subtract$3 , multiplyScalar : multiplyScalar$3 , multiplyScalarAndAdd : multiplyScalarAndAdd$3 , exactEquals : exactEquals$3 , equals : equals$4 , mul : mul$3 , sub : sub$3 , } ) ; module returns { vec3 } function create$4 ( ) { var out = new ARRAY_TYPE ( 3 ) ; if ( ARRAY_TYPE != Float32Array ) { out [ 0 ] = 0 ; out [ 1 ] = 0 ; out [ 2 ] = 0 ; } return out ; } param { ReadonlyVec3 } a returns { vec3 } function clone$4 ( a ) { var out = new ARRAY_TYPE ( 3 ) ; out [ 0 ] = a [ 0 ] ; out [ 1 ] = a [ 1 ] ; out [ 2 ] = a [ 2 ] ; return out ; } param { ReadonlyVec3 } a returns { Number } function length ( a ) { var x = a [ 0 ] ; var y = a [ 1 ] ; var z = a [ 2 ] ; return Math . hypot ( x , y , z ) ; } param { Number } x param { Number } y param { Number } z returns { vec3 } function fromValues$4 ( x , y , z ) { var out = new ARRAY_TYPE ( 3 ) ; out [ 0 ] = x ; out [ 1 ] = y ; out [ 2 ] = z ; return out ; } param { vec3 } out param { ReadonlyVec3 } a returns { vec3 } function copy$4 ( out , a ) { out [ 0 ] = a [ 0 ] ; out [ 1 ] = a [ 1 ] ; out [ 2 ] = a [ 2 ] ; return out ; } param { vec3 } out param { Number } x param { Number } y param { Number } z returns { vec3 } function set$4 ( out , x , y , z ) { out [ 0 ] = x ; out [ 1 ] = y ; out [ 2 ] = z ; return out ; } param { vec3 } out param { ReadonlyVec3 } a param { ReadonlyVec3 } b returns { vec3 } function add$4 ( out , a , b ) { out [ 0 ] = a [ 0 ] + b [ 0 ] ; out [ 1 ] = a [ 1 ] + b [ 1 ] ; out [ 2 ] = a [ 2 ] + b [ 2 ] ; return out ; } param { vec3 } out param { ReadonlyVec3 } a param { ReadonlyVec3 } b returns { vec3 } function subtract$4 ( out , a , b ) { out [ 0 ] = a [ 0 ] - b [ 0 ] ; out [ 1 ] = a [ 1 ] - b [ 1 ] ; out [ 2 ] = a [ 2 ] - b [ 2 ] ; return out ; } param { vec3 } out param { ReadonlyVec3 } a param { ReadonlyVec3 } b returns { vec3 } function multiply$4 ( out , a , b ) { out [ 0 ] = a [ 0 ] * b [ 0 ] ; out [ 1 ] = a [ 1 ] * b [ 1 ] ; out [ 2 ] = a [ 2 ] * b [ 2 ] ; return out ; } param { vec3 } out param { ReadonlyVec3 } a param { ReadonlyVec3 } b returns { vec3 } function divide ( out , a , b ) { out [ 0 ] = a [ 0 ] / b [ 0 ] ; out [ 1 ] = a [ 1 ] / b [ 1 ] ; out [ 2 ] = a [ 2 ] / b [ 2 ] ; return out ; } param { vec3 } out param { ReadonlyVec3 } a returns { vec3 } function ceil ( out , a ) { out [ 0 ] = Math . ceil ( a [ 0 ] ) ; out [ 1 ] = Math . ceil ( a [ 1 ] ) ; out [ 2 ] = Math . ceil ( a [ 2 ] ) ; return out ; } param { vec3 } out param { ReadonlyVec3 } a returns { vec3 } function floor ( out , a ) { out [ 0 ] = Math . floor ( a [ 0 ] ) ; out [ 1 ] = Math . floor ( a [ 1 ] ) ; out [ 2 ] = Math . floor ( a [ 2 ] ) ; return out ; } param { vec3 } out param { ReadonlyVec3 } a param { ReadonlyVec3 } b returns { vec3 } function min ( out , a , b ) { out [ 0 ] = Math . min ( a [ 0 ] , b [ 0 ] ) ; out [ 1 ] = Math . min ( a [ 1 ] , b [ 1 ] ) ; out [ 2 ] = Math . min ( a [ 2 ] , b [ 2 ] ) ; return out ; } param { vec3 } out param { ReadonlyVec3 } a param { ReadonlyVec3 } b returns { vec3 } function max ( out , a , b ) { out [ 0 ] = Math . max ( a [ 0 ] , b [ 0 ] ) ; out [ 1 ] = Math . max ( a [ 1 ] , b [ 1 ] ) ; out [ 2 ] = Math . max ( a [ 2 ] , b [ 2 ] ) ; return out ; } param { vec3 } out param { ReadonlyVec3 } a returns { vec3 } function round ( out , a ) { out [ 0 ] = Math . round ( a [ 0 ] ) ; out [ 1 ] = Math . round ( a [ 1 ] ) ; out [ 2 ] = Math . round ( a [ 2 ] ) ; return out ; } param { vec3 } out param { ReadonlyVec3 } a param { Number } b returns { vec3 } function scale$4 ( out , a , b ) { out [ 0 ] = a [ 0 ] * b ; out [ 1 ] = a [ 1 ] * b ; out [ 2 ] = a [ 2 ] * b ; return out ; } param { vec3 } out param { ReadonlyVec3 } a param { ReadonlyVec3 } b param { Number } scale returns { vec3 } function scaleAndAdd ( out , a , b , scale ) { out [ 0 ] = a [ 0 ] + b [ 0 ] * scale ; out [ 1 ] = a [ 1 ] + b [ 1 ] * scale ; out [ 2 ] = a [ 2 ] + b [ 2 ] * scale ; return out ; } param { ReadonlyVec3 } a param { ReadonlyVec3 } b returns { Number } function distance ( a , b ) { var x = b [ 0 ] - a [ 0 ] ; var y = b [ 1 ] - a [ 1 ] ; var z = b [ 2 ] - a [ 2 ] ; return Math . hypot ( x , y , z ) ; } param { ReadonlyVec3 } a param { ReadonlyVec3 } b returns { Number } function squaredDistance ( a , b ) { var x = b [ 0 ] - a [ 0 ] ; var y = b [ 1 ] - a [ 1 ] ; var z = b [ 2 ] - a [ 2 ] ; return x * x + y * y + z * z ; } param { ReadonlyVec3 } a returns { Number } function squaredLength ( a ) { var x = a [ 0 ] ; var y = a [ 1 ] ; var z = a [ 2 ] ; return x * x + y * y + z * z ; } param { vec3 } out param { ReadonlyVec3 } a returns { vec3 } function negate ( out , a ) { out [ 0 ] = - a [ 0 ] ; out [ 1 ] = - a [ 1 ] ; out [ 2 ] = - a [ 2 ] ; return out ; } param { vec3 } out param { ReadonlyVec3 } a returns { vec3 } function inverse ( out , a ) { out [ 0 ] = 1.0 / a [ 0 ] ; out [ 1 ] = 1.0 / a [ 1 ] ; out [ 2 ] = 1.0 / a [ 2 ] ; return out ; } param { vec3 } out param { ReadonlyVec3 } a returns { vec3 } function normalize ( out , a ) { var x = a [ 0 ] ; var y = a [ 1 ] ; var z = a [ 2 ] ; var len = x * x + y * y + z * z ; if ( len > 0 ) { len = 1 / Math . sqrt ( len ) ; } out [ 0 ] = a [ 0 ] * len ; out [ 1 ] = a [ 1 ] * len ; out [ 2 ] = a [ 2 ] * len ; return out ; } param { ReadonlyVec3 } a param { ReadonlyVec3 } b returns { Number } function dot ( a , b ) { return a [ 0 ] * b [ 0 ] + a [ 1 ] * b [ 1 ] + a [ 2 ] * b [ 2 ] ; } param { vec3 } out param { ReadonlyVec3 } a param { ReadonlyVec3 } b returns { vec3 } function cross ( out , a , b ) { var ax = a [ 0 ] , ay = a [ 1 ] , az = a [ 2 ] ; var bx = b [ 0 ] , by = b [ 1 ] , bz = b [ 2 ] ; out [ 0 ] = ay * bz - az * by ; out [ 1 ] = az * bx - ax * bz ; out [ 2 ] = ax * by - ay * bx ; return out ; } param { vec3 } out param { ReadonlyVec3 } a param { ReadonlyVec3 } b param { Number } t returns { vec3 } function lerp ( out , a , b , t ) { var ax = a [ 0 ] ; var ay = a [ 1 ] ; var az = a [ 2 ] ; out [ 0 ] = ax + t * ( b [ 0 ] - ax ) ; out [ 1 ] = ay + t * ( b [ 1 ] - ay ) ; out [ 2 ] = az + t * ( b [ 2 ] - az ) ; return out ; } param { vec3 } out param { ReadonlyVec3 } a param { ReadonlyVec3 } b param { ReadonlyVec3 } c param { ReadonlyVec3 } d param { Number } t returns { vec3 } function hermite ( out , a , b , c , d , t ) { var factorTimes2 = t * t ; var factor1 = factorTimes2 * ( 2 * t - 3 ) + 1 ; var factor2 = factorTimes2 * ( t - 2 ) + t ; var factor3 = factorTimes2 * ( t - 1 ) ; var factor4 = factorTimes2 * ( 3 - 2 * t ) ; out [ 0 ] = a [ 0 ] * factor1 + b [ 0 ] * factor2 + c [ 0 ] * factor3 + d [ 0 ] * factor4 ; out [ 1 ] = a [ 1 ] * factor1 + b [ 1 ] * factor2 + c [ 1 ] * factor3 + d [ 1 ] * factor4 ; out [ 2 ] = a [ 2 ] * factor1 + b [ 2 ] * factor2 + c [ 2 ] * factor3 + d [ 2 ] * factor4 ; return out ; } param { vec3 } out param { ReadonlyVec3 } a param { ReadonlyVec3 } b param { ReadonlyVec3 } c param { ReadonlyVec3 } d param { Number } t returns { vec3 } function bezier ( out , a , b , c , d , t ) { var inverseFactor = 1 - t ; var inverseFactorTimesTwo = inverseFactor * inverseFactor ; var factorTimes2 = t * t ; var factor1 = inverseFactorTimesTwo * inverseFactor ; var factor2 = 3 * t * inverseFactorTimesTwo ; var factor3 = 3 * factorTimes2 * inverseFactor ; var factor4 = factorTimes2 * t ; out [ 0 ] = a [ 0 ] * factor1 + b [ 0 ] * factor2 + c [ 0 ] * factor3 + d [ 0 ] * factor4 ; out [ 1 ] = a [ 1 ] * factor1 + b [ 1 ] * factor2 + c [ 1 ] * factor3 + d [ 1 ] * factor4 ; out [ 2 ] = a [ 2 ] * factor1 + b [ 2 ] * factor2 + c [ 2 ] * factor3 + d [ 2 ] * factor4 ; return out ; } param { vec3 } out param { Number } scale returns { vec3 } function random ( out , scale ) { scale = scale || 1.0 ; var r = RANDOM ( ) * 2.0 * Math . PI ; var z = RANDOM ( ) * 2.0 - 1.0 ; var zScale = Math . sqrt ( 1.0 - z * z ) * scale ; out [ 0 ] = Math . cos ( r ) * zScale ; out [ 1 ] = Math . sin ( r ) * zScale ; out [ 2 ] = z * scale ; return out ; } param { vec3 } out param { ReadonlyVec3 } a param { ReadonlyMat4 } m returns { vec3 } function transformMat4 ( out , a , m ) { var x = a [ 0 ] , y = a [ 1 ] , z = a [ 2 ] ; var w = m [ 3 ] * x + m [ 7 ] * y + m [ 11 ] * z + m [ 15 ] ; w = w || 1.0 ; out [ 0 ] = ( m [ 0 ] * x + m [ 4 ] * y + m [ 8 ] * z + m [ 12 ] ) / w ; out [ 1 ] = ( m [ 1 ] * x + m [ 5 ] * y + m [ 9 ] * z + m [ 13 ] ) / w ; out [ 2 ] = ( m [ 2 ] * x + m [ 6 ] * y + m [ 10 ] * z + m [ 14 ] ) / w ; return out ; } param { vec3 } out param { ReadonlyVec3 } a param { ReadonlyMat3 } m returns { vec3 } function transformMat3 ( out , a , m ) { var x = a [ 0 ] , y = a [ 1 ] , z = a [ 2 ] ; out [ 0 ] = x * m [ 0 ] + y * m [ 3 ] + z * m [ 6 ] ; out [ 1 ] = x * m [ 1 ] + y * m [ 4 ] + z * m [ 7 ] ; out [ 2 ] = x * m [ 2 ] + y * m [ 5 ] + z * m [ 8 ] ; return out ; } param { vec3 } out param { ReadonlyVec3 } a param { ReadonlyQuat } q returns { vec3 } function transformQuat ( out , a , q ) { var qx = q [ 0 ] , qy = q [ 1 ] , qz = q [ 2 ] , qw = q [ 3 ] ; var x = a [ 0 ] , y = a [ 1 ] , z = a [ 2 ] ; var uvx = qy * z - qz * y , uvy = qz * x - qx * z , uvz = qx * y - qy * x ; var uuvx = qy * uvz - qz * uvy , uuvy = qz * uvx - qx * uvz , uuvz = qx * uvy - qy * uvx ; var w2 = qw * 2 ; uvx *= w2 ; uvy *= w2 ; uvz *= w2 ; uuvx *= 2 ; uuvy *= 2 ; uuvz *= 2 ; out [ 0 ] = x + uvx + uuvx ; out [ 1 ] = y + uvy + uuvy ; out [ 2 ] = z + uvz + uuvz ; return out ; } param { vec3 } out param { ReadonlyVec3 } a param { ReadonlyVec3 } b param { Number } rad returns { vec3 } function rotateX$1 ( out , a , b , rad ) { var p = [ ] , r = [ ] ; p [ 0 ] = a [ 0 ] - b [ 0 ] ; p [ 1 ] = a [ 1 ] - b [ 1 ] ; p [ 2 ] = a [ 2 ] - b [ 2 ] ; r [ 0 ] = p [ 0 ] ; r [ 1 ] = p [ 1 ] * Math . cos ( rad ) - p [ 2 ] * Math . sin ( rad ) ; r [ 2 ] = p [ 1 ] * Math . sin ( rad ) + p [ 2 ] * Math . cos ( rad ) ; out [ 0 ] = r [ 0 ] + b [ 0 ] ; out [ 1 ] = r [ 1 ] + b [ 1 ] ; out [ 2 ] = r [ 2 ] + b [ 2 ] ; return out ; } param { vec3 } out param { ReadonlyVec3 } a param { ReadonlyVec3 } b param { Number } rad returns { vec3 } function rotateY$1 ( out , a , b , rad ) { var p = [ ] , r = [ ] ; p [ 0 ] = a [ 0 ] - b [ 0 ] ; p [ 1 ] = a [ 1 ] - b [ 1 ] ; p [ 2 ] = a [ 2 ] - b [ 2 ] ; r [ 0 ] = p [ 2 ] * Math . sin ( rad ) + p [ 0 ] * Math . cos ( rad ) ; r [ 1 ] = p [ 1 ] ; r [ 2 ] = p [ 2 ] * Math . cos ( rad ) - p [ 0 ] * Math . sin ( rad ) ; out [ 0 ] = r [ 0 ] + b [ 0 ] ; out [ 1 ] = r [ 1 ] + b [ 1 ] ; out [ 2 ] = r [ 2 ] + b [ 2 ] ; return out ; } param { vec3 } out param { ReadonlyVec3 } a param { ReadonlyVec3 } b param { Number } rad returns { vec3 } function rotateZ$1 ( out , a , b , rad ) { var p = [ ] , r = [ ] ; p [ 0 ] = a [ 0 ] - b [ 0 ] ; p [ 1 ] = a [ 1 ] - b [ 1 ] ; p [ 2 ] = a [ 2 ] - b [ 2 ] ; r [ 0 ] = p [ 0 ] * Math . cos ( rad ) - p [ 1 ] * Math . sin ( rad ) ; r [ 1 ] = p [ 0 ] * Math . sin ( rad ) + p [ 1 ] * Math . cos ( rad ) ; r [ 2 ] = p [ 2 ] ; out [ 0 ] = r [ 0 ] + b [ 0 ] ; out [ 1 ] = r [ 1 ] + b [ 1 ] ; out [ 2 ] = r [ 2 ] + b [ 2 ] ; return out ; } param { ReadonlyVec3 } a param { ReadonlyVec3 } b returns { Number } function angle ( a , b ) { var ax = a [ 0 ] , ay = a [ 1 ] , az = a [ 2 ] , bx = b [ 0 ] , by = b [ 1 ] , bz = b [ 2 ] , mag1 = Math . sqrt ( ax * ax + ay * ay + az * az ) , mag2 = Math . sqrt ( bx * bx + by * by + bz * bz ) , mag = mag1 * mag2 , cosine = mag && dot ( a , b ) / mag ; return Math . acos ( Math . min ( Math . max ( cosine , - 1 ) , 1 ) ) ; } param { vec3 } out returns { vec3 } function zero ( out ) { out [ 0 ] = 0.0 ; out [ 1 ] = 0.0 ; out [ 2 ] = 0.0 ; return out ; } param { ReadonlyVec3 } a returns { String } function str$4 ( a ) { return 'vec3(' + a [ 0 ] + ', ' + a [ 1 ] + ', ' + a [ 2 ] + ')' ; } param { ReadonlyVec3 } a param { ReadonlyVec3 } b returns { Boolean } function exactEquals$4 ( a , b ) { return a [ 0 ] === b [ 0 ] && a [ 1 ] === b [ 1 ] && a [ 2 ] === b [ 2 ] ; } param { ReadonlyVec3 } a param { ReadonlyVec3 } b returns { Boolean } function equals$5 ( a , b ) { var a0 = a [ 0 ] , a1 = a [ 1 ] , a2 = a [ 2 ] ; var b0 = b [ 0 ] , b1 = b [ 1 ] , b2 = b [ 2 ] ; return ( Math . abs ( a0 - b0 ) <= EPSILON * Math . max ( 1.0 , Math . abs ( a0 ) , Math . abs ( b0 ) ) && Math . abs ( a1 - b1 ) <= EPSILON * Math . max ( 1.0 , Math . abs ( a1 ) , Math . abs ( b1 ) ) && Math . abs ( a2 - b2 ) <= EPSILON * Math . max ( 1.0 , Math . abs ( a2 ) , Math . abs ( b2 ) ) ) ; } /**
     * Alias for  vec3 . subtract function var sub$4 = subtract$4 ; /**
     * Alias for  vec3 . multiply function var mul$4 = multiply$4 ; /**
     * Alias for  vec3 . divide function var div = divide ; /**
     * Alias for  vec3 . distance function var dist = distance ; /**
     * Alias for  vec3 . squaredDistance function var sqrDist = squaredDistance ; /**
     * Alias for  vec3 . length function var len = length ; /**
     * Alias for  vec3 . squaredLength function var sqrLen = squaredLength ; param { Array } a param { Number } stride param { Number } offset param { Number } count param { Function } fn param { Object } arg returns { Array } function var forEach = ( function ( ) { var vec = create$4 ( ) ; return function ( a , stride , offset , count , fn , arg ) { var i , l ; if ( ! stride ) { stride = 3 ; } if ( ! offset ) { offset = 0 ; } if ( count ) { l = Math . min ( count * stride + offset , a . length ) ; } else { l = a . length ; } for ( i = offset ; i < l ; i += stride ) { vec [ 0 ] = a [ i ] ; vec [ 1 ] = a [ i + 1 ] ; vec [ 2 ] = a [ i + 2 ] ; fn ( vec , vec , arg ) ; a [ i ] = vec [ 0 ] ; a [ i + 1 ] = vec [ 1 ] ; a [ i + 2 ] = vec [ 2 ] ; } return a ; } ; } ) ( ) ; var vec3 = Object . freeze ( { __proto__ : null , create : create$4 , clone : clone$4 , length : length , fromValues : fromValues$4 , copy : copy$4 , set : set$4 , add : add$4 , subtract : subtract$4 , multiply : multiply$4 , divide : divide , ceil : ceil , floor : floor , min : min , max : max , round : round , scale : scale$4 , scaleAndAdd : scaleAndAdd , distance : distance , squaredDistance : squaredDistance , squaredLength : squaredLength , negate : negate , inverse : inverse , normalize : normalize , dot : dot , cross : cross , lerp : lerp , hermite : hermite , bezier : bezier , random : random , transformMat4 : transformMat4 , transformMat3 : transformMat3 , transformQuat : transformQuat , rotateX : rotateX$1 , rotateY : rotateY$1 , rotateZ : rotateZ$1 , angle : angle , zero : zero , str : str$4 , exactEquals : exactEquals$4 , equals : equals$5 , sub : sub$4 , mul : mul$4 , div : div , dist : dist , sqrDist : sqrDist , len : len , sqrLen : sqrLen , forEach : forEach , } ) ; module returns { vec4 } function create$5 ( ) { var out = new ARRAY_TYPE ( 4 ) ; if ( ARRAY_TYPE != Float32Array ) { out [ 0 ] = 0 ; out [ 1 ] = 0 ; out [ 2 ] = 0 ; out [ 3 ] = 0 ; } return out ; } param { ReadonlyVec4 } a returns { vec4 } function clone$5 ( a ) { var out = new ARRAY_TYPE ( 4 ) ; out [ 0 ] = a [ 0 ] ; out [ 1 ] = a [ 1 ] ; out [ 2 ] = a [ 2 ] ; out [ 3 ] = a [ 3 ] ; return out ; } param { Number } x param { Number } y param { Number } z param { Number } w returns { vec4 } function fromValues$5 ( x , y , z , w ) { var out = new ARRAY_TYPE ( 4 ) ; out [ 0 ] = x ; out [ 1 ] = y ; out [ 2 ] = z ; out [ 3 ] = w ; return out ; } param { vec4 } out param { ReadonlyVec4 } a returns { vec4 } function copy$5 ( out , a ) { out [ 0 ] = a [ 0 ] ; out [ 1 ] = a [ 1 ] ; out [ 2 ] = a [ 2 ] ; out [ 3 ] = a [ 3 ] ; return out ; } param { vec4 } out param { Number } x param { Number } y param { Number } z param { Number } w returns { vec4 } function set$5 ( out , x , y , z , w ) { out [ 0 ] = x ; out [ 1 ] = y ; out [ 2 ] = z ; out [ 3 ] = w ; return out ; } param { vec4 } out param { ReadonlyVec4 } a param { ReadonlyVec4 } b returns { vec4 } function add$5 ( out , a , b ) { out [ 0 ] = a [ 0 ] + b [ 0 ] ; out [ 1 ] = a [ 1 ] + b [ 1 ] ; out [ 2 ] = a [ 2 ] + b [ 2 ] ; out [ 3 ] = a [ 3 ] + b [ 3 ] ; return out ; } param { vec4 } out param { ReadonlyVec4 } a param { ReadonlyVec4 } b returns { vec4 } function subtract$5 ( out , a , b ) { out [ 0 ] = a [ 0 ] - b [ 0 ] ; out [ 1 ] = a [ 1 ] - b [ 1 ] ; out [ 2 ] = a [ 2 ] - b [ 2 ] ; out [ 3 ] = a [ 3 ] - b [ 3 ] ; return out ; } param { vec4 } out param { ReadonlyVec4 } a param { ReadonlyVec4 } b returns { vec4 } function multiply$5 ( out , a , b ) { out [ 0 ] = a [ 0 ] * b [ 0 ] ; out [ 1 ] = a [ 1 ] * b [ 1 ] ; out [ 2 ] = a [ 2 ] * b [ 2 ] ; out [ 3 ] = a [ 3 ] * b [ 3 ] ; return out ; } param { vec4 } out param { ReadonlyVec4 } a param { ReadonlyVec4 } b returns { vec4 } function divide$1 ( out , a , b ) { out [ 0 ] = a [ 0 ] / b [ 0 ] ; out [ 1 ] = a [ 1 ] / b [ 1 ] ; out [ 2 ] = a [ 2 ] / b [ 2 ] ; out [ 3 ] = a [ 3 ] / b [ 3 ] ; return out ; } param { vec4 } out param { ReadonlyVec4 } a returns { vec4 } function ceil$1 ( out , a ) { out [ 0 ] = Math . ceil ( a [ 0 ] ) ; out [ 1 ] = Math . ceil ( a [ 1 ] ) ; out [ 2 ] = Math . ceil ( a [ 2 ] ) ; out [ 3 ] = Math . ceil ( a [ 3 ] ) ; return out ; } param { vec4 } out param { ReadonlyVec4 } a returns { vec4 } function floor$1 ( out , a ) { out [ 0 ] = Math . floor ( a [ 0 ] ) ; out [ 1 ] = Math . floor ( a [ 1 ] ) ; out [ 2 ] = Math . floor ( a [ 2 ] ) ; out [ 3 ] = Math . floor ( a [ 3 ] ) ; return out ; } param { vec4 } out param { ReadonlyVec4 } a param { ReadonlyVec4 } b returns { vec4 } function min$1 ( out , a , b ) { out [ 0 ] = Math . min ( a [ 0 ] , b [ 0 ] ) ; out [ 1 ] = Math . min ( a [ 1 ] , b [ 1 ] ) ; out [ 2 ] = Math . min ( a [ 2 ] , b [ 2 ] ) ; out [ 3 ] = Math . min ( a [ 3 ] , b [ 3 ] ) ; return out ; } param { vec4 } out param { ReadonlyVec4 } a param { ReadonlyVec4 } b returns { vec4 } function max$1 ( out , a , b ) { out [ 0 ] = Math . max ( a [ 0 ] , b [ 0 ] ) ; out [ 1 ] = Math . max ( a [ 1 ] , b [ 1 ] ) ; out [ 2 ] = Math . max ( a [ 2 ] , b [ 2 ] ) ; out [ 3 ] = Math . max ( a [ 3 ] , b [ 3 ] ) ; return out ; } param { vec4 } out param { ReadonlyVec4 } a returns { vec4 } function round$1 ( out , a ) { out [ 0 ] = Math . round ( a [ 0 ] ) ; out [ 1 ] = Math . round ( a [ 1 ] ) ; out [ 2 ] = Math . round ( a [ 2 ] ) ; out [ 3 ] = Math . round ( a [ 3 ] ) ; return out ; } param { vec4 } out param { ReadonlyVec4 } a param { Number } b returns { vec4 } function scale$5 ( out , a , b ) { out [ 0 ] = a [ 0 ] * b ; out [ 1 ] = a [ 1 ] * b ; out [ 2 ] = a [ 2 ] * b ; out [ 3 ] = a [ 3 ] * b ; return out ; } param { vec4 } out param { ReadonlyVec4 } a param { ReadonlyVec4 } b param { Number } scale returns { vec4 } function scaleAndAdd$1 ( out , a , b , scale ) { out [ 0 ] = a [ 0 ] + b [ 0 ] * scale ; out [ 1 ] = a [ 1 ] + b [ 1 ] * scale ; out [ 2 ] = a [ 2 ] + b [ 2 ] * scale ; out [ 3 ] = a [ 3 ] + b [ 3 ] * scale ; return out ; } param { ReadonlyVec4 } a param { ReadonlyVec4 } b returns { Number } function distance$1 ( a , b ) { var x = b [ 0 ] - a [ 0 ] ; var y = b [ 1 ] - a [ 1 ] ; var z = b [ 2 ] - a [ 2 ] ; var w = b [ 3 ] - a [ 3 ] ; return Math . hypot ( x , y , z , w ) ; } param { ReadonlyVec4 } a param { ReadonlyVec4 } b returns { Number } function squaredDistance$1 ( a , b ) { var x = b [ 0 ] - a [ 0 ] ; var y = b [ 1 ] - a [ 1 ] ; var z = b [ 2 ] - a [ 2 ] ; var w = b [ 3 ] - a [ 3 ] ; return x * x + y * y + z * z + w * w ; } param { ReadonlyVec4 } a returns { Number } function length$1 ( a ) { var x = a [ 0 ] ; var y = a [ 1 ] ; var z = a [ 2 ] ; var w = a [ 3 ] ; return Math . hypot ( x , y , z , w ) ; } param { ReadonlyVec4 } a returns { Number } function squaredLength$1 ( a ) { var x = a [ 0 ] ; var y = a [ 1 ] ; var z = a [ 2 ] ; var w = a [ 3 ] ; return x * x + y * y + z * z + w * w ; } param { vec4 } out param { ReadonlyVec4 } a returns { vec4 } function negate$1 ( out , a ) { out [ 0 ] = - a [ 0 ] ; out [ 1 ] = - a [ 1 ] ; out [ 2 ] = - a [ 2 ] ; out [ 3 ] = - a [ 3 ] ; return out ; } param { vec4 } out param { ReadonlyVec4 } a returns { vec4 } function inverse$1 ( out , a ) { out [ 0 ] = 1.0 / a [ 0 ] ; out [ 1 ] = 1.0 / a [ 1 ] ; out [ 2 ] = 1.0 / a [ 2 ] ; out [ 3 ] = 1.0 / a [ 3 ] ; return out ; } param { vec4 } out param { ReadonlyVec4 } a returns { vec4 } function normalize$1 ( out , a ) { var x = a [ 0 ] ; var y = a [ 1 ] ; var z = a [ 2 ] ; var w = a [ 3 ] ; var len = x * x + y * y + z * z + w * w ; if ( len > 0 ) { len = 1 / Math . sqrt ( len ) ; } out [ 0 ] = x * len ; out [ 1 ] = y * len ; out [ 2 ] = z * len ; out [ 3 ] = w * len ; return out ; } param { ReadonlyVec4 } a param { ReadonlyVec4 } b returns { Number } function dot$1 ( a , b ) { return a [ 0 ] * b [ 0 ] + a [ 1 ] * b [ 1 ] + a [ 2 ] * b [ 2 ] + a [ 3 ] * b [ 3 ] ; } param { ReadonlyVec4 } result param { ReadonlyVec4 } U param { ReadonlyVec4 } V param { ReadonlyVec4 } W returns { vec4 } function cross$1 ( out , u , v , w ) { var A = v [ 0 ] * w [ 1 ] - v [ 1 ] * w [ 0 ] , B = v [ 0 ] * w [ 2 ] - v [ 2 ] * w [ 0 ] , C = v [ 0 ] * w [ 3 ] - v [ 3 ] * w [ 0 ] , D = v [ 1 ] * w [ 2 ] - v [ 2 ] * w [ 1 ] , E = v [ 1 ] * w [ 3 ] - v [ 3 ] * w [ 1 ] , F = v [ 2 ] * w [ 3 ] - v [ 3 ] * w [ 2 ] ; var G = u [ 0 ] ; var H = u [ 1 ] ; var I = u [ 2 ] ; var J = u [ 3 ] ; out [ 0 ] = H * F - I * E + J * D ; out [ 1 ] = - ( G * F ) + I * C - J * B ; out [ 2 ] = G * E - H * C + J * A ; out [ 3 ] = - ( G * D ) + H * B - I * A ; return out ; } param { vec4 } out param { ReadonlyVec4 } a param { ReadonlyVec4 } b param { Number } t returns { vec4 } function lerp$1 ( out , a , b , t ) { var ax = a [ 0 ] ; var ay = a [ 1 ] ; var az = a [ 2 ] ; var aw = a [ 3 ] ; out [ 0 ] = ax + t * ( b [ 0 ] - ax ) ; out [ 1 ] = ay + t * ( b [ 1 ] - ay ) ; out [ 2 ] = az + t * ( b [ 2 ] - az ) ; out [ 3 ] = aw + t * ( b [ 3 ] - aw ) ; return out ; } param { vec4 } out param { Number } scale returns { vec4 } function random$1 ( out , scale ) { scale = scale || 1.0 ; var v1 , v2 , v3 , v4 ; var s1 , s2 ; do { v1 = RANDOM ( ) * 2 - 1 ; v2 = RANDOM ( ) * 2 - 1 ; s1 = v1 * v1 + v2 * v2 ; } while ( s1 >= 1 ) ; do { v3 = RANDOM ( ) * 2 - 1 ; v4 = RANDOM ( ) * 2 - 1 ; s2 = v3 * v3 + v4 * v4 ; } while ( s2 >= 1 ) ; var d = Math . sqrt ( ( 1 - s1 ) / s2 ) ; out [ 0 ] = scale * v1 ; out [ 1 ] = scale * v2 ; out [ 2 ] = scale * v3 * d ; out [ 3 ] = scale * v4 * d ; return out ; } param { vec4 } out param { ReadonlyVec4 } a param { ReadonlyMat4 } m returns { vec4 } function transformMat4$1 ( out , a , m ) { var x = a [ 0 ] , y = a [ 1 ] , z = a [ 2 ] , w = a [ 3 ] ; out [ 0 ] = m [ 0 ] * x + m [ 4 ] * y + m [ 8 ] * z + m [ 12 ] * w ; out [ 1 ] = m [ 1 ] * x + m [ 5 ] * y + m [ 9 ] * z + m [ 13 ] * w ; out [ 2 ] = m [ 2 ] * x + m [ 6 ] * y + m [ 10 ] * z + m [ 14 ] * w ; out [ 3 ] = m [ 3 ] * x + m [ 7 ] * y + m [ 11 ] * z + m [ 15 ] * w ; return out ; } param { vec4 } out param { ReadonlyVec4 } a param { ReadonlyQuat } q returns { vec4 } function transformQuat$1 ( out , a , q ) { var x = a [ 0 ] , y = a [ 1 ] , z = a [ 2 ] ; var qx = q [ 0 ] , qy = q [ 1 ] , qz = q [ 2 ] , qw = q [ 3 ] ; var ix = qw * x + qy * z - qz * y ; var iy = qw * y + qz * x - qx * z ; var iz = qw * z + qx * y - qy * x ; var iw = - qx * x - qy * y - qz * z ; out [ 0 ] = ix * qw + iw * - qx + iy * - qz - iz * - qy ; out [ 1 ] = iy * qw + iw * - qy + iz * - qx - ix * - qz ; out [ 2 ] = iz * qw + iw * - qz + ix * - qy - iy * - qx ; out [ 3 ] = a [ 3 ] ; return out ; } param { vec4 } out returns { vec4 } function zero$1 ( out ) { out [ 0 ] = 0.0 ; out [ 1 ] = 0.0 ; out [ 2 ] = 0.0 ; out [ 3 ] = 0.0 ; return out ; } param { ReadonlyVec4 } a returns { String } function str$5 ( a ) { return 'vec4(' + a [ 0 ] + ', ' + a [ 1 ] + ', ' + a [ 2 ] + ', ' + a [ 3 ] + ')' ; } param { ReadonlyVec4 } a param { ReadonlyVec4 } b returns { Boolean } function exactEquals$5 ( a , b ) { return a [ 0 ] === b [ 0 ] && a [ 1 ] === b [ 1 ] && a [ 2 ] === b [ 2 ] && a [ 3 ] === b [ 3 ] ; } param { ReadonlyVec4 } a param { ReadonlyVec4 } b returns { Boolean } function equals$6 ( a , b ) { var a0 = a [ 0 ] , a1 = a [ 1 ] , a2 = a [ 2 ] , a3 = a [ 3 ] ; var b0 = b [ 0 ] , b1 = b [ 1 ] , b2 = b [ 2 ] , b3 = b [ 3 ] ; return ( Math . abs ( a0 - b0 ) <= EPSILON * Math . max ( 1.0 , Math . abs ( a0 ) , Math . abs ( b0 ) ) && Math . abs ( a1 - b1 ) <= EPSILON * Math . max ( 1.0 , Math . abs ( a1 ) , Math . abs ( b1 ) ) && Math . abs ( a2 - b2 ) <= EPSILON * Math . max ( 1.0 , Math . abs ( a2 ) , Math . abs ( b2 ) ) && Math . abs ( a3 - b3 ) <= EPSILON * Math . max ( 1.0 , Math . abs ( a3 ) , Math . abs ( b3 ) ) ) ; } /**
     * Alias for  vec4 . subtract function var sub$5 = subtract$5 ; /**
     * Alias for  vec4 . multiply function var mul$5 = multiply$5 ; /**
     * Alias for  vec4 . divide function var div$1 = divide$1 ; /**
     * Alias for  vec4 . distance function var dist$1 = distance$1 ; /**
     * Alias for  vec4 . squaredDistance function var sqrDist$1 = squaredDistance$1 ; /**
     * Alias for  vec4 . length function var len$1 = length$1 ; /**
     * Alias for  vec4 . squaredLength function var sqrLen$1 = squaredLength$1 ; param { Array } a param { Number } stride param { Number } offset param { Number } count param { Function } fn param { Object } arg returns { Array } function var forEach$1 = ( function ( ) { var vec = create$5 ( ) ; return function ( a , stride , offset , count , fn , arg ) { var i , l ; if ( ! stride ) { stride = 4 ; } if ( ! offset ) { offset = 0 ; } if ( count ) { l = Math . min ( count * stride + offset , a . length ) ; } else { l = a . length ; } for ( i = offset ; i < l ; i += stride ) { vec [ 0 ] = a [ i ] ; vec [ 1 ] = a [ i + 1 ] ; vec [ 2 ] = a [ i + 2 ] ; vec [ 3 ] = a [ i + 3 ] ; fn ( vec , vec , arg ) ; a [ i ] = vec [ 0 ] ; a [ i + 1 ] = vec [ 1 ] ; a [ i + 2 ] = vec [ 2 ] ; a [ i + 3 ] = vec [ 3 ] ; } return a ; } ; } ) ( ) ; var vec4 = Object . freeze ( { __proto__ : null , create : create$5 , clone : clone$5 , fromValues : fromValues$5 , copy : copy$5 , set : set$5 , add : add$5 , subtract : subtract$5 , multiply : multiply$5 , divide : divide$1 , ceil : ceil$1 , floor : floor$1 , min : min$1 , max : max$1 , round : round$1 , scale : scale$5 , scaleAndAdd : scaleAndAdd$1 , distance : distance$1 , squaredDistance : squaredDistance$1 , length : length$1 , squaredLength : squaredLength$1 , negate : negate$1 , inverse : inverse$1 , normalize : normalize$1 , dot : dot$1 , cross : cross$1 , lerp : lerp$1 , random : random$1 , transformMat4 : transformMat4$1 , transformQuat : transformQuat$1 , zero : zero$1 , str : str$5 , exactEquals : exactEquals$5 , equals : equals$6 , sub : sub$5 , mul : mul$5 , div : div$1 , dist : dist$1 , sqrDist : sqrDist$1 , len : len$1 , sqrLen : sqrLen$1 , forEach : forEach$1 , } ) ; module returns { quat } function create$6 ( ) { var out = new ARRAY_TYPE ( 4 ) ; if ( ARRAY_TYPE != Float32Array ) { out [ 0 ] = 0 ; out [ 1 ] = 0 ; out [ 2 ] = 0 ; } out [ 3 ] = 1 ; return out ; } param { quat } out returns { quat } function identity$4 ( out ) { out [ 0 ] = 0 ; out [ 1 ] = 0 ; out [ 2 ] = 0 ; out [ 3 ] = 1 ; return out ; } param { quat } out param { ReadonlyVec3 } axis param { Number } rad returns { quat } function setAxisAngle ( out , axis , rad ) { rad = rad * 0.5 ; var s = Math . sin ( rad ) ; out [ 0 ] = s * axis [ 0 ] ; out [ 1 ] = s * axis [ 1 ] ; out [ 2 ] = s * axis [ 2 ] ; out [ 3 ] = Math . cos ( rad ) ; return out ; } param { vec3 } out_axis param { ReadonlyQuat } q return { Number } function getAxisAngle ( out_axis , q ) { var rad = Math . acos ( q [ 3 ] ) * 2.0 ; var s = Math . sin ( rad / 2.0 ) ; if ( s > EPSILON ) { out_axis [ 0 ] = q [ 0 ] / s ; out_axis [ 1 ] = q [ 1 ] / s ; out_axis [ 2 ] = q [ 2 ] / s ; } else { out_axis [ 0 ] = 1 ; out_axis [ 1 ] = 0 ; out_axis [ 2 ] = 0 ; } return rad ; } param { ReadonlyQuat } a param { ReadonlyQuat } b return { Number } function getAngle ( a , b ) { var dotproduct = dot$2 ( a , b ) ; return Math . acos ( 2 * dotproduct * dotproduct - 1 ) ; } param { quat } out param { ReadonlyQuat } a param { ReadonlyQuat } b returns { quat } function multiply$6 ( out , a , b ) { var ax = a [ 0 ] , ay = a [ 1 ] , az = a [ 2 ] , aw = a [ 3 ] ; var bx = b [ 0 ] , by = b [ 1 ] , bz = b [ 2 ] , bw = b [ 3 ] ; out [ 0 ] = ax * bw + aw * bx + ay * bz - az * by ; out [ 1 ] = ay * bw + aw * by + az * bx - ax * bz ; out [ 2 ] = az * bw + aw * bz + ax * by - ay * bx ; out [ 3 ] = aw * bw - ax * bx - ay * by - az * bz ; return out ; } param { quat } out param { ReadonlyQuat } a param { number } rad returns { quat } function rotateX$2 ( out , a , rad ) { rad *= 0.5 ; var ax = a [ 0 ] , ay = a [ 1 ] , az = a [ 2 ] , aw = a [ 3 ] ; var bx = Math . sin ( rad ) , bw = Math . cos ( rad ) ; out [ 0 ] = ax * bw + aw * bx ; out [ 1 ] = ay * bw + az * bx ; out [ 2 ] = az * bw - ay * bx ; out [ 3 ] = aw * bw - ax * bx ; return out ; } param { quat } out param { ReadonlyQuat } a param { number } rad returns { quat } function rotateY$2 ( out , a , rad ) { rad *= 0.5 ; var ax = a [ 0 ] , ay = a [ 1 ] , az = a [ 2 ] , aw = a [ 3 ] ; var by = Math . sin ( rad ) , bw = Math . cos ( rad ) ; out [ 0 ] = ax * bw - az * by ; out [ 1 ] = ay * bw + aw * by ; out [ 2 ] = az * bw + ax * by ; out [ 3 ] = aw * bw - ay * by ; return out ; } param { quat } out param { ReadonlyQuat } a param { number } rad returns { quat } function rotateZ$2 ( out , a , rad ) { rad *= 0.5 ; var ax = a [ 0 ] , ay = a [ 1 ] , az = a [ 2 ] , aw = a [ 3 ] ; var bz = Math . sin ( rad ) , bw = Math . cos ( rad ) ; out [ 0 ] = ax * bw + ay * bz ; out [ 1 ] = ay * bw - ax * bz ; out [ 2 ] = az * bw + aw * bz ; out [ 3 ] = aw * bw - az * bz ; return out ; } param { quat } out param { ReadonlyQuat } a returns { quat } function calculateW ( out , a ) { var x = a [ 0 ] , y = a [ 1 ] , z = a [ 2 ] ; out [ 0 ] = x ; out [ 1 ] = y ; out [ 2 ] = z ; out [ 3 ] = Math . sqrt ( Math . abs ( 1.0 - x * x - y * y - z * z ) ) ; return out ; } param { quat } out param { ReadonlyQuat } a returns { quat } function exp ( out , a ) { var x = a [ 0 ] , y = a [ 1 ] , z = a [ 2 ] , w = a [ 3 ] ; var r = Math . sqrt ( x * x + y * y + z * z ) ; var et = Math . exp ( w ) ; var s = r > 0 ? ( et * Math . sin ( r ) ) / r : 0 ; out [ 0 ] = x * s ; out [ 1 ] = y * s ; out [ 2 ] = z * s ; out [ 3 ] = et * Math . cos ( r ) ; return out ; } param { quat } out param { ReadonlyQuat } a returns { quat } function ln ( out , a ) { var x = a [ 0 ] , y = a [ 1 ] , z = a [ 2 ] , w = a [ 3 ] ; var r = Math . sqrt ( x * x + y * y + z * z ) ; var t = r > 0 ? Math . atan2 ( r , w ) / r : 0 ; out [ 0 ] = x * t ; out [ 1 ] = y * t ; out [ 2 ] = z * t ; out [ 3 ] = 0.5 * Math . log ( x * x + y * y + z * z + w * w ) ; return out ; } param { quat } out param { ReadonlyQuat } a param { Number } b returns { quat } function pow ( out , a , b ) { ln ( out , a ) ; scale$6 ( out , out , b ) ; exp ( out , out ) ; return out ; } param { quat } out param { ReadonlyQuat } a param { ReadonlyQuat } b param { Number } t returns { quat } function slerp ( out , a , b , t ) { var ax = a [ 0 ] , ay = a [ 1 ] , az = a [ 2 ] , aw = a [ 3 ] ; var bx = b [ 0 ] , by = b [ 1 ] , bz = b [ 2 ] , bw = b [ 3 ] ; var omega , cosom , sinom , scale0 , scale1 ; cosom = ax * bx + ay * by + az * bz + aw * bw ; if ( cosom < 0.0 ) { cosom = - cosom ; bx = - bx ; by = - by ; bz = - bz ; bw = - bw ; } if ( 1.0 - cosom > EPSILON ) { omega = Math . acos ( cosom ) ; sinom = Math . sin ( omega ) ; scale0 = Math . sin ( ( 1.0 - t ) * omega ) / sinom ; scale1 = Math . sin ( t * omega ) / sinom ; } else { scale0 = 1.0 - t ; scale1 = t ; } out [ 0 ] = scale0 * ax + scale1 * bx ; out [ 1 ] = scale0 * ay + scale1 * by ; out [ 2 ] = scale0 * az + scale1 * bz ; out [ 3 ] = scale0 * aw + scale1 * bw ; return out ; } param { quat } out returns { quat } function random$2 ( out ) { var u1 = RANDOM ( ) ; var u2 = RANDOM ( ) ; var u3 = RANDOM ( ) ; var sqrt1MinusU1 = Math . sqrt ( 1 - u1 ) ; var sqrtU1 = Math . sqrt ( u1 ) ; out [ 0 ] = sqrt1MinusU1 * Math . sin ( 2.0 * Math . PI * u2 ) ; out [ 1 ] = sqrt1MinusU1 * Math . cos ( 2.0 * Math . PI * u2 ) ; out [ 2 ] = sqrtU1 * Math . sin ( 2.0 * Math . PI * u3 ) ; out [ 3 ] = sqrtU1 * Math . cos ( 2.0 * Math . PI * u3 ) ; return out ; } param { quat } out param { ReadonlyQuat } a returns { quat } function invert$4 ( out , a ) { var a0 = a [ 0 ] , a1 = a [ 1 ] , a2 = a [ 2 ] , a3 = a [ 3 ] ; var dot = a0 * a0 + a1 * a1 + a2 * a2 + a3 * a3 ; var invDot = dot ? 1.0 / dot : 0 ; out [ 0 ] = - a0 * invDot ; out [ 1 ] = - a1 * invDot ; out [ 2 ] = - a2 * invDot ; out [ 3 ] = a3 * invDot ; return out ; } param { quat } out param { ReadonlyQuat } a returns { quat } function conjugate ( out , a ) { out [ 0 ] = - a [ 0 ] ; out [ 1 ] = - a [ 1 ] ; out [ 2 ] = - a [ 2 ] ; out [ 3 ] = a [ 3 ] ; return out ; } param { quat } out param { ReadonlyMat3 } m returns { quat } function function fromMat3 ( out , m ) { var fTrace = m [ 0 ] + m [ 4 ] + m [ 8 ] ; var fRoot ; if ( fTrace > 0.0 ) { fRoot = Math . sqrt ( fTrace + 1.0 ) ; out [ 3 ] = 0.5 * fRoot ; fRoot = 0.5 / fRoot ; out [ 0 ] = ( m [ 5 ] - m [ 7 ] ) * fRoot ; out [ 1 ] = ( m [ 6 ] - m [ 2 ] ) * fRoot ; out [ 2 ] = ( m [ 1 ] - m [ 3 ] ) * fRoot ; } else { var i = 0 ; if ( m [ 4 ] > m [ 0 ] ) i = 1 ; if ( m [ 8 ] > m [ i * 3 + i ] ) i = 2 ; var j = ( i + 1 ) % 3 ; var k = ( i + 2 ) % 3 ; fRoot = Math . sqrt ( m [ i * 3 + i ] - m [ j * 3 + j ] - m [ k * 3 + k ] + 1.0 ) ; out [ i ] = 0.5 * fRoot ; fRoot = 0.5 / fRoot ; out [ 3 ] = ( m [ j * 3 + k ] - m [ k * 3 + j ] ) * fRoot ; out [ j ] = ( m [ j * 3 + i ] + m [ i * 3 + j ] ) * fRoot ; out [ k ] = ( m [ k * 3 + i ] + m [ i * 3 + k ] ) * fRoot ; } return out ; } param { quat } out param { x } Angle param { y } Angle param { z } Angle returns { quat } function function fromEuler ( out , x , y , z ) { var halfToRad = ( 0.5 * Math . PI ) / 180.0 ; x *= halfToRad ; y *= halfToRad ; z *= halfToRad ; var sx = Math . sin ( x ) ; var cx = Math . cos ( x ) ; var sy = Math . sin ( y ) ; var cy = Math . cos ( y ) ; var sz = Math . sin ( z ) ; var cz = Math . cos ( z ) ; out [ 0 ] = sx * cy * cz - cx * sy * sz ; out [ 1 ] = cx * sy * cz + sx * cy * sz ; out [ 2 ] = cx * cy * sz - sx * sy * cz ; out [ 3 ] = cx * cy * cz + sx * sy * sz ; return out ; } param { ReadonlyQuat } a returns { String } function str$6 ( a ) { return 'quat(' + a [ 0 ] + ', ' + a [ 1 ] + ', ' + a [ 2 ] + ', ' + a [ 3 ] + ')' ; } param { ReadonlyQuat } a returns { quat } function var clone$6 = clone$5 ; param { Number } x param { Number } y param { Number } z param { Number } w returns { quat } function var fromValues$6 = fromValues$5 ; param { quat } out param { ReadonlyQuat } a returns { quat } function var copy$6 = copy$5 ; param { quat } out param { Number } x param { Number } y param { Number } z param { Number } w returns { quat } function var set$6 = set$5 ; param { quat } out param { ReadonlyQuat } a param { ReadonlyQuat } b returns { quat } function var add$6 = add$5 ; /**
     * Alias for  quat . multiply function var mul$6 = multiply$6 ; param { quat } out param { ReadonlyQuat } a param { Number } b returns { quat } function var scale$6 = scale$5 ; param { ReadonlyQuat } a param { ReadonlyQuat } b returns { Number } function var dot$2 = dot$1 ; param { quat } out param { ReadonlyQuat } a param { ReadonlyQuat } b param { Number } t returns { quat } function var lerp$2 = lerp$1 ; param { ReadonlyQuat } a returns { Number } var length$2 = length$1 ; /**
     * Alias for  quat . length function var len$2 = length$2 ; param { ReadonlyQuat } a returns { Number } function var squaredLength$2 = squaredLength$1 ; /**
     * Alias for  quat . squaredLength function var sqrLen$2 = squaredLength$2 ; param { quat } out param { ReadonlyQuat } a returns { quat } function var normalize$2 = normalize$1 ; param { ReadonlyQuat } a param { ReadonlyQuat } b returns { Boolean } var exactEquals$6 = exactEquals$5 ; param { ReadonlyQuat } a param { ReadonlyQuat } b returns { Boolean } var equals$7 = equals$6 ; param { quat } out param { ReadonlyVec3 } a param { ReadonlyVec3 } b returns { quat } var rotationTo = ( function ( ) { var tmpvec3 = create$4 ( ) ; var xUnitVec3 = fromValues$4 ( 1 , 0 , 0 ) ; var yUnitVec3 = fromValues$4 ( 0 , 1 , 0 ) ; return function ( out , a , b ) { var dot$1 = dot ( a , b ) ; if ( dot$1 < - 0.999999 ) { cross ( tmpvec3 , xUnitVec3 , a ) ; if ( len ( tmpvec3 ) < 0.000001 ) cross ( tmpvec3 , yUnitVec3 , a ) ; normalize ( tmpvec3 , tmpvec3 ) ; setAxisAngle ( out , tmpvec3 , Math . PI ) ; return out ; } else if ( dot$1 > 0.999999 ) { out [ 0 ] = 0 ; out [ 1 ] = 0 ; out [ 2 ] = 0 ; out [ 3 ] = 1 ; return out ; } else { cross ( tmpvec3 , a , b ) ; out [ 0 ] = tmpvec3 [ 0 ] ; out [ 1 ] = tmpvec3 [ 1 ] ; out [ 2 ] = tmpvec3 [ 2 ] ; out [ 3 ] = 1 + dot$1 ; return normalize$2 ( out , out ) ; } } ; } ) ( ) ; param { quat } out param { ReadonlyQuat } a param { ReadonlyQuat } b param { ReadonlyQuat } c param { ReadonlyQuat } d param { Number } t returns { quat } var sqlerp = ( function ( ) { var temp1 = create$6 ( ) ; var temp2 = create$6 ( ) ; return function ( out , a , b , c , d , t ) { slerp ( temp1 , a , d , t ) ; slerp ( temp2 , b , c , t ) ; slerp ( out , temp1 , temp2 , 2 * t * ( 1 - t ) ) ; return out ; } ; } ) ( ) ; param { ReadonlyVec3 } view param { ReadonlyVec3 } right param { ReadonlyVec3 } up returns { quat } var setAxes = ( function ( ) { var matr = create$2 ( ) ; return function ( out , view , right , up ) { matr [ 0 ] = right [ 0 ] ; matr [ 3 ] = right [ 1 ] ; matr [ 6 ] = right [ 2 ] ; matr [ 1 ] = up [ 0 ] ; matr [ 4 ] = up [ 1 ] ; matr [ 7 ] = up [ 2 ] ; matr [ 2 ] = - view [ 0 ] ; matr [ 5 ] = - view [ 1 ] ; matr [ 8 ] = - view [ 2 ] ; return normalize$2 ( out , fromMat3 ( out , matr ) ) ; } ; } ) ( ) ; var quat = Object . freeze ( { __proto__ : null , create : create$6 , identity : identity$4 , setAxisAngle : setAxisAngle , getAxisAngle : getAxisAngle , getAngle : getAngle , multiply : multiply$6 , rotateX : rotateX$2 , rotateY : rotateY$2 , rotateZ : rotateZ$2 , calculateW : calculateW , exp : exp , ln : ln , pow : pow , slerp : slerp , random : random$2 , invert : invert$4 , conjugate : conjugate , fromMat3 : fromMat3 , fromEuler : fromEuler , str : str$6 , clone : clone$6 , fromValues : fromValues$6 , copy : copy$6 , set : set$6 , add : add$6 , mul : mul$6 , scale : scale$6 , dot : dot$2 , lerp : lerp$2 , length : length$2 , len : len$2 , squaredLength : squaredLength$2 , sqrLen : sqrLen$2 , normalize : normalize$2 , exactEquals : exactEquals$6 , equals : equals$7 , rotationTo : rotationTo , sqlerp : sqlerp , setAxes : setAxes , } ) ; module returns { quat2 } function create$7 ( ) { var dq = new ARRAY_TYPE ( 8 ) ; if ( ARRAY_TYPE != Float32Array ) { dq [ 0 ] = 0 ; dq [ 1 ] = 0 ; dq [ 2 ] = 0 ; dq [ 4 ] = 0 ; dq [ 5 ] = 0 ; dq [ 6 ] = 0 ; dq [ 7 ] = 0 ; } dq [ 3 ] = 1 ; return dq ; } param { ReadonlyQuat2 } a returns { quat2 } function function clone$7 ( a ) { var dq = new ARRAY_TYPE ( 8 ) ; dq [ 0 ] = a [ 0 ] ; dq [ 1 ] = a [ 1 ] ; dq [ 2 ] = a [ 2 ] ; dq [ 3 ] = a [ 3 ] ; dq [ 4 ] = a [ 4 ] ; dq [ 5 ] = a [ 5 ] ; dq [ 6 ] = a [ 6 ] ; dq [ 7 ] = a [ 7 ] ; return dq ; } param { Number } x1 param { Number } y1 param { Number } z1 param { Number } w1 param { Number } x2 param { Number } y2 param { Number } z2 param { Number } w2 returns { quat2 } function function fromValues$7 ( x1 , y1 , z1 , w1 , x2 , y2 , z2 , w2 ) { var dq = new ARRAY_TYPE ( 8 ) ; dq [ 0 ] = x1 ; dq [ 1 ] = y1 ; dq [ 2 ] = z1 ; dq [ 3 ] = w1 ; dq [ 4 ] = x2 ; dq [ 5 ] = y2 ; dq [ 6 ] = z2 ; dq [ 7 ] = w2 ; return dq ; } param { Number } x1 param { Number } y1 param { Number } z1 param { Number } w1 param { Number } x2 param { Number } y2 param { Number } z2 returns { quat2 } function function fromRotationTranslationValues ( x1 , y1 , z1 , w1 , x2 , y2 , z2 ) { var dq = new ARRAY_TYPE ( 8 ) ; dq [ 0 ] = x1 ; dq [ 1 ] = y1 ; dq [ 2 ] = z1 ; dq [ 3 ] = w1 ; var ax = x2 * 0.5 , ay = y2 * 0.5 , az = z2 * 0.5 ; dq [ 4 ] = ax * w1 + ay * z1 - az * y1 ; dq [ 5 ] = ay * w1 + az * x1 - ax * z1 ; dq [ 6 ] = az * w1 + ax * y1 - ay * x1 ; dq [ 7 ] = - ax * x1 - ay * y1 - az * z1 ; return dq ; } param { ReadonlyQuat2 } dual param { ReadonlyQuat } q param { ReadonlyVec3 } t returns { quat2 } function function fromRotationTranslation$1 ( out , q , t ) { var ax = t [ 0 ] * 0.5 , ay = t [ 1 ] * 0.5 , az = t [ 2 ] * 0.5 , bx = q [ 0 ] , by = q [ 1 ] , bz = q [ 2 ] , bw = q [ 3 ] ; out [ 0 ] = bx ; out [ 1 ] = by ; out [ 2 ] = bz ; out [ 3 ] = bw ; out [ 4 ] = ax * bw + ay * bz - az * by ; out [ 5 ] = ay * bw + az * bx - ax * bz ; out [ 6 ] = az * bw + ax * by - ay * bx ; out [ 7 ] = - ax * bx - ay * by - az * bz ; return out ; } param { ReadonlyQuat2 } dual param { ReadonlyVec3 } t returns { quat2 } function function fromTranslation$3 ( out , t ) { out [ 0 ] = 0 ; out [ 1 ] = 0 ; out [ 2 ] = 0 ; out [ 3 ] = 1 ; out [ 4 ] = t [ 0 ] * 0.5 ; out [ 5 ] = t [ 1 ] * 0.5 ; out [ 6 ] = t [ 2 ] * 0.5 ; out [ 7 ] = 0 ; return out ; } param { ReadonlyQuat2 } dual param { ReadonlyQuat } q returns { quat2 } function function fromRotation$4 ( out , q ) { out [ 0 ] = q [ 0 ] ; out [ 1 ] = q [ 1 ] ; out [ 2 ] = q [ 2 ] ; out [ 3 ] = q [ 3 ] ; out [ 4 ] = 0 ; out [ 5 ] = 0 ; out [ 6 ] = 0 ; out [ 7 ] = 0 ; return out ; } param { quat2 } out param { ReadonlyMat4 } a returns { quat2 } function function fromMat4$1 ( out , a ) { var outer = create$6 ( ) ; getRotation ( outer , a ) ; var t = new ARRAY_TYPE ( 3 ) ; getTranslation ( t , a ) ; fromRotationTranslation$1 ( out , outer , t ) ; return out ; } param { quat2 } out param { ReadonlyQuat2 } a returns { quat2 } function function copy$7 ( out , a ) { out [ 0 ] = a [ 0 ] ; out [ 1 ] = a [ 1 ] ; out [ 2 ] = a [ 2 ] ; out [ 3 ] = a [ 3 ] ; out [ 4 ] = a [ 4 ] ; out [ 5 ] = a [ 5 ] ; out [ 6 ] = a [ 6 ] ; out [ 7 ] = a [ 7 ] ; return out ; } param { quat2 } out returns { quat2 } function identity$5 ( out ) { out [ 0 ] = 0 ; out [ 1 ] = 0 ; out [ 2 ] = 0 ; out [ 3 ] = 1 ; out [ 4 ] = 0 ; out [ 5 ] = 0 ; out [ 6 ] = 0 ; out [ 7 ] = 0 ; return out ; } param { quat2 } out param { Number } x1 param { Number } y1 param { Number } z1 param { Number } w1 param { Number } x2 param { Number } y2 param { Number } z2 param { Number } w2 returns { quat2 } function function set$7 ( out , x1 , y1 , z1 , w1 , x2 , y2 , z2 , w2 ) { out [ 0 ] = x1 ; out [ 1 ] = y1 ; out [ 2 ] = z1 ; out [ 3 ] = w1 ; out [ 4 ] = x2 ; out [ 5 ] = y2 ; out [ 6 ] = z2 ; out [ 7 ] = w2 ; return out ; } param { quat } out param { ReadonlyQuat2 } a return { quat } var getReal = copy$6 ; param { quat } out param { ReadonlyQuat2 } a return { quat } function getDual ( out , a ) { out [ 0 ] = a [ 4 ] ; out [ 1 ] = a [ 5 ] ; out [ 2 ] = a [ 6 ] ; out [ 3 ] = a [ 7 ] ; return out ; } param { quat2 } out param { ReadonlyQuat } q returns { quat2 } function var setReal = copy$6 ; param { quat2 } out param { ReadonlyQuat } q returns { quat2 } function function setDual ( out , q ) { out [ 4 ] = q [ 0 ] ; out [ 5 ] = q [ 1 ] ; out [ 6 ] = q [ 2 ] ; out [ 7 ] = q [ 3 ] ; return out ; } param { vec3 } out param { ReadonlyQuat2 } a return { vec3 } function getTranslation$1 ( out , a ) { var ax = a [ 4 ] , ay = a [ 5 ] , az = a [ 6 ] , aw = a [ 7 ] , bx = - a [ 0 ] , by = - a [ 1 ] , bz = - a [ 2 ] , bw = a [ 3 ] ; out [ 0 ] = ( ax * bw + aw * bx + ay * bz - az * by ) * 2 ; out [ 1 ] = ( ay * bw + aw * by + az * bx - ax * bz ) * 2 ; out [ 2 ] = ( az * bw + aw * bz + ax * by - ay * bx ) * 2 ; return out ; } param { quat2 } out param { ReadonlyQuat2 } a param { ReadonlyVec3 } v returns { quat2 } function translate$3 ( out , a , v ) { var ax1 = a [ 0 ] , ay1 = a [ 1 ] , az1 = a [ 2 ] , aw1 = a [ 3 ] , bx1 = v [ 0 ] * 0.5 , by1 = v [ 1 ] * 0.5 , bz1 = v [ 2 ] * 0.5 , ax2 = a [ 4 ] , ay2 = a [ 5 ] , az2 = a [ 6 ] , aw2 = a [ 7 ] ; out [ 0 ] = ax1 ; out [ 1 ] = ay1 ; out [ 2 ] = az1 ; out [ 3 ] = aw1 ; out [ 4 ] = aw1 * bx1 + ay1 * bz1 - az1 * by1 + ax2 ; out [ 5 ] = aw1 * by1 + az1 * bx1 - ax1 * bz1 + ay2 ; out [ 6 ] = aw1 * bz1 + ax1 * by1 - ay1 * bx1 + az2 ; out [ 7 ] = - ax1 * bx1 - ay1 * by1 - az1 * bz1 + aw2 ; return out ; } param { quat2 } out param { ReadonlyQuat2 } a param { number } rad returns { quat2 } function rotateX$3 ( out , a , rad ) { var bx = - a [ 0 ] , by = - a [ 1 ] , bz = - a [ 2 ] , bw = a [ 3 ] , ax = a [ 4 ] , ay = a [ 5 ] , az = a [ 6 ] , aw = a [ 7 ] , ax1 = ax * bw + aw * bx + ay * bz - az * by , ay1 = ay * bw + aw * by + az * bx - ax * bz , az1 = az * bw + aw * bz + ax * by - ay * bx , aw1 = aw * bw - ax * bx - ay * by - az * bz ; rotateX$2 ( out , a , rad ) ; bx = out [ 0 ] ; by = out [ 1 ] ; bz = out [ 2 ] ; bw = out [ 3 ] ; out [ 4 ] = ax1 * bw + aw1 * bx + ay1 * bz - az1 * by ; out [ 5 ] = ay1 * bw + aw1 * by + az1 * bx - ax1 * bz ; out [ 6 ] = az1 * bw + aw1 * bz + ax1 * by - ay1 * bx ; out [ 7 ] = aw1 * bw - ax1 * bx - ay1 * by - az1 * bz ; return out ; } param { quat2 } out param { ReadonlyQuat2 } a param { number } rad returns { quat2 } function rotateY$3 ( out , a , rad ) { var bx = - a [ 0 ] , by = - a [ 1 ] , bz = - a [ 2 ] , bw = a [ 3 ] , ax = a [ 4 ] , ay = a [ 5 ] , az = a [ 6 ] , aw = a [ 7 ] , ax1 = ax * bw + aw * bx + ay * bz - az * by , ay1 = ay * bw + aw * by + az * bx - ax * bz , az1 = az * bw + aw * bz + ax * by - ay * bx , aw1 = aw * bw - ax * bx - ay * by - az * bz ; rotateY$2 ( out , a , rad ) ; bx = out [ 0 ] ; by = out [ 1 ] ; bz = out [ 2 ] ; bw = out [ 3 ] ; out [ 4 ] = ax1 * bw + aw1 * bx + ay1 * bz - az1 * by ; out [ 5 ] = ay1 * bw + aw1 * by + az1 * bx - ax1 * bz ; out [ 6 ] = az1 * bw + aw1 * bz + ax1 * by - ay1 * bx ; out [ 7 ] = aw1 * bw - ax1 * bx - ay1 * by - az1 * bz ; return out ; } param { quat2 } out param { ReadonlyQuat2 } a param { number } rad returns { quat2 } function rotateZ$3 ( out , a , rad ) { var bx = - a [ 0 ] , by = - a [ 1 ] , bz = - a [ 2 ] , bw = a [ 3 ] , ax = a [ 4 ] , ay = a [ 5 ] , az = a [ 6 ] , aw = a [ 7 ] , ax1 = ax * bw + aw * bx + ay * bz - az * by , ay1 = ay * bw + aw * by + az * bx - ax * bz , az1 = az * bw + aw * bz + ax * by - ay * bx , aw1 = aw * bw - ax * bx - ay * by - az * bz ; rotateZ$2 ( out , a , rad ) ; bx = out [ 0 ] ; by = out [ 1 ] ; bz = out [ 2 ] ; bw = out [ 3 ] ; out [ 4 ] = ax1 * bw + aw1 * bx + ay1 * bz - az1 * by ; out [ 5 ] = ay1 * bw + aw1 * by + az1 * bx - ax1 * bz ; out [ 6 ] = az1 * bw + aw1 * bz + ax1 * by - ay1 * bx ; out [ 7 ] = aw1 * bw - ax1 * bx - ay1 * by - az1 * bz ; return out ; } param { quat2 } out param { ReadonlyQuat2 } a param { ReadonlyQuat } q returns { quat2 } function rotateByQuatAppend ( out , a , q ) { var qx = q [ 0 ] , qy = q [ 1 ] , qz = q [ 2 ] , qw = q [ 3 ] , ax = a [ 0 ] , ay = a [ 1 ] , az = a [ 2 ] , aw = a [ 3 ] ; out [ 0 ] = ax * qw + aw * qx + ay * qz - az * qy ; out [ 1 ] = ay * qw + aw * qy + az * qx - ax * qz ; out [ 2 ] = az * qw + aw * qz + ax * qy - ay * qx ; out [ 3 ] = aw * qw - ax * qx - ay * qy - az * qz ; ax = a [ 4 ] ; ay = a [ 5 ] ; az = a [ 6 ] ; aw = a [ 7 ] ; out [ 4 ] = ax * qw + aw * qx + ay * qz - az * qy ; out [ 5 ] = ay * qw + aw * qy + az * qx - ax * qz ; out [ 6 ] = az * qw + aw * qz + ax * qy - ay * qx ; out [ 7 ] = aw * qw - ax * qx - ay * qy - az * qz ; return out ; } param { quat2 } out param { ReadonlyQuat } q param { ReadonlyQuat2 } a returns { quat2 } function rotateByQuatPrepend ( out , q , a ) { var qx = q [ 0 ] , qy = q [ 1 ] , qz = q [ 2 ] , qw = q [ 3 ] , bx = a [ 0 ] , by = a [ 1 ] , bz = a [ 2 ] , bw = a [ 3 ] ; out [ 0 ] = qx * bw + qw * bx + qy * bz - qz * by ; out [ 1 ] = qy * bw + qw * by + qz * bx - qx * bz ; out [ 2 ] = qz * bw + qw * bz + qx * by - qy * bx ; out [ 3 ] = qw * bw - qx * bx - qy * by - qz * bz ; bx = a [ 4 ] ; by = a [ 5 ] ; bz = a [ 6 ] ; bw = a [ 7 ] ; out [ 4 ] = qx * bw + qw * bx + qy * bz - qz * by ; out [ 5 ] = qy * bw + qw * by + qz * bx - qx * bz ; out [ 6 ] = qz * bw + qw * bz + qx * by - qy * bx ; out [ 7 ] = qw * bw - qx * bx - qy * by - qz * bz ; return out ; } param { quat2 } out param { ReadonlyQuat2 } a param { ReadonlyVec3 } axis param { Number } rad returns { quat2 } function rotateAroundAxis ( out , a , axis , rad ) { if ( Math . abs ( rad ) < EPSILON ) { return copy$7 ( out , a ) ; } var axisLength = Math . hypot ( axis [ 0 ] , axis [ 1 ] , axis [ 2 ] ) ; rad = rad * 0.5 ; var s = Math . sin ( rad ) ; var bx = ( s * axis [ 0 ] ) / axisLength ; var by = ( s * axis [ 1 ] ) / axisLength ; var bz = ( s * axis [ 2 ] ) / axisLength ; var bw = Math . cos ( rad ) ; var ax1 = a [ 0 ] , ay1 = a [ 1 ] , az1 = a [ 2 ] , aw1 = a [ 3 ] ; out [ 0 ] = ax1 * bw + aw1 * bx + ay1 * bz - az1 * by ; out [ 1 ] = ay1 * bw + aw1 * by + az1 * bx - ax1 * bz ; out [ 2 ] = az1 * bw + aw1 * bz + ax1 * by - ay1 * bx ; out [ 3 ] = aw1 * bw - ax1 * bx - ay1 * by - az1 * bz ; var ax = a [ 4 ] , ay = a [ 5 ] , az = a [ 6 ] , aw = a [ 7 ] ; out [ 4 ] = ax * bw + aw * bx + ay * bz - az * by ; out [ 5 ] = ay * bw + aw * by + az * bx - ax * bz ; out [ 6 ] = az * bw + aw * bz + ax * by - ay * bx ; out [ 7 ] = aw * bw - ax * bx - ay * by - az * bz ; return out ; } param { quat2 } out param { ReadonlyQuat2 } a param { ReadonlyQuat2 } b returns { quat2 } function function add$7 ( out , a , b ) { out [ 0 ] = a [ 0 ] + b [ 0 ] ; out [ 1 ] = a [ 1 ] + b [ 1 ] ; out [ 2 ] = a [ 2 ] + b [ 2 ] ; out [ 3 ] = a [ 3 ] + b [ 3 ] ; out [ 4 ] = a [ 4 ] + b [ 4 ] ; out [ 5 ] = a [ 5 ] + b [ 5 ] ; out [ 6 ] = a [ 6 ] + b [ 6 ] ; out [ 7 ] = a [ 7 ] + b [ 7 ] ; return out ; } param { quat2 } out param { ReadonlyQuat2 } a param { ReadonlyQuat2 } b returns { quat2 } function multiply$7 ( out , a , b ) { var ax0 = a [ 0 ] , ay0 = a [ 1 ] , az0 = a [ 2 ] , aw0 = a [ 3 ] , bx1 = b [ 4 ] , by1 = b [ 5 ] , bz1 = b [ 6 ] , bw1 = b [ 7 ] , ax1 = a [ 4 ] , ay1 = a [ 5 ] , az1 = a [ 6 ] , aw1 = a [ 7 ] , bx0 = b [ 0 ] , by0 = b [ 1 ] , bz0 = b [ 2 ] , bw0 = b [ 3 ] ; out [ 0 ] = ax0 * bw0 + aw0 * bx0 + ay0 * bz0 - az0 * by0 ; out [ 1 ] = ay0 * bw0 + aw0 * by0 + az0 * bx0 - ax0 * bz0 ; out [ 2 ] = az0 * bw0 + aw0 * bz0 + ax0 * by0 - ay0 * bx0 ; out [ 3 ] = aw0 * bw0 - ax0 * bx0 - ay0 * by0 - az0 * bz0 ; out [ 4 ] = ax0 * bw1 + aw0 * bx1 + ay0 * bz1 - az0 * by1 + ax1 * bw0 + aw1 * bx0 + ay1 * bz0 - az1 * by0 ; out [ 5 ] = ay0 * bw1 + aw0 * by1 + az0 * bx1 - ax0 * bz1 + ay1 * bw0 + aw1 * by0 + az1 * bx0 - ax1 * bz0 ; out [ 6 ] = az0 * bw1 + aw0 * bz1 + ax0 * by1 - ay0 * bx1 + az1 * bw0 + aw1 * bz0 + ax1 * by0 - ay1 * bx0 ; out [ 7 ] = aw0 * bw1 - ax0 * bx1 - ay0 * by1 - az0 * bz1 + aw1 * bw0 - ax1 * bx0 - ay1 * by0 - az1 * bz0 ; return out ; } /**
     * Alias for  quat2 . multiply function var mul$7 = multiply$7 ; param { quat2 } out param { ReadonlyQuat2 } a param { Number } b returns { quat2 } function function scale$7 ( out , a , b ) { out [ 0 ] = a [ 0 ] * b ; out [ 1 ] = a [ 1 ] * b ; out [ 2 ] = a [ 2 ] * b ; out [ 3 ] = a [ 3 ] * b ; out [ 4 ] = a [ 4 ] * b ; out [ 5 ] = a [ 5 ] * b ; out [ 6 ] = a [ 6 ] * b ; out [ 7 ] = a [ 7 ] * b ; return out ; } param { ReadonlyQuat2 } a param { ReadonlyQuat2 } b returns { Number } function var dot$3 = dot$2 ; param { quat2 } out param { ReadonlyQuat2 } a param { ReadonlyQuat2 } b param { Number } t returns { quat2 } function lerp$3 ( out , a , b , t ) { var mt = 1 - t ; if ( dot$3 ( a , b ) < 0 ) t = - t ; out [ 0 ] = a [ 0 ] * mt + b [ 0 ] * t ; out [ 1 ] = a [ 1 ] * mt + b [ 1 ] * t ; out [ 2 ] = a [ 2 ] * mt + b [ 2 ] * t ; out [ 3 ] = a [ 3 ] * mt + b [ 3 ] * t ; out [ 4 ] = a [ 4 ] * mt + b [ 4 ] * t ; out [ 5 ] = a [ 5 ] * mt + b [ 5 ] * t ; out [ 6 ] = a [ 6 ] * mt + b [ 6 ] * t ; out [ 7 ] = a [ 7 ] * mt + b [ 7 ] * t ; return out ; } param { quat2 } out param { ReadonlyQuat2 } a returns { quat2 } function invert$5 ( out , a ) { var sqlen = squaredLength$3 ( a ) ; out [ 0 ] = - a [ 0 ] / sqlen ; out [ 1 ] = - a [ 1 ] / sqlen ; out [ 2 ] = - a [ 2 ] / sqlen ; out [ 3 ] = a [ 3 ] / sqlen ; out [ 4 ] = - a [ 4 ] / sqlen ; out [ 5 ] = - a [ 5 ] / sqlen ; out [ 6 ] = - a [ 6 ] / sqlen ; out [ 7 ] = a [ 7 ] / sqlen ; return out ; } param { quat2 } out param { ReadonlyQuat2 } a returns { quat2 } function conjugate$1 ( out , a ) { out [ 0 ] = - a [ 0 ] ; out [ 1 ] = - a [ 1 ] ; out [ 2 ] = - a [ 2 ] ; out [ 3 ] = a [ 3 ] ; out [ 4 ] = - a [ 4 ] ; out [ 5 ] = - a [ 5 ] ; out [ 6 ] = - a [ 6 ] ; out [ 7 ] = a [ 7 ] ; return out ; } param { ReadonlyQuat2 } a returns { Number } function var length$3 = length$2 ; /**
     * Alias for  quat2 . length function var len$3 = length$3 ; param { ReadonlyQuat2 } a returns { Number } function var squaredLength$3 = squaredLength$2 ; /**
     * Alias for  quat2 . squaredLength function var sqrLen$3 = squaredLength$3 ; param { quat2 } out param { ReadonlyQuat2 } a returns { quat2 } function function normalize$3 ( out , a ) { var magnitude = squaredLength$3 ( a ) ; if ( magnitude > 0 ) { magnitude = Math . sqrt ( magnitude ) ; var a0 = a [ 0 ] / magnitude ; var a1 = a [ 1 ] / magnitude ; var a2 = a [ 2 ] / magnitude ; var a3 = a [ 3 ] / magnitude ; var b0 = a [ 4 ] ; var b1 = a [ 5 ] ; var b2 = a [ 6 ] ; var b3 = a [ 7 ] ; var a_dot_b = a0 * b0 + a1 * b1 + a2 * b2 + a3 * b3 ; out [ 0 ] = a0 ; out [ 1 ] = a1 ; out [ 2 ] = a2 ; out [ 3 ] = a3 ; out [ 4 ] = ( b0 - a0 * a_dot_b ) / magnitude ; out [ 5 ] = ( b1 - a1 * a_dot_b ) / magnitude ; out [ 6 ] = ( b2 - a2 * a_dot_b ) / magnitude ; out [ 7 ] = ( b3 - a3 * a_dot_b ) / magnitude ; } return out ; } param { ReadonlyQuat2 } a returns { String } function str$7 ( a ) { return 'quat2(' + a [ 0 ] + ', ' + a [ 1 ] + ', ' + a [ 2 ] + ', ' + a [ 3 ] + ', ' + a [ 4 ] + ', ' + a [ 5 ] + ', ' + a [ 6 ] + ', ' + a [ 7 ] + ')' ; } param { ReadonlyQuat2 } a param { ReadonlyQuat2 } b returns { Boolean } function exactEquals$7 ( a , b ) { return a [ 0 ] === b [ 0 ] && a [ 1 ] === b [ 1 ] && a [ 2 ] === b [ 2 ] && a [ 3 ] === b [ 3 ] && a [ 4 ] === b [ 4 ] && a [ 5 ] === b [ 5 ] && a [ 6 ] === b [ 6 ] && a [ 7 ] === b [ 7 ] ; } param { ReadonlyQuat2 } a param { ReadonlyQuat2 } b returns { Boolean } function equals$8 ( a , b ) { var a0 = a [ 0 ] , a1 = a [ 1 ] , a2 = a [ 2 ] , a3 = a [ 3 ] , a4 = a [ 4 ] , a5 = a [ 5 ] , a6 = a [ 6 ] , a7 = a [ 7 ] ; var b0 = b [ 0 ] , b1 = b [ 1 ] , b2 = b [ 2 ] , b3 = b [ 3 ] , b4 = b [ 4 ] , b5 = b [ 5 ] , b6 = b [ 6 ] , b7 = b [ 7 ] ; return ( Math . abs ( a0 - b0 ) <= EPSILON * Math . max ( 1.0 , Math . abs ( a0 ) , Math . abs ( b0 ) ) && Math . abs ( a1 - b1 ) <= EPSILON * Math . max ( 1.0 , Math . abs ( a1 ) , Math . abs ( b1 ) ) && Math . abs ( a2 - b2 ) <= EPSILON * Math . max ( 1.0 , Math . abs ( a2 ) , Math . abs ( b2 ) ) && Math . abs ( a3 - b3 ) <= EPSILON * Math . max ( 1.0 , Math . abs ( a3 ) , Math . abs ( b3 ) ) && Math . abs ( a4 - b4 ) <= EPSILON * Math . max ( 1.0 , Math . abs ( a4 ) , Math . abs ( b4 ) ) && Math . abs ( a5 - b5 ) <= EPSILON * Math . max ( 1.0 , Math . abs ( a5 ) , Math . abs ( b5 ) ) && Math . abs ( a6 - b6 ) <= EPSILON * Math . max ( 1.0 , Math . abs ( a6 ) , Math . abs ( b6 ) ) && Math . abs ( a7 - b7 ) <= EPSILON * Math . max ( 1.0 , Math . abs ( a7 ) , Math . abs ( b7 ) ) ) ; } var quat2 = Object . freeze ( { __proto__ : null , create : create$7 , clone : clone$7 , fromValues : fromValues$7 , fromRotationTranslationValues : fromRotationTranslationValues , fromRotationTranslation : fromRotationTranslation$1 , fromTranslation : fromTranslation$3 , fromRotation : fromRotation$4 , fromMat4 : fromMat4$1 , copy : copy$7 , identity : identity$5 , set : set$7 , getReal : getReal , getDual : getDual , setReal : setReal , setDual : setDual , getTranslation : getTranslation$1 , translate : translate$3 , rotateX : rotateX$3 , rotateY : rotateY$3 , rotateZ : rotateZ$3 , rotateByQuatAppend : rotateByQuatAppend , rotateByQuatPrepend : rotateByQuatPrepend , rotateAroundAxis : rotateAroundAxis , add : add$7 , multiply : multiply$7 , mul : mul$7 , scale : scale$7 , dot : dot$3 , lerp : lerp$3 , invert : invert$5 , conjugate : conjugate$1 , length : length$3 , len : len$3 , squaredLength : squaredLength$3 , sqrLen : sqrLen$3 , normalize : normalize$3 , str : str$7 , exactEquals : exactEquals$7 , equals : equals$8 , } ) ; module returns { vec2 } function create$8 ( ) { var out = new ARRAY_TYPE ( 2 ) ; if ( ARRAY_TYPE != Float32Array ) { out [ 0 ] = 0 ; out [ 1 ] = 0 ; } return out ; } param { ReadonlyVec2 } a returns { vec2 } function clone$8 ( a ) { var out = new ARRAY_TYPE ( 2 ) ; out [ 0 ] = a [ 0 ] ; out [ 1 ] = a [ 1 ] ; return out ; } param { Number } x param { Number } y returns { vec2 } function fromValues$8 ( x , y ) { var out = new ARRAY_TYPE ( 2 ) ; out [ 0 ] = x ; out [ 1 ] = y ; return out ; } param { vec2 } out param { ReadonlyVec2 } a returns { vec2 } function copy$8 ( out , a ) { out [ 0 ] = a [ 0 ] ; out [ 1 ] = a [ 1 ] ; return out ; } param { vec2 } out param { Number } x param { Number } y returns { vec2 } function set$8 ( out , x , y ) { out [ 0 ] = x ; out [ 1 ] = y ; return out ; } param { vec2 } out param { ReadonlyVec2 } a param { ReadonlyVec2 } b returns { vec2 } function add$8 ( out , a , b ) { out [ 0 ] = a [ 0 ] + b [ 0 ] ; out [ 1 ] = a [ 1 ] + b [ 1 ] ; return out ; } param { vec2 } out param { ReadonlyVec2 } a param { ReadonlyVec2 } b returns { vec2 } function subtract$6 ( out , a , b ) { out [ 0 ] = a [ 0 ] - b [ 0 ] ; out [ 1 ] = a [ 1 ] - b [ 1 ] ; return out ; } param { vec2 } out param { ReadonlyVec2 } a param { ReadonlyVec2 } b returns { vec2 } function multiply$8 ( out , a , b ) { out [ 0 ] = a [ 0 ] * b [ 0 ] ; out [ 1 ] = a [ 1 ] * b [ 1 ] ; return out ; } param { vec2 } out param { ReadonlyVec2 } a param { ReadonlyVec2 } b returns { vec2 } function divide$2 ( out , a , b ) { out [ 0 ] = a [ 0 ] / b [ 0 ] ; out [ 1 ] = a [ 1 ] / b [ 1 ] ; return out ; } param { vec2 } out param { ReadonlyVec2 } a returns { vec2 } function ceil$2 ( out , a ) { out [ 0 ] = Math . ceil ( a [ 0 ] ) ; out [ 1 ] = Math . ceil ( a [ 1 ] ) ; return out ; } param { vec2 } out param { ReadonlyVec2 } a returns { vec2 } function floor$2 ( out , a ) { out [ 0 ] = Math . floor ( a [ 0 ] ) ; out [ 1 ] = Math . floor ( a [ 1 ] ) ; return out ; } param { vec2 } out param { ReadonlyVec2 } a param { ReadonlyVec2 } b returns { vec2 } function min$2 ( out , a , b ) { out [ 0 ] = Math . min ( a [ 0 ] , b [ 0 ] ) ; out [ 1 ] = Math . min ( a [ 1 ] , b [ 1 ] ) ; return out ; } param { vec2 } out param { ReadonlyVec2 } a param { ReadonlyVec2 } b returns { vec2 } function max$2 ( out , a , b ) { out [ 0 ] = Math . max ( a [ 0 ] , b [ 0 ] ) ; out [ 1 ] = Math . max ( a [ 1 ] , b [ 1 ] ) ; return out ; } param { vec2 } out param { ReadonlyVec2 } a returns { vec2 } function round$2 ( out , a ) { out [ 0 ] = Math . round ( a [ 0 ] ) ; out [ 1 ] = Math . round ( a [ 1 ] ) ; return out ; } param { vec2 } out param { ReadonlyVec2 } a param { Number } b returns { vec2 } function scale$8 ( out , a , b ) { out [ 0 ] = a [ 0 ] * b ; out [ 1 ] = a [ 1 ] * b ; return out ; } param { vec2 } out param { ReadonlyVec2 } a param { ReadonlyVec2 } b param { Number } scale returns { vec2 } function scaleAndAdd$2 ( out , a , b , scale ) { out [ 0 ] = a [ 0 ] + b [ 0 ] * scale ; out [ 1 ] = a [ 1 ] + b [ 1 ] * scale ; return out ; } param { ReadonlyVec2 } a param { ReadonlyVec2 } b returns { Number } function distance$2 ( a , b ) { var x = b [ 0 ] - a [ 0 ] , y = b [ 1 ] - a [ 1 ] ; return Math . hypot ( x , y ) ; } param { ReadonlyVec2 } a param { ReadonlyVec2 } b returns { Number } function squaredDistance$2 ( a , b ) { var x = b [ 0 ] - a [ 0 ] , y = b [ 1 ] - a [ 1 ] ; return x * x + y * y ; } param { ReadonlyVec2 } a returns { Number } function length$4 ( a ) { var x = a [ 0 ] , y = a [ 1 ] ; return Math . hypot ( x , y ) ; } param { ReadonlyVec2 } a returns { Number } function squaredLength$4 ( a ) { var x = a [ 0 ] , y = a [ 1 ] ; return x * x + y * y ; } param { vec2 } out param { ReadonlyVec2 } a returns { vec2 } function negate$2 ( out , a ) { out [ 0 ] = - a [ 0 ] ; out [ 1 ] = - a [ 1 ] ; return out ; } param { vec2 } out param { ReadonlyVec2 } a returns { vec2 } function inverse$2 ( out , a ) { out [ 0 ] = 1.0 / a [ 0 ] ; out [ 1 ] = 1.0 / a [ 1 ] ; return out ; } param { vec2 } out param { ReadonlyVec2 } a returns { vec2 } function normalize$4 ( out , a ) { var x = a [ 0 ] , y = a [ 1 ] ; var len = x * x + y * y ; if ( len > 0 ) { len = 1 / Math . sqrt ( len ) ; } out [ 0 ] = a [ 0 ] * len ; out [ 1 ] = a [ 1 ] * len ; return out ; } param { ReadonlyVec2 } a param { ReadonlyVec2 } b returns { Number } function dot$4 ( a , b ) { return a [ 0 ] * b [ 0 ] + a [ 1 ] * b [ 1 ] ; } param { vec3 } out param { ReadonlyVec2 } a param { ReadonlyVec2 } b returns { vec3 } function cross$2 ( out , a , b ) { var z = a [ 0 ] * b [ 1 ] - a [ 1 ] * b [ 0 ] ; out [ 0 ] = out [ 1 ] = 0 ; out [ 2 ] = z ; return out ; } param { vec2 } out param { ReadonlyVec2 } a param { ReadonlyVec2 } b param { Number } t returns { vec2 } function lerp$4 ( out , a , b , t ) { var ax = a [ 0 ] , ay = a [ 1 ] ; out [ 0 ] = ax + t * ( b [ 0 ] - ax ) ; out [ 1 ] = ay + t * ( b [ 1 ] - ay ) ; return out ; } param { vec2 } out param { Number } scale returns { vec2 } function random$3 ( out , scale ) { scale = scale || 1.0 ; var r = RANDOM ( ) * 2.0 * Math . PI ; out [ 0 ] = Math . cos ( r ) * scale ; out [ 1 ] = Math . sin ( r ) * scale ; return out ; } param { vec2 } out param { ReadonlyVec2 } a param { ReadonlyMat2 } m returns { vec2 } function transformMat2 ( out , a , m ) { var x = a [ 0 ] , y = a [ 1 ] ; out [ 0 ] = m [ 0 ] * x + m [ 2 ] * y ; out [ 1 ] = m [ 1 ] * x + m [ 3 ] * y ; return out ; } param { vec2 } out param { ReadonlyVec2 } a param { ReadonlyMat2d } m returns { vec2 } function transformMat2d ( out , a , m ) { var x = a [ 0 ] , y = a [ 1 ] ; out [ 0 ] = m [ 0 ] * x + m [ 2 ] * y + m [ 4 ] ; out [ 1 ] = m [ 1 ] * x + m [ 3 ] * y + m [ 5 ] ; return out ; } param { vec2 } out param { ReadonlyVec2 } a param { ReadonlyMat3 } m returns { vec2 } function transformMat3$1 ( out , a , m ) { var x = a [ 0 ] , y = a [ 1 ] ; out [ 0 ] = m [ 0 ] * x + m [ 3 ] * y + m [ 6 ] ; out [ 1 ] = m [ 1 ] * x + m [ 4 ] * y + m [ 7 ] ; return out ; } param { vec2 } out param { ReadonlyVec2 } a param { ReadonlyMat4 } m returns { vec2 } function transformMat4$2 ( out , a , m ) { var x = a [ 0 ] ; var y = a [ 1 ] ; out [ 0 ] = m [ 0 ] * x + m [ 4 ] * y + m [ 12 ] ; out [ 1 ] = m [ 1 ] * x + m [ 5 ] * y + m [ 13 ] ; return out ; } param { vec2 } out param { ReadonlyVec2 } a param { ReadonlyVec2 } b param { Number } rad returns { vec2 } function rotate$4 ( out , a , b , rad ) { var p0 = a [ 0 ] - b [ 0 ] , p1 = a [ 1 ] - b [ 1 ] , sinC = Math . sin ( rad ) , cosC = Math . cos ( rad ) ; out [ 0 ] = p0 * cosC - p1 * sinC + b [ 0 ] ; out [ 1 ] = p0 * sinC + p1 * cosC + b [ 1 ] ; return out ; } param { ReadonlyVec2 } a param { ReadonlyVec2 } b returns { Number } function angle$1 ( a , b ) { var x1 = a [ 0 ] , y1 = a [ 1 ] , x2 = b [ 0 ] , y2 = b [ 1 ] , mag = Math . sqrt ( x1 * x1 + y1 * y1 ) * Math . sqrt ( x2 * x2 + y2 * y2 ) , cosine = mag && ( x1 * x2 + y1 * y2 ) / mag ; return Math . acos ( Math . min ( Math . max ( cosine , - 1 ) , 1 ) ) ; } param { vec2 } out returns { vec2 } function zero$2 ( out ) { out [ 0 ] = 0.0 ; out [ 1 ] = 0.0 ; return out ; } param { ReadonlyVec2 } a returns { String } function str$8 ( a ) { return 'vec2(' + a [ 0 ] + ', ' + a [ 1 ] + ')' ; } param { ReadonlyVec2 } a param { ReadonlyVec2 } b returns { Boolean } function exactEquals$8 ( a , b ) { return a [ 0 ] === b [ 0 ] && a [ 1 ] === b [ 1 ] ; } param { ReadonlyVec2 } a param { ReadonlyVec2 } b returns { Boolean } function equals$9 ( a , b ) { var a0 = a [ 0 ] , a1 = a [ 1 ] ; var b0 = b [ 0 ] , b1 = b [ 1 ] ; return Math . abs ( a0 - b0 ) <= EPSILON * Math . max ( 1.0 , Math . abs ( a0 ) , Math . abs ( b0 ) ) && Math . abs ( a1 - b1 ) <= EPSILON * Math . max ( 1.0 , Math . abs ( a1 ) , Math . abs ( b1 ) ) ; } /**
     * Alias for  vec2 . length function var len$4 = length$4 ; /**
     * Alias for  vec2 . subtract function var sub$6 = subtract$6 ; /**
     * Alias for  vec2 . multiply function var mul$8 = multiply$8 ; /**
     * Alias for  vec2 . divide function var div$2 = divide$2 ; /**
     * Alias for  vec2 . distance function var dist$2 = distance$2 ; /**
     * Alias for  vec2 . squaredDistance function var sqrDist$2 = squaredDistance$2 ; /**
     * Alias for  vec2 . squaredLength function var sqrLen$4 = squaredLength$4 ; param { Array } a param { Number } stride param { Number } offset param { Number } count param { Function } fn param { Object } arg returns { Array } function var forEach$2 = ( function ( ) { var vec = create$8 ( ) ; return function ( a , stride , offset , count , fn , arg ) { var i , l ; if ( ! stride ) { stride = 2 ; } if ( ! offset ) { offset = 0 ; } if ( count ) { l = Math . min ( count * stride + offset , a . length ) ; } else { l = a . length ; } for ( i = offset ; i < l ; i += stride ) { vec [ 0 ] = a [ i ] ; vec [ 1 ] = a [ i + 1 ] ; fn ( vec , vec , arg ) ; a [ i ] = vec [ 0 ] ; a [ i + 1 ] = vec [ 1 ] ; } return a ; } ; } ) ( ) ; var vec2 = Object . freeze ( { __proto__ : null , create : create$8 , clone : clone$8 , fromValues : fromValues$8 , copy : copy$8 , set : set$8 , add : add$8 , subtract : subtract$6 , multiply : multiply$8 , divide : divide$2 , ceil : ceil$2 , floor : floor$2 , min : min$2 , max : max$2 , round : round$2 , scale : scale$8 , scaleAndAdd : scaleAndAdd$2 , distance : distance$2 , squaredDistance : squaredDistance$2 , length : length$4 , squaredLength : squaredLength$4 , negate : negate$2 , inverse : inverse$2 , normalize : normalize$4 , dot : dot$4 , cross : cross$2 , lerp : lerp$4 , random : random$3 , transformMat2 : transformMat2 , transformMat2d : transformMat2d , transformMat3 : transformMat3$1 , transformMat4 : transformMat4$2 , rotate : rotate$4 , angle : angle$1 , zero : zero$2 , str : str$8 , exactEquals : exactEquals$8 , equals : equals$9 , len : len$4 , sub : sub$6 , mul : mul$8 , div : div$2 , dist : dist$2 , sqrDist : sqrDist$2 , sqrLen : sqrLen$4 , forEach : forEach$2 , } ) ; exports . glMatrix = common ; exports . mat2 = mat2 ; exports . mat2d = mat2d ; exports . mat3 = mat3 ; exports . mat4 = mat4 ; exports . quat = quat ; exports . quat2 = quat2 ; exports . vec2 = vec2 ; exports . vec3 = vec3 ; exports . vec4 = vec4 ; Object . defineProperty ( exports , '__esModule' , { value : true } ) ; } ) ;