@esotericsoftware/spine-core 4.2.117 → 4.3.1
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/dist/Animation.d.ts +426 -274
- package/dist/Animation.js +1174 -1210
- package/dist/AnimationState.d.ts +246 -201
- package/dist/AnimationState.js +508 -471
- package/dist/AnimationStateData.d.ts +12 -10
- package/dist/AnimationStateData.js +19 -20
- package/dist/AssetManagerBase.d.ts +27 -21
- package/dist/AssetManagerBase.js +67 -43
- package/dist/AtlasAttachmentLoader.d.ts +18 -12
- package/dist/AtlasAttachmentLoader.js +28 -39
- package/dist/Bone.d.ts +15 -109
- package/dist/Bone.js +22 -362
- package/dist/BoneData.d.ts +13 -28
- package/dist/BoneData.js +20 -29
- package/dist/BonePose.d.ts +132 -0
- package/dist/BonePose.js +456 -0
- package/dist/Constraint.d.ts +41 -0
- package/dist/Constraint.js +38 -0
- package/dist/ConstraintData.d.ts +16 -5
- package/dist/ConstraintData.js +15 -9
- package/dist/DrawOrder.d.ts +48 -0
- package/dist/DrawOrder.js +64 -0
- package/dist/Event.d.ts +11 -6
- package/dist/Event.js +10 -5
- package/dist/EventData.d.ts +10 -6
- package/dist/EventData.js +18 -7
- package/dist/IkConstraint.d.ts +23 -28
- package/dist/IkConstraint.js +122 -124
- package/dist/IkConstraintData.d.ts +14 -19
- package/dist/IkConstraintData.js +22 -23
- package/dist/IkConstraintPose.d.ts +49 -0
- package/dist/IkConstraintPose.js +55 -0
- package/dist/PathConstraint.d.ts +18 -23
- package/dist/PathConstraint.js +162 -139
- package/dist/PathConstraintData.d.ts +11 -14
- package/dist/PathConstraintData.js +14 -16
- package/dist/PathConstraintPose.d.ts +43 -0
- package/dist/PathConstraintPose.js +49 -0
- package/dist/Physics.d.ts +39 -0
- package/dist/Physics.js +41 -0
- package/dist/PhysicsConstraint.d.ts +26 -30
- package/dist/PhysicsConstraint.js +114 -94
- package/dist/PhysicsConstraintData.d.ts +28 -13
- package/dist/PhysicsConstraintData.js +35 -13
- package/dist/PhysicsConstraintPose.d.ts +47 -0
- package/dist/PhysicsConstraintPose.js +55 -0
- package/dist/Pose.d.ts +33 -0
- package/dist/Pose.js +30 -0
- package/dist/Posed.d.ts +58 -0
- package/dist/Posed.js +78 -0
- package/dist/PosedActive.d.ts +41 -0
- package/dist/{attachments/HasTextureRegion.js → PosedActive.js} +17 -2
- package/dist/PosedData.d.ts +40 -0
- package/dist/PosedData.js +45 -0
- package/dist/Skeleton.d.ts +110 -99
- package/dist/Skeleton.js +271 -449
- package/dist/SkeletonBinary.d.ts +1 -1
- package/dist/SkeletonBinary.js +655 -466
- package/dist/SkeletonBounds.d.ts +4 -4
- package/dist/SkeletonBounds.js +45 -46
- package/dist/SkeletonClipping.d.ts +26 -22
- package/dist/SkeletonClipping.js +654 -340
- package/dist/SkeletonData.d.ts +18 -35
- package/dist/SkeletonData.js +57 -97
- package/dist/SkeletonJson.d.ts +8 -6
- package/dist/SkeletonJson.js +895 -640
- package/dist/SkeletonRendererCore.d.ts +58 -0
- package/dist/SkeletonRendererCore.js +310 -0
- package/dist/Skin.d.ts +20 -16
- package/dist/Skin.js +58 -53
- package/dist/Slider.d.ts +46 -0
- package/dist/Slider.js +115 -0
- package/dist/SliderData.d.ts +58 -0
- package/dist/SliderData.js +59 -0
- package/dist/SliderPose.d.ts +37 -0
- package/dist/SliderPose.js +40 -0
- package/dist/Slot.d.ts +16 -38
- package/dist/Slot.js +37 -60
- package/dist/SlotData.d.ts +5 -12
- package/dist/SlotData.js +7 -15
- package/dist/SlotPose.d.ts +59 -0
- package/dist/SlotPose.js +81 -0
- package/dist/Texture.d.ts +1 -0
- package/dist/Texture.js +2 -1
- package/dist/TextureAtlas.d.ts +3 -3
- package/dist/TextureAtlas.js +49 -49
- package/dist/TransformConstraint.d.ts +16 -28
- package/dist/TransformConstraint.js +72 -209
- package/dist/TransformConstraintData.d.ts +108 -20
- package/dist/TransformConstraintData.js +274 -24
- package/dist/TransformConstraintPose.d.ts +45 -0
- package/dist/TransformConstraintPose.js +52 -0
- package/dist/Triangulator.d.ts +1 -1
- package/dist/Triangulator.js +91 -107
- package/dist/{Updatable.d.ts → Update.d.ts} +5 -12
- package/dist/Update.js +30 -0
- package/dist/Utils.d.ts +14 -3
- package/dist/Utils.js +80 -37
- package/dist/attachments/Attachment.d.ts +27 -19
- package/dist/attachments/Attachment.js +59 -35
- package/dist/attachments/AttachmentLoader.d.ts +14 -14
- package/dist/attachments/AttachmentLoader.js +1 -1
- package/dist/attachments/BoundingBoxAttachment.d.ts +1 -1
- package/dist/attachments/BoundingBoxAttachment.js +2 -2
- package/dist/attachments/ClippingAttachment.d.ts +10 -3
- package/dist/attachments/ClippingAttachment.js +12 -3
- package/dist/attachments/{HasTextureRegion.d.ts → HasSequence.d.ts} +11 -14
- package/dist/attachments/HasSequence.js +30 -0
- package/dist/attachments/MeshAttachment.d.ts +28 -35
- package/dist/attachments/MeshAttachment.js +85 -97
- package/dist/attachments/PathAttachment.d.ts +3 -3
- package/dist/attachments/PathAttachment.js +6 -6
- package/dist/attachments/PointAttachment.d.ts +11 -6
- package/dist/attachments/PointAttachment.js +8 -3
- package/dist/attachments/RegionAttachment.d.ts +25 -27
- package/dist/attachments/RegionAttachment.js +101 -113
- package/dist/attachments/Sequence.d.ts +31 -6
- package/dist/attachments/Sequence.js +79 -13
- package/dist/esm/spine-core.min.mjs +2 -2
- package/dist/esm/spine-core.mjs +7747 -6116
- package/dist/esm/spine-core.mjs.map +4 -4
- package/dist/iife/spine-core.js +7747 -6116
- package/dist/iife/spine-core.js.map +4 -4
- package/dist/iife/spine-core.min.js +2 -2
- package/dist/index.d.ts +32 -11
- package/dist/index.js +33 -12
- package/dist/polyfills.js +4 -5
- package/package.json +1 -1
- package/dist/Updatable.js +0 -30
package/dist/SkeletonBinary.js
CHANGED
|
@@ -26,9 +26,10 @@
|
|
|
26
26
|
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
|
|
27
27
|
* THE SPINE RUNTIMES, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
28
28
|
*****************************************************************************/
|
|
29
|
-
import {
|
|
29
|
+
import { AlphaTimeline, Animation, AttachmentTimeline, CurveTimeline1, DeformTimeline, DrawOrderFolderTimeline, DrawOrderTimeline, EventTimeline, IkConstraintTimeline, InheritTimeline, PathConstraintMixTimeline, PathConstraintPositionTimeline, PathConstraintSpacingTimeline, PhysicsConstraintDampingTimeline, PhysicsConstraintGravityTimeline, PhysicsConstraintInertiaTimeline, PhysicsConstraintMassTimeline, PhysicsConstraintMixTimeline, PhysicsConstraintResetTimeline, PhysicsConstraintStrengthTimeline, PhysicsConstraintWindTimeline, RGB2Timeline, RGBA2Timeline, RGBATimeline, RGBTimeline, RotateTimeline, ScaleTimeline, ScaleXTimeline, ScaleYTimeline, SequenceTimeline, ShearTimeline, ShearXTimeline, ShearYTimeline, SliderMixTimeline, SliderTimeline, TransformConstraintTimeline, TranslateTimeline, TranslateXTimeline, TranslateYTimeline } from "./Animation.js";
|
|
30
30
|
import { Sequence, SequenceModeValues } from "./attachments/Sequence.js";
|
|
31
31
|
import { BoneData } from "./BoneData.js";
|
|
32
|
+
import { ScaleYMode } from "./ConstraintData.js";
|
|
32
33
|
import { Event } from "./Event.js";
|
|
33
34
|
import { EventData } from "./EventData.js";
|
|
34
35
|
import { IkConstraintData } from "./IkConstraintData.js";
|
|
@@ -36,8 +37,9 @@ import { PathConstraintData, PositionMode, SpacingMode } from "./PathConstraintD
|
|
|
36
37
|
import { PhysicsConstraintData } from "./PhysicsConstraintData.js";
|
|
37
38
|
import { SkeletonData } from "./SkeletonData.js";
|
|
38
39
|
import { Skin } from "./Skin.js";
|
|
40
|
+
import { SliderData } from "./SliderData.js";
|
|
39
41
|
import { SlotData } from "./SlotData.js";
|
|
40
|
-
import { TransformConstraintData } from "./TransformConstraintData.js";
|
|
42
|
+
import { FromRotate, FromScaleX, FromScaleY, FromShearY, FromX, FromY, ToRotate, ToScaleX, ToScaleY, ToShearY, ToX, ToY, TransformConstraintData } from "./TransformConstraintData.js";
|
|
41
43
|
import { Color, Utils } from "./Utils.js";
|
|
42
44
|
/** Loads skeleton data in the Spine binary format.
|
|
43
45
|
*
|
|
@@ -51,25 +53,25 @@ export class SkeletonBinary {
|
|
|
51
53
|
* See [Scaling](http://esotericsoftware.com/spine-loading-skeleton-data#Scaling) in the Spine Runtimes Guide. */
|
|
52
54
|
scale = 1;
|
|
53
55
|
attachmentLoader;
|
|
54
|
-
linkedMeshes =
|
|
56
|
+
linkedMeshes = [];
|
|
55
57
|
constructor(attachmentLoader) {
|
|
56
58
|
this.attachmentLoader = attachmentLoader;
|
|
57
59
|
}
|
|
58
60
|
readSkeletonData(binary) {
|
|
59
|
-
|
|
60
|
-
|
|
61
|
+
const scale = this.scale;
|
|
62
|
+
const skeletonData = new SkeletonData();
|
|
61
63
|
skeletonData.name = ""; // BOZO
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
skeletonData.hash = highHash
|
|
64
|
+
const input = new BinaryInput(binary);
|
|
65
|
+
const lowHash = input.readInt32();
|
|
66
|
+
const highHash = input.readInt32();
|
|
67
|
+
skeletonData.hash = highHash === 0 && lowHash === 0 ? null : highHash.toString(16) + lowHash.toString(16);
|
|
66
68
|
skeletonData.version = input.readString();
|
|
67
69
|
skeletonData.x = input.readFloat();
|
|
68
70
|
skeletonData.y = input.readFloat();
|
|
69
71
|
skeletonData.width = input.readFloat();
|
|
70
72
|
skeletonData.height = input.readFloat();
|
|
71
73
|
skeletonData.referenceScale = input.readFloat() * scale;
|
|
72
|
-
|
|
74
|
+
const nonessential = input.readBoolean();
|
|
73
75
|
if (nonessential) {
|
|
74
76
|
skeletonData.fps = input.readFloat();
|
|
75
77
|
skeletonData.imagesPath = input.readString();
|
|
@@ -79,200 +81,331 @@ export class SkeletonBinary {
|
|
|
79
81
|
// Strings.
|
|
80
82
|
n = input.readInt(true);
|
|
81
83
|
for (let i = 0; i < n; i++) {
|
|
82
|
-
|
|
84
|
+
const str = input.readString();
|
|
83
85
|
if (!str)
|
|
84
86
|
throw new Error("String in string table must not be null.");
|
|
85
87
|
input.strings.push(str);
|
|
86
88
|
}
|
|
87
89
|
// Bones.
|
|
90
|
+
const bones = skeletonData.bones;
|
|
88
91
|
n = input.readInt(true);
|
|
89
92
|
for (let i = 0; i < n; i++) {
|
|
90
|
-
|
|
93
|
+
const name = input.readString();
|
|
91
94
|
if (!name)
|
|
92
95
|
throw new Error("Bone name must not be null.");
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
96
|
+
const parent = i === 0 ? null : bones[input.readInt(true)];
|
|
97
|
+
const data = new BoneData(i, name, parent);
|
|
98
|
+
const setup = data.setupPose;
|
|
99
|
+
setup.rotation = input.readFloat();
|
|
100
|
+
setup.x = input.readFloat() * scale;
|
|
101
|
+
setup.y = input.readFloat() * scale;
|
|
102
|
+
setup.scaleX = input.readFloat();
|
|
103
|
+
setup.scaleY = input.readFloat();
|
|
104
|
+
setup.shearX = input.readFloat();
|
|
105
|
+
setup.shearY = input.readFloat();
|
|
106
|
+
setup.inherit = input.readByte();
|
|
102
107
|
data.length = input.readFloat() * scale;
|
|
103
|
-
data.inherit = input.readByte();
|
|
104
108
|
data.skinRequired = input.readBoolean();
|
|
105
109
|
if (nonessential) {
|
|
106
110
|
Color.rgba8888ToColor(data.color, input.readInt32());
|
|
107
111
|
data.icon = input.readString() ?? undefined;
|
|
112
|
+
data.iconSize = input.readFloat();
|
|
113
|
+
data.iconRotation = input.readFloat();
|
|
108
114
|
data.visible = input.readBoolean();
|
|
109
115
|
}
|
|
110
|
-
|
|
116
|
+
bones.push(data);
|
|
111
117
|
}
|
|
112
118
|
// Slots.
|
|
113
119
|
n = input.readInt(true);
|
|
114
120
|
for (let i = 0; i < n; i++) {
|
|
115
|
-
|
|
121
|
+
const slotName = input.readString();
|
|
116
122
|
if (!slotName)
|
|
117
123
|
throw new Error("Slot name must not be null.");
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
Color.rgba8888ToColor(data.color, input.readInt32());
|
|
121
|
-
|
|
122
|
-
if (darkColor
|
|
123
|
-
Color.rgb888ToColor(data.darkColor = new Color(), darkColor);
|
|
124
|
+
const boneData = bones[input.readInt(true)];
|
|
125
|
+
const data = new SlotData(i, slotName, boneData);
|
|
126
|
+
Color.rgba8888ToColor(data.setupPose.color, input.readInt32());
|
|
127
|
+
const darkColor = input.readInt32();
|
|
128
|
+
if (darkColor !== -1)
|
|
129
|
+
Color.rgb888ToColor(data.setupPose.darkColor = new Color(), darkColor);
|
|
124
130
|
data.attachmentName = input.readStringRef();
|
|
125
131
|
data.blendMode = input.readInt(true);
|
|
126
132
|
if (nonessential)
|
|
127
133
|
data.visible = input.readBoolean();
|
|
128
134
|
skeletonData.slots.push(data);
|
|
129
135
|
}
|
|
130
|
-
//
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
if (!name)
|
|
135
|
-
throw new Error("IK constraint data name must not be null.");
|
|
136
|
-
let data = new IkConstraintData(name);
|
|
137
|
-
data.order = input.readInt(true);
|
|
138
|
-
nn = input.readInt(true);
|
|
139
|
-
for (let ii = 0; ii < nn; ii++)
|
|
140
|
-
data.bones.push(skeletonData.bones[input.readInt(true)]);
|
|
141
|
-
data.target = skeletonData.bones[input.readInt(true)];
|
|
142
|
-
let flags = input.readByte();
|
|
143
|
-
data.skinRequired = (flags & 1) != 0;
|
|
144
|
-
data.bendDirection = (flags & 2) != 0 ? 1 : -1;
|
|
145
|
-
data.compress = (flags & 4) != 0;
|
|
146
|
-
data.stretch = (flags & 8) != 0;
|
|
147
|
-
data.uniform = (flags & 16) != 0;
|
|
148
|
-
if ((flags & 32) != 0)
|
|
149
|
-
data.mix = (flags & 64) != 0 ? input.readFloat() : 1;
|
|
150
|
-
if ((flags & 128) != 0)
|
|
151
|
-
data.softness = input.readFloat() * scale;
|
|
152
|
-
skeletonData.ikConstraints.push(data);
|
|
153
|
-
}
|
|
154
|
-
// Transform constraints.
|
|
155
|
-
n = input.readInt(true);
|
|
156
|
-
for (let i = 0, nn; i < n; i++) {
|
|
157
|
-
let name = input.readString();
|
|
158
|
-
if (!name)
|
|
159
|
-
throw new Error("Transform constraint data name must not be null.");
|
|
160
|
-
let data = new TransformConstraintData(name);
|
|
161
|
-
data.order = input.readInt(true);
|
|
162
|
-
nn = input.readInt(true);
|
|
163
|
-
for (let ii = 0; ii < nn; ii++)
|
|
164
|
-
data.bones.push(skeletonData.bones[input.readInt(true)]);
|
|
165
|
-
data.target = skeletonData.bones[input.readInt(true)];
|
|
166
|
-
let flags = input.readByte();
|
|
167
|
-
data.skinRequired = (flags & 1) != 0;
|
|
168
|
-
data.local = (flags & 2) != 0;
|
|
169
|
-
data.relative = (flags & 4) != 0;
|
|
170
|
-
if ((flags & 8) != 0)
|
|
171
|
-
data.offsetRotation = input.readFloat();
|
|
172
|
-
if ((flags & 16) != 0)
|
|
173
|
-
data.offsetX = input.readFloat() * scale;
|
|
174
|
-
if ((flags & 32) != 0)
|
|
175
|
-
data.offsetY = input.readFloat() * scale;
|
|
176
|
-
if ((flags & 64) != 0)
|
|
177
|
-
data.offsetScaleX = input.readFloat();
|
|
178
|
-
if ((flags & 128) != 0)
|
|
179
|
-
data.offsetScaleY = input.readFloat();
|
|
180
|
-
flags = input.readByte();
|
|
181
|
-
if ((flags & 1) != 0)
|
|
182
|
-
data.offsetShearY = input.readFloat();
|
|
183
|
-
if ((flags & 2) != 0)
|
|
184
|
-
data.mixRotate = input.readFloat();
|
|
185
|
-
if ((flags & 4) != 0)
|
|
186
|
-
data.mixX = input.readFloat();
|
|
187
|
-
if ((flags & 8) != 0)
|
|
188
|
-
data.mixY = input.readFloat();
|
|
189
|
-
if ((flags & 16) != 0)
|
|
190
|
-
data.mixScaleX = input.readFloat();
|
|
191
|
-
if ((flags & 32) != 0)
|
|
192
|
-
data.mixScaleY = input.readFloat();
|
|
193
|
-
if ((flags & 64) != 0)
|
|
194
|
-
data.mixShearY = input.readFloat();
|
|
195
|
-
skeletonData.transformConstraints.push(data);
|
|
196
|
-
}
|
|
197
|
-
// Path constraints.
|
|
198
|
-
n = input.readInt(true);
|
|
199
|
-
for (let i = 0, nn; i < n; i++) {
|
|
200
|
-
let name = input.readString();
|
|
201
|
-
if (!name)
|
|
202
|
-
throw new Error("Path constraint data name must not be null.");
|
|
203
|
-
let data = new PathConstraintData(name);
|
|
204
|
-
data.order = input.readInt(true);
|
|
205
|
-
data.skinRequired = input.readBoolean();
|
|
206
|
-
nn = input.readInt(true);
|
|
207
|
-
for (let ii = 0; ii < nn; ii++)
|
|
208
|
-
data.bones.push(skeletonData.bones[input.readInt(true)]);
|
|
209
|
-
data.target = skeletonData.slots[input.readInt(true)];
|
|
210
|
-
const flags = input.readByte();
|
|
211
|
-
data.positionMode = flags & 1;
|
|
212
|
-
data.spacingMode = (flags >> 1) & 3;
|
|
213
|
-
data.rotateMode = (flags >> 3) & 3;
|
|
214
|
-
if ((flags & 128) != 0)
|
|
215
|
-
data.offsetRotation = input.readFloat();
|
|
216
|
-
data.position = input.readFloat();
|
|
217
|
-
if (data.positionMode == PositionMode.Fixed)
|
|
218
|
-
data.position *= scale;
|
|
219
|
-
data.spacing = input.readFloat();
|
|
220
|
-
if (data.spacingMode == SpacingMode.Length || data.spacingMode == SpacingMode.Fixed)
|
|
221
|
-
data.spacing *= scale;
|
|
222
|
-
data.mixRotate = input.readFloat();
|
|
223
|
-
data.mixX = input.readFloat();
|
|
224
|
-
data.mixY = input.readFloat();
|
|
225
|
-
skeletonData.pathConstraints.push(data);
|
|
226
|
-
}
|
|
227
|
-
// Physics constraints.
|
|
228
|
-
n = input.readInt(true);
|
|
229
|
-
for (let i = 0, nn; i < n; i++) {
|
|
136
|
+
// Constraints.
|
|
137
|
+
const constraints = skeletonData.constraints;
|
|
138
|
+
const constraintCount = input.readInt(true);
|
|
139
|
+
for (let i = 0; i < constraintCount; i++) {
|
|
230
140
|
const name = input.readString();
|
|
231
141
|
if (!name)
|
|
232
|
-
throw new Error("
|
|
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
|
-
|
|
142
|
+
throw new Error("Constraint data name must not be null.");
|
|
143
|
+
let nn;
|
|
144
|
+
switch (input.readByte()) {
|
|
145
|
+
case CONSTRAINT_IK: {
|
|
146
|
+
const data = new IkConstraintData(name);
|
|
147
|
+
nn = input.readInt(true);
|
|
148
|
+
for (let ii = 0; ii < nn; ii++)
|
|
149
|
+
data.bones.push(bones[input.readInt(true)]);
|
|
150
|
+
data.target = bones[input.readInt(true)];
|
|
151
|
+
const flags = input.readByte();
|
|
152
|
+
data.skinRequired = (flags & 1) !== 0;
|
|
153
|
+
if ((flags & 2) !== 0)
|
|
154
|
+
data.scaleYMode = input.readUnsignedByte();
|
|
155
|
+
const setup = data.setupPose;
|
|
156
|
+
setup.bendDirection = (flags & 4) !== 0 ? -1 : 1;
|
|
157
|
+
setup.compress = (flags & 8) !== 0;
|
|
158
|
+
setup.stretch = (flags & 16) !== 0;
|
|
159
|
+
if ((flags & 32) !== 0)
|
|
160
|
+
setup.mix = (flags & 64) !== 0 ? input.readFloat() : 1;
|
|
161
|
+
if ((flags & 128) !== 0)
|
|
162
|
+
setup.softness = input.readFloat() * scale;
|
|
163
|
+
constraints.push(data);
|
|
164
|
+
break;
|
|
165
|
+
}
|
|
166
|
+
case CONSTRAINT_TRANSFORM: {
|
|
167
|
+
const data = new TransformConstraintData(name);
|
|
168
|
+
nn = input.readInt(true);
|
|
169
|
+
for (let ii = 0; ii < nn; ii++)
|
|
170
|
+
data.bones.push(bones[input.readInt(true)]);
|
|
171
|
+
data.source = bones[input.readInt(true)];
|
|
172
|
+
let flags = input.readUnsignedByte();
|
|
173
|
+
data.skinRequired = (flags & 1) !== 0;
|
|
174
|
+
data.localSource = (flags & 2) !== 0;
|
|
175
|
+
data.localTarget = (flags & 4) !== 0;
|
|
176
|
+
data.additive = (flags & 8) !== 0;
|
|
177
|
+
data.clamp = (flags & 16) !== 0;
|
|
178
|
+
nn = flags >> 5;
|
|
179
|
+
for (let ii = 0, tn; ii < nn; ii++) {
|
|
180
|
+
let fromScale = 1;
|
|
181
|
+
let from;
|
|
182
|
+
switch (input.readByte()) {
|
|
183
|
+
case 0:
|
|
184
|
+
from = new FromRotate();
|
|
185
|
+
break;
|
|
186
|
+
case 1: {
|
|
187
|
+
fromScale = scale;
|
|
188
|
+
from = new FromX();
|
|
189
|
+
break;
|
|
190
|
+
}
|
|
191
|
+
case 2: {
|
|
192
|
+
fromScale = scale;
|
|
193
|
+
from = new FromY();
|
|
194
|
+
break;
|
|
195
|
+
}
|
|
196
|
+
case 3:
|
|
197
|
+
from = new FromScaleX();
|
|
198
|
+
break;
|
|
199
|
+
case 4:
|
|
200
|
+
from = new FromScaleY();
|
|
201
|
+
break;
|
|
202
|
+
case 5:
|
|
203
|
+
from = new FromShearY();
|
|
204
|
+
break;
|
|
205
|
+
default: from = null;
|
|
206
|
+
}
|
|
207
|
+
if (!from)
|
|
208
|
+
continue;
|
|
209
|
+
from.offset = input.readFloat() * fromScale;
|
|
210
|
+
tn = input.readByte();
|
|
211
|
+
for (let t = 0; t < tn; t++) {
|
|
212
|
+
let toScale = 1;
|
|
213
|
+
let to;
|
|
214
|
+
switch (input.readByte()) {
|
|
215
|
+
case 0:
|
|
216
|
+
to = new ToRotate();
|
|
217
|
+
break;
|
|
218
|
+
case 1: {
|
|
219
|
+
toScale = scale;
|
|
220
|
+
to = new ToX();
|
|
221
|
+
break;
|
|
222
|
+
}
|
|
223
|
+
case 2: {
|
|
224
|
+
toScale = scale;
|
|
225
|
+
to = new ToY();
|
|
226
|
+
break;
|
|
227
|
+
}
|
|
228
|
+
case 3:
|
|
229
|
+
to = new ToScaleX();
|
|
230
|
+
break;
|
|
231
|
+
case 4:
|
|
232
|
+
to = new ToScaleY();
|
|
233
|
+
break;
|
|
234
|
+
case 5:
|
|
235
|
+
to = new ToShearY();
|
|
236
|
+
break;
|
|
237
|
+
default: to = null;
|
|
238
|
+
}
|
|
239
|
+
if (!to)
|
|
240
|
+
continue;
|
|
241
|
+
to.offset = input.readFloat() * toScale;
|
|
242
|
+
to.max = input.readFloat() * toScale;
|
|
243
|
+
to.scale = input.readFloat() * toScale / fromScale;
|
|
244
|
+
from.to[t] = to;
|
|
245
|
+
}
|
|
246
|
+
data.properties[ii] = from;
|
|
247
|
+
}
|
|
248
|
+
flags = input.readByte();
|
|
249
|
+
if ((flags & 1) !== 0)
|
|
250
|
+
data.offsets[TransformConstraintData.ROTATION] = input.readFloat();
|
|
251
|
+
if ((flags & 2) !== 0)
|
|
252
|
+
data.offsets[TransformConstraintData.X] = input.readFloat() * scale;
|
|
253
|
+
if ((flags & 4) !== 0)
|
|
254
|
+
data.offsets[TransformConstraintData.Y] = input.readFloat() * scale;
|
|
255
|
+
if ((flags & 8) !== 0)
|
|
256
|
+
data.offsets[TransformConstraintData.SCALEX] = input.readFloat();
|
|
257
|
+
if ((flags & 16) !== 0)
|
|
258
|
+
data.offsets[TransformConstraintData.SCALEY] = input.readFloat();
|
|
259
|
+
if ((flags & 32) !== 0)
|
|
260
|
+
data.offsets[TransformConstraintData.SHEARY] = input.readFloat();
|
|
261
|
+
flags = input.readByte();
|
|
262
|
+
const setup = data.setupPose;
|
|
263
|
+
if ((flags & 1) !== 0)
|
|
264
|
+
setup.mixRotate = input.readFloat();
|
|
265
|
+
if ((flags & 2) !== 0)
|
|
266
|
+
setup.mixX = input.readFloat();
|
|
267
|
+
if ((flags & 4) !== 0)
|
|
268
|
+
setup.mixY = input.readFloat();
|
|
269
|
+
if ((flags & 8) !== 0)
|
|
270
|
+
setup.mixScaleX = input.readFloat();
|
|
271
|
+
if ((flags & 16) !== 0)
|
|
272
|
+
setup.mixScaleY = input.readFloat();
|
|
273
|
+
if ((flags & 32) !== 0)
|
|
274
|
+
setup.mixShearY = input.readFloat();
|
|
275
|
+
constraints.push(data);
|
|
276
|
+
break;
|
|
277
|
+
}
|
|
278
|
+
case CONSTRAINT_PATH: {
|
|
279
|
+
const data = new PathConstraintData(name);
|
|
280
|
+
nn = input.readInt(true);
|
|
281
|
+
for (let ii = 0; ii < nn; ii++)
|
|
282
|
+
data.bones.push(bones[input.readInt(true)]);
|
|
283
|
+
data.slot = skeletonData.slots[input.readInt(true)];
|
|
284
|
+
const flags = input.readByte();
|
|
285
|
+
data.skinRequired = (flags & 1) !== 0;
|
|
286
|
+
data.positionMode = (flags >> 1) & 0b1;
|
|
287
|
+
data.spacingMode = (flags >> 2) & 0b11;
|
|
288
|
+
data.rotateMode = (flags >> 4) & 0b11;
|
|
289
|
+
if ((flags & 128) !== 0)
|
|
290
|
+
data.offsetRotation = input.readFloat();
|
|
291
|
+
const setup = data.setupPose;
|
|
292
|
+
setup.position = input.readFloat();
|
|
293
|
+
if (data.positionMode === PositionMode.Fixed)
|
|
294
|
+
setup.position *= scale;
|
|
295
|
+
setup.spacing = input.readFloat();
|
|
296
|
+
if (data.spacingMode === SpacingMode.Length || data.spacingMode === SpacingMode.Fixed)
|
|
297
|
+
setup.spacing *= scale;
|
|
298
|
+
setup.mixRotate = input.readFloat();
|
|
299
|
+
setup.mixX = input.readFloat();
|
|
300
|
+
setup.mixY = input.readFloat();
|
|
301
|
+
constraints.push(data);
|
|
302
|
+
break;
|
|
303
|
+
}
|
|
304
|
+
case CONSTRAINT_PHYSICS: {
|
|
305
|
+
const data = new PhysicsConstraintData(name);
|
|
306
|
+
data.bone = bones[input.readInt(true)];
|
|
307
|
+
let flags = input.readByte();
|
|
308
|
+
data.skinRequired = (flags & 1) !== 0;
|
|
309
|
+
if ((flags & 2) !== 0)
|
|
310
|
+
data.x = input.readFloat();
|
|
311
|
+
if ((flags & 4) !== 0)
|
|
312
|
+
data.y = input.readFloat();
|
|
313
|
+
if ((flags & 8) !== 0)
|
|
314
|
+
data.rotate = input.readFloat();
|
|
315
|
+
if ((flags & 16) !== 0) {
|
|
316
|
+
let scaleX = input.readFloat();
|
|
317
|
+
if (scaleX < -2) {
|
|
318
|
+
data.scaleYMode = ScaleYMode.Volume;
|
|
319
|
+
scaleX = -2 - scaleX;
|
|
320
|
+
}
|
|
321
|
+
else if (scaleX < 0) {
|
|
322
|
+
data.scaleYMode = ScaleYMode.Uniform;
|
|
323
|
+
scaleX = -1 - scaleX;
|
|
324
|
+
}
|
|
325
|
+
data.scaleX = scaleX;
|
|
326
|
+
}
|
|
327
|
+
if ((flags & 32) !== 0)
|
|
328
|
+
data.shearX = input.readFloat();
|
|
329
|
+
data.limit = ((flags & 64) !== 0 ? input.readFloat() : 5000) * scale;
|
|
330
|
+
data.step = 1 / input.readUnsignedByte();
|
|
331
|
+
const setup = data.setupPose;
|
|
332
|
+
setup.inertia = input.readFloat();
|
|
333
|
+
setup.strength = input.readFloat();
|
|
334
|
+
setup.damping = input.readFloat();
|
|
335
|
+
setup.massInverse = (flags & 128) !== 0 ? input.readFloat() : 1;
|
|
336
|
+
setup.wind = input.readFloat();
|
|
337
|
+
setup.gravity = input.readFloat();
|
|
338
|
+
flags = input.readByte();
|
|
339
|
+
if ((flags & 1) !== 0)
|
|
340
|
+
data.inertiaGlobal = true;
|
|
341
|
+
if ((flags & 2) !== 0)
|
|
342
|
+
data.strengthGlobal = true;
|
|
343
|
+
if ((flags & 4) !== 0)
|
|
344
|
+
data.dampingGlobal = true;
|
|
345
|
+
if ((flags & 8) !== 0)
|
|
346
|
+
data.massGlobal = true;
|
|
347
|
+
if ((flags & 16) !== 0)
|
|
348
|
+
data.windGlobal = true;
|
|
349
|
+
if ((flags & 32) !== 0)
|
|
350
|
+
data.gravityGlobal = true;
|
|
351
|
+
if ((flags & 64) !== 0)
|
|
352
|
+
data.mixGlobal = true;
|
|
353
|
+
setup.mix = (flags & 128) !== 0 ? input.readFloat() : 1;
|
|
354
|
+
constraints.push(data);
|
|
355
|
+
break;
|
|
356
|
+
}
|
|
357
|
+
case CONSTRAINT_SLIDER: {
|
|
358
|
+
const data = new SliderData(name);
|
|
359
|
+
const flags = input.readByte();
|
|
360
|
+
data.skinRequired = (flags & 1) !== 0;
|
|
361
|
+
data.loop = (flags & 2) !== 0;
|
|
362
|
+
data.additive = (flags & 4) !== 0;
|
|
363
|
+
if ((flags & 8) !== 0)
|
|
364
|
+
data.setupPose.time = input.readFloat();
|
|
365
|
+
if ((flags & 16) !== 0)
|
|
366
|
+
data.setupPose.mix = (flags & 32) !== 0 ? input.readFloat() : 1;
|
|
367
|
+
if ((flags & 64) !== 0) {
|
|
368
|
+
data.local = (flags & 128) !== 0;
|
|
369
|
+
data.bone = bones[input.readInt(true)];
|
|
370
|
+
const offset = input.readFloat();
|
|
371
|
+
let propertyScale = 1;
|
|
372
|
+
switch (input.readByte()) {
|
|
373
|
+
case 0:
|
|
374
|
+
data.property = new FromRotate();
|
|
375
|
+
break;
|
|
376
|
+
case 1: {
|
|
377
|
+
propertyScale = scale;
|
|
378
|
+
data.property = new FromX();
|
|
379
|
+
break;
|
|
380
|
+
}
|
|
381
|
+
case 2: {
|
|
382
|
+
propertyScale = scale;
|
|
383
|
+
data.property = new FromY();
|
|
384
|
+
break;
|
|
385
|
+
}
|
|
386
|
+
case 3:
|
|
387
|
+
data.property = new FromScaleX();
|
|
388
|
+
break;
|
|
389
|
+
case 4:
|
|
390
|
+
data.property = new FromScaleY();
|
|
391
|
+
break;
|
|
392
|
+
case 5:
|
|
393
|
+
data.property = new FromShearY();
|
|
394
|
+
break;
|
|
395
|
+
default: continue;
|
|
396
|
+
}
|
|
397
|
+
;
|
|
398
|
+
data.property.offset = offset * propertyScale;
|
|
399
|
+
data.offset = input.readFloat();
|
|
400
|
+
data.scale = input.readFloat() / propertyScale;
|
|
401
|
+
}
|
|
402
|
+
constraints.push(data);
|
|
403
|
+
break;
|
|
404
|
+
}
|
|
405
|
+
}
|
|
273
406
|
}
|
|
274
407
|
// Default skin.
|
|
275
|
-
|
|
408
|
+
const defaultSkin = this.readSkin(input, skeletonData, true, nonessential);
|
|
276
409
|
if (defaultSkin) {
|
|
277
410
|
skeletonData.defaultSkin = defaultSkin;
|
|
278
411
|
skeletonData.skins.push(defaultSkin);
|
|
@@ -282,7 +415,7 @@ export class SkeletonBinary {
|
|
|
282
415
|
let i = skeletonData.skins.length;
|
|
283
416
|
Utils.setArraySize(skeletonData.skins, n = i + input.readInt(true));
|
|
284
417
|
for (; i < n; i++) {
|
|
285
|
-
|
|
418
|
+
const skin = this.readSkin(input, skeletonData, false, nonessential);
|
|
286
419
|
if (!skin)
|
|
287
420
|
throw new Error("readSkin() should not have returned null.");
|
|
288
421
|
skeletonData.skins[i] = skin;
|
|
@@ -291,43 +424,49 @@ export class SkeletonBinary {
|
|
|
291
424
|
// Linked meshes.
|
|
292
425
|
n = this.linkedMeshes.length;
|
|
293
426
|
for (let i = 0; i < n; i++) {
|
|
294
|
-
|
|
427
|
+
const linkedMesh = this.linkedMeshes[i];
|
|
295
428
|
const skin = skeletonData.skins[linkedMesh.skinIndex];
|
|
296
|
-
if (!linkedMesh.
|
|
429
|
+
if (!linkedMesh.source)
|
|
297
430
|
throw new Error("Linked mesh parent must not be null");
|
|
298
|
-
|
|
299
|
-
if (!
|
|
300
|
-
throw new Error(`
|
|
301
|
-
linkedMesh.mesh.timelineAttachment = linkedMesh.
|
|
302
|
-
linkedMesh.mesh.
|
|
303
|
-
|
|
304
|
-
linkedMesh.mesh.updateRegion();
|
|
431
|
+
const source = skin.getAttachment(linkedMesh.sourceIndex, linkedMesh.source);
|
|
432
|
+
if (!source)
|
|
433
|
+
throw new Error(`Source mesh not found: ${linkedMesh.source}`);
|
|
434
|
+
linkedMesh.mesh.timelineAttachment = linkedMesh.inheritTimelines ? source : linkedMesh.mesh;
|
|
435
|
+
linkedMesh.mesh.setSourceMesh(source);
|
|
436
|
+
linkedMesh.mesh.updateSequence();
|
|
305
437
|
}
|
|
306
438
|
this.linkedMeshes.length = 0;
|
|
307
439
|
// Events.
|
|
308
440
|
n = input.readInt(true);
|
|
309
441
|
for (let i = 0; i < n; i++) {
|
|
310
|
-
|
|
442
|
+
const eventName = input.readString();
|
|
311
443
|
if (!eventName)
|
|
312
444
|
throw new Error("Event data name must not be null");
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
|
|
445
|
+
const data = new EventData(eventName);
|
|
446
|
+
const setup = data.setupPose;
|
|
447
|
+
setup.intValue = input.readInt(false);
|
|
448
|
+
setup.floatValue = input.readFloat();
|
|
449
|
+
setup.stringValue = input.readString();
|
|
450
|
+
data._audioPath = input.readString();
|
|
318
451
|
if (data.audioPath) {
|
|
319
|
-
|
|
320
|
-
|
|
452
|
+
setup.volume = input.readFloat();
|
|
453
|
+
setup.balance = input.readFloat();
|
|
321
454
|
}
|
|
322
455
|
skeletonData.events.push(data);
|
|
323
456
|
}
|
|
324
457
|
// Animations.
|
|
458
|
+
const animations = skeletonData.animations;
|
|
325
459
|
n = input.readInt(true);
|
|
326
460
|
for (let i = 0; i < n; i++) {
|
|
327
|
-
|
|
461
|
+
const animationName = input.readString();
|
|
328
462
|
if (!animationName)
|
|
329
|
-
throw new Error("
|
|
330
|
-
|
|
463
|
+
throw new Error("Animation name must not be null.");
|
|
464
|
+
animations.push(this.readAnimation(input, animationName, skeletonData, nonessential));
|
|
465
|
+
}
|
|
466
|
+
for (let i = 0; i < constraintCount; i++) {
|
|
467
|
+
const constraint = constraints[i];
|
|
468
|
+
if (constraint instanceof SliderData)
|
|
469
|
+
constraint.animation = animations[input.readInt(true)];
|
|
331
470
|
}
|
|
332
471
|
return skeletonData;
|
|
333
472
|
}
|
|
@@ -336,64 +475,62 @@ export class SkeletonBinary {
|
|
|
336
475
|
let slotCount = 0;
|
|
337
476
|
if (defaultSkin) {
|
|
338
477
|
slotCount = input.readInt(true);
|
|
339
|
-
if (slotCount
|
|
478
|
+
if (slotCount === 0)
|
|
340
479
|
return null;
|
|
341
480
|
skin = new Skin("default");
|
|
342
481
|
}
|
|
343
482
|
else {
|
|
344
|
-
|
|
483
|
+
const skinName = input.readString();
|
|
345
484
|
if (!skinName)
|
|
346
485
|
throw new Error("Skin name must not be null.");
|
|
347
486
|
skin = new Skin(skinName);
|
|
348
487
|
if (nonessential)
|
|
349
488
|
Color.rgba8888ToColor(skin.color, input.readInt32());
|
|
350
|
-
|
|
351
|
-
|
|
352
|
-
|
|
353
|
-
|
|
354
|
-
|
|
355
|
-
|
|
356
|
-
|
|
357
|
-
for (let i = 0
|
|
358
|
-
|
|
359
|
-
for (let i = 0, n = input.readInt(true); i < n; i++)
|
|
360
|
-
skin.constraints.push(skeletonData.physicsConstraints[input.readInt(true)]);
|
|
489
|
+
let n = input.readInt(true);
|
|
490
|
+
let from = skeletonData.bones, to = skin.bones;
|
|
491
|
+
for (let i = 0; i < n; i++)
|
|
492
|
+
to[i] = from[input.readInt(true)];
|
|
493
|
+
n = input.readInt(true);
|
|
494
|
+
from = skeletonData.constraints;
|
|
495
|
+
to = skin.constraints;
|
|
496
|
+
for (let i = 0; i < n; i++)
|
|
497
|
+
to[i] = from[input.readInt(true)];
|
|
361
498
|
slotCount = input.readInt(true);
|
|
362
499
|
}
|
|
363
500
|
for (let i = 0; i < slotCount; i++) {
|
|
364
|
-
|
|
501
|
+
const slotIndex = input.readInt(true);
|
|
365
502
|
for (let ii = 0, nn = input.readInt(true); ii < nn; ii++) {
|
|
366
|
-
|
|
367
|
-
if (!
|
|
503
|
+
const placeholder = input.readStringRef();
|
|
504
|
+
if (!placeholder)
|
|
368
505
|
throw new Error("Attachment name must not be null");
|
|
369
|
-
|
|
506
|
+
const attachment = this.readAttachment(input, skeletonData, skin, slotIndex, placeholder, nonessential);
|
|
370
507
|
if (attachment)
|
|
371
|
-
skin.setAttachment(slotIndex,
|
|
508
|
+
skin.setAttachment(slotIndex, placeholder, attachment);
|
|
372
509
|
}
|
|
373
510
|
}
|
|
374
511
|
return skin;
|
|
375
512
|
}
|
|
376
|
-
readAttachment(input, skeletonData, skin, slotIndex,
|
|
377
|
-
|
|
378
|
-
|
|
379
|
-
const name = (flags & 8)
|
|
513
|
+
readAttachment(input, skeletonData, skin, slotIndex, placeholder, nonessential) {
|
|
514
|
+
const scale = this.scale;
|
|
515
|
+
const flags = input.readByte();
|
|
516
|
+
const name = (flags & 8) !== 0 ? input.readStringRef() : placeholder;
|
|
380
517
|
if (!name)
|
|
381
518
|
throw new Error("Attachment name must not be null");
|
|
382
519
|
switch ((flags & 0b111)) { // BUG?
|
|
383
520
|
case AttachmentType.Region: {
|
|
384
|
-
let path = (flags & 16)
|
|
385
|
-
const color = (flags & 32)
|
|
386
|
-
const sequence = (flags & 64)
|
|
387
|
-
|
|
388
|
-
|
|
389
|
-
|
|
390
|
-
|
|
391
|
-
|
|
392
|
-
|
|
393
|
-
|
|
521
|
+
let path = (flags & 16) !== 0 ? input.readStringRef() : null;
|
|
522
|
+
const color = (flags & 32) !== 0 ? input.readInt32() : 0xffffffff;
|
|
523
|
+
const sequence = this.readSequence(input, (flags & 64) !== 0);
|
|
524
|
+
const rotation = (flags & 128) !== 0 ? input.readFloat() : 0;
|
|
525
|
+
const x = input.readFloat();
|
|
526
|
+
const y = input.readFloat();
|
|
527
|
+
const scaleX = input.readFloat();
|
|
528
|
+
const scaleY = input.readFloat();
|
|
529
|
+
const width = input.readFloat();
|
|
530
|
+
const height = input.readFloat();
|
|
394
531
|
if (!path)
|
|
395
532
|
path = name;
|
|
396
|
-
|
|
533
|
+
const region = this.attachmentLoader.newRegionAttachment(skin, placeholder, name, path, sequence);
|
|
397
534
|
if (!region)
|
|
398
535
|
return null;
|
|
399
536
|
region.path = path;
|
|
@@ -405,15 +542,13 @@ export class SkeletonBinary {
|
|
|
405
542
|
region.width = width * scale;
|
|
406
543
|
region.height = height * scale;
|
|
407
544
|
Color.rgba8888ToColor(region.color, color);
|
|
408
|
-
region.
|
|
409
|
-
if (sequence == null)
|
|
410
|
-
region.updateRegion();
|
|
545
|
+
region.updateSequence();
|
|
411
546
|
return region;
|
|
412
547
|
}
|
|
413
548
|
case AttachmentType.BoundingBox: {
|
|
414
|
-
|
|
415
|
-
|
|
416
|
-
|
|
549
|
+
const vertices = this.readVertices(input, (flags & 16) !== 0);
|
|
550
|
+
const color = nonessential ? input.readInt32() : 0;
|
|
551
|
+
const box = this.attachmentLoader.newBoundingBoxAttachment(skin, placeholder, name);
|
|
417
552
|
if (!box)
|
|
418
553
|
return null;
|
|
419
554
|
box.worldVerticesLength = vertices.length;
|
|
@@ -424,13 +559,20 @@ export class SkeletonBinary {
|
|
|
424
559
|
return box;
|
|
425
560
|
}
|
|
426
561
|
case AttachmentType.Mesh: {
|
|
427
|
-
let path = (flags & 16)
|
|
428
|
-
const color = (flags & 32)
|
|
429
|
-
const sequence = (flags & 64)
|
|
562
|
+
let path = (flags & 16) !== 0 ? input.readStringRef() : name;
|
|
563
|
+
const color = (flags & 32) !== 0 ? input.readInt32() : 0xffffffff;
|
|
564
|
+
const sequence = this.readSequence(input, (flags & 64) !== 0);
|
|
430
565
|
const hullLength = input.readInt(true);
|
|
431
|
-
const vertices = this.readVertices(input, (flags & 128)
|
|
566
|
+
const vertices = this.readVertices(input, (flags & 128) !== 0);
|
|
432
567
|
const uvs = this.readFloatArray(input, vertices.length, 1);
|
|
433
568
|
const triangles = this.readShortArray(input, (vertices.length - hullLength - 2) * 3);
|
|
569
|
+
const slotCount = input.readInt(true);
|
|
570
|
+
let timelineSlots = null;
|
|
571
|
+
if (slotCount > 0) {
|
|
572
|
+
timelineSlots = [];
|
|
573
|
+
for (let i = 0; i < slotCount; i++)
|
|
574
|
+
timelineSlots[i] = input.readInt(true);
|
|
575
|
+
}
|
|
434
576
|
let edges = [];
|
|
435
577
|
let width = 0, height = 0;
|
|
436
578
|
if (nonessential) {
|
|
@@ -440,63 +582,61 @@ export class SkeletonBinary {
|
|
|
440
582
|
}
|
|
441
583
|
if (!path)
|
|
442
584
|
path = name;
|
|
443
|
-
|
|
585
|
+
const mesh = this.attachmentLoader.newMeshAttachment(skin, placeholder, name, path, sequence);
|
|
444
586
|
if (!mesh)
|
|
445
587
|
return null;
|
|
446
588
|
mesh.path = path;
|
|
447
589
|
Color.rgba8888ToColor(mesh.color, color);
|
|
590
|
+
mesh.hullLength = hullLength << 1;
|
|
448
591
|
mesh.bones = vertices.bones;
|
|
449
592
|
mesh.vertices = vertices.vertices;
|
|
450
593
|
mesh.worldVerticesLength = vertices.length;
|
|
451
|
-
mesh.triangles = triangles;
|
|
452
594
|
mesh.regionUVs = uvs;
|
|
453
|
-
|
|
454
|
-
|
|
455
|
-
|
|
456
|
-
mesh.sequence = sequence;
|
|
595
|
+
mesh.triangles = triangles;
|
|
596
|
+
if (timelineSlots)
|
|
597
|
+
mesh.timelineSlots = timelineSlots;
|
|
457
598
|
if (nonessential) {
|
|
458
599
|
mesh.edges = edges;
|
|
459
600
|
mesh.width = width * scale;
|
|
460
601
|
mesh.height = height * scale;
|
|
461
602
|
}
|
|
603
|
+
mesh.updateSequence();
|
|
462
604
|
return mesh;
|
|
463
605
|
}
|
|
464
606
|
case AttachmentType.LinkedMesh: {
|
|
465
|
-
const path = (flags & 16)
|
|
607
|
+
const path = (flags & 16) !== 0 ? input.readStringRef() : name;
|
|
466
608
|
if (path == null)
|
|
467
609
|
throw new Error("Path of linked mesh must not be null");
|
|
468
|
-
const color = (flags & 32)
|
|
469
|
-
const sequence = (flags & 64)
|
|
470
|
-
const inheritTimelines = (flags & 128)
|
|
610
|
+
const color = (flags & 32) !== 0 ? input.readInt32() : 0xffffffff;
|
|
611
|
+
const sequence = this.readSequence(input, (flags & 64) !== 0);
|
|
612
|
+
const inheritTimelines = (flags & 128) !== 0;
|
|
613
|
+
const sourceIndex = input.readInt(true);
|
|
471
614
|
const skinIndex = input.readInt(true);
|
|
472
|
-
const
|
|
615
|
+
const source = input.readStringRef();
|
|
473
616
|
let width = 0, height = 0;
|
|
474
617
|
if (nonessential) {
|
|
475
618
|
width = input.readFloat();
|
|
476
619
|
height = input.readFloat();
|
|
477
620
|
}
|
|
478
|
-
|
|
621
|
+
const mesh = this.attachmentLoader.newMeshAttachment(skin, placeholder, name, path, sequence);
|
|
479
622
|
if (!mesh)
|
|
480
623
|
return null;
|
|
481
624
|
mesh.path = path;
|
|
482
625
|
Color.rgba8888ToColor(mesh.color, color);
|
|
483
|
-
mesh.sequence = sequence;
|
|
484
626
|
if (nonessential) {
|
|
485
627
|
mesh.width = width * scale;
|
|
486
628
|
mesh.height = height * scale;
|
|
487
629
|
}
|
|
488
|
-
this.linkedMeshes.push(new LinkedMesh(mesh, skinIndex, slotIndex,
|
|
630
|
+
this.linkedMeshes.push(new LinkedMesh(mesh, skinIndex, slotIndex, sourceIndex, source, inheritTimelines));
|
|
489
631
|
return mesh;
|
|
490
632
|
}
|
|
491
633
|
case AttachmentType.Path: {
|
|
492
|
-
const closed = (flags & 16)
|
|
493
|
-
const constantSpeed = (flags & 32)
|
|
494
|
-
const vertices = this.readVertices(input, (flags & 64)
|
|
495
|
-
const lengths =
|
|
496
|
-
for (let i = 0, n = lengths.length; i < n; i++)
|
|
497
|
-
lengths[i] = input.readFloat() * scale;
|
|
634
|
+
const closed = (flags & 16) !== 0;
|
|
635
|
+
const constantSpeed = (flags & 32) !== 0;
|
|
636
|
+
const vertices = this.readVertices(input, (flags & 64) !== 0);
|
|
637
|
+
const lengths = this.readFloatArray(input, vertices.length / 6, scale);
|
|
498
638
|
const color = nonessential ? input.readInt32() : 0;
|
|
499
|
-
const path = this.attachmentLoader.newPathAttachment(skin, name);
|
|
639
|
+
const path = this.attachmentLoader.newPathAttachment(skin, placeholder, name);
|
|
500
640
|
if (!path)
|
|
501
641
|
return null;
|
|
502
642
|
path.closed = closed;
|
|
@@ -514,7 +654,7 @@ export class SkeletonBinary {
|
|
|
514
654
|
const x = input.readFloat();
|
|
515
655
|
const y = input.readFloat();
|
|
516
656
|
const color = nonessential ? input.readInt32() : 0;
|
|
517
|
-
const point = this.attachmentLoader.newPointAttachment(skin, name);
|
|
657
|
+
const point = this.attachmentLoader.newPointAttachment(skin, placeholder, name);
|
|
518
658
|
if (!point)
|
|
519
659
|
return null;
|
|
520
660
|
point.x = x * scale;
|
|
@@ -526,12 +666,14 @@ export class SkeletonBinary {
|
|
|
526
666
|
}
|
|
527
667
|
case AttachmentType.Clipping: {
|
|
528
668
|
const endSlotIndex = input.readInt(true);
|
|
529
|
-
const vertices = this.readVertices(input, (flags & 16)
|
|
530
|
-
|
|
531
|
-
|
|
669
|
+
const vertices = this.readVertices(input, (flags & 16) !== 0);
|
|
670
|
+
const color = nonessential ? input.readInt32() : 0;
|
|
671
|
+
const clip = this.attachmentLoader.newClippingAttachment(skin, placeholder, name);
|
|
532
672
|
if (!clip)
|
|
533
673
|
return null;
|
|
534
674
|
clip.endSlot = skeletonData.slots[endSlotIndex];
|
|
675
|
+
clip.convex = (flags & 32) !== 0;
|
|
676
|
+
clip.inverse = (flags & 64) !== 0;
|
|
535
677
|
clip.worldVerticesLength = vertices.length;
|
|
536
678
|
clip.vertices = vertices.vertices;
|
|
537
679
|
clip.bones = vertices.bones;
|
|
@@ -540,10 +682,11 @@ export class SkeletonBinary {
|
|
|
540
682
|
return clip;
|
|
541
683
|
}
|
|
542
684
|
}
|
|
543
|
-
return null;
|
|
544
685
|
}
|
|
545
|
-
readSequence(input) {
|
|
546
|
-
|
|
686
|
+
readSequence(input, hasPathSuffix) {
|
|
687
|
+
if (!hasPathSuffix)
|
|
688
|
+
return new Sequence(1, false);
|
|
689
|
+
const sequence = new Sequence(input.readInt(true), true);
|
|
547
690
|
sequence.start = input.readInt(true);
|
|
548
691
|
sequence.digits = input.readInt(true);
|
|
549
692
|
sequence.setupIndex = input.readInt(true);
|
|
@@ -552,31 +695,27 @@ export class SkeletonBinary {
|
|
|
552
695
|
readVertices(input, weighted) {
|
|
553
696
|
const scale = this.scale;
|
|
554
697
|
const vertexCount = input.readInt(true);
|
|
555
|
-
const
|
|
556
|
-
|
|
557
|
-
|
|
558
|
-
|
|
559
|
-
|
|
560
|
-
|
|
561
|
-
let
|
|
562
|
-
|
|
563
|
-
|
|
564
|
-
let
|
|
565
|
-
|
|
566
|
-
|
|
567
|
-
|
|
568
|
-
weights
|
|
569
|
-
weights.push(input.readFloat() * scale);
|
|
570
|
-
weights.push(input.readFloat());
|
|
698
|
+
const length = vertexCount << 1;
|
|
699
|
+
if (!weighted)
|
|
700
|
+
return new Vertices(null, this.readFloatArray(input, length, scale), length);
|
|
701
|
+
const n = input.readInt(true);
|
|
702
|
+
const bones = [];
|
|
703
|
+
const weights = [];
|
|
704
|
+
for (let b = 0, w = 0; b < n;) {
|
|
705
|
+
const boneCount = input.readInt(true);
|
|
706
|
+
bones[b++] = boneCount;
|
|
707
|
+
for (let ii = 0; ii < boneCount; ii++, w += 3) {
|
|
708
|
+
bones[b++] = input.readInt(true);
|
|
709
|
+
weights[w] = input.readFloat() * scale;
|
|
710
|
+
weights[w + 1] = input.readFloat() * scale;
|
|
711
|
+
weights[w + 2] = input.readFloat();
|
|
571
712
|
}
|
|
572
713
|
}
|
|
573
|
-
|
|
574
|
-
vertices.bones = bonesArray;
|
|
575
|
-
return vertices;
|
|
714
|
+
return new Vertices(bones, Utils.toFloatArray(weights), length);
|
|
576
715
|
}
|
|
577
716
|
readFloatArray(input, n, scale) {
|
|
578
|
-
|
|
579
|
-
if (scale
|
|
717
|
+
const array = [];
|
|
718
|
+
if (scale === 1) {
|
|
580
719
|
for (let i = 0; i < n; i++)
|
|
581
720
|
array[i] = input.readFloat();
|
|
582
721
|
}
|
|
@@ -587,33 +726,33 @@ export class SkeletonBinary {
|
|
|
587
726
|
return array;
|
|
588
727
|
}
|
|
589
728
|
readShortArray(input, n) {
|
|
590
|
-
|
|
729
|
+
const array = [];
|
|
591
730
|
for (let i = 0; i < n; i++)
|
|
592
731
|
array[i] = input.readInt(true);
|
|
593
732
|
return array;
|
|
594
733
|
}
|
|
595
|
-
readAnimation(input, name, skeletonData) {
|
|
734
|
+
readAnimation(input, name, skeletonData, nonessential) {
|
|
596
735
|
input.readInt(true); // Number of timelines.
|
|
597
|
-
|
|
598
|
-
|
|
736
|
+
const timelines = [];
|
|
737
|
+
const scale = this.scale;
|
|
599
738
|
// Slot timelines.
|
|
600
739
|
for (let i = 0, n = input.readInt(true); i < n; i++) {
|
|
601
|
-
|
|
740
|
+
const slotIndex = input.readInt(true);
|
|
602
741
|
for (let ii = 0, nn = input.readInt(true); ii < nn; ii++) {
|
|
603
|
-
|
|
604
|
-
|
|
605
|
-
|
|
742
|
+
const timelineType = input.readByte();
|
|
743
|
+
const frameCount = input.readInt(true);
|
|
744
|
+
const frameLast = frameCount - 1;
|
|
606
745
|
switch (timelineType) {
|
|
607
746
|
case SLOT_ATTACHMENT: {
|
|
608
|
-
|
|
747
|
+
const timeline = new AttachmentTimeline(frameCount, slotIndex);
|
|
609
748
|
for (let frame = 0; frame < frameCount; frame++)
|
|
610
749
|
timeline.setFrame(frame, input.readFloat(), input.readStringRef());
|
|
611
750
|
timelines.push(timeline);
|
|
612
751
|
break;
|
|
613
752
|
}
|
|
614
753
|
case SLOT_RGBA: {
|
|
615
|
-
|
|
616
|
-
|
|
754
|
+
const bezierCount = input.readInt(true);
|
|
755
|
+
const timeline = new RGBATimeline(frameCount, bezierCount, slotIndex);
|
|
617
756
|
let time = input.readFloat();
|
|
618
757
|
let r = input.readUnsignedByte() / 255.0;
|
|
619
758
|
let g = input.readUnsignedByte() / 255.0;
|
|
@@ -621,13 +760,13 @@ export class SkeletonBinary {
|
|
|
621
760
|
let a = input.readUnsignedByte() / 255.0;
|
|
622
761
|
for (let frame = 0, bezier = 0;; frame++) {
|
|
623
762
|
timeline.setFrame(frame, time, r, g, b, a);
|
|
624
|
-
if (frame
|
|
763
|
+
if (frame === frameLast)
|
|
625
764
|
break;
|
|
626
|
-
|
|
627
|
-
|
|
628
|
-
|
|
629
|
-
|
|
630
|
-
|
|
765
|
+
const time2 = input.readFloat();
|
|
766
|
+
const r2 = input.readUnsignedByte() / 255.0;
|
|
767
|
+
const g2 = input.readUnsignedByte() / 255.0;
|
|
768
|
+
const b2 = input.readUnsignedByte() / 255.0;
|
|
769
|
+
const a2 = input.readUnsignedByte() / 255.0;
|
|
631
770
|
switch (input.readByte()) {
|
|
632
771
|
case CURVE_STEPPED:
|
|
633
772
|
timeline.setStepped(frame);
|
|
@@ -648,20 +787,20 @@ export class SkeletonBinary {
|
|
|
648
787
|
break;
|
|
649
788
|
}
|
|
650
789
|
case SLOT_RGB: {
|
|
651
|
-
|
|
652
|
-
|
|
790
|
+
const bezierCount = input.readInt(true);
|
|
791
|
+
const timeline = new RGBTimeline(frameCount, bezierCount, slotIndex);
|
|
653
792
|
let time = input.readFloat();
|
|
654
793
|
let r = input.readUnsignedByte() / 255.0;
|
|
655
794
|
let g = input.readUnsignedByte() / 255.0;
|
|
656
795
|
let b = input.readUnsignedByte() / 255.0;
|
|
657
796
|
for (let frame = 0, bezier = 0;; frame++) {
|
|
658
797
|
timeline.setFrame(frame, time, r, g, b);
|
|
659
|
-
if (frame
|
|
798
|
+
if (frame === frameLast)
|
|
660
799
|
break;
|
|
661
|
-
|
|
662
|
-
|
|
663
|
-
|
|
664
|
-
|
|
800
|
+
const time2 = input.readFloat();
|
|
801
|
+
const r2 = input.readUnsignedByte() / 255.0;
|
|
802
|
+
const g2 = input.readUnsignedByte() / 255.0;
|
|
803
|
+
const b2 = input.readUnsignedByte() / 255.0;
|
|
665
804
|
switch (input.readByte()) {
|
|
666
805
|
case CURVE_STEPPED:
|
|
667
806
|
timeline.setStepped(frame);
|
|
@@ -680,8 +819,8 @@ export class SkeletonBinary {
|
|
|
680
819
|
break;
|
|
681
820
|
}
|
|
682
821
|
case SLOT_RGBA2: {
|
|
683
|
-
|
|
684
|
-
|
|
822
|
+
const bezierCount = input.readInt(true);
|
|
823
|
+
const timeline = new RGBA2Timeline(frameCount, bezierCount, slotIndex);
|
|
685
824
|
let time = input.readFloat();
|
|
686
825
|
let r = input.readUnsignedByte() / 255.0;
|
|
687
826
|
let g = input.readUnsignedByte() / 255.0;
|
|
@@ -692,16 +831,16 @@ export class SkeletonBinary {
|
|
|
692
831
|
let b2 = input.readUnsignedByte() / 255.0;
|
|
693
832
|
for (let frame = 0, bezier = 0;; frame++) {
|
|
694
833
|
timeline.setFrame(frame, time, r, g, b, a, r2, g2, b2);
|
|
695
|
-
if (frame
|
|
834
|
+
if (frame === frameLast)
|
|
696
835
|
break;
|
|
697
|
-
|
|
698
|
-
|
|
699
|
-
|
|
700
|
-
|
|
701
|
-
|
|
702
|
-
|
|
703
|
-
|
|
704
|
-
|
|
836
|
+
const time2 = input.readFloat();
|
|
837
|
+
const nr = input.readUnsignedByte() / 255.0;
|
|
838
|
+
const ng = input.readUnsignedByte() / 255.0;
|
|
839
|
+
const nb = input.readUnsignedByte() / 255.0;
|
|
840
|
+
const na = input.readUnsignedByte() / 255.0;
|
|
841
|
+
const nr2 = input.readUnsignedByte() / 255.0;
|
|
842
|
+
const ng2 = input.readUnsignedByte() / 255.0;
|
|
843
|
+
const nb2 = input.readUnsignedByte() / 255.0;
|
|
705
844
|
switch (input.readByte()) {
|
|
706
845
|
case CURVE_STEPPED:
|
|
707
846
|
timeline.setStepped(frame);
|
|
@@ -728,8 +867,8 @@ export class SkeletonBinary {
|
|
|
728
867
|
break;
|
|
729
868
|
}
|
|
730
869
|
case SLOT_RGB2: {
|
|
731
|
-
|
|
732
|
-
|
|
870
|
+
const bezierCount = input.readInt(true);
|
|
871
|
+
const timeline = new RGB2Timeline(frameCount, bezierCount, slotIndex);
|
|
733
872
|
let time = input.readFloat();
|
|
734
873
|
let r = input.readUnsignedByte() / 255.0;
|
|
735
874
|
let g = input.readUnsignedByte() / 255.0;
|
|
@@ -739,15 +878,15 @@ export class SkeletonBinary {
|
|
|
739
878
|
let b2 = input.readUnsignedByte() / 255.0;
|
|
740
879
|
for (let frame = 0, bezier = 0;; frame++) {
|
|
741
880
|
timeline.setFrame(frame, time, r, g, b, r2, g2, b2);
|
|
742
|
-
if (frame
|
|
881
|
+
if (frame === frameLast)
|
|
743
882
|
break;
|
|
744
|
-
|
|
745
|
-
|
|
746
|
-
|
|
747
|
-
|
|
748
|
-
|
|
749
|
-
|
|
750
|
-
|
|
883
|
+
const time2 = input.readFloat();
|
|
884
|
+
const nr = input.readUnsignedByte() / 255.0;
|
|
885
|
+
const ng = input.readUnsignedByte() / 255.0;
|
|
886
|
+
const nb = input.readUnsignedByte() / 255.0;
|
|
887
|
+
const nr2 = input.readUnsignedByte() / 255.0;
|
|
888
|
+
const ng2 = input.readUnsignedByte() / 255.0;
|
|
889
|
+
const nb2 = input.readUnsignedByte() / 255.0;
|
|
751
890
|
switch (input.readByte()) {
|
|
752
891
|
case CURVE_STEPPED:
|
|
753
892
|
timeline.setStepped(frame);
|
|
@@ -772,14 +911,14 @@ export class SkeletonBinary {
|
|
|
772
911
|
break;
|
|
773
912
|
}
|
|
774
913
|
case SLOT_ALPHA: {
|
|
775
|
-
|
|
914
|
+
const timeline = new AlphaTimeline(frameCount, input.readInt(true), slotIndex);
|
|
776
915
|
let time = input.readFloat(), a = input.readUnsignedByte() / 255;
|
|
777
916
|
for (let frame = 0, bezier = 0;; frame++) {
|
|
778
917
|
timeline.setFrame(frame, time, a);
|
|
779
|
-
if (frame
|
|
918
|
+
if (frame === frameLast)
|
|
780
919
|
break;
|
|
781
|
-
|
|
782
|
-
|
|
920
|
+
const time2 = input.readFloat();
|
|
921
|
+
const a2 = input.readUnsignedByte() / 255;
|
|
783
922
|
switch (input.readByte()) {
|
|
784
923
|
case CURVE_STEPPED:
|
|
785
924
|
timeline.setStepped(frame);
|
|
@@ -797,69 +936,70 @@ export class SkeletonBinary {
|
|
|
797
936
|
}
|
|
798
937
|
// Bone timelines.
|
|
799
938
|
for (let i = 0, n = input.readInt(true); i < n; i++) {
|
|
800
|
-
|
|
939
|
+
const boneIndex = input.readInt(true);
|
|
801
940
|
for (let ii = 0, nn = input.readInt(true); ii < nn; ii++) {
|
|
802
|
-
|
|
803
|
-
if (type
|
|
804
|
-
|
|
941
|
+
const type = input.readByte(), frameCount = input.readInt(true);
|
|
942
|
+
if (type === BONE_INHERIT) {
|
|
943
|
+
const timeline = new InheritTimeline(frameCount, boneIndex);
|
|
805
944
|
for (let frame = 0; frame < frameCount; frame++) {
|
|
806
945
|
timeline.setFrame(frame, input.readFloat(), input.readByte());
|
|
807
946
|
}
|
|
808
947
|
timelines.push(timeline);
|
|
809
948
|
continue;
|
|
810
949
|
}
|
|
811
|
-
|
|
950
|
+
const bezierCount = input.readInt(true);
|
|
812
951
|
switch (type) {
|
|
813
952
|
case BONE_ROTATE:
|
|
814
|
-
|
|
953
|
+
readTimeline(input, timelines, new RotateTimeline(frameCount, bezierCount, boneIndex), 1);
|
|
815
954
|
break;
|
|
816
955
|
case BONE_TRANSLATE:
|
|
817
|
-
|
|
956
|
+
readTimeline(input, timelines, new TranslateTimeline(frameCount, bezierCount, boneIndex), scale);
|
|
818
957
|
break;
|
|
819
958
|
case BONE_TRANSLATEX:
|
|
820
|
-
|
|
959
|
+
readTimeline(input, timelines, new TranslateXTimeline(frameCount, bezierCount, boneIndex), scale);
|
|
821
960
|
break;
|
|
822
961
|
case BONE_TRANSLATEY:
|
|
823
|
-
|
|
962
|
+
readTimeline(input, timelines, new TranslateYTimeline(frameCount, bezierCount, boneIndex), scale);
|
|
824
963
|
break;
|
|
825
964
|
case BONE_SCALE:
|
|
826
|
-
|
|
965
|
+
readTimeline(input, timelines, new ScaleTimeline(frameCount, bezierCount, boneIndex), 1);
|
|
827
966
|
break;
|
|
828
967
|
case BONE_SCALEX:
|
|
829
|
-
|
|
968
|
+
readTimeline(input, timelines, new ScaleXTimeline(frameCount, bezierCount, boneIndex), 1);
|
|
830
969
|
break;
|
|
831
970
|
case BONE_SCALEY:
|
|
832
|
-
|
|
971
|
+
readTimeline(input, timelines, new ScaleYTimeline(frameCount, bezierCount, boneIndex), 1);
|
|
833
972
|
break;
|
|
834
973
|
case BONE_SHEAR:
|
|
835
|
-
|
|
974
|
+
readTimeline(input, timelines, new ShearTimeline(frameCount, bezierCount, boneIndex), 1);
|
|
836
975
|
break;
|
|
837
976
|
case BONE_SHEARX:
|
|
838
|
-
|
|
977
|
+
readTimeline(input, timelines, new ShearXTimeline(frameCount, bezierCount, boneIndex), 1);
|
|
839
978
|
break;
|
|
840
979
|
case BONE_SHEARY:
|
|
841
|
-
|
|
980
|
+
readTimeline(input, timelines, new ShearYTimeline(frameCount, bezierCount, boneIndex), 1);
|
|
981
|
+
break;
|
|
842
982
|
}
|
|
843
983
|
}
|
|
844
984
|
}
|
|
845
985
|
// IK constraint timelines.
|
|
846
986
|
for (let i = 0, n = input.readInt(true); i < n; i++) {
|
|
847
|
-
|
|
848
|
-
|
|
987
|
+
const index = input.readInt(true), frameCount = input.readInt(true), frameLast = frameCount - 1;
|
|
988
|
+
const timeline = new IkConstraintTimeline(frameCount, input.readInt(true), index);
|
|
849
989
|
let flags = input.readByte();
|
|
850
|
-
let time = input.readFloat(), mix = (flags & 1)
|
|
851
|
-
let softness = (flags & 4)
|
|
990
|
+
let time = input.readFloat(), mix = (flags & 1) !== 0 ? ((flags & 2) !== 0 ? input.readFloat() : 1) : 0;
|
|
991
|
+
let softness = (flags & 4) !== 0 ? input.readFloat() * scale : 0;
|
|
852
992
|
for (let frame = 0, bezier = 0;; frame++) {
|
|
853
|
-
timeline.setFrame(frame, time, mix, softness, (flags & 8)
|
|
854
|
-
if (frame
|
|
993
|
+
timeline.setFrame(frame, time, mix, softness, (flags & 8) !== 0 ? 1 : -1, (flags & 16) !== 0, (flags & 32) !== 0);
|
|
994
|
+
if (frame === frameLast)
|
|
855
995
|
break;
|
|
856
996
|
flags = input.readByte();
|
|
857
|
-
const time2 = input.readFloat(), mix2 = (flags & 1)
|
|
858
|
-
const softness2 = (flags & 4)
|
|
859
|
-
if ((flags & 64)
|
|
997
|
+
const time2 = input.readFloat(), mix2 = (flags & 1) !== 0 ? ((flags & 2) !== 0 ? input.readFloat() : 1) : 0;
|
|
998
|
+
const softness2 = (flags & 4) !== 0 ? input.readFloat() * scale : 0;
|
|
999
|
+
if ((flags & 64) !== 0) {
|
|
860
1000
|
timeline.setStepped(frame);
|
|
861
1001
|
}
|
|
862
|
-
else if ((flags & 128)
|
|
1002
|
+
else if ((flags & 128) !== 0) {
|
|
863
1003
|
setBezier(input, timeline, bezier++, frame, 0, time, time2, mix, mix2, 1);
|
|
864
1004
|
setBezier(input, timeline, bezier++, frame, 1, time, time2, softness, softness2, scale);
|
|
865
1005
|
}
|
|
@@ -871,14 +1011,14 @@ export class SkeletonBinary {
|
|
|
871
1011
|
}
|
|
872
1012
|
// Transform constraint timelines.
|
|
873
1013
|
for (let i = 0, n = input.readInt(true); i < n; i++) {
|
|
874
|
-
|
|
875
|
-
|
|
1014
|
+
const index = input.readInt(true), frameCount = input.readInt(true), frameLast = frameCount - 1;
|
|
1015
|
+
const timeline = new TransformConstraintTimeline(frameCount, input.readInt(true), index);
|
|
876
1016
|
let time = input.readFloat(), mixRotate = input.readFloat(), mixX = input.readFloat(), mixY = input.readFloat(), mixScaleX = input.readFloat(), mixScaleY = input.readFloat(), mixShearY = input.readFloat();
|
|
877
1017
|
for (let frame = 0, bezier = 0;; frame++) {
|
|
878
1018
|
timeline.setFrame(frame, time, mixRotate, mixX, mixY, mixScaleX, mixScaleY, mixShearY);
|
|
879
|
-
if (frame
|
|
1019
|
+
if (frame === frameLast)
|
|
880
1020
|
break;
|
|
881
|
-
|
|
1021
|
+
const time2 = input.readFloat(), mixRotate2 = input.readFloat(), mixX2 = input.readFloat(), mixY2 = input.readFloat(), mixScaleX2 = input.readFloat(), mixScaleY2 = input.readFloat(), mixShearY2 = input.readFloat();
|
|
882
1022
|
switch (input.readByte()) {
|
|
883
1023
|
case CURVE_STEPPED:
|
|
884
1024
|
timeline.setStepped(frame);
|
|
@@ -903,27 +1043,25 @@ export class SkeletonBinary {
|
|
|
903
1043
|
}
|
|
904
1044
|
// Path constraint timelines.
|
|
905
1045
|
for (let i = 0, n = input.readInt(true); i < n; i++) {
|
|
906
|
-
|
|
907
|
-
|
|
1046
|
+
const index = input.readInt(true);
|
|
1047
|
+
const data = skeletonData.constraints[index];
|
|
908
1048
|
for (let ii = 0, nn = input.readInt(true); ii < nn; ii++) {
|
|
909
1049
|
const type = input.readByte(), frameCount = input.readInt(true), bezierCount = input.readInt(true);
|
|
910
1050
|
switch (type) {
|
|
911
1051
|
case PATH_POSITION:
|
|
912
|
-
timelines
|
|
913
|
-
.push(readTimeline1(input, new PathConstraintPositionTimeline(frameCount, bezierCount, index), data.positionMode == PositionMode.Fixed ? scale : 1));
|
|
1052
|
+
readTimeline(input, timelines, new PathConstraintPositionTimeline(frameCount, bezierCount, index), data.positionMode === PositionMode.Fixed ? scale : 1);
|
|
914
1053
|
break;
|
|
915
1054
|
case PATH_SPACING:
|
|
916
|
-
timelines
|
|
917
|
-
.push(readTimeline1(input, new PathConstraintSpacingTimeline(frameCount, bezierCount, index), data.spacingMode == SpacingMode.Length || data.spacingMode == SpacingMode.Fixed ? scale : 1));
|
|
1055
|
+
readTimeline(input, timelines, new PathConstraintSpacingTimeline(frameCount, bezierCount, index), data.spacingMode === SpacingMode.Length || data.spacingMode === SpacingMode.Fixed ? scale : 1);
|
|
918
1056
|
break;
|
|
919
|
-
case PATH_MIX:
|
|
920
|
-
|
|
1057
|
+
case PATH_MIX: {
|
|
1058
|
+
const timeline = new PathConstraintMixTimeline(frameCount, bezierCount, index);
|
|
921
1059
|
let time = input.readFloat(), mixRotate = input.readFloat(), mixX = input.readFloat(), mixY = input.readFloat();
|
|
922
1060
|
for (let frame = 0, bezier = 0, frameLast = timeline.getFrameCount() - 1;; frame++) {
|
|
923
1061
|
timeline.setFrame(frame, time, mixRotate, mixX, mixY);
|
|
924
|
-
if (frame
|
|
1062
|
+
if (frame === frameLast)
|
|
925
1063
|
break;
|
|
926
|
-
|
|
1064
|
+
const time2 = input.readFloat(), mixRotate2 = input.readFloat(), mixX2 = input.readFloat(), mixY2 = input.readFloat();
|
|
927
1065
|
switch (input.readByte()) {
|
|
928
1066
|
case CURVE_STEPPED:
|
|
929
1067
|
timeline.setStepped(frame);
|
|
@@ -939,6 +1077,7 @@ export class SkeletonBinary {
|
|
|
939
1077
|
mixY = mixY2;
|
|
940
1078
|
}
|
|
941
1079
|
timelines.push(timeline);
|
|
1080
|
+
}
|
|
942
1081
|
}
|
|
943
1082
|
}
|
|
944
1083
|
}
|
|
@@ -947,7 +1086,7 @@ export class SkeletonBinary {
|
|
|
947
1086
|
const index = input.readInt(true) - 1;
|
|
948
1087
|
for (let ii = 0, nn = input.readInt(true); ii < nn; ii++) {
|
|
949
1088
|
const type = input.readByte(), frameCount = input.readInt(true);
|
|
950
|
-
if (type
|
|
1089
|
+
if (type === PHYSICS_RESET) {
|
|
951
1090
|
const timeline = new PhysicsConstraintResetTimeline(frameCount, index);
|
|
952
1091
|
for (let frame = 0; frame < frameCount; frame++)
|
|
953
1092
|
timeline.setFrame(frame, input.readFloat());
|
|
@@ -957,60 +1096,78 @@ export class SkeletonBinary {
|
|
|
957
1096
|
const bezierCount = input.readInt(true);
|
|
958
1097
|
switch (type) {
|
|
959
1098
|
case PHYSICS_INERTIA:
|
|
960
|
-
|
|
1099
|
+
readTimeline(input, timelines, new PhysicsConstraintInertiaTimeline(frameCount, bezierCount, index), 1);
|
|
961
1100
|
break;
|
|
962
1101
|
case PHYSICS_STRENGTH:
|
|
963
|
-
|
|
1102
|
+
readTimeline(input, timelines, new PhysicsConstraintStrengthTimeline(frameCount, bezierCount, index), 1);
|
|
964
1103
|
break;
|
|
965
1104
|
case PHYSICS_DAMPING:
|
|
966
|
-
|
|
1105
|
+
readTimeline(input, timelines, new PhysicsConstraintDampingTimeline(frameCount, bezierCount, index), 1);
|
|
967
1106
|
break;
|
|
968
1107
|
case PHYSICS_MASS:
|
|
969
|
-
|
|
1108
|
+
readTimeline(input, timelines, new PhysicsConstraintMassTimeline(frameCount, bezierCount, index), 1);
|
|
970
1109
|
break;
|
|
971
1110
|
case PHYSICS_WIND:
|
|
972
|
-
|
|
1111
|
+
readTimeline(input, timelines, new PhysicsConstraintWindTimeline(frameCount, bezierCount, index), 1);
|
|
973
1112
|
break;
|
|
974
1113
|
case PHYSICS_GRAVITY:
|
|
975
|
-
|
|
1114
|
+
readTimeline(input, timelines, new PhysicsConstraintGravityTimeline(frameCount, bezierCount, index), 1);
|
|
976
1115
|
break;
|
|
977
1116
|
case PHYSICS_MIX:
|
|
978
|
-
|
|
1117
|
+
readTimeline(input, timelines, new PhysicsConstraintMixTimeline(frameCount, bezierCount, index), 1);
|
|
1118
|
+
break;
|
|
1119
|
+
default: throw new Error("Unknown physics timeline type.");
|
|
1120
|
+
}
|
|
1121
|
+
}
|
|
1122
|
+
}
|
|
1123
|
+
// Slider timelines.
|
|
1124
|
+
for (let i = 0, n = input.readInt(true); i < n; i++) {
|
|
1125
|
+
const index = input.readInt(true);
|
|
1126
|
+
for (let ii = 0, nn = input.readInt(true); ii < nn; ii++) {
|
|
1127
|
+
const type = input.readByte(), frameCount = input.readInt(true), bezierCount = input.readInt(true);
|
|
1128
|
+
switch (type) {
|
|
1129
|
+
case SLIDER_TIME:
|
|
1130
|
+
readTimeline(input, timelines, new SliderTimeline(frameCount, bezierCount, index), 1);
|
|
1131
|
+
break;
|
|
1132
|
+
case SLIDER_MIX:
|
|
1133
|
+
readTimeline(input, timelines, new SliderMixTimeline(frameCount, bezierCount, index), 1);
|
|
1134
|
+
break;
|
|
1135
|
+
default: throw new Error(`Uknown slider type: ${type}`);
|
|
979
1136
|
}
|
|
980
1137
|
}
|
|
981
1138
|
}
|
|
982
|
-
//
|
|
1139
|
+
// Attachment timelines.
|
|
983
1140
|
for (let i = 0, n = input.readInt(true); i < n; i++) {
|
|
984
|
-
|
|
1141
|
+
const skin = skeletonData.skins[input.readInt(true)];
|
|
985
1142
|
for (let ii = 0, nn = input.readInt(true); ii < nn; ii++) {
|
|
986
|
-
|
|
1143
|
+
const slotIndex = input.readInt(true);
|
|
987
1144
|
for (let iii = 0, nnn = input.readInt(true); iii < nnn; iii++) {
|
|
988
|
-
|
|
1145
|
+
const attachmentName = input.readStringRef();
|
|
989
1146
|
if (!attachmentName)
|
|
990
1147
|
throw new Error("attachmentName must not be null.");
|
|
991
|
-
|
|
992
|
-
|
|
993
|
-
|
|
994
|
-
|
|
1148
|
+
const attachment = skin.getAttachment(slotIndex, attachmentName);
|
|
1149
|
+
const timelineType = input.readByte();
|
|
1150
|
+
const frameCount = input.readInt(true);
|
|
1151
|
+
const frameLast = frameCount - 1;
|
|
995
1152
|
switch (timelineType) {
|
|
996
1153
|
case ATTACHMENT_DEFORM: {
|
|
997
|
-
|
|
998
|
-
|
|
999
|
-
|
|
1000
|
-
|
|
1001
|
-
|
|
1002
|
-
|
|
1154
|
+
const vertexAttachment = attachment;
|
|
1155
|
+
const weighted = vertexAttachment.bones;
|
|
1156
|
+
const vertices = vertexAttachment.vertices;
|
|
1157
|
+
const deformLength = weighted ? vertices.length / 3 * 2 : vertices.length;
|
|
1158
|
+
const bezierCount = input.readInt(true);
|
|
1159
|
+
const timeline = new DeformTimeline(frameCount, bezierCount, slotIndex, vertexAttachment);
|
|
1003
1160
|
let time = input.readFloat();
|
|
1004
1161
|
for (let frame = 0, bezier = 0;; frame++) {
|
|
1005
1162
|
let deform;
|
|
1006
1163
|
let end = input.readInt(true);
|
|
1007
|
-
if (end
|
|
1164
|
+
if (end === 0)
|
|
1008
1165
|
deform = weighted ? Utils.newFloatArray(deformLength) : vertices;
|
|
1009
1166
|
else {
|
|
1010
1167
|
deform = Utils.newFloatArray(deformLength);
|
|
1011
|
-
|
|
1168
|
+
const start = input.readInt(true);
|
|
1012
1169
|
end += start;
|
|
1013
|
-
if (scale
|
|
1170
|
+
if (scale === 1) {
|
|
1014
1171
|
for (let v = start; v < end; v++)
|
|
1015
1172
|
deform[v] = input.readFloat();
|
|
1016
1173
|
}
|
|
@@ -1024,9 +1181,9 @@ export class SkeletonBinary {
|
|
|
1024
1181
|
}
|
|
1025
1182
|
}
|
|
1026
1183
|
timeline.setFrame(frame, time, deform);
|
|
1027
|
-
if (frame
|
|
1184
|
+
if (frame === frameLast)
|
|
1028
1185
|
break;
|
|
1029
|
-
|
|
1186
|
+
const time2 = input.readFloat();
|
|
1030
1187
|
switch (input.readByte()) {
|
|
1031
1188
|
case CURVE_STEPPED:
|
|
1032
1189
|
timeline.setStepped(frame);
|
|
@@ -1040,10 +1197,10 @@ export class SkeletonBinary {
|
|
|
1040
1197
|
break;
|
|
1041
1198
|
}
|
|
1042
1199
|
case ATTACHMENT_SEQUENCE: {
|
|
1043
|
-
|
|
1200
|
+
const timeline = new SequenceTimeline(frameCount, slotIndex, attachment);
|
|
1044
1201
|
for (let frame = 0; frame < frameCount; frame++) {
|
|
1045
|
-
|
|
1046
|
-
|
|
1202
|
+
const time = input.readFloat();
|
|
1203
|
+
const modeAndIndex = input.readInt32();
|
|
1047
1204
|
timeline.setFrame(frame, time, SequenceModeValues[modeAndIndex & 0xf], modeAndIndex >> 4, input.readFloat());
|
|
1048
1205
|
}
|
|
1049
1206
|
timelines.push(timeline);
|
|
@@ -1054,50 +1211,40 @@ export class SkeletonBinary {
|
|
|
1054
1211
|
}
|
|
1055
1212
|
}
|
|
1056
1213
|
// Draw order timeline.
|
|
1057
|
-
|
|
1214
|
+
const slotCount = skeletonData.slots.length;
|
|
1215
|
+
const drawOrderCount = input.readInt(true);
|
|
1058
1216
|
if (drawOrderCount > 0) {
|
|
1059
|
-
|
|
1060
|
-
let
|
|
1061
|
-
|
|
1062
|
-
|
|
1063
|
-
|
|
1064
|
-
|
|
1065
|
-
|
|
1066
|
-
|
|
1067
|
-
|
|
1068
|
-
|
|
1069
|
-
|
|
1070
|
-
|
|
1071
|
-
|
|
1072
|
-
|
|
1073
|
-
|
|
1074
|
-
|
|
1075
|
-
drawOrder[originalIndex + input.readInt(true)] = originalIndex++;
|
|
1076
|
-
}
|
|
1077
|
-
// Collect remaining unchanged items.
|
|
1078
|
-
while (originalIndex < slotCount)
|
|
1079
|
-
unchanged[unchangedIndex++] = originalIndex++;
|
|
1080
|
-
// Fill in unchanged items.
|
|
1081
|
-
for (let ii = slotCount - 1; ii >= 0; ii--)
|
|
1082
|
-
if (drawOrder[ii] == -1)
|
|
1083
|
-
drawOrder[ii] = unchanged[--unchangedIndex];
|
|
1084
|
-
timeline.setFrame(i, time, drawOrder);
|
|
1085
|
-
}
|
|
1217
|
+
const timeline = new DrawOrderTimeline(drawOrderCount);
|
|
1218
|
+
for (let i = 0; i < drawOrderCount; i++)
|
|
1219
|
+
timeline.setFrame(i, input.readFloat(), readDrawOrder(input, slotCount));
|
|
1220
|
+
timelines.push(timeline);
|
|
1221
|
+
}
|
|
1222
|
+
// Draw order folder timelines.
|
|
1223
|
+
const folderCount = input.readInt(true);
|
|
1224
|
+
for (let i = 0; i < folderCount; i++) {
|
|
1225
|
+
const folderSlotCount = input.readInt(true);
|
|
1226
|
+
const folderSlots = new Array(folderSlotCount);
|
|
1227
|
+
for (let ii = 0; ii < folderSlotCount; ii++)
|
|
1228
|
+
folderSlots[ii] = input.readInt(true);
|
|
1229
|
+
const keyCount = input.readInt(true);
|
|
1230
|
+
const timeline = new DrawOrderFolderTimeline(keyCount, folderSlots, slotCount);
|
|
1231
|
+
for (let ii = 0; ii < keyCount; ii++)
|
|
1232
|
+
timeline.setFrame(ii, input.readFloat(), readDrawOrder(input, folderSlotCount));
|
|
1086
1233
|
timelines.push(timeline);
|
|
1087
1234
|
}
|
|
1088
1235
|
// Event timeline.
|
|
1089
|
-
|
|
1236
|
+
const eventCount = input.readInt(true);
|
|
1090
1237
|
if (eventCount > 0) {
|
|
1091
|
-
|
|
1238
|
+
const timeline = new EventTimeline(eventCount);
|
|
1092
1239
|
for (let i = 0; i < eventCount; i++) {
|
|
1093
|
-
|
|
1094
|
-
|
|
1095
|
-
|
|
1240
|
+
const time = input.readFloat();
|
|
1241
|
+
const eventData = skeletonData.events[input.readInt(true)];
|
|
1242
|
+
const event = new Event(time, eventData);
|
|
1096
1243
|
event.intValue = input.readInt(false);
|
|
1097
1244
|
event.floatValue = input.readFloat();
|
|
1098
1245
|
event.stringValue = input.readString();
|
|
1099
1246
|
if (event.stringValue == null)
|
|
1100
|
-
event.stringValue = eventData.stringValue;
|
|
1247
|
+
event.stringValue = eventData.setupPose.stringValue;
|
|
1101
1248
|
if (event.data.audioPath) {
|
|
1102
1249
|
event.volume = input.readFloat();
|
|
1103
1250
|
event.balance = input.readFloat();
|
|
@@ -1109,14 +1256,17 @@ export class SkeletonBinary {
|
|
|
1109
1256
|
let duration = 0;
|
|
1110
1257
|
for (let i = 0, n = timelines.length; i < n; i++)
|
|
1111
1258
|
duration = Math.max(duration, timelines[i].getDuration());
|
|
1112
|
-
|
|
1259
|
+
const animation = new Animation(name, timelines, duration);
|
|
1260
|
+
if (nonessential)
|
|
1261
|
+
Color.rgba8888ToColor(animation.color, input.readInt32());
|
|
1262
|
+
return animation;
|
|
1113
1263
|
}
|
|
1114
1264
|
}
|
|
1115
1265
|
export class BinaryInput {
|
|
1116
1266
|
strings;
|
|
1117
1267
|
index;
|
|
1118
1268
|
buffer;
|
|
1119
|
-
constructor(data, strings =
|
|
1269
|
+
constructor(data, strings = [], index = 0, buffer = new DataView(data instanceof ArrayBuffer ? data : data.buffer)) {
|
|
1120
1270
|
this.strings = strings;
|
|
1121
1271
|
this.index = index;
|
|
1122
1272
|
this.buffer = buffer;
|
|
@@ -1128,28 +1278,28 @@ export class BinaryInput {
|
|
|
1128
1278
|
return this.buffer.getUint8(this.index++);
|
|
1129
1279
|
}
|
|
1130
1280
|
readShort() {
|
|
1131
|
-
|
|
1281
|
+
const value = this.buffer.getInt16(this.index);
|
|
1132
1282
|
this.index += 2;
|
|
1133
1283
|
return value;
|
|
1134
1284
|
}
|
|
1135
1285
|
readInt32() {
|
|
1136
|
-
|
|
1286
|
+
const value = this.buffer.getInt32(this.index);
|
|
1137
1287
|
this.index += 4;
|
|
1138
1288
|
return value;
|
|
1139
1289
|
}
|
|
1140
1290
|
readInt(optimizePositive) {
|
|
1141
1291
|
let b = this.readByte();
|
|
1142
1292
|
let result = b & 0x7F;
|
|
1143
|
-
if ((b & 0x80)
|
|
1293
|
+
if ((b & 0x80) !== 0) {
|
|
1144
1294
|
b = this.readByte();
|
|
1145
1295
|
result |= (b & 0x7F) << 7;
|
|
1146
|
-
if ((b & 0x80)
|
|
1296
|
+
if ((b & 0x80) !== 0) {
|
|
1147
1297
|
b = this.readByte();
|
|
1148
1298
|
result |= (b & 0x7F) << 14;
|
|
1149
|
-
if ((b & 0x80)
|
|
1299
|
+
if ((b & 0x80) !== 0) {
|
|
1150
1300
|
b = this.readByte();
|
|
1151
1301
|
result |= (b & 0x7F) << 21;
|
|
1152
|
-
if ((b & 0x80)
|
|
1302
|
+
if ((b & 0x80) !== 0) {
|
|
1153
1303
|
b = this.readByte();
|
|
1154
1304
|
result |= (b & 0x7F) << 28;
|
|
1155
1305
|
}
|
|
@@ -1159,8 +1309,8 @@ export class BinaryInput {
|
|
|
1159
1309
|
return optimizePositive ? result : ((result >>> 1) ^ -(result & 1));
|
|
1160
1310
|
}
|
|
1161
1311
|
readStringRef() {
|
|
1162
|
-
|
|
1163
|
-
return index
|
|
1312
|
+
const index = this.readInt(true);
|
|
1313
|
+
return index === 0 ? null : this.strings[index - 1];
|
|
1164
1314
|
}
|
|
1165
1315
|
readString() {
|
|
1166
1316
|
let byteCount = this.readInt(true);
|
|
@@ -1172,9 +1322,8 @@ export class BinaryInput {
|
|
|
1172
1322
|
}
|
|
1173
1323
|
byteCount--;
|
|
1174
1324
|
let chars = "";
|
|
1175
|
-
let charCount = 0;
|
|
1176
1325
|
for (let i = 0; i < byteCount;) {
|
|
1177
|
-
|
|
1326
|
+
const b = this.readUnsignedByte();
|
|
1178
1327
|
switch (b >> 4) {
|
|
1179
1328
|
case 12:
|
|
1180
1329
|
case 13:
|
|
@@ -1193,33 +1342,35 @@ export class BinaryInput {
|
|
|
1193
1342
|
return chars;
|
|
1194
1343
|
}
|
|
1195
1344
|
readFloat() {
|
|
1196
|
-
|
|
1345
|
+
const value = this.buffer.getFloat32(this.index);
|
|
1197
1346
|
this.index += 4;
|
|
1198
1347
|
return value;
|
|
1199
1348
|
}
|
|
1200
1349
|
readBoolean() {
|
|
1201
|
-
return this.readByte()
|
|
1350
|
+
return this.readByte() !== 0;
|
|
1202
1351
|
}
|
|
1203
1352
|
}
|
|
1204
1353
|
class LinkedMesh {
|
|
1205
|
-
|
|
1354
|
+
source;
|
|
1206
1355
|
skinIndex;
|
|
1207
1356
|
slotIndex;
|
|
1357
|
+
sourceIndex;
|
|
1208
1358
|
mesh;
|
|
1209
|
-
|
|
1210
|
-
constructor(mesh, skinIndex, slotIndex,
|
|
1359
|
+
inheritTimelines;
|
|
1360
|
+
constructor(mesh, skinIndex, slotIndex, sourceIndex, source, inheritTimelines) {
|
|
1211
1361
|
this.mesh = mesh;
|
|
1212
1362
|
this.skinIndex = skinIndex;
|
|
1213
1363
|
this.slotIndex = slotIndex;
|
|
1214
|
-
this.
|
|
1215
|
-
this.
|
|
1364
|
+
this.sourceIndex = sourceIndex;
|
|
1365
|
+
this.source = source;
|
|
1366
|
+
this.inheritTimelines = inheritTimelines;
|
|
1216
1367
|
}
|
|
1217
1368
|
}
|
|
1218
1369
|
class Vertices {
|
|
1219
1370
|
bones;
|
|
1220
1371
|
vertices;
|
|
1221
1372
|
length;
|
|
1222
|
-
constructor(bones = null, vertices
|
|
1373
|
+
constructor(bones = null, vertices, length = 0) {
|
|
1223
1374
|
this.bones = bones;
|
|
1224
1375
|
this.vertices = vertices;
|
|
1225
1376
|
this.length = length;
|
|
@@ -1235,13 +1386,19 @@ var AttachmentType;
|
|
|
1235
1386
|
AttachmentType[AttachmentType["Point"] = 5] = "Point";
|
|
1236
1387
|
AttachmentType[AttachmentType["Clipping"] = 6] = "Clipping";
|
|
1237
1388
|
})(AttachmentType || (AttachmentType = {}));
|
|
1238
|
-
function
|
|
1389
|
+
function readTimeline(input, timelines, timeline, scale) {
|
|
1390
|
+
if (timeline instanceof CurveTimeline1)
|
|
1391
|
+
readTimeline1(input, timelines, timeline, scale);
|
|
1392
|
+
else
|
|
1393
|
+
readTimeline2(input, timelines, timeline, scale);
|
|
1394
|
+
}
|
|
1395
|
+
function readTimeline1(input, timelines, timeline, scale) {
|
|
1239
1396
|
let time = input.readFloat(), value = input.readFloat() * scale;
|
|
1240
1397
|
for (let frame = 0, bezier = 0, frameLast = timeline.getFrameCount() - 1;; frame++) {
|
|
1241
1398
|
timeline.setFrame(frame, time, value);
|
|
1242
|
-
if (frame
|
|
1399
|
+
if (frame === frameLast)
|
|
1243
1400
|
break;
|
|
1244
|
-
|
|
1401
|
+
const time2 = input.readFloat(), value2 = input.readFloat() * scale;
|
|
1245
1402
|
switch (input.readByte()) {
|
|
1246
1403
|
case CURVE_STEPPED:
|
|
1247
1404
|
timeline.setStepped(frame);
|
|
@@ -1252,15 +1409,15 @@ function readTimeline1(input, timeline, scale) {
|
|
|
1252
1409
|
time = time2;
|
|
1253
1410
|
value = value2;
|
|
1254
1411
|
}
|
|
1255
|
-
|
|
1412
|
+
timelines.push(timeline);
|
|
1256
1413
|
}
|
|
1257
|
-
function readTimeline2(input, timeline, scale) {
|
|
1414
|
+
function readTimeline2(input, timelines, timeline, scale) {
|
|
1258
1415
|
let time = input.readFloat(), value1 = input.readFloat() * scale, value2 = input.readFloat() * scale;
|
|
1259
1416
|
for (let frame = 0, bezier = 0, frameLast = timeline.getFrameCount() - 1;; frame++) {
|
|
1260
1417
|
timeline.setFrame(frame, time, value1, value2);
|
|
1261
|
-
if (frame
|
|
1418
|
+
if (frame === frameLast)
|
|
1262
1419
|
break;
|
|
1263
|
-
|
|
1420
|
+
const time2 = input.readFloat(), nvalue1 = input.readFloat() * scale, nvalue2 = input.readFloat() * scale;
|
|
1264
1421
|
switch (input.readByte()) {
|
|
1265
1422
|
case CURVE_STEPPED:
|
|
1266
1423
|
timeline.setStepped(frame);
|
|
@@ -1273,7 +1430,31 @@ function readTimeline2(input, timeline, scale) {
|
|
|
1273
1430
|
value1 = nvalue1;
|
|
1274
1431
|
value2 = nvalue2;
|
|
1275
1432
|
}
|
|
1276
|
-
|
|
1433
|
+
timelines.push(timeline);
|
|
1434
|
+
}
|
|
1435
|
+
function readDrawOrder(input, slotCount) {
|
|
1436
|
+
const changeCount = input.readInt(true);
|
|
1437
|
+
if (changeCount === 0)
|
|
1438
|
+
return null;
|
|
1439
|
+
const drawOrder = new Array(slotCount).fill(-1);
|
|
1440
|
+
const unchanged = new Array(slotCount - changeCount);
|
|
1441
|
+
let originalIndex = 0, unchangedIndex = 0;
|
|
1442
|
+
for (let i = 0; i < changeCount; i++) {
|
|
1443
|
+
const slotIndex = input.readInt(true);
|
|
1444
|
+
// Collect unchanged items.
|
|
1445
|
+
while (originalIndex !== slotIndex)
|
|
1446
|
+
unchanged[unchangedIndex++] = originalIndex++;
|
|
1447
|
+
// Set changed items.
|
|
1448
|
+
drawOrder[originalIndex + input.readInt(true)] = originalIndex++;
|
|
1449
|
+
}
|
|
1450
|
+
// Collect remaining unchanged items.
|
|
1451
|
+
while (originalIndex < slotCount)
|
|
1452
|
+
unchanged[unchangedIndex++] = originalIndex++;
|
|
1453
|
+
// Fill in unchanged items.
|
|
1454
|
+
for (let i = slotCount - 1; i >= 0; i--)
|
|
1455
|
+
if (drawOrder[i] === -1)
|
|
1456
|
+
drawOrder[i] = unchanged[--unchangedIndex];
|
|
1457
|
+
return drawOrder;
|
|
1277
1458
|
}
|
|
1278
1459
|
function setBezier(input, timeline, bezier, frame, value, time1, time2, value1, value2, scale) {
|
|
1279
1460
|
timeline.setBezier(bezier, frame, value, time1, value1, input.readFloat(), input.readFloat() * scale, input.readFloat(), input.readFloat() * scale, time2, value2);
|
|
@@ -1295,6 +1476,11 @@ const SLOT_RGB = 2;
|
|
|
1295
1476
|
const SLOT_RGBA2 = 3;
|
|
1296
1477
|
const SLOT_RGB2 = 4;
|
|
1297
1478
|
const SLOT_ALPHA = 5;
|
|
1479
|
+
const CONSTRAINT_IK = 0;
|
|
1480
|
+
const CONSTRAINT_PATH = 1;
|
|
1481
|
+
const CONSTRAINT_TRANSFORM = 2;
|
|
1482
|
+
const CONSTRAINT_PHYSICS = 3;
|
|
1483
|
+
const CONSTRAINT_SLIDER = 4;
|
|
1298
1484
|
const ATTACHMENT_DEFORM = 0;
|
|
1299
1485
|
const ATTACHMENT_SEQUENCE = 1;
|
|
1300
1486
|
const PATH_POSITION = 0;
|
|
@@ -1308,7 +1494,10 @@ const PHYSICS_WIND = 5;
|
|
|
1308
1494
|
const PHYSICS_GRAVITY = 6;
|
|
1309
1495
|
const PHYSICS_MIX = 7;
|
|
1310
1496
|
const PHYSICS_RESET = 8;
|
|
1497
|
+
const SLIDER_TIME = 0;
|
|
1498
|
+
const SLIDER_MIX = 1;
|
|
1499
|
+
// biome-ignore lint/correctness/noUnusedVariables: intentional
|
|
1311
1500
|
const CURVE_LINEAR = 0;
|
|
1312
1501
|
const CURVE_STEPPED = 1;
|
|
1313
1502
|
const CURVE_BEZIER = 2;
|
|
1314
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU2tlbGV0b25CaW5hcnkuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvU2tlbGV0b25CaW5hcnkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OzsrRUEyQitFO0FBRS9FLE9BQU8sRUFBRSxTQUFTLEVBQVksZUFBZSxFQUFFLGtCQUFrQixFQUFFLFlBQVksRUFBRSxXQUFXLEVBQUUsYUFBYSxFQUFFLFlBQVksRUFBRSxhQUFhLEVBQUUsY0FBYyxFQUFFLGlCQUFpQixFQUFFLGtCQUFrQixFQUFFLGtCQUFrQixFQUFFLGFBQWEsRUFBRSxjQUFjLEVBQUUsY0FBYyxFQUFFLGFBQWEsRUFBRSxjQUFjLEVBQUUsY0FBYyxFQUFFLG9CQUFvQixFQUFFLDJCQUEyQixFQUFFLDhCQUE4QixFQUFFLDZCQUE2QixFQUFFLHlCQUF5QixFQUFFLGNBQWMsRUFBRSxpQkFBaUIsRUFBRSxhQUFhLEVBQWlELGdCQUFnQixFQUFFLDhCQUE4QixFQUFFLGdDQUFnQyxFQUFFLGlDQUFpQyxFQUFFLGdDQUFnQyxFQUFFLDZCQUE2QixFQUFFLDZCQUE2QixFQUFFLGdDQUFnQyxFQUFFLDRCQUE0QixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFLLzBCLE9BQU8sRUFBRSxRQUFRLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUN6RSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3pDLE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSxZQUFZLENBQUM7QUFDbkMsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzNDLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQ3pELE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxZQUFZLEVBQUUsV0FBVyxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDeEYsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1B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QUFDO3dCQUN6QyxJQUFJLENBQUMsR0FBRyxLQUFLLENBQUMsZ0JBQWdCLEVBQUUsR0FBRyxLQUFLLENBQUM7d0JBQ3pDLElBQUksQ0FBQyxHQUFHLEtBQUssQ0FBQyxnQkFBZ0IsRUFBRSxHQUFHLEtBQUssQ0FBQzt3QkFDekMsSUFBSSxFQUFFLEdBQUcsS0FBSyxDQUFDLGdCQUFnQixFQUFFLEdBQUcsS0FBSyxDQUFDO3dCQUMxQyxJQUFJLEVBQUUsR0FBRyxLQUFLLENBQUMsZ0JBQWdCLEVBQUUsR0FBRyxLQUFLLENBQUM7d0JBQzFDLElBQUksRUFBRSxHQUFHLEtBQUssQ0FBQyxnQkFBZ0IsRUFBRSxHQUFHLEtBQUssQ0FBQzt3QkFFMUMsS0FBSyxJQUFJLEtBQUssR0FBRyxDQUFDLEVBQUUsTUFBTSxHQUFHLENBQUMsR0FBSSxLQUFLLEVBQUUsRUFBRSxDQUFDOzRCQUMzQyxRQUFRLENBQUMsUUFBUSxDQUFDLEtBQUssRUFBRSxJQUFJLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUM7NEJBQ3ZELElBQUksS0FBSyxJQUFJLFNBQVM7Z0NBQUUsTUFBTTs0QkFDOUIsSUFBSSxLQUFLLEdBQUcsS0FBSyxDQUFDLFNBQVMsRUFBRSxDQUFDOzRCQUM5QixJQUFJLEVBQUUsR0FBRyxLQUFLLENBQUMsZ0JBQWdCLEVBQUUsR0FBRyxLQUFLLENBQUM7NEJBQzFDLElBQUksRUFBRSxHQUFHLEtBQUssQ0FBQyxnQkFBZ0IsRUFBRSxHQUFHLEtBQUssQ0FBQzs0QkFDMUMsSUFBSSxFQUFFLEdBQUcsS0FBSyxDQUFDLGdCQUFnQixFQUFFLEdBQUcsS0FBSyxDQUFDOzRCQUMxQyxJQUFJLEVBQUUsR0FBRyxLQUFLLENBQUMsZ0JBQWdCLEVBQUUsR0FBRyxLQUFLLENBQUM7NEJBQzFDLElBQUksR0FBRyxHQUFHLEtBQUssQ0FBQyxnQkFBZ0IsRUFBRSxHQUFHLEtBQUssQ0FBQzs0QkFDM0MsSUFBSSxHQUFHLEdBQUcs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SUFBSSxFQUFFLEdBQUcsS0FBSyxDQUFDLGdCQUFnQixFQUFFLEdBQUcsS0FBSyxDQUFDO3dCQUMxQyxJQUFJLEVBQUUsR0FBRyxLQUFLLENBQUMsZ0JBQWdCLEVBQUUsR0FBRyxLQUFLLENBQUM7d0JBQzFDLElBQUksRUFBRSxHQUFHLEtBQUssQ0FBQyxnQkFBZ0IsRUFBRSxHQUFHLEtBQUssQ0FBQzt3QkFFMUMsS0FBSyxJQUFJLEtBQUssR0FBRyxDQUFDLEVBQUUsTUFBTSxHQUFHLENBQUMsR0FBSSxLQUFLLEVBQUUsRUFBRSxDQUFDOzRCQUMzQyxRQUFRLENBQUMsUUFBUSxDQUFDLEtBQUssRUFBRSxJQUFJLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQzs0QkFDcEQsSUFBSSxLQUFLLElBQUksU0FBUztnQ0FBRSxNQUFNOzRCQUM5QixJQUFJLEtBQUssR0FBRyxLQUFLLENBQUMsU0FBUyxFQUFFLENBQUM7NEJBQzlCLElBQUksRUFBRSxHQUFHLEtBQUssQ0FBQyxnQkFBZ0IsRUFBRSxHQUFHLEtBQUssQ0FBQzs0QkFDMUMsSUFBSSxFQUFFLEdBQUcsS0FBSyxDQUFDLGdCQUFnQixFQUFFLEdBQUcsS0FBSyxDQUFDOzRCQUMxQyxJQUFJLEVBQUUsR0FBRyxLQUFLLENBQUMsZ0JBQWdCLEVBQUUsR0FBRyxLQUFLLENBQUM7NEJBQzFDLElBQUksR0FBRyxHQUFHLEtBQUssQ0FBQyxnQkFBZ0IsRUFBRSxHQUFHLEtBQUssQ0FBQzs0QkFDM0MsSUFBSSxHQUFHLEdBQUcsS0FBSyxDQUFDLGdCQUFnQixFQUFFLEdBQUcsS0FBSyxDQUFDOzRCQUMzQyxJQUFJLEdBQUcsR0FBRyxLQUFLLENBQUMsZ0JBQWdCLEVBQUUsR0FBRyxLQUFLLENBQUM7NEJBRTNDLFFBQVEsS0FBSyxDQUFDLFFBQVEsRUFBRSxFQUFFLENBQUM7Z0NBQzFCLEtBQUssYUFBYTtvQ0FDakIsUUFBUSxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsQ0FBQztv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UyxHQUFHLENBQUMsQ0FBQztBQUNwQixNQUFNLFFBQVEsR0FBRyxDQUFDLENBQUM7QUFDbkIsTUFBTSxVQUFVLEdBQUcsQ0FBQyxDQUFDO0FBQ3JCLE1BQU0sU0FBUyxHQUFHLENBQUMsQ0FBQztBQUNwQixNQUFNLFVBQVUsR0FBRyxDQUFDLENBQUM7QUFFckIsTUFBTSxpQkFBaUIsR0FBRyxDQUFDLENBQUM7QUFDNUIsTUFBTSxtQkFBbUIsR0FBRyxDQUFDLENBQUM7QUFFOUIsTUFBTSxhQUFhLEdBQUcsQ0FBQyxDQUFDO0FBQ3hCLE1BQU0sWUFBWSxHQUFHLENBQUMsQ0FBQztBQUN2QixNQUFNLFFBQVEsR0FBRyxDQUFDLENBQUM7QUFFbkIsTUFBTSxlQUFlLEdBQUcsQ0FBQyxDQUFDO0FBQzFCLE1BQU0sZ0JBQWdCLEdBQUcsQ0FBQyxDQUFDO0FBQzNCLE1BQU0sZUFBZSxHQUFHLENBQUMsQ0FBQztBQUMxQixNQUFNLFlBQVksR0FBRyxDQUFDLENBQUM7QUFDdkIsTUFBTSxZQUFZLEdBQUcsQ0FBQyxDQUFDO0FBQ3ZCLE1BQU0sZUFBZSxHQUFHLENBQUMsQ0FBQztBQUMxQixNQUFNLFdBQVcsR0FBRyxDQUFDLENBQUM7QUFDdEIsTUFBTSxhQUFhLEdBQUcsQ0FBQyxDQUFDO0FBRXhCLE1BQU0sWUFBWSxHQUFHLENBQUMsQ0FBQztBQUN2QixNQUFNLGFBQWEsR0FBRyxDQUFDLENBQUM7QUFDeEIsTUFBTSxZQUFZLEdBQUcsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICogU3BpbmUgUnVudGltZXMgTGljZW5zZSBBZ3JlZW1lbnRcbiAqIExhc3QgdXBkYXRlZCBBcHJpbCA1LCAyMDI1LiBSZXBsYWNlcyBhbGwgcHJpb3IgdmVyc2lvbnMuXG4gKlxuICogQ29weXJpZ2h0IChjKSAyMDEzLTIwMjUsIEVzb3RlcmljIFNvZnR3YXJlIExMQ1xuICpcbiAqIEludGVncmF0aW9uIG9mIHRoZSBTcGluZSBSdW50aW1lcyBpbnRvIHNvZnR3YXJlIG9yIG90aGVyd2lzZSBjcmVhdGluZ1xuICogZGVyaXZhdGl2ZSB3b3JrcyBvZiB0aGUgU3BpbmUgUnVudGltZXMgaXMgcGVybWl0dGVkIHVuZGVyIHRoZSB0ZXJtcyBhbmRcbiAqIGNvbmRpdGlvbnMgb2YgU2VjdGlvbiAyIG9mIHRoZSBTcGluZSBFZGl0b3IgTGljZW5zZSBBZ3JlZW1lbnQ6XG4gKiBodHRwOi8vZXNvdGVyaWNzb2Z0d2FyZS5jb20vc3BpbmUtZWRpdG9yLWxpY2Vuc2VcbiAqXG4gKiBPdGhlcndpc2UsIGl0IGlzIHBlcm1pdHRlZCB0byBpbnRlZ3JhdGUgdGhlIFNwaW5lIFJ1bnRpbWVzIGludG8gc29mdHdhcmVcbiAqIG9yIG90aGVyd2lzZSBjcmVhdGUgZGVyaXZhdGl2ZSB3b3JrcyBvZiB0aGUgU3BpbmUgUnVudGltZXMgKGNvbGxlY3RpdmVseSxcbiAqIFwiUHJvZHVjdHNcIiksIHByb3ZpZGVkIHRoYXQgZWFjaCB1c2VyIG9mIHRoZSBQcm9kdWN0cyBtdXN0IG9idGFpbiB0aGVpciBvd25cbiAqIFNwaW5lIEVkaXRvciBsaWNlbnNlIGFuZCByZWRpc3RyaWJ1dGlvbiBvZiB0aGUgUHJvZHVjdHMgaW4gYW55IGZvcm0gbXVzdFxuICogaW5jbHVkZSB0aGlzIGxpY2Vuc2UgYW5kIGNvcHlyaWdodCBub3RpY2UuXG4gKlxuICogVEhFIFNQSU5FIFJVTlRJTUVTIEFSRSBQUk9WSURFRCBCWSBFU09URVJJQyBTT0ZUV0FSRSBMTEMgXCJBUyBJU1wiIEFORCBBTllcbiAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRURcbiAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkVcbiAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEVTT1RFUklDIFNPRlRXQVJFIExMQyBCRSBMSUFCTEUgRk9SIEFOWVxuICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVNcbiAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUyxcbiAqIEJVU0lORVNTIElOVEVSUlVQVElPTiwgT1IgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFMpIEhPV0VWRVIgQ0FVU0VEIEFORFxuICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlRcbiAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRlxuICogVEhFIFNQSU5FIFJVTlRJTUVTLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLlxuICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuXG5pbXBvcnQgeyBBbmltYXRpb24sIFRpbWVsaW5lLCBJbmhlcml0VGltZWxpbmUsIEF0dGFjaG1lbnRUaW1lbGluZSwgUkdCQVRpbWVsaW5lLCBSR0JUaW1lbGluZSwgUkdCQTJUaW1lbGluZSwgUkdCMlRpbWVsaW5lLCBBbHBoYVRpbWVsaW5lLCBSb3RhdGVUaW1lbGluZSwgVHJhbnNsYXRlVGltZWxpbmUsIFRyYW5zbGF0ZVhUaW1lbGluZSwgVHJhbnNsYXRlWVRpbWVsaW5lLCBTY2FsZVRpbWVsaW5lLCBTY2FsZVhUaW1lbGluZSwgU2NhbGVZVGltZWxpbmUsIFNoZWFyVGltZWxpbmUsIFNoZWFyWFRpbWVsaW5lLCBTaGVhcllUaW1lbGluZSwgSWtDb25zdHJhaW50VGltZWxpbmUsIFRyYW5zZm9ybUNvbnN0cmFpbnRUaW1lbGluZSwgUGF0aENvbnN0cmFpbnRQb3NpdGlvblRpbWVsaW5lLCBQYXRoQ29uc3RyYWludFNwYWNpbmdUaW1lbGluZSwgUGF0aENvbnN0cmFpbnRNaXhUaW1lbGluZSwgRGVmb3JtVGltZWxpbmUsIERyYXdPcmRlclRpbWVsaW5lLCBFdmVudFRpbWVsaW5lLCBDdXJ2ZVRpbWVsaW5lMSwgQ3VydmVUaW1lbGluZTIsIEN1cnZlVGltZWxpbmUsIFNlcXVlbmNlVGltZWxpbmUsIFBoeXNpY3NDb25zdHJhaW50UmVzZXRUaW1lbGluZSwgUGh5c2ljc0NvbnN0cmFpbnRJbmVydGlhVGltZWxpbmUsIFBoeXNpY3NDb25zdHJhaW50U3RyZW5ndGhUaW1lbGluZSwgUGh5c2ljc0NvbnN0cmFpbnREYW1waW5nVGltZWxpbmUsIFBoeXNpY3NDb25zdHJhaW50TWFzc1RpbWVsaW5lLCBQaHlzaWNzQ29uc3RyYWludFdpbmRUaW1lbGluZSwgUGh5c2ljc0NvbnN0cmFpbnRHcmF2aXR5VGltZWxpbmUsIFBoeXNpY3NDb25zdHJhaW50TWl4VGltZWxpbmUgfSBmcm9tIFwiLi9BbmltYXRpb24uanNcIjtcbmltcG9ydCB7IFZlcnRleEF0dGFjaG1lbnQsIEF0dGFjaG1lbnQgfSBmcm9tIFwiLi9hdHRhY2htZW50cy9BdHRhY2htZW50LmpzXCI7XG5pbXBvcnQgeyBBdHRhY2htZW50TG9hZGVyIH0gZnJvbSBcIi4vYXR0YWNobWVudHMvQXR0YWNobWVudExvYWRlci5qc1wiO1xuaW1wb3J0IHsgSGFzVGV4dHVyZVJlZ2lvbiB9IGZyb20gXCIuL2F0dGFjaG1lbnRzL0hhc1RleHR1cmVSZWdpb24uanNcIjtcbmltcG9ydCB7IE1lc2hBdHRhY2htZW50IH0gZnJvbSBcIi4vYXR0YWNobWVudHMvTWVzaEF0dGFjaG1lbnQuanNcIjtcbmltcG9ydCB7IFNlcXVlbmNlLCBTZXF1ZW5jZU1vZGVWYWx1ZXMgfSBmcm9tIFwiLi9hdHRhY2htZW50cy9TZXF1ZW5jZS5qc1wiO1xuaW1wb3J0IHsgQm9uZURhdGEgfSBmcm9tIFwiLi9Cb25lRGF0YS5qc1wiO1xuaW1wb3J0IHsgRXZlbnQgfSBmcm9tIFwiLi9FdmVudC5qc1wiO1xuaW1wb3J0IHsgRXZlbnREYXRhIH0gZnJvbSBcIi4vRXZlbnREYXRhLmpzXCI7XG5pbXBvcnQgeyBJa0NvbnN0cmFpbnREYXRhIH0gZnJvbSBcIi4vSWtDb25zdHJhaW50RGF0YS5qc1wiO1xuaW1wb3J0IHsgUGF0aENvbnN0cmFpbnREYXRhLCBQb3NpdGlvbk1vZGUsIFNwYWNpbmdNb2RlIH0gZnJvbSBcIi4vUGF0aENvbnN0cmFpbnREYXRhLmpzXCI7XG5pbXBvcnQgeyBQaHlzaWNzQ29uc3RyYWludERhdGEgfSBmcm9tIFwiLi9QaHlzaWNzQ29uc3RyYWludERhdGEuanNcIjtcbmltcG9ydCB7IFNrZWxldG9uRGF0YSB9IGZyb20gXCIuL1NrZWxldG9uRGF0YS5qc1wiO1xuaW1wb3J0IHsgU2tpbiB9IGZyb20gXCIuL1NraW4uanNcIjtcbmltcG9ydCB7IFNsb3REYXRhIH0gZnJvbSBcIi4vU2xvdERhdGEuanNcIjtcbmltcG9ydCB7IFRyYW5zZm9ybUNvbnN0cmFpbnREYXRhIH0gZnJvbSBcIi4vVHJhbnNmb3JtQ29uc3RyYWludERhdGEuanNcIjtcbmltcG9ydCB7IENvbG9yLCBVdGlscyB9IGZyb20gXCIuL1V0aWxzLmpzXCI7XG5cbi8qKiBMb2FkcyBza2VsZXRvbiBkYXRhIGluIHRoZSBTcGluZSBiaW5hcnkgZm9ybWF0LlxuICpcbiAqIFNlZSBbU3BpbmUgYmluYXJ5IGZvcm1hdF0oaHR0cDovL2Vzb3Rlcmljc29mdHdhcmUuY29tL3NwaW5lLWJpbmFyeS1mb3JtYXQpIGFuZFxuICogW0pTT04gYW5kIGJpbmFyeSBkYXRhXShodHRwOi8vZXNvdGVyaWNzb2Z0d2FyZS5jb20vc3BpbmUtbG9hZGluZy1za2VsZXRvbi1kYXRhI0pTT04tYW5kLWJpbmFyeS1kYXRhKSBpbiB0aGUgU3BpbmVcbiAqIFJ1bnRpbWVzIEd1aWRlLiAqL1xuZXhwb3J0IGNsYXNzIFNrZWxldG9uQmluYXJ5IHtcblx0LyoqIFNjYWxlcyBib25lIHBvc2l0aW9ucywgaW1hZ2Ugc2l6ZXMsIGFuZCB0cmFuc2xhdGlvbnMgYXMgdGhleSBhcmUgbG9hZGVkLiBUaGlzIGFsbG93cyBkaWZmZXJlbnQgc2l6ZSBpbWFnZXMgdG8gYmUgdXNlZCBhdFxuXHQgKiBydW50aW1lIHRoYW4gd2VyZSB1c2VkIGluIFNwaW5lLlxuXHQgKlxuXHQgKiBTZWUgW1NjYWxpbmddKGh0dHA6Ly9lc290ZXJpY3NvZnR3YXJlLmNvbS9zcGluZS1sb2FkaW5nLXNrZWxldG9uLWRhdGEjU2NhbGluZykgaW4gdGhlIFNwaW5lIFJ1bnRpbWVzIEd1aWRlLiAqL1xuXHRzY2FsZSA9IDE7XG5cblx0YXR0YWNobWVudExvYWRlcjogQXR0YWNobWVudExvYWRlcjtcblx0cHJpdmF0ZSBsaW5rZWRNZXNoZXMgPSBuZXcgQXJyYXk8TGlua2VkTWVzaD4oKTtcblxuXHRjb25zdHJ1Y3RvciAoYXR0YWNobWVudExvYWRlcjogQXR0YWNobWVudExvYWRlcikge1xuXHRcdHRoaXMuYXR0YWNobWVudExvYWRlciA9IGF0dGFjaG1lbnRMb2FkZXI7XG5cdH1cblxuXHRyZWFkU2tlbGV0b25EYXRhIChiaW5hcnk6IFVpbnQ4QXJyYXkgfCBBcnJheUJ1ZmZlcik6IFNrZWxldG9uRGF0YSB7XG5cdFx0bGV0IHNjYWxlID0gdGhpcy5zY2FsZTtcblxuXHRcdGxldCBza2VsZXRvbkRhdGEgPSBuZXcgU2tlbGV0b25EYXRhKCk7XG5cdFx0c2tlbGV0b25EYXRhLm5hbWUgPSBcIlwiOyAvLyBCT1pPXG5cblx0XHRsZXQgaW5wdXQgPSBuZXcgQmluYXJ5SW5wdXQoYmluYXJ5KTtcblxuXHRcdGxldCBsb3dIYXNoID0gaW5wdXQucmVhZEludDMyKCk7XG5cdFx0bGV0IGhpZ2hIYXNoID0gaW5wdXQucmVhZEludDMyKCk7XG5cdFx0c2tlbGV0b25EYXRhLmhhc2ggPSBoaWdoSGFzaCA9PSAwICYmIGxvd0hhc2ggPT0gMCA/IG51bGwgOiBoaWdoSGFzaC50b1N0cmluZygxNikgKyBsb3dIYXNoLnRvU3RyaW5nKDE2KTtcblx0XHRza2VsZXRvbkRhdGEudmVyc2lvbiA9IGlucHV0LnJlYWRTdHJpbmcoKTtcblx0XHRza2VsZXRvbkRhdGEueCA9IGlucHV0LnJlYWRGbG9hdCgpO1xuXHRcdHNrZWxldG9uRGF0YS55ID0gaW5wdXQucmVhZEZsb2F0KCk7XG5cdFx0c2tlbGV0b25EYXRhLndpZHRoID0gaW5wdXQucmVhZEZsb2F0KCk7XG5cdFx0c2tlbGV0b25EYXRhLmhlaWdodCA9IGlucHV0LnJlYWRGbG9hdCgpO1xuXHRcdHNrZWxldG9uRGF0YS5yZWZlcmVuY2VTY2FsZSA9IGlucHV0LnJlYWRGbG9hdCgpICogc2NhbGU7XG5cblx0XHRsZXQgbm9uZXNzZW50aWFsID0gaW5wdXQucmVhZEJvb2xlYW4oKTtcblx0XHRpZiAobm9uZXNzZW50aWFsKSB7XG5cdFx0XHRza2VsZXRvbkRhdGEuZnBzID0gaW5wdXQucmVhZEZsb2F0KCk7XG5cdFx0XHRza2VsZXRvbkRhdGEuaW1hZ2VzUGF0aCA9IGlucHV0LnJlYWRTdHJpbmcoKTtcblx0XHRcdHNrZWxldG9uRGF0YS5hdWRpb1BhdGggPSBpbnB1dC5yZWFkU3RyaW5nKCk7XG5cdFx0fVxuXG5cdFx0bGV0IG4gPSAwO1xuXHRcdC8vIFN0cmluZ3MuXG5cdFx0biA9IGlucHV0LnJlYWRJbnQodHJ1ZSlcblx0XHRmb3IgKGxldCBpID0gMDsgaSA8IG47IGkrKykge1xuXHRcdFx0bGV0IHN0ciA9IGlucHV0LnJlYWRTdHJpbmcoKTtcblx0XHRcdGlmICghc3RyKSB0aHJvdyBuZXcgRXJyb3IoXCJTdHJpbmcgaW4gc3RyaW5nIHRhYmxlIG11c3Qgbm90IGJlIG51bGwuXCIpO1xuXHRcdFx0aW5wdXQuc3RyaW5ncy5wdXNoKHN0cik7XG5cdFx0fVxuXG5cdFx0Ly8gQm9uZXMuXG5cdFx0biA9IGlucHV0LnJlYWRJbnQodHJ1ZSlcblx0XHRmb3IgKGxldCBpID0gMDsgaSA8IG47IGkrKykge1xuXHRcdFx0bGV0IG5hbWUgPSBpbnB1dC5yZWFkU3RyaW5nKCk7XG5cdFx0XHRpZiAoIW5hbWUpIHRocm93IG5ldyBFcnJvcihcIkJvbmUgbmFtZSBtdXN0IG5vdCBiZSBudWxsLlwiKTtcblx0XHRcdGxldCBwYXJlbnQgPSBpID09IDAgPyBudWxsIDogc2tlbGV0b25EYXRhLmJvbmVzW2lucHV0LnJlYWRJbnQodHJ1ZSldO1xuXHRcdFx0bGV0IGRhdGEgPSBuZXcgQm9uZURhdGEoaSwgbmFtZSwgcGFyZW50KTtcblx0XHRcdGRhdGEucm90YXRpb24gPSBpbnB1dC5yZWFkRmxvYXQoKTtcblx0XHRcdGRhdGEueCA9IGlucHV0LnJlYWRGbG9hdCgpICogc2NhbGU7XG5cdFx0XHRkYXRhLnkgPSBpbnB1dC5yZWFkRmxvYXQoKSAqIHNjYWxlO1xuXHRcdFx0ZGF0YS5zY2FsZVggPSBpbnB1dC5yZWFkRmxvYXQoKTtcblx0XHRcdGRhdGEuc2NhbGVZID0gaW5wdXQucmVhZEZsb2F0KCk7XG5cdFx0XHRkYXRhLnNoZWFyWCA9IGlucHV0LnJlYWRGbG9hdCgpO1xuXHRcdFx0ZGF0YS5zaGVhclkgPSBpbnB1dC5yZWFkRmxvYXQoKTtcblx0XHRcdGRhdGEubGVuZ3RoID0gaW5wdXQucmVhZEZsb2F0KCkgKiBzY2FsZTtcblx0XHRcdGRhdGEuaW5oZXJpdCA9IGlucHV0LnJlYWRCeXRlKCk7XG5cdFx0XHRkYXRhLnNraW5SZXF1aXJlZCA9IGlucHV0LnJlYWRCb29sZWFuKCk7XG5cdFx0XHRpZiAobm9uZXNzZW50aWFsKSB7XG5cdFx0XHRcdENvbG9yLnJnYmE4ODg4VG9Db2xvcihkYXRhLmNvbG9yLCBpbnB1dC5yZWFkSW50MzIoKSk7XG5cdFx0XHRcdGRhdGEuaWNvbiA9IGlucHV0LnJlYWRTdHJpbmcoKSA/PyB1bmRlZmluZWQ7XG5cdFx0XHRcdGRhdGEudmlzaWJsZSA9IGlucHV0LnJlYWRCb29sZWFuKCk7XG5cdFx0XHR9XG5cdFx0XHRza2VsZXRvbkRhdGEuYm9uZXMucHVzaChkYXRhKTtcblx0XHR9XG5cblx0XHQvLyBTbG90cy5cblx0XHRuID0gaW5wdXQucmVhZEludCh0cnVlKTtcblx0XHRmb3IgKGxldCBpID0gMDsgaSA8IG47IGkrKykge1xuXHRcdFx0bGV0IHNsb3ROYW1lID0gaW5wdXQucmVhZFN0cmluZygpO1xuXHRcdFx0aWYgKCFzbG90TmFtZSkgdGhyb3cgbmV3IEVycm9yKFwiU2xvdCBuYW1lIG11c3Qgbm90IGJlIG51bGwuXCIpO1xuXHRcdFx0bGV0IGJvbmVEYXRhID0gc2tlbGV0b25EYXRhLmJvbmVzW2lucHV0LnJlYWRJbnQodHJ1ZSldO1xuXHRcdFx0bGV0IGRhdGEgPSBuZXcgU2xvdERhdGEoaSwgc2xvdE5hbWUsIGJvbmVEYXRhKTtcblx0XHRcdENvbG9yLnJnYmE4ODg4VG9Db2xvcihkYXRhLmNvbG9yLCBpbnB1dC5yZWFkSW50MzIoKSk7XG5cblx0XHRcdGxldCBkYXJrQ29sb3IgPSBpbnB1dC5yZWFkSW50MzIoKTtcblx0XHRcdGlmIChkYXJrQ29sb3IgIT0gLTEpIENvbG9yLnJnYjg4OFRvQ29sb3IoZGF0YS5kYXJrQ29sb3IgPSBuZXcgQ29sb3IoKSwgZGFya0NvbG9yKTtcblxuXHRcdFx0ZGF0YS5hdHRhY2htZW50TmFtZSA9IGlucHV0LnJlYWRTdHJpbmdSZWYoKTtcblx0XHRcdGRhdGEuYmxlbmRNb2RlID0gaW5wdXQucmVhZEludCh0cnVlKTtcblx0XHRcdGlmIChub25lc3NlbnRpYWwpIGRhdGEudmlzaWJsZSA9IGlucHV0LnJlYWRCb29sZWFuKCk7XG5cdFx0XHRza2VsZXRvbkRhdGEuc2xvdHMucHVzaChkYXRhKTtcblx0XHR9XG5cblx0XHQvLyBJSyBjb25zdHJhaW50cy5cblx0XHRuID0gaW5wdXQucmVhZEludCh0cnVlKTtcblx0XHRmb3IgKGxldCBpID0gMCwgbm47IGkgPCBuOyBpKyspIHtcblx0XHRcdGxldCBuYW1lID0gaW5wdXQucmVhZFN0cmluZygpO1xuXHRcdFx0aWYgKCFuYW1lKSB0aHJvdyBuZXcgRXJyb3IoXCJJSyBjb25zdHJhaW50IGRhdGEgbmFtZSBtdXN0IG5vdCBiZSBudWxsLlwiKTtcblx0XHRcdGxldCBkYXRhID0gbmV3IElrQ29uc3RyYWludERhdGEobmFtZSk7XG5cdFx0XHRkYXRhLm9yZGVyID0gaW5wdXQucmVhZEludCh0cnVlKTtcblx0XHRcdG5uID0gaW5wdXQucmVhZEludCh0cnVlKTtcblx0XHRcdGZvciAobGV0IGlpID0gMDsgaWkgPCBubjsgaWkrKylcblx0XHRcdFx0ZGF0YS5ib25lcy5wdXNoKHNrZWxldG9uRGF0YS5ib25lc1tpbnB1dC5yZWFkSW50KHRydWUpXSk7XG5cdFx0XHRkYXRhLnRhcmdldCA9IHNrZWxldG9uRGF0YS5ib25lc1tpbnB1dC5yZWFkSW50KHRydWUpXTtcblx0XHRcdGxldCBmbGFncyA9IGlucHV0LnJlYWRCeXRlKCk7XG5cdFx0XHRkYXRhLnNraW5SZXF1aXJlZCA9IChmbGFncyAmIDEpICE9IDA7XG5cdFx0XHRkYXRhLmJlbmREaXJlY3Rpb24gPSAoZmxhZ3MgJiAyKSAhPSAwID8gMSA6IC0xO1xuXHRcdFx0ZGF0YS5jb21wcmVzcyA9IChmbGFncyAmIDQpICE9IDA7XG5cdFx0XHRkYXRhLnN0cmV0Y2ggPSAoZmxhZ3MgJiA4KSAhPSAwO1xuXHRcdFx0ZGF0YS51bmlmb3JtID0gKGZsYWdzICYgMTYpICE9IDA7XG5cdFx0XHRpZiAoKGZsYWdzICYgMzIpICE9IDApIGRhdGEubWl4ID0gKGZsYWdzICYgNjQpICE9IDAgPyBpbnB1dC5yZWFkRmxvYXQoKSA6IDE7XG5cdFx0XHRpZiAoKGZsYWdzICYgMTI4KSAhPSAwKSBkYXRhLnNvZnRuZXNzID0gaW5wdXQucmVhZEZsb2F0KCkgKiBzY2FsZTtcblx0XHRcdHNrZWxldG9uRGF0YS5pa0NvbnN0cmFpbnRzLnB1c2goZGF0YSk7XG5cdFx0fVxuXG5cdFx0Ly8gVHJhbnNmb3JtIGNvbnN0cmFpbnRzLlxuXHRcdG4gPSBpbnB1dC5yZWFkSW50KHRydWUpO1xuXHRcdGZvciAobGV0IGkgPSAwLCBubjsgaSA8IG47IGkrKykge1xuXHRcdFx0bGV0IG5hbWUgPSBpbnB1dC5yZWFkU3RyaW5nKCk7XG5cdFx0XHRpZiAoIW5hbWUpIHRocm93IG5ldyBFcnJvcihcIlRyYW5zZm9ybSBjb25zdHJhaW50IGRhdGEgbmFtZSBtdXN0IG5vdCBiZSBudWxsLlwiKTtcblx0XHRcdGxldCBkYXRhID0gbmV3IFRyYW5zZm9ybUNvbnN0cmFpbnREYXRhKG5hbWUpO1xuXHRcdFx0ZGF0YS5vcmRlciA9IGlucHV0LnJlYWRJbnQodHJ1ZSk7XG5cdFx0XHRubiA9IGlucHV0LnJlYWRJbnQodHJ1ZSk7XG5cdFx0XHRmb3IgKGxldCBpaSA9IDA7IGlpIDwgbm47IGlpKyspXG5cdFx0XHRcdGRhdGEuYm9uZXMucHVzaChza2VsZXRvbkRhdGEuYm9uZXNbaW5wdXQucmVhZEludCh0cnVlKV0pO1xuXHRcdFx0ZGF0YS50YXJnZXQgPSBza2VsZXRvbkRhdGEuYm9uZXNbaW5wdXQucmVhZEludCh0cnVlKV07XG5cdFx0XHRsZXQgZmxhZ3MgPSBpbnB1dC5yZWFkQnl0ZSgpO1xuXHRcdFx0ZGF0YS5za2luUmVxdWlyZWQgPSAoZmxhZ3MgJiAxKSAhPSAwO1xuXHRcdFx0ZGF0YS5sb2NhbCA9IChmbGFncyAmIDIpICE9IDA7XG5cdFx0XHRkYXRhLnJlbGF0aXZlID0gKGZsYWdzICYgNCkgIT0gMDtcblx0XHRcdGlmICgoZmxhZ3MgJiA4KSAhPSAwKSBkYXRhLm9mZnNldFJvdGF0aW9uID0gaW5wdXQucmVhZEZsb2F0KCk7XG5cdFx0XHRpZiAoKGZsYWdzICYgMTYpICE9IDApIGRhdGEub2Zmc2V0WCA9IGlucHV0LnJlYWRGbG9hdCgpICogc2NhbGU7XG5cdFx0XHRpZiAoKGZsYWdzICYgMzIpICE9IDApIGRhdGEub2Zmc2V0WSA9IGlucHV0LnJlYWRGbG9hdCgpICogc2NhbGU7XG5cdFx0XHRpZiAoKGZsYWdzICYgNjQpICE9IDApIGRhdGEub2Zmc2V0U2NhbGVYID0gaW5wdXQucmVhZEZsb2F0KCk7XG5cdFx0XHRpZiAoKGZsYWdzICYgMTI4KSAhPSAwKSBkYXRhLm9mZnNldFNjYWxlWSA9IGlucHV0LnJlYWRGbG9hdCgpO1xuXHRcdFx0ZmxhZ3MgPSBpbnB1dC5yZWFkQnl0ZSgpO1xuXHRcdFx0aWYgKChmbGFncyAmIDEpICE9IDApIGRhdGEub2Zmc2V0U2hlYXJZID0gaW5wdXQucmVhZEZsb2F0KCk7XG5cdFx0XHRpZiAoKGZsYWdzICYgMikgIT0gMCkgZGF0YS5taXhSb3RhdGUgPSBpbnB1dC5yZWFkRmxvYXQoKTtcblx0XHRcdGlmICgoZmxhZ3MgJiA0KSAhPSAwKSBkYXRhLm1peFggPSBpbnB1dC5yZWFkRmxvYXQoKTtcblx0XHRcdGlmICgoZmxhZ3MgJiA4KSAhPSAwKSBkYXRhLm1peFkgPSBpbnB1dC5yZWFkRmxvYXQoKTtcblx0XHRcdGlmICgoZmxhZ3MgJiAxNikgIT0gMCkgZGF0YS5taXhTY2FsZVggPSBpbnB1dC5yZWFkRmxvYXQoKTtcblx0XHRcdGlmICgoZmxhZ3MgJiAzMikgIT0gMCkgZGF0YS5taXhTY2FsZVkgPSBpbnB1dC5yZWFkRmxvYXQoKTtcblx0XHRcdGlmICgoZmxhZ3MgJiA2NCkgIT0gMCkgZGF0YS5taXhTaGVhclkgPSBpbnB1dC5yZWFkRmxvYXQoKTtcblx0XHRcdHNrZWxldG9uRGF0YS50cmFuc2Zvcm1Db25zdHJhaW50cy5wdXNoKGRhdGEpO1xuXHRcdH1cblxuXHRcdC8vIFBhdGggY29uc3RyYWludHMuXG5cdFx0biA9IGlucHV0LnJlYWRJbnQodHJ1ZSk7XG5cdFx0Zm9yIChsZXQgaSA9IDAsIG5uOyBpIDwgbjsgaSsrKSB7XG5cdFx0XHRsZXQgbmFtZSA9IGlucHV0LnJlYWRTdHJpbmcoKTtcblx0XHRcdGlmICghbmFtZSkgdGhyb3cgbmV3IEVycm9yKFwiUGF0aCBjb25zdHJhaW50IGRhdGEgbmFtZSBtdXN0IG5vdCBiZSBudWxsLlwiKTtcblx0XHRcdGxldCBkYXRhID0gbmV3IFBhdGhDb25zdHJhaW50RGF0YShuYW1lKTtcblx0XHRcdGRhdGEub3JkZXIgPSBpbnB1dC5yZWFkSW50KHRydWUpO1xuXHRcdFx0ZGF0YS5za2luUmVxdWlyZWQgPSBpbnB1dC5yZWFkQm9vbGVhbigpO1xuXHRcdFx0bm4gPSBpbnB1dC5yZWFkSW50KHRydWUpO1xuXHRcdFx0Zm9yIChsZXQgaWkgPSAwOyBpaSA8IG5uOyBpaSsrKVxuXHRcdFx0XHRkYXRhLmJvbmVzLnB1c2goc2tlbGV0b25EYXRhLmJvbmVzW2lucHV0LnJlYWRJbnQodHJ1ZSldKTtcblx0XHRcdGRhdGEudGFyZ2V0ID0gc2tlbGV0b25EYXRhLnNsb3RzW2lucHV0LnJlYWRJbnQodHJ1ZSldO1xuXHRcdFx0Y29uc3QgZmxhZ3MgPSBpbnB1dC5yZWFkQnl0ZSgpO1xuXHRcdFx0ZGF0YS5wb3NpdGlvbk1vZGUgPSBmbGFncyAmIDE7XG5cdFx0XHRkYXRhLnNwYWNpbmdNb2RlID0gKGZsYWdzID4+IDEpICYgMztcblx0XHRcdGRhdGEucm90YXRlTW9kZSA9IChmbGFncyA+PiAzKSAmIDM7XG5cdFx0XHRpZiAoKGZsYWdzICYgMTI4KSAhPSAwKSBkYXRhLm9mZnNldFJvdGF0aW9uID0gaW5wdXQucmVhZEZsb2F0KCk7XG5cdFx0XHRkYXRhLnBvc2l0aW9uID0gaW5wdXQucmVhZEZsb2F0KCk7XG5cdFx0XHRpZiAoZGF0YS5wb3NpdGlvbk1vZGUgPT0gUG9zaXRpb25Nb2RlLkZpeGVkKSBkYXRhLnBvc2l0aW9uICo9IHNjYWxlO1xuXHRcdFx0ZGF0YS5zcGFjaW5nID0gaW5wdXQucmVhZEZsb2F0KCk7XG5cdFx0XHRpZiAoZGF0YS5zcGFjaW5nTW9kZSA9PSBTcGFjaW5nTW9kZS5MZW5ndGggfHwgZGF0YS5zcGFjaW5nTW9kZSA9PSBTcGFjaW5nTW9kZS5GaXhlZCkgZGF0YS5zcGFjaW5nICo9IHNjYWxlO1xuXHRcdFx0ZGF0YS5taXhSb3RhdGUgPSBpbnB1dC5yZWFkRmxvYXQoKTtcblx0XHRcdGRhdGEubWl4WCA9IGlucHV0LnJlYWRGbG9hdCgpO1xuXHRcdFx0ZGF0YS5taXhZID0gaW5wdXQucmVhZEZsb2F0KCk7XG5cdFx0XHRza2VsZXRvbkRhdGEucGF0aENvbnN0cmFpbnRzLnB1c2goZGF0YSk7XG5cdFx0fVxuXG5cdFx0Ly8gUGh5c2ljcyBjb25zdHJhaW50cy5cblx0XHRuID0gaW5wdXQucmVhZEludCh0cnVlKTtcblx0XHRmb3IgKGxldCBpID0gMCwgbm47IGkgPCBuOyBpKyspIHtcblx0XHRcdGNvbnN0IG5hbWUgPSBpbnB1dC5yZWFkU3RyaW5nKCk7XG5cdFx0XHRpZiAoIW5hbWUpIHRocm93IG5ldyBFcnJvcihcIlBoeXNpY3MgY29uc3RyYWludCBkYXRhIG5hbWUgbXVzdCBub3QgYmUgbnVsbC5cIik7XG5cdFx0XHRjb25zdCBkYXRhID0gbmV3IFBoeXNpY3NDb25zdHJhaW50RGF0YShuYW1lKTtcblx0XHRcdGRhdGEub3JkZXIgPSBpbnB1dC5yZWFkSW50KHRydWUpO1xuXHRcdFx0ZGF0YS5ib25lID0gc2tlbGV0b25EYXRhLmJvbmVzW2lucHV0LnJlYWRJbnQodHJ1ZSldO1xuXHRcdFx0bGV0IGZsYWdzID0gaW5wdXQucmVhZEJ5dGUoKTtcblx0XHRcdGRhdGEuc2tpblJlcXVpcmVkID0gKGZsYWdzICYgMSkgIT0gMDtcblx0XHRcdGlmICgoZmxhZ3MgJiAyKSAhPSAwKSBkYXRhLnggPSBpbnB1dC5yZWFkRmxvYXQoKTtcblx0XHRcdGlmICgoZmxhZ3MgJiA0KSAhPSAwKSBkYXRhLnkgPSBpbnB1dC5yZWFkRmxvYXQoKTtcblx0XHRcdGlmICgoZmxhZ3MgJiA4KSAhPSAwKSBkYXRhLnJvdGF0ZSA9IGlucHV0LnJlYWRGbG9hdCgpO1xuXHRcdFx0aWYgKChmbGFncyAmIDE2KSAhPSAwKSBkYXRhLnNjYWxlWCA9IGlucHV0LnJlYWRGbG9hdCgpO1xuXHRcdFx0aWYgKChmbGFncyAmIDMyKSAhPSAwKSBkYXRhLnNoZWFyWCA9IGlucHV0LnJlYWRGbG9hdCgpO1xuXHRcdFx0ZGF0YS5saW1pdCA9ICgoZmxhZ3MgJiA2NCkgIT0gMCA/IGlucHV0LnJlYWRGbG9hdCgpIDogNTAwMCkgKiBzY2FsZTtcblx0XHRcdGRhdGEuc3RlcCA9IDEgLyBpbnB1dC5yZWFkVW5zaWduZWRCeXRlKCk7XG5cdFx0XHRkYXRhLmluZXJ0aWEgPSBpbnB1dC5yZWFkRmxvYXQoKTtcblx0XHRcdGRhdGEuc3RyZW5ndGggPSBpbnB1dC5yZWFkRmxvYXQoKTtcblx0XHRcdGRhdGEuZGFtcGluZyA9IGlucHV0LnJlYWRGbG9hdCgpO1xuXHRcdFx0ZGF0YS5tYXNzSW52ZXJzZSA9IChmbGFncyAmIDEyOCkgIT0gMCA/IGlucHV0LnJlYWRGbG9hdCgpIDogMTtcblx0XHRcdGRhdGEud2luZCA9IGlucHV0LnJlYWRGbG9hdCgpO1xuXHRcdFx0ZGF0YS5ncmF2aXR5ID0gaW5wdXQucmVhZEZsb2F0KCk7XG5cdFx0XHRmbGFncyA9IGlucHV0LnJlYWRCeXRlKCk7XG5cdFx0XHRpZiAoKGZsYWdzICYgMSkgIT0gMCkgZGF0YS5pbmVydGlhR2xvYmFsID0gdHJ1ZTtcblx0XHRcdGlmICgoZmxhZ3MgJiAyKSAhPSAwKSBkYXRhLnN0cmVuZ3RoR2xvYmFsID0gdHJ1ZTtcblx0XHRcdGlmICgoZmxhZ3MgJiA0KSAhPSAwKSBkYXRhLmRhbXBpbmdHbG9iYWwgPSB0cnVlO1xuXHRcdFx0aWYgKChmbGFncyAmIDgpICE9IDApIGRhdGEubWFzc0dsb2JhbCA9IHRydWU7XG5cdFx0XHRpZiAoKGZsYWdzICYgMTYpICE9IDApIGRhdGEud2luZEdsb2JhbCA9IHRydWU7XG5cdFx0XHRpZiAoKGZsYWdzICYgMzIpICE9IDApIGRhdGEuZ3Jhdml0eUdsb2JhbCA9IHRydWU7XG5cdFx0XHRpZiAoKGZsYWdzICYgNjQpICE9IDApIGRhdGEubWl4R2xvYmFsID0gdHJ1ZTtcblx0XHRcdGRhdGEubWl4ID0gKGZsYWdzICYgMTI4KSAhPSAwID8gaW5wdXQucmVhZEZsb2F0KCkgOiAxO1xuXHRcdFx0c2tlbGV0b25EYXRhLnBoeXNpY3NDb25zdHJhaW50cy5wdXNoKGRhdGEpO1xuXHRcdH1cblxuXHRcdC8vIERlZmF1bHQgc2tpbi5cblx0XHRsZXQgZGVmYXVsdFNraW4gPSB0aGlzLnJlYWRTa2luKGlucHV0LCBza2VsZXRvbkRhdGEsIHRydWUsIG5vbmVzc2VudGlhbCk7XG5cdFx0aWYgKGRlZmF1bHRTa2luKSB7XG5cdFx0XHRza2VsZXRvbkRhdGEuZGVmYXVsdFNraW4gPSBkZWZhdWx0U2tpbjtcblx0XHRcdHNrZWxldG9uRGF0YS5za2lucy5wdXNoKGRlZmF1bHRTa2luKTtcblx0XHR9XG5cblx0XHQvLyBTa2lucy5cblx0XHR7XG5cdFx0XHRsZXQgaSA9IHNrZWxldG9uRGF0YS5za2lucy5sZW5ndGg7XG5cdFx0XHRVdGlscy5zZXRBcnJheVNpemUoc2tlbGV0b25EYXRhLnNraW5zLCBuID0gaSArIGlucHV0LnJlYWRJbnQodHJ1ZSkpO1xuXHRcdFx0Zm9yICg7IGkgPCBuOyBpKyspIHtcblx0XHRcdFx0bGV0IHNraW4gPSB0aGlzLnJlYWRTa2luKGlucHV0LCBza2VsZXRvbkRhdGEsIGZhbHNlLCBub25lc3NlbnRpYWwpO1xuXHRcdFx0XHRpZiAoIXNraW4pIHRocm93IG5ldyBFcnJvcihcInJlYWRTa2luKCkgc2hvdWxkIG5vdCBoYXZlIHJldHVybmVkIG51bGwuXCIpO1xuXHRcdFx0XHRza2VsZXRvbkRhdGEuc2tpbnNbaV0gPSBza2luO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdC8vIExpbmtlZCBtZXNoZXMuXG5cdFx0biA9IHRoaXMubGlua2VkTWVzaGVzLmxlbmd0aDtcblx0XHRmb3IgKGxldCBpID0gMDsgaSA8IG47IGkrKykge1xuXHRcdFx0bGV0IGxpbmtlZE1lc2ggPSB0aGlzLmxpbmtlZE1lc2hlc1tpXTtcblx0XHRcdGNvbnN0IHNraW4gPSBza2VsZXRvbkRhdGEuc2tpbnNbbGlua2VkTWVzaC5za2luSW5kZXhdO1xuXHRcdFx0aWYgKCFsaW5rZWRNZXNoLnBhcmVudCkgdGhyb3cgbmV3IEVycm9yKFwiTGlua2VkIG1lc2ggcGFyZW50IG11c3Qgbm90IGJlIG51bGxcIik7XG5cdFx0XHRsZXQgcGFyZW50ID0gc2tpbi5nZXRBdHRhY2htZW50KGxpbmtlZE1lc2guc2xvdEluZGV4LCBsaW5rZWRNZXNoLnBhcmVudCk7XG5cdFx0XHRpZiAoIXBhcmVudCkgdGhyb3cgbmV3IEVycm9yKGBQYXJlbnQgbWVzaCBub3QgZm91bmQ6ICR7bGlua2VkTWVzaC5wYXJlbnR9YCk7XG5cdFx0XHRsaW5rZWRNZXNoLm1lc2gudGltZWxpbmVBdHRhY2htZW50ID0gbGlua2VkTWVzaC5pbmhlcml0VGltZWxpbmUgPyBwYXJlbnQgYXMgVmVydGV4QXR0YWNobWVudCA6IGxpbmtlZE1lc2gubWVzaDtcblx0XHRcdGxpbmtlZE1lc2gubWVzaC5zZXRQYXJlbnRNZXNoKHBhcmVudCBhcyBNZXNoQXR0YWNobWVudCk7XG5cdFx0XHRpZiAobGlua2VkTWVzaC5tZXNoLnJlZ2lvbiAhPSBudWxsKSBsaW5rZWRNZXNoLm1lc2gudXBkYXRlUmVnaW9uKCk7XG5cdFx0fVxuXHRcdHRoaXMubGlua2VkTWVzaGVzLmxlbmd0aCA9IDA7XG5cblx0XHQvLyBFdmVudHMuXG5cdFx0biA9IGlucHV0LnJlYWRJbnQodHJ1ZSk7XG5cdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCBuOyBpKyspIHtcblx0XHRcdGxldCBldmVudE5hbWUgPSBpbnB1dC5yZWFkU3RyaW5nKCk7XG5cdFx0XHRpZiAoIWV2ZW50TmFtZSkgdGhyb3cgbmV3IEVycm9yKFwiRXZlbnQgZGF0YSBuYW1lIG11c3Qgbm90IGJlIG51bGxcIik7XG5cdFx0XHRsZXQgZGF0YSA9IG5ldyBFdmVudERhdGEoZXZlbnROYW1lKTtcblx0XHRcdGRhdGEuaW50VmFsdWUgPSBpbnB1dC5yZWFkSW50KGZhbHNlKTtcblx0XHRcdGRhdGEuZmxvYXRWYWx1ZSA9IGlucHV0LnJlYWRGbG9hdCgpO1xuXHRcdFx0ZGF0YS5zdHJpbmdWYWx1ZSA9IGlucHV0LnJlYWRTdHJpbmcoKTtcblx0XHRcdGRhdGEuYXVkaW9QYXRoID0gaW5wdXQucmVhZFN0cmluZygpO1xuXHRcdFx0aWYgKGRhdGEuYXVkaW9QYXRoKSB7XG5cdFx0XHRcdGRhdGEudm9sdW1lID0gaW5wdXQucmVhZEZsb2F0KCk7XG5cdFx0XHRcdGRhdGEuYmFsYW5jZSA9IGlucHV0LnJlYWRGbG9hdCgpO1xuXHRcdFx0fVxuXHRcdFx0c2tlbGV0b25EYXRhLmV2ZW50cy5wdXNoKGRhdGEpO1xuXHRcdH1cblxuXHRcdC8vIEFuaW1hdGlvbnMuXG5cdFx0biA9IGlucHV0LnJlYWRJbnQodHJ1ZSk7XG5cdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCBuOyBpKyspIHtcblx0XHRcdGxldCBhbmltYXRpb25OYW1lID0gaW5wdXQucmVhZFN0cmluZygpO1xuXHRcdFx0aWYgKCFhbmltYXRpb25OYW1lKSB0aHJvdyBuZXcgRXJyb3IoXCJBbmltYXRpbyBuYW1lIG11c3Qgbm90IGJlIG51bGwuXCIpO1xuXHRcdFx0c2tlbGV0b25EYXRhLmFuaW1hdGlvbnMucHVzaCh0aGlzLnJlYWRBbmltYXRpb24oaW5wdXQsIGFuaW1hdGlvbk5hbWUsIHNrZWxldG9uRGF0YSkpO1xuXHRcdH1cblx0XHRyZXR1cm4gc2tlbGV0b25EYXRhO1xuXHR9XG5cblx0cHJpdmF0ZSByZWFkU2tpbiAoaW5wdXQ6IEJpbmFyeUlucHV0LCBza2VsZXRvbkRhdGE6IFNrZWxldG9uRGF0YSwgZGVmYXVsdFNraW46IGJvb2xlYW4sIG5vbmVzc2VudGlhbDogYm9vbGVhbik6IFNraW4gfCBudWxsIHtcblx0XHRsZXQgc2tpbiA9IG51bGw7XG5cdFx0bGV0IHNsb3RDb3VudCA9IDA7XG5cblx0XHRpZiAoZGVmYXVsdFNraW4pIHtcblx0XHRcdHNsb3RDb3VudCA9IGlucHV0LnJlYWRJbnQodHJ1ZSlcblx0XHRcdGlmIChzbG90Q291bnQgPT0gMCkgcmV0dXJuIG51bGw7XG5cdFx0XHRza2luID0gbmV3IFNraW4oXCJkZWZhdWx0XCIpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRsZXQgc2tpbk5hbWUgPSBpbnB1dC5yZWFkU3RyaW5nKCk7XG5cdFx0XHRpZiAoIXNraW5OYW1lKSB0aHJvdyBuZXcgRXJyb3IoXCJTa2luIG5hbWUgbXVzdCBub3QgYmUgbnVsbC5cIik7XG5cdFx0XHRza2luID0gbmV3IFNraW4oc2tpbk5hbWUpO1xuXHRcdFx0aWYgKG5vbmVzc2VudGlhbCkgQ29sb3IucmdiYTg4ODhUb0NvbG9yKHNraW4uY29sb3IsIGlucHV0LnJlYWRJbnQzMigpKTtcblx0XHRcdHNraW4uYm9uZXMubGVuZ3RoID0gaW5wdXQucmVhZEludCh0cnVlKTtcblx0XHRcdGZvciAobGV0IGkgPSAwLCBuID0gc2tpbi5ib25lcy5sZW5ndGg7IGkgPCBuOyBpKyspXG5cdFx0XHRcdHNraW4uYm9uZXNbaV0gPSBza2VsZXRvbkRhdGEuYm9uZXNbaW5wdXQucmVhZEludCh0cnVlKV07XG5cblx0XHRcdGZvciAobGV0IGkgPSAwLCBuID0gaW5wdXQucmVhZEludCh0cnVlKTsgaSA8IG47IGkrKylcblx0XHRcdFx0c2tpbi5jb25zdHJhaW50cy5wdXNoKHNrZWxldG9uRGF0YS5pa0NvbnN0cmFpbnRzW2lucHV0LnJlYWRJbnQodHJ1ZSldKTtcblx0XHRcdGZvciAobGV0IGkgPSAwLCBuID0gaW5wdXQucmVhZEludCh0cnVlKTsgaSA8IG47IGkrKylcblx0XHRcdFx0c2tpbi5jb25zdHJhaW50cy5wdXNoKHNrZWxldG9uRGF0YS50cmFuc2Zvcm1Db25zdHJhaW50c1tpbnB1dC5yZWFkSW50KHRydWUpXSk7XG5cdFx0XHRmb3IgKGxldCBpID0gMCwgbiA9IGlucHV0LnJlYWRJbnQodHJ1ZSk7IGkgPCBuOyBpKyspXG5cdFx0XHRcdHNraW4uY29uc3RyYWludHMucHVzaChza2VsZXRvbkRhdGEucGF0aENvbnN0cmFpbnRzW2lucHV0LnJlYWRJbnQodHJ1ZSldKTtcblx0XHRcdGZvciAobGV0IGkgPSAwLCBuID0gaW5wdXQucmVhZEludCh0cnVlKTsgaSA8IG47IGkrKylcblx0XHRcdFx0c2tpbi5jb25zdHJhaW50cy5wdXNoKHNrZWxldG9uRGF0YS5waHlzaWNzQ29uc3RyYWludHNbaW5wdXQucmVhZEludCh0cnVlKV0pO1xuXG5cdFx0XHRzbG90Q291bnQgPSBpbnB1dC5yZWFkSW50KHRydWUpO1xuXHRcdH1cblxuXHRcdGZvciAobGV0IGkgPSAwOyBpIDwgc2xvdENvdW50OyBpKyspIHtcblx0XHRcdGxldCBzbG90SW5kZXggPSBpbnB1dC5yZWFkSW50KHRydWUpO1xuXHRcdFx0Zm9yIChsZXQgaWkgPSAwLCBubiA9IGlucHV0LnJlYWRJbnQodHJ1ZSk7IGlpIDwgbm47IGlpKyspIHtcblx0XHRcdFx0bGV0IG5hbWUgPSBpbnB1dC5yZWFkU3RyaW5nUmVmKCk7XG5cdFx0XHRcdGlmICghbmFtZSlcblx0XHRcdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJBdHRhY2htZW50IG5hbWUgbXVzdCBub3QgYmUgbnVsbFwiKTtcblx0XHRcdFx0bGV0IGF0dGFjaG1lbnQgPSB0aGlzLnJlYWRBdHRhY2htZW50KGlucHV0LCBza2VsZXRvbkRhdGEsIHNraW4sIHNsb3RJbmRleCwgbmFtZSwgbm9uZXNzZW50aWFsKTtcblx0XHRcdFx0aWYgKGF0dGFjaG1lbnQpIHNraW4uc2V0QXR0YWNobWVudChzbG90SW5kZXgsIG5hbWUsIGF0dGFjaG1lbnQpO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRyZXR1cm4gc2tpbjtcblx0fVxuXG5cdHByaXZhdGUgcmVhZEF0dGFjaG1lbnQgKGlucHV0OiBCaW5hcnlJbnB1dCwgc2tlbGV0b25EYXRhOiBTa2VsZXRvbkRhdGEsIHNraW46IFNraW4sIHNsb3RJbmRleDogbnVtYmVyLCBhdHRhY2htZW50TmFtZTogc3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZCwgbm9uZXNzZW50aWFsOiBib29sZWFuKTogQXR0YWNobWVudCB8IG51bGwge1xuXHRcdGxldCBzY2FsZSA9IHRoaXMuc2NhbGU7XG5cblx0XHRsZXQgZmxhZ3MgPSBpbnB1dC5yZWFkQnl0ZSgpO1xuXHRcdGNvbnN0IG5hbWUgPSAoZmxhZ3MgJiA4KSAhPSAwID8gaW5wdXQucmVhZFN0cmluZ1JlZigpIDogYXR0YWNobWVudE5hbWU7XG5cdFx0aWYgKCFuYW1lKSB0aHJvdyBuZXcgRXJyb3IoXCJBdHRhY2htZW50IG5hbWUgbXVzdCBub3QgYmUgbnVsbFwiKTtcblx0XHRzd2l0Y2ggKChmbGFncyAmIDBiMTExKSBhcyBBdHRhY2htZW50VHlwZSkgeyAvLyBCVUc/XG5cdFx0XHRjYXNlIEF0dGFjaG1lbnRUeXBlLlJlZ2lvbjoge1xuXHRcdFx0XHRsZXQgcGF0aCA9IChmbGFncyAmIDE2KSAhPSAwID8gaW5wdXQucmVhZFN0cmluZ1JlZigpIDogbnVsbDtcblx0XHRcdFx0Y29uc3QgY29sb3IgPSAoZmxhZ3MgJiAzMikgIT0gMCA/IGlucHV0LnJlYWRJbnQzMigpIDogMHhmZmZmZmZmZjtcblx0XHRcdFx0Y29uc3Qgc2VxdWVuY2UgPSAoZmxhZ3MgJiA2NCkgIT0gMCA/IHRoaXMucmVhZFNlcXVlbmNlKGlucHV0KSA6IG51bGw7XG5cdFx0XHRcdGxldCByb3RhdGlvbiA9IChmbGFncyAmIDEyOCkgIT0gMCA/IGlucHV0LnJlYWRGbG9hdCgpIDogMDtcblx0XHRcdFx0bGV0IHggPSBpbnB1dC5yZWFkRmxvYXQoKTtcblx0XHRcdFx0bGV0IHkgPSBpbnB1dC5yZWFkRmxvYXQoKTtcblx0XHRcdFx0bGV0IHNjYWxlWCA9IGlucHV0LnJlYWRGbG9hdCgpO1xuXHRcdFx0XHRsZXQgc2NhbGVZID0gaW5wdXQucmVhZEZsb2F0KCk7XG5cdFx0XHRcdGxldCB3aWR0aCA9IGlucHV0LnJlYWRGbG9hdCgpO1xuXHRcdFx0XHRsZXQgaGVpZ2h0ID0gaW5wdXQucmVhZEZsb2F0KCk7XG5cblx0XHRcdFx0aWYgKCFwYXRoKSBwYXRoID0gbmFtZTtcblx0XHRcdFx0bGV0IHJlZ2lvbiA9IHRoaXMuYXR0YWNobWVudExvYWRlci5uZXdSZWdpb25BdHRhY2htZW50KHNraW4sIG5hbWUsIHBhdGgsIHNlcXVlbmNlKTtcblx0XHRcdFx0aWYgKCFyZWdpb24pIHJldHVybiBudWxsO1xuXHRcdFx0XHRyZWdpb24ucGF0aCA9IHBhdGg7XG5cdFx0XHRcdHJlZ2lvbi54ID0geCAqIHNjYWxlO1xuXHRcdFx0XHRyZWdpb24ueSA9IHkgKiBzY2FsZTtcblx0XHRcdFx0cmVnaW9uLnNjYWxlWCA9IHNjYWxlWDtcblx0XHRcdFx0cmVnaW9uLnNjYWxlWSA9IHNjYWxlWTtcblx0XHRcdFx0cmVnaW9uLnJvdGF0aW9uID0gcm90YXRpb247XG5cdFx0XHRcdHJlZ2lvbi53aWR0aCA9IHdpZHRoICogc2NhbGU7XG5cdFx0XHRcdHJlZ2lvbi5oZWlnaHQgPSBoZWlnaHQgKiBzY2FsZTtcblx0XHRcdFx0Q29sb3IucmdiYTg4ODhUb0NvbG9yKHJlZ2lvbi5jb2xvciwgY29sb3IpO1xuXHRcdFx0XHRyZWdpb24uc2VxdWVuY2UgPSBzZXF1ZW5jZTtcblx0XHRcdFx0aWYgKHNlcXVlbmNlID09IG51bGwpIHJlZ2lvbi51cGRhdGVSZWdpb24oKTtcblx0XHRcdFx0cmV0dXJuIHJlZ2lvbjtcblx0XHRcdH1cblx0XHRcdGNhc2UgQXR0YWNobWVudFR5cGUuQm91bmRpbmdCb3g6IHtcblx0XHRcdFx0bGV0IHZlcnRpY2VzID0gdGhpcy5yZWFkVmVydGljZXMoaW5wdXQsIChmbGFncyAmIDE2KSAhPSAwKTtcblx0XHRcdFx0bGV0IGNvbG9yID0gbm9uZXNzZW50aWFsID8gaW5wdXQucmVhZEludDMyKCkgOiAwO1xuXG5cdFx0XHRcdGxldCBib3ggPSB0aGlzLmF0dGFjaG1lbnRMb2FkZXIubmV3Qm91bmRpbmdCb3hBdHRhY2htZW50KHNraW4sIG5hbWUpO1xuXHRcdFx0XHRpZiAoIWJveCkgcmV0dXJuIG51bGw7XG5cdFx0XHRcdGJveC53b3JsZFZlcnRpY2VzTGVuZ3RoID0gdmVydGljZXMubGVuZ3RoO1xuXHRcdFx0XHRib3gudmVydGljZXMgPSB2ZXJ0aWNlcy52ZXJ0aWNlcyE7XG5cdFx0XHRcdGJveC5ib25lcyA9IHZlcnRpY2VzLmJvbmVzO1xuXHRcdFx0XHRpZiAobm9uZXNzZW50aWFsKSBDb2xvci5yZ2JhODg4OFRvQ29sb3IoYm94LmNvbG9yLCBjb2xvcik7XG5cdFx0XHRcdHJldHVybiBib3g7XG5cdFx0XHR9XG5cdFx0XHRjYXNlIEF0dGFjaG1lbnRUeXBlLk1lc2g6IHtcblx0XHRcdFx0bGV0IHBhdGggPSAoZmxhZ3MgJiAxNikgIT0gMCA/IGlucHV0LnJlYWRTdHJpbmdSZWYoKSA6IG5hbWU7XG5cdFx0XHRcdGNvbnN0IGNvbG9yID0gKGZsYWdzICYgMzIpICE9IDAgPyBpbnB1dC5yZWFkSW50MzIoKSA6IDB4ZmZmZmZmZmY7XG5cdFx0XHRcdGNvbnN0IHNlcXVlbmNlID0gKGZsYWdzICYgNjQpICE9IDAgPyB0aGlzLnJlYWRTZXF1ZW5jZShpbnB1dCkgOiBudWxsO1xuXHRcdFx0XHRjb25zdCBodWxsTGVuZ3RoID0gaW5wdXQucmVhZEludCh0cnVlKTtcblx0XHRcdFx0Y29uc3QgdmVydGljZXMgPSB0aGlzLnJlYWRWZXJ0aWNlcyhpbnB1dCwgKGZsYWdzICYgMTI4KSAhPSAwKTtcblx0XHRcdFx0Y29uc3QgdXZzID0gdGhpcy5yZWFkRmxvYXRBcnJheShpbnB1dCwgdmVydGljZXMubGVuZ3RoLCAxKTtcblx0XHRcdFx0Y29uc3QgdHJpYW5nbGVzID0gdGhpcy5yZWFkU2hvcnRBcnJheShpbnB1dCwgKHZlcnRpY2VzLmxlbmd0aCAtIGh1bGxMZW5ndGggLSAyKSAqIDMpO1xuXHRcdFx0XHRsZXQgZWRnZXM6IG51bWJlcltdID0gW107XG5cdFx0XHRcdGxldCB3aWR0aCA9IDAsIGhlaWdodCA9IDA7XG5cdFx0XHRcdGlmIChub25lc3NlbnRpYWwpIHtcblx0XHRcdFx0XHRlZGdlcyA9IHRoaXMucmVhZFNob3J0QXJyYXkoaW5wdXQsIGlucHV0LnJlYWRJbnQodHJ1ZSkpO1xuXHRcdFx0XHRcdHdpZHRoID0gaW5wdXQucmVhZEZsb2F0KCk7XG5cdFx0XHRcdFx0aGVpZ2h0ID0gaW5wdXQucmVhZEZsb2F0KCk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRpZiAoIXBhdGgpIHBhdGggPSBuYW1lO1xuXHRcdFx0XHRsZXQgbWVzaCA9IHRoaXMuYXR0YWNobWVudExvYWRlci5uZXdNZXNoQXR0YWNobWVudChza2luLCBuYW1lLCBwYXRoLCBzZXF1ZW5jZSk7XG5cdFx0XHRcdGlmICghbWVzaCkgcmV0dXJuIG51bGw7XG5cdFx0XHRcdG1lc2gucGF0aCA9IHBhdGg7XG5cdFx0XHRcdENvbG9yLnJnYmE4ODg4VG9Db2xvcihtZXNoLmNvbG9yLCBjb2xvcik7XG5cdFx0XHRcdG1lc2guYm9uZXMgPSB2ZXJ0aWNlcy5ib25lcztcblx0XHRcdFx0bWVzaC52ZXJ0aWNlcyA9IHZlcnRpY2VzLnZlcnRpY2VzITtcblx0XHRcdFx0bWVzaC53b3JsZFZlcnRpY2VzTGVuZ3RoID0gdmVydGljZXMubGVuZ3RoO1xuXHRcdFx0XHRtZXNoLnRyaWFuZ2xlcyA9IHRyaWFuZ2xlcztcblx0XHRcdFx0bWVzaC5yZWdpb25VVnMgPSB1dnM7XG5cdFx0XHRcdGlmIChzZXF1ZW5jZSA9PSBudWxsKSBtZXNoLnVwZGF0ZVJlZ2lvbigpO1xuXHRcdFx0XHRtZXNoLmh1bGxMZW5ndGggPSBodWxsTGVuZ3RoIDw8IDE7XG5cdFx0XHRcdG1lc2guc2VxdWVuY2UgPSBzZXF1ZW5jZTtcblx0XHRcdFx0aWYgKG5vbmVzc2VudGlhbCkge1xuXHRcdFx0XHRcdG1lc2guZWRnZXMgPSBlZGdlcztcblx0XHRcdFx0XHRtZXNoLndpZHRoID0gd2lkdGggKiBzY2FsZTtcblx0XHRcdFx0XHRtZXNoLmhlaWdodCA9IGhlaWdodCAqIHNjYWxlO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHJldHVybiBtZXNoO1xuXHRcdFx0fVxuXHRcdFx0Y2FzZSBBdHRhY2htZW50VHlwZS5MaW5rZWRNZXNoOiB7XG5cdFx0XHRcdGNvbnN0IHBhdGggPSAoZmxhZ3MgJiAxNikgIT0gMCA/IGlucHV0LnJlYWRTdHJpbmdSZWYoKSA6IG5hbWU7XG5cdFx0XHRcdGlmIChwYXRoID09IG51bGwpIHRocm93IG5ldyBFcnJvcihcIlBhdGggb2YgbGlua2VkIG1lc2ggbXVzdCBub3QgYmUgbnVsbFwiKTtcblx0XHRcdFx0Y29uc3QgY29sb3IgPSAoZmxhZ3MgJiAzMikgIT0gMCA/IGlucHV0LnJlYWRJbnQzMigpIDogMHhmZmZmZmZmZjtcblx0XHRcdFx0Y29uc3Qgc2VxdWVuY2UgPSAoZmxhZ3MgJiA2NCkgIT0gMCA/IHRoaXMucmVhZFNlcXVlbmNlKGlucHV0KSA6IG51bGw7XG5cdFx0XHRcdGNvbnN0IGluaGVyaXRUaW1lbGluZXMgPSAoZmxhZ3MgJiAxMjgpICE9IDA7XG5cdFx0XHRcdGNvbnN0IHNraW5JbmRleCA9IGlucHV0LnJlYWRJbnQodHJ1ZSk7XG5cdFx0XHRcdGNvbnN0IHBhcmVudCA9IGlucHV0LnJlYWRTdHJpbmdSZWYoKTtcblx0XHRcdFx0bGV0IHdpZHRoID0gMCwgaGVpZ2h0ID0gMDtcblx0XHRcdFx0aWYgKG5vbmVzc2VudGlhbCkge1xuXHRcdFx0XHRcdHdpZHRoID0gaW5wdXQucmVhZEZsb2F0KCk7XG5cdFx0XHRcdFx0aGVpZ2h0ID0gaW5wdXQucmVhZEZsb2F0KCk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRsZXQgbWVzaCA9IHRoaXMuYXR0YWNobWVudExvYWRlci5uZXdNZXNoQXR0YWNobWVudChza2luLCBuYW1lLCBwYXRoLCBzZXF1ZW5jZSk7XG5cdFx0XHRcdGlmICghbWVzaCkgcmV0dXJuIG51bGw7XG5cdFx0XHRcdG1lc2gucGF0aCA9IHBhdGg7XG5cdFx0XHRcdENvbG9yLnJnYmE4ODg4VG9Db2xvcihtZXNoLmNvbG9yLCBjb2xvcik7XG5cdFx0XHRcdG1lc2guc2VxdWVuY2UgPSBzZXF1ZW5jZTtcblx0XHRcdFx0aWYgKG5vbmVzc2VudGlhbCkge1xuXHRcdFx0XHRcdG1lc2gud2lkdGggPSB3aWR0aCAqIHNjYWxlO1xuXHRcdFx0XHRcdG1lc2guaGVpZ2h0ID0gaGVpZ2h0ICogc2NhbGU7XG5cdFx0XHRcdH1cblx0XHRcdFx0dGhpcy5saW5rZWRNZXNoZXMucHVzaChuZXcgTGlua2VkTWVzaChtZXNoLCBza2luSW5kZXgsIHNsb3RJbmRleCwgcGFyZW50LCBpbmhlcml0VGltZWxpbmVzKSk7XG5cdFx0XHRcdHJldHVybiBtZXNoO1xuXHRcdFx0fVxuXHRcdFx0Y2FzZSBBdHRhY2htZW50VHlwZS5QYXRoOiB7XG5cdFx0XHRcdGNvbnN0IGNsb3NlZCA9IChmbGFncyAmIDE2KSAhPSAwO1xuXHRcdFx0XHRjb25zdCBjb25zdGFudFNwZWVkID0gKGZsYWdzICYgMzIpICE9IDA7XG5cdFx0XHRcdGNvbnN0IHZlcnRpY2VzID0gdGhpcy5yZWFkVmVydGljZXMoaW5wdXQsIChmbGFncyAmIDY0KSAhPSAwKTtcblxuXHRcdFx0XHRjb25zdCBsZW5ndGhzID0gVXRpbHMubmV3QXJyYXkodmVydGljZXMubGVuZ3RoIC8gNiwgMCk7XG5cdFx0XHRcdGZvciAobGV0IGkgPSAwLCBuID0gbGVuZ3Rocy5sZW5ndGg7IGkgPCBuOyBpKyspXG5cdFx0XHRcdFx0bGVuZ3Roc1tpXSA9IGlucHV0LnJlYWRGbG9hdCgpICogc2NhbGU7XG5cdFx0XHRcdGNvbnN0IGNvbG9yID0gbm9uZXNzZW50aWFsID8gaW5wdXQucmVhZEludDMyKCkgOiAwO1xuXG5cdFx0XHRcdGNvbnN0IHBhdGggPSB0aGlzLmF0dGFjaG1lbnRMb2FkZXIubmV3UGF0aEF0dGFjaG1lbnQoc2tpbiwgbmFtZSk7XG5cdFx0XHRcdGlmICghcGF0aCkgcmV0dXJuIG51bGw7XG5cdFx0XHRcdHBhdGguY2xvc2VkID0gY2xvc2VkO1xuXHRcdFx0XHRwYXRoLmNvbnN0YW50U3BlZWQgPSBjb25zdGFudFNwZWVkO1xuXHRcdFx0XHRwYXRoLndvcmxkVmVydGljZXNMZW5ndGggPSB2ZXJ0aWNlcy5sZW5ndGg7XG5cdFx0XHRcdHBhdGgudmVydGljZXMgPSB2ZXJ0aWNlcy52ZXJ0aWNlcyE7XG5cdFx0XHRcdHBhdGguYm9uZXMgPSB2ZXJ0aWNlcy5ib25lcztcblx0XHRcdFx0cGF0aC5sZW5ndGhzID0gbGVuZ3Rocztcblx0XHRcdFx0aWYgKG5vbmVzc2VudGlhbCkgQ29sb3IucmdiYTg4ODhUb0NvbG9yKHBhdGguY29sb3IsIGNvbG9yKTtcblx0XHRcdFx0cmV0dXJuIHBhdGg7XG5cdFx0XHR9XG5cdFx0XHRjYXNlIEF0dGFjaG1lbnRUeXBlLlBvaW50OiB7XG5cdFx0XHRcdGNvbnN0IHJvdGF0aW9uID0gaW5wdXQucmVhZEZsb2F0KCk7XG5cdFx0XHRcdGNvbnN0IHggPSBpbnB1dC5yZWFkRmxvYXQoKTtcblx0XHRcdFx0Y29uc3QgeSA9IGlucHV0LnJlYWRGbG9hdCgpO1xuXHRcdFx0XHRjb25zdCBjb2xvciA9IG5vbmVzc2VudGlhbCA/IGlucHV0LnJlYWRJbnQzMigpIDogMDtcblxuXHRcdFx0XHRjb25zdCBwb2ludCA9IHRoaXMuYXR0YWNobWVudExvYWRlci5uZXdQb2ludEF0dGFjaG1lbnQoc2tpbiwgbmFtZSk7XG5cdFx0XHRcdGlmICghcG9pbnQpIHJldHVybiBudWxsO1xuXHRcdFx0XHRwb2ludC54ID0geCAqIHNjYWxlO1xuXHRcdFx0XHRwb2ludC55ID0geSAqIHNjYWxlO1xuXHRcdFx0XHRwb2ludC5yb3RhdGlvbiA9IHJvdGF0aW9uO1xuXHRcdFx0XHRpZiAobm9uZXNzZW50aWFsKSBDb2xvci5yZ2JhODg4OFRvQ29sb3IocG9pbnQuY29sb3IsIGNvbG9yKTtcblx0XHRcdFx0cmV0dXJuIHBvaW50O1xuXHRcdFx0fVxuXHRcdFx0Y2FzZSBBdHRhY2htZW50VHlwZS5DbGlwcGluZzoge1xuXHRcdFx0XHRjb25zdCBlbmRTbG90SW5kZXggPSBpbnB1dC5yZWFkSW50KHRydWUpO1xuXHRcdFx0XHRjb25zdCB2ZXJ0aWNlcyA9IHRoaXMucmVhZFZlcnRpY2VzKGlucHV0LCAoZmxhZ3MgJiAxNikgIT0gMCk7XG5cdFx0XHRcdGxldCBjb2xvciA9IG5vbmVzc2VudGlhbCA/IGlucHV0LnJlYWRJbnQzMigpIDogMDtcblxuXHRcdFx0XHRsZXQgY2xpcCA9IHRoaXMuYXR0YWNobWVudExvYWRlci5uZXdDbGlwcGluZ0F0dGFjaG1lbnQoc2tpbiwgbmFtZSk7XG5cdFx0XHRcdGlmICghY2xpcCkgcmV0dXJuIG51bGw7XG5cdFx0XHRcdGNsaXAuZW5kU2xvdCA9IHNrZWxldG9uRGF0YS5zbG90c1tlbmRTbG90SW5kZXhdO1xuXHRcdFx0XHRjbGlwLndvcmxkVmVydGljZXNMZW5ndGggPSB2ZXJ0aWNlcy5sZW5ndGg7XG5cdFx0XHRcdGNsaXAudmVydGljZXMgPSB2ZXJ0aWNlcy52ZXJ0aWNlcyE7XG5cdFx0XHRcdGNsaXAuYm9uZXMgPSB2ZXJ0aWNlcy5ib25lcztcblx0XHRcdFx0aWYgKG5vbmVzc2VudGlhbCkgQ29sb3IucmdiYTg4ODhUb0NvbG9yKGNsaXAuY29sb3IsIGNvbG9yKTtcblx0XHRcdFx0cmV0dXJuIGNsaXA7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHJldHVybiBudWxsO1xuXHR9XG5cblx0cHJpdmF0ZSByZWFkU2VxdWVuY2UgKGlucHV0OiBCaW5hcnlJbnB1dCkge1xuXHRcdGxldCBzZXF1ZW5jZSA9IG5ldyBTZXF1ZW5jZShpbnB1dC5yZWFkSW50KHRydWUpKTtcblx0XHRzZXF1ZW5jZS5zdGFydCA9IGlucHV0LnJlYWRJbnQodHJ1ZSk7XG5cdFx0c2VxdWVuY2UuZGlnaXRzID0gaW5wdXQucmVhZEludCh0cnVlKTtcblx0XHRzZXF1ZW5jZS5zZXR1cEluZGV4ID0gaW5wdXQucmVhZEludCh0cnVlKTtcblx0XHRyZXR1cm4gc2VxdWVuY2U7XG5cdH1cblxuXHRwcml2YXRlIHJlYWRWZXJ0aWNlcyAoaW5wdXQ6IEJpbmFyeUlucHV0LCB3ZWlnaHRlZDogYm9vbGVhbik6IFZlcnRpY2VzIHtcblx0XHRjb25zdCBzY2FsZSA9IHRoaXMuc2NhbGU7XG5cdFx0Y29uc3QgdmVydGV4Q291bnQgPSBpbnB1dC5yZWFkSW50KHRydWUpO1xuXHRcdGNvbnN0IHZlcnRpY2VzID0gbmV3IFZlcnRpY2VzKCk7XG5cdFx0dmVydGljZXMubGVuZ3RoID0gdmVydGV4Q291bnQgPDwgMTtcblx0XHRpZiAoIXdlaWdodGVkKSB7XG5cdFx0XHR2ZXJ0aWNlcy52ZXJ0aWNlcyA9IHRoaXMucmVhZEZsb2F0QXJyYXkoaW5wdXQsIHZlcnRpY2VzLmxlbmd0aCwgc2NhbGUpO1xuXHRcdFx0cmV0dXJuIHZlcnRpY2VzO1xuXHRcdH1cblx0XHRsZXQgd2VpZ2h0cyA9IG5ldyBBcnJheTxudW1iZXI+KCk7XG5cdFx0bGV0IGJvbmVzQXJyYXkgPSBuZXcgQXJyYXk8bnVtYmVyPigpO1xuXHRcdGZvciAobGV0IGkgPSAwOyBpIDwgdmVydGV4Q291bnQ7IGkrKykge1xuXHRcdFx0bGV0IGJvbmVDb3VudCA9IGlucHV0LnJlYWRJbnQodHJ1ZSk7XG5cdFx0XHRib25lc0FycmF5LnB1c2goYm9uZUNvdW50KTtcblx0XHRcdGZvciAobGV0IGlpID0gMDsgaWkgPCBib25lQ291bnQ7IGlpKyspIHtcblx0XHRcdFx0Ym9uZXNBcnJheS5wdXNoKGlucHV0LnJlYWRJbnQodHJ1ZSkpO1xuXHRcdFx0XHR3ZWlnaHRzLnB1c2goaW5wdXQucmVhZEZsb2F0KCkgKiBzY2FsZSk7XG5cdFx0XHRcdHdlaWdodHMucHVzaChpbnB1dC5yZWFkRmxvYXQoKSAqIHNjYWxlKTtcblx0XHRcdFx0d2VpZ2h0cy5wdXNoKGlucHV0LnJlYWRGbG9hdCgpKTtcblx0XHRcdH1cblx0XHR9XG5cdFx0dmVydGljZXMudmVydGljZXMgPSBVdGlscy50b0Zsb2F0QXJyYXkod2VpZ2h0cyk7XG5cdFx0dmVydGljZXMuYm9uZXMgPSBib25lc0FycmF5O1xuXHRcdHJldHVybiB2ZXJ0aWNlcztcblx0fVxuXG5cdHByaXZhdGUgcmVhZEZsb2F0QXJyYXkgKGlucHV0OiBCaW5hcnlJbnB1dCwgbjogbnVtYmVyLCBzY2FsZTogbnVtYmVyKTogbnVtYmVyW10ge1xuXHRcdGxldCBhcnJheSA9IG5ldyBBcnJheTxudW1iZXI+KG4pO1xuXHRcdGlmIChzY2FsZSA9PSAxKSB7XG5cdFx0XHRmb3IgKGxldCBpID0gMDsgaSA8IG47IGkrKylcblx0XHRcdFx0YXJyYXlbaV0gPSBpbnB1dC5yZWFkRmxvYXQoKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCBuOyBpKyspXG5cdFx0XHRcdGFycmF5W2ldID0gaW5wdXQucmVhZEZsb2F0KCkgKiBzY2FsZTtcblx0XHR9XG5cdFx0cmV0dXJuIGFycmF5O1xuXHR9XG5cblx0cHJpdmF0ZSByZWFkU2hvcnRBcnJheSAoaW5wdXQ6IEJpbmFyeUlucHV0LCBuOiBudW1iZXIpOiBudW1iZXJbXSB7XG5cdFx0bGV0IGFycmF5ID0gbmV3IEFycmF5PG51bWJlcj4obik7XG5cdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCBuOyBpKyspXG5cdFx0XHRhcnJheVtpXSA9IGlucHV0LnJlYWRJbnQodHJ1ZSk7XG5cdFx0cmV0dXJuIGFycmF5O1xuXHR9XG5cblx0cHJpdmF0ZSByZWFkQW5pbWF0aW9uIChpbnB1dDogQmluYXJ5SW5wdXQsIG5hbWU6IHN0cmluZywgc2tlbGV0b25EYXRhOiBTa2VsZXRvbkRhdGEpOiBBbmltYXRpb24ge1xuXHRcdGlucHV0LnJlYWRJbnQodHJ1ZSk7IC8vIE51bWJlciBvZiB0aW1lbGluZXMuXG5cdFx0bGV0IHRpbWVsaW5lcyA9IG5ldyBBcnJheTxUaW1lbGluZT4oKTtcblx0XHRsZXQgc2NhbGUgPSB0aGlzLnNjYWxlO1xuXG5cdFx0Ly8gU2xvdCB0aW1lbGluZXMuXG5cdFx0Zm9yIChsZXQgaSA9IDAsIG4gPSBpbnB1dC5yZWFkSW50KHRydWUpOyBpIDwgbjsgaSsrKSB7XG5cdFx0XHRsZXQgc2xvdEluZGV4ID0gaW5wdXQucmVhZEludCh0cnVlKTtcblx0XHRcdGZvciAobGV0IGlpID0gMCwgbm4gPSBpbnB1dC5yZWFkSW50KHRydWUpOyBpaSA8IG5uOyBpaSsrKSB7XG5cdFx0XHRcdGxldCB0aW1lbGluZVR5cGUgPSBpbnB1dC5yZWFkQnl0ZSgpO1xuXHRcdFx0XHRsZXQgZnJhbWVDb3VudCA9IGlucHV0LnJlYWRJbnQodHJ1ZSk7XG5cdFx0XHRcdGxldCBmcmFtZUxhc3QgPSBmcmFtZUNvdW50IC0gMTtcblx0XHRcdFx0c3dpdGNoICh0aW1lbGluZVR5cGUpIHtcblx0XHRcdFx0XHRjYXNlIFNMT1RfQVRUQUNITUVOVDoge1xuXHRcdFx0XHRcdFx0bGV0IHRpbWVsaW5lID0gbmV3IEF0dGFjaG1lbnRUaW1lbGluZShmcmFtZUNvdW50LCBzbG90SW5kZXgpO1xuXHRcdFx0XHRcdFx0Zm9yIChsZXQgZnJhbWUgPSAwOyBmcmFtZSA8IGZyYW1lQ291bnQ7IGZyYW1lKyspXG5cdFx0XHRcdFx0XHRcdHRpbWVsaW5lLnNldEZyYW1lKGZyYW1lLCBpbnB1dC5yZWFkRmxvYXQoKSwgaW5wdXQucmVhZFN0cmluZ1JlZigpKTtcblx0XHRcdFx0XHRcdHRpbWVsaW5lcy5wdXNoKHRpbWVsaW5lKTtcblx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRjYXNlIFNMT1RfUkdCQToge1xuXHRcdFx0XHRcdFx0bGV0IGJlemllckNvdW50ID0gaW5wdXQucmVhZEludCh0cnVlKTtcblx0XHRcdFx0XHRcdGxldCB0aW1lbGluZSA9IG5ldyBSR0JBVGltZWxpbmUoZnJhbWVDb3VudCwgYmV6aWVyQ291bnQsIHNsb3RJbmRleCk7XG5cblx0XHRcdFx0XHRcdGxldCB0aW1lID0gaW5wdXQucmVhZEZsb2F0KCk7XG5cdFx0XHRcdFx0XHRsZXQgciA9IGlucHV0LnJlYWRVbnNpZ25lZEJ5dGUoKSAvIDI1NS4wO1xuXHRcdFx0XHRcdFx0bGV0IGcgPSBpbnB1dC5yZWFkVW5zaWduZWRCeXRlKCkgLyAyNTUuMDtcblx0XHRcdFx0XHRcdGxldCBiID0gaW5wdXQucmVhZFVuc2lnbmVkQnl0ZSgpIC8gMjU1LjA7XG5cdFx0XHRcdFx0XHRsZXQgYSA9IGlucHV0LnJlYWRVbnNpZ25lZEJ5dGUoKSAvIDI1NS4wO1xuXG5cdFx0XHRcdFx0XHRmb3IgKGxldCBmcmFtZSA9IDAsIGJlemllciA9IDA7IDsgZnJhbWUrKykge1xuXHRcdFx0XHRcdFx0XHR0aW1lbGluZS5zZXRGcmFtZShmcmFtZSwgdGltZSwgciwgZywgYiwgYSk7XG5cdFx0XHRcdFx0XHRcdGlmIChmcmFtZSA9PSBmcmFtZUxhc3QpIGJyZWFrO1xuXG5cdFx0XHRcdFx0XHRcdGxldCB0aW1lMiA9IGlucHV0LnJlYWRGbG9hdCgpO1xuXHRcdFx0XHRcdFx0XHRsZXQgcjIgPSBpbnB1dC5yZWFkVW5zaWduZWRCeXRlKCkgLyAyNTUuMDtcblx0XHRcdFx0XHRcdFx0bGV0IGcyID0gaW5wdXQucmVhZFVuc2lnbmVkQnl0ZSgpIC8gMjU1LjA7XG5cdFx0XHRcdFx0XHRcdGxldCBiMiA9IGlucHV0LnJlYWRVbnNpZ25lZEJ5dGUoKSAvIDI1NS4wO1xuXHRcdFx0XHRcdFx0XHRsZXQgYTIgPSBpbnB1dC5yZWFkVW5zaWduZWRCeXRlKCkgLyAyNTUuMDtcblxuXHRcdFx0XHRcdFx0XHRzd2l0Y2ggKGlucHV0LnJlYWRCeXRlKCkpIHtcblx0XHRcdFx0XHRcdFx0XHRjYXNlIENVUlZFX1NURVBQRUQ6XG5cdFx0XHRcdFx0XHRcdFx0XHR0aW1lbGluZS5zZXRTdGVwcGVkKGZyYW1lKTtcblx0XHRcdFx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdFx0XHRcdGNhc2UgQ1VSVkVfQkVaSUVSOlxuXHRcdFx0XHRcdFx0XHRcdFx0c2V0QmV6aWVyKGlucHV0LCB0aW1lbGluZSwgYmV6aWVyKyssIGZyYW1lLCAwLCB0aW1lLCB0aW1lMiwgciwgcjIsIDEpO1xuXHRcdFx0XHRcdFx0XHRcdFx0c2V0QmV6aWVyKGlucHV0LCB0aW1lbGluZSwgYmV6aWVyKyssIGZyYW1lLCAxLCB0aW1lLCB0aW1lMiwgZywgZzIsIDEpO1xuXHRcdFx0XHRcdFx0XHRcdFx0c2V0QmV6aWVyKGlucHV0LCB0aW1lbGluZSwgYmV6aWVyKyssIGZyYW1lLCAyLCB0aW1lLCB0aW1lMiwgYiwgYjIsIDEpO1xuXHRcdFx0XHRcdFx0XHRcdFx0c2V0QmV6aWVyKGlucHV0LCB0aW1lbGluZSwgYmV6aWVyKyssIGZyYW1lLCAzLCB0aW1lLCB0aW1lMiwgYSwgYTIsIDEpO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdHRpbWUgPSB0aW1lMjtcblx0XHRcdFx0XHRcdFx0ciA9IHIyO1xuXHRcdFx0XHRcdFx0XHRnID0gZzI7XG5cdFx0XHRcdFx0XHRcdGIgPSBiMjtcblx0XHRcdFx0XHRcdFx0YSA9IGEyO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0dGltZWxpbmVzLnB1c2godGltZWxpbmUpO1xuXHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdGNhc2UgU0xPVF9SR0I6IHtcblx0XHRcdFx0XHRcdGxldCBiZXppZXJDb3VudCA9IGlucHV0LnJlYWRJbnQodHJ1ZSk7XG5cdFx0XHRcdFx0XHRsZXQgdGltZWxpbmUgPSBuZXcgUkdCVGltZWxpbmUoZnJhbWVDb3VudCwgYmV6aWVyQ291bnQsIHNsb3RJbmRleCk7XG5cblx0XHRcdFx0XHRcdGxldCB0aW1lID0gaW5wdXQucmVhZEZsb2F0KCk7XG5cdFx0XHRcdFx0XHRsZXQgciA9IGlucHV0LnJlYWRVbnNpZ25lZEJ5dGUoKSAvIDI1NS4wO1xuXHRcdFx0XHRcdFx0bGV0IGcgPSBpbnB1dC5yZWFkVW5zaWduZWRCeXRlKCkgLyAyNTUuMDtcblx0XHRcdFx0XHRcdGxldCBiID0gaW5wdXQucmVhZFVuc2lnbmVkQnl0ZSgpIC8gMjU1LjA7XG5cblx0XHRcdFx0XHRcdGZvciAobGV0IGZyYW1lID0gMCwgYmV6aWVyID0gMDsgOyBmcmFtZSsrKSB7XG5cdFx0XHRcdFx0XHRcdHRpbWVsaW5lLnNldEZyYW1lKGZyYW1lLCB0aW1lLCByLCBnLCBiKTtcblx0XHRcdFx0XHRcdFx0aWYgKGZyYW1lID09IGZyYW1lTGFzdCkgYnJlYWs7XG5cblx0XHRcdFx0XHRcdFx0bGV0IHRpbWUyID0gaW5wdXQucmVhZEZsb2F0KCk7XG5cdFx0XHRcdFx0XHRcdGxldCByMiA9IGlucHV0LnJlYWRVbnNpZ25lZEJ5dGUoKSAvIDI1NS4wO1xuXHRcdFx0XHRcdFx0XHRsZXQgZzIgPSBpbnB1dC5yZWFkVW5zaWduZWRCeXRlKCkgLyAyNTUuMDtcblx0XHRcdFx0XHRcdFx0bGV0IGIyID0gaW5wdXQucmVhZFVuc2lnbmVkQnl0ZSgpIC8gMjU1LjA7XG5cblx0XHRcdFx0XHRcdFx0c3dpdGNoIChpbnB1dC5yZWFkQnl0ZSgpKSB7XG5cdFx0XHRcdFx0XHRcdFx0Y2FzZSBDVVJWRV9TVEVQUEVEOlxuXHRcdFx0XHRcdFx0XHRcdFx0dGltZWxpbmUuc2V0U3RlcHBlZChmcmFtZSk7XG5cdFx0XHRcdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHRcdFx0XHRjYXNlIENVUlZFX0JFWklFUjpcblx0XHRcdFx0XHRcdFx0XHRcdHNldEJlemllcihpbnB1dCwgdGltZWxpbmUsIGJlemllcisrLCBmcmFtZSwgMCwgdGltZSwgdGltZTIsIHIsIHIyLCAxKTtcblx0XHRcdFx0XHRcdFx0XHRcdHNldEJlemllcihpbnB1dCwgdGltZWxpbmUsIGJlemllcisrLCBmcmFtZSwgMSwgdGltZSwgdGltZTIsIGcsIGcyLCAxKTtcblx0XHRcdFx0XHRcdFx0XHRcdHNldEJlemllcihpbnB1dCwgdGltZWxpbmUsIGJlemllcisrLCBmcmFtZSwgMiwgdGltZSwgdGltZTIsIGIsIGIyLCAxKTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHR0aW1lID0gdGltZTI7XG5cdFx0XHRcdFx0XHRcdHIgPSByMjtcblx0XHRcdFx0XHRcdFx0ZyA9IGcyO1xuXHRcdFx0XHRcdFx0XHRiID0gYjI7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR0aW1lbGluZXMucHVzaCh0aW1lbGluZSk7XG5cdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0Y2FzZSBTTE9UX1JHQkEyOiB7XG5cdFx0XHRcdFx0XHRsZXQgYmV6aWVyQ291bnQgPSBpbnB1dC5yZWFkSW50KHRydWUpO1xuXHRcdFx0XHRcdFx0bGV0IHRpbWVsaW5lID0gbmV3IFJHQkEyVGltZWxpbmUoZnJhbWVDb3VudCwgYmV6aWVyQ291bnQsIHNsb3RJbmRleCk7XG5cblx0XHRcdFx0XHRcdGxldCB0aW1lID0gaW5wdXQucmVhZEZsb2F0KCk7XG5cdFx0XHRcdFx0XHRsZXQgciA9IGlucHV0LnJlYWRVbnNpZ25lZEJ5dGUoKSAvIDI1NS4wO1xuXHRcdFx0XHRcdFx0bGV0IGcgPSBpbnB1dC5yZWFkVW5zaWduZWRCeXRlKCkgLyAyNTUuMDtcblx0XHRcdFx0XHRcdGxldCBiID0gaW5wdXQucmVhZFVuc2lnbmVkQnl0ZSgpIC8gMjU1LjA7XG5cdFx0XHRcdFx0XHRsZXQgYSA9IGlucHV0LnJlYWRVbnNpZ25lZEJ5dGUoKSAvIDI1NS4wO1xuXHRcdFx0XHRcdFx0bGV0IHIyID0gaW5wdXQucmVhZFVuc2lnbmVkQnl0ZSgpIC8gMjU1LjA7XG5cdFx0XHRcdFx0XHRsZXQgZzIgPSBpbnB1dC5yZWFkVW5zaWduZWRCeXRlKCkgLyAyNTUuMDtcblx0XHRcdFx0XHRcdGxldCBiMiA9IGlucHV0LnJlYWRVbnNpZ25lZEJ5dGUoKSAvIDI1NS4wO1xuXG5cdFx0XHRcdFx0XHRmb3IgKGxldCBmcmFtZSA9IDAsIGJlemllciA9IDA7IDsgZnJhbWUrKykge1xuXHRcdFx0XHRcdFx0XHR0aW1lbGluZS5zZXRGcmFtZShmcmFtZSwgdGltZSwgciwgZywgYiwgYSwgcjIsIGcyLCBiMik7XG5cdFx0XHRcdFx0XHRcdGlmIChmcmFtZSA9PSBmcmFtZUxhc3QpIGJyZWFrO1xuXHRcdFx0XHRcdFx0XHRsZXQgdGltZTIgPSBpbnB1dC5yZWFkRmxvYXQoKTtcblx0XHRcdFx0XHRcdFx0bGV0IG5yID0gaW5wdXQucmVhZFVuc2lnbmVkQnl0ZSgpIC8gMjU1LjA7XG5cdFx0XHRcdFx0XHRcdGxldCBuZyA9IGlucHV0LnJlYWRVbnNpZ25lZEJ5dGUoKSAvIDI1NS4wO1xuXHRcdFx0XHRcdFx0XHRsZXQgbmIgPSBpbnB1dC5yZWFkVW5zaWduZWRCeXRlKCkgLyAyNTUuMDtcblx0XHRcdFx0XHRcdFx0bGV0IG5hID0gaW5wdXQucmVhZFVuc2lnbmVkQnl0ZSgpIC8gMjU1LjA7XG5cdFx0XHRcdFx0XHRcdGxldCBucjIgPSBpbnB1dC5yZWFkVW5zaWduZWRCeXRlKCkgLyAyNTUuMDtcblx0XHRcdFx0XHRcdFx0bGV0IG5nMiA9IGlucHV0LnJlYWRVbnNpZ25lZEJ5dGUoKSAvIDI1NS4wO1xuXHRcdFx0XHRcdFx0XHRsZXQgbmIyID0gaW5wdXQucmVhZFVuc2lnbmVkQnl0ZSgpIC8gMjU1LjA7XG5cblx0XHRcdFx0XHRcdFx0c3dpdGNoIChpbnB1dC5yZWFkQnl0ZSgpKSB7XG5cdFx0XHRcdFx0XHRcdFx0Y2FzZSBDVVJWRV9TVEVQUEVEOlxuXHRcdFx0XHRcdFx0XHRcdFx0dGltZWxpbmUuc2V0U3RlcHBlZChmcmFtZSk7XG5cdFx0XHRcdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHRcdFx0XHRjYXNlIENVUlZFX0JFWklFUjpcblx0XHRcdFx0XHRcdFx0XHRcdHNldEJlemllcihpbnB1dCwgdGltZWxpbmUsIGJlemllcisrLCBmcmFtZSwgMCwgdGltZSwgdGltZTIsIHIsIG5yLCAxKTtcblx0XHRcdFx0XHRcdFx0XHRcdHNldEJlemllcihpbnB1dCwgdGltZWxpbmUsIGJlemllcisrLCBmcmFtZSwgMSwgdGltZSwgdGltZTIsIGcsIG5nLCAxKTtcblx0XHRcdFx0XHRcdFx0XHRcdHNldEJlemllcihpbnB1dCwgdGltZWxpbmUsIGJlemllcisrLCBmcmFtZSwgMiwgdGltZSwgdGltZTIsIGIsIG5iLCAxKTtcblx0XHRcdFx0XHRcdFx0XHRcdHNldEJlemllcihpbnB1dCwgdGltZWxpbmUsIGJlemllcisrLCBmcmFtZSwgMywgdGltZSwgdGltZTIsIGEsIG5hLCAxKTtcblx0XHRcdFx0XHRcdFx0XHRcdHNldEJlemllcihpbnB1dCwgdGltZWxpbmUsIGJlemllcisrLCBmcmFtZSwgNCwgdGltZSwgdGltZTIsIHIyLCBucjIsIDEpO1xuXHRcdFx0XHRcdFx0XHRcdFx0c2V0QmV6aWVyKGlucHV0LCB0aW1lbGluZSwgYmV6aWVyKyssIGZyYW1lLCA1LCB0aW1lLCB0aW1lMiwgZzIsIG5nMiwgMSk7XG5cdFx0XHRcdFx0XHRcdFx0XHRzZXRCZXppZXIoaW5wdXQsIHRpbWVsaW5lLCBiZXppZXIrKywgZnJhbWUsIDYsIHRpbWUsIHRpbWUyLCBiMiwgbmIyLCAxKTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHR0aW1lID0gdGltZTI7XG5cdFx0XHRcdFx0XHRcdHIgPSBucjtcblx0XHRcdFx0XHRcdFx0ZyA9IG5nO1xuXHRcdFx0XHRcdFx0XHRiID0gbmI7XG5cdFx0XHRcdFx0XHRcdGEgPSBuYTtcblx0XHRcdFx0XHRcdFx0cjIgPSBucjI7XG5cdFx0XHRcdFx0XHRcdGcyID0gbmcyO1xuXHRcdFx0XHRcdFx0XHRiMiA9IG5iMjtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdHRpbWVsaW5lcy5wdXNoKHRpbWVsaW5lKTtcblx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRjYXNlIFNMT1RfUkdCMjoge1xuXHRcdFx0XHRcdFx0bGV0IGJlemllckNvdW50ID0gaW5wdXQucmVhZEludCh0cnVlKTtcblx0XHRcdFx0XHRcdGxldCB0aW1lbGluZSA9IG5ldyBSR0IyVGltZWxpbmUoZnJhbWVDb3VudCwgYmV6aWVyQ291bnQsIHNsb3RJbmRleCk7XG5cblx0XHRcdFx0XHRcdGxldCB0aW1lID0gaW5wdXQucmVhZEZsb2F0KCk7XG5cdFx0XHRcdFx0XHRsZXQgciA9IGlucHV0LnJlYWRVbnNpZ25lZEJ5dGUoKSAvIDI1NS4wO1xuXHRcdFx0XHRcdFx0bGV0IGcgPSBpbnB1dC5yZWFkVW5zaWduZWRCeXRlKCkgLyAyNTUuMDtcblx0XHRcdFx0XHRcdGxldCBiID0gaW5wdXQucmVhZFVuc2lnbmVkQnl0ZSgpIC8gMjU1LjA7XG5cdFx0XHRcdFx0XHRsZXQgcjIgPSBpbnB1dC5yZWFkVW5zaWduZWRCeXRlKCkgLyAyNTUuMDtcblx0XHRcdFx0XHRcdGxldCBnMiA9IGlucHV0LnJlYWRVbnNpZ25lZEJ5dGUoKSAvIDI1NS4wO1xuXHRcdFx0XHRcdFx0bGV0IGIyID0gaW5wdXQucmVhZFVuc2lnbmVkQnl0ZSgpIC8gMjU1LjA7XG5cblx0XHRcdFx0XHRcdGZvciAobGV0IGZyYW1lID0gMCwgYmV6aWVyID0gMDsgOyBmcmFtZSsrKSB7XG5cdFx0XHRcdFx0XHRcdHRpbWVsaW5lLnNldEZyYW1lKGZyYW1lLCB0aW1lLCByLCBnLCBiLCByMiwgZzIsIGIyKTtcblx0XHRcdFx0XHRcdFx0aWYgKGZyYW1lID09IGZyYW1lTGFzdCkgYnJlYWs7XG5cdFx0XHRcdFx0XHRcdGxldCB0aW1lMiA9IGlucHV0LnJlYWRGbG9hdCgpO1xuXHRcdFx0XHRcdFx0XHRsZXQgbnIgPSBpbnB1dC5yZWFkVW5zaWduZWRCeXRlKCkgLyAyNTUuMDtcblx0XHRcdFx0XHRcdFx0bGV0IG5nID0gaW5wdXQucmVhZFVuc2lnbmVkQnl0ZSgpIC8gMjU1LjA7XG5cdFx0XHRcdFx0XHRcdGxldCBuYiA9IGlucHV0LnJlYWRVbnNpZ25lZEJ5dGUoKSAvIDI1NS4wO1xuXHRcdFx0XHRcdFx0XHRsZXQgbnIyID0gaW5wdXQucmVhZFVuc2lnbmVkQnl0ZSgpIC8gMjU1LjA7XG5cdFx0XHRcdFx0XHRcdGxldCBuZzIgPSBpbnB1dC5yZWFkVW5zaWduZWRCeXRlKCkgLyAyNTUuMDtcblx0XHRcdFx0XHRcdFx0bGV0IG5iMiA9IGlucHV0LnJlYWRVbnNpZ25lZEJ5dGUoKSAvIDI1NS4wO1xuXG5cdFx0XHRcdFx0XHRcdHN3aXRjaCAoaW5wdXQucmVhZEJ5dGUoKSkge1xuXHRcdFx0XHRcdFx0XHRcdGNhc2UgQ1VSVkVfU1RFUFBFRDpcblx0XHRcdFx0XHRcdFx0XHRcdHRpbWVsaW5lLnNldFN0ZXBwZWQoZnJhbWUpO1xuXHRcdFx0XHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0XHRcdFx0Y2FzZSBDVVJWRV9CRVpJRVI6XG5cdFx0XHRcdFx0XHRcdFx0XHRzZXRCZXppZXIoaW5wdXQsIHRpbWVsaW5lLCBiZXppZXIrKywgZnJhbWUsIDAsIHRpbWUsIHRpbWUyLCByLCBuciwgMSk7XG5cdFx0XHRcdFx0XHRcdFx0XHRzZXRCZXppZXIoaW5wdXQsIHRpbWVsaW5lLCBiZXppZXIrKywgZnJhbWUsIDEsIHRpbWUsIHRpbWUyLCBnLCBuZywgMSk7XG5cdFx0XHRcdFx0XHRcdFx0XHRzZXRCZXppZXIoaW5wdXQsIHRpbWVsaW5lLCBiZXppZXIrKywgZnJhbWUsIDIsIHRpbWUsIHRpbWUyLCBiLCBuYiwgMSk7XG5cdFx0XHRcdFx0XHRcdFx0XHRzZXRCZXppZXIoaW5wdXQsIHRpbWVsaW5lLCBiZXppZXIrKywgZnJhbWUsIDMsIHRpbWUsIHRpbWUyLCByMiwgbnIyLCAxKTtcblx0XHRcdFx0XHRcdFx0XHRcdHNldEJlemllcihpbnB1dCwgdGltZWxpbmUsIGJlemllcisrLCBmcmFtZSwgNCwgdGltZSwgdGltZTIsIGcyLCBuZzIsIDEpO1xuXHRcdFx0XHRcdFx0XHRcdFx0c2V0QmV6aWVyKGlucHV0LCB0aW1lbGluZSwgYmV6aWVyKyssIGZyYW1lLCA1LCB0aW1lLCB0aW1lMiwgYjIsIG5iMiwgMSk7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0dGltZSA9IHRpbWUyO1xuXHRcdFx0XHRcdFx0XHRyID0gbnI7XG5cdFx0XHRcdFx0XHRcdGcgPSBuZztcblx0XHRcdFx0XHRcdFx0YiA9IG5iO1xuXHRcdFx0XHRcdFx0XHRyMiA9IG5yMjtcblx0XHRcdFx0XHRcdFx0ZzIgPSBuZzI7XG5cdFx0XHRcdFx0XHRcdGIyID0gbmIyO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0dGltZWxpbmVzLnB1c2godGltZWxpbmUpO1xuXHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdGNhc2UgU0xPVF9BTFBIQToge1xuXHRcdFx0XHRcdFx0bGV0IHRpbWVsaW5lID0gbmV3IEFscGhhVGltZWxpbmUoZnJhbWVDb3VudCwgaW5wdXQucmVhZEludCh0cnVlKSwgc2xvdEluZGV4KTtcblx0XHRcdFx0XHRcdGxldCB0aW1lID0gaW5wdXQucmVhZEZsb2F0KCksIGEgPSBpbnB1dC5yZWFkVW5zaWduZWRCeXRlKCkgLyAyNTU7XG5cdFx0XHRcdFx0XHRmb3IgKGxldCBmcmFtZSA9IDAsIGJlemllciA9IDA7IDsgZnJhbWUrKykge1xuXHRcdFx0XHRcdFx0XHR0aW1lbGluZS5zZXRGcmFtZShmcmFtZSwgdGltZSwgYSk7XG5cdFx0XHRcdFx0XHRcdGlmIChmcmFtZSA9PSBmcmFtZUxhc3QpIGJyZWFrO1xuXHRcdFx0XHRcdFx0XHRsZXQgdGltZTIgPSBpbnB1dC5yZWFkRmxvYXQoKTtcblx0XHRcdFx0XHRcdFx0bGV0IGEyID0gaW5wdXQucmVhZFVuc2lnbmVkQnl0ZSgpIC8gMjU1O1xuXHRcdFx0XHRcdFx0XHRzd2l0Y2ggKGlucHV0LnJlYWRCeXRlKCkpIHtcblx0XHRcdFx0XHRcdFx0XHRjYXNlIENVUlZFX1NURVBQRUQ6XG5cdFx0XHRcdFx0XHRcdFx0XHR0aW1lbGluZS5zZXRTdGVwcGVkKGZyYW1lKTtcblx0XHRcdFx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdFx0XHRcdGNhc2UgQ1VSVkVfQkVaSUVSOlxuXHRcdFx0XHRcdFx0XHRcdFx0c2V0QmV6aWVyKGlucHV0LCB0aW1lbGluZSwgYmV6aWVyKyssIGZyYW1lLCAwLCB0aW1lLCB0aW1lMiwgYSwgYTIsIDEpO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdHRpbWUgPSB0aW1lMjtcblx0XHRcdFx0XHRcdFx0YSA9IGEyO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0dGltZWxpbmVzLnB1c2godGltZWxpbmUpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblxuXHRcdC8vIEJvbmUgdGltZWxpbmVzLlxuXHRcdGZvciAobGV0IGkgPSAwLCBuID0gaW5wdXQucmVhZEludCh0cnVlKTsgaSA8IG47IGkrKykge1xuXHRcdFx0bGV0IGJvbmVJbmRleCA9IGlucHV0LnJlYWRJbnQodHJ1ZSk7XG5cdFx0XHRmb3IgKGxldCBpaSA9IDAsIG5uID0gaW5wdXQucmVhZEludCh0cnVlKTsgaWkgPCBubjsgaWkrKykge1xuXHRcdFx0XHRsZXQgdHlwZSA9IGlucHV0LnJlYWRCeXRlKCksIGZyYW1lQ291bnQgPSBpbnB1dC5yZWFkSW50KHRydWUpO1xuXHRcdFx0XHRpZiAodHlwZSA9PSBCT05FX0lOSEVSSVQpIHtcblx0XHRcdFx0XHRsZXQgdGltZWxpbmUgPSBuZXcgSW5oZXJpdFRpbWVsaW5lKGZyYW1lQ291bnQsIGJvbmVJbmRleCk7XG5cdFx0XHRcdFx0Zm9yIChsZXQgZnJhbWUgPSAwOyBmcmFtZSA8IGZyYW1lQ291bnQ7IGZyYW1lKyspIHtcblx0XHRcdFx0XHRcdHRpbWVsaW5lLnNldEZyYW1lKGZyYW1lLCBpbnB1dC5yZWFkRmxvYXQoKSwgaW5wdXQucmVhZEJ5dGUoKSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdHRpbWVsaW5lcy5wdXNoKHRpbWVsaW5lKTtcblx0XHRcdFx0XHRjb250aW51ZTtcblx0XHRcdFx0fVxuXHRcdFx0XHRsZXQgYmV6aWVyQ291bnQgPSBpbnB1dC5yZWFkSW50KHRydWUpO1xuXHRcdFx0XHRzd2l0Y2ggKHR5cGUpIHtcblx0XHRcdFx0XHRjYXNlIEJPTkVfUk9UQVRFOlxuXHRcdFx0XHRcdFx0dGltZWxpbmVzLnB1c2gocmVhZFRpbWVsaW5lMShpbnB1dCwgbmV3IFJvdGF0ZVRpbWVsaW5lKGZyYW1lQ291bnQsIGJlemllckNvdW50LCBib25lSW5kZXgpLCAxKSk7XG5cdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHRjYXNlIEJPTkVfVFJBTlNMQVRFOlxuXHRcdFx0XHRcdFx0dGltZWxpbmVzLnB1c2gocmVhZFRpbWVsaW5lMihpbnB1dCwgbmV3IFRyYW5zbGF0ZVRpbWVsaW5lKGZyYW1lQ291bnQsIGJlemllckNvdW50LCBib25lSW5kZXgpLCBzY2FsZSkpO1xuXHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0Y2FzZSBCT05FX1RSQU5TTEFURVg6XG5cdFx0XHRcdFx0XHR0aW1lbGluZXMucHVzaChyZWFkVGltZWxpbmUxKGlucHV0LCBuZXcgVHJhbnNsYXRlWFRpbWVsaW5lKGZyYW1lQ291bnQsIGJlemllckNvdW50LCBib25lSW5kZXgpLCBzY2FsZSkpO1xuXHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0Y2FzZSBCT05FX1RSQU5TTEFURVk6XG5cdFx0XHRcdFx0XHR0aW1lbGluZXMucHVzaChyZWFkVGltZWxpbmUxKGlucHV0LCBuZXcgVHJhbnNsYXRlWVRpbWVsaW5lKGZyYW1lQ291bnQsIGJlemllckNvdW50LCBib25lSW5kZXgpLCBzY2FsZSkpO1xuXHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0Y2FzZSBCT05FX1NDQUxFOlxuXHRcdFx0XHRcdFx0dGltZWxpbmVzLnB1c2gocmVhZFRpbWVsaW5lMihpbnB1dCwgbmV3IFNjYWxlVGltZWxpbmUoZnJhbWVDb3VudCwgYmV6aWVyQ291bnQsIGJvbmVJbmRleCksIDEpKTtcblx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdGNhc2UgQk9ORV9TQ0FMRVg6XG5cdFx0XHRcdFx0XHR0aW1lbGluZXMucHVzaChyZWFkVGltZWxpbmUxKGlucHV0LCBuZXcgU2NhbGVYVGltZWxpbmUoZnJhbWVDb3VudCwgYmV6aWVyQ291bnQsIGJvbmVJbmRleCksIDEpKTtcblx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdGNhc2UgQk9ORV9TQ0FMRVk6XG5cdFx0XHRcdFx0XHR0aW1lbGluZXMucHVzaChyZWFkVGltZWxpbmUxKGlucHV0LCBuZXcgU2NhbGVZVGltZWxpbmUoZnJhbWVDb3VudCwgYmV6aWVyQ291bnQsIGJvbmVJbmRleCksIDEpKTtcblx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdGNhc2UgQk9ORV9TSEVBUjpcblx0XHRcdFx0XHRcdHRpbWVsaW5lcy5wdXNoKHJlYWRUaW1lbGluZTIoaW5wdXQsIG5ldyBTaGVhclRpbWVsaW5lKGZyYW1lQ291bnQsIGJlemllckNvdW50LCBib25lSW5kZXgpLCAxKSk7XG5cdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHRjYXNlIEJPTkVfU0hFQVJYOlxuXHRcdFx0XHRcdFx0dGltZWxpbmVzLnB1c2gocmVhZFRpbWVsaW5lMShpbnB1dCwgbmV3IFNoZWFyWFRpbWVsaW5lKGZyYW1lQ291bnQsIGJlemllckNvdW50LCBib25lSW5kZXgpLCAxKSk7XG5cdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHRjYXNlIEJPTkVfU0hFQVJZOlxuXHRcdFx0XHRcdFx0dGltZWxpbmVzLnB1c2gocmVhZFRpbWVsaW5lMShpbnB1dCwgbmV3IFNoZWFyWVRpbWVsaW5lKGZyYW1lQ291bnQsIGJlemllckNvdW50LCBib25lSW5kZXgpLCAxKSk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cblx0XHQvLyBJSyBjb25zdHJhaW50IHRpbWVsaW5lcy5cblx0XHRmb3IgKGxldCBpID0gMCwgbiA9IGlucHV0LnJlYWRJbnQodHJ1ZSk7IGkgPCBuOyBpKyspIHtcblx0XHRcdGxldCBpbmRleCA9IGlucHV0LnJlYWRJbnQodHJ1ZSksIGZyYW1lQ291bnQgPSBpbnB1dC5yZWFkSW50KHRydWUpLCBmcmFtZUxhc3QgPSBmcmFtZUNvdW50IC0gMTtcblx0XHRcdGxldCB0aW1lbGluZSA9IG5ldyBJa0NvbnN0cmFpbnRUaW1lbGluZShmcmFtZUNvdW50LCBpbnB1dC5yZWFkSW50KHRydWUpLCBpbmRleCk7XG5cdFx0XHRsZXQgZmxhZ3MgPSBpbnB1dC5yZWFkQnl0ZSgpO1xuXHRcdFx0bGV0IHRpbWUgPSBpbnB1dC5yZWFkRmxvYXQoKSwgbWl4ID0gKGZsYWdzICYgMSkgIT0gMCA/ICgoZmxhZ3MgJiAyKSAhPSAwID8gaW5wdXQucmVhZEZsb2F0KCkgOiAxKSA6IDA7XG5cdFx0XHRsZXQgc29mdG5lc3MgPSAoZmxhZ3MgJiA0KSAhPSAwID8gaW5wdXQucmVhZEZsb2F0KCkgKiBzY2FsZSA6IDA7XG5cdFx0XHRmb3IgKGxldCBmcmFtZSA9IDAsIGJlemllciA9IDA7IDsgZnJhbWUrKykge1xuXHRcdFx0XHR0aW1lbGluZS5zZXRGcmFtZShmcmFtZSwgdGltZSwgbWl4LCBzb2Z0bmVzcywgKGZsYWdzICYgOCkgIT0gMCA/IDEgOiAtMSwgKGZsYWdzICYgMTYpICE9IDAsIChmbGFncyAmIDMyKSAhPSAwKTtcblx0XHRcdFx0aWYgKGZyYW1lID09IGZyYW1lTGFzdCkgYnJlYWs7XG5cdFx0XHRcdGZsYWdzID0gaW5wdXQucmVhZEJ5dGUoKTtcblx0XHRcdFx0Y29uc3QgdGltZTIgPSBpbnB1dC5yZWFkRmxvYXQoKSwgbWl4MiA9IChmbGFncyAmIDEpICE9IDAgPyAoKGZsYWdzICYgMikgIT0gMCA/IGlucHV0LnJlYWRGbG9hdCgpIDogMSkgOiAwO1xuXHRcdFx0XHRjb25zdCBzb2Z0bmVzczIgPSAoZmxhZ3MgJiA0KSAhPSAwID8gaW5wdXQucmVhZEZsb2F0KCkgKiBzY2FsZSA6IDA7XG5cdFx0XHRcdGlmICgoZmxhZ3MgJiA2NCkgIT0gMCkge1xuXHRcdFx0XHRcdHRpbWVsaW5lLnNldFN0ZXBwZWQoZnJhbWUpO1xuXHRcdFx0XHR9IGVsc2UgaWYgKChmbGFncyAmIDEyOCkgIT0gMCkge1xuXHRcdFx0XHRcdHNldEJlemllcihpbnB1dCwgdGltZWxpbmUsIGJlemllcisrLCBmcmFtZSwgMCwgdGltZSwgdGltZTIsIG1peCwgbWl4MiwgMSk7XG5cdFx0XHRcdFx0c2V0QmV6aWVyKGlucHV0LCB0aW1lbGluZSwgYmV6aWVyKyssIGZyYW1lLCAxLCB0aW1lLCB0aW1lMiwgc29mdG5lc3MsIHNvZnRuZXNzMiwgc2NhbGUpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHRpbWUgPSB0aW1lMjtcblx0XHRcdFx0bWl4ID0gbWl4Mjtcblx0XHRcdFx0c29mdG5lc3MgPSBzb2Z0bmVzczI7XG5cdFx0XHR9XG5cdFx0XHR0aW1lbGluZXMucHVzaCh0aW1lbGluZSk7XG5cdFx0fVxuXG5cdFx0Ly8gVHJhbnNmb3JtIGNvbnN0cmFpbnQgdGltZWxpbmVzLlxuXHRcdGZvciAobGV0IGkgPSAwLCBuID0gaW5wdXQucmVhZEludCh0cnVlKTsgaSA8IG47IGkrKykge1xuXHRcdFx0bGV0IGluZGV4ID0gaW5wdXQucmVhZEludCh0cnVlKSwgZnJhbWVDb3VudCA9IGlucHV0LnJlYWRJbnQodHJ1ZSksIGZyYW1lTGFzdCA9IGZyYW1lQ291bnQgLSAxO1xuXHRcdFx0bGV0IHRpbWVsaW5lID0gbmV3IFRyYW5zZm9ybUNvbnN0cmFpbnRUaW1lbGluZShmcmFtZUNvdW50LCBpbnB1dC5yZWFkSW50KHRydWUpLCBpbmRleCk7XG5cdFx0XHRsZXQgdGltZSA9IGlucHV0LnJlYWRGbG9hdCgpLCBtaXhSb3RhdGUgPSBpbnB1dC5yZWFkRmxvYXQoKSwgbWl4WCA9IGlucHV0LnJlYWRGbG9hdCgpLCBtaXhZID0gaW5wdXQucmVhZEZsb2F0KCksXG5cdFx0XHRcdG1peFNjYWxlWCA9IGlucHV0LnJlYWRGbG9hdCgpLCBtaXhTY2FsZVkgPSBpbnB1dC5yZWFkRmxvYXQoKSwgbWl4U2hlYXJZID0gaW5wdXQucmVhZEZsb2F0KCk7XG5cdFx0XHRmb3IgKGxldCBmcmFtZSA9IDAsIGJlemllciA9IDA7IDsgZnJhbWUrKykge1xuXHRcdFx0XHR0aW1lbGluZS5zZXRGcmFtZShmcmFtZSwgdGltZSwgbWl4Um90YXRlLCBtaXhYLCBtaXhZLCBtaXhTY2FsZVgsIG1peFNjYWxlWSwgbWl4U2hlYXJZKTtcblx0XHRcdFx0aWYgKGZyYW1lID09IGZyYW1lTGFzdCkgYnJlYWs7XG5cdFx0XHRcdGxldCB0aW1lMiA9IGlucHV0LnJlYWRGbG9hdCgpLCBtaXhSb3RhdGUyID0gaW5wdXQucmVhZEZsb2F0KCksIG1peFgyID0gaW5wdXQucmVhZEZsb2F0KCksIG1peFkyID0gaW5wdXQucmVhZEZsb2F0KCksXG5cdFx0XHRcdFx0bWl4U2NhbGVYMiA9IGlucHV0LnJlYWRGbG9hdCgpLCBtaXhTY2FsZVkyID0gaW5wdXQucmVhZEZsb2F0KCksIG1peFNoZWFyWTIgPSBpbnB1dC5yZWFkRmxvYXQoKTtcblx0XHRcdFx0c3dpdGNoIChpbnB1dC5yZWFkQnl0ZSgpKSB7XG5cdFx0XHRcdFx0Y2FzZSBDVVJWRV9TVEVQUEVEOlxuXHRcdFx0XHRcdFx0dGltZWxpbmUuc2V0U3RlcHBlZChmcmFtZSk7XG5cdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHRjYXNlIENVUlZFX0JFWklFUjpcblx0XHRcdFx0XHRcdHNldEJlemllcihpbnB1dCwgdGltZWxpbmUsIGJlemllcisrLCBmcmFtZSwgMCwgdGltZSwgdGltZTIsIG1peFJvdGF0ZSwgbWl4Um90YXRlMiwgMSk7XG5cdFx0XHRcdFx0XHRzZXRCZXppZXIoaW5wdXQsIHRpbWVsaW5lLCBiZXppZXIrKywgZnJhbWUsIDEsIHRpbWUsIHRpbWUyLCBtaXhYLCBtaXhYMiwgMSk7XG5cdFx0XHRcdFx0XHRzZXRCZXppZXIoaW5wdXQsIHRpbWVsaW5lLCBiZXppZXIrKywgZnJhbWUsIDIsIHRpbWUsIHRpbWUyLCBtaXhZLCBtaXhZMiwgMSk7XG5cdFx0XHRcdFx0XHRzZXRCZXppZXIoaW5wdXQsIHRpbWVsaW5lLCBiZXppZXIrKywgZnJhbWUsIDMsIHRpbWUsIHRpbWUyLCBtaXhTY2FsZVgsIG1peFNjYWxlWDIsIDEpO1xuXHRcdFx0XHRcdFx0c2V0QmV6aWVyKGlucHV0LCB0aW1lbGluZSwgYmV6aWVyKyssIGZyYW1lLCA0LCB0aW1lLCB0aW1lMiwgbWl4U2NhbGVZLCBtaXhTY2FsZVkyLCAxKTtcblx0XHRcdFx0XHRcdHNldEJlemllcihpbnB1dCwgdGltZWxpbmUsIGJlemllcisrLCBmcmFtZSwgNSwgdGltZSwgdGltZTIsIG1peFNoZWFyWSwgbWl4U2hlYXJZMiwgMSk7XG5cdFx0XHRcdH1cblx0XHRcdFx0dGltZSA9IHRpbWUyO1xuXHRcdFx0XHRtaXhSb3RhdGUgPSBtaXhSb3RhdGUyO1xuXHRcdFx0XHRtaXhYID0gbWl4WDI7XG5cdFx0XHRcdG1peFkgPSBtaXhZMjtcblx0XHRcdFx0bWl4U2NhbGVYID0gbWl4U2NhbGVYMjtcblx0XHRcdFx0bWl4U2NhbGVZID0gbWl4U2NhbGVZMjtcblx0XHRcdFx0bWl4U2hlYXJZID0gbWl4U2hlYXJZMjtcblx0XHRcdH1cblx0XHRcdHRpbWVsaW5lcy5wdXNoKHRpbWVsaW5lKTtcblx0XHR9XG5cblx0XHQvLyBQYXRoIGNvbnN0cmFpbnQgdGltZWxpbmVzLlxuXHRcdGZvciAobGV0IGkgPSAwLCBuID0gaW5wdXQucmVhZEludCh0cnVlKTsgaSA8IG47IGkrKykge1xuXHRcdFx0bGV0IGluZGV4ID0gaW5wdXQucmVhZEludCh0cnVlKTtcblx0XHRcdGxldCBkYXRhID0gc2tlbGV0b25EYXRhLnBhdGhDb25zdHJhaW50c1tpbmRleF07XG5cdFx0XHRmb3IgKGxldCBpaSA9IDAsIG5uID0gaW5wdXQucmVhZEludCh0cnVlKTsgaWkgPCBubjsgaWkrKykge1xuXHRcdFx0XHRjb25zdCB0eXBlID0gaW5wdXQucmVhZEJ5dGUoKSwgZnJhbWVDb3VudCA9IGlucHV0LnJlYWRJbnQodHJ1ZSksIGJlemllckNvdW50ID0gaW5wdXQucmVhZEludCh0cnVlKTtcblx0XHRcdFx0c3dpdGNoICh0eXBlKSB7XG5cdFx0XHRcdFx0Y2FzZSBQQVRIX1BPU0lUSU9OOlxuXHRcdFx0XHRcdFx0dGltZWxpbmVzXG5cdFx0XHRcdFx0XHRcdC5wdXNoKHJlYWRUaW1lbGluZTEoaW5wdXQsIG5ldyBQYXRoQ29uc3RyYWludFBvc2l0aW9uVGltZWxpbmUoZnJhbWVDb3VudCwgYmV6aWVyQ291bnQsIGluZGV4KSxcblx0XHRcdFx0XHRcdFx0XHRkYXRhLnBvc2l0aW9uTW9kZSA9PSBQb3NpdGlvbk1vZGUuRml4ZWQgPyBzY2FsZSA6IDEpKTtcblx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdGNhc2UgUEFUSF9TUEFDSU5HOlxuXHRcdFx0XHRcdFx0dGltZWxpbmVzXG5cdFx0XHRcdFx0XHRcdC5wdXNoKHJlYWRUaW1lbGluZTEoaW5wdXQsIG5ldyBQYXRoQ29uc3RyYWludFNwYWNpbmdUaW1lbGluZShmcmFtZUNvdW50LCBiZXppZXJDb3VudCwgaW5kZXgpLFxuXHRcdFx0XHRcdFx0XHRcdGRhdGEuc3BhY2luZ01vZGUgPT0gU3BhY2luZ01vZGUuTGVuZ3RoIHx8IGRhdGEuc3BhY2luZ01vZGUgPT0gU3BhY2luZ01vZGUuRml4ZWQgPyBzY2FsZSA6IDEpKTtcblx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdGNhc2UgUEFUSF9NSVg6XG5cdFx0XHRcdFx0XHRsZXQgdGltZWxpbmUgPSBuZXcgUGF0aENvbnN0cmFpbnRNaXhUaW1lbGluZShmcmFtZUNvdW50LCBiZXppZXJDb3VudCwgaW5kZXgpO1xuXHRcdFx0XHRcdFx0bGV0IHRpbWUgPSBpbnB1dC5yZWFkRmxvYXQoKSwgbWl4Um90YXRlID0gaW5wdXQucmVhZEZsb2F0KCksIG1peFggPSBpbnB1dC5yZWFkRmxvYXQoKSwgbWl4WSA9IGlucHV0LnJlYWRGbG9hdCgpO1xuXHRcdFx0XHRcdFx0Zm9yIChsZXQgZnJhbWUgPSAwLCBiZXppZXIgPSAwLCBmcmFtZUxhc3QgPSB0aW1lbGluZS5nZXRGcmFtZUNvdW50KCkgLSAxOyA7IGZyYW1lKyspIHtcblx0XHRcdFx0XHRcdFx0dGltZWxpbmUuc2V0RnJhbWUoZnJhbWUsIHRpbWUsIG1peFJvdGF0ZSwgbWl4WCwgbWl4WSk7XG5cdFx0XHRcdFx0XHRcdGlmIChmcmFtZSA9PSBmcmFtZUxhc3QpIGJyZWFrO1xuXHRcdFx0XHRcdFx0XHRsZXQgdGltZTIgPSBpbnB1dC5yZWFkRmxvYXQoKSwgbWl4Um90YXRlMiA9IGlucHV0LnJlYWRGbG9hdCgpLCBtaXhYMiA9IGlucHV0LnJlYWRGbG9hdCgpLFxuXHRcdFx0XHRcdFx0XHRcdG1peFkyID0gaW5wdXQucmVhZEZsb2F0KCk7XG5cdFx0XHRcdFx0XHRcdHN3aXRjaCAoaW5wdXQucmVhZEJ5dGUoKSkge1xuXHRcdFx0XHRcdFx0XHRcdGNhc2UgQ1VSVkVfU1RFUFBFRDpcblx0XHRcdFx0XHRcdFx0XHRcdHRpbWVsaW5lLnNldFN0ZXBwZWQoZnJhbWUpO1xuXHRcdFx0XHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0XHRcdFx0Y2FzZSBDVVJWRV9CRVpJRVI6XG5cdFx0XHRcdFx0XHRcdFx0XHRzZXRCZXppZXIoaW5wdXQsIHRpbWVsaW5lLCBiZXppZXIrKywgZnJhbWUsIDAsIHRpbWUsIHRpbWUyLCBtaXhSb3RhdGUsIG1peFJvdGF0ZTIsIDEpO1xuXHRcdFx0XHRcdFx0XHRcdFx0c2V0QmV6aWVyKGlucHV0LCB0aW1lbGluZSwgYmV6aWVyKyssIGZyYW1lLCAxLCB0aW1lLCB0aW1lMiwgbWl4WCwgbWl4WDIsIDEpO1xuXHRcdFx0XHRcdFx0XHRcdFx0c2V0QmV6aWVyKGlucHV0LCB0aW1lbGluZSwgYmV6aWVyKyssIGZyYW1lLCAyLCB0aW1lLCB0aW1lMiwgbWl4WSwgbWl4WTIsIDEpO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdHRpbWUgPSB0aW1lMjtcblx0XHRcdFx0XHRcdFx0bWl4Um90YXRlID0gbWl4Um90YXRlMjtcblx0XHRcdFx0XHRcdFx0bWl4WCA9IG1peFgyO1xuXHRcdFx0XHRcdFx0XHRtaXhZID0gbWl4WTI7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR0aW1lbGluZXMucHVzaCh0aW1lbGluZSk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cblx0XHQvLyBQaHlzaWNzIHRpbWVsaW5lcy5cblx0XHRmb3IgKGxldCBpID0gMCwgbiA9IGlucHV0LnJlYWRJbnQodHJ1ZSk7IGkgPCBuOyBpKyspIHtcblx0XHRcdGNvbnN0IGluZGV4ID0gaW5wdXQucmVhZEludCh0cnVlKSAtIDE7XG5cdFx0XHRmb3IgKGxldCBpaSA9IDAsIG5uID0gaW5wdXQucmVhZEludCh0cnVlKTsgaWkgPCBubjsgaWkrKykge1xuXHRcdFx0XHRjb25zdCB0eXBlID0gaW5wdXQucmVhZEJ5dGUoKSwgZnJhbWVDb3VudCA9IGlucHV0LnJlYWRJbnQodHJ1ZSk7XG5cdFx0XHRcdGlmICh0eXBlID09IFBIWVNJQ1NfUkVTRVQpIHtcblx0XHRcdFx0XHRjb25zdCB0aW1lbGluZSA9IG5ldyBQaHlzaWNzQ29uc3RyYWludFJlc2V0VGltZWxpbmUoZnJhbWVDb3VudCwgaW5kZXgpO1xuXHRcdFx0XHRcdGZvciAobGV0IGZyYW1lID0gMDsgZnJhbWUgPCBmcmFtZUNvdW50OyBmcmFtZSsrKVxuXHRcdFx0XHRcdFx0dGltZWxpbmUuc2V0RnJhbWUoZnJhbWUsIGlucHV0LnJlYWRGbG9hdCgpKTtcblx0XHRcdFx0XHR0aW1lbGluZXMucHVzaCh0aW1lbGluZSk7XG5cdFx0XHRcdFx0Y29udGludWU7XG5cdFx0XHRcdH1cblx0XHRcdFx0Y29uc3QgYmV6aWVyQ291bnQgPSBpbnB1dC5yZWFkSW50KHRydWUpO1xuXHRcdFx0XHRzd2l0Y2ggKHR5cGUpIHtcblx0XHRcdFx0XHRjYXNlIFBIWVNJQ1NfSU5FUlRJQTpcblx0XHRcdFx0XHRcdHRpbWVsaW5lcy5wdXNoKHJlYWRUaW1lbGluZTEoaW5wdXQsIG5ldyBQaHlzaWNzQ29uc3RyYWludEluZXJ0aWFUaW1lbGluZShmcmFtZUNvdW50LCBiZXppZXJDb3VudCwgaW5kZXgpLCAxKSk7XG5cdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHRjYXNlIFBIWVNJQ1NfU1RSRU5HVEg6XG5cdFx0XHRcdFx0XHR0aW1lbGluZXMucHVzaChyZWFkVGltZWxpbmUxKGlucHV0LCBuZXcgUGh5c2ljc0NvbnN0cmFpbnRTdHJlbmd0aFRpbWVsaW5lKGZyYW1lQ291bnQsIGJlemllckNvdW50LCBpbmRleCksIDEpKTtcblx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdGNhc2UgUEhZU0lDU19EQU1QSU5HOlxuXHRcdFx0XHRcdFx0dGltZWxpbmVzLnB1c2gocmVhZFRpbWVsaW5lMShpbnB1dCwgbmV3IFBoeXNpY3NDb25zdHJhaW50RGFtcGluZ1RpbWVsaW5lKGZyYW1lQ291bnQsIGJlemllckNvdW50LCBpbmRleCksIDEpKTtcblx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdGNhc2UgUEhZU0lDU19NQVNTOlxuXHRcdFx0XHRcdFx0dGltZWxpbmVzLnB1c2gocmVhZFRpbWVsaW5lMShpbnB1dCwgbmV3IFBoeXNpY3NDb25zdHJhaW50TWFzc1RpbWVsaW5lKGZyYW1lQ291bnQsIGJlemllckNvdW50LCBpbmRleCksIDEpKTtcblx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdGNhc2UgUEhZU0lDU19XSU5EOlxuXHRcdFx0XHRcdFx0dGltZWxpbmVzLnB1c2gocmVhZFRpbWVsaW5lMShpbnB1dCwgbmV3IFBoeXNpY3NDb25zdHJhaW50V2luZFRpbWVsaW5lKGZyYW1lQ291bnQsIGJlemllckNvdW50LCBpbmRleCksIDEpKTtcblx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdGNhc2UgUEhZU0lDU19HUkFWSVRZOlxuXHRcdFx0XHRcdFx0dGltZWxpbmVzLnB1c2gocmVhZFRpbWVsaW5lMShpbnB1dCwgbmV3IFBoeXNpY3NDb25zdHJhaW50R3Jhdml0eVRpbWVsaW5lKGZyYW1lQ291bnQsIGJlemllckNvdW50LCBpbmRleCksIDEpKTtcblx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdGNhc2UgUEhZU0lDU19NSVg6XG5cdFx0XHRcdFx0XHR0aW1lbGluZXMucHVzaChyZWFkVGltZWxpbmUxKGlucHV0LCBuZXcgUGh5c2ljc0NvbnN0cmFpbnRNaXhUaW1lbGluZShmcmFtZUNvdW50LCBiZXppZXJDb3VudCwgaW5kZXgpLCAxKSk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cblx0XHQvLyBEZWZvcm0gdGltZWxpbmVzLlxuXHRcdGZvciAobGV0IGkgPSAwLCBuID0gaW5wdXQucmVhZEludCh0cnVlKTsgaSA8IG47IGkrKykge1xuXHRcdFx0bGV0IHNraW4gPSBza2VsZXRvbkRhdGEuc2tpbnNbaW5wdXQucmVhZEludCh0cnVlKV07XG5cdFx0XHRmb3IgKGxldCBpaSA9IDAsIG5uID0gaW5wdXQucmVhZEludCh0cnVlKTsgaWkgPCBubjsgaWkrKykge1xuXHRcdFx0XHRsZXQgc2xvdEluZGV4ID0gaW5wdXQucmVhZEludCh0cnVlKTtcblx0XHRcdFx0Zm9yIChsZXQgaWlpID0gMCwgbm5uID0gaW5wdXQucmVhZEludCh0cnVlKTsgaWlpIDwgbm5uOyBpaWkrKykge1xuXHRcdFx0XHRcdGxldCBhdHRhY2htZW50TmFtZSA9IGlucHV0LnJlYWRTdHJpbmdSZWYoKTtcblx0XHRcdFx0XHRpZiAoIWF0dGFjaG1lbnROYW1lKSB0aHJvdyBuZXcgRXJyb3IoXCJhdHRhY2htZW50TmFtZSBtdXN0IG5vdCBiZSBudWxsLlwiKTtcblx0XHRcdFx0XHRsZXQgYXR0YWNobWVudCA9IHNraW4uZ2V0QXR0YWNobWVudChzbG90SW5kZXgsIGF0dGFjaG1lbnROYW1lKTtcblx0XHRcdFx0XHRsZXQgdGltZWxpbmVUeXBlID0gaW5wdXQucmVhZEJ5dGUoKTtcblx0XHRcdFx0XHRsZXQgZnJhbWVDb3VudCA9IGlucHV0LnJlYWRJbnQodHJ1ZSk7XG5cdFx0XHRcdFx0bGV0IGZyYW1lTGFzdCA9IGZyYW1lQ291bnQgLSAxO1xuXG5cdFx0XHRcdFx0c3dpdGNoICh0aW1lbGluZVR5cGUpIHtcblx0XHRcdFx0XHRcdGNhc2UgQVRUQUNITUVOVF9ERUZPUk06IHtcblx0XHRcdFx0XHRcdFx0bGV0IHZlcnRleEF0dGFjaG1lbnQgPSBhdHRhY2htZW50IGFzIFZlcnRleEF0dGFjaG1lbnQ7XG5cdFx0XHRcdFx0XHRcdGxldCB3ZWlnaHRlZCA9IHZlcnRleEF0dGFjaG1lbnQuYm9uZXM7XG5cdFx0XHRcdFx0XHRcdGxldCB2ZXJ0aWNlcyA9IHZlcnRleEF0dGFjaG1lbnQudmVydGljZXM7XG5cdFx0XHRcdFx0XHRcdGxldCBkZWZvcm1MZW5ndGggPSB3ZWlnaHRlZCA/IHZlcnRpY2VzLmxlbmd0aCAvIDMgKiAyIDogdmVydGljZXMubGVuZ3RoO1xuXG5cblx0XHRcdFx0XHRcdFx0bGV0IGJlemllckNvdW50ID0gaW5wdXQucmVhZEludCh0cnVlKTtcblx0XHRcdFx0XHRcdFx0bGV0IHRpbWVsaW5lID0gbmV3IERlZm9ybVRpbWVsaW5lKGZyYW1lQ291bnQsIGJlemllckNvdW50LCBzbG90SW5kZXgsIHZlcnRleEF0dGFjaG1lbnQpO1xuXG5cdFx0XHRcdFx0XHRcdGxldCB0aW1lID0gaW5wdXQucmVhZEZsb2F0KCk7XG5cdFx0XHRcdFx0XHRcdGZvciAobGV0IGZyYW1lID0gMCwgYmV6aWVyID0gMDsgOyBmcmFtZSsrKSB7XG5cdFx0XHRcdFx0XHRcdFx0bGV0IGRlZm9ybTtcblx0XHRcdFx0XHRcdFx0XHRsZXQgZW5kID0gaW5wdXQucmVhZEludCh0cnVlKTtcblx0XHRcdFx0XHRcdFx0XHRpZiAoZW5kID09IDApXG5cdFx0XHRcdFx0XHRcdFx0XHRkZWZvcm0gPSB3ZWlnaHRlZCA/IFV0aWxzLm5ld0Zsb2F0QXJyYXkoZGVmb3JtTGVuZ3RoKSA6IHZlcnRpY2VzO1xuXHRcdFx0XHRcdFx0XHRcdGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRcdFx0ZGVmb3JtID0gVXRpbHMubmV3RmxvYXRBcnJheShkZWZvcm1MZW5ndGgpO1xuXHRcdFx0XHRcdFx0XHRcdFx0bGV0IHN0YXJ0ID0gaW5wdXQucmVhZEludCh0cnVlKTtcblx0XHRcdFx0XHRcdFx0XHRcdGVuZCArPSBzdGFydDtcblx0XHRcdFx0XHRcdFx0XHRcdGlmIChzY2FsZSA9PSAxKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdGZvciAobGV0IHYgPSBzdGFydDsgdiA8IGVuZDsgdisrKVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGRlZm9ybVt2XSA9IGlucHV0LnJlYWRGbG9hdCgpO1xuXHRcdFx0XHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0Zm9yIChsZXQgdiA9IHN0YXJ0OyB2IDwgZW5kOyB2KyspXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0ZGVmb3JtW3ZdID0gaW5wdXQucmVhZEZsb2F0KCkgKiBzY2FsZTtcblx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdGlmICghd2VpZ2h0ZWQpIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0Zm9yIChsZXQgdiA9IDAsIHZuID0gZGVmb3JtLmxlbmd0aDsgdiA8IHZuOyB2KyspXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0ZGVmb3JtW3ZdICs9IHZlcnRpY2VzW3ZdO1xuXHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0XHRcdHRpbWVsaW5lLnNldEZyYW1lKGZyYW1lLCB0aW1lLCBkZWZvcm0pO1xuXHRcdFx0XHRcdFx0XHRcdGlmIChmcmFtZSA9PSBmcmFtZUxhc3QpIGJyZWFrO1xuXHRcdFx0XHRcdFx0XHRcdGxldCB0aW1lMiA9IGlucHV0LnJlYWRGbG9hdCgpO1xuXHRcdFx0XHRcdFx0XHRcdHN3aXRjaCAoaW5wdXQucmVhZEJ5dGUoKSkge1xuXHRcdFx0XHRcdFx0XHRcdFx0Y2FzZSBDVVJWRV9TVEVQUEVEOlxuXHRcdFx0XHRcdFx0XHRcdFx0XHR0aW1lbGluZS5zZXRTdGVwcGVkKGZyYW1lKTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0XHRcdFx0XHRjYXNlIENVUlZFX0JFWklFUjpcblx0XHRcdFx0XHRcdFx0XHRcdFx0c2V0QmV6aWVyKGlucHV0LCB0aW1lbGluZSwgYmV6aWVyKyssIGZyYW1lLCAwLCB0aW1lLCB0aW1lMiwgMCwgMSwgMSk7XG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdHRpbWUgPSB0aW1lMjtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHR0aW1lbGluZXMucHVzaCh0aW1lbGluZSk7XG5cdFx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0Y2FzZSBBVFRBQ0hNRU5UX1NFUVVFTkNFOiB7XG5cdFx0XHRcdFx0XHRcdGxldCB0aW1lbGluZSA9IG5ldyBTZXF1ZW5jZVRpbWVsaW5lKGZyYW1lQ291bnQsIHNsb3RJbmRleCwgYXR0YWNobWVudCBhcyB1bmtub3duIGFzIEhhc1RleHR1cmVSZWdpb24pO1xuXHRcdFx0XHRcdFx0XHRmb3IgKGxldCBmcmFtZSA9IDA7IGZyYW1lIDwgZnJhbWVDb3VudDsgZnJhbWUrKykge1xuXHRcdFx0XHRcdFx0XHRcdGxldCB0aW1lID0gaW5wdXQucmVhZEZsb2F0KCk7XG5cdFx0XHRcdFx0XHRcdFx0bGV0IG1vZGVBbmRJbmRleCA9IGlucHV0LnJlYWRJbnQzMigpO1xuXHRcdFx0XHRcdFx0XHRcdHRpbWVsaW5lLnNldEZyYW1lKGZyYW1lLCB0aW1lLCBTZXF1ZW5jZU1vZGVWYWx1ZXNbbW9kZUFuZEluZGV4ICYgMHhmXSwgbW9kZUFuZEluZGV4ID4+IDQsXG5cdFx0XHRcdFx0XHRcdFx0XHRpbnB1dC5yZWFkRmxvYXQoKSk7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0dGltZWxpbmVzLnB1c2godGltZWxpbmUpO1xuXHRcdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cblx0XHQvLyBEcmF3IG9yZGVyIHRpbWVsaW5lLlxuXHRcdGxldCBkcmF3T3JkZXJDb3VudCA9IGlucHV0LnJlYWRJbnQodHJ1ZSk7XG5cdFx0aWYgKGRyYXdPcmRlckNvdW50ID4gMCkge1xuXHRcdFx0bGV0IHRpbWVsaW5lID0gbmV3IERyYXdPcmRlclRpbWVsaW5lKGRyYXdPcmRlckNvdW50KTtcblx0XHRcdGxldCBzbG90Q291bnQgPSBza2VsZXRvbkRhdGEuc2xvdHMubGVuZ3RoO1xuXHRcdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCBkcmF3T3JkZXJDb3VudDsgaSsrKSB7XG5cdFx0XHRcdGxldCB0aW1lID0gaW5wdXQucmVhZEZsb2F0KCk7XG5cdFx0XHRcdGxldCBvZmZzZXRDb3VudCA9IGlucHV0LnJlYWRJbnQodHJ1ZSk7XG5cdFx0XHRcdGxldCBkcmF3T3JkZXIgPSBVdGlscy5uZXdBcnJheShzbG90Q291bnQsIDApO1xuXHRcdFx0XHRmb3IgKGxldCBpaSA9IHNsb3RDb3VudCAtIDE7IGlpID49IDA7IGlpLS0pXG5cdFx0XHRcdFx0ZHJhd09yZGVyW2lpXSA9IC0xO1xuXHRcdFx0XHRsZXQgdW5jaGFuZ2VkID0gVXRpbHMubmV3QXJyYXkoc2xvdENvdW50IC0gb2Zmc2V0Q291bnQsIDApO1xuXHRcdFx0XHRsZXQgb3JpZ2luYWxJbmRleCA9IDAsIHVuY2hhbmdlZEluZGV4ID0gMDtcblx0XHRcdFx0Zm9yIChsZXQgaWkgPSAwOyBpaSA8IG9mZnNldENvdW50OyBpaSsrKSB7XG5cdFx0XHRcdFx0bGV0IHNsb3RJbmRleCA9IGlucHV0LnJlYWRJbnQodHJ1ZSk7XG5cdFx0XHRcdFx0Ly8gQ29sbGVjdCB1bmNoYW5nZWQgaXRlbXMuXG5cdFx0XHRcdFx0d2hpbGUgKG9yaWdpbmFsSW5kZXggIT0gc2xvdEluZGV4KVxuXHRcdFx0XHRcdFx0dW5jaGFuZ2VkW3VuY2hhbmdlZEluZGV4KytdID0gb3JpZ2luYWxJbmRleCsrO1xuXHRcdFx0XHRcdC8vIFNldCBjaGFuZ2VkIGl0ZW1zLlxuXHRcdFx0XHRcdGRyYXdPcmRlcltvcmlnaW5hbEluZGV4ICsgaW5wdXQucmVhZEludCh0cnVlKV0gPSBvcmlnaW5hbEluZGV4Kys7XG5cdFx0XHRcdH1cblx0XHRcdFx0Ly8gQ29sbGVjdCByZW1haW5pbmcgdW5jaGFuZ2VkIGl0ZW1zLlxuXHRcdFx0XHR3aGlsZSAob3JpZ2luYWxJbmRleCA8IHNsb3RDb3VudClcblx0XHRcdFx0XHR1bmNoYW5nZWRbdW5jaGFuZ2VkSW5kZXgrK10gPSBvcmlnaW5hbEluZGV4Kys7XG5cdFx0XHRcdC8vIEZpbGwgaW4gdW5jaGFuZ2VkIGl0ZW1zLlxuXHRcdFx0XHRmb3IgKGxldCBpaSA9IHNsb3RDb3VudCAtIDE7IGlpID49IDA7IGlpLS0pXG5cdFx0XHRcdFx0aWYgKGRyYXdPcmRlcltpaV0gPT0gLTEpIGRyYXdPcmRlcltpaV0gPSB1bmNoYW5nZWRbLS11bmNoYW5nZWRJbmRleF07XG5cdFx0XHRcdHRpbWVsaW5lLnNldEZyYW1lKGksIHRpbWUsIGRyYXdPcmRlcik7XG5cdFx0XHR9XG5cdFx0XHR0aW1lbGluZXMucHVzaCh0aW1lbGluZSk7XG5cdFx0fVxuXG5cdFx0Ly8gRXZlbnQgdGltZWxpbmUuXG5cdFx0bGV0IGV2ZW50Q291bnQgPSBpbnB1dC5yZWFkSW50KHRydWUpO1xuXHRcdGlmIChldmVudENvdW50ID4gMCkge1xuXHRcdFx0bGV0IHRpbWVsaW5lID0gbmV3IEV2ZW50VGltZWxpbmUoZXZlbnRDb3VudCk7XG5cdFx0XHRmb3IgKGxldCBpID0gMDsgaSA8IGV2ZW50Q291bnQ7IGkrKykge1xuXHRcdFx0XHRsZXQgdGltZSA9IGlucHV0LnJlYWRGbG9hdCgpO1xuXHRcdFx0XHRsZXQgZXZlbnREYXRhID0gc2tlbGV0b25EYXRhLmV2ZW50c1tpbnB1dC5yZWFkSW50KHRydWUpXTtcblx0XHRcdFx0bGV0IGV2ZW50ID0gbmV3IEV2ZW50KHRpbWUsIGV2ZW50RGF0YSk7XG5cdFx0XHRcdGV2ZW50LmludFZhbHVlID0gaW5wdXQucmVhZEludChmYWxzZSk7XG5cdFx0XHRcdGV2ZW50LmZsb2F0VmFsdWUgPSBpbnB1dC5yZWFkRmxvYXQoKTtcblx0XHRcdFx0ZXZlbnQuc3RyaW5nVmFsdWUgPSBpbnB1dC5yZWFkU3RyaW5nKCk7XG5cdFx0XHRcdGlmIChldmVudC5zdHJpbmdWYWx1ZSA9PSBudWxsKSBldmVudC5zdHJpbmdWYWx1ZSA9IGV2ZW50RGF0YS5zdHJpbmdWYWx1ZTtcblx0XHRcdFx0aWYgKGV2ZW50LmRhdGEuYXVkaW9QYXRoKSB7XG5cdFx0XHRcdFx0ZXZlbnQudm9sdW1lID0gaW5wdXQucmVhZEZsb2F0KCk7XG5cdFx0XHRcdFx0ZXZlbnQuYmFsYW5jZSA9IGlucHV0LnJlYWRGbG9hdCgpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHRpbWVsaW5lLnNldEZyYW1lKGksIGV2ZW50KTtcblx0XHRcdH1cblx0XHRcdHRpbWVsaW5lcy5wdXNoKHRpbWVsaW5lKTtcblx0XHR9XG5cblx0XHRsZXQgZHVyYXRpb24gPSAwO1xuXHRcdGZvciAobGV0IGkgPSAwLCBuID0gdGltZWxpbmVzLmxlbmd0aDsgaSA8IG47IGkrKylcblx0XHRcdGR1cmF0aW9uID0gTWF0aC5tYXgoZHVyYXRpb24sIHRpbWVsaW5lc1tpXS5nZXREdXJhdGlvbigpKTtcblx0XHRyZXR1cm4gbmV3IEFuaW1hdGlvbihuYW1lLCB0aW1lbGluZXMsIGR1cmF0aW9uKTtcblx0fVxufVxuXG5leHBvcnQgY2xhc3MgQmluYXJ5SW5wdXQge1xuXHRjb25zdHJ1Y3RvciAoZGF0YTogVWludDhBcnJheSB8IEFycmF5QnVmZmVyLCBwdWJsaWMgc3RyaW5ncyA9IG5ldyBBcnJheTxzdHJpbmc+KCksIHByaXZhdGUgaW5kZXg6IG51bWJlciA9IDAsIHByaXZhdGUgYnVmZmVyID0gbmV3IERhdGFWaWV3KGRhdGEgaW5zdGFuY2VvZiBBcnJheUJ1ZmZlciA/IGRhdGEgOiBkYXRhLmJ1ZmZlcikpIHtcblx0fVxuXG5cdHJlYWRCeXRlICgpOiBudW1iZXIge1xuXHRcdHJldHVybiB0aGlzLmJ1ZmZlci5nZXRJbnQ4KHRoaXMuaW5kZXgrKyk7XG5cdH1cblxuXHRyZWFkVW5zaWduZWRCeXRlICgpOiBudW1iZXIge1xuXHRcdHJldHVybiB0aGlzLmJ1ZmZlci5nZXRVaW50OCh0aGlzLmluZGV4KyspO1xuXHR9XG5cblx0cmVhZFNob3J0ICgpOiBudW1iZXIge1xuXHRcdGxldCB2YWx1ZSA9IHRoaXMuYnVmZmVyLmdldEludDE2KHRoaXMuaW5kZXgpO1xuXHRcdHRoaXMuaW5kZXggKz0gMjtcblx0XHRyZXR1cm4gdmFsdWU7XG5cdH1cblxuXHRyZWFkSW50MzIgKCk6IG51bWJlciB7XG5cdFx0bGV0IHZhbHVlID0gdGhpcy5idWZmZXIuZ2V0SW50MzIodGhpcy5pbmRleClcblx0XHR0aGlzLmluZGV4ICs9IDQ7XG5cdFx0cmV0dXJuIHZhbHVlO1xuXHR9XG5cblx0cmVhZEludCAob3B0aW1pemVQb3NpdGl2ZTogYm9vbGVhbikge1xuXHRcdGxldCBiID0gdGhpcy5yZWFkQnl0ZSgpO1xuXHRcdGxldCByZXN1bHQgPSBiICYgMHg3Rjtcblx0XHRpZiAoKGIgJiAweDgwKSAhPSAwKSB7XG5cdFx0XHRiID0gdGhpcy5yZWFkQnl0ZSgpO1xuXHRcdFx0cmVzdWx0IHw9IChiICYgMHg3RikgPDwgNztcblx0XHRcdGlmICgoYiAmIDB4ODApICE9IDApIHtcblx0XHRcdFx0YiA9IHRoaXMucmVhZEJ5dGUoKTtcblx0XHRcdFx0cmVzdWx0IHw9IChiICYgMHg3RikgPDwgMTQ7XG5cdFx0XHRcdGlmICgoYiAmIDB4ODApICE9IDApIHtcblx0XHRcdFx0XHRiID0gdGhpcy5yZWFkQnl0ZSgpO1xuXHRcdFx0XHRcdHJlc3VsdCB8PSAoYiAmIDB4N0YpIDw8IDIxO1xuXHRcdFx0XHRcdGlmICgoYiAmIDB4ODApICE9IDApIHtcblx0XHRcdFx0XHRcdGIgPSB0aGlzLnJlYWRCeXRlKCk7XG5cdFx0XHRcdFx0XHRyZXN1bHQgfD0gKGIgJiAweDdGKSA8PCAyODtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIG9wdGltaXplUG9zaXRpdmUgPyByZXN1bHQgOiAoKHJlc3VsdCA+Pj4gMSkgXiAtKHJlc3VsdCAmIDEpKTtcblx0fVxuXG5cdHJlYWRTdHJpbmdSZWYgKCk6IHN0cmluZyB8IG51bGwge1xuXHRcdGxldCBpbmRleCA9IHRoaXMucmVhZEludCh0cnVlKTtcblx0XHRyZXR1cm4gaW5kZXggPT0gMCA/IG51bGwgOiB0aGlzLnN0cmluZ3NbaW5kZXggLSAxXTtcblx0fVxuXG5cdHJlYWRTdHJpbmcgKCk6IHN0cmluZyB8IG51bGwge1xuXHRcdGxldCBieXRlQ291bnQgPSB0aGlzLnJlYWRJbnQodHJ1ZSk7XG5cdFx0c3dpdGNoIChieXRlQ291bnQpIHtcblx0XHRcdGNhc2UgMDpcblx0XHRcdFx0cmV0dXJuIG51bGw7XG5cdFx0XHRjYXNlIDE6XG5cdFx0XHRcdHJldHVybiBcIlwiO1xuXHRcdH1cblx0XHRieXRlQ291bnQtLTtcblx0XHRsZXQgY2hhcnMgPSBcIlwiO1xuXHRcdGxldCBjaGFyQ291bnQgPSAwO1xuXHRcdGZvciAobGV0IGkgPSAwOyBpIDwgYnl0ZUNvdW50Oykge1xuXHRcdFx0bGV0IGIgPSB0aGlzLnJlYWRVbnNpZ25lZEJ5dGUoKTtcblx0XHRcdHN3aXRjaCAoYiA+PiA0KSB7XG5cdFx0XHRcdGNhc2UgMTI6XG5cdFx0XHRcdGNhc2UgMTM6XG5cdFx0XHRcdFx0Y2hhcnMgKz0gU3RyaW5nLmZyb21DaGFyQ29kZSgoKGIgJiAweDFGKSA8PCA2IHwgdGhpcy5yZWFkQnl0ZSgpICYgMHgzRikpO1xuXHRcdFx0XHRcdGkgKz0gMjtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0Y2FzZSAxNDpcblx0XHRcdFx0XHRjaGFycyArPSBTdHJpbmcuZnJvbUNoYXJDb2RlKCgoYiAmIDB4MEYpIDw8IDEyIHwgKHRoaXMucmVhZEJ5dGUoKSAmIDB4M0YpIDw8IDYgfCB0aGlzLnJlYWRCeXRlKCkgJiAweDNGKSk7XG5cdFx0XHRcdFx0aSArPSAzO1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHRcdGNoYXJzICs9IFN0cmluZy5mcm9tQ2hhckNvZGUoYik7XG5cdFx0XHRcdFx0aSsrO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRyZXR1cm4gY2hhcnM7XG5cdH1cblxuXHRyZWFkRmxvYXQgKCk6IG51bWJlciB7XG5cdFx0bGV0IHZhbHVlID0gdGhpcy5idWZmZXIuZ2V0RmxvYXQzMih0aGlzLmluZGV4KTtcblx0XHR0aGlzLmluZGV4ICs9IDQ7XG5cdFx0cmV0dXJuIHZhbHVlO1xuXHR9XG5cblx0cmVhZEJvb2xlYW4gKCk6IGJvb2xlYW4ge1xuXHRcdHJldHVybiB0aGlzLnJlYWRCeXRlKCkgIT0gMDtcblx0fVxufVxuXG5jbGFzcyBMaW5rZWRNZXNoIHtcblx0cGFyZW50OiBzdHJpbmcgfCBudWxsOyBza2luSW5kZXg6IG51bWJlcjtcblx0c2xvdEluZGV4OiBudW1iZXI7XG5cdG1lc2g6IE1lc2hBdHRhY2htZW50O1xuXHRpbmhlcml0VGltZWxpbmU6IGJvb2xlYW47XG5cblx0Y29uc3RydWN0b3IgKG1lc2g6IE1lc2hBdHRhY2htZW50LCBza2luSW5kZXg6IG51bWJlciwgc2xvdEluZGV4OiBudW1iZXIsIHBhcmVudDogc3RyaW5nIHwgbnVsbCwgaW5oZXJpdERlZm9ybTogYm9vbGVhbikge1xuXHRcdHRoaXMubWVzaCA9IG1lc2g7XG5cdFx0dGhpcy5za2luSW5kZXggPSBza2luSW5kZXg7XG5cdFx0dGhpcy5zbG90SW5kZXggPSBzbG90SW5kZXg7XG5cdFx0dGhpcy5wYXJlbnQgPSBwYXJlbnQ7XG5cdFx0dGhpcy5pbmhlcml0VGltZWxpbmUgPSBpbmhlcml0RGVmb3JtO1xuXHR9XG59XG5cbmNsYXNzIFZlcnRpY2VzIHtcblx0Y29uc3RydWN0b3IgKHB1YmxpYyBib25lczogQXJyYXk8bnVtYmVyPiB8IG51bGwgPSBudWxsLCBwdWJsaWMgdmVydGljZXM6IEFycmF5PG51bWJlcj4gfCBGbG9hdDMyQXJyYXkgfCBudWxsID0gbnVsbCwgcHVibGljIGxlbmd0aDogbnVtYmVyID0gMCkgeyB9XG59XG5cbmVudW0gQXR0YWNobWVudFR5cGUgeyBSZWdpb24sIEJvdW5kaW5nQm94LCBNZXNoLCBMaW5rZWRNZXNoLCBQYXRoLCBQb2ludCwgQ2xpcHBpbmcgfVxuXG5mdW5jdGlvbiByZWFkVGltZWxpbmUxIChpbnB1dDogQmluYXJ5SW5wdXQsIHRpbWVsaW5lOiBDdXJ2ZVRpbWVsaW5lMSwgc2NhbGU6IG51bWJlcik6IEN1cnZlVGltZWxpbmUxIHtcblx0bGV0IHRpbWUgPSBpbnB1dC5yZWFkRmxvYXQoKSwgdmFsdWUgPSBpbnB1dC5yZWFkRmxvYXQoKSAqIHNjYWxlO1xuXHRmb3IgKGxldCBmcmFtZSA9IDAsIGJlemllciA9IDAsIGZyYW1lTGFzdCA9IHRpbWVsaW5lLmdldEZyYW1lQ291bnQoKSAtIDE7IDsgZnJhbWUrKykge1xuXHRcdHRpbWVsaW5lLnNldEZyYW1lKGZyYW1lLCB0aW1lLCB2YWx1ZSk7XG5cdFx0aWYgKGZyYW1lID09IGZyYW1lTGFzdCkgYnJlYWs7XG5cdFx0bGV0IHRpbWUyID0gaW5wdXQucmVhZEZsb2F0KCksIHZhbHVlMiA9IGlucHV0LnJlYWRGbG9hdCgpICogc2NhbGU7XG5cdFx0c3dpdGNoIChpbnB1dC5yZWFkQnl0ZSgpKSB7XG5cdFx0XHRjYXNlIENVUlZFX1NURVBQRUQ6XG5cdFx0XHRcdHRpbWVsaW5lLnNldFN0ZXBwZWQoZnJhbWUpO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdGNhc2UgQ1VSVkVfQkVaSUVSOlxuXHRcdFx0XHRzZXRCZXppZXIoaW5wdXQsIHRpbWVsaW5lLCBiZXppZXIrKywgZnJhbWUsIDAsIHRpbWUsIHRpbWUyLCB2YWx1ZSwgdmFsdWUyLCBzY2FsZSk7XG5cdFx0fVxuXHRcdHRpbWUgPSB0aW1lMjtcblx0XHR2YWx1ZSA9IHZhbHVlMjtcblx0fVxuXHRyZXR1cm4gdGltZWxpbmU7XG59XG5cbmZ1bmN0aW9uIHJlYWRUaW1lbGluZTIgKGlucHV0OiBCaW5hcnlJbnB1dCwgdGltZWxpbmU6IEN1cnZlVGltZWxpbmUyLCBzY2FsZTogbnVtYmVyKTogQ3VydmVUaW1lbGluZTIge1xuXHRsZXQgdGltZSA9IGlucHV0LnJlYWRGbG9hdCgpLCB2YWx1ZTEgPSBpbnB1dC5yZWFkRmxvYXQoKSAqIHNjYWxlLCB2YWx1ZTIgPSBpbnB1dC5yZWFkRmxvYXQoKSAqIHNjYWxlO1xuXHRmb3IgKGxldCBmcmFtZSA9IDAsIGJlemllciA9IDAsIGZyYW1lTGFzdCA9IHRpbWVsaW5lLmdldEZyYW1lQ291bnQoKSAtIDE7IDsgZnJhbWUrKykge1xuXHRcdHRpbWVsaW5lLnNldEZyYW1lKGZyYW1lLCB0aW1lLCB2YWx1ZTEsIHZhbHVlMik7XG5cdFx0aWYgKGZyYW1lID09IGZyYW1lTGFzdCkgYnJlYWs7XG5cdFx0bGV0IHRpbWUyID0gaW5wdXQucmVhZEZsb2F0KCksIG52YWx1ZTEgPSBpbnB1dC5yZWFkRmxvYXQoKSAqIHNjYWxlLCBudmFsdWUyID0gaW5wdXQucmVhZEZsb2F0KCkgKiBzY2FsZTtcblx0XHRzd2l0Y2ggKGlucHV0LnJlYWRCeXRlKCkpIHtcblx0XHRcdGNhc2UgQ1VSVkVfU1RFUFBFRDpcblx0XHRcdFx0dGltZWxpbmUuc2V0U3RlcHBlZChmcmFtZSk7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0Y2FzZSBDVVJWRV9CRVpJRVI6XG5cdFx0XHRcdHNldEJlemllcihpbnB1dCwgdGltZWxpbmUsIGJlemllcisrLCBmcmFtZSwgMCwgdGltZSwgdGltZTIsIHZhbHVlMSwgbnZhbHVlMSwgc2NhbGUpO1xuXHRcdFx0XHRzZXRCZXppZXIoaW5wdXQsIHRpbWVsaW5lLCBiZXppZXIrKywgZnJhbWUsIDEsIHRpbWUsIHRpbWUyLCB2YWx1ZTIsIG52YWx1ZTIsIHNjYWxlKTtcblx0XHR9XG5cdFx0dGltZSA9IHRpbWUyO1xuXHRcdHZhbHVlMSA9IG52YWx1ZTE7XG5cdFx0dmFsdWUyID0gbnZhbHVlMjtcblx0fVxuXHRyZXR1cm4gdGltZWxpbmU7XG59XG5cbmZ1bmN0aW9uIHNldEJlemllciAoaW5wdXQ6IEJpbmFyeUlucHV0LCB0aW1lbGluZTogQ3VydmVUaW1lbGluZSwgYmV6aWVyOiBudW1iZXIsIGZyYW1lOiBudW1iZXIsIHZhbHVlOiBudW1iZXIsXG5cdHRpbWUxOiBudW1iZXIsIHRpbWUyOiBudW1iZXIsIHZhbHVlMTogbnVtYmVyLCB2YWx1ZTI6IG51bWJlciwgc2NhbGU6IG51bWJlcikge1xuXHR0aW1lbGluZS5zZXRCZXppZXIoYmV6aWVyLCBmcmFtZSwgdmFsdWUsIHRpbWUxLCB2YWx1ZTEsIGlucHV0LnJlYWRGbG9hdCgpLCBpbnB1dC5yZWFkRmxvYXQoKSAqIHNjYWxlLCBpbnB1dC5yZWFkRmxvYXQoKSwgaW5wdXQucmVhZEZsb2F0KCkgKiBzY2FsZSwgdGltZTIsIHZhbHVlMik7XG59XG5cbmNvbnN0IEJPTkVfUk9UQVRFID0gMDtcbmNvbnN0IEJPTkVfVFJBTlNMQVRFID0gMTtcbmNvbnN0IEJPTkVfVFJBTlNMQVRFWCA9IDI7XG5jb25zdCBCT05FX1RSQU5TTEFURVkgPSAzO1xuY29uc3QgQk9ORV9TQ0FMRSA9IDQ7XG5jb25zdCBCT05FX1NDQUxFWCA9IDU7XG5jb25zdCBCT05FX1NDQUxFWSA9IDY7XG5jb25zdCBCT05FX1NIRUFSID0gNztcbmNvbnN0IEJPTkVfU0hFQVJYID0gODtcbmNvbnN0IEJPTkVfU0hFQVJZID0gOTtcbmNvbnN0IEJPTkVfSU5IRVJJVCA9IDEwO1xuXG5jb25zdCBTTE9UX0FUVEFDSE1FTlQgPSAwO1xuY29uc3QgU0xPVF9SR0JBID0gMTtcbmNvbnN0IFNMT1RfUkdCID0gMjtcbmNvbnN0IFNMT1RfUkdCQTIgPSAzO1xuY29uc3QgU0xPVF9SR0IyID0gNDtcbmNvbnN0IFNMT1RfQUxQSEEgPSA1O1xuXG5jb25zdCBBVFRBQ0hNRU5UX0RFRk9STSA9IDA7XG5jb25zdCBBVFRBQ0hNRU5UX1NFUVVFTkNFID0gMTtcblxuY29uc3QgUEFUSF9QT1NJVElPTiA9IDA7XG5jb25zdCBQQVRIX1NQQUNJTkcgPSAxO1xuY29uc3QgUEFUSF9NSVggPSAyO1xuXG5jb25zdCBQSFlTSUNTX0lORVJUSUEgPSAwO1xuY29uc3QgUEhZU0lDU19TVFJFTkdUSCA9IDE7XG5jb25zdCBQSFlTSUNTX0RBTVBJTkcgPSAyO1xuY29uc3QgUEhZU0lDU19NQVNTID0gNDtcbmNvbnN0IFBIWVNJQ1NfV0lORCA9IDU7XG5jb25zdCBQSFlTSUNTX0dSQVZJVFkgPSA2O1xuY29uc3QgUEhZU0lDU19NSVggPSA3O1xuY29uc3QgUEhZU0lDU19SRVNFVCA9IDg7XG5cbmNvbnN0IENVUlZFX0xJTkVBUiA9IDA7XG5jb25zdCBDVVJWRV9TVEVQUEVEID0gMTtcbmNvbnN0IENVUlZFX0JFWklFUiA9IDI7XG4iXX0=
|
|
1503
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU2tlbGV0b25CaW5hcnkuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvU2tlbGV0b25CaW5hcnkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OzsrRUEyQitFO0FBRS9FLE9BQU8sRUFBRSxhQUFhLEVBQUUsU0FBUyxFQUFFLGtCQUFrQixFQUEwQyxjQUFjLEVBQUUsY0FBYyxFQUFFLHVCQUF1QixFQUFFLGlCQUFpQixFQUFFLGFBQWEsRUFBRSxvQkFBb0IsRUFBRSxlQUFlLEVBQUUseUJBQXlCLEVBQUUsOEJBQThCLEVBQUUsNkJBQTZCLEVBQUUsZ0NBQWdDLEVBQUUsZ0NBQWdDLEVBQUUsZ0NBQWdDLEVBQUUsNkJBQTZCLEVBQUUsNEJBQTRCLEVBQUUsOEJBQThCLEVBQUUsaUNBQWlDLEVBQUUsNkJBQTZCLEVBQUUsWUFBWSxFQUFFLGFBQWEsRUFBRSxZQUFZLEVBQUUsV0FBVyxFQUFFLGNBQWMsRUFBRSxhQUFhLEVBQUUsY0FBYyxFQUFFLGNBQWMsRUFBRSxnQkFBZ0IsRUFBRSxhQUFhLEVBQUUsY0FBYyxFQUFFLGNBQWMsRUFBRSxpQkFBaUIsRUFBRSxjQUFjLEVBQWlCLDJCQUEyQixFQUFFLGlCQUFpQixFQUFFLGtCQUFrQixFQUFFLGtCQUFrQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFJejVCLE9BQU8sRUFBRSxRQUFRLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUN6RSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3pDLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUNqRCxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sWUFBWSxDQUFDO0FBQ25DLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUMzQyxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUN6RCxP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QUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDO29DQUN0RSxTQUFTLENBQUMsS0FBSyxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsRUFBRSxLQUFLLEVBQUUsQ0FBQyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQztvQ0FDdEUsU0FBUyxDQUFDLEtBQUssRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUM7b0NBQ3RFLFNBQVMsQ0FBQyxLQUFLLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDO29DQUN0RSxTQUFTLENBQUMsS0FBSyxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsRUFBRSxLQUFLLEVBQUUsQ0FBQyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQztvQ0FDeEUsU0FBUyxDQUFDLEtBQUssRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLEVBQUUsRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUM7b0NBQ3hFLFNBQVMsQ0FBQyxLQUFLLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxFQUFFLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDOzRCQUMxRSxDQUFDOzRCQUNELElBQUksR0FBRyxLQUFLLENB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QUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDeEcsSUFBSSxRQUFRLEdBQUcsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsU0FBUyxFQUFFLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDakUsS0FBSyxJQUFJLEtBQUssR0FBRyxDQUFDLEVBQUUsTUFBTSxHQUFHLENBQUMsR0FBSSxLQUFLLEVBQUUsRUFBRSxDQUFDO2dCQUMzQyxRQUFRLENBQUMsUUFBUSxDQUFDLEtBQUssRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLFFBQVEsRUFBRSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxLQUFLLEdBQUcsRUFBRSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsS0FBSyxHQUFHLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO2dCQUNsSCxJQUFJLEtBQUssS0FBSyxTQUFTO29CQUFFLE1BQU07Z0JBQy9CLEtBQUssR0FBRyxLQUFLLENBQUMsUUFBUSxFQUFFLENBQUM7Z0JBQ3pCLE1BQU0sS0FBSyxHQUFHLEtBQUssQ0FBQyxTQUFTLEVBQUUsRUFBRSxJQUFJLEdBQUcsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLFNBQVMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUM1RyxNQUFNLFNBQVMsR0FBRyxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxTQUFTLEVBQUUsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FB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SyxZQUFZO3dCQUNoQixTQUFTLENBQUMsS0FBSyxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsRUFBRSxLQUFLLEVBQUUsQ0FBQyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBRSxDQUFDLENBQUMsQ0FBQzt3QkFDdEYsU0FBUyxDQUFDLEtBQUssRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUM7d0JBQzVFLFNBQVMsQ0FBQyxLQUFLLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDO3dCQUM1RSxTQUFTLENBQUMsS0FBSyxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsRUFBRSxLQUFLLEVBQUUsQ0FBQyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBRSxDQUFDLENBQUMsQ0FBQzt3QkFDdEYsU0FBUyxDQUFDLEtBQUssRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQUUsQ0FBQyxDQUFDLENBQUM7d0JBQ3RGLFNBQVMsQ0FBQyxLQUFLLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFFLENBQUMsQ0FBQyxDQUFDO2dCQUN4RixDQUFDO2dCQUNELElBQUksR0FBRyxLQUFLLENBQUM7Z0JBQ2IsU0FBUyxHQUFHLFVBQVUsQ0FBQztnQkFDdkIsSUFBSSxHQUFHLEtBQUssQ0FBQztnQkFDYixJQUFJLEdBQUcsS0FBSyxDQUFDO2dCQUNiLFNBQVMsR0FB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LEdBQUcsQ0FBQyxDQUFDO0FBRTVCLE1BQU0saUJBQWlCLEdBQUcsQ0FBQyxDQUFDO0FBQzVCLE1BQU0sbUJBQW1CLEdBQUcsQ0FBQyxDQUFDO0FBRTlCLE1BQU0sYUFBYSxHQUFHLENBQUMsQ0FBQztBQUN4QixNQUFNLFlBQVksR0FBRyxDQUFDLENBQUM7QUFDdkIsTUFBTSxRQUFRLEdBQUcsQ0FBQyxDQUFDO0FBRW5CLE1BQU0sZUFBZSxHQUFHLENBQUMsQ0FBQztBQUMxQixNQUFNLGdCQUFnQixHQUFHLENBQUMsQ0FBQztBQUMzQixNQUFNLGVBQWUsR0FBRyxDQUFDLENBQUM7QUFDMUIsTUFBTSxZQUFZLEdBQUcsQ0FBQyxDQUFDO0FBQ3ZCLE1BQU0sWUFBWSxHQUFHLENBQUMsQ0FBQztBQUN2QixNQUFNLGVBQWUsR0FBRyxDQUFDLENBQUM7QUFDMUIsTUFBTSxXQUFXLEdBQUcsQ0FBQyxDQUFDO0FBQ3RCLE1BQU0sYUFBYSxHQUFHLENBQUMsQ0FBQztBQUV4QixNQUFNLFdBQVcsR0FBRyxDQUFDLENBQUM7QUFDdEIsTUFBTSxVQUFVLEdBQUcsQ0FBQyxDQUFDO0FBRXJCLCtEQUErRDtBQUMvRCxNQUFNLFlBQVksR0FBRyxDQUFDLENBQUM7QUFDdkIsTUFBTSxhQUFhLEdBQUcsQ0FBQyxDQUFDO0FBQ3hCLE1BQU0sWUFBWSxHQUFHLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiAqIFNwaW5lIFJ1bnRpbWVzIExpY2Vuc2UgQWdyZWVtZW50XG4gKiBMYXN0IHVwZGF0ZWQgQXByaWwgNSwgMjAyNS4gUmVwbGFjZXMgYWxsIHByaW9yIHZlcnNpb25zLlxuICpcbiAqIENvcHlyaWdodCAoYykgMjAxMy0yMDI1LCBFc290ZXJpYyBTb2Z0d2FyZSBMTENcbiAqXG4gKiBJbnRlZ3JhdGlvbiBvZiB0aGUgU3BpbmUgUnVudGltZXMgaW50byBzb2Z0d2FyZSBvciBvdGhlcndpc2UgY3JlYXRpbmdcbiAqIGRlcml2YXRpdmUgd29ya3Mgb2YgdGhlIFNwaW5lIFJ1bnRpbWVzIGlzIHBlcm1pdHRlZCB1bmRlciB0aGUgdGVybXMgYW5kXG4gKiBjb25kaXRpb25zIG9mIFNlY3Rpb24gMiBvZiB0aGUgU3BpbmUgRWRpdG9yIExpY2Vuc2UgQWdyZWVtZW50OlxuICogaHR0cDovL2Vzb3Rlcmljc29mdHdhcmUuY29tL3NwaW5lLWVkaXRvci1saWNlbnNlXG4gKlxuICogT3RoZXJ3aXNlLCBpdCBpcyBwZXJtaXR0ZWQgdG8gaW50ZWdyYXRlIHRoZSBTcGluZSBSdW50aW1lcyBpbnRvIHNvZnR3YXJlXG4gKiBvciBvdGhlcndpc2UgY3JlYXRlIGRlcml2YXRpdmUgd29ya3Mgb2YgdGhlIFNwaW5lIFJ1bnRpbWVzIChjb2xsZWN0aXZlbHksXG4gKiBcIlByb2R1Y3RzXCIpLCBwcm92aWRlZCB0aGF0IGVhY2ggdXNlciBvZiB0aGUgUHJvZHVjdHMgbXVzdCBvYnRhaW4gdGhlaXIgb3duXG4gKiBTcGluZSBFZGl0b3IgbGljZW5zZSBhbmQgcmVkaXN0cmlidXRpb24gb2YgdGhlIFByb2R1Y3RzIGluIGFueSBmb3JtIG11c3RcbiAqIGluY2x1ZGUgdGhpcyBsaWNlbnNlIGFuZCBjb3B5cmlnaHQgbm90aWNlLlxuICpcbiAqIFRIRSBTUElORSBSVU5USU1FUyBBUkUgUFJPVklERUQgQlkgRVNPVEVSSUMgU09GVFdBUkUgTExDIFwiQVMgSVNcIiBBTkQgQU5ZXG4gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEXG4gKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFXG4gKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBFU09URVJJQyBTT0ZUV0FSRSBMTEMgQkUgTElBQkxFIEZPUiBBTllcbiAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTXG4gKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVMsXG4gKiBCVVNJTkVTUyBJTlRFUlJVUFRJT04sIE9SIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTKSBIT1dFVkVSIENBVVNFRCBBTkRcbiAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUXG4gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0ZcbiAqIFRIRSBTUElORSBSVU5USU1FUywgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS5cbiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cblxuaW1wb3J0IHsgQWxwaGFUaW1lbGluZSwgQW5pbWF0aW9uLCBBdHRhY2htZW50VGltZWxpbmUsIHR5cGUgQm9uZVRpbWVsaW5lMiwgdHlwZSBDdXJ2ZVRpbWVsaW5lLCBDdXJ2ZVRpbWVsaW5lMSwgRGVmb3JtVGltZWxpbmUsIERyYXdPcmRlckZvbGRlclRpbWVsaW5lLCBEcmF3T3JkZXJUaW1lbGluZSwgRXZlbnRUaW1lbGluZSwgSWtDb25zdHJhaW50VGltZWxpbmUsIEluaGVyaXRUaW1lbGluZSwgUGF0aENvbnN0cmFpbnRNaXhUaW1lbGluZSwgUGF0aENvbnN0cmFpbnRQb3NpdGlvblRpbWVsaW5lLCBQYXRoQ29uc3RyYWludFNwYWNpbmdUaW1lbGluZSwgUGh5c2ljc0NvbnN0cmFpbnREYW1waW5nVGltZWxpbmUsIFBoeXNpY3NDb25zdHJhaW50R3Jhdml0eVRpbWVsaW5lLCBQaHlzaWNzQ29uc3RyYWludEluZXJ0aWFUaW1lbGluZSwgUGh5c2ljc0NvbnN0cmFpbnRNYXNzVGltZWxpbmUsIFBoeXNpY3NDb25zdHJhaW50TWl4VGltZWxpbmUsIFBoeXNpY3NDb25zdHJhaW50UmVzZXRUaW1lbGluZSwgUGh5c2ljc0NvbnN0cmFpbnRTdHJlbmd0aFRpbWVsaW5lLCBQaHlzaWNzQ29uc3RyYWludFdpbmRUaW1lbGluZSwgUkdCMlRpbWVsaW5lLCBSR0JBMlRpbWVsaW5lLCBSR0JBVGltZWxpbmUsIFJHQlRpbWVsaW5lLCBSb3RhdGVUaW1lbGluZSwgU2NhbGVUaW1lbGluZSwgU2NhbGVYVGltZWxpbmUsIFNjYWxlWVRpbWVsaW5lLCBTZXF1ZW5jZVRpbWVsaW5lLCBTaGVhclRpbWVsaW5lLCBTaGVhclhUaW1lbGluZSwgU2hlYXJZVGltZWxpbmUsIFNsaWRlck1peFRpbWVsaW5lLCBTbGlkZXJUaW1lbGluZSwgdHlwZSBUaW1lbGluZSwgVHJhbnNmb3JtQ29uc3RyYWludFRpbWVsaW5lLCBUcmFuc2xhdGVUaW1lbGluZSwgVHJhbnNsYXRlWFRpbWVsaW5lLCBUcmFuc2xhdGVZVGltZWxpbmUgfSBmcm9tIFwiLi9BbmltYXRpb24uanNcIjtcbmltcG9ydCB0eXBlIHsgQXR0YWNobWVudCwgVmVydGV4QXR0YWNobWVudCB9IGZyb20gXCIuL2F0dGFjaG1lbnRzL0F0dGFjaG1lbnQuanNcIjtcbmltcG9ydCB0eXBlIHsgQXR0YWNobWVudExvYWRlciB9IGZyb20gXCIuL2F0dGFjaG1lbnRzL0F0dGFjaG1lbnRMb2FkZXIuanNcIjtcbmltcG9ydCB0eXBlIHsgTWVzaEF0dGFjaG1lbnQgfSBmcm9tIFwiLi9hdHRhY2htZW50cy9NZXNoQXR0YWNobWVudC5qc1wiO1xuaW1wb3J0IHsgU2VxdWVuY2UsIFNlcXVlbmNlTW9kZVZhbHVlcyB9IGZyb20gXCIuL2F0dGFjaG1lbnRzL1NlcXVlbmNlLmpzXCI7XG5pbXBvcnQgeyBCb25lRGF0YSB9IGZyb20gXCIuL0JvbmVEYXRhLmpzXCI7XG5pbXBvcnQgeyBTY2FsZVlNb2RlIH0gZnJvbSBcIi4vQ29uc3RyYWludERhdGEuanNcIjtcbmltcG9ydCB7IEV2ZW50IH0gZnJvbSBcIi4vRXZlbnQuanNcIjtcbmltcG9ydCB7IEV2ZW50RGF0YSB9IGZyb20gXCIuL0V2ZW50RGF0YS5qc1wiO1xuaW1wb3J0IHsgSWtDb25zdHJhaW50RGF0YSB9IGZyb20gXCIuL0lrQ29uc3RyYWludERhdGEuanNcIjtcbmltcG9ydCB7IFBhdGhDb25zdHJhaW50RGF0YSwgUG9zaXRpb25Nb2RlLCBTcGFjaW5nTW9kZSB9IGZyb20gXCIuL1BhdGhDb25zdHJhaW50RGF0YS5qc1wiO1xuaW1wb3J0IHsgUGh5c2ljc0NvbnN0cmFpbnREYXRhIH0gZnJvbSBcIi4vUGh5c2ljc0NvbnN0cmFpbnREYXRhLmpzXCI7XG5pbXBvcnQgeyBTa2VsZXRvbkRhdGEgfSBmcm9tIFwiLi9Ta2VsZXRvbkRhdGEuanNcIjtcbmltcG9ydCB7IFNraW4gfSBmcm9tIFwiLi9Ta2luLmpzXCI7XG5pbXBvcnQgeyBTbGlkZXJEYXRhIH0gZnJvbSBcIi4vU2xpZGVyRGF0YS5qc1wiO1xuaW1wb3J0IHsgU2xvdERhdGEgfSBmcm9tIFwiLi9TbG90RGF0YS5qc1wiO1xuaW1wb3J0IHsgdHlwZSBGcm9tUHJvcGVydHksIEZyb21Sb3RhdGUsIEZyb21TY2FsZVgsIEZyb21TY2FsZVksIEZyb21TaGVhclksIEZyb21YLCBGcm9tWSwgdHlwZSBUb1Byb3BlcnR5LCBUb1JvdGF0ZSwgVG9TY2FsZVgsIFRvU2NhbGVZLCBUb1NoZWFyWSwgVG9YLCBUb1ksIFRyYW5zZm9ybUNvbnN0cmFpbnREYXRhIH0gZnJvbSBcIi4vVHJhbnNmb3JtQ29uc3RyYWludERhdGEuanNcIjtcbmltcG9ydCB7IENvbG9yLCB0eXBlIE51bWJlckFycmF5TGlrZSwgVXRpbHMgfSBmcm9tIFwiLi9VdGlscy5qc1wiO1xuXG4vKiogTG9hZHMgc2tlbGV0b24gZGF0YSBpbiB0aGUgU3BpbmUgYmluYXJ5IGZvcm1hdC5cbiAqXG4gKiBTZWUgW1NwaW5lIGJpbmFyeSBmb3JtYXRdKGh0dHA6Ly9lc290ZXJpY3NvZnR3YXJlLmNvbS9zcGluZS1iaW5hcnktZm9ybWF0KSBhbmRcbiAqIFtKU09OIGFuZCBiaW5hcnkgZGF0YV0oaHR0cDovL2Vzb3Rlcmljc29mdHdhcmUuY29tL3NwaW5lLWxvYWRpbmctc2tlbGV0b24tZGF0YSNKU09OLWFuZC1iaW5hcnktZGF0YSkgaW4gdGhlIFNwaW5lXG4gKiBSdW50aW1lcyBHdWlkZS4gKi9cbmV4cG9ydCBjbGFzcyBTa2VsZXRvbkJpbmFyeSB7XG5cdC8qKiBTY2FsZXMgYm9uZSBwb3NpdGlvbnMsIGltYWdlIHNpemVzLCBhbmQgdHJhbnNsYXRpb25zIGFzIHRoZXkgYXJlIGxvYWRlZC4gVGhpcyBhbGxvd3MgZGlmZmVyZW50IHNpemUgaW1hZ2VzIHRvIGJlIHVzZWQgYXRcblx0ICogcnVudGltZSB0aGFuIHdlcmUgdXNlZCBpbiBTcGluZS5cblx0ICpcblx0ICogU2VlIFtTY2FsaW5nXShodHRwOi8vZXNvdGVyaWNzb2Z0d2FyZS5jb20vc3BpbmUtbG9hZGluZy1za2VsZXRvbi1kYXRhI1NjYWxpbmcpIGluIHRoZSBTcGluZSBSdW50aW1lcyBHdWlkZS4gKi9cblx0c2NhbGUgPSAxO1xuXG5cdGF0dGFjaG1lbnRMb2FkZXI6IEF0dGFjaG1lbnRMb2FkZXI7XG5cdHByaXZhdGUgbGlua2VkTWVzaGVzID0gW10gYXMgTGlua2VkTWVzaFtdO1xuXG5cdGNvbnN0cnVjdG9yIChhdHRhY2htZW50TG9hZGVyOiBBdHRhY2htZW50TG9hZGVyKSB7XG5cdFx0dGhpcy5hdHRhY2htZW50TG9hZGVyID0gYXR0YWNobWVudExvYWRlcjtcblx0fVxuXG5cdHJlYWRTa2VsZXRvbkRhdGEgKGJpbmFyeTogVWludDhBcnJheSB8IEFycmF5QnVmZmVyKTogU2tlbGV0b25EYXRhIHtcblx0XHRjb25zdCBzY2FsZSA9IHRoaXMuc2NhbGU7XG5cblx0XHRjb25zdCBza2VsZXRvbkRhdGEgPSBuZXcgU2tlbGV0b25EYXRhKCk7XG5cdFx0c2tlbGV0b25EYXRhLm5hbWUgPSBcIlwiOyAvLyBCT1pPXG5cblx0XHRjb25zdCBpbnB1dCA9IG5ldyBCaW5hcnlJbnB1dChiaW5hcnkpO1xuXG5cdFx0Y29uc3QgbG93SGFzaCA9IGlucHV0LnJlYWRJbnQzMigpO1xuXHRcdGNvbnN0IGhpZ2hIYXNoID0gaW5wdXQucmVhZEludDMyKCk7XG5cdFx0c2tlbGV0b25EYXRhLmhhc2ggPSBoaWdoSGFzaCA9PT0gMCAmJiBsb3dIYXNoID09PSAwID8gbnVsbCA6IGhpZ2hIYXNoLnRvU3RyaW5nKDE2KSArIGxvd0hhc2gudG9TdHJpbmcoMTYpO1xuXHRcdHNrZWxldG9uRGF0YS52ZXJzaW9uID0gaW5wdXQucmVhZFN0cmluZygpO1xuXHRcdHNrZWxldG9uRGF0YS54ID0gaW5wdXQucmVhZEZsb2F0KCk7XG5cdFx0c2tlbGV0b25EYXRhLnkgPSBpbnB1dC5yZWFkRmxvYXQoKTtcblx0XHRza2VsZXRvbkRhdGEud2lkdGggPSBpbnB1dC5yZWFkRmxvYXQoKTtcblx0XHRza2VsZXRvbkRhdGEuaGVpZ2h0ID0gaW5wdXQucmVhZEZsb2F0KCk7XG5cdFx0c2tlbGV0b25EYXRhLnJlZmVyZW5jZVNjYWxlID0gaW5wdXQucmVhZEZsb2F0KCkgKiBzY2FsZTtcblxuXHRcdGNvbnN0IG5vbmVzc2VudGlhbCA9IGlucHV0LnJlYWRCb29sZWFuKCk7XG5cdFx0aWYgKG5vbmVzc2VudGlhbCkge1xuXHRcdFx0c2tlbGV0b25EYXRhLmZwcyA9IGlucHV0LnJlYWRGbG9hdCgpO1xuXHRcdFx0c2tlbGV0b25EYXRhLmltYWdlc1BhdGggPSBpbnB1dC5yZWFkU3RyaW5nKCk7XG5cdFx0XHRza2VsZXRvbkRhdGEuYXVkaW9QYXRoID0gaW5wdXQucmVhZFN0cmluZygpO1xuXHRcdH1cblxuXHRcdGxldCBuID0gMDtcblx0XHQvLyBTdHJpbmdzLlxuXHRcdG4gPSBpbnB1dC5yZWFkSW50KHRydWUpXG5cdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCBuOyBpKyspIHtcblx0XHRcdGNvbnN0IHN0ciA9IGlucHV0LnJlYWRTdHJpbmcoKTtcblx0XHRcdGlmICghc3RyKSB0aHJvdyBuZXcgRXJyb3IoXCJTdHJpbmcgaW4gc3RyaW5nIHRhYmxlIG11c3Qgbm90IGJlIG51bGwuXCIpO1xuXHRcdFx0aW5wdXQuc3RyaW5ncy5wdXNoKHN0cik7XG5cdFx0fVxuXG5cdFx0Ly8gQm9uZXMuXG5cdFx0Y29uc3QgYm9uZXMgPSBza2VsZXRvbkRhdGEuYm9uZXM7XG5cdFx0biA9IGlucHV0LnJlYWRJbnQodHJ1ZSlcblx0XHRmb3IgKGxldCBpID0gMDsgaSA8IG47IGkrKykge1xuXHRcdFx0Y29uc3QgbmFtZSA9IGlucHV0LnJlYWRTdHJpbmcoKTtcblx0XHRcdGlmICghbmFtZSkgdGhyb3cgbmV3IEVycm9yKFwiQm9uZSBuYW1lIG11c3Qgbm90IGJlIG51bGwuXCIpO1xuXHRcdFx0Y29uc3QgcGFyZW50ID0gaSA9PT0gMCA/IG51bGwgOiBib25lc1tpbnB1dC5yZWFkSW50KHRydWUpXTtcblx0XHRcdGNvbnN0IGRhdGEgPSBuZXcgQm9uZURhdGEoaSwgbmFtZSwgcGFyZW50KTtcblx0XHRcdGNvbnN0IHNldHVwID0gZGF0YS5zZXR1cFBvc2U7XG5cdFx0XHRzZXR1cC5yb3RhdGlvbiA9IGlucHV0LnJlYWRGbG9hdCgpO1xuXHRcdFx0c2V0dXAueCA9IGlucHV0LnJlYWRGbG9hdCgpICogc2NhbGU7XG5cdFx0XHRzZXR1cC55ID0gaW5wdXQucmVhZEZsb2F0KCkgKiBzY2FsZTtcblx0XHRcdHNldHVwLnNjYWxlWCA9IGlucHV0LnJlYWRGbG9hdCgpO1xuXHRcdFx0c2V0dXAuc2NhbGVZID0gaW5wdXQucmVhZEZsb2F0KCk7XG5cdFx0XHRzZXR1cC5zaGVhclggPSBpbnB1dC5yZWFkRmxvYXQoKTtcblx0XHRcdHNldHVwLnNoZWFyWSA9IGlucHV0LnJlYWRGbG9hdCgpO1xuXHRcdFx0c2V0dXAuaW5oZXJpdCA9IGlucHV0LnJlYWRCeXRlKCk7XG5cdFx0XHRkYXRhLmxlbmd0aCA9IGlucHV0LnJlYWRGbG9hdCgpICogc2NhbGU7XG5cdFx0XHRkYXRhLnNraW5SZXF1aXJlZCA9IGlucHV0LnJlYWRCb29sZWFuKCk7XG5cdFx0XHRpZiAobm9uZXNzZW50aWFsKSB7XG5cdFx0XHRcdENvbG9yLnJnYmE4ODg4VG9Db2xvcihkYXRhLmNvbG9yLCBpbnB1dC5yZWFkSW50MzIoKSk7XG5cdFx0XHRcdGRhdGEuaWNvbiA9IGlucHV0LnJlYWRTdHJpbmcoKSA/PyB1bmRlZmluZWQ7XG5cdFx0XHRcdGRhdGEuaWNvblNpemUgPSBpbnB1dC5yZWFkRmxvYXQoKTtcblx0XHRcdFx0ZGF0YS5pY29uUm90YXRpb24gPSBpbnB1dC5yZWFkRmxvYXQoKTtcblx0XHRcdFx0ZGF0YS52aXNpYmxlID0gaW5wdXQucmVhZEJvb2xlYW4oKTtcblx0XHRcdH1cblx0XHRcdGJvbmVzLnB1c2goZGF0YSk7XG5cdFx0fVxuXG5cdFx0Ly8gU2xvdHMuXG5cdFx0biA9IGlucHV0LnJlYWRJbnQodHJ1ZSk7XG5cdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCBuOyBpKyspIHtcblx0XHRcdGNvbnN0IHNsb3ROYW1lID0gaW5wdXQucmVhZFN0cmluZygpO1xuXHRcdFx0aWYgKCFzbG90TmFtZSkgdGhyb3cgbmV3IEVycm9yKFwiU2xvdCBuYW1lIG11c3Qgbm90IGJlIG51bGwuXCIpO1xuXHRcdFx0Y29uc3QgYm9uZURhdGEgPSBib25lc1tpbnB1dC5yZWFkSW50KHRydWUpXTtcblx0XHRcdGNvbnN0IGRhdGEgPSBuZXcgU2xvdERhdGEoaSwgc2xvdE5hbWUsIGJvbmVEYXRhKTtcblx0XHRcdENvbG9yLnJnYmE4ODg4VG9Db2xvcihkYXRhLnNldHVwUG9zZS5jb2xvciwgaW5wdXQucmVhZEludDMyKCkpO1xuXG5cdFx0XHRjb25zdCBkYXJrQ29sb3IgPSBpbnB1dC5yZWFkSW50MzIoKTtcblx0XHRcdGlmIChkYXJrQ29sb3IgIT09IC0xKSBDb2xvci5yZ2I4ODhUb0NvbG9yKGRhdGEuc2V0dXBQb3NlLmRhcmtDb2xvciA9IG5ldyBDb2xvcigpLCBkYXJrQ29sb3IpO1xuXG5cdFx0XHRkYXRhLmF0dGFjaG1lbnROYW1lID0gaW5wdXQucmVhZFN0cmluZ1JlZigpO1xuXHRcdFx0ZGF0YS5ibGVuZE1vZGUgPSBpbnB1dC5yZWFkSW50KHRydWUpO1xuXHRcdFx0aWYgKG5vbmVzc2VudGlhbCkgZGF0YS52aXNpYmxlID0gaW5wdXQucmVhZEJvb2xlYW4oKTtcblx0XHRcdHNrZWxldG9uRGF0YS5zbG90cy5wdXNoKGRhdGEpO1xuXHRcdH1cblxuXHRcdC8vIENvbnN0cmFpbnRzLlxuXHRcdGNvbnN0IGNvbnN0cmFpbnRzID0gc2tlbGV0b25EYXRhLmNvbnN0cmFpbnRzO1xuXHRcdGNvbnN0IGNvbnN0cmFpbnRDb3VudCA9IGlucHV0LnJlYWRJbnQodHJ1ZSk7XG5cdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCBjb25zdHJhaW50Q291bnQ7IGkrKykge1xuXHRcdFx0Y29uc3QgbmFtZSA9IGlucHV0LnJlYWRTdHJpbmcoKTtcblx0XHRcdGlmICghbmFtZSkgdGhyb3cgbmV3IEVycm9yKFwiQ29uc3RyYWludCBkYXRhIG5hbWUgbXVzdCBub3QgYmUgbnVsbC5cIik7XG5cdFx0XHRsZXQgbm46IG51bWJlcjtcblx0XHRcdHN3aXRjaCAoaW5wdXQucmVhZEJ5dGUoKSkge1xuXHRcdFx0XHRjYXNlIENPTlNUUkFJTlRfSUs6IHtcblx0XHRcdFx0XHRjb25zdCBkYXRhID0gbmV3IElrQ29uc3RyYWludERhdGEobmFtZSk7XG5cdFx0XHRcdFx0bm4gPSBpbnB1dC5yZWFkSW50KHRydWUpO1xuXHRcdFx0XHRcdGZvciAobGV0IGlpID0gMDsgaWkgPCBubjsgaWkrKylcblx0XHRcdFx0XHRcdGRhdGEuYm9uZXMucHVzaChib25lc1tpbnB1dC5yZWFkSW50KHRydWUpXSk7XG5cdFx0XHRcdFx0ZGF0YS50YXJnZXQgPSBib25lc1tpbnB1dC5yZWFkSW50KHRydWUpXTtcblx0XHRcdFx0XHRjb25zdCBmbGFncyA9IGlucHV0LnJlYWRCeXRlKCk7XG5cdFx0XHRcdFx0ZGF0YS5za2luUmVxdWlyZWQgPSAoZmxhZ3MgJiAxKSAhPT0gMDtcblx0XHRcdFx0XHRpZiAoKGZsYWdzICYgMikgIT09IDApIGRhdGEuc2NhbGVZTW9kZSA9IGlucHV0LnJlYWRVbnNpZ25lZEJ5dGUoKTtcblx0XHRcdFx0XHRjb25zdCBzZXR1cCA9IGRhdGEuc2V0dXBQb3NlO1xuXHRcdFx0XHRcdHNldHVwLmJlbmREaXJlY3Rpb24gPSAoZmxhZ3MgJiA0KSAhPT0gMCA/IC0xIDogMTtcblx0XHRcdFx0XHRzZXR1cC5jb21wcmVzcyA9IChmbGFncyAmIDgpICE9PSAwO1xuXHRcdFx0XHRcdHNldHVwLnN0cmV0Y2ggPSAoZmxhZ3MgJiAxNikgIT09IDA7XG5cdFx0XHRcdFx0aWYgKChmbGFncyAmIDMyKSAhPT0gMCkgc2V0dXAubWl4ID0gKGZsYWdzICYgNjQpICE9PSAwID8gaW5wdXQucmVhZEZsb2F0KCkgOiAxO1xuXHRcdFx0XHRcdGlmICgoZmxhZ3MgJiAxMjgpICE9PSAwKSBzZXR1cC5zb2Z0bmVzcyA9IGlucHV0LnJlYWRGbG9hdCgpICogc2NhbGU7XG5cdFx0XHRcdFx0Y29uc3RyYWludHMucHVzaChkYXRhKTtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0fVxuXHRcdFx0XHRjYXNlIENPTlNUUkFJTlRfVFJBTlNGT1JNOiB7XG5cdFx0XHRcdFx0Y29uc3QgZGF0YSA9IG5ldyBUcmFuc2Zvcm1Db25zdHJhaW50RGF0YShuYW1lKTtcblx0XHRcdFx0XHRubiA9IGlucHV0LnJlYWRJbnQodHJ1ZSk7XG5cdFx0XHRcdFx0Zm9yIChsZXQgaWkgPSAwOyBpaSA8IG5uOyBpaSsrKVxuXHRcdFx0XHRcdFx0ZGF0YS5ib25lcy5wdXNoKGJvbmVzW2lucHV0LnJlYWRJbnQodHJ1ZSldKTtcblx0XHRcdFx0XHRkYXRhLnNvdXJjZSA9IGJvbmVzW2lucHV0LnJlYWRJbnQodHJ1ZSldO1xuXHRcdFx0XHRcdGxldCBmbGFncyA9IGlucHV0LnJlYWRVbnNpZ25lZEJ5dGUoKTtcblx0XHRcdFx0XHRkYXRhLnNraW5SZXF1aXJlZCA9IChmbGFncyAmIDEpICE9PSAwO1xuXHRcdFx0XHRcdGRhdGEubG9jYWxTb3VyY2UgPSAoZmxhZ3MgJiAyKSAhPT0gMDtcblx0XHRcdFx0XHRkYXRhLmxvY2FsVGFyZ2V0ID0gKGZsYWdzICYgNCkgIT09IDA7XG5cdFx0XHRcdFx0ZGF0YS5hZGRpdGl2ZSA9IChmbGFncyAmIDgpICE9PSAwO1xuXHRcdFx0XHRcdGRhdGEuY2xhbXAgPSAoZmxhZ3MgJiAxNikgIT09IDA7XG5cblx0XHRcdFx0XHRubiA9IGZsYWdzID4+IDU7XG5cdFx0XHRcdFx0Zm9yIChsZXQgaWkgPSAwLCB0bjogbnVtYmVyOyBpaSA8IG5uOyBpaSsrKSB7XG5cdFx0XHRcdFx0XHRsZXQgZnJvbVNjYWxlID0gMTtcblx0XHRcdFx0XHRcdGxldCBmcm9tOiBGcm9tUHJvcGVydHkgfCBudWxsO1xuXHRcdFx0XHRcdFx0c3dpdGNoIChpbnB1dC5yZWFkQnl0ZSgpKSB7XG5cdFx0XHRcdFx0XHRcdGNhc2UgMDogZnJvbSA9IG5ldyBGcm9tUm90YXRlKCk7IGJyZWFrO1xuXHRcdFx0XHRcdFx0XHRjYXNlIDE6IHtcblx0XHRcdFx0XHRcdFx0XHRmcm9tU2NhbGUgPSBzY2FsZTtcblx0XHRcdFx0XHRcdFx0XHRmcm9tID0gbmV3IEZyb21YKCk7XG5cdFx0XHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0Y2FzZSAyOiB7XG5cdFx0XHRcdFx0XHRcdFx0ZnJvbVNjYWxlID0gc2NhbGU7XG5cdFx0XHRcdFx0XHRcdFx0ZnJvbSA9IG5ldyBGcm9tWSgpO1xuXHRcdFx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdGNhc2UgMzogZnJvbSA9IG5ldyBGcm9tU2NhbGVYKCk7IGJyZWFrO1xuXHRcdFx0XHRcdFx0XHRjYXNlIDQ6IGZyb20gPSBuZXcgRnJvbVNjYWxlWSgpOyBicmVhaztcblx0XHRcdFx0XHRcdFx0Y2FzZSA1OiBmcm9tID0gbmV3IEZyb21TaGVhclkoKTsgYnJlYWs7XG5cdFx0XHRcdFx0XHRcdGRlZmF1bHQ6IGZyb20gPSBudWxsO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0aWYgKCFmcm9tKSBjb250aW51ZTtcblx0XHRcdFx0XHRcdGZyb20ub2Zmc2V0ID0gaW5wdXQucmVhZEZsb2F0KCkgKiBmcm9tU2NhbGU7XG5cdFx0XHRcdFx0XHR0biA9IGlucHV0LnJlYWRCeXRlKCk7XG5cdFx0XHRcdFx0XHRmb3IgKGxldCB0ID0gMDsgdCA8IHRuOyB0KyspIHtcblx0XHRcdFx0XHRcdFx0bGV0IHRvU2NhbGUgPSAxO1xuXHRcdFx0XHRcdFx0XHRsZXQgdG86IFRvUHJvcGVydHkgfCBudWxsO1xuXHRcdFx0XHRcdFx0XHRzd2l0Y2ggKGlucHV0LnJlYWRCeXRlKCkpIHtcblx0XHRcdFx0XHRcdFx0XHRjYXNlIDA6IHRvID0gbmV3IFRvUm90YXRlKCk7IGJyZWFrO1xuXHRcdFx0XHRcdFx0XHRcdGNhc2UgMToge1xuXHRcdFx0XHRcdFx0XHRcdFx0dG9TY2FsZSA9IHNjYWxlO1xuXHRcdFx0XHRcdFx0XHRcdFx0dG8gPSBuZXcgVG9YKCk7XG5cdFx0XHRcdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0Y2FzZSAyOiB7XG5cdFx0XHRcdFx0XHRcdFx0XHR0b1NjYWxlID0gc2NhbGU7XG5cdFx0XHRcdFx0XHRcdFx0XHR0byA9IG5ldyBUb1koKTtcblx0XHRcdFx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRjYXNlIDM6IHRvID0gbmV3IFRvU2NhbGVYKCk7IGJyZWFrO1xuXHRcdFx0XHRcdFx0XHRcdGNhc2UgNDogdG8gPSBuZXcgVG9TY2FsZVkoKTsgYnJlYWs7XG5cdFx0XHRcdFx0XHRcdFx0Y2FzZSA1OiB0byA9IG5ldyBUb1NoZWFyWSgpOyBicmVhaztcblx0XHRcdFx0XHRcdFx0XHRkZWZhdWx0OiB0byA9IG51bGw7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0aWYgKCF0bykgY29udGludWU7XG5cdFx0XHRcdFx0XHRcdHRvLm9mZnNldCA9IGlucHV0LnJlYWRGbG9hdCgpICogdG9TY2FsZTtcblx0XHRcdFx0XHRcdFx0dG8ubWF4ID0gaW5wdXQucmVhZEZsb2F0KCkgKiB0b1NjYWxlO1xuXHRcdFx0XHRcdFx0XHR0by5zY2FsZSA9IGlucHV0LnJlYWRGbG9hdCgpICogdG9TY2FsZSAvIGZyb21TY2FsZTtcblx0XHRcdFx0XHRcdFx0ZnJvbS50b1t0XSA9IHRvO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0ZGF0YS5wcm9wZXJ0aWVzW2lpXSA9IGZyb207XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdGZsYWdzID0gaW5wdXQucmVhZEJ5dGUoKTtcblx0XHRcdFx0XHRpZiAoKGZsYWdzICYgMSkgIT09IDApIGRhdGEub2Zmc2V0c1tUcmFuc2Zvcm1Db25zdHJhaW50RGF0YS5ST1RBVElPTl0gPSBpbnB1dC5yZWFkRmxvYXQoKTtcblx0XHRcdFx0XHRpZiAoKGZsYWdzICYgMikgIT09IDApIGRhdGEub2Zmc2V0c1tUcmFuc2Zvcm1Db25zdHJhaW50RGF0YS5YXSA9IGlucHV0LnJlYWRGbG9hdCgpICogc2NhbGU7XG5cdFx0XHRcdFx0aWYgKChmbGFncyAmIDQpICE9PSAwKSBkYXRhLm9mZnNldHNbVHJhbnNmb3JtQ29uc3RyYWludERhdGEuWV0gPSBpbnB1dC5yZWFkRmxvYXQoKSAqIHNjYWxlO1xuXHRcdFx0XHRcdGlmICgoZmxhZ3MgJiA4KSAhPT0gMCkgZGF0YS5vZmZzZXRzW1RyYW5zZm9ybUNvbnN0cmFpbnREYXRhLlNDQUxFWF0gPSBpbnB1dC5yZWFkRmxvYXQoKTtcblx0XHRcdFx0XHRpZiAoKGZsYWdzICYgMTYpICE9PSAwKSBkYXRhLm9mZnNldHNbVHJhbnNmb3JtQ29uc3RyYWludERhdGEuU0NBTEVZXSA9IGlucHV0LnJlYWRGbG9hdCgpO1xuXHRcdFx0XHRcdGlmICgoZmxhZ3MgJiAzMikgIT09IDApIGRhdGEub2Zmc2V0c1tUcmFuc2Zvcm1Db25zdHJhaW50RGF0YS5TSEVBUlldID0gaW5wdXQucmVhZEZsb2F0KCk7XG5cdFx0XHRcdFx0ZmxhZ3MgPSBpbnB1dC5yZWFkQnl0ZSgpO1xuXHRcdFx0XHRcdGNvbnN0IHNldHVwID0gZGF0YS5zZXR1cFBvc2U7XG5cdFx0XHRcdFx0aWYgKChmbGFncyAmIDEpICE9PSAwKSBzZXR1cC5taXhSb3RhdGUgPSBpbnB1dC5yZWFkRmxvYXQoKTtcblx0XHRcdFx0XHRpZiAoKGZsYWdzICYgMikgIT09IDApIHNldHVwLm1peFggPSBpbnB1dC5yZWFkRmxvYXQoKTtcblx0XHRcdFx0XHRpZiAoKGZsYWdzICYgNCkgIT09IDApIHNldHVwLm1peFkgPSBpbnB1dC5yZWFkRmxvYXQoKTtcblx0XHRcdFx0XHRpZiAoKGZsYWdzICYgOCkgIT09IDApIHNldHVwLm1peFNjYWxlWCA9IGlucHV0LnJlYWRGbG9hdCgpO1xuXHRcdFx0XHRcdGlmICgoZmxhZ3MgJiAxNikgIT09IDApIHNldHVwLm1peFNjYWxlWSA9IGlucHV0LnJlYWRGbG9hdCgpO1xuXHRcdFx0XHRcdGlmICgoZmxhZ3MgJiAzMikgIT09IDApIHNldHVwLm1peFNoZWFyWSA9IGlucHV0LnJlYWRGbG9hdCgpO1xuXHRcdFx0XHRcdGNvbnN0cmFpbnRzLnB1c2goZGF0YSk7XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdH1cblx0XHRcdFx0Y2FzZSBDT05TVFJBSU5UX1BBVEg6IHtcblx0XHRcdFx0XHRjb25zdCBkYXRhID0gbmV3IFBhdGhDb25zdHJhaW50RGF0YShuYW1lKTtcblx0XHRcdFx0XHRubiA9IGlucHV0LnJlYWRJbnQodHJ1ZSk7XG5cdFx0XHRcdFx0Zm9yIChsZXQgaWkgPSAwOyBpaSA8IG5uOyBpaSsrKVxuXHRcdFx0XHRcdFx0ZGF0YS5ib25lcy5wdXNoKGJvbmVzW2lucHV0LnJlYWRJbnQodHJ1ZSldKTtcblx0XHRcdFx0XHRkYXRhLnNsb3QgPSBza2VsZXRvbkRhdGEuc2xvdHNbaW5wdXQucmVhZEludCh0cnVlKV07XG5cdFx0XHRcdFx0Y29uc3QgZmxhZ3MgPSBpbnB1dC5yZWFkQnl0ZSgpO1xuXHRcdFx0XHRcdGRhdGEuc2tpblJlcXVpcmVkID0gKGZsYWdzICYgMSkgIT09IDA7XG5cdFx0XHRcdFx0ZGF0YS5wb3NpdGlvbk1vZGUgPSAoZmxhZ3MgPj4gMSkgJiAwYjE7XG5cdFx0XHRcdFx0ZGF0YS5zcGFjaW5nTW9kZSA9IChmbGFncyA+PiAyKSAmIDBiMTE7XG5cdFx0XHRcdFx0ZGF0YS5yb3RhdGVNb2RlID0gKGZsYWdzID4+IDQpICYgMGIxMTtcblx0XHRcdFx0XHRpZiAoKGZsYWdzICYgMTI4KSAhPT0gMCkgZGF0YS5vZmZzZXRSb3RhdGlvbiA9IGlucHV0LnJlYWRGbG9hdCgpO1xuXHRcdFx0XHRcdGNvbnN0IHNldHVwID0gZGF0YS5zZXR1cFBvc2U7XG5cdFx0XHRcdFx0c2V0dXAucG9zaXRpb24gPSBpbnB1dC5yZWFkRmxvYXQoKTtcblx0XHRcdFx0XHRpZiAoZGF0YS5wb3NpdGlvbk1vZGUgPT09IFBvc2l0aW9uTW9kZS5GaXhlZCkgc2V0dXAucG9zaXRpb24gKj0gc2NhbGU7XG5cdFx0XHRcdFx0c2V0dXAuc3BhY2luZyA9IGlucHV0LnJlYWRGbG9hdCgpO1xuXHRcdFx0XHRcdGlmIChkYXRhLnNwYWNpbmdNb2RlID09PSBTcGFjaW5nTW9kZS5MZW5ndGggfHwgZGF0YS5zcGFjaW5nTW9kZSA9PT0gU3BhY2luZ01vZGUuRml4ZWQpIHNldHVwLnNwYWNpbmcgKj0gc2NhbGU7XG5cdFx0XHRcdFx0c2V0dXAubWl4Um90YXRlID0gaW5wdXQucmVhZEZsb2F0KCk7XG5cdFx0XHRcdFx0c2V0dXAubWl4WCA9IGlucHV0LnJlYWRGbG9hdCgpO1xuXHRcdFx0XHRcdHNldHVwLm1peFkgPSBpbnB1dC5yZWFkRmxvYXQoKTtcblx0XHRcdFx0XHRjb25zdHJhaW50cy5wdXNoKGRhdGEpO1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGNhc2UgQ09OU1RSQUlOVF9QSFlTSUNTOiB7XG5cdFx0XHRcdFx0Y29uc3QgZGF0YSA9IG5ldyBQaHlzaWNzQ29uc3RyYWludERhdGEobmFtZSk7XG5cdFx0XHRcdFx0ZGF0YS5ib25lID0gYm9uZXNbaW5wdXQucmVhZEludCh0cnVlKV07XG5cdFx0XHRcdFx0bGV0IGZsYWdzID0gaW5wdXQucmVhZEJ5dGUoKTtcblx0XHRcdFx0XHRkYXRhLnNraW5SZXF1aXJlZCA9IChmbGFncyAmIDEpICE9PSAwO1xuXHRcdFx0XHRcdGlmICgoZmxhZ3MgJiAyKSAhPT0gMCkgZGF0YS54ID0gaW5wdXQucmVhZEZsb2F0KCk7XG5cdFx0XHRcdFx0aWYgKChmbGFncyAmIDQpICE9PSAwKSBkYXRhLnkgPSBpbnB1dC5yZWFkRmxvYXQoKTtcblx0XHRcdFx0XHRpZiAoKGZsYWdzICYgOCkgIT09IDApIGRhdGEucm90YXRlID0gaW5wdXQucmVhZEZsb2F0KCk7XG5cdFx0XHRcdFx0aWYgKChmbGFncyAmIDE2KSAhPT0gMCkge1xuXHRcdFx0XHRcdFx0bGV0IHNjYWxlWCA9IGlucHV0LnJlYWRGbG9hdCgpO1xuXHRcdFx0XHRcdFx0aWYgKHNjYWxlWCA8IC0yKSB7XG5cdFx0XHRcdFx0XHRcdGRhdGEuc2NhbGVZTW9kZSA9IFNjYWxlWU1vZGUuVm9sdW1lO1xuXHRcdFx0XHRcdFx0XHRzY2FsZVggPSAtMiAtIHNjYWxlWDtcblx0XHRcdFx0XHRcdH0gZWxzZSBpZiAoc2NhbGVYIDwgMCkge1xuXHRcdFx0XHRcdFx0XHRkYXRhLnNjYWxlWU1vZGUgPSBTY2FsZVlNb2RlLlVuaWZvcm07XG5cdFx0XHRcdFx0XHRcdHNjYWxlWCA9IC0xIC0gc2NhbGVYO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0ZGF0YS5zY2FsZVggPSBzY2FsZVg7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdGlmICgoZmxhZ3MgJiAzMikgIT09IDApIGRhdGEuc2hlYXJYID0gaW5wdXQucmVhZEZsb2F0KCk7XG5cdFx0XHRcdFx0ZGF0YS5saW1pdCA9ICgoZmxhZ3MgJiA2NCkgIT09IDAgPyBpbnB1dC5yZWFkRmxvYXQoKSA6IDUwMDApICogc2NhbGU7XG5cdFx0XHRcdFx0ZGF0YS5zdGVwID0gMSAvIGlucHV0LnJlYWRVbnNpZ25lZEJ5dGUoKTtcblx0XHRcdFx0XHRjb25zdCBzZXR1cCA9IGRhdGEuc2V0dXBQb3NlO1xuXHRcdFx0XHRcdHNldHVwLmluZXJ0aWEgPSBpbnB1dC5yZWFkRmxvYXQoKTtcblx0XHRcdFx0XHRzZXR1cC5zdHJlbmd0aCA9IGlucHV0LnJlYWRGbG9hdCgpO1xuXHRcdFx0XHRcdHNldHVwLmRhbXBpbmcgPSBpbnB1dC5yZWFkRmxvYXQoKTtcblx0XHRcdFx0XHRzZXR1cC5tYXNzSW52ZXJzZSA9IChmbGFncyAmIDEyOCkgIT09IDAgPyBpbnB1dC5yZWFkRmxvYXQoKSA6IDE7XG5cdFx0XHRcdFx0c2V0dXAud2luZCA9IGlucHV0LnJlYWRGbG9hdCgpO1xuXHRcdFx0XHRcdHNldHVwLmdyYXZpdHkgPSBpbnB1dC5yZWFkRmxvYXQoKTtcblx0XHRcdFx0XHRmbGFncyA9IGlucHV0LnJlYWRCeXRlKCk7XG5cdFx0XHRcdFx0aWYgKChmbGFncyAmIDEpICE9PSAwKSBkYXRhLmluZXJ0aWFHbG9iYWwgPSB0cnVlO1xuXHRcdFx0XHRcdGlmICgoZmxhZ3MgJiAyKSAhPT0gMCkgZGF0YS5zdHJlbmd0aEdsb2JhbCA9IHRydWU7XG5cdFx0XHRcdFx0aWYgKChmbGFncyAmIDQpICE9PSAwKSBkYXRhLmRhbXBpbmdHbG9iYWwgPSB0cnVlO1xuXHRcdFx0XHRcdGlmICgoZmxhZ3MgJiA4KSAhPT0gMCkgZGF0YS5tYXNzR2xvYmFsID0gdHJ1ZTtcblx0XHRcdFx0XHRpZiAoKGZsYWdzICYgMTYpICE9PSAwKSBkYXRhLndpbmRHbG9iYWwgPSB0cnVlO1xuXHRcdFx0XHRcdGlmICgoZmxhZ3MgJiAzMikgIT09IDApIGRhdGEuZ3Jhdml0eUdsb2JhbCA9IHRydWU7XG5cdFx0XHRcdFx0aWYgKChmbGFncyAmIDY0KSAhPT0gMCkgZGF0YS5taXhHbG9iYWwgPSB0cnVlO1xuXHRcdFx0XHRcdHNldHVwLm1peCA9IChmbGFncyAmIDEyOCkgIT09IDAgPyBpbnB1dC5yZWFkRmxvYXQoKSA6IDE7XG5cdFx0XHRcdFx0Y29uc3RyYWludHMucHVzaChkYXRhKTtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0fVxuXHRcdFx0XHRjYXNlIENPTlNUUkFJTlRfU0xJREVSOiB7XG5cdFx0XHRcdFx0Y29uc3QgZGF0YSA9IG5ldyBTbGlkZXJEYXRhKG5hbWUpO1xuXHRcdFx0XHRcdGNvbnN0IGZsYWdzID0gaW5wdXQucmVhZEJ5dGUoKTtcblx0XHRcdFx0XHRkYXRhLnNraW5SZXF1aXJlZCA9IChmbGFncyAmIDEpICE9PSAwO1xuXHRcdFx0XHRcdGRhdGEubG9vcCA9IChmbGFncyAmIDIpICE9PSAwO1xuXHRcdFx0XHRcdGRhdGEuYWRkaXRpdmUgPSAoZmxhZ3MgJiA0KSAhPT0gMDtcblx0XHRcdFx0XHRpZiAoKGZsYWdzICYgOCkgIT09IDApIGRhdGEuc2V0dXBQb3NlLnRpbWUgPSBpbnB1dC5yZWFkRmxvYXQoKTtcblx0XHRcdFx0XHRpZiAoKGZsYWdzICYgMTYpICE9PSAwKSBkYXRhLnNldHVwUG9zZS5taXggPSAoZmxhZ3MgJiAzMikgIT09IDAgPyBpbnB1dC5yZWFkRmxvYXQoKSA6IDE7XG5cdFx0XHRcdFx0aWYgKChmbGFncyAmIDY0KSAhPT0gMCkge1xuXHRcdFx0XHRcdFx0ZGF0YS5sb2NhbCA9IChmbGFncyAmIDEyOCkgIT09IDA7XG5cdFx0XHRcdFx0XHRkYXRhLmJvbmUgPSBib25lc1tpbnB1dC5yZWFkSW50KHRydWUpXTtcblx0XHRcdFx0XHRcdGNvbnN0IG9mZnNldCA9IGlucHV0LnJlYWRGbG9hdCgpO1xuXHRcdFx0XHRcdFx0bGV0IHByb3BlcnR5U2NhbGUgPSAxO1xuXHRcdFx0XHRcdFx0c3dpdGNoIChpbnB1dC5yZWFkQnl0ZSgpKSB7XG5cdFx0XHRcdFx0XHRcdGNhc2UgMDogZGF0YS5wcm9wZXJ0eSA9IG5ldyBGcm9tUm90YXRlKCk7IGJyZWFrO1xuXHRcdFx0XHRcdFx0XHRjYXNlIDE6IHtcblx0XHRcdFx0XHRcdFx0XHRwcm9wZXJ0eVNjYWxlID0gc2NhbGU7XG5cdFx0XHRcdFx0XHRcdFx0ZGF0YS5wcm9wZXJ0eSA9IG5ldyBGcm9tWCgpO1xuXHRcdFx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdGNhc2UgMjoge1xuXHRcdFx0XHRcdFx0XHRcdHByb3BlcnR5U2NhbGUgPSBzY2FsZTtcblx0XHRcdFx0XHRcdFx0XHRkYXRhLnByb3BlcnR5ID0gbmV3IEZyb21ZKCk7XG5cdFx0XHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0Y2FzZSAzOiBkYXRhLnByb3BlcnR5ID0gbmV3IEZyb21TY2FsZVgoKTsgYnJlYWs7XG5cdFx0XHRcdFx0XHRcdGNhc2UgNDogZGF0YS5wcm9wZXJ0eSA9IG5ldyBGcm9tU2NhbGVZKCk7IGJyZWFrO1xuXHRcdFx0XHRcdFx0XHRjYXNlIDU6IGRhdGEucHJvcGVydHkgPSBuZXcgRnJvbVNoZWFyWSgpOyBicmVhaztcblx0XHRcdFx0XHRcdFx0ZGVmYXVsdDogY29udGludWU7XG5cdFx0XHRcdFx0XHR9O1xuXHRcdFx0XHRcdFx0ZGF0YS5wcm9wZXJ0eS5vZmZzZXQgPSBvZmZzZXQgKiBwcm9wZXJ0eVNjYWxlO1xuXHRcdFx0XHRcdFx0ZGF0YS5vZmZzZXQgPSBpbnB1dC5yZWFkRmxvYXQoKTtcblx0XHRcdFx0XHRcdGRhdGEuc2NhbGUgPSBpbnB1dC5yZWFkRmxvYXQoKSAvIHByb3BlcnR5U2NhbGU7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdGNvbnN0cmFpbnRzLnB1c2goZGF0YSk7XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cblx0XHQvLyBEZWZhdWx0IHNraW4uXG5cdFx0Y29uc3QgZGVmYXVsdFNraW4gPSB0aGlzLnJlYWRTa2luKGlucHV0LCBza2VsZXRvbkRhdGEsIHRydWUsIG5vbmVzc2VudGlhbCk7XG5cdFx0aWYgKGRlZmF1bHRTa2luKSB7XG5cdFx0XHRza2VsZXRvbkRhdGEuZGVmYXVsdFNraW4gPSBkZWZhdWx0U2tpbjtcblx0XHRcdHNrZWxldG9uRGF0YS5za2lucy5wdXNoKGRlZmF1bHRTa2luKTtcblx0XHR9XG5cblx0XHQvLyBTa2lucy5cblx0XHR7XG5cdFx0XHRsZXQgaSA9IHNrZWxldG9uRGF0YS5za2lucy5sZW5ndGg7XG5cdFx0XHRVdGlscy5zZXRBcnJheVNpemUoc2tlbGV0b25EYXRhLnNraW5zLCBuID0gaSArIGlucHV0LnJlYWRJbnQodHJ1ZSkpO1xuXHRcdFx0Zm9yICg7IGkgPCBuOyBpKyspIHtcblx0XHRcdFx0Y29uc3Qgc2tpbiA9IHRoaXMucmVhZFNraW4oaW5wdXQsIHNrZWxldG9uRGF0YSwgZmFsc2UsIG5vbmVzc2VudGlhbCk7XG5cdFx0XHRcdGlmICghc2tpbikgdGhyb3cgbmV3IEVycm9yKFwicmVhZFNraW4oKSBzaG91bGQgbm90IGhhdmUgcmV0dXJuZWQgbnVsbC5cIik7XG5cdFx0XHRcdHNrZWxldG9uRGF0YS5za2luc1tpXSA9IHNraW47XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Ly8gTGlua2VkIG1lc2hlcy5cblx0XHRuID0gdGhpcy5saW5rZWRNZXNoZXMubGVuZ3RoO1xuXHRcdGZvciAobGV0IGkgPSAwOyBpIDwgbjsgaSsrKSB7XG5cdFx0XHRjb25zdCBsaW5rZWRNZXNoID0gdGhpcy5saW5rZWRNZXNoZXNbaV07XG5cdFx0XHRjb25zdCBza2luID0gc2tlbGV0b25EYXRhLnNraW5zW2xpbmtlZE1lc2guc2tpbkluZGV4XTtcblx0XHRcdGlmICghbGlua2VkTWVzaC5zb3VyY2UpIHRocm93IG5ldyBFcnJvcihcIkxpbmtlZCBtZXNoIHBhcmVudCBtdXN0IG5vdCBiZSBudWxsXCIpO1xuXHRcdFx0Y29uc3Qgc291cmNlID0gc2tpbi5nZXRBdHRhY2htZW50KGxpbmtlZE1lc2guc291cmNlSW5kZXgsIGxpbmtlZE1lc2guc291cmNlKTtcblx0XHRcdGlmICghc291cmNlKSB0aHJvdyBuZXcgRXJyb3IoYFNvdXJjZSBtZXNoIG5vdCBmb3VuZDogJHtsaW5rZWRNZXNoLnNvdXJjZX1gKTtcblx0XHRcdGxpbmtlZE1lc2gubWVzaC50aW1lbGluZUF0dGFjaG1lbnQgPSBsaW5rZWRNZXNoLmluaGVyaXRUaW1lbGluZXMgPyBzb3VyY2UgOiBsaW5rZWRNZXNoLm1lc2g7XG5cdFx0XHRsaW5rZWRNZXNoLm1lc2guc2V0U291cmNlTWVzaChzb3VyY2UgYXMgTWVzaEF0dGFjaG1lbnQpO1xuXHRcdFx0bGlua2VkTWVzaC5tZXNoLnVwZGF0ZVNlcXVlbmNlKCk7XG5cdFx0fVxuXHRcdHRoaXMubGlua2VkTWVzaGVzLmxlbmd0aCA9IDA7XG5cblx0XHQvLyBFdmVudHMuXG5cdFx0biA9IGlucHV0LnJlYWRJbnQodHJ1ZSk7XG5cdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCBuOyBpKyspIHtcblx0XHRcdGNvbnN0IGV2ZW50TmFtZSA9IGlucHV0LnJlYWRTdHJpbmcoKTtcblx0XHRcdGlmICghZXZlbnROYW1lKSB0aHJvdyBuZXcgRXJyb3IoXCJFdmVudCBkYXRhIG5hbWUgbXVzdCBub3QgYmUgbnVsbFwiKTtcblx0XHRcdGNvbnN0IGRhdGEgPSBuZXcgRXZlbnREYXRhKGV2ZW50TmFtZSk7XG5cdFx0XHRjb25zdCBzZXR1cCA9IGRhdGEuc2V0dXBQb3NlO1xuXHRcdFx0c2V0dXAuaW50VmFsdWUgPSBpbnB1dC5yZWFkSW50KGZhbHNlKTtcblx0XHRcdHNldHVwLmZsb2F0VmFsdWUgPSBpbnB1dC5yZWFkRmxvYXQoKTtcblx0XHRcdHNldHVwLnN0cmluZ1ZhbHVlID0gaW5wdXQucmVhZFN0cmluZygpO1xuXHRcdFx0ZGF0YS5fYXVkaW9QYXRoID0gaW5wdXQucmVhZFN0cmluZygpO1xuXHRcdFx0aWYgKGRhdGEuYXVkaW9QYXRoKSB7XG5cdFx0XHRcdHNldHVwLnZvbHVtZSA9IGlucHV0LnJlYWRGbG9hdCgpO1xuXHRcdFx0XHRzZXR1cC5iYWxhbmNlID0gaW5wdXQucmVhZEZsb2F0KCk7XG5cdFx0XHR9XG5cdFx0XHRza2VsZXRvbkRhdGEuZXZlbnRzLnB1c2goZGF0YSk7XG5cdFx0fVxuXG5cdFx0Ly8gQW5pbWF0aW9ucy5cblx0XHRjb25zdCBhbmltYXRpb25zID0gc2tlbGV0b25EYXRhLmFuaW1hdGlvbnM7XG5cdFx0biA9IGlucHV0LnJlYWRJbnQodHJ1ZSk7XG5cdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCBuOyBpKyspIHtcblx0XHRcdGNvbnN0IGFuaW1hdGlvbk5hbWUgPSBpbnB1dC5yZWFkU3RyaW5nKCk7XG5cdFx0XHRpZiAoIWFuaW1hdGlvbk5hbWUpIHRocm93IG5ldyBFcnJvcihcIkFuaW1hdGlvbiBuYW1lIG11c3Qgbm90IGJlIG51bGwuXCIpO1xuXHRcdFx0YW5pbWF0aW9ucy5wdXNoKHRoaXMucmVhZEFuaW1hdGlvbihpbnB1dCwgYW5pbWF0aW9uTmFtZSwgc2tlbGV0b25EYXRhLCBub25lc3NlbnRpYWwpKTtcblx0XHR9XG5cblx0XHRmb3IgKGxldCBpID0gMDsgaSA8IGNvbnN0cmFpbnRDb3VudDsgaSsrKSB7XG5cdFx0XHRjb25zdCBjb25zdHJhaW50ID0gY29uc3RyYWludHNbaV07XG5cdFx0XHRpZiAoY29uc3RyYWludCBpbnN0YW5jZW9mIFNsaWRlckRhdGEpIGNvbnN0cmFpbnQuYW5pbWF0aW9uID0gYW5pbWF0aW9uc1tpbnB1dC5yZWFkSW50KHRydWUpXTtcblx0XHR9XG5cblx0XHRyZXR1cm4gc2tlbGV0b25EYXRhO1xuXHR9XG5cblx0cHJpdmF0ZSByZWFkU2tpbiAoaW5wdXQ6IEJpbmFyeUlucHV0LCBza2VsZXRvbkRhdGE6IFNrZWxldG9uRGF0YSwgZGVmYXVsdFNraW46IGJvb2xlYW4sIG5vbmVzc2VudGlhbDogYm9vbGVhbik6IFNraW4gfCBudWxsIHtcblx0XHRsZXQgc2tpbiA9IG51bGw7XG5cdFx0bGV0IHNsb3RDb3VudCA9IDA7XG5cblx0XHRpZiAoZGVmYXVsdFNraW4pIHtcblx0XHRcdHNsb3RDb3VudCA9IGlucHV0LnJlYWRJbnQodHJ1ZSlcblx0XHRcdGlmIChzbG90Q291bnQgPT09IDApIHJldHVybiBudWxsO1xuXHRcdFx0c2tpbiA9IG5ldyBTa2luKFwiZGVmYXVsdFwiKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0Y29uc3Qgc2tpbk5hbWUgPSBpbnB1dC5yZWFkU3RyaW5nKCk7XG5cdFx0XHRpZiAoIXNraW5OYW1lKSB0aHJvdyBuZXcgRXJyb3IoXCJTa2luIG5hbWUgbXVzdCBub3QgYmUgbnVsbC5cIik7XG5cdFx0XHRza2luID0gbmV3IFNraW4oc2tpbk5hbWUpO1xuXG5cdFx0XHRpZiAobm9uZXNzZW50aWFsKSBDb2xvci5yZ2JhODg4OFRvQ29sb3Ioc2tpbi5jb2xvciwgaW5wdXQucmVhZEludDMyKCkpO1xuXG5cdFx0XHRsZXQgbiA9IGlucHV0LnJlYWRJbnQodHJ1ZSk7XG5cdFx0XHRsZXQgZnJvbTogb2JqZWN0W10gPSBza2VsZXRvbkRhdGEuYm9uZXMsIHRvOiBvYmplY3RbXSA9IHNraW4uYm9uZXM7XG5cdFx0XHRmb3IgKGxldCBpID0gMDsgaSA8IG47IGkrKylcblx0XHRcdFx0dG9baV0gPSBmcm9tW2lucHV0LnJlYWRJbnQodHJ1ZSldO1xuXG5cdFx0XHRuID0gaW5wdXQucmVhZEludCh0cnVlKTtcblx0XHRcdGZyb20gPSBza2VsZXRvbkRhdGEuY29uc3RyYWludHM7XG5cdFx0XHR0byA9IHNraW4uY29uc3RyYWludHM7XG5cdFx0XHRmb3IgKGxldCBpID0gMDsgaSA8IG47IGkrKylcblx0XHRcdFx0dG9baV0gPSBmcm9tW2lucHV0LnJlYWRJbnQodHJ1ZSldO1xuXG5cdFx0XHRzbG90Q291bnQgPSBpbnB1dC5yZWFkSW50KHRydWUpO1xuXHRcdH1cblxuXHRcdGZvciAobGV0IGkgPSAwOyBpIDwgc2xvdENvdW50OyBpKyspIHtcblx0XHRcdGNvbnN0IHNsb3RJbmRleCA9IGlucHV0LnJlYWRJbnQodHJ1ZSk7XG5cdFx0XHRmb3IgKGxldCBpaSA9IDAsIG5uID0gaW5wdXQucmVhZEludCh0cnVlKTsgaWkgPCBubjsgaWkrKykge1xuXHRcdFx0XHRjb25zdCBwbGFjZWhvbGRlciA9IGlucHV0LnJlYWRTdHJpbmdSZWYoKTtcblx0XHRcdFx0aWYgKCFwbGFjZWhvbGRlcilcblx0XHRcdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJBdHRhY2htZW50IG5hbWUgbXVzdCBub3QgYmUgbnVsbFwiKTtcblx0XHRcdFx0Y29uc3QgYXR0YWNobWVudCA9IHRoaXMucmVhZEF0dGFjaG1lbnQoaW5wdXQsIHNrZWxldG9uRGF0YSwgc2tpbiwgc2xvdEluZGV4LCBwbGFjZWhvbGRlciwgbm9uZXNzZW50aWFsKTtcblx0XHRcdFx0aWYgKGF0dGFjaG1lbnQpIHNraW4uc2V0QXR0YWNobWVudChzbG90SW5kZXgsIHBsYWNlaG9sZGVyLCBhdHRhY2htZW50KTtcblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIHNraW47XG5cdH1cblxuXHRwcml2YXRlIHJlYWRBdHRhY2htZW50IChpbnB1dDogQmluYXJ5SW5wdXQsIHNrZWxldG9uRGF0YTogU2tlbGV0b25EYXRhLCBza2luOiBTa2luLCBzbG90SW5kZXg6IG51bWJlciwgcGxhY2Vob2xkZXI6IHN0cmluZywgbm9uZXNzZW50aWFsOiBib29sZWFuKTogQXR0YWNobWVudCB8IG51bGwge1xuXHRcdGNvbnN0IHNjYWxlID0gdGhpcy5zY2FsZTtcblxuXHRcdGNvbnN0IGZsYWdzID0gaW5wdXQucmVhZEJ5dGUoKTtcblx0XHRjb25zdCBuYW1lID0gKGZsYWdzICYgOCkgIT09IDAgPyBpbnB1dC5yZWFkU3RyaW5nUmVmKCkgOiBwbGFjZWhvbGRlcjtcblx0XHRpZiAoIW5hbWUpIHRocm93IG5ldyBFcnJvcihcIkF0dGFjaG1lbnQgbmFtZSBtdXN0IG5vdCBiZSBudWxsXCIpO1xuXHRcdHN3aXRjaCAoKGZsYWdzICYgMGIxMTEpIGFzIEF0dGFjaG1lbnRUeXBlKSB7IC8vIEJVRz9cblx0XHRcdGNhc2UgQXR0YWNobWVudFR5cGUuUmVnaW9uOiB7XG5cdFx0XHRcdGxldCBwYXRoID0gKGZsYWdzICYgMTYpICE9PSAwID8gaW5wdXQucmVhZFN0cmluZ1JlZigpIDogbnVsbDtcblx0XHRcdFx0Y29uc3QgY29sb3IgPSAoZmxhZ3MgJiAzMikgIT09IDAgPyBpbnB1dC5yZWFkSW50MzIoKSA6IDB4ZmZmZmZmZmY7XG5cdFx0XHRcdGNvbnN0IHNlcXVlbmNlID0gdGhpcy5yZWFkU2VxdWVuY2UoaW5wdXQsIChmbGFncyAmIDY0KSAhPT0gMCk7XG5cdFx0XHRcdGNvbnN0IHJvdGF0aW9uID0gKGZsYWdzICYgMTI4KSAhPT0gMCA/IGlucHV0LnJlYWRGbG9hdCgpIDogMDtcblx0XHRcdFx0Y29uc3QgeCA9IGlucHV0LnJlYWRGbG9hdCgpO1xuXHRcdFx0XHRjb25zdCB5ID0gaW5wdXQucmVhZEZsb2F0KCk7XG5cdFx0XHRcdGNvbnN0IHNjYWxlWCA9IGlucHV0LnJlYWRGbG9hdCgpO1xuXHRcdFx0XHRjb25zdCBzY2FsZVkgPSBpbnB1dC5yZWFkRmxvYXQoKTtcblx0XHRcdFx0Y29uc3Qgd2lkdGggPSBpbnB1dC5yZWFkRmxvYXQoKTtcblx0XHRcdFx0Y29uc3QgaGVpZ2h0ID0gaW5wdXQucmVhZEZsb2F0KCk7XG5cblx0XHRcdFx0aWYgKCFwYXRoKSBwYXRoID0gbmFtZTtcblx0XHRcdFx0Y29uc3QgcmVnaW9uID0gdGhpcy5hdHRhY2htZW50TG9hZGVyLm5ld1JlZ2lvbkF0dGFjaG1lbnQoc2tpbiwgcGxhY2Vob2xkZXIsIG5hbWUsIHBhdGgsIHNlcXVlbmNlKTtcblx0XHRcdFx0aWYgKCFyZWdpb24pIHJldHVybiBudWxsO1xuXHRcdFx0XHRyZWdpb24ucGF0aCA9IHBhdGg7XG5cdFx0XHRcdHJlZ2lvbi54ID0geCAqIHNjYWxlO1xuXHRcdFx0XHRyZWdpb24ueSA9IHkgKiBzY2FsZTtcblx0XHRcdFx0cmVnaW9uLnNjYWxlWCA9IHNjYWxlWDtcblx0XHRcdFx0cmVnaW9uLnNjYWxlWSA9IHNjYWxlWTtcblx0XHRcdFx0cmVnaW9uLnJvdGF0aW9uID0gcm90YXRpb247XG5cdFx0XHRcdHJlZ2lvbi53aWR0aCA9IHdpZHRoICogc2NhbGU7XG5cdFx0XHRcdHJlZ2lvbi5oZWlnaHQgPSBoZWlnaHQgKiBzY2FsZTtcblx0XHRcdFx0Q29sb3IucmdiYTg4ODhUb0NvbG9yKHJlZ2lvbi5jb2xvciwgY29sb3IpO1xuXHRcdFx0XHRyZWdpb24udXBkYXRlU2VxdWVuY2UoKTtcblx0XHRcdFx0cmV0dXJuIHJlZ2lvbjtcblx0XHRcdH1cblx0XHRcdGNhc2UgQXR0YWNobWVudFR5cGUuQm91bmRpbmdCb3g6IHtcblx0XHRcdFx0Y29uc3QgdmVydGljZXMgPSB0aGlzLnJlYWRWZXJ0aWNlcyhpbnB1dCwgKGZsYWdzICYgMTYpICE9PSAwKTtcblx0XHRcdFx0Y29uc3QgY29sb3IgPSBub25lc3NlbnRpYWwgPyBpbnB1dC5yZWFkSW50MzIoKSA6IDA7XG5cblx0XHRcdFx0Y29uc3QgYm94ID0gdGhpcy5hdHRhY2htZW50TG9hZGVyLm5ld0JvdW5kaW5nQm94QXR0YWNobWVudChza2luLCBwbGFjZWhvbGRlciwgbmFtZSk7XG5cdFx0XHRcdGlmICghYm94KSByZXR1cm4gbnVsbDtcblx0XHRcdFx0Ym94LndvcmxkVmVydGljZXNMZW5ndGggPSB2ZXJ0aWNlcy5sZW5ndGg7XG5cdFx0XHRcdGJveC52ZXJ0aWNlcyA9IHZlcnRpY2VzLnZlcnRpY2VzO1xuXHRcdFx0XHRib3guYm9uZXMgPSB2ZXJ0aWNlcy5ib25lcztcblx0XHRcdFx0aWYgKG5vbmVzc2VudGlhbCkgQ29sb3IucmdiYTg4ODhUb0NvbG9yKGJveC5jb2xvciwgY29sb3IpO1xuXHRcdFx0XHRyZXR1cm4gYm94O1xuXHRcdFx0fVxuXHRcdFx0Y2FzZSBBdHRhY2htZW50VHlwZS5NZXNoOiB7XG5cdFx0XHRcdGxldCBwYXRoID0gKGZsYWdzICYgMTYpICE9PSAwID8gaW5wdXQucmVhZFN0cmluZ1JlZigpIDogbmFtZTtcblx0XHRcdFx0Y29uc3QgY29sb3IgPSAoZmxhZ3MgJiAzMikgIT09IDAgPyBpbnB1dC5yZWFkSW50MzIoKSA6IDB4ZmZmZmZmZmY7XG5cdFx0XHRcdGNvbnN0IHNlcXVlbmNlID0gdGhpcy5yZWFkU2VxdWVuY2UoaW5wdXQsIChmbGFncyAmIDY0KSAhPT0gMCk7XG5cdFx0XHRcdGNvbnN0IGh1bGxMZW5ndGggPSBpbnB1dC5yZWFkSW50KHRydWUpO1xuXHRcdFx0XHRjb25zdCB2ZXJ0aWNlcyA9IHRoaXMucmVhZFZlcnRpY2VzKGlucHV0LCAoZmxhZ3MgJiAxMjgpICE9PSAwKTtcblx0XHRcdFx0Y29uc3QgdXZzID0gdGhpcy5yZWFkRmxvYXRBcnJheShpbnB1dCwgdmVydGljZXMubGVuZ3RoLCAxKTtcblx0XHRcdFx0Y29uc3QgdHJpYW5nbGVzID0gdGhpcy5yZWFkU2hvcnRBcnJheShpbnB1dCwgKHZlcnRpY2VzLmxlbmd0aCAtIGh1bGxMZW5ndGggLSAyKSAqIDMpO1xuXG5cdFx0XHRcdGNvbnN0IHNsb3RDb3VudCA9IGlucHV0LnJlYWRJbnQodHJ1ZSk7XG5cdFx0XHRcdGxldCB0aW1lbGluZVNsb3RzID0gbnVsbDtcblx0XHRcdFx0aWYgKHNsb3RDb3VudCA+IDApIHtcblx0XHRcdFx0XHR0aW1lbGluZVNsb3RzID0gW107XG5cdFx0XHRcdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCBzbG90Q291bnQ7IGkrKylcblx0XHRcdFx0XHRcdHRpbWVsaW5lU2xvdHNbaV0gPSBpbnB1dC5yZWFkSW50KHRydWUpO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0bGV0IGVkZ2VzOiBudW1iZXJbXSA9IFtdO1xuXHRcdFx0XHRsZXQgd2lkdGggPSAwLCBoZWlnaHQgPSAwO1xuXHRcdFx0XHRpZiAobm9uZXNzZW50aWFsKSB7XG5cdFx0XHRcdFx0ZWRnZXMgPSB0aGlzLnJlYWRTaG9ydEFycmF5KGlucHV0LCBpbnB1dC5yZWFkSW50KHRydWUpKTtcblx0XHRcdFx0XHR3aWR0aCA9IGlucHV0LnJlYWRGbG9hdCgpO1xuXHRcdFx0XHRcdGhlaWdodCA9IGlucHV0LnJlYWRGbG9hdCgpO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0aWYgKCFwYXRoKSBwYXRoID0gbmFtZTtcblx0XHRcdFx0Y29uc3QgbWVzaCA9IHRoaXMuYXR0YWNobWVudExvYWRlci5uZXdNZXNoQXR0YWNobWVudChza2luLCBwbGFjZWhvbGRlciwgbmFtZSwgcGF0aCwgc2VxdWVuY2UpO1xuXHRcdFx0XHRpZiAoIW1lc2gpIHJldHVybiBudWxsO1xuXHRcdFx0XHRtZXNoLnBhdGggPSBwYXRoO1xuXHRcdFx0XHRDb2xvci5yZ2JhODg4OFRvQ29sb3IobWVzaC5jb2xvciwgY29sb3IpO1xuXHRcdFx0XHRtZXNoLmh1bGxMZW5ndGggPSBodWxsTGVuZ3RoIDw8IDE7XG5cdFx0XHRcdG1lc2guYm9uZXMgPSB2ZXJ0aWNlcy5ib25lcztcblx0XHRcdFx0bWVzaC52ZXJ0aWNlcyA9IHZlcnRpY2VzLnZlcnRpY2VzO1xuXHRcdFx0XHRtZXNoLndvcmxkVmVydGljZXNMZW5ndGggPSB2ZXJ0aWNlcy5sZW5ndGg7XG5cdFx0XHRcdG1lc2gucmVnaW9uVVZzID0gdXZzO1xuXHRcdFx0XHRtZXNoLnRyaWFuZ2xlcyA9IHRyaWFuZ2xlcztcblx0XHRcdFx0aWYgKHRpbWVsaW5lU2xvdHMpIG1lc2gudGltZWxpbmVTbG90cyA9IHRpbWVsaW5lU2xvdHM7XG5cdFx0XHRcdGlmIChub25lc3NlbnRpYWwpIHtcblx0XHRcdFx0XHRtZXNoLmVkZ2VzID0gZWRnZXM7XG5cdFx0XHRcdFx0bWVzaC53aWR0aCA9IHdpZHRoICogc2NhbGU7XG5cdFx0XHRcdFx0bWVzaC5oZWlnaHQgPSBoZWlnaHQgKiBzY2FsZTtcblx0XHRcdFx0fVxuXHRcdFx0XHRtZXNoLnVwZGF0ZVNlcXVlbmNlKCk7XG5cdFx0XHRcdHJldHVybiBtZXNoO1xuXHRcdFx0fVxuXHRcdFx0Y2FzZSBBdHRhY2htZW50VHlwZS5MaW5rZWRNZXNoOiB7XG5cdFx0XHRcdGNvbnN0IHBhdGggPSAoZmxhZ3MgJiAxNikgIT09IDAgPyBpbnB1dC5yZWFkU3RyaW5nUmVmKCkgOiBuYW1lO1xuXHRcdFx0XHRpZiAocGF0aCA9PSBudWxsKSB0aHJvdyBuZXcgRXJyb3IoXCJQYXRoIG9mIGxpbmtlZCBtZXNoIG11c3Qgbm90IGJlIG51bGxcIik7XG5cdFx0XHRcdGNvbnN0IGNvbG9yID0gKGZsYWdzICYgMzIpICE9PSAwID8gaW5wdXQucmVhZEludDMyKCkgOiAweGZmZmZmZmZmO1xuXHRcdFx0XHRjb25zdCBzZXF1ZW5jZSA9IHRoaXMucmVhZFNlcXVlbmNlKGlucHV0LCAoZmxhZ3MgJiA2NCkgIT09IDApO1xuXHRcdFx0XHRjb25zdCBpbmhlcml0VGltZWxpbmVzID0gKGZsYWdzICYgMTI4KSAhPT0gMDtcblx0XHRcdFx0Y29uc3Qgc291cmNlSW5kZXggPSBpbnB1dC5yZWFkSW50KHRydWUpO1xuXHRcdFx0XHRjb25zdCBza2luSW5kZXggPSBpbnB1dC5yZWFkSW50KHRydWUpO1xuXHRcdFx0XHRjb25zdCBzb3VyY2UgPSBpbnB1dC5yZWFkU3RyaW5nUmVmKCk7XG5cdFx0XHRcdGxldCB3aWR0aCA9IDAsIGhlaWdodCA9IDA7XG5cdFx0XHRcdGlmIChub25lc3NlbnRpYWwpIHtcblx0XHRcdFx0XHR3aWR0aCA9IGlucHV0LnJlYWRGbG9hdCgpO1xuXHRcdFx0XHRcdGhlaWdodCA9IGlucHV0LnJlYWRGbG9hdCgpO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Y29uc3QgbWVzaCA9IHRoaXMuYXR0YWNobWVudExvYWRlci5uZXdNZXNoQXR0YWNobWVudChza2luLCBwbGFjZWhvbGRlciwgbmFtZSwgcGF0aCwgc2VxdWVuY2UpO1xuXHRcdFx0XHRpZiAoIW1lc2gpIHJldHVybiBudWxsO1xuXHRcdFx0XHRtZXNoLnBhdGggPSBwYXRoO1xuXHRcdFx0XHRDb2xvci5yZ2JhODg4OFRvQ29sb3IobWVzaC5jb2xvciwgY29sb3IpO1xuXHRcdFx0XHRpZiAobm9uZXNzZW50aWFsKSB7XG5cdFx0XHRcdFx0bWVzaC53aWR0aCA9IHdpZHRoICogc2NhbGU7XG5cdFx0XHRcdFx0bWVzaC5oZWlnaHQgPSBoZWlnaHQgKiBzY2FsZTtcblx0XHRcdFx0fVxuXHRcdFx0XHR0aGlzLmxpbmtlZE1lc2hlcy5wdXNoKG5ldyBMaW5rZWRNZXNoKG1lc2gsIHNraW5JbmRleCwgc2xvdEluZGV4LCBzb3VyY2VJbmRleCwgc291cmNlLCBpbmhlcml0VGltZWxpbmVzKSk7XG5cdFx0XHRcdHJldHVybiBtZXNoO1xuXHRcdFx0fVxuXHRcdFx0Y2FzZSBBdHRhY2htZW50VHlwZS5QYXRoOiB7XG5cdFx0XHRcdGNvbnN0IGNsb3NlZCA9IChmbGFncyAmIDE2KSAhPT0gMDtcblx0XHRcdFx0Y29uc3QgY29uc3RhbnRTcGVlZCA9IChmbGFncyAmIDMyKSAhPT0gMDtcblx0XHRcdFx0Y29uc3QgdmVydGljZXMgPSB0aGlzLnJlYWRWZXJ0aWNlcyhpbnB1dCwgKGZsYWdzICYgNjQpICE9PSAwKTtcblxuXHRcdFx0XHRjb25zdCBsZW5ndGhzID0gdGhpcy5yZWFkRmxvYXRBcnJheShpbnB1dCwgdmVydGljZXMubGVuZ3RoIC8gNiwgc2NhbGUpO1xuXHRcdFx0XHRjb25zdCBjb2xvciA9IG5vbmVzc2VudGlhbCA/IGlucHV0LnJlYWRJbnQzMigpIDogMDtcblxuXHRcdFx0XHRjb25zdCBwYXRoID0gdGhpcy5hdHRhY2htZW50TG9hZGVyLm5ld1BhdGhBdHRhY2htZW50KHNraW4sIHBsYWNlaG9sZGVyLCBuYW1lKTtcblx0XHRcdFx0aWYgKCFwYXRoKSByZXR1cm4gbnVsbDtcblx0XHRcdFx0cGF0aC5jbG9zZWQgPSBjbG9zZWQ7XG5cdFx0XHRcdHBhdGguY29uc3RhbnRTcGVlZCA9IGNvbnN0YW50U3BlZWQ7XG5cdFx0XHRcdHBhdGgud29ybGRWZXJ0aWNlc0xlbmd0aCA9IHZlcnRpY2VzLmxlbmd0aDtcblx0XHRcdFx0cGF0aC52ZXJ0aWNlcyA9IHZlcnRpY2VzLnZlcnRpY2VzO1xuXHRcdFx0XHRwYXRoLmJvbmVzID0gdmVydGljZXMuYm9uZXM7XG5cdFx0XHRcdHBhdGgubGVuZ3RocyA9IGxlbmd0aHM7XG5cdFx0XHRcdGlmIChub25lc3NlbnRpYWwpIENvbG9yLnJnYmE4ODg4VG9Db2xvcihwYXRoLmNvbG9yLCBjb2xvcik7XG5cdFx0XHRcdHJldHVybiBwYXRoO1xuXHRcdFx0fVxuXHRcdFx0Y2FzZSBBdHRhY2htZW50VHlwZS5Qb2ludDoge1xuXHRcdFx0XHRjb25zdCByb3RhdGlvbiA9IGlucHV0LnJlYWRGbG9hdCgpO1xuXHRcdFx0XHRjb25zdCB4ID0gaW5wdXQucmVhZEZsb2F0KCk7XG5cdFx0XHRcdGNvbnN0IHkgPSBpbnB1dC5yZWFkRmxvYXQoKTtcblx0XHRcdFx0Y29uc3QgY29sb3IgPSBub25lc3NlbnRpYWwgPyBpbnB1dC5yZWFkSW50MzIoKSA6IDA7XG5cblx0XHRcdFx0Y29uc3QgcG9pbnQgPSB0aGlzLmF0dGFjaG1lbnRMb2FkZXIubmV3UG9pbnRBdHRhY2htZW50KHNraW4sIHBsYWNlaG9sZGVyLCBuYW1lKTtcblx0XHRcdFx0aWYgKCFwb2ludCkgcmV0dXJuIG51bGw7XG5cdFx0XHRcdHBvaW50LnggPSB4ICogc2NhbGU7XG5cdFx0XHRcdHBvaW50LnkgPSB5ICogc2NhbGU7XG5cdFx0XHRcdHBvaW50LnJvdGF0aW9uID0gcm90YXRpb247XG5cdFx0XHRcdGlmIChub25lc3NlbnRpYWwpIENvbG9yLnJnYmE4ODg4VG9Db2xvcihwb2ludC5jb2xvciwgY29sb3IpO1xuXHRcdFx0XHRyZXR1cm4gcG9pbnQ7XG5cdFx0XHR9XG5cdFx0XHRjYXNlIEF0dGFjaG1lbnRUeXBlLkNsaXBwaW5nOiB7XG5cdFx0XHRcdGNvbnN0IGVuZFNsb3RJbmRleCA9IGlucHV0LnJlYWRJbnQodHJ1ZSk7XG5cdFx0XHRcdGNvbnN0IHZlcnRpY2VzID0gdGhpcy5yZWFkVmVydGljZXMoaW5wdXQsIChmbGFncyAmIDE2KSAhPT0gMCk7XG5cdFx0XHRcdGNvbnN0IGNvbG9yID0gbm9uZXNzZW50aWFsID8gaW5wdXQucmVhZEludDMyKCkgOiAwO1xuXG5cdFx0XHRcdGNvbnN0IGNsaXAgPSB0aGlzLmF0dGFjaG1lbnRMb2FkZXIubmV3Q2xpcHBpbmdBdHRhY2htZW50KHNraW4sIHBsYWNlaG9sZGVyLCBuYW1lKTtcblx0XHRcdFx0aWYgKCFjbGlwKSByZXR1cm4gbnVsbDtcblx0XHRcdFx0Y2xpcC5lbmRTbG90ID0gc2tlbGV0b25EYXRhLnNsb3RzW2VuZFNsb3RJbmRleF07XG5cdFx0XHRcdGNsaXAuY29udmV4ID0gKGZsYWdzICYgMzIpICE9PSAwO1xuXHRcdFx0XHRjbGlwLmludmVyc2UgPSAoZmxhZ3MgJiA2NCkgIT09IDA7XG5cdFx0XHRcdGNsaXAud29ybGRWZXJ0aWNlc0xlbmd0aCA9IHZlcnRpY2VzLmxlbmd0aDtcblx0XHRcdFx0Y2xpcC52ZXJ0aWNlcyA9IHZlcnRpY2VzLnZlcnRpY2VzO1xuXHRcdFx0XHRjbGlwLmJvbmVzID0gdmVydGljZXMuYm9uZXM7XG5cdFx0XHRcdGlmIChub25lc3NlbnRpYWwpIENvbG9yLnJnYmE4ODg4VG9Db2xvcihjbGlwLmNvbG9yLCBjb2xvcik7XG5cdFx0XHRcdHJldHVybiBjbGlwO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdHByaXZhdGUgcmVhZFNlcXVlbmNlIChpbnB1dDogQmluYXJ5SW5wdXQsIGhhc1BhdGhTdWZmaXg6IGJvb2xlYW4pIHtcblx0XHRpZiAoIWhhc1BhdGhTdWZmaXgpIHJldHVybiBuZXcgU2VxdWVuY2UoMSwgZmFsc2UpO1xuXHRcdGNvbnN0IHNlcXVlbmNlID0gbmV3IFNlcXVlbmNlKGlucHV0LnJlYWRJbnQodHJ1ZSksIHRydWUpO1xuXHRcdHNlcXVlbmNlLnN0YXJ0ID0gaW5wdXQucmVhZEludCh0cnVlKTtcblx0XHRzZXF1ZW5jZS5kaWdpdHMgPSBpbnB1dC5yZWFkSW50KHRydWUpO1xuXHRcdHNlcXVlbmNlLnNldHVwSW5kZXggPSBpbnB1dC5yZWFkSW50KHRydWUpO1xuXHRcdHJldHVybiBzZXF1ZW5jZTtcblx0fVxuXG5cdHByaXZhdGUgcmVhZFZlcnRpY2VzIChpbnB1dDogQmluYXJ5SW5wdXQsIHdlaWdodGVkOiBib29sZWFuKTogVmVydGljZXMge1xuXHRcdGNvbnN0IHNjYWxlID0gdGhpcy5zY2FsZTtcblx0XHRjb25zdCB2ZXJ0ZXhDb3VudCA9IGlucHV0LnJlYWRJbnQodHJ1ZSk7XG5cdFx0Y29uc3QgbGVuZ3RoID0gdmVydGV4Q291bnQgPDwgMTtcblxuXHRcdGlmICghd2VpZ2h0ZWQpXG5cdFx0XHRyZXR1cm4gbmV3IFZlcnRpY2VzKG51bGwsIHRoaXMucmVhZEZsb2F0QXJyYXkoaW5wdXQsIGxlbmd0aCwgc2NhbGUpLCBsZW5ndGgpO1xuXG5cdFx0Y29uc3QgbiA9IGlucHV0LnJlYWRJbnQodHJ1ZSk7XG5cdFx0Y29uc3QgYm9uZXM6IG51bWJlcltdID0gW107XG5cdFx0Y29uc3Qgd2VpZ2h0czogbnVtYmVyW10gPSBbXTtcblx0XHRmb3IgKGxldCBiID0gMCwgdyA9IDA7IGIgPCBuOykge1xuXHRcdFx0Y29uc3QgYm9uZUNvdW50ID0gaW5wdXQucmVhZEludCh0cnVlKTtcblx0XHRcdGJvbmVzW2IrK10gPSBib25lQ291bnQ7XG5cdFx0XHRmb3IgKGxldCBpaSA9IDA7IGlpIDwgYm9uZUNvdW50OyBpaSsrLCB3ICs9IDMpIHtcblx0XHRcdFx0Ym9uZXNbYisrXSA9IGlucHV0LnJlYWRJbnQodHJ1ZSk7XG5cdFx0XHRcdHdlaWdodHNbd10gPSBpbnB1dC5yZWFkRmxvYXQoKSAqIHNjYWxlO1xuXHRcdFx0XHR3ZWlnaHRzW3cgKyAxXSA9IGlucHV0LnJlYWRGbG9hdCgpICogc2NhbGU7XG5cdFx0XHRcdHdlaWdodHNbdyArIDJdID0gaW5wdXQucmVhZEZsb2F0KCk7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHJldHVybiBuZXcgVmVydGljZXMoYm9uZXMsIFV0aWxzLnRvRmxvYXRBcnJheSh3ZWlnaHRzKSwgbGVuZ3RoKTtcblx0fVxuXG5cdHByaXZhdGUgcmVhZEZsb2F0QXJyYXkgKGlucHV0OiBCaW5hcnlJbnB1dCwgbjogbnVtYmVyLCBzY2FsZTogbnVtYmVyKTogbnVtYmVyW10ge1xuXHRcdGNvbnN0IGFycmF5OiBudW1iZXJbXSA9IFtdO1xuXHRcdGlmIChzY2FsZSA9PT0gMSkge1xuXHRcdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCBuOyBpKyspXG5cdFx0XHRcdGFycmF5W2ldID0gaW5wdXQucmVhZEZsb2F0KCk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGZvciAobGV0IGkgPSAwOyBpIDwgbjsgaSsrKVxuXHRcdFx0XHRhcnJheVtpXSA9IGlucHV0LnJlYWRGbG9hdCgpICogc2NhbGU7XG5cdFx0fVxuXHRcdHJldHVybiBhcnJheTtcblx0fVxuXG5cdHByaXZhdGUgcmVhZFNob3J0QXJyYXkgKGlucHV0OiBCaW5hcnlJbnB1dCwgbjogbnVtYmVyKTogbnVtYmVyW10ge1xuXHRcdGNvbnN0IGFycmF5OiBudW1iZXJbXSA9IFtdO1xuXHRcdGZvciAobGV0IGkgPSAwOyBpIDwgbjsgaSsrKVxuXHRcdFx0YXJyYXlbaV0gPSBpbnB1dC5yZWFkSW50KHRydWUpO1xuXHRcdHJldHVybiBhcnJheTtcblx0fVxuXG5cdHByaXZhdGUgcmVhZEFuaW1hdGlvbiAoaW5wdXQ6IEJpbmFyeUlucHV0LCBuYW1lOiBzdHJpbmcsIHNrZWxldG9uRGF0YTogU2tlbGV0b25EYXRhLCBub25lc3NlbnRpYWw6IGJvb2xlYW4pOiBBbmltYXRpb24ge1xuXHRcdGlucHV0LnJlYWRJbnQodHJ1ZSk7IC8vIE51bWJlciBvZiB0aW1lbGluZXMuXG5cdFx0Y29uc3QgdGltZWxpbmVzOiBUaW1lbGluZVtdID0gW107XG5cdFx0Y29uc3Qgc2NhbGUgPSB0aGlzLnNjYWxlO1xuXG5cdFx0Ly8gU2xvdCB0aW1lbGluZXMuXG5cdFx0Zm9yIChsZXQgaSA9IDAsIG4gPSBpbnB1dC5yZWFkSW50KHRydWUpOyBpIDwgbjsgaSsrKSB7XG5cdFx0XHRjb25zdCBzbG90SW5kZXggPSBpbnB1dC5yZWFkSW50KHRydWUpO1xuXHRcdFx0Zm9yIChsZXQgaWkgPSAwLCBubiA9IGlucHV0LnJlYWRJbnQodHJ1ZSk7IGlpIDwgbm47IGlpKyspIHtcblx0XHRcdFx0Y29uc3QgdGltZWxpbmVUeXBlID0gaW5wdXQucmVhZEJ5dGUoKTtcblx0XHRcdFx0Y29uc3QgZnJhbWVDb3VudCA9IGlucHV0LnJlYWRJbnQodHJ1ZSk7XG5cdFx0XHRcdGNvbnN0IGZyYW1lTGFzdCA9IGZyYW1lQ291bnQgLSAxO1xuXHRcdFx0XHRzd2l0Y2ggKHRpbWVsaW5lVHlwZSkge1xuXHRcdFx0XHRcdGNhc2UgU0xPVF9BVFRBQ0hNRU5UOiB7XG5cdFx0XHRcdFx0XHRjb25zdCB0aW1lbGluZSA9IG5ldyBBdHRhY2htZW50VGltZWxpbmUoZnJhbWVDb3VudCwgc2xvdEluZGV4KTtcblx0XHRcdFx0XHRcdGZvciAobGV0IGZyYW1lID0gMDsgZnJhbWUgPCBmcmFtZUNvdW50OyBmcmFtZSsrKVxuXHRcdFx0XHRcdFx0XHR0aW1lbGluZS5zZXRGcmFtZShmcmFtZSwgaW5wdXQucmVhZEZsb2F0KCksIGlucHV0LnJlYWRTdHJpbmdSZWYoKSk7XG5cdFx0XHRcdFx0XHR0aW1lbGluZXMucHVzaCh0aW1lbGluZSk7XG5cdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0Y2FzZSBTTE9UX1JHQkE6IHtcblx0XHRcdFx0XHRcdGNvbnN0IGJlemllckNvdW50ID0gaW5wdXQucmVhZEludCh0cnVlKTtcblx0XHRcdFx0XHRcdGNvbnN0IHRpbWVsaW5lID0gbmV3IFJHQkFUaW1lbGluZShmcmFtZUNvdW50LCBiZXppZXJDb3VudCwgc2xvdEluZGV4KTtcblxuXHRcdFx0XHRcdFx0bGV0IHRpbWUgPSBpbnB1dC5yZWFkRmxvYXQoKTtcblx0XHRcdFx0XHRcdGxldCByID0gaW5wdXQucmVhZFVuc2lnbmVkQnl0ZSgpIC8gMjU1LjA7XG5cdFx0XHRcdFx0XHRsZXQgZyA9IGlucHV0LnJlYWRVbnNpZ25lZEJ5dGUoKSAvIDI1NS4wO1xuXHRcdFx0XHRcdFx0bGV0IGIgPSBpbnB1dC5yZWFkVW5zaWduZWRCeXRlKCkgLyAyNTUuMDtcblx0XHRcdFx0XHRcdGxldCBhID0gaW5wdXQucmVhZFVuc2lnbmVkQnl0ZSgpIC8gMjU1LjA7XG5cblx0XHRcdFx0XHRcdGZvciAobGV0IGZyYW1lID0gMCwgYmV6aWVyID0gMDsgOyBmcmFtZSsrKSB7XG5cdFx0XHRcdFx0XHRcdHRpbWVsaW5lLnNldEZyYW1lKGZyYW1lLCB0aW1lLCByLCBnLCBiLCBhKTtcblx0XHRcdFx0XHRcdFx0aWYgKGZyYW1lID09PSBmcmFtZUxhc3QpIGJyZWFrO1xuXG5cdFx0XHRcdFx0XHRcdGNvbnN0IHRpbWUyID0gaW5wdXQucmVhZEZsb2F0KCk7XG5cdFx0XHRcdFx0XHRcdGNvbnN0IHIyID0gaW5wdXQucmVhZFVuc2lnbmVkQnl0ZSgpIC8gMjU1LjA7XG5cdFx0XHRcdFx0XHRcdGNvbnN0IGcyID0gaW5wdXQucmVhZFVuc2lnbmVkQnl0ZSgpIC8gMjU1LjA7XG5cdFx0XHRcdFx0XHRcdGNvbnN0IGIyID0gaW5wdXQucmVhZFVuc2lnbmVkQnl0ZSgpIC8gMjU1LjA7XG5cdFx0XHRcdFx0XHRcdGNvbnN0IGEyID0gaW5wdXQucmVhZFVuc2lnbmVkQnl0ZSgpIC8gMjU1LjA7XG5cblx0XHRcdFx0XHRcdFx0c3dpdGNoIChpbnB1dC5yZWFkQnl0ZSgpKSB7XG5cdFx0XHRcdFx0XHRcdFx0Y2FzZSBDVVJWRV9TVEVQUEVEOlxuXHRcdFx0XHRcdFx0XHRcdFx0dGltZWxpbmUuc2V0U3RlcHBlZChmcmFtZSk7XG5cdFx0XHRcdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHRcdFx0XHRjYXNlIENVUlZFX0JFWklFUjpcblx0XHRcdFx0XHRcdFx0XHRcdHNldEJlemllcihpbnB1dCwgdGltZWxpbmUsIGJlemllcisrLCBmcmFtZSwgMCwgdGltZSwgdGltZTIsIHIsIHIyLCAxKTtcblx0XHRcdFx0XHRcdFx0XHRcdHNldEJlemllcihpbnB1dCwgdGltZWxpbmUsIGJlemllcisrLCBmcmFtZSwgMSwgdGltZSwgdGltZTIsIGcsIGcyLCAxKTtcblx0XHRcdFx0XHRcdFx0XHRcdHNldEJlemllcihpbnB1dCwgdGltZWxpbmUsIGJlemllcisrLCBmcmFtZSwgMiwgdGltZSwgdGltZTIsIGIsIGIyLCAxKTtcblx0XHRcdFx0XHRcdFx0XHRcdHNldEJlemllcihpbnB1dCwgdGltZWxpbmUsIGJlemllcisrLCBmcmFtZSwgMywgdGltZSwgdGltZTIsIGEsIGEyLCAxKTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHR0aW1lID0gdGltZTI7XG5cdFx0XHRcdFx0XHRcdHIgPSByMjtcblx0XHRcdFx0XHRcdFx0ZyA9IGcyO1xuXHRcdFx0XHRcdFx0XHRiID0gYjI7XG5cdFx0XHRcdFx0XHRcdGEgPSBhMjtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdHRpbWVsaW5lcy5wdXNoKHRpbWVsaW5lKTtcblx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRjYXNlIFNMT1RfUkdCOiB7XG5cdFx0XHRcdFx0XHRjb25zdCBiZXppZXJDb3VudCA9IGlucHV0LnJlYWRJbnQodHJ1ZSk7XG5cdFx0XHRcdFx0XHRjb25zdCB0aW1lbGluZSA9IG5ldyBSR0JUaW1lbGluZShmcmFtZUNvdW50LCBiZXppZXJDb3VudCwgc2xvdEluZGV4KTtcblxuXHRcdFx0XHRcdFx0bGV0IHRpbWUgPSBpbnB1dC5yZWFkRmxvYXQoKTtcblx0XHRcdFx0XHRcdGxldCByID0gaW5wdXQucmVhZFVuc2lnbmVkQnl0ZSgpIC8gMjU1LjA7XG5cdFx0XHRcdFx0XHRsZXQgZyA9IGlucHV0LnJlYWRVbnNpZ25lZEJ5dGUoKSAvIDI1NS4wO1xuXHRcdFx0XHRcdFx0bGV0IGIgPSBpbnB1dC5yZWFkVW5zaWduZWRCeXRlKCkgLyAyNTUuMDtcblxuXHRcdFx0XHRcdFx0Zm9yIChsZXQgZnJhbWUgPSAwLCBiZXppZXIgPSAwOyA7IGZyYW1lKyspIHtcblx0XHRcdFx0XHRcdFx0dGltZWxpbmUuc2V0RnJhbWUoZnJhbWUsIHRpbWUsIHIsIGcsIGIpO1xuXHRcdFx0XHRcdFx0XHRpZiAoZnJhbWUgPT09IGZyYW1lTGFzdCkgYnJlYWs7XG5cblx0XHRcdFx0XHRcdFx0Y29uc3QgdGltZTIgPSBpbnB1dC5yZWFkRmxvYXQoKTtcblx0XHRcdFx0XHRcdFx0Y29uc3QgcjIgPSBpbnB1dC5yZWFkVW5zaWduZWRCeXRlKCkgLyAyNTUuMDtcblx0XHRcdFx0XHRcdFx0Y29uc3QgZzIgPSBpbnB1dC5yZWFkVW5zaWduZWRCeXRlKCkgLyAyNTUuMDtcblx0XHRcdFx0XHRcdFx0Y29uc3QgYjIgPSBpbnB1dC5yZWFkVW5zaWduZWRCeXRlKCkgLyAyNTUuMDtcblxuXHRcdFx0XHRcdFx0XHRzd2l0Y2ggKGlucHV0LnJlYWRCeXRlKCkpIHtcblx0XHRcdFx0XHRcdFx0XHRjYXNlIENVUlZFX1NURVBQRUQ6XG5cdFx0XHRcdFx0XHRcdFx0XHR0aW1lbGluZS5zZXRTdGVwcGVkKGZyYW1lKTtcblx0XHRcdFx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdFx0XHRcdGNhc2UgQ1VSVkVfQkVaSUVSOlxuXHRcdFx0XHRcdFx0XHRcdFx0c2V0QmV6aWVyKGlucHV0LCB0aW1lbGluZSwgYmV6aWVyKyssIGZyYW1lLCAwLCB0aW1lLCB0aW1lMiwgciwgcjIsIDEpO1xuXHRcdFx0XHRcdFx0XHRcdFx0c2V0QmV6aWVyKGlucHV0LCB0aW1lbGluZSwgYmV6aWVyKyssIGZyYW1lLCAxLCB0aW1lLCB0aW1lMiwgZywgZzIsIDEpO1xuXHRcdFx0XHRcdFx0XHRcdFx0c2V0QmV6aWVyKGlucHV0LCB0aW1lbGluZSwgYmV6aWVyKyssIGZyYW1lLCAyLCB0aW1lLCB0aW1lMiwgYiwgYjIsIDEpO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdHRpbWUgPSB0aW1lMjtcblx0XHRcdFx0XHRcdFx0ciA9IHIyO1xuXHRcdFx0XHRcdFx0XHRnID0gZzI7XG5cdFx0XHRcdFx0XHRcdGIgPSBiMjtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdHRpbWVsaW5lcy5wdXNoKHRpbWVsaW5lKTtcblx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRjYXNlIFNMT1RfUkdCQTI6IHtcblx0XHRcdFx0XHRcdGNvbnN0IGJlemllckNvdW50ID0gaW5wdXQucmVhZEludCh0cnVlKTtcblx0XHRcdFx0XHRcdGNvbnN0IHRpbWVsaW5lID0gbmV3IFJHQkEyVGltZWxpbmUoZnJhbWVDb3VudCwgYmV6aWVyQ291bnQsIHNsb3RJbmRleCk7XG5cblx0XHRcdFx0XHRcdGxldCB0aW1lID0gaW5wdXQucmVhZEZsb2F0KCk7XG5cdFx0XHRcdFx0XHRsZXQgciA9IGlucHV0LnJlYWRVbnNpZ25lZEJ5dGUoKSAvIDI1NS4wO1xuXHRcdFx0XHRcdFx0bGV0IGcgPSBpbnB1dC5yZWFkVW5zaWduZWRCeXRlKCkgLyAyNTUuMDtcblx0XHRcdFx0XHRcdGxldCBiID0gaW5wdXQucmVhZFVuc2lnbmVkQnl0ZSgpIC8gMjU1LjA7XG5cdFx0XHRcdFx0XHRsZXQgYSA9IGlucHV0LnJlYWRVbnNpZ25lZEJ5dGUoKSAvIDI1NS4wO1xuXHRcdFx0XHRcdFx0bGV0IHIyID0gaW5wdXQucmVhZFVuc2lnbmVkQnl0ZSgpIC8gMjU1LjA7XG5cdFx0XHRcdFx0XHRsZXQgZzIgPSBpbnB1dC5yZWFkVW5zaWduZWRCeXRlKCkgLyAyNTUuMDtcblx0XHRcdFx0XHRcdGxldCBiMiA9IGlucHV0LnJlYWRVbnNpZ25lZEJ5dGUoKSAvIDI1NS4wO1xuXG5cdFx0XHRcdFx0XHRmb3IgKGxldCBmcmFtZSA9IDAsIGJlemllciA9IDA7IDsgZnJhbWUrKykge1xuXHRcdFx0XHRcdFx0XHR0aW1lbGluZS5zZXRGcmFtZShmcmFtZSwgdGltZSwgciwgZywgYiwgYSwgcjIsIGcyLCBiMik7XG5cdFx0XHRcdFx0XHRcdGlmIChmcmFtZSA9PT0gZnJhbWVMYXN0KSBicmVhaztcblx0XHRcdFx0XHRcdFx0Y29uc3QgdGltZTIgPSBpbnB1dC5yZWFkRmxvYXQoKTtcblx0XHRcdFx0XHRcdFx0Y29uc3QgbnIgPSBpbnB1dC5yZWFkVW5zaWduZWRCeXRlKCkgLyAyNTUuMDtcblx0XHRcdFx0XHRcdFx0Y29uc3QgbmcgPSBpbnB1dC5yZWFkVW5zaWduZWRCeXRlKCkgLyAyNTUuMDtcblx0XHRcdFx0XHRcdFx0Y29uc3QgbmIgPSBpbnB1dC5yZWFkVW5zaWduZWRCeXRlKCkgLyAyNTUuMDtcblx0XHRcdFx0XHRcdFx0Y29uc3QgbmEgPSBpbnB1dC5yZWFkVW5zaWduZWRCeXRlKCkgLyAyNTUuMDtcblx0XHRcdFx0XHRcdFx0Y29uc3QgbnIyID0gaW5wdXQucmVhZFVuc2lnbmVkQnl0ZSgpIC8gMjU1LjA7XG5cdFx0XHRcdFx0XHRcdGNvbnN0IG5nMiA9IGlucHV0LnJlYWRVbnNpZ25lZEJ5dGUoKSAvIDI1NS4wO1xuXHRcdFx0XHRcdFx0XHRjb25zdCBuYjIgPSBpbnB1dC5yZWFkVW5zaWduZWRCeXRlKCkgLyAyNTUuMDtcblxuXHRcdFx0XHRcdFx0XHRzd2l0Y2ggKGlucHV0LnJlYWRCeXRlKCkpIHtcblx0XHRcdFx0XHRcdFx0XHRjYXNlIENVUlZFX1NURVBQRUQ6XG5cdFx0XHRcdFx0XHRcdFx0XHR0aW1lbGluZS5zZXRTdGVwcGVkKGZyYW1lKTtcblx0XHRcdFx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdFx0XHRcdGNhc2UgQ1VSVkVfQkVaSUVSOlxuXHRcdFx0XHRcdFx0XHRcdFx0c2V0QmV6aWVyKGlucHV0LCB0aW1lbGluZSwgYmV6aWVyKyssIGZyYW1lLCAwLCB0aW1lLCB0aW1lMiwgciwgbnIsIDEpO1xuXHRcdFx0XHRcdFx0XHRcdFx0c2V0QmV6aWVyKGlucHV0LCB0aW1lbGluZSwgYmV6aWVyKyssIGZyYW1lLCAxLCB0aW1lLCB0aW1lMiwgZywgbmcsIDEpO1xuXHRcdFx0XHRcdFx0XHRcdFx0c2V0QmV6aWVyKGlucHV0LCB0aW1lbGluZSwgYmV6aWVyKyssIGZyYW1lLCAyLCB0aW1lLCB0aW1lMiwgYiwgbmIsIDEpO1xuXHRcdFx0XHRcdFx0XHRcdFx0c2V0QmV6aWVyKGlucHV0LCB0aW1lbGluZSwgYmV6aWVyKyssIGZyYW1lLCAzLCB0aW1lLCB0aW1lMiwgYSwgbmEsIDEpO1xuXHRcdFx0XHRcdFx0XHRcdFx0c2V0QmV6aWVyKGlucHV0LCB0aW1lbGluZSwgYmV6aWVyKyssIGZyYW1lLCA0LCB0aW1lLCB0aW1lMiwgcjIsIG5yMiwgMSk7XG5cdFx0XHRcdFx0XHRcdFx0XHRzZXRCZXppZXIoaW5wdXQsIHRpbWVsaW5lLCBiZXppZXIrKywgZnJhbWUsIDUsIHRpbWUsIHRpbWUyLCBnMiwgbmcyLCAxKTtcblx0XHRcdFx0XHRcdFx0XHRcdHNldEJlemllcihpbnB1dCwgdGltZWxpbmUsIGJlemllcisrLCBmcmFtZSwgNiwgdGltZSwgdGltZTIsIGIyLCBuYjIsIDEpO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdHRpbWUgPSB0aW1lMjtcblx0XHRcdFx0XHRcdFx0ciA9IG5yO1xuXHRcdFx0XHRcdFx0XHRnID0gbmc7XG5cdFx0XHRcdFx0XHRcdGIgPSBuYjtcblx0XHRcdFx0XHRcdFx0YSA9IG5hO1xuXHRcdFx0XHRcdFx0XHRyMiA9IG5yMjtcblx0XHRcdFx0XHRcdFx0ZzIgPSBuZzI7XG5cdFx0XHRcdFx0XHRcdGIyID0gbmIyO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0dGltZWxpbmVzLnB1c2godGltZWxpbmUpO1xuXHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdGNhc2UgU0xPVF9SR0IyOiB7XG5cdFx0XHRcdFx0XHRjb25zdCBiZXppZXJDb3VudCA9IGlucHV0LnJlYWRJbnQodHJ1ZSk7XG5cdFx0XHRcdFx0XHRjb25zdCB0aW1lbGluZSA9IG5ldyBSR0IyVGltZWxpbmUoZnJhbWVDb3VudCwgYmV6aWVyQ291bnQsIHNsb3RJbmRleCk7XG5cblx0XHRcdFx0XHRcdGxldCB0aW1lID0gaW5wdXQucmVhZEZsb2F0KCk7XG5cdFx0XHRcdFx0XHRsZXQgciA9IGlucHV0LnJlYWRVbnNpZ25lZEJ5dGUoKSAvIDI1NS4wO1xuXHRcdFx0XHRcdFx0bGV0IGcgPSBpbnB1dC5yZWFkVW5zaWduZWRCeXRlKCkgLyAyNTUuMDtcblx0XHRcdFx0XHRcdGxldCBiID0gaW5wdXQucmVhZFVuc2lnbmVkQnl0ZSgpIC8gMjU1LjA7XG5cdFx0XHRcdFx0XHRsZXQgcjIgPSBpbnB1dC5yZWFkVW5zaWduZWRCeXRlKCkgLyAyNTUuMDtcblx0XHRcdFx0XHRcdGxldCBnMiA9IGlucHV0LnJlYWRVbnNpZ25lZEJ5dGUoKSAvIDI1NS4wO1xuXHRcdFx0XHRcdFx0bGV0IGIyID0gaW5wdXQucmVhZFVuc2lnbmVkQnl0ZSgpIC8gMjU1LjA7XG5cblx0XHRcdFx0XHRcdGZvciAobGV0IGZyYW1lID0gMCwgYmV6aWVyID0gMDsgOyBmcmFtZSsrKSB7XG5cdFx0XHRcdFx0XHRcdHRpbWVsaW5lLnNldEZyYW1lKGZyYW1lLCB0aW1lLCByLCBnLCBiLCByMiwgZzIsIGIyKTtcblx0XHRcdFx0XHRcdFx0aWYgKGZyYW1lID09PSBmcmFtZUxhc3QpIGJyZWFrO1xuXHRcdFx0XHRcdFx0XHRjb25zdCB0aW1lMiA9IGlucHV0LnJlYWRGbG9hdCgpO1xuXHRcdFx0XHRcdFx0XHRjb25zdCBuciA9IGlucHV0LnJlYWRVbnNpZ25lZEJ5dGUoKSAvIDI1NS4wO1xuXHRcdFx0XHRcdFx0XHRjb25zdCBuZyA9IGlucHV0LnJlYWRVbnNpZ25lZEJ5dGUoKSAvIDI1NS4wO1xuXHRcdFx0XHRcdFx0XHRjb25zdCBuYiA9IGlucHV0LnJlYWRVbnNpZ25lZEJ5dGUoKSAvIDI1NS4wO1xuXHRcdFx0XHRcdFx0XHRjb25zdCBucjIgPSBpbnB1dC5yZWFkVW5zaWduZWRCeXRlKCkgLyAyNTUuMDtcblx0XHRcdFx0XHRcdFx0Y29uc3QgbmcyID0gaW5wdXQucmVhZFVuc2lnbmVkQnl0ZSgpIC8gMjU1LjA7XG5cdFx0XHRcdFx0XHRcdGNvbnN0IG5iMiA9IGlucHV0LnJlYWRVbnNpZ25lZEJ5dGUoKSAvIDI1NS4wO1xuXG5cdFx0XHRcdFx0XHRcdHN3aXRjaCAoaW5wdXQucmVhZEJ5dGUoKSkge1xuXHRcdFx0XHRcdFx0XHRcdGNhc2UgQ1VSVkVfU1RFUFBFRDpcblx0XHRcdFx0XHRcdFx0XHRcdHRpbWVsaW5lLnNldFN0ZXBwZWQoZnJhbWUpO1xuXHRcdFx0XHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0XHRcdFx0Y2FzZSBDVVJWRV9CRVpJRVI6XG5cdFx0XHRcdFx0XHRcdFx0XHRzZXRCZXppZXIoaW5wdXQsIHRpbWVsaW5lLCBiZXppZXIrKywgZnJhbWUsIDAsIHRpbWUsIHRpbWUyLCByLCBuciwgMSk7XG5cdFx0XHRcdFx0XHRcdFx0XHRzZXRCZXppZXIoaW5wdXQsIHRpbWVsaW5lLCBiZXppZXIrKywgZnJhbWUsIDEsIHRpbWUsIHRpbWUyLCBnLCBuZywgMSk7XG5cdFx0XHRcdFx0XHRcdFx0XHRzZXRCZXppZXIoaW5wdXQsIHRpbWVsaW5lLCBiZXppZXIrKywgZnJhbWUsIDIsIHRpbWUsIHRpbWUyLCBiLCBuYiwgMSk7XG5cdFx0XHRcdFx0XHRcdFx0XHRzZXRCZXppZXIoaW5wdXQsIHRpbWVsaW5lLCBiZXppZXIrKywgZnJhbWUsIDMsIHRpbWUsIHRpbWUyLCByMiwgbnIyLCAxKTtcblx0XHRcdFx0XHRcdFx0XHRcdHNldEJlemllcihpbnB1dCwgdGltZWxpbmUsIGJlemllcisrLCBmcmFtZSwgNCwgdGltZSwgdGltZTIsIGcyLCBuZzIsIDEpO1xuXHRcdFx0XHRcdFx0XHRcdFx0c2V0QmV6aWVyKGlucHV0LCB0aW1lbGluZSwgYmV6aWVyKyssIGZyYW1lLCA1LCB0aW1lLCB0aW1lMiwgYjIsIG5iMiwgMSk7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0dGltZSA9IHRpbWUyO1xuXHRcdFx0XHRcdFx0XHRyID0gbnI7XG5cdFx0XHRcdFx0XHRcdGcgPSBuZztcblx0XHRcdFx0XHRcdFx0YiA9IG5iO1xuXHRcdFx0XHRcdFx0XHRyMiA9IG5yMjtcblx0XHRcdFx0XHRcdFx0ZzIgPSBuZzI7XG5cdFx0XHRcdFx0XHRcdGIyID0gbmIyO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0dGltZWxpbmVzLnB1c2godGltZWxpbmUpO1xuXHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdGNhc2UgU0xPVF9BTFBIQToge1xuXHRcdFx0XHRcdFx0Y29uc3QgdGltZWxpbmUgPSBuZXcgQWxwaGFUaW1lbGluZShmcmFtZUNvdW50LCBpbnB1dC5yZWFkSW50KHRydWUpLCBzbG90SW5kZXgpO1xuXHRcdFx0XHRcdFx0bGV0IHRpbWUgPSBpbnB1dC5yZWFkRmxvYXQoKSwgYSA9IGlucHV0LnJlYWRVbnNpZ25lZEJ5dGUoKSAvIDI1NTtcblx0XHRcdFx0XHRcdGZvciAobGV0IGZyYW1lID0gMCwgYmV6aWVyID0gMDsgOyBmcmFtZSsrKSB7XG5cdFx0XHRcdFx0XHRcdHRpbWVsaW5lLnNldEZyYW1lKGZyYW1lLCB0aW1lLCBhKTtcblx0XHRcdFx0XHRcdFx0aWYgKGZyYW1lID09PSBmcmFtZUxhc3QpIGJyZWFrO1xuXHRcdFx0XHRcdFx0XHRjb25zdCB0aW1lMiA9IGlucHV0LnJlYWRGbG9hdCgpO1xuXHRcdFx0XHRcdFx0XHRjb25zdCBhMiA9IGlucHV0LnJlYWRVbnNpZ25lZEJ5dGUoKSAvIDI1NTtcblx0XHRcdFx0XHRcdFx0c3dpdGNoIChpbnB1dC5yZWFkQnl0ZSgpKSB7XG5cdFx0XHRcdFx0XHRcdFx0Y2FzZSBDVVJWRV9TVEVQUEVEOlxuXHRcdFx0XHRcdFx0XHRcdFx0dGltZWxpbmUuc2V0U3RlcHBlZChmcmFtZSk7XG5cdFx0XHRcdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHRcdFx0XHRjYXNlIENVUlZFX0JFWklFUjpcblx0XHRcdFx0XHRcdFx0XHRcdHNldEJlemllcihpbnB1dCwgdGltZWxpbmUsIGJlemllcisrLCBmcmFtZSwgMCwgdGltZSwgdGltZTIsIGEsIGEyLCAxKTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHR0aW1lID0gdGltZTI7XG5cdFx0XHRcdFx0XHRcdGEgPSBhMjtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdHRpbWVsaW5lcy5wdXNoKHRpbWVsaW5lKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cblx0XHQvLyBCb25lIHRpbWVsaW5lcy5cblx0XHRmb3IgKGxldCBpID0gMCwgbiA9IGlucHV0LnJlYWRJbnQodHJ1ZSk7IGkgPCBuOyBpKyspIHtcblx0XHRcdGNvbnN0IGJvbmVJbmRleCA9IGlucHV0LnJlYWRJbnQodHJ1ZSk7XG5cdFx0XHRmb3IgKGxldCBpaSA9IDAsIG5uID0gaW5wdXQucmVhZEludCh0cnVlKTsgaWkgPCBubjsgaWkrKykge1xuXHRcdFx0XHRjb25zdCB0eXBlID0gaW5wdXQucmVhZEJ5dGUoKSwgZnJhbWVDb3VudCA9IGlucHV0LnJlYWRJbnQodHJ1ZSk7XG5cdFx0XHRcdGlmICh0eXBlID09PSBCT05FX0lOSEVSSVQpIHtcblx0XHRcdFx0XHRjb25zdCB0aW1lbGluZSA9IG5ldyBJbmhlcml0VGltZWxpbmUoZnJhbWVDb3VudCwgYm9uZUluZGV4KTtcblx0XHRcdFx0XHRmb3IgKGxldCBmcmFtZSA9IDA7IGZyYW1lIDwgZnJhbWVDb3VudDsgZnJhbWUrKykge1xuXHRcdFx0XHRcdFx0dGltZWxpbmUuc2V0RnJhbWUoZnJhbWUsIGlucHV0LnJlYWRGbG9hdCgpLCBpbnB1dC5yZWFkQnl0ZSgpKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0dGltZWxpbmVzLnB1c2godGltZWxpbmUpO1xuXHRcdFx0XHRcdGNvbnRpbnVlO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGNvbnN0IGJlemllckNvdW50ID0gaW5wdXQucmVhZEludCh0cnVlKTtcblx0XHRcdFx0c3dpdGNoICh0eXBlKSB7XG5cdFx0XHRcdFx0Y2FzZSBCT05FX1JPVEFURTogcmVhZFRpbWVsaW5lKGlucHV0LCB0aW1lbGluZXMsIG5ldyBSb3RhdGVUaW1lbGluZShmcmFtZUNvdW50LCBiZXppZXJDb3VudCwgYm9uZUluZGV4KSwgMSk7IGJyZWFrO1xuXHRcdFx0XHRcdGNhc2UgQk9ORV9UUkFOU0xBVEU6IHJlYWRUaW1lbGluZShpbnB1dCwgdGltZWxpbmVzLCBuZXcgVHJhbnNsYXRlVGltZWxpbmUoZnJhbWVDb3VudCwgYmV6aWVyQ291bnQsIGJvbmVJbmRleCksIHNjYWxlKTsgYnJlYWs7XG5cdFx0XHRcdFx0Y2FzZSBCT05FX1RSQU5TTEFURVg6IHJlYWRUaW1lbGluZShpbnB1dCwgdGltZWxpbmVzLCBuZXcgVHJhbnNsYXRlWFRpbWVsaW5lKGZyYW1lQ291bnQsIGJlemllckNvdW50LCBib25lSW5kZXgpLCBzY2FsZSk7IGJyZWFrO1xuXHRcdFx0XHRcdGNhc2UgQk9ORV9UUkFOU0xBVEVZOiByZWFkVGltZWxpbmUoaW5wdXQsIHRpbWVsaW5lcywgbmV3IFRyYW5zbGF0ZVlUaW1lbGluZShmcmFtZUNvdW50LCBiZXppZXJDb3VudCwgYm9uZUluZGV4KSwgc2NhbGUpOyBicmVhaztcblx0XHRcdFx0XHRjYXNlIEJPTkVfU0NBTEU6IHJlYWRUaW1lbGluZShpbnB1dCwgdGltZWxpbmVzLCBuZXcgU2NhbGVUaW1lbGluZShmcmFtZUNvdW50LCBiZXppZXJDb3VudCwgYm9uZUluZGV4KSwgMSk7IGJyZWFrO1xuXHRcdFx0XHRcdGNhc2UgQk9ORV9TQ0FMRVg6IHJlYWRUaW1lbGluZShpbnB1dCwgdGltZWxpbmVzLCBuZXcgU2NhbGVYVGltZWxpbmUoZnJhbWVDb3VudCwgYmV6aWVyQ291bnQsIGJvbmVJbmRleCksIDEpOyBicmVhaztcblx0XHRcdFx0XHRjYXNlIEJPTkVfU0NBTEVZOiByZWFkVGltZWxpbmUoaW5wdXQsIHRpbWVsaW5lcywgbmV3IFNjYWxlWVRpbWVsaW5lKGZyYW1lQ291bnQsIGJlemllckNvdW50LCBib25lSW5kZXgpLCAxKTsgYnJlYWs7XG5cdFx0XHRcdFx0Y2FzZSBCT05FX1NIRUFSOiByZWFkVGltZWxpbmUoaW5wdXQsIHRpbWVsaW5lcywgbmV3IFNoZWFyVGltZWxpbmUoZnJhbWVDb3VudCwgYmV6aWVyQ291bnQsIGJvbmVJbmRleCksIDEpOyBicmVhaztcblx0XHRcdFx0XHRjYXNlIEJPTkVfU0hFQVJYOiByZWFkVGltZWxpbmUoaW5wdXQsIHRpbWVsaW5lcywgbmV3IFNoZWFyWFRpbWVsaW5lKGZyYW1lQ291bnQsIGJlemllckNvdW50LCBib25lSW5kZXgpLCAxKTsgYnJlYWs7XG5cdFx0XHRcdFx0Y2FzZSBCT05FX1NIRUFSWTogcmVhZFRpbWVsaW5lKGlucHV0LCB0aW1lbGluZXMsIG5ldyBTaGVhcllUaW1lbGluZShmcmFtZUNvdW50LCBiZXppZXJDb3VudCwgYm9uZUluZGV4KSwgMSk7IGJyZWFrO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Ly8gSUsgY29uc3RyYWludCB0aW1lbGluZXMuXG5cdFx0Zm9yIChsZXQgaSA9IDAsIG4gPSBpbnB1dC5yZWFkSW50KHRydWUpOyBpIDwgbjsgaSsrKSB7XG5cdFx0XHRjb25zdCBpbmRleCA9IGlucHV0LnJlYWRJbnQodHJ1ZSksIGZyYW1lQ291bnQgPSBpbnB1dC5yZWFkSW50KHRydWUpLCBmcmFtZUxhc3QgPSBmcmFtZUNvdW50IC0gMTtcblx0XHRcdGNvbnN0IHRpbWVsaW5lID0gbmV3IElrQ29uc3RyYWludFRpbWVsaW5lKGZyYW1lQ291bnQsIGlucHV0LnJlYWRJbnQodHJ1ZSksIGluZGV4KTtcblx0XHRcdGxldCBmbGFncyA9IGlucHV0LnJlYWRCeXRlKCk7XG5cdFx0XHRsZXQgdGltZSA9IGlucHV0LnJlYWRGbG9hdCgpLCBtaXggPSAoZmxhZ3MgJiAxKSAhPT0gMCA/ICgoZmxhZ3MgJiAyKSAhPT0gMCA/IGlucHV0LnJlYWRGbG9hdCgpIDogMSkgOiAwO1xuXHRcdFx0bGV0IHNvZnRuZXNzID0gKGZsYWdzICYgNCkgIT09IDAgPyBpbnB1dC5yZWFkRmxvYXQoKSAqIHNjYWxlIDogMDtcblx0XHRcdGZvciAobGV0IGZyYW1lID0gMCwgYmV6aWVyID0gMDsgOyBmcmFtZSsrKSB7XG5cdFx0XHRcdHRpbWVsaW5lLnNldEZyYW1lKGZyYW1lLCB0aW1lLCBtaXgsIHNvZnRuZXNzLCAoZmxhZ3MgJiA4KSAhPT0gMCA/IDEgOiAtMSwgKGZsYWdzICYgMTYpICE9PSAwLCAoZmxhZ3MgJiAzMikgIT09IDApO1xuXHRcdFx0XHRpZiAoZnJhbWUgPT09IGZyYW1lTGFzdCkgYnJlYWs7XG5cdFx0XHRcdGZsYWdzID0gaW5wdXQucmVhZEJ5dGUoKTtcblx0XHRcdFx0Y29uc3QgdGltZTIgPSBpbnB1dC5yZWFkRmxvYXQoKSwgbWl4MiA9IChmbGFncyAmIDEpICE9PSAwID8gKChmbGFncyAmIDIpICE9PSAwID8gaW5wdXQucmVhZEZsb2F0KCkgOiAxKSA6IDA7XG5cdFx0XHRcdGNvbnN0IHNvZnRuZXNzMiA9IChmbGFncyAmIDQpICE9PSAwID8gaW5wdXQucmVhZEZsb2F0KCkgKiBzY2FsZSA6IDA7XG5cdFx0XHRcdGlmICgoZmxhZ3MgJiA2NCkgIT09IDApIHtcblx0XHRcdFx0XHR0aW1lbGluZS5zZXRTdGVwcGVkKGZyYW1lKTtcblx0XHRcdFx0fSBlbHNlIGlmICgoZmxhZ3MgJiAxMjgpICE9PSAwKSB7XG5cdFx0XHRcdFx0c2V0QmV6aWVyKGlucHV0LCB0aW1lbGluZSwgYmV6aWVyKyssIGZyYW1lLCAwLCB0aW1lLCB0aW1lMiwgbWl4LCBtaXgyLCAxKTtcblx0XHRcdFx0XHRzZXRCZXppZXIoaW5wdXQsIHRpbWVsaW5lLCBiZXppZXIrKywgZnJhbWUsIDEsIHRpbWUsIHRpbWUyLCBzb2Z0bmVzcywgc29mdG5lc3MyLCBzY2FsZSk7XG5cdFx0XHRcdH1cblx0XHRcdFx0dGltZSA9IHRpbWUyO1xuXHRcdFx0XHRtaXggPSBtaXgyO1xuXHRcdFx0XHRzb2Z0bmVzcyA9IHNvZnRuZXNzMjtcblx0XHRcdH1cblx0XHRcdHRpbWVsaW5lcy5wdXNoKHRpbWVsaW5lKTtcblx0XHR9XG5cblx0XHQvLyBUcmFuc2Zvcm0gY29uc3RyYWludCB0aW1lbGluZXMuXG5cdFx0Zm9yIChsZXQgaSA9IDAsIG4gPSBpbnB1dC5yZWFkSW50KHRydWUpOyBpIDwgbjsgaSsrKSB7XG5cdFx0XHRjb25zdCBpbmRleCA9IGlucHV0LnJlYWRJbnQodHJ1ZSksIGZyYW1lQ291bnQgPSBpbnB1dC5yZWFkSW50KHRydWUpLCBmcmFtZUxhc3QgPSBmcmFtZUNvdW50IC0gMTtcblx0XHRcdGNvbnN0IHRpbWVsaW5lID0gbmV3IFRyYW5zZm9ybUNvbnN0cmFpbnRUaW1lbGluZShmcmFtZUNvdW50LCBpbnB1dC5yZWFkSW50KHRydWUpLCBpbmRleCk7XG5cdFx0XHRsZXQgdGltZSA9IGlucHV0LnJlYWRGbG9hdCgpLCBtaXhSb3RhdGUgPSBpbnB1dC5yZWFkRmxvYXQoKSwgbWl4WCA9IGlucHV0LnJlYWRGbG9hdCgpLCBtaXhZID0gaW5wdXQucmVhZEZsb2F0KCksXG5cdFx0XHRcdG1peFNjYWxlWCA9IGlucHV0LnJlYWRGbG9hdCgpLCBtaXhTY2FsZVkgPSBpbnB1dC5yZWFkRmxvYXQoKSwgbWl4U2hlYXJZID0gaW5wdXQucmVhZEZsb2F0KCk7XG5cdFx0XHRmb3IgKGxldCBmcmFtZSA9IDAsIGJlemllciA9IDA7IDsgZnJhbWUrKykge1xuXHRcdFx0XHR0aW1lbGluZS5zZXRGcmFtZShmcmFtZSwgdGltZSwgbWl4Um90YXRlLCBtaXhYLCBtaXhZLCBtaXhTY2FsZVgsIG1peFNjYWxlWSwgbWl4U2hlYXJZKTtcblx0XHRcdFx0aWYgKGZyYW1lID09PSBmcmFtZUxhc3QpIGJyZWFrO1xuXHRcdFx0XHRjb25zdCB0aW1lMiA9IGlucHV0LnJlYWRGbG9hdCgpLCBtaXhSb3RhdGUyID0gaW5wdXQucmVhZEZsb2F0KCksIG1peFgyID0gaW5wdXQucmVhZEZsb2F0KCksIG1peFkyID0gaW5wdXQucmVhZEZsb2F0KCksXG5cdFx0XHRcdFx0bWl4U2NhbGVYMiA9IGlucHV0LnJlYWRGbG9hdCgpLCBtaXhTY2FsZVkyID0gaW5wdXQucmVhZEZsb2F0KCksIG1peFNoZWFyWTIgPSBpbnB1dC5yZWFkRmxvYXQoKTtcblx0XHRcdFx0c3dpdGNoIChpbnB1dC5yZWFkQnl0ZSgpKSB7XG5cdFx0XHRcdFx0Y2FzZSBDVVJWRV9TVEVQUEVEOlxuXHRcdFx0XHRcdFx0dGltZWxpbmUuc2V0U3RlcHBlZChmcmFtZSk7XG5cdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHRjYXNlIENVUlZFX0JFWklFUjpcblx0XHRcdFx0XHRcdHNldEJlemllcihpbnB1dCwgdGltZWxpbmUsIGJlemllcisrLCBmcmFtZSwgMCwgdGltZSwgdGltZTIsIG1peFJvdGF0ZSwgbWl4Um90YXRlMiwgMSk7XG5cdFx0XHRcdFx0XHRzZXRCZXppZXIoaW5wdXQsIHRpbWVsaW5lLCBiZXppZXIrKywgZnJhbWUsIDEsIHRpbWUsIHRpbWUyLCBtaXhYLCBtaXhYMiwgMSk7XG5cdFx0XHRcdFx0XHRzZXRCZXppZXIoaW5wdXQsIHRpbWVsaW5lLCBiZXppZXIrKywgZnJhbWUsIDIsIHRpbWUsIHRpbWUyLCBtaXhZLCBtaXhZMiwgMSk7XG5cdFx0XHRcdFx0XHRzZXRCZXppZXIoaW5wdXQsIHRpbWVsaW5lLCBiZXppZXIrKywgZnJhbWUsIDMsIHRpbWUsIHRpbWUyLCBtaXhTY2FsZVgsIG1peFNjYWxlWDIsIDEpO1xuXHRcdFx0XHRcdFx0c2V0QmV6aWVyKGlucHV0LCB0aW1lbGluZSwgYmV6aWVyKyssIGZyYW1lLCA0LCB0aW1lLCB0aW1lMiwgbWl4U2NhbGVZLCBtaXhTY2FsZVkyLCAxKTtcblx0XHRcdFx0XHRcdHNldEJlemllcihpbnB1dCwgdGltZWxpbmUsIGJlemllcisrLCBmcmFtZSwgNSwgdGltZSwgdGltZTIsIG1peFNoZWFyWSwgbWl4U2hlYXJZMiwgMSk7XG5cdFx0XHRcdH1cblx0XHRcdFx0dGltZSA9IHRpbWUyO1xuXHRcdFx0XHRtaXhSb3RhdGUgPSBtaXhSb3RhdGUyO1xuXHRcdFx0XHRtaXhYID0gbWl4WDI7XG5cdFx0XHRcdG1peFkgPSBtaXhZMjtcblx0XHRcdFx0bWl4U2NhbGVYID0gbWl4U2NhbGVYMjtcblx0XHRcdFx0bWl4U2NhbGVZID0gbWl4U2NhbGVZMjtcblx0XHRcdFx0bWl4U2hlYXJZID0gbWl4U2hlYXJZMjtcblx0XHRcdH1cblx0XHRcdHRpbWVsaW5lcy5wdXNoKHRpbWVsaW5lKTtcblx0XHR9XG5cblx0XHQvLyBQYXRoIGNvbnN0cmFpbnQgdGltZWxpbmVzLlxuXHRcdGZvciAobGV0IGkgPSAwLCBuID0gaW5wdXQucmVhZEludCh0cnVlKTsgaSA8IG47IGkrKykge1xuXHRcdFx0Y29uc3QgaW5kZXggPSBpbnB1dC5yZWFkSW50KHRydWUpO1xuXHRcdFx0Y29uc3QgZGF0YSA9IHNrZWxldG9uRGF0YS5jb25zdHJhaW50c1tpbmRleF0gYXMgUGF0aENvbnN0cmFpbnREYXRhO1xuXHRcdFx0Zm9yIChsZXQgaWkgPSAwLCBubiA9IGlucHV0LnJlYWRJbnQodHJ1ZSk7IGlpIDwgbm47IGlpKyspIHtcblx0XHRcdFx0Y29uc3QgdHlwZSA9IGlucHV0LnJlYWRCeXRlKCksIGZyYW1lQ291bnQgPSBpbnB1dC5yZWFkSW50KHRydWUpLCBiZXppZXJDb3VudCA9IGlucHV0LnJlYWRJbnQodHJ1ZSk7XG5cdFx0XHRcdHN3aXRjaCAodHlwZSkge1xuXHRcdFx0XHRcdGNhc2UgUEFUSF9QT1NJVElPTjpcblx0XHRcdFx0XHRcdHJlYWRUaW1lbGluZShpbnB1dCwgdGltZWxpbmVzLCBuZXcgUGF0aENvbnN0cmFpbnRQb3NpdGlvblRpbWVsaW5lKGZyYW1lQ291bnQsIGJlemllckNvdW50LCBpbmRleCksXG5cdFx0XHRcdFx0XHRcdGRhdGEucG9zaXRpb25Nb2RlID09PSBQb3NpdGlvbk1vZGUuRml4ZWQgPyBzY2FsZSA6IDEpO1xuXHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0Y2FzZSBQQVRIX1NQQUNJTkc6XG5cdFx0XHRcdFx0XHRyZWFkVGltZWxpbmUoaW5wdXQsIHRpbWVsaW5lcywgbmV3IFBhdGhDb25zdHJhaW50U3BhY2luZ1RpbWVsaW5lKGZyYW1lQ291bnQsIGJlemllckNvdW50LCBpbmRleCksXG5cdFx0XHRcdFx0XHRcdGRhdGEuc3BhY2luZ01vZGUgPT09IFNwYWNpbmdNb2RlLkxlbmd0aCB8fCBkYXRhLnNwYWNpbmdNb2RlID09PSBTcGFjaW5nTW9kZS5GaXhlZCA/IHNjYWxlIDogMSk7XG5cdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHRjYXNlIFBBVEhfTUlYOiB7XG5cdFx0XHRcdFx0XHRjb25zdCB0aW1lbGluZSA9IG5ldyBQYXRoQ29uc3RyYWludE1peFRpbWVsaW5lKGZyYW1lQ291bnQsIGJlemllckNvdW50LCBpbmRleCk7XG5cdFx0XHRcdFx0XHRsZXQgdGltZSA9IGlucHV0LnJlYWRGbG9hdCgpLCBtaXhSb3RhdGUgPSBpbnB1dC5yZWFkRmxvYXQoKSwgbWl4WCA9IGlucHV0LnJlYWRGbG9hdCgpLCBtaXhZID0gaW5wdXQucmVhZEZsb2F0KCk7XG5cdFx0XHRcdFx0XHRmb3IgKGxldCBmcmFtZSA9IDAsIGJlemllciA9IDAsIGZyYW1lTGFzdCA9IHRpbWVsaW5lLmdldEZyYW1lQ291bnQoKSAtIDE7IDsgZnJhbWUrKykge1xuXHRcdFx0XHRcdFx0XHR0aW1lbGluZS5zZXRGcmFtZShmcmFtZSwgdGltZSwgbWl4Um90YXRlLCBtaXhYLCBtaXhZKTtcblx0XHRcdFx0XHRcdFx0aWYgKGZyYW1lID09PSBmcmFtZUxhc3QpIGJyZWFrO1xuXHRcdFx0XHRcdFx0XHRjb25zdCB0aW1lMiA9IGlucHV0LnJlYWRGbG9hdCgpLCBtaXhSb3RhdGUyID0gaW5wdXQucmVhZEZsb2F0KCksIG1peFgyID0gaW5wdXQucmVhZEZsb2F0KCksXG5cdFx0XHRcdFx0XHRcdFx0bWl4WTIgPSBpbnB1dC5yZWFkRmxvYXQoKTtcblx0XHRcdFx0XHRcdFx0c3dpdGNoIChpbnB1dC5yZWFkQnl0ZSgpKSB7XG5cdFx0XHRcdFx0XHRcdFx0Y2FzZSBDVVJWRV9TVEVQUEVEOlxuXHRcdFx0XHRcdFx0XHRcdFx0dGltZWxpbmUuc2V0U3RlcHBlZChmcmFtZSk7XG5cdFx0XHRcdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHRcdFx0XHRjYXNlIENVUlZFX0JFWklFUjpcblx0XHRcdFx0XHRcdFx0XHRcdHNldEJlemllcihpbnB1dCwgdGltZWxpbmUsIGJlemllcisrLCBmcmFtZSwgMCwgdGltZSwgdGltZTIsIG1peFJvdGF0ZSwgbWl4Um90YXRlMiwgMSk7XG5cdFx0XHRcdFx0XHRcdFx0XHRzZXRCZXppZXIoaW5wdXQsIHRpbWVsaW5lLCBiZXppZXIrKywgZnJhbWUsIDEsIHRpbWUsIHRpbWUyLCBtaXhYLCBtaXhYMiwgMSk7XG5cdFx0XHRcdFx0XHRcdFx0XHRzZXRCZXppZXIoaW5wdXQsIHRpbWVsaW5lLCBiZXppZXIrKywgZnJhbWUsIDIsIHRpbWUsIHRpbWUyLCBtaXhZLCBtaXhZMiwgMSk7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0dGltZSA9IHRpbWUyO1xuXHRcdFx0XHRcdFx0XHRtaXhSb3RhdGUgPSBtaXhSb3RhdGUyO1xuXHRcdFx0XHRcdFx0XHRtaXhYID0gbWl4WDI7XG5cdFx0XHRcdFx0XHRcdG1peFkgPSBtaXhZMjtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdHRpbWVsaW5lcy5wdXNoKHRpbWVsaW5lKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cblx0XHQvLyBQaHlzaWNzIHRpbWVsaW5lcy5cblx0XHRmb3IgKGxldCBpID0gMCwgbiA9IGlucHV0LnJlYWRJbnQodHJ1ZSk7IGkgPCBuOyBpKyspIHtcblx0XHRcdGNvbnN0IGluZGV4ID0gaW5wdXQucmVhZEludCh0cnVlKSAtIDE7XG5cdFx0XHRmb3IgKGxldCBpaSA9IDAsIG5uID0gaW5wdXQucmVhZEludCh0cnVlKTsgaWkgPCBubjsgaWkrKykge1xuXHRcdFx0XHRjb25zdCB0eXBlID0gaW5wdXQucmVhZEJ5dGUoKSwgZnJhbWVDb3VudCA9IGlucHV0LnJlYWRJbnQodHJ1ZSk7XG5cdFx0XHRcdGlmICh0eXBlID09PSBQSFlTSUNTX1JFU0VUKSB7XG5cdFx0XHRcdFx0Y29uc3QgdGltZWxpbmUgPSBuZXcgUGh5c2ljc0NvbnN0cmFpbnRSZXNldFRpbWVsaW5lKGZyYW1lQ291bnQsIGluZGV4KTtcblx0XHRcdFx0XHRmb3IgKGxldCBmcmFtZSA9IDA7IGZyYW1lIDwgZnJhbWVDb3VudDsgZnJhbWUrKylcblx0XHRcdFx0XHRcdHRpbWVsaW5lLnNldEZyYW1lKGZyYW1lLCBpbnB1dC5yZWFkRmxvYXQoKSk7XG5cdFx0XHRcdFx0dGltZWxpbmVzLnB1c2godGltZWxpbmUpO1xuXHRcdFx0XHRcdGNvbnRpbnVlO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGNvbnN0IGJlemllckNvdW50ID0gaW5wdXQucmVhZEludCh0cnVlKTtcblx0XHRcdFx0c3dpdGNoICh0eXBlKSB7XG5cdFx0XHRcdFx0Y2FzZSBQSFlTSUNTX0lORVJUSUE6IHJlYWRUaW1lbGluZShpbnB1dCwgdGltZWxpbmVzLCBuZXcgUGh5c2ljc0NvbnN0cmFpbnRJbmVydGlhVGltZWxpbmUoZnJhbWVDb3VudCwgYmV6aWVyQ291bnQsIGluZGV4KSwgMSk7IGJyZWFrO1xuXHRcdFx0XHRcdGNhc2UgUEhZU0lDU19TVFJFTkdUSDogcmVhZFRpbWVsaW5lKGlucHV0LCB0aW1lbGluZXMsIG5ldyBQaHlzaWNzQ29uc3RyYWludFN0cmVuZ3RoVGltZWxpbmUoZnJhbWVDb3VudCwgYmV6aWVyQ291bnQsIGluZGV4KSwgMSk7IGJyZWFrO1xuXHRcdFx0XHRcdGNhc2UgUEhZU0lDU19EQU1QSU5HOiByZWFkVGltZWxpbmUoaW5wdXQsIHRpbWVsaW5lcywgbmV3IFBoeXNpY3NDb25zdHJhaW50RGFtcGluZ1RpbWVsaW5lKGZyYW1lQ291bnQsIGJlemllckNvdW50LCBpbmRleCksIDEpOyBicmVhaztcblx0XHRcdFx0XHRjYXNlIFBIWVNJQ1NfTUFTUzogcmVhZFRpbWVsaW5lKGlucHV0LCB0aW1lbGluZXMsIG5ldyBQaHlzaWNzQ29uc3RyYWludE1hc3NUaW1lbGluZShmcmFtZUNvdW50LCBiZXppZXJDb3VudCwgaW5kZXgpLCAxKTsgYnJlYWs7XG5cdFx0XHRcdFx0Y2FzZSBQSFlTSUNTX1dJTkQ6IHJlYWRUaW1lbGluZShpbnB1dCwgdGltZWxpbmVzLCBuZXcgUGh5c2ljc0NvbnN0cmFpbnRXaW5kVGltZWxpbmUoZnJhbWVDb3VudCwgYmV6aWVyQ291bnQsIGluZGV4KSwgMSk7IGJyZWFrO1xuXHRcdFx0XHRcdGNhc2UgUEhZU0lDU19HUkFWSVRZOiByZWFkVGltZWxpbmUoaW5wdXQsIHRpbWVsaW5lcywgbmV3IFBoeXNpY3NDb25zdHJhaW50R3Jhdml0eVRpbWVsaW5lKGZyYW1lQ291bnQsIGJlemllckNvdW50LCBpbmRleCksIDEpOyBicmVhaztcblx0XHRcdFx0XHRjYXNlIFBIWVNJQ1NfTUlYOiByZWFkVGltZWxpbmUoaW5wdXQsIHRpbWVsaW5lcywgbmV3IFBoeXNpY3NDb25zdHJhaW50TWl4VGltZWxpbmUoZnJhbWVDb3VudCwgYmV6aWVyQ291bnQsIGluZGV4KSwgMSk7IGJyZWFrO1xuXHRcdFx0XHRcdGRlZmF1bHQ6IHRocm93IG5ldyBFcnJvcihcIlVua25vd24gcGh5c2ljcyB0aW1lbGluZSB0eXBlLlwiKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblxuXHRcdC8vIFNsaWRlciB0aW1lbGluZXMuXG5cdFx0Zm9yIChsZXQgaSA9IDAsIG4gPSBpbnB1dC5yZWFkSW50KHRydWUpOyBpIDwgbjsgaSsrKSB7XG5cdFx0XHRjb25zdCBpbmRleCA9IGlucHV0LnJlYWRJbnQodHJ1ZSk7XG5cdFx0XHRmb3IgKGxldCBpaSA9IDAsIG5uID0gaW5wdXQucmVhZEludCh0cnVlKTsgaWkgPCBubjsgaWkrKykge1xuXHRcdFx0XHRjb25zdCB0eXBlID0gaW5wdXQucmVhZEJ5dGUoKSwgZnJhbWVDb3VudCA9IGlucHV0LnJlYWRJbnQodHJ1ZSksIGJlemllckNvdW50ID0gaW5wdXQucmVhZEludCh0cnVlKTtcblx0XHRcdFx0c3dpdGNoICh0eXBlKSB7XG5cdFx0XHRcdFx0Y2FzZSBTTElERVJfVElNRTogcmVhZFRpbWVsaW5lKGlucHV0LCB0aW1lbGluZXMsIG5ldyBTbGlkZXJUaW1lbGluZShmcmFtZUNvdW50LCBiZXppZXJDb3VudCwgaW5kZXgpLCAxKTsgYnJlYWs7XG5cdFx0XHRcdFx0Y2FzZSBTTElERVJfTUlYOiByZWFkVGltZWxpbmUoaW5wdXQsIHRpbWVsaW5lcywgbmV3IFNsaWRlck1peFRpbWVsaW5lKGZyYW1lQ291bnQsIGJlemllckNvdW50LCBpbmRleCksIDEpOyBicmVhaztcblx0XHRcdFx0XHRkZWZhdWx0OiB0aHJvdyBuZXcgRXJyb3IoYFVrbm93biBzbGlkZXIgdHlwZTogJHt0eXBlfWApO1xuXHRcdFx0XHR9XG5cblx0XHRcdH1cblx0XHR9XG5cblx0XHQvLyBBdHRhY2htZW50IHRpbWVsaW5lcy5cblx0XHRmb3IgKGxldCBpID0gMCwgbiA9IGlucHV0LnJlYWRJbnQodHJ1ZSk7IGkgPCBuOyBpKyspIHtcblx0XHRcdGNvbnN0IHNraW4gPSBza2VsZXRvbkRhdGEuc2tpbnNbaW5wdXQucmVhZEludCh0cnVlKV07XG5cdFx0XHRmb3IgKGxldCBpaSA9IDAsIG5uID0gaW5wdXQucmVhZEludCh0cnVlKTsgaWkgPCBubjsgaWkrKykge1xuXHRcdFx0XHRjb25zdCBzbG90SW5kZXggPSBpbnB1dC5yZWFkSW50KHRydWUpO1xuXHRcdFx0XHRmb3IgKGxldCBpaWkgPSAwLCBubm4gPSBpbnB1dC5yZWFkSW50KHRydWUpOyBpaWkgPCBubm47IGlpaSsrKSB7XG5cdFx0XHRcdFx0Y29uc3QgYXR0YWNobWVudE5hbWUgPSBpbnB1dC5yZWFkU3RyaW5nUmVmKCk7XG5cdFx0XHRcdFx0aWYgKCFhdHRhY2htZW50TmFtZSkgdGhyb3cgbmV3IEVycm9yKFwiYXR0YWNobWVudE5hbWUgbXVzdCBub3QgYmUgbnVsbC5cIik7XG5cdFx0XHRcdFx0Y29uc3QgYXR0YWNobWVudCA9IHNraW4uZ2V0QXR0YWNobWVudChzbG90SW5kZXgsIGF0dGFjaG1lbnROYW1lKTtcblx0XHRcdFx0XHRjb25zdCB0aW1lbGluZVR5cGUgPSBpbnB1dC5yZWFkQnl0ZSgpO1xuXHRcdFx0XHRcdGNvbnN0IGZyYW1lQ291bnQgPSBpbnB1dC5yZWFkSW50KHRydWUpO1xuXHRcdFx0XHRcdGNvbnN0IGZyYW1lTGFzdCA9IGZyYW1lQ291bnQgLSAxO1xuXG5cdFx0XHRcdFx0c3dpdGNoICh0aW1lbGluZVR5cGUpIHtcblx0XHRcdFx0XHRcdGNhc2UgQVRUQUNITUVOVF9ERUZPUk06IHtcblx0XHRcdFx0XHRcdFx0Y29uc3QgdmVydGV4QXR0YWNobWVudCA9IGF0dGFjaG1lbnQgYXMgVmVydGV4QXR0YWNobWVudDtcblx0XHRcdFx0XHRcdFx0Y29uc3Qgd2VpZ2h0ZWQgPSB2ZXJ0ZXhBdHRhY2htZW50LmJvbmVzO1xuXHRcdFx0XHRcdFx0XHRjb25zdCB2ZXJ0aWNlcyA9IHZlcnRleEF0dGFjaG1lbnQudmVydGljZXM7XG5cdFx0XHRcdFx0XHRcdGNvbnN0IGRlZm9ybUxlbmd0aCA9IHdlaWdodGVkID8gdmVydGljZXMubGVuZ3RoIC8gMyAqIDIgOiB2ZXJ0aWNlcy5sZW5ndGg7XG5cblxuXHRcdFx0XHRcdFx0XHRjb25zdCBiZXppZXJDb3VudCA9IGlucHV0LnJlYWRJbnQodHJ1ZSk7XG5cdFx0XHRcdFx0XHRcdGNvbnN0IHRpbWVsaW5lID0gbmV3IERlZm9ybVRpbWVsaW5lKGZyYW1lQ291bnQsIGJlemllckNvdW50LCBzbG90SW5kZXgsIHZlcnRleEF0dGFjaG1lbnQpO1xuXG5cdFx0XHRcdFx0XHRcdGxldCB0aW1lID0gaW5wdXQucmVhZEZsb2F0KCk7XG5cdFx0XHRcdFx0XHRcdGZvciAobGV0IGZyYW1lID0gMCwgYmV6aWVyID0gMDsgOyBmcmFtZSsrKSB7XG5cdFx0XHRcdFx0XHRcdFx0bGV0IGRlZm9ybTogTnVtYmVyQXJyYXlMaWtlO1xuXHRcdFx0XHRcdFx0XHRcdGxldCBlbmQgPSBpbnB1dC5yZWFkSW50KHRydWUpO1xuXHRcdFx0XHRcdFx0XHRcdGlmIChlbmQgPT09IDApXG5cdFx0XHRcdFx0XHRcdFx0XHRkZWZvcm0gPSB3ZWlnaHRlZCA/IFV0aWxzLm5ld0Zsb2F0QXJyYXkoZGVmb3JtTGVuZ3RoKSA6IHZlcnRpY2VzO1xuXHRcdFx0XHRcdFx0XHRcdGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRcdFx0ZGVmb3JtID0gVXRpbHMubmV3RmxvYXRBcnJheShkZWZvcm1MZW5ndGgpO1xuXHRcdFx0XHRcdFx0XHRcdFx0Y29uc3Qgc3RhcnQgPSBpbnB1dC5yZWFkSW50KHRydWUpO1xuXHRcdFx0XHRcdFx0XHRcdFx0ZW5kICs9IHN0YXJ0O1xuXHRcdFx0XHRcdFx0XHRcdFx0aWYgKHNjYWxlID09PSAxKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdGZvciAobGV0IHYgPSBzdGFydDsgdiA8IGVuZDsgdisrKVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGRlZm9ybVt2XSA9IGlucHV0LnJlYWRGbG9hdCgpO1xuXHRcdFx0XHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0Zm9yIChsZXQgdiA9IHN0YXJ0OyB2IDwgZW5kOyB2KyspXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0ZGVmb3JtW3ZdID0gaW5wdXQucmVhZEZsb2F0KCkgKiBzY2FsZTtcblx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdGlmICghd2VpZ2h0ZWQpIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0Zm9yIChsZXQgdiA9IDAsIHZuID0gZGVmb3JtLmxlbmd0aDsgdiA8IHZuOyB2KyspXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0ZGVmb3JtW3ZdICs9IHZlcnRpY2VzW3ZdO1xuXHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0XHRcdHRpbWVsaW5lLnNldEZyYW1lKGZyYW1lLCB0aW1lLCBkZWZvcm0pO1xuXHRcdFx0XHRcdFx0XHRcdGlmIChmcmFtZSA9PT0gZnJhbWVMYXN0KSBicmVhaztcblx0XHRcdFx0XHRcdFx0XHRjb25zdCB0aW1lMiA9IGlucHV0LnJlYWRGbG9hdCgpO1xuXHRcdFx0XHRcdFx0XHRcdHN3aXRjaCAoaW5wdXQucmVhZEJ5dGUoKSkge1xuXHRcdFx0XHRcdFx0XHRcdFx0Y2FzZSBDVVJWRV9TVEVQUEVEOlxuXHRcdFx0XHRcdFx0XHRcdFx0XHR0aW1lbGluZS5zZXRTdGVwcGVkKGZyYW1lKTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0XHRcdFx0XHRjYXNlIENVUlZFX0JFWklFUjpcblx0XHRcdFx0XHRcdFx0XHRcdFx0c2V0QmV6aWVyKGlucHV0LCB0aW1lbGluZSwgYmV6aWVyKyssIGZyYW1lLCAwLCB0aW1lLCB0aW1lMiwgMCwgMSwgMSk7XG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdHRpbWUgPSB0aW1lMjtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHR0aW1lbGluZXMucHVzaCh0aW1lbGluZSk7XG5cdFx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0Y2FzZSBBVFRBQ0hNRU5UX1NFUVVFTkNFOiB7XG5cdFx0XHRcdFx0XHRcdGNvbnN0IHRpbWVsaW5lID0gbmV3IFNlcXVlbmNlVGltZWxpbmUoZnJhbWVDb3VudCwgc2xvdEluZGV4LCBhdHRhY2htZW50IGFzIEF0dGFjaG1lbnQpO1xuXHRcdFx0XHRcdFx0XHRmb3IgKGxldCBmcmFtZSA9IDA7IGZyYW1lIDwgZnJhbWVDb3VudDsgZnJhbWUrKykge1xuXHRcdFx0XHRcdFx0XHRcdGNvbnN0IHRpbWUgPSBpbnB1dC5yZWFkRmxvYXQoKTtcblx0XHRcdFx0XHRcdFx0XHRjb25zdCBtb2RlQW5kSW5kZXggPSBpbnB1dC5yZWFkSW50MzIoKTtcblx0XHRcdFx0XHRcdFx0XHR0aW1lbGluZS5zZXRGcmFtZShmcmFtZSwgdGltZSwgU2VxdWVuY2VNb2RlVmFsdWVzW21vZGVBbmRJbmRleCAmIDB4Zl0sIG1vZGVBbmRJbmRleCA+PiA0LFxuXHRcdFx0XHRcdFx0XHRcdFx0aW5wdXQucmVhZEZsb2F0KCkpO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdHRpbWVsaW5lcy5wdXNoKHRpbWVsaW5lKTtcblx0XHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Ly8gRHJhdyBvcmRlciB0aW1lbGluZS5cblx0XHRjb25zdCBzbG90Q291bnQgPSBza2VsZXRvbkRhdGEuc2xvdHMubGVuZ3RoO1xuXHRcdGNvbnN0IGRyYXdPcmRlckNvdW50ID0gaW5wdXQucmVhZEludCh0cnVlKTtcblx0XHRpZiAoZHJhd09yZGVyQ291bnQgPiAwKSB7XG5cdFx0XHRjb25zdCB0aW1lbGluZSA9IG5ldyBEcmF3T3JkZXJUaW1lbGluZShkcmF3T3JkZXJDb3VudCk7XG5cdFx0XHRmb3IgKGxldCBpID0gMDsgaSA8IGRyYXdPcmRlckNvdW50OyBpKyspXG5cdFx0XHRcdHRpbWVsaW5lLnNldEZyYW1lKGksIGlucHV0LnJlYWRGbG9hdCgpLCByZWFkRHJhd09yZGVyKGlucHV0LCBzbG90Q291bnQpKTtcblx0XHRcdHRpbWVsaW5lcy5wdXNoKHRpbWVsaW5lKTtcblx0XHR9XG5cblx0XHQvLyBEcmF3IG9yZGVyIGZvbGRlciB0aW1lbGluZXMuXG5cdFx0Y29uc3QgZm9sZGVyQ291bnQgPSBpbnB1dC5yZWFkSW50KHRydWUpO1xuXHRcdGZvciAobGV0IGkgPSAwOyBpIDwgZm9sZGVyQ291bnQ7IGkrKykge1xuXHRcdFx0Y29uc3QgZm9sZGVyU2xvdENvdW50ID0gaW5wdXQucmVhZEludCh0cnVlKTtcblx0XHRcdGNvbnN0IGZvbGRlclNsb3RzID0gbmV3IEFycmF5PG51bWJlcj4oZm9sZGVyU2xvdENvdW50KTtcblx0XHRcdGZvciAobGV0IGlpID0gMDsgaWkgPCBmb2xkZXJTbG90Q291bnQ7IGlpKyspXG5cdFx0XHRcdGZvbGRlclNsb3RzW2lpXSA9IGlucHV0LnJlYWRJbnQodHJ1ZSk7XG5cdFx0XHRjb25zdCBrZXlDb3VudCA9IGlucHV0LnJlYWRJbnQodHJ1ZSk7XG5cdFx0XHRjb25zdCB0aW1lbGluZSA9IG5ldyBEcmF3T3JkZXJGb2xkZXJUaW1lbGluZShrZXlDb3VudCwgZm9sZGVyU2xvdHMsIHNsb3RDb3VudCk7XG5cdFx0XHRmb3IgKGxldCBpaSA9IDA7IGlpIDwga2V5Q291bnQ7IGlpKyspXG5cdFx0XHRcdHRpbWVsaW5lLnNldEZyYW1lKGlpLCBpbnB1dC5yZWFkRmxvYXQoKSwgcmVhZERyYXdPcmRlcihpbnB1dCwgZm9sZGVyU2xvdENvdW50KSk7XG5cdFx0XHR0aW1lbGluZXMucHVzaCh0aW1lbGluZSk7XG5cdFx0fVxuXG5cdFx0Ly8gRXZlbnQgdGltZWxpbmUuXG5cdFx0Y29uc3QgZXZlbnRDb3VudCA9IGlucHV0LnJlYWRJbnQodHJ1ZSk7XG5cdFx0aWYgKGV2ZW50Q291bnQgPiAwKSB7XG5cdFx0XHRjb25zdCB0aW1lbGluZSA9IG5ldyBFdmVudFRpbWVsaW5lKGV2ZW50Q291bnQpO1xuXHRcdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCBldmVudENvdW50OyBpKyspIHtcblx0XHRcdFx0Y29uc3QgdGltZSA9IGlucHV0LnJlYWRGbG9hdCgpO1xuXHRcdFx0XHRjb25zdCBldmVudERhdGEgPSBza2VsZXRvbkRhdGEuZXZlbnRzW2lucHV0LnJlYWRJbnQodHJ1ZSldO1xuXHRcdFx0XHRjb25zdCBldmVudCA9IG5ldyBFdmVudCh0aW1lLCBldmVudERhdGEpO1xuXHRcdFx0XHRldmVudC5pbnRWYWx1ZSA9IGlucHV0LnJlYWRJbnQoZmFsc2UpO1xuXHRcdFx0XHRldmVudC5mbG9hdFZhbHVlID0gaW5wdXQucmVhZEZsb2F0KCk7XG5cdFx0XHRcdGV2ZW50LnN0cmluZ1ZhbHVlID0gaW5wdXQucmVhZFN0cmluZygpO1xuXHRcdFx0XHRpZiAoZXZlbnQuc3RyaW5nVmFsdWUgPT0gbnVsbCkgZXZlbnQuc3RyaW5nVmFsdWUgPSBldmVudERhdGEuc2V0dXBQb3NlLnN0cmluZ1ZhbHVlO1xuXHRcdFx0XHRpZiAoZXZlbnQuZGF0YS5hdWRpb1BhdGgpIHtcblx0XHRcdFx0XHRldmVudC52b2x1bWUgPSBpbnB1dC5yZWFkRmxvYXQoKTtcblx0XHRcdFx0XHRldmVudC5iYWxhbmNlID0gaW5wdXQucmVhZEZsb2F0KCk7XG5cdFx0XHRcdH1cblx0XHRcdFx0dGltZWxpbmUuc2V0RnJhbWUoaSwgZXZlbnQpO1xuXHRcdFx0fVxuXHRcdFx0dGltZWxpbmVzLnB1c2godGltZWxpbmUpO1xuXHRcdH1cblxuXHRcdGxldCBkdXJhdGlvbiA9IDA7XG5cdFx0Zm9yIChsZXQgaSA9IDAsIG4gPSB0aW1lbGluZXMubGVuZ3RoOyBpIDwgbjsgaSsrKVxuXHRcdFx0ZHVyYXRpb24gPSBNYXRoLm1heChkdXJhdGlvbiwgdGltZWxpbmVzW2ldLmdldER1cmF0aW9uKCkpO1xuXHRcdGNvbnN0IGFuaW1hdGlvbiA9IG5ldyBBbmltYXRpb24obmFtZSwgdGltZWxpbmVzLCBkdXJhdGlvbik7XG5cdFx0aWYgKG5vbmVzc2VudGlhbCkgQ29sb3IucmdiYTg4ODhUb0NvbG9yKGFuaW1hdGlvbi5jb2xvciwgaW5wdXQucmVhZEludDMyKCkpO1xuXHRcdHJldHVybiBhbmltYXRpb247XG5cdH1cbn1cblxuZXhwb3J0IGNsYXNzIEJpbmFyeUlucHV0IHtcblx0Y29uc3RydWN0b3IgKGRhdGE6IFVpbnQ4QXJyYXkgfCBBcnJheUJ1ZmZlciwgcHVibGljIHN0cmluZ3MgPSBbXSBhcyBzdHJpbmdbXSwgcHJpdmF0ZSBpbmRleDogbnVtYmVyID0gMCwgcHJpdmF0ZSBidWZmZXI6IERhdGFWaWV3ID0gbmV3IERhdGFWaWV3KGRhdGEgaW5zdGFuY2VvZiBBcnJheUJ1ZmZlciA/IGRhdGEgOiBkYXRhLmJ1ZmZlcikpIHtcblx0fVxuXG5cdHJlYWRCeXRlICgpOiBudW1iZXIge1xuXHRcdHJldHVybiB0aGlzLmJ1ZmZlci5nZXRJbnQ4KHRoaXMuaW5kZXgrKyk7XG5cdH1cblxuXHRyZWFkVW5zaWduZWRCeXRlICgpOiBudW1iZXIge1xuXHRcdHJldHVybiB0aGlzLmJ1ZmZlci5nZXRVaW50OCh0aGlzLmluZGV4KyspO1xuXHR9XG5cblx0cmVhZFNob3J0ICgpOiBudW1iZXIge1xuXHRcdGNvbnN0IHZhbHVlID0gdGhpcy5idWZmZXIuZ2V0SW50MTYodGhpcy5pbmRleCk7XG5cdFx0dGhpcy5pbmRleCArPSAyO1xuXHRcdHJldHVybiB2YWx1ZTtcblx0fVxuXG5cdHJlYWRJbnQzMiAoKTogbnVtYmVyIHtcblx0XHRjb25zdCB2YWx1ZSA9IHRoaXMuYnVmZmVyLmdldEludDMyKHRoaXMuaW5kZXgpXG5cdFx0dGhpcy5pbmRleCArPSA0O1xuXHRcdHJldHVybiB2YWx1ZTtcblx0fVxuXG5cdHJlYWRJbnQgKG9wdGltaXplUG9zaXRpdmU6IGJvb2xlYW4pIHtcblx0XHRsZXQgYiA9IHRoaXMucmVhZEJ5dGUoKTtcblx0XHRsZXQgcmVzdWx0ID0gYiAmIDB4N0Y7XG5cdFx0aWYgKChiICYgMHg4MCkgIT09IDApIHtcblx0XHRcdGIgPSB0aGlzLnJlYWRCeXRlKCk7XG5cdFx0XHRyZXN1bHQgfD0gKGIgJiAweDdGKSA8PCA3O1xuXHRcdFx0aWYgKChiICYgMHg4MCkgIT09IDApIHtcblx0XHRcdFx0YiA9IHRoaXMucmVhZEJ5dGUoKTtcblx0XHRcdFx0cmVzdWx0IHw9IChiICYgMHg3RikgPDwgMTQ7XG5cdFx0XHRcdGlmICgoYiAmIDB4ODApICE9PSAwKSB7XG5cdFx0XHRcdFx0YiA9IHRoaXMucmVhZEJ5dGUoKTtcblx0XHRcdFx0XHRyZXN1bHQgfD0gKGIgJiAweDdGKSA8PCAyMTtcblx0XHRcdFx0XHRpZiAoKGIgJiAweDgwKSAhPT0gMCkge1xuXHRcdFx0XHRcdFx0YiA9IHRoaXMucmVhZEJ5dGUoKTtcblx0XHRcdFx0XHRcdHJlc3VsdCB8PSAoYiAmIDB4N0YpIDw8IDI4O1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0XHRyZXR1cm4gb3B0aW1pemVQb3NpdGl2ZSA/IHJlc3VsdCA6ICgocmVzdWx0ID4+PiAxKSBeIC0ocmVzdWx0ICYgMSkpO1xuXHR9XG5cblx0cmVhZFN0cmluZ1JlZiAoKTogc3RyaW5nIHwgbnVsbCB7XG5cdFx0Y29uc3QgaW5kZXggPSB0aGlzLnJlYWRJbnQodHJ1ZSk7XG5cdFx0cmV0dXJuIGluZGV4ID09PSAwID8gbnVsbCA6IHRoaXMuc3RyaW5nc1tpbmRleCAtIDFdO1xuXHR9XG5cblx0cmVhZFN0cmluZyAoKTogc3RyaW5nIHwgbnVsbCB7XG5cdFx0bGV0IGJ5dGVDb3VudCA9IHRoaXMucmVhZEludCh0cnVlKTtcblx0XHRzd2l0Y2ggKGJ5dGVDb3VudCkge1xuXHRcdFx0Y2FzZSAwOlxuXHRcdFx0XHRyZXR1cm4gbnVsbDtcblx0XHRcdGNhc2UgMTpcblx0XHRcdFx0cmV0dXJuIFwiXCI7XG5cdFx0fVxuXHRcdGJ5dGVDb3VudC0tO1xuXHRcdGxldCBjaGFycyA9IFwiXCI7XG5cdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCBieXRlQ291bnQ7KSB7XG5cdFx0XHRjb25zdCBiID0gdGhpcy5yZWFkVW5zaWduZWRCeXRlKCk7XG5cdFx0XHRzd2l0Y2ggKGIgPj4gNCkge1xuXHRcdFx0XHRjYXNlIDEyOlxuXHRcdFx0XHRjYXNlIDEzOlxuXHRcdFx0XHRcdGNoYXJzICs9IFN0cmluZy5mcm9tQ2hhckNvZGUoKChiICYgMHgxRikgPDwgNiB8IHRoaXMucmVhZEJ5dGUoKSAmIDB4M0YpKTtcblx0XHRcdFx0XHRpICs9IDI7XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdGNhc2UgMTQ6XG5cdFx0XHRcdFx0Y2hhcnMgKz0gU3RyaW5nLmZyb21DaGFyQ29kZSgoKGIgJiAweDBGKSA8PCAxMiB8ICh0aGlzLnJlYWRCeXRlKCkgJiAweDNGKSA8PCA2IHwgdGhpcy5yZWFkQnl0ZSgpICYgMHgzRikpO1xuXHRcdFx0XHRcdGkgKz0gMztcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0XHRjaGFycyArPSBTdHJpbmcuZnJvbUNoYXJDb2RlKGIpO1xuXHRcdFx0XHRcdGkrKztcblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIGNoYXJzO1xuXHR9XG5cblx0cmVhZEZsb2F0ICgpOiBudW1iZXIge1xuXHRcdGNvbnN0IHZhbHVlID0gdGhpcy5idWZmZXIuZ2V0RmxvYXQzMih0aGlzLmluZGV4KTtcblx0XHR0aGlzLmluZGV4ICs9IDQ7XG5cdFx0cmV0dXJuIHZhbHVlO1xuXHR9XG5cblx0cmVhZEJvb2xlYW4gKCk6IGJvb2xlYW4ge1xuXHRcdHJldHVybiB0aGlzLnJlYWRCeXRlKCkgIT09IDA7XG5cdH1cbn1cblxuY2xhc3MgTGlua2VkTWVzaCB7XG5cdHNvdXJjZTogc3RyaW5nIHwgbnVsbDtcblx0c2tpbkluZGV4OiBudW1iZXI7IHNsb3RJbmRleDogbnVtYmVyOyBzb3VyY2VJbmRleDogbnVtYmVyXG5cdG1lc2g6IE1lc2hBdHRhY2htZW50O1xuXHRpbmhlcml0VGltZWxpbmVzOiBib29sZWFuO1xuXG5cdGNvbnN0cnVjdG9yIChtZXNoOiBNZXNoQXR0YWNobWVudCwgc2tpbkluZGV4OiBudW1iZXIsIHNsb3RJbmRleDogbnVtYmVyLCBzb3VyY2VJbmRleDogbnVtYmVyLCBzb3VyY2U6IHN0cmluZyB8IG51bGwsXG5cdFx0aW5oZXJpdFRpbWVsaW5lczogYm9vbGVhbikge1xuXHRcdHRoaXMubWVzaCA9IG1lc2g7XG5cdFx0dGhpcy5za2luSW5kZXggPSBza2luSW5kZXg7XG5cdFx0dGhpcy5zbG90SW5kZXggPSBzbG90SW5kZXg7XG5cdFx0dGhpcy5zb3VyY2VJbmRleCA9IHNvdXJjZUluZGV4O1xuXHRcdHRoaXMuc291cmNlID0gc291cmNlO1xuXHRcdHRoaXMuaW5oZXJpdFRpbWVsaW5lcyA9IGluaGVyaXRUaW1lbGluZXM7XG5cdH1cbn1cblxuY2xhc3MgVmVydGljZXMge1xuXHRjb25zdHJ1Y3RvciAocHVibGljIGJvbmVzOiBBcnJheTxudW1iZXI+IHwgbnVsbCA9IG51bGwsIHB1YmxpYyB2ZXJ0aWNlczogQXJyYXk8bnVtYmVyPiB8IEZsb2F0MzJBcnJheSwgcHVibGljIGxlbmd0aDogbnVtYmVyID0gMCkgeyB9XG59XG5cbmVudW0gQXR0YWNobWVudFR5cGUgeyBSZWdpb24sIEJvdW5kaW5nQm94LCBNZXNoLCBMaW5rZWRNZXNoLCBQYXRoLCBQb2ludCwgQ2xpcHBpbmcgfVxuXG5mdW5jdGlvbiByZWFkVGltZWxpbmUgKGlucHV0OiBCaW5hcnlJbnB1dCwgdGltZWxpbmVzOiBBcnJheTxUaW1lbGluZT4sIHRpbWVsaW5lOiBDdXJ2ZVRpbWVsaW5lMSwgc2NhbGU6IG51bWJlcik6IHZvaWQ7XG5mdW5jdGlvbiByZWFkVGltZWxpbmUgKGlucHV0OiBCaW5hcnlJbnB1dCwgdGltZWxpbmVzOiBBcnJheTxUaW1lbGluZT4sIHRpbWVsaW5lOiBCb25lVGltZWxpbmUyLCBzY2FsZTogbnVtYmVyKTogdm9pZDtcbmZ1bmN0aW9uIHJlYWRUaW1lbGluZSAoaW5wdXQ6IEJpbmFyeUlucHV0LCB0aW1lbGluZXM6IEFycmF5PFRpbWVsaW5lPiwgdGltZWxpbmU6IEN1cnZlVGltZWxpbmUxIHwgQm9uZVRpbWVsaW5lMiwgc2NhbGU6IG51bWJlcik6IHZvaWQge1xuXHRpZiAodGltZWxpbmUgaW5zdGFuY2VvZiBDdXJ2ZVRpbWVsaW5lMSlcblx0XHRyZWFkVGltZWxpbmUxKGlucHV0LCB0aW1lbGluZXMsIHRpbWVsaW5lLCBzY2FsZSk7XG5cdGVsc2Vcblx0XHRyZWFkVGltZWxpbmUyKGlucHV0LCB0aW1lbGluZXMsIHRpbWVsaW5lLCBzY2FsZSk7XG59XG5cbmZ1bmN0aW9uIHJlYWRUaW1lbGluZTEgKGlucHV0OiBCaW5hcnlJbnB1dCwgdGltZWxpbmVzOiBBcnJheTxUaW1lbGluZT4sIHRpbWVsaW5lOiBDdXJ2ZVRpbWVsaW5lMSwgc2NhbGU6IG51bWJlcik6IHZvaWQge1xuXHRsZXQgdGltZSA9IGlucHV0LnJlYWRGbG9hdCgpLCB2YWx1ZSA9IGlucHV0LnJlYWRGbG9hdCgpICogc2NhbGU7XG5cdGZvciAobGV0IGZyYW1lID0gMCwgYmV6aWVyID0gMCwgZnJhbWVMYXN0ID0gdGltZWxpbmUuZ2V0RnJhbWVDb3VudCgpIC0gMTsgOyBmcmFtZSsrKSB7XG5cdFx0dGltZWxpbmUuc2V0RnJhbWUoZnJhbWUsIHRpbWUsIHZhbHVlKTtcblx0XHRpZiAoZnJhbWUgPT09IGZyYW1lTGFzdCkgYnJlYWs7XG5cdFx0Y29uc3QgdGltZTIgPSBpbnB1dC5yZWFkRmxvYXQoKSwgdmFsdWUyID0gaW5wdXQucmVhZEZsb2F0KCkgKiBzY2FsZTtcblx0XHRzd2l0Y2ggKGlucHV0LnJlYWRCeXRlKCkpIHtcblx0XHRcdGNhc2UgQ1VSVkVfU1RFUFBFRDpcblx0XHRcdFx0dGltZWxpbmUuc2V0U3RlcHBlZChmcmFtZSk7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0Y2FzZSBDVVJWRV9CRVpJRVI6XG5cdFx0XHRcdHNldEJlemllcihpbnB1dCwgdGltZWxpbmUsIGJlemllcisrLCBmcmFtZSwgMCwgdGltZSwgdGltZTIsIHZhbHVlLCB2YWx1ZTIsIHNjYWxlKTtcblx0XHR9XG5cdFx0dGltZSA9IHRpbWUyO1xuXHRcdHZhbHVlID0gdmFsdWUyO1xuXHR9XG5cdHRpbWVsaW5lcy5wdXNoKHRpbWVsaW5lKTtcbn1cblxuZnVuY3Rpb24gcmVhZFRpbWVsaW5lMiAoaW5wdXQ6IEJpbmFyeUlucHV0LCB0aW1lbGluZXM6IEFycmF5PFRpbWVsaW5lPiwgdGltZWxpbmU6IEJvbmVUaW1lbGluZTIsIHNjYWxlOiBudW1iZXIpOiB2b2lkIHtcblx0bGV0IHRpbWUgPSBpbnB1dC5yZWFkRmxvYXQoKSwgdmFsdWUxID0gaW5wdXQucmVhZEZsb2F0KCkgKiBzY2FsZSwgdmFsdWUyID0gaW5wdXQucmVhZEZsb2F0KCkgKiBzY2FsZTtcblx0Zm9yIChsZXQgZnJhbWUgPSAwLCBiZXppZXIgPSAwLCBmcmFtZUxhc3QgPSB0aW1lbGluZS5nZXRGcmFtZUNvdW50KCkgLSAxOyA7IGZyYW1lKyspIHtcblx0XHR0aW1lbGluZS5zZXRGcmFtZShmcmFtZSwgdGltZSwgdmFsdWUxLCB2YWx1ZTIpO1xuXHRcdGlmIChmcmFtZSA9PT0gZnJhbWVMYXN0KSBicmVhaztcblx0XHRjb25zdCB0aW1lMiA9IGlucHV0LnJlYWRGbG9hdCgpLCBudmFsdWUxID0gaW5wdXQucmVhZEZsb2F0KCkgKiBzY2FsZSwgbnZhbHVlMiA9IGlucHV0LnJlYWRGbG9hdCgpICogc2NhbGU7XG5cdFx0c3dpdGNoIChpbnB1dC5yZWFkQnl0ZSgpKSB7XG5cdFx0XHRjYXNlIENVUlZFX1NURVBQRUQ6XG5cdFx0XHRcdHRpbWVsaW5lLnNldFN0ZXBwZWQoZnJhbWUpO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdGNhc2UgQ1VSVkVfQkVaSUVSOlxuXHRcdFx0XHRzZXRCZXppZXIoaW5wdXQsIHRpbWVsaW5lLCBiZXppZXIrKywgZnJhbWUsIDAsIHRpbWUsIHRpbWUyLCB2YWx1ZTEsIG52YWx1ZTEsIHNjYWxlKTtcblx0XHRcdFx0c2V0QmV6aWVyKGlucHV0LCB0aW1lbGluZSwgYmV6aWVyKyssIGZyYW1lLCAxLCB0aW1lLCB0aW1lMiwgdmFsdWUyLCBudmFsdWUyLCBzY2FsZSk7XG5cdFx0fVxuXHRcdHRpbWUgPSB0aW1lMjtcblx0XHR2YWx1ZTEgPSBudmFsdWUxO1xuXHRcdHZhbHVlMiA9IG52YWx1ZTI7XG5cdH1cblx0dGltZWxpbmVzLnB1c2godGltZWxpbmUpO1xufVxuXG5mdW5jdGlvbiByZWFkRHJhd09yZGVyIChpbnB1dDogQmluYXJ5SW5wdXQsIHNsb3RDb3VudDogbnVtYmVyKTogbnVtYmVyW10gfCBudWxsIHtcblx0Y29uc3QgY2hhbmdlQ291bnQgPSBpbnB1dC5yZWFkSW50KHRydWUpO1xuXHRpZiAoY2hhbmdlQ291bnQgPT09IDApIHJldHVybiBudWxsO1xuXHRjb25zdCBkcmF3T3JkZXIgPSBuZXcgQXJyYXk8bnVtYmVyPihzbG90Q291bnQpLmZpbGwoLTEpO1xuXHRjb25zdCB1bmNoYW5nZWQgPSBuZXcgQXJyYXk8bnVtYmVyPihzbG90Q291bnQgLSBjaGFuZ2VDb3VudCk7XG5cdGxldCBvcmlnaW5hbEluZGV4ID0gMCwgdW5jaGFuZ2VkSW5kZXggPSAwO1xuXHRmb3IgKGxldCBpID0gMDsgaSA8IGNoYW5nZUNvdW50OyBpKyspIHtcblx0XHRjb25zdCBzbG90SW5kZXggPSBpbnB1dC5yZWFkSW50KHRydWUpO1xuXHRcdC8vIENvbGxlY3QgdW5jaGFuZ2VkIGl0ZW1zLlxuXHRcdHdoaWxlIChvcmlnaW5hbEluZGV4ICE9PSBzbG90SW5kZXgpXG5cdFx0XHR1bmNoYW5nZWRbdW5jaGFuZ2VkSW5kZXgrK10gPSBvcmlnaW5hbEluZGV4Kys7XG5cdFx0Ly8gU2V0IGNoYW5nZWQgaXRlbXMuXG5cdFx0ZHJhd09yZGVyW29yaWdpbmFsSW5kZXggKyBpbnB1dC5yZWFkSW50KHRydWUpXSA9IG9yaWdpbmFsSW5kZXgrKztcblx0fVxuXHQvLyBDb2xsZWN0IHJlbWFpbmluZyB1bmNoYW5nZWQgaXRlbXMuXG5cdHdoaWxlIChvcmlnaW5hbEluZGV4IDwgc2xvdENvdW50KVxuXHRcdHVuY2hhbmdlZFt1bmNoYW5nZWRJbmRleCsrXSA9IG9yaWdpbmFsSW5kZXgrKztcblx0Ly8gRmlsbCBpbiB1bmNoYW5nZWQgaXRlbXMuXG5cdGZvciAobGV0IGkgPSBzbG90Q291bnQgLSAxOyBpID49IDA7IGktLSlcblx0XHRpZiAoZHJhd09yZGVyW2ldID09PSAtMSkgZHJhd09yZGVyW2ldID0gdW5jaGFuZ2VkWy0tdW5jaGFuZ2VkSW5kZXhdO1xuXHRyZXR1cm4gZHJhd09yZGVyO1xufVxuXG5mdW5jdGlvbiBzZXRCZXppZXIgKGlucHV0OiBCaW5hcnlJbnB1dCwgdGltZWxpbmU6IEN1cnZlVGltZWxpbmUsIGJlemllcjogbnVtYmVyLCBmcmFtZTogbnVtYmVyLCB2YWx1ZTogbnVtYmVyLFxuXHR0aW1lMTogbnVtYmVyLCB0aW1lMjogbnVtYmVyLCB2YWx1ZTE6IG51bWJlciwgdmFsdWUyOiBudW1iZXIsIHNjYWxlOiBudW1iZXIpIHtcblx0dGltZWxpbmUuc2V0QmV6aWVyKGJlemllciwgZnJhbWUsIHZhbHVlLCB0aW1lMSwgdmFsdWUxLCBpbnB1dC5yZWFkRmxvYXQoKSwgaW5wdXQucmVhZEZsb2F0KCkgKiBzY2FsZSwgaW5wdXQucmVhZEZsb2F0KCksIGlucHV0LnJlYWRGbG9hdCgpICogc2NhbGUsIHRpbWUyLCB2YWx1ZTIpO1xufVxuXG5jb25zdCBCT05FX1JPVEFURSA9IDA7XG5jb25zdCBCT05FX1RSQU5TTEFURSA9IDE7XG5jb25zdCBCT05FX1RSQU5TTEFURVggPSAyO1xuY29uc3QgQk9ORV9UUkFOU0xBVEVZID0gMztcbmNvbnN0IEJPTkVfU0NBTEUgPSA0O1xuY29uc3QgQk9ORV9TQ0FMRVggPSA1O1xuY29uc3QgQk9ORV9TQ0FMRVkgPSA2O1xuY29uc3QgQk9ORV9TSEVBUiA9IDc7XG5jb25zdCBCT05FX1NIRUFSWCA9IDg7XG5jb25zdCBCT05FX1NIRUFSWSA9IDk7XG5jb25zdCBCT05FX0lOSEVSSVQgPSAxMDtcblxuY29uc3QgU0xPVF9BVFRBQ0hNRU5UID0gMDtcbmNvbnN0IFNMT1RfUkdCQSA9IDE7XG5jb25zdCBTTE9UX1JHQiA9IDI7XG5jb25zdCBTTE9UX1JHQkEyID0gMztcbmNvbnN0IFNMT1RfUkdCMiA9IDQ7XG5jb25zdCBTTE9UX0FMUEhBID0gNTtcblxuY29uc3QgQ09OU1RSQUlOVF9JSyA9IDA7XG5jb25zdCBDT05TVFJBSU5UX1BBVEggPSAxO1xuY29uc3QgQ09OU1RSQUlOVF9UUkFOU0ZPUk0gPSAyO1xuY29uc3QgQ09OU1RSQUlOVF9QSFlTSUNTID0gMztcbmNvbnN0IENPTlNUUkFJTlRfU0xJREVSID0gNDtcblxuY29uc3QgQVRUQUNITUVOVF9ERUZPUk0gPSAwO1xuY29uc3QgQVRUQUNITUVOVF9TRVFVRU5DRSA9IDE7XG5cbmNvbnN0IFBBVEhfUE9TSVRJT04gPSAwO1xuY29uc3QgUEFUSF9TUEFDSU5HID0gMTtcbmNvbnN0IFBBVEhfTUlYID0gMjtcblxuY29uc3QgUEhZU0lDU19JTkVSVElBID0gMDtcbmNvbnN0IFBIWVNJQ1NfU1RSRU5HVEggPSAxO1xuY29uc3QgUEhZU0lDU19EQU1QSU5HID0gMjtcbmNvbnN0IFBIWVNJQ1NfTUFTUyA9IDQ7XG5jb25zdCBQSFlTSUNTX1dJTkQgPSA1O1xuY29uc3QgUEhZU0lDU19HUkFWSVRZID0gNjtcbmNvbnN0IFBIWVNJQ1NfTUlYID0gNztcbmNvbnN0IFBIWVNJQ1NfUkVTRVQgPSA4O1xuXG5jb25zdCBTTElERVJfVElNRSA9IDA7XG5jb25zdCBTTElERVJfTUlYID0gMTtcblxuLy8gYmlvbWUtaWdub3JlIGxpbnQvY29ycmVjdG5lc3Mvbm9VbnVzZWRWYXJpYWJsZXM6IGludGVudGlvbmFsXG5jb25zdCBDVVJWRV9MSU5FQVIgPSAwO1xuY29uc3QgQ1VSVkVfU1RFUFBFRCA9IDE7XG5jb25zdCBDVVJWRV9CRVpJRVIgPSAyO1xuIl19
|