bways-report 0.2.0 → 0.2.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (33) hide show
  1. package/README.md +46 -0
  2. package/esm2022/lib/core/models/report-grid.model.mjs +1 -1
  3. package/esm2022/lib/core/services/report-overlay.service.mjs +79 -0
  4. package/esm2022/lib/core/utils/report-parameter.util.mjs +68 -15
  5. package/esm2022/lib/data-access/adapters/endpoint-datasource.adapter.mjs +10 -2
  6. package/esm2022/lib/data-access/adapters/endpoint-lookup.adapter.mjs +10 -1
  7. package/esm2022/lib/data-access/adapters/http-datasource.adapter.mjs +10 -1
  8. package/esm2022/lib/data-access/adapters/http-lookup.adapter.mjs +10 -1
  9. package/esm2022/lib/features/designer/components/design-canvas/design-canvas.component.mjs +6 -4
  10. package/esm2022/lib/features/designer/components/dialogs/report-saved-dialog.component.mjs +11 -10
  11. package/esm2022/lib/features/designer/components/property-editor/parameter-binding-editor.component.mjs +39 -6
  12. package/esm2022/lib/features/designer/components/property-editor/property-editor-grid.component.mjs +3 -3
  13. package/esm2022/lib/features/designer/components/property-editor/property-editor.component.mjs +5 -3
  14. package/esm2022/lib/features/designer/designer.component.mjs +11 -6
  15. package/esm2022/lib/features/runtime/dynamic-renderer.component.mjs +2 -2
  16. package/esm2022/lib/features/runtime/report-execution.service.mjs +35 -4
  17. package/esm2022/lib/features/runtime/report-grid-bridge.component.mjs +15 -20
  18. package/esm2022/lib/primitives/components/dropdown/rpt-dropdown.component.mjs +21 -10
  19. package/esm2022/lib/primitives/components/radio/rpt-radio.component.mjs +15 -5
  20. package/esm2022/lib/primitives/components/searchable-select/rpt-searchable-select.component.mjs +6 -6
  21. package/fesm2022/bways-report.mjs +324 -88
  22. package/fesm2022/bways-report.mjs.map +1 -1
  23. package/lib/core/models/report-grid.model.d.ts +1 -1
  24. package/lib/core/services/report-overlay.service.d.ts +14 -0
  25. package/lib/core/utils/report-parameter.util.d.ts +13 -1
  26. package/lib/features/designer/components/property-editor/parameter-binding-editor.component.d.ts +5 -0
  27. package/lib/features/designer/designer.component.d.ts +1 -0
  28. package/lib/features/runtime/report-grid-bridge.component.d.ts +2 -2
  29. package/lib/primitives/components/dropdown/rpt-dropdown.component.d.ts +1 -2
  30. package/lib/primitives/components/searchable-select/rpt-searchable-select.component.d.ts +0 -1
  31. package/package.json +8 -5
  32. package/styles/theme.css +184 -0
  33. package/third-party-notices/angular-cdk-LICENSE.txt +21 -0
