angular-three-cannon 2.0.0-beta.242 → 2.0.0-beta.244

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.
@@ -1,18 +1,17 @@
1
- import { ElementRef, Injector } from '@angular/core';
1
+ import { ElementRef, Injector, Signal } from '@angular/core';
2
2
  import { BodyShapeType } from '@pmndrs/cannon-worker-api';
3
3
  import { Object3D } from 'three';
4
- import { NgtcArgFn, NgtcBodyPropsMap, NgtcBodyReturn, NgtcGetByIndex } from './types';
4
+ import { NgtcArgFn, NgtcBodyPropsMap, NgtcBodyPublicApi, NgtcGetByIndex } from './types';
5
5
  export interface NgtcBodyOptions<TShape extends BodyShapeType> {
6
6
  transformArgs?: NgtcArgFn<NgtcBodyPropsMap[TShape]>;
7
- ref?: ElementRef<Object3D>;
8
7
  injector?: Injector;
9
8
  }
10
- export declare const injectBox: <TObject extends Object3D<import("three").Object3DEventMap>>(getPropFn: NgtcGetByIndex<import("@pmndrs/cannon-worker-api").BoxProps>, options?: NgtcBodyOptions<"Box"> | undefined) => NgtcBodyReturn<TObject>;
11
- export declare const injectConvexPolyhedron: <TObject extends Object3D<import("three").Object3DEventMap>>(getPropFn: NgtcGetByIndex<import("@pmndrs/cannon-worker-api").ConvexPolyhedronProps>, options?: NgtcBodyOptions<"ConvexPolyhedron"> | undefined) => NgtcBodyReturn<TObject>;
12
- export declare const injectCylinder: <TObject extends Object3D<import("three").Object3DEventMap>>(getPropFn: NgtcGetByIndex<import("@pmndrs/cannon-worker-api").CylinderProps>, options?: NgtcBodyOptions<"Cylinder"> | undefined) => NgtcBodyReturn<TObject>;
13
- export declare const injectHeightfield: <TObject extends Object3D<import("three").Object3DEventMap>>(getPropFn: NgtcGetByIndex<import("@pmndrs/cannon-worker-api").HeightfieldProps>, options?: NgtcBodyOptions<"Heightfield"> | undefined) => NgtcBodyReturn<TObject>;
14
- export declare const injectParticle: <TObject extends Object3D<import("three").Object3DEventMap>>(getPropFn: NgtcGetByIndex<import("@pmndrs/cannon-worker-api").ParticleProps>, options?: NgtcBodyOptions<"Particle"> | undefined) => NgtcBodyReturn<TObject>;
15
- export declare const injectPlane: <TObject extends Object3D<import("three").Object3DEventMap>>(getPropFn: NgtcGetByIndex<import("@pmndrs/cannon-worker-api").PlaneProps>, options?: NgtcBodyOptions<"Plane"> | undefined) => NgtcBodyReturn<TObject>;
16
- export declare const injectSphere: <TObject extends Object3D<import("three").Object3DEventMap>>(getPropFn: NgtcGetByIndex<import("@pmndrs/cannon-worker-api").SphereProps>, options?: NgtcBodyOptions<"Sphere"> | undefined) => NgtcBodyReturn<TObject>;
17
- export declare const injectTrimesh: <TObject extends Object3D<import("three").Object3DEventMap>>(getPropFn: NgtcGetByIndex<import("@pmndrs/cannon-worker-api").TrimeshProps>, options?: NgtcBodyOptions<"Trimesh"> | undefined) => NgtcBodyReturn<TObject>;
18
- export declare const injectCompound: <TObject extends Object3D<import("three").Object3DEventMap>>(getPropFn: NgtcGetByIndex<import("@pmndrs/cannon-worker-api").CompoundBodyProps>, options?: NgtcBodyOptions<"Compound"> | undefined) => NgtcBodyReturn<TObject>;
9
+ export declare const injectBox: <TObject extends Object3D<import("three").Object3DEventMap>>(getPropFn: NgtcGetByIndex<import("@pmndrs/cannon-worker-api").BoxProps>, ref: TObject | ElementRef<TObject> | Signal<TObject | ElementRef<TObject> | undefined>, options?: NgtcBodyOptions<"Box"> | undefined) => Signal<NgtcBodyPublicApi | null>;
10
+ export declare const injectConvexPolyhedron: <TObject extends Object3D<import("three").Object3DEventMap>>(getPropFn: NgtcGetByIndex<import("@pmndrs/cannon-worker-api").ConvexPolyhedronProps>, ref: TObject | ElementRef<TObject> | Signal<TObject | ElementRef<TObject> | undefined>, options?: NgtcBodyOptions<"ConvexPolyhedron"> | undefined) => Signal<NgtcBodyPublicApi | null>;
11
+ export declare const injectCylinder: <TObject extends Object3D<import("three").Object3DEventMap>>(getPropFn: NgtcGetByIndex<import("@pmndrs/cannon-worker-api").CylinderProps>, ref: TObject | ElementRef<TObject> | Signal<TObject | ElementRef<TObject> | undefined>, options?: NgtcBodyOptions<"Cylinder"> | undefined) => Signal<NgtcBodyPublicApi | null>;
12
+ export declare const injectHeightfield: <TObject extends Object3D<import("three").Object3DEventMap>>(getPropFn: NgtcGetByIndex<import("@pmndrs/cannon-worker-api").HeightfieldProps>, ref: TObject | ElementRef<TObject> | Signal<TObject | ElementRef<TObject> | undefined>, options?: NgtcBodyOptions<"Heightfield"> | undefined) => Signal<NgtcBodyPublicApi | null>;
13
+ export declare const injectParticle: <TObject extends Object3D<import("three").Object3DEventMap>>(getPropFn: NgtcGetByIndex<import("@pmndrs/cannon-worker-api").ParticleProps>, ref: TObject | ElementRef<TObject> | Signal<TObject | ElementRef<TObject> | undefined>, options?: NgtcBodyOptions<"Particle"> | undefined) => Signal<NgtcBodyPublicApi | null>;
14
+ export declare const injectPlane: <TObject extends Object3D<import("three").Object3DEventMap>>(getPropFn: NgtcGetByIndex<import("@pmndrs/cannon-worker-api").PlaneProps>, ref: TObject | ElementRef<TObject> | Signal<TObject | ElementRef<TObject> | undefined>, options?: NgtcBodyOptions<"Plane"> | undefined) => Signal<NgtcBodyPublicApi | null>;
15
+ export declare const injectSphere: <TObject extends Object3D<import("three").Object3DEventMap>>(getPropFn: NgtcGetByIndex<import("@pmndrs/cannon-worker-api").SphereProps>, ref: TObject | ElementRef<TObject> | Signal<TObject | ElementRef<TObject> | undefined>, options?: NgtcBodyOptions<"Sphere"> | undefined) => Signal<NgtcBodyPublicApi | null>;
16
+ export declare const injectTrimesh: <TObject extends Object3D<import("three").Object3DEventMap>>(getPropFn: NgtcGetByIndex<import("@pmndrs/cannon-worker-api").TrimeshProps>, ref: TObject | ElementRef<TObject> | Signal<TObject | ElementRef<TObject> | undefined>, options?: NgtcBodyOptions<"Trimesh"> | undefined) => Signal<NgtcBodyPublicApi | null>;
17
+ export declare const injectCompound: <TObject extends Object3D<import("three").Object3DEventMap>>(getPropFn: NgtcGetByIndex<import("@pmndrs/cannon-worker-api").CompoundBodyProps>, ref: TObject | ElementRef<TObject> | Signal<TObject | ElementRef<TObject> | undefined>, options?: NgtcBodyOptions<"Compound"> | undefined) => Signal<NgtcBodyPublicApi | null>;
@@ -1,6 +1,5 @@
1
1
  import { AtomicName, AtomicProps, BodyProps, BoxProps, CompoundBodyProps, ConvexPolyhedronProps, CylinderProps, HeightfieldProps, ParticleProps, PlaneProps, Quad, SphereProps, TrimeshProps, Triplet, VectorName } from '@pmndrs/cannon-worker-api';
