three-nebula 11.0.0 → 11.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +10 -0
- package/dist/three-nebula.cjs +109 -0
- package/dist/three-nebula.cjs.map +1 -0
- package/dist/three-nebula.mjs +2968 -0
- package/dist/three-nebula.mjs.map +1 -0
- package/dist/three-nebula.umd.js +109 -0
- package/dist/three-nebula.umd.js.map +1 -0
- package/package.json +23 -47
- package/specs/01-emitter-hierarchy.md +200 -0
- package/specs/02-determinism-scrubbing.md +188 -0
- package/specs/03-sound-renderer.md +183 -0
- package/specs/04-schema-versioning.md +140 -0
- package/specs/05-content-addressed-assets.md +288 -0
- package/specs/README.md +80 -0
- package/build/cjs/behaviour/Alpha.js +0 -189
- package/build/cjs/behaviour/Attraction.js +0 -189
- package/build/cjs/behaviour/Behaviour.js +0 -253
- package/build/cjs/behaviour/Collision.js +0 -146
- package/build/cjs/behaviour/Color.js +0 -148
- package/build/cjs/behaviour/CrossZone.js +0 -141
- package/build/cjs/behaviour/Force.js +0 -126
- package/build/cjs/behaviour/Gravity.js +0 -78
- package/build/cjs/behaviour/RandomDrift.js +0 -153
- package/build/cjs/behaviour/Repulsion.js +0 -123
- package/build/cjs/behaviour/Rotate.js +0 -265
- package/build/cjs/behaviour/Scale.js +0 -177
- package/build/cjs/behaviour/Spring.js +0 -133
- package/build/cjs/behaviour/constants.js +0 -28
- package/build/cjs/behaviour/index.js +0 -112
- package/build/cjs/behaviour/types.js +0 -33
- package/build/cjs/constants/index.js +0 -61
- package/build/cjs/core/Particle.js +0 -390
- package/build/cjs/core/Pool.js +0 -203
- package/build/cjs/core/System.js +0 -366
- package/build/cjs/core/constants.js +0 -163
- package/build/cjs/core/fromJSON.js +0 -128
- package/build/cjs/core/fromJSONAsync.js +0 -239
- package/build/cjs/core/index.js +0 -32
- package/build/cjs/core/three/Euler.js +0 -233
- package/build/cjs/core/three/Math.js +0 -91
- package/build/cjs/core/three/Matrix4.js +0 -745
- package/build/cjs/core/three/Quaternion.js +0 -451
- package/build/cjs/core/three/Vector3.js +0 -464
- package/build/cjs/core/three/constants.js +0 -298
- package/build/cjs/core/three/index.js +0 -48
- package/build/cjs/core/types.js +0 -13
- package/build/cjs/debug/Debug.js +0 -209
- package/build/cjs/debug/constants.js +0 -19
- package/build/cjs/debug/index.js +0 -24
- package/build/cjs/debug/log.js +0 -38
- package/build/cjs/ease/index.js +0 -149
- package/build/cjs/emitter/Emitter.js +0 -798
- package/build/cjs/emitter/FollowEmitter.js +0 -146
- package/build/cjs/emitter/constants.js +0 -20
- package/build/cjs/emitter/index.js +0 -24
- package/build/cjs/emitter/types.js +0 -11
- package/build/cjs/events/EventDispatcher.js +0 -105
- package/build/cjs/events/constants.js +0 -23
- package/build/cjs/events/index.js +0 -27
- package/build/cjs/index.js +0 -151
- package/build/cjs/initializer/Body.js +0 -122
- package/build/cjs/initializer/BodySprite.js +0 -146
- package/build/cjs/initializer/Initializer.js +0 -109
- package/build/cjs/initializer/InitializerUtil.js +0 -54
- package/build/cjs/initializer/Life.js +0 -106
- package/build/cjs/initializer/Mass.js +0 -101
- package/build/cjs/initializer/Position.js +0 -152
- package/build/cjs/initializer/Radius.js +0 -118
- package/build/cjs/initializer/Rate.js +0 -150
- package/build/cjs/initializer/Rotation.js +0 -95
- package/build/cjs/initializer/Texture.js +0 -139
- package/build/cjs/initializer/Velocity/PolarVelocity.js +0 -102
- package/build/cjs/initializer/Velocity/RadialVelocity.js +0 -111
- package/build/cjs/initializer/Velocity/VectorVelocity.js +0 -108
- package/build/cjs/initializer/Velocity/Velocity.js +0 -94
- package/build/cjs/initializer/Velocity/index.js +0 -32
- package/build/cjs/initializer/constants.js +0 -43
- package/build/cjs/initializer/index.js +0 -108
- package/build/cjs/initializer/types.js +0 -37
- package/build/cjs/math/ArraySpan.js +0 -103
- package/build/cjs/math/Box.js +0 -46
- package/build/cjs/math/ColorSpan.js +0 -113
- package/build/cjs/math/MathUtils.js +0 -57
- package/build/cjs/math/Polar3D.js +0 -115
- package/build/cjs/math/Span.js +0 -88
- package/build/cjs/math/Vector3D.js +0 -76
- package/build/cjs/math/constants.js +0 -35
- package/build/cjs/math/index.js +0 -122
- package/build/cjs/math/integration.js +0 -59
- package/build/cjs/math/types.js +0 -19
- package/build/cjs/renderer/BaseRenderer.js +0 -108
- package/build/cjs/renderer/CustomRenderer.js +0 -65
- package/build/cjs/renderer/GPURenderer/Desktop/index.js +0 -371
- package/build/cjs/renderer/GPURenderer/Desktop/shaders/fragmentShader.js +0 -13
- package/build/cjs/renderer/GPURenderer/Desktop/shaders/index.js +0 -22
- package/build/cjs/renderer/GPURenderer/Desktop/shaders/vertexShader.js +0 -17
- package/build/cjs/renderer/GPURenderer/Mobile/index.js +0 -385
- package/build/cjs/renderer/GPURenderer/Mobile/shaders/fragmentShader.js +0 -13
- package/build/cjs/renderer/GPURenderer/Mobile/shaders/index.js +0 -22
- package/build/cjs/renderer/GPURenderer/Mobile/shaders/vertexShader.js +0 -15
- package/build/cjs/renderer/GPURenderer/common/ParticleBuffer/constants.js +0 -58
- package/build/cjs/renderer/GPURenderer/common/ParticleBuffer/index.js +0 -93
- package/build/cjs/renderer/GPURenderer/common/TextureAtlas/constants.js +0 -9
- package/build/cjs/renderer/GPURenderer/common/TextureAtlas/index.js +0 -221
- package/build/cjs/renderer/GPURenderer/common/constants.js +0 -22
- package/build/cjs/renderer/GPURenderer/common/index.js +0 -38
- package/build/cjs/renderer/GPURenderer/common/shaders/constants.js +0 -9
- package/build/cjs/renderer/GPURenderer/common/stores/Target.js +0 -45
- package/build/cjs/renderer/GPURenderer/common/stores/UniqueList.js +0 -51
- package/build/cjs/renderer/GPURenderer/common/stores/index.js +0 -22
- package/build/cjs/renderer/GPURenderer/index.js +0 -97
- package/build/cjs/renderer/MeshRenderer.js +0 -136
- package/build/cjs/renderer/SpriteRenderer.js +0 -68
- package/build/cjs/renderer/index.js +0 -40
- package/build/cjs/renderer/types.js +0 -21
- package/build/cjs/utils/ColorUtil.js +0 -39
- package/build/cjs/utils/PUID.js +0 -26
- package/build/cjs/utils/THREEUtil.js +0 -40
- package/build/cjs/utils/Util.js +0 -69
- package/build/cjs/utils/index.js +0 -61
- package/build/cjs/utils/uid.js +0 -12
- package/build/cjs/zone/BoxZone.js +0 -178
- package/build/cjs/zone/LineZone.js +0 -101
- package/build/cjs/zone/MeshZone.js +0 -101
- package/build/cjs/zone/PointZone.js +0 -99
- package/build/cjs/zone/ScreenZone.js +0 -164
- package/build/cjs/zone/SphereZone.js +0 -155
- package/build/cjs/zone/Zone.js +0 -172
- package/build/cjs/zone/index.js +0 -56
- package/build/cjs/zone/types.js +0 -21
- package/build/esm/behaviour/Alpha.js +0 -134
- package/build/esm/behaviour/Attraction.js +0 -135
- package/build/esm/behaviour/Behaviour.js +0 -215
- package/build/esm/behaviour/Collision.js +0 -100
- package/build/esm/behaviour/Color.js +0 -101
- package/build/esm/behaviour/CrossZone.js +0 -82
- package/build/esm/behaviour/Force.js +0 -83
- package/build/esm/behaviour/Gravity.js +0 -40
- package/build/esm/behaviour/RandomDrift.js +0 -97
- package/build/esm/behaviour/Repulsion.js +0 -81
- package/build/esm/behaviour/Rotate.js +0 -214
- package/build/esm/behaviour/Scale.js +0 -131
- package/build/esm/behaviour/Spring.js +0 -90
- package/build/esm/behaviour/constants.js +0 -11
- package/build/esm/behaviour/index.js +0 -14
- package/build/esm/behaviour/types.js +0 -14
- package/build/esm/constants/index.js +0 -42
- package/build/esm/core/Particle.js +0 -357
- package/build/esm/core/Pool.js +0 -161
- package/build/esm/core/System.js +0 -320
- package/build/esm/core/constants.js +0 -127
- package/build/esm/core/fromJSON.js +0 -107
- package/build/esm/core/fromJSONAsync.js +0 -210
- package/build/esm/core/index.js +0 -4
- package/build/esm/core/three/Euler.js +0 -224
- package/build/esm/core/three/Math.js +0 -84
- package/build/esm/core/three/Matrix4.js +0 -739
- package/build/esm/core/three/Quaternion.js +0 -445
- package/build/esm/core/three/Vector3.js +0 -457
- package/build/esm/core/three/constants.js +0 -148
- package/build/esm/core/three/index.js +0 -5
- package/build/esm/core/types.js +0 -4
- package/build/esm/debug/Debug.js +0 -195
- package/build/esm/debug/constants.js +0 -7
- package/build/esm/debug/index.js +0 -3
- package/build/esm/debug/log.js +0 -31
- package/build/esm/ease/index.js +0 -113
- package/build/esm/emitter/Emitter.js +0 -708
- package/build/esm/emitter/FollowEmitter.js +0 -97
- package/build/esm/emitter/constants.js +0 -7
- package/build/esm/emitter/index.js +0 -3
- package/build/esm/emitter/types.js +0 -3
- package/build/esm/events/EventDispatcher.js +0 -82
- package/build/esm/events/constants.js +0 -9
- package/build/esm/events/index.js +0 -4
- package/build/esm/index.js +0 -13
- package/build/esm/initializer/Body.js +0 -83
- package/build/esm/initializer/BodySprite.js +0 -108
- package/build/esm/initializer/Initializer.js +0 -84
- package/build/esm/initializer/InitializerUtil.js +0 -48
- package/build/esm/initializer/Life.js +0 -66
- package/build/esm/initializer/Mass.js +0 -60
- package/build/esm/initializer/Position.js +0 -98
- package/build/esm/initializer/Radius.js +0 -75
- package/build/esm/initializer/Rate.js +0 -107
- package/build/esm/initializer/Rotation.js +0 -54
- package/build/esm/initializer/Texture.js +0 -101
- package/build/esm/initializer/Velocity/PolarVelocity.js +0 -63
- package/build/esm/initializer/Velocity/RadialVelocity.js +0 -72
- package/build/esm/initializer/Velocity/VectorVelocity.js +0 -69
- package/build/esm/initializer/Velocity/Velocity.js +0 -52
- package/build/esm/initializer/Velocity/index.js +0 -4
- package/build/esm/initializer/constants.js +0 -26
- package/build/esm/initializer/index.js +0 -12
- package/build/esm/initializer/types.js +0 -16
- package/build/esm/math/ArraySpan.js +0 -62
- package/build/esm/math/Box.js +0 -25
- package/build/esm/math/ColorSpan.js +0 -71
- package/build/esm/math/MathUtils.js +0 -48
- package/build/esm/math/Polar3D.js +0 -81
- package/build/esm/math/Span.js +0 -63
- package/build/esm/math/Vector3D.js +0 -34
- package/build/esm/math/constants.js +0 -24
- package/build/esm/math/index.js +0 -10
- package/build/esm/math/integration.js +0 -47
- package/build/esm/math/types.js +0 -7
- package/build/esm/renderer/BaseRenderer.js +0 -78
- package/build/esm/renderer/CustomRenderer.js +0 -23
- package/build/esm/renderer/GPURenderer/Desktop/index.js +0 -357
- package/build/esm/renderer/GPURenderer/Desktop/shaders/fragmentShader.js +0 -30
- package/build/esm/renderer/GPURenderer/Desktop/shaders/index.js +0 -3
- package/build/esm/renderer/GPURenderer/Desktop/shaders/vertexShader.js +0 -36
- package/build/esm/renderer/GPURenderer/Mobile/index.js +0 -375
- package/build/esm/renderer/GPURenderer/Mobile/shaders/fragmentShader.js +0 -27
- package/build/esm/renderer/GPURenderer/Mobile/shaders/index.js +0 -3
- package/build/esm/renderer/GPURenderer/Mobile/shaders/vertexShader.js +0 -33
- package/build/esm/renderer/GPURenderer/common/ParticleBuffer/constants.js +0 -30
- package/build/esm/renderer/GPURenderer/common/ParticleBuffer/index.js +0 -70
- package/build/esm/renderer/GPURenderer/common/TextureAtlas/constants.js +0 -2
- package/build/esm/renderer/GPURenderer/common/TextureAtlas/index.js +0 -206
- package/build/esm/renderer/GPURenderer/common/constants.js +0 -13
- package/build/esm/renderer/GPURenderer/common/index.js +0 -4
- package/build/esm/renderer/GPURenderer/common/shaders/constants.js +0 -2
- package/build/esm/renderer/GPURenderer/common/stores/Target.js +0 -26
- package/build/esm/renderer/GPURenderer/common/stores/UniqueList.js +0 -29
- package/build/esm/renderer/GPURenderer/common/stores/index.js +0 -3
- package/build/esm/renderer/GPURenderer/index.js +0 -57
- package/build/esm/renderer/MeshRenderer.js +0 -93
- package/build/esm/renderer/SpriteRenderer.js +0 -30
- package/build/esm/renderer/index.js +0 -5
- package/build/esm/renderer/types.js +0 -8
- package/build/esm/utils/ColorUtil.js +0 -32
- package/build/esm/utils/PUID.js +0 -19
- package/build/esm/utils/THREEUtil.js +0 -31
- package/build/esm/utils/Util.js +0 -60
- package/build/esm/utils/index.js +0 -13
- package/build/esm/utils/uid.js +0 -3
- package/build/esm/zone/BoxZone.js +0 -133
- package/build/esm/zone/LineZone.js +0 -61
- package/build/esm/zone/MeshZone.js +0 -60
- package/build/esm/zone/PointZone.js +0 -59
- package/build/esm/zone/ScreenZone.js +0 -116
- package/build/esm/zone/SphereZone.js +0 -113
- package/build/esm/zone/Zone.js +0 -141
- package/build/esm/zone/index.js +0 -7
- package/build/esm/zone/types.js +0 -8
- package/build/three-nebula.js +0 -2
- package/build/three-nebula.js.map +0 -1
|
@@ -1,457 +0,0 @@
|
|
|
1
|
-
import { _Math } from './Math.js';
|
|
2
|
-
import { Quaternion } from './Quaternion.js';
|
|
3
|
-
/**
|
|
4
|
-
* @author mrdoob / http://mrdoob.com/
|
|
5
|
-
* @author kile / http://kile.stravaganza.org/
|
|
6
|
-
* @author philogb / http://blog.thejit.org/
|
|
7
|
-
* @author mikael emtinger / http://gomo.se/
|
|
8
|
-
* @author egraether / http://egraether.com/
|
|
9
|
-
* @author WestLangley / http://github.com/WestLangley
|
|
10
|
-
*/
|
|
11
|
-
|
|
12
|
-
function Vector3(x, y, z) {
|
|
13
|
-
this.x = x || 0;
|
|
14
|
-
this.y = y || 0;
|
|
15
|
-
this.z = z || 0;
|
|
16
|
-
}
|
|
17
|
-
|
|
18
|
-
Object.assign(Vector3.prototype, {
|
|
19
|
-
isVector3: true,
|
|
20
|
-
set: function (x, y, z) {
|
|
21
|
-
this.x = x;
|
|
22
|
-
this.y = y;
|
|
23
|
-
this.z = z;
|
|
24
|
-
return this;
|
|
25
|
-
},
|
|
26
|
-
setScalar: function (scalar) {
|
|
27
|
-
this.x = scalar;
|
|
28
|
-
this.y = scalar;
|
|
29
|
-
this.z = scalar;
|
|
30
|
-
return this;
|
|
31
|
-
},
|
|
32
|
-
setX: function (x) {
|
|
33
|
-
this.x = x;
|
|
34
|
-
return this;
|
|
35
|
-
},
|
|
36
|
-
setY: function (y) {
|
|
37
|
-
this.y = y;
|
|
38
|
-
return this;
|
|
39
|
-
},
|
|
40
|
-
setZ: function (z) {
|
|
41
|
-
this.z = z;
|
|
42
|
-
return this;
|
|
43
|
-
},
|
|
44
|
-
setComponent: function (index, value) {
|
|
45
|
-
switch (index) {
|
|
46
|
-
case 0:
|
|
47
|
-
this.x = value;
|
|
48
|
-
break;
|
|
49
|
-
|
|
50
|
-
case 1:
|
|
51
|
-
this.y = value;
|
|
52
|
-
break;
|
|
53
|
-
|
|
54
|
-
case 2:
|
|
55
|
-
this.z = value;
|
|
56
|
-
break;
|
|
57
|
-
|
|
58
|
-
default:
|
|
59
|
-
throw new Error('index is out of range: ' + index);
|
|
60
|
-
}
|
|
61
|
-
|
|
62
|
-
return this;
|
|
63
|
-
},
|
|
64
|
-
getComponent: function (index) {
|
|
65
|
-
switch (index) {
|
|
66
|
-
case 0:
|
|
67
|
-
return this.x;
|
|
68
|
-
|
|
69
|
-
case 1:
|
|
70
|
-
return this.y;
|
|
71
|
-
|
|
72
|
-
case 2:
|
|
73
|
-
return this.z;
|
|
74
|
-
|
|
75
|
-
default:
|
|
76
|
-
throw new Error('index is out of range: ' + index);
|
|
77
|
-
}
|
|
78
|
-
},
|
|
79
|
-
clone: function () {
|
|
80
|
-
return new this.constructor(this.x, this.y, this.z);
|
|
81
|
-
},
|
|
82
|
-
copy: function (v) {
|
|
83
|
-
this.x = v.x;
|
|
84
|
-
this.y = v.y;
|
|
85
|
-
this.z = v.z;
|
|
86
|
-
return this;
|
|
87
|
-
},
|
|
88
|
-
add: function (v, w) {
|
|
89
|
-
if (w !== undefined) {
|
|
90
|
-
console.warn('THREE.Vector3: .add() now only accepts one argument. Use .addVectors( a, b ) instead.');
|
|
91
|
-
return this.addVectors(v, w);
|
|
92
|
-
}
|
|
93
|
-
|
|
94
|
-
this.x += v.x;
|
|
95
|
-
this.y += v.y;
|
|
96
|
-
this.z += v.z;
|
|
97
|
-
return this;
|
|
98
|
-
},
|
|
99
|
-
addScalar: function (s) {
|
|
100
|
-
this.x += s;
|
|
101
|
-
this.y += s;
|
|
102
|
-
this.z += s;
|
|
103
|
-
return this;
|
|
104
|
-
},
|
|
105
|
-
addVectors: function (a, b) {
|
|
106
|
-
this.x = a.x + b.x;
|
|
107
|
-
this.y = a.y + b.y;
|
|
108
|
-
this.z = a.z + b.z;
|
|
109
|
-
return this;
|
|
110
|
-
},
|
|
111
|
-
addScaledVector: function (v, s) {
|
|
112
|
-
this.x += v.x * s;
|
|
113
|
-
this.y += v.y * s;
|
|
114
|
-
this.z += v.z * s;
|
|
115
|
-
return this;
|
|
116
|
-
},
|
|
117
|
-
sub: function (v, w) {
|
|
118
|
-
if (w !== undefined) {
|
|
119
|
-
console.warn('THREE.Vector3: .sub() now only accepts one argument. Use .subVectors( a, b ) instead.');
|
|
120
|
-
return this.subVectors(v, w);
|
|
121
|
-
}
|
|
122
|
-
|
|
123
|
-
this.x -= v.x;
|
|
124
|
-
this.y -= v.y;
|
|
125
|
-
this.z -= v.z;
|
|
126
|
-
return this;
|
|
127
|
-
},
|
|
128
|
-
subScalar: function (s) {
|
|
129
|
-
this.x -= s;
|
|
130
|
-
this.y -= s;
|
|
131
|
-
this.z -= s;
|
|
132
|
-
return this;
|
|
133
|
-
},
|
|
134
|
-
subVectors: function (a, b) {
|
|
135
|
-
this.x = a.x - b.x;
|
|
136
|
-
this.y = a.y - b.y;
|
|
137
|
-
this.z = a.z - b.z;
|
|
138
|
-
return this;
|
|
139
|
-
},
|
|
140
|
-
multiply: function (v, w) {
|
|
141
|
-
if (w !== undefined) {
|
|
142
|
-
console.warn('THREE.Vector3: .multiply() now only accepts one argument. Use .multiplyVectors( a, b ) instead.');
|
|
143
|
-
return this.multiplyVectors(v, w);
|
|
144
|
-
}
|
|
145
|
-
|
|
146
|
-
this.x *= v.x;
|
|
147
|
-
this.y *= v.y;
|
|
148
|
-
this.z *= v.z;
|
|
149
|
-
return this;
|
|
150
|
-
},
|
|
151
|
-
multiplyScalar: function (scalar) {
|
|
152
|
-
this.x *= scalar;
|
|
153
|
-
this.y *= scalar;
|
|
154
|
-
this.z *= scalar;
|
|
155
|
-
return this;
|
|
156
|
-
},
|
|
157
|
-
multiplyVectors: function (a, b) {
|
|
158
|
-
this.x = a.x * b.x;
|
|
159
|
-
this.y = a.y * b.y;
|
|
160
|
-
this.z = a.z * b.z;
|
|
161
|
-
return this;
|
|
162
|
-
},
|
|
163
|
-
applyEuler: function () {
|
|
164
|
-
var quaternion = new Quaternion();
|
|
165
|
-
return function applyEuler(euler) {
|
|
166
|
-
if (!(euler && euler.isEuler)) {
|
|
167
|
-
console.error('THREE.Vector3: .applyEuler() now expects an Euler rotation rather than a Vector3 and order.');
|
|
168
|
-
}
|
|
169
|
-
|
|
170
|
-
return this.applyQuaternion(quaternion.setFromEuler(euler));
|
|
171
|
-
};
|
|
172
|
-
}(),
|
|
173
|
-
applyAxisAngle: function () {
|
|
174
|
-
var quaternion = new Quaternion();
|
|
175
|
-
return function applyAxisAngle(axis, angle) {
|
|
176
|
-
return this.applyQuaternion(quaternion.setFromAxisAngle(axis, angle));
|
|
177
|
-
};
|
|
178
|
-
}(),
|
|
179
|
-
applyMatrix3: function (m) {
|
|
180
|
-
var x = this.x,
|
|
181
|
-
y = this.y,
|
|
182
|
-
z = this.z;
|
|
183
|
-
var e = m.elements;
|
|
184
|
-
this.x = e[0] * x + e[3] * y + e[6] * z;
|
|
185
|
-
this.y = e[1] * x + e[4] * y + e[7] * z;
|
|
186
|
-
this.z = e[2] * x + e[5] * y + e[8] * z;
|
|
187
|
-
return this;
|
|
188
|
-
},
|
|
189
|
-
applyMatrix4: function (m) {
|
|
190
|
-
var x = this.x,
|
|
191
|
-
y = this.y,
|
|
192
|
-
z = this.z;
|
|
193
|
-
var e = m.elements;
|
|
194
|
-
var w = 1 / (e[3] * x + e[7] * y + e[11] * z + e[15]);
|
|
195
|
-
this.x = (e[0] * x + e[4] * y + e[8] * z + e[12]) * w;
|
|
196
|
-
this.y = (e[1] * x + e[5] * y + e[9] * z + e[13]) * w;
|
|
197
|
-
this.z = (e[2] * x + e[6] * y + e[10] * z + e[14]) * w;
|
|
198
|
-
return this;
|
|
199
|
-
},
|
|
200
|
-
applyQuaternion: function (q) {
|
|
201
|
-
var x = this.x,
|
|
202
|
-
y = this.y,
|
|
203
|
-
z = this.z;
|
|
204
|
-
var qx = q.x,
|
|
205
|
-
qy = q.y,
|
|
206
|
-
qz = q.z,
|
|
207
|
-
qw = q.w; // calculate quat * vector
|
|
208
|
-
|
|
209
|
-
var ix = qw * x + qy * z - qz * y;
|
|
210
|
-
var iy = qw * y + qz * x - qx * z;
|
|
211
|
-
var iz = qw * z + qx * y - qy * x;
|
|
212
|
-
var iw = -qx * x - qy * y - qz * z; // calculate result * inverse quat
|
|
213
|
-
|
|
214
|
-
this.x = ix * qw + iw * -qx + iy * -qz - iz * -qy;
|
|
215
|
-
this.y = iy * qw + iw * -qy + iz * -qx - ix * -qz;
|
|
216
|
-
this.z = iz * qw + iw * -qz + ix * -qy - iy * -qx;
|
|
217
|
-
return this;
|
|
218
|
-
},
|
|
219
|
-
project: function (camera) {
|
|
220
|
-
return this.applyMatrix4(camera.matrixWorldInverse).applyMatrix4(camera.projectionMatrix);
|
|
221
|
-
},
|
|
222
|
-
unproject: function (camera) {
|
|
223
|
-
return this.applyMatrix4(camera.projectionMatrixInverse).applyMatrix4(camera.matrixWorld);
|
|
224
|
-
},
|
|
225
|
-
transformDirection: function (m) {
|
|
226
|
-
// input: THREE.Matrix4 affine matrix
|
|
227
|
-
// vector interpreted as a direction
|
|
228
|
-
var x = this.x,
|
|
229
|
-
y = this.y,
|
|
230
|
-
z = this.z;
|
|
231
|
-
var e = m.elements;
|
|
232
|
-
this.x = e[0] * x + e[4] * y + e[8] * z;
|
|
233
|
-
this.y = e[1] * x + e[5] * y + e[9] * z;
|
|
234
|
-
this.z = e[2] * x + e[6] * y + e[10] * z;
|
|
235
|
-
return this.normalize();
|
|
236
|
-
},
|
|
237
|
-
divide: function (v) {
|
|
238
|
-
this.x /= v.x;
|
|
239
|
-
this.y /= v.y;
|
|
240
|
-
this.z /= v.z;
|
|
241
|
-
return this;
|
|
242
|
-
},
|
|
243
|
-
divideScalar: function (scalar) {
|
|
244
|
-
return this.multiplyScalar(1 / scalar);
|
|
245
|
-
},
|
|
246
|
-
min: function (v) {
|
|
247
|
-
this.x = Math.min(this.x, v.x);
|
|
248
|
-
this.y = Math.min(this.y, v.y);
|
|
249
|
-
this.z = Math.min(this.z, v.z);
|
|
250
|
-
return this;
|
|
251
|
-
},
|
|
252
|
-
max: function (v) {
|
|
253
|
-
this.x = Math.max(this.x, v.x);
|
|
254
|
-
this.y = Math.max(this.y, v.y);
|
|
255
|
-
this.z = Math.max(this.z, v.z);
|
|
256
|
-
return this;
|
|
257
|
-
},
|
|
258
|
-
clamp: function (min, max) {
|
|
259
|
-
// assumes min < max, componentwise
|
|
260
|
-
this.x = Math.max(min.x, Math.min(max.x, this.x));
|
|
261
|
-
this.y = Math.max(min.y, Math.min(max.y, this.y));
|
|
262
|
-
this.z = Math.max(min.z, Math.min(max.z, this.z));
|
|
263
|
-
return this;
|
|
264
|
-
},
|
|
265
|
-
clampScalar: function (minVal, maxVal) {
|
|
266
|
-
this.x = Math.max(minVal, Math.min(maxVal, this.x));
|
|
267
|
-
this.y = Math.max(minVal, Math.min(maxVal, this.y));
|
|
268
|
-
this.z = Math.max(minVal, Math.min(maxVal, this.z));
|
|
269
|
-
return this;
|
|
270
|
-
},
|
|
271
|
-
clampLength: function (min, max) {
|
|
272
|
-
var length = this.length();
|
|
273
|
-
return this.divideScalar(length || 1).multiplyScalar(Math.max(min, Math.min(max, length)));
|
|
274
|
-
},
|
|
275
|
-
floor: function () {
|
|
276
|
-
this.x = Math.floor(this.x);
|
|
277
|
-
this.y = Math.floor(this.y);
|
|
278
|
-
this.z = Math.floor(this.z);
|
|
279
|
-
return this;
|
|
280
|
-
},
|
|
281
|
-
ceil: function () {
|
|
282
|
-
this.x = Math.ceil(this.x);
|
|
283
|
-
this.y = Math.ceil(this.y);
|
|
284
|
-
this.z = Math.ceil(this.z);
|
|
285
|
-
return this;
|
|
286
|
-
},
|
|
287
|
-
round: function () {
|
|
288
|
-
this.x = Math.round(this.x);
|
|
289
|
-
this.y = Math.round(this.y);
|
|
290
|
-
this.z = Math.round(this.z);
|
|
291
|
-
return this;
|
|
292
|
-
},
|
|
293
|
-
roundToZero: function () {
|
|
294
|
-
this.x = this.x < 0 ? Math.ceil(this.x) : Math.floor(this.x);
|
|
295
|
-
this.y = this.y < 0 ? Math.ceil(this.y) : Math.floor(this.y);
|
|
296
|
-
this.z = this.z < 0 ? Math.ceil(this.z) : Math.floor(this.z);
|
|
297
|
-
return this;
|
|
298
|
-
},
|
|
299
|
-
negate: function () {
|
|
300
|
-
this.x = -this.x;
|
|
301
|
-
this.y = -this.y;
|
|
302
|
-
this.z = -this.z;
|
|
303
|
-
return this;
|
|
304
|
-
},
|
|
305
|
-
dot: function (v) {
|
|
306
|
-
return this.x * v.x + this.y * v.y + this.z * v.z;
|
|
307
|
-
},
|
|
308
|
-
// TODO lengthSquared?
|
|
309
|
-
lengthSq: function () {
|
|
310
|
-
return this.x * this.x + this.y * this.y + this.z * this.z;
|
|
311
|
-
},
|
|
312
|
-
length: function () {
|
|
313
|
-
return Math.sqrt(this.x * this.x + this.y * this.y + this.z * this.z);
|
|
314
|
-
},
|
|
315
|
-
manhattanLength: function () {
|
|
316
|
-
return Math.abs(this.x) + Math.abs(this.y) + Math.abs(this.z);
|
|
317
|
-
},
|
|
318
|
-
normalize: function () {
|
|
319
|
-
return this.divideScalar(this.length() || 1);
|
|
320
|
-
},
|
|
321
|
-
setLength: function (length) {
|
|
322
|
-
return this.normalize().multiplyScalar(length);
|
|
323
|
-
},
|
|
324
|
-
lerp: function (v, alpha) {
|
|
325
|
-
this.x += (v.x - this.x) * alpha;
|
|
326
|
-
this.y += (v.y - this.y) * alpha;
|
|
327
|
-
this.z += (v.z - this.z) * alpha;
|
|
328
|
-
return this;
|
|
329
|
-
},
|
|
330
|
-
lerpVectors: function (v1, v2, alpha) {
|
|
331
|
-
return this.subVectors(v2, v1).multiplyScalar(alpha).add(v1);
|
|
332
|
-
},
|
|
333
|
-
cross: function (v, w) {
|
|
334
|
-
if (w !== undefined) {
|
|
335
|
-
console.warn('THREE.Vector3: .cross() now only accepts one argument. Use .crossVectors( a, b ) instead.');
|
|
336
|
-
return this.crossVectors(v, w);
|
|
337
|
-
}
|
|
338
|
-
|
|
339
|
-
return this.crossVectors(this, v);
|
|
340
|
-
},
|
|
341
|
-
crossVectors: function (a, b) {
|
|
342
|
-
var ax = a.x,
|
|
343
|
-
ay = a.y,
|
|
344
|
-
az = a.z;
|
|
345
|
-
var bx = b.x,
|
|
346
|
-
by = b.y,
|
|
347
|
-
bz = b.z;
|
|
348
|
-
this.x = ay * bz - az * by;
|
|
349
|
-
this.y = az * bx - ax * bz;
|
|
350
|
-
this.z = ax * by - ay * bx;
|
|
351
|
-
return this;
|
|
352
|
-
},
|
|
353
|
-
projectOnVector: function (vector) {
|
|
354
|
-
var scalar = vector.dot(this) / vector.lengthSq();
|
|
355
|
-
return this.copy(vector).multiplyScalar(scalar);
|
|
356
|
-
},
|
|
357
|
-
projectOnPlane: function () {
|
|
358
|
-
var v1 = new Vector3();
|
|
359
|
-
return function projectOnPlane(planeNormal) {
|
|
360
|
-
v1.copy(this).projectOnVector(planeNormal);
|
|
361
|
-
return this.sub(v1);
|
|
362
|
-
};
|
|
363
|
-
}(),
|
|
364
|
-
reflect: function () {
|
|
365
|
-
// reflect incident vector off plane orthogonal to normal
|
|
366
|
-
// normal is assumed to have unit length
|
|
367
|
-
var v1 = new Vector3();
|
|
368
|
-
return function reflect(normal) {
|
|
369
|
-
return this.sub(v1.copy(normal).multiplyScalar(2 * this.dot(normal)));
|
|
370
|
-
};
|
|
371
|
-
}(),
|
|
372
|
-
angleTo: function (v) {
|
|
373
|
-
var theta = this.dot(v) / Math.sqrt(this.lengthSq() * v.lengthSq()); // clamp, to handle numerical problems
|
|
374
|
-
|
|
375
|
-
return Math.acos(_Math.clamp(theta, -1, 1));
|
|
376
|
-
},
|
|
377
|
-
distanceTo: function (v) {
|
|
378
|
-
return Math.sqrt(this.distanceToSquared(v));
|
|
379
|
-
},
|
|
380
|
-
distanceToSquared: function (v) {
|
|
381
|
-
var dx = this.x - v.x,
|
|
382
|
-
dy = this.y - v.y,
|
|
383
|
-
dz = this.z - v.z;
|
|
384
|
-
return dx * dx + dy * dy + dz * dz;
|
|
385
|
-
},
|
|
386
|
-
manhattanDistanceTo: function (v) {
|
|
387
|
-
return Math.abs(this.x - v.x) + Math.abs(this.y - v.y) + Math.abs(this.z - v.z);
|
|
388
|
-
},
|
|
389
|
-
setFromSpherical: function (s) {
|
|
390
|
-
return this.setFromSphericalCoords(s.radius, s.phi, s.theta);
|
|
391
|
-
},
|
|
392
|
-
setFromSphericalCoords: function (radius, phi, theta) {
|
|
393
|
-
var sinPhiRadius = Math.sin(phi) * radius;
|
|
394
|
-
this.x = sinPhiRadius * Math.sin(theta);
|
|
395
|
-
this.y = Math.cos(phi) * radius;
|
|
396
|
-
this.z = sinPhiRadius * Math.cos(theta);
|
|
397
|
-
return this;
|
|
398
|
-
},
|
|
399
|
-
setFromCylindrical: function (c) {
|
|
400
|
-
return this.setFromCylindricalCoords(c.radius, c.theta, c.y);
|
|
401
|
-
},
|
|
402
|
-
setFromCylindricalCoords: function (radius, theta, y) {
|
|
403
|
-
this.x = radius * Math.sin(theta);
|
|
404
|
-
this.y = y;
|
|
405
|
-
this.z = radius * Math.cos(theta);
|
|
406
|
-
return this;
|
|
407
|
-
},
|
|
408
|
-
setFromMatrixPosition: function (m) {
|
|
409
|
-
var e = m.elements;
|
|
410
|
-
this.x = e[12];
|
|
411
|
-
this.y = e[13];
|
|
412
|
-
this.z = e[14];
|
|
413
|
-
return this;
|
|
414
|
-
},
|
|
415
|
-
setFromMatrixScale: function (m) {
|
|
416
|
-
var sx = this.setFromMatrixColumn(m, 0).length();
|
|
417
|
-
var sy = this.setFromMatrixColumn(m, 1).length();
|
|
418
|
-
var sz = this.setFromMatrixColumn(m, 2).length();
|
|
419
|
-
this.x = sx;
|
|
420
|
-
this.y = sy;
|
|
421
|
-
this.z = sz;
|
|
422
|
-
return this;
|
|
423
|
-
},
|
|
424
|
-
setFromMatrixColumn: function (m, index) {
|
|
425
|
-
return this.fromArray(m.elements, index * 4);
|
|
426
|
-
},
|
|
427
|
-
equals: function (v) {
|
|
428
|
-
return v.x === this.x && v.y === this.y && v.z === this.z;
|
|
429
|
-
},
|
|
430
|
-
fromArray: function (array, offset) {
|
|
431
|
-
if (offset === undefined) offset = 0;
|
|
432
|
-
this.x = array[offset];
|
|
433
|
-
this.y = array[offset + 1];
|
|
434
|
-
this.z = array[offset + 2];
|
|
435
|
-
return this;
|
|
436
|
-
},
|
|
437
|
-
toArray: function (array, offset) {
|
|
438
|
-
if (array === undefined) array = [];
|
|
439
|
-
if (offset === undefined) offset = 0;
|
|
440
|
-
array[offset] = this.x;
|
|
441
|
-
array[offset + 1] = this.y;
|
|
442
|
-
array[offset + 2] = this.z;
|
|
443
|
-
return array;
|
|
444
|
-
},
|
|
445
|
-
fromBufferAttribute: function (attribute, index, offset) {
|
|
446
|
-
if (offset !== undefined) {
|
|
447
|
-
console.warn('THREE.Vector3: offset has been removed from .fromBufferAttribute().');
|
|
448
|
-
}
|
|
449
|
-
|
|
450
|
-
this.x = attribute.getX(index);
|
|
451
|
-
this.y = attribute.getY(index);
|
|
452
|
-
this.z = attribute.getZ(index);
|
|
453
|
-
return this;
|
|
454
|
-
}
|
|
455
|
-
});
|
|
456
|
-
export { Vector3 };
|
|
457
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9jb3JlL3RocmVlL1ZlY3RvcjMuanMiXSwibmFtZXMiOlsiX01hdGgiLCJRdWF0ZXJuaW9uIiwiVmVjdG9yMyIsIngiLCJ5IiwieiIsIk9iamVjdCIsImFzc2lnbiIsInByb3RvdHlwZSIsImlzVmVjdG9yMyIsInNldCIsInNldFNjYWxhciIsInNjYWxhciIsInNldFgiLCJzZXRZIiwic2V0WiIsInNldENvbXBvbmVudCIsImluZGV4IiwidmFsdWUiLCJFcnJvciIsImdldENvbXBvbmVudCIsImNsb25lIiwiY29uc3RydWN0b3IiLCJjb3B5IiwidiIsImFkZCIsInciLCJ1bmRlZmluZWQiLCJjb25zb2xlIiwid2FybiIsImFkZFZlY3RvcnMiLCJhZGRTY2FsYXIiLCJzIiwiYSIsImIiLCJhZGRTY2FsZWRWZWN0b3IiLCJzdWIiLCJzdWJWZWN0b3JzIiwic3ViU2NhbGFyIiwibXVsdGlwbHkiLCJtdWx0aXBseVZlY3RvcnMiLCJtdWx0aXBseVNjYWxhciIsImFwcGx5RXVsZXIiLCJxdWF0ZXJuaW9uIiwiZXVsZXIiLCJpc0V1bGVyIiwiZXJyb3IiLCJhcHBseVF1YXRlcm5pb24iLCJzZXRGcm9tRXVsZXIiLCJhcHBseUF4aXNBbmdsZSIsImF4aXMiLCJhbmdsZSIsInNldEZyb21BeGlzQW5nbGUiLCJhcHBseU1hdHJpeDMiLCJtIiwiZSIsImVsZW1lbnRzIiwiYXBwbHlNYXRyaXg0IiwicSIsInF4IiwicXkiLCJxeiIsInF3IiwiaXgiLCJpeSIsIml6IiwiaXciLCJwcm9qZWN0IiwiY2FtZXJhIiwibWF0cml4V29ybGRJbnZlcnNlIiwicHJvamVjdGlvbk1hdHJpeCIsInVucHJvamVjdCIsInByb2plY3Rpb25NYXRyaXhJbnZlcnNlIiwibWF0cml4V29ybGQiLCJ0cmFuc2Zvcm1EaXJlY3Rpb24iLCJub3JtYWxpemUiLCJkaXZpZGUiLCJkaXZpZGVTY2FsYXIiLCJtaW4iLCJNYXRoIiwibWF4IiwiY2xhbXAiLCJjbGFtcFNjYWxhciIsIm1pblZhbCIsIm1heFZhbCIsImNsYW1wTGVuZ3RoIiwibGVuZ3RoIiwiZmxvb3IiLCJjZWlsIiwicm91bmQiLCJyb3VuZFRvWmVybyIsIm5lZ2F0ZSIsImRvdCIsImxlbmd0aFNxIiwic3FydCIsIm1hbmhhdHRhbkxlbmd0aCIsImFicyIsInNldExlbmd0aCIsImxlcnAiLCJhbHBoYSIsImxlcnBWZWN0b3JzIiwidjEiLCJ2MiIsImNyb3NzIiwiY3Jvc3NWZWN0b3JzIiwiYXgiLCJheSIsImF6IiwiYngiLCJieSIsImJ6IiwicHJvamVjdE9uVmVjdG9yIiwidmVjdG9yIiwicHJvamVjdE9uUGxhbmUiLCJwbGFuZU5vcm1hbCIsInJlZmxlY3QiLCJub3JtYWwiLCJhbmdsZVRvIiwidGhldGEiLCJhY29zIiwiZGlzdGFuY2VUbyIsImRpc3RhbmNlVG9TcXVhcmVkIiwiZHgiLCJkeSIsImR6IiwibWFuaGF0dGFuRGlzdGFuY2VUbyIsInNldEZyb21TcGhlcmljYWwiLCJzZXRGcm9tU3BoZXJpY2FsQ29vcmRzIiwicmFkaXVzIiwicGhpIiwic2luUGhpUmFkaXVzIiwic2luIiwiY29zIiwic2V0RnJvbUN5bGluZHJpY2FsIiwiYyIsInNldEZyb21DeWxpbmRyaWNhbENvb3JkcyIsInNldEZyb21NYXRyaXhQb3NpdGlvbiIsInNldEZyb21NYXRyaXhTY2FsZSIsInN4Iiwic2V0RnJvbU1hdHJpeENvbHVtbiIsInN5Iiwic3oiLCJmcm9tQXJyYXkiLCJlcXVhbHMiLCJhcnJheSIsIm9mZnNldCIsInRvQXJyYXkiLCJmcm9tQnVmZmVyQXR0cmlidXRlIiwiYXR0cmlidXRlIiwiZ2V0WCIsImdldFkiLCJnZXRaIl0sIm1hcHBpbmdzIjoiQUFBQSxTQUFTQSxLQUFULFFBQXNCLFdBQXRCO0FBQ0EsU0FBU0MsVUFBVCxRQUEyQixpQkFBM0I7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLFNBQVNDLE9BQVQsQ0FBa0JDLENBQWxCLEVBQXFCQyxDQUFyQixFQUF3QkMsQ0FB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akNDLEVBQUFBLE9BQU8sRUFBRSxVQUFXRixLQUFYLEVBQWtCQyxNQUFsQixFQUEyQjtBQUVuQyxRQUFLRCxLQUFLLEtBQUtySCxTQUFmLEVBQTJCcUgsS0FBSyxHQUFHLEVBQVI7QUFDM0IsUUFBS0MsTUFBTSxLQUFLdEgsU0FBaEIsRUFBNEJzSCxNQUFNLEdBQUcsQ0FBVDtBQUU1QkQsSUFBQUEsS0FBSyxDQUFFQyxNQUFGLENBQUwsR0FBa0IsS0FBSzlJLENBQXZCO0FBQ0E2SSxJQUFBQSxLQUFLLENBQUVDLE1BQU0sR0FBRyxDQUFYLENBQUwsR0FBc0IsS0FBSzdJLENBQTNCO0FBQ0E0SSxJQUFBQSxLQUFLLENBQUVDLE1BQU0sR0FBRyxDQUFYLENBQUwsR0FBc0IsS0FBSzVJLENBQTNCO0FBRUEsV0FBTzJJLEtBQVA7QUFFQSxHQXZxQmdDO0FBeXFCakNHLEVBQUFBLG1CQUFtQixFQUFFLFVBQVdDLFNBQVgsRUFBc0JuSSxLQUF0QixFQUE2QmdJLE1BQTdCLEVBQXNDO0FBRTFELFFBQUtBLE1BQU0sS0FBS3RILFNBQWhCLEVBQTRCO0FBRTNCQyxNQUFBQSxPQUFPLENBQUNDLElBQVIsQ0FBYyxxRUFBZDtBQUVBOztBQUVELFNBQUsxQixDQUFMLEdBQVNpSixTQUFTLENBQUNDLElBQVYsQ0FBZ0JwSSxLQUFoQixDQUFUO0FBQ0EsU0FBS2IsQ0FBTCxHQUFTZ0osU0FBUyxDQUFDRSxJQUFWLENBQWdCckksS0FBaEIsQ0FBVDtBQUNBLFNBQUtaLENBQUwsR0FBUytJLFNBQVMsQ0FBQ0csSUFBVixDQUFnQnRJLEtBQWhCLENBQVQ7QUFFQSxXQUFPLElBQVA7QUFFQTtBQXZyQmdDLENBQWxDO0FBNHJCQSxTQUFTZixPQUFUIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgX01hdGggfSBmcm9tICcuL01hdGguanMnO1xuaW1wb3J0IHsgUXVhdGVybmlvbiB9IGZyb20gJy4vUXVhdGVybmlvbi5qcyc7XG5cbi8qKlxuICogQGF1dGhvciBtcmRvb2IgLyBodHRwOi8vbXJkb29iLmNvbS9cbiAqIEBhdXRob3Iga2lsZSAvIGh0dHA6Ly9raWxlLnN0cmF2YWdhbnphLm9yZy9cbiAqIEBhdXRob3IgcGhpbG9nYiAvIGh0dHA6Ly9ibG9nLnRoZWppdC5vcmcvXG4gKiBAYXV0aG9yIG1pa2FlbCBlbXRpbmdlciAvIGh0dHA6Ly9nb21vLnNlL1xuICogQGF1dGhvciBlZ3JhZXRoZXIgLyBodHRwOi8vZWdyYWV0aGVyLmNvbS9cbiAqIEBhdXRob3IgV2VzdExhbmdsZXkgLyBodHRwOi8vZ2l0aHViLmNvbS9XZXN0TGFuZ2xleVxuICovXG5cbmZ1bmN0aW9uIFZlY3RvcjMoIHgsIHksIHogKSB7XG5cblx0dGhpcy54ID0geCB8fCAwO1xuXHR0aGlzLnkgPSB5IHx8IDA7XG5cdHRoaXMueiA9IHogfHwgMDtcblxufVxuXG5PYmplY3QuYXNzaWduKCBWZWN0b3IzLnByb3RvdHlwZSwge1xuXG5cdGlzVmVjdG9yMzogdHJ1ZSxcblxuXHRzZXQ6IGZ1bmN0aW9uICggeCwgeSwgeiApIHtcblxuXHRcdHRoaXMueCA9IHg7XG5cdFx0dGhpcy55ID0geTtcblx0XHR0aGlzLnogPSB6O1xuXG5cdFx0cmV0dXJuIHRoaXM7XG5cblx0fSxcblxuXHRzZXRTY2FsYXI6IGZ1bmN0aW9uICggc2NhbGFyICkge1xuXG5cdFx0dGhpcy54ID0gc2NhbGFyO1xuXHRcdHRoaXMueSA9IHNjYWxhcjtcblx0XHR0aGlzLnogPSBzY2FsYXI7XG5cblx0XHRyZXR1cm4gdGhpcztcblxuXHR9LFxuXG5cdHNldFg6IGZ1bmN0aW9uICggeCApIHtcblxuXHRcdHRoaXMueCA9IHg7XG5cblx0XHRyZXR1cm4gdGhpcztcblxuXHR9LFxuXG5cdHNldFk6IGZ1bmN0aW9uICggeSApIHtcblxuXHRcdHRoaXMueSA9IHk7XG5cblx0XHRyZXR1cm4gdGhpcztcblxuXHR9LFxuXG5cdHNldFo6IGZ1bmN0aW9uICggeiApIHtcblxuXHRcdHRoaXMueiA9IHo7XG5cblx0XHRyZXR1cm4gdGhpcztcblxuXHR9LFxuXG5cdHNldENvbXBvbmVudDogZnVuY3Rpb24gKCBpbmRleCwgdmFsdWUgKSB7XG5cblx0XHRzd2l0Y2ggKCBpbmRleCApIHtcblxuXHRcdFx0Y2FzZSAwOiB0aGlzLnggPSB2YWx1ZTsgYnJlYWs7XG5cdFx0XHRjYXNlIDE6IHRoaXMueSA9IHZhbHVlOyBicmVhaztcblx0XHRcdGNhc2UgMjogdGhpcy56ID0gdmFsdWU7IGJyZWFrO1xuXHRcdFx0ZGVmYXVsdDogdGhyb3cgbmV3IEVycm9yKCAnaW5kZXggaXMgb3V0IG9mIHJhbmdlOiAnICsgaW5kZXggKTtcblxuXHRcdH1cblxuXHRcdHJldHVybiB0aGlzO1xuXG5cdH0sXG5cblx0Z2V0Q29tcG9uZW50OiBmdW5jdGlvbiAoIGluZGV4ICkge1xuXG5cdFx0c3dpdGNoICggaW5kZXggKSB7XG5cblx0XHRcdGNhc2UgMDogcmV0dXJuIHRoaXMueDtcblx0XHRcdGNhc2UgMTogcmV0dXJuIHRoaXMueTtcblx0XHRcdGNhc2UgMjogcmV0dXJuIHRoaXMuejtcblx0XHRcdGRlZmF1bHQ6IHRocm93IG5ldyBFcnJvciggJ2luZGV4IGlzIG91dCBvZiByYW5nZTogJyArIGluZGV4ICk7XG5cblx0XHR9XG5cblx0fSxcblxuXHRjbG9uZTogZnVuY3Rpb24gKCkge1xuXG5cdFx0cmV0dXJuIG5ldyB0aGlzLmNvbnN0cnVjdG9yKCB0aGlzLngsIHRoaXMueSwgdGhpcy56ICk7XG5cblx0fSxcblxuXHRjb3B5OiBmdW5jdGlvbiAoIHYgKSB7XG5cblx0XHR0aGlzLnggPSB2Lng7XG5cdFx0dGhpcy55ID0gdi55O1xuXHRcdHRoaXMueiA9IHYuejtcblxuXHRcdHJldHVybiB0aGlzO1xuXG5cdH0sXG5cblx0YWRkOiBmdW5jdGlvbiAoIHYsIHcgKSB7XG5cblx0XHRpZiAoIHcgIT09IHVuZGVmaW5lZCApIHtcblxuXHRcdFx0Y29uc29sZS53YXJuKCAnVEhSRUUuVmVjdG9yMzogLmFkZCgpIG5vdyBvbmx5IGFjY2VwdHMgb25lIGFyZ3VtZW50LiBVc2UgLmFkZFZlY3RvcnMoIGEsIGIgKSBpbnN0ZWFkLicgKTtcblx0XHRcdHJldHVybiB0aGlzLmFkZFZlY3RvcnMoIHYsIHcgKTtcblxuXHRcdH1cblxuXHRcdHRoaXMueCArPSB2Lng7XG5cdFx0dGhpcy55ICs9IHYueTtcblx0XHR0aGlzLnogKz0gdi56O1xuXG5cdFx0cmV0dXJuIHRoaXM7XG5cblx0fSxcblxuXHRhZGRTY2FsYXI6IGZ1bmN0aW9uICggcyApIHtcblxuXHRcdHRoaXMueCArPSBzO1xuXHRcdHRoaXMueSArPSBzO1xuXHRcdHRoaXMueiArPSBzO1xuXG5cdFx0cmV0dXJuIHRoaXM7XG5cblx0fSxcblxuXHRhZGRWZWN0b3JzOiBmdW5jdGlvbiAoIGEsIGIgKSB7XG5cblx0XHR0aGlzLnggPSBhLnggKyBiLng7XG5cdFx0dGhpcy55ID0gYS55ICsgYi55O1xuXHRcdHRoaXMueiA9IGEueiArIGIuejtcblxuXHRcdHJldHVybiB0aGlzO1xuXG5cdH0sXG5cblx0YWRkU2NhbGVkVmVjdG9yOiBmdW5jdGlvbiAoIHYsIHMgKSB7XG5cblx0XHR0aGlzLnggKz0gdi54ICogcztcblx0XHR0aGlzLnkgKz0gdi55ICogcztcblx0XHR0aGlzLnogKz0gdi56ICogcztcblxuXHRcdHJldHVybiB0aGlzO1xuXG5cdH0sXG5cblx0c3ViOiBmdW5jdGlvbiAoIHYsIHcgKSB7XG5cblx0XHRpZiAoIHcgIT09IHVuZGVmaW5lZCApIHtcblxuXHRcdFx0Y29uc29sZS53YXJuKCAnVEhSRUUuVmVjdG9yMzogLnN1YigpIG5vdyBvbmx5IGFjY2VwdHMgb25lIGFyZ3VtZW50LiBVc2UgLnN1YlZlY3RvcnMoIGEsIGIgKSBpbnN0ZWFkLicgKTtcblx0XHRcdHJldHVybiB0aGlzLnN1YlZlY3RvcnMoIHYsIHcgKTtcblxuXHRcdH1cblxuXHRcdHRoaXMueCAtPSB2Lng7XG5cdFx0dGhpcy55IC09IHYueTtcblx0XHR0aGlzLnogLT0gdi56O1xuXG5cdFx0cmV0dXJuIHRoaXM7XG5cblx0fSxcblxuXHRzdWJTY2FsYXI6IGZ1bmN0aW9uICggcyApIHtcblxuXHRcdHRoaXMueCAtPSBzO1xuXHRcdHRoaXMueSAtPSBzO1xuXHRcdHRoaXMueiAtPSBzO1xuXG5cdFx0cmV0dXJuIHRoaXM7XG5cblx0fSxcblxuXHRzdWJWZWN0b3JzOiBmdW5jdGlvbiAoIGEsIGIgKSB7XG5cblx0XHR0aGlzLnggPSBhLnggLSBiLng7XG5cdFx0dGhpcy55ID0gYS55IC0gYi55O1xuXHRcdHRoaXMueiA9IGEueiAtIGIuejtcblxuXHRcdHJldHVybiB0aGlzO1xuXG5cdH0sXG5cblx0bXVsdGlwbHk6IGZ1bmN0aW9uICggdiwgdyApIHtcblxuXHRcdGlmICggdyAhPT0gdW5kZWZpbmVkICkge1xuXG5cdFx0XHRjb25zb2xlLndhcm4oICdUSFJFRS5WZWN0b3IzOiAubXVsdGlwbHkoKSBub3cgb25seSBhY2NlcHRzIG9uZSBhcmd1bWVudC4gVXNlIC5tdWx0aXBseVZlY3RvcnMoIGEsIGIgKSBpbnN0ZWFkLicgKTtcblx0XHRcdHJldHVybiB0aGlzLm11bHRpcGx5VmVjdG9ycyggdiwgdyApO1xuXG5cdFx0fVxuXG5cdFx0dGhpcy54ICo9IHYueDtcblx0XHR0aGlzLnkgKj0gdi55O1xuXHRcdHRoaXMueiAqPSB2Lno7XG5cblx0XHRyZXR1cm4gdGhpcztcblxuXHR9LFxuXG5cdG11bHRpcGx5U2NhbGFyOiBmdW5jdGlvbiAoIHNjYWxhciApIHtcblxuXHRcdHRoaXMueCAqPSBzY2FsYXI7XG5cdFx0dGhpcy55ICo9IHNjYWxhcjtcblx0XHR0aGlzLnogKj0gc2NhbGFyO1xuXG5cdFx0cmV0dXJuIHRoaXM7XG5cblx0fSxcblxuXHRtdWx0aXBseVZlY3RvcnM6IGZ1bmN0aW9uICggYSwgYiApIHtcblxuXHRcdHRoaXMueCA9IGEueCAqIGIueDtcblx0XHR0aGlzLnkgPSBhLnkgKiBiLnk7XG5cdFx0dGhpcy56ID0gYS56ICogYi56O1xuXG5cdFx0cmV0dXJuIHRoaXM7XG5cblx0fSxcblxuXHRhcHBseUV1bGVyOiBmdW5jdGlvbiAoKSB7XG5cblx0XHR2YXIgcXVhdGVybmlvbiA9IG5ldyBRdWF0ZXJuaW9uKCk7XG5cblx0XHRyZXR1cm4gZnVuY3Rpb24gYXBwbHlFdWxlciggZXVsZXIgKSB7XG5cblx0XHRcdGlmICggISAoIGV1bGVyICYmIGV1bGVyLmlzRXVsZXIgKSApIHtcblxuXHRcdFx0XHRjb25zb2xlLmVycm9yKCAnVEhSRUUuVmVjdG9yMzogLmFwcGx5RXVsZXIoKSBub3cgZXhwZWN0cyBhbiBFdWxlciByb3RhdGlvbiByYXRoZXIgdGhhbiBhIFZlY3RvcjMgYW5kIG9yZGVyLicgKTtcblxuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gdGhpcy5hcHBseVF1YXRlcm5pb24oIHF1YXRlcm5pb24uc2V0RnJvbUV1bGVyKCBldWxlciApICk7XG5cblx0XHR9O1xuXG5cdH0oKSxcblxuXHRhcHBseUF4aXNBbmdsZTogZnVuY3Rpb24gKCkge1xuXG5cdFx0dmFyIHF1YXRlcm5pb24gPSBuZXcgUXVhdGVybmlvbigpO1xuXG5cdFx0cmV0dXJuIGZ1bmN0aW9uIGFwcGx5QXhpc0FuZ2xlKCBheGlzLCBhbmdsZSApIHtcblxuXHRcdFx0cmV0dXJuIHRoaXMuYXBwbHlRdWF0ZXJuaW9uKCBxdWF0ZXJuaW9uLnNldEZyb21BeGlzQW5nbGUoIGF4aXMsIGFuZ2xlICkgKTtcblxuXHRcdH07XG5cblx0fSgpLFxuXG5cdGFwcGx5TWF0cml4MzogZnVuY3Rpb24gKCBtICkge1xuXG5cdFx0dmFyIHggPSB0aGlzLngsIHkgPSB0aGlzLnksIHogPSB0aGlzLno7XG5cdFx0dmFyIGUgPSBtLmVsZW1lbnRzO1xuXG5cdFx0dGhpcy54ID0gZVsgMCBdICogeCArIGVbIDMgXSAqIHkgKyBlWyA2IF0gKiB6O1xuXHRcdHRoaXMueSA9IGVbIDEgXSAqIHggKyBlWyA0IF0gKiB5ICsgZVsgNyBdICogejtcblx0XHR0aGlzLnogPSBlWyAyIF0gKiB4ICsgZVsgNSBdICogeSArIGVbIDggXSAqIHo7XG5cblx0XHRyZXR1cm4gdGhpcztcblxuXHR9LFxuXG5cdGFwcGx5TWF0cml4NDogZnVuY3Rpb24gKCBtICkge1xuXG5cdFx0dmFyIHggPSB0aGlzLngsIHkgPSB0aGlzLnksIHogPSB0aGlzLno7XG5cdFx0dmFyIGUgPSBtLmVsZW1lbnRzO1xuXG5cdFx0dmFyIHcgPSAxIC8gKCBlWyAzIF0gKiB4ICsgZVsgNyBdICogeSArIGVbIDExIF0gKiB6ICsgZVsgMTUgXSApO1xuXG5cdFx0dGhpcy54ID0gKCBlWyAwIF0gKiB4ICsgZVsgNCBdICogeSArIGVbIDggXSAqIHogKyBlWyAxMiBdICkgKiB3O1xuXHRcdHRoaXMueSA9ICggZVsgMSBdICogeCArIGVbIDUgXSAqIHkgKyBlWyA5IF0gKiB6ICsgZVsgMTMgXSApICogdztcblx0XHR0aGlzLnogPSAoIGVbIDIgXSAqIHggKyBlWyA2IF0gKiB5ICsgZVsgMTAgXSAqIHogKyBlWyAxNCBdICkgKiB3O1xuXG5cdFx0cmV0dXJuIHRoaXM7XG5cblx0fSxcblxuXHRhcHBseVF1YXRlcm5pb246IGZ1bmN0aW9uICggcSApIHtcblxuXHRcdHZhciB4ID0gdGhpcy54LCB5ID0gdGhpcy55LCB6ID0gdGhpcy56O1xuXHRcdHZhciBxeCA9IHEueCwgcXkgPSBxLnksIHF6ID0gcS56LCBxdyA9IHEudztcblxuXHRcdC8vIGNhbGN1bGF0ZSBxdWF0ICogdmVjdG9yXG5cblx0XHR2YXIgaXggPSBxdyAqIHggKyBxeSAqIHogLSBxeiAqIHk7XG5cdFx0dmFyIGl5ID0gcXcgKiB5ICsgcXogKiB4IC0gcXggKiB6O1xuXHRcdHZhciBpeiA9IHF3ICogeiArIHF4ICogeSAtIHF5ICogeDtcblx0XHR2YXIgaXcgPSAtIHF4ICogeCAtIHF5ICogeSAtIHF6ICogejtcblxuXHRcdC8vIGNhbGN1bGF0ZSByZXN1bHQgKiBpbnZlcnNlIHF1YXRcblxuXHRcdHRoaXMueCA9IGl4ICogcXcgKyBpdyAqIC0gcXggKyBpeSAqIC0gcXogLSBpeiAqIC0gcXk7XG5cdFx0dGhpcy55ID0gaXkgKiBxdyArIGl3ICogLSBxeSArIGl6ICogLSBxeCAtIGl4ICogLSBxejtcblx0XHR0aGlzLnogPSBpeiAqIHF3ICsgaXcgKiAtIHF6ICsgaXggKiAtIHF5IC0gaXkgKiAtIHF4O1xuXG5cdFx0cmV0dXJuIHRoaXM7XG5cblx0fSxcblxuXHRwcm9qZWN0OiBmdW5jdGlvbiAoIGNhbWVyYSApIHtcblxuXHRcdHJldHVybiB0aGlzLmFwcGx5TWF0cml4NCggY2FtZXJhLm1hdHJpeFdvcmxkSW52ZXJzZSApLmFwcGx5TWF0cml4NCggY2FtZXJhLnByb2plY3Rpb25NYXRyaXggKTtcblxuXHR9LFxuXG5cdHVucHJvamVjdDogZnVuY3Rpb24gKCBjYW1lcmEgKSB7XG5cblx0XHRyZXR1cm4gdGhpcy5hcHBseU1hdHJpeDQoIGNhbWVyYS5wcm9qZWN0aW9uTWF0cml4SW52ZXJzZSApLmFwcGx5TWF0cml4NCggY2FtZXJhLm1hdHJpeFdvcmxkICk7XG5cblx0fSxcblxuXHR0cmFuc2Zvcm1EaXJlY3Rpb246IGZ1bmN0aW9uICggbSApIHtcblxuXHRcdC8vIGlucHV0OiBUSFJFRS5NYXRyaXg0IGFmZmluZSBtYXRyaXhcblx0XHQvLyB2ZWN0b3IgaW50ZXJwcmV0ZWQgYXMgYSBkaXJlY3Rpb25cblxuXHRcdHZhciB4ID0gdGhpcy54LCB5ID0gdGhpcy55LCB6ID0gdGhpcy56O1xuXHRcdHZhciBlID0gbS5lbGVtZW50cztcblxuXHRcdHRoaXMueCA9IGVbIDAgXSAqIHggKyBlWyA0IF0gKiB5ICsgZVsgOCBdICogejtcblx0XHR0aGlzLnkgPSBlWyAxIF0gKiB4ICsgZVsgNSBdICogeSArIGVbIDkgXSAqIHo7XG5cdFx0dGhpcy56ID0gZVsgMiBdICogeCArIGVbIDYgXSAqIHkgKyBlWyAxMCBdICogejtcblxuXHRcdHJldHVybiB0aGlzLm5vcm1hbGl6ZSgpO1xuXG5cdH0sXG5cblx0ZGl2aWRlOiBmdW5jdGlvbiAoIHYgKSB7XG5cblx0XHR0aGlzLnggLz0gdi54O1xuXHRcdHRoaXMueSAvPSB2Lnk7XG5cdFx0dGhpcy56IC89IHYuejtcblxuXHRcdHJldHVybiB0aGlzO1xuXG5cdH0sXG5cblx0ZGl2aWRlU2NhbGFyOiBmdW5jdGlvbiAoIHNjYWxhciApIHtcblxuXHRcdHJldHVybiB0aGlzLm11bHRpcGx5U2NhbGFyKCAxIC8gc2NhbGFyICk7XG5cblx0fSxcblxuXHRtaW46IGZ1bmN0aW9uICggdiApIHtcblxuXHRcdHRoaXMueCA9IE1hdGgubWluKCB0aGlzLngsIHYueCApO1xuXHRcdHRoaXMueSA9IE1hdGgubWluKCB0aGlzLnksIHYueSApO1xuXHRcdHRoaXMueiA9IE1hdGgubWluKCB0aGlzLnosIHYueiApO1xuXG5cdFx0cmV0dXJuIHRoaXM7XG5cblx0fSxcblxuXHRtYXg6IGZ1bmN0aW9uICggdiApIHtcblxuXHRcdHRoaXMueCA9IE1hdGgubWF4KCB0aGlzLngsIHYueCApO1xuXHRcdHRoaXMueSA9IE1hdGgubWF4KCB0aGlzLnksIHYueSApO1xuXHRcdHRoaXMueiA9IE1hdGgubWF4KCB0aGlzLnosIHYueiApO1xuXG5cdFx0cmV0dXJuIHRoaXM7XG5cblx0fSxcblxuXHRjbGFtcDogZnVuY3Rpb24gKCBtaW4sIG1heCApIHtcblxuXHRcdC8vIGFzc3VtZXMgbWluIDwgbWF4LCBjb21wb25lbnR3aXNlXG5cblx0XHR0aGlzLnggPSBNYXRoLm1heCggbWluLngsIE1hdGgubWluKCBtYXgueCwgdGhpcy54ICkgKTtcblx0XHR0aGlzLnkgPSBNYXRoLm1heCggbWluLnksIE1hdGgubWluKCBtYXgueSwgdGhpcy55ICkgKTtcblx0XHR0aGlzLnogPSBNYXRoLm1heCggbWluLnosIE1hdGgubWluKCBtYXgueiwgdGhpcy56ICkgKTtcblxuXHRcdHJldHVybiB0aGlzO1xuXG5cdH0sXG5cblx0Y2xhbXBTY2FsYXI6IGZ1bmN0aW9uICggbWluVmFsLCBtYXhWYWwgKSB7XG5cblx0XHR0aGlzLnggPSBNYXRoLm1heCggbWluVmFsLCBNYXRoLm1pbiggbWF4VmFsLCB0aGlzLnggKSApO1xuXHRcdHRoaXMueSA9IE1hdGgubWF4KCBtaW5WYWwsIE1hdGgubWluKCBtYXhWYWwsIHRoaXMueSApICk7XG5cdFx0dGhpcy56ID0gTWF0aC5tYXgoIG1pblZhbCwgTWF0aC5taW4oIG1heFZhbCwgdGhpcy56ICkgKTtcblxuXHRcdHJldHVybiB0aGlzO1xuXG5cdH0sXG5cblx0Y2xhbXBMZW5ndGg6IGZ1bmN0aW9uICggbWluLCBtYXggKSB7XG5cblx0XHR2YXIgbGVuZ3RoID0gdGhpcy5sZW5ndGgoKTtcblxuXHRcdHJldHVybiB0aGlzLmRpdmlkZVNjYWxhciggbGVuZ3RoIHx8IDEgKS5tdWx0aXBseVNjYWxhciggTWF0aC5tYXgoIG1pbiwgTWF0aC5taW4oIG1heCwgbGVuZ3RoICkgKSApO1xuXG5cdH0sXG5cblx0Zmxvb3I6IGZ1bmN0aW9uICgpIHtcblxuXHRcdHRoaXMueCA9IE1hdGguZmxvb3IoIHRoaXMueCApO1xuXHRcdHRoaXMueSA9IE1hdGguZmxvb3IoIHRoaXMueSApO1xuXHRcdHRoaXMueiA9IE1hdGguZmxvb3IoIHRoaXMueiApO1xuXG5cdFx0cmV0dXJuIHRoaXM7XG5cblx0fSxcblxuXHRjZWlsOiBmdW5jdGlvbiAoKSB7XG5cblx0XHR0aGlzLnggPSBNYXRoLmNlaWwoIHRoaXMueCApO1xuXHRcdHRoaXMueSA9IE1hdGguY2VpbCggdGhpcy55ICk7XG5cdFx0dGhpcy56ID0gTWF0aC5jZWlsKCB0aGlzLnogKTtcblxuXHRcdHJldHVybiB0aGlzO1xuXG5cdH0sXG5cblx0cm91bmQ6IGZ1bmN0aW9uICgpIHtcblxuXHRcdHRoaXMueCA9IE1hdGgucm91bmQoIHRoaXMueCApO1xuXHRcdHRoaXMueSA9IE1hdGgucm91bmQoIHRoaXMueSApO1xuXHRcdHRoaXMueiA9IE1hdGgucm91bmQoIHRoaXMueiApO1xuXG5cdFx0cmV0dXJuIHRoaXM7XG5cblx0fSxcblxuXHRyb3VuZFRvWmVybzogZnVuY3Rpb24gKCkge1xuXG5cdFx0dGhpcy54ID0gKCB0aGlzLnggPCAwICkgPyBNYXRoLmNlaWwoIHRoaXMueCApIDogTWF0aC5mbG9vciggdGhpcy54ICk7XG5cdFx0dGhpcy55ID0gKCB0aGlzLnkgPCAwICkgPyBNYXRoLmNlaWwoIHRoaXMueSApIDogTWF0aC5mbG9vciggdGhpcy55ICk7XG5cdFx0dGhpcy56ID0gKCB0aGlzLnogPCAwICkgPyBNYXRoLmNlaWwoIHRoaXMueiApIDogTWF0aC5mbG9vciggdGhpcy56ICk7XG5cblx0XHRyZXR1cm4gdGhpcztcblxuXHR9LFxuXG5cdG5lZ2F0ZTogZnVuY3Rpb24gKCkge1xuXG5cdFx0dGhpcy54ID0gLSB0aGlzLng7XG5cdFx0dGhpcy55ID0gLSB0aGlzLnk7XG5cdFx0dGhpcy56ID0gLSB0aGlzLno7XG5cblx0XHRyZXR1cm4gdGhpcztcblxuXHR9LFxuXG5cdGRvdDogZnVuY3Rpb24gKCB2ICkge1xuXG5cdFx0cmV0dXJuIHRoaXMueCAqIHYueCArIHRoaXMueSAqIHYueSArIHRoaXMueiAqIHYuejtcblxuXHR9LFxuXG5cdC8vIFRPRE8gbGVuZ3RoU3F1YXJlZD9cblxuXHRsZW5ndGhTcTogZnVuY3Rpb24gKCkge1xuXG5cdFx0cmV0dXJuIHRoaXMueCAqIHRoaXMueCArIHRoaXMueSAqIHRoaXMueSArIHRoaXMueiAqIHRoaXMuejtcblxuXHR9LFxuXG5cdGxlbmd0aDogZnVuY3Rpb24gKCkge1xuXG5cdFx0cmV0dXJuIE1hdGguc3FydCggdGhpcy54ICogdGhpcy54ICsgdGhpcy55ICogdGhpcy55ICsgdGhpcy56ICogdGhpcy56ICk7XG5cblx0fSxcblxuXHRtYW5oYXR0YW5MZW5ndGg6IGZ1bmN0aW9uICgpIHtcblxuXHRcdHJldHVybiBNYXRoLmFicyggdGhpcy54ICkgKyBNYXRoLmFicyggdGhpcy55ICkgKyBNYXRoLmFicyggdGhpcy56ICk7XG5cblx0fSxcblxuXHRub3JtYWxpemU6IGZ1bmN0aW9uICgpIHtcblxuXHRcdHJldHVybiB0aGlzLmRpdmlkZVNjYWxhciggdGhpcy5sZW5ndGgoKSB8fCAxICk7XG5cblx0fSxcblxuXHRzZXRMZW5ndGg6IGZ1bmN0aW9uICggbGVuZ3RoICkge1xuXG5cdFx0cmV0dXJuIHRoaXMubm9ybWFsaXplKCkubXVsdGlwbHlTY2FsYXIoIGxlbmd0aCApO1xuXG5cdH0sXG5cblx0bGVycDogZnVuY3Rpb24gKCB2LCBhbHBoYSApIHtcblxuXHRcdHRoaXMueCArPSAoIHYueCAtIHRoaXMueCApICogYWxwaGE7XG5cdFx0dGhpcy55ICs9ICggdi55IC0gdGhpcy55ICkgKiBhbHBoYTtcblx0XHR0aGlzLnogKz0gKCB2LnogLSB0aGlzLnogKSAqIGFscGhhO1xuXG5cdFx0cmV0dXJuIHRoaXM7XG5cblx0fSxcblxuXHRsZXJwVmVjdG9yczogZnVuY3Rpb24gKCB2MSwgdjIsIGFscGhhICkge1xuXG5cdFx0cmV0dXJuIHRoaXMuc3ViVmVjdG9ycyggdjIsIHYxICkubXVsdGlwbHlTY2FsYXIoIGFscGhhICkuYWRkKCB2MSApO1xuXG5cdH0sXG5cblx0Y3Jvc3M6IGZ1bmN0aW9uICggdiwgdyApIHtcblxuXHRcdGlmICggdyAhPT0gdW5kZWZpbmVkICkge1xuXG5cdFx0XHRjb25zb2xlLndhcm4oICdUSFJFRS5WZWN0b3IzOiAuY3Jvc3MoKSBub3cgb25seSBhY2NlcHRzIG9uZSBhcmd1bWVudC4gVXNlIC5jcm9zc1ZlY3RvcnMoIGEsIGIgKSBpbnN0ZWFkLicgKTtcblx0XHRcdHJldHVybiB0aGlzLmNyb3NzVmVjdG9ycyggdiwgdyApO1xuXG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRoaXMuY3Jvc3NWZWN0b3JzKCB0aGlzLCB2ICk7XG5cblx0fSxcblxuXHRjcm9zc1ZlY3RvcnM6IGZ1bmN0aW9uICggYSwgYiApIHtcblxuXHRcdHZhciBheCA9IGEueCwgYXkgPSBhLnksIGF6ID0gYS56O1xuXHRcdHZhciBieCA9IGIueCwgYnkgPSBiLnksIGJ6ID0gYi56O1xuXG5cdFx0dGhpcy54ID0gYXkgKiBieiAtIGF6ICogYnk7XG5cdFx0dGhpcy55ID0gYXogKiBieCAtIGF4ICogYno7XG5cdFx0dGhpcy56ID0gYXggKiBieSAtIGF5ICogYng7XG5cblx0XHRyZXR1cm4gdGhpcztcblxuXHR9LFxuXG5cdHByb2plY3RPblZlY3RvcjogZnVuY3Rpb24gKCB2ZWN0b3IgKSB7XG5cblx0XHR2YXIgc2NhbGFyID0gdmVjdG9yLmRvdCggdGhpcyApIC8gdmVjdG9yLmxlbmd0aFNxKCk7XG5cblx0XHRyZXR1cm4gdGhpcy5jb3B5KCB2ZWN0b3IgKS5tdWx0aXBseVNjYWxhciggc2NhbGFyICk7XG5cblx0fSxcblxuXHRwcm9qZWN0T25QbGFuZTogZnVuY3Rpb24gKCkge1xuXG5cdFx0dmFyIHYxID0gbmV3IFZlY3RvcjMoKTtcblxuXHRcdHJldHVybiBmdW5jdGlvbiBwcm9qZWN0T25QbGFuZSggcGxhbmVOb3JtYWwgKSB7XG5cblx0XHRcdHYxLmNvcHkoIHRoaXMgKS5wcm9qZWN0T25WZWN0b3IoIHBsYW5lTm9ybWFsICk7XG5cblx0XHRcdHJldHVybiB0aGlzLnN1YiggdjEgKTtcblxuXHRcdH07XG5cblx0fSgpLFxuXG5cdHJlZmxlY3Q6IGZ1bmN0aW9uICgpIHtcblxuXHRcdC8vIHJlZmxlY3QgaW5jaWRlbnQgdmVjdG9yIG9mZiBwbGFuZSBvcnRob2dvbmFsIHRvIG5vcm1hbFxuXHRcdC8vIG5vcm1hbCBpcyBhc3N1bWVkIHRvIGhhdmUgdW5pdCBsZW5ndGhcblxuXHRcdHZhciB2MSA9IG5ldyBWZWN0b3IzKCk7XG5cblx0XHRyZXR1cm4gZnVuY3Rpb24gcmVmbGVjdCggbm9ybWFsICkge1xuXG5cdFx0XHRyZXR1cm4gdGhpcy5zdWIoIHYxLmNvcHkoIG5vcm1hbCApLm11bHRpcGx5U2NhbGFyKCAyICogdGhpcy5kb3QoIG5vcm1hbCApICkgKTtcblxuXHRcdH07XG5cblx0fSgpLFxuXG5cdGFuZ2xlVG86IGZ1bmN0aW9uICggdiApIHtcblxuXHRcdHZhciB0aGV0YSA9IHRoaXMuZG90KCB2ICkgLyAoIE1hdGguc3FydCggdGhpcy5sZW5ndGhTcSgpICogdi5sZW5ndGhTcSgpICkgKTtcblxuXHRcdC8vIGNsYW1wLCB0byBoYW5kbGUgbnVtZXJpY2FsIHByb2JsZW1zXG5cblx0XHRyZXR1cm4gTWF0aC5hY29zKCBfTWF0aC5jbGFtcCggdGhldGEsIC0gMSwgMSApICk7XG5cblx0fSxcblxuXHRkaXN0YW5jZVRvOiBmdW5jdGlvbiAoIHYgKSB7XG5cblx0XHRyZXR1cm4gTWF0aC5zcXJ0KCB0aGlzLmRpc3RhbmNlVG9TcXVhcmVkKCB2ICkgKTtcblxuXHR9LFxuXG5cdGRpc3RhbmNlVG9TcXVhcmVkOiBmdW5jdGlvbiAoIHYgKSB7XG5cblx0XHR2YXIgZHggPSB0aGlzLnggLSB2LngsIGR5ID0gdGhpcy55IC0gdi55LCBkeiA9IHRoaXMueiAtIHYuejtcblxuXHRcdHJldHVybiBkeCAqIGR4ICsgZHkgKiBkeSArIGR6ICogZHo7XG5cblx0fSxcblxuXHRtYW5oYXR0YW5EaXN0YW5jZVRvOiBmdW5jdGlvbiAoIHYgKSB7XG5cblx0XHRyZXR1cm4gTWF0aC5hYnMoIHRoaXMueCAtIHYueCApICsgTWF0aC5hYnMoIHRoaXMueSAtIHYueSApICsgTWF0aC5hYnMoIHRoaXMueiAtIHYueiApO1xuXG5cdH0sXG5cblx0c2V0RnJvbVNwaGVyaWNhbDogZnVuY3Rpb24gKCBzICkge1xuXG5cdFx0cmV0dXJuIHRoaXMuc2V0RnJvbVNwaGVyaWNhbENvb3Jkcyggcy5yYWRpdXMsIHMucGhpLCBzLnRoZXRhICk7XG5cblx0fSxcblxuXHRzZXRGcm9tU3BoZXJpY2FsQ29vcmRzOiBmdW5jdGlvbiAoIHJhZGl1cywgcGhpLCB0aGV0YSApIHtcblxuXHRcdHZhciBzaW5QaGlSYWRpdXMgPSBNYXRoLnNpbiggcGhpICkgKiByYWRpdXM7XG5cblx0XHR0aGlzLnggPSBzaW5QaGlSYWRpdXMgKiBNYXRoLnNpbiggdGhldGEgKTtcblx0XHR0aGlzLnkgPSBNYXRoLmNvcyggcGhpICkgKiByYWRpdXM7XG5cdFx0dGhpcy56ID0gc2luUGhpUmFkaXVzICogTWF0aC5jb3MoIHRoZXRhICk7XG5cblx0XHRyZXR1cm4gdGhpcztcblxuXHR9LFxuXG5cdHNldEZyb21DeWxpbmRyaWNhbDogZnVuY3Rpb24gKCBjICkge1xuXG5cdFx0cmV0dXJuIHRoaXMuc2V0RnJvbUN5bGluZHJpY2FsQ29vcmRzKCBjLnJhZGl1cywgYy50aGV0YSwgYy55ICk7XG5cblx0fSxcblxuXHRzZXRGcm9tQ3lsaW5kcmljYWxDb29yZHM6IGZ1bmN0aW9uICggcmFkaXVzLCB0aGV0YSwgeSApIHtcblxuXHRcdHRoaXMueCA9IHJhZGl1cyAqIE1hdGguc2luKCB0aGV0YSApO1xuXHRcdHRoaXMueSA9IHk7XG5cdFx0dGhpcy56ID0gcmFkaXVzICogTWF0aC5jb3MoIHRoZXRhICk7XG5cblx0XHRyZXR1cm4gdGhpcztcblxuXHR9LFxuXG5cdHNldEZyb21NYXRyaXhQb3NpdGlvbjogZnVuY3Rpb24gKCBtICkge1xuXG5cdFx0dmFyIGUgPSBtLmVsZW1lbnRzO1xuXG5cdFx0dGhpcy54ID0gZVsgMTIgXTtcblx0XHR0aGlzLnkgPSBlWyAxMyBdO1xuXHRcdHRoaXMueiA9IGVbIDE0IF07XG5cblx0XHRyZXR1cm4gdGhpcztcblxuXHR9LFxuXG5cdHNldEZyb21NYXRyaXhTY2FsZTogZnVuY3Rpb24gKCBtICkge1xuXG5cdFx0dmFyIHN4ID0gdGhpcy5zZXRGcm9tTWF0cml4Q29sdW1uKCBtLCAwICkubGVuZ3RoKCk7XG5cdFx0dmFyIHN5ID0gdGhpcy5zZXRGcm9tTWF0cml4Q29sdW1uKCBtLCAxICkubGVuZ3RoKCk7XG5cdFx0dmFyIHN6ID0gdGhpcy5zZXRGcm9tTWF0cml4Q29sdW1uKCBtLCAyICkubGVuZ3RoKCk7XG5cblx0XHR0aGlzLnggPSBzeDtcblx0XHR0aGlzLnkgPSBzeTtcblx0XHR0aGlzLnogPSBzejtcblxuXHRcdHJldHVybiB0aGlzO1xuXG5cdH0sXG5cblx0c2V0RnJvbU1hdHJpeENvbHVtbjogZnVuY3Rpb24gKCBtLCBpbmRleCApIHtcblxuXHRcdHJldHVybiB0aGlzLmZyb21BcnJheSggbS5lbGVtZW50cywgaW5kZXggKiA0ICk7XG5cblx0fSxcblxuXHRlcXVhbHM6IGZ1bmN0aW9uICggdiApIHtcblxuXHRcdHJldHVybiAoICggdi54ID09PSB0aGlzLnggKSAmJiAoIHYueSA9PT0gdGhpcy55ICkgJiYgKCB2LnogPT09IHRoaXMueiApICk7XG5cblx0fSxcblxuXHRmcm9tQXJyYXk6IGZ1bmN0aW9uICggYXJyYXksIG9mZnNldCApIHtcblxuXHRcdGlmICggb2Zmc2V0ID09PSB1bmRlZmluZWQgKSBvZmZzZXQgPSAwO1xuXG5cdFx0dGhpcy54ID0gYXJyYXlbIG9mZnNldCBdO1xuXHRcdHRoaXMueSA9IGFycmF5WyBvZmZzZXQgKyAxIF07XG5cdFx0dGhpcy56ID0gYXJyYXlbIG9mZnNldCArIDIgXTtcblxuXHRcdHJldHVybiB0aGlzO1xuXG5cdH0sXG5cblx0dG9BcnJheTogZnVuY3Rpb24gKCBhcnJheSwgb2Zmc2V0ICkge1xuXG5cdFx0aWYgKCBhcnJheSA9PT0gdW5kZWZpbmVkICkgYXJyYXkgPSBbXTtcblx0XHRpZiAoIG9mZnNldCA9PT0gdW5kZWZpbmVkICkgb2Zmc2V0ID0gMDtcblxuXHRcdGFycmF5WyBvZmZzZXQgXSA9IHRoaXMueDtcblx0XHRhcnJheVsgb2Zmc2V0ICsgMSBdID0gdGhpcy55O1xuXHRcdGFycmF5WyBvZmZzZXQgKyAyIF0gPSB0aGlzLno7XG5cblx0XHRyZXR1cm4gYXJyYXk7XG5cblx0fSxcblxuXHRmcm9tQnVmZmVyQXR0cmlidXRlOiBmdW5jdGlvbiAoIGF0dHJpYnV0ZSwgaW5kZXgsIG9mZnNldCApIHtcblxuXHRcdGlmICggb2Zmc2V0ICE9PSB1bmRlZmluZWQgKSB7XG5cblx0XHRcdGNvbnNvbGUud2FybiggJ1RIUkVFLlZlY3RvcjM6IG9mZnNldCBoYXMgYmVlbiByZW1vdmVkIGZyb20gLmZyb21CdWZmZXJBdHRyaWJ1dGUoKS4nICk7XG5cblx0XHR9XG5cblx0XHR0aGlzLnggPSBhdHRyaWJ1dGUuZ2V0WCggaW5kZXggKTtcblx0XHR0aGlzLnkgPSBhdHRyaWJ1dGUuZ2V0WSggaW5kZXggKTtcblx0XHR0aGlzLnogPSBhdHRyaWJ1dGUuZ2V0WiggaW5kZXggKTtcblxuXHRcdHJldHVybiB0aGlzO1xuXG5cdH1cblxufSApO1xuXG5cbmV4cG9ydCB7IFZlY3RvcjMgfTsiXX0=
|