package/README.md CHANGED
@@ -593,3 +593,49 @@ const dataSource: ReportDataSourceDefinition = {
593
593
  The adapter sends `columns`, `top` and resolved `filter` values to the execution API. Unmapped form parameters are not automatically treated as SQL column names. The supplied backend defaults table/view results to 1,000 rows and caps requests at 10,000; lookups default to 500. Table/view limits run inside SQL. Stored procedure results are capped in the response; expensive procedures should implement their own SQL-side paging/limits.
594
594
 
595
595
  Generic backend execution preserves supplied values and leaves omitted procedure arguments for SQL Server to handle. ERP-specific synthetic defaults, flag coercions and legacy fallback behavior require the explicit `legacyErpDefaults` option. See the [backend compatibility settings](../../backend/README.md#query-limits-and-erp-compatibility).
596
+
597
+ ## Automatic overlay positioning
598
+
599
+ The save-review dialog includes its backdrop automatically. It stays within the viewport, keeps its action buttons visible, and scrolls settings and preview content on smaller screens. Nested report wrappers do not require modal positioning CSS.
600
+
601
+ No host import of `@angular/cdk/overlay-prebuilt.css` is required for library dropdowns, searchable selects or designer save dialogs. Their minimal structural CSS is embedded in the library and installed once per document, including standalone-component usage. The installer respects Angular's `CSP_NONCE` and can create styles in an SSR document. Existing CDK stylesheet imports remain compatible.
602
+
603
+ Menus use CDK's anchor positioning, viewport margins, above/below fallback and push behavior. Internal canvas, preview, properties and save-dialog scrollers register with CDK. A capture listener covers unregistered native host ancestors, throttled to one animation frame and removed when the overlay closes; menu-list scrolling does not reposition its own overlay.
604
+
605
+ The optional visual theme is available from the published package:
606
+
607
+ ```scss
608
+ /* Optional: colors, typography, drag previews and library dialog appearance. */
609
+ @import 'bways-report/styles/theme.css';
610
+ ```
611
+
612
+ The theme no longer forces positioning, centering or margins on all of the consuming application's CDK overlays. Overlay container stacking defaults to the CDK layer (1000), and can be changed through the inherited `--rpt-overlay-z-index` CSS variable when required by the host's layering scheme. Arbitrary host rules overriding CDK positioning or a custom OverlayContainer inside a transformed ancestor still need to preserve CDK's positioning contract. A normal nested div, including a transformed report wrapper, does not require a custom overlay container.
613
+
614
+ ## Date parameters
615
+
616
+ In a procedure parameter's **Field** tab, select a Date field (or a date range's **From** / **To** field), then choose **Execution date format**. This also works when the SQL parameter is text, such as `chrFromDate`.
617
+
618
+ Supported formats: `yyyy-MM-dd`, `yyyyMMdd`, `dd/MM/yyyy`, `MM/dd/yyyy`, and `dd-MM-yyyy`. For example, November 4, 2026 becomes `"20261104"` with `yyyyMMdd`. Uppercase `MM` means month. The browser controls the picker's visual date display; this setting controls the value sent to the backend.
619
+
620
+ The choice is saved in DEFJSON using the existing parameter mappings:
621
+
622
+ ```json
623
+ {
624
+ "parameterMappings": {
625
+ "@chrFromDate": "{{fromDate | date:yyyyMMdd}}",
626
+ "@chrToDate": "{{period.to | date:yyyyMMdd}}"
627
+ }
628
+ }
629
+ ```
630
+
631
+ Existing `{{fromDate}}` bindings retain their original values. Date formatting runs in the shared resolver for canvas, preview, runtime and dependent lookups without changing the entered form values. Fixed values remain literal values.
632
+
633
+ Grid row selection defaults to enabled with multiple-row selection, row checkboxes and a select-all header. Set `grid.options.selectable: false` to disable selection, or `checkboxSelection: false` to keep row-click selection without checkboxes. Explicit settings on saved reports are preserved.
634
+
635
+ ## Procedure execution arguments
636
+
637
+ Stored procedures receive one argument per mapped name, without a leading `@`. Saved mapping keys such as `@chrFromDate` remain supported. Equal aliases are collapsed case-insensitively; conflicting values fail before the request is sent.
638
+
639
+ Canvas fields are inputs to mappings, so unrelated field names are excluded from procedure arguments. Session context remains separate in headers / `sessionContext`; map a session value explicitly when a procedure needs it, for example `"@chrCompUnitId": "{{session.companyId}}"`.
640
+
641
+ Reports can explicitly supply additional arguments using a data source's `parameterKeys`. Older reports without mappings may use declared report parameters or a component's `binding.parameterKey`. An empty mapping object sends no implicit canvas arguments. Date formatting and zero/false values are preserved.
@@ -7,4 +7,4 @@
7
7
  * whatever the host's grid component (BWays-grid, AG Grid, etc.) expects.
8
8
  */
9
9
  export {};
10
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVwb3J0LWdyaWQubW9kZWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9id2F5cy1yZXBvcnQvc3JjL2xpYi9jb3JlL21vZGVscy9yZXBvcnQtZ3JpZC5tb2RlbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7OztHQU9HIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBSZXBvcnQgZ3JpZCBkZWZpbml0aW9ucy5cbiAqXG4gKiBEZXNjcmliZXMgdGhlIGxvZ2ljYWwgc3RydWN0dXJlIG9mIHRoZSByZXN1bHQgZ3JpZCDigJQgY29sdW1ucywgZmllbGRzLFxuICogZm9ybWF0dGluZywgc29ydGluZywgYW5kIGZpbHRlcmluZy4gVGhpcyBpcyAqKm5vdCoqIGEgc3BlY2lmaWMgZ3JpZFxuICogbGlicmFyeSdzIEFQSS4gVGhlIGBSZXBvcnRHcmlkQnJpZGdlQ29tcG9uZW50YCB0cmFuc2xhdGVzIHRoaXMgaW50b1xuICogd2hhdGV2ZXIgdGhlIGhvc3QncyBncmlkIGNvbXBvbmVudCAoQldheXMtZ3JpZCwgQUcgR3JpZCwgZXRjLikgZXhwZWN0cy5cbiAqL1xuXG4vKipcbiAqIEludGVyYWN0aXZlIGFjdGlvbiB0cmlnZ2VyZWQgd2hlbiBhIHJvdyBvciBjZWxsIGluIHRoZSByZXN1bHQgZ3JpZCBpcyBjbGlja2VkLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEdyaWRSb3dDbGlja0FjdGlvbiB7XG4gIC8qKlxuICAgKiBBY3Rpb24gdHlwZTpcbiAgICogLSAnZHJpbGxkb3duLXJlcG9ydCc6IG5hdmlnYXRlcyB0byBvciBvcGVucyBhIHRhcmdldCBzdWItcmVwb3J0XG4gICAqIC0gJ29wZW4tZHJhd2VyJzogb3BlbnMgYW4gaW4tcGFnZSBzbGlkZS1vdmVyIGRyYXdlciBydW5uaW5nIHRoZSB0YXJnZXQgcmVwb3J0XG4gICAqIC0gJ25hdmlnYXRlJzogb3BlbnMgYW4gZXh0ZXJuYWwgVVJMIG9yIGFwcGxpY2F0aW9uIHJvdXRlXG4gICAqIC0gJ2VtaXQtY3VzdG9tJzogZW1pdHMgYSBjdXN0b20gZXZlbnQgZm9yIHRoZSBob3N0IGFwcGxpY2F0aW9uXG4gICAqL1xuICB0eXBlOiAnZHJpbGxkb3duLXJlcG9ydCcgfCAnb3Blbi1kcmF3ZXInIHwgJ25hdmlnYXRlJyB8ICdlbWl0LWN1c3RvbSc7XG5cbiAgLyoqIFRhcmdldCByZXBvcnQgSUQgdG8gb3Blbi9kcmlsbCBpbnRvIChlLmcuICdyZXBfY3VzdG9tZXJfbGVkZ2VyJykuICovXG4gIHRhcmdldFJlcG9ydElkPzogc3RyaW5nO1xuXG4gIC8qKiBFeHRlcm5hbCBVUkwgb3Igcm91dGUgdGVtcGxhdGUgaWYgdHlwZSA9PT0gJ25hdmlnYXRlJy4gU3VwcG9ydHMgYHt7cm93LmZpZWxkfX1gIHJlcGxhY2VtZW50cy4gKi9cbiAgdGFyZ2V0VXJsPzogc3RyaW5nO1xuXG4gIC8qKiBUYXJnZXQgYnJvd3NpbmcgY29udGV4dDogJ19ibGFuaycgfCAnX3NlbGYnIHdoZW4gbmF2aWdhdGluZy4gKi9cbiAgb3Blbk5ld1RhYj86IGJvb2xlYW47XG5cbiAgLyoqIFRpdGxlIGZvciB0aGUgc2xpZGUtb3ZlciBkcmF3ZXIgb3IgZGlhbG9nLiBTdXBwb3J0cyBge3tyb3cuZmllbGR9fWAgcmVwbGFjZW1lbnRzLiAqL1xuICBkcmF3ZXJUaXRsZT86IHN0cmluZztcblxuICAvKiogV2lkdGggb2YgdGhlIHNsaWRlIGRyYXdlciAoQ1NTIHZhbHVlLCBlLmcuICc2ODBweCcsICc1MHZ3JykuIERlZmF1bHQ6ICc3MjBweCcuICovXG4gIGRyYXdlcldpZHRoPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBNYXBzIHBhcmFtZXRlciBrZXlzIG9mIHRoZSB0YXJnZXQgc3ViLXJlcG9ydCB0byBleHByZXNzaW9uczpcbiAgICogZS5nLiB7IFwiQEN1c3RDb2RlXCI6IFwicm93LmN1c3RvbWVySWRcIiwgXCJAQnJhbmNoSWRcIjogXCJzZXNzaW9uLmJyYW5jaElkXCIsIFwiZnJvbURhdGVcIjogXCJmb3JtLmZyb21EYXRlXCIgfVxuICAgKi9cbiAgcGFyYW1ldGVyTWFwcGluZz86IFJlY29yZDxzdHJpbmcsIHN0cmluZz47XG5cbiAgLyoqIEN1c3RvbSBldmVudCBvciBhY3Rpb24gaWRlbnRpZmllciB3aGVuIHR5cGUgPT09ICdlbWl0LWN1c3RvbScuICovXG4gIGN1c3RvbUFjdGlvbk5hbWU/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogRGVmaW5lcyB0aGUgcmVzdWx0IGdyaWQgZm9yIGEgcmVwb3J0LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFJlcG9ydEdyaWREZWZpbml0aW9uIHtcbiAgLyoqIFRoZSBkYXRhIHNvdXJjZSBJRCB0aGF0IHByb3ZpZGVzIGRhdGEgZm9yIHRoaXMgZ3JpZC4gKi9cbiAgZGF0YVNvdXJjZUlkOiBzdHJpbmc7XG5cbiAgLyoqIENvbHVtbiBkZWZpbml0aW9ucy4gKi9cbiAgY29sdW1uczogR3JpZENvbHVtbkRlZmluaXRpb25bXTtcblxuICAvKiogR3JpZC1sZXZlbCBvcHRpb25zLiAqL1xuICBvcHRpb25zPzogR3JpZE9wdGlvbnNEZWZpbml0aW9uO1xuXG4gIC8qKiBEZWNsYXJhdGl2ZSByb3ctY2xpY2sgYWN0aW9uIGZvciBtYXN0ZXItZGV0YWlsIGRyaWxsLWRvd25zLiAqL1xuICByb3dDbGlja0FjdGlvbj86IEdyaWRSb3dDbGlja0FjdGlvbjtcbn1cblxuLyoqXG4gKiBEZWZpbmVzIGEgc2luZ2xlIGNvbHVtbiBpbiB0aGUgcmVzdWx0IGdyaWQuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgR3JpZENvbHVtbkRlZmluaXRpb24ge1xuICAvKiogVGhlIGZpZWxkIG5hbWUgaW4gdGhlIGRhdGEgcm93IG9iamVjdC4gKi9cbiAgZmllbGQ6IHN0cmluZztcblxuICAvKiogRGlzcGxheSBsYWJlbCBmb3IgdGhlIGNvbHVtbiBoZWFkZXIuICovXG4gIGxhYmVsOiBzdHJpbmc7XG5cbiAgLyoqIENvbHVtbiBkYXRhIHR5cGUg4oCUIHVzZWQgZm9yIGZvcm1hdHRpbmcgYW5kIHNvcnRpbmcuICovXG4gIGRhdGFUeXBlPzogJ3N0cmluZycgfCAnbnVtYmVyJyB8ICdkYXRlJyB8ICdib29sZWFuJyB8ICdjdXJyZW5jeSc7XG5cbiAgLyoqIERpc3BsYXkgZm9ybWF0IChlLmcuLCAnZGQvTU0veXl5eScgZm9yIGRhdGVzLCAnMS4yLTInIGZvciBudW1iZXJzKS4gKi9cbiAgZm9ybWF0Pzogc3RyaW5nO1xuXG4gIC8qKiBDb2x1bW4gd2lkdGggKENTUyB2YWx1ZSwgZS5nLiwgJzE1MHB4JywgJzIwJScpLiAqL1xuICB3aWR0aD86IHN0cmluZztcblxuICAvKiogV2hldGhlciB0aGlzIGNvbHVtbiBpcyBzb3J0YWJsZS4gRGVmYXVsdHMgdG8gYHRydWVgLiAqL1xuICBzb3J0YWJsZT86IGJvb2xlYW47XG5cbiAgLyoqIFdoZXRoZXIgdGhpcyBjb2x1bW4gaXMgZmlsdGVyYWJsZS4gRGVmYXVsdHMgdG8gYGZhbHNlYC4gKi9cbiAgZmlsdGVyYWJsZT86IGJvb2xlYW47XG5cbiAgLyoqIFRleHQgYWxpZ25tZW50LiAqL1xuICBhbGlnbj86ICdsZWZ0JyB8ICdjZW50ZXInIHwgJ3JpZ2h0JztcblxuICAvKiogV2hldGhlciB0aGlzIGNvbHVtbiBpcyB2aXNpYmxlLiBEZWZhdWx0cyB0byBgdHJ1ZWAuICovXG4gIHZpc2libGU/OiBib29sZWFuO1xuXG4gIC8qKiBXaGV0aGVyIHRoaXMgY29sdW1uIGlzIHBpbm5lZC9mcm96ZW4uICovXG4gIHBpbm5lZD86ICdsZWZ0JyB8ICdyaWdodCcgfCBmYWxzZTtcblxuICAvKiogQ29sdW1uIGRpc3BsYXkgb3JkZXIgKGxvd2VyID0gZmlyc3QpLiAqL1xuICBvcmRlcj86IG51bWJlcjtcblxuICAvKiogQWdncmVnYXRlIGZ1bmN0aW9uIHRvIGRpc3BsYXkgaW4gYSBmb290ZXIgcm93LiAqL1xuICBhZ2dyZWdhdGU/OiAnc3VtJyB8ICdhdmcnIHwgJ2NvdW50JyB8ICdtaW4nIHwgJ21heCcgfCAnbm9uZSc7XG5cbiAgLyoqIFdoZXRoZXIgdG8gcmVuZGVyIGEgc2VsZWN0aW9uIGNoZWNrYm94IGluIHRoaXMgY29sdW1uJ3MgY2VsbHMuICovXG4gIGNoZWNrYm94U2VsZWN0aW9uPzogYm9vbGVhbjtcblxuICAvKiogV2hldGhlciB0byByZW5kZXIgYSBzZWxlY3QtYWxsIGNoZWNrYm94IGluIHRoaXMgY29sdW1uJ3MgaGVhZGVyLiAqL1xuICBoZWFkZXJDaGVja2JveFNlbGVjdGlvbj86IGJvb2xlYW47XG5cbiAgLyoqIE9wdGlvbmFsIGNlbGwtc3BlY2lmaWMgY2xpY2sgYWN0aW9uIChvdmVycmlkZXMgZ3JpZC1sZXZlbCByb3dDbGlja0FjdGlvbiBmb3IgdGhpcyBjb2x1bW4pLiAqL1xuICBhY3Rpb24/OiBHcmlkUm93Q2xpY2tBY3Rpb247XG59XG5cbi8qKlxuICogR3JpZC1sZXZlbCBvcHRpb25zLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEdyaWRPcHRpb25zRGVmaW5pdGlvbiB7XG4gIC8qKiBOdW1iZXIgb2Ygcm93cyBwZXIgcGFnZS4gKi9cbiAgcGFnZVNpemU/OiBudW1iZXI7XG5cbiAgLyoqIFdoZXRoZXIgcGFnaW5hdGlvbiBpcyBlbmFibGVkLiAqL1xuICBwYWdpbmF0aW9uPzogYm9vbGVhbjtcblxuICAvKiogV2hldGhlciByb3cgc2VsZWN0aW9uIGlzIGVuYWJsZWQuICovXG4gIHNlbGVjdGFibGU/OiBib29sZWFuO1xuXG4gIC8qKiBTZWxlY3Rpb24gbW9kZSB3aGVuIHNlbGVjdGFibGUgaXMgdHJ1ZS4gRGVmYXVsdHMgdG8gJ211bHRpcGxlJy4gKi9cbiAgc2VsZWN0aW9uTW9kZT86ICdzaW5nbGUnIHwgJ211bHRpcGxlJztcblxuICAvKiogU2VsZWN0aW9uIG1vZGUgYWxpYXMgKGNvbXBhdGlibGUgd2l0aCBVbHRyYUdyaWQgYW5kIEFHIEdyaWQgcm93U2VsZWN0aW9uKS4gKi9cbiAgcm93U2VsZWN0aW9uPzogJ3NpbmdsZScgfCAnbXVsdGlwbGUnO1xuXG4gIC8qKiBXaGV0aGVyIHRvIHJlbmRlciBzZWxlY3Rpb24gY2hlY2tib3hlcyBvbiByb3dzLiBEZWZhdWx0cyB0byB0cnVlIHdoZW4gc2VsZWN0YWJsZSBpcyB0cnVlLiAqL1xuICBjaGVja2JveFNlbGVjdGlvbj86IGJvb2xlYW47XG5cbiAgLyoqIFdoZXRoZXIgdG8gcmVuZGVyIGEgc2VsZWN0LWFsbCBjaGVja2JveCBpbiB0aGUgaGVhZGVyLiBEZWZhdWx0cyB0byB0cnVlIHdoZW4gbXVsdGktcm93IGNoZWNrYm94IHNlbGVjdGlvbiBpcyBhY3RpdmUuICovXG4gIGhlYWRlckNoZWNrYm94U2VsZWN0aW9uPzogYm9vbGVhbjtcblxuICAvKiogV2hldGhlciB0byBzaG93IHJvdyBudW1iZXJzLiAqL1xuICBzaG93Um93TnVtYmVycz86IGJvb2xlYW47XG5cbiAgLyoqIFdoZXRoZXIgdG8gYWxsb3cgY29sdW1uIHJlb3JkZXJpbmcuICovXG4gIGFsbG93Q29sdW1uUmVvcmRlcj86IGJvb2xlYW47XG5cbiAgLyoqIFdoZXRoZXIgdG8gYWxsb3cgZXhwb3J0aW5nLiAqL1xuICBhbGxvd0V4cG9ydD86IGJvb2xlYW47XG5cbiAgLyoqIEV4cG9ydCBmb3JtYXRzIHRvIG9mZmVyLiAqL1xuICBleHBvcnRGb3JtYXRzPzogKCdjc3YnIHwgJ2V4Y2VsJyB8ICdwZGYnKVtdO1xuXG4gIC8qKiBXaGV0aGVyIHRvIHNob3cgYSBmb290ZXIgcm93IHdpdGggYWdncmVnYXRlcy4gKi9cbiAgc2hvd0Zvb3Rlcj86IGJvb2xlYW47XG5cbiAgLyoqIEhlaWdodCBvZiB0aGUgZ3JpZCAoQ1NTIHZhbHVlKS4gKi9cbiAgaGVpZ2h0Pzogc3RyaW5nO1xuXG4gIC8qKiBBY3RpdmUgY29sdW1uIGdyb3VwaW5nIGZpZWxkcyBpbiBvcmRlciAoZS5nLiBbJ2JyYW5jaCcsICdjdXN0b21lciddKS4gKi9cbiAgZ3JvdXBNb2RlbD86IHN0cmluZ1tdO1xuXG4gIC8qKiBBY3RpdmUgc29ydCBtb2RlbCBkZWZpbml0aW9ucy4gKi9cbiAgc29ydE1vZGVsPzogdW5rbm93bltdO1xuXG4gIC8qKiBDb21wbGV0ZSBzZXJpYWxpemVkIGdyaWQgcmVwb3J0IHN0YXRlIChmaWx0ZXJzLCBoaWdobGlnaHRzLCBncm91cHMpLiAqL1xuICByZXBvcnRTdGF0ZT86IFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuXG4gIC8qKiBWaWV3IHByZXNldHMgLyBzYXZlZCBjdXN0b20gZ3JpZCB2aWV3cy4gKi9cbiAgcHJlc2V0cz86IHVua25vd25bXTtcblxuICAvKipcbiAgICogV2hldGhlciB0aGUgZ3JpZCBzaWRlIHBhbmVsICh0b29sIHBhbmVscyBmb3IgY29sdW1ucywgZmlsdGVycywgaGlnaGxpZ2h0cywgZXhwb3J0LCBhbmFseXRpY3MsIEFJIGNoYXQpIGlzIGVuYWJsZWQuXG4gICAqIFN0YW5kYXJkIEJXYXlzLWdyaWQgLyBVbHRyYUdyaWQgZmVhdHVyZS4gRGVmYXVsdHMgdG8gYHRydWVgLlxuICAgKi9cbiAgc2lkZUJhcj86IGJvb2xlYW4gfCB7XG4gICAgdmlzaWJsZT86IGJvb2xlYW47XG4gICAgcGFuZWw/OiAoJ2NvbHVtbnMnIHwgJ2ZpbHRlcnMnIHwgJ2hpZ2hsaWdodHMnIHwgJ2V4cG9ydCcgfCAnYW5hbHl0aWNzJyB8ICdjaGF0JylbXTtcbiAgfTtcblxuICAvKiogV2hldGhlciB0aGUgcmVhbC10aW1lIGdsb2JhbCBzZWFyY2ggYmFyIGlzIGVuYWJsZWQuIERlZmF1bHRzIHRvIGB0cnVlYC4gKi9cbiAgZ2xvYmFsU2VhcmNoPzogYm9vbGVhbjtcblxuICAvKiogV2hldGhlciB0aGUgYm90dG9tIHN0YXR1cyBiYXIgaXMgZW5hYmxlZC4gRGVmYXVsdHMgdG8gYHRydWVgLiAqL1xuICBzdGF0dXNCYXI/OiBib29sZWFuO1xuXG4gIC8qKiBEZWNsYXJhdGl2ZSByb3ctY2xpY2sgYWN0aW9uIGZvciBtYXN0ZXItZGV0YWlsIGRyaWxsLWRvd25zLiAqL1xuICByb3dDbGlja0FjdGlvbj86IEdyaWRSb3dDbGlja0FjdGlvbjtcbn1cbiJdfQ==
10
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVwb3J0LWdyaWQubW9kZWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9id2F5cy1yZXBvcnQvc3JjL2xpYi9jb3JlL21vZGVscy9yZXBvcnQtZ3JpZC5tb2RlbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7OztHQU9HIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBSZXBvcnQgZ3JpZCBkZWZpbml0aW9ucy5cbiAqXG4gKiBEZXNjcmliZXMgdGhlIGxvZ2ljYWwgc3RydWN0dXJlIG9mIHRoZSByZXN1bHQgZ3JpZCDigJQgY29sdW1ucywgZmllbGRzLFxuICogZm9ybWF0dGluZywgc29ydGluZywgYW5kIGZpbHRlcmluZy4gVGhpcyBpcyAqKm5vdCoqIGEgc3BlY2lmaWMgZ3JpZFxuICogbGlicmFyeSdzIEFQSS4gVGhlIGBSZXBvcnRHcmlkQnJpZGdlQ29tcG9uZW50YCB0cmFuc2xhdGVzIHRoaXMgaW50b1xuICogd2hhdGV2ZXIgdGhlIGhvc3QncyBncmlkIGNvbXBvbmVudCAoQldheXMtZ3JpZCwgQUcgR3JpZCwgZXRjLikgZXhwZWN0cy5cbiAqL1xuXG4vKipcbiAqIEludGVyYWN0aXZlIGFjdGlvbiB0cmlnZ2VyZWQgd2hlbiBhIHJvdyBvciBjZWxsIGluIHRoZSByZXN1bHQgZ3JpZCBpcyBjbGlja2VkLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEdyaWRSb3dDbGlja0FjdGlvbiB7XG4gIC8qKlxuICAgKiBBY3Rpb24gdHlwZTpcbiAgICogLSAnZHJpbGxkb3duLXJlcG9ydCc6IG5hdmlnYXRlcyB0byBvciBvcGVucyBhIHRhcmdldCBzdWItcmVwb3J0XG4gICAqIC0gJ29wZW4tZHJhd2VyJzogb3BlbnMgYW4gaW4tcGFnZSBzbGlkZS1vdmVyIGRyYXdlciBydW5uaW5nIHRoZSB0YXJnZXQgcmVwb3J0XG4gICAqIC0gJ25hdmlnYXRlJzogb3BlbnMgYW4gZXh0ZXJuYWwgVVJMIG9yIGFwcGxpY2F0aW9uIHJvdXRlXG4gICAqIC0gJ2VtaXQtY3VzdG9tJzogZW1pdHMgYSBjdXN0b20gZXZlbnQgZm9yIHRoZSBob3N0IGFwcGxpY2F0aW9uXG4gICAqL1xuICB0eXBlOiAnZHJpbGxkb3duLXJlcG9ydCcgfCAnb3Blbi1kcmF3ZXInIHwgJ25hdmlnYXRlJyB8ICdlbWl0LWN1c3RvbSc7XG5cbiAgLyoqIFRhcmdldCByZXBvcnQgSUQgdG8gb3Blbi9kcmlsbCBpbnRvIChlLmcuICdyZXBfY3VzdG9tZXJfbGVkZ2VyJykuICovXG4gIHRhcmdldFJlcG9ydElkPzogc3RyaW5nO1xuXG4gIC8qKiBFeHRlcm5hbCBVUkwgb3Igcm91dGUgdGVtcGxhdGUgaWYgdHlwZSA9PT0gJ25hdmlnYXRlJy4gU3VwcG9ydHMgYHt7cm93LmZpZWxkfX1gIHJlcGxhY2VtZW50cy4gKi9cbiAgdGFyZ2V0VXJsPzogc3RyaW5nO1xuXG4gIC8qKiBUYXJnZXQgYnJvd3NpbmcgY29udGV4dDogJ19ibGFuaycgfCAnX3NlbGYnIHdoZW4gbmF2aWdhdGluZy4gKi9cbiAgb3Blbk5ld1RhYj86IGJvb2xlYW47XG5cbiAgLyoqIFRpdGxlIGZvciB0aGUgc2xpZGUtb3ZlciBkcmF3ZXIgb3IgZGlhbG9nLiBTdXBwb3J0cyBge3tyb3cuZmllbGR9fWAgcmVwbGFjZW1lbnRzLiAqL1xuICBkcmF3ZXJUaXRsZT86IHN0cmluZztcblxuICAvKiogV2lkdGggb2YgdGhlIHNsaWRlIGRyYXdlciAoQ1NTIHZhbHVlLCBlLmcuICc2ODBweCcsICc1MHZ3JykuIERlZmF1bHQ6ICc3MjBweCcuICovXG4gIGRyYXdlcldpZHRoPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBNYXBzIHBhcmFtZXRlciBrZXlzIG9mIHRoZSB0YXJnZXQgc3ViLXJlcG9ydCB0byBleHByZXNzaW9uczpcbiAgICogZS5nLiB7IFwiQEN1c3RDb2RlXCI6IFwicm93LmN1c3RvbWVySWRcIiwgXCJAQnJhbmNoSWRcIjogXCJzZXNzaW9uLmJyYW5jaElkXCIsIFwiZnJvbURhdGVcIjogXCJmb3JtLmZyb21EYXRlXCIgfVxuICAgKi9cbiAgcGFyYW1ldGVyTWFwcGluZz86IFJlY29yZDxzdHJpbmcsIHN0cmluZz47XG5cbiAgLyoqIEN1c3RvbSBldmVudCBvciBhY3Rpb24gaWRlbnRpZmllciB3aGVuIHR5cGUgPT09ICdlbWl0LWN1c3RvbScuICovXG4gIGN1c3RvbUFjdGlvbk5hbWU/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogRGVmaW5lcyB0aGUgcmVzdWx0IGdyaWQgZm9yIGEgcmVwb3J0LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFJlcG9ydEdyaWREZWZpbml0aW9uIHtcbiAgLyoqIFRoZSBkYXRhIHNvdXJjZSBJRCB0aGF0IHByb3ZpZGVzIGRhdGEgZm9yIHRoaXMgZ3JpZC4gKi9cbiAgZGF0YVNvdXJjZUlkOiBzdHJpbmc7XG5cbiAgLyoqIENvbHVtbiBkZWZpbml0aW9ucy4gKi9cbiAgY29sdW1uczogR3JpZENvbHVtbkRlZmluaXRpb25bXTtcblxuICAvKiogR3JpZC1sZXZlbCBvcHRpb25zLiAqL1xuICBvcHRpb25zPzogR3JpZE9wdGlvbnNEZWZpbml0aW9uO1xuXG4gIC8qKiBEZWNsYXJhdGl2ZSByb3ctY2xpY2sgYWN0aW9uIGZvciBtYXN0ZXItZGV0YWlsIGRyaWxsLWRvd25zLiAqL1xuICByb3dDbGlja0FjdGlvbj86IEdyaWRSb3dDbGlja0FjdGlvbjtcbn1cblxuLyoqXG4gKiBEZWZpbmVzIGEgc2luZ2xlIGNvbHVtbiBpbiB0aGUgcmVzdWx0IGdyaWQuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgR3JpZENvbHVtbkRlZmluaXRpb24ge1xuICAvKiogVGhlIGZpZWxkIG5hbWUgaW4gdGhlIGRhdGEgcm93IG9iamVjdC4gKi9cbiAgZmllbGQ6IHN0cmluZztcblxuICAvKiogRGlzcGxheSBsYWJlbCBmb3IgdGhlIGNvbHVtbiBoZWFkZXIuICovXG4gIGxhYmVsOiBzdHJpbmc7XG5cbiAgLyoqIENvbHVtbiBkYXRhIHR5cGUg4oCUIHVzZWQgZm9yIGZvcm1hdHRpbmcgYW5kIHNvcnRpbmcuICovXG4gIGRhdGFUeXBlPzogJ3N0cmluZycgfCAnbnVtYmVyJyB8ICdkYXRlJyB8ICdib29sZWFuJyB8ICdjdXJyZW5jeSc7XG5cbiAgLyoqIERpc3BsYXkgZm9ybWF0IChlLmcuLCAnZGQvTU0veXl5eScgZm9yIGRhdGVzLCAnMS4yLTInIGZvciBudW1iZXJzKS4gKi9cbiAgZm9ybWF0Pzogc3RyaW5nO1xuXG4gIC8qKiBDb2x1bW4gd2lkdGggKENTUyB2YWx1ZSwgZS5nLiwgJzE1MHB4JywgJzIwJScpLiAqL1xuICB3aWR0aD86IHN0cmluZztcblxuICAvKiogV2hldGhlciB0aGlzIGNvbHVtbiBpcyBzb3J0YWJsZS4gRGVmYXVsdHMgdG8gYHRydWVgLiAqL1xuICBzb3J0YWJsZT86IGJvb2xlYW47XG5cbiAgLyoqIFdoZXRoZXIgdGhpcyBjb2x1bW4gaXMgZmlsdGVyYWJsZS4gRGVmYXVsdHMgdG8gYGZhbHNlYC4gKi9cbiAgZmlsdGVyYWJsZT86IGJvb2xlYW47XG5cbiAgLyoqIFRleHQgYWxpZ25tZW50LiAqL1xuICBhbGlnbj86ICdsZWZ0JyB8ICdjZW50ZXInIHwgJ3JpZ2h0JztcblxuICAvKiogV2hldGhlciB0aGlzIGNvbHVtbiBpcyB2aXNpYmxlLiBEZWZhdWx0cyB0byBgdHJ1ZWAuICovXG4gIHZpc2libGU/OiBib29sZWFuO1xuXG4gIC8qKiBXaGV0aGVyIHRoaXMgY29sdW1uIGlzIHBpbm5lZC9mcm96ZW4uICovXG4gIHBpbm5lZD86ICdsZWZ0JyB8ICdyaWdodCcgfCBmYWxzZTtcblxuICAvKiogQ29sdW1uIGRpc3BsYXkgb3JkZXIgKGxvd2VyID0gZmlyc3QpLiAqL1xuICBvcmRlcj86IG51bWJlcjtcblxuICAvKiogQWdncmVnYXRlIGZ1bmN0aW9uIHRvIGRpc3BsYXkgaW4gYSBmb290ZXIgcm93LiAqL1xuICBhZ2dyZWdhdGU/OiAnc3VtJyB8ICdhdmcnIHwgJ2NvdW50JyB8ICdtaW4nIHwgJ21heCcgfCAnbm9uZSc7XG5cbiAgLyoqIFdoZXRoZXIgdG8gcmVuZGVyIGEgc2VsZWN0aW9uIGNoZWNrYm94IGluIHRoaXMgY29sdW1uJ3MgY2VsbHMuICovXG4gIGNoZWNrYm94U2VsZWN0aW9uPzogYm9vbGVhbjtcblxuICAvKiogV2hldGhlciB0byByZW5kZXIgYSBzZWxlY3QtYWxsIGNoZWNrYm94IGluIHRoaXMgY29sdW1uJ3MgaGVhZGVyLiAqL1xuICBoZWFkZXJDaGVja2JveFNlbGVjdGlvbj86IGJvb2xlYW47XG5cbiAgLyoqIE9wdGlvbmFsIGNlbGwtc3BlY2lmaWMgY2xpY2sgYWN0aW9uIChvdmVycmlkZXMgZ3JpZC1sZXZlbCByb3dDbGlja0FjdGlvbiBmb3IgdGhpcyBjb2x1bW4pLiAqL1xuICBhY3Rpb24/OiBHcmlkUm93Q2xpY2tBY3Rpb247XG59XG5cbi8qKlxuICogR3JpZC1sZXZlbCBvcHRpb25zLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEdyaWRPcHRpb25zRGVmaW5pdGlvbiB7XG4gIC8qKiBOdW1iZXIgb2Ygcm93cyBwZXIgcGFnZS4gKi9cbiAgcGFnZVNpemU/OiBudW1iZXI7XG5cbiAgLyoqIFdoZXRoZXIgcGFnaW5hdGlvbiBpcyBlbmFibGVkLiAqL1xuICBwYWdpbmF0aW9uPzogYm9vbGVhbjtcblxuICAvKiogV2hldGhlciByb3cgc2VsZWN0aW9uIGlzIGVuYWJsZWQuIERlZmF1bHRzIHRvIHRydWU7IHNldCBmYWxzZSB0byBkaXNhYmxlLiAqL1xuICBzZWxlY3RhYmxlPzogYm9vbGVhbjtcblxuICAvKiogU2VsZWN0aW9uIG1vZGUgd2hlbiBzZWxlY3RhYmxlIGlzIHRydWUuIERlZmF1bHRzIHRvICdtdWx0aXBsZScuICovXG4gIHNlbGVjdGlvbk1vZGU/OiAnc2luZ2xlJyB8ICdtdWx0aXBsZSc7XG5cbiAgLyoqIFNlbGVjdGlvbiBtb2RlIGFsaWFzIChjb21wYXRpYmxlIHdpdGggVWx0cmFHcmlkIGFuZCBBRyBHcmlkIHJvd1NlbGVjdGlvbikuICovXG4gIHJvd1NlbGVjdGlvbj86ICdzaW5nbGUnIHwgJ211bHRpcGxlJztcblxuICAvKiogV2hldGhlciB0byByZW5kZXIgc2VsZWN0aW9uIGNoZWNrYm94ZXMgb24gcm93cy4gRGVmYXVsdHMgdG8gdHJ1ZSB3aGVuIHNlbGVjdGFibGUgaXMgdHJ1ZS4gKi9cbiAgY2hlY2tib3hTZWxlY3Rpb24/OiBib29sZWFuO1xuXG4gIC8qKiBXaGV0aGVyIHRvIHJlbmRlciBhIHNlbGVjdC1hbGwgY2hlY2tib3ggaW4gdGhlIGhlYWRlci4gRGVmYXVsdHMgdG8gdHJ1ZSB3aGVuIG11bHRpLXJvdyBjaGVja2JveCBzZWxlY3Rpb24gaXMgYWN0aXZlLiAqL1xuICBoZWFkZXJDaGVja2JveFNlbGVjdGlvbj86IGJvb2xlYW47XG5cbiAgLyoqIFdoZXRoZXIgdG8gc2hvdyByb3cgbnVtYmVycy4gKi9cbiAgc2hvd1Jvd051bWJlcnM/OiBib29sZWFuO1xuXG4gIC8qKiBXaGV0aGVyIHRvIGFsbG93IGNvbHVtbiByZW9yZGVyaW5nLiAqL1xuICBhbGxvd0NvbHVtblJlb3JkZXI/OiBib29sZWFuO1xuXG4gIC8qKiBXaGV0aGVyIHRvIGFsbG93IGV4cG9ydGluZy4gKi9cbiAgYWxsb3dFeHBvcnQ/OiBib29sZWFuO1xuXG4gIC8qKiBFeHBvcnQgZm9ybWF0cyB0byBvZmZlci4gKi9cbiAgZXhwb3J0Rm9ybWF0cz86ICgnY3N2JyB8ICdleGNlbCcgfCAncGRmJylbXTtcblxuICAvKiogV2hldGhlciB0byBzaG93IGEgZm9vdGVyIHJvdyB3aXRoIGFnZ3JlZ2F0ZXMuICovXG4gIHNob3dGb290ZXI/OiBib29sZWFuO1xuXG4gIC8qKiBIZWlnaHQgb2YgdGhlIGdyaWQgKENTUyB2YWx1ZSkuICovXG4gIGhlaWdodD86IHN0cmluZztcblxuICAvKiogQWN0aXZlIGNvbHVtbiBncm91cGluZyBmaWVsZHMgaW4gb3JkZXIgKGUuZy4gWydicmFuY2gnLCAnY3VzdG9tZXInXSkuICovXG4gIGdyb3VwTW9kZWw/OiBzdHJpbmdbXTtcblxuICAvKiogQWN0aXZlIHNvcnQgbW9kZWwgZGVmaW5pdGlvbnMuICovXG4gIHNvcnRNb2RlbD86IHVua25vd25bXTtcblxuICAvKiogQ29tcGxldGUgc2VyaWFsaXplZCBncmlkIHJlcG9ydCBzdGF0ZSAoZmlsdGVycywgaGlnaGxpZ2h0cywgZ3JvdXBzKS4gKi9cbiAgcmVwb3J0U3RhdGU/OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcblxuICAvKiogVmlldyBwcmVzZXRzIC8gc2F2ZWQgY3VzdG9tIGdyaWQgdmlld3MuICovXG4gIHByZXNldHM/OiB1bmtub3duW107XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdGhlIGdyaWQgc2lkZSBwYW5lbCAodG9vbCBwYW5lbHMgZm9yIGNvbHVtbnMsIGZpbHRlcnMsIGhpZ2hsaWdodHMsIGV4cG9ydCwgYW5hbHl0aWNzLCBBSSBjaGF0KSBpcyBlbmFibGVkLlxuICAgKiBTdGFuZGFyZCBCV2F5cy1ncmlkIC8gVWx0cmFHcmlkIGZlYXR1cmUuIERlZmF1bHRzIHRvIGB0cnVlYC5cbiAgICovXG4gIHNpZGVCYXI/OiBib29sZWFuIHwge1xuICAgIHZpc2libGU/OiBib29sZWFuO1xuICAgIHBhbmVsPzogKCdjb2x1bW5zJyB8ICdmaWx0ZXJzJyB8ICdoaWdobGlnaHRzJyB8ICdleHBvcnQnIHwgJ2FuYWx5dGljcycgfCAnY2hhdCcpW107XG4gIH07XG5cbiAgLyoqIFdoZXRoZXIgdGhlIHJlYWwtdGltZSBnbG9iYWwgc2VhcmNoIGJhciBpcyBlbmFibGVkLiBEZWZhdWx0cyB0byBgdHJ1ZWAuICovXG4gIGdsb2JhbFNlYXJjaD86IGJvb2xlYW47XG5cbiAgLyoqIFdoZXRoZXIgdGhlIGJvdHRvbSBzdGF0dXMgYmFyIGlzIGVuYWJsZWQuIERlZmF1bHRzIHRvIGB0cnVlYC4gKi9cbiAgc3RhdHVzQmFyPzogYm9vbGVhbjtcblxuICAvKiogRGVjbGFyYXRpdmUgcm93LWNsaWNrIGFjdGlvbiBmb3IgbWFzdGVyLWRldGFpbCBkcmlsbC1kb3ducy4gKi9cbiAgcm93Q2xpY2tBY3Rpb24/OiBHcmlkUm93Q2xpY2tBY3Rpb247XG59XG4iXX0=
@@ -0,0 +1,79 @@
1
+ import { DOCUMENT } from '@angular/common';
2
+ import { CSP_NONCE, Injectable, NgZone, inject } from '@angular/core';
3
+ import { Overlay } from '@angular/cdk/overlay';
4
+ import { ScrollDispatcher } from '@angular/cdk/scrolling';
5
+ import * as i0 from "@angular/core";
6
+ /** CDK structural styles, embedded so standalone components need no host CSS import.
7
+ * Compatible with CDK's overlay-prebuilt.css; no theme or !important overrides.
8
+ * CDK structural CSS is MIT licensed; see third-party-notices/angular-cdk-LICENSE.txt.
9
+ */
10
+ const OVERLAY_STYLES = ".cdk-overlay-container,.cdk-global-overlay-wrapper{pointer-events:none;top:0;left:0;height:100%;width:100%}.cdk-overlay-container{position:fixed;z-index:var(--rpt-overlay-z-index,1000)}.cdk-overlay-container:empty{display:none}.cdk-global-overlay-wrapper{display:flex;position:absolute;z-index:1000}.cdk-overlay-pane{position:absolute;pointer-events:auto;box-sizing:border-box;z-index:1000;display:flex;max-width:100%;max-height:100%}.cdk-overlay-backdrop{position:absolute;top:0;bottom:0;left:0;right:0;z-index:1000;pointer-events:auto;-webkit-tap-highlight-color:rgba(0,0,0,0);transition:opacity 400ms cubic-bezier(0.25, 0.8, 0.25, 1);opacity:0}.cdk-overlay-backdrop.cdk-overlay-backdrop-showing{opacity:1}.cdk-high-contrast-active .cdk-overlay-backdrop.cdk-overlay-backdrop-showing{opacity:.6}.cdk-overlay-dark-backdrop{background:rgba(0,0,0,.32)}.cdk-overlay-transparent-backdrop{transition:visibility 1ms linear,opacity 1ms linear;visibility:hidden;opacity:1}.cdk-overlay-transparent-backdrop.cdk-overlay-backdrop-showing{opacity:0;visibility:visible}.cdk-overlay-backdrop-noop-animation{transition:none}.cdk-overlay-connected-position-bounding-box{position:absolute;z-index:1000;display:flex;flex-direction:column;min-width:1px;min-height:1px}.cdk-global-scrollblock{position:fixed;width:100%;overflow-y:scroll}";
11
+ // Library modal appearance must also work without the optional theme asset.
12
+ const DIALOG_STYLES = '.rpt-dialog-backdrop{background-color:rgba(15,23,42,.48);backdrop-filter:blur(3px)}';
13
+ const STYLE_ID = 'rpt-overlay-base-styles';
14
+ export class ReportOverlayService {
15
+ document = inject(DOCUMENT);
16
+ nonce = inject(CSP_NONCE, { optional: true });
17
+ overlay = inject(Overlay);
18
+ scrollDispatcher = inject(ScrollDispatcher);
19
+ zone = inject(NgZone);
20
+ ensureStyles() {
21
+ if (this.document.getElementById(STYLE_ID))
22
+ return;
23
+ const style = this.document.createElement('style');
24
+ style.id = STYLE_ID;
25
+ if (this.nonce)
26
+ style.setAttribute('nonce', this.nonce);
27
+ style.textContent = OVERLAY_STYLES + DIALOG_STYLES;
28
+ (this.document.head ?? this.document.documentElement).appendChild(style);
29
+ }
30
+ /** Retain CDK's scroll strategy; cover native, unregistered host ancestors too. */
31
+ scrollStrategy(origin) {
32
+ this.ensureStyles();
33
+ const delegate = this.overlay.scrollStrategies.reposition({ scrollThrottle: 16 });
34
+ const view = this.document.defaultView;
35
+ let overlayRef;
36
+ let frame;
37
+ let enabled = false;
38
+ const onScroll = (event) => {
39
+ const target = event.target;
40
+ if (!target || target.nodeType !== 1 || !target.contains(origin()))
41
+ return;
42
+ // Registered ancestors already notify the delegate. Menu-list scrolling
43
+ // is excluded because the menu does not contain its trigger.
44
+ if (this.scrollDispatcher.getAncestorScrollContainers(origin()).some(container => container.getElementRef().nativeElement === target))
45
+ return;
46
+ if (frame === undefined && view)
47
+ frame = view.requestAnimationFrame(() => {
48
+ frame = undefined;
49
+ if (enabled && overlayRef?.hasAttached())
50
+ overlayRef.updatePosition();
51
+ });
52
+ };
53
+ return {
54
+ attach: ref => { overlayRef = ref; delegate.attach(ref); },
55
+ enable: () => {
56
+ if (enabled)
57
+ return;
58
+ enabled = true;
59
+ delegate.enable();
60
+ this.zone.runOutsideAngular(() => this.document.addEventListener('scroll', onScroll, true));
61
+ },
62
+ disable: () => {
63
+ enabled = false;
64
+ delegate.disable();
65
+ this.document.removeEventListener('scroll', onScroll, true);
66
+ if (frame !== undefined && view)
67
+ view.cancelAnimationFrame(frame);
68
+ frame = undefined;
69
+ },
70
+ };
71
+ }
72
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: ReportOverlayService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
73
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: ReportOverlayService, providedIn: 'root' });
74
+ }
75
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: ReportOverlayService, decorators: [{
76
+ type: Injectable,
77
+ args: [{ providedIn: 'root' }]
78
+ }] });
79
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVwb3J0LW92ZXJsYXkuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2J3YXlzLXJlcG9ydC9zcmMvbGliL2NvcmUvc2VydmljZXMvcmVwb3J0LW92ZXJsYXkuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDM0MsT0FBTyxFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN0RSxPQUFPLEVBQUUsT0FBTyxFQUE4QixNQUFNLHNCQUFzQixDQUFDO0FBQzNFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHdCQUF3QixDQUFDOztBQUUxRDs7O0dBR0c7QUFDSCxNQUFNLGNBQWMsR0FBRyx1eUNBQXV5QyxDQUFDO0FBQy96Qyw0RUFBNEU7QUFDNUUsTUFBTSxhQUFhLEdBQUcscUZBQXFGLENBQUM7QUFDNUcsTUFBTSxRQUFRLEdBQUcseUJBQXlCLENBQUM7QUFHM0MsTUFBTSxPQUFPLG9CQUFvQjtJQUNkLFFBQVEsR0FBRyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDNUIsS0FBSyxHQUFHLE1BQU0sQ0FBQyxTQUFTLEVBQUUsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztJQUM5QyxPQUFPLEdBQUcsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQzFCLGdCQUFnQixHQUFHLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO0lBQzVDLElBQUksR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUM7SUFFdkMsWUFBWTtRQUNWLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxjQUFjLENBQUMsUUFBUSxDQUFDO1lBQUUsT0FBTztRQUNuRCxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLGFBQWEsQ0FB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WUFDcEIsQ0FBQztTQUNGLENBQUM7SUFDSixDQUFDO3dHQWpEVSxvQkFBb0I7NEdBQXBCLG9CQUFvQixjQURQLE1BQU07OzRGQUNuQixvQkFBb0I7a0JBRGhDLFVBQVU7bUJBQUMsRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRE9DVU1FTlQgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgQ1NQX05PTkNFLCBJbmplY3RhYmxlLCBOZ1pvbmUsIGluamVjdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgT3ZlcmxheSwgT3ZlcmxheVJlZiwgU2Nyb2xsU3RyYXRlZ3kgfSBmcm9tICdAYW5ndWxhci9jZGsvb3ZlcmxheSc7XG5pbXBvcnQgeyBTY3JvbGxEaXNwYXRjaGVyIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL3Njcm9sbGluZyc7XG5cbi8qKiBDREsgc3RydWN0dXJhbCBzdHlsZXMsIGVtYmVkZGVkIHNvIHN0YW5kYWxvbmUgY29tcG9uZW50cyBuZWVkIG5vIGhvc3QgQ1NTIGltcG9ydC5cbiAqIENvbXBhdGlibGUgd2l0aCBDREsncyBvdmVybGF5LXByZWJ1aWx0LmNzczsgbm8gdGhlbWUgb3IgIWltcG9ydGFudCBvdmVycmlkZXMuXG4gKiBDREsgc3RydWN0dXJhbCBDU1MgaXMgTUlUIGxpY2Vuc2VkOyBzZWUgdGhpcmQtcGFydHktbm90aWNlcy9hbmd1bGFyLWNkay1MSUNFTlNFLnR4dC5cbiAqL1xuY29uc3QgT1ZFUkxBWV9TVFlMRVMgPSBcIi5jZGstb3ZlcmxheS1jb250YWluZXIsLmNkay1nbG9iYWwtb3ZlcmxheS13cmFwcGVye3BvaW50ZXItZXZlbnRzOm5vbmU7dG9wOjA7bGVmdDowO2hlaWdodDoxMDAlO3dpZHRoOjEwMCV9LmNkay1vdmVybGF5LWNvbnRhaW5lcntwb3NpdGlvbjpmaXhlZDt6LWluZGV4OnZhcigtLXJwdC1vdmVybGF5LXotaW5kZXgsMTAwMCl9LmNkay1vdmVybGF5LWNvbnRhaW5lcjplbXB0eXtkaXNwbGF5Om5vbmV9LmNkay1nbG9iYWwtb3ZlcmxheS13cmFwcGVye2Rpc3BsYXk6ZmxleDtwb3NpdGlvbjphYnNvbHV0ZTt6LWluZGV4OjEwMDB9LmNkay1vdmVybGF5LXBhbmV7cG9zaXRpb246YWJzb2x1dGU7cG9pbnRlci1ldmVudHM6YXV0bztib3gtc2l6aW5nOmJvcmRlci1ib3g7ei1pbmRleDoxMDAwO2Rpc3BsYXk6ZmxleDttYXgtd2lkdGg6MTAwJTttYXgtaGVpZ2h0OjEwMCV9LmNkay1vdmVybGF5LWJhY2tkcm9we3Bvc2l0aW9uOmFic29sdXRlO3RvcDowO2JvdHRvbTowO2xlZnQ6MDtyaWdodDowO3otaW5kZXg6MTAwMDtwb2ludGVyLWV2ZW50czphdXRvOy13ZWJraXQtdGFwLWhpZ2hsaWdodC1jb2xvcjpyZ2JhKDAsMCwwLDApO3RyYW5zaXRpb246b3BhY2l0eSA0MDBtcyBjdWJpYy1iZXppZXIoMC4yNSwgMC44LCAwLjI1LCAxKTtvcGFjaXR5OjB9LmNkay1vdmVybGF5LWJhY2tkcm9wLmNkay1vdmVybGF5LWJhY2tkcm9wLXNob3dpbmd7b3BhY2l0eToxfS5jZGstaGlnaC1jb250cmFzdC1hY3RpdmUgLmNkay1vdmVybGF5LWJhY2tkcm9wLmNkay1vdmVybGF5LWJhY2tkcm9wLXNob3dpbmd7b3BhY2l0eTouNn0uY2RrLW92ZXJsYXktZGFyay1iYWNrZHJvcHtiYWNrZ3JvdW5kOnJnYmEoMCwwLDAsLjMyKX0uY2RrLW92ZXJsYXktdHJhbnNwYXJlbnQtYmFja2Ryb3B7dHJhbnNpdGlvbjp2aXNpYmlsaXR5IDFtcyBsaW5lYXIsb3BhY2l0eSAxbXMgbGluZWFyO3Zpc2liaWxpdHk6aGlkZGVuO29wYWNpdHk6MX0uY2RrLW92ZXJsYXktdHJhbnNwYXJlbnQtYmFja2Ryb3AuY2RrLW92ZXJsYXktYmFja2Ryb3Atc2hvd2luZ3tvcGFjaXR5OjA7dmlzaWJpbGl0eTp2aXNpYmxlfS5jZGstb3ZlcmxheS1iYWNrZHJvcC1ub29wLWFuaW1hdGlvbnt0cmFuc2l0aW9uOm5vbmV9LmNkay1vdmVybGF5LWNvbm5lY3RlZC1wb3NpdGlvbi1ib3VuZGluZy1ib3h7cG9zaXRpb246YWJzb2x1dGU7ei1pbmRleDoxMDAwO2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW47bWluLXdpZHRoOjFweDttaW4taGVpZ2h0OjFweH0uY2RrLWdsb2JhbC1zY3JvbGxibG9ja3twb3NpdGlvbjpmaXhlZDt3aWR0aDoxMDAlO292ZXJmbG93LXk6c2Nyb2xsfVwiO1xuLy8gTGlicmFyeSBtb2RhbCBhcHBlYXJhbmNlIG11c3QgYWxzbyB3b3JrIHdpdGhvdXQgdGhlIG9wdGlvbmFsIHRoZW1lIGFzc2V0LlxuY29uc3QgRElBTE9HX1NUWUxFUyA9ICcucnB0LWRpYWxvZy1iYWNrZHJvcHtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMTUsMjMsNDIsLjQ4KTtiYWNrZHJvcC1maWx0ZXI6Ymx1cigzcHgpfSc7XG5jb25zdCBTVFlMRV9JRCA9ICdycHQtb3ZlcmxheS1iYXNlLXN0eWxlcyc7XG5cbkBJbmplY3RhYmxlKHsgcHJvdmlkZWRJbjogJ3Jvb3QnIH0pXG5leHBvcnQgY2xhc3MgUmVwb3J0T3ZlcmxheVNlcnZpY2Uge1xuICBwcml2YXRlIHJlYWRvbmx5IGRvY3VtZW50ID0gaW5qZWN0KERPQ1VNRU5UKTtcbiAgcHJpdmF0ZSByZWFkb25seSBub25jZSA9IGluamVjdChDU1BfTk9OQ0UsIHsgb3B0aW9uYWw6IHRydWUgfSk7XG4gIHByaXZhdGUgcmVhZG9ubHkgb3ZlcmxheSA9IGluamVjdChPdmVybGF5KTtcbiAgcHJpdmF0ZSByZWFkb25seSBzY3JvbGxEaXNwYXRjaGVyID0gaW5qZWN0KFNjcm9sbERpc3BhdGNoZXIpO1xuICBwcml2YXRlIHJlYWRvbmx5IHpvbmUgPSBpbmplY3QoTmdab25lKTtcblxuICBlbnN1cmVTdHlsZXMoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoU1RZTEVfSUQpKSByZXR1cm47XG4gICAgY29uc3Qgc3R5bGUgPSB0aGlzLmRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3N0eWxlJyk7XG4gICAgc3R5bGUuaWQgPSBTVFlMRV9JRDtcbiAgICBpZiAodGhpcy5ub25jZSkgc3R5bGUuc2V0QXR0cmlidXRlKCdub25jZScsIHRoaXMubm9uY2UpO1xuICAgIHN0eWxlLnRleHRDb250ZW50ID0gT1ZFUkxBWV9TVFlMRVMgKyBESUFMT0dfU1RZTEVTO1xuICAgICh0aGlzLmRvY3VtZW50LmhlYWQgPz8gdGhpcy5kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQpLmFwcGVuZENoaWxkKHN0eWxlKTtcbiAgfVxuXG4gIC8qKiBSZXRhaW4gQ0RLJ3Mgc2Nyb2xsIHN0cmF0ZWd5OyBjb3ZlciBuYXRpdmUsIHVucmVnaXN0ZXJlZCBob3N0IGFuY2VzdG9ycyB0b28uICovXG4gIHNjcm9sbFN0cmF0ZWd5KG9yaWdpbjogKCkgPT4gSFRNTEVsZW1lbnQpOiBTY3JvbGxTdHJhdGVneSB7XG4gICAgdGhpcy5lbnN1cmVTdHlsZXMoKTtcbiAgICBjb25zdCBkZWxlZ2F0ZSA9IHRoaXMub3ZlcmxheS5zY3JvbGxTdHJhdGVnaWVzLnJlcG9zaXRpb24oeyBzY3JvbGxUaHJvdHRsZTogMTYgfSk7XG4gICAgY29uc3QgdmlldyA9IHRoaXMuZG9jdW1lbnQuZGVmYXVsdFZpZXc7XG4gICAgbGV0IG92ZXJsYXlSZWY6IE92ZXJsYXlSZWYgfCB1bmRlZmluZWQ7XG4gICAgbGV0IGZyYW1lOiBudW1iZXIgfCB1bmRlZmluZWQ7XG4gICAgbGV0IGVuYWJsZWQgPSBmYWxzZTtcbiAgICBjb25zdCBvblNjcm9sbCA9IChldmVudDogRXZlbnQpID0+IHtcbiAgICAgIGNvbnN0IHRhcmdldCA9IGV2ZW50LnRhcmdldCBhcyBIVE1MRWxlbWVudCB8IG51bGw7XG4gICAgICBpZiAoIXRhcmdldCB8fCB0YXJnZXQubm9kZVR5cGUgIT09IDEgfHwgIXRhcmdldC5jb250YWlucyhvcmlnaW4oKSkpIHJldHVybjtcbiAgICAgIC8vIFJlZ2lzdGVyZWQgYW5jZXN0b3JzIGFscmVhZHkgbm90aWZ5IHRoZSBkZWxlZ2F0ZS4gTWVudS1saXN0IHNjcm9sbGluZ1xuICAgICAgLy8gaXMgZXhjbHVkZWQgYmVjYXVzZSB0aGUgbWVudSBkb2VzIG5vdCBjb250YWluIGl0cyB0cmlnZ2VyLlxuICAgICAgaWYgKHRoaXMuc2Nyb2xsRGlzcGF0Y2hlci5nZXRBbmNlc3RvclNjcm9sbENvbnRhaW5lcnMob3JpZ2luKCkpLnNvbWUoY29udGFpbmVyID0+IGNvbnRhaW5lci5nZXRFbGVtZW50UmVmKCkubmF0aXZlRWxlbWVudCA9PT0gdGFyZ2V0KSkgcmV0dXJuO1xuICAgICAgaWYgKGZyYW1lID09PSB1bmRlZmluZWQgJiYgdmlldykgZnJhbWUgPSB2aWV3LnJlcXVlc3RBbmltYXRpb25GcmFtZSgoKSA9PiB7XG4gICAgICAgIGZyYW1lID0gdW5kZWZpbmVkO1xuICAgICAgICBpZiAoZW5hYmxlZCAmJiBvdmVybGF5UmVmPy5oYXNBdHRhY2hlZCgpKSBvdmVybGF5UmVmLnVwZGF0ZVBvc2l0aW9uKCk7XG4gICAgICB9KTtcbiAgICB9O1xuICAgIHJldHVybiB7XG4gICAgICBhdHRhY2g6IHJlZiA9PiB7IG92ZXJsYXlSZWYgPSByZWY7IGRlbGVnYXRlLmF0dGFjaChyZWYpOyB9LFxuICAgICAgZW5hYmxlOiAoKSA9PiB7XG4gICAgICAgIGlmIChlbmFibGVkKSByZXR1cm47XG4gICAgICAgIGVuYWJsZWQgPSB0cnVlOyBkZWxlZ2F0ZS5lbmFibGUoKTtcbiAgICAgICAgdGhpcy56b25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpID0+IHRoaXMuZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignc2Nyb2xsJywgb25TY3JvbGwsIHRydWUpKTtcbiAgICAgIH0sXG4gICAgICBkaXNhYmxlOiAoKSA9PiB7XG4gICAgICAgIGVuYWJsZWQgPSBmYWxzZTsgZGVsZWdhdGUuZGlzYWJsZSgpO1xuICAgICAgICB0aGlzLmRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3Njcm9sbCcsIG9uU2Nyb2xsLCB0cnVlKTtcbiAgICAgICAgaWYgKGZyYW1lICE9PSB1bmRlZmluZWQgJiYgdmlldykgdmlldy5jYW5jZWxBbmltYXRpb25GcmFtZShmcmFtZSk7XG4gICAgICAgIGZyYW1lID0gdW5kZWZpbmVkO1xuICAgICAgfSxcbiAgICB9O1xuICB9XG59XG4iXX0=
@@ -1,5 +1,39 @@
1
1
  import { getFieldCaseInsensitive } from './data-normalization.util';
