-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathCindyXR.js
More file actions
660 lines (623 loc) · 252 KB
/
CindyXR.js
File metadata and controls
660 lines (623 loc) · 252 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
(function(){
let coerce={toList:function(f,g=null){return"list"!==f.ctype?(console.log("argument is not a list"),g):f.value},toHomog:function(f,g=[0,0,0,0],G=3){f=coerce.toList(f);if(null===f)return g;g=f.map(coerce.toReal);g.length>G+1&&(console.log("Coordinate vector too long."),g=g.slice(0,G+1));for(;g.length<G;)g.push(0);g.length===G&&g.push(1);return g},toDirection:function(f,g=[0,0,0]){f=coerce.toList(f);if(null===f)return g;g=f.map(coerce.toReal);3<g.length&&(console.log("Coordinate vector too long."),
g=g.slice(0,3));for(;3>g.length;)g.push(0);return g},toDirectionPoint:function(f,g=[0,0,0,0]){f=coerce.toDirection(f,g);f!==g&&(f[3]=0);return f},toColor:function(f,g=[.5,.5,.5]){if("number"===f.ctype){let G=coerce.toInterval(0,1,f);if(!isNaN(G))return[G,G,G]}f=coerce.toList(f);return null===f?g:3!=f.length?(console.log("Not an RGB color vector"),g):f.map(G=>coerce.toInterval(0,1,G))},toReal:function(f,g=Number.NaN){if("number"!==f.ctype)return console.log("argument is not a number"),g;f=f.value;
g=f.real;0!==f.imag&&console.log("complex number is not real");return g},toInt:function(f,g=Number.NaN){if("number"!==f.ctype)return console.log("argument is not a number"),g;g=f.value;f=g.real;g=g.imag;0!==g&&console.log("complex number is not real");g=Math.round(f);g!==f&&console.log("number is not an integer");return g},clamp:function(f,g,G){return G<f?f:G>g?g:G},toInterval:function(f,g,G,K=Number.NaN){return coerce.clamp(f,g,coerce.toReal(G,K))},toString:function(f,g=null){if("string"===f.ctype)return f.value;
console.log("argument is not a string");return g},toEnum:function(f,g,G=null){g=coerce.toString(g,G);if(g!==G&&-1!==f.indexOf(g))return g;console.log("argument is not one of "+f.join(", "));return G},toBool:function(f,g){if("boolean"===f.ctype)return f.value;console.log("argument is not boolean");return g}};function norm3(f){let g=f[0],G=f[1];f=f[2];return Math.sqrt(g*g+G*G+f*f)}function normalized3(f){let g=f[0],G=f[1];f=f[2];let K=1/Math.sqrt(g*g+G*G+f*f);return[K*g,K*G,K*f]}function dehom3(f){let g=1/f[3];return[g*f[0],g*f[1],g*f[2]]}function scale3(f,g){return[f*g[0],f*g[1],f*g[2]]}function transpose3(f){return[f[0],f[3],f[6],f[1],f[4],f[7],f[2],f[5],f[8]]}function transpose4(f){return[f[0],f[4],f[8],f[12],f[1],f[5],f[9],f[13],f[2],f[6],f[10],f[14],f[3],f[7],f[11],f[15]]}
function adj3(f){return[f[4]*f[8]-f[5]*f[7],f[2]*f[7]-f[1]*f[8],f[1]*f[5]-f[2]*f[4],f[5]*f[6]-f[3]*f[8],f[0]*f[8]-f[2]*f[6],f[2]*f[3]-f[0]*f[5],f[3]*f[7]-f[4]*f[6],f[1]*f[6]-f[0]*f[7],f[0]*f[4]-f[1]*f[3]]}function sub3(f,g){return[f[0]-g[0],f[1]-g[1],f[2]-g[2]]}function add3(f,g){return[f[0]+g[0],f[1]+g[1],f[2]+g[2]]}function add4(f,g){return[f[0]+g[0],f[1]+g[1],f[2]+g[2],f[3]+g[3]]}function cross3(f,g){return[f[1]*g[2]-f[2]*g[1],f[2]*g[0]-f[0]*g[2],f[0]*g[1]-f[1]*g[0]]}
function mul4mm(f,g){return[f[0]*g[0]+f[1]*g[4]+f[2]*g[8]+f[3]*g[12],f[0]*g[1]+f[1]*g[5]+f[2]*g[9]+f[3]*g[13],f[0]*g[2]+f[1]*g[6]+f[2]*g[10]+f[3]*g[14],f[0]*g[3]+f[1]*g[7]+f[2]*g[11]+f[3]*g[15],f[4]*g[0]+f[5]*g[4]+f[6]*g[8]+f[7]*g[12],f[4]*g[1]+f[5]*g[5]+f[6]*g[9]+f[7]*g[13],f[4]*g[2]+f[5]*g[6]+f[6]*g[10]+f[7]*g[14],f[4]*g[3]+f[5]*g[7]+f[6]*g[11]+f[7]*g[15],f[8]*g[0]+f[9]*g[4]+f[10]*g[8]+f[11]*g[12],f[8]*g[1]+f[9]*g[5]+f[10]*g[9]+f[11]*g[13],f[8]*g[2]+f[9]*g[6]+f[10]*g[10]+f[11]*g[14],f[8]*g[3]+f[9]*
g[7]+f[10]*g[11]+f[11]*g[15],f[12]*g[0]+f[13]*g[4]+f[14]*g[8]+f[15]*g[12],f[12]*g[1]+f[13]*g[5]+f[14]*g[9]+f[15]*g[13],f[12]*g[2]+f[13]*g[6]+f[14]*g[10]+f[15]*g[14],f[12]*g[3]+f[13]*g[7]+f[14]*g[11]+f[15]*g[15]]}function mul3mv(f,g){return[f[0]*g[0]+f[1]*g[1]+f[2]*g[2],f[3]*g[0]+f[4]*g[1]+f[5]*g[2],f[6]*g[0]+f[7]*g[1]+f[8]*g[2]]}
function mul4mv(f,g){return[f[0]*g[0]+f[1]*g[1]+f[2]*g[2]+f[3]*g[3],f[4]*g[0]+f[5]*g[1]+f[6]*g[2]+f[7]*g[3],f[8]*g[0]+f[9]*g[1]+f[10]*g[2]+f[11]*g[3],f[12]*g[0]+f[13]*g[1]+f[14]*g[2]+f[15]*g[3]]}function transform4to3(f,g){let G=1/(f[12]*g[0]+f[13]*g[1]+f[14]*g[2]+f[15]*g[3]);return[(f[0]*g[0]+f[1]*g[1]+f[2]*g[2]+f[3]*g[3])*G,(f[4]*g[0]+f[5]*g[1]+f[6]*g[2]+f[7]*g[3])*G,(f[8]*g[0]+f[9]*g[1]+f[10]*g[2]+f[11]*g[3])*G]}
function triangleNormal(f,g,G){f=dehom3(f);g=sub3(dehom3(g),f);G=sub3(dehom3(G),f);return normalized3(cross3(g,G))};function GlError(f){this.message=f}GlError.prototype.toString=function(){return this.message};
function ShaderProgram(f,g,G){this.handle=f.createProgram();f.webgl2&&(g="#version 300 es\n"+g.replace(/attribute/g,"in").replace(/varying/g,"out"),G="#version 300 es\n"+G.replace(/varying/g,"in").replace(/gl_FragColor/g,"FragColor").replace(/texture2D/g,"texture").replace(/precision highp float;/g,"precision highp float;\n#define webgl2 true\nout vec4 FragColor;"));this.vs=this.createShader(f,f.VERTEX_SHADER,g);this.fs=this.createShader(f,f.FRAGMENT_SHADER,G);this.link(f);this.detectUniforms(f)}
ShaderProgram.prototype.createShader=function(f,g,G){g=f.createShader(g);f.shaderSource(g,G);f.compileShader(g);if(!f.getShaderParameter(g,f.COMPILE_STATUS))throw console.warn(G.split("\n")),new GlError("Error compiling shader:\n"+f.getShaderInfoLog(g));f.attachShader(this.handle,g);return g};ShaderProgram.prototype.use=function(f){f.useProgram(this.handle);return this};
ShaderProgram.prototype.link=function(f){let g=this.handle;f.linkProgram(g);if(!f.getProgramParameter(g,f.LINK_STATUS))throw new GlError("Error linking shader:\n"+f.getProgramInfoLog(g));f.validateProgram(g);if(!f.getProgramParameter(g,f.VALIDATE_STATUS))throw new GlError("Error validating shader:\n"+f.getProgramInfoLog(g));};ShaderProgram.prototype.dispose=function(f){f.detachShader(this.handle,this.vs);f.deleteShader(this.vs);f.detachShader(this.handle,this.fs);f.deleteShader(this.fs);f.deleteProgram(this.handle)};
ShaderProgram.prototype.detectUniforms=function(f){this.uniform=this.detectImpl(f,!0)};ShaderProgram.prototype.detectAttributes=function(f){this.attrib=this.detectImpl(f,!1)};
ShaderProgram.prototype.detectImpl=function(f,g){let G,K,N=this.handle,F,h;var q;let a={},k;let v;K=g?f.getProgramParameter(N,f.ACTIVE_UNIFORMS):f.getProgramParameter(N,f.ACTIVE_ATTRIBUTES);for(G=0;G<K;++G)if(F=g?f.getActiveUniform(N,G):f.getActiveAttrib(N,G),null!==F&&(h=F.name.replace(/\]/g,""))){for(k=a;null!==(q=/[.\[]/.exec(h));){var x=h.substr(0,q.index);k=k.hasOwnProperty(x)?k[x]:"."===q[0]?k[x]={}:k[x]=[];h=h.substr(q.index+1)}if(1<F.size){q=F.size;v=Array(q);for(x=0;x<q;++x){var b=F.name+
"["+x+"]";b=g?this.uniformSetter(f,b,F):this.attribFactory(f,b,F);v[x]=b}k[h]=v}else b=g?this.uniformSetter(f,F.name,F):this.attribFactory(f,F.name,F),k[h]=b}return a};
ShaderProgram.prototype.uniformSetter=function(f,g,G){let K;K=f.getUniformLocation(this.handle,g);switch(G.type){case f.FLOAT:return f.uniform1fv.bind(f,K);case f.FLOAT_VEC2:return f.uniform2fv.bind(f,K);case f.FLOAT_VEC3:return f.uniform3fv.bind(f,K);case f.FLOAT_VEC4:return f.uniform4fv.bind(f,K);case f.BOOL:case f.INT:case f.SAMPLER_2D:case f.SAMPLER_CUBE:return f.uniform1iv.bind(f,K);case f.BOOL_VEC2:case f.INT_VEC2:return f.uniform2iv.bind(f,K);case f.BOOL_VEC3:case f.INT_VEC3:return f.uniform3iv.bind(f,
K);case f.BOOL_VEC4:case f.INT_VEC4:return f.uniform4iv.bind(f,K);case f.FLOAT_MAT2:return f.uniformMatrix2fv.bind(f,K,!1);case f.FLOAT_MAT3:return f.uniformMatrix3fv.bind(f,K,!1);case f.FLOAT_MAT4:return f.uniformMatrix4fv.bind(f,K,!1);default:throw new GlError("Unknown data type for uniform "+g);}};
ShaderProgram.prototype.attribFactory=function(f,g,G){let K;K=f.getAttribLocation(this.handle,g);switch(G.type){case f.FLOAT:return new VertexAttribute(f,K,f.vertexAttrib1fv.bind(f,K));case f.FLOAT_VEC2:return new VertexAttribute(f,K,f.vertexAttrib2fv.bind(f,K));case f.FLOAT_VEC3:return new VertexAttribute(f,K,f.vertexAttrib3fv.bind(f,K));case f.FLOAT_VEC4:return new VertexAttribute(f,K,f.vertexAttrib4fv.bind(f,K));default:throw new GlError("Unknown data type for vertex attribute "+g);}};
function VertexAttribute(f,g,G){this.gl=f;this.location=g;this.set=G};/*
@fileoverview gl-matrix - High performance matrix and vector operations
@author Brandon Jones
@author Colin MacKenzie IV
@version 2.7.0
Copyright (c) 2015-2018, Brandon Jones, Colin MacKenzie IV.
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.
*/
!function(f,g){if("object"==typeof exports&&"object"==typeof module)module.exports=g();else if("function"==typeof define&&define.amd)define([],g);else{g=g();for(var G in g)("object"==typeof exports?exports:f)[G]=g[G]}}("undefined"!=typeof self?self:this,function(){return function(f){function g(K){if(G[K])return G[K].exports;var N=G[K]={i:K,l:!1,exports:{}};return f[K].call(N.exports,N,N.exports,g),N.l=!0,N.exports}var G={};return g.m=f,g.c=G,g.d=function(K,N,F){g.o(K,N)||Object.defineProperty(K,N,
{enumerable:!0,get:F})},g.r=function(K){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(K,Symbol.toStringTag,{value:"Module"});Object.defineProperty(K,"__esModule",{value:!0})},g.t=function(K,N){if((1&N&&(K=g(K)),8&N)||4&N&&"object"==typeof K&&K&&K.__esModule)return K;var F=Object.create(null);if(g.r(F),Object.defineProperty(F,"default",{enumerable:!0,value:K}),2&N&&"string"!=typeof K)for(var h in K)g.d(F,h,function(q){return K[q]}.bind(null,h));return F},g.n=function(K){var N=
K&&K.__esModule?function(){return K.default}:function(){return K};return g.d(N,"a",N),N},g.o=function(K,N){return Object.prototype.hasOwnProperty.call(K,N)},g.p="",g(g.s=10)}([function(f,g,G){Object.defineProperty(g,"__esModule",{value:!0});g.setMatrixArrayType=function(F){g.ARRAY_TYPE=F};g.toRadian=function(F){return F*N};g.equals=function(F,h){return Math.abs(F-h)<=K*Math.max(1,Math.abs(F),Math.abs(h))};var K=g.EPSILON=1E-6;g.ARRAY_TYPE="undefined"!=typeof Float32Array?Float32Array:Array;g.RANDOM=
Math.random;var N=Math.PI/180},function(f,g,G){function K(){var b=new x.ARRAY_TYPE(4);return x.ARRAY_TYPE!=Float32Array&&(b[0]=0,b[1]=0,b[2]=0,b[3]=0),b}function N(b,c,m){return b[0]=c[0]-m[0],b[1]=c[1]-m[1],b[2]=c[2]-m[2],b[3]=c[3]-m[3],b}function F(b,c,m){return b[0]=c[0]*m[0],b[1]=c[1]*m[1],b[2]=c[2]*m[2],b[3]=c[3]*m[3],b}function h(b,c,m){return b[0]=c[0]/m[0],b[1]=c[1]/m[1],b[2]=c[2]/m[2],b[3]=c[3]/m[3],b}function q(b,c){var m=c[0]-b[0],l=c[1]-b[1],n=c[2]-b[2];b=c[3]-b[3];return Math.sqrt(m*
m+l*l+n*n+b*b)}function a(b,c){var m=c[0]-b[0],l=c[1]-b[1],n=c[2]-b[2];b=c[3]-b[3];return m*m+l*l+n*n+b*b}function k(b){var c=b[0],m=b[1],l=b[2];b=b[3];return Math.sqrt(c*c+m*m+l*l+b*b)}function v(b){var c=b[0],m=b[1],l=b[2];b=b[3];return c*c+m*m+l*l+b*b}Object.defineProperty(g,"__esModule",{value:!0});g.forEach=g.sqrLen=g.len=g.sqrDist=g.dist=g.div=g.mul=g.sub=void 0;g.create=K;g.clone=function(b){var c=new x.ARRAY_TYPE(4);return c[0]=b[0],c[1]=b[1],c[2]=b[2],c[3]=b[3],c};g.fromValues=function(b,
c,m,l){var n=new x.ARRAY_TYPE(4);return n[0]=b,n[1]=c,n[2]=m,n[3]=l,n};g.copy=function(b,c){return b[0]=c[0],b[1]=c[1],b[2]=c[2],b[3]=c[3],b};g.set=function(b,c,m,l,n){return b[0]=c,b[1]=m,b[2]=l,b[3]=n,b};g.add=function(b,c,m){return b[0]=c[0]+m[0],b[1]=c[1]+m[1],b[2]=c[2]+m[2],b[3]=c[3]+m[3],b};g.subtract=N;g.multiply=F;g.divide=h;g.ceil=function(b,c){return b[0]=Math.ceil(c[0]),b[1]=Math.ceil(c[1]),b[2]=Math.ceil(c[2]),b[3]=Math.ceil(c[3]),b};g.floor=function(b,c){return b[0]=Math.floor(c[0]),
b[1]=Math.floor(c[1]),b[2]=Math.floor(c[2]),b[3]=Math.floor(c[3]),b};g.min=function(b,c,m){return b[0]=Math.min(c[0],m[0]),b[1]=Math.min(c[1],m[1]),b[2]=Math.min(c[2],m[2]),b[3]=Math.min(c[3],m[3]),b};g.max=function(b,c,m){return b[0]=Math.max(c[0],m[0]),b[1]=Math.max(c[1],m[1]),b[2]=Math.max(c[2],m[2]),b[3]=Math.max(c[3],m[3]),b};g.round=function(b,c){return b[0]=Math.round(c[0]),b[1]=Math.round(c[1]),b[2]=Math.round(c[2]),b[3]=Math.round(c[3]),b};g.scale=function(b,c,m){return b[0]=c[0]*m,b[1]=
c[1]*m,b[2]=c[2]*m,b[3]=c[3]*m,b};g.scaleAndAdd=function(b,c,m,l){return b[0]=c[0]+m[0]*l,b[1]=c[1]+m[1]*l,b[2]=c[2]+m[2]*l,b[3]=c[3]+m[3]*l,b};g.distance=q;g.squaredDistance=a;g.length=k;g.squaredLength=v;g.negate=function(b,c){return b[0]=-c[0],b[1]=-c[1],b[2]=-c[2],b[3]=-c[3],b};g.inverse=function(b,c){return b[0]=1/c[0],b[1]=1/c[1],b[2]=1/c[2],b[3]=1/c[3],b};g.normalize=function(b,c){var m=c[0],l=c[1],n=c[2];c=c[3];var t=m*m+l*l+n*n+c*c;0<t&&(t=1/Math.sqrt(t),b[0]=m*t,b[1]=l*t,b[2]=n*t,b[3]=c*
t);return b};g.dot=function(b,c){return b[0]*c[0]+b[1]*c[1]+b[2]*c[2]+b[3]*c[3]};g.lerp=function(b,c,m,l){var n=c[0],t=c[1],w=c[2];c=c[3];return b[0]=n+l*(m[0]-n),b[1]=t+l*(m[1]-t),b[2]=w+l*(m[2]-w),b[3]=c+l*(m[3]-c),b};g.random=function(b,c){c=c||1;do{var m=2*x.RANDOM()-1;var l=2*x.RANDOM()-1;var n=m*m+l*l}while(1<=n);do{var t=2*x.RANDOM()-1;var w=2*x.RANDOM()-1;var z=t*t+w*w}while(1<=z);n=Math.sqrt((1-n)/z);return b[0]=c*m,b[1]=c*l,b[2]=c*t*n,b[3]=c*w*n,b};g.transformMat4=function(b,c,m){var l=
c[0],n=c[1],t=c[2];c=c[3];return b[0]=m[0]*l+m[4]*n+m[8]*t+m[12]*c,b[1]=m[1]*l+m[5]*n+m[9]*t+m[13]*c,b[2]=m[2]*l+m[6]*n+m[10]*t+m[14]*c,b[3]=m[3]*l+m[7]*n+m[11]*t+m[15]*c,b};g.transformQuat=function(b,c,m){var l=c[0],n=c[1],t=c[2],w=m[0],z=m[1],C=m[2];m=m[3];var I=m*l+z*t-C*n,O=m*n+C*l-w*t,R=m*t+w*n-z*l;l=-w*l-z*n-C*t;return b[0]=I*m+l*-w+O*-C-R*-z,b[1]=O*m+l*-z+R*-w-I*-C,b[2]=R*m+l*-C+I*-z-O*-w,b[3]=c[3],b};g.str=function(b){return"vec4("+b[0]+", "+b[1]+", "+b[2]+", "+b[3]+")"};g.exactEquals=function(b,
c){return b[0]===c[0]&&b[1]===c[1]&&b[2]===c[2]&&b[3]===c[3]};g.equals=function(b,c){var m=b[0],l=b[1],n=b[2];b=b[3];var t=c[0],w=c[1],z=c[2];c=c[3];return Math.abs(m-t)<=x.EPSILON*Math.max(1,Math.abs(m),Math.abs(t))&&Math.abs(l-w)<=x.EPSILON*Math.max(1,Math.abs(l),Math.abs(w))&&Math.abs(n-z)<=x.EPSILON*Math.max(1,Math.abs(n),Math.abs(z))&&Math.abs(b-c)<=x.EPSILON*Math.max(1,Math.abs(b),Math.abs(c))};var x=function(b){if(b&&b.__esModule)return b;var c={};if(null!=b)for(var m in b)Object.prototype.hasOwnProperty.call(b,
m)&&(c[m]=b[m]);return c.default=b,c}(G(0));g.sub=N;g.mul=F;g.div=h;g.dist=q;g.sqrDist=a;g.len=k;g.sqrLen=v;g.forEach=function(){var b=K();return function(c,m,l,n,t,w){m||(m=4);l||(l=0);for(n=n?Math.min(n*m+l,c.length):c.length;l<n;l+=m)b[0]=c[l],b[1]=c[l+1],b[2]=c[l+2],b[3]=c[l+3],t(b,b,w),c[l]=b[0],c[l+1]=b[1],c[l+2]=b[2],c[l+3]=b[3];return c}}()},function(f,g,G){function K(){var l=new m.ARRAY_TYPE(3);return m.ARRAY_TYPE!=Float32Array&&(l[0]=0,l[1]=0,l[2]=0),l}function N(l){var n=l[0],t=l[1];l=
l[2];return Math.sqrt(n*n+t*t+l*l)}function F(l,n,t){var w=new m.ARRAY_TYPE(3);return w[0]=l,w[1]=n,w[2]=t,w}function h(l,n,t){return l[0]=n[0]-t[0],l[1]=n[1]-t[1],l[2]=n[2]-t[2],l}function q(l,n,t){return l[0]=n[0]*t[0],l[1]=n[1]*t[1],l[2]=n[2]*t[2],l}function a(l,n,t){return l[0]=n[0]/t[0],l[1]=n[1]/t[1],l[2]=n[2]/t[2],l}function k(l,n){var t=n[0]-l[0],w=n[1]-l[1];l=n[2]-l[2];return Math.sqrt(t*t+w*w+l*l)}function v(l,n){var t=n[0]-l[0],w=n[1]-l[1];l=n[2]-l[2];return t*t+w*w+l*l}function x(l){var n=
l[0],t=l[1];l=l[2];return n*n+t*t+l*l}function b(l,n){var t=n[0],w=n[1],z=n[2];t=t*t+w*w+z*z;return 0<t&&(t=1/Math.sqrt(t),l[0]=n[0]*t,l[1]=n[1]*t,l[2]=n[2]*t),l}function c(l,n){return l[0]*n[0]+l[1]*n[1]+l[2]*n[2]}Object.defineProperty(g,"__esModule",{value:!0});g.forEach=g.sqrLen=g.len=g.sqrDist=g.dist=g.div=g.mul=g.sub=void 0;g.create=K;g.clone=function(l){var n=new m.ARRAY_TYPE(3);return n[0]=l[0],n[1]=l[1],n[2]=l[2],n};g.length=N;g.fromValues=F;g.copy=function(l,n){return l[0]=n[0],l[1]=n[1],
l[2]=n[2],l};g.set=function(l,n,t,w){return l[0]=n,l[1]=t,l[2]=w,l};g.add=function(l,n,t){return l[0]=n[0]+t[0],l[1]=n[1]+t[1],l[2]=n[2]+t[2],l};g.subtract=h;g.multiply=q;g.divide=a;g.ceil=function(l,n){return l[0]=Math.ceil(n[0]),l[1]=Math.ceil(n[1]),l[2]=Math.ceil(n[2]),l};g.floor=function(l,n){return l[0]=Math.floor(n[0]),l[1]=Math.floor(n[1]),l[2]=Math.floor(n[2]),l};g.min=function(l,n,t){return l[0]=Math.min(n[0],t[0]),l[1]=Math.min(n[1],t[1]),l[2]=Math.min(n[2],t[2]),l};g.max=function(l,n,t){return l[0]=
Math.max(n[0],t[0]),l[1]=Math.max(n[1],t[1]),l[2]=Math.max(n[2],t[2]),l};g.round=function(l,n){return l[0]=Math.round(n[0]),l[1]=Math.round(n[1]),l[2]=Math.round(n[2]),l};g.scale=function(l,n,t){return l[0]=n[0]*t,l[1]=n[1]*t,l[2]=n[2]*t,l};g.scaleAndAdd=function(l,n,t,w){return l[0]=n[0]+t[0]*w,l[1]=n[1]+t[1]*w,l[2]=n[2]+t[2]*w,l};g.distance=k;g.squaredDistance=v;g.squaredLength=x;g.negate=function(l,n){return l[0]=-n[0],l[1]=-n[1],l[2]=-n[2],l};g.inverse=function(l,n){return l[0]=1/n[0],l[1]=1/
n[1],l[2]=1/n[2],l};g.normalize=b;g.dot=c;g.cross=function(l,n,t){var w=n[0],z=n[1];n=n[2];var C=t[0],I=t[1];t=t[2];return l[0]=z*t-n*I,l[1]=n*C-w*t,l[2]=w*I-z*C,l};g.lerp=function(l,n,t,w){var z=n[0],C=n[1];n=n[2];return l[0]=z+w*(t[0]-z),l[1]=C+w*(t[1]-C),l[2]=n+w*(t[2]-n),l};g.hermite=function(l,n,t,w,z,C){var I=C*C,O=I*(2*C-3)+1,R=I*(C-2)+C,P=I*(C-1);C=I*(3-2*C);return l[0]=n[0]*O+t[0]*R+w[0]*P+z[0]*C,l[1]=n[1]*O+t[1]*R+w[1]*P+z[1]*C,l[2]=n[2]*O+t[2]*R+w[2]*P+z[2]*C,l};g.bezier=function(l,n,t,
w,z,C){var I=1-C,O=I*I,R=C*C,P=O*I;O*=3*C;I*=3*R;C*=R;return l[0]=n[0]*P+t[0]*O+w[0]*I+z[0]*C,l[1]=n[1]*P+t[1]*O+w[1]*I+z[1]*C,l[2]=n[2]*P+t[2]*O+w[2]*I+z[2]*C,l};g.random=function(l,n){n=n||1;var t=2*m.RANDOM()*Math.PI,w=2*m.RANDOM()-1,z=Math.sqrt(1-w*w)*n;return l[0]=Math.cos(t)*z,l[1]=Math.sin(t)*z,l[2]=w*n,l};g.transformMat4=function(l,n,t){var w=n[0],z=n[1];n=n[2];var C=t[3]*w+t[7]*z+t[11]*n+t[15];return C=C||1,l[0]=(t[0]*w+t[4]*z+t[8]*n+t[12])/C,l[1]=(t[1]*w+t[5]*z+t[9]*n+t[13])/C,l[2]=(t[2]*
w+t[6]*z+t[10]*n+t[14])/C,l};g.transformMat3=function(l,n,t){var w=n[0],z=n[1];n=n[2];return l[0]=w*t[0]+z*t[3]+n*t[6],l[1]=w*t[1]+z*t[4]+n*t[7],l[2]=w*t[2]+z*t[5]+n*t[8],l};g.transformQuat=function(l,n,t){var w=t[0],z=t[1],C=t[2],I=n[0],O=n[1];n=n[2];var R=z*n-C*O,P=C*I-w*n,X=w*O-z*I,W=z*X-C*P;C=C*R-w*X;w=w*P-z*R;t=2*t[3];return R*=t,P*=t,X*=t,W*=2,C*=2,w*=2,l[0]=I+R+W,l[1]=O+P+C,l[2]=n+X+w,l};g.rotateX=function(l,n,t,w){var z=[],C=[];return z[0]=n[0]-t[0],z[1]=n[1]-t[1],z[2]=n[2]-t[2],C[0]=z[0],
C[1]=z[1]*Math.cos(w)-z[2]*Math.sin(w),C[2]=z[1]*Math.sin(w)+z[2]*Math.cos(w),l[0]=C[0]+t[0],l[1]=C[1]+t[1],l[2]=C[2]+t[2],l};g.rotateY=function(l,n,t,w){var z=[],C=[];return z[0]=n[0]-t[0],z[1]=n[1]-t[1],z[2]=n[2]-t[2],C[0]=z[2]*Math.sin(w)+z[0]*Math.cos(w),C[1]=z[1],C[2]=z[2]*Math.cos(w)-z[0]*Math.sin(w),l[0]=C[0]+t[0],l[1]=C[1]+t[1],l[2]=C[2]+t[2],l};g.rotateZ=function(l,n,t,w){var z=[],C=[];return z[0]=n[0]-t[0],z[1]=n[1]-t[1],z[2]=n[2]-t[2],C[0]=z[0]*Math.cos(w)-z[1]*Math.sin(w),C[1]=z[0]*Math.sin(w)+
z[1]*Math.cos(w),C[2]=z[2],l[0]=C[0]+t[0],l[1]=C[1]+t[1],l[2]=C[2]+t[2],l};g.angle=function(l,n){l=F(l[0],l[1],l[2]);n=F(n[0],n[1],n[2]);b(l,l);b(n,n);n=c(l,n);return 1<n?0:-1>n?Math.PI:Math.acos(n)};g.str=function(l){return"vec3("+l[0]+", "+l[1]+", "+l[2]+")"};g.exactEquals=function(l,n){return l[0]===n[0]&&l[1]===n[1]&&l[2]===n[2]};g.equals=function(l,n){var t=l[0],w=l[1];l=l[2];var z=n[0],C=n[1];n=n[2];return Math.abs(t-z)<=m.EPSILON*Math.max(1,Math.abs(t),Math.abs(z))&&Math.abs(w-C)<=m.EPSILON*
Math.max(1,Math.abs(w),Math.abs(C))&&Math.abs(l-n)<=m.EPSILON*Math.max(1,Math.abs(l),Math.abs(n))};var m=function(l){if(l&&l.__esModule)return l;var n={};if(null!=l)for(var t in l)Object.prototype.hasOwnProperty.call(l,t)&&(n[t]=l[t]);return n.default=l,n}(G(0));g.sub=h;g.mul=q;g.div=a;g.dist=k;g.sqrDist=v;g.len=N;g.sqrLen=x;g.forEach=function(){var l=K();return function(n,t,w,z,C,I){t||(t=3);w||(w=0);for(z=z?Math.min(z*t+w,n.length):n.length;w<z;w+=t)l[0]=n[w],l[1]=n[w+1],l[2]=n[w+2],C(l,l,I),n[w]=
l[0],n[w+1]=l[1],n[w+2]=l[2];return n}}()},function(f,g,G){function K(c){if(c&&c.__esModule)return c;var m={};if(null!=c)for(var l in c)Object.prototype.hasOwnProperty.call(c,l)&&(m[l]=c[l]);return m.default=c,m}function N(){var c=new k.ARRAY_TYPE(4);return k.ARRAY_TYPE!=Float32Array&&(c[0]=0,c[1]=0,c[2]=0),c[3]=1,c}function F(c,m,l){l*=.5;var n=Math.sin(l);return c[0]=n*m[0],c[1]=n*m[1],c[2]=n*m[2],c[3]=Math.cos(l),c}function h(c,m,l){var n=m[0],t=m[1],w=m[2];m=m[3];var z=l[0],C=l[1],I=l[2];l=l[3];
return c[0]=n*l+m*z+t*I-w*C,c[1]=t*l+m*C+w*z-n*I,c[2]=w*l+m*I+n*C-t*z,c[3]=m*l-n*z-t*C-w*I,c}function q(c,m,l,n){var t=m[0],w=m[1],z=m[2];m=m[3];var C=l[0],I=l[1],O=l[2];l=l[3];var R=void 0,P=void 0,X=void 0,W=void 0,aa=void 0;return 0>(P=t*C+w*I+z*O+m*l)&&(P=-P,C=-C,I=-I,O=-O,l=-l),1-P>k.EPSILON?(R=Math.acos(P),X=Math.sin(R),W=Math.sin((1-n)*R)/X,aa=Math.sin(n*R)/X):(W=1-n,aa=n),c[0]=W*t+aa*C,c[1]=W*w+aa*I,c[2]=W*z+aa*O,c[3]=W*m+aa*l,c}function a(c,m){var l=m[0]+m[4]+m[8];if(0<l)l=Math.sqrt(l+1),
c[3]=.5*l,l=.5/l,c[0]=(m[5]-m[7])*l,c[1]=(m[6]-m[2])*l,c[2]=(m[1]-m[3])*l;else{var n=0;m[4]>m[0]&&(n=1);m[8]>m[3*n+n]&&(n=2);var t=(n+1)%3,w=(n+2)%3;l=Math.sqrt(m[3*n+n]-m[3*t+t]-m[3*w+w]+1);c[n]=.5*l;l=.5/l;c[3]=(m[3*t+w]-m[3*w+t])*l;c[t]=(m[3*t+n]+m[3*n+t])*l;c[w]=(m[3*w+n]+m[3*n+w])*l}return c}Object.defineProperty(g,"__esModule",{value:!0});g.setAxes=g.sqlerp=g.rotationTo=g.equals=g.exactEquals=g.normalize=g.sqrLen=g.squaredLength=g.len=g.length=g.lerp=g.dot=g.scale=g.mul=g.add=g.set=g.copy=g.fromValues=
g.clone=void 0;g.create=N;g.identity=function(c){return c[0]=0,c[1]=0,c[2]=0,c[3]=1,c};g.setAxisAngle=F;g.getAxisAngle=function(c,m){var l=2*Math.acos(m[3]),n=Math.sin(l/2);n>k.EPSILON?(c[0]=m[0]/n,c[1]=m[1]/n,c[2]=m[2]/n):(c[0]=1,c[1]=0,c[2]=0);return l};g.multiply=h;g.rotateX=function(c,m,l){l*=.5;var n=m[0],t=m[1],w=m[2];m=m[3];var z=Math.sin(l);l=Math.cos(l);return c[0]=n*l+m*z,c[1]=t*l+w*z,c[2]=w*l-t*z,c[3]=m*l-n*z,c};g.rotateY=function(c,m,l){l*=.5;var n=m[0],t=m[1],w=m[2];m=m[3];var z=Math.sin(l);
l=Math.cos(l);return c[0]=n*l-w*z,c[1]=t*l+m*z,c[2]=w*l+n*z,c[3]=m*l-t*z,c};g.rotateZ=function(c,m,l){l*=.5;var n=m[0],t=m[1],w=m[2];m=m[3];var z=Math.sin(l);l=Math.cos(l);return c[0]=n*l+t*z,c[1]=t*l-n*z,c[2]=w*l+m*z,c[3]=m*l-w*z,c};g.calculateW=function(c,m){var l=m[0],n=m[1];m=m[2];return c[0]=l,c[1]=n,c[2]=m,c[3]=Math.sqrt(Math.abs(1-l*l-n*n-m*m)),c};g.slerp=q;g.random=function(c){var m=k.RANDOM(),l=k.RANDOM(),n=k.RANDOM(),t=Math.sqrt(1-m);m=Math.sqrt(m);return c[0]=t*Math.sin(2*Math.PI*l),c[1]=
t*Math.cos(2*Math.PI*l),c[2]=m*Math.sin(2*Math.PI*n),c[3]=m*Math.cos(2*Math.PI*n),c};g.invert=function(c,m){var l=m[0],n=m[1],t=m[2];m=m[3];var w=l*l+n*n+t*t+m*m;w=w?1/w:0;return c[0]=-l*w,c[1]=-n*w,c[2]=-t*w,c[3]=m*w,c};g.conjugate=function(c,m){return c[0]=-m[0],c[1]=-m[1],c[2]=-m[2],c[3]=m[3],c};g.fromMat3=a;g.fromEuler=function(c,m,l,n){var t=.5*Math.PI/180;m*=t;l*=t;n*=t;t=Math.sin(m);m=Math.cos(m);var w=Math.sin(l);l=Math.cos(l);var z=Math.sin(n);n=Math.cos(n);return c[0]=t*l*n-m*w*z,c[1]=m*
w*n+t*l*z,c[2]=m*l*z-t*w*n,c[3]=m*l*n+t*w*z,c};g.str=function(c){return"quat("+c[0]+", "+c[1]+", "+c[2]+", "+c[3]+")"};var k=K(G(0)),v=K(G(5)),x=K(G(2));f=K(G(1));g.clone=f.clone;g.fromValues=f.fromValues;g.copy=f.copy;g.set=f.set;g.add=f.add;g.mul=h;g.scale=f.scale;g.dot=f.dot;g.lerp=f.lerp;G=g.length=f.length;G=(g.len=G,g.squaredLength=f.squaredLength);var b=(g.sqrLen=G,g.normalize=f.normalize);g.exactEquals=f.exactEquals;g.equals=f.equals;g.rotationTo=function(){var c=x.create(),m=x.fromValues(1,
0,0),l=x.fromValues(0,1,0);return function(n,t,w){var z=x.dot(t,w);return-.999999>z?(x.cross(c,m,t),1E-6>x.len(c)&&x.cross(c,l,t),x.normalize(c,c),F(n,c,Math.PI),n):.999999<z?(n[0]=0,n[1]=0,n[2]=0,n[3]=1,n):(x.cross(c,t,w),n[0]=c[0],n[1]=c[1],n[2]=c[2],n[3]=1+z,b(n,n))}}();g.sqlerp=function(){var c=N(),m=N();return function(l,n,t,w,z,C){return q(c,n,z,C),q(m,t,w,C),q(l,c,m,2*C*(1-C)),l}}();g.setAxes=function(){var c=v.create();return function(m,l,n,t){return c[0]=n[0],c[3]=n[1],c[6]=n[2],c[1]=t[0],
c[4]=t[1],c[7]=t[2],c[2]=-l[0],c[5]=-l[1],c[8]=-l[2],b(m,a(m,c))}}()},function(f,g,G){function K(a){return a[0]=1,a[1]=0,a[2]=0,a[3]=0,a[4]=0,a[5]=1,a[6]=0,a[7]=0,a[8]=0,a[9]=0,a[10]=1,a[11]=0,a[12]=0,a[13]=0,a[14]=0,a[15]=1,a}function N(a,k,v){var x=k[0],b=k[1],c=k[2],m=k[3],l=k[4],n=k[5],t=k[6],w=k[7],z=k[8],C=k[9],I=k[10],O=k[11],R=k[12],P=k[13],X=k[14];k=k[15];var W=v[0],aa=v[1],Y=v[2],ia=v[3];return a[0]=W*x+aa*l+Y*z+ia*R,a[1]=W*b+aa*n+Y*C+ia*P,a[2]=W*c+aa*t+Y*I+ia*X,a[3]=W*m+aa*w+Y*O+ia*k,W=
v[4],aa=v[5],Y=v[6],ia=v[7],a[4]=W*x+aa*l+Y*z+ia*R,a[5]=W*b+aa*n+Y*C+ia*P,a[6]=W*c+aa*t+Y*I+ia*X,a[7]=W*m+aa*w+Y*O+ia*k,W=v[8],aa=v[9],Y=v[10],ia=v[11],a[8]=W*x+aa*l+Y*z+ia*R,a[9]=W*b+aa*n+Y*C+ia*P,a[10]=W*c+aa*t+Y*I+ia*X,a[11]=W*m+aa*w+Y*O+ia*k,W=v[12],aa=v[13],Y=v[14],ia=v[15],a[12]=W*x+aa*l+Y*z+ia*R,a[13]=W*b+aa*n+Y*C+ia*P,a[14]=W*c+aa*t+Y*I+ia*X,a[15]=W*m+aa*w+Y*O+ia*k,a}function F(a,k,v){var x=k[0],b=k[1],c=k[2],m=k[3],l=x+x,n=b+b,t=c+c;k=x*l;var w=x*n;x*=t;var z=b*n;b*=t;c*=t;l*=m;n*=m;m*=t;
return a[0]=1-(z+c),a[1]=w+m,a[2]=x-n,a[3]=0,a[4]=w-m,a[5]=1-(k+c),a[6]=b+l,a[7]=0,a[8]=x+n,a[9]=b-l,a[10]=1-(k+z),a[11]=0,a[12]=v[0],a[13]=v[1],a[14]=v[2],a[15]=1,a}function h(a,k,v){return a[0]=k[0]-v[0],a[1]=k[1]-v[1],a[2]=k[2]-v[2],a[3]=k[3]-v[3],a[4]=k[4]-v[4],a[5]=k[5]-v[5],a[6]=k[6]-v[6],a[7]=k[7]-v[7],a[8]=k[8]-v[8],a[9]=k[9]-v[9],a[10]=k[10]-v[10],a[11]=k[11]-v[11],a[12]=k[12]-v[12],a[13]=k[13]-v[13],a[14]=k[14]-v[14],a[15]=k[15]-v[15],a}Object.defineProperty(g,"__esModule",{value:!0});g.sub=
g.mul=void 0;g.create=function(){var a=new q.ARRAY_TYPE(16);q.ARRAY_TYPE!=Float32Array&&(a[1]=0,a[2]=0,a[3]=0,a[4]=0,a[6]=0,a[7]=0,a[8]=0,a[9]=0,a[11]=0,a[12]=0,a[13]=0,a[14]=0);return a[0]=1,a[5]=1,a[10]=1,a[15]=1,a};g.clone=function(a){var k=new q.ARRAY_TYPE(16);return k[0]=a[0],k[1]=a[1],k[2]=a[2],k[3]=a[3],k[4]=a[4],k[5]=a[5],k[6]=a[6],k[7]=a[7],k[8]=a[8],k[9]=a[9],k[10]=a[10],k[11]=a[11],k[12]=a[12],k[13]=a[13],k[14]=a[14],k[15]=a[15],k};g.copy=function(a,k){return a[0]=k[0],a[1]=k[1],a[2]=k[2],
a[3]=k[3],a[4]=k[4],a[5]=k[5],a[6]=k[6],a[7]=k[7],a[8]=k[8],a[9]=k[9],a[10]=k[10],a[11]=k[11],a[12]=k[12],a[13]=k[13],a[14]=k[14],a[15]=k[15],a};g.fromValues=function(a,k,v,x,b,c,m,l,n,t,w,z,C,I,O,R){var P=new q.ARRAY_TYPE(16);return P[0]=a,P[1]=k,P[2]=v,P[3]=x,P[4]=b,P[5]=c,P[6]=m,P[7]=l,P[8]=n,P[9]=t,P[10]=w,P[11]=z,P[12]=C,P[13]=I,P[14]=O,P[15]=R,P};g.set=function(a,k,v,x,b,c,m,l,n,t,w,z,C,I,O,R,P){return a[0]=k,a[1]=v,a[2]=x,a[3]=b,a[4]=c,a[5]=m,a[6]=l,a[7]=n,a[8]=t,a[9]=w,a[10]=z,a[11]=C,a[12]=
I,a[13]=O,a[14]=R,a[15]=P,a};g.identity=K;g.transpose=function(a,k){if(a===k){var v=k[1],x=k[2],b=k[3],c=k[6],m=k[7],l=k[11];a[1]=k[4];a[2]=k[8];a[3]=k[12];a[4]=v;a[6]=k[9];a[7]=k[13];a[8]=x;a[9]=c;a[11]=k[14];a[12]=b;a[13]=m;a[14]=l}else a[0]=k[0],a[1]=k[4],a[2]=k[8],a[3]=k[12],a[4]=k[1],a[5]=k[5],a[6]=k[9],a[7]=k[13],a[8]=k[2],a[9]=k[6],a[10]=k[10],a[11]=k[14],a[12]=k[3],a[13]=k[7],a[14]=k[11],a[15]=k[15];return a};g.invert=function(a,k){var v=k[0],x=k[1],b=k[2],c=k[3],m=k[4],l=k[5],n=k[6],t=k[7],
w=k[8],z=k[9],C=k[10],I=k[11],O=k[12],R=k[13],P=k[14];k=k[15];var X=v*l-x*m,W=v*n-b*m,aa=v*t-c*m,Y=x*n-b*l,ia=x*t-c*l,Ca=b*t-c*n,za=w*R-z*O,ea=w*P-C*O,Ha=w*k-I*O,ja=z*P-C*R,La=z*k-I*R,Ia=C*k-I*P,qa=X*Ia-W*La+aa*ja+Y*Ha-ia*ea+Ca*za;return qa?(qa=1/qa,a[0]=(l*Ia-n*La+t*ja)*qa,a[1]=(b*La-x*Ia-c*ja)*qa,a[2]=(R*Ca-P*ia+k*Y)*qa,a[3]=(C*ia-z*Ca-I*Y)*qa,a[4]=(n*Ha-m*Ia-t*ea)*qa,a[5]=(v*Ia-b*Ha+c*ea)*qa,a[6]=(P*aa-O*Ca-k*W)*qa,a[7]=(w*Ca-C*aa+I*W)*qa,a[8]=(m*La-l*Ha+t*za)*qa,a[9]=(x*Ha-v*La-c*za)*qa,a[10]=
(O*ia-R*aa+k*X)*qa,a[11]=(z*aa-w*ia-I*X)*qa,a[12]=(l*ea-m*ja-n*za)*qa,a[13]=(v*ja-x*ea+b*za)*qa,a[14]=(R*W-O*Y-P*X)*qa,a[15]=(w*Y-z*W+C*X)*qa,a):null};g.adjoint=function(a,k){var v=k[0],x=k[1],b=k[2],c=k[3],m=k[4],l=k[5],n=k[6],t=k[7],w=k[8],z=k[9],C=k[10],I=k[11],O=k[12],R=k[13],P=k[14];k=k[15];return a[0]=l*(C*k-I*P)-z*(n*k-t*P)+R*(n*I-t*C),a[1]=-(x*(C*k-I*P)-z*(b*k-c*P)+R*(b*I-c*C)),a[2]=x*(n*k-t*P)-l*(b*k-c*P)+R*(b*t-c*n),a[3]=-(x*(n*I-t*C)-l*(b*I-c*C)+z*(b*t-c*n)),a[4]=-(m*(C*k-I*P)-w*(n*k-t*
P)+O*(n*I-t*C)),a[5]=v*(C*k-I*P)-w*(b*k-c*P)+O*(b*I-c*C),a[6]=-(v*(n*k-t*P)-m*(b*k-c*P)+O*(b*t-c*n)),a[7]=v*(n*I-t*C)-m*(b*I-c*C)+w*(b*t-c*n),a[8]=m*(z*k-I*R)-w*(l*k-t*R)+O*(l*I-t*z),a[9]=-(v*(z*k-I*R)-w*(x*k-c*R)+O*(x*I-c*z)),a[10]=v*(l*k-t*R)-m*(x*k-c*R)+O*(x*t-c*l),a[11]=-(v*(l*I-t*z)-m*(x*I-c*z)+w*(x*t-c*l)),a[12]=-(m*(z*P-C*R)-w*(l*P-n*R)+O*(l*C-n*z)),a[13]=v*(z*P-C*R)-w*(x*P-b*R)+O*(x*C-b*z),a[14]=-(v*(l*P-n*R)-m*(x*P-b*R)+O*(x*n-b*l)),a[15]=v*(l*C-n*z)-m*(x*C-b*z)+w*(x*n-b*l),a};g.determinant=
function(a){var k=a[0],v=a[1],x=a[2],b=a[3],c=a[4],m=a[5],l=a[6],n=a[7],t=a[8],w=a[9],z=a[10],C=a[11],I=a[12],O=a[13],R=a[14];a=a[15];return(k*m-v*c)*(z*a-C*R)-(k*l-x*c)*(w*a-C*O)+(k*n-b*c)*(w*R-z*O)+(v*l-x*m)*(t*a-C*I)-(v*n-b*m)*(t*R-z*I)+(x*n-b*l)*(t*O-w*I)};g.multiply=N;g.translate=function(a,k,v){var x=v[0],b=v[1];v=v[2];var c=void 0,m=void 0,l=void 0,n=void 0,t=void 0,w=void 0,z=void 0,C=void 0,I=void 0,O=void 0,R=void 0,P=void 0;k===a?(a[12]=k[0]*x+k[4]*b+k[8]*v+k[12],a[13]=k[1]*x+k[5]*b+k[9]*
v+k[13],a[14]=k[2]*x+k[6]*b+k[10]*v+k[14],a[15]=k[3]*x+k[7]*b+k[11]*v+k[15]):(c=k[0],m=k[1],l=k[2],n=k[3],t=k[4],w=k[5],z=k[6],C=k[7],I=k[8],O=k[9],R=k[10],P=k[11],a[0]=c,a[1]=m,a[2]=l,a[3]=n,a[4]=t,a[5]=w,a[6]=z,a[7]=C,a[8]=I,a[9]=O,a[10]=R,a[11]=P,a[12]=c*x+t*b+I*v+k[12],a[13]=m*x+w*b+O*v+k[13],a[14]=l*x+z*b+R*v+k[14],a[15]=n*x+C*b+P*v+k[15]);return a};g.scale=function(a,k,v){var x=v[0],b=v[1];v=v[2];return a[0]=k[0]*x,a[1]=k[1]*x,a[2]=k[2]*x,a[3]=k[3]*x,a[4]=k[4]*b,a[5]=k[5]*b,a[6]=k[6]*b,a[7]=
k[7]*b,a[8]=k[8]*v,a[9]=k[9]*v,a[10]=k[10]*v,a[11]=k[11]*v,a[12]=k[12],a[13]=k[13],a[14]=k[14],a[15]=k[15],a};g.rotate=function(a,k,v,x){var b=x[0],c=x[1];x=x[2];var m=Math.sqrt(b*b+c*c+x*x);if(m<q.EPSILON)return null;b*=m=1/m;c*=m;x*=m;var l=Math.sin(v);var n=Math.cos(v);var t=1-n;v=k[0];m=k[1];var w=k[2];var z=k[3];var C=k[4];var I=k[5];var O=k[6];var R=k[7];var P=k[8];var X=k[9];var W=k[10];var aa=k[11];var Y=b*b*t+n;var ia=c*b*t+x*l;var Ca=x*b*t-c*l;var za=b*c*t-x*l;var ea=c*c*t+n;var Ha=x*c*
t+b*l;var ja=b*x*t+c*l;b=c*x*t-b*l;c=x*x*t+n;a[0]=v*Y+C*ia+P*Ca;a[1]=m*Y+I*ia+X*Ca;a[2]=w*Y+O*ia+W*Ca;a[3]=z*Y+R*ia+aa*Ca;a[4]=v*za+C*ea+P*Ha;a[5]=m*za+I*ea+X*Ha;a[6]=w*za+O*ea+W*Ha;a[7]=z*za+R*ea+aa*Ha;a[8]=v*ja+C*b+P*c;a[9]=m*ja+I*b+X*c;a[10]=w*ja+O*b+W*c;a[11]=z*ja+R*b+aa*c;k!==a&&(a[12]=k[12],a[13]=k[13],a[14]=k[14],a[15]=k[15]);return a};g.rotateX=function(a,k,v){var x=Math.sin(v);v=Math.cos(v);var b=k[4],c=k[5],m=k[6],l=k[7],n=k[8],t=k[9],w=k[10],z=k[11];k!==a&&(a[0]=k[0],a[1]=k[1],a[2]=k[2],
a[3]=k[3],a[12]=k[12],a[13]=k[13],a[14]=k[14],a[15]=k[15]);return a[4]=b*v+n*x,a[5]=c*v+t*x,a[6]=m*v+w*x,a[7]=l*v+z*x,a[8]=n*v-b*x,a[9]=t*v-c*x,a[10]=w*v-m*x,a[11]=z*v-l*x,a};g.rotateY=function(a,k,v){var x=Math.sin(v);v=Math.cos(v);var b=k[0],c=k[1],m=k[2],l=k[3],n=k[8],t=k[9],w=k[10],z=k[11];k!==a&&(a[4]=k[4],a[5]=k[5],a[6]=k[6],a[7]=k[7],a[12]=k[12],a[13]=k[13],a[14]=k[14],a[15]=k[15]);return a[0]=b*v-n*x,a[1]=c*v-t*x,a[2]=m*v-w*x,a[3]=l*v-z*x,a[8]=b*x+n*v,a[9]=c*x+t*v,a[10]=m*x+w*v,a[11]=l*x+
z*v,a};g.rotateZ=function(a,k,v){var x=Math.sin(v);v=Math.cos(v);var b=k[0],c=k[1],m=k[2],l=k[3],n=k[4],t=k[5],w=k[6],z=k[7];k!==a&&(a[8]=k[8],a[9]=k[9],a[10]=k[10],a[11]=k[11],a[12]=k[12],a[13]=k[13],a[14]=k[14],a[15]=k[15]);return a[0]=b*v+n*x,a[1]=c*v+t*x,a[2]=m*v+w*x,a[3]=l*v+z*x,a[4]=n*v-b*x,a[5]=t*v-c*x,a[6]=w*v-m*x,a[7]=z*v-l*x,a};g.fromTranslation=function(a,k){return a[0]=1,a[1]=0,a[2]=0,a[3]=0,a[4]=0,a[5]=1,a[6]=0,a[7]=0,a[8]=0,a[9]=0,a[10]=1,a[11]=0,a[12]=k[0],a[13]=k[1],a[14]=k[2],a[15]=
1,a};g.fromScaling=function(a,k){return a[0]=k[0],a[1]=0,a[2]=0,a[3]=0,a[4]=0,a[5]=k[1],a[6]=0,a[7]=0,a[8]=0,a[9]=0,a[10]=k[2],a[11]=0,a[12]=0,a[13]=0,a[14]=0,a[15]=1,a};g.fromRotation=function(a,k,v){var x=v[0],b=v[1];v=v[2];var c=Math.sqrt(x*x+b*b+v*v),m=void 0,l=void 0,n=void 0;return c<q.EPSILON?null:(x*=c=1/c,b*=c,v*=c,m=Math.sin(k),l=Math.cos(k),n=1-l,a[0]=x*x*n+l,a[1]=b*x*n+v*m,a[2]=v*x*n-b*m,a[3]=0,a[4]=x*b*n-v*m,a[5]=b*b*n+l,a[6]=v*b*n+x*m,a[7]=0,a[8]=x*v*n+b*m,a[9]=b*v*n-x*m,a[10]=v*v*n+
l,a[11]=0,a[12]=0,a[13]=0,a[14]=0,a[15]=1,a)};g.fromXRotation=function(a,k){var v=Math.sin(k);k=Math.cos(k);return a[0]=1,a[1]=0,a[2]=0,a[3]=0,a[4]=0,a[5]=k,a[6]=v,a[7]=0,a[8]=0,a[9]=-v,a[10]=k,a[11]=0,a[12]=0,a[13]=0,a[14]=0,a[15]=1,a};g.fromYRotation=function(a,k){var v=Math.sin(k);k=Math.cos(k);return a[0]=k,a[1]=0,a[2]=-v,a[3]=0,a[4]=0,a[5]=1,a[6]=0,a[7]=0,a[8]=v,a[9]=0,a[10]=k,a[11]=0,a[12]=0,a[13]=0,a[14]=0,a[15]=1,a};g.fromZRotation=function(a,k){var v=Math.sin(k);k=Math.cos(k);return a[0]=
k,a[1]=v,a[2]=0,a[3]=0,a[4]=-v,a[5]=k,a[6]=0,a[7]=0,a[8]=0,a[9]=0,a[10]=1,a[11]=0,a[12]=0,a[13]=0,a[14]=0,a[15]=1,a};g.fromRotationTranslation=F;g.fromQuat2=function(a,k){var v=new q.ARRAY_TYPE(3),x=-k[0],b=-k[1],c=-k[2],m=k[3],l=k[4],n=k[5],t=k[6],w=k[7],z=x*x+b*b+c*c+m*m;0<z?(v[0]=2*(l*m+w*x+n*c-t*b)/z,v[1]=2*(n*m+w*b+t*x-l*c)/z,v[2]=2*(t*m+w*c+l*b-n*x)/z):(v[0]=2*(l*m+w*x+n*c-t*b),v[1]=2*(n*m+w*b+t*x-l*c),v[2]=2*(t*m+w*c+l*b-n*x));return F(a,k,v),a};g.getTranslation=function(a,k){return a[0]=k[12],
a[1]=k[13],a[2]=k[14],a};g.getScaling=function(a,k){var v=k[0],x=k[1],b=k[2],c=k[4],m=k[5],l=k[6],n=k[8],t=k[9];k=k[10];return a[0]=Math.sqrt(v*v+x*x+b*b),a[1]=Math.sqrt(c*c+m*m+l*l),a[2]=Math.sqrt(n*n+t*t+k*k),a};g.getRotation=function(a,k){var v=k[0]+k[5]+k[10],x=0;0<v?(x=2*Math.sqrt(v+1),a[3]=.25*x,a[0]=(k[6]-k[9])/x,a[1]=(k[8]-k[2])/x,a[2]=(k[1]-k[4])/x):k[0]>k[5]&&k[0]>k[10]?(x=2*Math.sqrt(1+k[0]-k[5]-k[10]),a[3]=(k[6]-k[9])/x,a[0]=.25*x,a[1]=(k[1]+k[4])/x,a[2]=(k[8]+k[2])/x):k[5]>k[10]?(x=2*
Math.sqrt(1+k[5]-k[0]-k[10]),a[3]=(k[8]-k[2])/x,a[0]=(k[1]+k[4])/x,a[1]=.25*x,a[2]=(k[6]+k[9])/x):(x=2*Math.sqrt(1+k[10]-k[0]-k[5]),a[3]=(k[1]-k[4])/x,a[0]=(k[8]+k[2])/x,a[1]=(k[6]+k[9])/x,a[2]=.25*x);return a};g.fromRotationTranslationScale=function(a,k,v,x){var b=k[0],c=k[1],m=k[2],l=k[3],n=b+b,t=c+c,w=m+m;k=b*n;var z=b*t;b*=w;var C=c*t;c*=w;m*=w;n*=l;t*=l;l*=w;w=x[0];var I=x[1];x=x[2];return a[0]=(1-(C+m))*w,a[1]=(z+l)*w,a[2]=(b-t)*w,a[3]=0,a[4]=(z-l)*I,a[5]=(1-(k+m))*I,a[6]=(c+n)*I,a[7]=0,a[8]=
(b+t)*x,a[9]=(c-n)*x,a[10]=(1-(k+C))*x,a[11]=0,a[12]=v[0],a[13]=v[1],a[14]=v[2],a[15]=1,a};g.fromRotationTranslationScaleOrigin=function(a,k,v,x,b){var c=k[0],m=k[1],l=k[2],n=k[3],t=c+c,w=m+m,z=l+l;k=c*t;var C=c*w,I=c*z;c=m*w;m*=z;var O=l*z;l=n*t;w*=n;var R=n*z,P=x[0],X=x[1];z=x[2];x=b[0];n=b[1];b=b[2];t=(1-(c+O))*P;var W=(C+R)*P;P*=I-w;C=(C-R)*X;O=(1-(k+O))*X;X*=m+l;I=(I+w)*z;m=(m-l)*z;k=(1-(k+c))*z;return a[0]=t,a[1]=W,a[2]=P,a[3]=0,a[4]=C,a[5]=O,a[6]=X,a[7]=0,a[8]=I,a[9]=m,a[10]=k,a[11]=0,a[12]=
v[0]+x-(t*x+C*n+I*b),a[13]=v[1]+n-(W*x+O*n+m*b),a[14]=v[2]+b-(P*x+X*n+k*b),a[15]=1,a};g.fromQuat=function(a,k){var v=k[0],x=k[1],b=k[2];k=k[3];var c=v+v,m=x+x,l=b+b;v*=c;var n=x*c;x*=m;var t=b*c,w=b*m;b*=l;c*=k;m*=k;k*=l;return a[0]=1-x-b,a[1]=n+k,a[2]=t-m,a[3]=0,a[4]=n-k,a[5]=1-v-b,a[6]=w+c,a[7]=0,a[8]=t+m,a[9]=w-c,a[10]=1-v-x,a[11]=0,a[12]=0,a[13]=0,a[14]=0,a[15]=1,a};g.frustum=function(a,k,v,x,b,c,m){var l=1/(v-k),n=1/(b-x),t=1/(c-m);return a[0]=2*c*l,a[1]=0,a[2]=0,a[3]=0,a[4]=0,a[5]=2*c*n,a[6]=
0,a[7]=0,a[8]=(v+k)*l,a[9]=(b+x)*n,a[10]=(m+c)*t,a[11]=-1,a[12]=0,a[13]=0,a[14]=m*c*2*t,a[15]=0,a};g.perspective=function(a,k,v,x,b){k=1/Math.tan(k/2);var c=void 0;a[0]=k/v;a[1]=0;a[2]=0;a[3]=0;a[4]=0;a[5]=k;a[6]=0;a[7]=0;a[8]=0;a[9]=0;a[11]=-1;a[12]=0;a[13]=0;a[15]=0;null!=b&&b!==1/0?(c=1/(x-b),a[10]=(b+x)*c,a[14]=2*b*x*c):(a[10]=-1,a[14]=-2*x);return a};g.perspectiveFromFieldOfView=function(a,k,v,x){var b=Math.tan(k.upDegrees*Math.PI/180),c=Math.tan(k.downDegrees*Math.PI/180),m=Math.tan(k.leftDegrees*
Math.PI/180);k=Math.tan(k.rightDegrees*Math.PI/180);var l=2/(m+k),n=2/(b+c);return a[0]=l,a[1]=0,a[2]=0,a[3]=0,a[4]=0,a[5]=n,a[6]=0,a[7]=0,a[8]=-(m-k)*l*.5,a[9]=(b-c)*n*.5,a[10]=x/(v-x),a[11]=-1,a[12]=0,a[13]=0,a[14]=x*v/(v-x),a[15]=0,a};g.ortho=function(a,k,v,x,b,c,m){var l=1/(k-v),n=1/(x-b),t=1/(c-m);return a[0]=-2*l,a[1]=0,a[2]=0,a[3]=0,a[4]=0,a[5]=-2*n,a[6]=0,a[7]=0,a[8]=0,a[9]=0,a[10]=2*t,a[11]=0,a[12]=(k+v)*l,a[13]=(b+x)*n,a[14]=(m+c)*t,a[15]=1,a};g.lookAt=function(a,k,v,x){var b=k[0],c=k[1];
k=k[2];var m=x[0];var l=x[1];var n=x[2];var t=v[0];x=v[1];var w=v[2];if(Math.abs(b-t)<q.EPSILON&&Math.abs(c-x)<q.EPSILON&&Math.abs(k-w)<q.EPSILON)return K(a);v=b-t;x=c-x;t=k-w;var z=1/Math.sqrt(v*v+x*x+t*t);w=l*(t*=z)-n*(x*=z);n=n*(v*=z)-m*t;m=m*x-l*v;(z=Math.sqrt(w*w+n*n+m*m))?(w*=z=1/z,n*=z,m*=z):(w=0,n=0,m=0);l=x*m-t*n;var C=t*w-v*m;var I=v*n-x*w;(z=Math.sqrt(l*l+C*C+I*I))?(l*=z=1/z,C*=z,I*=z):(l=0,C=0,I=0);return a[0]=w,a[1]=l,a[2]=v,a[3]=0,a[4]=n,a[5]=C,a[6]=x,a[7]=0,a[8]=m,a[9]=I,a[10]=t,a[11]=
0,a[12]=-(w*b+n*c+m*k),a[13]=-(l*b+C*c+I*k),a[14]=-(v*b+x*c+t*k),a[15]=1,a};g.targetTo=function(a,k,v,x){var b=k[0],c=k[1];k=k[2];var m=x[0],l=x[1],n=x[2];x=b-v[0];var t=c-v[1];v=k-v[2];var w=x*x+t*t+v*v;0<w&&(w=1/Math.sqrt(w),x*=w,t*=w,v*=w);var z=l*v-n*t;n=n*x-m*v;m=m*t-l*x;0<(w=z*z+n*n+m*m)&&(w=1/Math.sqrt(w),z*=w,n*=w,m*=w);return a[0]=z,a[1]=n,a[2]=m,a[3]=0,a[4]=t*m-v*n,a[5]=v*z-x*m,a[6]=x*n-t*z,a[7]=0,a[8]=x,a[9]=t,a[10]=v,a[11]=0,a[12]=b,a[13]=c,a[14]=k,a[15]=1,a};g.str=function(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]+")"};g.frob=function(a){return Math.sqrt(Math.pow(a[0],2)+Math.pow(a[1],2)+Math.pow(a[2],2)+Math.pow(a[3],2)+Math.pow(a[4],2)+Math.pow(a[5],2)+Math.pow(a[6],2)+Math.pow(a[7],2)+Math.pow(a[8],2)+Math.pow(a[9],2)+Math.pow(a[10],2)+Math.pow(a[11],2)+Math.pow(a[12],2)+Math.pow(a[13],2)+Math.pow(a[14],2)+Math.pow(a[15],2))};g.add=function(a,k,
v){return a[0]=k[0]+v[0],a[1]=k[1]+v[1],a[2]=k[2]+v[2],a[3]=k[3]+v[3],a[4]=k[4]+v[4],a[5]=k[5]+v[5],a[6]=k[6]+v[6],a[7]=k[7]+v[7],a[8]=k[8]+v[8],a[9]=k[9]+v[9],a[10]=k[10]+v[10],a[11]=k[11]+v[11],a[12]=k[12]+v[12],a[13]=k[13]+v[13],a[14]=k[14]+v[14],a[15]=k[15]+v[15],a};g.subtract=h;g.multiplyScalar=function(a,k,v){return a[0]=k[0]*v,a[1]=k[1]*v,a[2]=k[2]*v,a[3]=k[3]*v,a[4]=k[4]*v,a[5]=k[5]*v,a[6]=k[6]*v,a[7]=k[7]*v,a[8]=k[8]*v,a[9]=k[9]*v,a[10]=k[10]*v,a[11]=k[11]*v,a[12]=k[12]*v,a[13]=k[13]*v,a[14]=
k[14]*v,a[15]=k[15]*v,a};g.multiplyScalarAndAdd=function(a,k,v,x){return a[0]=k[0]+v[0]*x,a[1]=k[1]+v[1]*x,a[2]=k[2]+v[2]*x,a[3]=k[3]+v[3]*x,a[4]=k[4]+v[4]*x,a[5]=k[5]+v[5]*x,a[6]=k[6]+v[6]*x,a[7]=k[7]+v[7]*x,a[8]=k[8]+v[8]*x,a[9]=k[9]+v[9]*x,a[10]=k[10]+v[10]*x,a[11]=k[11]+v[11]*x,a[12]=k[12]+v[12]*x,a[13]=k[13]+v[13]*x,a[14]=k[14]+v[14]*x,a[15]=k[15]+v[15]*x,a};g.exactEquals=function(a,k){return a[0]===k[0]&&a[1]===k[1]&&a[2]===k[2]&&a[3]===k[3]&&a[4]===k[4]&&a[5]===k[5]&&a[6]===k[6]&&a[7]===k[7]&&
a[8]===k[8]&&a[9]===k[9]&&a[10]===k[10]&&a[11]===k[11]&&a[12]===k[12]&&a[13]===k[13]&&a[14]===k[14]&&a[15]===k[15]};g.equals=function(a,k){var v=a[0],x=a[1],b=a[2],c=a[3],m=a[4],l=a[5],n=a[6],t=a[7],w=a[8],z=a[9],C=a[10],I=a[11],O=a[12],R=a[13],P=a[14];a=a[15];var X=k[0],W=k[1],aa=k[2],Y=k[3],ia=k[4],Ca=k[5],za=k[6],ea=k[7],Ha=k[8],ja=k[9],La=k[10],Ia=k[11],qa=k[12],Xa=k[13],Ga=k[14];k=k[15];return Math.abs(v-X)<=q.EPSILON*Math.max(1,Math.abs(v),Math.abs(X))&&Math.abs(x-W)<=q.EPSILON*Math.max(1,Math.abs(x),
Math.abs(W))&&Math.abs(b-aa)<=q.EPSILON*Math.max(1,Math.abs(b),Math.abs(aa))&&Math.abs(c-Y)<=q.EPSILON*Math.max(1,Math.abs(c),Math.abs(Y))&&Math.abs(m-ia)<=q.EPSILON*Math.max(1,Math.abs(m),Math.abs(ia))&&Math.abs(l-Ca)<=q.EPSILON*Math.max(1,Math.abs(l),Math.abs(Ca))&&Math.abs(n-za)<=q.EPSILON*Math.max(1,Math.abs(n),Math.abs(za))&&Math.abs(t-ea)<=q.EPSILON*Math.max(1,Math.abs(t),Math.abs(ea))&&Math.abs(w-Ha)<=q.EPSILON*Math.max(1,Math.abs(w),Math.abs(Ha))&&Math.abs(z-ja)<=q.EPSILON*Math.max(1,Math.abs(z),
Math.abs(ja))&&Math.abs(C-La)<=q.EPSILON*Math.max(1,Math.abs(C),Math.abs(La))&&Math.abs(I-Ia)<=q.EPSILON*Math.max(1,Math.abs(I),Math.abs(Ia))&&Math.abs(O-qa)<=q.EPSILON*Math.max(1,Math.abs(O),Math.abs(qa))&&Math.abs(R-Xa)<=q.EPSILON*Math.max(1,Math.abs(R),Math.abs(Xa))&&Math.abs(P-Ga)<=q.EPSILON*Math.max(1,Math.abs(P),Math.abs(Ga))&&Math.abs(a-k)<=q.EPSILON*Math.max(1,Math.abs(a),Math.abs(k))};var q=function(a){if(a&&a.__esModule)return a;var k={};if(null!=a)for(var v in a)Object.prototype.hasOwnProperty.call(a,
v)&&(k[v]=a[v]);return k.default=a,k}(G(0));g.mul=N;g.sub=h},function(f,g,G){function K(h,q,a){var k=q[0],v=q[1],x=q[2],b=q[3],c=q[4],m=q[5],l=q[6],n=q[7];q=q[8];var t=a[0],w=a[1],z=a[2],C=a[3],I=a[4],O=a[5],R=a[6],P=a[7];a=a[8];return h[0]=t*k+w*b+z*l,h[1]=t*v+w*c+z*n,h[2]=t*x+w*m+z*q,h[3]=C*k+I*b+O*l,h[4]=C*v+I*c+O*n,h[5]=C*x+I*m+O*q,h[6]=R*k+P*b+a*l,h[7]=R*v+P*c+a*n,h[8]=R*x+P*m+a*q,h}function N(h,q,a){return h[0]=q[0]-a[0],h[1]=q[1]-a[1],h[2]=q[2]-a[2],h[3]=q[3]-a[3],h[4]=q[4]-a[4],h[5]=q[5]-
a[5],h[6]=q[6]-a[6],h[7]=q[7]-a[7],h[8]=q[8]-a[8],h}Object.defineProperty(g,"__esModule",{value:!0});g.sub=g.mul=void 0;g.create=function(){var h=new F.ARRAY_TYPE(9);F.ARRAY_TYPE!=Float32Array&&(h[1]=0,h[2]=0,h[3]=0,h[5]=0,h[6]=0,h[7]=0);return h[0]=1,h[4]=1,h[8]=1,h};g.fromMat4=function(h,q){return h[0]=q[0],h[1]=q[1],h[2]=q[2],h[3]=q[4],h[4]=q[5],h[5]=q[6],h[6]=q[8],h[7]=q[9],h[8]=q[10],h};g.clone=function(h){var q=new F.ARRAY_TYPE(9);return q[0]=h[0],q[1]=h[1],q[2]=h[2],q[3]=h[3],q[4]=h[4],q[5]=
h[5],q[6]=h[6],q[7]=h[7],q[8]=h[8],q};g.copy=function(h,q){return h[0]=q[0],h[1]=q[1],h[2]=q[2],h[3]=q[3],h[4]=q[4],h[5]=q[5],h[6]=q[6],h[7]=q[7],h[8]=q[8],h};g.fromValues=function(h,q,a,k,v,x,b,c,m){var l=new F.ARRAY_TYPE(9);return l[0]=h,l[1]=q,l[2]=a,l[3]=k,l[4]=v,l[5]=x,l[6]=b,l[7]=c,l[8]=m,l};g.set=function(h,q,a,k,v,x,b,c,m,l){return h[0]=q,h[1]=a,h[2]=k,h[3]=v,h[4]=x,h[5]=b,h[6]=c,h[7]=m,h[8]=l,h};g.identity=function(h){return h[0]=1,h[1]=0,h[2]=0,h[3]=0,h[4]=1,h[5]=0,h[6]=0,h[7]=0,h[8]=1,
h};g.transpose=function(h,q){if(h===q){var a=q[1],k=q[2],v=q[5];h[1]=q[3];h[2]=q[6];h[3]=a;h[5]=q[7];h[6]=k;h[7]=v}else h[0]=q[0],h[1]=q[3],h[2]=q[6],h[3]=q[1],h[4]=q[4],h[5]=q[7],h[6]=q[2],h[7]=q[5],h[8]=q[8];return h};g.invert=function(h,q){var a=q[0],k=q[1],v=q[2],x=q[3],b=q[4],c=q[5],m=q[6],l=q[7];q=q[8];var n=q*b-c*l,t=-q*x+c*m,w=l*x-b*m,z=a*n+k*t+v*w;return z?(z=1/z,h[0]=n*z,h[1]=(-q*k+v*l)*z,h[2]=(c*k-v*b)*z,h[3]=t*z,h[4]=(q*a-v*m)*z,h[5]=(-c*a+v*x)*z,h[6]=w*z,h[7]=(-l*a+k*m)*z,h[8]=(b*a-k*
x)*z,h):null};g.adjoint=function(h,q){var a=q[0],k=q[1],v=q[2],x=q[3],b=q[4],c=q[5],m=q[6],l=q[7];q=q[8];return h[0]=b*q-c*l,h[1]=v*l-k*q,h[2]=k*c-v*b,h[3]=c*m-x*q,h[4]=a*q-v*m,h[5]=v*x-a*c,h[6]=x*l-b*m,h[7]=k*m-a*l,h[8]=a*b-k*x,h};g.determinant=function(h){var q=h[3],a=h[4],k=h[5],v=h[6],x=h[7],b=h[8];return h[0]*(b*a-k*x)+h[1]*(-b*q+k*v)+h[2]*(x*q-a*v)};g.multiply=K;g.translate=function(h,q,a){var k=q[0],v=q[1],x=q[2],b=q[3],c=q[4],m=q[5],l=q[6],n=q[7];q=q[8];var t=a[0];a=a[1];return h[0]=k,h[1]=
v,h[2]=x,h[3]=b,h[4]=c,h[5]=m,h[6]=t*k+a*b+l,h[7]=t*v+a*c+n,h[8]=t*x+a*m+q,h};g.rotate=function(h,q,a){var k=q[0],v=q[1],x=q[2],b=q[3],c=q[4],m=q[5],l=q[6],n=q[7];q=q[8];var t=Math.sin(a);a=Math.cos(a);return h[0]=a*k+t*b,h[1]=a*v+t*c,h[2]=a*x+t*m,h[3]=a*b-t*k,h[4]=a*c-t*v,h[5]=a*m-t*x,h[6]=l,h[7]=n,h[8]=q,h};g.scale=function(h,q,a){var k=a[0];a=a[1];return h[0]=k*q[0],h[1]=k*q[1],h[2]=k*q[2],h[3]=a*q[3],h[4]=a*q[4],h[5]=a*q[5],h[6]=q[6],h[7]=q[7],h[8]=q[8],h};g.fromTranslation=function(h,q){return h[0]=
1,h[1]=0,h[2]=0,h[3]=0,h[4]=1,h[5]=0,h[6]=q[0],h[7]=q[1],h[8]=1,h};g.fromRotation=function(h,q){var a=Math.sin(q);q=Math.cos(q);return h[0]=q,h[1]=a,h[2]=0,h[3]=-a,h[4]=q,h[5]=0,h[6]=0,h[7]=0,h[8]=1,h};g.fromScaling=function(h,q){return h[0]=q[0],h[1]=0,h[2]=0,h[3]=0,h[4]=q[1],h[5]=0,h[6]=0,h[7]=0,h[8]=1,h};g.fromMat2d=function(h,q){return h[0]=q[0],h[1]=q[1],h[2]=0,h[3]=q[2],h[4]=q[3],h[5]=0,h[6]=q[4],h[7]=q[5],h[8]=1,h};g.fromQuat=function(h,q){var a=q[0],k=q[1],v=q[2];q=q[3];var x=a+a,b=k+k,c=
v+v;a*=x;var m=k*x;k*=b;var l=v*x,n=v*b;v*=c;x*=q;b*=q;q*=c;return h[0]=1-k-v,h[3]=m-q,h[6]=l+b,h[1]=m+q,h[4]=1-a-v,h[7]=n-x,h[2]=l-b,h[5]=n+x,h[8]=1-a-k,h};g.normalFromMat4=function(h,q){var a=q[0],k=q[1],v=q[2],x=q[3],b=q[4],c=q[5],m=q[6],l=q[7],n=q[8],t=q[9],w=q[10],z=q[11],C=q[12],I=q[13],O=q[14];q=q[15];var R=a*c-k*b,P=a*m-v*b,X=a*l-x*b,W=k*m-v*c,aa=k*l-x*c,Y=v*l-x*m,ia=n*I-t*C,Ca=n*O-w*C;n=n*q-z*C;var za=t*O-w*I;t=t*q-z*I;w=w*q-z*O;return(z=R*w-P*t+X*za+W*n-aa*Ca+Y*ia)?(z=1/z,h[0]=(c*w-m*t+
l*za)*z,h[1]=(m*n-b*w-l*Ca)*z,h[2]=(b*t-c*n+l*ia)*z,h[3]=(v*t-k*w-x*za)*z,h[4]=(a*w-v*n+x*Ca)*z,h[5]=(k*n-a*t-x*ia)*z,h[6]=(I*Y-O*aa+q*W)*z,h[7]=(O*X-C*Y-q*P)*z,h[8]=(C*aa-I*X+q*R)*z,h):null};g.projection=function(h,q,a){return h[0]=2/q,h[1]=0,h[2]=0,h[3]=0,h[4]=-2/a,h[5]=0,h[6]=-1,h[7]=1,h[8]=1,h};g.str=function(h){return"mat3("+h[0]+", "+h[1]+", "+h[2]+", "+h[3]+", "+h[4]+", "+h[5]+", "+h[6]+", "+h[7]+", "+h[8]+")"};g.frob=function(h){return Math.sqrt(Math.pow(h[0],2)+Math.pow(h[1],2)+Math.pow(h[2],
2)+Math.pow(h[3],2)+Math.pow(h[4],2)+Math.pow(h[5],2)+Math.pow(h[6],2)+Math.pow(h[7],2)+Math.pow(h[8],2))};g.add=function(h,q,a){return h[0]=q[0]+a[0],h[1]=q[1]+a[1],h[2]=q[2]+a[2],h[3]=q[3]+a[3],h[4]=q[4]+a[4],h[5]=q[5]+a[5],h[6]=q[6]+a[6],h[7]=q[7]+a[7],h[8]=q[8]+a[8],h};g.subtract=N;g.multiplyScalar=function(h,q,a){return h[0]=q[0]*a,h[1]=q[1]*a,h[2]=q[2]*a,h[3]=q[3]*a,h[4]=q[4]*a,h[5]=q[5]*a,h[6]=q[6]*a,h[7]=q[7]*a,h[8]=q[8]*a,h};g.multiplyScalarAndAdd=function(h,q,a,k){return h[0]=q[0]+a[0]*
k,h[1]=q[1]+a[1]*k,h[2]=q[2]+a[2]*k,h[3]=q[3]+a[3]*k,h[4]=q[4]+a[4]*k,h[5]=q[5]+a[5]*k,h[6]=q[6]+a[6]*k,h[7]=q[7]+a[7]*k,h[8]=q[8]+a[8]*k,h};g.exactEquals=function(h,q){return h[0]===q[0]&&h[1]===q[1]&&h[2]===q[2]&&h[3]===q[3]&&h[4]===q[4]&&h[5]===q[5]&&h[6]===q[6]&&h[7]===q[7]&&h[8]===q[8]};g.equals=function(h,q){var a=h[0],k=h[1],v=h[2],x=h[3],b=h[4],c=h[5],m=h[6],l=h[7];h=h[8];var n=q[0],t=q[1],w=q[2],z=q[3],C=q[4],I=q[5],O=q[6],R=q[7];q=q[8];return Math.abs(a-n)<=F.EPSILON*Math.max(1,Math.abs(a),
Math.abs(n))&&Math.abs(k-t)<=F.EPSILON*Math.max(1,Math.abs(k),Math.abs(t))&&Math.abs(v-w)<=F.EPSILON*Math.max(1,Math.abs(v),Math.abs(w))&&Math.abs(x-z)<=F.EPSILON*Math.max(1,Math.abs(x),Math.abs(z))&&Math.abs(b-C)<=F.EPSILON*Math.max(1,Math.abs(b),Math.abs(C))&&Math.abs(c-I)<=F.EPSILON*Math.max(1,Math.abs(c),Math.abs(I))&&Math.abs(m-O)<=F.EPSILON*Math.max(1,Math.abs(m),Math.abs(O))&&Math.abs(l-R)<=F.EPSILON*Math.max(1,Math.abs(l),Math.abs(R))&&Math.abs(h-q)<=F.EPSILON*Math.max(1,Math.abs(h),Math.abs(q))};
var F=function(h){if(h&&h.__esModule)return h;var q={};if(null!=h)for(var a in h)Object.prototype.hasOwnProperty.call(h,a)&&(q[a]=h[a]);return q.default=h,q}(G(0));g.mul=K;g.sub=N},function(f,g,G){function K(){var b=new x.ARRAY_TYPE(2);return x.ARRAY_TYPE!=Float32Array&&(b[0]=0,b[1]=0),b}function N(b,c,m){return b[0]=c[0]-m[0],b[1]=c[1]-m[1],b}function F(b,c,m){return b[0]=c[0]*m[0],b[1]=c[1]*m[1],b}function h(b,c,m){return b[0]=c[0]/m[0],b[1]=c[1]/m[1],b}function q(b,c){var m=c[0]-b[0];b=c[1]-b[1];
return Math.sqrt(m*m+b*b)}function a(b,c){var m=c[0]-b[0];b=c[1]-b[1];return m*m+b*b}function k(b){var c=b[0];b=b[1];return Math.sqrt(c*c+b*b)}function v(b){var c=b[0];b=b[1];return c*c+b*b}Object.defineProperty(g,"__esModule",{value:!0});g.forEach=g.sqrLen=g.sqrDist=g.dist=g.div=g.mul=g.sub=g.len=void 0;g.create=K;g.clone=function(b){var c=new x.ARRAY_TYPE(2);return c[0]=b[0],c[1]=b[1],c};g.fromValues=function(b,c){var m=new x.ARRAY_TYPE(2);return m[0]=b,m[1]=c,m};g.copy=function(b,c){return b[0]=
c[0],b[1]=c[1],b};g.set=function(b,c,m){return b[0]=c,b[1]=m,b};g.add=function(b,c,m){return b[0]=c[0]+m[0],b[1]=c[1]+m[1],b};g.subtract=N;g.multiply=F;g.divide=h;g.ceil=function(b,c){return b[0]=Math.ceil(c[0]),b[1]=Math.ceil(c[1]),b};g.floor=function(b,c){return b[0]=Math.floor(c[0]),b[1]=Math.floor(c[1]),b};g.min=function(b,c,m){return b[0]=Math.min(c[0],m[0]),b[1]=Math.min(c[1],m[1]),b};g.max=function(b,c,m){return b[0]=Math.max(c[0],m[0]),b[1]=Math.max(c[1],m[1]),b};g.round=function(b,c){return b[0]=
Math.round(c[0]),b[1]=Math.round(c[1]),b};g.scale=function(b,c,m){return b[0]=c[0]*m,b[1]=c[1]*m,b};g.scaleAndAdd=function(b,c,m,l){return b[0]=c[0]+m[0]*l,b[1]=c[1]+m[1]*l,b};g.distance=q;g.squaredDistance=a;g.length=k;g.squaredLength=v;g.negate=function(b,c){return b[0]=-c[0],b[1]=-c[1],b};g.inverse=function(b,c){return b[0]=1/c[0],b[1]=1/c[1],b};g.normalize=function(b,c){var m=c[0],l=c[1];m=m*m+l*l;0<m&&(m=1/Math.sqrt(m),b[0]=c[0]*m,b[1]=c[1]*m);return b};g.dot=function(b,c){return b[0]*c[0]+b[1]*
c[1]};g.cross=function(b,c,m){c=c[0]*m[1]-c[1]*m[0];return b[0]=b[1]=0,b[2]=c,b};g.lerp=function(b,c,m,l){var n=c[0];c=c[1];return b[0]=n+l*(m[0]-n),b[1]=c+l*(m[1]-c),b};g.random=function(b,c){c=c||1;var m=2*x.RANDOM()*Math.PI;return b[0]=Math.cos(m)*c,b[1]=Math.sin(m)*c,b};g.transformMat2=function(b,c,m){var l=c[0];c=c[1];return b[0]=m[0]*l+m[2]*c,b[1]=m[1]*l+m[3]*c,b};g.transformMat2d=function(b,c,m){var l=c[0];c=c[1];return b[0]=m[0]*l+m[2]*c+m[4],b[1]=m[1]*l+m[3]*c+m[5],b};g.transformMat3=function(b,
c,m){var l=c[0];c=c[1];return b[0]=m[0]*l+m[3]*c+m[6],b[1]=m[1]*l+m[4]*c+m[7],b};g.transformMat4=function(b,c,m){var l=c[0];c=c[1];return b[0]=m[0]*l+m[4]*c+m[12],b[1]=m[1]*l+m[5]*c+m[13],b};g.rotate=function(b,c,m,l){var n=c[0]-m[0];c=c[1]-m[1];var t=Math.sin(l);l=Math.cos(l);return b[0]=n*l-c*t+m[0],b[1]=n*t+c*l+m[1],b};g.angle=function(b,c){var m=b[0];b=b[1];var l=c[0];c=c[1];var n=m*m+b*b;0<n&&(n=1/Math.sqrt(n));var t=l*l+c*c;0<t&&(t=1/Math.sqrt(t));m=(m*l+b*c)*n*t;return 1<m?0:-1>m?Math.PI:Math.acos(m)};
g.str=function(b){return"vec2("+b[0]+", "+b[1]+")"};g.exactEquals=function(b,c){return b[0]===c[0]&&b[1]===c[1]};g.equals=function(b,c){var m=b[0];b=b[1];var l=c[0];c=c[1];return Math.abs(m-l)<=x.EPSILON*Math.max(1,Math.abs(m),Math.abs(l))&&Math.abs(b-c)<=x.EPSILON*Math.max(1,Math.abs(b),Math.abs(c))};var x=function(b){if(b&&b.__esModule)return b;var c={};if(null!=b)for(var m in b)Object.prototype.hasOwnProperty.call(b,m)&&(c[m]=b[m]);return c.default=b,c}(G(0));g.len=k;g.sub=N;g.mul=F;g.div=h;g.dist=
q;g.sqrDist=a;g.sqrLen=v;g.forEach=function(){var b=K();return function(c,m,l,n,t,w){m||(m=2);l||(l=0);for(n=n?Math.min(n*m+l,c.length):c.length;l<n;l+=m)b[0]=c[l],b[1]=c[l+1],t(b,b,w),c[l]=b[0],c[l+1]=b[1];return c}}()},function(f,g,G){function K(b){if(b&&b.__esModule)return b;var c={};if(null!=b)for(var m in b)Object.prototype.hasOwnProperty.call(b,m)&&(c[m]=b[m]);return c.default=b,c}function N(b,c,m){var l=.5*m[0],n=.5*m[1];m=.5*m[2];var t=c[0],w=c[1],z=c[2];c=c[3];return b[0]=t,b[1]=w,b[2]=z,
b[3]=c,b[4]=l*c+n*z-m*w,b[5]=n*c+m*t-l*z,b[6]=m*c+l*w-n*t,b[7]=-l*t-n*w-m*z,b}function F(b,c){return b[0]=c[0],b[1]=c[1],b[2]=c[2],b[3]=c[3],b[4]=c[4],b[5]=c[5],b[6]=c[6],b[7]=c[7],b}function h(b,c,m){var l=c[0],n=c[1],t=c[2],w=c[3],z=m[4],C=m[5],I=m[6],O=m[7],R=c[4],P=c[5],X=c[6];c=c[7];var W=m[0],aa=m[1],Y=m[2];m=m[3];return b[0]=l*m+w*W+n*Y-t*aa,b[1]=n*m+w*aa+t*W-l*Y,b[2]=t*m+w*Y+l*aa-n*W,b[3]=w*m-l*W-n*aa-t*Y,b[4]=l*O+w*z+n*I-t*C+R*m+c*W+P*Y-X*aa,b[5]=n*O+w*C+t*z-l*I+P*m+c*aa+X*W-R*Y,b[6]=t*O+
w*I+l*C-n*z+X*m+c*Y+R*aa-P*W,b[7]=w*O-l*z-n*C-t*I+c*m-R*W-P*aa-X*Y,b}Object.defineProperty(g,"__esModule",{value:!0});g.sqrLen=g.squaredLength=g.len=g.length=g.dot=g.mul=g.setReal=g.getReal=void 0;g.create=function(){var b=new q.ARRAY_TYPE(8);q.ARRAY_TYPE!=Float32Array&&(b[0]=0,b[1]=0,b[2]=0,b[4]=0,b[5]=0,b[6]=0,b[7]=0);return b[3]=1,b};g.clone=function(b){var c=new q.ARRAY_TYPE(8);return c[0]=b[0],c[1]=b[1],c[2]=b[2],c[3]=b[3],c[4]=b[4],c[5]=b[5],c[6]=b[6],c[7]=b[7],c};g.fromValues=function(b,c,
m,l,n,t,w,z){var C=new q.ARRAY_TYPE(8);return C[0]=b,C[1]=c,C[2]=m,C[3]=l,C[4]=n,C[5]=t,C[6]=w,C[7]=z,C};g.fromRotationTranslationValues=function(b,c,m,l,n,t,w){var z=new q.ARRAY_TYPE(8);z[0]=b;z[1]=c;z[2]=m;z[3]=l;n*=.5;t*=.5;w*=.5;return z[4]=n*l+t*m-w*c,z[5]=t*l+w*b-n*m,z[6]=w*l+n*c-t*b,z[7]=-n*b-t*c-w*m,z};g.fromRotationTranslation=N;g.fromTranslation=function(b,c){return b[0]=0,b[1]=0,b[2]=0,b[3]=1,b[4]=.5*c[0],b[5]=.5*c[1],b[6]=.5*c[2],b[7]=0,b};g.fromRotation=function(b,c){return b[0]=c[0],
b[1]=c[1],b[2]=c[2],b[3]=c[3],b[4]=0,b[5]=0,b[6]=0,b[7]=0,b};g.fromMat4=function(b,c){var m=a.create();k.getRotation(m,c);var l=new q.ARRAY_TYPE(3);return k.getTranslation(l,c),N(b,m,l),b};g.copy=F;g.identity=function(b){return b[0]=0,b[1]=0,b[2]=0,b[3]=1,b[4]=0,b[5]=0,b[6]=0,b[7]=0,b};g.set=function(b,c,m,l,n,t,w,z,C){return b[0]=c,b[1]=m,b[2]=l,b[3]=n,b[4]=t,b[5]=w,b[6]=z,b[7]=C,b};g.getDual=function(b,c){return b[0]=c[4],b[1]=c[5],b[2]=c[6],b[3]=c[7],b};g.setDual=function(b,c){return b[4]=c[0],
b[5]=c[1],b[6]=c[2],b[7]=c[3],b};g.getTranslation=function(b,c){var m=c[4],l=c[5],n=c[6],t=c[7],w=-c[0],z=-c[1],C=-c[2];c=c[3];return b[0]=2*(m*c+t*w+l*C-n*z),b[1]=2*(l*c+t*z+n*w-m*C),b[2]=2*(n*c+t*C+m*z-l*w),b};g.translate=function(b,c,m){var l=c[0],n=c[1],t=c[2],w=c[3],z=.5*m[0],C=.5*m[1];m=.5*m[2];var I=c[4],O=c[5],R=c[6];c=c[7];return b[0]=l,b[1]=n,b[2]=t,b[3]=w,b[4]=w*z+n*m-t*C+I,b[5]=w*C+t*z-l*m+O,b[6]=w*m+l*C-n*z+R,b[7]=-l*z-n*C-t*m+c,b};g.rotateX=function(b,c,m){var l=-c[0],n=-c[1],t=-c[2],
w=c[3],z=c[4],C=c[5],I=c[6],O=c[7],R=z*w+O*l+C*t-I*n,P=C*w+O*n+I*l-z*t,X=I*w+O*t+z*n-C*l;z=O*w-z*l-C*n-I*t;return a.rotateX(b,c,m),l=b[0],n=b[1],t=b[2],w=b[3],b[4]=R*w+z*l+P*t-X*n,b[5]=P*w+z*n+X*l-R*t,b[6]=X*w+z*t+R*n-P*l,b[7]=z*w-R*l-P*n-X*t,b};g.rotateY=function(b,c,m){var l=-c[0],n=-c[1],t=-c[2],w=c[3],z=c[4],C=c[5],I=c[6],O=c[7],R=z*w+O*l+C*t-I*n,P=C*w+O*n+I*l-z*t,X=I*w+O*t+z*n-C*l;z=O*w-z*l-C*n-I*t;return a.rotateY(b,c,m),l=b[0],n=b[1],t=b[2],w=b[3],b[4]=R*w+z*l+P*t-X*n,b[5]=P*w+z*n+X*l-R*t,
b[6]=X*w+z*t+R*n-P*l,b[7]=z*w-R*l-P*n-X*t,b};g.rotateZ=function(b,c,m){var l=-c[0],n=-c[1],t=-c[2],w=c[3],z=c[4],C=c[5],I=c[6],O=c[7],R=z*w+O*l+C*t-I*n,P=C*w+O*n+I*l-z*t,X=I*w+O*t+z*n-C*l;z=O*w-z*l-C*n-I*t;return a.rotateZ(b,c,m),l=b[0],n=b[1],t=b[2],w=b[3],b[4]=R*w+z*l+P*t-X*n,b[5]=P*w+z*n+X*l-R*t,b[6]=X*w+z*t+R*n-P*l,b[7]=z*w-R*l-P*n-X*t,b};g.rotateByQuatAppend=function(b,c,m){var l=m[0],n=m[1],t=m[2];m=m[3];var w=c[0],z=c[1],C=c[2],I=c[3];return b[0]=w*m+I*l+z*t-C*n,b[1]=z*m+I*n+C*l-w*t,b[2]=C*
m+I*t+w*n-z*l,b[3]=I*m-w*l-z*n-C*t,w=c[4],z=c[5],C=c[6],I=c[7],b[4]=w*m+I*l+z*t-C*n,b[5]=z*m+I*n+C*l-w*t,b[6]=C*m+I*t+w*n-z*l,b[7]=I*m-w*l-z*n-C*t,b};g.rotateByQuatPrepend=function(b,c,m){var l=c[0],n=c[1],t=c[2];c=c[3];var w=m[0],z=m[1],C=m[2],I=m[3];return b[0]=l*I+c*w+n*C-t*z,b[1]=n*I+c*z+t*w-l*C,b[2]=t*I+c*C+l*z-n*w,b[3]=c*I-l*w-n*z-t*C,w=m[4],z=m[5],C=m[6],I=m[7],b[4]=l*I+c*w+n*C-t*z,b[5]=n*I+c*z+t*w-l*C,b[6]=t*I+c*C+l*z-n*w,b[7]=c*I-l*w-n*z-t*C,b};g.rotateAroundAxis=function(b,c,m,l){if(Math.abs(l)<
q.EPSILON)return F(b,c);var n=Math.sqrt(m[0]*m[0]+m[1]*m[1]+m[2]*m[2]);l*=.5;var t=Math.sin(l),w=t*m[0]/n,z=t*m[1]/n;m=t*m[2]/n;l=Math.cos(l);n=c[0];t=c[1];var C=c[2],I=c[3];b[0]=n*l+I*w+t*m-C*z;b[1]=t*l+I*z+C*w-n*m;b[2]=C*l+I*m+n*z-t*w;b[3]=I*l-n*w-t*z-C*m;n=c[4];t=c[5];C=c[6];c=c[7];return b[4]=n*l+c*w+t*m-C*z,b[5]=t*l+c*z+C*w-n*m,b[6]=C*l+c*m+n*z-t*w,b[7]=c*l-n*w-t*z-C*m,b};g.add=function(b,c,m){return b[0]=c[0]+m[0],b[1]=c[1]+m[1],b[2]=c[2]+m[2],b[3]=c[3]+m[3],b[4]=c[4]+m[4],b[5]=c[5]+m[5],b[6]=
c[6]+m[6],b[7]=c[7]+m[7],b};g.multiply=h;g.scale=function(b,c,m){return b[0]=c[0]*m,b[1]=c[1]*m,b[2]=c[2]*m,b[3]=c[3]*m,b[4]=c[4]*m,b[5]=c[5]*m,b[6]=c[6]*m,b[7]=c[7]*m,b};g.lerp=function(b,c,m,l){var n=1-l;0>v(c,m)&&(l=-l);return b[0]=c[0]*n+m[0]*l,b[1]=c[1]*n+m[1]*l,b[2]=c[2]*n+m[2]*l,b[3]=c[3]*n+m[3]*l,b[4]=c[4]*n+m[4]*l,b[5]=c[5]*n+m[5]*l,b[6]=c[6]*n+m[6]*l,b[7]=c[7]*n+m[7]*l,b};g.invert=function(b,c){var m=x(c);return b[0]=-c[0]/m,b[1]=-c[1]/m,b[2]=-c[2]/m,b[3]=c[3]/m,b[4]=-c[4]/m,b[5]=-c[5]/
m,b[6]=-c[6]/m,b[7]=c[7]/m,b};g.conjugate=function(b,c){return b[0]=-c[0],b[1]=-c[1],b[2]=-c[2],b[3]=c[3],b[4]=-c[4],b[5]=-c[5],b[6]=-c[6],b[7]=c[7],b};g.normalize=function(b,c){var m=x(c);if(0<m){m=Math.sqrt(m);var l=c[0]/m,n=c[1]/m,t=c[2]/m,w=c[3]/m,z=c[4],C=c[5],I=c[6];c=c[7];var O=l*z+n*C+t*I+w*c;b[0]=l;b[1]=n;b[2]=t;b[3]=w;b[4]=(z-l*O)/m;b[5]=(C-n*O)/m;b[6]=(I-t*O)/m;b[7]=(c-w*O)/m}return b};g.str=function(b){return"quat2("+b[0]+", "+b[1]+", "+b[2]+", "+b[3]+", "+b[4]+", "+b[5]+", "+b[6]+", "+
b[7]+")"};g.exactEquals=function(b,c){return b[0]===c[0]&&b[1]===c[1]&&b[2]===c[2]&&b[3]===c[3]&&b[4]===c[4]&&b[5]===c[5]&&b[6]===c[6]&&b[7]===c[7]};g.equals=function(b,c){var m=b[0],l=b[1],n=b[2],t=b[3],w=b[4],z=b[5],C=b[6];b=b[7];var I=c[0],O=c[1],R=c[2],P=c[3],X=c[4],W=c[5],aa=c[6];c=c[7];return Math.abs(m-I)<=q.EPSILON*Math.max(1,Math.abs(m),Math.abs(I))&&Math.abs(l-O)<=q.EPSILON*Math.max(1,Math.abs(l),Math.abs(O))&&Math.abs(n-R)<=q.EPSILON*Math.max(1,Math.abs(n),Math.abs(R))&&Math.abs(t-P)<=
q.EPSILON*Math.max(1,Math.abs(t),Math.abs(P))&&Math.abs(w-X)<=q.EPSILON*Math.max(1,Math.abs(w),Math.abs(X))&&Math.abs(z-W)<=q.EPSILON*Math.max(1,Math.abs(z),Math.abs(W))&&Math.abs(C-aa)<=q.EPSILON*Math.max(1,Math.abs(C),Math.abs(aa))&&Math.abs(b-c)<=q.EPSILON*Math.max(1,Math.abs(b),Math.abs(c))};var q=K(G(0)),a=K(G(3)),k=K(G(4));g.getReal=a.copy;g.setReal=a.copy;g.mul=h;var v=g.dot=a.dot;f=g.length=a.length;var x=(g.len=f,g.squaredLength=a.squaredLength);g.sqrLen=x},function(f,g,G){function K(h,q,
a){var k=q[0],v=q[1],x=q[2],b=q[3],c=q[4];q=q[5];var m=a[0],l=a[1],n=a[2],t=a[3],w=a[4];a=a[5];return h[0]=k*m+x*l,h[1]=v*m+b*l,h[2]=k*n+x*t,h[3]=v*n+b*t,h[4]=k*w+x*a+c,h[5]=v*w+b*a+q,h}function N(h,q,a){return h[0]=q[0]-a[0],h[1]=q[1]-a[1],h[2]=q[2]-a[2],h[3]=q[3]-a[3],h[4]=q[4]-a[4],h[5]=q[5]-a[5],h}Object.defineProperty(g,"__esModule",{value:!0});g.sub=g.mul=void 0;g.create=function(){var h=new F.ARRAY_TYPE(6);F.ARRAY_TYPE!=Float32Array&&(h[1]=0,h[2]=0,h[4]=0,h[5]=0);return h[0]=1,h[3]=1,h};g.clone=
function(h){var q=new F.ARRAY_TYPE(6);return q[0]=h[0],q[1]=h[1],q[2]=h[2],q[3]=h[3],q[4]=h[4],q[5]=h[5],q};g.copy=function(h,q){return h[0]=q[0],h[1]=q[1],h[2]=q[2],h[3]=q[3],h[4]=q[4],h[5]=q[5],h};g.identity=function(h){return h[0]=1,h[1]=0,h[2]=0,h[3]=1,h[4]=0,h[5]=0,h};g.fromValues=function(h,q,a,k,v,x){var b=new F.ARRAY_TYPE(6);return b[0]=h,b[1]=q,b[2]=a,b[3]=k,b[4]=v,b[5]=x,b};g.set=function(h,q,a,k,v,x,b){return h[0]=q,h[1]=a,h[2]=k,h[3]=v,h[4]=x,h[5]=b,h};g.invert=function(h,q){var a=q[0],
k=q[1],v=q[2],x=q[3],b=q[4];q=q[5];var c=a*x-k*v;return c?(c=1/c,h[0]=x*c,h[1]=-k*c,h[2]=-v*c,h[3]=a*c,h[4]=(v*q-x*b)*c,h[5]=(k*b-a*q)*c,h):null};g.determinant=function(h){return h[0]*h[3]-h[1]*h[2]};g.multiply=K;g.rotate=function(h,q,a){var k=q[0],v=q[1],x=q[2],b=q[3],c=q[4];q=q[5];var m=Math.sin(a);a=Math.cos(a);return h[0]=k*a+x*m,h[1]=v*a+b*m,h[2]=k*-m+x*a,h[3]=v*-m+b*a,h[4]=c,h[5]=q,h};g.scale=function(h,q,a){var k=q[1],v=q[2],x=q[3],b=q[4],c=q[5],m=a[0];a=a[1];return h[0]=q[0]*m,h[1]=k*m,h[2]=
v*a,h[3]=x*a,h[4]=b,h[5]=c,h};g.translate=function(h,q,a){var k=q[0],v=q[1],x=q[2],b=q[3],c=q[4];q=q[5];var m=a[0];a=a[1];return h[0]=k,h[1]=v,h[2]=x,h[3]=b,h[4]=k*m+x*a+c,h[5]=v*m+b*a+q,h};g.fromRotation=function(h,q){var a=Math.sin(q);q=Math.cos(q);return h[0]=q,h[1]=a,h[2]=-a,h[3]=q,h[4]=0,h[5]=0,h};g.fromScaling=function(h,q){return h[0]=q[0],h[1]=0,h[2]=0,h[3]=q[1],h[4]=0,h[5]=0,h};g.fromTranslation=function(h,q){return h[0]=1,h[1]=0,h[2]=0,h[3]=1,h[4]=q[0],h[5]=q[1],h};g.str=function(h){return"mat2d("+
h[0]+", "+h[1]+", "+h[2]+", "+h[3]+", "+h[4]+", "+h[5]+")"};g.frob=function(h){return Math.sqrt(Math.pow(h[0],2)+Math.pow(h[1],2)+Math.pow(h[2],2)+Math.pow(h[3],2)+Math.pow(h[4],2)+Math.pow(h[5],2)+1)};g.add=function(h,q,a){return h[0]=q[0]+a[0],h[1]=q[1]+a[1],h[2]=q[2]+a[2],h[3]=q[3]+a[3],h[4]=q[4]+a[4],h[5]=q[5]+a[5],h};g.subtract=N;g.multiplyScalar=function(h,q,a){return h[0]=q[0]*a,h[1]=q[1]*a,h[2]=q[2]*a,h[3]=q[3]*a,h[4]=q[4]*a,h[5]=q[5]*a,h};g.multiplyScalarAndAdd=function(h,q,a,k){return h[0]=
q[0]+a[0]*k,h[1]=q[1]+a[1]*k,h[2]=q[2]+a[2]*k,h[3]=q[3]+a[3]*k,h[4]=q[4]+a[4]*k,h[5]=q[5]+a[5]*k,h};g.exactEquals=function(h,q){return h[0]===q[0]&&h[1]===q[1]&&h[2]===q[2]&&h[3]===q[3]&&h[4]===q[4]&&h[5]===q[5]};g.equals=function(h,q){var a=h[0],k=h[1],v=h[2],x=h[3],b=h[4];h=h[5];var c=q[0],m=q[1],l=q[2],n=q[3],t=q[4];q=q[5];return Math.abs(a-c)<=F.EPSILON*Math.max(1,Math.abs(a),Math.abs(c))&&Math.abs(k-m)<=F.EPSILON*Math.max(1,Math.abs(k),Math.abs(m))&&Math.abs(v-l)<=F.EPSILON*Math.max(1,Math.abs(v),
Math.abs(l))&&Math.abs(x-n)<=F.EPSILON*Math.max(1,Math.abs(x),Math.abs(n))&&Math.abs(b-t)<=F.EPSILON*Math.max(1,Math.abs(b),Math.abs(t))&&Math.abs(h-q)<=F.EPSILON*Math.max(1,Math.abs(h),Math.abs(q))};var F=function(h){if(h&&h.__esModule)return h;var q={};if(null!=h)for(var a in h)Object.prototype.hasOwnProperty.call(h,a)&&(q[a]=h[a]);return q.default=h,q}(G(0));g.mul=K;g.sub=N},function(f,g,G){function K(h,q,a){var k=q[0],v=q[1],x=q[2];q=q[3];var b=a[0],c=a[1],m=a[2];a=a[3];return h[0]=k*b+x*c,h[1]=
v*b+q*c,h[2]=k*m+x*a,h[3]=v*m+q*a,h}function N(h,q,a){return h[0]=q[0]-a[0],h[1]=q[1]-a[1],h[2]=q[2]-a[2],h[3]=q[3]-a[3],h}Object.defineProperty(g,"__esModule",{value:!0});g.sub=g.mul=void 0;g.create=function(){var h=new F.ARRAY_TYPE(4);F.ARRAY_TYPE!=Float32Array&&(h[1]=0,h[2]=0);return h[0]=1,h[3]=1,h};g.clone=function(h){var q=new F.ARRAY_TYPE(4);return q[0]=h[0],q[1]=h[1],q[2]=h[2],q[3]=h[3],q};g.copy=function(h,q){return h[0]=q[0],h[1]=q[1],h[2]=q[2],h[3]=q[3],h};g.identity=function(h){return h[0]=
1,h[1]=0,h[2]=0,h[3]=1,h};g.fromValues=function(h,q,a,k){var v=new F.ARRAY_TYPE(4);return v[0]=h,v[1]=q,v[2]=a,v[3]=k,v};g.set=function(h,q,a,k,v){return h[0]=q,h[1]=a,h[2]=k,h[3]=v,h};g.transpose=function(h,q){if(h===q){var a=q[1];h[1]=q[2];h[2]=a}else h[0]=q[0],h[1]=q[2],h[2]=q[1],h[3]=q[3];return h};g.invert=function(h,q){var a=q[0],k=q[1],v=q[2];q=q[3];var x=a*q-v*k;return x?(x=1/x,h[0]=q*x,h[1]=-k*x,h[2]=-v*x,h[3]=a*x,h):null};g.adjoint=function(h,q){var a=q[0];return h[0]=q[3],h[1]=-q[1],h[2]=
-q[2],h[3]=a,h};g.determinant=function(h){return h[0]*h[3]-h[2]*h[1]};g.multiply=K;g.rotate=function(h,q,a){var k=q[0],v=q[1],x=q[2];q=q[3];var b=Math.sin(a);a=Math.cos(a);return h[0]=k*a+x*b,h[1]=v*a+q*b,h[2]=k*-b+x*a,h[3]=v*-b+q*a,h};g.scale=function(h,q,a){var k=q[1],v=q[2],x=q[3],b=a[0];a=a[1];return h[0]=q[0]*b,h[1]=k*b,h[2]=v*a,h[3]=x*a,h};g.fromRotation=function(h,q){var a=Math.sin(q);q=Math.cos(q);return h[0]=q,h[1]=a,h[2]=-a,h[3]=q,h};g.fromScaling=function(h,q){return h[0]=q[0],h[1]=0,h[2]=
0,h[3]=q[1],h};g.str=function(h){return"mat2("+h[0]+", "+h[1]+", "+h[2]+", "+h[3]+")"};g.frob=function(h){return Math.sqrt(Math.pow(h[0],2)+Math.pow(h[1],2)+Math.pow(h[2],2)+Math.pow(h[3],2))};g.LDU=function(h,q,a,k){return h[2]=k[2]/k[0],a[0]=k[0],a[1]=k[1],a[3]=k[3]-h[2]*a[1],[h,q,a]};g.add=function(h,q,a){return h[0]=q[0]+a[0],h[1]=q[1]+a[1],h[2]=q[2]+a[2],h[3]=q[3]+a[3],h};g.subtract=N;g.exactEquals=function(h,q){return h[0]===q[0]&&h[1]===q[1]&&h[2]===q[2]&&h[3]===q[3]};g.equals=function(h,q){var a=
h[0],k=h[1],v=h[2];h=h[3];var x=q[0],b=q[1],c=q[2];q=q[3];return Math.abs(a-x)<=F.EPSILON*Math.max(1,Math.abs(a),Math.abs(x))&&Math.abs(k-b)<=F.EPSILON*Math.max(1,Math.abs(k),Math.abs(b))&&Math.abs(v-c)<=F.EPSILON*Math.max(1,Math.abs(v),Math.abs(c))&&Math.abs(h-q)<=F.EPSILON*Math.max(1,Math.abs(h),Math.abs(q))};g.multiplyScalar=function(h,q,a){return h[0]=q[0]*a,h[1]=q[1]*a,h[2]=q[2]*a,h[3]=q[3]*a,h};g.multiplyScalarAndAdd=function(h,q,a,k){return h[0]=q[0]+a[0]*k,h[1]=q[1]+a[1]*k,h[2]=q[2]+a[2]*
k,h[3]=q[3]+a[3]*k,h};var F=function(h){if(h&&h.__esModule)return h;var q={};if(null!=h)for(var a in h)Object.prototype.hasOwnProperty.call(h,a)&&(q[a]=h[a]);return q.default=h,q}(G(0));g.mul=K;g.sub=N},function(f,g,G){function K(b){if(b&&b.__esModule)return b;var c={};if(null!=b)for(var m in b)Object.prototype.hasOwnProperty.call(b,m)&&(c[m]=b[m]);return c.default=b,c}Object.defineProperty(g,"__esModule",{value:!0});g.vec4=g.vec3=g.vec2=g.quat2=g.quat=g.mat4=g.mat3=g.mat2d=g.mat2=g.glMatrix=void 0;
f=K(G(0));var N=K(G(9)),F=K(G(8)),h=K(G(5)),q=K(G(4)),a=K(G(3)),k=K(G(7)),v=K(G(6)),x=K(G(2));G=K(G(1));g.glMatrix=f;g.mat2=N;g.mat2d=F;g.mat3=h;g.mat4=q;g.quat=a;g.quat2=k;g.vec2=v;g.vec3=x;g.vec4=G}])});/*
nosleep.js
Copyright (c) 2017, Rich Tibbett
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.
webxr-polyfill
Copyright (c) 2017 Google
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
cardboard-vr-display
Copyright (c) 2015-2017 Google
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
webvr-polyfill-dpdb
Copyright (c) 2017 Google
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
wglu-preserve-state
Copyright (c) 2016, Brandon Jones.
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.
*/
(function(f,g){"object"===typeof exports&&"undefined"!==typeof module?module.exports=g():"function"===typeof define&&define.amd?define(g):f.WebXRPolyfill=g()})(this,function(){function f(){let e=new Y(16);Y!=Float32Array&&(e[1]=0,e[2]=0,e[3]=0,e[4]=0,e[6]=0,e[7]=0,e[8]=0,e[9]=0,e[11]=0,e[12]=0,e[13]=0,e[14]=0);e[0]=1;e[5]=1;e[10]=1;e[15]=1;return e}function g(e){e[0]=1;e[1]=0;e[2]=0;e[3]=0;e[4]=0;e[5]=1;e[6]=0;e[7]=0;e[8]=0;e[9]=0;e[10]=1;e[11]=0;e[12]=0;e[13]=0;e[14]=0;e[15]=1;return e}function G(e,
p){let y=p[0],B=p[1],H=p[2],L=p[3],M=p[4],T=p[5],ca=p[6],ma=p[7],na=p[8],ta=p[9],ua=p[10],wa=p[11],Da=p[12],xa=p[13],Ma=p[14];p=p[15];let ka=y*T-B*M,da=y*ca-H*M,ra=y*ma-L*M,sa=B*ca-H*T,fa=B*ma-L*T,Pa=H*ma-L*ca,Ya=na*xa-ta*Da,Za=na*Ma-ua*Da,Ta=na*p-wa*Da,$a=ta*Ma-ua*xa,ab=ta*p-wa*xa,Ua=ua*p-wa*Ma,va=ka*Ua-da*ab+ra*$a+sa*Ta-fa*Za+Pa*Ya;if(!va)return null;va=1/va;e[0]=(T*Ua-ca*ab+ma*$a)*va;e[1]=(H*ab-B*Ua-L*$a)*va;e[2]=(xa*Pa-Ma*fa+p*sa)*va;e[3]=(ua*fa-ta*Pa-wa*sa)*va;e[4]=(ca*Ta-M*Ua-ma*Za)*va;e[5]=
(y*Ua-H*Ta+L*Za)*va;e[6]=(Ma*ra-Da*Pa-p*da)*va;e[7]=(na*Pa-ua*ra+wa*da)*va;e[8]=(M*ab-T*Ta+ma*Ya)*va;e[9]=(B*Ta-y*ab-L*Ya)*va;e[10]=(Da*fa-xa*ra+p*ka)*va;e[11]=(ta*ra-na*fa-wa*ka)*va;e[12]=(T*Za-M*$a-ca*Ya)*va;e[13]=(y*$a-B*Za+H*Ya)*va;e[14]=(xa*da-Da*sa-Ma*ka)*va;e[15]=(na*sa-ta*da+ua*ka)*va;return e}function K(e,p,y){let B=p[0],H=p[1],L=p[2],M=p[3],T=p[4],ca=p[5],ma=p[6],na=p[7],ta=p[8],ua=p[9],wa=p[10],Da=p[11],xa=p[12],Ma=p[13],ka=p[14];p=p[15];let da=y[0],ra=y[1],sa=y[2],fa=y[3];e[0]=da*B+ra*
T+sa*ta+fa*xa;e[1]=da*H+ra*ca+sa*ua+fa*Ma;e[2]=da*L+ra*ma+sa*wa+fa*ka;e[3]=da*M+ra*na+sa*Da+fa*p;da=y[4];ra=y[5];sa=y[6];fa=y[7];e[4]=da*B+ra*T+sa*ta+fa*xa;e[5]=da*H+ra*ca+sa*ua+fa*Ma;e[6]=da*L+ra*ma+sa*wa+fa*ka;e[7]=da*M+ra*na+sa*Da+fa*p;da=y[8];ra=y[9];sa=y[10];fa=y[11];e[8]=da*B+ra*T+sa*ta+fa*xa;e[9]=da*H+ra*ca+sa*ua+fa*Ma;e[10]=da*L+ra*ma+sa*wa+fa*ka;e[11]=da*M+ra*na+sa*Da+fa*p;da=y[12];ra=y[13];sa=y[14];fa=y[15];e[12]=da*B+ra*T+sa*ta+fa*xa;e[13]=da*H+ra*ca+sa*ua+fa*Ma;e[14]=da*L+ra*ma+sa*wa+
fa*ka;e[15]=da*M+ra*na+sa*Da+fa*p;return e}function N(e,p,y){var B=p[0],H=p[1],L=p[2],M=p[3],T=B+B,ca=H+H;let ma=L+L;p=B*T;let na=B*ca;B*=ma;let ta=H*ca;H*=ma;L*=ma;T*=M;ca*=M;M*=ma;e[0]=1-(ta+L);e[1]=na+M;e[2]=B-ca;e[3]=0;e[4]=na-M;e[5]=1-(p+L);e[6]=H+T;e[7]=0;e[8]=B+ca;e[9]=H-T;e[10]=1-(p+ta);e[11]=0;e[12]=y[0];e[13]=y[1];e[14]=y[2];e[15]=1;return e}function F(e,p){e[0]=p[12];e[1]=p[13];e[2]=p[14];return e}function h(e,p){var y=p[0]+p[5]+p[10];0<y?(y=2*Math.sqrt(y+1),e[3]=.25*y,e[0]=(p[6]-p[9])/
y,e[1]=(p[8]-p[2])/y,e[2]=(p[1]-p[4])/y):p[0]>p[5]&&p[0]>p[10]?(y=2*Math.sqrt(1+p[0]-p[5]-p[10]),e[3]=(p[6]-p[9])/y,e[0]=.25*y,e[1]=(p[1]+p[4])/y,e[2]=(p[8]+p[2])/y):p[5]>p[10]?(y=2*Math.sqrt(1+p[5]-p[0]-p[10]),e[3]=(p[8]-p[2])/y,e[0]=(p[1]+p[4])/y,e[1]=.25*y,e[2]=(p[6]+p[9])/y):(y=2*Math.sqrt(1+p[10]-p[0]-p[5]),e[3]=(p[1]-p[4])/y,e[0]=(p[8]+p[2])/y,e[1]=(p[6]+p[9])/y,e[2]=.25*y);return e}function q(e,p,y,B,H){p=1/Math.tan(p/2);e[0]=p/y;e[1]=0;e[2]=0;e[3]=0;e[4]=0;e[5]=p;e[6]=0;e[7]=0;e[8]=0;e[9]=
0;e[11]=-1;e[12]=0;e[13]=0;e[15]=0;null!=H&&Infinity!==H?(y=1/(B-H),e[10]=(H+B)*y,e[14]=2*H*B*y):(e[10]=-1,e[14]=-2*B);return e}function a(){let e=new Y(3);Y!=Float32Array&&(e[0]=0,e[1]=0,e[2]=0);return e}function k(e){var p=new Y(3);p[0]=e[0];p[1]=e[1];p[2]=e[2];return p}function v(e,p,y){let B=new Y(3);B[0]=e;B[1]=p;B[2]=y;return B}function x(e,p){e[0]=p[0];e[1]=p[1];e[2]=p[2];return e}function b(e,p,y){e[0]=p[0]+y[0];e[1]=p[1]+y[1];e[2]=p[2]+y[2];return e}function c(e,p,y){e[0]=p[0]*y;e[1]=p[1]*
y;e[2]=p[2]*y;return e}function m(e,p){var y=p[0];let B=p[1],H=p[2];y=y*y+B*B+H*H;0<y&&(y=1/Math.sqrt(y),e[0]=p[0]*y,e[1]=p[1]*y,e[2]=p[2]*y);return e}function l(e,p){return e[0]*p[0]+e[1]*p[1]+e[2]*p[2]}function n(e,p,y){let B=p[0],H=p[1];p=p[2];let L=y[0],M=y[1];y=y[2];e[0]=H*y-p*M;e[1]=p*L-B*y;e[2]=B*M-H*L;return e}function t(e,p,y){let B=y[0],H=y[1],L=y[2],M=p[0],T=p[1];p=p[2];let ca=H*p-L*T,ma=L*M-B*p,na=B*T-H*M;y=2*y[3];e[0]=M+ca*y+2*(H*na-L*ma);e[1]=T+ma*y+2*(L*ca-B*na);e[2]=p+na*y+2*(B*ma-
H*ca);return e}function w(){let e=new Y(9);Y!=Float32Array&&(e[1]=0,e[2]=0,e[3]=0,e[5]=0,e[6]=0,e[7]=0);e[0]=1;e[4]=1;e[8]=1;return e}function z(){let e=new Y(4);Y!=Float32Array&&(e[0]=0,e[1]=0,e[2]=0,e[3]=0);return e}function C(){let e=new Y(4);Y!=Float32Array&&(e[0]=0,e[1]=0,e[2]=0);e[3]=1;return e}function I(e,p,y){let B=p[0],H=p[1],L=p[2];p=p[3];let M=y[0],T=y[1],ca=y[2];y=y[3];e[0]=B*y+p*M+H*ca-L*T;e[1]=H*y+p*T+L*M-B*ca;e[2]=L*y+p*ca+B*T-H*M;e[3]=p*y-B*M-H*T-L*ca;return e}function O(e,p,y,B){let H=
p[0],L=p[1],M=p[2];p=p[3];let T=y[0],ca=y[1],ma=y[2];y=y[3];let na;let ta;var ua=H*T+L*ca+M*ma+p*y;0>ua&&(ua=-ua,T=-T,ca=-ca,ma=-ma,y=-y);1E-6<1-ua?(na=Math.acos(ua),ta=Math.sin(na),ua=Math.sin((1-B)*na)/ta,B=Math.sin(B*na)/ta):ua=1-B;e[0]=ua*H+B*T;e[1]=ua*L+B*ca;e[2]=ua*M+B*ma;e[3]=ua*p+B*y;return e}function R(e,p){let y=p[0],B=p[1],H=p[2];p=p[3];var L=y*y+B*B+H*H+p*p;L=L?1/L:0;e[0]=-y*L;e[1]=-B*L;e[2]=-H*L;e[3]=p*L;return e}function P(e,p,y){function B(ca,ma,na){return ca<ma?ma:ca>na?na:ca}var H=
p[0]*p[0],L=p[1]*p[1],M=p[2]*p[2],T=p[3]*p[3];"XYZ"===y?(e[0]=Math.atan2(2*(p[0]*p[3]-p[1]*p[2]),T-H-L+M),e[1]=Math.asin(B(2*(p[0]*p[2]+p[1]*p[3]),-1,1)),e[2]=Math.atan2(2*(p[2]*p[3]-p[0]*p[1]),T+H-L-M)):"YXZ"===y?(e[0]=Math.asin(B(2*(p[0]*p[3]-p[1]*p[2]),-1,1)),e[1]=Math.atan2(2*(p[0]*p[2]+p[1]*p[3]),T-H-L+M),e[2]=Math.atan2(2*(p[0]*p[1]+p[2]*p[3]),T-H+L-M)):"ZXY"===y?(e[0]=Math.asin(B(2*(p[0]*p[3]+p[1]*p[2]),-1,1)),e[1]=Math.atan2(2*(p[1]*p[3]-p[2]*p[0]),T-H-L+M),e[2]=Math.atan2(2*(p[2]*p[3]-p[0]*
p[1]),T-H+L-M)):"ZYX"===y?(e[0]=Math.atan2(2*(p[0]*p[3]+p[2]*p[1]),T-H-L+M),e[1]=Math.asin(B(2*(p[1]*p[3]-p[0]*p[2]),-1,1)),e[2]=Math.atan2(2*(p[0]*p[1]+p[2]*p[3]),T+H-L-M)):"YZX"===y?(e[0]=Math.atan2(2*(p[0]*p[3]-p[2]*p[1]),T-H+L-M),e[1]=Math.atan2(2*(p[1]*p[3]-p[0]*p[2]),T+H-L-M),e[2]=Math.asin(B(2*(p[0]*p[1]+p[2]*p[3]),-1,1))):"XZY"===y?(e[0]=Math.atan2(2*(p[0]*p[3]+p[1]*p[2]),T-H+L-M),e[1]=Math.atan2(2*(p[0]*p[2]+p[1]*p[3]),T+H-L-M),e[2]=Math.asin(B(2*(p[2]*p[3]-p[0]*p[1]),-1,1))):console.log("No order given for quaternion to euler conversion.")}
const X="undefined"!==typeof global?global:"undefined"!==typeof self?self:"undefined"!==typeof window?window:{},W=Symbol("@@webxr-polyfill/EventTarget");class aa{constructor(){this[W]={listeners:new Map}}addEventListener(e,p){if("string"!==typeof e)throw Error("`type` must be a string");if("function"!==typeof p)throw Error("`listener` must be a function");const y=this[W].listeners.get(e)||[];y.push(p);this[W].listeners.set(e,y)}removeEventListener(e,p){if("string"!==typeof e)throw Error("`type` must be a string");
if("function"!==typeof p)throw Error("`listener` must be a function");e=this[W].listeners.get(e)||[];for(let y=e.length;0<=y;y--)e[y]===p&&e.pop()}dispatchEvent(e,p){const y=this[W].listeners.get(e)||[],B=[];for(let H=0;H<y.length;H++)B[H]=y[H];for(let H of B)H(p);if("function"===typeof this[`on${e}`])this[`on${e}`](p)}}let Y="undefined"!==typeof Float32Array?Float32Array:Array;(function(){let e=a();return function(p,y,B,H,L,M){y||(y=3);B||(B=0);for(H=H?Math.min(H*y+B,p.length):p.length;B<H;B+=y)e[0]=
p[B],e[1]=p[B+1],e[2]=p[B+2],L(e,e,M),p[B]=e[0],p[B+1]=e[1],p[B+2]=e[2];return p}})();(function(){let e=z();return function(p,y,B,H,L,M){y||(y=4);B||(B=0);for(H=H?Math.min(H*y+B,p.length):p.length;B<H;B+=y)e[0]=p[B],e[1]=p[B+1],e[2]=p[B+2],e[3]=p[B+3],L(e,e,M),p[B]=e[0],p[B+1]=e[1],p[B+2]=e[2],p[B+3]=e[3];return p}})();const ia=function(e){let p=new Y(4);p[0]=e[0];p[1]=e[1];p[2]=e[2];p[3]=e[3];return p},Ca=function(e,p){e[0]=p[0];e[1]=p[1];e[2]=p[2];e[3]=p[3];return e},za=function(e,p){let y=p[0],
B=p[1],H=p[2];p=p[3];let L=y*y+B*B+H*H+p*p;0<L&&(L=1/Math.sqrt(L),e[0]=y*L,e[1]=B*L,e[2]=H*L,e[3]=p*L);return e};(function(){let e=a(),p=v(1,0,0),y=v(0,1,0);return function(B,H,L){var M=l(H,L);if(-.999999>M){n(e,p,H);L=e[0];M=e[1];let T=e[2];1E-6>Math.sqrt(L*L+M*M+T*T)&&n(e,y,H);m(e,e);H=Math.PI;H*=.5;L=Math.sin(H);B[0]=L*e[0];B[1]=L*e[1];B[2]=L*e[2];B[3]=Math.cos(H);return B}if(.999999<M)return B[0]=0,B[1]=0,B[2]=0,B[3]=1,B;n(e,H,L);B[0]=e[0];B[1]=e[1];B[2]=e[2];B[3]=1+M;return za(B,B)}})();(function(){let e=
C(),p=C();return function(y,B,H,L,M,T){O(e,B,M,T);O(p,H,L,T);O(y,e,p,2*T*(1-T));return y}})();(function(){let e=w();return function(p,y,B,H){e[0]=B[0];e[3]=B[1];e[6]=B[2];e[1]=H[0];e[4]=H[1];e[7]=H[2];e[2]=-y[0];e[5]=-y[1];e[8]=-y[2];y=e[0]+e[4]+e[8];if(0<y)y=Math.sqrt(y+1),p[3]=.5*y,y=.5/y,p[0]=(e[5]-e[7])*y,p[1]=(e[6]-e[2])*y,p[2]=(e[1]-e[3])*y;else{B=0;e[4]>e[0]&&(B=1);e[8]>e[3*B+B]&&(B=2);H=(B+1)%3;let L=(B+2)%3;y=Math.sqrt(e[3*B+B]-e[3*H+H]-e[3*L+L]+1);p[B]=.5*y;y=.5/y;p[3]=(e[3*H+L]-e[3*L+H])*
y;p[H]=(e[3*H+B]+e[3*B+H])*y;p[L]=(e[3*L+B]+e[3*B+L])*y}return za(p,p)}})();const ea=Symbol("@@webxr-polyfill/XRRigidTransform");class Ha{constructor(){this[ea]={matrix:null,position:null,orientation:null,inverse:null};if(0===arguments.length)this[ea].matrix=g(new Float32Array(16));else if(1===arguments.length)arguments[0]instanceof Float32Array?this[ea].matrix=arguments[0]:(this[ea].position=this._getPoint(arguments[0]),this[ea].orientation=DOMPointReadOnly.fromPoint({x:0,y:0,z:0,w:1}));else if(2===
arguments.length)this[ea].position=this._getPoint(arguments[0]),this[ea].orientation=this._getPoint(arguments[1]);else throw Error("Too many arguments!");if(this[ea].matrix){var e=a();F(e,this[ea].matrix);this[ea].position=DOMPointReadOnly.fromPoint({x:e[0],y:e[1],z:e[2]});e=C();h(e,this[ea].matrix);this[ea].orientation=DOMPointReadOnly.fromPoint({x:e[0],y:e[1],z:e[2],w:e[3]})}else{this[ea].matrix=g(new Float32Array(16));e=this[ea].matrix;var p=this[ea].orientation.x,y=this[ea].orientation.y,B=this[ea].orientation.z,
H=this[ea].orientation.w;let L=new Y(4);L[0]=p;L[1]=y;L[2]=B;L[3]=H;N(e,L,v(this[ea].position.x,this[ea].position.y,this[ea].position.z))}}_getPoint(e){return e instanceof DOMPointReadOnly?e:DOMPointReadOnly.fromPoint(e)}get matrix(){return this[ea].matrix}get position(){return this[ea].position}get orientation(){return this[ea].orientation}get inverse(){if(null===this[ea].inverse){let e=g(new Float32Array(16));G(e,this[ea].matrix);this[ea].inverse=new Ha(e);this[ea].inverse[ea].inverse=this}return this[ea].inverse}}
const ja=Symbol("@@webxr-polyfill/XRSpace");class La{constructor(e=null,p=null){this[ja]={specialType:e,inputSource:p,baseMatrix:null,inverseBaseMatrix:null,lastFrameId:-1}}get _specialType(){return this[ja].specialType}get _inputSource(){return this[ja].inputSource}_ensurePoseUpdated(e,p){p!=this[ja].lastFrameId&&(this[ja].lastFrameId=p,this._onPoseUpdate(e))}_onPoseUpdate(e){"viewer"==this[ja].specialType&&(this._baseMatrix=e.getBasePoseMatrix())}set _baseMatrix(e){this[ja].baseMatrix=e;this[ja].inverseBaseMatrix=
null}get _baseMatrix(){!this[ja].baseMatrix&&this[ja].inverseBaseMatrix&&(this[ja].baseMatrix=new Float32Array(16),G(this[ja].baseMatrix,this[ja].inverseBaseMatrix));return this[ja].baseMatrix}set _inverseBaseMatrix(e){this[ja].inverseBaseMatrix=e;this[ja].baseMatrix=null}get _inverseBaseMatrix(){!this[ja].inverseBaseMatrix&&this[ja].baseMatrix&&(this[ja].inverseBaseMatrix=new Float32Array(16),G(this[ja].inverseBaseMatrix,this[ja].baseMatrix));return this[ja].inverseBaseMatrix}_getSpaceRelativeTransform(e){if(!this._inverseBaseMatrix||
!e._baseMatrix)return null;let p=new Float32Array(16);K(p,this._inverseBaseMatrix,e._baseMatrix);return new Ha(p)}}const Ia=Symbol("@@webxr-polyfill/XRReferenceSpace"),qa=["viewer","local","local-floor","bounded-floor","unbounded"];class Xa extends La{constructor(e,p=null){if(!qa.includes(e))throw Error(`XRReferenceSpaceType must be one of ${qa}`);super(e);if("bounded-floor"===e&&!p)throw Error("XRReferenceSpace cannot use 'bounded-floor' type if the platform does not provide the floor level");"bounded-floor"!==
e&&"local-floor"!==e||p||(p=g(new Float32Array(16)),p[13]=1.6);this._inverseBaseMatrix=p||g(new Float32Array(16));this[Ia]={type:e,transform:p,originOffset:g(new Float32Array(16))}}_transformBasePoseMatrix(e,p){K(e,this._inverseBaseMatrix,p)}_originOffsetMatrix(){return this[Ia].originOffset}_adjustForOriginOffset(e){let p=new Float32Array(16);G(p,this[Ia].originOffset);K(e,p,e)}_getSpaceRelativeTransform(e){e=super._getSpaceRelativeTransform(e);this._adjustForOriginOffset(e.matrix);return new XRRigidTransform(e.matrix)}getOffsetReferenceSpace(e){let p=
new Xa(this[Ia].type,this[Ia].transform,this[Ia].bounds);K(p[Ia].originOffset,this[Ia].originOffset,e.matrix);return p}}const Ga=Symbol("@@webxr-polyfill/XR"),sc=["inline","immersive-vr","immersive-ar"],tc={inline:{requiredFeatures:["viewer"],optionalFeatures:[]},"immersive-vr":{requiredFeatures:["viewer","local"],optionalFeatures:[]},"immersive-ar":{requiredFeatures:["viewer","local"],optionalFeatures:[]}};class uc extends aa{constructor(e){super();this[Ga]={device:null,devicePromise:e,immersiveSession:null,
inlineSessions:new Set};e.then(p=>{this[Ga].device=p})}async isSessionSupported(e){this[Ga].device||await this[Ga].devicePromise;return"inline"!=e?Promise.resolve(this[Ga].device.isSessionSupported(e)):Promise.resolve(!0)}async requestSession(e,p){if(!this[Ga].device){if("inline"!=e)throw Error("Polyfill Error: Must call navigator.xr.isSessionSupported() with any XRSessionMode\nor navigator.xr.requestSession('inline') prior to requesting an immersive\nsession. This is a limitation specific to the WebXR Polyfill and does not apply\nto native implementations of the API.");
await this[Ga].devicePromise}if(!sc.includes(e))throw new TypeError(`The provided value '${e}' is not a valid enum value of type XRSessionMode`);var y=tc[e],B=y.requiredFeatures.concat(p&&p.requiredFeatures?p.requiredFeatures:[]);p=y.optionalFeatures.concat(p&&p.optionalFeatures?p.optionalFeatures:[]);y=new Set;let H=!1;for(let T of B)this[Ga].device.isFeatureSupported(T)?y.add(T):(console.error(`The required feature '${T}' is not supported`),H=!0);if(H)throw new DOMException("Session does not support some required features",
"NotSupportedError");for(let T of p)this[Ga].device.isFeatureSupported(T)?y.add(T):console.log(`The optional feature '${T}' is not supported`);B=await this[Ga].device.requestSession(e,y);const L=new XRSession(this[Ga].device,e,B);"inline"==e?this[Ga].inlineSessions.add(L):this[Ga].immersiveSession=L;const M=()=>{"inline"==e?this[Ga].inlineSessions.delete(L):this[Ga].immersiveSession=null;L.removeEventListener("end",M)};L.addEventListener("end",M);return L}}let yb;if(!1==="performance"in X){let e=
Date.now();yb=()=>Date.now()-e}else yb=()=>performance.now();var Qb=yb;const zb=Symbol("@@webxr-polyfill/XRPose");class Rb{constructor(e,p){this[zb]={transform:e,emulatedPosition:p}}get transform(){return this[zb].transform}get emulatedPosition(){return this[zb].emulatedPosition}}const Sb=Symbol("@@webxr-polyfill/XRViewerPose");class Tb extends Rb{constructor(e,p,y=!1){super(e,y);this[Sb]={views:p}}get views(){return this[Sb].views}}const eb=Symbol("@@webxr-polyfill/XRViewport");class Ub{constructor(e){this[eb]=
{target:e}}get x(){return this[eb].target.x}get y(){return this[eb].target.y}get width(){return this[eb].target.width}get height(){return this[eb].target.height}}const Vb=["left","right","none"],Va=Symbol("@@webxr-polyfill/XRView");class Wb{constructor(e,p,y,B){if(!Vb.includes(y))throw Error(`XREye must be one of: ${Vb}`);const H=Object.create(null),L=new Ub(H);this[Va]={device:e,eye:y,viewport:L,temp:H,sessionId:B,transform:p}}get eye(){return this[Va].eye}get projectionMatrix(){return this[Va].device.getProjectionMatrix(this.eye)}get transform(){return this[Va].transform}_getViewport(e){if(this[Va].device.getViewport(this[Va].sessionId,
this.eye,e,this[Va].temp))return this[Va].viewport}}const Ea=Symbol("@@webxr-polyfill/XRFrame");let vc=0;class Ab{constructor(e,p,y){this[Ea]={id:++vc,active:!1,animationFrame:!1,device:e,session:p,sessionId:y}}get session(){return this[Ea].session}getViewerPose(e){if(!this[Ea].animationFrame)throw new DOMException("getViewerPose can only be called on XRFrame objects passed to XRSession.requestAnimationFrame callbacks.","InvalidStateError");if(!this[Ea].active)throw new DOMException("XRFrame access outside the callback that produced it is invalid.",
"InvalidStateError");const p=this[Ea].device;var y=this[Ea].session;y[Q].viewerSpace._ensurePoseUpdated(p,this[Ea].id);e._ensurePoseUpdated(p,this[Ea].id);let B=e._getSpaceRelativeTransform(y[Q].viewerSpace);const H=[];for(let L of y[Q].viewSpaces)L._ensurePoseUpdated(p,this[Ea].id),y=e._getSpaceRelativeTransform(L),y=new Wb(p,y,L.eye,this[Ea].sessionId),H.push(y);return new Tb(B,H,!1)}getPose(e,p){if(!this[Ea].active)throw new DOMException("XRFrame access outside the callback that produced it is invalid.",
"InvalidStateError");const y=this[Ea].device;if("target-ray"===e._specialType||"grip"===e._specialType)return y.getInputPose(e._inputSource,p,e._specialType);e._ensurePoseUpdated(y,this[Ea].id);p._ensurePoseUpdated(y,this[Ea].id);return(e=p._getSpaceRelativeTransform(e))?new XRPose(e,!1):null}}const fb=Symbol("@@webxr-polyfill/XRRenderState"),wc=Object.freeze({depthNear:.1,depthFar:1E3,inlineVerticalFieldOfView:null,baseLayer:null});class Bb{constructor(e={}){e=Object.assign({},wc,e);this[fb]={config:e}}get depthNear(){return this[fb].config.depthNear}get depthFar(){return this[fb].config.depthFar}get inlineVerticalFieldOfView(){return this[fb].config.inlineVerticalFieldOfView}get baseLayer(){return this[fb].config.baseLayer}}
const Xb=Symbol("@@webxr-polyfill/polyfilled-xr-compatible"),Cb=Symbol("@@webxr-polyfill/xr-compatible"),bb=Symbol("@@webxr-polyfill/XRWebGLLayer"),xc=Object.freeze({antialias:!0,depth:!1,stencil:!1,alpha:!0,multiview:!1,ignoreDepthValues:!1,framebufferScaleFactor:1});class yc{constructor(e,p,y={}){y=Object.assign({},xc,y);if(!(e instanceof Yb))throw Error("session must be a XRSession");if(e.ended)throw Error("InvalidStateError");if(p[Xb]&&!0!==p[Cb])throw Error("InvalidStateError");const B=p.getParameter(p.FRAMEBUFFER_BINDING);
this[bb]={context:p,config:y,framebuffer:B,session:e}}get context(){return this[bb].context}get antialias(){return this[bb].config.antialias}get ignoreDepthValues(){return!0}get framebuffer(){return this[bb].framebuffer}get framebufferWidth(){return this[bb].context.drawingBufferWidth}get framebufferHeight(){return this[bb].context.drawingBufferHeight}get _session(){return this[bb].session}getViewport(e){return e._getViewport(this)}static getNativeFramebufferScaleFactor(e){if(!e)throw new TypeError("getNativeFramebufferScaleFactor must be passed a session.");
return e[Q].ended?0:1}}const Db=Symbol("@@webxr-polyfill/XRInputSourceEvent");class Eb extends Event{constructor(e,p){super(e,p);this[Db]={frame:p.frame,inputSource:p.inputSource};Object.setPrototypeOf(this,Eb.prototype)}get frame(){return this[Db].frame}get inputSource(){return this[Db].inputSource}}const Zb=Symbol("@@webxr-polyfill/XRSessionEvent");class vb extends Event{constructor(e,p){super(e,p);this[Zb]={session:p.session};Object.setPrototypeOf(this,vb.prototype)}get session(){return this[Zb].session}}
const wb=Symbol("@@webxr-polyfill/XRInputSourcesChangeEvent");class Fb extends Event{constructor(e,p){super(e,p);this[wb]={session:p.session,added:p.added,removed:p.removed};Object.setPrototypeOf(this,Fb.prototype)}get session(){return this[wb].session}get added(){return this[wb].added}get removed(){return this[wb].removed}}const Q=Symbol("@@webxr-polyfill/XRSession");class Gb extends La{constructor(e){super(e)}get eye(){return this._specialType}_onPoseUpdate(e){this._inverseBaseMatrix=e.getBaseViewMatrix(this._specialType)}}
class Yb extends aa{constructor(e,p,y){super();let B="inline"!=p,H=new Bb({inlineVerticalFieldOfView:B?null:.5*Math.PI});this[Q]={device:e,mode:p,immersive:B,ended:!1,suspended:!1,frameCallbacks:[],currentFrameCallbacks:null,frameHandle:0,deviceFrameHandle:null,id:y,activeRenderState:H,pendingRenderState:null,viewerSpace:new Xa("viewer"),viewSpaces:[],currentInputSources:[]};B?this[Q].viewSpaces.push(new Gb("left"),new Gb("right")):this[Q].viewSpaces.push(new Gb("none"));this[Q].onDeviceFrame=()=>
{if(!this[Q].ended&&!this[Q].suspended){this[Q].deviceFrameHandle=null;this[Q].startDeviceFrameLoop();if(null!==this[Q].pendingRenderState&&(this[Q].activeRenderState=new Bb(this[Q].pendingRenderState),this[Q].pendingRenderState=null,this[Q].activeRenderState.baseLayer))this[Q].device.onBaseLayerSet(this[Q].id,this[Q].activeRenderState.baseLayer);if(null!==this[Q].activeRenderState.baseLayer){var L=new Ab(e,this,this[Q].id),M=this[Q].currentFrameCallbacks=this[Q].frameCallbacks;this[Q].frameCallbacks=
[];L[Ea].active=!0;L[Ea].animationFrame=!0;this[Q].device.onFrameStart(this[Q].id,this[Q].activeRenderState);this._checkInputSourcesChange();var T=Qb();for(let ca=0;ca<M.length;ca++)try{M[ca].cancelled||"function"!==typeof M[ca].callback||M[ca].callback(T,L)}catch(ma){console.error(ma)}this[Q].currentFrameCallbacks=null;L[Ea].active=!1;this[Q].device.onFrameEnd(this[Q].id)}}};this[Q].startDeviceFrameLoop=()=>{null===this[Q].deviceFrameHandle&&(this[Q].deviceFrameHandle=this[Q].device.requestAnimationFrame(this[Q].onDeviceFrame))};
this[Q].stopDeviceFrameLoop=()=>{const L=this[Q].deviceFrameHandle;null!==L&&(this[Q].device.cancelAnimationFrame(L),this[Q].deviceFrameHandle=null)};this[Q].onPresentationEnd=L=>{L!==this[Q].id?(this[Q].suspended=!1,this[Q].startDeviceFrameLoop(),this.dispatchEvent("focus",{session:this})):(this[Q].ended=!0,this[Q].stopDeviceFrameLoop(),e.removeEventListener("@@webxr-polyfill/vr-present-end",this[Q].onPresentationEnd),e.removeEventListener("@@webxr-polyfill/vr-present-start",this[Q].onPresentationStart),
e.removeEventListener("@@webxr-polyfill/input-select-start",this[Q].onSelectStart),e.removeEventListener("@@webxr-polyfill/input-select-end",this[Q].onSelectEnd),this.dispatchEvent("end",new vb("end",{session:this})))};e.addEventListener("@@webxr-polyfill/vr-present-end",this[Q].onPresentationEnd);this[Q].onPresentationStart=L=>{L!==this[Q].id&&(this[Q].suspended=!0,this[Q].stopDeviceFrameLoop(),this.dispatchEvent("blur",{session:this}))};e.addEventListener("@@webxr-polyfill/vr-present-start",this[Q].onPresentationStart);
this[Q].onSelectStart=L=>{L.sessionId===this[Q].id&&this[Q].dispatchInputSourceEvent("selectstart",L.inputSource)};e.addEventListener("@@webxr-polyfill/input-select-start",this[Q].onSelectStart);this[Q].onSelectEnd=L=>{L.sessionId===this[Q].id&&(this[Q].dispatchInputSourceEvent("selectend",L.inputSource),this[Q].dispatchInputSourceEvent("select",L.inputSource))};e.addEventListener("@@webxr-polyfill/input-select-end",this[Q].onSelectEnd);this[Q].onSqueezeStart=L=>{L.sessionId===this[Q].id&&this[Q].dispatchInputSourceEvent("squeezestart",
L.inputSource)};e.addEventListener("@@webxr-polyfill/input-squeeze-start",this[Q].onSqueezeStart);this[Q].onSqueezeEnd=L=>{L.sessionId===this[Q].id&&(this[Q].dispatchInputSourceEvent("squeezeend",L.inputSource),this[Q].dispatchInputSourceEvent("squeeze",L.inputSource))};e.addEventListener("@@webxr-polyfill/input-squeeze-end",this[Q].onSqueezeEnd);this[Q].dispatchInputSourceEvent=(L,M)=>{const T=new Ab(e,this,this[Q].id);M=new Eb(L,{frame:T,inputSource:M});T[Ea].active=!0;this.dispatchEvent(L,M);T[Ea].active=
!1};this[Q].startDeviceFrameLoop();this.onselectend=this.onselectstart=this.onselect=this.onend=this.onresetpose=this.onfocus=this.onblur=void 0}get renderState(){return this[Q].activeRenderState}get environmentBlendMode(){return this[Q].device.environmentBlendMode||"opaque"}async requestReferenceSpace(e){if(!this[Q].ended){if(!qa.includes(e))throw new TypeError(`XRReferenceSpaceType must be one of ${qa}`);if(!this[Q].device.doesSessionSupportReferenceSpace(this[Q].id,e))throw new DOMException(`The ${e} reference space is not supported by this session.`,
"NotSupportedError");if("viewer"===e)return this[Q].viewerSpace;var p=await this[Q].device.requestFrameOfReferenceTransform(e);if("bounded-floor"===e){if(!p)throw new DOMException(`${e} XRReferenceSpace not supported by this device.`,"NotSupportedError");if(!this[Q].device.requestStageBounds())throw new DOMException(`${e} XRReferenceSpace not supported by this device.`,"NotSupportedError");throw new DOMException(`The WebXR polyfill does not support the ${e} reference space yet.`,"NotSupportedError");
}return new Xa(e,p)}}requestAnimationFrame(e){if(!this[Q].ended){var p=++this[Q].frameHandle;this[Q].frameCallbacks.push({handle:p,callback:e,cancelled:!1});return p}}cancelAnimationFrame(e){let p=this[Q].frameCallbacks,y=p.findIndex(B=>B&&B.handle===e);-1<y&&(p[y].cancelled=!0,p.splice(y,1));if(p=this[Q].currentFrameCallbacks)y=p.findIndex(B=>B&&B.handle===e),-1<y&&(p[y].cancelled=!0)}get inputSources(){return this[Q].device.getInputSources()}async end(){if(!this[Q].ended)return this[Q].immersive&&
(this[Q].ended=!0,this[Q].device.removeEventListener("@@webxr-polyfill/vr-present-start",this[Q].onPresentationStart),this[Q].device.removeEventListener("@@webxr-polyfill/vr-present-end",this[Q].onPresentationEnd),this[Q].device.removeEventListener("@@webxr-polyfill/input-select-start",this[Q].onSelectStart),this[Q].device.removeEventListener("@@webxr-polyfill/input-select-end",this[Q].onSelectEnd),this.dispatchEvent("end",new vb("end",{session:this}))),this[Q].stopDeviceFrameLoop(),this[Q].device.endSession(this[Q].id)}updateRenderState(e){if(this[Q].ended)throw Error("Can't call updateRenderState on an XRSession that has already ended.");
if(e.baseLayer&&e.baseLayer._session!==this)throw Error("Called updateRenderState with a base layer that was created by a different session.");if(null!==e.inlineVerticalFieldOfView&&void 0!==e.inlineVerticalFieldOfView){if(this[Q].immersive)throw Error("inlineVerticalFieldOfView must not be set for an XRRenderState passed to updateRenderState for an immersive session.");e.inlineVerticalFieldOfView=Math.min(3.13,Math.max(.01,e.inlineVerticalFieldOfView))}if(null===this[Q].pendingRenderState){const p=
this[Q].activeRenderState;this[Q].pendingRenderState={depthNear:p.depthNear,depthFar:p.depthFar,inlineVerticalFieldOfView:p.inlineVerticalFieldOfView,baseLayer:p.baseLayer}}Object.assign(this[Q].pendingRenderState,e)}_checkInputSourcesChange(){const e=[],p=[],y=this.inputSources,B=this[Q].currentInputSources;for(const H of y)B.includes(H)||e.push(H);for(const H of B)y.includes(H)||p.push(H);(0<e.length||0<p.length)&&this.dispatchEvent("inputsourceschange",new Fb("inputsourceschange",{session:this,
added:e,removed:p}));this[Q].currentInputSources.length=0;for(const H of y)this[Q].currentInputSources.push(H)}}const Wa=Symbol("@@webxr-polyfill/XRInputSource");class $b{constructor(e){this[Wa]={impl:e,gripSpace:new La("grip",this),targetRaySpace:new La("target-ray",this)}}get handedness(){return this[Wa].impl.handedness}get targetRayMode(){return this[Wa].impl.targetRayMode}get gripSpace(){let e=this[Wa].impl.targetRayMode;return"gaze"===e||"screen"===e?null:this[Wa].gripSpace}get targetRaySpace(){return this[Wa].targetRaySpace}get profiles(){return this[Wa].impl.profiles}get gamepad(){return this[Wa].impl.gamepad}}
const Hb=Symbol("@@webxr-polyfill/XRReferenceSpaceEvent");class ac extends Event{constructor(e,p){super(e,p);this[Hb]={referenceSpace:p.referenceSpace,transform:p.transform||null};Object.setPrototypeOf(this,ac.prototype)}get referenceSpace(){return this[Hb].referenceSpace}get transform(){return this[Hb].transform}}var Ib={XRSystem:uc,XRSession:Yb,XRSessionEvent:vb,XRFrame:Ab,XRView:Wb,XRViewport:Ub,XRViewerPose:Tb,XRWebGLLayer:yc,XRSpace:La,XRReferenceSpace:Xa,XRReferenceSpaceEvent:ac,XRInputSource:$b,
XRInputSourceEvent:Eb,XRInputSourcesChangeEvent:Fb,XRRenderState:Bb,XRRigidTransform:Ha,XRPose:Rb};const bc=e=>{if("function"===typeof e.prototype.makeXRCompatible)return!1;e.prototype.makeXRCompatible=function(){this[Cb]=!0;return Promise.resolve()};return!0},cc=e=>{const p=e.prototype.getContext;e.prototype.getContext=function(y,B){if(y=p.call(this,y,B))y[Xb]=!0,B&&"xrCompatible"in B&&(y[Cb]=B.xrCompatible);return y}},zc=e=>{var p=!1;e=e.navigator.userAgent||e.navigator.vendor||e.opera;if(/(android|bb\d+|meego).+mobile|avantgo|bada\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|mobile.+firefox|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\.(browser|link)|vodafone|wap|windows ce|xda|xiino/i.test(e)||
/1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s\-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|\-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw\-(n|u)|c55\/|capi|ccwa|cdm\-|cell|chtm|cldc|cmd\-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc\-s|devi|dica|dmob|do(c|p)o|ds(12|\-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(\-|_)|g1 u|g560|gene|gf\-5|g\-mo|go(\.w|od)|gr(ad|un)|haie|hcit|hd\-(m|p|t)|hei\-|hi(pt|ta)|hp( i|ip)|hs\-c|ht(c(\-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i\-(20|go|ma)|i230|iac( |\-|\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\/)|klon|kpt |kwc\-|kyo(c|k)|le(no|xi)|lg( g|\/(k|l|u)|50|54|\-[a-w])|libw|lynx|m1\-w|m3ga|m50\/|ma(te|ui|xo)|mc(01|21|ca)|m\-cr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(\-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)\-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|\-([1-8]|c))|phil|pire|pl(ay|uc)|pn\-2|po(ck|rt|se)|prox|psio|pt\-g|qa\-a|qc(07|12|21|32|60|\-[2-7]|i\-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h\-|oo|p\-)|sdk\/|se(c(\-|0|1)|47|mc|nd|ri)|sgh\-|shar|sie(\-|m)|sk\-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h\-|v\-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl\-|tdg\-|tel(i|m)|tim\-|t\-mo|to(pl|sh)|ts(70|m\-|m3|m5)|tx\-9|up(\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|\-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(\-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas\-|your|zeto|zte\-/i.test(e.substr(0,
4)))p=!0;return p};var Jb="undefined"!==typeof window?window:"undefined"!==typeof global?global:"undefined"!==typeof self?self:{},Qc=function(e){return e&&e.__esModule&&Object.prototype.hasOwnProperty.call(e,"default")?e["default"]:e}(function(e,p){return p={exports:{}},e(p,p.exports),p.exports}(function(e,p){(function(y,B){e.exports=B()})(Jb,function(){function y(d,r,u,A){this.gl=d;this.cardboardUI=r;this.bufferScale=u;this.dirtySubmitFrameBindings=A;this.ctxAttribs=d.getContextAttributes();this.instanceExt=
d.getExtension("ANGLE_instanced_arrays");this.meshHeight=this.meshWidth=20;this.bufferWidth=d.drawingBufferWidth;this.bufferHeight=d.drawingBufferHeight;this.realBindFramebuffer=d.bindFramebuffer;this.realEnable=d.enable;this.realDisable=d.disable;this.realColorMask=d.colorMask;this.realClearColor=d.clearColor;this.realViewport=d.viewport;fa()||(this.realCanvasWidth=Object.getOwnPropertyDescriptor(d.canvas.__proto__,"width"),this.realCanvasHeight=Object.getOwnPropertyDescriptor(d.canvas.__proto__,
"height"));this.isPatched=!1;this.lastBoundFramebuffer=null;this.stencilTest=this.scissorTest=this.blend=this.depthTest=this.cullFace=!1;this.viewport=[0,0,0,0];this.colorMask=[!0,!0,!0,!0];this.clearColor=[0,0,0,0];this.attribs={position:0,texCoord:1};this.program=dc(d,"attribute vec2 position;\nattribute vec3 texCoord;\nvarying vec2 vTexCoord;\nuniform vec4 viewportOffsetScale[2];\nvoid main() {\n vec4 viewport = viewportOffsetScale[int(texCoord.z)];\n vTexCoord = (texCoord.xy * viewport.zw) + viewport.xy;\n gl_Position = vec4( position, 1.0, 1.0 );\n}",
"precision mediump float;\nuniform sampler2D diffuse;\nvarying vec2 vTexCoord;\nvoid main() {\n gl_FragColor = texture2D(diffuse, vTexCoord);\n}",this.attribs);this.uniforms=ec(d,this.program);this.viewportOffsetScale=new Float32Array(8);this.setTextureBounds();this.vertexBuffer=d.createBuffer();this.indexBuffer=d.createBuffer();this.indexCount=0;this.renderTarget=d.createTexture();this.framebuffer=d.createFramebuffer();this.stencilBuffer=this.depthBuffer=this.depthStencilBuffer=null;this.ctxAttribs.depth&&
this.ctxAttribs.stencil?this.depthStencilBuffer=d.createRenderbuffer():this.ctxAttribs.depth?this.depthBuffer=d.createRenderbuffer():this.ctxAttribs.stencil&&(this.stencilBuffer=d.createRenderbuffer());this.patch();this.onResize()}function B(d){this.gl=d;this.attribs={position:0};this.program=dc(d,"attribute vec2 position;\nuniform mat4 projectionMat;\nvoid main() {\n gl_Position = projectionMat * vec4( position, -1.0, 1.0 );\n}","precision mediump float;\nuniform vec4 color;\nvoid main() {\n gl_FragColor = color;\n}",
this.attribs);this.uniforms=ec(d,this.program);this.vertexBuffer=d.createBuffer();this.arrowVertexCount=this.arrowOffset=this.gearVertexCount=this.gearOffset=0;this.projMat=new Float32Array(16);this.listener=null;this.onResize()}function H(d){this.coefficients=d}function L(d){this.width=d.width||gb();this.height=d.height||hb();this.widthMeters=d.widthMeters;this.heightMeters=d.heightMeters;this.bevelMeters=d.bevelMeters}function M(d,r){this.viewer=Kb.CardboardV2;this.updateDeviceParams(d);this.distortion=
new H(this.viewer.distortionCoefficients);for(d=0;d<r.length;d++){var u=r[d];Kb[u.id]=new T(u)}}function T(d){this.id=d.id;this.label=d.label;this.fov=d.fov;this.interLensDistance=d.interLensDistance;this.baselineLensDistance=d.baselineLensDistance;this.screenLensDistance=d.screenLensDistance;this.distortionCoefficients=d.distortionCoefficients;this.inverseCoefficients=d.inverseCoefficients}function ca(d,r){this.dpdb=Ac;this.recalculateDeviceParams_();if(d){this.onDeviceParamsUpdated=r;var u=new XMLHttpRequest,
A=this;u.open("GET",d,!0);u.addEventListener("load",function(){A.loading=!1;200<=u.status&&299>=u.status?(A.dpdb=JSON.parse(u.response),A.recalculateDeviceParams_()):console.error("Error loading online DPDB!")});u.send()}}function ma(d){this.xdpi=d.xdpi;this.ydpi=d.ydpi;this.bevelMm=d.bevelMm}function na(d,r){this.set(d,r)}function ta(d,r){this.kFilter=d;this.isDebug=r;this.currentAccelMeasurement=new na;this.currentGyroMeasurement=new na;this.previousGyroMeasurement=new na;fa()?this.filterQ=new oa(-1,
0,0,1):this.filterQ=new oa(1,0,0,1);this.previousFilterQ=new oa;this.previousFilterQ.copy(this.filterQ);this.accelQ=new oa;this.isOrientationInitialized=!1;this.estimatedGravity=new Aa;this.measuredGravity=new Aa;this.gyroIntegralQ=new oa}function ua(d,r){this.predictionTimeS=d;this.isDebug=r;this.previousQ=new oa;this.previousTimestampS=null;this.deltaQ=new oa;this.outQ=new oa}function wa(d,r,u,A){this.yawOnly=u;this.accelerometer=new Aa;this.gyroscope=new Aa;this.filter=new ta(d,A);this.posePredictor=
new ua(r,A);this.isFirefoxAndroid=Za();this.isIOS=fa();d=Ta();this.isDeviceMotionInRadians=!this.isIOS&&d&&66>d;this.isWithoutDeviceMotion=ab()||$a();this.filterToWorldQ=new oa;fa()?this.filterToWorldQ.setFromAxisAngle(new Aa(1,0,0),Math.PI/2):this.filterToWorldQ.setFromAxisAngle(new Aa(1,0,0),-Math.PI/2);this.inverseWorldToScreenQ=new oa;this.worldToScreenQ=new oa;this.originalPoseAdjustQ=new oa;this.originalPoseAdjustQ.setFromAxisAngle(new Aa(0,0,1),-window.orientation*Math.PI/180);this.setScreenTransform_();
va()&&this.filterToWorldQ.multiply(this.inverseWorldToScreenQ);this.resetQ=new oa;this.orientationOut_=new Float32Array(4);this.start()}function Da(){this.loadIcon_();var d=document.createElement("div"),r=d.style;r.position="fixed";r.top=0;r.right=0;r.bottom=0;r.left=0;r.backgroundColor="gray";r.fontFamily="sans-serif";r.zIndex=1E6;var u=document.createElement("img");u.src=this.icon;r=u.style;r.marginLeft="25%";r.marginTop="25%";r.width="50%";d.appendChild(u);u=document.createElement("div");r=u.style;
r.textAlign="center";r.fontSize="16px";r.lineHeight="24px";r.margin="24px 25%";r.width="50%";u.innerHTML="Place your phone into your Cardboard viewer.";d.appendChild(u);var A=document.createElement("div");r=A.style;r.backgroundColor="#CFD8DC";r.position="fixed";r.bottom=0;r.width="100%";r.height="48px";r.padding="14px 24px";r.boxSizing="border-box";r.color="#656A6B";d.appendChild(A);var J=document.createElement("div");J.style.float="left";J.innerHTML="No Cardboard viewer?";var D=document.createElement("a");
D.href="https://www.google.com/get/cardboard/get-cardboard/";D.innerHTML="get one";D.target="_blank";r=D.style;r.float="right";r.fontWeight=600;r.textTransform="uppercase";r.borderLeft="1px solid gray";r.paddingLeft="24px";r.textDecoration="none";r.color="#656A6B";A.appendChild(J);A.appendChild(D);this.overlay=d;this.text=u;this.hide()}function xa(d){try{this.selectedKey=localStorage.getItem("WEBVR_CARDBOARD_VIEWER")}catch(r){console.error("Failed to load viewer profile: %s",r)}this.selectedKey||
(this.selectedKey=d||"CardboardV1");this.dialog=this.createDialog_(M.Viewers);this.root=null;this.onChangeCallbacks_=[]}function Ma(d){Object.defineProperties(this,{hasPosition:{writable:!1,enumerable:!0,value:d.hasPosition},hasExternalDisplay:{writable:!1,enumerable:!0,value:d.hasExternalDisplay},canPresent:{writable:!1,enumerable:!0,value:d.canPresent},maxLayers:{writable:!1,enumerable:!0,value:d.maxLayers},hasOrientation:{enumerable:!0,get:function(){cb("VRDisplayCapabilities.prototype.hasOrientation",
"VRDisplay.prototype.getFrameData");return d.hasOrientation}}})}function ka(d){d=d||{};d="wakelock"in d?d.wakelock:!0;this.isPolyfilled=!0;this.displayId=Bc++;this.displayName="";this.depthNear=.01;this.depthFar=1E4;this.isPresenting=!1;Object.defineProperty(this,"isConnected",{get:function(){cb("VRDisplay.prototype.isConnected","VRDisplayCapabilities.prototype.hasExternalDisplay");return!1}});this.capabilities=new Ma({hasPosition:!1,hasOrientation:!1,hasExternalDisplay:!1,canPresent:!1,maxLayers:1});
this.stageParameters=null;this.waitingForPresent_=!1;this.fullscreenErrorHandler_=this.fullscreenChangeHandler_=this.fullscreenEventTarget_=this.fullscreenElementCachedStyle_=this.fullscreenWrapper_=this.fullscreenElement_=this.originalParent_=this.layer_=null;d&&Lb()&&(this.wakelock_=new Cc)}function da(d){var r=fc({},Dc);d=fc(r,d||{});ka.call(this,{wakelock:d.MOBILE_WAKE_LOCK});this.config=d;this.displayName="Cardboard VRDisplay";this.capabilities=new Ma({hasPosition:!1,hasOrientation:!0,hasExternalDisplay:!1,
canPresent:!0,maxLayers:1});this.stageParameters=null;this.bufferScale_=this.config.BUFFER_SCALE;this.poseSensor_=new Ec(this.config);this.cardboardUI_=this.distorter_=null;this.dpdb_=new ca(this.config.DPDB_URL,this.onDeviceParamsUpdated_.bind(this));this.deviceInfo_=new M(this.dpdb_.getDeviceParams(),d.ADDITIONAL_VIEWERS);this.viewerSelector_=new xa(d.DEFAULT_VIEWER);this.viewerSelector_.onChange(this.onViewerChanged_.bind(this));this.deviceInfo_.setViewer(this.viewerSelector_.getCurrentViewer());
this.config.ROTATE_INSTRUCTIONS_DISABLED||(this.rotateInstructions_=new Da);fa()&&window.addEventListener("resize",this.onResize_.bind(this))}var ra=function(){function d(r,u){for(var A=0;A<u.length;A++){var J=u[A];J.enumerable=J.enumerable||!1;J.configurable=!0;"value"in J&&(J.writable=!0);Object.defineProperty(r,J.key,J)}}return function(r,u,A){u&&d(r.prototype,u);A&&d(r,A);return r}}(),sa=function(){return function(d,r){if(Array.isArray(d))return d;if(Symbol.iterator in Object(d)){var u=[],A=!0,
J=!1,D=void 0;try{for(var E=d[Symbol.iterator](),S;!(A=(S=E.next()).done)&&(u.push(S.value),!r||u.length!==r);A=!0);}catch(V){J=!0,D=V}finally{try{if(!A&&E["return"])E["return"]()}finally{if(J)throw D;}}return u}throw new TypeError("Invalid attempt to destructure non-iterable instance");}}(),fa=function(){var d=/iPad|iPhone|iPod/.test(navigator.platform);return function(){return d}}(),Pa=function(){var d=-1!==navigator.userAgent.indexOf("Version")&&-1!==navigator.userAgent.indexOf("Android")&&-1!==
navigator.userAgent.indexOf("Chrome");return function(){return d}}(),Ya=function(){var d=/^((?!chrome|android).)*safari/i.test(navigator.userAgent);return function(){return d}}(),Za=function(){var d=-1!==navigator.userAgent.indexOf("Firefox")&&-1!==navigator.userAgent.indexOf("Android");return function(){return d}}(),Ta=function(){var d=navigator.userAgent.match(/.*Chrome\/([0-9]+)/),r=d?parseInt(d[1],10):null;return function(){return r}}(),$a=function(){var d=!1;d=fa()&&Ya()&&-1!==navigator.userAgent.indexOf("13_4");
return function(){return d}}(),ab=function(){var d=!1;if(65===Ta()){var r=navigator.userAgent.match(/.*Chrome\/([0-9\.]*)/);if(r){r=r[1].split(".");r=sa(r,4);var u=r[3];d=3325===parseInt(r[2],10)&&148>parseInt(u,10)}}return function(){return d}}(),Ua=function(){var d=-1!==navigator.userAgent.indexOf("R7 Build");return function(){return d}}(),va=function(){var d=90==window.orientation||-90==window.orientation;return Ua()?!d:d},gb=function(){return Math.max(window.screen.width,window.screen.height)*
window.devicePixelRatio},hb=function(){return Math.min(window.screen.width,window.screen.height)*window.devicePixelRatio},Fc=function(d){if(Pa())return!1;if(d.requestFullscreen)d.requestFullscreen();else if(d.webkitRequestFullscreen)d.webkitRequestFullscreen();else if(d.mozRequestFullScreen)d.mozRequestFullScreen();else if(d.msRequestFullscreen)d.msRequestFullscreen();else return!1;return!0},gc=function(){if(document.exitFullscreen)document.exitFullscreen();else if(document.webkitExitFullscreen)document.webkitExitFullscreen();
else if(document.mozCancelFullScreen)document.mozCancelFullScreen();else if(document.msExitFullscreen)document.msExitFullscreen();else return!1;return!0},dc=function(d,r,u,A){var J=d.createShader(d.VERTEX_SHADER);d.shaderSource(J,r);d.compileShader(J);r=d.createShader(d.FRAGMENT_SHADER);d.shaderSource(r,u);d.compileShader(r);u=d.createProgram();d.attachShader(u,J);d.attachShader(u,r);for(var D in A)d.bindAttribLocation(u,A[D],D);d.linkProgram(u);d.deleteShader(J);d.deleteShader(r);return u},ec=function(d,
r){for(var u={},A=d.getProgramParameter(r,d.ACTIVE_UNIFORMS),J,D=0;D<A;D++)J=d.getActiveUniform(r,D).name.replace("[0]",""),u[J]=d.getUniformLocation(r,J);return u},Lb=function(){var d=!1,r=navigator.userAgent||navigator.vendor||window.opera;if(/(android|bb\d+|meego).+mobile|avantgo|bada\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|mobile.+firefox|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\.(browser|link)|vodafone|wap|windows ce|xda|xiino/i.test(r)||
/1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s\-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|\-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw\-(n|u)|c55\/|capi|ccwa|cdm\-|cell|chtm|cldc|cmd\-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc\-s|devi|dica|dmob|do(c|p)o|ds(12|\-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(\-|_)|g1 u|g560|gene|gf\-5|g\-mo|go(\.w|od)|gr(ad|un)|haie|hcit|hd\-(m|p|t)|hei\-|hi(pt|ta)|hp( i|ip)|hs\-c|ht(c(\-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i\-(20|go|ma)|i230|iac( |\-|\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\/)|klon|kpt |kwc\-|kyo(c|k)|le(no|xi)|lg( g|\/(k|l|u)|50|54|\-[a-w])|libw|lynx|m1\-w|m3ga|m50\/|ma(te|ui|xo)|mc(01|21|ca)|m\-cr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(\-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)\-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|\-([1-8]|c))|phil|pire|pl(ay|uc)|pn\-2|po(ck|rt|se)|prox|psio|pt\-g|qa\-a|qc(07|12|21|32|60|\-[2-7]|i\-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h\-|oo|p\-)|sdk\/|se(c(\-|0|1)|47|mc|nd|ri)|sgh\-|shar|sie(\-|m)|sk\-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h\-|v\-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl\-|tdg\-|tel(i|m)|tim\-|t\-mo|to(pl|sh)|ts(70|m\-|m3|m5)|tx\-9|up(\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|\-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(\-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas\-|your|zeto|zte\-/i.test(r.substr(0,
4)))d=!0;return d},fc=function(d,r){for(var u in r)r.hasOwnProperty(u)&&(d[u]=r[u]);return d},Mb=function(d){if(fa()){var r=d.style.width,u=d.style.height;d.style.width=parseInt(r)+1+"px";d.style.height=parseInt(u)+"px";setTimeout(function(){d.style.width=r;d.style.height=u},100)}window.canvas=d},Gc=function(){function d(D,E,S,V,U,Z){var ba=V||null;V=Z.depthNear;Z=Z.depthFar;var ha=Math.tan(ba?ba.upDegrees*r:u),pa=Math.tan(ba?ba.downDegrees*r:u),Ba=Math.tan(ba?ba.leftDegrees*r:u);ba=Math.tan(ba?ba.rightDegrees*
r:u);var la=2/(Ba+ba),ya=2/(ha+pa);D[0]=la;D[1]=0;D[2]=0;D[3]=0;D[4]=0;D[5]=ya;D[6]=0;D[7]=0;D[8]=-((Ba-ba)*la*.5);D[9]=(ha-pa)*ya*.5;D[10]=Z/(V-Z);D[11]=-1;D[12]=0;D[13]=0;D[14]=Z*V/(V-Z);D[15]=0;D=S.orientation||A;S=S.position||J;pa=D[0];la=D[1];ya=D[2];Z=D[3];var Ka=pa+pa;ba=la+la;ha=ya+ya;D=pa*Ka;V=pa*ba;pa*=ha;Ba=la*ba;la*=ha;ya*=ha;Ka*=Z;ba*=Z;Z*=ha;E[0]=1-(Ba+ya);E[1]=V+Z;E[2]=pa-ba;E[3]=0;E[4]=V-Z;E[5]=1-(D+ya);E[6]=la+Ka;E[7]=0;E[8]=pa+ba;E[9]=la-Ka;E[10]=1-(D+Ba);E[11]=0;E[12]=S[0];E[13]=
S[1];E[14]=S[2];E[15]=1;if(U)if(S=U[0],D=U[1],U=U[2],E===E)E[12]=E[0]*S+E[4]*D+E[8]*U+E[12],E[13]=E[1]*S+E[5]*D+E[9]*U+E[13],E[14]=E[2]*S+E[6]*D+E[10]*U+E[14],E[15]=E[3]*S+E[7]*D+E[11]*U+E[15];else{V=E[0];Z=E[1];ha=E[2];pa=E[3];Ba=E[4];ba=E[5];la=E[6];ya=E[7];Ka=E[8];var Qa=E[9];var Ra=E[10];var Sa=E[11];E[0]=V;E[1]=Z;E[2]=ha;E[3]=pa;E[4]=Ba;E[5]=ba;E[6]=la;E[7]=ya;E[8]=Ka;E[9]=Qa;E[10]=Ra;E[11]=Sa;E[12]=V*S+Ba*D+Ka*U+E[12];E[13]=Z*S+ba*D+Qa*U+E[13];E[14]=ha*S+la*D+Ra*U+E[14];E[15]=pa*S+ya*D+Sa*U+
E[15]}U=E[0];S=E[1];D=E[2];V=E[3];Z=E[4];ha=E[5];pa=E[6];Ba=E[7];ba=E[8];la=E[9];ya=E[10];Ka=E[11];Qa=E[12];Ra=E[13];Sa=E[14];var db=E[15],ib=U*ha-S*Z,jb=U*pa-D*Z,kb=U*Ba-V*Z,lb=S*pa-D*ha,mb=S*Ba-V*ha,nb=D*Ba-V*pa,ob=ba*Ra-la*Qa,pb=ba*Sa-ya*Qa,qb=ba*db-Ka*Qa,rb=la*Sa-ya*Ra,sb=la*db-Ka*Ra,tb=ya*db-Ka*Sa,Fa=ib*tb-jb*sb+kb*rb+lb*qb-mb*pb+nb*ob;Fa&&(Fa=1/Fa,E[0]=(ha*tb-pa*sb+Ba*rb)*Fa,E[1]=(D*sb-S*tb-V*rb)*Fa,E[2]=(Ra*nb-Sa*mb+db*lb)*Fa,E[3]=(ya*mb-la*nb-Ka*lb)*Fa,E[4]=(pa*qb-Z*tb-Ba*pb)*Fa,E[5]=(U*tb-
D*qb+V*pb)*Fa,E[6]=(Sa*kb-Qa*nb-db*jb)*Fa,E[7]=(ba*nb-ya*kb+Ka*jb)*Fa,E[8]=(Z*sb-ha*qb+Ba*ob)*Fa,E[9]=(S*qb-U*sb-V*ob)*Fa,E[10]=(Qa*mb-Ra*kb+db*ib)*Fa,E[11]=(la*kb-ba*mb-Ka*ib)*Fa,E[12]=(ha*pb-Z*rb-pa*ob)*Fa,E[13]=(U*rb-S*pb+D*ob)*Fa,E[14]=(Ra*jb-Qa*lb-Sa*ib)*Fa,E[15]=(ba*lb-la*jb+ya*ib)*Fa)}var r=Math.PI/180,u=.25*Math.PI,A=new Float32Array([0,0,0,1]),J=new Float32Array([0,0,0]);return function(D,E,S){if(!D||!E)return!1;D.pose=E;D.timestamp=E.timestamp;d(D.leftProjectionMatrix,D.leftViewMatrix,E,
S._getFieldOfView("left"),S._getEyeOffset("left"),S);d(D.rightProjectionMatrix,D.rightViewMatrix,E,S._getFieldOfView("right"),S._getEyeOffset("right"),S);return!0}}(),hc=function(d){var r=d.indexOf("://");r=d.indexOf("/",-1!==r?r+3:0);-1===r&&(r=d.length);return d.substring(0,r)},Nb=function(){var d={};return function(r,u){void 0===d[r]&&(console.warn("webvr-polyfill: "+u),d[r]=!0)}}(),cb=function(d,r){Nb(d,d+" has been deprecated. This may not work on native WebVR displays. "+(r?"Please use "+r+
" instead.":""))},ub=function(d,r,u){if(r){for(var A=[],J=null,D=0;D<r.length;++D){var E=r[D];switch(E){case d.TEXTURE_BINDING_2D:case d.TEXTURE_BINDING_CUBE_MAP:var S=r[++D];if(S<d.TEXTURE0||S>d.TEXTURE31){console.error("TEXTURE_BINDING_2D or TEXTURE_BINDING_CUBE_MAP must be followed by a valid texture unit");A.push(null,null);break}J||(J=d.getParameter(d.ACTIVE_TEXTURE));d.activeTexture(S);A.push(d.getParameter(E),null);break;case d.ACTIVE_TEXTURE:J=d.getParameter(d.ACTIVE_TEXTURE);A.push(null);
break;default:A.push(d.getParameter(E))}}u(d);for(D=0;D<r.length;++D){E=r[D];u=A[D];switch(E){case d.ACTIVE_TEXTURE:break;case d.ARRAY_BUFFER_BINDING:d.bindBuffer(d.ARRAY_BUFFER,u);break;case d.COLOR_CLEAR_VALUE:d.clearColor(u[0],u[1],u[2],u[3]);break;case d.COLOR_WRITEMASK:d.colorMask(u[0],u[1],u[2],u[3]);break;case d.CURRENT_PROGRAM:d.useProgram(u);break;case d.ELEMENT_ARRAY_BUFFER_BINDING:d.bindBuffer(d.ELEMENT_ARRAY_BUFFER,u);break;case d.FRAMEBUFFER_BINDING:d.bindFramebuffer(d.FRAMEBUFFER,u);
break;case d.RENDERBUFFER_BINDING:d.bindRenderbuffer(d.RENDERBUFFER,u);break;case d.TEXTURE_BINDING_2D:S=r[++D];if(S<d.TEXTURE0||S>d.TEXTURE31)break;d.activeTexture(S);d.bindTexture(d.TEXTURE_2D,u);break;case d.TEXTURE_BINDING_CUBE_MAP:S=r[++D];if(S<d.TEXTURE0||S>d.TEXTURE31)break;d.activeTexture(S);d.bindTexture(d.TEXTURE_CUBE_MAP,u);break;case d.VIEWPORT:d.viewport(u[0],u[1],u[2],u[3]);break;case d.BLEND:case d.CULL_FACE:case d.DEPTH_TEST:case d.SCISSOR_TEST:case d.STENCIL_TEST:u?d.enable(E):d.disable(E);
break;default:console.log("No GL restore behavior for 0x"+E.toString(16))}J&&d.activeTexture(J)}}else u(d)};y.prototype.destroy=function(){var d=this.gl;this.unpatch();d.deleteProgram(this.program);d.deleteBuffer(this.vertexBuffer);d.deleteBuffer(this.indexBuffer);d.deleteTexture(this.renderTarget);d.deleteFramebuffer(this.framebuffer);this.depthStencilBuffer&&d.deleteRenderbuffer(this.depthStencilBuffer);this.depthBuffer&&d.deleteRenderbuffer(this.depthBuffer);this.stencilBuffer&&d.deleteRenderbuffer(this.stencilBuffer);
this.cardboardUI&&this.cardboardUI.destroy()};y.prototype.onResize=function(){var d=this.gl,r=this;ub(d,[d.RENDERBUFFER_BINDING,d.TEXTURE_BINDING_2D,d.TEXTURE0],function(u){r.realBindFramebuffer.call(u,u.FRAMEBUFFER,null);r.scissorTest&&r.realDisable.call(u,u.SCISSOR_TEST);r.realColorMask.call(u,!0,!0,!0,!0);r.realViewport.call(u,0,0,u.drawingBufferWidth,u.drawingBufferHeight);r.realClearColor.call(u,0,0,0,1);u.clear(u.COLOR_BUFFER_BIT);r.realBindFramebuffer.call(u,u.FRAMEBUFFER,r.framebuffer);u.bindTexture(u.TEXTURE_2D,
r.renderTarget);u.texImage2D(u.TEXTURE_2D,0,r.ctxAttribs.alpha?u.RGBA:u.RGB,r.bufferWidth,r.bufferHeight,0,r.ctxAttribs.alpha?u.RGBA:u.RGB,u.UNSIGNED_BYTE,null);u.texParameteri(u.TEXTURE_2D,u.TEXTURE_MAG_FILTER,u.LINEAR);u.texParameteri(u.TEXTURE_2D,u.TEXTURE_MIN_FILTER,u.LINEAR);u.texParameteri(u.TEXTURE_2D,u.TEXTURE_WRAP_S,u.CLAMP_TO_EDGE);u.texParameteri(u.TEXTURE_2D,u.TEXTURE_WRAP_T,u.CLAMP_TO_EDGE);u.framebufferTexture2D(u.FRAMEBUFFER,u.COLOR_ATTACHMENT0,u.TEXTURE_2D,r.renderTarget,0);r.ctxAttribs.depth&&
r.ctxAttribs.stencil?(u.bindRenderbuffer(u.RENDERBUFFER,r.depthStencilBuffer),u.renderbufferStorage(u.RENDERBUFFER,u.DEPTH_STENCIL,r.bufferWidth,r.bufferHeight),u.framebufferRenderbuffer(u.FRAMEBUFFER,u.DEPTH_STENCIL_ATTACHMENT,u.RENDERBUFFER,r.depthStencilBuffer)):r.ctxAttribs.depth?(u.bindRenderbuffer(u.RENDERBUFFER,r.depthBuffer),u.renderbufferStorage(u.RENDERBUFFER,u.DEPTH_COMPONENT16,r.bufferWidth,r.bufferHeight),u.framebufferRenderbuffer(u.FRAMEBUFFER,u.DEPTH_ATTACHMENT,u.RENDERBUFFER,r.depthBuffer)):
r.ctxAttribs.stencil&&(u.bindRenderbuffer(u.RENDERBUFFER,r.stencilBuffer),u.renderbufferStorage(u.RENDERBUFFER,u.STENCIL_INDEX8,r.bufferWidth,r.bufferHeight),u.framebufferRenderbuffer(u.FRAMEBUFFER,u.STENCIL_ATTACHMENT,u.RENDERBUFFER,r.stencilBuffer));!u.checkFramebufferStatus(u.FRAMEBUFFER)===u.FRAMEBUFFER_COMPLETE&&console.error("Framebuffer incomplete!");r.realBindFramebuffer.call(u,u.FRAMEBUFFER,r.lastBoundFramebuffer);r.scissorTest&&r.realEnable.call(u,u.SCISSOR_TEST);r.realColorMask.apply(u,
r.colorMask);r.realViewport.apply(u,r.viewport);r.realClearColor.apply(u,r.clearColor)});if(this.cardboardUI)this.cardboardUI.onResize()};y.prototype.patch=function(){if(!this.isPatched){var d=this,r=this.gl.canvas,u=this.gl;fa()||(r.width=gb()*this.bufferScale,r.height=hb()*this.bufferScale,Object.defineProperty(r,"width",{configurable:!0,enumerable:!0,get:function(){return d.bufferWidth},set:function(A){d.bufferWidth=A;d.realCanvasWidth.set.call(r,A);d.onResize()}}),Object.defineProperty(r,"height",
{configurable:!0,enumerable:!0,get:function(){return d.bufferHeight},set:function(A){d.bufferHeight=A;d.realCanvasHeight.set.call(r,A);d.onResize()}}));this.lastBoundFramebuffer=u.getParameter(u.FRAMEBUFFER_BINDING);null==this.lastBoundFramebuffer&&(this.lastBoundFramebuffer=this.framebuffer,this.gl.bindFramebuffer(u.FRAMEBUFFER,this.framebuffer));this.gl.bindFramebuffer=function(A,J){d.lastBoundFramebuffer=J?J:d.framebuffer;d.realBindFramebuffer.call(u,A,d.lastBoundFramebuffer)};this.cullFace=u.getParameter(u.CULL_FACE);
this.depthTest=u.getParameter(u.DEPTH_TEST);this.blend=u.getParameter(u.BLEND);this.scissorTest=u.getParameter(u.SCISSOR_TEST);this.stencilTest=u.getParameter(u.STENCIL_TEST);u.enable=function(A){switch(A){case u.CULL_FACE:d.cullFace=!0;break;case u.DEPTH_TEST:d.depthTest=!0;break;case u.BLEND:d.blend=!0;break;case u.SCISSOR_TEST:d.scissorTest=!0;break;case u.STENCIL_TEST:d.stencilTest=!0}d.realEnable.call(u,A)};u.disable=function(A){switch(A){case u.CULL_FACE:d.cullFace=!1;break;case u.DEPTH_TEST:d.depthTest=
!1;break;case u.BLEND:d.blend=!1;break;case u.SCISSOR_TEST:d.scissorTest=!1;break;case u.STENCIL_TEST:d.stencilTest=!1}d.realDisable.call(u,A)};this.colorMask=u.getParameter(u.COLOR_WRITEMASK);u.colorMask=function(A,J,D,E){d.colorMask[0]=A;d.colorMask[1]=J;d.colorMask[2]=D;d.colorMask[3]=E;d.realColorMask.call(u,A,J,D,E)};this.clearColor=u.getParameter(u.COLOR_CLEAR_VALUE);u.clearColor=function(A,J,D,E){d.clearColor[0]=A;d.clearColor[1]=J;d.clearColor[2]=D;d.clearColor[3]=E;d.realClearColor.call(u,
A,J,D,E)};this.viewport=u.getParameter(u.VIEWPORT);u.viewport=function(A,J,D,E){d.viewport[0]=A;d.viewport[1]=J;d.viewport[2]=D;d.viewport[3]=E;d.realViewport.call(u,A,J,D,E)};this.isPatched=!0;Mb(r)}};y.prototype.unpatch=function(){if(this.isPatched){var d=this.gl,r=this.gl.canvas;fa()||(Object.defineProperty(r,"width",this.realCanvasWidth),Object.defineProperty(r,"height",this.realCanvasHeight));r.width=this.bufferWidth;r.height=this.bufferHeight;d.bindFramebuffer=this.realBindFramebuffer;d.enable=
this.realEnable;d.disable=this.realDisable;d.colorMask=this.realColorMask;d.clearColor=this.realClearColor;d.viewport=this.realViewport;this.lastBoundFramebuffer==this.framebuffer&&d.bindFramebuffer(d.FRAMEBUFFER,null);this.isPatched=!1;setTimeout(function(){Mb(r)},1)}};y.prototype.setTextureBounds=function(d,r){d||(d=[0,0,.5,1]);r||(r=[.5,0,.5,1]);this.viewportOffsetScale[0]=d[0];this.viewportOffsetScale[1]=d[1];this.viewportOffsetScale[2]=d[2];this.viewportOffsetScale[3]=d[3];this.viewportOffsetScale[4]=
r[0];this.viewportOffsetScale[5]=r[1];this.viewportOffsetScale[6]=r[2];this.viewportOffsetScale[7]=r[3]};y.prototype.submitFrame=function(){var d=this.gl,r=this,u=[];this.dirtySubmitFrameBindings||u.push(d.CURRENT_PROGRAM,d.ARRAY_BUFFER_BINDING,d.ELEMENT_ARRAY_BUFFER_BINDING,d.TEXTURE_BINDING_2D,d.TEXTURE0);ub(d,u,function(A){r.realBindFramebuffer.call(A,A.FRAMEBUFFER,null);var J=0,D=0;r.instanceExt&&(J=A.getVertexAttrib(r.attribs.position,r.instanceExt.VERTEX_ATTRIB_ARRAY_DIVISOR_ANGLE),D=A.getVertexAttrib(r.attribs.texCoord,
r.instanceExt.VERTEX_ATTRIB_ARRAY_DIVISOR_ANGLE));r.cullFace&&r.realDisable.call(A,A.CULL_FACE);r.depthTest&&r.realDisable.call(A,A.DEPTH_TEST);r.blend&&r.realDisable.call(A,A.BLEND);r.scissorTest&&r.realDisable.call(A,A.SCISSOR_TEST);r.stencilTest&&r.realDisable.call(A,A.STENCIL_TEST);r.realColorMask.call(A,!0,!0,!0,!0);r.realViewport.call(A,0,0,A.drawingBufferWidth,A.drawingBufferHeight);if(r.ctxAttribs.alpha||fa())r.realClearColor.call(A,0,0,0,1),A.clear(A.COLOR_BUFFER_BIT);A.useProgram(r.program);
A.bindBuffer(A.ELEMENT_ARRAY_BUFFER,r.indexBuffer);A.bindBuffer(A.ARRAY_BUFFER,r.vertexBuffer);A.enableVertexAttribArray(r.attribs.position);A.enableVertexAttribArray(r.attribs.texCoord);A.vertexAttribPointer(r.attribs.position,2,A.FLOAT,!1,20,0);A.vertexAttribPointer(r.attribs.texCoord,3,A.FLOAT,!1,20,8);r.instanceExt&&(0!=J&&r.instanceExt.vertexAttribDivisorANGLE(r.attribs.position,0),0!=D&&r.instanceExt.vertexAttribDivisorANGLE(r.attribs.texCoord,0));A.activeTexture(A.TEXTURE0);A.uniform1i(r.uniforms.diffuse,
0);A.bindTexture(A.TEXTURE_2D,r.renderTarget);A.uniform4fv(r.uniforms.viewportOffsetScale,r.viewportOffsetScale);A.drawElements(A.TRIANGLES,r.indexCount,A.UNSIGNED_SHORT,0);r.cardboardUI&&r.cardboardUI.renderNoState();r.realBindFramebuffer.call(r.gl,A.FRAMEBUFFER,r.framebuffer);r.ctxAttribs.preserveDrawingBuffer||(r.realClearColor.call(A,0,0,0,0),A.clear(A.COLOR_BUFFER_BIT));r.dirtySubmitFrameBindings||r.realBindFramebuffer.call(A,A.FRAMEBUFFER,r.lastBoundFramebuffer);r.cullFace&&r.realEnable.call(A,
A.CULL_FACE);r.depthTest&&r.realEnable.call(A,A.DEPTH_TEST);r.blend&&r.realEnable.call(A,A.BLEND);r.scissorTest&&r.realEnable.call(A,A.SCISSOR_TEST);r.stencilTest&&r.realEnable.call(A,A.STENCIL_TEST);r.realColorMask.apply(A,r.colorMask);r.realViewport.apply(A,r.viewport);!r.ctxAttribs.alpha&&r.ctxAttribs.preserveDrawingBuffer||r.realClearColor.apply(A,r.clearColor);r.instanceExt&&(0!=J&&r.instanceExt.vertexAttribDivisorANGLE(r.attribs.position,J),0!=D&&r.instanceExt.vertexAttribDivisorANGLE(r.attribs.texCoord,
D))});fa()&&(d=d.canvas,d.width!=r.bufferWidth||d.height!=r.bufferHeight)&&(r.bufferWidth=d.width,r.bufferHeight=d.height,r.onResize())};y.prototype.updateDeviceInfo=function(d){var r=this.gl,u=this;ub(r,[r.ARRAY_BUFFER_BINDING,r.ELEMENT_ARRAY_BUFFER_BINDING],function(A){var J=u.computeMeshVertices_(u.meshWidth,u.meshHeight,d);A.bindBuffer(A.ARRAY_BUFFER,u.vertexBuffer);A.bufferData(A.ARRAY_BUFFER,J,A.STATIC_DRAW);u.indexCount||(J=u.computeMeshIndices_(u.meshWidth,u.meshHeight),A.bindBuffer(A.ELEMENT_ARRAY_BUFFER,
u.indexBuffer),A.bufferData(A.ELEMENT_ARRAY_BUFFER,J,A.STATIC_DRAW),u.indexCount=J.length)})};y.prototype.computeMeshVertices_=function(d,r,u){for(var A=new Float32Array(2*d*r*5),J=u.getLeftEyeVisibleTanAngles(),D=u.getLeftEyeNoLensTanAngles(),E=u.getLeftEyeVisibleScreenRect(D),S=0,V=0;2>V;V++){for(var U=0;U<r;U++)for(var Z=0;Z<d;Z++,S++){var ba=Z/(d-1),ha=U/(r-1),pa=ba,Ba=ha,la=J[0];ba=la+(J[2]-la)*ba;la=J[3];var ya=la+(J[1]-la)*ha;ha=Math.sqrt(ba*ba+ya*ya);la=u.distortion.distortInverse(ha);ya=
ya*la/ha;ba=(ba*la/ha-D[0])/(D[2]-D[0]);ha=(ya-D[3])/(D[1]-D[3]);ba=2*(E.x+ba*E.width-.5);ha=2*(E.y+ha*E.height-.5);A[5*S]=ba;A[5*S+1]=ha;A[5*S+2]=pa;A[5*S+3]=Ba;A[5*S+4]=V}U=J[2]-J[0];J[0]=-(U+J[0]);J[2]=U-J[2];U=D[2]-D[0];D[0]=-(U+D[0]);D[2]=U-D[2];E.x=1-(E.x+E.width)}return A};y.prototype.computeMeshIndices_=function(d,r){for(var u=new Uint16Array(2*(d-1)*(r-1)*6),A=d/2,J=r/2,D=0,E=0,S=0;2>S;S++)for(var V=0;V<r;V++)for(var U=0;U<d;U++,D++)0!=U&&0!=V&&(U<=A==V<=J?(u[E++]=D,u[E++]=D-d-1,u[E++]=D-
d,u[E++]=D-d-1,u[E++]=D,u[E++]=D-1):(u[E++]=D-1,u[E++]=D-d,u[E++]=D,u[E++]=D-d,u[E++]=D-1,u[E++]=D-d-1));return u};y.prototype.getOwnPropertyDescriptor_=function(d,r){d=Object.getOwnPropertyDescriptor(d,r);if(void 0===d.get||void 0===d.set)d.configurable=!0,d.enumerable=!0,d.get=function(){return this.getAttribute(r)},d.set=function(u){this.setAttribute(r,u)};return d};var ic=Math.PI/180;B.prototype.destroy=function(){var d=this.gl;this.listener&&d.canvas.removeEventListener("click",this.listener,
!1);d.deleteProgram(this.program);d.deleteBuffer(this.vertexBuffer)};B.prototype.listen=function(d,r){var u=this.gl.canvas;this.listener=function(A){var J=u.clientWidth/2;A.clientX>J-42&&A.clientX<J+42&&A.clientY>u.clientHeight-42?d(A):42>A.clientX&&42>A.clientY&&r(A)};u.addEventListener("click",this.listener,!1)};B.prototype.onResize=function(){var d=this.gl,r=this;ub(d,[d.ARRAY_BUFFER_BINDING],function(u){function A(pa,Ba){var la=(90-pa)*ic;pa=Math.cos(la);la=Math.sin(la);D.push(.3125*pa*Z+E,.3125*
la*Z+Z);D.push(Ba*pa*Z+E,Ba*la*Z+Z)}function J(pa,Ba){D.push(ba+pa,u.drawingBufferHeight-ba-Ba)}var D=[],E=u.drawingBufferWidth/2,S=u.drawingBufferWidth/(Math.max(screen.width,screen.height)*window.devicePixelRatio)*window.devicePixelRatio,V=4*S/2,U=42*S,Z=28*S/2,ba=14*S;D.push(E-V,U);D.push(E-V,u.drawingBufferHeight);D.push(E+V,U);D.push(E+V,u.drawingBufferHeight);r.gearOffset=D.length/2;for(U=0;6>=U;U++){var ha=60*U;A(ha,1);A(ha+12,1);A(ha+20,.75);A(ha+40,.75);A(ha+48,1)}r.gearVertexCount=D.length/
2-r.gearOffset;r.arrowOffset=D.length/2;U=V/Math.sin(45*ic);J(0,Z);J(Z,0);J(Z+U,U);J(U,Z+U);J(U,Z-U);J(0,Z);J(Z,2*Z);J(Z+U,2*Z-U);J(U,Z-U);J(0,Z);J(U,Z-V);J(28*S,Z-V);J(U,Z+V);J(28*S,Z+V);r.arrowVertexCount=D.length/2-r.arrowOffset;u.bindBuffer(u.ARRAY_BUFFER,r.vertexBuffer);u.bufferData(u.ARRAY_BUFFER,new Float32Array(D),u.STATIC_DRAW)})};B.prototype.render=function(){var d=this.gl,r=this;ub(d,[d.CULL_FACE,d.DEPTH_TEST,d.BLEND,d.SCISSOR_TEST,d.STENCIL_TEST,d.COLOR_WRITEMASK,d.VIEWPORT,d.CURRENT_PROGRAM,
d.ARRAY_BUFFER_BINDING],function(u){u.disable(u.CULL_FACE);u.disable(u.DEPTH_TEST);u.disable(u.BLEND);u.disable(u.SCISSOR_TEST);u.disable(u.STENCIL_TEST);u.colorMask(!0,!0,!0,!0);u.viewport(0,0,u.drawingBufferWidth,u.drawingBufferHeight);r.renderNoState()})};B.prototype.renderNoState=function(){var d=this.gl;d.useProgram(this.program);d.bindBuffer(d.ARRAY_BUFFER,this.vertexBuffer);d.enableVertexAttribArray(this.attribs.position);d.vertexAttribPointer(this.attribs.position,2,d.FLOAT,!1,8,0);d.uniform4f(this.uniforms.color,
1,1,1,1);var r=this.projMat,u=d.drawingBufferWidth,A=d.drawingBufferHeight,J=1/(0-u),D=1/(0-A),E=1/-1023.9;r[0]=-2*J;r[1]=0;r[2]=0;r[3]=0;r[4]=0;r[5]=-2*D;r[6]=0;r[7]=0;r[8]=0;r[9]=0;r[10]=2*E;r[11]=0;r[12]=(0+u)*J;r[13]=(A+0)*D;r[14]=1024.1*E;r[15]=1;d.uniformMatrix4fv(this.uniforms.projectionMat,!1,this.projMat);d.drawArrays(d.TRIANGLE_STRIP,0,4);d.drawArrays(d.TRIANGLE_STRIP,this.gearOffset,this.gearVertexCount);d.drawArrays(d.TRIANGLE_STRIP,this.arrowOffset,this.arrowVertexCount)};H.prototype.distortInverse=
function(d){for(var r=0,u=1,A=d-this.distort(r);1E-4<Math.abs(u-r);){var J=d-this.distort(u);A=u-(u-r)/(J-A)*J;r=u;u=A;A=J}return u};H.prototype.distort=function(d){for(var r=d*d,u=0,A=0;A<this.coefficients.length;A++)u=r*(u+this.coefficients[A]);return(u+1)*d};var Na=Math.PI/180,Oa=180/Math.PI,Aa=function(d,r,u){this.x=d||0;this.y=r||0;this.z=u||0};Aa.prototype={constructor:Aa,set:function(d,r,u){this.x=d;this.y=r;this.z=u;return this},copy:function(d){this.x=d.x;this.y=d.y;this.z=d.z;return this},
length:function(){return Math.sqrt(this.x*this.x+this.y*this.y+this.z*this.z)},normalize:function(){var d=this.length();0!==d?this.multiplyScalar(1/d):this.z=this.y=this.x=0;return this},multiplyScalar:function(d){this.x*=d;this.y*=d;this.z*=d},applyQuaternion:function(d){var r=this.x,u=this.y,A=this.z,J=d.x,D=d.y,E=d.z;d=d.w;var S=d*r+D*A-E*u,V=d*u+E*r-J*A,U=d*A+J*u-D*r;r=-J*r-D*u-E*A;this.x=S*d+r*-J+V*-E-U*-D;this.y=V*d+r*-D+U*-J-S*-E;this.z=U*d+r*-E+S*-D-V*-J;return this},dot:function(d){return this.x*
d.x+this.y*d.y+this.z*d.z},crossVectors:function(d,r){var u=d.x,A=d.y;d=d.z;var J=r.x,D=r.y;r=r.z;this.x=A*r-d*D;this.y=d*J-u*r;this.z=u*D-A*J;return this}};var oa=function(d,r,u,A){this.x=d||0;this.y=r||0;this.z=u||0;this.w=void 0!==A?A:1};oa.prototype={constructor:oa,set:function(d,r,u,A){this.x=d;this.y=r;this.z=u;this.w=A;return this},copy:function(d){this.x=d.x;this.y=d.y;this.z=d.z;this.w=d.w;return this},setFromEulerXYZ:function(d,r,u){var A=Math.cos(d/2),J=Math.cos(r/2),D=Math.cos(u/2);d=
Math.sin(d/2);r=Math.sin(r/2);u=Math.sin(u/2);this.x=d*J*D+A*r*u;this.y=A*r*D-d*J*u;this.z=A*J*u+d*r*D;this.w=A*J*D-d*r*u;return this},setFromEulerYXZ:function(d,r,u){var A=Math.cos(d/2),J=Math.cos(r/2),D=Math.cos(u/2);d=Math.sin(d/2);r=Math.sin(r/2);u=Math.sin(u/2);this.x=d*J*D+A*r*u;this.y=A*r*D-d*J*u;this.z=A*J*u-d*r*D;this.w=A*J*D+d*r*u;return this},setFromAxisAngle:function(d,r){r/=2;var u=Math.sin(r);this.x=d.x*u;this.y=d.y*u;this.z=d.z*u;this.w=Math.cos(r);return this},multiply:function(d){return this.multiplyQuaternions(this,
d)},multiplyQuaternions:function(d,r){var u=d.x,A=d.y,J=d.z;d=d.w;var D=r.x,E=r.y,S=r.z;r=r.w;this.x=u*r+d*D+A*S-J*E;this.y=A*r+d*E+J*D-u*S;this.z=J*r+d*S+u*E-A*D;this.w=d*r-u*D-A*E-J*S;return this},inverse:function(){this.x*=-1;this.y*=-1;this.z*=-1;this.normalize();return this},normalize:function(){var d=Math.sqrt(this.x*this.x+this.y*this.y+this.z*this.z+this.w*this.w);0===d?(this.z=this.y=this.x=0,this.w=1):(d=1/d,this.x*=d,this.y*=d,this.z*=d,this.w*=d);return this},slerp:function(d,r){if(0===
r)return this;if(1===r)return this.copy(d);var u=this.x,A=this.y,J=this.z,D=this.w,E=D*d.w+u*d.x+A*d.y+J*d.z;0>E?(this.w=-d.w,this.x=-d.x,this.y=-d.y,this.z=-d.z,E=-E):this.copy(d);if(1<=E)return this.w=D,this.x=u,this.y=A,this.z=J,this;d=Math.acos(E);var S=Math.sqrt(1-E*E);if(.001>Math.abs(S))return this.w=.5*(D+this.w),this.x=.5*(u+this.x),this.y=.5*(A+this.y),this.z=.5*(J+this.z),this;E=Math.sin((1-r)*d)/S;r=Math.sin(r*d)/S;this.w=D*E+this.w*r;this.x=u*E+this.x*r;this.y=A*E+this.y*r;this.z=J*E+
this.z*r;return this},setFromUnitVectors:function(){var d,r;return function(u,A){void 0===d&&(d=new Aa);r=u.dot(A)+1;1E-6>r?(r=0,Math.abs(u.x)>Math.abs(u.z)?d.set(-u.y,u.x,0):d.set(0,-u.z,u.y)):d.crossVectors(u,A);this.x=d.x;this.y=d.y;this.z=d.z;this.w=r;this.normalize();return this}}()};var Hc=new L({widthMeters:.11,heightMeters:.062,bevelMeters:.004}),Ic=new L({widthMeters:.1038,heightMeters:.0584,bevelMeters:.004}),Kb={CardboardV1:new T({id:"CardboardV1",label:"Cardboard I/O 2014",fov:40,interLensDistance:.06,
baselineLensDistance:.035,screenLensDistance:.042,distortionCoefficients:[.441,.156],inverseCoefficients:[-.4410035,.42756155,-.4804439,.5460139,-.58821183,.5733938,-.48303202,.33299083,-.17573841,.0651772,-.01488963,.001559834]}),CardboardV2:new T({id:"CardboardV2",label:"Cardboard I/O 2015",fov:60,interLensDistance:.064,baselineLensDistance:.035,screenLensDistance:.039,distortionCoefficients:[.34,.55],inverseCoefficients:[-.33836704,-.18162185,.862655,-1.2462051,1.0560602,-.58208317,.21609078,-.05444823,
.009177956,-9.904169E-4,6.183535E-5,-1.6981803E-6]})};M.prototype.updateDeviceParams=function(d){this.device=this.determineDevice_(d)||this.device};M.prototype.getDevice=function(){return this.device};M.prototype.setViewer=function(d){this.viewer=d;this.distortion=new H(this.viewer.distortionCoefficients)};M.prototype.determineDevice_=function(d){if(!d){if(fa())return console.warn("Using fallback iOS device measurements."),Ic;console.warn("Using fallback Android device measurements.");return Hc}var r=
.0254/d.xdpi,u=.0254/d.ydpi,A=gb(),J=hb();return new L({widthMeters:r*A,heightMeters:u*J,bevelMeters:.001*d.bevelMm})};M.prototype.getDistortedFieldOfViewLeftEye=function(){var d=this.viewer,r=this.device,u=this.distortion,A=d.screenLensDistance,J=d.interLensDistance/2,D=d.baselineLensDistance-r.bevelMeters,E=r.heightMeters-D;r=Oa*Math.atan(u.distort((r.widthMeters-d.interLensDistance)/2/A));J=Oa*Math.atan(u.distort(J/A));D=Oa*Math.atan(u.distort(D/A));u=Oa*Math.atan(u.distort(E/A));return{leftDegrees:Math.min(r,
d.fov),rightDegrees:Math.min(J,d.fov),downDegrees:Math.min(D,d.fov),upDegrees:Math.min(u,d.fov)}};M.prototype.getLeftEyeVisibleTanAngles=function(){var d=this.viewer,r=this.device,u=this.distortion,A=Math.tan(-Na*d.fov),J=Math.tan(Na*d.fov),D=Math.tan(Na*d.fov),E=Math.tan(-Na*d.fov),S=r.widthMeters/4,V=r.heightMeters/2,U=d.interLensDistance/2-S,Z=-(d.baselineLensDistance-r.bevelMeters-V),ba=d.screenLensDistance;d=u.distort((U-S)/ba);r=u.distort((Z+V)/ba);S=u.distort((U+S)/ba);u=u.distort((Z-V)/ba);
V=new Float32Array(4);V[0]=Math.max(A,d);V[1]=Math.min(J,r);V[2]=Math.min(D,S);V[3]=Math.max(E,u);return V};M.prototype.getLeftEyeNoLensTanAngles=function(){var d=this.viewer,r=this.device,u=this.distortion,A=new Float32Array(4),J=u.distortInverse(Math.tan(-Na*d.fov)),D=u.distortInverse(Math.tan(Na*d.fov)),E=u.distortInverse(Math.tan(Na*d.fov));u=u.distortInverse(Math.tan(-Na*d.fov));var S=r.widthMeters/4,V=r.heightMeters/2,U=d.interLensDistance/2-S;r=-(d.baselineLensDistance-r.bevelMeters-V);d=d.screenLensDistance;
A[0]=Math.max(J,(U-S)/d);A[1]=Math.min(D,(r+V)/d);A[2]=Math.min(E,(U+S)/d);A[3]=Math.max(u,(r-V)/d);return A};M.prototype.getLeftEyeVisibleScreenRect=function(d){var r=this.viewer,u=this.device,A=r.screenLensDistance,J=(u.widthMeters-r.interLensDistance)/2;r=r.baselineLensDistance-u.bevelMeters;var D=(d[0]*A+J)/u.widthMeters,E=(d[3]*A+r)/u.heightMeters;return{x:D,y:E,width:(d[2]*A+J)/u.widthMeters-D,height:(d[1]*A+r)/u.heightMeters-E}};M.prototype.getFieldOfViewLeftEye=function(d){return d?this.getUndistortedFieldOfViewLeftEye():
this.getDistortedFieldOfViewLeftEye()};M.prototype.getFieldOfViewRightEye=function(d){d=this.getFieldOfViewLeftEye(d);return{leftDegrees:d.rightDegrees,rightDegrees:d.leftDegrees,upDegrees:d.upDegrees,downDegrees:d.downDegrees}};M.prototype.getUndistortedFieldOfViewLeftEye=function(){var d=this.getUndistortedParams_();return{leftDegrees:Oa*Math.atan(d.outerDist),rightDegrees:Oa*Math.atan(d.innerDist),downDegrees:Oa*Math.atan(d.bottomDist),upDegrees:Oa*Math.atan(d.topDist)}};M.prototype.getUndistortedViewportLeftEye=
function(){var d=this.getUndistortedParams_(),r=this.device,u=this.viewer.screenLensDistance,A=r.width/(r.widthMeters/u);r=r.height/(r.heightMeters/u);u=Math.round((d.eyePosX-d.outerDist)*A);var J=Math.round((d.eyePosY-d.bottomDist)*r);return{x:u,y:J,width:Math.round((d.eyePosX+d.innerDist)*A)-u,height:Math.round((d.eyePosY+d.topDist)*r)-J}};M.prototype.getUndistortedParams_=function(){var d=this.viewer,r=this.device,u=d.screenLensDistance,A=d.interLensDistance/2/u,J=r.heightMeters/u,D=r.widthMeters/
u/2-A;r=(d.baselineLensDistance-r.bevelMeters)/u;d=this.distortion.distortInverse(Math.tan(Na*d.fov));return{outerDist:Math.min(D,d),innerDist:Math.min(A,d),topDist:Math.min(J-r,d),bottomDist:Math.min(r,d),eyePosX:D,eyePosY:r}};M.Viewers=Kb;var Ac={format:1,last_updated:"2019-11-09T17:36:14Z",devices:[{type:"android",rules:[{mdmh:"asus/*/Nexus 7/*"},{ua:"Nexus 7"}],dpi:[320.8,323],bw:3,ac:500},{type:"android",rules:[{mdmh:"asus/*/ASUS_X00PD/*"},{ua:"ASUS_X00PD"}],dpi:245,bw:3,ac:500},{type:"android",
rules:[{mdmh:"asus/*/ASUS_X008D/*"},{ua:"ASUS_X008D"}],dpi:282,bw:3,ac:500},{type:"android",rules:[{mdmh:"asus/*/ASUS_Z00AD/*"},{ua:"ASUS_Z00AD"}],dpi:[403,404.6],bw:3,ac:1E3},{type:"android",rules:[{mdmh:"Google/*/Pixel 2 XL/*"},{ua:"Pixel 2 XL"}],dpi:537.9,bw:3,ac:1E3},{type:"android",rules:[{mdmh:"Google/*/Pixel 3 XL/*"},{ua:"Pixel 3 XL"}],dpi:[558.5,553.8],bw:3,ac:1E3},{type:"android",rules:[{mdmh:"Google/*/Pixel XL/*"},{ua:"Pixel XL"}],dpi:[537.9,533],bw:3,ac:1E3},{type:"android",rules:[{mdmh:"Google/*/Pixel 3/*"},
{ua:"Pixel 3"}],dpi:442.4,bw:3,ac:1E3},{type:"android",rules:[{mdmh:"Google/*/Pixel 2/*"},{ua:"Pixel 2"}],dpi:441,bw:3,ac:500},{type:"android",rules:[{mdmh:"Google/*/Pixel/*"},{ua:"Pixel"}],dpi:[432.6,436.7],bw:3,ac:1E3},{type:"android",rules:[{mdmh:"HTC/*/HTC6435LVW/*"},{ua:"HTC6435LVW"}],dpi:[449.7,443.3],bw:3,ac:1E3},{type:"android",rules:[{mdmh:"HTC/*/HTC One XL/*"},{ua:"HTC One XL"}],dpi:[315.3,314.6],bw:3,ac:1E3},{type:"android",rules:[{mdmh:"htc/*/Nexus 9/*"},{ua:"Nexus 9"}],dpi:289,bw:3,ac:500},
{type:"android",rules:[{mdmh:"HTC/*/HTC One M9/*"},{ua:"HTC One M9"}],dpi:[442.5,443.3],bw:3,ac:500},{type:"android",rules:[{mdmh:"HTC/*/HTC One_M8/*"},{ua:"HTC One_M8"}],dpi:[449.7,447.4],bw:3,ac:500},{type:"android",rules:[{mdmh:"HTC/*/HTC One/*"},{ua:"HTC One"}],dpi:472.8,bw:3,ac:1E3},{type:"android",rules:[{mdmh:"Huawei/*/Nexus 6P/*"},{ua:"Nexus 6P"}],dpi:[515.1,518],bw:3,ac:1E3},{type:"android",rules:[{mdmh:"Huawei/*/BLN-L24/*"},{ua:"HONORBLN-L24"}],dpi:480,bw:4,ac:500},{type:"android",rules:[{mdmh:"Huawei/*/BKL-L09/*"},
{ua:"BKL-L09"}],dpi:403,bw:3.47,ac:500},{type:"android",rules:[{mdmh:"LENOVO/*/Lenovo PB2-690Y/*"},{ua:"Lenovo PB2-690Y"}],dpi:[457.2,454.713],bw:3,ac:500},{type:"android",rules:[{mdmh:"LGE/*/Nexus 5X/*"},{ua:"Nexus 5X"}],dpi:[422,419.9],bw:3,ac:1E3},{type:"android",rules:[{mdmh:"LGE/*/LGMS345/*"},{ua:"LGMS345"}],dpi:[221.7,219.1],bw:3,ac:500},{type:"android",rules:[{mdmh:"LGE/*/LG-D800/*"},{ua:"LG-D800"}],dpi:[422,424.1],bw:3,ac:500},{type:"android",rules:[{mdmh:"LGE/*/LG-D850/*"},{ua:"LG-D850"}],
dpi:[537.9,541.9],bw:3,ac:500},{type:"android",rules:[{mdmh:"LGE/*/VS985 4G/*"},{ua:"VS985 4G"}],dpi:[537.9,535.6],bw:3,ac:1E3},{type:"android",rules:[{mdmh:"LGE/*/Nexus 5/*"},{ua:"Nexus 5 B"}],dpi:[442.4,444.8],bw:3,ac:1E3},{type:"android",rules:[{mdmh:"LGE/*/Nexus 4/*"},{ua:"Nexus 4"}],dpi:[319.8,318.4],bw:3,ac:1E3},{type:"android",rules:[{mdmh:"LGE/*/LG-P769/*"},{ua:"LG-P769"}],dpi:[240.6,247.5],bw:3,ac:1E3},{type:"android",rules:[{mdmh:"LGE/*/LGMS323/*"},{ua:"LGMS323"}],dpi:[206.6,204.6],bw:3,
ac:1E3},{type:"android",rules:[{mdmh:"LGE/*/LGLS996/*"},{ua:"LGLS996"}],dpi:[403.4,401.5],bw:3,ac:1E3},{type:"android",rules:[{mdmh:"Micromax/*/4560MMX/*"},{ua:"4560MMX"}],dpi:[240,219.4],bw:3,ac:1E3},{type:"android",rules:[{mdmh:"Micromax/*/A250/*"},{ua:"Micromax A250"}],dpi:[480,446.4],bw:3,ac:1E3},{type:"android",rules:[{mdmh:"Micromax/*/Micromax AQ4501/*"},{ua:"Micromax AQ4501"}],dpi:240,bw:3,ac:500},{type:"android",rules:[{mdmh:"motorola/*/G5/*"},{ua:"Moto G (5) Plus"}],dpi:[403.4,403],bw:3,
ac:1E3},{type:"android",rules:[{mdmh:"motorola/*/DROID RAZR/*"},{ua:"DROID RAZR"}],dpi:[368.1,256.7],bw:3,ac:1E3},{type:"android",rules:[{mdmh:"motorola/*/XT830C/*"},{ua:"XT830C"}],dpi:[254,255.9],bw:3,ac:1E3},{type:"android",rules:[{mdmh:"motorola/*/XT1021/*"},{ua:"XT1021"}],dpi:[254,256.7],bw:3,ac:500},{type:"android",rules:[{mdmh:"motorola/*/XT1023/*"},{ua:"XT1023"}],dpi:[254,256.7],bw:3,ac:500},{type:"android",rules:[{mdmh:"motorola/*/XT1028/*"},{ua:"XT1028"}],dpi:[326.6,327.6],bw:3,ac:1E3},{type:"android",
rules:[{mdmh:"motorola/*/XT1034/*"},{ua:"XT1034"}],dpi:[326.6,328.4],bw:3,ac:500},{type:"android",rules:[{mdmh:"motorola/*/XT1053/*"},{ua:"XT1053"}],dpi:[315.3,316.1],bw:3,ac:1E3},{type:"android",rules:[{mdmh:"motorola/*/XT1562/*"},{ua:"XT1562"}],dpi:[403.4,402.7],bw:3,ac:1E3},{type:"android",rules:[{mdmh:"motorola/*/Nexus 6/*"},{ua:"Nexus 6 B"}],dpi:[494.3,489.7],bw:3,ac:1E3},{type:"android",rules:[{mdmh:"motorola/*/XT1063/*"},{ua:"XT1063"}],dpi:[295,296.6],bw:3,ac:1E3},{type:"android",rules:[{mdmh:"motorola/*/XT1064/*"},
{ua:"XT1064"}],dpi:[295,295.6],bw:3,ac:500},{type:"android",rules:[{mdmh:"motorola/*/XT1092/*"},{ua:"XT1092"}],dpi:[422,424.1],bw:3,ac:500},{type:"android",rules:[{mdmh:"motorola/*/XT1095/*"},{ua:"XT1095"}],dpi:[422,423.4],bw:3,ac:1E3},{type:"android",rules:[{mdmh:"motorola/*/G4/*"},{ua:"Moto G (4)"}],dpi:401,bw:4,ac:1E3},{type:"android",rules:[{mdmh:"OnePlus/*/A0001/*"},{ua:"A0001"}],dpi:[403.4,401],bw:3,ac:1E3},{type:"android",rules:[{mdmh:"OnePlus/*/ONE E1001/*"},{ua:"ONE E1001"}],dpi:[442.4,441.4],
bw:3,ac:1E3},{type:"android",rules:[{mdmh:"OnePlus/*/ONE E1003/*"},{ua:"ONE E1003"}],dpi:[442.4,441.4],bw:3,ac:1E3},{type:"android",rules:[{mdmh:"OnePlus/*/ONE E1005/*"},{ua:"ONE E1005"}],dpi:[442.4,441.4],bw:3,ac:1E3},{type:"android",rules:[{mdmh:"OnePlus/*/ONE A2001/*"},{ua:"ONE A2001"}],dpi:[391.9,405.4],bw:3,ac:1E3},{type:"android",rules:[{mdmh:"OnePlus/*/ONE A2003/*"},{ua:"ONE A2003"}],dpi:[391.9,405.4],bw:3,ac:1E3},{type:"android",rules:[{mdmh:"OnePlus/*/ONE A2005/*"},{ua:"ONE A2005"}],dpi:[391.9,
405.4],bw:3,ac:1E3},{type:"android",rules:[{mdmh:"OnePlus/*/ONEPLUS A3000/*"},{ua:"ONEPLUS A3000"}],dpi:401,bw:3,ac:500},{type:"android",rules:[{mdmh:"OnePlus/*/ONEPLUS A3003/*"},{ua:"ONEPLUS A3003"}],dpi:401,bw:3,ac:500},{type:"android",rules:[{mdmh:"OnePlus/*/ONEPLUS A3010/*"},{ua:"ONEPLUS A3010"}],dpi:401,bw:3,ac:500},{type:"android",rules:[{mdmh:"OnePlus/*/ONEPLUS A5000/*"},{ua:"ONEPLUS A5000 "}],dpi:[403.411,399.737],bw:3,ac:1E3},{type:"android",rules:[{mdmh:"OnePlus/*/ONE A5010/*"},{ua:"ONEPLUS A5010"}],
dpi:[403,400],bw:2,ac:1E3},{type:"android",rules:[{mdmh:"OnePlus/*/ONEPLUS A6000/*"},{ua:"ONEPLUS A6000"}],dpi:401,bw:3,ac:500},{type:"android",rules:[{mdmh:"OnePlus/*/ONEPLUS A6003/*"},{ua:"ONEPLUS A6003"}],dpi:401,bw:3,ac:500},{type:"android",rules:[{mdmh:"OnePlus/*/ONEPLUS A6010/*"},{ua:"ONEPLUS A6010"}],dpi:401,bw:2,ac:500},{type:"android",rules:[{mdmh:"OnePlus/*/ONEPLUS A6013/*"},{ua:"ONEPLUS A6013"}],dpi:401,bw:2,ac:500},{type:"android",rules:[{mdmh:"OPPO/*/X909/*"},{ua:"X909"}],dpi:[442.4,
444.1],bw:3,ac:1E3},{type:"android",rules:[{mdmh:"samsung/*/GT-I9082/*"},{ua:"GT-I9082"}],dpi:[184.7,185.4],bw:3,ac:1E3},{type:"android",rules:[{mdmh:"samsung/*/SM-G360P/*"},{ua:"SM-G360P"}],dpi:[196.7,205.4],bw:3,ac:1E3},{type:"android",rules:[{mdmh:"samsung/*/Nexus S/*"},{ua:"Nexus S"}],dpi:[234.5,229.8],bw:3,ac:1E3},{type:"android",rules:[{mdmh:"samsung/*/GT-I9300/*"},{ua:"GT-I9300"}],dpi:[304.8,303.9],bw:5,ac:500},{type:"android",rules:[{mdmh:"samsung/*/SM-T230NU/*"},{ua:"SM-T230NU"}],dpi:216,
bw:3,ac:500},{type:"android",rules:[{mdmh:"samsung/*/SGH-T399/*"},{ua:"SGH-T399"}],dpi:[217.7,231.4],bw:3,ac:1E3},{type:"android",rules:[{mdmh:"samsung/*/SGH-M919/*"},{ua:"SGH-M919"}],dpi:[440.8,437.7],bw:3,ac:1E3},{type:"android",rules:[{mdmh:"samsung/*/SM-N9005/*"},{ua:"SM-N9005"}],dpi:[386.4,387],bw:3,ac:500},{type:"android",rules:[{mdmh:"samsung/*/SAMSUNG-SM-N900A/*"},{ua:"SAMSUNG-SM-N900A"}],dpi:[386.4,387.7],bw:3,ac:1E3},{type:"android",rules:[{mdmh:"samsung/*/GT-I9500/*"},{ua:"GT-I9500"}],
dpi:[442.5,443.3],bw:3,ac:500},{type:"android",rules:[{mdmh:"samsung/*/GT-I9505/*"},{ua:"GT-I9505"}],dpi:439.4,bw:4,ac:1E3},{type:"android",rules:[{mdmh:"samsung/*/SM-G900F/*"},{ua:"SM-G900F"}],dpi:[415.6,431.6],bw:5,ac:1E3},{type:"android",rules:[{mdmh:"samsung/*/SM-G900M/*"},{ua:"SM-G900M"}],dpi:[415.6,431.6],bw:5,ac:1E3},{type:"android",rules:[{mdmh:"samsung/*/SM-G800F/*"},{ua:"SM-G800F"}],dpi:326.8,bw:3,ac:1E3},{type:"android",rules:[{mdmh:"samsung/*/SM-G906S/*"},{ua:"SM-G906S"}],dpi:[562.7,572.4],
bw:3,ac:1E3},{type:"android",rules:[{mdmh:"samsung/*/GT-I9300/*"},{ua:"GT-I9300"}],dpi:[306.7,304.8],bw:5,ac:1E3},{type:"android",rules:[{mdmh:"samsung/*/SM-T535/*"},{ua:"SM-T535"}],dpi:[142.6,136.4],bw:3,ac:500},{type:"android",rules:[{mdmh:"samsung/*/SM-N920C/*"},{ua:"SM-N920C"}],dpi:[515.1,518.4],bw:3,ac:1E3},{type:"android",rules:[{mdmh:"samsung/*/SM-N920P/*"},{ua:"SM-N920P"}],dpi:[386.3655,390.144],bw:3,ac:1E3},{type:"android",rules:[{mdmh:"samsung/*/SM-N920W8/*"},{ua:"SM-N920W8"}],dpi:[515.1,
518.4],bw:3,ac:1E3},{type:"android",rules:[{mdmh:"samsung/*/GT-I9300I/*"},{ua:"GT-I9300I"}],dpi:[304.8,305.8],bw:3,ac:1E3},{type:"android",rules:[{mdmh:"samsung/*/GT-I9195/*"},{ua:"GT-I9195"}],dpi:[249.4,256.7],bw:3,ac:500},{type:"android",rules:[{mdmh:"samsung/*/SPH-L520/*"},{ua:"SPH-L520"}],dpi:[249.4,255.9],bw:3,ac:1E3},{type:"android",rules:[{mdmh:"samsung/*/SAMSUNG-SGH-I717/*"},{ua:"SAMSUNG-SGH-I717"}],dpi:285.8,bw:3,ac:1E3},{type:"android",rules:[{mdmh:"samsung/*/SPH-D710/*"},{ua:"SPH-D710"}],
dpi:[217.7,204.2],bw:3,ac:1E3},{type:"android",rules:[{mdmh:"samsung/*/GT-N7100/*"},{ua:"GT-N7100"}],dpi:265.1,bw:3,ac:1E3},{type:"android",rules:[{mdmh:"samsung/*/SCH-I605/*"},{ua:"SCH-I605"}],dpi:265.1,bw:3,ac:1E3},{type:"android",rules:[{mdmh:"samsung/*/Galaxy Nexus/*"},{ua:"Galaxy Nexus"}],dpi:[315.3,314.2],bw:3,ac:1E3},{type:"android",rules:[{mdmh:"samsung/*/SM-N910H/*"},{ua:"SM-N910H"}],dpi:[515.1,518],bw:3,ac:1E3},{type:"android",rules:[{mdmh:"samsung/*/SM-N910C/*"},{ua:"SM-N910C"}],dpi:[515.2,
520.2],bw:3,ac:500},{type:"android",rules:[{mdmh:"samsung/*/SM-G130M/*"},{ua:"SM-G130M"}],dpi:[165.9,164.8],bw:3,ac:500},{type:"android",rules:[{mdmh:"samsung/*/SM-G928I/*"},{ua:"SM-G928I"}],dpi:[515.1,518.4],bw:3,ac:1E3},{type:"android",rules:[{mdmh:"samsung/*/SM-G920F/*"},{ua:"SM-G920F"}],dpi:580.6,bw:3,ac:500},{type:"android",rules:[{mdmh:"samsung/*/SM-G920P/*"},{ua:"SM-G920P"}],dpi:[522.5,577],bw:3,ac:1E3},{type:"android",rules:[{mdmh:"samsung/*/SM-G925F/*"},{ua:"SM-G925F"}],dpi:580.6,bw:3,ac:500},
{type:"android",rules:[{mdmh:"samsung/*/SM-G925V/*"},{ua:"SM-G925V"}],dpi:[522.5,576.6],bw:3,ac:1E3},{type:"android",rules:[{mdmh:"samsung/*/SM-G930F/*"},{ua:"SM-G930F"}],dpi:576.6,bw:3,ac:1E3},{type:"android",rules:[{mdmh:"samsung/*/SM-G935F/*"},{ua:"SM-G935F"}],dpi:533,bw:3,ac:500},{type:"android",rules:[{mdmh:"samsung/*/SM-G950F/*"},{ua:"SM-G950F"}],dpi:[562.707,565.293],bw:3,ac:500},{type:"android",rules:[{mdmh:"samsung/*/SM-G955U/*"},{ua:"SM-G955U"}],dpi:[522.514,525.762],bw:3,ac:500},{type:"android",
rules:[{mdmh:"samsung/*/SM-G955F/*"},{ua:"SM-G955F"}],dpi:[522.514,525.762],bw:3,ac:500},{type:"android",rules:[{mdmh:"samsung/*/SM-G960F/*"},{ua:"SM-G960F"}],dpi:[569.575,571.5],bw:3,ac:1E3},{type:"android",rules:[{mdmh:"samsung/*/SM-G9600/*"},{ua:"SM-G9600"}],dpi:[569.575,571.5],bw:3,ac:1E3},{type:"android",rules:[{mdmh:"samsung/*/SM-G960T/*"},{ua:"SM-G960T"}],dpi:[569.575,571.5],bw:3,ac:1E3},{type:"android",rules:[{mdmh:"samsung/*/SM-G960N/*"},{ua:"SM-G960N"}],dpi:[569.575,571.5],bw:3,ac:1E3},
{type:"android",rules:[{mdmh:"samsung/*/SM-G960U/*"},{ua:"SM-G960U"}],dpi:[569.575,571.5],bw:3,ac:1E3},{type:"android",rules:[{mdmh:"samsung/*/SM-G9608/*"},{ua:"SM-G9608"}],dpi:[569.575,571.5],bw:3,ac:1E3},{type:"android",rules:[{mdmh:"samsung/*/SM-G960FD/*"},{ua:"SM-G960FD"}],dpi:[569.575,571.5],bw:3,ac:1E3},{type:"android",rules:[{mdmh:"samsung/*/SM-G960W/*"},{ua:"SM-G960W"}],dpi:[569.575,571.5],bw:3,ac:1E3},{type:"android",rules:[{mdmh:"samsung/*/SM-G965F/*"},{ua:"SM-G965F"}],dpi:529,bw:2,ac:1E3},
{type:"android",rules:[{mdmh:"Sony/*/C6903/*"},{ua:"C6903"}],dpi:[442.5,443.3],bw:3,ac:500},{type:"android",rules:[{mdmh:"Sony/*/D6653/*"},{ua:"D6653"}],dpi:[428.6,427.6],bw:3,ac:1E3},{type:"android",rules:[{mdmh:"Sony/*/E6653/*"},{ua:"E6653"}],dpi:[428.6,425.7],bw:3,ac:1E3},{type:"android",rules:[{mdmh:"Sony/*/E6853/*"},{ua:"E6853"}],dpi:[403.4,401.9],bw:3,ac:1E3},{type:"android",rules:[{mdmh:"Sony/*/SGP321/*"},{ua:"SGP321"}],dpi:[224.7,224.1],bw:3,ac:500},{type:"android",rules:[{mdmh:"TCT/*/ALCATEL ONE TOUCH Fierce/*"},
{ua:"ALCATEL ONE TOUCH Fierce"}],dpi:[240,247.5],bw:3,ac:1E3},{type:"android",rules:[{mdmh:"THL/*/thl 5000/*"},{ua:"thl 5000"}],dpi:[480,443.3],bw:3,ac:1E3},{type:"android",rules:[{mdmh:"Fly/*/IQ4412/*"},{ua:"IQ4412"}],dpi:307.9,bw:3,ac:1E3},{type:"android",rules:[{mdmh:"ZTE/*/ZTE Blade L2/*"},{ua:"ZTE Blade L2"}],dpi:240,bw:3,ac:500},{type:"android",rules:[{mdmh:"BENEVE/*/VR518/*"},{ua:"VR518"}],dpi:480,bw:3,ac:500},{type:"ios",rules:[{res:[640,960]}],dpi:[325.1,328.4],bw:4,ac:1E3},{type:"ios",rules:[{res:[640,
1136]}],dpi:[317.1,320.2],bw:3,ac:1E3},{type:"ios",rules:[{res:[750,1334]}],dpi:326.4,bw:4,ac:1E3},{type:"ios",rules:[{res:[1242,2208]}],dpi:[453.6,458.4],bw:4,ac:1E3},{type:"ios",rules:[{res:[1125,2001]}],dpi:[410.9,415.4],bw:4,ac:1E3},{type:"ios",rules:[{res:[1125,2436]}],dpi:458,bw:4,ac:1E3},{type:"android",rules:[{mdmh:"Huawei/*/EML-L29/*"},{ua:"EML-L29"}],dpi:428,bw:3.45,ac:500},{type:"android",rules:[{mdmh:"Nokia/*/Nokia 7.1/*"},{ua:"Nokia 7.1"}],dpi:[432,431.9],bw:3,ac:500},{type:"ios",rules:[{res:[1242,
2688]}],dpi:458,bw:4,ac:1E3},{type:"android",rules:[{mdmh:"samsung/*/SM-G570M/*"},{ua:"SM-G570M"}],dpi:320,bw:3.684,ac:1E3},{type:"android",rules:[{mdmh:"samsung/*/SM-G970F/*"},{ua:"SM-G970F"}],dpi:438,bw:2.281,ac:500},{type:"android",rules:[{mdmh:"samsung/*/SM-G973F/*"},{ua:"SM-G973F"}],dpi:550,bw:2.002,ac:500},{type:"android",rules:[{mdmh:"samsung/*/SM-G975F/*"},{ua:"SM-G975F"}],dpi:522,bw:2.054,ac:500},{type:"android",rules:[{mdmh:"samsung/*/SM-G977F/*"},{ua:"SM-G977F"}],dpi:505,bw:2.334,ac:500},
{type:"ios",rules:[{res:[828,1792]}],dpi:326,bw:5,ac:500}]};ca.prototype.getDeviceParams=function(){return this.deviceParams};ca.prototype.recalculateDeviceParams_=function(){var d=this.calcDeviceParams_();if(d){if(this.deviceParams=d,this.onDeviceParamsUpdated)this.onDeviceParamsUpdated(this.deviceParams)}else console.error("Failed to recalculate device parameters.")};ca.prototype.calcDeviceParams_=function(){var d=this.dpdb;if(!d)return console.error("DPDB not available."),null;if(1!=d.format)return console.error("DPDB has unexpected format version."),
null;if(!d.devices||!d.devices.length)return console.error("DPDB does not have a devices section."),null;var r=navigator.userAgent||navigator.vendor||window.opera,u=gb(),A=hb();if(!d.devices)return console.error("DPDB has no devices section."),null;for(var J=0;J<d.devices.length;J++){var D=d.devices[J];if(!D.rules)console.warn("Device["+J+"] has no rules section.");else if("ios"!=D.type&&"android"!=D.type)console.warn("Device["+J+"] has invalid type.");else if(fa()==("ios"==D.type)){for(var E=!1,
S=0;S<D.rules.length;S++)if(this.ruleMatches_(D.rules[S],r,u,A)){E=!0;break}if(E)return new ma({xdpi:D.dpi[0]||D.dpi,ydpi:D.dpi[1]||D.dpi,bevelMm:D.bw})}}console.warn("No DPDB device match.");return null};ca.prototype.ruleMatches_=function(d,r,u,A){if(!d.ua&&!d.res)return!1;d.ua&&"SM"===d.ua.substring(0,2)&&(d.ua=d.ua.substring(0,7));if(d.ua&&0>r.indexOf(d.ua))return!1;if(d.res){if(!d.res[0]||!d.res[1])return!1;r=d.res[0];d=d.res[1];if(Math.min(u,A)!=Math.min(r,d)||Math.max(u,A)!=Math.max(r,d))return!1}return!0};
na.prototype.set=function(d,r){this.sample=d;this.timestampS=r};na.prototype.copy=function(d){this.set(d.sample,d.timestampS)};ta.prototype.addAccelMeasurement=function(d,r){this.currentAccelMeasurement.set(d,r)};ta.prototype.addGyroMeasurement=function(d,r){this.currentGyroMeasurement.set(d,r);d=r-this.previousGyroMeasurement.timestampS;isNaN(d)||.001>=d||1<d||this.run_();this.previousGyroMeasurement.copy(this.currentGyroMeasurement)};ta.prototype.run_=function(){if(this.isOrientationInitialized){var d=
this.gyroToQuaternionDelta_(this.currentGyroMeasurement.sample,this.currentGyroMeasurement.timestampS-this.previousGyroMeasurement.timestampS);this.gyroIntegralQ.multiply(d);this.filterQ.copy(this.previousFilterQ);this.filterQ.multiply(d);d=new oa;d.copy(this.filterQ);d.inverse();this.estimatedGravity.set(0,0,-1);this.estimatedGravity.applyQuaternion(d);this.estimatedGravity.normalize();this.measuredGravity.copy(this.currentAccelMeasurement.sample);this.measuredGravity.normalize();d=new oa;d.setFromUnitVectors(this.estimatedGravity,
this.measuredGravity);d.inverse();if(this.isDebug){var r=console,u=r.log;if(1<d.w){console.warn("getQuaternionAngle: w > 1");var A=0}else A=2*Math.acos(d.w);u.call(r,"Delta: %d deg, G_est: (%s, %s, %s), G_meas: (%s, %s, %s)",Oa*A,this.estimatedGravity.x.toFixed(1),this.estimatedGravity.y.toFixed(1),this.estimatedGravity.z.toFixed(1),this.measuredGravity.x.toFixed(1),this.measuredGravity.y.toFixed(1),this.measuredGravity.z.toFixed(1))}r=new oa;r.copy(this.filterQ);r.multiply(d);this.filterQ.slerp(r,
1-this.kFilter);this.previousFilterQ.copy(this.filterQ)}else this.accelQ=this.accelToQuaternion_(this.currentAccelMeasurement.sample),this.previousFilterQ.copy(this.accelQ),this.isOrientationInitialized=!0};ta.prototype.getOrientation=function(){return this.filterQ};ta.prototype.accelToQuaternion_=function(d){var r=new Aa;r.copy(d);r.normalize();d=new oa;d.setFromUnitVectors(new Aa(0,0,-1),r);d.inverse();return d};ta.prototype.gyroToQuaternionDelta_=function(d,r){var u=new oa,A=new Aa;A.copy(d);A.normalize();
u.setFromAxisAngle(A,d.length()*r);return u};ua.prototype.getPrediction=function(d,r,u){if(!this.previousTimestampS)return this.previousQ.copy(d),this.previousTimestampS=u,d;var A=new Aa;A.copy(r);A.normalize();r=r.length();if(r<20*Na)return this.isDebug&&console.log("Moving slowly, at %s deg/s: no prediction",(Oa*r).toFixed(1)),this.outQ.copy(d),this.previousQ.copy(d),this.outQ;this.deltaQ.setFromAxisAngle(A,r*this.predictionTimeS);this.outQ.copy(this.previousQ);this.outQ.multiply(this.deltaQ);this.previousQ.copy(d);
this.previousTimestampS=u;return this.outQ};wa.prototype.getPosition=function(){return null};wa.prototype.getOrientation=function(){var d=void 0;if(this.isWithoutDeviceMotion&&this._deviceOrientationQ){this.deviceOrientationFixQ=this.deviceOrientationFixQ||function(){var u=(new oa).setFromAxisAngle(new Aa(0,0,-1),0),A=new oa;-90===window.orientation?A.setFromAxisAngle(new Aa(0,1,0),Math.PI/-2):A.setFromAxisAngle(new Aa(0,1,0),Math.PI/2);return u.multiply(A)}();this.deviceOrientationFilterToWorldQ=
this.deviceOrientationFilterToWorldQ||function(){var u=new oa;u.setFromAxisAngle(new Aa(1,0,0),-Math.PI/2);return u}();d=this._deviceOrientationQ;var r=new oa;r.copy(d);r.multiply(this.deviceOrientationFilterToWorldQ);r.multiply(this.resetQ);r.multiply(this.worldToScreenQ);r.multiplyQuaternions(this.deviceOrientationFixQ,r);this.yawOnly&&(r.x=0,r.z=0,r.normalize());this.orientationOut_[0]=r.x;this.orientationOut_[1]=r.y;this.orientationOut_[2]=r.z;this.orientationOut_[3]=r.w;return this.orientationOut_}d=
this.filter.getOrientation();d=this.posePredictor.getPrediction(d,this.gyroscope,this.previousTimestampS);r=new oa;r.copy(this.filterToWorldQ);r.multiply(this.resetQ);r.multiply(d);r.multiply(this.worldToScreenQ);this.yawOnly&&(r.x=0,r.z=0,r.normalize());this.orientationOut_[0]=r.x;this.orientationOut_[1]=r.y;this.orientationOut_[2]=r.z;this.orientationOut_[3]=r.w;return this.orientationOut_};wa.prototype.resetPose=function(){this.resetQ.copy(this.filter.getOrientation());this.resetQ.x=0;this.resetQ.y=
0;this.resetQ.z*=-1;this.resetQ.normalize();va()&&this.resetQ.multiply(this.inverseWorldToScreenQ);this.resetQ.multiply(this.originalPoseAdjustQ)};wa.prototype.onDeviceOrientation_=function(d){this._deviceOrientationQ=this._deviceOrientationQ||new oa;var r=d.alpha,u=d.beta;d=d.gamma;r=(r||0)*Math.PI/180;u=(u||0)*Math.PI/180;d=(d||0)*Math.PI/180;this._deviceOrientationQ.setFromEulerYXZ(u,r,-d)};wa.prototype.onDeviceMotion_=function(d){this.updateDeviceMotion_(d)};wa.prototype.updateDeviceMotion_=function(d){var r=
d.accelerationIncludingGravity,u=d.rotationRate;d=d.timeStamp/1E3;var A=d-this.previousTimestampS;0>A?Nb("fusion-pose-sensor:invalid:non-monotonic","Invalid timestamps detected: non-monotonic timestamp from devicemotion"):.001>=A||1<A?Nb("fusion-pose-sensor:invalid:outside-threshold","Invalid timestamps detected: Timestamp from devicemotion outside expected range."):(this.accelerometer.set(-r.x,-r.y,-r.z),u&&(Ua()?this.gyroscope.set(-u.beta,u.alpha,u.gamma):this.gyroscope.set(u.alpha,u.beta,u.gamma),
this.isDeviceMotionInRadians||this.gyroscope.multiplyScalar(Math.PI/180),this.filter.addGyroMeasurement(this.gyroscope,d)),this.filter.addAccelMeasurement(this.accelerometer,d));this.previousTimestampS=d};wa.prototype.onOrientationChange_=function(d){this.setScreenTransform_()};wa.prototype.onMessage_=function(d){(d=d.data)&&d.type&&"devicemotion"===d.type.toLowerCase()&&this.updateDeviceMotion_(d.deviceMotionEvent)};wa.prototype.setScreenTransform_=function(){this.worldToScreenQ.set(0,0,0,1);switch(window.orientation){case 90:this.worldToScreenQ.setFromAxisAngle(new Aa(0,
0,1),-Math.PI/2);break;case -90:this.worldToScreenQ.setFromAxisAngle(new Aa(0,0,1),Math.PI/2)}this.inverseWorldToScreenQ.copy(this.worldToScreenQ);this.inverseWorldToScreenQ.inverse()};wa.prototype.start=function(){this.onDeviceMotionCallback_=this.onDeviceMotion_.bind(this);this.onOrientationChangeCallback_=this.onOrientationChange_.bind(this);this.onMessageCallback_=this.onMessage_.bind(this);this.onDeviceOrientationCallback_=this.onDeviceOrientation_.bind(this);var d;if(d=fa()){d=window.self!==
window.top;var r=hc(document.referrer),u=hc(window.location.href);d=d&&r!==u}d&&window.addEventListener("message",this.onMessageCallback_);window.addEventListener("orientationchange",this.onOrientationChangeCallback_);this.isWithoutDeviceMotion?window.addEventListener("deviceorientation",this.onDeviceOrientationCallback_):window.addEventListener("devicemotion",this.onDeviceMotionCallback_)};wa.prototype.stop=function(){window.removeEventListener("devicemotion",this.onDeviceMotionCallback_);window.removeEventListener("deviceorientation",
this.onDeviceOrientationCallback_);window.removeEventListener("orientationchange",this.onOrientationChangeCallback_);window.removeEventListener("message",this.onMessageCallback_)};var Jc=new Aa(1,0,0),Kc=new Aa(0,0,1),Ob=new oa;Ob.setFromAxisAngle(Jc,-Math.PI/2);Ob.multiply((new oa).setFromAxisAngle(Kc,Math.PI/2));var Ec=function(){function d(r){if(!(this instanceof d))throw new TypeError("Cannot call a class as a function");this.config=r;this.fusionSensor=this.sensor=null;this._out=new Float32Array(4);
this.api=null;this.errors=[];this._sensorQ=new oa;this._outQ=new oa;this._onSensorRead=this._onSensorRead.bind(this);this._onSensorError=this._onSensorError.bind(this);this.init()}ra(d,[{key:"init",value:function(){var r=null;try{r=new RelativeOrientationSensor({frequency:60,referenceFrame:"screen"}),r.addEventListener("error",this._onSensorError)}catch(u){this.errors.push(u),"SecurityError"===u.name?(console.error("Cannot construct sensors due to the Feature Policy"),console.warn('Attempting to fall back using "devicemotion"; however this will fail in the future without correct permissions.'),
this.useDeviceMotion()):"ReferenceError"===u.name?this.useDeviceMotion():console.error(u)}r&&(this.api="sensor",this.sensor=r,this.sensor.addEventListener("reading",this._onSensorRead),this.sensor.start())}},{key:"useDeviceMotion",value:function(){this.api="devicemotion";this.fusionSensor=new wa(this.config.K_FILTER,this.config.PREDICTION_TIME_S,this.config.YAW_ONLY,this.config.DEBUG);this.sensor&&(this.sensor.removeEventListener("reading",this._onSensorRead),this.sensor.removeEventListener("error",
this._onSensorError),this.sensor=null)}},{key:"getOrientation",value:function(){if(this.fusionSensor)return this.fusionSensor.getOrientation();if(!this.sensor||!this.sensor.quaternion)return this._out[0]=this._out[1]=this._out[2]=0,this._out[3]=1,this._out;var r=this.sensor.quaternion;this._sensorQ.set(r[0],r[1],r[2],r[3]);r=this._outQ;r.copy(Ob);r.multiply(this._sensorQ);this.config.YAW_ONLY&&(r.x=r.z=0,r.normalize());this._out[0]=r.x;this._out[1]=r.y;this._out[2]=r.z;this._out[3]=r.w;return this._out}},
{key:"_onSensorError",value:function(r){this.errors.push(r.error);"NotAllowedError"===r.error.name?console.error("Permission to access sensor was denied"):"NotReadableError"===r.error.name?console.error("Sensor could not be read"):console.error(r.error);this.useDeviceMotion()}},{key:"_onSensorRead",value:function(){}}]);return d}();Da.prototype.show=function(d){d||this.overlay.parentElement?d&&(this.overlay.parentElement&&this.overlay.parentElement!=d&&this.overlay.parentElement.removeChild(this.overlay),
d.appendChild(this.overlay)):document.body.appendChild(this.overlay);this.overlay.style.display="block";d=this.overlay.querySelector("img").style;va()?(d.width="20%",d.marginLeft="40%",d.marginTop="3%"):(d.width="50%",d.marginLeft="25%",d.marginTop="25%")};Da.prototype.hide=function(){this.overlay.style.display="none"};Da.prototype.showTemporarily=function(d,r){this.show(r);this.timer=setTimeout(this.hide.bind(this),d)};Da.prototype.disableShowTemporarily=function(){clearTimeout(this.timer)};Da.prototype.update=
function(){this.disableShowTemporarily();!va()&&Lb()?this.show():this.hide()};Da.prototype.loadIcon_=function(){this.icon="data:image/svg+xml,"+encodeURIComponent("<svg width='198' height='240' viewBox='0 0 198 240' xmlns='http://www.w3.org/2000/svg'><g fill='none' fill-rule='evenodd'><path d='M149.625 109.527l6.737 3.891v.886c0 .177.013.36.038.549.01.081.02.162.027.242.14 1.415.974 2.998 2.105 3.999l5.72 5.062.081-.09s4.382-2.53 5.235-3.024l25.97 14.993v54.001c0 .771-.386 1.217-.948 1.217-.233 0-.495-.076-.772-.236l-23.967-13.838-.014.024-27.322 15.775-.85-1.323c-4.731-1.529-9.748-2.74-14.951-3.61a.27.27 0 0 0-.007.024l-5.067 16.961-7.891 4.556-.037-.063v27.59c0 .772-.386 1.217-.948 1.217-.232 0-.495-.076-.772-.236l-42.473-24.522c-.95-.549-1.72-1.877-1.72-2.967v-1.035l-.021.047a5.111 5.111 0 0 0-1.816-.399 5.682 5.682 0 0 0-.546.001 13.724 13.724 0 0 1-1.918-.041c-1.655-.153-3.2-.6-4.404-1.296l-46.576-26.89.005.012-10.278-18.75c-1.001-1.827-.241-4.216 1.698-5.336l56.011-32.345a4.194 4.194 0 0 1 2.099-.572c1.326 0 2.572.659 3.227 1.853l.005-.003.227.413-.006.004a9.63 9.63 0 0 0 1.477 2.018l.277.27c1.914 1.85 4.468 2.801 7.113 2.801 1.949 0 3.948-.517 5.775-1.572.013 0 7.319-4.219 7.319-4.219a4.194 4.194 0 0 1 2.099-.572c1.326 0 2.572.658 3.226 1.853l3.25 5.928.022-.018 6.785 3.917-.105-.182 46.881-26.965m0-1.635c-.282 0-.563.073-.815.218l-46.169 26.556-5.41-3.124-3.005-5.481c-.913-1.667-2.699-2.702-4.66-2.703-1.011 0-2.02.274-2.917.792a3825 3825 0 0 1-7.275 4.195l-.044.024a9.937 9.937 0 0 1-4.957 1.353c-2.292 0-4.414-.832-5.976-2.342l-.252-.245a7.992 7.992 0 0 1-1.139-1.534 1.379 1.379 0 0 0-.06-.122l-.227-.414a1.718 1.718 0 0 0-.095-.154c-.938-1.574-2.673-2.545-4.571-2.545-1.011 0-2.02.274-2.917.792L3.125 155.502c-2.699 1.559-3.738 4.94-2.314 7.538l10.278 18.75c.177.323.448.563.761.704l46.426 26.804c1.403.81 3.157 1.332 5.072 1.508a15.661 15.661 0 0 0 2.146.046 4.766 4.766 0 0 1 .396 0c.096.004.19.011.283.022.109 1.593 1.159 3.323 2.529 4.114l42.472 24.522c.524.302 1.058.455 1.59.455 1.497 0 2.583-1.2 2.583-2.852v-26.562l7.111-4.105a1.64 1.64 0 0 0 .749-.948l4.658-15.593c4.414.797 8.692 1.848 12.742 3.128l.533.829a1.634 1.634 0 0 0 2.193.531l26.532-15.317L193 192.433c.523.302 1.058.455 1.59.455 1.497 0 2.583-1.199 2.583-2.852v-54.001c0-.584-.312-1.124-.818-1.416l-25.97-14.993a1.633 1.633 0 0 0-1.636.001c-.606.351-2.993 1.73-4.325 2.498l-4.809-4.255c-.819-.725-1.461-1.933-1.561-2.936a7.776 7.776 0 0 0-.033-.294 2.487 2.487 0 0 1-.023-.336v-.886c0-.584-.312-1.123-.817-1.416l-6.739-3.891a1.633 1.633 0 0 0-.817-.219' fill='#455A64'/><path d='M96.027 132.636l46.576 26.891c1.204.695 1.979 1.587 2.242 2.541l-.01.007-81.374 46.982h-.001c-1.654-.152-3.199-.6-4.403-1.295l-46.576-26.891 83.546-48.235' fill='#FAFAFA'/><path d='M63.461 209.174c-.008 0-.015 0-.022-.002-1.693-.156-3.228-.609-4.441-1.309l-46.576-26.89a.118.118 0 0 1 0-.203l83.546-48.235a.117.117 0 0 1 .117 0l46.576 26.891c1.227.708 2.021 1.612 2.296 2.611a.116.116 0 0 1-.042.124l-.021.016-81.375 46.981a.11.11 0 0 1-.058.016zm-50.747-28.303l46.401 26.79c1.178.68 2.671 1.121 4.32 1.276l81.272-46.922c-.279-.907-1.025-1.73-2.163-2.387l-46.517-26.857-83.313 48.1z' fill='#607D8B'/><path d='M148.327 165.471a5.85 5.85 0 0 1-.546.001c-1.894-.083-3.302-1.038-3.145-2.132a2.693 2.693 0 0 0-.072-1.105l-81.103 46.822c.628.058 1.272.073 1.918.042.182-.009.364-.009.546-.001 1.894.083 3.302 1.038 3.145 2.132l79.257-45.759' fill='#FFF'/><path d='M69.07 211.347a.118.118 0 0 1-.115-.134c.045-.317-.057-.637-.297-.925-.505-.61-1.555-1.022-2.738-1.074a5.966 5.966 0 0 0-.535.001 14.03 14.03 0 0 1-1.935-.041.117.117 0 0 1-.103-.092.116.116 0 0 1 .055-.126l81.104-46.822a.117.117 0 0 1 .171.07c.104.381.129.768.074 1.153-.045.316.057.637.296.925.506.61 1.555 1.021 2.739 1.073.178.008.357.008.535-.001a.117.117 0 0 1 .064.218l-79.256 45.759a.114.114 0 0 1-.059.016zm-3.405-2.372c.089 0 .177.002.265.006 1.266.056 2.353.488 2.908 1.158.227.274.35.575.36.882l78.685-45.429c-.036 0-.072-.001-.107-.003-1.267-.056-2.354-.489-2.909-1.158-.282-.34-.402-.724-.347-1.107a2.604 2.604 0 0 0-.032-.91L63.846 208.97a13.91 13.91 0 0 0 1.528.012c.097-.005.194-.007.291-.007z' fill='#607D8B'/><path d='M2.208 162.134c-1.001-1.827-.241-4.217 1.698-5.337l56.011-32.344c1.939-1.12 4.324-.546 5.326 1.281l.232.41a9.344 9.344 0 0 0 1.47 2.021l.278.27c3.325 3.214 8.583 3.716 12.888 1.23l7.319-4.22c1.94-1.119 4.324-.546 5.325 1.282l3.25 5.928-83.519 48.229-10.278-18.75z' fill='#FAFAFA'/><path d='M12.486 181.001a.112.112 0 0 1-.031-.005.114.114 0 0 1-.071-.056L2.106 162.19c-1.031-1.88-.249-4.345 1.742-5.494l56.01-32.344a4.328 4.328 0 0 1 2.158-.588c1.415 0 2.65.702 3.311 1.882.01.008.018.017.024.028l.227.414a.122.122 0 0 1 .013.038 9.508 9.508 0 0 0 1.439 1.959l.275.266c1.846 1.786 4.344 2.769 7.031 2.769 1.977 0 3.954-.538 5.717-1.557a.148.148 0 0 1 .035-.013l7.284-4.206a4.321 4.321 0 0 1 2.157-.588c1.427 0 2.672.716 3.329 1.914l3.249 5.929a.116.116 0 0 1-.044.157l-83.518 48.229a.116.116 0 0 1-.059.016zm49.53-57.004c-.704 0-1.41.193-2.041.557l-56.01 32.345c-1.882 1.086-2.624 3.409-1.655 5.179l10.221 18.645 83.317-48.112-3.195-5.829c-.615-1.122-1.783-1.792-3.124-1.792a4.08 4.08 0 0 0-2.04.557l-7.317 4.225a.148.148 0 0 1-.035.013 11.7 11.7 0 0 1-5.801 1.569c-2.748 0-5.303-1.007-7.194-2.835l-.278-.27a9.716 9.716 0 0 1-1.497-2.046.096.096 0 0 1-.013-.037l-.191-.347a.11.11 0 0 1-.023-.029c-.615-1.123-1.783-1.793-3.124-1.793z' fill='#607D8B'/><path d='M42.434 155.808c-2.51-.001-4.697-1.258-5.852-3.365-1.811-3.304-.438-7.634 3.059-9.654l12.291-7.098a7.599 7.599 0 0 1 3.789-1.033c2.51 0 4.697 1.258 5.852 3.365 1.811 3.304.439 7.634-3.059 9.654l-12.291 7.098a7.606 7.606 0 0 1-3.789 1.033zm13.287-20.683a7.128 7.128 0 0 0-3.555.971l-12.291 7.098c-3.279 1.893-4.573 5.942-2.883 9.024 1.071 1.955 3.106 3.122 5.442 3.122a7.13 7.13 0 0 0 3.556-.97l12.291-7.098c3.279-1.893 4.572-5.942 2.883-9.024-1.072-1.955-3.106-3.123-5.443-3.123z' fill='#607D8B'/><path d='M149.588 109.407l6.737 3.89v.887c0 .176.013.36.037.549.011.081.02.161.028.242.14 1.415.973 2.998 2.105 3.999l7.396 6.545c.177.156.358.295.541.415 1.579 1.04 2.95.466 3.062-1.282.049-.784.057-1.595.023-2.429l-.003-.16v-1.151l25.987 15.003v54c0 1.09-.77 1.53-1.72.982l-42.473-24.523c-.95-.548-1.72-1.877-1.72-2.966v-34.033' fill='#FAFAFA'/><path d='M194.553 191.25c-.257 0-.54-.085-.831-.253l-42.472-24.521c-.981-.567-1.779-1.943-1.779-3.068v-34.033h.234v34.033c0 1.051.745 2.336 1.661 2.866l42.473 24.521c.424.245.816.288 1.103.122.285-.164.442-.52.442-1.002v-53.933l-25.753-14.868.003 1.106c.034.832.026 1.654-.024 2.439-.054.844-.396 1.464-.963 1.746-.619.309-1.45.173-2.28-.373a5.023 5.023 0 0 1-.553-.426l-7.397-6.544c-1.158-1.026-1.999-2.625-2.143-4.076a9.624 9.624 0 0 0-.027-.238 4.241 4.241 0 0 1-.038-.564v-.82l-6.68-3.856.117-.202 6.738 3.89.058.034v.954c0 .171.012.351.036.533.011.083.021.165.029.246.138 1.395.948 2.935 2.065 3.923l7.397 6.545c.173.153.35.289.527.406.758.499 1.504.63 2.047.359.49-.243.786-.795.834-1.551.05-.778.057-1.591.024-2.417l-.004-.163v-1.355l.175.1 25.987 15.004.059.033v54.068c0 .569-.198.996-.559 1.204a1.002 1.002 0 0 1-.506.131' fill='#607D8B'/><path d='M145.685 163.161l24.115 13.922-25.978 14.998-1.462-.307c-6.534-2.17-13.628-3.728-21.019-4.616-4.365-.524-8.663 1.096-9.598 3.62a2.746 2.746 0 0 0-.011 1.928c1.538 4.267 4.236 8.363 7.995 12.135l.532.845-25.977 14.997-24.115-13.922 75.518-43.6' fill='#FFF'/><path d='M94.282 220.818l-.059-.033-24.29-14.024.175-.101 75.577-43.634.058.033 24.29 14.024-26.191 15.122-.045-.01-1.461-.307c-6.549-2.174-13.613-3.725-21.009-4.614a13.744 13.744 0 0 0-1.638-.097c-3.758 0-7.054 1.531-7.837 3.642a2.62 2.62 0 0 0-.01 1.848c1.535 4.258 4.216 8.326 7.968 12.091l.016.021.526.835.006.01.064.102-.105.061-25.977 14.998-.058.033zm-23.881-14.057l23.881 13.788 24.802-14.32c.546-.315.846-.489 1.017-.575l-.466-.74c-3.771-3.787-6.467-7.881-8.013-12.168a2.851 2.851 0 0 1 .011-2.008c.815-2.199 4.203-3.795 8.056-3.795.557 0 1.117.033 1.666.099 7.412.891 14.491 2.445 21.041 4.621.836.175 1.215.254 1.39.304l25.78-14.884-23.881-13.788-75.284 43.466z' fill='#607D8B'/><path d='M167.23 125.979v50.871l-27.321 15.773-6.461-14.167c-.91-1.996-3.428-1.738-5.624.574a10.238 10.238 0 0 0-2.33 4.018l-6.46 21.628-27.322 15.774v-50.871l75.518-43.6' fill='#FFF'/><path d='M91.712 220.567a.127.127 0 0 1-.059-.016.118.118 0 0 1-.058-.101v-50.871c0-.042.023-.08.058-.101l75.519-43.6a.117.117 0 0 1 .175.101v50.871c0 .041-.023.08-.059.1l-27.321 15.775a.118.118 0 0 1-.094.01.12.12 0 0 1-.071-.063l-6.46-14.168c-.375-.822-1.062-1.275-1.934-1.275-1.089 0-2.364.686-3.5 1.881a10.206 10.206 0 0 0-2.302 3.972l-6.46 21.627a.118.118 0 0 1-.054.068L91.77 220.551a.12.12 0 0 1-.058.016zm.117-50.92v50.601l27.106-15.65 6.447-21.583a10.286 10.286 0 0 1 2.357-4.065c1.18-1.242 2.517-1.954 3.669-1.954.969 0 1.731.501 2.146 1.411l6.407 14.051 27.152-15.676v-50.601l-75.284 43.466z' fill='#607D8B'/><path d='M168.543 126.213v50.87l-27.322 15.774-6.46-14.168c-.91-1.995-3.428-1.738-5.624.574a10.248 10.248 0 0 0-2.33 4.019l-6.461 21.627-27.321 15.774v-50.87l75.518-43.6' fill='#FFF'/><path d='M93.025 220.8a.123.123 0 0 1-.059-.015.12.12 0 0 1-.058-.101v-50.871c0-.042.023-.08.058-.101l75.518-43.6a.112.112 0 0 1 .117 0c.036.02.059.059.059.1v50.871a.116.116 0 0 1-.059.101l-27.321 15.774a.111.111 0 0 1-.094.01.115.115 0 0 1-.071-.062l-6.46-14.168c-.375-.823-1.062-1.275-1.935-1.275-1.088 0-2.363.685-3.499 1.881a10.19 10.19 0 0 0-2.302 3.971l-6.461 21.628a.108.108 0 0 1-.053.067l-27.322 15.775a.12.12 0 0 1-.058.015zm.117-50.919v50.6l27.106-15.649 6.447-21.584a10.293 10.293 0 0 1 2.357-4.065c1.179-1.241 2.516-1.954 3.668-1.954.969 0 1.732.502 2.147 1.412l6.407 14.051 27.152-15.676v-50.601l-75.284 43.466z' fill='#607D8B'/><path d='M169.8 177.083l-27.322 15.774-6.46-14.168c-.91-1.995-3.428-1.738-5.625.574a10.246 10.246 0 0 0-2.329 4.019l-6.461 21.627-27.321 15.774v-50.87l75.518-43.6v50.87z' fill='#FAFAFA'/><path d='M94.282 220.917a.234.234 0 0 1-.234-.233v-50.871c0-.083.045-.161.117-.202l75.518-43.601a.234.234 0 1 1 .35.202v50.871a.233.233 0 0 1-.116.202l-27.322 15.775a.232.232 0 0 1-.329-.106l-6.461-14.168c-.36-.789-.992-1.206-1.828-1.206-1.056 0-2.301.672-3.415 1.844a10.099 10.099 0 0 0-2.275 3.924l-6.46 21.628a.235.235 0 0 1-.107.136l-27.322 15.774a.23.23 0 0 1-.116.031zm.233-50.969v50.331l26.891-15.525 6.434-21.539a10.41 10.41 0 0 1 2.384-4.112c1.201-1.265 2.569-1.991 3.753-1.991 1.018 0 1.818.526 2.253 1.48l6.354 13.934 26.982-15.578v-50.331l-75.051 43.331z' fill='#607D8B'/><path d='M109.894 199.943c-1.774 0-3.241-.725-4.244-2.12a.224.224 0 0 1 .023-.294.233.233 0 0 1 .301-.023c.78.547 1.705.827 2.75.827 1.323 0 2.754-.439 4.256-1.306 5.311-3.067 9.631-10.518 9.631-16.611 0-1.927-.442-3.56-1.278-4.724a.232.232 0 0 1 .323-.327c1.671 1.172 2.591 3.381 2.591 6.219 0 6.242-4.426 13.863-9.865 17.003-1.574.908-3.084 1.356-4.488 1.356zm-2.969-1.542c.813.651 1.82.877 2.968.877h.001c1.321 0 2.753-.327 4.254-1.194 5.311-3.067 9.632-10.463 9.632-16.556 0-1.979-.463-3.599-1.326-4.761.411 1.035.625 2.275.625 3.635 0 6.243-4.426 13.883-9.865 17.023-1.574.909-3.084 1.317-4.49 1.317-.641 0-1.243-.149-1.799-.341z' fill='#607D8B'/><path d='M113.097 197.23c5.384-3.108 9.748-10.636 9.748-16.814 0-2.051-.483-3.692-1.323-4.86-1.784-1.252-4.374-1.194-7.257.47-5.384 3.108-9.748 10.636-9.748 16.814 0 2.051.483 3.692 1.323 4.86 1.784 1.252 4.374 1.194 7.257-.47' fill='#FAFAFA'/><path d='M108.724 198.614c-1.142 0-2.158-.213-3.019-.817-.021-.014-.04.014-.055-.007-.894-1.244-1.367-2.948-1.367-4.973 0-6.242 4.426-13.864 9.865-17.005 1.574-.908 3.084-1.363 4.49-1.363 1.142 0 2.158.309 3.018.913a.23.23 0 0 1 .056.056c.894 1.244 1.367 2.972 1.367 4.997 0 6.243-4.426 13.783-9.865 16.923-1.574.909-3.084 1.276-4.49 1.276zm-2.718-1.109c.774.532 1.688.776 2.718.776 1.323 0 2.754-.413 4.256-1.28 5.311-3.066 9.631-10.505 9.631-16.598 0-1.909-.434-3.523-1.255-4.685-.774-.533-1.688-.799-2.718-.799-1.323 0-2.755.441-4.256 1.308-5.311 3.066-9.631 10.506-9.631 16.599 0 1.909.434 3.517 1.255 4.679z' fill='#607D8B'/><path d='M149.318 114.262l-9.984 8.878 15.893 11.031 5.589-6.112-11.498-13.797' fill='#FAFAFA'/><path d='M169.676 120.84l-9.748 5.627c-3.642 2.103-9.528 2.113-13.147.024-3.62-2.089-3.601-5.488.041-7.591l9.495-5.608-6.729-3.885-81.836 47.071 45.923 26.514 3.081-1.779c.631-.365.869-.898.618-1.39-2.357-4.632-2.593-9.546-.683-14.262 5.638-13.92 24.509-24.815 48.618-28.07 8.169-1.103 16.68-.967 24.704.394.852.145 1.776.008 2.407-.357l3.081-1.778-25.825-14.91' fill='#FAFAFA'/><path d='M113.675 183.459a.47.47 0 0 1-.233-.062l-45.924-26.515a.468.468 0 0 1 .001-.809l81.836-47.071a.467.467 0 0 1 .466 0l6.729 3.885a.467.467 0 0 1-.467.809l-6.496-3.75-80.9 46.533 44.988 25.973 2.848-1.644c.192-.111.62-.409.435-.773-2.416-4.748-2.658-9.814-.7-14.65 2.806-6.927 8.885-13.242 17.582-18.263 8.657-4.998 19.518-8.489 31.407-10.094 8.198-1.107 16.79-.97 24.844.397.739.125 1.561.007 2.095-.301l2.381-1.374-25.125-14.506a.467.467 0 0 1 .467-.809l25.825 14.91a.467.467 0 0 1 0 .809l-3.081 1.779c-.721.417-1.763.575-2.718.413-7.963-1.351-16.457-1.486-24.563-.392-11.77 1.589-22.512 5.039-31.065 9.977-8.514 4.916-14.456 11.073-17.183 17.805-1.854 4.578-1.623 9.376.666 13.875.37.725.055 1.513-.8 2.006l-3.081 1.78a.476.476 0 0 1-.234.062' fill='#455A64'/><path d='M153.316 128.279c-2.413 0-4.821-.528-6.652-1.586-1.818-1.049-2.82-2.461-2.82-3.975 0-1.527 1.016-2.955 2.861-4.02l9.493-5.607a.233.233 0 1 1 .238.402l-9.496 5.609c-1.696.979-2.628 2.263-2.628 3.616 0 1.34.918 2.608 2.585 3.571 3.549 2.049 9.343 2.038 12.914-.024l9.748-5.628a.234.234 0 0 1 .234.405l-9.748 5.628c-1.858 1.072-4.296 1.609-6.729 1.609' fill='#607D8B'/><path d='M113.675 182.992l-45.913-26.508M113.675 183.342a.346.346 0 0 1-.175-.047l-45.913-26.508a.35.35 0 1 1 .35-.607l45.913 26.508a.35.35 0 0 1-.175.654' fill='#455A64'/><path d='M67.762 156.484v54.001c0 1.09.77 2.418 1.72 2.967l42.473 24.521c.95.549 1.72.11 1.72-.98v-54.001' fill='#FAFAFA'/><path d='M112.727 238.561c-.297 0-.62-.095-.947-.285l-42.473-24.521c-1.063-.613-1.895-2.05-1.895-3.27v-54.001a.35.35 0 1 1 .701 0v54.001c0 .96.707 2.18 1.544 2.663l42.473 24.522c.344.198.661.243.87.122.206-.119.325-.411.325-.799v-54.001a.35.35 0 1 1 .7 0v54.001c0 .655-.239 1.154-.675 1.406a1.235 1.235 0 0 1-.623.162' fill='#455A64'/><path d='M112.86 147.512h-.001c-2.318 0-4.499-.522-6.142-1.471-1.705-.984-2.643-2.315-2.643-3.749 0-1.445.952-2.791 2.68-3.788l12.041-6.953c1.668-.962 3.874-1.493 6.212-1.493 2.318 0 4.499.523 6.143 1.472 1.704.984 2.643 2.315 2.643 3.748 0 1.446-.952 2.791-2.68 3.789l-12.042 6.952c-1.668.963-3.874 1.493-6.211 1.493zm12.147-16.753c-2.217 0-4.298.497-5.861 1.399l-12.042 6.952c-1.502.868-2.33 1.998-2.33 3.182 0 1.173.815 2.289 2.293 3.142 1.538.889 3.596 1.378 5.792 1.378h.001c2.216 0 4.298-.497 5.861-1.399l12.041-6.953c1.502-.867 2.33-1.997 2.33-3.182 0-1.172-.814-2.288-2.292-3.142-1.539-.888-3.596-1.377-5.793-1.377z' fill='#607D8B'/><path d='M165.63 123.219l-5.734 3.311c-3.167 1.828-8.286 1.837-11.433.02-3.147-1.817-3.131-4.772.036-6.601l5.734-3.31 11.397 6.58' fill='#FAFAFA'/><path d='M154.233 117.448l9.995 5.771-4.682 2.704c-1.434.827-3.352 1.283-5.399 1.283-2.029 0-3.923-.449-5.333-1.263-1.29-.744-2-1.694-2-2.674 0-.991.723-1.955 2.036-2.713l5.383-3.108m0-.809l-5.734 3.31c-3.167 1.829-3.183 4.784-.036 6.601 1.568.905 3.623 1.357 5.684 1.357 2.077 0 4.159-.46 5.749-1.377l5.734-3.311-11.397-6.58M145.445 179.667c-1.773 0-3.241-.85-4.243-2.245-.067-.092-.057-.275.023-.356.08-.081.207-.12.3-.055.781.548 1.706.812 2.751.811 1.322 0 2.754-.446 4.256-1.313 5.31-3.066 9.631-10.522 9.631-16.615 0-1.927-.442-3.562-1.279-4.726a.235.235 0 0 1 .024-.301.232.232 0 0 1 .3-.027c1.67 1.172 2.59 3.38 2.59 6.219 0 6.242-4.425 13.987-9.865 17.127-1.573.908-3.083 1.481-4.488 1.481zM142.476 178c.814.651 1.82 1.002 2.969 1.002 1.322 0 2.753-.452 4.255-1.32 5.31-3.065 9.631-10.523 9.631-16.617 0-1.98-.463-3.63-1.325-4.793.411 1.035.624 2.26.624 3.62 0 6.242-4.425 13.875-9.865 17.015-1.573.909-3.084 1.376-4.489 1.376a5.49 5.49 0 0 1-1.8-.283z' fill='#607D8B'/><path d='M148.648 176.704c5.384-3.108 9.748-10.636 9.748-16.813 0-2.052-.483-3.693-1.322-4.861-1.785-1.252-4.375-1.194-7.258.471-5.383 3.108-9.748 10.636-9.748 16.813 0 2.051.484 3.692 1.323 4.86 1.785 1.253 4.374 1.195 7.257-.47' fill='#FAFAFA'/><path d='M144.276 178.276c-1.143 0-2.158-.307-3.019-.911a.217.217 0 0 1-.055-.054c-.895-1.244-1.367-2.972-1.367-4.997 0-6.241 4.425-13.875 9.865-17.016 1.573-.908 3.084-1.369 4.489-1.369 1.143 0 2.158.307 3.019.91a.24.24 0 0 1 .055.055c.894 1.244 1.367 2.971 1.367 4.997 0 6.241-4.425 13.875-9.865 17.016-1.573.908-3.084 1.369-4.489 1.369zm-2.718-1.172c.773.533 1.687.901 2.718.901 1.322 0 2.754-.538 4.256-1.405 5.31-3.066 9.631-10.567 9.631-16.661 0-1.908-.434-3.554-1.256-4.716-.774-.532-1.688-.814-2.718-.814-1.322 0-2.754.433-4.256 1.3-5.31 3.066-9.631 10.564-9.631 16.657 0 1.91.434 3.576 1.256 4.738z' fill='#607D8B'/><path d='M150.72 172.361l-.363-.295a24.105 24.105 0 0 0 2.148-3.128 24.05 24.05 0 0 0 1.977-4.375l.443.149a24.54 24.54 0 0 1-2.015 4.46 24.61 24.61 0 0 1-2.19 3.189M115.917 191.514l-.363-.294a24.174 24.174 0 0 0 2.148-3.128 24.038 24.038 0 0 0 1.976-4.375l.443.148a24.48 24.48 0 0 1-2.015 4.461 24.662 24.662 0 0 1-2.189 3.188M114 237.476V182.584 237.476' fill='#607D8B'/><g><path d='M81.822 37.474c.017-.135-.075-.28-.267-.392-.327-.188-.826-.21-1.109-.045l-6.012 3.471c-.131.076-.194.178-.191.285.002.132.002.461.002.578v.043l-.007.128-6.591 3.779c-.001 0-2.077 1.046-2.787 5.192 0 0-.912 6.961-.898 19.745.015 12.57.606 17.07 1.167 21.351.22 1.684 3.001 2.125 3.001 2.125.331.04.698-.027 1.08-.248l75.273-43.551c1.808-1.069 2.667-3.719 3.056-6.284 1.213-7.99 1.675-32.978-.275-39.878-.196-.693-.51-1.083-.868-1.282l-2.086-.79c-.727.028-1.416.467-1.534.535L82.032 37.072l-.21.402' fill='#FFF'/><path d='M144.311 1.701l2.085.79c.358.199.672.589.868 1.282 1.949 6.9 1.487 31.887.275 39.878-.39 2.565-1.249 5.215-3.056 6.284L69.21 93.486a1.78 1.78 0 0 1-.896.258l-.183-.011c0 .001-2.782-.44-3.003-2.124-.56-4.282-1.151-8.781-1.165-21.351-.015-12.784.897-19.745.897-19.745.71-4.146 2.787-5.192 2.787-5.192l6.591-3.779.007-.128v-.043c0-.117 0-.446-.002-.578-.003-.107.059-.21.191-.285l6.012-3.472a.98.98 0 0 1 .481-.11c.218 0 .449.053.627.156.193.112.285.258.268.392l.211-.402 60.744-34.836c.117-.068.806-.507 1.534-.535m0-.997l-.039.001c-.618.023-1.283.244-1.974.656l-.021.012-60.519 34.706a2.358 2.358 0 0 0-.831-.15c-.365 0-.704.084-.98.244l-6.012 3.471c-.442.255-.699.69-.689 1.166l.001.15-6.08 3.487c-.373.199-2.542 1.531-3.29 5.898l-.006.039c-.009.07-.92 7.173-.906 19.875.014 12.62.603 17.116 1.172 21.465l.002.015c.308 2.355 3.475 2.923 3.836 2.98l.034.004c.101.013.204.019.305.019a2.77 2.77 0 0 0 1.396-.392l75.273-43.552c1.811-1.071 2.999-3.423 3.542-6.997 1.186-7.814 1.734-33.096-.301-40.299-.253-.893-.704-1.527-1.343-1.882l-.132-.062-2.085-.789a.973.973 0 0 0-.353-.065' fill='#455A64'/><path d='M128.267 11.565l1.495.434-56.339 32.326' fill='#FFF'/><path d='M74.202 90.545a.5.5 0 0 1-.25-.931l18.437-10.645a.499.499 0 1 1 .499.864L74.451 90.478l-.249.067M75.764 42.654l-.108-.062.046-.171 5.135-2.964.17.045-.045.171-5.135 2.964-.063.017M70.52 90.375V46.421l.063-.036L137.84 7.554v43.954l-.062.036L70.52 90.375zm.25-43.811v43.38l66.821-38.579V7.985L70.77 46.564z' fill='#607D8B'/><path d='M86.986 83.182c-.23.149-.612.384-.849.523l-11.505 6.701c-.237.139-.206.252.068.252h.565c.275 0 .693-.113.93-.252L87.7 83.705c.237-.139.428-.253.425-.256a11.29 11.29 0 0 1-.006-.503c0-.274-.188-.377-.418-.227l-.715.463' fill='#607D8B'/><path d='M75.266 90.782H74.7c-.2 0-.316-.056-.346-.166-.03-.11.043-.217.215-.317l11.505-6.702c.236-.138.615-.371.844-.519l.715-.464a.488.488 0 0 1 .266-.089c.172 0 .345.13.345.421 0 .214.001.363.003.437l.006.004-.004.069c-.003.075-.003.075-.486.356l-11.505 6.702a2.282 2.282 0 0 1-.992.268zm-.6-.25l.034.001h.566c.252 0 .649-.108.866-.234l11.505-6.702c.168-.098.294-.173.361-.214-.004-.084-.004-.218-.004-.437l-.095-.171-.131.049-.714.463c-.232.15-.616.386-.854.525l-11.505 6.702-.029.018z' fill='#607D8B'/><path d='M75.266 89.871H74.7c-.2 0-.316-.056-.346-.166-.03-.11.043-.217.215-.317l11.505-6.702c.258-.151.694-.268.993-.268h.565c.2 0 .316.056.346.166.03.11-.043.217-.215.317l-11.505 6.702a2.282 2.282 0 0 1-.992.268zm-.6-.25l.034.001h.566c.252 0 .649-.107.866-.234l11.505-6.702.03-.018-.035-.001h-.565c-.252 0-.649.108-.867.234l-11.505 6.702-.029.018zM74.37 90.801v-1.247 1.247' fill='#607D8B'/><path d='M68.13 93.901c-.751-.093-1.314-.737-1.439-1.376-.831-4.238-1.151-8.782-1.165-21.352-.015-12.784.897-19.745.897-19.745.711-4.146 2.787-5.192 2.787-5.192l74.859-43.219c.223-.129 2.487-1.584 3.195.923 1.95 6.9 1.488 31.887.275 39.878-.389 2.565-1.248 5.215-3.056 6.283L69.21 93.653c-.382.221-.749.288-1.08.248 0 0-2.781-.441-3.001-2.125-.561-4.281-1.152-8.781-1.167-21.351-.014-12.784.898-19.745.898-19.745.71-4.146 2.787-5.191 2.787-5.191l6.598-3.81.871-.119 6.599-3.83.046-.461L68.13 93.901' fill='#FAFAFA'/><path d='M68.317 94.161l-.215-.013h-.001l-.244-.047c-.719-.156-2.772-.736-2.976-2.292-.568-4.34-1.154-8.813-1.168-21.384-.014-12.654.891-19.707.9-19.777.725-4.231 2.832-5.338 2.922-5.382l6.628-3.827.87-.119 6.446-3.742.034-.334a.248.248 0 0 1 .273-.223.248.248 0 0 1 .223.272l-.059.589-6.752 3.919-.87.118-6.556 3.785c-.031.016-1.99 1.068-2.666 5.018-.007.06-.908 7.086-.894 19.702.014 12.539.597 16.996 1.161 21.305.091.691.689 1.154 1.309 1.452a1.95 1.95 0 0 1-.236-.609c-.781-3.984-1.155-8.202-1.17-21.399-.014-12.653.891-19.707.9-19.777.725-4.231 2.832-5.337 2.922-5.382-.004.001 74.444-42.98 74.846-43.212l.028-.017c.904-.538 1.72-.688 2.36-.433.555.221.949.733 1.172 1.52 2.014 7.128 1.46 32.219.281 39.983-.507 3.341-1.575 5.515-3.175 6.462L69.335 93.869a2.023 2.023 0 0 1-1.018.292zm-.147-.507c.293.036.604-.037.915-.217l75.273-43.551c1.823-1.078 2.602-3.915 2.934-6.106 1.174-7.731 1.731-32.695-.268-39.772-.178-.631-.473-1.032-.876-1.192-.484-.193-1.166-.052-1.921.397l-.034.021-74.858 43.218c-.031.017-1.989 1.069-2.666 5.019-.007.059-.908 7.085-.894 19.702.015 13.155.386 17.351 1.161 21.303.09.461.476.983 1.037 1.139.114.025.185.037.196.039h.001z' fill='#455A64'/><path d='M69.317 68.982c.489-.281.885-.056.885.505 0 .56-.396 1.243-.885 1.525-.488.282-.884.057-.884-.504 0-.56.396-1.243.884-1.526' fill='#FFF'/><path d='M68.92 71.133c-.289 0-.487-.228-.487-.625 0-.56.396-1.243.884-1.526a.812.812 0 0 1 .397-.121c.289 0 .488.229.488.626 0 .56-.396 1.243-.885 1.525a.812.812 0 0 1-.397.121m.794-2.459a.976.976 0 0 0-.49.147c-.548.317-.978 1.058-.978 1.687 0 .486.271.812.674.812a.985.985 0 0 0 .491-.146c.548-.317.978-1.057.978-1.687 0-.486-.272-.813-.675-.813' fill='#8097A2'/><path d='M68.92 70.947c-.271 0-.299-.307-.299-.439 0-.491.361-1.116.79-1.363a.632.632 0 0 1 .303-.096c.272 0 .301.306.301.438 0 .491-.363 1.116-.791 1.364a.629.629 0 0 1-.304.096m.794-2.086a.812.812 0 0 0-.397.121c-.488.283-.884.966-.884 1.526 0 .397.198.625.487.625a.812.812 0 0 0 .397-.121c.489-.282.885-.965.885-1.525 0-.397-.199-.626-.488-.626' fill='#8097A2'/><path d='M69.444 85.35c.264-.152.477-.031.477.272 0 .303-.213.67-.477.822-.263.153-.477.031-.477-.271 0-.302.214-.671.477-.823' fill='#FFF'/><path d='M69.23 86.51c-.156 0-.263-.123-.263-.337 0-.302.214-.671.477-.823a.431.431 0 0 1 .214-.066c.156 0 .263.124.263.338 0 .303-.213.67-.477.822a.431.431 0 0 1-.214.066m.428-1.412c-.1 0-.203.029-.307.09-.32.185-.57.618-.57.985 0 .309.185.524.449.524a.63.63 0 0 0 .308-.09c.32-.185.57-.618.57-.985 0-.309-.185-.524-.45-.524' fill='#8097A2'/><path d='M69.23 86.322l-.076-.149c0-.235.179-.544.384-.661l.12-.041.076.151c0 .234-.179.542-.383.66l-.121.04m.428-1.038a.431.431 0 0 0-.214.066c-.263.152-.477.521-.477.823 0 .214.107.337.263.337a.431.431 0 0 0 .214-.066c.264-.152.477-.519.477-.822 0-.214-.107-.338-.263-.338' fill='#8097A2'/><path d='M139.278 7.769v43.667L72.208 90.16V46.493l67.07-38.724' fill='#455A64'/><path d='M72.083 90.375V46.421l.063-.036 67.257-38.831v43.954l-.062.036-67.258 38.831zm.25-43.811v43.38l66.821-38.579V7.985L72.333 46.564z' fill='#607D8B'/></g><path d='M125.737 88.647l-7.639 3.334V84l-11.459 4.713v8.269L99 100.315l13.369 3.646 13.368-15.314' fill='#455A64'/></g></svg>")};
xa.prototype.show=function(d){this.root=d;d.appendChild(this.dialog);this.dialog.querySelector("#"+this.selectedKey).checked=!0;this.dialog.style.display="block"};xa.prototype.hide=function(){this.root&&this.root.contains(this.dialog)&&this.root.removeChild(this.dialog);this.dialog.style.display="none"};xa.prototype.getCurrentViewer=function(){return M.Viewers[this.selectedKey]};xa.prototype.getSelectedKey_=function(){var d=this.dialog.querySelector("input[name=field]:checked");return d?d.id:null};
xa.prototype.onChange=function(d){this.onChangeCallbacks_.push(d)};xa.prototype.fireOnChange_=function(d){for(var r=0;r<this.onChangeCallbacks_.length;r++)this.onChangeCallbacks_[r](d)};xa.prototype.onSave_=function(){if((this.selectedKey=this.getSelectedKey_())&&M.Viewers[this.selectedKey]){this.fireOnChange_(M.Viewers[this.selectedKey]);try{localStorage.setItem("WEBVR_CARDBOARD_VIEWER",this.selectedKey)}catch(d){console.error("Failed to save viewer profile: %s",d)}this.hide()}else console.error("ViewerSelector.onSave_: this should never happen!")};
xa.prototype.createDialog_=function(d){var r=document.createElement("div");r.classList.add("webvr-polyfill-viewer-selector");r.style.display="none";var u=document.createElement("div"),A=u.style;A.position="fixed";A.left=0;A.top=0;A.width="100%";A.height="100%";A.background="rgba(0, 0, 0, 0.3)";u.addEventListener("click",this.hide.bind(this));var J=document.createElement("div");A=J.style;A.boxSizing="border-box";A.position="fixed";A.top="24px";A.left="50%";A.marginLeft="-140px";A.width="280px";A.padding=
"24px";A.overflow="hidden";A.background="#fafafa";A.fontFamily="'Roboto', sans-serif";A.boxShadow="0px 5px 20px #666";J.appendChild(this.createH1_("Select your viewer"));for(var D in d)J.appendChild(this.createChoice_(D,d[D].label));J.appendChild(this.createButton_("Save",this.onSave_.bind(this)));r.appendChild(u);r.appendChild(J);return r};xa.prototype.createH1_=function(d){var r=document.createElement("h1"),u=r.style;u.color="black";u.fontSize="20px";u.fontWeight="bold";u.marginTop=0;u.marginBottom=
"24px";r.innerHTML=d;return r};xa.prototype.createChoice_=function(d,r){var u=document.createElement("div");u.style.marginTop="8px";u.style.color="black";var A=document.createElement("input");A.style.fontSize="30px";A.setAttribute("id",d);A.setAttribute("type","radio");A.setAttribute("value",d);A.setAttribute("name","field");var J=document.createElement("label");J.style.marginLeft="4px";J.setAttribute("for",d);J.innerHTML=r;u.appendChild(A);u.appendChild(J);return u};xa.prototype.createButton_=function(d,
r){var u=document.createElement("button");u.innerHTML=d;d=u.style;d.float="right";d.textTransform="uppercase";d.color="#1094f7";d.fontSize="14px";d.letterSpacing=0;d.border=0;d.background="none";d.marginTop="16px";u.addEventListener("click",r);return u};var Lc="undefined"!==typeof window?window:"undefined"!==typeof Jb?Jb:"undefined"!==typeof self?self:{},Cc=function(d){return d&&d.__esModule&&Object.prototype.hasOwnProperty.call(d,"default")?d["default"]:d}(function(d,r){return r={exports:{}},d(r,
r.exports),r.exports}(function(d,r){(function(u,A){d.exports=A()})(Lc,function(){return function(u){function A(D){if(J[D])return J[D].exports;var E=J[D]={i:D,l:!1,exports:{}};u[D].call(E.exports,E,E.exports,A);E.l=!0;return E.exports}var J={};A.m=u;A.c=J;A.d=function(D,E,S){A.o(D,E)||Object.defineProperty(D,E,{configurable:!1,enumerable:!0,get:S})};A.n=function(D){var E=D&&D.__esModule?function(){return D["default"]}:function(){return D};A.d(E,"a",E);return E};A.o=function(D,E){return Object.prototype.hasOwnProperty.call(D,
E)};A.p="";return A(A.s=0)}([function(u,A,J){var D=function(){function V(U,Z){for(var ba=0;ba<Z.length;ba++){var ha=Z[ba];ha.enumerable=ha.enumerable||!1;ha.configurable=!0;"value"in ha&&(ha.writable=!0);Object.defineProperty(U,ha.key,ha)}}return function(U,Z,ba){Z&&V(U.prototype,Z);ba&&V(U,ba);return U}}(),E=J(1),S="undefined"!==typeof navigator&&10>parseFloat((""+(/CPU.*OS ([0-9_]{3,4})[0-9_]{0,1}|(CPU like).*AppleWebKit.*Mobile/i.exec(navigator.userAgent)||[0,""])[1]).replace("undefined","3_2").replace("_",
".").replace("_",""))&&!window.MSStream;A=function(){function V(){if(!(this instanceof V))throw new TypeError("Cannot call a class as a function");S?this.noSleepTimer=null:(this.noSleepVideo=document.createElement("video"),this.noSleepVideo.setAttribute("playsinline",""),this.noSleepVideo.setAttribute("src",E),this.noSleepVideo.addEventListener("timeupdate",function(U){.5<this.noSleepVideo.currentTime&&(this.noSleepVideo.currentTime=Math.random())}.bind(this)))}D(V,[{key:"enable",value:function(){S?
(this.disable(),this.noSleepTimer=window.setInterval(function(){window.location.href="/";window.setTimeout(window.stop,0)},15E3)):this.noSleepVideo.play()}},{key:"disable",value:function(){S?this.noSleepTimer&&(window.clearInterval(this.noSleepTimer),this.noSleepTimer=null):this.noSleepVideo.pause()}}]);return V}();u.exports=A},function(u,A,J){u.exports="data:video/mp4;base64,AAAAIGZ0eXBtcDQyAAACAGlzb21pc28yYXZjMW1wNDEAAAAIZnJlZQAACKBtZGF0AAAC8wYF///v3EXpvebZSLeWLNgg2SPu73gyNjQgLSBjb3JlIDE0MiByMjQ3OSBkZDc5YTYxIC0gSC4yNjQvTVBFRy00IEFWQyBjb2RlYyAtIENvcHlsZWZ0IDIwMDMtMjAxNCAtIGh0dHA6Ly93d3cudmlkZW9sYW4ub3JnL3gyNjQuaHRtbCAtIG9wdGlvbnM6IGNhYmFjPTEgcmVmPTEgZGVibG9jaz0xOjA6MCBhbmFseXNlPTB4MToweDExMSBtZT1oZXggc3VibWU9MiBwc3k9MSBwc3lfcmQ9MS4wMDowLjAwIG1peGVkX3JlZj0wIG1lX3JhbmdlPTE2IGNocm9tYV9tZT0xIHRyZWxsaXM9MCA4eDhkY3Q9MCBjcW09MCBkZWFkem9uZT0yMSwxMSBmYXN0X3Bza2lwPTEgY2hyb21hX3FwX29mZnNldD0wIHRocmVhZHM9NiBsb29rYWhlYWRfdGhyZWFkcz0xIHNsaWNlZF90aHJlYWRzPTAgbnI9MCBkZWNpbWF0ZT0xIGludGVybGFjZWQ9MCBibHVyYXlfY29tcGF0PTAgY29uc3RyYWluZWRfaW50cmE9MCBiZnJhbWVzPTMgYl9weXJhbWlkPTIgYl9hZGFwdD0xIGJfYmlhcz0wIGRpcmVjdD0xIHdlaWdodGI9MSBvcGVuX2dvcD0wIHdlaWdodHA9MSBrZXlpbnQ9MzAwIGtleWludF9taW49MzAgc2NlbmVjdXQ9NDAgaW50cmFfcmVmcmVzaD0wIHJjX2xvb2thaGVhZD0xMCByYz1jcmYgbWJ0cmVlPTEgY3JmPTIwLjAgcWNvbXA9MC42MCBxcG1pbj0wIHFwbWF4PTY5IHFwc3RlcD00IHZidl9tYXhyYXRlPTIwMDAwIHZidl9idWZzaXplPTI1MDAwIGNyZl9tYXg9MC4wIG5hbF9ocmQ9bm9uZSBmaWxsZXI9MCBpcF9yYXRpbz0xLjQwIGFxPTE6MS4wMACAAAAAOWWIhAA3//p+C7v8tDDSTjf97w55i3SbRPO4ZY+hkjD5hbkAkL3zpJ6h/LR1CAABzgB1kqqzUorlhQAAAAxBmiQYhn/+qZYADLgAAAAJQZ5CQhX/AAj5IQADQGgcIQADQGgcAAAACQGeYUQn/wALKCEAA0BoHAAAAAkBnmNEJ/8ACykhAANAaBwhAANAaBwAAAANQZpoNExDP/6plgAMuSEAA0BoHAAAAAtBnoZFESwr/wAI+SEAA0BoHCEAA0BoHAAAAAkBnqVEJ/8ACykhAANAaBwAAAAJAZ6nRCf/AAsoIQADQGgcIQADQGgcAAAADUGarDRMQz/+qZYADLghAANAaBwAAAALQZ7KRRUsK/8ACPkhAANAaBwAAAAJAZ7pRCf/AAsoIQADQGgcIQADQGgcAAAACQGe60Qn/wALKCEAA0BoHAAAAA1BmvA0TEM//qmWAAy5IQADQGgcIQADQGgcAAAAC0GfDkUVLCv/AAj5IQADQGgcAAAACQGfLUQn/wALKSEAA0BoHCEAA0BoHAAAAAkBny9EJ/8ACyghAANAaBwAAAANQZs0NExDP/6plgAMuCEAA0BoHAAAAAtBn1JFFSwr/wAI+SEAA0BoHCEAA0BoHAAAAAkBn3FEJ/8ACyghAANAaBwAAAAJAZ9zRCf/AAsoIQADQGgcIQADQGgcAAAADUGbeDRMQz/+qZYADLkhAANAaBwAAAALQZ+WRRUsK/8ACPghAANAaBwhAANAaBwAAAAJAZ+1RCf/AAspIQADQGgcAAAACQGft0Qn/wALKSEAA0BoHCEAA0BoHAAAAA1Bm7w0TEM//qmWAAy4IQADQGgcAAAAC0Gf2kUVLCv/AAj5IQADQGgcAAAACQGf+UQn/wALKCEAA0BoHCEAA0BoHAAAAAkBn/tEJ/8ACykhAANAaBwAAAANQZvgNExDP/6plgAMuSEAA0BoHCEAA0BoHAAAAAtBnh5FFSwr/wAI+CEAA0BoHAAAAAkBnj1EJ/8ACyghAANAaBwhAANAaBwAAAAJAZ4/RCf/AAspIQADQGgcAAAADUGaJDRMQz/+qZYADLghAANAaBwAAAALQZ5CRRUsK/8ACPkhAANAaBwhAANAaBwAAAAJAZ5hRCf/AAsoIQADQGgcAAAACQGeY0Qn/wALKSEAA0BoHCEAA0BoHAAAAA1Bmmg0TEM//qmWAAy5IQADQGgcAAAAC0GehkUVLCv/AAj5IQADQGgcIQADQGgcAAAACQGepUQn/wALKSEAA0BoHAAAAAkBnqdEJ/8ACyghAANAaBwAAAANQZqsNExDP/6plgAMuCEAA0BoHCEAA0BoHAAAAAtBnspFFSwr/wAI+SEAA0BoHAAAAAkBnulEJ/8ACyghAANAaBwhAANAaBwAAAAJAZ7rRCf/AAsoIQADQGgcAAAADUGa8DRMQz/+qZYADLkhAANAaBwhAANAaBwAAAALQZ8ORRUsK/8ACPkhAANAaBwAAAAJAZ8tRCf/AAspIQADQGgcIQADQGgcAAAACQGfL0Qn/wALKCEAA0BoHAAAAA1BmzQ0TEM//qmWAAy4IQADQGgcAAAAC0GfUkUVLCv/AAj5IQADQGgcIQADQGgcAAAACQGfcUQn/wALKCEAA0BoHAAAAAkBn3NEJ/8ACyghAANAaBwhAANAaBwAAAANQZt4NExC//6plgAMuSEAA0BoHAAAAAtBn5ZFFSwr/wAI+CEAA0BoHCEAA0BoHAAAAAkBn7VEJ/8ACykhAANAaBwAAAAJAZ+3RCf/AAspIQADQGgcAAAADUGbuzRMQn/+nhAAYsAhAANAaBwhAANAaBwAAAAJQZ/aQhP/AAspIQADQGgcAAAACQGf+UQn/wALKCEAA0BoHCEAA0BoHCEAA0BoHCEAA0BoHCEAA0BoHCEAA0BoHAAACiFtb292AAAAbG12aGQAAAAA1YCCX9WAgl8AAAPoAAAH/AABAAABAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAAAAGGlvZHMAAAAAEICAgAcAT////v7/AAAF+XRyYWsAAABcdGtoZAAAAAPVgIJf1YCCXwAAAAEAAAAAAAAH0AAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAEAAAAAAygAAAMoAAAAAACRlZHRzAAAAHGVsc3QAAAAAAAAAAQAAB9AAABdwAAEAAAAABXFtZGlhAAAAIG1kaGQAAAAA1YCCX9WAgl8AAV+QAAK/IFXEAAAAAAAtaGRscgAAAAAAAAAAdmlkZQAAAAAAAAAAAAAAAFZpZGVvSGFuZGxlcgAAAAUcbWluZgAAABR2bWhkAAAAAQAAAAAAAAAAAAAAJGRpbmYAAAAcZHJlZgAAAAAAAAABAAAADHVybCAAAAABAAAE3HN0YmwAAACYc3RzZAAAAAAAAAABAAAAiGF2YzEAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAygDKAEgAAABIAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAY//8AAAAyYXZjQwFNQCj/4QAbZ01AKOyho3ySTUBAQFAAAAMAEAAr8gDxgxlgAQAEaO+G8gAAABhzdHRzAAAAAAAAAAEAAAA8AAALuAAAABRzdHNzAAAAAAAAAAEAAAABAAAB8GN0dHMAAAAAAAAAPAAAAAEAABdwAAAAAQAAOpgAAAABAAAXcAAAAAEAAAAAAAAAAQAAC7gAAAABAAA6mAAAAAEAABdwAAAAAQAAAAAAAAABAAALuAAAAAEAADqYAAAAAQAAF3AAAAABAAAAAAAAAAEAAAu4AAAAAQAAOpgAAAABAAAXcAAAAAEAAAAAAAAAAQAAC7gAAAABAAA6mAAAAAEAABdwAAAAAQAAAAAAAAABAAALuAAAAAEAADqYAAAAAQAAF3AAAAABAAAAAAAAAAEAAAu4AAAAAQAAOpgAAAABAAAXcAAAAAEAAAAAAAAAAQAAC7gAAAABAAA6mAAAAAEAABdwAAAAAQAAAAAAAAABAAALuAAAAAEAADqYAAAAAQAAF3AAAAABAAAAAAAAAAEAAAu4AAAAAQAAOpgAAAABAAAXcAAAAAEAAAAAAAAAAQAAC7gAAAABAAA6mAAAAAEAABdwAAAAAQAAAAAAAAABAAALuAAAAAEAADqYAAAAAQAAF3AAAAABAAAAAAAAAAEAAAu4AAAAAQAAOpgAAAABAAAXcAAAAAEAAAAAAAAAAQAAC7gAAAABAAA6mAAAAAEAABdwAAAAAQAAAAAAAAABAAALuAAAAAEAAC7gAAAAAQAAF3AAAAABAAAAAAAAABxzdHNjAAAAAAAAAAEAAAABAAAAAQAAAAEAAAEEc3RzegAAAAAAAAAAAAAAPAAAAzQAAAAQAAAADQAAAA0AAAANAAAAEQAAAA8AAAANAAAADQAAABEAAAAPAAAADQAAAA0AAAARAAAADwAAAA0AAAANAAAAEQAAAA8AAAANAAAADQAAABEAAAAPAAAADQAAAA0AAAARAAAADwAAAA0AAAANAAAAEQAAAA8AAAANAAAADQAAABEAAAAPAAAADQAAAA0AAAARAAAADwAAAA0AAAANAAAAEQAAAA8AAAANAAAADQAAABEAAAAPAAAADQAAAA0AAAARAAAADwAAAA0AAAANAAAAEQAAAA8AAAANAAAADQAAABEAAAANAAAADQAAAQBzdGNvAAAAAAAAADwAAAAwAAADZAAAA3QAAAONAAADoAAAA7kAAAPQAAAD6wAAA/4AAAQXAAAELgAABEMAAARcAAAEbwAABIwAAAShAAAEugAABM0AAATkAAAE/wAABRIAAAUrAAAFQgAABV0AAAVwAAAFiQAABaAAAAW1AAAFzgAABeEAAAX+AAAGEwAABiwAAAY/AAAGVgAABnEAAAaEAAAGnQAABrQAAAbPAAAG4gAABvUAAAcSAAAHJwAAB0AAAAdTAAAHcAAAB4UAAAeeAAAHsQAAB8gAAAfjAAAH9gAACA8AAAgmAAAIQQAACFQAAAhnAAAIhAAACJcAAAMsdHJhawAAAFx0a2hkAAAAA9WAgl/VgIJfAAAAAgAAAAAAAAf8AAAAAAAAAAAAAAABAQAAAAABAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAACsm1kaWEAAAAgbWRoZAAAAADVgIJf1YCCXwAArEQAAWAAVcQAAAAAACdoZGxyAAAAAAAAAABzb3VuAAAAAAAAAAAAAAAAU3RlcmVvAAAAAmNtaW5mAAAAEHNtaGQAAAAAAAAAAAAAACRkaW5mAAAAHGRyZWYAAAAAAAAAAQAAAAx1cmwgAAAAAQAAAidzdGJsAAAAZ3N0c2QAAAAAAAAAAQAAAFdtcDRhAAAAAAAAAAEAAAAAAAAAAAACABAAAAAArEQAAAAAADNlc2RzAAAAAAOAgIAiAAIABICAgBRAFQAAAAADDUAAAAAABYCAgAISEAaAgIABAgAAABhzdHRzAAAAAAAAAAEAAABYAAAEAAAAABxzdHNjAAAAAAAAAAEAAAABAAAAAQAAAAEAAAAUc3RzegAAAAAAAAAGAAAAWAAAAXBzdGNvAAAAAAAAAFgAAAOBAAADhwAAA5oAAAOtAAADswAAA8oAAAPfAAAD5QAAA/gAAAQLAAAEEQAABCgAAAQ9AAAEUAAABFYAAARpAAAEgAAABIYAAASbAAAErgAABLQAAATHAAAE3gAABPMAAAT5AAAFDAAABR8AAAUlAAAFPAAABVEAAAVXAAAFagAABX0AAAWDAAAFmgAABa8AAAXCAAAFyAAABdsAAAXyAAAF+AAABg0AAAYgAAAGJgAABjkAAAZQAAAGZQAABmsAAAZ+AAAGkQAABpcAAAauAAAGwwAABskAAAbcAAAG7wAABwYAAAcMAAAHIQAABzQAAAc6AAAHTQAAB2QAAAdqAAAHfwAAB5IAAAeYAAAHqwAAB8IAAAfXAAAH3QAAB/AAAAgDAAAICQAACCAAAAg1AAAIOwAACE4AAAhhAAAIeAAACH4AAAiRAAAIpAAACKoAAAiwAAAItgAACLwAAAjCAAAAFnVkdGEAAAAObmFtZVN0ZXJlbwAAAHB1ZHRhAAAAaG1ldGEAAAAAAAAAIWhkbHIAAAAAAAAAAG1kaXJhcHBsAAAAAAAAAAAAAAAAO2lsc3QAAAAzqXRvbwAAACtkYXRhAAAAAQAAAABIYW5kQnJha2UgMC4xMC4yIDIwMTUwNjExMDA="}])})})),
Bc=1E3,Mc=[0,0,.5,1],Nc=[.5,0,.5,1],Oc=window.requestAnimationFrame,Pc=window.cancelAnimationFrame;ka.prototype.getFrameData=function(d){return Gc(d,this._getPose(),this)};ka.prototype.getPose=function(){cb("VRDisplay.prototype.getPose","VRDisplay.prototype.getFrameData");return this._getPose()};ka.prototype.resetPose=function(){cb("VRDisplay.prototype.resetPose");return this._resetPose()};ka.prototype.getImmediatePose=function(){cb("VRDisplay.prototype.getImmediatePose","VRDisplay.prototype.getFrameData");
return this._getPose()};ka.prototype.requestAnimationFrame=function(d){return Oc(d)};ka.prototype.cancelAnimationFrame=function(d){return Pc(d)};ka.prototype.wrapForFullscreen=function(d){if(fa())return d;this.fullscreenWrapper_||(this.fullscreenWrapper_=document.createElement("div"),this.fullscreenWrapper_.setAttribute("style",["height: "+Math.min(screen.height,screen.width)+"px !important","top: 0 !important; left: 0 !important; right: 0 !important; border: 0; margin: 0; padding: 0; z-index: 999999 !important; position: fixed"].join("; ")+
";"),this.fullscreenWrapper_.classList.add("webvr-polyfill-fullscreen-wrapper"));if(this.fullscreenElement_==d)return this.fullscreenWrapper_;this.fullscreenElement_&&(this.originalParent_?this.originalParent_.appendChild(this.fullscreenElement_):this.fullscreenElement_.parentElement.removeChild(this.fullscreenElement_));this.fullscreenElement_=d;(this.originalParent_=d.parentElement)||document.body.appendChild(d);this.fullscreenWrapper_.parentElement||(d=this.fullscreenElement_.parentElement,d.insertBefore(this.fullscreenWrapper_,
this.fullscreenElement_),d.removeChild(this.fullscreenElement_));this.fullscreenWrapper_.insertBefore(this.fullscreenElement_,this.fullscreenWrapper_.firstChild);this.fullscreenElementCachedStyle_=this.fullscreenElement_.getAttribute("style");this.fullscreenElement_&&this.fullscreenElement_.setAttribute("style",["position: absolute; top: 0; left: 0","width: "+Math.max(screen.width,screen.height)+"px","height: "+Math.min(screen.height,screen.width)+"px","border: 0; margin: 0; padding: 0"].join("; ")+
";");return this.fullscreenWrapper_};ka.prototype.removeFullscreenWrapper=function(){if(this.fullscreenElement_){var d=this.fullscreenElement_;this.fullscreenElementCachedStyle_?d.setAttribute("style",this.fullscreenElementCachedStyle_):d.removeAttribute("style");this.fullscreenElementCachedStyle_=this.fullscreenElement_=null;var r=this.fullscreenWrapper_.parentElement;this.fullscreenWrapper_.removeChild(d);this.originalParent_===r?r.insertBefore(d,this.fullscreenWrapper_):this.originalParent_&&this.originalParent_.appendChild(d);
r.removeChild(this.fullscreenWrapper_);return d}};ka.prototype.requestPresent=function(d){var r=this.isPresenting,u=this;d instanceof Array||(cb("VRDisplay.prototype.requestPresent with non-array argument","an array of VRLayers as the first argument"),d=[d]);return new Promise(function(A,J){if(u.capabilities.canPresent)if(0==d.length||d.length>u.capabilities.maxLayers)J(Error("Invalid number of layers."));else{var D=d[0];if(D.source){var E=D.leftBounds||Mc,S=D.rightBounds||Nc;if(r){var V=u.layer_;
V.source!==D.source&&(V.source=D.source);for(D=0;4>D;D++)V.leftBounds[D]=E[D],V.rightBounds[D]=S[D];u.wrapForFullscreen(u.layer_.source);u.updatePresent_();A()}else{u.layer_={predistorted:D.predistorted,source:D.source,leftBounds:E.slice(0),rightBounds:S.slice(0)};u.waitingForPresent_=!1;if(u.layer_&&u.layer_.source){var U=u.wrapForFullscreen(u.layer_.source);u.addFullscreenListeners_(U,function(){u.isPresenting=U===(document.fullscreenElement||document.webkitFullscreenElement||document.mozFullScreenElement||
document.msFullscreenElement);u.isPresenting?(screen.orientation&&screen.orientation.lock&&screen.orientation.lock("landscape-primary").catch(function(Z){console.error("screen.orientation.lock() failed due to",Z.message)}),u.waitingForPresent_=!1,u.beginPresent_(),A()):(screen.orientation&&screen.orientation.unlock&&screen.orientation.unlock(),u.removeFullscreenWrapper(),u.disableWakeLock(),u.endPresent_(),u.removeFullscreenListeners_());u.fireVRDisplayPresentChange_()},function(){u.waitingForPresent_&&
(u.removeFullscreenWrapper(),u.removeFullscreenListeners_(),u.disableWakeLock(),u.waitingForPresent_=!1,u.isPresenting=!1,J(Error("Unable to present.")))});if(Fc(U))u.enableWakeLock(),u.waitingForPresent_=!0;else if(fa()||Pa())u.enableWakeLock(),u.isPresenting=!0,u.beginPresent_(),u.fireVRDisplayPresentChange_(),A()}u.waitingForPresent_||fa()||(gc(),J(Error("Unable to present.")))}}else A()}else J(Error("VRDisplay is not capable of presenting."))})};ka.prototype.exitPresent=function(){var d=this.isPresenting,
r=this;this.isPresenting=!1;this.layer_=null;this.disableWakeLock();return new Promise(function(u,A){d?(!gc()&&fa()&&(r.endPresent_(),r.fireVRDisplayPresentChange_()),Pa()&&(r.removeFullscreenWrapper(),r.removeFullscreenListeners_(),r.endPresent_(),r.fireVRDisplayPresentChange_()),u()):A(Error("Was not presenting to VRDisplay."))})};ka.prototype.getLayers=function(){return this.layer_?[this.layer_]:[]};ka.prototype.fireVRDisplayPresentChange_=function(){var d=new CustomEvent("vrdisplaypresentchange",
{detail:{display:this}});window.dispatchEvent(d)};ka.prototype.fireVRDisplayConnect_=function(){var d=new CustomEvent("vrdisplayconnect",{detail:{display:this}});window.dispatchEvent(d)};ka.prototype.addFullscreenListeners_=function(d,r,u){this.removeFullscreenListeners_();this.fullscreenEventTarget_=d;this.fullscreenChangeHandler_=r;this.fullscreenErrorHandler_=u;r&&(document.fullscreenEnabled?d.addEventListener("fullscreenchange",r,!1):document.webkitFullscreenEnabled?d.addEventListener("webkitfullscreenchange",
r,!1):document.mozFullScreenEnabled?document.addEventListener("mozfullscreenchange",r,!1):document.msFullscreenEnabled&&d.addEventListener("msfullscreenchange",r,!1));u&&(document.fullscreenEnabled?d.addEventListener("fullscreenerror",u,!1):document.webkitFullscreenEnabled?d.addEventListener("webkitfullscreenerror",u,!1):document.mozFullScreenEnabled?document.addEventListener("mozfullscreenerror",u,!1):document.msFullscreenEnabled&&d.addEventListener("msfullscreenerror",u,!1))};ka.prototype.removeFullscreenListeners_=
function(){if(this.fullscreenEventTarget_){var d=this.fullscreenEventTarget_;if(this.fullscreenChangeHandler_){var r=this.fullscreenChangeHandler_;d.removeEventListener("fullscreenchange",r,!1);d.removeEventListener("webkitfullscreenchange",r,!1);document.removeEventListener("mozfullscreenchange",r,!1);d.removeEventListener("msfullscreenchange",r,!1)}this.fullscreenErrorHandler_&&(r=this.fullscreenErrorHandler_,d.removeEventListener("fullscreenerror",r,!1),d.removeEventListener("webkitfullscreenerror",
r,!1),document.removeEventListener("mozfullscreenerror",r,!1),d.removeEventListener("msfullscreenerror",r,!1));this.fullscreenErrorHandler_=this.fullscreenChangeHandler_=this.fullscreenEventTarget_=null}};ka.prototype.enableWakeLock=function(){this.wakelock_&&this.wakelock_.enable()};ka.prototype.disableWakeLock=function(){this.wakelock_&&this.wakelock_.disable()};ka.prototype.beginPresent_=function(){};ka.prototype.endPresent_=function(){};ka.prototype.submitFrame=function(d){};ka.prototype.getEyeParameters=
function(d){return null};var Dc={ADDITIONAL_VIEWERS:[],DEFAULT_VIEWER:"",MOBILE_WAKE_LOCK:!0,DEBUG:!1,DPDB_URL:"https://dpdb.webvr.rocks/dpdb.json",K_FILTER:.98,PREDICTION_TIME_S:.04,CARDBOARD_UI_DISABLED:!1,ROTATE_INSTRUCTIONS_DISABLED:!1,YAW_ONLY:!1,BUFFER_SCALE:.5,DIRTY_SUBMIT_FRAME_BINDINGS:!1};da.prototype=Object.create(ka.prototype);da.prototype._getPose=function(){return{position:null,orientation:this.poseSensor_.getOrientation(),linearVelocity:null,linearAcceleration:null,angularVelocity:null,
angularAcceleration:null}};da.prototype._resetPose=function(){this.poseSensor_.resetPose&&this.poseSensor_.resetPose()};da.prototype._getFieldOfView=function(d){if("left"==d)d=this.deviceInfo_.getFieldOfViewLeftEye();else if("right"==d)d=this.deviceInfo_.getFieldOfViewRightEye();else return console.error("Invalid eye provided: %s",d),null;return d};da.prototype._getEyeOffset=function(d){if("left"==d)d=[.5*-this.deviceInfo_.viewer.interLensDistance,0,0];else if("right"==d)d=[.5*this.deviceInfo_.viewer.interLensDistance,
0,0];else return console.error("Invalid eye provided: %s",d),null;return d};da.prototype.getEyeParameters=function(d){var r=this._getEyeOffset(d),u=this._getFieldOfView(d);d={offset:r,renderWidth:.5*this.deviceInfo_.device.width*this.bufferScale_,renderHeight:this.deviceInfo_.device.height*this.bufferScale_};Object.defineProperty(d,"fieldOfView",{enumerable:!0,get:function(){cb("VRFieldOfView","VRFrameData's projection matrices");return u}});return d};da.prototype.onDeviceParamsUpdated_=function(d){this.config.DEBUG&&
console.log("DPDB reported that device params were updated.");this.deviceInfo_.updateDeviceParams(d);this.distorter_&&this.distorter_.updateDeviceInfo(this.deviceInfo_)};da.prototype.updateBounds_=function(){this.layer_&&this.distorter_&&(this.layer_.leftBounds||this.layer_.rightBounds)&&this.distorter_.setTextureBounds(this.layer_.leftBounds,this.layer_.rightBounds)};da.prototype.beginPresent_=function(){var d=this.layer_.source.getContext("webgl");d||(d=this.layer_.source.getContext("experimental-webgl"));
d||(d=this.layer_.source.getContext("webgl2"));d&&(this.layer_.predistorted?this.config.CARDBOARD_UI_DISABLED||(d.canvas.width=gb()*this.bufferScale_,d.canvas.height=hb()*this.bufferScale_,this.cardboardUI_=new B(d)):(this.config.CARDBOARD_UI_DISABLED||(this.cardboardUI_=new B(d)),this.distorter_=new y(d,this.cardboardUI_,this.config.BUFFER_SCALE,this.config.DIRTY_SUBMIT_FRAME_BINDINGS),this.distorter_.updateDeviceInfo(this.deviceInfo_)),this.cardboardUI_&&this.cardboardUI_.listen(function(r){this.viewerSelector_.show(this.layer_.source.parentElement);
r.stopPropagation();r.preventDefault()}.bind(this),function(r){this.exitPresent();r.stopPropagation();r.preventDefault()}.bind(this)),this.rotateInstructions_&&(va()&&Lb()?this.rotateInstructions_.showTemporarily(3E3,this.layer_.source.parentElement):this.rotateInstructions_.update()),this.orientationHandler=this.onOrientationChange_.bind(this),window.addEventListener("orientationchange",this.orientationHandler),this.vrdisplaypresentchangeHandler=this.updateBounds_.bind(this),window.addEventListener("vrdisplaypresentchange",
this.vrdisplaypresentchangeHandler),this.fireVRDisplayDeviceParamsChange_())};da.prototype.endPresent_=function(){this.distorter_&&(this.distorter_.destroy(),this.distorter_=null);this.cardboardUI_&&(this.cardboardUI_.destroy(),this.cardboardUI_=null);this.rotateInstructions_&&this.rotateInstructions_.hide();this.viewerSelector_.hide();window.removeEventListener("orientationchange",this.orientationHandler);window.removeEventListener("vrdisplaypresentchange",this.vrdisplaypresentchangeHandler)};da.prototype.updatePresent_=
function(){this.endPresent_();this.beginPresent_()};da.prototype.submitFrame=function(d){if(this.distorter_)this.updateBounds_(),this.distorter_.submitFrame();else if(this.cardboardUI_&&this.layer_){(d=this.layer_.source.getContext("webgl"))||(d=this.layer_.source.getContext("experimental-webgl"));d||(d=this.layer_.source.getContext("webgl2"));d=d.canvas;if(d.width!=this.lastWidth||d.height!=this.lastHeight)this.cardboardUI_.onResize();this.lastWidth=d.width;this.lastHeight=d.height;this.cardboardUI_.render()}};
da.prototype.onOrientationChange_=function(d){this.viewerSelector_.hide();this.rotateInstructions_&&this.rotateInstructions_.update();this.onResize_()};da.prototype.onResize_=function(d){this.layer_&&((d=this.layer_.source.getContext("webgl"))||(d=this.layer_.source.getContext("experimental-webgl")),d||(d=this.layer_.source.getContext("webgl2")),d.canvas.setAttribute("style","position: absolute; top: 0; left: 0; width: 100vw; height: 100vh; border: 0; margin: 0; padding: 0px; box-sizing: content-box;"),
Mb(d.canvas))};da.prototype.onViewerChanged_=function(d){this.deviceInfo_.setViewer(d);this.distorter_&&this.distorter_.updateDeviceInfo(this.deviceInfo_);this.fireVRDisplayDeviceParamsChange_()};da.prototype.fireVRDisplayDeviceParamsChange_=function(){var d=new CustomEvent("vrdisplaydeviceparamschange",{detail:{vrdisplay:this,deviceInfo:this.deviceInfo_}});window.dispatchEvent(d)};da.VRFrameData=function(){this.leftProjectionMatrix=new Float32Array(16);this.leftViewMatrix=new Float32Array(16);this.rightProjectionMatrix=
new Float32Array(16);this.rightViewMatrix=new Float32Array(16);this.pose=null};da.VRDisplay=ka;return da})}));class jc extends aa{constructor(e){super();this.global=e;this.onWindowResize=this.onWindowResize.bind(this);this.global.window.addEventListener("resize",this.onWindowResize);this.environmentBlendMode="opaque"}onBaseLayerSet(e,p){throw Error("Not implemented");}isSessionSupported(e){throw Error("Not implemented");}isFeatureSupported(e){throw Error("Not implemented");}async requestSession(e,
p){throw Error("Not implemented");}requestAnimationFrame(e){throw Error("Not implemented");}onFrameStart(e){throw Error("Not implemented");}onFrameEnd(e){throw Error("Not implemented");}doesSessionSupportReferenceSpace(e,p){throw Error("Not implemented");}requestStageBounds(){throw Error("Not implemented");}async requestFrameOfReferenceTransform(e,p){}cancelAnimationFrame(e){throw Error("Not implemented");}endSession(e){throw Error("Not implemented");}getViewport(e,p,y,B){throw Error("Not implemented");
}getProjectionMatrix(e){throw Error("Not implemented");}getBasePoseMatrix(){throw Error("Not implemented");}getBaseViewMatrix(e){throw Error("Not implemented");}getInputSources(){throw Error("Not implemented");}getInputPose(e,p,y){throw Error("Not implemented");}onWindowResize(){this.onWindowResize()}}let kc={mapping:"xr-standard",displayProfiles:{"Oculus Quest":["oculus-touch-v2","oculus-touch","generic-trigger-squeeze-thumbstick"]},profiles:["oculus-touch","generic-trigger-squeeze-thumbstick"],
axes:{length:4,0:null,1:null,2:0,3:1},buttons:{length:7,0:1,1:2,2:null,3:0,4:3,5:4,6:null},gripTransform:{position:[0,-.02,.04,1],orientation:[.11*Math.PI,0,0,1]}},Pb={mapping:"xr-standard",profiles:["microsoft-mixed-reality","generic-trigger-squeeze-touchpad-thumbstick"],buttons:{length:4,0:1,1:0,2:2,3:4},gripTransform:{position:[0,-.02,.04,1],orientation:[.11*Math.PI,0,0,1]}},Rc={"Daydream Controller":{mapping:"",profiles:["google-daydream","generic-trigger-touchpad"],buttons:{length:3,0:null,1:null,
2:0}},"Gear VR Controller":{mapping:"xr-standard",profiles:["samsung-gearvr","generic-trigger-touchpad"],buttons:{length:3,0:1,1:null,2:0},gripTransform:{orientation:[.11*Math.PI,0,0,1]}},"HTC Vive Focus Controller":{mapping:"xr-standard",profiles:["htc-vive-focus","generic-trigger-touchpad"],buttons:{length:3,0:1,1:null,2:0}},"Oculus Go Controller":{mapping:"xr-standard",profiles:["oculus-go","generic-trigger-touchpad"],buttons:{length:3,0:1,1:null,2:0},gripTransform:{orientation:[.11*Math.PI,0,
0,1]}},"Oculus Touch (Right)":kc,"Oculus Touch (Left)":kc,"OpenVR Gamepad":{mapping:"xr-standard",profiles:["htc-vive","generic-trigger-squeeze-touchpad"],displayProfiles:{"HTC Vive":["htc-vive","generic-trigger-squeeze-touchpad"],"HTC Vive DVT":["htc-vive","generic-trigger-squeeze-touchpad"],"Valve Index":["valve-index","generic-trigger-squeeze-touchpad-thumbstick"]},buttons:{length:3,0:1,1:2,2:0},gripTransform:{position:[0,0,.05,1]},targetRayTransform:{orientation:[-.08*Math.PI,0,0,1]},userAgentOverrides:{Firefox:{axes:{invert:[1,
3]}}}},"Spatial Controller (Spatial Interaction Source) 045E-065A":Pb,"Spatial Controller (Spatial Interaction Source) 045E-065D":{mapping:"xr-standard",profiles:["samsung-odyssey","microsoft-mixed-reality","generic-trigger-squeeze-touchpad-thumbstick"],buttons:{length:4,0:1,1:0,2:2,3:4},gripTransform:{position:[0,-.02,.04,1],orientation:[.11*Math.PI,0,0,1]}},"Windows Mixed Reality (Right)":Pb,"Windows Mixed Reality (Left)":Pb};const lc=v(.155,-.465,-.15),Sc=v(-.155,-.465,-.15),Tc=v(0,0,-.25),Uc=
v(0,0,.05),mc=v(-.08,.14,.08),nc=180/Math.PI;class Vc{constructor(){this.hand="right";this.headElbowOffset=lc;this.controllerQ=C();this.lastControllerQ=C();this.headQ=C();this.headPos=a();this.elbowPos=a();this.wristPos=a();this.lastTime=this.time=null;this.rootQ=C();this.position=a()}setHandedness(e){this.hand!=e&&(this.hand=e,this.headElbowOffset="left"==this.hand?Sc:lc)}update(e,p){this.time=Qb();e&&(Ca(this.lastControllerQ,this.controllerQ),Ca(this.controllerQ,e));p&&(F(this.headPos,p),h(this.headQ,
p));e=this.getHeadYawOrientation_();p=this.quatAngle_(this.lastControllerQ,this.controllerQ);.61<p/((this.time-this.lastTime)/1E3)?O(this.rootQ,this.rootQ,e,Math.min(p/.175,1)):Ca(this.rootQ,e);e=v(0,0,-1);t(e,e,this.controllerQ);e=l(e,[0,1,0]);e=this.clamp_((e-.12)/.87,0,1);var y=ia(this.rootQ);R(y,y);I(y,y,this.controllerQ);p=this.elbowPos;x(p,this.headPos);b(p,p,this.headElbowOffset);var B=k(mc);c(B,B,e);b(p,p,B);B=this.quatAngle_(y,C())*nc;var H=(1-Math.pow(B/180,4))*(.4+.24*e);B=C();O(B,B,y,
H);H=R(C(),B);y=ia(y);I(y,y,H);H=this.wristPos;x(H,Uc);t(H,H,B);b(H,H,Tc);t(H,H,y);b(H,H,p);p=k(mc);c(p,p,e);b(this.position,this.wristPos,p);t(this.position,this.position,this.rootQ);this.lastTime=this.time}getPosition(){return this.position}getHeadYawOrientation_(){var e=a();P(e,this.headQ,"YXZ");var p=C(),y=e[1]*nc;e=.5*Math.PI/180;var B=0*e;y*=e;var H=0*e;e=Math.sin(B);B=Math.cos(B);let L=Math.sin(y);y=Math.cos(y);let M=Math.sin(H);H=Math.cos(H);p[0]=e*y*H-B*L*M;p[1]=B*L*H+e*y*M;p[2]=B*y*M-e*
L*H;p[3]=B*y*H+e*L*M;return p}clamp_(e,p,y){return Math.min(Math.max(e,p),y)}quatAngle_(e,p){let y=[0,0,-1];var B=[0,0,-1];t(y,y,e);t(B,B,p);e=v(y[0],y[1],y[2]);B=v(B[0],B[1],B[2]);m(e,e);m(B,B);B=l(e,B);B=1<B?0:-1>B?Math.PI:Math.acos(B);return B}}const Ja=Symbol("@@webxr-polyfill/XRRemappedGamepad"),oc={pressed:!1,touched:!1,value:0};Object.freeze(oc);class Wc{constructor(e,p,y){y||(y={});if(y.userAgentOverrides)for(var B in y.userAgentOverrides)if(navigator.userAgent.includes(B)){B=y.userAgentOverrides[B];
for(var H in B)H in y?Object.assign(y[H],B[H]):y[H]=B[H];break}H=Array(y.axes&&y.axes.length?y.axes.length:e.axes.length);B=Array(y.buttons&&y.buttons.length?y.buttons.length:e.buttons.length);let L=null;if(y.gripTransform){var M=y.gripTransform.orientation||[0,0,0,1];L=f();N(L,za(M,M),y.gripTransform.position||[0,0,0])}M=null;if(y.targetRayTransform){var T=y.targetRayTransform.orientation||[0,0,0,1];M=f();N(M,za(T,T),y.targetRayTransform.position||[0,0,0])}T=y.profiles;y.displayProfiles&&p.displayName in
y.displayProfiles&&(T=y.displayProfiles[p.displayName]);this[Ja]={gamepad:e,map:y,profiles:T||[e.id],mapping:y.mapping||e.mapping,axes:H,buttons:B,gripTransform:L,targetRayTransform:M};this._update()}_update(){let e=this[Ja].gamepad,p=this[Ja].map;var y=this[Ja].axes;for(var B=0;B<y.length;++B)y[B]=p.axes&&B in p.axes?null===p.axes[B]?0:e.axes[p.axes[B]]:e.axes[B];if(p.axes&&p.axes.invert)for(let H of p.axes.invert)H<y.length&&(y[H]*=-1);y=this[Ja].buttons;for(B=0;B<y.length;++B)y[B]=p.buttons&&B in
p.buttons?null===p.buttons[B]?oc:e.buttons[p.buttons[B]]:e.buttons[B]}get id(){return""}get _profiles(){return this[Ja].profiles}get index(){return-1}get connected(){return this[Ja].gamepad.connected}get timestamp(){return this[Ja].gamepad.timestamp}get mapping(){return this[Ja].mapping}get axes(){return this[Ja].axes}get buttons(){return this[Ja].buttons}get hapticActuators(){return this[Ja].gamepad.hapticActuators}}class Xc{constructor(e,p,y=0,B=-1){this.polyfill=e;this.display=p;this.gamepad=this.nativeGamepad=
null;this.inputSource=new $b(this);this.lastPosition=a();this.emulatedPosition=!1;this.basePoseMatrix=f();this.outputMatrix=f();this.primaryButtonIndex=y;this.primaryActionPressed=!1;this.primarySqueezeButtonIndex=B;this.primarySqueezeActionPressed=!1;this.handedness="";this.targetRayMode="gaze";this.armModel=null}get profiles(){return this.gamepad?this.gamepad._profiles:[]}updateFromGamepad(e){this.nativeGamepad!==e&&(this.gamepad=(this.nativeGamepad=e)?new Wc(e,this.display,Rc[e.id]):null);this.handedness=
""===e.hand?"none":e.hand;this.gamepad&&this.gamepad._update();e.pose?(this.targetRayMode="tracked-pointer",this.emulatedPosition=!e.pose.hasPosition):""===e.hand&&(this.targetRayMode="gaze",this.emulatedPosition=!1)}updateBasePoseMatrix(){if(this.nativeGamepad&&this.nativeGamepad.pose){var e=this.nativeGamepad.pose,p=e.position;let y=e.orientation;if(!p&&!y)return;p?(this.lastPosition[0]=p[0],this.lastPosition[1]=p[1],this.lastPosition[2]=p[2]):e.hasPosition?p=this.lastPosition:(this.armModel||(this.armModel=
new Vc),this.armModel.setHandedness(this.nativeGamepad.hand),this.armModel.update(y,this.polyfill.getBasePoseMatrix()),p=this.armModel.getPosition());N(this.basePoseMatrix,y,p)}else e=this.basePoseMatrix,p=this.polyfill.getBasePoseMatrix(),e[0]=p[0],e[1]=p[1],e[2]=p[2],e[3]=p[3],e[4]=p[4],e[5]=p[5],e[6]=p[6],e[7]=p[7],e[8]=p[8],e[9]=p[9],e[10]=p[10],e[11]=p[11],e[12]=p[12],e[13]=p[13],e[14]=p[14],e[15]=p[15];return this.basePoseMatrix}getXRPose(e,p){this.updateBasePoseMatrix();switch(p){case "target-ray":e._transformBasePoseMatrix(this.outputMatrix,
this.basePoseMatrix);this.gamepad&&this.gamepad[Ja].targetRayTransform&&K(this.outputMatrix,this.outputMatrix,this.gamepad[Ja].targetRayTransform);break;case "grip":if(!this.nativeGamepad||!this.nativeGamepad.pose)return null;e._transformBasePoseMatrix(this.outputMatrix,this.basePoseMatrix);this.gamepad&&this.gamepad[Ja].gripTransform&&K(this.outputMatrix,this.outputMatrix,this.gamepad[Ja].gripTransform);break;default:return null}e._adjustForOriginOffset(this.outputMatrix);return new XRPose(new XRRigidTransform(this.outputMatrix),
this.emulatedPosition)}}const pc={highRefreshRate:!0},qc={oculus:1,openvr:1,"spatial controller (spatial interaction source)":1};let Yc=0;class Zc{constructor(e,p,y={}){this.mode=e;this.enabledFeatures=p;this.outputContext=null;this.immersive="immersive-vr"==e||"immersive-ar"==e;this.baseLayer=this.ended=null;this.id=++Yc;this.modifiedCanvasLayer=!1;this.outputContext&&(this.renderContext=this.outputContext.canvas.getContext(y.renderContextType||"2d"))}}class rc extends jc{constructor(e,p){const {canPresent:y}=
p.capabilities;super(e);this.display=p;this.frame=new e.VRFrameData;this.sessions=new Map;this.immersiveSession=null;this.canPresent=y;this.baseModelMatrix=f();this.gamepadInputSources={};this.tempVec3=new Float32Array(3);this.onVRDisplayPresentChange=this.onVRDisplayPresentChange.bind(this);e.window.addEventListener("vrdisplaypresentchange",this.onVRDisplayPresentChange);this.CAN_USE_GAMEPAD=e.navigator&&"getGamepads"in e.navigator;this.HAS_BITMAP_SUPPORT=!(!e.ImageBitmapRenderingContext||!e.createImageBitmap)}get depthNear(){return this.display.depthNear}set depthNear(e){this.display.depthNear=
e}get depthFar(){return this.display.depthFar}set depthFar(e){this.display.depthFar=e}onBaseLayerSet(e,p){const y=this.sessions.get(e),B=p.context.canvas;if(y.immersive){e=this.display.getEyeParameters("left");const H=this.display.getEyeParameters("right");B.width=2*Math.max(e.renderWidth,H.renderWidth);B.height=Math.max(e.renderHeight,H.renderHeight);this.display.requestPresent([{source:B,attributes:pc}]).then(()=>{this.global.document.body.contains(B)||(y.modifiedCanvasLayer=!0,this.global.document.body.appendChild(B),
B.style.display="block",B.style.position="absolute",B.style.width=B.style.height="1px",B.style.top=B.style.left="0px");y.baseLayer=p})}else y.baseLayer=p}isSessionSupported(e){return"immersive-ar"==e||"immersive-vr"==e&&!1===this.canPresent?!1:!0}isFeatureSupported(e){switch(e){case "viewer":return!0;case "local":return!0;case "local-floor":return!0;case "bounded":return!1;case "unbounded":return!1;default:return!1}}async requestSession(e,p){if(!this.isSessionSupported(e))return Promise.reject();
let y="immersive-vr"==e;if(y){const B=this.global.document.createElement("canvas");B.getContext("webgl");await this.display.requestPresent([{source:B,attributes:pc}])}e=new Zc(e,p,{renderContextType:this.HAS_BITMAP_SUPPORT?"bitmaprenderer":"2d"});this.sessions.set(e.id,e);y&&(this.immersiveSession=e,this.dispatchEvent("@@webxr-polyfill/vr-present-start",e.id));return Promise.resolve(e.id)}requestAnimationFrame(e){return this.display.requestAnimationFrame(e)}getPrimaryButtonIndex(e){let p=0,y=e.id.toLowerCase();
for(let B in qc)if(y.includes(B)){p=qc[B];break}return Math.min(p,e.buttons.length-1)}onFrameStart(e,p){this.display.depthNear=p.depthNear;this.display.depthFar=p.depthFar;this.display.getFrameData(this.frame);e=this.sessions.get(e);if(e.immersive&&this.CAN_USE_GAMEPAD){let B=this.gamepadInputSources;this.gamepadInputSources={};let H=this.global.navigator.getGamepads();for(let L=0;L<H.length;++L){var y=H[L];if(y&&0<y.displayId){let M=B[L];M||(M=new Xc(this,this.display,this.getPrimaryButtonIndex(y)));
M.updateFromGamepad(y);this.gamepadInputSources[L]=M;if(-1!=M.primaryButtonIndex){let T=y.buttons[M.primaryButtonIndex].pressed;T&&!M.primaryActionPressed?this.dispatchEvent("@@webxr-polyfill/input-select-start",{sessionId:e.id,inputSource:M.inputSource}):!T&&M.primaryActionPressed&&this.dispatchEvent("@@webxr-polyfill/input-select-end",{sessionId:e.id,inputSource:M.inputSource});M.primaryActionPressed=T}-1!=M.primarySqueezeButtonIndex&&((y=y.buttons[M.primarySqueezeButtonIndex].pressed)&&!M.primarySqueezeActionPressed?
this.dispatchEvent("@@webxr-polyfill/input-squeeze-start",{sessionId:e.id,inputSource:M.inputSource}):!y&&M.primarySqueezeActionPressed&&this.dispatchEvent("@@webxr-polyfill/input-squeeze-end",{sessionId:e.id,inputSource:M.inputSource}),M.primarySqueezeActionPressed=y)}}}!e.immersive&&e.baseLayer&&(e=e.baseLayer.context.canvas,q(this.frame.leftProjectionMatrix,p.inlineVerticalFieldOfView,e.width/e.height,p.depthNear,p.depthFar))}onFrameEnd(e){e=this.sessions.get(e);if(!e.ended&&e.baseLayer){if(e.outputContext&&
(!e.immersive||this.display.capabilities.hasExternalDisplay)){const y=e.baseLayer.context.canvas,B=e.immersive&&this.display.capabilities.hasExternalDisplay?y.width/2:y.width,H=y.height;var p=e.outputContext.canvas;const L=p.width;p=p.height;const M=e.renderContext;this.HAS_BITMAP_SUPPORT?y.transferToImageBitmap?M.transferFromImageBitmap(y.transferToImageBitmap()):this.global.createImageBitmap(y,0,0,B,H,{resizeWidth:L,resizeHeight:p}).then(T=>M.transferFromImageBitmap(T)):M.drawImage(y,0,0,B,H,0,
0,L,p)}e.immersive&&e.baseLayer&&this.display.submitFrame()}}cancelAnimationFrame(e){this.display.cancelAnimationFrame(e)}async endSession(e){e=this.sessions.get(e);if(!e.ended){if(e.immersive)return this.display.exitPresent();e.ended=!0}}doesSessionSupportReferenceSpace(e,p){e=this.sessions.get(e);return e.ended?!1:e.enabledFeatures.has(p)}requestStageBounds(){if(this.display.stageParameters){const e=this.display.stageParameters.sizeX,p=this.display.stageParameters.sizeZ,y=[];y.push(-e/2);y.push(-p/
2);y.push(e/2);y.push(-p/2);y.push(e/2);y.push(p/2);y.push(-e/2);y.push(p/2);return y}return null}async requestFrameOfReferenceTransform(e,p){return("local-floor"===e||"bounded-floor"===e)&&this.display.stageParameters&&this.display.stageParameters.sittingToStandingTransform?this.display.stageParameters.sittingToStandingTransform:null}getProjectionMatrix(e){if("left"===e)return this.frame.leftProjectionMatrix;if("right"===e)return this.frame.rightProjectionMatrix;if("none"===e)return this.frame.leftProjectionMatrix;
throw Error("eye must be of type 'left' or 'right'");}getViewport(e,p,y,B){e=this.sessions.get(e);const {width:H,height:L}=y.context.canvas;if(!e.immersive)return B.x=B.y=0,B.width=H,B.height=L,!0;if("left"===p||"none"===p)B.x=0;else if("right"===p)B.x=H/2;else return!1;B.y=0;B.width=H/2;B.height=L;return!0}getBasePoseMatrix(){let {position:e,orientation:p}=this.frame.pose;if(!e&&!p)return this.baseModelMatrix;e||(e=this.tempVec3,e[0]=e[1]=e[2]=0);N(this.baseModelMatrix,p,e);return this.baseModelMatrix}getBaseViewMatrix(e){if("left"===
e||"none"===e)return this.frame.leftViewMatrix;if("right"===e)return this.frame.rightViewMatrix;throw Error("eye must be of type 'left' or 'right'");}getInputSources(){let e=[];for(let p in this.gamepadInputSources)e.push(this.gamepadInputSources[p].inputSource);return e}getInputPose(e,p,y){if(!p)return null;for(let B in this.gamepadInputSources){let H=this.gamepadInputSources[B];if(H.inputSource===e)return H.getXRPose(p,y)}return null}onWindowResize(){}onVRDisplayPresentChange(e){this.display.isPresenting||
this.sessions.forEach(p=>{if(p.immersive&&!p.ended){if(p.modifiedCanvasLayer){const y=p.baseLayer.context.canvas;document.body.removeChild(y);y.setAttribute("style","")}this.immersiveSession===p&&(this.immersiveSession=null);this.dispatchEvent("@@webxr-polyfill/vr-present-end",p.id)}})}}class $c extends rc{constructor(e,p){p=new Qc(p||{});super(e,p);this.display=p;this.frame={rightViewMatrix:new Float32Array(16),leftViewMatrix:new Float32Array(16),rightProjectionMatrix:new Float32Array(16),leftProjectionMatrix:new Float32Array(16),
pose:null,timestamp:null}}}let ad=0;class bd{constructor(e,p){this.mode=e;this.enabledFeatures=p;this.baseLayer=this.ended=null;this.id=++ad}}class cd extends jc{constructor(e){super(e);this.sessions=new Map;this.projectionMatrix=f();this.identityMatrix=f()}onBaseLayerSet(e,p){this.sessions.get(e).baseLayer=p}isSessionSupported(e){return"inline"==e}isFeatureSupported(e){switch(e){case "viewer":return!0;default:return!1}}async requestSession(e,p){if(!this.isSessionSupported(e))return Promise.reject();
e=new bd(e,p);this.sessions.set(e.id,e);return Promise.resolve(e.id)}requestAnimationFrame(e){return window.requestAnimationFrame(e)}cancelAnimationFrame(e){window.cancelAnimationFrame(e)}onFrameStart(e,p){e=this.sessions.get(e);e.baseLayer&&(e=e.baseLayer.context.canvas,q(this.projectionMatrix,p.inlineVerticalFieldOfView,e.width/e.height,p.depthNear,p.depthFar))}onFrameEnd(e){}async endSession(e){this.sessions.get(e).ended=!0}doesSessionSupportReferenceSpace(e,p){e=this.sessions.get(e);return e.ended?
!1:e.enabledFeatures.has(p)}requestStageBounds(){return null}async requestFrameOfReferenceTransform(e,p){return null}getProjectionMatrix(e){return this.projectionMatrix}getViewport(e,p,y,B){this.sessions.get(e);const {width:H,height:L}=y.context.canvas;B.x=B.y=0;B.width=H;B.height=L;return!0}getBasePoseMatrix(){return this.identityMatrix}getBaseViewMatrix(e){return this.identityMatrix}getInputSources(){return[]}getInputPose(e,p,y){return null}onWindowResize(){}}const dd=async function(e){let p=null;
if("getVRDisplays"in e.navigator)try{const y=await e.navigator.getVRDisplays();y&&y.length&&(p=new rc(e,y[0]))}catch(y){}return p},ed=async function(e,p){if(p.webvr){var y=await dd(e);if(y)return y}return(y=zc(e))&&p.cardboard||!y&&p.allowCardboardOnDesktop?(e.VRFrameData||(e.VRFrameData=function(){this.rightViewMatrix=new Float32Array(16);this.leftViewMatrix=new Float32Array(16);this.rightProjectionMatrix=new Float32Array(16);this.leftProjectionMatrix=new Float32Array(16);this.pose=null}),new $c(e,
p.cardboardConfig)):new cd(e)},fd={global:X,webvr:!0,cardboard:!0,cardboardConfig:null,allowCardboardOnDesktop:!1},xb=["navigator","HTMLCanvasElement","WebGLRenderingContext"];class gd{constructor(e={}){this.config=Object.freeze(Object.assign({},fd,e));this.global=this.config.global;this.nativeWebXR="xr"in this.global.navigator;this.injected=!1;this.nativeWebXR?this._injectCompatibilityShims(this.global):this._injectPolyfill(this.global)}_injectPolyfill(e){if(!xb.every(p=>!!e[p]))throw Error(`Global must have the following attributes : ${xb}`);
for(const p of Object.keys(Ib))void 0!==e[p]?console.warn(`${p} already defined on global.`):e[p]=Ib[p];bc(e.WebGLRenderingContext)&&(cc(e.HTMLCanvasElement),e.OffscreenCanvas&&cc(e.OffscreenCanvas),e.WebGL2RenderingContext&&bc(e.WebGL2RenderingContext),window.isSecureContext||console.warn("WebXR Polyfill Warning:\nThis page is not running in a secure context (https:// or localhost)!\nThis means that although the page may be able to use the WebXR Polyfill it will\nnot be able to use native WebXR implementations, and as such will not be able to\naccess dedicated VR or AR hardware, and will not be able to take advantage of\nany performance improvements a native WebXR implementation may offer. Please\nhost this content on a secure origin for the best user experience.\n"));
this.injected=!0;this._patchNavigatorXR()}_patchNavigatorXR(){let e=ed(this.global,this.config);this.xr=new Ib.XRSystem(e);Object.defineProperty(this.global.navigator,"xr",{value:this.xr,configurable:!0})}_injectCompatibilityShims(e){if(!xb.every(p=>!!e[p]))throw Error(`Global must have the following attributes : ${xb}`);if(e.navigator.xr&&"supportsSession"in e.navigator.xr&&!("isSessionSupported"in e.navigator.xr)){let p=e.navigator.xr.supportsSession;e.navigator.xr.isSessionSupported=function(y){return p.call(this,
y).then(()=>!0).catch(()=>!1)};e.navigator.xr.supportsSession=function(y){console.warn("navigator.xr.supportsSession() is deprecated. Please call navigator.xr.isSessionSupported() instead and check the boolean value returned when the promise resolves.");return p.call(this,y)}}}}return gd});function nestedArrayToCSList(f){return Array.isArray(f)?{ctype:"list",value:f.map(g=>nestedArrayToCSList(g))}:{ctype:"number",value:{real:f,imag:0}}}
function convertObjectToCindyDict(f,g,G){if(f instanceof Object&&G.has(f))return G.get(f);if(Array.isArray(f)){let F=[];f.forEach(function(h){h=convertObjectToCindyDict(h,g,G);null!=h&&F.push(h)});return{ctype:"list",value:F}}if("string"===typeof f||f instanceof String)return{ctype:"string",value:f};if("number"===typeof f&&isFinite(f))return{ctype:"number",value:{real:f,imag:0}};if("boolean"===typeof f)return{ctype:"boolean",value:f};if(null===f||"undefined"===typeof f||"function"===typeof f)return null;
let K={},N=new Map(G);N.set(f,K);for(let F in f)if(!g.has(F)&&f.hasOwnProperty(F)){let h=convertObjectToCindyDict(f[F],g,N);K[F]=h}return{ctype:"JSON",value:K}};let CindyXR=function(f){function g(h,q){let a,k;for(a in h)(k=q[a])?k(K(h[a])):console.log("Modifier "+a+" not supported")}let G=f.nada,K=f.evaluate,N=f.defineFunction,F="Cindy3D";N("initxrcindy3d",0,function(h,q){xrCindyPluginMode="Cindy3D";let a=800,k=!0;g(q,{instancename:v=>F=coerce.toString(v,"Cindy3D"),referencemode:v=>xrSetReferenceMode(coerce.toString(v,"local-floor")),scaling:v=>xrSetScalingFactor(coerce.toReal(v,1)),canvaswidth:v=>a=coerce.toReal(v,800),canvasheight:v=>a=coerce.toReal(v,
600),hidecanvas:v=>k=coerce.toBool(v,!0)});f.evaluate({ctype:"function",oper:"begin3d$0",args:[{ctype:"string",value:F}],modifs:{}});initXR(f,CindyJS._pluginRegistry.Cindy3D.instances[F].gl,a,600,k);f.evaluate({ctype:"function",oper:"end3d$0",args:[],modifs:{}});return G});N("initxrcindygl",0,function(h,q){xrCindyPluginMode="CindyGL";let a=800,k=!0;g(q,{referencemode:v=>xrSetReferenceMode(coerce.toString(v,"local-floor")),scaling:v=>xrSetScalingFactor(coerce.toReal(v,1)),canvaswidth:v=>a=coerce.toReal(v,
800),canvasheight:v=>a=coerce.toReal(v,600),hidecanvas:v=>k=coerce.toBool(v,!0)});CindyJS._pluginRegistry.CindyGL.initGLIfRequired();initXR(f,CindyJS._pluginRegistry.CindyGL.gl,a,600,k);return G});N("xr",1,function(h,q){setRenderFunction(function(){f.evaluate(h[0])});return G});N("getxrnumviews",0,function(h,q){return{ctype:"number",value:{real:xrGetNumViews(),imag:0}}});N("getxrviewportsize",1,function(h,q){h=f.evaluate(h[0]).value.real;return nestedArrayToCSList(xrGetViewportSize(h).slice(2,4))});
N("getxrviewmatrix",1,function(h,q){h=f.evaluate(h[0]).value.real;return nestedArrayToCSList(flatMatrix4ToNestedMatrix4RowMajor(xrGetViewMatrix(h)))});N("getxrprojectionmatrix",1,function(h,q){h=f.evaluate(h[0]).value.real;return nestedArrayToCSList(flatMatrix4ToNestedMatrix4ColumnMajor(xrGetProjectionMatrix(h)))});N("getxrbounds",0,function(h,q){return nestedArrayToCSList(xrGetBoundsLine())});N("getxrinputsources",0,function(h,q){return convertObjectToCindyDict(xrFilterInputSourceArray(xrGetInputSources()),
new Set([]),new Map)})};CindyXR.xrGetNumViews=xrGetNumViews;CindyXR.xrGetFramebuffer=xrGetFramebuffer;CindyXR.xrGetViewportSize=xrGetViewportSize;CindyXR.xrGetViewMatrix=xrGetViewMatrix;CindyXR.xrGetProjectionMatrix=xrGetProjectionMatrix;CindyXR.xrPreRender=xrPreRender;CindyXR.xrPostRender=xrPostRender;CindyXR.xrUpdateCindy3DCamera=xrUpdateCindy3DCamera;CindyXR.xrUpdateCindyGLView=xrUpdateCindyGLView;CindyJS.registerPlugin(1,"CindyXR",CindyXR);window.XRDeviceButton=function(){let f={};const g=F=>{var h=F.height/3;if(F.injectCSS&&!f[F.cssprefix]){var q=G(F,h),a=document.createElement("style");a.innerHTML=q;q=document.getElementsByTagName("head")[0];q.insertBefore(a,q.firstChild);f[F.cssprefix]=!0}a=document.createElement("div");F=F.cssprefix;h*=.8;q=28/18;a.innerHTML=`<button class="${F}-button">
<div class="${F}-title"></div>
<div class="${F}-logo" >${`<svg class="${F}-svg" version="1.1" x="0px" y="0px"
width="${28/18*h}px" height="${h}px" viewBox="0 0 28 18" xml:space="preserve">
<path d="M26.8,1.1C26.1,0.4,25.1,0,24.2,0H3.4c-1,0-1.7,0.4-2.4,1.1C0.3,1.7,0,2.7,0,3.6v10.7
c0,1,0.3,1.9,0.9,2.6C1.6,17.6,2.4,18,3.4,18h5c0.7,0,1.3-0.2,1.8-0.5c0.6-0.3,1-0.8,1.3-1.4l
1.5-2.6C13.2,13.1,13,13,14,13v0h-0.2 h0c0.3,0,0.7,0.1,0.8,0.5l1.4,2.6c0.3,0.6,0.8,1.1,1.3,
1.4c0.6,0.3,1.2,0.5,1.8,0.5h5c1,0,2-0.4,2.7-1.1c0.7-0.7,1.2-1.6,1.2-2.6 V3.6C28,2.7,27.5,
1.7,26.8,1.1z M7.4,11.8c-1.6,0-2.8-1.3-2.8-2.8c0-1.6,1.3-2.8,2.8-2.8c1.6,0,2.8,1.3,2.8,2.8
C10.2,10.5,8.9,11.8,7.4,11.8z M20.1,11.8c-1.6,0-2.8-1.3-2.8-2.8c0-1.6,1.3-2.8,2.8-2.8C21.7
,6.2,23,7.4,23,9 C23,10.5,21.7,11.8,20.1,11.8z"/>
</svg>`+`<svg class="${F}-svg-error" x="0px" y="0px"
width="${q*h}px" height="${q*h}px" viewBox="0 0 28 28" xml:space="preserve">
<path d="M17.6,13.4c0-0.2-0.1-0.4-0.1-0.6c0-1.6,1.3-2.8,2.8-2.8s2.8,1.3,2.8,2.8s-1.3,2.8-2.8,2.8
c-0.2,0-0.4,0-0.6-0.1l5.9,5.9c0.5-0.2,0.9-0.4,1.3-0.8
c0.7-0.7,1.1-1.6,1.1-2.5V7.4c0-1-0.4-1.9-1.1-2.5c-0.7-0.7-1.6-1-2.5-1
H8.1 L17.6,13.4z"/>
<path d="M10.1,14.2c-0.5,0.9-1.4,1.4-2.4,1.4c-1.6,0-2.8-1.3-2.8-2.8c0-1.1,0.6-2,1.4-2.5
L0.9,5.1 C0.3,5.7,0,6.6,0,7.5v10.7c0,1,0.4,1.8,1.1,2.5c0.7,0.7,1.6,1,2.5,1
h5c0.7,0,1.3-0.1,1.8-0.5c0.6-0.3,1-0.8,1.3-1.4l1.3-2.6 L10.1,14.2z"/>
<path d="M25.5,27.5l-25-25C-0.1,2-0.1,1,0.5,0.4l0,0C1-0.1,2-0.1,2.6,0.4l25,25c0.6,0.6,0.6,1.5
,0,2.1l0,0 C27,28.1,26,28.1,25.5,27.5z"/>
</svg>`}</div>
</button>`;return a.firstChild},G=(F,h=18)=>{const q=F.height,a=F.background?F.background:F.color,k=F.cssprefix;let v;v="round"==F.corners?F.height/2:"square"==F.corners?2:F.corners;return`
@font-face {
font-family: 'Karla';
font-style: normal;
font-weight: 400;
src: local('Karla'), local('Karla-Regular'),
url(https://fonts.gstatic.com/s/karla/v5/31P4mP32i98D9CEnGyeX9Q.woff2) format('woff2');
unicode-range: U+0100-024F, U+1E00-1EFF, U+20A0-20AB, U+20AD-20CF, U+2C60-2C7F, U+A720-A7FF;
}
@font-face {
font-family: 'Karla';
font-style: normal;
font-weight: 400;
src: local('Karla'), local('Karla-Regular'),
url(https://fonts.gstatic.com/s/karla/v5/Zi_e6rBgGqv33BWF8WTq8g.woff2) format('woff2');
unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074,
U+20AC, U+2212, U+2215, U+E0FF, U+EFFD, U+F000;
}
button.${k}-button {
font-family: 'Karla', sans-serif;
border: ${a} ${2}px solid;
border-radius: ${v}px;
box-sizing: border-box;
background: ${F.background?F.background:"none"};
height: ${q}px;
min-width: ${9.6*h}px;
display: inline-block;
position: relative;
cursor: pointer;
}
button.${k}-button:focus {
outline: none;
}
/*
* Logo
*/
.${k}-logo {
width: ${q}px;
height: ${q}px;
position: absolute;
top:0px;
left:0px;
width: ${q-4}px;
height: ${q-4}px;
}
.${k}-svg {
fill: ${F.color};
position: static;
margin-top: ${(q-.8*h)/2-2}px;
margin-left: ${q/3}px;
}
.${k}-svg-error {
fill: ${F.color};
position: static;
display:none;
margin-top: ${(q-28/18*h*.8)/2-2}px;
margin-left: ${q/3}px;
}
/*
* Title
*/
.${k}-title {
color: ${F.color};
position: relative;
font-size: ${h}px;
padding-left: ${1.05*q}px;
padding-right: ${5>v-10?q/3:v-10}px;
}
/*
* disabled
*/
button.${k}-button[disabled=true] {
opacity: ${F.disabledOpacity};
}
button.${k}-button[disabled=true] > .${k}-logo > .${k}-svg {
display:none;
}
button.${k}-button[disabled=true] > .${k}-logo > .${k}-svg-error {
display:initial;
}
`};class K{constructor(F){F=F||{};F.color=F.color||"rgb(80,168,252)";F.background=F.background||!1;F.disabledOpacity=F.disabledOpacity||.5;F.height=F.height||55;F.corners=F.corners||"square";F.cssprefix=F.cssprefix||"webvr-ui";F.textEnterXRTitle=F.textEnterXRTitle||"ENTER VR";F.textXRNotFoundTitle=F.textXRNotFoundTitle||"VR NOT FOUND";F.textExitXRTitle=F.textExitXRTitle||"EXIT VR";F.onRequestSession=F.onRequestSession||function(){};F.onEndSession=F.onEndSession||function(){};F.injectCSS=!1!==F.injectCSS;
this.options=F;this._enabled=!1;this.session=null;this.domElement=F.domElement||g(F);this.__defaultDisplayStyle=this.domElement.style.display||"initial";this.domElement.addEventListener("click",()=>this.__onXRButtonClick());this.__forceDisabled=!1;this.__setDisabledAttribute(!0);this.setTitle(this.options.textXRNotFoundTitle)}set enabled(F){this._enabled=F;this.__updateButtonState();return this}get enabled(){return this._enabled}setSession(F){this.session=F;this.__updateButtonState();return this}setTitle(F){this.domElement.title=
F;N(this.domElement,this.options.cssprefix,"title",h=>{F?(h.innerText=F,h.style.display="initial"):h.style.display="none"});return this}setTooltip(F){this.domElement.title=F;return this}show(){this.domElement.style.display=this.__defaultDisplayStyle;return this}hide(){this.domElement.style.display="none";return this}enable(){this.__setDisabledAttribute(!1);this.__forceDisabled=!1;return this}disable(){this.__setDisabledAttribute(!0);this.__forceDisabled=!0;return this}remove(){this.domElement.parentElement&&
this.domElement.parentElement.removeChild(this.domElement)}__setDisabledAttribute(F){F||this.__forceDisabled?this.domElement.setAttribute("disabled","true"):this.domElement.removeAttribute("disabled")}__onXRButtonClick(){if(this.session)this.options.onEndSession(this.session);else if(this._enabled)this.options.onRequestSession()}__updateButtonState(){this.session?(this.setTitle(this.options.textExitXRTitle),this.setTooltip("Exit XR presentation"),this.__setDisabledAttribute(!1)):this._enabled?(this.setTitle(this.options.textEnterXRTitle),
this.setTooltip("Enter XR"),this.__setDisabledAttribute(!1)):(this.setTitle(this.options.textXRNotFoundTitle),this.setTooltip("No XR headset found."),this.__setDisabledAttribute(!0))}}const N=(F,h,q,a)=>{(F=F.querySelector("."+h+"-"+q))&&a(F)};return K}();const LOOK_SPEED=.0025;
class InlineViewerHelper{constructor(f,g){this.viewerHeight=this.lookPitch=this.lookYaw=0;this.canvas=f;this.refSpace=this.baseRefSpace=g;this.dirty=!1;f.style.cursor="grab";f.addEventListener("mousemove",F=>{F.buttons&1&&this.rotateView(F.movementX,F.movementY)});let G=void 0,K=void 0,N=void 0;f.addEventListener("touchstart",F=>{void 0==G&&(F=F.changedTouches[0],G=F.identifier,K=F.pageX,N=F.pageY)});f.addEventListener("touchend",F=>{for(let h of F.changedTouches)G==h.identifier&&(G=void 0,this.rotateView(h.pageX-
K,h.pageY-N))});f.addEventListener("touchcancel",F=>{for(let h of F.changedTouches)G==h.identifier&&(G=void 0)});f.addEventListener("touchmove",F=>{for(let h of F.changedTouches)G==h.identifier&&(this.rotateView(h.pageX-K,h.pageY-N),K=h.pageX,N=h.pageY)})}setHeight(f){this.viewerHeight!=f&&(this.viewerHeight=f);this.dirty=!0}rotateView(f,g){this.lookYaw+=f*LOOK_SPEED;this.lookPitch+=g*LOOK_SPEED;this.lookPitch<.5*-Math.PI&&(this.lookPitch=.5*-Math.PI);this.lookPitch>.5*Math.PI&&(this.lookPitch=.5*
Math.PI);this.dirty=!0}reset(){this.lookPitch=this.lookYaw=0;this.refSpace=this.baseRefSpace;this.dirty=!1}get referenceSpace(){if(this.dirty){var f=quat.create();quat.rotateX(f,f,-this.lookPitch);quat.rotateY(f,f,-this.lookYaw);f=new XRRigidTransform({},{x:f[0],y:f[1],z:f[2],w:f[3]});this.refSpace=this.baseRefSpace.getOffsetReferenceSpace(f);f=new XRRigidTransform({y:-this.viewerHeight});this.refSpace=this.refSpace.getOffsetReferenceSpace(f);this.dirty=!1}return this.refSpace}};let xrLastFrame=null,xrLastViewerPose=null,renderFunction=null,xrButton=null,xrImmersiveRefSpace=null,inlineViewerHelper=null,xrgl=null,xrCanvasWidth=800,xrCanvasHeight=600,xrHideCanvas=!0,xrInitialized=!1,xrCindyApi=null,xrCindyPluginMode="",xrPolyfill=null;!1==="xr"in navigator&&(console.log("WebXR polyfill loaded."),xrPolyfill=new WebXRPolyfill);let xrScalingFactor=1,xrReferenceMode="local-floor",viewMatrixTmp,projMatrixTmp,mvMatrixTmp;
function xrGetNumViews(){return xrLastViewerPose?xrLastViewerPose.views.length:0}function xrGetFramebuffer(){return xrLastFrame?xrLastFrame.session.renderState.baseLayer.framebuffer:null}function xrGetViewportSize(f){f=xrLastFrame.session.renderState.baseLayer.getViewport(xrLastViewerPose.views[f]);return[f.x,f.y,f.width,f.height]}function xrGetScalingFactor(){return xrScalingFactor}function xrSetScalingFactor(f){useRenderTargetHelpers=1!=f;xrScalingFactor=f}
function xrSetReferenceMode(f){xrReferenceMode=f}function xrGetReferenceSpace(){return xrLastFrame.session.isImmersive?xrImmersiveRefSpace:inlineViewerHelper.referenceSpace}function transpose4(f){return[f[0],f[4],f[8],f[12],f[1],f[5],f[9],f[13],f[2],f[6],f[10],f[14],f[3],f[7],f[11],f[15]]}function float32ArrayToArray(f){let g=[];for(let G=0;G<f.length;G++)g.push(f[G]);return g}function xrGetViewMatrix(f){return transpose4(float32ArrayToArray(xrLastViewerPose.views[f].transform.inverse.matrix))}
function xrGetProjectionMatrix(f){return float32ArrayToArray(xrLastViewerPose.views[f].projectionMatrix)}function setRenderFunction(f){renderFunction=f}function xrPreRender(f,g){viewMatrixTmp=g.viewMatrix.slice();projMatrixTmp=g.projectionMatrix.slice();mvMatrixTmp=g.mvMatrix.slice();useRenderTargetHelpers?recreateRenderTargetHelpersIfNecessary(f):f.bindFramebuffer(f.FRAMEBUFFER,xrGetFramebuffer())}
function xrPostRender(f,g,G,K){g.viewMatrix=viewMatrixTmp.slice();g.projectionMatrix=projMatrixTmp.slice();g.mvMatrix=mvMatrixTmp.slice();useRenderTargetHelpers&&blitHelperFramebuffersFullscreen(f,xrGetFramebuffer())}
function xrUpdateCindy3DCamera(f,g,G){if(useRenderTargetHelpers)bindHelperRenderTarget(f,g);else{let K=xrGetViewportSize(g);f.viewport(K[0],K[1],K[2],K[3])}f=transpose4(xrLastViewerPose.views[g].transform.inverse.matrix);G.projectionMatrix=xrGetProjectionMatrix(g);G.viewMatrix=f;G.modelMatrix=[1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1];G.mvMatrix=mul4mm(G.viewMatrix,G.modelMatrix)}
function xrUpdateCindyGLView(f,g){useRenderTargetHelpers?(0==g&&recreateRenderTargetHelpersIfNecessary(f),bindHelperRenderTarget(f,g)):(f.bindFramebuffer(f.FRAMEBUFFER,xrGetFramebuffer()),g=xrGetViewportSize(g),f.viewport(g[0],g[1],g[2],g[3]))}function xrPostRenderCindyGL(){useRenderTargetHelpers&&blitHelperFramebuffersFullscreen(xrgl,xrGetFramebuffer())}
function initXR(f,g,G,K,N){xrCindyApi=f;xrgl=g;xrCanvasWidth=G;xrCanvasHeight=K;xrHideCanvas=N;setupCindyScriptEventCallbacks();renderFunction=cindyXrDrawCallback;xrButton=new XRDeviceButton({onRequestSession,onEndSession});document.body.appendChild(xrButton.domElement);navigator.xr&&(navigator.xr.isSessionSupported("immersive-vr").then(F=>{xrButton.enabled=F}),navigator.xr.requestSession("inline").then(onSessionStarted))}
function onRequestSession(){let f=[],g=[];"local-floor"==xrReferenceMode?(f=["local-floor"],g=["bounded-floor"]):"bounded-floor"==xrReferenceMode?f=["local-floor","bounded-floor"]:"unbounded"==xrReferenceMode&&(f=["unbounded"]);navigator.xr.requestSession("immersive-vr",{requiredFeatures:f,optionalFeatures:g}).then(G=>{xrButton.setSession(G);G.isImmersive=!0;onSessionStarted(G)})}
function initGL(){xrInitialized||(xrInitialized=!0,xrgl.canvas.width=xrCanvasWidth,xrgl.canvas.height=xrCanvasHeight,xrgl.canvas.style.display="block",xrHideCanvas&&(xrCindyApi.instance.canvas.parentNode.style.display="none"))}
function onSessionStarted(f){f.addEventListener("end",onSessionEnded);f.addEventListener("inputsourceschange",onInputSourcesChange);f.addEventListener("selectstart",onSelectStart);f.addEventListener("selectend",onSelectEnd);f.addEventListener("select",onSelect);f.addEventListener("squeezestart",onSqueezeStart);f.addEventListener("squeezeend",onSqueezeEnd);f.addEventListener("squeeze",onSqueeze);initGL();let g=new XRWebGLLayer(f,xrgl);f.updateRenderState({baseLayer:g});f.requestReferenceSpace(f.isImmersive?
xrReferenceMode:"viewer").then(G=>{f.isImmersive?xrImmersiveRefSpace=G:(inlineViewerHelper=new InlineViewerHelper(xrgl.canvas,G),inlineViewerHelper.setHeight(1.6));f.requestAnimationFrame(onXRFrame)})}function onEndSession(f){f.end()}function onSessionEnded(f){f.session.isImmersive&&xrButton.setSession(null)}function xrGetBoundsLine(){let f=[],g=xrImmersiveRefSpace.boundsGeometry.length;for(let G=0;G<g;++G){let K=xrImmersiveRefSpace.boundsGeometry[G];f.push([K.x,0,K.z])}return f}
function onXRFrame(f,g){var G=g.session;f=g.getViewerPose(G.isImmersive?xrImmersiveRefSpace:inlineViewerHelper.referenceSpace);G.requestAnimationFrame(onXRFrame);xrLastFrame=g;xrLastViewerPose=f;for(G=0;G<activeSelectInputSources.length;G++)onSelectHold(activeSelectInputSources[G]);for(G=0;G<activeSqueezeInputSources.length;G++)onSqueezeHold(activeSqueezeInputSources[G]);drawXRFrame(g,f)}function drawXRFrame(f,g){renderFunction();"CindyGL"==xrCindyPluginMode&&xrPostRenderCindyGL()}
function flatMatrix4ToNestedMatrix4RowMajor(f){return[[f[0],f[1],f[2],f[3]],[f[4],f[5],f[6],f[7]],[f[8],f[9],f[10],f[11]],[f[12],f[13],f[14],f[15]]]}function flatMatrix4ToNestedMatrix4ColumnMajor(f){return[[f[0],f[4],f[8],f[12]],[f[1],f[5],f[9],f[13]],[f[2],f[6],f[10],f[14]],[f[3],f[7],f[11],f[15]]]}function xrGetInputSources(){return xrLastFrame.session.inputSources}
function xrFilterInputSource(f,g){void 0===g&&(g=xrLastFrame);let G={position:[0,0,0,1],orientation:[0,0,0,1],matrix:[[1,0,0,0],[0,1,0,0],[0,0,1,0],[0,0,0,1]]};var K=function(N){if(null===g||null===N)return G;N=g.getPose(N,xrGetReferenceSpace());if(null===N)return G;N=N.transform;return{position:[N.position.x,N.position.y,N.position.z,N.position.w],orientation:[N.orientation.x,N.orientation.y,N.orientation.z,N.orientation.w],matrix:flatMatrix4ToNestedMatrix4ColumnMajor(N.matrix)}};K={handedness:f.handedness,
targetRayMode:f.targetRayMode,targetRaySpaceTransform:K(f.targetRaySpace),gripSpaceTransform:K(f.gripSpace),profiles:f.profiles};"undefined"!==typeof f.gamepad&&null!=f.gamepad&&(f=f.gamepad,K.gamepad={id:f.id,index:f.index,connected:f.connected,mapping:f.mapping,axes:f.axes,buttons:f.buttons});return K}function xrFilterInputSourceArray(f,g){let G=[];for(let K=0;K<f.length;K++){let N=xrFilterInputSource(f[K],g);null!==N&&G.push(N)}return G};var xrCsCompiled={};
let cindyXrDrawCallback=function(){},cindyXrInputSourcesChangeCallback=function(f,g){},cindyXrSelectStartCallback=function(f){},cindyXrSelectEndCallback=function(f){},cindyXrSelectCallback=function(f){},cindyXrSelectHoldCallback=function(f){},cindyXrSqueezeStartCallback=function(f){},cindyXrSqueezeEndCallback=function(f){},cindyXrSqueezeCallback=function(f){},cindyXrSqueezeHoldCallback=function(f){},activeSelectInputSources=[],activeSqueezeInputSources=[],setCindyScriptVariable=function(f,g){f=xrCindyApi.instance.parse(f+
" = 0",!1);f.args[1]=g;xrCindyApi.evaluate(f)};
function setupCindyScriptEventCallbacks(){xrCsCompiled=xrCindyApi.cscompiled;void 0!==xrCsCompiled.xrdraw&&(cindyXrDrawCallback=function(){xrCindyApi.evaluate(xrCsCompiled.xrdraw)});void 0!==xrCsCompiled.xrinputsourceschange&&(cindyXrInputSourcesChangeCallback=function(f,g){setCindyScriptVariable("addedinputsources",f);setCindyScriptVariable("removedinputsources",g);xrCindyApi.evaluate(xrCsCompiled.xrinputsourceschange)});void 0!==xrCsCompiled.xrselectstart&&(cindyXrSelectStartCallback=function(f){setCindyScriptVariable("inputsource",
f);xrCindyApi.evaluate(xrCsCompiled.xrselectstart)});void 0!==xrCsCompiled.xrselectend&&(cindyXrSelectEndCallback=function(f){setCindyScriptVariable("inputsource",f);xrCindyApi.evaluate(xrCsCompiled.xrselectend)});void 0!==xrCsCompiled.xrselect&&(cindyXrSelectCallback=function(f){setCindyScriptVariable("inputsource",f);xrCindyApi.evaluate(xrCsCompiled.xrselect)});void 0!==xrCsCompiled.xrselecthold&&(cindyXrSelectHoldCallback=function(f){setCindyScriptVariable("inputsource",f);xrCindyApi.evaluate(xrCsCompiled.xrselecthold)});
void 0!==xrCsCompiled.xrsqueezestart&&(cindyXrSqueezeStartCallback=function(f){setCindyScriptVariable("inputsource",f);xrCindyApi.evaluate(xrCsCompiled.xrsqueezestart)});void 0!==xrCsCompiled.xrsqueezeend&&(cindyXrSqueezeEndCallback=function(f){setCindyScriptVariable("inputsource",f);xrCindyApi.evaluate(xrCsCompiled.xrsqueezeend)});void 0!==xrCsCompiled.xrsqueeze&&(cindyXrSqueezeCallback=function(f){setCindyScriptVariable("inputsource",f);xrCindyApi.evaluate(xrCsCompiled.xrsqueeze)});void 0!==xrCsCompiled.xrsqueezehold&&
(cindyXrSqueezeHoldCallback=function(f){setCindyScriptVariable("inputsource",f);xrCindyApi.evaluate(xrCsCompiled.xrsqueezehold)})}function onInputSourcesChange(f){let g=convertObjectToCindyDict(xrFilterInputSourceArray(f.added,null),new Set([]),new Map);f=convertObjectToCindyDict(xrFilterInputSourceArray(f.removed,null),new Set([]),new Map);cindyXrInputSourcesChangeCallback(g,f)}
function onSelectStart(f){activeSelectInputSources.push(f.inputSource);f=convertObjectToCindyDict(xrFilterInputSource(f.inputSource,f.frame),new Set([]),new Map);cindyXrSelectStartCallback(f)}function onSelectEnd(f){let g=activeSelectInputSources.indexOf(f.inputSource);-1<g&&activeSelectInputSources.splice(g,1);f=convertObjectToCindyDict(xrFilterInputSource(f.inputSource,f.frame),new Set([]),new Map);cindyXrSelectEndCallback(f)}
function onSelect(f){f=convertObjectToCindyDict(xrFilterInputSource(f.inputSource,f.frame),new Set([]),new Map);cindyXrSelectCallback(f)}function onSelectHold(f){f=convertObjectToCindyDict(xrFilterInputSource(f,xrLastFrame),new Set([]),new Map);cindyXrSelectHoldCallback(f)}function onSqueezeStart(f){activeSqueezeInputSources.push(f.inputSource);f=convertObjectToCindyDict(xrFilterInputSource(f.inputSource,f.frame),new Set([]),new Map);cindyXrSqueezeStartCallback(f)}
function onSqueezeEnd(f){let g=activeSqueezeInputSources.indexOf(f.inputSource);-1<g&&activeSqueezeInputSources.splice(g,1);f=convertObjectToCindyDict(xrFilterInputSource(f.inputSource,f.frame),new Set([]),new Map);cindyXrSqueezeEndCallback(f)}function onSqueeze(f){f=convertObjectToCindyDict(xrFilterInputSource(f.inputSource,f.frame),new Set([]),new Map);cindyXrSqueezeCallback(f)}
function onSqueezeHold(f){f=convertObjectToCindyDict(xrFilterInputSource(f,xrLastFrame),new Set([]),new Map);cindyXrSqueezeHoldCallback(f)};function XRHelperRenderTarget(f,g,G,K,N){this.xrWidth=K;this.xrHeight=N;this.width=g;this.height=G;this.renderTexture=createRenderTexture(f,g,G);this.depthRenderbuffer=createDepthRenderbuffer(f,g,G);this.framebufferObject=createFramebufferObject(f,this.renderTexture,this.depthRenderbuffer)}let renderTargetHelpers=[],renderTargetHelpersCurrentScalingFactor=1,useRenderTargetHelpers=!1;var fullscreenBlitShader=null,fullscreenQuadVertexBuffer=null;
function recreateRenderTargetHelpersIfNecessary(f){null==fullscreenBlitShader&&(createFullscreenBlitShader(f),createFullscreenQuadRenderData(f));var g=!1;let G=xrGetNumViews(),K=xrGetScalingFactor();if(renderTargetHelpers.length==G&&renderTargetHelpersCurrentScalingFactor==K){for(var N=0;N<G;N++){var F=xrGetViewportSize(N);let h=F[3];if(F[2]!=renderTargetHelpers[N].xrWidth||h!=renderTargetHelpers[N].xrHeight)g=!0}if(!g)return}renderTargetHelpersCurrentScalingFactor=K;renderTargetHelpers=[];for(g=
0;g<G;g++)F=xrGetViewportSize(g),N=F[2],F=F[3],renderTargetHelpers.push(new XRHelperRenderTarget(f,Math.ceil(N*K),Math.ceil(F*K),N,F))}
function createRenderTexture(f,g,G){let K=f.createTexture();f.bindTexture(f.TEXTURE_2D,K);f.texParameteri(f.TEXTURE_2D,f.TEXTURE_MAG_FILTER,f.LINEAR);f.texParameteri(f.TEXTURE_2D,f.TEXTURE_MIN_FILTER,f.LINEAR);f.texParameteri(f.TEXTURE_2D,f.TEXTURE_WRAP_S,f.CLAMP_TO_EDGE);f.texParameteri(f.TEXTURE_2D,f.TEXTURE_WRAP_T,f.CLAMP_TO_EDGE);f.texImage2D(f.TEXTURE_2D,0,f.RGBA,g,G,0,f.RGBA,f.UNSIGNED_BYTE,null);return K}
function createDepthRenderbuffer(f,g,G){let K=f.createRenderbuffer();f.bindRenderbuffer(f.RENDERBUFFER,K);f.renderbufferStorage(f.RENDERBUFFER,f.DEPTH_COMPONENT16,g,G);return K}
function createFramebufferObject(f,g,G){let K=f.createFramebuffer();f.bindFramebuffer(f.FRAMEBUFFER,K);f.framebufferTexture2D(f.FRAMEBUFFER,f.COLOR_ATTACHMENT0,f.TEXTURE_2D,g,0);f.framebufferRenderbuffer(f.FRAMEBUFFER,f.DEPTH_ATTACHMENT,f.RENDERBUFFER,G);g=f.checkFramebufferStatus(f.FRAMEBUFFER);g!=f.FRAMEBUFFER_COMPLETE&&(g==f.FRAMEBUFFER_INCOMPLETE_ATTACHMENT?console.log("gl.FRAMEBUFFER_INCOMPLETE_ATTACHMENT"):g==f.FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT?console.log("gl.FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT"):
g==f.FRAMEBUFFER_INCOMPLETE_DIMENSIONS?console.log("gl.FRAMEBUFFER_INCOMPLETE_DIMENSIONS"):g==f.FRAMEBUFFER_UNSUPPORTED?console.log("gl.FRAMEBUFFER_UNSUPPORTED"):console.log("Unknown framebuffer error."));f.bindFramebuffer(f.FRAMEBUFFER,null);return K}
function createFullscreenBlitShader(f){fullscreenBlitShader=new ShaderProgram(f,"attribute vec3 aPos;attribute vec2 aTexCoord;varying vec2 iUv;void main() {iUv = aTexCoord;gl_Position = vec4(aPos, 1.0);}","precision highp float;uniform sampler2D readTexture;varying vec2 iUv;void main() {gl_FragColor = texture2D(readTexture, iUv);}")}
function createFullscreenQuadRenderData(f){fullscreenQuadVertexBuffer=f.createBuffer();f.bindBuffer(f.ARRAY_BUFFER,fullscreenQuadVertexBuffer);let g=new Float32Array([-1,-1,0,1,-1,0,-1,1,0,1,1,0]),G=new Float32Array([0,0,1,0,0,1,1,1]);f.bufferData(f.ARRAY_BUFFER,48+G.byteLength,f.STATIC_DRAW);f.bufferSubData(f.ARRAY_BUFFER,0,g);f.bufferSubData(f.ARRAY_BUFFER,48,G)}
function bindHelperRenderTarget(f,g){f.bindFramebuffer(f.FRAMEBUFFER,renderTargetHelpers[g].framebufferObject);f.viewport(0,0,renderTargetHelpers[g].width,renderTargetHelpers[g].height);f.depthMask(!0);f.clearColor(0,0,0,1);f.clear(f.COLOR_BUFFER_BIT|f.DEPTH_BUFFER_BIT)}
function blitHelperFramebuffersFullscreen(f){f.bindFramebuffer(f.FRAMEBUFFER,xrGetFramebuffer());fullscreenBlitShader.use(f);f.activeTexture(f.TEXTURE0);fullscreenBlitShader.uniform.readTexture([0]);var g=f.getAttribLocation(fullscreenBlitShader.handle,"aPos");f.enableVertexAttribArray(g);var G=f.getAttribLocation(fullscreenBlitShader.handle,"aTexCoord");f.enableVertexAttribArray(G);f.bindBuffer(f.ARRAY_BUFFER,fullscreenQuadVertexBuffer);f.vertexAttribPointer(g,3,f.FLOAT,!1,0,0);f.vertexAttribPointer(G,
2,f.FLOAT,!1,0,48);for(let K=0;K<renderTargetHelpers.length;K++){let N=xrGetViewportSize(K);f.viewport(N[0],N[1],N[2],N[3]);f.bindTexture(f.TEXTURE_2D,renderTargetHelpers[K].renderTexture);f.drawArrays(f.TRIANGLE_STRIP,0,4)}f.disableVertexAttribArray(g);f.disableVertexAttribArray(G)};
}).call(this);//# sourceMappingURL=CindyXR.js.map