cloud-ide-element 1.0.4 → 1.0.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +63 -271
- package/fesm2022/cloud-ide-element.mjs +614 -618
- package/fesm2022/cloud-ide-element.mjs.map +1 -1
- package/index.d.ts +1362 -3
- package/package.json +4 -31
- package/esm2022/cloud-ide-element.mjs +0 -5
- package/esm2022/lib/components/confirmation-modal/confirmation-modal.component.mjs +0 -182
- package/esm2022/lib/components/data-grid/data-grid.component.mjs +0 -1363
- package/esm2022/lib/components/data-grid/data-grid.types.mjs +0 -37
- package/esm2022/lib/components/dropdown/dropdown.component.mjs +0 -396
- package/esm2022/lib/components/global-notifications/global-notifications.component.mjs +0 -30
- package/esm2022/lib/components/json-editor/json-editor.component.mjs +0 -521
- package/esm2022/lib/components/skeleton-loader/skeleton-loader.component.mjs +0 -33
- package/esm2022/lib/components/toast-notification/toast-notification.component.mjs +0 -152
- package/esm2022/lib/elements/button/cide-ele-button.component.mjs +0 -249
- package/esm2022/lib/elements/file-input/file-input.component.mjs +0 -83
- package/esm2022/lib/elements/icon/icon.component.mjs +0 -26
- package/esm2022/lib/elements/input/input.component.mjs +0 -467
- package/esm2022/lib/elements/select/select.component.mjs +0 -471
- package/esm2022/lib/elements/spinner/spinner.component.mjs +0 -32
- package/esm2022/lib/elements/tab/cide-ele-tab.component.mjs +0 -74
- package/esm2022/lib/elements/textarea/textarea.component.mjs +0 -157
- package/esm2022/lib/services/confirmation.service.mjs +0 -151
- package/esm2022/lib/services/dropdown-manager.service.mjs +0 -93
- package/esm2022/lib/services/notification.service.mjs +0 -196
- package/esm2022/lib/utils/directives/resizer/resizer.directive.mjs +0 -231
- package/esm2022/lib/utils/directives/tooltip/tooltip.directive.mjs +0 -294
- package/esm2022/lib/utils/pipes/capitalize/capitalize.pipe.mjs +0 -38
- package/esm2022/lib/utils/services/elements/elements.service.mjs +0 -39
- package/esm2022/public-api.mjs +0 -31
- package/lib/components/confirmation-modal/confirmation-modal.component.d.ts +0 -16
- package/lib/components/data-grid/data-grid.component.d.ts +0 -244
- package/lib/components/data-grid/data-grid.types.d.ts +0 -146
- package/lib/components/dropdown/dropdown.component.d.ts +0 -75
- package/lib/components/global-notifications/global-notifications.component.d.ts +0 -5
- package/lib/components/json-editor/json-editor.component.d.ts +0 -116
- package/lib/components/skeleton-loader/skeleton-loader.component.d.ts +0 -11
- package/lib/components/toast-notification/toast-notification.component.d.ts +0 -13
- package/lib/elements/button/cide-ele-button.component.d.ts +0 -85
- package/lib/elements/file-input/file-input.component.d.ts +0 -25
- package/lib/elements/icon/icon.component.d.ts +0 -9
- package/lib/elements/input/input.component.d.ts +0 -182
- package/lib/elements/select/select.component.d.ts +0 -91
- package/lib/elements/spinner/spinner.component.d.ts +0 -19
- package/lib/elements/tab/cide-ele-tab.component.d.ts +0 -26
- package/lib/elements/textarea/textarea.component.d.ts +0 -47
- package/lib/services/confirmation.service.d.ts +0 -65
- package/lib/services/dropdown-manager.service.d.ts +0 -22
- package/lib/services/notification.service.d.ts +0 -81
- package/lib/utils/directives/resizer/resizer.directive.d.ts +0 -44
- package/lib/utils/directives/tooltip/tooltip.directive.d.ts +0 -43
- package/lib/utils/pipes/capitalize/capitalize.pipe.d.ts +0 -7
- package/lib/utils/services/elements/elements.service.d.ts +0 -12
- package/public-api.d.ts +0 -22
package/package.json
CHANGED
|
@@ -1,48 +1,21 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "cloud-ide-element",
|
|
3
|
-
"version": "1.0.
|
|
4
|
-
"description": "A comprehensive Angular UI component library with data grid, form elements, and utilities",
|
|
5
|
-
"keywords": [
|
|
6
|
-
"angular",
|
|
7
|
-
"ui",
|
|
8
|
-
"components",
|
|
9
|
-
"data-grid",
|
|
10
|
-
"form",
|
|
11
|
-
"typescript",
|
|
12
|
-
"tailwind",
|
|
13
|
-
"responsive"
|
|
14
|
-
],
|
|
15
|
-
"author": "CIDE-LMS Team",
|
|
16
|
-
"license": "MIT",
|
|
17
|
-
"homepage": "https://github.com/your-org/cloud-ide-element#readme",
|
|
18
|
-
"repository": {
|
|
19
|
-
"type": "git",
|
|
20
|
-
"url": "https://github.com/your-org/cloud-ide-element.git"
|
|
21
|
-
},
|
|
22
|
-
"bugs": {
|
|
23
|
-
"url": "https://github.com/your-org/cloud-ide-element/issues"
|
|
24
|
-
},
|
|
25
|
-
"engines": {
|
|
26
|
-
"node": ">=18.0.0",
|
|
27
|
-
"npm": ">=8.0.0"
|
|
28
|
-
},
|
|
3
|
+
"version": "1.0.6",
|
|
29
4
|
"peerDependencies": {
|
|
30
|
-
"@angular/common": "^
|
|
31
|
-
"@angular/core": "^
|
|
5
|
+
"@angular/common": "^20.1.0",
|
|
6
|
+
"@angular/core": "^20.1.0"
|
|
32
7
|
},
|
|
33
8
|
"dependencies": {
|
|
34
9
|
"tslib": "^2.3.0"
|
|
35
10
|
},
|
|
36
11
|
"sideEffects": false,
|
|
37
12
|
"exports": {
|
|
38
|
-
"./element": "./src/lib/assets/css/cide-ele-
|
|
13
|
+
"./element": "./src/lib/assets/css/cide-ele-style.scss",
|
|
39
14
|
"./package.json": {
|
|
40
15
|
"default": "./package.json"
|
|
41
16
|
},
|
|
42
17
|
".": {
|
|
43
18
|
"types": "./index.d.ts",
|
|
44
|
-
"esm2022": "./esm2022/cloud-ide-element.mjs",
|
|
45
|
-
"esm": "./esm2022/cloud-ide-element.mjs",
|
|
46
19
|
"default": "./fesm2022/cloud-ide-element.mjs"
|
|
47
20
|
}
|
|
48
21
|
},
|
|
@@ -1,5 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Generated bundle index. Do not edit.
|
|
3
|
-
*/
|
|
4
|
-
export * from './public-api';
|
|
5
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xvdWQtaWRlLWVsZW1lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9wcm9qZWN0cy9jbG91ZC1pZGUtZWxlbWVudC9zcmMvY2xvdWQtaWRlLWVsZW1lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7O0dBRUc7QUFFSCxjQUFjLGNBQWMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogR2VuZXJhdGVkIGJ1bmRsZSBpbmRleC4gRG8gbm90IGVkaXQuXG4gKi9cblxuZXhwb3J0ICogZnJvbSAnLi9wdWJsaWMtYXBpJztcbiJdfQ==
|
|
@@ -1,182 +0,0 @@
|
|
|
1
|
-
import { Component, signal, computed, inject } from '@angular/core';
|
|
2
|
-
import { CommonModule } from '@angular/common';
|
|
3
|
-
import { CideIconComponent } from '../../elements/icon/icon.component';
|
|
4
|
-
import { ConfirmationService } from '../../services/confirmation.service';
|
|
5
|
-
import * as i0 from "@angular/core";
|
|
6
|
-
import * as i1 from "@angular/common";
|
|
7
|
-
export class CideEleConfirmationModalComponent {
|
|
8
|
-
constructor() {
|
|
9
|
-
this.confirmationService = inject(ConfirmationService);
|
|
10
|
-
// Signals
|
|
11
|
-
this.hasActiveConfirmation = this.confirmationService.hasActiveConfirmation;
|
|
12
|
-
this.currentRequest = this.confirmationService.getCurrentRequest();
|
|
13
|
-
this.customData = signal(null);
|
|
14
|
-
// Computed
|
|
15
|
-
this.getHeaderClass = computed(() => {
|
|
16
|
-
const request = this.currentRequest();
|
|
17
|
-
return request ? `header-${request.type}` : '';
|
|
18
|
-
});
|
|
19
|
-
this.getIconClass = computed(() => {
|
|
20
|
-
const request = this.currentRequest();
|
|
21
|
-
return request ? request.type : 'info';
|
|
22
|
-
});
|
|
23
|
-
this.getConfirmButtonClass = computed(() => {
|
|
24
|
-
const request = this.currentRequest();
|
|
25
|
-
if (!request)
|
|
26
|
-
return 'btn-primary';
|
|
27
|
-
const classMap = {
|
|
28
|
-
danger: 'btn-danger',
|
|
29
|
-
warning: 'btn-warning',
|
|
30
|
-
info: 'btn-primary',
|
|
31
|
-
success: 'btn-success'
|
|
32
|
-
};
|
|
33
|
-
return classMap[request.type] || 'btn-primary';
|
|
34
|
-
});
|
|
35
|
-
}
|
|
36
|
-
onBackdropClick(event) {
|
|
37
|
-
// Only close if clicking the backdrop itself, not its children
|
|
38
|
-
if (event.target === event.currentTarget) {
|
|
39
|
-
this.onCancel();
|
|
40
|
-
}
|
|
41
|
-
}
|
|
42
|
-
onCancel() {
|
|
43
|
-
this.confirmationService.cancelCurrentRequest();
|
|
44
|
-
}
|
|
45
|
-
onConfirm() {
|
|
46
|
-
// If there's custom data, pass it to the confirmation
|
|
47
|
-
const data = this.customData();
|
|
48
|
-
this.confirmationService.confirmCurrentRequest(data);
|
|
49
|
-
this.customData.set(null); // Reset custom data
|
|
50
|
-
}
|
|
51
|
-
// Method to update custom data (called by custom templates)
|
|
52
|
-
updateCustomData(data) {
|
|
53
|
-
this.customData.set(data);
|
|
54
|
-
}
|
|
55
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: CideEleConfirmationModalComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
56
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.7", type: CideEleConfirmationModalComponent, isStandalone: true, selector: "cide-ele-confirmation-modal", ngImport: i0, template: `
|
|
57
|
-
<!-- Backdrop -->
|
|
58
|
-
<div
|
|
59
|
-
*ngIf="hasActiveConfirmation()"
|
|
60
|
-
class="confirmation-backdrop"
|
|
61
|
-
(click)="onBackdropClick($event)"
|
|
62
|
-
[@backdropAnimation]>
|
|
63
|
-
</div>
|
|
64
|
-
|
|
65
|
-
<!-- Modal -->
|
|
66
|
-
<div
|
|
67
|
-
*ngIf="hasActiveConfirmation()"
|
|
68
|
-
class="confirmation-modal"
|
|
69
|
-
[@modalAnimation]>
|
|
70
|
-
|
|
71
|
-
<!-- Modal Header -->
|
|
72
|
-
<div class="modal-header" [class]="getHeaderClass()">
|
|
73
|
-
<div class="header-content">
|
|
74
|
-
<div class="icon-container" [class]="getIconClass()">
|
|
75
|
-
<cide-ele-icon
|
|
76
|
-
size="lg">
|
|
77
|
-
{{ currentRequest()?.icon || 'info' }}
|
|
78
|
-
</cide-ele-icon>
|
|
79
|
-
</div>
|
|
80
|
-
<h2 class="modal-title">{{ currentRequest()?.title }}</h2>
|
|
81
|
-
</div>
|
|
82
|
-
</div>
|
|
83
|
-
|
|
84
|
-
<!-- Modal Body -->
|
|
85
|
-
<div class="modal-body">
|
|
86
|
-
<p class="modal-message">{{ currentRequest()?.message }}</p>
|
|
87
|
-
|
|
88
|
-
<!-- Custom Template Slot -->
|
|
89
|
-
<div *ngIf="currentRequest()?.customTemplate" class="custom-content">
|
|
90
|
-
<ng-container
|
|
91
|
-
*ngTemplateOutlet="currentRequest()?.customTemplate!; context: { $implicit: customData }">
|
|
92
|
-
</ng-container>
|
|
93
|
-
</div>
|
|
94
|
-
</div>
|
|
95
|
-
|
|
96
|
-
<!-- Modal Footer -->
|
|
97
|
-
<div class="modal-footer">
|
|
98
|
-
<button
|
|
99
|
-
type="button"
|
|
100
|
-
class="btn btn-secondary"
|
|
101
|
-
(click)="onCancel()">
|
|
102
|
-
{{ currentRequest()?.cancelText || 'Cancel' }}
|
|
103
|
-
</button>
|
|
104
|
-
|
|
105
|
-
<button
|
|
106
|
-
type="button"
|
|
107
|
-
class="btn"
|
|
108
|
-
[class]="getConfirmButtonClass()"
|
|
109
|
-
(click)="onConfirm()">
|
|
110
|
-
{{ currentRequest()?.confirmText || 'Confirm' }}
|
|
111
|
-
</button>
|
|
112
|
-
</div>
|
|
113
|
-
</div>
|
|
114
|
-
`, isInline: true, styles: [".confirmation-backdrop{position:fixed;inset:0;background-color:#00000080;-webkit-backdrop-filter:blur(4px);backdrop-filter:blur(4px);z-index:10000;display:flex;align-items:center;justify-content:center}.confirmation-modal{background:#fff;border-radius:12px;box-shadow:0 20px 25px -5px #0000001a,0 10px 10px -5px #0000000a;max-width:480px;width:90%;max-height:90vh;overflow:hidden;z-index:10001;position:relative}.modal-header{padding:24px 24px 16px;border-bottom:1px solid #e5e7eb}.header-content{display:flex;align-items:center;gap:16px}.icon-container{width:48px;height:48px;border-radius:50%;display:flex;align-items:center;justify-content:center;flex-shrink:0}.icon-container.danger{background-color:#fef2f2;color:#dc2626}.icon-container.warning{background-color:#fffbeb;color:#d97706}.icon-container.info{background-color:#eff6ff;color:#2563eb}.icon-container.success{background-color:#f0fdf4;color:#16a34a}.modal-title{margin:0;font-size:20px;font-weight:600;color:#111827;line-height:1.4}.modal-body{padding:16px 24px 24px}.modal-message{margin:0 0 16px;font-size:16px;line-height:1.5;color:#6b7280}.custom-content{margin-top:16px;padding-top:16px;border-top:1px solid #f3f4f6}.modal-footer{padding:16px 24px 24px;display:flex;gap:12px;justify-content:flex-end;border-top:1px solid #e5e7eb}.btn{padding:10px 20px;border-radius:8px;font-size:14px;font-weight:500;border:none;cursor:pointer;transition:all .2s ease;min-width:80px}.btn:hover{transform:translateY(-1px)}.btn:active{transform:translateY(0)}.btn-secondary{background-color:#f9fafb;color:#374151;border:1px solid #d1d5db}.btn-secondary:hover{background-color:#f3f4f6;border-color:#9ca3af}.btn-primary{background-color:#2563eb;color:#fff}.btn-primary:hover{background-color:#1d4ed8}.btn-danger{background-color:#dc2626;color:#fff}.btn-danger:hover{background-color:#b91c1c}.btn-warning{background-color:#d97706;color:#fff}.btn-warning:hover{background-color:#b45309}.btn-success{background-color:#16a34a;color:#fff}.btn-success:hover{background-color:#15803d}@media (max-width: 640px){.confirmation-modal{width:95%;margin:20px}.modal-header{padding:20px 20px 12px}.modal-body{padding:12px 20px 20px}.modal-footer{padding:12px 20px 20px;flex-direction:column-reverse}.btn{width:100%;justify-content:center}.header-content{flex-direction:column;text-align:center;gap:12px}.modal-title{font-size:18px}}.btn:focus{outline:2px solid #2563eb;outline-offset:2px}.modal-enter{opacity:0;transform:scale(.95) translateY(-10px)}.modal-enter-active{opacity:1;transform:scale(1) translateY(0);transition:all .2s ease-out}.modal-exit{opacity:1;transform:scale(1) translateY(0)}.modal-exit-active{opacity:0;transform:scale(.95) translateY(-10px);transition:all .15s ease-in}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: CideIconComponent, selector: "cide-ele-icon", inputs: ["size", "type", "toolTip"] }], animations: [
|
|
115
|
-
// Add animations here if needed
|
|
116
|
-
] }); }
|
|
117
|
-
}
|
|
118
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: CideEleConfirmationModalComponent, decorators: [{
|
|
119
|
-
type: Component,
|
|
120
|
-
args: [{ selector: 'cide-ele-confirmation-modal', standalone: true, imports: [CommonModule, CideIconComponent], template: `
|
|
121
|
-
<!-- Backdrop -->
|
|
122
|
-
<div
|
|
123
|
-
*ngIf="hasActiveConfirmation()"
|
|
124
|
-
class="confirmation-backdrop"
|
|
125
|
-
(click)="onBackdropClick($event)"
|
|
126
|
-
[@backdropAnimation]>
|
|
127
|
-
</div>
|
|
128
|
-
|
|
129
|
-
<!-- Modal -->
|
|
130
|
-
<div
|
|
131
|
-
*ngIf="hasActiveConfirmation()"
|
|
132
|
-
class="confirmation-modal"
|
|
133
|
-
[@modalAnimation]>
|
|
134
|
-
|
|
135
|
-
<!-- Modal Header -->
|
|
136
|
-
<div class="modal-header" [class]="getHeaderClass()">
|
|
137
|
-
<div class="header-content">
|
|
138
|
-
<div class="icon-container" [class]="getIconClass()">
|
|
139
|
-
<cide-ele-icon
|
|
140
|
-
size="lg">
|
|
141
|
-
{{ currentRequest()?.icon || 'info' }}
|
|
142
|
-
</cide-ele-icon>
|
|
143
|
-
</div>
|
|
144
|
-
<h2 class="modal-title">{{ currentRequest()?.title }}</h2>
|
|
145
|
-
</div>
|
|
146
|
-
</div>
|
|
147
|
-
|
|
148
|
-
<!-- Modal Body -->
|
|
149
|
-
<div class="modal-body">
|
|
150
|
-
<p class="modal-message">{{ currentRequest()?.message }}</p>
|
|
151
|
-
|
|
152
|
-
<!-- Custom Template Slot -->
|
|
153
|
-
<div *ngIf="currentRequest()?.customTemplate" class="custom-content">
|
|
154
|
-
<ng-container
|
|
155
|
-
*ngTemplateOutlet="currentRequest()?.customTemplate!; context: { $implicit: customData }">
|
|
156
|
-
</ng-container>
|
|
157
|
-
</div>
|
|
158
|
-
</div>
|
|
159
|
-
|
|
160
|
-
<!-- Modal Footer -->
|
|
161
|
-
<div class="modal-footer">
|
|
162
|
-
<button
|
|
163
|
-
type="button"
|
|
164
|
-
class="btn btn-secondary"
|
|
165
|
-
(click)="onCancel()">
|
|
166
|
-
{{ currentRequest()?.cancelText || 'Cancel' }}
|
|
167
|
-
</button>
|
|
168
|
-
|
|
169
|
-
<button
|
|
170
|
-
type="button"
|
|
171
|
-
class="btn"
|
|
172
|
-
[class]="getConfirmButtonClass()"
|
|
173
|
-
(click)="onConfirm()">
|
|
174
|
-
{{ currentRequest()?.confirmText || 'Confirm' }}
|
|
175
|
-
</button>
|
|
176
|
-
</div>
|
|
177
|
-
</div>
|
|
178
|
-
`, animations: [
|
|
179
|
-
// Add animations here if needed
|
|
180
|
-
], styles: [".confirmation-backdrop{position:fixed;inset:0;background-color:#00000080;-webkit-backdrop-filter:blur(4px);backdrop-filter:blur(4px);z-index:10000;display:flex;align-items:center;justify-content:center}.confirmation-modal{background:#fff;border-radius:12px;box-shadow:0 20px 25px -5px #0000001a,0 10px 10px -5px #0000000a;max-width:480px;width:90%;max-height:90vh;overflow:hidden;z-index:10001;position:relative}.modal-header{padding:24px 24px 16px;border-bottom:1px solid #e5e7eb}.header-content{display:flex;align-items:center;gap:16px}.icon-container{width:48px;height:48px;border-radius:50%;display:flex;align-items:center;justify-content:center;flex-shrink:0}.icon-container.danger{background-color:#fef2f2;color:#dc2626}.icon-container.warning{background-color:#fffbeb;color:#d97706}.icon-container.info{background-color:#eff6ff;color:#2563eb}.icon-container.success{background-color:#f0fdf4;color:#16a34a}.modal-title{margin:0;font-size:20px;font-weight:600;color:#111827;line-height:1.4}.modal-body{padding:16px 24px 24px}.modal-message{margin:0 0 16px;font-size:16px;line-height:1.5;color:#6b7280}.custom-content{margin-top:16px;padding-top:16px;border-top:1px solid #f3f4f6}.modal-footer{padding:16px 24px 24px;display:flex;gap:12px;justify-content:flex-end;border-top:1px solid #e5e7eb}.btn{padding:10px 20px;border-radius:8px;font-size:14px;font-weight:500;border:none;cursor:pointer;transition:all .2s ease;min-width:80px}.btn:hover{transform:translateY(-1px)}.btn:active{transform:translateY(0)}.btn-secondary{background-color:#f9fafb;color:#374151;border:1px solid #d1d5db}.btn-secondary:hover{background-color:#f3f4f6;border-color:#9ca3af}.btn-primary{background-color:#2563eb;color:#fff}.btn-primary:hover{background-color:#1d4ed8}.btn-danger{background-color:#dc2626;color:#fff}.btn-danger:hover{background-color:#b91c1c}.btn-warning{background-color:#d97706;color:#fff}.btn-warning:hover{background-color:#b45309}.btn-success{background-color:#16a34a;color:#fff}.btn-success:hover{background-color:#15803d}@media (max-width: 640px){.confirmation-modal{width:95%;margin:20px}.modal-header{padding:20px 20px 12px}.modal-body{padding:12px 20px 20px}.modal-footer{padding:12px 20px 20px;flex-direction:column-reverse}.btn{width:100%;justify-content:center}.header-content{flex-direction:column;text-align:center;gap:12px}.modal-title{font-size:18px}}.btn:focus{outline:2px solid #2563eb;outline-offset:2px}.modal-enter{opacity:0;transform:scale(.95) translateY(-10px)}.modal-enter-active{opacity:1;transform:scale(1) translateY(0);transition:all .2s ease-out}.modal-exit{opacity:1;transform:scale(1) translateY(0)}.modal-exit-active{opacity:0;transform:scale(.95) translateY(-10px);transition:all .15s ease-in}\n"] }]
|
|
181
|
-
}] });
|
|
182
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZmlybWF0aW9uLW1vZGFsLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2Nsb3VkLWlkZS1lbGVtZW50L3NyYy9saWIvY29tcG9uZW50cy9jb25maXJtYXRpb24tbW9kYWwvY29uZmlybWF0aW9uLW1vZGFsLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3BFLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQztBQUN2RSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQzs7O0FBNlMxRSxNQUFNLE9BQU8saUNBQWlDO0lBM1M5QztRQTRTVSx3QkFBbUIsR0FBRyxNQUFNLENBQUMsbUJBQW1CLENBQUMsQ0FBQztRQUUxRCxVQUFVO1FBQ1YsMEJBQXFCLEdBQUcsSUFBSSxDQUFDLG1CQUFtQixDQUFDLHFCQUFxQixDQUFDO1FBQ3ZFLG1CQUFjLEdBQUcsSUFBSSxDQUFDLG1CQUFtQixDQUFDLGlCQUFpQixFQUFFLENBQUM7UUFDOUQsZUFBVSxHQUFHLE1BQU0sQ0FBVSxJQUFJLENBQUMsQ0FBQztRQUVuQyxXQUFXO1FBQ1gsbUJBQWMsR0FBRyxRQUFRLENBQUMsR0FBRyxFQUFFO1lBQzdCLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztZQUN0QyxPQUFPLE9BQU8sQ0FBQyxDQUFDLENBQUMsVUFBVSxPQUFPLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztRQUNqRCxDQUFDLENBQUMsQ0FBQztRQUVILGlCQUFZLEdBQUcsUUFBUSxDQUFDLEdBQUcsRUFBRTtZQUMzQixNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7WUFDdEMsT0FBTyxPQUFPLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQztRQUN6QyxDQUFDLENBQUMsQ0FBQztRQUVILDBCQUFxQixHQUFHLFFBQVEsQ0FBQyxHQUFHLEVBQUU7WUFDcEMsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO1lBQ3RDLElBQUksQ0FBQyxPQUFPO2dCQUFFLE9BQU8sYUFBYSxDQUFDO1lBRW5DLE1BQU0sUUFBUSxHQUFHO2dCQUNmLE1BQU0sRUFBRSxZQUFZO2dCQUNwQixPQUFPLEVBQUUsYUFBYTtnQkFDdEIsSUFBSSxFQUFFLGFBQWE7Z0JBQ25CLE9BQU8sRUFBRSxhQUFhO2FBQ3ZCLENBQUM7WUFFRixPQUFPLFFBQVEsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksYUFBYSxDQUFDO1FBQ2pELENBQUMsQ0FBQyxDQUFDO0tBd0JKO0lBdEJDLGVBQWUsQ0FBQyxLQUFZO1FBQzFCLCtEQUErRDtRQUMvRCxJQUFJLEtBQUssQ0FBQyxNQUFNLEtBQUssS0FBSyxDQUFDLGFBQWEsRUFBRSxDQUFDO1lBQ3pDLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUNsQixDQUFDO0lBQ0gsQ0FBQztJQUVELFFBQVE7UUFDTixJQUFJLENBQUMsbUJBQW1CLENBQUMsb0JBQW9CLEVBQUUsQ0FBQztJQUNsRCxDQUFDO0lBRUQsU0FBUztRQUNQLHNEQUFzRDtRQUN0RCxNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7UUFDL0IsSUFBSSxDQUFDLG1CQUFtQixDQUFDLHFCQUFxQixDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3JELElBQUksQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsb0JBQW9CO0lBQ2pELENBQUM7SUFFRCw0REFBNEQ7SUFDNUQsZ0JBQWdCLENBQUMsSUFBYTtRQUM1QixJQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUM1QixDQUFDOzhHQXREVSxpQ0FBaUM7a0dBQWpDLGlDQUFpQyx1RkF2U2xDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBMERULGd2RkEzRFMsWUFBWSwwU0FBRSxpQkFBaUIsaUZBb1M3QjtRQUNWLGdDQUFnQztTQUNqQzs7MkZBRVUsaUNBQWlDO2tCQTNTN0MsU0FBUzsrQkFDRSw2QkFBNkIsY0FDM0IsSUFBSSxXQUNQLENBQUMsWUFBWSxFQUFFLGlCQUFpQixDQUFDLFlBQ2hDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBMERULGNBeU9XO29CQUNWLGdDQUFnQztxQkFDakMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIHNpZ25hbCwgY29tcHV0ZWQsIGluamVjdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xyXG5pbXBvcnQgeyBDaWRlSWNvbkNvbXBvbmVudCB9IGZyb20gJy4uLy4uL2VsZW1lbnRzL2ljb24vaWNvbi5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBDb25maXJtYXRpb25TZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvY29uZmlybWF0aW9uLnNlcnZpY2UnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdjaWRlLWVsZS1jb25maXJtYXRpb24tbW9kYWwnLFxyXG4gIHN0YW5kYWxvbmU6IHRydWUsXHJcbiAgaW1wb3J0czogW0NvbW1vbk1vZHVsZSwgQ2lkZUljb25Db21wb25lbnRdLFxyXG4gIHRlbXBsYXRlOiBgXHJcbiAgICA8IS0tIEJhY2tkcm9wIC0tPlxyXG4gICAgPGRpdiBcclxuICAgICAgKm5nSWY9XCJoYXNBY3RpdmVDb25maXJtYXRpb24oKVwiXHJcbiAgICAgIGNsYXNzPVwiY29uZmlybWF0aW9uLWJhY2tkcm9wXCJcclxuICAgICAgKGNsaWNrKT1cIm9uQmFja2Ryb3BDbGljaygkZXZlbnQpXCJcclxuICAgICAgW0BiYWNrZHJvcEFuaW1hdGlvbl0+XHJcbiAgICA8L2Rpdj5cclxuXHJcbiAgICA8IS0tIE1vZGFsIC0tPlxyXG4gICAgPGRpdiBcclxuICAgICAgKm5nSWY9XCJoYXNBY3RpdmVDb25maXJtYXRpb24oKVwiXHJcbiAgICAgIGNsYXNzPVwiY29uZmlybWF0aW9uLW1vZGFsXCJcclxuICAgICAgW0Btb2RhbEFuaW1hdGlvbl0+XHJcbiAgICAgIFxyXG4gICAgICA8IS0tIE1vZGFsIEhlYWRlciAtLT5cclxuICAgICAgPGRpdiBjbGFzcz1cIm1vZGFsLWhlYWRlclwiIFtjbGFzc109XCJnZXRIZWFkZXJDbGFzcygpXCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImhlYWRlci1jb250ZW50XCI+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiaWNvbi1jb250YWluZXJcIiBbY2xhc3NdPVwiZ2V0SWNvbkNsYXNzKClcIj5cclxuICAgICAgICAgICAgPGNpZGUtZWxlLWljb24gXHJcbiAgICAgICAgICAgICAgc2l6ZT1cImxnXCI+XHJcbiAgICAgICAgICAgICAge3sgY3VycmVudFJlcXVlc3QoKT8uaWNvbiB8fCAnaW5mbycgfX1cclxuICAgICAgICAgICAgPC9jaWRlLWVsZS1pY29uPlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8aDIgY2xhc3M9XCJtb2RhbC10aXRsZVwiPnt7IGN1cnJlbnRSZXF1ZXN0KCk/LnRpdGxlIH19PC9oMj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcblxyXG4gICAgICA8IS0tIE1vZGFsIEJvZHkgLS0+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJtb2RhbC1ib2R5XCI+XHJcbiAgICAgICAgPHAgY2xhc3M9XCJtb2RhbC1tZXNzYWdlXCI+e3sgY3VycmVudFJlcXVlc3QoKT8ubWVzc2FnZSB9fTwvcD5cclxuICAgICAgICBcclxuICAgICAgICA8IS0tIEN1c3RvbSBUZW1wbGF0ZSBTbG90IC0tPlxyXG4gICAgICAgIDxkaXYgKm5nSWY9XCJjdXJyZW50UmVxdWVzdCgpPy5jdXN0b21UZW1wbGF0ZVwiIGNsYXNzPVwiY3VzdG9tLWNvbnRlbnRcIj5cclxuICAgICAgICAgIDxuZy1jb250YWluZXIgXHJcbiAgICAgICAgICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwiY3VycmVudFJlcXVlc3QoKT8uY3VzdG9tVGVtcGxhdGUhOyBjb250ZXh0OiB7ICRpbXBsaWNpdDogY3VzdG9tRGF0YSB9XCI+XHJcbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcblxyXG4gICAgICA8IS0tIE1vZGFsIEZvb3RlciAtLT5cclxuICAgICAgPGRpdiBjbGFzcz1cIm1vZGFsLWZvb3RlclwiPlxyXG4gICAgICAgIDxidXR0b24gXHJcbiAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcclxuICAgICAgICAgIGNsYXNzPVwiYnRuIGJ0bi1zZWNvbmRhcnlcIlxyXG4gICAgICAgICAgKGNsaWNrKT1cIm9uQ2FuY2VsKClcIj5cclxuICAgICAgICAgIHt7IGN1cnJlbnRSZXF1ZXN0KCk/LmNhbmNlbFRleHQgfHwgJ0NhbmNlbCcgfX1cclxuICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICBcclxuICAgICAgICA8YnV0dG9uIFxyXG4gICAgICAgICAgdHlwZT1cImJ1dHRvblwiXHJcbiAgICAgICAgICBjbGFzcz1cImJ0blwiXHJcbiAgICAgICAgICBbY2xhc3NdPVwiZ2V0Q29uZmlybUJ1dHRvbkNsYXNzKClcIlxyXG4gICAgICAgICAgKGNsaWNrKT1cIm9uQ29uZmlybSgpXCI+XHJcbiAgICAgICAgICB7eyBjdXJyZW50UmVxdWVzdCgpPy5jb25maXJtVGV4dCB8fCAnQ29uZmlybScgfX1cclxuICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuICBgLFxyXG4gIHN0eWxlczogW2BcclxuICAgIC5jb25maXJtYXRpb24tYmFja2Ryb3Age1xyXG4gICAgICBwb3NpdGlvbjogZml4ZWQ7XHJcbiAgICAgIHRvcDogMDtcclxuICAgICAgbGVmdDogMDtcclxuICAgICAgcmlnaHQ6IDA7XHJcbiAgICAgIGJvdHRvbTogMDtcclxuICAgICAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSgwLCAwLCAwLCAwLjUpO1xyXG4gICAgICBiYWNrZHJvcC1maWx0ZXI6IGJsdXIoNHB4KTtcclxuICAgICAgei1pbmRleDogMTAwMDA7XHJcbiAgICAgIGRpc3BsYXk6IGZsZXg7XHJcbiAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XHJcbiAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyO1xyXG4gICAgfVxyXG5cclxuICAgIC5jb25maXJtYXRpb24tbW9kYWwge1xyXG4gICAgICBiYWNrZ3JvdW5kOiB3aGl0ZTtcclxuICAgICAgYm9yZGVyLXJhZGl1czogMTJweDtcclxuICAgICAgYm94LXNoYWRvdzogMCAyMHB4IDI1cHggLTVweCByZ2JhKDAsIDAsIDAsIDAuMSksIDAgMTBweCAxMHB4IC01cHggcmdiYSgwLCAwLCAwLCAwLjA0KTtcclxuICAgICAgbWF4LXdpZHRoOiA0ODBweDtcclxuICAgICAgd2lkdGg6IDkwJTtcclxuICAgICAgbWF4LWhlaWdodDogOTB2aDtcclxuICAgICAgb3ZlcmZsb3c6IGhpZGRlbjtcclxuICAgICAgei1pbmRleDogMTAwMDE7XHJcbiAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcclxuICAgIH1cclxuXHJcbiAgICAubW9kYWwtaGVhZGVyIHtcclxuICAgICAgcGFkZGluZzogMjRweCAyNHB4IDE2cHg7XHJcbiAgICAgIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAjZTVlN2ViO1xyXG4gICAgfVxyXG5cclxuICAgIC5oZWFkZXItY29udGVudCB7XHJcbiAgICAgIGRpc3BsYXk6IGZsZXg7XHJcbiAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XHJcbiAgICAgIGdhcDogMTZweDtcclxuICAgIH1cclxuXHJcbiAgICAuaWNvbi1jb250YWluZXIge1xyXG4gICAgICB3aWR0aDogNDhweDtcclxuICAgICAgaGVpZ2h0OiA0OHB4O1xyXG4gICAgICBib3JkZXItcmFkaXVzOiA1MCU7XHJcbiAgICAgIGRpc3BsYXk6IGZsZXg7XHJcbiAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XHJcbiAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyO1xyXG4gICAgICBmbGV4LXNocmluazogMDtcclxuICAgIH1cclxuXHJcbiAgICAuaWNvbi1jb250YWluZXIuZGFuZ2VyIHtcclxuICAgICAgYmFja2dyb3VuZC1jb2xvcjogI2ZlZjJmMjtcclxuICAgICAgY29sb3I6ICNkYzI2MjY7XHJcbiAgICB9XHJcblxyXG4gICAgLmljb24tY29udGFpbmVyLndhcm5pbmcge1xyXG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmYmViO1xyXG4gICAgICBjb2xvcjogI2Q5NzcwNjtcclxuICAgIH1cclxuXHJcbiAgICAuaWNvbi1jb250YWluZXIuaW5mbyB7XHJcbiAgICAgIGJhY2tncm91bmQtY29sb3I6ICNlZmY2ZmY7XHJcbiAgICAgIGNvbG9yOiAjMjU2M2ViO1xyXG4gICAgfVxyXG5cclxuICAgIC5pY29uLWNvbnRhaW5lci5zdWNjZXNzIHtcclxuICAgICAgYmFja2dyb3VuZC1jb2xvcjogI2YwZmRmNDtcclxuICAgICAgY29sb3I6ICMxNmEzNGE7XHJcbiAgICB9XHJcblxyXG4gICAgLm1vZGFsLXRpdGxlIHtcclxuICAgICAgbWFyZ2luOiAwO1xyXG4gICAgICBmb250LXNpemU6IDIwcHg7XHJcbiAgICAgIGZvbnQtd2VpZ2h0OiA2MDA7XHJcbiAgICAgIGNvbG9yOiAjMTExODI3O1xyXG4gICAgICBsaW5lLWhlaWdodDogMS40O1xyXG4gICAgfVxyXG5cclxuICAgIC5tb2RhbC1ib2R5IHtcclxuICAgICAgcGFkZGluZzogMTZweCAyNHB4IDI0cHg7XHJcbiAgICB9XHJcblxyXG4gICAgLm1vZGFsLW1lc3NhZ2Uge1xyXG4gICAgICBtYXJnaW46IDAgMCAxNnB4IDA7XHJcbiAgICAgIGZvbnQtc2l6ZTogMTZweDtcclxuICAgICAgbGluZS1oZWlnaHQ6IDEuNTtcclxuICAgICAgY29sb3I6ICM2YjcyODA7XHJcbiAgICB9XHJcblxyXG4gICAgLmN1c3RvbS1jb250ZW50IHtcclxuICAgICAgbWFyZ2luLXRvcDogMTZweDtcclxuICAgICAgcGFkZGluZy10b3A6IDE2cHg7XHJcbiAgICAgIGJvcmRlci10b3A6IDFweCBzb2xpZCAjZjNmNGY2O1xyXG4gICAgfVxyXG5cclxuICAgIC5tb2RhbC1mb290ZXIge1xyXG4gICAgICBwYWRkaW5nOiAxNnB4IDI0cHggMjRweDtcclxuICAgICAgZGlzcGxheTogZmxleDtcclxuICAgICAgZ2FwOiAxMnB4O1xyXG4gICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGZsZXgtZW5kO1xyXG4gICAgICBib3JkZXItdG9wOiAxcHggc29saWQgI2U1ZTdlYjtcclxuICAgIH1cclxuXHJcbiAgICAuYnRuIHtcclxuICAgICAgcGFkZGluZzogMTBweCAyMHB4O1xyXG4gICAgICBib3JkZXItcmFkaXVzOiA4cHg7XHJcbiAgICAgIGZvbnQtc2l6ZTogMTRweDtcclxuICAgICAgZm9udC13ZWlnaHQ6IDUwMDtcclxuICAgICAgYm9yZGVyOiBub25lO1xyXG4gICAgICBjdXJzb3I6IHBvaW50ZXI7XHJcbiAgICAgIHRyYW5zaXRpb246IGFsbCAwLjJzIGVhc2U7XHJcbiAgICAgIG1pbi13aWR0aDogODBweDtcclxuICAgIH1cclxuXHJcbiAgICAuYnRuOmhvdmVyIHtcclxuICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKC0xcHgpO1xyXG4gICAgfVxyXG5cclxuICAgIC5idG46YWN0aXZlIHtcclxuICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDApO1xyXG4gICAgfVxyXG5cclxuICAgIC5idG4tc2Vjb25kYXJ5IHtcclxuICAgICAgYmFja2dyb3VuZC1jb2xvcjogI2Y5ZmFmYjtcclxuICAgICAgY29sb3I6ICMzNzQxNTE7XHJcbiAgICAgIGJvcmRlcjogMXB4IHNvbGlkICNkMWQ1ZGI7XHJcbiAgICB9XHJcblxyXG4gICAgLmJ0bi1zZWNvbmRhcnk6aG92ZXIge1xyXG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZjNmNGY2O1xyXG4gICAgICBib3JkZXItY29sb3I6ICM5Y2EzYWY7XHJcbiAgICB9XHJcblxyXG4gICAgLmJ0bi1wcmltYXJ5IHtcclxuICAgICAgYmFja2dyb3VuZC1jb2xvcjogIzI1NjNlYjtcclxuICAgICAgY29sb3I6IHdoaXRlO1xyXG4gICAgfVxyXG5cclxuICAgIC5idG4tcHJpbWFyeTpob3ZlciB7XHJcbiAgICAgIGJhY2tncm91bmQtY29sb3I6ICMxZDRlZDg7XHJcbiAgICB9XHJcblxyXG4gICAgLmJ0bi1kYW5nZXIge1xyXG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZGMyNjI2O1xyXG4gICAgICBjb2xvcjogd2hpdGU7XHJcbiAgICB9XHJcblxyXG4gICAgLmJ0bi1kYW5nZXI6aG92ZXIge1xyXG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjYjkxYzFjO1xyXG4gICAgfVxyXG5cclxuICAgIC5idG4td2FybmluZyB7XHJcbiAgICAgIGJhY2tncm91bmQtY29sb3I6ICNkOTc3MDY7XHJcbiAgICAgIGNvbG9yOiB3aGl0ZTtcclxuICAgIH1cclxuXHJcbiAgICAuYnRuLXdhcm5pbmc6aG92ZXIge1xyXG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjYjQ1MzA5O1xyXG4gICAgfVxyXG5cclxuICAgIC5idG4tc3VjY2VzcyB7XHJcbiAgICAgIGJhY2tncm91bmQtY29sb3I6ICMxNmEzNGE7XHJcbiAgICAgIGNvbG9yOiB3aGl0ZTtcclxuICAgIH1cclxuXHJcbiAgICAuYnRuLXN1Y2Nlc3M6aG92ZXIge1xyXG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjMTU4MDNkO1xyXG4gICAgfVxyXG5cclxuICAgIC8qIFJlc3BvbnNpdmUgRGVzaWduICovXHJcbiAgICBAbWVkaWEgKG1heC13aWR0aDogNjQwcHgpIHtcclxuICAgICAgLmNvbmZpcm1hdGlvbi1tb2RhbCB7XHJcbiAgICAgICAgd2lkdGg6IDk1JTtcclxuICAgICAgICBtYXJnaW46IDIwcHg7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIC5tb2RhbC1oZWFkZXIge1xyXG4gICAgICAgIHBhZGRpbmc6IDIwcHggMjBweCAxMnB4O1xyXG4gICAgICB9XHJcblxyXG4gICAgICAubW9kYWwtYm9keSB7XHJcbiAgICAgICAgcGFkZGluZzogMTJweCAyMHB4IDIwcHg7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIC5tb2RhbC1mb290ZXIge1xyXG4gICAgICAgIHBhZGRpbmc6IDEycHggMjBweCAyMHB4O1xyXG4gICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW4tcmV2ZXJzZTtcclxuICAgICAgfVxyXG5cclxuICAgICAgLmJ0biB7XHJcbiAgICAgICAgd2lkdGg6IDEwMCU7XHJcbiAgICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIC5oZWFkZXItY29udGVudCB7XHJcbiAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcclxuICAgICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XHJcbiAgICAgICAgZ2FwOiAxMnB4O1xyXG4gICAgICB9XHJcblxyXG4gICAgICAubW9kYWwtdGl0bGUge1xyXG4gICAgICAgIGZvbnQtc2l6ZTogMThweDtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8qIEZvY3VzIHN0eWxlcyBmb3IgYWNjZXNzaWJpbGl0eSAqL1xyXG4gICAgLmJ0bjpmb2N1cyB7XHJcbiAgICAgIG91dGxpbmU6IDJweCBzb2xpZCAjMjU2M2ViO1xyXG4gICAgICBvdXRsaW5lLW9mZnNldDogMnB4O1xyXG4gICAgfVxyXG5cclxuICAgIC8qIEFuaW1hdGlvbiBjbGFzc2VzICovXHJcbiAgICAubW9kYWwtZW50ZXIge1xyXG4gICAgICBvcGFjaXR5OiAwO1xyXG4gICAgICB0cmFuc2Zvcm06IHNjYWxlKDAuOTUpIHRyYW5zbGF0ZVkoLTEwcHgpO1xyXG4gICAgfVxyXG5cclxuICAgIC5tb2RhbC1lbnRlci1hY3RpdmUge1xyXG4gICAgICBvcGFjaXR5OiAxO1xyXG4gICAgICB0cmFuc2Zvcm06IHNjYWxlKDEpIHRyYW5zbGF0ZVkoMCk7XHJcbiAgICAgIHRyYW5zaXRpb246IGFsbCAwLjJzIGVhc2Utb3V0O1xyXG4gICAgfVxyXG5cclxuICAgIC5tb2RhbC1leGl0IHtcclxuICAgICAgb3BhY2l0eTogMTtcclxuICAgICAgdHJhbnNmb3JtOiBzY2FsZSgxKSB0cmFuc2xhdGVZKDApO1xyXG4gICAgfVxyXG5cclxuICAgIC5tb2RhbC1leGl0LWFjdGl2ZSB7XHJcbiAgICAgIG9wYWNpdHk6IDA7XHJcbiAgICAgIHRyYW5zZm9ybTogc2NhbGUoMC45NSkgdHJhbnNsYXRlWSgtMTBweCk7XHJcbiAgICAgIHRyYW5zaXRpb246IGFsbCAwLjE1cyBlYXNlLWluO1xyXG4gICAgfVxyXG4gIGBdLFxyXG4gIGFuaW1hdGlvbnM6IFtcclxuICAgIC8vIEFkZCBhbmltYXRpb25zIGhlcmUgaWYgbmVlZGVkXHJcbiAgXVxyXG59KVxyXG5leHBvcnQgY2xhc3MgQ2lkZUVsZUNvbmZpcm1hdGlvbk1vZGFsQ29tcG9uZW50IHtcclxuICBwcml2YXRlIGNvbmZpcm1hdGlvblNlcnZpY2UgPSBpbmplY3QoQ29uZmlybWF0aW9uU2VydmljZSk7XHJcblxyXG4gIC8vIFNpZ25hbHNcclxuICBoYXNBY3RpdmVDb25maXJtYXRpb24gPSB0aGlzLmNvbmZpcm1hdGlvblNlcnZpY2UuaGFzQWN0aXZlQ29uZmlybWF0aW9uO1xyXG4gIGN1cnJlbnRSZXF1ZXN0ID0gdGhpcy5jb25maXJtYXRpb25TZXJ2aWNlLmdldEN1cnJlbnRSZXF1ZXN0KCk7XHJcbiAgY3VzdG9tRGF0YSA9IHNpZ25hbDx1bmtub3duPihudWxsKTtcclxuXHJcbiAgLy8gQ29tcHV0ZWRcclxuICBnZXRIZWFkZXJDbGFzcyA9IGNvbXB1dGVkKCgpID0+IHtcclxuICAgIGNvbnN0IHJlcXVlc3QgPSB0aGlzLmN1cnJlbnRSZXF1ZXN0KCk7XHJcbiAgICByZXR1cm4gcmVxdWVzdCA/IGBoZWFkZXItJHtyZXF1ZXN0LnR5cGV9YCA6ICcnO1xyXG4gIH0pO1xyXG5cclxuICBnZXRJY29uQ2xhc3MgPSBjb21wdXRlZCgoKSA9PiB7XHJcbiAgICBjb25zdCByZXF1ZXN0ID0gdGhpcy5jdXJyZW50UmVxdWVzdCgpO1xyXG4gICAgcmV0dXJuIHJlcXVlc3QgPyByZXF1ZXN0LnR5cGUgOiAnaW5mbyc7XHJcbiAgfSk7XHJcblxyXG4gIGdldENvbmZpcm1CdXR0b25DbGFzcyA9IGNvbXB1dGVkKCgpID0+IHtcclxuICAgIGNvbnN0IHJlcXVlc3QgPSB0aGlzLmN1cnJlbnRSZXF1ZXN0KCk7XHJcbiAgICBpZiAoIXJlcXVlc3QpIHJldHVybiAnYnRuLXByaW1hcnknO1xyXG4gICAgXHJcbiAgICBjb25zdCBjbGFzc01hcCA9IHtcclxuICAgICAgZGFuZ2VyOiAnYnRuLWRhbmdlcicsXHJcbiAgICAgIHdhcm5pbmc6ICdidG4td2FybmluZycsXHJcbiAgICAgIGluZm86ICdidG4tcHJpbWFyeScsXHJcbiAgICAgIHN1Y2Nlc3M6ICdidG4tc3VjY2VzcydcclxuICAgIH07XHJcbiAgICBcclxuICAgIHJldHVybiBjbGFzc01hcFtyZXF1ZXN0LnR5cGVdIHx8ICdidG4tcHJpbWFyeSc7XHJcbiAgfSk7XHJcblxyXG4gIG9uQmFja2Ryb3BDbGljayhldmVudDogRXZlbnQpOiB2b2lkIHtcclxuICAgIC8vIE9ubHkgY2xvc2UgaWYgY2xpY2tpbmcgdGhlIGJhY2tkcm9wIGl0c2VsZiwgbm90IGl0cyBjaGlsZHJlblxyXG4gICAgaWYgKGV2ZW50LnRhcmdldCA9PT0gZXZlbnQuY3VycmVudFRhcmdldCkge1xyXG4gICAgICB0aGlzLm9uQ2FuY2VsKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBvbkNhbmNlbCgpOiB2b2lkIHtcclxuICAgIHRoaXMuY29uZmlybWF0aW9uU2VydmljZS5jYW5jZWxDdXJyZW50UmVxdWVzdCgpO1xyXG4gIH1cclxuXHJcbiAgb25Db25maXJtKCk6IHZvaWQge1xyXG4gICAgLy8gSWYgdGhlcmUncyBjdXN0b20gZGF0YSwgcGFzcyBpdCB0byB0aGUgY29uZmlybWF0aW9uXHJcbiAgICBjb25zdCBkYXRhID0gdGhpcy5jdXN0b21EYXRhKCk7XHJcbiAgICB0aGlzLmNvbmZpcm1hdGlvblNlcnZpY2UuY29uZmlybUN1cnJlbnRSZXF1ZXN0KGRhdGEpO1xyXG4gICAgdGhpcy5jdXN0b21EYXRhLnNldChudWxsKTsgLy8gUmVzZXQgY3VzdG9tIGRhdGFcclxuICB9XHJcblxyXG4gIC8vIE1ldGhvZCB0byB1cGRhdGUgY3VzdG9tIGRhdGEgKGNhbGxlZCBieSBjdXN0b20gdGVtcGxhdGVzKVxyXG4gIHVwZGF0ZUN1c3RvbURhdGEoZGF0YTogdW5rbm93bik6IHZvaWQge1xyXG4gICAgdGhpcy5jdXN0b21EYXRhLnNldChkYXRhKTtcclxuICB9XHJcbn1cclxuIl19
|