2
2
  const TOKEN_RE = /^\{\{\s*(.+?)\s*\}\}$/;
3
+ /** Supported wire formats for date-bound procedure/API parameters. */
4
+ export const PARAMETER_DATE_FORMATS = ['yyyy-MM-dd', 'yyyyMMdd', 'dd/MM/yyyy', 'MM/dd/yyyy', 'dd-MM-yyyy'];
5
+ /** The optional date pipe is persisted in existing string mappings. */
6
+ export function parseParameterToken(raw) {
7
+ const match = TOKEN_RE.exec(raw);
8
+ if (!match)
9
+ return null;
10
+ const parts = match[1].split(/\s*\|\s*date\s*:\s*/);
11
+ if (parts.length === 1)
12
+ return { field: parts[0].trim() };
13
+ const format = parts[1];
14
+ return { field: parts[0].trim(), dateFormat: parts.length === 2 ? format : parts.slice(1).join(' | date:') };
15
+ }
16
+ /** Format calendar parts directly, avoiding UTC/time-zone shifts and locale parsing. */
17
+ export function formatParameterDate(value, format) {
18
+ if (!PARAMETER_DATE_FORMATS.includes(format))
19
+ throw new Error('Unsupported parameter date format. Choose a date format in the Field binding.');
20
+ if (value === '' || value === null || value === undefined)
21
+ return '';
22
+ const raw = value instanceof Date
23
+ ? value.getFullYear() + '-' + String(value.getMonth() + 1).padStart(2, '0') + '-' + String(value.getDate()).padStart(2, '0')
24
+ : String(value);
25
+ const match = /^(\d{4})-?(\d{2})-?(\d{2})(?:T.*)?$/.exec(raw);
26
+ if (!match)
27
+ throw new Error('Invalid date. Select a valid date in the linked field.');
28
+ const [, year, month, day] = match;
29
+ const probe = new Date(0);
30
+ probe.setFullYear(+year, +month - 1, +day);
31
+ probe.setHours(0, 0, 0, 0);
32
+ if (probe.getFullYear() !== +year || probe.getMonth() + 1 !== +month || probe.getDate() !== +day) {
33
+ throw new Error('Invalid date. Select a valid date in the linked field.');
34
+ }
35
+ return format.replace('yyyy', year).replace('MM', month).replace('dd', day);
36
+ }
3
37
  const pad = (n) => String(n).padStart(2, '0');
4
38
  const formatYMD = (d) => `${d.getFullYear()}-${pad(d.getMonth() + 1)}-${pad(d.getDate())}`;
5
39
  /** Resolves `{{context.xxx}}` presets such as today / startOfMonth. */
