@esotericsoftware/spine-core 4.2.115 → 4.3.0

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