@esotericsoftware/spine-pixi-v8 4.2.104 → 4.2.106
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/Spine.d.ts +12 -3
- package/dist/Spine.js +28 -9
- package/dist/esm/spine-pixi-v8.min.mjs +3 -3
- package/dist/esm/spine-pixi-v8.mjs +27 -8
- package/dist/esm/spine-pixi-v8.mjs.map +2 -2
- package/dist/iife/spine-pixi-v8.js +27 -8
- package/dist/iife/spine-pixi-v8.js.map +2 -2
- package/dist/iife/spine-pixi-v8.min.js +3 -3
- package/package.json +2 -2
package/dist/Spine.d.ts
CHANGED
|
@@ -27,7 +27,7 @@
|
|
|
27
27
|
* THE SPINE RUNTIMES, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
28
28
|
*****************************************************************************/
|
|
29
29
|
import { AnimationState, Bone, Color, MeshAttachment, RegionAttachment, Skeleton, SkeletonBounds, SkeletonData, Slot, TrackEntry } from '@esotericsoftware/spine-core';
|
|
30
|
-
import { Bounds, Container, ContainerOptions, DestroyOptions, PointData, Texture, ViewContainer } from 'pixi.js';
|
|
30
|
+
import { Bounds, Container, ContainerOptions, DestroyOptions, PointData, Texture, Ticker, ViewContainer } from 'pixi.js';
|
|
31
31
|
import { ISpineDebugRenderer } from './SpineDebugRenderer.js';
|
|
32
32
|
/**
|
|
33
33
|
* Options to create a {@link Spine} using {@link Spine.from}.
|
|
@@ -49,6 +49,8 @@ export interface SpineFromOptions {
|
|
|
49
49
|
darkTint?: boolean;
|
|
50
50
|
/** The bounds provider to use. If undefined the bounds will be dynamic, calculated when requested and based on the current frame. */
|
|
51
51
|
boundsProvider?: SpineBoundsProvider;
|
|
52
|
+
/** The ticker to use when {@link autoUpdate} is `true`. Defaults to {@link Ticker.shared}. */
|
|
53
|
+
ticker?: Ticker;
|
|
52
54
|
}
|
|
53
55
|
/** A bounds provider calculates the bounding box for a skeleton, which is then assigned as the size of the SpineGameObject. */
|
|
54
56
|
export interface SpineBoundsProvider {
|
|
@@ -117,6 +119,8 @@ export interface SpineOptions extends ContainerOptions {
|
|
|
117
119
|
darkTint?: boolean;
|
|
118
120
|
/** See {@link SpineFromOptions.boundsProvider}. */
|
|
119
121
|
boundsProvider?: SpineBoundsProvider;
|
|
122
|
+
/** See {@link SpineFromOptions.ticker}. */
|
|
123
|
+
ticker?: Ticker;
|
|
120
124
|
}
|
|
121
125
|
/**
|
|
122
126
|
* AnimationStateListener {@link https://en.esotericsoftware.com/spine-api-reference#AnimationStateListener events} exposed for Pixi.
|
|
@@ -184,9 +188,14 @@ export declare class Spine extends ViewContainer {
|
|
|
184
188
|
*/
|
|
185
189
|
set debug(value: ISpineDebugRenderer | undefined);
|
|
186
190
|
private _autoUpdate;
|
|
191
|
+
private _ticker;
|
|
187
192
|
get autoUpdate(): boolean;
|
|
188
|
-
/** When `true`, the Spine AnimationState and the Skeleton will be automatically updated using the {@link
|
|
193
|
+
/** When `true`, the Spine AnimationState and the Skeleton will be automatically updated using the {@link ticker}. */
|
|
189
194
|
set autoUpdate(value: boolean);
|
|
195
|
+
/** The ticker to use when {@link autoUpdate} is `true`. Defaults to {@link Ticker.shared}. */
|
|
196
|
+
get ticker(): Ticker;
|
|
197
|
+
/** Sets the ticker to use when {@link autoUpdate} is `true`. If `autoUpdate` is already `true`, the update callback will be moved from the old ticker to the new one. */
|
|
198
|
+
set ticker(value: Ticker);
|
|
190
199
|
private _boundsProvider?;
|
|
191
200
|
/** The bounds provider to use. If undefined the bounds will be dynamic, calculated when requested and based on the current frame. */
|
|
192
201
|
get boundsProvider(): SpineBoundsProvider | undefined;
|
|
@@ -309,5 +318,5 @@ export declare class Spine extends ViewContainer {
|
|
|
309
318
|
* @param options - Options to configure the Spine game object. See {@link SpineFromOptions}
|
|
310
319
|
* @returns {Spine} The Spine game object instantiated
|
|
311
320
|
*/
|
|
312
|
-
static from({ skeleton, atlas, scale, darkTint, autoUpdate, boundsProvider }: SpineFromOptions): Spine;
|
|
321
|
+
static from({ skeleton, atlas, scale, darkTint, autoUpdate, boundsProvider, ticker }: SpineFromOptions): Spine;
|
|
313
322
|
}
|
package/dist/Spine.js
CHANGED
|
@@ -205,19 +205,35 @@ export class Spine extends ViewContainer {
|
|
|
205
205
|
this._debug = value;
|
|
206
206
|
}
|
|
207
207
|
_autoUpdate = false;
|
|
208
|
+
_ticker = Ticker.shared;
|
|
208
209
|
get autoUpdate() {
|
|
209
210
|
return this._autoUpdate;
|
|
210
211
|
}
|
|
211
|
-
/** When `true`, the Spine AnimationState and the Skeleton will be automatically updated using the {@link
|
|
212
|
+
/** When `true`, the Spine AnimationState and the Skeleton will be automatically updated using the {@link ticker}. */
|
|
212
213
|
set autoUpdate(value) {
|
|
213
214
|
if (value && !this._autoUpdate) {
|
|
214
|
-
|
|
215
|
+
this._ticker.add(this.internalUpdate, this);
|
|
215
216
|
}
|
|
216
217
|
else if (!value && this._autoUpdate) {
|
|
217
|
-
|
|
218
|
+
this._ticker.remove(this.internalUpdate, this);
|
|
218
219
|
}
|
|
219
220
|
this._autoUpdate = value;
|
|
220
221
|
}
|
|
222
|
+
/** The ticker to use when {@link autoUpdate} is `true`. Defaults to {@link Ticker.shared}. */
|
|
223
|
+
get ticker() {
|
|
224
|
+
return this._ticker;
|
|
225
|
+
}
|
|
226
|
+
/** Sets the ticker to use when {@link autoUpdate} is `true`. If `autoUpdate` is already `true`, the update callback will be moved from the old ticker to the new one. */
|
|
227
|
+
set ticker(value) {
|
|
228
|
+
value = value ?? Ticker.shared;
|
|
229
|
+
if (this._ticker === value)
|
|
230
|
+
return;
|
|
231
|
+
if (this._autoUpdate) {
|
|
232
|
+
this._ticker.remove(this.internalUpdate, this);
|
|
233
|
+
value.add(this.internalUpdate, this);
|
|
234
|
+
}
|
|
235
|
+
this._ticker = value;
|
|
236
|
+
}
|
|
221
237
|
_boundsProvider;
|
|
222
238
|
/** The bounds provider to use. If undefined the bounds will be dynamic, calculated when requested and based on the current frame. */
|
|
223
239
|
get boundsProvider() {
|
|
@@ -242,6 +258,8 @@ export class Spine extends ViewContainer {
|
|
|
242
258
|
const skeletonData = options instanceof SkeletonData ? options : options.skeletonData;
|
|
243
259
|
this.skeleton = new Skeleton(skeletonData);
|
|
244
260
|
this.state = new AnimationState(new AnimationStateData(skeletonData));
|
|
261
|
+
if (options?.ticker)
|
|
262
|
+
this._ticker = options.ticker;
|
|
245
263
|
this.autoUpdate = options?.autoUpdate ?? true;
|
|
246
264
|
// dark tint can be enabled by options, otherwise is enable if at least one slot has tint black
|
|
247
265
|
this.darkTint = options?.darkTint === undefined
|
|
@@ -258,9 +276,7 @@ export class Spine extends ViewContainer {
|
|
|
258
276
|
this.internalUpdate(0, dt);
|
|
259
277
|
}
|
|
260
278
|
internalUpdate(_deltaFrame, deltaSeconds) {
|
|
261
|
-
|
|
262
|
-
// We ignore the default deltaFrames and use the deltaSeconds from pixi ticker.
|
|
263
|
-
this._updateAndApplyState(deltaSeconds ?? Ticker.shared.deltaMS / 1000);
|
|
279
|
+
this._updateAndApplyState(deltaSeconds ?? this._ticker.deltaMS / 1000);
|
|
264
280
|
}
|
|
265
281
|
get bounds() {
|
|
266
282
|
if (this._boundsDirty) {
|
|
@@ -734,7 +750,8 @@ export class Spine extends ViewContainer {
|
|
|
734
750
|
*/
|
|
735
751
|
destroy(options = false) {
|
|
736
752
|
super.destroy(options);
|
|
737
|
-
|
|
753
|
+
this._ticker.remove(this.internalUpdate, this);
|
|
754
|
+
this._ticker = null;
|
|
738
755
|
this.state.clearListeners();
|
|
739
756
|
this.debug = undefined;
|
|
740
757
|
this.skeleton = null;
|
|
@@ -775,7 +792,7 @@ export class Spine extends ViewContainer {
|
|
|
775
792
|
* @param options - Options to configure the Spine game object. See {@link SpineFromOptions}
|
|
776
793
|
* @returns {Spine} The Spine game object instantiated
|
|
777
794
|
*/
|
|
778
|
-
static from({ skeleton, atlas, scale = 1, darkTint, autoUpdate = true, boundsProvider }) {
|
|
795
|
+
static from({ skeleton, atlas, scale = 1, darkTint, autoUpdate = true, boundsProvider, ticker }) {
|
|
779
796
|
const cacheKey = `${skeleton}-${atlas}-${scale}`;
|
|
780
797
|
if (Cache.has(cacheKey)) {
|
|
781
798
|
return new Spine({
|
|
@@ -783,6 +800,7 @@ export class Spine extends ViewContainer {
|
|
|
783
800
|
darkTint,
|
|
784
801
|
autoUpdate,
|
|
785
802
|
boundsProvider,
|
|
803
|
+
ticker,
|
|
786
804
|
});
|
|
787
805
|
}
|
|
788
806
|
const skeletonAsset = Assets.get(skeleton);
|
|
@@ -799,7 +817,8 @@ export class Spine extends ViewContainer {
|
|
|
799
817
|
darkTint,
|
|
800
818
|
autoUpdate,
|
|
801
819
|
boundsProvider,
|
|
820
|
+
ticker,
|
|
802
821
|
});
|
|
803
822
|
}
|
|
804
823
|
}
|
|
805
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU3BpbmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvU3BpbmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OzsrRUEyQitFO0FBRS9FLE9BQU8sRUFDTixjQUFjLEVBQ2Qsa0JBQWtCLEVBQ2xCLHFCQUFxQixFQUdyQixrQkFBa0IsRUFDbEIsS0FBSyxFQUNMLGNBQWMsRUFDZCxPQUFPLEVBQ1AsSUFBSSxFQUNKLGdCQUFnQixFQUNoQixRQUFRLEVBQ1IsY0FBYyxFQUNkLGNBQWMsRUFDZCxnQkFBZ0IsRUFDaEIsWUFBWSxFQUNaLFlBQVksRUFDWixJQUFJLEVBSUosT0FBTyxHQUNQLE1BQU0sOEJBQThCLENBQUM7QUFDdEMsT0FBTyxFQUNOLE1BQU0sRUFFTixLQUFLLEVBQ0wsU0FBUyxFQUdULFFBQVEsRUFDUixRQUFRLEVBRVIsT0FBTyxFQUNQLE1BQU0sRUFDTixhQUFhLEdBQ2IsTUFBTSxTQUFTLENBQUM7QUE0QmhCLENBQUM7QUFFRixNQUFNLFNBQVMsR0FBRyxJQUFJLE9BQU8sRUFBRSxDQUFDO0FBRWhDLFFBQVEsQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDO0FBRXRCLE1BQU0sT0FBTyxHQUFHLElBQUksZ0JBQWdCLEVBQUUsQ0FBQztBQWF2QyxzRUFBc0U7QUFDdEUsTUFBTSxPQUFPLDJCQUEyQjtJQUU5QjtJQUNBO0lBQ0E7SUFDQTtJQUpULFlBQ1MsQ0FBUyxFQUNULENBQVMsRUFDVCxLQUFhLEVBQ2IsTUFBYztRQUhkLE1BQUMsR0FBRCxDQUFDLENBQVE7UUFDVCxNQUFDLEdBQUQsQ0FBQyxDQUFRO1FBQ1QsVUFBSyxHQUFMLEtBQUssQ0FBUTtRQUNiLFdBQU0sR0FBTixNQUFNLENBQVE7SUFDbkIsQ0FBQztJQUNMLGVBQWU7UUFDZCxPQUFPLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDLEVBQUUsS0FB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KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4gKiBTcGluZSBSdW50aW1lcyBMaWNlbnNlIEFncmVlbWVudFxuICogTGFzdCB1cGRhdGVkIEFwcmlsIDUsIDIwMjUuIFJlcGxhY2VzIGFsbCBwcmlvciB2ZXJzaW9ucy5cbiAqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTMtMjAyNSwgRXNvdGVyaWMgU29mdHdhcmUgTExDXG4gKlxuICogSW50ZWdyYXRpb24gb2YgdGhlIFNwaW5lIFJ1bnRpbWVzIGludG8gc29mdHdhcmUgb3Igb3RoZXJ3aXNlIGNyZWF0aW5nXG4gKiBkZXJpdmF0aXZlIHdvcmtzIG9mIHRoZSBTcGluZSBSdW50aW1lcyBpcyBwZXJtaXR0ZWQgdW5kZXIgdGhlIHRlcm1zIGFuZFxuICogY29uZGl0aW9ucyBvZiBTZWN0aW9uIDIgb2YgdGhlIFNwaW5lIEVkaXRvciBMaWNlbnNlIEFncmVlbWVudDpcbiAqIGh0dHA6Ly9lc290ZXJpY3NvZnR3YXJlLmNvbS9zcGluZS1lZGl0b3ItbGljZW5zZVxuICpcbiAqIE90aGVyd2lzZSwgaXQgaXMgcGVybWl0dGVkIHRvIGludGVncmF0ZSB0aGUgU3BpbmUgUnVudGltZXMgaW50byBzb2Z0d2FyZVxuICogb3Igb3RoZXJ3aXNlIGNyZWF0ZSBkZXJpdmF0aXZlIHdvcmtzIG9mIHRoZSBTcGluZSBSdW50aW1lcyAoY29sbGVjdGl2ZWx5LFxuICogXCJQcm9kdWN0c1wiKSwgcHJvdmlkZWQgdGhhdCBlYWNoIHVzZXIgb2YgdGhlIFByb2R1Y3RzIG11c3Qgb2J0YWluIHRoZWlyIG93blxuICogU3BpbmUgRWRpdG9yIGxpY2Vuc2UgYW5kIHJlZGlzdHJpYnV0aW9uIG9mIHRoZSBQcm9kdWN0cyBpbiBhbnkgZm9ybSBtdXN0XG4gKiBpbmNsdWRlIHRoaXMgbGljZW5zZSBhbmQgY29weXJpZ2h0IG5vdGljZS5cbiAqXG4gKiBUSEUgU1BJTkUgUlVOVElNRVMgQVJFIFBST1ZJREVEIEJZIEVTT1RFUklDIFNPRlRXQVJFIExMQyBcIkFTIElTXCIgQU5EIEFOWVxuICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRFxuICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRVxuICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgRVNPVEVSSUMgU09GVFdBUkUgTExDIEJFIExJQUJMRSBGT1IgQU5ZXG4gKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFU1xuICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTLFxuICogQlVTSU5FU1MgSU5URVJSVVBUSU9OLCBPUiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUykgSE9XRVZFUiBDQVVTRUQgQU5EXG4gKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVFxuICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GXG4gKiBUSEUgU1BJTkUgUlVOVElNRVMsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuXG4gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG5cbmltcG9ydCB7XG5cdEFuaW1hdGlvblN0YXRlLFxuXHRBbmltYXRpb25TdGF0ZURhdGEsXG5cdEF0bGFzQXR0YWNobWVudExvYWRlcixcblx0QXR0YWNobWVudCxcblx0Qm9uZSxcblx0Q2xpcHBpbmdBdHRhY2htZW50LFxuXHRDb2xvcixcblx0TWVzaEF0dGFjaG1lbnQsXG5cdFBoeXNpY3MsXG5cdFBvb2wsXG5cdFJlZ2lvbkF0dGFjaG1lbnQsXG5cdFNrZWxldG9uLFxuXHRTa2VsZXRvbkJpbmFyeSxcblx0U2tlbGV0b25Cb3VuZHMsXG5cdFNrZWxldG9uQ2xpcHBpbmcsXG5cdFNrZWxldG9uRGF0YSxcblx0U2tlbGV0b25Kc29uLFxuXHRTa2luLFxuXHRTbG90LFxuXHR0eXBlIFRleHR1cmVBdGxhcyxcblx0VHJhY2tFbnRyeSxcblx0VmVjdG9yMixcbn0gZnJvbSAnQGVzb3Rlcmljc29mdHdhcmUvc3BpbmUtY29yZSc7XG5pbXBvcnQge1xuXHRBc3NldHMsXG5cdEJvdW5kcyxcblx0Q2FjaGUsXG5cdENvbnRhaW5lcixcblx0Q29udGFpbmVyT3B0aW9ucyxcblx0RGVzdHJveU9wdGlvbnMsXG5cdGZhc3RDb3B5LFxuXHRHcmFwaGljcyxcblx0UG9pbnREYXRhLFxuXHRUZXh0dXJlLFxuXHRUaWNrZXIsXG5cdFZpZXdDb250YWluZXIsXG59IGZyb20gJ3BpeGkuanMnO1xuaW1wb3J0IHsgSVNwaW5lRGVidWdSZW5kZXJlciB9IGZyb20gJy4vU3BpbmVEZWJ1Z1JlbmRlcmVyLmpzJztcblxuLyoqXG4gKiBPcHRpb25zIHRvIGNyZWF0ZSBhIHtAbGluayBTcGluZX0gdXNpbmcge0BsaW5rIFNwaW5lLmZyb219LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFNwaW5lRnJvbU9wdGlvbnMge1xuXHQvKiogdGhlIGFzc2V0IG5hbWUgZm9yIHRoZSBza2VsZXRvbiBgLnNrZWxgIG9yIGAuanNvbmAgZmlsZSBwcmV2aW91c2x5IGxvYWRlZCBpbnRvIHRoZSBBc3NldHMgKi9cblx0c2tlbGV0b246IHN0cmluZztcblxuXHQvKiogdGhlIGFzc2V0IG5hbWUgZm9yIHRoZSBhdGxhcyBmaWxlIHByZXZpb3VzbHkgbG9hZGVkIGludG8gdGhlIEFzc2V0cyAqL1xuXHRhdGxhczogc3RyaW5nO1xuXG5cdC8qKiAgVGhlIHZhbHVlIHBhc3NlZCB0byB0aGUgc2tlbGV0b24gcmVhZGVyLiBJZiBvbWl0dGVkLCAxIGlzIHBhc3NlZC4gU2VlIHtAbGluayBTa2VsZXRvbkJpbmFyeS5zY2FsZX0gZm9yIGRldGFpbHMuICovXG5cdHNjYWxlPzogbnVtYmVyO1xuXG5cdC8qKiAgU2V0IHRoZSB7QGxpbmsgU3BpbmUuYXV0b1VwZGF0ZX0gdmFsdWUuIElmIG9taXR0ZWQsIGl0IGlzIHNldCB0byBgdHJ1ZWAuICovXG5cdGF1dG9VcGRhdGU/OiBib29sZWFuO1xuXG5cdC8qKlxuXHQgKiBJZiBgdHJ1ZWAsIHVzZSB0aGUgZGFyayB0aW50IHJlbmRlcmVyIHRvIHJlbmRlciB0aGUgc2tlbGV0b25cblx0ICogSWYgYGZhbHNlYCwgdXNlIHRoZSBkZWZhdWx0IHBpeGkgcmVuZGVyZXIgdG8gcmVuZGVyIHRoZSBza2VsZXRvblxuXHQgKiBJZiBgdW5kZWZpbmVkYCwgdXNlIHRoZSBkYXJrIHRpbnQgcmVuZGVyZXIgaWYgYXQgbGVhc3Qgb25lIHNsb3QgaGFzIHRpbnQgYmxhY2tcblx0ICovXG5cdGRhcmtUaW50PzogYm9vbGVhbjtcblxuXHQvKiogVGhlIGJvdW5kcyBwcm92aWRlciB0byB1c2UuIElmIHVuZGVmaW5lZCB0aGUgYm91bmRzIHdpbGwgYmUgZHluYW1pYywgY2FsY3VsYXRlZCB3aGVuIHJlcXVlc3RlZCBhbmQgYmFzZWQgb24gdGhlIGN1cnJlbnQgZnJhbWUuICovXG5cdGJvdW5kc1Byb3ZpZGVyPzogU3BpbmVCb3VuZHNQcm92aWRlcixcbn07XG5cbmNvbnN0IHZlY3RvckF1eCA9IG5ldyBWZWN0b3IyKCk7XG5cblNrZWxldG9uLnlEb3duID0gdHJ1ZTtcblxuY29uc3QgY2xpcHBlciA9IG5ldyBTa2VsZXRvbkNsaXBwaW5nKCk7XG5cbi8qKiBBIGJvdW5kcyBwcm92aWRlciBjYWxjdWxhdGVzIHRoZSBib3VuZGluZyBib3ggZm9yIGEgc2tlbGV0b24sIHdoaWNoIGlzIHRoZW4gYXNzaWduZWQgYXMgdGhlIHNpemUgb2YgdGhlIFNwaW5lR2FtZU9iamVjdC4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU3BpbmVCb3VuZHNQcm92aWRlciB7XG5cdC8qKiBSZXR1cm5zIHRoZSBib3VuZGluZyBib3ggZm9yIHRoZSBza2VsZXRvbiwgaW4gc2tlbGV0b24gc3BhY2UuICovXG5cdGNhbGN1bGF0ZUJvdW5kcyAoZ2FtZU9iamVjdDogU3BpbmUpOiB7XG5cdFx0eDogbnVtYmVyO1xuXHRcdHk6IG51bWJlcjtcblx0XHR3aWR0aDogbnVtYmVyO1xuXHRcdGhlaWdodDogbnVtYmVyO1xuXHR9O1xufVxuXG4vKiogQSBib3VuZHMgcHJvdmlkZXIgdGhhdCBwcm92aWRlcyBhIGZpeGVkIHNpemUgZ2l2ZW4gYnkgdGhlIHVzZXIuICovXG5leHBvcnQgY2xhc3MgQUFCQlJlY3RhbmdsZUJvdW5kc1Byb3ZpZGVyIGltcGxlbWVudHMgU3BpbmVCb3VuZHNQcm92aWRlciB7XG5cdGNvbnN0cnVjdG9yIChcblx0XHRwcml2YXRlIHg6IG51bWJlcixcblx0XHRwcml2YXRlIHk6IG51bWJlcixcblx0XHRwcml2YXRlIHdpZHRoOiBudW1iZXIsXG5cdFx0cHJpdmF0ZSBoZWlnaHQ6IG51bWJlcixcblx0KSB7IH1cblx0Y2FsY3VsYXRlQm91bmRzICgpIHtcblx0XHRyZXR1cm4geyB4OiB0aGlzLngsIHk6IHRoaXMueSwgd2lkdGg6IHRoaXMud2lkdGgsIGhlaWdodDogdGhpcy5oZWlnaHQgfTtcblx0fVxufVxuXG4vKiogQSBib3VuZHMgcHJvdmlkZXIgdGhhdCBjYWxjdWxhdGVzIHRoZSBib3VuZGluZyBib3ggZnJvbSB0aGUgc2V0dXAgcG9zZS4gKi9cbmV4cG9ydCBjbGFzcyBTZXR1cFBvc2VCb3VuZHNQcm92aWRlciBpbXBsZW1lbnRzIFNwaW5lQm91bmRzUHJvdmlkZXIge1xuXHQvKipcblx0ICogQHBhcmFtIGNsaXBwaW5nIElmIHRydWUsIGNsaXBwaW5nIGF0dGFjaG1lbnRzIGFyZSB1c2VkIHRvIGNvbXB1dGUgdGhlIGJvdW5kcy4gRmFsc2UsIGJ5IGRlZmF1bHQuXG5cdCAqL1xuXHRjb25zdHJ1Y3RvciAoXG5cdFx0cHJpdmF0ZSBjbGlwcGluZyA9IGZhbHNlLFxuXHQpIHsgfVxuXG5cdGNhbGN1bGF0ZUJvdW5kcyAoZ2FtZU9iamVjdDogU3BpbmUpIHtcblx0XHRpZiAoIWdhbWVPYmplY3Quc2tlbGV0b24pIHJldHVybiB7IHg6IDAsIHk6IDAsIHdpZHRoOiAwLCBoZWlnaHQ6IDAgfTtcblx0XHQvLyBNYWtlIGEgY29weSBvZiBhbmltYXRpb24gc3RhdGUgYW5kIHNrZWxldG9uIGFzIHRoaXMgbWlnaHQgYmUgY2FsbGVkIHdoaWxlXG5cdFx0Ly8gdGhlIHNrZWxldG9uIGluIHRoZSBHYW1lT2JqZWN0IGhhcyBhbHJlYWR5IGJlZW4gaGVhdmlseSBtb2RpZmllZC4gV2UgY2FuIG5vdFxuXHRcdC8vIHJlY29uc3RydWN0IHRoYXQgc3RhdGUuXG5cdFx0Y29uc3Qgc2tlbGV0b24gPSBuZXcgU2tlbGV0b24oZ2FtZU9iamVjdC5za2VsZXRvbi5kYXRhKTtcblx0XHRza2VsZXRvbi5zZXRUb1NldHVwUG9zZSgpO1xuXHRcdHNrZWxldG9uLnVwZGF0ZVdvcmxkVHJhbnNmb3JtKFBoeXNpY3MudXBkYXRlKTtcblx0XHRjb25zdCBib3VuZHMgPSBza2VsZXRvbi5nZXRCb3VuZHNSZWN0KHRoaXMuY2xpcHBpbmcgPyBuZXcgU2tlbGV0b25DbGlwcGluZygpIDogdW5kZWZpbmVkKTtcblx0XHRyZXR1cm4gYm91bmRzLndpZHRoID09IE51bWJlci5ORUdBVElWRV9JTkZJTklUWVxuXHRcdFx0PyB7IHg6IDAsIHk6IDAsIHdpZHRoOiAwLCBoZWlnaHQ6IDAgfVxuXHRcdFx0OiBib3VuZHM7XG5cdH1cbn1cblxuLyoqIEEgYm91bmRzIHByb3ZpZGVyIHRoYXQgY2FsY3VsYXRlcyB0aGUgYm91bmRpbmcgYm94IGJ5IHRha2luZyB0aGUgbWF4aW11bWcgYm91bmRpbmcgYm94IGZvciBhIGNvbWJpbmF0aW9uIG9mIHNraW5zIGFuZCBzcGVjaWZpYyBhbmltYXRpb24uICovXG5leHBvcnQgY2xhc3MgU2tpbnNBbmRBbmltYXRpb25Cb3VuZHNQcm92aWRlclxuXHRpbXBsZW1lbnRzIFNwaW5lQm91bmRzUHJvdmlkZXIge1xuXHQvKipcblx0ICogQHBhcmFtIGFuaW1hdGlvbiBUaGUgYW5pbWF0aW9uIHRvIHVzZSBmb3IgY2FsY3VsYXRpbmcgdGhlIGJvdW5kcy4gSWYgbnVsbCwgdGhlIHNldHVwIHBvc2UgaXMgdXNlZC5cblx0ICogQHBhcmFtIHNraW5zIFRoZSBza2lucyB0byB1c2UgZm9yIGNhbGN1bGF0aW5nIHRoZSBib3VuZHMuIElmIGVtcHR5LCB0aGUgZGVmYXVsdCBza2luIGlzIHVzZWQuXG5cdCAqIEBwYXJhbSB0aW1lU3RlcCBUaGUgdGltZSBzdGVwIHRvIHVzZSBmb3IgY2FsY3VsYXRpbmcgdGhlIGJvdW5kcy4gQSBzbWFsbGVyIHRpbWUgc3RlcCBtZWFucyBtb3JlIHByZWNpc2lvbiwgYnV0IHNsb3dlciBjYWxjdWxhdGlvbi5cblx0ICogQHBhcmFtIGNsaXBwaW5nIElmIHRydWUsIGNsaXBwaW5nIGF0dGFjaG1lbnRzIGFyZSB1c2VkIHRvIGNvbXB1dGUgdGhlIGJvdW5kcy4gRmFsc2UsIGJ5IGRlZmF1bHQuXG5cdCAqL1xuXHRjb25zdHJ1Y3RvciAoXG5cdFx0cHJpdmF0ZSBhbmltYXRpb246IHN0cmluZyB8IG51bGwsXG5cdFx0cHJpdmF0ZSBza2luczogc3RyaW5nW10gPSBbXSxcblx0XHRwcml2YXRlIHRpbWVTdGVwOiBudW1iZXIgPSAwLjA1LFxuXHRcdHByaXZhdGUgY2xpcHBpbmcgPSBmYWxzZSxcblx0KSB7IH1cblxuXHRjYWxjdWxhdGVCb3VuZHMgKGdhbWVPYmplY3Q6IFNwaW5lKToge1xuXHRcdHg6IG51bWJlcjtcblx0XHR5OiBudW1iZXI7XG5cdFx0d2lkdGg6IG51bWJlcjtcblx0XHRoZWlnaHQ6IG51bWJlcjtcblx0fSB7XG5cdFx0aWYgKCFnYW1lT2JqZWN0LnNrZWxldG9uIHx8ICFnYW1lT2JqZWN0LnN0YXRlKVxuXHRcdFx0cmV0dXJuIHsgeDogMCwgeTogMCwgd2lkdGg6IDAsIGhlaWdodDogMCB9O1xuXHRcdC8vIE1ha2UgYSBjb3B5IG9mIGFuaW1hdGlvbiBzdGF0ZSBhbmQgc2tlbGV0b24gYXMgdGhpcyBtaWdodCBiZSBjYWxsZWQgd2hpbGVcblx0XHQvLyB0aGUgc2tlbGV0b24gaW4gdGhlIEdhbWVPYmplY3QgaGFzIGFscmVhZHkgYmVlbiBoZWF2aWx5IG1vZGlmaWVkLiBXZSBjYW4gbm90XG5cdFx0Ly8gcmVjb25zdHJ1Y3QgdGhhdCBzdGF0ZS5cblx0XHRjb25zdCBhbmltYXRpb25TdGF0ZSA9IG5ldyBBbmltYXRpb25TdGF0ZShnYW1lT2JqZWN0LnN0YXRlLmRhdGEpO1xuXHRcdGNvbnN0IHNrZWxldG9uID0gbmV3IFNrZWxldG9uKGdhbWVPYmplY3Quc2tlbGV0b24uZGF0YSk7XG5cdFx0Y29uc3QgY2xpcHBlciA9IHRoaXMuY2xpcHBpbmcgPyBuZXcgU2tlbGV0b25DbGlwcGluZygpIDogdW5kZWZpbmVkO1xuXHRcdGNvbnN0IGRhdGEgPSBza2VsZXRvbi5kYXRhO1xuXHRcdGlmICh0aGlzLnNraW5zLmxlbmd0aCA+IDApIHtcblx0XHRcdGxldCBjdXN0b21Ta2luID0gbmV3IFNraW4oXCJjdXN0b20tc2tpblwiKTtcblx0XHRcdGZvciAoY29uc3Qgc2tpbk5hbWUgb2YgdGhpcy5za2lucykge1xuXHRcdFx0XHRjb25zdCBza2luID0gZGF0YS5maW5kU2tpbihza2luTmFtZSk7XG5cdFx0XHRcdGlmIChza2luID09IG51bGwpIGNvbnRpbnVlO1xuXHRcdFx0XHRjdXN0b21Ta2luLmFkZFNraW4oc2tpbik7XG5cdFx0XHR9XG5cdFx0XHRza2VsZXRvbi5zZXRTa2luKGN1c3RvbVNraW4pO1xuXHRcdH1cblx0XHRza2VsZXRvbi5zZXRUb1NldHVwUG9zZSgpO1xuXG5cdFx0Y29uc3QgYW5pbWF0aW9uID0gdGhpcy5hbmltYXRpb24gIT0gbnVsbCA/IGRhdGEuZmluZEFuaW1hdGlvbih0aGlzLmFuaW1hdGlvbiEpIDogbnVsbDtcblxuXHRcdGlmIChhbmltYXRpb24gPT0gbnVsbCkge1xuXHRcdFx0c2tlbGV0b24udXBkYXRlV29ybGRUcmFuc2Zvcm0oUGh5c2ljcy51cGRhdGUpO1xuXHRcdFx0Y29uc3QgYm91bmRzID0gc2tlbGV0b24uZ2V0Qm91bmRzUmVjdChjbGlwcGVyKTtcblx0XHRcdHJldHVybiBib3VuZHMud2lkdGggPT0gTnVtYmVyLk5FR0FUSVZFX0lORklOSVRZXG5cdFx0XHRcdD8geyB4OiAwLCB5OiAwLCB3aWR0aDogMCwgaGVpZ2h0OiAwIH1cblx0XHRcdFx0OiBib3VuZHM7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGxldCBtaW5YID0gTnVtYmVyLlBPU0lUSVZFX0lORklOSVRZLFxuXHRcdFx0XHRtaW5ZID0gTnVtYmVyLlBPU0lUSVZFX0lORklOSVRZLFxuXHRcdFx0XHRtYXhYID0gTnVtYmVyLk5FR0FUSVZFX0lORklOSVRZLFxuXHRcdFx0XHRtYXhZID0gTnVtYmVyLk5FR0FUSVZFX0lORklOSVRZO1xuXHRcdFx0YW5pbWF0aW9uU3RhdGUuY2xlYXJUcmFja3MoKTtcblx0XHRcdGFuaW1hdGlvblN0YXRlLnNldEFuaW1hdGlvbldpdGgoMCwgYW5pbWF0aW9uLCBmYWxzZSk7XG5cdFx0XHRjb25zdCBzdGVwcyA9IE1hdGgubWF4KGFuaW1hdGlvbi5kdXJhdGlvbiAvIHRoaXMudGltZVN0ZXAsIDEuMCk7XG5cdFx0XHRmb3IgKGxldCBpID0gMDsgaSA8IHN0ZXBzOyBpKyspIHtcblx0XHRcdFx0Y29uc3QgZGVsdGEgPSBpID4gMCA/IHRoaXMudGltZVN0ZXAgOiAwO1xuXHRcdFx0XHRhbmltYXRpb25TdGF0ZS51cGRhdGUoZGVsdGEpO1xuXHRcdFx0XHRhbmltYXRpb25TdGF0ZS5hcHBseShza2VsZXRvbik7XG5cdFx0XHRcdHNrZWxldG9uLnVwZGF0ZShkZWx0YSk7XG5cdFx0XHRcdHNrZWxldG9uLnVwZGF0ZVdvcmxkVHJhbnNmb3JtKFBoeXNpY3MudXBkYXRlKTtcblxuXHRcdFx0XHRjb25zdCBib3VuZHMgPSBza2VsZXRvbi5nZXRCb3VuZHNSZWN0KGNsaXBwZXIpO1xuXHRcdFx0XHRtaW5YID0gTWF0aC5taW4obWluWCwgYm91bmRzLngpO1xuXHRcdFx0XHRtaW5ZID0gTWF0aC5taW4obWluWSwgYm91bmRzLnkpO1xuXHRcdFx0XHRtYXhYID0gTWF0aC5tYXgobWF4WCwgYm91bmRzLnggKyBib3VuZHMud2lkdGgpO1xuXHRcdFx0XHRtYXhZID0gTWF0aC5tYXgobWF4WSwgYm91bmRzLnkgKyBib3VuZHMuaGVpZ2h0KTtcblx0XHRcdH1cblx0XHRcdGNvbnN0IGJvdW5kcyA9IHtcblx0XHRcdFx0eDogbWluWCxcblx0XHRcdFx0eTogbWluWSxcblx0XHRcdFx0d2lkdGg6IG1heFggLSBtaW5YLFxuXHRcdFx0XHRoZWlnaHQ6IG1heFkgLSBtaW5ZLFxuXHRcdFx0fTtcblx0XHRcdHJldHVybiBib3VuZHMud2lkdGggPT0gTnVtYmVyLk5FR0FUSVZFX0lORklOSVRZXG5cdFx0XHRcdD8geyB4OiAwLCB5OiAwLCB3aWR0aDogMCwgaGVpZ2h0OiAwIH1cblx0XHRcdFx0OiBib3VuZHM7XG5cdFx0fVxuXHR9XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgU3BpbmVPcHRpb25zIGV4dGVuZHMgQ29udGFpbmVyT3B0aW9ucyB7XG5cdC8qKiB0aGUge0BsaW5rIFNrZWxldG9uRGF0YX0gdXNlZCB0byBpbnN0YW50aWF0ZSB0aGUgc2tlbGV0b24gKi9cblx0c2tlbGV0b25EYXRhOiBTa2VsZXRvbkRhdGE7XG5cblx0LyoqICBTZWUge0BsaW5rIFNwaW5lRnJvbU9wdGlvbnMuYXV0b1VwZGF0ZX0uICovXG5cdGF1dG9VcGRhdGU/OiBib29sZWFuO1xuXG5cdC8qKiAgU2VlIHtAbGluayBTcGluZUZyb21PcHRpb25zLmRhcmtUaW50fS4gKi9cblx0ZGFya1RpbnQ/OiBib29sZWFuO1xuXG5cdC8qKiAgU2VlIHtAbGluayBTcGluZUZyb21PcHRpb25zLmJvdW5kc1Byb3ZpZGVyfS4gKi9cblx0Ym91bmRzUHJvdmlkZXI/OiBTcGluZUJvdW5kc1Byb3ZpZGVyLFxufVxuXG4vKipcbiAqIEFuaW1hdGlvblN0YXRlTGlzdGVuZXIge0BsaW5rIGh0dHBzOi8vZW4uZXNvdGVyaWNzb2Z0d2FyZS5jb20vc3BpbmUtYXBpLXJlZmVyZW5jZSNBbmltYXRpb25TdGF0ZUxpc3RlbmVyIGV2ZW50c30gZXhwb3NlZCBmb3IgUGl4aS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBTcGluZUV2ZW50cyB7XG5cdGNvbXBsZXRlOiBbdHJhY2tFbnRyeTogVHJhY2tFbnRyeV07XG5cdGRpc3Bvc2U6IFt0cmFja0VudHJ5OiBUcmFja0VudHJ5XTtcblx0ZW5kOiBbdHJhY2tFbnRyeTogVHJhY2tFbnRyeV07XG5cdGV2ZW50OiBbdHJhY2tFbnRyeTogVHJhY2tFbnRyeSwgZXZlbnQ6IEV2ZW50XTtcblx0aW50ZXJydXB0OiBbdHJhY2tFbnRyeTogVHJhY2tFbnRyeV07XG5cdHN0YXJ0OiBbdHJhY2tFbnRyeTogVHJhY2tFbnRyeV07XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQXR0YWNobWVudENhY2hlRGF0YSB7XG5cdGlkOiBzdHJpbmc7XG5cdGNsaXBwZWQ6IGJvb2xlYW47XG5cdHZlcnRpY2VzOiBGbG9hdDMyQXJyYXk7XG5cdHV2czogRmxvYXQzMkFycmF5O1xuXHRpbmRpY2VzOiBudW1iZXJbXTtcblx0Y29sb3I6IENvbG9yO1xuXHRkYXJrQ29sb3I6IENvbG9yO1xuXHRkYXJrVGludDogYm9vbGVhbjtcblx0c2tpcFJlbmRlcjogYm9vbGVhbjtcblx0dGV4dHVyZTogVGV4dHVyZTtcblx0Y2xpcHBlZERhdGE/OiB7XG5cdFx0dmVydGljZXM6IEZsb2F0MzJBcnJheTtcblx0XHR1dnM6IEZsb2F0MzJBcnJheTtcblx0XHRpbmRpY2VzOiBVaW50MTZBcnJheTtcblx0XHR2ZXJ0ZXhDb3VudDogbnVtYmVyO1xuXHRcdGluZGljZXNDb3VudDogbnVtYmVyO1xuXHR9O1xufVxuXG5pbnRlcmZhY2UgU2xvdHNUb0NsaXBwaW5nIHtcblx0c2xvdDogU2xvdCxcblx0bWFzaz86IEdyYXBoaWNzLFxuXHRtYXNrQ29tcHV0ZWQ/OiBib29sZWFuLFxuXHR2ZXJ0aWNlczogQXJyYXk8bnVtYmVyPixcbn07XG5cbmNvbnN0IG1hc2tQb29sID0gbmV3IFBvb2w8R3JhcGhpY3M+KCgpID0+IG5ldyBHcmFwaGljcyk7XG5cbi8qKlxuICogVGhlIGNsYXNzIHRvIGluc3RhbnRpYXRlIGEge0BsaW5rIFNwaW5lfSBnYW1lIG9iamVjdCBpbiBQaXhpLlxuICogVGhlIHN0YXRpYyBtZXRob2Qge0BsaW5rIFNwaW5lLmZyb219IHNob3VsZCBiZSB1c2VkIHRvIGluc3RhbnRpYXRlIGEgU3BpbmUgZ2FtZSBvYmplY3QuXG4gKi9cbmV4cG9ydCBjbGFzcyBTcGluZSBleHRlbmRzIFZpZXdDb250YWluZXIge1xuXHQvLyBQaXhpIHByb3BlcnRpZXNcblx0cHVibGljIGJhdGNoZWQgPSB0cnVlO1xuXHRwdWJsaWMgYnVpbGRJZCA9IDA7XG5cdHB1YmxpYyBvdmVycmlkZSByZWFkb25seSByZW5kZXJQaXBlSWQgPSAnc3BpbmUnO1xuXHRwdWJsaWMgX2RpZFNwaW5lVXBkYXRlID0gZmFsc2U7XG5cblx0cHVibGljIGJlZm9yZVVwZGF0ZVdvcmxkVHJhbnNmb3JtczogKG9iamVjdDogU3BpbmUpID0+IHZvaWQgPSAoKSA9PiB7IC8qKiAqLyB9O1xuXHRwdWJsaWMgYWZ0ZXJVcGRhdGVXb3JsZFRyYW5zZm9ybXM6IChvYmplY3Q6IFNwaW5lKSA9PiB2b2lkID0gKCkgPT4geyAvKiogKi8gfTtcblxuXHQvLyBTcGluZSBwcm9wZXJ0aWVzXG5cdC8qKiBUaGUgc2tlbGV0b24gZm9yIHRoaXMgU3BpbmUgZ2FtZSBvYmplY3QuICovXG5cdHB1YmxpYyBza2VsZXRvbjogU2tlbGV0b247XG5cdC8qKiBUaGUgYW5pbWF0aW9uIHN0YXRlIGZvciB0aGlzIFNwaW5lIGdhbWUgb2JqZWN0LiAqL1xuXHRwdWJsaWMgc3RhdGU6IEFuaW1hdGlvblN0YXRlO1xuXHRwdWJsaWMgc2tlbGV0b25Cb3VuZHM/OiBTa2VsZXRvbkJvdW5kcztcblxuXHRwcml2YXRlIGRhcmtUaW50ID0gZmFsc2U7XG5cdHByaXZhdGUgX2RlYnVnPzogSVNwaW5lRGVidWdSZW5kZXJlciB8IHVuZGVmaW5lZCA9IHVuZGVmaW5lZDtcblxuXHRyZWFkb25seSBfc2xvdHNPYmplY3Q6IFJlY29yZDxzdHJpbmcsIHsgc2xvdDogU2xvdCwgY29udGFpbmVyOiBDb250YWluZXIsIGZvbGxvd0F0dGFjaG1lbnRUaW1lbGluZTogYm9vbGVhbiB9IHwgbnVsbD4gPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuXHRwcml2YXRlIGNsaXBwaW5nU2xvdFRvUGl4aU1hc2tzOiBSZWNvcmQ8c3RyaW5nLCBTbG90c1RvQ2xpcHBpbmc+ID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcblxuXHRwcml2YXRlIGdldFNsb3RGcm9tUmVmIChzbG90UmVmOiBudW1iZXIgfCBzdHJpbmcgfCBTbG90KTogU2xvdCB7XG5cdFx0bGV0IHNsb3Q6IFNsb3QgfCBudWxsO1xuXG5cdFx0aWYgKHR5cGVvZiBzbG90UmVmID09PSAnbnVtYmVyJykgc2xvdCA9IHRoaXMuc2tlbGV0b24uc2xvdHNbc2xvdFJlZl07XG5cdFx0ZWxzZSBpZiAodHlwZW9mIHNsb3RSZWYgPT09ICdzdHJpbmcnKSBzbG90ID0gdGhpcy5za2VsZXRvbi5maW5kU2xvdChzbG90UmVmKTtcblx0XHRlbHNlIHNsb3QgPSBzbG90UmVmO1xuXG5cdFx0aWYgKCFzbG90KSB0aHJvdyBuZXcgRXJyb3IoYE5vIHNsb3QgZm91bmQgd2l0aCB0aGUgZ2l2ZW4gc2xvdCByZWZlcmVuY2U6ICR7c2xvdFJlZn1gKTtcblxuXHRcdHJldHVybiBzbG90O1xuXHR9XG5cblx0cHVibGljIHNwaW5lQXR0YWNobWVudHNEaXJ0eSA9IHRydWU7XG5cdHB1YmxpYyBzcGluZVRleHR1cmVzRGlydHkgPSB0cnVlO1xuXG5cdHByaXZhdGUgX2xhc3RBdHRhY2htZW50czogQXR0YWNobWVudFtdID0gW107XG5cblx0cHJpdmF0ZSBfc3RhdGVDaGFuZ2VkID0gdHJ1ZTtcblx0cHJpdmF0ZSBhdHRhY2htZW50Q2FjaGVEYXRhOiBSZWNvcmQ8c3RyaW5nLCBBdHRhY2htZW50Q2FjaGVEYXRhPltdID0gW107XG5cblx0cHVibGljIGdldCBkZWJ1ZyAoKTogSVNwaW5lRGVidWdSZW5kZXJlciB8IHVuZGVmaW5lZCB7XG5cdFx0cmV0dXJuIHRoaXMuX2RlYnVnO1xuXHR9XG5cblx0LyoqIFBhc3MgYSB7QGxpbmsgU3BpbmVEZWJ1Z1JlbmRlcmVyfSBvciBjcmVhdGUgeW91ciBvd24ge0BsaW5rIElTcGluZURlYnVnUmVuZGVyZXJ9IHRvIHJlbmRlciBib25lcywgbWVzaGVzLCAuLi5cblx0ICogQGV4YW1wbGUgc3BpbmVHTy5kZWJ1ZyA9IG5ldyBTcGluZURlYnVnUmVuZGVyZXIoKTtcblx0ICovXG5cdHB1YmxpYyBzZXQgZGVidWcgKHZhbHVlOiBJU3BpbmVEZWJ1Z1JlbmRlcmVyIHwgdW5kZWZpbmVkKSB7XG5cdFx0aWYgKHRoaXMuX2RlYnVnKSB7XG5cdFx0XHR0aGlzLl9kZWJ1Zy51bnJlZ2lzdGVyU3BpbmUodGhpcyk7XG5cdFx0fVxuXHRcdGlmICh2YWx1ZSkge1xuXHRcdFx0dmFsdWUucmVnaXN0ZXJTcGluZSh0aGlzKTtcblx0XHR9XG5cdFx0dGhpcy5fZGVidWcgPSB2YWx1ZTtcblx0fVxuXG5cdHByaXZhdGUgX2F1dG9VcGRhdGUgPSBmYWxzZTtcblxuXHRwdWJsaWMgZ2V0IGF1dG9VcGRhdGUgKCk6IGJvb2xlYW4ge1xuXHRcdHJldHVybiB0aGlzLl9hdXRvVXBkYXRlO1xuXHR9XG5cdC8qKiBXaGVuIGB0cnVlYCwgdGhlIFNwaW5lIEFuaW1hdGlvblN0YXRlIGFuZCB0aGUgU2tlbGV0b24gd2lsbCBiZSBhdXRvbWF0aWNhbGx5IHVwZGF0ZWQgdXNpbmcgdGhlIHtAbGluayBUaWNrZXIuc2hhcmVkfSBpbnN0YW5jZS4gKi9cblx0cHVibGljIHNldCBhdXRvVXBkYXRlICh2YWx1ZTogYm9vbGVhbikge1xuXHRcdGlmICh2YWx1ZSAmJiAhdGhpcy5fYXV0b1VwZGF0ZSkge1xuXHRcdFx0VGlja2VyLnNoYXJlZC5hZGQodGhpcy5pbnRlcm5hbFVwZGF0ZSwgdGhpcyk7XG5cdFx0fSBlbHNlIGlmICghdmFsdWUgJiYgdGhpcy5fYXV0b1VwZGF0ZSkge1xuXHRcdFx0VGlja2VyLnNoYXJlZC5yZW1vdmUodGhpcy5pbnRlcm5hbFVwZGF0ZSwgdGhpcyk7XG5cdFx0fVxuXG5cdFx0dGhpcy5fYXV0b1VwZGF0ZSA9IHZhbHVlO1xuXHR9XG5cblx0cHJpdmF0ZSBfYm91bmRzUHJvdmlkZXI/OiBTcGluZUJvdW5kc1Byb3ZpZGVyO1xuXHQvKiogVGhlIGJvdW5kcyBwcm92aWRlciB0byB1c2UuIElmIHVuZGVmaW5lZCB0aGUgYm91bmRzIHdpbGwgYmUgZHluYW1pYywgY2FsY3VsYXRlZCB3aGVuIHJlcXVlc3RlZCBhbmQgYmFzZWQgb24gdGhlIGN1cnJlbnQgZnJhbWUuICovXG5cdHB1YmxpYyBnZXQgYm91bmRzUHJvdmlkZXIgKCk6IFNwaW5lQm91bmRzUHJvdmlkZXIgfCB1bmRlZmluZWQge1xuXHRcdHJldHVybiB0aGlzLl9ib3VuZHNQcm92aWRlcjtcblx0fVxuXHRwdWJsaWMgc2V0IGJvdW5kc1Byb3ZpZGVyICh2YWx1ZTogU3BpbmVCb3VuZHNQcm92aWRlciB8IHVuZGVmaW5lZCkge1xuXHRcdHRoaXMuX2JvdW5kc1Byb3ZpZGVyID0gdmFsdWU7XG5cdFx0aWYgKHZhbHVlKSB7XG5cdFx0XHR0aGlzLl9ib3VuZHNEaXJ0eSA9IGZhbHNlO1xuXHRcdH1cblx0XHR0aGlzLnVwZGF0ZUJvdW5kcygpO1xuXHR9XG5cblx0cHJpdmF0ZSBoYXNOZXZlclVwZGF0ZWQgPSB0cnVlO1xuXHRjb25zdHJ1Y3RvciAob3B0aW9uczogU3BpbmVPcHRpb25zIHwgU2tlbGV0b25EYXRhKSB7XG5cdFx0aWYgKG9wdGlvbnMgaW5zdGFuY2VvZiBTa2VsZXRvbkRhdGEpIHtcblx0XHRcdG9wdGlvbnMgPSB7XG5cdFx0XHRcdHNrZWxldG9uRGF0YTogb3B0aW9ucyxcblx0XHRcdH07XG5cdFx0fVxuXG5cdFx0c3VwZXIoe30pO1xuXG5cdFx0dGhpcy5hbGxvd0NoaWxkcmVuID0gdHJ1ZTtcblxuXHRcdGNvbnN0IHNrZWxldG9uRGF0YSA9IG9wdGlvbnMgaW5zdGFuY2VvZiBTa2VsZXRvbkRhdGEgPyBvcHRpb25zIDogb3B0aW9ucy5za2VsZXRvbkRhdGE7XG5cblx0XHR0aGlzLnNrZWxldG9uID0gbmV3IFNrZWxldG9uKHNrZWxldG9uRGF0YSk7XG5cdFx0dGhpcy5zdGF0ZSA9IG5ldyBBbmltYXRpb25TdGF0ZShuZXcgQW5pbWF0aW9uU3RhdGVEYXRhKHNrZWxldG9uRGF0YSkpO1xuXHRcdHRoaXMuYXV0b1VwZGF0ZSA9IG9wdGlvbnM/LmF1dG9VcGRhdGUgPz8gdHJ1ZTtcblxuXHRcdC8vIGRhcmsgdGludCBjYW4gYmUgZW5hYmxlZCBieSBvcHRpb25zLCBvdGhlcndpc2UgaXMgZW5hYmxlIGlmIGF0IGxlYXN0IG9uZSBzbG90IGhhcyB0aW50IGJsYWNrXG5cdFx0dGhpcy5kYXJrVGludCA9IG9wdGlvbnM/LmRhcmtUaW50ID09PSB1bmRlZmluZWRcblx0XHRcdD8gdGhpcy5za2VsZXRvbi5zbG90cy5zb21lKHNsb3QgPT4gISFzbG90LmRhdGEuZGFya0NvbG9yKVxuXHRcdFx0OiBvcHRpb25zPy5kYXJrVGludDtcblxuXHRcdGNvbnN0IHNsb3RzID0gdGhpcy5za2VsZXRvbi5zbG90cztcblxuXHRcdGZvciAobGV0IGkgPSAwOyBpIDwgc2xvdHMubGVuZ3RoOyBpKyspIHtcblx0XHRcdHRoaXMuYXR0YWNobWVudENhY2hlRGF0YVtpXSA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG5cdFx0fVxuXG5cdFx0dGhpcy5fYm91bmRzUHJvdmlkZXIgPSBvcHRpb25zLmJvdW5kc1Byb3ZpZGVyO1xuXHR9XG5cblx0LyoqIElmIHtAbGluayBTcGluZS5hdXRvVXBkYXRlfSBpcyBgZmFsc2VgLCB0aGlzIG1ldGhvZCBhbGxvd3MgdG8gdXBkYXRlIHRoZSBBbmltYXRpb25TdGF0ZSBhbmQgdGhlIFNrZWxldG9uIHdpdGggdGhlIGdpdmVuIGRlbHRhLiAqL1xuXHRwdWJsaWMgdXBkYXRlIChkdDogbnVtYmVyKTogdm9pZCB7XG5cdFx0dGhpcy5pbnRlcm5hbFVwZGF0ZSgwLCBkdCk7XG5cdH1cblxuXHRwcm90ZWN0ZWQgaW50ZXJuYWxVcGRhdGUgKF9kZWx0YUZyYW1lOiBhbnksIGRlbHRhU2Vjb25kcz86IG51bWJlcik6IHZvaWQge1xuXHRcdC8vIEJlY2F1c2UgcmVhc29ucywgcGl4aSB1c2VzIGRlbHRhRnJhbWVzIGF0IDYwZnBzLlxuXHRcdC8vIFdlIGlnbm9yZSB0aGUgZGVmYXVsdCBkZWx0YUZyYW1lcyBhbmQgdXNlIHRoZSBkZWx0YVNlY29uZHMgZnJvbSBwaXhpIHRpY2tlci5cblx0XHR0aGlzLl91cGRhdGVBbmRBcHBseVN0YXRlKGRlbHRhU2Vjb25kcyA/PyBUaWNrZXIuc2hhcmVkLmRlbHRhTVMgLyAxMDAwKTtcblx0fVxuXG5cdG92ZXJyaWRlIGdldCBib3VuZHMgKCkge1xuXHRcdGlmICh0aGlzLl9ib3VuZHNEaXJ0eSkge1xuXHRcdFx0dGhpcy51cGRhdGVCb3VuZHMoKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gdGhpcy5fYm91bmRzO1xuXHR9XG5cblx0LyoqXG5cdCAqIFNldCB0aGUgcG9zaXRpb24gb2YgdGhlIGJvbmUgZ2l2ZW4gaW4gaW5wdXQgdGhyb3VnaCBhIHtAbGluayBJUG9pbnREYXRhfS5cblx0ICogQHBhcmFtIGJvbmU6IHRoZSBib25lIG5hbWUgb3IgdGhlIGJvbmUgaW5zdGFuY2UgdG8gc2V0IHRoZSBwb3NpdGlvblxuXHQgKiBAcGFyYW0gb3V0UG9zOiB0aGUgbmV3IHBvc2l0aW9uIG9mIHRoZSBib25lLlxuXHQgKiBAdGhyb3dzIHtFcnJvcn06IGlmIHRoZSBnaXZlbiBib25lIGlzIG5vdCBmb3VuZCBpbiB0aGUgc2tlbGV0b24sIGFuIGVycm9yIGlzIHRocm93blxuXHQgKi9cblx0cHVibGljIHNldEJvbmVQb3NpdGlvbiAoYm9uZTogc3RyaW5nIHwgQm9uZSwgcG9zaXRpb246IFBvaW50RGF0YSk6IHZvaWQge1xuXHRcdGNvbnN0IGJvbmVBdXggPSBib25lO1xuXG5cdFx0aWYgKHR5cGVvZiBib25lID09PSAnc3RyaW5nJykge1xuXHRcdFx0Ym9uZSA9IHRoaXMuc2tlbGV0b24uZmluZEJvbmUoYm9uZSkgYXMgQm9uZTtcblx0XHR9XG5cblx0XHRpZiAoIWJvbmUpIHRocm93IEVycm9yKGBDYW50IHNldCBib25lIHBvc2l0aW9uLCBib25lICR7U3RyaW5nKGJvbmVBdXgpfSBub3QgZm91bmRgKTtcblx0XHR2ZWN0b3JBdXguc2V0KHBvc2l0aW9uLngsIHBvc2l0aW9uLnkpO1xuXG5cdFx0aWYgKGJvbmUucGFyZW50KSB7XG5cdFx0XHRjb25zdCBhdXggPSBib25lLnBhcmVudC53b3JsZFRvTG9jYWwodmVjdG9yQXV4KTtcblxuXHRcdFx0Ym9uZS54ID0gYXV4Lng7XG5cdFx0XHRib25lLnkgPSAtYXV4Lnk7XG5cdFx0fVxuXHRcdGVsc2Uge1xuXHRcdFx0Ym9uZS54ID0gdmVjdG9yQXV4Lng7XG5cdFx0XHRib25lLnkgPSB2ZWN0b3JBdXgueTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogUmV0dXJuIHRoZSBwb3NpdGlvbiBvZiB0aGUgYm9uZSBnaXZlbiBpbiBpbnB1dCBpbnRvIGFuIHtAbGluayBJUG9pbnREYXRhfS5cblx0ICogQHBhcmFtIGJvbmU6IHRoZSBib25lIG5hbWUgb3IgdGhlIGJvbmUgaW5zdGFuY2UgdG8gZ2V0IHRoZSBwb3NpdGlvbiBmcm9tXG5cdCAqIEBwYXJhbSBvdXRQb3M6IGFuIG9wdGlvbmFsIHtAbGluayBJUG9pbnREYXRhfSB0byB1c2UgdG8gcmV0dXJuIHRoZSBib25lIHBvc2l0aW9uLCByYXRoZXJuIHRoYW4gaW5zdGFudGlhdGluZyBhIG5ldyBvYmplY3QuXG5cdCAqIEByZXR1cm5zIHtJUG9pbnREYXRhIHwgdW5kZWZpbmVkfTogdGhlIHBvc2l0aW9uIG9mIHRoZSBib25lLCBvciB1bmRlZmluZWQgaWYgbm8gbWF0Y2hpbmcgYm9uZSBpcyBmb3VuZCBpbiB0aGUgc2tlbGV0b25cblx0ICovXG5cdHB1YmxpYyBnZXRCb25lUG9zaXRpb24gKGJvbmU6IHN0cmluZyB8IEJvbmUsIG91dFBvcz86IFBvaW50RGF0YSk6IFBvaW50RGF0YSB8IHVuZGVmaW5lZCB7XG5cdFx0Y29uc3QgYm9uZUF1eCA9IGJvbmU7XG5cblx0XHRpZiAodHlwZW9mIGJvbmUgPT09ICdzdHJpbmcnKSB7XG5cdFx0XHRib25lID0gdGhpcy5za2VsZXRvbi5maW5kQm9uZShib25lKSBhcyBCb25lO1xuXHRcdH1cblxuXHRcdGlmICghYm9uZSkge1xuXHRcdFx0Y29uc29sZS5lcnJvcihgQ2FudCBzZXQgYm9uZSBwb3NpdGlvbiEgQm9uZSAke1N0cmluZyhib25lQXV4KX0gbm90IGZvdW5kYCk7XG5cblx0XHRcdHJldHVybiBvdXRQb3M7XG5cdFx0fVxuXG5cdFx0aWYgKCFvdXRQb3MpIHtcblx0XHRcdG91dFBvcyA9IHsgeDogMCwgeTogMCB9O1xuXHRcdH1cblxuXHRcdG91dFBvcy54ID0gYm9uZS53b3JsZFg7XG5cdFx0b3V0UG9zLnkgPSBib25lLndvcmxkWTtcblxuXHRcdHJldHVybiBvdXRQb3M7XG5cdH1cblxuXHQvKipcblx0ICogQWR2YW5jZSB0aGUgc3RhdGUgYW5kIHNrZWxldG9uIGJ5IHRoZSBnaXZlbiB0aW1lLCB0aGVuIHVwZGF0ZSBzbG90IG9iamVjdHMgdG9vLlxuXHQgKiBUaGUgY29udGFpbmVyIHRyYW5zZm9ybSBpcyBub3QgdXBkYXRlZC5cblx0ICpcblx0ICogQHBhcmFtIHRpbWUgdGhlIHRpbWUgYXQgd2hpY2ggdG8gc2V0IHRoZSBzdGF0ZVxuXHQgKi9cblx0cHJpdmF0ZSBfdXBkYXRlQW5kQXBwbHlTdGF0ZSAodGltZTogbnVtYmVyKSB7XG5cdFx0dGhpcy5oYXNOZXZlclVwZGF0ZWQgPSBmYWxzZTtcblxuXHRcdHRoaXMuc3RhdGUudXBkYXRlKHRpbWUpO1xuXHRcdHRoaXMuc2tlbGV0b24udXBkYXRlKHRpbWUpO1xuXG5cdFx0Y29uc3QgeyBza2VsZXRvbiB9ID0gdGhpcztcblxuXHRcdHRoaXMuc3RhdGUuYXBwbHkoc2tlbGV0b24pO1xuXG5cdFx0dGhpcy5iZWZvcmVVcGRhdGVXb3JsZFRyYW5zZm9ybXModGhpcyk7XG5cdFx0c2tlbGV0b24udXBkYXRlV29ybGRUcmFuc2Zvcm0oUGh5c2ljcy51cGRhdGUpO1xuXHRcdHRoaXMuYWZ0ZXJVcGRhdGVXb3JsZFRyYW5zZm9ybXModGhpcyk7XG5cblx0XHR0aGlzLnVwZGF0ZVNsb3RPYmplY3RzKCk7XG5cblx0XHR0aGlzLl9zdGF0ZUNoYW5nZWQgPSB0cnVlO1xuXG5cdFx0dGhpcy5vblZpZXdVcGRhdGUoKTtcblx0fVxuXG5cdC8qKlxuXHQgKiAtIHZhbGlkYXRlcyB0aGUgYXR0YWNobWVudHMgLSB0byBmbGFnIGlmIHRoZSBhdHRhY2htZW50cyBoYXZlIGNoYW5nZWQgdGhpcyBzdGF0ZVxuXHQgKiAtIHRyYW5zZm9ybXMgdGhlIGF0dGFjaG1lbnRzIC0gdG8gdXBkYXRlIHRoZSB2ZXJ0aWNlcyBvZiB0aGUgYXR0YWNobWVudHMgYmFzZWQgb24gdGhlIG5ldyBwb3NpdGlvbnNcblx0ICogQGludGVybmFsXG5cdCAqL1xuXHRfdmFsaWRhdGVBbmRUcmFuc2Zvcm1BdHRhY2htZW50cyAoKSB7XG5cdFx0aWYgKCF0aGlzLl9zdGF0ZUNoYW5nZWQpIHJldHVybjtcblx0XHR0aGlzLl9zdGF0ZUNoYW5nZWQgPSBmYWxzZTtcblxuXHRcdHRoaXMudmFsaWRhdGVBdHRhY2htZW50cygpO1xuXG5cdFx0dGhpcy50cmFuc2Zvcm1BdHRhY2htZW50cygpO1xuXHR9XG5cblx0cHJpdmF0ZSB2YWxpZGF0ZUF0dGFjaG1lbnRzICgpIHtcblxuXHRcdGNvbnN0IGN1cnJlbnREcmF3T3JkZXIgPSB0aGlzLnNrZWxldG9uLmRyYXdPcmRlcjtcblxuXHRcdGNvbnN0IGxhc3RBdHRhY2htZW50cyA9IHRoaXMuX2xhc3RBdHRhY2htZW50cztcblxuXHRcdGxldCBpbmRleCA9IDA7XG5cblx0XHRsZXQgc3BpbmVBdHRhY2htZW50c0RpcnR5ID0gZmFsc2U7XG5cblx0XHRmb3IgKGxldCBpID0gMDsgaSA8IGN1cnJlbnREcmF3T3JkZXIubGVuZ3RoOyBpKyspIHtcblx0XHRcdGNvbnN0IHNsb3QgPSBjdXJyZW50RHJhd09yZGVyW2ldO1xuXHRcdFx0Y29uc3QgYXR0YWNobWVudCA9IHNsb3QuZ2V0QXR0YWNobWVudCgpO1xuXG5cdFx0XHRpZiAoYXR0YWNobWVudCkge1xuXHRcdFx0XHRpZiAoYXR0YWNobWVudCAhPT0gbGFzdEF0dGFjaG1lbnRzW2luZGV4XSkge1xuXHRcdFx0XHRcdHNwaW5lQXR0YWNobWVudHNEaXJ0eSA9IHRydWU7XG5cdFx0XHRcdFx0bGFzdEF0dGFjaG1lbnRzW2luZGV4XSA9IGF0dGFjaG1lbnQ7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRpbmRleCsrO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGlmIChpbmRleCAhPT0gbGFzdEF0dGFjaG1lbnRzLmxlbmd0aCkge1xuXHRcdFx0c3BpbmVBdHRhY2htZW50c0RpcnR5ID0gdHJ1ZTtcblx0XHRcdGxhc3RBdHRhY2htZW50cy5sZW5ndGggPSBpbmRleDtcblx0XHR9XG5cblx0XHR0aGlzLnNwaW5lQXR0YWNobWVudHNEaXJ0eSB8fD0gc3BpbmVBdHRhY2htZW50c0RpcnR5O1xuXHR9XG5cblx0cHJpdmF0ZSBjdXJyZW50Q2xpcHBpbmdTbG90OiBTbG90c1RvQ2xpcHBpbmcgfCB1bmRlZmluZWQ7XG5cdHByaXZhdGUgdXBkYXRlQW5kU2V0UGl4aU1hc2sgKHNsb3Q6IFNsb3QsIGxhc3Q6IGJvb2xlYW4pIHtcblx0XHQvLyBhc3NpZ24vY3JlYXRlIHRoZSBjdXJyZW50Q2xpcHBpbmdTbG90XG5cdFx0Y29uc3QgYXR0YWNobWVudCA9IHNsb3QuYXR0YWNobWVudDtcblx0XHRpZiAoYXR0YWNobWVudCAmJiBhdHRhY2htZW50IGluc3RhbmNlb2YgQ2xpcHBpbmdBdHRhY2htZW50KSB7XG5cdFx0XHRjb25zdCBjbGlwID0gKHRoaXMuY2xpcHBpbmdTbG90VG9QaXhpTWFza3Nbc2xvdC5kYXRhLm5hbWVdIHx8PSB7IHNsb3QsIHZlcnRpY2VzOiBuZXcgQXJyYXk8bnVtYmVyPigpIH0pO1xuXHRcdFx0Y2xpcC5tYXNrQ29tcHV0ZWQgPSBmYWxzZTtcblx0XHRcdHRoaXMuY3VycmVudENsaXBwaW5nU2xvdCA9IGNsaXA7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0Ly8gYXNzaWduIHRoZSBjdXJyZW50Q2xpcHBpbmdTbG90IG1hc2sgdG8gdGhlIHNsb3Qgb2JqZWN0XG5cdFx0bGV0IGN1cnJlbnRDbGlwcGluZ1Nsb3QgPSB0aGlzLmN1cnJlbnRDbGlwcGluZ1Nsb3Q7XG5cdFx0bGV0IHNsb3RPYmplY3QgPSB0aGlzLl9zbG90c09iamVjdFtzbG90LmRhdGEubmFtZV07XG5cdFx0aWYgKGN1cnJlbnRDbGlwcGluZ1Nsb3QgJiYgc2xvdE9iamVjdCkge1xuXHRcdFx0Ly8gY3JlYXRlIHRoZSBwaXhpIG1hc2ssIG9ubHkgdGhlIGZpcnN0IHRpbWUgYW5kIGlmIHRoZSBjbGlwcGVkIHNsb3QgaXMgdGhlIGZpcnN0IG9uZSBjbGlwcGVkIGJ5IHRoaXMgY3VycmVudENsaXBwaW5nU2xvdFxuXHRcdFx0bGV0IG1hc2sgPSBjdXJyZW50Q2xpcHBpbmdTbG90Lm1hc2s7XG5cdFx0XHRpZiAoIW1hc2spIHtcblx0XHRcdFx0bWFzayA9IG1hc2tQb29sLm9idGFpbigpO1xuXHRcdFx0XHRjdXJyZW50Q2xpcHBpbmdTbG90Lm1hc2sgPSBtYXNrO1xuXHRcdFx0XHR0aGlzLmFkZENoaWxkKG1hc2spO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBjb21wdXRlIHRoZSBwaXhpIG1hc2sgcG9seWdvbiwgaWYgdGhlIGNsaXBwZWQgc2xvdCBpcyB0aGUgZmlyc3Qgb25lIGNsaXBwZWQgYnkgdGhpcyBjdXJyZW50Q2xpcHBpbmdTbG90XG5cdFx0XHRpZiAoIWN1cnJlbnRDbGlwcGluZ1Nsb3QubWFza0NvbXB1dGVkKSB7XG5cdFx0XHRcdGxldCBzbG90Q2xpcHBpbmcgPSBjdXJyZW50Q2xpcHBpbmdTbG90LnNsb3Q7XG5cdFx0XHRcdGxldCBjbGlwcGluZ0F0dGFjaG1lbnQgPSBzbG90Q2xpcHBpbmcuYXR0YWNobWVudCBhcyBDbGlwcGluZ0F0dGFjaG1lbnQ7XG5cdFx0XHRcdGN1cnJlbnRDbGlwcGluZ1Nsb3QubWFza0NvbXB1dGVkID0gdHJ1ZTtcblx0XHRcdFx0Y29uc3Qgd29ybGRWZXJ0aWNlc0xlbmd0aCA9IGNsaXBwaW5nQXR0YWNobWVudC53b3JsZFZlcnRpY2VzTGVuZ3RoO1xuXHRcdFx0XHRjb25zdCB2ZXJ0aWNlcyA9IGN1cnJlbnRDbGlwcGluZ1Nsb3QudmVydGljZXM7XG5cdFx0XHRcdGNsaXBwaW5nQXR0YWNobWVudC5jb21wdXRlV29ybGRWZXJ0aWNlcyhzbG90Q2xpcHBpbmcsIDAsIHdvcmxkVmVydGljZXNMZW5ndGgsIHZlcnRpY2VzLCAwLCAyKTtcblx0XHRcdFx0bWFzay5jbGVhcigpLnBvbHkodmVydGljZXMpLnN0cm9rZSh7IHdpZHRoOiAwIH0pLmZpbGwoeyBhbHBoYTogLjI1IH0pO1xuXHRcdFx0fVxuXHRcdFx0c2xvdE9iamVjdC5jb250YWluZXIubWFzayA9IG1hc2s7XG5cdFx0fSBlbHNlIGlmIChzbG90T2JqZWN0Py5jb250YWluZXIubWFzaykge1xuXHRcdFx0Ly8gcmVtb3ZlIHRoZSBtYXNrLCBpZiBzbG90IG9iamVjdCBoYXMgYSBtYXNrLCBidXQgY3VycmVudENsaXBwaW5nU2xvdCBpcyB1bmRlZmluZWRcblx0XHRcdHNsb3RPYmplY3QuY29udGFpbmVyLm1hc2sgPSBudWxsO1xuXHRcdH1cblxuXHRcdC8vIGlmIGN1cnJlbnQgc2xvdCBpcyB0aGUgZW5kaW5nIG9uZSBvZiB0aGUgY3VycmVudENsaXBwaW5nU2xvdCBtYXNrLCBzZXQgY3VycmVudENsaXBwaW5nU2xvdCB0byB1bmRlZmluZWRcblx0XHRpZiAoY3VycmVudENsaXBwaW5nU2xvdCAmJiAoY3VycmVudENsaXBwaW5nU2xvdC5zbG90LmF0dGFjaG1lbnQgYXMgQ2xpcHBpbmdBdHRhY2htZW50KS5lbmRTbG90ID09IHNsb3QuZGF0YSkge1xuXHRcdFx0dGhpcy5jdXJyZW50Q2xpcHBpbmdTbG90ID0gdW5kZWZpbmVkO1xuXHRcdH1cblxuXHRcdC8vIGNsZWFuIHVwIHVudXNlZCBtYXNrc1xuXHRcdGlmIChsYXN0KSB7XG5cdFx0XHRmb3IgKGNvbnN0IGtleSBpbiB0aGlzLmNsaXBwaW5nU2xvdFRvUGl4aU1hc2tzKSB7XG5cdFx0XHRcdGNvbnN0IGNsaXBwaW5nU2xvdFRvUGl4aU1hc2sgPSB0aGlzLmNsaXBwaW5nU2xvdFRvUGl4aU1hc2tzW2tleV07XG5cdFx0XHRcdGlmICgoIShjbGlwcGluZ1Nsb3RUb1BpeGlNYXNrLnNsb3QuYXR0YWNobWVudCBpbnN0YW5jZW9mIENsaXBwaW5nQXR0YWNobWVudCkgfHwgIWNsaXBwaW5nU2xvdFRvUGl4aU1hc2subWFza0NvbXB1dGVkKSAmJiBjbGlwcGluZ1Nsb3RUb1BpeGlNYXNrLm1hc2spIHtcblx0XHRcdFx0XHR0aGlzLnJlbW92ZUNoaWxkKGNsaXBwaW5nU2xvdFRvUGl4aU1hc2subWFzayk7XG5cdFx0XHRcdFx0bWFza1Bvb2wuZnJlZShjbGlwcGluZ1Nsb3RUb1BpeGlNYXNrLm1hc2spO1xuXHRcdFx0XHRcdGNsaXBwaW5nU2xvdFRvUGl4aU1hc2subWFzayA9IHVuZGVmaW5lZDtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0dGhpcy5jdXJyZW50Q2xpcHBpbmdTbG90ID0gdW5kZWZpbmVkO1xuXHRcdH1cblx0fVxuXG5cdHByaXZhdGUgdHJhbnNmb3JtQXR0YWNobWVudHMgKCkge1xuXHRcdGNvbnN0IGN1cnJlbnREcmF3T3JkZXIgPSB0aGlzLnNrZWxldG9uLmRyYXdPcmRlcjtcblxuXHRcdGZvciAobGV0IGkgPSAwOyBpIDwgY3VycmVudERyYXdPcmRlci5sZW5ndGg7IGkrKykge1xuXHRcdFx0Y29uc3Qgc2xvdCA9IGN1cnJlbnREcmF3T3JkZXJbaV07XG5cblx0XHRcdHRoaXMudXBkYXRlQW5kU2V0UGl4aU1hc2soc2xvdCwgaSA9PT0gY3VycmVudERyYXdPcmRlci5sZW5ndGggLSAxKTtcblxuXHRcdFx0Y29uc3QgYXR0YWNobWVudCA9IHNsb3QuZ2V0QXR0YWNobWVudCgpO1xuXG5cdFx0XHRpZiAoYXR0YWNobWVudCkge1xuXHRcdFx0XHRpZiAoYXR0YWNobWVudCBpbnN0YW5jZW9mIE1lc2hBdHRhY2htZW50IHx8IGF0dGFjaG1lbnQgaW5zdGFuY2VvZiBSZWdpb25BdHRhY2htZW50KSB7XG5cdFx0XHRcdFx0Y29uc3QgY2FjaGVEYXRhID0gdGhpcy5fZ2V0Q2FjaGVkRGF0YShzbG90LCBhdHRhY2htZW50KTtcblxuXHRcdFx0XHRcdGlmIChhdHRhY2htZW50IGluc3RhbmNlb2YgUmVnaW9uQXR0YWNobWVudCkge1xuXHRcdFx0XHRcdFx0YXR0YWNobWVudC5jb21wdXRlV29ybGRWZXJ0aWNlcyhzbG90LCBjYWNoZURhdGEudmVydGljZXMsIDAsIDIpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRlbHNlIHtcblx0XHRcdFx0XHRcdGF0dGFjaG1lbnQuY29tcHV0ZVdvcmxkVmVydGljZXMoXG5cdFx0XHRcdFx0XHRcdHNsb3QsXG5cdFx0XHRcdFx0XHRcdDAsXG5cdFx0XHRcdFx0XHRcdGF0dGFjaG1lbnQud29ybGRWZXJ0aWNlc0xlbmd0aCxcblx0XHRcdFx0XHRcdFx0Y2FjaGVEYXRhLnZlcnRpY2VzLFxuXHRcdFx0XHRcdFx0XHQwLFxuXHRcdFx0XHRcdFx0XHQyLFxuXHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHQvLyBzZXF1ZW5jZXMgdXZzIGFyZSBrbm93biBvbmx5IGFmdGVyIGNvbXB1dGVXb3JsZFZlcnRpY2VzIGlzIGludm9rZWRcblx0XHRcdFx0XHRpZiAoY2FjaGVEYXRhLnV2cy5sZW5ndGggPCBhdHRhY2htZW50LnV2cy5sZW5ndGgpIHtcblx0XHRcdFx0XHRcdGNhY2hlRGF0YS51dnMgPSBuZXcgRmxvYXQzMkFycmF5KGF0dGFjaG1lbnQudXZzLmxlbmd0aCk7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0Ly8gbmVlZCB0byBjb3B5IGJlY2F1c2UgYXR0YWNobWVudHMgdXZzIGFyZSBzaGFyZWQgYW1vbmcgc2tlbGV0b25zIHVzaW5nIHRoZSBzYW1lIGF0bGFzXG5cdFx0XHRcdFx0ZmFzdENvcHkoKGF0dGFjaG1lbnQudXZzIGFzIEZsb2F0MzJBcnJheSkuYnVmZmVyLCBjYWNoZURhdGEudXZzLmJ1ZmZlcik7XG5cblx0XHRcdFx0XHRjb25zdCBza2VsZXRvbiA9IHNsb3QuYm9uZS5za2VsZXRvbjtcblx0XHRcdFx0XHRjb25zdCBza2VsZXRvbkNvbG9yID0gc2tlbGV0b24uY29sb3I7XG5cdFx0XHRcdFx0Y29uc3Qgc2xvdENvbG9yID0gc2xvdC5jb2xvcjtcblx0XHRcdFx0XHRjb25zdCBhdHRhY2htZW50Q29sb3IgPSBhdHRhY2htZW50LmNvbG9yO1xuXHRcdFx0XHRcdGNvbnN0IGFscGhhID0gc2tlbGV0b25Db2xvci5hICogc2xvdENvbG9yLmEgKiBhdHRhY2htZW50Q29sb3IuYTtcblxuXHRcdFx0XHRcdGNhY2hlRGF0YS5jb2xvci5zZXQoXG5cdFx0XHRcdFx0XHRza2VsZXRvbkNvbG9yLnIgKiBzbG90Q29sb3IuciAqIGF0dGFjaG1lbnRDb2xvci5yLFxuXHRcdFx0XHRcdFx0c2tlbGV0b25Db2xvci5nICogc2xvdENvbG9yLmcgKiBhdHRhY2htZW50Q29sb3IuZyxcblx0XHRcdFx0XHRcdHNrZWxldG9uQ29sb3IuYiAqIHNsb3RDb2xvci5iICogYXR0YWNobWVudENvbG9yLmIsXG5cdFx0XHRcdFx0XHRhbHBoYSxcblx0XHRcdFx0XHQpO1xuXG5cdFx0XHRcdFx0aWYgKHRoaXMuYWxwaGEgPT09IDAgfHwgYWxwaGEgPT09IDApIHtcblx0XHRcdFx0XHRcdGlmICghY2FjaGVEYXRhLnNraXBSZW5kZXIpIHRoaXMuc3BpbmVBdHRhY2htZW50c0RpcnR5ID0gdHJ1ZTtcblx0XHRcdFx0XHRcdGNhY2hlRGF0YS5za2lwUmVuZGVyID0gdHJ1ZTtcblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0aWYgKGNhY2hlRGF0YS5za2lwUmVuZGVyKSB0aGlzLnNwaW5lQXR0YWNobWVudHNEaXJ0eSA9IHRydWU7XG5cdFx0XHRcdFx0XHRjYWNoZURhdGEuc2tpcFJlbmRlciA9IGNhY2hlRGF0YS5jbGlwcGVkID0gZmFsc2U7XG5cblx0XHRcdFx0XHRcdGlmIChzbG90LmRhcmtDb2xvcikge1xuXHRcdFx0XHRcdFx0XHRjYWNoZURhdGEuZGFya0NvbG9yLnNldEZyb21Db2xvcihzbG90LmRhcmtDb2xvcik7XG5cdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdGNvbnN0IHRleHR1cmUgPSBhdHRhY2htZW50LnJlZ2lvbj8udGV4dHVyZS50ZXh0dXJlIHx8IFRleHR1cmUuRU1QVFk7XG5cblx0XHRcdFx0XHRcdGlmIChjYWNoZURhdGEudGV4dHVyZSAhPT0gdGV4dHVyZSkge1xuXHRcdFx0XHRcdFx0XHRjYWNoZURhdGEudGV4dHVyZSA9IHRleHR1cmU7XG5cdFx0XHRcdFx0XHRcdHRoaXMuc3BpbmVUZXh0dXJlc0RpcnR5ID0gdHJ1ZTtcblx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0aWYgKGNsaXBwZXIuaXNDbGlwcGluZygpKSB7XG5cdFx0XHRcdFx0XHRcdHRoaXMudXBkYXRlQ2xpcHBpbmdEYXRhKGNhY2hlRGF0YSk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdH1cblx0XHRcdFx0ZWxzZSBpZiAoYXR0YWNobWVudCBpbnN0YW5jZW9mIENsaXBwaW5nQXR0YWNobWVudCkge1xuXHRcdFx0XHRcdGNsaXBwZXIuY2xpcFN0YXJ0KHNsb3QsIGF0dGFjaG1lbnQpO1xuXHRcdFx0XHRcdGNvbnRpbnVlO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHRjbGlwcGVyLmNsaXBFbmRXaXRoU2xvdChzbG90KTtcblx0XHR9XG5cdFx0Y2xpcHBlci5jbGlwRW5kKCk7XG5cdH1cblxuXHRwcml2YXRlIHVwZGF0ZUNsaXBwaW5nRGF0YSAoY2FjaGVEYXRhOiBBdHRhY2htZW50Q2FjaGVEYXRhKSB7XG5cdFx0Y2FjaGVEYXRhLmNsaXBwZWQgPSB0cnVlO1xuXG5cdFx0Y2xpcHBlci5jbGlwVHJpYW5nbGVzVW5wYWNrZWQoXG5cdFx0XHRjYWNoZURhdGEudmVydGljZXMsXG5cdFx0XHRjYWNoZURhdGEuaW5kaWNlcyxcblx0XHRcdGNhY2hlRGF0YS5pbmRpY2VzLmxlbmd0aCxcblx0XHRcdGNhY2hlRGF0YS51dnMsXG5cdFx0KTtcblxuXHRcdGNvbnN0IHsgY2xpcHBlZFZlcnRpY2VzLCBjbGlwcGVkVVZzLCBjbGlwcGVkVHJpYW5nbGVzIH0gPSBjbGlwcGVyO1xuXG5cdFx0Y29uc3QgdmVydGljZXNDb3VudCA9IGNsaXBwZWRWZXJ0aWNlcy5sZW5ndGggLyAyO1xuXHRcdGNvbnN0IGluZGljZXNDb3VudCA9IGNsaXBwZWRUcmlhbmdsZXMubGVuZ3RoO1xuXG5cdFx0aWYgKCFjYWNoZURhdGEuY2xpcHBlZERhdGEpIHtcblx0XHRcdGNhY2hlRGF0YS5jbGlwcGVkRGF0YSA9IHtcblx0XHRcdFx0dmVydGljZXM6IG5ldyBGbG9hdDMyQXJyYXkodmVydGljZXNDb3VudCAqIDIpLFxuXHRcdFx0XHR1dnM6IG5ldyBGbG9hdDMyQXJyYXkodmVydGljZXNDb3VudCAqIDIpLFxuXHRcdFx0XHR2ZXJ0ZXhDb3VudDogdmVydGljZXNDb3VudCxcblx0XHRcdFx0aW5kaWNlczogbmV3IFVpbnQxNkFycmF5KGluZGljZXNDb3VudCksXG5cdFx0XHRcdGluZGljZXNDb3VudCxcblx0XHRcdH07XG5cblx0XHRcdHRoaXMuc3BpbmVBdHRhY2htZW50c0RpcnR5ID0gdHJ1ZTtcblx0XHR9XG5cblx0XHRjb25zdCBjbGlwcGVkRGF0YSA9IGNhY2hlRGF0YS5jbGlwcGVkRGF0YTtcblxuXHRcdGNvbnN0IHNpemVDaGFuZ2UgPSBjbGlwcGVkRGF0YS52ZXJ0ZXhDb3VudCAhPT0gdmVydGljZXNDb3VudCB8fCBpbmRpY2VzQ291bnQgIT09IGNsaXBwZWREYXRhLmluZGljZXNDb3VudDtcblxuXHRcdGNhY2hlRGF0YS5za2lwUmVuZGVyID0gdmVydGljZXNDb3VudCA9PT0gMDtcblxuXHRcdGlmIChzaXplQ2hhbmdlKSB7XG5cdFx0XHR0aGlzLnNwaW5lQXR0YWNobWVudHNEaXJ0eSA9IHRydWU7XG5cblx0XHRcdGlmIChjbGlwcGVkRGF0YS52ZXJ0ZXhDb3VudCA8IHZlcnRpY2VzQ291bnQpIHtcblx0XHRcdFx0Ly8gYnVmZmVyIHJldXNlIVxuXHRcdFx0XHRjbGlwcGVkRGF0YS52ZXJ0aWNlcyA9IG5ldyBGbG9hdDMyQXJyYXkodmVydGljZXNDb3VudCAqIDIpO1xuXHRcdFx0XHRjbGlwcGVkRGF0YS51dnMgPSBuZXcgRmxvYXQzMkFycmF5KHZlcnRpY2VzQ291bnQgKiAyKTtcblx0XHRcdH1cblxuXHRcdFx0aWYgKGNsaXBwZWREYXRhLmluZGljZXMubGVuZ3RoIDwgaW5kaWNlc0NvdW50KSB7XG5cdFx0XHRcdGNsaXBwZWREYXRhLmluZGljZXMgPSBuZXcgVWludDE2QXJyYXkoaW5kaWNlc0NvdW50KTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRjb25zdCB7IHZlcnRpY2VzLCB1dnMsIGluZGljZXMgfSA9IGNsaXBwZWREYXRhO1xuXG5cdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCB2ZXJ0aWNlc0NvdW50OyBpKyspIHtcblx0XHRcdHZlcnRpY2VzW2kgKiAyXSA9IGNsaXBwZWRWZXJ0aWNlc1tpICogMl07XG5cdFx0XHR2ZXJ0aWNlc1soaSAqIDIpICsgMV0gPSBjbGlwcGVkVmVydGljZXNbKGkgKiAyKSArIDFdO1xuXG5cdFx0XHR1dnNbaSAqIDJdID0gY2xpcHBlZFVWc1soaSAqIDIpXTtcblx0XHRcdHV2c1soaSAqIDIpICsgMV0gPSBjbGlwcGVkVVZzWyhpICogMikgKyAxXTtcblx0XHR9XG5cblx0XHRjbGlwcGVkRGF0YS52ZXJ0ZXhDb3VudCA9IHZlcnRpY2VzQ291bnQ7XG5cblx0XHRmb3IgKGxldCBpID0gMDsgaSA8IGluZGljZXNDb3VudDsgaSsrKSB7XG5cdFx0XHRpZiAoaW5kaWNlc1tpXSAhPT0gY2xpcHBlZFRyaWFuZ2xlc1tpXSkge1xuXHRcdFx0XHR0aGlzLnNwaW5lQXR0YWNobWVudHNEaXJ0eSA9IHRydWU7XG5cdFx0XHRcdGluZGljZXNbaV0gPSBjbGlwcGVkVHJpYW5nbGVzW2ldO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGNsaXBwZWREYXRhLmluZGljZXNDb3VudCA9IGluZGljZXNDb3VudDtcblx0fVxuXG5cdC8qKlxuXHQgKiBlbnN1cmUgdGhhdCBhdHRhY2hlZCBjb250YWluZXJzIG1hcCBjb3JyZWN0bHkgdG8gdGhlaXIgc2xvdHNcblx0ICogYWxvbmcgd2l0aCB0aGVpciBwb3NpdGlvbiwgcm90YXRpb24sIHNjYWxlLCBhbmQgdmlzaWJpbGl0eS5cblx0ICovXG5cdHByaXZhdGUgdXBkYXRlU2xvdE9iamVjdHMgKCkge1xuXHRcdGZvciAoY29uc3QgaSBpbiB0aGlzLl9zbG90c09iamVjdCkge1xuXHRcdFx0Y29uc3Qgc2xvdEF0dGFjaG1lbnQgPSB0aGlzLl9zbG90c09iamVjdFtpXTtcblxuXHRcdFx0aWYgKCFzbG90QXR0YWNobWVudCkgY29udGludWU7XG5cblx0XHRcdHRoaXMudXBkYXRlU2xvdE9iamVjdChzbG90QXR0YWNobWVudCk7XG5cdFx0fVxuXHR9XG5cblx0cHJpdmF0ZSB1cGRhdGVTbG90T2JqZWN0IChzbG90QXR0YWNobWVudDogeyBzbG90OiBTbG90LCBjb250YWluZXI6IENvbnRhaW5lciwgZm9sbG93QXR0YWNobWVudFRpbWVsaW5lOiBib29sZWFuIH0pIHtcblx0XHRjb25zdCB7IHNsb3QsIGNvbnRhaW5lciB9ID0gc2xvdEF0dGFjaG1lbnQ7XG5cblx0XHRjb25zdCBmb2xsb3dBdHRhY2htZW50VmFsdWUgPSBzbG90QXR0YWNobWVudC5mb2xsb3dBdHRhY2htZW50VGltZWxpbmUgPyBCb29sZWFuKHNsb3QuYXR0YWNobWVudCkgOiB0cnVlO1xuXHRcdGNvbnRhaW5lci52aXNpYmxlID0gdGhpcy5za2VsZXRvbi5kcmF3T3JkZXIuaW5jbHVkZXMoc2xvdCkgJiYgZm9sbG93QXR0YWNobWVudFZhbHVlO1xuXG5cdFx0aWYgKGNvbnRhaW5lci52aXNpYmxlKSB7XG5cdFx0XHRsZXQgYm9uZSA9IHNsb3QuYm9uZTtcblxuXHRcdFx0Y29uc3QgbWF0cml4ID0gY29udGFpbmVyLmxvY2FsVHJhbnNmb3JtO1xuXHRcdFx0bWF0cml4LmEgPSBib25lLmE7XG5cdFx0XHRtYXRyaXguYiA9IGJvbmUuYztcblx0XHRcdG1hdHJpeC5jID0gLWJvbmUuYjtcblx0XHRcdG1hdHJpeC5kID0gLWJvbmUuZDtcblx0XHRcdG1hdHJpeC50eCA9IGJvbmUud29ybGRYO1xuXHRcdFx0bWF0cml4LnR5ID0gYm9uZS53b3JsZFk7XG5cdFx0XHRjb250YWluZXIuc2V0RnJvbU1hdHJpeChtYXRyaXgpO1xuXG5cdFx0XHRjb250YWluZXIuYWxwaGEgPSB0aGlzLnNrZWxldG9uLmNvbG9yLmEgKiBzbG90LmNvbG9yLmE7XG5cdFx0fVxuXHR9XG5cblx0LyoqIEBpbnRlcm5hbCAqL1xuXHRfZ2V0Q2FjaGVkRGF0YSAoc2xvdDogU2xvdCwgYXR0YWNobWVudDogUmVnaW9uQXR0YWNobWVudCB8IE1lc2hBdHRhY2htZW50KTogQXR0YWNobWVudENhY2hlRGF0YSB7XG5cdFx0cmV0dXJuIHRoaXMuYXR0YWNobWVudENhY2hlRGF0YVtzbG90LmRhdGEuaW5kZXhdW2F0dGFjaG1lbnQubmFtZV0gfHwgdGhpcy5pbml0Q2FjaGVkRGF0YShzbG90LCBhdHRhY2htZW50KTtcblx0fVxuXG5cdHByaXZhdGUgaW5pdENhY2hlZERhdGEgKHNsb3Q6IFNsb3QsIGF0dGFjaG1lbnQ6IFJlZ2lvbkF0dGFjaG1lbnQgfCBNZXNoQXR0YWNobWVudCk6IEF0dGFjaG1lbnRDYWNoZURhdGEge1xuXHRcdGxldCB2ZXJ0aWNlczogRmxvYXQzMkFycmF5O1xuXG5cdFx0aWYgKGF0dGFjaG1lbnQgaW5zdGFuY2VvZiBSZWdpb25BdHRhY2htZW50KSB7XG5cdFx0XHR2ZXJ0aWNlcyA9IG5ldyBGbG9hdDMyQXJyYXkoOCk7XG5cblx0XHRcdHRoaXMuYXR0YWNobWVudENhY2hlRGF0YVtzbG90LmRhdGEuaW5kZXhdW2F0dGFjaG1lbnQubmFtZV0gPSB7XG5cdFx0XHRcdGlkOiBgJHtzbG90LmRhdGEuaW5kZXh9LSR7YXR0YWNobWVudC5uYW1lfWAsXG5cdFx0XHRcdHZlcnRpY2VzLFxuXHRcdFx0XHRjbGlwcGVkOiBmYWxzZSxcblx0XHRcdFx0aW5kaWNlczogWzAsIDEsIDIsIDAsIDIsIDNdLFxuXHRcdFx0XHR1dnM6IG5ldyBGbG9hdDMyQXJyYXkoYXR0YWNobWVudC51dnMubGVuZ3RoKSxcblx0XHRcdFx0Y29sb3I6IG5ldyBDb2xvcigxLCAxLCAxLCAxKSxcblx0XHRcdFx0ZGFya0NvbG9yOiBuZXcgQ29sb3IoMCwgMCwgMCwgMCksXG5cdFx0XHRcdGRhcmtUaW50OiB0aGlzLmRhcmtUaW50LFxuXHRcdFx0XHRza2lwUmVuZGVyOiBmYWxzZSxcblx0XHRcdFx0dGV4dHVyZTogYXR0YWNobWVudC5yZWdpb24/LnRleHR1cmUudGV4dHVyZSxcblx0XHRcdH07XG5cdFx0fVxuXHRcdGVsc2Uge1xuXHRcdFx0dmVydGljZXMgPSBuZXcgRmxvYXQzMkFycmF5KGF0dGFjaG1lbnQud29ybGRWZXJ0aWNlc0xlbmd0aCk7XG5cblx0XHRcdHRoaXMuYXR0YWNobWVudENhY2hlRGF0YVtzbG90LmRhdGEuaW5kZXhdW2F0dGFjaG1lbnQubmFtZV0gPSB7XG5cdFx0XHRcdGlkOiBgJHtzbG90LmRhdGEuaW5kZXh9LSR7YXR0YWNobWVudC5uYW1lfWAsXG5cdFx0XHRcdHZlcnRpY2VzLFxuXHRcdFx0XHRjbGlwcGVkOiBmYWxzZSxcblx0XHRcdFx0aW5kaWNlczogYXR0YWNobWVudC50cmlhbmdsZXMsXG5cdFx0XHRcdHV2czogbmV3IEZsb2F0MzJBcnJheShhdHRhY2htZW50LnV2cy5sZW5ndGgpLFxuXHRcdFx0XHRjb2xvcjogbmV3IENvbG9yKDEsIDEsIDEsIDEpLFxuXHRcdFx0XHRkYXJrQ29sb3I6IG5ldyBDb2xvcigwLCAwLCAwLCAwKSxcblx0XHRcdFx0ZGFya1RpbnQ6IHRoaXMuZGFya1RpbnQsXG5cdFx0XHRcdHNraXBSZW5kZXI6IGZhbHNlLFxuXHRcdFx0XHR0ZXh0dXJlOiBhdHRhY2htZW50LnJlZ2lvbj8udGV4dHVyZS50ZXh0dXJlLFxuXHRcdFx0fTtcblx0XHR9XG5cblx0XHRyZXR1cm4gdGhpcy5hdHRhY2htZW50Q2FjaGVEYXRhW3Nsb3QuZGF0YS5pbmRleF1bYXR0YWNobWVudC5uYW1lXTtcblx0fVxuXG5cdHByb3RlY3RlZCBvblZpZXdVcGRhdGUgKCkge1xuXHRcdC8vIGluY3JlbWVudCBmcm9tIHRoZSAxMnRoIGJpdCFcblx0XHR0aGlzLl9kaWRWaWV3Q2hhbmdlVGljaysrO1xuXHRcdGlmICghdGhpcy5fYm91bmRzUHJvdmlkZXIpIHtcblx0XHRcdHRoaXMuX2JvdW5kc0RpcnR5ID0gdHJ1ZTtcblx0XHR9XG5cblx0XHRpZiAodGhpcy5kaWRWaWV3VXBkYXRlKSByZXR1cm47XG5cdFx0dGhpcy5kaWRWaWV3VXBkYXRlID0gdHJ1ZTtcblxuXHRcdGNvbnN0IHJlbmRlckdyb3VwID0gdGhpcy5yZW5kZXJHcm91cCB8fCB0aGlzLnBhcmVudFJlbmRlckdyb3VwO1xuXG5cdFx0aWYgKHJlbmRlckdyb3VwKSB7XG5cdFx0XHRyZW5kZXJHcm91cC5vbkNoaWxkVmlld1VwZGF0ZSh0aGlzKTtcblx0XHR9XG5cblx0XHR0aGlzLmRlYnVnPy5yZW5kZXJEZWJ1Zyh0aGlzKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBBdHRhY2hlcyBhIFBpeGlKUyBjb250YWluZXIgdG8gYSBzcGVjaWZpZWQgc2xvdC4gVGhpcyB3aWxsIG1hcCB0aGUgd29ybGQgdHJhbnNmb3JtIG9mIHRoZSBzbG90cyBib25lXG5cdCAqIHRvIHRoZSBhdHRhY2hlZCBjb250YWluZXIuIEEgY29udGFpbmVyIGNhbiBvbmx5IGJlIGF0dGFjaGVkIHRvIG9uZSBzbG90IGF0IGEgdGltZS5cblx0ICpcblx0ICogQHBhcmFtIGNvbnRhaW5lciAtIFRoZSBjb250YWluZXIgdG8gYXR0YWNoIHRvIHRoZSBzbG90XG5cdCAqIEBwYXJhbSBzbG90UmVmIC0gVGhlIHNsb3QgaWQgb3IgIHNsb3QgdG8gYXR0YWNoIHRvXG5cdCAqIEBwYXJhbSBvcHRpb25zIC0gT3B0aW9uYWwgc2V0dGluZ3MgZm9yIHRoZSBhdHRhY2htZW50LlxuXHQgKiBAcGFyYW0gb3B0aW9ucy5mb2xsb3dBdHRhY2htZW50VGltZWxpbmUgLSBJZiB0cnVlLCB0aGUgYXR0YWNobWVudCB3aWxsIGZvbGxvdyB0aGUgc2xvdCdzIGF0dGFjaG1lbnQgdGltZWxpbmUuXG5cdCAqL1xuXHRwdWJsaWMgYWRkU2xvdE9iamVjdCAoc2xvdDogbnVtYmVyIHwgc3RyaW5nIHwgU2xvdCwgY29udGFpbmVyOiBDb250YWluZXIsIG9wdGlvbnM/OiB7IGZvbGxvd0F0dGFjaG1lbnRUaW1lbGluZT86IGJvb2xlYW4gfSkge1xuXHRcdHNsb3QgPSB0aGlzLmdldFNsb3RGcm9tUmVmKHNsb3QpO1xuXG5cdFx0Ly8gbmVlZCB0byBjaGVjayBpbiBvbiB0aGUgY29udGFpbmVyIHRvby4uLlxuXHRcdGZvciAoY29uc3QgaSBpbiB0aGlzLl9zbG90c09iamVjdCkge1xuXHRcdFx0aWYgKHRoaXMuX3Nsb3RzT2JqZWN0W2ldPy5jb250YWluZXIgPT09IGNvbnRhaW5lcikge1xuXHRcdFx0XHR0aGlzLnJlbW92ZVNsb3RPYmplY3QodGhpcy5fc2xvdHNPYmplY3RbaV0uc2xvdCk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0dGhpcy5yZW1vdmVTbG90T2JqZWN0KHNsb3QpO1xuXG5cdFx0Y29udGFpbmVyLmluY2x1ZGVJbkJ1aWxkID0gZmFsc2U7XG5cblx0XHR0aGlzLmFkZENoaWxkKGNvbnRhaW5lcik7XG5cblx0XHRjb25zdCBzbG90T2JqZWN0ID0ge1xuXHRcdFx0Y29udGFpbmVyLFxuXHRcdFx0c2xvdCxcblx0XHRcdGZvbGxvd0F0dGFjaG1lbnRUaW1lbGluZTogb3B0aW9ucz8uZm9sbG93QXR0YWNobWVudFRpbWVsaW5lIHx8IGZhbHNlLFxuXHRcdH07XG5cdFx0dGhpcy5fc2xvdHNPYmplY3Rbc2xvdC5kYXRhLm5hbWVdID0gc2xvdE9iamVjdDtcblxuXHRcdHRoaXMudXBkYXRlU2xvdE9iamVjdChzbG90T2JqZWN0KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBSZW1vdmVzIGEgUGl4aUpTIGNvbnRhaW5lciBmcm9tIHRoZSBzbG90IGl0IGlzIGF0dGFjaGVkIHRvLlxuXHQgKlxuXHQgKiBAcGFyYW0gY29udGFpbmVyIC0gVGhlIGNvbnRhaW5lciB0byBkZXRhY2ggZnJvbSB0aGUgc2xvdFxuXHQgKiBAcGFyYW0gc2xvdE9yQ29udGFpbmVyIC0gVGhlIGNvbnRhaW5lciwgc2xvdCBpZCBvciBzbG90IHRvIGRldGFjaCBmcm9tXG5cdCAqL1xuXHRwdWJsaWMgcmVtb3ZlU2xvdE9iamVjdCAoc2xvdE9yQ29udGFpbmVyOiBudW1iZXIgfCBzdHJpbmcgfCBTbG90IHwgQ29udGFpbmVyKSB7XG5cdFx0bGV0IGNvbnRhaW5lclRvUmVtb3ZlOiBDb250YWluZXIgfCB1bmRlZmluZWQ7XG5cblx0XHRpZiAoc2xvdE9yQ29udGFpbmVyIGluc3RhbmNlb2YgQ29udGFpbmVyKSB7XG5cdFx0XHRmb3IgKGNvbnN0IGkgaW4gdGhpcy5fc2xvdHNPYmplY3QpIHtcblx0XHRcdFx0aWYgKHRoaXMuX3Nsb3RzT2JqZWN0W2ldPy5jb250YWluZXIgPT09IHNsb3RPckNvbnRhaW5lcikge1xuXHRcdFx0XHRcdHRoaXMuX3Nsb3RzT2JqZWN0W2ldID0gbnVsbDtcblxuXHRcdFx0XHRcdGNvbnRhaW5lclRvUmVtb3ZlID0gc2xvdE9yQ29udGFpbmVyO1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHRcdGVsc2Uge1xuXHRcdFx0Y29uc3Qgc2xvdCA9IHRoaXMuZ2V0U2xvdEZyb21SZWYoc2xvdE9yQ29udGFpbmVyKTtcblxuXHRcdFx0Y29udGFpbmVyVG9SZW1vdmUgPSB0aGlzLl9zbG90c09iamVjdFtzbG90LmRhdGEubmFtZV0/LmNvbnRhaW5lcjtcblx0XHRcdHRoaXMuX3Nsb3RzT2JqZWN0W3Nsb3QuZGF0YS5uYW1lXSA9IG51bGw7XG5cdFx0fVxuXG5cdFx0aWYgKGNvbnRhaW5lclRvUmVtb3ZlKSB7XG5cdFx0XHR0aGlzLnJlbW92ZUNoaWxkKGNvbnRhaW5lclRvUmVtb3ZlKTtcblxuXHRcdFx0Y29udGFpbmVyVG9SZW1vdmUuaW5jbHVkZUluQnVpbGQgPSB0cnVlO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBSZW1vdmVzIGFsbCBQaXhpSlMgY29udGFpbmVycyBhdHRhY2hlZCB0byBhbnkgc2xvdC5cblx0ICovXG5cdHB1YmxpYyByZW1vdmVTbG90T2JqZWN0cyAoKSB7XG5cdFx0T2JqZWN0LmVudHJpZXModGhpcy5fc2xvdHNPYmplY3QpLmZvckVhY2goKFtzbG90TmFtZSwgc2xvdE9iamVjdF0pID0+IHtcblx0XHRcdGlmIChzbG90T2JqZWN0KSBzbG90T2JqZWN0LmNvbnRhaW5lci5yZW1vdmVGcm9tUGFyZW50KCk7XG5cdFx0XHRkZWxldGUgdGhpcy5fc2xvdHNPYmplY3Rbc2xvdE5hbWVdO1xuXHRcdH0pO1xuXHR9XG5cblx0LyoqXG5cdCAqIFJldHVybnMgYSBjb250YWluZXIgYXR0YWNoZWQgdG8gYSBzbG90LCBvciB1bmRlZmluZWQgaWYgbm8gY29udGFpbmVyIGlzIGF0dGFjaGVkLlxuXHQgKlxuXHQgKiBAcGFyYW0gc2xvdFJlZiAtIFRoZSBzbG90IGlkIG9yIHNsb3QgdG8gZ2V0IHRoZSBhdHRhY2htZW50IGZyb21cblx0ICogQHJldHVybnMgLSBUaGUgY29udGFpbmVyIGF0dGFjaGVkIHRvIHRoZSBzbG90XG5cdCAqL1xuXHRwdWJsaWMgZ2V0U2xvdE9iamVjdCAoc2xvdDogbnVtYmVyIHwgc3RyaW5nIHwgU2xvdCkge1xuXHRcdHNsb3QgPSB0aGlzLmdldFNsb3RGcm9tUmVmKHNsb3QpO1xuXG5cdFx0cmV0dXJuIHRoaXMuX3Nsb3RzT2JqZWN0W3Nsb3QuZGF0YS5uYW1lXT8uY29udGFpbmVyO1xuXHR9XG5cblx0cHJvdGVjdGVkIHVwZGF0ZUJvdW5kcyAoKSB7XG5cdFx0dGhpcy5fYm91bmRzRGlydHkgPSBmYWxzZTtcblxuXHRcdHRoaXMuc2tlbGV0b25Cb3VuZHMgfHw9IG5ldyBTa2VsZXRvbkJvdW5kcygpO1xuXG5cdFx0Y29uc3Qgc2tlbGV0b25Cb3VuZHMgPSB0aGlzLnNrZWxldG9uQm91bmRzO1xuXG5cdFx0c2tlbGV0b25Cb3VuZHMudXBkYXRlKHRoaXMuc2tlbGV0b24sIHRydWUpO1xuXG5cdFx0aWYgKHRoaXMuX2JvdW5kc1Byb3ZpZGVyKSB7XG5cdFx0XHRjb25zdCBib3VuZHNTcGluZSA9IHRoaXMuX2JvdW5kc1Byb3ZpZGVyLmNhbGN1bGF0ZUJvdW5kcyh0aGlzKTtcblxuXHRcdFx0Y29uc3QgYm91bmRzID0gdGhpcy5fYm91bmRzO1xuXHRcdFx0Ym91bmRzLmNsZWFyKCk7XG5cblx0XHRcdGJvdW5kcy54ID0gYm91bmRzU3BpbmUueDtcblx0XHRcdGJvdW5kcy55ID0gYm91bmRzU3BpbmUueTtcblx0XHRcdGJvdW5kcy53aWR0aCA9IGJvdW5kc1NwaW5lLndpZHRoO1xuXHRcdFx0Ym91bmRzLmhlaWdodCA9IGJvdW5kc1NwaW5lLmhlaWdodDtcblxuXHRcdH0gZWxzZSBpZiAoc2tlbGV0b25Cb3VuZHMubWluWCA9PT0gSW5maW5pdHkpIHtcblx0XHRcdGlmICh0aGlzLmhhc05ldmVyVXBkYXRlZCkge1xuXHRcdFx0XHR0aGlzLl91cGRhdGVBbmRBcHBseVN0YXRlKDApO1xuXHRcdFx0XHR0aGlzLl9ib3VuZHNEaXJ0eSA9IGZhbHNlO1xuXHRcdFx0fVxuXHRcdFx0dGhpcy5fdmFsaWRhdGVBbmRUcmFuc2Zvcm1BdHRhY2htZW50cygpO1xuXG5cdFx0XHRjb25zdCBkcmF3T3JkZXIgPSB0aGlzLnNrZWxldG9uLmRyYXdPcmRlcjtcblx0XHRcdGNvbnN0IGJvdW5kcyA9IHRoaXMuX2JvdW5kcztcblxuXHRcdFx0Ym91bmRzLmNsZWFyKCk7XG5cblx0XHRcdGZvciAobGV0IGkgPSAwOyBpIDwgZHJhd09yZGVyLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRcdGNvbnN0IHNsb3QgPSBkcmF3T3JkZXJbaV07XG5cblx0XHRcdFx0Y29uc3QgYXR0YWNobWVudCA9IHNsb3QuZ2V0QXR0YWNobWVudCgpO1xuXG5cdFx0XHRcdGlmIChhdHRhY2htZW50ICYmIChhdHRhY2htZW50IGluc3RhbmNlb2YgUmVnaW9uQXR0YWNobWVudCB8fCBhdHRhY2htZW50IGluc3RhbmNlb2YgTWVzaEF0dGFjaG1lbnQpKSB7XG5cdFx0XHRcdFx0Y29uc3QgY2FjaGVEYXRhID0gdGhpcy5fZ2V0Q2FjaGVkRGF0YShzbG90LCBhdHRhY2htZW50KTtcblxuXHRcdFx0XHRcdGJvdW5kcy5hZGRWZXJ0ZXhEYXRhKGNhY2hlRGF0YS52ZXJ0aWNlcywgMCwgY2FjaGVEYXRhLnZlcnRpY2VzLmxlbmd0aCk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdFx0ZWxzZSB7XG5cdFx0XHR0aGlzLl9ib3VuZHMubWluWCA9IHNrZWxldG9uQm91bmRzLm1pblg7XG5cdFx0XHR0aGlzLl9ib3VuZHMubWluWSA9IHNrZWxldG9uQm91bmRzLm1pblk7XG5cdFx0XHR0aGlzLl9ib3VuZHMubWF4WCA9IHNrZWxldG9uQm91bmRzLm1heFg7XG5cdFx0XHR0aGlzLl9ib3VuZHMubWF4WSA9IHNrZWxldG9uQm91bmRzLm1heFk7XG5cdFx0fVxuXHR9XG5cblx0LyoqIEBpbnRlcm5hbCAqL1xuXHRhZGRCb3VuZHMgKGJvdW5kczogQm91bmRzKSB7XG5cdFx0Ym91bmRzLmFkZEJvdW5kcyh0aGlzLmJvdW5kcyk7XG5cdH1cblxuXHQvKipcblx0ICogRGVzdHJveXMgdGhpcyBzcHJpdGUgcmVuZGVyYWJsZSBhbmQgb3B0aW9uYWxseSBpdHMgdGV4dHVyZS5cblx0ICogQHBhcmFtIG9wdGlvbnMgLSBPcHRpb25zIHBhcmFtZXRlci4gQSBib29sZWFuIHdpbGwgYWN0IGFzIGlmIGFsbCBvcHRpb25zXG5cdCAqICBoYXZlIGJlZW4gc2V0IHRvIHRoYXQgdmFsdWVcblx0ICogQHBhcmFtIHtib29sZWFufSBbb3B0aW9ucy50ZXh0dXJlPWZhbHNlXSAtIFNob3VsZCBpdCBkZXN0cm95IHRoZSBjdXJyZW50IHRleHR1cmUgb2YgdGhlIHJlbmRlcmFibGUgYXMgd2VsbFxuXHQgKiBAcGFyYW0ge2Jvb2xlYW59IFtvcHRpb25zLnRleHR1cmVTb3VyY2U9ZmFsc2VdIC0gU2hvdWxkIGl0IGRlc3Ryb3kgdGhlIHRleHR1cmVTb3VyY2Ugb2YgdGhlIHJlbmRlcmFibGUgYXMgd2VsbFxuXHQgKi9cblx0cHVibGljIG92ZXJyaWRlIGRlc3Ryb3kgKG9wdGlvbnM6IERlc3Ryb3lPcHRpb25zID0gZmFsc2UpIHtcblx0XHRzdXBlci5kZXN0cm95KG9wdGlvbnMpO1xuXG5cdFx0VGlja2VyLnNoYXJlZC5yZW1vdmUodGhpcy5pbnRlcm5hbFVwZGF0ZSwgdGhpcyk7XG5cdFx0dGhpcy5zdGF0ZS5jbGVhckxpc3RlbmVycygpO1xuXHRcdHRoaXMuZGVidWcgPSB1bmRlZmluZWQ7XG5cdFx0dGhpcy5za2VsZXRvbiA9IG51bGwgYXMgYW55O1xuXHRcdHRoaXMuc3RhdGUgPSBudWxsIGFzIGFueTtcblx0XHQodGhpcy5fc2xvdHNPYmplY3QgYXMgYW55KSA9IG51bGw7XG5cdFx0dGhpcy5fbGFzdEF0dGFjaG1lbnRzLmxlbmd0aCA9IDA7XG5cdFx0dGhpcy5hdHRhY2htZW50Q2FjaGVEYXRhID0gbnVsbCBhcyBhbnk7XG5cdH1cblxuXHQvKiogQ29udmVydHMgYSBwb2ludCBmcm9tIHRoZSBza2VsZXRvbiBjb29yZGluYXRlIHN5c3RlbSB0byB0aGUgUGl4aSB3b3JsZCBjb29yZGluYXRlIHN5c3RlbS4gKi9cblx0cHVibGljIHNrZWxldG9uVG9QaXhpV29ybGRDb29yZGluYXRlcyAocG9pbnQ6IHsgeDogbnVtYmVyOyB5OiBudW1iZXIgfSkge1xuXHRcdHRoaXMud29ybGRUcmFuc2Zvcm0uYXBwbHkocG9pbnQsIHBvaW50KTtcblx0fVxuXG5cdC8qKiBDb252ZXJ0cyBhIHBvaW50IGZyb20gdGhlIFBpeGkgd29ybGQgY29vcmRpbmF0ZSBzeXN0ZW0gdG8gdGhlIHNrZWxldG9uIGNvb3JkaW5hdGUgc3lzdGVtLiAqL1xuXHRwdWJsaWMgcGl4aVdvcmxkQ29vcmRpbmF0ZXNUb1NrZWxldG9uIChwb2ludDogeyB4OiBudW1iZXI7IHk6IG51bWJlciB9KSB7XG5cdFx0dGhpcy53b3JsZFRyYW5zZm9ybS5hcHBseUludmVyc2UocG9pbnQsIHBvaW50KTtcblx0fVxuXG5cdC8qKiBDb252ZXJ0cyBhIHBvaW50IGZyb20gdGhlIFBpeGkgd29ybGQgY29vcmRpbmF0ZSBzeXN0ZW0gdG8gdGhlIGJvbmUncyBsb2NhbCBjb29yZGluYXRlIHN5c3RlbS4gKi9cblx0cHVibGljIHBpeGlXb3JsZENvb3JkaW5hdGVzVG9Cb25lIChwb2ludDogeyB4OiBudW1iZXI7IHk6IG51bWJlciB9LCBib25lOiBCb25lKSB7XG5cdFx0dGhpcy5waXhpV29ybGRDb29yZGluYXRlc1RvU2tlbGV0b24ocG9pbnQpO1xuXHRcdGlmIChib25lLnBhcmVudCkge1xuXHRcdFx0Ym9uZS5wYXJlbnQud29ybGRUb0xvY2FsKHBvaW50IGFzIFZlY3RvcjIpO1xuXHRcdH1cblx0XHRlbHNlIHtcblx0XHRcdGJvbmUud29ybGRUb0xvY2FsKHBvaW50IGFzIFZlY3RvcjIpO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBVc2UgdGhpcyBtZXRob2QgdG8gaW5zdGFudGlhdGUgYSBTcGluZSBnYW1lIG9iamVjdC5cblx0ICogQmVmb3JlIGluc3RhbnRpYXRpbmcgYSBTcGluZSBnYW1lIG9iamVjdCwgdGhlIHNrZWxldG9uIChgLnNrZWxgIG9yIGAuanNvbmApIGFuZCB0aGUgYXRsYXMgdGV4dCBmaWxlcyBtdXN0IGJlIGxvYWRlZCBpbnRvIHRoZSBBc3NldHMuIEZvciBleGFtcGxlOlxuXHQgKiBgYGBcblx0ICogUElYSS5Bc3NldHMuYWRkKFwic2Fja0RhdGFcIiwgXCIvYXNzZXRzL3NhY2stcHJvLnNrZWxcIik7XG5cdCAqIFBJWEkuQXNzZXRzLmFkZChcInNhY2tBdGxhc1wiLCBcIi9hc3NldHMvc2Fjay1wbWEuYXRsYXNcIik7XG5cdCAqIGF3YWl0IFBJWEkuQXNzZXRzLmxvYWQoW1wic2Fja0RhdGFcIiwgXCJzYWNrQXRsYXNcIl0pO1xuXHQgKiBgYGBcblx0ICogT25jZSBhIFNwaW5lIGdhbWUgb2JqZWN0IGlzIGNyZWF0ZWQsIGl0cyBza2VsZXRvbiBkYXRhIGlzIGNhY2hlZCBpbnRvIHtAbGluayBDYWNoZX0gdXNpbmcgdGhlIGtleTpcblx0ICogYCR7c2tlbGV0b25Bc3NldE5hbWV9LSR7YXRsYXNBc3NldE5hbWV9LSR7b3B0aW9ucz8uc2NhbGUgPz8gMX1gXG5cdCAqXG5cdCAqIEBwYXJhbSBvcHRpb25zIC0gT3B0aW9ucyB0byBjb25maWd1cmUgdGhlIFNwaW5lIGdhbWUgb2JqZWN0LiBTZWUge0BsaW5rIFNwaW5lRnJvbU9wdGlvbnN9XG5cdCAqIEByZXR1cm5zIHtTcGluZX0gVGhlIFNwaW5lIGdhbWUgb2JqZWN0IGluc3RhbnRpYXRlZFxuXHQgKi9cblx0c3RhdGljIGZyb20gKHsgc2tlbGV0b24sIGF0bGFzLCBzY2FsZSA9IDEsIGRhcmtUaW50LCBhdXRvVXBkYXRlID0gdHJ1ZSwgYm91bmRzUHJvdmlkZXIgfTogU3BpbmVGcm9tT3B0aW9ucykge1xuXHRcdGNvbnN0IGNhY2hlS2V5ID0gYCR7c2tlbGV0b259LSR7YXRsYXN9LSR7c2NhbGV9YDtcblxuXHRcdGlmIChDYWNoZS5oYXMoY2FjaGVLZXkpKSB7XG5cdFx0XHRyZXR1cm4gbmV3IFNwaW5lKHtcblx0XHRcdFx0c2tlbGV0b25EYXRhOiBDYWNoZS5nZXQ8U2tlbGV0b25EYXRhPihjYWNoZUtleSksXG5cdFx0XHRcdGRhcmtUaW50LFxuXHRcdFx0XHRhdXRvVXBkYXRlLFxuXHRcdFx0XHRib3VuZHNQcm92aWRlcixcblx0XHRcdH0pO1xuXHRcdH1cblxuXHRcdGNvbnN0IHNrZWxldG9uQXNzZXQgPSBBc3NldHMuZ2V0PGFueSB8IFVpbnQ4QXJyYXk+KHNrZWxldG9uKTtcblxuXHRcdGNvbnN0IGF0bGFzQXNzZXQgPSBBc3NldHMuZ2V0PFRleHR1cmVBdGxhcz4oYXRsYXMpO1xuXHRcdGNvbnN0IGF0dGFjaG1lbnRMb2FkZXIgPSBuZXcgQXRsYXNBdHRhY2htZW50TG9hZGVyKGF0bGFzQXNzZXQpO1xuXHRcdGNvbnN0IHBhcnNlciA9IHNrZWxldG9uQXNzZXQgaW5zdGFuY2VvZiBVaW50OEFycmF5XG5cdFx0XHQ/IG5ldyBTa2VsZXRvbkJpbmFyeShhdHRhY2htZW50TG9hZGVyKVxuXHRcdFx0OiBuZXcgU2tlbGV0b25Kc29uKGF0dGFjaG1lbnRMb2FkZXIpO1xuXG5cdFx0cGFyc2VyLnNjYWxlID0gc2NhbGU7XG5cdFx0Y29uc3Qgc2tlbGV0b25EYXRhID0gcGFyc2VyLnJlYWRTa2VsZXRvbkRhdGEoc2tlbGV0b25Bc3NldCk7XG5cblx0XHRDYWNoZS5zZXQoY2FjaGVLZXksIHNrZWxldG9uRGF0YSk7XG5cblx0XHRyZXR1cm4gbmV3IFNwaW5lKHtcblx0XHRcdHNrZWxldG9uRGF0YSxcblx0XHRcdGRhcmtUaW50LFxuXHRcdFx0YXV0b1VwZGF0ZSxcblx0XHRcdGJvdW5kc1Byb3ZpZGVyLFxuXHRcdH0pO1xuXHR9XG59XG4iXX0=
|
|
824
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU3BpbmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvU3BpbmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OzsrRUEyQitFO0FBRS9FLE9BQU8sRUFDTixjQUFjLEVBQ2Qsa0JBQWtCLEVBQ2xCLHFCQUFxQixFQUdyQixrQkFBa0IsRUFDbEIsS0FBSyxFQUNMLGNBQWMsRUFDZCxPQUFPLEVBQ1AsSUFBSSxFQUNKLGdCQUFnQixFQUNoQixRQUFRLEVBQ1IsY0FBYyxFQUNkLGNBQWMsRUFDZCxnQkFBZ0IsRUFDaEIsWUFBWSxFQUNaLFlBQVksRUFDWixJQUFJLEVBSUosT0FBTyxHQUNQLE1BQU0sOEJBQThCLENBQUM7QUFDdEMsT0FBTyxFQUNOLE1BQU0sRUFFTixLQUFLLEVBQ0wsU0FBUyxFQUdULFFBQVEsRUFDUixRQUFRLEVBRVIsT0FBTyxFQUNQLE1BQU0sRUFDTixhQUFhLEdBQ2IsTUFBTSxTQUFTLENBQUM7QUErQmhCLENBQUM7QUFFRixNQUFNLFNBQVMsR0FBRyxJQUFJLE9BQU8sRUFBRSxDQUFDO0FBRWhDLFFBQVEsQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDO0FBRXRCLE1BQU0sT0FBTyxHQUFHLElBQUksZ0JBQWdCLEVBQUUsQ0FBQztBQWF2QyxzRUFBc0U7QUFDdEUsTUFBTSxPQUFPLDJCQUEyQjtJQUU5QjtJQUNBO0lBQ0E7SUFDQTtJQUpULFlBQ1MsQ0FBUyxFQUNULENBQVMsRUFDVCxLQUFhLEVBQ2IsTUFBYztRQUhkLE1BQUMsR0FBRCxDQUFDLENBQVE7UUFDVCxNQUFDLEdBQUQsQ0FBQyxDQUFRO1FBQ1QsVUFBSyxHQUFMLEtBQUssQ0FBUTtRQUNiLFdBQU0sR0FBTixNQUFNLENBQVE7SUFDbkIsQ0FBQztJQUNMLGVBQWU7UUFDZCxPQUFPLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDLEVBQUUsS0FB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QUFNLGFBQWEsR0FBRyxNQUFNLENBQUMsR0FBRyxDQUFtQixRQUFRLENBQUMsQ0FBQztRQUU3RCxNQUFNLFVBQVUsR0FBRyxNQUFNLENBQUMsR0FBRyxDQUFlLEtBQUssQ0FBQyxDQUFDO1FBQ25ELE1BQU0sZ0JBQWdCLEdBQUcsSUFBSSxxQkFBcUIsQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUMvRCxNQUFNLE1BQU0sR0FBRyxhQUFhLFlBQVksVUFBVTtZQUNqRCxDQUFDLENBQUMsSUFBSSxjQUFjLENBQUMsZ0JBQWdCLENBQUM7WUFDdEMsQ0FBQyxDQUFDLElBQUksWUFBWSxDQUFDLGdCQUFnQixDQUFDLENBQUM7UUFFdEMsTUFBTSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUM7UUFDckIsTUFBTSxZQUFZLEdBQUcsTUFBTSxDQUFDLGdCQUFnQixDQUFDLGFBQWEsQ0FBQyxDQUFDO1FBRTVELEtBQUssQ0FBQyxHQUFHLENBQUMsUUFBUSxFQUFFLFlBQVksQ0FBQyxDQUFDO1FBRWxDLE9BQU8sSUFBSSxLQUFLLENBQUM7WUFDaEIsWUFBWTtZQUNaLFFBQVE7WUFDUixVQUFVO1lBQ1YsY0FBYztZQUNkLE1BQU07U0FDTixDQUFDLENBQUM7SUFDSixDQUFDO0NBQ0QiLCJzb3VyY2VzQ29udGVudCI6WyIvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4gKiBTcGluZSBSdW50aW1lcyBMaWNlbnNlIEFncmVlbWVudFxuICogTGFzdCB1cGRhdGVkIEFwcmlsIDUsIDIwMjUuIFJlcGxhY2VzIGFsbCBwcmlvciB2ZXJzaW9ucy5cbiAqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTMtMjAyNSwgRXNvdGVyaWMgU29mdHdhcmUgTExDXG4gKlxuICogSW50ZWdyYXRpb24gb2YgdGhlIFNwaW5lIFJ1bnRpbWVzIGludG8gc29mdHdhcmUgb3Igb3RoZXJ3aXNlIGNyZWF0aW5nXG4gKiBkZXJpdmF0aXZlIHdvcmtzIG9mIHRoZSBTcGluZSBSdW50aW1lcyBpcyBwZXJtaXR0ZWQgdW5kZXIgdGhlIHRlcm1zIGFuZFxuICogY29uZGl0aW9ucyBvZiBTZWN0aW9uIDIgb2YgdGhlIFNwaW5lIEVkaXRvciBMaWNlbnNlIEFncmVlbWVudDpcbiAqIGh0dHA6Ly9lc290ZXJpY3NvZnR3YXJlLmNvbS9zcGluZS1lZGl0b3ItbGljZW5zZVxuICpcbiAqIE90aGVyd2lzZSwgaXQgaXMgcGVybWl0dGVkIHRvIGludGVncmF0ZSB0aGUgU3BpbmUgUnVudGltZXMgaW50byBzb2Z0d2FyZVxuICogb3Igb3RoZXJ3aXNlIGNyZWF0ZSBkZXJpdmF0aXZlIHdvcmtzIG9mIHRoZSBTcGluZSBSdW50aW1lcyAoY29sbGVjdGl2ZWx5LFxuICogXCJQcm9kdWN0c1wiKSwgcHJvdmlkZWQgdGhhdCBlYWNoIHVzZXIgb2YgdGhlIFByb2R1Y3RzIG11c3Qgb2J0YWluIHRoZWlyIG93blxuICogU3BpbmUgRWRpdG9yIGxpY2Vuc2UgYW5kIHJlZGlzdHJpYnV0aW9uIG9mIHRoZSBQcm9kdWN0cyBpbiBhbnkgZm9ybSBtdXN0XG4gKiBpbmNsdWRlIHRoaXMgbGljZW5zZSBhbmQgY29weXJpZ2h0IG5vdGljZS5cbiAqXG4gKiBUSEUgU1BJTkUgUlVOVElNRVMgQVJFIFBST1ZJREVEIEJZIEVTT1RFUklDIFNPRlRXQVJFIExMQyBcIkFTIElTXCIgQU5EIEFOWVxuICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRFxuICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRVxuICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgRVNPVEVSSUMgU09GVFdBUkUgTExDIEJFIExJQUJMRSBGT1IgQU5ZXG4gKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFU1xuICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTLFxuICogQlVTSU5FU1MgSU5URVJSVVBUSU9OLCBPUiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUykgSE9XRVZFUiBDQVVTRUQgQU5EXG4gKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVFxuICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GXG4gKiBUSEUgU1BJTkUgUlVOVElNRVMsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuXG4gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG5cbmltcG9ydCB7XG5cdEFuaW1hdGlvblN0YXRlLFxuXHRBbmltYXRpb25TdGF0ZURhdGEsXG5cdEF0bGFzQXR0YWNobWVudExvYWRlcixcblx0QXR0YWNobWVudCxcblx0Qm9uZSxcblx0Q2xpcHBpbmdBdHRhY2htZW50LFxuXHRDb2xvcixcblx0TWVzaEF0dGFjaG1lbnQsXG5cdFBoeXNpY3MsXG5cdFBvb2wsXG5cdFJlZ2lvbkF0dGFjaG1lbnQsXG5cdFNrZWxldG9uLFxuXHRTa2VsZXRvbkJpbmFyeSxcblx0U2tlbGV0b25Cb3VuZHMsXG5cdFNrZWxldG9uQ2xpcHBpbmcsXG5cdFNrZWxldG9uRGF0YSxcblx0U2tlbGV0b25Kc29uLFxuXHRTa2luLFxuXHRTbG90LFxuXHR0eXBlIFRleHR1cmVBdGxhcyxcblx0VHJhY2tFbnRyeSxcblx0VmVjdG9yMixcbn0gZnJvbSAnQGVzb3Rlcmljc29mdHdhcmUvc3BpbmUtY29yZSc7XG5pbXBvcnQge1xuXHRBc3NldHMsXG5cdEJvdW5kcyxcblx0Q2FjaGUsXG5cdENvbnRhaW5lcixcblx0Q29udGFpbmVyT3B0aW9ucyxcblx0RGVzdHJveU9wdGlvbnMsXG5cdGZhc3RDb3B5LFxuXHRHcmFwaGljcyxcblx0UG9pbnREYXRhLFxuXHRUZXh0dXJlLFxuXHRUaWNrZXIsXG5cdFZpZXdDb250YWluZXIsXG59IGZyb20gJ3BpeGkuanMnO1xuaW1wb3J0IHsgSVNwaW5lRGVidWdSZW5kZXJlciB9IGZyb20gJy4vU3BpbmVEZWJ1Z1JlbmRlcmVyLmpzJztcblxuLyoqXG4gKiBPcHRpb25zIHRvIGNyZWF0ZSBhIHtAbGluayBTcGluZX0gdXNpbmcge0BsaW5rIFNwaW5lLmZyb219LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFNwaW5lRnJvbU9wdGlvbnMge1xuXHQvKiogdGhlIGFzc2V0IG5hbWUgZm9yIHRoZSBza2VsZXRvbiBgLnNrZWxgIG9yIGAuanNvbmAgZmlsZSBwcmV2aW91c2x5IGxvYWRlZCBpbnRvIHRoZSBBc3NldHMgKi9cblx0c2tlbGV0b246IHN0cmluZztcblxuXHQvKiogdGhlIGFzc2V0IG5hbWUgZm9yIHRoZSBhdGxhcyBmaWxlIHByZXZpb3VzbHkgbG9hZGVkIGludG8gdGhlIEFzc2V0cyAqL1xuXHRhdGxhczogc3RyaW5nO1xuXG5cdC8qKiAgVGhlIHZhbHVlIHBhc3NlZCB0byB0aGUgc2tlbGV0b24gcmVhZGVyLiBJZiBvbWl0dGVkLCAxIGlzIHBhc3NlZC4gU2VlIHtAbGluayBTa2VsZXRvbkJpbmFyeS5zY2FsZX0gZm9yIGRldGFpbHMuICovXG5cdHNjYWxlPzogbnVtYmVyO1xuXG5cdC8qKiAgU2V0IHRoZSB7QGxpbmsgU3BpbmUuYXV0b1VwZGF0ZX0gdmFsdWUuIElmIG9taXR0ZWQsIGl0IGlzIHNldCB0byBgdHJ1ZWAuICovXG5cdGF1dG9VcGRhdGU/OiBib29sZWFuO1xuXG5cdC8qKlxuXHQgKiBJZiBgdHJ1ZWAsIHVzZSB0aGUgZGFyayB0aW50IHJlbmRlcmVyIHRvIHJlbmRlciB0aGUgc2tlbGV0b25cblx0ICogSWYgYGZhbHNlYCwgdXNlIHRoZSBkZWZhdWx0IHBpeGkgcmVuZGVyZXIgdG8gcmVuZGVyIHRoZSBza2VsZXRvblxuXHQgKiBJZiBgdW5kZWZpbmVkYCwgdXNlIHRoZSBkYXJrIHRpbnQgcmVuZGVyZXIgaWYgYXQgbGVhc3Qgb25lIHNsb3QgaGFzIHRpbnQgYmxhY2tcblx0ICovXG5cdGRhcmtUaW50PzogYm9vbGVhbjtcblxuXHQvKiogVGhlIGJvdW5kcyBwcm92aWRlciB0byB1c2UuIElmIHVuZGVmaW5lZCB0aGUgYm91bmRzIHdpbGwgYmUgZHluYW1pYywgY2FsY3VsYXRlZCB3aGVuIHJlcXVlc3RlZCBhbmQgYmFzZWQgb24gdGhlIGN1cnJlbnQgZnJhbWUuICovXG5cdGJvdW5kc1Byb3ZpZGVyPzogU3BpbmVCb3VuZHNQcm92aWRlcixcblxuXHQvKiogVGhlIHRpY2tlciB0byB1c2Ugd2hlbiB7QGxpbmsgYXV0b1VwZGF0ZX0gaXMgYHRydWVgLiBEZWZhdWx0cyB0byB7QGxpbmsgVGlja2VyLnNoYXJlZH0uICovXG5cdHRpY2tlcj86IFRpY2tlcixcbn07XG5cbmNvbnN0IHZlY3RvckF1eCA9IG5ldyBWZWN0b3IyKCk7XG5cblNrZWxldG9uLnlEb3duID0gdHJ1ZTtcblxuY29uc3QgY2xpcHBlciA9IG5ldyBTa2VsZXRvbkNsaXBwaW5nKCk7XG5cbi8qKiBBIGJvdW5kcyBwcm92aWRlciBjYWxjdWxhdGVzIHRoZSBib3VuZGluZyBib3ggZm9yIGEgc2tlbGV0b24sIHdoaWNoIGlzIHRoZW4gYXNzaWduZWQgYXMgdGhlIHNpemUgb2YgdGhlIFNwaW5lR2FtZU9iamVjdC4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU3BpbmVCb3VuZHNQcm92aWRlciB7XG5cdC8qKiBSZXR1cm5zIHRoZSBib3VuZGluZyBib3ggZm9yIHRoZSBza2VsZXRvbiwgaW4gc2tlbGV0b24gc3BhY2UuICovXG5cdGNhbGN1bGF0ZUJvdW5kcyAoZ2FtZU9iamVjdDogU3BpbmUpOiB7XG5cdFx0eDogbnVtYmVyO1xuXHRcdHk6IG51bWJlcjtcblx0XHR3aWR0aDogbnVtYmVyO1xuXHRcdGhlaWdodDogbnVtYmVyO1xuXHR9O1xufVxuXG4vKiogQSBib3VuZHMgcHJvdmlkZXIgdGhhdCBwcm92aWRlcyBhIGZpeGVkIHNpemUgZ2l2ZW4gYnkgdGhlIHVzZXIuICovXG5leHBvcnQgY2xhc3MgQUFCQlJlY3RhbmdsZUJvdW5kc1Byb3ZpZGVyIGltcGxlbWVudHMgU3BpbmVCb3VuZHNQcm92aWRlciB7XG5cdGNvbnN0cnVjdG9yIChcblx0XHRwcml2YXRlIHg6IG51bWJlcixcblx0XHRwcml2YXRlIHk6IG51bWJlcixcblx0XHRwcml2YXRlIHdpZHRoOiBudW1iZXIsXG5cdFx0cHJpdmF0ZSBoZWlnaHQ6IG51bWJlcixcblx0KSB7IH1cblx0Y2FsY3VsYXRlQm91bmRzICgpIHtcblx0XHRyZXR1cm4geyB4OiB0aGlzLngsIHk6IHRoaXMueSwgd2lkdGg6IHRoaXMud2lkdGgsIGhlaWdodDogdGhpcy5oZWlnaHQgfTtcblx0fVxufVxuXG4vKiogQSBib3VuZHMgcHJvdmlkZXIgdGhhdCBjYWxjdWxhdGVzIHRoZSBib3VuZGluZyBib3ggZnJvbSB0aGUgc2V0dXAgcG9zZS4gKi9cbmV4cG9ydCBjbGFzcyBTZXR1cFBvc2VCb3VuZHNQcm92aWRlciBpbXBsZW1lbnRzIFNwaW5lQm91bmRzUHJvdmlkZXIge1xuXHQvKipcblx0ICogQHBhcmFtIGNsaXBwaW5nIElmIHRydWUsIGNsaXBwaW5nIGF0dGFjaG1lbnRzIGFyZSB1c2VkIHRvIGNvbXB1dGUgdGhlIGJvdW5kcy4gRmFsc2UsIGJ5IGRlZmF1bHQuXG5cdCAqL1xuXHRjb25zdHJ1Y3RvciAoXG5cdFx0cHJpdmF0ZSBjbGlwcGluZyA9IGZhbHNlLFxuXHQpIHsgfVxuXG5cdGNhbGN1bGF0ZUJvdW5kcyAoZ2FtZU9iamVjdDogU3BpbmUpIHtcblx0XHRpZiAoIWdhbWVPYmplY3Quc2tlbGV0b24pIHJldHVybiB7IHg6IDAsIHk6IDAsIHdpZHRoOiAwLCBoZWlnaHQ6IDAgfTtcblx0XHQvLyBNYWtlIGEgY29weSBvZiBhbmltYXRpb24gc3RhdGUgYW5kIHNrZWxldG9uIGFzIHRoaXMgbWlnaHQgYmUgY2FsbGVkIHdoaWxlXG5cdFx0Ly8gdGhlIHNrZWxldG9uIGluIHRoZSBHYW1lT2JqZWN0IGhhcyBhbHJlYWR5IGJlZW4gaGVhdmlseSBtb2RpZmllZC4gV2UgY2FuIG5vdFxuXHRcdC8vIHJlY29uc3RydWN0IHRoYXQgc3RhdGUuXG5cdFx0Y29uc3Qgc2tlbGV0b24gPSBuZXcgU2tlbGV0b24oZ2FtZU9iamVjdC5za2VsZXRvbi5kYXRhKTtcblx0XHRza2VsZXRvbi5zZXRUb1NldHVwUG9zZSgpO1xuXHRcdHNrZWxldG9uLnVwZGF0ZVdvcmxkVHJhbnNmb3JtKFBoeXNpY3MudXBkYXRlKTtcblx0XHRjb25zdCBib3VuZHMgPSBza2VsZXRvbi5nZXRCb3VuZHNSZWN0KHRoaXMuY2xpcHBpbmcgPyBuZXcgU2tlbGV0b25DbGlwcGluZygpIDogdW5kZWZpbmVkKTtcblx0XHRyZXR1cm4gYm91bmRzLndpZHRoID09IE51bWJlci5ORUdBVElWRV9JTkZJTklUWVxuXHRcdFx0PyB7IHg6IDAsIHk6IDAsIHdpZHRoOiAwLCBoZWlnaHQ6IDAgfVxuXHRcdFx0OiBib3VuZHM7XG5cdH1cbn1cblxuLyoqIEEgYm91bmRzIHByb3ZpZGVyIHRoYXQgY2FsY3VsYXRlcyB0aGUgYm91bmRpbmcgYm94IGJ5IHRha2luZyB0aGUgbWF4aW11bWcgYm91bmRpbmcgYm94IGZvciBhIGNvbWJpbmF0aW9uIG9mIHNraW5zIGFuZCBzcGVjaWZpYyBhbmltYXRpb24uICovXG5leHBvcnQgY2xhc3MgU2tpbnNBbmRBbmltYXRpb25Cb3VuZHNQcm92aWRlclxuXHRpbXBsZW1lbnRzIFNwaW5lQm91bmRzUHJvdmlkZXIge1xuXHQvKipcblx0ICogQHBhcmFtIGFuaW1hdGlvbiBUaGUgYW5pbWF0aW9uIHRvIHVzZSBmb3IgY2FsY3VsYXRpbmcgdGhlIGJvdW5kcy4gSWYgbnVsbCwgdGhlIHNldHVwIHBvc2UgaXMgdXNlZC5cblx0ICogQHBhcmFtIHNraW5zIFRoZSBza2lucyB0byB1c2UgZm9yIGNhbGN1bGF0aW5nIHRoZSBib3VuZHMuIElmIGVtcHR5LCB0aGUgZGVmYXVsdCBza2luIGlzIHVzZWQuXG5cdCAqIEBwYXJhbSB0aW1lU3RlcCBUaGUgdGltZSBzdGVwIHRvIHVzZSBmb3IgY2FsY3VsYXRpbmcgdGhlIGJvdW5kcy4gQSBzbWFsbGVyIHRpbWUgc3RlcCBtZWFucyBtb3JlIHByZWNpc2lvbiwgYnV0IHNsb3dlciBjYWxjdWxhdGlvbi5cblx0ICogQHBhcmFtIGNsaXBwaW5nIElmIHRydWUsIGNsaXBwaW5nIGF0dGFjaG1lbnRzIGFyZSB1c2VkIHRvIGNvbXB1dGUgdGhlIGJvdW5kcy4gRmFsc2UsIGJ5IGRlZmF1bHQuXG5cdCAqL1xuXHRjb25zdHJ1Y3RvciAoXG5cdFx0cHJpdmF0ZSBhbmltYXRpb246IHN0cmluZyB8IG51bGwsXG5cdFx0cHJpdmF0ZSBza2luczogc3RyaW5nW10gPSBbXSxcblx0XHRwcml2YXRlIHRpbWVTdGVwOiBudW1iZXIgPSAwLjA1LFxuXHRcdHByaXZhdGUgY2xpcHBpbmcgPSBmYWxzZSxcblx0KSB7IH1cblxuXHRjYWxjdWxhdGVCb3VuZHMgKGdhbWVPYmplY3Q6IFNwaW5lKToge1xuXHRcdHg6IG51bWJlcjtcblx0XHR5OiBudW1iZXI7XG5cdFx0d2lkdGg6IG51bWJlcjtcblx0XHRoZWlnaHQ6IG51bWJlcjtcblx0fSB7XG5cdFx0aWYgKCFnYW1lT2JqZWN0LnNrZWxldG9uIHx8ICFnYW1lT2JqZWN0LnN0YXRlKVxuXHRcdFx0cmV0dXJuIHsgeDogMCwgeTogMCwgd2lkdGg6IDAsIGhlaWdodDogMCB9O1xuXHRcdC8vIE1ha2UgYSBjb3B5IG9mIGFuaW1hdGlvbiBzdGF0ZSBhbmQgc2tlbGV0b24gYXMgdGhpcyBtaWdodCBiZSBjYWxsZWQgd2hpbGVcblx0XHQvLyB0aGUgc2tlbGV0b24gaW4gdGhlIEdhbWVPYmplY3QgaGFzIGFscmVhZHkgYmVlbiBoZWF2aWx5IG1vZGlmaWVkLiBXZSBjYW4gbm90XG5cdFx0Ly8gcmVjb25zdHJ1Y3QgdGhhdCBzdGF0ZS5cblx0XHRjb25zdCBhbmltYXRpb25TdGF0ZSA9IG5ldyBBbmltYXRpb25TdGF0ZShnYW1lT2JqZWN0LnN0YXRlLmRhdGEpO1xuXHRcdGNvbnN0IHNrZWxldG9uID0gbmV3IFNrZWxldG9uKGdhbWVPYmplY3Quc2tlbGV0b24uZGF0YSk7XG5cdFx0Y29uc3QgY2xpcHBlciA9IHRoaXMuY2xpcHBpbmcgPyBuZXcgU2tlbGV0b25DbGlwcGluZygpIDogdW5kZWZpbmVkO1xuXHRcdGNvbnN0IGRhdGEgPSBza2VsZXRvbi5kYXRhO1xuXHRcdGlmICh0aGlzLnNraW5zLmxlbmd0aCA+IDApIHtcblx0XHRcdGxldCBjdXN0b21Ta2luID0gbmV3IFNraW4oXCJjdXN0b20tc2tpblwiKTtcblx0XHRcdGZvciAoY29uc3Qgc2tpbk5hbWUgb2YgdGhpcy5za2lucykge1xuXHRcdFx0XHRjb25zdCBza2luID0gZGF0YS5maW5kU2tpbihza2luTmFtZSk7XG5cdFx0XHRcdGlmIChza2luID09IG51bGwpIGNvbnRpbnVlO1xuXHRcdFx0XHRjdXN0b21Ta2luLmFkZFNraW4oc2tpbik7XG5cdFx0XHR9XG5cdFx0XHRza2VsZXRvbi5zZXRTa2luKGN1c3RvbVNraW4pO1xuXHRcdH1cblx0XHRza2VsZXRvbi5zZXRUb1NldHVwUG9zZSgpO1xuXG5cdFx0Y29uc3QgYW5pbWF0aW9uID0gdGhpcy5hbmltYXRpb24gIT0gbnVsbCA/IGRhdGEuZmluZEFuaW1hdGlvbih0aGlzLmFuaW1hdGlvbiEpIDogbnVsbDtcblxuXHRcdGlmIChhbmltYXRpb24gPT0gbnVsbCkge1xuXHRcdFx0c2tlbGV0b24udXBkYXRlV29ybGRUcmFuc2Zvcm0oUGh5c2ljcy51cGRhdGUpO1xuXHRcdFx0Y29uc3QgYm91bmRzID0gc2tlbGV0b24uZ2V0Qm91bmRzUmVjdChjbGlwcGVyKTtcblx0XHRcdHJldHVybiBib3VuZHMud2lkdGggPT0gTnVtYmVyLk5FR0FUSVZFX0lORklOSVRZXG5cdFx0XHRcdD8geyB4OiAwLCB5OiAwLCB3aWR0aDogMCwgaGVpZ2h0OiAwIH1cblx0XHRcdFx0OiBib3VuZHM7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGxldCBtaW5YID0gTnVtYmVyLlBPU0lUSVZFX0lORklOSVRZLFxuXHRcdFx0XHRtaW5ZID0gTnVtYmVyLlBPU0lUSVZFX0lORklOSVRZLFxuXHRcdFx0XHRtYXhYID0gTnVtYmVyLk5FR0FUSVZFX0lORklOSVRZLFxuXHRcdFx0XHRtYXhZID0gTnVtYmVyLk5FR0FUSVZFX0lORklOSVRZO1xuXHRcdFx0YW5pbWF0aW9uU3RhdGUuY2xlYXJUcmFja3MoKTtcblx0XHRcdGFuaW1hdGlvblN0YXRlLnNldEFuaW1hdGlvbldpdGgoMCwgYW5pbWF0aW9uLCBmYWxzZSk7XG5cdFx0XHRjb25zdCBzdGVwcyA9IE1hdGgubWF4KGFuaW1hdGlvbi5kdXJhdGlvbiAvIHRoaXMudGltZVN0ZXAsIDEuMCk7XG5cdFx0XHRmb3IgKGxldCBpID0gMDsgaSA8IHN0ZXBzOyBpKyspIHtcblx0XHRcdFx0Y29uc3QgZGVsdGEgPSBpID4gMCA/IHRoaXMudGltZVN0ZXAgOiAwO1xuXHRcdFx0XHRhbmltYXRpb25TdGF0ZS51cGRhdGUoZGVsdGEpO1xuXHRcdFx0XHRhbmltYXRpb25TdGF0ZS5hcHBseShza2VsZXRvbik7XG5cdFx0XHRcdHNrZWxldG9uLnVwZGF0ZShkZWx0YSk7XG5cdFx0XHRcdHNrZWxldG9uLnVwZGF0ZVdvcmxkVHJhbnNmb3JtKFBoeXNpY3MudXBkYXRlKTtcblxuXHRcdFx0XHRjb25zdCBib3VuZHMgPSBza2VsZXRvbi5nZXRCb3VuZHNSZWN0KGNsaXBwZXIpO1xuXHRcdFx0XHRtaW5YID0gTWF0aC5taW4obWluWCwgYm91bmRzLngpO1xuXHRcdFx0XHRtaW5ZID0gTWF0aC5taW4obWluWSwgYm91bmRzLnkpO1xuXHRcdFx0XHRtYXhYID0gTWF0aC5tYXgobWF4WCwgYm91bmRzLnggKyBib3VuZHMud2lkdGgpO1xuXHRcdFx0XHRtYXhZID0gTWF0aC5tYXgobWF4WSwgYm91bmRzLnkgKyBib3VuZHMuaGVpZ2h0KTtcblx0XHRcdH1cblx0XHRcdGNvbnN0IGJvdW5kcyA9IHtcblx0XHRcdFx0eDogbWluWCxcblx0XHRcdFx0eTogbWluWSxcblx0XHRcdFx0d2lkdGg6IG1heFggLSBtaW5YLFxuXHRcdFx0XHRoZWlnaHQ6IG1heFkgLSBtaW5ZLFxuXHRcdFx0fTtcblx0XHRcdHJldHVybiBib3VuZHMud2lkdGggPT0gTnVtYmVyLk5FR0FUSVZFX0lORklOSVRZXG5cdFx0XHRcdD8geyB4OiAwLCB5OiAwLCB3aWR0aDogMCwgaGVpZ2h0OiAwIH1cblx0XHRcdFx0OiBib3VuZHM7XG5cdFx0fVxuXHR9XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgU3BpbmVPcHRpb25zIGV4dGVuZHMgQ29udGFpbmVyT3B0aW9ucyB7XG5cdC8qKiB0aGUge0BsaW5rIFNrZWxldG9uRGF0YX0gdXNlZCB0byBpbnN0YW50aWF0ZSB0aGUgc2tlbGV0b24gKi9cblx0c2tlbGV0b25EYXRhOiBTa2VsZXRvbkRhdGE7XG5cblx0LyoqICBTZWUge0BsaW5rIFNwaW5lRnJvbU9wdGlvbnMuYXV0b1VwZGF0ZX0uICovXG5cdGF1dG9VcGRhdGU/OiBib29sZWFuO1xuXG5cdC8qKiAgU2VlIHtAbGluayBTcGluZUZyb21PcHRpb25zLmRhcmtUaW50fS4gKi9cblx0ZGFya1RpbnQ/OiBib29sZWFuO1xuXG5cdC8qKiAgU2VlIHtAbGluayBTcGluZUZyb21PcHRpb25zLmJvdW5kc1Byb3ZpZGVyfS4gKi9cblx0Ym91bmRzUHJvdmlkZXI/OiBTcGluZUJvdW5kc1Byb3ZpZGVyLFxuXG5cdC8qKiBTZWUge0BsaW5rIFNwaW5lRnJvbU9wdGlvbnMudGlja2VyfS4gKi9cblx0dGlja2VyPzogVGlja2VyLFxufVxuXG4vKipcbiAqIEFuaW1hdGlvblN0YXRlTGlzdGVuZXIge0BsaW5rIGh0dHBzOi8vZW4uZXNvdGVyaWNzb2Z0d2FyZS5jb20vc3BpbmUtYXBpLXJlZmVyZW5jZSNBbmltYXRpb25TdGF0ZUxpc3RlbmVyIGV2ZW50c30gZXhwb3NlZCBmb3IgUGl4aS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBTcGluZUV2ZW50cyB7XG5cdGNvbXBsZXRlOiBbdHJhY2tFbnRyeTogVHJhY2tFbnRyeV07XG5cdGRpc3Bvc2U6IFt0cmFja0VudHJ5OiBUcmFja0VudHJ5XTtcblx0ZW5kOiBbdHJhY2tFbnRyeTogVHJhY2tFbnRyeV07XG5cdGV2ZW50OiBbdHJhY2tFbnRyeTogVHJhY2tFbnRyeSwgZXZlbnQ6IEV2ZW50XTtcblx0aW50ZXJydXB0OiBbdHJhY2tFbnRyeTogVHJhY2tFbnRyeV07XG5cdHN0YXJ0OiBbdHJhY2tFbnRyeTogVHJhY2tFbnRyeV07XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQXR0YWNobWVudENhY2hlRGF0YSB7XG5cdGlkOiBzdHJpbmc7XG5cdGNsaXBwZWQ6IGJvb2xlYW47XG5cdHZlcnRpY2VzOiBGbG9hdDMyQXJyYXk7XG5cdHV2czogRmxvYXQzMkFycmF5O1xuXHRpbmRpY2VzOiBudW1iZXJbXTtcblx0Y29sb3I6IENvbG9yO1xuXHRkYXJrQ29sb3I6IENvbG9yO1xuXHRkYXJrVGludDogYm9vbGVhbjtcblx0c2tpcFJlbmRlcjogYm9vbGVhbjtcblx0dGV4dHVyZTogVGV4dHVyZTtcblx0Y2xpcHBlZERhdGE/OiB7XG5cdFx0dmVydGljZXM6IEZsb2F0MzJBcnJheTtcblx0XHR1dnM6IEZsb2F0MzJBcnJheTtcblx0XHRpbmRpY2VzOiBVaW50MTZBcnJheTtcblx0XHR2ZXJ0ZXhDb3VudDogbnVtYmVyO1xuXHRcdGluZGljZXNDb3VudDogbnVtYmVyO1xuXHR9O1xufVxuXG5pbnRlcmZhY2UgU2xvdHNUb0NsaXBwaW5nIHtcblx0c2xvdDogU2xvdCxcblx0bWFzaz86IEdyYXBoaWNzLFxuXHRtYXNrQ29tcHV0ZWQ/OiBib29sZWFuLFxuXHR2ZXJ0aWNlczogQXJyYXk8bnVtYmVyPixcbn07XG5cbmNvbnN0IG1hc2tQb29sID0gbmV3IFBvb2w8R3JhcGhpY3M+KCgpID0+IG5ldyBHcmFwaGljcyk7XG5cbi8qKlxuICogVGhlIGNsYXNzIHRvIGluc3RhbnRpYXRlIGEge0BsaW5rIFNwaW5lfSBnYW1lIG9iamVjdCBpbiBQaXhpLlxuICogVGhlIHN0YXRpYyBtZXRob2Qge0BsaW5rIFNwaW5lLmZyb219IHNob3VsZCBiZSB1c2VkIHRvIGluc3RhbnRpYXRlIGEgU3BpbmUgZ2FtZSBvYmplY3QuXG4gKi9cbmV4cG9ydCBjbGFzcyBTcGluZSBleHRlbmRzIFZpZXdDb250YWluZXIge1xuXHQvLyBQaXhpIHByb3BlcnRpZXNcblx0cHVibGljIGJhdGNoZWQgPSB0cnVlO1xuXHRwdWJsaWMgYnVpbGRJZCA9IDA7XG5cdHB1YmxpYyBvdmVycmlkZSByZWFkb25seSByZW5kZXJQaXBlSWQgPSAnc3BpbmUnO1xuXHRwdWJsaWMgX2RpZFNwaW5lVXBkYXRlID0gZmFsc2U7XG5cblx0cHVibGljIGJlZm9yZVVwZGF0ZVdvcmxkVHJhbnNmb3JtczogKG9iamVjdDogU3BpbmUpID0+IHZvaWQgPSAoKSA9PiB7IC8qKiAqLyB9O1xuXHRwdWJsaWMgYWZ0ZXJVcGRhdGVXb3JsZFRyYW5zZm9ybXM6IChvYmplY3Q6IFNwaW5lKSA9PiB2b2lkID0gKCkgPT4geyAvKiogKi8gfTtcblxuXHQvLyBTcGluZSBwcm9wZXJ0aWVzXG5cdC8qKiBUaGUgc2tlbGV0b24gZm9yIHRoaXMgU3BpbmUgZ2FtZSBvYmplY3QuICovXG5cdHB1YmxpYyBza2VsZXRvbjogU2tlbGV0b247XG5cdC8qKiBUaGUgYW5pbWF0aW9uIHN0YXRlIGZvciB0aGlzIFNwaW5lIGdhbWUgb2JqZWN0LiAqL1xuXHRwdWJsaWMgc3RhdGU6IEFuaW1hdGlvblN0YXRlO1xuXHRwdWJsaWMgc2tlbGV0b25Cb3VuZHM/OiBTa2VsZXRvbkJvdW5kcztcblxuXHRwcml2YXRlIGRhcmtUaW50ID0gZmFsc2U7XG5cdHByaXZhdGUgX2RlYnVnPzogSVNwaW5lRGVidWdSZW5kZXJlciB8IHVuZGVmaW5lZCA9IHVuZGVmaW5lZDtcblxuXHRyZWFkb25seSBfc2xvdHNPYmplY3Q6IFJlY29yZDxzdHJpbmcsIHsgc2xvdDogU2xvdCwgY29udGFpbmVyOiBDb250YWluZXIsIGZvbGxvd0F0dGFjaG1lbnRUaW1lbGluZTogYm9vbGVhbiB9IHwgbnVsbD4gPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuXHRwcml2YXRlIGNsaXBwaW5nU2xvdFRvUGl4aU1hc2tzOiBSZWNvcmQ8c3RyaW5nLCBTbG90c1RvQ2xpcHBpbmc+ID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcblxuXHRwcml2YXRlIGdldFNsb3RGcm9tUmVmIChzbG90UmVmOiBudW1iZXIgfCBzdHJpbmcgfCBTbG90KTogU2xvdCB7XG5cdFx0bGV0IHNsb3Q6IFNsb3QgfCBudWxsO1xuXG5cdFx0aWYgKHR5cGVvZiBzbG90UmVmID09PSAnbnVtYmVyJykgc2xvdCA9IHRoaXMuc2tlbGV0b24uc2xvdHNbc2xvdFJlZl07XG5cdFx0ZWxzZSBpZiAodHlwZW9mIHNsb3RSZWYgPT09ICdzdHJpbmcnKSBzbG90ID0gdGhpcy5za2VsZXRvbi5maW5kU2xvdChzbG90UmVmKTtcblx0XHRlbHNlIHNsb3QgPSBzbG90UmVmO1xuXG5cdFx0aWYgKCFzbG90KSB0aHJvdyBuZXcgRXJyb3IoYE5vIHNsb3QgZm91bmQgd2l0aCB0aGUgZ2l2ZW4gc2xvdCByZWZlcmVuY2U6ICR7c2xvdFJlZn1gKTtcblxuXHRcdHJldHVybiBzbG90O1xuXHR9XG5cblx0cHVibGljIHNwaW5lQXR0YWNobWVudHNEaXJ0eSA9IHRydWU7XG5cdHB1YmxpYyBzcGluZVRleHR1cmVzRGlydHkgPSB0cnVlO1xuXG5cdHByaXZhdGUgX2xhc3RBdHRhY2htZW50czogQXR0YWNobWVudFtdID0gW107XG5cblx0cHJpdmF0ZSBfc3RhdGVDaGFuZ2VkID0gdHJ1ZTtcblx0cHJpdmF0ZSBhdHRhY2htZW50Q2FjaGVEYXRhOiBSZWNvcmQ8c3RyaW5nLCBBdHRhY2htZW50Q2FjaGVEYXRhPltdID0gW107XG5cblx0cHVibGljIGdldCBkZWJ1ZyAoKTogSVNwaW5lRGVidWdSZW5kZXJlciB8IHVuZGVmaW5lZCB7XG5cdFx0cmV0dXJuIHRoaXMuX2RlYnVnO1xuXHR9XG5cblx0LyoqIFBhc3MgYSB7QGxpbmsgU3BpbmVEZWJ1Z1JlbmRlcmVyfSBvciBjcmVhdGUgeW91ciBvd24ge0BsaW5rIElTcGluZURlYnVnUmVuZGVyZXJ9IHRvIHJlbmRlciBib25lcywgbWVzaGVzLCAuLi5cblx0ICogQGV4YW1wbGUgc3BpbmVHTy5kZWJ1ZyA9IG5ldyBTcGluZURlYnVnUmVuZGVyZXIoKTtcblx0ICovXG5cdHB1YmxpYyBzZXQgZGVidWcgKHZhbHVlOiBJU3BpbmVEZWJ1Z1JlbmRlcmVyIHwgdW5kZWZpbmVkKSB7XG5cdFx0aWYgKHRoaXMuX2RlYnVnKSB7XG5cdFx0XHR0aGlzLl9kZWJ1Zy51bnJlZ2lzdGVyU3BpbmUodGhpcyk7XG5cdFx0fVxuXHRcdGlmICh2YWx1ZSkge1xuXHRcdFx0dmFsdWUucmVnaXN0ZXJTcGluZSh0aGlzKTtcblx0XHR9XG5cdFx0dGhpcy5fZGVidWcgPSB2YWx1ZTtcblx0fVxuXG5cdHByaXZhdGUgX2F1dG9VcGRhdGUgPSBmYWxzZTtcblx0cHJpdmF0ZSBfdGlja2VyOiBUaWNrZXIgPSBUaWNrZXIuc2hhcmVkO1xuXG5cdHB1YmxpYyBnZXQgYXV0b1VwZGF0ZSAoKTogYm9vbGVhbiB7XG5cdFx0cmV0dXJuIHRoaXMuX2F1dG9VcGRhdGU7XG5cdH1cblx0LyoqIFdoZW4gYHRydWVgLCB0aGUgU3BpbmUgQW5pbWF0aW9uU3RhdGUgYW5kIHRoZSBTa2VsZXRvbiB3aWxsIGJlIGF1dG9tYXRpY2FsbHkgdXBkYXRlZCB1c2luZyB0aGUge0BsaW5rIHRpY2tlcn0uICovXG5cdHB1YmxpYyBzZXQgYXV0b1VwZGF0ZSAodmFsdWU6IGJvb2xlYW4pIHtcblx0XHRpZiAodmFsdWUgJiYgIXRoaXMuX2F1dG9VcGRhdGUpIHtcblx0XHRcdHRoaXMuX3RpY2tlci5hZGQodGhpcy5pbnRlcm5hbFVwZGF0ZSwgdGhpcyk7XG5cdFx0fSBlbHNlIGlmICghdmFsdWUgJiYgdGhpcy5fYXV0b1VwZGF0ZSkge1xuXHRcdFx0dGhpcy5fdGlja2VyLnJlbW92ZSh0aGlzLmludGVybmFsVXBkYXRlLCB0aGlzKTtcblx0XHR9XG5cblx0XHR0aGlzLl9hdXRvVXBkYXRlID0gdmFsdWU7XG5cdH1cblxuXHQvKiogVGhlIHRpY2tlciB0byB1c2Ugd2hlbiB7QGxpbmsgYXV0b1VwZGF0ZX0gaXMgYHRydWVgLiBEZWZhdWx0cyB0byB7QGxpbmsgVGlja2VyLnNoYXJlZH0uICovXG5cdHB1YmxpYyBnZXQgdGlja2VyICgpOiBUaWNrZXIge1xuXHRcdHJldHVybiB0aGlzLl90aWNrZXI7XG5cdH1cblx0LyoqIFNldHMgdGhlIHRpY2tlciB0byB1c2Ugd2hlbiB7QGxpbmsgYXV0b1VwZGF0ZX0gaXMgYHRydWVgLiBJZiBgYXV0b1VwZGF0ZWAgaXMgYWxyZWFkeSBgdHJ1ZWAsIHRoZSB1cGRhdGUgY2FsbGJhY2sgd2lsbCBiZSBtb3ZlZCBmcm9tIHRoZSBvbGQgdGlja2VyIHRvIHRoZSBuZXcgb25lLiAqL1xuXHRwdWJsaWMgc2V0IHRpY2tlciAodmFsdWU6IFRpY2tlcikge1xuXHRcdHZhbHVlID0gdmFsdWUgPz8gVGlja2VyLnNoYXJlZDtcblx0XHRpZiAodGhpcy5fdGlja2VyID09PSB2YWx1ZSkgcmV0dXJuO1xuXG5cdFx0aWYgKHRoaXMuX2F1dG9VcGRhdGUpIHtcblx0XHRcdHRoaXMuX3RpY2tlci5yZW1vdmUodGhpcy5pbnRlcm5hbFVwZGF0ZSwgdGhpcyk7XG5cdFx0XHR2YWx1ZS5hZGQodGhpcy5pbnRlcm5hbFVwZGF0ZSwgdGhpcyk7XG5cdFx0fVxuXG5cdFx0dGhpcy5fdGlja2VyID0gdmFsdWU7XG5cdH1cblxuXHRwcml2YXRlIF9ib3VuZHNQcm92aWRlcj86IFNwaW5lQm91bmRzUHJvdmlkZXI7XG5cdC8qKiBUaGUgYm91bmRzIHByb3ZpZGVyIHRvIHVzZS4gSWYgdW5kZWZpbmVkIHRoZSBib3VuZHMgd2lsbCBiZSBkeW5hbWljLCBjYWxjdWxhdGVkIHdoZW4gcmVxdWVzdGVkIGFuZCBiYXNlZCBvbiB0aGUgY3VycmVudCBmcmFtZS4gKi9cblx0cHVibGljIGdldCBib3VuZHNQcm92aWRlciAoKTogU3BpbmVCb3VuZHNQcm92aWRlciB8IHVuZGVmaW5lZCB7XG5cdFx0cmV0dXJuIHRoaXMuX2JvdW5kc1Byb3ZpZGVyO1xuXHR9XG5cdHB1YmxpYyBzZXQgYm91bmRzUHJvdmlkZXIgKHZhbHVlOiBTcGluZUJvdW5kc1Byb3ZpZGVyIHwgdW5kZWZpbmVkKSB7XG5cdFx0dGhpcy5fYm91bmRzUHJvdmlkZXIgPSB2YWx1ZTtcblx0XHRpZiAodmFsdWUpIHtcblx0XHRcdHRoaXMuX2JvdW5kc0RpcnR5ID0gZmFsc2U7XG5cdFx0fVxuXHRcdHRoaXMudXBkYXRlQm91bmRzKCk7XG5cdH1cblxuXHRwcml2YXRlIGhhc05ldmVyVXBkYXRlZCA9IHRydWU7XG5cdGNvbnN0cnVjdG9yIChvcHRpb25zOiBTcGluZU9wdGlvbnMgfCBTa2VsZXRvbkRhdGEpIHtcblx0XHRpZiAob3B0aW9ucyBpbnN0YW5jZW9mIFNrZWxldG9uRGF0YSkge1xuXHRcdFx0b3B0aW9ucyA9IHtcblx0XHRcdFx0c2tlbGV0b25EYXRhOiBvcHRpb25zLFxuXHRcdFx0fTtcblx0XHR9XG5cblx0XHRzdXBlcih7fSk7XG5cblx0XHR0aGlzLmFsbG93Q2hpbGRyZW4gPSB0cnVlO1xuXG5cdFx0Y29uc3Qgc2tlbGV0b25EYXRhID0gb3B0aW9ucyBpbnN0YW5jZW9mIFNrZWxldG9uRGF0YSA/IG9wdGlvbnMgOiBvcHRpb25zLnNrZWxldG9uRGF0YTtcblxuXHRcdHRoaXMuc2tlbGV0b24gPSBuZXcgU2tlbGV0b24oc2tlbGV0b25EYXRhKTtcblx0XHR0aGlzLnN0YXRlID0gbmV3IEFuaW1hdGlvblN0YXRlKG5ldyBBbmltYXRpb25TdGF0ZURhdGEoc2tlbGV0b25EYXRhKSk7XG5cdFx0aWYgKG9wdGlvbnM/LnRpY2tlcikgdGhpcy5fdGlja2VyID0gb3B0aW9ucy50aWNrZXI7XG5cdFx0dGhpcy5hdXRvVXBkYXRlID0gb3B0aW9ucz8uYXV0b1VwZGF0ZSA/PyB0cnVlO1xuXG5cdFx0Ly8gZGFyayB0aW50IGNhbiBiZSBlbmFibGVkIGJ5IG9wdGlvbnMsIG90aGVyd2lzZSBpcyBlbmFibGUgaWYgYXQgbGVhc3Qgb25lIHNsb3QgaGFzIHRpbnQgYmxhY2tcblx0XHR0aGlzLmRhcmtUaW50ID0gb3B0aW9ucz8uZGFya1RpbnQgPT09IHVuZGVmaW5lZFxuXHRcdFx0PyB0aGlzLnNrZWxldG9uLnNsb3RzLnNvbWUoc2xvdCA9PiAhIXNsb3QuZGF0YS5kYXJrQ29sb3IpXG5cdFx0XHQ6IG9wdGlvbnM/LmRhcmtUaW50O1xuXG5cdFx0Y29uc3Qgc2xvdHMgPSB0aGlzLnNrZWxldG9uLnNsb3RzO1xuXG5cdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCBzbG90cy5sZW5ndGg7IGkrKykge1xuXHRcdFx0dGhpcy5hdHRhY2htZW50Q2FjaGVEYXRhW2ldID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcblx0XHR9XG5cblx0XHR0aGlzLl9ib3VuZHNQcm92aWRlciA9IG9wdGlvbnMuYm91bmRzUHJvdmlkZXI7XG5cdH1cblxuXHQvKiogSWYge0BsaW5rIFNwaW5lLmF1dG9VcGRhdGV9IGlzIGBmYWxzZWAsIHRoaXMgbWV0aG9kIGFsbG93cyB0byB1cGRhdGUgdGhlIEFuaW1hdGlvblN0YXRlIGFuZCB0aGUgU2tlbGV0b24gd2l0aCB0aGUgZ2l2ZW4gZGVsdGEuICovXG5cdHB1YmxpYyB1cGRhdGUgKGR0OiBudW1iZXIpOiB2b2lkIHtcblx0XHR0aGlzLmludGVybmFsVXBkYXRlKDAsIGR0KTtcblx0fVxuXG5cdHByb3RlY3RlZCBpbnRlcm5hbFVwZGF0ZSAoX2RlbHRhRnJhbWU6IGFueSwgZGVsdGFTZWNvbmRzPzogbnVtYmVyKTogdm9pZCB7XG5cdFx0dGhpcy5fdXBkYXRlQW5kQXBwbHlTdGF0ZShkZWx0YVNlY29uZHMgPz8gdGhpcy5fdGlja2VyLmRlbHRhTVMgLyAxMDAwKTtcblx0fVxuXG5cdG92ZXJyaWRlIGdldCBib3VuZHMgKCkge1xuXHRcdGlmICh0aGlzLl9ib3VuZHNEaXJ0eSkge1xuXHRcdFx0dGhpcy51cGRhdGVCb3VuZHMoKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gdGhpcy5fYm91bmRzO1xuXHR9XG5cblx0LyoqXG5cdCAqIFNldCB0aGUgcG9zaXRpb24gb2YgdGhlIGJvbmUgZ2l2ZW4gaW4gaW5wdXQgdGhyb3VnaCBhIHtAbGluayBJUG9pbnREYXRhfS5cblx0ICogQHBhcmFtIGJvbmU6IHRoZSBib25lIG5hbWUgb3IgdGhlIGJvbmUgaW5zdGFuY2UgdG8gc2V0IHRoZSBwb3NpdGlvblxuXHQgKiBAcGFyYW0gb3V0UG9zOiB0aGUgbmV3IHBvc2l0aW9uIG9mIHRoZSBib25lLlxuXHQgKiBAdGhyb3dzIHtFcnJvcn06IGlmIHRoZSBnaXZlbiBib25lIGlzIG5vdCBmb3VuZCBpbiB0aGUgc2tlbGV0b24sIGFuIGVycm9yIGlzIHRocm93blxuXHQgKi9cblx0cHVibGljIHNldEJvbmVQb3NpdGlvbiAoYm9uZTogc3RyaW5nIHwgQm9uZSwgcG9zaXRpb246IFBvaW50RGF0YSk6IHZvaWQge1xuXHRcdGNvbnN0IGJvbmVBdXggPSBib25lO1xuXG5cdFx0aWYgKHR5cGVvZiBib25lID09PSAnc3RyaW5nJykge1xuXHRcdFx0Ym9uZSA9IHRoaXMuc2tlbGV0b24uZmluZEJvbmUoYm9uZSkgYXMgQm9uZTtcblx0XHR9XG5cblx0XHRpZiAoIWJvbmUpIHRocm93IEVycm9yKGBDYW50IHNldCBib25lIHBvc2l0aW9uLCBib25lICR7U3RyaW5nKGJvbmVBdXgpfSBub3QgZm91bmRgKTtcblx0XHR2ZWN0b3JBdXguc2V0KHBvc2l0aW9uLngsIHBvc2l0aW9uLnkpO1xuXG5cdFx0aWYgKGJvbmUucGFyZW50KSB7XG5cdFx0XHRjb25zdCBhdXggPSBib25lLnBhcmVudC53b3JsZFRvTG9jYWwodmVjdG9yQXV4KTtcblxuXHRcdFx0Ym9uZS54ID0gYXV4Lng7XG5cdFx0XHRib25lLnkgPSAtYXV4Lnk7XG5cdFx0fVxuXHRcdGVsc2Uge1xuXHRcdFx0Ym9uZS54ID0gdmVjdG9yQXV4Lng7XG5cdFx0XHRib25lLnkgPSB2ZWN0b3JBdXgueTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogUmV0dXJuIHRoZSBwb3NpdGlvbiBvZiB0aGUgYm9uZSBnaXZlbiBpbiBpbnB1dCBpbnRvIGFuIHtAbGluayBJUG9pbnREYXRhfS5cblx0ICogQHBhcmFtIGJvbmU6IHRoZSBib25lIG5hbWUgb3IgdGhlIGJvbmUgaW5zdGFuY2UgdG8gZ2V0IHRoZSBwb3NpdGlvbiBmcm9tXG5cdCAqIEBwYXJhbSBvdXRQb3M6IGFuIG9wdGlvbmFsIHtAbGluayBJUG9pbnREYXRhfSB0byB1c2UgdG8gcmV0dXJuIHRoZSBib25lIHBvc2l0aW9uLCByYXRoZXJuIHRoYW4gaW5zdGFudGlhdGluZyBhIG5ldyBvYmplY3QuXG5cdCAqIEByZXR1cm5zIHtJUG9pbnREYXRhIHwgdW5kZWZpbmVkfTogdGhlIHBvc2l0aW9uIG9mIHRoZSBib25lLCBvciB1bmRlZmluZWQgaWYgbm8gbWF0Y2hpbmcgYm9uZSBpcyBmb3VuZCBpbiB0aGUgc2tlbGV0b25cblx0ICovXG5cdHB1YmxpYyBnZXRCb25lUG9zaXRpb24gKGJvbmU6IHN0cmluZyB8IEJvbmUsIG91dFBvcz86IFBvaW50RGF0YSk6IFBvaW50RGF0YSB8IHVuZGVmaW5lZCB7XG5cdFx0Y29uc3QgYm9uZUF1eCA9IGJvbmU7XG5cblx0XHRpZiAodHlwZW9mIGJvbmUgPT09ICdzdHJpbmcnKSB7XG5cdFx0XHRib25lID0gdGhpcy5za2VsZXRvbi5maW5kQm9uZShib25lKSBhcyBCb25lO1xuXHRcdH1cblxuXHRcdGlmICghYm9uZSkge1xuXHRcdFx0Y29uc29sZS5lcnJvcihgQ2FudCBzZXQgYm9uZSBwb3NpdGlvbiEgQm9uZSAke1N0cmluZyhib25lQXV4KX0gbm90IGZvdW5kYCk7XG5cblx0XHRcdHJldHVybiBvdXRQb3M7XG5cdFx0fVxuXG5cdFx0aWYgKCFvdXRQb3MpIHtcblx0XHRcdG91dFBvcyA9IHsgeDogMCwgeTogMCB9O1xuXHRcdH1cblxuXHRcdG91dFBvcy54ID0gYm9uZS53b3JsZFg7XG5cdFx0b3V0UG9zLnkgPSBib25lLndvcmxkWTtcblxuXHRcdHJldHVybiBvdXRQb3M7XG5cdH1cblxuXHQvKipcblx0ICogQWR2YW5jZSB0aGUgc3RhdGUgYW5kIHNrZWxldG9uIGJ5IHRoZSBnaXZlbiB0aW1lLCB0aGVuIHVwZGF0ZSBzbG90IG9iamVjdHMgdG9vLlxuXHQgKiBUaGUgY29udGFpbmVyIHRyYW5zZm9ybSBpcyBub3QgdXBkYXRlZC5cblx0ICpcblx0ICogQHBhcmFtIHRpbWUgdGhlIHRpbWUgYXQgd2hpY2ggdG8gc2V0IHRoZSBzdGF0ZVxuXHQgKi9cblx0cHJpdmF0ZSBfdXBkYXRlQW5kQXBwbHlTdGF0ZSAodGltZTogbnVtYmVyKSB7XG5cdFx0dGhpcy5oYXNOZXZlclVwZGF0ZWQgPSBmYWxzZTtcblxuXHRcdHRoaXMuc3RhdGUudXBkYXRlKHRpbWUpO1xuXHRcdHRoaXMuc2tlbGV0b24udXBkYXRlKHRpbWUpO1xuXG5cdFx0Y29uc3QgeyBza2VsZXRvbiB9ID0gdGhpcztcblxuXHRcdHRoaXMuc3RhdGUuYXBwbHkoc2tlbGV0b24pO1xuXG5cdFx0dGhpcy5iZWZvcmVVcGRhdGVXb3JsZFRyYW5zZm9ybXModGhpcyk7XG5cdFx0c2tlbGV0b24udXBkYXRlV29ybGRUcmFuc2Zvcm0oUGh5c2ljcy51cGRhdGUpO1xuXHRcdHRoaXMuYWZ0ZXJVcGRhdGVXb3JsZFRyYW5zZm9ybXModGhpcyk7XG5cblx0XHR0aGlzLnVwZGF0ZVNsb3RPYmplY3RzKCk7XG5cblx0XHR0aGlzLl9zdGF0ZUNoYW5nZWQgPSB0cnVlO1xuXG5cdFx0dGhpcy5vblZpZXdVcGRhdGUoKTtcblx0fVxuXG5cdC8qKlxuXHQgKiAtIHZhbGlkYXRlcyB0aGUgYXR0YWNobWVudHMgLSB0byBmbGFnIGlmIHRoZSBhdHRhY2htZW50cyBoYXZlIGNoYW5nZWQgdGhpcyBzdGF0ZVxuXHQgKiAtIHRyYW5zZm9ybXMgdGhlIGF0dGFjaG1lbnRzIC0gdG8gdXBkYXRlIHRoZSB2ZXJ0aWNlcyBvZiB0aGUgYXR0YWNobWVudHMgYmFzZWQgb24gdGhlIG5ldyBwb3NpdGlvbnNcblx0ICogQGludGVybmFsXG5cdCAqL1xuXHRfdmFsaWRhdGVBbmRUcmFuc2Zvcm1BdHRhY2htZW50cyAoKSB7XG5cdFx0aWYgKCF0aGlzLl9zdGF0ZUNoYW5nZWQpIHJldHVybjtcblx0XHR0aGlzLl9zdGF0ZUNoYW5nZWQgPSBmYWxzZTtcblxuXHRcdHRoaXMudmFsaWRhdGVBdHRhY2htZW50cygpO1xuXG5cdFx0dGhpcy50cmFuc2Zvcm1BdHRhY2htZW50cygpO1xuXHR9XG5cblx0cHJpdmF0ZSB2YWxpZGF0ZUF0dGFjaG1lbnRzICgpIHtcblxuXHRcdGNvbnN0IGN1cnJlbnREcmF3T3JkZXIgPSB0aGlzLnNrZWxldG9uLmRyYXdPcmRlcjtcblxuXHRcdGNvbnN0IGxhc3RBdHRhY2htZW50cyA9IHRoaXMuX2xhc3RBdHRhY2htZW50cztcblxuXHRcdGxldCBpbmRleCA9IDA7XG5cblx0XHRsZXQgc3BpbmVBdHRhY2htZW50c0RpcnR5ID0gZmFsc2U7XG5cblx0XHRmb3IgKGxldCBpID0gMDsgaSA8IGN1cnJlbnREcmF3T3JkZXIubGVuZ3RoOyBpKyspIHtcblx0XHRcdGNvbnN0IHNsb3QgPSBjdXJyZW50RHJhd09yZGVyW2ldO1xuXHRcdFx0Y29uc3QgYXR0YWNobWVudCA9IHNsb3QuZ2V0QXR0YWNobWVudCgpO1xuXG5cdFx0XHRpZiAoYXR0YWNobWVudCkge1xuXHRcdFx0XHRpZiAoYXR0YWNobWVudCAhPT0gbGFzdEF0dGFjaG1lbnRzW2luZGV4XSkge1xuXHRcdFx0XHRcdHNwaW5lQXR0YWNobWVudHNEaXJ0eSA9IHRydWU7XG5cdFx0XHRcdFx0bGFzdEF0dGFjaG1lbnRzW2luZGV4XSA9IGF0dGFjaG1lbnQ7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRpbmRleCsrO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGlmIChpbmRleCAhPT0gbGFzdEF0dGFjaG1lbnRzLmxlbmd0aCkge1xuXHRcdFx0c3BpbmVBdHRhY2htZW50c0RpcnR5ID0gdHJ1ZTtcblx0XHRcdGxhc3RBdHRhY2htZW50cy5sZW5ndGggPSBpbmRleDtcblx0XHR9XG5cblx0XHR0aGlzLnNwaW5lQXR0YWNobWVudHNEaXJ0eSB8fD0gc3BpbmVBdHRhY2htZW50c0RpcnR5O1xuXHR9XG5cblx0cHJpdmF0ZSBjdXJyZW50Q2xpcHBpbmdTbG90OiBTbG90c1RvQ2xpcHBpbmcgfCB1bmRlZmluZWQ7XG5cdHByaXZhdGUgdXBkYXRlQW5kU2V0UGl4aU1hc2sgKHNsb3Q6IFNsb3QsIGxhc3Q6IGJvb2xlYW4pIHtcblx0XHQvLyBhc3NpZ24vY3JlYXRlIHRoZSBjdXJyZW50Q2xpcHBpbmdTbG90XG5cdFx0Y29uc3QgYXR0YWNobWVudCA9IHNsb3QuYXR0YWNobWVudDtcblx0XHRpZiAoYXR0YWNobWVudCAmJiBhdHRhY2htZW50IGluc3RhbmNlb2YgQ2xpcHBpbmdBdHRhY2htZW50KSB7XG5cdFx0XHRjb25zdCBjbGlwID0gKHRoaXMuY2xpcHBpbmdTbG90VG9QaXhpTWFza3Nbc2xvdC5kYXRhLm5hbWVdIHx8PSB7IHNsb3QsIHZlcnRpY2VzOiBuZXcgQXJyYXk8bnVtYmVyPigpIH0pO1xuXHRcdFx0Y2xpcC5tYXNrQ29tcHV0ZWQgPSBmYWxzZTtcblx0XHRcdHRoaXMuY3VycmVudENsaXBwaW5nU2xvdCA9IGNsaXA7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0Ly8gYXNzaWduIHRoZSBjdXJyZW50Q2xpcHBpbmdTbG90IG1hc2sgdG8gdGhlIHNsb3Qgb2JqZWN0XG5cdFx0bGV0IGN1cnJlbnRDbGlwcGluZ1Nsb3QgPSB0aGlzLmN1cnJlbnRDbGlwcGluZ1Nsb3Q7XG5cdFx0bGV0IHNsb3RPYmplY3QgPSB0aGlzLl9zbG90c09iamVjdFtzbG90LmRhdGEubmFtZV07XG5cdFx0aWYgKGN1cnJlbnRDbGlwcGluZ1Nsb3QgJiYgc2xvdE9iamVjdCkge1xuXHRcdFx0Ly8gY3JlYXRlIHRoZSBwaXhpIG1hc2ssIG9ubHkgdGhlIGZpcnN0IHRpbWUgYW5kIGlmIHRoZSBjbGlwcGVkIHNsb3QgaXMgdGhlIGZpcnN0IG9uZSBjbGlwcGVkIGJ5IHRoaXMgY3VycmVudENsaXBwaW5nU2xvdFxuXHRcdFx0bGV0IG1hc2sgPSBjdXJyZW50Q2xpcHBpbmdTbG90Lm1hc2s7XG5cdFx0XHRpZiAoIW1hc2spIHtcblx0XHRcdFx0bWFzayA9IG1hc2tQb29sLm9idGFpbigpO1xuXHRcdFx0XHRjdXJyZW50Q2xpcHBpbmdTbG90Lm1hc2sgPSBtYXNrO1xuXHRcdFx0XHR0aGlzLmFkZENoaWxkKG1hc2spO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBjb21wdXRlIHRoZSBwaXhpIG1hc2sgcG9seWdvbiwgaWYgdGhlIGNsaXBwZWQgc2xvdCBpcyB0aGUgZmlyc3Qgb25lIGNsaXBwZWQgYnkgdGhpcyBjdXJyZW50Q2xpcHBpbmdTbG90XG5cdFx0XHRpZiAoIWN1cnJlbnRDbGlwcGluZ1Nsb3QubWFza0NvbXB1dGVkKSB7XG5cdFx0XHRcdGxldCBzbG90Q2xpcHBpbmcgPSBjdXJyZW50Q2xpcHBpbmdTbG90LnNsb3Q7XG5cdFx0XHRcdGxldCBjbGlwcGluZ0F0dGFjaG1lbnQgPSBzbG90Q2xpcHBpbmcuYXR0YWNobWVudCBhcyBDbGlwcGluZ0F0dGFjaG1lbnQ7XG5cdFx0XHRcdGN1cnJlbnRDbGlwcGluZ1Nsb3QubWFza0NvbXB1dGVkID0gdHJ1ZTtcblx0XHRcdFx0Y29uc3Qgd29ybGRWZXJ0aWNlc0xlbmd0aCA9IGNsaXBwaW5nQXR0YWNobWVudC53b3JsZFZlcnRpY2VzTGVuZ3RoO1xuXHRcdFx0XHRjb25zdCB2ZXJ0aWNlcyA9IGN1cnJlbnRDbGlwcGluZ1Nsb3QudmVydGljZXM7XG5cdFx0XHRcdGNsaXBwaW5nQXR0YWNobWVudC5jb21wdXRlV29ybGRWZXJ0aWNlcyhzbG90Q2xpcHBpbmcsIDAsIHdvcmxkVmVydGljZXNMZW5ndGgsIHZlcnRpY2VzLCAwLCAyKTtcblx0XHRcdFx0bWFzay5jbGVhcigpLnBvbHkodmVydGljZXMpLnN0cm9rZSh7IHdpZHRoOiAwIH0pLmZpbGwoeyBhbHBoYTogLjI1IH0pO1xuXHRcdFx0fVxuXHRcdFx0c2xvdE9iamVjdC5jb250YWluZXIubWFzayA9IG1hc2s7XG5cdFx0fSBlbHNlIGlmIChzbG90T2JqZWN0Py5jb250YWluZXIubWFzaykge1xuXHRcdFx0Ly8gcmVtb3ZlIHRoZSBtYXNrLCBpZiBzbG90IG9iamVjdCBoYXMgYSBtYXNrLCBidXQgY3VycmVudENsaXBwaW5nU2xvdCBpcyB1bmRlZmluZWRcblx0XHRcdHNsb3RPYmplY3QuY29udGFpbmVyLm1hc2sgPSBudWxsO1xuXHRcdH1cblxuXHRcdC8vIGlmIGN1cnJlbnQgc2xvdCBpcyB0aGUgZW5kaW5nIG9uZSBvZiB0aGUgY3VycmVudENsaXBwaW5nU2xvdCBtYXNrLCBzZXQgY3VycmVudENsaXBwaW5nU2xvdCB0byB1bmRlZmluZWRcblx0XHRpZiAoY3VycmVudENsaXBwaW5nU2xvdCAmJiAoY3VycmVudENsaXBwaW5nU2xvdC5zbG90LmF0dGFjaG1lbnQgYXMgQ2xpcHBpbmdBdHRhY2htZW50KS5lbmRTbG90ID09IHNsb3QuZGF0YSkge1xuXHRcdFx0dGhpcy5jdXJyZW50Q2xpcHBpbmdTbG90ID0gdW5kZWZpbmVkO1xuXHRcdH1cblxuXHRcdC8vIGNsZWFuIHVwIHVudXNlZCBtYXNrc1xuXHRcdGlmIChsYXN0KSB7XG5cdFx0XHRmb3IgKGNvbnN0IGtleSBpbiB0aGlzLmNsaXBwaW5nU2xvdFRvUGl4aU1hc2tzKSB7XG5cdFx0XHRcdGNvbnN0IGNsaXBwaW5nU2xvdFRvUGl4aU1hc2sgPSB0aGlzLmNsaXBwaW5nU2xvdFRvUGl4aU1hc2tzW2tleV07XG5cdFx0XHRcdGlmICgoIShjbGlwcGluZ1Nsb3RUb1BpeGlNYXNrLnNsb3QuYXR0YWNobWVudCBpbnN0YW5jZW9mIENsaXBwaW5nQXR0YWNobWVudCkgfHwgIWNsaXBwaW5nU2xvdFRvUGl4aU1hc2subWFza0NvbXB1dGVkKSAmJiBjbGlwcGluZ1Nsb3RUb1BpeGlNYXNrLm1hc2spIHtcblx0XHRcdFx0XHR0aGlzLnJlbW92ZUNoaWxkKGNsaXBwaW5nU2xvdFRvUGl4aU1hc2subWFzayk7XG5cdFx0XHRcdFx0bWFza1Bvb2wuZnJlZShjbGlwcGluZ1Nsb3RUb1BpeGlNYXNrLm1hc2spO1xuXHRcdFx0XHRcdGNsaXBwaW5nU2xvdFRvUGl4aU1hc2subWFzayA9IHVuZGVmaW5lZDtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0dGhpcy5jdXJyZW50Q2xpcHBpbmdTbG90ID0gdW5kZWZpbmVkO1xuXHRcdH1cblx0fVxuXG5cdHByaXZhdGUgdHJhbnNmb3JtQXR0YWNobWVudHMgKCkge1xuXHRcdGNvbnN0IGN1cnJlbnREcmF3T3JkZXIgPSB0aGlzLnNrZWxldG9uLmRyYXdPcmRlcjtcblxuXHRcdGZvciAobGV0IGkgPSAwOyBpIDwgY3VycmVudERyYXdPcmRlci5sZW5ndGg7IGkrKykge1xuXHRcdFx0Y29uc3Qgc2xvdCA9IGN1cnJlbnREcmF3T3JkZXJbaV07XG5cblx0XHRcdHRoaXMudXBkYXRlQW5kU2V0UGl4aU1hc2soc2xvdCwgaSA9PT0gY3VycmVudERyYXdPcmRlci5sZW5ndGggLSAxKTtcblxuXHRcdFx0Y29uc3QgYXR0YWNobWVudCA9IHNsb3QuZ2V0QXR0YWNobWVudCgpO1xuXG5cdFx0XHRpZiAoYXR0YWNobWVudCkge1xuXHRcdFx0XHRpZiAoYXR0YWNobWVudCBpbnN0YW5jZW9mIE1lc2hBdHRhY2htZW50IHx8IGF0dGFjaG1lbnQgaW5zdGFuY2VvZiBSZWdpb25BdHRhY2htZW50KSB7XG5cdFx0XHRcdFx0Y29uc3QgY2FjaGVEYXRhID0gdGhpcy5fZ2V0Q2FjaGVkRGF0YShzbG90LCBhdHRhY2htZW50KTtcblxuXHRcdFx0XHRcdGlmIChhdHRhY2htZW50IGluc3RhbmNlb2YgUmVnaW9uQXR0YWNobWVudCkge1xuXHRcdFx0XHRcdFx0YXR0YWNobWVudC5jb21wdXRlV29ybGRWZXJ0aWNlcyhzbG90LCBjYWNoZURhdGEudmVydGljZXMsIDAsIDIpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRlbHNlIHtcblx0XHRcdFx0XHRcdGF0dGFjaG1lbnQuY29tcHV0ZVdvcmxkVmVydGljZXMoXG5cdFx0XHRcdFx0XHRcdHNsb3QsXG5cdFx0XHRcdFx0XHRcdDAsXG5cdFx0XHRcdFx0XHRcdGF0dGFjaG1lbnQud29ybGRWZXJ0aWNlc0xlbmd0aCxcblx0XHRcdFx0XHRcdFx0Y2FjaGVEYXRhLnZlcnRpY2VzLFxuXHRcdFx0XHRcdFx0XHQwLFxuXHRcdFx0XHRcdFx0XHQyLFxuXHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHQvLyBzZXF1ZW5jZXMgdXZzIGFyZSBrbm93biBvbmx5IGFmdGVyIGNvbXB1dGVXb3JsZFZlcnRpY2VzIGlzIGludm9rZWRcblx0XHRcdFx0XHRpZiAoY2FjaGVEYXRhLnV2cy5sZW5ndGggPCBhdHRhY2htZW50LnV2cy5sZW5ndGgpIHtcblx0XHRcdFx0XHRcdGNhY2hlRGF0YS51dnMgPSBuZXcgRmxvYXQzMkFycmF5KGF0dGFjaG1lbnQudXZzLmxlbmd0aCk7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0Ly8gbmVlZCB0byBjb3B5IGJlY2F1c2UgYXR0YWNobWVudHMgdXZzIGFyZSBzaGFyZWQgYW1vbmcgc2tlbGV0b25zIHVzaW5nIHRoZSBzYW1lIGF0bGFzXG5cdFx0XHRcdFx0ZmFzdENvcHkoKGF0dGFjaG1lbnQudXZzIGFzIEZsb2F0MzJBcnJheSkuYnVmZmVyLCBjYWNoZURhdGEudXZzLmJ1ZmZlcik7XG5cblx0XHRcdFx0XHRjb25zdCBza2VsZXRvbiA9IHNsb3QuYm9uZS5za2VsZXRvbjtcblx0XHRcdFx0XHRjb25zdCBza2VsZXRvbkNvbG9yID0gc2tlbGV0b24uY29sb3I7XG5cdFx0XHRcdFx0Y29uc3Qgc2xvdENvbG9yID0gc2xvdC5jb2xvcjtcblx0XHRcdFx0XHRjb25zdCBhdHRhY2htZW50Q29sb3IgPSBhdHRhY2htZW50LmNvbG9yO1xuXHRcdFx0XHRcdGNvbnN0IGFscGhhID0gc2tlbGV0b25Db2xvci5hICogc2xvdENvbG9yLmEgKiBhdHRhY2htZW50Q29sb3IuYTtcblxuXHRcdFx0XHRcdGNhY2hlRGF0YS5jb2xvci5zZXQoXG5cdFx0XHRcdFx0XHRza2VsZXRvbkNvbG9yLnIgKiBzbG90Q29sb3IuciAqIGF0dGFjaG1lbnRDb2xvci5yLFxuXHRcdFx0XHRcdFx0c2tlbGV0b25Db2xvci5nICogc2xvdENvbG9yLmcgKiBhdHRhY2htZW50Q29sb3IuZyxcblx0XHRcdFx0XHRcdHNrZWxldG9uQ29sb3IuYiAqIHNsb3RDb2xvci5iICogYXR0YWNobWVudENvbG9yLmIsXG5cdFx0XHRcdFx0XHRhbHBoYSxcblx0XHRcdFx0XHQpO1xuXG5cdFx0XHRcdFx0aWYgKHRoaXMuYWxwaGEgPT09IDAgfHwgYWxwaGEgPT09IDApIHtcblx0XHRcdFx0XHRcdGlmICghY2FjaGVEYXRhLnNraXBSZW5kZXIpIHRoaXMuc3BpbmVBdHRhY2htZW50c0RpcnR5ID0gdHJ1ZTtcblx0XHRcdFx0XHRcdGNhY2hlRGF0YS5za2lwUmVuZGVyID0gdHJ1ZTtcblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0aWYgKGNhY2hlRGF0YS5za2lwUmVuZGVyKSB0aGlzLnNwaW5lQXR0YWNobWVudHNEaXJ0eSA9IHRydWU7XG5cdFx0XHRcdFx0XHRjYWNoZURhdGEuc2tpcFJlbmRlciA9IGNhY2hlRGF0YS5jbGlwcGVkID0gZmFsc2U7XG5cblx0XHRcdFx0XHRcdGlmIChzbG90LmRhcmtDb2xvcikge1xuXHRcdFx0XHRcdFx0XHRjYWNoZURhdGEuZGFya0NvbG9yLnNldEZyb21Db2xvcihzbG90LmRhcmtDb2xvcik7XG5cdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdGNvbnN0IHRleHR1cmUgPSBhdHRhY2htZW50LnJlZ2lvbj8udGV4dHVyZS50ZXh0dXJlIHx8IFRleHR1cmUuRU1QVFk7XG5cblx0XHRcdFx0XHRcdGlmIChjYWNoZURhdGEudGV4dHVyZSAhPT0gdGV4dHVyZSkge1xuXHRcdFx0XHRcdFx0XHRjYWNoZURhdGEudGV4dHVyZSA9IHRleHR1cmU7XG5cdFx0XHRcdFx0XHRcdHRoaXMuc3BpbmVUZXh0dXJlc0RpcnR5ID0gdHJ1ZTtcblx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0aWYgKGNsaXBwZXIuaXNDbGlwcGluZygpKSB7XG5cdFx0XHRcdFx0XHRcdHRoaXMudXBkYXRlQ2xpcHBpbmdEYXRhKGNhY2hlRGF0YSk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdH1cblx0XHRcdFx0ZWxzZSBpZiAoYXR0YWNobWVudCBpbnN0YW5jZW9mIENsaXBwaW5nQXR0YWNobWVudCkge1xuXHRcdFx0XHRcdGNsaXBwZXIuY2xpcFN0YXJ0KHNsb3QsIGF0dGFjaG1lbnQpO1xuXHRcdFx0XHRcdGNvbnRpbnVlO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHRjbGlwcGVyLmNsaXBFbmRXaXRoU2xvdChzbG90KTtcblx0XHR9XG5cdFx0Y2xpcHBlci5jbGlwRW5kKCk7XG5cdH1cblxuXHRwcml2YXRlIHVwZGF0ZUNsaXBwaW5nRGF0YSAoY2FjaGVEYXRhOiBBdHRhY2htZW50Q2FjaGVEYXRhKSB7XG5cdFx0Y2FjaGVEYXRhLmNsaXBwZWQgPSB0cnVlO1xuXG5cdFx0Y2xpcHBlci5jbGlwVHJpYW5nbGVzVW5wYWNrZWQoXG5cdFx0XHRjYWNoZURhdGEudmVydGljZXMsXG5cdFx0XHRjYWNoZURhdGEuaW5kaWNlcyxcblx0XHRcdGNhY2hlRGF0YS5pbmRpY2VzLmxlbmd0aCxcblx0XHRcdGNhY2hlRGF0YS51dnMsXG5cdFx0KTtcblxuXHRcdGNvbnN0IHsgY2xpcHBlZFZlcnRpY2VzLCBjbGlwcGVkVVZzLCBjbGlwcGVkVHJpYW5nbGVzIH0gPSBjbGlwcGVyO1xuXG5cdFx0Y29uc3QgdmVydGljZXNDb3VudCA9IGNsaXBwZWRWZXJ0aWNlcy5sZW5ndGggLyAyO1xuXHRcdGNvbnN0IGluZGljZXNDb3VudCA9IGNsaXBwZWRUcmlhbmdsZXMubGVuZ3RoO1xuXG5cdFx0aWYgKCFjYWNoZURhdGEuY2xpcHBlZERhdGEpIHtcblx0XHRcdGNhY2hlRGF0YS5jbGlwcGVkRGF0YSA9IHtcblx0XHRcdFx0dmVydGljZXM6IG5ldyBGbG9hdDMyQXJyYXkodmVydGljZXNDb3VudCAqIDIpLFxuXHRcdFx0XHR1dnM6IG5ldyBGbG9hdDMyQXJyYXkodmVydGljZXNDb3VudCAqIDIpLFxuXHRcdFx0XHR2ZXJ0ZXhDb3VudDogdmVydGljZXNDb3VudCxcblx0XHRcdFx0aW5kaWNlczogbmV3IFVpbnQxNkFycmF5KGluZGljZXNDb3VudCksXG5cdFx0XHRcdGluZGljZXNDb3VudCxcblx0XHRcdH07XG5cblx0XHRcdHRoaXMuc3BpbmVBdHRhY2htZW50c0RpcnR5ID0gdHJ1ZTtcblx0XHR9XG5cblx0XHRjb25zdCBjbGlwcGVkRGF0YSA9IGNhY2hlRGF0YS5jbGlwcGVkRGF0YTtcblxuXHRcdGNvbnN0IHNpemVDaGFuZ2UgPSBjbGlwcGVkRGF0YS52ZXJ0ZXhDb3VudCAhPT0gdmVydGljZXNDb3VudCB8fCBpbmRpY2VzQ291bnQgIT09IGNsaXBwZWREYXRhLmluZGljZXNDb3VudDtcblxuXHRcdGNhY2hlRGF0YS5za2lwUmVuZGVyID0gdmVydGljZXNDb3VudCA9PT0gMDtcblxuXHRcdGlmIChzaXplQ2hhbmdlKSB7XG5cdFx0XHR0aGlzLnNwaW5lQXR0YWNobWVudHNEaXJ0eSA9IHRydWU7XG5cblx0XHRcdGlmIChjbGlwcGVkRGF0YS52ZXJ0ZXhDb3VudCA8IHZlcnRpY2VzQ291bnQpIHtcblx0XHRcdFx0Ly8gYnVmZmVyIHJldXNlIVxuXHRcdFx0XHRjbGlwcGVkRGF0YS52ZXJ0aWNlcyA9IG5ldyBGbG9hdDMyQXJyYXkodmVydGljZXNDb3VudCAqIDIpO1xuXHRcdFx0XHRjbGlwcGVkRGF0YS51dnMgPSBuZXcgRmxvYXQzMkFycmF5KHZlcnRpY2VzQ291bnQgKiAyKTtcblx0XHRcdH1cblxuXHRcdFx0aWYgKGNsaXBwZWREYXRhLmluZGljZXMubGVuZ3RoIDwgaW5kaWNlc0NvdW50KSB7XG5cdFx0XHRcdGNsaXBwZWREYXRhLmluZGljZXMgPSBuZXcgVWludDE2QXJyYXkoaW5kaWNlc0NvdW50KTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRjb25zdCB7IHZlcnRpY2VzLCB1dnMsIGluZGljZXMgfSA9IGNsaXBwZWREYXRhO1xuXG5cdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCB2ZXJ0aWNlc0NvdW50OyBpKyspIHtcblx0XHRcdHZlcnRpY2VzW2kgKiAyXSA9IGNsaXBwZWRWZXJ0aWNlc1tpICogMl07XG5cdFx0XHR2ZXJ0aWNlc1soaSAqIDIpICsgMV0gPSBjbGlwcGVkVmVydGljZXNbKGkgKiAyKSArIDFdO1xuXG5cdFx0XHR1dnNbaSAqIDJdID0gY2xpcHBlZFVWc1soaSAqIDIpXTtcblx0XHRcdHV2c1soaSAqIDIpICsgMV0gPSBjbGlwcGVkVVZzWyhpICogMikgKyAxXTtcblx0XHR9XG5cblx0XHRjbGlwcGVkRGF0YS52ZXJ0ZXhDb3VudCA9IHZlcnRpY2VzQ291bnQ7XG5cblx0XHRmb3IgKGxldCBpID0gMDsgaSA8IGluZGljZXNDb3VudDsgaSsrKSB7XG5cdFx0XHRpZiAoaW5kaWNlc1tpXSAhPT0gY2xpcHBlZFRyaWFuZ2xlc1tpXSkge1xuXHRcdFx0XHR0aGlzLnNwaW5lQXR0YWNobWVudHNEaXJ0eSA9IHRydWU7XG5cdFx0XHRcdGluZGljZXNbaV0gPSBjbGlwcGVkVHJpYW5nbGVzW2ldO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGNsaXBwZWREYXRhLmluZGljZXNDb3VudCA9IGluZGljZXNDb3VudDtcblx0fVxuXG5cdC8qKlxuXHQgKiBlbnN1cmUgdGhhdCBhdHRhY2hlZCBjb250YWluZXJzIG1hcCBjb3JyZWN0bHkgdG8gdGhlaXIgc2xvdHNcblx0ICogYWxvbmcgd2l0aCB0aGVpciBwb3NpdGlvbiwgcm90YXRpb24sIHNjYWxlLCBhbmQgdmlzaWJpbGl0eS5cblx0ICovXG5cdHByaXZhdGUgdXBkYXRlU2xvdE9iamVjdHMgKCkge1xuXHRcdGZvciAoY29uc3QgaSBpbiB0aGlzLl9zbG90c09iamVjdCkge1xuXHRcdFx0Y29uc3Qgc2xvdEF0dGFjaG1lbnQgPSB0aGlzLl9zbG90c09iamVjdFtpXTtcblxuXHRcdFx0aWYgKCFzbG90QXR0YWNobWVudCkgY29udGludWU7XG5cblx0XHRcdHRoaXMudXBkYXRlU2xvdE9iamVjdChzbG90QXR0YWNobWVudCk7XG5cdFx0fVxuXHR9XG5cblx0cHJpdmF0ZSB1cGRhdGVTbG90T2JqZWN0IChzbG90QXR0YWNobWVudDogeyBzbG90OiBTbG90LCBjb250YWluZXI6IENvbnRhaW5lciwgZm9sbG93QXR0YWNobWVudFRpbWVsaW5lOiBib29sZWFuIH0pIHtcblx0XHRjb25zdCB7IHNsb3QsIGNvbnRhaW5lciB9ID0gc2xvdEF0dGFjaG1lbnQ7XG5cblx0XHRjb25zdCBmb2xsb3dBdHRhY2htZW50VmFsdWUgPSBzbG90QXR0YWNobWVudC5mb2xsb3dBdHRhY2htZW50VGltZWxpbmUgPyBCb29sZWFuKHNsb3QuYXR0YWNobWVudCkgOiB0cnVlO1xuXHRcdGNvbnRhaW5lci52aXNpYmxlID0gdGhpcy5za2VsZXRvbi5kcmF3T3JkZXIuaW5jbHVkZXMoc2xvdCkgJiYgZm9sbG93QXR0YWNobWVudFZhbHVlO1xuXG5cdFx0aWYgKGNvbnRhaW5lci52aXNpYmxlKSB7XG5cdFx0XHRsZXQgYm9uZSA9IHNsb3QuYm9uZTtcblxuXHRcdFx0Y29uc3QgbWF0cml4ID0gY29udGFpbmVyLmxvY2FsVHJhbnNmb3JtO1xuXHRcdFx0bWF0cml4LmEgPSBib25lLmE7XG5cdFx0XHRtYXRyaXguYiA9IGJvbmUuYztcblx0XHRcdG1hdHJpeC5jID0gLWJvbmUuYjtcblx0XHRcdG1hdHJpeC5kID0gLWJvbmUuZDtcblx0XHRcdG1hdHJpeC50eCA9IGJvbmUud29ybGRYO1xuXHRcdFx0bWF0cml4LnR5ID0gYm9uZS53b3JsZFk7XG5cdFx0XHRjb250YWluZXIuc2V0RnJvbU1hdHJpeChtYXRyaXgpO1xuXG5cdFx0XHRjb250YWluZXIuYWxwaGEgPSB0aGlzLnNrZWxldG9uLmNvbG9yLmEgKiBzbG90LmNvbG9yLmE7XG5cdFx0fVxuXHR9XG5cblx0LyoqIEBpbnRlcm5hbCAqL1xuXHRfZ2V0Q2FjaGVkRGF0YSAoc2xvdDogU2xvdCwgYXR0YWNobWVudDogUmVnaW9uQXR0YWNobWVudCB8IE1lc2hBdHRhY2htZW50KTogQXR0YWNobWVudENhY2hlRGF0YSB7XG5cdFx0cmV0dXJuIHRoaXMuYXR0YWNobWVudENhY2hlRGF0YVtzbG90LmRhdGEuaW5kZXhdW2F0dGFjaG1lbnQubmFtZV0gfHwgdGhpcy5pbml0Q2FjaGVkRGF0YShzbG90LCBhdHRhY2htZW50KTtcblx0fVxuXG5cdHByaXZhdGUgaW5pdENhY2hlZERhdGEgKHNsb3Q6IFNsb3QsIGF0dGFjaG1lbnQ6IFJlZ2lvbkF0dGFjaG1lbnQgfCBNZXNoQXR0YWNobWVudCk6IEF0dGFjaG1lbnRDYWNoZURhdGEge1xuXHRcdGxldCB2ZXJ0aWNlczogRmxvYXQzMkFycmF5O1xuXG5cdFx0aWYgKGF0dGFjaG1lbnQgaW5zdGFuY2VvZiBSZWdpb25BdHRhY2htZW50KSB7XG5cdFx0XHR2ZXJ0aWNlcyA9IG5ldyBGbG9hdDMyQXJyYXkoOCk7XG5cblx0XHRcdHRoaXMuYXR0YWNobWVudENhY2hlRGF0YVtzbG90LmRhdGEuaW5kZXhdW2F0dGFjaG1lbnQubmFtZV0gPSB7XG5cdFx0XHRcdGlkOiBgJHtzbG90LmRhdGEuaW5kZXh9LSR7YXR0YWNobWVudC5uYW1lfWAsXG5cdFx0XHRcdHZlcnRpY2VzLFxuXHRcdFx0XHRjbGlwcGVkOiBmYWxzZSxcblx0XHRcdFx0aW5kaWNlczogWzAsIDEsIDIsIDAsIDIsIDNdLFxuXHRcdFx0XHR1dnM6IG5ldyBGbG9hdDMyQXJyYXkoYXR0YWNobWVudC51dnMubGVuZ3RoKSxcblx0XHRcdFx0Y29sb3I6IG5ldyBDb2xvcigxLCAxLCAxLCAxKSxcblx0XHRcdFx0ZGFya0NvbG9yOiBuZXcgQ29sb3IoMCwgMCwgMCwgMCksXG5cdFx0XHRcdGRhcmtUaW50OiB0aGlzLmRhcmtUaW50LFxuXHRcdFx0XHRza2lwUmVuZGVyOiBmYWxzZSxcblx0XHRcdFx0dGV4dHVyZTogYXR0YWNobWVudC5yZWdpb24/LnRleHR1cmUudGV4dHVyZSxcblx0XHRcdH07XG5cdFx0fVxuXHRcdGVsc2Uge1xuXHRcdFx0dmVydGljZXMgPSBuZXcgRmxvYXQzMkFycmF5KGF0dGFjaG1lbnQud29ybGRWZXJ0aWNlc0xlbmd0aCk7XG5cblx0XHRcdHRoaXMuYXR0YWNobWVudENhY2hlRGF0YVtzbG90LmRhdGEuaW5kZXhdW2F0dGFjaG1lbnQubmFtZV0gPSB7XG5cdFx0XHRcdGlkOiBgJHtzbG90LmRhdGEuaW5kZXh9LSR7YXR0YWNobWVudC5uYW1lfWAsXG5cdFx0XHRcdHZlcnRpY2VzLFxuXHRcdFx0XHRjbGlwcGVkOiBmYWxzZSxcblx0XHRcdFx0aW5kaWNlczogYXR0YWNobWVudC50cmlhbmdsZXMsXG5cdFx0XHRcdHV2czogbmV3IEZsb2F0MzJBcnJheShhdHRhY2htZW50LnV2cy5sZW5ndGgpLFxuXHRcdFx0XHRjb2xvcjogbmV3IENvbG9yKDEsIDEsIDEsIDEpLFxuXHRcdFx0XHRkYXJrQ29sb3I6IG5ldyBDb2xvcigwLCAwLCAwLCAwKSxcblx0XHRcdFx0ZGFya1RpbnQ6IHRoaXMuZGFya1RpbnQsXG5cdFx0XHRcdHNraXBSZW5kZXI6IGZhbHNlLFxuXHRcdFx0XHR0ZXh0dXJlOiBhdHRhY2htZW50LnJlZ2lvbj8udGV4dHVyZS50ZXh0dXJlLFxuXHRcdFx0fTtcblx0XHR9XG5cblx0XHRyZXR1cm4gdGhpcy5hdHRhY2htZW50Q2FjaGVEYXRhW3Nsb3QuZGF0YS5pbmRleF1bYXR0YWNobWVudC5uYW1lXTtcblx0fVxuXG5cdHByb3RlY3RlZCBvblZpZXdVcGRhdGUgKCkge1xuXHRcdC8vIGluY3JlbWVudCBmcm9tIHRoZSAxMnRoIGJpdCFcblx0XHR0aGlzLl9kaWRWaWV3Q2hhbmdlVGljaysrO1xuXHRcdGlmICghdGhpcy5fYm91bmRzUHJvdmlkZXIpIHtcblx0XHRcdHRoaXMuX2JvdW5kc0RpcnR5ID0gdHJ1ZTtcblx0XHR9XG5cblx0XHRpZiAodGhpcy5kaWRWaWV3VXBkYXRlKSByZXR1cm47XG5cdFx0dGhpcy5kaWRWaWV3VXBkYXRlID0gdHJ1ZTtcblxuXHRcdGNvbnN0IHJlbmRlckdyb3VwID0gdGhpcy5yZW5kZXJHcm91cCB8fCB0aGlzLnBhcmVudFJlbmRlckdyb3VwO1xuXG5cdFx0aWYgKHJlbmRlckdyb3VwKSB7XG5cdFx0XHRyZW5kZXJHcm91cC5vbkNoaWxkVmlld1VwZGF0ZSh0aGlzKTtcblx0XHR9XG5cblx0XHR0aGlzLmRlYnVnPy5yZW5kZXJEZWJ1Zyh0aGlzKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBBdHRhY2hlcyBhIFBpeGlKUyBjb250YWluZXIgdG8gYSBzcGVjaWZpZWQgc2xvdC4gVGhpcyB3aWxsIG1hcCB0aGUgd29ybGQgdHJhbnNmb3JtIG9mIHRoZSBzbG90cyBib25lXG5cdCAqIHRvIHRoZSBhdHRhY2hlZCBjb250YWluZXIuIEEgY29udGFpbmVyIGNhbiBvbmx5IGJlIGF0dGFjaGVkIHRvIG9uZSBzbG90IGF0IGEgdGltZS5cblx0ICpcblx0ICogQHBhcmFtIGNvbnRhaW5lciAtIFRoZSBjb250YWluZXIgdG8gYXR0YWNoIHRvIHRoZSBzbG90XG5cdCAqIEBwYXJhbSBzbG90UmVmIC0gVGhlIHNsb3QgaWQgb3IgIHNsb3QgdG8gYXR0YWNoIHRvXG5cdCAqIEBwYXJhbSBvcHRpb25zIC0gT3B0aW9uYWwgc2V0dGluZ3MgZm9yIHRoZSBhdHRhY2htZW50LlxuXHQgKiBAcGFyYW0gb3B0aW9ucy5mb2xsb3dBdHRhY2htZW50VGltZWxpbmUgLSBJZiB0cnVlLCB0aGUgYXR0YWNobWVudCB3aWxsIGZvbGxvdyB0aGUgc2xvdCdzIGF0dGFjaG1lbnQgdGltZWxpbmUuXG5cdCAqL1xuXHRwdWJsaWMgYWRkU2xvdE9iamVjdCAoc2xvdDogbnVtYmVyIHwgc3RyaW5nIHwgU2xvdCwgY29udGFpbmVyOiBDb250YWluZXIsIG9wdGlvbnM/OiB7IGZvbGxvd0F0dGFjaG1lbnRUaW1lbGluZT86IGJvb2xlYW4gfSkge1xuXHRcdHNsb3QgPSB0aGlzLmdldFNsb3RGcm9tUmVmKHNsb3QpO1xuXG5cdFx0Ly8gbmVlZCB0byBjaGVjayBpbiBvbiB0aGUgY29udGFpbmVyIHRvby4uLlxuXHRcdGZvciAoY29uc3QgaSBpbiB0aGlzLl9zbG90c09iamVjdCkge1xuXHRcdFx0aWYgKHRoaXMuX3Nsb3RzT2JqZWN0W2ldPy5jb250YWluZXIgPT09IGNvbnRhaW5lcikge1xuXHRcdFx0XHR0aGlzLnJlbW92ZVNsb3RPYmplY3QodGhpcy5fc2xvdHNPYmplY3RbaV0uc2xvdCk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0dGhpcy5yZW1vdmVTbG90T2JqZWN0KHNsb3QpO1xuXG5cdFx0Y29udGFpbmVyLmluY2x1ZGVJbkJ1aWxkID0gZmFsc2U7XG5cblx0XHR0aGlzLmFkZENoaWxkKGNvbnRhaW5lcik7XG5cblx0XHRjb25zdCBzbG90T2JqZWN0ID0ge1xuXHRcdFx0Y29udGFpbmVyLFxuXHRcdFx0c2xvdCxcblx0XHRcdGZvbGxvd0F0dGFjaG1lbnRUaW1lbGluZTogb3B0aW9ucz8uZm9sbG93QXR0YWNobWVudFRpbWVsaW5lIHx8IGZhbHNlLFxuXHRcdH07XG5cdFx0dGhpcy5fc2xvdHNPYmplY3Rbc2xvdC5kYXRhLm5hbWVdID0gc2xvdE9iamVjdDtcblxuXHRcdHRoaXMudXBkYXRlU2xvdE9iamVjdChzbG90T2JqZWN0KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBSZW1vdmVzIGEgUGl4aUpTIGNvbnRhaW5lciBmcm9tIHRoZSBzbG90IGl0IGlzIGF0dGFjaGVkIHRvLlxuXHQgKlxuXHQgKiBAcGFyYW0gY29udGFpbmVyIC0gVGhlIGNvbnRhaW5lciB0byBkZXRhY2ggZnJvbSB0aGUgc2xvdFxuXHQgKiBAcGFyYW0gc2xvdE9yQ29udGFpbmVyIC0gVGhlIGNvbnRhaW5lciwgc2xvdCBpZCBvciBzbG90IHRvIGRldGFjaCBmcm9tXG5cdCAqL1xuXHRwdWJsaWMgcmVtb3ZlU2xvdE9iamVjdCAoc2xvdE9yQ29udGFpbmVyOiBudW1iZXIgfCBzdHJpbmcgfCBTbG90IHwgQ29udGFpbmVyKSB7XG5cdFx0bGV0IGNvbnRhaW5lclRvUmVtb3ZlOiBDb250YWluZXIgfCB1bmRlZmluZWQ7XG5cblx0XHRpZiAoc2xvdE9yQ29udGFpbmVyIGluc3RhbmNlb2YgQ29udGFpbmVyKSB7XG5cdFx0XHRmb3IgKGNvbnN0IGkgaW4gdGhpcy5fc2xvdHNPYmplY3QpIHtcblx0XHRcdFx0aWYgKHRoaXMuX3Nsb3RzT2JqZWN0W2ldPy5jb250YWluZXIgPT09IHNsb3RPckNvbnRhaW5lcikge1xuXHRcdFx0XHRcdHRoaXMuX3Nsb3RzT2JqZWN0W2ldID0gbnVsbDtcblxuXHRcdFx0XHRcdGNvbnRhaW5lclRvUmVtb3ZlID0gc2xvdE9yQ29udGFpbmVyO1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHRcdGVsc2Uge1xuXHRcdFx0Y29uc3Qgc2xvdCA9IHRoaXMuZ2V0U2xvdEZyb21SZWYoc2xvdE9yQ29udGFpbmVyKTtcblxuXHRcdFx0Y29udGFpbmVyVG9SZW1vdmUgPSB0aGlzLl9zbG90c09iamVjdFtzbG90LmRhdGEubmFtZV0/LmNvbnRhaW5lcjtcblx0XHRcdHRoaXMuX3Nsb3RzT2JqZWN0W3Nsb3QuZGF0YS5uYW1lXSA9IG51bGw7XG5cdFx0fVxuXG5cdFx0aWYgKGNvbnRhaW5lclRvUmVtb3ZlKSB7XG5cdFx0XHR0aGlzLnJlbW92ZUNoaWxkKGNvbnRhaW5lclRvUmVtb3ZlKTtcblxuXHRcdFx0Y29udGFpbmVyVG9SZW1vdmUuaW5jbHVkZUluQnVpbGQgPSB0cnVlO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBSZW1vdmVzIGFsbCBQaXhpSlMgY29udGFpbmVycyBhdHRhY2hlZCB0byBhbnkgc2xvdC5cblx0ICovXG5cdHB1YmxpYyByZW1vdmVTbG90T2JqZWN0cyAoKSB7XG5cdFx0T2JqZWN0LmVudHJpZXModGhpcy5fc2xvdHNPYmplY3QpLmZvckVhY2goKFtzbG90TmFtZSwgc2xvdE9iamVjdF0pID0+IHtcblx0XHRcdGlmIChzbG90T2JqZWN0KSBzbG90T2JqZWN0LmNvbnRhaW5lci5yZW1vdmVGcm9tUGFyZW50KCk7XG5cdFx0XHRkZWxldGUgdGhpcy5fc2xvdHNPYmplY3Rbc2xvdE5hbWVdO1xuXHRcdH0pO1xuXHR9XG5cblx0LyoqXG5cdCAqIFJldHVybnMgYSBjb250YWluZXIgYXR0YWNoZWQgdG8gYSBzbG90LCBvciB1bmRlZmluZWQgaWYgbm8gY29udGFpbmVyIGlzIGF0dGFjaGVkLlxuXHQgKlxuXHQgKiBAcGFyYW0gc2xvdFJlZiAtIFRoZSBzbG90IGlkIG9yIHNsb3QgdG8gZ2V0IHRoZSBhdHRhY2htZW50IGZyb21cblx0ICogQHJldHVybnMgLSBUaGUgY29udGFpbmVyIGF0dGFjaGVkIHRvIHRoZSBzbG90XG5cdCAqL1xuXHRwdWJsaWMgZ2V0U2xvdE9iamVjdCAoc2xvdDogbnVtYmVyIHwgc3RyaW5nIHwgU2xvdCkge1xuXHRcdHNsb3QgPSB0aGlzLmdldFNsb3RGcm9tUmVmKHNsb3QpO1xuXG5cdFx0cmV0dXJuIHRoaXMuX3Nsb3RzT2JqZWN0W3Nsb3QuZGF0YS5uYW1lXT8uY29udGFpbmVyO1xuXHR9XG5cblx0cHJvdGVjdGVkIHVwZGF0ZUJvdW5kcyAoKSB7XG5cdFx0dGhpcy5fYm91bmRzRGlydHkgPSBmYWxzZTtcblxuXHRcdHRoaXMuc2tlbGV0b25Cb3VuZHMgfHw9IG5ldyBTa2VsZXRvbkJvdW5kcygpO1xuXG5cdFx0Y29uc3Qgc2tlbGV0b25Cb3VuZHMgPSB0aGlzLnNrZWxldG9uQm91bmRzO1xuXG5cdFx0c2tlbGV0b25Cb3VuZHMudXBkYXRlKHRoaXMuc2tlbGV0b24sIHRydWUpO1xuXG5cdFx0aWYgKHRoaXMuX2JvdW5kc1Byb3ZpZGVyKSB7XG5cdFx0XHRjb25zdCBib3VuZHNTcGluZSA9IHRoaXMuX2JvdW5kc1Byb3ZpZGVyLmNhbGN1bGF0ZUJvdW5kcyh0aGlzKTtcblxuXHRcdFx0Y29uc3QgYm91bmRzID0gdGhpcy5fYm91bmRzO1xuXHRcdFx0Ym91bmRzLmNsZWFyKCk7XG5cblx0XHRcdGJvdW5kcy54ID0gYm91bmRzU3BpbmUueDtcblx0XHRcdGJvdW5kcy55ID0gYm91bmRzU3BpbmUueTtcblx0XHRcdGJvdW5kcy53aWR0aCA9IGJvdW5kc1NwaW5lLndpZHRoO1xuXHRcdFx0Ym91bmRzLmhlaWdodCA9IGJvdW5kc1NwaW5lLmhlaWdodDtcblxuXHRcdH0gZWxzZSBpZiAoc2tlbGV0b25Cb3VuZHMubWluWCA9PT0gSW5maW5pdHkpIHtcblx0XHRcdGlmICh0aGlzLmhhc05ldmVyVXBkYXRlZCkge1xuXHRcdFx0XHR0aGlzLl91cGRhdGVBbmRBcHBseVN0YXRlKDApO1xuXHRcdFx0XHR0aGlzLl9ib3VuZHNEaXJ0eSA9IGZhbHNlO1xuXHRcdFx0fVxuXHRcdFx0dGhpcy5fdmFsaWRhdGVBbmRUcmFuc2Zvcm1BdHRhY2htZW50cygpO1xuXG5cdFx0XHRjb25zdCBkcmF3T3JkZXIgPSB0aGlzLnNrZWxldG9uLmRyYXdPcmRlcjtcblx0XHRcdGNvbnN0IGJvdW5kcyA9IHRoaXMuX2JvdW5kcztcblxuXHRcdFx0Ym91bmRzLmNsZWFyKCk7XG5cblx0XHRcdGZvciAobGV0IGkgPSAwOyBpIDwgZHJhd09yZGVyLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRcdGNvbnN0IHNsb3QgPSBkcmF3T3JkZXJbaV07XG5cblx0XHRcdFx0Y29uc3QgYXR0YWNobWVudCA9IHNsb3QuZ2V0QXR0YWNobWVudCgpO1xuXG5cdFx0XHRcdGlmIChhdHRhY2htZW50ICYmIChhdHRhY2htZW50IGluc3RhbmNlb2YgUmVnaW9uQXR0YWNobWVudCB8fCBhdHRhY2htZW50IGluc3RhbmNlb2YgTWVzaEF0dGFjaG1lbnQpKSB7XG5cdFx0XHRcdFx0Y29uc3QgY2FjaGVEYXRhID0gdGhpcy5fZ2V0Q2FjaGVkRGF0YShzbG90LCBhdHRhY2htZW50KTtcblxuXHRcdFx0XHRcdGJvdW5kcy5hZGRWZXJ0ZXhEYXRhKGNhY2hlRGF0YS52ZXJ0aWNlcywgMCwgY2FjaGVEYXRhLnZlcnRpY2VzLmxlbmd0aCk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdFx0ZWxzZSB7XG5cdFx0XHR0aGlzLl9ib3VuZHMubWluWCA9IHNrZWxldG9uQm91bmRzLm1pblg7XG5cdFx0XHR0aGlzLl9ib3VuZHMubWluWSA9IHNrZWxldG9uQm91bmRzLm1pblk7XG5cdFx0XHR0aGlzLl9ib3VuZHMubWF4WCA9IHNrZWxldG9uQm91bmRzLm1heFg7XG5cdFx0XHR0aGlzLl9ib3VuZHMubWF4WSA9IHNrZWxldG9uQm91bmRzLm1heFk7XG5cdFx0fVxuXHR9XG5cblx0LyoqIEBpbnRlcm5hbCAqL1xuXHRhZGRCb3VuZHMgKGJvdW5kczogQm91bmRzKSB7XG5cdFx0Ym91bmRzLmFkZEJvdW5kcyh0aGlzLmJvdW5kcyk7XG5cdH1cblxuXHQvKipcblx0ICogRGVzdHJveXMgdGhpcyBzcHJpdGUgcmVuZGVyYWJsZSBhbmQgb3B0aW9uYWxseSBpdHMgdGV4dHVyZS5cblx0ICogQHBhcmFtIG9wdGlvbnMgLSBPcHRpb25zIHBhcmFtZXRlci4gQSBib29sZWFuIHdpbGwgYWN0IGFzIGlmIGFsbCBvcHRpb25zXG5cdCAqICBoYXZlIGJlZW4gc2V0IHRvIHRoYXQgdmFsdWVcblx0ICogQHBhcmFtIHtib29sZWFufSBbb3B0aW9ucy50ZXh0dXJlPWZhbHNlXSAtIFNob3VsZCBpdCBkZXN0cm95IHRoZSBjdXJyZW50IHRleHR1cmUgb2YgdGhlIHJlbmRlcmFibGUgYXMgd2VsbFxuXHQgKiBAcGFyYW0ge2Jvb2xlYW59IFtvcHRpb25zLnRleHR1cmVTb3VyY2U9ZmFsc2VdIC0gU2hvdWxkIGl0IGRlc3Ryb3kgdGhlIHRleHR1cmVTb3VyY2Ugb2YgdGhlIHJlbmRlcmFibGUgYXMgd2VsbFxuXHQgKi9cblx0cHVibGljIG92ZXJyaWRlIGRlc3Ryb3kgKG9wdGlvbnM6IERlc3Ryb3lPcHRpb25zID0gZmFsc2UpIHtcblx0XHRzdXBlci5kZXN0cm95KG9wdGlvbnMpO1xuXG5cdFx0dGhpcy5fdGlja2VyLnJlbW92ZSh0aGlzLmludGVybmFsVXBkYXRlLCB0aGlzKTtcblx0XHQodGhpcy5fdGlja2VyIGFzIGFueSkgPSBudWxsO1xuXHRcdHRoaXMuc3RhdGUuY2xlYXJMaXN0ZW5lcnMoKTtcblx0XHR0aGlzLmRlYnVnID0gdW5kZWZpbmVkO1xuXHRcdHRoaXMuc2tlbGV0b24gPSBudWxsIGFzIGFueTtcblx0XHR0aGlzLnN0YXRlID0gbnVsbCBhcyBhbnk7XG5cdFx0KHRoaXMuX3Nsb3RzT2JqZWN0IGFzIGFueSkgPSBudWxsO1xuXHRcdHRoaXMuX2xhc3RBdHRhY2htZW50cy5sZW5ndGggPSAwO1xuXHRcdHRoaXMuYXR0YWNobWVudENhY2hlRGF0YSA9IG51bGwgYXMgYW55O1xuXHR9XG5cblx0LyoqIENvbnZlcnRzIGEgcG9pbnQgZnJvbSB0aGUgc2tlbGV0b24gY29vcmRpbmF0ZSBzeXN0ZW0gdG8gdGhlIFBpeGkgd29ybGQgY29vcmRpbmF0ZSBzeXN0ZW0uICovXG5cdHB1YmxpYyBza2VsZXRvblRvUGl4aVdvcmxkQ29vcmRpbmF0ZXMgKHBvaW50OiB7IHg6IG51bWJlcjsgeTogbnVtYmVyIH0pIHtcblx0XHR0aGlzLndvcmxkVHJhbnNmb3JtLmFwcGx5KHBvaW50LCBwb2ludCk7XG5cdH1cblxuXHQvKiogQ29udmVydHMgYSBwb2ludCBmcm9tIHRoZSBQaXhpIHdvcmxkIGNvb3JkaW5hdGUgc3lzdGVtIHRvIHRoZSBza2VsZXRvbiBjb29yZGluYXRlIHN5c3RlbS4gKi9cblx0cHVibGljIHBpeGlXb3JsZENvb3JkaW5hdGVzVG9Ta2VsZXRvbiAocG9pbnQ6IHsgeDogbnVtYmVyOyB5OiBudW1iZXIgfSkge1xuXHRcdHRoaXMud29ybGRUcmFuc2Zvcm0uYXBwbHlJbnZlcnNlKHBvaW50LCBwb2ludCk7XG5cdH1cblxuXHQvKiogQ29udmVydHMgYSBwb2ludCBmcm9tIHRoZSBQaXhpIHdvcmxkIGNvb3JkaW5hdGUgc3lzdGVtIHRvIHRoZSBib25lJ3MgbG9jYWwgY29vcmRpbmF0ZSBzeXN0ZW0uICovXG5cdHB1YmxpYyBwaXhpV29ybGRDb29yZGluYXRlc1RvQm9uZSAocG9pbnQ6IHsgeDogbnVtYmVyOyB5OiBudW1iZXIgfSwgYm9uZTogQm9uZSkge1xuXHRcdHRoaXMucGl4aVdvcmxkQ29vcmRpbmF0ZXNUb1NrZWxldG9uKHBvaW50KTtcblx0XHRpZiAoYm9uZS5wYXJlbnQpIHtcblx0XHRcdGJvbmUucGFyZW50LndvcmxkVG9Mb2NhbChwb2ludCBhcyBWZWN0b3IyKTtcblx0XHR9XG5cdFx0ZWxzZSB7XG5cdFx0XHRib25lLndvcmxkVG9Mb2NhbChwb2ludCBhcyBWZWN0b3IyKTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogVXNlIHRoaXMgbWV0aG9kIHRvIGluc3RhbnRpYXRlIGEgU3BpbmUgZ2FtZSBvYmplY3QuXG5cdCAqIEJlZm9yZSBpbnN0YW50aWF0aW5nIGEgU3BpbmUgZ2FtZSBvYmplY3QsIHRoZSBza2VsZXRvbiAoYC5za2VsYCBvciBgLmpzb25gKSBhbmQgdGhlIGF0bGFzIHRleHQgZmlsZXMgbXVzdCBiZSBsb2FkZWQgaW50byB0aGUgQXNzZXRzLiBGb3IgZXhhbXBsZTpcblx0ICogYGBgXG5cdCAqIFBJWEkuQXNzZXRzLmFkZChcInNhY2tEYXRhXCIsIFwiL2Fzc2V0cy9zYWNrLXByby5za2VsXCIpO1xuXHQgKiBQSVhJLkFzc2V0cy5hZGQoXCJzYWNrQXRsYXNcIiwgXCIvYXNzZXRzL3NhY2stcG1hLmF0bGFzXCIpO1xuXHQgKiBhd2FpdCBQSVhJLkFzc2V0cy5sb2FkKFtcInNhY2tEYXRhXCIsIFwic2Fja0F0bGFzXCJdKTtcblx0ICogYGBgXG5cdCAqIE9uY2UgYSBTcGluZSBnYW1lIG9iamVjdCBpcyBjcmVhdGVkLCBpdHMgc2tlbGV0b24gZGF0YSBpcyBjYWNoZWQgaW50byB7QGxpbmsgQ2FjaGV9IHVzaW5nIHRoZSBrZXk6XG5cdCAqIGAke3NrZWxldG9uQXNzZXROYW1lfS0ke2F0bGFzQXNzZXROYW1lfS0ke29wdGlvbnM/LnNjYWxlID8/IDF9YFxuXHQgKlxuXHQgKiBAcGFyYW0gb3B0aW9ucyAtIE9wdGlvbnMgdG8gY29uZmlndXJlIHRoZSBTcGluZSBnYW1lIG9iamVjdC4gU2VlIHtAbGluayBTcGluZUZyb21PcHRpb25zfVxuXHQgKiBAcmV0dXJucyB7U3BpbmV9IFRoZSBTcGluZSBnYW1lIG9iamVjdCBpbnN0YW50aWF0ZWRcblx0ICovXG5cdHN0YXRpYyBmcm9tICh7IHNrZWxldG9uLCBhdGxhcywgc2NhbGUgPSAxLCBkYXJrVGludCwgYXV0b1VwZGF0ZSA9IHRydWUsIGJvdW5kc1Byb3ZpZGVyLCB0aWNrZXIgfTogU3BpbmVGcm9tT3B0aW9ucykge1xuXHRcdGNvbnN0IGNhY2hlS2V5ID0gYCR7c2tlbGV0b259LSR7YXRsYXN9LSR7c2NhbGV9YDtcblxuXHRcdGlmIChDYWNoZS5oYXMoY2FjaGVLZXkpKSB7XG5cdFx0XHRyZXR1cm4gbmV3IFNwaW5lKHtcblx0XHRcdFx0c2tlbGV0b25EYXRhOiBDYWNoZS5nZXQ8U2tlbGV0b25EYXRhPihjYWNoZUtleSksXG5cdFx0XHRcdGRhcmtUaW50LFxuXHRcdFx0XHRhdXRvVXBkYXRlLFxuXHRcdFx0XHRib3VuZHNQcm92aWRlcixcblx0XHRcdFx0dGlja2VyLFxuXHRcdFx0fSk7XG5cdFx0fVxuXG5cdFx0Y29uc3Qgc2tlbGV0b25Bc3NldCA9IEFzc2V0cy5nZXQ8YW55IHwgVWludDhBcnJheT4oc2tlbGV0b24pO1xuXG5cdFx0Y29uc3QgYXRsYXNBc3NldCA9IEFzc2V0cy5nZXQ8VGV4dHVyZUF0bGFzPihhdGxhcyk7XG5cdFx0Y29uc3QgYXR0YWNobWVudExvYWRlciA9IG5ldyBBdGxhc0F0dGFjaG1lbnRMb2FkZXIoYXRsYXNBc3NldCk7XG5cdFx0Y29uc3QgcGFyc2VyID0gc2tlbGV0b25Bc3NldCBpbnN0YW5jZW9mIFVpbnQ4QXJyYXlcblx0XHRcdD8gbmV3IFNrZWxldG9uQmluYXJ5KGF0dGFjaG1lbnRMb2FkZXIpXG5cdFx0XHQ6IG5ldyBTa2VsZXRvbkpzb24oYXR0YWNobWVudExvYWRlcik7XG5cblx0XHRwYXJzZXIuc2NhbGUgPSBzY2FsZTtcblx0XHRjb25zdCBza2VsZXRvbkRhdGEgPSBwYXJzZXIucmVhZFNrZWxldG9uRGF0YShza2VsZXRvbkFzc2V0KTtcblxuXHRcdENhY2hlLnNldChjYWNoZUtleSwgc2tlbGV0b25EYXRhKTtcblxuXHRcdHJldHVybiBuZXcgU3BpbmUoe1xuXHRcdFx0c2tlbGV0b25EYXRhLFxuXHRcdFx0ZGFya1RpbnQsXG5cdFx0XHRhdXRvVXBkYXRlLFxuXHRcdFx0Ym91bmRzUHJvdmlkZXIsXG5cdFx0XHR0aWNrZXIsXG5cdFx0fSk7XG5cdH1cbn1cbiJdfQ==
|