@dcl/asset-packs 1.4.2 → 1.4.3-20231206205632.commit-e83afe8

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/actions.js CHANGED
@@ -1,16 +1,19 @@
1
- import { VideoPlayer, Material, AudioStream, UiText, UiTransform, } from '@dcl/sdk/ecs';
1
+ import { VideoPlayer, Material, AudioStream, UiText, pointerEventsSystem, } from '@dcl/sdk/ecs';
2
2
  import { Quaternion, Vector3 } from '@dcl/sdk/math';
3
3
  import { tweens } from '@dcl-sdk/utils/dist/tween';
4
4
  import { getActiveVideoStreams } from '~system/CommsApi';
5
5
  import { ActionType, TriggerType, TweenType, getComponents, initVideoPlayerComponentMaterial, } from './definitions';
6
6
  import { getDefaultValue, isValidState } from './states';
7
7
  import { getActionEvents, getTriggerEvents } from './events';
8
- import { startInterval, startTimeout, stopInterval, stopTimeout } from './timer';
8
+ import { startInterval, startTimeout, stopAllIntervals, stopAllTimeouts, stopInterval, stopTimeout, } from './timer';
9
9
  import { getPayload } from './action-types';
10
10
  import { requestTeleport } from '~system/UserActionModule';
11
11
  import { movePlayerTo, triggerEmote, triggerSceneEmote, openExternalUrl, } from '~system/RestrictedActions';
12
12
  import { isLastWriteWinComponent } from './lww';
13
+ import { getUIBackground, getUIText, getUITransform, mapAlignToScreenAlign, } from './ui';
13
14
  const initedEntities = new Set();
15
+ const uiStacks = new Map();
16
+ const lastUiEntityClicked = new Map();
14
17
  export function createActionsSystem(engine, components) {
15
18
  const { Animator, Transform, AudioSource, AvatarAttach, VisibilityComponent, GltfContainer, } = components;
16
19
  const { Actions, States, Counter } = getComponents(engine);
@@ -151,6 +154,14 @@ export function createActionsSystem(engine, components) {
151
154
  handleRemoveEntity(entity, getPayload(action));
152
155
  break;
153
156
  }
157
+ case ActionType.SHOW_IMAGE: {
158
+ handleShowImage(entity, getPayload(action));
159
+ break;
160
+ }
161
+ case ActionType.HIDE_IMAGE: {
162
+ handleHideImage(entity, getPayload(action));
163
+ break;
164
+ }
154
165
  default:
155
166
  break;
156
167
  }
@@ -377,17 +388,6 @@ export function createActionsSystem(engine, components) {
377
388
  audioSource.playing = false;
378
389
  }
379
390
  }
380
- function getUITransform(entiy) {
381
- let uiTransformComponent = UiTransform.getMutableOrNull(entiy);
382
- if (!uiTransformComponent) {
383
- uiTransformComponent = UiTransform.create(entiy);
384
- uiTransformComponent.heightUnit = 2;
385
- uiTransformComponent.widthUnit = 2;
386
- uiTransformComponent.height = 100;
387
- uiTransformComponent.width = 100;
388
- }
389
- return uiTransformComponent;
390
- }
391
391
  function handleShowText(entity, payload) {
392
392
  const { text, hideAfterSeconds, font, fontSize, textAlign } = payload;
393
393
  const uiTransformComponent = getUITransform(entity);
@@ -398,7 +398,7 @@ export function createActionsSystem(engine, components) {
398
398
  fontSize,
399
399
  textAlign: textAlign,
400
400
  });
401
- startTimeout(entity, ActionType.SHOW_TEXT, hideAfterSeconds, () => handleHideText(entity, {}));
401
+ startTimeout(entity, ActionType.HIDE_TEXT, hideAfterSeconds, () => handleHideText(entity, {}));
402
402
  }
403
403
  }
404
404
  function handleHideText(entity, _payload) {
@@ -461,7 +461,61 @@ export function createActionsSystem(engine, components) {
461
461
  triggerEvents.emit(TriggerType.ON_CLONE);
462
462
  }
463
463
  function handleRemoveEntity(entity, _payload) {
464
+ stopAllTimeouts(entity);
465
+ stopAllIntervals(entity);
464
466
  engine.removeEntity(entity);
465
467
  }
468
+ function getUiStack(align) {
469
+ const key = `${align.alignItems},${align.justifyContent}`;
470
+ if (!uiStacks.has(key)) {
471
+ uiStacks.set(key, engine.addEntity());
472
+ }
473
+ return uiStacks.get(key);
474
+ }
475
+ function handleShowImage(entity, payload) {
476
+ const { src, text, hideAfterSeconds, fontSize, align, height, width } = payload;
477
+ getUITransform(engine.RootEntity);
478
+ const screenAlign = mapAlignToScreenAlign(align);
479
+ const uiStack = getUiStack(screenAlign);
480
+ const uiStackTransformComponent = getUITransform(uiStack);
481
+ uiStackTransformComponent.alignItems = screenAlign.alignItems;
482
+ uiStackTransformComponent.justifyContent = screenAlign.justifyContent;
483
+ uiStackTransformComponent.positionType = 1;
484
+ const imageEntity = engine.addEntity();
485
+ const imageTransformComponent = getUITransform(imageEntity, width, height, 1);
486
+ imageTransformComponent.parent = uiStack;
487
+ imageTransformComponent.pointerFilter = 1;
488
+ getUIBackground(imageEntity, src);
489
+ if (text) {
490
+ getUIText(imageEntity, text, fontSize, width);
491
+ }
492
+ pointerEventsSystem.onPointerDown({
493
+ entity: imageEntity,
494
+ opts: {
495
+ button: 0,
496
+ hoverText: 'Click',
497
+ },
498
+ }, () => {
499
+ lastUiEntityClicked.set(entity, imageEntity);
500
+ const triggerEvents = getTriggerEvents(entity);
501
+ triggerEvents.emit(TriggerType.ON_CLICK_IMAGE);
502
+ });
503
+ if (hideAfterSeconds) {
504
+ startTimeout(entity, ActionType.HIDE_IMAGE, hideAfterSeconds, () => handleHideImage(entity, { imageEntity: imageEntity }));
505
+ }
506
+ }
507
+ function handleHideImage(entity, payload) {
508
+ const { imageEntity } = payload;
509
+ if (imageEntity) {
510
+ engine.removeEntity(imageEntity);
511
+ }
512
+ else {
513
+ const clickedImage = lastUiEntityClicked.get(entity);
514
+ if (clickedImage) {
515
+ engine.removeEntity(clickedImage);
516
+ lastUiEntityClicked.delete(entity);
517
+ }
518
+ }
519
+ }
466
520
  }
