angular-three-soba 2.0.0-beta.2 → 2.0.0-beta.4

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.
Files changed (32) hide show
  1. package/abstractions/grid/grid.d.ts +59 -0
  2. package/abstractions/index.d.ts +1 -0
  3. package/abstractions/text/text.d.ts +0 -1
  4. package/esm2022/abstractions/gizmo-helper/gizmo-helper.mjs +2 -2
  5. package/esm2022/abstractions/grid/grid.mjs +150 -0
  6. package/esm2022/abstractions/index.mjs +2 -1
  7. package/esm2022/abstractions/text/text.mjs +2 -4
  8. package/esm2022/materials/mesh-refraction-material/mesh-refraction-material.mjs +4 -3
  9. package/esm2022/misc/animations/animations.mjs +20 -20
  10. package/esm2022/shaders/grid-material/grid-material.mjs +62 -0
  11. package/esm2022/shaders/index.mjs +2 -1
  12. package/esm2022/staging/accumulative-shadows/accumulative-shadows.mjs +2 -2
  13. package/esm2022/staging/caustics/caustisc.mjs +2 -2
  14. package/esm2022/staging/environment/environment-portal.mjs +2 -2
  15. package/fesm2022/angular-three-soba-abstractions.mjs +148 -6
  16. package/fesm2022/angular-three-soba-abstractions.mjs.map +1 -1
  17. package/fesm2022/angular-three-soba-materials.mjs +3 -2
  18. package/fesm2022/angular-three-soba-materials.mjs.map +1 -1
  19. package/fesm2022/angular-three-soba-misc.mjs +19 -19
  20. package/fesm2022/angular-three-soba-misc.mjs.map +1 -1
  21. package/fesm2022/angular-three-soba-shaders.mjs +61 -1
  22. package/fesm2022/angular-three-soba-shaders.mjs.map +1 -1
  23. package/fesm2022/angular-three-soba-staging.mjs +3 -3
  24. package/fesm2022/angular-three-soba-staging.mjs.map +1 -1
  25. package/misc/animations/animations.d.ts +1 -1
  26. package/package.json +8 -10
  27. package/plugin/package.json +2 -2
  28. package/plugin/src/generators/init/init.d.ts +3 -0
  29. package/plugin/src/generators/init/init.js +7 -1
  30. package/plugin/src/generators/init/init.js.map +1 -1
  31. package/shaders/grid-material/grid-material.d.ts +4 -0
  32. package/shaders/index.d.ts +1 -0
@@ -0,0 +1,59 @@
1
+ import { NgtSignalStore } from 'angular-three';
2
+ import * as THREE from 'three';
3
+ import * as i0 from "@angular/core";
4
+ export interface NgtsGridState {
5
+ /** Cell size, default: 0.5 */
6
+ cellSize: number;
7
+ /** Cell thickness, default: 0.5 */
8
+ cellThickness: number;
9
+ /** Cell color, default: black */
10
+ cellColor: THREE.ColorRepresentation;
11
+ /** Section size, default: 1 */
12
+ sectionSize: number;
13
+ /** Section thickness, default: 1 */
14
+ sectionThickness: number;
15
+ /** Section color, default: #2080ff */
16
+ sectionColor: THREE.ColorRepresentation;
17
+ /** Follow camera, default: false */
18
+ followCamera: boolean;
19
+ /** Display the grid infinitely, default: false */
20
+ infiniteGrid: boolean;
21
+ /** Fade distance, default: 100 */
22
+ fadeDistance: number;
23
+ /** Fade strength, default: 1 */
24
+ fadeStrength: number;
25
+ /** Material side, default: THREE.BackSide */
26
+ side: THREE.Side;
27
+ /** Default plane-geometry arguments */
28
+ args: ConstructorParameters<typeof THREE.PlaneGeometry>;
29
+ }
30
+ export declare class NgtsGrid extends NgtSignalStore<NgtsGridState> {
31
+ gridRef: import("angular-three").NgtInjectedRef<THREE.Mesh<THREE.BufferGeometry, THREE.Material | THREE.Material[]>>;
32
+ set cellSize(cellSize: NgtsGridState['cellSize']);
33
+ set cellThickness(cellThickness: NgtsGridState['cellThickness']);
34
+ set cellColor(cellColor: NgtsGridState['cellColor']);
35
+ set sectionSize(sectionSize: NgtsGridState['sectionSize']);
36
+ set sectionThickness(sectionThickness: NgtsGridState['sectionThickness']);
37
+ set sectionColor(sectionColor: NgtsGridState['sectionColor']);
38
+ set followCamera(followCamera: NgtsGridState['followCamera']);
39
+ set infiniteGrid(infiniteGrid: NgtsGridState['infiniteGrid']);
40
+ set fadeDistance(fadeDistance: NgtsGridState['fadeDistance']);
41
+ set fadeStrength(fadeStrength: NgtsGridState['fadeStrength']);
42
+ set side(side: NgtsGridState['side']);
43
+ set args(args: NgtsGridState['args']);
44
+ readonly gridCellSize: import("@angular/core").Signal<number>;
45
+ readonly gridSectionSize: import("@angular/core").Signal<number>;
46
+ readonly gridFadeDistance: import("@angular/core").Signal<number>;
47
+ readonly gridFadeStrength: import("@angular/core").Signal<number>;
48
+ readonly gridCellThickness: import("@angular/core").Signal<number>;
49
+ readonly gridSectionThickness: import("@angular/core").Signal<number>;
50
+ readonly gridInfiniteGrid: import("@angular/core").Signal<boolean>;
51
+ readonly gridFollowCamera: import("@angular/core").Signal<boolean>;
52
+ readonly gridCellColor: import("@angular/core").Signal<THREE.ColorRepresentation>;
53
+ readonly gridSectionColor: import("@angular/core").Signal<THREE.ColorRepresentation>;
54
+ readonly gridSide: import("@angular/core").Signal<THREE.Side>;
55
+ readonly gridArgs: import("@angular/core").Signal<[width?: number | undefined, height?: number | undefined, widthSegments?: number | undefined, heightSegments?: number | undefined]>;
56
+ constructor();
57
+ static ɵfac: i0.ɵɵFactoryDeclaration<NgtsGrid, never>;
58
+ static ɵcmp: i0.ɵɵComponentDeclaration<NgtsGrid, "ngts-grid", never, { "gridRef": { "alias": "gridRef"; "required": false; }; "cellSize": { "alias": "cellSize"; "required": false; }; "cellThickness": { "alias": "cellThickness"; "required": false; }; "cellColor": { "alias": "cellColor"; "required": false; }; "sectionSize": { "alias": "sectionSize"; "required": false; }; "sectionThickness": { "alias": "sectionThickness"; "required": false; }; "sectionColor": { "alias": "sectionColor"; "required": false; }; "followCamera": { "alias": "followCamera"; "required": false; }; "infiniteGrid": { "alias": "infiniteGrid"; "required": false; }; "fadeDistance": { "alias": "fadeDistance"; "required": false; }; "fadeStrength": { "alias": "fadeStrength"; "required": false; }; "side": { "alias": "side"; "required": false; }; "args": { "alias": "args"; "required": false; }; }, {}, never, never, true, never>;
59
+ }
@@ -5,6 +5,7 @@ export * from './edges/edges';
5
5
  export * from './gizmo-helper/gizmo-helper';
6
6
  export * from './gizmo-helper/gizmo-viewcube/gizmo-viewcube';
7
7
  export * from './gizmo-helper/gizmo-viewport/gizmo-viewport';
8
+ export * from './grid/grid';
8
9
  export * from './line/line';
9
10
  export * from './quadratic-bezier-line/quadratic-bezier-line';
10
11
  export * from './text-3d/text-3d';
@@ -70,7 +70,6 @@ export declare class NgtsText extends NgtSignalStore<NgtsTextState> {
70
70
  set debugSDF(debugSDF: boolean);
71
71
  sync: EventEmitter<Text>;
72
72
  readonly troikaText: any;
73
- readonly state: import("@angular/core").Signal<NgtsTextState>;
74
73
  constructor();
75
74
  static ɵfac: i0.ɵɵFactoryDeclaration<NgtsText, never>;
76
75
  static ɵcmp: i0.ɵɵComponentDeclaration<NgtsText, "ngts-text", never, { "textRef": { "alias": "textRef"; "required": false; }; "text": { "alias": "text"; "required": true; }; "font": { "alias": "font"; "required": false; }; "fontSize": { "alias": "fontSize"; "required": false; }; "anchorX": { "alias": "anchorX"; "required": false; }; "anchorY": { "alias": "anchorY"; "required": false; }; "sdfGlyphSize": { "alias": "sdfGlyphSize"; "required": false; }; "characters": { "alias": "characters"; "required": false; }; "color": { "alias": "color"; "required": false; }; "maxWidth": { "alias": "maxWidth"; "required": false; }; "lineHeight": { "alias": "lineHeight"; "required": false; }; "letterSpacing": { "alias": "letterSpacing"; "required": false; }; "textAlign": { "alias": "textAlign"; "required": false; }; "clipRect": { "alias": "clipRect"; "required": false; }; "depthOffset": { "alias": "depthOffset"; "required": false; }; "direction": { "alias": "direction"; "required": false; }; "overflowWrap": { "alias": "overflowWrap"; "required": false; }; "whiteSpace": { "alias": "whiteSpace"; "required": false; }; "outlineWidth": { "alias": "outlineWidth"; "required": false; }; "outlineOffsetX": { "alias": "outlineOffsetX"; "required": false; }; "outlineOffsetY": { "alias": "outlineOffsetY"; "required": false; }; "outlineBlur": { "alias": "outlineBlur"; "required": false; }; "outlineColor": { "alias": "outlineColor"; "required": false; }; "outlineOpacity": { "alias": "outlineOpacity"; "required": false; }; "strokeWidth": { "alias": "strokeWidth"; "required": false; }; "strokeColor": { "alias": "strokeColor"; "required": false; }; "strokeOpacity": { "alias": "strokeOpacity"; "required": false; }; "fillOpacity": { "alias": "fillOpacity"; "required": false; }; "debugSDF": { "alias": "debugSDF"; "required": false; }; }, { "sync": "sync"; }, never, ["*"], true, never>;
@@ -165,7 +165,7 @@ class NgtsGizmoHelper extends NgtSignalStore {
165
165
  </ngt-group>
166
166
  </ng-template>
167
167
  </ngt-portal>
168
- `, isInline: true, dependencies: [{ kind: "component", type: NgtPortal, selector: "ngt-portal", inputs: ["container", "state", "autoRender", "autoRenderPriority"], outputs: ["beforeRender"] }, { kind: "directive", type: NgtPortalContent, selector: "ng-template[ngtPortalContent]" }, { kind: "component", type: NgtsOrthographicCamera, selector: "ngts-orthographic-camera", inputs: ["left", "right", "top", "bottom"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }] }); }
168
+ `, isInline: true, dependencies: [{ kind: "component", type: NgtPortal, selector: "ngt-portal", inputs: ["container", "portalState", "autoRender", "autoRenderPriority"], outputs: ["beforeRender"] }, { kind: "directive", type: NgtPortalContent, selector: "ng-template[ngtPortalContent]" }, { kind: "component", type: NgtsOrthographicCamera, selector: "ngts-orthographic-camera", inputs: ["left", "right", "top", "bottom"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }] }); }
169
169
  }
170
170
  export { NgtsGizmoHelper };
171
171
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.0", ngImport: i0, type: NgtsGizmoHelper, decorators: [{
@@ -207,4 +207,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.0", ngImpor
207
207
  type: ContentChild,
208
208
  args: [NgtsGizmoHelperContent, { static: true, read: TemplateRef }]
209
209
  }] } });
