@simpleangularcontrols/sac-common 10.0.0-rc.2 → 10.0.0-rc.21
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/bundles/simpleangularcontrols-sac-common.umd.js +2232 -1604
- package/bundles/simpleangularcontrols-sac-common.umd.js.map +1 -1
- package/bundles/simpleangularcontrols-sac-common.umd.min.js +1 -1
- package/bundles/simpleangularcontrols-sac-common.umd.min.js.map +1 -1
- package/common/basedatetimecontrol.d.ts +100 -14
- package/common/baseinputcontrol.d.ts +0 -4
- package/common/basemodelcontrol.d.ts +55 -27
- package/common/baseuploadcontrol.d.ts +71 -55
- package/controls/checkbox/checkbox.d.ts +12 -3
- package/controls/checkbox/radiobutton.d.ts +61 -26
- package/controls/contextmenu/contextmenu.d.ts +26 -19
- package/controls/contextmenu/contextmenu.interface.d.ts +3 -0
- package/controls/contextmenu/contextmenuitem.d.ts +5 -0
- package/controls/contextmenu/contextmenuitembutton.d.ts +21 -20
- package/controls/datetime/date.d.ts +28 -31
- package/controls/datetime/datetime.d.ts +27 -31
- package/controls/datetime/time.d.ts +26 -30
- package/controls/dialog/dialog.d.ts +31 -43
- package/controls/grid/grid.d.ts +38 -36
- package/controls/grid/gridbutton.d.ts +13 -13
- package/controls/grid/gridcolumn.d.ts +8 -8
- package/controls/grid/gridcolumnaction.d.ts +3 -3
- package/controls/grid/gridcolumnbase.d.ts +45 -37
- package/controls/grid/gridimage.d.ts +2 -2
- package/controls/grid/model.d.ts +51 -42
- package/controls/grid/paging.d.ts +41 -43
- package/controls/input/input.d.ts +3 -3
- package/controls/input/inputarea.d.ts +5 -5
- package/controls/input/inputpassword.d.ts +7 -7
- package/controls/input/inputsearch.d.ts +13 -4
- package/controls/layout/formlayout.d.ts +17 -1
- package/controls/list/buildvaluestring.d.ts +6 -0
- package/controls/list/dropdown.d.ts +9 -51
- package/controls/list/dropdownoptions.d.ts +38 -0
- package/controls/multilanguage/multilanguageinput.d.ts +2 -2
- package/controls/multilanguage/multilanguageinputarea.d.ts +4 -4
- package/controls/static/formcontainer.d.ts +7 -3
- package/controls/tooltip/tooltip.d.ts +76 -69
- package/controls/treeview/treeview.d.ts +107 -107
- package/esm2015/common/basedatetimecontrol.js +185 -30
- package/esm2015/common/baseinputcontrol.js +2 -7
- package/esm2015/common/basemodelcontrol.js +109 -57
- package/esm2015/common/baseuploadcontrol.js +92 -59
- package/esm2015/controls/checkbox/checkbox.js +29 -6
- package/esm2015/controls/checkbox/radiobutton.js +94 -45
- package/esm2015/controls/contextmenu/contextmenu.interface.js +1 -0
- package/esm2015/controls/contextmenu/contextmenu.interface.ngfactory.js +7 -0
- package/esm2015/controls/contextmenu/contextmenu.js +22 -23
- package/esm2015/controls/contextmenu/contextmenuitem.js +13 -2
- package/esm2015/controls/contextmenu/contextmenuitembutton.js +34 -25
- package/esm2015/controls/datetime/date.js +44 -43
- package/esm2015/controls/datetime/datetime.js +43 -43
- package/esm2015/controls/datetime/time.js +43 -43
- package/esm2015/controls/dialog/dialog.js +41 -83
- package/esm2015/controls/grid/grid.js +21 -21
- package/esm2015/controls/grid/gridbutton.js +19 -13
- package/esm2015/controls/grid/gridcolumn.js +14 -7
- package/esm2015/controls/grid/gridcolumnaction.js +6 -5
- package/esm2015/controls/grid/gridcolumnbase.js +67 -55
- package/esm2015/controls/grid/gridimage.js +3 -3
- package/esm2015/controls/grid/model.js +51 -30
- package/esm2015/controls/grid/paging.js +40 -42
- package/esm2015/controls/input/input.js +6 -8
- package/esm2015/controls/input/inputarea.js +19 -12
- package/esm2015/controls/input/inputpassword.js +12 -12
- package/esm2015/controls/input/inputsearch.js +35 -6
- package/esm2015/controls/layout/formlayout.js +20 -8
- package/esm2015/controls/list/buildvaluestring.js +18 -0
- package/esm2015/controls/{treeview/ngtreeitemaction.ngfactory.js → list/buildvaluestring.ngfactory.js} +1 -1
- package/esm2015/controls/list/dropdown.js +16 -114
- package/esm2015/controls/list/dropdownoptions.js +72 -0
- package/esm2015/controls/{treeview/treeviewchild.ngfactory.js → list/dropdownoptions.ngfactory.js} +1 -1
- package/esm2015/controls/multilanguage/multilanguageinput.js +8 -14
- package/esm2015/controls/multilanguage/multilanguageinputarea.js +9 -15
- package/esm2015/controls/static/formcontainer.js +16 -5
- package/esm2015/controls/tooltip/tooltip.js +126 -245
- package/esm2015/controls/treeview/treeview.js +276 -231
- package/esm2015/interfaces/ISacConfigurationService.js +1 -1
- package/esm2015/interfaces/ISacIconService.js +1 -1
- package/esm2015/interfaces/ISacUploadEventCompleteState.js +1 -0
- package/esm2015/interfaces/ISacUploadEventCompleteState.ngfactory.js +7 -0
- package/esm2015/interfaces/ISacValidationKeyService.js +1 -1
- package/esm2015/interfaces/treeviewaction.interface.js +1 -0
- package/esm2015/interfaces/treeviewaction.interface.ngfactory.js +7 -0
- package/esm2015/public_api.js +15 -8
- package/esm2015/services/sac-configuration.service.js +31 -5
- package/esm2015/services/sac-icon.service.js +37 -1
- package/esm2015/services/sac-localisation.service.js +69 -180
- package/esm2015/services/sac-validationkey.service.js +12 -9
- package/esm2015/simpleangularcontrols-sac-common.js +1 -7
- package/esm2015/utilities/enums.js +5 -1
- package/esm2015/utilities/guid.js +4 -2
- package/esm2015/utilities/popuphelper.js +343 -0
- package/esm2015/utilities/popuphelper.ngfactory.js +7 -0
- package/esm2015/validation/equals.validator.js +14 -0
- package/esm2015/validation/equals.validator.ngfactory.js +7 -0
- package/esm2015/validation/isDateValid.js +9 -1
- package/esm2015/validation/mintextlength.validator.js +23 -0
- package/esm2015/validation/mintextlength.validator.ngfactory.js +7 -0
- package/esm2015/validation/notequals.validator.js +14 -0
- package/esm2015/validation/{minlength.validator.ngfactory.js → notequals.validator.ngfactory.js} +1 -1
- package/esm2015/validation/validation.class.js +35 -6
- package/fesm2015/simpleangularcontrols-sac-common.js +2070 -1498
- package/fesm2015/simpleangularcontrols-sac-common.js.map +1 -1
- package/interfaces/ISacConfigurationService.d.ts +20 -0
- package/interfaces/ISacIconService.d.ts +24 -0
- package/interfaces/ISacUploadEventCompleteState.d.ts +5 -0
- package/interfaces/ISacUploadEventCompleteState.ngfactory.d.ts +1 -0
- package/interfaces/ISacValidationKeyService.d.ts +2 -2
- package/interfaces/treeviewaction.interface.d.ts +4 -0
- package/interfaces/treeviewaction.interface.ngfactory.d.ts +1 -0
- package/package.json +2 -2
- package/public_api.d.ts +13 -6
- package/services/sac-configuration.service.d.ts +40 -0
- package/services/sac-icon.service.d.ts +49 -1
- package/services/sac-localisation.service.d.ts +10 -10
- package/services/sac-validationkey.service.d.ts +7 -7
- package/simpleangularcontrols-sac-common-10.0.0-rc.21.tgz +0 -0
- package/simpleangularcontrols-sac-common.d.ts +0 -6
- package/simpleangularcontrols-sac-common.metadata.json +1 -1
- package/utilities/enums.d.ts +3 -1
- package/utilities/popuphelper.d.ts +83 -0
- package/utilities/popuphelper.ngfactory.d.ts +1 -0
- package/validation/equals.validator.d.ts +2 -0
- package/validation/equals.validator.ngfactory.d.ts +1 -0
- package/validation/mintextlength.validator.d.ts +2 -0
- package/validation/mintextlength.validator.ngfactory.d.ts +1 -0
- package/validation/notequals.validator.d.ts +2 -0
- package/validation/notequals.validator.ngfactory.d.ts +1 -0
- package/validation/validation.class.d.ts +22 -3
- package/controls/treeview/ngtreeitemaction.d.ts +0 -40
- package/controls/treeview/treeviewchild.d.ts +0 -12
- package/esm2015/controls/treeview/ngtreeitemaction.js +0 -60
- package/esm2015/controls/treeview/treeviewchild.js +0 -18
- package/esm2015/validation/minlength.validator.js +0 -21
- package/simpleangularcontrols-sac-common-10.0.0-rc.2.tgz +0 -0
- package/validation/minlength.validator.d.ts +0 -2
- /package/controls/{treeview/ngtreeitemaction.ngfactory.d.ts → contextmenu/contextmenu.interface.ngfactory.d.ts} +0 -0
- /package/controls/{treeview/treeviewchild.ngfactory.d.ts → list/buildvaluestring.ngfactory.d.ts} +0 -0
- /package/{validation/minlength.validator.ngfactory.d.ts → controls/list/dropdownoptions.ngfactory.d.ts} +0 -0
|
@@ -1,13 +1,13 @@
|
|
|
1
|
-
import { Directive, Host, Injector, Input, } from '@angular/core';
|
|
2
|
-
import { FormControlName, FormGroupDirective, NgControl, } from '@angular/forms';
|
|
3
|
-
import { Observable } from 'rxjs';
|
|
4
1
|
import { SacFormLayoutCommon } from '../controls/layout/formlayout';
|
|
5
2
|
import { ControlHeight } from '../enums/ControlHeight';
|
|
6
|
-
import { SACVALIDATIONKEY_SERVICE, SacDefaultValidationKeyService, } from '../services';
|
|
7
|
-
import { SACCONFIGURATION_SERVICE, SacDefaultConfigurationService
|
|
8
|
-
import { SACLOCALISATION_SERVICE, SacDefaultLocalisationService
|
|
3
|
+
import { SACICON_SERVICE, SACVALIDATIONKEY_SERVICE, SacDefaultIconService, SacDefaultValidationKeyService, } from '../services';
|
|
4
|
+
import { SACCONFIGURATION_SERVICE, SacDefaultConfigurationService } from '../services/sac-configuration.service';
|
|
5
|
+
import { SACLOCALISATION_SERVICE, SacDefaultLocalisationService } from '../services/sac-localisation.service';
|
|
9
6
|
import { convertToBoolean } from '../utilities/convertion';
|
|
10
7
|
import { createGuid } from '../utilities/guid';
|
|
8
|
+
import { Directive, Host, Injector, Input } from '@angular/core';
|
|
9
|
+
import { FormControlName, FormGroupDirective, NgControl, } from '@angular/forms';
|
|
10
|
+
import { Observable } from 'rxjs';
|
|
11
11
|
/**
|
|
12
12
|
* Abstract Klasse für SacBaseModelControl. Implements ControlValueAccessor, Validator, OnInit
|
|
13
13
|
*/
|
|
@@ -26,6 +26,9 @@ export class SacBaseModelControl {
|
|
|
26
26
|
* Inline Errors für das Control
|
|
27
27
|
*/
|
|
28
28
|
this._inlineerrorenabled = null;
|
|
29
|
+
/**
|
|
30
|
+
* Label Text
|
|
31
|
+
*/
|
|
29
32
|
this._label = '';
|
|
30
33
|
/**
|
|
31
34
|
* Boolean Property dirty; default Wert - false
|
|
@@ -47,6 +50,10 @@ export class SacBaseModelControl {
|
|
|
47
50
|
* Form layout instance if exists
|
|
48
51
|
*/
|
|
49
52
|
this.formlayout = null;
|
|
53
|
+
/**
|
|
54
|
+
* ControlHeight enum for use in HTML markup
|
|
55
|
+
*/
|
|
56
|
+
this.ControlHeight = ControlHeight;
|
|
50
57
|
/**
|
|
51
58
|
* Defines the standard height of the components
|
|
52
59
|
*/
|
|
@@ -59,6 +66,10 @@ export class SacBaseModelControl {
|
|
|
59
66
|
* Deaktiviert das Label im Template
|
|
60
67
|
*/
|
|
61
68
|
this.disablelabel = false;
|
|
69
|
+
/**
|
|
70
|
+
* Text to support the user during input.
|
|
71
|
+
*/
|
|
72
|
+
this.helptext = '';
|
|
62
73
|
/**
|
|
63
74
|
* defines that error messages are displayed under the controls
|
|
64
75
|
*/
|
|
@@ -95,10 +106,6 @@ export class SacBaseModelControl {
|
|
|
95
106
|
* Name des Controls
|
|
96
107
|
*/
|
|
97
108
|
this.name = createGuid();
|
|
98
|
-
/**
|
|
99
|
-
* ControlHeight enum for use in HTML markup
|
|
100
|
-
*/
|
|
101
|
-
this.ControlHeight = ControlHeight;
|
|
102
109
|
/**
|
|
103
110
|
* Leere Implementation von "propagateChange". Muss gemacht werden, damit kein Fehler entsteht
|
|
104
111
|
*/
|
|
@@ -107,61 +114,55 @@ export class SacBaseModelControl {
|
|
|
107
114
|
* Leere Implementation von "propagateTouch". Muss gemacht werden, damit kein Fehler entsteht
|
|
108
115
|
*/
|
|
109
116
|
this.propagateTouch = () => { };
|
|
117
|
+
/**
|
|
118
|
+
* Detach label text and tooltip from each other in Label so that label and tooltip can be aligned differently. This is in Bootstrap 3 not supported!
|
|
119
|
+
*/
|
|
120
|
+
this.splitlabelandhelptext = null;
|
|
110
121
|
this.formlayout = formlayout;
|
|
111
122
|
this.validationKeyService = injector.get(SACVALIDATIONKEY_SERVICE, new SacDefaultValidationKeyService());
|
|
112
123
|
this.lngResourceService = injector.get(SACLOCALISATION_SERVICE, new SacDefaultLocalisationService(this.validationKeyService));
|
|
113
124
|
this.configurationService = injector.get(SACCONFIGURATION_SERVICE, new SacDefaultConfigurationService());
|
|
125
|
+
this.iconService = injector.get(SACICON_SERVICE, new SacDefaultIconService());
|
|
114
126
|
}
|
|
115
127
|
// #endregion Constructors
|
|
116
128
|
// #region Public Getters And Setters
|
|
117
129
|
/**
|
|
118
|
-
*
|
|
130
|
+
* Get Icon for Helptext Tooltip
|
|
119
131
|
*/
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
this._inlineerrorenabled = null;
|
|
123
|
-
}
|
|
124
|
-
else {
|
|
125
|
-
this._inlineerrorenabled = convertToBoolean(value);
|
|
126
|
-
}
|
|
127
|
-
}
|
|
128
|
-
/**
|
|
129
|
-
* Definiert den Label Text
|
|
130
|
-
*/
|
|
131
|
-
set label(v) {
|
|
132
|
-
this._label = v;
|
|
133
|
-
this.UpdateLabelToControl();
|
|
134
|
-
}
|
|
135
|
-
/**
|
|
136
|
-
* Set Methode für NgModel Binding in Html Markup
|
|
137
|
-
* Input wird benötigt, damit der Wert auch über das Markup gesetzt werden kann.
|
|
138
|
-
*/
|
|
139
|
-
set value(v) {
|
|
140
|
-
if (this.disabled) {
|
|
141
|
-
return;
|
|
142
|
-
}
|
|
143
|
-
this._value = this.ConvertInputValue(v);
|
|
144
|
-
this.propagateChange(this._value);
|
|
132
|
+
get HelptextTooltipIcon() {
|
|
133
|
+
return this.iconService.GenericHelptextIcon;
|
|
145
134
|
}
|
|
146
135
|
/**
|
|
147
136
|
* Methode ergibt Boolean Wert für dirty
|
|
148
137
|
*/
|
|
149
138
|
get dirty() {
|
|
150
|
-
if (this.ngControl !== null) {
|
|
139
|
+
if (this.ngControl !== null && this.ngControl !== undefined) {
|
|
151
140
|
this._dirty = this.ngControl.dirty;
|
|
152
141
|
}
|
|
153
142
|
return this._dirty;
|
|
154
143
|
}
|
|
144
|
+
/**
|
|
145
|
+
* Show error messages inline
|
|
146
|
+
*/
|
|
155
147
|
get inlineerrorenabled() {
|
|
156
148
|
return this._inlineerrorenabled;
|
|
157
149
|
}
|
|
150
|
+
/**
|
|
151
|
+
* Aktiviert oder Deaktiviert die Inline Errors für das Control
|
|
152
|
+
*/
|
|
153
|
+
set inlineerrorenabled(value) {
|
|
154
|
+
if (value === null || value === undefined) {
|
|
155
|
+
this._inlineerrorenabled = null;
|
|
156
|
+
}
|
|
157
|
+
else {
|
|
158
|
+
this._inlineerrorenabled = convertToBoolean(value);
|
|
159
|
+
}
|
|
160
|
+
}
|
|
158
161
|
/**
|
|
159
162
|
* Methode ergibt boolean Wert wenn Form invalid oder nicht invalid ist
|
|
160
163
|
*/
|
|
161
164
|
get invalid() {
|
|
162
|
-
return
|
|
163
|
-
this.ngControl !== null &&
|
|
164
|
-
this.ngControl.invalid);
|
|
165
|
+
return this.ngControl !== undefined && this.ngControl !== null && this.ngControl.invalid;
|
|
165
166
|
}
|
|
166
167
|
/**
|
|
167
168
|
* Definiert ob das Control disabled ist
|
|
@@ -173,13 +174,17 @@ export class SacBaseModelControl {
|
|
|
173
174
|
* Returns whether the inline error messages are active for this control.
|
|
174
175
|
*/
|
|
175
176
|
get isinlineerrorenabled() {
|
|
176
|
-
var _a
|
|
177
|
-
if (
|
|
178
|
-
((_b = this.formlayout) === null || _b === void 0 ? void 0 : _b.IsInlineErrorEnabled) === undefined) {
|
|
177
|
+
var _a;
|
|
178
|
+
if (this._inlineerrorenabled !== null) {
|
|
179
179
|
return this._inlineerrorenabled;
|
|
180
180
|
}
|
|
181
|
-
|
|
182
|
-
this.
|
|
181
|
+
if (this.formlayout !== null && this.formlayout.IsInlineErrorEnabled !== null) {
|
|
182
|
+
return (_a = this.formlayout) === null || _a === void 0 ? void 0 : _a.IsInlineErrorEnabled;
|
|
183
|
+
}
|
|
184
|
+
if (this.configurationService.InlineErrorEnabled !== null) {
|
|
185
|
+
return this.configurationService.InlineErrorEnabled;
|
|
186
|
+
}
|
|
187
|
+
return true;
|
|
183
188
|
}
|
|
184
189
|
/**
|
|
185
190
|
* Definiert den Label Text
|
|
@@ -187,6 +192,13 @@ export class SacBaseModelControl {
|
|
|
187
192
|
get label() {
|
|
188
193
|
return this._label;
|
|
189
194
|
}
|
|
195
|
+
/**
|
|
196
|
+
* Definiert den Label Text
|
|
197
|
+
*/
|
|
198
|
+
set label(v) {
|
|
199
|
+
this._label = v;
|
|
200
|
+
this.UpdateLabelToControl();
|
|
201
|
+
}
|
|
190
202
|
/**
|
|
191
203
|
* returns an object with all label sizes. These values can then be transferred to corresponding CSS classes using a pipe
|
|
192
204
|
*/
|
|
@@ -204,7 +216,7 @@ export class SacBaseModelControl {
|
|
|
204
216
|
* Methode ergibt Boolean Wert für touched
|
|
205
217
|
*/
|
|
206
218
|
get touched() {
|
|
207
|
-
if (this.ngControl !== null) {
|
|
219
|
+
if (this.ngControl !== null && this.ngControl !== undefined) {
|
|
208
220
|
this._touched = this.ngControl.touched;
|
|
209
221
|
}
|
|
210
222
|
return this._touched;
|
|
@@ -215,6 +227,17 @@ export class SacBaseModelControl {
|
|
|
215
227
|
get value() {
|
|
216
228
|
return this._value;
|
|
217
229
|
}
|
|
230
|
+
/**
|
|
231
|
+
* Set Methode für NgModel Binding in Html Markup
|
|
232
|
+
* Input wird benötigt, damit der Wert auch über das Markup gesetzt werden kann.
|
|
233
|
+
*/
|
|
234
|
+
set value(v) {
|
|
235
|
+
if (this.disabled) {
|
|
236
|
+
return;
|
|
237
|
+
}
|
|
238
|
+
this._value = this.ConvertInputValue(v);
|
|
239
|
+
this.propagateChange(this._value);
|
|
240
|
+
}
|
|
218
241
|
// #endregion Public Getters And Setters
|
|
219
242
|
// #region Public Methods
|
|
220
243
|
/**
|
|
@@ -253,30 +276,31 @@ export class SacBaseModelControl {
|
|
|
253
276
|
return this.lngResourceService.GetString(errorItem.errorMessageKey, parameters);
|
|
254
277
|
}
|
|
255
278
|
/**
|
|
256
|
-
*
|
|
279
|
+
* Init Event
|
|
257
280
|
*/
|
|
258
|
-
|
|
281
|
+
ngOnInit() {
|
|
259
282
|
// receive form via formcontrolname or formcontrol instance
|
|
260
283
|
const formControl = this.injector.get(NgControl, null);
|
|
261
284
|
if (formControl instanceof FormControlName) {
|
|
262
285
|
const form = this.injector.get(FormGroupDirective, null);
|
|
263
286
|
this.ngControl = form.getControl(formControl);
|
|
264
287
|
}
|
|
265
|
-
else
|
|
266
|
-
|
|
288
|
+
else {
|
|
289
|
+
if (formControl) {
|
|
290
|
+
this.ngControl = formControl.control;
|
|
291
|
+
}
|
|
267
292
|
}
|
|
268
293
|
this.UpdateLabelToControl();
|
|
269
|
-
}
|
|
270
|
-
/**
|
|
271
|
-
* Init Event
|
|
272
|
-
*/
|
|
273
|
-
ngOnInit() {
|
|
274
294
|
// set label sizes from formlayout directive
|
|
275
295
|
this.setLabelSizes();
|
|
276
296
|
// set component heigth from fromlayout directive
|
|
277
297
|
this.setComponentHeight();
|
|
278
298
|
// set adaptive label property from formlayout directive
|
|
279
299
|
this.setIsAdaptiveLabel();
|
|
300
|
+
// set method to display helptext
|
|
301
|
+
this.setHelpTextMode();
|
|
302
|
+
// set SplitMode for Labels
|
|
303
|
+
this.setLabelSplitMode();
|
|
280
304
|
this.OnClassInit();
|
|
281
305
|
}
|
|
282
306
|
/**
|
|
@@ -330,7 +354,7 @@ export class SacBaseModelControl {
|
|
|
330
354
|
writeValue(value) {
|
|
331
355
|
this._value = value;
|
|
332
356
|
}
|
|
333
|
-
// #endregion Public
|
|
357
|
+
// #endregion Public Methods
|
|
334
358
|
// #region Protected Methods
|
|
335
359
|
/**
|
|
336
360
|
* Method can Overwriten in Parent Classes
|
|
@@ -381,6 +405,20 @@ export class SacBaseModelControl {
|
|
|
381
405
|
}
|
|
382
406
|
}
|
|
383
407
|
}
|
|
408
|
+
/**
|
|
409
|
+
* Set mode for helptext. Can be tooltip or text
|
|
410
|
+
*/
|
|
411
|
+
setHelpTextMode() {
|
|
412
|
+
var _a;
|
|
413
|
+
if (!this.helptextmode) {
|
|
414
|
+
if ((_a = this.formlayout) === null || _a === void 0 ? void 0 : _a.helptextmode) {
|
|
415
|
+
this.helptextmode = this.formlayout.helptextmode;
|
|
416
|
+
}
|
|
417
|
+
else {
|
|
418
|
+
this.helptextmode = this.configurationService.HelptextMode;
|
|
419
|
+
}
|
|
420
|
+
}
|
|
421
|
+
}
|
|
384
422
|
/**
|
|
385
423
|
* Set adaptive label property from parent layout control
|
|
386
424
|
*/
|
|
@@ -455,6 +493,17 @@ export class SacBaseModelControl {
|
|
|
455
493
|
}
|
|
456
494
|
}
|
|
457
495
|
}
|
|
496
|
+
setLabelSplitMode() {
|
|
497
|
+
var _a;
|
|
498
|
+
if (!this.splitlabelandhelptext) {
|
|
499
|
+
if ((_a = this.formlayout) === null || _a === void 0 ? void 0 : _a.splitlabelandhelptext) {
|
|
500
|
+
this.splitlabelandhelptext = this.formlayout.splitlabelandhelptext;
|
|
501
|
+
}
|
|
502
|
+
else {
|
|
503
|
+
this.splitlabelandhelptext = this.configurationService.SplitLabelAndHelptext;
|
|
504
|
+
}
|
|
505
|
+
}
|
|
506
|
+
}
|
|
458
507
|
}
|
|
459
508
|
SacBaseModelControl.decorators = [
|
|
460
509
|
{ type: Directive }
|
|
@@ -467,6 +516,8 @@ SacBaseModelControl.propDecorators = {
|
|
|
467
516
|
componentHeight: [{ type: Input }],
|
|
468
517
|
disabled: [{ type: Input }],
|
|
469
518
|
disablelabel: [{ type: Input }],
|
|
519
|
+
helptext: [{ type: Input }],
|
|
520
|
+
helptextmode: [{ type: Input }],
|
|
470
521
|
inlineError: [{ type: Input }],
|
|
471
522
|
isAdaptiveLabel: [{ type: Input }],
|
|
472
523
|
labelSizeLg: [{ type: Input }],
|
|
@@ -476,8 +527,9 @@ SacBaseModelControl.propDecorators = {
|
|
|
476
527
|
labelSizeXs: [{ type: Input }],
|
|
477
528
|
labelSizeXxl: [{ type: Input }],
|
|
478
529
|
name: [{ type: Input }],
|
|
530
|
+
splitlabelandhelptext: [{ type: Input }],
|
|
479
531
|
inlineerrorenabled: [{ type: Input }],
|
|
480
532
|
label: [{ type: Input }],
|
|
481
533
|
value: [{ type: Input }]
|
|
482
534
|
};
|
|
483
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzZW1vZGVsY29udHJvbC5qcyIsInNvdXJjZVJvb3QiOiJDOi9Qcm9qZWt0ZS9zaW1wbGVhbmd1bGFyY29udHJvbHMtbmcxMC9jaC5qbmV0d29yay5zYWMtY29udHJvbHMvcHJvamVjdHMvc2FjLWNvbW1vbi9zcmMvIiwic291cmNlcyI6WyJjb21tb24vYmFzZW1vZGVsY29udHJvbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBRUwsU0FBUyxFQUNULElBQUksRUFDSixRQUFRLEVBQ1IsS0FBSyxHQUVOLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFJTCxlQUFlLEVBQ2Ysa0JBQWtCLEVBQ2xCLFNBQVMsR0FHVixNQUFNLGdCQUFnQixDQUFDO0FBQ3hCLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDbEMsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFDcEUsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBTXZELE9BQU8sRUFDTCx3QkFBd0IsRUFDeEIsOEJBQThCLEdBQy9CLE1BQU0sYUFBYSxDQUFDO0FBQ3JCLE9BQU8sRUFDTCx3QkFBd0IsRUFDeEIsOEJBQThCLEdBQy9CLE1BQU0sdUNBQXVDLENBQUM7QUFDL0MsT0FBTyxFQUNMLHVCQUF1QixFQUN2Qiw2QkFBNkIsR0FDOUIsTUFBTSxzQ0FBc0MsQ0FBQztBQUM5QyxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUMzRCxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFFL0M7O0dBRUc7QUFFSCxNQUFNLE9BQWdCLG1CQUFtQjtJQTBIdkMsd0JBQXdCO0lBRXhCLHVCQUF1QjtJQUV2Qjs7OztPQUlHO0lBQ0gsWUFDVSxVQUErQixFQUMvQixRQUFrQjtRQUFsQixhQUFRLEdBQVIsUUFBUSxDQUFVO1FBbEk1QixxQkFBcUI7UUFFckI7O1dBRUc7UUFDSyx3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OzBCQUlMLEtBQUs7OEJBSUwsS0FBSzswQkFJTCxLQUFLOzBCQUtMLEtBQUs7MEJBS0wsS0FBSzswQkFLTCxLQUFLOzBCQUtMLEtBQUs7MkJBS0wsS0FBSzttQkFLTCxLQUFLO2lDQXVETCxLQUFLO29CQVlMLEtBQUs7b0JBU0wsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XHJcbiAgQWZ0ZXJWaWV3SW5pdCxcclxuICBEaXJlY3RpdmUsXHJcbiAgSG9zdCxcclxuICBJbmplY3RvcixcclxuICBJbnB1dCxcclxuICBPbkluaXQsXHJcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7XHJcbiAgQWJzdHJhY3RDb250cm9sLFxyXG4gIENvbnRyb2xWYWx1ZUFjY2Vzc29yLFxyXG4gIEZvcm1Db250cm9sLFxyXG4gIEZvcm1Db250cm9sTmFtZSxcclxuICBGb3JtR3JvdXBEaXJlY3RpdmUsXHJcbiAgTmdDb250cm9sLFxyXG4gIFZhbGlkYXRpb25FcnJvcnMsXHJcbiAgVmFsaWRhdG9yLFxyXG59IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuaW1wb3J0IHsgT2JzZXJ2YWJsZSB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBTYWNGb3JtTGF5b3V0Q29tbW9uIH0gZnJvbSAnLi4vY29udHJvbHMvbGF5b3V0L2Zvcm1sYXlvdXQnO1xyXG5pbXBvcnQgeyBDb250cm9sSGVpZ2h0IH0gZnJvbSAnLi4vZW51bXMvQ29udHJvbEhlaWdodCc7XHJcbmltcG9ydCB7IElTYWNDb25maWd1cmF0aW9uU2VydmljZSB9IGZyb20gJy4uL2ludGVyZmFjZXMvSVNhY0NvbmZpZ3VyYXRpb25TZXJ2aWNlJztcclxuaW1wb3J0IHsgSVNhY0xhYmVsU2l6ZXMgfSBmcm9tICcuLi9pbnRlcmZhY2VzL0lTYWNMYWJlbFNpemVzJztcclxuaW1wb3J0IHsgSVNhY0xvY2FsaXNhdGlvblNlcnZpY2UgfSBmcm9tICcuLi9pbnRlcmZhY2VzL0lTYWNMb2NhbGlzYXRpb25TZXJ2aWNlJztcclxuaW1wb3J0IHsgSVNhY1ZhbGlkYXRpb25LZXlTZXJ2aWNlIH0gZnJvbSAnLi4vaW50ZXJmYWNlcy9JU2FjVmFsaWRhdGlvbktleVNlcnZpY2UnO1xyXG5pbXBvcnQgeyBJQWJzdHJhY3RDb250cm9sTGFiZWxFeHRlbnNpb24gfSBmcm9tICcuLi9pbnRlcmZhY2VzL2lhYnN0cmFjdGNvbnRyb2xsYWJlbCc7XHJcbmltcG9ydCB7XHJcbiAgU0FDVkFMSURBVElPTktFWV9TRVJWSUNFLFxyXG4gIFNhY0RlZmF1bHRWYWxpZGF0aW9uS2V5U2VydmljZSxcclxufSBmcm9tICcuLi9zZXJ2aWNlcyc7XHJcbmltcG9ydCB7XHJcbiAgU0FDQ09ORklHVVJBVElPTl9TRVJWSUNFLFxyXG4gIFNhY0RlZmF1bHRDb25maWd1cmF0aW9uU2VydmljZSxcclxufSBmcm9tICcuLi9zZXJ2aWNlcy9zYWMtY29uZmlndXJhdGlvbi5zZXJ2aWNlJztcclxuaW1wb3J0IHtcclxuICBTQUNMT0NBTElTQVRJT05fU0VSVklDRSxcclxuICBTYWNEZWZhdWx0TG9jYWxpc2F0aW9uU2VydmljZSxcclxufSBmcm9tICcuLi9zZXJ2aWNlcy9zYWMtbG9jYWxpc2F0aW9uLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBjb252ZXJ0VG9Cb29sZWFuIH0gZnJvbSAnLi4vdXRpbGl0aWVzL2NvbnZlcnRpb24nO1xyXG5pbXBvcnQgeyBjcmVhdGVHdWlkIH0gZnJvbSAnLi4vdXRpbGl0aWVzL2d1aWQnO1xyXG5pbXBvcnQgeyBWYWxpZGF0aW9uRXJyb3JJdGVtIH0gZnJvbSAnLi4vdmFsaWRhdGlvbic7XHJcbi8qKlxyXG4gKiBBYnN0cmFjdCBLbGFzc2UgZsO8ciBTYWNCYXNlTW9kZWxDb250cm9sLiBJbXBsZW1lbnRzIENvbnRyb2xWYWx1ZUFjY2Vzc29yLCBWYWxpZGF0b3IsIE9uSW5pdFxyXG4gKi9cclxuQERpcmVjdGl2ZSgpXHJcbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBTYWNCYXNlTW9kZWxDb250cm9sPFZBTFVFPlxyXG4gIGltcGxlbWVudHMgQ29udHJvbFZhbHVlQWNjZXNzb3IsIFZhbGlkYXRvciwgT25Jbml0LCBBZnRlclZpZXdJbml0XHJcbntcclxuICAvLyAjcmVnaW9uIFByb3BlcnRpZXNcclxuXHJcbiAgLyoqXHJcbiAgICogSW5saW5lIEVycm9ycyBmw7xyIGRhcyBDb250cm9sXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBfaW5saW5lZXJyb3JlbmFibGVkOiBib29sZWFuIHwgbnVsbCA9IG51bGw7XHJcbiAgcHJpdmF0ZSBfbGFiZWw6IHN0cmluZyA9ICcnO1xyXG5cclxuICAvKipcclxuICAgKiBTZXJ2aWNlIGZvciBsb2FkaW5nIGRlZmF1bHQgc2V0dGluZ3MgZm9yIHRoZSBjb250cm9sc1xyXG4gICAqL1xyXG4gIHByb3RlY3RlZCByZWFkb25seSBjb25maWd1cmF0aW9uU2VydmljZTogSVNhY0NvbmZpZ3VyYXRpb25TZXJ2aWNlO1xyXG5cclxuICAvKipcclxuICAgKiBCb29sZWFuIFByb3BlcnR5IGRpcnR5OyBkZWZhdWx0IFdlcnQgLSBmYWxzZVxyXG4gICAqL1xyXG4gIHByb3RlY3RlZCBfZGlydHk6IGJvb2xlYW4gPSBmYWxzZTtcclxuICAvKipcclxuICAgKiBTYWNNb2RlbCBGb3JtIGlzdCBkaXNhYmxlZFxyXG4gICAqL1xyXG4gIHByb3RlY3RlZCBfZGlzYWJsZWRGb3JtOiBib29sZWFuID0gZmFsc2U7XHJcbiAgLyoqXHJcbiAgICogVmFsaWRhdG9yXHJcbiAgICovXHJcbiAgcHJvdGVjdGVkIF9vbkNoYW5nZTogKCkgPT4gdm9pZDtcclxuICAvKipcclxuICAgKiBCb29sZWFuIFByb3BlcnR5IHRvdWNoZWQ7IGRlZmF1bHQgV2VydCAtIGZhbHNlXHJcbiAgICovXHJcbiAgcHJvdGVjdGVkIF90b3VjaGVkOiBib29sZWFuID0gZmFsc2U7XHJcbiAgLyoqXHJcbiAgICogSW50ZXJuZSBWYXJpYWJsZSwgZGllIGRlbiBXZXJ0IGRlcyBDb250cm9scyBow6RsdFxyXG4gICAqL1xyXG4gIHByb3RlY3RlZCBfdmFsdWU6IFZBTFVFID0gbnVsbDtcclxuICAvKipcclxuICAgKiBGb3JtIGxheW91dCBpbnN0YW5jZSBpZiBleGlzdHNcclxuICAgKi9cclxuICBwcm90ZWN0ZWQgZm9ybWxheW91dDogU2FjRm9ybUxheW91dENvbW1vbiA9IG51bGw7XHJcbiAgLyoqXHJcbiAgICogU2VydmljZSBmw7xyIEVycm9yIExvY2FsaXNhdGlvblxyXG4gICAqL1xyXG4gIHByb3RlY3RlZCBsbmdSZXNvdXJjZVNlcnZpY2U6IElTYWNMb2NhbGlzYXRpb25TZXJ2aWNlO1xyXG4gIC8qKlxyXG4gICAqIG5nQ29udHJvbFxyXG4gICAqL1xyXG4gIHByb3RlY3RlZCBuZ0NvbnRyb2w6IEZvcm1Db250cm9sO1xyXG5cclxuICAvKipcclxuICAgKiBEZWZpbmVzIHRoZSBzdGFuZGFyZCBoZWlnaHQgb2YgdGhlIGNvbXBvbmVudHNcclxuICAgKi9cclxuICBASW5wdXQoKVxyXG4gIHB1YmxpYyBjb21wb25lbnRIZWlnaHQ6IENvbnRyb2xIZWlnaHQgfCBudWxsID0gbnVsbDtcclxuICAvKipcclxuICAgKiBEZWFrdGl2aWVydCBkYXMgSW5wdXQgQ29udHJvbFxyXG4gICAqL1xyXG4gIEBJbnB1dCgpIHB1YmxpYyBkaXNhYmxlZDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIC8qKlxyXG4gICAqIERlYWt0aXZpZXJ0IGRhcyBMYWJlbCBpbSBUZW1wbGF0ZVxyXG4gICAqL1xyXG4gIEBJbnB1dCgpIHB1YmxpYyBkaXNhYmxlbGFiZWw6IGJvb2xlYW4gPSBmYWxzZTtcclxuICAvKipcclxuICAgKiBkZWZpbmVzIHRoYXQgZXJyb3IgbWVzc2FnZXMgYXJlIGRpc3BsYXllZCB1bmRlciB0aGUgY29udHJvbHNcclxuICAgKi9cclxuICBASW5wdXQoKSBwdWJsaWMgaW5saW5lRXJyb3I6IGJvb2xlYW4gPSB0cnVlO1xyXG4gIC8qKlxyXG4gICAqIGRlZmluZXMgdGhhdCB0aGUgbGFiZWxzIGFyZSBkaXNwbGF5ZWQgYXMgYWRhcHRpdmUgbGFiZWxzXHJcbiAgICovXHJcbiAgQElucHV0KCkgcHVibGljIGlzQWRhcHRpdmVMYWJlbDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIC8qKlxyXG4gICAqIGRlZmF1bHQgbGFiZSBzaXplIGZvciBsYXJnZSBkZXZpY2VzXHJcbiAgICovXHJcbiAgQElucHV0KClcclxuICBwdWJsaWMgbGFiZWxTaXplTGc6IG51bWJlciB8IG51bGwgPSBudWxsO1xyXG4gIC8qKlxyXG4gICAqIGRlZmF1bHQgbGFiZWwgc2l6ZSBmb3IgbWVkaXVtIGRldmljZXNcclxuICAgKi9cclxuICBASW5wdXQoKVxyXG4gIHB1YmxpYyBsYWJlbFNpemVNZDogbnVtYmVyIHwgbnVsbCA9IG51bGw7XHJcbiAgLyoqXHJcbiAgICogZGVmYXVsdCBsYWJlbCBzaXplIGZvciBzbWFsbCBkZXZpY2VzXHJcbiAgICovXHJcbiAgQElucHV0KClcclxuICBwdWJsaWMgbGFiZWxTaXplU206IG51bWJlciB8IG51bGwgPSBudWxsO1xyXG4gIC8qKlxyXG4gICAqIGRlZmF1bHQgbGFiZWwgc2l6ZSBmb3IgZXh0cmEgbGFyZ2UgZGV2aWNlc1xyXG4gICAqL1xyXG4gIEBJbnB1dCgpXHJcbiAgcHVibGljIGxhYmVsU2l6ZVhsOiBudW1iZXIgfCBudWxsID0gbnVsbDtcclxuICAvKipcclxuICAgKiBkZWZhdWx0IGxhYmVsIGNvbHVtbiBzaXplXHJcbiAgICovXHJcbiAgQElucHV0KClcclxuICBwdWJsaWMgbGFiZWxTaXplWHM6IG51bWJlciB8IG51bGwgPSBudWxsO1xyXG4gIC8qKlxyXG4gICAqIGRlZmF1bHQgbGFiZWwgc2l6ZSBmb3IgZXh0cmEgZXh0cmEgbGFyZ2UgZGV2aWNlc1xyXG4gICAqL1xyXG4gIEBJbnB1dCgpXHJcbiAgcHVibGljIGxhYmVsU2l6ZVh4bDogbnVtYmVyIHwgbnVsbCA9IG51bGw7XHJcbiAgLyoqXHJcbiAgICogTmFtZSBkZXMgQ29udHJvbHNcclxuICAgKi9cclxuICBASW5wdXQoKSBwdWJsaWMgbmFtZTogc3RyaW5nID0gY3JlYXRlR3VpZCgpO1xyXG5cclxuICAvKipcclxuICAgKiBDb250cm9sSGVpZ2h0IGVudW0gZm9yIHVzZSBpbiBIVE1MIG1hcmt1cFxyXG4gICAqL1xyXG4gIHB1YmxpYyBDb250cm9sSGVpZ2h0OiB0eXBlb2YgQ29udHJvbEhlaWdodCA9IENvbnRyb2xIZWlnaHQ7XHJcbiAgLyoqXHJcbiAgICogTGVlcmUgSW1wbGVtZW50YXRpb24gdm9uIFwicHJvcGFnYXRlQ2hhbmdlXCIuIE11c3MgZ2VtYWNodCB3ZXJkZW4sIGRhbWl0IGtlaW4gRmVobGVyIGVudHN0ZWh0XHJcbiAgICovXHJcbiAgcHVibGljIHByb3BhZ2F0ZUNoYW5nZTogYW55ID0gKCkgPT4ge307XHJcbiAgLyoqXHJcbiAgICogTGVlcmUgSW1wbGVtZW50YXRpb24gdm9uIFwicHJvcGFnYXRlVG91Y2hcIi4gTXVzcyBnZW1hY2h0IHdlcmRlbiwgZGFtaXQga2VpbiBGZWhsZXIgZW50c3RlaHRcclxuICAgKi9cclxuICBwdWJsaWMgcHJvcGFnYXRlVG91Y2g6IGFueSA9ICgpID0+IHt9O1xyXG4gIC8qKlxyXG4gICAqIFNlcnZpY2UgdG8gcmVjZWl2ZSBzdGFuZGFyZCB2YWxpZGF0aW9uIG1lc3NhZ2Uga2V5cyBhbmQgdGV4dHNcclxuICAgKi9cclxuICBwdWJsaWMgdmFsaWRhdGlvbktleVNlcnZpY2U6IElTYWNWYWxpZGF0aW9uS2V5U2VydmljZTtcclxuXHJcbiAgLy8gI2VuZHJlZ2lvbiBQcm9wZXJ0aWVzXHJcblxyXG4gIC8vICNyZWdpb24gQ29uc3RydWN0b3JzXHJcblxyXG4gIC8qKlxyXG4gICAqIENvbnN0cnVjdG9yXHJcbiAgICogQHBhcmFtIGZvcm1sYXlvdXQgU2FjRm9ybUxheW91dENvbW1vbiB0byBkZWZpbmUgc2NvcGVkIGxheW91dCBzZXR0aW5nc1xyXG4gICAqIEBwYXJhbSBpbmplY3RvciBJbmplY3RvciBmb3IgaW5qZWN0aW5nIHNlcnZpY2VzXHJcbiAgICovXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBASG9zdCgpIGZvcm1sYXlvdXQ6IFNhY0Zvcm1MYXlvdXRDb21tb24sXHJcbiAgICBwcml2YXRlIGluamVjdG9yOiBJbmplY3RvclxyXG4gICkge1xyXG4gICAgdGhpcy5mb3JtbGF5b3V0ID0gZm9ybWxheW91dDtcclxuICAgIHRoaXMudmFsaWRhdGlvbktleVNlcnZpY2UgPSBpbmplY3Rvci5nZXQoXHJcbiAgICAgIFNBQ1ZBTElEQVRJT05LRVlfU0VSVklDRSxcclxuICAgICAgbmV3IFNhY0RlZmF1bHRWYWxpZGF0aW9uS2V5U2VydmljZSgpXHJcbiAgICApO1xyXG4gICAgdGhpcy5sbmdSZXNvdXJjZVNlcnZpY2UgPSBpbmplY3Rvci5nZXQoXHJcbiAgICAgIFNBQ0xPQ0FMSVNBVElPTl9TRVJWSUNFLFxyXG4gICAgICBuZXcgU2FjRGVmYXVsdExvY2FsaXNhdGlvblNlcnZpY2UodGhpcy52YWxpZGF0aW9uS2V5U2VydmljZSlcclxuICAgICk7XHJcblxyXG4gICAgdGhpcy5jb25maWd1cmF0aW9uU2VydmljZSA9IGluamVjdG9yLmdldChcclxuICAgICAgU0FDQ09ORklHVVJBVElPTl9TRVJWSUNFLFxyXG4gICAgICBuZXcgU2FjRGVmYXVsdENvbmZpZ3VyYXRpb25TZXJ2aWNlKClcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICAvLyAjZW5kcmVnaW9uIENvbnN0cnVjdG9yc1xyXG5cclxuICAvLyAjcmVnaW9uIFB1YmxpYyBHZXR0ZXJzIEFuZCBTZXR0ZXJzXHJcblxyXG4gIC8qKlxyXG4gICAqIEFrdGl2aWVydCBvZGVyIERlYWt0aXZpZXJ0IGRpZSBJbmxpbmUgRXJyb3JzIGbDvHIgZGFzIENvbnRyb2xcclxuICAgKi9cclxuICBASW5wdXQoKVxyXG4gIHB1YmxpYyBzZXQgaW5saW5lZXJyb3JlbmFibGVkKHZhbHVlOiBib29sZWFuIHwgbnVsbCkge1xyXG4gICAgaWYgKHZhbHVlID09PSBudWxsIHx8IHZhbHVlID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgdGhpcy5faW5saW5lZXJyb3JlbmFibGVkID0gbnVsbDtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuX2lubGluZWVycm9yZW5hYmxlZCA9IGNvbnZlcnRUb0Jvb2xlYW4odmFsdWUpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogRGVmaW5pZXJ0IGRlbiBMYWJlbCBUZXh0XHJcbiAgICovXHJcbiAgQElucHV0KCkgcHVibGljIHNldCBsYWJlbCh2OiBzdHJpbmcpIHtcclxuICAgIHRoaXMuX2xhYmVsID0gdjtcclxuICAgIHRoaXMuVXBkYXRlTGFiZWxUb0NvbnRyb2woKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFNldCBNZXRob2RlIGbDvHIgTmdNb2RlbCBCaW5kaW5nIGluIEh0bWwgTWFya3VwXHJcbiAgICogSW5wdXQgd2lyZCBiZW7DtnRpZ3QsIGRhbWl0IGRlciBXZXJ0IGF1Y2ggw7xiZXIgZGFzIE1hcmt1cCBnZXNldHp0IHdlcmRlbiBrYW5uLlxyXG4gICAqL1xyXG4gIEBJbnB1dCgpXHJcbiAgcHVibGljIHNldCB2YWx1ZSh2OiBWQUxVRSkge1xyXG4gICAgaWYgKHRoaXMuZGlzYWJsZWQpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuX3ZhbHVlID0gdGhpcy5Db252ZXJ0SW5wdXRWYWx1ZSh2KTtcclxuICAgIHRoaXMucHJvcGFnYXRlQ2hhbmdlKHRoaXMuX3ZhbHVlKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIE1ldGhvZGUgZXJnaWJ0IEJvb2xlYW4gV2VydCBmw7xyIGRpcnR5XHJcbiAgICovXHJcbiAgcHVibGljIGdldCBkaXJ0eSgpOiBib29sZWFuIHtcclxuICAgIGlmICh0aGlzLm5nQ29udHJvbCAhPT0gbnVsbCkge1xyXG4gICAgICB0aGlzLl9kaXJ0eSA9IHRoaXMubmdDb250cm9sLmRpcnR5O1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiB0aGlzLl9kaXJ0eTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXQgaW5saW5lZXJyb3JlbmFibGVkKCk6IGJvb2xlYW4gfCBudWxsIHtcclxuICAgIHJldHVybiB0aGlzLl9pbmxpbmVlcnJvcmVuYWJsZWQ7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBNZXRob2RlIGVyZ2lidCBib29sZWFuIFdlcnQgd2VubiBGb3JtIGludmFsaWQgb2RlciBuaWNodCBpbnZhbGlkIGlzdFxyXG4gICAqL1xyXG4gIHB1YmxpYyBnZXQgaW52YWxpZCgpOiBib29sZWFuIHtcclxuICAgIHJldHVybiAoXHJcbiAgICAgIHRoaXMubmdDb250cm9sICE9PSB1bmRlZmluZWQgJiZcclxuICAgICAgdGhpcy5uZ0NvbnRyb2wgIT09IG51bGwgJiZcclxuICAgICAgdGhpcy5uZ0NvbnRyb2wuaW52YWxpZFxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIERlZmluaWVydCBvYiBkYXMgQ29udHJvbCBkaXNhYmxlZCBpc3RcclxuICAgKi9cclxuICBwdWJsaWMgZ2V0IGlzZGlzYWJsZWQoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5fZGlzYWJsZWRGb3JtIHx8IHRoaXMuZGlzYWJsZWQ7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBSZXR1cm5zIHdoZXRoZXIgdGhlIGlubGluZSBlcnJvciBtZXNzYWdlcyBhcmUgYWN0aXZlIGZvciB0aGlzIGNvbnRyb2wuXHJcbiAgICovXHJcbiAgcHVibGljIGdldCBpc2lubGluZWVycm9yZW5hYmxlZCgpOiBib29sZWFuIHtcclxuICAgIGlmIChcclxuICAgICAgdGhpcy5mb3JtbGF5b3V0Py5Jc0lubGluZUVycm9yRW5hYmxlZCA9PT0gbnVsbCB8fFxyXG4gICAgICB0aGlzLmZvcm1sYXlvdXQ/LklzSW5saW5lRXJyb3JFbmFibGVkID09PSB1bmRlZmluZWRcclxuICAgICkge1xyXG4gICAgICByZXR1cm4gdGhpcy5faW5saW5lZXJyb3JlbmFibGVkO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiAoXHJcbiAgICAgIHRoaXMuZm9ybWxheW91dC5Jc0lubGluZUVycm9yRW5hYmxlZCAhPT0gZmFsc2UgJiZcclxuICAgICAgdGhpcy5faW5saW5lZXJyb3JlbmFibGVkICE9PSBmYWxzZVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIERlZmluaWVydCBkZW4gTGFiZWwgVGV4dFxyXG4gICAqL1xyXG4gIHB1YmxpYyBnZXQgbGFiZWwoKTogc3RyaW5nIHtcclxuICAgIHJldHVybiB0aGlzLl9sYWJlbDtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIHJldHVybnMgYW4gb2JqZWN0IHdpdGggYWxsIGxhYmVsIHNpemVzLiBUaGVzZSB2YWx1ZXMgY2FuIHRoZW4gYmUgdHJhbnNmZXJyZWQgdG8gY29ycmVzcG9uZGluZyBDU1MgY2xhc3NlcyB1c2luZyBhIHBpcGVcclxuICAgKi9cclxuICBwdWJsaWMgZ2V0IGxhYmVsU2l6ZXMoKTogSVNhY0xhYmVsU2l6ZXMge1xyXG4gICAgcmV0dXJuIHtcclxuICAgICAgbGFiZWxTaXplU206IHRoaXMubGFiZWxTaXplU20sXHJcbiAgICAgIGxhYmVsU2l6ZU1kOiB0aGlzLmxhYmVsU2l6ZU1kLFxyXG4gICAgICBsYWJlbFNpemVYczogdGhpcy5sYWJlbFNpemVYcyxcclxuICAgICAgbGFiZWxTaXplWGw6IHRoaXMubGFiZWxTaXplWGwsXHJcbiAgICAgIGxhYmVsU2l6ZVh4bDogdGhpcy5sYWJlbFNpemVYeGwsXHJcbiAgICAgIGxhYmVsU2l6ZUxnOiB0aGlzLmxhYmVsU2l6ZUxnLFxyXG4gICAgfTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIE1ldGhvZGUgZXJnaWJ0IEJvb2xlYW4gV2VydCBmw7xyIHRvdWNoZWRcclxuICAgKi9cclxuICBwdWJsaWMgZ2V0IHRvdWNoZWQoKTogYm9vbGVhbiB7XHJcbiAgICBpZiAodGhpcy5uZ0NvbnRyb2wgIT09IG51bGwpIHtcclxuICAgICAgdGhpcy5fdG91Y2hlZCA9IHRoaXMubmdDb250cm9sLnRvdWNoZWQ7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHRoaXMuX3RvdWNoZWQ7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBHZXQgTWV0aG9kZSBmw7xyIE5nTW9kZWwgQmluZGluZyBpbiBIdG1sIE1hcmt1cFxyXG4gICAqL1xyXG4gIHB1YmxpYyBnZXQgdmFsdWUoKTogVkFMVUUge1xyXG4gICAgcmV0dXJuIHRoaXMuX3ZhbHVlO1xyXG4gIH1cclxuXHJcbiAgLy8gI2VuZHJlZ2lvbiBQdWJsaWMgR2V0dGVycyBBbmQgU2V0dGVyc1xyXG5cclxuICAvLyAjcmVnaW9uIFB1YmxpYyBNZXRob2RzXHJcblxyXG4gIC8qKlxyXG4gICAqIE1ldGhvZGUgZXJnaWJ0IEVycm9yIGFuaGFuZCB2b24gZ2VnZWJlbmVuIEtyaXRlcmllblxyXG4gICAqL1xyXG4gIHB1YmxpYyBHZXRFcnJvck1lc3NhZ2UoKTogT2JzZXJ2YWJsZTxzdHJpbmc+IHtcclxuICAgIGlmICh0aGlzLm5nQ29udHJvbC5lcnJvcnMgPT09IHVuZGVmaW5lZCB8fCB0aGlzLm5nQ29udHJvbC5lcnJvcnMgPT09IG51bGwpIHtcclxuICAgICAgcmV0dXJuIG5ldyBPYnNlcnZhYmxlPHN0cmluZz4oKG9ic2VydmVyKSA9PiB7XHJcbiAgICAgICAgb2JzZXJ2ZXIubmV4dCgnJyk7XHJcbiAgICAgICAgb2JzZXJ2ZXIuY29tcGxldGUoKTtcclxuICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgZXJyb3JzOiBWYWxpZGF0aW9uRXJyb3JzID0gdGhpcy5uZ0NvbnRyb2wuZXJyb3JzO1xyXG5cclxuICAgIGlmIChlcnJvcnMubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgIHJldHVybiBuZXcgT2JzZXJ2YWJsZTxzdHJpbmc+KChvYnNlcnZlcikgPT4ge1xyXG4gICAgICAgIG9ic2VydmVyLm5leHQoJycpO1xyXG4gICAgICAgIG9ic2VydmVyLmNvbXBsZXRlKCk7XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IGtleXM6IHN0cmluZ1tdID0gT2JqZWN0LmtleXMoZXJyb3JzKTtcclxuXHJcbiAgICBpZiAoa2V5cy5sZW5ndGggPD0gMCkge1xyXG4gICAgICByZXR1cm4gbmV3IE9ic2VydmFibGU8c3RyaW5nPigob2JzZXJ2ZXIpID0+IHtcclxuICAgICAgICBvYnNlcnZlci5uZXh0KCcnKTtcclxuICAgICAgICBvYnNlcnZlci5jb21wbGV0ZSgpO1xyXG4gICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBlcnJvckl0ZW06IFZhbGlkYXRpb25FcnJvckl0ZW0gPSBlcnJvcnNba2V5c1swXV07XHJcblxyXG4gICAgLy8gVmFsaWRhdGlvbiBQYXJhbWV0ZXJzXHJcbiAgICBjb25zdCBwYXJhbWV0ZXJzID0ge307XHJcbiAgICBpZiAoZXJyb3JJdGVtLnBhcmFtZXRlcnMgIT09IG51bGwgJiYgZXJyb3JJdGVtLnBhcmFtZXRlcnMgIT09IHVuZGVmaW5lZCkge1xyXG4gICAgICBlcnJvckl0ZW0ucGFyYW1ldGVycy5mb3JFYWNoKCh2LCBrKSA9PiB7XHJcbiAgICAgICAgcGFyYW1ldGVyc1trXSA9IHY7XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gICAgcGFyYW1ldGVyc1snRklFTEQnXSA9IGVycm9ySXRlbS5maWVsZE5hbWU7XHJcblxyXG4gICAgcmV0dXJuIHRoaXMubG5nUmVzb3VyY2VTZXJ2aWNlLkdldFN0cmluZyhcclxuICAgICAgZXJyb3JJdGVtLmVycm9yTWVzc2FnZUtleSxcclxuICAgICAgcGFyYW1ldGVyc1xyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEluIEFuZ3VsYXIgMTAgdGhlIENvbnRyb2wgTGFiZWwgZm9yIFJlYWN0aXZlIEZvcm1zIGNhbiBiZSBzZXQgZmlyc3QgdGltZSBoZXJlLiBXaXRoIEFuZ3VsYXIgMTMgaXMgc3VwcG9ydGVkIGJ5IGluaXQgaW4gT25Jbml0XHJcbiAgICovXHJcbiAgcHVibGljIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcclxuICAgIC8vIHJlY2VpdmUgZm9ybSB2aWEgZm9ybWNvbnRyb2xuYW1lIG9yIGZvcm1jb250cm9sIGluc3RhbmNlXHJcbiAgICBjb25zdCBmb3JtQ29udHJvbCA9IHRoaXMuaW5qZWN0b3IuZ2V0KE5nQ29udHJvbCwgbnVsbCk7XHJcbiAgICBpZiAoZm9ybUNvbnRyb2wgaW5zdGFuY2VvZiBGb3JtQ29udHJvbE5hbWUpIHtcclxuICAgICAgY29uc3QgZm9ybSA9IHRoaXMuaW5qZWN0b3IuZ2V0KEZvcm1Hcm91cERpcmVjdGl2ZSwgbnVsbCk7XHJcbiAgICAgIHRoaXMubmdDb250cm9sID0gZm9ybS5nZXRDb250cm9sKGZvcm1Db250cm9sKTtcclxuICAgIH0gZWxzZSBpZiAoZm9ybUNvbnRyb2wpIHtcclxuICAgICAgdGhpcy5uZ0NvbnRyb2wgPSBmb3JtQ29udHJvbC5jb250cm9sIGFzIEZvcm1Db250cm9sO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuVXBkYXRlTGFiZWxUb0NvbnRyb2woKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEluaXQgRXZlbnRcclxuICAgKi9cclxuICBwdWJsaWMgbmdPbkluaXQoKSB7XHJcbiAgICAvLyBzZXQgbGFiZWwgc2l6ZXMgZnJvbSBmb3JtbGF5b3V0IGRpcmVjdGl2ZVxyXG4gICAgdGhpcy5zZXRMYWJlbFNpemVzKCk7XHJcblxyXG4gICAgLy8gc2V0IGNvbXBvbmVudCBoZWlndGggZnJvbSBmcm9tbGF5b3V0IGRpcmVjdGl2ZVxyXG4gICAgdGhpcy5zZXRDb21wb25lbnRIZWlnaHQoKTtcclxuXHJcbiAgICAvLyBzZXQgYWRhcHRpdmUgbGFiZWwgcHJvcGVydHkgZnJvbSBmb3JtbGF5b3V0IGRpcmVjdGl2ZVxyXG4gICAgdGhpcy5zZXRJc0FkYXB0aXZlTGFiZWwoKTtcclxuXHJcbiAgICB0aGlzLk9uQ2xhc3NJbml0KCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBNZXRob2RlIGVyZ2lidCBib29sZWFuIHRvdWNoZWQgPSB0cnVlXHJcbiAgICovXHJcbiAgcHVibGljIG9uVG91Y2goKTogdm9pZCB7XHJcbiAgICB0aGlzLl90b3VjaGVkID0gdHJ1ZTtcclxuICAgIHRoaXMucHJvcGFnYXRlVG91Y2goKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIE1ldGhvZGUsIGRhbWl0IGFuZGVyZSBDb250cm9scyDDpG5kZXJ1bmdlbiBpbSBDb250cm9sIG1pdGJla29tbWVuIGvDtm5uZW5cclxuICAgKiBadXIgw4RuZGVydW5nc2luZm8gZGllIE1ldGhvZGUgcHJvcGFnYXRlQ2hhbmdlIGF1ZnJ1ZmVuLlxyXG4gICAqL1xyXG4gIHB1YmxpYyByZWdpc3Rlck9uQ2hhbmdlKGZuOiBhbnkpOiB2b2lkIHtcclxuICAgIHRoaXMucHJvcGFnYXRlQ2hhbmdlID0gKG9iaikgPT4gZm4ob2JqKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIE1ldGhvZGUsIGRhbWl0IGFuZGVyZSBDb250cm9scyDDpG5kZXJ1bmdlbiBtaXRiZWtvbW1lbiwgd2VubiBkYXMgQ29udHJvbCBha3RpdmllcnQgKEZvY3VzKSB3aXJkLlxyXG4gICAqL1xyXG4gIHB1YmxpYyByZWdpc3Rlck9uVG91Y2hlZChmbjogYW55KTogdm9pZCB7XHJcbiAgICB0aGlzLnByb3BhZ2F0ZVRvdWNoID0gKG9iaikgPT4gZm4ob2JqKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIE1ldGhvZGUgcmVnaXN0cmllcnQgw4RuZGVydW5nZW4gYmVpIGRlciBWYWxpZGllcnVuZ1xyXG4gICAqL1xyXG4gIHB1YmxpYyByZWdpc3Rlck9uVmFsaWRhdG9yQ2hhbmdlKGZuOiAoKSA9PiB2b2lkKTogdm9pZCB7XHJcbiAgICB0aGlzLl9vbkNoYW5nZSA9IGZuO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogU2V0enQgZGFzIENvbnRyb2wgYXVmIERpc2FibGVkXHJcbiAgICovXHJcbiAgcHVibGljIHNldERpc2FibGVkU3RhdGUoaXNEaXNhYmxlZDogYm9vbGVhbik6IHZvaWQge1xyXG4gICAgdGhpcy5fZGlzYWJsZWRGb3JtID0gaXNEaXNhYmxlZDtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIE1ldGhvZGUgZGllIGRlbiBXZXJ0IGRlcyBJbnB1dHMgc2V0enRcclxuICAgKi9cclxuICBwdWJsaWMgc2V0VmFsdWUodjogVkFMVUUpOiB2b2lkIHtcclxuICAgIHRoaXMudmFsdWUgPSB2O1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogVmFsaWRhdG9yIE1ldGhvZGVcclxuICAgKi9cclxuICBwdWJsaWMgdmFsaWRhdGUoYzogQWJzdHJhY3RDb250cm9sKTogVmFsaWRhdGlvbkVycm9ycyB8IG51bGwge1xyXG4gICAgY29uc3QgZXJyb3I6IFZhbGlkYXRpb25FcnJvcnMgfCBudWxsID0gdGhpcy52YWxpZGF0ZURhdGEoYyk7XHJcbiAgICByZXR1cm4gZXJyb3I7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBNZXRob2RlIHp1bSBzY2hyZWliZW4gdm9uIFdlcnRlbiBhdXMgZGVtIE1vZGVsIGluIGRhcyBDb250cm9sXHJcbiAgICovXHJcbiAgcHVibGljIHdyaXRlVmFsdWUodmFsdWU6IFZBTFVFKSB7XHJcbiAgICB0aGlzLl92YWx1ZSA9IHZhbHVlO1xyXG4gIH1cclxuXHJcbiAgLy8gI2VuZHJlZ2lvbiBQdWJsaWMgTWV0aG9kc1xyXG5cclxuICAvLyAjcmVnaW9uIFB1YmxpYyBBYnN0cmFjdCBNZXRob2RzXHJcblxyXG4gIC8qKlxyXG4gICAqIEFic3RyYWt0ZSBWYWxpZGF0b3IgTWV0aG9kZVxyXG4gICAqL1xyXG4gIHB1YmxpYyBhYnN0cmFjdCB2YWxpZGF0ZURhdGEoYzogQWJzdHJhY3RDb250cm9sKTogVmFsaWRhdGlvbkVycm9ycyB8IG51bGw7XHJcblxyXG4gIC8vICNlbmRyZWdpb24gUHVibGljIEFic3RyYWN0IE1ldGhvZHNcclxuXHJcbiAgLy8gI3JlZ2lvbiBQcm90ZWN0ZWQgTWV0aG9kc1xyXG5cclxuICAvKipcclxuICAgKiBNZXRob2QgY2FuIE92ZXJ3cml0ZW4gaW4gUGFyZW50IENsYXNzZXNcclxuICAgKiBAcGFyYW0gdmFsdWUgV2VydCB3ZWxjaGVyIGluIGRlbiBrb3JyZWt0ZW4gVHlwIGtvbnZlcnRpZXJ0IHdlcmRlbiBzb2xsXHJcbiAgICogQHJldHVybnMgV2VydCBpbSBrb3JyZWt0ZW4gVHlwXHJcbiAgICovXHJcbiAgcHJvdGVjdGVkIENvbnZlcnRJbnB1dFZhbHVlKHZhbHVlOiBWQUxVRSk6IFZBTFVFIHtcclxuICAgIHJldHVybiB2YWx1ZTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIE1ldGhvZGUgZXJnaWJ0IERlY2ltYWwgU3ltYm9sXHJcbiAgICovXHJcbiAgcHJvdGVjdGVkIEdldERlY2ltYWxTeW1ib2woKTogc3RyaW5nIHtcclxuICAgIHJldHVybiAnLic7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBNZXRob2QgY2FuIGJlIHVzZWQgdG8gU2V0IFByb3BlcnRpZXMgYXQgQ2xhc3MgSW5pdFxyXG4gICAqL1xyXG4gIHByb3RlY3RlZCBPbkNsYXNzSW5pdCgpOiB2b2lkIHt9XHJcblxyXG4gIC8qKlxyXG4gICAqIEFrdHVhbGlzaWVydCBkZW4gTmdNb2RlbCBXZXJ0IHVuZCBkaWUgR8O8bHRpZ2tlaXQgZGVzIFZhbGlkYXRvcnMgZGVzIENvbnRyb2xzXHJcbiAgICovXHJcbiAgcHJvdGVjdGVkIFVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5uZ0NvbnRyb2wpIHtcclxuICAgICAgdGhpcy5uZ0NvbnRyb2wudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSh7IG9ubHlTZWxmOiB0cnVlIH0pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy8gI2VuZHJlZ2lvbiBQcm90ZWN0ZWQgTWV0aG9kc1xyXG5cclxuICAvLyAjcmVnaW9uIFByaXZhdGUgTWV0aG9kc1xyXG5cclxuICBwcml2YXRlIFVwZGF0ZUxhYmVsVG9Db250cm9sKCk6IHZvaWQge1xyXG4gICAgLy8gSEFDSzogQWRkIGFkZGl0aW9uIHByb3BlcnR5IHRvIEZvcm1Db250cm9sLiBDYW4gYmUgZml4ZWQgaWYgc29sdXRpb24gZm9yIHRpY2tldDogaHR0cHM6Ly9naXRodWIuY29tL2FuZ3VsYXIvYW5ndWxhci9pc3N1ZXMvMTk2ODZcclxuICAgIGlmICh0aGlzLm5nQ29udHJvbCkge1xyXG4gICAgICAoXHJcbiAgICAgICAgdGhpcy5uZ0NvbnRyb2wgYXMgdW5rbm93biBhcyBJQWJzdHJhY3RDb250cm9sTGFiZWxFeHRlbnNpb25cclxuICAgICAgKS5jb250cm9sbGFiZWwgPSB0aGlzLmxhYmVsO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogU2V0IGNvbXBvbmVudCBoZWlnaHQgZnJvbSBwcm9wZXJ0eSBvciBwYXJlbnQgbGF5b3V0IGNvbnRyb2xcclxuICAgKi9cclxuICBwcml2YXRlIHNldENvbXBvbmVudEhlaWdodCgpIHtcclxuICAgIC8vIHNldCBzaXplIGV4dHJhIHNtYWxsXHJcbiAgICBpZiAoIXRoaXMuY29tcG9uZW50SGVpZ2h0KSB7XHJcbiAgICAgIGlmICh0aGlzLmZvcm1sYXlvdXQ/LmNvbXBvbmVudEhlaWdodCkge1xyXG4gICAgICAgIHRoaXMuY29tcG9uZW50SGVpZ2h0ID0gdGhpcy5mb3JtbGF5b3V0LmNvbXBvbmVudEhlaWdodDtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLmNvbXBvbmVudEhlaWdodCA9IHRoaXMuY29uZmlndXJhdGlvblNlcnZpY2UuQ29tcG9uZW50SGVpZ2h0O1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBTZXQgYWRhcHRpdmUgbGFiZWwgcHJvcGVydHkgZnJvbSBwYXJlbnQgbGF5b3V0IGNvbnRyb2xcclxuICAgKi9cclxuICBwcml2YXRlIHNldElzQWRhcHRpdmVMYWJlbCgpIHtcclxuICAgIGlmICghdGhpcy5pc0FkYXB0aXZlTGFiZWwpIHtcclxuICAgICAgaWYgKHRoaXMuZm9ybWxheW91dD8uaXNBZGFwdGl2ZUxhYmVsICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgICB0aGlzLmlzQWRhcHRpdmVMYWJlbCA9IHRoaXMuZm9ybWxheW91dC5pc0FkYXB0aXZlTGFiZWw7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy5pc0FkYXB0aXZlTGFiZWwgPSBmYWxzZTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogU2V0IGxhYmVsIHNpemVzIGZyb20gcHJvcGVydHkgb3IgcGFyZW50IGxheW91dCBjb250cm9sXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBzZXRMYWJlbFNpemVzKCkge1xyXG4gICAgLy8gc2V0IHNpemUgZXh0cmEgc21hbGxcclxuICAgIGlmICghdGhpcy5sYWJlbFNpemVYcykge1xyXG4gICAgICBpZiAodGhpcy5mb3JtbGF5b3V0Py5sYWJlbFNpemVYcykge1xyXG4gICAgICAgIHRoaXMubGFiZWxTaXplWHMgPSB0aGlzLmZvcm1sYXlvdXQubGFiZWxTaXplWHM7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy5sYWJlbFNpemVYcyA9IHRoaXMuY29uZmlndXJhdGlvblNlcnZpY2UuTGFiZWxTaXplWHM7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvLyBzZXQgc2l6ZSBzbWFsbFxyXG4gICAgaWYgKCF0aGlzLmxhYmVsU2l6ZVNtKSB7XHJcbiAgICAgIGlmICh0aGlzLmZvcm1sYXlvdXQ/LmxhYmVsU2l6ZVNtKSB7XHJcbiAgICAgICAgdGhpcy5sYWJlbFNpemVTbSA9IHRoaXMuZm9ybWxheW91dC5sYWJlbFNpemVTbTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLmxhYmVsU2l6ZVNtID0gdGhpcy5jb25maWd1cmF0aW9uU2VydmljZS5MYWJlbFNpemVTbTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8vIHNldCBzaXplIG1lZGl1bVxyXG4gICAgaWYgKCF0aGlzLmxhYmVsU2l6ZU1kKSB7XHJcbiAgICAgIGlmICh0aGlzLmZvcm1sYXlvdXQ/LmxhYmVsU2l6ZU1kKSB7XHJcbiAgICAgICAgdGhpcy5sYWJlbFNpemVNZCA9IHRoaXMuZm9ybWxheW91dC5sYWJlbFNpemVNZDtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLmxhYmVsU2l6ZU1kID0gdGhpcy5jb25maWd1cmF0aW9uU2VydmljZS5MYWJlbFNpemVNZDtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8vIHNldCBzaXplIGxhcmdlXHJcbiAgICBpZiAoIXRoaXMubGFiZWxTaXplTGcpIHtcclxuICAgICAgaWYgKHRoaXMuZm9ybWxheW91dD8ubGFiZWxTaXplTGcpIHtcclxuICAgICAgICB0aGlzLmxhYmVsU2l6ZUxnID0gdGhpcy5mb3JtbGF5b3V0LmxhYmVsU2l6ZUxnO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMubGFiZWxTaXplTGcgPSB0aGlzLmNvbmZpZ3VyYXRpb25TZXJ2aWNlLkxhYmVsU2l6ZUxnO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLy8gc2V0IHNpemUgZXh0cmEgbGFyZ2VcclxuICAgIGlmICghdGhpcy5sYWJlbFNpemVYbCkge1xyXG4gICAgICBpZiAodGhpcy5mb3JtbGF5b3V0Py5sYWJlbFNpemVYbCkge1xyXG4gICAgICAgIHRoaXMubGFiZWxTaXplWGwgPSB0aGlzLmZvcm1sYXlvdXQubGFiZWxTaXplWGw7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy5sYWJlbFNpemVYbCA9IHRoaXMuY29uZmlndXJhdGlvblNlcnZpY2UuTGFiZWxTaXplWGw7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvLyBzZXQgc2l6ZSBleHRyYSBleHRyYSBsYXJnZVxyXG4gICAgaWYgKCF0aGlzLmxhYmVsU2l6ZVh4bCkge1xyXG4gICAgICBpZiAodGhpcy5mb3JtbGF5b3V0Py5sYWJlbFNpemVYeGwpIHtcclxuICAgICAgICB0aGlzLmxhYmVsU2l6ZVh4bCA9IHRoaXMuZm9ybWxheW91dC5sYWJlbFNpemVYeGw7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy5sYWJlbFNpemVYeGwgPSB0aGlzLmNvbmZpZ3VyYXRpb25TZXJ2aWNlLkxhYmVsU2l6ZVh4bDtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy8gI2VuZHJlZ2lvbiBQcml2YXRlIE1ldGhvZHNcclxufVxyXG4iXX0=
|
|
535
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzZW1vZGVsY29udHJvbC5qcyIsInNvdXJjZVJvb3QiOiJDOi9Qcm9qZWt0ZS9zaW1wbGVhbmd1bGFyY29udHJvbHMtbmcxMC9jaC5qbmV0d29yay5zYWMtY29udHJvbHMvcHJvamVjdHMvc2FjLWNvbW1vbi9zcmMvIiwic291cmNlcyI6WyJjb21tb24vYmFzZW1vZGVsY29udHJvbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUNwRSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFPdkQsT0FBTyxFQUNILGVBQWUsRUFDZix3QkFBd0IsRUFDeEIscUJBQXFCLEVBQ3JCLDhCQUE4QixHQUNqQyxNQUFNLGFBQWEsQ0FBQztBQUNyQixPQUFPLEVBQUUsd0JBQXdCLEVBQUUsOEJBQThCLEVBQUUsTUFBTSx1Q0FBdUMsQ0FBQztBQUNqSCxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsNkJBQTZCLEVBQUUsTUFBTSxzQ0FBc0MsQ0FBQztBQUM5RyxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUMzRCxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFFL0MsT0FBTyxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBVSxNQUFNLGVBQWUsQ0FBQztBQUN6RSxPQUFPLEVBSUgsZUFBZSxFQUNmLGtCQUFrQixFQUNsQixTQUFTLEdBR1osTUFBTSxnQkFBZ0IsQ0FBQztBQUN4QixPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBRWxDOztHQUVHO0FBRUgsTUFBTSxPQUFnQixtQkFBbUI7SUF1S3JDLHdCQUF3QjtJQUV4Qix1QkFBdUI7SUFFdkI7Ozs7T0FJRztJQUNILFlBQW9CLFVBQStCLEVBQW1CLFFBQWtCO1FBQWxCLGFBQVEsR0FBUixRQUFRLENBQVU7UUEvS3hGLHFCQUFx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QUM7OztZQS9tQkosU0FBUzs7O1lBbkNELG1CQUFtQix1QkFvTlgsSUFBSTtZQWpNSyxRQUFROzs7OEJBd0Y3QixLQUFLO3VCQU1MLEtBQUs7MkJBS0wsS0FBSzt1QkFLTCxLQUFLOzJCQUtMLEtBQUs7MEJBTUwsS0FBSzs4QkFLTCxLQUFLOzBCQUtMLEtBQUs7MEJBTUwsS0FBSzswQkFNTCxLQUFLOzBCQU1MLEtBQUs7MEJBTUwsS0FBSzsyQkFNTCxLQUFLO21CQU1MLEtBQUs7b0NBZUwsS0FBSztpQ0E4REwsS0FBSztvQkFvREwsS0FBSztvQkF5Q0wsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFNhY0Zvcm1MYXlvdXRDb21tb24gfSBmcm9tICcuLi9jb250cm9scy9sYXlvdXQvZm9ybWxheW91dCc7XHJcbmltcG9ydCB7IENvbnRyb2xIZWlnaHQgfSBmcm9tICcuLi9lbnVtcy9Db250cm9sSGVpZ2h0JztcclxuaW1wb3J0IHsgSVNhY0NvbmZpZ3VyYXRpb25TZXJ2aWNlIH0gZnJvbSAnLi4vaW50ZXJmYWNlcy9JU2FjQ29uZmlndXJhdGlvblNlcnZpY2UnO1xyXG5pbXBvcnQgeyBJU2FjSWNvblNlcnZpY2UgfSBmcm9tICcuLi9pbnRlcmZhY2VzL0lTYWNJY29uU2VydmljZSc7XHJcbmltcG9ydCB7IElTYWNMYWJlbFNpemVzIH0gZnJvbSAnLi4vaW50ZXJmYWNlcy9JU2FjTGFiZWxTaXplcyc7XHJcbmltcG9ydCB7IElTYWNMb2NhbGlzYXRpb25TZXJ2aWNlIH0gZnJvbSAnLi4vaW50ZXJmYWNlcy9JU2FjTG9jYWxpc2F0aW9uU2VydmljZSc7XHJcbmltcG9ydCB7IElTYWNWYWxpZGF0aW9uS2V5U2VydmljZSB9IGZyb20gJy4uL2ludGVyZmFjZXMvSVNhY1ZhbGlkYXRpb25LZXlTZXJ2aWNlJztcclxuaW1wb3J0IHsgSUFic3RyYWN0Q29udHJvbExhYmVsRXh0ZW5zaW9uIH0gZnJvbSAnLi4vaW50ZXJmYWNlcy9pYWJzdHJhY3Rjb250cm9sbGFiZWwnO1xyXG5pbXBvcnQge1xyXG4gICAgU0FDSUNPTl9TRVJWSUNFLFxyXG4gICAgU0FDVkFMSURBVElPTktFWV9TRVJWSUNFLFxyXG4gICAgU2FjRGVmYXVsdEljb25TZXJ2aWNlLFxyXG4gICAgU2FjRGVmYXVsdFZhbGlkYXRpb25LZXlTZXJ2aWNlLFxyXG59IGZyb20gJy4uL3NlcnZpY2VzJztcclxuaW1wb3J0IHsgU0FDQ09ORklHVVJBVElPTl9TRVJWSUNFLCBTYWNEZWZhdWx0Q29uZmlndXJhdGlvblNlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlcy9zYWMtY29uZmlndXJhdGlvbi5zZXJ2aWNlJztcclxuaW1wb3J0IHsgU0FDTE9DQUxJU0FUSU9OX1NFUlZJQ0UsIFNhY0RlZmF1bHRMb2NhbGlzYXRpb25TZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZXMvc2FjLWxvY2FsaXNhdGlvbi5zZXJ2aWNlJztcclxuaW1wb3J0IHsgY29udmVydFRvQm9vbGVhbiB9IGZyb20gJy4uL3V0aWxpdGllcy9jb252ZXJ0aW9uJztcclxuaW1wb3J0IHsgY3JlYXRlR3VpZCB9IGZyb20gJy4uL3V0aWxpdGllcy9ndWlkJztcclxuaW1wb3J0IHsgVmFsaWRhdGlvbkVycm9ySXRlbSB9IGZyb20gJy4uL3ZhbGlkYXRpb24nO1xyXG5pbXBvcnQgeyBEaXJlY3RpdmUsIEhvc3QsIEluamVjdG9yLCBJbnB1dCwgT25Jbml0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7XHJcbiAgICBBYnN0cmFjdENvbnRyb2wsXHJcbiAgICBDb250cm9sVmFsdWVBY2Nlc3NvcixcclxuICAgIEZvcm1Db250cm9sLFxyXG4gICAgRm9ybUNvbnRyb2xOYW1lLFxyXG4gICAgRm9ybUdyb3VwRGlyZWN0aXZlLFxyXG4gICAgTmdDb250cm9sLFxyXG4gICAgVmFsaWRhdGlvbkVycm9ycyxcclxuICAgIFZhbGlkYXRvcixcclxufSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcbmltcG9ydCB7IE9ic2VydmFibGUgfSBmcm9tICdyeGpzJztcclxuXHJcbi8qKlxyXG4gKiBBYnN0cmFjdCBLbGFzc2UgZsO8ciBTYWNCYXNlTW9kZWxDb250cm9sLiBJbXBsZW1lbnRzIENvbnRyb2xWYWx1ZUFjY2Vzc29yLCBWYWxpZGF0b3IsIE9uSW5pdFxyXG4gKi9cclxuQERpcmVjdGl2ZSgpXHJcbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBTYWNCYXNlTW9kZWxDb250cm9sPFZBTFVFPiBpbXBsZW1lbnRzIENvbnRyb2xWYWx1ZUFjY2Vzc29yLCBWYWxpZGF0b3IsIE9uSW5pdCB7XHJcbiAgICAvLyAjcmVnaW9uIFByb3BlcnRpZXNcclxuXHJcbiAgICAvKipcclxuICAgICAqIElubGluZSBFcnJvcnMgZsO8ciBkYXMgQ29udHJvbFxyXG4gICAgICovXHJcbiAgICBwcml2YXRlIF9pbmxpbmVlcnJvcmVuYWJsZWQ6IGJvb2xlYW4gfCBudWxsID0gbnVsbDtcclxuXHJcbiAgICAvKipcclxuICAgICAqIExhYmVsIFRleHRcclxuICAgICAqL1xyXG4gICAgcHJpdmF0ZSBfbGFiZWw6IHN0cmluZyA9ICcnO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2VydmljZSBmb3IgbG9hZGluZyBkZWZhdWx0IHNldHRpbmdzIGZvciB0aGUgY29udHJvbHNcclxuICAgICAqL1xyXG4gICAgcHJvdGVjdGVkIHJlYWRvbmx5IGNvbmZpZ3VyYXRpb25TZXJ2aWNlOiBJU2FjQ29uZmlndXJhdGlvblNlcnZpY2U7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBCb29sZWFuIFByb3BlcnR5IGRpcnR5OyBkZWZhdWx0IFdlcnQgLSBmYWxzZVxyXG4gICAgICovXHJcbiAgICBwcm90ZWN0ZWQgX2RpcnR5OiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTYWNNb2RlbCBGb3JtIGlzdCBkaXNhYmxlZFxyXG4gICAgICovXHJcbiAgICBwcm90ZWN0ZWQgX2Rpc2FibGVkRm9ybTogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogVmFsaWRhdG9yXHJcbiAgICAgKi9cclxuICAgIHByb3RlY3RlZCBfb25DaGFuZ2U6ICgpID0+IHZvaWQ7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBCb29sZWFuIFByb3BlcnR5IHRvdWNoZWQ7IGRlZmF1bHQgV2VydCAtIGZhbHNlXHJcbiAgICAgKi9cclxuICAgIHByb3RlY3RlZCBfdG91Y2hlZDogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogSW50ZXJuZSBWYXJpYWJsZSwgZGllIGRlbiBXZXJ0IGRlcyBDb250cm9scyBow6RsdFxyXG4gICAgICovXHJcbiAgICBwcm90ZWN0ZWQgX3ZhbHVlOiBWQUxVRSA9IG51bGw7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBGb3JtIGxheW91dCBpbnN0YW5jZSBpZiBleGlzdHNcclxuICAgICAqL1xyXG4gICAgcHJvdGVjdGVkIGZvcm1sYXlvdXQ6IFNhY0Zvcm1MYXlvdXRDb21tb24gPSBudWxsO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogaWNvbiBzZXJ2aWNlXHJcbiAgICAgKi9cclxuICAgIHByb3RlY3RlZCBpY29uU2VydmljZTogSVNhY0ljb25TZXJ2aWNlO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2VydmljZSBmw7xyIEVycm9yIExvY2FsaXNhdGlvblxyXG4gICAgICovXHJcbiAgICBwcm90ZWN0ZWQgbG5nUmVzb3VyY2VTZXJ2aWNlOiBJU2FjTG9jYWxpc2F0aW9uU2VydmljZTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIG5nQ29udHJvbFxyXG4gICAgICovXHJcbiAgICBwcm90ZWN0ZWQgbmdDb250cm9sOiBGb3JtQ29udHJvbDtcclxuXHJcbiAgICAvKipcclxuICAgICAqIENvbnRyb2xIZWlnaHQgZW51bSBmb3IgdXNlIGluIEhUTUwgbWFya3VwXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBDb250cm9sSGVpZ2h0OiB0eXBlb2YgQ29udHJvbEhlaWdodCA9IENvbnRyb2xIZWlnaHQ7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBEZWZpbmVzIHRoZSBzdGFuZGFyZCBoZWlnaHQgb2YgdGhlIGNvbXBvbmVudHNcclxuICAgICAqL1xyXG4gICAgQElucHV0KClcclxuICAgIHB1YmxpYyBjb21wb25lbnRIZWlnaHQ6IENvbnRyb2xIZWlnaHQgfCBudWxsID0gbnVsbDtcclxuXHJcbiAgICAvKipcclxuICAgICAqIERlYWt0aXZpZXJ0IGRhcyBJbnB1dCBDb250cm9sXHJcbiAgICAgKi9cclxuICAgIEBJbnB1dCgpIHB1YmxpYyBkaXNhYmxlZDogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogRGVha3RpdmllcnQgZGFzIExhYmVsIGltIFRlbXBsYXRlXHJcbiAgICAgKi9cclxuICAgIEBJbnB1dCgpIHB1YmxpYyBkaXNhYmxlbGFiZWw6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRleHQgdG8gc3VwcG9ydCB0aGUgdXNlciBkdXJpbmcgaW5wdXQuXHJcbiAgICAgKi9cclxuICAgIEBJbnB1dCgpIHB1YmxpYyBoZWxwdGV4dDogc3RyaW5nID0gJyc7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBNb2RlIGZvciBkaXNwbGF5IGhlbHB0ZXh0XHJcbiAgICAgKi9cclxuICAgIEBJbnB1dCgpXHJcbiAgICBwdWJsaWMgaGVscHRleHRtb2RlOiAndG9vbHRpcCcgfCAndGV4dCcgfCBudWxsO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogZGVmaW5lcyB0aGF0IGVycm9yIG1lc3NhZ2VzIGFyZSBkaXNwbGF5ZWQgdW5kZXIgdGhlIGNvbnRyb2xzXHJcbiAgICAgKi9cclxuICAgIEBJbnB1dCgpIHB1YmxpYyBpbmxpbmVFcnJvcjogYm9vbGVhbiA9IHRydWU7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBkZWZpbmVzIHRoYXQgdGhlIGxhYmVscyBhcmUgZGlzcGxheWVkIGFzIGFkYXB0aXZlIGxhYmVsc1xyXG4gICAgICovXHJcbiAgICBASW5wdXQoKSBwdWJsaWMgaXNBZGFwdGl2ZUxhYmVsOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBkZWZhdWx0IGxhYmUgc2l6ZSBmb3IgbGFyZ2UgZGV2aWNlc1xyXG4gICAgICovXHJcbiAgICBASW5wdXQoKVxyXG4gICAgcHVibGljIGxhYmVsU2l6ZUxnOiBudW1iZXIgfCBudWxsID0gbnVsbDtcclxuXHJcbiAgICAvKipcclxuICAgICAqIGRlZmF1bHQgbGFiZWwgc2l6ZSBmb3IgbWVkaXVtIGRldmljZXNcclxuICAgICAqL1xyXG4gICAgQElucHV0KClcclxuICAgIHB1YmxpYyBsYWJlbFNpemVNZDogbnVtYmVyIHwgbnVsbCA9IG51bGw7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBkZWZhdWx0IGxhYmVsIHNpemUgZm9yIHNtYWxsIGRldmljZXNcclxuICAgICAqL1xyXG4gICAgQElucHV0KClcclxuICAgIHB1YmxpYyBsYWJlbFNpemVTbTogbnVtYmVyIHwgbnVsbCA9IG51bGw7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBkZWZhdWx0IGxhYmVsIHNpemUgZm9yIGV4dHJhIGxhcmdlIGRldmljZXNcclxuICAgICAqL1xyXG4gICAgQElucHV0KClcclxuICAgIHB1YmxpYyBsYWJlbFNpemVYbDogbnVtYmVyIHwgbnVsbCA9IG51bGw7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBkZWZhdWx0IGxhYmVsIGNvbHVtbiBzaXplXHJcbiAgICAgKi9cclxuICAgIEBJbnB1dCgpXHJcbiAgICBwdWJsaWMgbGFiZWxTaXplWHM6IG51bWJlciB8IG51bGwgPSBudWxsO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogZGVmYXVsdCBsYWJlbCBzaXplIGZvciBleHRyYSBleHRyYSBsYXJnZSBkZXZpY2VzXHJcbiAgICAgKi9cclxuICAgIEBJbnB1dCgpXHJcbiAgICBwdWJsaWMgbGFiZWxTaXplWHhsOiBudW1iZXIgfCBudWxsID0gbnVsbDtcclxuXHJcbiAgICAvKipcclxuICAgICAqIE5hbWUgZGVzIENvbnRyb2xzXHJcbiAgICAgKi9cclxuICAgIEBJbnB1dCgpIHB1YmxpYyBuYW1lOiBzdHJpbmcgPSBjcmVhdGVHdWlkKCk7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBMZWVyZSBJbXBsZW1lbnRhdGlvbiB2b24gXCJwcm9wYWdhdGVDaGFuZ2VcIi4gTXVzcyBnZW1hY2h0IHdlcmRlbiwgZGFtaXQga2VpbiBGZWhsZXIgZW50c3RlaHRcclxuICAgICAqL1xyXG4gICAgcHVibGljIHByb3BhZ2F0ZUNoYW5nZTogYW55ID0gKCkgPT4ge307XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBMZWVyZSBJbXBsZW1lbnRhdGlvbiB2b24gXCJwcm9wYWdhdGVUb3VjaFwiLiBNdXNzIGdlbWFjaHQgd2VyZGVuLCBkYW1pdCBrZWluIEZlaGxlciBlbnRzdGVodFxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgcHJvcGFnYXRlVG91Y2g6IGFueSA9ICgpID0+IHt9O1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogRGV0YWNoIGxhYmVsIHRleHQgYW5kIHRvb2x0aXAgZnJvbSBlYWNoIG90aGVyIGluIExhYmVsIHNvIHRoYXQgbGFiZWwgYW5kIHRvb2x0aXAgY2FuIGJlIGFsaWduZWQgZGlmZmVyZW50bHkuIFRoaXMgaXMgaW4gQm9vdHN0cmFwIDMgbm90IHN1cHBvcnRlZCFcclxuICAgICAqL1xyXG4gICAgQElucHV0KClcclxuICAgIHB1YmxpYyBzcGxpdGxhYmVsYW5kaGVscHRleHQ6IGJvb2xlYW4gfCBudWxsID0gbnVsbDtcclxuXHJcbiAgICAvKipcclxuICAgICAqIFNlcnZpY2UgdG8gcmVjZWl2ZSBzdGFuZGFyZCB2YWxpZGF0aW9uIG1lc3NhZ2Uga2V5cyBhbmQgdGV4dHNcclxuICAgICAqL1xyXG4gICAgcHVibGljIHZhbGlkYXRpb25LZXlTZXJ2aWNlOiBJU2FjVmFsaWRhdGlvbktleVNlcnZpY2U7XHJcblxyXG4gICAgLy8gI2VuZHJlZ2lvbiBQcm9wZXJ0aWVzXHJcblxyXG4gICAgLy8gI3JlZ2lvbiBDb25zdHJ1Y3RvcnNcclxuXHJcbiAgICAvKipcclxuICAgICAqIENvbnN0cnVjdG9yXHJcbiAgICAgKiBAcGFyYW0gZm9ybWxheW91dCBTYWNGb3JtTGF5b3V0Q29tbW9uIHRvIGRlZmluZSBzY29wZWQgbGF5b3V0IHNldHRpbmdzXHJcbiAgICAgKiBAcGFyYW0gaW5qZWN0b3IgSW5qZWN0b3IgZm9yIGluamVjdGluZyBzZXJ2aWNlc1xyXG4gICAgICovXHJcbiAgICBjb25zdHJ1Y3RvcihASG9zdCgpIGZvcm1sYXlvdXQ6IFNhY0Zvcm1MYXlvdXRDb21tb24sIHByaXZhdGUgcmVhZG9ubHkgaW5qZWN0b3I6IEluamVjdG9yKSB7XHJcbiAgICAgICAgdGhpcy5mb3JtbGF5b3V0ID0gZm9ybWxheW91dDtcclxuICAgICAgICB0aGlzLnZhbGlkYXRpb25LZXlTZXJ2aWNlID0gaW5qZWN0b3IuZ2V0KFNBQ1ZBTElEQVRJT05LRVlfU0VSVklDRSwgbmV3IFNhY0RlZmF1bHRWYWxpZGF0aW9uS2V5U2VydmljZSgpKTtcclxuICAgICAgICB0aGlzLmxuZ1Jlc291cmNlU2VydmljZSA9IGluamVjdG9yLmdldChcclxuICAgICAgICAgICAgU0FDTE9DQUxJU0FUSU9OX1NFUlZJQ0UsXHJcbiAgICAgICAgICAgIG5ldyBTYWNEZWZhdWx0TG9jYWxpc2F0aW9uU2VydmljZSh0aGlzLnZhbGlkYXRpb25LZXlTZXJ2aWNlKVxyXG4gICAgICAgICk7XHJcblxyXG4gICAgICAgIHRoaXMuY29uZmlndXJhdGlvblNlcnZpY2UgPSBpbmplY3Rvci5nZXQoU0FDQ09ORklHVVJBVElPTl9TRVJWSUNFLCBuZXcgU2FjRGVmYXVsdENvbmZpZ3VyYXRpb25TZXJ2aWNlKCkpO1xyXG5cclxuICAgICAgICB0aGlzLmljb25TZXJ2aWNlID0gaW5qZWN0b3IuZ2V0KFNBQ0lDT05fU0VSVklDRSwgbmV3IFNhY0RlZmF1bHRJY29uU2VydmljZSgpKTtcclxuICAgIH1cclxuXHJcbiAgICAvLyAjZW5kcmVnaW9uIENvbnN0cnVjdG9yc1xyXG5cclxuICAgIC8vICNyZWdpb24gUHVibGljIEdldHRlcnMgQW5kIFNldHRlcnNcclxuXHJcbiAgICAvKipcclxuICAgICAqIEdldCBJY29uIGZvciBIZWxwdGV4dCBUb29sdGlwXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBnZXQgSGVscHRleHRUb29sdGlwSWNvbigpOiBzdHJpbmcge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmljb25TZXJ2aWNlLkdlbmVyaWNIZWxwdGV4dEljb247XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBNZXRob2RlIGVyZ2lidCBCb29sZWFuIFdlcnQgZsO8ciBkaXJ0eVxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgZ2V0IGRpcnR5KCk6IGJvb2xlYW4ge1xyXG4gICAgICAgIGlmICh0aGlzLm5nQ29udHJvbCAhPT0gbnVsbCAmJiB0aGlzLm5nQ29udHJvbCAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX2RpcnR5ID0gdGhpcy5uZ0NvbnRyb2wuZGlydHk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gdGhpcy5fZGlydHk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTaG93IGVycm9yIG1lc3NhZ2VzIGlubGluZVxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgZ2V0IGlubGluZWVycm9yZW5hYmxlZCgpOiBib29sZWFuIHwgbnVsbCB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2lubGluZWVycm9yZW5hYmxlZDtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEFrdGl2aWVydCBvZGVyIERlYWt0aXZpZXJ0IGRpZSBJbmxpbmUgRXJyb3JzIGbDvHIgZGFzIENvbnRyb2xcclxuICAgICAqL1xyXG4gICAgQElucHV0KClcclxuICAgIHB1YmxpYyBzZXQgaW5saW5lZXJyb3JlbmFibGVkKHZhbHVlOiBib29sZWFuIHwgbnVsbCkge1xyXG4gICAgICAgIGlmICh2YWx1ZSA9PT0gbnVsbCB8fCB2YWx1ZSA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX2lubGluZWVycm9yZW5hYmxlZCA9IG51bGw7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5faW5saW5lZXJyb3JlbmFibGVkID0gY29udmVydFRvQm9vbGVhbih2YWx1ZSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogTWV0aG9kZSBlcmdpYnQgYm9vbGVhbiBXZXJ0IHdlbm4gRm9ybSBpbnZhbGlkIG9kZXIgbmljaHQgaW52YWxpZCBpc3RcclxuICAgICAqL1xyXG4gICAgcHVibGljIGdldCBpbnZhbGlkKCk6IGJvb2xlYW4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLm5nQ29udHJvbCAhPT0gdW5kZWZpbmVkICYmIHRoaXMubmdDb250cm9sICE9PSBudWxsICYmIHRoaXMubmdDb250cm9sLmludmFsaWQ7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBEZWZpbmllcnQgb2IgZGFzIENvbnRyb2wgZGlzYWJsZWQgaXN0XHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBnZXQgaXNkaXNhYmxlZCgpOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fZGlzYWJsZWRGb3JtIHx8IHRoaXMuZGlzYWJsZWQ7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBSZXR1cm5zIHdoZXRoZXIgdGhlIGlubGluZSBlcnJvciBtZXNzYWdlcyBhcmUgYWN0aXZlIGZvciB0aGlzIGNvbnRyb2wuXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBnZXQgaXNpbmxpbmVlcnJvcmVuYWJsZWQoKTogYm9vbGVhbiB7XHJcbiAgICAgICAgaWYgKHRoaXMuX2lubGluZWVycm9yZW5hYmxlZCAhPT0gbnVsbCkge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5faW5saW5lZXJyb3JlbmFibGVkO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHRoaXMuZm9ybWxheW91dCAhPT0gbnVsbCAmJiB0aGlzLmZvcm1sYXlvdXQuSXNJbmxpbmVFcnJvckVuYWJsZWQgIT09IG51bGwpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZm9ybWxheW91dD8uSXNJbmxpbmVFcnJvckVuYWJsZWQ7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAodGhpcy5jb25maWd1cmF0aW9uU2VydmljZS5JbmxpbmVFcnJvckVuYWJsZWQgIT09IG51bGwpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuY29uZmlndXJhdGlvblNlcnZpY2UuSW5saW5lRXJyb3JFbmFibGVkO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBEZWZpbmllcnQgZGVuIExhYmVsIFRleHRcclxuICAgICAqL1xyXG4gICAgcHVibGljIGdldCBsYWJlbCgpOiBzdHJpbmcge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9sYWJlbDtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIERlZmluaWVydCBkZW4gTGFiZWwgVGV4dFxyXG4gICAgICovXHJcbiAgICBASW5wdXQoKSBwdWJsaWMgc2V0IGxhYmVsKHY6IHN0cmluZykge1xyXG4gICAgICAgIHRoaXMuX2xhYmVsID0gdjtcclxuICAgICAgICB0aGlzLlVwZGF0ZUxhYmVsVG9Db250cm9sKCk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiByZXR1cm5zIGFuIG9iamVjdCB3aXRoIGFsbCBsYWJlbCBzaXplcy4gVGhlc2UgdmFsdWVzIGNhbiB0aGVuIGJlIHRyYW5zZmVycmVkIHRvIGNvcnJlc3BvbmRpbmcgQ1NTIGNsYXNzZXMgdXNpbmcgYSBwaXBlXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBnZXQgbGFiZWxTaXplcygpOiBJU2FjTGFiZWxTaXplcyB7XHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgbGFiZWxTaXplU206IHRoaXMubGFiZWxTaXplU20sXHJcbiAgICAgICAgICAgIGxhYmVsU2l6ZU1kOiB0aGlzLmxhYmVsU2l6ZU1kLFxyXG4gICAgICAgICAgICBsYWJlbFNpemVYczogdGhpcy5sYWJlbFNpemVYcyxcclxuICAgICAgICAgICAgbGFiZWxTaXplWGw6IHRoaXMubGFiZWxTaXplWGwsXHJcbiAgICAgICAgICAgIGxhYmVsU2l6ZVh4bDogdGhpcy5sYWJlbFNpemVYeGwsXHJcbiAgICAgICAgICAgIGxhYmVsU2l6ZUxnOiB0aGlzLmxhYmVsU2l6ZUxnLFxyXG4gICAgICAgIH07XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBNZXRob2RlIGVyZ2lidCBCb29sZWFuIFdlcnQgZsO8ciB0b3VjaGVkXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBnZXQgdG91Y2hlZCgpOiBib29sZWFuIHtcclxuICAgICAgICBpZiAodGhpcy5uZ0NvbnRyb2wgIT09IG51bGwgJiYgdGhpcy5uZ0NvbnRyb2wgIT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgICB0aGlzLl90b3VjaGVkID0gdGhpcy5uZ0NvbnRyb2wudG91Y2hlZDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzLl90b3VjaGVkO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogR2V0IE1ldGhvZGUgZsO8ciBOZ01vZGVsIEJpbmRpbmcgaW4gSHRtbCBNYXJrdXBcclxuICAgICAqL1xyXG4gICAgcHVibGljIGdldCB2YWx1ZSgpOiBWQUxVRSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX3ZhbHVlO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2V0IE1ldGhvZGUgZsO8ciBOZ01vZGVsIEJpbmRpbmcgaW4gSHRtbCBNYXJrdXBcclxuICAgICAqIElucHV0IHdpcmQgYmVuw7Z0aWd0LCBkYW1pdCBkZXIgV2VydCBhdWNoIMO8YmVyIGRhcyBNYXJrdXAgZ2VzZXR6dCB3ZXJkZW4ga2Fubi5cclxuICAgICAqL1xyXG4gICAgQElucHV0KClcclxuICAgIHB1YmxpYyBzZXQgdmFsdWUodjogVkFMVUUpIHtcclxuICAgICAgICBpZiAodGhpcy5kaXNhYmxlZCkge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLl92YWx1ZSA9IHRoaXMuQ29udmVydElucHV0VmFsdWUodik7XHJcbiAgICAgICAgdGhpcy5wcm9wYWdhdGVDaGFuZ2UodGhpcy5fdmFsdWUpO1xyXG4gICAgfVxyXG5cclxuICAgIC8vICNlbmRyZWdpb24gUHVibGljIEdldHRlcnMgQW5kIFNldHRlcnNcclxuXHJcbiAgICAvLyAjcmVnaW9uIFB1YmxpYyBNZXRob2RzXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBNZXRob2RlIGVyZ2lidCBFcnJvciBhbmhhbmQgdm9uIGdlZ2ViZW5lbiBLcml0ZXJpZW5cclxuICAgICAqL1xyXG4gICAgcHVibGljIEdldEVycm9yTWVzc2FnZSgpOiBPYnNlcnZhYmxlPHN0cmluZz4ge1xyXG4gICAgICAgIGlmICh0aGlzLm5nQ29udHJvbC5lcnJvcnMgPT09IHVuZGVmaW5lZCB8fCB0aGlzLm5nQ29udHJvbC5lcnJvcnMgPT09IG51bGwpIHtcclxuICAgICAgICAgICAgcmV0dXJuIG5ldyBPYnNlcnZhYmxlPHN0cmluZz4oKG9ic2VydmVyKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBvYnNlcnZlci5uZXh0KCcnKTtcclxuICAgICAgICAgICAgICAgIG9ic2VydmVyLmNvbXBsZXRlKCk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY29uc3QgZXJyb3JzOiBWYWxpZGF0aW9uRXJyb3JzID0gdGhpcy5uZ0NvbnRyb2wuZXJyb3JzO1xyXG5cclxuICAgICAgICBpZiAoZXJyb3JzLmxlbmd0aCA9PT0gMCkge1xyXG4gICAgICAgICAgICByZXR1cm4gbmV3IE9ic2VydmFibGU8c3RyaW5nPigob2JzZXJ2ZXIpID0+IHtcclxuICAgICAgICAgICAgICAgIG9ic2VydmVyLm5leHQoJycpO1xyXG4gICAgICAgICAgICAgICAgb2JzZXJ2ZXIuY29tcGxldGUoKTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBjb25zdCBrZXlzOiBzdHJpbmdbXSA9IE9iamVjdC5rZXlzKGVycm9ycyk7XHJcblxyXG4gICAgICAgIGlmIChrZXlzLmxlbmd0aCA8PSAwKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBuZXcgT2JzZXJ2YWJsZTxzdHJpbmc+KChvYnNlcnZlcikgPT4ge1xyXG4gICAgICAgICAgICAgICAgb2JzZXJ2ZXIubmV4dCgnJyk7XHJcbiAgICAgICAgICAgICAgICBvYnNlcnZlci5jb21wbGV0ZSgpO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGNvbnN0IGVycm9ySXRlbTogVmFsaWRhdGlvbkVycm9ySXRlbSA9IGVycm9yc1trZXlzWzBdXTtcclxuXHJcbiAgICAgICAgLy8gVmFsaWRhdGlvbiBQYXJhbWV0ZXJzXHJcbiAgICAgICAgY29uc3QgcGFyYW1ldGVycyA9IHt9O1xyXG4gICAgICAgIGlmIChlcnJvckl0ZW0ucGFyYW1ldGVycyAhPT0gbnVsbCAmJiBlcnJvckl0ZW0ucGFyYW1ldGVycyAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgIGVycm9ySXRlbS5wYXJhbWV0ZXJzLmZvckVhY2goKHYsIGspID0+IHtcclxuICAgICAgICAgICAgICAgIHBhcmFtZXRlcnNba10gPSB2O1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcGFyYW1ldGVyc1snRklFTEQnXSA9IGVycm9ySXRlbS5maWVsZE5hbWU7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzLmxuZ1Jlc291cmNlU2VydmljZS5HZXRTdHJpbmcoZXJyb3JJdGVtLmVycm9yTWVzc2FnZUtleSwgcGFyYW1ldGVycyk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBJbml0IEV2ZW50XHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBuZ09uSW5pdCgpIHtcclxuICAgICAgICAvLyByZWNlaXZlIGZvcm0gdmlhIGZvcm1jb250cm9sbmFtZSBvciBmb3JtY29udHJvbCBpbnN0YW5jZVxyXG4gICAgICAgIGNvbnN0IGZvcm1Db250cm9sID0gdGhpcy5pbmplY3Rvci5nZXQoTmdDb250cm9sLCBudWxsKTtcclxuICAgICAgICBpZiAoZm9ybUNvbnRyb2wgaW5zdGFuY2VvZiBGb3JtQ29udHJvbE5hbWUpIHtcclxuICAgICAgICAgICAgY29uc3QgZm9ybSA9IHRoaXMuaW5qZWN0b3IuZ2V0KEZvcm1Hcm91cERpcmVjdGl2ZSwgbnVsbCk7XHJcbiAgICAgICAgICAgIHRoaXMubmdDb250cm9sID0gZm9ybS5nZXRDb250cm9sKGZvcm1Db250cm9sKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBpZiAoZm9ybUNvbnRyb2wpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMubmdDb250cm9sID0gZm9ybUNvbnRyb2wuY29udHJvbCBhcyBGb3JtQ29udHJvbDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5VcGRhdGVMYWJlbFRvQ29udHJvbCgpO1xyXG5cclxuICAgICAgICAvLyBzZXQgbGFiZWwgc2l6ZXMgZnJvbSBmb3JtbGF5b3V0IGRpcmVjdGl2ZVxyXG4gICAgICAgIHRoaXMuc2V0TGFiZWxTaXplcygpO1xyXG5cclxuICAgICAgICAvLyBzZXQgY29tcG9uZW50IGhlaWd0aCBmcm9tIGZyb21sYXlvdXQgZGlyZWN0aXZlXHJcbiAgICAgICAgdGhpcy5zZXRDb21wb25lbnRIZWlnaHQoKTtcclxuXHJcbiAgICAgICAgLy8gc2V0IGFkYXB0aXZlIGxhYmVsIHByb3BlcnR5IGZyb20gZm9ybWxheW91dCBkaXJlY3RpdmVcclxuICAgICAgICB0aGlzLnNldElzQWRhcHRpdmVMYWJlbCgpO1xyXG5cclxuICAgICAgICAvLyBzZXQgbWV0aG9kIHRvIGRpc3BsYXkgaGVscHRleHRcclxuICAgICAgICB0aGlzLnNldEhlbHBUZXh0TW9kZSgpO1xyXG5cclxuICAgICAgICAvLyBzZXQgU3BsaXRNb2RlIGZvciBMYWJlbHNcclxuICAgICAgICB0aGlzLnNldExhYmVsU3BsaXRNb2RlKCk7XHJcblxyXG4gICAgICAgIHRoaXMuT25DbGFzc0luaXQoKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIE1ldGhvZGUgZXJnaWJ0IGJvb2xlYW4gdG91Y2hlZCA9IHRydWVcclxuICAgICAqL1xyXG4gICAgcHVibGljIG9uVG91Y2goKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5fdG91Y2hlZCA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5wcm9wYWdhdGVUb3VjaCgpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogTWV0aG9kZSwgZGFtaXQgYW5kZXJlIENvbnRyb2xzIMOkbmRlcnVuZ2VuIGltIENvbnRyb2wgbWl0YmVrb21tZW4ga8O2bm5lblxyXG4gICAgICogWnVyIMOEbmRlcnVuZ3NpbmZvIGRpZSBNZXRob2RlIHByb3BhZ2F0ZUNoYW5nZSBhdWZydWZlbi5cclxuICAgICAqL1xyXG4gICAgcHVibGljIHJlZ2lzdGVyT25DaGFuZ2UoZm46IGFueSk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMucHJvcGFnYXRlQ2hhbmdlID0gKG9iaikgPT4gZm4ob2JqKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIE1ldGhvZGUsIGRhbWl0IGFuZGVyZSBDb250cm9scyDDpG5kZXJ1bmdlbiBtaXRiZWtvbW1lbiwgd2VubiBkYXMgQ29udHJvbCBha3RpdmllcnQgKEZvY3VzKSB3aXJkLlxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgcmVnaXN0ZXJPblRvdWNoZWQoZm46IGFueSk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMucHJvcGFnYXRlVG91Y2ggPSAob2JqKSA9PiBmbihvYmopO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogTWV0aG9kZSByZWdpc3RyaWVydCDDhG5kZXJ1bmdlbiBiZWkgZGVyIFZhbGlkaWVydW5nXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyByZWdpc3Rlck9uVmFsaWRhdG9yQ2hhbmdlKGZuOiAoKSA9PiB2b2lkKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5fb25DaGFuZ2UgPSBmbjtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFNldHp0IGRhcyBDb250cm9sIGF1ZiBEaXNhYmxlZFxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgc2V0RGlzYWJsZWRTdGF0ZShpc0Rpc2FibGVkOiBib29sZWFuKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5fZGlzYWJsZWRGb3JtID0gaXNEaXNhYmxlZDtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIE1ldGhvZGUgZGllIGRlbiBXZXJ0IGRlcyBJbnB1dHMgc2V0enRcclxuICAgICAqL1xyXG4gICAgcHVibGljIHNldFZhbHVlKHY6IFZBTFVFKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy52YWx1ZSA9IHY7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBWYWxpZGF0b3IgTWV0aG9kZVxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgdmFsaWRhdGUoYzogQWJzdHJhY3RDb250cm9sKTogVmFsaWRhdGlvbkVycm9ycyB8IG51bGwge1xyXG4gICAgICAgIGNvbnN0IGVycm9yOiBWYWxpZGF0aW9uRXJyb3JzIHwgbnVsbCA9IHRoaXMudmFsaWRhdGVEYXRhKGMpO1xyXG4gICAgICAgIHJldHVybiBlcnJvcjtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEFic3RyYWt0ZSBWYWxpZGF0b3IgTWV0aG9kZVxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgYWJzdHJhY3QgdmFsaWRhdGVEYXRhKGM6IEFic3RyYWN0Q29udHJvbCk6IFZhbGlkYXRpb25FcnJvcnMgfCBudWxsO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogTWV0aG9kZSB6dW0gc2NocmVpYmVuIHZvbiBXZXJ0ZW4gYXVzIGRlbSBNb2RlbCBpbiBkYXMgQ29udHJvbFxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgd3JpdGVWYWx1ZSh2YWx1ZTogVkFMVUUpIHtcclxuICAgICAgICB0aGlzLl92YWx1ZSA9IHZhbHVlO1xyXG4gICAgfVxyXG5cclxuICAgIC8vICNlbmRyZWdpb24gUHVibGljIE1ldGhvZHNcclxuXHJcbiAgICAvLyAjcmVnaW9uIFByb3RlY3RlZCBNZXRob2RzXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBNZXRob2QgY2FuIE92ZXJ3cml0ZW4gaW4gUGFyZW50IENsYXNzZXNcclxuICAgICAqIEBwYXJhbSB2YWx1ZSBXZXJ0IHdlbGNoZXIgaW4gZGVuIGtvcnJla3RlbiBUeXAga29udmVydGllcnQgd2VyZGVuIHNvbGxcclxuICAgICAqIEByZXR1cm5zIFdlcnQgaW0ga29ycmVrdGVuIFR5cFxyXG4gICAgICovXHJcbiAgICBwcm90ZWN0ZWQgQ29udmVydElucHV0VmFsdWUodmFsdWU6IFZBTFVFKTogVkFMVUUge1xyXG4gICAgICAgIHJldHVybiB2YWx1ZTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIE1ldGhvZGUgZXJnaWJ0IERlY2ltYWwgU3ltYm9sXHJcbiAgICAgKi9cclxuICAgIHByb3RlY3RlZCBHZXREZWNpbWFsU3ltYm9sKCk6IHN0cmluZyB7XHJcbiAgICAgICAgcmV0dXJuICcuJztcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIE1ldGhvZCBjYW4gYmUgdXNlZCB0byBTZXQgUHJvcGVydGllcyBhdCBDbGFzcyBJbml0XHJcbiAgICAgKi9cclxuICAgIHByb3RlY3RlZCBPbkNsYXNzSW5pdCgpOiB2b2lkIHt9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBBa3R1YWxpc2llcnQgZGVuIE5nTW9kZWwgV2VydCB1bmQgZGllIEfDvGx0aWdrZWl0IGRlcyBWYWxpZGF0b3JzIGRlcyBDb250cm9sc1xyXG4gICAgICovXHJcbiAgICBwcm90ZWN0ZWQgVXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpOiB2b2lkIHtcclxuICAgICAgICBpZiAodGhpcy5uZ0NvbnRyb2wpIHtcclxuICAgICAgICAgICAgdGhpcy5uZ0NvbnRyb2wudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSh7IG9ubHlTZWxmOiB0cnVlIH0pO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvLyAjZW5kcmVnaW9uIFByb3RlY3RlZCBNZXRob2RzXHJcblxyXG4gICAgLy8gI3JlZ2lvbiBQcml2YXRlIE1ldGhvZHNcclxuXHJcbiAgICBwcml2YXRlIFVwZGF0ZUxhYmVsVG9Db250cm9sKCk6IHZvaWQge1xyXG4gICAgICAgIC8vIEhBQ0s6IEFkZCBhZGRpdGlvbiBwcm9wZXJ0eSB0byBGb3JtQ29udHJvbC4gQ2FuIGJlIGZpeGVkIGlmIHNvbHV0aW9uIGZvciB0aWNrZXQ6IGh0dHBzOi8vZ2l0aHViLmNvbS9hbmd1bGFyL2FuZ3VsYXIvaXNzdWVzLzE5Njg2XHJcbiAgICAgICAgaWYgKHRoaXMubmdDb250cm9sKSB7XHJcbiAgICAgICAgICAgICh0aGlzLm5nQ29udHJvbCBhcyB1bmtub3duIGFzIElBYnN0cmFjdENvbnRyb2xMYWJlbEV4dGVuc2lvbikuY29udHJvbGxhYmVsID0gdGhpcy5sYWJlbDtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTZXQgY29tcG9uZW50IGhlaWdodCBmcm9tIHByb3BlcnR5IG9yIHBhcmVudCBsYXlvdXQgY29udHJvbFxyXG4gICAgICovXHJcbiAgICBwcml2YXRlIHNldENvbXBvbmVudEhlaWdodCgpIHtcclxuICAgICAgICAvLyBzZXQgc2l6ZSBleHRyYSBzbWFsbFxyXG4gICAgICAgIGlmICghdGhpcy5jb21wb25lbnRIZWlnaHQpIHtcclxuICAgICAgICAgICAgaWYgKHRoaXMuZm9ybWxheW91dD8uY29tcG9uZW50SGVpZ2h0KSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNvbXBvbmVudEhlaWdodCA9IHRoaXMuZm9ybWxheW91dC5jb21wb25lbnRIZWlnaHQ7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNvbXBvbmVudEhlaWdodCA9IHRoaXMuY29uZmlndXJhdGlvblNlcnZpY2UuQ29tcG9uZW50SGVpZ2h0O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2V0IG1vZGUgZm9yIGhlbHB0ZXh0LiBDYW4gYmUgdG9vbHRpcCBvciB0ZXh0XHJcbiAgICAgKi9cclxuICAgIHByaXZhdGUgc2V0SGVscFRleHRNb2RlKCkge1xyXG4gICAgICAgIGlmICghdGhpcy5oZWxwdGV4dG1vZGUpIHtcclxuICAgICAgICAgICAgaWYgKHRoaXMuZm9ybWxheW91dD8uaGVscHRleHRtb2RlKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmhlbHB0ZXh0bW9kZSA9IHRoaXMuZm9ybWxheW91dC5oZWxwdGV4dG1vZGU7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmhlbHB0ZXh0bW9kZSA9IHRoaXMuY29uZmlndXJhdGlvblNlcnZpY2UuSGVscHRleHRNb2RlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2V0IGFkYXB0aXZlIGxhYmVsIHByb3BlcnR5IGZyb20gcGFyZW50IGxheW91dCBjb250cm9sXHJcbiAgICAgKi9cclxuICAgIHByaXZhdGUgc2V0SXNBZGFwdGl2ZUxhYmVsKCkge1xyXG4gICAgICAgIGlmICghdGhpcy5pc0FkYXB0aXZlTGFiZWwpIHtcclxuICAgICAgICAgICAgaWYgKHRoaXMuZm9ybWxheW91dD8uaXNBZGFwdGl2ZUxhYmVsICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuaXNBZGFwdGl2ZUxhYmVsID0gdGhpcy5mb3JtbGF5b3V0LmlzQWRhcHRpdmVMYWJlbDtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuaXNBZGFwdGl2ZUxhYmVsID0gZmFsc2U7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTZXQgbGFiZWwgc2l6ZXMgZnJvbSBwcm9wZXJ0eSBvciBwYXJlbnQgbGF5b3V0IGNvbnRyb2xcclxuICAgICAqL1xyXG4gICAgcHJpdmF0ZSBzZXRMYWJlbFNpemVzKCkge1xyXG4gICAgICAgIC8vIHNldCBzaXplIGV4dHJhIHNtYWxsXHJcbiAgICAgICAgaWYgKCF0aGlzLmxhYmVsU2l6ZVhzKSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLmZvcm1sYXlvdXQ/LmxhYmVsU2l6ZVhzKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmxhYmVsU2l6ZVhzID0gdGhpcy5mb3JtbGF5b3V0LmxhYmVsU2l6ZVhzO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5sYWJlbFNpemVYcyA9IHRoaXMuY29uZmlndXJhdGlvblNlcnZpY2UuTGFiZWxTaXplWHM7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIHNldCBzaXplIHNtYWxsXHJcbiAgICAgICAgaWYgKCF0aGlzLmxhYmVsU2l6ZVNtKSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLmZvcm1sYXlvdXQ/LmxhYmVsU2l6ZVNtKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmxhYmVsU2l6ZVNtID0gdGhpcy5mb3JtbGF5b3V0LmxhYmVsU2l6ZVNtO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5sYWJlbFNpemVTbSA9IHRoaXMuY29uZmlndXJhdGlvblNlcnZpY2UuTGFiZWxTaXplU207XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIHNldCBzaXplIG1lZGl1bVxyXG4gICAgICAgIGlmICghdGhpcy5sYWJlbFNpemVNZCkge1xyXG4gICAgICAgICAgICBpZiAodGhpcy5mb3JtbGF5b3V0Py5sYWJlbFNpemVNZCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5sYWJlbFNpemVNZCA9IHRoaXMuZm9ybWxheW91dC5sYWJlbFNpemVNZDtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHRoaXMubGFiZWxTaXplTWQgPSB0aGlzLmNvbmZpZ3VyYXRpb25TZXJ2aWNlLkxhYmVsU2l6ZU1kO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBzZXQgc2l6ZSBsYXJnZVxyXG4gICAgICAgIGlmICghdGhpcy5sYWJlbFNpemVMZykge1xyXG4gICAgICAgICAgICBpZiAodGhpcy5mb3JtbGF5b3V0Py5sYWJlbFNpemVMZykge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5sYWJlbFNpemVMZyA9IHRoaXMuZm9ybWxheW91dC5sYWJlbFNpemVMZztcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHRoaXMubGFiZWxTaXplTGcgPSB0aGlzLmNvbmZpZ3VyYXRpb25TZXJ2aWNlLkxhYmVsU2l6ZUxnO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBzZXQgc2l6ZSBleHRyYSBsYXJnZVxyXG4gICAgICAgIGlmICghdGhpcy5sYWJlbFNpemVYbCkge1xyXG4gICAgICAgICAgICBpZiAodGhpcy5mb3JtbGF5b3V0Py5sYWJlbFNpemVYbCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5sYWJlbFNpemVYbCA9IHRoaXMuZm9ybWxheW91dC5sYWJlbFNpemVYbDtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHRoaXMubGFiZWxTaXplWGwgPSB0aGlzLmNvbmZpZ3VyYXRpb25TZXJ2aWNlLkxhYmVsU2l6ZVhsO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBzZXQgc2l6ZSBleHRyYSBleHRyYSBsYXJnZVxyXG4gICAgICAgIGlmICghdGhpcy5sYWJlbFNpemVYeGwpIHtcclxuICAgICAgICAgICAgaWYgKHRoaXMuZm9ybWxheW91dD8ubGFiZWxTaXplWHhsKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmxhYmVsU2l6ZVh4bCA9IHRoaXMuZm9ybWxheW91dC5sYWJlbFNpemVYeGw7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmxhYmVsU2l6ZVh4bCA9IHRoaXMuY29uZmlndXJhdGlvblNlcnZpY2UuTGFiZWxTaXplWHhsO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgc2V0TGFiZWxTcGxpdE1vZGUoKSB7XHJcbiAgICAgICAgaWYgKCF0aGlzLnNwbGl0bGFiZWxhbmRoZWxwdGV4dCkge1xyXG4gICAgICAgICAgICBpZiAodGhpcy5mb3JtbGF5b3V0Py5zcGxpdGxhYmVsYW5kaGVscHRleHQpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuc3BsaXRsYWJlbGFuZGhlbHB0ZXh0ID0gdGhpcy5mb3JtbGF5b3V0LnNwbGl0bGFiZWxhbmRoZWxwdGV4dDtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuc3BsaXRsYWJlbGFuZGhlbHB0ZXh0ID0gdGhpcy5jb25maWd1cmF0aW9uU2VydmljZS5TcGxpdExhYmVsQW5kSGVscHRleHQ7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLy8gI2VuZHJlZ2lvbiBQcml2YXRlIE1ldGhvZHNcclxufVxyXG4iXX0=
|