@bnsights/bbsf-controls 1.0.192 → 1.0.194-beta.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.
- package/README.md +338 -1
- package/esm2022/lib/Shared/Components/app-base-component.mjs +3 -3
- package/esm2022/lib/Shared/Components/ng-tag-input.mjs +12 -7
- package/esm2022/lib/Shared/Directives/appPreventDoubleClick.directive.mjs +3 -2
- package/esm2022/lib/Shared/Directives/template-name.directive.mjs +4 -3
- package/esm2022/lib/Shared/Models/AutocompleteOptions.mjs +2 -2
- package/esm2022/lib/Shared/Models/DatePickerOptions.mjs +4 -4
- package/esm2022/lib/Shared/Models/DropdownOptions.mjs +2 -2
- package/esm2022/lib/Shared/Models/TagsInputOptions.mjs +2 -2
- package/esm2022/lib/Shared/Pipes/bbsf-date-time.pipe.mjs +4 -3
- package/esm2022/lib/Shared/Pipes/bbsf-date.pipe.mjs +4 -3
- package/esm2022/lib/Shared/default_intl.mjs +2 -2
- package/esm2022/lib/Shared/services/ControlUtility.mjs +2 -2
- package/esm2022/lib/Shared/services/file-upload.service.mjs +3 -3
- package/esm2022/lib/Shared/services/validationErrorMassage.service.mjs +2 -2
- package/esm2022/lib/Shared/utils/date-formatter.mjs +48 -0
- package/esm2022/lib/controls/AutocompleteTextBox/AutocompleteTextBox.component.mjs +24 -16
- package/esm2022/lib/controls/Calendar/Calendar.component.mjs +19 -12
- package/esm2022/lib/controls/CheckBox/CheckBox.component.mjs +14 -10
- package/esm2022/lib/controls/ConfirmationModal/ConfirmationModal.component.mjs +8 -5
- package/esm2022/lib/controls/DateTimePicker/DateTimePicker.component.mjs +21 -14
- package/esm2022/lib/controls/DropdownList/DropdownList.component.mjs +12 -6
- package/esm2022/lib/controls/FileUpload/FileUpload.component.mjs +15 -7
- package/esm2022/lib/controls/Form/Form.component.mjs +22 -6
- package/esm2022/lib/controls/HtmlEditor/HtmlEditor.component.mjs +14 -9
- package/esm2022/lib/controls/ImageUpload/ImageUpload.component.mjs +17 -9
- package/esm2022/lib/controls/MapAutoComplete/MapAutoComplete.component.mjs +22 -13
- package/esm2022/lib/controls/MarkdownEditor/markdown-editor.component.mjs +16 -8
- package/esm2022/lib/controls/MultiLingualHtmlEditor/MultiLingualHtmlEditor.component.mjs +14 -9
- package/esm2022/lib/controls/MultiLingualTextArea/MultiLingualTextArea.component.mjs +12 -7
- package/esm2022/lib/controls/MultiLingualTextBox/MultiLingualTextBox.component.mjs +18 -12
- package/esm2022/lib/controls/Paging/JwPagination.component.mjs +8 -4
- package/esm2022/lib/controls/Paging/Paging.component.mjs +25 -12
- package/esm2022/lib/controls/Phone/Phone.component.mjs +14 -9
- package/esm2022/lib/controls/ProfileImageUploader/ProfileImageUploader.component.mjs +17 -9
- package/esm2022/lib/controls/RadioButton/RadioButton.component.mjs +10 -6
- package/esm2022/lib/controls/Recaptcha/Recaptcha.component.mjs +13 -14
- package/esm2022/lib/controls/Repeater/repeater/repeater.component.mjs +13 -7
- package/esm2022/lib/controls/Repeater/repeater-field-builder/repeater-field-builder.component.mjs +6 -4
- package/esm2022/lib/controls/Repeater/repeater-item-field/repeater-item-field.component.mjs +5 -4
- package/esm2022/lib/controls/Repeater/repeater-table/repeater-table.component.mjs +13 -7
- package/esm2022/lib/controls/TagsInput/TagsInput.component.mjs +19 -14
- package/esm2022/lib/controls/TextArea/TextArea.component.mjs +20 -12
- package/esm2022/lib/controls/TextBox/TextBox.component.mjs +16 -10
- package/esm2022/lib/controls/Toggleslide/Toggleslide.component.mjs +13 -7
- package/esm2022/lib/controls/bbsf-controls.module.mjs +70 -333
- package/esm2022/lib/controls/page-header-component/page-header-component.component.mjs +15 -11
- package/esm2022/lib/modules/bbsf-core.module.mjs +210 -0
- package/esm2022/lib/modules/bbsf-datetime.module.mjs +90 -0
- package/esm2022/lib/modules/bbsf-dropdown.module.mjs +57 -0
- package/esm2022/lib/modules/bbsf-editors.module.mjs +97 -0
- package/esm2022/lib/modules/bbsf-forms-basic.module.mjs +79 -0
- package/esm2022/lib/modules/bbsf-multilingual.module.mjs +60 -0
- package/esm2022/lib/modules/bbsf-phone.module.mjs +57 -0
- package/esm2022/lib/modules/bbsf-specialized.module.mjs +160 -0
- package/esm2022/lib/modules/bbsf-uploads.module.mjs +106 -0
- package/esm2022/lib/modules/bbsf-utility.module.mjs +103 -0
- package/esm2022/public-api.mjs +38 -2
- package/fesm2022/bnsights-bbsf-controls.mjs +8670 -7747
- package/fesm2022/bnsights-bbsf-controls.mjs.map +1 -1
- package/lib/Shared/Components/app-base-component.d.ts +2 -2
- package/lib/Shared/Components/ng-tag-input.d.ts +2 -3
- package/lib/Shared/Directives/appPreventDoubleClick.directive.d.ts +1 -1
- package/lib/Shared/Directives/template-name.directive.d.ts +1 -1
- package/lib/Shared/Pipes/bbsf-date-time.pipe.d.ts +1 -1
- package/lib/Shared/Pipes/bbsf-date.pipe.d.ts +1 -1
- package/lib/Shared/default_intl.d.ts +1 -1
- package/lib/Shared/services/ControlUtility.d.ts +1 -1
- package/lib/Shared/services/file-upload.service.d.ts +1 -1
- package/lib/Shared/services/validationErrorMassage.service.d.ts +1 -1
- package/lib/Shared/utils/date-formatter.d.ts +23 -0
- package/lib/controls/AutocompleteTextBox/AutocompleteTextBox.component.d.ts +5 -4
- package/lib/controls/Calendar/Calendar.component.d.ts +5 -4
- package/lib/controls/CheckBox/CheckBox.component.d.ts +3 -2
- package/lib/controls/ConfirmationModal/ConfirmationModal.component.d.ts +2 -2
- package/lib/controls/DateTimePicker/DateTimePicker.component.d.ts +3 -3
- package/lib/controls/DropdownList/DropdownList.component.d.ts +2 -2
- package/lib/controls/FileUpload/FileUpload.component.d.ts +3 -4
- package/lib/controls/Form/Form.component.d.ts +2 -2
- package/lib/controls/HtmlEditor/HtmlEditor.component.d.ts +3 -3
- package/lib/controls/ImageUpload/ImageUpload.component.d.ts +4 -4
- package/lib/controls/MapAutoComplete/MapAutoComplete.component.d.ts +5 -4
- package/lib/controls/MarkdownEditor/markdown-editor.component.d.ts +2 -2
- package/lib/controls/MultiLingualHtmlEditor/MultiLingualHtmlEditor.component.d.ts +3 -3
- package/lib/controls/MultiLingualTextArea/MultiLingualTextArea.component.d.ts +2 -2
- package/lib/controls/MultiLingualTextBox/MultiLingualTextBox.component.d.ts +3 -2
- package/lib/controls/Paging/JwPagination.component.d.ts +1 -1
- package/lib/controls/Paging/Paging.component.d.ts +5 -4
- package/lib/controls/Phone/Phone.component.d.ts +2 -2
- package/lib/controls/ProfileImageUploader/ProfileImageUploader.component.d.ts +3 -3
- package/lib/controls/RadioButton/RadioButton.component.d.ts +2 -2
- package/lib/controls/Recaptcha/Recaptcha.component.d.ts +3 -2
- package/lib/controls/Repeater/repeater/repeater.component.d.ts +1 -1
- package/lib/controls/Repeater/repeater-field-builder/repeater-field-builder.component.d.ts +1 -1
- package/lib/controls/Repeater/repeater-item-field/repeater-item-field.component.d.ts +1 -1
- package/lib/controls/Repeater/repeater-table/repeater-table.component.d.ts +2 -2
- package/lib/controls/TagsInput/TagsInput.component.d.ts +5 -4
- package/lib/controls/TextArea/TextArea.component.d.ts +3 -2
- package/lib/controls/TextBox/TextBox.component.d.ts +2 -2
- package/lib/controls/Toggleslide/Toggleslide.component.d.ts +2 -2
- package/lib/controls/bbsf-controls.module.d.ts +35 -66
- package/lib/controls/page-header-component/page-header-component.component.d.ts +2 -2
- package/lib/modules/bbsf-core.module.d.ts +90 -0
- package/lib/modules/bbsf-datetime.module.d.ts +41 -0
- package/lib/modules/bbsf-dropdown.module.d.ts +33 -0
- package/lib/modules/bbsf-editors.module.d.ts +47 -0
- package/lib/modules/bbsf-forms-basic.module.d.ts +35 -0
- package/lib/modules/bbsf-multilingual.module.d.ts +31 -0
- package/lib/modules/bbsf-phone.module.d.ts +33 -0
- package/lib/modules/bbsf-specialized.module.d.ts +63 -0
- package/lib/modules/bbsf-uploads.module.d.ts +50 -0
- package/lib/modules/bbsf-utility.module.d.ts +45 -0
- package/package.json +2 -13
- package/public-api.d.ts +12 -0
package/README.md
CHANGED
|
@@ -4,9 +4,346 @@ BBSF Controls package is part of BBSF 3 packages. It has all the form controls t
|
|
|
4
4
|
|
|
5
5
|
For more info please visit [BBSF Controls documenation](https://bbsfadmin.bnsights.com/controls) or [BBSF documentation](https://bnsightsprojects.visualstudio.com/BBSF%203/_wiki/wikis/BBSF-3.wiki/65/BBSF-Documentation)
|
|
6
6
|
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
## 🚀 NEW! Tree-Shakable Granular Modules (v2.0+)
|
|
10
|
+
|
|
11
|
+
The package now supports **true tree-shaking** through granular modules for optimal bundle size!
|
|
12
|
+
|
|
13
|
+
### 📦 Available Modules
|
|
14
|
+
|
|
15
|
+
#### ✨ Granular Modules (RECOMMENDED - Best Bundle Optimization)
|
|
16
|
+
|
|
17
|
+
| Module | Gzipped Size | Contains | Main Dependencies |
|
|
18
|
+
|--------|--------------|----------|-------------------|
|
|
19
|
+
| **BBSFFormsBasicModule** | ~30 KB | TextBox, TextArea, CheckBox, RadioButton, Toggle | ngx-mask, Material slide-toggle |
|
|
20
|
+
| **BBSFDropdownModule** | ~130 KB | DropdownList | ng-select (~100 KB) |
|
|
21
|
+
| **BBSFDateTimeModule** | ~220 KB | DateTimePicker + Date pipes | Owl DateTime (~200 KB) |
|
|
22
|
+
| **BBSFPhoneModule** | ~90 KB | Phone input | intl-tel-input (~80 KB) |
|
|
23
|
+
| **BBSFUtilityModule** | ~80 KB | Form, Modals, Paging, PageHeader, Recaptcha | SweetAlert2, NgBootstrap |
|
|
24
|
+
| **BBSFMultilingualModule** | ~15 KB | MultiLingualTextBox, MultiLingualTextArea | None (lightweight) |
|
|
25
|
+
|
|
26
|
+
#### 📚 Legacy Grouped Modules (For Backward Compatibility)
|
|
27
|
+
|
|
28
|
+
| Module | Size | Contains |
|
|
29
|
+
|--------|------|----------|
|
|
30
|
+
| **BBSFCoreModule** ⚠️ | ~650-800 KB | ALL modules above (deprecated, use granular modules instead) |
|
|
31
|
+
| **BBSFEditorsModule** | ~800 KB | HtmlEditor, MarkdownEditor, MultiLingualHtmlEditor |
|
|
32
|
+
| **BBSFUploadsModule** | ~360 KB | FileUpload, ImageUpload, ProfileImageUploader |
|
|
33
|
+
| **BBSFSpecializedModule** | ~300 KB | Calendar, MapAutoComplete, AutocompleteTextBox, TagsInput, Repeater |
|
|
34
|
+
| **BBSFControlsModule** ⚠️ | ~2+ MB | Everything (deprecated) |
|
|
35
|
+
|
|
36
|
+
---
|
|
37
|
+
|
|
38
|
+
### 📖 Usage Examples
|
|
39
|
+
|
|
40
|
+
#### ✅ **Best Practice: Use Granular Modules**
|
|
41
|
+
|
|
42
|
+
```typescript
|
|
43
|
+
// Example 1: Basic form with text inputs only (~30 KB)
|
|
44
|
+
import { BBSFFormsBasicModule } from '@bnsights/bbsf-controls';
|
|
45
|
+
|
|
46
|
+
@NgModule({
|
|
47
|
+
imports: [BBSFFormsBasicModule]
|
|
48
|
+
})
|
|
49
|
+
export class SimpleFormModule { }
|
|
50
|
+
```
|
|
51
|
+
|
|
52
|
+
```typescript
|
|
53
|
+
// Example 2: Form with dropdown (~160 KB - 75% smaller than BBSFCoreModule!)
|
|
54
|
+
import {
|
|
55
|
+
BBSFFormsBasicModule, // ~30 KB
|
|
56
|
+
BBSFDropdownModule // ~130 KB
|
|
57
|
+
} from '@bnsights/bbsf-controls';
|
|
58
|
+
|
|
59
|
+
@NgModule({
|
|
60
|
+
imports: [BBSFFormsBasicModule, BBSFDropdownModule]
|
|
61
|
+
})
|
|
62
|
+
export class FormWithDropdownModule { }
|
|
63
|
+
```
|
|
64
|
+
|
|
65
|
+
```typescript
|
|
66
|
+
// Example 3: Form with date picker (~250 KB - 60% smaller!)
|
|
67
|
+
import {
|
|
68
|
+
BBSFFormsBasicModule, // ~30 KB
|
|
69
|
+
BBSFDateTimeModule // ~220 KB
|
|
70
|
+
} from '@bnsights/bbsf-controls';
|
|
71
|
+
|
|
72
|
+
@NgModule({
|
|
73
|
+
imports: [BBSFFormsBasicModule, BBSFDateTimeModule]
|
|
74
|
+
})
|
|
75
|
+
export class FormWithDateModule { }
|
|
76
|
+
```
|
|
77
|
+
|
|
78
|
+
```typescript
|
|
79
|
+
// Example 4: Complex form with multiple controls (~565 KB - 13% smaller)
|
|
80
|
+
import {
|
|
81
|
+
BBSFFormsBasicModule, // ~30 KB - TextBox, CheckBox, etc.
|
|
82
|
+
BBSFDropdownModule, // ~130 KB - Dropdown
|
|
83
|
+
BBSFDateTimeModule, // ~220 KB - Date/Time
|
|
84
|
+
BBSFPhoneModule, // ~90 KB - Phone
|
|
85
|
+
BBSFUtilityModule, // ~80 KB - Form, Modals, Paging
|
|
86
|
+
BBSFMultilingualModule // ~15 KB - Multilingual
|
|
87
|
+
} from '@bnsights/bbsf-controls';
|
|
88
|
+
|
|
89
|
+
@NgModule({
|
|
90
|
+
imports: [
|
|
91
|
+
BBSFFormsBasicModule,
|
|
92
|
+
BBSFDropdownModule,
|
|
93
|
+
BBSFDateTimeModule,
|
|
94
|
+
BBSFPhoneModule,
|
|
95
|
+
BBSFUtilityModule,
|
|
96
|
+
BBSFMultilingualModule
|
|
97
|
+
]
|
|
98
|
+
})
|
|
99
|
+
export class FullFormModule { }
|
|
100
|
+
```
|
|
101
|
+
|
|
102
|
+
```typescript
|
|
103
|
+
// Example 5: Form with rich text editor (~830 KB)
|
|
104
|
+
import {
|
|
105
|
+
BBSFFormsBasicModule,
|
|
106
|
+
BBSFEditorsModule // Rich text editors
|
|
107
|
+
} from '@bnsights/bbsf-controls';
|
|
108
|
+
|
|
109
|
+
@NgModule({
|
|
110
|
+
imports: [BBSFFormsBasicModule, BBSFEditorsModule]
|
|
111
|
+
})
|
|
112
|
+
export class ContentFormModule { }
|
|
113
|
+
```
|
|
114
|
+
|
|
115
|
+
#### ⚠️ **Legacy: Old Module Imports (Not Recommended)**
|
|
116
|
+
|
|
117
|
+
```typescript
|
|
118
|
+
// ❌ Old way 1: Loads ALL controls (~2+ MB)
|
|
119
|
+
import { BBSFControlsModule } from '@bnsights/bbsf-controls';
|
|
120
|
+
|
|
121
|
+
@NgModule({
|
|
122
|
+
imports: [BBSFControlsModule] // Don't use this!
|
|
123
|
+
})
|
|
124
|
+
```
|
|
125
|
+
|
|
126
|
+
```typescript
|
|
127
|
+
// ⚠️ Old way 2: Still loads too much (~650 KB even if you use 1 control)
|
|
128
|
+
import { BBSFCoreModule } from '@bnsights/bbsf-controls';
|
|
129
|
+
|
|
130
|
+
@NgModule({
|
|
131
|
+
imports: [BBSFCoreModule] // Use granular modules instead!
|
|
132
|
+
})
|
|
133
|
+
```
|
|
134
|
+
|
|
135
|
+
---
|
|
136
|
+
|
|
137
|
+
### 📊 Performance Benefits
|
|
138
|
+
|
|
139
|
+
#### Real-World Bundle Size Comparison
|
|
140
|
+
|
|
141
|
+
| Use Case | Old (BBSFCoreModule) | New (Granular) | Savings |
|
|
142
|
+
|----------|---------------------|----------------|---------|
|
|
143
|
+
| **Basic form only** | 650 KB | 30 KB | **95%** ⬇️ |
|
|
144
|
+
| **Form + Dropdown** | 650 KB | 160 KB | **75%** ⬇️ |
|
|
145
|
+
| **Form + Date picker** | 650 KB | 250 KB | **60%** ⬇️ |
|
|
146
|
+
| **Form + Phone** | 650 KB | 120 KB | **82%** ⬇️ |
|
|
147
|
+
| **All core controls** | 650 KB | 565 KB | **13%** ⬇️ |
|
|
148
|
+
| **+ Rich text editor** | 1450 KB | 830 KB | **43%** ⬇️ |
|
|
149
|
+
|
|
150
|
+
#### Example: Typical Application Impact
|
|
151
|
+
|
|
152
|
+
```
|
|
153
|
+
Before (using BBSFCoreModule):
|
|
154
|
+
├── TextBox ✓
|
|
155
|
+
├── Dropdown ✓
|
|
156
|
+
└── Unused: DateTimePicker ✗ (~200 KB wasted)
|
|
157
|
+
Phone ✗ (~80 KB wasted)
|
|
158
|
+
Paging ✗ (~30 KB wasted)
|
|
159
|
+
Modals ✗ (~50 KB wasted)
|
|
160
|
+
... (~290 KB wasted)
|
|
161
|
+
Total: 650 KB
|
|
162
|
+
|
|
163
|
+
After (using granular modules):
|
|
164
|
+
├── BBSFFormsBasicModule (~30 KB)
|
|
165
|
+
└── BBSFDropdownModule (~130 KB)
|
|
166
|
+
Total: 160 KB (490 KB saved! 75% reduction)
|
|
167
|
+
```
|
|
168
|
+
|
|
169
|
+
---
|
|
170
|
+
|
|
171
|
+
### 🔄 Migration Guide
|
|
172
|
+
|
|
173
|
+
#### Step 1: Identify Your Controls
|
|
174
|
+
|
|
175
|
+
Audit your application to see which controls you're actually using:
|
|
176
|
+
|
|
177
|
+
```bash
|
|
178
|
+
# Search for control usage in your codebase
|
|
179
|
+
grep -r "bbsf-textbox\|bbsf-dropdown\|bbsf-datepicker" src/
|
|
180
|
+
```
|
|
181
|
+
|
|
182
|
+
#### Step 2: Map Controls to Granular Modules
|
|
183
|
+
|
|
184
|
+
| If you use... | Import this module | Size |
|
|
185
|
+
|--------------|-------------------|------|
|
|
186
|
+
| TextBox, TextArea, CheckBox, Radio, Toggle | `BBSFFormsBasicModule` | ~30 KB |
|
|
187
|
+
| DropdownList | `BBSFDropdownModule` | ~130 KB |
|
|
188
|
+
| DateTimePicker | `BBSFDateTimeModule` | ~220 KB |
|
|
189
|
+
| Phone | `BBSFPhoneModule` | ~90 KB |
|
|
190
|
+
| Form, Modals, Paging, PageHeader | `BBSFUtilityModule` | ~80 KB |
|
|
191
|
+
| MultiLingualTextBox/TextArea | `BBSFMultilingualModule` | ~15 KB |
|
|
192
|
+
| HtmlEditor, MarkdownEditor | `BBSFEditorsModule` | ~800 KB |
|
|
193
|
+
| FileUpload, ImageUpload | `BBSFUploadsModule` | ~360 KB |
|
|
194
|
+
| Calendar, Maps, TagsInput, Repeater | `BBSFSpecializedModule` | ~300 KB |
|
|
195
|
+
|
|
196
|
+
#### Step 3: Replace Imports
|
|
197
|
+
|
|
198
|
+
**Migration Example 1: From BBSFControlsModule**
|
|
199
|
+
```typescript
|
|
200
|
+
// ❌ Before: Loading ALL controls (~2+ MB)
|
|
201
|
+
import { BBSFControlsModule } from '@bnsights/bbsf-controls';
|
|
202
|
+
|
|
203
|
+
@NgModule({
|
|
204
|
+
imports: [BBSFControlsModule]
|
|
205
|
+
})
|
|
206
|
+
export class UserFormModule { }
|
|
207
|
+
|
|
208
|
+
// ✅ After: Only load what you need (~160 KB - 92% smaller!)
|
|
209
|
+
import {
|
|
210
|
+
BBSFFormsBasicModule, // You use TextBox, CheckBox
|
|
211
|
+
BBSFDropdownModule // You use Dropdown
|
|
212
|
+
} from '@bnsights/bbsf-controls';
|
|
213
|
+
|
|
214
|
+
@NgModule({
|
|
215
|
+
imports: [
|
|
216
|
+
BBSFFormsBasicModule,
|
|
217
|
+
BBSFDropdownModule
|
|
218
|
+
]
|
|
219
|
+
})
|
|
220
|
+
export class UserFormModule { }
|
|
221
|
+
```
|
|
222
|
+
|
|
223
|
+
**Migration Example 2: From BBSFCoreModule**
|
|
224
|
+
```typescript
|
|
225
|
+
// ⚠️ Before: Loading all core controls (~650 KB)
|
|
226
|
+
import { BBSFCoreModule } from '@bnsights/bbsf-controls';
|
|
227
|
+
|
|
228
|
+
@NgModule({
|
|
229
|
+
imports: [BBSFCoreModule]
|
|
230
|
+
})
|
|
231
|
+
export class SimpleFormModule { }
|
|
232
|
+
|
|
233
|
+
// ✅ After: Only basic forms (~30 KB - 95% smaller!)
|
|
234
|
+
import { BBSFFormsBasicModule } from '@bnsights/bbsf-controls';
|
|
235
|
+
|
|
236
|
+
@NgModule({
|
|
237
|
+
imports: [BBSFFormsBasicModule]
|
|
238
|
+
})
|
|
239
|
+
export class SimpleFormModule { }
|
|
240
|
+
```
|
|
241
|
+
|
|
242
|
+
**Migration Example 3: Complex Form**
|
|
243
|
+
```typescript
|
|
244
|
+
// ❌ Before: BBSFCoreModule (~650 KB) + BBSFEditorsModule (~800 KB) = 1.45 MB
|
|
245
|
+
import { BBSFCoreModule, BBSFEditorsModule } from '@bnsights/bbsf-controls';
|
|
246
|
+
|
|
247
|
+
@NgModule({
|
|
248
|
+
imports: [BBSFCoreModule, BBSFEditorsModule]
|
|
249
|
+
})
|
|
250
|
+
export class ArticleFormModule { }
|
|
251
|
+
|
|
252
|
+
// ✅ After: Only what you need (~410 KB - 72% smaller!)
|
|
253
|
+
import {
|
|
254
|
+
BBSFFormsBasicModule, // ~30 KB - TextBox, CheckBox
|
|
255
|
+
BBSFDropdownModule, // ~130 KB - Dropdown
|
|
256
|
+
BBSFDateTimeModule, // ~220 KB - DatePicker
|
|
257
|
+
BBSFFormsBasicModule // ~30 KB - Basic forms
|
|
258
|
+
} from '@bnsights/bbsf-controls';
|
|
259
|
+
|
|
260
|
+
@NgModule({
|
|
261
|
+
imports: [
|
|
262
|
+
BBSFFormsBasicModule,
|
|
263
|
+
BBSFDropdownModule,
|
|
264
|
+
BBSFDateTimeModule
|
|
265
|
+
]
|
|
266
|
+
})
|
|
267
|
+
export class ArticleFormModule { }
|
|
268
|
+
```
|
|
269
|
+
|
|
270
|
+
#### Step 4: Verify Bundle Size
|
|
271
|
+
|
|
272
|
+
After migration, build your app and check the bundle size:
|
|
273
|
+
|
|
274
|
+
```bash
|
|
275
|
+
# Build with stats
|
|
276
|
+
npm run build -- --stats-json
|
|
277
|
+
|
|
278
|
+
# Analyze bundle (install if needed: npm i -g webpack-bundle-analyzer)
|
|
279
|
+
npx webpack-bundle-analyzer dist/your-app/stats.json
|
|
280
|
+
```
|
|
281
|
+
|
|
282
|
+
Look for `@bnsights/bbsf-controls` in the bundle analyzer to see your savings!
|
|
283
|
+
|
|
284
|
+
#### Step 5: Update All Modules
|
|
285
|
+
|
|
286
|
+
Search and replace across your codebase:
|
|
287
|
+
|
|
288
|
+
```bash
|
|
289
|
+
# Find all BBSFControlsModule imports
|
|
290
|
+
grep -r "BBSFControlsModule" src/
|
|
291
|
+
|
|
292
|
+
# Find all BBSFCoreModule imports
|
|
293
|
+
grep -r "BBSFCoreModule" src/
|
|
294
|
+
```
|
|
295
|
+
|
|
296
|
+
Then update each file based on which controls it actually uses.
|
|
297
|
+
|
|
298
|
+
---
|
|
299
|
+
|
|
300
|
+
### ⚡ Quick Reference
|
|
301
|
+
|
|
302
|
+
**Most Common Combinations:**
|
|
303
|
+
|
|
304
|
+
```typescript
|
|
305
|
+
// Basic form (~30 KB)
|
|
306
|
+
import { BBSFFormsBasicModule } from '@bnsights/bbsf-controls';
|
|
307
|
+
|
|
308
|
+
// Form with dropdown (~160 KB)
|
|
309
|
+
import { BBSFFormsBasicModule, BBSFDropdownModule } from '@bnsights/bbsf-controls';
|
|
310
|
+
|
|
311
|
+
// Form with date picker (~250 KB)
|
|
312
|
+
import { BBSFFormsBasicModule, BBSFDateTimeModule } from '@bnsights/bbsf-controls';
|
|
313
|
+
|
|
314
|
+
// Complete form (~565 KB)
|
|
315
|
+
import {
|
|
316
|
+
BBSFFormsBasicModule,
|
|
317
|
+
BBSFDropdownModule,
|
|
318
|
+
BBSFDateTimeModule,
|
|
319
|
+
BBSFPhoneModule,
|
|
320
|
+
BBSFUtilityModule
|
|
321
|
+
} from '@bnsights/bbsf-controls';
|
|
322
|
+
|
|
323
|
+
// Content management (~830 KB)
|
|
324
|
+
import { BBSFFormsBasicModule, BBSFEditorsModule } from '@bnsights/bbsf-controls';
|
|
325
|
+
|
|
326
|
+
// Media management (~390 KB)
|
|
327
|
+
import { BBSFFormsBasicModule, BBSFUploadsModule } from '@bnsights/bbsf-controls';
|
|
328
|
+
```
|
|
329
|
+
|
|
330
|
+
---
|
|
331
|
+
|
|
7
332
|
## Change Log
|
|
8
333
|
|
|
9
|
-
## 1.0.
|
|
334
|
+
## 1.0.194 / 16-10-2025
|
|
335
|
+
|
|
336
|
+
=====================
|
|
337
|
+
|
|
338
|
+
- Implement standalone components
|
|
339
|
+
|
|
340
|
+
## 1.0.193 / 16-10-2025
|
|
341
|
+
|
|
342
|
+
=====================
|
|
343
|
+
|
|
344
|
+
- Fix Format for displayValues in Tags, multiSelect
|
|
345
|
+
|
|
346
|
+
## 1.0.192 / 15-10-2025
|
|
10
347
|
|
|
11
348
|
=====================
|
|
12
349
|
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
import { Injectable } from '@angular/core';
|
|
2
2
|
import { Title } from '@angular/platform-browser';
|
|
3
|
-
import {
|
|
3
|
+
import { EnvironmentService, AuthService, ConfigurationService } from '@bnsights/bbsf-utilities';
|
|
4
|
+
import { UtilityService } from '@bnsights/bbsf-utilities/ui';
|
|
4
5
|
import { NgbModal } from '@ng-bootstrap/ng-bootstrap';
|
|
5
6
|
import { ControlUtility } from '../services/ControlUtility';
|
|
6
7
|
import { CustomValidation } from '../Models/CustomValidation';
|
|
7
8
|
import { saveAs } from 'file-saver';
|
|
8
|
-
import { EnvironmentService } from '@bnsights/bbsf-utilities';
|
|
9
9
|
import * as i0 from "@angular/core";
|
|
10
10
|
export class AppBaseComponent {
|
|
11
11
|
constructor(injector) {
|
|
@@ -223,4 +223,4 @@ export class AppBaseComponent {
|
|
|
223
223
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: AppBaseComponent, decorators: [{
|
|
224
224
|
type: Injectable
|
|
225
225
|
}], ctorParameters: () => [{ type: i0.Injector }] });
|
|
226
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBwLWJhc2UtY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYmJzZi1jb250cm9scy9zcmMvbGliL1NoYXJlZC9Db21wb25lbnRzL2FwcC1iYXNlLWNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQVksVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3JELE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUNsRCxPQUFPLEVBQ0wsY0FBYyxFQUNkLFdBQVcsRUFDWCxvQkFBb0IsR0FDckIsTUFBTSwwQkFBMEIsQ0FBQztBQUNsQyxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFFdEQsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBRTVELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBRTlELE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxZQUFZLENBQUM7QUFDcEMsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sMEJBQTBCLENBQUM7O0FBSTlELE1BQU0sT0FBZ0IsZ0JBQWdCO0lBZ0JwQyxZQUFZLFFBQWtCO1FBRnZCLGNBQVMsR0FBVyxFQUFFLENBQUM7UUFDdkIsY0FBUyxHQUFXLEVBQUUsQ0FBQztRQXlKOUIsd0JBQW1CLEdBQUcsQ0FBQyxPQUFZLEVBQUUsRUFBRTtZQUNyQyxJQUFJLENBQUMsY0FBYyxDQUFDLG9CQUFvQixDQUN0QyxJQUFJLENBQUMsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxFQUNyQixJQUFJLEVBQ0osSUFBSSxFQUNKLEtBQUssQ0FDTixDQUFDO1FBQ0osQ0FBQyxDQUFDO1FBRUYseUJBQW9CLEdBQUcsQ0FBQyxPQUFZLEVBQUUsRUFBRTtZQUN0QyxJQUFJLENBQUMsY0FBYyxDQUFDLG9CQUFvQixDQUN0QyxJQUFJLENBQUMsQ0FB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QWtCLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEVBQUUsV0FBVyxDQUFDLENBQUM7O2dCQUU3RCxPQUFPLENBQUMsVUFBVSxHQUFHLEtBQUssQ0FBQztRQUMvQixDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCxzQkFBc0IsQ0FBQyxxQkFBNEIsRUFBRSxJQUFlO1FBQ2xFLHFCQUFxQixDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsRUFBRTtZQUNyQyxJQUFJLFdBQVcsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUN4QyxJQUFJLFdBQVc7Z0JBQ2IsV0FBVyxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQ3hCLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQzsrR0EzUW1CLGdCQUFnQjttSEFBaEIsZ0JBQWdCOzs0RkFBaEIsZ0JBQWdCO2tCQURyQyxVQUFVIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0b3IsIEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgVGl0bGUgfSBmcm9tICdAYW5ndWxhci9wbGF0Zm9ybS1icm93c2VyJztcclxuaW1wb3J0IHtcclxuICBVdGlsaXR5U2VydmljZSxcclxuICBBdXRoU2VydmljZSxcclxuICBDb25maWd1cmF0aW9uU2VydmljZSxcclxufSBmcm9tICdAYm5zaWdodHMvYmJzZi11dGlsaXRpZXMnO1xyXG5pbXBvcnQgeyBOZ2JNb2RhbCB9IGZyb20gJ0BuZy1ib290c3RyYXAvbmctYm9vdHN0cmFwJztcclxuaW1wb3J0IHsgQWJzdHJhY3RDb250cm9sLCBGb3JtR3JvdXAgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcbmltcG9ydCB7IENvbnRyb2xVdGlsaXR5IH0gZnJvbSAnLi4vc2VydmljZXMvQ29udHJvbFV0aWxpdHknO1xyXG5pbXBvcnQgeyBGaWx0ZXJJdGVtIH0gZnJvbSAnLi4vTW9kZWxzL0ZpbHRlckl0ZW0nO1xyXG5pbXBvcnQgeyBDdXN0b21WYWxpZGF0aW9uIH0gZnJvbSAnLi4vTW9kZWxzL0N1c3RvbVZhbGlkYXRpb24nO1xyXG5pbXBvcnQgeyBFbmdsaXNoQXJhYmljRFRPIH0gZnJvbSAnLi4vTW9kZWxzL0VuZ2xpc2hBcmFiaWNEVE8nO1xyXG5pbXBvcnQgeyBzYXZlQXMgfSBmcm9tICdmaWxlLXNhdmVyJztcclxuaW1wb3J0IHsgRW52aXJvbm1lbnRTZXJ2aWNlIH0gZnJvbSAnQGJuc2lnaHRzL2Jic2YtdXRpbGl0aWVzJztcclxuaW1wb3J0IHsgRm9ybU9wdGlvbnMgfSBmcm9tICcuLi9Nb2RlbHMvRm9ybU9wdGlvbnMnO1xyXG5cclxuQEluamVjdGFibGUoKVxyXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgQXBwQmFzZUNvbXBvbmVudCB7XHJcbiAgcHVibGljIHV0aWxpdHlTZXJ2aWNlOiBVdGlsaXR5U2VydmljZTtcclxuICBwdWJsaWMgbW9kYWxTZXJ2aWNlOiBOZ2JNb2RhbDtcclxuICBwcml2YXRlIGNvbnRyb2xVdGlsaXR5OiBDb250cm9sVXRpbGl0eTtcclxuICBwcml2YXRlIHRpdGxlU2VydmljZTogVGl0bGU7XHJcbiAgcHJpdmF0ZSBhdWhTZXJ2aWNlOiBBdXRoU2VydmljZTtcclxuICBwcml2YXRlIGNvbmZpZ3VyYXRpb25TZXJ2aWNlOiBDb25maWd1cmF0aW9uU2VydmljZTtcclxuICBwdWJsaWMgZW52aXJvbm1lbnRTZXJ2aWNlOiBFbnZpcm9ubWVudFNlcnZpY2U7XHJcbiAgcHVibGljIGlzRU46IGJvb2xlYW47XHJcbiAgLy9MYWJlbHNcclxuICBwdWJsaWMgZXhwb3J0TGFiZWw6IHN0cmluZztcclxuICBwdWJsaWMgZmlsdGVyc0xhYmVsOiBzdHJpbmc7XHJcbiAgcHVibGljIGFkZExhYmVsOiBzdHJpbmc7XHJcbiAgcHVibGljIHVzZXJOYW1lOiBzdHJpbmc7XHJcbiAgcHVibGljIHBhZ2VUaXRsZTogc3RyaW5nID0gJyc7XHJcbiAgcHVibGljIFBhZ2VDb3VudDogbnVtYmVyID0gMTI7XHJcbiAgY29uc3RydWN0b3IoaW5qZWN0b3I6IEluamVjdG9yKSB7XHJcbiAgICB0aGlzLnV0aWxpdHlTZXJ2aWNlID0gaW5qZWN0b3IuZ2V0KFV0aWxpdHlTZXJ2aWNlKTtcclxuICAgIHRoaXMuY29udHJvbFV0aWxpdHkgPSBpbmplY3Rvci5nZXQoQ29udHJvbFV0aWxpdHkpO1xyXG4gICAgdGhpcy5jb25maWd1cmF0aW9uU2VydmljZSA9IGluamVjdG9yLmdldChDb25maWd1cmF0aW9uU2VydmljZSk7XHJcbiAgICB0aGlzLmVudmlyb25tZW50U2VydmljZSA9IGluamVjdG9yLmdldChFbnZpcm9ubWVudFNlcnZpY2UpO1xyXG4gICAgdGhpcy5tb2RhbFNlcnZpY2UgPSBpbmplY3Rvci5nZXQoTmdiTW9kYWwpO1xyXG4gICAgdGhpcy50aXRsZVNlcnZpY2UgPSBpbmplY3Rvci5nZXQoVGl0bGUpO1xyXG4gICAgdGhpcy5hdWhTZXJ2aWNlID0gaW5qZWN0b3IuZ2V0KEF1dGhTZXJ2aWNlKTtcclxuICAgIHRoaXMuZXhwb3J0TGFiZWwgPSB0aGlzLnV0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoJ0V4cG9ydCcpO1xyXG4gICAgdGhpcy5maWx0ZXJzTGFiZWwgPSB0aGlzLnV0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoJ0ZpbHRlcnMnKTtcclxuICAgIHRoaXMuYWRkTGFiZWwgPSB0aGlzLnV0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoJ0FkZCcpO1xyXG4gICAgdGhpcy51c2VyTmFtZSA9IHRoaXMuYXVoU2VydmljZS5uYW1lKCk7XHJcbiAgICB0aGlzLmlzRU4gPSB0aGlzLnV0aWxpdHlTZXJ2aWNlLmlzQ3VycmVudExhbmd1YWdlRW5nbGlzaCgpO1xyXG4gIH1cclxuICB1cGRhdGVQYWdlVGl0bGUodGl0bGU6IHN0cmluZyB8IHVuZGVmaW5lZCkge1xyXG4gICAgdGhpcy50aXRsZVNlcnZpY2Uuc2V0VGl0bGUodGhpcy5jYWxjdWxhdGVQYWdlVGl0bGUodGl0bGUpKTtcclxuICB9XHJcblxyXG4gIGwoa2V5OiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIHRoaXMudXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZShrZXkpO1xyXG4gIH1cclxuICBnZXRDb25maWd1cmF0aW9uVmFsdWUoa2V5OiBzdHJpbmcpIHtcclxuICAgIHJldHVybiB0aGlzLmNvbmZpZ3VyYXRpb25TZXJ2aWNlLmdldENvbmZpZ3VyYXRpb25WYWx1ZShrZXkpO1xyXG4gIH1cclxuICBnZXRMYW5ndWFnZU1vZGVWYWx1ZSgpIHtcclxuICAgIHJldHVybiB0aGlzLmNvbmZpZ3VyYXRpb25TZXJ2aWNlLmdldENvbmZpZ3VyYXRpb25WYWx1ZSgnTGFuZ3VhZ2VNb2RlJyk7XHJcbiAgfVxyXG4gIHN0b3BCbG9ja1VJKCkge1xyXG4gICAgdGhpcy51dGlsaXR5U2VydmljZS5zdG9wQmxvY2tVSSgpO1xyXG4gIH1cclxuXHJcbiAgc3RhcnRCbG9ja1VJKCkge1xyXG4gICAgdGhpcy51dGlsaXR5U2VydmljZS5zdGFydEJsb2NrVUkoKTtcclxuICB9XHJcblxyXG4gIG9wZW5Nb2RhbChtb2RhbDogYW55LCBzaXplPzogc3RyaW5nKSB7XHJcbiAgICBpZiAoc2l6ZSlcclxuICAgICAgdGhpcy5tb2RhbFNlcnZpY2Uub3Blbihtb2RhbCwge1xyXG4gICAgICAgIHNpemU6IHNpemUsXHJcbiAgICAgICAgYmFja2Ryb3A6ICdzdGF0aWMnLFxyXG4gICAgICAgIGtleWJvYXJkOiBmYWxzZSxcclxuICAgICAgfSk7XHJcbiAgICBlbHNlIHRoaXMubW9kYWxTZXJ2aWNlLm9wZW4obW9kYWwsIHsgYmFja2Ryb3A6ICdzdGF0aWMnLCBrZXlib2FyZDogZmFsc2UgfSk7XHJcbiAgfVxyXG5cclxuICBkb3dubG9hZChmaWxlRFRPOiBhbnksIGZpbGVOYW1lOiBzdHJpbmcpOiB2b2lkIHtcclxuICAgIC8qbGV0IGJsb2IgPSBuZXcgQmxvYihbZmlsZV0pOyovXHJcbiAgICBsZXQgZmlsZSA9IG5ldyBCbG9iKFtmaWxlRFRPXSwge1xyXG4gICAgICB0eXBlOiAnYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LnNwcmVhZHNoZWV0bWwuc2hlZXQnLFxyXG4gICAgfSk7XHJcbiAgICBzYXZlQXMoZmlsZSwgZmlsZU5hbWUpO1xyXG4gIH1cclxuXHJcbiAgZG93bmxvYWRQREYoZmlsZURUTzogYW55LCBmaWxlTmFtZTogc3RyaW5nKTogdm9pZCB7XHJcbiAgICBsZXQgZmlsZSA9IG5ldyBCbG9iKFtmaWxlRFRPXSwgeyB0eXBlOiBcImFwcGxpY2F0aW9uL3BkZlwiIH0pO1xyXG4gICAgc2F2ZUFzKGZpbGUsIGZpbGVOYW1lKTtcclxuICB9XHJcbiAgZG93bmxvYWRXb3JkKGZpbGVEVE86IGFueSwgZmlsZU5hbWU6IHN0cmluZyk6IHZvaWQge1xyXG4gICAgbGV0IGZpbGUgPSBuZXcgQmxvYihbZmlsZURUT10sIHsgdHlwZTogXCJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQud29yZHByb2Nlc3NpbmdtbC5kb2N1bWVudFwiIH0pO1xyXG4gICAgc2F2ZUFzKGZpbGUsIGZpbGVOYW1lKTtcclxuICB9XHJcblxyXG5cclxuICBwcml2YXRlIGJhc2U2NHRvQmxvYihiYXNlNjREYXRhLCBjb250ZW50VHlwZSkge1xyXG4gICAgY29udGVudFR5cGUgPSBjb250ZW50VHlwZSB8fCAnJztcclxuICAgIHZhciBzbGljZVNpemUgPSAxMDI0O1xyXG4gICAgdmFyIGJ5dGVDaGFyYWN0ZXJzID0gYXRvYihiYXNlNjREYXRhKTtcclxuICAgIHZhciBieXRlc0xlbmd0aCA9IGJ5dGVDaGFyYWN0ZXJzLmxlbmd0aDtcclxuICAgIHZhciBzbGljZXNDb3VudCA9IE1hdGguY2VpbChieXRlc0xlbmd0aCAvIHNsaWNlU2l6ZSk7XHJcbiAgICB2YXIgYnl0ZUFycmF5cyA9IG5ldyBBcnJheShzbGljZXNDb3VudCk7XHJcblxyXG4gICAgZm9yICh2YXIgc2xpY2VJbmRleCA9IDA7IHNsaWNlSW5kZXggPCBzbGljZXNDb3VudDsgKytzbGljZUluZGV4KSB7XHJcbiAgICAgIHZhciBiZWdpbiA9IHNsaWNlSW5kZXggKiBzbGljZVNpemU7XHJcbiAgICAgIHZhciBlbmQgPSBNYXRoLm1pbihiZWdpbiArIHNsaWNlU2l6ZSwgYnl0ZXNMZW5ndGgpO1xyXG5cclxuICAgICAgdmFyIGJ5dGVzID0gbmV3IEFycmF5KGVuZCAtIGJlZ2luKTtcclxuICAgICAgZm9yICh2YXIgb2Zmc2V0ID0gYmVnaW4sIGkgPSAwOyBvZmZzZXQgPCBlbmQ7ICsraSwgKytvZmZzZXQpIHtcclxuICAgICAgICBieXRlc1tpXSA9IGJ5dGVDaGFyYWN0ZXJzW29mZnNldF0uY2hhckNvZGVBdCgwKTtcclxuICAgICAgfVxyXG4gICAgICBieXRlQXJyYXlzW3NsaWNlSW5kZXhdID0gbmV3IFVpbnQ4QXJyYXkoYnl0ZXMpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIG5ldyBCbG9iKGJ5dGVBcnJheXMsIHsgdHlwZTogY29udGVudFR5cGUgfSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGNhbGN1bGF0ZVBhZ2VUaXRsZSh0aXRsZTogc3RyaW5nIHwgdW5kZWZpbmVkKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcclxuICAgIHJldHVybiB0aXRsZVxyXG4gICAgICA/IHRpdGxlLnN1YnN0cmluZygwLCAxMDApICsgYCB8ICR7dGhpcy5sKCdBcHBsaWNhdGlvbk5hbWUnKX1gXHJcbiAgICAgIDogYCR7dGhpcy5sKCdBcHBsaWNhdGlvbk5hbWUnKX1gO1xyXG4gIH1cclxuXHJcbiAgZ2V0UGFnaW5nRmlsdGVyc1ZhbHVlcyhmb3JtOiBGb3JtR3JvdXAsIGZpbHRlcnM6IEZpbHRlckl0ZW1bXSk6IGFueSB7XHJcbiAgICBsZXQgbW9kZWwgPSBuZXcgT2JqZWN0KCk7XHJcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGZpbHRlcnMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgbGV0IGZpbHRlckl0ZW0gPSBmaWx0ZXJzW2ldO1xyXG4gICAgICBpZiAoZm9ybS5jb250cm9sc1tmaWx0ZXJJdGVtLmZvcm1Db250cm9sTmFtZV0udmFsdWUgPT0gdW5kZWZpbmVkKVxyXG4gICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICBtb2RlbFtmaWx0ZXJJdGVtLmFjdGlvblBhcmFtZXRlck5hbWVdID1cclxuICAgICAgICBmb3JtLmNvbnRyb2xzW2ZpbHRlckl0ZW0uZm9ybUNvbnRyb2xOYW1lXS52YWx1ZSA9PSB1bmRlZmluZWRcclxuICAgICAgICAgID8gJydcclxuICAgICAgICAgIDogZm9ybS5jb250cm9sc1tmaWx0ZXJJdGVtLmZvcm1Db250cm9sTmFtZV0udmFsdWU7XHJcbiAgICAgIC8vIHBhcmFtcyA9IHBhcmFtcy5hcHBlbmQoZmlsdGVySXRlbS5BY3Rpb25QYXJhbWV0ZXJOYW1lLCBmb3JtLmNvbnRyb2xzW2ZpbHRlckl0ZW0uRm9ybUNvbnRyb2xOYW1lXS52YWx1ZSA9PSB1bmRlZmluZWQgPyAnJyA6IGZvcm0uY29udHJvbHNbZmlsdGVySXRlbS5Gb3JtQ29udHJvbE5hbWVdLnZhbHVlKTtcclxuICAgIH1cclxuICAgIHJldHVybiBtb2RlbDtcclxuICB9XHJcblxyXG4gIHJlbW92ZUNvbnRyb2woY29udHJvbE5hbWU6IHN0cmluZywgZm9ybTogRm9ybUdyb3VwKSB7XHJcbiAgICBmb3JtLnJlbW92ZUNvbnRyb2woY29udHJvbE5hbWUpO1xyXG4gIH1cclxuXHJcbiAgY29weVRvQ2xpcGJvYXJkKHZhbDogc3RyaW5nKSB7XHJcbiAgICBjb25zdCBzZWxCb3ggPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZXh0YXJlYScpO1xyXG4gICAgc2VsQm94LnN0eWxlLnBvc2l0aW9uID0gJ2ZpeGVkJztcclxuICAgIHNlbEJveC5zdHlsZS5sZWZ0ID0gJzAnO1xyXG4gICAgc2VsQm94LnN0eWxlLnRvcCA9ICcwJztcclxuICAgIHNlbEJveC5zdHlsZS5vcGFjaXR5ID0gJzAnO1xyXG4gICAgc2VsQm94LnZhbHVlID0gdmFsO1xyXG4gICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChzZWxCb3gpO1xyXG4gICAgc2VsQm94LmZvY3VzKCk7XHJcbiAgICBzZWxCb3guc2VsZWN0KCk7XHJcbiAgICBkb2N1bWVudC5leGVjQ29tbWFuZCgnY29weScpO1xyXG4gICAgZG9jdW1lbnQuYm9keS5yZW1vdmVDaGlsZChzZWxCb3gpO1xyXG4gICAgdGhpcy51dGlsaXR5U2VydmljZS5ub3RpZnlTdWNjZXNzTWVzc2FnZSh0aGlzLmwoJ0NvcGllZFN1Y2Nlc3NmdWxseScpKTtcclxuICB9XHJcblxyXG4gIGFkZFJlcXVpcmVkUnVsZShjb250cm9sOiBBYnN0cmFjdENvbnRyb2wsIGNvbnRyb2xPcHRpb25zOiBhbnkpIHtcclxuICAgIHRoaXMuY29udHJvbFV0aWxpdHkuYWRkUmVxdWlyZWRUb0NvbnRyb2woY29udHJvbCwgY29udHJvbE9wdGlvbnMpO1xyXG4gIH1cclxuXHJcbiAgcmVtb3ZlUmVxdWlyZWRSdWxlKGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCwgY29udHJvbE9wdGlvbnM6IGFueSkge1xyXG4gICAgdGhpcy5jb250cm9sVXRpbGl0eS5yZW1vdmVSZXF1aXJlZEZyb21Db250cm9sKGNvbnRyb2wsIGNvbnRyb2xPcHRpb25zKTtcclxuICB9XHJcblxyXG4gIHZhbGlkYXRlRGF0ZXMoXHJcbiAgICBmb3JtOiBGb3JtR3JvdXAsXHJcbiAgICBmcm9tRGF0ZUNvbnRyb2w6IHN0cmluZyxcclxuICAgIHRvRGF0ZUNvbnRyb2w6IHN0cmluZyxcclxuICAgIHZhbGlkYXRpb25NZXNzYWdlS2V5OiBzdHJpbmdcclxuICApOiBDdXN0b21WYWxpZGF0aW9uIHtcclxuICAgIHZhciB2YWxpZGF0b3IgPSBuZXcgQ3VzdG9tVmFsaWRhdGlvbigpO1xyXG4gICAgdmFsaWRhdG9yLmZ1bmN0aW9uQm9keSA9IChjb250cm9sKSA9PiB7XHJcbiAgICAgIGxldCBmcm9tRGF0ZSA9IGZvcm0uY29udHJvbHNbZnJvbURhdGVDb250cm9sXS52YWx1ZTtcclxuICAgICAgbGV0IHRvRGF0ZSA9IGZvcm0uY29udHJvbHNbdG9EYXRlQ29udHJvbF0udmFsdWU7XHJcblxyXG4gICAgICBpZiAoZnJvbURhdGUgJiYgdG9EYXRlICYmIHRvRGF0ZSA8PSBmcm9tRGF0ZSlcclxuICAgICAgICByZXR1cm4geyBjdXN0b21lckVycm9yOiB0cnVlIH07XHJcblxyXG4gICAgICByZXR1cm4gbnVsbDtcclxuICAgIH07XHJcbiAgICB2YWxpZGF0b3IubWFzc2FnZSA9IHRoaXMubCh2YWxpZGF0aW9uTWVzc2FnZUtleSk7XHJcbiAgICByZXR1cm4gdmFsaWRhdG9yO1xyXG4gIH1cclxuXHJcbiAgb25TdWNjZXNzQWRkSGFuZGxlciA9IChzdWNjZXNzOiBhbnkpID0+IHtcclxuICAgIHRoaXMudXRpbGl0eVNlcnZpY2Uubm90aWZ5U3VjY2Vzc01lc3NhZ2UoXHJcbiAgICAgIHRoaXMubCgnUmVjb3JkQWRkZWQnKSxcclxuICAgICAgbnVsbCxcclxuICAgICAgbnVsbCxcclxuICAgICAgZmFsc2VcclxuICAgICk7XHJcbiAgfTtcclxuXHJcbiAgb25TdWNjZXNzRWRpdEhhbmRsZXIgPSAoc3VjY2VzczogYW55KSA9PiB7XHJcbiAgICB0aGlzLnV0aWxpdHlTZXJ2aWNlLm5vdGlmeVN1Y2Nlc3NNZXNzYWdlKFxyXG4gICAgICB0aGlzLmwoJ1JlY29yZFVwZGF0ZWQnKSxcclxuICAgICAgbnVsbCxcclxuICAgICAgbnVsbCxcclxuICAgICAgZmFsc2VcclxuICAgICk7XHJcbiAgfTtcclxuXHJcbiAgb25TdWNjZXNzRGVsZXRlSGFuZGxlciA9IChzdWNjZXNzOiBhbnkpID0+IHtcclxuICAgIHRoaXMudXRpbGl0eVNlcnZpY2Uubm90aWZ5U3VjY2Vzc01lc3NhZ2UoXHJcbiAgICAgIHRoaXMubCgnUmVjb3JkRGVsZXRlZCcpLFxyXG4gICAgICBudWxsLFxyXG4gICAgICBudWxsLFxyXG4gICAgICBmYWxzZVxyXG4gICAgKTtcclxuICB9O1xyXG5cclxuICByZWNhbGN1bGF0ZVBhZ2VUaXRsZSgpIHtcclxuICAgIHRoaXMudGl0bGVTZXJ2aWNlLnNldFRpdGxlKHRoaXMuY2FsY3VsYXRlUGFnZVRpdGxlKCcnKSk7XHJcbiAgfVxyXG5cclxuICBpc0VuZ2xpc2goKSB7XHJcbiAgICByZXR1cm4gdGhpcy51dGlsaXR5U2VydmljZS5pc0N1cnJlbnRMYW5ndWFnZUVuZ2xpc2goKTtcclxuICB9XHJcblxyXG4gIGNhbGN1bGF0ZUluaXRpYWxzKG5hbWU6IHN0cmluZyk6IHN0cmluZyB7XHJcbiAgICBsZXQgbGFuZ3VhZ2UgPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgnbGFuZ3VhZ2UnKTtcclxuICAgIGxldCBjdXJyZW50VXNlciA9IEF1dGhTZXJ2aWNlLnVzZXIucHJvZmlsZTtcclxuICAgIGNvbnNvbGUubG9nKGN1cnJlbnRVc2VyKTtcclxuICAgIGxldCB1c2VyTmFtZSA9XHJcbiAgICAgIGxhbmd1YWdlID09ICdlbicgPyBjdXJyZW50VXNlci5naXZlbl9uYW1lRW4gOiBjdXJyZW50VXNlci5naXZlbl9uYW1lQXI7XHJcbiAgICBpZiAoY3VycmVudFVzZXIpIHtcclxuICAgICAgbGV0IGZ1bGxOYW1lID0gdXNlck5hbWUuc3BsaXQoJyAnKTtcclxuICAgICAgbGV0IGluaXRpYWxzOiBzdHJpbmc7XHJcbiAgICAgIGlmIChmdWxsTmFtZS5sZW5ndGggPiAxKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuaXNFTilcclxuICAgICAgICAgIGluaXRpYWxzID0gZnVsbE5hbWUuc2hpZnQoKS5jaGFyQXQoMCkgKyBmdWxsTmFtZS5wb3AoKS5jaGFyQXQoMCk7XHJcbiAgICAgICAgZWxzZVxyXG4gICAgICAgICAgaW5pdGlhbHMgPVxyXG4gICAgICAgICAgICBmdWxsTmFtZS5zaGlmdCgpLmNoYXJBdCgwKSArICcgJyArIGZ1bGxOYW1lLnBvcCgpLmNoYXJBdCgwKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBpbml0aWFscyA9IGZ1bGxOYW1lLnBvcCgpLmNoYXJBdCgwKTtcclxuICAgICAgfVxyXG4gICAgICByZXR1cm4gaW5pdGlhbHMudG9VcHBlckNhc2UoKTtcclxuICAgIH1cclxuICAgIHJldHVybiAnJztcclxuICB9XHJcblxyXG4gIGdldEN1cnJlbnRVc2VySW5pdGlhbHMoKTogc3RyaW5nIHtcclxuICAgIHJldHVybiB0aGlzLmNhbGN1bGF0ZUluaXRpYWxzKHRoaXMuYXVoU2VydmljZS5uYW1lKCkpO1xyXG4gIH1cclxuXHJcbiAgZ2V0Q3VycmVudEZhaWxPdmVyKHZhbDogRW5nbGlzaEFyYWJpY0RUTyk6IHN0cmluZyB7XHJcbiAgICBpZiAodGhpcy5pc0VuZ2xpc2goKSkge1xyXG4gICAgICBpZiAodmFsLmVuZ2xpc2gpIHJldHVybiB2YWwuZW5nbGlzaDtcclxuICAgICAgZWxzZSByZXR1cm4gdmFsLmFyYWJpYztcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGlmICh2YWwuYXJhYmljKSByZXR1cm4gdmFsLmFyYWJpYztcclxuICAgICAgZWxzZSByZXR1cm4gdmFsLmVuZ2xpc2g7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuXHJcbiAgLy8jcmVnaW9uIHZhbGlkYXRpb24gYWN0aW9uc1xyXG5cclxuICBhZGRSZXF1aXJlZFZhbGlkYXRpb24oY3VzdG9tQ29udHJvbE9wdGlvbjogYW55W10sIGZvcm06IEZvcm1Hcm91cCwgZm9ybU9wdGlvbnM6IEZvcm1PcHRpb25zKTogdm9pZCB7XHJcbiAgICBjdXN0b21Db250cm9sT3B0aW9uLmZvckVhY2goY29udHJvbCA9PiB7XHJcbiAgICAgIGlmIChmb3JtLmdldChjb250cm9sLk5hbWUpKVxyXG4gICAgICAgIHRoaXMuYWRkUmVxdWlyZWRSdWxlKGZvcm0uZ2V0KGNvbnRyb2wuTmFtZSksIGZvcm1PcHRpb25zKTtcclxuICAgICAgZWxzZVxyXG4gICAgICAgIGNvbnRyb2wuSXNSZXF1aXJlZCA9IHRydWU7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHJlbW92ZVJlcXVpcmVkVmFsaWRhdGlvbihjdXN0b21Db250cm9sT3B0aW9uOiBhbnlbXSwgZm9ybTogRm9ybUdyb3VwLCBmb3JtT3B0aW9uczogRm9ybU9wdGlvbnMpOiB2b2lkIHtcclxuICAgIGN1c3RvbUNvbnRyb2xPcHRpb24uZm9yRWFjaChjb250cm9sID0+IHtcclxuICAgICAgaWYgKGZvcm0uZ2V0KGNvbnRyb2wuTmFtZSkpXHJcbiAgICAgICAgdGhpcy5yZW1vdmVSZXF1aXJlZFJ1bGUoZm9ybS5nZXQoY29udHJvbC5OYW1lKSwgZm9ybU9wdGlvbnMpO1xyXG4gICAgICBlbHNlXHJcbiAgICAgICAgY29udHJvbC5Jc1JlcXVpcmVkID0gZmFsc2U7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHJlc2V0Rm9ybUNvbnRyb2xzVmFsdWUoY3VzdG9tQ29udHJvbHNPcHRpb25zOiBhbnlbXSwgZm9ybTogRm9ybUdyb3VwKTogdm9pZCB7XHJcbiAgICBjdXN0b21Db250cm9sc09wdGlvbnMuZm9yRWFjaChvcHRpb24gPT4ge1xyXG4gICAgICBsZXQgZm9ybUNvbnRyb2wgPSBmb3JtLmdldChvcHRpb24uTmFtZSk7XHJcbiAgICAgIGlmIChmb3JtQ29udHJvbClcclxuICAgICAgICBmb3JtQ29udHJvbC5yZXNldCgpO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICAvLyNlbmRyZWdpb25cclxuXHJcbn1cclxuIl19
|
|
226
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBwLWJhc2UtY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYmJzZi1jb250cm9scy9zcmMvbGliL1NoYXJlZC9Db21wb25lbnRzL2FwcC1iYXNlLWNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQVksVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3JELE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUNsRCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsV0FBVyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDakcsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQzdELE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUV0RCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFFNUQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFFOUQsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLFlBQVksQ0FBQzs7QUFJcEMsTUFBTSxPQUFnQixnQkFBZ0I7SUFnQnBDLFlBQVksUUFBa0I7UUFGdkIsY0FBUyxHQUFXLEVBQUUsQ0FBQztRQUN2QixjQUFTLEdBQVcsRUFBRSxDQUFDO1FBeUo5Qix3QkFBbUIsR0FBRyxDQUFDLE9BQVksRUFBRSxFQUFFO1lBQ3JDLElBQUksQ0FBQyxjQUFjLENBQUMsb0JBQW9CLENBQ3RDLElBQUksQ0FBQyxDQUFDLENBQUMsYUFBYSxDQUFDLEVBQ3JCLElBQUksRUFDSixJQUFJLEVBQ0osS0FBSyxDQUNOLENBQUM7UUFDSixDQUFDLENBQUM7UUFFRix5QkFBb0IsR0FBRyxDQUFDLE9BQVksRUFBRSxFQUFFO1lBQ3RDLElBQUksQ0FBQyxjQUFjLENBQUMsb0JBQW9CLENBQ3RDLElBQUksQ0FBQyxDQUFD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a0IsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFBRSxXQUFXLENBQUMsQ0FBQzs7Z0JBRTdELE9BQU8sQ0FBQyxVQUFVLEdBQUcsS0FBSyxDQUFDO1FBQy9CLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELHNCQUFzQixDQUFDLHFCQUE0QixFQUFFLElBQWU7UUFDbEUscUJBQXFCLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxFQUFFO1lBQ3JDLElBQUksV0FBVyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ3hDLElBQUksV0FBVztnQkFDYixXQUFXLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDeEIsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDOytHQTNRbUIsZ0JBQWdCO21IQUFoQixnQkFBZ0I7OzRGQUFoQixnQkFBZ0I7a0JBRHJDLFVBQVUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RvciwgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBUaXRsZSB9IGZyb20gJ0Bhbmd1bGFyL3BsYXRmb3JtLWJyb3dzZXInO1xyXG5pbXBvcnQgeyBFbnZpcm9ubWVudFNlcnZpY2UsIEF1dGhTZXJ2aWNlLCBDb25maWd1cmF0aW9uU2VydmljZSB9IGZyb20gJ0BibnNpZ2h0cy9iYnNmLXV0aWxpdGllcyc7XHJcbmltcG9ydCB7IFV0aWxpdHlTZXJ2aWNlIH0gZnJvbSAnQGJuc2lnaHRzL2Jic2YtdXRpbGl0aWVzL3VpJztcclxuaW1wb3J0IHsgTmdiTW9kYWwgfSBmcm9tICdAbmctYm9vdHN0cmFwL25nLWJvb3RzdHJhcCc7XHJcbmltcG9ydCB7IEFic3RyYWN0Q29udHJvbCwgRm9ybUdyb3VwIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5pbXBvcnQgeyBDb250cm9sVXRpbGl0eSB9IGZyb20gJy4uL3NlcnZpY2VzL0NvbnRyb2xVdGlsaXR5JztcclxuaW1wb3J0IHsgRmlsdGVySXRlbSB9IGZyb20gJy4uL01vZGVscy9GaWx0ZXJJdGVtJztcclxuaW1wb3J0IHsgQ3VzdG9tVmFsaWRhdGlvbiB9IGZyb20gJy4uL01vZGVscy9DdXN0b21WYWxpZGF0aW9uJztcclxuaW1wb3J0IHsgRW5nbGlzaEFyYWJpY0RUTyB9IGZyb20gJy4uL01vZGVscy9FbmdsaXNoQXJhYmljRFRPJztcclxuaW1wb3J0IHsgc2F2ZUFzIH0gZnJvbSAnZmlsZS1zYXZlcic7XHJcbmltcG9ydCB7IEZvcm1PcHRpb25zIH0gZnJvbSAnLi4vTW9kZWxzL0Zvcm1PcHRpb25zJztcclxuXHJcbkBJbmplY3RhYmxlKClcclxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIEFwcEJhc2VDb21wb25lbnQge1xyXG4gIHB1YmxpYyB1dGlsaXR5U2VydmljZTogVXRpbGl0eVNlcnZpY2U7XHJcbiAgcHVibGljIG1vZGFsU2VydmljZTogTmdiTW9kYWw7XHJcbiAgcHJpdmF0ZSBjb250cm9sVXRpbGl0eTogQ29udHJvbFV0aWxpdHk7XHJcbiAgcHJpdmF0ZSB0aXRsZVNlcnZpY2U6IFRpdGxlO1xyXG4gIHByaXZhdGUgYXVoU2VydmljZTogQXV0aFNlcnZpY2U7XHJcbiAgcHJpdmF0ZSBjb25maWd1cmF0aW9uU2VydmljZTogQ29uZmlndXJhdGlvblNlcnZpY2U7XHJcbiAgcHVibGljIGVudmlyb25tZW50U2VydmljZTogRW52aXJvbm1lbnRTZXJ2aWNlO1xyXG4gIHB1YmxpYyBpc0VOOiBib29sZWFuO1xyXG4gIC8vTGFiZWxzXHJcbiAgcHVibGljIGV4cG9ydExhYmVsOiBzdHJpbmc7XHJcbiAgcHVibGljIGZpbHRlcnNMYWJlbDogc3RyaW5nO1xyXG4gIHB1YmxpYyBhZGRMYWJlbDogc3RyaW5nO1xyXG4gIHB1YmxpYyB1c2VyTmFtZTogc3RyaW5nO1xyXG4gIHB1YmxpYyBwYWdlVGl0bGU6IHN0cmluZyA9ICcnO1xyXG4gIHB1YmxpYyBQYWdlQ291bnQ6IG51bWJlciA9IDEyO1xyXG4gIGNvbnN0cnVjdG9yKGluamVjdG9yOiBJbmplY3Rvcikge1xyXG4gICAgdGhpcy51dGlsaXR5U2VydmljZSA9IGluamVjdG9yLmdldChVdGlsaXR5U2VydmljZSk7XHJcbiAgICB0aGlzLmNvbnRyb2xVdGlsaXR5ID0gaW5qZWN0b3IuZ2V0KENvbnRyb2xVdGlsaXR5KTtcclxuICAgIHRoaXMuY29uZmlndXJhdGlvblNlcnZpY2UgPSBpbmplY3Rvci5nZXQoQ29uZmlndXJhdGlvblNlcnZpY2UpO1xyXG4gICAgdGhpcy5lbnZpcm9ubWVudFNlcnZpY2UgPSBpbmplY3Rvci5nZXQoRW52aXJvbm1lbnRTZXJ2aWNlKTtcclxuICAgIHRoaXMubW9kYWxTZXJ2aWNlID0gaW5qZWN0b3IuZ2V0KE5nYk1vZGFsKTtcclxuICAgIHRoaXMudGl0bGVTZXJ2aWNlID0gaW5qZWN0b3IuZ2V0KFRpdGxlKTtcclxuICAgIHRoaXMuYXVoU2VydmljZSA9IGluamVjdG9yLmdldChBdXRoU2VydmljZSk7XHJcbiAgICB0aGlzLmV4cG9ydExhYmVsID0gdGhpcy51dGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKCdFeHBvcnQnKTtcclxuICAgIHRoaXMuZmlsdGVyc0xhYmVsID0gdGhpcy51dGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKCdGaWx0ZXJzJyk7XHJcbiAgICB0aGlzLmFkZExhYmVsID0gdGhpcy51dGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKCdBZGQnKTtcclxuICAgIHRoaXMudXNlck5hbWUgPSB0aGlzLmF1aFNlcnZpY2UubmFtZSgpO1xyXG4gICAgdGhpcy5pc0VOID0gdGhpcy51dGlsaXR5U2VydmljZS5pc0N1cnJlbnRMYW5ndWFnZUVuZ2xpc2goKTtcclxuICB9XHJcbiAgdXBkYXRlUGFnZVRpdGxlKHRpdGxlOiBzdHJpbmcgfCB1bmRlZmluZWQpIHtcclxuICAgIHRoaXMudGl0bGVTZXJ2aWNlLnNldFRpdGxlKHRoaXMuY2FsY3VsYXRlUGFnZVRpdGxlKHRpdGxlKSk7XHJcbiAgfVxyXG5cclxuICBsKGtleTogc3RyaW5nKTogc3RyaW5nIHtcclxuICAgIHJldHVybiB0aGlzLnV0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoa2V5KTtcclxuICB9XHJcbiAgZ2V0Q29uZmlndXJhdGlvblZhbHVlKGtleTogc3RyaW5nKSB7XHJcbiAgICByZXR1cm4gdGhpcy5jb25maWd1cmF0aW9uU2VydmljZS5nZXRDb25maWd1cmF0aW9uVmFsdWUoa2V5KTtcclxuICB9XHJcbiAgZ2V0TGFuZ3VhZ2VNb2RlVmFsdWUoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5jb25maWd1cmF0aW9uU2VydmljZS5nZXRDb25maWd1cmF0aW9uVmFsdWUoJ0xhbmd1YWdlTW9kZScpO1xyXG4gIH1cclxuICBzdG9wQmxvY2tVSSgpIHtcclxuICAgIHRoaXMudXRpbGl0eVNlcnZpY2Uuc3RvcEJsb2NrVUkoKTtcclxuICB9XHJcblxyXG4gIHN0YXJ0QmxvY2tVSSgpIHtcclxuICAgIHRoaXMudXRpbGl0eVNlcnZpY2Uuc3RhcnRCbG9ja1VJKCk7XHJcbiAgfVxyXG5cclxuICBvcGVuTW9kYWwobW9kYWw6IGFueSwgc2l6ZT86IHN0cmluZykge1xyXG4gICAgaWYgKHNpemUpXHJcbiAgICAgIHRoaXMubW9kYWxTZXJ2aWNlLm9wZW4obW9kYWwsIHtcclxuICAgICAgICBzaXplOiBzaXplLFxyXG4gICAgICAgIGJhY2tkcm9wOiAnc3RhdGljJyxcclxuICAgICAgICBrZXlib2FyZDogZmFsc2UsXHJcbiAgICAgIH0pO1xyXG4gICAgZWxzZSB0aGlzLm1vZGFsU2VydmljZS5vcGVuKG1vZGFsLCB7IGJhY2tkcm9wOiAnc3RhdGljJywga2V5Ym9hcmQ6IGZhbHNlIH0pO1xyXG4gIH1cclxuXHJcbiAgZG93bmxvYWQoZmlsZURUTzogYW55LCBmaWxlTmFtZTogc3RyaW5nKTogdm9pZCB7XHJcbiAgICAvKmxldCBibG9iID0gbmV3IEJsb2IoW2ZpbGVdKTsqL1xyXG4gICAgbGV0IGZpbGUgPSBuZXcgQmxvYihbZmlsZURUT10sIHtcclxuICAgICAgdHlwZTogJ2FwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5zcHJlYWRzaGVldG1sLnNoZWV0JyxcclxuICAgIH0pO1xyXG4gICAgc2F2ZUFzKGZpbGUsIGZpbGVOYW1lKTtcclxuICB9XHJcblxyXG4gIGRvd25sb2FkUERGKGZpbGVEVE86IGFueSwgZmlsZU5hbWU6IHN0cmluZyk6IHZvaWQge1xyXG4gICAgbGV0IGZpbGUgPSBuZXcgQmxvYihbZmlsZURUT10sIHsgdHlwZTogXCJhcHBsaWNhdGlvbi9wZGZcIiB9KTtcclxuICAgIHNhdmVBcyhmaWxlLCBmaWxlTmFtZSk7XHJcbiAgfVxyXG4gIGRvd25sb2FkV29yZChmaWxlRFRPOiBhbnksIGZpbGVOYW1lOiBzdHJpbmcpOiB2b2lkIHtcclxuICAgIGxldCBmaWxlID0gbmV3IEJsb2IoW2ZpbGVEVE9dLCB7IHR5cGU6IFwiYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LndvcmRwcm9jZXNzaW5nbWwuZG9jdW1lbnRcIiB9KTtcclxuICAgIHNhdmVBcyhmaWxlLCBmaWxlTmFtZSk7XHJcbiAgfVxyXG5cclxuXHJcbiAgcHJpdmF0ZSBiYXNlNjR0b0Jsb2IoYmFzZTY0RGF0YSwgY29udGVudFR5cGUpIHtcclxuICAgIGNvbnRlbnRUeXBlID0gY29udGVudFR5cGUgfHwgJyc7XHJcbiAgICB2YXIgc2xpY2VTaXplID0gMTAyNDtcclxuICAgIHZhciBieXRlQ2hhcmFjdGVycyA9IGF0b2IoYmFzZTY0RGF0YSk7XHJcbiAgICB2YXIgYnl0ZXNMZW5ndGggPSBieXRlQ2hhcmFjdGVycy5sZW5ndGg7XHJcbiAgICB2YXIgc2xpY2VzQ291bnQgPSBNYXRoLmNlaWwoYnl0ZXNMZW5ndGggLyBzbGljZVNpemUpO1xyXG4gICAgdmFyIGJ5dGVBcnJheXMgPSBuZXcgQXJyYXkoc2xpY2VzQ291bnQpO1xyXG5cclxuICAgIGZvciAodmFyIHNsaWNlSW5kZXggPSAwOyBzbGljZUluZGV4IDwgc2xpY2VzQ291bnQ7ICsrc2xpY2VJbmRleCkge1xyXG4gICAgICB2YXIgYmVnaW4gPSBzbGljZUluZGV4ICogc2xpY2VTaXplO1xyXG4gICAgICB2YXIgZW5kID0gTWF0aC5taW4oYmVnaW4gKyBzbGljZVNpemUsIGJ5dGVzTGVuZ3RoKTtcclxuXHJcbiAgICAgIHZhciBieXRlcyA9IG5ldyBBcnJheShlbmQgLSBiZWdpbik7XHJcbiAgICAgIGZvciAodmFyIG9mZnNldCA9IGJlZ2luLCBpID0gMDsgb2Zmc2V0IDwgZW5kOyArK2ksICsrb2Zmc2V0KSB7XHJcbiAgICAgICAgYnl0ZXNbaV0gPSBieXRlQ2hhcmFjdGVyc1tvZmZzZXRdLmNoYXJDb2RlQXQoMCk7XHJcbiAgICAgIH1cclxuICAgICAgYnl0ZUFycmF5c1tzbGljZUluZGV4XSA9IG5ldyBVaW50OEFycmF5KGJ5dGVzKTtcclxuICAgIH1cclxuICAgIHJldHVybiBuZXcgQmxvYihieXRlQXJyYXlzLCB7IHR5cGU6IGNvbnRlbnRUeXBlIH0pO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBjYWxjdWxhdGVQYWdlVGl0bGUodGl0bGU6IHN0cmluZyB8IHVuZGVmaW5lZCk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XHJcbiAgICByZXR1cm4gdGl0bGVcclxuICAgICAgPyB0aXRsZS5zdWJzdHJpbmcoMCwgMTAwKSArIGAgfCAke3RoaXMubCgnQXBwbGljYXRpb25OYW1lJyl9YFxyXG4gICAgICA6IGAke3RoaXMubCgnQXBwbGljYXRpb25OYW1lJyl9YDtcclxuICB9XHJcblxyXG4gIGdldFBhZ2luZ0ZpbHRlcnNWYWx1ZXMoZm9ybTogRm9ybUdyb3VwLCBmaWx0ZXJzOiBGaWx0ZXJJdGVtW10pOiBhbnkge1xyXG4gICAgbGV0IG1vZGVsID0gbmV3IE9iamVjdCgpO1xyXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBmaWx0ZXJzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgIGxldCBmaWx0ZXJJdGVtID0gZmlsdGVyc1tpXTtcclxuICAgICAgaWYgKGZvcm0uY29udHJvbHNbZmlsdGVySXRlbS5mb3JtQ29udHJvbE5hbWVdLnZhbHVlID09IHVuZGVmaW5lZClcclxuICAgICAgICBjb250aW51ZTtcclxuICAgICAgbW9kZWxbZmlsdGVySXRlbS5hY3Rpb25QYXJhbWV0ZXJOYW1lXSA9XHJcbiAgICAgICAgZm9ybS5jb250cm9sc1tmaWx0ZXJJdGVtLmZvcm1Db250cm9sTmFtZV0udmFsdWUgPT0gdW5kZWZpbmVkXHJcbiAgICAgICAgICA/ICcnXHJcbiAgICAgICAgICA6IGZvcm0uY29udHJvbHNbZmlsdGVySXRlbS5mb3JtQ29udHJvbE5hbWVdLnZhbHVlO1xyXG4gICAgICAvLyBwYXJhbXMgPSBwYXJhbXMuYXBwZW5kKGZpbHRlckl0ZW0uQWN0aW9uUGFyYW1ldGVyTmFtZSwgZm9ybS5jb250cm9sc1tmaWx0ZXJJdGVtLkZvcm1Db250cm9sTmFtZV0udmFsdWUgPT0gdW5kZWZpbmVkID8gJycgOiBmb3JtLmNvbnRyb2xzW2ZpbHRlckl0ZW0uRm9ybUNvbnRyb2xOYW1lXS52YWx1ZSk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gbW9kZWw7XHJcbiAgfVxyXG5cclxuICByZW1vdmVDb250cm9sKGNvbnRyb2xOYW1lOiBzdHJpbmcsIGZvcm06IEZvcm1Hcm91cCkge1xyXG4gICAgZm9ybS5yZW1vdmVDb250cm9sKGNvbnRyb2xOYW1lKTtcclxuICB9XHJcblxyXG4gIGNvcHlUb0NsaXBib2FyZCh2YWw6IHN0cmluZykge1xyXG4gICAgY29uc3Qgc2VsQm94ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGV4dGFyZWEnKTtcclxuICAgIHNlbEJveC5zdHlsZS5wb3NpdGlvbiA9ICdmaXhlZCc7XHJcbiAgICBzZWxCb3guc3R5bGUubGVmdCA9ICcwJztcclxuICAgIHNlbEJveC5zdHlsZS50b3AgPSAnMCc7XHJcbiAgICBzZWxCb3guc3R5bGUub3BhY2l0eSA9ICcwJztcclxuICAgIHNlbEJveC52YWx1ZSA9IHZhbDtcclxuICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoc2VsQm94KTtcclxuICAgIHNlbEJveC5mb2N1cygpO1xyXG4gICAgc2VsQm94LnNlbGVjdCgpO1xyXG4gICAgZG9jdW1lbnQuZXhlY0NvbW1hbmQoJ2NvcHknKTtcclxuICAgIGRvY3VtZW50LmJvZHkucmVtb3ZlQ2hpbGQoc2VsQm94KTtcclxuICAgIHRoaXMudXRpbGl0eVNlcnZpY2Uubm90aWZ5U3VjY2Vzc01lc3NhZ2UodGhpcy5sKCdDb3BpZWRTdWNjZXNzZnVsbHknKSk7XHJcbiAgfVxyXG5cclxuICBhZGRSZXF1aXJlZFJ1bGUoY29udHJvbDogQWJzdHJhY3RDb250cm9sLCBjb250cm9sT3B0aW9uczogYW55KSB7XHJcbiAgICB0aGlzLmNvbnRyb2xVdGlsaXR5LmFkZFJlcXVpcmVkVG9Db250cm9sKGNvbnRyb2wsIGNvbnRyb2xPcHRpb25zKTtcclxuICB9XHJcblxyXG4gIHJlbW92ZVJlcXVpcmVkUnVsZShjb250cm9sOiBBYnN0cmFjdENvbnRyb2wsIGNvbnRyb2xPcHRpb25zOiBhbnkpIHtcclxuICAgIHRoaXMuY29udHJvbFV0aWxpdHkucmVtb3ZlUmVxdWlyZWRGcm9tQ29udHJvbChjb250cm9sLCBjb250cm9sT3B0aW9ucyk7XHJcbiAgfVxyXG5cclxuICB2YWxpZGF0ZURhdGVzKFxyXG4gICAgZm9ybTogRm9ybUdyb3VwLFxyXG4gICAgZnJvbURhdGVDb250cm9sOiBzdHJpbmcsXHJcbiAgICB0b0RhdGVDb250cm9sOiBzdHJpbmcsXHJcbiAgICB2YWxpZGF0aW9uTWVzc2FnZUtleTogc3RyaW5nXHJcbiAgKTogQ3VzdG9tVmFsaWRhdGlvbiB7XHJcbiAgICB2YXIgdmFsaWRhdG9yID0gbmV3IEN1c3RvbVZhbGlkYXRpb24oKTtcclxuICAgIHZhbGlkYXRvci5mdW5jdGlvbkJvZHkgPSAoY29udHJvbCkgPT4ge1xyXG4gICAgICBsZXQgZnJvbURhdGUgPSBmb3JtLmNvbnRyb2xzW2Zyb21EYXRlQ29udHJvbF0udmFsdWU7XHJcbiAgICAgIGxldCB0b0RhdGUgPSBmb3JtLmNvbnRyb2xzW3RvRGF0ZUNvbnRyb2xdLnZhbHVlO1xyXG5cclxuICAgICAgaWYgKGZyb21EYXRlICYmIHRvRGF0ZSAmJiB0b0RhdGUgPD0gZnJvbURhdGUpXHJcbiAgICAgICAgcmV0dXJuIHsgY3VzdG9tZXJFcnJvcjogdHJ1ZSB9O1xyXG5cclxuICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9O1xyXG4gICAgdmFsaWRhdG9yLm1hc3NhZ2UgPSB0aGlzLmwodmFsaWRhdGlvbk1lc3NhZ2VLZXkpO1xyXG4gICAgcmV0dXJuIHZhbGlkYXRvcjtcclxuICB9XHJcblxyXG4gIG9uU3VjY2Vzc0FkZEhhbmRsZXIgPSAoc3VjY2VzczogYW55KSA9PiB7XHJcbiAgICB0aGlzLnV0aWxpdHlTZXJ2aWNlLm5vdGlmeVN1Y2Nlc3NNZXNzYWdlKFxyXG4gICAgICB0aGlzLmwoJ1JlY29yZEFkZGVkJyksXHJcbiAgICAgIG51bGwsXHJcbiAgICAgIG51bGwsXHJcbiAgICAgIGZhbHNlXHJcbiAgICApO1xyXG4gIH07XHJcblxyXG4gIG9uU3VjY2Vzc0VkaXRIYW5kbGVyID0gKHN1Y2Nlc3M6IGFueSkgPT4ge1xyXG4gICAgdGhpcy51dGlsaXR5U2VydmljZS5ub3RpZnlTdWNjZXNzTWVzc2FnZShcclxuICAgICAgdGhpcy5sKCdSZWNvcmRVcGRhdGVkJyksXHJcbiAgICAgIG51bGwsXHJcbiAgICAgIG51bGwsXHJcbiAgICAgIGZhbHNlXHJcbiAgICApO1xyXG4gIH07XHJcblxyXG4gIG9uU3VjY2Vzc0RlbGV0ZUhhbmRsZXIgPSAoc3VjY2VzczogYW55KSA9PiB7XHJcbiAgICB0aGlzLnV0aWxpdHlTZXJ2aWNlLm5vdGlmeVN1Y2Nlc3NNZXNzYWdlKFxyXG4gICAgICB0aGlzLmwoJ1JlY29yZERlbGV0ZWQnKSxcclxuICAgICAgbnVsbCxcclxuICAgICAgbnVsbCxcclxuICAgICAgZmFsc2VcclxuICAgICk7XHJcbiAgfTtcclxuXHJcbiAgcmVjYWxjdWxhdGVQYWdlVGl0bGUoKSB7XHJcbiAgICB0aGlzLnRpdGxlU2VydmljZS5zZXRUaXRsZSh0aGlzLmNhbGN1bGF0ZVBhZ2VUaXRsZSgnJykpO1xyXG4gIH1cclxuXHJcbiAgaXNFbmdsaXNoKCkge1xyXG4gICAgcmV0dXJuIHRoaXMudXRpbGl0eVNlcnZpY2UuaXNDdXJyZW50TGFuZ3VhZ2VFbmdsaXNoKCk7XHJcbiAgfVxyXG5cclxuICBjYWxjdWxhdGVJbml0aWFscyhuYW1lOiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gICAgbGV0IGxhbmd1YWdlID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0oJ2xhbmd1YWdlJyk7XHJcbiAgICBsZXQgY3VycmVudFVzZXIgPSBBdXRoU2VydmljZS51c2VyLnByb2ZpbGU7XHJcbiAgICBjb25zb2xlLmxvZyhjdXJyZW50VXNlcik7XHJcbiAgICBsZXQgdXNlck5hbWUgPVxyXG4gICAgICBsYW5ndWFnZSA9PSAnZW4nID8gY3VycmVudFVzZXIuZ2l2ZW5fbmFtZUVuIDogY3VycmVudFVzZXIuZ2l2ZW5fbmFtZUFyO1xyXG4gICAgaWYgKGN1cnJlbnRVc2VyKSB7XHJcbiAgICAgIGxldCBmdWxsTmFtZSA9IHVzZXJOYW1lLnNwbGl0KCcgJyk7XHJcbiAgICAgIGxldCBpbml0aWFsczogc3RyaW5nO1xyXG4gICAgICBpZiAoZnVsbE5hbWUubGVuZ3RoID4gMSkge1xyXG4gICAgICAgIGlmICh0aGlzLmlzRU4pXHJcbiAgICAgICAgICBpbml0aWFscyA9IGZ1bGxOYW1lLnNoaWZ0KCkuY2hhckF0KDApICsgZnVsbE5hbWUucG9wKCkuY2hhckF0KDApO1xyXG4gICAgICAgIGVsc2VcclxuICAgICAgICAgIGluaXRpYWxzID1cclxuICAgICAgICAgICAgZnVsbE5hbWUuc2hpZnQoKS5jaGFyQXQoMCkgKyAnICcgKyBmdWxsTmFtZS5wb3AoKS5jaGFyQXQoMCk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgaW5pdGlhbHMgPSBmdWxsTmFtZS5wb3AoKS5jaGFyQXQoMCk7XHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuIGluaXRpYWxzLnRvVXBwZXJDYXNlKCk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gJyc7XHJcbiAgfVxyXG5cclxuICBnZXRDdXJyZW50VXNlckluaXRpYWxzKCk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gdGhpcy5jYWxjdWxhdGVJbml0aWFscyh0aGlzLmF1aFNlcnZpY2UubmFtZSgpKTtcclxuICB9XHJcblxyXG4gIGdldEN1cnJlbnRGYWlsT3Zlcih2YWw6IEVuZ2xpc2hBcmFiaWNEVE8pOiBzdHJpbmcge1xyXG4gICAgaWYgKHRoaXMuaXNFbmdsaXNoKCkpIHtcclxuICAgICAgaWYgKHZhbC5lbmdsaXNoKSByZXR1cm4gdmFsLmVuZ2xpc2g7XHJcbiAgICAgIGVsc2UgcmV0dXJuIHZhbC5hcmFiaWM7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBpZiAodmFsLmFyYWJpYykgcmV0dXJuIHZhbC5hcmFiaWM7XHJcbiAgICAgIGVsc2UgcmV0dXJuIHZhbC5lbmdsaXNoO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcblxyXG4gIC8vI3JlZ2lvbiB2YWxpZGF0aW9uIGFjdGlvbnNcclxuXHJcbiAgYWRkUmVxdWlyZWRWYWxpZGF0aW9uKGN1c3RvbUNvbnRyb2xPcHRpb246IGFueVtdLCBmb3JtOiBGb3JtR3JvdXAsIGZvcm1PcHRpb25zOiBGb3JtT3B0aW9ucyk6IHZvaWQge1xyXG4gICAgY3VzdG9tQ29udHJvbE9wdGlvbi5mb3JFYWNoKGNvbnRyb2wgPT4ge1xyXG4gICAgICBpZiAoZm9ybS5nZXQoY29udHJvbC5OYW1lKSlcclxuICAgICAgICB0aGlzLmFkZFJlcXVpcmVkUnVsZShmb3JtLmdldChjb250cm9sLk5hbWUpLCBmb3JtT3B0aW9ucyk7XHJcbiAgICAgIGVsc2VcclxuICAgICAgICBjb250cm9sLklzUmVxdWlyZWQgPSB0cnVlO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICByZW1vdmVSZXF1aXJlZFZhbGlkYXRpb24oY3VzdG9tQ29udHJvbE9wdGlvbjogYW55W10sIGZvcm06IEZvcm1Hcm91cCwgZm9ybU9wdGlvbnM6IEZvcm1PcHRpb25zKTogdm9pZCB7XHJcbiAgICBjdXN0b21Db250cm9sT3B0aW9uLmZvckVhY2goY29udHJvbCA9PiB7XHJcbiAgICAgIGlmIChmb3JtLmdldChjb250cm9sLk5hbWUpKVxyXG4gICAgICAgIHRoaXMucmVtb3ZlUmVxdWlyZWRSdWxlKGZvcm0uZ2V0KGNvbnRyb2wuTmFtZSksIGZvcm1PcHRpb25zKTtcclxuICAgICAgZWxzZVxyXG4gICAgICAgIGNvbnRyb2wuSXNSZXF1aXJlZCA9IGZhbHNlO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICByZXNldEZvcm1Db250cm9sc1ZhbHVlKGN1c3RvbUNvbnRyb2xzT3B0aW9uczogYW55W10sIGZvcm06IEZvcm1Hcm91cCk6IHZvaWQge1xyXG4gICAgY3VzdG9tQ29udHJvbHNPcHRpb25zLmZvckVhY2gob3B0aW9uID0+IHtcclxuICAgICAgbGV0IGZvcm1Db250cm9sID0gZm9ybS5nZXQob3B0aW9uLk5hbWUpO1xyXG4gICAgICBpZiAoZm9ybUNvbnRyb2wpXHJcbiAgICAgICAgZm9ybUNvbnRyb2wucmVzZXQoKTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgLy8jZW5kcmVnaW9uXHJcblxyXG59XHJcbiJdfQ==
|