angular-three-soba 2.1.0 → 2.2.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/abstractions/lib/catmull-rom-line.d.ts +139 -139
- package/abstractions/lib/edges.d.ts +164 -164
- package/abstractions/lib/grid.d.ts +39 -39
- package/abstractions/lib/line.d.ts +8 -7
- package/abstractions/lib/prism-geometry.d.ts +4 -4
- package/abstractions/lib/rounded-box.d.ts +3 -3
- package/abstractions/lib/text-3d.d.ts +46 -46
- package/abstractions/lib/text.d.ts +1 -2
- package/cameras/lib/cube-camera.d.ts +1 -1
- package/cameras/lib/orthographic-camera.d.ts +7 -8
- package/cameras/lib/perspective-camera.d.ts +2 -3
- package/controls/index.d.ts +9 -1
- package/controls/lib/camera-controls.d.ts +1 -1
- package/controls/lib/orbit-controls.d.ts +1 -1
- package/esm2022/abstractions/lib/billboard.mjs +3 -3
- package/esm2022/abstractions/lib/catmull-rom-line.mjs +3 -3
- package/esm2022/abstractions/lib/cubic-bezier-line.mjs +3 -3
- package/esm2022/abstractions/lib/edges.mjs +30 -34
- package/esm2022/abstractions/lib/gradient-texture.mjs +3 -3
- package/esm2022/abstractions/lib/grid.mjs +3 -3
- package/esm2022/abstractions/lib/helper.mjs +18 -20
- package/esm2022/abstractions/lib/line.mjs +25 -28
- package/esm2022/abstractions/lib/prism-geometry.mjs +3 -3
- package/esm2022/abstractions/lib/quadratic-bezier-line.mjs +3 -3
- package/esm2022/abstractions/lib/rounded-box.mjs +11 -17
- package/esm2022/abstractions/lib/text-3d.mjs +14 -17
- package/esm2022/abstractions/lib/text.mjs +11 -16
- package/esm2022/cameras/lib/camera-content.mjs +3 -3
- package/esm2022/cameras/lib/cube-camera.mjs +18 -27
- package/esm2022/cameras/lib/orthographic-camera.mjs +20 -20
- package/esm2022/cameras/lib/perspective-camera.mjs +21 -21
- package/esm2022/controls/index.mjs +6 -2
- package/esm2022/controls/lib/camera-controls.mjs +3 -3
- package/esm2022/controls/lib/orbit-controls.mjs +3 -3
- package/esm2022/controls/lib/scroll-controls.mjs +124 -130
- package/esm2022/gizmos/angular-three-soba-gizmos.mjs +5 -0
- package/esm2022/gizmos/index.mjs +6 -0
- package/esm2022/gizmos/lib/gizmo-helper/gizmo-helper.mjs +187 -0
- package/esm2022/gizmos/lib/gizmo-helper/gizmo-viewcube.mjs +304 -0
- package/esm2022/gizmos/lib/gizmo-helper/gizmo-viewport.mjs +332 -0
- package/esm2022/gizmos/lib/pivot-controls/axis-arrow.mjs +265 -0
- package/esm2022/gizmos/lib/pivot-controls/axis-rotator.mjs +264 -0
- package/esm2022/gizmos/lib/pivot-controls/pivot-controls.mjs +337 -0
- package/esm2022/gizmos/lib/pivot-controls/plane-slider.mjs +266 -0
- package/esm2022/gizmos/lib/pivot-controls/scaling-sphere.mjs +232 -0
- package/esm2022/gizmos/lib/transform-controls.mjs +177 -0
- package/esm2022/loaders/lib/loader.mjs +3 -3
- package/esm2022/materials/lib/custom-shader-material.mjs +8 -12
- package/esm2022/materials/lib/mesh-distort-material.mjs +3 -3
- package/esm2022/materials/lib/mesh-reflector-material.mjs +11 -15
- package/esm2022/materials/lib/mesh-refraction-material.mjs +26 -30
- package/esm2022/materials/lib/mesh-transmission-material.mjs +3 -3
- package/esm2022/materials/lib/mesh-wobble-material.mjs +3 -3
- package/esm2022/materials/lib/point-material.mjs +3 -3
- package/esm2022/misc/lib/bake-shadows.mjs +8 -10
- package/esm2022/misc/lib/computed-attribute.mjs +15 -19
- package/esm2022/misc/lib/decal.mjs +56 -53
- package/esm2022/misc/lib/fbo.mjs +10 -10
- package/esm2022/misc/lib/html/html-content.mjs +62 -67
- package/esm2022/misc/lib/html/html.mjs +3 -3
- package/esm2022/misc/lib/intersect.mjs +6 -9
- package/esm2022/misc/lib/sampler.mjs +48 -42
- package/esm2022/performances/lib/adaptive-dpr.mjs +29 -35
- package/esm2022/performances/lib/adaptive-events.mjs +12 -16
- package/esm2022/performances/lib/detailed.mjs +14 -18
- package/esm2022/performances/lib/instances/instances.mjs +16 -22
- package/esm2022/performances/lib/points/points.mjs +19 -25
- package/esm2022/performances/lib/segments/segments.mjs +11 -14
- package/esm2022/shaders/lib/mesh-refraction-material.mjs +1 -1
- package/esm2022/staging/index.mjs +3 -2
- package/esm2022/staging/lib/accumulative-shadows.mjs +19 -21
- package/esm2022/staging/lib/backdrop.mjs +19 -23
- package/esm2022/staging/lib/bb-anchor.mjs +3 -3
- package/esm2022/staging/lib/bounds.mjs +39 -43
- package/esm2022/staging/lib/camera-shake.mjs +14 -18
- package/esm2022/staging/lib/caustics.mjs +24 -28
- package/esm2022/staging/lib/center.mjs +28 -32
- package/esm2022/staging/lib/contact-shadows.mjs +3 -3
- package/esm2022/staging/lib/environment/environment.mjs +338 -0
- package/esm2022/staging/lib/environment/inject-environment.mjs +184 -0
- package/esm2022/staging/lib/float.mjs +3 -3
- package/esm2022/staging/lib/lightformer.mjs +18 -22
- package/esm2022/staging/lib/mask.mjs +8 -12
- package/esm2022/staging/lib/matcap-texture.mjs +9 -11
- package/esm2022/staging/lib/normal-texture.mjs +9 -11
- package/esm2022/staging/lib/randomized-lights.mjs +9 -13
- package/esm2022/staging/lib/render-texture.mjs +19 -20
- package/esm2022/staging/lib/sky.mjs +3 -3
- package/esm2022/staging/lib/spot-light.mjs +32 -40
- package/esm2022/staging/lib/stage.mjs +13 -17
- package/esm2022/stats/lib/stats.mjs +21 -27
- package/fesm2022/angular-three-soba-abstractions.mjs +119 -138
- package/fesm2022/angular-three-soba-abstractions.mjs.map +1 -1
- package/fesm2022/angular-three-soba-cameras.mjs +57 -64
- package/fesm2022/angular-three-soba-cameras.mjs.map +1 -1
- package/fesm2022/angular-three-soba-controls.mjs +141 -1470
- package/fesm2022/angular-three-soba-controls.mjs.map +1 -1
- package/fesm2022/angular-three-soba-gizmos.mjs +2318 -0
- package/fesm2022/angular-three-soba-gizmos.mjs.map +1 -0
- package/fesm2022/angular-three-soba-loaders.mjs +3 -3
- package/fesm2022/angular-three-soba-materials.mjs +52 -62
- package/fesm2022/angular-three-soba-materials.mjs.map +1 -1
- package/fesm2022/angular-three-soba-misc.mjs +194 -195
- package/fesm2022/angular-three-soba-misc.mjs.map +1 -1
- package/fesm2022/angular-three-soba-performances.mjs +90 -114
- package/fesm2022/angular-three-soba-performances.mjs.map +1 -1
- package/fesm2022/angular-three-soba-shaders.mjs.map +1 -1
- package/fesm2022/angular-three-soba-staging.mjs +427 -430
- package/fesm2022/angular-three-soba-staging.mjs.map +1 -1
- package/fesm2022/angular-three-soba-stats.mjs +20 -26
- package/fesm2022/angular-three-soba-stats.mjs.map +1 -1
- package/gizmos/README.md +3 -0
- package/gizmos/index.d.ts +5 -0
- package/gizmos/lib/gizmo-helper/gizmo-helper.d.ts +45 -0
- package/gizmos/lib/gizmo-helper/gizmo-viewcube.d.ts +74 -0
- package/gizmos/lib/gizmo-helper/gizmo-viewport.d.ts +64 -0
- package/{controls → gizmos}/lib/pivot-controls/pivot-controls.d.ts +1 -1
- package/gizmos/lib/transform-controls.d.ts +50 -0
- package/materials/lib/mesh-transmission-material.d.ts +1 -1
- package/misc/lib/computed-attribute.d.ts +2 -2
- package/misc/lib/decal.d.ts +4 -4
- package/misc/lib/html/html-content.d.ts +6 -6
- package/misc/lib/html/html.d.ts +1 -1
- package/misc/lib/sampler.d.ts +1 -3
- package/package.json +14 -8
- package/performances/lib/instances/instances.d.ts +3 -3
- package/shaders/lib/mesh-refraction-material.d.ts +2 -5
- package/staging/index.d.ts +2 -1
- package/staging/lib/camera-shake.d.ts +0 -1
- package/staging/lib/caustics.d.ts +1 -1
- package/staging/lib/center.d.ts +2 -2
- package/staging/lib/contact-shadows.d.ts +1 -1
- package/staging/lib/{environment.d.ts → environment/environment.d.ts} +20 -49
- package/staging/lib/environment/inject-environment.d.ts +33 -0
- package/staging/lib/lightformer.d.ts +1 -1
- package/staging/lib/mask.d.ts +1 -1
- package/staging/lib/matcap-texture.d.ts +0 -1
- package/staging/lib/normal-texture.d.ts +0 -1
- package/staging/lib/render-texture.d.ts +1 -1
- package/staging/lib/sky.d.ts +1 -1
- package/staging/lib/stage.d.ts +3 -2
- package/esm2022/controls/lib/pivot-controls/axis-arrow.mjs +0 -263
- package/esm2022/controls/lib/pivot-controls/axis-rotator.mjs +0 -264
- package/esm2022/controls/lib/pivot-controls/pivot-controls.mjs +0 -340
- package/esm2022/controls/lib/pivot-controls/plane-slider.mjs +0 -266
- package/esm2022/controls/lib/pivot-controls/scaling-sphere.mjs +0 -232
- package/esm2022/staging/lib/environment.mjs +0 -481
- /package/{controls → gizmos}/lib/pivot-controls/axis-arrow.d.ts +0 -0
- /package/{controls → gizmos}/lib/pivot-controls/axis-rotator.d.ts +0 -0
- /package/{controls → gizmos}/lib/pivot-controls/plane-slider.d.ts +0 -0
- /package/{controls → gizmos}/lib/pivot-controls/scaling-sphere.d.ts +0 -0
|
@@ -1,8 +1,7 @@
|
|
|
1
1
|
import { NgTemplateOutlet } from '@angular/common';
|
|
2
|
-
import { CUSTOM_ELEMENTS_SCHEMA, ChangeDetectionStrategy, Component, Directive, TemplateRef, computed, contentChild, input, } from '@angular/core';
|
|
3
|
-
import { NgtArgs, NgtPortal, NgtPortalContent, extend, getLocalState,
|
|
2
|
+
import { CUSTOM_ELEMENTS_SCHEMA, ChangeDetectionStrategy, Component, Directive, TemplateRef, computed, contentChild, effect, input, } from '@angular/core';
|
|
3
|
+
import { NgtArgs, NgtPortal, NgtPortalContent, extend, getLocalState, injectStore, omit, pick, prepare, } from 'angular-three';
|
|
4
4
|
import { injectFBO } from 'angular-three-soba/misc';
|
|
5
|
-
import { injectAutoEffect } from 'ngxtension/auto-effect';
|
|
6
5
|
import { mergeInputs } from 'ngxtension/inject-inputs';
|
|
7
6
|
import { Group, Object3D, Scene } from 'three';
|
|
8
7
|
import * as i0 from "@angular/core";
|
|
@@ -14,16 +13,14 @@ export class NgtsRenderTextureContainer {
|
|
|
14
13
|
this.frames = input.required();
|
|
15
14
|
this.injector = input.required();
|
|
16
15
|
this.store = injectStore();
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
this.store.state();
|
|
20
|
-
const renderPriority = this.renderPriority();
|
|
16
|
+
effect((onCleanup) => {
|
|
17
|
+
const [renderPriority, { internal }] = [this.renderPriority(), this.store.state()];
|
|
21
18
|
let count = 0;
|
|
22
19
|
let oldAutoClear;
|
|
23
20
|
let oldXrEnabled;
|
|
24
21
|
let oldRenderTarget;
|
|
25
22
|
let oldIsPresenting;
|
|
26
|
-
const
|
|
23
|
+
const cleanup = internal.subscribe(({ gl, scene, camera }) => {
|
|
27
24
|
const [fbo, frames] = [this.fbo(), this.frames()];
|
|
28
25
|
// NOTE: render the frames ^ 2
|
|
29
26
|
// due to some race condition, we want to render double the frames here.
|
|
@@ -43,14 +40,16 @@ export class NgtsRenderTextureContainer {
|
|
|
43
40
|
gl.xr.isPresenting = oldIsPresenting;
|
|
44
41
|
count++;
|
|
45
42
|
}
|
|
46
|
-
},
|
|
47
|
-
|
|
43
|
+
}, renderPriority, this.store);
|
|
44
|
+
onCleanup(() => {
|
|
45
|
+
cleanup();
|
|
46
|
+
});
|
|
48
47
|
});
|
|
49
48
|
}
|
|
50
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.
|
|
51
|
-
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "18.2.
|
|
49
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.4", ngImport: i0, type: NgtsRenderTextureContainer, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
|
|
50
|
+
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "18.2.4", type: NgtsRenderTextureContainer, isStandalone: true, selector: "[ngtsRenderTextureContainer]", inputs: { fbo: { classPropertyName: "fbo", publicName: "fbo", isSignal: true, isRequired: true, transformFunction: null }, renderPriority: { classPropertyName: "renderPriority", publicName: "renderPriority", isSignal: true, isRequired: true, transformFunction: null }, frames: { classPropertyName: "frames", publicName: "frames", isSignal: true, isRequired: true, transformFunction: null }, injector: { classPropertyName: "injector", publicName: "injector", isSignal: true, isRequired: true, transformFunction: null } }, ngImport: i0 }); }
|
|
52
51
|
}
|
|
53
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.
|
|
52
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.4", ngImport: i0, type: NgtsRenderTextureContainer, decorators: [{
|
|
54
53
|
type: Directive,
|
|
55
54
|
args: [{ standalone: true, selector: '[ngtsRenderTextureContainer]' }]
|
|
56
55
|
}], ctorParameters: () => [] });
|
|
@@ -67,10 +66,10 @@ export class NgtsRenderTextureContent {
|
|
|
67
66
|
static ngTemplateContextGuard(_, ctx) {
|
|
68
67
|
return true;
|
|
69
68
|
}
|
|
70
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.
|
|
71
|
-
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.2.
|
|
69
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.4", ngImport: i0, type: NgtsRenderTextureContent, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
|
|
70
|
+
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.2.4", type: NgtsRenderTextureContent, isStandalone: true, selector: "ng-template[renderTextureContent]", ngImport: i0 }); }
|
|
72
71
|
}
|
|
73
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.
|
|
72
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.4", ngImport: i0, type: NgtsRenderTextureContent, decorators: [{
|
|
74
73
|
type: Directive,
|
|
75
74
|
args: [{ selector: 'ng-template[renderTextureContent]', standalone: true }]
|
|
76
75
|
}] });
|
|
@@ -148,8 +147,8 @@ export class NgtsRenderTexture {
|
|
|
148
147
|
onPointerOver() {
|
|
149
148
|
/* noop */
|
|
150
149
|
}
|
|
151
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.
|
|
152
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.2.0", version: "18.2.
|
|
150
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.4", ngImport: i0, type: NgtsRenderTexture, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
151
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.2.0", version: "18.2.4", type: NgtsRenderTexture, isStandalone: true, selector: "ngts-render-texture", inputs: { attach: { classPropertyName: "attach", publicName: "attach", isSignal: true, isRequired: false, transformFunction: null }, options: { classPropertyName: "options", publicName: "options", isSignal: true, isRequired: false, transformFunction: null } }, queries: [{ propertyName: "content", first: true, predicate: NgtsRenderTextureContent, descendants: true, read: TemplateRef, isSignal: true }], ngImport: i0, template: `
|
|
153
152
|
<ngt-portal [container]="virtualScene()" [state]="{ events: { compute: compute(), priority: eventPriority() } }">
|
|
154
153
|
<ng-template portalContent let-injector="injector" let-container="container">
|
|
155
154
|
<ng-container
|
|
@@ -170,7 +169,7 @@ export class NgtsRenderTexture {
|
|
|
170
169
|
<ngt-primitive *args="[fbo().texture]" [attach]="attach()" [parameters]="parameters()" />
|
|
171
170
|
`, isInline: true, dependencies: [{ kind: "component", type: NgtPortal, selector: "ngt-portal", inputs: ["container", "state", "autoRender", "autoRenderPriority"] }, { kind: "directive", type: NgtsRenderTextureContainer, selector: "[ngtsRenderTextureContainer]", inputs: ["fbo", "renderPriority", "frames", "injector"] }, { kind: "directive", type: NgtPortalContent, selector: "ng-template[portalContent]" }, { kind: "directive", type: NgtArgs, selector: "ng-template[args]", inputs: ["args"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
172
171
|
}
|
|
173
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.
|
|
172
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.4", ngImport: i0, type: NgtsRenderTexture, decorators: [{
|
|
174
173
|
type: Component,
|
|
175
174
|
args: [{
|
|
176
175
|
selector: 'ngts-render-texture',
|
|
@@ -200,4 +199,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.0", ngImpor
|
|
|
200
199
|
changeDetection: ChangeDetectionStrategy.OnPush,
|
|
201
200
|
}]
|
|
202
201
|
}] });
|
|
203
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVuZGVyLXRleHR1cmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL3NvYmEvc3RhZ2luZy9zcmMvbGliL3JlbmRlci10ZXh0dXJlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ25ELE9BQU8sRUFDTixzQkFBc0IsRUFDdEIsdUJBQXVCLEVBQ3ZCLFNBQVMsRUFDVCxTQUFTLEVBRVQsV0FBVyxFQUNYLFFBQVEsRUFDUixZQUFZLEVBQ1osS0FBSyxHQUNMLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFDTixPQUFPLEVBR1AsU0FBUyxFQUNULGdCQUFnQixFQUVoQixNQUFNLEVBQ04sYUFBYSxFQUNiLGtCQUFrQixFQUNsQixXQUFXLEVBQ1gsSUFBSSxFQUNKLElBQUksRUFDSixPQUFPLEdBQ1AsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ3BELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQzFELE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUN2RCxPQUFPLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQXFCLE1BQU0sT0FBTyxDQUFDOztBQUVsRSxNQUFNLENBQUMsRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDO0FBMEJsQixNQUFNLE9BQU8sMEJBQTBCO0lBUXRDO1FBUEEsUUFBRyxHQUFHLEtBQUssQ0FBQyxRQUFRLEVBQXFCLENBQUM7UUFDMUMsbUJBQWMsR0FBRyxLQUFLLENBQUMsUUFBUSxFQUFVLENBQUM7UUFDMUMsV0FBTSxHQUFHLEtBQUssQ0FBQyxRQUFRLEVBQVUsQ0FBQztRQUNsQyxhQUFRLEdBQUcsS0FBSyxDQUFDLFFBQVEsRUFBWSxDQUFDO1FBRTlCLFVBQUssR0FBRyxX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QUFDO1FBQzVGLENBQUMsQ0FBQztLQUtGO0lBSEEsYUFBYTtRQUNaLFVBQVU7SUFDWCxDQUFDOzhHQTFFVyxpQkFBaUI7a0dBQWpCLGlCQUFpQix5WEFnQkcsd0JBQXdCLDJCQUFVLFdBQVcsNkNBeENuRTs7Ozs7Ozs7Ozs7Ozs7Ozs7OztFQW1CVCw0REFDUyxTQUFTLDJIQTlGUCwwQkFBMEIsa0lBOEZXLGdCQUFnQix1RUFBRSxPQUFPLGdGQUFFLGdCQUFnQjs7MkZBSWhGLGlCQUFpQjtrQkEzQjdCLFNBQVM7bUJBQUM7b0JBQ1YsUUFBUSxFQUFFLHFCQUFxQjtvQkFDL0IsVUFBVSxFQUFFLElBQUk7b0JBQ2hCLFFBQVEsRUFBRTs7Ozs7Ozs7Ozs7Ozs7Ozs7OztFQW1CVDtvQkFDRCxPQUFPLEVBQUUsQ0FBQyxTQUFTLEVBQUUsMEJBQTBCLEVBQUUsZ0JBQWdCLEVBQUUsT0FBTyxFQUFFLGdCQUFnQixDQUFDO29CQUM3RixPQUFPLEVBQUUsQ0FBQyxzQkFBc0IsQ0FBQztvQkFDakMsZUFBZSxFQUFFLHVCQUF1QixDQUFDLE1BQU07aUJBQy9DIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgTmdUZW1wbGF0ZU91dGxldCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQge1xuXHRDVVNUT01fRUxFTUVOVFNfU0NIRU1BLFxuXHRDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcblx0Q29tcG9uZW50LFxuXHREaXJlY3RpdmUsXG5cdEluamVjdG9yLFxuXHRUZW1wbGF0ZVJlZixcblx0Y29tcHV0ZWQsXG5cdGNvbnRlbnRDaGlsZCxcblx0aW5wdXQsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtcblx0Tmd0QXJncyxcblx0Tmd0QXR0YWNoYWJsZSxcblx0Tmd0Q29tcHV0ZUZ1bmN0aW9uLFxuXHROZ3RQb3J0YWwsXG5cdE5ndFBvcnRhbENvbnRlbnQsXG5cdE5ndFRleHR1cmUsXG5cdGV4dGVuZCxcblx0Z2V0TG9jYWxTdGF0ZSxcblx0aW5qZWN0QmVmb3JlUmVuZGVyLFxuXHRpbmplY3RTdG9yZSxcblx0b21pdCxcblx0cGljayxcblx0cHJlcGFyZSxcbn0gZnJvbSAnYW5ndWxhci10aHJlZSc7XG5pbXBvcnQgeyBpbmplY3RGQk8gfSBmcm9tICdhbmd1bGFyLXRocmVlLXNvYmEvbWlzYyc7XG5pbXBvcnQgeyBpbmplY3RBdXRvRWZmZWN0IH0gZnJvbSAnbmd4dGVuc2lvbi9hdXRvLWVmZmVjdCc7XG5pbXBvcnQgeyBtZXJnZUlucHV0cyB9IGZyb20gJ25neHRlbnNpb24vaW5qZWN0LWlucHV0cyc7XG5pbXBvcnQgeyBHcm91cCwgT2JqZWN0M0QsIFNjZW5lLCBXZWJHTFJlbmRlclRhcmdldCB9IGZyb20gJ3RocmVlJztcblxuZXh0ZW5kKHsgR3JvdXAgfSk7XG5cbmV4cG9ydCBpbnRlcmZhY2UgTmd0c1JlbmRlclRleHR1cmVPcHRpb25zIGV4dGVuZHMgUGFydGlhbDxPbWl0PE5ndFRleHR1cmUsICdhdHRhY2gnPj4ge1xuXHQvKiogT3B0aW9uYWwgd2lkdGggb2YgdGhlIHRleHR1cmUsIGRlZmF1bHRzIHRvIHZpZXdwb3J0IGJvdW5kcyAqL1xuXHR3aWR0aD86IG51bWJlcjtcblx0LyoqIE9wdGlvbmFsIGhlaWdodCBvZiB0aGUgdGV4dHVyZSwgZGVmYXVsdHMgdG8gdmlld3BvcnQgYm91bmRzICovXG5cdGhlaWdodD86IG51bWJlcjtcblx0LyoqIE9wdGlvbmFsIGZibyBzYW1wbGVzICovXG5cdHNhbXBsZXM6IG51bWJlcjtcblx0LyoqIE9wdGlvbmFsIHN0ZW5jaWwgYnVmZmVyLCBkZWZhdWx0cyB0byBmYWxzZSAqL1xuXHRzdGVuY2lsQnVmZmVyOiBib29sZWFuO1xuXHQvKiogT3B0aW9uYWwgZGVwdGggYnVmZmVyLCBkZWZhdWx0cyB0byB0cnVlICovXG5cdGRlcHRoQnVmZmVyOiBib29sZWFuO1xuXHQvKiogT3B0aW9uYWwgZ2VuZXJhdGUgbWlwbWFwcywgZGVmYXVsdHMgdG8gZmFsc2UgKi9cblx0Z2VuZXJhdGVNaXBtYXBzOiBib29sZWFuO1xuXHQvKiogT3B0aW9uYWwgcmVuZGVyIHByaW9yaXR5LCBkZWZhdWx0cyB0byAwICovXG5cdHJlbmRlclByaW9yaXR5OiBudW1iZXI7XG5cdC8qKiBPcHRpb25hbCBldmVudCBwcmlvcml0eSwgZGVmYXVsdHMgdG8gMCAqL1xuXHRldmVudFByaW9yaXR5OiBudW1iZXI7XG5cdC8qKiBPcHRpb25hbCBmcmFtZSBjb3VudCwgZGVmYXVsdHMgdG8gSW5maW5pdHkuIElmIHlvdSBzZXQgaXQgdG8gMSwgaXQgd291bGQgb25seSByZW5kZXIgYSBzaW5nbGUgZnJhbWUsIGV0YyAqL1xuXHRmcmFtZXM6IG51bWJlcjtcblx0LyoqIE9wdGlvbmFsIGV2ZW50IGNvbXB1dGUsIGRlZmF1bHRzIHRvIHVuZGVmaW5lZCAqL1xuXHRjb21wdXRlPzogKGV2ZW50OiBhbnksIHN0YXRlOiBhbnksIHByZXZpb3VzOiBhbnkpID0+IGZhbHNlIHwgdW5kZWZpbmVkO1xufVxuXG5ARGlyZWN0aXZlKHsgc3RhbmRhbG9uZTogdHJ1ZSwgc2VsZWN0b3I6ICdbbmd0c1JlbmRlclRleHR1cmVDb250YWluZXJdJyB9KVxuZXhwb3J0IGNsYXNzIE5ndHNSZW5kZXJUZXh0dXJlQ29udGFpbmVyIHtcblx0ZmJvID0gaW5wdXQucmVxdWlyZWQ8V2ViR0xSZW5kZXJUYXJnZXQ+KCk7XG5cdHJlbmRlclByaW9yaXR5ID0gaW5wdXQucmVxdWlyZWQ8bnVtYmVyPigpO1xuXHRmcmFtZXMgPSBpbnB1dC5yZXF1aXJlZDxudW1iZXI+KCk7XG5cdGluamVjdG9yID0gaW5wdXQucmVxdWlyZWQ8SW5qZWN0b3I+KCk7XG5cblx0cHJpdmF0ZSBzdG9yZSA9IGluamVjdFN0b3JlKCk7XG5cblx0Y29uc3RydWN0b3IoKSB7XG5cdFx0aW5qZWN0QXV0b0VmZmVjdCgpKCgpID0+IHtcblx0XHRcdC8vIHRyYWNrXG5cdFx0XHR0aGlzLnN0b3JlLnN0YXRlKCk7XG5cdFx0XHRjb25zdCByZW5kZXJQcmlvcml0eSA9IHRoaXMucmVuZGVyUHJpb3JpdHkoKTtcblxuXHRcdFx0bGV0IGNvdW50ID0gMDtcblx0XHRcdGxldCBvbGRBdXRvQ2xlYXI6IGJvb2xlYW47XG5cdFx0XHRsZXQgb2xkWHJFbmFibGVkOiBib29sZWFuO1xuXHRcdFx0bGV0IG9sZFJlbmRlclRhcmdldDogV2ViR0xSZW5kZXJUYXJnZXQgfCBudWxsO1xuXHRcdFx0bGV0IG9sZElzUHJlc2VudGluZzogYm9vbGVhbjtcblx0XHRcdGNvbnN0IHN1YiA9IGluamVjdEJlZm9yZVJlbmRlcihcblx0XHRcdFx0KHsgZ2wsIHNjZW5lLCBjYW1lcmEgfSkgPT4ge1xuXHRcdFx0XHRcdGNvbnN0IFtmYm8sIGZyYW1lc10gPSBbdGhpcy5mYm8oKSwgdGhpcy5mcmFtZXMoKV07XG5cdFx0XHRcdFx0Ly8gTk9URTogcmVuZGVyICB0aGUgZnJhbWVzIF4gMlxuXHRcdFx0XHRcdC8vICBkdWUgdG8gc29tZSByYWNlIGNvbmRpdGlvbiwgd2Ugd2FudCB0byByZW5kZXIgZG91YmxlIHRoZSBmcmFtZXMgaGVyZS5cblx0XHRcdFx0XHRpZiAoZnJhbWVzID09PSBJbmZpbml0eSB8fCBjb3VudCA8IGZyYW1lcyAqIGZyYW1lcykge1xuXHRcdFx0XHRcdFx0b2xkQXV0b0NsZWFyID0gZ2wuYXV0b0NsZWFyO1xuXHRcdFx0XHRcdFx0b2xkWHJFbmFibGVkID0gZ2wueHIuZW5hYmxlZDtcblx0XHRcdFx0XHRcdG9sZFJlbmRlclRhcmdldCA9IGdsLmdldFJlbmRlclRhcmdldCgpO1xuXHRcdFx0XHRcdFx0b2xkSXNQcmVzZW50aW5nID0gZ2wueHIuaXNQcmVzZW50aW5nO1xuXHRcdFx0XHRcdFx0Z2wuYXV0b0NsZWFyID0gdHJ1ZTtcblx0XHRcdFx0XHRcdGdsLnhyLmVuYWJsZWQgPSBmYWxzZTtcblx0XHRcdFx0XHRcdGdsLnhyLmlzUHJlc2VudGluZyA9IGZhbHNlO1xuXHRcdFx0XHRcdFx0Z2wuc2V0UmVuZGVyVGFyZ2V0KGZibyk7XG5cdFx0XHRcdFx0XHRnbC5yZW5kZXIoc2NlbmUsIGNhbWVyYSk7XG5cdFx0XHRcdFx0XHRnbC5zZXRSZW5kZXJUYXJnZXQob2xkUmVuZGVyVGFyZ2V0KTtcblx0XHRcdFx0XHRcdGdsLmF1dG9DbGVhciA9IG9sZEF1dG9DbGVhcjtcblx0XHRcdFx0XHRcdGdsLnhyLmVuYWJsZWQgPSBvbGRYckVuYWJsZWQ7XG5cdFx0XHRcdFx0XHRnbC54ci5pc1ByZXNlbnRpbmcgPSBvbGRJc1ByZXNlbnRpbmc7XG5cdFx0XHRcdFx0XHRjb3VudCsrO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSxcblx0XHRcdFx0eyBwcmlvcml0eTogcmVuZGVyUHJpb3JpdHksIGluamVjdG9yOiB0aGlzLmluamVjdG9yKCkgfSxcblx0XHRcdCk7XG5cblx0XHRcdHJldHVybiAoKSA9PiBzdWIoKTtcblx0XHR9KTtcblx0fVxufVxuXG5jb25zdCBkZWZhdWx0T3B0aW9uczogTmd0c1JlbmRlclRleHR1cmVPcHRpb25zID0ge1xuXHRzYW1wbGVzOiA4LFxuXHRyZW5kZXJQcmlvcml0eTogMCxcblx0ZXZlbnRQcmlvcml0eTogMCxcblx0ZnJhbWVzOiBJbmZpbml0eSxcblx0c3RlbmNpbEJ1ZmZlcjogZmFsc2UsXG5cdGRlcHRoQnVmZmVyOiB0cnVlLFxuXHRnZW5lcmF0ZU1pcG1hcHM6IGZhbHNlLFxufTtcblxuQERpcmVjdGl2ZSh7IHNlbGVjdG9yOiAnbmctdGVtcGxhdGVbcmVuZGVyVGV4dHVyZUNvbnRlbnRdJywgc3RhbmRhbG9uZTogdHJ1ZSB9KVxuZXhwb3J0IGNsYXNzIE5ndHNSZW5kZXJUZXh0dXJlQ29udGVudCB7XG5cdHN0YXRpYyBuZ1RlbXBsYXRlQ29udGV4dEd1YXJkKFxuXHRcdF86IE5ndHNSZW5kZXJUZXh0dXJlQ29udGVudCxcblx0XHRjdHg6IHVua25vd24sXG5cdCk6IGN0eCBpcyB7IGNvbnRhaW5lcjogT2JqZWN0M0Q7IGluamVjdG9yOiBJbmplY3RvciB9IHtcblx0XHRyZXR1cm4gdHJ1ZTtcblx0fVxufVxuXG5sZXQgaW5jcmVtZW50SWQgPSAwO1xuXG5AQ29tcG9uZW50KHtcblx0c2VsZWN0b3I6ICduZ3RzLXJlbmRlci10ZXh0dXJlJyxcblx0c3RhbmRhbG9uZTogdHJ1ZSxcblx0dGVtcGxhdGU6IGBcblx0XHQ8bmd0LXBvcnRhbCBbY29udGFpbmVyXT1cInZpcnR1YWxTY2VuZSgpXCIgW3N0YXRlXT1cInsgZXZlbnRzOiB7IGNvbXB1dGU6IGNvbXB1dGUoKSwgcHJpb3JpdHk6IGV2ZW50UHJpb3JpdHkoKSB9IH1cIj5cblx0XHRcdDxuZy10ZW1wbGF0ZSBwb3J0YWxDb250ZW50IGxldC1pbmplY3Rvcj1cImluamVjdG9yXCIgbGV0LWNvbnRhaW5lcj1cImNvbnRhaW5lclwiPlxuXHRcdFx0XHQ8bmctY29udGFpbmVyXG5cdFx0XHRcdFx0bmd0c1JlbmRlclRleHR1cmVDb250YWluZXJcblx0XHRcdFx0XHRbZmJvXT1cImZibygpXCJcblx0XHRcdFx0XHRbcmVuZGVyUHJpb3JpdHldPVwicmVuZGVyUHJpb3JpdHkoKVwiXG5cdFx0XHRcdFx0W2ZyYW1lc109XCJmcmFtZXMoKVwiXG5cdFx0XHRcdFx0W2luamVjdG9yXT1cImluamVjdG9yXCJcblx0XHRcdFx0XHRbbmdUZW1wbGF0ZU91dGxldF09XCJjb250ZW50KClcIlxuXHRcdFx0XHRcdFtuZ1RlbXBsYXRlT3V0bGV0SW5qZWN0b3JdPVwiaW5qZWN0b3JcIlxuXHRcdFx0XHRcdFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7IGNvbnRhaW5lciwgaW5qZWN0b3IgfVwiXG5cdFx0XHRcdD5cblx0XHRcdFx0XHQ8bmd0LWdyb3VwIChwb2ludGVyb3Zlcik9XCJvblBvaW50ZXJPdmVyKClcIiAvPlxuXHRcdFx0XHQ8L25nLWNvbnRhaW5lcj5cblx0XHRcdDwvbmctdGVtcGxhdGU+XG5cdFx0PC9uZ3QtcG9ydGFsPlxuXG5cdFx0PG5ndC1wcmltaXRpdmUgKmFyZ3M9XCJbZmJvKCkudGV4dHVyZV1cIiBbYXR0YWNoXT1cImF0dGFjaCgpXCIgW3BhcmFtZXRlcnNdPVwicGFyYW1ldGVycygpXCIgLz5cblx0YCxcblx0aW1wb3J0czogW05ndFBvcnRhbCwgTmd0c1JlbmRlclRleHR1cmVDb250YWluZXIsIE5ndFBvcnRhbENvbnRlbnQsIE5ndEFyZ3MsIE5nVGVtcGxhdGVPdXRsZXRdLFxuXHRzY2hlbWFzOiBbQ1VTVE9NX0VMRU1FTlRTX1NDSEVNQV0sXG5cdGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxufSlcbmV4cG9ydCBjbGFzcyBOZ3RzUmVuZGVyVGV4dHVyZSB7XG5cdGF0dGFjaCA9IGlucHV0PE5ndEF0dGFjaGFibGU+KCdtYXAnKTtcblx0b3B0aW9ucyA9IGlucHV0KGRlZmF1bHRPcHRpb25zLCB7IHRyYW5zZm9ybTogbWVyZ2VJbnB1dHMoZGVmYXVsdE9wdGlvbnMpIH0pO1xuXHRwYXJhbWV0ZXJzID0gb21pdCh0aGlzLm9wdGlvbnMsIFtcblx0XHQnc2FtcGxlcycsXG5cdFx0J3JlbmRlclByaW9yaXR5Jyxcblx0XHQnZXZlbnRQcmlvcml0eScsXG5cdFx0J2ZyYW1lcycsXG5cdFx0J3N0ZW5jaWxCdWZmZXInLFxuXHRcdCdkZXB0aEJ1ZmZlcicsXG5cdFx0J2dlbmVyYXRlTWlwbWFwcycsXG5cdFx0J2NvbXB1dGUnLFxuXHRcdCd3aWR0aCcsXG5cdFx0J2hlaWdodCcsXG5cdF0pO1xuXG5cdGNvbnRlbnQgPSBjb250ZW50Q2hpbGQucmVxdWlyZWQoTmd0c1JlbmRlclRleHR1cmVDb250ZW50LCB7IHJlYWQ6IFRlbXBsYXRlUmVmIH0pO1xuXG5cdHByaXZhdGUgc3RvcmUgPSBpbmplY3RTdG9yZSgpO1xuXHRwcml2YXRlIHNpemUgPSB0aGlzLnN0b3JlLnNlbGVjdCgnc2l6ZScpO1xuXHRwcml2YXRlIHZpZXdwb3J0ID0gdGhpcy5zdG9yZS5zZWxlY3QoJ3ZpZXdwb3J0Jyk7XG5cblx0cHJpdmF0ZSBmYm9QYXJhbXMgPSBjb21wdXRlZCgoKSA9PiAoe1xuXHRcdHdpZHRoOiAodGhpcy5vcHRpb25zKCkud2lkdGggfHwgdGhpcy5zaXplKCkud2lkdGgpICogdGhpcy52aWV3cG9ydCgpLmRwcixcblx0XHRoZWlnaHQ6ICh0aGlzLm9wdGlvbnMoKS5oZWlnaHQgfHwgdGhpcy5zaXplKCkuaGVpZ2h0KSAqIHRoaXMudmlld3BvcnQoKS5kcHIsXG5cdFx0c2V0dGluZ3M6IHtcblx0XHRcdHNhbXBsZXM6IHRoaXMub3B0aW9ucygpLnNhbXBsZXMsXG5cdFx0XHRkZXB0aEJ1ZmZlcjogdGhpcy5vcHRpb25zKCkuZGVwdGhCdWZmZXIsXG5cdFx0XHRzdGVuY2lsQnVmZmVyOiB0aGlzLm9wdGlvbnMoKS5zdGVuY2lsQnVmZmVyLFxuXHRcdFx0Z2VuZXJhdGVNaXBtYXBzOiB0aGlzLm9wdGlvbnMoKS5nZW5lcmF0ZU1pcG1hcHMsXG5cdFx0fSxcblx0fSkpO1xuXG5cdHJlbmRlclByaW9yaXR5ID0gcGljayh0aGlzLm9wdGlvbnMsICdyZW5kZXJQcmlvcml0eScpO1xuXHRmcmFtZXMgPSBwaWNrKHRoaXMub3B0aW9ucywgJ2ZyYW1lcycpO1xuXHRmYm8gPSBpbmplY3RGQk8odGhpcy5mYm9QYXJhbXMpO1xuXHR2aXJ0dWFsU2NlbmUgPSBjb21wdXRlZCgoKSA9PiB7XG5cdFx0Y29uc3Qgc2NlbmUgPSBwcmVwYXJlKG5ldyBTY2VuZSgpKTtcblx0XHRzY2VuZS5uYW1lID0gYG5ndHMtcmVuZGVyLXRleHR1cmUtdmlydHVhbC1zY2VuZS0ke2luY3JlbWVudElkKyt9YDtcblx0XHRyZXR1cm4gc2NlbmU7XG5cdH0pO1xuXHRldmVudFByaW9yaXR5ID0gcGljayh0aGlzLm9wdGlvbnMsICdldmVudFByaW9yaXR5Jyk7XG5cdGNvbXB1dGUgPSBjb21wdXRlZCgoKSA9PiB0aGlzLm9wdGlvbnMoKS5jb21wdXRlIHx8IHRoaXMudXZDb21wdXRlKTtcblxuXHRwcml2YXRlIHV2Q29tcHV0ZTogTmd0Q29tcHV0ZUZ1bmN0aW9uID0gKGV2ZW50LCByb290LCBwcmV2aW91cykgPT4ge1xuXHRcdGNvbnN0IGZibyA9IHRoaXMuZmJvKCk7XG5cdFx0aWYgKCFmYm8pIHJldHVybjtcblx0XHRjb25zdCBzdGF0ZSA9IHJvb3Quc25hcHNob3Q7XG5cdFx0Y29uc3QgcHJldmlvdXNTdGF0ZSA9IHByZXZpb3VzPy5zbmFwc2hvdDtcblxuXHRcdC8vIFNpbmNlIHRoaXMgaXMgb25seSBhIHRleHR1cmUgaXQgZG9lcyBub3QgaGF2ZSBhbiBlYXN5IHdheSB0byBvYnRhaW4gdGhlIHBhcmVudCwgd2hpY2ggd2Vcblx0XHQvLyBuZWVkIHRvIHRyYW5zZm9ybSBldmVudCBjb29yZGluYXRlcyB0byBsb2NhbCBjb29yZGluYXRlcy4gV2UgdXNlIHIzZiBpbnRlcm5hbHMgdG8gZmluZCB0aGVcblx0XHQvLyBuZXh0IE9iamVjdDNELlxuXHRcdGxldCBwYXJlbnQgPSBnZXRMb2NhbFN0YXRlKGZiby50ZXh0dXJlKT8ucGFyZW50KCk7XG5cdFx0d2hpbGUgKHBhcmVudCAmJiAhKHBhcmVudCBpbnN0YW5jZW9mIE9iamVjdDNEKSkge1xuXHRcdFx0cGFyZW50ID0gZ2V0TG9jYWxTdGF0ZShwYXJlbnQpPy5wYXJlbnQoKTtcblx0XHR9XG5cblx0XHRpZiAoIXBhcmVudCkgcmV0dXJuO1xuXHRcdC8vIEZpcnN0IHdlIGNhbGwgdGhlIHByZXZpb3VzIHN0YXRlLW9uaW9uLWxheWVycyBjb21wdXRlLCB0aGlzIGlzIHdoYXQgbWFrZXMgaXQgcG9zc2libGUgdG8gbmVzdCBwb3J0YWxzXG5cdFx0aWYgKHByZXZpb3VzU3RhdGUgJiYgIXByZXZpb3VzU3RhdGUucmF5Y2FzdGVyLmNhbWVyYSkge1xuXHRcdFx0cHJldmlvdXNTdGF0ZS5ldmVudHMuY29tcHV0ZT8uKGV2ZW50LCBwcmV2aW91cywgcHJldmlvdXMuc25hcHNob3QucHJldmlvdXNSb290KTtcblx0XHR9XG5cdFx0Ly8gV2UgcnVuIGEgcXVpY2sgY2hlY2sgYWdhaW5zdCB0aGUgcGFyZW50LCBpZiBpdCBpc24ndCBoaXQgdGhlcmUncyBubyBuZWVkIHRvIHJheWNhc3QgYXQgYWxsXG5cdFx0Y29uc3QgW2ludGVyc2VjdGlvbl0gPSBwcmV2aW91c1N0YXRlPy5yYXljYXN0ZXIuaW50ZXJzZWN0T2JqZWN0KHBhcmVudCkgfHwgW107XG5cdFx0aWYgKCFpbnRlcnNlY3Rpb24pIHJldHVybjtcblx0XHQvLyBXZSB0YWtlIHRoYXQgaGl0cyB1diBjb29yZHMsIHNldCB1cCB0aGlzIGxheWVycyByYXljYXN0ZXIsIGV0IHZvaWzDoCwgd2UgaGF2ZSByYXljYXN0aW5nIG9uIGFyYml0cmFyeSBzdXJmYWNlc1xuXHRcdGNvbnN0IHV2ID0gaW50ZXJzZWN0aW9uLnV2O1xuXHRcdGlmICghdXYpIHJldHVybjtcblx0XHRzdGF0ZS5yYXljYXN0ZXIuc2V0RnJvbUNhbWVyYShzdGF0ZS5wb2ludGVyLnNldCh1di54ICogMiAtIDEsIHV2LnkgKiAyIC0gMSksIHN0YXRlLmNhbWVyYSk7XG5cdH07XG5cblx0b25Qb2ludGVyT3ZlcigpIHtcblx0XHQvKiBub29wICovXG5cdH1cbn1cbiJdfQ==
|
|
202
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVuZGVyLXRleHR1cmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL3NvYmEvc3RhZ2luZy9zcmMvbGliL3JlbmRlci10ZXh0dXJlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ25ELE9BQU8sRUFDTixzQkFBc0IsRUFDdEIsdUJBQXVCLEVBQ3ZCLFNBQVMsRUFDVCxTQUFTLEVBRVQsV0FBVyxFQUNYLFFBQVEsRUFDUixZQUFZLEVBQ1osTUFBTSxFQUNOLEtBQUssR0FDTCxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQ04sT0FBTyxFQUdQLFNBQVMsRUFDVCxnQkFBZ0IsRUFFaEIsTUFBTSxFQUNOLGFBQWEsRUFDYixXQUFXLEVBQ1gsSUFBSSxFQUNKLElBQUksRUFDSixPQUFPLEdBQ1AsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ3BELE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUN2RCxPQUFPLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQXFCLE1BQU0sT0FBTyxDQUFDOztBQUVsRSxNQUFNLENBQUMsRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDO0FBMEJsQixNQUFNLE9BQU8sMEJBQTBCO0lBUXRDO1FBUEEsUUFBRyxHQUFHLEtBQUssQ0FBQyxRQUFRLEVBQXFCLENBQUM7UUFDMUMsbUJBQWMsR0FBRyxLQUFLLENBQUMsUUFBUSxFQUFVLENBQUM7UUFDMUMsV0FBTSxHQUFHLEtBQUssQ0FBQyxRQUFRLEVBQVUsQ0FBQztRQUNsQyxhQUFRLEdBQUcsS0FBSyxDQUFDLFFBQVEsRUFBWSxDQUFDO1FBRTlCLFVBQUssR0FBRyxXQUFXLEVBQUUsQ0FBQztRQUc3QixNQUFNLENBQUMsQ0FBQyxTQUFTLEVBQUUsRUFB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O0lBSEEsYUFBYTtRQUNaLFVBQVU7SUFDWCxDQUFDOzhHQTFFVyxpQkFBaUI7a0dBQWpCLGlCQUFpQix5WEFnQkcsd0JBQXdCLDJCQUFVLFdBQVcsNkNBeENuRTs7Ozs7Ozs7Ozs7Ozs7Ozs7OztFQW1CVCw0REFDUyxTQUFTLDJIQWhHUCwwQkFBMEIsa0lBZ0dXLGdCQUFnQix1RUFBRSxPQUFPLGdGQUFFLGdCQUFnQjs7MkZBSWhGLGlCQUFpQjtrQkEzQjdCLFNBQVM7bUJBQUM7b0JBQ1YsUUFBUSxFQUFFLHFCQUFxQjtvQkFDL0IsVUFBVSxFQUFFLElBQUk7b0JBQ2hCLFFBQVEsRUFBRTs7Ozs7Ozs7Ozs7Ozs7Ozs7OztFQW1CVDtvQkFDRCxPQUFPLEVBQUUsQ0FBQyxTQUFTLEVBQUUsMEJBQTBCLEVBQUUsZ0JBQWdCLEVBQUUsT0FBTyxFQUFFLGdCQUFnQixDQUFDO29CQUM3RixPQUFPLEVBQUUsQ0FBQyxzQkFBc0IsQ0FBQztvQkFDakMsZUFBZSxFQUFFLHVCQUF1QixDQUFDLE1BQU07aUJBQy9DIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgTmdUZW1wbGF0ZU91dGxldCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQge1xuXHRDVVNUT01fRUxFTUVOVFNfU0NIRU1BLFxuXHRDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcblx0Q29tcG9uZW50LFxuXHREaXJlY3RpdmUsXG5cdEluamVjdG9yLFxuXHRUZW1wbGF0ZVJlZixcblx0Y29tcHV0ZWQsXG5cdGNvbnRlbnRDaGlsZCxcblx0ZWZmZWN0LFxuXHRpbnB1dCxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge1xuXHROZ3RBcmdzLFxuXHROZ3RBdHRhY2hhYmxlLFxuXHROZ3RDb21wdXRlRnVuY3Rpb24sXG5cdE5ndFBvcnRhbCxcblx0Tmd0UG9ydGFsQ29udGVudCxcblx0Tmd0VGV4dHVyZSxcblx0ZXh0ZW5kLFxuXHRnZXRMb2NhbFN0YXRlLFxuXHRpbmplY3RTdG9yZSxcblx0b21pdCxcblx0cGljayxcblx0cHJlcGFyZSxcbn0gZnJvbSAnYW5ndWxhci10aHJlZSc7XG5pbXBvcnQgeyBpbmplY3RGQk8gfSBmcm9tICdhbmd1bGFyLXRocmVlLXNvYmEvbWlzYyc7XG5pbXBvcnQgeyBtZXJnZUlucHV0cyB9IGZyb20gJ25neHRlbnNpb24vaW5qZWN0LWlucHV0cyc7XG5pbXBvcnQgeyBHcm91cCwgT2JqZWN0M0QsIFNjZW5lLCBXZWJHTFJlbmRlclRhcmdldCB9IGZyb20gJ3RocmVlJztcblxuZXh0ZW5kKHsgR3JvdXAgfSk7XG5cbmV4cG9ydCBpbnRlcmZhY2UgTmd0c1JlbmRlclRleHR1cmVPcHRpb25zIGV4dGVuZHMgUGFydGlhbDxPbWl0PE5ndFRleHR1cmUsICdhdHRhY2gnPj4ge1xuXHQvKiogT3B0aW9uYWwgd2lkdGggb2YgdGhlIHRleHR1cmUsIGRlZmF1bHRzIHRvIHZpZXdwb3J0IGJvdW5kcyAqL1xuXHR3aWR0aD86IG51bWJlcjtcblx0LyoqIE9wdGlvbmFsIGhlaWdodCBvZiB0aGUgdGV4dHVyZSwgZGVmYXVsdHMgdG8gdmlld3BvcnQgYm91bmRzICovXG5cdGhlaWdodD86IG51bWJlcjtcblx0LyoqIE9wdGlvbmFsIGZibyBzYW1wbGVzICovXG5cdHNhbXBsZXM6IG51bWJlcjtcblx0LyoqIE9wdGlvbmFsIHN0ZW5jaWwgYnVmZmVyLCBkZWZhdWx0cyB0byBmYWxzZSAqL1xuXHRzdGVuY2lsQnVmZmVyOiBib29sZWFuO1xuXHQvKiogT3B0aW9uYWwgZGVwdGggYnVmZmVyLCBkZWZhdWx0cyB0byB0cnVlICovXG5cdGRlcHRoQnVmZmVyOiBib29sZWFuO1xuXHQvKiogT3B0aW9uYWwgZ2VuZXJhdGUgbWlwbWFwcywgZGVmYXVsdHMgdG8gZmFsc2UgKi9cblx0Z2VuZXJhdGVNaXBtYXBzOiBib29sZWFuO1xuXHQvKiogT3B0aW9uYWwgcmVuZGVyIHByaW9yaXR5LCBkZWZhdWx0cyB0byAwICovXG5cdHJlbmRlclByaW9yaXR5OiBudW1iZXI7XG5cdC8qKiBPcHRpb25hbCBldmVudCBwcmlvcml0eSwgZGVmYXVsdHMgdG8gMCAqL1xuXHRldmVudFByaW9yaXR5OiBudW1iZXI7XG5cdC8qKiBPcHRpb25hbCBmcmFtZSBjb3VudCwgZGVmYXVsdHMgdG8gSW5maW5pdHkuIElmIHlvdSBzZXQgaXQgdG8gMSwgaXQgd291bGQgb25seSByZW5kZXIgYSBzaW5nbGUgZnJhbWUsIGV0YyAqL1xuXHRmcmFtZXM6IG51bWJlcjtcblx0LyoqIE9wdGlvbmFsIGV2ZW50IGNvbXB1dGUsIGRlZmF1bHRzIHRvIHVuZGVmaW5lZCAqL1xuXHRjb21wdXRlPzogKGV2ZW50OiBhbnksIHN0YXRlOiBhbnksIHByZXZpb3VzOiBhbnkpID0+IGZhbHNlIHwgdW5kZWZpbmVkO1xufVxuXG5ARGlyZWN0aXZlKHsgc3RhbmRhbG9uZTogdHJ1ZSwgc2VsZWN0b3I6ICdbbmd0c1JlbmRlclRleHR1cmVDb250YWluZXJdJyB9KVxuZXhwb3J0IGNsYXNzIE5ndHNSZW5kZXJUZXh0dXJlQ29udGFpbmVyIHtcblx0ZmJvID0gaW5wdXQucmVxdWlyZWQ8V2ViR0xSZW5kZXJUYXJnZXQ+KCk7XG5cdHJlbmRlclByaW9yaXR5ID0gaW5wdXQucmVxdWlyZWQ8bnVtYmVyPigpO1xuXHRmcmFtZXMgPSBpbnB1dC5yZXF1aXJlZDxudW1iZXI+KCk7XG5cdGluamVjdG9yID0gaW5wdXQucmVxdWlyZWQ8SW5qZWN0b3I+KCk7XG5cblx0cHJpdmF0ZSBzdG9yZSA9IGluamVjdFN0b3JlKCk7XG5cblx0Y29uc3RydWN0b3IoKSB7XG5cdFx0ZWZmZWN0KChvbkNsZWFudXApID0+IHtcblx0XHRcdGNvbnN0IFtyZW5kZXJQcmlvcml0eSwgeyBpbnRlcm5hbCB9XSA9IFt0aGlzLnJlbmRlclByaW9yaXR5KCksIHRoaXMuc3RvcmUuc3RhdGUoKV07XG5cblx0XHRcdGxldCBjb3VudCA9IDA7XG5cdFx0XHRsZXQgb2xkQXV0b0NsZWFyOiBib29sZWFuO1xuXHRcdFx0bGV0IG9sZFhyRW5hYmxlZDogYm9vbGVhbjtcblx0XHRcdGxldCBvbGRSZW5kZXJUYXJnZXQ6IFdlYkdMUmVuZGVyVGFyZ2V0IHwgbnVsbDtcblx0XHRcdGxldCBvbGRJc1ByZXNlbnRpbmc6IGJvb2xlYW47XG5cblx0XHRcdGNvbnN0IGNsZWFudXAgPSBpbnRlcm5hbC5zdWJzY3JpYmUoXG5cdFx0XHRcdCh7IGdsLCBzY2VuZSwgY2FtZXJhIH0pID0+IHtcblx0XHRcdFx0XHRjb25zdCBbZmJvLCBmcmFtZXNdID0gW3RoaXMuZmJvKCksIHRoaXMuZnJhbWVzKCldO1xuXHRcdFx0XHRcdC8vIE5PVEU6IHJlbmRlciAgdGhlIGZyYW1lcyBeIDJcblx0XHRcdFx0XHQvLyAgZHVlIHRvIHNvbWUgcmFjZSBjb25kaXRpb24sIHdlIHdhbnQgdG8gcmVuZGVyIGRvdWJsZSB0aGUgZnJhbWVzIGhlcmUuXG5cdFx0XHRcdFx0aWYgKGZyYW1lcyA9PT0gSW5maW5pdHkgfHwgY291bnQgPCBmcmFtZXMgKiBmcmFtZXMpIHtcblx0XHRcdFx0XHRcdG9sZEF1dG9DbGVhciA9IGdsLmF1dG9DbGVhcjtcblx0XHRcdFx0XHRcdG9sZFhyRW5hYmxlZCA9IGdsLnhyLmVuYWJsZWQ7XG5cdFx0XHRcdFx0XHRvbGRSZW5kZXJUYXJnZXQgPSBnbC5nZXRSZW5kZXJUYXJnZXQoKTtcblx0XHRcdFx0XHRcdG9sZElzUHJlc2VudGluZyA9IGdsLnhyLmlzUHJlc2VudGluZztcblx0XHRcdFx0XHRcdGdsLmF1dG9DbGVhciA9IHRydWU7XG5cdFx0XHRcdFx0XHRnbC54ci5lbmFibGVkID0gZmFsc2U7XG5cdFx0XHRcdFx0XHRnbC54ci5pc1ByZXNlbnRpbmcgPSBmYWxzZTtcblx0XHRcdFx0XHRcdGdsLnNldFJlbmRlclRhcmdldChmYm8pO1xuXHRcdFx0XHRcdFx0Z2wucmVuZGVyKHNjZW5lLCBjYW1lcmEpO1xuXHRcdFx0XHRcdFx0Z2wuc2V0UmVuZGVyVGFyZ2V0KG9sZFJlbmRlclRhcmdldCk7XG5cdFx0XHRcdFx0XHRnbC5hdXRvQ2xlYXIgPSBvbGRBdXRvQ2xlYXI7XG5cdFx0XHRcdFx0XHRnbC54ci5lbmFibGVkID0gb2xkWHJFbmFibGVkO1xuXHRcdFx0XHRcdFx0Z2wueHIuaXNQcmVzZW50aW5nID0gb2xkSXNQcmVzZW50aW5nO1xuXHRcdFx0XHRcdFx0Y291bnQrKztcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0sXG5cdFx0XHRcdHJlbmRlclByaW9yaXR5LFxuXHRcdFx0XHR0aGlzLnN0b3JlLFxuXHRcdFx0KTtcblxuXHRcdFx0b25DbGVhbnVwKCgpID0+IHtcblx0XHRcdFx0Y2xlYW51cCgpO1xuXHRcdFx0fSk7XG5cdFx0fSk7XG5cdH1cbn1cblxuY29uc3QgZGVmYXVsdE9wdGlvbnM6IE5ndHNSZW5kZXJUZXh0dXJlT3B0aW9ucyA9IHtcblx0c2FtcGxlczogOCxcblx0cmVuZGVyUHJpb3JpdHk6IDAsXG5cdGV2ZW50UHJpb3JpdHk6IDAsXG5cdGZyYW1lczogSW5maW5pdHksXG5cdHN0ZW5jaWxCdWZmZXI6IGZhbHNlLFxuXHRkZXB0aEJ1ZmZlcjogdHJ1ZSxcblx0Z2VuZXJhdGVNaXBtYXBzOiBmYWxzZSxcbn07XG5cbkBEaXJlY3RpdmUoeyBzZWxlY3RvcjogJ25nLXRlbXBsYXRlW3JlbmRlclRleHR1cmVDb250ZW50XScsIHN0YW5kYWxvbmU6IHRydWUgfSlcbmV4cG9ydCBjbGFzcyBOZ3RzUmVuZGVyVGV4dHVyZUNvbnRlbnQge1xuXHRzdGF0aWMgbmdUZW1wbGF0ZUNvbnRleHRHdWFyZChcblx0XHRfOiBOZ3RzUmVuZGVyVGV4dHVyZUNvbnRlbnQsXG5cdFx0Y3R4OiB1bmtub3duLFxuXHQpOiBjdHggaXMgeyBjb250YWluZXI6IE9iamVjdDNEOyBpbmplY3RvcjogSW5qZWN0b3IgfSB7XG5cdFx0cmV0dXJuIHRydWU7XG5cdH1cbn1cblxubGV0IGluY3JlbWVudElkID0gMDtcblxuQENvbXBvbmVudCh7XG5cdHNlbGVjdG9yOiAnbmd0cy1yZW5kZXItdGV4dHVyZScsXG5cdHN0YW5kYWxvbmU6IHRydWUsXG5cdHRlbXBsYXRlOiBgXG5cdFx0PG5ndC1wb3J0YWwgW2NvbnRhaW5lcl09XCJ2aXJ0dWFsU2NlbmUoKVwiIFtzdGF0ZV09XCJ7IGV2ZW50czogeyBjb21wdXRlOiBjb21wdXRlKCksIHByaW9yaXR5OiBldmVudFByaW9yaXR5KCkgfSB9XCI+XG5cdFx0XHQ8bmctdGVtcGxhdGUgcG9ydGFsQ29udGVudCBsZXQtaW5qZWN0b3I9XCJpbmplY3RvclwiIGxldC1jb250YWluZXI9XCJjb250YWluZXJcIj5cblx0XHRcdFx0PG5nLWNvbnRhaW5lclxuXHRcdFx0XHRcdG5ndHNSZW5kZXJUZXh0dXJlQ29udGFpbmVyXG5cdFx0XHRcdFx0W2Zib109XCJmYm8oKVwiXG5cdFx0XHRcdFx0W3JlbmRlclByaW9yaXR5XT1cInJlbmRlclByaW9yaXR5KClcIlxuXHRcdFx0XHRcdFtmcmFtZXNdPVwiZnJhbWVzKClcIlxuXHRcdFx0XHRcdFtpbmplY3Rvcl09XCJpbmplY3RvclwiXG5cdFx0XHRcdFx0W25nVGVtcGxhdGVPdXRsZXRdPVwiY29udGVudCgpXCJcblx0XHRcdFx0XHRbbmdUZW1wbGF0ZU91dGxldEluamVjdG9yXT1cImluamVjdG9yXCJcblx0XHRcdFx0XHRbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwieyBjb250YWluZXIsIGluamVjdG9yIH1cIlxuXHRcdFx0XHQ+XG5cdFx0XHRcdFx0PG5ndC1ncm91cCAocG9pbnRlcm92ZXIpPVwib25Qb2ludGVyT3ZlcigpXCIgLz5cblx0XHRcdFx0PC9uZy1jb250YWluZXI+XG5cdFx0XHQ8L25nLXRlbXBsYXRlPlxuXHRcdDwvbmd0LXBvcnRhbD5cblxuXHRcdDxuZ3QtcHJpbWl0aXZlICphcmdzPVwiW2ZibygpLnRleHR1cmVdXCIgW2F0dGFjaF09XCJhdHRhY2goKVwiIFtwYXJhbWV0ZXJzXT1cInBhcmFtZXRlcnMoKVwiIC8+XG5cdGAsXG5cdGltcG9ydHM6IFtOZ3RQb3J0YWwsIE5ndHNSZW5kZXJUZXh0dXJlQ29udGFpbmVyLCBOZ3RQb3J0YWxDb250ZW50LCBOZ3RBcmdzLCBOZ1RlbXBsYXRlT3V0bGV0XSxcblx0c2NoZW1hczogW0NVU1RPTV9FTEVNRU5UU19TQ0hFTUFdLFxuXHRjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbn0pXG5leHBvcnQgY2xhc3MgTmd0c1JlbmRlclRleHR1cmUge1xuXHRhdHRhY2ggPSBpbnB1dDxOZ3RBdHRhY2hhYmxlPignbWFwJyk7XG5cdG9wdGlvbnMgPSBpbnB1dChkZWZhdWx0T3B0aW9ucywgeyB0cmFuc2Zvcm06IG1lcmdlSW5wdXRzKGRlZmF1bHRPcHRpb25zKSB9KTtcblx0cGFyYW1ldGVycyA9IG9taXQodGhpcy5vcHRpb25zLCBbXG5cdFx0J3NhbXBsZXMnLFxuXHRcdCdyZW5kZXJQcmlvcml0eScsXG5cdFx0J2V2ZW50UHJpb3JpdHknLFxuXHRcdCdmcmFtZXMnLFxuXHRcdCdzdGVuY2lsQnVmZmVyJyxcblx0XHQnZGVwdGhCdWZmZXInLFxuXHRcdCdnZW5lcmF0ZU1pcG1hcHMnLFxuXHRcdCdjb21wdXRlJyxcblx0XHQnd2lkdGgnLFxuXHRcdCdoZWlnaHQnLFxuXHRdKTtcblxuXHRjb250ZW50ID0gY29udGVudENoaWxkLnJlcXVpcmVkKE5ndHNSZW5kZXJUZXh0dXJlQ29udGVudCwgeyByZWFkOiBUZW1wbGF0ZVJlZiB9KTtcblxuXHRwcml2YXRlIHN0b3JlID0gaW5qZWN0U3RvcmUoKTtcblx0cHJpdmF0ZSBzaXplID0gdGhpcy5zdG9yZS5zZWxlY3QoJ3NpemUnKTtcblx0cHJpdmF0ZSB2aWV3cG9ydCA9IHRoaXMuc3RvcmUuc2VsZWN0KCd2aWV3cG9ydCcpO1xuXG5cdHByaXZhdGUgZmJvUGFyYW1zID0gY29tcHV0ZWQoKCkgPT4gKHtcblx0XHR3aWR0aDogKHRoaXMub3B0aW9ucygpLndpZHRoIHx8IHRoaXMuc2l6ZSgpLndpZHRoKSAqIHRoaXMudmlld3BvcnQoKS5kcHIsXG5cdFx0aGVpZ2h0OiAodGhpcy5vcHRpb25zKCkuaGVpZ2h0IHx8IHRoaXMuc2l6ZSgpLmhlaWdodCkgKiB0aGlzLnZpZXdwb3J0KCkuZHByLFxuXHRcdHNldHRpbmdzOiB7XG5cdFx0XHRzYW1wbGVzOiB0aGlzLm9wdGlvbnMoKS5zYW1wbGVzLFxuXHRcdFx0ZGVwdGhCdWZmZXI6IHRoaXMub3B0aW9ucygpLmRlcHRoQnVmZmVyLFxuXHRcdFx0c3RlbmNpbEJ1ZmZlcjogdGhpcy5vcHRpb25zKCkuc3RlbmNpbEJ1ZmZlcixcblx0XHRcdGdlbmVyYXRlTWlwbWFwczogdGhpcy5vcHRpb25zKCkuZ2VuZXJhdGVNaXBtYXBzLFxuXHRcdH0sXG5cdH0pKTtcblxuXHRyZW5kZXJQcmlvcml0eSA9IHBpY2sodGhpcy5vcHRpb25zLCAncmVuZGVyUHJpb3JpdHknKTtcblx0ZnJhbWVzID0gcGljayh0aGlzLm9wdGlvbnMsICdmcmFtZXMnKTtcblx0ZmJvID0gaW5qZWN0RkJPKHRoaXMuZmJvUGFyYW1zKTtcblx0dmlydHVhbFNjZW5lID0gY29tcHV0ZWQoKCkgPT4ge1xuXHRcdGNvbnN0IHNjZW5lID0gcHJlcGFyZShuZXcgU2NlbmUoKSk7XG5cdFx0c2NlbmUubmFtZSA9IGBuZ3RzLXJlbmRlci10ZXh0dXJlLXZpcnR1YWwtc2NlbmUtJHtpbmNyZW1lbnRJZCsrfWA7XG5cdFx0cmV0dXJuIHNjZW5lO1xuXHR9KTtcblx0ZXZlbnRQcmlvcml0eSA9IHBpY2sodGhpcy5vcHRpb25zLCAnZXZlbnRQcmlvcml0eScpO1xuXHRjb21wdXRlID0gY29tcHV0ZWQoKCkgPT4gdGhpcy5vcHRpb25zKCkuY29tcHV0ZSB8fCB0aGlzLnV2Q29tcHV0ZSk7XG5cblx0cHJpdmF0ZSB1dkNvbXB1dGU6IE5ndENvbXB1dGVGdW5jdGlvbiA9IChldmVudCwgcm9vdCwgcHJldmlvdXMpID0+IHtcblx0XHRjb25zdCBmYm8gPSB0aGlzLmZibygpO1xuXHRcdGlmICghZmJvKSByZXR1cm47XG5cdFx0Y29uc3Qgc3RhdGUgPSByb290LnNuYXBzaG90O1xuXHRcdGNvbnN0IHByZXZpb3VzU3RhdGUgPSBwcmV2aW91cz8uc25hcHNob3Q7XG5cblx0XHQvLyBTaW5jZSB0aGlzIGlzIG9ubHkgYSB0ZXh0dXJlIGl0IGRvZXMgbm90IGhhdmUgYW4gZWFzeSB3YXkgdG8gb2J0YWluIHRoZSBwYXJlbnQsIHdoaWNoIHdlXG5cdFx0Ly8gbmVlZCB0byB0cmFuc2Zvcm0gZXZlbnQgY29vcmRpbmF0ZXMgdG8gbG9jYWwgY29vcmRpbmF0ZXMuIFdlIHVzZSByM2YgaW50ZXJuYWxzIHRvIGZpbmQgdGhlXG5cdFx0Ly8gbmV4dCBPYmplY3QzRC5cblx0XHRsZXQgcGFyZW50ID0gZ2V0TG9jYWxTdGF0ZShmYm8udGV4dHVyZSk/LnBhcmVudCgpO1xuXHRcdHdoaWxlIChwYXJlbnQgJiYgIShwYXJlbnQgaW5zdGFuY2VvZiBPYmplY3QzRCkpIHtcblx0XHRcdHBhcmVudCA9IGdldExvY2FsU3RhdGUocGFyZW50KT8ucGFyZW50KCk7XG5cdFx0fVxuXG5cdFx0aWYgKCFwYXJlbnQpIHJldHVybjtcblx0XHQvLyBGaXJzdCB3ZSBjYWxsIHRoZSBwcmV2aW91cyBzdGF0ZS1vbmlvbi1sYXllcnMgY29tcHV0ZSwgdGhpcyBpcyB3aGF0IG1ha2VzIGl0IHBvc3NpYmxlIHRvIG5lc3QgcG9ydGFsc1xuXHRcdGlmIChwcmV2aW91c1N0YXRlICYmICFwcmV2aW91c1N0YXRlLnJheWNhc3Rlci5jYW1lcmEpIHtcblx0XHRcdHByZXZpb3VzU3RhdGUuZXZlbnRzLmNvbXB1dGU/LihldmVudCwgcHJldmlvdXMsIHByZXZpb3VzLnNuYXBzaG90LnByZXZpb3VzUm9vdCk7XG5cdFx0fVxuXHRcdC8vIFdlIHJ1biBhIHF1aWNrIGNoZWNrIGFnYWluc3QgdGhlIHBhcmVudCwgaWYgaXQgaXNuJ3QgaGl0IHRoZXJlJ3Mgbm8gbmVlZCB0byByYXljYXN0IGF0IGFsbFxuXHRcdGNvbnN0IFtpbnRlcnNlY3Rpb25dID0gcHJldmlvdXNTdGF0ZT8ucmF5Y2FzdGVyLmludGVyc2VjdE9iamVjdChwYXJlbnQpIHx8IFtdO1xuXHRcdGlmICghaW50ZXJzZWN0aW9uKSByZXR1cm47XG5cdFx0Ly8gV2UgdGFrZSB0aGF0IGhpdHMgdXYgY29vcmRzLCBzZXQgdXAgdGhpcyBsYXllcnMgcmF5Y2FzdGVyLCBldCB2b2lsw6AsIHdlIGhhdmUgcmF5Y2FzdGluZyBvbiBhcmJpdHJhcnkgc3VyZmFjZXNcblx0XHRjb25zdCB1diA9IGludGVyc2VjdGlvbi51djtcblx0XHRpZiAoIXV2KSByZXR1cm47XG5cdFx0c3RhdGUucmF5Y2FzdGVyLnNldEZyb21DYW1lcmEoc3RhdGUucG9pbnRlci5zZXQodXYueCAqIDIgLSAxLCB1di55ICogMiAtIDEpLCBzdGF0ZS5jYW1lcmEpO1xuXHR9O1xuXG5cdG9uUG9pbnRlck92ZXIoKSB7XG5cdFx0Lyogbm9vcCAqL1xuXHR9XG59XG4iXX0=
|
|
@@ -51,8 +51,8 @@ export class NgtsSky {
|
|
|
51
51
|
});
|
|
52
52
|
this.sky = new Sky();
|
|
53
53
|
}
|
|
54
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.
|
|
55
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "18.2.
|
|
54
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.4", ngImport: i0, type: NgtsSky, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
55
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "18.2.4", type: NgtsSky, isStandalone: true, selector: "ngts-sky", inputs: { options: { classPropertyName: "options", publicName: "options", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: `
|
|
56
56
|
<ngt-primitive *args="[sky]" [parameters]="parameters()" [scale]="scale()">
|
|
57
57
|
<ngt-value attach="material.uniforms.mieCoefficient.value" [rawValue]="mieCoefficient()" />
|
|
58
58
|
<ngt-value attach="material.uniforms.mieDirectionalG.value" [rawValue]="mieDirectionalG()" />
|
|
@@ -63,7 +63,7 @@ export class NgtsSky {
|
|
|
63
63
|
</ngt-primitive>
|
|
64
64
|
`, isInline: true, dependencies: [{ kind: "directive", type: NgtArgs, selector: "ng-template[args]", inputs: ["args"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
65
65
|
}
|
|
66
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.
|
|
66
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.4", ngImport: i0, type: NgtsSky, decorators: [{
|
|
67
67
|
type: Component,
|
|
68
68
|
args: [{
|
|
69
69
|
selector: 'ngts-sky',
|
|
@@ -1,9 +1,8 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { ChangeDetectionStrategy, Component, computed, CUSTOM_ELEMENTS_SCHEMA, effect, inject, input, viewChild, } from '@angular/core';
|
|
2
2
|
import { extend, injectBeforeRender, injectStore, NgtArgs, omit, pick } from 'angular-three';
|
|
3
3
|
import { NgtsHelper } from 'angular-three-soba/abstractions';
|
|
4
4
|
import { SpotLightMaterial } from 'angular-three-soba/vanilla-exports';
|
|
5
5
|
import { assertInjector } from 'ngxtension/assert-injector';
|
|
6
|
-
import { injectAutoEffect } from 'ngxtension/auto-effect';
|
|
7
6
|
import { mergeInputs } from 'ngxtension/inject-inputs';
|
|
8
7
|
import { CylinderGeometry, DoubleSide, Group, Matrix4, Mesh, MeshBasicMaterial, PlaneGeometry, RepeatWrapping, RGBAFormat, ShaderMaterial, SpotLight, SpotLightHelper, Vector3, WebGLRenderTarget, } from 'three';
|
|
9
8
|
import { FullScreenQuad } from 'three-stdlib';
|
|
@@ -56,8 +55,8 @@ export class NgtsVolumetricMesh {
|
|
|
56
55
|
}
|
|
57
56
|
});
|
|
58
57
|
}
|
|
59
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.
|
|
60
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.2.0", version: "18.2.
|
|
58
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.4", ngImport: i0, type: NgtsVolumetricMesh, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
59
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.2.0", version: "18.2.4", type: NgtsVolumetricMesh, isStandalone: true, selector: "ngts-volumetric-mesh", inputs: { options: { classPropertyName: "options", publicName: "options", isSignal: true, isRequired: false, transformFunction: null } }, viewQueries: [{ propertyName: "meshRef", first: true, predicate: ["mesh"], descendants: true, isSignal: true }], ngImport: i0, template: `
|
|
61
60
|
<ngt-mesh #mesh [geometry]="geometry()" [raycast]="null">
|
|
62
61
|
<ngt-primitive *args="[material]" attach="material">
|
|
63
62
|
<ngt-value attach="uniforms.opacity.value" [rawValue]="opacity()" />
|
|
@@ -75,7 +74,7 @@ export class NgtsVolumetricMesh {
|
|
|
75
74
|
</ngt-mesh>
|
|
76
75
|
`, isInline: true, dependencies: [{ kind: "directive", type: NgtArgs, selector: "ng-template[args]", inputs: ["args"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
77
76
|
}
|
|
78
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.
|
|
77
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.4", ngImport: i0, type: NgtsVolumetricMesh, decorators: [{
|
|
79
78
|
type: Component,
|
|
80
79
|
args: [{
|
|
81
80
|
selector: 'ngts-volumetric-mesh',
|
|
@@ -188,25 +187,21 @@ export class NgtsSpotLightShadowShader {
|
|
|
188
187
|
uTime: { value: 0 },
|
|
189
188
|
};
|
|
190
189
|
extend({ Mesh, PlaneGeometry, MeshBasicMaterial });
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
return () => {
|
|
201
|
-
fsQuad.material.dispose();
|
|
202
|
-
fsQuad.dispose();
|
|
203
|
-
};
|
|
190
|
+
injectSpotLightCommon(this.spotLight.spotLight, this.mesh, this.width, this.height, this.distance);
|
|
191
|
+
effect(() => {
|
|
192
|
+
this.uniforms.uShadowMap.value = this.map();
|
|
193
|
+
});
|
|
194
|
+
effect((onCleanup) => {
|
|
195
|
+
const fsQuad = this.fsQuad();
|
|
196
|
+
onCleanup(() => {
|
|
197
|
+
fsQuad.material.dispose();
|
|
198
|
+
fsQuad.dispose();
|
|
204
199
|
});
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
200
|
+
});
|
|
201
|
+
effect((onCleanup) => {
|
|
202
|
+
const renderTarget = this.renderTarget();
|
|
203
|
+
onCleanup(() => {
|
|
204
|
+
renderTarget.dispose();
|
|
210
205
|
});
|
|
211
206
|
});
|
|
212
207
|
injectBeforeRender(({ gl, delta }) => {
|
|
@@ -216,8 +211,8 @@ export class NgtsSpotLightShadowShader {
|
|
|
216
211
|
gl.setRenderTarget(null);
|
|
217
212
|
});
|
|
218
213
|
}
|
|
219
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.
|
|
220
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.2.0", version: "18.2.
|
|
214
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.4", ngImport: i0, type: NgtsSpotLightShadowShader, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
215
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.2.0", version: "18.2.4", type: NgtsSpotLightShadowShader, isStandalone: true, selector: "ngts-spot-light-shadow-shader", inputs: { shader: { classPropertyName: "shader", publicName: "shader", isSignal: true, isRequired: true, transformFunction: null }, options: { classPropertyName: "options", publicName: "options", isSignal: true, isRequired: false, transformFunction: null } }, viewQueries: [{ propertyName: "mesh", first: true, predicate: ["mesh"], descendants: true, isSignal: true }], ngImport: i0, template: `
|
|
221
216
|
<ngt-mesh #mesh [scale]="scale()" [castShadow]="true">
|
|
222
217
|
<ngt-plane-geometry />
|
|
223
218
|
<ngt-mesh-basic-material
|
|
@@ -232,7 +227,7 @@ export class NgtsSpotLightShadowShader {
|
|
|
232
227
|
</ngt-mesh>
|
|
233
228
|
`, isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
234
229
|
}
|
|
235
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.
|
|
230
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.4", ngImport: i0, type: NgtsSpotLightShadowShader, decorators: [{
|
|
236
231
|
type: Component,
|
|
237
232
|
args: [{
|
|
238
233
|
selector: 'ngts-spot-light-shadow-shader',
|
|
@@ -275,13 +270,10 @@ export class NgtsSpotLightShadowNoShader {
|
|
|
275
270
|
this.height = pick(this.options, 'height');
|
|
276
271
|
this.distance = pick(this.options, 'distance');
|
|
277
272
|
extend({ Mesh, PlaneGeometry, MeshBasicMaterial });
|
|
278
|
-
|
|
279
|
-
afterNextRender(() => {
|
|
280
|
-
injectSpotLightCommon(this.spotLight.spotLight, this.mesh, this.width, this.height, this.distance, injector);
|
|
281
|
-
});
|
|
273
|
+
injectSpotLightCommon(this.spotLight.spotLight, this.mesh, this.width, this.height, this.distance);
|
|
282
274
|
}
|
|
283
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.
|
|
284
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.2.0", version: "18.2.
|
|
275
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.4", ngImport: i0, type: NgtsSpotLightShadowNoShader, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
276
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.2.0", version: "18.2.4", type: NgtsSpotLightShadowNoShader, isStandalone: true, selector: "ngts-spot-light-shadow-no-shader", inputs: { options: { classPropertyName: "options", publicName: "options", isSignal: true, isRequired: false, transformFunction: null } }, viewQueries: [{ propertyName: "mesh", first: true, predicate: ["mesh"], descendants: true, isSignal: true }], ngImport: i0, template: `
|
|
285
277
|
<ngt-mesh #mesh [scale]="scale()" [castShadow]="true">
|
|
286
278
|
<ngt-plane-geometry />
|
|
287
279
|
<ngt-mesh-basic-material
|
|
@@ -296,7 +288,7 @@ export class NgtsSpotLightShadowNoShader {
|
|
|
296
288
|
</ngt-mesh>
|
|
297
289
|
`, isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
298
290
|
}
|
|
299
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.
|
|
291
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.4", ngImport: i0, type: NgtsSpotLightShadowNoShader, decorators: [{
|
|
300
292
|
type: Component,
|
|
301
293
|
args: [{
|
|
302
294
|
selector: 'ngts-spot-light-shadow-no-shader',
|
|
@@ -324,8 +316,8 @@ export class NgtsSpotLightShadow {
|
|
|
324
316
|
this.shader = input();
|
|
325
317
|
this.options = input(defaultSpotLightShadowOptions, { transform: mergeInputs(defaultSpotLightShadowOptions) });
|
|
326
318
|
}
|
|
327
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.
|
|
328
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.
|
|
319
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.4", ngImport: i0, type: NgtsSpotLightShadow, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
320
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.4", type: NgtsSpotLightShadow, isStandalone: true, selector: "ngts-spot-light-shadow", inputs: { shader: { classPropertyName: "shader", publicName: "shader", isSignal: true, isRequired: false, transformFunction: null }, options: { classPropertyName: "options", publicName: "options", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: `
|
|
329
321
|
@if (shader(); as shader) {
|
|
330
322
|
<ngts-spot-light-shadow-shader [shader]="shader" [options]="options()" />
|
|
331
323
|
} @else {
|
|
@@ -333,7 +325,7 @@ export class NgtsSpotLightShadow {
|
|
|
333
325
|
}
|
|
334
326
|
`, isInline: true, dependencies: [{ kind: "component", type: NgtsSpotLightShadowShader, selector: "ngts-spot-light-shadow-shader", inputs: ["shader", "options"] }, { kind: "component", type: NgtsSpotLightShadowNoShader, selector: "ngts-spot-light-shadow-no-shader", inputs: ["options"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
335
327
|
}
|
|
336
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.
|
|
328
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.4", ngImport: i0, type: NgtsSpotLightShadow, decorators: [{
|
|
337
329
|
type: Component,
|
|
338
330
|
args: [{
|
|
339
331
|
selector: 'ngts-spot-light-shadow',
|
|
@@ -396,8 +388,8 @@ export class NgtsSpotLight {
|
|
|
396
388
|
this.volumetric = pick(this.options, 'volumetric');
|
|
397
389
|
extend({ Group, SpotLight });
|
|
398
390
|
}
|
|
399
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.
|
|
400
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.
|
|
391
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.4", ngImport: i0, type: NgtsSpotLight, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
392
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.4", type: NgtsSpotLight, isStandalone: true, selector: "ngts-spot-light", inputs: { options: { classPropertyName: "options", publicName: "options", isSignal: true, isRequired: false, transformFunction: null } }, viewQueries: [{ propertyName: "spotLight", first: true, predicate: ["spotLight"], descendants: true, isSignal: true }], ngImport: i0, template: `
|
|
401
393
|
<ngt-group>
|
|
402
394
|
<ngt-spot-light
|
|
403
395
|
#spotLight
|
|
@@ -419,7 +411,7 @@ export class NgtsSpotLight {
|
|
|
419
411
|
</ngt-group>
|
|
420
412
|
`, isInline: true, dependencies: [{ kind: "component", type: NgtsVolumetricMesh, selector: "ngts-volumetric-mesh", inputs: ["options"] }, { kind: "component", type: NgtsHelper, selector: "ngts-helper", inputs: ["type", "options"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
421
413
|
}
|
|
422
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.
|
|
414
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.4", ngImport: i0, type: NgtsSpotLight, decorators: [{
|
|
423
415
|
type: Component,
|
|
424
416
|
args: [{
|
|
425
417
|
selector: 'ngts-spot-light',
|
|
@@ -450,4 +442,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.0", ngImpor
|
|
|
450
442
|
imports: [NgtArgs, NgtsVolumetricMesh, NgtsHelper],
|
|
451
443
|
}]
|
|
452
444
|
}], ctorParameters: () => [] });
|
|
453
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3BvdC1saWdodC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvc29iYS9zdGFnaW5nL3NyYy9saWIvc3BvdC1saWdodC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ04sZUFBZSxFQUNmLHVCQUF1QixFQUN2QixTQUFTLEVBQ1QsUUFBUSxFQUNSLHNCQUFzQixFQUN0QixNQUFNLEVBRU4sTUFBTSxFQUNOLFFBQVEsRUFDUixLQUFLLEVBQ0wsU0FBUyxHQUNULE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxNQUFNLEVBQUUsa0JBQWtCLEVBQUUsV0FBVyxFQUFFLE9BQU8sRUFBZ0IsSUFBSSxFQUFFLElBQUksRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzRyxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFDN0QsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sb0NBQW9DLENBQUM7QUFDdkUsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQzVELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQzFELE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUN2RCxPQUFPLEVBRU4sZ0JBQWdCLEVBRWhCLFVBQVUsRUFDVixLQUFLLEVBQ0wsT0FBTyxFQUNQLElBQUksRUFDSixpQkFBaUIsRUFFakIsYUFBYSxFQUNiLGNBQWMsRUFDZCxVQUFVLEVBQ1YsY0FBYyxFQUNkLFNBQVMsRUFDVCxlQUFlLEVBRWYsT0FBTyxFQUNQLGlCQUFpQixHQUNqQixNQUFNLE9BQU8sQ0FBQztBQUNmLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxjQUFjLENBQUM7O0FBRTlDLFNBQVMsV0FBVyxDQUFDLEtBQXNCO0lBQzFDLE9BQVEsS0FBbUIsRUFBRSxXQUFXLENBQUM7QUFDMUMsQ0FBQztBQWdCRCxNQUFNLDRC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U0FBUyxFQUFFLENBQUMsQ0FBQztJQUM5QixDQUFDOzhHQXhDVyxhQUFhO2tHQUFiLGFBQWEsNlVBekJmOzs7Ozs7Ozs7Ozs7Ozs7Ozs7OztFQW9CVCw0REFuVlcsa0JBQWtCLHNGQXNWUyxVQUFVOzsyRkFFckMsYUFBYTtrQkE1QnpCLFNBQVM7bUJBQUM7b0JBQ1YsUUFBUSxFQUFFLGlCQUFpQjtvQkFDM0IsVUFBVSxFQUFFLElBQUk7b0JBQ2hCLFFBQVEsRUFBRTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7RUFvQlQ7b0JBQ0QsT0FBTyxFQUFFLENBQUMsc0JBQXNCLENBQUM7b0JBQ2pDLGVBQWUsRUFBRSx1QkFBdUIsQ0FBQyxNQUFNO29CQUMvQyxPQUFPLEVBQUUsQ0FBQyxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsVUFBVSxDQUFDO2lCQUNsRCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG5cdGFmdGVyTmV4dFJlbmRlcixcblx0Q2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG5cdENvbXBvbmVudCxcblx0Y29tcHV0ZWQsXG5cdENVU1RPTV9FTEVNRU5UU19TQ0hFTUEsXG5cdGVmZmVjdCxcblx0RWxlbWVudFJlZixcblx0aW5qZWN0LFxuXHRJbmplY3Rvcixcblx0aW5wdXQsXG5cdHZpZXdDaGlsZCxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBleHRlbmQsIGluamVjdEJlZm9yZVJlbmRlciwgaW5qZWN0U3RvcmUsIE5ndEFyZ3MsIE5ndFNwb3RMaWdodCwgb21pdCwgcGljayB9IGZyb20gJ2FuZ3VsYXItdGhyZWUnO1xuaW1wb3J0IHsgTmd0c0hlbHBlciB9IGZyb20gJ2FuZ3VsYXItdGhyZWUtc29iYS9hYnN0cmFjdGlvbnMnO1xuaW1wb3J0IHsgU3BvdExpZ2h0TWF0ZXJpYWwgfSBmcm9tICdhbmd1bGFyLXRocmVlLXNvYmEvdmFuaWxsYS1leHBvcnRzJztcbmltcG9ydCB7IGFzc2VydEluamVjdG9yIH0gZnJvbSAnbmd4dGVuc2lvbi9hc3NlcnQtaW5qZWN0b3InO1xuaW1wb3J0IHsgaW5qZWN0QXV0b0VmZmVjdCB9IGZyb20gJ25neHRlbnNpb24vYXV0by1lZmZlY3QnO1xuaW1wb3J0IHsgbWVyZ2VJbnB1dHMgfSBmcm9tICduZ3h0ZW5zaW9uL2luamVjdC1pbnB1dHMnO1xuaW1wb3J0IHtcblx0Q29sb3JSZXByZXNlbnRhdGlvbixcblx0Q3lsaW5kZXJHZW9tZXRyeSxcblx0RGVwdGhUZXh0dXJlLFxuXHREb3VibGVTaWRlLFxuXHRHcm91cCxcblx0TWF0cml4NCxcblx0TWVzaCxcblx0TWVzaEJhc2ljTWF0ZXJpYWwsXG5cdE9iamVjdDNELFxuXHRQbGFuZUdlb21ldHJ5LFxuXHRSZXBlYXRXcmFwcGluZyxcblx0UkdCQUZvcm1hdCxcblx0U2hhZGVyTWF0ZXJpYWwsXG5cdFNwb3RMaWdodCxcblx0U3BvdExpZ2h0SGVscGVyLFxuXHRUZXh0dXJlLFxuXHRWZWN0b3IzLFxuXHRXZWJHTFJlbmRlclRhcmdldCxcbn0gZnJvbSAndGhyZWUnO1xuaW1wb3J0IHsgRnVsbFNjcmVlblF1YWQgfSBmcm9tICd0aHJlZS1zdGRsaWInO1xuXG5mdW5jdGlvbiBpc1Nwb3RMaWdodChjaGlsZDogT2JqZWN0M0QgfCBudWxsKTogY2hpbGQgaXMgU3BvdExpZ2h0IHtcblx0cmV0dXJuIChjaGlsZCBhcyBTcG90TGlnaHQpPy5pc1Nwb3RMaWdodDtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBOZ3RzU3BvdExpZ2h0T3B0aW9ucyBleHRlbmRzIFBhcnRpYWw8Tmd0U3BvdExpZ2h0PiB7XG5cdGRlcHRoQnVmZmVyPzogRGVwdGhUZXh0dXJlO1xuXHRhdHRlbnVhdGlvbj86IG51bWJlcjtcblx0YW5nbGVQb3dlcj86IG51bWJlcjtcblx0cmFkaXVzVG9wPzogbnVtYmVyO1xuXHRyYWRpdXNCb3R0b20/OiBudW1iZXI7XG5cdG9wYWNpdHk/OiBudW1iZXI7XG5cdGNvbG9yPzogQ29sb3JSZXByZXNlbnRhdGlvbjtcblx0dm9sdW1ldHJpYz86IGJvb2xlYW47XG5cdGRlYnVnPzogYm9vbGVhbjtcbn1cblxuZXhwb3J0IHR5cGUgTmd0c1ZvbHVtZXRyaWNNZXNoT3B0aW9ucyA9IE9taXQ8Tmd0c1Nwb3RMaWdodE9wdGlvbnMsICd2b2x1bWV0cmljJz47XG5cbmNvbnN0IGRlZmF1bHRWb2x1bWV0cmljTWVzaE9wdGlvbnM6IE5ndHNWb2x1bWV0cmljTWVzaE9wdGlvbnMgPSB7XG5cdG9wYWNpdHk6IDEsXG5cdGRpc3RhbmNlOiA1LFxuXHRhbmdsZTogMC4xNSxcblx0YXR0ZW51YXRpb246IDUsXG5cdGFuZ2xlUG93ZXI6IDUsXG5cdGNvbG9yOiAnd2hpdGUnLFxufTtcblxuQENvbXBvbmVudCh7XG5cdHNlbGVjdG9yOiAnbmd0cy12b2x1bWV0cmljLW1lc2gnLFxuXHRzdGFuZGFsb25lOiB0cnVlLFxuXHR0ZW1wbGF0ZTogYFxuXHRcdDxuZ3QtbWVzaCAjbWVzaCBbZ2VvbWV0cnldPVwiZ2VvbWV0cnkoKVwiIFtyYXljYXN0XT1cIm51bGxcIj5cblx0XHRcdDxuZ3QtcHJpbWl0aXZlICphcmdzPVwiW21hdGVyaWFsXVwiIGF0dGFjaD1cIm1hdGVyaWFsXCI+XG5cdFx0XHRcdDxuZ3QtdmFsdWUgYXR0YWNoPVwidW5pZm9ybXMub3BhY2l0eS52YWx1ZVwiIFtyYXdWYWx1ZV09XCJvcGFjaXR5KClcIiAvPlxuXHRcdFx0XHQ8bmd0LXZhbHVlIGF0dGFjaD1cInVuaWZvcm1zLmxpZ2h0Q29sb3IudmFsdWVcIiBbcmF3VmFsdWVdPVwiY29sb3IoKVwiIC8+XG5cdFx0XHRcdDxuZ3QtdmFsdWUgYXR0YWNoPVwidW5pZm9ybXMuYXR0ZW51YXRpb24udmFsdWVcIiBbcmF3VmFsdWVdPVwiYXR0ZW51YXRpb24oKVwiIC8+XG5cdFx0XHRcdDxuZ3QtdmFsdWUgYXR0YWNoPVwidW5pZm9ybXMuYW5nbGVQb3dlci52YWx1ZVwiIFtyYXdWYWx1ZV09XCJhbmdsZVBvd2VyKClcIiAvPlxuXHRcdFx0XHQ8bmd0LXZhbHVlIGF0dGFjaD1cInVuaWZvcm1zLmRlcHRoLnZhbHVlXCIgW3Jhd1ZhbHVlXT1cImRlcHRoQnVmZmVyKClcIiAvPlxuXHRcdFx0XHQ8bmd0LXZhbHVlIGF0dGFjaD1cInVuaWZvcm1zLmNhbWVyYU5lYXIudmFsdWVcIiBbcmF3VmFsdWVdPVwiY2FtZXJhKCkubmVhclwiIC8+XG5cdFx0XHRcdDxuZ3QtdmFsdWUgYXR0YWNoPVwidW5pZm9ybXMuY2FtZXJhRmFyLnZhbHVlXCIgW3Jhd1ZhbHVlXT1cImNhbWVyYSgpLmZhclwiIC8+XG5cdFx0XHRcdDxuZ3QtdmFsdWVcblx0XHRcdFx0XHRhdHRhY2g9XCJ1bmlmb3Jtcy5yZXNvbHV0aW9uLnZhbHVlXCJcblx0XHRcdFx0XHRbcmF3VmFsdWVdPVwiZGVwdGhCdWZmZXIoKSA/IFtzaXplKCkud2lkdGggKiBkcHIoKSwgc2l6ZSgpLmhlaWdodCAqIGRwcigpXSA6IFswLCAwXVwiXG5cdFx0XHRcdC8+XG5cdFx0XHQ8L25ndC1wcmltaXRpdmU+XG5cdFx0PC9uZ3QtbWVzaD5cblx0YCxcblx0c2NoZW1hczogW0NVU1RPTV9FTEVNRU5UU19TQ0hFTUFdLFxuXHRjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcblx0aW1wb3J0czogW05ndEFyZ3NdLFxufSlcbmV4cG9ydCBjbGFzcyBOZ3RzVm9sdW1ldHJpY01lc2gge1xuXHRvcHRpb25zID0gaW5wdXQoZGVmYXVsdFZvbHVtZXRyaWNNZXNoT3B0aW9ucywgeyB0cmFuc2Zvcm06IG1lcmdlSW5wdXRzKGRlZmF1bHRWb2x1bWV0cmljTWVzaE9wdGlvbnMpIH0pO1xuXG5cdG1lc2hSZWYgPSB2aWV3Q2hpbGQucmVxdWlyZWQ8RWxlbWVudFJlZjxNZXNoPj4oJ21lc2gnKTtcblxuXHRwcml2YXRlIHN0b3JlID0gaW5qZWN0U3RvcmUoKTtcblx0c2l6ZSA9IHRoaXMuc3RvcmUuc2VsZWN0KCdzaXplJyk7XG5cdGRwciA9IHRoaXMuc3RvcmUuc2VsZWN0KCd2aWV3cG9ydCcsICdkcHInKTtcblx0Y2FtZXJhID0gdGhpcy5zdG9yZS5zZWxlY3QoJ2NhbWVyYScpO1xuXG5cdHByaXZhdGUgcmFkaXVzVG9wID0gcGljayh0aGlzLm9wdGlvbnMsICdyYWRpdXNUb3AnKTtcblx0cHJpdmF0ZSByYWRpdXNCb3R0b20gPSBwaWNrKHRoaXMub3B0aW9ucywgJ3JhZGl1c0JvdHRvbScpO1xuXHRwcml2YXRlIGFuZ2xlID0gcGljayh0aGlzLm9wdGlvbnMsICdhbmdsZScpO1xuXHRwcml2YXRlIGRpc3RhbmNlID0gcGljayh0aGlzLm9wdGlvbnMsICdkaXN0YW5jZScpO1xuXG5cdHByaXZhdGUgbm9ybWFsaXplZFJhZGl1c1RvcCA9IGNvbXB1dGVkKCgpID0+ICh0aGlzLnJhZGl1c1RvcCgpID09PSB1bmRlZmluZWQgPyAwLjEgOiB0aGlzLnJhZGl1c1RvcCgpKSk7XG5cdHByaXZhdGUgbm9ybWFsaXplZFJhZGl1c0JvdHRvbSA9IGNvbXB1dGVkKCgpID0+XG5cdFx0dGhpcy5yYWRpdXNCb3R0b20oKSA9PT0gdW5kZWZpbmVkID8gdGhpcy5hbmdsZSgpISAqIDcgOiB0aGlzLnJhZGl1c0JvdHRvbSgpLFxuXHQpO1xuXG5cdG1hdGVyaWFsID0gbmV3IFNwb3RMaWdodE1hdGVyaWFsKCk7XG5cdG9wYWNpdHkgPSBwaWNrKHRoaXMub3B0aW9ucywgJ29wYWNpdHknKTtcblx0Y29sb3IgPSBwaWNrKHRoaXMub3B0aW9ucywgJ2NvbG9yJyk7XG5cdGF0dGVudWF0aW9uID0gcGljayh0aGlzLm9wdGlvbnMsICdhdHRlbnVhdGlvbicpO1xuXHRhbmdsZVBvd2VyID0gcGljayh0aGlzLm9wdGlvbnMsICdhbmdsZVBvd2VyJyk7XG5cdGRlcHRoQnVmZmVyID0gcGljayh0aGlzLm9wdGlvbnMsICdkZXB0aEJ1ZmZlcicpO1xuXG5cdGdlb21ldHJ5ID0gY29tcHV0ZWQoKCkgPT4ge1xuXHRcdGNvbnN0IGdlb21ldHJ5ID0gbmV3IEN5bGluZGVyR2VvbWV0cnkoXG5cdFx0XHR0aGlzLm5vcm1hbGl6ZWRSYWRpdXNUb3AoKSxcblx0XHRcdHRoaXMubm9ybWFsaXplZFJhZGl1c0JvdHRvbSgpLFxuXHRcdFx0dGhpcy5kaXN0YW5jZSgpLFxuXHRcdFx0MTI4LFxuXHRcdFx0NjQsXG5cdFx0XHR0cnVlLFxuXHRcdCk7XG5cdFx0Z2VvbWV0cnkuYXBwbHlNYXRyaXg0KG5ldyBNYXRyaXg0KCkubWFrZVRyYW5zbGF0aW9uKDAsIC10aGlzLmRpc3RhbmNlKCkhIC8gMiwgMCkpO1xuXHRcdGdlb21ldHJ5LmFwcGx5TWF0cml4NChuZXcgTWF0cml4NCgpLm1ha2VSb3RhdGlvblgoLU1hdGguUEkgLyAyKSk7XG5cdFx0cmV0dXJuIGdlb21ldHJ5O1xuXHR9KTtcblxuXHRjb25zdHJ1Y3RvcigpIHtcblx0XHRleHRlbmQoeyBNZXNoIH0pO1xuXG5cdFx0Y29uc3QgdmVjID0gbmV3IFZlY3RvcjMoKTtcblxuXHRcdGluamVjdEJlZm9yZVJlbmRlcigoKSA9PiB7XG5cdFx0XHRjb25zdCBtZXNoID0gdGhpcy5tZXNoUmVmKCkubmF0aXZlRWxlbWVudDtcblx0XHRcdGNvbnN0IG1hdGVyaWFsID0gdGhpcy5tYXRlcmlhbDtcblxuXHRcdFx0bWF0ZXJpYWwudW5pZm9ybXNbJ3Nwb3RQb3NpdGlvbiddLnZhbHVlLmNvcHkobWVzaC5nZXRXb3JsZFBvc2l0aW9uKHZlYykpO1xuXHRcdFx0aWYgKG1lc2gucGFyZW50KSB7XG5cdFx0XHRcdG1lc2gubG9va0F0KChtZXNoLnBhcmVudCBhcyBhbnkpLnRhcmdldC5nZXRXb3JsZFBvc2l0aW9uKHZlYykpO1xuXHRcdFx0fVxuXHRcdH0pO1xuXHR9XG59XG5cbmZ1bmN0aW9uIGluamVjdFNwb3RMaWdodENvbW1vbihcblx0c3BvdExpZ2h0OiAoKSA9PiBFbGVtZW50UmVmPFNwb3RMaWdodD4gfCBudWxsLFxuXHRtZXNoOiAoKSA9PiBFbGVtZW50UmVmPE1lc2g+IHwgbnVsbCxcblx0d2lkdGg6ICgpID0+IG51bWJlcixcblx0aGVpZ2h0OiAoKSA9PiBudW1iZXIsXG5cdGRpc3RhbmNlOiAoKSA9PiBudW1iZXIsXG5cdGluamVjdG9yPzogSW5qZWN0b3IsXG4pIHtcblx0YXNzZXJ0SW5qZWN0b3IoaW5qZWN0U3BvdExpZ2h0Q29tbW9uLCBpbmplY3RvciwgKCkgPT4ge1xuXHRcdGNvbnN0IHBvcyA9IG5ldyBWZWN0b3IzKCk7XG5cdFx0Y29uc3QgZGlyID0gbmV3IFZlY3RvcjMoKTtcblxuXHRcdGVmZmVjdCgoKSA9PiB7XG5cdFx0XHRjb25zdCBbX3Nwb3RMaWdodCwgX3dpZHRoLCBfaGVpZ2h0XSA9IFtzcG90TGlnaHQoKT8ubmF0aXZlRWxlbWVudCwgd2lkdGgoKSwgaGVpZ2h0KCldO1xuXHRcdFx0aWYgKCFfc3BvdExpZ2h0KSByZXR1cm47XG5cdFx0XHRpZiAoaXNTcG90TGlnaHQoX3Nwb3RMaWdodCkpIHtcblx0XHRcdFx0X3Nwb3RMaWdodC5zaGFkb3cubWFwU2l6ZS5zZXQoX3dpZHRoLCBfaGVpZ2h0KTtcblx0XHRcdFx0aWYgKF9zcG90TGlnaHQuc2hhZG93Lm1hcCkge1xuXHRcdFx0XHRcdF9zcG90TGlnaHQuc2hhZG93Lm1hcC5zZXRTaXplKF93aWR0aCwgX2hlaWdodCk7XG5cdFx0XHRcdH1cblx0XHRcdFx0X3Nwb3RMaWdodC5zaGFkb3cubmVlZHNVcGRhdGUgPSB0cnVlO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0dGhyb3cgbmV3IEVycm9yKCdOZ3RzU3BvdExpZ2h0U2hhZG93IG11c3QgYmUgYSBjaGlsZCBvZiBhIE5ndHNTcG90TGlnaHQnKTtcblx0XHRcdH1cblx0XHR9KTtcblxuXHRcdGluamVjdEJlZm9yZVJlbmRlcigoKSA9PiB7XG5cdFx0XHRjb25zdCBbX3Nwb3RMaWdodCwgX21lc2hdID0gW3Nwb3RMaWdodCgpPy5uYXRpdmVFbGVtZW50LCBtZXNoKCk/Lm5hdGl2ZUVsZW1lbnRdO1xuXHRcdFx0aWYgKCFfc3BvdExpZ2h0IHx8ICFfbWVzaCkgcmV0dXJuO1xuXG5cdFx0XHRjb25zdCBBID0gX3Nwb3RMaWdodC5wb3NpdGlvbjtcblx0XHRcdGNvbnN0IEIgPSBfc3BvdExpZ2h0LnRhcmdldC5wb3NpdGlvbjtcblxuXHRcdFx0ZGlyLmNvcHkoQikuc3ViKEEpO1xuXHRcdFx0Y29uc3QgbGVuID0gZGlyLmxlbmd0aCgpO1xuXHRcdFx0ZGlyLm5vcm1hbGl6ZSgpLm11bHRpcGx5U2NhbGFyKGxlbiAqIGRpc3RhbmNlKCkpO1xuXHRcdFx0cG9zLmNvcHkoQSkuYWRkKGRpcik7XG5cblx0XHRcdF9tZXNoLnBvc2l0aW9uLmNvcHkocG9zKTtcblx0XHRcdF9tZXNoLmxvb2tBdChfc3BvdExpZ2h0LnRhcmdldC5wb3NpdGlvbik7XG5cdFx0fSk7XG5cdH0pO1xufVxuXG5pbnRlcmZhY2UgTmd0c1NoYWRvd01lc2hPcHRpb25zIHtcblx0ZGlzdGFuY2U6IG51bWJlcjtcblx0YWxwaGFUZXN0OiBudW1iZXI7XG5cdHNjYWxlOiBudW1iZXI7XG5cdHdpZHRoOiBudW1iZXI7XG5cdGhlaWdodDogbnVtYmVyO1xuXHRtYXA/OiBUZXh0dXJlO1xufVxuXG5jb25zdCBkZWZhdWx0U3BvdExpZ2h0U2hhZG93T3B0aW9uczogTmd0c1NoYWRvd01lc2hPcHRpb25zID0ge1xuXHRkaXN0YW5jZTogMC40LFxuXHRhbHBoYVRlc3Q6IDAuNSxcblx0c2NhbGU6IDEsXG5cdHdpZHRoOiA1MTIsXG5cdGhlaWdodDogNTEyLFxufTtcblxuQENvbXBvbmVudCh7XG5cdHNlbGVjdG9yOiAnbmd0cy1zcG90LWxpZ2h0LXNoYWRvdy1zaGFkZXInLFxuXHRzdGFuZGFsb25lOiB0cnVlLFxuXHR0ZW1wbGF0ZTogYFxuXHRcdDxuZ3QtbWVzaCAjbWVzaCBbc2NhbGVdPVwic2NhbGUoKVwiIFtjYXN0U2hhZG93XT1cInRydWVcIj5cblx0XHRcdDxuZ3QtcGxhbmUtZ2VvbWV0cnkgLz5cblx0XHRcdDxuZ3QtbWVzaC1iYXNpYy1tYXRlcmlhbFxuXHRcdFx0XHRbdHJhbnNwYXJlbnRdPVwidHJ1ZVwiXG5cdFx0XHRcdFtzaWRlXT1cIkRvdWJsZVNpZGVcIlxuXHRcdFx0XHRbYWxwaGFUZXN0XT1cImFscGhhVGVzdCgpXCJcblx0XHRcdFx0W2FscGhhTWFwXT1cInRleHR1cmUoKVwiXG5cdFx0XHRcdFtvcGFjaXR5XT1cImRlYnVnKCkgPyAxIDogMFwiXG5cdFx0XHQ+XG5cdFx0XHRcdDxuZy1jb250ZW50IC8+XG5cdFx0XHQ8L25ndC1tZXNoLWJhc2ljLW1hdGVyaWFsPlxuXHRcdDwvbmd0LW1lc2g+XG5cdGAsXG5cdHNjaGVtYXM6IFtDVVNUT01fRUxFTUVOVFNfU0NIRU1BXSxcblx0Y2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG59KVxuZXhwb3J0IGNsYXNzIE5ndHNTcG90TGlnaHRTaGFkb3dTaGFkZXIge1xuXHRwcm90ZWN0ZWQgcmVhZG9ubHkgRG91YmxlU2lkZSA9IERvdWJsZVNpZGU7XG5cblx0c2hhZGVyID0gaW5wdXQucmVxdWlyZWQ8c3RyaW5nPigpO1xuXHRvcHRpb25zID0gaW5wdXQoZGVmYXVsdFNwb3RMaWdodFNoYWRvd09wdGlvbnMsIHsgdHJhbnNmb3JtOiBtZXJnZUlucHV0cyhkZWZhdWx0U3BvdExpZ2h0U2hhZG93T3B0aW9ucykgfSk7XG5cblx0bWVzaCA9IHZpZXdDaGlsZC5yZXF1aXJlZDxFbGVtZW50UmVmPE1lc2g+PignbWVzaCcpO1xuXG5cdHByaXZhdGUgc3BvdExpZ2h0ID0gaW5qZWN0KE5ndHNTcG90TGlnaHQpO1xuXHRkZWJ1ZyA9IHRoaXMuc3BvdExpZ2h0LmRlYnVnO1xuXG5cdHNjYWxlID0gcGljayh0aGlzLm9wdGlvbnMsICdzY2FsZScpO1xuXHRhbHBoYVRlc3QgPSBwaWNrKHRoaXMub3B0aW9ucywgJ2FscGhhVGVzdCcpO1xuXG5cdHByaXZhdGUgd2lkdGggPSBwaWNrKHRoaXMub3B0aW9ucywgJ3dpZHRoJyk7XG5cdHByaXZhdGUgaGVpZ2h0ID0gcGljayh0aGlzLm9wdGlvbnMsICdoZWlnaHQnKTtcblx0cHJpdmF0ZSBtYXAgPSBwaWNrKHRoaXMub3B0aW9ucywgJ21hcCcpO1xuXHRwcml2YXRlIGRpc3RhbmNlID0gcGljayh0aGlzLm9wdGlvbnMsICdkaXN0YW5jZScpO1xuXG5cdHByaXZhdGUgcmVuZGVyVGFyZ2V0ID0gY29tcHV0ZWQoKCkgPT4ge1xuXHRcdHJldHVybiBuZXcgV2ViR0xSZW5kZXJUYXJnZXQodGhpcy53aWR0aCgpLCB0aGlzLmhlaWdodCgpLCB7XG5cdFx0XHRmb3JtYXQ6IFJHQkFGb3JtYXQsXG5cdFx0XHRzdGVuY2lsQnVmZmVyOiBmYWxzZSxcblx0XHRcdC8vIGRlcHRoVGV4dHVyZTogbnVsbCFcblx0XHR9KTtcblx0fSk7XG5cblx0dGV4dHVyZSA9IGNvbXB1dGVkKCgpID0+IHtcblx0XHRjb25zdCByZW5kZXJUYXJnZXQgPSB0aGlzLnJlbmRlclRhcmdldCgpO1xuXHRcdHJlbmRlclRhcmdldC50ZXh0dXJlLndyYXBUID0gcmVuZGVyVGFyZ2V0LnRleHR1cmUud3JhcFMgPSBSZXBlYXRXcmFwcGluZztcblx0XHRyZXR1cm4gcmVuZGVyVGFyZ2V0LnRleHR1cmU7XG5cdH0pO1xuXG5cdHByaXZhdGUgZnNRdWFkID0gY29tcHV0ZWQoKCkgPT4ge1xuXHRcdHJldHVybiBuZXcgRnVsbFNjcmVlblF1YWQoXG5cdFx0XHRuZXcgU2hhZGVyTWF0ZXJpYWwoe1xuXHRcdFx0XHR1bmlmb3JtczogdGhpcy51bmlmb3Jtcyxcblx0XHRcdFx0dmVydGV4U2hhZGVyOiAvKiBsYW5ndWFnZT1nbHNsIGdsc2wgKi8gYFxuICAgICAgICAgIHZhcnlpbmcgdmVjMiB2VXY7XG5cbiAgICAgICAgICB2b2lkIG1haW4oKSB7XG4gICAgICAgICAgICB2VXYgPSB1djtcbiAgICAgICAgICAgIGdsX1Bvc2l0aW9uID0gcHJvamVjdGlvbk1hdHJpeCAqIG1vZGVsVmlld01hdHJpeCAqIHZlYzQocG9zaXRpb24sIDEuMCk7XG4gICAgICAgICAgfVxuICAgICAgICBgLFxuXHRcdFx0XHRmcmFnbWVudFNoYWRlcjogdGhpcy5zaGFkZXIoKSxcblx0XHRcdH0pLFxuXHRcdCk7XG5cdH0pO1xuXG5cdHByaXZhdGUgdW5pZm9ybXMgPSB7XG5cdFx0dVNoYWRvd01hcDogeyB2YWx1ZTogdW5kZWZpbmVkIGFzIFRleHR1cmUgfCB1bmRlZmluZWQgfSxcblx0XHR1VGltZTogeyB2YWx1ZTogMCB9LFxuXHR9O1xuXG5cdGNvbnN0cnVjdG9yKCkge1xuXHRcdGV4dGVuZCh7IE1lc2gsIFBsYW5lR2VvbWV0cnksIE1lc2hCYXNpY01hdGVyaWFsIH0pO1xuXG5cdFx0Y29uc3QgYXV0b0VmZmVjdCA9IGluamVjdEF1dG9FZmZlY3QoKTtcblx0XHRjb25zdCBpbmplY3RvciA9IGluamVjdChJbmplY3Rvcik7XG5cblx0XHRhZnRlck5leHRSZW5kZXIoKCkgPT4ge1xuXHRcdFx0aW5qZWN0U3BvdExpZ2h0Q29tbW9uKHRoaXMuc3BvdExpZ2h0LnNwb3RMaWdodCwgdGhpcy5tZXNoLCB0aGlzLndpZHRoLCB0aGlzLmhlaWdodCwgdGhpcy5kaXN0YW5jZSwgaW5qZWN0b3IpO1xuXG5cdFx0XHRhdXRvRWZmZWN0KCgpID0+IHtcblx0XHRcdFx0dGhpcy51bmlmb3Jtcy51U2hhZG93TWFwLnZhbHVlID0gdGhpcy5tYXAoKTtcblx0XHRcdH0pO1xuXG5cdFx0XHRhdXRvRWZmZWN0KCgpID0+IHtcblx0XHRcdFx0Y29uc3QgZnNRdWFkID0gdGhpcy5mc1F1YWQoKTtcblx0XHRcdFx0cmV0dXJuICgpID0+IHtcblx0XHRcdFx0XHRmc1F1YWQubWF0ZXJpYWwuZGlzcG9zZSgpO1xuXHRcdFx0XHRcdGZzUXVhZC5kaXNwb3NlKCk7XG5cdFx0XHRcdH07XG5cdFx0XHR9KTtcblxuXHRcdFx0YXV0b0VmZmVjdCgoKSA9PiB7XG5cdFx0XHRcdGNvbnN0IHJlbmRlclRhcmdldCA9IHRoaXMucmVuZGVyVGFyZ2V0KCk7XG5cdFx0XHRcdHJldHVybiAoKSA9PiB7XG5cdFx0XHRcdFx0cmVuZGVyVGFyZ2V0LmRpc3Bvc2UoKTtcblx0XHRcdFx0fTtcblx0XHRcdH0pO1xuXHRcdH0pO1xuXG5cdFx0aW5qZWN0QmVmb3JlUmVuZGVyKCh7IGdsLCBkZWx0YSB9KSA9PiB7XG5cdFx0XHR0aGlzLnVuaWZvcm1zLnVUaW1lLnZhbHVlICs9IGRlbHRhO1xuXG5cdFx0XHRnbC5zZXRSZW5kZXJUYXJnZXQodGhpcy5yZW5kZXJUYXJnZXQoKSk7XG5cdFx0XHR0aGlzLmZzUXVhZCgpLnJlbmRlcihnbCk7XG5cdFx0XHRnbC5zZXRSZW5kZXJUYXJnZXQobnVsbCk7XG5cdFx0fSk7XG5cdH1cbn1cblxuQENvbXBvbmVudCh7XG5cdHNlbGVjdG9yOiAnbmd0cy1zcG90LWxpZ2h0LXNoYWRvdy1uby1zaGFkZXInLFxuXHRzdGFuZGFsb25lOiB0cnVlLFxuXHR0ZW1wbGF0ZTogYFxuXHRcdDxuZ3QtbWVzaCAjbWVzaCBbc2NhbGVdPVwic2NhbGUoKVwiIFtjYXN0U2hhZG93XT1cInRydWVcIj5cblx0XHRcdDxuZ3QtcGxhbmUtZ2VvbWV0cnkgLz5cblx0XHRcdDxuZ3QtbWVzaC1iYXNpYy1tYXRlcmlhbFxuXHRcdFx0XHRbdHJhbnNwYXJlbnRdPVwidHJ1ZVwiXG5cdFx0XHRcdFtzaWRlXT1cIkRvdWJsZVNpZGVcIlxuXHRcdFx0XHRbYWxwaGFUZXN0XT1cImFscGhhVGVzdCgpXCJcblx0XHRcdFx0W2FscGhhTWFwXT1cIm1hcCgpXCJcblx0XHRcdFx0W29wYWNpdHldPVwiZGVidWcoKSA/IDEgOiAwXCJcblx0XHRcdD5cblx0XHRcdFx0PG5nLWNvbnRlbnQgLz5cblx0XHRcdDwvbmd0LW1lc2gtYmFzaWMtbWF0ZXJpYWw+XG5cdFx0PC9uZ3QtbWVzaD5cblx0YCxcblx0c2NoZW1hczogW0NVU1RPTV9FTEVNRU5UU19TQ0hFTUFdLFxuXHRjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbn0pXG5leHBvcnQgY2xhc3MgTmd0c1Nwb3RMaWdodFNoYWRvd05vU2hhZGVyIHtcblx0cHJvdGVjdGVkIHJlYWRvbmx5IERvdWJsZVNpZGUgPSBEb3VibGVTaWRlO1xuXG5cdG9wdGlvbnMgPSBpbnB1dChkZWZhdWx0U3BvdExpZ2h0U2hhZG93T3B0aW9ucywgeyB0cmFuc2Zvcm06IG1lcmdlSW5wdXRzKGRlZmF1bHRTcG90TGlnaHRTaGFkb3dPcHRpb25zKSB9KTtcblxuXHRtZXNoID0gdmlld0NoaWxkLnJlcXVpcmVkPEVsZW1lbnRSZWY8TWVzaD4+KCdtZXNoJyk7XG5cblx0cHJpdmF0ZSBzcG90TGlnaHQgPSBpbmplY3QoTmd0c1Nwb3RMaWdodCk7XG5cdGRlYnVnID0gdGhpcy5zcG90TGlnaHQuZGVidWc7XG5cblx0YWxwaGFUZXN0ID0gcGljayh0aGlzLm9wdGlvbnMsICdhbHBoYVRlc3QnKTtcblx0c2NhbGUgPSBwaWNrKHRoaXMub3B0aW9ucywgJ3NjYWxlJyk7XG5cdG1hcCA9IGNvbXB1dGVkKCgpID0+IHtcblx0XHRjb25zdCBtYXAgPSB0aGlzLm9wdGlvbnMoKS5tYXA7XG5cdFx0aWYgKG1hcCkge1xuXHRcdFx0bWFwLndyYXBTID0gbWFwLndyYXBUID0gUmVwZWF0V3JhcHBpbmc7XG5cdFx0fVxuXHRcdHJldHVybiBtYXA7XG5cdH0pO1xuXG5cdHByaXZhdGUgd2lkdGggPSBwaWNrKHRoaXMub3B0aW9ucywgJ3dpZHRoJyk7XG5cdHByaXZhdGUgaGVpZ2h0ID0gcGljayh0aGlzLm9wdGlvbnMsICdoZWlnaHQnKTtcblx0cHJpdmF0ZSBkaXN0YW5jZSA9IHBpY2sodGhpcy5vcHRpb25zLCAnZGlzdGFuY2UnKTtcblxuXHRjb25zdHJ1Y3RvcigpIHtcblx0XHRleHRlbmQoeyBNZXNoLCBQbGFuZUdlb21ldHJ5LCBNZXNoQmFzaWNNYXRlcmlhbCB9KTtcblxuXHRcdGNvbnN0IGluamVjdG9yID0gaW5qZWN0KEluamVjdG9yKTtcblx0XHRhZnRlck5leHRSZW5kZXIoKCkgPT4ge1xuXHRcdFx0aW5qZWN0U3BvdExpZ2h0Q29tbW9uKHRoaXMuc3BvdExpZ2h0LnNwb3RMaWdodCwgdGhpcy5tZXNoLCB0aGlzLndpZHRoLCB0aGlzLmhlaWdodCwgdGhpcy5kaXN0YW5jZSwgaW5qZWN0b3IpO1xuXHRcdH0pO1xuXHR9XG59XG5cbkBDb21wb25lbnQoe1xuXHRzZWxlY3RvcjogJ25ndHMtc3BvdC1saWdodC1zaGFkb3cnLFxuXHRzdGFuZGFsb25lOiB0cnVlLFxuXHR0ZW1wbGF0ZTogYFxuXHRcdEBpZiAoc2hhZGVyKCk7IGFzIHNoYWRlcikge1xuXHRcdFx0PG5ndHMtc3BvdC1saWdodC1zaGFkb3ctc2hhZGVyIFtzaGFkZXJdPVwic2hhZGVyXCIgW29wdGlvbnNdPVwib3B0aW9ucygpXCIgLz5cblx0XHR9IEBlbHNlIHtcblx0XHRcdDxuZ3RzLXNwb3QtbGlnaHQtc2hhZG93LW5vLXNoYWRlciBbb3B0aW9uc109XCJvcHRpb25zKClcIiAvPlxuXHRcdH1cblx0YCxcblx0aW1wb3J0czogW05ndHNTcG90TGlnaHRTaGFkb3dTaGFkZXIsIE5ndHNTcG90TGlnaHRTaGFkb3dOb1NoYWRlcl0sXG5cdGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxufSlcbmV4cG9ydCBjbGFzcyBOZ3RzU3BvdExpZ2h0U2hhZG93IHtcblx0c2hhZGVyID0gaW5wdXQ8c3RyaW5nPigpO1xuXHRvcHRpb25zID0gaW5wdXQoZGVmYXVsdFNwb3RMaWdodFNoYWRvd09wdGlvbnMsIHsgdHJhbnNmb3JtOiBtZXJnZUlucHV0cyhkZWZhdWx0U3BvdExpZ2h0U2hhZG93T3B0aW9ucykgfSk7XG59XG5cbmNvbnN0IGRlZmF1bHRPcHRpb25zOiBOZ3RzU3BvdExpZ2h0T3B0aW9ucyA9IHtcblx0b3BhY2l0eTogMSxcblx0Y29sb3I6ICd3aGl0ZScsXG5cdGRpc3RhbmNlOiA1LFxuXHRhbmdsZTogMC4xNSxcblx0YXR0ZW51YXRpb246IDUsXG5cdGFuZ2xlUG93ZXI6IDUsXG5cdHZvbHVtZXRyaWM6IHRydWUsXG5cdGRlYnVnOiBmYWxzZSxcbn07XG5cbkBDb21wb25lbnQoe1xuXHRzZWxlY3RvcjogJ25ndHMtc3BvdC1saWdodCcsXG5cdHN0YW5kYWxvbmU6IHRydWUsXG5cdHRlbXBsYXRlOiBgXG5cdFx0PG5ndC1ncm91cD5cblx0XHRcdDxuZ3Qtc3BvdC1saWdodFxuXHRcdFx0XHQjc3BvdExpZ2h0XG5cdFx0XHRcdFthbmdsZV09XCJhbmdsZSgpXCJcblx0XHRcdFx0W2NvbG9yXT1cImNvbG9yKClcIlxuXHRcdFx0XHRbZGlzdGFuY2VdPVwiZGlzdGFuY2UoKVwiXG5cdFx0XHRcdFtjYXN0U2hhZG93XT1cInRydWVcIlxuXHRcdFx0XHRbcGFyYW1ldGVyc109XCJwYXJhbWV0ZXJzKClcIlxuXHRcdFx0PlxuXHRcdFx0XHRAaWYgKHZvbHVtZXRyaWMoKSkge1xuXHRcdFx0XHRcdDxuZ3RzLXZvbHVtZXRyaWMtbWVzaCBbb3B0aW9uc109XCJ2b2x1bWV0cmljT3B0aW9ucygpXCIgLz5cblx0XHRcdFx0fVxuXG5cdFx0XHRcdEBpZiAoZGVidWcoKSkge1xuXHRcdFx0XHRcdDxuZ3RzLWhlbHBlciBbdHlwZV09XCJTcG90TGlnaHRIZWxwZXJcIiAvPlxuXHRcdFx0XHR9XG5cdFx0XHQ8L25ndC1zcG90LWxpZ2h0PlxuXHRcdFx0PG5nLWNvbnRlbnQgLz5cblx0XHQ8L25ndC1ncm91cD5cblx0YCxcblx0c2NoZW1hczogW0NVU1RPTV9FTEVNRU5UU19TQ0hFTUFdLFxuXHRjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcblx0aW1wb3J0czogW05ndEFyZ3MsIE5ndHNWb2x1bWV0cmljTWVzaCwgTmd0c0hlbHBlcl0sXG59KVxuZXhwb3J0IGNsYXNzIE5ndHNTcG90TGlnaHQge1xuXHRwcm90ZWN0ZWQgcmVhZG9ubHkgU3BvdExpZ2h0SGVscGVyID0gU3BvdExpZ2h0SGVscGVyO1xuXG5cdG9wdGlvbnMgPSBpbnB1dChkZWZhdWx0T3B0aW9ucywgeyB0cmFuc2Zvcm06IG1lcmdlSW5wdXRzKGRlZmF1bHRPcHRpb25zKSB9KTtcblx0cGFyYW1ldGVycyA9IG9taXQodGhpcy5vcHRpb25zLCBbXG5cdFx0J29wYWNpdHknLFxuXHRcdCdyYWRpdXNUb3AnLFxuXHRcdCdyYWRpdXNCb3R0b20nLFxuXHRcdCdkZXB0aEJ1ZmZlcicsXG5cdFx0J2NvbG9yJyxcblx0XHQnZGlzdGFuY2UnLFxuXHRcdCdhbmdsZScsXG5cdFx0J2F0dGVudWF0aW9uJyxcblx0XHQnYW5nbGVQb3dlcicsXG5cdFx0J3ZvbHVtZXRyaWMnLFxuXHRcdCdkZWJ1ZycsXG5cdF0pO1xuXHR2b2x1bWV0cmljT3B0aW9ucyA9IHBpY2sodGhpcy5vcHRpb25zLCBbXG5cdFx0J29wYWNpdHknLFxuXHRcdCdyYWRpdXNUb3AnLFxuXHRcdCdyYWRpdXNCb3R0b20nLFxuXHRcdCdkZXB0aEJ1ZmZlcicsXG5cdFx0J2NvbG9yJyxcblx0XHQnZGlzdGFuY2UnLFxuXHRcdCdhbmdsZScsXG5cdFx0J2F0dGVudWF0aW9uJyxcblx0XHQnYW5nbGVQb3dlcicsXG5cdFx0J2RlYnVnJyxcblx0XSk7XG5cblx0c3BvdExpZ2h0ID0gdmlld0NoaWxkLnJlcXVpcmVkPEVsZW1lbnRSZWY8U3BvdExpZ2h0Pj4oJ3Nwb3RMaWdodCcpO1xuXG5cdGRlYnVnID0gcGljayh0aGlzLm9wdGlvbnMsICdkZWJ1ZycpO1xuXHRhbmdsZSA9IHBpY2sodGhpcy5vcHRpb25zLCAnYW5nbGUnKTtcblx0Y29sb3IgPSBwaWNrKHRoaXMub3B0aW9ucywgJ2NvbG9yJyk7XG5cdGRpc3RhbmNlID0gcGljayh0aGlzLm9wdGlvbnMsICdkaXN0YW5jZScpO1xuXHR2b2x1bWV0cmljID0gcGljayh0aGlzLm9wdGlvbnMsICd2b2x1bWV0cmljJyk7XG5cblx0Y29uc3RydWN0b3IoKSB7XG5cdFx0ZXh0ZW5kKHsgR3JvdXAsIFNwb3RMaWdodCB9KTtcblx0fVxufVxuIl19
|
|
445
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3BvdC1saWdodC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvc29iYS9zdGFnaW5nL3NyYy9saWIvc3BvdC1saWdodC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ04sdUJBQXVCLEVBQ3ZCLFNBQVMsRUFDVCxRQUFRLEVBQ1Isc0JBQXNCLEVBQ3RCLE1BQU0sRUFFTixNQUFNLEVBRU4sS0FBSyxFQUNMLFNBQVMsR0FDVCxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsTUFBTSxFQUFFLGtCQUFrQixFQUFFLFdBQVcsRUFBRSxPQUFPLEVBQWdCLElBQUksRUFBRSxJQUFJLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDM0csT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQzdELE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLG9DQUFvQyxDQUFDO0FBQ3ZFLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUM1RCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDdkQsT0FBTyxFQUVOLGdCQUFnQixFQUVoQixVQUFVLEVBQ1YsS0FBSyxFQUNMLE9BQU8sRUFDUCxJQUFJLEVBQ0osaUJBQWlCLEVBRWpCLGFBQWEsRUFDYixjQUFjLEVBQ2QsVUFBVSxFQUNWLGNBQWMsRUFDZCxTQUFTLEVBQ1QsZUFBZSxFQUVmLE9BQU8sRUFDUCxpQkFBaUIsR0FDakIsTUFBTSxPQUFPLENBQUM7QUFDZixPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sY0FBYyxDQUFDOztBQUU5QyxTQUFTLFdBQVcsQ0FBQyxLQUFzQjtJQUMxQyxPQUFRLEtBQW1CLEVBQUUsV0FBVyxDQUFDO0FBQzFDLENBQUM7QUFnQkQsTUFBTSw0QkFBNEIsR0FBOEI7SUFDL0QsT0FBTyxFQUFFLENBQUM7SUFDVixRQUFRLEVBQUUsQ0FBQztJQUNYLEtBQUssRUFB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QUFlLEVBQUUsdUJBQXVCLENBQUMsTUFBTTtvQkFDL0MsT0FBTyxFQUFFLENBQUMsT0FBTyxFQUFFLGtCQUFrQixFQUFFLFVBQVUsQ0FBQztpQkFDbEQiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuXHRDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcblx0Q29tcG9uZW50LFxuXHRjb21wdXRlZCxcblx0Q1VTVE9NX0VMRU1FTlRTX1NDSEVNQSxcblx0ZWZmZWN0LFxuXHRFbGVtZW50UmVmLFxuXHRpbmplY3QsXG5cdEluamVjdG9yLFxuXHRpbnB1dCxcblx0dmlld0NoaWxkLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IGV4dGVuZCwgaW5qZWN0QmVmb3JlUmVuZGVyLCBpbmplY3RTdG9yZSwgTmd0QXJncywgTmd0U3BvdExpZ2h0LCBvbWl0LCBwaWNrIH0gZnJvbSAnYW5ndWxhci10aHJlZSc7XG5pbXBvcnQgeyBOZ3RzSGVscGVyIH0gZnJvbSAnYW5ndWxhci10aHJlZS1zb2JhL2Fic3RyYWN0aW9ucyc7XG5pbXBvcnQgeyBTcG90TGlnaHRNYXRlcmlhbCB9IGZyb20gJ2FuZ3VsYXItdGhyZWUtc29iYS92YW5pbGxhLWV4cG9ydHMnO1xuaW1wb3J0IHsgYXNzZXJ0SW5qZWN0b3IgfSBmcm9tICduZ3h0ZW5zaW9uL2Fzc2VydC1pbmplY3Rvcic7XG5pbXBvcnQgeyBtZXJnZUlucHV0cyB9IGZyb20gJ25neHRlbnNpb24vaW5qZWN0LWlucHV0cyc7XG5pbXBvcnQge1xuXHRDb2xvclJlcHJlc2VudGF0aW9uLFxuXHRDeWxpbmRlckdlb21ldHJ5LFxuXHREZXB0aFRleHR1cmUsXG5cdERvdWJsZVNpZGUsXG5cdEdyb3VwLFxuXHRNYXRyaXg0LFxuXHRNZXNoLFxuXHRNZXNoQmFzaWNNYXRlcmlhbCxcblx0T2JqZWN0M0QsXG5cdFBsYW5lR2VvbWV0cnksXG5cdFJlcGVhdFdyYXBwaW5nLFxuXHRSR0JBRm9ybWF0LFxuXHRTaGFkZXJNYXRlcmlhbCxcblx0U3BvdExpZ2h0LFxuXHRTcG90TGlnaHRIZWxwZXIsXG5cdFRleHR1cmUsXG5cdFZlY3RvcjMsXG5cdFdlYkdMUmVuZGVyVGFyZ2V0LFxufSBmcm9tICd0aHJlZSc7XG5pbXBvcnQgeyBGdWxsU2NyZWVuUXVhZCB9IGZyb20gJ3RocmVlLXN0ZGxpYic7XG5cbmZ1bmN0aW9uIGlzU3BvdExpZ2h0KGNoaWxkOiBPYmplY3QzRCB8IG51bGwpOiBjaGlsZCBpcyBTcG90TGlnaHQge1xuXHRyZXR1cm4gKGNoaWxkIGFzIFNwb3RMaWdodCk/LmlzU3BvdExpZ2h0O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIE5ndHNTcG90TGlnaHRPcHRpb25zIGV4dGVuZHMgUGFydGlhbDxOZ3RTcG90TGlnaHQ+IHtcblx0ZGVwdGhCdWZmZXI/OiBEZXB0aFRleHR1cmU7XG5cdGF0dGVudWF0aW9uPzogbnVtYmVyO1xuXHRhbmdsZVBvd2VyPzogbnVtYmVyO1xuXHRyYWRpdXNUb3A/OiBudW1iZXI7XG5cdHJhZGl1c0JvdHRvbT86IG51bWJlcjtcblx0b3BhY2l0eT86IG51bWJlcjtcblx0Y29sb3I/OiBDb2xvclJlcHJlc2VudGF0aW9uO1xuXHR2b2x1bWV0cmljPzogYm9vbGVhbjtcblx0ZGVidWc/OiBib29sZWFuO1xufVxuXG5leHBvcnQgdHlwZSBOZ3RzVm9sdW1ldHJpY01lc2hPcHRpb25zID0gT21pdDxOZ3RzU3BvdExpZ2h0T3B0aW9ucywgJ3ZvbHVtZXRyaWMnPjtcblxuY29uc3QgZGVmYXVsdFZvbHVtZXRyaWNNZXNoT3B0aW9uczogTmd0c1ZvbHVtZXRyaWNNZXNoT3B0aW9ucyA9IHtcblx0b3BhY2l0eTogMSxcblx0ZGlzdGFuY2U6IDUsXG5cdGFuZ2xlOiAwLjE1LFxuXHRhdHRlbnVhdGlvbjogNSxcblx0YW5nbGVQb3dlcjogNSxcblx0Y29sb3I6ICd3aGl0ZScsXG59O1xuXG5AQ29tcG9uZW50KHtcblx0c2VsZWN0b3I6ICduZ3RzLXZvbHVtZXRyaWMtbWVzaCcsXG5cdHN0YW5kYWxvbmU6IHRydWUsXG5cdHRlbXBsYXRlOiBgXG5cdFx0PG5ndC1tZXNoICNtZXNoIFtnZW9tZXRyeV09XCJnZW9tZXRyeSgpXCIgW3JheWNhc3RdPVwibnVsbFwiPlxuXHRcdFx0PG5ndC1wcmltaXRpdmUgKmFyZ3M9XCJbbWF0ZXJpYWxdXCIgYXR0YWNoPVwibWF0ZXJpYWxcIj5cblx0XHRcdFx0PG5ndC12YWx1ZSBhdHRhY2g9XCJ1bmlmb3Jtcy5vcGFjaXR5LnZhbHVlXCIgW3Jhd1ZhbHVlXT1cIm9wYWNpdHkoKVwiIC8+XG5cdFx0XHRcdDxuZ3QtdmFsdWUgYXR0YWNoPVwidW5pZm9ybXMubGlnaHRDb2xvci52YWx1ZVwiIFtyYXdWYWx1ZV09XCJjb2xvcigpXCIgLz5cblx0XHRcdFx0PG5ndC12YWx1ZSBhdHRhY2g9XCJ1bmlmb3Jtcy5hdHRlbnVhdGlvbi52YWx1ZVwiIFtyYXdWYWx1ZV09XCJhdHRlbnVhdGlvbigpXCIgLz5cblx0XHRcdFx0PG5ndC12YWx1ZSBhdHRhY2g9XCJ1bmlmb3Jtcy5hbmdsZVBvd2VyLnZhbHVlXCIgW3Jhd1ZhbHVlXT1cImFuZ2xlUG93ZXIoKVwiIC8+XG5cdFx0XHRcdDxuZ3QtdmFsdWUgYXR0YWNoPVwidW5pZm9ybXMuZGVwdGgudmFsdWVcIiBbcmF3VmFsdWVdPVwiZGVwdGhCdWZmZXIoKVwiIC8+XG5cdFx0XHRcdDxuZ3QtdmFsdWUgYXR0YWNoPVwidW5pZm9ybXMuY2FtZXJhTmVhci52YWx1ZVwiIFtyYXdWYWx1ZV09XCJjYW1lcmEoKS5uZWFyXCIgLz5cblx0XHRcdFx0PG5ndC12YWx1ZSBhdHRhY2g9XCJ1bmlmb3Jtcy5jYW1lcmFGYXIudmFsdWVcIiBbcmF3VmFsdWVdPVwiY2FtZXJhKCkuZmFyXCIgLz5cblx0XHRcdFx0PG5ndC12YWx1ZVxuXHRcdFx0XHRcdGF0dGFjaD1cInVuaWZvcm1zLnJlc29sdXRpb24udmFsdWVcIlxuXHRcdFx0XHRcdFtyYXdWYWx1ZV09XCJkZXB0aEJ1ZmZlcigpID8gW3NpemUoKS53aWR0aCAqIGRwcigpLCBzaXplKCkuaGVpZ2h0ICogZHByKCldIDogWzAsIDBdXCJcblx0XHRcdFx0Lz5cblx0XHRcdDwvbmd0LXByaW1pdGl2ZT5cblx0XHQ8L25ndC1tZXNoPlxuXHRgLFxuXHRzY2hlbWFzOiBbQ1VTVE9NX0VMRU1FTlRTX1NDSEVNQV0sXG5cdGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuXHRpbXBvcnRzOiBbTmd0QXJnc10sXG59KVxuZXhwb3J0IGNsYXNzIE5ndHNWb2x1bWV0cmljTWVzaCB7XG5cdG9wdGlvbnMgPSBpbnB1dChkZWZhdWx0Vm9sdW1ldHJpY01lc2hPcHRpb25zLCB7IHRyYW5zZm9ybTogbWVyZ2VJbnB1dHMoZGVmYXVsdFZvbHVtZXRyaWNNZXNoT3B0aW9ucykgfSk7XG5cblx0bWVzaFJlZiA9IHZpZXdDaGlsZC5yZXF1aXJlZDxFbGVtZW50UmVmPE1lc2g+PignbWVzaCcpO1xuXG5cdHByaXZhdGUgc3RvcmUgPSBpbmplY3RTdG9yZSgpO1xuXHRzaXplID0gdGhpcy5zdG9yZS5zZWxlY3QoJ3NpemUnKTtcblx0ZHByID0gdGhpcy5zdG9yZS5zZWxlY3QoJ3ZpZXdwb3J0JywgJ2RwcicpO1xuXHRjYW1lcmEgPSB0aGlzLnN0b3JlLnNlbGVjdCgnY2FtZXJhJyk7XG5cblx0cHJpdmF0ZSByYWRpdXNUb3AgPSBwaWNrKHRoaXMub3B0aW9ucywgJ3JhZGl1c1RvcCcpO1xuXHRwcml2YXRlIHJhZGl1c0JvdHRvbSA9IHBpY2sodGhpcy5vcHRpb25zLCAncmFkaXVzQm90dG9tJyk7XG5cdHByaXZhdGUgYW5nbGUgPSBwaWNrKHRoaXMub3B0aW9ucywgJ2FuZ2xlJyk7XG5cdHByaXZhdGUgZGlzdGFuY2UgPSBwaWNrKHRoaXMub3B0aW9ucywgJ2Rpc3RhbmNlJyk7XG5cblx0cHJpdmF0ZSBub3JtYWxpemVkUmFkaXVzVG9wID0gY29tcHV0ZWQoKCkgPT4gKHRoaXMucmFkaXVzVG9wKCkgPT09IHVuZGVmaW5lZCA/IDAuMSA6IHRoaXMucmFkaXVzVG9wKCkpKTtcblx0cHJpdmF0ZSBub3JtYWxpemVkUmFkaXVzQm90dG9tID0gY29tcHV0ZWQoKCkgPT5cblx0XHR0aGlzLnJhZGl1c0JvdHRvbSgpID09PSB1bmRlZmluZWQgPyB0aGlzLmFuZ2xlKCkhICogNyA6IHRoaXMucmFkaXVzQm90dG9tKCksXG5cdCk7XG5cblx0bWF0ZXJpYWwgPSBuZXcgU3BvdExpZ2h0TWF0ZXJpYWwoKTtcblx0b3BhY2l0eSA9IHBpY2sodGhpcy5vcHRpb25zLCAnb3BhY2l0eScpO1xuXHRjb2xvciA9IHBpY2sodGhpcy5vcHRpb25zLCAnY29sb3InKTtcblx0YXR0ZW51YXRpb24gPSBwaWNrKHRoaXMub3B0aW9ucywgJ2F0dGVudWF0aW9uJyk7XG5cdGFuZ2xlUG93ZXIgPSBwaWNrKHRoaXMub3B0aW9ucywgJ2FuZ2xlUG93ZXInKTtcblx0ZGVwdGhCdWZmZXIgPSBwaWNrKHRoaXMub3B0aW9ucywgJ2RlcHRoQnVmZmVyJyk7XG5cblx0Z2VvbWV0cnkgPSBjb21wdXRlZCgoKSA9PiB7XG5cdFx0Y29uc3QgZ2VvbWV0cnkgPSBuZXcgQ3lsaW5kZXJHZW9tZXRyeShcblx0XHRcdHRoaXMubm9ybWFsaXplZFJhZGl1c1RvcCgpLFxuXHRcdFx0dGhpcy5ub3JtYWxpemVkUmFkaXVzQm90dG9tKCksXG5cdFx0XHR0aGlzLmRpc3RhbmNlKCksXG5cdFx0XHQxMjgsXG5cdFx0XHQ2NCxcblx0XHRcdHRydWUsXG5cdFx0KTtcblx0XHRnZW9tZXRyeS5hcHBseU1hdHJpeDQobmV3IE1hdHJpeDQoKS5tYWtlVHJhbnNsYXRpb24oMCwgLXRoaXMuZGlzdGFuY2UoKSEgLyAyLCAwKSk7XG5cdFx0Z2VvbWV0cnkuYXBwbHlNYXRyaXg0KG5ldyBNYXRyaXg0KCkubWFrZVJvdGF0aW9uWCgtTWF0aC5QSSAvIDIpKTtcblx0XHRyZXR1cm4gZ2VvbWV0cnk7XG5cdH0pO1xuXG5cdGNvbnN0cnVjdG9yKCkge1xuXHRcdGV4dGVuZCh7IE1lc2ggfSk7XG5cblx0XHRjb25zdCB2ZWMgPSBuZXcgVmVjdG9yMygpO1xuXG5cdFx0aW5qZWN0QmVmb3JlUmVuZGVyKCgpID0+IHtcblx0XHRcdGNvbnN0IG1lc2ggPSB0aGlzLm1lc2hSZWYoKS5uYXRpdmVFbGVtZW50O1xuXHRcdFx0Y29uc3QgbWF0ZXJpYWwgPSB0aGlzLm1hdGVyaWFsO1xuXG5cdFx0XHRtYXRlcmlhbC51bmlmb3Jtc1snc3BvdFBvc2l0aW9uJ10udmFsdWUuY29weShtZXNoLmdldFdvcmxkUG9zaXRpb24odmVjKSk7XG5cdFx0XHRpZiAobWVzaC5wYXJlbnQpIHtcblx0XHRcdFx0bWVzaC5sb29rQXQoKG1lc2gucGFyZW50IGFzIGFueSkudGFyZ2V0LmdldFdvcmxkUG9zaXRpb24odmVjKSk7XG5cdFx0XHR9XG5cdFx0fSk7XG5cdH1cbn1cblxuZnVuY3Rpb24gaW5qZWN0U3BvdExpZ2h0Q29tbW9uKFxuXHRzcG90TGlnaHQ6ICgpID0+IEVsZW1lbnRSZWY8U3BvdExpZ2h0PiB8IG51bGwsXG5cdG1lc2g6ICgpID0+IEVsZW1lbnRSZWY8TWVzaD4gfCBudWxsLFxuXHR3aWR0aDogKCkgPT4gbnVtYmVyLFxuXHRoZWlnaHQ6ICgpID0+IG51bWJlcixcblx0ZGlzdGFuY2U6ICgpID0+IG51bWJlcixcblx0aW5qZWN0b3I/OiBJbmplY3Rvcixcbikge1xuXHRhc3NlcnRJbmplY3RvcihpbmplY3RTcG90TGlnaHRDb21tb24sIGluamVjdG9yLCAoKSA9PiB7XG5cdFx0Y29uc3QgcG9zID0gbmV3IFZlY3RvcjMoKTtcblx0XHRjb25zdCBkaXIgPSBuZXcgVmVjdG9yMygpO1xuXG5cdFx0ZWZmZWN0KCgpID0+IHtcblx0XHRcdGNvbnN0IFtfc3BvdExpZ2h0LCBfd2lkdGgsIF9oZWlnaHRdID0gW3Nwb3RMaWdodCgpPy5uYXRpdmVFbGVtZW50LCB3aWR0aCgpLCBoZWlnaHQoKV07XG5cdFx0XHRpZiAoIV9zcG90TGlnaHQpIHJldHVybjtcblx0XHRcdGlmIChpc1Nwb3RMaWdodChfc3BvdExpZ2h0KSkge1xuXHRcdFx0XHRfc3BvdExpZ2h0LnNoYWRvdy5tYXBTaXplLnNldChfd2lkdGgsIF9oZWlnaHQpO1xuXHRcdFx0XHRpZiAoX3Nwb3RMaWdodC5zaGFkb3cubWFwKSB7XG5cdFx0XHRcdFx0X3Nwb3RMaWdodC5zaGFkb3cubWFwLnNldFNpemUoX3dpZHRoLCBfaGVpZ2h0KTtcblx0XHRcdFx0fVxuXHRcdFx0XHRfc3BvdExpZ2h0LnNoYWRvdy5uZWVkc1VwZGF0ZSA9IHRydWU7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHR0aHJvdyBuZXcgRXJyb3IoJ05ndHNTcG90TGlnaHRTaGFkb3cgbXVzdCBiZSBhIGNoaWxkIG9mIGEgTmd0c1Nwb3RMaWdodCcpO1xuXHRcdFx0fVxuXHRcdH0pO1xuXG5cdFx0aW5qZWN0QmVmb3JlUmVuZGVyKCgpID0+IHtcblx0XHRcdGNvbnN0IFtfc3BvdExpZ2h0LCBfbWVzaF0gPSBbc3BvdExpZ2h0KCk/Lm5hdGl2ZUVsZW1lbnQsIG1lc2goKT8ubmF0aXZlRWxlbWVudF07XG5cdFx0XHRpZiAoIV9zcG90TGlnaHQgfHwgIV9tZXNoKSByZXR1cm47XG5cblx0XHRcdGNvbnN0IEEgPSBfc3BvdExpZ2h0LnBvc2l0aW9uO1xuXHRcdFx0Y29uc3QgQiA9IF9zcG90TGlnaHQudGFyZ2V0LnBvc2l0aW9uO1xuXG5cdFx0XHRkaXIuY29weShCKS5zdWIoQSk7XG5cdFx0XHRjb25zdCBsZW4gPSBkaXIubGVuZ3RoKCk7XG5cdFx0XHRkaXIubm9ybWFsaXplKCkubXVsdGlwbHlTY2FsYXIobGVuICogZGlzdGFuY2UoKSk7XG5cdFx0XHRwb3MuY29weShBKS5hZGQoZGlyKTtcblxuXHRcdFx0X21lc2gucG9zaXRpb24uY29weShwb3MpO1xuXHRcdFx0X21lc2gubG9va0F0KF9zcG90TGlnaHQudGFyZ2V0LnBvc2l0aW9uKTtcblx0XHR9KTtcblx0fSk7XG59XG5cbmludGVyZmFjZSBOZ3RzU2hhZG93TWVzaE9wdGlvbnMge1xuXHRkaXN0YW5jZTogbnVtYmVyO1xuXHRhbHBoYVRlc3Q6IG51bWJlcjtcblx0c2NhbGU6IG51bWJlcjtcblx0d2lkdGg6IG51bWJlcjtcblx0aGVpZ2h0OiBudW1iZXI7XG5cdG1hcD86IFRleHR1cmU7XG59XG5cbmNvbnN0IGRlZmF1bHRTcG90TGlnaHRTaGFkb3dPcHRpb25zOiBOZ3RzU2hhZG93TWVzaE9wdGlvbnMgPSB7XG5cdGRpc3RhbmNlOiAwLjQsXG5cdGFscGhhVGVzdDogMC41LFxuXHRzY2FsZTogMSxcblx0d2lkdGg6IDUxMixcblx0aGVpZ2h0OiA1MTIsXG59O1xuXG5AQ29tcG9uZW50KHtcblx0c2VsZWN0b3I6ICduZ3RzLXNwb3QtbGlnaHQtc2hhZG93LXNoYWRlcicsXG5cdHN0YW5kYWxvbmU6IHRydWUsXG5cdHRlbXBsYXRlOiBgXG5cdFx0PG5ndC1tZXNoICNtZXNoIFtzY2FsZV09XCJzY2FsZSgpXCIgW2Nhc3RTaGFkb3ddPVwidHJ1ZVwiPlxuXHRcdFx0PG5ndC1wbGFuZS1nZW9tZXRyeSAvPlxuXHRcdFx0PG5ndC1tZXNoLWJhc2ljLW1hdGVyaWFsXG5cdFx0XHRcdFt0cmFuc3BhcmVudF09XCJ0cnVlXCJcblx0XHRcdFx0W3NpZGVdPVwiRG91YmxlU2lkZVwiXG5cdFx0XHRcdFthbHBoYVRlc3RdPVwiYWxwaGFUZXN0KClcIlxuXHRcdFx0XHRbYWxwaGFNYXBdPVwidGV4dHVyZSgpXCJcblx0XHRcdFx0W29wYWNpdHldPVwiZGVidWcoKSA/IDEgOiAwXCJcblx0XHRcdD5cblx0XHRcdFx0PG5nLWNvbnRlbnQgLz5cblx0XHRcdDwvbmd0LW1lc2gtYmFzaWMtbWF0ZXJpYWw+XG5cdFx0PC9uZ3QtbWVzaD5cblx0YCxcblx0c2NoZW1hczogW0NVU1RPTV9FTEVNRU5UU19TQ0hFTUFdLFxuXHRjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbn0pXG5leHBvcnQgY2xhc3MgTmd0c1Nwb3RMaWdodFNoYWRvd1NoYWRlciB7XG5cdHByb3RlY3RlZCByZWFkb25seSBEb3VibGVTaWRlID0gRG91YmxlU2lkZTtcblxuXHRzaGFkZXIgPSBpbnB1dC5yZXF1aXJlZDxzdHJpbmc+KCk7XG5cdG9wdGlvbnMgPSBpbnB1dChkZWZhdWx0U3BvdExpZ2h0U2hhZG93T3B0aW9ucywgeyB0cmFuc2Zvcm06IG1lcmdlSW5wdXRzKGRlZmF1bHRTcG90TGlnaHRTaGFkb3dPcHRpb25zKSB9KTtcblxuXHRtZXNoID0gdmlld0NoaWxkLnJlcXVpcmVkPEVsZW1lbnRSZWY8TWVzaD4+KCdtZXNoJyk7XG5cblx0cHJpdmF0ZSBzcG90TGlnaHQgPSBpbmplY3QoTmd0c1Nwb3RMaWdodCk7XG5cdGRlYnVnID0gdGhpcy5zcG90TGlnaHQuZGVidWc7XG5cblx0c2NhbGUgPSBwaWNrKHRoaXMub3B0aW9ucywgJ3NjYWxlJyk7XG5cdGFscGhhVGVzdCA9IHBpY2sodGhpcy5vcHRpb25zLCAnYWxwaGFUZXN0Jyk7XG5cblx0cHJpdmF0ZSB3aWR0aCA9IHBpY2sodGhpcy5vcHRpb25zLCAnd2lkdGgnKTtcblx0cHJpdmF0ZSBoZWlnaHQgPSBwaWNrKHRoaXMub3B0aW9ucywgJ2hlaWdodCcpO1xuXHRwcml2YXRlIG1hcCA9IHBpY2sodGhpcy5vcHRpb25zLCAnbWFwJyk7XG5cdHByaXZhdGUgZGlzdGFuY2UgPSBwaWNrKHRoaXMub3B0aW9ucywgJ2Rpc3RhbmNlJyk7XG5cblx0cHJpdmF0ZSByZW5kZXJUYXJnZXQgPSBjb21wdXRlZCgoKSA9PiB7XG5cdFx0cmV0dXJuIG5ldyBXZWJHTFJlbmRlclRhcmdldCh0aGlzLndpZHRoKCksIHRoaXMuaGVpZ2h0KCksIHtcblx0XHRcdGZvcm1hdDogUkdCQUZvcm1hdCxcblx0XHRcdHN0ZW5jaWxCdWZmZXI6IGZhbHNlLFxuXHRcdFx0Ly8gZGVwdGhUZXh0dXJlOiBudWxsIVxuXHRcdH0pO1xuXHR9KTtcblxuXHR0ZXh0dXJlID0gY29tcHV0ZWQoKCkgPT4ge1xuXHRcdGNvbnN0IHJlbmRlclRhcmdldCA9IHRoaXMucmVuZGVyVGFyZ2V0KCk7XG5cdFx0cmVuZGVyVGFyZ2V0LnRleHR1cmUud3JhcFQgPSByZW5kZXJUYXJnZXQudGV4dHVyZS53cmFwUyA9IFJlcGVhdFdyYXBwaW5nO1xuXHRcdHJldHVybiByZW5kZXJUYXJnZXQudGV4dHVyZTtcblx0fSk7XG5cblx0cHJpdmF0ZSBmc1F1YWQgPSBjb21wdXRlZCgoKSA9PiB7XG5cdFx0cmV0dXJuIG5ldyBGdWxsU2NyZWVuUXVhZChcblx0XHRcdG5ldyBTaGFkZXJNYXRlcmlhbCh7XG5cdFx0XHRcdHVuaWZvcm1zOiB0aGlzLnVuaWZvcm1zLFxuXHRcdFx0XHR2ZXJ0ZXhTaGFkZXI6IC8qIGxhbmd1YWdlPWdsc2wgZ2xzbCAqLyBgXG4gICAgICAgICAgdmFyeWluZyB2ZWMyIHZVdjtcblxuICAgICAgICAgIHZvaWQgbWFpbigpIHtcbiAgICAgICAgICAgIHZVdiA9IHV2O1xuICAgICAgICAgICAgZ2xfUG9zaXRpb24gPSBwcm9qZWN0aW9uTWF0cml4ICogbW9kZWxWaWV3TWF0cml4ICogdmVjNChwb3NpdGlvbiwgMS4wKTtcbiAgICAgICAgICB9XG4gICAgICAgIGAsXG5cdFx0XHRcdGZyYWdtZW50U2hhZGVyOiB0aGlzLnNoYWRlcigpLFxuXHRcdFx0fSksXG5cdFx0KTtcblx0fSk7XG5cblx0cHJpdmF0ZSB1bmlmb3JtcyA9IHtcblx0XHR1U2hhZG93TWFwOiB7IHZhbHVlOiB1bmRlZmluZWQgYXMgVGV4dHVyZSB8IHVuZGVmaW5lZCB9LFxuXHRcdHVUaW1lOiB7IHZhbHVlOiAwIH0sXG5cdH07XG5cblx0Y29uc3RydWN0b3IoKSB7XG5cdFx0ZXh0ZW5kKHsgTWVzaCwgUGxhbmVHZW9tZXRyeSwgTWVzaEJhc2ljTWF0ZXJpYWwgfSk7XG5cblx0XHRpbmplY3RTcG90TGlnaHRDb21tb24odGhpcy5zcG90TGlnaHQuc3BvdExpZ2h0LCB0aGlzLm1lc2gsIHRoaXMud2lkdGgsIHRoaXMuaGVpZ2h0LCB0aGlzLmRpc3RhbmNlKTtcblxuXHRcdGVmZmVjdCgoKSA9PiB7XG5cdFx0XHR0aGlzLnVuaWZvcm1zLnVTaGFkb3dNYXAudmFsdWUgPSB0aGlzLm1hcCgpO1xuXHRcdH0pO1xuXG5cdFx0ZWZmZWN0KChvbkNsZWFudXApID0+IHtcblx0XHRcdGNvbnN0IGZzUXVhZCA9IHRoaXMuZnNRdWFkKCk7XG5cdFx0XHRvbkNsZWFudXAoKCkgPT4ge1xuXHRcdFx0XHRmc1F1YWQubWF0ZXJpYWwuZGlzcG9zZSgpO1xuXHRcdFx0XHRmc1F1YWQuZGlzcG9zZSgpO1xuXHRcdFx0fSk7XG5cdFx0fSk7XG5cblx0XHRlZmZlY3QoKG9uQ2xlYW51cCkgPT4ge1xuXHRcdFx0Y29uc3QgcmVuZGVyVGFyZ2V0ID0gdGhpcy5yZW5kZXJUYXJnZXQoKTtcblx0XHRcdG9uQ2xlYW51cCgoKSA9PiB7XG5cdFx0XHRcdHJlbmRlclRhcmdldC5kaXNwb3NlKCk7XG5cdFx0XHR9KTtcblx0XHR9KTtcblxuXHRcdGluamVjdEJlZm9yZVJlbmRlcigoeyBnbCwgZGVsdGEgfSkgPT4ge1xuXHRcdFx0dGhpcy51bmlmb3Jtcy51VGltZS52YWx1ZSArPSBkZWx0YTtcblxuXHRcdFx0Z2wuc2V0UmVuZGVyVGFyZ2V0KHRoaXMucmVuZGVyVGFyZ2V0KCkpO1xuXHRcdFx0dGhpcy5mc1F1YWQoKS5yZW5kZXIoZ2wpO1xuXHRcdFx0Z2wuc2V0UmVuZGVyVGFyZ2V0KG51bGwpO1xuXHRcdH0pO1xuXHR9XG59XG5cbkBDb21wb25lbnQoe1xuXHRzZWxlY3RvcjogJ25ndHMtc3BvdC1saWdodC1zaGFkb3ctbm8tc2hhZGVyJyxcblx0c3RhbmRhbG9uZTogdHJ1ZSxcblx0dGVtcGxhdGU6IGBcblx0XHQ8bmd0LW1lc2ggI21lc2ggW3NjYWxlXT1cInNjYWxlKClcIiBbY2FzdFNoYWRvd109XCJ0cnVlXCI+XG5cdFx0XHQ8bmd0LXBsYW5lLWdlb21ldHJ5IC8+XG5cdFx0XHQ8bmd0LW1lc2gtYmFzaWMtbWF0ZXJpYWxcblx0XHRcdFx0W3RyYW5zcGFyZW50XT1cInRydWVcIlxuXHRcdFx0XHRbc2lkZV09XCJEb3VibGVTaWRlXCJcblx0XHRcdFx0W2FscGhhVGVzdF09XCJhbHBoYVRlc3QoKVwiXG5cdFx0XHRcdFthbHBoYU1hcF09XCJtYXAoKVwiXG5cdFx0XHRcdFtvcGFjaXR5XT1cImRlYnVnKCkgPyAxIDogMFwiXG5cdFx0XHQ+XG5cdFx0XHRcdDxuZy1jb250ZW50IC8+XG5cdFx0XHQ8L25ndC1tZXNoLWJhc2ljLW1hdGVyaWFsPlxuXHRcdDwvbmd0LW1lc2g+XG5cdGAsXG5cdHNjaGVtYXM6IFtDVVNUT01fRUxFTUVOVFNfU0NIRU1BXSxcblx0Y2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG59KVxuZXhwb3J0IGNsYXNzIE5ndHNTcG90TGlnaHRTaGFkb3dOb1NoYWRlciB7XG5cdHByb3RlY3RlZCByZWFkb25seSBEb3VibGVTaWRlID0gRG91YmxlU2lkZTtcblxuXHRvcHRpb25zID0gaW5wdXQoZGVmYXVsdFNwb3RMaWdodFNoYWRvd09wdGlvbnMsIHsgdHJhbnNmb3JtOiBtZXJnZUlucHV0cyhkZWZhdWx0U3BvdExpZ2h0U2hhZG93T3B0aW9ucykgfSk7XG5cblx0bWVzaCA9IHZpZXdDaGlsZC5yZXF1aXJlZDxFbGVtZW50UmVmPE1lc2g+PignbWVzaCcpO1xuXG5cdHByaXZhdGUgc3BvdExpZ2h0ID0gaW5qZWN0KE5ndHNTcG90TGlnaHQpO1xuXHRkZWJ1ZyA9IHRoaXMuc3BvdExpZ2h0LmRlYnVnO1xuXG5cdGFscGhhVGVzdCA9IHBpY2sodGhpcy5vcHRpb25zLCAnYWxwaGFUZXN0Jyk7XG5cdHNjYWxlID0gcGljayh0aGlzLm9wdGlvbnMsICdzY2FsZScpO1xuXHRtYXAgPSBjb21wdXRlZCgoKSA9PiB7XG5cdFx0Y29uc3QgbWFwID0gdGhpcy5vcHRpb25zKCkubWFwO1xuXHRcdGlmIChtYXApIHtcblx0XHRcdG1hcC53cmFwUyA9IG1hcC53cmFwVCA9IFJlcGVhdFdyYXBwaW5nO1xuXHRcdH1cblx0XHRyZXR1cm4gbWFwO1xuXHR9KTtcblxuXHRwcml2YXRlIHdpZHRoID0gcGljayh0aGlzLm9wdGlvbnMsICd3aWR0aCcpO1xuXHRwcml2YXRlIGhlaWdodCA9IHBpY2sodGhpcy5vcHRpb25zLCAnaGVpZ2h0Jyk7XG5cdHByaXZhdGUgZGlzdGFuY2UgPSBwaWNrKHRoaXMub3B0aW9ucywgJ2Rpc3RhbmNlJyk7XG5cblx0Y29uc3RydWN0b3IoKSB7XG5cdFx0ZXh0ZW5kKHsgTWVzaCwgUGxhbmVHZW9tZXRyeSwgTWVzaEJhc2ljTWF0ZXJpYWwgfSk7XG5cblx0XHRpbmplY3RTcG90TGlnaHRDb21tb24odGhpcy5zcG90TGlnaHQuc3BvdExpZ2h0LCB0aGlzLm1lc2gsIHRoaXMud2lkdGgsIHRoaXMuaGVpZ2h0LCB0aGlzLmRpc3RhbmNlKTtcblx0fVxufVxuXG5AQ29tcG9uZW50KHtcblx0c2VsZWN0b3I6ICduZ3RzLXNwb3QtbGlnaHQtc2hhZG93Jyxcblx0c3RhbmRhbG9uZTogdHJ1ZSxcblx0dGVtcGxhdGU6IGBcblx0XHRAaWYgKHNoYWRlcigpOyBhcyBzaGFkZXIpIHtcblx0XHRcdDxuZ3RzLXNwb3QtbGlnaHQtc2hhZG93LXNoYWRlciBbc2hhZGVyXT1cInNoYWRlclwiIFtvcHRpb25zXT1cIm9wdGlvbnMoKVwiIC8+XG5cdFx0fSBAZWxzZSB7XG5cdFx0XHQ8bmd0cy1zcG90LWxpZ2h0LXNoYWRvdy1uby1zaGFkZXIgW29wdGlvbnNdPVwib3B0aW9ucygpXCIgLz5cblx0XHR9XG5cdGAsXG5cdGltcG9ydHM6IFtOZ3RzU3BvdExpZ2h0U2hhZG93U2hhZGVyLCBOZ3RzU3BvdExpZ2h0U2hhZG93Tm9TaGFkZXJdLFxuXHRjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbn0pXG5leHBvcnQgY2xhc3MgTmd0c1Nwb3RMaWdodFNoYWRvdyB7XG5cdHNoYWRlciA9IGlucHV0PHN0cmluZz4oKTtcblx0b3B0aW9ucyA9IGlucHV0KGRlZmF1bHRTcG90TGlnaHRTaGFkb3dPcHRpb25zLCB7IHRyYW5zZm9ybTogbWVyZ2VJbnB1dHMoZGVmYXVsdFNwb3RMaWdodFNoYWRvd09wdGlvbnMpIH0pO1xufVxuXG5jb25zdCBkZWZhdWx0T3B0aW9uczogTmd0c1Nwb3RMaWdodE9wdGlvbnMgPSB7XG5cdG9wYWNpdHk6IDEsXG5cdGNvbG9yOiAnd2hpdGUnLFxuXHRkaXN0YW5jZTogNSxcblx0YW5nbGU6IDAuMTUsXG5cdGF0dGVudWF0aW9uOiA1LFxuXHRhbmdsZVBvd2VyOiA1LFxuXHR2b2x1bWV0cmljOiB0cnVlLFxuXHRkZWJ1ZzogZmFsc2UsXG59O1xuXG5AQ29tcG9uZW50KHtcblx0c2VsZWN0b3I6ICduZ3RzLXNwb3QtbGlnaHQnLFxuXHRzdGFuZGFsb25lOiB0cnVlLFxuXHR0ZW1wbGF0ZTogYFxuXHRcdDxuZ3QtZ3JvdXA+XG5cdFx0XHQ8bmd0LXNwb3QtbGlnaHRcblx0XHRcdFx0I3Nwb3RMaWdodFxuXHRcdFx0XHRbYW5nbGVdPVwiYW5nbGUoKVwiXG5cdFx0XHRcdFtjb2xvcl09XCJjb2xvcigpXCJcblx0XHRcdFx0W2Rpc3RhbmNlXT1cImRpc3RhbmNlKClcIlxuXHRcdFx0XHRbY2FzdFNoYWRvd109XCJ0cnVlXCJcblx0XHRcdFx0W3BhcmFtZXRlcnNdPVwicGFyYW1ldGVycygpXCJcblx0XHRcdD5cblx0XHRcdFx0QGlmICh2b2x1bWV0cmljKCkpIHtcblx0XHRcdFx0XHQ8bmd0cy12b2x1bWV0cmljLW1lc2ggW29wdGlvbnNdPVwidm9sdW1ldHJpY09wdGlvbnMoKVwiIC8+XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRAaWYgKGRlYnVnKCkpIHtcblx0XHRcdFx0XHQ8bmd0cy1oZWxwZXIgW3R5cGVdPVwiU3BvdExpZ2h0SGVscGVyXCIgLz5cblx0XHRcdFx0fVxuXHRcdFx0PC9uZ3Qtc3BvdC1saWdodD5cblx0XHRcdDxuZy1jb250ZW50IC8+XG5cdFx0PC9uZ3QtZ3JvdXA+XG5cdGAsXG5cdHNjaGVtYXM6IFtDVVNUT01fRUxFTUVOVFNfU0NIRU1BXSxcblx0Y2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG5cdGltcG9ydHM6IFtOZ3RBcmdzLCBOZ3RzVm9sdW1ldHJpY01lc2gsIE5ndHNIZWxwZXJdLFxufSlcbmV4cG9ydCBjbGFzcyBOZ3RzU3BvdExpZ2h0IHtcblx0cHJvdGVjdGVkIHJlYWRvbmx5IFNwb3RMaWdodEhlbHBlciA9IFNwb3RMaWdodEhlbHBlcjtcblxuXHRvcHRpb25zID0gaW5wdXQoZGVmYXVsdE9wdGlvbnMsIHsgdHJhbnNmb3JtOiBtZXJnZUlucHV0cyhkZWZhdWx0T3B0aW9ucykgfSk7XG5cdHBhcmFtZXRlcnMgPSBvbWl0KHRoaXMub3B0aW9ucywgW1xuXHRcdCdvcGFjaXR5Jyxcblx0XHQncmFkaXVzVG9wJyxcblx0XHQncmFkaXVzQm90dG9tJyxcblx0XHQnZGVwdGhCdWZmZXInLFxuXHRcdCdjb2xvcicsXG5cdFx0J2Rpc3RhbmNlJyxcblx0XHQnYW5nbGUnLFxuXHRcdCdhdHRlbnVhdGlvbicsXG5cdFx0J2FuZ2xlUG93ZXInLFxuXHRcdCd2b2x1bWV0cmljJyxcblx0XHQnZGVidWcnLFxuXHRdKTtcblx0dm9sdW1ldHJpY09wdGlvbnMgPSBwaWNrKHRoaXMub3B0aW9ucywgW1xuXHRcdCdvcGFjaXR5Jyxcblx0XHQncmFkaXVzVG9wJyxcblx0XHQncmFkaXVzQm90dG9tJyxcblx0XHQnZGVwdGhCdWZmZXInLFxuXHRcdCdjb2xvcicsXG5cdFx0J2Rpc3RhbmNlJyxcblx0XHQnYW5nbGUnLFxuXHRcdCdhdHRlbnVhdGlvbicsXG5cdFx0J2FuZ2xlUG93ZXInLFxuXHRcdCdkZWJ1ZycsXG5cdF0pO1xuXG5cdHNwb3RMaWdodCA9IHZpZXdDaGlsZC5yZXF1aXJlZDxFbGVtZW50UmVmPFNwb3RMaWdodD4+KCdzcG90TGlnaHQnKTtcblxuXHRkZWJ1ZyA9IHBpY2sodGhpcy5vcHRpb25zLCAnZGVidWcnKTtcblx0YW5nbGUgPSBwaWNrKHRoaXMub3B0aW9ucywgJ2FuZ2xlJyk7XG5cdGNvbG9yID0gcGljayh0aGlzLm9wdGlvbnMsICdjb2xvcicpO1xuXHRkaXN0YW5jZSA9IHBpY2sodGhpcy5vcHRpb25zLCAnZGlzdGFuY2UnKTtcblx0dm9sdW1ldHJpYyA9IHBpY2sodGhpcy5vcHRpb25zLCAndm9sdW1ldHJpYycpO1xuXG5cdGNvbnN0cnVjdG9yKCkge1xuXHRcdGV4dGVuZCh7IEdyb3VwLCBTcG90TGlnaHQgfSk7XG5cdH1cbn1cbiJdfQ==
|