467
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWN0aW9ucy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9hY3Rpb25zLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFHTCxXQUFXLEVBQ1gsUUFBUSxFQUNSLFdBQVcsRUFDWCxNQUFNLEVBQ04sV0FBVyxHQUlaLE1BQU0sY0FBYyxDQUFBO0FBQ3JCLE9BQU8sRUFBRSxVQUFVLEVBQUUsT0FBTyxFQUFFLE1BQU0sZUFBZSxDQUFBO0FBQ25ELE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQTtBQUNsRCxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQTtBQUN4RCxPQUFPLEVBRUwsVUFBVSxFQUVWLFdBQVcsRUFDWCxTQUFTLEVBQ1QsYUFBYSxFQUNiLGdDQUFnQyxHQUNqQyxNQUFNLGVBQWUsQ0FBQTtBQUN0QixPQUFPLEVBQUUsZUFBZSxFQUFFLFlBQVksRUFBRSxNQUFNLFVBQVUsQ0FBQTtBQUN4RCxPQUFPLEVBQUUsZUFBZSxFQUFFLGdCQUFnQixFQUFFLE1BQU0sVUFBVSxDQUFBO0FBQzVELE9BQU8sRUFBRSxhQUFhLEVBQUUsWUFBWSxFQUFFLFlBQVksRUFBRSxXQUFXLEVBQUUsTUFBTSxTQUFTLENBQUE7QUFDaEYsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGdCQUFnQixDQUFBO0FBQzNDLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQTtBQUMxRCxPQUFPLEVBQ0wsWUFBWSxFQUNaLFlBQVksRUFDWixpQkFBaUIsRUFDakIsZUFBZSxHQUNoQixNQUFNLDJCQUEyQixDQUFBO0FBQ2xDLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLE9BQU8sQ0FBQTtBQUUvQyxNQUFNLGNBQWMsR0FBRyxJQUFJLEdBQUcsRUFBVSxDQUFBO0FBRXhDLE1BQU0sVUFBVSxtQkFBbUIsQ0FDakMsTUFBZSxFQUNmLFVBQTRCO0lBRTVCLE1BQU0sRUFDSixRQUFRLEVBQ1Is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SUFDOUIsQ0FBQztJQUdELFNBQVMsaUJBQWlCLENBQ3hCLE1BQWMsRUFDZCxPQUErQztRQUUvQyxNQUFNLEVBQUUsUUFBUSxFQUFFLEdBQUcsT0FBTyxDQUFBO1FBQzVCLE1BQU0sS0FBSyxHQUFHLE1BQU0sQ0FBQyxTQUFTLEVBQUUsQ0FBQTtRQUVoQyxLQUFLLE1BQU0sU0FBUyxJQUFJLE1BQU0sQ0FBQyxjQUFjLEVBQUUsRUFBRTtZQUMvQyxJQUFJLFNBQVMsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLEVBQUU7Z0JBQ3pCLE1BQU0sS0FBSyxHQUFHLFNBQVMsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUE7Z0JBQ25DLElBQUksdUJBQXVCLENBQUMsU0FBUyxDQUFDLEVBQUU7b0JBQ3RDLFNBQVMsQ0FBQyxlQUFlLENBQUMsS0FBSyxFQUFFLEtBQUssQ0FBQyxDQUFBO2lCQUN4QzthQUNGO1NBQ0Y7UUFFRCxNQUFNLFNBQVMsR0FBRyxTQUFTLENBQUMsa0JBQWtCLENBQUMsS0FBSyxDQUFDLENBQUE7UUFDckQsU0FBUyxDQUFDLFFBQVEsR0FBRyxRQUFRLENBQUE7UUFFN0IsTUFBTSxhQUFhLEdBQUcsZ0JBQWdCLENBQUMsS0FBSyxDQUFDLENBQUE7UUFDN0MsYUFBYSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsUUFBUSxDQUFDLENBQUE7UUFDeEMsYUFBYSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsUUFBUSxDQUFDLENBQUE7SUFDMUMsQ0FBQztJQUdELFNBQVMsa0JBQWtCLENBQ3pCLE1BQWMsRUFDZCxRQUFpRDtRQUVqRCxNQUFNLENBQUMsWUFBWSxDQUFDLE1BQU0sQ0FBQyxDQUFBO0lBQzdCLENBQUM7QUFDSCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgSUVuZ2luZSxcbiAgRW50aXR5LFxuICBWaWRlb1BsYXllcixcbiAgTWF0ZXJpYWwsXG4gIEF1ZGlvU3RyZWFtLFxuICBVaVRleHQsXG4gIFVpVHJhbnNmb3JtLFxuICBZR1VuaXQsXG4gIFRleHRBbGlnbk1vZGUsXG4gIEZvbnQsXG59IGZyb20gJ0BkY2wvc2RrL2VjcydcbmltcG9ydCB7IFF1YXRlcm5pb24sIFZlY3RvcjMgfSBmcm9tICdAZGNsL3Nkay9tYXRoJ1xuaW1wb3J0IHsgdHdlZW5zIH0gZnJvbSAnQGRjbC1zZGsvdXRpbHMvZGlzdC90d2VlbidcbmltcG9ydCB7IGdldEFjdGl2ZVZpZGVvU3RyZWFtcyB9IGZyb20gJ35zeXN0ZW0vQ29tbXNBcGknXG5pbXBvcnQge1xuICBBY3Rpb25QYXlsb2FkLFxuICBBY3Rpb25UeXBlLFxuICBFbmdpbmVDb21wb25lbnRzLFxuICBUcmlnZ2VyVHlwZSxcbiAgVHdlZW5UeXBlLFxuICBnZXRDb21wb25lbnRzLFxuICBpbml0VmlkZW9QbGF5ZXJDb21wb25lbnRNYXRlcmlhbCxcbn0gZnJvbSAnLi9kZWZpbml0aW9ucydcbmltcG9ydCB7IGdldERlZmF1bHRWYWx1ZSwgaXNWYWxpZFN0YXRlIH0gZnJvbSAnLi9zdGF0ZXMnXG5pbXBvcnQgeyBnZXRBY3Rpb25FdmVudHMsIGdldFRyaWdnZXJFdmVudHMgfSBmcm9tICcuL2V2ZW50cydcbmltcG9ydCB7IHN0YXJ0SW50ZXJ2YWwsIHN0YXJ0VGltZW91dCwgc3RvcEludGVydmFsLCBzdG9wVGltZW91dCB9IGZyb20gJy4vdGltZXInXG5pbXBvcnQgeyBnZXRQYXlsb2FkIH0gZnJvbSAnLi9hY3Rpb24tdHlwZXMnXG5pbXBvcnQgeyByZXF1ZXN0VGVsZXBvcnQgfSBmcm9tICd+c3lzdGVtL1VzZXJBY3Rpb25Nb2R1bGUnXG5pbXBvcnQge1xuICBtb3ZlUGxheWVyVG8sXG4gIHRyaWdnZXJFbW90ZSxcbiAgdHJpZ2dlclNjZW5lRW1vdGUsXG4gIG9wZW5FeHRlcm5hbFVybCxcbn0gZnJvbSAnfnN5c3RlbS9SZXN0cmljdGVkQWN0aW9ucydcbmltcG9ydCB7IGlzTGFzdFdyaXRlV2luQ29tcG9uZW50IH0gZnJvbSAnLi9sd3cnXG5cbmNvbnN0IGluaXRlZEVudGl0aWVzID0gbmV3IFNldDxFbnRpdHk+KClcblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUFjdGlvbnNTeXN0ZW0oXG4gIGVuZ2luZTogSUVuZ2luZSxcbiAgY29tcG9uZW50czogRW5naW5lQ29tcG9uZW50cyxcbikge1xuICBjb25zdCB7XG4gICAgQW5pbWF0b3IsXG4gICAgVHJhbnNmb3JtLFxuICAgIEF1ZGlvU291cmNlLFxuICAgIEF2YXRhckF0dGFjaCxcbiAgICBWaXNpYmlsaXR5Q29tcG9uZW50LFxuICAgIEdsdGZDb250YWluZXIsXG4gIH0gPSBjb21wb25lbnRzXG4gIGNvbnN0IHsgQWN0aW9ucywgU3RhdGVzLCBDb3VudGVyIH0gPSBnZXRDb21wb25lbnRzKGVuZ2luZSlcblxuICByZXR1cm4gZnVuY3Rpb24gYWN0aW9uc1N5c3RlbShfZHQ6IG51bWJlcikge1xuICAgIGNvbnN0IGVudGl0aWVzV2l0aEFjdGlvbnMgPSBlbmdpbmUuZ2V0RW50aXRpZXNXaXRoKEFjdGlvbnMpXG5cbiAgICBmb3IgKGNvbnN0IFtlbnRpdHksIGFjdGlvbnNdIG9mIGVudGl0aWVzV2l0aEFjdGlvbnMpIHtcbiAgICAgIGlmIChpbml0ZWRFbnRpdGllcy5oYXMoZW50aXR5KSkge1xuICAgICAgICBjb250aW51ZVxuICAgICAgfVxuXG4gICAgICAvLyBpbml0aWFsaXplIGFjdGlvbnMgZm9yIGdpdmVuIGVudGl0eVxuICAgICAgY29uc3QgdHlwZXMgPSBhY3Rpb25zLnZhbHVlLnJlZHVjZShcbiAgICAgICAgKHR5cGVzLCBhY3Rpb24pID0+IHR5cGVzLmFkZChhY3Rpb24udHlwZSksXG4gICAgICAgIG5ldyBTZXQ8U3RyaW5nPigpLFxuICAgICAgKVxuXG4gICAgICBmb3IgKGNvbnN0IHR5cGUgb2YgdHlwZXMpIHtcbiAgICAgICAgc3dpdGNoICh0eXBlKSB7XG4gICAgICAgICAgY2FzZSBBY3Rpb25UeXBlLlBMQVlfQU5JTUFUSU9OOiB7XG4gICAgICAgICAgICBpbml0UGxheUFuaW1hdGlvbihlbnRpdHkpXG4gICAgICAgICAgICBicmVha1xuICAgICAgICAgIH1cbiAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgYnJlYWtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyBiaW5kIGFjdGlvbnNcbiAgICAgIGNvbnN0IGFjdGlvbkV2ZW50cyA9IGdldEFjdGlvbkV2ZW50cyhlbnRpdHkpXG4gICAgICBmb3IgKGNvbnN0IGFjdGlvbiBvZiBhY3Rpb25zLnZhbHVlKSB7XG4gICAgICAgIGFjdGlvbkV2ZW50cy5vbihhY3Rpb24ubmFtZSwgKCkgPT4ge1xuICAgICAgICAgIHN3aXRjaCAoYWN0aW9uLnR5cGUpIHtcbiAgICAgICAgICAgIGNhc2UgQWN0aW9uVHlwZS5QTEFZX0FOSU1BVElPTjoge1xuICAgICAgICAgICAgICBoYW5kbGVQbGF5QW5pbWF0aW9uKFxuICAgICAgICAgICAgICAgIGVudGl0eSxcbiAgICAgICAgICAgICAgICBnZXRQYXlsb2FkPEFjdGlvblR5cGUuUExBWV9BTklNQVRJT04+KGFjdGlvbiksXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgYnJlYWtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgQWN0aW9uVHlwZS5TVE9QX0FOSU1BVElPTjoge1xuICAgICAgICAgICAgICBoYW5kbGVTdG9wQW5pbWF0aW9uKFxuICAgICAgICAgICAgICAgIGVudGl0eSxcbiAgICAgICAgICAgICAgICBnZXRQYXlsb2FkPEFjdGlvblR5cGUuU1RPUF9BTklNQVRJT04+KGFjdGlvbiksXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgYnJlYWtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgQWN0aW9uVHlwZS5TRVRfU1RBVEU6IHtcbiAgICAgICAgICAgICAgaGFuZGxlU2V0U3RhdGUoZW50aXR5LCBnZXRQYXlsb2FkPEFjdGlvblR5cGUuU0VUX1NUQVRFPihhY3Rpb24pKVxuICAgICAgICAgICAgICBicmVha1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSBBY3Rpb25UeXBlLlNUQVJUX1RXRUVOOiB7XG4gICAgICAgICAgICAgIGhhbmRsZVN0YXJ0VHdlZW4oXG4gICAgICAgICAgICAgICAgZW50aXR5LFxuICAgICAgICAgICAgICAgIGdldFBheWxvYWQ8QWN0aW9uVHlwZS5TVEFSVF9UV0VFTj4oYWN0aW9uKSxcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICBicmVha1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSBBY3Rpb25UeXBlLlNFVF9DT1VOVEVSOiB7XG4gICAgICAgICAgICAgIGhhbmRsZVNldENvdW50ZXIoXG4gICAgICAgICAgICAgICAgZW50aXR5LFxuICAgICAgICAgICAgICAgIGdldFBheWxvYWQ8QWN0aW9uVHlwZS5TRVRfQ09VTlRFUj4oYWN0aW9uKSxcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICBicmVha1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSBBY3Rpb25UeXBlLklOQ1JFTUVOVF9DT1VOVEVSOiB7XG4gICAgICAgICAgICAgIGhhbmRsZUluY3JlbWVudENvdW50ZXIoXG4gICAgICAgICAgICAgICAgZW50aXR5LFxuICAgICAgICAgICAgICAgIGdldFBheWxvYWQ8QWN0aW9uVHlwZS5JTkNSRU1FTlRfQ09VTlRFUj4oYWN0aW9uKSxcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICBicmVha1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSBBY3Rpb25UeXBlLkRFQ1JFQVNFX0NPVU5URVI6IHtcbiAgICAgICAgICAgICAgaGFuZGxlRGVjcmVhc2VDb3VudGVyKFxuICAgICAgICAgICAgICAgIGVudGl0eSxcbiAgICAgICAgICAgICAgICBnZXRQYXlsb2FkPEFjdGlvblR5cGUuREVDUkVBU0VfQ09VTlRFUj4oYWN0aW9uKSxcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICBicmVha1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSBBY3Rpb25UeXBlLlBMQVlfU09VTkQ6IHtcbiAgICAgICAgICAgICAgaGFuZGxlUGxheVNvdW5kKGVudGl0eSwgZ2V0UGF5bG9hZDxBY3Rpb25UeXBlLlBMQVlfU09VTkQ+KGFjdGlvbikpXG4gICAgICAgICAgICAgIGJyZWFrXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlIEFjdGlvblR5cGUuU1RPUF9TT1VORDoge1xuICAgICAgICAgICAgICBoYW5kbGVTdG9wU291bmQoZW50aXR5LCBnZXRQYXlsb2FkPEFjdGlvblR5cGUuU1RPUF9TT1VORD4oYWN0aW9uKSlcbiAgICAgICAgICAgICAgYnJlYWtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgQWN0aW9uVHlwZS5TRVRfVklTSUJJTElUWToge1xuICAgICAgICAgICAgICBoYW5kbGVTZXRWaXNpYmlsaXR5KFxuICAgICAgICAgICAgICAgIGVudGl0eSxcbiAgICAgICAgICAgICAgICBnZXRQYXlsb2FkPEFjdGlvblR5cGUuU0VUX1ZJU0lCSUxJVFk+KGFjdGlvbiksXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgYnJlYWtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgQWN0aW9uVHlwZS5BVFRBQ0hfVE9fUExBWUVSOiB7XG4gICAgICAgICAgICAgIGhhbmRsZUF0dGFjaFRvUGxheWVyKFxuICAgICAgICAgICAgICAgIGVudGl0eSxcbiAgICAgICAgICAgICAgICBnZXRQYXlsb2FkPEFjdGlvblR5cGUuQVRUQUNIX1RPX1BMQVlFUj4oYWN0aW9uKSxcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICBicmVha1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSBBY3Rpb25UeXBlLkRFVEFDSF9GUk9NX1BMQVlFUjoge1xuICAgICAgICAgICAgICBoYW5kbGVEZXRhY2hGcm9tUGxheWVyKFxuICAgICAgICAgICAgICAgIGVudGl0eSxcbiAgICAgICAgICAgICAgICBnZXRQYXlsb2FkPEFjdGlvblR5cGUuREVUQUNIX0ZST01fUExBWUVSPihhY3Rpb24pLFxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgIGJyZWFrXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlIEFjdGlvblR5cGUuUExBWV9WSURFT19TVFJFQU06IHtcbiAgICAgICAgICAgICAgaGFuZGxlUGxheVZpZGVvKFxuICAgICAgICAgICAgICAgIGVudGl0eSxcbiAgICAgICAgICAgICAgICBnZXRQYXlsb2FkPEFjdGlvblR5cGUuUExBWV9WSURFT19TVFJFQU0+KGFjdGlvbiksXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgYnJlYWtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgQWN0aW9uVHlwZS5TVE9QX1ZJREVPX1NUUkVBTToge1xuICAgICAgICAgICAgICBoYW5kbGVTdG9wVmlkZW8oXG4gICAgICAgICAgICAgICAgZW50aXR5LFxuICAgICAgICAgICAgICAgIGdldFBheWxvYWQ8QWN0aW9uVHlwZS5TVE9QX1ZJREVPX1NUUkVBTT4oYWN0aW9uKSxcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICBicmVha1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSBBY3Rpb25UeXBlLlBMQVlfQVVESU9fU1RSRUFNOiB7XG4gICAgICAgICAgICAgIGhhbmRsZVBsYXlBdWRpb1N0cmVhbShcbiAgICAgICAgICAgICAgICBlbnRpdHksXG4gICAgICAgICAgICAgICAgZ2V0UGF5bG9hZDxBY3Rpb25UeXBlLlBMQVlfQVVESU9fU1RSRUFNPihhY3Rpb24pLFxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgIGJyZWFrXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlIEFjdGlvblR5cGUuU1RPUF9BVURJT19TVFJFQU06IHtcbiAgICAgICAgICAgICAgaGFuZGxlU3RvcEF1ZGlvU3RyZWFtKFxuICAgICAgICAgICAgICAgIGVudGl0eSxcbiAgICAgICAgICAgICAgICBnZXRQYXlsb2FkPEFjdGlvblR5cGUuU1RPUF9BVURJT19TVFJFQU0+KGFjdGlvbiksXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgYnJlYWtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgQWN0aW9uVHlwZS5URUxFUE9SVF9QTEFZRVI6IHtcbiAgICAgICAgICAgICAgaGFuZGxlVGVsZXBvcnRQbGF5ZXIoXG4gICAgICAgICAgICAgICAgZW50aXR5LFxuICAgICAgICAgICAgICAgIGdldFBheWxvYWQ8QWN0aW9uVHlwZS5URUxFUE9SVF9QTEFZRVI+KGFjdGlvbiksXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgYnJlYWtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgQWN0aW9uVHlwZS5NT1ZFX1BMQVlFUjoge1xuICAgICAgICAgICAgICBoYW5kbGVNb3ZlUGxheWVyKFxuICAgICAgICAgICAgICAgIGVudGl0eSxcbiAgICAgICAgICAgICAgICBnZXRQYXlsb2FkPEFjdGlvblR5cGUuTU9WRV9QTEFZRVI+KGFjdGlvbiksXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgYnJlYWtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgQWN0aW9uVHlwZS5QTEFZX0RFRkFVTFRfRU1PVEU6IHtcbiAgICAgICAgICAgICAgaGFuZGxlUGxheURlZmF1bHRFbW90ZShcbiAgICAgICAgICAgICAgICBlbnRpdHksXG4gICAgICAgICAgICAgICAgZ2V0UGF5bG9hZDxBY3Rpb25UeXBlLlBMQVlfREVGQVVMVF9FTU9URT4oYWN0aW9uKSxcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICBicmVha1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSBBY3Rpb25UeXBlLlBMQVlfQ1VTVE9NX0VNT1RFOiB7XG4gICAgICAgICAgICAgIGhhbmRsZVBsYXlDdXN0b21FbW90ZShcbiAgICAgICAgICAgICAgICBlbnRpdHksXG4gICAgICAgICAgICAgICAgZ2V0UGF5bG9hZDxBY3Rpb25UeXBlLlBMQVlfQ1VTVE9NX0VNT1RFPihhY3Rpb24pLFxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgIGJyZWFrXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlIEFjdGlvblR5cGUuT1BFTl9MSU5LOiB7XG4gICAgICAgICAgICAgIGhhbmRsZU9wZW5MaW5rKGVudGl0eSwgZ2V0UGF5bG9hZDxBY3Rpb25UeXBlLk9QRU5fTElOSz4oYWN0aW9uKSlcbiAgICAgICAgICAgICAgYnJlYWtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgQWN0aW9uVHlwZS5TSE9XX1RFWFQ6IHtcbiAgICAgICAgICAgICAgaGFuZGxlU2hvd1RleHQoZW50aXR5LCBnZXRQYXlsb2FkPEFjdGlvblR5cGUuU0hPV19URVhUPihhY3Rpb24pKVxuICAgICAgICAgICAgICBicmVha1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSBBY3Rpb25UeXBlLkhJREVfVEVYVDoge1xuICAgICAgICAgICAgICBoYW5kbGVIaWRlVGV4dChlbnRpdHksIGdldFBheWxvYWQ8QWN0aW9uVHlwZS5ISURFX1RFWFQ+KGFjdGlvbikpXG4gICAgICAgICAgICAgIGJyZWFrXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlIEFjdGlvblR5cGUuU1RBUlRfREVMQVk6IHtcbiAgICAgICAgICAgICAgaGFuZGxlU3RhcnREZWxheShcbiAgICAgICAgICAgICAgICBlbnRpdHksXG4gICAgICAgICAgICAgICAgZ2V0UGF5bG9hZDxBY3Rpb25UeXBlLlNUQVJUX0RFTEFZPihhY3Rpb24pLFxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgIGJyZWFrXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlIEFjdGlvblR5cGUuU1RPUF9ERUxBWToge1xuICAgICAgICAgICAgICBoYW5kbGVTdG9wRGVsYXkoZW50aXR5LCBnZXRQYXlsb2FkPEFjdGlvblR5cGUuU1RPUF9ERUxBWT4oYWN0aW9uKSlcbiAgICAgICAgICAgICAgYnJlYWtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgQWN0aW9uVHlwZS5TVEFSVF9MT09QOiB7XG4gICAgICAgICAgICAgIGhhbmRsZVN0YXJ0TG9vcChlbnRpdHksIGdldFBheWxvYWQ8QWN0aW9uVHlwZS5TVEFSVF9MT09QPihhY3Rpb24pKVxuICAgICAgICAgICAgICBicmVha1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSBBY3Rpb25UeXBlLlNUT1BfTE9PUDoge1xuICAgICAgICAgICAgICBoYW5kbGVTdG9wTG9vcChlbnRpdHksIGdldFBheWxvYWQ8QWN0aW9uVHlwZS5TVE9QX0xPT1A+KGFjdGlvbikpXG4gICAgICAgICAgICAgIGJyZWFrXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlIEFjdGlvblR5cGUuQ0xPTkVfRU5USVRZOiB7XG4gICAgICAgICAgICAgIGhhbmRsZUNsb25lRW50aXR5KFxuICAgICAgICAgICAgICAgIGVudGl0eSxcbiAgICAgICAgICAgICAgICBnZXRQYXlsb2FkPEFjdGlvblR5cGUuQ0xPTkVfRU5USVRZPihhY3Rpb24pLFxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgIGJyZWFrXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlIEFjdGlvblR5cGUuUkVNT1ZFX0VOVElUWToge1xuICAgICAgICAgICAgICBoYW5kbGVSZW1vdmVFbnRpdHkoXG4gICAgICAgICAgICAgICAgZW50aXR5LFxuICAgICAgICAgICAgICAgIGdldFBheWxvYWQ8QWN0aW9uVHlwZS5SRU1PVkVfRU5USVRZPihhY3Rpb24pLFxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgIGJyZWFrXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICBicmVha1xuICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICAgIH1cblxuICAgICAgaW5pdGVkRW50aXRpZXMuYWRkKGVudGl0eSlcbiAgICB9XG4gIH1cblxuICAvLyBQTEFZX0FOSU1BVElPTlxuICBmdW5jdGlvbiBpbml0UGxheUFuaW1hdGlvbihlbnRpdHk6IEVudGl0eSkge1xuICAgIGlmICghQW5pbWF0b3IuaGFzKGVudGl0eSkpIHtcbiAgICAgIEFuaW1hdG9yLmNyZWF0ZShlbnRpdHksIHtcbiAgICAgICAgc3RhdGVzOiBbXSxcbiAgICAgIH0pXG4gICAgICBBbmltYXRvci5zdG9wQWxsQW5pbWF0aW9ucyhlbnRpdHkpXG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gaGFuZGxlUGxheUFuaW1hdGlvbihcbiAgICBlbnRpdHk6IEVudGl0eSxcbiAgICBwYXlsb2FkOiBBY3Rpb25QYXlsb2FkPEFjdGlvblR5cGUuUExBWV9BTklNQVRJT04+LFxuICApIHtcbiAgICBjb25zdCB7IGFuaW1hdGlvbiwgbG9vcCB9ID0gcGF5bG9hZFxuXG4gICAgY29uc3QgYW5pbWF0b3IgPSBBbmltYXRvci5nZXRNdXRhYmxlKGVudGl0eSlcbiAgICBpZiAoIWFuaW1hdG9yLnN0YXRlcy5zb21lKCgkKSA9PiAkLmNsaXAgPT09IGFuaW1hdGlvbikpIHtcbiAgICAgIGFuaW1hdG9yLnN0YXRlcyA9IFtcbiAgICAgICAgLi4uYW5pbWF0b3Iuc3RhdGVzLFxuICAgICAgICB7XG4gICAgICAgICAgY2xpcDogYW5pbWF0aW9uLFxuICAgICAgICB9LFxuICAgICAgXVxuICAgIH1cblxuICAgIEFuaW1hdG9yLnN0b3BBbGxBbmltYXRpb25zKGVudGl0eSlcbiAgICBjb25zdCBjbGlwID0gQW5pbWF0b3IuZ2V0Q2xpcChlbnRpdHksIGFuaW1hdGlvbilcbiAgICBjbGlwLnBsYXlpbmcgPSB0cnVlXG4gICAgY2xpcC5sb29wID0gbG9vcCA/PyBmYWxzZVxuICB9XG5cbiAgLy8gU1RPUF9BTklNQVRJT05cbiAgZnVuY3Rpb24gaGFuZGxlU3RvcEFuaW1hdGlvbihcbiAgICBlbnRpdHk6IEVudGl0eSxcbiAgICBfcGF5bG9hZDogQWN0aW9uUGF5bG9hZDxBY3Rpb25UeXBlLlNUT1BfQU5JTUFUSU9OPixcbiAgKSB7XG4gICAgaWYgKEFuaW1hdG9yLmhhcyhlbnRpdHkpKSB7XG4gICAgICBBbmltYXRvci5zdG9wQWxsQW5pbWF0aW9ucyhlbnRpdHkpXG4gICAgfVxuICB9XG5cbiAgLy8gU0VUX1NUQVRFXG4gIGZ1bmN0aW9uIGhhbmRsZVNldFN0YXRlKFxuICAgIGVudGl0eTogRW50aXR5LFxuICAgIHBheWxvYWQ6IEFjdGlvblBheWxvYWQ8QWN0aW9uVHlwZS5TRVRfU1RBVEU+LFxuICApIHtcbiAgICBjb25zdCBzdGF0ZXMgPSBTdGF0ZXMuZ2V0TXV0YWJsZU9yTnVsbChlbnRpdHkpXG5cbiAgICBpZiAoc3RhdGVzKSB7XG4gICAgICBsZXQgbmV4dFN0YXRlOiBzdHJpbmcgfCB1bmRlZmluZWQgPSBwYXlsb2FkLnN0YXRlXG4gICAgICBuZXh0U3RhdGUgPSBpc1ZhbGlkU3RhdGUoc3RhdGVzLCBuZXh0U3RhdGUpXG4gICAgICAgID8gbmV4dFN0YXRlXG4gICAgICAgIDogZ2V0RGVmYXVsdFZhbHVlKHN0YXRlcylcbiAgICAgIHN0YXRlcy5jdXJyZW50VmFsdWUgPSBuZXh0U3RhdGVcblxuICAgICAgY29uc3QgdHJpZ2dlckV2ZW50cyA9IGdldFRyaWdnZXJFdmVudHMoZW50aXR5KVxuICAgICAgdHJpZ2dlckV2ZW50cy5lbWl0KFRyaWdnZXJUeXBlLk9OX1NUQVRFX0NIQU5HRSlcbiAgICB9XG4gIH1cblxuICAvLyBTVEFSVF9UV0VFTlxuICBmdW5jdGlvbiBoYW5kbGVTdGFydFR3ZWVuKFxuICAgIGVudGl0eTogRW50aXR5LFxuICAgIHBheWxvYWQ6IEFjdGlvblBheWxvYWQ8QWN0aW9uVHlwZS5TVEFSVF9UV0VFTj4sXG4gICkge1xuICAgIGlmIChwYXlsb2FkKSB7XG4gICAgICBjb25zdCB0cmlnZ2VyRXZlbnRzID0gZ2V0VHJpZ2dlckV2ZW50cyhlbnRpdHkpXG4gICAgICBjb25zdCBvblR3ZWVuRW5kID0gKCkgPT4gdHJpZ2dlckV2ZW50cy5lbWl0KFRyaWdnZXJUeXBlLk9OX1RXRUVOX0VORClcblxuICAgICAgc3dpdGNoIChwYXlsb2FkLnR5cGUpIHtcbiAgICAgICAgY2FzZSBUd2VlblR5cGUuTU9WRV9JVEVNOiB7XG4gICAgICAgICAgaGFuZGxlTW92ZUl0ZW0oZW50aXR5LCBwYXlsb2FkLCBvblR3ZWVuRW5kKVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIH1cbiAgICAgICAgY2FzZSBUd2VlblR5cGUuUk9UQVRFX0lURU06IHtcbiAgICAgICAgICBoYW5kbGVSb3RhdGVJdGVtKGVudGl0eSwgcGF5bG9hZCwgb25Ud2VlbkVuZClcbiAgICAgICAgICBicmVha1xuICAgICAgICB9XG4gICAgICAgIGNhc2UgVHdlZW5UeXBlLlNDQUxFX0lURU06IHtcbiAgICAgICAgICBoYW5kbGVTY2FsZUl0ZW0oZW50aXR5LCBwYXlsb2FkLCBvblR3ZWVuRW5kKVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIH1cbiAgICAgICAgZGVmYXVsdDoge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgVW5rbm93biB0d2VlbiB0eXBlOiAke3BheWxvYWQudHlwZX1gKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLy8gTU9WRV9JVEVNXG4gIGZ1bmN0aW9uIGhhbmRsZU1vdmVJdGVtKFxuICAgIGVudGl0eTogRW50aXR5LFxuICAgIHR3ZWVuOiBBY3Rpb25QYXlsb2FkPEFjdGlvblR5cGUuU1RBUlRfVFdFRU4+LFxuICAgIG9uVHdlZW5FbmQ6ICgpID0+IHZvaWQsXG4gICkge1xuICAgIGNvbnN0IHRyYW5zZm9ybSA9IFRyYW5zZm9ybS5nZXQoZW50aXR5KVxuICAgIGNvbnN0IHsgZHVyYXRpb24sIGludGVycG9sYXRpb25UeXBlLCByZWxhdGl2ZSB9ID0gdHdlZW5cbiAgICBjb25zdCBlbmQgPSBWZWN0b3IzLmNyZWF0ZSh0d2Vlbi5lbmQueCwgdHdlZW4uZW5kLnksIHR3ZWVuLmVuZC56KVxuICAgIGNvbnN0IGVuZFBvc2l0aW9uID0gcmVsYXRpdmUgPyBWZWN0b3IzLmFkZCh0cmFuc2Zvcm0ucG9zaXRpb24sIGVuZCkgOiBlbmRcblxuICAgIHR3ZWVucy5zdGFydFRyYW5zbGF0aW9uKFxuICAgICAgZW50aXR5LFxuICAgICAgdHJhbnNmb3JtLnBvc2l0aW9uLFxuICAgICAgZW5kUG9zaXRpb24sXG4gICAgICBkdXJhdGlvbixcbiAgICAgIGludGVycG9sYXRpb25UeXBlLFxuICAgICAgb25Ud2VlbkVuZCxcbiAgICApXG4gIH1cblxuICAvLyBST1RBVEVfSVRFTVxuICBmdW5jdGlvbiBoYW5kbGVSb3RhdGVJdGVtKFxuICAgIGVudGl0eTogRW50aXR5LFxuICAgIHR3ZWVuOiBBY3Rpb25QYXlsb2FkPEFjdGlvblR5cGUuU1RBUlRfVFdFRU4+LFxuICAgIG9uVHdlZW5FbmQ6ICgpID0+IHZvaWQsXG4gICkge1xuICAgIGNvbnN0IHRyYW5zZm9ybSA9IFRyYW5zZm9ybS5nZXQoZW50aXR5KVxuICAgIGNvbnN0IHsgZHVyYXRpb24sIGludGVycG9sYXRpb25UeXBlLCByZWxhdGl2ZSB9ID0gdHdlZW5cbiAgICBjb25zdCBlbmQgPSBRdWF0ZXJuaW9uLmZyb21FdWxlckRlZ3JlZXMoXG4gICAgICB0d2Vlbi5lbmQueCxcbiAgICAgIHR3ZWVuLmVuZC55LFxuICAgICAgdHdlZW4uZW5kLnosXG4gICAgKVxuICAgIGNvbnN0IGVuZFJvdGF0aW9uID0gcmVsYXRpdmVcbiAgICAgID8gUXVhdGVybmlvbi5tdWx0aXBseSh0cmFuc2Zvcm0ucm90YXRpb24sIGVuZClcbiAgICAgIDogZW5kXG5cbiAgICB0d2VlbnMuc3RhcnRSb3RhdGlvbihcbiAgICAgIGVudGl0eSxcbiAgICAgIHRyYW5zZm9ybS5yb3RhdGlvbixcbiAgICAgIGVuZFJvdGF0aW9uLFxuICAgICAgZHVyYXRpb24sXG4gICAgICBpbnRlcnBvbGF0aW9uVHlwZSxcbiAgICAgIG9uVHdlZW5FbmQsXG4gICAgKVxuICB9XG5cbiAgLy8gU0NBTEVfSVRFTVxuICBmdW5jdGlvbiBoYW5kbGVTY2FsZUl0ZW0oXG4gICAgZW50aXR5OiBFbnRpdHksXG4gICAgdHdlZW46IEFjdGlvblBheWxvYWQ8QWN0aW9uVHlwZS5TVEFSVF9UV0VFTj4sXG4gICAgb25Ud2VlbkVuZDogKCkgPT4gdm9pZCxcbiAgKSB7XG4gICAgY29uc3QgdHJhbnNmb3JtID0gVHJhbnNmb3JtLmdldChlbnRpdHkpXG4gICAgY29uc3QgeyBkdXJhdGlvbiwgaW50ZXJwb2xhdGlvblR5cGUsIHJlbGF0aXZlIH0gPSB0d2VlblxuICAgIGNvbnN0IGVuZCA9IFZlY3RvcjMuY3JlYXRlKHR3ZWVuLmVuZC54LCB0d2Vlbi5lbmQueSwgdHdlZW4uZW5kLnopXG4gICAgY29uc3QgZW5kU2NhbGUgPSByZWxhdGl2ZSA/IFZlY3RvcjMuYWRkKHRyYW5zZm9ybS5zY2FsZSwgZW5kKSA6IGVuZFxuXG4gICAgdHdlZW5zLnN0YXJ0U2NhbGluZyhcbiAgICAgIGVudGl0eSxcbiAgICAgIHRyYW5zZm9ybS5zY2FsZSxcbiAgICAgIGVuZFNjYWxlLFxuICAgICAgZHVyYXRpb24sXG4gICAgICBpbnRlcnBvbGF0aW9uVHlwZSxcbiAgICAgIG9uVHdlZW5FbmQsXG4gICAgKVxuICB9XG5cbiAgLy8gU0VUX0NPVU5URVJcbiAgZnVuY3Rpb24gaGFuZGxlU2V0Q291bnRlcihcbiAgICBlbnRpdHk6IEVudGl0eSxcbiAgICBwYXlsb2FkOiBBY3Rpb25QYXlsb2FkPEFjdGlvblR5cGUuU0VUX0NPVU5URVI+LFxuICApIHtcbiAgICBjb25zdCBjb3VudGVyID0gQ291bnRlci5nZXRNdXRhYmxlT3JOdWxsKGVudGl0eSlcblxuICAgIGlmIChjb3VudGVyKSB7XG4gICAgICBjb3VudGVyLnZhbHVlID0gcGF5bG9hZC5jb3VudGVyXG5cbiAgICAgIGNvbnN0IHRyaWdnZXJFdmVudHMgPSBnZXRUcmlnZ2VyRXZlbnRzKGVudGl0eSlcbiAgICAgIHRyaWdnZXJFdmVudHMuZW1pdChUcmlnZ2VyVHlwZS5PTl9DT1VOVEVSX0NIQU5HRSlcbiAgICB9XG4gIH1cblxuICAvLyBJTkNSRU1FTlRfQ09VTlRFUlxuICBmdW5jdGlvbiBoYW5kbGVJbmNyZW1lbnRDb3VudGVyKFxuICAgIGVudGl0eTogRW50aXR5LFxuICAgIF9wYXlsb2FkOiBBY3Rpb25QYXlsb2FkPEFjdGlvblR5cGUuSU5DUkVNRU5UX0NPVU5URVI+LFxuICApIHtcbiAgICBjb25zdCBjb3VudGVyID0gQ291bnRlci5nZXRNdXRhYmxlT3JOdWxsKGVudGl0eSlcblxuICAgIGlmIChjb3VudGVyKSB7XG4gICAgICBjb3VudGVyLnZhbHVlICs9IDFcblxuICAgICAgY29uc3QgdHJpZ2dlckV2ZW50cyA9IGdldFRyaWdnZXJFdmVudHMoZW50aXR5KVxuICAgICAgdHJpZ2dlckV2ZW50cy5lbWl0KFRyaWdnZXJUeXBlLk9OX0NPVU5URVJfQ0hBTkdFKVxuICAgIH1cbiAgfVxuXG4gIC8vIERFQ1JFQVNFX0NPVU5URVJcbiAgZnVuY3Rpb24gaGFuZGxlRGVjcmVhc2VDb3VudGVyKFxuICAgIGVudGl0eTogRW50aXR5LFxuICAgIF9wYXlsb2FkOiBBY3Rpb25QYXlsb2FkPEFjdGlvblR5cGUuSU5DUkVNRU5UX0NPVU5URVI+LFxuICApIHtcbiAgICBjb25zdCBjb3VudGVyID0gQ291bnRlci5nZXRNdXRhYmxlT3JOdWxsKGVudGl0eSlcblxuICAgIGlmIChjb3VudGVyKSB7XG4gICAgICBjb3VudGVyLnZhbHVlIC09IDFcblxuICAgICAgY29uc3QgdHJpZ2dlckV2ZW50cyA9IGdldFRyaWdnZXJFdmVudHMoZW50aXR5KVxuICAgICAgdHJpZ2dlckV2ZW50cy5lbWl0KFRyaWdnZXJUeXBlLk9OX0NPVU5URVJfQ0hBTkdFKVxuICAgIH1cbiAgfVxuXG4gIC8vIFBMQVlfU09VTkRcbiAgZnVuY3Rpb24gaGFuZGxlUGxheVNvdW5kKFxuICAgIGVudGl0eTogRW50aXR5LFxuICAgIHBheWxvYWQ6IEFjdGlvblBheWxvYWQ8QWN0aW9uVHlwZS5QTEFZX1NPVU5EPixcbiAgKSB7XG4gICAgY29uc3QgeyBzcmMsIGxvb3AsIHZvbHVtZSB9ID0gcGF5bG9hZFxuICAgIEF1ZGlvU291cmNlLmNyZWF0ZU9yUmVwbGFjZShlbnRpdHksIHtcbiAgICAgIGF1ZGlvQ2xpcFVybDogc3JjLFxuICAgICAgbG9vcCxcbiAgICAgIHBsYXlpbmc6IHRydWUsXG4gICAgICB2b2x1bWU6IHZvbHVtZSA/PyAxLFxuICAgIH0pXG4gIH1cblxuICAvLyBTVE9QX1NPVU5EXG4gIGZ1bmN0aW9uIGhhbmRsZVN0b3BTb3VuZChcbiAgICBlbnRpdHk6IEVudGl0eSxcbiAgICBfcGF5bG9hZDogQWN0aW9uUGF5bG9hZDxBY3Rpb25UeXBlLlNUT1BfU09VTkQ+LFxuICApIHtcbiAgICBjb25zdCBhdWRpb1NvdXJjZSA9IEF1ZGlvU291cmNlLmdldE11dGFibGVPck51bGwoZW50aXR5KVxuICAgIGlmIChhdWRpb1NvdXJjZSkge1xuICAgICAgYXVkaW9Tb3VyY2UucGxheWluZyA9IGZhbHNlXG4gICAgfVxuICB9XG5cbiAgLy8gU0VUX1ZJU0lCSUxJVFlcbiAgZnVuY3Rpb24gaGFuZGxlU2V0VmlzaWJpbGl0eShcbiAgICBlbnRpdHk6IEVudGl0eSxcbiAgICBwYXlsb2FkOiBBY3Rpb25QYXlsb2FkPEFjdGlvblR5cGUuU0VUX1ZJU0lCSUxJVFk+LFxuICApIHtcbiAgICBjb25zdCB7IHZpc2libGUsIHBoeXNpY3NDb2xsaWRlciB9ID0gcGF5bG9hZFxuICAgIFZpc2liaWxpdHlDb21wb25lbnQuY3JlYXRlT3JSZXBsYWNlKGVudGl0eSwgeyB2aXNpYmxlIH0pXG4gICAgY29uc3QgZ2x0ZiA9IEdsdGZDb250YWluZXIuZ2V0TXV0YWJsZU9yTnVsbChlbnRpdHkpXG5cbiAgICBpZiAoZ2x0ZiAmJiBwaHlzaWNzQ29sbGlkZXIgIT09IHVuZGVmaW5lZCkge1xuICAgICAgZ2x0Zi5pbnZpc2libGVNZXNoZXNDb2xsaXNpb25NYXNrID0gcGh5c2ljc0NvbGxpZGVyID8gMiA6IDBcbiAgICB9XG4gIH1cblxuICAvLyBBVFRBQ0hfVE9fUExBWUVSXG4gIGZ1bmN0aW9uIGhhbmRsZUF0dGFjaFRvUGxheWVyKFxuICAgIGVudGl0eTogRW50aXR5LFxuICAgIHBheWxvYWQ6IEFjdGlvblBheWxvYWQ8QWN0aW9uVHlwZS5BVFRBQ0hfVE9fUExBWUVSPixcbiAgKSB7XG4gICAgY29uc3QgeyBhbmNob3JQb2ludElkIH0gPSBwYXlsb2FkXG4gICAgQXZhdGFyQXR0YWNoLmNyZWF0ZU9yUmVwbGFjZShlbnRpdHksIHsgYW5jaG9yUG9pbnRJZCB9KVxuICB9XG5cbiAgLy8gREVUQUNIX0ZST01fUExBWUVSXG4gIGZ1bmN0aW9uIGhhbmRsZURldGFjaEZyb21QbGF5ZXIoXG4gICAgZW50aXR5OiBFbnRpdHksXG4gICAgX3BheWxvYWQ6IEFjdGlvblBheWxvYWQ8QWN0aW9uVHlwZS5ERVRBQ0hfRlJPTV9QTEFZRVI+LFxuICApIHtcbiAgICBpZiAoQXZhdGFyQXR0YWNoLmhhcyhlbnRpdHkpKSB7XG4gICAgICBBdmF0YXJBdHRhY2guZGVsZXRlRnJvbShlbnRpdHkpXG4gICAgfVxuICB9XG5cbiAgLy8gVEVMRVBPUlQgUExBWUVSXG4gIGZ1bmN0aW9uIGhhbmRsZVRlbGVwb3J0UGxheWVyKFxuICAgIF9lbnRpdHk6IEVudGl0eSxcbiAgICBwYXlsb2FkOiBBY3Rpb25QYXlsb2FkPEFjdGlvblR5cGUuVEVMRVBPUlRfUExBWUVSPixcbiAgKSB7XG4gICAgY29uc3QgeyB4LCB5IH0gPSBwYXlsb2FkXG4gICAgcmVxdWVzdFRlbGVwb3J0KHtcbiAgICAgIGRlc3RpbmF0aW9uOiBgJHt4fSwke3l9YCxcbiAgICB9KVxuICB9XG5cbiAgLy8gTU9WRSBQTEFZRVJcbiAgZnVuY3Rpb24gaGFuZGxlTW92ZVBsYXllcihcbiAgICBfZW50aXR5OiBFbnRpdHksXG4gICAgcGF5bG9hZDogQWN0aW9uUGF5bG9hZDxBY3Rpb25UeXBlLk1PVkVfUExBWUVSPixcbiAgKSB7XG4gICAgY29uc3Qgb3B0aW9ucyA9IHtcbiAgICAgIG5ld1JlbGF0aXZlUG9zaXRpb246IHBheWxvYWQucG9zaXRpb24sXG4gICAgICBjYW1lcmFUYXJnZXQ6IHBheWxvYWQuY2FtZXJhVGFyZ2V0LFxuICAgIH1cbiAgICBjb25zb2xlLmxvZygnbW92ZVBsYXllclRvJywgb3B0aW9ucylcbiAgICB2b2lkIG1vdmVQbGF5ZXJUbyhvcHRpb25zKVxuICB9XG5cbiAgLy8gUExBWSBERUZBVUxUIEVNT1RFXG4gIGZ1bmN0aW9uIGhhbmRsZVBsYXlEZWZhdWx0RW1vdGUoXG4gICAgX2VudGl0eTogRW50aXR5LFxuICAgIHBheWxvYWQ6IEFjdGlvblBheWxvYWQ8QWN0aW9uVHlwZS5QTEFZX0RFRkFVTFRfRU1PVEU+LFxuICApIHtcbiAgICBjb25zdCB7IGVtb3RlIH0gPSBwYXlsb2FkXG4gICAgdm9pZCB0cmlnZ2VyRW1vdGUoeyBwcmVkZWZpbmVkRW1vdGU6IGVtb3RlIH0pXG4gIH1cblxuICAvLyBQTEFZIENVU1RPTSBFTU9URVxuICBmdW5jdGlvbiBoYW5kbGVQbGF5Q3VzdG9tRW1vdGUoXG4gICAgX2VudGl0eTogRW50aXR5LFxuICAgIHBheWxvYWQ6IEFjdGlvblBheWxvYWQ8QWN0aW9uVHlwZS5QTEFZX0NVU1RPTV9FTU9URT4sXG4gICkge1xuICAgIGNvbnN0IHsgc3JjLCBsb29wIH0gPSBwYXlsb2FkXG4gICAgdm9pZCB0cmlnZ2VyU2NlbmVFbW90ZSh7IHNyYywgbG9vcCB9KVxuICB9XG5cbiAgLy8gT1BFTiBMSU5LXG4gIGZ1bmN0aW9uIGhhbmRsZU9wZW5MaW5rKFxuICAgIF9lbnRpdHk6IEVudGl0eSxcbiAgICBwYXlsb2FkOiBBY3Rpb25QYXlsb2FkPEFjdGlvblR5cGUuT1BFTl9MSU5LPixcbiAgKSB7XG4gICAgY29uc3QgeyB1cmwgfSA9IHBheWxvYWRcbiAgICB2b2lkIG9wZW5FeHRlcm5hbFVybCh7IHVybCB9KVxuICB9XG5cbiAgYXN5bmMgZnVuY3Rpb24gZ2V0VmlkZW9TcmMoe1xuICAgIHNyYyxcbiAgICBkY2xDYXN0LFxuICB9OiBBY3Rpb25QYXlsb2FkPEFjdGlvblR5cGUuUExBWV9WSURFT19TVFJFQU0+KSB7XG4gICAgaWYgKGRjbENhc3QpIHtcbiAgICAgIGNvbnN0IHsgc3RyZWFtcyB9ID0gYXdhaXQgZ2V0QWN0aXZlVmlkZW9TdHJlYW1zKHt9KVxuICAgICAgcmV0dXJuIHN0cmVhbXMubGVuZ3RoID4gMCA/IHN0cmVhbXNbMF0udHJhY2tTaWQgOiAnJ1xuICAgIH1cbiAgICByZXR1cm4gc3JjID8/ICcnXG4gIH1cblxuICAvLyBQTEFZX1ZJREVPXG4gIGZ1bmN0aW9uIGhhbmRsZVBsYXlWaWRlbyhcbiAgICBlbnRpdHk6IEVudGl0eSxcbiAgICBwYXlsb2FkOiBBY3Rpb25QYXlsb2FkPEFjdGlvblR5cGUuUExBWV9WSURFT19TVFJFQU0+LFxuICApIHtcbiAgICAvLyBHZXQgdGhlIHZpZGVvIHNyYyBmcm9tIGEgcHJvbWlzZSAoVmlkZW8gRmlsZS9WaWRlbyBTdHJlYW0vRENMIENhc3QpXG4gICAgZ2V0VmlkZW9TcmMocGF5bG9hZCkudGhlbigoc3JjKSA9PiB7XG4gICAgICBpZiAoIXNyYykgcmV0dXJuXG5cbiAgICAgIGNvbnN0IHZpZGVvU291cmNlID0gVmlkZW9QbGF5ZXIuZ2V0TXV0YWJsZU9yTnVsbChlbnRpdHkpXG5cbiAgICAgIGlmICh2aWRlb1NvdXJjZSkge1xuICAgICAgICB2aWRlb1NvdXJjZS5zcmMgPSBzcmNcbiAgICAgICAgdmlkZW9Tb3VyY2Uudm9sdW1lID0gcGF5bG9hZC52b2x1bWUgPz8gMVxuICAgICAgICB2aWRlb1NvdXJjZS5sb29wID0gcGF5bG9hZC5sb29wID8/IGZhbHNlXG4gICAgICAgIHZpZGVvU291cmNlLnBsYXlpbmcgPSB0cnVlXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBWaWRlb1BsYXllci5jcmVhdGVPclJlcGxhY2UoZW50aXR5LCB7XG4gICAgICAgICAgc3JjLFxuICAgICAgICAgIHZvbHVtZTogcGF5bG9hZC52b2x1bWUgPz8gMSxcbiAgICAgICAgICBsb29wOiBwYXlsb2FkLmxvb3AgPz8gZmFsc2UsXG4gICAgICAgICAgcGxheWluZzogdHJ1ZSxcbiAgICAgICAgfSlcblxuICAgICAgICAvLyBJbml0IHZpZGVvIHBsYXllciBtYXRlcmlhbCB3aGVuIHRoZSBlbnRpdHkgZG9lc24ndCBoYXZlIGEgVmlkZW9QbGF5ZXIgY29tcG9uZW50IGRlZmluZWRcbiAgICAgICAgaW5pdFZpZGVvUGxheWVyQ29tcG9uZW50TWF0ZXJpYWwoZW50aXR5LCBjb21wb25lbnRzLCBNYXRlcmlhbC5nZXRPck51bGwoZW50aXR5KSlcbiAgICAgIH1cbiAgICB9KVxuICB9XG5cbiAgLy8gU1RPUF9WSURFT1xuICBmdW5jdGlvbiBoYW5kbGVTdG9wVmlkZW8oXG4gICAgZW50aXR5OiBFbnRpdHksXG4gICAgX3BheWxvYWQ6IEFjdGlvblBheWxvYWQ8QWN0aW9uVHlwZS5TVE9QX1ZJREVPX1NUUkVBTT4sXG4gICkge1xuICAgIGNvbnN0IHZpZGVvU291cmNlID0gVmlkZW9QbGF5ZXIuZ2V0TXV0YWJsZU9yTnVsbChlbnRpdHkpXG4gICAgaWYgKHZpZGVvU291cmNlKSB7XG4gICAgICB2aWRlb1NvdXJjZS5wbGF5aW5nID0gZmFsc2VcbiAgICB9XG4gIH1cblxuICAvLyBQTEFZX0FVRElPX1NUUkVBTVxuICBmdW5jdGlvbiBoYW5kbGVQbGF5QXVkaW9TdHJlYW0oXG4gICAgZW50aXR5OiBFbnRpdHksXG4gICAgcGF5bG9hZDogQWN0aW9uUGF5bG9hZDxBY3Rpb25UeXBlLlBMQVlfQVVESU9fU1RSRUFNPixcbiAgKSB7XG4gICAgY29uc3QgeyB1cmwsIHZvbHVtZSB9ID0gcGF5bG9hZFxuICAgIEF1ZGlvU3RyZWFtLmNyZWF0ZU9yUmVwbGFjZShlbnRpdHksIHtcbiAgICAgIHVybCxcbiAgICAgIHBsYXlpbmc6IHRydWUsXG4gICAgICB2b2x1bWU6IHZvbHVtZSA/PyAxLFxuICAgIH0pXG4gIH1cblxuICAvLyBTVE9QX0FVRElPX1NUUkVBTVxuICBmdW5jdGlvbiBoYW5kbGVTdG9wQXVkaW9TdHJlYW0oXG4gICAgZW50aXR5OiBFbnRpdHksXG4gICAgX3BheWxvYWQ6IEFjdGlvblBheWxvYWQ8QWN0aW9uVHlwZS5TVE9QX0FVRElPX1NUUkVBTT4sXG4gICkge1xuICAgIGNvbnN0IGF1ZGlvU291cmNlID0gQXVkaW9TdHJlYW0uZ2V0TXV0YWJsZU9yTnVsbChlbnRpdHkpXG4gICAgaWYgKGF1ZGlvU291cmNlKSB7XG4gICAgICBhdWRpb1NvdXJjZS5wbGF5aW5nID0gZmFsc2VcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBnZXRVSVRyYW5zZm9ybShlbnRpeTogRW50aXR5KSB7XG4gICAgbGV0IHVpVHJhbnNmb3JtQ29tcG9uZW50ID0gVWlUcmFuc2Zvcm0uZ2V0TXV0YWJsZU9yTnVsbChlbnRpeSlcbiAgICBpZiAoIXVpVHJhbnNmb3JtQ29tcG9uZW50KSB7XG4gICAgICB1aVRyYW5zZm9ybUNvbXBvbmVudCA9IFVpVHJhbnNmb3JtLmNyZWF0ZShlbnRpeSlcbiAgICAgIHVpVHJhbnNmb3JtQ29tcG9uZW50LmhlaWdodFVuaXQgPSBZR1VuaXQuWUdVX1BFUkNFTlRcbiAgICAgIHVpVHJhbnNmb3JtQ29tcG9uZW50LndpZHRoVW5pdCA9IFlHVW5pdC5ZR1VfUEVSQ0VOVFxuICAgICAgdWlUcmFuc2Zvcm1Db21wb25lbnQuaGVpZ2h0ID0gMTAwXG4gICAgICB1aVRyYW5zZm9ybUNvbXBvbmVudC53aWR0aCA9IDEwMFxuICAgIH1cblxuICAgIHJldHVybiB1aVRyYW5zZm9ybUNvbXBvbmVudFxuICB9XG5cbiAgLy8gU0hPV19URVhUXG4gIGZ1bmN0aW9uIGhhbmRsZVNob3dUZXh0KFxuICAgIGVudGl0eTogRW50aXR5LFxuICAgIHBheWxvYWQ6IEFjdGlvblBheWxvYWQ8QWN0aW9uVHlwZS5TSE9XX1RFWFQ+LFxuICApIHtcbiAgICBjb25zdCB7IHRleHQsIGhpZGVBZnRlclNlY29uZHMsIGZvbnQsIGZvbnRTaXplLCB0ZXh0QWxpZ24gfSA9IHBheWxvYWRcbiAgICBjb25zdCB1aVRyYW5zZm9ybUNvbXBvbmVudCA9IGdldFVJVHJhbnNmb3JtKGVudGl0eSlcbiAgICBpZiAodWlUcmFuc2Zvcm1Db21wb25lbnQpIHtcbiAgICAgIFVpVGV4dC5jcmVhdGVPclJlcGxhY2UoZW50aXR5LCB7XG4gICAgICAgIHZhbHVlOiB0ZXh0LFxuICAgICAgICBmb250OiBmb250IGFzIHVua25vd24gYXMgRm9udCxcbiAgICAgICAgZm9udFNpemUsXG4gICAgICAgIHRleHRBbGlnbjogdGV4dEFsaWduIGFzIHVua25vd24gYXMgVGV4dEFsaWduTW9kZSxcbiAgICAgIH0pXG4gICAgICBzdGFydFRpbWVvdXQoZW50aXR5LCBBY3Rpb25UeXBlLlNIT1dfVEVYVCwgaGlkZUFmdGVyU2Vjb25kcywgKCkgPT5cbiAgICAgICAgaGFuZGxlSGlkZVRleHQoZW50aXR5LCB7fSksXG4gICAgICApXG4gICAgfVxuICB9XG5cbiAgLy8gSElERV9URVhUXG4gIGZ1bmN0aW9uIGhhbmRsZUhpZGVUZXh0KFxuICAgIGVudGl0eTogRW50aXR5LFxuICAgIF9wYXlsb2FkOiBBY3Rpb25QYXlsb2FkPEFjdGlvblR5cGUuSElERV9URVhUPixcbiAgKSB7XG4gICAgY29uc3QgdWlUZXh0Q29tcG9uZW50ID0gVWlUZXh0LmdldE9yTnVsbChlbnRpdHkpXG4gICAgaWYgKHVpVGV4dENvbXBvbmVudCkge1xuICAgICAgVWlUZXh0LmRlbGV0ZUZyb20oZW50aXR5KVxuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIGZpbmRBY3Rpb25CeU5hbWUoZW50aXR5OiBFbnRpdHksIG5hbWU6IHN0cmluZykge1xuICAgIGNvbnN0IGFjdGlvbnMgPSBBY3Rpb25zLmdldE9yTnVsbChlbnRpdHkpXG4gICAgcmV0dXJuIGFjdGlvbnM/LnZhbHVlLmZpbmQoKCQpID0+ICQubmFtZSA9PT0gbmFtZSlcbiAgfVxuXG4gIC8vIFNUQVJUX0RFTEFZXG4gIGZ1bmN0aW9uIGhhbmRsZVN0YXJ0RGVsYXkoXG4gICAgZW50aXR5OiBFbnRpdHksXG4gICAgcGF5bG9hZDogQWN0aW9uUGF5bG9hZDxBY3Rpb25UeXBlLlNUQVJUX0RFTEFZPixcbiAgKSB7XG4gICAgY29uc3QgeyBhY3Rpb25zLCB0aW1lb3V0IH0gPSBwYXlsb2FkXG4gICAgZm9yIChjb25zdCBhY3Rpb25OYW1lIG9mIGFjdGlvbnMpIHtcbiAgICAgIGNvbnN0IGFjdGlvbiA9IGZpbmRBY3Rpb25CeU5hbWUoZW50aXR5LCBhY3Rpb25OYW1lKVxuICAgICAgaWYgKGFjdGlvbikge1xuICAgICAgICBzdGFydFRpbWVvdXQoZW50aXR5LCBhY3Rpb25OYW1lLCB0aW1lb3V0LCAoKSA9PiB7XG4gICAgICAgICAgY29uc3QgYWN0aW9uRXZlbnRzID0gZ2V0QWN0aW9uRXZlbnRzKGVudGl0eSlcbiAgICAgICAgICBhY3Rpb25FdmVudHMuZW1pdChhY3Rpb24ubmFtZSwgZ2V0UGF5bG9hZChhY3Rpb24pKVxuICAgICAgICB9KVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8vIFNUT1BfREVMQVlcbiAgZnVuY3Rpb24gaGFuZGxlU3RvcERlbGF5KFxuICAgIGVudGl0eTogRW50aXR5LFxuICAgIHBheWxvYWQ6IEFjdGlvblBheWxvYWQ8QWN0aW9uVHlwZS5TVE9QX0RFTEFZPixcbiAgKSB7XG4gICAgY29uc3QgeyBhY3Rpb24gfSA9IHBheWxvYWRcbiAgICBzdG9wVGltZW91dChlbnRpdHksIGFjdGlvbilcbiAgfVxuXG4gIC8vIFNUQVJUX0xPT1BcbiAgZnVuY3Rpb24gaGFuZGxlU3RhcnRMb29wKFxuICAgIGVudGl0eTogRW50aXR5LFxuICAgIHBheWxvYWQ6IEFjdGlvblBheWxvYWQ8QWN0aW9uVHlwZS5TVEFSVF9MT09QPixcbiAgKSB7XG4gICAgY29uc3QgeyBhY3Rpb25zLCBpbnRlcnZhbCB9ID0gcGF5bG9hZFxuICAgIGZvciAoY29uc3QgYWN0aW9uTmFtZSBvZiBhY3Rpb25zKSB7XG4gICAgICBjb25zdCBhY3Rpb24gPSBmaW5kQWN0aW9uQnlOYW1lKGVudGl0eSwgYWN0aW9uTmFtZSlcbiAgICAgIGlmIChhY3Rpb24pIHtcbiAgICAgICAgc3RhcnRJbnRlcnZhbChlbnRpdHksIGFjdGlvbk5hbWUsIGludGVydmFsLCAoKSA9PiB7XG4gICAgICAgICAgY29uc3QgYWN0aW9uRXZlbnRzID0gZ2V0QWN0aW9uRXZlbnRzKGVudGl0eSlcbiAgICAgICAgICBhY3Rpb25FdmVudHMuZW1pdChhY3Rpb24ubmFtZSwgZ2V0UGF5bG9hZChhY3Rpb24pKVxuICAgICAgICB9KVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8vIFNUT1BfTE9PUFxuICBmdW5jdGlvbiBoYW5kbGVTdG9wTG9vcChcbiAgICBlbnRpdHk6IEVudGl0eSxcbiAgICBwYXlsb2FkOiBBY3Rpb25QYXlsb2FkPEFjdGlvblR5cGUuU1RPUF9MT09QPixcbiAgKSB7XG4gICAgY29uc3QgeyBhY3Rpb24gfSA9IHBheWxvYWRcbiAgICBzdG9wSW50ZXJ2YWwoZW50aXR5LCBhY3Rpb24pXG4gIH1cblxuICAvLyBDTE9ORV9FTlRJVFlcbiAgZnVuY3Rpb24gaGFuZGxlQ2xvbmVFbnRpdHkoXG4gICAgZW50aXR5OiBFbnRpdHksXG4gICAgcGF5bG9hZDogQWN0aW9uUGF5bG9hZDxBY3Rpb25UeXBlLkNMT05FX0VOVElUWT4sXG4gICkge1xuICAgIGNvbnN0IHsgcG9zaXRpb24gfSA9IHBheWxvYWRcbiAgICBjb25zdCBjbG9uZSA9IGVuZ2luZS5hZGRFbnRpdHkoKVxuXG4gICAgZm9yIChjb25zdCBjb21wb25lbnQgb2YgZW5naW5lLmNvbXBvbmVudHNJdGVyKCkpIHtcbiAgICAgIGlmIChjb21wb25lbnQuaGFzKGVudGl0eSkpIHtcbiAgICAgICAgY29uc3QgdmFsdWUgPSBjb21wb25lbnQuZ2V0KGVudGl0eSlcbiAgICAgICAgaWYgKGlzTGFzdFdyaXRlV2luQ29tcG9uZW50KGNvbXBvbmVudCkpIHtcbiAgICAgICAgICBjb21wb25lbnQuY3JlYXRlT3JSZXBsYWNlKGNsb25lLCB2YWx1ZSlcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IHRyYW5zZm9ybSA9IFRyYW5zZm9ybS5nZXRPckNyZWF0ZU11dGFibGUoY2xvbmUpXG4gICAgdHJhbnNmb3JtLnBvc2l0aW9uID0gcG9zaXRpb25cblxuICAgIGNvbnN0IHRyaWdnZXJFdmVudHMgPSBnZXRUcmlnZ2VyRXZlbnRzKGNsb25lKVxuICAgIHRyaWdnZXJFdmVudHMuZW1pdChUcmlnZ2VyVHlwZS5PTl9TUEFXTilcbiAgICB0cmlnZ2VyRXZlbnRzLmVtaXQoVHJpZ2dlclR5cGUuT05fQ0xPTkUpXG4gIH1cblxuICAvLyBSRU1PVkVfRU5USVRZXG4gIGZ1bmN0aW9uIGhhbmRsZVJlbW92ZUVudGl0eShcbiAgICBlbnRpdHk6IEVudGl0eSxcbiAgICBfcGF5bG9hZDogQWN0aW9uUGF5bG9hZDxBY3Rpb25UeXBlLlJFTU9WRV9FTlRJVFk+LFxuICApIHtcbiAgICBlbmdpbmUucmVtb3ZlRW50aXR5KGVudGl0eSlcbiAgfVxufVxuIl19
521
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWN0aW9ucy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9hY3Rpb25zLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFHTCxXQUFXLEVBQ1gsUUFBUSxFQUNSLFdBQVcsRUFDWCxNQUFNLEVBTU4sbUJBQW1CLEdBRXBCLE1BQU0sY0FBYyxDQUFBO0FBQ3JCLE9BQU8sRUFBRSxVQUFVLEVBQUUsT0FBTyxFQUFFLE1BQU0sZUFBZSxDQUFBO0FBQ25ELE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQTtBQUNsRCxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQTtBQUN4RCxPQUFPLEVBRUwsVUFBVSxFQUdWLFdBQVcsRUFDWCxTQUFTLEVBQ1QsYUFBYSxFQUNiLGdDQUFnQyxHQUNqQyxNQUFNLGVBQWUsQ0FBQTtBQUN0QixPQUFPLEVBQUUsZUFBZSxFQUFFLFlBQVksRUFBRSxNQUFNLFVBQVUsQ0FBQTtBQUN4RCxPQUFPLEVBQUUsZUFBZSxFQUFFLGdCQUFnQixFQUFFLE1BQU0sVUFBVSxDQUFBO0FBQzVELE9BQU8sRUFDTCxhQUFhLEVBQ2IsWUFBWSxFQUNaLGdCQUFnQixFQUNoQixlQUFlLEVBQ2YsWUFBWSxFQUNaLFdBQVcsR0FDWixNQUFNLFNBQVMsQ0FBQTtBQUNoQixPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZ0JBQWdCLENBQUE7QUFDM0MsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDBCQUEwQixDQUFBO0FBQzFELE9BQU8sRUFDTCxZQUFZLEVBQ1osWUFBWSxFQUNaLGlCQUFpQixFQUNqQixlQUFlLEdBQ2hCLE1BQU0sMkJBQTJCLENBQUE7QUFDbEMsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sT0FBTyxDQUFBO0FBQy9DLE9BQU8sRUFDTCxlQUFlLEVBQ2YsU0FBUyxFQUNULGNBQWMsRUFDZCxxQkFBcUIsR0FDdEIsTUFBTSxNQUFNLENBQUE7QUFFYixNQUFNLGNB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YUFDbkM7U0FDRjtJQUNILENBQUM7QUFDSCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgSUVuZ2luZSxcbiAgRW50aXR5LFxuICBWaWRlb1BsYXllcixcbiAgTWF0ZXJpYWwsXG4gIEF1ZGlvU3RyZWFtLFxuICBVaVRleHQsXG4gIFlHVW5pdCxcbiAgVGV4dEFsaWduTW9kZSxcbiAgRm9udCxcbiAgWUdQb3NpdGlvblR5cGUsXG4gIFBvaW50ZXJGaWx0ZXJNb2RlLFxuICBwb2ludGVyRXZlbnRzU3lzdGVtLFxuICBJbnB1dEFjdGlvbixcbn0gZnJvbSAnQGRjbC9zZGsvZWNzJ1xuaW1wb3J0IHsgUXVhdGVybmlvbiwgVmVjdG9yMyB9IGZyb20gJ0BkY2wvc2RrL21hdGgnXG5pbXBvcnQgeyB0d2VlbnMgfSBmcm9tICdAZGNsLXNkay91dGlscy9kaXN0L3R3ZWVuJ1xuaW1wb3J0IHsgZ2V0QWN0aXZlVmlkZW9TdHJlYW1zIH0gZnJvbSAnfnN5c3RlbS9Db21tc0FwaSdcbmltcG9ydCB7XG4gIEFjdGlvblBheWxvYWQsXG4gIEFjdGlvblR5cGUsXG4gIEVuZ2luZUNvbXBvbmVudHMsXG4gIFNjcmVlbkFsaWduTW9kZSxcbiAgVHJpZ2dlclR5cGUsXG4gIFR3ZWVuVHlwZSxcbiAgZ2V0Q29tcG9uZW50cyxcbiAgaW5pdFZpZGVvUGxheWVyQ29tcG9uZW50TWF0ZXJpYWwsXG59IGZyb20gJy4vZGVmaW5pdGlvbnMnXG5pbXBvcnQgeyBnZXREZWZhdWx0VmFsdWUsIGlzVmFsaWRTdGF0ZSB9IGZyb20gJy4vc3RhdGVzJ1xuaW1wb3J0IHsgZ2V0QWN0aW9uRXZlbnRzLCBnZXRUcmlnZ2VyRXZlbnRzIH0gZnJvbSAnLi9ldmVudHMnXG5pbXBvcnQge1xuICBzdGFydEludGVydmFsLFxuICBzdGFydFRpbWVvdXQsXG4gIHN0b3BBbGxJbnRlcnZhbHMsXG4gIHN0b3BBbGxUaW1lb3V0cyxcbiAgc3RvcEludGVydmFsLFxuICBzdG9wVGltZW91dCxcbn0gZnJvbSAnLi90aW1lcidcbmltcG9ydCB7IGdldFBheWxvYWQgfSBmcm9tICcuL2FjdGlvbi10eXBlcydcbmltcG9ydCB7IHJlcXVlc3RUZWxlcG9ydCB9IGZyb20gJ35zeXN0ZW0vVXNlckFjdGlvbk1vZHVsZSdcbmltcG9ydCB7XG4gIG1vdmVQbGF5ZXJUbyxcbiAgdHJpZ2dlckVtb3RlLFxuICB0cmlnZ2VyU2NlbmVFbW90ZSxcbiAgb3BlbkV4dGVybmFsVXJsLFxufSBmcm9tICd+c3lzdGVtL1Jlc3RyaWN0ZWRBY3Rpb25zJ1xuaW1wb3J0IHsgaXNMYXN0V3JpdGVXaW5Db21wb25lbnQgfSBmcm9tICcuL2x3dydcbmltcG9ydCB7XG4gIGdldFVJQmFja2dyb3VuZCxcbiAgZ2V0VUlUZXh0LFxuICBnZXRVSVRyYW5zZm9ybSxcbiAgbWFwQWxpZ25Ub1NjcmVlbkFsaWduLFxufSBmcm9tICcuL3VpJ1xuXG5jb25zdCBpbml0ZWRFbnRpdGllcyA9IG5ldyBTZXQ8RW50aXR5PigpXG5jb25zdCB1aVN0YWNrcyA9IG5ldyBNYXA8c3RyaW5nLCBFbnRpdHk+KClcbmNvbnN0IGxhc3RVaUVudGl0eUNsaWNrZWQgPSBuZXcgTWFwPEVudGl0eSwgRW50aXR5PigpXG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVBY3Rpb25zU3lzdGVtKFxuICBlbmdpbmU6IElFbmdpbmUsXG4gIGNvbXBvbmVudHM6IEVuZ2luZUNvbXBvbmVudHMsXG4pIHtcbiAgY29uc3Qge1xuICAgIEFuaW1hdG9yLFxuICAgIFRyYW5zZm9ybSxcbiAgICBBdWRpb1NvdXJjZSxcbiAgICBBdmF0YXJBdHRhY2gsXG4gICAgVmlzaWJpbGl0eUNvbXBvbmVudCxcbiAgICBHbHRmQ29udGFpbmVyLFxuICB9ID0gY29tcG9uZW50c1xuICBjb25zdCB7IEFjdGlvbnMsIFN0YXRlcywgQ291bnRlciB9ID0gZ2V0Q29tcG9uZW50cyhlbmdpbmUpXG5cbiAgcmV0dXJuIGZ1bmN0aW9uIGFjdGlvbnNTeXN0ZW0oX2R0OiBudW1iZXIpIHtcbiAgICBjb25zdCBlbnRpdGllc1dpdGhBY3Rpb25zID0gZW5naW5lLmdldEVudGl0aWVzV2l0aChBY3Rpb25zKVxuXG4gICAgZm9yIChjb25zdCBbZW50aXR5LCBhY3Rpb25zXSBvZiBlbnRpdGllc1dpdGhBY3Rpb25zKSB7XG4gICAgICBpZiAoaW5pdGVkRW50aXRpZXMuaGFzKGVudGl0eSkpIHtcbiAgICAgICAgY29udGludWVcbiAgICAgIH1cblxuICAgICAgLy8gaW5pdGlhbGl6ZSBhY3Rpb25zIGZvciBnaXZlbiBlbnRpdHlcbiAgICAgIGNvbnN0IHR5cGVzID0gYWN0aW9ucy52YWx1ZS5yZWR1Y2UoXG4gICAgICAgICh0eXBlcywgYWN0aW9uKSA9PiB0eXBlcy5hZGQoYWN0aW9uLnR5cGUpLFxuICAgICAgICBuZXcgU2V0PFN0cmluZz4oKSxcbiAgICAgIClcblxuICAgICAgZm9yIChjb25zdCB0eXBlIG9mIHR5cGVzKSB7XG4gICAgICAgIHN3aXRjaCAodHlwZSkge1xuICAgICAgICAgIGNhc2UgQWN0aW9uVHlwZS5QTEFZX0FOSU1BVElPTjoge1xuICAgICAgICAgICAgaW5pdFBsYXlBbmltYXRpb24oZW50aXR5KVxuICAgICAgICAgICAgYnJlYWtcbiAgICAgICAgICB9XG4gICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIGJyZWFrXG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gYmluZCBhY3Rpb25zXG4gICAgICBjb25zdCBhY3Rpb25FdmVudHMgPSBnZXRBY3Rpb25FdmVudHMoZW50aXR5KVxuICAgICAgZm9yIChjb25zdCBhY3Rpb24gb2YgYWN0aW9ucy52YWx1ZSkge1xuICAgICAgICBhY3Rpb25FdmVudHMub24oYWN0aW9uLm5hbWUsICgpID0+IHtcbiAgICAgICAgICBzd2l0Y2ggKGFjdGlvbi50eXBlKSB7XG4gICAgICAgICAgICBjYXNlIEFjdGlvblR5cGUuUExBWV9BTklNQVRJT046IHtcbiAgICAgICAgICAgICAgaGFuZGxlUGxheUFuaW1hdGlvbihcbiAgICAgICAgICAgICAgICBlbnRpdHksXG4gICAgICAgICAgICAgICAgZ2V0UGF5bG9hZDxBY3Rpb25UeXBlLlBMQVlfQU5JTUFUSU9OPihhY3Rpb24pLFxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgIGJyZWFrXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlIEFjdGlvblR5cGUuU1RPUF9BTklNQVRJT046IHtcbiAgICAgICAgICAgICAgaGFuZGxlU3RvcEFuaW1hdGlvbihcbiAgICAgICAgICAgICAgICBlbnRpdHksXG4gICAgICAgICAgICAgICAgZ2V0UGF5bG9hZDxBY3Rpb25UeXBlLlNUT1BfQU5JTUFUSU9OPihhY3Rpb24pLFxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgIGJyZWFrXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlIEFjdGlvblR5cGUuU0VUX1NUQVRFOiB7XG4gICAgICAgICAgICAgIGhhbmRsZVNldFN0YXRlKGVudGl0eSwgZ2V0UGF5bG9hZDxBY3Rpb25UeXBlLlNFVF9TVEFURT4oYWN0aW9uKSlcbiAgICAgICAgICAgICAgYnJlYWtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgQWN0aW9uVHlwZS5TVEFSVF9UV0VFTjoge1xuICAgICAgICAgICAgICBoYW5kbGVTdGFydFR3ZWVuKFxuICAgICAgICAgICAgICAgIGVudGl0eSxcbiAgICAgICAgICAgICAgICBnZXRQYXlsb2FkPEFjdGlvblR5cGUuU1RBUlRfVFdFRU4+KGFjdGlvbiksXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgYnJlYWtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgQWN0aW9uVHlwZS5TRVRfQ09VTlRFUjoge1xuICAgICAgICAgICAgICBoYW5kbGVTZXRDb3VudGVyKFxuICAgICAgICAgICAgICAgIGVudGl0eSxcbiAgICAgICAgICAgICAgICBnZXRQYXlsb2FkPEFjdGlvblR5cGUuU0VUX0NPVU5URVI+KGFjdGlvbiksXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgYnJlYWtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgQWN0aW9uVHlwZS5JTkNSRU1FTlRfQ09VTlRFUjoge1xuICAgICAgICAgICAgICBoYW5kbGVJbmNyZW1lbnRDb3VudGVyKFxuICAgICAgICAgICAgICAgIGVudGl0eSxcbiAgICAgICAgICAgICAgICBnZXRQYXlsb2FkPEFjdGlvblR5cGUuSU5DUkVNRU5UX0NPVU5URVI+KGFjdGlvbiksXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgYnJlYWtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgQWN0aW9uVHlwZS5ERUNSRUFTRV9DT1VOVEVSOiB7XG4gICAgICAgICAgICAgIGhhbmRsZURlY3JlYXNlQ291bnRlcihcbiAgICAgICAgICAgICAgICBlbnRpdHksXG4gICAgICAgICAgICAgICAgZ2V0UGF5bG9hZDxBY3Rpb25UeXBlLkRFQ1JFQVNFX0NPVU5URVI+KGFjdGlvbiksXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgYnJlYWtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgQWN0aW9uVHlwZS5QTEFZX1NPVU5EOiB7XG4gICAgICAgICAgICAgIGhhbmRsZVBsYXlTb3VuZChlbnRpdHksIGdldFBheWxvYWQ8QWN0aW9uVHlwZS5QTEFZX1NPVU5EPihhY3Rpb24pKVxuICAgICAgICAgICAgICBicmVha1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSBBY3Rpb25UeXBlLlNUT1BfU09VTkQ6IHtcbiAgICAgICAgICAgICAgaGFuZGxlU3RvcFNvdW5kKGVudGl0eSwgZ2V0UGF5bG9hZDxBY3Rpb25UeXBlLlNUT1BfU09VTkQ+KGFjdGlvbikpXG4gICAgICAgICAgICAgIGJyZWFrXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlIEFjdGlvblR5cGUuU0VUX1ZJU0lCSUxJVFk6IHtcbiAgICAgICAgICAgICAgaGFuZGxlU2V0VmlzaWJpbGl0eShcbiAgICAgICAgICAgICAgICBlbnRpdHksXG4gICAgICAgICAgICAgICAgZ2V0UGF5bG9hZDxBY3Rpb25UeXBlLlNFVF9WSVNJQklMSVRZPihhY3Rpb24pLFxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgIGJyZWFrXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlIEFjdGlvblR5cGUuQVRUQUNIX1RPX1BMQVlFUjoge1xuICAgICAgICAgICAgICBoYW5kbGVBdHRhY2hUb1BsYXllcihcbiAgICAgICAgICAgICAgICBlbnRpdHksXG4gICAgICAgICAgICAgICAgZ2V0UGF5bG9hZDxBY3Rpb25UeXBlLkFUVEFDSF9UT19QTEFZRVI+KGFjdGlvbiksXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgYnJlYWtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgQWN0aW9uVHlwZS5ERVRBQ0hfRlJPTV9QTEFZRVI6IHtcbiAgICAgICAgICAgICAgaGFuZGxlRGV0YWNoRnJvbVBsYXllcihcbiAgICAgICAgICAgICAgICBlbnRpdHksXG4gICAgICAgICAgICAgICAgZ2V0UGF5bG9hZDxBY3Rpb25UeXBlLkRFVEFDSF9GUk9NX1BMQVlFUj4oYWN0aW9uKSxcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICBicmVha1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSBBY3Rpb25UeXBlLlBMQVlfVklERU9fU1RSRUFNOiB7XG4gICAgICAgICAgICAgIGhhbmRsZVBsYXlWaWRlbyhcbiAgICAgICAgICAgICAgICBlbnRpdHksXG4gICAgICAgICAgICAgICAgZ2V0UGF5bG9hZDxBY3Rpb25UeXBlLlBMQVlfVklERU9fU1RSRUFNPihhY3Rpb24pLFxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgIGJyZWFrXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlIEFjdGlvblR5cGUuU1RPUF9WSURFT19TVFJFQU06IHtcbiAgICAgICAgICAgICAgaGFuZGxlU3RvcFZpZGVvKFxuICAgICAgICAgICAgICAgIGVudGl0eSxcbiAgICAgICAgICAgICAgICBnZXRQYXlsb2FkPEFjdGlvblR5cGUuU1RPUF9WSURFT19TVFJFQU0+KGFjdGlvbiksXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgYnJlYWtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgQWN0aW9uVHlwZS5QTEFZX0FVRElPX1NUUkVBTToge1xuICAgICAgICAgICAgICBoYW5kbGVQbGF5QXVkaW9TdHJlYW0oXG4gICAgICAgICAgICAgICAgZW50aXR5LFxuICAgICAgICAgICAgICAgIGdldFBheWxvYWQ8QWN0aW9uVHlwZS5QTEFZX0FVRElPX1NUUkVBTT4oYWN0aW9uKSxcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICBicmVha1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSBBY3Rpb25UeXBlLlNUT1BfQVVESU9fU1RSRUFNOiB7XG4gICAgICAgICAgICAgIGhhbmRsZVN0b3BBdWRpb1N0cmVhbShcbiAgICAgICAgICAgICAgICBlbnRpdHksXG4gICAgICAgICAgICAgICAgZ2V0UGF5bG9hZDxBY3Rpb25UeXBlLlNUT1BfQVVESU9fU1RSRUFNPihhY3Rpb24pLFxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgIGJyZWFrXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlIEFjdGlvblR5cGUuVEVMRVBPUlRfUExBWUVSOiB7XG4gICAgICAgICAgICAgIGhhbmRsZVRlbGVwb3J0UGxheWVyKFxuICAgICAgICAgICAgICAgIGVudGl0eSxcbiAgICAgICAgICAgICAgICBnZXRQYXlsb2FkPEFjdGlvblR5cGUuVEVMRVBPUlRfUExBWUVSPihhY3Rpb24pLFxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgIGJyZWFrXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlIEFjdGlvblR5cGUuTU9WRV9QTEFZRVI6IHtcbiAgICAgICAgICAgICAgaGFuZGxlTW92ZVBsYXllcihcbiAgICAgICAgICAgICAgICBlbnRpdHksXG4gICAgICAgICAgICAgICAgZ2V0UGF5bG9hZDxBY3Rpb25UeXBlLk1PVkVfUExBWUVSPihhY3Rpb24pLFxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgIGJyZWFrXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlIEFjdGlvblR5cGUuUExBWV9ERUZBVUxUX0VNT1RFOiB7XG4gICAgICAgICAgICAgIGhhbmRsZVBsYXlEZWZhdWx0RW1vdGUoXG4gICAgICAgICAgICAgICAgZW50aXR5LFxuICAgICAgICAgICAgICAgIGdldFBheWxvYWQ8QWN0aW9uVHlwZS5QTEFZX0RFRkFVTFRfRU1PVEU+KGFjdGlvbiksXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgYnJlYWtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgQWN0aW9uVHlwZS5QTEFZX0NVU1RPTV9FTU9URToge1xuICAgICAgICAgICAgICBoYW5kbGVQbGF5Q3VzdG9tRW1vdGUoXG4gICAgICAgICAgICAgICAgZW50aXR5LFxuICAgICAgICAgICAgICAgIGdldFBheWxvYWQ8QWN0aW9uVHlwZS5QTEFZX0NVU1RPTV9FTU9URT4oYWN0aW9uKSxcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICBicmVha1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSBBY3Rpb25UeXBlLk9QRU5fTElOSzoge1xuICAgICAgICAgICAgICBoYW5kbGVPcGVuTGluayhlbnRpdHksIGdldFBheWxvYWQ8QWN0aW9uVHlwZS5PUEVOX0xJTks+KGFjdGlvbikpXG4gICAgICAgICAgICAgIGJyZWFrXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlIEFjdGlvblR5cGUuU0hPV19URVhUOiB7XG4gICAgICAgICAgICAgIGhhbmRsZVNob3dUZXh0KGVudGl0eSwgZ2V0UGF5bG9hZDxBY3Rpb25UeXBlLlNIT1dfVEVYVD4oYWN0aW9uKSlcbiAgICAgICAgICAgICAgYnJlYWtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgQWN0aW9uVHlwZS5ISURFX1RFWFQ6IHtcbiAgICAgICAgICAgICAgaGFuZGxlSGlkZVRleHQoZW50aXR5LCBnZXRQYXlsb2FkPEFjdGlvblR5cGUuSElERV9URVhUPihhY3Rpb24pKVxuICAgICAgICAgICAgICBicmVha1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSBBY3Rpb25UeXBlLlNUQVJUX0RFTEFZOiB7XG4gICAgICAgICAgICAgIGhhbmRsZVN0YXJ0RGVsYXkoXG4gICAgICAgICAgICAgICAgZW50aXR5LFxuICAgICAgICAgICAgICAgIGdldFBheWxvYWQ8QWN0aW9uVHlwZS5TVEFSVF9ERUxBWT4oYWN0aW9uKSxcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICBicmVha1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSBBY3Rpb25UeXBlLlNUT1BfREVMQVk6IHtcbiAgICAgICAgICAgICAgaGFuZGxlU3RvcERlbGF5KGVudGl0eSwgZ2V0UGF5bG9hZDxBY3Rpb25UeXBlLlNUT1BfREVMQVk+KGFjdGlvbikpXG4gICAgICAgICAgICAgIGJyZWFrXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlIEFjdGlvblR5cGUuU1RBUlRfTE9PUDoge1xuICAgICAgICAgICAgICBoYW5kbGVTdGFydExvb3AoZW50aXR5LCBnZXRQYXlsb2FkPEFjdGlvblR5cGUuU1RBUlRfTE9PUD4oYWN0aW9uKSlcbiAgICAgICAgICAgICAgYnJlYWtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgQWN0aW9uVHlwZS5TVE9QX0xPT1A6IHtcbiAgICAgICAgICAgICAgaGFuZGxlU3RvcExvb3AoZW50aXR5LCBnZXRQYXlsb2FkPEFjdGlvblR5cGUuU1RPUF9MT09QPihhY3Rpb24pKVxuICAgICAgICAgICAgICBicmVha1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSBBY3Rpb25UeXBlLkNMT05FX0VOVElUWToge1xuICAgICAgICAgICAgICBoYW5kbGVDbG9uZUVudGl0eShcbiAgICAgICAgICAgICAgICBlbnRpdHksXG4gICAgICAgICAgICAgICAgZ2V0UGF5bG9hZDxBY3Rpb25UeXBlLkNMT05FX0VOVElUWT4oYWN0aW9uKSxcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICBicmVha1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSBBY3Rpb25UeXBlLlJFTU9WRV9FTlRJVFk6IHtcbiAgICAgICAgICAgICAgaGFuZGxlUmVtb3ZlRW50aXR5KFxuICAgICAgICAgICAgICAgIGVudGl0eSxcbiAgICAgICAgICAgICAgICBnZXRQYXlsb2FkPEFjdGlvblR5cGUuUkVNT1ZFX0VOVElUWT4oYWN0aW9uKSxcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICBicmVha1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSBBY3Rpb25UeXBlLlNIT1dfSU1BR0U6IHtcbiAgICAgICAgICAgICAgaGFuZGxlU2hvd0ltYWdlKGVudGl0eSwgZ2V0UGF5bG9hZDxBY3Rpb25UeXBlLlNIT1dfSU1BR0U+KGFjdGlvbikpXG4gICAgICAgICAgICAgIGJyZWFrXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlIEFjdGlvblR5cGUuSElERV9JTUFHRToge1xuICAgICAgICAgICAgICBoYW5kbGVIaWRlSW1hZ2UoZW50aXR5LCBnZXRQYXlsb2FkPEFjdGlvblR5cGUuSElERV9JTUFHRT4oYWN0aW9uKSlcbiAgICAgICAgICAgICAgYnJlYWtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgIGJyZWFrXG4gICAgICAgICAgfVxuICAgICAgICB9KVxuICAgICAgfVxuXG4gICAgICBpbml0ZWRFbnRpdGllcy5hZGQoZW50aXR5KVxuICAgIH1cbiAgfVxuXG4gIC8vIFBMQVlfQU5JTUFUSU9OXG4gIGZ1bmN0aW9uIGluaXRQbGF5QW5pbWF0aW9uKGVudGl0eTogRW50aXR5KSB7XG4gICAgaWYgKCFBbmltYXRvci5oYXMoZW50aXR5KSkge1xuICAgICAgQW5pbWF0b3IuY3JlYXRlKGVudGl0eSwge1xuICAgICAgICBzdGF0ZXM6IFtdLFxuICAgICAgfSlcbiAgICAgIEFuaW1hdG9yLnN0b3BBbGxBbmltYXRpb25zKGVudGl0eSlcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBoYW5kbGVQbGF5QW5pbWF0aW9uKFxuICAgIGVudGl0eTogRW50aXR5LFxuICAgIHBheWxvYWQ6IEFjdGlvblBheWxvYWQ8QWN0aW9uVHlwZS5QTEFZX0FOSU1BVElPTj4sXG4gICkge1xuICAgIGNvbnN0IHsgYW5pbWF0aW9uLCBsb29wIH0gPSBwYXlsb2FkXG5cbiAgICBjb25zdCBhbmltYXRvciA9IEFuaW1hdG9yLmdldE11dGFibGUoZW50aXR5KVxuICAgIGlmICghYW5pbWF0b3Iuc3RhdGVzLnNvbWUoKCQpID0+ICQuY2xpcCA9PT0gYW5pbWF0aW9uKSkge1xuICAgICAgYW5pbWF0b3Iuc3RhdGVzID0gW1xuICAgICAgICAuLi5hbmltYXRvci5zdGF0ZXMsXG4gICAgICAgIHtcbiAgICAgICAgICBjbGlwOiBhbmltYXRpb24sXG4gICAgICAgIH0sXG4gICAgICBdXG4gICAgfVxuXG4gICAgQW5pbWF0b3Iuc3RvcEFsbEFuaW1hdGlvbnMoZW50aXR5KVxuICAgIGNvbnN0IGNsaXAgPSBBbmltYXRvci5nZXRDbGlwKGVudGl0eSwgYW5pbWF0aW9uKVxuICAgIGNsaXAucGxheWluZyA9IHRydWVcbiAgICBjbGlwLmxvb3AgPSBsb29wID8/IGZhbHNlXG4gIH1cblxuICAvLyBTVE9QX0FOSU1BVElPTlxuICBmdW5jdGlvbiBoYW5kbGVTdG9wQW5pbWF0aW9uKFxuICAgIGVudGl0eTogRW50aXR5LFxuICAgIF9wYXlsb2FkOiBBY3Rpb25QYXlsb2FkPEFjdGlvblR5cGUuU1RPUF9BTklNQVRJT04+LFxuICApIHtcbiAgICBpZiAoQW5pbWF0b3IuaGFzKGVudGl0eSkpIHtcbiAgICAgIEFuaW1hdG9yLnN0b3BBbGxBbmltYXRpb25zKGVudGl0eSlcbiAgICB9XG4gIH1cblxuICAvLyBTRVRfU1RBVEVcbiAgZnVuY3Rpb24gaGFuZGxlU2V0U3RhdGUoXG4gICAgZW50aXR5OiBFbnRpdHksXG4gICAgcGF5bG9hZDogQWN0aW9uUGF5bG9hZDxBY3Rpb25UeXBlLlNFVF9TVEFURT4sXG4gICkge1xuICAgIGNvbnN0IHN0YXRlcyA9IFN0YXRlcy5nZXRNdXRhYmxlT3JOdWxsKGVudGl0eSlcblxuICAgIGlmIChzdGF0ZXMpIHtcbiAgICAgIGxldCBuZXh0U3RhdGU6IHN0cmluZyB8IHVuZGVmaW5lZCA9IHBheWxvYWQuc3RhdGVcbiAgICAgIG5leHRTdGF0ZSA9IGlzVmFsaWRTdGF0ZShzdGF0ZXMsIG5leHRTdGF0ZSlcbiAgICAgICAgPyBuZXh0U3RhdGVcbiAgICAgICAgOiBnZXREZWZhdWx0VmFsdWUoc3RhdGVzKVxuICAgICAgc3RhdGVzLmN1cnJlbnRWYWx1ZSA9IG5leHRTdGF0ZVxuXG4gICAgICBjb25zdCB0cmlnZ2VyRXZlbnRzID0gZ2V0VHJpZ2dlckV2ZW50cyhlbnRpdHkpXG4gICAgICB0cmlnZ2VyRXZlbnRzLmVtaXQoVHJpZ2dlclR5cGUuT05fU1RBVEVfQ0hBTkdFKVxuICAgIH1cbiAgfVxuXG4gIC8vIFNUQVJUX1RXRUVOXG4gIGZ1bmN0aW9uIGhhbmRsZVN0YXJ0VHdlZW4oXG4gICAgZW50aXR5OiBFbnRpdHksXG4gICAgcGF5bG9hZDogQWN0aW9uUGF5bG9hZDxBY3Rpb25UeXBlLlNUQVJUX1RXRUVOPixcbiAgKSB7XG4gICAgaWYgKHBheWxvYWQpIHtcbiAgICAgIGNvbnN0IHRyaWdnZXJFdmVudHMgPSBnZXRUcmlnZ2VyRXZlbnRzKGVudGl0eSlcbiAgICAgIGNvbnN0IG9uVHdlZW5FbmQgPSAoKSA9PiB0cmlnZ2VyRXZlbnRzLmVtaXQoVHJpZ2dlclR5cGUuT05fVFdFRU5fRU5EKVxuXG4gICAgICBzd2l0Y2ggKHBheWxvYWQudHlwZSkge1xuICAgICAgICBjYXNlIFR3ZWVuVHlwZS5NT1ZFX0lURU06IHtcbiAgICAgICAgICBoYW5kbGVNb3ZlSXRlbShlbnRpdHksIHBheWxvYWQsIG9uVHdlZW5FbmQpXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgfVxuICAgICAgICBjYXNlIFR3ZWVuVHlwZS5ST1RBVEVfSVRFTToge1xuICAgICAgICAgIGhhbmRsZVJvdGF0ZUl0ZW0oZW50aXR5LCBwYXlsb2FkLCBvblR3ZWVuRW5kKVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIH1cbiAgICAgICAgY2FzZSBUd2VlblR5cGUuU0NBTEVfSVRFTToge1xuICAgICAgICAgIGhhbmRsZVNjYWxlSXRlbShlbnRpdHksIHBheWxvYWQsIG9uVHdlZW5FbmQpXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgfVxuICAgICAgICBkZWZhdWx0OiB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBVbmtub3duIHR3ZWVuIHR5cGU6ICR7cGF5bG9hZC50eXBlfWApXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvLyBNT1ZFX0lURU1cbiAgZnVuY3Rpb24gaGFuZGxlTW92ZUl0ZW0oXG4gICAgZW50aXR5OiBFbnRpdHksXG4gICAgdHdlZW46IEFjdGlvblBheWxvYWQ8QWN0aW9uVHlwZS5TVEFSVF9UV0VFTj4sXG4gICAgb25Ud2VlbkVuZDogKCkgPT4gdm9pZCxcbiAgKSB7XG4gICAgY29uc3QgdHJhbnNmb3JtID0gVHJhbnNmb3JtLmdldChlbnRpdHkpXG4gICAgY29uc3QgeyBkdXJhdGlvbiwgaW50ZXJwb2xhdGlvblR5cGUsIHJlbGF0aXZlIH0gPSB0d2VlblxuICAgIGNvbnN0IGVuZCA9IFZlY3RvcjMuY3JlYXRlKHR3ZWVuLmVuZC54LCB0d2Vlbi5lbmQueSwgdHdlZW4uZW5kLnopXG4gICAgY29uc3QgZW5kUG9zaXRpb24gPSByZWxhdGl2ZSA/IFZlY3RvcjMuYWRkKHRyYW5zZm9ybS5wb3NpdGlvbiwgZW5kKSA6IGVuZFxuXG4gICAgdHdlZW5zLnN0YXJ0VHJhbnNsYXRpb24oXG4gICAgICBlbnRpdHksXG4gICAgICB0cmFuc2Zvcm0ucG9zaXRpb24sXG4gICAgICBlbmRQb3NpdGlvbixcbiAgICAgIGR1cmF0aW9uLFxuICAgICAgaW50ZXJwb2xhdGlvblR5cGUsXG4gICAgICBvblR3ZWVuRW5kLFxuICAgIClcbiAgfVxuXG4gIC8vIFJPVEFURV9JVEVNXG4gIGZ1bmN0aW9uIGhhbmRsZVJvdGF0ZUl0ZW0oXG4gICAgZW50aXR5OiBFbnRpdHksXG4gICAgdHdlZW46IEFjdGlvblBheWxvYWQ8QWN0aW9uVHlwZS5TVEFSVF9UV0VFTj4sXG4gICAgb25Ud2VlbkVuZDogKCkgPT4gdm9pZCxcbiAgKSB7XG4gICAgY29uc3QgdHJhbnNmb3JtID0gVHJhbnNmb3JtLmdldChlbnRpdHkpXG4gICAgY29uc3QgeyBkdXJhdGlvbiwgaW50ZXJwb2xhdGlvblR5cGUsIHJlbGF0aXZlIH0gPSB0d2VlblxuICAgIGNvbnN0IGVuZCA9IFF1YXRlcm5pb24uZnJvbUV1bGVyRGVncmVlcyhcbiAgICAgIHR3ZWVuLmVuZC54LFxuICAgICAgdHdlZW4uZW5kLnksXG4gICAgICB0d2Vlbi5lbmQueixcbiAgICApXG4gICAgY29uc3QgZW5kUm90YXRpb24gPSByZWxhdGl2ZVxuICAgICAgPyBRdWF0ZXJuaW9uLm11bHRpcGx5KHRyYW5zZm9ybS5yb3RhdGlvbiwgZW5kKVxuICAgICAgOiBlbmRcblxuICAgIHR3ZWVucy5zdGFydFJvdGF0aW9uKFxuICAgICAgZW50aXR5LFxuICAgICAgdHJhbnNmb3JtLnJvdGF0aW9uLFxuICAgICAgZW5kUm90YXRpb24sXG4gICAgICBkdXJhdGlvbixcbiAgICAgIGludGVycG9sYXRpb25UeXBlLFxuICAgICAgb25Ud2VlbkVuZCxcbiAgICApXG4gIH1cblxuICAvLyBTQ0FMRV9JVEVNXG4gIGZ1bmN0aW9uIGhhbmRsZVNjYWxlSXRlbShcbiAgICBlbnRpdHk6IEVudGl0eSxcbiAgICB0d2VlbjogQWN0aW9uUGF5bG9hZDxBY3Rpb25UeXBlLlNUQVJUX1RXRUVOPixcbiAgICBvblR3ZWVuRW5kOiAoKSA9PiB2b2lkLFxuICApIHtcbiAgICBjb25zdCB0cmFuc2Zvcm0gPSBUcmFuc2Zvcm0uZ2V0KGVudGl0eSlcbiAgICBjb25zdCB7IGR1cmF0aW9uLCBpbnRlcnBvbGF0aW9uVHlwZSwgcmVsYXRpdmUgfSA9IHR3ZWVuXG4gICAgY29uc3QgZW5kID0gVmVjdG9yMy5jcmVhdGUodHdlZW4uZW5kLngsIHR3ZWVuLmVuZC55LCB0d2Vlbi5lbmQueilcbiAgICBjb25zdCBlbmRTY2FsZSA9IHJlbGF0aXZlID8gVmVjdG9yMy5hZGQodHJhbnNmb3JtLnNjYWxlLCBlbmQpIDogZW5kXG5cbiAgICB0d2VlbnMuc3RhcnRTY2FsaW5nKFxuICAgICAgZW50aXR5LFxuICAgICAgdHJhbnNmb3JtLnNjYWxlLFxuICAgICAgZW5kU2NhbGUsXG4gICAgICBkdXJhdGlvbixcbiAgICAgIGludGVycG9sYXRpb25UeXBlLFxuICAgICAgb25Ud2VlbkVuZCxcbiAgICApXG4gIH1cblxuICAvLyBTRVRfQ09VTlRFUlxuICBmdW5jdGlvbiBoYW5kbGVTZXRDb3VudGVyKFxuICAgIGVudGl0eTogRW50aXR5LFxuICAgIHBheWxvYWQ6IEFjdGlvblBheWxvYWQ8QWN0aW9uVHlwZS5TRVRfQ09VTlRFUj4sXG4gICkge1xuICAgIGNvbnN0IGNvdW50ZXIgPSBDb3VudGVyLmdldE11dGFibGVPck51bGwoZW50aXR5KVxuXG4gICAgaWYgKGNvdW50ZXIpIHtcbiAgICAgIGNvdW50ZXIudmFsdWUgPSBwYXlsb2FkLmNvdW50ZXJcblxuICAgICAgY29uc3QgdHJpZ2dlckV2ZW50cyA9IGdldFRyaWdnZXJFdmVudHMoZW50aXR5KVxuICAgICAgdHJpZ2dlckV2ZW50cy5lbWl0KFRyaWdnZXJUeXBlLk9OX0NPVU5URVJfQ0hBTkdFKVxuICAgIH1cbiAgfVxuXG4gIC8vIElOQ1JFTUVOVF9DT1VOVEVSXG4gIGZ1bmN0aW9uIGhhbmRsZUluY3JlbWVudENvdW50ZXIoXG4gICAgZW50aXR5OiBFbnRpdHksXG4gICAgX3BheWxvYWQ6IEFjdGlvblBheWxvYWQ8QWN0aW9uVHlwZS5JTkNSRU1FTlRfQ09VTlRFUj4sXG4gICkge1xuICAgIGNvbnN0IGNvdW50ZXIgPSBDb3VudGVyLmdldE11dGFibGVPck51bGwoZW50aXR5KVxuXG4gICAgaWYgKGNvdW50ZXIpIHtcbiAgICAgIGNvdW50ZXIudmFsdWUgKz0gMVxuXG4gICAgICBjb25zdCB0cmlnZ2VyRXZlbnRzID0gZ2V0VHJpZ2dlckV2ZW50cyhlbnRpdHkpXG4gICAgICB0cmlnZ2VyRXZlbnRzLmVtaXQoVHJpZ2dlclR5cGUuT05fQ09VTlRFUl9DSEFOR0UpXG4gICAgfVxuICB9XG5cbiAgLy8gREVDUkVBU0VfQ09VTlRFUlxuICBmdW5jdGlvbiBoYW5kbGVEZWNyZWFzZUNvdW50ZXIoXG4gICAgZW50aXR5OiBFbnRpdHksXG4gICAgX3BheWxvYWQ6IEFjdGlvblBheWxvYWQ8QWN0aW9uVHlwZS5JTkNSRU1FTlRfQ09VTlRFUj4sXG4gICkge1xuICAgIGNvbnN0IGNvdW50ZXIgPSBDb3VudGVyLmdldE11dGFibGVPck51bGwoZW50aXR5KVxuXG4gICAgaWYgKGNvdW50ZXIpIHtcbiAgICAgIGNvdW50ZXIudmFsdWUgLT0gMVxuXG4gICAgICBjb25zdCB0cmlnZ2VyRXZlbnRzID0gZ2V0VHJpZ2dlckV2ZW50cyhlbnRpdHkpXG4gICAgICB0cmlnZ2VyRXZlbnRzLmVtaXQoVHJpZ2dlclR5cGUuT05fQ09VTlRFUl9DSEFOR0UpXG4gICAgfVxuICB9XG5cbiAgLy8gUExBWV9TT1VORFxuICBmdW5jdGlvbiBoYW5kbGVQbGF5U291bmQoXG4gICAgZW50aXR5OiBFbnRpdHksXG4gICAgcGF5bG9hZDogQWN0aW9uUGF5bG9hZDxBY3Rpb25UeXBlLlBMQVlfU09VTkQ+LFxuICApIHtcbiAgICBjb25zdCB7IHNyYywgbG9vcCwgdm9sdW1lIH0gPSBwYXlsb2FkXG4gICAgQXVkaW9Tb3VyY2UuY3JlYXRlT3JSZXBsYWNlKGVudGl0eSwge1xuICAgICAgYXVkaW9DbGlwVXJsOiBzcmMsXG4gICAgICBsb29wLFxuICAgICAgcGxheWluZzogdHJ1ZSxcbiAgICAgIHZvbHVtZTogdm9sdW1lID8/IDEsXG4gICAgfSlcbiAgfVxuXG4gIC8vIFNUT1BfU09VTkRcbiAgZnVuY3Rpb24gaGFuZGxlU3RvcFNvdW5kKFxuICAgIGVudGl0eTogRW50aXR5LFxuICAgIF9wYXlsb2FkOiBBY3Rpb25QYXlsb2FkPEFjdGlvblR5cGUuU1RPUF9TT1VORD4sXG4gICkge1xuICAgIGNvbnN0IGF1ZGlvU291cmNlID0gQXVkaW9Tb3VyY2UuZ2V0TXV0YWJsZU9yTnVsbChlbnRpdHkpXG4gICAgaWYgKGF1ZGlvU291cmNlKSB7XG4gICAgICBhdWRpb1NvdXJjZS5wbGF5aW5nID0gZmFsc2VcbiAgICB9XG4gIH1cblxuICAvLyBTRVRfVklTSUJJTElUWVxuICBmdW5jdGlvbiBoYW5kbGVTZXRWaXNpYmlsaXR5KFxuICAgIGVudGl0eTogRW50aXR5LFxuICAgIHBheWxvYWQ6IEFjdGlvblBheWxvYWQ8QWN0aW9uVHlwZS5TRVRfVklTSUJJTElUWT4sXG4gICkge1xuICAgIGNvbnN0IHsgdmlzaWJsZSwgcGh5c2ljc0NvbGxpZGVyIH0gPSBwYXlsb2FkXG4gICAgVmlzaWJpbGl0eUNvbXBvbmVudC5jcmVhdGVPclJlcGxhY2UoZW50aXR5LCB7IHZpc2libGUgfSlcbiAgICBjb25zdCBnbHRmID0gR2x0ZkNvbnRhaW5lci5nZXRNdXRhYmxlT3JOdWxsKGVudGl0eSlcblxuICAgIGlmIChnbHRmICYmIHBoeXNpY3NDb2xsaWRlciAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBnbHRmLmludmlzaWJsZU1lc2hlc0NvbGxpc2lvbk1hc2sgPSBwaHlzaWNzQ29sbGlkZXIgPyAyIDogMFxuICAgIH1cbiAgfVxuXG4gIC8vIEFUVEFDSF9UT19QTEFZRVJcbiAgZnVuY3Rpb24gaGFuZGxlQXR0YWNoVG9QbGF5ZXIoXG4gICAgZW50aXR5OiBFbnRpdHksXG4gICAgcGF5bG9hZDogQWN0aW9uUGF5bG9hZDxBY3Rpb25UeXBlLkFUVEFDSF9UT19QTEFZRVI+LFxuICApIHtcbiAgICBjb25zdCB7IGFuY2hvclBvaW50SWQgfSA9IHBheWxvYWRcbiAgICBBdmF0YXJBdHRhY2guY3JlYXRlT3JSZXBsYWNlKGVudGl0eSwgeyBhbmNob3JQb2ludElkIH0pXG4gIH1cblxuICAvLyBERVRBQ0hfRlJPTV9QTEFZRVJcbiAgZnVuY3Rpb24gaGFuZGxlRGV0YWNoRnJvbVBsYXllcihcbiAgICBlbnRpdHk6IEVudGl0eSxcbiAgICBfcGF5bG9hZDogQWN0aW9uUGF5bG9hZDxBY3Rpb25UeXBlLkRFVEFDSF9GUk9NX1BMQVlFUj4sXG4gICkge1xuICAgIGlmIChBdmF0YXJBdHRhY2guaGFzKGVudGl0eSkpIHtcbiAgICAgIEF2YXRhckF0dGFjaC5kZWxldGVGcm9tKGVudGl0eSlcbiAgICB9XG4gIH1cblxuICAvLyBURUxFUE9SVCBQTEFZRVJcbiAgZnVuY3Rpb24gaGFuZGxlVGVsZXBvcnRQbGF5ZXIoXG4gICAgX2VudGl0eTogRW50aXR5LFxuICAgIHBheWxvYWQ6IEFjdGlvblBheWxvYWQ8QWN0aW9uVHlwZS5URUxFUE9SVF9QTEFZRVI+LFxuICApIHtcbiAgICBjb25zdCB7IHgsIHkgfSA9IHBheWxvYWRcbiAgICByZXF1ZXN0VGVsZXBvcnQoe1xuICAgICAgZGVzdGluYXRpb246IGAke3h9LCR7eX1gLFxuICAgIH0pXG4gIH1cblxuICAvLyBNT1ZFIFBMQVlFUlxuICBmdW5jdGlvbiBoYW5kbGVNb3ZlUGxheWVyKFxuICAgIF9lbnRpdHk6IEVudGl0eSxcbiAgICBwYXlsb2FkOiBBY3Rpb25QYXlsb2FkPEFjdGlvblR5cGUuTU9WRV9QTEFZRVI+LFxuICApIHtcbiAgICBjb25zdCBvcHRpb25zID0ge1xuICAgICAgbmV3UmVsYXRpdmVQb3NpdGlvbjogcGF5bG9hZC5wb3NpdGlvbixcbiAgICAgIGNhbWVyYVRhcmdldDogcGF5bG9hZC5jYW1lcmFUYXJnZXQsXG4gICAgfVxuICAgIGNvbnNvbGUubG9nKCdtb3ZlUGxheWVyVG8nLCBvcHRpb25zKVxuICAgIHZvaWQgbW92ZVBsYXllclRvKG9wdGlvbnMpXG4gIH1cblxuICAvLyBQTEFZIERFRkFVTFQgRU1PVEVcbiAgZnVuY3Rpb24gaGFuZGxlUGxheURlZmF1bHRFbW90ZShcbiAgICBfZW50aXR5OiBFbnRpdHksXG4gICAgcGF5bG9hZDogQWN0aW9uUGF5bG9hZDxBY3Rpb25UeXBlLlBMQVlfREVGQVVMVF9FTU9URT4sXG4gICkge1xuICAgIGNvbnN0IHsgZW1vdGUgfSA9IHBheWxvYWRcbiAgICB2b2lkIHRyaWdnZXJFbW90ZSh7IHByZWRlZmluZWRFbW90ZTogZW1vdGUgfSlcbiAgfVxuXG4gIC8vIFBMQVkgQ1VTVE9NIEVNT1RFXG4gIGZ1bmN0aW9uIGhhbmRsZVBsYXlDdXN0b21FbW90ZShcbiAgICBfZW50aXR5OiBFbnRpdHksXG4gICAgcGF5bG9hZDogQWN0aW9uUGF5bG9hZDxBY3Rpb25UeXBlLlBMQVlfQ1VTVE9NX0VNT1RFPixcbiAgKSB7XG4gICAgY29uc3QgeyBzcmMsIGxvb3AgfSA9IHBheWxvYWRcbiAgICB2b2lkIHRyaWdnZXJTY2VuZUVtb3RlKHsgc3JjLCBsb29wIH0pXG4gIH1cblxuICAvLyBPUEVOIExJTktcbiAgZnVuY3Rpb24gaGFuZGxlT3BlbkxpbmsoXG4gICAgX2VudGl0eTogRW50aXR5LFxuICAgIHBheWxvYWQ6IEFjdGlvblBheWxvYWQ8QWN0aW9uVHlwZS5PUEVOX0xJTks+LFxuICApIHtcbiAgICBjb25zdCB7IHVybCB9ID0gcGF5bG9hZFxuICAgIHZvaWQgb3BlbkV4dGVybmFsVXJsKHsgdXJsIH0pXG4gIH1cblxuICBhc3luYyBmdW5jdGlvbiBnZXRWaWRlb1NyYyh7XG4gICAgc3JjLFxuICAgIGRjbENhc3QsXG4gIH06IEFjdGlvblBheWxvYWQ8QWN0aW9uVHlwZS5QTEFZX1ZJREVPX1NUUkVBTT4pIHtcbiAgICBpZiAoZGNsQ2FzdCkge1xuICAgICAgY29uc3QgeyBzdHJlYW1zIH0gPSBhd2FpdCBnZXRBY3RpdmVWaWRlb1N0cmVhbXMoe30pXG4gICAgICByZXR1cm4gc3RyZWFtcy5sZW5ndGggPiAwID8gc3RyZWFtc1swXS50cmFja1NpZCA6ICcnXG4gICAgfVxuICAgIHJldHVybiBzcmMgPz8gJydcbiAgfVxuXG4gIC8vIFBMQVlfVklERU9cbiAgZnVuY3Rpb24gaGFuZGxlUGxheVZpZGVvKFxuICAgIGVudGl0eTogRW50aXR5LFxuICAgIHBheWxvYWQ6IEFjdGlvblBheWxvYWQ8QWN0aW9uVHlwZS5QTEFZX1ZJREVPX1NUUkVBTT4sXG4gICkge1xuICAgIC8vIEdldCB0aGUgdmlkZW8gc3JjIGZyb20gYSBwcm9taXNlIChWaWRlbyBGaWxlL1ZpZGVvIFN0cmVhbS9EQ0wgQ2FzdClcbiAgICBnZXRWaWRlb1NyYyhwYXlsb2FkKS50aGVuKChzcmMpID0+IHtcbiAgICAgIGlmICghc3JjKSByZXR1cm5cblxuICAgICAgY29uc3QgdmlkZW9Tb3VyY2UgPSBWaWRlb1BsYXllci5nZXRNdXRhYmxlT3JOdWxsKGVudGl0eSlcblxuICAgICAgaWYgKHZpZGVvU291cmNlKSB7XG4gICAgICAgIHZpZGVvU291cmNlLnNyYyA9IHNyY1xuICAgICAgICB2aWRlb1NvdXJjZS52b2x1bWUgPSBwYXlsb2FkLnZvbHVtZSA/PyAxXG4gICAgICAgIHZpZGVvU291cmNlLmxvb3AgPSBwYXlsb2FkLmxvb3AgPz8gZmFsc2VcbiAgICAgICAgdmlkZW9Tb3VyY2UucGxheWluZyA9IHRydWVcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIFZpZGVvUGxheWVyLmNyZWF0ZU9yUmVwbGFjZShlbnRpdHksIHtcbiAgICAgICAgICBzcmMsXG4gICAgICAgICAgdm9sdW1lOiBwYXlsb2FkLnZvbHVtZSA/PyAxLFxuICAgICAgICAgIGxvb3A6IHBheWxvYWQubG9vcCA/PyBmYWxzZSxcbiAgICAgICAgICBwbGF5aW5nOiB0cnVlLFxuICAgICAgICB9KVxuXG4gICAgICAgIC8vIEluaXQgdmlkZW8gcGxheWVyIG1hdGVyaWFsIHdoZW4gdGhlIGVudGl0eSBkb2Vzbid0IGhhdmUgYSBWaWRlb1BsYXllciBjb21wb25lbnQgZGVmaW5lZFxuICAgICAgICBpbml0VmlkZW9QbGF5ZXJDb21wb25lbnRNYXRlcmlhbChcbiAgICAgICAgICBlbnRpdHksXG4gICAgICAgICAgY29tcG9uZW50cyxcbiAgICAgICAgICBNYXRlcmlhbC5nZXRPck51bGwoZW50aXR5KSxcbiAgICAgICAgKVxuICAgICAgfVxuICAgIH0pXG4gIH1cblxuICAvLyBTVE9QX1ZJREVPXG4gIGZ1bmN0aW9uIGhhbmRsZVN0b3BWaWRlbyhcbiAgICBlbnRpdHk6IEVudGl0eSxcbiAgICBfcGF5bG9hZDogQWN0aW9uUGF5bG9hZDxBY3Rpb25UeXBlLlNUT1BfVklERU9fU1RSRUFNPixcbiAgKSB7XG4gICAgY29uc3QgdmlkZW9Tb3VyY2UgPSBWaWRlb1BsYXllci5nZXRNdXRhYmxlT3JOdWxsKGVudGl0eSlcbiAgICBpZiAodmlkZW9Tb3VyY2UpIHtcbiAgICAgIHZpZGVvU291cmNlLnBsYXlpbmcgPSBmYWxzZVxuICAgIH1cbiAgfVxuXG4gIC8vIFBMQVlfQVVESU9fU1RSRUFNXG4gIGZ1bmN0aW9uIGhhbmRsZVBsYXlBdWRpb1N0cmVhbShcbiAgICBlbnRpdHk6IEVudGl0eSxcbiAgICBwYXlsb2FkOiBBY3Rpb25QYXlsb2FkPEFjdGlvblR5cGUuUExBWV9BVURJT19TVFJFQU0+LFxuICApIHtcbiAgICBjb25zdCB7IHVybCwgdm9sdW1lIH0gPSBwYXlsb2FkXG4gICAgQXVkaW9TdHJlYW0uY3JlYXRlT3JSZXBsYWNlKGVudGl0eSwge1xuICAgICAgdXJsLFxuICAgICAgcGxheWluZzogdHJ1ZSxcbiAgICAgIHZvbHVtZTogdm9sdW1lID8/IDEsXG4gICAgfSlcbiAgfVxuXG4gIC8vIFNUT1BfQVVESU9fU1RSRUFNXG4gIGZ1bmN0aW9uIGhhbmRsZVN0b3BBdWRpb1N0cmVhbShcbiAgICBlbnRpdHk6IEVudGl0eSxcbiAgICBfcGF5bG9hZDogQWN0aW9uUGF5bG9hZDxBY3Rpb25UeXBlLlNUT1BfQVVESU9fU1RSRUFNPixcbiAgKSB7XG4gICAgY29uc3QgYXVkaW9Tb3VyY2UgPSBBdWRpb1N0cmVhbS5nZXRNdXRhYmxlT3JOdWxsKGVudGl0eSlcbiAgICBpZiAoYXVkaW9Tb3VyY2UpIHtcbiAgICAgIGF1ZGlvU291cmNlLnBsYXlpbmcgPSBmYWxzZVxuICAgIH1cbiAgfVxuXG4gIC8vIFNIT1dfVEVYVFxuICBmdW5jdGlvbiBoYW5kbGVTaG93VGV4dChcbiAgICBlbnRpdHk6IEVudGl0eSxcbiAgICBwYXlsb2FkOiBBY3Rpb25QYXlsb2FkPEFjdGlvblR5cGUuU0hPV19URVhUPixcbiAgKSB7XG4gICAgY29uc3QgeyB0ZXh0LCBoaWRlQWZ0ZXJTZWNvbmRzLCBmb250LCBmb250U2l6ZSwgdGV4dEFsaWduIH0gPSBwYXlsb2FkXG4gICAgY29uc3QgdWlUcmFuc2Zvcm1Db21wb25lbnQgPSBnZXRVSVRyYW5zZm9ybShlbnRpdHkpXG4gICAgaWYgKHVpVHJhbnNmb3JtQ29tcG9uZW50KSB7XG4gICAgICBVaVRleHQuY3JlYXRlT3JSZXBsYWNlKGVudGl0eSwge1xuICAgICAgICB2YWx1ZTogdGV4dCxcbiAgICAgICAgZm9udDogZm9udCBhcyB1bmtub3duIGFzIEZvbnQsXG4gICAgICAgIGZvbnRTaXplLFxuICAgICAgICB0ZXh0QWxpZ246IHRleHRBbGlnbiBhcyB1bmtub3duIGFzIFRleHRBbGlnbk1vZGUsXG4gICAgICB9KVxuICAgICAgc3RhcnRUaW1lb3V0KGVudGl0eSwgQWN0aW9uVHlwZS5ISURFX1RFWFQsIGhpZGVBZnRlclNlY29uZHMsICgpID0+XG4gICAgICAgIGhhbmRsZUhpZGVUZXh0KGVudGl0eSwge30pLFxuICAgICAgKVxuICAgIH1cbiAgfVxuXG4gIC8vIEhJREVfVEVYVFxuICBmdW5jdGlvbiBoYW5kbGVIaWRlVGV4dChcbiAgICBlbnRpdHk6IEVudGl0eSxcbiAgICBfcGF5bG9hZDogQWN0aW9uUGF5bG9hZDxBY3Rpb25UeXBlLkhJREVfVEVYVD4sXG4gICkge1xuICAgIGNvbnN0IHVpVGV4dENvbXBvbmVudCA9IFVpVGV4dC5nZXRPck51bGwoZW50aXR5KVxuICAgIGlmICh1aVRleHRDb21wb25lbnQpIHtcbiAgICAgIFVpVGV4dC5kZWxldGVGcm9tKGVudGl0eSlcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBmaW5kQWN0aW9uQnlOYW1lKGVudGl0eTogRW50aXR5LCBuYW1lOiBzdHJpbmcpIHtcbiAgICBjb25zdCBhY3Rpb25zID0gQWN0aW9ucy5nZXRPck51bGwoZW50aXR5KVxuICAgIHJldHVybiBhY3Rpb25zPy52YWx1ZS5maW5kKCgkKSA9PiAkLm5hbWUgPT09IG5hbWUpXG4gIH1cblxuICAvLyBTVEFSVF9ERUxBWVxuICBmdW5jdGlvbiBoYW5kbGVTdGFydERlbGF5KFxuICAgIGVudGl0eTogRW50aXR5LFxuICAgIHBheWxvYWQ6IEFjdGlvblBheWxvYWQ8QWN0aW9uVHlwZS5TVEFSVF9ERUxBWT4sXG4gICkge1xuICAgIGNvbnN0IHsgYWN0aW9ucywgdGltZW91dCB9ID0gcGF5bG9hZFxuICAgIGZvciAoY29uc3QgYWN0aW9uTmFtZSBvZiBhY3Rpb25zKSB7XG4gICAgICBjb25zdCBhY3Rpb24gPSBmaW5kQWN0aW9uQnlOYW1lKGVudGl0eSwgYWN0aW9uTmFtZSlcbiAgICAgIGlmIChhY3Rpb24pIHtcbiAgICAgICAgc3RhcnRUaW1lb3V0KGVudGl0eSwgYWN0aW9uTmFtZSwgdGltZW91dCwgKCkgPT4ge1xuICAgICAgICAgIGNvbnN0IGFjdGlvbkV2ZW50cyA9IGdldEFjdGlvbkV2ZW50cyhlbnRpdHkpXG4gICAgICAgICAgYWN0aW9uRXZlbnRzLmVtaXQoYWN0aW9uLm5hbWUsIGdldFBheWxvYWQoYWN0aW9uKSlcbiAgICAgICAgfSlcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvLyBTVE9QX0RFTEFZXG4gIGZ1bmN0aW9uIGhhbmRsZVN0b3BEZWxheShcbiAgICBlbnRpdHk6IEVudGl0eSxcbiAgICBwYXlsb2FkOiBBY3Rpb25QYXlsb2FkPEFjdGlvblR5cGUuU1RPUF9ERUxBWT4sXG4gICkge1xuICAgIGNvbnN0IHsgYWN0aW9uIH0gPSBwYXlsb2FkXG4gICAgc3RvcFRpbWVvdXQoZW50aXR5LCBhY3Rpb24pXG4gIH1cblxuICAvLyBTVEFSVF9MT09QXG4gIGZ1bmN0aW9uIGhhbmRsZVN0YXJ0TG9vcChcbiAgICBlbnRpdHk6IEVudGl0eSxcbiAgICBwYXlsb2FkOiBBY3Rpb25QYXlsb2FkPEFjdGlvblR5cGUuU1RBUlRfTE9PUD4sXG4gICkge1xuICAgIGNvbnN0IHsgYWN0aW9ucywgaW50ZXJ2YWwgfSA9IHBheWxvYWRcbiAgICBmb3IgKGNvbnN0IGFjdGlvbk5hbWUgb2YgYWN0aW9ucykge1xuICAgICAgY29uc3QgYWN0aW9uID0gZmluZEFjdGlvbkJ5TmFtZShlbnRpdHksIGFjdGlvbk5hbWUpXG4gICAgICBpZiAoYWN0aW9uKSB7XG4gICAgICAgIHN0YXJ0SW50ZXJ2YWwoZW50aXR5LCBhY3Rpb25OYW1lLCBpbnRlcnZhbCwgKCkgPT4ge1xuICAgICAgICAgIGNvbnN0IGFjdGlvbkV2ZW50cyA9IGdldEFjdGlvbkV2ZW50cyhlbnRpdHkpXG4gICAgICAgICAgYWN0aW9uRXZlbnRzLmVtaXQoYWN0aW9uLm5hbWUsIGdldFBheWxvYWQoYWN0aW9uKSlcbiAgICAgICAgfSlcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvLyBTVE9QX0xPT1BcbiAgZnVuY3Rpb24gaGFuZGxlU3RvcExvb3AoXG4gICAgZW50aXR5OiBFbnRpdHksXG4gICAgcGF5bG9hZDogQWN0aW9uUGF5bG9hZDxBY3Rpb25UeXBlLlNUT1BfTE9PUD4sXG4gICkge1xuICAgIGNvbnN0IHsgYWN0aW9uIH0gPSBwYXlsb2FkXG4gICAgc3RvcEludGVydmFsKGVudGl0eSwgYWN0aW9uKVxuICB9XG5cbiAgLy8gQ0xPTkVfRU5USVRZXG4gIGZ1bmN0aW9uIGhhbmRsZUNsb25lRW50aXR5KFxuICAgIGVudGl0eTogRW50aXR5LFxuICAgIHBheWxvYWQ6IEFjdGlvblBheWxvYWQ8QWN0aW9uVHlwZS5DTE9ORV9FTlRJVFk+LFxuICApIHtcbiAgICBjb25zdCB7IHBvc2l0aW9uIH0gPSBwYXlsb2FkXG4gICAgY29uc3QgY2xvbmUgPSBlbmdpbmUuYWRkRW50aXR5KClcblxuICAgIGZvciAoY29uc3QgY29tcG9uZW50IG9mIGVuZ2luZS5jb21wb25lbnRzSXRlcigpKSB7XG4gICAgICBpZiAoY29tcG9uZW50LmhhcyhlbnRpdHkpKSB7XG4gICAgICAgIGNvbnN0IHZhbHVlID0gY29tcG9uZW50LmdldChlbnRpdHkpXG4gICAgICAgIGlmIChpc0xhc3RXcml0ZVdpbkNvbXBvbmVudChjb21wb25lbnQpKSB7XG4gICAgICAgICAgY29tcG9uZW50LmNyZWF0ZU9yUmVwbGFjZShjbG9uZSwgdmFsdWUpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCB0cmFuc2Zvcm0gPSBUcmFuc2Zvcm0uZ2V0T3JDcmVhdGVNdXRhYmxlKGNsb25lKVxuICAgIHRyYW5zZm9ybS5wb3NpdGlvbiA9IHBvc2l0aW9uXG5cbiAgICBjb25zdCB0cmlnZ2VyRXZlbnRzID0gZ2V0VHJpZ2dlckV2ZW50cyhjbG9uZSlcbiAgICB0cmlnZ2VyRXZlbnRzLmVtaXQoVHJpZ2dlclR5cGUuT05fU1BBV04pXG4gICAgdHJpZ2dlckV2ZW50cy5lbWl0KFRyaWdnZXJUeXBlLk9OX0NMT05FKVxuICB9XG5cbiAgLy8gUkVNT1ZFX0VOVElUWVxuICBmdW5jdGlvbiBoYW5kbGVSZW1vdmVFbnRpdHkoXG4gICAgZW50aXR5OiBFbnRpdHksXG4gICAgX3BheWxvYWQ6IEFjdGlvblBheWxvYWQ8QWN0aW9uVHlwZS5SRU1PVkVfRU5USVRZPixcbiAgKSB7XG4gICAgLy8gUmVtb3ZlIGFsbCB0aW1lcnMgYmVmb3JlIHJlbW92ZSB0aGUgZW50aXR5XG4gICAgc3RvcEFsbFRpbWVvdXRzKGVudGl0eSlcbiAgICBzdG9wQWxsSW50ZXJ2YWxzKGVudGl0eSlcbiAgICBlbmdpbmUucmVtb3ZlRW50aXR5KGVudGl0eSlcbiAgfVxuXG4gIGZ1bmN0aW9uIGdldFVpU3RhY2soYWxpZ246IFNjcmVlbkFsaWduTW9kZSkge1xuICAgIGNvbnN0IGtleSA9IGAke2FsaWduLmFsaWduSXRlbXN9LCR7YWxpZ24uanVzdGlmeUNvbnRlbnR9YFxuXG4gICAgaWYgKCF1aVN0YWNrcy5oYXMoa2V5KSkge1xuICAgICAgdWlTdGFja3Muc2V0KGtleSwgZW5naW5lLmFkZEVudGl0eSgpKVxuICAgIH1cblxuICAgIHJldHVybiB1aVN0YWNrcy5nZXQoa2V5KSFcbiAgfVxuXG4gIC8vIFNIT1dfSU1BR0VcbiAgZnVuY3Rpb24gaGFuZGxlU2hvd0ltYWdlKFxuICAgIGVudGl0eTogRW50aXR5LFxuICAgIHBheWxvYWQ6IEFjdGlvblBheWxvYWQ8QWN0aW9uVHlwZS5TSE9XX0lNQUdFPixcbiAgKSB7XG4gICAgY29uc3QgeyBzcmMsIHRleHQsIGhpZGVBZnRlclNlY29uZHMsIGZvbnRTaXplLCBhbGlnbiwgaGVpZ2h0LCB3aWR0aCB9ID1cbiAgICAgIHBheWxvYWRcblxuICAgIC8vIEdldC9DcmVhdGUgYSBVSSB0cmFuc2Zvcm0gZm9yIHRoZSByb290IGVudGl0eVxuICAgIGdldFVJVHJhbnNmb3JtKGVuZ2luZS5Sb290RW50aXR5KVxuXG4gICAgLy8gR2V0IGEgVUkgU3RhY2sgZW50aXR5XG4gICAgY29uc3Qgc2NyZWVuQWxpZ24gPSBtYXBBbGlnblRvU2NyZWVuQWxpZ24oYWxpZ24pXG4gICAgY29uc3QgdWlTdGFjayA9IGdldFVpU3RhY2soc2NyZWVuQWxpZ24pXG5cbiAgICAvLyBUT0RPOiBGaXggaXRlbXMgd3JhcHBpbmdcbiAgICAvLyBHZXQvQ3JlYXRlIGEgVUkgVHJhbnNmb3JtIGZvciB0aGUgVUkgc3RhY2tcbiAgICBjb25zdCB1aVN0YWNrVHJhbnNmb3JtQ29tcG9uZW50ID0gZ2V0VUlUcmFuc2Zvcm0odWlTdGFjaylcbiAgICB1aVN0YWNrVHJhbnNmb3JtQ29tcG9uZW50LmFsaWduSXRlbXMgPSBzY3JlZW5BbGlnbi5hbGlnbkl0ZW1zXG4gICAgdWlTdGFja1RyYW5zZm9ybUNvbXBvbmVudC5qdXN0aWZ5Q29udGVudCA9IHNjcmVlbkFsaWduLmp1c3RpZnlDb250ZW50XG4gICAgdWlTdGFja1RyYW5zZm9ybUNvbXBvbmVudC5wb3NpdGlvblR5cGUgPSBZR1Bvc2l0aW9uVHlwZS5ZR1BUX0FCU09MVVRFXG5cbiAgICAvLyBDcmVhdGUgYSBVSSBlbnRpdHkgYW5kIGEgVHJhbnNmb3JtIGNvbXBvbmVudCBmb3IgdGhlIGltYWdlXG4gICAgY29uc3QgaW1hZ2VFbnRpdHkgPSBlbmdpbmUuYWRkRW50aXR5KClcbiAgICBjb25zdCBpbWFnZVRyYW5zZm9ybUNvbXBvbmVudCA9IGdldFVJVHJhbnNmb3JtKFxuICAgICAgaW1hZ2VFbnRpdHksXG4gICAgICB3aWR0aCxcbiAgICAgIGhlaWdodCxcbiAgICAgIFlHVW5pdC5ZR1VfUE9JTlQsXG4gICAgKVxuICAgIGltYWdlVHJhbnNmb3JtQ29tcG9uZW50LnBhcmVudCA9IHVpU3RhY2tcbiAgICBpbWFnZVRyYW5zZm9ybUNvbXBvbmVudC5wb2ludGVyRmlsdGVyID0gUG9pbnRlckZpbHRlck1vZGUuUEZNX0JMT0NLXG5cbiAgICAvLyBDcmVhdGUgQmFja2dyb3VuZCBDb21wb25lbnRcbiAgICBnZXRVSUJhY2tncm91bmQoaW1hZ2VFbnRpdHksIHNyYylcblxuICAgIGlmICh0ZXh0KSB7XG4gICAgICAvLyBDcmVhdGUgVGV4dCBDb21wb25lbnRcbiAgICAgIC8vIFRPRE86IEZpeCB0ZXh0IHdyYXBwaW5nIGFuZCBzY3JvbGxpbmdcbiAgICAgIGdldFVJVGV4dChpbWFnZUVudGl0eSwgdGV4dCwgZm9udFNpemUsIHdpZHRoKVxuICAgIH1cblxuICAgIHBvaW50ZXJFdmVudHNTeXN0ZW0ub25Qb2ludGVyRG93bihcbiAgICAgIHtcbiAgICAgICAgZW50aXR5OiBpbWFnZUVudGl0eSxcbiAgICAgICAgb3B0czoge1xuICAgICAgICAgIGJ1dHRvbjogSW5wdXRBY3Rpb24uSUFfUE9JTlRFUixcbiAgICAgICAgICBob3ZlclRleHQ6ICdDbGljaycsXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgICAgKCkgPT4ge1xuICAgICAgICBsYXN0VWlFbnRpdHlDbGlja2VkLnNldChlbnRpdHksIGltYWdlRW50aXR5KVxuICAgICAgICBjb25zdCB0cmlnZ2VyRXZlbnRzID0gZ2V0VHJpZ2dlckV2ZW50cyhlbnRpdHkpXG4gICAgICAgIHRyaWdnZXJFdmVudHMuZW1pdChUcmlnZ2VyVHlwZS5PTl9DTElDS19JTUFHRSlcbiAgICAgIH0sXG4gICAgKVxuXG4gICAgaWYgKGhpZGVBZnRlclNlY29uZHMpIHtcbiAgICAgIHN0YXJ0VGltZW91dChlbnRpdHksIEFjdGlvblR5cGUuSElERV9JTUFHRSwgaGlkZUFmdGVyU2Vjb25kcywgKCkgPT5cbiAgICAgICAgaGFuZGxlSGlkZUltYWdlKGVudGl0eSwgeyBpbWFnZUVudGl0eTogaW1hZ2VFbnRpdHkgfSksXG4gICAgICApXG4gICAgfVxuICB9XG5cbiAgLy8gSElERV9JTUFHRVxuICBmdW5jdGlvbiBoYW5kbGVIaWRlSW1hZ2UoXG4gICAgZW50aXR5OiBFbnRpdHksXG4gICAgcGF5bG9hZDogQWN0aW9uUGF5bG9hZDxBY3Rpb25UeXBlLkhJREVfSU1BR0U+LFxuICApIHtcbiAgICBjb25zdCB7IGltYWdlRW50aXR5IH0gPSBwYXlsb2FkXG5cbiAgICBpZiAoaW1hZ2VFbnRpdHkpIHtcbiAgICAgIGVuZ2luZS5yZW1vdmVFbnRpdHkoaW1hZ2VFbnRpdHkgYXMgRW50aXR5KVxuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBjbGlja2VkSW1hZ2UgPSBsYXN0VWlFbnRpdHlDbGlja2VkLmdldChlbnRpdHkpXG4gICAgICBpZiAoY2xpY2tlZEltYWdlKSB7XG4gICAgICAgIGVuZ2luZS5yZW1vdmVFbnRpdHkoY2xpY2tlZEltYWdlKVxuICAgICAgICBsYXN0VWlFbnRpdHlDbGlja2VkLmRlbGV0ZShlbnRpdHkpXG4gICAgICB9XG4gICAgfVxuICB9XG59XG4iXX0=