cps-ui-kit 18.11.0 → 19.1.0

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 (84) hide show
  1. package/fesm2022/cps-ui-kit.mjs +269 -307
  2. package/fesm2022/cps-ui-kit.mjs.map +1 -1
  3. package/lib/components/cps-autocomplete/cps-autocomplete.component.d.ts +2 -2
  4. package/lib/components/cps-menu/cps-menu.component.d.ts +4 -3
  5. package/lib/components/cps-select/cps-select.component.d.ts +2 -2
  6. package/lib/services/cps-dialog/internal/components/cps-dialog/cps-dialog.component.d.ts +3 -3
  7. package/lib/services/cps-notification/internal/components/cps-notification-container/cps-notification-container.component.d.ts +3 -3
  8. package/package.json +6 -8
  9. package/styles/styles.scss +9 -0
  10. package/esm2022/cps-ui-kit.mjs +0 -5
  11. package/esm2022/lib/components/cps-autocomplete/cps-autocomplete.component.mjs +0 -948
  12. package/esm2022/lib/components/cps-button/cps-button.component.mjs +0 -205
  13. package/esm2022/lib/components/cps-button-toggle/cps-button-toggle.component.mjs +0 -239
  14. package/esm2022/lib/components/cps-checkbox/cps-checkbox.component.mjs +0 -154
  15. package/esm2022/lib/components/cps-chip/cps-chip.component.mjs +0 -94
  16. package/esm2022/lib/components/cps-datepicker/cps-datepicker.component.mjs +0 -382
  17. package/esm2022/lib/components/cps-divider/cps-divider.component.mjs +0 -60
  18. package/esm2022/lib/components/cps-expansion-panel/cps-expansion-panel.component.mjs +0 -213
  19. package/esm2022/lib/components/cps-file-upload/cps-file-upload.component.mjs +0 -182
  20. package/esm2022/lib/components/cps-icon/cps-icon.component.mjs +0 -203
  21. package/esm2022/lib/components/cps-info-circle/cps-info-circle.component.mjs +0 -61
  22. package/esm2022/lib/components/cps-input/cps-input.component.mjs +0 -385
  23. package/esm2022/lib/components/cps-loader/cps-loader.component.mjs +0 -58
  24. package/esm2022/lib/components/cps-menu/cps-menu.component.mjs +0 -572
  25. package/esm2022/lib/components/cps-paginator/cps-paginator.component.mjs +0 -118
  26. package/esm2022/lib/components/cps-paginator/pipes/cps-paginate.pipe.mjs +0 -30
  27. package/esm2022/lib/components/cps-progress-circular/cps-progress-circular.component.mjs +0 -51
  28. package/esm2022/lib/components/cps-progress-linear/cps-progress-linear.component.mjs +0 -75
  29. package/esm2022/lib/components/cps-radio-group/cps-radio/cps-radio.component.mjs +0 -42
  30. package/esm2022/lib/components/cps-radio-group/cps-radio-button/cps-radio-button.component.mjs +0 -77
  31. package/esm2022/lib/components/cps-radio-group/cps-radio-group.component.mjs +0 -225
  32. package/esm2022/lib/components/cps-scheduler/cps-scheduler.component.mjs +0 -682
  33. package/esm2022/lib/components/cps-scheduler/cps-scheduler.utils.mjs +0 -604
  34. package/esm2022/lib/components/cps-select/cps-select.component.mjs +0 -654
  35. package/esm2022/lib/components/cps-sidebar-menu/cps-sidebar-menu.component.mjs +0 -110
  36. package/esm2022/lib/components/cps-switch/cps-switch.component.mjs +0 -131
  37. package/esm2022/lib/components/cps-tab-group/cps-tab/cps-tab.component.mjs +0 -86
  38. package/esm2022/lib/components/cps-tab-group/cps-tab-group.component.mjs +0 -308
  39. package/esm2022/lib/components/cps-table/components/internal/cps-sort-icon/cps-sort-icon.component.mjs +0 -79
  40. package/esm2022/lib/components/cps-table/components/internal/table-column-filter/table-column-filter.component.mjs +0 -407
  41. package/esm2022/lib/components/cps-table/components/internal/table-column-filter-constraint/table-column-filter-constraint.component.mjs +0 -147
  42. package/esm2022/lib/components/cps-table/components/internal/table-row-menu/table-row-menu.component.mjs +0 -105
  43. package/esm2022/lib/components/cps-table/cps-column-filter-types.mjs +0 -29
  44. package/esm2022/lib/components/cps-table/cps-table.component.mjs +0 -1022
  45. package/esm2022/lib/components/cps-table/directives/cps-table-column-filter.directive.mjs +0 -181
  46. package/esm2022/lib/components/cps-table/directives/cps-table-column-resizable.directive.mjs +0 -22
  47. package/esm2022/lib/components/cps-table/directives/cps-table-column-sortable.directive.mjs +0 -47
  48. package/esm2022/lib/components/cps-table/directives/cps-table-header-selectable.directive.mjs +0 -32
  49. package/esm2022/lib/components/cps-table/directives/cps-table-row-selectable.directive.mjs +0 -35
  50. package/esm2022/lib/components/cps-table/directives/internal/table-unsort.directive.mjs +0 -212
  51. package/esm2022/lib/components/cps-table/pipes/cps-table-detect-filter-type.pipe.mjs +0 -29
  52. package/esm2022/lib/components/cps-tag/cps-tag.component.mjs +0 -121
  53. package/esm2022/lib/components/cps-textarea/cps-textarea.component.mjs +0 -290
  54. package/esm2022/lib/components/cps-timepicker/cps-timepicker.component.mjs +0 -370
  55. package/esm2022/lib/components/cps-tree-autocomplete/cps-tree-autocomplete.component.mjs +0 -273
  56. package/esm2022/lib/components/cps-tree-select/cps-tree-select.component.mjs +0 -87
  57. package/esm2022/lib/components/cps-tree-table/cps-tree-table.component.mjs +0 -1279
  58. package/esm2022/lib/components/cps-tree-table/directives/cps-tree-table-column-filter.directive.mjs +0 -174
  59. package/esm2022/lib/components/cps-tree-table/directives/cps-tree-table-column-resizable.directive.mjs +0 -22
  60. package/esm2022/lib/components/cps-tree-table/directives/cps-tree-table-column-sortable.directive.mjs +0 -47
  61. package/esm2022/lib/components/cps-tree-table/directives/cps-tree-table-header-selectable.directive.mjs +0 -33
  62. package/esm2022/lib/components/cps-tree-table/directives/cps-tree-table-row-selectable.directive.mjs +0 -36
  63. package/esm2022/lib/components/cps-tree-table/directives/cps-tree-table-row-toggler.directive.mjs +0 -48
  64. package/esm2022/lib/components/cps-tree-table/directives/internal/tree-table-unsort.directive.mjs +0 -352
  65. package/esm2022/lib/components/cps-tree-table/pipes/cps-tree-table-detect-filter-type.pipe.mjs +0 -30
  66. package/esm2022/lib/components/internal/cps-base-tree-dropdown/cps-base-tree-dropdown.component.mjs +0 -656
  67. package/esm2022/lib/directives/cps-tooltip/cps-tooltip.directive.mjs +0 -275
  68. package/esm2022/lib/pipes/internal/check-option-selected.pipe.mjs +0 -24
  69. package/esm2022/lib/pipes/internal/combine-labels.pipe.mjs +0 -25
  70. package/esm2022/lib/pipes/internal/label-by-value.pipe.mjs +0 -16
  71. package/esm2022/lib/services/cps-dialog/cps-dialog.service.mjs +0 -146
  72. package/esm2022/lib/services/cps-dialog/internal/components/cps-confirmation/cps-confirmation.component.mjs +0 -25
  73. package/esm2022/lib/services/cps-dialog/internal/components/cps-dialog/cps-dialog.component.mjs +0 -470
  74. package/esm2022/lib/services/cps-dialog/internal/directives/cps-dialog-content.directive.mjs +0 -18
  75. package/esm2022/lib/services/cps-dialog/utils/cps-dialog-config.mjs +0 -3
  76. package/esm2022/lib/services/cps-dialog/utils/cps-dialog-ref.mjs +0 -128
  77. package/esm2022/lib/services/cps-notification/cps-notification.service.mjs +0 -122
  78. package/esm2022/lib/services/cps-notification/internal/components/cps-notification-container/cps-notification-container.component.mjs +0 -95
  79. package/esm2022/lib/services/cps-notification/internal/components/cps-toast/cps-toast.component.mjs +0 -106
  80. package/esm2022/lib/services/cps-notification/utils/cps-notification-config.mjs +0 -27
  81. package/esm2022/lib/services/cps-notification/utils/internal/cps-notification-data.mjs +0 -12
  82. package/esm2022/lib/utils/colors-utils.mjs +0 -59
  83. package/esm2022/lib/utils/internal/size-utils.mjs +0 -24
  84. package/esm2022/public-api.mjs +0 -58
