dcl-npc-toolkit 1.5.2-20250415203310.commit-be60b9e → 1.5.2-20251229114702.commit-02ef366

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/index.js CHANGED
@@ -1,8 +1,9 @@
1
- import { activate, stopWalking, followPath, create, handleWalkAway, playAnimation, showDebug, getData, changeIdleAnim, talkBubble, createDialogWindow, openDialogWindow, closeDialogWindow } from "./npc";
1
+ import { activate, stopWalking, followPath, create, createFromEntity, handleWalkAway, playAnimation, showDebug, getData, changeIdleAnim, talkBubble, createDialogWindow, openDialogWindow, closeDialogWindow } from "./npc";
2
2
  import { talk } from "./dialog";
3
3
  import { NPCPathType, NPCType } from "./types";
4
4
  import { NpcUtilsUi } from './ui';
5
5
  import { closeBubble, closeBubbleEndAll } from "./bubble";
6
- export { activate, stopWalking, followPath, create, handleWalkAway, playAnimation, showDebug, talk, getData, NPCPathType, NPCType, changeIdleAnim, talkBubble, closeBubble, closeBubbleEndAll, createDialogWindow, openDialogWindow, closeDialogWindow, NpcUtilsUi };
6
+ export { activate, stopWalking, followPath, create, createFromEntity, handleWalkAway, playAnimation, showDebug, talk, getData, NPCPathType, NPCType, changeIdleAnim, talkBubble, closeBubble, closeBubbleEndAll, createDialogWindow, openDialogWindow, closeDialogWindow, NpcUtilsUi };
7
7
  export const debugLabel = 'NPC-Toolkit';
8
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNILFFBQVEsRUFDUixXQUFXLEVBQ1gsVUFBVSxFQUNWLE1BQU0sRUFDTixjQUFjLEVBQ2QsYUFBYSxFQUNiLFNBQVMsRUFDVCxPQUFPLEVBQ1AsY0FBYyxFQUNkLFVBQVUsRUFDVixrQkFBa0IsRUFDbEIsZ0JBQWdCLEVBQ2hCLGlCQUFpQixFQUNwQixNQUFNLE9BQU8sQ0FBQztBQUNmLE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxVQUFVLENBQUM7QUFDaEMsT0FBTyxFQUFVLFdBQVcsRUFBRSxPQUFPLEVBQUUsTUFBTSxTQUFTLENBQUM7QUFDdkQsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLE1BQU0sQ0FBQTtBQUVqQyxPQUFPLEVBQUUsV0FBVyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sVUFBVSxDQUFDO0FBRTFELE9BQU8sRUFDSCxRQUFRLEVBQ1IsV0FBVyxFQUNYLFVBQVUsRUFDVixNQUFNLEVBQ04sY0FBYyxFQUNkLGFBQWEsRUFDYixTQUFTLEVBQ1QsSUFBSSxFQUVKLE9BQU8sRUFDUCxXQUFXLEVBQ1gsT0FBTyxFQUNQLGNBQWMsRUFDZCxVQUFVLEVBQ1YsV0FBVyxFQUNYLGlCQUFpQixFQUNqQixrQkFBa0IsRUFDbEIsZ0JBQWdCLEVBQ2hCLGlCQUFpQixFQUNqQixVQUFVLEVBQ2IsQ0FBQTtBQUVELE1BQU0sQ0FBQyxNQUFNLFVBQVUsR0FBVyxhQUFhLENBQUEiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICAgIGFjdGl2YXRlLFxuICAgIHN0b3BXYWxraW5nLFxuICAgIGZvbGxvd1BhdGgsXG4gICAgY3JlYXRlLFxuICAgIGhhbmRsZVdhbGtBd2F5LFxuICAgIHBsYXlBbmltYXRpb24sXG4gICAgc2hvd0RlYnVnLFxuICAgIGdldERhdGEsXG4gICAgY2hhbmdlSWRsZUFuaW0sXG4gICAgdGFsa0J1YmJsZSxcbiAgICBjcmVhdGVEaWFsb2dXaW5kb3csXG4gICAgb3BlbkRpYWxvZ1dpbmRvdyxcbiAgICBjbG9zZURpYWxvZ1dpbmRvd1xufSBmcm9tIFwiLi9ucGNcIjtcbmltcG9ydCB7IHRhbGsgfSBmcm9tIFwiLi9kaWFsb2dcIjtcbmltcG9ydCB7IERpYWxvZywgTlBDUGF0aFR5cGUsIE5QQ1R5cGUgfSBmcm9tIFwiLi90eXBlc1wiO1xuaW1wb3J0IHsgTnBjVXRpbHNVaSB9IGZyb20gJy4vdWknXG5cbmltcG9ydCB7IGNsb3NlQnViYmxlLCBjbG9zZUJ1YmJsZUVuZEFsbCB9IGZyb20gXCIuL2J1YmJsZVwiO1xuXG5leHBvcnQge1xuICAgIGFjdGl2YXRlLFxuICAgIHN0b3BXYWxraW5nLFxuICAgIGZvbGxvd1BhdGgsXG4gICAgY3JlYXRlLFxuICAgIGhhbmRsZVdhbGtBd2F5LFxuICAgIHBsYXlBbmltYXRpb24sXG4gICAgc2hvd0RlYnVnLFxuICAgIHRhbGssXG4gICAgRGlhbG9nLFxuICAgIGdldERhdGEsXG4gICAgTlBDUGF0aFR5cGUsXG4gICAgTlBDVHlwZSxcbiAgICBjaGFuZ2VJZGxlQW5pbSxcbiAgICB0YWxrQnViYmxlLFxuICAgIGNsb3NlQnViYmxlLFxuICAgIGNsb3NlQnViYmxlRW5kQWxsLFxuICAgIGNyZWF0ZURpYWxvZ1dpbmRvdyxcbiAgICBvcGVuRGlhbG9nV2luZG93LFxuICAgIGNsb3NlRGlhbG9nV2luZG93LFxuICAgIE5wY1V0aWxzVWlcbn1cblxuZXhwb3J0IGNvbnN0IGRlYnVnTGFiZWw6IHN0cmluZyA9ICdOUEMtVG9vbGtpdCciXX0=
8
+ export { paths } from './utils/path';
9
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNILFFBQVEsRUFDUixXQUFXLEVBQ1gsVUFBVSxFQUNWLE1BQU0sRUFDTixnQkFBZ0IsRUFDaEIsY0FBYyxFQUNkLGFBQWEsRUFDYixTQUFTLEVBQ1QsT0FBTyxFQUNQLGNBQWMsRUFDZCxVQUFVLEVBQ1Ysa0JBQWtCLEVBQ2xCLGdCQUFnQixFQUNoQixpQkFBaUIsRUFDcEIsTUFBTSxPQUFPLENBQUM7QUFDZixPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sVUFBVSxDQUFDO0FBQ2hDLE9BQU8sRUFBVSxXQUFXLEVBQUUsT0FBTyxFQUFFLE1BQU0sU0FBUyxDQUFDO0FBQ3ZELE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxNQUFNLENBQUE7QUFFakMsT0FBTyxFQUFFLFdBQVcsRUFBRSxpQkFBaUIsRUFBRSxNQUFNLFVBQVUsQ0FBQztBQUUxRCxPQUFPLEVBQ0gsUUFBUSxFQUNSLFdBQVcsRUFDWCxVQUFVLEVBQ1YsTUFBTSxFQUNOLGdCQUFnQixFQUNoQixjQUFjLEVBQ2QsYUFBYSxFQUNiLFNBQVMsRUFDVCxJQUFJLEVBRUosT0FBTyxFQUNQLFdBQVcsRUFDWCxPQUFPLEVBQ1AsY0FBYyxFQUNkLFVBQVUsRUFDVixXQUFXLEVBQ1gsaUJBQWlCLEVBQ2pCLGtCQUFrQixFQUNsQixnQkFBZ0IsRUFDaEIsaUJBQWlCLEVBQ2pCLFVBQVUsRUFDYixDQUFBO0FBRUQsTUFBTSxDQUFDLE1BQU0sVUFBVSxHQUFXLGFBQWEsQ0FBQTtBQUUvQyxPQUFPLEVBRU4sS0FBSyxFQUNMLE1BQU0sY0FBYyxDQUFBIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgICBhY3RpdmF0ZSxcbiAgICBzdG9wV2Fsa2luZyxcbiAgICBmb2xsb3dQYXRoLFxuICAgIGNyZWF0ZSxcbiAgICBjcmVhdGVGcm9tRW50aXR5LFxuICAgIGhhbmRsZVdhbGtBd2F5LFxuICAgIHBsYXlBbmltYXRpb24sXG4gICAgc2hvd0RlYnVnLFxuICAgIGdldERhdGEsXG4gICAgY2hhbmdlSWRsZUFuaW0sXG4gICAgdGFsa0J1YmJsZSxcbiAgICBjcmVhdGVEaWFsb2dXaW5kb3csXG4gICAgb3BlbkRpYWxvZ1dpbmRvdyxcbiAgICBjbG9zZURpYWxvZ1dpbmRvd1xufSBmcm9tIFwiLi9ucGNcIjtcbmltcG9ydCB7IHRhbGsgfSBmcm9tIFwiLi9kaWFsb2dcIjtcbmltcG9ydCB7IERpYWxvZywgTlBDUGF0aFR5cGUsIE5QQ1R5cGUgfSBmcm9tIFwiLi90eXBlc1wiO1xuaW1wb3J0IHsgTnBjVXRpbHNVaSB9IGZyb20gJy4vdWknXG5cbmltcG9ydCB7IGNsb3NlQnViYmxlLCBjbG9zZUJ1YmJsZUVuZEFsbCB9IGZyb20gXCIuL2J1YmJsZVwiO1xuXG5leHBvcnQge1xuICAgIGFjdGl2YXRlLFxuICAgIHN0b3BXYWxraW5nLFxuICAgIGZvbGxvd1BhdGgsXG4gICAgY3JlYXRlLFxuICAgIGNyZWF0ZUZyb21FbnRpdHksXG4gICAgaGFuZGxlV2Fsa0F3YXksXG4gICAgcGxheUFuaW1hdGlvbixcbiAgICBzaG93RGVidWcsXG4gICAgdGFsayxcbiAgICBEaWFsb2csXG4gICAgZ2V0RGF0YSxcbiAgICBOUENQYXRoVHlwZSxcbiAgICBOUENUeXBlLFxuICAgIGNoYW5nZUlkbGVBbmltLFxuICAgIHRhbGtCdWJibGUsXG4gICAgY2xvc2VCdWJibGUsXG4gICAgY2xvc2VCdWJibGVFbmRBbGwsXG4gICAgY3JlYXRlRGlhbG9nV2luZG93LFxuICAgIG9wZW5EaWFsb2dXaW5kb3csXG4gICAgY2xvc2VEaWFsb2dXaW5kb3csXG4gICAgTnBjVXRpbHNVaVxufVxuXG5leHBvcnQgY29uc3QgZGVidWdMYWJlbDogc3RyaW5nID0gJ05QQy1Ub29sa2l0J1xuXG5leHBvcnQge1xuXHRQYXRocyxcblx0cGF0aHNcbn0gZnJvbSAnLi91dGlscy9wYXRoJyJdfQ==
package/dist/npc.d.ts CHANGED
@@ -1,5 +1,8 @@
1
1
  import { Entity } from '@dcl/sdk/ecs';
2
- import { Dialog, FollowPathData, ImageData, NPCData } from './types';
2
+ import { Dialog, FollowPathData, ImageData, NPCData, NPCType } from './types';
3
+ type NPCDataFromEntity = Omit<NPCData, 'type'> & {
4
+ type?: NPCType;
5
+ };
3
6
  export declare const walkingTimers: Map<Entity, number>;
4
7
  export declare const npcDataComponent: Map<Entity, any>;
5
8
  export declare let NULL_NPC: Entity;
@@ -8,6 +11,7 @@ export declare let blankDialog: number;
8
11
  export declare function showDebug(debug: boolean): void;
9
12
  export declare function getData(npc: Entity): any;
10
13
  export declare function create(transform: any, data: NPCData): Entity;
14
+ export declare function createFromEntity(entity: Entity, data: NPCDataFromEntity): Entity;
11
15
  export declare function followPath(npc: Entity, data?: FollowPathData): void;
12
16
  export declare function stopWalking(npc: Entity, duration?: number, finished?: boolean): void;
13
17
  export declare function stopPath(npc: Entity): void;