2
- import { NgtInjectedRef } from 'angular-three';
3
- import { Euler, Object3D, Quaternion, Vector3 } from 'three';
2
+ import { Euler, Quaternion, Vector3 } from 'three';
4
3
  export interface NgtcAtomicApi<K extends AtomicName> {
5
4
  set: (value: AtomicProps[K]) => void;
6
5
  subscribe: (callback: (value: AtomicProps[K]) => void) => () => void;
@@ -35,11 +34,7 @@ export type NgtcWorkerApi = {
35
34
  export interface NgtcBodyPublicApi extends NgtcWorkerApi {
36
35
  at: (index: number) => NgtcWorkerApi;
37
36
  }
38
- export interface NgtcBodyReturn<TObject extends Object3D> {
39
- ref: NgtInjectedRef<TObject>;
40
- api: NgtcBodyPublicApi;
41
- }
42
- export type NgtcBodyPropsMap = {
37
+ export interface NgtcBodyPropsMap {
43
38
  Plane: PlaneProps;
44
39
  Box: BoxProps;
45
40
  Particle: ParticleProps;
@@ -49,6 +44,6 @@ export type NgtcBodyPropsMap = {
49
44
  Heightfield: HeightfieldProps;
50
45
  ConvexPolyhedron: ConvexPolyhedronProps;
51
46
  Compound: CompoundBodyProps;
52
- };
47
+ }
53
48
  export type NgtcGetByIndex<T extends BodyProps> = (index: number) => T;
54
49
  export type NgtcArgFn<T extends BodyProps> = (args: NonNullable<T['args']>) => typeof args;
@@ -1,13 +1,11 @@
1
- import { ElementRef } from '@angular/core';
2
1
  import { BodyProps, BoxProps, CannonWorkerAPI, CompoundBodyProps, ConvexPolyhedronArgs, CylinderArgs, HeightfieldArgs, ParticleProps, PlaneProps, PropValue, SphereArgs, SubscriptionName, SubscriptionTarget, Subscriptions, TrimeshArgs, Triplet } from '@pmndrs/cannon-worker-api';
3
- import { NgtInjectedRef } from 'angular-three';
4
2
  import { NgtcCannonEvents, NgtcPhysicsApi } from 'angular-three-cannon';
5
3
  import { Object3D } from 'three';
6
4
  import { NgtcWorkerApi } from './types';
7
- export declare function createSubscribe<T extends SubscriptionName>(ref: ElementRef<Object3D>, worker: CannonWorkerAPI, subscriptions: Subscriptions, type: T, index?: number, target?: SubscriptionTarget): (callback: (value: PropValue<T>) => void) => () => void;
5
+ export declare function createSubscribe<T extends SubscriptionName>(body: Object3D, worker: CannonWorkerAPI, subscriptions: Subscriptions, type: T, index?: number, target?: SubscriptionTarget): (callback: (value: PropValue<T>) => void) => () => void;
8
6
  export declare function prepare(object: Object3D, { position, rotation, userData }: BodyProps): void;
9
7
  export declare function setupCollision(events: NgtcCannonEvents, { onCollide, onCollideBegin, onCollideEnd }: Partial<BodyProps>, uuid: string): void;
10
- export declare function makeBodyApi(bodyRef: NgtInjectedRef<Object3D>, { subscriptions, bodies, scaleOverrides, worker }: NgtcPhysicsApi): {
8
+ export declare function makeBodyApi(body: Object3D, worker: CannonWorkerAPI, { subscriptions, scaleOverrides }: NgtcPhysicsApi): {
11
9
  at: (index: number) => NgtcWorkerApi;
12
10
  allowSleep: import("./types").NgtcAtomicApi<"allowSleep">;
13
11
  angularDamping: import("./types").NgtcAtomicApi<"angularDamping">;
@@ -1,6 +1,5 @@
1
- import { ElementRef, Injector } from '@angular/core';
1
+ import { ElementRef, Injector, Signal } from '@angular/core';
2
2
  import { ConeTwistConstraintOpts, ConstraintTypes, DistanceConstraintOpts, HingeConstraintOpts, LockConstraintOpts, PointToPointConstraintOpts } from '@pmndrs/cannon-worker-api';
3
- import { NgtInjectedRef } from 'angular-three';
4
3
  import { Object3D } from 'three';
5
4
  export interface NgtcConstraintApi {
6
5
  disable: () => void;
@@ -14,11 +13,6 @@ export interface NgtcHingeConstraintApi extends NgtcConstraintApi {
14
13
  setMotorSpeed: (value: number) => void;
15
14
  }
16
15
  export type NgtcConstraintORHingeApi<T extends 'Hinge' | ConstraintTypes> = T extends ConstraintTypes ? NgtcConstraintApi : NgtcHingeConstraintApi;
17
- export interface NgtcConstraintReturn<T extends 'Hinge' | ConstraintTypes, TObjectA extends Object3D = Object3D, TObjectB extends Object3D = Object3D> {
18
- bodyA: NgtInjectedRef<TObjectA>;
19
- bodyB: NgtInjectedRef<TObjectB>;
20
- api: NgtcConstraintORHingeApi<T>;
21
- }
22
16
  export type NgtcConstraintOptionsMap = {
23
17
  ConeTwist: ConeTwistConstraintOpts;
24
18
  PointToPoint: PointToPointConstraintOpts;
@@ -31,8 +25,8 @@ export type NgtcConstraintOptions<TConstraintType extends 'Hinge' | ConstraintTy
31
25
  disableOnStart?: boolean;
32
26
  options?: NgtcConstraintOptionsMap[TConstraintType];
33
27
  };
34
- export declare const injectPointToPoint: <A extends Object3D<import("three").Object3DEventMap> = Object3D<import("three").Object3DEventMap>, B extends Object3D<import("three").Object3DEventMap> = Object3D<import("three").Object3DEventMap>>(bodyA: A | ElementRef<A>, bodyB: B | ElementRef<B>, options?: NgtcConstraintOptions<"PointToPoint"> | undefined) => NgtcConstraintReturn<"PointToPoint", A, B>;
35
- export declare const injectConeTwist: <A extends Object3D<import("three").Object3DEventMap> = Object3D<import("three").Object3DEventMap>, B extends Object3D<import("three").Object3DEventMap> = Object3D<import("three").Object3DEventMap>>(bodyA: A | ElementRef<A>, bodyB: B | ElementRef<B>, options?: NgtcConstraintOptions<"ConeTwist"> | undefined) => NgtcConstraintReturn<"ConeTwist", A, B>;
36
- export declare const injectDistance: <A extends Object3D<import("three").Object3DEventMap> = Object3D<import("three").Object3DEventMap>, B extends Object3D<import("three").Object3DEventMap> = Object3D<import("three").Object3DEventMap>>(bodyA: A | ElementRef<A>, bodyB: B | ElementRef<B>, options?: NgtcConstraintOptions<"Distance"> | undefined) => NgtcConstraintReturn<"Distance", A, B>;
37
- export declare const injectLock: <A extends Object3D<import("three").Object3DEventMap> = Object3D<import("three").Object3DEventMap>, B extends Object3D<import("three").Object3DEventMap> = Object3D<import("three").Object3DEventMap>>(bodyA: A | ElementRef<A>, bodyB: B | ElementRef<B>, options?: NgtcConstraintOptions<"Lock"> | undefined) => NgtcConstraintReturn<"Lock", A, B>;
38
- export declare const injectHinge: <A extends Object3D<import("three").Object3DEventMap> = Object3D<import("three").Object3DEventMap>, B extends Object3D<import("three").Object3DEventMap> = Object3D<import("three").Object3DEventMap>>(bodyA: A | ElementRef<A>, bodyB: B | ElementRef<B>, options?: NgtcConstraintOptions<"Hinge"> | undefined) => NgtcConstraintReturn<"Hinge", A, B>;
28
+ export declare const injectPointToPoint: <A extends Object3D<import("three").Object3DEventMap> = Object3D<import("three").Object3DEventMap>, B extends Object3D<import("three").Object3DEventMap> = Object3D<import("three").Object3DEventMap>>(bodyA: A | ElementRef<A> | Signal<A | ElementRef<A> | undefined>, bodyB: B | ElementRef<B> | Signal<B | ElementRef<B> | undefined>, options?: NgtcConstraintOptions<"PointToPoint"> | undefined) => Signal<NgtcConstraintApi | null>;
29
+ export declare const injectConeTwist: <A extends Object3D<import("three").Object3DEventMap> = Object3D<import("three").Object3DEventMap>, B extends Object3D<import("three").Object3DEventMap> = Object3D<import("three").Object3DEventMap>>(bodyA: A | ElementRef<A> | Signal<A | ElementRef<A> | undefined>, bodyB: B | ElementRef<B> | Signal<B | ElementRef<B> | undefined>, options?: NgtcConstraintOptions<"ConeTwist"> | undefined) => Signal<NgtcConstraintApi | null>;
30
+ export declare const injectDistance: <A extends Object3D<import("three").Object3DEventMap> = Object3D<import("three").Object3DEventMap>, B extends Object3D<import("three").Object3DEventMap> = Object3D<import("three").Object3DEventMap>>(bodyA: A | ElementRef<A> | Signal<A | ElementRef<A> | undefined>, bodyB: B | ElementRef<B> | Signal<B | ElementRef<B> | undefined>, options?: NgtcConstraintOptions<"Distance"> | undefined) => Signal<NgtcConstraintApi | null>;
31
+ export declare const injectLock: <A extends Object3D<import("three").Object3DEventMap> = Object3D<import("three").Object3DEventMap>, B extends Object3D<import("three").Object3DEventMap> = Object3D<import("three").Object3DEventMap>>(bodyA: A | ElementRef<A> | Signal<A | ElementRef<A> | undefined>, bodyB: B | ElementRef<B> | Signal<B | ElementRef<B> | undefined>, options?: NgtcConstraintOptions<"Lock"> | undefined) => Signal<NgtcConstraintApi | null>;
32
+ export declare const injectHinge: <A extends Object3D<import("three").Object3DEventMap> = Object3D<import("three").Object3DEventMap>, B extends Object3D<import("three").Object3DEventMap> = Object3D<import("three").Object3DEventMap>>(bodyA: A | ElementRef<A> | Signal<A | ElementRef<A> | undefined>, bodyB: B | ElementRef<B> | Signal<B | ElementRef<B> | undefined>, options?: NgtcConstraintOptions<"Hinge"> | undefined) => Signal<NgtcConstraintApi | null>;
@@ -1,5 +1,5 @@
1
- import { afterNextRender } from '@angular/core';
2
- import { injectNgtRef } from 'angular-three';
1
+ import { afterNextRender, computed, isSignal, signal, untracked, } from '@angular/core';
2
+ import { resolveRef } from 'angular-three';
3
3
  import { injectPhysicsApi } from 'angular-three-cannon';
4
4
  import { injectNgtcDebugApi } from 'angular-three-cannon/debug';
5
5
  import { assertInjector } from 'ngxtension/assert-injector';
@@ -7,9 +7,9 @@ import { injectAutoEffect } from 'ngxtension/auto-effect';
7
7
  import { DynamicDrawUsage, InstancedMesh, Object3D } from 'three';
8
8
  import { defaultTransformArgs, makeBodyApi, prepare, setupCollision } from './utils';
9
9
  function createInjectBody(type) {
10
- return (getPropFn, options) => injectBody(type, getPropFn, options);
10
+ return (getPropFn, ref, options) => injectBody(type, getPropFn, ref, options);
11
11
  }
12
- function injectBody(type, getPropFn, { transformArgs, ref, injector } = {}) {
12
+ function injectBody(type, getPropFn, ref, { transformArgs, injector } = {}) {
13
13
  return assertInjector(injectBody, injector, () => {
14
14
  const physicsApi = injectPhysicsApi({ optional: true });
15
15
  if (!physicsApi) {
@@ -19,17 +19,31 @@ function injectBody(type, getPropFn, { transformArgs, ref, injector } = {}) {
19
19
  const debugApi = injectNgtcDebugApi({ optional: true });
20
20
  const { add: addToDebug, remove: removeFromDebug } = debugApi || {};
21
21
  const transform = transformArgs ?? defaultTransformArgs[type];
22
- const bodyRef = injectNgtRef(ref);
23
- const bodyResult = { ref: bodyRef, api: makeBodyApi(bodyRef, physicsApi) };
22
+ const bodyRef = isSignal(ref) ? ref : signal(ref);
23
+ const body = computed(() => resolveRef(bodyRef()));
24
+ const api = computed(() => {
25
+ const _body = body();
26
+ if (!_body)
27
+ return null;
28
+ const { worker, ...rest } = physicsApi;
29
+ if (!worker())
30
+ return null;
31
+ return makeBodyApi(_body, worker(), physicsApi);
32
+ });
24
33
  afterNextRender(() => {
25
34
  autoEffect(() => {
26
35
  const currentWorker = physicsApi.worker();
27
36
  if (!currentWorker)
28
37
  return;
29
- if (!bodyResult.ref.nativeElement) {
30
- bodyResult.ref.nativeElement = new Object3D();
38
+ const object = body();
39
+ if (!isSignal(ref) && !object) {
40
+ untracked(() => {
41
+ bodyRef.set(resolveRef(ref));
42
+ });
43
+ return;
31
44
  }
32
- const object = bodyResult.ref.nativeElement;
45
+ if (!object)
46
+ return;
33
47
  const [uuid, props] = (() => {
34
48
  let uuids = [];
35
49
  let temp;
@@ -79,7 +93,7 @@ function injectBody(type, getPropFn, { transformArgs, ref, injector } = {}) {
79
93
  };
80
94
  });
81
95
  });
82
- return bodyResult;
96
+ return api;
83
97
  });
84
98
  }
85
99
  export const injectBox = createInjectBody('Box');
@@ -91,4 +105,4 @@ export const injectPlane = createInjectBody('Plane');
91
105
  export const injectSphere = createInjectBody('Sphere');
92
106
  export const injectTrimesh = createInjectBody('Trimesh');
93
107
  export const injectCompound = createInjectBody('Compound');
94
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYm9keS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvY2Fubm9uL2JvZHkvc3JjL2xpYi9ib2R5LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBd0IsZUFBZSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRXRFLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDN0MsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDeEQsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDaEUsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQzVELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQzFELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxhQUFhLEVBQUUsUUFBUSxFQUFFLE1BQU0sT0FBTyxDQUFDO0FBRWxFLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxXQUFXLEVBQUUsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLFNBQVMsQ0FBQztBQVFyRixTQUFTLGdCQUFnQixDQUErQixJQUFZO0lBQ25FLE9BQU8sQ0FDTixTQUFtRCxFQUNuRCxPQUFpQyxFQUNoQyxFQUFFLENBQUMsVUFBVSxDQUFrQixJQUFJLEVBQUUsU0FBUyxFQUFFLE9BQU8sQ0FBQyxDQUFDO0FBQzVELENBQUM7QUFFRCxTQUFTLFVBQVUsQ0FDbEIsSUFBWSxFQUNaLFNBQW1ELEVBQ25ELEVBQUUsYUFBYSxFQUFFLEdBQUcsRUFBRSxRQUFRLEtBQThCLEVBQUU7SUFFOUQsT0FBTyxjQUFjLENBQUMsVUFBVSxFQUFFLFFBQVEsRUFBRSxHQUFHLEVBQUU7UUFDaEQsTUFBTSxVQUFVLEdBQUcsZ0JBQWdCLENBQUMsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztRQUV4RCxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7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QyxDQUFDO0FBQzNFLE1BQU0sQ0FBQyxNQUFNLGNBQWMsR0FBRyxnQkFBZ0IsQ0FBQyxVQUFVLENBQUMsQ0FBQztBQUMzRCxNQUFNLENBQUMsTUFBTSxpQkFBaUIsR0FBRyxnQkFBZ0IsQ0FBQyxhQUFhLENBQUMsQ0FBQztBQUNqRSxNQUFNLENBQUMsTUFBTSxjQUFjLEdBQUcsZ0JBQWdCLENBQUMsVUFBVSxDQUFDLENBQUM7QUFDM0QsTUFBTSxDQUFDLE1BQU0sV0FBVyxHQUFHLGdCQUFnQixDQUFDLE9BQU8sQ0FBQyxDQUFDO0FBQ3JELE1BQU0sQ0FBQyxNQUFNLFlBQVksR0FBRyxnQkFBZ0IsQ0FBQyxRQUFRLENBQUMsQ0FBQztBQUN2RCxNQUFNLENBQUMsTUFBTSxhQUFhLEdBQUcsZ0JBQWdCLENBQUMsU0FBUyxDQUFDLENBQUM7QUFDekQsTUFBTSxDQUFDLE1BQU0sY0FBYyxHQUFHLGdCQUFnQixDQUFDLFVBQVUsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRWxlbWVudFJlZiwgSW5qZWN0b3IsIGFmdGVyTmV4dFJlbmRlciB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQm9keVNoYXBlVHlwZSB9IGZyb20gJ0BwbW5kcnMvY2Fubm9uLXdvcmtlci1hcGknO1xuaW1wb3J0IHsgaW5qZWN0Tmd0UmVmIH0gZnJvbSAnYW5ndWxhci10aHJlZSc7XG5pbXBvcnQgeyBpbmplY3RQaHlzaWNzQXBpIH0gZnJvbSAnYW5ndWxhci10aHJlZS1jYW5ub24nO1xuaW1wb3J0IHsgaW5qZWN0Tmd0Y0RlYnVnQXBpIH0gZnJvbSAnYW5ndWxhci10aHJlZS1jYW5ub24vZGVidWcnO1xuaW1wb3J0IHsgYXNzZXJ0SW5qZWN0b3IgfSBmcm9tICduZ3h0ZW5zaW9uL2Fzc2VydC1pbmplY3Rvcic7XG5pbXBvcnQgeyBpbmplY3RBdXRvRWZmZWN0IH0gZnJvbSAnbmd4dGVuc2lvbi9hdXRvLWVmZmVjdCc7XG5pbXBvcnQgeyBEeW5hbWljRHJhd1VzYWdlLCBJbnN0YW5jZWRNZXNoLCBPYmplY3QzRCB9IGZyb20gJ3RocmVlJztcbmltcG9ydCB7IE5ndGNBcmdGbiwgTmd0Y0JvZHlQcm9wc01hcCwgTmd0Y0JvZHlSZXR1cm4sIE5ndGNHZXRCeUluZGV4IH0gZnJvbSAnLi90eXBlcyc7XG5pbXBvcnQgeyBkZWZhdWx0VHJhbnNmb3JtQXJncywgbWFrZUJvZHlBcGksIHByZXBhcmUsIHNldHVwQ29sbGlzaW9uIH0gZnJvbSAnLi91dGlscyc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgTmd0Y0JvZHlPcHRpb25zPFRTaGFwZSBleHRlbmRzIEJvZHlTaGFwZVR5cGU+IHtcblx0dHJhbnNmb3JtQXJncz86IE5ndGNBcmdGbjxOZ3RjQm9keVByb3BzTWFwW1RTaGFwZV0+O1xuXHRyZWY/OiBFbGVtZW50UmVmPE9iamVjdDNEPjtcblx0aW5qZWN0b3I/OiBJbmplY3Rvcjtcbn1cblxuZnVuY3Rpb24gY3JlYXRlSW5qZWN0Qm9keTxUU2hhcGUgZXh0ZW5kcyBCb2R5U2hhcGVUeXBlPih0eXBlOiBUU2hhcGUpIHtcblx0cmV0dXJuIDxUT2JqZWN0IGV4dGVuZHMgT2JqZWN0M0Q+KFxuXHRcdGdldFByb3BGbjogTmd0Y0dldEJ5SW5kZXg8Tmd0Y0JvZHlQcm9wc01hcFtUU2hhcGVdPixcblx0XHRvcHRpb25zPzogTmd0Y0JvZHlPcHRpb25zPFRTaGFwZT4sXG5cdCkgPT4gaW5qZWN0Qm9keTxUU2hhcGUsIFRPYmplY3Q+KHR5cGUsIGdldFByb3BGbiwgb3B0aW9ucyk7XG59XG5cbmZ1bmN0aW9uIGluamVjdEJvZHk8VFNoYXBlIGV4dGVuZHMgQm9keVNoYXBlVHlwZSwgVE9iamVjdCBleHRlbmRzIE9iamVjdDNEPihcblx0dHlwZTogVFNoYXBlLFxuXHRnZXRQcm9wRm46IE5ndGNHZXRCeUluZGV4PE5ndGNCb2R5UHJvcHNNYXBbVFNoYXBlXT4sXG5cdHsgdHJhbnNmb3JtQXJncywgcmVmLCBpbmplY3RvciB9OiBOZ3RjQm9keU9wdGlvbnM8VFNoYXBlPiA9IHt9LFxuKTogTmd0Y0JvZHlSZXR1cm48VE9iamVjdD4ge1xuXHRyZXR1cm4gYXNzZXJ0SW5qZWN0b3IoaW5qZWN0Qm9keSwgaW5qZWN0b3IsICgpID0+IHtcblx0XHRjb25zdCBwaHlzaWNzQXBpID0gaW5qZWN0UGh5c2ljc0FwaSh7IG9wdGlvbmFsOiB0cnVlIH0pO1xuXG5cdFx0aWYgKCFwaHlzaWNzQXBpKSB7XG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoYFtOR1QgQ2Fubm9uXSBpbmplY3RCb2R5IHdhcyBjYWxsZWQgb3V0c2lkZSBvZiA8bmd0Yy1waHlzaWNzPmApO1xuXHRcdH1cblxuXHRcdGNvbnN0IGF1dG9FZmZlY3QgPSBpbmplY3RBdXRvRWZmZWN0KCk7XG5cdFx0Y29uc3QgZGVidWdBcGkgPSBpbmplY3ROZ3RjRGVidWdBcGkoeyBvcHRpb25hbDogdHJ1ZSB9KTtcblxuXHRcdGNvbnN0IHsgYWRkOiBhZGRUb0RlYnVnLCByZW1vdmU6IHJlbW92ZUZyb21EZWJ1ZyB9ID0gZGVidWdBcGkgfHwge307XG5cdFx0Y29uc3QgdHJhbnNmb3JtID0gdHJhbnNmb3JtQXJncyA/PyBkZWZhdWx0VHJhbnNmb3JtQXJnc1t0eXBlXTtcblx0XHRjb25zdCBib2R5UmVmID0gaW5qZWN0Tmd0UmVmKHJlZik7XG5cdFx0Y29uc3QgYm9keVJlc3VsdCA9IHsgcmVmOiBib2R5UmVmLCBhcGk6IG1ha2VCb2R5QXBpKGJvZHlSZWYsIHBoeXNpY3NBcGkpIH07XG5cblx0XHRhZnRlck5leHRSZW5kZXIoKCkgPT4ge1xuXHRcdFx0YXV0b0VmZmVjdCgoKSA9PiB7XG5cdFx0XHRcdGNvbnN0IGN1cnJlbnRXb3JrZXIgPSBwaHlzaWNzQXBpLndvcmtlcigpO1xuXHRcdFx0XHRpZiAoIWN1cnJlbnRXb3JrZXIpIHJldHVybjtcblxuXHRcdFx0XHRpZiAoIWJvZHlSZXN1bHQucmVmLm5hdGl2ZUVsZW1lbnQpIHtcblx0XHRcdFx0XHRib2R5UmVzdWx0LnJlZi5uYXRpdmVFbGVtZW50ID0gbmV3IE9iamVjdDNEKCk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRjb25zdCBvYmplY3QgPSBib2R5UmVzdWx0LnJlZi5uYXRpdmVFbGVtZW50O1xuXHRcdFx0XHRjb25zdCBbdXVpZCwgcHJvcHNdID0gKCgpID0+IHtcblx0XHRcdFx0XHRsZXQgdXVpZHM6IHN0cmluZ1tdID0gW107XG5cdFx0XHRcdFx0bGV0IHRlbXA6IE9iamVjdDNEO1xuXHRcdFx0XHRcdGlmIChvYmplY3QgaW5zdGFuY2VvZiBJbnN0YW5jZWRNZXNoKSB7XG5cdFx0XHRcdFx0XHRvYmplY3QuaW5zdGFuY2VNYXRyaXguc2V0VXNhZ2UoRHluYW1pY0RyYXdVc2FnZSk7XG5cdFx0XHRcdFx0XHR1dWlkcyA9IG5ldyBBcnJheShvYmplY3QuY291bnQpLmZpbGwoMCkubWFwKChfLCBpKSA9PiBgJHtvYmplY3QudXVpZH0vJHtpfWApO1xuXHRcdFx0XHRcdFx0dGVtcCA9IG5ldyBPYmplY3QzRCgpO1xuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHR1dWlkcyA9IFtvYmplY3QudXVpZF07XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdHJldHVybiBbXG5cdFx0XHRcdFx0XHR1dWlkcyxcblx0XHRcdFx0XHRcdHV1aWRzLm1hcCgoaWQsIGluZGV4KSA9PiB7XG5cdFx0XHRcdFx0XHRcdGNvbnN0IHByb3BzID0gZ2V0UHJvcEZuKGluZGV4KTtcblx0XHRcdFx0XHRcdFx0aWYgKHRlbXApIHtcblx0XHRcdFx0XHRcdFx0XHRwcmVwYXJlKHRlbXAsIHByb3BzKTtcblx0XHRcdFx0XHRcdFx0XHQob2JqZWN0IGFzIEluc3RhbmNlZE1lc2gpLnNldE1hdHJpeEF0KGluZGV4LCB0ZW1wLm1hdHJpeCk7XG5cdFx0XHRcdFx0XHRcdFx0KG9iamVjdCBhcyBJbnN0YW5jZWRNZXNoKS5pbnN0YW5jZU1hdHJpeC5uZWVkc1VwZGF0ZSA9IHRydWU7XG5cdFx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdFx0cHJlcGFyZShvYmplY3QsIHByb3BzKTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRwaHlzaWNzQXBpLnJlZnNbaWRdID0gb2JqZWN0O1xuXHRcdFx0XHRcdFx0XHRhZGRUb0RlYnVnPy4oaWQsIHByb3BzLCB0eXBlKTtcblx0XHRcdFx0XHRcdFx0c2V0dXBDb2xsaXNpb24ocGh5c2ljc0FwaS5ldmVudHMsIHByb3BzLCBpZCk7XG5cdFx0XHRcdFx0XHRcdC8vIEB0cy1leHBlY3QtZXJyb3IgLSBpZiBhcmdzIGlzIHVuZGVmaW5lZCwgdGhlcmUncyBkZWZhdWx0XG5cdFx0XHRcdFx0XHRcdHJldHVybiB7IC4uLnByb3BzLCBhcmdzOiB0cmFuc2Zvcm0ocHJvcHMuYXJncykgfTtcblx0XHRcdFx0XHRcdH0pLFxuXHRcdFx0XHRcdF07XG5cdFx0XHRcdH0pKCk7XG5cdFx0XHRcdC8vIFJlZ2lzdGVyIG9uIG1vdW50LCB1bnJlZ2lzdGVyIG9uIHVubW91bnRcblx0XHRcdFx0Y3VycmVudFdvcmtlci5hZGRCb2RpZXMoe1xuXHRcdFx0XHRcdHByb3BzOiBwcm9wcy5tYXAoKHsgb25Db2xsaWRlLCBvbkNvbGxpZGVCZWdpbiwgb25Db2xsaWRlRW5kLCAuLi5zZXJpYWxpemFibGVQcm9wcyB9KSA9PiB7XG5cdFx0XHRcdFx0XHRyZXR1cm4geyBvbkNvbGxpZGU6IEJvb2xlYW4ob25Db2xsaWRlKSwgLi4uc2VyaWFsaXphYmxlUHJvcHMgfTtcblx0XHRcdFx0XHR9KSxcblx0XHRcdFx0XHR0eXBlLFxuXHRcdFx0XHRcdHV1aWQsXG5cdFx0XHRcdH0pO1xuXG5cdFx0XHRcdHJldHVybiAoKSA9PiB7XG5cdFx0XHRcdFx0dXVpZC5mb3JFYWNoKChpZCkgPT4ge1xuXHRcdFx0XHRcdFx0ZGVsZXRlIHBoeXNpY3NBcGkucmVmc1tpZF07XG5cdFx0XHRcdFx0XHRyZW1vdmVGcm9tRGVidWc/LihpZCk7XG5cdFx0XHRcdFx0XHRkZWxldGUgcGh5c2ljc0FwaS5ldmVudHNbaWRdO1xuXHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdGN1cnJlbnRXb3JrZXIucmVtb3ZlQm9kaWVzKHsgdXVpZCB9KTtcblx0XHRcdFx0fTtcblx0XHRcdH0pO1xuXHRcdH0pO1xuXG5cdFx0cmV0dXJuIGJvZHlSZXN1bHQgYXMgTmd0Y0JvZHlSZXR1cm48VE9iamVjdD47XG5cdH0pO1xufVxuXG5leHBvcnQgY29uc3QgaW5qZWN0Qm94ID0gY3JlYXRlSW5qZWN0Qm9keSgnQm94Jyk7XG5leHBvcnQgY29uc3QgaW5qZWN0Q29udmV4UG9seWhlZHJvbiA9IGNyZWF0ZUluamVjdEJvZHkoJ0NvbnZleFBvbHloZWRyb24nKTtcbmV4cG9ydCBjb25zdCBpbmplY3RDeWxpbmRlciA9IGNyZWF0ZUluamVjdEJvZHkoJ0N5bGluZGVyJyk7XG5leHBvcnQgY29uc3QgaW5qZWN0SGVpZ2h0ZmllbGQgPSBjcmVhdGVJbmplY3RCb2R5KCdIZWlnaHRmaWVsZCcpO1xuZXhwb3J0IGNvbnN0IGluamVjdFBhcnRpY2xlID0gY3JlYXRlSW5qZWN0Qm9keSgnUGFydGljbGUnKTtcbmV4cG9ydCBjb25zdCBpbmplY3RQbGFuZSA9IGNyZWF0ZUluamVjdEJvZHkoJ1BsYW5lJyk7XG5leHBvcnQgY29uc3QgaW5qZWN0U3BoZXJlID0gY3JlYXRlSW5qZWN0Qm9keSgnU3BoZXJlJyk7XG5leHBvcnQgY29uc3QgaW5qZWN0VHJpbWVzaCA9IGNyZWF0ZUluamVjdEJvZHkoJ1RyaW1lc2gnKTtcbmV4cG9ydCBjb25zdCBpbmplY3RDb21wb3VuZCA9IGNyZWF0ZUluamVjdEJvZHkoJ0NvbXBvdW5kJyk7XG4iXX0=
108
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYm9keS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvY2Fubm9uL2JvZHkvc3JjL2xpYi9ib2R5LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFLTixlQUFlLEVBQ2YsUUFBUSxFQUNSLFFBQVEsRUFDUixNQUFNLEVBQ04sU0FBUyxHQUNULE1BQU0sZUFBZSxDQUFDO0FBRXZCLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDM0MsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDeEQsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDaEUsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQzVELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQzFELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxhQUFhLEVBQUUsUUFBUSxFQUFFLE1BQU0sT0FBTyxDQUFDO0FBRWxFLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxXQUFXLEVBQUUsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLFNBQVMsQ0FBQztBQU9yRixTQUFTLGdCQUFnQixDQUErQixJQUFZO0lBQ25FLE9BQU8sQ0FDTixTQUFtRCxFQUNuRCxHQUFzRixFQUN0RixPQUFpQyxFQUNoQyxFQUFFLENBQUMsVUFBVSxDQUFrQixJQUFJLEVBQUUsU0FBUyxFQUFFLEdBQUcsRUFBRSxPQUFPLENBQUMsQ0FBQztBQUNqRSxDQUFDO0FBRUQsU0FBUyxVQUFVLENBQ2xCLElBQVksRUFDWixTQUFtRCxFQUNuRCxHQUFzRixFQUN0RixFQUFFLGFBQWEsRUFBRSxRQUFRLEtBQThCLEVBQUU7SUFFekQsT0FBTyxjQUFjLENBQUMsVUFBVSxFQUFFLFFBQVEsRUFBRSxHQUFHLEVBQUU7UUFDaEQsTUFBTSxVQUFVLEdBQUcsZ0JBQWdCLENBQUMsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztRQUV4RCxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7WUFDakIsTUFBTSxJQUFJLEtBQUssQ0FBQyw4REFBOEQsQ0FBQyxDQUFDO1FBQ2pGLENBQUM7UUFFRCxNQUFNLFVBQVUsR0FBRyxnQkFBZ0IsRUFBRSxDQUFDO1FBQ3RDLE1BQU0sUUFBUSxHQUFHLGtCQUFrQixDQUFDLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7UUFFeEQsTUFBTSxFQUFFLEdBQUcsRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFLGVBQWUsRUFBRSxHQUFHLFFBQVEsSUFBSSxFQUFFLENBQUM7UUFDcEUsTUFBTSxTQUFTLEdBQUcsYUFBYSxJQUFJLG9CQUFvQixDQUFDLElBQUksQ0FBQyxDQUFDO1FBQzlELE1BQU0sT0FBTyxHQUFHLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDbEQsTUFBTSxJQUFJLEdBQUcsUUFBUSxDQUFDLEdBQUcsRUFBRSxDQUFDLFVBQVUsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFFbkQsTUFBTSxHQUFHLEdBQUcsUUFBUSxDQUFDLEdBQUcsRUFBRTtZQUN6QixNQUFNLEtBQUssR0FBRyxJQUFJLEVBQUUsQ0FBQztZQUNyQixJQUFJLENBQUMsS0FBSztnQkFBRSxPQUFPLElBQUksQ0FBQztZQUN4QixNQUFNLEVBQUUsTUFBTSxFQUFFLEdBQUcsSUFBSSxFQUFFLEdBQUcsVUFBVSxDQUFDO1lBQ3ZDLElBQUksQ0FBQyxNQUFNLEVBQUU7Z0JBQUUsT0FBTyxJQUFJLENBQUM7WUFDM0IsT0FBTyxXQUFXLENBQUMsS0FBSyxFQUFFLE1BQU0sRUFBRSxFQUFFLFVBQVUsQ0FBQyxDQUFDO1FBQ2pELENBQUMsQ0FBQyxDQUFDO1FBRUgsZUFBZSxDQUFDLEdBQUcsRUFBRTtZQUNwQixVQUFVLENBQUMsR0FBRyxFQUFFO2dCQUNmLE1BQU0sYUFBYSxHQUFHLFVBQVUsQ0FBQyxNQUFNLEVBQUUsQ0FBQztnQkFDMUMsSUFBSSxDQUFDLGFBQWE7b0JBQUUsT0FBTztnQkFFM0IsTUFBTSxNQUFNLEdBQUcsSUFBSSxFQUFFLENBQUM7Z0JBRXRCLElBQUksQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztvQkFDL0IsU0FBUyxDQUFDLEdBQUcsRUFBRTt3QkFDYixPQUErQyxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztvQkFDdkUsQ0FBQyxDQUFDLENBQUM7b0JBQ0gsT0FBTztnQkFDUixDQUFDO2dCQUVELElBQUksQ0FBQyxNQUFNO29CQUFFLE9BQU87Z0JBRXBCLE1BQU0sQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUU7b0JBQzNCLElBQUksS0FBSyxHQUFhLEVBQUUsQ0FBQztvQkFDekIsSUFBSSxJQUFjLENBQUM7b0JBQ25CLElBQUksTUFBTSxZQUFZLGFBQWEsRUFBRSxDQUFDO3dCQUNyQyxNQUFNLENBQUMsY0FBYyxDQUFDLFFBQVEsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO3dCQUNqRCxLQUFLLEdBQUcsSUFBSSxLQUFLLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxJQUFJLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQzt3QkFDN0UsSUFBSSxHQUFHLElBQUksUUFBUSxFQUFFLENBQUM7b0JBQ3ZCLENBQUM7eUJBQU0sQ0FBQzt3QkFDUCxLQUFLLEdBQUcsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUM7b0JBQ3ZCLENBQUM7b0JBQ0QsT0FBTzt3QkFDTixLQUFLO3dCQUNMLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLEVBQUUsS0FBSyxFQUFFLEVBQUU7NEJBQ3ZCLE1BQU0sS0FBSyxHQUFHLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQzs0QkFDL0IsSUFBSSxJQUFJLEVBQUUsQ0FBQztnQ0FDVixPQUFPLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxDQUFDO2dDQUNwQixNQUFtQyxDQUFDLFdBQVcsQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO2dDQUNwRSxNQUFtQyxDQUFDLGNBQWMsQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDOzRCQUN4RSxDQUFDO2lDQUFNLENBQUM7Z0NBQ1AsT0FBTyxDQUFDLE1BQU0sRUFBRSxLQUFLLENBQUMsQ0FBQzs0QkFDeEIsQ0FBQzs0QkFDRCxVQUFVLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxHQUFHLE1BQU0sQ0FBQzs0QkFDN0IsVUFBVSxFQUFFLENBQUMsRUFBRSxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsQ0FBQzs0QkFDOUIsY0FBYyxDQUFDLFVBQVUsQ0FBQyxNQUFNLEVBQUUsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDOzRCQUM3QywyREFBMkQ7NEJBQzNELE9BQU8sRUFBRSxHQUFHLEtBQUssRUFBRSxJQUFJLEVBQUUsU0FBUyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDO3dCQUNsRCxDQUFDLENBQUM7cUJBQ0YsQ0FBQztnQkFDSCxDQUFDLENBQUMsRUFBRSxDQUFDO2dCQUNMLDJDQUEyQztnQkFDM0MsYUFBYSxDQUFDLFNBQVMsQ0FBQztvQkFDdkIsS0FBSyxFQUFFLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLFNBQVMsRUFBRSxjQUFjLEVBQUUsWUFBWSxFQUFFLEdBQUcsaUJBQWlCLEVBQUUsRUFBRSxFQUFFO3dCQUN0RixPQUFPLEVBQUUsU0FBUyxFQUFFLE9BQU8sQ0FBQyxTQUFTLENBQUMsRUFBRSxHQUFHLGlCQUFpQixFQUFFLENBQUM7b0JBQ2hFLENBQUMsQ0FBQztvQkFDRixJQUFJO29CQUNKLElBQUk7aUJBQ0osQ0FBQyxDQUFDO2dCQUVILE9BQU8sR0FBRyxFQUFFO29CQUNYLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRTt3QkFDbkIsT0FBTyxVQUFVLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO3dCQUMzQixlQUFlLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQzt3QkFDdEIsT0FBTyxVQUFVLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDO29CQUM5QixDQUFDLENBQUMsQ0FBQztvQkFDSCxhQUFhLENBQUMsWUFBWSxDQUFDLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztnQkFDdEMsQ0FBQyxDQUFDO1lBQ0gsQ0FBQyxDQUFDLENBQUM7UUFDSixDQUFDLENBQUMsQ0FBQztRQUVILE9BQU8sR0FBRyxDQUFDO0lBQ1osQ0FBQyxDQUFDLENBQUM7QUFDSixDQUFDO0FBRUQsTUFBTSxDQUFDLE1BQU0sU0FBUyxHQUFHLGdCQUFnQixDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQ2pELE1BQU0sQ0FBQyxNQUFNLHNCQUFzQixHQUFHLGdCQUFnQixDQUFDLGtCQUFrQixDQUFDLENBQUM7QUFDM0UsTUFBTSxDQUFDLE1BQU0sY0FBYyxHQUFHLGdCQUFnQixDQUFDLFVBQVUsQ0FBQyxDQUFDO0FBQzNELE1BQU0sQ0FBQyxNQUFNLGlCQUFpQixHQUFHLGdCQUFnQixDQUFDLGFBQWEsQ0FBQyxDQUFDO0FBQ2pFLE1BQU0sQ0FBQyxNQUFNLGNBQWMsR0FBRyxnQkFBZ0IsQ0FBQyxVQUFVLENBQUMsQ0FBQztBQUMzRCxNQUFNLENBQUMsTUFBTSxXQUFXLEdBQUcsZ0JBQWdCLENBQUMsT0FBTyxDQUFDLENBQUM7QUFDckQsTUFBTSxDQUFDLE1BQU0sWUFBWSxHQUFHLGdCQUFnQixDQUFDLFFBQVEsQ0FBQyxDQUFDO0FBQ3ZELE1BQU0sQ0FBQyxNQUFNLGFBQWEsR0FBRyxnQkFBZ0IsQ0FBQyxTQUFTLENBQUMsQ0FBQztBQUN6RCxNQUFNLENBQUMsTUFBTSxjQUFjLEdBQUcsZ0JBQWdCLENBQUMsVUFBVSxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuXHRFbGVtZW50UmVmLFxuXHRJbmplY3Rvcixcblx0U2lnbmFsLFxuXHRXcml0YWJsZVNpZ25hbCxcblx0YWZ0ZXJOZXh0UmVuZGVyLFxuXHRjb21wdXRlZCxcblx0aXNTaWduYWwsXG5cdHNpZ25hbCxcblx0dW50cmFja2VkLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEJvZHlTaGFwZVR5cGUgfSBmcm9tICdAcG1uZHJzL2Nhbm5vbi13b3JrZXItYXBpJztcbmltcG9ydCB7IHJlc29sdmVSZWYgfSBmcm9tICdhbmd1bGFyLXRocmVlJztcbmltcG9ydCB7IGluamVjdFBoeXNpY3NBcGkgfSBmcm9tICdhbmd1bGFyLXRocmVlLWNhbm5vbic7XG5pbXBvcnQgeyBpbmplY3ROZ3RjRGVidWdBcGkgfSBmcm9tICdhbmd1bGFyLXRocmVlLWNhbm5vbi9kZWJ1Zyc7XG5pbXBvcnQgeyBhc3NlcnRJbmplY3RvciB9IGZyb20gJ25neHRlbnNpb24vYXNzZXJ0LWluamVjdG9yJztcbmltcG9ydCB7IGluamVjdEF1dG9FZmZlY3QgfSBmcm9tICduZ3h0ZW5zaW9uL2F1dG8tZWZmZWN0JztcbmltcG9ydCB7IER5bmFtaWNEcmF3VXNhZ2UsIEluc3RhbmNlZE1lc2gsIE9iamVjdDNEIH0gZnJvbSAndGhyZWUnO1xuaW1wb3J0IHsgTmd0Y0FyZ0ZuLCBOZ3RjQm9keVByb3BzTWFwLCBOZ3RjQm9keVB1YmxpY0FwaSwgTmd0Y0dldEJ5SW5kZXggfSBmcm9tICcuL3R5cGVzJztcbmltcG9ydCB7IGRlZmF1bHRUcmFuc2Zvcm1BcmdzLCBtYWtlQm9keUFwaSwgcHJlcGFyZSwgc2V0dXBDb2xsaXNpb24gfSBmcm9tICcuL3V0aWxzJztcblxuZXhwb3J0IGludGVyZmFjZSBOZ3RjQm9keU9wdGlvbnM8VFNoYXBlIGV4dGVuZHMgQm9keVNoYXBlVHlwZT4ge1xuXHR0cmFuc2Zvcm1BcmdzPzogTmd0Y0FyZ0ZuPE5ndGNCb2R5UHJvcHNNYXBbVFNoYXBlXT47XG5cdGluamVjdG9yPzogSW5qZWN0b3I7XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUluamVjdEJvZHk8VFNoYXBlIGV4dGVuZHMgQm9keVNoYXBlVHlwZT4odHlwZTogVFNoYXBlKSB7XG5cdHJldHVybiA8VE9iamVjdCBleHRlbmRzIE9iamVjdDNEPihcblx0XHRnZXRQcm9wRm46IE5ndGNHZXRCeUluZGV4PE5ndGNCb2R5UHJvcHNNYXBbVFNoYXBlXT4sXG5cdFx0cmVmOiBFbGVtZW50UmVmPFRPYmplY3Q+IHwgVE9iamVjdCB8IFNpZ25hbDxFbGVtZW50UmVmPFRPYmplY3Q+IHwgVE9iamVjdCB8IHVuZGVmaW5lZD4sXG5cdFx0b3B0aW9ucz86IE5ndGNCb2R5T3B0aW9uczxUU2hhcGU+LFxuXHQpID0+IGluamVjdEJvZHk8VFNoYXBlLCBUT2JqZWN0Pih0eXBlLCBnZXRQcm9wRm4sIHJlZiwgb3B0aW9ucyk7XG59XG5cbmZ1bmN0aW9uIGluamVjdEJvZHk8VFNoYXBlIGV4dGVuZHMgQm9keVNoYXBlVHlwZSwgVE9iamVjdCBleHRlbmRzIE9iamVjdDNEPihcblx0dHlwZTogVFNoYXBlLFxuXHRnZXRQcm9wRm46IE5ndGNHZXRCeUluZGV4PE5ndGNCb2R5UHJvcHNNYXBbVFNoYXBlXT4sXG5cdHJlZjogRWxlbWVudFJlZjxUT2JqZWN0PiB8IFRPYmplY3QgfCBTaWduYWw8RWxlbWVudFJlZjxUT2JqZWN0PiB8IFRPYmplY3QgfCB1bmRlZmluZWQ+LFxuXHR7IHRyYW5zZm9ybUFyZ3MsIGluamVjdG9yIH06IE5ndGNCb2R5T3B0aW9uczxUU2hhcGU+ID0ge30sXG4pOiBTaWduYWw8Tmd0Y0JvZHlQdWJsaWNBcGkgfCBudWxsPiB7XG5cdHJldHVybiBhc3NlcnRJbmplY3RvcihpbmplY3RCb2R5LCBpbmplY3RvciwgKCkgPT4ge1xuXHRcdGNvbnN0IHBoeXNpY3NBcGkgPSBpbmplY3RQaHlzaWNzQXBpKHsgb3B0aW9uYWw6IHRydWUgfSk7XG5cblx0XHRpZiAoIXBoeXNpY3NBcGkpIHtcblx0XHRcdHRocm93IG5ldyBFcnJvcihgW05HVCBDYW5ub25dIGluamVjdEJvZHkgd2FzIGNhbGxlZCBvdXRzaWRlIG9mIDxuZ3RjLXBoeXNpY3M+YCk7XG5cdFx0fVxuXG5cdFx0Y29uc3QgYXV0b0VmZmVjdCA9IGluamVjdEF1dG9FZmZlY3QoKTtcblx0XHRjb25zdCBkZWJ1Z0FwaSA9IGluamVjdE5ndGNEZWJ1Z0FwaSh7IG9wdGlvbmFsOiB0cnVlIH0pO1xuXG5cdFx0Y29uc3QgeyBhZGQ6IGFkZFRvRGVidWcsIHJlbW92ZTogcmVtb3ZlRnJvbURlYnVnIH0gPSBkZWJ1Z0FwaSB8fCB7fTtcblx0XHRjb25zdCB0cmFuc2Zvcm0gPSB0cmFuc2Zvcm1BcmdzID8/IGRlZmF1bHRUcmFuc2Zvcm1BcmdzW3R5cGVdO1xuXHRcdGNvbnN0IGJvZHlSZWYgPSBpc1NpZ25hbChyZWYpID8gcmVmIDogc2lnbmFsKHJlZik7XG5cdFx0Y29uc3QgYm9keSA9IGNvbXB1dGVkKCgpID0+IHJlc29sdmVSZWYoYm9keVJlZigpKSk7XG5cblx0XHRjb25zdCBhcGkgPSBjb21wdXRlZCgoKSA9PiB7XG5cdFx0XHRjb25zdCBfYm9keSA9IGJvZHkoKTtcblx0XHRcdGlmICghX2JvZHkpIHJldHVybiBudWxsO1xuXHRcdFx0Y29uc3QgeyB3b3JrZXIsIC4uLnJlc3QgfSA9IHBoeXNpY3NBcGk7XG5cdFx0XHRpZiAoIXdvcmtlcigpKSByZXR1cm4gbnVsbDtcblx0XHRcdHJldHVybiBtYWtlQm9keUFwaShfYm9keSwgd29ya2VyKCksIHBoeXNpY3NBcGkpO1xuXHRcdH0pO1xuXG5cdFx0YWZ0ZXJOZXh0UmVuZGVyKCgpID0+IHtcblx0XHRcdGF1dG9FZmZlY3QoKCkgPT4ge1xuXHRcdFx0XHRjb25zdCBjdXJyZW50V29ya2VyID0gcGh5c2ljc0FwaS53b3JrZXIoKTtcblx0XHRcdFx0aWYgKCFjdXJyZW50V29ya2VyKSByZXR1cm47XG5cblx0XHRcdFx0Y29uc3Qgb2JqZWN0ID0gYm9keSgpO1xuXG5cdFx0XHRcdGlmICghaXNTaWduYWwocmVmKSAmJiAhb2JqZWN0KSB7XG5cdFx0XHRcdFx0dW50cmFja2VkKCgpID0+IHtcblx0XHRcdFx0XHRcdChib2R5UmVmIGFzIFdyaXRhYmxlU2lnbmFsPFRPYmplY3QgfCB1bmRlZmluZWQ+KS5zZXQocmVzb2x2ZVJlZihyZWYpKTtcblx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRpZiAoIW9iamVjdCkgcmV0dXJuO1xuXG5cdFx0XHRcdGNvbnN0IFt1dWlkLCBwcm9wc10gPSAoKCkgPT4ge1xuXHRcdFx0XHRcdGxldCB1dWlkczogc3RyaW5nW10gPSBbXTtcblx0XHRcdFx0XHRsZXQgdGVtcDogT2JqZWN0M0Q7XG5cdFx0XHRcdFx0aWYgKG9iamVjdCBpbnN0YW5jZW9mIEluc3RhbmNlZE1lc2gpIHtcblx0XHRcdFx0XHRcdG9iamVjdC5pbnN0YW5jZU1hdHJpeC5zZXRVc2FnZShEeW5hbWljRHJhd1VzYWdlKTtcblx0XHRcdFx0XHRcdHV1aWRzID0gbmV3IEFycmF5KG9iamVjdC5jb3VudCkuZmlsbCgwKS5tYXAoKF8sIGkpID0+IGAke29iamVjdC51dWlkfS8ke2l9YCk7XG5cdFx0XHRcdFx0XHR0ZW1wID0gbmV3IE9iamVjdDNEKCk7XG5cdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdHV1aWRzID0gW29iamVjdC51dWlkXTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0cmV0dXJuIFtcblx0XHRcdFx0XHRcdHV1aWRzLFxuXHRcdFx0XHRcdFx0dXVpZHMubWFwKChpZCwgaW5kZXgpID0+IHtcblx0XHRcdFx0XHRcdFx0Y29uc3QgcHJvcHMgPSBnZXRQcm9wRm4oaW5kZXgpO1xuXHRcdFx0XHRcdFx0XHRpZiAodGVtcCkge1xuXHRcdFx0XHRcdFx0XHRcdHByZXBhcmUodGVtcCwgcHJvcHMpO1xuXHRcdFx0XHRcdFx0XHRcdChvYmplY3QgYXMgdW5rbm93biBhcyBJbnN0YW5jZWRNZXNoKS5zZXRNYXRyaXhBdChpbmRleCwgdGVtcC5tYXRyaXgpO1xuXHRcdFx0XHRcdFx0XHRcdChvYmplY3QgYXMgdW5rbm93biBhcyBJbnN0YW5jZWRNZXNoKS5pbnN0YW5jZU1hdHJpeC5uZWVkc1VwZGF0ZSA9IHRydWU7XG5cdFx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdFx0cHJlcGFyZShvYmplY3QsIHByb3BzKTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRwaHlzaWNzQXBpLnJlZnNbaWRdID0gb2JqZWN0O1xuXHRcdFx0XHRcdFx0XHRhZGRUb0RlYnVnPy4oaWQsIHByb3BzLCB0eXBlKTtcblx0XHRcdFx0XHRcdFx0c2V0dXBDb2xsaXNpb24ocGh5c2ljc0FwaS5ldmVudHMsIHByb3BzLCBpZCk7XG5cdFx0XHRcdFx0XHRcdC8vIEB0cy1leHBlY3QtZXJyb3IgLSBpZiBhcmdzIGlzIHVuZGVmaW5lZCwgdGhlcmUncyBkZWZhdWx0XG5cdFx0XHRcdFx0XHRcdHJldHVybiB7IC4uLnByb3BzLCBhcmdzOiB0cmFuc2Zvcm0ocHJvcHMuYXJncykgfTtcblx0XHRcdFx0XHRcdH0pLFxuXHRcdFx0XHRcdF07XG5cdFx0XHRcdH0pKCk7XG5cdFx0XHRcdC8vIFJlZ2lzdGVyIG9uIG1vdW50LCB1bnJlZ2lzdGVyIG9uIHVubW91bnRcblx0XHRcdFx0Y3VycmVudFdvcmtlci5hZGRCb2RpZXMoe1xuXHRcdFx0XHRcdHByb3BzOiBwcm9wcy5tYXAoKHsgb25Db2xsaWRlLCBvbkNvbGxpZGVCZWdpbiwgb25Db2xsaWRlRW5kLCAuLi5zZXJpYWxpemFibGVQcm9wcyB9KSA9PiB7XG5cdFx0XHRcdFx0XHRyZXR1cm4geyBvbkNvbGxpZGU6IEJvb2xlYW4ob25Db2xsaWRlKSwgLi4uc2VyaWFsaXphYmxlUHJvcHMgfTtcblx0XHRcdFx0XHR9KSxcblx0XHRcdFx0XHR0eXBlLFxuXHRcdFx0XHRcdHV1aWQsXG5cdFx0XHRcdH0pO1xuXG5cdFx0XHRcdHJldHVybiAoKSA9PiB7XG5cdFx0XHRcdFx0dXVpZC5mb3JFYWNoKChpZCkgPT4ge1xuXHRcdFx0XHRcdFx0ZGVsZXRlIHBoeXNpY3NBcGkucmVmc1tpZF07XG5cdFx0XHRcdFx0XHRyZW1vdmVGcm9tRGVidWc/LihpZCk7XG5cdFx0XHRcdFx0XHRkZWxldGUgcGh5c2ljc0FwaS5ldmVudHNbaWRdO1xuXHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdGN1cnJlbnRXb3JrZXIucmVtb3ZlQm9kaWVzKHsgdXVpZCB9KTtcblx0XHRcdFx0fTtcblx0XHRcdH0pO1xuXHRcdH0pO1xuXG5cdFx0cmV0dXJuIGFwaTtcblx0fSk7XG59XG5cbmV4cG9ydCBjb25zdCBpbmplY3RCb3ggPSBjcmVhdGVJbmplY3RCb2R5KCdCb3gnKTtcbmV4cG9ydCBjb25zdCBpbmplY3RDb252ZXhQb2x5aGVkcm9uID0gY3JlYXRlSW5qZWN0Qm9keSgnQ29udmV4UG9seWhlZHJvbicpO1xuZXhwb3J0IGNvbnN0IGluamVjdEN5bGluZGVyID0gY3JlYXRlSW5qZWN0Qm9keSgnQ3lsaW5kZXInKTtcbmV4cG9ydCBjb25zdCBpbmplY3RIZWlnaHRmaWVsZCA9IGNyZWF0ZUluamVjdEJvZHkoJ0hlaWdodGZpZWxkJyk7XG5leHBvcnQgY29uc3QgaW5qZWN0UGFydGljbGUgPSBjcmVhdGVJbmplY3RCb2R5KCdQYXJ0aWNsZScpO1xuZXhwb3J0IGNvbnN0IGluamVjdFBsYW5lID0gY3JlYXRlSW5qZWN0Qm9keSgnUGxhbmUnKTtcbmV4cG9ydCBjb25zdCBpbmplY3RTcGhlcmUgPSBjcmVhdGVJbmplY3RCb2R5KCdTcGhlcmUnKTtcbmV4cG9ydCBjb25zdCBpbmplY3RUcmltZXNoID0gY3JlYXRlSW5qZWN0Qm9keSgnVHJpbWVzaCcpO1xuZXhwb3J0IGNvbnN0IGluamVjdENvbXBvdW5kID0gY3JlYXRlSW5qZWN0Qm9keSgnQ29tcG91bmQnKTtcbiJdfQ==
@@ -1,2 +1,2 @@
1
1
  export {};
2
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL2Nhbm5vbi9ib2R5L3NyYy9saWIvdHlwZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG5cdEF0b21pY05hbWUsXG5cdEF0b21pY1Byb3BzLFxuXHRCb2R5UHJvcHMsXG5cdEJveFByb3BzLFxuXHRDb21wb3VuZEJvZHlQcm9wcyxcblx0Q29udmV4UG9seWhlZHJvblByb3BzLFxuXHRDeWxpbmRlclByb3BzLFxuXHRIZWlnaHRmaWVsZFByb3BzLFxuXHRQYXJ0aWNsZVByb3BzLFxuXHRQbGFuZVByb3BzLFxuXHRRdWFkLFxuXHRTcGhlcmVQcm9wcyxcblx0VHJpbWVzaFByb3BzLFxuXHRUcmlwbGV0LFxuXHRWZWN0b3JOYW1lLFxufSBmcm9tICdAcG1uZHJzL2Nhbm5vbi13b3JrZXItYXBpJztcbmltcG9ydCB7IE5ndEluamVjdGVkUmVmIH0gZnJvbSAnYW5ndWxhci10aHJlZSc7XG5pbXBvcnQgeyBFdWxlciwgT2JqZWN0M0QsIFF1YXRlcm5pb24sIFZlY3RvcjMgfSBmcm9tICd0aHJlZSc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgTmd0Y0F0b21pY0FwaTxLIGV4dGVuZHMgQXRvbWljTmFtZT4ge1xuXHRzZXQ6ICh2YWx1ZTogQXRvbWljUHJvcHNbS10pID0+IHZvaWQ7XG5cdHN1YnNjcmliZTogKGNhbGxiYWNrOiAodmFsdWU6IEF0b21pY1Byb3BzW0tdKSA9PiB2b2lkKSA9PiAoKSA9PiB2b2lkO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIE5ndGNRdWF0ZXJuaW9uQXBpIHtcblx0Y29weTogKHsgdywgeCwgeSwgeiB9OiBRdWF0ZXJuaW9uKSA9PiB2b2lkO1xuXHRzZXQ6ICh4OiBudW1iZXIsIHk6IG51bWJlciwgejogbnVtYmVyLCB3OiBudW1iZXIpID0+IHZvaWQ7XG5cdHN1YnNjcmliZTogKGNhbGxiYWNrOiAodmFsdWU6IFF1YWQpID0+IHZvaWQpID0+ICgpID0+IHZvaWQ7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgTmd0Y1ZlY3RvckFwaSB7XG5cdGNvcHk6ICh7IHgsIHksIHogfTogVmVjdG9yMyB8IEV1bGVyKSA9PiB2b2lkO1xuXHRzZXQ6ICh4OiBudW1iZXIsIHk6IG51bWJlciwgejogbnVtYmVyKSA9PiB2b2lkO1xuXHRzdWJzY3JpYmU6IChjYWxsYmFjazogKHZhbHVlOiBUcmlwbGV0KSA9PiB2b2lkKSA9PiAoKSA9PiB2b2lkO1xufVxuXG5leHBvcnQgdHlwZSBOZ3RjV29ya2VyQXBpID0ge1xuXHRbSyBpbiBBdG9taWNOYW1lXTogTmd0Y0F0b21pY0FwaTxLPjtcbn0gJiB7XG5cdFtLIGluIFZlY3Rvck5hbWVdOiBOZ3RjVmVjdG9yQXBpO1xufSAmIHtcblx0YXBwbHlGb3JjZTogKGZvcmNlOiBUcmlwbGV0LCB3b3JsZFBvaW50OiBUcmlwbGV0KSA9PiB2b2lkO1xuXHRhcHBseUltcHVsc2U6IChpbXB1bHNlOiBUcmlwbGV0LCB3b3JsZFBvaW50OiBUcmlwbGV0KSA9PiB2b2lkO1xuXHRhcHBseUxvY2FsRm9yY2U6IChmb3JjZTogVHJpcGxldCwgbG9jYWxQb2ludDogVHJpcGxldCkgPT4gdm9pZDtcblx0YXBwbHlMb2NhbEltcHVsc2U6IChpbXB1bHNlOiBUcmlwbGV0LCBsb2NhbFBvaW50OiBUcmlwbGV0KSA9PiB2b2lkO1xuXHRhcHBseVRvcnF1ZTogKHRvcnF1ZTogVHJpcGxldCkgPT4gdm9pZDtcblx0cXVhdGVybmlvbjogTmd0Y1F1YXRlcm5pb25BcGk7XG5cdHJvdGF0aW9uOiBOZ3RjVmVjdG9yQXBpO1xuXHRzY2FsZU92ZXJyaWRlOiAoc2NhbGU6IFRyaXBsZXQpID0+IHZvaWQ7XG5cdHNsZWVwOiAoKSA9PiB2b2lkO1xuXHR3YWtlVXA6ICgpID0+IHZvaWQ7XG5cdHJlbW92ZTogKCkgPT4gdm9pZDtcbn07XG5cbmV4cG9ydCBpbnRlcmZhY2UgTmd0Y0JvZHlQdWJsaWNBcGkgZXh0ZW5kcyBOZ3RjV29ya2VyQXBpIHtcblx0YXQ6IChpbmRleDogbnVtYmVyKSA9PiBOZ3RjV29ya2VyQXBpO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIE5ndGNCb2R5UmV0dXJuPFRPYmplY3QgZXh0ZW5kcyBPYmplY3QzRD4ge1xuXHRyZWY6IE5ndEluamVjdGVkUmVmPFRPYmplY3Q+O1xuXHRhcGk6IE5ndGNCb2R5UHVibGljQXBpO1xufVxuXG5leHBvcnQgdHlwZSBOZ3RjQm9keVByb3BzTWFwID0ge1xuXHRQbGFuZTogUGxhbmVQcm9wcztcblx0Qm94OiBCb3hQcm9wcztcblx0UGFydGljbGU6IFBhcnRpY2xlUHJvcHM7XG5cdEN5bGluZGVyOiBDeWxpbmRlclByb3BzO1xuXHRTcGhlcmU6IFNwaGVyZVByb3BzO1xuXHRUcmltZXNoOiBUcmltZXNoUHJvcHM7XG5cdEhlaWdodGZpZWxkOiBIZWlnaHRmaWVsZFByb3BzO1xuXHRDb252ZXhQb2x5aGVkcm9uOiBDb252ZXhQb2x5aGVkcm9uUHJvcHM7XG5cdENvbXBvdW5kOiBDb21wb3VuZEJvZHlQcm9wcztcbn07XG5cbmV4cG9ydCB0eXBlIE5ndGNHZXRCeUluZGV4PFQgZXh0ZW5kcyBCb2R5UHJvcHM+ID0gKGluZGV4OiBudW1iZXIpID0+IFQ7XG5leHBvcnQgdHlwZSBOZ3RjQXJnRm48VCBleHRlbmRzIEJvZHlQcm9wcz4gPSAoYXJnczogTm9uTnVsbGFibGU8VFsnYXJncyddPikgPT4gdHlwZW9mIGFyZ3M7XG4iXX0=
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL2Nhbm5vbi9ib2R5L3NyYy9saWIvdHlwZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG5cdEF0b21pY05hbWUsXG5cdEF0b21pY1Byb3BzLFxuXHRCb2R5UHJvcHMsXG5cdEJveFByb3BzLFxuXHRDb21wb3VuZEJvZHlQcm9wcyxcblx0Q29udmV4UG9seWhlZHJvblByb3BzLFxuXHRDeWxpbmRlclByb3BzLFxuXHRIZWlnaHRmaWVsZFByb3BzLFxuXHRQYXJ0aWNsZVByb3BzLFxuXHRQbGFuZVByb3BzLFxuXHRRdWFkLFxuXHRTcGhlcmVQcm9wcyxcblx0VHJpbWVzaFByb3BzLFxuXHRUcmlwbGV0LFxuXHRWZWN0b3JOYW1lLFxufSBmcm9tICdAcG1uZHJzL2Nhbm5vbi13b3JrZXItYXBpJztcbmltcG9ydCB7IEV1bGVyLCBRdWF0ZXJuaW9uLCBWZWN0b3IzIH0gZnJvbSAndGhyZWUnO1xuXG5leHBvcnQgaW50ZXJmYWNlIE5ndGNBdG9taWNBcGk8SyBleHRlbmRzIEF0b21pY05hbWU+IHtcblx0c2V0OiAodmFsdWU6IEF0b21pY1Byb3BzW0tdKSA9PiB2b2lkO1xuXHRzdWJzY3JpYmU6IChjYWxsYmFjazogKHZhbHVlOiBBdG9taWNQcm9wc1tLXSkgPT4gdm9pZCkgPT4gKCkgPT4gdm9pZDtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBOZ3RjUXVhdGVybmlvbkFwaSB7XG5cdGNvcHk6ICh7IHcsIHgsIHksIHogfTogUXVhdGVybmlvbikgPT4gdm9pZDtcblx0c2V0OiAoeDogbnVtYmVyLCB5OiBudW1iZXIsIHo6IG51bWJlciwgdzogbnVtYmVyKSA9PiB2b2lkO1xuXHRzdWJzY3JpYmU6IChjYWxsYmFjazogKHZhbHVlOiBRdWFkKSA9PiB2b2lkKSA9PiAoKSA9PiB2b2lkO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIE5ndGNWZWN0b3JBcGkge1xuXHRjb3B5OiAoeyB4LCB5LCB6IH06IFZlY3RvcjMgfCBFdWxlcikgPT4gdm9pZDtcblx0c2V0OiAoeDogbnVtYmVyLCB5OiBudW1iZXIsIHo6IG51bWJlcikgPT4gdm9pZDtcblx0c3Vic2NyaWJlOiAoY2FsbGJhY2s6ICh2YWx1ZTogVHJpcGxldCkgPT4gdm9pZCkgPT4gKCkgPT4gdm9pZDtcbn1cblxuZXhwb3J0IHR5cGUgTmd0Y1dvcmtlckFwaSA9IHtcblx0W0sgaW4gQXRvbWljTmFtZV06IE5ndGNBdG9taWNBcGk8Sz47XG59ICYge1xuXHRbSyBpbiBWZWN0b3JOYW1lXTogTmd0Y1ZlY3RvckFwaTtcbn0gJiB7XG5cdGFwcGx5Rm9yY2U6IChmb3JjZTogVHJpcGxldCwgd29ybGRQb2ludDogVHJpcGxldCkgPT4gdm9pZDtcblx0YXBwbHlJbXB1bHNlOiAoaW1wdWxzZTogVHJpcGxldCwgd29ybGRQb2ludDogVHJpcGxldCkgPT4gdm9pZDtcblx0YXBwbHlMb2NhbEZvcmNlOiAoZm9yY2U6IFRyaXBsZXQsIGxvY2FsUG9pbnQ6IFRyaXBsZXQpID0+IHZvaWQ7XG5cdGFwcGx5TG9jYWxJbXB1bHNlOiAoaW1wdWxzZTogVHJpcGxldCwgbG9jYWxQb2ludDogVHJpcGxldCkgPT4gdm9pZDtcblx0YXBwbHlUb3JxdWU6ICh0b3JxdWU6IFRyaXBsZXQpID0+IHZvaWQ7XG5cdHF1YXRlcm5pb246IE5ndGNRdWF0ZXJuaW9uQXBpO1xuXHRyb3RhdGlvbjogTmd0Y1ZlY3RvckFwaTtcblx0c2NhbGVPdmVycmlkZTogKHNjYWxlOiBUcmlwbGV0KSA9PiB2b2lkO1xuXHRzbGVlcDogKCkgPT4gdm9pZDtcblx0d2FrZVVwOiAoKSA9PiB2b2lkO1xuXHRyZW1vdmU6ICgpID0+IHZvaWQ7XG59O1xuXG5leHBvcnQgaW50ZXJmYWNlIE5ndGNCb2R5UHVibGljQXBpIGV4dGVuZHMgTmd0Y1dvcmtlckFwaSB7XG5cdGF0OiAoaW5kZXg6IG51bWJlcikgPT4gTmd0Y1dvcmtlckFwaTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBOZ3RjQm9keVByb3BzTWFwIHtcblx0UGxhbmU6IFBsYW5lUHJvcHM7XG5cdEJveDogQm94UHJvcHM7XG5cdFBhcnRpY2xlOiBQYXJ0aWNsZVByb3BzO1xuXHRDeWxpbmRlcjogQ3lsaW5kZXJQcm9wcztcblx0U3BoZXJlOiBTcGhlcmVQcm9wcztcblx0VHJpbWVzaDogVHJpbWVzaFByb3BzO1xuXHRIZWlnaHRmaWVsZDogSGVpZ2h0ZmllbGRQcm9wcztcblx0Q29udmV4UG9seWhlZHJvbjogQ29udmV4UG9seWhlZHJvblByb3BzO1xuXHRDb21wb3VuZDogQ29tcG91bmRCb2R5UHJvcHM7XG59XG5cbmV4cG9ydCB0eXBlIE5ndGNHZXRCeUluZGV4PFQgZXh0ZW5kcyBCb2R5UHJvcHM+ID0gKGluZGV4OiBudW1iZXIpID0+IFQ7XG5leHBvcnQgdHlwZSBOZ3RjQXJnRm48VCBleHRlbmRzIEJvZHlQcm9wcz4gPSAoYXJnczogTm9uTnVsbGFibGU8VFsnYXJncyddPikgPT4gdHlwZW9mIGFyZ3M7XG4iXX0=
@@ -2,11 +2,11 @@ import { Euler, Quaternion, Vector3 } from 'three';
2
2
  function capitalize(str) {
3
3
  return (str.charAt(0).toUpperCase() + str.slice(1));
4
4
  }
5
- function getUUID(ref, index) {
5
+ function getUUID(body, index) {
6
6
  const suffix = index === undefined ? '' : `/${index}`;
7
- if (typeof ref === 'function')
7
+ if (typeof body === 'function')
8
8
  return null;
9
- return ref && ref.nativeElement && `${ref.nativeElement.uuid}${suffix}`;
9
+ return body && body && `${body.uuid}${suffix}`;
10
10
  }
11
11
  const e = new Euler();
12
12
  const q = new Quaternion();
@@ -14,11 +14,11 @@ function quaternionToRotation(callback) {
14
14
  return (v) => callback(e.setFromQuaternion(q.fromArray(v)).toArray());
15
15
  }
16
16
  let incrementingId = 0;
17
- export function createSubscribe(ref, worker, subscriptions, type, index, target = 'bodies') {
17
+ export function createSubscribe(body, worker, subscriptions, type, index, target = 'bodies') {
18
18
  return (callback) => {
19
19
  const id = incrementingId++;
20
20
  subscriptions[id] = { [type]: callback };
21
- const uuid = getUUID(ref, index);
21
+ const uuid = getUUID(body, index);
22
22
  uuid && worker.subscribe({ props: { id, target, type }, uuid });
23
23
  return () => {
24
24
  delete subscriptions[id];
@@ -36,57 +36,53 @@ export function prepare(object, { position = [0, 0, 0], rotation = [0, 0, 0], us
36
36
  object.updateMatrix();
37
37
  }
38
38
  export function setupCollision(events, { onCollide, onCollideBegin, onCollideEnd }, uuid) {
39
- events[uuid] = {
40
- collide: onCollide,
41
- collideBegin: onCollideBegin,
42
- collideEnd: onCollideEnd,
43
- };
39
+ events[uuid] = { collide: onCollide, collideBegin: onCollideBegin, collideEnd: onCollideEnd };
44
40
  }
45
- export function makeBodyApi(bodyRef, { subscriptions, bodies, scaleOverrides, worker }) {
41
+ export function makeBodyApi(body, worker, { subscriptions, scaleOverrides }) {
46
42
  const makeAtomic = (type, index) => {
47
43
  const op = `set${capitalize(type)}`;
48
44
  return {
49
45
  set: (value) => {
50
- const uuid = getUUID(bodyRef, index);
51
- uuid && worker()[op]({ props: value, uuid });
46
+ const uuid = getUUID(body, index);
47
+ uuid && worker[op]({ props: value, uuid });
52
48
  },
53
- subscribe: createSubscribe(bodyRef, worker(), subscriptions, type, index),
49
+ subscribe: createSubscribe(body, worker, subscriptions, type, index),
54
50
  };
55
51
  };
56
52
  const makeQuaternion = (index) => {
57
53
  const type = 'quaternion';
58
54
  return {
59
55
  copy: ({ w, x, y, z }) => {
60
- const uuid = getUUID(bodyRef, index);
61
- uuid && worker().setQuaternion({ props: [x, y, z, w], uuid });
56
+ const uuid = getUUID(body, index);
57
+ uuid && worker.setQuaternion({ props: [x, y, z, w], uuid });
62
58
  },
63
59
  set: (x, y, z, w) => {
64
- const uuid = getUUID(bodyRef, index);
65
- uuid && worker().setQuaternion({ props: [x, y, z, w], uuid });
60
+ const uuid = getUUID(body, index);
61
+ uuid && worker.setQuaternion({ props: [x, y, z, w], uuid });
66
62
  },
67
- subscribe: createSubscribe(bodyRef, worker(), subscriptions, type, index),
63
+ subscribe: createSubscribe(body, worker, subscriptions, type, index),
68
64
  };
69
65
  };
70
66
  const makeRotation = (index) => {
71
67
  return {
72
68
  copy: ({ x, y, z }) => {
73
- const uuid = getUUID(bodyRef, index);
74
- uuid && worker().setRotation({ props: [x, y, z], uuid });
69
+ const uuid = getUUID(body, index);
70
+ uuid && worker.setRotation({ props: [x, y, z], uuid });
75
71
  },
76
72
  set: (x, y, z) => {
77
- const uuid = getUUID(bodyRef, index);
78
- uuid && worker().setRotation({ props: [x, y, z], uuid });
73
+ const uuid = getUUID(body, index);
74
+ uuid && worker.setRotation({ props: [x, y, z], uuid });
79
75
  },
80
76
  subscribe: (callback) => {
81
77
  const id = incrementingId++;
82
78
  const target = 'bodies';
83
79
  const type = 'quaternion';
84
- const uuid = getUUID(bodyRef, index);
80
+ const uuid = getUUID(body, index);
85
81
  subscriptions[id] = { [type]: quaternionToRotation(callback) };
86
- uuid && worker().subscribe({ props: { id, target, type }, uuid });
82
+ uuid && worker.subscribe({ props: { id, target, type }, uuid });
87
83
  return () => {
88
84
  delete subscriptions[id];
89
- worker().unsubscribe({ props: id });
85
+ worker.unsubscribe({ props: id });
90
86
  };
91
87
  },
92
88
  };
@@ -95,21 +91,21 @@ export function makeBodyApi(bodyRef, { subscriptions, bodies, scaleOverrides, wo
95
91
  const op = `set${capitalize(type)}`;
96
92
  return {
97
93
  copy: ({ x, y, z }) => {
98
- const uuid = getUUID(bodyRef, index);
99
- uuid && worker()[op]({ props: [x, y, z], uuid });
94
+ const uuid = getUUID(body, index);
95
+ uuid && worker[op]({ props: [x, y, z], uuid });
100
96
  },
101
97
  set: (x, y, z) => {
102
- const uuid = getUUID(bodyRef, index);
103
- uuid && worker()[op]({ props: [x, y, z], uuid });
98
+ const uuid = getUUID(body, index);
99
+ uuid && worker[op]({ props: [x, y, z], uuid });
104
100
  },
105
- subscribe: createSubscribe(bodyRef, worker(), subscriptions, type, index),
101
+ subscribe: createSubscribe(body, worker, subscriptions, type, index),
106
102
  };
107
103
  };
108
104
  const makeRemove = (index) => {
109
- const uuid = getUUID(bodyRef, index);
105
+ const uuid = getUUID(body, index);
110
106
  return () => {
111
107
  if (uuid)
112
- worker().removeBodies({ uuid: [uuid] });
108
+ worker.removeBodies({ uuid: [uuid] });
113
109
  };
114
110
  };
115
111
  function makeApi(index) {
@@ -119,24 +115,24 @@ export function makeBodyApi(bodyRef, { subscriptions, bodies, scaleOverrides, wo
119
115
  angularFactor: makeVec('angularFactor', index),
120
116
  angularVelocity: makeVec('angularVelocity', index),
121
117
  applyForce(force, worldPoint) {
122
- const uuid = getUUID(bodyRef, index);
123
- uuid && worker().applyForce({ props: [force, worldPoint], uuid });
118
+ const uuid = getUUID(body, index);
119
+ uuid && worker.applyForce({ props: [force, worldPoint], uuid });
124
120
  },
125
121
  applyImpulse(impulse, worldPoint) {
126
- const uuid = getUUID(bodyRef, index);
127
- uuid && worker().applyImpulse({ props: [impulse, worldPoint], uuid });
122
+ const uuid = getUUID(body, index);
123
+ uuid && worker.applyImpulse({ props: [impulse, worldPoint], uuid });
128
124
  },
129
125
  applyLocalForce(force, localPoint) {
130
- const uuid = getUUID(bodyRef, index);
131
- uuid && worker().applyLocalForce({ props: [force, localPoint], uuid });
126
+ const uuid = getUUID(body, index);
127
+ uuid && worker.applyLocalForce({ props: [force, localPoint], uuid });
132
128
  },
133
129
  applyLocalImpulse(impulse, localPoint) {
134
- const uuid = getUUID(bodyRef, index);
135
- uuid && worker().applyLocalImpulse({ props: [impulse, localPoint], uuid });
130
+ const uuid = getUUID(body, index);
131
+ uuid && worker.applyLocalImpulse({ props: [impulse, localPoint], uuid });
136
132
  },
137
133
  applyTorque(torque) {
138
- const uuid = getUUID(bodyRef, index);
139
- uuid && worker().applyTorque({ props: [torque], uuid });
134
+ const uuid = getUUID(body, index);
135
+ uuid && worker.applyTorque({ props: [torque], uuid });
140
136
  },
141
137
  collisionFilterGroup: makeAtomic('collisionFilterGroup', index),
142
138
  collisionFilterMask: makeAtomic('collisionFilterMask', index),
@@ -151,13 +147,13 @@ export function makeBodyApi(bodyRef, { subscriptions, bodies, scaleOverrides, wo
151
147
  quaternion: makeQuaternion(index),
152
148
  rotation: makeRotation(index),
153
149
  scaleOverride(scale) {
154
- const uuid = getUUID(bodyRef, index);
150
+ const uuid = getUUID(body, index);
155
151
  if (uuid)
156
152
  scaleOverrides[uuid] = new Vector3(...scale);
157
153
  },
158
154
  sleep() {
159
- const uuid = getUUID(bodyRef, index);
160
- uuid && worker().sleep({ uuid });
155
+ const uuid = getUUID(body, index);
156
+ uuid && worker.sleep({ uuid });
161
157
  },
162
158
  sleepSpeedLimit: makeAtomic('sleepSpeedLimit', index),
163
159
  sleepTimeLimit: makeAtomic('sleepTimeLimit', index),
@@ -165,8 +161,8 @@ export function makeBodyApi(bodyRef, { subscriptions, bodies, scaleOverrides, wo
165
161
  velocity: makeVec('velocity', index),
166
162
  remove: makeRemove(index),
167
163
  wakeUp() {
168
- const uuid = getUUID(bodyRef, index);
169
- uuid && worker().wakeUp({ uuid });
164
+ const uuid = getUUID(body, index);
165
+ uuid && worker.wakeUp({ uuid });
170
166
  },
171
167
  };
172
168
  }
@@ -194,4 +190,4 @@ export const defaultTransformArgs = {
194
190
  },
195
191
  Compound: (args) => args,
196
192
  };
197
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL2Nhbm5vbi9ib2R5L3NyYy9saWIvdXRpbHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBeUJBLE9BQU8sRUFBRSxLQUFLLEVBQVksVUFBVSxFQUFFLE9BQU8sRUFBRSxNQUFNLE9BQU8sQ0FBQztBQUc3RCxTQUFTLFVBQVUsQ0FBbUIsR0FBTTtJQUMzQyxPQUFPLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLEVBQUUsR0FBRyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFrQixDQUFDO0FBQ3RFLENBQUM7QUFFRCxTQUFTLE9BQU8sQ0FBQyxHQUF5QixFQUFFLEtBQWM7SUFDekQsTUFBTSxNQUFNLEdBQUcsS0FBSyxLQUFLLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLEtBQUssRUFBRSxDQUFDO0lBQ3RELElBQUksT0FBTyxHQUFHLEtBQUssVUFBVTtRQUFFLE9BQU8sSUFBSSxDQUFDO0lBQzNDLE9BQU8sR0FBRyxJQUFJLEdBQUcsQ0FBQyxhQUFhLElBQUksR0FBRyxHQUFHLENBQUMsYUFBYSxDQUFDLElBQUksR0FBRyxNQUFNLEVBQUUsQ0FBQztBQUN6RSxDQUFDO0FBRUQsTUFBTSxDQUFDLEdBQUcsSUFBSSxLQUFLLEVBQUUsQ0FBQztBQUN0QixNQUFNLENBQUMsR0FBRyxJQUFJLFVBQVUsRUFBRSxDQUFDO0FBRTNCLFNBQVMsb0JBQW9CLENBQUMsUUFBOEI7SUFDM0QsT0FBTyxDQUFDLENBQU8sRUFBRSxFQUFFLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxFQUFhLENBQUMsQ0FBQztBQUN4RixDQUFDO0FBRUQsSUFBSSxjQUFjLEdBQUcsQ0FBQyxDQUFD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LEVBQUUsQ0FBQyxJQUErQixFQUFFLEVBQUUsQ0FBQyxJQUFJO0NBQ25ELENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBFbGVtZW50UmVmIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge1xuXHRBdG9taWNOYW1lLFxuXHRCb2R5UHJvcHMsXG5cdEJveFByb3BzLFxuXHRDYW5ub25Xb3JrZXJBUEksXG5cdENvbXBvdW5kQm9keVByb3BzLFxuXHRDb252ZXhQb2x5aGVkcm9uQXJncyxcblx0Q3lsaW5kZXJBcmdzLFxuXHRIZWlnaHRmaWVsZEFyZ3MsXG5cdFBhcnRpY2xlUHJvcHMsXG5cdFBsYW5lUHJvcHMsXG5cdFByb3BWYWx1ZSxcblx0UXVhZCxcblx0U2V0T3BOYW1lLFxuXHRTcGhlcmVBcmdzLFxuXHRTdWJzY3JpcHRpb25OYW1lLFxuXHRTdWJzY3JpcHRpb25UYXJnZXQsXG5cdFN1YnNjcmlwdGlvbnMsXG5cdFRyaW1lc2hBcmdzLFxuXHRUcmlwbGV0LFxuXHRWZWN0b3JOYW1lLFxufSBmcm9tICdAcG1uZHJzL2Nhbm5vbi13b3JrZXItYXBpJztcbmltcG9ydCB7IE5ndEluamVjdGVkUmVmIH0gZnJvbSAnYW5ndWxhci10aHJlZSc7XG5pbXBvcnQgeyBOZ3RjQ2Fubm9uRXZlbnRzLCBOZ3RjUGh5c2ljc0FwaSB9IGZyb20gJ2FuZ3VsYXItdGhyZWUtY2Fubm9uJztcbmltcG9ydCB7IEV1bGVyLCBPYmplY3QzRCwgUXVhdGVybmlvbiwgVmVjdG9yMyB9IGZyb20gJ3RocmVlJztcbmltcG9ydCB7IE5ndGNXb3JrZXJBcGkgfSBmcm9tICcuL3R5cGVzJztcblxuZnVuY3Rpb24gY2FwaXRhbGl6ZTxUIGV4dGVuZHMgc3RyaW5nPihzdHI6IFQpOiBDYXBpdGFsaXplPFQ+IHtcblx0cmV0dXJuIChzdHIuY2hhckF0KDApLnRvVXBwZXJDYXNlKCkgKyBzdHIuc2xpY2UoMSkpIGFzIENhcGl0YWxpemU8VD47XG59XG5cbmZ1bmN0aW9uIGdldFVVSUQocmVmOiBFbGVtZW50UmVmPE9iamVjdDNEPiwgaW5kZXg/OiBudW1iZXIpIHtcblx0Y29uc3Qgc3VmZml4ID0gaW5kZXggPT09IHVuZGVmaW5lZCA/ICcnIDogYC8ke2luZGV4fWA7XG5cdGlmICh0eXBlb2YgcmVmID09PSAnZnVuY3Rpb24nKSByZXR1cm4gbnVsbDtcblx0cmV0dXJuIHJlZiAmJiByZWYubmF0aXZlRWxlbWVudCAmJiBgJHtyZWYubmF0aXZlRWxlbWVudC51dWlkfSR7c3VmZml4fWA7XG59XG5cbmNvbnN0IGUgPSBuZXcgRXVsZXIoKTtcbmNvbnN0IHEgPSBuZXcgUXVhdGVybmlvbigpO1xuXG5mdW5jdGlvbiBxdWF0ZXJuaW9uVG9Sb3RhdGlvbihjYWxsYmFjazogKHY6IFRyaXBsZXQpID0+IHZvaWQpIHtcblx0cmV0dXJuICh2OiBRdWFkKSA9PiBjYWxsYmFjayhlLnNldEZyb21RdWF0ZXJuaW9uKHEuZnJvbUFycmF5KHYpKS50b0FycmF5KCkgYXMgVHJpcGxldCk7XG59XG5cbmxldCBpbmNyZW1lbnRpbmdJZCA9IDA7XG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlU3Vic2NyaWJlPFQgZXh0ZW5kcyBTdWJzY3JpcHRpb25OYW1lPihcblx0cmVmOiBFbGVtZW50UmVmPE9iamVjdDNEPixcblx0d29ya2VyOiBDYW5ub25Xb3JrZXJBUEksXG5cdHN1YnNjcmlwdGlvbnM6IFN1YnNjcmlwdGlvbnMsXG5cdHR5cGU6IFQsXG5cdGluZGV4PzogbnVtYmVyLFxuXHR0YXJnZXQ6IFN1YnNjcmlwdGlvblRhcmdldCA9ICdib2RpZXMnLFxuKSB7XG5cdHJldHVybiAoY2FsbGJhY2s6ICh2YWx1ZTogUHJvcFZhbHVlPFQ+KSA9PiB2b2lkKSA9PiB7XG5cdFx0Y29uc3QgaWQgPSBpbmNyZW1lbnRpbmdJZCsrO1xuXHRcdHN1YnNjcmlwdGlvbnNbaWRdID0geyBbdHlwZV06IGNhbGxiYWNrIH07XG5cdFx0Y29uc3QgdXVpZCA9IGdldFVVSUQocmVmLCBpbmRleCk7XG5cdFx0dXVpZCAmJiB3b3JrZXIuc3Vic2NyaWJlKHsgcHJvcHM6IHsgaWQsIHRhcmdldCwgdHlwZSB9LCB1dWlkIH0pO1xuXHRcdHJldHVybiAoKSA9PiB7XG5cdFx0XHRkZWxldGUgc3Vic2NyaXB0aW9uc1tpZF07XG5cdFx0XHR3b3JrZXIudW5zdWJzY3JpYmUoeyBwcm9wczogaWQgfSk7XG5cdFx0fTtcblx0fTtcbn1cblxuZnVuY3Rpb24gbWFrZVRyaXBsZXQodjogVmVjdG9yMyB8IFRyaXBsZXQpOiBUcmlwbGV0IHtcblx0cmV0dXJuIHYgaW5zdGFuY2VvZiBWZWN0b3IzID8gW3YueCwgdi55LCB2LnpdIDogdjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHByZXBhcmUob2JqZWN0OiBPYmplY3QzRCwgeyBwb3NpdGlvbiA9IFswLCAwLCAwXSwgcm90YXRpb24gPSBbMCwgMCwgMF0sIHVzZXJEYXRhID0ge30gfTogQm9keVByb3BzKSB7XG5cdG9iamVjdC51c2VyRGF0YSA9IHVzZXJEYXRhO1xuXHRvYmplY3QucG9zaXRpb24uc2V0KC4uLnBvc2l0aW9uKTtcblx0b2JqZWN0LnJvdGF0aW9uLnNldCguLi5yb3RhdGlvbik7XG5cdG9iamVjdC51cGRhdGVNYXRyaXgoKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNldHVwQ29sbGlzaW9uKFxuXHRldmVudHM6IE5ndGNDYW5ub25FdmVudHMsXG5cdHsgb25Db2xsaWRlLCBvbkNvbGxpZGVCZWdpbiwgb25Db2xsaWRlRW5kIH06IFBhcnRpYWw8Qm9keVByb3BzPixcblx0dXVpZDogc3RyaW5nLFxuKSB7XG5cdGV2ZW50c1t1dWlkXSA9IHtcblx0XHRjb2xsaWRlOiBvbkNvbGxpZGUsXG5cdFx0Y29sbGlkZUJlZ2luOiBvbkNvbGxpZGVCZWdpbixcblx0XHRjb2xsaWRlRW5kOiBvbkNvbGxpZGVFbmQsXG5cdH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBtYWtlQm9keUFwaShcblx0Ym9keVJlZjogTmd0SW5qZWN0ZWRSZWY8T2JqZWN0M0Q+LFxuXHR7IHN1YnNjcmlwdGlvbnMsIGJvZGllcywgc2NhbGVPdmVycmlkZXMsIHdvcmtlciB9OiBOZ3RjUGh5c2ljc0FwaSxcbikge1xuXHRjb25zdCBtYWtlQXRvbWljID0gPFQgZXh0ZW5kcyBBdG9taWNOYW1lPih0eXBlOiBULCBpbmRleD86IG51bWJlcikgPT4ge1xuXHRcdGNvbnN0IG9wOiBTZXRPcE5hbWU8VD4gPSBgc2V0JHtjYXBpdGFsaXplKHR5cGUpfWA7XG5cblx0XHRyZXR1cm4ge1xuXHRcdFx0c2V0OiAodmFsdWU6IFByb3BWYWx1ZTxUPikgPT4ge1xuXHRcdFx0XHRjb25zdCB1dWlkID0gZ2V0VVVJRChib2R5UmVmLCBpbmRleCk7XG5cdFx0XHRcdHV1aWQgJiYgd29ya2VyKClbb3BdKHsgcHJvcHM6IHZhbHVlLCB1dWlkIH0gYXMgbmV2ZXIpO1xuXHRcdFx0fSxcblx0XHRcdHN1YnNjcmliZTogY3JlYXRlU3Vic2NyaWJlKGJvZHlSZWYsIHdvcmtlcigpLCBzdWJzY3JpcHRpb25zLCB0eXBlLCBpbmRleCksXG5cdFx0fTtcblx0fTtcblxuXHRjb25zdCBtYWtlUXVhdGVybmlvbiA9IChpbmRleD86IG51bWJlcikgPT4ge1xuXHRcdGNvbnN0IHR5cGUgPSAncXVhdGVybmlvbic7XG5cdFx0cmV0dXJuIHtcblx0XHRcdGNvcHk6ICh7IHcsIHgsIHksIHogfTogUXVhdGVybmlvbikgPT4ge1xuXHRcdFx0XHRjb25zdCB1dWlkID0gZ2V0VVVJRChib2R5UmVmLCBpbmRleCk7XG5cdFx0XHRcdHV1aWQgJiYgd29ya2VyKCkuc2V0UXVhdGVybmlvbih7IHByb3BzOiBbeCwgeSwgeiwgd10sIHV1aWQgfSk7XG5cdFx0XHR9LFxuXHRcdFx0c2V0OiAoeDogbnVtYmVyLCB5OiBudW1iZXIsIHo6IG51bWJlciwgdzogbnVtYmVyKSA9PiB7XG5cdFx0XHRcdGNvbnN0IHV1aWQgPSBnZXRVVUlEKGJvZHlSZWYsIGluZGV4KTtcblx0XHRcdFx0dXVpZCAmJiB3b3JrZXIoKS5zZXRRdWF0ZXJuaW9uKHsgcHJvcHM6IFt4LCB5LCB6LCB3XSwgdXVpZCB9KTtcblx0XHRcdH0sXG5cdFx0XHRzdWJzY3JpYmU6IGNyZWF0ZVN1YnNjcmliZShib2R5UmVmLCB3b3JrZXIoKSwgc3Vic2NyaXB0aW9ucywgdHlwZSwgaW5kZXgpLFxuXHRcdH07XG5cdH07XG5cblx0Y29uc3QgbWFrZVJvdGF0aW9uID0gKGluZGV4PzogbnVtYmVyKSA9PiB7XG5cdFx0cmV0dXJuIHtcblx0XHRcdGNvcHk6ICh7IHgsIHksIHogfTogVmVjdG9yMyB8IEV1bGVyKSA9PiB7XG5cdFx0XHRcdGNvbnN0IHV1aWQgPSBnZXRVVUlEKGJvZHlSZWYsIGluZGV4KTtcblx0XHRcdFx0dXVpZCAmJiB3b3JrZXIoKS5zZXRSb3RhdGlvbih7IHByb3BzOiBbeCwgeSwgel0sIHV1aWQgfSk7XG5cdFx0XHR9LFxuXHRcdFx0c2V0OiAoeDogbnVtYmVyLCB5OiBudW1iZXIsIHo6IG51bWJlcikgPT4ge1xuXHRcdFx0XHRjb25zdCB1dWlkID0gZ2V0VVVJRChib2R5UmVmLCBpbmRleCk7XG5cdFx0XHRcdHV1aWQgJiYgd29ya2VyKCkuc2V0Um90YXRpb24oeyBwcm9wczogW3gsIHksIHpdLCB1dWlkIH0pO1xuXHRcdFx0fSxcblx0XHRcdHN1YnNjcmliZTogKGNhbGxiYWNrOiAodmFsdWU6IFRyaXBsZXQpID0+IHZvaWQpID0+IHtcblx0XHRcdFx0Y29uc3QgaWQgPSBpbmNyZW1lbnRpbmdJZCsrO1xuXHRcdFx0XHRjb25zdCB0YXJnZXQgPSAnYm9kaWVzJztcblx0XHRcdFx0Y29uc3QgdHlwZSA9ICdxdWF0ZXJuaW9uJztcblx0XHRcdFx0Y29uc3QgdXVpZCA9IGdldFVVSUQoYm9keVJlZiwgaW5kZXgpO1xuXHRcdFx0XHRzdWJzY3JpcHRpb25zW2lkXSA9IHsgW3R5cGVdOiBxdWF0ZXJuaW9uVG9Sb3RhdGlvbihjYWxsYmFjaykgfTtcblx0XHRcdFx0dXVpZCAmJiB3b3JrZXIoKS5zdWJzY3JpYmUoeyBwcm9wczogeyBpZCwgdGFyZ2V0LCB0eXBlIH0sIHV1aWQgfSk7XG5cdFx0XHRcdHJldHVybiAoKSA9PiB7XG5cdFx0XHRcdFx0ZGVsZXRlIHN1YnNjcmlwdGlvbnNbaWRdO1xuXHRcdFx0XHRcdHdvcmtlcigpLnVuc3Vic2NyaWJlKHsgcHJvcHM6IGlkIH0pO1xuXHRcdFx0XHR9O1xuXHRcdFx0fSxcblx0XHR9O1xuXHR9O1xuXHRjb25zdCBtYWtlVmVjID0gKHR5cGU6IFZlY3Rvck5hbWUsIGluZGV4PzogbnVtYmVyKSA9PiB7XG5cdFx0Y29uc3Qgb3A6IFNldE9wTmFtZTxWZWN0b3JOYW1lPiA9IGBzZXQke2NhcGl0YWxpemUodHlwZSl9YDtcblx0XHRyZXR1cm4ge1xuXHRcdFx0Y29weTogKHsgeCwgeSwgeiB9OiBWZWN0b3IzIHwgRXVsZXIpID0+IHtcblx0XHRcdFx0Y29uc3QgdXVpZCA9IGdldFVVSUQoYm9keVJlZiwgaW5kZXgpO1xuXHRcdFx0XHR1dWlkICYmIHdvcmtlcigpW29wXSh7IHByb3BzOiBbeCwgeSwgel0sIHV1aWQgfSk7XG5cdFx0XHR9LFxuXHRcdFx0c2V0OiAoeDogbnVtYmVyLCB5OiBudW1iZXIsIHo6IG51bWJlcikgPT4ge1xuXHRcdFx0XHRjb25zdCB1dWlkID0gZ2V0VVVJRChib2R5UmVmLCBpbmRleCk7XG5cdFx0XHRcdHV1aWQgJiYgd29ya2VyKClbb3BdKHsgcHJvcHM6IFt4LCB5LCB6XSwgdXVpZCB9KTtcblx0XHRcdH0sXG5cdFx0XHRzdWJzY3JpYmU6IGNyZWF0ZVN1YnNjcmliZShib2R5UmVmLCB3b3JrZXIoKSwgc3Vic2NyaXB0aW9ucywgdHlwZSwgaW5kZXgpLFxuXHRcdH07XG5cdH07XG5cblx0Y29uc3QgbWFrZVJlbW92ZSA9IChpbmRleD86IG51bWJlcikgPT4ge1xuXHRcdGNvbnN0IHV1aWQgPSBnZXRVVUlEKGJvZHlSZWYsIGluZGV4KTtcblx0XHRyZXR1cm4gKCkgPT4ge1xuXHRcdFx0aWYgKHV1aWQpIHdvcmtlcigpLnJlbW92ZUJvZGllcyh7IHV1aWQ6IFt1dWlkXSB9KTtcblx0XHR9O1xuXHR9O1xuXG5cdGZ1bmN0aW9uIG1ha2VBcGkoaW5kZXg/OiBudW1iZXIpOiBOZ3RjV29ya2VyQXBpIHtcblx0XHRyZXR1cm4ge1xuXHRcdFx0YWxsb3dTbGVlcDogbWFrZUF0b21pYygnYWxsb3dTbGVlcCcsIGluZGV4KSxcblx0XHRcdGFuZ3VsYXJEYW1waW5nOiBtYWtlQXRvbWljKCdhbmd1bGFyRGFtcGluZycsIGluZGV4KSxcblx0XHRcdGFuZ3VsYXJGYWN0b3I6IG1ha2VWZWMoJ2FuZ3VsYXJGYWN0b3InLCBpbmRleCksXG5cdFx0XHRhbmd1bGFyVmVsb2NpdHk6IG1ha2VWZWMoJ2FuZ3VsYXJWZWxvY2l0eScsIGluZGV4KSxcblx0XHRcdGFwcGx5Rm9yY2UoZm9yY2U6IFRyaXBsZXQsIHdvcmxkUG9pbnQ6IFRyaXBsZXQpIHtcblx0XHRcdFx0Y29uc3QgdXVpZCA9IGdldFVVSUQoYm9keVJlZiwgaW5kZXgpO1xuXHRcdFx0XHR1dWlkICYmIHdvcmtlcigpLmFwcGx5Rm9yY2UoeyBwcm9wczogW2ZvcmNlLCB3b3JsZFBvaW50XSwgdXVpZCB9KTtcblx0XHRcdH0sXG5cdFx0XHRhcHBseUltcHVsc2UoaW1wdWxzZTogVHJpcGxldCwgd29ybGRQb2ludDogVHJpcGxldCkge1xuXHRcdFx0XHRjb25zdCB1dWlkID0gZ2V0VVVJRChib2R5UmVmLCBpbmRleCk7XG5cdFx0XHRcdHV1aWQgJiYgd29ya2VyKCkuYXBwbHlJbXB1bHNlKHsgcHJvcHM6IFtpbXB1bHNlLCB3b3JsZFBvaW50XSwgdXVpZCB9KTtcblx0XHRcdH0sXG5cdFx0XHRhcHBseUxvY2FsRm9yY2UoZm9yY2U6IFRyaXBsZXQsIGxvY2FsUG9pbnQ6IFRyaXBsZXQpIHtcblx0XHRcdFx0Y29uc3QgdXVpZCA9IGdldFVVSUQoYm9keVJlZiwgaW5kZXgpO1xuXHRcdFx0XHR1dWlkICYmIHdvcmtlcigpLmFwcGx5TG9jYWxGb3JjZSh7IHByb3BzOiBbZm9yY2UsIGxvY2FsUG9pbnRdLCB1dWlkIH0pO1xuXHRcdFx0fSxcblx0XHRcdGFwcGx5TG9jYWxJbXB1bHNlKGltcHVsc2U6IFRyaXBsZXQsIGxvY2FsUG9pbnQ6IFRyaXBsZXQpIHtcblx0XHRcdFx0Y29uc3QgdXVpZCA9IGdldFVVSUQoYm9keVJlZiwgaW5kZXgpO1xuXHRcdFx0XHR1dWlkICYmIHdvcmtlcigpLmFwcGx5TG9jYWxJbXB1bHNlKHsgcHJvcHM6IFtpbXB1bHNlLCBsb2NhbFBvaW50XSwgdXVpZCB9KTtcblx0XHRcdH0sXG5cdFx0XHRhcHBseVRvcnF1ZSh0b3JxdWU6IFRyaXBsZXQpIHtcblx0XHRcdFx0Y29uc3QgdXVpZCA9IGdldFVVSUQoYm9keVJlZiwgaW5kZXgpO1xuXHRcdFx0XHR1dWlkICYmIHdvcmtlcigpLmFwcGx5VG9ycXVlKHsgcHJvcHM6IFt0b3JxdWVdLCB1dWlkIH0pO1xuXHRcdFx0fSxcblx0XHRcdGNvbGxpc2lvbkZpbHRlckdyb3VwOiBtYWtlQXRvbWljKCdjb2xsaXNpb25GaWx0ZXJHcm91cCcsIGluZGV4KSxcblx0XHRcdGNvbGxpc2lvbkZpbHRlck1hc2s6IG1ha2VBdG9taWMoJ2NvbGxpc2lvbkZpbHRlck1hc2snLCBpbmRleCksXG5cdFx0XHRjb2xsaXNpb25SZXNwb25zZTogbWFrZUF0b21pYygnY29sbGlzaW9uUmVzcG9uc2UnLCBpbmRleCksXG5cdFx0XHRmaXhlZFJvdGF0aW9uOiBtYWtlQXRvbWljKCdmaXhlZFJvdGF0aW9uJywgaW5kZXgpLFxuXHRcdFx0aXNUcmlnZ2VyOiBtYWtlQXRvbWljKCdpc1RyaWdnZXInLCBpbmRleCksXG5cdFx0XHRsaW5lYXJEYW1waW5nOiBtYWtlQXRvbWljKCdsaW5lYXJEYW1waW5nJywgaW5kZXgpLFxuXHRcdFx0bGluZWFyRmFjdG9yOiBtYWtlVmVjKCdsaW5lYXJGYWN0b3InLCBpbmRleCksXG5cdFx0XHRtYXNzOiBtYWtlQXRvbWljKCdtYXNzJywgaW5kZXgpLFxuXHRcdFx0bWF0ZXJpYWw6IG1ha2VBdG9taWMoJ21hdGVyaWFsJywgaW5kZXgpLFxuXHRcdFx0cG9zaXRpb246IG1ha2VWZWMoJ3Bvc2l0aW9uJywgaW5kZXgpLFxuXHRcdFx0cXVhdGVybmlvbjogbWFrZVF1YXRlcm5pb24oaW5kZXgpLFxuXHRcdFx0cm90YXRpb246IG1ha2VSb3RhdGlvbihpbmRleCksXG5cdFx0XHRzY2FsZU92ZXJyaWRlKHNjYWxlKSB7XG5cdFx0XHRcdGNvbnN0IHV1aWQgPSBnZXRVVUlEKGJvZHlSZWYsIGluZGV4KTtcblx0XHRcdFx0aWYgKHV1aWQpIHNjYWxlT3ZlcnJpZGVzW3V1aWRdID0gbmV3IFZlY3RvcjMoLi4uc2NhbGUpO1xuXHRcdFx0fSxcblx0XHRcdHNsZWVwKCkge1xuXHRcdFx0XHRjb25zdCB1dWlkID0gZ2V0VVVJRChib2R5UmVmLCBpbmRleCk7XG5cdFx0XHRcdHV1aWQgJiYgd29ya2VyKCkuc2xlZXAoeyB1dWlkIH0pO1xuXHRcdFx0fSxcblx0XHRcdHNsZWVwU3BlZWRMaW1pdDogbWFrZUF0b21pYygnc2xlZXBTcGVlZExpbWl0JywgaW5kZXgpLFxuXHRcdFx0c2xlZXBUaW1lTGltaXQ6IG1ha2VBdG9taWMoJ3NsZWVwVGltZUxpbWl0JywgaW5kZXgpLFxuXHRcdFx0dXNlckRhdGE6IG1ha2VBdG9taWMoJ3VzZXJEYXRhJywgaW5kZXgpLFxuXHRcdFx0dmVsb2NpdHk6IG1ha2VWZWMoJ3ZlbG9jaXR5JywgaW5kZXgpLFxuXHRcdFx0cmVtb3ZlOiBtYWtlUmVtb3ZlKGluZGV4KSxcblx0XHRcdHdha2VVcCgpIHtcblx0XHRcdFx0Y29uc3QgdXVpZCA9IGdldFVVSUQoYm9keVJlZiwgaW5kZXgpO1xuXHRcdFx0XHR1dWlkICYmIHdvcmtlcigpLndha2VVcCh7IHV1aWQgfSk7XG5cdFx0XHR9LFxuXHRcdH07XG5cdH1cblx0Y29uc3QgY2FjaGU6IFJlY29yZDxudW1iZXIsIE5ndGNXb3JrZXJBcGk+ID0ge307XG5cdHJldHVybiB7IC4uLm1ha2VBcGkoKSwgYXQ6IChpbmRleDogbnVtYmVyKSA9PiBjYWNoZVtpbmRleF0gfHwgKGNhY2hlW2luZGV4XSA9IG1ha2VBcGkoaW5kZXgpKSB9O1xufVxuXG5leHBvcnQgY29uc3QgZGVmYXVsdFRyYW5zZm9ybUFyZ3MgPSB7XG5cdFBsYW5lOiAoYXJnczogUGxhbmVQcm9wc1snYXJncyddKSA9PiBbXSxcblx0Qm94OiAoYXJnczogQm94UHJvcHNbJ2FyZ3MnXSA9IFsxLCAxLCAxXSkgPT4gYXJncyxcblx0VHJpbWVzaDogKGFyZ3M6IFRyaW1lc2hBcmdzKSA9PiBhcmdzLFxuXHRDeWxpbmRlcjogKGFyZ3M6IEN5bGluZGVyQXJncyA9IFtdKSA9PiBbXSxcblx0SGVpZ2h0ZmllbGQ6IChhcmdzOiBIZWlnaHRmaWVsZEFyZ3MpID0+IGFyZ3MsXG5cdENvbnZleFBvbHloZWRyb246IChbdmVydGljZXMsIGZhY2VzLCBub3JtYWxzLCBheGVzLCBib3VuZGluZ1NwaGVyZVJhZGl1c106IENvbnZleFBvbHloZWRyb25BcmdzID0gW10pID0+IFtcblx0XHR2ZXJ0aWNlcyAmJiB2ZXJ0aWNlcy5tYXAobWFrZVRyaXBsZXQpLFxuXHRcdGZhY2VzLFxuXHRcdG5vcm1hbHMgJiYgbm9ybWFscy5tYXAobWFrZVRyaXBsZXQpLFxuXHRcdGF4ZXMgJiYgYXhlcy5tYXAobWFrZVRyaXBsZXQpLFxuXHRcdGJvdW5kaW5nU3BoZXJlUmFkaXVzLFxuXHRdLFxuXHRQYXJ0aWNsZTogKGFyZ3M6IFBhcnRpY2xlUHJvcHNbJ2FyZ3MnXSkgPT4gW10sXG5cdFNwaGVyZTogKGFyZ3M6IFNwaGVyZUFyZ3MgPSBbMV0pID0+IHtcblx0XHRpZiAoIUFycmF5LmlzQXJyYXkoYXJncykpIHRocm93IG5ldyBFcnJvcignU3BoZXJlIGJvZHkgYXJncyBtdXN0IGJlIGFuIGFycmF5Jyk7XG5cdFx0cmV0dXJuIFthcmdzWzBdXTtcblx0fSxcblx0Q29tcG91bmQ6IChhcmdzOiBDb21wb3VuZEJvZHlQcm9wc1snYXJncyddKSA9PiBhcmdzLFxufTtcbiJdfQ==
193
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL2Nhbm5vbi9ib2R5L3NyYy9saWIvdXRpbHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBdUJBLE9BQU8sRUFBRSxLQUFLLEVBQVksVUFBVSxFQUFFLE9BQU8sRUFBRSxNQUFNLE9BQU8sQ0FBQztBQUc3RCxTQUFTLFVBQVUsQ0FBbUIsR0FBTTtJQUMzQyxPQUFPLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLEVBQUUsR0FBRyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFrQixDQUFDO0FBQ3RFLENBQUM7QUFFRCxTQUFTLE9BQU8sQ0FBQyxJQUFjLEVBQUUsS0FBYztJQUM5QyxNQUFNLE1BQU0sR0FBRyxLQUFLLEtBQUssU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksS0FBSyxFQUFFLENBQUM7SUFDdEQsSUFBSSxPQUFPLElBQUksS0FBSyxVQUFVO1FBQUUsT0FBTyxJQUFJLENBQUM7SUFDNUMsT0FBTyxJQUFJLElBQUksSUFBSSxJQUFJLEdBQUcsSUFBSSxDQUFDLElBQUksR0FBRyxNQUFNLEVBQUUsQ0FBQztBQUNoRCxDQUFDO0FBRUQsTUFBTSxDQUFDLEdBQUcsSUFBSSxLQUFLLEVBQUUsQ0FBQztBQUN0QixNQUFNLENBQUMsR0FBRyxJQUFJLFVBQVUsRUFBRSxDQUFDO0FBRTNCLFNBQVMsb0JBQW9CLENBQUMsUUFBOEI7SUFDM0QsT0FBTyxDQUFDLENBQU8sRUFBRSxFQUFFLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxFQUFhLENBQUMsQ0FBQztBQUN4RixDQUFDO0FBRUQsSUFBSSxjQUFjLEdBQUcsQ0FBQyxDQUFDO0FBQ3ZCLE1BQU0sVUFBVSxlQUFl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RSxFQUFFLENBQUMsRUFBRTtJQUN2QyxHQUFHLEVBQUUsQ0FBQyxPQUF5QixDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLElBQUk7SUFDakQsT0FBTyxFQUFFLENBQUMsSUFBaUIsRUFBRSxFQUFFLENBQUMsSUFBSTtJQUNwQyxRQUFRLEVBQUUsQ0FBQyxPQUFxQixFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUU7SUFDekMsV0FBVyxFQUFFLENBQUMsSUFBcUIsRUFBRSxFQUFFLENBQUMsSUFBSTtJQUM1QyxnQkFBZ0IsRUFBRSxDQUFDLENBQUMsUUFBUSxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLG9CQUFvQixJQUEwQixFQUFFLEVBQUUsRUFBRSxDQUFDO1FBQ3hHLFFBQVEsSUFBSSxRQUFRLENBQUMsR0FBRyxDQUFDLFdBQVcsQ0FBQztRQUNyQyxLQUFLO1FBQ0wsT0FBTyxJQUFJLE9BQU8sQ0FBQyxHQUFHLENBQUMsV0FBVyxDQUFDO1FBQ25DLElBQUksSUFBSSxJQUFJLENBQUMsR0FBRyxDQUFDLFdBQVcsQ0FBQztRQUM3QixvQkFBb0I7S0FDcEI7SUFDRCxRQUFRLEVBQUUsQ0FBQyxJQUEyQixFQUFFLEVBQUUsQ0FBQyxFQUFFO0lBQzdDLE1BQU0sRUFBRSxDQUFDLE9BQW1CLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRTtRQUNsQyxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUM7WUFBRSxNQUFNLElBQUksS0FBSyxDQUFDLG1DQUFtQyxDQUFDLENBQUM7UUFDL0UsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2xCLENBQUM7SUFDRCxRQUFRLEVBQUUsQ0FBQyxJQUErQixFQUFFLEVBQUUsQ0FBQyxJQUFJO0NBQ25ELENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuXHRBdG9taWNOYW1lLFxuXHRCb2R5UHJvcHMsXG5cdEJveFByb3BzLFxuXHRDYW5ub25Xb3JrZXJBUEksXG5cdENvbXBvdW5kQm9keVByb3BzLFxuXHRDb252ZXhQb2x5aGVkcm9uQXJncyxcblx0Q3lsaW5kZXJBcmdzLFxuXHRIZWlnaHRmaWVsZEFyZ3MsXG5cdFBhcnRpY2xlUHJvcHMsXG5cdFBsYW5lUHJvcHMsXG5cdFByb3BWYWx1ZSxcblx0UXVhZCxcblx0U2V0T3BOYW1lLFxuXHRTcGhlcmVBcmdzLFxuXHRTdWJzY3JpcHRpb25OYW1lLFxuXHRTdWJzY3JpcHRpb25UYXJnZXQsXG5cdFN1YnNjcmlwdGlvbnMsXG5cdFRyaW1lc2hBcmdzLFxuXHRUcmlwbGV0LFxuXHRWZWN0b3JOYW1lLFxufSBmcm9tICdAcG1uZHJzL2Nhbm5vbi13b3JrZXItYXBpJztcbmltcG9ydCB7IE5ndGNDYW5ub25FdmVudHMsIE5ndGNQaHlzaWNzQXBpIH0gZnJvbSAnYW5ndWxhci10aHJlZS1jYW5ub24nO1xuaW1wb3J0IHsgRXVsZXIsIE9iamVjdDNELCBRdWF0ZXJuaW9uLCBWZWN0b3IzIH0gZnJvbSAndGhyZWUnO1xuaW1wb3J0IHsgTmd0Y1dvcmtlckFwaSB9IGZyb20gJy4vdHlwZXMnO1xuXG5mdW5jdGlvbiBjYXBpdGFsaXplPFQgZXh0ZW5kcyBzdHJpbmc+KHN0cjogVCk6IENhcGl0YWxpemU8VD4ge1xuXHRyZXR1cm4gKHN0ci5jaGFyQXQoMCkudG9VcHBlckNhc2UoKSArIHN0ci5zbGljZSgxKSkgYXMgQ2FwaXRhbGl6ZTxUPjtcbn1cblxuZnVuY3Rpb24gZ2V0VVVJRChib2R5OiBPYmplY3QzRCwgaW5kZXg/OiBudW1iZXIpIHtcblx0Y29uc3Qgc3VmZml4ID0gaW5kZXggPT09IHVuZGVmaW5lZCA/ICcnIDogYC8ke2luZGV4fWA7XG5cdGlmICh0eXBlb2YgYm9keSA9PT0gJ2Z1bmN0aW9uJykgcmV0dXJuIG51bGw7XG5cdHJldHVybiBib2R5ICYmIGJvZHkgJiYgYCR7Ym9keS51dWlkfSR7c3VmZml4fWA7XG59XG5cbmNvbnN0IGUgPSBuZXcgRXVsZXIoKTtcbmNvbnN0IHEgPSBuZXcgUXVhdGVybmlvbigpO1xuXG5mdW5jdGlvbiBxdWF0ZXJuaW9uVG9Sb3RhdGlvbihjYWxsYmFjazogKHY6IFRyaXBsZXQpID0+IHZvaWQpIHtcblx0cmV0dXJuICh2OiBRdWFkKSA9PiBjYWxsYmFjayhlLnNldEZyb21RdWF0ZXJuaW9uKHEuZnJvbUFycmF5KHYpKS50b0FycmF5KCkgYXMgVHJpcGxldCk7XG59XG5cbmxldCBpbmNyZW1lbnRpbmdJZCA9IDA7XG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlU3Vic2NyaWJlPFQgZXh0ZW5kcyBTdWJzY3JpcHRpb25OYW1lPihcblx0Ym9keTogT2JqZWN0M0QsXG5cdHdvcmtlcjogQ2Fubm9uV29ya2VyQVBJLFxuXHRzdWJzY3JpcHRpb25zOiBTdWJzY3JpcHRpb25zLFxuXHR0eXBlOiBULFxuXHRpbmRleD86IG51bWJlcixcblx0dGFyZ2V0OiBTdWJzY3JpcHRpb25UYXJnZXQgPSAnYm9kaWVzJyxcbikge1xuXHRyZXR1cm4gKGNhbGxiYWNrOiAodmFsdWU6IFByb3BWYWx1ZTxUPikgPT4gdm9pZCkgPT4ge1xuXHRcdGNvbnN0IGlkID0gaW5jcmVtZW50aW5nSWQrKztcblx0XHRzdWJzY3JpcHRpb25zW2lkXSA9IHsgW3R5cGVdOiBjYWxsYmFjayB9O1xuXHRcdGNvbnN0IHV1aWQgPSBnZXRVVUlEKGJvZHksIGluZGV4KTtcblx0XHR1dWlkICYmIHdvcmtlci5zdWJzY3JpYmUoeyBwcm9wczogeyBpZCwgdGFyZ2V0LCB0eXBlIH0sIHV1aWQgfSk7XG5cdFx0cmV0dXJuICgpID0+IHtcblx0XHRcdGRlbGV0ZSBzdWJzY3JpcHRpb25zW2lkXTtcblx0XHRcdHdvcmtlci51bnN1YnNjcmliZSh7IHByb3BzOiBpZCB9KTtcblx0XHR9O1xuXHR9O1xufVxuXG5mdW5jdGlvbiBtYWtlVHJpcGxldCh2OiBWZWN0b3IzIHwgVHJpcGxldCk6IFRyaXBsZXQge1xuXHRyZXR1cm4gdiBpbnN0YW5jZW9mIFZlY3RvcjMgPyBbdi54LCB2LnksIHYuel0gOiB2O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcHJlcGFyZShvYmplY3Q6IE9iamVjdDNELCB7IHBvc2l0aW9uID0gWzAsIDAsIDBdLCByb3RhdGlvbiA9IFswLCAwLCAwXSwgdXNlckRhdGEgPSB7fSB9OiBCb2R5UHJvcHMpIHtcblx0b2JqZWN0LnVzZXJEYXRhID0gdXNlckRhdGE7XG5cdG9iamVjdC5wb3NpdGlvbi5zZXQoLi4ucG9zaXRpb24pO1xuXHRvYmplY3Qucm90YXRpb24uc2V0KC4uLnJvdGF0aW9uKTtcblx0b2JqZWN0LnVwZGF0ZU1hdHJpeCgpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc2V0dXBDb2xsaXNpb24oXG5cdGV2ZW50czogTmd0Y0Nhbm5vbkV2ZW50cyxcblx0eyBvbkNvbGxpZGUsIG9uQ29sbGlkZUJlZ2luLCBvbkNvbGxpZGVFbmQgfTogUGFydGlhbDxCb2R5UHJvcHM+LFxuXHR1dWlkOiBzdHJpbmcsXG4pIHtcblx0ZXZlbnRzW3V1aWRdID0geyBjb2xsaWRlOiBvbkNvbGxpZGUsIGNvbGxpZGVCZWdpbjogb25Db2xsaWRlQmVnaW4sIGNvbGxpZGVFbmQ6IG9uQ29sbGlkZUVuZCB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbWFrZUJvZHlBcGkoXG5cdGJvZHk6IE9iamVjdDNELFxuXHR3b3JrZXI6IENhbm5vbldvcmtlckFQSSxcblx0eyBzdWJzY3JpcHRpb25zLCBzY2FsZU92ZXJyaWRlcyB9OiBOZ3RjUGh5c2ljc0FwaSxcbikge1xuXHRjb25zdCBtYWtlQXRvbWljID0gPFQgZXh0ZW5kcyBBdG9taWNOYW1lPih0eXBlOiBULCBpbmRleD86IG51bWJlcikgPT4ge1xuXHRcdGNvbnN0IG9wOiBTZXRPcE5hbWU8VD4gPSBgc2V0JHtjYXBpdGFsaXplKHR5cGUpfWA7XG5cblx0XHRyZXR1cm4ge1xuXHRcdFx0c2V0OiAodmFsdWU6IFByb3BWYWx1ZTxUPikgPT4ge1xuXHRcdFx0XHRjb25zdCB1dWlkID0gZ2V0VVVJRChib2R5LCBpbmRleCk7XG5cdFx0XHRcdHV1aWQgJiYgd29ya2VyW29wXSh7IHByb3BzOiB2YWx1ZSwgdXVpZCB9IGFzIG5ldmVyKTtcblx0XHRcdH0sXG5cdFx0XHRzdWJzY3JpYmU6IGNyZWF0ZVN1YnNjcmliZShib2R5LCB3b3JrZXIsIHN1YnNjcmlwdGlvbnMsIHR5cGUsIGluZGV4KSxcblx0XHR9O1xuXHR9O1xuXG5cdGNvbnN0IG1ha2VRdWF0ZXJuaW9uID0gKGluZGV4PzogbnVtYmVyKSA9PiB7XG5cdFx0Y29uc3QgdHlwZSA9ICdxdWF0ZXJuaW9uJztcblx0XHRyZXR1cm4ge1xuXHRcdFx0Y29weTogKHsgdywgeCwgeSwgeiB9OiBRdWF0ZXJuaW9uKSA9PiB7XG5cdFx0XHRcdGNvbnN0IHV1aWQgPSBnZXRVVUlEKGJvZHksIGluZGV4KTtcblx0XHRcdFx0dXVpZCAmJiB3b3JrZXIuc2V0UXVhdGVybmlvbih7IHByb3BzOiBbeCwgeSwgeiwgd10sIHV1aWQgfSk7XG5cdFx0XHR9LFxuXHRcdFx0c2V0OiAoeDogbnVtYmVyLCB5OiBudW1iZXIsIHo6IG51bWJlciwgdzogbnVtYmVyKSA9PiB7XG5cdFx0XHRcdGNvbnN0IHV1aWQgPSBnZXRVVUlEKGJvZHksIGluZGV4KTtcblx0XHRcdFx0dXVpZCAmJiB3b3JrZXIuc2V0UXVhdGVybmlvbih7IHByb3BzOiBbeCwgeSwgeiwgd10sIHV1aWQgfSk7XG5cdFx0XHR9LFxuXHRcdFx0c3Vic2NyaWJlOiBjcmVhdGVTdWJzY3JpYmUoYm9keSwgd29ya2VyLCBzdWJzY3JpcHRpb25zLCB0eXBlLCBpbmRleCksXG5cdFx0fTtcblx0fTtcblxuXHRjb25zdCBtYWtlUm90YXRpb24gPSAoaW5kZXg/OiBudW1iZXIpID0+IHtcblx0XHRyZXR1cm4ge1xuXHRcdFx0Y29weTogKHsgeCwgeSwgeiB9OiBWZWN0b3IzIHwgRXVsZXIpID0+IHtcblx0XHRcdFx0Y29uc3QgdXVpZCA9IGdldFVVSUQoYm9keSwgaW5kZXgpO1xuXHRcdFx0XHR1dWlkICYmIHdvcmtlci5zZXRSb3RhdGlvbih7IHByb3BzOiBbeCwgeSwgel0sIHV1aWQgfSk7XG5cdFx0XHR9LFxuXHRcdFx0c2V0OiAoeDogbnVtYmVyLCB5OiBudW1iZXIsIHo6IG51bWJlcikgPT4ge1xuXHRcdFx0XHRjb25zdCB1dWlkID0gZ2V0VVVJRChib2R5LCBpbmRleCk7XG5cdFx0XHRcdHV1aWQgJiYgd29ya2VyLnNldFJvdGF0aW9uKHsgcHJvcHM6IFt4LCB5LCB6XSwgdXVpZCB9KTtcblx0XHRcdH0sXG5cdFx0XHRzdWJzY3JpYmU6IChjYWxsYmFjazogKHZhbHVlOiBUcmlwbGV0KSA9PiB2b2lkKSA9PiB7XG5cdFx0XHRcdGNvbnN0IGlkID0gaW5jcmVtZW50aW5nSWQrKztcblx0XHRcdFx0Y29uc3QgdGFyZ2V0ID0gJ2JvZGllcyc7XG5cdFx0XHRcdGNvbnN0IHR5cGUgPSAncXVhdGVybmlvbic7XG5cdFx0XHRcdGNvbnN0IHV1aWQgPSBnZXRVVUlEKGJvZHksIGluZGV4KTtcblx0XHRcdFx0c3Vic2NyaXB0aW9uc1tpZF0gPSB7IFt0eXBlXTogcXVhdGVybmlvblRvUm90YXRpb24oY2FsbGJhY2spIH07XG5cdFx0XHRcdHV1aWQgJiYgd29ya2VyLnN1YnNjcmliZSh7IHByb3BzOiB7IGlkLCB0YXJnZXQsIHR5cGUgfSwgdXVpZCB9KTtcblx0XHRcdFx0cmV0dXJuICgpID0+IHtcblx0XHRcdFx0XHRkZWxldGUgc3Vic2NyaXB0aW9uc1tpZF07XG5cdFx0XHRcdFx0d29ya2VyLnVuc3Vic2NyaWJlKHsgcHJvcHM6IGlkIH0pO1xuXHRcdFx0XHR9O1xuXHRcdFx0fSxcblx0XHR9O1xuXHR9O1xuXHRjb25zdCBtYWtlVmVjID0gKHR5cGU6IFZlY3Rvck5hbWUsIGluZGV4PzogbnVtYmVyKSA9PiB7XG5cdFx0Y29uc3Qgb3A6IFNldE9wTmFtZTxWZWN0b3JOYW1lPiA9IGBzZXQke2NhcGl0YWxpemUodHlwZSl9YDtcblx0XHRyZXR1cm4ge1xuXHRcdFx0Y29weTogKHsgeCwgeSwgeiB9OiBWZWN0b3IzIHwgRXVsZXIpID0+IHtcblx0XHRcdFx0Y29uc3QgdXVpZCA9IGdldFVVSUQoYm9keSwgaW5kZXgpO1xuXHRcdFx0XHR1dWlkICYmIHdvcmtlcltvcF0oeyBwcm9wczogW3gsIHksIHpdLCB1dWlkIH0pO1xuXHRcdFx0fSxcblx0XHRcdHNldDogKHg6IG51bWJlciwgeTogbnVtYmVyLCB6OiBudW1iZXIpID0+IHtcblx0XHRcdFx0Y29uc3QgdXVpZCA9IGdldFVVSUQoYm9keSwgaW5kZXgpO1xuXHRcdFx0XHR1dWlkICYmIHdvcmtlcltvcF0oeyBwcm9wczogW3gsIHksIHpdLCB1dWlkIH0pO1xuXHRcdFx0fSxcblx0XHRcdHN1YnNjcmliZTogY3JlYXRlU3Vic2NyaWJlKGJvZHksIHdvcmtlciwgc3Vic2NyaXB0aW9ucywgdHlwZSwgaW5kZXgpLFxuXHRcdH07XG5cdH07XG5cblx0Y29uc3QgbWFrZVJlbW92ZSA9IChpbmRleD86IG51bWJlcikgPT4ge1xuXHRcdGNvbnN0IHV1aWQgPSBnZXRVVUlEKGJvZHksIGluZGV4KTtcblx0XHRyZXR1cm4gKCkgPT4ge1xuXHRcdFx0aWYgKHV1aWQpIHdvcmtlci5yZW1vdmVCb2RpZXMoeyB1dWlkOiBbdXVpZF0gfSk7XG5cdFx0fTtcblx0fTtcblxuXHRmdW5jdGlvbiBtYWtlQXBpKGluZGV4PzogbnVtYmVyKTogTmd0Y1dvcmtlckFwaSB7XG5cdFx0cmV0dXJuIHtcblx0XHRcdGFsbG93U2xlZXA6IG1ha2VBdG9taWMoJ2FsbG93U2xlZXAnLCBpbmRleCksXG5cdFx0XHRhbmd1bGFyRGFtcGluZzogbWFrZUF0b21pYygnYW5ndWxhckRhbXBpbmcnLCBpbmRleCksXG5cdFx0XHRhbmd1bGFyRmFjdG9yOiBtYWtlVmVjKCdhbmd1bGFyRmFjdG9yJywgaW5kZXgpLFxuXHRcdFx0YW5ndWxhclZlbG9jaXR5OiBtYWtlVmVjKCdhbmd1bGFyVmVsb2NpdHknLCBpbmRleCksXG5cdFx0XHRhcHBseUZvcmNlKGZvcmNlOiBUcmlwbGV0LCB3b3JsZFBvaW50OiBUcmlwbGV0KSB7XG5cdFx0XHRcdGNvbnN0IHV1aWQgPSBnZXRVVUlEKGJvZHksIGluZGV4KTtcblx0XHRcdFx0dXVpZCAmJiB3b3JrZXIuYXBwbHlGb3JjZSh7IHByb3BzOiBbZm9yY2UsIHdvcmxkUG9pbnRdLCB1dWlkIH0pO1xuXHRcdFx0fSxcblx0XHRcdGFwcGx5SW1wdWxzZShpbXB1bHNlOiBUcmlwbGV0LCB3b3JsZFBvaW50OiBUcmlwbGV0KSB7XG5cdFx0XHRcdGNvbnN0IHV1aWQgPSBnZXRVVUlEKGJvZHksIGluZGV4KTtcblx0XHRcdFx0dXVpZCAmJiB3b3JrZXIuYXBwbHlJbXB1bHNlKHsgcHJvcHM6IFtpbXB1bHNlLCB3b3JsZFBvaW50XSwgdXVpZCB9KTtcblx0XHRcdH0sXG5cdFx0XHRhcHBseUxvY2FsRm9yY2UoZm9yY2U6IFRyaXBsZXQsIGxvY2FsUG9pbnQ6IFRyaXBsZXQpIHtcblx0XHRcdFx0Y29uc3QgdXVpZCA9IGdldFVVSUQoYm9keSwgaW5kZXgpO1xuXHRcdFx0XHR1dWlkICYmIHdvcmtlci5hcHBseUxvY2FsRm9yY2UoeyBwcm9wczogW2ZvcmNlLCBsb2NhbFBvaW50XSwgdXVpZCB9KTtcblx0XHRcdH0sXG5cdFx0XHRhcHBseUxvY2FsSW1wdWxzZShpbXB1bHNlOiBUcmlwbGV0LCBsb2NhbFBvaW50OiBUcmlwbGV0KSB7XG5cdFx0XHRcdGNvbnN0IHV1aWQgPSBnZXRVVUlEKGJvZHksIGluZGV4KTtcblx0XHRcdFx0dXVpZCAmJiB3b3JrZXIuYXBwbHlMb2NhbEltcHVsc2UoeyBwcm9wczogW2ltcHVsc2UsIGxvY2FsUG9pbnRdLCB1dWlkIH0pO1xuXHRcdFx0fSxcblx0XHRcdGFwcGx5VG9ycXVlKHRvcnF1ZTogVHJpcGxldCkge1xuXHRcdFx0XHRjb25zdCB1dWlkID0gZ2V0VVVJRChib2R5LCBpbmRleCk7XG5cdFx0XHRcdHV1aWQgJiYgd29ya2VyLmFwcGx5VG9ycXVlKHsgcHJvcHM6IFt0b3JxdWVdLCB1dWlkIH0pO1xuXHRcdFx0fSxcblx0XHRcdGNvbGxpc2lvbkZpbHRlckdyb3VwOiBtYWtlQXRvbWljKCdjb2xsaXNpb25GaWx0ZXJHcm91cCcsIGluZGV4KSxcblx0XHRcdGNvbGxpc2lvbkZpbHRlck1hc2s6IG1ha2VBdG9taWMoJ2NvbGxpc2lvbkZpbHRlck1hc2snLCBpbmRleCksXG5cdFx0XHRjb2xsaXNpb25SZXNwb25zZTogbWFrZUF0b21pYygnY29sbGlzaW9uUmVzcG9uc2UnLCBpbmRleCksXG5cdFx0XHRmaXhlZFJvdGF0aW9uOiBtYWtlQXRvbWljKCdmaXhlZFJvdGF0aW9uJywgaW5kZXgpLFxuXHRcdFx0aXNUcmlnZ2VyOiBtYWtlQXRvbWljKCdpc1RyaWdnZXInLCBpbmRleCksXG5cdFx0XHRsaW5lYXJEYW1waW5nOiBtYWtlQXRvbWljKCdsaW5lYXJEYW1waW5nJywgaW5kZXgpLFxuXHRcdFx0bGluZWFyRmFjdG9yOiBtYWtlVmVjKCdsaW5lYXJGYWN0b3InLCBpbmRleCksXG5cdFx0XHRtYXNzOiBtYWtlQXRvbWljKCdtYXNzJywgaW5kZXgpLFxuXHRcdFx0bWF0ZXJpYWw6IG1ha2VBdG9taWMoJ21hdGVyaWFsJywgaW5kZXgpLFxuXHRcdFx0cG9zaXRpb246IG1ha2VWZWMoJ3Bvc2l0aW9uJywgaW5kZXgpLFxuXHRcdFx0cXVhdGVybmlvbjogbWFrZVF1YXRlcm5pb24oaW5kZXgpLFxuXHRcdFx0cm90YXRpb246IG1ha2VSb3RhdGlvbihpbmRleCksXG5cdFx0XHRzY2FsZU92ZXJyaWRlKHNjYWxlKSB7XG5cdFx0XHRcdGNvbnN0IHV1aWQgPSBnZXRVVUlEKGJvZHksIGluZGV4KTtcblx0XHRcdFx0aWYgKHV1aWQpIHNjYWxlT3ZlcnJpZGVzW3V1aWRdID0gbmV3IFZlY3RvcjMoLi4uc2NhbGUpO1xuXHRcdFx0fSxcblx0XHRcdHNsZWVwKCkge1xuXHRcdFx0XHRjb25zdCB1dWlkID0gZ2V0VVVJRChib2R5LCBpbmRleCk7XG5cdFx0XHRcdHV1aWQgJiYgd29ya2VyLnNsZWVwKHsgdXVpZCB9KTtcblx0XHRcdH0sXG5cdFx0XHRzbGVlcFNwZWVkTGltaXQ6IG1ha2VBdG9taWMoJ3NsZWVwU3BlZWRMaW1pdCcsIGluZGV4KSxcblx0XHRcdHNsZWVwVGltZUxpbWl0OiBtYWtlQXRvbWljKCdzbGVlcFRpbWVMaW1pdCcsIGluZGV4KSxcblx0XHRcdHVzZXJEYXRhOiBtYWtlQXRvbWljKCd1c2VyRGF0YScsIGluZGV4KSxcblx0XHRcdHZlbG9jaXR5OiBtYWtlVmVjKCd2ZWxvY2l0eScsIGluZGV4KSxcblx0XHRcdHJlbW92ZTogbWFrZVJlbW92ZShpbmRleCksXG5cdFx0XHR3YWtlVXAoKSB7XG5cdFx0XHRcdGNvbnN0IHV1aWQgPSBnZXRVVUlEKGJvZHksIGluZGV4KTtcblx0XHRcdFx0dXVpZCAmJiB3b3JrZXIud2FrZVVwKHsgdXVpZCB9KTtcblx0XHRcdH0sXG5cdFx0fTtcblx0fVxuXHRjb25zdCBjYWNoZTogUmVjb3JkPG51bWJlciwgTmd0Y1dvcmtlckFwaT4gPSB7fTtcblx0cmV0dXJuIHsgLi4ubWFrZUFwaSgpLCBhdDogKGluZGV4OiBudW1iZXIpID0+IGNhY2hlW2luZGV4XSB8fCAoY2FjaGVbaW5kZXhdID0gbWFrZUFwaShpbmRleCkpIH07XG59XG5cbmV4cG9ydCBjb25zdCBkZWZhdWx0VHJhbnNmb3JtQXJncyA9IHtcblx0UGxhbmU6IChhcmdzOiBQbGFuZVByb3BzWydhcmdzJ10pID0+IFtdLFxuXHRCb3g6IChhcmdzOiBCb3hQcm9wc1snYXJncyddID0gWzEsIDEsIDFdKSA9PiBhcmdzLFxuXHRUcmltZXNoOiAoYXJnczogVHJpbWVzaEFyZ3MpID0+IGFyZ3MsXG5cdEN5bGluZGVyOiAoYXJnczogQ3lsaW5kZXJBcmdzID0gW10pID0+IFtdLFxuXHRIZWlnaHRmaWVsZDogKGFyZ3M6IEhlaWdodGZpZWxkQXJncykgPT4gYXJncyxcblx0Q29udmV4UG9seWhlZHJvbjogKFt2ZXJ0aWNlcywgZmFjZXMsIG5vcm1hbHMsIGF4ZXMsIGJvdW5kaW5nU3BoZXJlUmFkaXVzXTogQ29udmV4UG9seWhlZHJvbkFyZ3MgPSBbXSkgPT4gW1xuXHRcdHZlcnRpY2VzICYmIHZlcnRpY2VzLm1hcChtYWtlVHJpcGxldCksXG5cdFx0ZmFjZXMsXG5cdFx0bm9ybWFscyAmJiBub3JtYWxzLm1hcChtYWtlVHJpcGxldCksXG5cdFx0YXhlcyAmJiBheGVzLm1hcChtYWtlVHJpcGxldCksXG5cdFx0Ym91bmRpbmdTcGhlcmVSYWRpdXMsXG5cdF0sXG5cdFBhcnRpY2xlOiAoYXJnczogUGFydGljbGVQcm9wc1snYXJncyddKSA9PiBbXSxcblx0U3BoZXJlOiAoYXJnczogU3BoZXJlQXJncyA9IFsxXSkgPT4ge1xuXHRcdGlmICghQXJyYXkuaXNBcnJheShhcmdzKSkgdGhyb3cgbmV3IEVycm9yKCdTcGhlcmUgYm9keSBhcmdzIG11c3QgYmUgYW4gYXJyYXknKTtcblx0XHRyZXR1cm4gW2FyZ3NbMF1dO1xuXHR9LFxuXHRDb21wb3VuZDogKGFyZ3M6IENvbXBvdW5kQm9keVByb3BzWydhcmdzJ10pID0+IGFyZ3MsXG59O1xuIl19