@@ -1,213 +0,0 @@
1
- import { CommonModule, DOCUMENT } from '@angular/common';
2
- import { Component, EventEmitter, Inject, Input, Output, ViewChild } from '@angular/core';
3
- import { CpsIconComponent } from '../cps-icon/cps-icon.component';
4
- import { getCSSColor } from '../../utils/colors-utils';
5
- import { convertSize } from '../../utils/internal/size-utils';
6
- import { animate, state, style, transition, trigger } from '@angular/animations';
7
- import * as i0 from "@angular/core";
8
- import * as i1 from "@angular/animations";
9
- import * as i2 from "@angular/common";
10
- const transitionType = '0.2s cubic-bezier(0.4, 0, 0.2, 1)';
11
- /**
12
- * CpsExpansionPanelComponent is a component that provides content on expansion.
13
- * @group Components
14
- */
15
- export class CpsExpansionPanelComponent {
16
- constructor(_animationBuilder, document, _renderer) {
17
- this._animationBuilder = _animationBuilder;
18
- this.document = document;
19
- this._renderer = _renderer;
20
- /**
21
- * Title of the expansionPanel element.
22
- * @group Props
23
- */
24
- this.headerTitle = '';
25
- /**
26
- * Background color of the expansion panel element.
27
- * @group Props
28
- */
29
- this.backgroundColor = 'transparent';
30
- /**
31
- * Determines whether to show the chevron icon.
32
- * @group Props
33
- */
34
- this.showChevron = true;
35
- /**
36
- * Indicates current expansion state.
37
- * @group Props
38
- */
39
- this.isExpanded = false;
40
- /**
41
- * Determines whether expansion panel is disabled.
42
- * @group Props
43
- */
44
- this.disabled = false;
45
- /**
46
- * If true, expansion panel element will have borders.
47
- * @group Props
48
- */
49
- this.bordered = true;
50
- /**
51
- * The border radius of the component.
52
- * @group Props
53
- */
54
- this.borderRadius = 0;
55
- /**
56
- * Border color of the expansion panel.
57
- * @group Props
58
- */
59
- this.borderColor = 'line-light';
60
- /**
61
- * The width of the expansion panel of type number denoting pixels or string.
62
- * @group Props
63
- */
64
- this.width = '100%';
65
- /**
66
- * Name of the icon in front of the title.
67
- * @group Props
68
- */
69
- this.prefixIcon = '';
70
- /**
71
- * Callback to invoke after a tab gets collapsed.
72
- * @param {void}
73
- * @group Emits
74
- */
75
- this.afterCollapse = new EventEmitter();
76
- /**
77
- * Callback to invoke after a tab gets expanded.
78
- * @param {void}
79
- * @group Emits
80
- */
81
- this.afterExpand = new EventEmitter();
82
- this._contentCollapseAnimation = this._animationBuilder.build([
83
- style({
84
- height: '*'
85
- }),
86
- animate(transitionType, style({
87
- height: 0
88
- }))
89
- ]);
90
- this._contentExpandAnimation = this._animationBuilder.build([
91
- style({
92
- height: 0
93
- }),
94
- animate(transitionType, style({
95
- height: '*'
96
- }))
97
- ]);
98
- }
99
- ngOnInit() {
100
- this.borderColor = getCSSColor(this.borderColor, this.document);
101
- this.backgroundColor = getCSSColor(this.backgroundColor, this.document);
102
- this.borderRadius = convertSize(this.borderRadius);
103
- this.width = convertSize(this.width);
104
- }
105
- ngAfterViewInit() {
106
- if (!this.isExpanded) {
107
- this._updateContentVisibilityStyles(false);
108
- }
109
- }
110
- toggleExpansion() {
111
- if (this.disabled || this._contentAnimationPlayer)
112
- return;
113
- const el = this.panelContentElem?.nativeElement;
114
- if (this.isExpanded) {
115
- this._contentAnimationPlayer = this._contentCollapseAnimation.create(el);
116
- this._contentAnimationPlayer.onDone(() => {
117
- this._updateContentVisibilityStyles(false, el);
118
- });
119
- }
120
- else {
121
- this._updateContentVisibilityStyles(true, el);
122
- this._contentAnimationPlayer = this._contentExpandAnimation.create(el);
123
- }
124
- this._contentAnimationPlayer.onStart(() => {
125
- this._renderer.setStyle(el, 'overflow', 'hidden');
126
- });
127
- this._contentAnimationPlayer.onDone(() => {
128
- this._renderer.removeStyle(el, 'overflow');
129
- this._contentAnimationPlayer?.destroy();
130
- this._contentAnimationPlayer = undefined;
131
- });
132
- this._contentAnimationPlayer.play();
133
- this.isExpanded = !this.isExpanded;
134
- if (this.isExpanded) {
135
- this.afterExpand.emit();
136
- }
137
- if (!this.isExpanded) {
138
- this.afterCollapse.emit();
139
- }
140
- }
141
- _updateContentVisibilityStyles(isVisible, el) {
142
- el = el || this.panelContentElem?.nativeElement;
143
- if (!el)
144
- return;
145
- if (isVisible) {
146
- this._renderer.removeStyle(el, 'height');
147
- this._renderer.removeStyle(el, 'visibility');
148
- }
149
- else {
150
- this._renderer.setStyle(el, 'height', '0');
151
- this._renderer.setStyle(el, 'visibility', 'hidden');
152
- }
153
- }
154
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.1.3", ngImport: i0, type: CpsExpansionPanelComponent, deps: [{ token: i1.AnimationBuilder }, { token: DOCUMENT }, { token: i0.Renderer2 }], target: i0.ɵɵFactoryTarget.Component }); }
155
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.1.3", type: CpsExpansionPanelComponent, isStandalone: true, selector: "cps-expansion-panel", inputs: { headerTitle: "headerTitle", backgroundColor: "backgroundColor", showChevron: "showChevron", isExpanded: "isExpanded", disabled: "disabled", bordered: "bordered", borderRadius: "borderRadius", borderColor: "borderColor", width: "width", prefixIcon: "prefixIcon" }, outputs: { afterCollapse: "afterCollapse", afterExpand: "afterExpand" }, viewQueries: [{ propertyName: "panelContentElem", first: true, predicate: ["panelContentElem"], descendants: true }], ngImport: i0, template: "<div\n class=\"cps-expansion-panel\"\n [class.expanded]=\"isExpanded\"\n [ngStyle]=\"{\n 'background-color': backgroundColor,\n 'border-radius': borderRadius,\n width: width,\n border: bordered ? '1px solid ' + borderColor : ''\n }\">\n <div\n class=\"cps-expansion-panel-header\"\n [@panelHeader]=\"\n isExpanded\n ? {\n value: 'visible',\n params: {\n borderStyle: bordered ? '1px solid ' + borderColor : ''\n }\n }\n : 'hidden'\n \"\n [ngClass]=\"{ disabled: disabled }\"\n [style.cursor]=\"disabled ? 'default' : 'pointer'\"\n (click)=\"toggleExpansion()\">\n <span class=\"cps-expansion-panel-prefix-icon\" *ngIf=\"prefixIcon\">\n <cps-icon\n [icon]=\"prefixIcon\"\n size=\"small\"\n [color]=\"disabled ? 'text-mild' : 'text-dark'\">\n </cps-icon>\n </span>\n <div class=\"cps-expansion-panel-title\">{{ headerTitle }}</div>\n <span class=\"cps-expansion-panel-chevron\" *ngIf=\"showChevron && !disabled\">\n <cps-icon icon=\"chevron-down\" size=\"small\" color=\"text-dark\"> </cps-icon>\n </span>\n </div>\n <div class=\"cps-expansion-panel-content\" #panelContentElem>\n <div class=\"cps-expansion-panel-content-inner\">\n <ng-content></ng-content>\n </div>\n </div>\n</div>\n", styles: [":host{display:flex}:host .cps-expansion-panel{overflow:hidden;font-family:Source Sans Pro,sans-serif;line-height:20px;color:var(--cps-color-text-dark)}:host .cps-expansion-panel-header{border-bottom-color:transparent;display:flex;align-items:center;padding:10px 16px 10px 24px;font-size:16px;justify-content:space-between;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}:host .cps-expansion-panel-header:hover{background-color:var(--cps-color-highlight-hover)}:host .cps-expansion-panel-header:active{background-color:var(--cps-color-highlight-active)}:host .cps-expansion-panel-header.disabled{pointer-events:none;color:var(--cps-color-text-mild)}:host .cps-expansion-panel-prefix-icon{display:flex;align-items:center;margin-right:12px;margin-bottom:2px}:host .cps-expansion-panel-prefix-icon cps-icon ::ng-deep .cps-icon{width:18px;height:18px}:host .cps-expansion-panel-title{flex:1 0 auto;display:inline-flex;font-weight:600}:host .cps-expansion-panel-chevron{width:16px;display:flex;align-items:center;transition-duration:.2s;margin-left:6px}:host .cps-expansion-panel-content{overflow:auto;color:var(--cps-color-text-dark);font-size:16px}:host .cps-expansion-panel-content-inner{padding:16px 24px}:host .cps-expansion-panel.expanded .cps-expansion-panel-content{max-height:500px}:host .cps-expansion-panel.expanded .cps-expansion-panel-chevron{transform:rotate(180deg)}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "component", type: CpsIconComponent, selector: "cps-icon", inputs: ["icon", "size", "color"] }], animations: [
156
- trigger('panelHeader', [
157
- state('hidden', style({
158
- borderBottom: ''
159
- })),
160
- state('visible', style({
161
- borderBottom: '{{borderStyle}}'
162
- }), { params: { borderStyle: '' } }),
163
- transition('visible <=> hidden', [animate(transitionType)]),
164
- transition('void => *', animate(0))
165
- ])
166
- ] }); }
167
- }
168
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.3", ngImport: i0, type: CpsExpansionPanelComponent, decorators: [{
169
- type: Component,
170
- args: [{ standalone: true, imports: [CommonModule, CpsIconComponent], selector: 'cps-expansion-panel', animations: [
171
- trigger('panelHeader', [
172
- state('hidden', style({
173
- borderBottom: ''
174
- })),
175
- state('visible', style({
176
- borderBottom: '{{borderStyle}}'
177
- }), { params: { borderStyle: '' } }),
178
- transition('visible <=> hidden', [animate(transitionType)]),
179
- transition('void => *', animate(0))
180
- ])
181
- ], template: "<div\n class=\"cps-expansion-panel\"\n [class.expanded]=\"isExpanded\"\n [ngStyle]=\"{\n 'background-color': backgroundColor,\n 'border-radius': borderRadius,\n width: width,\n border: bordered ? '1px solid ' + borderColor : ''\n }\">\n <div\n class=\"cps-expansion-panel-header\"\n [@panelHeader]=\"\n isExpanded\n ? {\n value: 'visible',\n params: {\n borderStyle: bordered ? '1px solid ' + borderColor : ''\n }\n }\n : 'hidden'\n \"\n [ngClass]=\"{ disabled: disabled }\"\n [style.cursor]=\"disabled ? 'default' : 'pointer'\"\n (click)=\"toggleExpansion()\">\n <span class=\"cps-expansion-panel-prefix-icon\" *ngIf=\"prefixIcon\">\n <cps-icon\n [icon]=\"prefixIcon\"\n size=\"small\"\n [color]=\"disabled ? 'text-mild' : 'text-dark'\">\n </cps-icon>\n </span>\n <div class=\"cps-expansion-panel-title\">{{ headerTitle }}</div>\n <span class=\"cps-expansion-panel-chevron\" *ngIf=\"showChevron && !disabled\">\n <cps-icon icon=\"chevron-down\" size=\"small\" color=\"text-dark\"> </cps-icon>\n </span>\n </div>\n <div class=\"cps-expansion-panel-content\" #panelContentElem>\n <div class=\"cps-expansion-panel-content-inner\">\n <ng-content></ng-content>\n </div>\n </div>\n</div>\n", styles: [":host{display:flex}:host .cps-expansion-panel{overflow:hidden;font-family:Source Sans Pro,sans-serif;line-height:20px;color:var(--cps-color-text-dark)}:host .cps-expansion-panel-header{border-bottom-color:transparent;display:flex;align-items:center;padding:10px 16px 10px 24px;font-size:16px;justify-content:space-between;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}:host .cps-expansion-panel-header:hover{background-color:var(--cps-color-highlight-hover)}:host .cps-expansion-panel-header:active{background-color:var(--cps-color-highlight-active)}:host .cps-expansion-panel-header.disabled{pointer-events:none;color:var(--cps-color-text-mild)}:host .cps-expansion-panel-prefix-icon{display:flex;align-items:center;margin-right:12px;margin-bottom:2px}:host .cps-expansion-panel-prefix-icon cps-icon ::ng-deep .cps-icon{width:18px;height:18px}:host .cps-expansion-panel-title{flex:1 0 auto;display:inline-flex;font-weight:600}:host .cps-expansion-panel-chevron{width:16px;display:flex;align-items:center;transition-duration:.2s;margin-left:6px}:host .cps-expansion-panel-content{overflow:auto;color:var(--cps-color-text-dark);font-size:16px}:host .cps-expansion-panel-content-inner{padding:16px 24px}:host .cps-expansion-panel.expanded .cps-expansion-panel-content{max-height:500px}:host .cps-expansion-panel.expanded .cps-expansion-panel-chevron{transform:rotate(180deg)}\n"] }]
182
- }], ctorParameters: () => [{ type: i1.AnimationBuilder }, { type: Document, decorators: [{
183
- type: Inject,
184
- args: [DOCUMENT]
185
- }] }, { type: i0.Renderer2 }], propDecorators: { headerTitle: [{
186
- type: Input
187
- }], backgroundColor: [{
188
- type: Input
189
- }], showChevron: [{
190
- type: Input
191
- }], isExpanded: [{
192
- type: Input
193
- }], disabled: [{
194
- type: Input
195
- }], bordered: [{
196
- type: Input
197
- }], borderRadius: [{
198
- type: Input
199
- }], borderColor: [{
200
- type: Input
201
- }], width: [{
202
- type: Input
203
- }], prefixIcon: [{
204
- type: Input
205
- }], afterCollapse: [{
206
- type: Output
207
- }], afterExpand: [{
208
- type: Output
209
- }], panelContentElem: [{
210
- type: ViewChild,
211
- args: ['panelContentElem']
212
- }] } });
213
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3BzLWV4cGFuc2lvbi1wYW5lbC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jcHMtdWkta2l0L3NyYy9saWIvY29tcG9uZW50cy9jcHMtZXhwYW5zaW9uLXBhbmVsL2Nwcy1leHBhbnNpb24tcGFuZWwuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY3BzLXVpLWtpdC9zcmMvbGliL2NvbXBvbmVudHMvY3BzLWV4cGFuc2lvbi1wYW5lbC9jcHMtZXhwYW5zaW9uLXBhbmVsLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxZQUFZLEVBQUUsUUFBUSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDekQsT0FBTyxFQUVMLFNBQVMsRUFFVCxZQUFZLEVBQ1osTUFBTSxFQUNOLEtBQUssRUFFTCxNQUFNLEVBRU4sU0FBUyxFQUNWLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxnQkFBZ0IsRUFBWSxNQUFNLGdDQUFnQyxDQUFDO0FBQzVFLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUN2RCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFDOUQsT0FBTyxFQUlMLE9BQU8sRUFDUCxLQUFLLEVBQ0wsS0FBSyxFQUNMLFVBQVUsRUFDVixPQUFPLEVBQ1IsTUFBTSxxQkFBcUIsQ0FBQzs7OztBQUU3QixNQUFNLGNBQWMsR0FBRyxtQ0FBbUMsQ0FBQztBQUUzRDs7O0dBR0c7QUEyQkgsTUFBTSxPQUFPLDBCQUEwQjtJQWlGckMsWUFDVSxpQkFBbUMsRUFDakIsUUFBa0IsRUFDcEMsU0FBb0I7UUFGcEIsc0JBQWlCLEdBQWpCLGlCQUFpQixDQUFrQjtRQUNqQixhQUFRLEdBQVIsUUFBUSxDQUFVO1FBQ3BDLGNBQVMsR0FBVCxTQUFTLENBQVc7UUFuRjlCOzs7V0FH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LEVBQUUsTUFBTSxFQUFFLEVBQUUsV0FBVyxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQ2hDOzRCQUNELFVBQVUsQ0FBQyxvQkFBb0IsRUFBRSxDQUFDLE9BQU8sQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDOzRCQUMzRCxVQUFVLENBQUMsV0FBVyxFQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQzt5QkFDcEMsQ0FBQztxQkFDSDs7MEJBcUZFLE1BQU07MkJBQUMsUUFBUTtpRUE5RVQsV0FBVztzQkFBbkIsS0FBSztnQkFNRyxlQUFlO3NCQUF2QixLQUFLO2dCQU1HLFdBQVc7c0JBQW5CLEtBQUs7Z0JBTUcsVUFBVTtzQkFBbEIsS0FBSztnQkFNRyxRQUFRO3NCQUFoQixLQUFLO2dCQU1HLFFBQVE7c0JBQWhCLEtBQUs7Z0JBTUcsWUFBWTtzQkFBcEIsS0FBSztnQkFNRyxXQUFXO3NCQUFuQixLQUFLO2dCQU1HLEtBQUs7c0JBQWIsS0FBSztnQkFNRyxVQUFVO3NCQUFsQixLQUFLO2dCQU9JLGFBQWE7c0JBQXRCLE1BQU07Z0JBT0csV0FBVztzQkFBcEIsTUFBTTtnQkFFd0IsZ0JBQWdCO3NCQUE5QyxTQUFTO3VCQUFDLGtCQUFrQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbW1vbk1vZHVsZSwgRE9DVU1FTlQgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHtcbiAgQWZ0ZXJWaWV3SW5pdCxcbiAgQ29tcG9uZW50LFxuICBFbGVtZW50UmVmLFxuICBFdmVudEVtaXR0ZXIsXG4gIEluamVjdCxcbiAgSW5wdXQsXG4gIE9uSW5pdCxcbiAgT3V0cHV0LFxuICBSZW5kZXJlcjIsXG4gIFZpZXdDaGlsZFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENwc0ljb25Db21wb25lbnQsIEljb25UeXBlIH0gZnJvbSAnLi4vY3BzLWljb24vY3BzLWljb24uY29tcG9uZW50JztcbmltcG9ydCB7IGdldENTU0NvbG9yIH0gZnJvbSAnLi4vLi4vdXRpbHMvY29sb3JzLXV0aWxzJztcbmltcG9ydCB7IGNvbnZlcnRTaXplIH0gZnJvbSAnLi4vLi4vdXRpbHMvaW50ZXJuYWwvc2l6ZS11dGlscyc7XG5pbXBvcnQge1xuICBBbmltYXRpb25CdWlsZGVyLFxuICBBbmltYXRpb25GYWN0b3J5LFxuICBBbmltYXRpb25QbGF5ZXIsXG4gIGFuaW1hdGUsXG4gIHN0YXRlLFxuICBzdHlsZSxcbiAgdHJhbnNpdGlvbixcbiAgdHJpZ2dlclxufSBmcm9tICdAYW5ndWxhci9hbmltYXRpb25zJztcblxuY29uc3QgdHJhbnNpdGlvblR5cGUgPSAnMC4ycyBjdWJpYy1iZXppZXIoMC40LCAwLCAwLjIsIDEpJztcblxuLyoqXG4gKiBDcHNFeHBhbnNpb25QYW5lbENvbXBvbmVudCBpcyBhIGNvbXBvbmVudCB0aGF0IHByb3ZpZGVzIGNvbnRlbnQgb24gZXhwYW5zaW9uLlxuICogQGdyb3VwIENvbXBvbmVudHNcbiAqL1xuQENvbXBvbmVudCh7XG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGltcG9ydHM6IFtDb21tb25Nb2R1bGUsIENwc0ljb25Db21wb25lbnRdLFxuICBzZWxlY3RvcjogJ2Nwcy1leHBhbnNpb24tcGFuZWwnLFxuICB0ZW1wbGF0ZVVybDogJy4vY3BzLWV4cGFuc2lvbi1wYW5lbC5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2Nwcy1leHBhbnNpb24tcGFuZWwuY29tcG9uZW50LnNjc3MnXSxcbiAgYW5pbWF0aW9uczogW1xuICAgIHRyaWdnZXIoJ3BhbmVsSGVhZGVyJywgW1xuICAgICAgc3RhdGUoXG4gICAgICAgICdoaWRkZW4nLFxuICAgICAgICBzdHlsZSh7XG4gICAgICAgICAgYm9yZGVyQm90dG9tOiAnJ1xuICAgICAgICB9KVxuICAgICAgKSxcbiAgICAgIHN0YXRlKFxuICAgICAgICAndmlzaWJsZScsXG4gICAgICAgIHN0eWxlKHtcbiAgICAgICAgICBib3JkZXJCb3R0b206ICd7e2JvcmRlclN0eWxlfX0nXG4gICAgICAgIH0pLFxuICAgICAgICB7IHBhcmFtczogeyBib3JkZXJTdHlsZTogJycgfSB9XG4gICAgICApLFxuICAgICAgdHJhbnNpdGlvbigndmlzaWJsZSA8PT4gaGlkZGVuJywgW2FuaW1hdGUodHJhbnNpdGlvblR5cGUpXSksXG4gICAgICB0cmFuc2l0aW9uKCd2b2lkID0+IConLCBhbmltYXRlKDApKVxuICAgIF0pXG4gIF1cbn0pXG5leHBvcnQgY2xhc3MgQ3BzRXhwYW5zaW9uUGFuZWxDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIEFmdGVyVmlld0luaXQge1xuICAvKipcbiAgICogVGl0bGUgb2YgdGhlIGV4cGFuc2lvblBhbmVsIGVsZW1lbnQuXG4gICAqIEBncm91cCBQcm9wc1xuICAgKi9cbiAgQElucHV0KCkgaGVhZGVyVGl0bGUgPSAnJztcblxuICAvKipcbiAgICogQmFja2dyb3VuZCBjb2xvciBvZiB0aGUgZXhwYW5zaW9uIHBhbmVsIGVsZW1lbnQuXG4gICAqIEBncm91cCBQcm9wc1xuICAgKi9cbiAgQElucHV0KCkgYmFja2dyb3VuZENvbG9yID0gJ3RyYW5zcGFyZW50JztcblxuICAvKipcbiAgICogRGV0ZXJtaW5lcyB3aGV0aGVyIHRvIHNob3cgdGhlIGNoZXZyb24gaWNvbi5cbiAgICogQGdyb3VwIFByb3BzXG4gICAqL1xuICBASW5wdXQoKSBzaG93Q2hldnJvbiA9IHRydWU7XG5cbiAgLyoqXG4gICAqIEluZGljYXRlcyBjdXJyZW50IGV4cGFuc2lvbiBzdGF0ZS5cbiAgICogQGdyb3VwIFByb3BzXG4gICAqL1xuICBASW5wdXQoKSBpc0V4cGFuZGVkID0gZmFsc2U7XG5cbiAgLyoqXG4gICAqIERldGVybWluZXMgd2hldGhlciBleHBhbnNpb24gcGFuZWwgaXMgZGlzYWJsZWQuXG4gICAqIEBncm91cCBQcm9wc1xuICAgKi9cbiAgQElucHV0KCkgZGlzYWJsZWQgPSBmYWxzZTtcblxuICAvKipcbiAgICogSWYgdHJ1ZSwgZXhwYW5zaW9uIHBhbmVsIGVsZW1lbnQgd2lsbCBoYXZlIGJvcmRlcnMuXG4gICAqIEBncm91cCBQcm9wc1xuICAgKi9cbiAgQElucHV0KCkgYm9yZGVyZWQgPSB0cnVlO1xuXG4gIC8qKlxuICAgKiBUaGUgYm9yZGVyIHJhZGl1cyBvZiB0aGUgY29tcG9uZW50LlxuICAgKiBAZ3JvdXAgUHJvcHNcbiAgICovXG4gIEBJbnB1dCgpIGJvcmRlclJhZGl1czogbnVtYmVyIHwgc3RyaW5nID0gMDtcblxuICAvKipcbiAgICogQm9yZGVyIGNvbG9yIG9mIHRoZSBleHBhbnNpb24gcGFuZWwuXG4gICAqIEBncm91cCBQcm9wc1xuICAgKi9cbiAgQElucHV0KCkgYm9yZGVyQ29sb3IgPSAnbGluZS1saWdodCc7XG5cbiAgLyoqXG4gICAqIFRoZSB3aWR0aCBvZiB0aGUgZXhwYW5zaW9uIHBhbmVsIG9mIHR5cGUgbnVtYmVyIGRlbm90aW5nIHBpeGVscyBvciBzdHJpbmcuXG4gICAqIEBncm91cCBQcm9wc1xuICAgKi9cbiAgQElucHV0KCkgd2lkdGg6IG51bWJlciB8IHN0cmluZyA9ICcxMDAlJztcblxuICAvKipcbiAgICogTmFtZSBvZiB0aGUgaWNvbiBpbiBmcm9udCBvZiB0aGUgdGl0bGUuXG4gICAqIEBncm91cCBQcm9wc1xuICAgKi9cbiAgQElucHV0KCkgcHJlZml4SWNvbjogSWNvblR5cGUgPSAnJztcblxuICAvKipcbiAgICogQ2FsbGJhY2sgdG8gaW52b2tlIGFmdGVyIGEgdGFiIGdldHMgY29sbGFwc2VkLlxuICAgKiBAcGFyYW0ge3ZvaWR9XG4gICAqIEBncm91cCBFbWl0c1xuICAgKi9cbiAgQE91dHB1dCgpIGFmdGVyQ29sbGFwc2U6IEV2ZW50RW1pdHRlcjx2b2lkPiA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcblxuICAvKipcbiAgICogQ2FsbGJhY2sgdG8gaW52b2tlIGFmdGVyIGEgdGFiIGdldHMgZXhwYW5kZWQuXG4gICAqIEBwYXJhbSB7dm9pZH1cbiAgICogQGdyb3VwIEVtaXRzXG4gICAqL1xuICBAT3V0cHV0KCkgYWZ0ZXJFeHBhbmQ6IEV2ZW50RW1pdHRlcjx2b2lkPiA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcblxuICBAVmlld0NoaWxkKCdwYW5lbENvbnRlbnRFbGVtJykgcGFuZWxDb250ZW50RWxlbSE6IEVsZW1lbnRSZWY7XG5cbiAgcHJpdmF0ZSBfY29udGVudEV4cGFuZEFuaW1hdGlvbjogQW5pbWF0aW9uRmFjdG9yeTtcbiAgcHJpdmF0ZSBfY29udGVudENvbGxhcHNlQW5pbWF0aW9uOiBBbmltYXRpb25GYWN0b3J5O1xuICBwcml2YXRlIF9jb250ZW50QW5pbWF0aW9uUGxheWVyOiBBbmltYXRpb25QbGF5ZXIgfCB1bmRlZmluZWQ7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBfYW5pbWF0aW9uQnVpbGRlcjogQW5pbWF0aW9uQnVpbGRlcixcbiAgICBASW5qZWN0KERPQ1VNRU5UKSBwcml2YXRlIGRvY3VtZW50OiBEb2N1bWVudCxcbiAgICBwcml2YXRlIF9yZW5kZXJlcjogUmVuZGVyZXIyXG4gICkge1xuICAgIHRoaXMuX2NvbnRlbnRDb2xsYXBzZUFuaW1hdGlvbiA9IHRoaXMuX2FuaW1hdGlvbkJ1aWxkZXIuYnVpbGQoW1xuICAgICAgc3R5bGUoe1xuICAgICAgICBoZWlnaHQ6ICcqJ1xuICAgICAgfSksXG4gICAgICBhbmltYXRlKFxuICAgICAgICB0cmFuc2l0aW9uVHlwZSxcbiAgICAgICAgc3R5bGUoe1xuICAgICAgICAgIGhlaWdodDogMFxuICAgICAgICB9KVxuICAgICAgKVxuICAgIF0pO1xuXG4gICAgdGhpcy5fY29udGVudEV4cGFuZEFuaW1hdGlvbiA9IHRoaXMuX2FuaW1hdGlvbkJ1aWxkZXIuYnVpbGQoW1xuICAgICAgc3R5bGUoe1xuICAgICAgICBoZWlnaHQ6IDBcbiAgICAgIH0pLFxuICAgICAgYW5pbWF0ZShcbiAgICAgICAgdHJhbnNpdGlvblR5cGUsXG4gICAgICAgIHN0eWxlKHtcbiAgICAgICAgICBoZWlnaHQ6ICcqJ1xuICAgICAgICB9KVxuICAgICAgKVxuICAgIF0pO1xuICB9XG5cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgdGhpcy5ib3JkZXJDb2xvciA9IGdldENTU0NvbG9yKHRoaXMuYm9yZGVyQ29sb3IsIHRoaXMuZG9jdW1lbnQpO1xuICAgIHRoaXMuYmFja2dyb3VuZENvbG9yID0gZ2V0Q1NTQ29sb3IodGhpcy5iYWNrZ3JvdW5kQ29sb3IsIHRoaXMuZG9jdW1lbnQpO1xuICAgIHRoaXMuYm9yZGVyUmFkaXVzID0gY29udmVydFNpemUodGhpcy5ib3JkZXJSYWRpdXMpO1xuICAgIHRoaXMud2lkdGggPSBjb252ZXJ0U2l6ZSh0aGlzLndpZHRoKTtcbiAgfVxuXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuaXNFeHBhbmRlZCkge1xuICAgICAgdGhpcy5fdXBkYXRlQ29udGVudFZpc2liaWxpdHlTdHlsZXMoZmFsc2UpO1xuICAgIH1cbiAgfVxuXG4gIHRvZ2dsZUV4cGFuc2lvbigpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5kaXNhYmxlZCB8fCB0aGlzLl9jb250ZW50QW5pbWF0aW9uUGxheWVyKSByZXR1cm47XG5cbiAgICBjb25zdCBlbCA9IHRoaXMucGFuZWxDb250ZW50RWxlbT8ubmF0aXZlRWxlbWVudDtcbiAgICBpZiAodGhpcy5pc0V4cGFuZGVkKSB7XG4gICAgICB0aGlzLl9jb250ZW50QW5pbWF0aW9uUGxheWVyID0gdGhpcy5fY29udGVudENvbGxhcHNlQW5pbWF0aW9uLmNyZWF0ZShlbCk7XG4gICAgICB0aGlzLl9jb250ZW50QW5pbWF0aW9uUGxheWVyLm9uRG9uZSgoKSA9PiB7XG4gICAgICAgIHRoaXMuX3VwZGF0ZUNvbnRlbnRWaXNpYmlsaXR5U3R5bGVzKGZhbHNlLCBlbCk7XG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5fdXBkYXRlQ29udGVudFZpc2liaWxpdHlTdHlsZXModHJ1ZSwgZWwpO1xuICAgICAgdGhpcy5fY29udGVudEFuaW1hdGlvblBsYXllciA9IHRoaXMuX2NvbnRlbnRFeHBhbmRBbmltYXRpb24uY3JlYXRlKGVsKTtcbiAgICB9XG5cbiAgICB0aGlzLl9jb250ZW50QW5pbWF0aW9uUGxheWVyLm9uU3RhcnQoKCkgPT4ge1xuICAgICAgdGhpcy5fcmVuZGVyZXIuc2V0U3R5bGUoZWwsICdvdmVyZmxvdycsICdoaWRkZW4nKTtcbiAgICB9KTtcblxuICAgIHRoaXMuX2NvbnRlbnRBbmltYXRpb25QbGF5ZXIub25Eb25lKCgpID0+IHtcbiAgICAgIHRoaXMuX3JlbmRlcmVyLnJlbW92ZVN0eWxlKGVsLCAnb3ZlcmZsb3cnKTtcbiAgICAgIHRoaXMuX2NvbnRlbnRBbmltYXRpb25QbGF5ZXI/LmRlc3Ryb3koKTtcbiAgICAgIHRoaXMuX2NvbnRlbnRBbmltYXRpb25QbGF5ZXIgPSB1bmRlZmluZWQ7XG4gICAgfSk7XG5cbiAgICB0aGlzLl9jb250ZW50QW5pbWF0aW9uUGxheWVyLnBsYXkoKTtcblxuICAgIHRoaXMuaXNFeHBhbmRlZCA9ICF0aGlzLmlzRXhwYW5kZWQ7XG5cbiAgICBpZiAodGhpcy5pc0V4cGFuZGVkKSB7XG4gICAgICB0aGlzLmFmdGVyRXhwYW5kLmVtaXQoKTtcbiAgICB9XG4gICAgaWYgKCF0aGlzLmlzRXhwYW5kZWQpIHtcbiAgICAgIHRoaXMuYWZ0ZXJDb2xsYXBzZS5lbWl0KCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBfdXBkYXRlQ29udGVudFZpc2liaWxpdHlTdHlsZXMoaXNWaXNpYmxlOiBib29sZWFuLCBlbD86IGFueSkge1xuICAgIGVsID0gZWwgfHwgdGhpcy5wYW5lbENvbnRlbnRFbGVtPy5uYXRpdmVFbGVtZW50O1xuICAgIGlmICghZWwpIHJldHVybjtcblxuICAgIGlmIChpc1Zpc2libGUpIHtcbiAgICAgIHRoaXMuX3JlbmRlcmVyLnJlbW92ZVN0eWxlKGVsLCAnaGVpZ2h0Jyk7XG4gICAgICB0aGlzLl9yZW5kZXJlci5yZW1vdmVTdHlsZShlbCwgJ3Zpc2liaWxpdHknKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5fcmVuZGVyZXIuc2V0U3R5bGUoZWwsICdoZWlnaHQnLCAnMCcpO1xuICAgICAgdGhpcy5fcmVuZGVyZXIuc2V0U3R5bGUoZWwsICd2aXNpYmlsaXR5JywgJ2hpZGRlbicpO1xuICAgIH1cbiAgfVxufVxuIiwiPGRpdlxuICBjbGFzcz1cImNwcy1leHBhbnNpb24tcGFuZWxcIlxuICBbY2xhc3MuZXhwYW5kZWRdPVwiaXNFeHBhbmRlZFwiXG4gIFtuZ1N0eWxlXT1cIntcbiAgICAnYmFja2dyb3VuZC1jb2xvcic6IGJhY2tncm91bmRDb2xvcixcbiAgICAnYm9yZGVyLXJhZGl1cyc6IGJvcmRlclJhZGl1cyxcbiAgICB3aWR0aDogd2lkdGgsXG4gICAgYm9yZGVyOiBib3JkZXJlZCA/ICcxcHggc29saWQgJyArIGJvcmRlckNvbG9yIDogJydcbiAgfVwiPlxuICA8ZGl2XG4gICAgY2xhc3M9XCJjcHMtZXhwYW5zaW9uLXBhbmVsLWhlYWRlclwiXG4gICAgW0BwYW5lbEhlYWRlcl09XCJcbiAgICAgIGlzRXhwYW5kZWRcbiAgICAgICAgPyB7XG4gICAgICAgICAgICB2YWx1ZTogJ3Zpc2libGUnLFxuICAgICAgICAgICAgcGFyYW1zOiB7XG4gICAgICAgICAgICAgIGJvcmRlclN0eWxlOiBib3JkZXJlZCA/ICcxcHggc29saWQgJyArIGJvcmRlckNvbG9yIDogJydcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIDogJ2hpZGRlbidcbiAgICBcIlxuICAgIFtuZ0NsYXNzXT1cInsgZGlzYWJsZWQ6IGRpc2FibGVkIH1cIlxuICAgIFtzdHlsZS5jdXJzb3JdPVwiZGlzYWJsZWQgPyAnZGVmYXVsdCcgOiAncG9pbnRlcidcIlxuICAgIChjbGljayk9XCJ0b2dnbGVFeHBhbnNpb24oKVwiPlxuICAgIDxzcGFuIGNsYXNzPVwiY3BzLWV4cGFuc2lvbi1wYW5lbC1wcmVmaXgtaWNvblwiICpuZ0lmPVwicHJlZml4SWNvblwiPlxuICAgICAgPGNwcy1pY29uXG4gICAgICAgIFtpY29uXT1cInByZWZpeEljb25cIlxuICAgICAgICBzaXplPVwic21hbGxcIlxuICAgICAgICBbY29sb3JdPVwiZGlzYWJsZWQgPyAndGV4dC1taWxkJyA6ICd0ZXh0LWRhcmsnXCI+XG4gICAgICA8L2Nwcy1pY29uPlxuICAgIDwvc3Bhbj5cbiAgICA8ZGl2IGNsYXNzPVwiY3BzLWV4cGFuc2lvbi1wYW5lbC10aXRsZVwiPnt7IGhlYWRlclRpdGxlIH19PC9kaXY+XG4gICAgPHNwYW4gY2xhc3M9XCJjcHMtZXhwYW5zaW9uLXBhbmVsLWNoZXZyb25cIiAqbmdJZj1cInNob3dDaGV2cm9uICYmICFkaXNhYmxlZFwiPlxuICAgICAgPGNwcy1pY29uIGljb249XCJjaGV2cm9uLWRvd25cIiBzaXplPVwic21hbGxcIiBjb2xvcj1cInRleHQtZGFya1wiPiA8L2Nwcy1pY29uPlxuICAgIDwvc3Bhbj5cbiAgPC9kaXY+XG4gIDxkaXYgY2xhc3M9XCJjcHMtZXhwYW5zaW9uLXBhbmVsLWNvbnRlbnRcIiAjcGFuZWxDb250ZW50RWxlbT5cbiAgICA8ZGl2IGNsYXNzPVwiY3BzLWV4cGFuc2lvbi1wYW5lbC1jb250ZW50LWlubmVyXCI+XG4gICAgICA8bmctY29udGVudD48L25nLWNvbnRlbnQ+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuPC9kaXY+XG4iXX0=
@@ -1,182 +0,0 @@
1
- import { CommonModule } from '@angular/common';
2
- import { Component, EventEmitter, Input, numberAttribute, Output, ViewChild } from '@angular/core';
3
- import { catchError, of, take } from 'rxjs';
4
- import { convertSize } from '../../utils/internal/size-utils';
5
- import { CpsIconComponent } from '../cps-icon/cps-icon.component';
6
- import { CpsTooltipDirective } from '../../directives/cps-tooltip/cps-tooltip.directive';
7
- import { CpsProgressLinearComponent } from '../cps-progress-linear/cps-progress-linear.component';
8
- import * as i0 from "@angular/core";
9
- import * as i1 from "@angular/common";
10
- /**
11
- * CpsFileUploadComponent is an advanced uploader with dragdrop support.
12
- * @group Components
13
- */
14
- export class CpsFileUploadComponent {
15
- constructor() {
16
- /**
17
- * Expected extensions of a file to be uploaded. E.g. 'doc or .doc'.
18
- * @group Props
19
- */
20
- this.extensions = [];
21
- /**
22
- * Expected file description. E.g. 'Word document'.
23
- * @group Props
24
- */
25
- this.fileDesc = 'Any file';
26
- /**
27
- * Width of the component, a number denoting pixels or a string.
28
- * @group Props
29
- */
30
- this.width = '100%';
31
- /**
32
- * Expected file info block, explaining some extra stuff about file.
33
- * @group Props
34
- */
35
- this.fileInfo = '';
36
- /**
37
- * Callback for uploaded file processing.
38
- * @group Props
39
- */
40
- this.fileProcessingCallback = undefined;
41
- /**
42
- * Position of file name tooltip, it can be 'top', 'bottom', 'left' or 'right'.
43
- * @group Props
44
- */
45
- this.fileNameTooltipPosition = 'top';
46
- /**
47
- * File name tooltip offset for styling.
48
- * @group Props
49
- */
50
- this.fileNameTooltipOffset = 12;
51
- /**
52
- * Callback to invoke when file is uploaded.
53
- * @param {File} File
54
- * @group Emits
55
- */
56
- this.fileUploaded = new EventEmitter();
57
- /**
58
- * Callback to invoke when file upload fails.
59
- * @param {string} - file name
60
- * @group Emits
61
- */
62
- this.fileUploadFailed = new EventEmitter();
63
- /**
64
- * Callback to invoke when uploaded file is removed.
65
- * @param {string} - file name
66
- * @group Emits
67
- */
68
- this.uploadedFileRemoved = new EventEmitter();
69
- this.isDragoverFile = false;
70
- this.extensionsString = '';
71
- this.extensionsStringAsterisks = '';
72
- this.cvtWidth = '';
73
- this.isProcessingFile = false;
74
- }
75
- ngOnInit() {
76
- this.updateExtensionsString();
77
- this.cvtWidth = convertSize(this.width);
78
- }
79
- ngOnChanges(changes) {
80
- if (changes.extensions) {
81
- this.updateExtensionsString();
82
- }
83
- }
84
- updateExtensionsString() {
85
- this.extensions = this.extensions.map((ext) => ext.startsWith('.') ? ext.toLowerCase() : '.' + ext.toLowerCase());
86
- this.extensionsString = this.extensions.join(', ');
87
- this.extensionsStringAsterisks = this.extensions
88
- .map((ext) => '*' + ext)
89
- .join(', ');
90
- }
91
- tryUploadFile(event) {
92
- event.preventDefault();
93
- event.stopPropagation();
94
- this.isDragoverFile = false;
95
- let file;
96
- if (event.type === 'drop') {
97
- file = event.dataTransfer?.files.item(0) ?? undefined;
98
- }
99
- else {
100
- const files = event.target.files;
101
- if (!files || files.length < 1)
102
- return;
103
- file = files.item(0) ?? undefined;
104
- }
105
- if (!this._isFileExtensionValid(file)) {
106
- this.fileUploadFailed.emit(file?.name ?? '');
107
- return;
108
- }
109
- this.uploadedFile = file;
110
- if (this.uploadedFile) {
111
- this.fileUploaded.emit(this.uploadedFile);
112
- if (this.fileProcessingCallback) {
113
- this.isProcessingFile = true;
114
- this.fileProcessingCallback(this.uploadedFile)
115
- .pipe(take(1), catchError(() => {
116
- return of(false);
117
- }))
118
- .subscribe((res) => {
119
- if (!res)
120
- this.removeUploadedFile();
121
- this.isProcessingFile = false;
122
- });
123
- }
124
- }
125
- }
126
- removeUploadedFile() {
127
- const name = this.uploadedFile?.name ?? '';
128
- this.uploadedFile = undefined;
129
- this.uploadedFileRemoved.emit(name);
130
- if (this.fileInput) {
131
- this.fileInput.nativeElement.value = '';
132
- }
133
- }
134
- _isFileExtensionValid(file) {
135
- if (!file)
136
- return false;
137
- if (this.extensions.length < 1)
138
- return true;
139
- const fileNameLowerCase = file.name.toLowerCase();
140
- for (const ext of this.extensions) {
141
- if (fileNameLowerCase.endsWith(ext))
142
- return true;
143
- }
144
- return false;
145
- }
146
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.1.3", ngImport: i0, type: CpsFileUploadComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
147
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.1.3", type: CpsFileUploadComponent, isStandalone: true, selector: "cps-file-upload", inputs: { extensions: "extensions", fileDesc: "fileDesc", width: "width", fileInfo: "fileInfo", fileProcessingCallback: "fileProcessingCallback", fileNameTooltipPosition: "fileNameTooltipPosition", fileNameTooltipOffset: ["fileNameTooltipOffset", "fileNameTooltipOffset", numberAttribute] }, outputs: { fileUploaded: "fileUploaded", fileUploadFailed: "fileUploadFailed", uploadedFileRemoved: "uploadedFileRemoved" }, viewQueries: [{ propertyName: "fileInput", first: true, predicate: ["fileInput"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<div class=\"cps-file-upload\" [ngStyle]=\"{ width: cvtWidth }\">\n <div\n class=\"cps-file-upload-dropzone\"\n [ngClass]=\"{\n 'dragged-over': isDragoverFile,\n 'with-uploads': uploadedFile?.name\n }\"\n (dragend)=\"isDragoverFile = false\"\n (dragenter)=\"isDragoverFile = true\"\n (dragleave)=\"isDragoverFile = false\"\n (dragover)=\"isDragoverFile = true\"\n (mouseleave)=\"isDragoverFile = false\"\n (drop)=\"tryUploadFile($event)\">\n <input\n #fileInput\n (change)=\"tryUploadFile($event)\"\n type=\"file\"\n [accept]=\"extensionsString\"\n title=\"\" />\n <cps-icon icon=\"export\" size=\"large\" color=\"text-darkest\"></cps-icon>\n <div class=\"cps-file-upload-dropzone-title\">\n Drag&Drop or choose a file to upload\n </div>\n <span\n class=\"cps-file-upload-dropzone-file-desc\"\n *ngIf=\"fileDesc || extensionsStringAsterisks\"\n >{{ fileDesc }}\n {{\n extensionsStringAsterisks ? '(' + extensionsStringAsterisks + ')' : ''\n }}</span\n >\n @if(fileInfo) {\n <div class=\"cps-file-upload-dropzone-content\">\n <cps-icon color=\"calm\" icon=\"info-circle\" size=\"xsmall\"></cps-icon>\n {{fileInfo}}\n </div>\n }\n <cps-progress-linear\n *ngIf=\"isProcessingFile && uploadedFile\"\n height=\"3\"\n radius=\"4\"\n opacity=\"0.3\"\n class=\"cps-file-upload-progress-bar\"\n bgColor=\"transparent\">\n </cps-progress-linear>\n </div>\n <div *ngIf=\"uploadedFile\" class=\"cps-file-upload-uploaded-files\">\n <div class=\"cps-file-upload-uploaded-file\">\n <div class=\"cps-file-upload-uploaded-file-title\">\n <cps-icon\n class=\"cps-file-upload-uploaded-file-status-icon\"\n [icon]=\"isProcessingFile ? 'pending' : 'toast-success'\"\n [color]=\"isProcessingFile ? 'warn' : 'success'\">\n </cps-icon>\n <div class=\"cps-file-upload-uploaded-file-name\"\n cpsTooltip=\"{{ uploadedFile.name }}\"\n [tooltipPosition]=\"fileNameTooltipPosition\"\n [tooltipOffset]=\"fileNameTooltipOffset\"\n tooltipOpenOn=\"hover\">\n {{ uploadedFile.name }}\n </div>\n </div>\n <cps-icon\n *ngIf=\"!isProcessingFile\"\n class=\"cps-file-upload-uploaded-file-remove-icon\"\n icon=\"remove\"\n color=\"error\"\n (click)=\"removeUploadedFile()\">\n </cps-icon>\n </div>\n </div>\n</div>\n", styles: [":host{display:flex}:host .cps-file-upload .cps-file-upload-dropzone{font-family:Source Sans Pro,sans-serif;min-height:20px;padding:2rem;text-align:center;border:2px dashed var(--cps-color-calm);position:relative;border-radius:1rem}:host .cps-file-upload .cps-file-upload-dropzone:hover{background-color:var(--cps-color-highlight-hover)}:host .cps-file-upload .cps-file-upload-dropzone:active{background-color:var(--cps-color-highlight-selected)}:host .cps-file-upload .cps-file-upload-dropzone.dragged-over{background-color:var(--cps-color-highlight-selected)}:host .cps-file-upload .cps-file-upload-dropzone.with-uploads{border-bottom-right-radius:0;border-bottom-left-radius:0;border-bottom:1px dashed var(--cps-color-calm)}:host .cps-file-upload .cps-file-upload-dropzone input{cursor:pointer;opacity:0;position:absolute;width:100%;height:100%;top:0;left:0}:host .cps-file-upload .cps-file-upload-dropzone .cps-file-upload-dropzone-title{font-size:16px;margin:8px 0;color:var(--cps-color-calm);font-weight:600}:host .cps-file-upload .cps-file-upload-dropzone .cps-file-upload-dropzone-file-desc{font-size:18px;color:var(--cps-color-text-dark)}:host .cps-file-upload .cps-file-upload-dropzone .cps-file-upload-dropzone-content{margin-top:16px;font-size:1rem}:host .cps-file-upload .cps-file-upload-dropzone .cps-file-upload-progress-bar{position:absolute;bottom:-2px;left:0}:host .cps-file-upload .cps-file-upload-uploaded-files{border-bottom:2px dashed var(--cps-color-calm);border-left:2px dashed var(--cps-color-calm);border-right:2px dashed var(--cps-color-calm);border-bottom-right-radius:16px;border-bottom-left-radius:16px;background-color:var(--cps-color-highlight-hover)}:host .cps-file-upload .cps-file-upload-uploaded-files .cps-file-upload-uploaded-file{cursor:default;display:flex;align-items:center;justify-content:space-between;padding:8px 12px}:host .cps-file-upload .cps-file-upload-uploaded-files .cps-file-upload-uploaded-file .cps-file-upload-uploaded-file-title{display:flex;align-items:center;flex:1;min-width:0}:host .cps-file-upload .cps-file-upload-uploaded-files .cps-file-upload-uploaded-file .cps-file-upload-uploaded-file-title .cps-file-upload-uploaded-file-name{color:var(--cps-color-text-darkest);font-size:20px;margin:0 8px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;max-width:calc(100% - 60px)}:host .cps-file-upload .cps-file-upload-uploaded-files .cps-file-upload-uploaded-file .cps-file-upload-uploaded-file-remove-icon{cursor:pointer;flex-shrink:0;margin-left:8px}:host .cps-file-upload .cps-file-upload-uploaded-files .cps-file-upload-uploaded-file .cps-file-upload-uploaded-file-remove-icon:hover ::ng-deep .cps-icon{color:var(--cps-color-error-darken1)!important}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "component", type: CpsIconComponent, selector: "cps-icon", inputs: ["icon", "size", "color"] }, { kind: "component", type: CpsProgressLinearComponent, selector: "cps-progress-linear", inputs: ["width", "height", "color", "bgColor", "opacity", "radius"] }, { kind: "directive", type: CpsTooltipDirective, selector: "[cpsTooltip]", inputs: ["cpsTooltip", "tooltipOpenDelay", "tooltipCloseDelay", "tooltipOpenOn", "tooltipPosition", "tooltipPersistent", "tooltipDisabled", "tooltipMaxWidth", "tooltipContentClass", "tooltipOffset"] }] }); }
148
- }
149
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.3", ngImport: i0, type: CpsFileUploadComponent, decorators: [{
150
- type: Component,
151
- args: [{ selector: 'cps-file-upload', standalone: true, imports: [
152
- CommonModule,
153
- CpsIconComponent,
154
- CpsProgressLinearComponent,
155
- CpsTooltipDirective
156
- ], template: "<div class=\"cps-file-upload\" [ngStyle]=\"{ width: cvtWidth }\">\n <div\n class=\"cps-file-upload-dropzone\"\n [ngClass]=\"{\n 'dragged-over': isDragoverFile,\n 'with-uploads': uploadedFile?.name\n }\"\n (dragend)=\"isDragoverFile = false\"\n (dragenter)=\"isDragoverFile = true\"\n (dragleave)=\"isDragoverFile = false\"\n (dragover)=\"isDragoverFile = true\"\n (mouseleave)=\"isDragoverFile = false\"\n (drop)=\"tryUploadFile($event)\">\n <input\n #fileInput\n (change)=\"tryUploadFile($event)\"\n type=\"file\"\n [accept]=\"extensionsString\"\n title=\"\" />\n <cps-icon icon=\"export\" size=\"large\" color=\"text-darkest\"></cps-icon>\n <div class=\"cps-file-upload-dropzone-title\">\n Drag&Drop or choose a file to upload\n </div>\n <span\n class=\"cps-file-upload-dropzone-file-desc\"\n *ngIf=\"fileDesc || extensionsStringAsterisks\"\n >{{ fileDesc }}\n {{\n extensionsStringAsterisks ? '(' + extensionsStringAsterisks + ')' : ''\n }}</span\n >\n @if(fileInfo) {\n <div class=\"cps-file-upload-dropzone-content\">\n <cps-icon color=\"calm\" icon=\"info-circle\" size=\"xsmall\"></cps-icon>\n {{fileInfo}}\n </div>\n }\n <cps-progress-linear\n *ngIf=\"isProcessingFile && uploadedFile\"\n height=\"3\"\n radius=\"4\"\n opacity=\"0.3\"\n class=\"cps-file-upload-progress-bar\"\n bgColor=\"transparent\">\n </cps-progress-linear>\n </div>\n <div *ngIf=\"uploadedFile\" class=\"cps-file-upload-uploaded-files\">\n <div class=\"cps-file-upload-uploaded-file\">\n <div class=\"cps-file-upload-uploaded-file-title\">\n <cps-icon\n class=\"cps-file-upload-uploaded-file-status-icon\"\n [icon]=\"isProcessingFile ? 'pending' : 'toast-success'\"\n [color]=\"isProcessingFile ? 'warn' : 'success'\">\n </cps-icon>\n <div class=\"cps-file-upload-uploaded-file-name\"\n cpsTooltip=\"{{ uploadedFile.name }}\"\n [tooltipPosition]=\"fileNameTooltipPosition\"\n [tooltipOffset]=\"fileNameTooltipOffset\"\n tooltipOpenOn=\"hover\">\n {{ uploadedFile.name }}\n </div>\n </div>\n <cps-icon\n *ngIf=\"!isProcessingFile\"\n class=\"cps-file-upload-uploaded-file-remove-icon\"\n icon=\"remove\"\n color=\"error\"\n (click)=\"removeUploadedFile()\">\n </cps-icon>\n </div>\n </div>\n</div>\n", styles: [":host{display:flex}:host .cps-file-upload .cps-file-upload-dropzone{font-family:Source Sans Pro,sans-serif;min-height:20px;padding:2rem;text-align:center;border:2px dashed var(--cps-color-calm);position:relative;border-radius:1rem}:host .cps-file-upload .cps-file-upload-dropzone:hover{background-color:var(--cps-color-highlight-hover)}:host .cps-file-upload .cps-file-upload-dropzone:active{background-color:var(--cps-color-highlight-selected)}:host .cps-file-upload .cps-file-upload-dropzone.dragged-over{background-color:var(--cps-color-highlight-selected)}:host .cps-file-upload .cps-file-upload-dropzone.with-uploads{border-bottom-right-radius:0;border-bottom-left-radius:0;border-bottom:1px dashed var(--cps-color-calm)}:host .cps-file-upload .cps-file-upload-dropzone input{cursor:pointer;opacity:0;position:absolute;width:100%;height:100%;top:0;left:0}:host .cps-file-upload .cps-file-upload-dropzone .cps-file-upload-dropzone-title{font-size:16px;margin:8px 0;color:var(--cps-color-calm);font-weight:600}:host .cps-file-upload .cps-file-upload-dropzone .cps-file-upload-dropzone-file-desc{font-size:18px;color:var(--cps-color-text-dark)}:host .cps-file-upload .cps-file-upload-dropzone .cps-file-upload-dropzone-content{margin-top:16px;font-size:1rem}:host .cps-file-upload .cps-file-upload-dropzone .cps-file-upload-progress-bar{position:absolute;bottom:-2px;left:0}:host .cps-file-upload .cps-file-upload-uploaded-files{border-bottom:2px dashed var(--cps-color-calm);border-left:2px dashed var(--cps-color-calm);border-right:2px dashed var(--cps-color-calm);border-bottom-right-radius:16px;border-bottom-left-radius:16px;background-color:var(--cps-color-highlight-hover)}:host .cps-file-upload .cps-file-upload-uploaded-files .cps-file-upload-uploaded-file{cursor:default;display:flex;align-items:center;justify-content:space-between;padding:8px 12px}:host .cps-file-upload .cps-file-upload-uploaded-files .cps-file-upload-uploaded-file .cps-file-upload-uploaded-file-title{display:flex;align-items:center;flex:1;min-width:0}:host .cps-file-upload .cps-file-upload-uploaded-files .cps-file-upload-uploaded-file .cps-file-upload-uploaded-file-title .cps-file-upload-uploaded-file-name{color:var(--cps-color-text-darkest);font-size:20px;margin:0 8px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;max-width:calc(100% - 60px)}:host .cps-file-upload .cps-file-upload-uploaded-files .cps-file-upload-uploaded-file .cps-file-upload-uploaded-file-remove-icon{cursor:pointer;flex-shrink:0;margin-left:8px}:host .cps-file-upload .cps-file-upload-uploaded-files .cps-file-upload-uploaded-file .cps-file-upload-uploaded-file-remove-icon:hover ::ng-deep .cps-icon{color:var(--cps-color-error-darken1)!important}\n"] }]
157
- }], propDecorators: { extensions: [{
158
- type: Input
159
- }], fileDesc: [{
160
- type: Input
161
- }], width: [{
162
- type: Input
163
- }], fileInfo: [{
164
- type: Input
165
- }], fileProcessingCallback: [{
166
- type: Input
167
- }], fileNameTooltipPosition: [{
168
- type: Input
169
- }], fileNameTooltipOffset: [{
170
- type: Input,
171
- args: [{ transform: numberAttribute }]
172
- }], fileUploaded: [{
173
- type: Output
174
- }], fileUploadFailed: [{
175
- type: Output
176
- }], uploadedFileRemoved: [{
177
- type: Output
178
- }], fileInput: [{
179
- type: ViewChild,
180
- args: ['fileInput']
181
- }] } });
182
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3BzLWZpbGUtdXBsb2FkLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2Nwcy11aS1raXQvc3JjL2xpYi9jb21wb25lbnRzL2Nwcy1maWxlLXVwbG9hZC9jcHMtZmlsZS11cGxvYWQuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY3BzLXVpLWtpdC9zcmMvbGliL2NvbXBvbmVudHMvY3BzLWZpbGUtdXBsb2FkL2Nwcy1maWxlLXVwbG9hZC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUNMLFNBQVMsRUFFVCxZQUFZLEVBQ1osS0FBSyxFQUNMLGVBQWUsRUFHZixNQUFNLEVBRU4sU0FBUyxFQUNWLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxVQUFVLEVBQWMsRUFBRSxFQUFFLElBQUksRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUN4RCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFDOUQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDbEUsT0FBTyxFQUNMLG1CQUFtQixFQUVwQixNQUFNLG9EQUFvRCxDQUFDO0FBQzVELE9BQU8sRUFBRSwwQkFBMEIsRUFBRSxNQUFNLHNEQUFzRCxDQUFDOzs7QUFFbEc7OztHQUdHO0FBYUgsTUFBTSxPQUFPLHNCQUFzQjtJQVpuQztRQWFFOzs7V0FHRztRQUNNLGVBQVUsR0FBYSxFQUFFLENBQUM7UUFFbkM7OztXQUdHO1FBQ00sYUFBUSxHQUFHLFVBQVUsQ0FBQztRQUUvQjs7O1dBR0c7UUFDTSxVQUFLLEdBQW9CLE1BQU0sQ0FBQztRQUV6Qzs7O1dBR0c7UUFDTSxhQUFRLEdBQVcsRUFBRSxDQUFDO1FBRS9COzs7V0FHRztRQUNNLDJCQUFzQixHQUM3QixTQUFTLENBQUM7UUFFWjs7O1dBR0c7UUFDTSw0QkFBdUIsR0FBdUIsS0FBSyxDQUFDO1FBRTdEOzs7V0FHRztRQUNvQywwQkFBcUIsR0FBVyxFQUFFLENBQUM7UUFFMUU7Ozs7V0FJRztRQUNPLGlCQUFZLEdBQUcsSUFBSSxZQUFZLEVBQVEsQ0FBQztRQUVsRDs7OztXQUlHO1FBQ08scUJBQWdCLEdBQUcsSUFBSSxZQUFZLEVBQVUsQ0FBQztRQUV4RDs7OztXQUlHO1FBQ08sd0JBQW1CLEdBQUcsSUFBSSxZQUFZLEVBQVUsQ0FBQztRQUkzRCxtQkFBYyxHQUFHLEtBQUssQ0FBQztRQUV2QixxQkFBZ0IsR0FBRyxFQUFFLENBQUM7UUFDdEIsOEJBQXlCLEdBQUcsRUFBRSxDQUFDO1FBQy9CLGFBQVEsR0FBRyxFQUFFLENBQUM7UUFFZCxxQkFBZ0IsR0FBRyxLQUFLLENBQUM7S0FvRjFCO0lBbEZDLFFBQVE7UUFDTixJQUFJLENBQUMsc0JBQXNCLEVBQUUsQ0FBQztRQUM5QixJQUFJLENBQUMsUUFBUSxHQUFHLFdBQVcsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDMUMsQ0FBQztJQUVELFdBQVcsQ0FBQyxPQUFzQjtRQUNoQyxJQUFJLE9BQU8sQ0FBQyxVQUFVLEVBQUUsQ0FBQztZQUN2QixJQUFJLENBQUMsc0JBQXNCLEVBQUUsQ0FBQztRQUNoQyxDQUFDO0lBQ0gsQ0FBQztJQUVELHNCQUFzQjtRQUNwQixJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FDNUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLFdBQVcsRUFBRSxDQUNsRSxDQUFDO1FBQ0YsSUFBSSxDQUFDLGdCQUFnQixHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ25ELElBQUksQ0FBQyx5QkFBeUIsR0FBRyxJQUFJLENBQUMsVUFBVTthQUM3QyxHQUFHLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUM7YUFDdkIsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ2hCLENBQUM7SUFFRCxhQUFhLENBQUMsS0FBWTtRQUN4QixLQUFLLENBQUMsY0FBYyxFQUFFLENBQUM7UUFDdkIsS0FBSyxDQUFDLGVBQWUsRUFBRSxDQUFDO1FBRXhCLElBQUksQ0FBQyxjQUFjLEdBQUcsS0FBSyxDQUFDO1FBQzVCLElBQUksSUFBc0IsQ0FBQztRQUUzQixJQUFJLEtBQUssQ0FBQyxJQUFJLEtBQUssTUFBTSxFQUFFLENBQUM7WUFDMUIsSUFBSSxHQUFJLEtBQW1CLENBQUMsWUFBWSxFQUFFLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksU0FBUyxDQUFDO1FBQ3ZFLENBQUM7YUFBTSxDQUFDO1lBQ04sTUFBTSxLQUFLLEdBQUksS0FBSyxDQUFDLE1BQTJCLENBQUMsS0FBSyxDQUFDO1lBQ3ZELElBQUksQ0FBQyxLQUFLLElBQUksS0FBSyxDQUFDLE1BQU0sR0FBRyxDQUFDO2dCQUFFLE9BQU87WUFDdkMsSUFBSSxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksU0FBUyxDQUFDO1FBQ3BDLENBQUM7UUFFRCxJQUFJLENBQUMsSUFBSSxDQUFDLHFCQUFxQixDQUFDLElBQUksQ0FBQyxFQUFFLENBQUM7WUFDdEMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsSUFBSSxJQUFJLEVBQUUsQ0FBQyxDQUFDO1lBQzdDLE9BQU87UUFDVCxDQUFDO1FBRUQsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUM7UUFDekIsSUFBSSxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7WUFDdEIsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDO1lBQzFDLElBQUksSUFBSSxDQUFDLHNCQUFzQixFQUFFLENBQUM7Z0JBQ2hDLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxJQUFJLENBQUM7Z0JBQzdCLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDO3FCQUMzQyxJQUFJLENBQ0gsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUNQLFVBQVUsQ0FBQyxHQUFHLEVBQUU7b0JBQ2QsT0FBTyxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUM7Z0JBQ25CLENBQUMsQ0FBQyxDQUNIO3FCQUNBLFNBQVMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFO29CQUNqQixJQUFJLENBQUMsR0FBRzt3QkFBRSxJQUFJLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztvQkFDcEMsSUFBSSxDQUFDLGdCQUFnQixHQUFHLEtBQUssQ0FBQztnQkFDaEMsQ0FBQyxDQUFDLENBQUM7WUFDUCxDQUFDO1FBQ0gsQ0FBQztJQUNILENBQUM7SUFFRCxrQkFBa0I7UUFDaEIsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLFlBQVksRUFBRSxJQUFJLElBQUksRUFBRSxDQUFDO1FBQzNDLElBQUksQ0FBQyxZQUFZLEdBQUcsU0FBUyxDQUFDO1FBQzlCLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7UUFFcEMsSUFBSSxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7WUFDbkIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxhQUFhLENBQUMsS0FBSyxHQUFHLEVBQUUsQ0FBQztRQUMxQyxDQUFDO0lBQ0gsQ0FBQztJQUVPLHFCQUFxQixDQUFDLElBQVc7UUFDdkMsSUFBSSxDQUFDLElBQUk7WUFBRSxPQUFPLEtBQUssQ0FBQztRQUV4QixJQUFJLElBQUksQ0FBQyxVQUFVLENBQUMsTUFBTSxHQUFHLENBQUM7WUFBRSxPQUFPLElBQUksQ0FBQztRQUM1QyxNQUFNLGlCQUFpQixHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7UUFDbEQsS0FBSyxNQUFNLEdBQUcsSUFBSSxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7WUFDbEMsSUFBSSxpQkFBaUIsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDO2dCQUFFLE9BQU8sSUFBSSxDQUFDO1FBQ25ELENBQUM7UUFFRCxPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7OEdBNUpVLHNCQUFzQjtrR0FBdEIsc0JBQXNCLG1VQTBDYixlQUFlLHVSQ2hGckMsMitFQXdFQSw0dEZEMUNJLFlBQVksc1RBQ1osZ0JBQWdCLHdGQUNoQiwwQkFBMEIsc0lBQzFCLG1CQUFtQjs7MkZBS1Ysc0JBQXNCO2tCQVpsQyxTQUFTOytCQUNFLGlCQUFpQixjQUNmLElBQUksV0FDUDt3QkFDUCxZQUFZO3dCQUNaLGdCQUFnQjt3QkFDaEIsMEJBQTBCO3dCQUMxQixtQkFBbUI7cUJBQ3BCOzhCQVNRLFVBQVU7c0JBQWxCLEtBQUs7Z0JBTUcsUUFBUTtzQkFBaEIsS0FBSztnQkFNRyxLQUFLO3NCQUFiLEtBQUs7Z0JBTUcsUUFBUTtzQkFBaEIsS0FBSztnQkFNRyxzQkFBc0I7c0JBQTlCLEtBQUs7Z0JBT0csdUJBQXVCO3NCQUEvQixLQUFLO2dCQU1pQyxxQkFBcUI7c0JBQTNELEtBQUs7dUJBQUMsRUFBRSxTQUFTLEVBQUUsZUFBZSxFQUFFO2dCQU8zQixZQUFZO3NCQUFyQixNQUFNO2dCQU9HLGdCQUFnQjtzQkFBekIsTUFBTTtnQkFPRyxtQkFBbUI7c0JBQTVCLE1BQU07Z0JBRWlCLFNBQVM7c0JBQWhDLFNBQVM7dUJBQUMsV0FBVyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQge1xuICBDb21wb25lbnQsXG4gIEVsZW1lbnRSZWYsXG4gIEV2ZW50RW1pdHRlcixcbiAgSW5wdXQsXG4gIG51bWJlckF0dHJpYnV0ZSxcbiAgT25DaGFuZ2VzLFxuICBPbkluaXQsXG4gIE91dHB1dCxcbiAgU2ltcGxlQ2hhbmdlcyxcbiAgVmlld0NoaWxkXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgY2F0Y2hFcnJvciwgT2JzZXJ2YWJsZSwgb2YsIHRha2UgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGNvbnZlcnRTaXplIH0gZnJvbSAnLi4vLi4vdXRpbHMvaW50ZXJuYWwvc2l6ZS11dGlscyc7XG5pbXBvcnQgeyBDcHNJY29uQ29tcG9uZW50IH0gZnJvbSAnLi4vY3BzLWljb24vY3BzLWljb24uY29tcG9uZW50JztcbmltcG9ydCB7XG4gIENwc1Rvb2x0aXBEaXJlY3RpdmUsXG4gIENwc1Rvb2x0aXBQb3NpdGlvblxufSBmcm9tICcuLi8uLi9kaXJlY3RpdmVzL2Nwcy10b29sdGlwL2Nwcy10b29sdGlwLmRpcmVjdGl2ZSc7XG5pbXBvcnQgeyBDcHNQcm9ncmVzc0xpbmVhckNvbXBvbmVudCB9IGZyb20gJy4uL2Nwcy1wcm9ncmVzcy1saW5lYXIvY3BzLXByb2dyZXNzLWxpbmVhci5jb21wb25lbnQnO1xuXG4vKipcbiAqIENwc0ZpbGVVcGxvYWRDb21wb25lbnQgaXMgYW4gYWR2YW5jZWQgdXBsb2FkZXIgd2l0aCBkcmFnZHJvcCBzdXBwb3J0LlxuICogQGdyb3VwIENvbXBvbmVudHNcbiAqL1xuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnY3BzLWZpbGUtdXBsb2FkJyxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW1xuICAgIENvbW1vbk1vZHVsZSxcbiAgICBDcHNJY29uQ29tcG9uZW50LFxuICAgIENwc1Byb2dyZXNzTGluZWFyQ29tcG9uZW50LFxuICAgIENwc1Rvb2x0aXBEaXJlY3RpdmVcbiAgXSxcbiAgdGVtcGxhdGVVcmw6ICcuL2Nwcy1maWxlLXVwbG9hZC5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2Nwcy1maWxlLXVwbG9hZC5jb21wb25lbnQuc2NzcyddXG59KVxuZXhwb3J0IGNsYXNzIENwc0ZpbGVVcGxvYWRDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uQ2hhbmdlcyB7XG4gIC8qKlxuICAgKiBFeHBlY3RlZCBleHRlbnNpb25zIG9mIGEgZmlsZSB0byBiZSB1cGxvYWRlZC4gRS5nLiAnZG9jIG9yIC5kb2MnLlxuICAgKiBAZ3JvdXAgUHJvcHNcbiAgICovXG4gIEBJbnB1dCgpIGV4dGVuc2lvbnM6IHN0cmluZ1tdID0gW107XG5cbiAgLyoqXG4gICAqIEV4cGVjdGVkIGZpbGUgZGVzY3JpcHRpb24uIEUuZy4gJ1dvcmQgZG9jdW1lbnQnLlxuICAgKiBAZ3JvdXAgUHJvcHNcbiAgICovXG4gIEBJbnB1dCgpIGZpbGVEZXNjID0gJ0FueSBmaWxlJztcblxuICAvKipcbiAgICogV2lkdGggb2YgdGhlIGNvbXBvbmVudCwgYSBudW1iZXIgZGVub3RpbmcgcGl4ZWxzIG9yIGEgc3RyaW5nLlxuICAgKiBAZ3JvdXAgUHJvcHNcbiAgICovXG4gIEBJbnB1dCgpIHdpZHRoOiBudW1iZXIgfCBzdHJpbmcgPSAnMTAwJSc7XG5cbiAgLyoqXG4gICAqIEV4cGVjdGVkIGZpbGUgaW5mbyBibG9jaywgZXhwbGFpbmluZyBzb21lIGV4dHJhIHN0dWZmIGFib3V0IGZpbGUuXG4gICAqIEBncm91cCBQcm9wc1xuICAgKi9cbiAgQElucHV0KCkgZmlsZUluZm86IHN0cmluZyA9ICcnO1xuXG4gIC8qKlxuICAgKiBDYWxsYmFjayBmb3IgdXBsb2FkZWQgZmlsZSBwcm9jZXNzaW5nLlxuICAgKiBAZ3JvdXAgUHJvcHNcbiAgICovXG4gIEBJbnB1dCgpIGZpbGVQcm9jZXNzaW5nQ2FsbGJhY2s/OiAoZmlsZTogRmlsZSkgPT4gT2JzZXJ2YWJsZTxib29sZWFuPiA9XG4gICAgdW5kZWZpbmVkO1xuXG4gIC8qKlxuICAgKiBQb3NpdGlvbiBvZiBmaWxlIG5hbWUgdG9vbHRpcCwgaXQgY2FuIGJlICd0b3AnLCAnYm90dG9tJywgJ2xlZnQnIG9yICdyaWdodCcuXG4gICAqIEBncm91cCBQcm9wc1xuICAgKi9cbiAgQElucHV0KCkgZmlsZU5hbWVUb29sdGlwUG9zaXRpb246IENwc1Rvb2x0aXBQb3NpdGlvbiA9ICd0b3AnO1xuXG4gIC8qKlxuICAgKiBGaWxlIG5hbWUgdG9vbHRpcCBvZmZzZXQgZm9yIHN0eWxpbmcuXG4gICAqIEBncm91cCBQcm9wc1xuICAgKi9cbiAgQElucHV0KHsgdHJhbnNmb3JtOiBudW1iZXJBdHRyaWJ1dGUgfSkgZmlsZU5hbWVUb29sdGlwT2Zmc2V0OiBudW1iZXIgPSAxMjtcblxuICAvKipcbiAgICogQ2FsbGJhY2sgdG8gaW52b2tlIHdoZW4gZmlsZSBpcyB1cGxvYWRlZC5cbiAgICogQHBhcmFtIHtGaWxlfSBGaWxlXG4gICAqIEBncm91cCBFbWl0c1xuICAgKi9cbiAgQE91dHB1dCgpIGZpbGVVcGxvYWRlZCA9IG5ldyBFdmVudEVtaXR0ZXI8RmlsZT4oKTtcblxuICAvKipcbiAgICogQ2FsbGJhY2sgdG8gaW52b2tlIHdoZW4gZmlsZSB1cGxvYWQgZmFpbHMuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSAtIGZpbGUgbmFtZVxuICAgKiBAZ3JvdXAgRW1pdHNcbiAgICovXG4gIEBPdXRwdXQoKSBmaWxlVXBsb2FkRmFpbGVkID0gbmV3IEV2ZW50RW1pdHRlcjxzdHJpbmc+KCk7XG5cbiAgLyoqXG4gICAqIENhbGxiYWNrIHRvIGludm9rZSB3aGVuIHVwbG9hZGVkIGZpbGUgaXMgcmVtb3ZlZC5cbiAgICogQHBhcmFtIHtzdHJpbmd9IC0gZmlsZSBuYW1lXG4gICAqIEBncm91cCBFbWl0c1xuICAgKi9cbiAgQE91dHB1dCgpIHVwbG9hZGVkRmlsZVJlbW92ZWQgPSBuZXcgRXZlbnRFbWl0dGVyPHN0cmluZz4oKTtcblxuICBAVmlld0NoaWxkKCdmaWxlSW5wdXQnKSBmaWxlSW5wdXQ/OiBFbGVtZW50UmVmPEhUTUxJbnB1dEVsZW1lbnQ+O1xuXG4gIGlzRHJhZ292ZXJGaWxlID0gZmFsc2U7XG4gIHVwbG9hZGVkRmlsZT86IEZpbGU7XG4gIGV4dGVuc2lvbnNTdHJpbmcgPSAnJztcbiAgZXh0ZW5zaW9uc1N0cmluZ0FzdGVyaXNrcyA9ICcnO1xuICBjdnRXaWR0aCA9ICcnO1xuXG4gIGlzUHJvY2Vzc2luZ0ZpbGUgPSBmYWxzZTtcblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLnVwZGF0ZUV4dGVuc2lvbnNTdHJpbmcoKTtcbiAgICB0aGlzLmN2dFdpZHRoID0gY29udmVydFNpemUodGhpcy53aWR0aCk7XG4gIH1cblxuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XG4gICAgaWYgKGNoYW5nZXMuZXh0ZW5zaW9ucykge1xuICAgICAgdGhpcy51cGRhdGVFeHRlbnNpb25zU3RyaW5nKCk7XG4gICAgfVxuICB9XG5cbiAgdXBkYXRlRXh0ZW5zaW9uc1N0cmluZygpOiB2b2lkIHtcbiAgICB0aGlzLmV4dGVuc2lvbnMgPSB0aGlzLmV4dGVuc2lvbnMubWFwKChleHQpID0+XG4gICAgICBleHQuc3RhcnRzV2l0aCgnLicpID8gZXh0LnRvTG93ZXJDYXNlKCkgOiAnLicgKyBleHQudG9Mb3dlckNhc2UoKVxuICAgICk7XG4gICAgdGhpcy5leHRlbnNpb25zU3RyaW5nID0gdGhpcy5leHRlbnNpb25zLmpvaW4oJywgJyk7XG4gICAgdGhpcy5leHRlbnNpb25zU3RyaW5nQXN0ZXJpc2tzID0gdGhpcy5leHRlbnNpb25zXG4gICAgICAubWFwKChleHQpID0+ICcqJyArIGV4dClcbiAgICAgIC5qb2luKCcsICcpO1xuICB9XG5cbiAgdHJ5VXBsb2FkRmlsZShldmVudDogRXZlbnQpIHtcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuXG4gICAgdGhpcy5pc0RyYWdvdmVyRmlsZSA9IGZhbHNlO1xuICAgIGxldCBmaWxlOiBGaWxlIHwgdW5kZWZpbmVkO1xuXG4gICAgaWYgKGV2ZW50LnR5cGUgPT09ICdkcm9wJykge1xuICAgICAgZmlsZSA9IChldmVudCBhcyBEcmFnRXZlbnQpLmRhdGFUcmFuc2Zlcj8uZmlsZXMuaXRlbSgwKSA/PyB1bmRlZmluZWQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IGZpbGVzID0gKGV2ZW50LnRhcmdldCBhcyBIVE1MSW5wdXRFbGVtZW50KS5maWxlcztcbiAgICAgIGlmICghZmlsZXMgfHwgZmlsZXMubGVuZ3RoIDwgMSkgcmV0dXJuO1xuICAgICAgZmlsZSA9IGZpbGVzLml0ZW0oMCkgPz8gdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIGlmICghdGhpcy5faXNGaWxlRXh0ZW5zaW9uVmFsaWQoZmlsZSkpIHtcbiAgICAgIHRoaXMuZmlsZVVwbG9hZEZhaWxlZC5lbWl0KGZpbGU/Lm5hbWUgPz8gJycpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMudXBsb2FkZWRGaWxlID0gZmlsZTtcbiAgICBpZiAodGhpcy51cGxvYWRlZEZpbGUpIHtcbiAgICAgIHRoaXMuZmlsZVVwbG9hZGVkLmVtaXQodGhpcy51cGxvYWRlZEZpbGUpO1xuICAgICAgaWYgKHRoaXMuZmlsZVByb2Nlc3NpbmdDYWxsYmFjaykge1xuICAgICAgICB0aGlzLmlzUHJvY2Vzc2luZ0ZpbGUgPSB0cnVlO1xuICAgICAgICB0aGlzLmZpbGVQcm9jZXNzaW5nQ2FsbGJhY2sodGhpcy51cGxvYWRlZEZpbGUpXG4gICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICB0YWtlKDEpLFxuICAgICAgICAgICAgY2F0Y2hFcnJvcigoKSA9PiB7XG4gICAgICAgICAgICAgIHJldHVybiBvZihmYWxzZSk7XG4gICAgICAgICAgICB9KVxuICAgICAgICAgIClcbiAgICAgICAgICAuc3Vic2NyaWJlKChyZXMpID0+IHtcbiAgICAgICAgICAgIGlmICghcmVzKSB0aGlzLnJlbW92ZVVwbG9hZGVkRmlsZSgpO1xuICAgICAgICAgICAgdGhpcy5pc1Byb2Nlc3NpbmdGaWxlID0gZmFsc2U7XG4gICAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmVtb3ZlVXBsb2FkZWRGaWxlKCkge1xuICAgIGNvbnN0IG5hbWUgPSB0aGlzLnVwbG9hZGVkRmlsZT8ubmFtZSA/PyAnJztcbiAgICB0aGlzLnVwbG9hZGVkRmlsZSA9IHVuZGVmaW5lZDtcbiAgICB0aGlzLnVwbG9hZGVkRmlsZVJlbW92ZWQuZW1pdChuYW1lKTtcblxuICAgIGlmICh0aGlzLmZpbGVJbnB1dCkge1xuICAgICAgdGhpcy5maWxlSW5wdXQubmF0aXZlRWxlbWVudC52YWx1ZSA9ICcnO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgX2lzRmlsZUV4dGVuc2lvblZhbGlkKGZpbGU/OiBGaWxlKSB7XG4gICAgaWYgKCFmaWxlKSByZXR1cm4gZmFsc2U7XG5cbiAgICBpZiAodGhpcy5leHRlbnNpb25zLmxlbmd0aCA8IDEpIHJldHVybiB0cnVlO1xuICAgIGNvbnN0IGZpbGVOYW1lTG93ZXJDYXNlID0gZmlsZS5uYW1lLnRvTG93ZXJDYXNlKCk7XG4gICAgZm9yIChjb25zdCBleHQgb2YgdGhpcy5leHRlbnNpb25zKSB7XG4gICAgICBpZiAoZmlsZU5hbWVMb3dlckNhc2UuZW5kc1dpdGgoZXh0KSkgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG59XG4iLCI8ZGl2IGNsYXNzPVwiY3BzLWZpbGUtdXBsb2FkXCIgW25nU3R5bGVdPVwieyB3aWR0aDogY3Z0V2lkdGggfVwiPlxuICA8ZGl2XG4gICAgY2xhc3M9XCJjcHMtZmlsZS11cGxvYWQtZHJvcHpvbmVcIlxuICAgIFtuZ0NsYXNzXT1cIntcbiAgICAgICdkcmFnZ2VkLW92ZXInOiBpc0RyYWdvdmVyRmlsZSxcbiAgICAgICd3aXRoLXVwbG9hZHMnOiB1cGxvYWRlZEZpbGU/Lm5hbWVcbiAgICB9XCJcbiAgICAoZHJhZ2VuZCk9XCJpc0RyYWdvdmVyRmlsZSA9IGZhbHNlXCJcbiAgICAoZHJhZ2VudGVyKT1cImlzRHJhZ292ZXJGaWxlID0gdHJ1ZVwiXG4gICAgKGRyYWdsZWF2ZSk9XCJpc0RyYWdvdmVyRmlsZSA9IGZhbHNlXCJcbiAgICAoZHJhZ292ZXIpPVwiaXNEcmFnb3ZlckZpbGUgPSB0cnVlXCJcbiAgICAobW91c2VsZWF2ZSk9XCJpc0RyYWdvdmVyRmlsZSA9IGZhbHNlXCJcbiAgICAoZHJvcCk9XCJ0cnlVcGxvYWRGaWxlKCRldmVudClcIj5cbiAgICA8aW5wdXRcbiAgICAgICNmaWxlSW5wdXRcbiAgICAgIChjaGFuZ2UpPVwidHJ5VXBsb2FkRmlsZSgkZXZlbnQpXCJcbiAgICAgIHR5cGU9XCJmaWxlXCJcbiAgICAgIFthY2NlcHRdPVwiZXh0ZW5zaW9uc1N0cmluZ1wiXG4gICAgICB0aXRsZT1cIlwiIC8+XG4gICAgPGNwcy1pY29uIGljb249XCJleHBvcnRcIiBzaXplPVwibGFyZ2VcIiBjb2xvcj1cInRleHQtZGFya2VzdFwiPjwvY3BzLWljb24+XG4gICAgPGRpdiBjbGFzcz1cImNwcy1maWxlLXVwbG9hZC1kcm9wem9uZS10aXRsZVwiPlxuICAgICAgRHJhZyZEcm9wIG9yIGNob29zZSBhIGZpbGUgdG8gdXBsb2FkXG4gICAgPC9kaXY+XG4gICAgPHNwYW5cbiAgICAgIGNsYXNzPVwiY3BzLWZpbGUtdXBsb2FkLWRyb3B6b25lLWZpbGUtZGVzY1wiXG4gICAgICAqbmdJZj1cImZpbGVEZXNjIHx8IGV4dGVuc2lvbnNTdHJpbmdBc3Rlcmlza3NcIlxuICAgICAgPnt7IGZpbGVEZXNjIH19XG4gICAgICB7e1xuICAgICAgICBleHRlbnNpb25zU3RyaW5nQXN0ZXJpc2tzID8gJygnICsgZXh0ZW5zaW9uc1N0cmluZ0FzdGVyaXNrcyArICcpJyA6ICcnXG4gICAgICB9fTwvc3BhblxuICAgID5cbiAgICBAaWYoZmlsZUluZm8pIHtcbiAgICAgIDxkaXYgY2xhc3M9XCJjcHMtZmlsZS11cGxvYWQtZHJvcHpvbmUtY29udGVudFwiPlxuICAgICAgICA8Y3BzLWljb24gY29sb3I9XCJjYWxtXCIgaWNvbj1cImluZm8tY2lyY2xlXCIgc2l6ZT1cInhzbWFsbFwiPjwvY3BzLWljb24+XG4gICAgICAgIHt7ZmlsZUluZm99fVxuICAgICAgPC9kaXY+XG4gICAgfVxuICAgIDxjcHMtcHJvZ3Jlc3MtbGluZWFyXG4gICAgICAqbmdJZj1cImlzUHJvY2Vzc2luZ0ZpbGUgJiYgdXBsb2FkZWRGaWxlXCJcbiAgICAgIGhlaWdodD1cIjNcIlxuICAgICAgcmFkaXVzPVwiNFwiXG4gICAgICBvcGFjaXR5PVwiMC4zXCJcbiAgICAgIGNsYXNzPVwiY3BzLWZpbGUtdXBsb2FkLXByb2dyZXNzLWJhclwiXG4gICAgICBiZ0NvbG9yPVwidHJhbnNwYXJlbnRcIj5cbiAgICA8L2Nwcy1wcm9ncmVzcy1saW5lYXI+XG4gIDwvZGl2PlxuICA8ZGl2ICpuZ0lmPVwidXBsb2FkZWRGaWxlXCIgY2xhc3M9XCJjcHMtZmlsZS11cGxvYWQtdXBsb2FkZWQtZmlsZXNcIj5cbiAgICA8ZGl2IGNsYXNzPVwiY3BzLWZpbGUtdXBsb2FkLXVwbG9hZGVkLWZpbGVcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJjcHMtZmlsZS11cGxvYWQtdXBsb2FkZWQtZmlsZS10aXRsZVwiPlxuICAgICAgICA8Y3BzLWljb25cbiAgICAgICAgICBjbGFzcz1cImNwcy1maWxlLXVwbG9hZC11cGxvYWRlZC1maWxlLXN0YXR1cy1pY29uXCJcbiAgICAgICAgICBbaWNvbl09XCJpc1Byb2Nlc3NpbmdGaWxlID8gJ3BlbmRpbmcnIDogJ3RvYXN0LXN1Y2Nlc3MnXCJcbiAgICAgICAgICBbY29sb3JdPVwiaXNQcm9jZXNzaW5nRmlsZSA/ICd3YXJuJyA6ICdzdWNjZXNzJ1wiPlxuICAgICAgICA8L2Nwcy1pY29uPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiY3BzLWZpbGUtdXBsb2FkLXVwbG9hZGVkLWZpbGUtbmFtZVwiXG4gICAgICAgICAgICAgY3BzVG9vbHRpcD1cInt7IHVwbG9hZGVkRmlsZS5uYW1lIH19XCJcbiAgICAgICAgICAgICBbdG9vbHRpcFBvc2l0aW9uXT1cImZpbGVOYW1lVG9vbHRpcFBvc2l0aW9uXCJcbiAgICAgICAgICAgICBbdG9vbHRpcE9mZnNldF09XCJmaWxlTmFtZVRvb2x0aXBPZmZzZXRcIlxuICAgICAgICAgICAgIHRvb2x0aXBPcGVuT249XCJob3ZlclwiPlxuICAgICAgICAgIHt7IHVwbG9hZGVkRmlsZS5uYW1lIH19XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgICA8Y3BzLWljb25cbiAgICAgICAgKm5nSWY9XCIhaXNQcm9jZXNzaW5nRmlsZVwiXG4gICAgICAgIGNsYXNzPVwiY3BzLWZpbGUtdXBsb2FkLXVwbG9hZGVkLWZpbGUtcmVtb3ZlLWljb25cIlxuICAgICAgICBpY29uPVwicmVtb3ZlXCJcbiAgICAgICAgY29sb3I9XCJlcnJvclwiXG4gICAgICAgIChjbGljayk9XCJyZW1vdmVVcGxvYWRlZEZpbGUoKVwiPlxuICAgICAgPC9jcHMtaWNvbj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG48L2Rpdj5cbiJdfQ==