210
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2l6bW8taGVscGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9zb2JhL2Fic3RyYWN0aW9ucy9zcmMvZ2l6bW8taGVscGVyL2dpem1vLWhlbHBlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUNuRCxPQUFPLEVBQ0gsU0FBUyxFQUNULFFBQVEsRUFDUixZQUFZLEVBQ1osc0JBQXNCLEVBQ3RCLFNBQVMsRUFDVCxNQUFNLEVBQ04sWUFBWSxFQUNaLE1BQU0sRUFDTixjQUFjLEVBQ2QsS0FBSyxFQUNMLE1BQU0sRUFFTixXQUFXLEdBQ2QsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLE1BQU0sRUFBRSxZQUFZLEVBQUUsU0FBUyxFQUFFLGdCQUFnQixFQUFFLGNBQWMsRUFBRSxRQUFRLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDNUcsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDcEUsT0FBTyxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUUsUUFBUSxFQUFzQixVQUFVLEVBQUUsT0FBTyxFQUFFLE1BQU0sT0FBTyxDQUFDOztBQUsxRixNQUFNLGVBQWUsR0FBRyxDQUFDLFFBQXVCLEVBQTZCLEVBQUUsQ0FDM0UsZUFBZSxJQUFLLFFBQTBCLENBQUM7QUFHbkQsTUFBTSxDQUFDLE1BQU0scUJBQXFCLEdBQUcsSUFBSSxjQUFjLENBQTZCLHFCQUFxQixDQUFDLENBQUM7QUFFM0csTUFBTSxDQUFDLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQztBQWtCbEIsTUFDYSxzQkFBc0I7OEdBQXRCLHNCQUFzQjtrR0FBdEIsc0JBQXNCOztTQUF0QixzQkFBc0I7MkZBQXRCLHNCQUFzQjtrQkFEbEMsU0FBUzttQkFBQyxFQUFFLFFBQVEsRUFBRSxxQ0FBcUMsRUFBRSxVQUFVLEVBQUUsSUFBSSxFQUFF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SDtvQkFDRCxPQUFPLEVBQUUsQ0FBQyxzQkFBc0IsQ0FBQztpQkFDcEM7MEVBS2dCLFNBQVM7c0JBQXJCLEtBQUs7Z0JBZU8sTUFBTTtzQkFBbEIsS0FBSztnQkFJTyxjQUFjO3NCQUExQixLQUFLO2dCQUlPLFNBQVM7c0JBQXJCLEtBQUs7Z0JBSUksT0FBTztzQkFBaEIsTUFBTTtnQkFHUCxrQkFBa0I7c0JBRGpCLFlBQVk7dUJBQUMsc0JBQXNCLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxXQUFXLEVBQUUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBOZ1RlbXBsYXRlT3V0bGV0IH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7XG4gICAgQ29tcG9uZW50LFxuICAgIGNvbXB1dGVkLFxuICAgIENvbnRlbnRDaGlsZCxcbiAgICBDVVNUT01fRUxFTUVOVFNfU0NIRU1BLFxuICAgIERpcmVjdGl2ZSxcbiAgICBlZmZlY3QsXG4gICAgRXZlbnRFbWl0dGVyLFxuICAgIGluamVjdCxcbiAgICBJbmplY3Rpb25Ub2tlbixcbiAgICBJbnB1dCxcbiAgICBPdXRwdXQsXG4gICAgU2lnbmFsLFxuICAgIFRlbXBsYXRlUmVmLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IGV4dGVuZCwgaW5qZWN0Tmd0UmVmLCBOZ3RQb3J0YWwsIE5ndFBvcnRhbENvbnRlbnQsIE5ndFNpZ25hbFN0b3JlLCBOZ3RTdG9yZSB9IGZyb20gJ2FuZ3VsYXItdGhyZWUnO1xuaW1wb3J0IHsgTmd0c09ydGhvZ3JhcGhpY0NhbWVyYSB9IGZyb20gJ2FuZ3VsYXItdGhyZWUtc29iYS9jYW1lcmFzJztcbmltcG9ydCB7IEdyb3VwLCBNYXRyaXg0LCBPYmplY3QzRCwgT3J0aG9ncmFwaGljQ2FtZXJhLCBRdWF0ZXJuaW9uLCBWZWN0b3IzIH0gZnJvbSAndGhyZWUnO1xuaW1wb3J0IHsgT3JiaXRDb250cm9scyB9IGZyb20gJ3RocmVlLXN0ZGxpYic7XG5cbnR5cGUgQ29udHJvbHNQcm90byA9IHsgdXBkYXRlKCk6IHZvaWQ7IHRhcmdldDogVEhSRUUuVmVjdG9yMyB9O1xuXG5jb25zdCBpc09yYml0Q29udHJvbHMgPSAoY29udHJvbHM6IENvbnRyb2xzUHJvdG8pOiBjb250cm9scyBpcyBPcmJpdENvbnRyb2xzID0+XG4gICAgJ21pblBvbGFyQW5nbGUnIGluIChjb250cm9scyBhcyBPcmJpdENvbnRyb2xzKTtcblxuZXhwb3J0IHR5cGUgTmd0c0dpem1vSGVscGVyQXBpID0gKGRpcmVjdGlvbjogVmVjdG9yMykgPT4gdm9pZDtcbmV4cG9ydCBjb25zdCBOR1RTX0dJWk1PX0hFTFBFUl9BUEkgPSBuZXcgSW5qZWN0aW9uVG9rZW48U2lnbmFsPE5ndHNHaXptb0hlbHBlckFwaT4+KCdOZ3RzR2l6bW9IZWxwZXIgQVBJJyk7XG5cbmV4dGVuZCh7IEdyb3VwIH0pO1xuXG5leHBvcnQgaW50ZXJmYWNlIE5ndHNHaXptb0hlbHBlclN0YXRlIHtcbiAgICBhbGlnbm1lbnQ6XG4gICAgICAgIHwgJ3RvcC1sZWZ0J1xuICAgICAgICB8ICd0b3AtcmlnaHQnXG4gICAgICAgIHwgJ2JvdHRvbS1yaWdodCdcbiAgICAgICAgfCAnYm90dG9tLWxlZnQnXG4gICAgICAgIHwgJ2JvdHRvbS1jZW50ZXInXG4gICAgICAgIHwgJ2NlbnRlci1yaWdodCdcbiAgICAgICAgfCAnY2VudGVyLWxlZnQnXG4gICAgICAgIHwgJ2NlbnRlci1jZW50ZXInXG4gICAgICAgIHwgJ3RvcC1jZW50ZXInO1xuICAgIG1hcmdpbjogW251bWJlciwgbnVtYmVyXTtcbiAgICByZW5kZXJQcmlvcml0eTogbnVtYmVyO1xuICAgIGF1dG9DbGVhcjogYm9vbGVhbjtcbn1cblxuQERpcmVjdGl2ZSh7IHNlbGVjdG9yOiAnbmctdGVtcGxhdGVbbmd0c0dpem1vSGVscGVyQ29udGVudF0nLCBzdGFuZGFsb25lOiB0cnVlIH0pXG5leHBvcnQgY2xhc3MgTmd0c0dpem1vSGVscGVyQ29udGVudCB7fVxuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ25ndHMtZ2l6bW8taGVscGVyJyxcbiAgICBzdGFuZGFsb25lOiB0cnVlLFxuICAgIHRlbXBsYXRlOiBgXG4gICAgICAgIDxuZ3QtcG9ydGFsIFtyZW5kZXJQcmlvcml0eV09XCJwcmlvcml0eSgpXCI+XG4gICAgICAgICAgICA8bmctdGVtcGxhdGUgbmd0UG9ydGFsQ29udGVudD5cbiAgICAgICAgICAgICAgICA8bmd0cy1vcnRob2dyYXBoaWMtY2FtZXJhXG4gICAgICAgICAgICAgICAgICAgIFtjYW1lcmFSZWZdPVwidmlydHVhbENhbWVyYVJlZlwiXG4gICAgICAgICAgICAgICAgICAgIFttYWtlRGVmYXVsdF09XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICAgICAgW3Bvc2l0aW9uXT1cIlswLCAwLCAyMDBdXCJcbiAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgIDxuZ3QtZ3JvdXAgW3JlZl09XCJnaXptb1JlZlwiIFtwb3NpdGlvbl09XCJwb3NpdGlvbigpXCIgKGJlZm9yZVJlbmRlcik9XCJvbkJlZm9yZVJlbmRlcigkZXZlbnQuc3RhdGUuZGVsdGEpXCI+XG4gICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJnaXptb0hlbHBlckNvbnRlbnRcIiAvPlxuICAgICAgICAgICAgICAgIDwvbmd0LWdyb3VwPlxuICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgPC9uZ3QtcG9ydGFsPlxuICAgIGAsXG4gICAgaW1wb3J0czogW05ndFBvcnRhbCwgTmd0UG9ydGFsQ29udGVudCwgTmd0c09ydGhvZ3JhcGhpY0NhbWVyYSwgTmdUZW1wbGF0ZU91dGxldF0sXG4gICAgcHJvdmlkZXJzOiBbXG4gICAgICAgIHsgcHJvdmlkZTogTkdUU19HSVpNT19IRUxQRVJfQVBJLCB1c2VGYWN0b3J5OiAoZ2l6bW86IE5ndHNHaXptb0hlbHBlcikgPT4gZ2l6bW8uYXBpLCBkZXBzOiBbTmd0c0dpem1vSGVscGVyXSB9LFxuICAgIF0sXG4gICAgc2NoZW1hczogW0NVU1RPTV9FTEVNRU5UU19TQ0hFTUFdLFxufSlcbmV4cG9ydCBjbGFzcyBOZ3RzR2l6bW9IZWxwZXIgZXh0ZW5kcyBOZ3RTaWduYWxTdG9yZTxOZ3RzR2l6bW9IZWxwZXJTdGF0ZT4ge1xuICAgIHJlYWRvbmx5IGdpem1vUmVmID0gaW5qZWN0Tmd0UmVmPEdyb3VwPigpO1xuICAgIHJlYWRvbmx5IHZpcnR1YWxDYW1lcmFSZWYgPSBpbmplY3ROZ3RSZWY8T3J0aG9ncmFwaGljQ2FtZXJhPigpO1xuXG4gICAgQElucHV0KCkgc2V0IGFsaWdubWVudChcbiAgICAgICAgYWxpZ25tZW50OlxuICAgICAgICAgICAgfCAndG9wLWxlZnQnXG4gICAgICAgICAgICB8ICd0b3AtcmlnaHQnXG4gICAgICAgICAgICB8ICdib3R0b20tcmlnaHQnXG4gICAgICAgICAgICB8ICdib3R0b20tbGVmdCdcbiAgICAgICAgICAgIHwgJ2JvdHRvbS1jZW50ZXInXG4gICAgICAgICAgICB8ICdjZW50ZXItcmlnaHQnXG4gICAgICAgICAgICB8ICdjZW50ZXItbGVmdCdcbiAgICAgICAgICAgIHwgJ2NlbnRlci1jZW50ZXInXG4gICAgICAgICAgICB8ICd0b3AtY2VudGVyJ1xuICAgICkge1xuICAgICAgICB0aGlzLnNldCh7IGFsaWdubWVudCB9KTtcbiAgICB9XG5cbiAgICBASW5wdXQoKSBzZXQgbWFyZ2luKG1hcmdpbjogW251bWJlciwgbnVtYmVyXSkge1xuICAgICAgICB0aGlzLnNldCh7IG1hcmdpbiB9KTtcbiAgICB9XG5cbiAgICBASW5wdXQoKSBzZXQgcmVuZGVyUHJpb3JpdHkocmVuZGVyUHJpb3JpdHk6IG51bWJlcikge1xuICAgICAgICB0aGlzLnNldCh7IHJlbmRlclByaW9yaXR5IH0pO1xuICAgIH1cblxuICAgIEBJbnB1dCgpIHNldCBhdXRvQ2xlYXIoYXV0b0NsZWFyOiBib29sZWFuKSB7XG4gICAgICAgIHRoaXMuc2V0KHsgYXV0b0NsZWFyIH0pO1xuICAgIH1cblxuICAgIEBPdXRwdXQoKSB1cGRhdGVkID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xuXG4gICAgQENvbnRlbnRDaGlsZChOZ3RzR2l6bW9IZWxwZXJDb250ZW50LCB7IHN0YXRpYzogdHJ1ZSwgcmVhZDogVGVtcGxhdGVSZWYgfSlcbiAgICBnaXptb0hlbHBlckNvbnRlbnQhOiBUZW1wbGF0ZVJlZjx1bmtub3duPjtcblxuICAgIHJlYWRvbmx5ICNzdG9yZSA9IGluamVjdChOZ3RTdG9yZSk7XG4gICAgcmVhZG9ubHkgI2NhbWVyYSA9IHRoaXMuI3N0b3JlLnNlbGVjdCgnY2FtZXJhJyk7XG4gICAgcmVhZG9ubHkgI3NpemUgPSB0aGlzLiNzdG9yZS5zZWxlY3QoJ3NpemUnKTtcblxuICAgIHJlYWRvbmx5ICNhbGlnbm1lbnQgPSB0aGlzLnNlbGVjdCgnYWxpZ25tZW50Jyk7XG4gICAgcmVhZG9ubHkgI21hcmdpbiA9IHRoaXMuc2VsZWN0KCdtYXJnaW4nKTtcblxuICAgICNhbmltYXRpbmcgPSBmYWxzZTtcbiAgICAjcmFkaXVzID0gMDtcbiAgICAjZm9jdXNQb2ludCA9IG5ldyBWZWN0b3IzKDAsIDAsIDApO1xuICAgICNxMSA9IG5ldyBRdWF0ZXJuaW9uKCk7XG4gICAgI3EyID0gbmV3IFF1YXRlcm5pb24oKTtcbiAgICAjdGFyZ2V0ID0gbmV3IFZlY3RvcjMoKTtcbiAgICAjdGFyZ2V0UG9zaXRpb24gPSBuZXcgVmVjdG9yMygpO1xuICAgICNkdW1teSA9IG5ldyBPYmplY3QzRCgpO1xuXG4gICAgI2RlZmF1bHRVcCA9IG5ldyBWZWN0b3IzKDAsIDAsIDApO1xuICAgICN0dXJuUmF0ZSA9IDIgKiBNYXRoLlBJOyAvLyB0dXJuIHJhdGUgaW4gYW5nbGVzIHBlciBzZWNcbiAgICAjbWF0cml4ID0gbmV3IE1hdHJpeDQoKTtcblxuICAgIHJlYWRvbmx5IHByaW9yaXR5ID0gdGhpcy5zZWxlY3QoJ3JlbmRlclByaW9yaXR5Jyk7XG5cbiAgICByZWFkb25seSBwb3NpdGlvbiA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICAgICAgY29uc3Qgc2l6ZSA9IHRoaXMuI3NpemUoKTtcbiAgICAgICAgY29uc3QgYWxpZ25tZW50ID0gdGhpcy4jYWxpZ25tZW50KCk7XG4gICAgICAgIGNvbnN0IG1hcmdpbiA9IHRoaXMuI21hcmdpbigpO1xuXG4gICAgICAgIGNvbnN0IFttYXJnaW5YLCBtYXJnaW5ZXSA9IG1hcmdpbjtcbiAgICAgICAgY29uc3QgeCA9IGFsaWdubWVudC5lbmRzV2l0aCgnLWNlbnRlcicpXG4gICAgICAgICAgICA/IDBcbiAgICAgICAgICAgIDogYWxpZ25tZW50LmVuZHNXaXRoKCctbGVmdCcpXG4gICAgICAgICAgICA/IC1zaXplLndpZHRoIC8gMiArIG1hcmdpblhcbiAgICAgICAgICAgIDogc2l6ZS53aWR0aCAvIDIgLSBtYXJnaW5YO1xuICAgICAgICBjb25zdCB5ID0gYWxpZ25tZW50LnN0YXJ0c1dpdGgoJ2NlbnRlci0nKVxuICAgICAgICAgICAgPyAwXG4gICAgICAgICAgICA6IGFsaWdubWVudC5zdGFydHNXaXRoKCd0b3AtJylcbiAgICAgICAgICAgID8gc2l6ZS5oZWlnaHQgLyAyIC0gbWFyZ2luWVxuICAgICAgICAgICAgOiAtc2l6ZS5oZWlnaHQgLyAyICsgbWFyZ2luWTtcblxuICAgICAgICByZXR1cm4gW3gsIHksIDBdO1xuICAgIH0pO1xuXG4gICAgcmVhZG9ubHkgYXBpID0gY29tcHV0ZWQoKCkgPT4gKGRpcmVjdGlvbjogVEhSRUUuVmVjdG9yMykgPT4ge1xuICAgICAgICBjb25zdCB7IGNvbnRyb2xzLCBjYW1lcmEsIGludmFsaWRhdGUgfSA9IHRoaXMuI3N0b3JlLmdldCgpO1xuICAgICAgICBjb25zdCBkZWZhdWx0Q29udHJvbHMgPSBjb250cm9scyBhcyB1bmtub3duIGFzIENvbnRyb2xzUHJvdG87XG5cbiAgICAgICAgdGhpcy4jYW5pbWF0aW5nID0gdHJ1ZTtcbiAgICAgICAgaWYgKGRlZmF1bHRDb250cm9scykgdGhpcy4jZm9jdXNQb2ludCA9IGRlZmF1bHRDb250cm9scy50YXJnZXQ7XG4gICAgICAgIHRoaXMuI3JhZGl1cyA9IGNhbWVyYS5wb3NpdGlvbi5kaXN0YW5jZVRvKHRoaXMuI3RhcmdldCk7XG4gICAgICAgIC8vIHJvdGF0ZSBmcm9tIGN1cnJlbnQgY2FtZXJhIG9yaWVudGF0aW9uXG4gICAgICAgIHRoaXMuI3ExLmNvcHkoY2FtZXJhLnF1YXRlcm5pb24pO1xuICAgICAgICAvLyB0byBuZXcgY3VycmVudCBjYW1lcmEgb3JpZW50YXRpb25cbiAgICAgICAgdGhpcy4jdGFyZ2V0UG9zaXRpb24uY29weShkaXJlY3Rpb24pLm11bHRpcGx5U2NhbGFyKHRoaXMuI3JhZGl1cykuYWRkKHRoaXMuI3RhcmdldCk7XG4gICAgICAgIHRoaXMuI2R1bW15Lmxvb2tBdCh0aGlzLiN0YXJnZXRQb3NpdGlvbik7XG4gICAgICAgIHRoaXMuI3EyLmNvcHkodGhpcy4jZHVtbXkucXVhdGVybmlvbik7XG4gICAgICAgIGludmFsaWRhdGUoKTtcbiAgICB9KTtcblxuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBzdXBlcih7IGFsaWdubWVudDogJ2JvdHRvbS1yaWdodCcsIG1hcmdpbjogWzgwLCA4MF0sIHJlbmRlclByaW9yaXR5OiAxIH0pO1xuICAgICAgICB0aGlzLiN1cGRhdGVEZWZhdWx0VXAoKTtcbiAgICB9XG5cbiAgICBvbkJlZm9yZVJlbmRlcihkZWx0YTogbnVtYmVyKSB7XG4gICAgICAgIGlmICh0aGlzLnZpcnR1YWxDYW1lcmFSZWYubmF0aXZlRWxlbWVudCAmJiB0aGlzLmdpem1vUmVmLm5hdGl2ZUVsZW1lbnQpIHtcbiAgICAgICAgICAgIGNvbnN0IHsgY29udHJvbHMsIGNhbWVyYTogbWFpbkNhbWVyYSwgaW52YWxpZGF0ZSB9ID0gdGhpcy4jc3RvcmUuZ2V0KCk7XG4gICAgICAgICAgICBjb25zdCBkZWZhdWx0Q29udHJvbHMgPSBjb250cm9scyBhcyB1bmtub3duIGFzIENvbnRyb2xzUHJvdG87XG4gICAgICAgICAgICAvLyBBbmltYXRlIHN0ZXBcbiAgICAgICAgICAgIGlmICh0aGlzLiNhbmltYXRpbmcpIHtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy4jcTEuYW5nbGVUbyh0aGlzLiNxMikgPCAwLjAxKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuI2FuaW1hdGluZyA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAvLyBPcmJpdCBjb250cm9scyB1c2VzIFVQIHZlY3RvciBhcyB0aGUgb3JiaXQgYXhlcyxcbiAgICAgICAgICAgICAgICAgICAgLy8gc28gd2UgbmVlZCB0byByZXNldCBpdCBhZnRlciB0aGUgYW5pbWF0aW9uIGlzIGRvbmVcbiAgICAgICAgICAgICAgICAgICAgLy8gbW92aW5nIGl0IGFyb3VuZCBmb3IgdGhlIGNvbnRyb2xzIHRvIHdvcmsgY29ycmVjdGx5XG4gICAgICAgICAgICAgICAgICAgIGlmIChpc09yYml0Q29udHJvbHMoZGVmYXVsdENvbnRyb2xzKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgbWFpbkNhbWVyYS51cC5jb3B5KHRoaXMuI2RlZmF1bHRVcCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGVwID0gZGVsdGEgKiB0aGlzLiN0dXJuUmF0ZTtcbiAgICAgICAgICAgICAgICAgICAgLy8gYW5pbWF0ZSBwb3NpdGlvbiBieSBkb2luZyBhIHNsZXJwIGFuZCB0aGVuIHNjYWxpbmcgdGhlIHBvc2l0aW9uIG9uIHRoZSB1bml0IHNwaGVyZVxuICAgICAgICAgICAgICAgICAgICB0aGlzLiNxMS5yb3RhdGVUb3dhcmRzKHRoaXMuI3EyLCBzdGVwKTtcbiAgICAgICAgICAgICAgICAgICAgLy8gYW5pbWF0ZSBvcmllbnRhdGlvblxuICAgICAgICAgICAgICAgICAgICBtYWluQ2FtZXJhLnBvc2l0aW9uXG4gICAgICAgICAgICAgICAgICAgICAgICAuc2V0KDAsIDAsIDEpXG4gICAgICAgICAgICAgICAgICAgICAgICAuYXBwbHlRdWF0ZXJuaW9uKHRoaXMuI3ExKVxuICAgICAgICAgICAgICAgICAgICAgICAgLm11bHRpcGx5U2NhbGFyKHRoaXMuI3JhZGl1cylcbiAgICAgICAgICAgICAgICAgICAgICAgIC5hZGQodGhpcy4jZm9jdXNQb2ludCk7XG4gICAgICAgICAgICAgICAgICAgIG1haW5DYW1lcmEudXAuc2V0KDAsIDEsIDApLmFwcGx5UXVhdGVybmlvbih0aGlzLiNxMSkubm9ybWFsaXplKCk7XG4gICAgICAgICAgICAgICAgICAgIG1haW5DYW1lcmEucXVhdGVybmlvbi5jb3B5KHRoaXMuI3ExKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMudXBkYXRlZC5vYnNlcnZlZCkgdGhpcy51cGRhdGVkLmVtaXQoKTtcbiAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoZGVmYXVsdENvbnRyb2xzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0Q29udHJvbHMudXBkYXRlKCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgaW52YWxpZGF0ZSgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gU3luYyBHaXptbyB3aXRoIG1haW4gY2FtZXJhIG9yaWVudGF0aW9uXG4gICAgICAgICAgICB0aGlzLiNtYXRyaXguY29weShtYWluQ2FtZXJhLm1hdHJpeCkuaW52ZXJ0KCk7XG4gICAgICAgICAgICB0aGlzLmdpem1vUmVmLm5hdGl2ZUVsZW1lbnQucXVhdGVybmlvbi5zZXRGcm9tUm90YXRpb25NYXRyaXgodGhpcy4jbWF0cml4KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgICN1cGRhdGVEZWZhdWx0VXAoKSB7XG4gICAgICAgIGVmZmVjdCgoKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBjYW1lcmEgPSB0aGlzLiNjYW1lcmEoKTtcbiAgICAgICAgICAgIGlmICghY2FtZXJhKSByZXR1cm47XG4gICAgICAgICAgICB0aGlzLiNkZWZhdWx0VXAuY29weShjYW1lcmEudXApO1xuICAgICAgICB9KTtcbiAgICB9XG59XG4iXX0=
210
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2l6bW8taGVscGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9zb2JhL2Fic3RyYWN0aW9ucy9zcmMvZ2l6bW8taGVscGVyL2dpem1vLWhlbHBlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUNuRCxPQUFPLEVBQ0gsU0FBUyxFQUNULFFBQVEsRUFDUixZQUFZLEVBQ1osc0JBQXNCLEVBQ3RCLFNBQVMsRUFDVCxNQUFNLEVBQ04sWUFBWSxFQUNaLE1BQU0sRUFDTixjQUFjLEVBQ2QsS0FBSyxFQUNMLE1BQU0sRUFFTixXQUFXLEdBQ2QsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLE1BQU0sRUFBRSxZQUFZLEVBQUUsU0FBUyxFQUFFLGdCQUFnQixFQUFFLGNBQWMsRUFBRSxRQUFRLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDNUcsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDcEUsT0FBTyxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUUsUUFBUSxFQUFzQixVQUFVLEVBQUUsT0FBTyxFQUFFLE1BQU0sT0FBTyxDQUFDOztBQUsxRixNQUFNLGVBQWUsR0FBRyxDQUFDLFFBQXVCLEVBQTZCLEVBQUUsQ0FDM0UsZUFBZSxJQUFLLFFBQTBCLENBQUM7QUFHbkQsTUFBTSxDQUFDLE1BQU0scUJBQXFCLEdBQUcsSUFBSSxjQUFjLENBQTZCLHFCQUFxQixDQUFDLENBQUM7QUFFM0csTUFBTSxDQUFDLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQztBQWtCbEIsTUFDYSxzQkFBc0I7OEdBQXRCLHNCQUFzQjtrR0FBdEIsc0JBQXNCOztTQUF0QixzQkFBc0I7MkZBQXRCLHNCQUFzQjtrQkFEbEMsU0FBUzttQkFBQyxFQUFFLFFBQVEsRUFBRSxxQ0FBcUMsRUFBRSxVQUFVLEVBQUUsSUFBSSxFQUFF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SDtvQkFDRCxPQUFPLEVBQUUsQ0FBQyxzQkFBc0IsQ0FBQztpQkFDcEM7MEVBS2dCLFNBQVM7c0JBQXJCLEtBQUs7Z0JBZU8sTUFBTTtzQkFBbEIsS0FBSztnQkFJTyxjQUFjO3NCQUExQixLQUFLO2dCQUlPLFNBQVM7c0JBQXJCLEtBQUs7Z0JBSUksT0FBTztzQkFBaEIsTUFBTTtnQkFHUCxrQkFBa0I7c0JBRGpCLFlBQVk7dUJBQUMsc0JBQXNCLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxXQUFXLEVBQUUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBOZ1RlbXBsYXRlT3V0bGV0IH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7XG4gICAgQ29tcG9uZW50LFxuICAgIGNvbXB1dGVkLFxuICAgIENvbnRlbnRDaGlsZCxcbiAgICBDVVNUT01fRUxFTUVOVFNfU0NIRU1BLFxuICAgIERpcmVjdGl2ZSxcbiAgICBlZmZlY3QsXG4gICAgRXZlbnRFbWl0dGVyLFxuICAgIGluamVjdCxcbiAgICBJbmplY3Rpb25Ub2tlbixcbiAgICBJbnB1dCxcbiAgICBPdXRwdXQsXG4gICAgU2lnbmFsLFxuICAgIFRlbXBsYXRlUmVmLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IGV4dGVuZCwgaW5qZWN0Tmd0UmVmLCBOZ3RQb3J0YWwsIE5ndFBvcnRhbENvbnRlbnQsIE5ndFNpZ25hbFN0b3JlLCBOZ3RTdG9yZSB9IGZyb20gJ2FuZ3VsYXItdGhyZWUnO1xuaW1wb3J0IHsgTmd0c09ydGhvZ3JhcGhpY0NhbWVyYSB9IGZyb20gJ2FuZ3VsYXItdGhyZWUtc29iYS9jYW1lcmFzJztcbmltcG9ydCB7IEdyb3VwLCBNYXRyaXg0LCBPYmplY3QzRCwgT3J0aG9ncmFwaGljQ2FtZXJhLCBRdWF0ZXJuaW9uLCBWZWN0b3IzIH0gZnJvbSAndGhyZWUnO1xuaW1wb3J0IHsgT3JiaXRDb250cm9scyB9IGZyb20gJ3RocmVlLXN0ZGxpYic7XG5cbnR5cGUgQ29udHJvbHNQcm90byA9IHsgdXBkYXRlKCk6IHZvaWQ7IHRhcmdldDogVEhSRUUuVmVjdG9yMyB9O1xuXG5jb25zdCBpc09yYml0Q29udHJvbHMgPSAoY29udHJvbHM6IENvbnRyb2xzUHJvdG8pOiBjb250cm9scyBpcyBPcmJpdENvbnRyb2xzID0+XG4gICAgJ21pblBvbGFyQW5nbGUnIGluIChjb250cm9scyBhcyBPcmJpdENvbnRyb2xzKTtcblxuZXhwb3J0IHR5cGUgTmd0c0dpem1vSGVscGVyQXBpID0gKGRpcmVjdGlvbjogVmVjdG9yMykgPT4gdm9pZDtcbmV4cG9ydCBjb25zdCBOR1RTX0dJWk1PX0hFTFBFUl9BUEkgPSBuZXcgSW5qZWN0aW9uVG9rZW48U2lnbmFsPE5ndHNHaXptb0hlbHBlckFwaT4+KCdOZ3RzR2l6bW9IZWxwZXIgQVBJJyk7XG5cbmV4dGVuZCh7IEdyb3VwIH0pO1xuXG5leHBvcnQgaW50ZXJmYWNlIE5ndHNHaXptb0hlbHBlclN0YXRlIHtcbiAgICBhbGlnbm1lbnQ6XG4gICAgICAgIHwgJ3RvcC1sZWZ0J1xuICAgICAgICB8ICd0b3AtcmlnaHQnXG4gICAgICAgIHwgJ2JvdHRvbS1yaWdodCdcbiAgICAgICAgfCAnYm90dG9tLWxlZnQnXG4gICAgICAgIHwgJ2JvdHRvbS1jZW50ZXInXG4gICAgICAgIHwgJ2NlbnRlci1yaWdodCdcbiAgICAgICAgfCAnY2VudGVyLWxlZnQnXG4gICAgICAgIHwgJ2NlbnRlci1jZW50ZXInXG4gICAgICAgIHwgJ3RvcC1jZW50ZXInO1xuICAgIG1hcmdpbjogW251bWJlciwgbnVtYmVyXTtcbiAgICByZW5kZXJQcmlvcml0eTogbnVtYmVyO1xuICAgIGF1dG9DbGVhcjogYm9vbGVhbjtcbn1cblxuQERpcmVjdGl2ZSh7IHNlbGVjdG9yOiAnbmctdGVtcGxhdGVbbmd0c0dpem1vSGVscGVyQ29udGVudF0nLCBzdGFuZGFsb25lOiB0cnVlIH0pXG5leHBvcnQgY2xhc3MgTmd0c0dpem1vSGVscGVyQ29udGVudCB7fVxuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ25ndHMtZ2l6bW8taGVscGVyJyxcbiAgICBzdGFuZGFsb25lOiB0cnVlLFxuICAgIHRlbXBsYXRlOiBgXG4gICAgICAgIDxuZ3QtcG9ydGFsIFtyZW5kZXJQcmlvcml0eV09XCJwcmlvcml0eSgpXCI+XG4gICAgICAgICAgICA8bmctdGVtcGxhdGUgbmd0UG9ydGFsQ29udGVudD5cbiAgICAgICAgICAgICAgICA8bmd0cy1vcnRob2dyYXBoaWMtY2FtZXJhXG4gICAgICAgICAgICAgICAgICAgIFtjYW1lcmFSZWZdPVwidmlydHVhbENhbWVyYVJlZlwiXG4gICAgICAgICAgICAgICAgICAgIFttYWtlRGVmYXVsdF09XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICAgICAgW3Bvc2l0aW9uXT1cIlswLCAwLCAyMDBdXCJcbiAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgIDxuZ3QtZ3JvdXAgW3JlZl09XCJnaXptb1JlZlwiIFtwb3NpdGlvbl09XCJwb3NpdGlvbigpXCIgKGJlZm9yZVJlbmRlcik9XCJvbkJlZm9yZVJlbmRlcigkZXZlbnQuc3RhdGUuZGVsdGEpXCI+XG4gICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJnaXptb0hlbHBlckNvbnRlbnRcIiAvPlxuICAgICAgICAgICAgICAgIDwvbmd0LWdyb3VwPlxuICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgPC9uZ3QtcG9ydGFsPlxuICAgIGAsXG4gICAgaW1wb3J0czogW05ndFBvcnRhbCwgTmd0UG9ydGFsQ29udGVudCwgTmd0c09ydGhvZ3JhcGhpY0NhbWVyYSwgTmdUZW1wbGF0ZU91dGxldF0sXG4gICAgcHJvdmlkZXJzOiBbXG4gICAgICAgIHsgcHJvdmlkZTogTkdUU19HSVpNT19IRUxQRVJfQVBJLCB1c2VGYWN0b3J5OiAoZ2l6bW86IE5ndHNHaXptb0hlbHBlcikgPT4gZ2l6bW8uYXBpLCBkZXBzOiBbTmd0c0dpem1vSGVscGVyXSB9LFxuICAgIF0sXG4gICAgc2NoZW1hczogW0NVU1RPTV9FTEVNRU5UU19TQ0hFTUFdLFxufSlcbmV4cG9ydCBjbGFzcyBOZ3RzR2l6bW9IZWxwZXIgZXh0ZW5kcyBOZ3RTaWduYWxTdG9yZTxOZ3RzR2l6bW9IZWxwZXJTdGF0ZT4ge1xuICAgIHJlYWRvbmx5IGdpem1vUmVmID0gaW5qZWN0Tmd0UmVmPEdyb3VwPigpO1xuICAgIHJlYWRvbmx5IHZpcnR1YWxDYW1lcmFSZWYgPSBpbmplY3ROZ3RSZWY8T3J0aG9ncmFwaGljQ2FtZXJhPigpO1xuXG4gICAgQElucHV0KCkgc2V0IGFsaWdubWVudChcbiAgICAgICAgYWxpZ25tZW50OlxuICAgICAgICAgICAgfCAndG9wLWxlZnQnXG4gICAgICAgICAgICB8ICd0b3AtcmlnaHQnXG4gICAgICAgICAgICB8ICdib3R0b20tcmlnaHQnXG4gICAgICAgICAgICB8ICdib3R0b20tbGVmdCdcbiAgICAgICAgICAgIHwgJ2JvdHRvbS1jZW50ZXInXG4gICAgICAgICAgICB8ICdjZW50ZXItcmlnaHQnXG4gICAgICAgICAgICB8ICdjZW50ZXItbGVmdCdcbiAgICAgICAgICAgIHwgJ2NlbnRlci1jZW50ZXInXG4gICAgICAgICAgICB8ICd0b3AtY2VudGVyJ1xuICAgICkge1xuICAgICAgICB0aGlzLnNldCh7IGFsaWdubWVudCB9KTtcbiAgICB9XG5cbiAgICBASW5wdXQoKSBzZXQgbWFyZ2luKG1hcmdpbjogW251bWJlciwgbnVtYmVyXSkge1xuICAgICAgICB0aGlzLnNldCh7IG1hcmdpbiB9KTtcbiAgICB9XG5cbiAgICBASW5wdXQoKSBzZXQgcmVuZGVyUHJpb3JpdHkocmVuZGVyUHJpb3JpdHk6IG51bWJlcikge1xuICAgICAgICB0aGlzLnNldCh7IHJlbmRlclByaW9yaXR5IH0pO1xuICAgIH1cblxuICAgIEBJbnB1dCgpIHNldCBhdXRvQ2xlYXIoYXV0b0NsZWFyOiBib29sZWFuKSB7XG4gICAgICAgIHRoaXMuc2V0KHsgYXV0b0NsZWFyIH0pO1xuICAgIH1cblxuICAgIEBPdXRwdXQoKSB1cGRhdGVkID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xuXG4gICAgQENvbnRlbnRDaGlsZChOZ3RzR2l6bW9IZWxwZXJDb250ZW50LCB7IHN0YXRpYzogdHJ1ZSwgcmVhZDogVGVtcGxhdGVSZWYgfSlcbiAgICBnaXptb0hlbHBlckNvbnRlbnQhOiBUZW1wbGF0ZVJlZjx1bmtub3duPjtcblxuICAgIHJlYWRvbmx5ICNzdG9yZSA9IGluamVjdChOZ3RTdG9yZSk7XG4gICAgcmVhZG9ubHkgI2NhbWVyYSA9IHRoaXMuI3N0b3JlLnNlbGVjdCgnY2FtZXJhJyk7XG4gICAgcmVhZG9ubHkgI3NpemUgPSB0aGlzLiNzdG9yZS5zZWxlY3QoJ3NpemUnKTtcblxuICAgIHJlYWRvbmx5ICNhbGlnbm1lbnQgPSB0aGlzLnNlbGVjdCgnYWxpZ25tZW50Jyk7XG4gICAgcmVhZG9ubHkgI21hcmdpbiA9IHRoaXMuc2VsZWN0KCdtYXJnaW4nKTtcblxuICAgICNhbmltYXRpbmcgPSBmYWxzZTtcbiAgICAjcmFkaXVzID0gMDtcbiAgICAjZm9jdXNQb2ludCA9IG5ldyBWZWN0b3IzKDAsIDAsIDApO1xuICAgICNxMSA9IG5ldyBRdWF0ZXJuaW9uKCk7XG4gICAgI3EyID0gbmV3IFF1YXRlcm5pb24oKTtcbiAgICAjdGFyZ2V0ID0gbmV3IFZlY3RvcjMoKTtcbiAgICAjdGFyZ2V0UG9zaXRpb24gPSBuZXcgVmVjdG9yMygpO1xuICAgICNkdW1teSA9IG5ldyBPYmplY3QzRCgpO1xuXG4gICAgI2RlZmF1bHRVcCA9IG5ldyBWZWN0b3IzKDAsIDAsIDApO1xuICAgICN0dXJuUmF0ZSA9IDIgKiBNYXRoLlBJOyAvLyB0dXJuIHJhdGUgaW4gYW5nbGVzIHBlciBzZWNcbiAgICAjbWF0cml4ID0gbmV3IE1hdHJpeDQoKTtcblxuICAgIHJlYWRvbmx5IHByaW9yaXR5ID0gdGhpcy5zZWxlY3QoJ3JlbmRlclByaW9yaXR5Jyk7XG5cbiAgICByZWFkb25seSBwb3NpdGlvbiA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICAgICAgY29uc3Qgc2l6ZSA9IHRoaXMuI3NpemUoKTtcbiAgICAgICAgY29uc3QgYWxpZ25tZW50ID0gdGhpcy4jYWxpZ25tZW50KCk7XG4gICAgICAgIGNvbnN0IG1hcmdpbiA9IHRoaXMuI21hcmdpbigpO1xuXG4gICAgICAgIGNvbnN0IFttYXJnaW5YLCBtYXJnaW5ZXSA9IG1hcmdpbjtcbiAgICAgICAgY29uc3QgeCA9IGFsaWdubWVudC5lbmRzV2l0aCgnLWNlbnRlcicpXG4gICAgICAgICAgICA/IDBcbiAgICAgICAgICAgIDogYWxpZ25tZW50LmVuZHNXaXRoKCctbGVmdCcpXG4gICAgICAgICAgICA/IC1zaXplLndpZHRoIC8gMiArIG1hcmdpblhcbiAgICAgICAgICAgIDogc2l6ZS53aWR0aCAvIDIgLSBtYXJnaW5YO1xuICAgICAgICBjb25zdCB5ID0gYWxpZ25tZW50LnN0YXJ0c1dpdGgoJ2NlbnRlci0nKVxuICAgICAgICAgICAgPyAwXG4gICAgICAgICAgICA6IGFsaWdubWVudC5zdGFydHNXaXRoKCd0b3AtJylcbiAgICAgICAgICAgID8gc2l6ZS5oZWlnaHQgLyAyIC0gbWFyZ2luWVxuICAgICAgICAgICAgOiAtc2l6ZS5oZWlnaHQgLyAyICsgbWFyZ2luWTtcblxuICAgICAgICByZXR1cm4gW3gsIHksIDBdO1xuICAgIH0pO1xuXG4gICAgcmVhZG9ubHkgYXBpID0gY29tcHV0ZWQoKCkgPT4gKGRpcmVjdGlvbjogVEhSRUUuVmVjdG9yMykgPT4ge1xuICAgICAgICBjb25zdCB7IGNvbnRyb2xzLCBjYW1lcmEsIGludmFsaWRhdGUgfSA9IHRoaXMuI3N0b3JlLmdldCgpO1xuICAgICAgICBjb25zdCBkZWZhdWx0Q29udHJvbHMgPSBjb250cm9scyBhcyB1bmtub3duIGFzIENvbnRyb2xzUHJvdG87XG5cbiAgICAgICAgdGhpcy4jYW5pbWF0aW5nID0gdHJ1ZTtcbiAgICAgICAgaWYgKGRlZmF1bHRDb250cm9scykgdGhpcy4jZm9jdXNQb2ludCA9IGRlZmF1bHRDb250cm9scy50YXJnZXQ7XG4gICAgICAgIHRoaXMuI3JhZGl1cyA9IGNhbWVyYS5wb3NpdGlvbi5kaXN0YW5jZVRvKHRoaXMuI3RhcmdldCk7XG4gICAgICAgIC8vIHJvdGF0ZSBmcm9tIGN1cnJlbnQgY2FtZXJhIG9yaWVudGF0aW9uXG4gICAgICAgIHRoaXMuI3ExLmNvcHkoY2FtZXJhLnF1YXRlcm5pb24pO1xuICAgICAgICAvLyB0byBuZXcgY3VycmVudCBjYW1lcmEgb3JpZW50YXRpb25cbiAgICAgICAgdGhpcy4jdGFyZ2V0UG9zaXRpb24uY29weShkaXJlY3Rpb24pLm11bHRpcGx5U2NhbGFyKHRoaXMuI3JhZGl1cykuYWRkKHRoaXMuI3RhcmdldCk7XG4gICAgICAgIHRoaXMuI2R1bW15Lmxvb2tBdCh0aGlzLiN0YXJnZXRQb3NpdGlvbik7XG4gICAgICAgIHRoaXMuI3EyLmNvcHkodGhpcy4jZHVtbXkucXVhdGVybmlvbik7XG4gICAgICAgIGludmFsaWRhdGUoKTtcbiAgICB9KTtcblxuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBzdXBlcih7IGFsaWdubWVudDogJ2JvdHRvbS1yaWdodCcsIG1hcmdpbjogWzgwLCA4MF0sIHJlbmRlclByaW9yaXR5OiAxIH0pO1xuICAgICAgICB0aGlzLiN1cGRhdGVEZWZhdWx0VXAoKTtcbiAgICB9XG5cbiAgICBvbkJlZm9yZVJlbmRlcihkZWx0YTogbnVtYmVyKSB7XG4gICAgICAgIGlmICh0aGlzLnZpcnR1YWxDYW1lcmFSZWYubmF0aXZlRWxlbWVudCAmJiB0aGlzLmdpem1vUmVmLm5hdGl2ZUVsZW1lbnQpIHtcbiAgICAgICAgICAgIGNvbnN0IHsgY29udHJvbHMsIGNhbWVyYTogbWFpbkNhbWVyYSwgaW52YWxpZGF0ZSB9ID0gdGhpcy4jc3RvcmUuZ2V0KCk7XG4gICAgICAgICAgICBjb25zdCBkZWZhdWx0Q29udHJvbHMgPSBjb250cm9scyBhcyB1bmtub3duIGFzIENvbnRyb2xzUHJvdG87XG4gICAgICAgICAgICAvLyBBbmltYXRlIHN0ZXBcbiAgICAgICAgICAgIGlmICh0aGlzLiNhbmltYXRpbmcpIHtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy4jcTEuYW5nbGVUbyh0aGlzLiNxMikgPCAwLjAxKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuI2FuaW1hdGluZyA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAvLyBPcmJpdCBjb250cm9scyB1c2VzIFVQIHZlY3RvciBhcyB0aGUgb3JiaXQgYXhlcyxcbiAgICAgICAgICAgICAgICAgICAgLy8gc28gd2UgbmVlZCB0byByZXNldCBpdCBhZnRlciB0aGUgYW5pbWF0aW9uIGlzIGRvbmVcbiAgICAgICAgICAgICAgICAgICAgLy8gbW92aW5nIGl0IGFyb3VuZCBmb3IgdGhlIGNvbnRyb2xzIHRvIHdvcmsgY29ycmVjdGx5XG4gICAgICAgICAgICAgICAgICAgIGlmIChpc09yYml0Q29udHJvbHMoZGVmYXVsdENvbnRyb2xzKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgbWFpbkNhbWVyYS51cC5jb3B5KHRoaXMuI2RlZmF1bHRVcCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGVwID0gZGVsdGEgKiB0aGlzLiN0dXJuUmF0ZTtcbiAgICAgICAgICAgICAgICAgICAgLy8gYW5pbWF0ZSBwb3NpdGlvbiBieSBkb2luZyBhIHNsZXJwIGFuZCB0aGVuIHNjYWxpbmcgdGhlIHBvc2l0aW9uIG9uIHRoZSB1bml0IHNwaGVyZVxuICAgICAgICAgICAgICAgICAgICB0aGlzLiNxMS5yb3RhdGVUb3dhcmRzKHRoaXMuI3EyLCBzdGVwKTtcbiAgICAgICAgICAgICAgICAgICAgLy8gYW5pbWF0ZSBvcmllbnRhdGlvblxuICAgICAgICAgICAgICAgICAgICBtYWluQ2FtZXJhLnBvc2l0aW9uXG4gICAgICAgICAgICAgICAgICAgICAgICAuc2V0KDAsIDAsIDEpXG4gICAgICAgICAgICAgICAgICAgICAgICAuYXBwbHlRdWF0ZXJuaW9uKHRoaXMuI3ExKVxuICAgICAgICAgICAgICAgICAgICAgICAgLm11bHRpcGx5U2NhbGFyKHRoaXMuI3JhZGl1cylcbiAgICAgICAgICAgICAgICAgICAgICAgIC5hZGQodGhpcy4jZm9jdXNQb2ludCk7XG4gICAgICAgICAgICAgICAgICAgIG1haW5DYW1lcmEudXAuc2V0KDAsIDEsIDApLmFwcGx5UXVhdGVybmlvbih0aGlzLiNxMSkubm9ybWFsaXplKCk7XG4gICAgICAgICAgICAgICAgICAgIG1haW5DYW1lcmEucXVhdGVybmlvbi5jb3B5KHRoaXMuI3ExKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMudXBkYXRlZC5vYnNlcnZlZCkgdGhpcy51cGRhdGVkLmVtaXQoKTtcbiAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoZGVmYXVsdENvbnRyb2xzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0Q29udHJvbHMudXBkYXRlKCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgaW52YWxpZGF0ZSgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gU3luYyBHaXptbyB3aXRoIG1haW4gY2FtZXJhIG9yaWVudGF0aW9uXG4gICAgICAgICAgICB0aGlzLiNtYXRyaXguY29weShtYWluQ2FtZXJhLm1hdHJpeCkuaW52ZXJ0KCk7XG4gICAgICAgICAgICB0aGlzLmdpem1vUmVmLm5hdGl2ZUVsZW1lbnQucXVhdGVybmlvbi5zZXRGcm9tUm90YXRpb25NYXRyaXgodGhpcy4jbWF0cml4KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgICN1cGRhdGVEZWZhdWx0VXAoKSB7XG4gICAgICAgIGVmZmVjdCgoKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBjYW1lcmEgPSB0aGlzLiNjYW1lcmEoKTtcbiAgICAgICAgICAgIGlmICghY2FtZXJhKSByZXR1cm47XG4gICAgICAgICAgICB0aGlzLiNkZWZhdWx0VXAuY29weShjYW1lcmEudXApO1xuICAgICAgICB9KTtcbiAgICB9XG59XG4iXX0=
@@ -0,0 +1,150 @@
1
+ import { CUSTOM_ELEMENTS_SCHEMA, Component, Input } from '@angular/core';
2
+ import { NgtArgs, NgtSignalStore, extend, injectNgtRef } from 'angular-three';
3
+ import { GridMaterial } from 'angular-three-soba/shaders';
4
+ import * as THREE from 'three';
5
+ import { Mesh, PlaneGeometry } from 'three';
6
+ import * as i0 from "@angular/core";
7
+ extend({ Mesh, GridMaterial, PlaneGeometry });
8
+ class NgtsGrid extends NgtSignalStore {
9
+ set cellSize(cellSize) {
10
+ this.set({ cellSize });
11
+ }
12
+ set cellThickness(cellThickness) {
13
+ this.set({ cellThickness });
14
+ }
15
+ set cellColor(cellColor) {
16
+ this.set({ cellColor });
17
+ }
18
+ set sectionSize(sectionSize) {
19
+ this.set({ sectionSize });
20
+ }
21
+ set sectionThickness(sectionThickness) {
22
+ this.set({ sectionThickness });
23
+ }
24
+ set sectionColor(sectionColor) {
25
+ this.set({ sectionColor });
26
+ }
27
+ set followCamera(followCamera) {
28
+ this.set({ followCamera });
29
+ }
30
+ set infiniteGrid(infiniteGrid) {
31
+ this.set({ infiniteGrid });
32
+ }
33
+ set fadeDistance(fadeDistance) {
34
+ this.set({ fadeDistance });
35
+ }
36
+ set fadeStrength(fadeStrength) {
37
+ this.set({ fadeStrength });
38
+ }
39
+ set side(side) {
40
+ this.set({ side });
41
+ }
42
+ set args(args) {
43
+ this.set({ args });
44
+ }
45
+ constructor() {
46
+ super({
47
+ cellSize: 0.5,
48
+ sectionSize: 1,
49
+ fadeDistance: 100,
50
+ fadeStrength: 1,
51
+ cellThickness: 0.5,
52
+ sectionThickness: 1,
53
+ infiniteGrid: false,
54
+ followCamera: false,
55
+ cellColor: '#000000',
56
+ sectionColor: '#2080ff',
57
+ side: THREE.BackSide,
58
+ args: [1, 1, 1],
59
+ });
60
+ this.gridRef = injectNgtRef();
61
+ this.gridCellSize = this.select('cellSize');
62
+ this.gridSectionSize = this.select('sectionSize');
63
+ this.gridFadeDistance = this.select('fadeDistance');
64
+ this.gridFadeStrength = this.select('fadeStrength');
65
+ this.gridCellThickness = this.select('cellThickness');
66
+ this.gridSectionThickness = this.select('sectionThickness');
67
+ this.gridInfiniteGrid = this.select('infiniteGrid');
68
+ this.gridFollowCamera = this.select('followCamera');
69
+ this.gridCellColor = this.select('cellColor');
70
+ this.gridSectionColor = this.select('sectionColor');
71
+ this.gridSide = this.select('side');
72
+ this.gridArgs = this.select('args');
73
+ }
74
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.0.0", ngImport: i0, type: NgtsGrid, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
75
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.0.0", type: NgtsGrid, isStandalone: true, selector: "ngts-grid", inputs: { gridRef: "gridRef", cellSize: "cellSize", cellThickness: "cellThickness", cellColor: "cellColor", sectionSize: "sectionSize", sectionThickness: "sectionThickness", sectionColor: "sectionColor", followCamera: "followCamera", infiniteGrid: "infiniteGrid", fadeDistance: "fadeDistance", fadeStrength: "fadeStrength", side: "side", args: "args" }, usesInheritance: true, ngImport: i0, template: `
76
+ <ngt-mesh ngtCompound [ref]="gridRef" [frustumCulled]="false">
77
+ <ngt-grid-material
78
+ [transparent]="true"
79
+ [side]="gridSide()"
80
+ [cellSize]="gridCellSize()"
81
+ [sectionSize]="gridSectionSize()"
82
+ [cellColor]="gridCellColor()"
83
+ [sectionColor]="gridSectionColor()"
84
+ [cellThickness]="gridCellThickness()"
85
+ [sectionThickness]="gridSectionThickness()"
86
+ [fadeDistance]="gridFadeDistance()"
87
+ [fadeStrength]="gridFadeStrength()"
88
+ [infiniteGrid]="gridInfiniteGrid()"
89
+ [followCamera]="gridFollowCamera()"
90
+ />
91
+ <ngt-plane-geometry *args="gridArgs()" />
92
+ </ngt-mesh>
93
+ `, isInline: true, dependencies: [{ kind: "directive", type: NgtArgs, selector: "[args]", inputs: ["args"] }] }); }
94
+ }
95
+ export { NgtsGrid };
96
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.0", ngImport: i0, type: NgtsGrid, decorators: [{
97
+ type: Component,
98
+ args: [{
99
+ selector: 'ngts-grid',
100
+ standalone: true,
101
+ template: `
102
+ <ngt-mesh ngtCompound [ref]="gridRef" [frustumCulled]="false">
103
+ <ngt-grid-material
104
+ [transparent]="true"
105
+ [side]="gridSide()"
106
+ [cellSize]="gridCellSize()"
107
+ [sectionSize]="gridSectionSize()"
108
+ [cellColor]="gridCellColor()"
109
+ [sectionColor]="gridSectionColor()"
110
+ [cellThickness]="gridCellThickness()"
111
+ [sectionThickness]="gridSectionThickness()"
112
+ [fadeDistance]="gridFadeDistance()"
113
+ [fadeStrength]="gridFadeStrength()"
114
+ [infiniteGrid]="gridInfiniteGrid()"
115
+ [followCamera]="gridFollowCamera()"
116
+ />
117
+ <ngt-plane-geometry *args="gridArgs()" />
118
+ </ngt-mesh>
119
+ `,
120
+ imports: [NgtArgs],
121
+ schemas: [CUSTOM_ELEMENTS_SCHEMA],
122
+ }]
123
+ }], ctorParameters: function () { return []; }, propDecorators: { gridRef: [{
124
+ type: Input
125
+ }], cellSize: [{
126
+ type: Input
127
+ }], cellThickness: [{
128
+ type: Input
129
+ }], cellColor: [{
130
+ type: Input
131
+ }], sectionSize: [{
132
+ type: Input
133
+ }], sectionThickness: [{
134
+ type: Input
135
+ }], sectionColor: [{
136
+ type: Input
137
+ }], followCamera: [{
138
+ type: Input
139
+ }], infiniteGrid: [{
140
+ type: Input
141
+ }], fadeDistance: [{
142
+ type: Input
143
+ }], fadeStrength: [{
144
+ type: Input
145
+ }], side: [{
146
+ type: Input
147
+ }], args: [{
148
+ type: Input
149
+ }] } });
150
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3JpZC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvc29iYS9hYnN0cmFjdGlvbnMvc3JjL2dyaWQvZ3JpZC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN6RSxPQUFPLEVBQUUsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLEVBQUUsWUFBWSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzlFLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUMxRCxPQUFPLEtBQUssS0FBSyxNQUFNLE9BQU8sQ0FBQztBQUMvQixPQUFPLEVBQUUsSUFBSSxFQUFFLGFBQWEsRUFBRSxNQUFNLE9BQU8sQ0FBQzs7QUFFNUMsTUFBTSxDQUFDLEVBQUUsSUFBSSxFQUFFLFlBQVksRUFBRSxhQUFhLEVBQUUsQ0FBQyxDQUFDO0FBNkI5QyxNQXlCYSxRQUFTLFNBQVEsY0FBNkI7SUFFdkQsSUFBYSxRQUFRLENBQUMsUUFBbUM7UUFDckQsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLFFBQVEsRUFBRSxDQUFDLENBQUM7SUFDM0IsQ0FBQztJQUVELElBQWEsYUFBYSxDQUFDLGFBQTZDO1FBQ3BFLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxhQUFhLEVBQUUsQ0FBQyxDQUFDO0lBQ2hDLENBQUM7SUFFRCxJQUFhLFNBQVMsQ0FBQyxTQUFxQztRQUN4RCxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsU0FBUyxFQUFFLENBQUMsQ0FBQztJQUM1QixDQUFDO0lBRUQsSUFBYSxXQUFXLENBQUMsV0FBeUM7UUFDOUQsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLFdBQVcsRUFBRSxDQUFDLENBQUM7SUFDOUIsQ0FBQztJQUVELElBQWEsZ0JBQWdCLENBQUMsZ0JBQW1EO1FBQzdFLElBQUksQ0FBQyxHQUFHLENB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LElBQUk7b0JBQ2hCLFFBQVEsRUFBRTs7Ozs7Ozs7Ozs7Ozs7Ozs7O0tBa0JUO29CQUNELE9BQU8sRUFBRSxDQUFDLE9BQU8sQ0FBQztvQkFDbEIsT0FBTyxFQUFFLENBQUMsc0JBQXNCLENBQUM7aUJBQ3BDOzBFQUVZLE9BQU87c0JBQWYsS0FBSztnQkFDTyxRQUFRO3NCQUFwQixLQUFLO2dCQUlPLGFBQWE7c0JBQXpCLEtBQUs7Z0JBSU8sU0FBUztzQkFBckIsS0FBSztnQkFJTyxXQUFXO3NCQUF2QixLQUFLO2dCQUlPLGdCQUFnQjtzQkFBNUIsS0FBSztnQkFJTyxZQUFZO3NCQUF4QixLQUFLO2dCQUlPLFlBQVk7c0JBQXhCLEtBQUs7Z0JBSU8sWUFBWTtzQkFBeEIsS0FBSztnQkFJTyxZQUFZO3NCQUF4QixLQUFLO2dCQUlPLFlBQVk7c0JBQXhCLEtBQUs7Z0JBSU8sSUFBSTtzQkFBaEIsS0FBSztnQkFJTyxJQUFJO3NCQUFoQixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ1VTVE9NX0VMRU1FTlRTX1NDSEVNQSwgQ29tcG9uZW50LCBJbnB1dCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgTmd0QXJncywgTmd0U2lnbmFsU3RvcmUsIGV4dGVuZCwgaW5qZWN0Tmd0UmVmIH0gZnJvbSAnYW5ndWxhci10aHJlZSc7XG5pbXBvcnQgeyBHcmlkTWF0ZXJpYWwgfSBmcm9tICdhbmd1bGFyLXRocmVlLXNvYmEvc2hhZGVycyc7XG5pbXBvcnQgKiBhcyBUSFJFRSBmcm9tICd0aHJlZSc7XG5pbXBvcnQgeyBNZXNoLCBQbGFuZUdlb21ldHJ5IH0gZnJvbSAndGhyZWUnO1xuXG5leHRlbmQoeyBNZXNoLCBHcmlkTWF0ZXJpYWwsIFBsYW5lR2VvbWV0cnkgfSk7XG5cbmV4cG9ydCBpbnRlcmZhY2UgTmd0c0dyaWRTdGF0ZSB7XG4gICAgLyoqIENlbGwgc2l6ZSwgZGVmYXVsdDogMC41ICovXG4gICAgY2VsbFNpemU6IG51bWJlcjtcbiAgICAvKiogQ2VsbCB0aGlja25lc3MsIGRlZmF1bHQ6IDAuNSAqL1xuICAgIGNlbGxUaGlja25lc3M6IG51bWJlcjtcbiAgICAvKiogQ2VsbCBjb2xvciwgZGVmYXVsdDogYmxhY2sgKi9cbiAgICBjZWxsQ29sb3I6IFRIUkVFLkNvbG9yUmVwcmVzZW50YXRpb247XG4gICAgLyoqIFNlY3Rpb24gc2l6ZSwgZGVmYXVsdDogMSAqL1xuICAgIHNlY3Rpb25TaXplOiBudW1iZXI7XG4gICAgLyoqIFNlY3Rpb24gdGhpY2tuZXNzLCBkZWZhdWx0OiAxICovXG4gICAgc2VjdGlvblRoaWNrbmVzczogbnVtYmVyO1xuICAgIC8qKiBTZWN0aW9uIGNvbG9yLCBkZWZhdWx0OiAjMjA4MGZmICovXG4gICAgc2VjdGlvbkNvbG9yOiBUSFJFRS5Db2xvclJlcHJlc2VudGF0aW9uO1xuICAgIC8qKiBGb2xsb3cgY2FtZXJhLCBkZWZhdWx0OiBmYWxzZSAqL1xuICAgIGZvbGxvd0NhbWVyYTogYm9vbGVhbjtcbiAgICAvKiogRGlzcGxheSB0aGUgZ3JpZCBpbmZpbml0ZWx5LCBkZWZhdWx0OiBmYWxzZSAqL1xuICAgIGluZmluaXRlR3JpZDogYm9vbGVhbjtcbiAgICAvKiogRmFkZSBkaXN0YW5jZSwgZGVmYXVsdDogMTAwICovXG4gICAgZmFkZURpc3RhbmNlOiBudW1iZXI7XG4gICAgLyoqIEZhZGUgc3RyZW5ndGgsIGRlZmF1bHQ6IDEgKi9cbiAgICBmYWRlU3RyZW5ndGg6IG51bWJlcjtcbiAgICAvKiogTWF0ZXJpYWwgc2lkZSwgZGVmYXVsdDogVEhSRUUuQmFja1NpZGUgKi9cbiAgICBzaWRlOiBUSFJFRS5TaWRlO1xuICAgIC8qKiBEZWZhdWx0IHBsYW5lLWdlb21ldHJ5IGFyZ3VtZW50cyAqL1xuICAgIGFyZ3M6IENvbnN0cnVjdG9yUGFyYW1ldGVyczx0eXBlb2YgVEhSRUUuUGxhbmVHZW9tZXRyeT47XG59XG5cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAnbmd0cy1ncmlkJyxcbiAgICBzdGFuZGFsb25lOiB0cnVlLFxuICAgIHRlbXBsYXRlOiBgXG4gICAgICAgIDxuZ3QtbWVzaCBuZ3RDb21wb3VuZCBbcmVmXT1cImdyaWRSZWZcIiBbZnJ1c3R1bUN1bGxlZF09XCJmYWxzZVwiPlxuICAgICAgICAgICAgPG5ndC1ncmlkLW1hdGVyaWFsXG4gICAgICAgICAgICAgICAgW3RyYW5zcGFyZW50XT1cInRydWVcIlxuICAgICAgICAgICAgICAgIFtzaWRlXT1cImdyaWRTaWRlKClcIlxuICAgICAgICAgICAgICAgIFtjZWxsU2l6ZV09XCJncmlkQ2VsbFNpemUoKVwiXG4gICAgICAgICAgICAgICAgW3NlY3Rpb25TaXplXT1cImdyaWRTZWN0aW9uU2l6ZSgpXCJcbiAgICAgICAgICAgICAgICBbY2VsbENvbG9yXT1cImdyaWRDZWxsQ29sb3IoKVwiXG4gICAgICAgICAgICAgICAgW3NlY3Rpb25Db2xvcl09XCJncmlkU2VjdGlvbkNvbG9yKClcIlxuICAgICAgICAgICAgICAgIFtjZWxsVGhpY2tuZXNzXT1cImdyaWRDZWxsVGhpY2tuZXNzKClcIlxuICAgICAgICAgICAgICAgIFtzZWN0aW9uVGhpY2tuZXNzXT1cImdyaWRTZWN0aW9uVGhpY2tuZXNzKClcIlxuICAgICAgICAgICAgICAgIFtmYWRlRGlzdGFuY2VdPVwiZ3JpZEZhZGVEaXN0YW5jZSgpXCJcbiAgICAgICAgICAgICAgICBbZmFkZVN0cmVuZ3RoXT1cImdyaWRGYWRlU3RyZW5ndGgoKVwiXG4gICAgICAgICAgICAgICAgW2luZmluaXRlR3JpZF09XCJncmlkSW5maW5pdGVHcmlkKClcIlxuICAgICAgICAgICAgICAgIFtmb2xsb3dDYW1lcmFdPVwiZ3JpZEZvbGxvd0NhbWVyYSgpXCJcbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgICA8bmd0LXBsYW5lLWdlb21ldHJ5ICphcmdzPVwiZ3JpZEFyZ3MoKVwiIC8+XG4gICAgICAgIDwvbmd0LW1lc2g+XG4gICAgYCxcbiAgICBpbXBvcnRzOiBbTmd0QXJnc10sXG4gICAgc2NoZW1hczogW0NVU1RPTV9FTEVNRU5UU19TQ0hFTUFdLFxufSlcbmV4cG9ydCBjbGFzcyBOZ3RzR3JpZCBleHRlbmRzIE5ndFNpZ25hbFN0b3JlPE5ndHNHcmlkU3RhdGU+IHtcbiAgICBASW5wdXQoKSBncmlkUmVmID0gaW5qZWN0Tmd0UmVmPFRIUkVFLk1lc2g+KCk7XG4gICAgQElucHV0KCkgc2V0IGNlbGxTaXplKGNlbGxTaXplOiBOZ3RzR3JpZFN0YXRlWydjZWxsU2l6ZSddKSB7XG4gICAgICAgIHRoaXMuc2V0KHsgY2VsbFNpemUgfSk7XG4gICAgfVxuXG4gICAgQElucHV0KCkgc2V0IGNlbGxUaGlja25lc3MoY2VsbFRoaWNrbmVzczogTmd0c0dyaWRTdGF0ZVsnY2VsbFRoaWNrbmVzcyddKSB7XG4gICAgICAgIHRoaXMuc2V0KHsgY2VsbFRoaWNrbmVzcyB9KTtcbiAgICB9XG5cbiAgICBASW5wdXQoKSBzZXQgY2VsbENvbG9yKGNlbGxDb2xvcjogTmd0c0dyaWRTdGF0ZVsnY2VsbENvbG9yJ10pIHtcbiAgICAgICAgdGhpcy5zZXQoeyBjZWxsQ29sb3IgfSk7XG4gICAgfVxuXG4gICAgQElucHV0KCkgc2V0IHNlY3Rpb25TaXplKHNlY3Rpb25TaXplOiBOZ3RzR3JpZFN0YXRlWydzZWN0aW9uU2l6ZSddKSB7XG4gICAgICAgIHRoaXMuc2V0KHsgc2VjdGlvblNpemUgfSk7XG4gICAgfVxuXG4gICAgQElucHV0KCkgc2V0IHNlY3Rpb25UaGlja25lc3Moc2VjdGlvblRoaWNrbmVzczogTmd0c0dyaWRTdGF0ZVsnc2VjdGlvblRoaWNrbmVzcyddKSB7XG4gICAgICAgIHRoaXMuc2V0KHsgc2VjdGlvblRoaWNrbmVzcyB9KTtcbiAgICB9XG5cbiAgICBASW5wdXQoKSBzZXQgc2VjdGlvbkNvbG9yKHNlY3Rpb25Db2xvcjogTmd0c0dyaWRTdGF0ZVsnc2VjdGlvbkNvbG9yJ10pIHtcbiAgICAgICAgdGhpcy5zZXQoeyBzZWN0aW9uQ29sb3IgfSk7XG4gICAgfVxuXG4gICAgQElucHV0KCkgc2V0IGZvbGxvd0NhbWVyYShmb2xsb3dDYW1lcmE6IE5ndHNHcmlkU3RhdGVbJ2ZvbGxvd0NhbWVyYSddKSB7XG4gICAgICAgIHRoaXMuc2V0KHsgZm9sbG93Q2FtZXJhIH0pO1xuICAgIH1cblxuICAgIEBJbnB1dCgpIHNldCBpbmZpbml0ZUdyaWQoaW5maW5pdGVHcmlkOiBOZ3RzR3JpZFN0YXRlWydpbmZpbml0ZUdyaWQnXSkge1xuICAgICAgICB0aGlzLnNldCh7IGluZmluaXRlR3JpZCB9KTtcbiAgICB9XG5cbiAgICBASW5wdXQoKSBzZXQgZmFkZURpc3RhbmNlKGZhZGVEaXN0YW5jZTogTmd0c0dyaWRTdGF0ZVsnZmFkZURpc3RhbmNlJ10pIHtcbiAgICAgICAgdGhpcy5zZXQoeyBmYWRlRGlzdGFuY2UgfSk7XG4gICAgfVxuXG4gICAgQElucHV0KCkgc2V0IGZhZGVTdHJlbmd0aChmYWRlU3RyZW5ndGg6IE5ndHNHcmlkU3RhdGVbJ2ZhZGVTdHJlbmd0aCddKSB7XG4gICAgICAgIHRoaXMuc2V0KHsgZmFkZVN0cmVuZ3RoIH0pO1xuICAgIH1cblxuICAgIEBJbnB1dCgpIHNldCBzaWRlKHNpZGU6IE5ndHNHcmlkU3RhdGVbJ3NpZGUnXSkge1xuICAgICAgICB0aGlzLnNldCh7IHNpZGUgfSk7XG4gICAgfVxuXG4gICAgQElucHV0KCkgc2V0IGFyZ3MoYXJnczogTmd0c0dyaWRTdGF0ZVsnYXJncyddKSB7XG4gICAgICAgIHRoaXMuc2V0KHsgYXJncyB9KTtcbiAgICB9XG5cbiAgICByZWFkb25seSBncmlkQ2VsbFNpemUgPSB0aGlzLnNlbGVjdCgnY2VsbFNpemUnKTtcbiAgICByZWFkb25seSBncmlkU2VjdGlvblNpemUgPSB0aGlzLnNlbGVjdCgnc2VjdGlvblNpemUnKTtcbiAgICByZWFkb25seSBncmlkRmFkZURpc3RhbmNlID0gdGhpcy5zZWxlY3QoJ2ZhZGVEaXN0YW5jZScpO1xuICAgIHJlYWRvbmx5IGdyaWRGYWRlU3RyZW5ndGggPSB0aGlzLnNlbGVjdCgnZmFkZVN0cmVuZ3RoJyk7XG4gICAgcmVhZG9ubHkgZ3JpZENlbGxUaGlja25lc3MgPSB0aGlzLnNlbGVjdCgnY2VsbFRoaWNrbmVzcycpO1xuICAgIHJlYWRvbmx5IGdyaWRTZWN0aW9uVGhpY2tuZXNzID0gdGhpcy5zZWxlY3QoJ3NlY3Rpb25UaGlja25lc3MnKTtcbiAgICByZWFkb25seSBncmlkSW5maW5pdGVHcmlkID0gdGhpcy5zZWxlY3QoJ2luZmluaXRlR3JpZCcpO1xuICAgIHJlYWRvbmx5IGdyaWRGb2xsb3dDYW1lcmEgPSB0aGlzLnNlbGVjdCgnZm9sbG93Q2FtZXJhJyk7XG4gICAgcmVhZG9ubHkgZ3JpZENlbGxDb2xvciA9IHRoaXMuc2VsZWN0KCdjZWxsQ29sb3InKTtcbiAgICByZWFkb25seSBncmlkU2VjdGlvbkNvbG9yID0gdGhpcy5zZWxlY3QoJ3NlY3Rpb25Db2xvcicpO1xuICAgIHJlYWRvbmx5IGdyaWRTaWRlID0gdGhpcy5zZWxlY3QoJ3NpZGUnKTtcbiAgICByZWFkb25seSBncmlkQXJncyA9IHRoaXMuc2VsZWN0KCdhcmdzJyk7XG5cbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgc3VwZXIoe1xuICAgICAgICAgICAgY2VsbFNpemU6IDAuNSxcbiAgICAgICAgICAgIHNlY3Rpb25TaXplOiAxLFxuICAgICAgICAgICAgZmFkZURpc3RhbmNlOiAxMDAsXG4gICAgICAgICAgICBmYWRlU3RyZW5ndGg6IDEsXG4gICAgICAgICAgICBjZWxsVGhpY2tuZXNzOiAwLjUsXG4gICAgICAgICAgICBzZWN0aW9uVGhpY2tuZXNzOiAxLFxuICAgICAgICAgICAgaW5maW5pdGVHcmlkOiBmYWxzZSxcbiAgICAgICAgICAgIGZvbGxvd0NhbWVyYTogZmFsc2UsXG4gICAgICAgICAgICBjZWxsQ29sb3I6ICcjMDAwMDAwJyxcbiAgICAgICAgICAgIHNlY3Rpb25Db2xvcjogJyMyMDgwZmYnLFxuICAgICAgICAgICAgc2lkZTogVEhSRUUuQmFja1NpZGUsXG4gICAgICAgICAgICBhcmdzOiBbMSwgMSwgMV0sXG4gICAgICAgIH0pO1xuICAgIH1cbn1cbiJdfQ==
@@ -5,8 +5,9 @@ export * from './edges/edges';
5
5
  export * from './gizmo-helper/gizmo-helper';
6
6
  export * from './gizmo-helper/gizmo-viewcube/gizmo-viewcube';
7
7
  export * from './gizmo-helper/gizmo-viewport/gizmo-viewport';
8
+ export * from './grid/grid';
8
9
  export * from './line/line';
9
10
  export * from './quadratic-bezier-line/quadratic-bezier-line';
10
11
  export * from './text-3d/text-3d';
11
12
  export * from './text/text';
12
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9saWJzL3NvYmEvYWJzdHJhY3Rpb25zL3NyYy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxjQUFjLHVCQUF1QixDQUFDO0FBQ3RDLGNBQWMscUNBQXFDLENBQUM7QUFDcEQsY0FBYyx1Q0FBdUMsQ0FBQztBQUN0RCxjQUFjLGVBQWUsQ0FBQztBQUM5QixjQUFjLDZCQUE2QixDQUFDO0FBQzVDLGNBQWMsOENBQThDLENBQUM7QUFDN0QsY0FBYyw4Q0FBOEMsQ0FBQztBQUM3RCxjQUFjLGFBQWEsQ0FBQztBQUM1QixjQUFjLCtDQUErQyxDQUFDO0FBQzlELGNBQWMsbUJBQW1CLENBQUM7QUFDbEMsY0FBYyxhQUFhLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgKiBmcm9tICcuL2JpbGxib2FyZC9iaWxsYm9hcmQnO1xuZXhwb3J0ICogZnJvbSAnLi9jYXRtdWxsLXJvbS1saW5lL2NhdG11bGwtcm9tLWxpbmUnO1xuZXhwb3J0ICogZnJvbSAnLi9jdWJpYy1iZXppZXItbGluZS9jdWJpYy1iZXppZXItbGluZSc7XG5leHBvcnQgKiBmcm9tICcuL2VkZ2VzL2VkZ2VzJztcbmV4cG9ydCAqIGZyb20gJy4vZ2l6bW8taGVscGVyL2dpem1vLWhlbHBlcic7XG5leHBvcnQgKiBmcm9tICcuL2dpem1vLWhlbHBlci9naXptby12aWV3Y3ViZS9naXptby12aWV3Y3ViZSc7XG5leHBvcnQgKiBmcm9tICcuL2dpem1vLWhlbHBlci9naXptby12aWV3cG9ydC9naXptby12aWV3cG9ydCc7XG5leHBvcnQgKiBmcm9tICcuL2xpbmUvbGluZSc7XG5leHBvcnQgKiBmcm9tICcuL3F1YWRyYXRpYy1iZXppZXItbGluZS9xdWFkcmF0aWMtYmV6aWVyLWxpbmUnO1xuZXhwb3J0ICogZnJvbSAnLi90ZXh0LTNkL3RleHQtM2QnO1xuZXhwb3J0ICogZnJvbSAnLi90ZXh0L3RleHQnO1xuIl19
13
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9saWJzL3NvYmEvYWJzdHJhY3Rpb25zL3NyYy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxjQUFjLHVCQUF1QixDQUFDO0FBQ3RDLGNBQWMscUNBQXFDLENBQUM7QUFDcEQsY0FBYyx1Q0FBdUMsQ0FBQztBQUN0RCxjQUFjLGVBQWUsQ0FBQztBQUM5QixjQUFjLDZCQUE2QixDQUFDO0FBQzVDLGNBQWMsOENBQThDLENBQUM7QUFDN0QsY0FBYyw4Q0FBOEMsQ0FBQztBQUM3RCxjQUFjLGFBQWEsQ0FBQztBQUM1QixjQUFjLGFBQWEsQ0FBQztBQUM1QixjQUFjLCtDQUErQyxDQUFDO0FBQzlELGNBQWMsbUJBQW1CLENBQUM7QUFDbEMsY0FBYyxhQUFhLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgKiBmcm9tICcuL2JpbGxib2FyZC9iaWxsYm9hcmQnO1xuZXhwb3J0ICogZnJvbSAnLi9jYXRtdWxsLXJvbS1saW5lL2NhdG11bGwtcm9tLWxpbmUnO1xuZXhwb3J0ICogZnJvbSAnLi9jdWJpYy1iZXppZXItbGluZS9jdWJpYy1iZXppZXItbGluZSc7XG5leHBvcnQgKiBmcm9tICcuL2VkZ2VzL2VkZ2VzJztcbmV4cG9ydCAqIGZyb20gJy4vZ2l6bW8taGVscGVyL2dpem1vLWhlbHBlcic7XG5leHBvcnQgKiBmcm9tICcuL2dpem1vLWhlbHBlci9naXptby12aWV3Y3ViZS9naXptby12aWV3Y3ViZSc7XG5leHBvcnQgKiBmcm9tICcuL2dpem1vLWhlbHBlci9naXptby12aWV3cG9ydC9naXptby12aWV3cG9ydCc7XG5leHBvcnQgKiBmcm9tICcuL2dyaWQvZ3JpZCc7XG5leHBvcnQgKiBmcm9tICcuL2xpbmUvbGluZSc7XG5leHBvcnQgKiBmcm9tICcuL3F1YWRyYXRpYy1iZXppZXItbGluZS9xdWFkcmF0aWMtYmV6aWVyLWxpbmUnO1xuZXhwb3J0ICogZnJvbSAnLi90ZXh0LTNkL3RleHQtM2QnO1xuZXhwb3J0ICogZnJvbSAnLi90ZXh0L3RleHQnO1xuIl19
@@ -95,7 +95,6 @@ class NgtsText extends NgtSignalStore {
95
95
  this.sync = new EventEmitter();
96
96
  this.troikaText = new Text();
97
97
  this.#store = inject(NgtStore);
98
- this.state = this.select();
99
98
  inject(DestroyRef).onDestroy(() => {
100
99
  this.troikaText.dispose();
101
100
  });
@@ -113,9 +112,8 @@ class NgtsText extends NgtSignalStore {
113
112
  });
114
113
  }
115
114
  #syncText() {
116
- const state = this.select();
117
115
  effect(() => {
118
- state();
116
+ this.state();
119
117
  const invalidate = this.#store.get('invalidate');
120
118
  this.troikaText.sync(() => {
121
119
  invalidate();
@@ -272,4 +270,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.0", ngImpor
272
270
  }], sync: [{
273
271
  type: Output
274
272
  }] } });
275
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGV4dC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvc29iYS9hYnN0cmFjdGlvbnMvc3JjL3RleHQvdGV4dC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0gsc0JBQXNCLEVBQ3RCLFNBQVMsRUFDVCxVQUFVLEVBQ1YsWUFBWSxFQUNaLEtBQUssRUFDTCxNQUFNLEVBQ04sUUFBUSxFQUNSLE1BQU0sRUFDTixNQUFNLEdBQ1QsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLE9BQU8sRUFBRSxjQUFjLEVBQUUsUUFBUSxFQUFFLFlBQVksRUFBZ0IsTUFBTSxlQUFlLENBQUM7QUFFOUYsc0RBQXNEO0FBQ3RELE9BQU8sRUFBRSxJQUFJLEVBQUUsV0FBVyxFQUFFLE1BQU0sbUJBQW1CLENBQUM7O0FBd0N0RCxNQTJDYSxRQUFTLFNBQVEsY0FBNkI7SUFHdkQsSUFBK0IsSUFBSSxDQUFDLElBQVk7UUFDNUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7SUFDdkIsQ0FBQztJQUVELElBQWEsSUFBSSxDQUFDLElBQVk7UUFDMUIsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7SUFDdkIsQ0FBQztJQUVELElBQWEsUUFBUSxDQUFDLFFBQWdCO1FBQ2xDLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxRQUFRLEVBQUUsQ0FBQyxDQUFDO0lBQzNCLENBQUM7SUFFRCxJQUFhLE9BQU8sQ0FBQyxPQUE2QztRQUM5RCxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsT0FBTyxFQUFFLENBQUMsQ0FBQztJQUMxQixDQUFDO0lBRUQsSUFBYSxPQUFPLENBQUMsT0FBa0Y7UUFDbkcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLE9BQU8sRUFBRSxDQUFDLENBQUM7SUFDMUIsQ0FBQztJQUVELElBQWEsWUFBWSxDQUFDLFlBQW9CO1FB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Ozs7Ozs7Ozs7Ozs7OztLQW9DVDtvQkFDRCxPQUFPLEVBQUUsQ0FBQyxPQUFPLENBQUM7b0JBQ2xCLE9BQU8sRUFBRSxDQUFDLHNCQUFzQixDQUFDO2lCQUNwQzswRUFFWSxPQUFPO3NCQUFmLEtBQUs7Z0JBRXlCLElBQUk7c0JBQWxDLEtBQUs7dUJBQUMsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFO2dCQUlaLElBQUk7c0JBQWhCLEtBQUs7Z0JBSU8sUUFBUTtzQkFBcEIsS0FBSztnQkFJTyxPQUFPO3NCQUFuQixLQUFLO2dCQUlPLE9BQU87c0JBQW5CLEtBQUs7Z0JBSU8sWUFBWTtzQkFBeEIsS0FBSztnQkFJTyxVQUFVO3NCQUF0QixLQUFLO2dCQUlPLEtBQUs7c0JBQWpCLEtBQUs7Z0JBSU8sUUFBUTtzQkFBcEIsS0FBSztnQkFJTyxVQUFVO3NCQUF0QixLQUFLO2dCQUlPLGFBQWE7c0JBQXpCLEtBQUs7Z0JBSU8sU0FBUztzQkFBckIsS0FBSztnQkFJTyxRQUFRO3NCQUFwQixLQUFLO2dCQUlPLFdBQVc7c0JBQXZCLEtBQUs7Z0JBSU8sU0FBUztzQkFBckIsS0FBSztnQkFJTyxZQUFZO3NCQUF4QixLQUFLO2dCQUlPLFVBQVU7c0JBQXRCLEtBQUs7Z0JBSU8sWUFBWTtzQkFBeEIsS0FBSztnQkFJTyxjQUFjO3NCQUExQixLQUFLO2dCQUlPLGNBQWM7c0JBQTFCLEtBQUs7Z0JBSU8sV0FBVztzQkFBdkIsS0FBSztnQkFJTyxZQUFZO3NCQUF4QixLQUFLO2dCQUlPLGNBQWM7c0JBQTFCLEtBQUs7Z0JBSU8sV0FBVztzQkFBdkIsS0FBSztnQkFJTyxXQUFXO3NCQUF2QixLQUFLO2dCQUlPLGFBQWE7c0JBQXpCLEtBQUs7Z0JBSU8sV0FBVztzQkFBdkIsS0FBSztnQkFJTyxRQUFRO3NCQUFwQixLQUFLO2dCQUlJLElBQUk7c0JBQWIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gICAgQ1VTVE9NX0VMRU1FTlRTX1NDSEVNQSxcbiAgICBDb21wb25lbnQsXG4gICAgRGVzdHJveVJlZixcbiAgICBFdmVudEVtaXR0ZXIsXG4gICAgSW5wdXQsXG4gICAgT3V0cHV0LFxuICAgIGNvbXB1dGVkLFxuICAgIGVmZmVjdCxcbiAgICBpbmplY3QsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgTmd0QXJncywgTmd0U2lnbmFsU3RvcmUsIE5ndFN0b3JlLCBpbmplY3ROZ3RSZWYsIHR5cGUgTmd0TWVzaCB9IGZyb20gJ2FuZ3VsYXItdGhyZWUnO1xuXG4vLyBAdHMtZXhwZWN0LWVycm9yOiBubyB0eXBlIGRlZiBmb3IgdHJvaWthLXRocmVlLXRleHRcbmltcG9ydCB7IFRleHQsIHByZWxvYWRGb250IH0gZnJvbSAndHJvaWthLXRocmVlLXRleHQnO1xuXG5leHBvcnQgdHlwZSBOZ3RzVGV4dFN0YXRlID0ge1xuICAgIHRleHQ6IHN0cmluZztcbiAgICAvKiogRm9udCBzaXplLCBkZWZhdWx0OiAxICovXG4gICAgZm9udFNpemU6IG51bWJlcjtcbiAgICBhbmNob3JYOiBudW1iZXIgfCAnbGVmdCcgfCAnY2VudGVyJyB8ICdyaWdodCc7XG4gICAgYW5jaG9yWTogbnVtYmVyIHwgJ3RvcCcgfCAndG9wLWJhc2VsaW5lJyB8ICdtaWRkbGUnIHwgJ2JvdHRvbS1iYXNlbGluZScgfCAnYm90dG9tJztcbiAgICBzZGZHbHlwaFNpemU6IG51bWJlcjtcbiAgICBmb250Pzogc3RyaW5nO1xuICAgIGNoYXJhY3RlcnM/OiBzdHJpbmc7XG4gICAgY29sb3I/OiBUSFJFRS5Db2xvclJlcHJlc2VudGF0aW9uO1xuICAgIG1heFdpZHRoPzogbnVtYmVyO1xuICAgIGxpbmVIZWlnaHQ/OiBudW1iZXI7XG4gICAgbGV0dGVyU3BhY2luZz86IG51bWJlcjtcbiAgICB0ZXh0QWxpZ24/OiAnbGVmdCcgfCAncmlnaHQnIHwgJ2NlbnRlcicgfCAnanVzdGlmeSc7XG4gICAgY2xpcFJlY3Q/OiBbbnVtYmVyLCBudW1iZXIsIG51bWJlciwgbnVtYmVyXTtcbiAgICBkZXB0aE9mZnNldD86IG51bWJlcjtcbiAgICBkaXJlY3Rpb24/OiAnYXV0bycgfCAnbHRyJyB8ICdydGwnO1xuICAgIG92ZXJmbG93V3JhcD86ICdub3JtYWwnIHwgJ2JyZWFrLXdvcmQnO1xuICAgIHdoaXRlU3BhY2U/OiAnbm9ybWFsJyB8ICdvdmVyZmxvd1dyYXAnIHwgJ25vd3JhcCc7XG4gICAgb3V0bGluZVdpZHRoPzogbnVtYmVyIHwgc3RyaW5nO1xuICAgIG91dGxpbmVPZmZzZXRYPzogbnVtYmVyIHwgc3RyaW5nO1xuICAgIG91dGxpbmVPZmZzZXRZPzogbnVtYmVyIHwgc3RyaW5nO1xuICAgIG91dGxpbmVCbHVyPzogbnVtYmVyIHwgc3RyaW5nO1xuICAgIG91dGxpbmVDb2xvcj86IFRIUkVFLkNvbG9yUmVwcmVzZW50YXRpb247XG4gICAgb3V0bGluZU9wYWNpdHk/OiBudW1iZXI7XG4gICAgc3Ryb2tlV2lkdGg/OiBudW1iZXIgfCBzdHJpbmc7XG4gICAgc3Ryb2tlQ29sb3I/OiBUSFJFRS5Db2xvclJlcHJlc2VudGF0aW9uO1xuICAgIHN0cm9rZU9wYWNpdHk/OiBudW1iZXI7XG4gICAgZmlsbE9wYWNpdHk/OiBudW1iZXI7XG4gICAgZGVidWdTREY/OiBib29sZWFuO1xufTtcblxuZGVjbGFyZSBnbG9iYWwge1xuICAgIGludGVyZmFjZSBIVE1MRWxlbWVudFRhZ05hbWVNYXAge1xuICAgICAgICAnbmd0cy10ZXh0JzogTmd0c1RleHRTdGF0ZSAmIE5ndE1lc2g7XG4gICAgfVxufVxuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ25ndHMtdGV4dCcsXG4gICAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgICB0ZW1wbGF0ZTogYFxuICAgICAgICA8bmd0LXByaW1pdGl2ZVxuICAgICAgICAgICAgbmd0Q29tcG91bmRcbiAgICAgICAgICAgICphcmdzPVwiW3Ryb2lrYVRleHRdXCJcbiAgICAgICAgICAgIFtyZWZdPVwidGV4dFJlZlwiXG4gICAgICAgICAgICBbdGV4dF09XCJzdGF0ZSgpLnRleHRcIlxuICAgICAgICAgICAgW2FuY2hvclhdPVwic3RhdGUoKS5hbmNob3JYXCJcbiAgICAgICAgICAgIFthbmNob3JZXT1cInN0YXRlKCkuYW5jaG9yWVwiXG4gICAgICAgICAgICBbZm9udF09XCJzdGF0ZSgpLmZvbnRcIlxuICAgICAgICAgICAgW2ZvbnRTaXplXT1cInN0YXRlKCkuZm9udFNpemVcIlxuICAgICAgICAgICAgW3NkZkdseXBoU2l6ZV09XCJzdGF0ZSgpLnNkZkdseXBoU2l6ZVwiXG4gICAgICAgICAgICBbY2hhcmFjdGVyc109XCJzdGF0ZSgpLmNoYXJhY3RlcnNcIlxuICAgICAgICAgICAgW2NvbG9yXT1cInN0YXRlKCkuY29sb3JcIlxuICAgICAgICAgICAgW21heFdpZHRoXT1cInN0YXRlKCkubWF4V2lkdGhcIlxuICAgICAgICAgICAgW2xpbmVIZWlnaHRdPVwic3RhdGUoKS5saW5lSGVpZ2h0XCJcbiAgICAgICAgICAgIFtsZXR0ZXJTcGFjaW5nXT1cInN0YXRlKCkubGV0dGVyU3BhY2luZ1wiXG4gICAgICAgICAgICBbdGV4dEFsaWduXT1cInN0YXRlKCkudGV4dEFsaWduXCJcbiAgICAgICAgICAgIFtjbGlwUmVjdF09XCJzdGF0ZSgpLmNsaXBSZWN0XCJcbiAgICAgICAgICAgIFtkZXB0aE9mZnNldF09XCJzdGF0ZSgpLmRlcHRoT2Zmc2V0XCJcbiAgICAgICAgICAgIFtkaXJlY3Rpb25dPVwic3RhdGUoKS5kaXJlY3Rpb25cIlxuICAgICAgICAgICAgW292ZXJmbG93V3JhcF09XCJzdGF0ZSgpLm92ZXJmbG93V3JhcFwiXG4gICAgICAgICAgICBbd2hpdGVTcGFjZV09XCJzdGF0ZSgpLndoaXRlU3BhY2VcIlxuICAgICAgICAgICAgW291dGxpbmVXaWR0aF09XCJzdGF0ZSgpLm91dGxpbmVXaWR0aFwiXG4gICAgICAgICAgICBbb3V0bGluZU9mZnNldFhdPVwic3RhdGUoKS5vdXRsaW5lT2Zmc2V0WFwiXG4gICAgICAgICAgICBbb3V0bGluZU9mZnNldFldPVwic3RhdGUoKS5vdXRsaW5lT2Zmc2V0WVwiXG4gICAgICAgICAgICBbb3V0bGluZUJsdXJdPVwic3RhdGUoKS5vdXRsaW5lQmx1clwiXG4gICAgICAgICAgICBbb3V0bGluZUNvbG9yXT1cInN0YXRlKCkub3V0bGluZUNvbG9yXCJcbiAgICAgICAgICAgIFtvdXRsaW5lT3BhY2l0eV09XCJzdGF0ZSgpLm91dGxpbmVPcGFjaXR5XCJcbiAgICAgICAgICAgIFtzdHJva2VXaWR0aF09XCJzdGF0ZSgpLnN0cm9rZVdpZHRoXCJcbiAgICAgICAgICAgIFtzdHJva2VDb2xvcl09XCJzdGF0ZSgpLnN0cm9rZUNvbG9yXCJcbiAgICAgICAgICAgIFtzdHJva2VPcGFjaXR5XT1cInN0YXRlKCkuc3Ryb2tlT3BhY2l0eVwiXG4gICAgICAgICAgICBbZmlsbE9wYWNpdHldPVwic3RhdGUoKS5maWxsT3BhY2l0eVwiXG4gICAgICAgICAgICBbZGVidWdTREZdPVwic3RhdGUoKS5kZWJ1Z1NERlwiXG4gICAgICAgID5cbiAgICAgICAgICAgIDxuZy1jb250ZW50IC8+XG4gICAgICAgIDwvbmd0LXByaW1pdGl2ZT5cbiAgICBgLFxuICAgIGltcG9ydHM6IFtOZ3RBcmdzXSxcbiAgICBzY2hlbWFzOiBbQ1VTVE9NX0VMRU1FTlRTX1NDSEVNQV0sXG59KVxuZXhwb3J0IGNsYXNzIE5ndHNUZXh0IGV4dGVuZHMgTmd0U2lnbmFsU3RvcmU8Tmd0c1RleHRTdGF0ZT4ge1xuICAgIEBJbnB1dCgpIHRleHRSZWYgPSBpbmplY3ROZ3RSZWY8VGV4dD4oKTtcblxuICAgIEBJbnB1dCh7IHJlcXVpcmVkOiB0cnVlIH0pIHNldCB0ZXh0KHRleHQ6IHN0cmluZykge1xuICAgICAgICB0aGlzLnNldCh7IHRleHQgfSk7XG4gICAgfVxuXG4gICAgQElucHV0KCkgc2V0IGZvbnQoZm9udDogc3RyaW5nKSB7XG4gICAgICAgIHRoaXMuc2V0KHsgZm9udCB9KTtcbiAgICB9XG5cbiAgICBASW5wdXQoKSBzZXQgZm9udFNpemUoZm9udFNpemU6IG51bWJlcikge1xuICAgICAgICB0aGlzLnNldCh7IGZvbnRTaXplIH0pO1xuICAgIH1cblxuICAgIEBJbnB1dCgpIHNldCBhbmNob3JYKGFuY2hvclg6IG51bWJlciB8ICdsZWZ0JyB8ICdjZW50ZXInIHwgJ3JpZ2h0Jykge1xuICAgICAgICB0aGlzLnNldCh7IGFuY2hvclggfSk7XG4gICAgfVxuXG4gICAgQElucHV0KCkgc2V0IGFuY2hvclkoYW5jaG9yWTogbnVtYmVyIHwgJ3RvcCcgfCAndG9wLWJhc2VsaW5lJyB8ICdtaWRkbGUnIHwgJ2JvdHRvbS1iYXNlbGluZScgfCAnYm90dG9tJykge1xuICAgICAgICB0aGlzLnNldCh7IGFuY2hvclkgfSk7XG4gICAgfVxuXG4gICAgQElucHV0KCkgc2V0IHNkZkdseXBoU2l6ZShzZGZHbHlwaFNpemU6IG51bWJlcikge1xuICAgICAgICB0aGlzLnNldCh7IHNkZkdseXBoU2l6ZSB9KTtcbiAgICB9XG5cbiAgICBASW5wdXQoKSBzZXQgY2hhcmFjdGVycyhjaGFyYWN0ZXJzOiBzdHJpbmcpIHtcbiAgICAgICAgdGhpcy5zZXQoeyBjaGFyYWN0ZXJzIH0pO1xuICAgIH1cblxuICAgIEBJbnB1dCgpIHNldCBjb2xvcihjb2xvcjogVEhSRUUuQ29sb3JSZXByZXNlbnRhdGlvbikge1xuICAgICAgICB0aGlzLnNldCh7IGNvbG9yIH0pO1xuICAgIH1cblxuICAgIEBJbnB1dCgpIHNldCBtYXhXaWR0aChtYXhXaWR0aDogbnVtYmVyKSB7XG4gICAgICAgIHRoaXMuc2V0KHsgbWF4V2lkdGggfSk7XG4gICAgfVxuXG4gICAgQElucHV0KCkgc2V0IGxpbmVIZWlnaHQobGluZUhlaWdodDogbnVtYmVyKSB7XG4gICAgICAgIHRoaXMuc2V0KHsgbGluZUhlaWdodCB9KTtcbiAgICB9XG5cbiAgICBASW5wdXQoKSBzZXQgbGV0dGVyU3BhY2luZyhsZXR0ZXJTcGFjaW5nOiBudW1iZXIpIHtcbiAgICAgICAgdGhpcy5zZXQoeyBsZXR0ZXJTcGFjaW5nIH0pO1xuICAgIH1cblxuICAgIEBJbnB1dCgpIHNldCB0ZXh0QWxpZ24odGV4dEFsaWduOiAnbGVmdCcgfCAncmlnaHQnIHwgJ2NlbnRlcicgfCAnanVzdGlmeScpIHtcbiAgICAgICAgdGhpcy5zZXQoeyB0ZXh0QWxpZ24gfSk7XG4gICAgfVxuXG4gICAgQElucHV0KCkgc2V0IGNsaXBSZWN0KGNsaXBSZWN0OiBbbnVtYmVyLCBudW1iZXIsIG51bWJlciwgbnVtYmVyXSkge1xuICAgICAgICB0aGlzLnNldCh7IGNsaXBSZWN0IH0pO1xuICAgIH1cblxuICAgIEBJbnB1dCgpIHNldCBkZXB0aE9mZnNldChkZXB0aE9mZnNldDogbnVtYmVyKSB7XG4gICAgICAgIHRoaXMuc2V0KHsgZGVwdGhPZmZzZXQgfSk7XG4gICAgfVxuXG4gICAgQElucHV0KCkgc2V0IGRpcmVjdGlvbihkaXJlY3Rpb246ICdhdXRvJyB8ICdsdHInIHwgJ3J0bCcpIHtcbiAgICAgICAgdGhpcy5zZXQoeyBkaXJlY3Rpb24gfSk7XG4gICAgfVxuXG4gICAgQElucHV0KCkgc2V0IG92ZXJmbG93V3JhcChvdmVyZmxvd1dyYXA6ICdub3JtYWwnIHwgJ2JyZWFrLXdvcmQnKSB7XG4gICAgICAgIHRoaXMuc2V0KHsgb3ZlcmZsb3dXcmFwIH0pO1xuICAgIH1cblxuICAgIEBJbnB1dCgpIHNldCB3aGl0ZVNwYWNlKHdoaXRlU3BhY2U6ICdub3JtYWwnIHwgJ292ZXJmbG93V3JhcCcgfCAnbm93cmFwJykge1xuICAgICAgICB0aGlzLnNldCh7IHdoaXRlU3BhY2UgfSk7XG4gICAgfVxuXG4gICAgQElucHV0KCkgc2V0IG91dGxpbmVXaWR0aChvdXRsaW5lV2lkdGg6IG51bWJlciB8IHN0cmluZykge1xuICAgICAgICB0aGlzLnNldCh7IG91dGxpbmVXaWR0aCB9KTtcbiAgICB9XG5cbiAgICBASW5wdXQoKSBzZXQgb3V0bGluZU9mZnNldFgob3V0bGluZU9mZnNldFg6IG51bWJlciB8IHN0cmluZykge1xuICAgICAgICB0aGlzLnNldCh7IG91dGxpbmVPZmZzZXRYIH0pO1xuICAgIH1cblxuICAgIEBJbnB1dCgpIHNldCBvdXRsaW5lT2Zmc2V0WShvdXRsaW5lT2Zmc2V0WTogbnVtYmVyIHwgc3RyaW5nKSB7XG4gICAgICAgIHRoaXMuc2V0KHsgb3V0bGluZU9mZnNldFkgfSk7XG4gICAgfVxuXG4gICAgQElucHV0KCkgc2V0IG91dGxpbmVCbHVyKG91dGxpbmVCbHVyOiBudW1iZXIgfCBzdHJpbmcpIHtcbiAgICAgICAgdGhpcy5zZXQoeyBvdXRsaW5lQmx1ciB9KTtcbiAgICB9XG5cbiAgICBASW5wdXQoKSBzZXQgb3V0bGluZUNvbG9yKG91dGxpbmVDb2xvcjogVEhSRUUuQ29sb3JSZXByZXNlbnRhdGlvbikge1xuICAgICAgICB0aGlzLnNldCh7IG91dGxpbmVDb2xvciB9KTtcbiAgICB9XG5cbiAgICBASW5wdXQoKSBzZXQgb3V0bGluZU9wYWNpdHkob3V0bGluZU9wYWNpdHk6IG51bWJlcikge1xuICAgICAgICB0aGlzLnNldCh7IG91dGxpbmVPcGFjaXR5IH0pO1xuICAgIH1cblxuICAgIEBJbnB1dCgpIHNldCBzdHJva2VXaWR0aChzdHJva2VXaWR0aDogbnVtYmVyIHwgc3RyaW5nKSB7XG4gICAgICAgIHRoaXMuc2V0KHsgc3Ryb2tlV2lkdGggfSk7XG4gICAgfVxuXG4gICAgQElucHV0KCkgc2V0IHN0cm9rZUNvbG9yKHN0cm9rZUNvbG9yOiBUSFJFRS5Db2xvclJlcHJlc2VudGF0aW9uKSB7XG4gICAgICAgIHRoaXMuc2V0KHsgc3Ryb2tlQ29sb3IgfSk7XG4gICAgfVxuXG4gICAgQElucHV0KCkgc2V0IHN0cm9rZU9wYWNpdHkoc3Ryb2tlT3BhY2l0eTogbnVtYmVyKSB7XG4gICAgICAgIHRoaXMuc2V0KHsgc3Ryb2tlT3BhY2l0eSB9KTtcbiAgICB9XG5cbiAgICBASW5wdXQoKSBzZXQgZmlsbE9wYWNpdHkoZmlsbE9wYWNpdHk6IG51bWJlcikge1xuICAgICAgICB0aGlzLnNldCh7IGZpbGxPcGFjaXR5IH0pO1xuICAgIH1cblxuICAgIEBJbnB1dCgpIHNldCBkZWJ1Z1NERihkZWJ1Z1NERjogYm9vbGVhbikge1xuICAgICAgICB0aGlzLnNldCh7IGRlYnVnU0RGIH0pO1xuICAgIH1cblxuICAgIEBPdXRwdXQoKSBzeW5jID0gbmV3IEV2ZW50RW1pdHRlcjxUZXh0PigpO1xuXG4gICAgcmVhZG9ubHkgdHJvaWthVGV4dCA9IG5ldyBUZXh0KCk7XG5cbiAgICByZWFkb25seSAjc3RvcmUgPSBpbmplY3QoTmd0U3RvcmUpO1xuXG4gICAgcmVhZG9ubHkgc3RhdGUgPSB0aGlzLnNlbGVjdCgpO1xuXG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHN1cGVyKHsgZm9udFNpemU6IDEsIHNkZkdseXBoU2l6ZTogNjQsIGFuY2hvclg6ICdjZW50ZXInLCBhbmNob3JZOiAnbWlkZGxlJyB9KTtcbiAgICAgICAgaW5qZWN0KERlc3Ryb3lSZWYpLm9uRGVzdHJveSgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLnRyb2lrYVRleHQuZGlzcG9zZSgpO1xuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy4jcHJlbG9hZEZvbnQoKTtcbiAgICAgICAgdGhpcy4jc3luY1RleHQoKTtcbiAgICB9XG5cbiAgICAjcHJlbG9hZEZvbnQoKSB7XG4gICAgICAgIGNvbnN0IGZvbnQgPSB0aGlzLnNlbGVjdCgnZm9udCcpO1xuICAgICAgICBjb25zdCBjaGFyYWN0ZXJzID0gdGhpcy5zZWxlY3QoJ2NoYXJhY3RlcnMnKTtcbiAgICAgICAgY29uc3QgdHJpZ2dlciA9IGNvbXB1dGVkKCgpID0+ICh7IGZvbnQ6IGZvbnQoKSwgY2hhcmFjdGVyczogY2hhcmFjdGVycygpIH0pKTtcblxuICAgICAgICBlZmZlY3QoKCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgeyBmb250LCBjaGFyYWN0ZXJzIH0gPSB0cmlnZ2VyKCk7XG4gICAgICAgICAgICBjb25zdCBpbnZhbGlkYXRlID0gdGhpcy4jc3RvcmUuZ2V0KCdpbnZhbGlkYXRlJyk7XG4gICAgICAgICAgICBwcmVsb2FkRm9udCh7IGZvbnQsIGNoYXJhY3RlcnMgfSwgKCkgPT4gaW52YWxpZGF0ZSgpKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgI3N5bmNUZXh0KCkge1xuICAgICAgICBjb25zdCBzdGF0ZSA9IHRoaXMuc2VsZWN0KCk7XG4gICAgICAgIGVmZmVjdCgoKSA9PiB7XG4gICAgICAgICAgICBzdGF0ZSgpO1xuICAgICAgICAgICAgY29uc3QgaW52YWxpZGF0ZSA9IHRoaXMuI3N0b3JlLmdldCgnaW52YWxpZGF0ZScpO1xuICAgICAgICAgICAgdGhpcy50cm9pa2FUZXh0LnN5bmMoKCkgPT4ge1xuICAgICAgICAgICAgICAgIGludmFsaWRhdGUoKTtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5zeW5jLm9ic2VydmVkKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc3luYy5lbWl0KHRoaXMudHJvaWthVGV4dCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgIH1cbn1cbiJdfQ==
273
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGV4dC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvc29iYS9hYnN0cmFjdGlvbnMvc3JjL3RleHQvdGV4dC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0gsc0JBQXNCLEVBQ3RCLFNBQVMsRUFDVCxVQUFVLEVBQ1YsWUFBWSxFQUNaLEtBQUssRUFDTCxNQUFNLEVBQ04sUUFBUSxFQUNSLE1BQU0sRUFDTixNQUFNLEdBQ1QsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLE9BQU8sRUFBRSxjQUFjLEVBQUUsUUFBUSxFQUFFLFlBQVksRUFBZ0IsTUFBTSxlQUFlLENBQUM7QUFFOUYsc0RBQXNEO0FBQ3RELE9BQU8sRUFBRSxJQUFJLEVBQUUsV0FBVyxFQUFFLE1BQU0sbUJBQW1CLENBQUM7O0FBd0N0RCxNQTJDYSxRQUFTLFNBQVEsY0FBNkI7SUFHdkQsSUFBK0IsSUFBSSxDQUFDLElBQVk7UUFDNUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7SUFDdkIsQ0FBQztJQUVELElBQWEsSUFBSSxDQUFDLElBQVk7UUFDMUIsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7SUFDdkIsQ0FBQztJQUVELElBQWEsUUFBUSxDQUFDLFFBQWdCO1FBQ2xDLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxRQUFRLEVBQUUsQ0FBQyxDQUFDO0lBQzNCLENBQUM7SUFFRCxJQUFhLE9BQU8sQ0FBQyxPQUE2QztRQUM5RCxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsT0FBTyxFQUFFLENBQUMsQ0FBQztJQUMxQixDQUFDO0lBRUQsSUFBYSxPQUFPLENBQUMsT0FBa0Y7UUFDbkcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLE9BQU8sRUFBRSxDQUFDLENBQUM7SUFDMUIsQ0FBQztJQUVELElBQWEsWUFBWSxDQUFDLFlBQW9CO1FB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c0IsQ0FBQztpQkFDcEM7MEVBRVksT0FBTztzQkFBZixLQUFLO2dCQUV5QixJQUFJO3NCQUFsQyxLQUFLO3VCQUFDLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRTtnQkFJWixJQUFJO3NCQUFoQixLQUFLO2dCQUlPLFFBQVE7c0JBQXBCLEtBQUs7Z0JBSU8sT0FBTztzQkFBbkIsS0FBSztnQkFJTyxPQUFPO3NCQUFuQixLQUFLO2dCQUlPLFlBQVk7c0JBQXhCLEtBQUs7Z0JBSU8sVUFBVTtzQkFBdEIsS0FBSztnQkFJTyxLQUFLO3NCQUFqQixLQUFLO2dCQUlPLFFBQVE7c0JBQXBCLEtBQUs7Z0JBSU8sVUFBVTtzQkFBdEIsS0FBSztnQkFJTyxhQUFhO3NCQUF6QixLQUFLO2dCQUlPLFNBQVM7c0JBQXJCLEtBQUs7Z0JBSU8sUUFBUTtzQkFBcEIsS0FBSztnQkFJTyxXQUFXO3NCQUF2QixLQUFLO2dCQUlPLFNBQVM7c0JBQXJCLEtBQUs7Z0JBSU8sWUFBWTtzQkFBeEIsS0FBSztnQkFJTyxVQUFVO3NCQUF0QixLQUFLO2dCQUlPLFlBQVk7c0JBQXhCLEtBQUs7Z0JBSU8sY0FBYztzQkFBMUIsS0FBSztnQkFJTyxjQUFjO3NCQUExQixLQUFLO2dCQUlPLFdBQVc7c0JBQXZCLEtBQUs7Z0JBSU8sWUFBWTtzQkFBeEIsS0FBSztnQkFJTyxjQUFjO3NCQUExQixLQUFLO2dCQUlPLFdBQVc7c0JBQXZCLEtBQUs7Z0JBSU8sV0FBVztzQkFBdkIsS0FBSztnQkFJTyxhQUFhO3NCQUF6QixLQUFLO2dCQUlPLFdBQVc7c0JBQXZCLEtBQUs7Z0JBSU8sUUFBUTtzQkFBcEIsS0FBSztnQkFJSSxJQUFJO3NCQUFiLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICAgIENVU1RPTV9FTEVNRU5UU19TQ0hFTUEsXG4gICAgQ29tcG9uZW50LFxuICAgIERlc3Ryb3lSZWYsXG4gICAgRXZlbnRFbWl0dGVyLFxuICAgIElucHV0LFxuICAgIE91dHB1dCxcbiAgICBjb21wdXRlZCxcbiAgICBlZmZlY3QsXG4gICAgaW5qZWN0LFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE5ndEFyZ3MsIE5ndFNpZ25hbFN0b3JlLCBOZ3RTdG9yZSwgaW5qZWN0Tmd0UmVmLCB0eXBlIE5ndE1lc2ggfSBmcm9tICdhbmd1bGFyLXRocmVlJztcblxuLy8gQHRzLWV4cGVjdC1lcnJvcjogbm8gdHlwZSBkZWYgZm9yIHRyb2lrYS10aHJlZS10ZXh0XG5pbXBvcnQgeyBUZXh0LCBwcmVsb2FkRm9udCB9IGZyb20gJ3Ryb2lrYS10aHJlZS10ZXh0JztcblxuZXhwb3J0IHR5cGUgTmd0c1RleHRTdGF0ZSA9IHtcbiAgICB0ZXh0OiBzdHJpbmc7XG4gICAgLyoqIEZvbnQgc2l6ZSwgZGVmYXVsdDogMSAqL1xuICAgIGZvbnRTaXplOiBudW1iZXI7XG4gICAgYW5jaG9yWDogbnVtYmVyIHwgJ2xlZnQnIHwgJ2NlbnRlcicgfCAncmlnaHQnO1xuICAgIGFuY2hvclk6IG51bWJlciB8ICd0b3AnIHwgJ3RvcC1iYXNlbGluZScgfCAnbWlkZGxlJyB8ICdib3R0b20tYmFzZWxpbmUnIHwgJ2JvdHRvbSc7XG4gICAgc2RmR2x5cGhTaXplOiBudW1iZXI7XG4gICAgZm9udD86IHN0cmluZztcbiAgICBjaGFyYWN0ZXJzPzogc3RyaW5nO1xuICAgIGNvbG9yPzogVEhSRUUuQ29sb3JSZXByZXNlbnRhdGlvbjtcbiAgICBtYXhXaWR0aD86IG51bWJlcjtcbiAgICBsaW5lSGVpZ2h0PzogbnVtYmVyO1xuICAgIGxldHRlclNwYWNpbmc/OiBudW1iZXI7XG4gICAgdGV4dEFsaWduPzogJ2xlZnQnIHwgJ3JpZ2h0JyB8ICdjZW50ZXInIHwgJ2p1c3RpZnknO1xuICAgIGNsaXBSZWN0PzogW251bWJlciwgbnVtYmVyLCBudW1iZXIsIG51bWJlcl07XG4gICAgZGVwdGhPZmZzZXQ/OiBudW1iZXI7XG4gICAgZGlyZWN0aW9uPzogJ2F1dG8nIHwgJ2x0cicgfCAncnRsJztcbiAgICBvdmVyZmxvd1dyYXA/OiAnbm9ybWFsJyB8ICdicmVhay13b3JkJztcbiAgICB3aGl0ZVNwYWNlPzogJ25vcm1hbCcgfCAnb3ZlcmZsb3dXcmFwJyB8ICdub3dyYXAnO1xuICAgIG91dGxpbmVXaWR0aD86IG51bWJlciB8IHN0cmluZztcbiAgICBvdXRsaW5lT2Zmc2V0WD86IG51bWJlciB8IHN0cmluZztcbiAgICBvdXRsaW5lT2Zmc2V0WT86IG51bWJlciB8IHN0cmluZztcbiAgICBvdXRsaW5lQmx1cj86IG51bWJlciB8IHN0cmluZztcbiAgICBvdXRsaW5lQ29sb3I/OiBUSFJFRS5Db2xvclJlcHJlc2VudGF0aW9uO1xuICAgIG91dGxpbmVPcGFjaXR5PzogbnVtYmVyO1xuICAgIHN0cm9rZVdpZHRoPzogbnVtYmVyIHwgc3RyaW5nO1xuICAgIHN0cm9rZUNvbG9yPzogVEhSRUUuQ29sb3JSZXByZXNlbnRhdGlvbjtcbiAgICBzdHJva2VPcGFjaXR5PzogbnVtYmVyO1xuICAgIGZpbGxPcGFjaXR5PzogbnVtYmVyO1xuICAgIGRlYnVnU0RGPzogYm9vbGVhbjtcbn07XG5cbmRlY2xhcmUgZ2xvYmFsIHtcbiAgICBpbnRlcmZhY2UgSFRNTEVsZW1lbnRUYWdOYW1lTWFwIHtcbiAgICAgICAgJ25ndHMtdGV4dCc6IE5ndHNUZXh0U3RhdGUgJiBOZ3RNZXNoO1xuICAgIH1cbn1cblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICduZ3RzLXRleHQnLFxuICAgIHN0YW5kYWxvbmU6IHRydWUsXG4gICAgdGVtcGxhdGU6IGBcbiAgICAgICAgPG5ndC1wcmltaXRpdmVcbiAgICAgICAgICAgIG5ndENvbXBvdW5kXG4gICAgICAgICAgICAqYXJncz1cIlt0cm9pa2FUZXh0XVwiXG4gICAgICAgICAgICBbcmVmXT1cInRleHRSZWZcIlxuICAgICAgICAgICAgW3RleHRdPVwic3RhdGUoKS50ZXh0XCJcbiAgICAgICAgICAgIFthbmNob3JYXT1cInN0YXRlKCkuYW5jaG9yWFwiXG4gICAgICAgICAgICBbYW5jaG9yWV09XCJzdGF0ZSgpLmFuY2hvcllcIlxuICAgICAgICAgICAgW2ZvbnRdPVwic3RhdGUoKS5mb250XCJcbiAgICAgICAgICAgIFtmb250U2l6ZV09XCJzdGF0ZSgpLmZvbnRTaXplXCJcbiAgICAgICAgICAgIFtzZGZHbHlwaFNpemVdPVwic3RhdGUoKS5zZGZHbHlwaFNpemVcIlxuICAgICAgICAgICAgW2NoYXJhY3RlcnNdPVwic3RhdGUoKS5jaGFyYWN0ZXJzXCJcbiAgICAgICAgICAgIFtjb2xvcl09XCJzdGF0ZSgpLmNvbG9yXCJcbiAgICAgICAgICAgIFttYXhXaWR0aF09XCJzdGF0ZSgpLm1heFdpZHRoXCJcbiAgICAgICAgICAgIFtsaW5lSGVpZ2h0XT1cInN0YXRlKCkubGluZUhlaWdodFwiXG4gICAgICAgICAgICBbbGV0dGVyU3BhY2luZ109XCJzdGF0ZSgpLmxldHRlclNwYWNpbmdcIlxuICAgICAgICAgICAgW3RleHRBbGlnbl09XCJzdGF0ZSgpLnRleHRBbGlnblwiXG4gICAgICAgICAgICBbY2xpcFJlY3RdPVwic3RhdGUoKS5jbGlwUmVjdFwiXG4gICAgICAgICAgICBbZGVwdGhPZmZzZXRdPVwic3RhdGUoKS5kZXB0aE9mZnNldFwiXG4gICAgICAgICAgICBbZGlyZWN0aW9uXT1cInN0YXRlKCkuZGlyZWN0aW9uXCJcbiAgICAgICAgICAgIFtvdmVyZmxvd1dyYXBdPVwic3RhdGUoKS5vdmVyZmxvd1dyYXBcIlxuICAgICAgICAgICAgW3doaXRlU3BhY2VdPVwic3RhdGUoKS53aGl0ZVNwYWNlXCJcbiAgICAgICAgICAgIFtvdXRsaW5lV2lkdGhdPVwic3RhdGUoKS5vdXRsaW5lV2lkdGhcIlxuICAgICAgICAgICAgW291dGxpbmVPZmZzZXRYXT1cInN0YXRlKCkub3V0bGluZU9mZnNldFhcIlxuICAgICAgICAgICAgW291dGxpbmVPZmZzZXRZXT1cInN0YXRlKCkub3V0bGluZU9mZnNldFlcIlxuICAgICAgICAgICAgW291dGxpbmVCbHVyXT1cInN0YXRlKCkub3V0bGluZUJsdXJcIlxuICAgICAgICAgICAgW291dGxpbmVDb2xvcl09XCJzdGF0ZSgpLm91dGxpbmVDb2xvclwiXG4gICAgICAgICAgICBbb3V0bGluZU9wYWNpdHldPVwic3RhdGUoKS5vdXRsaW5lT3BhY2l0eVwiXG4gICAgICAgICAgICBbc3Ryb2tlV2lkdGhdPVwic3RhdGUoKS5zdHJva2VXaWR0aFwiXG4gICAgICAgICAgICBbc3Ryb2tlQ29sb3JdPVwic3RhdGUoKS5zdHJva2VDb2xvclwiXG4gICAgICAgICAgICBbc3Ryb2tlT3BhY2l0eV09XCJzdGF0ZSgpLnN0cm9rZU9wYWNpdHlcIlxuICAgICAgICAgICAgW2ZpbGxPcGFjaXR5XT1cInN0YXRlKCkuZmlsbE9wYWNpdHlcIlxuICAgICAgICAgICAgW2RlYnVnU0RGXT1cInN0YXRlKCkuZGVidWdTREZcIlxuICAgICAgICA+XG4gICAgICAgICAgICA8bmctY29udGVudCAvPlxuICAgICAgICA8L25ndC1wcmltaXRpdmU+XG4gICAgYCxcbiAgICBpbXBvcnRzOiBbTmd0QXJnc10sXG4gICAgc2NoZW1hczogW0NVU1RPTV9FTEVNRU5UU19TQ0hFTUFdLFxufSlcbmV4cG9ydCBjbGFzcyBOZ3RzVGV4dCBleHRlbmRzIE5ndFNpZ25hbFN0b3JlPE5ndHNUZXh0U3RhdGU+IHtcbiAgICBASW5wdXQoKSB0ZXh0UmVmID0gaW5qZWN0Tmd0UmVmPFRleHQ+KCk7XG5cbiAgICBASW5wdXQoeyByZXF1aXJlZDogdHJ1ZSB9KSBzZXQgdGV4dCh0ZXh0OiBzdHJpbmcpIHtcbiAgICAgICAgdGhpcy5zZXQoeyB0ZXh0IH0pO1xuICAgIH1cblxuICAgIEBJbnB1dCgpIHNldCBmb250KGZvbnQ6IHN0cmluZykge1xuICAgICAgICB0aGlzLnNldCh7IGZvbnQgfSk7XG4gICAgfVxuXG4gICAgQElucHV0KCkgc2V0IGZvbnRTaXplKGZvbnRTaXplOiBudW1iZXIpIHtcbiAgICAgICAgdGhpcy5zZXQoeyBmb250U2l6ZSB9KTtcbiAgICB9XG5cbiAgICBASW5wdXQoKSBzZXQgYW5jaG9yWChhbmNob3JYOiBudW1iZXIgfCAnbGVmdCcgfCAnY2VudGVyJyB8ICdyaWdodCcpIHtcbiAgICAgICAgdGhpcy5zZXQoeyBhbmNob3JYIH0pO1xuICAgIH1cblxuICAgIEBJbnB1dCgpIHNldCBhbmNob3JZKGFuY2hvclk6IG51bWJlciB8ICd0b3AnIHwgJ3RvcC1iYXNlbGluZScgfCAnbWlkZGxlJyB8ICdib3R0b20tYmFzZWxpbmUnIHwgJ2JvdHRvbScpIHtcbiAgICAgICAgdGhpcy5zZXQoeyBhbmNob3JZIH0pO1xuICAgIH1cblxuICAgIEBJbnB1dCgpIHNldCBzZGZHbHlwaFNpemUoc2RmR2x5cGhTaXplOiBudW1iZXIpIHtcbiAgICAgICAgdGhpcy5zZXQoeyBzZGZHbHlwaFNpemUgfSk7XG4gICAgfVxuXG4gICAgQElucHV0KCkgc2V0IGNoYXJhY3RlcnMoY2hhcmFjdGVyczogc3RyaW5nKSB7XG4gICAgICAgIHRoaXMuc2V0KHsgY2hhcmFjdGVycyB9KTtcbiAgICB9XG5cbiAgICBASW5wdXQoKSBzZXQgY29sb3IoY29sb3I6IFRIUkVFLkNvbG9yUmVwcmVzZW50YXRpb24pIHtcbiAgICAgICAgdGhpcy5zZXQoeyBjb2xvciB9KTtcbiAgICB9XG5cbiAgICBASW5wdXQoKSBzZXQgbWF4V2lkdGgobWF4V2lkdGg6IG51bWJlcikge1xuICAgICAgICB0aGlzLnNldCh7IG1heFdpZHRoIH0pO1xuICAgIH1cblxuICAgIEBJbnB1dCgpIHNldCBsaW5lSGVpZ2h0KGxpbmVIZWlnaHQ6IG51bWJlcikge1xuICAgICAgICB0aGlzLnNldCh7IGxpbmVIZWlnaHQgfSk7XG4gICAgfVxuXG4gICAgQElucHV0KCkgc2V0IGxldHRlclNwYWNpbmcobGV0dGVyU3BhY2luZzogbnVtYmVyKSB7XG4gICAgICAgIHRoaXMuc2V0KHsgbGV0dGVyU3BhY2luZyB9KTtcbiAgICB9XG5cbiAgICBASW5wdXQoKSBzZXQgdGV4dEFsaWduKHRleHRBbGlnbjogJ2xlZnQnIHwgJ3JpZ2h0JyB8ICdjZW50ZXInIHwgJ2p1c3RpZnknKSB7XG4gICAgICAgIHRoaXMuc2V0KHsgdGV4dEFsaWduIH0pO1xuICAgIH1cblxuICAgIEBJbnB1dCgpIHNldCBjbGlwUmVjdChjbGlwUmVjdDogW251bWJlciwgbnVtYmVyLCBudW1iZXIsIG51bWJlcl0pIHtcbiAgICAgICAgdGhpcy5zZXQoeyBjbGlwUmVjdCB9KTtcbiAgICB9XG5cbiAgICBASW5wdXQoKSBzZXQgZGVwdGhPZmZzZXQoZGVwdGhPZmZzZXQ6IG51bWJlcikge1xuICAgICAgICB0aGlzLnNldCh7IGRlcHRoT2Zmc2V0IH0pO1xuICAgIH1cblxuICAgIEBJbnB1dCgpIHNldCBkaXJlY3Rpb24oZGlyZWN0aW9uOiAnYXV0bycgfCAnbHRyJyB8ICdydGwnKSB7XG4gICAgICAgIHRoaXMuc2V0KHsgZGlyZWN0aW9uIH0pO1xuICAgIH1cblxuICAgIEBJbnB1dCgpIHNldCBvdmVyZmxvd1dyYXAob3ZlcmZsb3dXcmFwOiAnbm9ybWFsJyB8ICdicmVhay13b3JkJykge1xuICAgICAgICB0aGlzLnNldCh7IG92ZXJmbG93V3JhcCB9KTtcbiAgICB9XG5cbiAgICBASW5wdXQoKSBzZXQgd2hpdGVTcGFjZSh3aGl0ZVNwYWNlOiAnbm9ybWFsJyB8ICdvdmVyZmxvd1dyYXAnIHwgJ25vd3JhcCcpIHtcbiAgICAgICAgdGhpcy5zZXQoeyB3aGl0ZVNwYWNlIH0pO1xuICAgIH1cblxuICAgIEBJbnB1dCgpIHNldCBvdXRsaW5lV2lkdGgob3V0bGluZVdpZHRoOiBudW1iZXIgfCBzdHJpbmcpIHtcbiAgICAgICAgdGhpcy5zZXQoeyBvdXRsaW5lV2lkdGggfSk7XG4gICAgfVxuXG4gICAgQElucHV0KCkgc2V0IG91dGxpbmVPZmZzZXRYKG91dGxpbmVPZmZzZXRYOiBudW1iZXIgfCBzdHJpbmcpIHtcbiAgICAgICAgdGhpcy5zZXQoeyBvdXRsaW5lT2Zmc2V0WCB9KTtcbiAgICB9XG5cbiAgICBASW5wdXQoKSBzZXQgb3V0bGluZU9mZnNldFkob3V0bGluZU9mZnNldFk6IG51bWJlciB8IHN0cmluZykge1xuICAgICAgICB0aGlzLnNldCh7IG91dGxpbmVPZmZzZXRZIH0pO1xuICAgIH1cblxuICAgIEBJbnB1dCgpIHNldCBvdXRsaW5lQmx1cihvdXRsaW5lQmx1cjogbnVtYmVyIHwgc3RyaW5nKSB7XG4gICAgICAgIHRoaXMuc2V0KHsgb3V0bGluZUJsdXIgfSk7XG4gICAgfVxuXG4gICAgQElucHV0KCkgc2V0IG91dGxpbmVDb2xvcihvdXRsaW5lQ29sb3I6IFRIUkVFLkNvbG9yUmVwcmVzZW50YXRpb24pIHtcbiAgICAgICAgdGhpcy5zZXQoeyBvdXRsaW5lQ29sb3IgfSk7XG4gICAgfVxuXG4gICAgQElucHV0KCkgc2V0IG91dGxpbmVPcGFjaXR5KG91dGxpbmVPcGFjaXR5OiBudW1iZXIpIHtcbiAgICAgICAgdGhpcy5zZXQoeyBvdXRsaW5lT3BhY2l0eSB9KTtcbiAgICB9XG5cbiAgICBASW5wdXQoKSBzZXQgc3Ryb2tlV2lkdGgoc3Ryb2tlV2lkdGg6IG51bWJlciB8IHN0cmluZykge1xuICAgICAgICB0aGlzLnNldCh7IHN0cm9rZVdpZHRoIH0pO1xuICAgIH1cblxuICAgIEBJbnB1dCgpIHNldCBzdHJva2VDb2xvcihzdHJva2VDb2xvcjogVEhSRUUuQ29sb3JSZXByZXNlbnRhdGlvbikge1xuICAgICAgICB0aGlzLnNldCh7IHN0cm9rZUNvbG9yIH0pO1xuICAgIH1cblxuICAgIEBJbnB1dCgpIHNldCBzdHJva2VPcGFjaXR5KHN0cm9rZU9wYWNpdHk6IG51bWJlcikge1xuICAgICAgICB0aGlzLnNldCh7IHN0cm9rZU9wYWNpdHkgfSk7XG4gICAgfVxuXG4gICAgQElucHV0KCkgc2V0IGZpbGxPcGFjaXR5KGZpbGxPcGFjaXR5OiBudW1iZXIpIHtcbiAgICAgICAgdGhpcy5zZXQoeyBmaWxsT3BhY2l0eSB9KTtcbiAgICB9XG5cbiAgICBASW5wdXQoKSBzZXQgZGVidWdTREYoZGVidWdTREY6IGJvb2xlYW4pIHtcbiAgICAgICAgdGhpcy5zZXQoeyBkZWJ1Z1NERiB9KTtcbiAgICB9XG5cbiAgICBAT3V0cHV0KCkgc3luYyA9IG5ldyBFdmVudEVtaXR0ZXI8VGV4dD4oKTtcblxuICAgIHJlYWRvbmx5IHRyb2lrYVRleHQgPSBuZXcgVGV4dCgpO1xuXG4gICAgcmVhZG9ubHkgI3N0b3JlID0gaW5qZWN0KE5ndFN0b3JlKTtcblxuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBzdXBlcih7IGZvbnRTaXplOiAxLCBzZGZHbHlwaFNpemU6IDY0LCBhbmNob3JYOiAnY2VudGVyJywgYW5jaG9yWTogJ21pZGRsZScgfSk7XG4gICAgICAgIGluamVjdChEZXN0cm95UmVmKS5vbkRlc3Ryb3koKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy50cm9pa2FUZXh0LmRpc3Bvc2UoKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuI3ByZWxvYWRGb250KCk7XG4gICAgICAgIHRoaXMuI3N5bmNUZXh0KCk7XG4gICAgfVxuXG4gICAgI3ByZWxvYWRGb250KCkge1xuICAgICAgICBjb25zdCBmb250ID0gdGhpcy5zZWxlY3QoJ2ZvbnQnKTtcbiAgICAgICAgY29uc3QgY2hhcmFjdGVycyA9IHRoaXMuc2VsZWN0KCdjaGFyYWN0ZXJzJyk7XG4gICAgICAgIGNvbnN0IHRyaWdnZXIgPSBjb21wdXRlZCgoKSA9PiAoeyBmb250OiBmb250KCksIGNoYXJhY3RlcnM6IGNoYXJhY3RlcnMoKSB9KSk7XG5cbiAgICAgICAgZWZmZWN0KCgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHsgZm9udCwgY2hhcmFjdGVycyB9ID0gdHJpZ2dlcigpO1xuICAgICAgICAgICAgY29uc3QgaW52YWxpZGF0ZSA9IHRoaXMuI3N0b3JlLmdldCgnaW52YWxpZGF0ZScpO1xuICAgICAgICAgICAgcHJlbG9hZEZvbnQoeyBmb250LCBjaGFyYWN0ZXJzIH0sICgpID0+IGludmFsaWRhdGUoKSk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgICNzeW5jVGV4dCgpIHtcbiAgICAgICAgZWZmZWN0KCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuc3RhdGUoKTtcbiAgICAgICAgICAgIGNvbnN0IGludmFsaWRhdGUgPSB0aGlzLiNzdG9yZS5nZXQoJ2ludmFsaWRhdGUnKTtcbiAgICAgICAgICAgIHRoaXMudHJvaWthVGV4dC5zeW5jKCgpID0+IHtcbiAgICAgICAgICAgICAgICBpbnZhbGlkYXRlKCk7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuc3luYy5vYnNlcnZlZCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnN5bmMuZW1pdCh0aGlzLnRyb2lrYVRleHQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICB9XG59XG4iXX0=
@@ -2,7 +2,7 @@ import { NgIf } from '@angular/common';
2
2
  import { Component, computed, CUSTOM_ELEMENTS_SCHEMA, effect, inject, Input } from '@angular/core';
3
3
  import { extend, getLocalState, injectBeforeRender, injectNgtRef, NgtSignalStore, NgtStore } from 'angular-three';
4
4
  import { MeshRefractionMaterial } from 'angular-three-soba/shaders';
5
- import { MeshBVH, SAH } from 'three-mesh-bvh';
5
+ import { MeshBVH, MeshBVHUniformStruct, SAH } from 'three-mesh-bvh';
6
6
  import * as i0 from "@angular/core";
7
7
  extend({ MeshRefractionMaterial });
8
8
  const isCubeTexture = (def) => def && def.isCubeTexture;
@@ -94,7 +94,8 @@ class NgtsMeshRefractionMaterial extends NgtSignalStore {
94
94
  return;
95
95
  const geometry = getLocalState(material).parent()?.geometry;
96
96
  if (geometry) {
97
- material.bvh.updateFrom(new MeshBVH(geometry.toNonIndexed(), { lazyGeneration: false, strategy: SAH }));
97
+ material.bvh = new MeshBVHUniformStruct();
98
+ material.bvh.updateFrom(new MeshBVH(geometry.clone().toNonIndexed(), { lazyGeneration: false, strategy: SAH }));
98
99
  }
99
100
  });
100
101
  }
@@ -165,4 +166,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.0", ngImpor
165
166
  }], fastChroma: [{
166
167
  type: Input
167
168
  }] } });
168
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVzaC1yZWZyYWN0aW9uLW1hdGVyaWFsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9zb2JhL21hdGVyaWFscy9zcmMvbWVzaC1yZWZyYWN0aW9uLW1hdGVyaWFsL21lc2gtcmVmcmFjdGlvbi1tYXRlcmlhbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDdkMsT0FBTyxFQUFFLFNBQVMsRUFBRSxRQUFRLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDbkcsT0FBTyxFQUFFLE1BQU0sRUFBRSxhQUFhLEVBQUUsa0JBQWtCLEVBQUUsWUFBWSxFQUFFLGNBQWMsRUFBRSxRQUFRLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDbEgsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDcEUsT0FBTyxFQUFFLE9BQU8sRUFBRSxHQUFHLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQzs7QUFFOUMsTUFBTSxDQUFDLEVBQUUsc0JBQXNCLEVBQUUsQ0FBQyxDQUFDO0FBbUJuQyxNQUFNLGFBQWEsR0FBRyxDQUFDLEdBQXNDLEVBQTRCLEVBQUUsQ0FDdkYsR0FBRyxJQUFLLEdBQXlCLENBQUMsYUFBYSxDQUFDO0FBRXBELE1BeUJhLDBCQUEyQixTQUFRLGNBQStDO0lBRTNGLHNCQUFzQjtJQUN0QixJQUErQixNQUFNLENBQUMsTUFBeUM7UUFDM0UsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLE1BQU0sRUFBRSxDQUFDLENBQUM7SUFDekIsQ0FBQztJQUNELDBFQUEwRTtJQUMxRSxJQUFhLE9BQU8sQ0FBQyxPQUFlO1FBQ2hDLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxPQUFPLEVBQUUsQ0FBQyxDQUFDO0lBQzFCLENBQUM7SUFDRCw0QkFBNEI7SUFDNUIs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SU8sa0JBQWtCO3NCQUE5QixLQUFLO2dCQUlPLEtBQUs7c0JBQWpCLEtBQUs7Z0JBSU8sVUFBVTtzQkFBdEIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE5nSWYgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgQ29tcG9uZW50LCBjb21wdXRlZCwgQ1VTVE9NX0VMRU1FTlRTX1NDSEVNQSwgZWZmZWN0LCBpbmplY3QsIElucHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBleHRlbmQsIGdldExvY2FsU3RhdGUsIGluamVjdEJlZm9yZVJlbmRlciwgaW5qZWN0Tmd0UmVmLCBOZ3RTaWduYWxTdG9yZSwgTmd0U3RvcmUgfSBmcm9tICdhbmd1bGFyLXRocmVlJztcbmltcG9ydCB7IE1lc2hSZWZyYWN0aW9uTWF0ZXJpYWwgfSBmcm9tICdhbmd1bGFyLXRocmVlLXNvYmEvc2hhZGVycyc7XG5pbXBvcnQgeyBNZXNoQlZILCBTQUggfSBmcm9tICd0aHJlZS1tZXNoLWJ2aCc7XG5cbmV4dGVuZCh7IE1lc2hSZWZyYWN0aW9uTWF0ZXJpYWwgfSk7XG5cbmV4cG9ydCBpbnRlcmZhY2UgTmd0c01lc2hSZWZyYWN0aW9uTWF0ZXJpYWxTdGF0ZSB7XG4gICAgLyoqIEVudmlyb25tZW50IG1hcCAqL1xuICAgIGVudk1hcDogVEhSRUUuQ3ViZVRleHR1cmUgfCBUSFJFRS5UZXh0dXJlO1xuICAgIC8qKiBOdW1iZXIgb2YgcmF5LWNhc3QgYm91bmNlcywgaXQgY2FuIGJlIGV4cGVuc2l2ZSB0byBoYXZlIHRvbyBtYW55LCAyICovXG4gICAgYm91bmNlczogbnVtYmVyO1xuICAgIC8qKiBSZWZyYWN0aW9uIGluZGV4LCAyLjQgKi9cbiAgICBpb3I6IG51bWJlcjtcbiAgICAvKiogRnJlc25lbCAoc3RyaXAgbGlnaHQpLCAwICovXG4gICAgZnJlc25lbDogbnVtYmVyO1xuICAgIC8qKiBSR0Igc2hpZnQgaW50ZW5zaXR5LCBjYW4gYmUgZXhwZW5zaXZlLCAwICovXG4gICAgYWJlcnJhdGlvblN0cmVuZ3RoOiBudW1iZXI7XG4gICAgLyoqIENvbG9yLCB3aGl0ZSAqL1xuICAgIGNvbG9yOiBUSFJFRS5Db2xvclJlcHJlc2VudGF0aW9uO1xuICAgIC8qKiBJZiB0aGlzIGlzIG9uIGl0IHVzZXMgZmV3ZXIgcmF5IGNhc3RzIGZvciB0aGUgUkdCIHNoaWZ0IHNhY3JpZmljaW5nIHBoeXNpY2FsIGFjY3VyYWN5LCB0cnVlICovXG4gICAgZmFzdENocm9tYTogYm9vbGVhbjtcbn1cblxuY29uc3QgaXNDdWJlVGV4dHVyZSA9IChkZWY6IFRIUkVFLkN1YmVUZXh0dXJlIHwgVEhSRUUuVGV4dHVyZSk6IGRlZiBpcyBUSFJFRS5DdWJlVGV4dHVyZSA9PlxuICAgIGRlZiAmJiAoZGVmIGFzIFRIUkVFLkN1YmVUZXh0dXJlKS5pc0N1YmVUZXh0dXJlO1xuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ25ndHMtbWVzaC1yZWZyYWN0aW9uLW1hdGVyaWFsJyxcbiAgICBzdGFuZGFsb25lOiB0cnVlLFxuICAgIHRlbXBsYXRlOiBgXG4gICAgICAgIDxuZ3QtbWVzaC1yZWZyYWN0aW9uLW1hdGVyaWFsXG4gICAgICAgICAgICAqbmdJZj1cImRlZmluZXMoKSBhcyBkZWZpbmVzXCJcbiAgICAgICAgICAgIFtyZWZdPVwibWF0ZXJpYWxSZWZcIlxuICAgICAgICAgICAgW2RlZmluZXNdPVwiZGVmaW5lc1wiXG4gICAgICAgICAgICBbcmVzb2x1dGlvbl09XCJyZXNvbHV0aW9uKClcIlxuICAgICAgICAgICAgW2FiZXJyYXRpb25TdHJlbmd0aF09XCJyZWZyYWN0aW9uQWJlcnJhdGlvblN0cmVuZ3RoKClcIlxuICAgICAgICAgICAgW2Vudk1hcF09XCJyZWZyYWN0aW9uRW52TWFwKClcIlxuICAgICAgICAgICAgW2JvdW5jZXNdPVwicmVmcmFjdGlvbkJvdW5jZXMoKVwiXG4gICAgICAgICAgICBbaW9yXT1cInJlZnJhY3Rpb25Jb3IoKVwiXG4gICAgICAgICAgICBbZnJlc25lbF09XCJyZWZyYWN0aW9uRnJlc25lbCgpXCJcbiAgICAgICAgICAgIFtjb2xvcl09XCJyZWZyYWN0aW9uQ29sb3IoKVwiXG4gICAgICAgICAgICBbZmFzdENocm9tYV09XCJyZWZyYWN0aW9uRmFzdENocm9tYSgpXCJcbiAgICAgICAgICAgIG5ndENvbXBvdW5kXG4gICAgICAgICAgICBhdHRhY2g9XCJtYXRlcmlhbFwiXG4gICAgICAgID5cbiAgICAgICAgICAgIDxuZy1jb250ZW50IC8+XG4gICAgICAgIDwvbmd0LW1lc2gtcmVmcmFjdGlvbi1tYXRlcmlhbD5cbiAgICBgLFxuICAgIGltcG9ydHM6IFtOZ0lmXSxcbiAgICBzY2hlbWFzOiBbQ1VTVE9NX0VMRU1FTlRTX1NDSEVNQV0sXG59KVxuZXhwb3J0IGNsYXNzIE5ndHNNZXNoUmVmcmFjdGlvbk1hdGVyaWFsIGV4dGVuZHMgTmd0U2lnbmFsU3RvcmU8Tmd0c01lc2hSZWZyYWN0aW9uTWF0ZXJpYWxTdGF0ZT4ge1xuICAgIEBJbnB1dCgpIG1hdGVyaWFsUmVmID0gaW5qZWN0Tmd0UmVmPEluc3RhbmNlVHlwZTx0eXBlb2YgTWVzaFJlZnJhY3Rpb25NYXRlcmlhbD4+KCk7XG4gICAgLyoqIEVudmlyb25tZW50IG1hcCAqL1xuICAgIEBJbnB1dCh7IHJlcXVpcmVkOiB0cnVlIH0pIHNldCBlbnZNYXAoZW52TWFwOiBUSFJFRS5DdWJlVGV4dHVyZSB8IFRIUkVFLlRleHR1cmUpIHtcbiAgICAgICAgdGhpcy5zZXQoeyBlbnZNYXAgfSk7XG4gICAgfVxuICAgIC8qKiBOdW1iZXIgb2YgcmF5LWNhc3QgYm91bmNlcywgaXQgY2FuIGJlIGV4cGVuc2l2ZSB0byBoYXZlIHRvbyBtYW55LCAyICovXG4gICAgQElucHV0KCkgc2V0IGJvdW5jZXMoYm91bmNlczogbnVtYmVyKSB7XG4gICAgICAgIHRoaXMuc2V0KHsgYm91bmNlcyB9KTtcbiAgICB9XG4gICAgLyoqIFJlZnJhY3Rpb24gaW5kZXgsIDIuNCAqL1xuICAgIEBJbnB1dCgpIHNldCBpb3IoaW9yOiBudW1iZXIpIHtcbiAgICAgICAgdGhpcy5zZXQoeyBpb3IgfSk7XG4gICAgfVxuICAgIC8qKiBGcmVzbmVsIChzdHJpcCBsaWdodCksIDAgKi9cbiAgICBASW5wdXQoKSBzZXQgZnJlc25lbChmcmVzbmVsOiBudW1iZXIpIHtcbiAgICAgICAgdGhpcy5zZXQoeyBmcmVzbmVsIH0pO1xuICAgIH1cbiAgICAvKiogUkdCIHNoaWZ0IGludGVuc2l0eSwgY2FuIGJlIGV4cGVuc2l2ZSwgMCAqL1xuICAgIEBJbnB1dCgpIHNldCBhYmVycmF0aW9uU3RyZW5ndGgoYWJlcnJhdGlvblN0cmVuZ3RoOiBudW1iZXIpIHtcbiAgICAgICAgdGhpcy5zZXQoeyBhYmVycmF0aW9uU3RyZW5ndGggfSk7XG4gICAgfVxuICAgIC8qKiBDb2xvciwgd2hpdGUgKi9cbiAgICBASW5wdXQoKSBzZXQgY29sb3IoY29sb3I6IFRIUkVFLkNvbG9yUmVwcmVzZW50YXRpb24pIHtcbiAgICAgICAgdGhpcy5zZXQoeyBjb2xvciB9KTtcbiAgICB9XG4gICAgLyoqIElmIHRoaXMgaXMgb24gaXQgdXNlcyBmZXdlciByYXkgY2FzdHMgZm9yIHRoZSBSR0Igc2hpZnQgc2FjcmlmaWNpbmcgcGh5c2ljYWwgYWNjdXJhY3ksIHRydWUgKi9cbiAgICBASW5wdXQoKSBzZXQgZmFzdENocm9tYShmYXN0Q2hyb21hOiBib29sZWFuKSB7XG4gICAgICAgIHRoaXMuc2V0KHsgZmFzdENocm9tYSB9KTtcbiAgICB9XG5cbiAgICByZWFkb25seSByZWZyYWN0aW9uRW52TWFwID0gdGhpcy5zZWxlY3QoJ2Vudk1hcCcpO1xuICAgIHJlYWRvbmx5IHJlZnJhY3Rpb25Cb3VuY2VzID0gdGhpcy5zZWxlY3QoJ2JvdW5jZXMnKTtcbiAgICByZWFkb25seSByZWZyYWN0aW9uSW9yID0gdGhpcy5zZWxlY3QoJ2lvcicpO1xuICAgIHJlYWRvbmx5IHJlZnJhY3Rpb25GcmVzbmVsID0gdGhpcy5zZWxlY3QoJ2ZyZXNuZWwnKTtcbiAgICByZWFkb25seSByZWZyYWN0aW9uQWJlcnJhdGlvblN0cmVuZ3RoID0gdGhpcy5zZWxlY3QoJ2FiZXJyYXRpb25TdHJlbmd0aCcpO1xuICAgIHJlYWRvbmx5IHJlZnJhY3Rpb25Db2xvciA9IHRoaXMuc2VsZWN0KCdjb2xvcicpO1xuICAgIHJlYWRvbmx5IHJlZnJhY3Rpb25GYXN0Q2hyb21hID0gdGhpcy5zZWxlY3QoJ2Zhc3RDaHJvbWEnKTtcblxuICAgIHJlYWRvbmx5ICNzdG9yZSA9IGluamVjdChOZ3RTdG9yZSk7XG4gICAgcmVhZG9ubHkgI3NpemUgPSB0aGlzLiNzdG9yZS5zZWxlY3QoJ3NpemUnKTtcblxuICAgIHJlYWRvbmx5ICNlbnZNYXAgPSB0aGlzLnNlbGVjdCgnZW52TWFwJyk7XG5cbiAgICByZWFkb25seSBkZWZpbmVzID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgICAgICBjb25zdCBlbnZNYXAgPSB0aGlzLiNlbnZNYXAoKTtcbiAgICAgICAgaWYgKCFlbnZNYXApIHJldHVybiBudWxsO1xuXG4gICAgICAgIGNvbnN0IGFiZXJyYXRpb25TdHJlbmd0aCA9IHRoaXMucmVmcmFjdGlvbkFiZXJyYXRpb25TdHJlbmd0aCgpO1xuICAgICAgICBjb25zdCBmYXN0Q2hyb21hID0gdGhpcy5yZWZyYWN0aW9uRmFzdENocm9tYSgpO1xuXG4gICAgICAgIGNvbnN0IHRlbXAgPSB7fSBhcyB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9O1xuICAgICAgICAvLyBTYW1wbGVyMkQgYW5kIFNhbXBsZXJDdWJlIG5lZWQgZGlmZmVyZW50IGRlZmluZXNcbiAgICAgICAgY29uc3QgaXNDdWJlTWFwID0gaXNDdWJlVGV4dHVyZShlbnZNYXApO1xuICAgICAgICBjb25zdCB3ID0gKGlzQ3ViZU1hcCA/IGVudk1hcC5pbWFnZVswXT8ud2lkdGggOiBlbnZNYXAuaW1hZ2Uud2lkdGgpID8/IDEwMjQ7XG4gICAgICAgIGNvbnN0IGN1YmVTaXplID0gdyAvIDQ7XG4gICAgICAgIGNvbnN0IF9sb2RNYXggPSBNYXRoLmZsb29yKE1hdGgubG9nMihjdWJlU2l6ZSkpO1xuICAgICAgICBjb25zdCBfY3ViZVNpemUgPSBNYXRoLnBvdygyLCBfbG9kTWF4KTtcbiAgICAgICAgY29uc3Qgd2lkdGggPSAzICogTWF0aC5tYXgoX2N1YmVTaXplLCAxNiAqIDcpO1xuICAgICAgICBjb25zdCBoZWlnaHQgPSA0ICogX2N1YmVTaXplO1xuICAgICAgICBpZiAoaXNDdWJlTWFwKSB0ZW1wWydFTlZNQVBfVFlQRV9DVUJFTSddID0gJyc7XG4gICAgICAgIHRlbXBbJ0NVQkVVVl9URVhFTF9XSURUSCddID0gYCR7MS4wIC8gd2lkdGh9YDtcbiAgICAgICAgdGVtcFsnQ1VCRVVWX1RFWEVMX0hFSUdIVCddID0gYCR7MS4wIC8gaGVpZ2h0fWA7XG4gICAgICAgIHRlbXBbJ0NVQkVVVl9NQVhfTUlQJ10gPSBgJHtfbG9kTWF4fS4wYDtcbiAgICAgICAgLy8gQWRkIGRlZmluZXMgZnJvbSBjaHJvbWF0aWMgYWJlcnJhdGlvblxuICAgICAgICBpZiAoYWJlcnJhdGlvblN0cmVuZ3RoID4gMCkgdGVtcFsnQ0hST01BVElDX0FCRVJSQVRJT05TJ10gPSAnJztcbiAgICAgICAgaWYgKGZhc3RDaHJvbWEpIHRlbXBbJ0ZBU1RfQ0hST01BJ10gPSAnJztcbiAgICAgICAgcmV0dXJuIHRlbXA7XG4gICAgfSk7XG4gICAgcmVhZG9ubHkgcmVzb2x1dGlvbiA9IGNvbXB1dGVkKCgpID0+IFt0aGlzLiNzaXplKCkud2lkdGgsIHRoaXMuI3NpemUoKS5oZWlnaHRdKTtcblxuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBzdXBlcih7IGFiZXJyYXRpb25TdHJlbmd0aDogMCwgZmFzdENocm9tYTogdHJ1ZSB9KTtcbiAgICAgICAgaW5qZWN0QmVmb3JlUmVuZGVyKCh7IGNhbWVyYSB9KSA9PiB7XG4gICAgICAgICAgICBpZiAodGhpcy5tYXRlcmlhbFJlZi5uYXRpdmVFbGVtZW50KSB7XG4gICAgICAgICAgICAgICAgKHRoaXMubWF0ZXJpYWxSZWYubmF0aXZlRWxlbWVudCBhcyBhbnkpIS52aWV3TWF0cml4SW52ZXJzZSA9IGNhbWVyYS5tYXRyaXhXb3JsZDtcbiAgICAgICAgICAgICAgICAodGhpcy5tYXRlcmlhbFJlZi5uYXRpdmVFbGVtZW50IGFzIGFueSkhLnByb2plY3Rpb25NYXRyaXhJbnZlcnNlID0gY2FtZXJhLnByb2plY3Rpb25NYXRyaXhJbnZlcnNlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy4jc2V0dXBHZW9tZXRyeSgpO1xuICAgIH1cblxuICAgICNzZXR1cEdlb21ldHJ5KCkge1xuICAgICAgICBlZmZlY3QoKCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgbWF0ZXJpYWwgPSB0aGlzLm1hdGVyaWFsUmVmLm5hdGl2ZUVsZW1lbnQ7XG4gICAgICAgICAgICBpZiAoIW1hdGVyaWFsKSByZXR1cm47XG4gICAgICAgICAgICBjb25zdCBnZW9tZXRyeSA9IGdldExvY2FsU3RhdGUobWF0ZXJpYWwpLnBhcmVudCgpPy5nZW9tZXRyeTtcbiAgICAgICAgICAgIGlmIChnZW9tZXRyeSkge1xuICAgICAgICAgICAgICAgIChtYXRlcmlhbCBhcyBhbnkpLmJ2aC51cGRhdGVGcm9tKFxuICAgICAgICAgICAgICAgICAgICBuZXcgTWVzaEJWSChnZW9tZXRyeS50b05vbkluZGV4ZWQoKSwgeyBsYXp5R2VuZXJhdGlvbjogZmFsc2UsIHN0cmF0ZWd5OiBTQUggfSBhcyBhbnkpXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxufVxuIl19
169
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVzaC1yZWZyYWN0aW9uLW1hdGVyaWFsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9zb2JhL21hdGVyaWFscy9zcmMvbWVzaC1yZWZyYWN0aW9uLW1hdGVyaWFsL21lc2gtcmVmcmFjdGlvbi1tYXRlcmlhbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDdkMsT0FBTyxFQUFFLFNBQVMsRUFBRSxRQUFRLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDbkcsT0FBTyxFQUFFLE1BQU0sRUFBRSxhQUFhLEVBQUUsa0JBQWtCLEVBQUUsWUFBWSxFQUFFLGNBQWMsRUFBRSxRQUFRLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDbEgsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDcEUsT0FBTyxFQUFFLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxHQUFHLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQzs7QUFFcEUsTUFBTSxDQUFDLEVBQUUsc0JBQXNCLEVBQUUsQ0FBQyxDQUFDO0FBbUJuQyxNQUFNLGFBQWEsR0FBRyxDQUFDLEdBQXNDLEVBQTRCLEVBQUUsQ0FDdkYsR0FBRyxJQUFLLEdBQXlCLENBQUMsYUFBYSxDQUFDO0FBRXBELE1BeUJhLDBCQUEyQixTQUFRLGNBQStDO0lBRTNGLHNCQUFzQjtJQUN0QixJQUErQixNQUFNLENBQUMsTUFBeUM7UUFDM0UsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLE1BQU0sRUFBRSxDQUFDLENBQUM7SUFDekIsQ0FBQztJQUNELDBFQUEwRTtJQUMxRSxJQUFhLE9BQU8sQ0FBQyxPQUFlO1FBQ2hDLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxPQUFPLEVBQUUsQ0FBQyxDQUFDO0lBQzFCLENBQUM7SUFDRCw0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LEVBQUU7Z0JBSVosT0FBTztzQkFBbkIsS0FBSztnQkFJTyxHQUFHO3NCQUFmLEtBQUs7Z0JBSU8sT0FBTztzQkFBbkIsS0FBSztnQkFJTyxrQkFBa0I7c0JBQTlCLEtBQUs7Z0JBSU8sS0FBSztzQkFBakIsS0FBSztnQkFJTyxVQUFVO3NCQUF0QixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgTmdJZiB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBDb21wb25lbnQsIGNvbXB1dGVkLCBDVVNUT01fRUxFTUVOVFNfU0NIRU1BLCBlZmZlY3QsIGluamVjdCwgSW5wdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IGV4dGVuZCwgZ2V0TG9jYWxTdGF0ZSwgaW5qZWN0QmVmb3JlUmVuZGVyLCBpbmplY3ROZ3RSZWYsIE5ndFNpZ25hbFN0b3JlLCBOZ3RTdG9yZSB9IGZyb20gJ2FuZ3VsYXItdGhyZWUnO1xuaW1wb3J0IHsgTWVzaFJlZnJhY3Rpb25NYXRlcmlhbCB9IGZyb20gJ2FuZ3VsYXItdGhyZWUtc29iYS9zaGFkZXJzJztcbmltcG9ydCB7IE1lc2hCVkgsIE1lc2hCVkhVbmlmb3JtU3RydWN0LCBTQUggfSBmcm9tICd0aHJlZS1tZXNoLWJ2aCc7XG5cbmV4dGVuZCh7IE1lc2hSZWZyYWN0aW9uTWF0ZXJpYWwgfSk7XG5cbmV4cG9ydCBpbnRlcmZhY2UgTmd0c01lc2hSZWZyYWN0aW9uTWF0ZXJpYWxTdGF0ZSB7XG4gICAgLyoqIEVudmlyb25tZW50IG1hcCAqL1xuICAgIGVudk1hcDogVEhSRUUuQ3ViZVRleHR1cmUgfCBUSFJFRS5UZXh0dXJlO1xuICAgIC8qKiBOdW1iZXIgb2YgcmF5LWNhc3QgYm91bmNlcywgaXQgY2FuIGJlIGV4cGVuc2l2ZSB0byBoYXZlIHRvbyBtYW55LCAyICovXG4gICAgYm91bmNlczogbnVtYmVyO1xuICAgIC8qKiBSZWZyYWN0aW9uIGluZGV4LCAyLjQgKi9cbiAgICBpb3I6IG51bWJlcjtcbiAgICAvKiogRnJlc25lbCAoc3RyaXAgbGlnaHQpLCAwICovXG4gICAgZnJlc25lbDogbnVtYmVyO1xuICAgIC8qKiBSR0Igc2hpZnQgaW50ZW5zaXR5LCBjYW4gYmUgZXhwZW5zaXZlLCAwICovXG4gICAgYWJlcnJhdGlvblN0cmVuZ3RoOiBudW1iZXI7XG4gICAgLyoqIENvbG9yLCB3aGl0ZSAqL1xuICAgIGNvbG9yOiBUSFJFRS5Db2xvclJlcHJlc2VudGF0aW9uO1xuICAgIC8qKiBJZiB0aGlzIGlzIG9uIGl0IHVzZXMgZmV3ZXIgcmF5IGNhc3RzIGZvciB0aGUgUkdCIHNoaWZ0IHNhY3JpZmljaW5nIHBoeXNpY2FsIGFjY3VyYWN5LCB0cnVlICovXG4gICAgZmFzdENocm9tYTogYm9vbGVhbjtcbn1cblxuY29uc3QgaXNDdWJlVGV4dHVyZSA9IChkZWY6IFRIUkVFLkN1YmVUZXh0dXJlIHwgVEhSRUUuVGV4dHVyZSk6IGRlZiBpcyBUSFJFRS5DdWJlVGV4dHVyZSA9PlxuICAgIGRlZiAmJiAoZGVmIGFzIFRIUkVFLkN1YmVUZXh0dXJlKS5pc0N1YmVUZXh0dXJlO1xuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ25ndHMtbWVzaC1yZWZyYWN0aW9uLW1hdGVyaWFsJyxcbiAgICBzdGFuZGFsb25lOiB0cnVlLFxuICAgIHRlbXBsYXRlOiBgXG4gICAgICAgIDxuZ3QtbWVzaC1yZWZyYWN0aW9uLW1hdGVyaWFsXG4gICAgICAgICAgICAqbmdJZj1cImRlZmluZXMoKSBhcyBkZWZpbmVzXCJcbiAgICAgICAgICAgIFtyZWZdPVwibWF0ZXJpYWxSZWZcIlxuICAgICAgICAgICAgW2RlZmluZXNdPVwiZGVmaW5lc1wiXG4gICAgICAgICAgICBbcmVzb2x1dGlvbl09XCJyZXNvbHV0aW9uKClcIlxuICAgICAgICAgICAgW2FiZXJyYXRpb25TdHJlbmd0aF09XCJyZWZyYWN0aW9uQWJlcnJhdGlvblN0cmVuZ3RoKClcIlxuICAgICAgICAgICAgW2Vudk1hcF09XCJyZWZyYWN0aW9uRW52TWFwKClcIlxuICAgICAgICAgICAgW2JvdW5jZXNdPVwicmVmcmFjdGlvbkJvdW5jZXMoKVwiXG4gICAgICAgICAgICBbaW9yXT1cInJlZnJhY3Rpb25Jb3IoKVwiXG4gICAgICAgICAgICBbZnJlc25lbF09XCJyZWZyYWN0aW9uRnJlc25lbCgpXCJcbiAgICAgICAgICAgIFtjb2xvcl09XCJyZWZyYWN0aW9uQ29sb3IoKVwiXG4gICAgICAgICAgICBbZmFzdENocm9tYV09XCJyZWZyYWN0aW9uRmFzdENocm9tYSgpXCJcbiAgICAgICAgICAgIG5ndENvbXBvdW5kXG4gICAgICAgICAgICBhdHRhY2g9XCJtYXRlcmlhbFwiXG4gICAgICAgID5cbiAgICAgICAgICAgIDxuZy1jb250ZW50IC8+XG4gICAgICAgIDwvbmd0LW1lc2gtcmVmcmFjdGlvbi1tYXRlcmlhbD5cbiAgICBgLFxuICAgIGltcG9ydHM6IFtOZ0lmXSxcbiAgICBzY2hlbWFzOiBbQ1VTVE9NX0VMRU1FTlRTX1NDSEVNQV0sXG59KVxuZXhwb3J0IGNsYXNzIE5ndHNNZXNoUmVmcmFjdGlvbk1hdGVyaWFsIGV4dGVuZHMgTmd0U2lnbmFsU3RvcmU8Tmd0c01lc2hSZWZyYWN0aW9uTWF0ZXJpYWxTdGF0ZT4ge1xuICAgIEBJbnB1dCgpIG1hdGVyaWFsUmVmID0gaW5qZWN0Tmd0UmVmPEluc3RhbmNlVHlwZTx0eXBlb2YgTWVzaFJlZnJhY3Rpb25NYXRlcmlhbD4+KCk7XG4gICAgLyoqIEVudmlyb25tZW50IG1hcCAqL1xuICAgIEBJbnB1dCh7IHJlcXVpcmVkOiB0cnVlIH0pIHNldCBlbnZNYXAoZW52TWFwOiBUSFJFRS5DdWJlVGV4dHVyZSB8IFRIUkVFLlRleHR1cmUpIHtcbiAgICAgICAgdGhpcy5zZXQoeyBlbnZNYXAgfSk7XG4gICAgfVxuICAgIC8qKiBOdW1iZXIgb2YgcmF5LWNhc3QgYm91bmNlcywgaXQgY2FuIGJlIGV4cGVuc2l2ZSB0byBoYXZlIHRvbyBtYW55LCAyICovXG4gICAgQElucHV0KCkgc2V0IGJvdW5jZXMoYm91bmNlczogbnVtYmVyKSB7XG4gICAgICAgIHRoaXMuc2V0KHsgYm91bmNlcyB9KTtcbiAgICB9XG4gICAgLyoqIFJlZnJhY3Rpb24gaW5kZXgsIDIuNCAqL1xuICAgIEBJbnB1dCgpIHNldCBpb3IoaW9yOiBudW1iZXIpIHtcbiAgICAgICAgdGhpcy5zZXQoeyBpb3IgfSk7XG4gICAgfVxuICAgIC8qKiBGcmVzbmVsIChzdHJpcCBsaWdodCksIDAgKi9cbiAgICBASW5wdXQoKSBzZXQgZnJlc25lbChmcmVzbmVsOiBudW1iZXIpIHtcbiAgICAgICAgdGhpcy5zZXQoeyBmcmVzbmVsIH0pO1xuICAgIH1cbiAgICAvKiogUkdCIHNoaWZ0IGludGVuc2l0eSwgY2FuIGJlIGV4cGVuc2l2ZSwgMCAqL1xuICAgIEBJbnB1dCgpIHNldCBhYmVycmF0aW9uU3RyZW5ndGgoYWJlcnJhdGlvblN0cmVuZ3RoOiBudW1iZXIpIHtcbiAgICAgICAgdGhpcy5zZXQoeyBhYmVycmF0aW9uU3RyZW5ndGggfSk7XG4gICAgfVxuICAgIC8qKiBDb2xvciwgd2hpdGUgKi9cbiAgICBASW5wdXQoKSBzZXQgY29sb3IoY29sb3I6IFRIUkVFLkNvbG9yUmVwcmVzZW50YXRpb24pIHtcbiAgICAgICAgdGhpcy5zZXQoeyBjb2xvciB9KTtcbiAgICB9XG4gICAgLyoqIElmIHRoaXMgaXMgb24gaXQgdXNlcyBmZXdlciByYXkgY2FzdHMgZm9yIHRoZSBSR0Igc2hpZnQgc2FjcmlmaWNpbmcgcGh5c2ljYWwgYWNjdXJhY3ksIHRydWUgKi9cbiAgICBASW5wdXQoKSBzZXQgZmFzdENocm9tYShmYXN0Q2hyb21hOiBib29sZWFuKSB7XG4gICAgICAgIHRoaXMuc2V0KHsgZmFzdENocm9tYSB9KTtcbiAgICB9XG5cbiAgICByZWFkb25seSByZWZyYWN0aW9uRW52TWFwID0gdGhpcy5zZWxlY3QoJ2Vudk1hcCcpO1xuICAgIHJlYWRvbmx5IHJlZnJhY3Rpb25Cb3VuY2VzID0gdGhpcy5zZWxlY3QoJ2JvdW5jZXMnKTtcbiAgICByZWFkb25seSByZWZyYWN0aW9uSW9yID0gdGhpcy5zZWxlY3QoJ2lvcicpO1xuICAgIHJlYWRvbmx5IHJlZnJhY3Rpb25GcmVzbmVsID0gdGhpcy5zZWxlY3QoJ2ZyZXNuZWwnKTtcbiAgICByZWFkb25seSByZWZyYWN0aW9uQWJlcnJhdGlvblN0cmVuZ3RoID0gdGhpcy5zZWxlY3QoJ2FiZXJyYXRpb25TdHJlbmd0aCcpO1xuICAgIHJlYWRvbmx5IHJlZnJhY3Rpb25Db2xvciA9IHRoaXMuc2VsZWN0KCdjb2xvcicpO1xuICAgIHJlYWRvbmx5IHJlZnJhY3Rpb25GYXN0Q2hyb21hID0gdGhpcy5zZWxlY3QoJ2Zhc3RDaHJvbWEnKTtcblxuICAgIHJlYWRvbmx5ICNzdG9yZSA9IGluamVjdChOZ3RTdG9yZSk7XG4gICAgcmVhZG9ubHkgI3NpemUgPSB0aGlzLiNzdG9yZS5zZWxlY3QoJ3NpemUnKTtcblxuICAgIHJlYWRvbmx5ICNlbnZNYXAgPSB0aGlzLnNlbGVjdCgnZW52TWFwJyk7XG5cbiAgICByZWFkb25seSBkZWZpbmVzID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgICAgICBjb25zdCBlbnZNYXAgPSB0aGlzLiNlbnZNYXAoKTtcbiAgICAgICAgaWYgKCFlbnZNYXApIHJldHVybiBudWxsO1xuXG4gICAgICAgIGNvbnN0IGFiZXJyYXRpb25TdHJlbmd0aCA9IHRoaXMucmVmcmFjdGlvbkFiZXJyYXRpb25TdHJlbmd0aCgpO1xuICAgICAgICBjb25zdCBmYXN0Q2hyb21hID0gdGhpcy5yZWZyYWN0aW9uRmFzdENocm9tYSgpO1xuXG4gICAgICAgIGNvbnN0IHRlbXAgPSB7fSBhcyB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9O1xuICAgICAgICAvLyBTYW1wbGVyMkQgYW5kIFNhbXBsZXJDdWJlIG5lZWQgZGlmZmVyZW50IGRlZmluZXNcbiAgICAgICAgY29uc3QgaXNDdWJlTWFwID0gaXNDdWJlVGV4dHVyZShlbnZNYXApO1xuICAgICAgICBjb25zdCB3ID0gKGlzQ3ViZU1hcCA/IGVudk1hcC5pbWFnZVswXT8ud2lkdGggOiBlbnZNYXAuaW1hZ2Uud2lkdGgpID8/IDEwMjQ7XG4gICAgICAgIGNvbnN0IGN1YmVTaXplID0gdyAvIDQ7XG4gICAgICAgIGNvbnN0IF9sb2RNYXggPSBNYXRoLmZsb29yKE1hdGgubG9nMihjdWJlU2l6ZSkpO1xuICAgICAgICBjb25zdCBfY3ViZVNpemUgPSBNYXRoLnBvdygyLCBfbG9kTWF4KTtcbiAgICAgICAgY29uc3Qgd2lkdGggPSAzICogTWF0aC5tYXgoX2N1YmVTaXplLCAxNiAqIDcpO1xuICAgICAgICBjb25zdCBoZWlnaHQgPSA0ICogX2N1YmVTaXplO1xuICAgICAgICBpZiAoaXNDdWJlTWFwKSB0ZW1wWydFTlZNQVBfVFlQRV9DVUJFTSddID0gJyc7XG4gICAgICAgIHRlbXBbJ0NVQkVVVl9URVhFTF9XSURUSCddID0gYCR7MS4wIC8gd2lkdGh9YDtcbiAgICAgICAgdGVtcFsnQ1VCRVVWX1RFWEVMX0hFSUdIVCddID0gYCR7MS4wIC8gaGVpZ2h0fWA7XG4gICAgICAgIHRlbXBbJ0NVQkVVVl9NQVhfTUlQJ10gPSBgJHtfbG9kTWF4fS4wYDtcbiAgICAgICAgLy8gQWRkIGRlZmluZXMgZnJvbSBjaHJvbWF0aWMgYWJlcnJhdGlvblxuICAgICAgICBpZiAoYWJlcnJhdGlvblN0cmVuZ3RoID4gMCkgdGVtcFsnQ0hST01BVElDX0FCRVJSQVRJT05TJ10gPSAnJztcbiAgICAgICAgaWYgKGZhc3RDaHJvbWEpIHRlbXBbJ0ZBU1RfQ0hST01BJ10gPSAnJztcbiAgICAgICAgcmV0dXJuIHRlbXA7XG4gICAgfSk7XG4gICAgcmVhZG9ubHkgcmVzb2x1dGlvbiA9IGNvbXB1dGVkKCgpID0+IFt0aGlzLiNzaXplKCkud2lkdGgsIHRoaXMuI3NpemUoKS5oZWlnaHRdKTtcblxuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBzdXBlcih7IGFiZXJyYXRpb25TdHJlbmd0aDogMCwgZmFzdENocm9tYTogdHJ1ZSB9KTtcbiAgICAgICAgaW5qZWN0QmVmb3JlUmVuZGVyKCh7IGNhbWVyYSB9KSA9PiB7XG4gICAgICAgICAgICBpZiAodGhpcy5tYXRlcmlhbFJlZi5uYXRpdmVFbGVtZW50KSB7XG4gICAgICAgICAgICAgICAgKHRoaXMubWF0ZXJpYWxSZWYubmF0aXZlRWxlbWVudCBhcyBhbnkpIS52aWV3TWF0cml4SW52ZXJzZSA9IGNhbWVyYS5tYXRyaXhXb3JsZDtcbiAgICAgICAgICAgICAgICAodGhpcy5tYXRlcmlhbFJlZi5uYXRpdmVFbGVtZW50IGFzIGFueSkhLnByb2plY3Rpb25NYXRyaXhJbnZlcnNlID0gY2FtZXJhLnByb2plY3Rpb25NYXRyaXhJbnZlcnNlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy4jc2V0dXBHZW9tZXRyeSgpO1xuICAgIH1cblxuICAgICNzZXR1cEdlb21ldHJ5KCkge1xuICAgICAgICBlZmZlY3QoKCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgbWF0ZXJpYWwgPSB0aGlzLm1hdGVyaWFsUmVmLm5hdGl2ZUVsZW1lbnQ7XG4gICAgICAgICAgICBpZiAoIW1hdGVyaWFsKSByZXR1cm47XG4gICAgICAgICAgICBjb25zdCBnZW9tZXRyeSA9IGdldExvY2FsU3RhdGUobWF0ZXJpYWwpLnBhcmVudCgpPy5nZW9tZXRyeTtcbiAgICAgICAgICAgIGlmIChnZW9tZXRyeSkge1xuICAgICAgICAgICAgICAgIChtYXRlcmlhbCBhcyBhbnkpLmJ2aCA9IG5ldyBNZXNoQlZIVW5pZm9ybVN0cnVjdCgpO1xuICAgICAgICAgICAgICAgIChtYXRlcmlhbCBhcyBhbnkpLmJ2aC51cGRhdGVGcm9tKFxuICAgICAgICAgICAgICAgICAgICBuZXcgTWVzaEJWSChnZW9tZXRyeS5jbG9uZSgpLnRvTm9uSW5kZXhlZCgpLCB7IGxhenlHZW5lcmF0aW9uOiBmYWxzZSwgc3RyYXRlZ3k6IFNBSCB9IGFzIGFueSlcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG59XG4iXX0=