@@ -22,3 +26,4 @@ export declare function talkBubble(npc: Entity, script: Dialog[], startIndex?: n
22
26
  export declare function createDialogWindow(defaultPortrait?: ImageData, sound?: string): Entity;
23
27
  export declare function openDialogWindow(npc: Entity, dialog: Dialog[], startIndex?: number | string): void;
24
28
  export declare function closeDialogWindow(window: Entity): void;
29
+ export {};
package/dist/npc.js CHANGED
@@ -1,12 +1,13 @@
1
- import * as utils from '@dcl-sdk/utils';
2
- import { Animator, AvatarShape, engine, GltfContainer, MeshCollider, MeshRenderer, pointerEventsSystem, Transform } from '@dcl/sdk/ecs';
3
- import { Color3, Quaternion, Vector3 } from '@dcl/sdk/math';
1
+ import { Animator, AvatarShape, engine, GltfContainer, MeshCollider, MeshRenderer, pointerEventsSystem, Transform, TriggerArea, triggerAreaEventsSystem } from '@dcl/sdk/ecs';
2
+ import { Quaternion, Vector3 } from '@dcl/sdk/math';
4
3
  import { bubbles, closeBubble, createDialogBubble, openBubble } from './bubble';
5
4
  import { IsFollowingPath, TrackUserFlag } from './components';
6
5
  import { addDialog, closeDialog, findDialogByName, npcDialogComponent, openDialog } from './dialog';
7
6
  import { faceUserSystem, handleBubbletyping, handleDialogTyping, handlePathTimes, inputListenerSystem } from './systems';
8
7
  import { NPCPathType, NPCState, NPCType } from './types';
9
8
  import { darkTheme, lightTheme } from './ui';
9
+ import { debugTriggers, delayedFunction, clearDelayedFunction } from './utils/utils';
10
+ import { paths } from './utils/path';
10
11
  export const walkingTimers = new Map();
11
12
  export const npcDataComponent = new Map();
12
13
  export let NULL_NPC = 0;
@@ -24,7 +25,9 @@ const animTimers = new Map();
24
25
  const pointReachedCallbacks = new Map();
25
26
  const onFinishCallbacks = new Map();
26
27
  export function showDebug(debug) {
27
- utils.triggers.enableDebugDraw(debug);
28
+ if (debug) {
29
+ debugTriggers();
30
+ }
28
31
  }
29
32
  export function getData(npc) {
30
33
  return npcDataComponent.get(npc);
@@ -105,6 +108,84 @@ export function create(transform, data) {
105
108
  }
106
109
  return npc;
107
110
  }
111
+ export function createFromEntity(entity, data) {
112
+ const npc = entity;
113
+ const resolvedType = (data && data.type !== undefined ? data.type : NPCType.CUSTOM);
114
+ if (!Transform.has(npc)) {
115
+ console.log('createFromEntity: Provided entity is missing Transform component');
116
+ }
117
+ if (resolvedType === NPCType.CUSTOM && !GltfContainer.has(npc)) {
118
+ console.log('createFromEntity: Expected a GltfContainer on CUSTOM NPC entity');
119
+ }
120
+ npcDataComponent.set(npc, {
121
+ introduced: false,
122
+ inCooldown: false,
123
+ coolDownDuration: data && data.coolDownDuration ? data.coolDownDuration : 5,
124
+ faceUser: data && data.faceUser ? data.faceUser : undefined,
125
+ walkingSpeed: 2,
126
+ walkingAnim: data && data.walkingAnim ? data.walkingAnim : undefined,
127
+ pathData: data.pathData ? data.pathData : undefined,
128
+ currentPathData: [],
129
+ manualStop: false,
130
+ pathIndex: 0,
131
+ state: NPCState.STANDING,
132
+ idleAnim: data && data.idleAnim ? data.idleAnim : 'Idle',
133
+ bubbleHeight: data && data.textBubble && data.bubbleHeight ? data.bubbleHeight : undefined,
134
+ bubbleSound: data.dialogSound ? data.dialogSound : undefined,
135
+ hasBubble: data && data.textBubble ? true : false,
136
+ turnSpeed: data && data.turningSpeed ? data.turningSpeed : 2,
137
+ theme: data.darkUI ? darkTheme : lightTheme,
138
+ bubbleXOffset: data.bubbleXOffset ? data.bubbleXOffset : 0,
139
+ bubbleYOffset: data.bubbleYOffset ? data.bubbleYOffset : 0
140
+ });
141
+ if (data && data.noUI) {
142
+ }
143
+ else if (data && data.portrait) {
144
+ addDialog(npc, data && data.dialogSound ? data.dialogSound : undefined, typeof data.portrait === `string` ? { path: data.portrait } : data.portrait);
145
+ }
146
+ else {
147
+ addDialog(npc, data && data.dialogSound ? data.dialogSound : undefined);
148
+ }
149
+ if (data && data.textBubble) {
150
+ createDialogBubble(npc, npcDataComponent.get(npc).bubbleHeight);
151
+ }
152
+ onActivateCbs.set(npc, (other) => {
153
+ data.onActivate(other);
154
+ });
155
+ if (data && data.hasOwnProperty('onWalkAway')) {
156
+ onWalkAwayCbs.set(npc, (other) => {
157
+ if (!data || !data.continueOnWalkAway) {
158
+ if (npcDialogComponent.has(npc)) {
159
+ npcDialogComponent.get(npc).visible = false;
160
+ }
161
+ }
162
+ else {
163
+ if (npcDialogComponent.has(npc)) {
164
+ npcDialogComponent.get(npc).visible = false;
165
+ }
166
+ }
167
+ data.onWalkAway(other);
168
+ });
169
+ }
170
+ const dataWithType = { ...data, type: resolvedType };
171
+ seedAnimatorForExisting(npc, dataWithType);
172
+ addClickReactions(npc, dataWithType);
173
+ addTriggerArea(npc, dataWithType);
174
+ if (data && data.pathData && data.pathData.speed) {
175
+ let npcData = npcDataComponent.get(npc);
176
+ npcData.walkingSpeed = data.pathData.speed;
177
+ }
178
+ if (data && data.coolDownDuration) {
179
+ let npcData = npcDataComponent.get(npc);
180
+ npcData.coolDownDuration = data.coolDownDuration;
181
+ }
182
+ if (data && data.pathData) {
183
+ let npcData = npcDataComponent.get(npc);
184
+ npcData.pathData.loop = true;
185
+ followPath(npc, npcData.pathData);
186
+ }
187
+ return npc;
188
+ }
108
189
  function addNPCBones(npc, data) {
109
190
  const modelIsString = data && data.model && typeof data.model === `string`;
110
191
  const modelAvatarData = modelIsString
@@ -162,6 +243,42 @@ function addNPCBones(npc, data) {
162
243
  break;
163
244
  }
164
245
  }
246
+ function seedAnimatorForExisting(npc, data) {
247
+ if (data.type !== NPCType.CUSTOM)
248
+ return;
249
+ const idleClip = data && data.idleAnim ? data.idleAnim : 'Idle';
250
+ if (!Animator.has(npc)) {
251
+ Animator.create(npc, {
252
+ states: [
253
+ {
254
+ clip: idleClip,
255
+ loop: true
256
+ }
257
+ ]
258
+ });
259
+ }
260
+ else {
261
+ const animations = Animator.getMutable(npc);
262
+ if (animations.states.filter((animation) => animation.clip === idleClip).length === 0) {
263
+ animations.states.push({ clip: idleClip, loop: true });
264
+ }
265
+ }
266
+ let npcData = npcDataComponent.get(npc);
267
+ npcData.idleAnim = idleClip;
268
+ npcData.lastPlayedAnim = idleClip;
269
+ if (typeof idleClip === 'string' && idleClip.length > 0) {
270
+ Animator.playSingleAnimation(npc, idleClip);
271
+ }
272
+ if (data && data.walkingAnim) {
273
+ const animations = Animator.getMutable(npc);
274
+ if (typeof data.walkingAnim === 'string' && data.walkingAnim.length > 0 && animations.states.filter((animation) => animation.clip === data.walkingAnim).length === 0) {
275
+ animations.states.push({ clip: data.walkingAnim, loop: true });
276
+ }
277
+ if (typeof data.walkingAnim === 'string') {
278
+ npcData.walkingAnim = data.walkingAnim;
279
+ }
280
+ }
281
+ }
165
282
  function addClickReactions(npc, data) {
166
283
  let activateButton = data && data.onlyClickTrigger ? 0 : 1;
167
284
  pointerEventsSystem.onPointerDown(npc, function () {
@@ -170,7 +287,7 @@ function addClickReactions(npc, data) {
170
287
  activate(npc, engine.PlayerEntity);
171
288
  }, {
172
289
  button: activateButton,
173
- hoverText: data && data.hoverText ? data.hoverText : 'Talk',
290
+ hoverText: data && data.hoverText ? String(data.hoverText) : 'Talk',
174
291
  showFeedback: data && data.onlyExternalTrigger ? false : true
175
292
  });
176
293
  if (data && data.onlyExternalTrigger) {
@@ -209,13 +326,31 @@ function addTriggerArea(npc, data) {
209
326
  };
210
327
  }
211
328
  if (triggerData.onCameraEnter || triggerData.onCameraExit) {
212
- utils.triggers.addTrigger(npc, triggerData.layer != undefined ? triggerData.layer : utils.NO_LAYERS, triggerData.triggeredByLayer != undefined ? triggerData.triggeredByLayer : utils.LAYER_1, [{ type: 'sphere', position: Vector3.Zero(), radius: data.reactDistance != undefined ? data.reactDistance : 6 }], (other) => {
213
- if (triggerData.onCameraEnter)
214
- triggerData.onCameraEnter(other);
215
- }, (other) => {
216
- if (triggerData.onCameraExit)
217
- triggerData.onCameraExit(other);
218
- }, Color3.Red());
329
+ let sphereScale = {
330
+ x: data.reactDistance != undefined ? data.reactDistance : 6,
331
+ y: data.reactDistance != undefined ? data.reactDistance : 6,
332
+ z: data.reactDistance != undefined ? data.reactDistance : 6
333
+ };
334
+ let triggerSphere = engine.addEntity();
335
+ Transform.create(triggerSphere, {
336
+ position: Vector3.Zero(),
337
+ rotation: Quaternion.Zero(),
338
+ scale: sphereScale,
339
+ parent: npc
340
+ });
341
+ TriggerArea.setSphere(triggerSphere);
342
+ triggerAreaEventsSystem.onTriggerEnter(triggerSphere, function (result) {
343
+ if (triggerData.onCameraEnter) {
344
+ const entity = (result?.trigger?.entity ?? engine.PlayerEntity);
345
+ triggerData.onCameraEnter(entity);
346
+ }
347
+ });
348
+ triggerAreaEventsSystem.onTriggerExit(triggerSphere, function (result) {
349
+ if (triggerData.onCameraExit) {
350
+ const entity = (result?.trigger?.entity ?? engine.PlayerEntity);
351
+ triggerData.onCameraExit(entity);
352
+ }
353
+ });
219
354
  }
220
355
  }
221
356
  export function followPath(npc, data) {
@@ -286,14 +421,14 @@ function walkNPC(npc, npcData, type, duration, path, pointReachedCallback, finis
286
421
  IsFollowingPath.create(npc);
287
422
  if (type) {
288
423
  if (type == NPCPathType.RIGID_PATH) {
289
- utils.paths.startStraightPath(npc, path, duration, true, () => {
424
+ paths.startStraightPath(npc, path, duration, true, () => {
290
425
  finishedCallback();
291
426
  }, () => {
292
427
  pointReachedCallback();
293
428
  });
294
429
  }
295
430
  else {
296
- utils.paths.startSmoothPath(npc, path, duration, 30, true, () => {
431
+ paths.startSmoothPath(npc, path, duration, 30, true, () => {
297
432
  finishedCallback();
298
433
  }, () => {
299
434
  pointReachedCallback();
@@ -301,7 +436,7 @@ function walkNPC(npc, npcData, type, duration, path, pointReachedCallback, finis
301
436
  }
302
437
  }
303
438
  else {
304
- utils.paths.startSmoothPath(npc, path, duration, 20, true, () => {
439
+ paths.startSmoothPath(npc, path, duration, 20, true, () => {
305
440
  finishedCallback();
306
441
  }, () => {
307
442
  pointReachedCallback();
@@ -321,7 +456,7 @@ export function stopWalking(npc, duration, finished) {
321
456
  npcData.manualStop = true;
322
457
  stopPath(npc);
323
458
  if (duration) {
324
- utils.timers.setTimeout(() => {
459
+ delayedFunction(() => {
325
460
  if (npcData.path) {
326
461
  Animator.stopAllAnimations(npc, true);
327
462
  if (npcDataComponent.get(npc).walkingAnim) {
@@ -348,7 +483,7 @@ export function stopWalking(npc, duration, finished) {
348
483
  }
349
484
  }
350
485
  export function stopPath(npc) {
351
- utils.paths.stopPath(npc);
486
+ paths.stopPath(npc);
352
487
  IsFollowingPath.deleteFrom(npc);
353
488
  let npcData = npcDataComponent.get(npc);
354
489
  if (npcData.walkingAnim) {
@@ -395,11 +530,12 @@ export function activate(npc, other) {
395
530
  }
396
531
  isCooldown.set(npc, true);
397
532
  npcData.inCooldown = true;
398
- utils.timers.setTimeout(function () {
533
+ delayedFunction(() => {
399
534
  isCooldown.delete(npc);
400
535
  npcDataComponent.get(npc).inCooldown = false;
536
+ console.log("cooldown deleted");
401
537
  }, 1000 * npcData.coolDownDuration);
402
- console.log('activated npc,', npcDataComponent.get(npc));
538
+ console.log('activated npc,', npcDataComponent.get(npc), "cooldown duration: ", npcData.coolDownDuration);
403
539
  }
404
540
  function endInteraction(npc) {
405
541
  let npcData = npcDataComponent.get(npc);
@@ -436,7 +572,7 @@ export function playAnimation(npc, anim, noLoop, duration) {
436
572
  animations.states.push({ clip: anim, loop: noLoop ? false : true });
437
573
  }
438
574
  if (npcData.state == NPCState.FOLLOWPATH) {
439
- utils.paths.stopPath(npc);
575
+ paths.stopPath(npc);
440
576
  }
441
577
  clearAnimationTimer(npc);
442
578
  Animator.stopAllAnimations(npc, true);
@@ -444,7 +580,7 @@ export function playAnimation(npc, anim, noLoop, duration) {
444
580
  if (duration) {
445
581
  console.log('have a duration to play animation');
446
582
  clearAnimationTimer(npc);
447
- animTimers.set(npc, utils.timers.setTimeout(() => {
583
+ animTimers.set(npc, delayedFunction(() => {
448
584
  clearAnimationTimer(npc);
449
585
  Animator.stopAllAnimations(npc, true);
450
586
  if (npcData.idleAnim) {
@@ -499,10 +635,10 @@ export function closeDialogWindow(window) {
499
635
  }
500
636
  function clearAnimationTimer(npc) {
501
637
  if (animTimers.has(npc)) {
502
- utils.timers.clearTimeout(animTimers.get(npc));
638
+ clearDelayedFunction(animTimers.get(npc));
503
639
  animTimers.delete(npc);
504
640
  return true;
505
641
  }
506
642
  return false;
507
643
  }
508
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibnBjLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL25wYy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEtBQUssS0FBSyxNQUFNLGdCQUFnQixDQUFBO0FBQ3ZDLE9BQU8sRUFDTCxRQUFRLEVBQ1IsV0FBVyxFQUNYLE1BQU0sRUFFTixhQUFhLEVBRWIsWUFBWSxFQUNaLFlBQVksRUFHWixtQkFBbUIsRUFDbkIsU0FBUyxFQUdWLE1BQU0sY0FBYyxDQUFBO0FBQ3JCLE9BQU8sRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLE9BQU8sRUFBRSxNQUFNLGVBQWUsQ0FBQTtBQUMzRCxPQUFPLEVBQUUsT0FBTyxFQUFFLFdBQVcsRUFBRSxrQkFBa0IsRUFBRSxVQUFVLEVBQUUsTUFBTSxVQUFVLENBQUE7QUFDL0UsT0FBTyxFQUFFLGVBQWUsRUFBRSxhQUFhLEVBQUUsTUFBTSxjQUFjLENBQUE7QUFDN0QsT0FBTyxFQUFFLFNBQVMsRUFBRSxXQUFXLEVBQUUsZ0JBQWdCLEVBQUUsa0JBQWtCLEVBQUUsVUFBVSxFQUFFLE1BQU0sVUFBVSxDQUFBO0FBQ25HLE9BQU8sRUFBRSxjQUFjLEVBQUUsa0JBQWtCLEVBQUUsa0JBQWtCLEVBQUUsZUFBZSxFQUFFLG1CQUFtQixFQUFFLE1BQU0sV0FBVyxDQUFBO0FBQ3hILE9BQU8sRUFBOEMsV0FBVyxFQUFFLFFBQVEsRUFBRSxPQUFPLEVBQWUsTUFBTSxTQUFTLENBQUE7QUFDakgsT0FBTyxFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQUUsTUFBTSxNQUFNLENBQUE7QUFFNUMsTUFBTSxDQUFDLE1BQU0sYUFBYSxHQUF3QixJQUFJLEdBQUcsRUFBRSxDQUFBO0FBQzNELE1BQU0sQ0FBQyxNQUFNLGdCQUFnQixHQUFxQixJQUFJLEdBQUcsRUFBRSxDQUFBO0FBQzNELE1BQU0sQ0FBQyxJQUFJLFFBQVEsR0FBVyxDQUFXLENBQUE7QUFDekMsTUFBTSxDQUFDLElBQUksU0FBUyxHQUFXLFFBQVEsQ0FBQTtBQUN2QyxNQUFNLENBQUMsSUFBSSxXQUFXLEdBQVcsQ0FBQyxDQUFBO0FBRWxDLE1BQU0sQ0FBQyxTQUFTLENBQUMsZUFBZSxDQUFDLENBQUE7QUFDakMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxrQkFBa0IsQ0FBQyxDQUFBO0FBQ3BDLE1BQU0sQ0FBQyxTQUFTLENBQUMsa0JBQWtCLENBQUMsQ0FBQTtBQUNwQyxNQUFNLENBQUMsU0FBUyxDQUFDLGNBQWMsQ0FBQyxDQUFBO0FBQ2hDLE1BQU0sQ0FBQyxTQUFTLENBQUMsbUJBQW1CLENBQUMsQ0FBQTtBQUdyQyxNQUFNLFVBQVUsR0FBcUIsSUFBSSxHQUFHLEVBQUUsQ0FBQTtBQUM5QyxNQUFNLGFBQWEsR0FBcUIsSUFBSSxHQUFHLEVBQUUsQ0FBQTtBQUNqRCxNQUFNLGFBQWEsR0FBcUIsSUFBSSxHQUFHLEVBQUUsQ0FBQTtBQUNqRCxNQUFNLFVBQVUsR0FBd0IsSUFBSSxHQUFHLEVBQUUsQ0FBQTtBQUNqRCxNQUFNLHFCQUFxQixHQUFxQixJQUFJLEdBQUcsRUFBRSxDQUFBO0FBQ3pELE1BQU0saUJBQWlCLEdBQXFCLElBQUksR0FBRyxFQUFFLENBQUE7QUFFckQsTUFBTSxVQUFVLFNBQVMsQ0FBQyxLQUFjO0lBQ3RDLEtBQUssQ0FBQyxRQUFRLENBQUMsZUFBZSxDQUFDLEtBQUssQ0FBQyxDQUFBO0FBQ3ZDLENBQUM7QUFFRCxNQUFNLFVBQVUsT0FBTyxDQUFDLEdBQVc7SUFDakMsT0FBTyxnQkFBZ0IsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUE7QUFDbEMsQ0FBQztBQUVELE1BQU0sVUFBVSxNQUFNLENBQUMsU0FBYyxFQUFFLElBQWE7SUFDbEQsSUFBSSxHQUFHLEdBQUcsTUFBTSxDQUFDLFNBQVMsRUFBRSxDQUFBO0lBRTVCLElBQUksQ0FBQyxHQUFrQjtRQUNyQixRQUFRLEVBQUUsU0FBUyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUMzRSxRQUFRLEVBQUUsU0FBUyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLElBQUksRUFBRTtRQUNyRSxLQUFLLEVBQUUsU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLEdBQUcsRUFBRTtLQUN6RCxDQUFBO0lBQ0QsU0FBUyxDQUFDLE1BQU0sQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUE7SUFFeEIsZ0JBQWdCLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRTtRQUN4QixVQUFVLEVBQUUsS0FBSztRQUNqQixVQUFVLEVBQUUsS0FBSztRQUNqQixnQkFBZ0IsRUFBRSxJQUFJLElBQUksSUFBSSxDQUFDLGdCQUFnQixDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDM0UsUUFBUSxFQUFFLElBQUksSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxTQUFTO1FBQzNELFlBQVksRUFBRSxDQUFDO1FBQ2YsV0FBVyxFQUFFLElBQUksSUFBSSxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxTQUFTO1FBQ3BFLFFBQVEsRUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxTQUFTO1FBQ25ELGVBQWUsRUFBRSxFQUFFO1FBQ25CLFVBQVUsRUFBRSxLQUFLO1FBQ2pCLFNBQVMsRUFBRSxDQUFDO1FBQ1osS0FBSyxFQUFFLFFBQVEsQ0FBQyxRQUFRO1FBQ3hCLFFBQVEsRUFBRSxJQUFJLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsTUFBTTtRQUN4RCxZQUFZLEVBQUUsSUFBSSxJQUFJLElBQUksQ0FBQyxVQUFVLElBQUksSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsU0FBUztRQUMxRixXQUFXLEVBQUUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsU0FBUztRQUM1RCxTQUFTLEVBQUUsSUFBSSxJQUFJLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSztRQUNqRCxTQUFTLEVBQUUsSUFBSSxJQUFJLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDNUQsS0FBSyxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsVUFBVTtRQUMzQyxhQUFhLEVBQUUsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUMxRCxhQUFhLEVBQUUsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsQ0FBQztLQUMzRCxDQUFDLENBQUE7SUFFRixJQUFJLElBQUksSUFBSSxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDeEIsQ0FBQztTQUFNLElBQUksSUFBSSxJQUFJLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUNqQyxTQUFTLENBQ1AsR0FBRyxFQUNILElBQUksSUFBSSxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxTQUFTLEVBQ3ZELE9BQU8sSUFBSSxDQUFDLFFBQVEsS0FBSyxRQUFRLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FDNUUsQ0FBQTtJQUNILENBQUM7U0FBTSxDQUFDO1FBQ04sU0FBUyxDQUFDLEdBQUcsRUFBRSxJQUFJLElBQUksSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUE7SUFDekUsQ0FBQztJQUVELElBQUksSUFBSSxJQUFJLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztRQUM1QixrQkFBa0IsQ0FBQyxHQUFHLEVBQUUsZ0JBQWdCLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLFlBQVksQ0FBQyxDQUFBO0lBQ2pFLENBQUM7SUFFRCxhQUFhLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDLEtBQWEsRUFBRSxFQUFFO1FBQ3ZDLElBQUksQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLENBQUE7SUFDeEIsQ0FBQyxDQUFDLENBQUE7SUFFRixJQUFJLElBQUksSUFBSSxJQUFJLENBQUMsY0FBYyxDQUFDLFlBQVksQ0FBQyxFQUFFLENBQUM7UUFDOUMsYUFBYSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxLQUFhLEVBQUUsRUFBRTtZQUN2QyxJQUFJLENBQUMsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLGtCQUFrQixFQUFFLENBQUM7Z0JBQ3RDLElBQUksa0JBQWtCLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUM7b0JBQ2hDLGtCQUFrQixDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxPQUFPLEdBQUcsS0FBSyxDQUFBO2dCQUM3QyxDQUFDO1lBQ0gsQ0FBQztpQkFBTSxDQUFDO2dCQUNOLElBQUksa0JBQWtCLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUM7b0JBQ2hDLGtCQUFrQixDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxPQUFPLEdBQUcsS0FBSyxDQUFBO2dCQUM3QyxDQUFDO1lBQ0gsQ0FBQztZQUNELElBQUksQ0FBQyxVQUFXLENBQUMsS0FBSyxDQUFDLENBQUE7UUFDekIsQ0FBQyxDQUFDLENBQUE7SUFDSixDQUFDO0lBRUQsV0FBVyxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsQ0FBQTtJQUN0QixpQkFBaUIsQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLENBQUE7SUFDNUIsY0FBYyxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsQ0FBQTtJQUV6QixJQUFJLElBQUksSUFBSSxJQUFJLENBQUMsUUFBUSxJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDakQsSUFBSSxPQUFPLEdBQUcsZ0JBQWdCLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFBO1FBQ3ZDLE9BQU8sQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUE7SUFDNUMsQ0FBQztJQUVELElBQUksSUFBSSxJQUFJLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO1FBQ2xDLElBQUksT0FBTyxHQUFHLGdCQUFnQixDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQTtRQUN2QyxPQUFPLENBQUMsZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFBO0lBQ2xELENBQUM7SUFFRCxJQUFJLElBQUksSUFBSSxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7UUFDMUIsSUFBSSxPQUFPLEdBQUcsZ0JBQWdCLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFBO1FBQ3ZDLE9BQU8sQ0FBQyxRQUFRLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQTtRQUM1QixVQUFVLENBQUMsR0FBRyxFQUFFLE9BQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQTtJQUNuQyxDQUFDO0lBRUQsT0FBTyxHQUFHLENBQUE7QUFDWixDQUFDO0FBRUQsU0FBUyxXQUFXLENBQUMsR0FBVyxFQUFFLElBQWE7SUFDN0MsTUFBTSxhQUFhLEdBQUcsSUFBSSxJQUFJLElBQUksQ0FBQyxLQUFLLElBQUksT0FBTyxJQUFJLENBQUMsS0FBSyxLQUFLLFFBQVEsQ0FBQTtJQUMxRSxNQUFNLGVBQWUsR0FBOEIsYUFBYTtRQUM5RCxDQUFDLENBQUMsU0FBUztRQUNYLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxJQUFLLElBQUksQ0FBQyxLQUFhLENBQUMsU0FBUztZQUMzQyxDQUFDLENBQUUsSUFBSSxDQUFDLEtBQXVCO1lBQy9CLENBQUMsQ0FBQyxTQUFTLENBQUE7SUFDZixNQUFNLGFBQWEsR0FBZ0MsYUFBYTtRQUM5RCxDQUFDLENBQUMsU0FBUztRQUNYLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxJQUFLLElBQUksQ0FBQyxLQUFhLENBQUMsR0FBRztZQUNyQyxDQUFDLENBQUUsSUFBSSxDQUFDLEtBQXlCO1lBQ2pDLENBQUMsQ0FBQyxTQUFTLENBQUE7SUFFZixRQUFRLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUNsQixLQUFLLE9BQU8sQ0FBQyxNQUFNO1lBQ2pCLFdBQVcsQ0FBQyxNQUFNLENBQ2hCLEdBQUcsRUFDSCxDQUFDLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLElBQUksQ0FBQyxlQUFlO2dCQUN0QyxDQUFDLENBQUM7b0JBQ0EsRUFBRSxFQUFFLEtBQUs7b0JBQ1QsSUFBSSxFQUFFLEtBQUs7b0JBQ1gsU0FBUyxFQUFFLGtEQUFrRDtvQkFDN0QsTUFBTSxFQUFFLEVBQUU7b0JBQ1YsU0FBUyxFQUFFO3dCQUNULG1EQUFtRDt3QkFDbkQsdURBQXVEO3dCQUN2RCxvREFBb0Q7d0JBQ3BELDZEQUE2RDt3QkFDN0Qsc0RBQXNEO3dCQUN0RCx5REFBeUQ7cUJBQzFEO2lCQUNGO2dCQUNELENBQUMsQ0FBQyxlQUFlLENBQ3BCLENBQUE7WUFDRCxNQUFLO1FBRVAsS0FBSyxPQUFPLENBQUMsTUFBTTtZQUNqQixhQUFhLENBQUMsTUFBTSxDQUNsQixHQUFHLEVBQ0gsYUFBYSxJQUFJLE9BQU8sSUFBSSxDQUFDLEtBQUssS0FBSyxRQUFRLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxFQUFFLElBQUksSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsYUFBYSxDQUNoSCxDQUFBO1lBQ0QsUUFBUSxDQUFDLE1BQU0sQ0FBQyxHQUFHLEVBQUU7Z0JBQ25CLE1BQU0sRUFBRTtvQkFDTjt3QkFDRSxJQUFJLEVBQUUsSUFBSSxJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLE1BQU07d0JBQ3BELElBQUksRUFBRSxJQUFJO3FCQUNYO2lCQUNGO2FBQ0YsQ0FBQyxDQUFBO1lBRUYsSUFBSSxPQUFPLEdBQUcsZ0JBQWdCLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFBO1lBQ3ZDLE9BQU8sQ0FBQyxRQUFRLEdBQUcsSUFBSSxJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQTtZQUNqRSxPQUFPLENBQUMsY0FBYyxHQUFHLGdCQUFnQixDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxRQUFRLENBQUE7WUFFM0QsUUFBUSxDQUFDLG1CQUFtQixDQUFDLEdBQUcsRUFBRSxnQkFBZ0IsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUE7WUFFckUsSUFBSSxJQUFJLElBQUksSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO2dCQUM3QixnQkFBZ0IsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUE7Z0JBQ3hELElBQUksVUFBVSxHQUFHLFFBQVEsQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLENBQUE7Z0JBQ3pDLFVBQVUsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxXQUFXLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUE7WUFDaEUsQ0FBQztZQUVELE1BQUs7UUFFUCxLQUFLLE9BQU8sQ0FBQyxLQUFLO1lBQ2hCLFlBQVksQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUE7WUFDeEIsWUFBWSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQTtZQUN4QixNQUFLO0lBQ1QsQ0FBQztBQUNILENBQUM7QUFFRCxTQUFTLGlCQUFpQixDQUFDLEdBQVcsRUFBRSxJQUFhO0lBQ25ELElBQUksY0FBYyxHQUFHLElBQUksSUFBSSxJQUFJLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxHQUF3QixDQUFDLEVBQXVCLENBQUE7SUFtQnBHLG1CQUFtQixDQUFDLGFBQWEsQ0FDL0IsR0FBRyxFQUNIO1FBQ0UsSUFBSSxVQUFVLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxJQUFJLGtCQUFrQixDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxPQUFPO1lBQUUsT0FBTTtRQUN0RSxRQUFRLENBQUMsR0FBRyxFQUFFLE1BQU0sQ0FBQyxZQUFZLENBQUMsQ0FBQTtJQUNwQyxDQUFDLEVBQ0Q7UUFDRSxNQUFNLEVBQUUsY0FBYztRQUN0QixTQUFTLEVBQUUsSUFBSSxJQUFJLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLE1BQU07UUFDM0QsWUFBWSxFQUFFLElBQUksSUFBSSxJQUFJLENBQUMsbUJBQW1CLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSTtLQUM5RCxDQUNGLENBQUE7SUFFRCxJQUFJLElBQUksSUFBSSxJQUFJLENBQUMsbUJBQW1CLEVBQUUsQ0FBQztRQUNyQyxtQkFBbUIsQ0FBQyxtQkFBbUIsQ0FBQyxHQUFHLENBQUMsQ0FBQTtJQUM5QyxDQUFDO0FBQ0gsQ0FBQztBQUVELFNBQVMsY0FBYyxDQUFDLEdBQVcsRUFBRSxJQUFhO0lBQ2hELElBQUksV0FBVyxHQUFnQixFQUFFLENBQUE7SUFFakMsSUFBSSxDQUFDLElBQUksSUFBSSxDQUFDLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxtQkFBbUIsSUFBSSxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsSUFBSSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsRUFBRSxDQUFDO1FBQ2pHLGFBQWEsQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUMsS0FBYSxFQUFFLEVBQUU7WUFDdkMsSUFBSSxVQUFVLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUM7Z0JBQ3hCLE9BQU8sQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLGNBQWMsQ0FBQyxDQUFBO2dCQUNoQyxPQUFNO1lBQ1IsQ0FBQztpQkFBTSxJQUNMLENBQUMsa0JBQWtCLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxJQUFJLGtCQUFrQixDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxPQUFPLENBQUM7Z0JBQ3BFLENBQUMsSUFBSSxJQUFJLElBQUksQ0FBQyxtQkFBbUIsQ0FBQztnQkFDbEMsQ0FBQyxJQUFJLElBQUksSUFBSSxDQUFDLGdCQUFnQixDQUFDLEVBQy9CLENBQUM7Z0JBQ0QsT0FBTTtZQUNSLENBQUM7WUFDRCxJQUFJLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxDQUFBO1FBQ3hCLENBQUMsQ0FBQyxDQUFBO1FBQ0YsV0FBVyxDQUFDLGFBQWEsR0FBRyxhQUFhLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFBO0lBQ3BELENBQUM7SUFHRCxJQUFJLENBQUMsSUFBSSxJQUFJLENBQUMsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLEVBQUUsQ0FBQztRQUNoRCxXQUFXLENBQUMsWUFBWSxHQUFHLENBQUMsS0FBSyxFQUFFLEVBQUU7WUFDbkMsY0FBYyxDQUFDLEdBQUcsRUFBRSxLQUFLLENBQUMsQ0FBQTtRQUM1QixDQUFDLENBQUE7SUFDSCxDQUFDO0lBR0QsSUFBSSxDQUFDLElBQUksSUFBSSxDQUFDLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxtQkFBbUIsSUFBSSxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsSUFBSSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsRUFBRSxDQUFDO1FBQ2pHLFdBQVcsQ0FBQyxhQUFhLEdBQUcsQ0FBQyxLQUFLLEVBQUUsRUFBRTtZQUNwQyxJQUFJLFVBQVUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQztnQkFDeEIsT0FBTyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsY0FBYyxDQUFDLENBQUE7Z0JBQ2hDLE9BQU07WUFDUixDQUFDO1lBUUQsUUFBUSxDQUFDLEdBQUcsRUFBRSxLQUFLLENBQUMsQ0FBQTtRQUN0QixDQUFDLENBQUE7SUFDSCxDQUFDO0lBR0QsSUFBSSxXQUFXLENBQUMsYUFBYSxJQUFJLFdBQVcsQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQUMxRCxLQUFLLENBQUMsUUFBUSxDQUFDLFVBQVUsQ0FDdkIsR0FBRyxFQUNILFdBQVcsQ0FBQyxLQUFLLElBQUksU0FBUyxDQUFDLENBQUMsQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsU0FBUyxFQUNwRSxXQUFXLENBQUMsZ0JBQWdCLElBQUksU0FBUyxDQUFDLENBQUMsQ0FBQyxXQUFXLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxPQUFPLEVBQ3hGLENBQUMsRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxPQUFPLENBQUMsSUFBSSxFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksQ0FBQyxhQUFhLElBQUksU0FBUyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUNoSCxDQUFDLEtBQUssRUFBRSxFQUFFO1lBQ1IsSUFBSSxXQUFXLENBQUMsYUFBYTtnQkFBRSxXQUFXLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxDQUFBO1FBQ2pFLENBQUMsRUFDRCxDQUFDLEtBQUssRUFBRSxFQUFFO1lBQ1IsSUFBSSxXQUFXLENBQUMsWUFBWTtnQkFBRSxXQUFXLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxDQUFBO1FBQy9ELENBQUMsRUFDRCxNQUFNLENBQUMsR0FBRyxFQUFFLENBQ2IsQ0FBQTtJQUNILENBQUM7QUFDSCxDQUFDO0FBRUQsTUFBTSxVQUFVLFVBQVUsQ0FBQyxHQUFXLEVBQUUsSUFBcUI7SUFDM0QsSUFBSSxPQUFPLEdBQUcsZ0JBQWdCLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFBO0lBQ3ZDLElBQUksSUFBSSxHQUFVLEVBQUUsQ0FBQTtJQUVwQixJQUFJLE9BQU8sQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUNyQixJQUFJLGFBQWEsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQztZQUMzQixhQUFhLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxDQUFBO1FBQy9CLENBQUM7SUFDSCxDQUFDO0lBRUQsSUFBSSxPQUFPLENBQUMsVUFBVSxFQUFFLENBQUM7UUFDdkIsSUFBSSxRQUFRLEdBQUcsT0FBTyxDQUFDLFFBQVEsQ0FBQyxhQUFhLENBQUE7UUFDN0MsSUFBSSxZQUFZLEdBQVcsYUFBYSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUUsQ0FBQTtRQUNsRCxPQUFPLENBQUMsR0FBRyxDQUFDLGlCQUFpQixFQUFFLFlBQVksQ0FBQyxDQUFBO1FBQzVDLElBQUksWUFBWSxFQUFFLENBQUM7WUFDakIsUUFBUSxJQUFJLFlBQVksQ0FBQTtRQUMxQixDQUFDO1FBRUQsSUFBSSxJQUFJLEdBQVUsRUFBRSxDQUFBO1FBQ3BCLE9BQU8sQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQU0sRUFBRSxFQUFFO1lBQ3ZDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUE7UUFDZCxDQUFDLENBQUMsQ0FBQTtRQUNGLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFFLE9BQU8sQ0FBQyxTQUFTLENBQUMsQ0FBQTtRQUVqQyxJQUFJLEdBQUcsR0FBRyxTQUFTLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLFFBQVEsQ0FBQTtRQUNyQyxJQUFJLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFBO1FBQ2pELE9BQU8sQ0FDTCxHQUFHLEVBQ0gsT0FBTyxFQUNQLE9BQU8sQ0FBQyxRQUFRLENBQUMsUUFBUSxFQUN6QixRQUFRLEVBQ1IsSUFBSSxFQUNKLHFCQUFxQixDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsRUFDOUIsaUJBQWlCLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUMzQixDQUFBO0lBQ0gsQ0FBQztTQUFNLENBQUM7UUFDTixJQUFJLElBQUksRUFBRSxDQUFDO1lBQ1QsT0FBTyxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUE7WUFFdkIsSUFBSSxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7Z0JBQ3ZCLElBQUksQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsYUFBYSxHQUFHLENBQUMsQ0FBQyxDQUFBO1lBQzlDLENBQUM7WUFFRCxJQUFJLEdBQUcsR0FBRyxTQUFTLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLFFBQVEsQ0FBQTtZQUNyQyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFBO1lBQzlDLElBQUksQ0FBQyxJQUFJLEVBQUUsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUU7Z0JBQ3ZCLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUE7WUFDZCxDQUFDLENBQUMsQ0FBQTtZQUVGLGlCQUFpQixDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFO2dCQUM5QixPQUFPLENBQUMsR0FBRyxDQUFDLHNCQUFzQixDQUFDLENBQUE7Z0JBQ25DLElBQUksSUFBSSxJQUFJLElBQUksQ0FBQyxnQkFBZ0IsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztvQkFDaEQsSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUE7Z0JBQ3pCLENBQUM7Z0JBQ0QsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFBO1lBQ2YsQ0FBQyxDQUFDLENBQUE7WUFFRixxQkFBcUIsQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRTtnQkFDbEMsT0FBTyxDQUFDLEdBQUcsQ0FBQywyQkFBMkIsQ0FBQyxDQUFBO2dCQUN4QyxJQUFJLElBQUksR0FBRyxnQkFBZ0IsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUE7Z0JBQ3BDLElBQUksQ0FBQyxTQUFTLElBQUksQ0FBQyxDQUFBO2dCQUNuQixJQUFJLENBQUMsc0JBQXNCLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFBO1lBQ3ZFLENBQUMsQ0FBQyxDQUFBO1lBQ0YsT0FBTyxDQUNMLEdBQUcsRUFDSCxPQUFPLEVBQ1AsSUFBSSxDQUFDLFFBQVMsRUFDZCxJQUFJLENBQUMsYUFBYSxFQUNsQixJQUFJLEVBQ0oscUJBQXFCLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxFQUM5QixpQkFBaUIsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQzNCLENBQUE7UUFDSCxDQUFDO2FBQU0sQ0FBQztZQUNOLElBQUksT0FBTyxDQUFDLFVBQVUsRUFBRSxDQUFDO2dCQUN2QixPQUFPLENBQUMsR0FBRyxDQUFDLDZEQUE2RCxDQUFDLENBQUE7WUFDNUUsQ0FBQztpQkFBTSxDQUFDO2dCQUNOLE9BQU8sQ0FBQyxHQUFHLENBQUMsMERBQTBELENBQUMsQ0FBQTtZQUN6RSxDQUFDO1FBQ0gsQ0FBQztJQUNILENBQUM7QUFDSCxDQUFDO0FBRUQsU0FBUyxPQUFPLENBQ2QsR0FBVyxFQUNYLE9BQVksRUFDWixJQUFpQixFQUNqQixRQUFnQixFQUNoQixJQUFlLEVBQ2Ysb0JBQTBCLEVBQzFCLGdCQUFzQjtJQUV0QixJQUFJLGVBQWUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQztRQUM3QixlQUFlLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxDQUFBO1FBQy9CLGFBQWEsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUE7SUFDM0IsQ0FBQztJQUNELGVBQWUsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUE7SUFFM0IsSUFBSSxJQUFJLEVBQUUsQ0FBQztRQUNULElBQUksSUFBSSxJQUFJLFdBQVcsQ0FBQyxVQUFVLEVBQUUsQ0FBQztZQUNuQyxLQUFLLENBQUMsS0FBSyxDQUFDLGlCQUFpQixDQUMzQixHQUFHLEVBQ0gsSUFBSSxFQUNKLFFBQVEsRUFDUixJQUFJLEVBQ0osR0FBRyxFQUFFO2dCQUNILGdCQUFnQixFQUFFLENBQUE7WUFDcEIsQ0FBQyxFQUNELEdBQUcsRUFBRTtnQkFDSCxvQkFBb0IsRUFBRSxDQUFBO1lBQ3hCLENBQUMsQ0FDRixDQUFBO1FBQ0gsQ0FBQzthQUFNLENBQUM7WUFDTixLQUFLLENBQUMsS0FBSyxDQUFDLGVBQWUsQ0FDekIsR0FBRyxFQUNILElBQUksRUFDSixRQUFRLEVBQ1IsRUFBRSxFQUNGLElBQUksRUFDSixHQUFHLEVBQUU7Z0JBQ0gsZ0JBQWdCLEVBQUUsQ0FBQTtZQUNwQixDQUFDLEVBQ0QsR0FBRyxFQUFFO2dCQUNILG9CQUFvQixFQUFFLENBQUE7WUFDeEIsQ0FBQyxDQUNGLENBQUE7UUFDSCxDQUFDO0lBQ0gsQ0FBQztTQUFNLENBQUM7UUFDTixLQUFLLENBQUMsS0FBSyxDQUFDLGVBQWUsQ0FDekIsR0FBRyxFQUNILElBQUksRUFDSixRQUFRLEVBQ1IsRUFBRSxFQUNGLElBQUksRUFDSixHQUFHLEVBQUU7WUFDSCxnQkFBZ0IsRUFBRSxDQUFBO1FBQ3BCLENBQUMsRUFDRCxHQUFHLEVBQUU7WUFDSCxvQkFBb0IsRUFBRSxDQUFBO1FBQ3hCLENBQUMsQ0FDRixDQUFBO0lBQ0gsQ0FBQztJQUVELElBQUksT0FBTyxDQUFDLFdBQVcsRUFBRSxDQUFDO1FBQ3hCLG1CQUFtQixDQUFDLEdBQUcsQ0FBQyxDQUFBO1FBQ3hCLFFBQVEsQ0FBQyxtQkFBbUIsQ0FBQyxHQUFHLEVBQUUsZ0JBQWdCLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLFdBQVcsRUFBRSxJQUFJLENBQUMsQ0FBQTtRQUM5RSxPQUFPLENBQUMsY0FBYyxHQUFHLGdCQUFnQixDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxXQUFXLENBQUE7SUFDaEUsQ0FBQztJQUNELE9BQU8sQ0FBQyxLQUFLLEdBQUcsUUFBUSxDQUFDLFVBQVUsQ0FBQTtJQUNuQyxPQUFPLENBQUMsVUFBVSxHQUFHLEtBQUssQ0FBQTtBQUM1QixDQUFDO0FBRUQsTUFBTSxVQUFVLFdBQVcsQ0FBQyxHQUFXLEVBQUUsUUFBaUIsRUFBRSxRQUFrQjtJQUM1RSxJQUFJLE9BQU8sR0FBRyxnQkFBZ0IsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUE7SUFDdkMsT0FBTyxDQUFDLEtBQUssR0FBRyxRQUFRLENBQUMsUUFBUSxDQUFBO0lBQ2pDLE9BQU8sQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFBO0lBRXpCLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQTtJQUViLElBQUksUUFBUSxFQUFFLENBQUM7UUFDYixLQUFLLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxHQUFHLEVBQUU7WUFFM0IsSUFBSSxPQUFPLENBQUMsSUFBSSxFQUFFLENBQUM7Z0JBQ2pCLFFBQVEsQ0FBQyxpQkFBaUIsQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLENBQUE7Z0JBQ3JDLElBQUksZ0JBQWdCLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLFdBQVcsRUFBRSxDQUFDO29CQUMxQyxtQkFBbUIsQ0FBQyxHQUFHLENBQUMsQ0FBQTtvQkFDeEIsUUFBUSxDQUFDLG1CQUFtQixDQUFDLEdBQUcsRUFBRSxnQkFBZ0IsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsV0FBVyxFQUFFLElBQUksQ0FBQyxDQUFBO29CQUM5RSxPQUFPLENBQUMsY0FBYyxHQUFHLGdCQUFnQixDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxXQUFXLENBQUE7Z0JBQ2hFLENBQUM7Z0JBQ0QsSUFBSSxRQUFRLEdBQUcsT0FBTyxDQUFDLFFBQVEsQ0FBQyxhQUFhLENBQUE7Z0JBQzdDLElBQUksWUFBWSxHQUFXLGFBQWEsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFFLENBQUE7Z0JBQ2xELE9BQU8sQ0FBQyxHQUFHLENBQUMsaUJBQWlCLEVBQUUsWUFBWSxDQUFDLENBQUE7Z0JBQzVDLElBQUksWUFBWSxFQUFFLENBQUM7b0JBQ2pCLFFBQVEsSUFBSSxZQUFZLENBQUE7Z0JBQzFCLENBQUM7Z0JBRUQsSUFBSSxJQUFJLEdBQVUsRUFBRSxDQUFBO2dCQUNwQixPQUFPLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFNLEVBQUUsRUFBRTtvQkFDdkMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQTtnQkFDZCxDQUFDLENBQUMsQ0FBQTtnQkFDRixJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxPQUFPLENBQUMsU0FBUyxDQUFDLENBQUE7Z0JBRWpDLElBQUksR0FBRyxHQUFHLFNBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsUUFBUSxDQUFBO2dCQUNyQyxJQUFJLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFBO2dCQUdqRCxPQUFPLENBQ0wsR0FBRyxFQUNILE9BQU8sRUFDUCxPQUFPLENBQUMsUUFBUSxDQUFDLFFBQVEsRUFDekIsUUFBUSxFQUNSLElBQUksRUFDSixxQkFBcUIsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEVBQzlCLGlCQUFpQixDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FDM0IsQ0FBQTtZQUNILENBQUM7UUFDSCxDQUFDLEVBQUUsUUFBUSxHQUFHLElBQUksQ0FBQyxDQUFBO0lBQ3JCLENBQUM7QUFDSCxDQUFDO0FBRUQsTUFBTSxVQUFVLFFBQVEsQ0FBQyxHQUFXO0lBQ2xDLEtBQUssQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFBO0lBQ3pCLGVBQWUsQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLENBQUE7SUFFL0IsSUFBSSxPQUFPLEdBQUcsZ0JBQWdCLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFBO0lBQ3ZDLElBQUksT0FBTyxDQUFDLFdBQVcsRUFBRSxDQUFDO1FBQ3hCLG1CQUFtQixDQUFDLEdBQUcsQ0FBQyxDQUFBO1FBQ3hCLFFBQVEsQ0FBQyxtQkFBbUIsQ0FBQyxHQUFHLEVBQUUsZ0JBQWdCLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFBO1FBQ3JFLE9BQU8sQ0FBQyxjQUFjLEdBQUcsT0FBTyxDQUFDLFFBQVEsQ0FBQTtJQUMzQyxDQUFDO0lBRUQsSUFBSSxDQUFDLE9BQU8sQ0FBQyxVQUFVLEVBQUUsQ0FBQztRQUN4QixJQUFJLE9BQU8sQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFFLENBQUM7WUFDMUIsT0FBTyxDQUFDLFNBQVMsR0FBRyxDQUFDLENBQUE7WUFDckIsYUFBYSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQTtZQUN6QixPQUFPLENBQUMsR0FBRyxDQUFDLHFCQUFxQixFQUFFLE9BQU8sQ0FBQyxDQUFBO1lBQzNDLFVBQVUsQ0FBQyxHQUFHLEVBQUUsT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFBO1lBQ2pDLE9BQU8sQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLENBQUE7UUFDdEIsQ0FBQztJQUNILENBQUM7QUFDSCxDQUFDO0FBRUQsTUFBTSxVQUFVLFFBQVE7SUFDdEIsU0FBUyxHQUFHLFFBQVEsQ0FBQTtBQUN0QixDQUFDO0FBRUQsTUFBTSxVQUFVLFlBQVksQ0FBQyxHQUFXO0lBQ3RDLFNBQVMsR0FBRyxHQUFHLENBQUE7QUFDakIsQ0FBQztBQUVELE1BQU0sVUFBVSxjQUFjO0lBQzVCLE9BQU8sU0FBUyxJQUFJLGtCQUFrQixDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsQ0FBQTtBQUN2RCxDQUFDO0FBS0QsTUFBTSxVQUFVLFFBQVEsQ0FBQyxHQUFXLEVBQUUsS0FBYTtJQUNqRCxJQUFJLFNBQVMsSUFBSSxDQUFDLEVBQUUsQ0FBQztRQUNuQixPQUFPLENBQUMsR0FBRyxDQUFDLHNDQUFzQyxDQUFDLENBQUE7UUFDbkQsY0FBYyxDQUFDLFNBQVMsQ0FBQyxDQUFBO0lBRTNCLENBQUM7SUFFRCxTQUFTLEdBQUcsR0FBRyxDQUFBO0lBQ2YsYUFBYSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQTtJQUU3QixJQUFJLE9BQU8sR0FBRyxnQkFBZ0IsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUE7SUFDdkMsSUFBSSxPQUFPLENBQUMsUUFBUSxFQUFFLENBQUM7UUFDckIsSUFBSSxhQUFhLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUM7WUFDM0IsYUFBYSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsQ0FBQTtRQUMvQixDQUFDO1FBRUQsYUFBYSxDQUFDLE1BQU0sQ0FBQyxHQUFHLEVBQUU7WUFDeEIsY0FBYyxFQUFFLElBQUk7WUFDcEIsTUFBTSxFQUFFLElBQUk7WUFDWixRQUFRLEVBQUUsT0FBTyxDQUFDLFNBQVM7U0FDNUIsQ0FBQyxDQUFBO0lBQ0osQ0FBQztJQUNELFVBQVUsQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxDQUFBO0lBQ3pCLE9BQU8sQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFBO0lBRXpCLEtBQUssQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDO1FBQ3RCLFVBQVUsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUE7UUFDdEIsZ0JBQWdCLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLFVBQVUsR0FBRyxLQUFLLENBQUE7SUFDOUMsQ0FBQyxFQUFFLElBQUksR0FBRyxPQUFPLENBQUMsZ0JBQWdCLENBQUMsQ0FBQTtJQUNuQyxPQUFPLENBQUMsR0FBRyxDQUFDLGdCQUFnQixFQUFFLGdCQUFnQixDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFBO0FBQzFELENBQUM7QUFFRCxTQUFTLGNBQWMsQ0FBQyxHQUFXO0lBQ2pDLElBQUksT0FBTyxHQUFHLGdCQUFnQixDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQTtJQUN2QyxPQUFPLENBQUMsS0FBSyxHQUFHLFFBQVEsQ0FBQyxRQUFRLENBQUE7SUFFakMsSUFBSSxrQkFBa0IsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQztRQUVoQyxXQUFXLENBQUMsR0FBRyxDQUFDLENBQUE7SUFDbEIsQ0FBQztJQUVELElBQUksT0FBTyxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBQ3JCLElBQUksYUFBYSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDO1lBQzNCLGFBQWEsQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLENBQUE7UUFDL0IsQ0FBQztJQUNILENBQUM7SUFFRCxPQUFPLENBQUMsR0FBRyxDQUFDLG9CQUFvQixFQUFFLE9BQU8sRUFBRSxPQUFPLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUE7SUFDNUQsSUFBSSxPQUFPLENBQUMsU0FBUyxJQUFJLE9BQU8sQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsWUFBWSxFQUFFLENBQUM7UUFDdkQsV0FBVyxDQUFDLEdBQUcsQ0FBQyxDQUFBO0lBQ2xCLENBQUM7QUFDSCxDQUFDO0FBS0QsTUFBTSxVQUFVLGNBQWMsQ0FBQyxHQUFXLEVBQUUsS0FBYTtJQUN2RCxJQUFJLE9BQU8sR0FBRyxnQkFBZ0IsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUE7SUFDdkMsSUFBSSxPQUFPLENBQUMsS0FBSyxJQUFJLFFBQVEsQ0FBQyxVQUFVLEVBQUUsQ0FBQztRQUN6QyxPQUFNO0lBQ1IsQ0FBQztJQUVELGNBQWMsQ0FBQyxHQUFHLENBQUMsQ0FBQTtJQUVuQixJQUFJLGFBQWEsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQztRQUMzQixhQUFhLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFBO0lBQy9CLENBQUM7QUFDSCxDQUFDO0FBRUQsTUFBTSxVQUFVLGFBQWEsQ0FBQyxHQUFXLEVBQUUsSUFBWSxFQUFFLE1BQWdCLEVBQUUsUUFBaUI7SUFDMUYsSUFBSSxVQUFVLEdBQUcsUUFBUSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsQ0FBQTtJQUN6QyxJQUFJLE9BQU8sR0FBRyxnQkFBZ0IsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUE7SUFFdkMsSUFBSSxDQUFDLFVBQVUsSUFBSSxDQUFDLE9BQU87UUFBRSxPQUFNO0lBRW5DLElBQUksVUFBVSxDQUFDLE1BQU0sSUFBSSxVQUFVLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLFNBQTJCLEVBQUUsRUFBRSxDQUFDLFNBQVMsQ0FBQyxJQUFJLEtBQUssSUFBSSxDQUFDLENBQUMsTUFBTSxJQUFJLENBQUMsRUFBRSxDQUFDO1FBQ3hILFVBQVUsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDLENBQUE7SUFDckUsQ0FBQztJQUVELElBQUksT0FBTyxDQUFDLEtBQUssSUFBSSxRQUFRLENBQUMsVUFBVSxFQUFFLENBQUM7UUFDekMsS0FBSyxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUE7SUFDM0IsQ0FBQztJQUVELG1CQUFtQixDQUFDLEdBQUcsQ0FBQyxDQUFBO0lBRXhCLFFBQVEsQ0FBQyxpQkFBaUIsQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLENBQUE7SUFDckMsUUFBUSxDQUFDLG1CQUFtQixDQUFDLEdBQUcsRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUE7SUFDN0MsSUFBSSxRQUFRLEVBQUUsQ0FBQztRQUNiLE9BQU8sQ0FBQyxHQUFHLENBQUMsbUNBQW1DLENBQUMsQ0FBQTtRQUNoRCxtQkFBbUIsQ0FBQyxHQUFHLENBQUMsQ0FBQTtRQUN4QixVQUFVLENBQUMsR0FBRyxDQUNaLEdBQUcsRUFDSCxLQUFLLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxHQUFHLEVBQUU7WUFDM0IsbUJBQW1CLENBQUMsR0FBRyxDQUFDLENBQUE7WUFDeEIsUUFBUSxDQUFDLGlCQUFpQixDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsQ0FBQTtZQUNyQyxJQUFJLE9BQU8sQ0FBQyxRQUFRLEVBQUUsQ0FBQztnQkFDckIsUUFBUSxDQUFDLG1CQUFtQixDQUFDLEdBQUcsRUFBRSxPQUFPLENBQUMsUUFBUSxDQUFDLENBQUE7Z0JBQ25ELE9BQU8sQ0FBQyxjQUFjLEdBQUcsT0FBTyxDQUFDLFFBQVEsQ0FBQTtZQUMzQyxDQUFDO1FBQ0gsQ0FBQyxFQUFFLElBQUksR0FBRyxRQUFRLENBQUMsQ0FDcEIsQ0FBQTtJQUNILENBQUM7SUFFRCxPQUFPLENBQUMsY0FBYyxHQUFHLElBQUksQ0FBQTtBQUMvQixDQUFDO0FBRUQsTUFBTSxVQUFVLGNBQWMsQ0FBQyxHQUFXLEVBQUUsU0FBaUIsRUFBRSxJQUFjO0lBQzNFLElBQUksT0FBTyxHQUFHLGdCQUFnQixDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQTtJQUN2QyxPQUFPLENBQUMsUUFBUSxHQUFHLFNBQVMsQ0FBQTtJQUU1QixJQUFJLFVBQVUsR0FBRyxRQUFRLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxDQUFBO0lBQ3pDLElBQUksVUFBVSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxJQUFJLEtBQUssU0FBUyxDQUFDLENBQUMsTUFBTSxJQUFJLENBQUMsRUFBRSxDQUFDO1FBQzVFLFVBQVUsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQTtJQUN6RCxDQUFDO0lBRUQsSUFBSSxJQUFJLEVBQUUsQ0FBQztRQUNULGFBQWEsQ0FBQyxHQUFHLEVBQUUsU0FBUyxFQUFFLElBQUksQ0FBQyxDQUFBO1FBQ25DLGdCQUFnQixDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxjQUFjLEdBQUcsU0FBUyxDQUFBO0lBQ3RELENBQUM7QUFDSCxDQUFDO0FBRUQsTUFBTSxVQUFVLFVBQVUsQ0FBQyxHQUFXLEVBQUUsTUFBZ0IsRUFBRSxVQUE0QjtJQUNwRixVQUFVLENBQUMsR0FBRyxFQUFFLE1BQU0sRUFBRSxVQUFVLENBQUMsQ0FBQTtBQUNyQyxDQUFDO0FBRUQsTUFBTSxVQUFVLGtCQUFrQixDQUFDLGVBQTJCLEVBQUUsS0FBYztJQUM1RSxJQUFJLE1BQU0sR0FBRyxNQUFNLENBQUMsU0FBUyxFQUFFLENBQUE7SUFDL0IsU0FBUyxDQUFDLE1BQU0sRUFBRSxLQUFLLEVBQUUsZUFBZSxDQUFDLENBQUE7SUFDekMsT0FBTyxNQUFNLENBQUE7QUFDZixDQUFDO0FBRUQsTUFBTSxVQUFVLGdCQUFnQixDQUFDLEdBQVcsRUFBRSxNQUFnQixFQUFFLFVBQTRCO0lBQzFGLFNBQVMsR0FBRyxHQUFHLENBQUE7SUFFZixJQUFJLGtCQUFrQixDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDO1FBQ2hDLElBQUksS0FBVSxDQUFBO1FBQ2QsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO1lBQ2hCLEtBQUssR0FBRyxDQUFDLENBQUE7UUFDWCxDQUFDO2FBQU0sSUFBSSxPQUFPLFVBQVUsS0FBSyxRQUFRLEVBQUUsQ0FBQztZQUMxQyxLQUFLLEdBQUcsVUFBVSxDQUFBO1FBQ3BCLENBQUM7YUFBTSxDQUFDO1lBQ04sS0FBSyxHQUFHLGdCQUFnQixDQUFDLE1BQU0sRUFBRSxVQUFVLENBQUMsQ0FBQTtRQUM5QyxDQUFDO1FBQ0QsVUFBVSxDQUFDLEdBQUcsRUFBRSxNQUFNLEVBQUUsS0FBSyxDQUFDLENBQUE7SUFDaEMsQ0FBQztBQUNILENBQUM7QUFFRCxNQUFNLFVBQVUsaUJBQWlCLENBQUMsTUFBYztJQUM5QyxJQUFJLE1BQU0sR0FBRyxrQkFBa0IsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUE7SUFDM0MsSUFBSSxNQUFNLEVBQUUsQ0FBQztRQUNYLFdBQVcsQ0FBQyxNQUFNLENBQUMsQ0FBQTtJQUNyQixDQUFDO0FBQ0gsQ0FBQztBQUVELFNBQVMsbUJBQW1CLENBQUMsR0FBVztJQUN0QyxJQUFJLFVBQVUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQztRQUN4QixLQUFLLENBQUMsTUFBTSxDQUFDLFlBQVksQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBVyxDQUFDLENBQUE7UUFDeEQsVUFBVSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQTtRQUN0QixPQUFPLElBQUksQ0FBQTtJQUNiLENBQUM7SUFDRCxPQUFPLEtBQUssQ0FBQTtBQUNkLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyB1dGlscyBmcm9tICdAZGNsLXNkay91dGlscydcbmltcG9ydCB7XG4gIEFuaW1hdG9yLFxuICBBdmF0YXJTaGFwZSxcbiAgZW5naW5lLFxuICBFbnRpdHksXG4gIEdsdGZDb250YWluZXIsXG4gIElucHV0QWN0aW9uLFxuICBNZXNoQ29sbGlkZXIsXG4gIE1lc2hSZW5kZXJlcixcbiAgUEJBdmF0YXJTaGFwZSxcbiAgUEJHbHRmQ29udGFpbmVyLFxuICBwb2ludGVyRXZlbnRzU3lzdGVtLFxuICBUcmFuc2Zvcm0sXG4gIFRyYW5zZm9ybVR5cGUsXG4gIFBCQW5pbWF0aW9uU3RhdGVcbn0gZnJvbSAnQGRjbC9zZGsvZWNzJ1xuaW1wb3J0IHsgQ29sb3IzLCBRdWF0ZXJuaW9uLCBWZWN0b3IzIH0gZnJvbSAnQGRjbC9zZGsvbWF0aCdcbmltcG9ydCB7IGJ1YmJsZXMsIGNsb3NlQnViYmxlLCBjcmVhdGVEaWFsb2dCdWJibGUsIG9wZW5CdWJibGUgfSBmcm9tICcuL2J1YmJsZSdcbmltcG9ydCB7IElzRm9sbG93aW5nUGF0aCwgVHJhY2tVc2VyRmxhZyB9IGZyb20gJy4vY29tcG9uZW50cydcbmltcG9ydCB7IGFkZERpYWxvZywgY2xvc2VEaWFsb2csIGZpbmREaWFsb2dCeU5hbWUsIG5wY0RpYWxvZ0NvbXBvbmVudCwgb3BlbkRpYWxvZyB9IGZyb20gJy4vZGlhbG9nJ1xuaW1wb3J0IHsgZmFjZVVzZXJTeXN0ZW0sIGhhbmRsZUJ1YmJsZXR5cGluZywgaGFuZGxlRGlhbG9nVHlwaW5nLCBoYW5kbGVQYXRoVGltZXMsIGlucHV0TGlzdGVuZXJTeXN0ZW0gfSBmcm9tICcuL3N5c3RlbXMnXG5pbXBvcnQgeyBEaWFsb2csIEZvbGxvd1BhdGhEYXRhLCBJbWFnZURhdGEsIE5QQ0RhdGEsIE5QQ1BhdGhUeXBlLCBOUENTdGF0ZSwgTlBDVHlwZSwgVHJpZ2dlckRhdGEgfSBmcm9tICcuL3R5cGVzJ1xuaW1wb3J0IHsgZGFya1RoZW1lLCBsaWdodFRoZW1lIH0gZnJvbSAnLi91aSdcblxuZXhwb3J0IGNvbnN0IHdhbGtpbmdUaW1lcnM6IE1hcDxFbnRpdHksIG51bWJlcj4gPSBuZXcgTWFwKClcbmV4cG9ydCBjb25zdCBucGNEYXRhQ29tcG9uZW50OiBNYXA8RW50aXR5LCBhbnk+ID0gbmV3IE1hcCgpXG5leHBvcnQgbGV0IE5VTExfTlBDOiBFbnRpdHkgPSAwIGFzIEVudGl0eVxuZXhwb3J0IGxldCBhY3RpdmVOUEM6IEVudGl0eSA9IE5VTExfTlBDXG5leHBvcnQgbGV0IGJsYW5rRGlhbG9nOiBudW1iZXIgPSAwXG5cbmVuZ2luZS5hZGRTeXN0ZW0oaGFuZGxlUGF0aFRpbWVzKVxuZW5naW5lLmFkZFN5c3RlbShoYW5kbGVEaWFsb2dUeXBpbmcpXG5lbmdpbmUuYWRkU3lzdGVtKGhhbmRsZUJ1YmJsZXR5cGluZylcbmVuZ2luZS5hZGRTeXN0ZW0oZmFjZVVzZXJTeXN0ZW0pXG5lbmdpbmUuYWRkU3lzdGVtKGlucHV0TGlzdGVuZXJTeXN0ZW0pXG5cbi8vVE9ETyBNQUtFIGlzQ29vbGRvd24gYW5kIG5vIGxvbmdlciBoYXZlIHRvIHRyYWNrIHdpdGggbWFwIHRvIHJlbW92ZSBtZW1vcnkgbGVhayBpc3N1ZXNcbmNvbnN0IGlzQ29vbGRvd246IE1hcDxFbnRpdHksIGFueT4gPSBuZXcgTWFwKClcbmNvbnN0IG9uQWN0aXZhdGVDYnM6IE1hcDxFbnRpdHksIGFueT4gPSBuZXcgTWFwKClcbmNvbnN0IG9uV2Fsa0F3YXlDYnM6IE1hcDxFbnRpdHksIGFueT4gPSBuZXcgTWFwKClcbmNvbnN0IGFuaW1UaW1lcnM6IE1hcDxFbnRpdHksIG51bWJlcj4gPSBuZXcgTWFwKClcbmNvbnN0IHBvaW50UmVhY2hlZENhbGxiYWNrczogTWFwPEVudGl0eSwgYW55PiA9IG5ldyBNYXAoKVxuY29uc3Qgb25GaW5pc2hDYWxsYmFja3M6IE1hcDxFbnRpdHksIGFueT4gPSBuZXcgTWFwKClcblxuZXhwb3J0IGZ1bmN0aW9uIHNob3dEZWJ1ZyhkZWJ1ZzogYm9vbGVhbikge1xuICB1dGlscy50cmlnZ2Vycy5lbmFibGVEZWJ1Z0RyYXcoZGVidWcpXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXREYXRhKG5wYzogRW50aXR5KSB7XG4gIHJldHVybiBucGNEYXRhQ29tcG9uZW50LmdldChucGMpXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGUodHJhbnNmb3JtOiBhbnksIGRhdGE6IE5QQ0RhdGEpIHtcbiAgbGV0IG5wYyA9IGVuZ2luZS5hZGRFbnRpdHkoKVxuXG4gIGxldCB0OiBUcmFuc2Zvcm1UeXBlID0ge1xuICAgIHBvc2l0aW9uOiB0cmFuc2Zvcm0ucG9zaXRpb24gPyB0cmFuc2Zvcm0ucG9zaXRpb24gOiBWZWN0b3IzLmNyZWF0ZSgwLCAwLCAwKSxcbiAgICByb3RhdGlvbjogdHJhbnNmb3JtLnJvdGF0aW9uID8gdHJhbnNmb3JtLnJvdGF0aW9uIDogUXVhdGVybmlvbi5aZXJvKCksXG4gICAgc2NhbGU6IHRyYW5zZm9ybS5zY2FsZSA/IHRyYW5zZm9ybS5zY2FsZSA6IFZlY3RvcjMuT25lKClcbiAgfVxuICBUcmFuc2Zvcm0uY3JlYXRlKG5wYywgdClcblxuICBucGNEYXRhQ29tcG9uZW50LnNldChucGMsIHtcbiAgICBpbnRyb2R1Y2VkOiBmYWxzZSxcbiAgICBpbkNvb2xkb3duOiBmYWxzZSxcbiAgICBjb29sRG93bkR1cmF0aW9uOiBkYXRhICYmIGRhdGEuY29vbERvd25EdXJhdGlvbiA/IGRhdGEuY29vbERvd25EdXJhdGlvbiA6IDUsXG4gICAgZmFjZVVzZXI6IGRhdGEgJiYgZGF0YS5mYWNlVXNlciA/IGRhdGEuZmFjZVVzZXIgOiB1bmRlZmluZWQsXG4gICAgd2Fsa2luZ1NwZWVkOiAyLFxuICAgIHdhbGtpbmdBbmltOiBkYXRhICYmIGRhdGEud2Fsa2luZ0FuaW0gPyBkYXRhLndhbGtpbmdBbmltIDogdW5kZWZpbmVkLFxuICAgIHBhdGhEYXRhOiBkYXRhLnBhdGhEYXRhID8gZGF0YS5wYXRoRGF0YSA6IHVuZGVmaW5lZCxcbiAgICBjdXJyZW50UGF0aERhdGE6IFtdLFxuICAgIG1hbnVhbFN0b3A6IGZhbHNlLFxuICAgIHBhdGhJbmRleDogMCxcbiAgICBzdGF0ZTogTlBDU3RhdGUuU1RBTkRJTkcsXG4gICAgaWRsZUFuaW06IGRhdGEgJiYgZGF0YS5pZGxlQW5pbSA/IGRhdGEuaWRsZUFuaW0gOiAnSWRsZScsXG4gICAgYnViYmxlSGVpZ2h0OiBkYXRhICYmIGRhdGEudGV4dEJ1YmJsZSAmJiBkYXRhLmJ1YmJsZUhlaWdodCA/IGRhdGEuYnViYmxlSGVpZ2h0IDogdW5kZWZpbmVkLFxuICAgIGJ1YmJsZVNvdW5kOiBkYXRhLmRpYWxvZ1NvdW5kID8gZGF0YS5kaWFsb2dTb3VuZCA6IHVuZGVmaW5lZCxcbiAgICBoYXNCdWJibGU6IGRhdGEgJiYgZGF0YS50ZXh0QnViYmxlID8gdHJ1ZSA6IGZhbHNlLFxuICAgIHR1cm5TcGVlZDogZGF0YSAmJiBkYXRhLnR1cm5pbmdTcGVlZCA/IGRhdGEudHVybmluZ1NwZWVkIDogMixcbiAgICB0aGVtZTogZGF0YS5kYXJrVUkgPyBkYXJrVGhlbWUgOiBsaWdodFRoZW1lLFxuICAgIGJ1YmJsZVhPZmZzZXQ6IGRhdGEuYnViYmxlWE9mZnNldCA/IGRhdGEuYnViYmxlWE9mZnNldCA6IDAsXG4gICAgYnViYmxlWU9mZnNldDogZGF0YS5idWJibGVZT2Zmc2V0ID8gZGF0YS5idWJibGVZT2Zmc2V0IDogMFxuICB9KVxuXG4gIGlmIChkYXRhICYmIGRhdGEubm9VSSkge1xuICB9IGVsc2UgaWYgKGRhdGEgJiYgZGF0YS5wb3J0cmFpdCkge1xuICAgIGFkZERpYWxvZyhcbiAgICAgIG5wYyxcbiAgICAgIGRhdGEgJiYgZGF0YS5kaWFsb2dTb3VuZCA/IGRhdGEuZGlhbG9nU291bmQgOiB1bmRlZmluZWQsXG4gICAgICB0eXBlb2YgZGF0YS5wb3J0cmFpdCA9PT0gYHN0cmluZ2AgPyB7IHBhdGg6IGRhdGEucG9ydHJhaXQgfSA6IGRhdGEucG9ydHJhaXRcbiAgICApXG4gIH0gZWxzZSB7XG4gICAgYWRkRGlhbG9nKG5wYywgZGF0YSAmJiBkYXRhLmRpYWxvZ1NvdW5kID8gZGF0YS5kaWFsb2dTb3VuZCA6IHVuZGVmaW5lZClcbiAgfVxuXG4gIGlmIChkYXRhICYmIGRhdGEudGV4dEJ1YmJsZSkge1xuICAgIGNyZWF0ZURpYWxvZ0J1YmJsZShucGMsIG5wY0RhdGFDb21wb25lbnQuZ2V0KG5wYykuYnViYmxlSGVpZ2h0KVxuICB9XG5cbiAgb25BY3RpdmF0ZUNicy5zZXQobnBjLCAob3RoZXI6IEVudGl0eSkgPT4ge1xuICAgIGRhdGEub25BY3RpdmF0ZShvdGhlcilcbiAgfSlcblxuICBpZiAoZGF0YSAmJiBkYXRhLmhhc093blByb3BlcnR5KCdvbldhbGtBd2F5JykpIHtcbiAgICBvbldhbGtBd2F5Q2JzLnNldChucGMsIChvdGhlcjogRW50aXR5KSA9PiB7XG4gICAgICBpZiAoIWRhdGEgfHwgIWRhdGEuY29udGludWVPbldhbGtBd2F5KSB7XG4gICAgICAgIGlmIChucGNEaWFsb2dDb21wb25lbnQuaGFzKG5wYykpIHtcbiAgICAgICAgICBucGNEaWFsb2dDb21wb25lbnQuZ2V0KG5wYykudmlzaWJsZSA9IGZhbHNlXG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmIChucGNEaWFsb2dDb21wb25lbnQuaGFzKG5wYykpIHtcbiAgICAgICAgICBucGNEaWFsb2dDb21wb25lbnQuZ2V0KG5wYykudmlzaWJsZSA9IGZhbHNlXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGRhdGEub25XYWxrQXdheSEob3RoZXIpXG4gICAgfSlcbiAgfVxuXG4gIGFkZE5QQ0JvbmVzKG5wYywgZGF0YSlcbiAgYWRkQ2xpY2tSZWFjdGlvbnMobnBjLCBkYXRhKVxuICBhZGRUcmlnZ2VyQXJlYShucGMsIGRhdGEpXG5cbiAgaWYgKGRhdGEgJiYgZGF0YS5wYXRoRGF0YSAmJiBkYXRhLnBhdGhEYXRhLnNwZWVkKSB7XG4gICAgbGV0IG5wY0RhdGEgPSBucGNEYXRhQ29tcG9uZW50LmdldChucGMpXG4gICAgbnBjRGF0YS53YWxraW5nU3BlZWQgPSBkYXRhLnBhdGhEYXRhLnNwZWVkXG4gIH1cblxuICBpZiAoZGF0YSAmJiBkYXRhLmNvb2xEb3duRHVyYXRpb24pIHtcbiAgICBsZXQgbnBjRGF0YSA9IG5wY0RhdGFDb21wb25lbnQuZ2V0KG5wYylcbiAgICBucGNEYXRhLmNvb2xEb3duRHVyYXRpb24gPSBkYXRhLmNvb2xEb3duRHVyYXRpb25cbiAgfVxuXG4gIGlmIChkYXRhICYmIGRhdGEucGF0aERhdGEpIHtcbiAgICBsZXQgbnBjRGF0YSA9IG5wY0RhdGFDb21wb25lbnQuZ2V0KG5wYylcbiAgICBucGNEYXRhLnBhdGhEYXRhLmxvb3AgPSB0cnVlXG4gICAgZm9sbG93UGF0aChucGMsIG5wY0RhdGEucGF0aERhdGEpXG4gIH1cblxuICByZXR1cm4gbnBjXG59XG5cbmZ1bmN0aW9uIGFkZE5QQ0JvbmVzKG5wYzogRW50aXR5LCBkYXRhOiBOUENEYXRhKSB7XG4gIGNvbnN0IG1vZGVsSXNTdHJpbmcgPSBkYXRhICYmIGRhdGEubW9kZWwgJiYgdHlwZW9mIGRhdGEubW9kZWwgPT09IGBzdHJpbmdgXG4gIGNvbnN0IG1vZGVsQXZhdGFyRGF0YTogUEJBdmF0YXJTaGFwZSB8IHVuZGVmaW5lZCA9IG1vZGVsSXNTdHJpbmdcbiAgICA/IHVuZGVmaW5lZFxuICAgIDogZGF0YS5tb2RlbCAmJiAoZGF0YS5tb2RlbCBhcyBhbnkpLmJvZHlTaGFwZVxuICAgICAgPyAoZGF0YS5tb2RlbCBhcyBQQkF2YXRhclNoYXBlKVxuICAgICAgOiB1bmRlZmluZWRcbiAgY29uc3QgbW9kZWxHTFRGRGF0YTogUEJHbHRmQ29udGFpbmVyIHwgdW5kZWZpbmVkID0gbW9kZWxJc1N0cmluZ1xuICAgID8gdW5kZWZpbmVkXG4gICAgOiBkYXRhLm1vZGVsICYmIChkYXRhLm1vZGVsIGFzIGFueSkuc3JjXG4gICAgICA/IChkYXRhLm1vZGVsIGFzIFBCR2x0ZkNvbnRhaW5lcilcbiAgICAgIDogdW5kZWZpbmVkXG5cbiAgc3dpdGNoIChkYXRhLnR5cGUpIHtcbiAgICBjYXNlIE5QQ1R5cGUuQVZBVEFSOlxuICAgICAgQXZhdGFyU2hhcGUuY3JlYXRlKFxuICAgICAgICBucGMsXG4gICAgICAgICFkYXRhIHx8ICFkYXRhLm1vZGVsIHx8ICFtb2RlbEF2YXRhckRhdGFcbiAgICAgICAgICA/IHtcbiAgICAgICAgICAgIGlkOiAnbnBjJyxcbiAgICAgICAgICAgIG5hbWU6ICdOUEMnLFxuICAgICAgICAgICAgYm9keVNoYXBlOiAndXJuOmRlY2VudHJhbGFuZDpvZmYtY2hhaW46YmFzZS1hdmF0YXJzOkJhc2VNYWxlJyxcbiAgICAgICAgICAgIGVtb3RlczogW10sXG4gICAgICAgICAgICB3ZWFyYWJsZXM6IFtcbiAgICAgICAgICAgICAgJ3VybjpkZWNlbnRyYWxhbmQ6b2ZmLWNoYWluOmJhc2UtYXZhdGFyczpmX2V5ZXNfMDAnLFxuICAgICAgICAgICAgICAndXJuOmRlY2VudHJhbGFuZDpvZmYtY2hhaW46YmFzZS1hdmF0YXJzOmZfZXllYnJvd3NfMDAnLFxuICAgICAgICAgICAgICAndXJuOmRlY2VudHJhbGFuZDpvZmYtY2hhaW46YmFzZS1hdmF0YXJzOmZfbW91dGhfMDAnLFxuICAgICAgICAgICAgICAndXJuOmRlY2VudHJhbGFuZDpvZmYtY2hhaW46YmFzZS1hdmF0YXJzOmNvbWZ5X3Nwb3J0X3NhbmRhbHMnLFxuICAgICAgICAgICAgICAndXJuOmRlY2VudHJhbGFuZDpvZmYtY2hhaW46YmFzZS1hdmF0YXJzOnNvY2Nlcl9wYW50cycsXG4gICAgICAgICAgICAgICd1cm46ZGVjZW50cmFsYW5kOm9mZi1jaGFpbjpiYXNlLWF2YXRhcnM6ZWxlZ2FudF9zd2VhdGVyJ1xuICAgICAgICAgICAgXVxuICAgICAgICAgIH1cbiAgICAgICAgICA6IG1vZGVsQXZhdGFyRGF0YVxuICAgICAgKVxuICAgICAgYnJlYWtcblxuICAgIGNhc2UgTlBDVHlwZS5DVVNUT006XG4gICAgICBHbHRmQ29udGFpbmVyLmNyZWF0ZShcbiAgICAgICAgbnBjLFxuICAgICAgICBtb2RlbElzU3RyaW5nICYmIHR5cGVvZiBkYXRhLm1vZGVsID09PSBgc3RyaW5nYCA/IHsgc3JjOiBkYXRhICYmIGRhdGEubW9kZWwgPyBkYXRhLm1vZGVsIDogJycgfSA6IG1vZGVsR0xURkRhdGFcbiAgICAgIClcbiAgICAgIEFuaW1hdG9yLmNyZWF0ZShucGMsIHtcbiAgICAgICAgc3RhdGVzOiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgY2xpcDogZGF0YSAmJiBkYXRhLmlkbGVBbmltID8gZGF0YS5pZGxlQW5pbSA6ICdJZGxlJyxcbiAgICAgICAgICAgIGxvb3A6IHRydWVcbiAgICAgICAgICB9XG4gICAgICAgIF1cbiAgICAgIH0pXG5cbiAgICAgIGxldCBucGNEYXRhID0gbnBjRGF0YUNvbXBvbmVudC5nZXQobnBjKVxuICAgICAgbnBjRGF0YS5pZGxlQW5pbSA9IGRhdGEgJiYgZGF0YS5pZGxlQW5pbSA/IGRhdGEuaWRsZUFuaW0gOiAnSWRsZSdcbiAgICAgIG5wY0RhdGEubGFzdFBsYXllZEFuaW0gPSBucGNEYXRhQ29tcG9uZW50LmdldChucGMpLmlkbGVBbmltXG5cbiAgICAgIEFuaW1hdG9yLnBsYXlTaW5nbGVBbmltYXRpb24obnBjLCBucGNEYXRhQ29tcG9uZW50LmdldChucGMpLmlkbGVBbmltKVxuXG4gICAgICBpZiAoZGF0YSAmJiBkYXRhLndhbGtpbmdBbmltKSB7XG4gICAgICAgIG5wY0RhdGFDb21wb25lbnQuZ2V0KG5wYykud2Fsa2luZ0FuaW0gPSBkYXRhLndhbGtpbmdBbmltXG4gICAgICAgIGxldCBhbmltYXRpb25zID0gQW5pbWF0b3IuZ2V0TXV0YWJsZShucGMpXG4gICAgICAgIGFuaW1hdGlvbnMuc3RhdGVzLnB1c2goeyBjbGlwOiBkYXRhLndhbGtpbmdBbmltLCBsb29wOiB0cnVlIH0pXG4gICAgICB9XG5cbiAgICAgIGJyZWFrXG5cbiAgICBjYXNlIE5QQ1R5cGUuQkxBTks6XG4gICAgICBNZXNoUmVuZGVyZXIuc2V0Qm94KG5wYylcbiAgICAgIE1lc2hDb2xsaWRlci5zZXRCb3gobnBjKVxuICAgICAgYnJlYWtcbiAgfVxufVxuXG5mdW5jdGlvbiBhZGRDbGlja1JlYWN0aW9ucyhucGM6IEVudGl0eSwgZGF0YTogTlBDRGF0YSkge1xuICBsZXQgYWN0aXZhdGVCdXR0b24gPSBkYXRhICYmIGRhdGEub25seUNsaWNrVHJpZ2dlciA/IElucHV0QWN0aW9uLklBX1BPSU5URVIgOiBJbnB1dEFjdGlvbi5JQV9QUklNQVJZXG5cbiAgLypcbiAgcG9pbnRlckV2ZW50c1N5c3RlbS5vblBvaW50ZXJEb3duKFxuICAgICAge1xuICAgICAgICAgIGVudGl0eTogbnBjLFxuICAgICAgICAgIG9wdHM6IHtcbiAgICAgICAgICAgICAgYnV0dG9uOiBhY3RpdmF0ZUJ1dHRvbixcbiAgICAgICAgICAgICAgaG92ZXJUZXh0OiBkYXRhICYmIGRhdGEuaG92ZXJUZXh0ID8gZGF0YS5ob3ZlclRleHQgOiAnVGFsaycsXG4gICAgICAgICAgICAgIHNob3dGZWVkYmFjazogZGF0YSAmJiBkYXRhLm9ubHlFeHRlcm5hbFRyaWdnZXIgPyBmYWxzZSA6IHRydWVcbiAgICAgICAgICB9XG4gICAgICB9LFxuICAgICAgKCkgPT4ge1xuICAgICAgICAgIGlmIChpc0Nvb2xkb3duLmhhcyhucGMpIHx8IG5wY0RpYWxvZ0NvbXBvbmVudC5nZXQobnBjKS52aXNpYmxlKSByZXR1cm5cbiAgICAgICAgICBhY3RpdmF0ZShucGMsIGVuZ2luZS5QbGF5ZXJFbnRpdHkpXG4gICAgICB9LFxuICApXG4gICovXG5cbiAgcG9pbnRlckV2ZW50c1N5c3RlbS5vblBvaW50ZXJEb3duKFxuICAgIG5wYyxcbiAgICBmdW5jdGlvbiAoKSB7XG4gICAgICBpZiAoaXNDb29sZG93bi5oYXMobnBjKSB8fCBucGNEaWFsb2dDb21wb25lbnQuZ2V0KG5wYykudmlzaWJsZSkgcmV0dXJuXG4gICAgICBhY3RpdmF0ZShucGMsIGVuZ2luZS5QbGF5ZXJFbnRpdHkpXG4gICAgfSxcbiAgICB7XG4gICAgICBidXR0b246IGFjdGl2YXRlQnV0dG9uLFxuICAgICAgaG92ZXJUZXh0OiBkYXRhICYmIGRhdGEuaG92ZXJUZXh0ID8gZGF0YS5ob3ZlclRleHQgOiAnVGFsaycsXG4gICAgICBzaG93RmVlZGJhY2s6IGRhdGEgJiYgZGF0YS5vbmx5RXh0ZXJuYWxUcmlnZ2VyID8gZmFsc2UgOiB0cnVlXG4gICAgfVxuICApXG5cbiAgaWYgKGRhdGEgJiYgZGF0YS5vbmx5RXh0ZXJuYWxUcmlnZ2VyKSB7XG4gICAgcG9pbnRlckV2ZW50c1N5c3RlbS5yZW1vdmVPblBvaW50ZXJEb3duKG5wYylcbiAgfVxufVxuXG5mdW5jdGlvbiBhZGRUcmlnZ2VyQXJlYShucGM6IEVudGl0eSwgZGF0YTogTlBDRGF0YSkge1xuICBsZXQgdHJpZ2dlckRhdGE6IFRyaWdnZXJEYXRhID0ge31cblxuICBpZiAoIWRhdGEgfHwgKGRhdGEgJiYgIWRhdGEub25seUV4dGVybmFsVHJpZ2dlciAmJiAhZGF0YS5vbmx5Q2xpY2tUcmlnZ2VyICYmICFkYXRhLm9ubHlFVHJpZ2dlcikpIHtcbiAgICBvbkFjdGl2YXRlQ2JzLnNldChucGMsIChvdGhlcjogRW50aXR5KSA9PiB7XG4gICAgICBpZiAoaXNDb29sZG93bi5oYXMobnBjKSkge1xuICAgICAgICBjb25zb2xlLmxvZyhucGMsICcgaW4gY29vbGRvd24nKVxuICAgICAgICByZXR1cm5cbiAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgIChucGNEaWFsb2dDb21wb25lbnQuaGFzKG5wYykgJiYgbnBjRGlhbG9nQ29tcG9uZW50LmdldChucGMpLnZpc2libGUpIHx8XG4gICAgICAgIChkYXRhICYmIGRhdGEub25seUV4dGVybmFsVHJpZ2dlcikgfHxcbiAgICAgICAgKGRhdGEgJiYgZGF0YS5vbmx5Q2xpY2tUcmlnZ2VyKVxuICAgICAgKSB7XG4gICAgICAgIHJldHVyblxuICAgICAgfVxuICAgICAgZGF0YS5vbkFjdGl2YXRlKG90aGVyKVxuICAgIH0pXG4gICAgdHJpZ2dlckRhdGEub25DYW1lcmFFbnRlciA9IG9uQWN0aXZhdGVDYnMuZ2V0KG5wYylcbiAgfVxuXG4gIC8vIHdoZW4gZXhpdGluZyB0cmlnZ2VyXG4gIGlmICghZGF0YSB8fCAoZGF0YSAmJiAhZGF0YS5jb250aW51ZU9uV2Fsa0F3YXkpKSB7XG4gICAgdHJpZ2dlckRhdGEub25DYW1lcmFFeGl0ID0gKG90aGVyKSA9PiB7XG4gICAgICBoYW5kbGVXYWxrQXdheShucGMsIG90aGVyKVxuICAgIH1cbiAgfVxuXG4gIC8vIHdoZW4gZW50ZXJpbmcgdHJpZ2dlclxuICBpZiAoIWRhdGEgfHwgKGRhdGEgJiYgIWRhdGEub25seUV4dGVybmFsVHJpZ2dlciAmJiAhZGF0YS5vbmx5Q2xpY2tUcmlnZ2VyICYmICFkYXRhLm9ubHlFVHJpZ2dlcikpIHtcbiAgICB0cmlnZ2VyRGF0YS5vbkNhbWVyYUVudGVyID0gKG90aGVyKSA9PiB7XG4gICAgICBpZiAoaXNDb29sZG93bi5oYXMobnBjKSkge1xuICAgICAgICBjb25zb2xlLmxvZyhucGMsICcgaW4gY29vbGRvd24nKVxuICAgICAgICByZXR1cm5cbiAgICAgIH1cbiAgICAgIC8vIGVsc2UgaWYgKFxuICAgICAgLy8gICAgICh0aGlzLmRpYWxvZyAmJiB0aGlzLmRpYWxvZy5pc0RpYWxvZ09wZW4pIHx8XG4gICAgICAvLyAgICAgKGRhdGEgJiYgZGF0YS5vbmx5RXh0ZXJuYWxUcmlnZ2VyKSB8fFxuICAgICAgLy8gICAgIChkYXRhICYmIGRhdGEub25seUNsaWNrVHJpZ2dlcilcbiAgICAgIC8vICkge1xuICAgICAgLy8gICAgIHJldHVyblxuICAgICAgLy8gfVxuICAgICAgYWN0aXZhdGUobnBjLCBvdGhlcilcbiAgICB9XG4gIH1cblxuICAvLyBhZGQgdHJpZ2dlclxuICBpZiAodHJpZ2dlckRhdGEub25DYW1lcmFFbnRlciB8fCB0cmlnZ2VyRGF0YS5vbkNhbWVyYUV4aXQpIHtcbiAgICB1dGlscy50cmlnZ2Vycy5hZGRUcmlnZ2VyKFxuICAgICAgbnBjLFxuICAgICAgdHJpZ2dlckRhdGEubGF5ZXIgIT0gdW5kZWZpbmVkID8gdHJpZ2dlckRhdGEubGF5ZXIgOiB1dGlscy5OT19MQVlFUlMsXG4gICAgICB0cmlnZ2VyRGF0YS50cmlnZ2VyZWRCeUxheWVyICE9IHVuZGVmaW5lZCA/IHRyaWdnZXJEYXRhLnRyaWdnZXJlZEJ5TGF5ZXIgOiB1dGlscy5MQVlFUl8xLFxuICAgICAgW3sgdHlwZTogJ3NwaGVyZScsIHBvc2l0aW9uOiBWZWN0b3IzLlplcm8oKSwgcmFkaXVzOiBkYXRhLnJlYWN0RGlzdGFuY2UgIT0gdW5kZWZpbmVkID8gZGF0YS5yZWFjdERpc3RhbmNlIDogNiB9XSxcbiAgICAgIChvdGhlcikgPT4ge1xuICAgICAgICBpZiAodHJpZ2dlckRhdGEub25DYW1lcmFFbnRlcikgdHJpZ2dlckRhdGEub25DYW1lcmFFbnRlcihvdGhlcilcbiAgICAgIH0sXG4gICAgICAob3RoZXIpID0+IHtcbiAgICAgICAgaWYgKHRyaWdnZXJEYXRhLm9uQ2FtZXJhRXhpdCkgdHJpZ2dlckRhdGEub25DYW1lcmFFeGl0KG90aGVyKVxuICAgICAgfSxcbiAgICAgIENvbG9yMy5SZWQoKVxuICAgIClcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZm9sbG93UGF0aChucGM6IEVudGl0eSwgZGF0YT86IEZvbGxvd1BhdGhEYXRhKSB7XG4gIGxldCBucGNEYXRhID0gbnBjRGF0YUNvbXBvbmVudC5nZXQobnBjKVxuICBsZXQgcGF0aDogYW55W10gPSBbXVxuXG4gIGlmIChucGNEYXRhLmZhY2VVc2VyKSB7XG4gICAgaWYgKFRyYWNrVXNlckZsYWcuaGFzKG5wYykpIHtcbiAgICAgIFRyYWNrVXNlckZsYWcuZGVsZXRlRnJvbShucGMpXG4gICAgfVxuICB9XG5cbiAgaWYgKG5wY0RhdGEubWFudWFsU3RvcCkge1xuICAgIGxldCBkdXJhdGlvbiA9IG5wY0RhdGEucGF0aERhdGEudG90YWxEdXJhdGlvblxuICAgIGxldCBjdXJyZW50VGltZXI6IG51bWJlciA9IHdhbGtpbmdUaW1lcnMuZ2V0KG5wYykhXG4gICAgY29uc29sZS5sb2coJ2N1cnJlbnQgdGltZSBpcycsIGN1cnJlbnRUaW1lcilcbiAgICBpZiAoY3VycmVudFRpbWVyKSB7XG4gICAgICBkdXJhdGlvbiAtPSBjdXJyZW50VGltZXJcbiAgICB9XG5cbiAgICBsZXQgcGF0aDogYW55W10gPSBbXVxuICAgIG5wY0RhdGEucGF0aERhdGEucGF0aC5mb3JFYWNoKChwOiBhbnkpID0+IHtcbiAgICAgIHBhdGgucHVzaChwKVxuICAgIH0pXG4gICAgcGF0aC5zcGxpY2UoMCwgbnBjRGF0YS5wYXRoSW5kZXgpXG5cbiAgICBsZXQgcG9zID0gVHJhbnNmb3JtLmdldChucGMpLnBvc2l0aW9uXG4gICAgcGF0aC51bnNoaWZ0KFZlY3RvcjMuY3JlYXRlKHBvcy54LCBwb3MueSwgcG9zLnopKVxuICAgIHdhbGtOUEMoXG4gICAgICBucGMsXG4gICAgICBucGNEYXRhLFxuICAgICAgbnBjRGF0YS5wYXRoRGF0YS5wYXRoVHlwZSxcbiAgICAgIGR1cmF0aW9uLFxuICAgICAgcGF0aCxcbiAgICAgIHBvaW50UmVhY2hlZENhbGxiYWNrcy5nZXQobnBjKSxcbiAgICAgIG9uRmluaXNoQ2FsbGJhY2tzLmdldChucGMpXG4gICAgKVxuICB9IGVsc2Uge1xuICAgIGlmIChkYXRhKSB7XG4gICAgICBucGNEYXRhLnBhdGhEYXRhID0gZGF0YVxuXG4gICAgICBpZiAoZGF0YS5zdGFydGluZ1BvaW50KSB7XG4gICAgICAgIGRhdGEucGF0aD8uc3BsaWNlKDAsIGRhdGEuc3RhcnRpbmdQb2ludCAtIDEpXG4gICAgICB9XG5cbiAgICAgIGxldCBwb3MgPSBUcmFuc2Zvcm0uZ2V0KG5wYykucG9zaXRpb25cbiAgICAgIHBhdGgucHVzaChWZWN0b3IzLmNyZWF0ZShwb3MueCwgcG9zLnksIHBvcy56KSlcbiAgICAgIGRhdGEucGF0aD8uZm9yRWFjaCgocCkgPT4ge1xuICAgICAgICBwYXRoLnB1c2gocClcbiAgICAgIH0pXG5cbiAgICAgIG9uRmluaXNoQ2FsbGJhY2tzLnNldChucGMsICgpID0+IHtcbiAgICAgICAgY29uc29sZS5sb2coJ29uIGZpbmlzaGVkIGNhbGxiYWNrJylcbiAgICAgICAgaWYgKGRhdGEgJiYgZGF0YS5vbkZpbmlzaENhbGxiYWNrICYmICFkYXRhLmxvb3ApIHtcbiAgICAgICAgICBkYXRhLm9uRmluaXNoQ2FsbGJhY2soKVxuICAgICAgICB9XG4gICAgICAgIHN0b3BQYXRoKG5wYylcbiAgICAgIH0pXG5cbiAgICAgIHBvaW50UmVhY2hlZENhbGxiYWNrcy5zZXQobnBjLCAoKSA9PiB7XG4gICAgICAgIGNvbnNvbGUubG9nKCdvbiBwb2ludCByZWFjaGVkIGNhbGxiYWNrJylcbiAgICAgICAgbGV0IGRhdGEgPSBucGNEYXRhQ29tcG9uZW50LmdldChucGMpXG4gICAgICAgIGRhdGEucGF0aEluZGV4ICs9IDFcbiAgICAgICAgZGF0YS5vblJlYWNoZWRQb2ludENhbGxiYWNrID8gZGF0YS5vblJlYWNoZWRQb2ludENhbGxiYWNrIDogdW5kZWZpbmVkXG4gICAgICB9KVxuICAgICAgd2Fsa05QQyhcbiAgICAgICAgbnBjLFxuICAgICAgICBucGNEYXRhLFxuICAgICAgICBkYXRhLnBhdGhUeXBlISxcbiAgICAgICAgZGF0YS50b3RhbER1cmF0aW9uLFxuICAgICAgICBwYXRoLFxuICAgICAgICBwb2ludFJlYWNoZWRDYWxsYmFja3MuZ2V0KG5wYyksXG4gICAgICAgIG9uRmluaXNoQ2FsbGJhY2tzLmdldChucGMpXG4gICAgICApXG4gICAgfSBlbHNlIHtcbiAgICAgIGlmIChucGNEYXRhLm1hbnVhbFN0b3ApIHtcbiAgICAgICAgY29uc29sZS5sb2coJ3dlIGhhdmUgbWFudWFsIHN0b3AsIG5lZWQgdG8gcGljayBiYWNrIHVwIHdoZXJlIHdlIGxlZnQgb2ZmJylcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnNvbGUubG9nKCd3ZSBhcmUgdHJ5aW5nIHRvIGZvbGxvdyBhIHBhdGggd2l0b3V0IHN0YXJ0aW5nIG9uZSBwcmlvcicpXG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIHdhbGtOUEMoXG4gIG5wYzogRW50aXR5LFxuICBucGNEYXRhOiBhbnksXG4gIHR5cGU6IE5QQ1BhdGhUeXBlLFxuICBkdXJhdGlvbjogbnVtYmVyLFxuICBwYXRoOiBWZWN0b3IzW10sXG4gIHBvaW50UmVhY2hlZENhbGxiYWNrPzogYW55LFxuICBmaW5pc2hlZENhbGxiYWNrPzogYW55XG4pIHtcbiAgaWYgKElzRm9sbG93aW5nUGF0aC5oYXMobnBjKSkge1xuICAgIElzRm9sbG93aW5nUGF0aC5kZWxldGVGcm9tKG5wYylcbiAgICB3YWxraW5nVGltZXJzLmRlbGV0ZShucGMpXG4gIH1cbiAgSXNGb2xsb3dpbmdQYXRoLmNyZWF0ZShucGMpXG5cbiAgaWYgKHR5cGUpIHtcbiAgICBpZiAodHlwZSA9PSBOUENQYXRoVHlwZS5SSUdJRF9QQVRIKSB7XG4gICAgICB1dGlscy5wYXRocy5zdGFydFN0cmFpZ2h0UGF0aChcbiAgICAgICAgbnBjLFxuICAgICAgICBwYXRoLFxuICAgICAgICBkdXJhdGlvbixcbiAgICAgICAgdHJ1ZSxcbiAgICAgICAgKCkgPT4ge1xuICAgICAgICAgIGZpbmlzaGVkQ2FsbGJhY2soKVxuICAgICAgICB9LFxuICAgICAgICAoKSA9PiB7XG4gICAgICAgICAgcG9pbnRSZWFjaGVkQ2FsbGJhY2soKVxuICAgICAgICB9XG4gICAgICApXG4gICAgfSBlbHNlIHtcbiAgICAgIHV0aWxzLnBhdGhzLnN0YXJ0U21vb3RoUGF0aChcbiAgICAgICAgbnBjLFxuICAgICAgICBwYXRoLFxuICAgICAgICBkdXJhdGlvbixcbiAgICAgICAgMzAsXG4gICAgICAgIHRydWUsXG4gICAgICAgICgpID0+IHtcbiAgICAgICAgICBmaW5pc2hlZENhbGxiYWNrKClcbiAgICAgICAgfSxcbiAgICAgICAgKCkgPT4ge1xuICAgICAgICAgIHBvaW50UmVhY2hlZENhbGxiYWNrKClcbiAgICAgICAgfVxuICAgICAgKVxuICAgIH1cbiAgfSBlbHNlIHtcbiAgICB1dGlscy5wYXRocy5zdGFydFNtb290aFBhdGgoXG4gICAgICBucGMsXG4gICAgICBwYXRoLFxuICAgICAgZHVyYXRpb24sXG4gICAgICAyMCxcbiAgICAgIHRydWUsXG4gICAgICAoKSA9PiB7XG4gICAgICAgIGZpbmlzaGVkQ2FsbGJhY2soKVxuICAgICAgfSxcbiAgICAgICgpID0+IHtcbiAgICAgICAgcG9pbnRSZWFjaGVkQ2FsbGJhY2soKVxuICAgICAgfVxuICAgIClcbiAgfVxuXG4gIGlmIChucGNEYXRhLndhbGtpbmdBbmltKSB7XG4gICAgY2xlYXJBbmltYXRpb25UaW1lcihucGMpXG4gICAgQW5pbWF0b3IucGxheVNpbmdsZUFuaW1hdGlvbihucGMsIG5wY0RhdGFDb21wb25lbnQuZ2V0KG5wYykud2Fsa2luZ0FuaW0sIHRydWUpXG4gICAgbnBjRGF0YS5sYXN0UGxheWVkQW5pbSA9IG5wY0RhdGFDb21wb25lbnQuZ2V0KG5wYykud2Fsa2luZ0FuaW1cbiAgfVxuICBucGNEYXRhLnN0YXRlID0gTlBDU3RhdGUuRk9MTE9XUEFUSFxuICBucGNEYXRhLm1hbnVhbFN0b3AgPSBmYWxzZVxufVxuXG5leHBvcnQgZnVuY3Rpb24gc3RvcFdhbGtpbmcobnBjOiBFbnRpdHksIGR1cmF0aW9uPzogbnVtYmVyLCBmaW5pc2hlZD86IGJvb2xlYW4pIHtcbiAgbGV0IG5wY0RhdGEgPSBucGNEYXRhQ29tcG9uZW50LmdldChucGMpXG4gIG5wY0RhdGEuc3RhdGUgPSBOUENTdGF0ZS5TVEFORElOR1xuICBucGNEYXRhLm1hbnVhbFN0b3AgPSB0cnVlXG5cbiAgc3RvcFBhdGgobnBjKVxuXG4gIGlmIChkdXJhdGlvbikge1xuICAgIHV0aWxzLnRpbWVycy5zZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIC8vaWYgKHRoaXMuZGlhbG9nICYmIHRoaXMuZGlhbG9nLmlzRGlhbG9nT3BlbikgcmV0dXJuXG4gICAgICBpZiAobnBjRGF0YS5wYXRoKSB7XG4gICAgICAgIEFuaW1hdG9yLnN0b3BBbGxBbmltYXRpb25zKG5wYywgdHJ1ZSlcbiAgICAgICAgaWYgKG5wY0RhdGFDb21wb25lbnQuZ2V0KG5wYykud2Fsa2luZ0FuaW0pIHtcbiAgICAgICAgICBjbGVhckFuaW1hdGlvblRpbWVyKG5wYylcbiAgICAgICAgICBBbmltYXRvci5wbGF5U2luZ2xlQW5pbWF0aW9uKG5wYywgbnBjRGF0YUNvbXBvbmVudC5nZXQobnBjKS53YWxraW5nQW5pbSwgdHJ1ZSlcbiAgICAgICAgICBucGNEYXRhLmxhc3RQbGF5ZWRBbmltID0gbnBjRGF0YUNvbXBvbmVudC5nZXQobnBjKS53YWxraW5nQW5pbVxuICAgICAgICB9XG4gICAgICAgIGxldCBkdXJhdGlvbiA9IG5wY0RhdGEucGF0aERhdGEudG90YWxEdXJhdGlvblxuICAgICAgICBsZXQgY3VycmVudFRpbWVyOiBudW1iZXIgPSB3YWxraW5nVGltZXJzLmdldChucGMpIVxuICAgICAgICBjb25zb2xlLmxvZygnY3VycmVudCB0aW1lIGlzJywgY3VycmVudFRpbWVyKVxuICAgICAgICBpZiAoY3VycmVudFRpbWVyKSB7XG4gICAgICAgICAgZHVyYXRpb24gLT0gY3VycmVudFRpbWVyXG4gICAgICAgIH1cblxuICAgICAgICBsZXQgcGF0aDogYW55W10gPSBbXVxuICAgICAgICBucGNEYXRhLnBhdGhEYXRhLnBhdGguZm9yRWFjaCgocDogYW55KSA9PiB7XG4gICAgICAgICAgcGF0aC5wdXNoKHApXG4gICAgICAgIH0pXG4gICAgICAgIHBhdGguc3BsaWNlKDAsIG5wY0RhdGEucGF0aEluZGV4KVxuXG4gICAgICAgIGxldCBwb3MgPSBUcmFuc2Zvcm0uZ2V0KG5wYykucG9zaXRpb25cbiAgICAgICAgcGF0aC51bnNoaWZ0KFZlY3RvcjMuY3JlYXRlKHBvcy54LCBwb3MueSwgcG9zLnopKVxuXG4gICAgICAgIC8vbnBjRGF0YS5tYW51YWxTdG9wID0gZmFsc2VcbiAgICAgICAgd2Fsa05QQyhcbiAgICAgICAgICBucGMsXG4gICAgICAgICAgbnBjRGF0YSxcbiAgICAgICAgICBucGNEYXRhLnBhdGhEYXRhLnBhdGhUeXBlLFxuICAgICAgICAgIGR1cmF0aW9uLFxuICAgICAgICAgIHBhdGgsXG4gICAgICAgICAgcG9pbnRSZWFjaGVkQ2FsbGJhY2tzLmdldChucGMpLFxuICAgICAgICAgIG9uRmluaXNoQ2FsbGJhY2tzLmdldChucGMpXG4gICAgICAgIClcbiAgICAgIH1cbiAgICB9LCBkdXJhdGlvbiAqIDEwMDApXG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN0b3BQYXRoKG5wYzogRW50aXR5KSB7XG4gIHV0aWxzLnBhdGhzLnN0b3BQYXRoKG5wYylcbiAgSXNGb2xsb3dpbmdQYXRoLmRlbGV0ZUZyb20obnBjKVxuXG4gIGxldCBucGNEYXRhID0gbnBjRGF0YUNvbXBvbmVudC5nZXQobnBjKVxuICBpZiAobnBjRGF0YS53YWxraW5nQW5pbSkge1xuICAgIGNsZWFyQW5pbWF0aW9uVGltZXIobnBjKVxuICAgIEFuaW1hdG9yLnBsYXlTaW5nbGVBbmltYXRpb24obnBjLCBucGNEYXRhQ29tcG9uZW50LmdldChucGMpLmlkbGVBbmltKVxuICAgIG5wY0RhdGEubGFzdFBsYXllZEFuaW0gPSBucGNEYXRhLmlkbGVBbmltXG4gIH1cblxuICBpZiAoIW5wY0RhdGEubWFudWFsU3RvcCkge1xuICAgIGlmIChucGNEYXRhLnBhdGhEYXRhLmxvb3ApIHtcbiAgICAgIG5wY0RhdGEucGF0aEluZGV4ID0gMFxuICAgICAgd2Fsa2luZ1RpbWVycy5kZWxldGUobnBjKVxuICAgICAgY29uc29sZS5sb2coJ3dlIGFyZSBsb29waW5nIHBhdGgnLCBucGNEYXRhKVxuICAgICAgZm9sbG93UGF0aChucGMsIG5wY0RhdGEucGF0aERhdGEpXG4gICAgICBjb25zb2xlLmxvZyhucGNEYXRhKVxuICAgIH1cbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gY2xlYXJOUEMoKSB7XG4gIGFjdGl2ZU5QQyA9IE5VTExfTlBDXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzZXRBY3RpdmVOUEMobnBjOiBFbnRpdHkpIHtcbiAgYWN0aXZlTlBDID0gbnBjXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc0FjdGl2ZU5wY1NldCgpIHtcbiAgcmV0dXJuIGFjdGl2ZU5QQyAmJiBucGNEaWFsb2dDb21wb25lbnQuaGFzKGFjdGl2ZU5QQylcbn1cblxuLyoqXG4gKiBDYWxscyB0aGUgTlBDJ3MgYWN0aXZhdGlvbiBmdW5jdGlvbiAoc2V0IG9uIE5QQyBkZWZpbml0aW9uKS4gSWYgTlBDIGhhcyBgZmFjZVVzZXJgID0gdHJ1ZSwgaXQgd2lsbCByb3RhdGUgdG8gZmFjZSB0aGUgcGxheWVyLiBJdCBzdGFydHMgYSBjb29sZG93biBjb3VudGVyIHRvIGF2b2lkIHJlYWN0aXZhdGluZy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGFjdGl2YXRlKG5wYzogRW50aXR5LCBvdGhlcjogRW50aXR5KSB7XG4gIGlmIChhY3RpdmVOUEMgIT0gMCkge1xuICAgIGNvbnNvbGUubG9nKCd3ZSBoYXZlIGEgY3VycmVudCBucGMsIG5lZWR0byByZW1vdmUnKVxuICAgIGVuZEludGVyYWN0aW9uKGFjdGl2ZU5QQylcbiAgICAvLyBjbG9zZURpYWxvZyhhY3RpdmVOUEMpXG4gIH1cblxuICBhY3RpdmVOUEMgPSBucGNcbiAgb25BY3RpdmF0ZUNicy5nZXQobnBjKShvdGhlcilcblxuICBsZXQgbnBjRGF0YSA9IG5wY0RhdGFDb21wb25lbnQuZ2V0KG5wYylcbiAgaWYgKG5wY0RhdGEuZmFjZVVzZXIpIHtcbiAgICBpZiAoVHJhY2tVc2VyRmxhZy5oYXMobnBjKSkge1xuICAgICAgVHJhY2tVc2VyRmxhZy5kZWxldGVGcm9tKG5wYylcbiAgICB9XG5cbiAgICBUcmFja1VzZXJGbGFnLmNyZWF0ZShucGMsIHtcbiAgICAgIGxvY2tYWlJvdGF0aW9uOiB0cnVlLFxuICAgICAgYWN0aXZlOiB0cnVlLFxuICAgICAgcm90U3BlZWQ6IG5wY0RhdGEudHVyblNwZWVkXG4gICAgfSlcbiAgfVxuICBpc0Nvb2xkb3duLnNldChucGMsIHRydWUpXG4gIG5wY0RhdGEuaW5Db29sZG93biA9IHRydWVcblxuICB1dGlscy50aW1lcnMuc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG4gICAgaXNDb29sZG93bi5kZWxldGUobnBjKVxuICAgIG5wY0RhdGFDb21wb25lbnQuZ2V0KG5wYykuaW5Db29sZG93biA9IGZhbHNlXG4gIH0sIDEwMDAgKiBucGNEYXRhLmNvb2xEb3duRHVyYXRpb24pXG4gIGNvbnNvbGUubG9nKCdhY3RpdmF0ZWQgbnBjLCcsIG5wY0RhdGFDb21wb25lbnQuZ2V0KG5wYykpXG59XG5cbmZ1bmN0aW9uIGVuZEludGVyYWN0aW9uKG5wYzogRW50aXR5KSB7XG4gIGxldCBucGNEYXRhID0gbnBjRGF0YUNvbXBvbmVudC5nZXQobnBjKVxuICBucGNEYXRhLnN0YXRlID0gTlBDU3RhdGUuU1RBTkRJTkdcblxuICBpZiAobnBjRGlhbG9nQ29tcG9uZW50LmhhcyhucGMpKSB7XG4gICAgLy99ICYmIG5wY0RpYWxvZ0NvbXBvbmVudC5nZXQobnBjKS52aXNpYmxlKSB7XG4gICAgY2xvc2VEaWFsb2cobnBjKVxuICB9XG5cbiAgaWYgKG5wY0RhdGEuZmFjZVVzZXIpIHtcbiAgICBpZiAoVHJhY2tVc2VyRmxhZy5oYXMobnBjKSkge1xuICAgICAgVHJhY2tVc2VyRmxhZy5kZWxldGVGcm9tKG5wYylcbiAgICB9XG4gIH1cblxuICBjb25zb2xlLmxvZygnZW5kaW5nIGludGVyYWN0aW9uJywgbnBjRGF0YSwgYnViYmxlcy5nZXQobnBjKSlcbiAgaWYgKG5wY0RhdGEuaGFzQnViYmxlICYmIGJ1YmJsZXMuZ2V0KG5wYykuaXNCdWJibGVPcGVuKSB7XG4gICAgY2xvc2VCdWJibGUobnBjKVxuICB9XG59XG5cbi8qKlxuICogRW5kcyBpbnRlcmFjdGlvbiBhbmQgY2FsbHMgdGhlIG9uV2Fsa0F3YXkgZnVuY3Rpb25cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGhhbmRsZVdhbGtBd2F5KG5wYzogRW50aXR5LCBvdGhlcjogRW50aXR5KSB7XG4gIGxldCBucGNEYXRhID0gbnBjRGF0YUNvbXBvbmVudC5nZXQobnBjKVxuICBpZiAobnBjRGF0YS5zdGF0ZSA9PSBOUENTdGF0ZS5GT0xMT1dQQVRIKSB7XG4gICAgcmV0dXJuXG4gIH1cblxuICBlbmRJbnRlcmFjdGlvbihucGMpXG5cbiAgaWYgKG9uV2Fsa0F3YXlDYnMuZ2V0KG5wYykpIHtcbiAgICBvbldhbGtBd2F5Q2JzLmdldChucGMpKG90aGVyKVxuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwbGF5QW5pbWF0aW9uKG5wYzogRW50aXR5LCBhbmltOiBzdHJpbmcsIG5vTG9vcD86IGJvb2xlYW4sIGR1cmF0aW9uPzogbnVtYmVyKSB7XG4gIGxldCBhbmltYXRpb25zID0gQW5pbWF0b3IuZ2V0TXV0YWJsZShucGMpXG4gIGxldCBucGNEYXRhID0gbnBjRGF0YUNvbXBvbmVudC5nZXQobnBjKVxuXG4gIGlmICghYW5pbWF0aW9ucyB8fCAhbnBjRGF0YSkgcmV0dXJuXG5cbiAgaWYgKGFuaW1hdGlvbnMuc3RhdGVzICYmIGFuaW1hdGlvbnMuc3RhdGVzLmZpbHRlcigoYW5pbWF0aW9uOiBQQkFuaW1hdGlvblN0YXRlKSA9PiBhbmltYXRpb24uY2xpcCA9PT0gYW5pbSkubGVuZ3RoID09IDApIHtcbiAgICBhbmltYXRpb25zLnN0YXRlcy5wdXNoKHsgY2xpcDogYW5pbSwgbG9vcDogbm9Mb29wID8gZmFsc2UgOiB0cnVlIH0pXG4gIH1cblxuICBpZiAobnBjRGF0YS5zdGF0ZSA9PSBOUENTdGF0ZS5GT0xMT1dQQVRIKSB7XG4gICAgdXRpbHMucGF0aHMuc3RvcFBhdGgobnBjKVxuICB9XG5cbiAgY2xlYXJBbmltYXRpb25UaW1lcihucGMpXG5cbiAgQW5pbWF0b3Iuc3RvcEFsbEFuaW1hdGlvbnMobnBjLCB0cnVlKVxuICBBbmltYXRvci5wbGF5U2luZ2xlQW5pbWF0aW9uKG5wYywgYW5pbSwgdHJ1ZSlcbiAgaWYgKGR1cmF0aW9uKSB7XG4gICAgY29uc29sZS5sb2coJ2hhdmUgYSBkdXJhdGlvbiB0byBwbGF5IGFuaW1hdGlvbicpXG4gICAgY2xlYXJBbmltYXRpb25UaW1lcihucGMpXG4gICAgYW5pbVRpbWVycy5zZXQoXG4gICAgICBucGMsXG4gICAgICB1dGlscy50aW1lcnMuc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIGNsZWFyQW5pbWF0aW9uVGltZXIobnBjKVxuICAgICAgICBBbmltYXRvci5zdG9wQWxsQW5pbWF0aW9ucyhucGMsIHRydWUpXG4gICAgICAgIGlmIChucGNEYXRhLmlkbGVBbmltKSB7XG4gICAgICAgICAgQW5pbWF0b3IucGxheVNpbmdsZUFuaW1hdGlvbihucGMsIG5wY0RhdGEuaWRsZUFuaW0pXG4gICAgICAgICAgbnBjRGF0YS5sYXN0UGxheWVkQW5pbSA9IG5wY0RhdGEuaWRsZUFuaW1cbiAgICAgICAgfVxuICAgICAgfSwgMTAwMCAqIGR1cmF0aW9uKVxuICAgICkgLy9cbiAgfVxuXG4gIG5wY0RhdGEubGFzdFBsYXllZEFuaW0gPSBhbmltXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjaGFuZ2VJZGxlQW5pbShucGM6IEVudGl0eSwgYW5pbWF0aW9uOiBzdHJpbmcsIHBsYXk/OiBib29sZWFuKSB7XG4gIGxldCBucGNEYXRhID0gbnBjRGF0YUNvbXBvbmVudC5nZXQobnBjKVxuICBucGNEYXRhLmlkbGVBbmltID0gYW5pbWF0aW9uXG5cbiAgbGV0IGFuaW1hdGlvbnMgPSBBbmltYXRvci5nZXRNdXRhYmxlKG5wYylcbiAgaWYgKGFuaW1hdGlvbnMuc3RhdGVzLmZpbHRlcigoYW5pbSkgPT4gYW5pbS5jbGlwID09PSBhbmltYXRpb24pLmxlbmd0aCA9PSAwKSB7XG4gICAgYW5pbWF0aW9ucy5zdGF0ZXMucHVzaCh7IGNsaXA6IGFuaW1hdGlvbiwgbG9vcDogdHJ1ZSB9KVxuICB9XG5cbiAgaWYgKHBsYXkpIHtcbiAgICBwbGF5QW5pbWF0aW9uKG5wYywgYW5pbWF0aW9uLCB0cnVlKVxuICAgIG5wY0RhdGFDb21wb25lbnQuZ2V0KG5wYykubGFzdFBsYXllZEFuaW0gPSBhbmltYXRpb25cbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gdGFsa0J1YmJsZShucGM6IEVudGl0eSwgc2NyaXB0OiBEaWFsb2dbXSwgc3RhcnRJbmRleD86IG51bWJlciB8IHN0cmluZykge1xuICBvcGVuQnViYmxlKG5wYywgc2NyaXB0LCBzdGFydEluZGV4KVxufVxuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlRGlhbG9nV2luZG93KGRlZmF1bHRQb3J0cmFpdD86IEltYWdlRGF0YSwgc291bmQ/OiBzdHJpbmcpIHtcbiAgbGV0IGRpYWxvZyA9IGVuZ2luZS5hZGRFbnRpdHkoKVxuICBhZGREaWFsb2coZGlhbG9nLCBzb3VuZCwgZGVmYXVsdFBvcnRyYWl0KVxuICByZXR1cm4gZGlhbG9nXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBvcGVuRGlhbG9nV2luZG93KG5wYzogRW50aXR5LCBkaWFsb2c6IERpYWxvZ1tdLCBzdGFydEluZGV4PzogbnVtYmVyIHwgc3RyaW5nKSB7XG4gIGFjdGl2ZU5QQyA9IG5wY1xuXG4gIGlmIChucGNEaWFsb2dDb21wb25lbnQuaGFzKG5wYykpIHtcbiAgICBsZXQgaW5kZXg6IGFueVxuICAgIGlmICghc3RhcnRJbmRleCkge1xuICAgICAgaW5kZXggPSAwXG4gICAgfSBlbHNlIGlmICh0eXBlb2Ygc3RhcnRJbmRleCA9PT0gJ251bWJlcicpIHtcbiAgICAgIGluZGV4ID0gc3RhcnRJbmRleFxuICAgIH0gZWxzZSB7XG4gICAgICBpbmRleCA9IGZpbmREaWFsb2dCeU5hbWUoZGlhbG9nLCBzdGFydEluZGV4KVxuICAgIH1cbiAgICBvcGVuRGlhbG9nKG5wYywgZGlhbG9nLCBpbmRleClcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gY2xvc2VEaWFsb2dXaW5kb3cod2luZG93OiBFbnRpdHkpIHtcbiAgbGV0IGRpYWxvZyA9IG5wY0RpYWxvZ0NvbXBvbmVudC5nZXQod2luZG93KVxuICBpZiAod2luZG93KSB7XG4gICAgY2xvc2VEaWFsb2coZGlhbG9nKVxuICB9XG59XG5cbmZ1bmN0aW9uIGNsZWFyQW5pbWF0aW9uVGltZXIobnBjOiBFbnRpdHkpOiBib29sZWFuIHtcbiAgaWYgKGFuaW1UaW1lcnMuaGFzKG5wYykpIHtcbiAgICB1dGlscy50aW1lcnMuY2xlYXJUaW1lb3V0KGFuaW1UaW1lcnMuZ2V0KG5wYykgYXMgbnVtYmVyKVxuICAgIGFuaW1UaW1lcnMuZGVsZXRlKG5wYylcbiAgICByZXR1cm4gdHJ1ZVxuICB9XG4gIHJldHVybiBmYWxzZVxufVxuIl19
644
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibnBjLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL25wYy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsUUFBUSxFQUNSLFdBQVcsRUFDWCxNQUFNLEVBRU4sYUFBYSxFQUViLFlBQVksRUFDWixZQUFZLEVBR1osbUJBQW1CLEVBQ25CLFNBQVMsRUFHVCxXQUFXLEVBQ1gsdUJBQXVCLEVBQ3hCLE1BQU0sY0FBYyxDQUFBO0FBQ3JCLE9BQU8sRUFBVSxVQUFVLEVBQUUsT0FBTyxFQUFFLE1BQU0sZUFBZSxDQUFBO0FBQzNELE9BQU8sRUFBRSxPQUFPLEVBQUUsV0FBVyxFQUFFLGtCQUFrQixFQUFFLFVBQVUsRUFBRSxNQUFNLFVBQVUsQ0FBQTtBQUMvRSxPQUFPLEVBQUUsZUFBZSxFQUFFLGFBQWEsRUFBRSxNQUFNLGNBQWMsQ0FBQTtBQUM3RCxPQUFPLEVBQUUsU0FBUyxFQUFFLFdBQVcsRUFBRSxnQkFBZ0IsRUFBRSxrQkFBa0IsRUFBRSxVQUFVLEVBQUUsTUFBTSxVQUFVLENBQUE7QUFDbkcsT0FBTyxFQUFFLGNBQWMsRUFBRSxrQkFBa0IsRUFBRSxrQkFBa0IsRUFBRSxlQUFlLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxXQUFXLENBQUE7QUFDeEgsT0FBTyxFQUE4QyxXQUFXLEVBQUUsUUFBUSxFQUFFLE9BQU8sRUFBZSxNQUFNLFNBQVMsQ0FBQTtBQUNqSCxPQUFPLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBRSxNQUFNLE1BQU0sQ0FBQTtBQUM1QyxPQUFPLEVBQUUsYUFBYSxFQUFFLGVBQWUsRUFBRSxvQkFBb0IsRUFBaUIsTUFBTSxlQUFlLENBQUE7QUFDbkcsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLGNBQWMsQ0FBQTtBQUtwQyxNQUFNLENBQUMsTUFBTSxhQUFhLEdBQXdCLElBQUksR0FBRyxFQUFFLENBQUE7QUFDM0QsTUFBTSxDQUFDLE1BQU0sZ0JBQWdCLEdBQXFCLElBQUksR0FBRyxFQUFFLENB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RUFBRSxRQUFRLENBQUMsUUFBUTtRQUN4QixRQUFRLEVBQUUsSUFBSSxJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLE1BQU07UUFDeEQsWUFBWSxFQUFFLElBQUksSUFBSSxJQUFJLENBQUMsVUFBVSxJQUFJLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLFNBQVM7UUFDMUYsV0FBVyxFQUFFLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLFNBQVM7UUFDNUQsU0FBUyxFQUFFLElBQUksSUFBSSxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUs7UUFDakQsU0FBUyxFQUFFLElBQUksSUFBSSxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzVELEtBQUssRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLFVBQVU7UUFDM0MsYUFBYSxFQUFFLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDMUQsYUFBYSxFQUFFLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLENBQUM7S0FDM0QsQ0FBQyxDQUFBO0lBRUYsSUFBSSxJQUFJLElBQUksSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO0lBQ3hCLENBQUM7U0FBTSxJQUFJLElBQUksSUFBSSxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7UUFDakMsU0FBUyxDQUNQLEdBQUcsRUFDSCxJQUFJLElBQUksSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFD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InNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIEFuaW1hdG9yLFxuICBBdmF0YXJTaGFwZSxcbiAgZW5naW5lLFxuICBFbnRpdHksXG4gIEdsdGZDb250YWluZXIsXG4gIElucHV0QWN0aW9uLFxuICBNZXNoQ29sbGlkZXIsXG4gIE1lc2hSZW5kZXJlcixcbiAgUEJBdmF0YXJTaGFwZSxcbiAgUEJHbHRmQ29udGFpbmVyLFxuICBwb2ludGVyRXZlbnRzU3lzdGVtLFxuICBUcmFuc2Zvcm0sXG4gIFRyYW5zZm9ybVR5cGUsXG4gIFBCQW5pbWF0aW9uU3RhdGUsXG4gIFRyaWdnZXJBcmVhLCBcbiAgdHJpZ2dlckFyZWFFdmVudHNTeXN0ZW1cbn0gZnJvbSAnQGRjbC9zZGsvZWNzJ1xuaW1wb3J0IHsgQ29sb3IzLCBRdWF0ZXJuaW9uLCBWZWN0b3IzIH0gZnJvbSAnQGRjbC9zZGsvbWF0aCdcbmltcG9ydCB7IGJ1YmJsZXMsIGNsb3NlQnViYmxlLCBjcmVhdGVEaWFsb2dCdWJibGUsIG9wZW5CdWJibGUgfSBmcm9tICcuL2J1YmJsZSdcbmltcG9ydCB7IElzRm9sbG93aW5nUGF0aCwgVHJhY2tVc2VyRmxhZyB9IGZyb20gJy4vY29tcG9uZW50cydcbmltcG9ydCB7IGFkZERpYWxvZywgY2xvc2VEaWFsb2csIGZpbmREaWFsb2dCeU5hbWUsIG5wY0RpYWxvZ0NvbXBvbmVudCwgb3BlbkRpYWxvZyB9IGZyb20gJy4vZGlhbG9nJ1xuaW1wb3J0IHsgZmFjZVVzZXJTeXN0ZW0sIGhhbmRsZUJ1YmJsZXR5cGluZywgaGFuZGxlRGlhbG9nVHlwaW5nLCBoYW5kbGVQYXRoVGltZXMsIGlucHV0TGlzdGVuZXJTeXN0ZW0gfSBmcm9tICcuL3N5c3RlbXMnXG5pbXBvcnQgeyBEaWFsb2csIEZvbGxvd1BhdGhEYXRhLCBJbWFnZURhdGEsIE5QQ0RhdGEsIE5QQ1BhdGhUeXBlLCBOUENTdGF0ZSwgTlBDVHlwZSwgVHJpZ2dlckRhdGEgfSBmcm9tICcuL3R5cGVzJ1xuaW1wb3J0IHsgZGFya1RoZW1lLCBsaWdodFRoZW1lIH0gZnJvbSAnLi91aSdcbmltcG9ydCB7IGRlYnVnVHJpZ2dlcnMsIGRlbGF5ZWRGdW5jdGlvbiwgY2xlYXJEZWxheWVkRnVuY3Rpb24sIERlbGF5ZWRIYW5kbGUgfSBmcm9tICcuL3V0aWxzL3V0aWxzJ1xuaW1wb3J0IHsgcGF0aHMgfSBmcm9tICcuL3V0aWxzL3BhdGgnXG5cblxudHlwZSBOUENEYXRhRnJvbUVudGl0eSA9IE9taXQ8TlBDRGF0YSwgJ3R5cGUnPiAmIHsgdHlwZT86IE5QQ1R5cGUgfVxuXG5leHBvcnQgY29uc3Qgd2Fsa2luZ1RpbWVyczogTWFwPEVudGl0eSwgbnVtYmVyPiA9IG5ldyBNYXAoKVxuZXhwb3J0IGNvbnN0IG5wY0RhdGFDb21wb25lbnQ6IE1hcDxFbnRpdHksIGFueT4gPSBuZXcgTWFwKClcbmV4cG9ydCBsZXQgTlVMTF9OUEM6IEVudGl0eSA9IDAgYXMgRW50aXR5XG5leHBvcnQgbGV0IGFjdGl2ZU5QQzogRW50aXR5ID0gTlVMTF9OUENcbmV4cG9ydCBsZXQgYmxhbmtEaWFsb2c6IG51bWJlciA9IDBcblxuZW5naW5lLmFkZFN5c3RlbShoYW5kbGVQYXRoVGltZXMpXG5lbmdpbmUuYWRkU3lzdGVtKGhhbmRsZURpYWxvZ1R5cGluZylcbmVuZ2luZS5hZGRTeXN0ZW0oaGFuZGxlQnViYmxldHlwaW5nKVxuZW5naW5lLmFkZFN5c3RlbShmYWNlVXNlclN5c3RlbSlcbmVuZ2luZS5hZGRTeXN0ZW0oaW5wdXRMaXN0ZW5lclN5c3RlbSlcblxuLy9UT0RPIE1BS0UgaXNDb29sZG93biBhbmQgbm8gbG9uZ2VyIGhhdmUgdG8gdHJhY2sgd2l0aCBtYXAgdG8gcmVtb3ZlIG1lbW9yeSBsZWFrIGlzc3Vlc1xuY29uc3QgaXNDb29sZG93bjogTWFwPEVudGl0eSwgYW55PiA9IG5ldyBNYXAoKVxuY29uc3Qgb25BY3RpdmF0ZUNiczogTWFwPEVudGl0eSwgYW55PiA9IG5ldyBNYXAoKVxuY29uc3Qgb25XYWxrQXdheUNiczogTWFwPEVudGl0eSwgYW55PiA9IG5ldyBNYXAoKVxuY29uc3QgYW5pbVRpbWVyczogTWFwPEVudGl0eSwgRGVsYXllZEhhbmRsZT4gPSBuZXcgTWFwKClcbmNvbnN0IHBvaW50UmVhY2hlZENhbGxiYWNrczogTWFwPEVudGl0eSwgYW55PiA9IG5ldyBNYXAoKVxuY29uc3Qgb25GaW5pc2hDYWxsYmFja3M6IE1hcDxFbnRpdHksIGFueT4gPSBuZXcgTWFwKClcblxuZXhwb3J0IGZ1bmN0aW9uIHNob3dEZWJ1ZyhkZWJ1ZzogYm9vbGVhbikge1xuICBpZihkZWJ1Zykge1xuICAgIGRlYnVnVHJpZ2dlcnMoKVxuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXREYXRhKG5wYzogRW50aXR5KSB7XG4gIHJldHVybiBucGNEYXRhQ29tcG9uZW50LmdldChucGMpXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGUodHJhbnNmb3JtOiBhbnksIGRhdGE6IE5QQ0RhdGEpIHtcbiAgbGV0IG5wYyA9IGVuZ2luZS5hZGRFbnRpdHkoKVxuXG4gIGxldCB0OiBUcmFuc2Zvcm1UeXBlID0ge1xuICAgIHBvc2l0aW9uOiB0cmFuc2Zvcm0ucG9zaXRpb24gPyB0cmFuc2Zvcm0ucG9zaXRpb24gOiBWZWN0b3IzLmNyZWF0ZSgwLCAwLCAwKSxcbiAgICByb3RhdGlvbjogdHJhbnNmb3JtLnJvdGF0aW9uID8gdHJhbnNmb3JtLnJvdGF0aW9uIDogUXVhdGVybmlvbi5aZXJvKCksXG4gICAgc2NhbGU6IHRyYW5zZm9ybS5zY2FsZSA/IHRyYW5zZm9ybS5zY2FsZSA6IFZlY3RvcjMuT25lKClcbiAgfVxuICBUcmFuc2Zvcm0uY3JlYXRlKG5wYywgdClcblxuICBucGNEYXRhQ29tcG9uZW50LnNldChucGMsIHtcbiAgICBpbnRyb2R1Y2VkOiBmYWxzZSxcbiAgICBpbkNvb2xkb3duOiBmYWxzZSxcbiAgICBjb29sRG93bkR1cmF0aW9uOiBkYXRhICYmIGRhdGEuY29vbERvd25EdXJhdGlvbiA/IGRhdGEuY29vbERvd25EdXJhdGlvbiA6IDUsXG4gICAgZmFjZVVzZXI6IGRhdGEgJiYgZGF0YS5mYWNlVXNlciA/IGRhdGEuZmFjZVVzZXIgOiB1bmRlZmluZWQsXG4gICAgd2Fsa2luZ1NwZWVkOiAyLFxuICAgIHdhbGtpbmdBbmltOiBkYXRhICYmIGRhdGEud2Fsa2luZ0FuaW0gPyBkYXRhLndhbGtpbmdBbmltIDogdW5kZWZpbmVkLFxuICAgIHBhdGhEYXRhOiBkYXRhLnBhdGhEYXRhID8gZGF0YS5wYXRoRGF0YSA6IHVuZGVmaW5lZCxcbiAgICBjdXJyZW50UGF0aERhdGE6IFtdLFxuICAgIG1hbnVhbFN0b3A6IGZhbHNlLFxuICAgIHBhdGhJbmRleDogMCxcbiAgICBzdGF0ZTogTlBDU3RhdGUuU1RBTkRJTkcsXG4gICAgaWRsZUFuaW06IGRhdGEgJiYgZGF0YS5pZGxlQW5pbSA/IGRhdGEuaWRsZUFuaW0gOiAnSWRsZScsXG4gICAgYnViYmxlSGVpZ2h0OiBkYXRhICYmIGRhdGEudGV4dEJ1YmJsZSAmJiBkYXRhLmJ1YmJsZUhlaWdodCA/IGRhdGEuYnViYmxlSGVpZ2h0IDogdW5kZWZpbmVkLFxuICAgIGJ1YmJsZVNvdW5kOiBkYXRhLmRpYWxvZ1NvdW5kID8gZGF0YS5kaWFsb2dTb3VuZCA6IHVuZGVmaW5lZCxcbiAgICBoYXNCdWJibGU6IGRhdGEgJiYgZGF0YS50ZXh0QnViYmxlID8gdHJ1ZSA6IGZhbHNlLFxuICAgIHR1cm5TcGVlZDogZGF0YSAmJiBkYXRhLnR1cm5pbmdTcGVlZCA/IGRhdGEudHVybmluZ1NwZWVkIDogMixcbiAgICB0aGVtZTogZGF0YS5kYXJrVUkgPyBkYXJrVGhlbWUgOiBsaWdodFRoZW1lLFxuICAgIGJ1YmJsZVhPZmZzZXQ6IGRhdGEuYnViYmxlWE9mZnNldCA/IGRhdGEuYnViYmxlWE9mZnNldCA6IDAsXG4gICAgYnViYmxlWU9mZnNldDogZGF0YS5idWJibGVZT2Zmc2V0ID8gZGF0YS5idWJibGVZT2Zmc2V0IDogMFxuICB9KVxuXG4gIGlmIChkYXRhICYmIGRhdGEubm9VSSkge1xuICB9IGVsc2UgaWYgKGRhdGEgJiYgZGF0YS5wb3J0cmFpdCkge1xuICAgIGFkZERpYWxvZyhcbiAgICAgIG5wYyxcbiAgICAgIGRhdGEgJiYgZGF0YS5kaWFsb2dTb3VuZCA/IGRhdGEuZGlhbG9nU291bmQgOiB1bmRlZmluZWQsXG4gICAgICB0eXBlb2YgZGF0YS5wb3J0cmFpdCA9PT0gYHN0cmluZ2AgPyB7IHBhdGg6IGRhdGEucG9ydHJhaXQgfSA6IGRhdGEucG9ydHJhaXRcbiAgICApXG4gIH0gZWxzZSB7XG4gICAgYWRkRGlhbG9nKG5wYywgZGF0YSAmJiBkYXRhLmRpYWxvZ1NvdW5kID8gZGF0YS5kaWFsb2dTb3VuZCA6IHVuZGVmaW5lZClcbiAgfVxuXG4gIGlmIChkYXRhICYmIGRhdGEudGV4dEJ1YmJsZSkge1xuICAgIGNyZWF0ZURpYWxvZ0J1YmJsZShucGMsIG5wY0RhdGFDb21wb25lbnQuZ2V0KG5wYykuYnViYmxlSGVpZ2h0KVxuICB9XG5cbiAgb25BY3RpdmF0ZUNicy5zZXQobnBjLCAob3RoZXI6IEVudGl0eSkgPT4ge1xuICAgIGRhdGEub25BY3RpdmF0ZShvdGhlcilcbiAgfSlcblxuICBpZiAoZGF0YSAmJiBkYXRhLmhhc093blByb3BlcnR5KCdvbldhbGtBd2F5JykpIHtcbiAgICBvbldhbGtBd2F5Q2JzLnNldChucGMsIChvdGhlcjogRW50aXR5KSA9PiB7XG4gICAgICBpZiAoIWRhdGEgfHwgIWRhdGEuY29udGludWVPbldhbGtBd2F5KSB7XG4gICAgICAgIGlmIChucGNEaWFsb2dDb21wb25lbnQuaGFzKG5wYykpIHtcbiAgICAgICAgICBucGNEaWFsb2dDb21wb25lbnQuZ2V0KG5wYykudmlzaWJsZSA9IGZhbHNlXG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmIChucGNEaWFsb2dDb21wb25lbnQuaGFzKG5wYykpIHtcbiAgICAgICAgICBucGNEaWFsb2dDb21wb25lbnQuZ2V0KG5wYykudmlzaWJsZSA9IGZhbHNlXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGRhdGEub25XYWxrQXdheSEob3RoZXIpXG4gICAgfSlcbiAgfVxuXG4gIGFkZE5QQ0JvbmVzKG5wYywgZGF0YSlcbiAgYWRkQ2xpY2tSZWFjdGlvbnMobnBjLCBkYXRhKVxuICBhZGRUcmlnZ2VyQXJlYShucGMsIGRhdGEpXG5cbiAgaWYgKGRhdGEgJiYgZGF0YS5wYXRoRGF0YSAmJiBkYXRhLnBhdGhEYXRhLnNwZWVkKSB7XG4gICAgbGV0IG5wY0RhdGEgPSBucGNEYXRhQ29tcG9uZW50LmdldChucGMpXG4gICAgbnBjRGF0YS53YWxraW5nU3BlZWQgPSBkYXRhLnBhdGhEYXRhLnNwZWVkXG4gIH1cblxuICBpZiAoZGF0YSAmJiBkYXRhLmNvb2xEb3duRHVyYXRpb24pIHtcbiAgICBsZXQgbnBjRGF0YSA9IG5wY0RhdGFDb21wb25lbnQuZ2V0KG5wYylcbiAgICBucGNEYXRhLmNvb2xEb3duRHVyYXRpb24gPSBkYXRhLmNvb2xEb3duRHVyYXRpb25cbiAgfVxuXG4gIGlmIChkYXRhICYmIGRhdGEucGF0aERhdGEpIHtcbiAgICBsZXQgbnBjRGF0YSA9IG5wY0RhdGFDb21wb25lbnQuZ2V0KG5wYylcbiAgICBucGNEYXRhLnBhdGhEYXRhLmxvb3AgPSB0cnVlXG4gICAgZm9sbG93UGF0aChucGMsIG5wY0RhdGEucGF0aERhdGEpXG4gIH1cblxuICByZXR1cm4gbnBjXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVGcm9tRW50aXR5KGVudGl0eTogRW50aXR5LCBkYXRhOiBOUENEYXRhRnJvbUVudGl0eSkge1xuICBjb25zdCBucGMgPSBlbnRpdHlcblxuICBjb25zdCByZXNvbHZlZFR5cGUgPSAoZGF0YSAmJiBkYXRhLnR5cGUgIT09IHVuZGVmaW5lZCA/IGRhdGEudHlwZSA6IE5QQ1R5cGUuQ1VTVE9NKVxuXG4gIGlmICghVHJhbnNmb3JtLmhhcyhucGMpKSB7XG4gICAgY29uc29sZS5sb2coJ2NyZWF0ZUZyb21FbnRpdHk6IFByb3ZpZGVkIGVudGl0eSBpcyBtaXNzaW5nIFRyYW5zZm9ybSBjb21wb25lbnQnKVxuICB9XG5cbiAgaWYgKHJlc29sdmVkVHlwZSA9PT0gTlBDVHlwZS5DVVNUT00gJiYgIUdsdGZDb250YWluZXIuaGFzKG5wYykpIHtcbiAgICBjb25zb2xlLmxvZygnY3JlYXRlRnJvbUVudGl0eTogRXhwZWN0ZWQgYSBHbHRmQ29udGFpbmVyIG9uIENVU1RPTSBOUEMgZW50aXR5JylcbiAgfVxuXG4gIG5wY0RhdGFDb21wb25lbnQuc2V0KG5wYywge1xuICAgIGludHJvZHVjZWQ6IGZhbHNlLFxuICAgIGluQ29vbGRvd246IGZhbHNlLFxuICAgIGNvb2xEb3duRHVyYXRpb246IGRhdGEgJiYgZGF0YS5jb29sRG93bkR1cmF0aW9uID8gZGF0YS5jb29sRG93bkR1cmF0aW9uIDogNSxcbiAgICBmYWNlVXNlcjogZGF0YSAmJiBkYXRhLmZhY2VVc2VyID8gZGF0YS5mYWNlVXNlciA6IHVuZGVmaW5lZCxcbiAgICB3YWxraW5nU3BlZWQ6IDIsXG4gICAgd2Fsa2luZ0FuaW06IGRhdGEgJiYgZGF0YS53YWxraW5nQW5pbSA/IGRhdGEud2Fsa2luZ0FuaW0gOiB1bmRlZmluZWQsXG4gICAgcGF0aERhdGE6IGRhdGEucGF0aERhdGEgPyBkYXRhLnBhdGhEYXRhIDogdW5kZWZpbmVkLFxuICAgIGN1cnJlbnRQYXRoRGF0YTogW10sXG4gICAgbWFudWFsU3RvcDogZmFsc2UsXG4gICAgcGF0aEluZGV4OiAwLFxuICAgIHN0YXRlOiBOUENTdGF0ZS5TVEFORElORyxcbiAgICBpZGxlQW5pbTogZGF0YSAmJiBkYXRhLmlkbGVBbmltID8gZGF0YS5pZGxlQW5pbSA6ICdJZGxlJyxcbiAgICBidWJibGVIZWlnaHQ6IGRhdGEgJiYgZGF0YS50ZXh0QnViYmxlICYmIGRhdGEuYnViYmxlSGVpZ2h0ID8gZGF0YS5idWJibGVIZWlnaHQgOiB1bmRlZmluZWQsXG4gICAgYnViYmxlU291bmQ6IGRhdGEuZGlhbG9nU291bmQgPyBkYXRhLmRpYWxvZ1NvdW5kIDogdW5kZWZpbmVkLFxuICAgIGhhc0J1YmJsZTogZGF0YSAmJiBkYXRhLnRleHRCdWJibGUgPyB0cnVlIDogZmFsc2UsXG4gICAgdHVyblNwZWVkOiBkYXRhICYmIGRhdGEudHVybmluZ1NwZWVkID8gZGF0YS50dXJuaW5nU3BlZWQgOiAyLFxuICAgIHRoZW1lOiBkYXRhLmRhcmtVSSA/IGRhcmtUaGVtZSA6IGxpZ2h0VGhlbWUsXG4gICAgYnViYmxlWE9mZnNldDogZGF0YS5idWJibGVYT2Zmc2V0ID8gZGF0YS5idWJibGVYT2Zmc2V0IDogMCxcbiAgICBidWJibGVZT2Zmc2V0OiBkYXRhLmJ1YmJsZVlPZmZzZXQgPyBkYXRhLmJ1YmJsZVlPZmZzZXQgOiAwXG4gIH0pXG5cbiAgaWYgKGRhdGEgJiYgZGF0YS5ub1VJKSB7XG4gIH0gZWxzZSBpZiAoZGF0YSAmJiBkYXRhLnBvcnRyYWl0KSB7XG4gICAgYWRkRGlhbG9nKFxuICAgICAgbnBjLFxuICAgICAgZGF0YSAmJiBkYXRhLmRpYWxvZ1NvdW5kID8gZGF0YS5kaWFsb2dTb3VuZCA6IHVuZGVmaW5lZCxcbiAgICAgIHR5cGVvZiBkYXRhLnBvcnRyYWl0ID09PSBgc3RyaW5nYCA/IHsgcGF0aDogZGF0YS5wb3J0cmFpdCB9IDogZGF0YS5wb3J0cmFpdFxuICAgIClcbiAgfSBlbHNlIHtcbiAgICBhZGREaWFsb2cobnBjLCBkYXRhICYmIGRhdGEuZGlhbG9nU291bmQgPyBkYXRhLmRpYWxvZ1NvdW5kIDogdW5kZWZpbmVkKVxuICB9XG5cbiAgaWYgKGRhdGEgJiYgZGF0YS50ZXh0QnViYmxlKSB7XG4gICAgY3JlYXRlRGlhbG9nQnViYmxlKG5wYywgbnBjRGF0YUNvbXBvbmVudC5nZXQobnBjKS5idWJibGVIZWlnaHQpXG4gIH1cblxuICBvbkFjdGl2YXRlQ2JzLnNldChucGMsIChvdGhlcjogRW50aXR5KSA9PiB7XG4gICAgZGF0YS5vbkFjdGl2YXRlKG90aGVyKVxuICB9KVxuXG4gIGlmIChkYXRhICYmIGRhdGEuaGFzT3duUHJvcGVydHkoJ29uV2Fsa0F3YXknKSkge1xuICAgIG9uV2Fsa0F3YXlDYnMuc2V0KG5wYywgKG90aGVyOiBFbnRpdHkpID0+IHtcbiAgICAgIGlmICghZGF0YSB8fCAhZGF0YS5jb250aW51ZU9uV2Fsa0F3YXkpIHtcbiAgICAgICAgaWYgKG5wY0RpYWxvZ0NvbXBvbmVudC5oYXMobnBjKSkge1xuICAgICAgICAgIG5wY0RpYWxvZ0NvbXBvbmVudC5nZXQobnBjKS52aXNpYmxlID0gZmFsc2VcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKG5wY0RpYWxvZ0NvbXBvbmVudC5oYXMobnBjKSkge1xuICAgICAgICAgIG5wY0RpYWxvZ0NvbXBvbmVudC5nZXQobnBjKS52aXNpYmxlID0gZmFsc2VcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgZGF0YS5vbldhbGtBd2F5IShvdGhlcilcbiAgICB9KVxuICB9XG5cbiAgY29uc3QgZGF0YVdpdGhUeXBlID0geyAuLi5kYXRhLCB0eXBlOiByZXNvbHZlZFR5cGUgfSBhcyBOUENEYXRhXG4gIHNlZWRBbmltYXRvckZvckV4aXN0aW5nKG5wYywgZGF0YVdpdGhUeXBlKVxuICBhZGRDbGlja1JlYWN0aW9ucyhucGMsIGRhdGFXaXRoVHlwZSlcbiAgYWRkVHJpZ2dlckFyZWEobnBjLCBkYXRhV2l0aFR5cGUpXG5cbiAgaWYgKGRhdGEgJiYgZGF0YS5wYXRoRGF0YSAmJiBkYXRhLnBhdGhEYXRhLnNwZWVkKSB7XG4gICAgbGV0IG5wY0RhdGEgPSBucGNEYXRhQ29tcG9uZW50LmdldChucGMpXG4gICAgbnBjRGF0YS53YWxraW5nU3BlZWQgPSBkYXRhLnBhdGhEYXRhLnNwZWVkXG4gIH1cblxuICBpZiAoZGF0YSAmJiBkYXRhLmNvb2xEb3duRHVyYXRpb24pIHtcbiAgICBsZXQgbnBjRGF0YSA9IG5wY0RhdGFDb21wb25lbnQuZ2V0KG5wYylcbiAgICBucGNEYXRhLmNvb2xEb3duRHVyYXRpb24gPSBkYXRhLmNvb2xEb3duRHVyYXRpb25cbiAgfVxuXG4gIGlmIChkYXRhICYmIGRhdGEucGF0aERhdGEpIHtcbiAgICBsZXQgbnBjRGF0YSA9IG5wY0RhdGFDb21wb25lbnQuZ2V0KG5wYylcbiAgICBucGNEYXRhLnBhdGhEYXRhLmxvb3AgPSB0cnVlXG4gICAgZm9sbG93UGF0aChucGMsIG5wY0RhdGEucGF0aERhdGEpXG4gIH1cblxuICByZXR1cm4gbnBjXG59XG5cbmZ1bmN0aW9uIGFkZE5QQ0JvbmVzKG5wYzogRW50aXR5LCBkYXRhOiBOUENEYXRhKSB7XG4gIGNvbnN0IG1vZGVsSXNTdHJpbmcgPSBkYXRhICYmIGRhdGEubW9kZWwgJiYgdHlwZW9mIGRhdGEubW9kZWwgPT09IGBzdHJpbmdgXG4gIGNvbnN0IG1vZGVsQXZhdGFyRGF0YTogUEJBdmF0YXJTaGFwZSB8IHVuZGVmaW5lZCA9IG1vZGVsSXNTdHJpbmdcbiAgICA/IHVuZGVmaW5lZFxuICAgIDogZGF0YS5tb2RlbCAmJiAoZGF0YS5tb2RlbCBhcyBhbnkpLmJvZHlTaGFwZVxuICAgICAgPyAoZGF0YS5tb2RlbCBhcyBQQkF2YXRhclNoYXBlKVxuICAgICAgOiB1bmRlZmluZWRcbiAgY29uc3QgbW9kZWxHTFRGRGF0YTogUEJHbHRmQ29udGFpbmVyIHwgdW5kZWZpbmVkID0gbW9kZWxJc1N0cmluZ1xuICAgID8gdW5kZWZpbmVkXG4gICAgOiBkYXRhLm1vZGVsICYmIChkYXRhLm1vZGVsIGFzIGFueSkuc3JjXG4gICAgICA/IChkYXRhLm1vZGVsIGFzIFBCR2x0ZkNvbnRhaW5lcilcbiAgICAgIDogdW5kZWZpbmVkXG5cbiAgc3dpdGNoIChkYXRhLnR5cGUpIHtcbiAgICBjYXNlIE5QQ1R5cGUuQVZBVEFSOlxuICAgICAgQXZhdGFyU2hhcGUuY3JlYXRlKFxuICAgICAgICBucGMsXG4gICAgICAgICFkYXRhIHx8ICFkYXRhLm1vZGVsIHx8ICFtb2RlbEF2YXRhckRhdGFcbiAgICAgICAgICA/IHtcbiAgICAgICAgICAgIGlkOiAnbnBjJyxcbiAgICAgICAgICAgIG5hbWU6ICdOUEMnLFxuICAgICAgICAgICAgYm9keVNoYXBlOiAndXJuOmRlY2VudHJhbGFuZDpvZmYtY2hhaW46YmFzZS1hdmF0YXJzOkJhc2VNYWxlJyxcbiAgICAgICAgICAgIGVtb3RlczogW10sXG4gICAgICAgICAgICB3ZWFyYWJsZXM6IFtcbiAgICAgICAgICAgICAgJ3VybjpkZWNlbnRyYWxhbmQ6b2ZmLWNoYWluOmJhc2UtYXZhdGFyczpmX2V5ZXNfMDAnLFxuICAgICAgICAgICAgICAndXJuOmRlY2VudHJhbGFuZDpvZmYtY2hhaW46YmFzZS1hdmF0YXJzOmZfZXllYnJvd3NfMDAnLFxuICAgICAgICAgICAgICAndXJuOmRlY2VudHJhbGFuZDpvZmYtY2hhaW46YmFzZS1hdmF0YXJzOmZfbW91dGhfMDAnLFxuICAgICAgICAgICAgICAndXJuOmRlY2VudHJhbGFuZDpvZmYtY2hhaW46YmFzZS1hdmF0YXJzOmNvbWZ5X3Nwb3J0X3NhbmRhbHMnLFxuICAgICAgICAgICAgICAndXJuOmRlY2VudHJhbGFuZDpvZmYtY2hhaW46YmFzZS1hdmF0YXJzOnNvY2Nlcl9wYW50cycsXG4gICAgICAgICAgICAgICd1cm46ZGVjZW50cmFsYW5kOm9mZi1jaGFpbjpiYXNlLWF2YXRhcnM6ZWxlZ2FudF9zd2VhdGVyJ1xuICAgICAgICAgICAgXVxuICAgICAgICAgIH1cbiAgICAgICAgICA6IG1vZGVsQXZhdGFyRGF0YVxuICAgICAgKVxuICAgICAgYnJlYWtcblxuICAgIGNhc2UgTlBDVHlwZS5DVVNUT006XG4gICAgICBHbHRmQ29udGFpbmVyLmNyZWF0ZShcbiAgICAgICAgbnBjLFxuICAgICAgICBtb2RlbElzU3RyaW5nICYmIHR5cGVvZiBkYXRhLm1vZGVsID09PSBgc3RyaW5nYCA/IHsgc3JjOiBkYXRhICYmIGRhdGEubW9kZWwgPyBkYXRhLm1vZGVsIDogJycgfSA6IG1vZGVsR0xURkRhdGFcbiAgICAgIClcbiAgICAgIEFuaW1hdG9yLmNyZWF0ZShucGMsIHtcbiAgICAgICAgc3RhdGVzOiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgY2xpcDogZGF0YSAmJiBkYXRhLmlkbGVBbmltID8gZGF0YS5pZGxlQW5pbSA6ICdJZGxlJyxcbiAgICAgICAgICAgIGxvb3A6IHRydWVcbiAgICAgICAgICB9XG4gICAgICAgIF1cbiAgICAgIH0pXG5cbiAgICAgIGxldCBucGNEYXRhID0gbnBjRGF0YUNvbXBvbmVudC5nZXQobnBjKVxuICAgICAgbnBjRGF0YS5pZGxlQW5pbSA9IGRhdGEgJiYgZGF0YS5pZGxlQW5pbSA/IGRhdGEuaWRsZUFuaW0gOiAnSWRsZSdcbiAgICAgIG5wY0RhdGEubGFzdFBsYXllZEFuaW0gPSBucGNEYXRhQ29tcG9uZW50LmdldChucGMpLmlkbGVBbmltXG5cbiAgICAgIEFuaW1hdG9yLnBsYXlTaW5nbGVBbmltYXRpb24obnBjLCBucGNEYXRhQ29tcG9uZW50LmdldChucGMpLmlkbGVBbmltKVxuXG4gICAgICBpZiAoZGF0YSAmJiBkYXRhLndhbGtpbmdBbmltKSB7XG4gICAgICAgIG5wY0RhdGFDb21wb25lbnQuZ2V0KG5wYykud2Fsa2luZ0FuaW0gPSBkYXRhLndhbGtpbmdBbmltXG4gICAgICAgIGxldCBhbmltYXRpb25zID0gQW5pbWF0b3IuZ2V0TXV0YWJsZShucGMpXG4gICAgICAgIGFuaW1hdGlvbnMuc3RhdGVzLnB1c2goeyBjbGlwOiBkYXRhLndhbGtpbmdBbmltLCBsb29wOiB0cnVlIH0pXG4gICAgICB9XG5cbiAgICAgIGJyZWFrXG5cbiAgICBjYXNlIE5QQ1R5cGUuQkxBTks6XG4gICAgICBNZXNoUmVuZGVyZXIuc2V0Qm94KG5wYylcbiAgICAgIE1lc2hDb2xsaWRlci5zZXRCb3gobnBjKVxuICAgICAgYnJlYWtcbiAgfVxufVxuXG5mdW5jdGlvbiBzZWVkQW5pbWF0b3JGb3JFeGlzdGluZyhucGM6IEVudGl0eSwgZGF0YTogTlBDRGF0YSkge1xuICBpZiAoZGF0YS50eXBlICE9PSBOUENUeXBlLkNVU1RPTSkgcmV0dXJuXG5cbiAgY29uc3QgaWRsZUNsaXAgPSBkYXRhICYmIGRhdGEuaWRsZUFuaW0gPyBkYXRhLmlkbGVBbmltIDogJ0lkbGUnXG5cbiAgaWYgKCFBbmltYXRvci5oYXMobnBjKSkge1xuICAgIEFuaW1hdG9yLmNyZWF0ZShucGMsIHtcbiAgICAgIHN0YXRlczogW1xuICAgICAgICB7XG4gICAgICAgICAgY2xpcDogaWRsZUNsaXAsXG4gICAgICAgICAgbG9vcDogdHJ1ZVxuICAgICAgICB9XG4gICAgICBdXG4gICAgfSlcbiAgfSBlbHNlIHtcbiAgICBjb25zdCBhbmltYXRpb25zID0gQW5pbWF0b3IuZ2V0TXV0YWJsZShucGMpXG4gICAgaWYgKGFuaW1hdGlvbnMuc3RhdGVzLmZpbHRlcigoYW5pbWF0aW9uOiBQQkFuaW1hdGlvblN0YXRlKSA9PiBhbmltYXRpb24uY2xpcCA9PT0gaWRsZUNsaXApLmxlbmd0aCA9PT0gMCkge1xuICAgICAgYW5pbWF0aW9ucy5zdGF0ZXMucHVzaCh7IGNsaXA6IGlkbGVDbGlwLCBsb29wOiB0cnVlIH0pXG4gICAgfVxuICB9XG5cbiAgbGV0IG5wY0RhdGEgPSBucGNEYXRhQ29tcG9uZW50LmdldChucGMpXG4gIG5wY0RhdGEuaWRsZUFuaW0gPSBpZGxlQ2xpcFxuICBucGNEYXRhLmxhc3RQbGF5ZWRBbmltID0gaWRsZUNsaXBcbiAgaWYgKHR5cGVvZiBpZGxlQ2xpcCA9PT0gJ3N0cmluZycgJiYgaWRsZUNsaXAubGVuZ3RoID4gMCkge1xuICAgIEFuaW1hdG9yLnBsYXlTaW5nbGVBbmltYXRpb24obnBjLCBpZGxlQ2xpcClcbiAgfVxuXG4gIGlmIChkYXRhICYmIGRhdGEud2Fsa2luZ0FuaW0pIHtcbiAgICBjb25zdCBhbmltYXRpb25zID0gQW5pbWF0b3IuZ2V0TXV0YWJsZShucGMpXG4gICAgaWYgKHR5cGVvZiBkYXRhLndhbGtpbmdBbmltID09PSAnc3RyaW5nJyAmJiBkYXRhLndhbGtpbmdBbmltLmxlbmd0aCA+IDAgJiYgYW5pbWF0aW9ucy5zdGF0ZXMuZmlsdGVyKChhbmltYXRpb246IFBCQW5pbWF0aW9uU3RhdGUpID0+IGFuaW1hdGlvbi5jbGlwID09PSBkYXRhLndhbGtpbmdBbmltISkubGVuZ3RoID09PSAwKSB7XG4gICAgICBhbmltYXRpb25zLnN0YXRlcy5wdXNoKHsgY2xpcDogZGF0YS53YWxraW5nQW5pbSEsIGxvb3A6IHRydWUgfSlcbiAgICB9XG4gICAgaWYgKHR5cGVvZiBkYXRhLndhbGtpbmdBbmltID09PSAnc3RyaW5nJykge1xuICAgICAgbnBjRGF0YS53YWxraW5nQW5pbSA9IGRhdGEud2Fsa2luZ0FuaW1cbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gYWRkQ2xpY2tSZWFjdGlvbnMobnBjOiBFbnRpdHksIGRhdGE6IE5QQ0RhdGEpIHtcbiAgbGV0IGFjdGl2YXRlQnV0dG9uID0gZGF0YSAmJiBkYXRhLm9ubHlDbGlja1RyaWdnZXIgPyBJbnB1dEFjdGlvbi5JQV9QT0lOVEVSIDogSW5wdXRBY3Rpb24uSUFfUFJJTUFSWVxuXG4gIC8qXG4gIHBvaW50ZXJFdmVudHNTeXN0ZW0ub25Qb2ludGVyRG93bihcbiAgICAgIHtcbiAgICAgICAgICBlbnRpdHk6IG5wYyxcbiAgICAgICAgICBvcHRzOiB7XG4gICAgICAgICAgICAgIGJ1dHRvbjogYWN0aXZhdGVCdXR0b24sXG4gICAgICAgICAgICAgIGhvdmVyVGV4dDogZGF0YSAmJiBkYXRhLmhvdmVyVGV4dCA/IGRhdGEuaG92ZXJUZXh0IDogJ1RhbGsnLFxuICAgICAgICAgICAgICBzaG93RmVlZGJhY2s6IGRhdGEgJiYgZGF0YS5vbmx5RXh0ZXJuYWxUcmlnZ2VyID8gZmFsc2UgOiB0cnVlXG4gICAgICAgICAgfVxuICAgICAgfSxcbiAgICAgICgpID0+IHtcbiAgICAgICAgICBpZiAoaXNDb29sZG93bi5oYXMobnBjKSB8fCBucGNEaWFsb2dDb21wb25lbnQuZ2V0KG5wYykudmlzaWJsZSkgcmV0dXJuXG4gICAgICAgICAgYWN0aXZhdGUobnBjLCBlbmdpbmUuUGxheWVyRW50aXR5KVxuICAgICAgfSxcbiAgKVxuICAqL1xuXG4gIHBvaW50ZXJFdmVudHNTeXN0ZW0ub25Qb2ludGVyRG93bihcbiAgICBucGMsXG4gICAgZnVuY3Rpb24gKCkge1xuICAgICAgaWYgKGlzQ29vbGRvd24uaGFzKG5wYykgfHwgbnBjRGlhbG9nQ29tcG9uZW50LmdldChucGMpLnZpc2libGUpIHJldHVyblxuICAgICAgYWN0aXZhdGUobnBjLCBlbmdpbmUuUGxheWVyRW50aXR5KVxuICAgIH0sXG4gICAge1xuICAgICAgYnV0dG9uOiBhY3RpdmF0ZUJ1dHRvbixcbiAgICAgIGhvdmVyVGV4dDogZGF0YSAmJiBkYXRhLmhvdmVyVGV4dCA/IFN0cmluZyhkYXRhLmhvdmVyVGV4dCkgOiAnVGFsaycsXG4gICAgICBzaG93RmVlZGJhY2s6IGRhdGEgJiYgZGF0YS5vbmx5RXh0ZXJuYWxUcmlnZ2VyID8gZmFsc2UgOiB0cnVlXG4gICAgfVxuICApXG5cbiAgaWYgKGRhdGEgJiYgZGF0YS5vbmx5RXh0ZXJuYWxUcmlnZ2VyKSB7XG4gICAgcG9pbnRlckV2ZW50c1N5c3RlbS5yZW1vdmVPblBvaW50ZXJEb3duKG5wYylcbiAgfVxufVxuXG5mdW5jdGlvbiBhZGRUcmlnZ2VyQXJlYShucGM6IEVudGl0eSwgZGF0YTogTlBDRGF0YSkge1xuICBsZXQgdHJpZ2dlckRhdGE6IFRyaWdnZXJEYXRhID0ge31cblxuICBpZiAoIWRhdGEgfHwgKGRhdGEgJiYgIWRhdGEub25seUV4dGVybmFsVHJpZ2dlciAmJiAhZGF0YS5vbmx5Q2xpY2tUcmlnZ2VyICYmICFkYXRhLm9ubHlFVHJpZ2dlcikpIHtcbiAgICBvbkFjdGl2YXRlQ2JzLnNldChucGMsIChvdGhlcjogRW50aXR5KSA9PiB7XG4gICAgICBpZiAoaXNDb29sZG93bi5oYXMobnBjKSkge1xuICAgICAgICBjb25zb2xlLmxvZyhucGMsICcgaW4gY29vbGRvd24nKVxuICAgICAgICByZXR1cm5cbiAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgIChucGNEaWFsb2dDb21wb25lbnQuaGFzKG5wYykgJiYgbnBjRGlhbG9nQ29tcG9uZW50LmdldChucGMpLnZpc2libGUpIHx8XG4gICAgICAgIChkYXRhICYmIGRhdGEub25seUV4dGVybmFsVHJpZ2dlcikgfHxcbiAgICAgICAgKGRhdGEgJiYgZGF0YS5vbmx5Q2xpY2tUcmlnZ2VyKVxuICAgICAgKSB7XG4gICAgICAgIHJldHVyblxuICAgICAgfVxuICAgICAgZGF0YS5vbkFjdGl2YXRlKG90aGVyKVxuICAgIH0pXG4gICAgdHJpZ2dlckRhdGEub25DYW1lcmFFbnRlciA9IG9uQWN0aXZhdGVDYnMuZ2V0KG5wYylcbiAgfVxuXG4gIC8vIHdoZW4gZXhpdGluZyB0cmlnZ2VyXG4gIGlmICghZGF0YSB8fCAoZGF0YSAmJiAhZGF0YS5jb250aW51ZU9uV2Fsa0F3YXkpKSB7XG4gICAgdHJpZ2dlckRhdGEub25DYW1lcmFFeGl0ID0gKG90aGVyKSA9PiB7XG4gICAgICBoYW5kbGVXYWxrQXdheShucGMsIG90aGVyKVxuICAgIH1cbiAgfVxuXG4gIC8vIHdoZW4gZW50ZXJpbmcgdHJpZ2dlclxuICBpZiAoIWRhdGEgfHwgKGRhdGEgJiYgIWRhdGEub25seUV4dGVybmFsVHJpZ2dlciAmJiAhZGF0YS5vbmx5Q2xpY2tUcmlnZ2VyICYmICFkYXRhLm9ubHlFVHJpZ2dlcikpIHtcbiAgICB0cmlnZ2VyRGF0YS5vbkNhbWVyYUVudGVyID0gKG90aGVyKSA9PiB7XG4gICAgICBpZiAoaXNDb29sZG93bi5oYXMobnBjKSkge1xuICAgICAgICBjb25zb2xlLmxvZyhucGMsICcgaW4gY29vbGRvd24nKVxuICAgICAgICByZXR1cm5cbiAgICAgIH1cbiAgICAgIC8vIGVsc2UgaWYgKFxuICAgICAgLy8gICAgICh0aGlzLmRpYWxvZyAmJiB0aGlzLmRpYWxvZy5pc0RpYWxvZ09wZW4pIHx8XG4gICAgICAvLyAgICAgKGRhdGEgJiYgZGF0YS5vbmx5RXh0ZXJuYWxUcmlnZ2VyKSB8fFxuICAgICAgLy8gICAgIChkYXRhICYmIGRhdGEub25seUNsaWNrVHJpZ2dlcilcbiAgICAgIC8vICkge1xuICAgICAgLy8gICAgIHJldHVyblxuICAgICAgLy8gfVxuICAgICAgYWN0aXZhdGUobnBjLCBvdGhlcilcbiAgICB9XG4gIH1cblxuICAvLyBhZGQgdHJpZ2dlclxuXG4gIGlmICh0cmlnZ2VyRGF0YS5vbkNhbWVyYUVudGVyIHx8IHRyaWdnZXJEYXRhLm9uQ2FtZXJhRXhpdCkge1xuXG5cbiAgICBsZXQgc3BoZXJlU2NhbGUgPSB7XG4gICAgICB4OiBkYXRhLnJlYWN0RGlzdGFuY2UgIT0gdW5kZWZpbmVkID8gZGF0YS5yZWFjdERpc3RhbmNlIDogNixcbiAgICAgIHk6IGRhdGEucmVhY3REaXN0YW5jZSAhPSB1bmRlZmluZWQgPyBkYXRhLnJlYWN0RGlzdGFuY2UgOiA2LFxuICAgICAgejogZGF0YS5yZWFjdERpc3RhbmNlICE9IHVuZGVmaW5lZCA/IGRhdGEucmVhY3REaXN0YW5jZSA6IDZcbiAgICB9XG5cbiAgIGxldCB0cmlnZ2VyU3BoZXJlID0gZW5naW5lLmFkZEVudGl0eSgpXG5cbiAgIFRyYW5zZm9ybS5jcmVhdGUodHJpZ2dlclNwaGVyZSwge1xuICAgIHBvc2l0aW9uOiBWZWN0b3IzLlplcm8oKSxcbiAgICByb3RhdGlvbjogUXVhdGVybmlvbi5aZXJvKCksXG4gICAgc2NhbGU6IHNwaGVyZVNjYWxlLFxuICAgIHBhcmVudDogbnBjXG4gICB9KVxuXG4gICBUcmlnZ2VyQXJlYS5zZXRTcGhlcmUodHJpZ2dlclNwaGVyZSlcblxuICAgIHRyaWdnZXJBcmVhRXZlbnRzU3lzdGVtLm9uVHJpZ2dlckVudGVyKHRyaWdnZXJTcGhlcmUsIGZ1bmN0aW9uKHJlc3VsdCkge1xuICAgICAgaWYgKHRyaWdnZXJEYXRhLm9uQ2FtZXJhRW50ZXIpIHtcbiAgICAgICAgY29uc3QgZW50aXR5ID0gKHJlc3VsdD8udHJpZ2dlcj8uZW50aXR5ID8/IGVuZ2luZS5QbGF5ZXJFbnRpdHkpIGFzIEVudGl0eVxuICAgICAgICB0cmlnZ2VyRGF0YS5vbkNhbWVyYUVudGVyKGVudGl0eSlcbiAgICAgIH1cbiAgICB9KVxuXG4gICAgdHJpZ2dlckFyZWFFdmVudHNTeXN0ZW0ub25UcmlnZ2VyRXhpdCh0cmlnZ2VyU3BoZXJlLCBmdW5jdGlvbihyZXN1bHQpIHtcbiAgICAgIGlmICh0cmlnZ2VyRGF0YS5vbkNhbWVyYUV4aXQpIHtcbiAgICAgICAgY29uc3QgZW50aXR5ID0gKHJlc3VsdD8udHJpZ2dlcj8uZW50aXR5ID8/IGVuZ2luZS5QbGF5ZXJFbnRpdHkpIGFzIEVudGl0eVxuICAgICAgICB0cmlnZ2VyRGF0YS5vbkNhbWVyYUV4aXQoZW50aXR5KVxuICAgICAgfVxuICAgIH0pXG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGZvbGxvd1BhdGgobnBjOiBFbnRpdHksIGRhdGE/OiBGb2xsb3dQYXRoRGF0YSkge1xuICBsZXQgbnBjRGF0YSA9IG5wY0RhdGFDb21wb25lbnQuZ2V0KG5wYylcbiAgbGV0IHBhdGg6IGFueVtdID0gW11cblxuICBpZiAobnBjRGF0YS5mYWNlVXNlcikge1xuICAgIGlmIChUcmFja1VzZXJGbGFnLmhhcyhucGMpKSB7XG4gICAgICBUcmFja1VzZXJGbGFnLmRlbGV0ZUZyb20obnBjKVxuICAgIH1cbiAgfVxuXG4gIGlmIChucGNEYXRhLm1hbnVhbFN0b3ApIHtcbiAgICBsZXQgZHVyYXRpb24gPSBucGNEYXRhLnBhdGhEYXRhLnRvdGFsRHVyYXRpb25cbiAgICBsZXQgY3VycmVudFRpbWVyOiBudW1iZXIgPSB3YWxraW5nVGltZXJzLmdldChucGMpIVxuICAgIGNvbnNvbGUubG9nKCdjdXJyZW50IHRpbWUgaXMnLCBjdXJyZW50VGltZXIpXG4gICAgaWYgKGN1cnJlbnRUaW1lcikge1xuICAgICAgZHVyYXRpb24gLT0gY3VycmVudFRpbWVyXG4gICAgfVxuXG4gICAgbGV0IHBhdGg6IGFueVtdID0gW11cbiAgICBucGNEYXRhLnBhdGhEYXRhLnBhdGguZm9yRWFjaCgocDogYW55KSA9PiB7XG4gICAgICBwYXRoLnB1c2gocClcbiAgICB9KVxuICAgIHBhdGguc3BsaWNlKDAsIG5wY0RhdGEucGF0aEluZGV4KVxuXG4gICAgbGV0IHBvcyA9IFRyYW5zZm9ybS5nZXQobnBjKS5wb3NpdGlvblxuICAgIHBhdGgudW5zaGlmdChWZWN0b3IzLmNyZWF0ZShwb3MueCwgcG9zLnksIHBvcy56KSlcbiAgICB3YWxrTlBDKFxuICAgICAgbnBjLFxuICAgICAgbnBjRGF0YSxcbiAgICAgIG5wY0RhdGEucGF0aERhdGEucGF0aFR5cGUsXG4gICAgICBkdXJhdGlvbixcbiAgICAgIHBhdGgsXG4gICAgICBwb2ludFJlYWNoZWRDYWxsYmFja3MuZ2V0KG5wYyksXG4gICAgICBvbkZpbmlzaENhbGxiYWNrcy5nZXQobnBjKVxuICAgIClcbiAgfSBlbHNlIHtcbiAgICBpZiAoZGF0YSkge1xuICAgICAgbnBjRGF0YS5wYXRoRGF0YSA9IGRhdGFcblxuICAgICAgaWYgKGRhdGEuc3RhcnRpbmdQb2ludCkge1xuICAgICAgICBkYXRhLnBhdGg/LnNwbGljZSgwLCBkYXRhLnN0YXJ0aW5nUG9pbnQgLSAxKVxuICAgICAgfVxuXG4gICAgICBsZXQgcG9zID0gVHJhbnNmb3JtLmdldChucGMpLnBvc2l0aW9uXG4gICAgICBwYXRoLnB1c2goVmVjdG9yMy5jcmVhdGUocG9zLngsIHBvcy55LCBwb3MueikpXG4gICAgICBkYXRhLnBhdGg/LmZvckVhY2goKHApID0+IHtcbiAgICAgICAgcGF0aC5wdXNoKHApXG4gICAgICB9KVxuXG4gICAgICBvbkZpbmlzaENhbGxiYWNrcy5zZXQobnBjLCAoKSA9PiB7XG4gICAgICAgIGNvbnNvbGUubG9nKCdvbiBmaW5pc2hlZCBjYWxsYmFjaycpXG4gICAgICAgIGlmIChkYXRhICYmIGRhdGEub25GaW5pc2hDYWxsYmFjayAmJiAhZGF0YS5sb29wKSB7XG4gICAgICAgICAgZGF0YS5vbkZpbmlzaENhbGxiYWNrKClcbiAgICAgICAgfVxuICAgICAgICBzdG9wUGF0aChucGMpXG4gICAgICB9KVxuXG4gICAgICBwb2ludFJlYWNoZWRDYWxsYmFja3Muc2V0KG5wYywgKCkgPT4ge1xuICAgICAgICBjb25zb2xlLmxvZygnb24gcG9pbnQgcmVhY2hlZCBjYWxsYmFjaycpXG4gICAgICAgIGxldCBkYXRhID0gbnBjRGF0YUNvbXBvbmVudC5nZXQobnBjKVxuICAgICAgICBkYXRhLnBhdGhJbmRleCArPSAxXG4gICAgICAgIGRhdGEub25SZWFjaGVkUG9pbnRDYWxsYmFjayA/IGRhdGEub25SZWFjaGVkUG9pbnRDYWxsYmFjayA6IHVuZGVmaW5lZFxuICAgICAgfSlcbiAgICAgIHdhbGtOUEMoXG4gICAgICAgIG5wYyxcbiAgICAgICAgbnBjRGF0YSxcbiAgICAgICAgZGF0YS5wYXRoVHlwZSEsXG4gICAgICAgIGRhdGEudG90YWxEdXJhdGlvbixcbiAgICAgICAgcGF0aCxcbiAgICAgICAgcG9pbnRSZWFjaGVkQ2FsbGJhY2tzLmdldChucGMpLFxuICAgICAgICBvbkZpbmlzaENhbGxiYWNrcy5nZXQobnBjKVxuICAgICAgKVxuICAgIH0gZWxzZSB7XG4gICAgICBpZiAobnBjRGF0YS5tYW51YWxTdG9wKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKCd3ZSBoYXZlIG1hbnVhbCBzdG9wLCBuZWVkIHRvIHBpY2sgYmFjayB1cCB3aGVyZSB3ZSBsZWZ0IG9mZicpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zb2xlLmxvZygnd2UgYXJlIHRyeWluZyB0byBmb2xsb3cgYSBwYXRoIHdpdG91dCBzdGFydGluZyBvbmUgcHJpb3InKVxuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiB3YWxrTlBDKFxuICBucGM6IEVudGl0eSxcbiAgbnBjRGF0YTogYW55LFxuICB0eXBlOiBOUENQYXRoVHlwZSxcbiAgZHVyYXRpb246IG51bWJlcixcbiAgcGF0aDogVmVjdG9yM1tdLFxuICBwb2ludFJlYWNoZWRDYWxsYmFjaz86IGFueSxcbiAgZmluaXNoZWRDYWxsYmFjaz86IGFueVxuKSB7XG4gIGlmIChJc0ZvbGxvd2luZ1BhdGguaGFzKG5wYykpIHtcbiAgICBJc0ZvbGxvd2luZ1BhdGguZGVsZXRlRnJvbShucGMpXG4gICAgd2Fsa2luZ1RpbWVycy5kZWxldGUobnBjKVxuICB9XG4gIElzRm9sbG93aW5nUGF0aC5jcmVhdGUobnBjKVxuXG4gIGlmICh0eXBlKSB7XG4gICAgaWYgKHR5cGUgPT0gTlBDUGF0aFR5cGUuUklHSURfUEFUSCkge1xuICAgICAgcGF0aHMuc3RhcnRTdHJhaWdodFBhdGgoXG4gICAgICAgIG5wYyxcbiAgICAgICAgcGF0aCxcbiAgICAgICAgZHVyYXRpb24sXG4gICAgICAgIHRydWUsXG4gICAgICAgICgpID0+IHtcbiAgICAgICAgICBmaW5pc2hlZENhbGxiYWNrKClcbiAgICAgICAgfSxcbiAgICAgICAgKCkgPT4ge1xuICAgICAgICAgIHBvaW50UmVhY2hlZENhbGxiYWNrKClcbiAgICAgICAgfVxuICAgICAgKVxuICAgIH0gZWxzZSB7XG4gICAgICBwYXRocy5zdGFydFNtb290aFBhdGgoXG4gICAgICAgIG5wYyxcbiAgICAgICAgcGF0aCxcbiAgICAgICAgZHVyYXRpb24sXG4gICAgICAgIDMwLFxuICAgICAgICB0cnVlLFxuICAgICAgICAoKSA9PiB7XG4gICAgICAgICAgZmluaXNoZWRDYWxsYmFjaygpXG4gICAgICAgIH0sXG4gICAgICAgICgpID0+IHtcbiAgICAgICAgICBwb2ludFJlYWNoZWRDYWxsYmFjaygpXG4gICAgICAgIH1cbiAgICAgIClcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgcGF0aHMuc3RhcnRTbW9vdGhQYXRoKFxuICAgICAgbnBjLFxuICAgICAgcGF0aCxcbiAgICAgIGR1cmF0aW9uLFxuICAgICAgMjAsXG4gICAgICB0cnVlLFxuICAgICAgKCkgPT4ge1xuICAgICAgICBmaW5pc2hlZENhbGxiYWNrKClcbiAgICAgIH0sXG4gICAgICAoKSA9PiB7XG4gICAgICAgIHBvaW50UmVhY2hlZENhbGxiYWNrKClcbiAgICAgIH1cbiAgICApXG4gIH1cblxuICBpZiAobnBjRGF0YS53YWxraW5nQW5pbSkge1xuICAgIGNsZWFyQW5pbWF0aW9uVGltZXIobnBjKVxuICAgIEFuaW1hdG9yLnBsYXlTaW5nbGVBbmltYXRpb24obnBjLCBucGNEYXRhQ29tcG9uZW50LmdldChucGMpLndhbGtpbmdBbmltLCB0cnVlKVxuICAgIG5wY0RhdGEubGFzdFBsYXllZEFuaW0gPSBucGNEYXRhQ29tcG9uZW50LmdldChucGMpLndhbGtpbmdBbmltXG4gIH1cbiAgbnBjRGF0YS5zdGF0ZSA9IE5QQ1N0YXRlLkZPTExPV1BBVEhcbiAgbnBjRGF0YS5tYW51YWxTdG9wID0gZmFsc2Vcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN0b3BXYWxraW5nKG5wYzogRW50aXR5LCBkdXJhdGlvbj86IG51bWJlciwgZmluaXNoZWQ/OiBib29sZWFuKSB7XG4gIGxldCBucGNEYXRhID0gbnBjRGF0YUNvbXBvbmVudC5nZXQobnBjKVxuICBucGNEYXRhLnN0YXRlID0gTlBDU3RhdGUuU1RBTkRJTkdcbiAgbnBjRGF0YS5tYW51YWxTdG9wID0gdHJ1ZVxuXG4gIHN0b3BQYXRoKG5wYylcblxuICBpZiAoZHVyYXRpb24pIHtcbiAgICBkZWxheWVkRnVuY3Rpb24oKCkgPT4ge1xuICAgICAgaWYgKG5wY0RhdGEucGF0aCkge1xuICAgICAgICBBbmltYXRvci5zdG9wQWxsQW5pbWF0aW9ucyhucGMsIHRydWUpXG4gICAgICAgIGlmIChucGNEYXRhQ29tcG9uZW50LmdldChucGMpLndhbGtpbmdBbmltKSB7XG4gICAgICAgICAgY2xlYXJBbmltYXRpb25UaW1lcihucGMpXG4gICAgICAgICAgQW5pbWF0b3IucGxheVNpbmdsZUFuaW1hdGlvbihucGMsIG5wY0RhdGFDb21wb25lbnQuZ2V0KG5wYykud2Fsa2luZ0FuaW0sIHRydWUpXG4gICAgICAgICAgbnBjRGF0YS5sYXN0UGxheWVkQW5pbSA9IG5wY0RhdGFDb21wb25lbnQuZ2V0KG5wYykud2Fsa2luZ0FuaW1cbiAgICAgICAgfVxuICAgICAgICBsZXQgZHVyYXRpb24gPSBucGNEYXRhLnBhdGhEYXRhLnRvdGFsRHVyYXRpb25cbiAgICAgICAgbGV0IGN1cnJlbnRUaW1lcjogbnVtYmVyID0gd2Fsa2luZ1RpbWVycy5nZXQobnBjKSFcbiAgICAgICAgY29uc29sZS5sb2coJ2N1cnJlbnQgdGltZSBpcycsIGN1cnJlbnRUaW1lcilcbiAgICAgICAgaWYgKGN1cnJlbnRUaW1lcikge1xuICAgICAgICAgIGR1cmF0aW9uIC09IGN1cnJlbnRUaW1lclxuICAgICAgICB9XG5cbiAgICAgICAgbGV0IHBhdGg6IGFueVtdID0gW11cbiAgICAgICAgbnBjRGF0YS5wYXRoRGF0YS5wYXRoLmZvckVhY2goKHA6IGFueSkgPT4ge1xuICAgICAgICAgIHBhdGgucHVzaChwKVxuICAgICAgICB9KVxuICAgICAgICBwYXRoLnNwbGljZSgwLCBucGNEYXRhLnBhdGhJbmRleClcblxuICAgICAgICBsZXQgcG9zID0gVHJhbnNmb3JtLmdldChucGMpLnBvc2l0aW9uXG4gICAgICAgIHBhdGgudW5zaGlmdChWZWN0b3IzLmNyZWF0ZShwb3MueCwgcG9zLnksIHBvcy56KSlcblxuICAgICAgICAvL25wY0RhdGEubWFudWFsU3RvcCA9IGZhbHNlXG4gICAgICAgIHdhbGtOUEMoXG4gICAgICAgICAgbnBjLFxuICAgICAgICAgIG5wY0RhdGEsXG4gICAgICAgICAgbnBjRGF0YS5wYXRoRGF0YS5wYXRoVHlwZSxcbiAgICAgICAgICBkdXJhdGlvbixcbiAgICAgICAgICBwYXRoLFxuICAgICAgICAgIHBvaW50UmVhY2hlZENhbGxiYWNrcy5nZXQobnBjKSxcbiAgICAgICAgICBvbkZpbmlzaENhbGxiYWNrcy5nZXQobnBjKVxuICAgICAgICApXG4gICAgICB9XG5cbiAgICB9LCBkdXJhdGlvbiAqIDEwMDApXG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN0b3BQYXRoKG5wYzogRW50aXR5KSB7XG4gIHBhdGhzLnN0b3BQYXRoKG5wYylcbiAgSXNGb2xsb3dpbmdQYXRoLmRlbGV0ZUZyb20obnBjKVxuXG4gIGxldCBucGNEYXRhID0gbnBjRGF0YUNvbXBvbmVudC5nZXQobnBjKVxuICBpZiAobnBjRGF0YS53YWxraW5nQW5pbSkge1xuICAgIGNsZWFyQW5pbWF0aW9uVGltZXIobnBjKVxuICAgIEFuaW1hdG9yLnBsYXlTaW5nbGVBbmltYXRpb24obnBjLCBucGNEYXRhQ29tcG9uZW50LmdldChucGMpLmlkbGVBbmltKVxuICAgIG5wY0RhdGEubGFzdFBsYXllZEFuaW0gPSBucGNEYXRhLmlkbGVBbmltXG4gIH1cblxuICBpZiAoIW5wY0RhdGEubWFudWFsU3RvcCkge1xuICAgIGlmIChucGNEYXRhLnBhdGhEYXRhLmxvb3ApIHtcbiAgICAgIG5wY0RhdGEucGF0aEluZGV4ID0gMFxuICAgICAgd2Fsa2luZ1RpbWVycy5kZWxldGUobnBjKVxuICAgICAgY29uc29sZS5sb2coJ3dlIGFyZSBsb29waW5nIHBhdGgnLCBucGNEYXRhKVxuICAgICAgZm9sbG93UGF0aChucGMsIG5wY0RhdGEucGF0aERhdGEpXG4gICAgICBjb25zb2xlLmxvZyhucGNEYXRhKVxuICAgIH1cbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gY2xlYXJOUEMoKSB7XG4gIGFjdGl2ZU5QQyA9IE5VTExfTlBDXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzZXRBY3RpdmVOUEMobnBjOiBFbnRpdHkpIHtcbiAgYWN0aXZlTlBDID0gbnBjXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc0FjdGl2ZU5wY1NldCgpIHtcbiAgcmV0dXJuIGFjdGl2ZU5QQyAmJiBucGNEaWFsb2dDb21wb25lbnQuaGFzKGFjdGl2ZU5QQylcbn1cblxuLyoqXG4gKiBDYWxscyB0aGUgTlBDJ3MgYWN0aXZhdGlvbiBmdW5jdGlvbiAoc2V0IG9uIE5QQyBkZWZpbml0aW9uKS4gSWYgTlBDIGhhcyBgZmFjZVVzZXJgID0gdHJ1ZSwgaXQgd2lsbCByb3RhdGUgdG8gZmFjZSB0aGUgcGxheWVyLiBJdCBzdGFydHMgYSBjb29sZG93biBjb3VudGVyIHRvIGF2b2lkIHJlYWN0aXZhdGluZy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGFjdGl2YXRlKG5wYzogRW50aXR5LCBvdGhlcjogRW50aXR5KSB7XG4gIGlmIChhY3RpdmVOUEMgIT0gMCkge1xuICAgIGNvbnNvbGUubG9nKCd3ZSBoYXZlIGEgY3VycmVudCBucGMsIG5lZWR0byByZW1vdmUnKVxuICAgIGVuZEludGVyYWN0aW9uKGFjdGl2ZU5QQylcbiAgICAvLyBjbG9zZURpYWxvZyhhY3RpdmVOUEMpXG4gIH1cblxuICBhY3RpdmVOUEMgPSBucGNcbiAgb25BY3RpdmF0ZUNicy5nZXQobnBjKShvdGhlcilcblxuICBsZXQgbnBjRGF0YSA9IG5wY0RhdGFDb21wb25lbnQuZ2V0KG5wYylcbiAgaWYgKG5wY0RhdGEuZmFjZVVzZXIpIHtcbiAgICBpZiAoVHJhY2tVc2VyRmxhZy5oYXMobnBjKSkge1xuICAgICAgVHJhY2tVc2VyRmxhZy5kZWxldGVGcm9tKG5wYylcbiAgICB9XG5cbiAgICBUcmFja1VzZXJGbGFnLmNyZWF0ZShucGMsIHtcbiAgICAgIGxvY2tYWlJvdGF0aW9uOiB0cnVlLFxuICAgICAgYWN0aXZlOiB0cnVlLFxuICAgICAgcm90U3BlZWQ6IG5wY0RhdGEudHVyblNwZWVkXG4gICAgfSlcbiAgfVxuICBpc0Nvb2xkb3duLnNldChucGMsIHRydWUpXG4gIG5wY0RhdGEuaW5Db29sZG93biA9IHRydWVcblxuICBkZWxheWVkRnVuY3Rpb24oKCkgPT4gXG4gICAge1xuICAgICAgaXNDb29sZG93bi5kZWxldGUobnBjKVxuICAgICAgbnBjRGF0YUNvbXBvbmVudC5nZXQobnBjKS5pbkNvb2xkb3duID0gZmFsc2VcbiAgICAgIGNvbnNvbGUubG9nKFwiY29vbGRvd24gZGVsZXRlZFwiKVxuICAgIH0sIDEwMDAgKiBucGNEYXRhLmNvb2xEb3duRHVyYXRpb25cbiAgKVxuXG4gIGNvbnNvbGUubG9nKCdhY3RpdmF0ZWQgbnBjLCcsIG5wY0RhdGFDb21wb25lbnQuZ2V0KG5wYyksIFwiY29vbGRvd24gZHVyYXRpb246IFwiLCBucGNEYXRhLmNvb2xEb3duRHVyYXRpb24pXG59XG5cbmZ1bmN0aW9uIGVuZEludGVyYWN0aW9uKG5wYzogRW50aXR5KSB7XG4gIGxldCBucGNEYXRhID0gbnBjRGF0YUNvbXBvbmVudC5nZXQobnBjKVxuICBucGNEYXRhLnN0YXRlID0gTlBDU3RhdGUuU1RBTkRJTkdcblxuICBpZiAobnBjRGlhbG9nQ29tcG9uZW50LmhhcyhucGMpKSB7XG4gICAgLy99ICYmIG5wY0RpYWxvZ0NvbXBvbmVudC5nZXQobnBjKS52aXNpYmxlKSB7XG4gICAgY2xvc2VEaWFsb2cobnBjKVxuICB9XG5cbiAgaWYgKG5wY0RhdGEuZmFjZVVzZXIpIHtcbiAgICBpZiAoVHJhY2tVc2VyRmxhZy5oYXMobnBjKSkge1xuICAgICAgVHJhY2tVc2VyRmxhZy5kZWxldGVGcm9tKG5wYylcbiAgICB9XG4gIH1cblxuICBjb25zb2xlLmxvZygnZW5kaW5nIGludGVyYWN0aW9uJywgbnBjRGF0YSwgYnViYmxlcy5nZXQobnBjKSlcbiAgaWYgKG5wY0RhdGEuaGFzQnViYmxlICYmIGJ1YmJsZXMuZ2V0KG5wYykuaXNCdWJibGVPcGVuKSB7XG4gICAgY2xvc2VCdWJibGUobnBjKVxuICB9XG59XG5cbi8qKlxuICogRW5kcyBpbnRlcmFjdGlvbiBhbmQgY2FsbHMgdGhlIG9uV2Fsa0F3YXkgZnVuY3Rpb25cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGhhbmRsZVdhbGtBd2F5KG5wYzogRW50aXR5LCBvdGhlcjogRW50aXR5KSB7XG4gIGxldCBucGNEYXRhID0gbnBjRGF0YUNvbXBvbmVudC5nZXQobnBjKVxuICBpZiAobnBjRGF0YS5zdGF0ZSA9PSBOUENTdGF0ZS5GT0xMT1dQQVRIKSB7XG4gICAgcmV0dXJuXG4gIH1cblxuICBlbmRJbnRlcmFjdGlvbihucGMpXG5cbiAgaWYgKG9uV2Fsa0F3YXlDYnMuZ2V0KG5wYykpIHtcbiAgICBvbldhbGtBd2F5Q2JzLmdldChucGMpKG90aGVyKVxuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwbGF5QW5pbWF0aW9uKG5wYzogRW50aXR5LCBhbmltOiBzdHJpbmcsIG5vTG9vcD86IGJvb2xlYW4sIGR1cmF0aW9uPzogbnVtYmVyKSB7XG4gIGxldCBhbmltYXRpb25zID0gQW5pbWF0b3IuZ2V0TXV0YWJsZShucGMpXG4gIGxldCBucGNEYXRhID0gbnBjRGF0YUNvbXBvbmVudC5nZXQobnBjKVxuXG4gIGlmICghYW5pbWF0aW9ucyB8fCAhbnBjRGF0YSkgcmV0dXJuXG5cbiAgaWYgKGFuaW1hdGlvbnMuc3RhdGVzICYmIGFuaW1hdGlvbnMuc3RhdGVzLmZpbHRlcigoYW5pbWF0aW9uOiBQQkFuaW1hdGlvblN0YXRlKSA9PiBhbmltYXRpb24uY2xpcCA9PT0gYW5pbSkubGVuZ3RoID09IDApIHtcbiAgICBhbmltYXRpb25zLnN0YXRlcy5wdXNoKHsgY2xpcDogYW5pbSwgbG9vcDogbm9Mb29wID8gZmFsc2UgOiB0cnVlIH0pXG4gIH1cblxuICBpZiAobnBjRGF0YS5zdGF0ZSA9PSBOUENTdGF0ZS5GT0xMT1dQQVRIKSB7XG4gICAgcGF0aHMuc3RvcFBhdGgobnBjKVxuICB9XG5cbiAgY2xlYXJBbmltYXRpb25UaW1lcihucGMpXG5cbiAgQW5pbWF0b3Iuc3RvcEFsbEFuaW1hdGlvbnMobnBjLCB0cnVlKVxuICBBbmltYXRvci5wbGF5U2luZ2xlQW5pbWF0aW9uKG5wYywgYW5pbSwgdHJ1ZSlcbiAgaWYgKGR1cmF0aW9uKSB7XG4gICAgY29uc29sZS5sb2coJ2hhdmUgYSBkdXJhdGlvbiB0byBwbGF5IGFuaW1hdGlvbicpXG4gICAgY2xlYXJBbmltYXRpb25UaW1lcihucGMpXG4gICAgYW5pbVRpbWVycy5zZXQoXG4gICAgICBucGMsXG4gICAgICBkZWxheWVkRnVuY3Rpb24oKCkgPT4ge1xuICAgICAgICBjbGVhckFuaW1hdGlvblRpbWVyKG5wYylcbiAgICAgICAgQW5pbWF0b3Iuc3RvcEFsbEFuaW1hdGlvbnMobnBjLCB0cnVlKVxuICAgICAgICBpZiAobnBjRGF0YS5pZGxlQW5pbSkge1xuICAgICAgICAgIEFuaW1hdG9yLnBsYXlTaW5nbGVBbmltYXRpb24obnBjLCBucGNEYXRhLmlkbGVBbmltKVxuICAgICAgICAgIG5wY0RhdGEubGFzdFBsYXllZEFuaW0gPSBucGNEYXRhLmlkbGVBbmltXG4gICAgICAgIH1cbiAgICAgIH0sIDEwMDAgKiBkdXJhdGlvbilcbiAgICApXG4gIH1cbiAgXG5cbiAgbnBjRGF0YS5sYXN0UGxheWVkQW5pbSA9IGFuaW1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNoYW5nZUlkbGVBbmltKG5wYzogRW50aXR5LCBhbmltYXRpb246IHN0cmluZywgcGxheT86IGJvb2xlYW4pIHtcbiAgbGV0IG5wY0RhdGEgPSBucGNEYXRhQ29tcG9uZW50LmdldChucGMpXG4gIG5wY0RhdGEuaWRsZUFuaW0gPSBhbmltYXRpb25cblxuICBsZXQgYW5pbWF0aW9ucyA9IEFuaW1hdG9yLmdldE11dGFibGUobnBjKVxuICBpZiAoYW5pbWF0aW9ucy5zdGF0ZXMuZmlsdGVyKChhbmltKSA9PiBhbmltLmNsaXAgPT09IGFuaW1hdGlvbikubGVuZ3RoID09IDApIHtcbiAgICBhbmltYXRpb25zLnN0YXRlcy5wdXNoKHsgY2xpcDogYW5pbWF0aW9uLCBsb29wOiB0cnVlIH0pXG4gIH1cblxuICBpZiAocGxheSkge1xuICAgIHBsYXlBbmltYXRpb24obnBjLCBhbmltYXRpb24sIHRydWUpXG4gICAgbnBjRGF0YUNvbXBvbmVudC5nZXQobnBjKS5sYXN0UGxheWVkQW5pbSA9IGFuaW1hdGlvblxuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0YWxrQnViYmxlKG5wYzogRW50aXR5LCBzY3JpcHQ6IERpYWxvZ1tdLCBzdGFydEluZGV4PzogbnVtYmVyIHwgc3RyaW5nKSB7XG4gIG9wZW5CdWJibGUobnBjLCBzY3JpcHQsIHN0YXJ0SW5kZXgpXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVEaWFsb2dXaW5kb3coZGVmYXVsdFBvcnRyYWl0PzogSW1hZ2VEYXRhLCBzb3VuZD86IHN0cmluZykge1xuICBsZXQgZGlhbG9nID0gZW5naW5lLmFkZEVudGl0eSgpXG4gIGFkZERpYWxvZyhkaWFsb2csIHNvdW5kLCBkZWZhdWx0UG9ydHJhaXQpXG4gIHJldHVybiBkaWFsb2dcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG9wZW5EaWFsb2dXaW5kb3cobnBjOiBFbnRpdHksIGRpYWxvZzogRGlhbG9nW10sIHN0YXJ0SW5kZXg/OiBudW1iZXIgfCBzdHJpbmcpIHtcbiAgYWN0aXZlTlBDID0gbnBjXG5cbiAgaWYgKG5wY0RpYWxvZ0NvbXBvbmVudC5oYXMobnBjKSkge1xuICAgIGxldCBpbmRleDogYW55XG4gICAgaWYgKCFzdGFydEluZGV4KSB7XG4gICAgICBpbmRleCA9IDBcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBzdGFydEluZGV4ID09PSAnbnVtYmVyJykge1xuICAgICAgaW5kZXggPSBzdGFydEluZGV4XG4gICAgfSBlbHNlIHtcbiAgICAgIGluZGV4ID0gZmluZERpYWxvZ0J5TmFtZShkaWFsb2csIHN0YXJ0SW5kZXgpXG4gICAgfVxuICAgIG9wZW5EaWFsb2cobnBjLCBkaWFsb2csIGluZGV4KVxuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjbG9zZURpYWxvZ1dpbmRvdyh3aW5kb3c6IEVudGl0eSkge1xuICBsZXQgZGlhbG9nID0gbnBjRGlhbG9nQ29tcG9uZW50LmdldCh3aW5kb3cpXG4gIGlmICh3aW5kb3cpIHtcbiAgICBjbG9zZURpYWxvZyhkaWFsb2cpXG4gIH1cbn1cblxuZnVuY3Rpb24gY2xlYXJBbmltYXRpb25UaW1lcihucGM6IEVudGl0eSk6IGJvb2xlYW4ge1xuICBpZiAoYW5pbVRpbWVycy5oYXMobnBjKSkge1xuICAgIGNsZWFyRGVsYXllZEZ1bmN0aW9uKGFuaW1UaW1lcnMuZ2V0KG5wYykpXG4gICAgYW5pbVRpbWVycy5kZWxldGUobnBjKVxuICAgIHJldHVybiB0cnVlXG4gIH1cbiAgcmV0dXJuIGZhbHNlXG59XG4iXX0=