@@ -202,31 +236,50 @@ export function parseSqlExecStatement(sql) {
202
236
  export function resolveParameterValue(raw, session, formValues) {
203
237
  if (typeof raw !== 'string')
204
238
  return raw;
205
- const m = TOKEN_RE.exec(raw);
206
- if (!m)
239
+ const token = parseParameterToken(raw);
240
+ if (!token)
207
241
  return sanitizeSqlParamLiteral(raw);
208
- const inner = m[1];
242
+ const inner = token.field;
243
+ const format = (value) => token.dateFormat ? formatParameterDate(value, token.dateFormat) : value;
209
244
  if (inner.startsWith('session.')) {
210
245
  const sessionKey = inner.slice(8);
211
246
  const val = getFieldCaseInsensitive(session, sessionKey);
212
- return val !== undefined && val !== null ? val : '';
247
+ return format(val !== undefined && val !== null ? val : '');
213
248
  }
214
249
  if (inner.startsWith('context.')) {
215
- return resolveContextPreset(inner.slice(8));
250
+ return format(resolveContextPreset(inner.slice(8)));
216
251
  }
217
252
  const v = resolveCanvasFieldValue(formValues, inner);
218
- return v !== undefined && v !== null ? v : '';
253
+ return format(v !== undefined && v !== null ? v : '');
254
+ }
255
+ /** Canonical SQL argument names. Equal aliases collapse; conflicting values fail explicitly. */
256
+ export function normalizeParameterNames(parameters) {
257
+ const out = {};
258
+ const names = new Map();
259
+ for (const [rawKey, value] of Object.entries(parameters)) {
260
+ const key = rawKey.replace(/^@+/, '');
261
+ if (!key)
262
+ throw new Error('A parameter name cannot be empty.');
263
+ const existing = names.get(key.toLowerCase());
264
+ if (existing !== undefined) {
265
+ if (!Object.is(out[existing], value) && JSON.stringify(out[existing]) !== JSON.stringify(value)) {
266
+ throw new Error('Conflicting values for parameter "' + existing + '". Keep one mapping for this parameter.');
267
+ }
268
+ continue;
269
+ }
270
+ names.set(key.toLowerCase(), key);
271
+ Object.defineProperty(out, key, { value, enumerable: true, configurable: true, writable: true });
272
+ }
273
+ return out;
219
274
  }
220
- /** Resolves every mapping into concrete values (de-duplicating `@name` / `name`). */
275
+ /** Resolves mappings into one concrete value per parameter, without @ aliases. */
221
276
  export function resolveParameterMappings(mappings, session, formValues) {
222
277
  const out = {};
223
278
  for (const [key, raw] of Object.entries(mappings ?? {})) {
224
279
  const val = resolveParameterValue(raw, session, formValues);
225
- const cleanKey = key.replace(/^@/, '');
226
- out[cleanKey] = val;
227
- out[`@${cleanKey}`] = val;
280
+ Object.defineProperty(out, key, { value: val, enumerable: true });
228
281
  }
229
- return out;
282
+ return normalizeParameterNames(out);
230
283
  }
231
284
  /**
232
285
  * Returns canvas field keys referenced by mappings that currently have no value.
@@ -237,10 +290,10 @@ export function findMissingCanvasFields(mappings, formValues) {
237
290
  for (const raw of Object.values(mappings ?? {})) {
238
291
  if (typeof raw !== 'string')
239
292
  continue;
240
- const m = TOKEN_RE.exec(raw);
241
- if (!m)
293
+ const token = parseParameterToken(raw);
294
+ if (!token)
242
295
  continue;
243
- const inner = m[1];
296
+ const inner = token.field;
244
297
  if (inner.startsWith('session.') || inner.startsWith('context.'))
245
298
  continue;
246
299
  const v = resolveCanvasFieldValue(formValues, inner);
@@ -293,4 +346,4 @@ export function toFieldKey(paramName) {
293
346
  const clean = stripped.replace(/[^a-zA-Z0-9]+(.)?/g, (_m, c) => (c ? c.toUpperCase() : ''));
294
347
  return clean ? clean.charAt(0).toLowerCase() + clean.slice(1) : paramName;
295
348
  }
296
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVwb3J0LXBhcmFtZXRlci51dGlsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYndheXMtcmVwb3J0L3NyYy9saWIvY29yZS91dGlscy9yZXBvcnQtcGFyYW1ldGVyLnV0aWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBRUEsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFJcEUsTUFBTSxRQUFRLEdBQUcsdUJBQXVCLENBQUM7QUFFekMsTUFBTSxHQUFHLEdBQUcsQ0FBQyxDQUFTLEVBQVUsRUFBRSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQzlELE1BQU0sU0FBUyxHQUFHLENBQUMsQ0FBTyxFQUFVLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxXQUFXLEVBQUUsSUFBSSxHQUFHLENBQUMsQ0FBQyxDQUFDLFFBQVEsRUFBRSxHQUFHLENBQUMsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDLENBQUMsT0FBTyxFQUFFLENBQUMsRUFBRSxDQUFDO0FBRXpHLHVFQUF1RTtBQUN2RSxNQUFNLFVBQVUsb0JBQW9CLENBQUMsR0FBVztJQUM5QyxNQUFNLEdBQUcsR0FBRyxJQUFJLElBQUksRUFBRSxDQUFDO0lBQ3ZCLFFBQVEsR0FBRyxDQUFDLFdBQVcsRUFBRSxFQUFFLENBQUM7UUFDMUIsS0FBSyxXQUFXLENBQUMsQ0FBQyxDQUFDO1lBQ2pCLE1BQU0sQ0FBQyxHQUFHLElBQUksSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQ3hCLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLE9BQU8sRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDO1lBQzNCLE9BQU8sU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3RCLENBQUM7UUFDRCxLQUFLLGNBQWM7WUFDakIsT0FBTyxHQUFHLEdBQUcsQ0FB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Q0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLGtCQUFrQjtZQUM1QyxpQkFBaUIsRUFBRSxHQUFHLENBQUMsaUJBQWlCO1NBQ3pDLENBQUM7SUFDSixDQUFDO0lBQ0QsT0FBTyxJQUFJLENBQUM7QUFDZCxDQUFDO0FBRUQsMEVBQTBFO0FBQzFFLE1BQU0sVUFBVSxVQUFVLENBQUMsU0FBaUI7SUFDMUMsTUFBTSxRQUFRLEdBQUcsU0FBUztTQUN2QixPQUFPLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQztTQUNsQixPQUFPLENBQUMsdURBQXVELEVBQUUsRUFBRSxDQUFDLENBQUM7SUFDeEUsTUFBTSxLQUFLLEdBQUcsUUFBUSxDQUFDLE9BQU8sQ0FBQyxvQkFBb0IsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFxQixFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQ2hILE9BQU8sS0FBSyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsRUFBRSxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQztBQUM1RSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgUmVwb3J0RGVmaW5pdGlvbiB9IGZyb20gJy4uL21vZGVscy9yZXBvcnQtZGVmaW5pdGlvbi5tb2RlbCc7XG5pbXBvcnQgeyBSZXBvcnREYXRhU291cmNlRGVmaW5pdGlvbiB9IGZyb20gJy4uL21vZGVscy9yZXBvcnQtZGF0YXNvdXJjZS5tb2RlbCc7XG5pbXBvcnQgeyBnZXRGaWVsZENhc2VJbnNlbnNpdGl2ZSB9IGZyb20gJy4vZGF0YS1ub3JtYWxpemF0aW9uLnV0aWwnO1xuXG5leHBvcnQgdHlwZSBQYXJhbWV0ZXJNYXBwaW5ncyA9IFJlY29yZDxzdHJpbmcsIHN0cmluZyB8IG51bWJlciB8IGJvb2xlYW4+O1xuXG5jb25zdCBUT0tFTl9SRSA9IC9eXFx7XFx7XFxzKiguKz8pXFxzKlxcfVxcfSQvO1xuXG5jb25zdCBwYWQgPSAobjogbnVtYmVyKTogc3RyaW5nID0+IFN0cmluZyhuKS5wYWRTdGFydCgyLCAnMCcpO1xuY29uc3QgZm9ybWF0WU1EID0gKGQ6IERhdGUpOiBzdHJpbmcgPT4gYCR7ZC5nZXRGdWxsWWVhcigpfS0ke3BhZChkLmdldE1vbnRoKCkgKyAxKX0tJHtwYWQoZC5nZXREYXRlKCkpfWA7XG5cbi8qKiBSZXNvbHZlcyBge3tjb250ZXh0Lnh4eH19YCBwcmVzZXRzIHN1Y2ggYXMgdG9kYXkgLyBzdGFydE9mTW9udGguICovXG5leHBvcnQgZnVuY3Rpb24gcmVzb2x2ZUNvbnRleHRQcmVzZXQoa2V5OiBzdHJpbmcpOiBzdHJpbmcge1xuICBjb25zdCBub3cgPSBuZXcgRGF0ZSgpO1xuICBzd2l0Y2ggKGtleS50b0xvd2VyQ2FzZSgpKSB7XG4gICAgY2FzZSAneWVzdGVyZGF5Jzoge1xuICAgICAgY29uc3QgeSA9IG5ldyBEYXRlKG5vdyk7XG4gICAgICB5LnNldERhdGUoeS5nZXREYXRlKCkgLSAxKTtcbiAgICAgIHJldHVybiBmb3JtYXRZTUQoeSk7XG4gICAgfVxuICAgIGNhc2UgJ3N0YXJ0b2Ztb250aCc6XG4gICAgICByZXR1cm4gYCR7bm93LmdldEZ1bGxZZWFyKCl9LSR7cGFkKG5vdy5nZXRNb250aCgpICsgMSl9LTAxYDtcbiAgICBjYXNlICdlbmRvZm1vbnRoJzpcbiAgICAgIHJldHVybiBmb3JtYXRZTUQobmV3IERhdGUobm93LmdldEZ1bGxZZWFyKCksIG5vdy5nZXRNb250aCgpICsgMSwgMCkpO1xuICAgIGNhc2UgJ3N0YXJ0b2Z5ZWFyJzpcbiAgICAgIHJldHVybiBgJHtub3cuZ2V0RnVsbFllYXIoKX0tMDEtMDFgO1xuICAgIGNhc2UgJ3RvZGF5JzpcbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIGZvcm1hdFlNRChub3cpO1xuICB9XG59XG5cbi8qKlxuICogTG9va3MgdXAgYSBmaWVsZCB2YWx1ZSBmcm9tIGZvcm1WYWx1ZXMgc3VwcG9ydGluZyBkaXJlY3QgbmFtZXMsIGRvdCBwYXRocyAoYS5iKSxcbiAqIGFuZCBjb21wb3VuZCBkYXRlIHJhbmdlcyAoZS5nLiBkYXRlUmFuZ2UuZnJvbSwgZGF0ZVJhbmdlX2Zyb20sIGRhdGVSYW5nZUZyb20pLlxuICovXG5leHBvcnQgZnVuY3Rpb24gcmVzb2x2ZUNhbnZhc0ZpZWxkVmFsdWUoXG4gIGZvcm1WYWx1ZXM6IFJlY29yZDxzdHJpbmcsIHVua25vd24+LFxuICBpbm5lcjogc3RyaW5nXG4pOiB1bmtub3duIHtcbiAgLy8gMS4gRGlyZWN0IGNhc2UtaW5zZW5zaXRpdmUgbG9va3VwXG4gIGNvbnN0IGRpcmVjdCA9IGdldEZpZWxkQ2FzZUluc2Vuc2l0aXZlKGZvcm1WYWx1ZXMsIGlubmVyKTtcbiAgaWYgKGRpcmVjdCAhPT0gdW5kZWZpbmVkICYmIGRpcmVjdCAhPT0gbnVsbCkge1xuICAgIHJldHVybiBkaXJlY3Q7XG4gIH1cblxuICAvLyAyLiBEb3QtcGF0aCBsb29rdXAgKGUuZy4gZGF0ZVJhbmdlLmZyb20gb3IgdXNlci5hZGRyZXNzLmNpdHkpXG4gIGlmIChpbm5lci5pbmNsdWRlcygnLicpKSB7XG4gICAgY29uc3QgcGFydHMgPSBpbm5lci5zcGxpdCgnLicpO1xuICAgIGxldCBjdXJyOiB1bmtub3duID0gZm9ybVZhbHVlcztcbiAgICBmb3IgKGNvbnN0IHAgb2YgcGFydHMpIHtcbiAgICAgIGlmIChjdXJyICYmIHR5cGVvZiBjdXJyID09PSAnb2JqZWN0Jykge1xuICAgICAgICBjdXJyID0gZ2V0RmllbGRDYXNlSW5zZW5zaXRpdmUoY3VyciBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiwgcCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjdXJyID0gdW5kZWZpbmVkO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKGN1cnIgIT09IHVuZGVmaW5lZCAmJiBjdXJyICE9PSBudWxsKSB7XG4gICAgICByZXR1cm4gY3VycjtcbiAgICB9XG4gIH1cblxuICAvLyAzLiBDb21wb3VuZCBkYXRlIHJhbmdlIG1hdGNoaW5nIChlLmcuIGRhdGVSYW5nZV9mcm9tLCBkYXRlUmFuZ2VGcm9tLCBmcm9tRGF0ZSwgdG9EYXRlKVxuICBjb25zdCBsb3dlcklubmVyID0gaW5uZXIudG9Mb3dlckNhc2UoKTtcbiAgY29uc3QgaXNGcm9tID1cbiAgICBsb3dlcklubmVyLmVuZHNXaXRoKCdfZnJvbScpIHx8XG4gICAgbG93ZXJJbm5lci5lbmRzV2l0aCgnZnJvbScpIHx8XG4gICAgbG93ZXJJbm5lci5zdGFydHNXaXRoKCdmcm9tJykgfHxcbiAgICBsb3dlcklubmVyLnN0YXJ0c1dpdGgoJ2Zyb21fJyk7XG5cbiAgY29uc3QgaXNUbyA9XG4gICAgIWlzRnJvbSAmJlxuICAgIChsb3dlcklubmVyLmVuZHNXaXRoKCdfdG8nKSB8fFxuICAgICAgbG93ZXJJbm5lci5lbmRzV2l0aCgndG8nKSB8fFxuICAgICAgbG93ZXJJbm5lci5zdGFydHNXaXRoKCd0bycpIHx8XG4gICAgICBsb3dlcklubmVyLnN0YXJ0c1dpdGgoJ3RvXycpKTtcblxuICBpZiAoaXNGcm9tIHx8IGlzVG8pIHtcbiAgICBmb3IgKGNvbnN0IFtrZXksIHZhbF0gb2YgT2JqZWN0LmVudHJpZXMoZm9ybVZhbHVlcykpIHtcbiAgICAgIGlmICh2YWwgJiYgdHlwZW9mIHZhbCA9PT0gJ29iamVjdCcgJiYgJ2Zyb20nIGluICh2YWwgYXMgYW55KSAmJiAndG8nIGluICh2YWwgYXMgYW55KSkge1xuICAgICAgICBjb25zdCByYW5nZU9iaiA9IHZhbCBhcyB7IGZyb206IHVua25vd247IHRvOiB1bmtub3duIH07XG4gICAgICAgIGNvbnN0IGNsZWFuSW5uZXIgPSBsb3dlcklubmVyXG4gICAgICAgICAgLnJlcGxhY2UoL15mcm9tXz98XnRvXz98X2Zyb20kfF90byR8ZnJvbSR8dG8kLywgJycpXG4gICAgICAgICAgLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgIGlmIChjbGVhbklubmVyID09PSAnJyB8fCBrZXkudG9Mb3dlckNhc2UoKS5pbmNsdWRlcyhjbGVhbklubmVyKSB8fCBjbGVhbklubmVyLmluY2x1ZGVzKGtleS50b0xvd2VyQ2FzZSgpKSkge1xuICAgICAgICAgIHJldHVybiBpc0Zyb20gPyByYW5nZU9iai5mcm9tIDogcmFuZ2VPYmoudG87XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gdW5kZWZpbmVkO1xufVxuXG4vKipcbiAqIFNhbml0aXplcyBULVNRTCBwYXJhbWV0ZXIgbGl0ZXJhbHMgY29waWVkIGZyb20gU1NNUywgcHJvZmlsZXJzLCBvciBTUUwgc2NyaXB0czpcbiAqIC0gU3RyaXBzIG91dGVyIGRvdWJsZSBxdW90ZXM6IFwiLi4uXCJcbiAqIC0gU3RyaXBzIG91dGVyIFQtU1FMIHF1b3RlczogTicuLi4nIG9yICcuLi4nXG4gKiAtIFVuZXNjYXBlcyBkb3VibGVkIHNpbmdsZSBxdW90ZXM6ICcnIC0+ICdcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNhbml0aXplU3FsUGFyYW1MaXRlcmFsKHZhbDogdW5rbm93bik6IHVua25vd24ge1xuICBpZiAodHlwZW9mIHZhbCAhPT0gJ3N0cmluZycpIHJldHVybiB2YWw7XG4gIGxldCBzID0gdmFsLnRyaW0oKTtcbiAgaWYgKHMuc3RhcnRzV2l0aCgnXCInKSAmJiBzLmVuZHNXaXRoKCdcIicpICYmIHMubGVuZ3RoID49IDIpIHtcbiAgICBzID0gcy5zdWJzdHJpbmcoMSwgcy5sZW5ndGggLSAxKS50cmltKCk7XG4gIH1cbiAgY29uc3QgaXNRdW90ZWRTcWxMaXRlcmFsID1cbiAgICAoKHMuc3RhcnRzV2l0aChcIk4nXCIpIHx8IHMuc3RhcnRzV2l0aChcIm4nXCIpKSAmJiBzLmVuZHNXaXRoKFwiJ1wiKSAmJiBzLmxlbmd0aCA+PSAzKSB8fFxuICAgIChzLnN0YXJ0c1dpdGgoXCInXCIpICYmIHMuZW5kc1dpdGgoXCInXCIpICYmIHMubGVuZ3RoID49IDIpO1xuXG4gIGlmIChpc1F1b3RlZFNxbExpdGVyYWwpIHtcbiAgICBjb25zdCBwcmVmaXhMZW4gPSAocy5zdGFydHNXaXRoKFwiTidcIikgfHwgcy5zdGFydHNXaXRoKFwibidcIikpID8gMiA6IDE7XG4gICAgcyA9IHMuc3Vic3RyaW5nKHByZWZpeExlbiwgcy5sZW5ndGggLSAxKTtcbiAgICBpZiAocy5pbmNsdWRlcyhcIicnXCIpKSB7XG4gICAgICBzID0gcy5yZXBsYWNlKC8nJy9nLCBcIidcIik7XG4gICAgfVxuICB9IGVsc2UgaWYgKHMuaW5jbHVkZXMoXCInJyAnJ1wiKSB8fCBzLmluY2x1ZGVzKFwiJycnJ1wiKSB8fCAvJydbYS16QS1aMC05X1xcc3wtXSsnJy8udGVzdChzKSkge1xuICAgIHMgPSBzLnJlcGxhY2UoLycnL2csIFwiJ1wiKTtcbiAgfVxuICByZXR1cm4gcztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBQYXJzZWRTcWxFeGVjIHtcbiAgcHJvY2VkdXJlTmFtZT86IHN0cmluZztcbiAgcGFyYW1ldGVyczogUmVjb3JkPHN0cmluZywgc3RyaW5nIHwgbnVtYmVyIHwgYm9vbGVhbj47XG59XG5cbi8qKlxuICogUGFyc2VzIGFuIFNTTVMgLyBULVNRTCBFWEVDIHN0YXRlbWVudCBzdWNoIGFzOlxuICogZXhlYyBHZXRfSGVscExpc3QgQGNockNPTVBBTllJRD1OJzEwMScsQGNoclRhYmxlTmFtZT1OJ01TVEFDQ1RHTFNVQicsQGludEV4ZWNGbGFnPTFcbiAqIEV4dHJhY3RzIHByb2NlZHVyZSBuYW1lIGFuZCB1bmVzY2FwZXMgcGFyYW1ldGVyIHZhbHVlcy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlU3FsRXhlY1N0YXRlbWVudChzcWw6IHN0cmluZyk6IFBhcnNlZFNxbEV4ZWMgfCBudWxsIHtcbiAgaWYgKCFzcWwgfHwgdHlwZW9mIHNxbCAhPT0gJ3N0cmluZycpIHJldHVybiBudWxsO1xuICBjb25zdCB0cmltbWVkID0gc3FsLnRyaW0oKTtcbiAgY29uc3QgZXhlY01hdGNoID0gdHJpbW1lZC5tYXRjaCgvXig/OmV4ZWMoPzp1dGUpP1xccyspKD86KD86XFxbP1tcXHddK1xcXT9cXC4pP1xcWz8oW1xcd10rKVxcXT8pXFxzKiguKikkL2lzKTtcbiAgaWYgKCFleGVjTWF0Y2ggJiYgIXRyaW1tZWQuc3RhcnRzV2l0aCgnQCcpKSByZXR1cm4gbnVsbDtcblxuICBjb25zdCBwcm9jZWR1cmVOYW1lID0gZXhlY01hdGNoID8gZXhlY01hdGNoWzFdIDogdW5kZWZpbmVkO1xuICBjb25zdCBwYXJhbVBhcnQgPSBleGVjTWF0Y2ggPyBleGVjTWF0Y2hbMl0gOiB0cmltbWVkO1xuXG4gIGNvbnN0IHBhcmFtZXRlcnM6IFJlY29yZDxzdHJpbmcsIHN0cmluZyB8IG51bWJlciB8IGJvb2xlYW4+ID0ge307XG4gIGlmICghcGFyYW1QYXJ0KSByZXR1cm4geyBwcm9jZWR1cmVOYW1lLCBwYXJhbWV0ZXJzIH07XG5cbiAgbGV0IGkgPSAwO1xuICBjb25zdCBsZW4gPSBwYXJhbVBhcnQubGVuZ3RoO1xuXG4gIHdoaWxlIChpIDwgbGVuKSB7XG4gICAgd2hpbGUgKGkgPCBsZW4gJiYgKHBhcmFtUGFydFtpXSA9PT0gJyAnIHx8IHBhcmFtUGFydFtpXSA9PT0gJ1xcdCcgfHwgcGFyYW1QYXJ0W2ldID09PSAnXFxyJyB8fCBwYXJhbVBhcnRbaV0gPT09ICdcXG4nIHx8IHBhcmFtUGFydFtpXSA9PT0gJywnKSkge1xuICAgICAgaSsrO1xuICAgIH1cbiAgICBpZiAoaSA+PSBsZW4pIGJyZWFrO1xuXG4gICAgaWYgKHBhcmFtUGFydFtpXSAhPT0gJ0AnKSB7XG4gICAgICBpKys7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICBjb25zdCBrZXlTdGFydCA9IGk7XG4gICAgd2hpbGUgKGkgPCBsZW4gJiYgcGFyYW1QYXJ0W2ldICE9PSAnPScgJiYgcGFyYW1QYXJ0W2ldICE9PSAnICcgJiYgcGFyYW1QYXJ0W2ldICE9PSAnXFx0Jykge1xuICAgICAgaSsrO1xuICAgIH1cbiAgICBjb25zdCBwYXJhbUtleSA9IHBhcmFtUGFydC5zbGljZShrZXlTdGFydCwgaSkudHJpbSgpO1xuXG4gICAgd2hpbGUgKGkgPCBsZW4gJiYgKHBhcmFtUGFydFtpXSA9PT0gJyAnIHx8IHBhcmFtUGFydFtpXSA9PT0gJ1xcdCcgfHwgcGFyYW1QYXJ0W2ldID09PSAnPScpKSB7XG4gICAgICBpKys7XG4gICAgfVxuXG4gICAgbGV0IHZhbFN0ciA9ICcnO1xuICAgIGlmIChpIDwgbGVuICYmIChwYXJhbVBhcnRbaV0gPT09IFwiJ1wiIHx8IChwYXJhbVBhcnRbaV0gPT09ICdOJyAmJiBwYXJhbVBhcnRbaSArIDFdID09PSBcIidcIikgfHwgKHBhcmFtUGFydFtpXSA9PT0gJ24nICYmIHBhcmFtUGFydFtpICsgMV0gPT09IFwiJ1wiKSkpIHtcbiAgICAgIGNvbnN0IGlzTiA9IHBhcmFtUGFydFtpXSA9PT0gJ04nIHx8IHBhcmFtUGFydFtpXSA9PT0gJ24nO1xuICAgICAgaSArPSBpc04gPyAyIDogMTtcbiAgICAgIGxldCBpblF1b3RlID0gdHJ1ZTtcbiAgICAgIGxldCBxdW90ZVZhbCA9ICcnO1xuICAgICAgd2hpbGUgKGkgPCBsZW4gJiYgaW5RdW90ZSkge1xuICAgICAgICBpZiAocGFyYW1QYXJ0W2ldID09PSBcIidcIikge1xuICAgICAgICAgIGlmIChpICsgMSA8IGxlbiAmJiBwYXJhbVBhcnRbaSArIDFdID09PSBcIidcIikge1xuICAgICAgICAgICAgcXVvdGVWYWwgKz0gXCInXCI7XG4gICAgICAgICAgICBpICs9IDI7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGluUXVvdGUgPSBmYWxzZTtcbiAgICAgICAgICAgIGkrKztcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcXVvdGVWYWwgKz0gcGFyYW1QYXJ0W2ldO1xuICAgICAgICAgIGkrKztcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgdmFsU3RyID0gcXVvdGVWYWw7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IHZhbFN0YXJ0ID0gaTtcbiAgICAgIHdoaWxlIChpIDwgbGVuICYmIHBhcmFtUGFydFtpXSAhPT0gJywnICYmIHBhcmFtUGFydFtpXSAhPT0gJ1xccicgJiYgcGFyYW1QYXJ0W2ldICE9PSAnXFxuJykge1xuICAgICAgICBpKys7XG4gICAgICB9XG4gICAgICB2YWxTdHIgPSBwYXJhbVBhcnQuc2xpY2UodmFsU3RhcnQsIGkpLnRyaW0oKTtcbiAgICB9XG5cbiAgICBjb25zdCBjbGVhbktleSA9IHBhcmFtS2V5LnJlcGxhY2UoL15ALywgJycpO1xuICAgIGlmIChjbGVhbktleSkge1xuICAgICAgaWYgKC9eLT9cXGQrJC8udGVzdCh2YWxTdHIpKSB7XG4gICAgICAgIHBhcmFtZXRlcnNbcGFyYW1LZXldID0gcGFyc2VJbnQodmFsU3RyLCAxMCk7XG4gICAgICB9IGVsc2UgaWYgKC9eLT9cXGQrXFwuXFxkKyQvLnRlc3QodmFsU3RyKSkge1xuICAgICAgICBwYXJhbWV0ZXJzW3BhcmFtS2V5XSA9IHBhcnNlRmxvYXQodmFsU3RyKTtcbiAgICAgIH0gZWxzZSBpZiAodmFsU3RyLnRvTG93ZXJDYXNlKCkgPT09ICd0cnVlJykge1xuICAgICAgICBwYXJhbWV0ZXJzW3BhcmFtS2V5XSA9IHRydWU7XG4gICAgICB9IGVsc2UgaWYgKHZhbFN0ci50b0xvd2VyQ2FzZSgpID09PSAnZmFsc2UnKSB7XG4gICAgICAgIHBhcmFtZXRlcnNbcGFyYW1LZXldID0gZmFsc2U7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBwYXJhbWV0ZXJzW3BhcmFtS2V5XSA9IHZhbFN0cjtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4geyBwcm9jZWR1cmVOYW1lLCBwYXJhbWV0ZXJzIH07XG59XG5cbi8qKlxuICogUmVzb2x2ZXMgb25lIHJhdyBtYXBwaW5nIHZhbHVlIGFnYWluc3Qgc2Vzc2lvbiArIGNhbnZhcyBmb3JtIHZhbHVlcy5cbiAqIC0gYHt7c2Vzc2lvbi5icmFuY2hJZH19YCAgLT4gc2Vzc2lvbiB2YWx1ZSAoY2FzZS1pbnNlbnNpdGl2ZSlcbiAqIC0gYHt7Y29udGV4dC50b2RheX19YCAgICAgLT4gY29tcHV0ZWQgZGF0ZVxuICogLSBge3tmcm9tRGF0ZX19YCAgICAgICAgICAtPiB2YWx1ZSBvZiBjYW52YXMgZmllbGQgd2l0aCBrZXkgYGZyb21EYXRlYCAoY2FzZS1pbnNlbnNpdGl2ZSlcbiAqIC0gYHt7ZGF0ZVJhbmdlLmZyb219fWAgICAgLT4gdmFsdWUgb2YgbmVzdGVkIGZyb20gcHJvcGVydHlcbiAqIC0gYW55dGhpbmcgZWxzZSAgICAgICAgICAgLT4gc2FuaXRpemVkIGxpdGVyYWwgdmFsdWUgKGZpeGVkIHZhbHVlKVxuICovXG5leHBvcnQgZnVuY3Rpb24gcmVzb2x2ZVBhcmFtZXRlclZhbHVlKFxuICByYXc6IHVua25vd24sXG4gIHNlc3Npb246IFJlY29yZDxzdHJpbmcsIHVua25vd24+LFxuICBmb3JtVmFsdWVzOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPlxuKTogdW5rbm93biB7XG4gIGlmICh0eXBlb2YgcmF3ICE9PSAnc3RyaW5nJykgcmV0dXJuIHJhdztcbiAgY29uc3QgbSA9IFRPS0VOX1JFLmV4ZWMocmF3KTtcbiAgaWYgKCFtKSByZXR1cm4gc2FuaXRpemVTcWxQYXJhbUxpdGVyYWwocmF3KTtcbiAgY29uc3QgaW5uZXIgPSBtWzFdO1xuICBpZiAoaW5uZXIuc3RhcnRzV2l0aCgnc2Vzc2lvbi4nKSkge1xuICAgIGNvbnN0IHNlc3Npb25LZXkgPSBpbm5lci5zbGljZSg4KTtcbiAgICBjb25zdCB2YWwgPSBnZXRGaWVsZENhc2VJbnNlbnNpdGl2ZShzZXNzaW9uLCBzZXNzaW9uS2V5KTtcbiAgICByZXR1cm4gdmFsICE9PSB1bmRlZmluZWQgJiYgdmFsICE9PSBudWxsID8gdmFsIDogJyc7XG4gIH1cbiAgaWYgKGlubmVyLnN0YXJ0c1dpdGgoJ2NvbnRleHQuJykpIHtcbiAgICByZXR1cm4gcmVzb2x2ZUNvbnRleHRQcmVzZXQoaW5uZXIuc2xpY2UoOCkpO1xuICB9XG4gIGNvbnN0IHYgPSByZXNvbHZlQ2FudmFzRmllbGRWYWx1ZShmb3JtVmFsdWVzLCBpbm5lcik7XG4gIHJldHVybiB2ICE9PSB1bmRlZmluZWQgJiYgdiAhPT0gbnVsbCA/IHYgOiAnJztcbn1cblxuLyoqIFJlc29sdmVzIGV2ZXJ5IG1hcHBpbmcgaW50byBjb25jcmV0ZSB2YWx1ZXMgKGRlLWR1cGxpY2F0aW5nIGBAbmFtZWAgLyBgbmFtZWApLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlc29sdmVQYXJhbWV0ZXJNYXBwaW5ncyhcbiAgbWFwcGluZ3M6IFBhcmFtZXRlck1hcHBpbmdzIHwgdW5kZWZpbmVkLFxuICBzZXNzaW9uOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPixcbiAgZm9ybVZhbHVlczogUmVjb3JkPHN0cmluZywgdW5rbm93bj5cbik6IFJlY29yZDxzdHJpbmcsIHVua25vd24+IHtcbiAgY29uc3Qgb3V0OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiA9IHt9O1xuICBmb3IgKGNvbnN0IFtrZXksIHJhd10gb2YgT2JqZWN0LmVudHJpZXMobWFwcGluZ3MgPz8ge30pKSB7XG4gICAgY29uc3QgdmFsID0gcmVzb2x2ZVBhcmFtZXRlclZhbHVlKHJhdywgc2Vzc2lvbiwgZm9ybVZhbHVlcyk7XG4gICAgY29uc3QgY2xlYW5LZXkgPSBrZXkucmVwbGFjZSgvXkAvLCAnJyk7XG4gICAgb3V0W2NsZWFuS2V5XSA9IHZhbDtcbiAgICBvdXRbYEAke2NsZWFuS2V5fWBdID0gdmFsO1xuICB9XG4gIHJldHVybiBvdXQ7XG59XG5cbi8qKlxuICogUmV0dXJucyBjYW52YXMgZmllbGQga2V5cyByZWZlcmVuY2VkIGJ5IG1hcHBpbmdzIHRoYXQgY3VycmVudGx5IGhhdmUgbm8gdmFsdWUuXG4gKiBTZXNzaW9uIC8gY29udGV4dCAvIGZpeGVkIHZhbHVlcyBuZXZlciBibG9jayBleGVjdXRpb24uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBmaW5kTWlzc2luZ0NhbnZhc0ZpZWxkcyhcbiAgbWFwcGluZ3M6IFBhcmFtZXRlck1hcHBpbmdzIHwgdW5kZWZpbmVkLFxuICBmb3JtVmFsdWVzOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPlxuKTogc3RyaW5nW10ge1xuICBjb25zdCBtaXNzaW5nID0gbmV3IFNldDxzdHJpbmc+KCk7XG4gIGZvciAoY29uc3QgcmF3IG9mIE9iamVjdC52YWx1ZXMobWFwcGluZ3MgPz8ge30pKSB7XG4gICAgaWYgKHR5cGVvZiByYXcgIT09ICdzdHJpbmcnKSBjb250aW51ZTtcbiAgICBjb25zdCBtID0gVE9LRU5fUkUuZXhlYyhyYXcpO1xuICAgIGlmICghbSkgY29udGludWU7XG4gICAgY29uc3QgaW5uZXIgPSBtWzFdO1xuICAgIGlmIChpbm5lci5zdGFydHNXaXRoKCdzZXNzaW9uLicpIHx8IGlubmVyLnN0YXJ0c1dpdGgoJ2NvbnRleHQuJykpIGNvbnRpbnVlO1xuICAgIGNvbnN0IHYgPSByZXNvbHZlQ2FudmFzRmllbGRWYWx1ZShmb3JtVmFsdWVzLCBpbm5lcik7XG4gICAgaWYgKHYgPT09IHVuZGVmaW5lZCB8fCB2ID09PSBudWxsIHx8ICh0eXBlb2YgdiA9PT0gJ3N0cmluZycgJiYgdi50cmltKCkgPT09ICcnKSkge1xuICAgICAgbWlzc2luZy5hZGQoaW5uZXIpO1xuICAgIH0gZWxzZSBpZiAodHlwZW9mIHYgPT09ICdvYmplY3QnICYmICFBcnJheS5pc0FycmF5KHYpICYmICdmcm9tJyBpbiAodiBhcyBhbnkpKSB7XG4gICAgICBjb25zdCByID0gdiBhcyB7IGZyb20/OiBzdHJpbmc7IHRvPzogc3RyaW5nIH07XG4gICAgICBpZiAoIXIuZnJvbSAmJiAhci50bykge1xuICAgICAgICBtaXNzaW5nLmFkZChpbm5lcik7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIHJldHVybiBbLi4ubWlzc2luZ107XG59XG5cbi8qKlxuICogUGlja3MgdGhlIGRhdGEgc291cmNlIHRoZSByZXN1bHQgZ3JpZCBzaG91bGQgcnVuOlxuICogMS4gdGhlIG9uZSByZWZlcmVuY2VkIGJ5IGBncmlkLmRhdGFTb3VyY2VJZGBcbiAqIDIuIG90aGVyd2lzZSB0aGUgZmlyc3QgZGVjbGFyZWQgZGF0YSBzb3VyY2VcbiAqIDMuIG90aGVyd2lzZSBhIHByb2NlZHVyZS90YWJsZSBib3VuZCB0byBhIGNvbXBvbmVudCAobGVnYWN5IHJlcG9ydHMpXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZXNvbHZlRXhlY3V0aW9uRGF0YVNvdXJjZShkZWY6IFJlcG9ydERlZmluaXRpb24pOiBSZXBvcnREYXRhU291cmNlRGVmaW5pdGlvbiB8IG51bGwge1xuICBjb25zdCBzb3VyY2VzID0gZGVmLmRhdGFTb3VyY2VzID8/IFtdO1xuICBjb25zdCBieUlkID0gc291cmNlcy5maW5kKChkKSA9PiBkLmlkID09PSBkZWYuZ3JpZD8uZGF0YVNvdXJjZUlkKTtcbiAgaWYgKGJ5SWQpIHJldHVybiBieUlkO1xuICBpZiAoc291cmNlcy5sZW5ndGggPiAwKSByZXR1cm4gc291cmNlc1swXTtcblxuICBjb25zdCBjb21wID0gZGVmLmNvbXBvbmVudHMuZmluZCgoYykgPT4gYy5kYXRhU291cmNlPy5lbnRpdHlOYW1lKTtcbiAgY29uc3QgY2RzID0gY29tcD8uZGF0YVNvdXJjZTtcbiAgaWYgKGNkcz8uZW50aXR5TmFtZSkge1xuICAgIGNvbnN0IGlzVGFibGUgPSBjZHMuc291cmNlVHlwZSA9PT0gJ3RhYmxlJztcbiAgICByZXR1cm4ge1xuICAgICAgaWQ6IGBzcC0ke2Nkcy5lbnRpdHlOYW1lfWAsXG4gICAgICBuYW1lOiBjZHMuZW50aXR5TmFtZSxcbiAgICAgIGVuZHBvaW50OiBjZHMuZW50aXR5TmFtZSxcbiAgICAgIHNjaGVtYTogY2RzLnNjaGVtYSB8fCAnZGJvJyxcbiAgICAgIHR5cGU6IGlzVGFibGUgPyAndGFibGUnIDogJ3N0b3JlZF9wcm9jZWR1cmUnLFxuICAgICAgbWV0aG9kOiBpc1RhYmxlID8gJ0dFVCcgOiAnU1RPUkVEX1BST0NFRFVSRScsXG4gICAgICBwYXJhbWV0ZXJNYXBwaW5nczogY2RzLnBhcmFtZXRlck1hcHBpbmdzLFxuICAgIH07XG4gIH1cbiAgcmV0dXJuIG51bGw7XG59XG5cbi8qKiBTdHJpcHMgU1FMIFNlcnZlciBIdW5nYXJpYW4gcHJlZml4ZXM6IGBAY2hyRnJvbURhdGVgIC0+IGBmcm9tRGF0ZWAuICovXG5leHBvcnQgZnVuY3Rpb24gdG9GaWVsZEtleShwYXJhbU5hbWU6IHN0cmluZyk6IHN0cmluZyB7XG4gIGNvbnN0IHN0cmlwcGVkID0gcGFyYW1OYW1lXG4gICAgLnJlcGxhY2UoL15AKy8sICcnKVxuICAgIC5yZXBsYWNlKC9eKGNocnxpbnR8dmNocnxuY2hyfGR0fHN0cnxudW18Yml0fGRlY3xmbHQpKD89W0EtWl9dKS8sICcnKTtcbiAgY29uc3QgY2xlYW4gPSBzdHJpcHBlZC5yZXBsYWNlKC9bXmEtekEtWjAtOV0rKC4pPy9nLCAoX20sIGM6IHN0cmluZyB8IHVuZGVmaW5lZCkgPT4gKGMgPyBjLnRvVXBwZXJDYXNlKCkgOiAnJykpO1xuICByZXR1cm4gY2xlYW4gPyBjbGVhbi5jaGFyQXQoMCkudG9Mb3dlckNhc2UoKSArIGNsZWFuLnNsaWNlKDEpIDogcGFyYW1OYW1lO1xufVxuIl19
349
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVwb3J0LXBhcmFtZXRlci51dGlsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYndheXMtcmVwb3J0L3NyYy9saWIvY29yZS91dGlscy9yZXBvcnQtcGFyYW1ldGVyLnV0aWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBRUEsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFJcEUsTUFBTSxRQUFRLEdBQUcsdUJBQXVCLENBQUM7QUFFekMsc0VBQXNFO0FBQ3RFLE1BQU0sQ0FBQyxNQUFNLHNCQUFzQixHQUFHLENBQUMsWUFBWSxFQUFFLFVBQVUsRUFBRSxZQUFZLEVBQUUsWUFBWSxFQUFFLFlBQVksQ0FBVSxDQUFDO0FBR3BILHVFQUF1RTtBQUN2RSxNQUFNLFVBQVUsbUJBQW1CLENBQUMsR0FBVztJQUM3QyxNQUFNLEtBQUssR0FBRyxRQUFRLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ2pDLElBQUksQ0FBQyxLQUFLO1FBQUUsT0FBTyxJQUFJLENBQUM7SUFDeEIsTUFBTSxLQUFLLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDO0lBQ3BELElBQUksS0FBSyxDQUFDLE1BQU0sS0FBSyxDQUFDO1FBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQztJQUMxRCxNQUFNLE1BQU0sR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUF3QixDQUFDO0lBQy9DLE9BQU8sRUFBRSxLQUFLLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLFVBQVUsRUFBRSxLQUFLLENBQUMsTUFBTSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FB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O1lBQ0osU0FBUztRQUNYLENBQUM7UUFFRCxNQUFNLFFBQVEsR0FBRyxDQUFDLENBQUM7UUFDbkIsT0FBTyxDQUFDLEdBQUcsR0FBRyxJQUFJLFNBQVMsQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHLElBQUksU0FBUyxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsSUFBSSxTQUFTLENBQUMsQ0FBQyxDQUFDLEtBQUssSUFBSSxFQUFFLENBQUM7WUFDeEYsQ0FBQyxFQUFFLENBQUM7UUFDTixDQUFDO1FBQ0QsTUFBTSxRQUFRLEdBQUcsU0FBUyxDQUFDLEtBQUssQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUM7UUFFckQsT0FBTyxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsSUFBSSxTQUFTLENBQUMsQ0FBQyxDQUFDLEtBQUssSUFBSSxJQUFJLFNBQVMsQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHLENBQUMsRUFBRSxDQUFDO1lBQzFGLENBQUMsRUFBRSxDQUFDO1FBQ04sQ0FBQztRQUVELElBQUksTUFBTSxHQUFHLEVBQUUsQ0FBQztRQUNoQixJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsSUFBSSxTQUFTLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsSUFBSSxTQUFTLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQztZQUNsSixNQUFNLEdBQUcsR0FBRyxTQUFTLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxJQUFJLFNBQVMsQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHLENBQUM7WUFDekQsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDLENB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bnRlbnQiOlsiaW1wb3J0IHsgUmVwb3J0RGVmaW5pdGlvbiB9IGZyb20gJy4uL21vZGVscy9yZXBvcnQtZGVmaW5pdGlvbi5tb2RlbCc7XG5pbXBvcnQgeyBSZXBvcnREYXRhU291cmNlRGVmaW5pdGlvbiB9IGZyb20gJy4uL21vZGVscy9yZXBvcnQtZGF0YXNvdXJjZS5tb2RlbCc7XG5pbXBvcnQgeyBnZXRGaWVsZENhc2VJbnNlbnNpdGl2ZSB9IGZyb20gJy4vZGF0YS1ub3JtYWxpemF0aW9uLnV0aWwnO1xuXG5leHBvcnQgdHlwZSBQYXJhbWV0ZXJNYXBwaW5ncyA9IFJlY29yZDxzdHJpbmcsIHN0cmluZyB8IG51bWJlciB8IGJvb2xlYW4+O1xuXG5jb25zdCBUT0tFTl9SRSA9IC9eXFx7XFx7XFxzKiguKz8pXFxzKlxcfVxcfSQvO1xuXG4vKiogU3VwcG9ydGVkIHdpcmUgZm9ybWF0cyBmb3IgZGF0ZS1ib3VuZCBwcm9jZWR1cmUvQVBJIHBhcmFtZXRlcnMuICovXG5leHBvcnQgY29uc3QgUEFSQU1FVEVSX0RBVEVfRk9STUFUUyA9IFsneXl5eS1NTS1kZCcsICd5eXl5TU1kZCcsICdkZC9NTS95eXl5JywgJ01NL2RkL3l5eXknLCAnZGQtTU0teXl5eSddIGFzIGNvbnN0O1xuZXhwb3J0IHR5cGUgUGFyYW1ldGVyRGF0ZUZvcm1hdCA9IHR5cGVvZiBQQVJBTUVURVJfREFURV9GT1JNQVRTW251bWJlcl07XG5cbi8qKiBUaGUgb3B0aW9uYWwgZGF0ZSBwaXBlIGlzIHBlcnNpc3RlZCBpbiBleGlzdGluZyBzdHJpbmcgbWFwcGluZ3MuICovXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VQYXJhbWV0ZXJUb2tlbihyYXc6IHN0cmluZyk6IHsgZmllbGQ6IHN0cmluZzsgZGF0ZUZvcm1hdD86IFBhcmFtZXRlckRhdGVGb3JtYXQgfSB8IG51bGwge1xuICBjb25zdCBtYXRjaCA9IFRPS0VOX1JFLmV4ZWMocmF3KTtcbiAgaWYgKCFtYXRjaCkgcmV0dXJuIG51bGw7XG4gIGNvbnN0IHBhcnRzID0gbWF0Y2hbMV0uc3BsaXQoL1xccypcXHxcXHMqZGF0ZVxccyo6XFxzKi8pO1xuICBpZiAocGFydHMubGVuZ3RoID09PSAxKSByZXR1cm4geyBmaWVsZDogcGFydHNbMF0udHJpbSgpIH07XG4gIGNvbnN0IGZvcm1hdCA9IHBhcnRzWzFdIGFzIFBhcmFtZXRlckRhdGVGb3JtYXQ7XG4gIHJldHVybiB7IGZpZWxkOiBwYXJ0c1swXS50cmltKCksIGRhdGVGb3JtYXQ6IHBhcnRzLmxlbmd0aCA9PT0gMiA/IGZvcm1hdCA6IHBhcnRzLnNsaWNlKDEpLmpvaW4oJyB8IGRhdGU6JykgYXMgUGFyYW1ldGVyRGF0ZUZvcm1hdCB9O1xufVxuXG4vKiogRm9ybWF0IGNhbGVuZGFyIHBhcnRzIGRpcmVjdGx5LCBhdm9pZGluZyBVVEMvdGltZS16b25lIHNoaWZ0cyBhbmQgbG9jYWxlIHBhcnNpbmcuICovXG5leHBvcnQgZnVuY3Rpb24gZm9ybWF0UGFyYW1ldGVyRGF0ZSh2YWx1ZTogdW5rbm93biwgZm9ybWF0OiBQYXJhbWV0ZXJEYXRlRm9ybWF0KTogc3RyaW5nIHtcbiAgaWYgKCFQQVJBTUVURVJfREFURV9GT1JNQVRTLmluY2x1ZGVzKGZvcm1hdCkpIHRocm93IG5ldyBFcnJvcignVW5zdXBwb3J0ZWQgcGFyYW1ldGVyIGRhdGUgZm9ybWF0LiBDaG9vc2UgYSBkYXRlIGZvcm1hdCBpbiB0aGUgRmllbGQgYmluZGluZy4nKTtcbiAgaWYgKHZhbHVlID09PSAnJyB8fCB2YWx1ZSA9PT0gbnVsbCB8fCB2YWx1ZSA9PT0gdW5kZWZpbmVkKSByZXR1cm4gJyc7XG4gIGNvbnN0IHJhdyA9IHZhbHVlIGluc3RhbmNlb2YgRGF0ZVxuICAgID8gdmFsdWUuZ2V0RnVsbFllYXIoKSArICctJyArIFN0cmluZyh2YWx1ZS5nZXRNb250aCgpICsgMSkucGFkU3RhcnQoMiwgJzAnKSArICctJyArIFN0cmluZyh2YWx1ZS5nZXREYXRlKCkpLnBhZFN0YXJ0KDIsICcwJylcbiAgICA6IFN0cmluZyh2YWx1ZSk7XG4gIGNvbnN0IG1hdGNoID0gL14oXFxkezR9KS0/KFxcZHsyfSktPyhcXGR7Mn0pKD86VC4qKT8kLy5leGVjKHJhdyk7XG4gIGlmICghbWF0Y2gpIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBkYXRlLiBTZWxlY3QgYSB2YWxpZCBkYXRlIGluIHRoZSBsaW5rZWQgZmllbGQuJyk7XG4gIGNvbnN0IFssIHllYXIsIG1vbnRoLCBkYXldID0gbWF0Y2g7XG4gIGNvbnN0IHByb2JlID0gbmV3IERhdGUoMCk7IHByb2JlLnNldEZ1bGxZZWFyKCt5ZWFyLCArbW9udGggLSAxLCArZGF5KTsgcHJvYmUuc2V0SG91cnMoMCwgMCwgMCwgMCk7XG4gIGlmIChwcm9iZS5nZXRGdWxsWWVhcigpICE9PSAreWVhciB8fCBwcm9iZS5nZXRNb250aCgpICsgMSAhPT0gK21vbnRoIHx8IHByb2JlLmdldERhdGUoKSAhPT0gK2RheSkge1xuICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBkYXRlLiBTZWxlY3QgYSB2YWxpZCBkYXRlIGluIHRoZSBsaW5rZWQgZmllbGQuJyk7XG4gIH1cbiAgcmV0dXJuIGZvcm1hdC5yZXBsYWNlKCd5eXl5JywgeWVhcikucmVwbGFjZSgnTU0nLCBtb250aCkucmVwbGFjZSgnZGQnLCBkYXkpO1xufVxuXG5jb25zdCBwYWQgPSAobjogbnVtYmVyKTogc3RyaW5nID0+IFN0cmluZyhuKS5wYWRTdGFydCgyLCAnMCcpO1xuY29uc3QgZm9ybWF0WU1EID0gKGQ6IERhdGUpOiBzdHJpbmcgPT4gYCR7ZC5nZXRGdWxsWWVhcigpfS0ke3BhZChkLmdldE1vbnRoKCkgKyAxKX0tJHtwYWQoZC5nZXREYXRlKCkpfWA7XG5cbi8qKiBSZXNvbHZlcyBge3tjb250ZXh0Lnh4eH19YCBwcmVzZXRzIHN1Y2ggYXMgdG9kYXkgLyBzdGFydE9mTW9udGguICovXG5leHBvcnQgZnVuY3Rpb24gcmVzb2x2ZUNvbnRleHRQcmVzZXQoa2V5OiBzdHJpbmcpOiBzdHJpbmcge1xuICBjb25zdCBub3cgPSBuZXcgRGF0ZSgpO1xuICBzd2l0Y2ggKGtleS50b0xvd2VyQ2FzZSgpKSB7XG4gICAgY2FzZSAneWVzdGVyZGF5Jzoge1xuICAgICAgY29uc3QgeSA9IG5ldyBEYXRlKG5vdyk7XG4gICAgICB5LnNldERhdGUoeS5nZXREYXRlKCkgLSAxKTtcbiAgICAgIHJldHVybiBmb3JtYXRZTUQoeSk7XG4gICAgfVxuICAgIGNhc2UgJ3N0YXJ0b2Ztb250aCc6XG4gICAgICByZXR1cm4gYCR7bm93LmdldEZ1bGxZZWFyKCl9LSR7cGFkKG5vdy5nZXRNb250aCgpICsgMSl9LTAxYDtcbiAgICBjYXNlICdlbmRvZm1vbnRoJzpcbiAgICAgIHJldHVybiBmb3JtYXRZTUQobmV3IERhdGUobm93LmdldEZ1bGxZZWFyKCksIG5vdy5nZXRNb250aCgpICsgMSwgMCkpO1xuICAgIGNhc2UgJ3N0YXJ0b2Z5ZWFyJzpcbiAgICAgIHJldHVybiBgJHtub3cuZ2V0RnVsbFllYXIoKX0tMDEtMDFgO1xuICAgIGNhc2UgJ3RvZGF5JzpcbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIGZvcm1hdFlNRChub3cpO1xuICB9XG59XG5cbi8qKlxuICogTG9va3MgdXAgYSBmaWVsZCB2YWx1ZSBmcm9tIGZvcm1WYWx1ZXMgc3VwcG9ydGluZyBkaXJlY3QgbmFtZXMsIGRvdCBwYXRocyAoYS5iKSxcbiAqIGFuZCBjb21wb3VuZCBkYXRlIHJhbmdlcyAoZS5nLiBkYXRlUmFuZ2UuZnJvbSwgZGF0ZVJhbmdlX2Zyb20sIGRhdGVSYW5nZUZyb20pLlxuICovXG5leHBvcnQgZnVuY3Rpb24gcmVzb2x2ZUNhbnZhc0ZpZWxkVmFsdWUoXG4gIGZvcm1WYWx1ZXM6IFJlY29yZDxzdHJpbmcsIHVua25vd24+LFxuICBpbm5lcjogc3RyaW5nXG4pOiB1bmtub3duIHtcbiAgLy8gMS4gRGlyZWN0IGNhc2UtaW5zZW5zaXRpdmUgbG9va3VwXG4gIGNvbnN0IGRpcmVjdCA9IGdldEZpZWxkQ2FzZUluc2Vuc2l0aXZlKGZvcm1WYWx1ZXMsIGlubmVyKTtcbiAgaWYgKGRpcmVjdCAhPT0gdW5kZWZpbmVkICYmIGRpcmVjdCAhPT0gbnVsbCkge1xuICAgIHJldHVybiBkaXJlY3Q7XG4gIH1cblxuICAvLyAyLiBEb3QtcGF0aCBsb29rdXAgKGUuZy4gZGF0ZVJhbmdlLmZyb20gb3IgdXNlci5hZGRyZXNzLmNpdHkpXG4gIGlmIChpbm5lci5pbmNsdWRlcygnLicpKSB7XG4gICAgY29uc3QgcGFydHMgPSBpbm5lci5zcGxpdCgnLicpO1xuICAgIGxldCBjdXJyOiB1bmtub3duID0gZm9ybVZhbHVlcztcbiAgICBmb3IgKGNvbnN0IHAgb2YgcGFydHMpIHtcbiAgICAgIGlmIChjdXJyICYmIHR5cGVvZiBjdXJyID09PSAnb2JqZWN0Jykge1xuICAgICAgICBjdXJyID0gZ2V0RmllbGRDYXNlSW5zZW5zaXRpdmUoY3VyciBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiwgcCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjdXJyID0gdW5kZWZpbmVkO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKGN1cnIgIT09IHVuZGVmaW5lZCAmJiBjdXJyICE9PSBudWxsKSB7XG4gICAgICByZXR1cm4gY3VycjtcbiAgICB9XG4gIH1cblxuICAvLyAzLiBDb21wb3VuZCBkYXRlIHJhbmdlIG1hdGNoaW5nIChlLmcuIGRhdGVSYW5nZV9mcm9tLCBkYXRlUmFuZ2VGcm9tLCBmcm9tRGF0ZSwgdG9EYXRlKVxuICBjb25zdCBsb3dlcklubmVyID0gaW5uZXIudG9Mb3dlckNhc2UoKTtcbiAgY29uc3QgaXNGcm9tID1cbiAgICBsb3dlcklubmVyLmVuZHNXaXRoKCdfZnJvbScpIHx8XG4gICAgbG93ZXJJbm5lci5lbmRzV2l0aCgnZnJvbScpIHx8XG4gICAgbG93ZXJJbm5lci5zdGFydHNXaXRoKCdmcm9tJykgfHxcbiAgICBsb3dlcklubmVyLnN0YXJ0c1dpdGgoJ2Zyb21fJyk7XG5cbiAgY29uc3QgaXNUbyA9XG4gICAgIWlzRnJvbSAmJlxuICAgIChsb3dlcklubmVyLmVuZHNXaXRoKCdfdG8nKSB8fFxuICAgICAgbG93ZXJJbm5lci5lbmRzV2l0aCgndG8nKSB8fFxuICAgICAgbG93ZXJJbm5lci5zdGFydHNXaXRoKCd0bycpIHx8XG4gICAgICBsb3dlcklubmVyLnN0YXJ0c1dpdGgoJ3RvXycpKTtcblxuICBpZiAoaXNGcm9tIHx8IGlzVG8pIHtcbiAgICBmb3IgKGNvbnN0IFtrZXksIHZhbF0gb2YgT2JqZWN0LmVudHJpZXMoZm9ybVZhbHVlcykpIHtcbiAgICAgIGlmICh2YWwgJiYgdHlwZW9mIHZhbCA9PT0gJ29iamVjdCcgJiYgJ2Zyb20nIGluICh2YWwgYXMgYW55KSAmJiAndG8nIGluICh2YWwgYXMgYW55KSkge1xuICAgICAgICBjb25zdCByYW5nZU9iaiA9IHZhbCBhcyB7IGZyb206IHVua25vd247IHRvOiB1bmtub3duIH07XG4gICAgICAgIGNvbnN0IGNsZWFuSW5uZXIgPSBsb3dlcklubmVyXG4gICAgICAgICAgLnJlcGxhY2UoL15mcm9tXz98XnRvXz98X2Zyb20kfF90byR8ZnJvbSR8dG8kLywgJycpXG4gICAgICAgICAgLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgIGlmIChjbGVhbklubmVyID09PSAnJyB8fCBrZXkudG9Mb3dlckNhc2UoKS5pbmNsdWRlcyhjbGVhbklubmVyKSB8fCBjbGVhbklubmVyLmluY2x1ZGVzKGtleS50b0xvd2VyQ2FzZSgpKSkge1xuICAgICAgICAgIHJldHVybiBpc0Zyb20gPyByYW5nZU9iai5mcm9tIDogcmFuZ2VPYmoudG87XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gdW5kZWZpbmVkO1xufVxuXG4vKipcbiAqIFNhbml0aXplcyBULVNRTCBwYXJhbWV0ZXIgbGl0ZXJhbHMgY29waWVkIGZyb20gU1NNUywgcHJvZmlsZXJzLCBvciBTUUwgc2NyaXB0czpcbiAqIC0gU3RyaXBzIG91dGVyIGRvdWJsZSBxdW90ZXM6IFwiLi4uXCJcbiAqIC0gU3RyaXBzIG91dGVyIFQtU1FMIHF1b3RlczogTicuLi4nIG9yICcuLi4nXG4gKiAtIFVuZXNjYXBlcyBkb3VibGVkIHNpbmdsZSBxdW90ZXM6ICcnIC0+ICdcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNhbml0aXplU3FsUGFyYW1MaXRlcmFsKHZhbDogdW5rbm93bik6IHVua25vd24ge1xuICBpZiAodHlwZW9mIHZhbCAhPT0gJ3N0cmluZycpIHJldHVybiB2YWw7XG4gIGxldCBzID0gdmFsLnRyaW0oKTtcbiAgaWYgKHMuc3RhcnRzV2l0aCgnXCInKSAmJiBzLmVuZHNXaXRoKCdcIicpICYmIHMubGVuZ3RoID49IDIpIHtcbiAgICBzID0gcy5zdWJzdHJpbmcoMSwgcy5sZW5ndGggLSAxKS50cmltKCk7XG4gIH1cbiAgY29uc3QgaXNRdW90ZWRTcWxMaXRlcmFsID1cbiAgICAoKHMuc3RhcnRzV2l0aChcIk4nXCIpIHx8IHMuc3RhcnRzV2l0aChcIm4nXCIpKSAmJiBzLmVuZHNXaXRoKFwiJ1wiKSAmJiBzLmxlbmd0aCA+PSAzKSB8fFxuICAgIChzLnN0YXJ0c1dpdGgoXCInXCIpICYmIHMuZW5kc1dpdGgoXCInXCIpICYmIHMubGVuZ3RoID49IDIpO1xuXG4gIGlmIChpc1F1b3RlZFNxbExpdGVyYWwpIHtcbiAgICBjb25zdCBwcmVmaXhMZW4gPSAocy5zdGFydHNXaXRoKFwiTidcIikgfHwgcy5zdGFydHNXaXRoKFwibidcIikpID8gMiA6IDE7XG4gICAgcyA9IHMuc3Vic3RyaW5nKHByZWZpeExlbiwgcy5sZW5ndGggLSAxKTtcbiAgICBpZiAocy5pbmNsdWRlcyhcIicnXCIpKSB7XG4gICAgICBzID0gcy5yZXBsYWNlKC8nJy9nLCBcIidcIik7XG4gICAgfVxuICB9IGVsc2UgaWYgKHMuaW5jbHVkZXMoXCInJyAnJ1wiKSB8fCBzLmluY2x1ZGVzKFwiJycnJ1wiKSB8fCAvJydbYS16QS1aMC05X1xcc3wtXSsnJy8udGVzdChzKSkge1xuICAgIHMgPSBzLnJlcGxhY2UoLycnL2csIFwiJ1wiKTtcbiAgfVxuICByZXR1cm4gcztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBQYXJzZWRTcWxFeGVjIHtcbiAgcHJvY2VkdXJlTmFtZT86IHN0cmluZztcbiAgcGFyYW1ldGVyczogUmVjb3JkPHN0cmluZywgc3RyaW5nIHwgbnVtYmVyIHwgYm9vbGVhbj47XG59XG5cbi8qKlxuICogUGFyc2VzIGFuIFNTTVMgLyBULVNRTCBFWEVDIHN0YXRlbWVudCBzdWNoIGFzOlxuICogZXhlYyBHZXRfSGVscExpc3QgQGNockNPTVBBTllJRD1OJzEwMScsQGNoclRhYmxlTmFtZT1OJ01TVEFDQ1RHTFNVQicsQGludEV4ZWNGbGFnPTFcbiAqIEV4dHJhY3RzIHByb2NlZHVyZSBuYW1lIGFuZCB1bmVzY2FwZXMgcGFyYW1ldGVyIHZhbHVlcy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlU3FsRXhlY1N0YXRlbWVudChzcWw6IHN0cmluZyk6IFBhcnNlZFNxbEV4ZWMgfCBudWxsIHtcbiAgaWYgKCFzcWwgfHwgdHlwZW9mIHNxbCAhPT0gJ3N0cmluZycpIHJldHVybiBudWxsO1xuICBjb25zdCB0cmltbWVkID0gc3FsLnRyaW0oKTtcbiAgY29uc3QgZXhlY01hdGNoID0gdHJpbW1lZC5tYXRjaCgvXig/OmV4ZWMoPzp1dGUpP1xccyspKD86KD86XFxbP1tcXHddK1xcXT9cXC4pP1xcWz8oW1xcd10rKVxcXT8pXFxzKiguKikkL2lzKTtcbiAgaWYgKCFleGVjTWF0Y2ggJiYgIXRyaW1tZWQuc3RhcnRzV2l0aCgnQCcpKSByZXR1cm4gbnVsbDtcblxuICBjb25zdCBwcm9jZWR1cmVOYW1lID0gZXhlY01hdGNoID8gZXhlY01hdGNoWzFdIDogdW5kZWZpbmVkO1xuICBjb25zdCBwYXJhbVBhcnQgPSBleGVjTWF0Y2ggPyBleGVjTWF0Y2hbMl0gOiB0cmltbWVkO1xuXG4gIGNvbnN0IHBhcmFtZXRlcnM6IFJlY29yZDxzdHJpbmcsIHN0cmluZyB8IG51bWJlciB8IGJvb2xlYW4+ID0ge307XG4gIGlmICghcGFyYW1QYXJ0KSByZXR1cm4geyBwcm9jZWR1cmVOYW1lLCBwYXJhbWV0ZXJzIH07XG5cbiAgbGV0IGkgPSAwO1xuICBjb25zdCBsZW4gPSBwYXJhbVBhcnQubGVuZ3RoO1xuXG4gIHdoaWxlIChpIDwgbGVuKSB7XG4gICAgd2hpbGUgKGkgPCBsZW4gJiYgKHBhcmFtUGFydFtpXSA9PT0gJyAnIHx8IHBhcmFtUGFydFtpXSA9PT0gJ1xcdCcgfHwgcGFyYW1QYXJ0W2ldID09PSAnXFxyJyB8fCBwYXJhbVBhcnRbaV0gPT09ICdcXG4nIHx8IHBhcmFtUGFydFtpXSA9PT0gJywnKSkge1xuICAgICAgaSsrO1xuICAgIH1cbiAgICBpZiAoaSA+PSBsZW4pIGJyZWFrO1xuXG4gICAgaWYgKHBhcmFtUGFydFtpXSAhPT0gJ0AnKSB7XG4gICAgICBpKys7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICBjb25zdCBrZXlTdGFydCA9IGk7XG4gICAgd2hpbGUgKGkgPCBsZW4gJiYgcGFyYW1QYXJ0W2ldICE9PSAnPScgJiYgcGFyYW1QYXJ0W2ldICE9PSAnICcgJiYgcGFyYW1QYXJ0W2ldICE9PSAnXFx0Jykge1xuICAgICAgaSsrO1xuICAgIH1cbiAgICBjb25zdCBwYXJhbUtleSA9IHBhcmFtUGFydC5zbGljZShrZXlTdGFydCwgaSkudHJpbSgpO1xuXG4gICAgd2hpbGUgKGkgPCBsZW4gJiYgKHBhcmFtUGFydFtpXSA9PT0gJyAnIHx8IHBhcmFtUGFydFtpXSA9PT0gJ1xcdCcgfHwgcGFyYW1QYXJ0W2ldID09PSAnPScpKSB7XG4gICAgICBpKys7XG4gICAgfVxuXG4gICAgbGV0IHZhbFN0ciA9ICcnO1xuICAgIGlmIChpIDwgbGVuICYmIChwYXJhbVBhcnRbaV0gPT09IFwiJ1wiIHx8IChwYXJhbVBhcnRbaV0gPT09ICdOJyAmJiBwYXJhbVBhcnRbaSArIDFdID09PSBcIidcIikgfHwgKHBhcmFtUGFydFtpXSA9PT0gJ24nICYmIHBhcmFtUGFydFtpICsgMV0gPT09IFwiJ1wiKSkpIHtcbiAgICAgIGNvbnN0IGlzTiA9IHBhcmFtUGFydFtpXSA9PT0gJ04nIHx8IHBhcmFtUGFydFtpXSA9PT0gJ24nO1xuICAgICAgaSArPSBpc04gPyAyIDogMTtcbiAgICAgIGxldCBpblF1b3RlID0gdHJ1ZTtcbiAgICAgIGxldCBxdW90ZVZhbCA9ICcnO1xuICAgICAgd2hpbGUgKGkgPCBsZW4gJiYgaW5RdW90ZSkge1xuICAgICAgICBpZiAocGFyYW1QYXJ0W2ldID09PSBcIidcIikge1xuICAgICAgICAgIGlmIChpICsgMSA8IGxlbiAmJiBwYXJhbVBhcnRbaSArIDFdID09PSBcIidcIikge1xuICAgICAgICAgICAgcXVvdGVWYWwgKz0gXCInXCI7XG4gICAgICAgICAgICBpICs9IDI7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGluUXVvdGUgPSBmYWxzZTtcbiAgICAgICAgICAgIGkrKztcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcXVvdGVWYWwgKz0gcGFyYW1QYXJ0W2ldO1xuICAgICAgICAgIGkrKztcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgdmFsU3RyID0gcXVvdGVWYWw7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IHZhbFN0YXJ0ID0gaTtcbiAgICAgIHdoaWxlIChpIDwgbGVuICYmIHBhcmFtUGFydFtpXSAhPT0gJywnICYmIHBhcmFtUGFydFtpXSAhPT0gJ1xccicgJiYgcGFyYW1QYXJ0W2ldICE9PSAnXFxuJykge1xuICAgICAgICBpKys7XG4gICAgICB9XG4gICAgICB2YWxTdHIgPSBwYXJhbVBhcnQuc2xpY2UodmFsU3RhcnQsIGkpLnRyaW0oKTtcbiAgICB9XG5cbiAgICBjb25zdCBjbGVhbktleSA9IHBhcmFtS2V5LnJlcGxhY2UoL15ALywgJycpO1xuICAgIGlmIChjbGVhbktleSkge1xuICAgICAgaWYgKC9eLT9cXGQrJC8udGVzdCh2YWxTdHIpKSB7XG4gICAgICAgIHBhcmFtZXRlcnNbcGFyYW1LZXldID0gcGFyc2VJbnQodmFsU3RyLCAxMCk7XG4gICAgICB9IGVsc2UgaWYgKC9eLT9cXGQrXFwuXFxkKyQvLnRlc3QodmFsU3RyKSkge1xuICAgICAgICBwYXJhbWV0ZXJzW3BhcmFtS2V5XSA9IHBhcnNlRmxvYXQodmFsU3RyKTtcbiAgICAgIH0gZWxzZSBpZiAodmFsU3RyLnRvTG93ZXJDYXNlKCkgPT09ICd0cnVlJykge1xuICAgICAgICBwYXJhbWV0ZXJzW3BhcmFtS2V5XSA9IHRydWU7XG4gICAgICB9IGVsc2UgaWYgKHZhbFN0ci50b0xvd2VyQ2FzZSgpID09PSAnZmFsc2UnKSB7XG4gICAgICAgIHBhcmFtZXRlcnNbcGFyYW1LZXldID0gZmFsc2U7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBwYXJhbWV0ZXJzW3BhcmFtS2V5XSA9IHZhbFN0cjtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4geyBwcm9jZWR1cmVOYW1lLCBwYXJhbWV0ZXJzIH07XG59XG5cbi8qKlxuICogUmVzb2x2ZXMgb25lIHJhdyBtYXBwaW5nIHZhbHVlIGFnYWluc3Qgc2Vzc2lvbiArIGNhbnZhcyBmb3JtIHZhbHVlcy5cbiAqIC0gYHt7c2Vzc2lvbi5icmFuY2hJZH19YCAgLT4gc2Vzc2lvbiB2YWx1ZSAoY2FzZS1pbnNlbnNpdGl2ZSlcbiAqIC0gYHt7Y29udGV4dC50b2RheX19YCAgICAgLT4gY29tcHV0ZWQgZGF0ZVxuICogLSBge3tmcm9tRGF0ZX19YCAgICAgICAgICAtPiB2YWx1ZSBvZiBjYW52YXMgZmllbGQgd2l0aCBrZXkgYGZyb21EYXRlYCAoY2FzZS1pbnNlbnNpdGl2ZSlcbiAqIC0gYHt7ZGF0ZVJhbmdlLmZyb219fWAgICAgLT4gdmFsdWUgb2YgbmVzdGVkIGZyb20gcHJvcGVydHlcbiAqIC0gYW55dGhpbmcgZWxzZSAgICAgICAgICAgLT4gc2FuaXRpemVkIGxpdGVyYWwgdmFsdWUgKGZpeGVkIHZhbHVlKVxuICovXG5leHBvcnQgZnVuY3Rpb24gcmVzb2x2ZVBhcmFtZXRlclZhbHVlKFxuICByYXc6IHVua25vd24sXG4gIHNlc3Npb246IFJlY29yZDxzdHJpbmcsIHVua25vd24+LFxuICBmb3JtVmFsdWVzOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPlxuKTogdW5rbm93biB7XG4gIGlmICh0eXBlb2YgcmF3ICE9PSAnc3RyaW5nJykgcmV0dXJuIHJhdztcbiAgY29uc3QgdG9rZW4gPSBwYXJzZVBhcmFtZXRlclRva2VuKHJhdyk7XG4gIGlmICghdG9rZW4pIHJldHVybiBzYW5pdGl6ZVNxbFBhcmFtTGl0ZXJhbChyYXcpO1xuICBjb25zdCBpbm5lciA9IHRva2VuLmZpZWxkO1xuICBjb25zdCBmb3JtYXQgPSAodmFsdWU6IHVua25vd24pID0+IHRva2VuLmRhdGVGb3JtYXQgPyBmb3JtYXRQYXJhbWV0ZXJEYXRlKHZhbHVlLCB0b2tlbi5kYXRlRm9ybWF0KSA6IHZhbHVlO1xuICBpZiAoaW5uZXIuc3RhcnRzV2l0aCgnc2Vzc2lvbi4nKSkge1xuICAgIGNvbnN0IHNlc3Npb25LZXkgPSBpbm5lci5zbGljZSg4KTtcbiAgICBjb25zdCB2YWwgPSBnZXRGaWVsZENhc2VJbnNlbnNpdGl2ZShzZXNzaW9uLCBzZXNzaW9uS2V5KTtcbiAgICByZXR1cm4gZm9ybWF0KHZhbCAhPT0gdW5kZWZpbmVkICYmIHZhbCAhPT0gbnVsbCA/IHZhbCA6ICcnKTtcbiAgfVxuICBpZiAoaW5uZXIuc3RhcnRzV2l0aCgnY29udGV4dC4nKSkge1xuICAgIHJldHVybiBmb3JtYXQocmVzb2x2ZUNvbnRleHRQcmVzZXQoaW5uZXIuc2xpY2UoOCkpKTtcbiAgfVxuICBjb25zdCB2ID0gcmVzb2x2ZUNhbnZhc0ZpZWxkVmFsdWUoZm9ybVZhbHVlcywgaW5uZXIpO1xuICByZXR1cm4gZm9ybWF0KHYgIT09IHVuZGVmaW5lZCAmJiB2ICE9PSBudWxsID8gdiA6ICcnKTtcbn1cblxuLyoqIENhbm9uaWNhbCBTUUwgYXJndW1lbnQgbmFtZXMuIEVxdWFsIGFsaWFzZXMgY29sbGFwc2U7IGNvbmZsaWN0aW5nIHZhbHVlcyBmYWlsIGV4cGxpY2l0bHkuICovXG5leHBvcnQgZnVuY3Rpb24gbm9ybWFsaXplUGFyYW1ldGVyTmFtZXMocGFyYW1ldGVyczogUmVjb3JkPHN0cmluZywgdW5rbm93bj4pOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB7XG4gIGNvbnN0IG91dDogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gPSB7fTtcbiAgY29uc3QgbmFtZXMgPSBuZXcgTWFwPHN0cmluZywgc3RyaW5nPigpO1xuICBmb3IgKGNvbnN0IFtyYXdLZXksIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyhwYXJhbWV0ZXJzKSkge1xuICAgIGNvbnN0IGtleSA9IHJhd0tleS5yZXBsYWNlKC9eQCsvLCAnJyk7XG4gICAgaWYgKCFrZXkpIHRocm93IG5ldyBFcnJvcignQSBwYXJhbWV0ZXIgbmFtZSBjYW5ub3QgYmUgZW1wdHkuJyk7XG4gICAgY29uc3QgZXhpc3RpbmcgPSBuYW1lcy5nZXQoa2V5LnRvTG93ZXJDYXNlKCkpO1xuICAgIGlmIChleGlzdGluZyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBpZiAoIU9iamVjdC5pcyhvdXRbZXhpc3RpbmddLCB2YWx1ZSkgJiYgSlNPTi5zdHJpbmdpZnkob3V0W2V4aXN0aW5nXSkgIT09IEpTT04uc3RyaW5naWZ5KHZhbHVlKSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0NvbmZsaWN0aW5nIHZhbHVlcyBmb3IgcGFyYW1ldGVyIFwiJyArIGV4aXN0aW5nICsgJ1wiLiBLZWVwIG9uZSBtYXBwaW5nIGZvciB0aGlzIHBhcmFtZXRlci4nKTtcbiAgICAgIH1cbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICBuYW1lcy5zZXQoa2V5LnRvTG93ZXJDYXNlKCksIGtleSk7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG91dCwga2V5LCB7IHZhbHVlLCBlbnVtZXJhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUsIHdyaXRhYmxlOiB0cnVlIH0pO1xuICB9XG4gIHJldHVybiBvdXQ7XG59XG5cbi8qKiBSZXNvbHZlcyBtYXBwaW5ncyBpbnRvIG9uZSBjb25jcmV0ZSB2YWx1ZSBwZXIgcGFyYW1ldGVyLCB3aXRob3V0IEAgYWxpYXNlcy4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZXNvbHZlUGFyYW1ldGVyTWFwcGluZ3MoXG4gIG1hcHBpbmdzOiBQYXJhbWV0ZXJNYXBwaW5ncyB8IHVuZGVmaW5lZCxcbiAgc2Vzc2lvbjogUmVjb3JkPHN0cmluZywgdW5rbm93bj4sXG4gIGZvcm1WYWx1ZXM6IFJlY29yZDxzdHJpbmcsIHVua25vd24+XG4pOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB7XG4gIGNvbnN0IG91dDogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gPSB7fTtcbiAgZm9yIChjb25zdCBba2V5LCByYXddIG9mIE9iamVjdC5lbnRyaWVzKG1hcHBpbmdzID8/IHt9KSkge1xuICAgIGNvbnN0IHZhbCA9IHJlc29sdmVQYXJhbWV0ZXJWYWx1ZShyYXcsIHNlc3Npb24sIGZvcm1WYWx1ZXMpO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvdXQsIGtleSwgeyB2YWx1ZTogdmFsLCBlbnVtZXJhYmxlOiB0cnVlIH0pO1xuICB9XG4gIHJldHVybiBub3JtYWxpemVQYXJhbWV0ZXJOYW1lcyhvdXQpO1xufVxuXG4vKipcbiAqIFJldHVybnMgY2FudmFzIGZpZWxkIGtleXMgcmVmZXJlbmNlZCBieSBtYXBwaW5ncyB0aGF0IGN1cnJlbnRseSBoYXZlIG5vIHZhbHVlLlxuICogU2Vzc2lvbiAvIGNvbnRleHQgLyBmaXhlZCB2YWx1ZXMgbmV2ZXIgYmxvY2sgZXhlY3V0aW9uLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZmluZE1pc3NpbmdDYW52YXNGaWVsZHMoXG4gIG1hcHBpbmdzOiBQYXJhbWV0ZXJNYXBwaW5ncyB8IHVuZGVmaW5lZCxcbiAgZm9ybVZhbHVlczogUmVjb3JkPHN0cmluZywgdW5rbm93bj5cbik6IHN0cmluZ1tdIHtcbiAgY29uc3QgbWlzc2luZyA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuICBmb3IgKGNvbnN0IHJhdyBvZiBPYmplY3QudmFsdWVzKG1hcHBpbmdzID8/IHt9KSkge1xuICAgIGlmICh0eXBlb2YgcmF3ICE9PSAnc3RyaW5nJykgY29udGludWU7XG4gICAgY29uc3QgdG9rZW4gPSBwYXJzZVBhcmFtZXRlclRva2VuKHJhdyk7XG4gICAgaWYgKCF0b2tlbikgY29udGludWU7XG4gICAgY29uc3QgaW5uZXIgPSB0b2tlbi5maWVsZDtcbiAgICBpZiAoaW5uZXIuc3RhcnRzV2l0aCgnc2Vzc2lvbi4nKSB8fCBpbm5lci5zdGFydHNXaXRoKCdjb250ZXh0LicpKSBjb250aW51ZTtcbiAgICBjb25zdCB2ID0gcmVzb2x2ZUNhbnZhc0ZpZWxkVmFsdWUoZm9ybVZhbHVlcywgaW5uZXIpO1xuICAgIGlmICh2ID09PSB1bmRlZmluZWQgfHwgdiA9PT0gbnVsbCB8fCAodHlwZW9mIHYgPT09ICdzdHJpbmcnICYmIHYudHJpbSgpID09PSAnJykpIHtcbiAgICAgIG1pc3NpbmcuYWRkKGlubmVyKTtcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiB2ID09PSAnb2JqZWN0JyAmJiAhQXJyYXkuaXNBcnJheSh2KSAmJiAnZnJvbScgaW4gKHYgYXMgYW55KSkge1xuICAgICAgY29uc3QgciA9IHYgYXMgeyBmcm9tPzogc3RyaW5nOyB0bz86IHN0cmluZyB9O1xuICAgICAgaWYgKCFyLmZyb20gJiYgIXIudG8pIHtcbiAgICAgICAgbWlzc2luZy5hZGQoaW5uZXIpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICByZXR1cm4gWy4uLm1pc3NpbmddO1xufVxuXG4vKipcbiAqIFBpY2tzIHRoZSBkYXRhIHNvdXJjZSB0aGUgcmVzdWx0IGdyaWQgc2hvdWxkIHJ1bjpcbiAqIDEuIHRoZSBvbmUgcmVmZXJlbmNlZCBieSBgZ3JpZC5kYXRhU291cmNlSWRgXG4gKiAyLiBvdGhlcndpc2UgdGhlIGZpcnN0IGRlY2xhcmVkIGRhdGEgc291cmNlXG4gKiAzLiBvdGhlcndpc2UgYSBwcm9jZWR1cmUvdGFibGUgYm91bmQgdG8gYSBjb21wb25lbnQgKGxlZ2FjeSByZXBvcnRzKVxuICovXG5leHBvcnQgZnVuY3Rpb24gcmVzb2x2ZUV4ZWN1dGlvbkRhdGFTb3VyY2UoZGVmOiBSZXBvcnREZWZpbml0aW9uKTogUmVwb3J0RGF0YVNvdXJjZURlZmluaXRpb24gfCBudWxsIHtcbiAgY29uc3Qgc291cmNlcyA9IGRlZi5kYXRhU291cmNlcyA/PyBbXTtcbiAgY29uc3QgYnlJZCA9IHNvdXJjZXMuZmluZCgoZCkgPT4gZC5pZCA9PT0gZGVmLmdyaWQ/LmRhdGFTb3VyY2VJZCk7XG4gIGlmIChieUlkKSByZXR1cm4gYnlJZDtcbiAgaWYgKHNvdXJjZXMubGVuZ3RoID4gMCkgcmV0dXJuIHNvdXJjZXNbMF07XG5cbiAgY29uc3QgY29tcCA9IGRlZi5jb21wb25lbnRzLmZpbmQoKGMpID0+IGMuZGF0YVNvdXJjZT8uZW50aXR5TmFtZSk7XG4gIGNvbnN0IGNkcyA9IGNvbXA/LmRhdGFTb3VyY2U7XG4gIGlmIChjZHM/LmVudGl0eU5hbWUpIHtcbiAgICBjb25zdCBpc1RhYmxlID0gY2RzLnNvdXJjZVR5cGUgPT09ICd0YWJsZSc7XG4gICAgcmV0dXJuIHtcbiAgICAgIGlkOiBgc3AtJHtjZHMuZW50aXR5TmFtZX1gLFxuICAgICAgbmFtZTogY2RzLmVudGl0eU5hbWUsXG4gICAgICBlbmRwb2ludDogY2RzLmVudGl0eU5hbWUsXG4gICAgICBzY2hlbWE6IGNkcy5zY2hlbWEgfHwgJ2RibycsXG4gICAgICB0eXBlOiBpc1RhYmxlID8gJ3RhYmxlJyA6ICdzdG9yZWRfcHJvY2VkdXJlJyxcbiAgICAgIG1ldGhvZDogaXNUYWJsZSA/ICdHRVQnIDogJ1NUT1JFRF9QUk9DRURVUkUnLFxuICAgICAgcGFyYW1ldGVyTWFwcGluZ3M6IGNkcy5wYXJhbWV0ZXJNYXBwaW5ncyxcbiAgICB9O1xuICB9XG4gIHJldHVybiBudWxsO1xufVxuXG4vKiogU3RyaXBzIFNRTCBTZXJ2ZXIgSHVuZ2FyaWFuIHByZWZpeGVzOiBgQGNockZyb21EYXRlYCAtPiBgZnJvbURhdGVgLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRvRmllbGRLZXkocGFyYW1OYW1lOiBzdHJpbmcpOiBzdHJpbmcge1xuICBjb25zdCBzdHJpcHBlZCA9IHBhcmFtTmFtZVxuICAgIC5yZXBsYWNlKC9eQCsvLCAnJylcbiAgICAucmVwbGFjZSgvXihjaHJ8aW50fHZjaHJ8bmNocnxkdHxzdHJ8bnVtfGJpdHxkZWN8Zmx0KSg/PVtBLVpfXSkvLCAnJyk7XG4gIGNvbnN0IGNsZWFuID0gc3RyaXBwZWQucmVwbGFjZSgvW15hLXpBLVowLTldKyguKT8vZywgKF9tLCBjOiBzdHJpbmcgfCB1bmRlZmluZWQpID0+IChjID8gYy50b1VwcGVyQ2FzZSgpIDogJycpKTtcbiAgcmV0dXJuIGNsZWFuID8gY2xlYW4uY2hhckF0KDApLnRvTG93ZXJDYXNlKCkgKyBjbGVhbi5zbGljZSgxKSA6IHBhcmFtTmFtZTtcbn1cbiJdfQ==
@@ -1,4 +1,4 @@
1
- import { resolveParameterMappings } from '../../core/utils/report-parameter.util';
1
+ import { normalizeParameterNames, resolveParameterMappings } from '../../core/utils/report-parameter.util';
2
2
  /**
3
3
  * Endpoint-based data source adapter.
4
4
  *
@@ -43,6 +43,14 @@ export class EndpointDataSourceAdapter extends ReportDataSourceAdapter {
43
43
  headers = headers.set('X-Branch-Id', String(session['branchId']));
44
44
  }
45
45
  const kind = this.resolveKind(dataSource);
46
+ if (kind === 'procedure') {
47
+ try {
48
+ parameters = normalizeParameterNames(parameters);
49
+ }
50
+ catch (error) {
51
+ return throwError(() => error);
52
+ }
53
+ }
46
54
  const payload = {
47
55
  kind,
48
56
  name: dataSource.endpoint || dataSource.name,
@@ -96,4 +104,4 @@ export class EndpointDataSourceAdapter extends ReportDataSourceAdapter {
96
104
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: EndpointDataSourceAdapter, decorators: [{
97
105
  type: Injectable
98
106
  }] });
99
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW5kcG9pbnQtZGF0YXNvdXJjZS5hZGFwdGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYndheXMtcmVwb3J0L3NyYy9saWIvZGF0YS1hY2Nlc3MvYWRhcHRlcnMvZW5kcG9pbnQtZGF0YXNvdXJjZS5hZGFwdGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLHdDQUF3QyxDQUFDO0FBQ2xGOzs7OztHQUtHO0FBRUgsT0FBTyxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDbkQsT0FBTyxFQUFFLFVBQVUsRUFBRSxXQUFXLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUMvRCxPQUFPLEVBQWMsVUFBVSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQzlDLE9BQU8sRUFBRSxVQUFVLEVBQUUsR0FBRyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDakQsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sbUNBQW1DLENBQUM7QUFFNUUsT0FBTyxFQUFFLDJCQUEyQixFQUFFLE1BQU0sb0RBQW9ELENBQUM7QUFDakcsT0FBTyxFQUFFLHlCQUF5QixFQUFFLE1BQU0sa0RBQWtELENBQUM7QUFDN0YsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDBDQUEwQyxDQUFDO0FBQzNFLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLG1CQUFtQixDQUFDOztBQWUzRCxNQUFNLE9BQU8seUJBQTBCLFNBQVEsdUJBQXVCO0lBQ25ELElBQUksR0FBRyxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUM7SUFDMUIsU0FBUyxHQUFHLE1BQU0sQ0FBQyxzQkFBc0IsQ0FBQyxDQUFDO0lBQzNDLGNBQWMsR0FBRyxNQUFNLENBQUMsMkJBQTJCLEVBQUUsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztJQUN6RSxtQkFBbUIsR0FBRyxNQUFN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QztJQUNqQixDQUFDO0lBRU8sV0FBVyxDQUFDLEVBQThCO1FBQ2hELElBQUksRUFBRSxDQUFDLElBQUksS0FBSyxLQUFLO1lBQUUsT0FBTyxJQUFJLENBQUM7UUFDbkMsTUFBTSxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsUUFBUSxJQUFJLEVBQUUsQ0FBQyxJQUFJLElBQUksRUFBRSxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDakQsSUFBSSxFQUFFLENBQUMsVUFBVSxDQUFDLFNBQVMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxVQUFVLENBQUMsVUFBVSxDQUFDO1lBQUUsT0FBTyxJQUFJLENBQUM7UUFDdkUsSUFBSSxFQUFFLENBQUMsSUFBSSxLQUFLLE9BQU8sSUFBSSxFQUFFLENBQUMsSUFBSSxLQUFLLE1BQU0sSUFBSSxFQUFFLENBQUMsSUFBSSxLQUFLLGtCQUFrQixJQUFJLEVBQUUsQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQztZQUN0RyxPQUFPLElBQUksQ0FBQztRQUNkLENBQUM7UUFDRCxPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7d0dBcEZVLHlCQUF5Qjs0R0FBekIseUJBQXlCOzs0RkFBekIseUJBQXlCO2tCQURyQyxVQUFVIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgcmVzb2x2ZVBhcmFtZXRlck1hcHBpbmdzIH0gZnJvbSAnLi4vLi4vY29yZS91dGlscy9yZXBvcnQtcGFyYW1ldGVyLnV0aWwnO1xuLyoqXG4gKiBFbmRwb2ludC1iYXNlZCBkYXRhIHNvdXJjZSBhZGFwdGVyLlxuICpcbiAqIENhbGxzIHRoZSBgZXhlY3V0ZUVuZHBvaW50YCBkaXJlY3RseSB3aXRoIGEgbm9ybWFsaXplZCBwYXlsb2FkLlxuICogUmVwbGFjZXMgdGhlIGBhcGlCYXNlVXJsICsgL2V4ZWN1dGVgIHBhdHRlcm4uXG4gKi9cblxuaW1wb3J0IHsgaW5qZWN0LCBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBIdHRwQ2xpZW50LCBIdHRwSGVhZGVycyB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcbmltcG9ydCB7IE9ic2VydmFibGUsIHRocm93RXJyb3IgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGNhdGNoRXJyb3IsIG1hcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IFJlcG9ydERhdGFTb3VyY2VBZGFwdGVyIH0gZnJvbSAnLi4vY29udHJhY3RzL2RhdGEtc291cmNlLmNvbnRyYWN0JztcbmltcG9ydCB7IFJlcG9ydERhdGFTb3VyY2VEZWZpbml0aW9uIH0gZnJvbSAnLi4vLi4vY29yZS9tb2RlbHMvcmVwb3J0LWRhdGFzb3VyY2UubW9kZWwnO1xuaW1wb3J0IHsgUmVwb3J0U2Vzc2lvbkNvbnRleHRTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vY29yZS9zZXJ2aWNlcy9yZXBvcnQtc2Vzc2lvbi1jb250ZXh0LnNlcnZpY2UnO1xuaW1wb3J0IHsgUmVwb3J0QXBpRXhlY3V0aW9uU2VydmljZSB9IGZyb20gJy4uLy4uL2NvcmUvc2VydmljZXMvcmVwb3J0LWFwaS1leGVjdXRpb24uc2VydmljZSc7XG5pbXBvcnQgeyBleHRyYWN0Um93QXJyYXkgfSBmcm9tICcuLi8uLi9jb3JlL3V0aWxzL2RhdGEtbm9ybWFsaXphdGlvbi51dGlsJztcbmltcG9ydCB7IEJXQVlTX1JFUE9SVF9FTkRQT0lOVFMgfSBmcm9tICcuL2VuZHBvaW50LXRva2Vucyc7XG5cbi8qKlxuICogUmVxdWVzdCBwYXlsb2FkIGZvciB0aGUgc2ltcGxpZmllZCBleGVjdXRlIGVuZHBvaW50LlxuICovXG5pbnRlcmZhY2UgRW5kcG9pbnRFeGVjdXRlUGF5bG9hZCB7XG4gIGtpbmQ6ICdwcm9jZWR1cmUnIHwgJ3RhYmxlJztcbiAgbmFtZTogc3RyaW5nO1xuICBzY2hlbWE6IHN0cmluZztcbiAgcGFyYW1ldGVyczogUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gIGNvbHVtbnM/OiBzdHJpbmdbXTtcbiAgdG9wPzogbnVtYmVyO1xufVxuXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgRW5kcG9pbnREYXRhU291cmNlQWRhcHRlciBleHRlbmRzIFJlcG9ydERhdGFTb3VyY2VBZGFwdGVyIHtcbiAgcHJpdmF0ZSByZWFkb25seSBodHRwID0gaW5qZWN0KEh0dHBDbGllbnQpO1xuICBwcml2YXRlIHJlYWRvbmx5IGVuZHBvaW50cyA9IGluamVjdChCV0FZU19SRVBPUlRfRU5EUE9JTlRTKTtcbiAgcHJpdmF0ZSByZWFkb25seSBzZXNzaW9uU2VydmljZSA9IGluamVjdChSZXBvcnRTZXNzaW9uQ29udGV4dFNlcnZpY2UsIHsgb3B0aW9uYWw6IHRydWUgfSk7XG4gIHByaXZhdGUgcmVhZG9ubHkgYXBpRXhlY3V0aW9uU2VydmljZSA9IGluamVjdChSZXBvcnRBcGlFeGVjdXRpb25TZXJ2aWNlLCB7IG9wdGlvbmFsOiB0cnVlIH0pO1xuXG4gIGV4ZWN1dGUoXG4gICAgZGF0YVNvdXJjZTogUmVwb3J0RGF0YVNvdXJjZURlZmluaXRpb24sXG4gICAgcGFyYW1ldGVyczogUmVjb3JkPHN0cmluZywgdW5rbm93bj5cbiAgKTogT2JzZXJ2YWJsZTx1bmtub3duW10+IHtcbiAgICBpZiAodGhpcy5pc0FwaVNvdXJjZShkYXRhU291cmNlKSAmJiB0aGlzLmFwaUV4ZWN1dGlvblNlcnZpY2UpIHtcbiAgICAgIHJldHVybiB0aGlzLmFwaUV4ZWN1dGlvblNlcnZpY2UuZXhlY3V0ZUFwaShcbiAgICAgICAge1xuICAgICAgICAgIGVuZHBvaW50OiBkYXRhU291cmNlLmVuZHBvaW50IHx8IGRhdGFTb3VyY2UubmFtZSxcbiAgICAgICAgICBtZXRob2Q6IGRhdGFTb3VyY2UubWV0aG9kIGFzIGFueSxcbiAgICAgICAgICBkYXRhUGF0aDogZGF0YVNvdXJjZS5kYXRhUGF0aCxcbiAgICAgICAgICBoZWFkZXJzOiBkYXRhU291cmNlLmhlYWRlcnMsXG4gICAgICAgICAgdXNlUHJveHk6IGRhdGFTb3VyY2UudXNlUHJveHksXG4gICAgICAgICAgYm9keVRlbXBsYXRlOiBkYXRhU291cmNlLmJvZHlUZW1wbGF0ZSxcbiAgICAgICAgfSxcbiAgICAgICAgcGFyYW1ldGVyc1xuICAgICAgKTtcbiAgICB9XG5cbiAgICBpZiAoIXRoaXMuZW5kcG9pbnRzLmV4ZWN1dGVFbmRwb2ludCkge1xuICAgICAgcmV0dXJuIHRocm93RXJyb3IoKCkgPT4gbmV3IEVycm9yKCdbYndheXMtcmVwb3J0XSBObyBleGVjdXRlRW5kcG9pbnQgY29uZmlndXJlZC4nKSk7XG4gICAgfVxuICAgIGNvbnN0IHNlc3Npb24gPSB0aGlzLnNlc3Npb25TZXJ2aWNlPy5zZXNzaW9uQ29udGV4dCgpID8/IHt9O1xuXG4gICAgbGV0IGhlYWRlcnMgPSBuZXcgSHR0cEhlYWRlcnMoKTtcbiAgICBpZiAoc2Vzc2lvblsnY29tcGFueUlkJ10gIT09IHVuZGVmaW5lZCAmJiBzZXNzaW9uWydjb21wYW55SWQnXSAhPT0gbnVsbCkge1xuICAgICAgaGVhZGVycyA9IGhlYWRlcnMuc2V0KCdYLUNvbXBhbnktSWQnLCBTdHJpbmcoc2Vzc2lvblsnY29tcGFueUlkJ10pKTtcbiAgICB9XG4gICAgaWYgKHNlc3Npb25bJ2JyYW5jaElkJ10gIT09IHVuZGVmaW5lZCAmJiBzZXNzaW9uWydicmFuY2hJZCddICE9PSBudWxsKSB7XG4gICAgICBoZWFkZXJzID0gaGVhZGVycy5zZXQoJ1gtQnJhbmNoLUlkJywgU3RyaW5nKHNlc3Npb25bJ2JyYW5jaElkJ10pKTtcbiAgICB9XG5cbiAgICBjb25zdCBraW5kID0gdGhpcy5yZXNvbHZlS2luZChkYXRhU291cmNlKTtcbiAgICBjb25zdCBwYXlsb2FkID0ge1xuICAgICAga2luZCxcbiAgICAgIG5hbWU6IGRhdGFTb3VyY2UuZW5kcG9pbnQgfHwgZGF0YVNvdXJjZS5uYW1lLFxuICAgICAgc2NoZW1hOiBkYXRhU291cmNlLnNjaGVtYSA/PyAnZGJvJyxcbiAgICAgIHBhcmFtZXRlcnM6IHsgLi4ucGFyYW1ldGVycyB9LFxuICAgICAgY29sdW1uczogZGF0YVNvdXJjZS5jb2x1bW5zLFxuICAgICAgdG9wOiBkYXRhU291cmNlLnRvcCxcbiAgICAgIGZpbHRlcjogZGF0YVNvdXJjZS5maWx0ZXIgPyByZXNvbHZlUGFyYW1ldGVyTWFwcGluZ3MoZGF0YVNvdXJjZS5maWx0ZXIsIHNlc3Npb24sIHBhcmFtZXRlcnMpIDogdW5kZWZpbmVkLFxuICAgICAgZGF0YVNvdXJjZToge1xuICAgICAgICBpZDogZGF0YVNvdXJjZS5pZCB8fCBkYXRhU291cmNlLm5hbWUsXG4gICAgICAgIHR5cGU6IGtpbmQgPT09ICdwcm9jZWR1cmUnID8gJ3N0b3JlZF9wcm9jZWR1cmUnIDogKGRhdGFTb3VyY2UudHlwZSB8fCAndGFibGUnKSxcbiAgICAgICAgbmFtZTogZGF0YVNvdXJjZS5lbmRwb2ludCB8fCBkYXRhU291cmNlLm5hbWUsXG4gICAgICAgIHNjaGVtYTogZGF0YVNvdXJjZS5zY2hlbWEgPz8gJ2RibycsXG4gICAgICB9LFxuICAgICAgc2Vzc2lvbkNvbnRleHQ6IHNlc3Npb24sXG4gICAgfTtcblxuICAgIHJldHVybiB0aGlzLmh0dHBcbiAgICAgIC5wb3N0PHVua25vd24+KHRoaXMuZW5kcG9pbnRzLmV4ZWN1dGVFbmRwb2ludCwgcGF5bG9hZCwgeyBoZWFkZXJzIH0pXG4gICAgICAucGlwZShcbiAgICAgICAgbWFwKChyZXNwb25zZSkgPT4gZXh0cmFjdFJvd0FycmF5KHJlc3BvbnNlKSksXG4gICAgICAgIGNhdGNoRXJyb3IoKGVycikgPT4ge1xuICAgICAgICAgIGNvbnN0IG1zZyA9IGVycj8uZXJyb3I/Lm1lc3NhZ2UgfHwgZXJyPy5tZXNzYWdlIHx8ICdSZXBvcnQgZXhlY3V0aW9uIGZhaWxlZCc7XG4gICAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoKCkgPT4gbmV3IEVycm9yKEFycmF5LmlzQXJyYXkobXNnKSA/IG1zZy5qb2luKCcsICcpIDogbXNnKSk7XG4gICAgICAgIH0pXG4gICAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSByZXNvbHZlS2luZChkczogUmVwb3J0RGF0YVNvdXJjZURlZmluaXRpb24pOiAncHJvY2VkdXJlJyB8ICd0YWJsZScge1xuICAgIGlmIChkcy5tZXRob2QgPT09ICdTVE9SRURfUFJPQ0VEVVJFJykgcmV0dXJuICdwcm9jZWR1cmUnO1xuICAgIGlmIChkcy50eXBlID09PSAnc3RvcmVkX3Byb2NlZHVyZScpIHJldHVybiAncHJvY2VkdXJlJztcbiAgICBpZiAoZHMudHlwZSA9PT0gJ3RhYmxlJyB8fCBkcy50eXBlID09PSAndmlldycpIHJldHVybiAndGFibGUnO1xuICAgIC8vIEhldXJpc3RpYzogbmFtZXMgc3RhcnRpbmcgd2l0aCB1c3BfIC8gc3BfIGFyZSBwcm9jZWR1cmVzXG4gICAgY29uc3QgbmFtZSA9IChkcy5lbmRwb2ludCB8fCBkcy5uYW1lIHx8ICcnKS50b0xvd2VyQ2FzZSgpO1xuICAgIGlmIChuYW1lLnN0YXJ0c1dpdGgoJ3VzcF8nKSB8fCBuYW1lLnN0YXJ0c1dpdGgoJ3NwXycpKSByZXR1cm4gJ3Byb2NlZHVyZSc7XG4gICAgcmV0dXJuICd0YWJsZSc7XG4gIH1cblxuICBwcml2YXRlIGlzQXBpU291cmNlKGRzOiBSZXBvcnREYXRhU291cmNlRGVmaW5pdGlvbik6IGJvb2xlYW4ge1xuICAgIGlmIChkcy50eXBlID09PSAnYXBpJykgcmV0dXJuIHRydWU7XG4gICAgY29uc3QgZXAgPSAoZHMuZW5kcG9pbnQgfHwgZHMubmFtZSB8fCAnJykudHJpbSgpO1xuICAgIGlmIChlcC5zdGFydHNXaXRoKCdodHRwOi8vJykgfHwgZXAuc3RhcnRzV2l0aCgnaHR0cHM6Ly8nKSkgcmV0dXJuIHRydWU7XG4gICAgaWYgKGRzLnR5cGUgIT09ICd0YWJsZScgJiYgZHMudHlwZSAhPT0gJ3ZpZXcnICYmIGRzLnR5cGUgIT09ICdzdG9yZWRfcHJvY2VkdXJlJyAmJiBlcC5zdGFydHNXaXRoKCcvJykpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbn1cbiJdfQ==
107
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW5kcG9pbnQtZGF0YXNvdXJjZS5hZGFwdGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYndheXMtcmVwb3J0L3NyYy9saWIvZGF0YS1hY2Nlc3MvYWRhcHRlcnMvZW5kcG9pbnQtZGF0YXNvdXJjZS5hZGFwdGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSx3QkFBd0IsRUFBRSxNQUFNLHdDQUF3QyxDQUFDO0FBQzNHOzs7OztHQUtHO0FBRUgsT0FBTyxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDbkQsT0FBTyxFQUFFLFVBQVUsRUFBRSxXQUFXLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUMvRCxPQUFPLEVBQWMsVUFBVSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQzlDLE9BQU8sRUFBRSxVQUFVLEVBQUUsR0FBRyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDakQsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sbUNBQW1DLENBQUM7QUFFNUUsT0FBTyxFQUFFLDJCQUEyQixFQUFFLE1BQU0sb0RBQW9ELENBQUM7QUFDakcsT0FBTyxFQUFFLHlCQUF5QixFQUFFLE1BQU0sa0RBQWtELENBQUM7QUFDN0YsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDBDQUEwQyxDQUFDO0FBQzNFLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLG1CQUFtQixDQUFDOztBQWUzRCxNQUFNLE9BQU8seUJBQTBCLFNBQVEsdUJBQXVCO0lBQ25ELElBQUksR0FBRyxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUM7SUFDMUIsU0FBUyxHQUFHLE1BQU0sQ0FBQyxzQkFBc0IsQ0FBQyxDQUFDO0lBQzNDLGNBQWMsR0FBRyxNQUFNLENBQUMsMkJBQTJCLEVBQUUsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztJQUN6RSxtQkFBbUIsR0FBRyxNQUFNLENBQUMseUJBQXlCLEVBQUUsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztJQUU3RixPQUFPLENBQ0wsVUFBc0MsRUFDdEMsVUFBbUM7UUFFbkMsSUFBSSxJQUFJLENBQUMsV0FBVyxDQUFDLFVBQVUsQ0FBQyxJQUFJLElBQUksQ0FBQyxtQkFBbUIsRUFBRSxDQUFDO1lBQzdELE9BQU8sSUFBSSxDQUFDLG1CQUFtQixDQUFDLFVBQVUsQ0FDeEM7Z0JBQ0UsUUFBUSxFQUFFLFVBQVUsQ0FBQyxRQUFRLElBQUksVUFBVSxDQUFDLElBQUk7Z0JBQ2hELE1BQU0sRUFBRSxVQUFVLENBQUMsTUFBYTtnQkFDaEMsUUFBUSxFQUFFLFVBQVUsQ0FBQyxRQUFRO2dCQUM3QixPQUFPLEVBQUUsVUFBVSxDQUFDLE9BQU87Z0JBQzNCLFFBQVEsRUFBRSxVQUFVLENBQUMsUUFBUTtnQkFDN0IsWUFBWSxFQUFFLFVBQVUsQ0FBQyxZQUFZO2FBQ3RDLEVBQ0QsVUFBVSxDQUNYLENBQUM7UUFDSixDQUFDO1FBRUQsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsZUFBZSxFQUFFLENBQUM7WUFDcEMsT0FBTyxVQUFVLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxLQUFLLENBQUMsK0NBQStDLENBQUMsQ0FBQyxDQUFDO1FBQ3RGLENBQUM7UUFDRCxNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsY0FBYyxFQUFFLGNBQWMsRUFBRSxJQUFJLEVBQUUsQ0FBQztRQUU1RCxJQUFJLE9BQU8sR0FBRyxJQUFJLFdBQVcsRUFBRSxDQUFDO1FBQ2hDLElBQUksT0FBTyxDQUFDLFdBQVcsQ0FBQyxLQUFLLFNBQVMsSUFBSSxPQUFPLENBQUMsV0FBVyxDQUFDLEtBQUssSUFBSSxFQUFFLENBQUM7WUFDeEUsT0FBTyxHQUFHLE9BQU8sQ0FBQyxHQUFHLENBQUMsY0FBYyxFQUFFLE1BQU0sQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3RFLENBQUM7UUFDRCxJQUFJLE9BQU8sQ0FBQyxVQUFVLENBQUMsS0FBSyxTQUFTLElBQUksT0FBTyxDQUFDLFVBQVUsQ0FBQyxLQUFLLElBQUksRUFBRSxDQUFDO1lBQ3RFLE9BQU8sR0FBRyxPQUFPLENBQUMsR0FBRyxDQUFDLGFBQWEsRUFBRSxNQUFNLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNwRSxDQUFDO1FBRUQsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUMxQyxJQUFJLElBQUksS0FBSyxXQUFXLEVBQUUsQ0FBQztZQUN6QixJQUFJLENBQUM7Z0JBQUMsVUFBVSxHQUFHLHVCQUF1QixDQUFDLFVBQVUsQ0FBQyxDQUFDO1lBQUMsQ0FBQztZQUN6RCxPQUFPLEtBQUssRUFBRSxDQUFDO2dCQUFDLE9BQU8sVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQUMsQ0FBQztRQUNuRCxDQUFDO1FBQ0QsTUFBTSxPQUFPLEdBQUc7WUFDZCxJQUFJO1lBQ0osSUFBSSxFQUFFLFVBQVUsQ0FBQyxRQUFRLElBQUksVUFBVSxDQUFDLElBQUk7WUFDNUMsTUFBTSxFQUFFLFVBQVUsQ0FBQyxNQUFNLElBQUksS0FBSztZQUNsQyxVQUFVLEVBQUUsRUFBRSxHQUFHLFVBQVUsRUFBRTtZQUM3QixPQUFPLEVBQUUsVUFBVSxDQUFDLE9BQU87WUFDM0IsR0FBRyxFQUFFLFVBQVUsQ0FBQyxHQUFHO1lBQ25CLE1BQU0sRUFBRSxVQUFVLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyx3QkFBd0IsQ0FBQyxVQUFVLENBQUMsTUFBTSxFQUFFLE9BQU8sRUFBRSxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUztZQUN4RyxVQUFVLEVBQUU7Z0JBQ1YsRUFBRSxFQUFFLFVBQVUsQ0FBQyxFQUFFLElBQUksVUFBVSxDQUFDLElBQUk7Z0JBQ3BDLElBQUksRUFBRSxJQUFJLEtBQUssV0FBVyxDQUFDLENBQUMsQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsSUFBSSxJQUFJLE9BQU8sQ0FBQztnQkFDOUUsSUFBSSxFQUFFLFVBQVUsQ0FBQyxRQUFRLElBQUksVUFBVSxDQUFDLElBQUk7Z0JBQzVDLE1BQU0sRUFBRSxVQUFVLENBQUMsTUFBTSxJQUFJLEtBQUs7YUFDbkM7WUFDRCxjQUFjLEVBQUUsT0FBTztTQUN4QixDQUFDO1FBRUYsT0FBTyxJQUFJLENBQUMsSUFBSTthQUNiLElBQUksQ0FBVSxJQUFJLENBQUMsU0FBUyxDQUFDLGVBQWUsRUFBRSxPQUFPLEVBQUUsRUFBRSxPQUFPLEVBQUUsQ0FBQzthQUNuRSxJQUFJLENBQ0gsR0FBRyxDQUFDLENBQUMsUUFBUSxFQUFFLEVBQUUsQ0FBQyxlQUFlLENBQUMsUUFBUSxDQUFDLENBQUMsRUFDNUMsVUFBVSxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUU7WUFDakIsTUFBTSxHQUFHLEdBQUcsR0FBRyxFQUFFLEtBQUssRUFBRSxPQUFPLElBQUksR0FBRyxFQUFFLE9BQU8sSUFBSSx5QkFBeUIsQ0FBQztZQUM3RSxPQUFPLFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLEtBQUssQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO1FBQ2hGLENBQUMsQ0FBQyxDQUNILENBQUM7SUFDTixDQUFDO0lBRU8sV0FBVyxDQUFDLEVBQThCO1FBQ2hELElBQUksRUFBRSxDQUFDLE1BQU0sS0FBSyxrQkFBa0I7WUFBRSxPQUFPLFdBQVcsQ0FBQztRQUN6RCxJQUFJLEVBQUUsQ0FBQyxJQUFJLEtBQUssa0JBQWtCO1lBQUUsT0FBTyxXQUFXLENBQUM7UUFDdkQsSUFBSSxFQUFFLENBQUMsSUFBSSxLQUFLLE9BQU8sSUFBSSxFQUFFLENBQUMsSUFBSSxLQUFLLE1BQU07WUFBRSxPQUFPLE9BQU8sQ0FBQztRQUM5RCwyREFBMkQ7UUFDM0QsTUFBTSxJQUFJLEdBQUcsQ0FBQyxFQUFFLENBQUMsUUFBUSxJQUFJLEVBQUUsQ0FBQyxJQUFJLElBQUksRUFBRSxDQUFDLENBQUMsV0FBVyxFQUFFLENBQUM7UUFDMUQsSUFBSSxJQUFJLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxJQUFJLElBQUksQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDO1lBQUUsT0FBTyxXQUFXLENBQUM7UUFDMUUsT0FBTyxPQUFPLENBQUM7SUFDakIsQ0FBQztJQUVPLFdBQVcsQ0FBQyxFQUE4QjtRQUNoRCxJQUFJLEVBQUUsQ0FBQyxJQUFJLEtBQUssS0FBSztZQUFFLE9BQU8sSUFBSSxDQUFDO1FBQ25DLE1BQU0sRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLFFBQVEsSUFBSSxFQUFFLENBQUMsSUFBSSxJQUFJLEVBQUUsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDO1FBQ2pELElBQUksRUFBRSxDQUFDLFVBQVUsQ0FBQyxTQUFTLENBQUMsSUFBSSxFQUFFLENBQUMsVUFBVSxDQUFDLFVBQVUsQ0FBQztZQUFFLE9BQU8sSUFBSSxDQUFDO1FBQ3ZFLElBQUksRUFBRSxDQUFDLElBQUksS0FBSyxPQUFPLElBQUksRUFBRSxDQUFDLElBQUksS0FBSyxNQUFNLElBQUksRUFBRSxDQUFDLElBQUksS0FBSyxrQkFBa0IsSUFBSSxFQUFFLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUM7WUFDdEcsT0FBTyxJQUFJLENBQUM7UUFDZCxDQUFDO1FBQ0QsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDO3dHQXhGVSx5QkFBeUI7NEdBQXpCLHlCQUF5Qjs7NEZBQXpCLHlCQUF5QjtrQkFEckMsVUFBVSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IG5vcm1hbGl6ZVBhcmFtZXRlck5hbWVzLCByZXNvbHZlUGFyYW1ldGVyTWFwcGluZ3MgfSBmcm9tICcuLi8uLi9jb3JlL3V0aWxzL3JlcG9ydC1wYXJhbWV0ZXIudXRpbCc7XG4vKipcbiAqIEVuZHBvaW50LWJhc2VkIGRhdGEgc291cmNlIGFkYXB0ZXIuXG4gKlxuICogQ2FsbHMgdGhlIGBleGVjdXRlRW5kcG9pbnRgIGRpcmVjdGx5IHdpdGggYSBub3JtYWxpemVkIHBheWxvYWQuXG4gKiBSZXBsYWNlcyB0aGUgYGFwaUJhc2VVcmwgKyAvZXhlY3V0ZWAgcGF0dGVybi5cbiAqL1xuXG5pbXBvcnQgeyBpbmplY3QsIEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEh0dHBDbGllbnQsIEh0dHBIZWFkZXJzIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xuaW1wb3J0IHsgT2JzZXJ2YWJsZSwgdGhyb3dFcnJvciB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgY2F0Y2hFcnJvciwgbWFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgUmVwb3J0RGF0YVNvdXJjZUFkYXB0ZXIgfSBmcm9tICcuLi9jb250cmFjdHMvZGF0YS1zb3VyY2UuY29udHJhY3QnO1xuaW1wb3J0IHsgUmVwb3J0RGF0YVNvdXJjZURlZmluaXRpb24gfSBmcm9tICcuLi8uLi9jb3JlL21vZGVscy9yZXBvcnQtZGF0YXNvdXJjZS5tb2RlbCc7XG5pbXBvcnQgeyBSZXBvcnRTZXNzaW9uQ29udGV4dFNlcnZpY2UgfSBmcm9tICcuLi8uLi9jb3JlL3NlcnZpY2VzL3JlcG9ydC1zZXNzaW9uLWNvbnRleHQuc2VydmljZSc7XG5pbXBvcnQgeyBSZXBvcnRBcGlFeGVjdXRpb25TZXJ2aWNlIH0gZnJvbSAnLi4vLi4vY29yZS9zZXJ2aWNlcy9yZXBvcnQtYXBpLWV4ZWN1dGlvbi5zZXJ2aWNlJztcbmltcG9ydCB7IGV4dHJhY3RSb3dBcnJheSB9IGZyb20gJy4uLy4uL2NvcmUvdXRpbHMvZGF0YS1ub3JtYWxpemF0aW9uLnV0aWwnO1xuaW1wb3J0IHsgQldBWVNfUkVQT1JUX0VORFBPSU5UUyB9IGZyb20gJy4vZW5kcG9pbnQtdG9rZW5zJztcblxuLyoqXG4gKiBSZXF1ZXN0IHBheWxvYWQgZm9yIHRoZSBzaW1wbGlmaWVkIGV4ZWN1dGUgZW5kcG9pbnQuXG4gKi9cbmludGVyZmFjZSBFbmRwb2ludEV4ZWN1dGVQYXlsb2FkIHtcbiAga2luZDogJ3Byb2NlZHVyZScgfCAndGFibGUnO1xuICBuYW1lOiBzdHJpbmc7XG4gIHNjaGVtYTogc3RyaW5nO1xuICBwYXJhbWV0ZXJzOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgY29sdW1ucz86IHN0cmluZ1tdO1xuICB0b3A/OiBudW1iZXI7XG59XG5cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBFbmRwb2ludERhdGFTb3VyY2VBZGFwdGVyIGV4dGVuZHMgUmVwb3J0RGF0YVNvdXJjZUFkYXB0ZXIge1xuICBwcml2YXRlIHJlYWRvbmx5IGh0dHAgPSBpbmplY3QoSHR0cENsaWVudCk7XG4gIHByaXZhdGUgcmVhZG9ubHkgZW5kcG9pbnRzID0gaW5qZWN0KEJXQVlTX1JFUE9SVF9FTkRQT0lOVFMpO1xuICBwcml2YXRlIHJlYWRvbmx5IHNlc3Npb25TZXJ2aWNlID0gaW5qZWN0KFJlcG9ydFNlc3Npb25Db250ZXh0U2VydmljZSwgeyBvcHRpb25hbDogdHJ1ZSB9KTtcbiAgcHJpdmF0ZSByZWFkb25seSBhcGlFeGVjdXRpb25TZXJ2aWNlID0gaW5qZWN0KFJlcG9ydEFwaUV4ZWN1dGlvblNlcnZpY2UsIHsgb3B0aW9uYWw6IHRydWUgfSk7XG5cbiAgZXhlY3V0ZShcbiAgICBkYXRhU291cmNlOiBSZXBvcnREYXRhU291cmNlRGVmaW5pdGlvbixcbiAgICBwYXJhbWV0ZXJzOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPlxuICApOiBPYnNlcnZhYmxlPHVua25vd25bXT4ge1xuICAgIGlmICh0aGlzLmlzQXBpU291cmNlKGRhdGFTb3VyY2UpICYmIHRoaXMuYXBpRXhlY3V0aW9uU2VydmljZSkge1xuICAgICAgcmV0dXJuIHRoaXMuYXBpRXhlY3V0aW9uU2VydmljZS5leGVjdXRlQXBpKFxuICAgICAgICB7XG4gICAgICAgICAgZW5kcG9pbnQ6IGRhdGFTb3VyY2UuZW5kcG9pbnQgfHwgZGF0YVNvdXJjZS5uYW1lLFxuICAgICAgICAgIG1ldGhvZDogZGF0YVNvdXJjZS5tZXRob2QgYXMgYW55LFxuICAgICAgICAgIGRhdGFQYXRoOiBkYXRhU291cmNlLmRhdGFQYXRoLFxuICAgICAgICAgIGhlYWRlcnM6IGRhdGFTb3VyY2UuaGVhZGVycyxcbiAgICAgICAgICB1c2VQcm94eTogZGF0YVNvdXJjZS51c2VQcm94eSxcbiAgICAgICAgICBib2R5VGVtcGxhdGU6IGRhdGFTb3VyY2UuYm9keVRlbXBsYXRlLFxuICAgICAgICB9LFxuICAgICAgICBwYXJhbWV0ZXJzXG4gICAgICApO1xuICAgIH1cblxuICAgIGlmICghdGhpcy5lbmRwb2ludHMuZXhlY3V0ZUVuZHBvaW50KSB7XG4gICAgICByZXR1cm4gdGhyb3dFcnJvcigoKSA9PiBuZXcgRXJyb3IoJ1tid2F5cy1yZXBvcnRdIE5vIGV4ZWN1dGVFbmRwb2ludCBjb25maWd1cmVkLicpKTtcbiAgICB9XG4gICAgY29uc3Qgc2Vzc2lvbiA9IHRoaXMuc2Vzc2lvblNlcnZpY2U/LnNlc3Npb25Db250ZXh0KCkgPz8ge307XG5cbiAgICBsZXQgaGVhZGVycyA9IG5ldyBIdHRwSGVhZGVycygpO1xuICAgIGlmIChzZXNzaW9uWydjb21wYW55SWQnXSAhPT0gdW5kZWZpbmVkICYmIHNlc3Npb25bJ2NvbXBhbnlJZCddICE9PSBudWxsKSB7XG4gICAgICBoZWFkZXJzID0gaGVhZGVycy5zZXQoJ1gtQ29tcGFueS1JZCcsIFN0cmluZyhzZXNzaW9uWydjb21wYW55SWQnXSkpO1xuICAgIH1cbiAgICBpZiAoc2Vzc2lvblsnYnJhbmNoSWQnXSAhPT0gdW5kZWZpbmVkICYmIHNlc3Npb25bJ2JyYW5jaElkJ10gIT09IG51bGwpIHtcbiAgICAgIGhlYWRlcnMgPSBoZWFkZXJzLnNldCgnWC1CcmFuY2gtSWQnLCBTdHJpbmcoc2Vzc2lvblsnYnJhbmNoSWQnXSkpO1xuICAgIH1cblxuICAgIGNvbnN0IGtpbmQgPSB0aGlzLnJlc29sdmVLaW5kKGRhdGFTb3VyY2UpO1xuICAgIGlmIChraW5kID09PSAncHJvY2VkdXJlJykge1xuICAgICAgdHJ5IHsgcGFyYW1ldGVycyA9IG5vcm1hbGl6ZVBhcmFtZXRlck5hbWVzKHBhcmFtZXRlcnMpOyB9XG4gICAgICBjYXRjaCAoZXJyb3IpIHsgcmV0dXJuIHRocm93RXJyb3IoKCkgPT4gZXJyb3IpOyB9XG4gICAgfVxuICAgIGNvbnN0IHBheWxvYWQgPSB7XG4gICAgICBraW5kLFxuICAgICAgbmFtZTogZGF0YVNvdXJjZS5lbmRwb2ludCB8fCBkYXRhU291cmNlLm5hbWUsXG4gICAgICBzY2hlbWE6IGRhdGFTb3VyY2Uuc2NoZW1hID8/ICdkYm8nLFxuICAgICAgcGFyYW1ldGVyczogeyAuLi5wYXJhbWV0ZXJzIH0sXG4gICAgICBjb2x1bW5zOiBkYXRhU291cmNlLmNvbHVtbnMsXG4gICAgICB0b3A6IGRhdGFTb3VyY2UudG9wLFxuICAgICAgZmlsdGVyOiBkYXRhU291cmNlLmZpbHRlciA/IHJlc29sdmVQYXJhbWV0ZXJNYXBwaW5ncyhkYXRhU291cmNlLmZpbHRlciwgc2Vzc2lvbiwgcGFyYW1ldGVycykgOiB1bmRlZmluZWQsXG4gICAgICBkYXRhU291cmNlOiB7XG4gICAgICAgIGlkOiBkYXRhU291cmNlLmlkIHx8IGRhdGFTb3VyY2UubmFtZSxcbiAgICAgICAgdHlwZToga2luZCA9PT0gJ3Byb2NlZHVyZScgPyAnc3RvcmVkX3Byb2NlZHVyZScgOiAoZGF0YVNvdXJjZS50eXBlIHx8ICd0YWJsZScpLFxuICAgICAgICBuYW1lOiBkYXRhU291cmNlLmVuZHBvaW50IHx8IGRhdGFTb3VyY2UubmFtZSxcbiAgICAgICAgc2NoZW1hOiBkYXRhU291cmNlLnNjaGVtYSA/PyAnZGJvJyxcbiAgICAgIH0sXG4gICAgICBzZXNzaW9uQ29udGV4dDogc2Vzc2lvbixcbiAgICB9O1xuXG4gICAgcmV0dXJuIHRoaXMuaHR0cFxuICAgICAgLnBvc3Q8dW5rbm93bj4odGhpcy5lbmRwb2ludHMuZXhlY3V0ZUVuZHBvaW50LCBwYXlsb2FkLCB7IGhlYWRlcnMgfSlcbiAgICAgIC5waXBlKFxuICAgICAgICBtYXAoKHJlc3BvbnNlKSA9PiBleHRyYWN0Um93QXJyYXkocmVzcG9uc2UpKSxcbiAgICAgICAgY2F0Y2hFcnJvcigoZXJyKSA9PiB7XG4gICAgICAgICAgY29uc3QgbXNnID0gZXJyPy5lcnJvcj8ubWVzc2FnZSB8fCBlcnI/Lm1lc3NhZ2UgfHwgJ1JlcG9ydCBleGVjdXRpb24gZmFpbGVkJztcbiAgICAgICAgICByZXR1cm4gdGhyb3dFcnJvcigoKSA9PiBuZXcgRXJyb3IoQXJyYXkuaXNBcnJheShtc2cpID8gbXNnLmpvaW4oJywgJykgOiBtc2cpKTtcbiAgICAgICAgfSlcbiAgICAgICk7XG4gIH1cblxuICBwcml2YXRlIHJlc29sdmVLaW5kKGRzOiBSZXBvcnREYXRhU291cmNlRGVmaW5pdGlvbik6ICdwcm9jZWR1cmUnIHwgJ3RhYmxlJyB7XG4gICAgaWYgKGRzLm1ldGhvZCA9PT0gJ1NUT1JFRF9QUk9DRURVUkUnKSByZXR1cm4gJ3Byb2NlZHVyZSc7XG4gICAgaWYgKGRzLnR5cGUgPT09ICdzdG9yZWRfcHJvY2VkdXJlJykgcmV0dXJuICdwcm9jZWR1cmUnO1xuICAgIGlmIChkcy50eXBlID09PSAndGFibGUnIHx8IGRzLnR5cGUgPT09ICd2aWV3JykgcmV0dXJuICd0YWJsZSc7XG4gICAgLy8gSGV1cmlzdGljOiBuYW1lcyBzdGFydGluZyB3aXRoIHVzcF8gLyBzcF8gYXJlIHByb2NlZHVyZXNcbiAgICBjb25zdCBuYW1lID0gKGRzLmVuZHBvaW50IHx8IGRzLm5hbWUgfHwgJycpLnRvTG93ZXJDYXNlKCk7XG4gICAgaWYgKG5hbWUuc3RhcnRzV2l0aCgndXNwXycpIHx8IG5hbWUuc3RhcnRzV2l0aCgnc3BfJykpIHJldHVybiAncHJvY2VkdXJlJztcbiAgICByZXR1cm4gJ3RhYmxlJztcbiAgfVxuXG4gIHByaXZhdGUgaXNBcGlTb3VyY2UoZHM6IFJlcG9ydERhdGFTb3VyY2VEZWZpbml0aW9uKTogYm9vbGVhbiB7XG4gICAgaWYgKGRzLnR5cGUgPT09ICdhcGknKSByZXR1cm4gdHJ1ZTtcbiAgICBjb25zdCBlcCA9IChkcy5lbmRwb2ludCB8fCBkcy5uYW1lIHx8ICcnKS50cmltKCk7XG4gICAgaWYgKGVwLnN0YXJ0c1dpdGgoJ2h0dHA6Ly8nKSB8fCBlcC5zdGFydHNXaXRoKCdodHRwczovLycpKSByZXR1cm4gdHJ1ZTtcbiAgICBpZiAoZHMudHlwZSAhPT0gJ3RhYmxlJyAmJiBkcy50eXBlICE9PSAndmlldycgJiYgZHMudHlwZSAhPT0gJ3N0b3JlZF9wcm9jZWR1cmUnICYmIGVwLnN0YXJ0c1dpdGgoJy8nKSkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxufVxuIl19