@simpleangularcontrols/sac-common 10.0.0-rc.11 → 10.0.0-rc.12

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (62) hide show
  1. package/bundles/simpleangularcontrols-sac-common.umd.js +1096 -707
  2. package/bundles/simpleangularcontrols-sac-common.umd.js.map +1 -1
  3. package/bundles/simpleangularcontrols-sac-common.umd.min.js +1 -1
  4. package/bundles/simpleangularcontrols-sac-common.umd.min.js.map +1 -1
  5. package/common/basedatetimecontrol.d.ts +99 -13
  6. package/common/basemodelcontrol.d.ts +30 -22
  7. package/controls/checkbox/radiobutton.d.ts +61 -26
  8. package/controls/datetime/date.d.ts +28 -27
  9. package/controls/datetime/datetime.d.ts +27 -27
  10. package/controls/datetime/time.d.ts +26 -26
  11. package/controls/dialog/dialog.d.ts +31 -43
  12. package/controls/layout/formlayout.d.ts +4 -0
  13. package/controls/list/buildvaluestring.d.ts +6 -0
  14. package/controls/list/buildvaluestring.ngfactory.d.ts +1 -0
  15. package/controls/list/dropdown.d.ts +9 -51
  16. package/controls/list/dropdownoptions.d.ts +38 -0
  17. package/controls/list/dropdownoptions.ngfactory.d.ts +1 -0
  18. package/controls/static/formcontainer.d.ts +11 -3
  19. package/controls/tooltip/tooltip.d.ts +33 -51
  20. package/esm2015/common/basedatetimecontrol.js +178 -30
  21. package/esm2015/common/basemodelcontrol.js +57 -46
  22. package/esm2015/controls/checkbox/radiobutton.js +94 -45
  23. package/esm2015/controls/datetime/date.js +43 -41
  24. package/esm2015/controls/datetime/datetime.js +42 -41
  25. package/esm2015/controls/datetime/time.js +42 -41
  26. package/esm2015/controls/dialog/dialog.js +41 -83
  27. package/esm2015/controls/layout/formlayout.js +7 -6
  28. package/esm2015/controls/list/buildvaluestring.js +18 -0
  29. package/esm2015/controls/list/buildvaluestring.ngfactory.js +7 -0
  30. package/esm2015/controls/list/dropdown.js +16 -114
  31. package/esm2015/controls/list/dropdownoptions.js +72 -0
  32. package/esm2015/controls/list/dropdownoptions.ngfactory.js +7 -0
  33. package/esm2015/controls/static/formcontainer.js +16 -6
  34. package/esm2015/controls/tooltip/tooltip.js +60 -250
  35. package/esm2015/interfaces/ISacConfigurationService.js +1 -1
  36. package/esm2015/public_api.js +3 -2
  37. package/esm2015/services/sac-configuration.service.js +7 -5
  38. package/esm2015/utilities/enums.js +5 -1
  39. package/esm2015/utilities/popuphelper.js +343 -0
  40. package/esm2015/utilities/popuphelper.ngfactory.js +7 -0
  41. package/esm2015/validation/equals.validator.js +14 -0
  42. package/esm2015/validation/equals.validator.ngfactory.js +7 -0
  43. package/esm2015/validation/notequals.validator.js +14 -0
  44. package/esm2015/validation/notequals.validator.ngfactory.js +7 -0
  45. package/esm2015/validation/validation.class.js +30 -6
  46. package/fesm2015/simpleangularcontrols-sac-common.js +1071 -702
  47. package/fesm2015/simpleangularcontrols-sac-common.js.map +1 -1
  48. package/interfaces/ISacConfigurationService.d.ts +4 -0
  49. package/package.json +1 -1
  50. package/public_api.d.ts +2 -1
  51. package/services/sac-configuration.service.d.ts +8 -0
  52. package/simpleangularcontrols-sac-common-10.0.0-rc.12.tgz +0 -0
  53. package/simpleangularcontrols-sac-common.metadata.json +1 -1
  54. package/utilities/enums.d.ts +3 -1
  55. package/utilities/popuphelper.d.ts +83 -0
  56. package/utilities/popuphelper.ngfactory.d.ts +1 -0
  57. package/validation/equals.validator.d.ts +2 -0
  58. package/validation/equals.validator.ngfactory.d.ts +1 -0
  59. package/validation/notequals.validator.d.ts +2 -0
  60. package/validation/notequals.validator.ngfactory.d.ts +1 -0
  61. package/validation/validation.class.d.ts +19 -0
  62. package/simpleangularcontrols-sac-common-10.0.0-rc.11.tgz +0 -0
@@ -1,6 +1,6 @@
1
+ import { Observable } from 'rxjs';
1
2
  import { Directive, Host, Injector, Input, } from '@angular/core';
2
3
  import { FormControlName, FormGroupDirective, NgControl, } from '@angular/forms';
3
- import { Observable } from 'rxjs';
4
4
  import { SacFormLayoutCommon } from '../controls/layout/formlayout';
5
5
  import { ControlHeight } from '../enums/ControlHeight';
6
6
  import { SACICON_SERVICE, SACVALIDATIONKEY_SERVICE, SacDefaultIconService, SacDefaultValidationKeyService, } from '../services';
@@ -12,8 +12,6 @@ import { createGuid } from '../utilities/guid';
12
12
  * Abstract Klasse für SacBaseModelControl. Implements ControlValueAccessor, Validator, OnInit
13
13
  */
14
14
  export class SacBaseModelControl {
15
- // #endregion Properties
16
- // #region Constructors
17
15
  /**
18
16
  * Constructor
19
17
  * @param formlayout SacFormLayoutCommon to define scoped layout settings
@@ -21,11 +19,13 @@ export class SacBaseModelControl {
21
19
  */
22
20
  constructor(formlayout, injector) {
23
21
  this.injector = injector;
24
- // #region Properties
25
22
  /**
26
23
  * Inline Errors für das Control
27
24
  */
28
25
  this._inlineerrorenabled = null;
26
+ /**
27
+ * Label Text
28
+ */
29
29
  this._label = '';
30
30
  /**
31
31
  * Boolean Property dirty; default Wert - false
@@ -47,6 +47,10 @@ export class SacBaseModelControl {
47
47
  * Form layout instance if exists
48
48
  */
49
49
  this.formlayout = null;
50
+ /**
51
+ * ControlHeight enum for use in HTML markup
52
+ */
53
+ this.ControlHeight = ControlHeight;
50
54
  /**
51
55
  * Defines the standard height of the components
52
56
  */
@@ -99,10 +103,6 @@ export class SacBaseModelControl {
99
103
  * Name des Controls
100
104
  */
101
105
  this.name = createGuid();
102
- /**
103
- * ControlHeight enum for use in HTML markup
104
- */
105
- this.ControlHeight = ControlHeight;
106
106
  /**
107
107
  * Leere Implementation von "propagateChange". Muss gemacht werden, damit kein Fehler entsteht
108
108
  */
@@ -111,43 +111,16 @@ export class SacBaseModelControl {
111
111
  * Leere Implementation von "propagateTouch". Muss gemacht werden, damit kein Fehler entsteht
112
112
  */
113
113
  this.propagateTouch = () => { };
114
+ /**
115
+ * 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!
116
+ */
117
+ this.splitlabelandhelptext = null;
114
118
  this.formlayout = formlayout;
115
119
  this.validationKeyService = injector.get(SACVALIDATIONKEY_SERVICE, new SacDefaultValidationKeyService());
116
120
  this.lngResourceService = injector.get(SACLOCALISATION_SERVICE, new SacDefaultLocalisationService(this.validationKeyService));
117
121
  this.configurationService = injector.get(SACCONFIGURATION_SERVICE, new SacDefaultConfigurationService());
118
122
  this.iconService = injector.get(SACICON_SERVICE, new SacDefaultIconService());
119
123
  }
120
- // #endregion Constructors
121
- // #region Public Getters And Setters
122
- /**
123
- * Aktiviert oder Deaktiviert die Inline Errors für das Control
124
- */
125
- set inlineerrorenabled(value) {
126
- if (value === null || value === undefined) {
127
- this._inlineerrorenabled = null;
128
- }
129
- else {
130
- this._inlineerrorenabled = convertToBoolean(value);
131
- }
132
- }
133
- /**
134
- * Definiert den Label Text
135
- */
136
- set label(v) {
137
- this._label = v;
138
- this.UpdateLabelToControl();
139
- }
140
- /**
141
- * Set Methode für NgModel Binding in Html Markup
142
- * Input wird benötigt, damit der Wert auch über das Markup gesetzt werden kann.
143
- */
144
- set value(v) {
145
- if (this.disabled) {
146
- return;
147
- }
148
- this._value = this.ConvertInputValue(v);
149
- this.propagateChange(this._value);
150
- }
151
124
  /**
152
125
  * Get Icon for Helptext Tooltip
153
126
  */
@@ -169,6 +142,17 @@ export class SacBaseModelControl {
169
142
  get inlineerrorenabled() {
170
143
  return this._inlineerrorenabled;
171
144
  }
145
+ /**
146
+ * Aktiviert oder Deaktiviert die Inline Errors für das Control
147
+ */
148
+ set inlineerrorenabled(value) {
149
+ if (value === null || value === undefined) {
150
+ this._inlineerrorenabled = null;
151
+ }
152
+ else {
153
+ this._inlineerrorenabled = convertToBoolean(value);
154
+ }
155
+ }
172
156
  /**
173
157
  * Methode ergibt boolean Wert wenn Form invalid oder nicht invalid ist
174
158
  */
@@ -206,6 +190,13 @@ export class SacBaseModelControl {
206
190
  get label() {
207
191
  return this._label;
208
192
  }
193
+ /**
194
+ * Definiert den Label Text
195
+ */
196
+ set label(v) {
197
+ this._label = v;
198
+ this.UpdateLabelToControl();
199
+ }
209
200
  /**
210
201
  * returns an object with all label sizes. These values can then be transferred to corresponding CSS classes using a pipe
211
202
  */
@@ -234,8 +225,17 @@ export class SacBaseModelControl {
234
225
  get value() {
235
226
  return this._value;
236
227
  }
237
- // #endregion Public Getters And Setters
238
- // #region Public Methods
228
+ /**
229
+ * Set Methode für NgModel Binding in Html Markup
230
+ * Input wird benötigt, damit der Wert auch über das Markup gesetzt werden kann.
231
+ */
232
+ set value(v) {
233
+ if (this.disabled) {
234
+ return;
235
+ }
236
+ this._value = this.ConvertInputValue(v);
237
+ this.propagateChange(this._value);
238
+ }
239
239
  /**
240
240
  * Methode ergibt Error anhand von gegebenen Kriterien
241
241
  */
@@ -298,6 +298,8 @@ export class SacBaseModelControl {
298
298
  this.setIsAdaptiveLabel();
299
299
  // set method to display helptext
300
300
  this.setHelpTextMode();
301
+ // set SplitMode for Labels
302
+ this.setLabelSplitMode();
301
303
  this.OnClassInit();
302
304
  }
303
305
  /**
@@ -351,8 +353,6 @@ export class SacBaseModelControl {
351
353
  writeValue(value) {
352
354
  this._value = value;
353
355
  }
354
- // #endregion Public Abstract Methods
355
- // #region Protected Methods
356
356
  /**
357
357
  * Method can Overwriten in Parent Classes
358
358
  * @param value Wert welcher in den korrekten Typ konvertiert werden soll
@@ -379,8 +379,6 @@ export class SacBaseModelControl {
379
379
  this.ngControl.updateValueAndValidity({ onlySelf: true });
380
380
  }
381
381
  }
382
- // #endregion Protected Methods
383
- // #region Private Methods
384
382
  UpdateLabelToControl() {
385
383
  // HACK: Add addition property to FormControl. Can be fixed if solution for ticket: https://github.com/angular/angular/issues/19686
386
384
  if (this.ngControl) {
@@ -490,6 +488,18 @@ export class SacBaseModelControl {
490
488
  }
491
489
  }
492
490
  }
491
+ setLabelSplitMode() {
492
+ var _a;
493
+ if (!this.splitlabelandhelptext) {
494
+ if ((_a = this.formlayout) === null || _a === void 0 ? void 0 : _a.splitlabelandhelptext) {
495
+ this.splitlabelandhelptext = this.formlayout.splitlabelandhelptext;
496
+ }
497
+ else {
498
+ this.splitlabelandhelptext =
499
+ this.configurationService.SplitLabelAndHelptext;
500
+ }
501
+ }
502
+ }
493
503
  }
494
504
  SacBaseModelControl.decorators = [
495
505
  { type: Directive }
@@ -513,8 +523,9 @@ SacBaseModelControl.propDecorators = {
513
523
  labelSizeXs: [{ type: Input }],
514
524
  labelSizeXxl: [{ type: Input }],
515
525
  name: [{ type: Input }],
526
+ splitlabelandhelptext: [{ type: Input }],
516
527
  inlineerrorenabled: [{ type: Input }],
517
528
  label: [{ type: Input }],
518
529
  value: [{ type: Input }]
519
530
  };
520
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzZW1vZGVsY29udHJvbC5qcyIsInNvdXJjZVJvb3QiOiJDOi9Qcm9qZWt0ZS9zaW1wbGVhbmd1bGFyY29udHJvbHMtbmcxMC9jaC5qbmV0d29yay5zYWMtY29udHJvbHMvcHJvamVjdHMvc2FjLWNvbW1vbi9zcmMvIiwic291cmNlcyI6WyJjb21tb24vYmFzZW1vZGVsY29udHJvbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBRUwsU0FBUyxFQUNULElBQUksRUFDSixRQUFRLEVBQ1IsS0FBSyxHQUVOLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFJTCxlQUFlLEVBQ2Ysa0JBQWtCLEVBQ2xCLFNBQVMsR0FHVixNQUFNLGdCQUFnQixDQUFDO0FBQ3hCLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDbEMsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFDcEUsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBT3ZELE9BQU8sRUFDTCxlQUFlLEVBQ2Ysd0JBQXdCLEVBQ3hCLHFCQUFxQixFQUNyQiw4QkFBOEIsR0FDL0IsTUFBTSxhQUFhLENBQUM7QUFDckIsT0FBTyxFQUNMLHdCQUF3QixFQUN4Qiw4QkFBOEIsR0FDL0IsTUFBTSx1Q0FBdUMsQ0FBQztBQUMvQyxPQUFPLEVBQ0wsdUJBQXVCLEVBQ3ZCLDZCQUE2QixHQUM5QixNQUFNLHNDQUFzQyxDQUFDO0FBQzlDLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQzNELE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUUvQzs7R0FFRztBQUVILE1BQU0sT0FBZ0IsbUJBQW1CO0lBdUl2Qyx3QkFBd0I7SUFFeEIsdUJBQXVCO0lBRXZCOzs7O09BSUc7SUFDSCxZQUNVLFVBQStCLEVBQ3RCLFFBQWtCO1FBQWxCLGFBQVEsR0FBUixRQUFRLENBQVU7UUEvSXJDLHFC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QU07Z0JBQ0wsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsb0JBQW9CLENBQUMsV0FBVyxDQUFDO2FBQzFEO1NBQ0Y7UUFFRCx1QkFBdUI7UUFDdkIsSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUU7WUFDckIsVUFBSSxJQUFJLENBQUMsVUFBVSwwQ0FBRSxXQUFXLEVBQUU7Z0JBQ2hDLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxXQUFXLENBQUM7YUFDaEQ7aUJBQU07Z0JBQ0wsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsb0JBQW9CLENBQUMsV0FBVyxDQUFDO2FBQzFEO1NBQ0Y7UUFFRCw2QkFBNkI7UUFDN0IsSUFBSSxDQUFDLElBQUksQ0FBQyxZQUFZLEVBQUU7WUFDdEIsVUFBSSxJQUFJLENBQUMsVUFBVSwwQ0FBRSxZQUFZLEVBQUU7Z0JBQ2pDLElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxZQUFZLENBQUM7YUFDbEQ7aUJBQU07Z0JBQ0wsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUMsb0JBQW9CLENBQUMsWUFBWSxDQUFDO2FBQzVEO1NBQ0Y7SUFDSCxDQUFDOzs7WUFqbUJGLFNBQVM7OztZQTVCRCxtQkFBbUIsdUJBOEt2QixJQUFJO1lBN0xQLFFBQVE7Ozs4QkFvR1AsS0FBSzt1QkFLTCxLQUFLOzJCQUlMLEtBQUs7dUJBSUwsS0FBSzsyQkFJTCxLQUFLOzBCQUtMLEtBQUs7OEJBSUwsS0FBSzswQkFJTCxLQUFLOzBCQUtMLEtBQUs7MEJBS0wsS0FBSzswQkFLTCxLQUFLOzBCQUtMLEtBQUs7MkJBS0wsS0FBSzttQkFLTCxLQUFLO2lDQTRETCxLQUFLO29CQVlMLEtBQUs7b0JBU0wsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XHJcbiAgQWZ0ZXJWaWV3SW5pdCxcclxuICBEaXJlY3RpdmUsXHJcbiAgSG9zdCxcclxuICBJbmplY3RvcixcclxuICBJbnB1dCxcclxuICBPbkluaXQsXHJcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7XHJcbiAgQWJzdHJhY3RDb250cm9sLFxyXG4gIENvbnRyb2xWYWx1ZUFjY2Vzc29yLFxyXG4gIEZvcm1Db250cm9sLFxyXG4gIEZvcm1Db250cm9sTmFtZSxcclxuICBGb3JtR3JvdXBEaXJlY3RpdmUsXHJcbiAgTmdDb250cm9sLFxyXG4gIFZhbGlkYXRpb25FcnJvcnMsXHJcbiAgVmFsaWRhdG9yLFxyXG59IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuaW1wb3J0IHsgT2JzZXJ2YWJsZSB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBTYWNGb3JtTGF5b3V0Q29tbW9uIH0gZnJvbSAnLi4vY29udHJvbHMvbGF5b3V0L2Zvcm1sYXlvdXQnO1xyXG5pbXBvcnQgeyBDb250cm9sSGVpZ2h0IH0gZnJvbSAnLi4vZW51bXMvQ29udHJvbEhlaWdodCc7XHJcbmltcG9ydCB7IElTYWNDb25maWd1cmF0aW9uU2VydmljZSB9IGZyb20gJy4uL2ludGVyZmFjZXMvSVNhY0NvbmZpZ3VyYXRpb25TZXJ2aWNlJztcclxuaW1wb3J0IHsgSVNhY0ljb25TZXJ2aWNlIH0gZnJvbSAnLi4vaW50ZXJmYWNlcy9JU2FjSWNvblNlcnZpY2UnO1xyXG5pbXBvcnQgeyBJU2FjTGFiZWxTaXplcyB9IGZyb20gJy4uL2ludGVyZmFjZXMvSVNhY0xhYmVsU2l6ZXMnO1xyXG5pbXBvcnQgeyBJU2FjTG9jYWxpc2F0aW9uU2VydmljZSB9IGZyb20gJy4uL2ludGVyZmFjZXMvSVNhY0xvY2FsaXNhdGlvblNlcnZpY2UnO1xyXG5pbXBvcnQgeyBJU2FjVmFsaWRhdGlvbktleVNlcnZpY2UgfSBmcm9tICcuLi9pbnRlcmZhY2VzL0lTYWNWYWxpZGF0aW9uS2V5U2VydmljZSc7XHJcbmltcG9ydCB7IElBYnN0cmFjdENvbnRyb2xMYWJlbEV4dGVuc2lvbiB9IGZyb20gJy4uL2ludGVyZmFjZXMvaWFic3RyYWN0Y29udHJvbGxhYmVsJztcclxuaW1wb3J0IHtcclxuICBTQUNJQ09OX1NFUlZJQ0UsXHJcbiAgU0FDVkFMSURBVElPTktFWV9TRVJWSUNFLFxyXG4gIFNhY0RlZmF1bHRJY29uU2VydmljZSxcclxuICBTYWNEZWZhdWx0VmFsaWRhdGlvbktleVNlcnZpY2UsXHJcbn0gZnJvbSAnLi4vc2VydmljZXMnO1xyXG5pbXBvcnQge1xyXG4gIFNBQ0NPTkZJR1VSQVRJT05fU0VSVklDRSxcclxuICBTYWNEZWZhdWx0Q29uZmlndXJhdGlvblNlcnZpY2UsXHJcbn0gZnJvbSAnLi4vc2VydmljZXMvc2FjLWNvbmZpZ3VyYXRpb24uc2VydmljZSc7XHJcbmltcG9ydCB7XHJcbiAgU0FDTE9DQUxJU0FUSU9OX1NFUlZJQ0UsXHJcbiAgU2FjRGVmYXVsdExvY2FsaXNhdGlvblNlcnZpY2UsXHJcbn0gZnJvbSAnLi4vc2VydmljZXMvc2FjLWxvY2FsaXNhdGlvbi5zZXJ2aWNlJztcclxuaW1wb3J0IHsgY29udmVydFRvQm9vbGVhbiB9IGZyb20gJy4uL3V0aWxpdGllcy9jb252ZXJ0aW9uJztcclxuaW1wb3J0IHsgY3JlYXRlR3VpZCB9IGZyb20gJy4uL3V0aWxpdGllcy9ndWlkJztcclxuaW1wb3J0IHsgVmFsaWRhdGlvbkVycm9ySXRlbSB9IGZyb20gJy4uL3ZhbGlkYXRpb24nO1xyXG4vKipcclxuICogQWJzdHJhY3QgS2xhc3NlIGbDvHIgU2FjQmFzZU1vZGVsQ29udHJvbC4gSW1wbGVtZW50cyBDb250cm9sVmFsdWVBY2Nlc3NvciwgVmFsaWRhdG9yLCBPbkluaXRcclxuICovXHJcbkBEaXJlY3RpdmUoKVxyXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgU2FjQmFzZU1vZGVsQ29udHJvbDxWQUxVRT5cclxuICBpbXBsZW1lbnRzIENvbnRyb2xWYWx1ZUFjY2Vzc29yLCBWYWxpZGF0b3IsIE9uSW5pdCwgQWZ0ZXJWaWV3SW5pdFxyXG57XHJcbiAgLy8gI3JlZ2lvbiBQcm9wZXJ0aWVzXHJcblxyXG4gIC8qKlxyXG4gICAqIElubGluZSBFcnJvcnMgZsO8ciBkYXMgQ29udHJvbFxyXG4gICAqL1xyXG4gIHByaXZhdGUgX2lubGluZWVycm9yZW5hYmxlZDogYm9vbGVhbiB8IG51bGwgPSBudWxsO1xyXG4gIHByaXZhdGUgX2xhYmVsOiBzdHJpbmcgPSAnJztcclxuXHJcbiAgLyoqXHJcbiAgICogU2VydmljZSBmb3IgbG9hZGluZyBkZWZhdWx0IHNldHRpbmdzIGZvciB0aGUgY29udHJvbHNcclxuICAgKi9cclxuICBwcm90ZWN0ZWQgcmVhZG9ubHkgY29uZmlndXJhdGlvblNlcnZpY2U6IElTYWNDb25maWd1cmF0aW9uU2VydmljZTtcclxuXHJcbiAgLyoqXHJcbiAgICogQm9vbGVhbiBQcm9wZXJ0eSBkaXJ0eTsgZGVmYXVsdCBXZXJ0IC0gZmFsc2VcclxuICAgKi9cclxuICBwcm90ZWN0ZWQgX2RpcnR5OiBib29sZWFuID0gZmFsc2U7XHJcbiAgLyoqXHJcbiAgICogU2FjTW9kZWwgRm9ybSBpc3QgZGlzYWJsZWRcclxuICAgKi9cclxuICBwcm90ZWN0ZWQgX2Rpc2FibGVkRm9ybTogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIC8qKlxyXG4gICAqIFZhbGlkYXRvclxyXG4gICAqL1xyXG4gIHByb3RlY3RlZCBfb25DaGFuZ2U6ICgpID0+IHZvaWQ7XHJcbiAgLyoqXHJcbiAgICogQm9vbGVhbiBQcm9wZXJ0eSB0b3VjaGVkOyBkZWZhdWx0IFdlcnQgLSBmYWxzZVxyXG4gICAqL1xyXG4gIHByb3RlY3RlZCBfdG91Y2hlZDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIC8qKlxyXG4gICAqIEludGVybmUgVmFyaWFibGUsIGRpZSBkZW4gV2VydCBkZXMgQ29udHJvbHMgaMOkbHRcclxuICAgKi9cclxuICBwcm90ZWN0ZWQgX3ZhbHVlOiBWQUxVRSA9IG51bGw7XHJcbiAgLyoqXHJcbiAgICogRm9ybSBsYXlvdXQgaW5zdGFuY2UgaWYgZXhpc3RzXHJcbiAgICovXHJcbiAgcHJvdGVjdGVkIGZvcm1sYXlvdXQ6IFNhY0Zvcm1MYXlvdXRDb21tb24gPSBudWxsO1xyXG4gIC8qKlxyXG4gICAqIGljb24gc2VydmljZVxyXG4gICAqL1xyXG4gIHByb3RlY3RlZCBpY29uU2VydmljZTogSVNhY0ljb25TZXJ2aWNlO1xyXG4gIC8qKlxyXG4gICAqIFNlcnZpY2UgZsO8ciBFcnJvciBMb2NhbGlzYXRpb25cclxuICAgKi9cclxuICBwcm90ZWN0ZWQgbG5nUmVzb3VyY2VTZXJ2aWNlOiBJU2FjTG9jYWxpc2F0aW9uU2VydmljZTtcclxuICAvKipcclxuICAgKiBuZ0NvbnRyb2xcclxuICAgKi9cclxuICBwcm90ZWN0ZWQgbmdDb250cm9sOiBGb3JtQ29udHJvbDtcclxuXHJcbiAgLyoqXHJcbiAgICogRGVmaW5lcyB0aGUgc3RhbmRhcmQgaGVpZ2h0IG9mIHRoZSBjb21wb25lbnRzXHJcbiAgICovXHJcbiAgQElucHV0KClcclxuICBwdWJsaWMgY29tcG9uZW50SGVpZ2h0OiBDb250cm9sSGVpZ2h0IHwgbnVsbCA9IG51bGw7XHJcbiAgLyoqXHJcbiAgICogRGVha3RpdmllcnQgZGFzIElucHV0IENvbnRyb2xcclxuICAgKi9cclxuICBASW5wdXQoKSBwdWJsaWMgZGlzYWJsZWQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuICAvKipcclxuICAgKiBEZWFrdGl2aWVydCBkYXMgTGFiZWwgaW0gVGVtcGxhdGVcclxuICAgKi9cclxuICBASW5wdXQoKSBwdWJsaWMgZGlzYWJsZWxhYmVsOiBib29sZWFuID0gZmFsc2U7XHJcbiAgLyoqXHJcbiAgICogVGV4dCB0byBzdXBwb3J0IHRoZSB1c2VyIGR1cmluZyBpbnB1dC5cclxuICAgKi9cclxuICBASW5wdXQoKSBwdWJsaWMgaGVscHRleHQ6IHN0cmluZyA9ICcnO1xyXG4gIC8qKlxyXG4gICAqIE1vZGUgZm9yIGRpc3BsYXkgaGVscHRleHRcclxuICAgKi9cclxuICBASW5wdXQoKVxyXG4gIHB1YmxpYyBoZWxwdGV4dG1vZGU6ICd0b29sdGlwJyB8ICd0ZXh0JyB8IG51bGw7XHJcbiAgLyoqXHJcbiAgICogZGVmaW5lcyB0aGF0IGVycm9yIG1lc3NhZ2VzIGFyZSBkaXNwbGF5ZWQgdW5kZXIgdGhlIGNvbnRyb2xzXHJcbiAgICovXHJcbiAgQElucHV0KCkgcHVibGljIGlubGluZUVycm9yOiBib29sZWFuID0gdHJ1ZTtcclxuICAvKipcclxuICAgKiBkZWZpbmVzIHRoYXQgdGhlIGxhYmVscyBhcmUgZGlzcGxheWVkIGFzIGFkYXB0aXZlIGxhYmVsc1xyXG4gICAqL1xyXG4gIEBJbnB1dCgpIHB1YmxpYyBpc0FkYXB0aXZlTGFiZWw6IGJvb2xlYW4gPSBmYWxzZTtcclxuICAvKipcclxuICAgKiBkZWZhdWx0IGxhYmUgc2l6ZSBmb3IgbGFyZ2UgZGV2aWNlc1xyXG4gICAqL1xyXG4gIEBJbnB1dCgpXHJcbiAgcHVibGljIGxhYmVsU2l6ZUxnOiBudW1iZXIgfCBudWxsID0gbnVsbDtcclxuICAvKipcclxuICAgKiBkZWZhdWx0IGxhYmVsIHNpemUgZm9yIG1lZGl1bSBkZXZpY2VzXHJcbiAgICovXHJcbiAgQElucHV0KClcclxuICBwdWJsaWMgbGFiZWxTaXplTWQ6IG51bWJlciB8IG51bGwgPSBudWxsO1xyXG4gIC8qKlxyXG4gICAqIGRlZmF1bHQgbGFiZWwgc2l6ZSBmb3Igc21hbGwgZGV2aWNlc1xyXG4gICAqL1xyXG4gIEBJbnB1dCgpXHJcbiAgcHVibGljIGxhYmVsU2l6ZVNtOiBudW1iZXIgfCBudWxsID0gbnVsbDtcclxuICAvKipcclxuICAgKiBkZWZhdWx0IGxhYmVsIHNpemUgZm9yIGV4dHJhIGxhcmdlIGRldmljZXNcclxuICAgKi9cclxuICBASW5wdXQoKVxyXG4gIHB1YmxpYyBsYWJlbFNpemVYbDogbnVtYmVyIHwgbnVsbCA9IG51bGw7XHJcbiAgLyoqXHJcbiAgICogZGVmYXVsdCBsYWJlbCBjb2x1bW4gc2l6ZVxyXG4gICAqL1xyXG4gIEBJbnB1dCgpXHJcbiAgcHVibGljIGxhYmVsU2l6ZVhzOiBudW1iZXIgfCBudWxsID0gbnVsbDtcclxuICAvKipcclxuICAgKiBkZWZhdWx0IGxhYmVsIHNpemUgZm9yIGV4dHJhIGV4dHJhIGxhcmdlIGRldmljZXNcclxuICAgKi9cclxuICBASW5wdXQoKVxyXG4gIHB1YmxpYyBsYWJlbFNpemVYeGw6IG51bWJlciB8IG51bGwgPSBudWxsO1xyXG4gIC8qKlxyXG4gICAqIE5hbWUgZGVzIENvbnRyb2xzXHJcbiAgICovXHJcbiAgQElucHV0KCkgcHVibGljIG5hbWU6IHN0cmluZyA9IGNyZWF0ZUd1aWQoKTtcclxuXHJcbiAgLyoqXHJcbiAgICogQ29udHJvbEhlaWdodCBlbnVtIGZvciB1c2UgaW4gSFRNTCBtYXJrdXBcclxuICAgKi9cclxuICBwdWJsaWMgQ29udHJvbEhlaWdodDogdHlwZW9mIENvbnRyb2xIZWlnaHQgPSBDb250cm9sSGVpZ2h0O1xyXG4gIC8qKlxyXG4gICAqIExlZXJlIEltcGxlbWVudGF0aW9uIHZvbiBcInByb3BhZ2F0ZUNoYW5nZVwiLiBNdXNzIGdlbWFjaHQgd2VyZGVuLCBkYW1pdCBrZWluIEZlaGxlciBlbnRzdGVodFxyXG4gICAqL1xyXG4gIHB1YmxpYyBwcm9wYWdhdGVDaGFuZ2U6IGFueSA9ICgpID0+IHt9O1xyXG4gIC8qKlxyXG4gICAqIExlZXJlIEltcGxlbWVudGF0aW9uIHZvbiBcInByb3BhZ2F0ZVRvdWNoXCIuIE11c3MgZ2VtYWNodCB3ZXJkZW4sIGRhbWl0IGtlaW4gRmVobGVyIGVudHN0ZWh0XHJcbiAgICovXHJcbiAgcHVibGljIHByb3BhZ2F0ZVRvdWNoOiBhbnkgPSAoKSA9PiB7fTtcclxuICAvKipcclxuICAgKiBTZXJ2aWNlIHRvIHJlY2VpdmUgc3RhbmRhcmQgdmFsaWRhdGlvbiBtZXNzYWdlIGtleXMgYW5kIHRleHRzXHJcbiAgICovXHJcbiAgcHVibGljIHZhbGlkYXRpb25LZXlTZXJ2aWNlOiBJU2FjVmFsaWRhdGlvbktleVNlcnZpY2U7XHJcblxyXG4gIC8vICNlbmRyZWdpb24gUHJvcGVydGllc1xyXG5cclxuICAvLyAjcmVnaW9uIENvbnN0cnVjdG9yc1xyXG5cclxuICAvKipcclxuICAgKiBDb25zdHJ1Y3RvclxyXG4gICAqIEBwYXJhbSBmb3JtbGF5b3V0IFNhY0Zvcm1MYXlvdXRDb21tb24gdG8gZGVmaW5lIHNjb3BlZCBsYXlvdXQgc2V0dGluZ3NcclxuICAgKiBAcGFyYW0gaW5qZWN0b3IgSW5qZWN0b3IgZm9yIGluamVjdGluZyBzZXJ2aWNlc1xyXG4gICAqL1xyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgQEhvc3QoKSBmb3JtbGF5b3V0OiBTYWNGb3JtTGF5b3V0Q29tbW9uLFxyXG4gICAgcHJpdmF0ZSByZWFkb25seSBpbmplY3RvcjogSW5qZWN0b3JcclxuICApIHtcclxuICAgIHRoaXMuZm9ybWxheW91dCA9IGZvcm1sYXlvdXQ7XHJcbiAgICB0aGlzLnZhbGlkYXRpb25LZXlTZXJ2aWNlID0gaW5qZWN0b3IuZ2V0KFxyXG4gICAgICBTQUNWQUxJREFUSU9OS0VZX1NFUlZJQ0UsXHJcbiAgICAgIG5ldyBTYWNEZWZhdWx0VmFsaWRhdGlvbktleVNlcnZpY2UoKVxyXG4gICAgKTtcclxuICAgIHRoaXMubG5nUmVzb3VyY2VTZXJ2aWNlID0gaW5qZWN0b3IuZ2V0KFxyXG4gICAgICBTQUNMT0NBTElTQVRJT05fU0VSVklDRSxcclxuICAgICAgbmV3IFNhY0RlZmF1bHRMb2NhbGlzYXRpb25TZXJ2aWNlKHRoaXMudmFsaWRhdGlvbktleVNlcnZpY2UpXHJcbiAgICApO1xyXG5cclxuICAgIHRoaXMuY29uZmlndXJhdGlvblNlcnZpY2UgPSBpbmplY3Rvci5nZXQoXHJcbiAgICAgIFNBQ0NPTkZJR1VSQVRJT05fU0VSVklDRSxcclxuICAgICAgbmV3IFNhY0RlZmF1bHRDb25maWd1cmF0aW9uU2VydmljZSgpXHJcbiAgICApO1xyXG5cclxuICAgIHRoaXMuaWNvblNlcnZpY2UgPSBpbmplY3Rvci5nZXQoXHJcbiAgICAgIFNBQ0lDT05fU0VSVklDRSxcclxuICAgICAgbmV3IFNhY0RlZmF1bHRJY29uU2VydmljZSgpXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgLy8gI2VuZHJlZ2lvbiBDb25zdHJ1Y3RvcnNcclxuXHJcbiAgLy8gI3JlZ2lvbiBQdWJsaWMgR2V0dGVycyBBbmQgU2V0dGVyc1xyXG5cclxuICAvKipcclxuICAgKiBBa3RpdmllcnQgb2RlciBEZWFrdGl2aWVydCBkaWUgSW5saW5lIEVycm9ycyBmw7xyIGRhcyBDb250cm9sXHJcbiAgICovXHJcbiAgQElucHV0KClcclxuICBwdWJsaWMgc2V0IGlubGluZWVycm9yZW5hYmxlZCh2YWx1ZTogYm9vbGVhbiB8IG51bGwpIHtcclxuICAgIGlmICh2YWx1ZSA9PT0gbnVsbCB8fCB2YWx1ZSA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIHRoaXMuX2lubGluZWVycm9yZW5hYmxlZCA9IG51bGw7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLl9pbmxpbmVlcnJvcmVuYWJsZWQgPSBjb252ZXJ0VG9Cb29sZWFuKHZhbHVlKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIERlZmluaWVydCBkZW4gTGFiZWwgVGV4dFxyXG4gICAqL1xyXG4gIEBJbnB1dCgpIHB1YmxpYyBzZXQgbGFiZWwodjogc3RyaW5nKSB7XHJcbiAgICB0aGlzLl9sYWJlbCA9IHY7XHJcbiAgICB0aGlzLlVwZGF0ZUxhYmVsVG9Db250cm9sKCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBTZXQgTWV0aG9kZSBmw7xyIE5nTW9kZWwgQmluZGluZyBpbiBIdG1sIE1hcmt1cFxyXG4gICAqIElucHV0IHdpcmQgYmVuw7Z0aWd0LCBkYW1pdCBkZXIgV2VydCBhdWNoIMO8YmVyIGRhcyBNYXJrdXAgZ2VzZXR6dCB3ZXJkZW4ga2Fubi5cclxuICAgKi9cclxuICBASW5wdXQoKVxyXG4gIHB1YmxpYyBzZXQgdmFsdWUodjogVkFMVUUpIHtcclxuICAgIGlmICh0aGlzLmRpc2FibGVkKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLl92YWx1ZSA9IHRoaXMuQ29udmVydElucHV0VmFsdWUodik7XHJcbiAgICB0aGlzLnByb3BhZ2F0ZUNoYW5nZSh0aGlzLl92YWx1ZSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBHZXQgSWNvbiBmb3IgSGVscHRleHQgVG9vbHRpcFxyXG4gICAqL1xyXG4gIHB1YmxpYyBnZXQgSGVscHRleHRUb29sdGlwSWNvbigpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIHRoaXMuaWNvblNlcnZpY2UuR2VuZXJpY0hlbHB0ZXh0SWNvbjtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIE1ldGhvZGUgZXJnaWJ0IEJvb2xlYW4gV2VydCBmw7xyIGRpcnR5XHJcbiAgICovXHJcbiAgcHVibGljIGdldCBkaXJ0eSgpOiBib29sZWFuIHtcclxuICAgIGlmICh0aGlzLm5nQ29udHJvbCAhPT0gbnVsbCkge1xyXG4gICAgICB0aGlzLl9kaXJ0eSA9IHRoaXMubmdDb250cm9sLmRpcnR5O1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiB0aGlzLl9kaXJ0eTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFNob3cgZXJyb3IgbWVzc2FnZXMgaW5saW5lXHJcbiAgICovXHJcbiAgcHVibGljIGdldCBpbmxpbmVlcnJvcmVuYWJsZWQoKTogYm9vbGVhbiB8IG51bGwge1xyXG4gICAgcmV0dXJuIHRoaXMuX2lubGluZWVycm9yZW5hYmxlZDtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIE1ldGhvZGUgZXJnaWJ0IGJvb2xlYW4gV2VydCB3ZW5uIEZvcm0gaW52YWxpZCBvZGVyIG5pY2h0IGludmFsaWQgaXN0XHJcbiAgICovXHJcbiAgcHVibGljIGdldCBpbnZhbGlkKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIChcclxuICAgICAgdGhpcy5uZ0NvbnRyb2wgIT09IHVuZGVmaW5lZCAmJlxyXG4gICAgICB0aGlzLm5nQ29udHJvbCAhPT0gbnVsbCAmJlxyXG4gICAgICB0aGlzLm5nQ29udHJvbC5pbnZhbGlkXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogRGVmaW5pZXJ0IG9iIGRhcyBDb250cm9sIGRpc2FibGVkIGlzdFxyXG4gICAqL1xyXG4gIHB1YmxpYyBnZXQgaXNkaXNhYmxlZCgpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLl9kaXNhYmxlZEZvcm0gfHwgdGhpcy5kaXNhYmxlZDtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFJldHVybnMgd2hldGhlciB0aGUgaW5saW5lIGVycm9yIG1lc3NhZ2VzIGFyZSBhY3RpdmUgZm9yIHRoaXMgY29udHJvbC5cclxuICAgKi9cclxuICBwdWJsaWMgZ2V0IGlzaW5saW5lZXJyb3JlbmFibGVkKCk6IGJvb2xlYW4ge1xyXG4gICAgaWYgKHRoaXMuX2lubGluZWVycm9yZW5hYmxlZCAhPT0gbnVsbCkge1xyXG4gICAgICByZXR1cm4gdGhpcy5faW5saW5lZXJyb3JlbmFibGVkO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChcclxuICAgICAgdGhpcy5mb3JtbGF5b3V0ICE9PSBudWxsICYmXHJcbiAgICAgIHRoaXMuZm9ybWxheW91dC5Jc0lubGluZUVycm9yRW5hYmxlZCAhPT0gbnVsbFxyXG4gICAgKSB7XHJcbiAgICAgIHJldHVybiB0aGlzLmZvcm1sYXlvdXQ/LklzSW5saW5lRXJyb3JFbmFibGVkO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLmNvbmZpZ3VyYXRpb25TZXJ2aWNlLklubGluZUVycm9yRW5hYmxlZCAhPT0gbnVsbCkge1xyXG4gICAgICByZXR1cm4gdGhpcy5jb25maWd1cmF0aW9uU2VydmljZS5JbmxpbmVFcnJvckVuYWJsZWQ7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHRydWU7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBEZWZpbmllcnQgZGVuIExhYmVsIFRleHRcclxuICAgKi9cclxuICBwdWJsaWMgZ2V0IGxhYmVsKCk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gdGhpcy5fbGFiZWw7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiByZXR1cm5zIGFuIG9iamVjdCB3aXRoIGFsbCBsYWJlbCBzaXplcy4gVGhlc2UgdmFsdWVzIGNhbiB0aGVuIGJlIHRyYW5zZmVycmVkIHRvIGNvcnJlc3BvbmRpbmcgQ1NTIGNsYXNzZXMgdXNpbmcgYSBwaXBlXHJcbiAgICovXHJcbiAgcHVibGljIGdldCBsYWJlbFNpemVzKCk6IElTYWNMYWJlbFNpemVzIHtcclxuICAgIHJldHVybiB7XHJcbiAgICAgIGxhYmVsU2l6ZVNtOiB0aGlzLmxhYmVsU2l6ZVNtLFxyXG4gICAgICBsYWJlbFNpemVNZDogdGhpcy5sYWJlbFNpemVNZCxcclxuICAgICAgbGFiZWxTaXplWHM6IHRoaXMubGFiZWxTaXplWHMsXHJcbiAgICAgIGxhYmVsU2l6ZVhsOiB0aGlzLmxhYmVsU2l6ZVhsLFxyXG4gICAgICBsYWJlbFNpemVYeGw6IHRoaXMubGFiZWxTaXplWHhsLFxyXG4gICAgICBsYWJlbFNpemVMZzogdGhpcy5sYWJlbFNpemVMZyxcclxuICAgIH07XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBNZXRob2RlIGVyZ2lidCBCb29sZWFuIFdlcnQgZsO8ciB0b3VjaGVkXHJcbiAgICovXHJcbiAgcHVibGljIGdldCB0b3VjaGVkKCk6IGJvb2xlYW4ge1xyXG4gICAgaWYgKHRoaXMubmdDb250cm9sICE9PSBudWxsKSB7XHJcbiAgICAgIHRoaXMuX3RvdWNoZWQgPSB0aGlzLm5nQ29udHJvbC50b3VjaGVkO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiB0aGlzLl90b3VjaGVkO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogR2V0IE1ldGhvZGUgZsO8ciBOZ01vZGVsIEJpbmRpbmcgaW4gSHRtbCBNYXJrdXBcclxuICAgKi9cclxuICBwdWJsaWMgZ2V0IHZhbHVlKCk6IFZBTFVFIHtcclxuICAgIHJldHVybiB0aGlzLl92YWx1ZTtcclxuICB9XHJcblxyXG4gIC8vICNlbmRyZWdpb24gUHVibGljIEdldHRlcnMgQW5kIFNldHRlcnNcclxuXHJcbiAgLy8gI3JlZ2lvbiBQdWJsaWMgTWV0aG9kc1xyXG5cclxuICAvKipcclxuICAgKiBNZXRob2RlIGVyZ2lidCBFcnJvciBhbmhhbmQgdm9uIGdlZ2ViZW5lbiBLcml0ZXJpZW5cclxuICAgKi9cclxuICBwdWJsaWMgR2V0RXJyb3JNZXNzYWdlKCk6IE9ic2VydmFibGU8c3RyaW5nPiB7XHJcbiAgICBpZiAodGhpcy5uZ0NvbnRyb2wuZXJyb3JzID09PSB1bmRlZmluZWQgfHwgdGhpcy5uZ0NvbnRyb2wuZXJyb3JzID09PSBudWxsKSB7XHJcbiAgICAgIHJldHVybiBuZXcgT2JzZXJ2YWJsZTxzdHJpbmc+KChvYnNlcnZlcikgPT4ge1xyXG4gICAgICAgIG9ic2VydmVyLm5leHQoJycpO1xyXG4gICAgICAgIG9ic2VydmVyLmNvbXBsZXRlKCk7XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IGVycm9yczogVmFsaWRhdGlvbkVycm9ycyA9IHRoaXMubmdDb250cm9sLmVycm9ycztcclxuXHJcbiAgICBpZiAoZXJyb3JzLmxlbmd0aCA9PT0gMCkge1xyXG4gICAgICByZXR1cm4gbmV3IE9ic2VydmFibGU8c3RyaW5nPigob2JzZXJ2ZXIpID0+IHtcclxuICAgICAgICBvYnNlcnZlci5uZXh0KCcnKTtcclxuICAgICAgICBvYnNlcnZlci5jb21wbGV0ZSgpO1xyXG4gICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBrZXlzOiBzdHJpbmdbXSA9IE9iamVjdC5rZXlzKGVycm9ycyk7XHJcblxyXG4gICAgaWYgKGtleXMubGVuZ3RoIDw9IDApIHtcclxuICAgICAgcmV0dXJuIG5ldyBPYnNlcnZhYmxlPHN0cmluZz4oKG9ic2VydmVyKSA9PiB7XHJcbiAgICAgICAgb2JzZXJ2ZXIubmV4dCgnJyk7XHJcbiAgICAgICAgb2JzZXJ2ZXIuY29tcGxldGUoKTtcclxuICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgZXJyb3JJdGVtOiBWYWxpZGF0aW9uRXJyb3JJdGVtID0gZXJyb3JzW2tleXNbMF1dO1xyXG5cclxuICAgIC8vIFZhbGlkYXRpb24gUGFyYW1ldGVyc1xyXG4gICAgY29uc3QgcGFyYW1ldGVycyA9IHt9O1xyXG4gICAgaWYgKGVycm9ySXRlbS5wYXJhbWV0ZXJzICE9PSBudWxsICYmIGVycm9ySXRlbS5wYXJhbWV0ZXJzICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgZXJyb3JJdGVtLnBhcmFtZXRlcnMuZm9yRWFjaCgodiwgaykgPT4ge1xyXG4gICAgICAgIHBhcmFtZXRlcnNba10gPSB2O1xyXG4gICAgICB9KTtcclxuICAgIH1cclxuICAgIHBhcmFtZXRlcnNbJ0ZJRUxEJ10gPSBlcnJvckl0ZW0uZmllbGROYW1lO1xyXG5cclxuICAgIHJldHVybiB0aGlzLmxuZ1Jlc291cmNlU2VydmljZS5HZXRTdHJpbmcoXHJcbiAgICAgIGVycm9ySXRlbS5lcnJvck1lc3NhZ2VLZXksXHJcbiAgICAgIHBhcmFtZXRlcnNcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBJbiBBbmd1bGFyIDEwIHRoZSBDb250cm9sIExhYmVsIGZvciBSZWFjdGl2ZSBGb3JtcyBjYW4gYmUgc2V0IGZpcnN0IHRpbWUgaGVyZS4gV2l0aCBBbmd1bGFyIDEzIGlzIHN1cHBvcnRlZCBieSBpbml0IGluIE9uSW5pdFxyXG4gICAqL1xyXG4gIHB1YmxpYyBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XHJcbiAgICAvLyByZWNlaXZlIGZvcm0gdmlhIGZvcm1jb250cm9sbmFtZSBvciBmb3JtY29udHJvbCBpbnN0YW5jZVxyXG4gICAgY29uc3QgZm9ybUNvbnRyb2wgPSB0aGlzLmluamVjdG9yLmdldChOZ0NvbnRyb2wsIG51bGwpO1xyXG4gICAgaWYgKGZvcm1Db250cm9sIGluc3RhbmNlb2YgRm9ybUNvbnRyb2xOYW1lKSB7XHJcbiAgICAgIGNvbnN0IGZvcm0gPSB0aGlzLmluamVjdG9yLmdldChGb3JtR3JvdXBEaXJlY3RpdmUsIG51bGwpO1xyXG4gICAgICB0aGlzLm5nQ29udHJvbCA9IGZvcm0uZ2V0Q29udHJvbChmb3JtQ29udHJvbCk7XHJcbiAgICB9IGVsc2UgaWYgKGZvcm1Db250cm9sKSB7XHJcbiAgICAgIHRoaXMubmdDb250cm9sID0gZm9ybUNvbnRyb2wuY29udHJvbCBhcyBGb3JtQ29udHJvbDtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLlVwZGF0ZUxhYmVsVG9Db250cm9sKCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBJbml0IEV2ZW50XHJcbiAgICovXHJcbiAgcHVibGljIG5nT25Jbml0KCkge1xyXG4gICAgLy8gc2V0IGxhYmVsIHNpemVzIGZyb20gZm9ybWxheW91dCBkaXJlY3RpdmVcclxuICAgIHRoaXMuc2V0TGFiZWxTaXplcygpO1xyXG5cclxuICAgIC8vIHNldCBjb21wb25lbnQgaGVpZ3RoIGZyb20gZnJvbWxheW91dCBkaXJlY3RpdmVcclxuICAgIHRoaXMuc2V0Q29tcG9uZW50SGVpZ2h0KCk7XHJcblxyXG4gICAgLy8gc2V0IGFkYXB0aXZlIGxhYmVsIHByb3BlcnR5IGZyb20gZm9ybWxheW91dCBkaXJlY3RpdmVcclxuICAgIHRoaXMuc2V0SXNBZGFwdGl2ZUxhYmVsKCk7XHJcblxyXG4gICAgLy8gc2V0IG1ldGhvZCB0byBkaXNwbGF5IGhlbHB0ZXh0XHJcbiAgICB0aGlzLnNldEhlbHBUZXh0TW9kZSgpO1xyXG5cclxuICAgIHRoaXMuT25DbGFzc0luaXQoKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIE1ldGhvZGUgZXJnaWJ0IGJvb2xlYW4gdG91Y2hlZCA9IHRydWVcclxuICAgKi9cclxuICBwdWJsaWMgb25Ub3VjaCgpOiB2b2lkIHtcclxuICAgIHRoaXMuX3RvdWNoZWQgPSB0cnVlO1xyXG4gICAgdGhpcy5wcm9wYWdhdGVUb3VjaCgpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogTWV0aG9kZSwgZGFtaXQgYW5kZXJlIENvbnRyb2xzIMOkbmRlcnVuZ2VuIGltIENvbnRyb2wgbWl0YmVrb21tZW4ga8O2bm5lblxyXG4gICAqIFp1ciDDhG5kZXJ1bmdzaW5mbyBkaWUgTWV0aG9kZSBwcm9wYWdhdGVDaGFuZ2UgYXVmcnVmZW4uXHJcbiAgICovXHJcbiAgcHVibGljIHJlZ2lzdGVyT25DaGFuZ2UoZm46IGFueSk6IHZvaWQge1xyXG4gICAgdGhpcy5wcm9wYWdhdGVDaGFuZ2UgPSAob2JqKSA9PiBmbihvYmopO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogTWV0aG9kZSwgZGFtaXQgYW5kZXJlIENvbnRyb2xzIMOkbmRlcnVuZ2VuIG1pdGJla29tbWVuLCB3ZW5uIGRhcyBDb250cm9sIGFrdGl2aWVydCAoRm9jdXMpIHdpcmQuXHJcbiAgICovXHJcbiAgcHVibGljIHJlZ2lzdGVyT25Ub3VjaGVkKGZuOiBhbnkpOiB2b2lkIHtcclxuICAgIHRoaXMucHJvcGFnYXRlVG91Y2ggPSAob2JqKSA9PiBmbihvYmopO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogTWV0aG9kZSByZWdpc3RyaWVydCDDhG5kZXJ1bmdlbiBiZWkgZGVyIFZhbGlkaWVydW5nXHJcbiAgICovXHJcbiAgcHVibGljIHJlZ2lzdGVyT25WYWxpZGF0b3JDaGFuZ2UoZm46ICgpID0+IHZvaWQpOiB2b2lkIHtcclxuICAgIHRoaXMuX29uQ2hhbmdlID0gZm47XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBTZXR6dCBkYXMgQ29udHJvbCBhdWYgRGlzYWJsZWRcclxuICAgKi9cclxuICBwdWJsaWMgc2V0RGlzYWJsZWRTdGF0ZShpc0Rpc2FibGVkOiBib29sZWFuKTogdm9pZCB7XHJcbiAgICB0aGlzLl9kaXNhYmxlZEZvcm0gPSBpc0Rpc2FibGVkO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogTWV0aG9kZSBkaWUgZGVuIFdlcnQgZGVzIElucHV0cyBzZXR6dFxyXG4gICAqL1xyXG4gIHB1YmxpYyBzZXRWYWx1ZSh2OiBWQUxVRSk6IHZvaWQge1xyXG4gICAgdGhpcy52YWx1ZSA9IHY7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBWYWxpZGF0b3IgTWV0aG9kZVxyXG4gICAqL1xyXG4gIHB1YmxpYyB2YWxpZGF0ZShjOiBBYnN0cmFjdENvbnRyb2wpOiBWYWxpZGF0aW9uRXJyb3JzIHwgbnVsbCB7XHJcbiAgICBjb25zdCBlcnJvcjogVmFsaWRhdGlvbkVycm9ycyB8IG51bGwgPSB0aGlzLnZhbGlkYXRlRGF0YShjKTtcclxuICAgIHJldHVybiBlcnJvcjtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIE1ldGhvZGUgenVtIHNjaHJlaWJlbiB2b24gV2VydGVuIGF1cyBkZW0gTW9kZWwgaW4gZGFzIENvbnRyb2xcclxuICAgKi9cclxuICBwdWJsaWMgd3JpdGVWYWx1ZSh2YWx1ZTogVkFMVUUpIHtcclxuICAgIHRoaXMuX3ZhbHVlID0gdmFsdWU7XHJcbiAgfVxyXG5cclxuICAvLyAjZW5kcmVnaW9uIFB1YmxpYyBNZXRob2RzXHJcblxyXG4gIC8vICNyZWdpb24gUHVibGljIEFic3RyYWN0IE1ldGhvZHNcclxuXHJcbiAgLyoqXHJcbiAgICogQWJzdHJha3RlIFZhbGlkYXRvciBNZXRob2RlXHJcbiAgICovXHJcbiAgcHVibGljIGFic3RyYWN0IHZhbGlkYXRlRGF0YShjOiBBYnN0cmFjdENvbnRyb2wpOiBWYWxpZGF0aW9uRXJyb3JzIHwgbnVsbDtcclxuXHJcbiAgLy8gI2VuZHJlZ2lvbiBQdWJsaWMgQWJzdHJhY3QgTWV0aG9kc1xyXG5cclxuICAvLyAjcmVnaW9uIFByb3RlY3RlZCBNZXRob2RzXHJcblxyXG4gIC8qKlxyXG4gICAqIE1ldGhvZCBjYW4gT3ZlcndyaXRlbiBpbiBQYXJlbnQgQ2xhc3Nlc1xyXG4gICAqIEBwYXJhbSB2YWx1ZSBXZXJ0IHdlbGNoZXIgaW4gZGVuIGtvcnJla3RlbiBUeXAga29udmVydGllcnQgd2VyZGVuIHNvbGxcclxuICAgKiBAcmV0dXJucyBXZXJ0IGltIGtvcnJla3RlbiBUeXBcclxuICAgKi9cclxuICBwcm90ZWN0ZWQgQ29udmVydElucHV0VmFsdWUodmFsdWU6IFZBTFVFKTogVkFMVUUge1xyXG4gICAgcmV0dXJuIHZhbHVlO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogTWV0aG9kZSBlcmdpYnQgRGVjaW1hbCBTeW1ib2xcclxuICAgKi9cclxuICBwcm90ZWN0ZWQgR2V0RGVjaW1hbFN5bWJvbCgpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuICcuJztcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIE1ldGhvZCBjYW4gYmUgdXNlZCB0byBTZXQgUHJvcGVydGllcyBhdCBDbGFzcyBJbml0XHJcbiAgICovXHJcbiAgcHJvdGVjdGVkIE9uQ2xhc3NJbml0KCk6IHZvaWQge31cclxuXHJcbiAgLyoqXHJcbiAgICogQWt0dWFsaXNpZXJ0IGRlbiBOZ01vZGVsIFdlcnQgdW5kIGRpZSBHw7xsdGlna2VpdCBkZXMgVmFsaWRhdG9ycyBkZXMgQ29udHJvbHNcclxuICAgKi9cclxuICBwcm90ZWN0ZWQgVXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLm5nQ29udHJvbCkge1xyXG4gICAgICB0aGlzLm5nQ29udHJvbC51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KHsgb25seVNlbGY6IHRydWUgfSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvLyAjZW5kcmVnaW9uIFByb3RlY3RlZCBNZXRob2RzXHJcblxyXG4gIC8vICNyZWdpb24gUHJpdmF0ZSBNZXRob2RzXHJcblxyXG4gIHByaXZhdGUgVXBkYXRlTGFiZWxUb0NvbnRyb2woKTogdm9pZCB7XHJcbiAgICAvLyBIQUNLOiBBZGQgYWRkaXRpb24gcHJvcGVydHkgdG8gRm9ybUNvbnRyb2wuIENhbiBiZSBmaXhlZCBpZiBzb2x1dGlvbiBmb3IgdGlja2V0OiBodHRwczovL2dpdGh1Yi5jb20vYW5ndWxhci9hbmd1bGFyL2lzc3Vlcy8xOTY4NlxyXG4gICAgaWYgKHRoaXMubmdDb250cm9sKSB7XHJcbiAgICAgIChcclxuICAgICAgICB0aGlzLm5nQ29udHJvbCBhcyB1bmtub3duIGFzIElBYnN0cmFjdENvbnRyb2xMYWJlbEV4dGVuc2lvblxyXG4gICAgICApLmNvbnRyb2xsYWJlbCA9IHRoaXMubGFiZWw7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBTZXQgY29tcG9uZW50IGhlaWdodCBmcm9tIHByb3BlcnR5IG9yIHBhcmVudCBsYXlvdXQgY29udHJvbFxyXG4gICAqL1xyXG4gIHByaXZhdGUgc2V0Q29tcG9uZW50SGVpZ2h0KCkge1xyXG4gICAgLy8gc2V0IHNpemUgZXh0cmEgc21hbGxcclxuICAgIGlmICghdGhpcy5jb21wb25lbnRIZWlnaHQpIHtcclxuICAgICAgaWYgKHRoaXMuZm9ybWxheW91dD8uY29tcG9uZW50SGVpZ2h0KSB7XHJcbiAgICAgICAgdGhpcy5jb21wb25lbnRIZWlnaHQgPSB0aGlzLmZvcm1sYXlvdXQuY29tcG9uZW50SGVpZ2h0O1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMuY29tcG9uZW50SGVpZ2h0ID0gdGhpcy5jb25maWd1cmF0aW9uU2VydmljZS5Db21wb25lbnRIZWlnaHQ7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFNldCBtb2RlIGZvciBoZWxwdGV4dC4gQ2FuIGJlIHRvb2x0aXAgb3IgdGV4dFxyXG4gICAqL1xyXG4gIHByaXZhdGUgc2V0SGVscFRleHRNb2RlKCkge1xyXG4gICAgaWYgKCF0aGlzLmhlbHB0ZXh0bW9kZSkge1xyXG4gICAgICBpZiAodGhpcy5mb3JtbGF5b3V0Py5oZWxwdGV4dG1vZGUpIHtcclxuICAgICAgICB0aGlzLmhlbHB0ZXh0bW9kZSA9IHRoaXMuZm9ybWxheW91dC5oZWxwdGV4dG1vZGU7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy5oZWxwdGV4dG1vZGUgPSB0aGlzLmNvbmZpZ3VyYXRpb25TZXJ2aWNlLkhlbHB0ZXh0TW9kZTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogU2V0IGFkYXB0aXZlIGxhYmVsIHByb3BlcnR5IGZyb20gcGFyZW50IGxheW91dCBjb250cm9sXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBzZXRJc0FkYXB0aXZlTGFiZWwoKSB7XHJcbiAgICBpZiAoIXRoaXMuaXNBZGFwdGl2ZUxhYmVsKSB7XHJcbiAgICAgIGlmICh0aGlzLmZvcm1sYXlvdXQ/LmlzQWRhcHRpdmVMYWJlbCAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgdGhpcy5pc0FkYXB0aXZlTGFiZWwgPSB0aGlzLmZvcm1sYXlvdXQuaXNBZGFwdGl2ZUxhYmVsO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMuaXNBZGFwdGl2ZUxhYmVsID0gZmFsc2U7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFNldCBsYWJlbCBzaXplcyBmcm9tIHByb3BlcnR5IG9yIHBhcmVudCBsYXlvdXQgY29udHJvbFxyXG4gICAqL1xyXG4gIHByaXZhdGUgc2V0TGFiZWxTaXplcygpIHtcclxuICAgIC8vIHNldCBzaXplIGV4dHJhIHNtYWxsXHJcbiAgICBpZiAoIXRoaXMubGFiZWxTaXplWHMpIHtcclxuICAgICAgaWYgKHRoaXMuZm9ybWxheW91dD8ubGFiZWxTaXplWHMpIHtcclxuICAgICAgICB0aGlzLmxhYmVsU2l6ZVhzID0gdGhpcy5mb3JtbGF5b3V0LmxhYmVsU2l6ZVhzO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMubGFiZWxTaXplWHMgPSB0aGlzLmNvbmZpZ3VyYXRpb25TZXJ2aWNlLkxhYmVsU2l6ZVhzO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLy8gc2V0IHNpemUgc21hbGxcclxuICAgIGlmICghdGhpcy5sYWJlbFNpemVTbSkge1xyXG4gICAgICBpZiAodGhpcy5mb3JtbGF5b3V0Py5sYWJlbFNpemVTbSkge1xyXG4gICAgICAgIHRoaXMubGFiZWxTaXplU20gPSB0aGlzLmZvcm1sYXlvdXQubGFiZWxTaXplU207XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy5sYWJlbFNpemVTbSA9IHRoaXMuY29uZmlndXJhdGlvblNlcnZpY2UuTGFiZWxTaXplU207XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvLyBzZXQgc2l6ZSBtZWRpdW1cclxuICAgIGlmICghdGhpcy5sYWJlbFNpemVNZCkge1xyXG4gICAgICBpZiAodGhpcy5mb3JtbGF5b3V0Py5sYWJlbFNpemVNZCkge1xyXG4gICAgICAgIHRoaXMubGFiZWxTaXplTWQgPSB0aGlzLmZvcm1sYXlvdXQubGFiZWxTaXplTWQ7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy5sYWJlbFNpemVNZCA9IHRoaXMuY29uZmlndXJhdGlvblNlcnZpY2UuTGFiZWxTaXplTWQ7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvLyBzZXQgc2l6ZSBsYXJnZVxyXG4gICAgaWYgKCF0aGlzLmxhYmVsU2l6ZUxnKSB7XHJcbiAgICAgIGlmICh0aGlzLmZvcm1sYXlvdXQ/LmxhYmVsU2l6ZUxnKSB7XHJcbiAgICAgICAgdGhpcy5sYWJlbFNpemVMZyA9IHRoaXMuZm9ybWxheW91dC5sYWJlbFNpemVMZztcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLmxhYmVsU2l6ZUxnID0gdGhpcy5jb25maWd1cmF0aW9uU2VydmljZS5MYWJlbFNpemVMZztcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8vIHNldCBzaXplIGV4dHJhIGxhcmdlXHJcbiAgICBpZiAoIXRoaXMubGFiZWxTaXplWGwpIHtcclxuICAgICAgaWYgKHRoaXMuZm9ybWxheW91dD8ubGFiZWxTaXplWGwpIHtcclxuICAgICAgICB0aGlzLmxhYmVsU2l6ZVhsID0gdGhpcy5mb3JtbGF5b3V0LmxhYmVsU2l6ZVhsO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMubGFiZWxTaXplWGwgPSB0aGlzLmNvbmZpZ3VyYXRpb25TZXJ2aWNlLkxhYmVsU2l6ZVhsO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLy8gc2V0IHNpemUgZXh0cmEgZXh0cmEgbGFyZ2VcclxuICAgIGlmICghdGhpcy5sYWJlbFNpemVYeGwpIHtcclxuICAgICAgaWYgKHRoaXMuZm9ybWxheW91dD8ubGFiZWxTaXplWHhsKSB7XHJcbiAgICAgICAgdGhpcy5sYWJlbFNpemVYeGwgPSB0aGlzLmZvcm1sYXlvdXQubGFiZWxTaXplWHhsO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMubGFiZWxTaXplWHhsID0gdGhpcy5jb25maWd1cmF0aW9uU2VydmljZS5MYWJlbFNpemVYeGw7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8vICNlbmRyZWdpb24gUHJpdmF0ZSBNZXRob2RzXHJcbn1cclxuIl19
531
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzZW1vZGVsY29udHJvbC5qcyIsInNvdXJjZVJvb3QiOiJDOi9Qcm9qZWt0ZS9zaW1wbGVhbmd1bGFyY29udHJvbHMtbmcxMC9jaC5qbmV0d29yay5zYWMtY29udHJvbHMvcHJvamVjdHMvc2FjLWNvbW1vbi9zcmMvIiwic291cmNlcyI6WyJjb21tb24vYmFzZW1vZGVsY29udHJvbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBRWxDLE9BQU8sRUFFTCxTQUFTLEVBQ1QsSUFBSSxFQUNKLFFBQVEsRUFDUixLQUFLLEdBRU4sTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUlMLGVBQWUsRUFDZixrQkFBa0IsRUFDbEIsU0FBUyxHQUdWLE1BQU0sZ0JBQWdCLENBQUM7QUFDeEIsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFDcEUsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBT3ZELE9BQU8sRUFDTCxlQUFlLEVBQ2Ysd0JBQXdCLEVBQ3hCLHFCQUFxQixFQUNyQiw4QkFBOEIsR0FDL0IsTUFBTSxhQUFhLENBQUM7QUFDckIsT0FBTyxFQUNMLHdCQUF3QixFQUN4Qiw4QkFBOEIsR0FDL0IsTUFBTSx1Q0FBdUMsQ0FBQztBQUMvQyxPQUFPLEVBQ0wsdUJBQXVCLEVBQ3ZCLDZCQUE2QixHQUM5QixNQUFNLHNDQUFzQyxDQUFDO0FBQzlDLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQzNELE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUcvQzs7R0FFRztBQUVILE1BQU0sT0FBZ0IsbUJBQW1CO0lBdUt2Qzs7OztPQUlHO0lBQ0gsWUFDVSxVQUErQixFQUN0QixRQUFrQjtRQUFsQixhQUFRLEdBQVIsUUFBUSxDQUFVO1FBM0tyQzs7V0FFRztRQUNLLHdCQUFtQixHQUFtQixJQUFJ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OzBCQU1MLEtBQUs7MEJBTUwsS0FBSzswQkFNTCxLQUFLOzJCQU1MLEtBQUs7bUJBTUwsS0FBSztvQ0FlTCxLQUFLO2lDQWtFTCxLQUFLO29CQTJETCxLQUFLO29CQXlDTCxLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgT2JzZXJ2YWJsZSB9IGZyb20gJ3J4anMnO1xyXG5cclxuaW1wb3J0IHtcclxuICBBZnRlclZpZXdJbml0LFxyXG4gIERpcmVjdGl2ZSxcclxuICBIb3N0LFxyXG4gIEluamVjdG9yLFxyXG4gIElucHV0LFxyXG4gIE9uSW5pdCxcclxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHtcclxuICBBYnN0cmFjdENvbnRyb2wsXHJcbiAgQ29udHJvbFZhbHVlQWNjZXNzb3IsXHJcbiAgRm9ybUNvbnRyb2wsXHJcbiAgRm9ybUNvbnRyb2xOYW1lLFxyXG4gIEZvcm1Hcm91cERpcmVjdGl2ZSxcclxuICBOZ0NvbnRyb2wsXHJcbiAgVmFsaWRhdGlvbkVycm9ycyxcclxuICBWYWxpZGF0b3IsXHJcbn0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5pbXBvcnQgeyBTYWNGb3JtTGF5b3V0Q29tbW9uIH0gZnJvbSAnLi4vY29udHJvbHMvbGF5b3V0L2Zvcm1sYXlvdXQnO1xyXG5pbXBvcnQgeyBDb250cm9sSGVpZ2h0IH0gZnJvbSAnLi4vZW51bXMvQ29udHJvbEhlaWdodCc7XHJcbmltcG9ydCB7IElTYWNDb25maWd1cmF0aW9uU2VydmljZSB9IGZyb20gJy4uL2ludGVyZmFjZXMvSVNhY0NvbmZpZ3VyYXRpb25TZXJ2aWNlJztcclxuaW1wb3J0IHsgSVNhY0ljb25TZXJ2aWNlIH0gZnJvbSAnLi4vaW50ZXJmYWNlcy9JU2FjSWNvblNlcnZpY2UnO1xyXG5pbXBvcnQgeyBJU2FjTGFiZWxTaXplcyB9IGZyb20gJy4uL2ludGVyZmFjZXMvSVNhY0xhYmVsU2l6ZXMnO1xyXG5pbXBvcnQgeyBJU2FjTG9jYWxpc2F0aW9uU2VydmljZSB9IGZyb20gJy4uL2ludGVyZmFjZXMvSVNhY0xvY2FsaXNhdGlvblNlcnZpY2UnO1xyXG5pbXBvcnQgeyBJU2FjVmFsaWRhdGlvbktleVNlcnZpY2UgfSBmcm9tICcuLi9pbnRlcmZhY2VzL0lTYWNWYWxpZGF0aW9uS2V5U2VydmljZSc7XHJcbmltcG9ydCB7IElBYnN0cmFjdENvbnRyb2xMYWJlbEV4dGVuc2lvbiB9IGZyb20gJy4uL2ludGVyZmFjZXMvaWFic3RyYWN0Y29udHJvbGxhYmVsJztcclxuaW1wb3J0IHtcclxuICBTQUNJQ09OX1NFUlZJQ0UsXHJcbiAgU0FDVkFMSURBVElPTktFWV9TRVJWSUNFLFxyXG4gIFNhY0RlZmF1bHRJY29uU2VydmljZSxcclxuICBTYWNEZWZhdWx0VmFsaWRhdGlvbktleVNlcnZpY2UsXHJcbn0gZnJvbSAnLi4vc2VydmljZXMnO1xyXG5pbXBvcnQge1xyXG4gIFNBQ0NPTkZJR1VSQVRJT05fU0VSVklDRSxcclxuICBTYWNEZWZhdWx0Q29uZmlndXJhdGlvblNlcnZpY2UsXHJcbn0gZnJvbSAnLi4vc2VydmljZXMvc2FjLWNvbmZpZ3VyYXRpb24uc2VydmljZSc7XHJcbmltcG9ydCB7XHJcbiAgU0FDTE9DQUxJU0FUSU9OX1NFUlZJQ0UsXHJcbiAgU2FjRGVmYXVsdExvY2FsaXNhdGlvblNlcnZpY2UsXHJcbn0gZnJvbSAnLi4vc2VydmljZXMvc2FjLWxvY2FsaXNhdGlvbi5zZXJ2aWNlJztcclxuaW1wb3J0IHsgY29udmVydFRvQm9vbGVhbiB9IGZyb20gJy4uL3V0aWxpdGllcy9jb252ZXJ0aW9uJztcclxuaW1wb3J0IHsgY3JlYXRlR3VpZCB9IGZyb20gJy4uL3V0aWxpdGllcy9ndWlkJztcclxuaW1wb3J0IHsgVmFsaWRhdGlvbkVycm9ySXRlbSB9IGZyb20gJy4uL3ZhbGlkYXRpb24nO1xyXG5cclxuLyoqXHJcbiAqIEFic3RyYWN0IEtsYXNzZSBmw7xyIFNhY0Jhc2VNb2RlbENvbnRyb2wuIEltcGxlbWVudHMgQ29udHJvbFZhbHVlQWNjZXNzb3IsIFZhbGlkYXRvciwgT25Jbml0XHJcbiAqL1xyXG5ARGlyZWN0aXZlKClcclxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIFNhY0Jhc2VNb2RlbENvbnRyb2w8VkFMVUU+XHJcbiAgaW1wbGVtZW50cyBDb250cm9sVmFsdWVBY2Nlc3NvciwgVmFsaWRhdG9yLCBPbkluaXQsIEFmdGVyVmlld0luaXRcclxue1xyXG4gIC8qKlxyXG4gICAqIElubGluZSBFcnJvcnMgZsO8ciBkYXMgQ29udHJvbFxyXG4gICAqL1xyXG4gIHByaXZhdGUgX2lubGluZWVycm9yZW5hYmxlZDogYm9vbGVhbiB8IG51bGwgPSBudWxsO1xyXG5cclxuICAvKipcclxuICAgKiBMYWJlbCBUZXh0XHJcbiAgICovXHJcbiAgcHJpdmF0ZSBfbGFiZWw6IHN0cmluZyA9ICcnO1xyXG5cclxuICAvKipcclxuICAgKiBTZXJ2aWNlIGZvciBsb2FkaW5nIGRlZmF1bHQgc2V0dGluZ3MgZm9yIHRoZSBjb250cm9sc1xyXG4gICAqL1xyXG4gIHByb3RlY3RlZCByZWFkb25seSBjb25maWd1cmF0aW9uU2VydmljZTogSVNhY0NvbmZpZ3VyYXRpb25TZXJ2aWNlO1xyXG5cclxuICAvKipcclxuICAgKiBCb29sZWFuIFByb3BlcnR5IGRpcnR5OyBkZWZhdWx0IFdlcnQgLSBmYWxzZVxyXG4gICAqL1xyXG4gIHByb3RlY3RlZCBfZGlydHk6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgLyoqXHJcbiAgICogU2FjTW9kZWwgRm9ybSBpc3QgZGlzYWJsZWRcclxuICAgKi9cclxuICBwcm90ZWN0ZWQgX2Rpc2FibGVkRm9ybTogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICAvKipcclxuICAgKiBWYWxpZGF0b3JcclxuICAgKi9cclxuICBwcm90ZWN0ZWQgX29uQ2hhbmdlOiAoKSA9PiB2b2lkO1xyXG5cclxuICAvKipcclxuICAgKiBCb29sZWFuIFByb3BlcnR5IHRvdWNoZWQ7IGRlZmF1bHQgV2VydCAtIGZhbHNlXHJcbiAgICovXHJcbiAgcHJvdGVjdGVkIF90b3VjaGVkOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gIC8qKlxyXG4gICAqIEludGVybmUgVmFyaWFibGUsIGRpZSBkZW4gV2VydCBkZXMgQ29udHJvbHMgaMOkbHRcclxuICAgKi9cclxuICBwcm90ZWN0ZWQgX3ZhbHVlOiBWQUxVRSA9IG51bGw7XHJcblxyXG4gIC8qKlxyXG4gICAqIEZvcm0gbGF5b3V0IGluc3RhbmNlIGlmIGV4aXN0c1xyXG4gICAqL1xyXG4gIHByb3RlY3RlZCBmb3JtbGF5b3V0OiBTYWNGb3JtTGF5b3V0Q29tbW9uID0gbnVsbDtcclxuXHJcbiAgLyoqXHJcbiAgICogaWNvbiBzZXJ2aWNlXHJcbiAgICovXHJcbiAgcHJvdGVjdGVkIGljb25TZXJ2aWNlOiBJU2FjSWNvblNlcnZpY2U7XHJcblxyXG4gIC8qKlxyXG4gICAqIFNlcnZpY2UgZsO8ciBFcnJvciBMb2NhbGlzYXRpb25cclxuICAgKi9cclxuICBwcm90ZWN0ZWQgbG5nUmVzb3VyY2VTZXJ2aWNlOiBJU2FjTG9jYWxpc2F0aW9uU2VydmljZTtcclxuXHJcbiAgLyoqXHJcbiAgICogbmdDb250cm9sXHJcbiAgICovXHJcbiAgcHJvdGVjdGVkIG5nQ29udHJvbDogRm9ybUNvbnRyb2w7XHJcblxyXG4gIC8qKlxyXG4gICAqIENvbnRyb2xIZWlnaHQgZW51bSBmb3IgdXNlIGluIEhUTUwgbWFya3VwXHJcbiAgICovXHJcbiAgcHVibGljIENvbnRyb2xIZWlnaHQ6IHR5cGVvZiBDb250cm9sSGVpZ2h0ID0gQ29udHJvbEhlaWdodDtcclxuXHJcbiAgLyoqXHJcbiAgICogRGVmaW5lcyB0aGUgc3RhbmRhcmQgaGVpZ2h0IG9mIHRoZSBjb21wb25lbnRzXHJcbiAgICovXHJcbiAgQElucHV0KClcclxuICBwdWJsaWMgY29tcG9uZW50SGVpZ2h0OiBDb250cm9sSGVpZ2h0IHwgbnVsbCA9IG51bGw7XHJcblxyXG4gIC8qKlxyXG4gICAqIERlYWt0aXZpZXJ0IGRhcyBJbnB1dCBDb250cm9sXHJcbiAgICovXHJcbiAgQElucHV0KCkgcHVibGljIGRpc2FibGVkOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gIC8qKlxyXG4gICAqIERlYWt0aXZpZXJ0IGRhcyBMYWJlbCBpbSBUZW1wbGF0ZVxyXG4gICAqL1xyXG4gIEBJbnB1dCgpIHB1YmxpYyBkaXNhYmxlbGFiZWw6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgLyoqXHJcbiAgICogVGV4dCB0byBzdXBwb3J0IHRoZSB1c2VyIGR1cmluZyBpbnB1dC5cclxuICAgKi9cclxuICBASW5wdXQoKSBwdWJsaWMgaGVscHRleHQ6IHN0cmluZyA9ICcnO1xyXG5cclxuICAvKipcclxuICAgKiBNb2RlIGZvciBkaXNwbGF5IGhlbHB0ZXh0XHJcbiAgICovXHJcbiAgQElucHV0KClcclxuICBwdWJsaWMgaGVscHRleHRtb2RlOiAndG9vbHRpcCcgfCAndGV4dCcgfCBudWxsO1xyXG5cclxuICAvKipcclxuICAgKiBkZWZpbmVzIHRoYXQgZXJyb3IgbWVzc2FnZXMgYXJlIGRpc3BsYXllZCB1bmRlciB0aGUgY29udHJvbHNcclxuICAgKi9cclxuICBASW5wdXQoKSBwdWJsaWMgaW5saW5lRXJyb3I6IGJvb2xlYW4gPSB0cnVlO1xyXG5cclxuICAvKipcclxuICAgKiBkZWZpbmVzIHRoYXQgdGhlIGxhYmVscyBhcmUgZGlzcGxheWVkIGFzIGFkYXB0aXZlIGxhYmVsc1xyXG4gICAqL1xyXG4gIEBJbnB1dCgpIHB1YmxpYyBpc0FkYXB0aXZlTGFiZWw6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgLyoqXHJcbiAgICogZGVmYXVsdCBsYWJlIHNpemUgZm9yIGxhcmdlIGRldmljZXNcclxuICAgKi9cclxuICBASW5wdXQoKVxyXG4gIHB1YmxpYyBsYWJlbFNpemVMZzogbnVtYmVyIHwgbnVsbCA9IG51bGw7XHJcblxyXG4gIC8qKlxyXG4gICAqIGRlZmF1bHQgbGFiZWwgc2l6ZSBmb3IgbWVkaXVtIGRldmljZXNcclxuICAgKi9cclxuICBASW5wdXQoKVxyXG4gIHB1YmxpYyBsYWJlbFNpemVNZDogbnVtYmVyIHwgbnVsbCA9IG51bGw7XHJcblxyXG4gIC8qKlxyXG4gICAqIGRlZmF1bHQgbGFiZWwgc2l6ZSBmb3Igc21hbGwgZGV2aWNlc1xyXG4gICAqL1xyXG4gIEBJbnB1dCgpXHJcbiAgcHVibGljIGxhYmVsU2l6ZVNtOiBudW1iZXIgfCBudWxsID0gbnVsbDtcclxuXHJcbiAgLyoqXHJcbiAgICogZGVmYXVsdCBsYWJlbCBzaXplIGZvciBleHRyYSBsYXJnZSBkZXZpY2VzXHJcbiAgICovXHJcbiAgQElucHV0KClcclxuICBwdWJsaWMgbGFiZWxTaXplWGw6IG51bWJlciB8IG51bGwgPSBudWxsO1xyXG5cclxuICAvKipcclxuICAgKiBkZWZhdWx0IGxhYmVsIGNvbHVtbiBzaXplXHJcbiAgICovXHJcbiAgQElucHV0KClcclxuICBwdWJsaWMgbGFiZWxTaXplWHM6IG51bWJlciB8IG51bGwgPSBudWxsO1xyXG5cclxuICAvKipcclxuICAgKiBkZWZhdWx0IGxhYmVsIHNpemUgZm9yIGV4dHJhIGV4dHJhIGxhcmdlIGRldmljZXNcclxuICAgKi9cclxuICBASW5wdXQoKVxyXG4gIHB1YmxpYyBsYWJlbFNpemVYeGw6IG51bWJlciB8IG51bGwgPSBudWxsO1xyXG5cclxuICAvKipcclxuICAgKiBOYW1lIGRlcyBDb250cm9sc1xyXG4gICAqL1xyXG4gIEBJbnB1dCgpIHB1YmxpYyBuYW1lOiBzdHJpbmcgPSBjcmVhdGVHdWlkKCk7XHJcblxyXG4gIC8qKlxyXG4gICAqIExlZXJlIEltcGxlbWVudGF0aW9uIHZvbiBcInByb3BhZ2F0ZUNoYW5nZVwiLiBNdXNzIGdlbWFjaHQgd2VyZGVuLCBkYW1pdCBrZWluIEZlaGxlciBlbnRzdGVodFxyXG4gICAqL1xyXG4gIHB1YmxpYyBwcm9wYWdhdGVDaGFuZ2U6IGFueSA9ICgpID0+IHt9O1xyXG5cclxuICAvKipcclxuICAgKiBMZWVyZSBJbXBsZW1lbnRhdGlvbiB2b24gXCJwcm9wYWdhdGVUb3VjaFwiLiBNdXNzIGdlbWFjaHQgd2VyZGVuLCBkYW1pdCBrZWluIEZlaGxlciBlbnRzdGVodFxyXG4gICAqL1xyXG4gIHB1YmxpYyBwcm9wYWdhdGVUb3VjaDogYW55ID0gKCkgPT4ge307XHJcblxyXG4gIC8qKlxyXG4gICAqIERldGFjaCBsYWJlbCB0ZXh0IGFuZCB0b29sdGlwIGZyb20gZWFjaCBvdGhlciBpbiBMYWJlbCBzbyB0aGF0IGxhYmVsIGFuZCB0b29sdGlwIGNhbiBiZSBhbGlnbmVkIGRpZmZlcmVudGx5LiBUaGlzIGlzIGluIEJvb3RzdHJhcCAzIG5vdCBzdXBwb3J0ZWQhXHJcbiAgICovXHJcbiAgQElucHV0KClcclxuICBwdWJsaWMgc3BsaXRsYWJlbGFuZGhlbHB0ZXh0OiBib29sZWFuIHwgbnVsbCA9IG51bGw7XHJcblxyXG4gIC8qKlxyXG4gICAqIFNlcnZpY2UgdG8gcmVjZWl2ZSBzdGFuZGFyZCB2YWxpZGF0aW9uIG1lc3NhZ2Uga2V5cyBhbmQgdGV4dHNcclxuICAgKi9cclxuICBwdWJsaWMgdmFsaWRhdGlvbktleVNlcnZpY2U6IElTYWNWYWxpZGF0aW9uS2V5U2VydmljZTtcclxuXHJcbiAgLyoqXHJcbiAgICogQ29uc3RydWN0b3JcclxuICAgKiBAcGFyYW0gZm9ybWxheW91dCBTYWNGb3JtTGF5b3V0Q29tbW9uIHRvIGRlZmluZSBzY29wZWQgbGF5b3V0IHNldHRpbmdzXHJcbiAgICogQHBhcmFtIGluamVjdG9yIEluamVjdG9yIGZvciBpbmplY3Rpbmcgc2VydmljZXNcclxuICAgKi9cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIEBIb3N0KCkgZm9ybWxheW91dDogU2FjRm9ybUxheW91dENvbW1vbixcclxuICAgIHByaXZhdGUgcmVhZG9ubHkgaW5qZWN0b3I6IEluamVjdG9yXHJcbiAgKSB7XHJcbiAgICB0aGlzLmZvcm1sYXlvdXQgPSBmb3JtbGF5b3V0O1xyXG4gICAgdGhpcy52YWxpZGF0aW9uS2V5U2VydmljZSA9IGluamVjdG9yLmdldChcclxuICAgICAgU0FDVkFMSURBVElPTktFWV9TRVJWSUNFLFxyXG4gICAgICBuZXcgU2FjRGVmYXVsdFZhbGlkYXRpb25LZXlTZXJ2aWNlKClcclxuICAgICk7XHJcbiAgICB0aGlzLmxuZ1Jlc291cmNlU2VydmljZSA9IGluamVjdG9yLmdldChcclxuICAgICAgU0FDTE9DQUxJU0FUSU9OX1NFUlZJQ0UsXHJcbiAgICAgIG5ldyBTYWNEZWZhdWx0TG9jYWxpc2F0aW9uU2VydmljZSh0aGlzLnZhbGlkYXRpb25LZXlTZXJ2aWNlKVxyXG4gICAgKTtcclxuXHJcbiAgICB0aGlzLmNvbmZpZ3VyYXRpb25TZXJ2aWNlID0gaW5qZWN0b3IuZ2V0KFxyXG4gICAgICBTQUNDT05GSUdVUkFUSU9OX1NFUlZJQ0UsXHJcbiAgICAgIG5ldyBTYWNEZWZhdWx0Q29uZmlndXJhdGlvblNlcnZpY2UoKVxyXG4gICAgKTtcclxuXHJcbiAgICB0aGlzLmljb25TZXJ2aWNlID0gaW5qZWN0b3IuZ2V0KFxyXG4gICAgICBTQUNJQ09OX1NFUlZJQ0UsXHJcbiAgICAgIG5ldyBTYWNEZWZhdWx0SWNvblNlcnZpY2UoKVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEdldCBJY29uIGZvciBIZWxwdGV4dCBUb29sdGlwXHJcbiAgICovXHJcbiAgcHVibGljIGdldCBIZWxwdGV4dFRvb2x0aXBJY29uKCk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gdGhpcy5pY29uU2VydmljZS5HZW5lcmljSGVscHRleHRJY29uO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogTWV0aG9kZSBlcmdpYnQgQm9vbGVhbiBXZXJ0IGbDvHIgZGlydHlcclxuICAgKi9cclxuICBwdWJsaWMgZ2V0IGRpcnR5KCk6IGJvb2xlYW4ge1xyXG4gICAgaWYgKHRoaXMubmdDb250cm9sICE9PSBudWxsKSB7XHJcbiAgICAgIHRoaXMuX2RpcnR5ID0gdGhpcy5uZ0NvbnRyb2wuZGlydHk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHRoaXMuX2RpcnR5O1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogU2hvdyBlcnJvciBtZXNzYWdlcyBpbmxpbmVcclxuICAgKi9cclxuICBwdWJsaWMgZ2V0IGlubGluZWVycm9yZW5hYmxlZCgpOiBib29sZWFuIHwgbnVsbCB7XHJcbiAgICByZXR1cm4gdGhpcy5faW5saW5lZXJyb3JlbmFibGVkO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQWt0aXZpZXJ0IG9kZXIgRGVha3RpdmllcnQgZGllIElubGluZSBFcnJvcnMgZsO8ciBkYXMgQ29udHJvbFxyXG4gICAqL1xyXG4gIEBJbnB1dCgpXHJcbiAgcHVibGljIHNldCBpbmxpbmVlcnJvcmVuYWJsZWQodmFsdWU6IGJvb2xlYW4gfCBudWxsKSB7XHJcbiAgICBpZiAodmFsdWUgPT09IG51bGwgfHwgdmFsdWUgPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICB0aGlzLl9pbmxpbmVlcnJvcmVuYWJsZWQgPSBudWxsO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5faW5saW5lZXJyb3JlbmFibGVkID0gY29udmVydFRvQm9vbGVhbih2YWx1ZSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBNZXRob2RlIGVyZ2lidCBib29sZWFuIFdlcnQgd2VubiBGb3JtIGludmFsaWQgb2RlciBuaWNodCBpbnZhbGlkIGlzdFxyXG4gICAqL1xyXG4gIHB1YmxpYyBnZXQgaW52YWxpZCgpOiBib29sZWFuIHtcclxuICAgIHJldHVybiAoXHJcbiAgICAgIHRoaXMubmdDb250cm9sICE9PSB1bmRlZmluZWQgJiZcclxuICAgICAgdGhpcy5uZ0NvbnRyb2wgIT09IG51bGwgJiZcclxuICAgICAgdGhpcy5uZ0NvbnRyb2wuaW52YWxpZFxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIERlZmluaWVydCBvYiBkYXMgQ29udHJvbCBkaXNhYmxlZCBpc3RcclxuICAgKi9cclxuICBwdWJsaWMgZ2V0IGlzZGlzYWJsZWQoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5fZGlzYWJsZWRGb3JtIHx8IHRoaXMuZGlzYWJsZWQ7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBSZXR1cm5zIHdoZXRoZXIgdGhlIGlubGluZSBlcnJvciBtZXNzYWdlcyBhcmUgYWN0aXZlIGZvciB0aGlzIGNvbnRyb2wuXHJcbiAgICovXHJcbiAgcHVibGljIGdldCBpc2lubGluZWVycm9yZW5hYmxlZCgpOiBib29sZWFuIHtcclxuICAgIGlmICh0aGlzLl9pbmxpbmVlcnJvcmVuYWJsZWQgIT09IG51bGwpIHtcclxuICAgICAgcmV0dXJuIHRoaXMuX2lubGluZWVycm9yZW5hYmxlZDtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoXHJcbiAgICAgIHRoaXMuZm9ybWxheW91dCAhPT0gbnVsbCAmJlxyXG4gICAgICB0aGlzLmZvcm1sYXlvdXQuSXNJbmxpbmVFcnJvckVuYWJsZWQgIT09IG51bGxcclxuICAgICkge1xyXG4gICAgICByZXR1cm4gdGhpcy5mb3JtbGF5b3V0Py5Jc0lubGluZUVycm9yRW5hYmxlZDtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5jb25maWd1cmF0aW9uU2VydmljZS5JbmxpbmVFcnJvckVuYWJsZWQgIT09IG51bGwpIHtcclxuICAgICAgcmV0dXJuIHRoaXMuY29uZmlndXJhdGlvblNlcnZpY2UuSW5saW5lRXJyb3JFbmFibGVkO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiB0cnVlO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogRGVmaW5pZXJ0IGRlbiBMYWJlbCBUZXh0XHJcbiAgICovXHJcbiAgcHVibGljIGdldCBsYWJlbCgpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIHRoaXMuX2xhYmVsO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogRGVmaW5pZXJ0IGRlbiBMYWJlbCBUZXh0XHJcbiAgICovXHJcbiAgQElucHV0KCkgcHVibGljIHNldCBsYWJlbCh2OiBzdHJpbmcpIHtcclxuICAgIHRoaXMuX2xhYmVsID0gdjtcclxuICAgIHRoaXMuVXBkYXRlTGFiZWxUb0NvbnRyb2woKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIHJldHVybnMgYW4gb2JqZWN0IHdpdGggYWxsIGxhYmVsIHNpemVzLiBUaGVzZSB2YWx1ZXMgY2FuIHRoZW4gYmUgdHJhbnNmZXJyZWQgdG8gY29ycmVzcG9uZGluZyBDU1MgY2xhc3NlcyB1c2luZyBhIHBpcGVcclxuICAgKi9cclxuICBwdWJsaWMgZ2V0IGxhYmVsU2l6ZXMoKTogSVNhY0xhYmVsU2l6ZXMge1xyXG4gICAgcmV0dXJuIHtcclxuICAgICAgbGFiZWxTaXplU206IHRoaXMubGFiZWxTaXplU20sXHJcbiAgICAgIGxhYmVsU2l6ZU1kOiB0aGlzLmxhYmVsU2l6ZU1kLFxyXG4gICAgICBsYWJlbFNpemVYczogdGhpcy5sYWJlbFNpemVYcyxcclxuICAgICAgbGFiZWxTaXplWGw6IHRoaXMubGFiZWxTaXplWGwsXHJcbiAgICAgIGxhYmVsU2l6ZVh4bDogdGhpcy5sYWJlbFNpemVYeGwsXHJcbiAgICAgIGxhYmVsU2l6ZUxnOiB0aGlzLmxhYmVsU2l6ZUxnLFxyXG4gICAgfTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIE1ldGhvZGUgZXJnaWJ0IEJvb2xlYW4gV2VydCBmw7xyIHRvdWNoZWRcclxuICAgKi9cclxuICBwdWJsaWMgZ2V0IHRvdWNoZWQoKTogYm9vbGVhbiB7XHJcbiAgICBpZiAodGhpcy5uZ0NvbnRyb2wgIT09IG51bGwpIHtcclxuICAgICAgdGhpcy5fdG91Y2hlZCA9IHRoaXMubmdDb250cm9sLnRvdWNoZWQ7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHRoaXMuX3RvdWNoZWQ7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBHZXQgTWV0aG9kZSBmw7xyIE5nTW9kZWwgQmluZGluZyBpbiBIdG1sIE1hcmt1cFxyXG4gICAqL1xyXG4gIHB1YmxpYyBnZXQgdmFsdWUoKTogVkFMVUUge1xyXG4gICAgcmV0dXJuIHRoaXMuX3ZhbHVlO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogU2V0IE1ldGhvZGUgZsO8ciBOZ01vZGVsIEJpbmRpbmcgaW4gSHRtbCBNYXJrdXBcclxuICAgKiBJbnB1dCB3aXJkIGJlbsO2dGlndCwgZGFtaXQgZGVyIFdlcnQgYXVjaCDDvGJlciBkYXMgTWFya3VwIGdlc2V0enQgd2VyZGVuIGthbm4uXHJcbiAgICovXHJcbiAgQElucHV0KClcclxuICBwdWJsaWMgc2V0IHZhbHVlKHY6IFZBTFVFKSB7XHJcbiAgICBpZiAodGhpcy5kaXNhYmxlZCkge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5fdmFsdWUgPSB0aGlzLkNvbnZlcnRJbnB1dFZhbHVlKHYpO1xyXG4gICAgdGhpcy5wcm9wYWdhdGVDaGFuZ2UodGhpcy5fdmFsdWUpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogTWV0aG9kZSBlcmdpYnQgRXJyb3IgYW5oYW5kIHZvbiBnZWdlYmVuZW4gS3JpdGVyaWVuXHJcbiAgICovXHJcbiAgcHVibGljIEdldEVycm9yTWVzc2FnZSgpOiBPYnNlcnZhYmxlPHN0cmluZz4ge1xyXG4gICAgaWYgKHRoaXMubmdDb250cm9sLmVycm9ycyA9PT0gdW5kZWZpbmVkIHx8IHRoaXMubmdDb250cm9sLmVycm9ycyA9PT0gbnVsbCkge1xyXG4gICAgICByZXR1cm4gbmV3IE9ic2VydmFibGU8c3RyaW5nPigob2JzZXJ2ZXIpID0+IHtcclxuICAgICAgICBvYnNlcnZlci5uZXh0KCcnKTtcclxuICAgICAgICBvYnNlcnZlci5jb21wbGV0ZSgpO1xyXG4gICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBlcnJvcnM6IFZhbGlkYXRpb25FcnJvcnMgPSB0aGlzLm5nQ29udHJvbC5lcnJvcnM7XHJcblxyXG4gICAgaWYgKGVycm9ycy5sZW5ndGggPT09IDApIHtcclxuICAgICAgcmV0dXJuIG5ldyBPYnNlcnZhYmxlPHN0cmluZz4oKG9ic2VydmVyKSA9PiB7XHJcbiAgICAgICAgb2JzZXJ2ZXIubmV4dCgnJyk7XHJcbiAgICAgICAgb2JzZXJ2ZXIuY29tcGxldGUoKTtcclxuICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3Qga2V5czogc3RyaW5nW10gPSBPYmplY3Qua2V5cyhlcnJvcnMpO1xyXG5cclxuICAgIGlmIChrZXlzLmxlbmd0aCA8PSAwKSB7XHJcbiAgICAgIHJldHVybiBuZXcgT2JzZXJ2YWJsZTxzdHJpbmc+KChvYnNlcnZlcikgPT4ge1xyXG4gICAgICAgIG9ic2VydmVyLm5leHQoJycpO1xyXG4gICAgICAgIG9ic2VydmVyLmNvbXBsZXRlKCk7XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IGVycm9ySXRlbTogVmFsaWRhdGlvbkVycm9ySXRlbSA9IGVycm9yc1trZXlzWzBdXTtcclxuXHJcbiAgICAvLyBWYWxpZGF0aW9uIFBhcmFtZXRlcnNcclxuICAgIGNvbnN0IHBhcmFtZXRlcnMgPSB7fTtcclxuICAgIGlmIChlcnJvckl0ZW0ucGFyYW1ldGVycyAhPT0gbnVsbCAmJiBlcnJvckl0ZW0ucGFyYW1ldGVycyAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIGVycm9ySXRlbS5wYXJhbWV0ZXJzLmZvckVhY2goKHYsIGspID0+IHtcclxuICAgICAgICBwYXJhbWV0ZXJzW2tdID0gdjtcclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgICBwYXJhbWV0ZXJzWydGSUVMRCddID0gZXJyb3JJdGVtLmZpZWxkTmFtZTtcclxuXHJcbiAgICByZXR1cm4gdGhpcy5sbmdSZXNvdXJjZVNlcnZpY2UuR2V0U3RyaW5nKFxyXG4gICAgICBlcnJvckl0ZW0uZXJyb3JNZXNzYWdlS2V5LFxyXG4gICAgICBwYXJhbWV0ZXJzXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogSW4gQW5ndWxhciAxMCB0aGUgQ29udHJvbCBMYWJlbCBmb3IgUmVhY3RpdmUgRm9ybXMgY2FuIGJlIHNldCBmaXJzdCB0aW1lIGhlcmUuIFdpdGggQW5ndWxhciAxMyBpcyBzdXBwb3J0ZWQgYnkgaW5pdCBpbiBPbkluaXRcclxuICAgKi9cclxuICBwdWJsaWMgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xyXG4gICAgLy8gcmVjZWl2ZSBmb3JtIHZpYSBmb3JtY29udHJvbG5hbWUgb3IgZm9ybWNvbnRyb2wgaW5zdGFuY2VcclxuICAgIGNvbnN0IGZvcm1Db250cm9sID0gdGhpcy5pbmplY3Rvci5nZXQoTmdDb250cm9sLCBudWxsKTtcclxuICAgIGlmIChmb3JtQ29udHJvbCBpbnN0YW5jZW9mIEZvcm1Db250cm9sTmFtZSkge1xyXG4gICAgICBjb25zdCBmb3JtID0gdGhpcy5pbmplY3Rvci5nZXQoRm9ybUdyb3VwRGlyZWN0aXZlLCBudWxsKTtcclxuICAgICAgdGhpcy5uZ0NvbnRyb2wgPSBmb3JtLmdldENvbnRyb2woZm9ybUNvbnRyb2wpO1xyXG4gICAgfSBlbHNlIGlmIChmb3JtQ29udHJvbCkge1xyXG4gICAgICB0aGlzLm5nQ29udHJvbCA9IGZvcm1Db250cm9sLmNvbnRyb2wgYXMgRm9ybUNvbnRyb2w7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5VcGRhdGVMYWJlbFRvQ29udHJvbCgpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogSW5pdCBFdmVudFxyXG4gICAqL1xyXG4gIHB1YmxpYyBuZ09uSW5pdCgpIHtcclxuICAgIC8vIHNldCBsYWJlbCBzaXplcyBmcm9tIGZvcm1sYXlvdXQgZGlyZWN0aXZlXHJcbiAgICB0aGlzLnNldExhYmVsU2l6ZXMoKTtcclxuXHJcbiAgICAvLyBzZXQgY29tcG9uZW50IGhlaWd0aCBmcm9tIGZyb21sYXlvdXQgZGlyZWN0aXZlXHJcbiAgICB0aGlzLnNldENvbXBvbmVudEhlaWdodCgpO1xyXG5cclxuICAgIC8vIHNldCBhZGFwdGl2ZSBsYWJlbCBwcm9wZXJ0eSBmcm9tIGZvcm1sYXlvdXQgZGlyZWN0aXZlXHJcbiAgICB0aGlzLnNldElzQWRhcHRpdmVMYWJlbCgpO1xyXG5cclxuICAgIC8vIHNldCBtZXRob2QgdG8gZGlzcGxheSBoZWxwdGV4dFxyXG4gICAgdGhpcy5zZXRIZWxwVGV4dE1vZGUoKTtcclxuXHJcbiAgICAvLyBzZXQgU3BsaXRNb2RlIGZvciBMYWJlbHNcclxuICAgIHRoaXMuc2V0TGFiZWxTcGxpdE1vZGUoKTtcclxuXHJcbiAgICB0aGlzLk9uQ2xhc3NJbml0KCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBNZXRob2RlIGVyZ2lidCBib29sZWFuIHRvdWNoZWQgPSB0cnVlXHJcbiAgICovXHJcbiAgcHVibGljIG9uVG91Y2goKTogdm9pZCB7XHJcbiAgICB0aGlzLl90b3VjaGVkID0gdHJ1ZTtcclxuICAgIHRoaXMucHJvcGFnYXRlVG91Y2goKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIE1ldGhvZGUsIGRhbWl0IGFuZGVyZSBDb250cm9scyDDpG5kZXJ1bmdlbiBpbSBDb250cm9sIG1pdGJla29tbWVuIGvDtm5uZW5cclxuICAgKiBadXIgw4RuZGVydW5nc2luZm8gZGllIE1ldGhvZGUgcHJvcGFnYXRlQ2hhbmdlIGF1ZnJ1ZmVuLlxyXG4gICAqL1xyXG4gIHB1YmxpYyByZWdpc3Rlck9uQ2hhbmdlKGZuOiBhbnkpOiB2b2lkIHtcclxuICAgIHRoaXMucHJvcGFnYXRlQ2hhbmdlID0gKG9iaikgPT4gZm4ob2JqKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIE1ldGhvZGUsIGRhbWl0IGFuZGVyZSBDb250cm9scyDDpG5kZXJ1bmdlbiBtaXRiZWtvbW1lbiwgd2VubiBkYXMgQ29udHJvbCBha3RpdmllcnQgKEZvY3VzKSB3aXJkLlxyXG4gICAqL1xyXG4gIHB1YmxpYyByZWdpc3Rlck9uVG91Y2hlZChmbjogYW55KTogdm9pZCB7XHJcbiAgICB0aGlzLnByb3BhZ2F0ZVRvdWNoID0gKG9iaikgPT4gZm4ob2JqKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIE1ldGhvZGUgcmVnaXN0cmllcnQgw4RuZGVydW5nZW4gYmVpIGRlciBWYWxpZGllcnVuZ1xyXG4gICAqL1xyXG4gIHB1YmxpYyByZWdpc3Rlck9uVmFsaWRhdG9yQ2hhbmdlKGZuOiAoKSA9PiB2b2lkKTogdm9pZCB7XHJcbiAgICB0aGlzLl9vbkNoYW5nZSA9IGZuO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogU2V0enQgZGFzIENvbnRyb2wgYXVmIERpc2FibGVkXHJcbiAgICovXHJcbiAgcHVibGljIHNldERpc2FibGVkU3RhdGUoaXNEaXNhYmxlZDogYm9vbGVhbik6IHZvaWQge1xyXG4gICAgdGhpcy5fZGlzYWJsZWRGb3JtID0gaXNEaXNhYmxlZDtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIE1ldGhvZGUgZGllIGRlbiBXZXJ0IGRlcyBJbnB1dHMgc2V0enRcclxuICAgKi9cclxuICBwdWJsaWMgc2V0VmFsdWUodjogVkFMVUUpOiB2b2lkIHtcclxuICAgIHRoaXMudmFsdWUgPSB2O1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogVmFsaWRhdG9yIE1ldGhvZGVcclxuICAgKi9cclxuICBwdWJsaWMgdmFsaWRhdGUoYzogQWJzdHJhY3RDb250cm9sKTogVmFsaWRhdGlvbkVycm9ycyB8IG51bGwge1xyXG4gICAgY29uc3QgZXJyb3I6IFZhbGlkYXRpb25FcnJvcnMgfCBudWxsID0gdGhpcy52YWxpZGF0ZURhdGEoYyk7XHJcbiAgICByZXR1cm4gZXJyb3I7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBBYnN0cmFrdGUgVmFsaWRhdG9yIE1ldGhvZGVcclxuICAgKi9cclxuICBwdWJsaWMgYWJzdHJhY3QgdmFsaWRhdGVEYXRhKGM6IEFic3RyYWN0Q29udHJvbCk6IFZhbGlkYXRpb25FcnJvcnMgfCBudWxsO1xyXG5cclxuICAvKipcclxuICAgKiBNZXRob2RlIHp1bSBzY2hyZWliZW4gdm9uIFdlcnRlbiBhdXMgZGVtIE1vZGVsIGluIGRhcyBDb250cm9sXHJcbiAgICovXHJcbiAgcHVibGljIHdyaXRlVmFsdWUodmFsdWU6IFZBTFVFKSB7XHJcbiAgICB0aGlzLl92YWx1ZSA9IHZhbHVlO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogTWV0aG9kIGNhbiBPdmVyd3JpdGVuIGluIFBhcmVudCBDbGFzc2VzXHJcbiAgICogQHBhcmFtIHZhbHVlIFdlcnQgd2VsY2hlciBpbiBkZW4ga29ycmVrdGVuIFR5cCBrb252ZXJ0aWVydCB3ZXJkZW4gc29sbFxyXG4gICAqIEByZXR1cm5zIFdlcnQgaW0ga29ycmVrdGVuIFR5cFxyXG4gICAqL1xyXG4gIHByb3RlY3RlZCBDb252ZXJ0SW5wdXRWYWx1ZSh2YWx1ZTogVkFMVUUpOiBWQUxVRSB7XHJcbiAgICByZXR1cm4gdmFsdWU7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBNZXRob2RlIGVyZ2lidCBEZWNpbWFsIFN5bWJvbFxyXG4gICAqL1xyXG4gIHByb3RlY3RlZCBHZXREZWNpbWFsU3ltYm9sKCk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gJy4nO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogTWV0aG9kIGNhbiBiZSB1c2VkIHRvIFNldCBQcm9wZXJ0aWVzIGF0IENsYXNzIEluaXRcclxuICAgKi9cclxuICBwcm90ZWN0ZWQgT25DbGFzc0luaXQoKTogdm9pZCB7fVxyXG5cclxuICAvKipcclxuICAgKiBBa3R1YWxpc2llcnQgZGVuIE5nTW9kZWwgV2VydCB1bmQgZGllIEfDvGx0aWdrZWl0IGRlcyBWYWxpZGF0b3JzIGRlcyBDb250cm9sc1xyXG4gICAqL1xyXG4gIHByb3RlY3RlZCBVcGRhdGVWYWx1ZUFuZFZhbGlkaXR5KCk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMubmdDb250cm9sKSB7XHJcbiAgICAgIHRoaXMubmdDb250cm9sLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoeyBvbmx5U2VsZjogdHJ1ZSB9KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgVXBkYXRlTGFiZWxUb0NvbnRyb2woKTogdm9pZCB7XHJcbiAgICAvLyBIQUNLOiBBZGQgYWRkaXRpb24gcHJvcGVydHkgdG8gRm9ybUNvbnRyb2wuIENhbiBiZSBmaXhlZCBpZiBzb2x1dGlvbiBmb3IgdGlja2V0OiBodHRwczovL2dpdGh1Yi5jb20vYW5ndWxhci9hbmd1bGFyL2lzc3Vlcy8xOTY4NlxyXG4gICAgaWYgKHRoaXMubmdDb250cm9sKSB7XHJcbiAgICAgIChcclxuICAgICAgICB0aGlzLm5nQ29udHJvbCBhcyB1bmtub3duIGFzIElBYnN0cmFjdENvbnRyb2xMYWJlbEV4dGVuc2lvblxyXG4gICAgICApLmNvbnRyb2xsYWJlbCA9IHRoaXMubGFiZWw7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBTZXQgY29tcG9uZW50IGhlaWdodCBmcm9tIHByb3BlcnR5IG9yIHBhcmVudCBsYXlvdXQgY29udHJvbFxyXG4gICAqL1xyXG4gIHByaXZhdGUgc2V0Q29tcG9uZW50SGVpZ2h0KCkge1xyXG4gICAgLy8gc2V0IHNpemUgZXh0cmEgc21hbGxcclxuICAgIGlmICghdGhpcy5jb21wb25lbnRIZWlnaHQpIHtcclxuICAgICAgaWYgKHRoaXMuZm9ybWxheW91dD8uY29tcG9uZW50SGVpZ2h0KSB7XHJcbiAgICAgICAgdGhpcy5jb21wb25lbnRIZWlnaHQgPSB0aGlzLmZvcm1sYXlvdXQuY29tcG9uZW50SGVpZ2h0O1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMuY29tcG9uZW50SGVpZ2h0ID0gdGhpcy5jb25maWd1cmF0aW9uU2VydmljZS5Db21wb25lbnRIZWlnaHQ7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFNldCBtb2RlIGZvciBoZWxwdGV4dC4gQ2FuIGJlIHRvb2x0aXAgb3IgdGV4dFxyXG4gICAqL1xyXG4gIHByaXZhdGUgc2V0SGVscFRleHRNb2RlKCkge1xyXG4gICAgaWYgKCF0aGlzLmhlbHB0ZXh0bW9kZSkge1xyXG4gICAgICBpZiAodGhpcy5mb3JtbGF5b3V0Py5oZWxwdGV4dG1vZGUpIHtcclxuICAgICAgICB0aGlzLmhlbHB0ZXh0bW9kZSA9IHRoaXMuZm9ybWxheW91dC5oZWxwdGV4dG1vZGU7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy5oZWxwdGV4dG1vZGUgPSB0aGlzLmNvbmZpZ3VyYXRpb25TZXJ2aWNlLkhlbHB0ZXh0TW9kZTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogU2V0IGFkYXB0aXZlIGxhYmVsIHByb3BlcnR5IGZyb20gcGFyZW50IGxheW91dCBjb250cm9sXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBzZXRJc0FkYXB0aXZlTGFiZWwoKSB7XHJcbiAgICBpZiAoIXRoaXMuaXNBZGFwdGl2ZUxhYmVsKSB7XHJcbiAgICAgIGlmICh0aGlzLmZvcm1sYXlvdXQ/LmlzQWRhcHRpdmVMYWJlbCAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgdGhpcy5pc0FkYXB0aXZlTGFiZWwgPSB0aGlzLmZvcm1sYXlvdXQuaXNBZGFwdGl2ZUxhYmVsO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMuaXNBZGFwdGl2ZUxhYmVsID0gZmFsc2U7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFNldCBsYWJlbCBzaXplcyBmcm9tIHByb3BlcnR5IG9yIHBhcmVudCBsYXlvdXQgY29udHJvbFxyXG4gICAqL1xyXG4gIHByaXZhdGUgc2V0TGFiZWxTaXplcygpIHtcclxuICAgIC8vIHNldCBzaXplIGV4dHJhIHNtYWxsXHJcbiAgICBpZiAoIXRoaXMubGFiZWxTaXplWHMpIHtcclxuICAgICAgaWYgKHRoaXMuZm9ybWxheW91dD8ubGFiZWxTaXplWHMpIHtcclxuICAgICAgICB0aGlzLmxhYmVsU2l6ZVhzID0gdGhpcy5mb3JtbGF5b3V0LmxhYmVsU2l6ZVhzO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMubGFiZWxTaXplWHMgPSB0aGlzLmNvbmZpZ3VyYXRpb25TZXJ2aWNlLkxhYmVsU2l6ZVhzO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLy8gc2V0IHNpemUgc21hbGxcclxuICAgIGlmICghdGhpcy5sYWJlbFNpemVTbSkge1xyXG4gICAgICBpZiAodGhpcy5mb3JtbGF5b3V0Py5sYWJlbFNpemVTbSkge1xyXG4gICAgICAgIHRoaXMubGFiZWxTaXplU20gPSB0aGlzLmZvcm1sYXlvdXQubGFiZWxTaXplU207XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy5sYWJlbFNpemVTbSA9IHRoaXMuY29uZmlndXJhdGlvblNlcnZpY2UuTGFiZWxTaXplU207XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvLyBzZXQgc2l6ZSBtZWRpdW1cclxuICAgIGlmICghdGhpcy5sYWJlbFNpemVNZCkge1xyXG4gICAgICBpZiAodGhpcy5mb3JtbGF5b3V0Py5sYWJlbFNpemVNZCkge1xyXG4gICAgICAgIHRoaXMubGFiZWxTaXplTWQgPSB0aGlzLmZvcm1sYXlvdXQubGFiZWxTaXplTWQ7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy5sYWJlbFNpemVNZCA9IHRoaXMuY29uZmlndXJhdGlvblNlcnZpY2UuTGFiZWxTaXplTWQ7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvLyBzZXQgc2l6ZSBsYXJnZVxyXG4gICAgaWYgKCF0aGlzLmxhYmVsU2l6ZUxnKSB7XHJcbiAgICAgIGlmICh0aGlzLmZvcm1sYXlvdXQ/LmxhYmVsU2l6ZUxnKSB7XHJcbiAgICAgICAgdGhpcy5sYWJlbFNpemVMZyA9IHRoaXMuZm9ybWxheW91dC5sYWJlbFNpemVMZztcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLmxhYmVsU2l6ZUxnID0gdGhpcy5jb25maWd1cmF0aW9uU2VydmljZS5MYWJlbFNpemVMZztcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8vIHNldCBzaXplIGV4dHJhIGxhcmdlXHJcbiAgICBpZiAoIXRoaXMubGFiZWxTaXplWGwpIHtcclxuICAgICAgaWYgKHRoaXMuZm9ybWxheW91dD8ubGFiZWxTaXplWGwpIHtcclxuICAgICAgICB0aGlzLmxhYmVsU2l6ZVhsID0gdGhpcy5mb3JtbGF5b3V0LmxhYmVsU2l6ZVhsO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMubGFiZWxTaXplWGwgPSB0aGlzLmNvbmZpZ3VyYXRpb25TZXJ2aWNlLkxhYmVsU2l6ZVhsO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLy8gc2V0IHNpemUgZXh0cmEgZXh0cmEgbGFyZ2VcclxuICAgIGlmICghdGhpcy5sYWJlbFNpemVYeGwpIHtcclxuICAgICAgaWYgKHRoaXMuZm9ybWxheW91dD8ubGFiZWxTaXplWHhsKSB7XHJcbiAgICAgICAgdGhpcy5sYWJlbFNpemVYeGwgPSB0aGlzLmZvcm1sYXlvdXQubGFiZWxTaXplWHhsO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMubGFiZWxTaXplWHhsID0gdGhpcy5jb25maWd1cmF0aW9uU2VydmljZS5MYWJlbFNpemVYeGw7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgc2V0TGFiZWxTcGxpdE1vZGUoKSB7XHJcbiAgICBpZiAoIXRoaXMuc3BsaXRsYWJlbGFuZGhlbHB0ZXh0KSB7XHJcbiAgICAgIGlmICh0aGlzLmZvcm1sYXlvdXQ/LnNwbGl0bGFiZWxhbmRoZWxwdGV4dCkge1xyXG4gICAgICAgIHRoaXMuc3BsaXRsYWJlbGFuZGhlbHB0ZXh0ID0gdGhpcy5mb3JtbGF5b3V0LnNwbGl0bGFiZWxhbmRoZWxwdGV4dDtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLnNwbGl0bGFiZWxhbmRoZWxwdGV4dCA9XHJcbiAgICAgICAgICB0aGlzLmNvbmZpZ3VyYXRpb25TZXJ2aWNlLlNwbGl0TGFiZWxBbmRIZWxwdGV4dDtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxufVxyXG4iXX0=
@@ -1,66 +1,74 @@
1
- import { Directive, EventEmitter, Input, Output, TemplateRef, } from '@angular/core';
2
1
  import { ControlHeight } from '../../enums/ControlHeight';
2
+ import { SACICON_SERVICE, SacDefaultIconService } from '../../services';
3
+ import { SACCONFIGURATION_SERVICE, SacDefaultConfigurationService } from '../../services/sac-configuration.service';
4
+ import { SacFormLayoutCommon } from '../layout/formlayout';
3
5
  import { SacRadiobuttonsCommon } from './radiobuttons';
6
+ import { Directive, EventEmitter, Host, Injector, Input, Output, TemplateRef } from '@angular/core';
4
7
  /**
5
8
  * Basis Komponente für SacRadiobutton.
6
9
  */
7
10
  export class SacRadiobuttonCommon {
11
+ // #endregion Properties
12
+ // #region Constructors
8
13
  /**
9
14
  * Konstruktor
10
15
  * @param SacRadioButtons
16
+ * @param formlayout SacFormLayoutCommon to define scoped layout settings
17
+ * @param injector Injector for injecting services
11
18
  */
12
- constructor(sacRadioButtons) {
19
+ constructor(sacRadioButtons, formlayout, injector) {
13
20
  this.sacRadioButtons = sacRadioButtons;
21
+ this.injector = injector;
22
+ // #region Properties
14
23
  /**
15
- * ControlHeight enum for use in HTML markup
24
+ * Boolean Property zum Ausblenden des Controls; default Wert - false
16
25
  */
17
- this.ControlHeight = ControlHeight;
26
+ this._hidden = false;
18
27
  /**
19
- * Output Event
28
+ * Form layout instance if exists
20
29
  */
21
- this.onselectitem = new EventEmitter();
30
+ this.formlayout = null;
22
31
  /**
23
- * Boolean Property zum Ausblenden des Controls; default Wert - false
32
+ * public public public public public public public public public public public public public ControlHeight enum for use in HTML markup
24
33
  */
25
- this._hidden = false;
34
+ this.ControlHeight = ControlHeight;
26
35
  /**
27
36
  * Unique Index für RadioButton
28
37
  */
29
38
  this._index = null;
39
+ /**
40
+ * Text to support the user during input.
41
+ */
42
+ this.helptext = '';
43
+ /**
44
+ * Output Event
45
+ */
46
+ this.onselectitem = new EventEmitter();
47
+ this.formlayout = formlayout;
48
+ this.configurationService = injector.get(SACCONFIGURATION_SERVICE, new SacDefaultConfigurationService());
49
+ this.iconService = injector.get(SACICON_SERVICE, new SacDefaultIconService());
30
50
  // Registration des Controls in SacRadioButtons Container
31
51
  this.sacRadioButtons.RegisterRadioButton(this);
32
52
  }
53
+ // #endregion Constructors
54
+ // #region Public Getters And Setters
33
55
  /**
34
- * Methode ergibt Boolean, ob Control disabled ist
56
+ * Get Icon for Helptext Tooltip
35
57
  */
36
- get isDisabled() {
37
- return this.disabled || this.sacRadioButtons.disabled;
58
+ get HelptextTooltipIcon() {
59
+ return this.iconService.GenericHelptextIcon;
38
60
  }
39
61
  /**
40
- * Setter für hidden Property
62
+ * define the control height from parent control
41
63
  */
42
- set hidden(v) {
43
- if (v === null || v === undefined || typeof v === 'boolean') {
44
- this._hidden = v;
45
- }
46
- else {
47
- this._hidden = v === 'true';
48
- }
49
- // Model Reset falls RadioButton selektiert war
50
- if (this._hidden && this.checked) {
51
- this.sacRadioButtons.SelectItem(null);
52
- }
53
- }
54
- get hidden() {
55
- return this._hidden;
64
+ get componentHeight() {
65
+ return this.sacRadioButtons.componentHeight;
56
66
  }
57
67
  /**
58
68
  * Getter für Unique Index
59
69
  */
60
70
  get getIndex() {
61
- if (this._index === null &&
62
- this.sacRadioButtons !== null &&
63
- this.sacRadioButtons !== undefined) {
71
+ if (this._index === null && this.sacRadioButtons !== null && this.sacRadioButtons !== undefined) {
64
72
  this._index = this.sacRadioButtons.GetRadionButtonIndex();
65
73
  }
66
74
  return this._index;
@@ -71,22 +79,32 @@ export class SacRadiobuttonCommon {
71
79
  get getName() {
72
80
  return this.sacRadioButtons.name;
73
81
  }
82
+ get hidden() {
83
+ return this._hidden;
84
+ }
74
85
  /**
75
- * define the control height from parent control
86
+ * Setter für hidden Property
76
87
  */
77
- get componentHeight() {
78
- return this.sacRadioButtons.componentHeight;
88
+ set hidden(v) {
89
+ if (v === null || v === undefined || typeof v === 'boolean') {
90
+ this._hidden = v;
91
+ }
92
+ else {
93
+ this._hidden = v === 'true';
94
+ }
95
+ // Model Reset falls RadioButton selektiert war
96
+ if (this._hidden && this.checked) {
97
+ this.sacRadioButtons.SelectItem(null);
98
+ }
79
99
  }
80
- //#endregion
81
- //#region Control Events
82
100
  /**
83
- * Event wenn die Komponente zerstört wird
101
+ * Methode ergibt Boolean, ob Control disabled ist
84
102
  */
85
- ngOnDestroy() {
86
- // De-Registration des Controls in SacRadioButtons Container
87
- this.sacRadioButtons.UnregisterRadioButton(this);
103
+ get isDisabled() {
104
+ return this.disabled || this.sacRadioButtons.disabled;
88
105
  }
89
- //#endregion
106
+ // #endregion Public Getters And Setters
107
+ // #region Public Methods
90
108
  /**
91
109
  * Event bei Änderungen
92
110
  */
@@ -96,20 +114,51 @@ export class SacRadiobuttonCommon {
96
114
  this.onselectitem.emit();
97
115
  }
98
116
  }
117
+ /**
118
+ * Event wenn die Komponente zerstört wird
119
+ */
120
+ ngOnDestroy() {
121
+ // De-Registration des Controls in SacRadioButtons Container
122
+ this.sacRadioButtons.UnregisterRadioButton(this);
123
+ }
124
+ ngOnInit() {
125
+ // set method to display helptext
126
+ this.setHelpTextMode();
127
+ }
128
+ // #endregion Public Methods
129
+ // #region Private Methods
130
+ /**
131
+ * Set mode for helptext. Can be tooltip or text
132
+ */
133
+ setHelpTextMode() {
134
+ var _a;
135
+ if (!this.helptextmode) {
136
+ if ((_a = this.formlayout) === null || _a === void 0 ? void 0 : _a.helptextmode) {
137
+ this.helptextmode = this.formlayout.helptextmode;
138
+ }
139
+ else {
140
+ this.helptextmode = this.configurationService.HelptextMode;
141
+ }
142
+ }
143
+ }
99
144
  }
100
145
  SacRadiobuttonCommon.decorators = [
101
146
  { type: Directive }
102
147
  ];
103
148
  SacRadiobuttonCommon.ctorParameters = () => [
104
- { type: SacRadiobuttonsCommon }
149
+ { type: SacRadiobuttonsCommon },
150
+ { type: SacFormLayoutCommon, decorators: [{ type: Host }] },
151
+ { type: Injector }
105
152
  ];
106
153
  SacRadiobuttonCommon.propDecorators = {
107
- value: [{ type: Input }],
108
- label: [{ type: Input }],
109
154
  checked: [{ type: Input }],
110
155
  disabled: [{ type: Input }],
156
+ helptext: [{ type: Input }],
157
+ helptextmode: [{ type: Input }],
158
+ label: [{ type: Input }],
159
+ labeltemplate: [{ type: Input }],
111
160
  onselectitem: [{ type: Output }],
112
- hidden: [{ type: Input }],
113
- labeltemplate: [{ type: Input }]
161
+ value: [{ type: Input }],
162
+ hidden: [{ type: Input }]
114
163
  };
115
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmFkaW9idXR0b24uanMiLCJzb3VyY2VSb290IjoiQzovUHJvamVrdGUvc2ltcGxlYW5ndWxhcmNvbnRyb2xzLW5nMTAvY2guam5ldHdvcmsuc2FjLWNvbnRyb2xzL3Byb2plY3RzL3NhYy1jb21tb24vc3JjLyIsInNvdXJjZXMiOlsiY29udHJvbHMvY2hlY2tib3gvcmFkaW9idXR0b24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLFNBQVMsRUFDVCxZQUFZLEVBQ1osS0FBSyxFQUVMLE1BQU0sRUFDTixXQUFXLEdBQ1osTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQzFELE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRXZEOztHQUVHO0FBRUgsTUFBTSxPQUFnQixvQkFBb0I7SUFDeEM7OztPQUdHO0lBQ0gsWUFBc0IsZUFBc0M7UUFBdEMsb0JBQWUsR0FBZixlQUFlLENBQXVCO1FBSzVEOztXQUVHO1FBQ0gsa0JBQWEsR0FBeUIsYUFBYSxDQUFDO1FBMEJwRDs7V0FFRztRQUVILGlCQUFZLEdBQUcsSUFBSSxZQUFZLEVBQUUsQ0FBQztRQVNsQzs7V0FFRztRQUNLLFlBQU8sR0FBWSxLQUFLLENBQUM7UUFzQmpDOztXQUVHO1FBQ0gsV0FBTSxHQUFXLElBQUksQ0FBQztRQTFFcEIseURBQXlEO1FBQ3pELElBQUksQ0FBQyxlQUFlLENBQUMsbUJBQW1CLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDakQsQ0FBQztJQXFDRDs7T0FFRztJQUNILElBQUksVUFBVTtRQUNaLE9BQU8sSUFBSSxDQUFDLFFBQVEsSUFBSSxJQUFJLENBQUMsZUFBZSxDQUFDLFFBQVEsQ0FBQztJQUN4RCxDQUFDO0lBT0Q7O09BRUc7SUFDSCxJQUNJLE1BQU0sQ0FBQyxDQUFtQjtRQUM1QixJQUFJLENBQUMsS0FBSyxJQUFJLElBQUksQ0FBQyxLQUFLLFNBQVMsSUFBSSxPQUFPLENBQUMsS0FBSyxTQUFTLEVBQUU7WUFDM0QsSUFBSSxDQUFDLE9BQU8sR0FBRyxDQUFZLENBQUM7U0FDN0I7YUFBTTtZQUNMLElBQUksQ0FBQyxPQUFPLEdBQUcsQ0FBQyxLQUFLLE1BQU0sQ0FBQztTQUM3QjtRQUVELCtDQUErQztRQUMvQyxJQUFJLElBQUksQ0FBQyxPQUFPLElBQUksSUFBSSxDQUFDLE9BQU8sRUFBRTtZQUNoQyxJQUFJLENBQUMsZUFBZSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQztTQUN2QztJQUNILENBQUM7SUFDRCxJQUFJLE1BQU07UUFDUixPQUFPLElBQUksQ0FBQyxPQUFPLENBQUM7SUFDdEIsQ0FBQztJQU9EOztPQUVHO0lBQ0gsSUFBSSxRQUFRO1FBQ1YsSUFDRSxJQUFJLENBQUMsTUFBTSxLQUFLLElBQUk7WUFDcEIsSUFBSSxDQUFDLGVBQWUsS0FBSyxJQUFJO1lBQzdCLElBQUksQ0FBQyxlQUFlLEtBQUssU0FBUyxFQUNsQztZQUNBLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxvQkFBb0IsRUFBRSxDQUFDO1NBQzNEO1FBRUQsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDO0lBQ3JCLENBQUM7SUFFRDs7T0FFRztJQUNILElBQUksT0FBTztRQUNULE9BQU8sSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUM7SUFDbkMsQ0FBQztJQUVEOztPQUVHO0lBQ0gsSUFBSSxlQUFlO1FBQ2pCLE9BQU8sSUFBSSxDQUFDLGVBQWUsQ0FBQyxlQUFlLENBQUM7SUFDOUMsQ0FBQztJQVVELFlBQVk7SUFFWix3QkFBd0I7SUFFeEI7O09BRUc7SUFDSCxXQUFXO1FBQ1QsNERBQTREO1FBQzVELElBQUksQ0FBQyxlQUFlLENBQUMscUJBQXFCLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDbkQsQ0FBQztJQUVELFlBQVk7SUFFWjs7T0FFRztJQUNJLFdBQVc7UUFDaEIsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUU7WUFDbEIsSUFBSSxDQUFDLGVBQWUsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQzVDLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxFQUFFLENBQUM7U0FDMUI7SUFDSCxDQUFDOzs7WUE5SUYsU0FBUzs7O1lBTEQscUJBQXFCOzs7b0JBd0IzQixLQUFLO29CQU1MLEtBQUs7c0JBTUwsS0FBSzt1QkFNTCxLQUFLOzJCQU1MLE1BQU07cUJBa0JOLEtBQUs7NEJBd0RMLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xyXG4gIERpcmVjdGl2ZSxcclxuICBFdmVudEVtaXR0ZXIsXHJcbiAgSW5wdXQsXHJcbiAgT25EZXN0cm95LFxyXG4gIE91dHB1dCxcclxuICBUZW1wbGF0ZVJlZixcclxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgQ29udHJvbEhlaWdodCB9IGZyb20gJy4uLy4uL2VudW1zL0NvbnRyb2xIZWlnaHQnO1xyXG5pbXBvcnQgeyBTYWNSYWRpb2J1dHRvbnNDb21tb24gfSBmcm9tICcuL3JhZGlvYnV0dG9ucyc7XHJcblxyXG4vKipcclxuICogQmFzaXMgS29tcG9uZW50ZSBmw7xyIFNhY1JhZGlvYnV0dG9uLlxyXG4gKi9cclxuQERpcmVjdGl2ZSgpXHJcbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBTYWNSYWRpb2J1dHRvbkNvbW1vbiBpbXBsZW1lbnRzIE9uRGVzdHJveSB7XHJcbiAgLyoqXHJcbiAgICogS29uc3RydWt0b3JcclxuICAgKiBAcGFyYW0gU2FjUmFkaW9CdXR0b25zXHJcbiAgICovXHJcbiAgY29uc3RydWN0b3IocHJvdGVjdGVkIHNhY1JhZGlvQnV0dG9uczogU2FjUmFkaW9idXR0b25zQ29tbW9uKSB7XHJcbiAgICAvLyBSZWdpc3RyYXRpb24gZGVzIENvbnRyb2xzIGluIFNhY1JhZGlvQnV0dG9ucyBDb250YWluZXJcclxuICAgIHRoaXMuc2FjUmFkaW9CdXR0b25zLlJlZ2lzdGVyUmFkaW9CdXR0b24odGhpcyk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBDb250cm9sSGVpZ2h0IGVudW0gZm9yIHVzZSBpbiBIVE1MIG1hcmt1cFxyXG4gICAqL1xyXG4gIENvbnRyb2xIZWlnaHQ6IHR5cGVvZiBDb250cm9sSGVpZ2h0ID0gQ29udHJvbEhlaWdodDtcclxuXHJcbiAgLyoqXHJcbiAgICogV2VydFxyXG4gICAqL1xyXG4gIEBJbnB1dCgpXHJcbiAgcHVibGljIHZhbHVlOiBhbnk7XHJcblxyXG4gIC8qKlxyXG4gICAqIExhYmVsIFRleHRcclxuICAgKi9cclxuICBASW5wdXQoKVxyXG4gIHB1YmxpYyBsYWJlbDogc3RyaW5nO1xyXG5cclxuICAvKipcclxuICAgKiBCb29sZWFuIFByb3BlcnR5LCBvYiBSYWRpb2J1dHRvbiBjaGVja2VkIGlzdFxyXG4gICAqL1xyXG4gIEBJbnB1dCgpXHJcbiAgcHVibGljIGNoZWNrZWQ6IGJvb2xlYW47XHJcblxyXG4gIC8qKlxyXG4gICAqIEJvb2xlYW4gUHJvcGVydHksIG9iIFJhZGlvYnV0dG9uIGRpc2FibGVkIGlzdFxyXG4gICAqL1xyXG4gIEBJbnB1dCgpXHJcbiAgcHVibGljIGRpc2FibGVkOiBib29sZWFuO1xyXG5cclxuICAvKipcclxuICAgKiBPdXRwdXQgRXZlbnRcclxuICAgKi9cclxuICBAT3V0cHV0KClcclxuICBvbnNlbGVjdGl0ZW0gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcblxyXG4gIC8qKlxyXG4gICAqIE1ldGhvZGUgZXJnaWJ0IEJvb2xlYW4sIG9iIENvbnRyb2wgZGlzYWJsZWQgaXN0XHJcbiAgICovXHJcbiAgZ2V0IGlzRGlzYWJsZWQoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5kaXNhYmxlZCB8fCB0aGlzLnNhY1JhZGlvQnV0dG9ucy5kaXNhYmxlZDtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEJvb2xlYW4gUHJvcGVydHkgenVtIEF1c2JsZW5kZW4gZGVzIENvbnRyb2xzOyBkZWZhdWx0IFdlcnQgLSBmYWxzZVxyXG4gICAqL1xyXG4gIHByaXZhdGUgX2hpZGRlbjogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICAvKipcclxuICAgKiBTZXR0ZXIgZsO8ciBoaWRkZW4gUHJvcGVydHlcclxuICAgKi9cclxuICBASW5wdXQoKVxyXG4gIHNldCBoaWRkZW4odjogYm9vbGVhbiB8IHN0cmluZykge1xyXG4gICAgaWYgKHYgPT09IG51bGwgfHwgdiA9PT0gdW5kZWZpbmVkIHx8IHR5cGVvZiB2ID09PSAnYm9vbGVhbicpIHtcclxuICAgICAgdGhpcy5faGlkZGVuID0gdiBhcyBib29sZWFuO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5faGlkZGVuID0gdiA9PT0gJ3RydWUnO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIE1vZGVsIFJlc2V0IGZhbGxzIFJhZGlvQnV0dG9uIHNlbGVrdGllcnQgd2FyXHJcbiAgICBpZiAodGhpcy5faGlkZGVuICYmIHRoaXMuY2hlY2tlZCkge1xyXG4gICAgICB0aGlzLnNhY1JhZGlvQnV0dG9ucy5TZWxlY3RJdGVtKG51bGwpO1xyXG4gICAgfVxyXG4gIH1cclxuICBnZXQgaGlkZGVuKCk6IGJvb2xlYW4gfCBzdHJpbmcge1xyXG4gICAgcmV0dXJuIHRoaXMuX2hpZGRlbjtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFVuaXF1ZSBJbmRleCBmw7xyIFJhZGlvQnV0dG9uXHJcbiAgICovXHJcbiAgX2luZGV4OiBudW1iZXIgPSBudWxsO1xyXG5cclxuICAvKipcclxuICAgKiBHZXR0ZXIgZsO8ciBVbmlxdWUgSW5kZXhcclxuICAgKi9cclxuICBnZXQgZ2V0SW5kZXgoKTogbnVtYmVyIHtcclxuICAgIGlmIChcclxuICAgICAgdGhpcy5faW5kZXggPT09IG51bGwgJiZcclxuICAgICAgdGhpcy5zYWNSYWRpb0J1dHRvbnMgIT09IG51bGwgJiZcclxuICAgICAgdGhpcy5zYWNSYWRpb0J1dHRvbnMgIT09IHVuZGVmaW5lZFxyXG4gICAgKSB7XHJcbiAgICAgIHRoaXMuX2luZGV4ID0gdGhpcy5zYWNSYWRpb0J1dHRvbnMuR2V0UmFkaW9uQnV0dG9uSW5kZXgoKTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gdGhpcy5faW5kZXg7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBQYXJlbnQgQ29udHJvbCBOYW1lXHJcbiAgICovXHJcbiAgZ2V0IGdldE5hbWUoKTogc3RyaW5nIHtcclxuICAgIHJldHVybiB0aGlzLnNhY1JhZGlvQnV0dG9ucy5uYW1lO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogZGVmaW5lIHRoZSBjb250cm9sIGhlaWdodCBmcm9tIHBhcmVudCBjb250cm9sXHJcbiAgICovXHJcbiAgZ2V0IGNvbXBvbmVudEhlaWdodCgpOiBDb250cm9sSGVpZ2h0IHwgbnVsbCB7XHJcbiAgICByZXR1cm4gdGhpcy5zYWNSYWRpb0J1dHRvbnMuY29tcG9uZW50SGVpZ2h0O1xyXG4gIH1cclxuXHJcbiAgLy8jcmVnaW9uIENvbnRyb2wgVGVtcGxhdGVzXHJcblxyXG4gIC8qKlxyXG4gICAqIFRlbXBsYXRlIGbDvHIgVmFsdWUgRWxlbWVudFxyXG4gICAqL1xyXG4gIEBJbnB1dCgpXHJcbiAgbGFiZWx0ZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PjtcclxuXHJcbiAgLy8jZW5kcmVnaW9uXHJcblxyXG4gIC8vI3JlZ2lvbiBDb250cm9sIEV2ZW50c1xyXG5cclxuICAvKipcclxuICAgKiBFdmVudCB3ZW5uIGRpZSBLb21wb25lbnRlIHplcnN0w7ZydCB3aXJkXHJcbiAgICovXHJcbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XHJcbiAgICAvLyBEZS1SZWdpc3RyYXRpb24gZGVzIENvbnRyb2xzIGluIFNhY1JhZGlvQnV0dG9ucyBDb250YWluZXJcclxuICAgIHRoaXMuc2FjUmFkaW9CdXR0b25zLlVucmVnaXN0ZXJSYWRpb0J1dHRvbih0aGlzKTtcclxuICB9XHJcblxyXG4gIC8vI2VuZHJlZ2lvblxyXG5cclxuICAvKipcclxuICAgKiBFdmVudCBiZWkgw4RuZGVydW5nZW5cclxuICAgKi9cclxuICBwdWJsaWMgQ2hhbmdlRXZlbnQoKTogdm9pZCB7XHJcbiAgICBpZiAoIXRoaXMuZGlzYWJsZWQpIHtcclxuICAgICAgdGhpcy5zYWNSYWRpb0J1dHRvbnMuU2VsZWN0SXRlbSh0aGlzLnZhbHVlKTtcclxuICAgICAgdGhpcy5vbnNlbGVjdGl0ZW0uZW1pdCgpO1xyXG4gICAgfVxyXG4gIH1cclxufVxyXG4iXX0=
164
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmFkaW9idXR0b24uanMiLCJzb3VyY2VSb290IjoiQzovUHJvamVrdGUvc2ltcGxlYW5ndWxhcmNvbnRyb2xzLW5nMTAvY2guam5ldHdvcmsuc2FjLWNvbnRyb2xzL3Byb2plY3RzL3NhYy1jb21tb24vc3JjLyIsInNvdXJjZXMiOlsiY29udHJvbHMvY2hlY2tib3gvcmFkaW9idXR0b24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBRzFELE9BQU8sRUFBRSxlQUFlLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUN4RSxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsOEJBQThCLEVBQUUsTUFBTSwwQ0FBMEMsQ0FBQztBQUNwSCxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUMzRCxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUN2RCxPQUFPLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBcUIsTUFBTSxFQUFFLFdBQVcsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUV2SDs7R0FFRztBQUVILE1BQU0sT0FBZ0Isb0JBQW9CO0lBZ0Z0Qyx3QkFBd0I7SUFFeEIsdUJBQXVCO0lBRXZCOzs7OztPQUtHO0lBQ0gsWUFDYyxlQUFzQyxFQUN4QyxVQUErQixFQUN0QixRQUFrQjtRQUZ6QixvQkFBZSxHQUFmLGVBQWUsQ0FBdUI7UUFFL0IsYUFBUSxHQUFSLFFBQVEsQ0FBVTtRQTVGdkMscUJBQXFCO1FBRXJCOztXQUVHO1FBQ0ssWUFBTyxHQUFZLEtBQUssQ0FBQztRQU9qQzs7V0FFRztRQUNPLGVBQVUsR0FBd0IsSUFBSSxDQUFDO1FBT2pEOztXQUVHO1FBQ0gsa0JBQWEsR0FBeUIsYUFBYSxDQUFDO1FBRXBEOztXQUVHO1FBQ0ksV0FBTSxHQUFXLElBQUksQ0FBQztRQWM3Qjs7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RTtZQUNwQixVQUFJLElBQUksQ0FBQyxVQUFVLDBDQUFFLFlBQVksRUFBRTtnQkFDL0IsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLFlBQVksQ0FBQzthQUNwRDtpQkFBTTtnQkFDSCxJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxZQUFZLENBQUM7YUFDOUQ7U0FDSjtJQUNMLENBQUM7OztZQXBOSixTQUFTOzs7WUFORCxxQkFBcUI7WUFEckIsbUJBQW1CLHVCQW9HbkIsSUFBSTtZQWxHMkIsUUFBUTs7O3NCQTBDM0MsS0FBSzt1QkFNTCxLQUFLO3VCQU1MLEtBQUs7MkJBS0wsS0FBSztvQkFNTCxLQUFLOzRCQU1MLEtBQUs7MkJBTUwsTUFBTTtvQkFNTixLQUFLO3FCQXVFTCxLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29udHJvbEhlaWdodCB9IGZyb20gJy4uLy4uL2VudW1zL0NvbnRyb2xIZWlnaHQnO1xyXG5pbXBvcnQgeyBJU2FjQ29uZmlndXJhdGlvblNlcnZpY2UgfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzL0lTYWNDb25maWd1cmF0aW9uU2VydmljZSc7XHJcbmltcG9ydCB7IElTYWNJY29uU2VydmljZSB9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMvSVNhY0ljb25TZXJ2aWNlJztcclxuaW1wb3J0IHsgU0FDSUNPTl9TRVJWSUNFLCBTYWNEZWZhdWx0SWNvblNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcyc7XHJcbmltcG9ydCB7IFNBQ0NPTkZJR1VSQVRJT05fU0VSVklDRSwgU2FjRGVmYXVsdENvbmZpZ3VyYXRpb25TZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvc2FjLWNvbmZpZ3VyYXRpb24uc2VydmljZSc7XHJcbmltcG9ydCB7IFNhY0Zvcm1MYXlvdXRDb21tb24gfSBmcm9tICcuLi9sYXlvdXQvZm9ybWxheW91dCc7XHJcbmltcG9ydCB7IFNhY1JhZGlvYnV0dG9uc0NvbW1vbiB9IGZyb20gJy4vcmFkaW9idXR0b25zJztcclxuaW1wb3J0IHsgRGlyZWN0aXZlLCBFdmVudEVtaXR0ZXIsIEhvc3QsIEluamVjdG9yLCBJbnB1dCwgT25EZXN0cm95LCBPbkluaXQsIE91dHB1dCwgVGVtcGxhdGVSZWYgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuXHJcbi8qKlxyXG4gKiBCYXNpcyBLb21wb25lbnRlIGbDvHIgU2FjUmFkaW9idXR0b24uXHJcbiAqL1xyXG5ARGlyZWN0aXZlKClcclxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIFNhY1JhZGlvYnV0dG9uQ29tbW9uIGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xyXG4gICAgLy8gI3JlZ2lvbiBQcm9wZXJ0aWVzXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBCb29sZWFuIFByb3BlcnR5IHp1bSBBdXNibGVuZGVuIGRlcyBDb250cm9sczsgZGVmYXVsdCBXZXJ0IC0gZmFsc2VcclxuICAgICAqL1xyXG4gICAgcHJpdmF0ZSBfaGlkZGVuOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTZXJ2aWNlIGZvciBsb2FkaW5nIGRlZmF1bHQgc2V0dGluZ3MgZm9yIHRoZSBjb250cm9sc1xyXG4gICAgICovXHJcbiAgICBwcm90ZWN0ZWQgcmVhZG9ubHkgY29uZmlndXJhdGlvblNlcnZpY2U6IElTYWNDb25maWd1cmF0aW9uU2VydmljZTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIEZvcm0gbGF5b3V0IGluc3RhbmNlIGlmIGV4aXN0c1xyXG4gICAgICovXHJcbiAgICBwcm90ZWN0ZWQgZm9ybWxheW91dDogU2FjRm9ybUxheW91dENvbW1vbiA9IG51bGw7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBpY29uIHNlcnZpY2VcclxuICAgICAqL1xyXG4gICAgcHJvdGVjdGVkIGljb25TZXJ2aWNlOiBJU2FjSWNvblNlcnZpY2U7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBwdWJsaWMgcHVibGljIHB1YmxpYyBwdWJsaWMgcHVibGljIHB1YmxpYyBwdWJsaWMgcHVibGljIHB1YmxpYyBwdWJsaWMgcHVibGljIHB1YmxpYyBwdWJsaWMgQ29udHJvbEhlaWdodCBlbnVtIGZvciB1c2UgaW4gSFRNTCBtYXJrdXBcclxuICAgICAqL1xyXG4gICAgQ29udHJvbEhlaWdodDogdHlwZW9mIENvbnRyb2xIZWlnaHQgPSBDb250cm9sSGVpZ2h0O1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogVW5pcXVlIEluZGV4IGbDvHIgUmFkaW9CdXR0b25cclxuICAgICAqL1xyXG4gICAgcHVibGljIF9pbmRleDogbnVtYmVyID0gbnVsbDtcclxuXHJcbiAgICAvKipcclxuICAgICAqIEJvb2xlYW4gUHJvcGVydHksIG9iIFJhZGlvYnV0dG9uIGNoZWNrZWQgaXN0XHJcbiAgICAgKi9cclxuICAgIEBJbnB1dCgpXHJcbiAgICBwdWJsaWMgY2hlY2tlZDogYm9vbGVhbjtcclxuXHJcbiAgICAvKipcclxuICAgICAqIEJvb2xlYW4gUHJvcGVydHksIG9iIFJhZGlvYnV0dG9uIGRpc2FibGVkIGlzdFxyXG4gICAgICovXHJcbiAgICBASW5wdXQoKVxyXG4gICAgcHVibGljIGRpc2FibGVkOiBib29sZWFuO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGV4dCB0byBzdXBwb3J0IHRoZSB1c2VyIGR1cmluZyBpbnB1dC5cclxuICAgICAqL1xyXG4gICAgQElucHV0KCkgcHVibGljIGhlbHB0ZXh0OiBzdHJpbmcgPSAnJztcclxuXHJcbiAgICAvKipcclxuICAgICAqIE1vZGUgZm9yIGRpc3BsYXkgaGVscHRleHRcclxuICAgICAqL1xyXG4gICAgQElucHV0KClcclxuICAgIHB1YmxpYyBoZWxwdGV4dG1vZGU6ICd0b29sdGlwJyB8ICd0ZXh0JyB8IG51bGw7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBMYWJlbCBUZXh0XHJcbiAgICAgKi9cclxuICAgIEBJbnB1dCgpXHJcbiAgICBwdWJsaWMgbGFiZWw6IHN0cmluZztcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRlbXBsYXRlIGbDvHIgVmFsdWUgRWxlbWVudFxyXG4gICAgICovXHJcbiAgICBASW5wdXQoKVxyXG4gICAgcHVibGljIGxhYmVsdGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT47XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBPdXRwdXQgRXZlbnRcclxuICAgICAqL1xyXG4gICAgQE91dHB1dCgpXHJcbiAgICBwdWJsaWMgb25zZWxlY3RpdGVtID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogV2VydFxyXG4gICAgICovXHJcbiAgICBASW5wdXQoKVxyXG4gICAgcHVibGljIHZhbHVlOiBhbnk7XHJcblxyXG4gICAgLy8gI2VuZHJlZ2lvbiBQcm9wZXJ0aWVzXHJcblxyXG4gICAgLy8gI3JlZ2lvbiBDb25zdHJ1Y3RvcnNcclxuXHJcbiAgICAvKipcclxuICAgICAqIEtvbnN0cnVrdG9yXHJcbiAgICAgKiBAcGFyYW0gU2FjUmFkaW9CdXR0b25zXHJcbiAgICAgKiBAcGFyYW0gZm9ybWxheW91dCBTYWNGb3JtTGF5b3V0Q29tbW9uIHRvIGRlZmluZSBzY29wZWQgbGF5b3V0IHNldHRpbmdzXHJcbiAgICAgKiBAcGFyYW0gaW5qZWN0b3IgSW5qZWN0b3IgZm9yIGluamVjdGluZyBzZXJ2aWNlc1xyXG4gICAgICovXHJcbiAgICBjb25zdHJ1Y3RvcihcclxuICAgICAgICBwcm90ZWN0ZWQgc2FjUmFkaW9CdXR0b25zOiBTYWNSYWRpb2J1dHRvbnNDb21tb24sXHJcbiAgICAgICAgQEhvc3QoKSBmb3JtbGF5b3V0OiBTYWNGb3JtTGF5b3V0Q29tbW9uLFxyXG4gICAgICAgIHByaXZhdGUgcmVhZG9ubHkgaW5qZWN0b3I6IEluamVjdG9yXHJcbiAgICApIHtcclxuICAgICAgICB0aGlzLmZvcm1sYXlvdXQgPSBmb3JtbGF5b3V0O1xyXG5cclxuICAgICAgICB0aGlzLmNvbmZpZ3VyYXRpb25TZXJ2aWNlID0gaW5qZWN0b3IuZ2V0KFNBQ0NPTkZJR1VSQVRJT05fU0VSVklDRSwgbmV3IFNhY0RlZmF1bHRDb25maWd1cmF0aW9uU2VydmljZSgpKTtcclxuXHJcbiAgICAgICAgdGhpcy5pY29uU2VydmljZSA9IGluamVjdG9yLmdldChTQUNJQ09OX1NFUlZJQ0UsIG5ldyBTYWNEZWZhdWx0SWNvblNlcnZpY2UoKSk7XHJcblxyXG4gICAgICAgIC8vIFJlZ2lzdHJhdGlvbiBkZXMgQ29udHJvbHMgaW4gU2FjUmFkaW9CdXR0b25zIENvbnRhaW5lclxyXG4gICAgICAgIHRoaXMuc2FjUmFkaW9CdXR0b25zLlJlZ2lzdGVyUmFkaW9CdXR0b24odGhpcyk7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gI2VuZHJlZ2lvbiBDb25zdHJ1Y3RvcnNcclxuXHJcbiAgICAvLyAjcmVnaW9uIFB1YmxpYyBHZXR0ZXJzIEFuZCBTZXR0ZXJzXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBHZXQgSWNvbiBmb3IgSGVscHRleHQgVG9vbHRpcFxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgZ2V0IEhlbHB0ZXh0VG9vbHRpcEljb24oKTogc3RyaW5nIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5pY29uU2VydmljZS5HZW5lcmljSGVscHRleHRJY29uO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogZGVmaW5lIHRoZSBjb250cm9sIGhlaWdodCBmcm9tIHBhcmVudCBjb250cm9sXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBnZXQgY29tcG9uZW50SGVpZ2h0KCk6IENvbnRyb2xIZWlnaHQgfCBudWxsIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5zYWNSYWRpb0J1dHRvbnMuY29tcG9uZW50SGVpZ2h0O1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogR2V0dGVyIGbDvHIgVW5pcXVlIEluZGV4XHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBnZXQgZ2V0SW5kZXgoKTogbnVtYmVyIHtcclxuICAgICAgICBpZiAodGhpcy5faW5kZXggPT09IG51bGwgJiYgdGhpcy5zYWNSYWRpb0J1dHRvbnMgIT09IG51bGwgJiYgdGhpcy5zYWNSYWRpb0J1dHRvbnMgIT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgICB0aGlzLl9pbmRleCA9IHRoaXMuc2FjUmFkaW9CdXR0b25zLkdldFJhZGlvbkJ1dHRvbkluZGV4KCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gdGhpcy5faW5kZXg7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBQYXJlbnQgQ29udHJvbCBOYW1lXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBnZXQgZ2V0TmFtZSgpOiBzdHJpbmcge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnNhY1JhZGlvQnV0dG9ucy5uYW1lO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBnZXQgaGlkZGVuKCk6IGJvb2xlYW4gfCBzdHJpbmcge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9oaWRkZW47XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTZXR0ZXIgZsO8ciBoaWRkZW4gUHJvcGVydHlcclxuICAgICAqL1xyXG4gICAgQElucHV0KClcclxuICAgIHB1YmxpYyBzZXQgaGlkZGVuKHY6IGJvb2xlYW4gfCBzdHJpbmcpIHtcclxuICAgICAgICBpZiAodiA9PT0gbnVsbCB8fCB2ID09PSB1bmRlZmluZWQgfHwgdHlwZW9mIHYgPT09ICdib29sZWFuJykge1xyXG4gICAgICAgICAgICB0aGlzLl9oaWRkZW4gPSB2IGFzIGJvb2xlYW47XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5faGlkZGVuID0gdiA9PT0gJ3RydWUnO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gTW9kZWwgUmVzZXQgZmFsbHMgUmFkaW9CdXR0b24gc2VsZWt0aWVydCB3YXJcclxuICAgICAgICBpZiAodGhpcy5faGlkZGVuICYmIHRoaXMuY2hlY2tlZCkge1xyXG4gICAgICAgICAgICB0aGlzLnNhY1JhZGlvQnV0dG9ucy5TZWxlY3RJdGVtKG51bGwpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIE1ldGhvZGUgZXJnaWJ0IEJvb2xlYW4sIG9iIENvbnRyb2wgZGlzYWJsZWQgaXN0XHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBnZXQgaXNEaXNhYmxlZCgpOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5kaXNhYmxlZCB8fCB0aGlzLnNhY1JhZGlvQnV0dG9ucy5kaXNhYmxlZDtcclxuICAgIH1cclxuXHJcbiAgICAvLyAjZW5kcmVnaW9uIFB1YmxpYyBHZXR0ZXJzIEFuZCBTZXR0ZXJzXHJcblxyXG4gICAgLy8gI3JlZ2lvbiBQdWJsaWMgTWV0aG9kc1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogRXZlbnQgYmVpIMOEbmRlcnVuZ2VuXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBDaGFuZ2VFdmVudCgpOiB2b2lkIHtcclxuICAgICAgICBpZiAoIXRoaXMuZGlzYWJsZWQpIHtcclxuICAgICAgICAgICAgdGhpcy5zYWNSYWRpb0J1dHRvbnMuU2VsZWN0SXRlbSh0aGlzLnZhbHVlKTtcclxuICAgICAgICAgICAgdGhpcy5vbnNlbGVjdGl0ZW0uZW1pdCgpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEV2ZW50IHdlbm4gZGllIEtvbXBvbmVudGUgemVyc3TDtnJ0IHdpcmRcclxuICAgICAqL1xyXG4gICAgcHVibGljIG5nT25EZXN0cm95KCk6IHZvaWQge1xyXG4gICAgICAgIC8vIERlLVJlZ2lzdHJhdGlvbiBkZXMgQ29udHJvbHMgaW4gU2FjUmFkaW9CdXR0b25zIENvbnRhaW5lclxyXG4gICAgICAgIHRoaXMuc2FjUmFkaW9CdXR0b25zLlVucmVnaXN0ZXJSYWRpb0J1dHRvbih0aGlzKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgbmdPbkluaXQoKTogdm9pZCB7XHJcbiAgICAgICAgLy8gc2V0IG1ldGhvZCB0byBkaXNwbGF5IGhlbHB0ZXh0XHJcbiAgICAgICAgdGhpcy5zZXRIZWxwVGV4dE1vZGUoKTtcclxuICAgIH1cclxuXHJcbiAgICAvLyAjZW5kcmVnaW9uIFB1YmxpYyBNZXRob2RzXHJcblxyXG4gICAgLy8gI3JlZ2lvbiBQcml2YXRlIE1ldGhvZHNcclxuXHJcbiAgICAvKipcclxuICAgICAqIFNldCBtb2RlIGZvciBoZWxwdGV4dC4gQ2FuIGJlIHRvb2x0aXAgb3IgdGV4dFxyXG4gICAgICovXHJcbiAgICBwcml2YXRlIHNldEhlbHBUZXh0TW9kZSgpIHtcclxuICAgICAgICBpZiAoIXRoaXMuaGVscHRleHRtb2RlKSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLmZvcm1sYXlvdXQ/LmhlbHB0ZXh0bW9kZSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5oZWxwdGV4dG1vZGUgPSB0aGlzLmZvcm1sYXlvdXQuaGVscHRleHRtb2RlO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5oZWxwdGV4dG1vZGUgPSB0aGlzLmNvbmZpZ3VyYXRpb25TZXJ2aWNlLkhlbHB0ZXh0TW9kZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvLyAjZW5kcmVnaW9uIFByaXZhdGUgTWV0aG9kc1xyXG59XHJcbiJdfQ==