@wertzui/ngx-restworld-client 15.3.1 → 15.3.3

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 (68) hide show
  1. package/esm2022/lib/components/restworld-displays/restworld-displays.mjs +87 -9
  2. package/esm2022/lib/components/restworld-file/restworld-file.component.mjs +6 -1
  3. package/esm2022/lib/components/restworld-form/restworld-form.component.mjs +21 -1
  4. package/esm2022/lib/components/restworld-inputs/restworld-inputs.mjs +85 -12
  5. package/esm2022/lib/components/restworld-label/restworld-label.component.mjs +9 -3
  6. package/esm2022/lib/components/restworld-menu-button/restworld-menu-button.component.mjs +3 -1
  7. package/esm2022/lib/components/restworld-table/restworld-table.component.mjs +3 -3
  8. package/esm2022/lib/components/restworld-validation-errors/restworld-validation-errors.component.mjs +6 -1
  9. package/esm2022/lib/constants/link-names.mjs +4 -1
  10. package/esm2022/lib/models/api-url.mjs +1 -1
  11. package/esm2022/lib/models/client-settings.mjs +1 -1
  12. package/esm2022/lib/models/restworld-image.mjs +1 -1
  13. package/esm2022/lib/pipes/as.pipe.mjs +3 -1
  14. package/esm2022/lib/pipes/clr-format.pipe.mjs +4 -4
  15. package/esm2022/lib/pipes/property-type-format.pipe.mjs +4 -2
  16. package/esm2022/lib/pipes/safe-url.pipe.mjs +3 -1
  17. package/esm2022/lib/restworld-client.module.mjs +31 -1
  18. package/esm2022/lib/services/o-data.service.mjs +23 -29
  19. package/esm2022/lib/services/opentelemetry.service.mjs +11 -1
  20. package/esm2022/lib/services/restworld-client.mjs +188 -1
  21. package/esm2022/lib/services/settings.service.mjs +2 -2
  22. package/esm2022/lib/util/debounce.mjs +8 -1
  23. package/esm2022/lib/views/restworld-edit-view/restworld-edit-view.component.mjs +6 -6
  24. package/fesm2022/wertzui-ngx-restworld-client.mjs +487 -61
  25. package/fesm2022/wertzui-ngx-restworld-client.mjs.map +1 -1
  26. package/lib/components/restworld-displays/restworld-displays.d.ts +86 -8
  27. package/lib/components/restworld-displays/restworld-displays.d.ts.map +1 -1
  28. package/lib/components/restworld-file/restworld-file.component.d.ts +5 -0
  29. package/lib/components/restworld-file/restworld-file.component.d.ts.map +1 -1
  30. package/lib/components/restworld-form/restworld-form.component.d.ts +20 -0
  31. package/lib/components/restworld-form/restworld-form.component.d.ts.map +1 -1
  32. package/lib/components/restworld-inputs/restworld-inputs.d.ts +82 -9
  33. package/lib/components/restworld-inputs/restworld-inputs.d.ts.map +1 -1
  34. package/lib/components/restworld-label/restworld-label.component.d.ts +8 -2
  35. package/lib/components/restworld-label/restworld-label.component.d.ts.map +1 -1
  36. package/lib/components/restworld-menu-button/restworld-menu-button.component.d.ts +2 -0
  37. package/lib/components/restworld-menu-button/restworld-menu-button.component.d.ts.map +1 -1
  38. package/lib/components/restworld-validation-errors/restworld-validation-errors.component.d.ts +5 -0
  39. package/lib/components/restworld-validation-errors/restworld-validation-errors.component.d.ts.map +1 -1
  40. package/lib/constants/link-names.d.ts +3 -0
  41. package/lib/constants/link-names.d.ts.map +1 -1
  42. package/lib/models/api-url.d.ts +9 -0
  43. package/lib/models/api-url.d.ts.map +1 -1
  44. package/lib/models/client-settings.d.ts +8 -1
  45. package/lib/models/client-settings.d.ts.map +1 -1
  46. package/lib/models/restworld-image.d.ts +1 -1
  47. package/lib/pipes/as.pipe.d.ts +2 -0
  48. package/lib/pipes/as.pipe.d.ts.map +1 -1
  49. package/lib/pipes/clr-format.pipe.d.ts +0 -1
  50. package/lib/pipes/clr-format.pipe.d.ts.map +1 -1
  51. package/lib/pipes/property-type-format.pipe.d.ts.map +1 -1
  52. package/lib/pipes/safe-url.pipe.d.ts +2 -0
  53. package/lib/pipes/safe-url.pipe.d.ts.map +1 -1
  54. package/lib/restworld-client.module.d.ts +30 -0
  55. package/lib/restworld-client.module.d.ts.map +1 -1
  56. package/lib/services/o-data.service.d.ts +22 -23
  57. package/lib/services/o-data.service.d.ts.map +1 -1
  58. package/lib/services/opentelemetry.service.d.ts +10 -0
  59. package/lib/services/opentelemetry.service.d.ts.map +1 -1
  60. package/lib/services/restworld-client.d.ts +187 -0
  61. package/lib/services/restworld-client.d.ts.map +1 -1
  62. package/lib/services/settings.service.d.ts +1 -1
  63. package/lib/services/settings.service.d.ts.map +1 -1
  64. package/lib/util/debounce.d.ts +7 -0
  65. package/lib/util/debounce.d.ts.map +1 -1
  66. package/lib/views/restworld-edit-view/restworld-edit-view.component.d.ts +17 -0
  67. package/lib/views/restworld-edit-view/restworld-edit-view.component.d.ts.map +1 -1
  68. package/package.json +1 -1
@@ -15,10 +15,21 @@ import * as i10 from "../../pipes/property-type-format.pipe";
15
15
  /**
16
16
  * Display the value of a form element with a label that is automatically created from a property in a form template.
17
17
  * This may also be a complex object or a collection in which case multiple and nested display elements may be rendered.
18
- * If you want to display just the value without a label, use RestWorldDisplayComponent <rw-display>.
18
+ * If you want to display just the value without a label, use {@link RestWorldDisplayComponent} `<rw-display>`.
19
+ * @example
20
+ * <rw-display-element [property]="property" [apiName]="apiName" [value]="value"></rw-display-element>
19
21
  */
20
22
  export class RestWorldDisplayElementComponent {
23
+ /**
24
+ * The property to display.
25
+ * @required
26
+ */
21
27
  property;
28
+ /**
29
+ * The name of the API to use for the property.
30
+ * @required
31
+ * @remarks This is the name of the API as defined in the `RestWorldClientCollection`.
32
+ */
22
33
  apiName;
23
34
  _value;
24
35
  /**
@@ -51,12 +62,23 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.2", ngImpor
51
62
  /**
52
63
  * Displays a value that is automatically created from a property in a form template.
53
64
  * This may also be a complex object or a collection in which case multiple and nested input elements may be rendered.
54
- * If you also want a label, use RestWorldDisplayElementComponent <rw-display-element>.
55
- * You can also use one of the different RestWorldDisplay... <rw-display-...> elements to render a specific property type,
65
+ * If you also want a label, use {@link RestWorldDisplayElementComponent} `<rw-display-element>`.
66
+ * You can also use one of the different RestWorldDisplay... `<rw-display-...>` elements to render a specific property type,
56
67
  * but it is advised to control the rendered element through the passed in property.
68
+ * @example
69
+ * <rw-display [property]="property" [apiName]="apiName" [value]="value"></rw-display>
57
70
  */
58
71
  export class RestWorldDisplayComponent {
72
+ /**
73
+ * The property to display.
74
+ * @required
75
+ */
59
76
  property;
77
+ /**
78
+ * The name of the API to use for the property.
79
+ * @required
80
+ * @remarks This is the name of the API as defined in the `RestWorldClientCollection`.
81
+ */
60
82
  apiName;
61
83
  _value;
62
84
  /**
@@ -92,11 +114,22 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.2", ngImpor
92
114
  /**
93
115
  * Displays the value of a collection that is automatically created from the given property.
94
116
  * The elements and can also be nested.
95
- * @remarks It is advised to use RestWorldDisplayComponent <rw-display> and control the rendered elements with the passed in property
117
+ * @remarks It is advised to use {@link RestWorldDisplayComponent} `<rw-display>` and control the rendered elements with the passed in property
96
118
  * instead of using this component directly.
119
+ * @example
120
+ * <rw-display-collection [property]="property" [apiName]="apiName" [values]="values"></rw-display-collection>
97
121
  */
98
122
  export class RestWorldDisplayCollectionComponent {
123
+ /**
124
+ * The property to display.
125
+ * @required
126
+ */
99
127
  property;
128
+ /**
129
+ * The name of the API to use for the property.
130
+ * @required
131
+ * @remarks This is the name of the API as defined in the `RestWorldClientCollection`.
132
+ */
100
133
  apiName;
101
134
  _values;
102
135
  /**
@@ -154,13 +187,24 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.2", ngImpor
154
187
  /**
155
188
  * Displays the value of a dropdown that is automatically created from the given property.
156
189
  * If set the dropdown will use the `inline` property of the options to render the `selectedValues` Otherwise it will just render the values, but no prompt for them.
157
- * @remarks It is advised to use RestWorldDisplayComponent <rw-display> and control the rendered elements with the passed in property
190
+ * @remarks It is advised to use {@link RestWorldDisplayComponent} `<rw-display>` and control the rendered elements with the passed in property
158
191
  * instead of using this component directly.
192
+ * @example
193
+ * <rw-display-dropdown [property]="property" [apiName]="apiName" [selectedValues]="selectedValues"></rw-display-dropdown>
159
194
  */
160
195
  export class RestWorldDisplayDropdownComponent {
161
196
  _messageService;
162
197
  _clients;
198
+ /**
199
+ * The property to display.
200
+ * @required
201
+ */
163
202
  property;
203
+ /**
204
+ * The name of the API to use for the property.
205
+ * @required
206
+ * @remarks This is the name of the API as defined in the `RestWorldClientCollection`.
207
+ */
164
208
  apiName;
165
209
  _selectedValues;
166
210
  /**
@@ -311,11 +355,22 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.2", ngImpor
311
355
  /**
312
356
  * Displays the value of a complex object with multiple properties that is automatically created from the given property.
313
357
  * The object can also be nested.
314
- * @remarks It is advised to use RestWorldDisplayComponent <rw-display> and control the rendered elements with the passed in property
358
+ * @remarks It is advised to use {@link RestWorldDisplayComponent} `<rw-display>` and control the rendered elements with the passed in property
315
359
  * instead of using this component directly.
360
+ * @example
361
+ * <rw-display-object [property]="property" [apiName]="apiName" [value]="value"></rw-display-object>
316
362
  */
317
363
  export class RestWorldDisplayObjectComponent {
364
+ /**
365
+ * The property to display.
366
+ * @required
367
+ */
318
368
  property;
369
+ /**
370
+ * The name of the API to use for the property.
371
+ * @required
372
+ * @remarks This is the name of the API as defined in the `RestWorldClientCollection`.
373
+ */
319
374
  apiName;
320
375
  _value;
321
376
  /**
@@ -344,11 +399,22 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.2", ngImpor
344
399
  }] } });
345
400
  /**
346
401
  * Displays the value of a simple element, like a string, a number or a Date that is automatically created from the given property.
347
- * @remarks It is advised to use RestWorldDisplayComponent <rw-display> and control the rendered elements with the passed in property
402
+ * @remarks It is advised to use {@link RestWorldDisplayComponent} `<rw-display>` and control the rendered elements with the passed in property
348
403
  * instead of using this component directly.
404
+ * @example
405
+ * <rw-display-simple [property]="property" [apiName]="apiName" [value]="value"></rw-display-simple>
349
406
  */
350
407
  export class RestWorldDisplaySimpleComponent {
408
+ /**
409
+ * The property to display.
410
+ * @required
411
+ */
351
412
  property;
413
+ /**
414
+ * The name of the API to use for the property.
415
+ * @required
416
+ * @remarks This is the name of the API as defined in the `RestWorldClientCollection`.
417
+ */
352
418
  apiName;
353
419
  _value;
354
420
  /**
@@ -399,10 +465,22 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.2", ngImpor
399
465
  type: Input
400
466
  }] } });
401
467
  /**
402
- * Displays the values of a collection of rw-display-elements automatically created from a template.
468
+ * Displays the values of a collection of `<rw-display>` elements automatically created from a template.
469
+ * @example
470
+ * <rw-display-template [template]="template" [apiName]="apiName" [value]="value"></rw-display-template>
403
471
  */
404
472
  export class RestWorldDisplayTemplateComponent {
473
+ /**
474
+ * The template to display.
475
+ * @required
476
+ * @remarks This is the template that defines the properties to display.
477
+ */
405
478
  template;
479
+ /**
480
+ * The name of the API to use for the property.
481
+ * @required
482
+ * @remarks This is the name of the API as defined in the `RestWorldClientCollection`.
483
+ */
406
484
  apiName;
407
485
  _value;
408
486
  /**
@@ -429,4 +507,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.2", ngImpor
429
507
  }], value: [{
430
508
  type: Input
431
509
  }] } });
432
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVzdHdvcmxkLWRpc3BsYXlzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LXJlc3R3b3JsZC1jbGllbnQvc3JjL2xpYi9jb21wb25lbnRzL3Jlc3R3b3JsZC1kaXNwbGF5cy9yZXN0d29ybGQtZGlzcGxheXMudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtcmVzdHdvcmxkLWNsaWVudC9zcmMvbGliL2NvbXBvbmVudHMvcmVzdHdvcmxkLWRpc3BsYXlzL3Jlc3R3b3JsZC1kaXNwbGF5LWVsZW1lbnQvcmVzdHdvcmxkLWRpc3BsYXktZWxlbWVudC5jb21wb25lbnQuaHRtbCIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1yZXN0d29ybGQtY2xpZW50L3NyYy9saWIvY29tcG9uZW50cy9yZXN0d29ybGQtZGlzcGxheXMvcmVzdHdvcmxkLWRpc3BsYXkvcmVzdHdvcmxkLWRpc3BsYXkuY29tcG9uZW50Lmh0bWwiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtcmVzdHdvcmxkLWNsaWVudC9zcmMvbGliL2NvbXBvbmVudHMvcmVzdHdvcmxkLWRpc3BsYXlzL3Jlc3R3b3JsZC1kaXNwbGF5LWNvbGxlY3Rpb24vcmVzdHdvcmxkLWRpc3BsYXktY29sbGVjdGlvbi5jb21wb25lbnQuaHRtbCIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1yZXN0d29ybGQtY2xpZW50L3NyYy9saWIvY29tcG9uZW50cy9yZXN0d29ybGQtZGlzcGxheXMvcmVzdHdvcmxkLWRpc3BsYXktZHJvcGRvd24vcmVzdHdvcmxkLWRpc3BsYXktZHJvcGRvd24uY29tcG9uZW50Lmh0bWwiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtcmVzdHdvcmxkLWNsaWVudC9zcmMvbGliL2NvbXBvbmVudHMvcmVzdHdvcmxkLWRpc3BsYXlzL3Jlc3R3b3JsZC1kaXNwbGF5LW9iamVjdC9yZXN0d29ybGQtZGlzcGxheS1vYmplY3QuY29tcG9uZW50Lmh0bWwiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtcmVzdHdvcmxkLWNsaWVudC9zcmMvbGliL2NvbXBvbmVudHMvcmVzdHdvcmxkLWRpc3BsYXlzL3Jlc3R3b3JsZC1kaXNwbGF5LXNpbXBsZS9yZXN0d29ybGQtZGlzcGxheS1zaW1wbGUuY29tcG9uZW50Lmh0bWwiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtcmVzdHdvcmxkLWNsaWVudC9zcmMvbGliL2NvbXBvbmVudHMvcmVzdHdvcmxkLWRpc3BsYXlzL3Jlc3R3b3JsZC1kaXNwbGF5LXRlbXBsYXRlL3Jlc3R3b3JsZC1kaXNwbGF5LXRlbXBsYXRlLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBdUIsTUFBTSxlQUFlLENBQUM7QUFDcEYsT0FBTyxFQUF5QixZQUFZLEVBQVksY0FBYyxFQUFrSCxjQUFjLEVBQWlCLE1BQU0seUJBQXlCLENBQUM7QUFDdlAsT0FBTyxFQUFFLG1CQUFtQixFQUFFLGlCQUFpQixFQUFFLE1BQU0saUNBQWlDLENBQUE7Ozs7Ozs7Ozs7OztBQU14Rjs7OztHQUlHO0FBTUgsTUFBTSxPQUFPLGdDQUFnQztJQUV6QyxRQUFRLENBQWE7SUFHckIsT0FBTyxDQUFVO0lBRVQsTUFBTSxDQUFvTjtJQUNsTzs7TUFFRTtJQUNGLElBQ1csS0FBSyxDQUFDLEtBQXVOO1FBQ3BPLElBQUksQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDO0lBQ3hCLENBQUM7SUFDRCxJQUFXLEtBQUs7UUFDWixPQUFPLElBQUksQ0FBQyxNQUFNLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxLQUFvQyxDQUFDO0lBQzdFLENBQUM7SUFFRCxJQUFXLFlBQVk7UUFDbkIsT0FBTyxZQUFZLENBQUM7SUFDeEIsQ0FBQzt1R0FyQlEsZ0NBQWdDOzJGQUFoQyxn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TTdCLFFBQVE7c0JBRFAsS0FBSzt1QkFBQyxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUU7Z0JBSXpCLE9BQU87c0JBRE4sS0FBSzt1QkFBQyxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUU7Z0JBUWQsS0FBSztzQkFEZixLQUFLOztBQXNDVjs7R0FFRztBQU1ILE1BQU0sT0FBTyxpQ0FBaUM7SUFFMUMsUUFBUSxDQUFZO0lBR3BCLE9BQU8sQ0FBVTtJQUVULE1BQU0sQ0FBdUI7SUFDckM7O01BRUU7SUFDRixJQUNXLEtBQUssQ0FBQyxLQUFzQztRQUNuRCxJQUFJLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQztJQUN4QixDQUFDO0lBQ0QsSUFBVyxLQUFLO1FBQ1osT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDO0lBQ3ZCLENBQUM7dUdBakJRLGlDQUFpQzsyRkFBakMsaUNBQWlDLGlJTy9hOUMsNkxBQW1MLHVMUGtCdEssZ0NBQWdDOzsyRkE2WmhDLGlDQUFpQztrQkFMN0MsU0FBUzsrQkFDSSxxQkFBcUI7OEJBTS9CLFFBQVE7c0JBRFAsS0FBSzt1QkFBQyxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUU7Z0JBSXpCLE9BQU87c0JBRE4sS0FBSzt1QkFBQyxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUU7Z0JBUWQsS0FBSztzQkFEZixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBDb250ZW50Q2hpbGQsIElucHV0LCBPbkluaXQsIFRlbXBsYXRlUmVmIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IFByb3BlcnR5LCBTaW1wbGVWYWx1ZSwgUHJvcGVydHlUeXBlLCBUZW1wbGF0ZSwgTnVtYmVyVGVtcGxhdGUsIFRlbXBsYXRlRHRvLCBPcHRpb25zLCBFeHRyYWN0R2VuZXJpY09wdGlvbnNJdGVtVHlwZSwgRXh0cmFjdFZhbHVlVHlwZSwgRXh0cmFjdEdlbmVyaWNPcHRpb25zU2VsZWN0ZWRWYWx1ZXNUeXBlLCBQcm9ibGVtRGV0YWlscywgUmVzb3VyY2VPZkR0byB9IGZyb20gJ0B3ZXJ0enVpL25neC1oYWwtY2xpZW50JztcclxuaW1wb3J0IHsgUHJvcGVydHlXaXRoT3B0aW9ucywgUHJvcGVydHlXaXRoSW1hZ2UgfSBmcm9tICcuLi8uLi9tb2RlbHMvc3BlY2lhbC1wcm9wZXJ0aWVzJ1xyXG5pbXBvcnQgeyBQcm9wZXJ0eVRlbXBsYXRlQ29udGV4dCB9IGZyb20gJy4uLy4uL21vZGVscy90ZW1wbGF0aW5nJztcclxuaW1wb3J0IHsgTWVzc2FnZVNlcnZpY2UgfSBmcm9tICdwcmltZW5nL2FwaSc7XHJcbmltcG9ydCB7IFJlc3RXb3JsZENsaWVudENvbGxlY3Rpb24gfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9yZXN0d29ybGQtY2xpZW50LWNvbGxlY3Rpb24nO1xyXG5pbXBvcnQgeyBSZXN0V29ybGRDbGllbnQgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9yZXN0d29ybGQtY2xpZW50JztcclxuXHJcbi8qKlxyXG4gKiBEaXNwbGF5IHRoZSB2YWx1ZSBvZiBhIGZvcm0gZWxlbWVudCB3aXRoIGEgbGFiZWwgdGhhdCBpcyBhdXRvbWF0aWNhbGx5IGNyZWF0ZWQgZnJvbSBhIHByb3BlcnR5IGluIGEgZm9ybSB0ZW1wbGF0ZS5cclxuICogVGhpcyBtYXkgYWxzbyBiZSBhIGNvbXBsZXggb2JqZWN0IG9yIGEgY29sbGVjdGlvbiBpbiB3aGljaCBjYXNlIG11bHRpcGxlIGFuZCBuZXN0ZWQgZGlzcGxheSBlbGVtZW50cyBtYXkgYmUgcmVuZGVyZWQuXHJcbiAqIElmIHlvdSB3YW50IHRvIGRpc3BsYXkganVzdCB0aGUgdmFsdWUgd2l0aG91dCBhIGxhYmVsLCB1c2UgUmVzdFdvcmxkRGlzcGxheUNvbXBvbmVudCA8cnctZGlzcGxheT4uXHJcbiAqL1xyXG5AQ29tcG9uZW50KHtcclxuICAgIHNlbGVjdG9yOiAncnctZGlzcGxheS1lbGVtZW50JyxcclxuICAgIHRlbXBsYXRlVXJsOiAnLi9yZXN0d29ybGQtZGlzcGxheS1lbGVtZW50L3Jlc3R3b3JsZC1kaXNwbGF5LWVsZW1lbnQuY29tcG9uZW50Lmh0bWwnLFxyXG4gICAgc3R5bGVVcmw6ICcuL3Jlc3R3b3JsZC1kaXNwbGF5LWVsZW1lbnQvcmVzdHdvcmxkLWRpc3BsYXktZWxlbWVudC5jb21wb25lbnQuY3NzJ1xyXG59KVxyXG5leHBvcnQgY2xhc3MgUmVzdFdvcmxkRGlzcGxheUVsZW1lbnRDb21wb25lbnQ8VFByb3BlcnR5IGV4dGVuZHMgUHJvcGVydHk8U2ltcGxlVmFsdWUsIHN0cmluZywgc3RyaW5nPj4ge1xyXG4gICAgQElucHV0KHsgcmVxdWlyZWQ6IHRydWUgfSlcclxuICAgIHByb3BlcnR5ITogVFByb3BlcnR5O1xyXG5cclxuICAgIEBJbnB1dCh7IHJlcXVpcmVkOiB0cnVlIH0pXHJcbiAgICBhcGlOYW1lITogc3RyaW5nO1xyXG5cclxuICAgIHByaXZhdGUgX3ZhbHVlPzogRXh0cmFjdFZhbHVlVHlwZTxUUHJvcGVydHk+IHwgRXh0cmFjdEdlbmVyaWNPcHRpb25zU2VsZWN0ZWRWYWx1ZXNUeXBlPFRQcm9wZXJ0eT5bXSB8IEV4dHJhY3RHZW5lcmljT3B0aW9uc1NlbGVjdGVkVmFsdWVzVHlwZTxUUHJvcGVydHk+IHwgUmVjb3JkPHN0cmluZywgU2ltcGxlVmFsdWU+IHwgTWFwPG51bWJlciwgUmVjb3JkPHN0cmluZywgU2ltcGxlVmFsdWU+PjtcclxuICAgIC8qKlxyXG4gICAgICogVGhlIHZhbHVlIHRvIGRpc3BsYXkuIElmIG5vdCBzZXQsIHRoZSB2YWx1ZSBvZiB0aGUgcHJvcGVydHkgd2lsbCBiZSB1c2VkLlxyXG4gICAgKi9cclxuICAgIEBJbnB1dCgpXHJcbiAgICBwdWJsaWMgc2V0IHZhbHVlKHZhbHVlOiBFeHRyYWN0VmFsdWVUeXBlPFRQcm9wZXJ0eT4gfCBFeHRyYWN0R2VuZXJpY09wdGlvbnNTZWxlY3RlZFZhbHVlc1R5cGU8VFByb3BlcnR5PltdIHwgRXh0cmFjdEdlbmVyaWNPcHRpb25zU2VsZWN0ZWRWYWx1ZXNUeXBlPFRQcm9wZXJ0eT4gfCBSZWNvcmQ8c3RyaW5nLCBTaW1wbGVWYWx1ZT4gfCBNYXA8bnVtYmVyLCBSZWNvcmQ8c3RyaW5nLCBTaW1wbGVWYWx1ZT4+KSB7XHJcbiAgICAgICAgdGhpcy5fdmFsdWUgPSB2YWx1ZTtcclxuICAgIH1cclxuICAgIHB1YmxpYyBnZXQgdmFsdWUoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX3ZhbHVlID8/IHRoaXMucHJvcGVydHkudmFsdWUgYXMgRXh0cmFjdFZhbHVlVHlwZTxUUHJvcGVydHk+O1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBnZXQgUHJvcGVydHlUeXBlKCkge1xyXG4gICAgICAgIHJldHVybiBQcm9wZXJ0eVR5cGU7XHJcbiAgICB9XHJcbn1cclxuLyoqXHJcbiAqIERpc3BsYXlzIGEgdmFsdWUgdGhhdCBpcyBhdXRvbWF0aWNhbGx5IGNyZWF0ZWQgZnJvbSBhIHByb3BlcnR5IGluIGEgZm9ybSB0ZW1wbGF0ZS5cclxuICogVGhpcyBtYXkgYWxzbyBiZSBhIGNvbXBsZXggb2JqZWN0IG9yIGEgY29sbGVjdGlvbiBpbiB3aGljaCBjYXNlIG11bHRpcGxlIGFuZCBuZXN0ZWQgaW5wdXQgZWxlbWVudHMgbWF5IGJlIHJlbmRlcmVkLlxyXG4gKiBJZiB5b3UgYWxzbyB3YW50IGEgbGFiZWwsIHVzZSBSZXN0V29ybGREaXNwbGF5RWxlbWVudENvbXBvbmVudCA8cnctZGlzcGxheS1lbGVtZW50Pi5cclxuICogWW91IGNhbiBhbHNvIHVzZSBvbmUgb2YgdGhlIGRpZmZlcmVudCBSZXN0V29ybGREaXNwbGF5Li4uIDxydy1kaXNwbGF5LS4uLj4gZWxlbWVudHMgdG8gcmVuZGVyIGEgc3BlY2lmaWMgIHByb3BlcnR5IHR5cGUsXHJcbiAqIGJ1dCBpdCBpcyBhZHZpc2VkIHRvIGNvbnRyb2wgdGhlIHJlbmRlcmVkIGVsZW1lbnQgdGhyb3VnaCB0aGUgcGFzc2VkIGluIHByb3BlcnR5LlxyXG4gKi9cclxuQENvbXBvbmVudCh7XHJcbiAgICBzZWxlY3RvcjogJ3J3LWRpc3BsYXknLFxyXG4gICAgdGVtcGxhdGVVcmw6ICcuL3Jlc3R3b3JsZC1kaXNwbGF5L3Jlc3R3b3JsZC1kaXNwbGF5LmNvbXBvbmVudC5odG1sJyxcclxuICAgIHN0eWxlVXJsOiAnLi9yZXN0d29ybGQtZGlzcGxheS9yZXN0d29ybGQtZGlzcGxheS5jb21wb25lbnQuY3NzJ1xyXG59KVxyXG5leHBvcnQgY2xhc3MgUmVzdFdvcmxkRGlzcGxheUNvbXBvbmVudDxUUHJvcGVydHkgZXh0ZW5kcyBQcm9wZXJ0eTxTaW1wbGVWYWx1ZSwgc3RyaW5nLCBzdHJpbmc+PiB7XHJcbiAgICBASW5wdXQoeyByZXF1aXJlZDogdHJ1ZSB9KVxyXG4gICAgcHJvcGVydHkhOiBUUHJvcGVydHk7XHJcblxyXG4gICAgQElucHV0KHsgcmVxdWlyZWQ6IHRydWUgfSlcclxuICAgIGFwaU5hbWUhOiBzdHJpbmc7XHJcblxyXG4gICAgcHJpdmF0ZSBfdmFsdWU/OiBFeHRyYWN0VmFsdWVUeXBlPFRQcm9wZXJ0eT4gfCBFeHRyYWN0R2VuZXJpY09wdGlvbnNTZWxlY3RlZFZhbHVlc1R5cGU8VFByb3BlcnR5PltdIHwgRXh0cmFjdEdlbmVyaWNPcHRpb25zU2VsZWN0ZWRWYWx1ZXNUeXBlPFRQcm9wZXJ0eT4gfCBSZWNvcmQ8c3RyaW5nLCBTaW1wbGVWYWx1ZT4gfCBNYXA8bnVtYmVyLCBSZWNvcmQ8c3RyaW5nLCBTaW1wbGVWYWx1ZT4+O1xyXG4gICAgLyoqXHJcbiAgICAgKiBUaGUgdmFsdWUgdG8gZGlzcGxheS4gSWYgbm90IHNldCwgdGhlIHZhbHVlIG9mIHRoZSBwcm9wZXJ0eSB3aWxsIGJlIHVzZWQuXHJcbiAgICAqL1xyXG4gICAgQElucHV0KClcclxuICAgIHB1YmxpYyBzZXQgdmFsdWUodmFsdWU6IEV4dHJhY3RWYWx1ZVR5cGU8VFByb3BlcnR5PiB8IEV4dHJhY3RHZW5lcmljT3B0aW9uc1NlbGVjdGVkVmFsdWVzVHlwZTxUUHJvcGVydHk+W10gfCBFeHRyYWN0R2VuZXJpY09wdGlvbnNTZWxlY3RlZFZhbHVlc1R5cGU8VFByb3BlcnR5PiB8IFJlY29yZDxzdHJpbmcsIFNpbXBsZVZhbHVlPiB8IE1hcDxudW1iZXIsIFJlY29yZDxzdHJpbmcsIFNpbXBsZVZhbHVlPj4gfCB1bmRlZmluZWQpIHtcclxuICAgICAgICB0aGlzLl92YWx1ZSA9IHZhbHVlO1xyXG4gICAgfVxyXG4gICAgcHVibGljIGdldCB2YWx1ZSgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fdmFsdWUgPz8gdGhpcy5wcm9wZXJ0eS52YWx1ZSBhcyBFeHRyYWN0VmFsdWVUeXBlPFRQcm9wZXJ0eT47XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdldCBQcm9wZXJ0eVR5cGUoKSB7XHJcbiAgICAgICAgcmV0dXJuIFByb3BlcnR5VHlwZTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZ2V0IFByb3BlcnR5V2l0aE9wdGlvbnMoKSB7XHJcbiAgICAgICAgcmV0dXJuIFByb3BlcnR5V2l0aE9wdGlvbnM8U2ltcGxlVmFsdWUsIHN0cmluZywgc3RyaW5nPjtcclxuICAgIH1cclxufVxyXG5cclxuLyoqXHJcbiAqIERpc3BsYXlzIHRoZSB2YWx1ZSBvZiBhIGNvbGxlY3Rpb24gdGhhdCBpcyBhdXRvbWF0aWNhbGx5IGNyZWF0ZWQgZnJvbSB0aGUgZ2l2ZW4gcHJvcGVydHkuXHJcbiAqIFRoZSBlbGVtZW50cyBhbmQgY2FuIGFsc28gYmUgbmVzdGVkLlxyXG4gKiBAcmVtYXJrcyBJdCBpcyBhZHZpc2VkIHRvIHVzZSBSZXN0V29ybGREaXNwbGF5Q29tcG9uZW50IDxydy1kaXNwbGF5PiBhbmQgY29udHJvbCB0aGUgcmVuZGVyZWQgZWxlbWVudHMgd2l0aCB0aGUgcGFzc2VkIGluIHByb3BlcnR5XHJcbiAqIGluc3RlYWQgb2YgdXNpbmcgdGhpcyBjb21wb25lbnQgZGlyZWN0bHkuXHJcbiAqL1xyXG5AQ29tcG9uZW50KHtcclxuICAgIHNlbGVjdG9yOiAncnctZGlzcGxheS1jb2xsZWN0aW9uJyxcclxuICAgIHRlbXBsYXRlVXJsOiAnLi9yZXN0d29ybGQtZGlzcGxheS1jb2xsZWN0aW9uL3Jlc3R3b3JsZC1kaXNwbGF5LWNvbGxlY3Rpb24uY29tcG9uZW50Lmh0bWwnLFxyXG4gICAgc3R5bGVVcmw6ICcuL3Jlc3R3b3JsZC1kaXNwbGF5LWNvbGxlY3Rpb24vcmVzdHdvcmxkLWRpc3BsYXktY29sbGVjdGlvbi5jb21wb25lbnQuY3NzJ1xyXG59KVxyXG5leHBvcnQgY2xhc3MgUmVzdFdvcmxkRGlzcGxheUNvbGxlY3Rpb25Db21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xyXG4gICAgQElucHV0KHsgcmVxdWlyZWQ6IHRydWUgfSlcclxuICAgIHByb3BlcnR5ITogUHJvcGVydHkgJiB7IF90ZW1wbGF0ZXM6IHsgZGVmYXVsdDogVGVtcGxhdGUgfSB9O1xyXG5cclxuICAgIEBJbnB1dCh7IHJlcXVpcmVkOiB0cnVlIH0pXHJcbiAgICBhcGlOYW1lITogc3RyaW5nO1xyXG5cclxuICAgIHByaXZhdGUgX3ZhbHVlcz86IGFueVtdO1xyXG4gICAgLyoqXHJcbiAgICAgKiBUaGUgdmFsdWUgdG8gZGlzcGxheS4gSWYgbm90IHNldCwgdGhlIHZhbHVlIG9mIHRoZSBwcm9wZXJ0eSB3aWxsIGJlIHVzZWQuXHJcbiAgICAqL1xyXG4gICAgQElucHV0KClcclxuICAgIHB1YmxpYyBzZXQgdmFsdWVzKHZhbHVlczogYW55W10gfCBQYXJ0aWFsPFJlY29yZDxzdHJpbmcsIGFueT4+IHwgdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgdGhpcy5fdmFsdWVzID0gUmVzdFdvcmxkRGlzcGxheUNvbGxlY3Rpb25Db21wb25lbnQudG9BcnJheSh2YWx1ZXMpO1xyXG4gICAgfVxyXG4gICAgcHVibGljIGdldCB2YWx1ZXMoKTogYW55W10gfCB1bmRlZmluZWQge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl92YWx1ZXM7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBfdGVtcGxhdGVzOiBOdW1iZXJUZW1wbGF0ZVtdID0gW107XHJcbiAgICBwdWJsaWMgZ2V0IHRlbXBsYXRlcygpOiBOdW1iZXJUZW1wbGF0ZVtdIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fdGVtcGxhdGVzO1xyXG4gICAgfVxyXG5cclxuICAgIG5nT25Jbml0KCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuX3RlbXBsYXRlcyA9IHRoaXMuX3ZhbHVlcyA/XHJcbiAgICAgICAgICAgIEFycmF5LmZyb20oUmVzdFdvcmxkRGlzcGxheUNvbGxlY3Rpb25Db21wb25lbnQubWFwKHRoaXMuX3ZhbHVlcy5lbnRyaWVzKCksIGVudHJ5ID0+IChuZXcgTnVtYmVyVGVtcGxhdGUoeyAuLi4odGhpcy5wcm9wZXJ0eS5fdGVtcGxhdGVzLmRlZmF1bHQgYXMgVGVtcGxhdGVEdG8pLCB0aXRsZTogZW50cnlbMF0udG9TdHJpbmcoKSB9KSkpKSA6XHJcbiAgICAgICAgICAgIFJlc3RXb3JsZERpc3BsYXlDb2xsZWN0aW9uQ29tcG9uZW50LmdldENvbGxlY3Rpb25FbnRyeVRlbXBsYXRlcyh0aGlzLnByb3BlcnR5KTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIHN0YXRpYyAqIG1hcDxUMSwgVDI+KGl0ZXJhYmxlOiBJdGVyYWJsZUl0ZXJhdG9yPFQxPiwgY2FsbGJhY2s6ICh2YWx1ZTogVDEpID0+IFQyKSB7XHJcbiAgICAgICAgZm9yIChsZXQgeCBvZiBpdGVyYWJsZSkge1xyXG4gICAgICAgICAgICB5aWVsZCBjYWxsYmFjayh4KTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBzdGF0aWMgdG9BcnJheShhcnJheU9yRGljdGlvbmFyeTogYW55W10gfCBQYXJ0aWFsPFJlY29yZDxzdHJpbmcsIGFueT4+IHwgdW5kZWZpbmVkKTogYW55W10gfCB1bmRlZmluZWQge1xyXG4gICAgICAgIGlmICghYXJyYXlPckRpY3Rpb25hcnkpXHJcbiAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XHJcblxyXG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KGFycmF5T3JEaWN0aW9uYXJ5KSlcclxuICAgICAgICAgICAgcmV0dXJuIGFycmF5T3JEaWN0aW9uYXJ5O1xyXG5cclxuICAgICAgICByZXR1cm4gT2JqZWN0LmVudHJpZXMoYXJyYXlPckRpY3Rpb25hcnkpLm1hcCgoW2tleSwgdmFsdWVdKSA9PiAoeyBrZXksIHZhbHVlIH0pKTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIHN0YXRpYyBnZXRDb2xsZWN0aW9uRW50cnlUZW1wbGF0ZXMocHJvcGVydHk/OiBQcm9wZXJ0eSk6IE51bWJlclRlbXBsYXRlW10ge1xyXG4gICAgICAgIGlmICghcHJvcGVydHkpXHJcbiAgICAgICAgICAgIHJldHVybiBbXTtcclxuXHJcbiAgICAgICAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKHByb3BlcnR5Ll90ZW1wbGF0ZXMpXHJcbiAgICAgICAgICAgIC5maWx0ZXIoKFtrZXksIHZhbHVlXSkgPT4gTnVtYmVyLmlzSW50ZWdlcihOdW1iZXIucGFyc2VJbnQoa2V5KSkgJiYgTnVtYmVyLmlzSW50ZWdlcihOdW1iZXIucGFyc2VJbnQodmFsdWU/LnRpdGxlID8/IFwiXCIpKSlcclxuICAgICAgICAgICAgLm1hcCgoWywgdmFsdWVdKSA9PiBuZXcgTnVtYmVyVGVtcGxhdGUodmFsdWUgYXMgVGVtcGxhdGVEdG8pKTtcclxuICAgIH1cclxufVxyXG5cclxuLyoqXHJcbiAqIERpc3BsYXlzIHRoZSB2YWx1ZSBvZiBhIGRyb3Bkb3duIHRoYXQgaXMgYXV0b21hdGljYWxseSBjcmVhdGVkIGZyb20gdGhlIGdpdmVuIHByb3BlcnR5LlxyXG4gKiBJZiBzZXQgdGhlIGRyb3Bkb3duIHdpbGwgdXNlIHRoZSBgaW5saW5lYCBwcm9wZXJ0eSBvZiB0aGUgb3B0aW9ucyB0byByZW5kZXIgdGhlIGBzZWxlY3RlZFZhbHVlc2AgT3RoZXJ3aXNlIGl0IHdpbGwganVzdCByZW5kZXIgdGhlIHZhbHVlcywgYnV0IG5vIHByb21wdCBmb3IgdGhlbS5cclxuICogQHJlbWFya3MgSXQgaXMgYWR2aXNlZCB0byB1c2UgUmVzdFdvcmxkRGlzcGxheUNvbXBvbmVudCA8cnctZGlzcGxheT4gYW5kIGNvbnRyb2wgdGhlIHJlbmRlcmVkIGVsZW1lbnRzIHdpdGggdGhlIHBhc3NlZCBpbiBwcm9wZXJ0eVxyXG4gKiBpbnN0ZWFkIG9mIHVzaW5nIHRoaXMgY29tcG9uZW50IGRpcmVjdGx5LlxyXG4gKi9cclxuQENvbXBvbmVudCh7XHJcbiAgICBzZWxlY3RvcjogJ3J3LWRpc3BsYXktZHJvcGRvd24nLFxyXG4gICAgdGVtcGxhdGVVcmw6ICcuL3Jlc3R3b3JsZC1kaXNwbGF5LWRyb3Bkb3duL3Jlc3R3b3JsZC1kaXNwbGF5LWRyb3Bkb3duLmNvbXBvbmVudC5odG1sJyxcclxuICAgIHN0eWxlVXJsOiAnLi9yZXN0d29ybGQtZGlzcGxheS1kcm9wZG93bi9yZXN0d29ybGQtZGlzcGxheS1kcm9wZG93bi5jb21wb25lbnQuY3NzJ1xyXG59KVxyXG5leHBvcnQgY2xhc3MgUmVzdFdvcmxkRGlzcGxheURyb3Bkb3duQ29tcG9uZW50PFRQcm9wZXJ0eSBleHRlbmRzIFByb3BlcnR5PFNpbXBsZVZhbHVlLCBzdHJpbmcsIHN0cmluZz4gJiB7IG9wdGlvbnM6IE9wdGlvbnM8U2ltcGxlVmFsdWUsIHN0cmluZywgc3RyaW5nPiB9LCBUT3B0aW9uc0l0ZW0gZXh0ZW5kcyBFeHRyYWN0R2VuZXJpY09wdGlvbnNJdGVtVHlwZTxUUHJvcGVydHk+ID0gRXh0cmFjdEdlbmVyaWNPcHRpb25zSXRlbVR5cGU8VFByb3BlcnR5Pj4gaW1wbGVtZW50cyBPbkluaXQge1xyXG4gICAgQElucHV0KHsgcmVxdWlyZWQ6IHRydWUgfSlcclxuICAgIHByb3BlcnR5ITogVFByb3BlcnR5O1xyXG5cclxuICAgIEBJbnB1dCh7IHJlcXVpcmVkOiB0cnVlIH0pXHJcbiAgICBhcGlOYW1lITogc3RyaW5nO1xyXG5cclxuICAgIHByaXZhdGUgX3NlbGVjdGVkVmFsdWVzPzogRXh0cmFjdEdlbmVyaWNPcHRpb25zU2VsZWN0ZWRWYWx1ZXNUeXBlPFRQcm9wZXJ0eT5bXTtcclxuICAgIC8qKlxyXG4gICAgICogVGhlIHZhbHVlcyB0byBkaXNwbGF5LiBJZiBub3Qgc2V0LCB0aGUgdmFsdWVzIG9mIHRoZSBwcm9wZXJ0eSBvcHRpb25zIHdpbGwgYmUgdXNlZC5cclxuICAgICovXHJcbiAgICBASW5wdXQoKVxyXG4gICAgcHVibGljIHNldCBzZWxlY3RlZFZhbHVlcyh2YWx1ZTogRXh0cmFjdEdlbmVyaWNPcHRpb25zU2VsZWN0ZWRWYWx1ZXNUeXBlPFRQcm9wZXJ0eT5bXSB8IEV4dHJhY3RHZW5lcmljT3B0aW9uc1NlbGVjdGVkVmFsdWVzVHlwZTxUUHJvcGVydHk+IHwgdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKVxyXG4gICAgICAgICAgICB0aGlzLl9zZWxlY3RlZFZhbHVlcyA9IHZhbHVlIGFzIEV4dHJhY3RHZW5lcmljT3B0aW9uc1NlbGVjdGVkVmFsdWVzVHlwZTxUUHJvcGVydHk+W107XHJcbiAgICAgICAgZWxzZSBpZiAodmFsdWUgIT09IHVuZGVmaW5lZCAmJiB2YWx1ZSAhPT0gbnVsbClcclxuICAgICAgICAgICAgdGhpcy5fc2VsZWN0ZWRWYWx1ZXMgPSBbdmFsdWVdO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBnZXQgc2VsZWN0ZWRWYWx1ZXMoKTogRXh0cmFjdEdlbmVyaWNPcHRpb25zU2VsZWN0ZWRWYWx1ZXNUeXBlPFRQcm9wZXJ0eT5bXSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX3NlbGVjdGVkVmFsdWVzID8/ICh0aGlzLnByb3BlcnR5Lm9wdGlvbnMuc2VsZWN0ZWRWYWx1ZXMgYXMgdW5rbm93biBhcyBFeHRyYWN0R2VuZXJpY09wdGlvbnNTZWxlY3RlZFZhbHVlc1R5cGU8VFByb3BlcnR5PltdIHwgdW5kZWZpbmVkKSA/PyBbXTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIF9pbmxpbmU6IFRPcHRpb25zSXRlbVtdID0gW107XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBBIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyB0aGUgbGFiZWwgZm9yIHRoZSBnaXZlbiBpdGVtLlxyXG4gICAgICogVGhlIGRlZmF1bHQgcmV0dXJucyB0aGUgcHJvbXB0IGFuZCBvcHRpb25hbGx5IHRoZSB2YWx1ZSBpbiBicmFja2V0cy5cclxuICAgICAqIFRoZSB2YWx1ZSBpbiBicmFja2V0cyB3aWxsIG9ubHkgYmUgZGlzcGxheWVkIGlmIHRoZSBgY29sc2AgZmllbGQgb2YgdGhlIHByb3BlcnR5IGlzIHVuZGVmaW5lZCBvciBncmVhdGVyIHRoYW4gMS5cclxuICAgICAqIE92ZXJ3cml0ZSB0aGlzIGZ1bmN0aW9uIHRvIGNoYW5nZSB0aGUgbGFiZWwuXHJcbiAgICAgKiBAcGFyYW0gaXRlbSBUaGUgaXRlbSB0byBnZXQgdGhlIGxhYmVsIGZvci5cclxuICAgICAqL1xyXG4gICAgQElucHV0KClcclxuICAgIGdldExhYmVsOiAoaXRlbTogVE9wdGlvbnNJdGVtKSA9PiBzdHJpbmcgPSB0aGlzLmdldExhYmVsSW50ZXJuYWw7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBBIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyB0aGUgdG9vbHRpcCBmb3IgdGhlIGdpdmVuIGl0ZW0uXHJcbiAgICAgKiBUaGUgZGVmYXVsdCByZXR1cm5zIGFsbCBwcm9wZXJ0aWVzIG9mIHRoZSBpdGVtIGV4Y2VwdCB0aGUgb25lcyB0aGF0IHN0YXJ0IHdpdGggYW4gdW5kZXJzY29yZSBvciB0aGUgb25lcyB0aGF0IGFyZSBpbiB0aGUgbGlzdCBvZiBkZWZhdWx0IHByb3BlcnRpZXMgdG8gZXhjbHVkZS5cclxuICAgICAqIFRoZSBkZWZhdWx0IHByb3BlcnRpZXMgdG8gZXhjbHVkZSBhcmU6IGNyZWF0ZWRBdCwgY3JlYXRlZEJ5LCBsYXN0Q2hhbmdlZEF0LCBsYXN0Q2hhbmdlZEJ5LCB0aW1lc3RhbXAsIHByb21wdEZpZWxkLCB2YWx1ZUZpZWxkLlxyXG4gICAgICogT3ZlcndyaXRlIHRoaXMgZnVuY3Rpb24gdG8gY2hhbmdlIHRoZSB0b29sdGlwLlxyXG4gICAgICogQHBhcmFtIGl0ZW0gVGhlIGl0ZW0gdG8gZ2V0IHRoZSBsYWJlbCBmb3IuXHJcbiAgICAgKi9cclxuICAgIEBJbnB1dCgpXHJcbiAgICBnZXRUb29sdGlwOiAoaXRlbTogVE9wdGlvbnNJdGVtKSA9PiBzdHJpbmcgPSB0aGlzLmdldFRvb2x0aXBJbnRlcm5hbDtcclxuXHJcbiAgICBAQ29udGVudENoaWxkKCdpbnB1dE9wdGlvbnMnLCB7IHN0YXRpYzogZmFsc2UgfSlcclxuICAgIGlucHV0T3B0aW9uc1JlZj86IFRlbXBsYXRlUmVmPFByb3BlcnR5VGVtcGxhdGVDb250ZXh0PjtcclxuXHJcbiAgICBwdWJsaWMgZ2V0IHZhbHVlRmllbGQoKTogc3RyaW5nIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5wcm9wZXJ0eS5vcHRpb25zLnZhbHVlRmllbGQgPz8gXCJ2YWx1ZVwiO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBnZXQgcHJvbXB0RmllbGQoKTogc3RyaW5nIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5wcm9wZXJ0eS5vcHRpb25zLnByb21wdEZpZWxkID8/IFwicHJvbXB0XCI7XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3RydWN0b3IoXHJcbiAgICAgICAgcHJpdmF0ZSByZWFkb25seSBfbWVzc2FnZVNlcnZpY2U6IE1lc3NhZ2VTZXJ2aWNlLFxyXG4gICAgICAgIHByaXZhdGUgcmVhZG9ubHkgX2NsaWVudHM6IFJlc3RXb3JsZENsaWVudENvbGxlY3Rpb24sXHJcbiAgICApIHtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBuZ09uSW5pdCgpOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgICAgICBpZiAodGhpcy5wcm9wZXJ0eS5vcHRpb25zPy5pbmxpbmUgJiYgdGhpcy5wcm9wZXJ0eS5vcHRpb25zLmlubGluZS5sZW5ndGggPiAwKVxyXG4gICAgICAgICAgICB0aGlzLl9pbmxpbmUgPSBBcnJheS5mcm9tKHRoaXMucHJvcGVydHkub3B0aW9ucy5pbmxpbmUpIGFzIFRPcHRpb25zSXRlbVtdO1xyXG5cclxuICAgICAgICBhd2FpdCB0aGlzLnNldEluaXRpYWxTZWxlY3RlZE9wdGlvbnNFbGVtZW50Rm9yUHJvcGVydHkoKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZ2V0T3B0aW9uSXRlbSh2YWx1ZTogRXh0cmFjdEdlbmVyaWNPcHRpb25zU2VsZWN0ZWRWYWx1ZXNUeXBlPFRQcm9wZXJ0eT4pOiBUT3B0aW9uc0l0ZW0ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9pbmxpbmUuZmluZChvID0+IHRoaXMuZ2V0VmFsdWUobyBhcyBUT3B0aW9uc0l0ZW0pID09PSB2YWx1ZSkgYXMgVE9wdGlvbnNJdGVtID8/IHRoaXMuY3JlYXRlT3B0aW9uc0l0ZW0odmFsdWUpO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgY3JlYXRlT3B0aW9uc0l0ZW0odmFsdWU6IEV4dHJhY3RHZW5lcmljT3B0aW9uc1NlbGVjdGVkVmFsdWVzVHlwZTxUUHJvcGVydHk+KTogVE9wdGlvbnNJdGVtIHtcclxuICAgICAgICByZXR1cm4geyBbdGhpcy52YWx1ZUZpZWxkXTogdmFsdWUsIFt0aGlzLnByb21wdEZpZWxkXTogXCJcIiB9IGFzIFRPcHRpb25zSXRlbTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZ2V0VmFsdWUoaXRlbTogVE9wdGlvbnNJdGVtKTogRXh0cmFjdEdlbmVyaWNPcHRpb25zU2VsZWN0ZWRWYWx1ZXNUeXBlPFRQcm9wZXJ0eT4ge1xyXG4gICAgICAgIGlmIChpdGVtID09PSB1bmRlZmluZWQgfHwgaXRlbSA9PT0gbnVsbCB8fCAhaXRlbS5oYXNPd25Qcm9wZXJ0eSh0aGlzLnZhbHVlRmllbGQpKVxyXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFRoZSBpdGVtIGRvZXMgbm90IGhhdmUgYSBwcm9wZXJ0eSAke3RoaXMudmFsdWVGaWVsZH0uYCk7XHJcblxyXG4gICAgICAgIHJldHVybiBpdGVtW3RoaXMudmFsdWVGaWVsZCBhcyBrZXlvZiBUT3B0aW9uc0l0ZW1dIGFzIEV4dHJhY3RHZW5lcmljT3B0aW9uc1NlbGVjdGVkVmFsdWVzVHlwZTxUUHJvcGVydHk+O1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBnZXRQcm9tcHQoaXRlbTogVE9wdGlvbnNJdGVtKTogc3RyaW5nIHtcclxuICAgICAgICBpZiAoaXRlbSA9PT0gdW5kZWZpbmVkIHx8IGl0ZW0gPT09IG51bGwgfHwgIWl0ZW0uaGFzT3duUHJvcGVydHkodGhpcy5wcm9tcHRGaWVsZCkpXHJcbiAgICAgICAgICAgIHJldHVybiBcIlwiO1xyXG5cclxuICAgICAgICByZXR1cm4gaXRlbVt0aGlzLnByb21wdEZpZWxkIGFzIGtleW9mIFRPcHRpb25zSXRlbV0gYXMgc3RyaW5nO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBnZXRMYWJlbEludGVybmFsKGl0ZW06IFRPcHRpb25zSXRlbSk6IHN0cmluZyB7XHJcbiAgICAgICAgaWYgKGl0ZW0gPT09IHVuZGVmaW5lZCB8fCBpdGVtID09PSBudWxsKVxyXG4gICAgICAgICAgICByZXR1cm4gXCJcIjtcclxuXHJcbiAgICAgICAgY29uc3QgcHJvbXB0ID0gdGhpcy5nZXRQcm9tcHQoaXRlbSk7XHJcbiAgICAgICAgY29uc3QgdmFsdWUgPSB0aGlzLmdldFZhbHVlKGl0ZW0pO1xyXG5cclxuICAgICAgICBsZXQgbGFiZWwgPSBwcm9tcHQ7XHJcbiAgICAgICAgaWYgKGxhYmVsID09PSB1bmRlZmluZWQgfHwgbGFiZWwgPT09IG51bGwgfHwgbGFiZWwgPT09IFwiXCIpXHJcbiAgICAgICAgICAgIGxhYmVsID0gKHZhbHVlPy50b1N0cmluZygpID8/IFwiXCIpO1xyXG4gICAgICAgIGVsc2UgaWYgKCh0aGlzLnByb3BlcnR5LmNvbHMgPT09IHVuZGVmaW5lZCB8fCB0aGlzLnByb3BlcnR5LmNvbHMgPiAxKSAmJiBwcm9tcHQ/LnRvTG93ZXJDYXNlKCkgIT09IHZhbHVlPy50b1N0cmluZygpLnRvTG93ZXJDYXNlKCkpXHJcbiAgICAgICAgICAgIGxhYmVsICs9IGAgKCR7dmFsdWV9KWA7XHJcblxyXG4gICAgICAgIHJldHVybiBsYWJlbDtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGdldFRvb2x0aXBJbnRlcm5hbChpdGVtOiBUT3B0aW9uc0l0ZW0pOiBzdHJpbmcge1xyXG4gICAgICAgIGlmIChpdGVtID09PSB1bmRlZmluZWQgfHwgaXRlbSA9PT0gbnVsbClcclxuICAgICAgICAgICAgcmV0dXJuIFwiXCI7XHJcblxyXG4gICAgICAgIGNvbnN0IHRvb2x0aXAgPSBPYmplY3QuZW50cmllcyhpdGVtKVxyXG4gICAgICAgICAgICAuZmlsdGVyKChba2V5XSkgPT4gIShrZXkuc3RhcnRzV2l0aCgnXycpIHx8IFsnY3JlYXRlZEF0JywgJ2NyZWF0ZWRCeScsICdsYXN0Q2hhbmdlZEF0JywgJ2xhc3RDaGFuZ2VkQnknLCAndGltZXN0YW1wJywgdGhpcy5wcm9tcHRGaWVsZCwgdGhpcy52YWx1ZUZpZWxkXS5pbmNsdWRlcyhrZXkpKSlcclxuICAgICAgICAgICAgLnJlZHVjZSgocHJldiwgW2tleSwgdmFsdWVdLCBpbmRleCkgPT4gYCR7cHJldn0ke2luZGV4ID09PSAwID8gJycgOiAnXFxuJ30ke2tleX06ICR7UmVzdFdvcmxkRGlzcGxheURyb3Bkb3duQ29tcG9uZW50Lmpzb25TdHJpbmdpZnlXaXRoRWxpcHNpcyh2YWx1ZSl9YCwgJycpO1xyXG5cclxuICAgICAgICByZXR1cm4gdG9vbHRpcDtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGFzeW5jIHNldEluaXRpYWxTZWxlY3RlZE9wdGlvbnNFbGVtZW50Rm9yUHJvcGVydHkoKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICAgICAgY29uc3Qgb3B0aW9ucyA9IHRoaXMucHJvcGVydHkub3B0aW9ucztcclxuXHJcbiAgICAgICAgaWYgKCFvcHRpb25zLmxpbms/LmhyZWYgfHwgIXRoaXMuc2VsZWN0ZWRWYWx1ZXMgfHwgdGhpcy5zZWxlY3RlZFZhbHVlcy5sZW5ndGggPT09IDAgfHwgdGhpcy5zZWxlY3RlZFZhbHVlcy5ldmVyeSh2ID0+IHRoaXMuX2lubGluZS5zb21lKGkgPT4gdGhpcy5nZXRWYWx1ZShpIGFzIFRPcHRpb25zSXRlbSkgPT09IHYpID8/IGZhbHNlKSlcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG5cclxuICAgICAgICBjb25zdCBmaWx0ZXIgPSBgJHtvcHRpb25zLnZhbHVlRmllbGR9IGluICgke3RoaXMuc2VsZWN0ZWRWYWx1ZXN9KWA7XHJcbiAgICAgICAgYXdhaXQgdGhpcy5TZXRJbmxpbmVPcHRpb25zRnJvbUZpbHRlcihmaWx0ZXIpO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgYXN5bmMgU2V0SW5saW5lT3B0aW9uc0Zyb21GaWx0ZXIoZmlsdGVyOiBzdHJpbmcpIHtcclxuICAgICAgICBjb25zdCBvcHRpb25zID0gdGhpcy5wcm9wZXJ0eS5vcHRpb25zO1xyXG4gICAgICAgIGlmICghb3B0aW9ucy5saW5rPy5ocmVmKVxyXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1RoZSBwcm9wZXJ0eSBkb2VzIG5vdCBoYXZlIGEgbGluayBocmVmLicpO1xyXG5cclxuICAgICAgICBjb25zdCB0ZW1wbGF0ZWRVcmkgPSBvcHRpb25zLmxpbmsuaHJlZjtcclxuICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHRoaXMuZ2V0Q2xpZW50KCkuZ2V0TGlzdEJ5VXJpPFRPcHRpb25zSXRlbT4odGVtcGxhdGVkVXJpLCB7ICRmaWx0ZXI6IGZpbHRlciwgJHRvcDogMTAgfSk7XHJcbiAgICAgICAgaWYgKCFyZXNwb25zZS5vayB8fCBQcm9ibGVtRGV0YWlscy5pc1Byb2JsZW1EZXRhaWxzKHJlc3BvbnNlLmJvZHkpIHx8ICFyZXNwb25zZS5ib2R5KSB7XHJcbiAgICAgICAgICAgIGNvbnN0IG1lc3NhZ2UgPSBgQW4gZXJyb3Igb2NjdXJyZWQgd2hpbGUgZ2V0dGluZyB0aGUgaW5pdGlhbCBzZWxlY3RlZCBpdGVtcyBmb3IgdGhlIHByb3BlcnR5ICR7dGhpcy5wcm9wZXJ0eS5uYW1lfS5gO1xyXG4gICAgICAgICAgICB0aGlzLl9tZXNzYWdlU2VydmljZS5hZGQoeyBzZXZlcml0eTogJ2Vycm9yJywgc3VtbWFyeTogJ0Vycm9yJywgZGV0YWlsOiBtZXNzYWdlLCBkYXRhOiByZXNwb25zZSwgc3RpY2t5OiB0cnVlIH0pO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY29uc3QgaXRlbXMgPSByZXNwb25zZS5ib2R5IS5fZW1iZWRkZWQuaXRlbXMgYXMgUmVzb3VyY2VPZkR0bzxUT3B0aW9uc0l0ZW0+W107XHJcbiAgICAgICAgY29uc3QgbmV3SXRlbXMgPSB0aGlzLmNvbWJpbmVJbmxpbmVXaXRoU2VsZWN0ZWQoaXRlbXMpO1xyXG4gICAgICAgIHRoaXMuX2lubGluZSA9IG5ld0l0ZW1zO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgY29tYmluZUlubGluZVdpdGhTZWxlY3RlZChpdGVtczogUmVzb3VyY2VPZkR0bzxUT3B0aW9uc0l0ZW0+W10pOiBUT3B0aW9uc0l0ZW1bXSB7XHJcbiAgICAgICAgY29uc3Qgb2xkSW5saW5lID0gdGhpcy5faW5saW5lIGFzIFJlc291cmNlT2ZEdG88VE9wdGlvbnNJdGVtPltdO1xyXG4gICAgICAgIGlmICghb2xkSW5saW5lIHx8IG9sZElubGluZS5sZW5ndGggPT09IDApXHJcbiAgICAgICAgICAgIHJldHVybiBpdGVtcztcclxuXHJcbiAgICAgICAgY29uc3QgaXRlbXNUb0tlZXAgPSBvbGRJbmxpbmUuZmlsdGVyKGkgPT4gdGhpcy5zZWxlY3RlZFZhbHVlcy5pbmNsdWRlcyh0aGlzLmdldFZhbHVlKGkgYXMgVE9wdGlvbnNJdGVtKSkpO1xyXG4gICAgICAgIGNvbnN0IG5ld0l0ZW1zID0gaXRlbXMuY29uY2F0KGl0ZW1zVG9LZWVwLmZpbHRlcihpID0+ICFpdGVtcy5pbmNsdWRlcyhpKSkpO1xyXG5cclxuICAgICAgICByZXR1cm4gbmV3SXRlbXM7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBnZXRDbGllbnQoKTogUmVzdFdvcmxkQ2xpZW50IHtcclxuICAgICAgICBpZiAoIXRoaXMuYXBpTmFtZSlcclxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdDYW5ub3QgZ2V0IGEgY2xpZW50LCBiZWNhdXNlIHRoZSBhcGlOYW1lIGlzIG5vdCBzZXQuJyk7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzLl9jbGllbnRzLmdldENsaWVudCh0aGlzLmFwaU5hbWUpO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgc3RhdGljIGpzb25TdHJpbmdpZnlXaXRoRWxpcHNpcyh2YWx1ZTogdW5rbm93bikge1xyXG4gICAgICAgIGNvbnN0IG1heExlbmd0aCA9IDIwMDtcclxuICAgICAgICBjb25zdCBlbmQgPSAxMDtcclxuICAgICAgICBjb25zdCBzdGFydCA9IG1heExlbmd0aCAtIGVuZCAtIDI7XHJcbiAgICAgICAgY29uc3QganNvbiA9IEpTT04uc3RyaW5naWZ5KHZhbHVlKTtcclxuICAgICAgICBjb25zdCBzaG9ydGVuZWQgPSBqc29uLmxlbmd0aCA+IG1heExlbmd0aCA/IGpzb24uc3Vic3RyaW5nKDAsIHN0YXJ0KSArICfigKYnICsganNvbi5zdWJzdHJpbmcoanNvbi5sZW5ndGggLSBlbmQpIDoganNvbjtcclxuXHJcbiAgICAgICAgcmV0dXJuIHNob3J0ZW5lZDtcclxuICAgIH1cclxufVxyXG5cclxuLyoqXHJcbiAqIERpc3BsYXlzIHRoZSB2YWx1ZSBvZiBhIGNvbXBsZXggb2JqZWN0IHdpdGggbXVsdGlwbGUgcHJvcGVydGllcyB0aGF0IGlzIGF1dG9tYXRpY2FsbHkgY3JlYXRlZCBmcm9tIHRoZSBnaXZlbiBwcm9wZXJ0eS5cclxuICogVGhlIG9iamVjdCBjYW4gYWxzbyBiZSBuZXN0ZWQuXHJcbiAqIEByZW1hcmtzIEl0IGlzIGFkdmlzZWQgdG8gdXNlIFJlc3RXb3JsZERpc3BsYXlDb21wb25lbnQgPHJ3LWRpc3BsYXk+IGFuZCBjb250cm9sIHRoZSByZW5kZXJlZCBlbGVtZW50cyB3aXRoIHRoZSBwYXNzZWQgaW4gcHJvcGVydHlcclxuICogaW5zdGVhZCBvZiB1c2luZyB0aGlzIGNvbXBvbmVudCBkaXJlY3RseS5cclxuICovXHJcbkBDb21wb25lbnQoe1xyXG4gICAgc2VsZWN0b3I6ICdydy1kaXNwbGF5LW9iamVjdCcsXHJcbiAgICB0ZW1wbGF0ZVVybDogJy4vcmVzdHdvcmxkLWRpc3BsYXktb2JqZWN0L3Jlc3R3b3JsZC1kaXNwbGF5LW9iamVjdC5jb21wb25lbnQuaHRtbCcsXHJcbiAgICBzdHlsZVVybDogJy4vcmVzdHdvcmxkLWRpc3BsYXktb2JqZWN0L3Jlc3R3b3JsZC1kaXNwbGF5LW9iamVjdC5jb21wb25lbnQuY3NzJ1xyXG59KVxyXG5leHBvcnQgY2xhc3MgUmVzdFdvcmxkRGlzcGxheU9iamVjdENvbXBvbmVudCB7XHJcbiAgICBASW5wdXQoeyByZXF1aXJlZDogdHJ1ZSB9KVxyXG4gICAgcHJvcGVydHkhOiBQcm9wZXJ0eTxudWxsLCBuZXZlciwgbmV2ZXI+ICYgeyBfdGVtcGxhdGVzOiB7IGRlZmF1bHQ6IFRlbXBsYXRlIH0gfTtcclxuXHJcbiAgICBASW5wdXQoeyByZXF1aXJlZDogdHJ1ZSB9KVxyXG4gICAgYXBpTmFtZSE6IHN0cmluZztcclxuXHJcbiAgICBwcml2YXRlIF92YWx1ZT86IFJlY29yZDxzdHJpbmcsIFNpbXBsZVZhbHVlPjtcclxuICAgIC8qKlxyXG4gICAgICogVGhlIHZhbHVlIHRvIGRpc3BsYXkuIElmIG5vdCBzZXQsIHRoZSB2YWx1ZSBvZiB0aGUgdGVtcGxhdGUgcHJvcGVydGllcyB3aWxsIGJlIHVzZWQuXHJcbiAgICAqL1xyXG4gICAgQElucHV0KClcclxuICAgIHB1YmxpYyBzZXQgdmFsdWUodmFsdWU6IFJlY29yZDxzdHJpbmcsIFNpbXBsZVZhbHVlPiB8IHVuZGVmaW5lZCkge1xyXG4gICAgICAgIHRoaXMuX3ZhbHVlID0gdmFsdWU7XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgZ2V0IHZhbHVlKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl92YWx1ZTtcclxuICAgIH1cclxufVxyXG5cclxuLyoqXHJcbiAqIERpc3BsYXlzIHRoZSB2YWx1ZSBvZiBhIHNpbXBsZSBlbGVtZW50LCBsaWtlIGEgc3RyaW5nLCBhIG51bWJlciBvciBhIERhdGUgdGhhdCBpcyBhdXRvbWF0aWNhbGx5IGNyZWF0ZWQgZnJvbSB0aGUgZ2l2ZW4gcHJvcGVydHkuXHJcbiAqIEByZW1hcmtzIEl0IGlzIGFkdmlzZWQgdG8gdXNlIFJlc3RXb3JsZERpc3BsYXlDb21wb25lbnQgPHJ3LWRpc3BsYXk+IGFuZCBjb250cm9sIHRoZSByZW5kZXJlZCBlbGVtZW50cyB3aXRoIHRoZSBwYXNzZWQgaW4gcHJvcGVydHlcclxuICogaW5zdGVhZCBvZiB1c2luZyB0aGlzIGNvbXBvbmVudCBkaXJlY3RseS5cclxuICovXHJcbkBDb21wb25lbnQoe1xyXG4gICAgc2VsZWN0b3I6ICdydy1kaXNwbGF5LXNpbXBsZScsXHJcbiAgICB0ZW1wbGF0ZVVybDogJy4vcmVzdHdvcmxkLWRpc3BsYXktc2ltcGxlL3Jlc3R3b3JsZC1kaXNwbGF5LXNpbXBsZS5jb21wb25lbnQuaHRtbCcsXHJcbiAgICBzdHlsZVVybDogJy4vcmVzdHdvcmxkLWRpc3BsYXktc2ltcGxlL3Jlc3R3b3JsZC1kaXNwbGF5LXNpbXBsZS5jb21wb25lbnQuY3NzJ1xyXG59KVxyXG5leHBvcnQgY2xhc3MgUmVzdFdvcmxkRGlzcGxheVNpbXBsZUNvbXBvbmVudDxUUHJvcGVydHkgZXh0ZW5kcyBQcm9wZXJ0eTxTaW1wbGVWYWx1ZSwgc3RyaW5nLCBzdHJpbmc+PiB7XHJcbiAgICBASW5wdXQoeyByZXF1aXJlZDogdHJ1ZSB9KVxyXG4gICAgcHJvcGVydHkhOiBUUHJvcGVydHk7XHJcblxyXG4gICAgQElucHV0KHsgcmVxdWlyZWQ6IHRydWUgfSlcclxuICAgIGFwaU5hbWUhOiBzdHJpbmc7XHJcblxyXG4gICAgcHJpdmF0ZSBfdmFsdWU/OiBTaW1wbGVWYWx1ZTtcclxuICAgIC8qKlxyXG4gICAgICogVGhlIHZhbHVlIHRvIGRpc3BsYXkuIElmIG5vdCBzZXQsIHRoZSB2YWx1ZSBvZiB0aGUgcHJvcGVydHkgd2lsbCBiZSB1c2VkLlxyXG4gICAgKi9cclxuICAgIEBJbnB1dCgpXHJcbiAgICBwdWJsaWMgc2V0IHZhbHVlKHZhbHVlOiBTaW1wbGVWYWx1ZSkge1xyXG4gICAgICAgIHRoaXMuX3ZhbHVlID0gdmFsdWU7XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgZ2V0IHZhbHVlKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl92YWx1ZSA/PyB0aGlzLnByb3BlcnR5LnZhbHVlO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBnZXQgUHJvcGVydHlUeXBlKCkge1xyXG4gICAgICAgIHJldHVybiBQcm9wZXJ0eVR5cGU7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgX2RhdGVGb3JtYXQgPSBuZXcgRGF0ZSgzMzMzLCAxMCwgMjIpIC8vIG1vbnRocyBzdGFydCBhdCAwIGluIEpTXHJcbiAgICAgICAgLnRvTG9jYWxlRGF0ZVN0cmluZygpXHJcbiAgICAgICAgLnJlcGxhY2UoXCIyMlwiLCBcImRkXCIpXHJcbiAgICAgICAgLnJlcGxhY2UoXCIxMVwiLCBcIk1NXCIpXHJcbiAgICAgICAgLnJlcGxhY2UoXCIzMzMzXCIsIFwieXl5eVwiKVxyXG4gICAgICAgIC5yZXBsYWNlKFwiMzNcIiwgXCJ5eVwiKTtcclxuXHJcbiAgICBwdWJsaWMgZ2V0IGRhdGVGb3JtYXQoKTogc3RyaW5nIHtcclxuICAgICAgICByZXR1cm4gUmVzdFdvcmxkRGlzcGxheVNpbXBsZUNvbXBvbmVudC5fZGF0ZUZvcm1hdDtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBfdGltZUZvcm1hdCA9IG5ldyBEYXRlKDEsIDEsIDEsIDIyLCAzMywgNDQpXHJcbiAgICAgICAgLnRvTG9jYWxlVGltZVN0cmluZygpXHJcbiAgICAgICAgLnJlcGxhY2UoXCIyMlwiLCBcImhoXCIpXHJcbiAgICAgICAgLnJlcGxhY2UoXCIzM1wiLCBcIm1tXCIpXHJcbiAgICAgICAgLnJlcGxhY2UoXCI0NFwiLCBcInNzXCIpO1xyXG5cclxuICAgIHB1YmxpYyBnZXQgdGltZUZvcm1hdCgpIHtcclxuICAgICAgICByZXR1cm4gUmVzdFdvcmxkRGlzcGxheVNpbXBsZUNvbXBvbmVudC5fdGltZUZvcm1hdDtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZ2V0IFByb3BlcnR5V2l0aEltYWdlKCkge1xyXG4gICAgICAgIHJldHVybiBQcm9wZXJ0eVdpdGhJbWFnZTtcclxuICAgIH1cclxufVxyXG5cclxuLyoqXHJcbiAqIERpc3BsYXlzIHRoZSB2YWx1ZXMgb2YgYSBjb2xsZWN0aW9uIG9mIHJ3LWRpc3BsYXktZWxlbWVudHMgYXV0b21hdGljYWxseSBjcmVhdGVkIGZyb20gYSB0ZW1wbGF0ZS5cclxuICovXHJcbkBDb21wb25lbnQoe1xyXG4gICAgc2VsZWN0b3I6ICdydy1kaXNwbGF5LXRlbXBsYXRlJyxcclxuICAgIHRlbXBsYXRlVXJsOiAnLi9yZXN0d29ybGQtZGlzcGxheS10ZW1wbGF0ZS9yZXN0d29ybGQtZGlzcGxheS10ZW1wbGF0ZS5jb21wb25lbnQuaHRtbCcsXHJcbiAgICBzdHlsZVVybDogJy4vcmVzdHdvcmxkLWRpc3BsYXktdGVtcGxhdGUvcmVzdHdvcmxkLWRpc3BsYXktdGVtcGxhdGUuY29tcG9uZW50LmNzcydcclxufSlcclxuZXhwb3J0IGNsYXNzIFJlc3RXb3JsZERpc3BsYXlUZW1wbGF0ZUNvbXBvbmVudCB7XHJcbiAgICBASW5wdXQoeyByZXF1aXJlZDogdHJ1ZSB9KVxyXG4gICAgdGVtcGxhdGUhOiBUZW1wbGF0ZTtcclxuXHJcbiAgICBASW5wdXQoeyByZXF1aXJlZDogdHJ1ZSB9KVxyXG4gICAgYXBpTmFtZSE6IHN0cmluZztcclxuXHJcbiAgICBwcml2YXRlIF92YWx1ZT86IFJlY29yZDxzdHJpbmcsIGFueT47XHJcbiAgICAvKipcclxuICAgICAqIFRoZSB2YWx1ZSB0byBkaXNwbGF5LiBJZiBub3Qgc2V0LCB0aGUgdmFsdWVzIG9mIHRoZSB0ZW1wbGF0ZSBwcm9wZXJ0aWVzIHdpbGwgYmUgdXNlZC5cclxuICAgICovXHJcbiAgICBASW5wdXQoKVxyXG4gICAgcHVibGljIHNldCB2YWx1ZSh2YWx1ZTogUmVjb3JkPHN0cmluZywgYW55PiB8IHVuZGVmaW5lZCkge1xyXG4gICAgICAgIHRoaXMuX3ZhbHVlID0gdmFsdWU7XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgZ2V0IHZhbHVlKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl92YWx1ZTtcclxuICAgIH1cclxufVxyXG4iLCI8ZGl2IGNsYXNzPVwiZ3JpZCBmaWVsZFwiICpuZ0lmPVwicHJvcGVydHkudHlwZSAhPT0gUHJvcGVydHlUeXBlLkhpZGRlblwiPlxyXG4gICAgPHJ3LWxhYmVsIFtwcm9wZXJ0eV09XCJwcm9wZXJ0eVwiIGNsYXNzPVwiY29sLTEyIG1kOmNvbC0yIGZsZXggYWxpZ24taXRlbXMtY2VudGVyXCI+PC9ydy1sYWJlbD5cclxuICAgIDxydy1kaXNwbGF5IFtwcm9wZXJ0eV09XCJwcm9wZXJ0eVwiIFt2YWx1ZV09XCJ2YWx1ZVwiIFthcGlOYW1lXT1cImFwaU5hbWVcIiBjbGFzcz1cImNvbC0xMiBtZDpjb2wtMTBcIj48L3J3LWRpc3BsYXk+XHJcbjwvZGl2PlxyXG4iLCI8bmctY29udGFpbmVyICpuZ0lmPVwicHJvcGVydHkudHlwZSAhPT0gUHJvcGVydHlUeXBlLkhpZGRlblwiPlxyXG4gICAgPHJ3LWRpc3BsYXktZHJvcGRvd24gKm5nSWY9XCJwcm9wZXJ0eS5vcHRpb25zXCIgW3Byb3BlcnR5XT1cIiRhbnkocHJvcGVydHkpXCIgW3NlbGVjdGVkVmFsdWVzXT1cIiRhbnkodmFsdWUpXCIgW2FwaU5hbWVdPVwiYXBpTmFtZVwiPjwvcnctZGlzcGxheS1kcm9wZG93bj5cclxuXHJcbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIXByb3BlcnR5Lm9wdGlvbnNcIj5cclxuICAgICAgICA8bmctY29udGFpbmVyIFtuZ1N3aXRjaF09XCJwcm9wZXJ0eS50eXBlXCI+XHJcbiAgICAgICAgICAgIDxydy1kaXNwbGF5LW9iamVjdCAqbmdTd2l0Y2hDYXNlPVwiUHJvcGVydHlUeXBlLk9iamVjdFwiIFtwcm9wZXJ0eV09XCIkYW55KHByb3BlcnR5KVwiIFt2YWx1ZV09XCIkYW55KHZhbHVlKVwiIFthcGlOYW1lXT1cImFwaU5hbWVcIj48L3J3LWRpc3BsYXktb2JqZWN0PlxyXG4gICAgICAgICAgICA8cnctZGlzcGxheS1jb2xsZWN0aW9uICpuZ1N3aXRjaENhc2U9XCJQcm9wZXJ0eVR5cGUuQ29sbGVjdGlvblwiIFtwcm9wZXJ0eV09XCIkYW55KHByb3BlcnR5KVwiIFt2YWx1ZXNdPVwiJGFueSh2YWx1ZSlcIiBbYXBpTmFtZV09XCJhcGlOYW1lXCI+PC9ydy1kaXNwbGF5LWNvbGxlY3Rpb24+XHJcbiAgICAgICAgICAgIDxydy1kaXNwbGF5LXNpbXBsZSAqbmdTd2l0Y2hEZWZhdWx0IFtwcm9wZXJ0eV09XCJwcm9wZXJ0eVwiIFt2YWx1ZV09XCIkYW55KHZhbHVlKVwiIFthcGlOYW1lXT1cImFwaU5hbWVcIj48L3J3LWRpc3BsYXktc2ltcGxlPlxyXG4gICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgPC9uZy1jb250YWluZXI+XHJcbjwvbmctY29udGFpbmVyPlxyXG4iLCI8ZGl2IGNsYXNzPVwiZmxleCBhbGlnbi1pdGVtcy1jZW50ZXJcIj5cclxuICAgIDxkaXYgY2xhc3M9XCJicmFjZVwiPlxyXG4gICAgPC9kaXY+XHJcbiAgICA8ZGl2IGNsYXNzPVwidy1mdWxsXCI+XHJcbiAgICAgICAgPGRpdiAqbmdGb3I9XCJsZXQgdGVtcGxhdGUgb2YgdGVtcGxhdGVzXCIgY2xhc3M9XCJmbGV4IGFsaWduLWl0ZW1zLWNlbnRlclwiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYnJhY2VcIj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ3LWZ1bGwgZmxleCBqdXN0aWZ5LWNvbnRlbnQtZW5kXCI+XHJcbiAgICAgICAgICAgICAgICA8cnctZGlzcGxheS10ZW1wbGF0ZSBbdGVtcGxhdGVdPVwiJGFueSh0ZW1wbGF0ZSlcIiBbdmFsdWVdPVwidmFsdWVzID8gdmFsdWVzW3RlbXBsYXRlLnRpdGxlIV0gOiB1bmRlZmluZWRcIiBbYXBpTmFtZV09XCJhcGlOYW1lXCIgY2xhc3M9XCJ3LWZ1bGxcIj48L3J3LWRpc3BsYXktdGVtcGxhdGU+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbjwvZGl2PlxyXG4iLCI8IS0tIDxuZy10ZW1wbGF0ZSAjZGVmYXVsdElucHV0T3B0aW9ucyBsZXQtcHJvcGVydHk9XCJwcm9wZXJ0eVwiIGxldC1zZWxlY3RlZFZhbHVlcz1cInNlbGVjdGVkVmFsdWVzXCI+IC0tPlxyXG48bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCB2YWx1ZSBvZiBzZWxlY3RlZFZhbHVlczsgbGFzdCBhcyBsYXN0O1wiPlxyXG4gICAgPHNwYW4gW3BUb29sdGlwXT1cImdldFRvb2x0aXAoZ2V0T3B0aW9uSXRlbSh2YWx1ZSkpXCI+e3tnZXRMYWJlbChnZXRPcHRpb25JdGVtKHZhbHVlKSl9fTwvc3Bhbj57e2xhc3QgPyBcIlwiIDogXCIsIFwifX1cclxuPC9uZy1jb250YWluZXI+XHJcbjwhLS0gPC9uZy10ZW1wbGF0ZT5cclxuPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImlucHV0T3B0aW9uc1JlZiA/PyBkZWZhdWx0SW5wdXRPcHRpb25zOyBjb250ZXh0OiB7IHByb3BlcnR5OiBwcm9wZXJ0eSwgc2VsZWN0ZWRWYWx1ZXM6IHNlbGVjdGVkVmFsdWVzIH1cIj48L25nLWNvbnRhaW5lcj4gLS0+IiwiPGRpdiBjbGFzcz1cImZsZXggYWxpZ24taXRlbXMtY2VudGVyXCI+XHJcbiAgICA8ZGl2IGNsYXNzPVwiYnJhY2VcIj5cclxuICAgIDwvZGl2PlxyXG4gICAgPGRpdiBjbGFzcz1cInctZnVsbFwiPlxyXG4gICAgICAgIDxydy1kaXNwbGF5LXRlbXBsYXRlIFt0ZW1wbGF0ZV09XCJwcm9wZXJ0eS5fdGVtcGxhdGVzLmRlZmF1bHRcIiBbdmFsdWVdPVwidmFsdWVcIiBbYXBpTmFtZV09XCJhcGlOYW1lXCI+PC9ydy1kaXNwbGF5LXRlbXBsYXRlPlxyXG4gICAgPC9kaXY+XHJcbjwvZGl2PiIsIjxuZy1jb250YWluZXIgW25nU3dpdGNoXT1cInByb3BlcnR5LnR5cGVcIj5cclxuICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIlByb3BlcnR5VHlwZS5UZXh0XCI+XHJcbiAgICAgICAgPHJ3LWF2YXRhciAqbmdJZj1cInByb3BlcnR5Lm5hbWUgPT09ICdjcmVhdGVkQnknIHx8IHByb3BlcnR5Lm5hbWUgPT09ICdsYXN0Q2hhbmdlZEJ5J1wiIFt1c2VyXT1cIiRhbnkodmFsdWUpXCI+PC9ydy1hdmF0YXI+XHJcbiAgICAgICAgPHNwYW4gKm5nSWY9XCJwcm9wZXJ0eS5uYW1lICE9PSAnY3JlYXRlZEJ5JyAmJiBwcm9wZXJ0eS5uYW1lICE9PSAnbGFzdENoYW5nZWRCeSdcIiBjbGFzcz1cInctZnVsbFwiPnt7dmFsdWUgfCBwcm9wZXJ0eVR5cGVGb3JtYXQ6cHJvcGVydHkudHlwZX19PC9zcGFuPlxyXG4gICAgPC9uZy1jb250YWluZXI+XHJcblxyXG4gICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiUHJvcGVydHlUeXBlLkJvb2xcIj5cclxuICAgICAgICA8cC1jaGVja2JveCAqbmdJZj1cInByb3BlcnR5LnJlcXVpcmVkXCIgWyhuZ01vZGVsKV09XCJ2YWx1ZVwiIFtiaW5hcnldPVwidHJ1ZVwiIFtyZWFkb25seV09XCJ0cnVlXCIgW2Rpc2FibGVkXT1cInRydWVcIj48L3AtY2hlY2tib3g+XHJcbiAgICAgICAgPHAtdHJpU3RhdGVDaGVja2JveCAqbmdJZj1cIiFwcm9wZXJ0eS5yZXF1aXJlZFwiIFsobmdNb2RlbCldPVwidmFsdWVcIiBbcmVhZG9ubHldPVwidHJ1ZVwiIFtkaXNhYmxlZF09XCJ0cnVlXCI+PC9wLXRyaVN0YXRlQ2hlY2tib3g+XHJcbiAgICA8L25nLWNvbnRhaW5lcj5cclxuXHJcbiAgICA8c3BhbiAqbmdTd2l0Y2hEZWZhdWx0IGNsYXNzPVwidy1mdWxsXCI+e3t2YWx1ZSB8IHByb3BlcnR5VHlwZUZvcm1hdDpwcm9wZXJ0eS50eXBlfX08L3NwYW4+XHJcbjwvbmctY29udGFpbmVyPlxyXG4iLCI8cnctZGlzcGxheS1lbGVtZW50ICpuZ0Zvcj1cImxldCBwcm9wZXJ0eSBvZiB0ZW1wbGF0ZS5wcm9wZXJ0aWVzXCIgW3Byb3BlcnR5XT1cInByb3BlcnR5XCIgW3ZhbHVlXT1cInZhbHVlID8gdmFsdWVbcHJvcGVydHkubmFtZV0gOiB1bmRlZmluZWRcIiBbYXBpTmFtZV09XCJhcGlOYW1lXCI+PC9ydy1kaXNwbGF5LWVsZW1lbnQ+Il19
510
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVzdHdvcmxkLWRpc3BsYXlzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LXJlc3R3b3JsZC1jbGllbnQvc3JjL2xpYi9jb21wb25lbnRzL3Jlc3R3b3JsZC1kaXNwbGF5cy9yZXN0d29ybGQtZGlzcGxheXMudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtcmVzdHdvcmxkLWNsaWVudC9zcmMvbGliL2NvbXBvbmVudHMvcmVzdHdvcmxkLWRpc3BsYXlzL3Jlc3R3b3JsZC1kaXNwbGF5LWVsZW1lbnQvcmVzdHdvcmxkLWRpc3BsYXktZWxlbWVudC5jb21wb25lbnQuaHRtbCIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1yZXN0d29ybGQtY2xpZW50L3NyYy9saWIvY29tcG9uZW50cy9yZXN0d29ybGQtZGlzcGxheXMvcmVzdHdvcmxkLWRpc3BsYXkvcmVzdHdvcmxkLWRpc3BsYXkuY29tcG9uZW50Lmh0bWwiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtcmVzdHdvcmxkLWNsaWVudC9zcmMvbGliL2NvbXBvbmVudHMvcmVzdHdvcmxkLWRpc3BsYXlzL3Jlc3R3b3JsZC1kaXNwbGF5LWNvbGxlY3Rpb24vcmVzdHdvcmxkLWRpc3BsYXktY29sbGVjdGlvbi5jb21wb25lbnQuaHRtbCIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1yZXN0d29ybGQtY2xpZW50L3NyYy9saWIvY29tcG9uZW50cy9yZXN0d29ybGQtZGlzcGxheXMvcmVzdHdvcmxkLWRpc3BsYXktZHJvcGRvd24vcmVzdHdvcmxkLWRpc3BsYXktZHJvcGRvd24uY29tcG9uZW50Lmh0bWwiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtcmVzdHdvcmxkLWNsaWVudC9zcmMvbGliL2NvbXBvbmVudHMvcmVzdHdvcmxkLWRpc3BsYXlzL3Jlc3R3b3JsZC1kaXNwbGF5LW9iamVjdC9yZXN0d29ybGQtZGlzcGxheS1vYmplY3QuY29tcG9uZW50Lmh0bWwiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtcmVzdHdvcmxkLWNsaWVudC9zcmMvbGliL2NvbXBvbmVudHMvcmVzdHdvcmxkLWRpc3BsYXlzL3Jlc3R3b3JsZC1kaXNwbGF5LXNpbXBsZS9yZXN0d29ybGQtZGlzcGxheS1zaW1wbGUuY29tcG9uZW50Lmh0bWwiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtcmVzdHdvcmxkLWNsaWVudC9zcmMvbGliL2NvbXBvbmVudHMvcmVzdHdvcmxkLWRpc3BsYXlzL3Jlc3R3b3JsZC1kaXNwbGF5LXRlbXBsYXRlL3Jlc3R3b3JsZC1kaXNwbGF5LXRlbXBsYXRlLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBdUIsTUFBTSxlQUFlLENBQUM7QUFDcEYsT0FBTyxFQUF5QixZQUFZLEVBQVksY0FBYyxFQUFrSCxjQUFjLEVBQWlCLE1BQU0seUJBQXlCLENBQUM7QUFDdlAsT0FBTyxFQUFFLG1CQUFtQixFQUFFLGlCQUFpQixFQUFFLE1BQU0saUNBQWlDLENBQUE7Ozs7Ozs7Ozs7OztBQU14Rjs7Ozs7O0dBTUc7QUFNSCxNQUFNLE9BQU8sZ0NBQWdDO0lBQ3pDOzs7T0FHRztJQUVILFFBQVEsQ0FBYTtJQUVyQjs7OztPQUlHO0lBRUgsT0FBTyxDQUFVO0lBRVQsTUFBTSxDQUFvTjtJQUNsTzs7TUFFRTtJQUNGLElBQ1csS0FBSyxDQUFDLEtBQXVOO1FBQ3BPLElBQUksQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDO0lBQ3hCLENBQUM7SUFDRCxJQUFXLEtBQUs7UUFDWixPQUFPLElBQUksQ0FBQyxNQUFNLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxLQUFvQyxDQUFDO0lBQzdFLENBQUM7SUFFRCxJQUFXLFlBQVk7UUFDbkIsT0FBTyxZQUFZLENBQUM7SUFDeEIs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QUFDLFdBQVcsQ0FBQztJQUN2RCxDQUFDO0lBRUQsSUFBVyxpQkFBaUI7UUFDeEIsT0FBTyxpQkFBaUIsQ0FBQztJQUM3QixDQUFDO3VHQXZEUSwrQkFBK0I7MkZBQS9CLCtCQUErQiwrSE0vYTVDLDQ1QkFhQTs7MkZOa2FhLCtCQUErQjtrQkFMM0MsU0FBUzsrQkFDSSxtQkFBbUI7OEJBVTdCLFFBQVE7c0JBRFAsS0FBSzt1QkFBQyxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUU7Z0JBU3pCLE9BQU87c0JBRE4sS0FBSzt1QkFBQyxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUU7Z0JBUWQsS0FBSztzQkFEZixLQUFLOztBQXNDVjs7OztHQUlHO0FBTUgsTUFBTSxPQUFPLGlDQUFpQztJQUMxQzs7OztPQUlHO0lBRUgsUUFBUSxDQUFZO0lBRXBCOzs7O09BSUc7SUFFSCxPQUFPLENBQVU7SUFFVCxNQUFNLENBQXVCO0lBQ3JDOztNQUVFO0lBQ0YsSUFDVyxLQUFLLENBQUMsS0FBc0M7UUFDbkQsSUFBSSxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUM7SUFDeEIsQ0FBQztJQUNELElBQVcsS0FBSztRQUNaLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQztJQUN2QixDQUFDO3VHQTNCUSxpQ0FBaUM7MkZBQWpDLGlDQUFpQyxpSU9uZjlDLDZMQUFtTCx1TFBvQnRLLGdDQUFnQzs7MkZBK2RoQyxpQ0FBaUM7a0JBTDdDLFNBQVM7K0JBQ0kscUJBQXFCOzhCQVcvQixRQUFRO3NCQURQLEtBQUs7dUJBQUMsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFO2dCQVN6QixPQUFPO3NCQUROLEtBQUs7dUJBQUMsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFO2dCQVFkLEtBQUs7c0JBRGYsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgQ29udGVudENoaWxkLCBJbnB1dCwgT25Jbml0LCBUZW1wbGF0ZVJlZiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBQcm9wZXJ0eSwgU2ltcGxlVmFsdWUsIFByb3BlcnR5VHlwZSwgVGVtcGxhdGUsIE51bWJlclRlbXBsYXRlLCBUZW1wbGF0ZUR0bywgT3B0aW9ucywgRXh0cmFjdEdlbmVyaWNPcHRpb25zSXRlbVR5cGUsIEV4dHJhY3RWYWx1ZVR5cGUsIEV4dHJhY3RHZW5lcmljT3B0aW9uc1NlbGVjdGVkVmFsdWVzVHlwZSwgUHJvYmxlbURldGFpbHMsIFJlc291cmNlT2ZEdG8gfSBmcm9tICdAd2VydHp1aS9uZ3gtaGFsLWNsaWVudCc7XHJcbmltcG9ydCB7IFByb3BlcnR5V2l0aE9wdGlvbnMsIFByb3BlcnR5V2l0aEltYWdlIH0gZnJvbSAnLi4vLi4vbW9kZWxzL3NwZWNpYWwtcHJvcGVydGllcydcclxuaW1wb3J0IHsgUHJvcGVydHlUZW1wbGF0ZUNvbnRleHQgfSBmcm9tICcuLi8uLi9tb2RlbHMvdGVtcGxhdGluZyc7XHJcbmltcG9ydCB7IE1lc3NhZ2VTZXJ2aWNlIH0gZnJvbSAncHJpbWVuZy9hcGknO1xyXG5pbXBvcnQgeyBSZXN0V29ybGRDbGllbnRDb2xsZWN0aW9uIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvcmVzdHdvcmxkLWNsaWVudC1jb2xsZWN0aW9uJztcclxuaW1wb3J0IHsgUmVzdFdvcmxkQ2xpZW50IH0gZnJvbSAnLi4vLi4vc2VydmljZXMvcmVzdHdvcmxkLWNsaWVudCc7XHJcblxyXG4vKipcclxuICogRGlzcGxheSB0aGUgdmFsdWUgb2YgYSBmb3JtIGVsZW1lbnQgd2l0aCBhIGxhYmVsIHRoYXQgaXMgYXV0b21hdGljYWxseSBjcmVhdGVkIGZyb20gYSBwcm9wZXJ0eSBpbiBhIGZvcm0gdGVtcGxhdGUuXHJcbiAqIFRoaXMgbWF5IGFsc28gYmUgYSBjb21wbGV4IG9iamVjdCBvciBhIGNvbGxlY3Rpb24gaW4gd2hpY2ggY2FzZSBtdWx0aXBsZSBhbmQgbmVzdGVkIGRpc3BsYXkgZWxlbWVudHMgbWF5IGJlIHJlbmRlcmVkLlxyXG4gKiBJZiB5b3Ugd2FudCB0byBkaXNwbGF5IGp1c3QgdGhlIHZhbHVlIHdpdGhvdXQgYSBsYWJlbCwgdXNlIHtAbGluayBSZXN0V29ybGREaXNwbGF5Q29tcG9uZW50fSBgPHJ3LWRpc3BsYXk+YC5cclxuICogQGV4YW1wbGVcclxuICogPHJ3LWRpc3BsYXktZWxlbWVudCBbcHJvcGVydHldPVwicHJvcGVydHlcIiBbYXBpTmFtZV09XCJhcGlOYW1lXCIgW3ZhbHVlXT1cInZhbHVlXCI+PC9ydy1kaXNwbGF5LWVsZW1lbnQ+XHJcbiAqL1xyXG5AQ29tcG9uZW50KHtcclxuICAgIHNlbGVjdG9yOiAncnctZGlzcGxheS1lbGVtZW50JyxcclxuICAgIHRlbXBsYXRlVXJsOiAnLi9yZXN0d29ybGQtZGlzcGxheS1lbGVtZW50L3Jlc3R3b3JsZC1kaXNwbGF5LWVsZW1lbnQuY29tcG9uZW50Lmh0bWwnLFxyXG4gICAgc3R5bGVVcmw6ICcuL3Jlc3R3b3JsZC1kaXNwbGF5LWVsZW1lbnQvcmVzdHdvcmxkLWRpc3BsYXktZWxlbWVudC5jb21wb25lbnQuY3NzJ1xyXG59KVxyXG5leHBvcnQgY2xhc3MgUmVzdFdvcmxkRGlzcGxheUVsZW1lbnRDb21wb25lbnQ8VFByb3BlcnR5IGV4dGVuZHMgUHJvcGVydHk8U2ltcGxlVmFsdWUsIHN0cmluZywgc3RyaW5nPj4ge1xyXG4gICAgLyoqXHJcbiAgICAgKiBUaGUgcHJvcGVydHkgdG8gZGlzcGxheS5cclxuICAgICAqIEByZXF1aXJlZFxyXG4gICAgICovXHJcbiAgICBASW5wdXQoeyByZXF1aXJlZDogdHJ1ZSB9KVxyXG4gICAgcHJvcGVydHkhOiBUUHJvcGVydHk7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGUgbmFtZSBvZiB0aGUgQVBJIHRvIHVzZSBmb3IgdGhlIHByb3BlcnR5LlxyXG4gICAgICogQHJlcXVpcmVkXHJcbiAgICAgKiBAcmVtYXJrcyBUaGlzIGlzIHRoZSBuYW1lIG9mIHRoZSBBUEkgYXMgZGVmaW5lZCBpbiB0aGUgYFJlc3RXb3JsZENsaWVudENvbGxlY3Rpb25gLlxyXG4gICAgICovXHJcbiAgICBASW5wdXQoeyByZXF1aXJlZDogdHJ1ZSB9KVxyXG4gICAgYXBpTmFtZSE6IHN0cmluZztcclxuXHJcbiAgICBwcml2YXRlIF92YWx1ZT86IEV4dHJhY3RWYWx1ZVR5cGU8VFByb3BlcnR5PiB8IEV4dHJhY3RHZW5lcmljT3B0aW9uc1NlbGVjdGVkVmFsdWVzVHlwZTxUUHJvcGVydHk+W10gfCBFeHRyYWN0R2VuZXJpY09wdGlvbnNTZWxlY3RlZFZhbHVlc1R5cGU8VFByb3BlcnR5PiB8IFJlY29yZDxzdHJpbmcsIFNpbXBsZVZhbHVlPiB8IE1hcDxudW1iZXIsIFJlY29yZDxzdHJpbmcsIFNpbXBsZVZhbHVlPj47XHJcbiAgICAvKipcclxuICAgICAqIFRoZSB2YWx1ZSB0byBkaXNwbGF5LiBJZiBub3Qgc2V0LCB0aGUgdmFsdWUgb2YgdGhlIHByb3BlcnR5IHdpbGwgYmUgdXNlZC5cclxuICAgICovXHJcbiAgICBASW5wdXQoKVxyXG4gICAgcHVibGljIHNldCB2YWx1ZSh2YWx1ZTogRXh0cmFjdFZhbHVlVHlwZTxUUHJvcGVydHk+IHwgRXh0cmFjdEdlbmVyaWNPcHRpb25zU2VsZWN0ZWRWYWx1ZXNUeXBlPFRQcm9wZXJ0eT5bXSB8IEV4dHJhY3RHZW5lcmljT3B0aW9uc1NlbGVjdGVkVmFsdWVzVHlwZTxUUHJvcGVydHk+IHwgUmVjb3JkPHN0cmluZywgU2ltcGxlVmFsdWU+IHwgTWFwPG51bWJlciwgUmVjb3JkPHN0cmluZywgU2ltcGxlVmFsdWU+Pikge1xyXG4gICAgICAgIHRoaXMuX3ZhbHVlID0gdmFsdWU7XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgZ2V0IHZhbHVlKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl92YWx1ZSA/PyB0aGlzLnByb3BlcnR5LnZhbHVlIGFzIEV4dHJhY3RWYWx1ZVR5cGU8VFByb3BlcnR5PjtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZ2V0IFByb3BlcnR5VHlwZSgpIHtcclxuICAgICAgICByZXR1cm4gUHJvcGVydHlUeXBlO1xyXG4gICAgfVxyXG59XHJcbi8qKlxyXG4gKiBEaXNwbGF5cyBhIHZhbHVlIHRoYXQgaXMgYXV0b21hdGljYWxseSBjcmVhdGVkIGZyb20gYSBwcm9wZXJ0eSBpbiBhIGZvcm0gdGVtcGxhdGUuXHJcbiAqIFRoaXMgbWF5IGFsc28gYmUgYSBjb21wbGV4IG9iamVjdCBvciBhIGNvbGxlY3Rpb24gaW4gd2hpY2ggY2FzZSBtdWx0aXBsZSBhbmQgbmVzdGVkIGlucHV0IGVsZW1lbnRzIG1heSBiZSByZW5kZXJlZC5cclxuICogSWYgeW91IGFsc28gd2FudCBhIGxhYmVsLCB1c2Uge0BsaW5rIFJlc3RXb3JsZERpc3BsYXlFbGVtZW50Q29tcG9uZW50fSBgPHJ3LWRpc3BsYXktZWxlbWVudD5gLlxyXG4gKiBZb3UgY2FuIGFsc28gdXNlIG9uZSBvZiB0aGUgZGlmZmVyZW50IFJlc3RXb3JsZERpc3BsYXkuLi4gYDxydy1kaXNwbGF5LS4uLj5gIGVsZW1lbnRzIHRvIHJlbmRlciBhIHNwZWNpZmljIHByb3BlcnR5IHR5cGUsXHJcbiAqIGJ1dCBpdCBpcyBhZHZpc2VkIHRvIGNvbnRyb2wgdGhlIHJlbmRlcmVkIGVsZW1lbnQgdGhyb3VnaCB0aGUgcGFzc2VkIGluIHByb3BlcnR5LlxyXG4gKiBAZXhhbXBsZVxyXG4gKiA8cnctZGlzcGxheSBbcHJvcGVydHldPVwicHJvcGVydHlcIiBbYXBpTmFtZV09XCJhcGlOYW1lXCIgW3ZhbHVlXT1cInZhbHVlXCI+PC9ydy1kaXNwbGF5PlxyXG4gKi9cclxuQENvbXBvbmVudCh7XHJcbiAgICBzZWxlY3RvcjogJ3J3LWRpc3BsYXknLFxyXG4gICAgdGVtcGxhdGVVcmw6ICcuL3Jlc3R3b3JsZC1kaXNwbGF5L3Jlc3R3b3JsZC1kaXNwbGF5LmNvbXBvbmVudC5odG1sJyxcclxuICAgIHN0eWxlVXJsOiAnLi9yZXN0d29ybGQtZGlzcGxheS9yZXN0d29ybGQtZGlzcGxheS5jb21wb25lbnQuY3NzJ1xyXG59KVxyXG5leHBvcnQgY2xhc3MgUmVzdFdvcmxkRGlzcGxheUNvbXBvbmVudDxUUHJvcGVydHkgZXh0ZW5kcyBQcm9wZXJ0eTxTaW1wbGVWYWx1ZSwgc3RyaW5nLCBzdHJpbmc+PiB7XHJcbiAgICAvKipcclxuICAgICAqIFRoZSBwcm9wZXJ0eSB0byBkaXNwbGF5LlxyXG4gICAgICogQHJlcXVpcmVkXHJcbiAgICAgKi9cclxuICAgIEBJbnB1dCh7IHJlcXVpcmVkOiB0cnVlIH0pXHJcbiAgICBwcm9wZXJ0eSE6IFRQcm9wZXJ0eTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoZSBuYW1lIG9mIHRoZSBBUEkgdG8gdXNlIGZvciB0aGUgcHJvcGVydHkuXHJcbiAgICAgKiBAcmVxdWlyZWRcclxuICAgICAqIEByZW1hcmtzIFRoaXMgaXMgdGhlIG5hbWUgb2YgdGhlIEFQSSBhcyBkZWZpbmVkIGluIHRoZSBgUmVzdFdvcmxkQ2xpZW50Q29sbGVjdGlvbmAuXHJcbiAgICAgKi9cclxuICAgIEBJbnB1dCh7IHJlcXVpcmVkOiB0cnVlIH0pXHJcbiAgICBhcGlOYW1lITogc3RyaW5nO1xyXG5cclxuICAgIHByaXZhdGUgX3ZhbHVlPzogRXh0cmFjdFZhbHVlVHlwZTxUUHJvcGVydHk+IHwgRXh0cmFjdEdlbmVyaWNPcHRpb25zU2VsZWN0ZWRWYWx1ZXNUeXBlPFRQcm9wZXJ0eT5bXSB8IEV4dHJhY3RHZW5lcmljT3B0aW9uc1NlbGVjdGVkVmFsdWVzVHlwZTxUUHJvcGVydHk+IHwgUmVjb3JkPHN0cmluZywgU2ltcGxlVmFsdWU+IHwgTWFwPG51bWJlciwgUmVjb3JkPHN0cmluZywgU2ltcGxlVmFsdWU+PjtcclxuICAgIC8qKlxyXG4gICAgICogVGhlIHZhbHVlIHRvIGRpc3BsYXkuIElmIG5vdCBzZXQsIHRoZSB2YWx1ZSBvZiB0aGUgcHJvcGVydHkgd2lsbCBiZSB1c2VkLlxyXG4gICAgKi9cclxuICAgIEBJbnB1dCgpXHJcbiAgICBwdWJsaWMgc2V0IHZhbHVlKHZhbHVlOiBFeHRyYWN0VmFsdWVUeXBlPFRQcm9wZXJ0eT4gfCBFeHRyYWN0R2VuZXJpY09wdGlvbnNTZWxlY3RlZFZhbHVlc1R5cGU8VFByb3BlcnR5PltdIHwgRXh0cmFjdEdlbmVyaWNPcHRpb25zU2VsZWN0ZWRWYWx1ZXNUeXBlPFRQcm9wZXJ0eT4gfCBSZWNvcmQ8c3RyaW5nLCBTaW1wbGVWYWx1ZT4gfCBNYXA8bnVtYmVyLCBSZWNvcmQ8c3RyaW5nLCBTaW1wbGVWYWx1ZT4+IHwgdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgdGhpcy5fdmFsdWUgPSB2YWx1ZTtcclxuICAgIH1cclxuICAgIHB1YmxpYyBnZXQgdmFsdWUoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX3ZhbHVlID8/IHRoaXMucHJvcGVydHkudmFsdWUgYXMgRXh0cmFjdFZhbHVlVHlwZTxUUHJvcGVydHk+O1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBnZXQgUHJvcGVydHlUeXBlKCkge1xyXG4gICAgICAgIHJldHVybiBQcm9wZXJ0eVR5cGU7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdldCBQcm9wZXJ0eVdpdGhPcHRpb25zKCkge1xyXG4gICAgICAgIHJldHVybiBQcm9wZXJ0eVdpdGhPcHRpb25zPFNpbXBsZVZhbHVlLCBzdHJpbmcsIHN0cmluZz47XHJcbiAgICB9XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBEaXNwbGF5cyB0aGUgdmFsdWUgb2YgYSBjb2xsZWN0aW9uIHRoYXQgaXMgYXV0b21hdGljYWxseSBjcmVhdGVkIGZyb20gdGhlIGdpdmVuIHByb3BlcnR5LlxyXG4gKiBUaGUgZWxlbWVudHMgYW5kIGNhbiBhbHNvIGJlIG5lc3RlZC5cclxuICogQHJlbWFya3MgSXQgaXMgYWR2aXNlZCB0byB1c2Uge0BsaW5rIFJlc3RXb3JsZERpc3BsYXlDb21wb25lbnR9IGA8cnctZGlzcGxheT5gIGFuZCBjb250cm9sIHRoZSByZW5kZXJlZCBlbGVtZW50cyB3aXRoIHRoZSBwYXNzZWQgaW4gcHJvcGVydHlcclxuICogaW5zdGVhZCBvZiB1c2luZyB0aGlzIGNvbXBvbmVudCBkaXJlY3RseS5cclxuICogQGV4YW1wbGVcclxuICogPHJ3LWRpc3BsYXktY29sbGVjdGlvbiBbcHJvcGVydHldPVwicHJvcGVydHlcIiBbYXBpTmFtZV09XCJhcGlOYW1lXCIgW3ZhbHVlc109XCJ2YWx1ZXNcIj48L3J3LWRpc3BsYXktY29sbGVjdGlvbj5cclxuICovXHJcbkBDb21wb25lbnQoe1xyXG4gICAgc2VsZWN0b3I6ICdydy1kaXNwbGF5LWNvbGxlY3Rpb24nLFxyXG4gICAgdGVtcGxhdGVVcmw6ICcuL3Jlc3R3b3JsZC1kaXNwbGF5LWNvbGxlY3Rpb24vcmVzdHdvcmxkLWRpc3BsYXktY29sbGVjdGlvbi5jb21wb25lbnQuaHRtbCcsXHJcbiAgICBzdHlsZVVybDogJy4vcmVzdHdvcmxkLWRpc3BsYXktY29sbGVjdGlvbi9yZXN0d29ybGQtZGlzcGxheS1jb2xsZWN0aW9uLmNvbXBvbmVudC5jc3MnXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBSZXN0V29ybGREaXNwbGF5Q29sbGVjdGlvbkNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XHJcbiAgICAvKipcclxuICAgICAqIFRoZSBwcm9wZXJ0eSB0byBkaXNwbGF5LlxyXG4gICAgICogQHJlcXVpcmVkXHJcbiAgICAgKi9cclxuICAgIEBJbnB1dCh7IHJlcXVpcmVkOiB0cnVlIH0pXHJcbiAgICBwcm9wZXJ0eSE6IFByb3BlcnR5ICYgeyBfdGVtcGxhdGVzOiB7IGRlZmF1bHQ6IFRlbXBsYXRlIH0gfTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoZSBuYW1lIG9mIHRoZSBBUEkgdG8gdXNlIGZvciB0aGUgcHJvcGVydHkuXHJcbiAgICAgKiBAcmVxdWlyZWRcclxuICAgICAqIEByZW1hcmtzIFRoaXMgaXMgdGhlIG5hbWUgb2YgdGhlIEFQSSBhcyBkZWZpbmVkIGluIHRoZSBgUmVzdFdvcmxkQ2xpZW50Q29sbGVjdGlvbmAuXHJcbiAgICAgKi9cclxuICAgIEBJbnB1dCh7IHJlcXVpcmVkOiB0cnVlIH0pXHJcbiAgICBhcGlOYW1lITogc3RyaW5nO1xyXG5cclxuICAgIHByaXZhdGUgX3ZhbHVlcz86IGFueVtdO1xyXG4gICAgLyoqXHJcbiAgICAgKiBUaGUgdmFsdWUgdG8gZGlzcGxheS4gSWYgbm90IHNldCwgdGhlIHZhbHVlIG9mIHRoZSBwcm9wZXJ0eSB3aWxsIGJlIHVzZWQuXHJcbiAgICAqL1xyXG4gICAgQElucHV0KClcclxuICAgIHB1YmxpYyBzZXQgdmFsdWVzKHZhbHVlczogYW55W10gfCBQYXJ0aWFsPFJlY29yZDxzdHJpbmcsIGFueT4+IHwgdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgdGhpcy5fdmFsdWVzID0gUmVzdFdvcmxkRGlzcGxheUNvbGxlY3Rpb25Db21wb25lbnQudG9BcnJheSh2YWx1ZXMpO1xyXG4gICAgfVxyXG4gICAgcHVibGljIGdldCB2YWx1ZXMoKTogYW55W10gfCB1bmRlZmluZWQge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl92YWx1ZXM7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBfdGVtcGxhdGVzOiBOdW1iZXJUZW1wbGF0ZVtdID0gW107XHJcbiAgICBwdWJsaWMgZ2V0IHRlbXBsYXRlcygpOiBOdW1iZXJUZW1wbGF0ZVtdIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fdGVtcGxhdGVzO1xyXG4gICAgfVxyXG5cclxuICAgIG5nT25Jbml0KCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuX3RlbXBsYXRlcyA9IHRoaXMuX3ZhbHVlcyA/XHJcbiAgICAgICAgICAgIEFycmF5LmZyb20oUmVzdFdvcmxkRGlzcGxheUNvbGxlY3Rpb25Db21wb25lbnQubWFwKHRoaXMuX3ZhbHVlcy5lbnRyaWVzKCksIGVudHJ5ID0+IChuZXcgTnVtYmVyVGVtcGxhdGUoeyAuLi4odGhpcy5wcm9wZXJ0eS5fdGVtcGxhdGVzLmRlZmF1bHQgYXMgVGVtcGxhdGVEdG8pLCB0aXRsZTogZW50cnlbMF0udG9TdHJpbmcoKSB9KSkpKSA6XHJcbiAgICAgICAgICAgIFJlc3RXb3JsZERpc3BsYXlDb2xsZWN0aW9uQ29tcG9uZW50LmdldENvbGxlY3Rpb25FbnRyeVRlbXBsYXRlcyh0aGlzLnByb3BlcnR5KTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIHN0YXRpYyAqIG1hcDxUMSwgVDI+KGl0ZXJhYmxlOiBJdGVyYWJsZUl0ZXJhdG9yPFQxPiwgY2FsbGJhY2s6ICh2YWx1ZTogVDEpID0+IFQyKSB7XHJcbiAgICAgICAgZm9yIChsZXQgeCBvZiBpdGVyYWJsZSkge1xyXG4gICAgICAgICAgICB5aWVsZCBjYWxsYmFjayh4KTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBzdGF0aWMgdG9BcnJheShhcnJheU9yRGljdGlvbmFyeTogYW55W10gfCBQYXJ0aWFsPFJlY29yZDxzdHJpbmcsIGFueT4+IHwgdW5kZWZpbmVkKTogYW55W10gfCB1bmRlZmluZWQge1xyXG4gICAgICAgIGlmICghYXJyYXlPckRpY3Rpb25hcnkpXHJcbiAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XHJcblxyXG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KGFycmF5T3JEaWN0aW9uYXJ5KSlcclxuICAgICAgICAgICAgcmV0dXJuIGFycmF5T3JEaWN0aW9uYXJ5O1xyXG5cclxuICAgICAgICByZXR1cm4gT2JqZWN0LmVudHJpZXMoYXJyYXlPckRpY3Rpb25hcnkpLm1hcCgoW2tleSwgdmFsdWVdKSA9PiAoeyBrZXksIHZhbHVlIH0pKTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIHN0YXRpYyBnZXRDb2xsZWN0aW9uRW50cnlUZW1wbGF0ZXMocHJvcGVydHk/OiBQcm9wZXJ0eSk6IE51bWJlclRlbXBsYXRlW10ge1xyXG4gICAgICAgIGlmICghcHJvcGVydHkpXHJcbiAgICAgICAgICAgIHJldHVybiBbXTtcclxuXHJcbiAgICAgICAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKHByb3BlcnR5Ll90ZW1wbGF0ZXMpXHJcbiAgICAgICAgICAgIC5maWx0ZXIoKFtrZXksIHZhbHVlXSkgPT4gTnVtYmVyLmlzSW50ZWdlcihOdW1iZXIucGFyc2VJbnQoa2V5KSkgJiYgTnVtYmVyLmlzSW50ZWdlcihOdW1iZXIucGFyc2VJbnQodmFsdWU/LnRpdGxlID8/IFwiXCIpKSlcclxuICAgICAgICAgICAgLm1hcCgoWywgdmFsdWVdKSA9PiBuZXcgTnVtYmVyVGVtcGxhdGUodmFsdWUgYXMgVGVtcGxhdGVEdG8pKTtcclxuICAgIH1cclxufVxyXG5cclxuLyoqXHJcbiAqIERpc3BsYXlzIHRoZSB2YWx1ZSBvZiBhIGRyb3Bkb3duIHRoYXQgaXMgYXV0b21hdGljYWxseSBjcmVhdGVkIGZyb20gdGhlIGdpdmVuIHByb3BlcnR5LlxyXG4gKiBJZiBzZXQgdGhlIGRyb3Bkb3duIHdpbGwgdXNlIHRoZSBgaW5saW5lYCBwcm9wZXJ0eSBvZiB0aGUgb3B0aW9ucyB0byByZW5kZXIgdGhlIGBzZWxlY3RlZFZhbHVlc2AgT3RoZXJ3aXNlIGl0IHdpbGwganVzdCByZW5kZXIgdGhlIHZhbHVlcywgYnV0IG5vIHByb21wdCBmb3IgdGhlbS5cclxuICogQHJlbWFya3MgSXQgaXMgYWR2aXNlZCB0byB1c2Uge0BsaW5rIFJlc3RXb3JsZERpc3BsYXlDb21wb25lbnR9IGA8cnctZGlzcGxheT5gIGFuZCBjb250cm9sIHRoZSByZW5kZXJlZCBlbGVtZW50cyB3aXRoIHRoZSBwYXNzZWQgaW4gcHJvcGVydHlcclxuICogaW5zdGVhZCBvZiB1c2luZyB0aGlzIGNvbXBvbmVudCBkaXJlY3RseS5cclxuICogQGV4YW1wbGVcclxuICogPHJ3LWRpc3BsYXktZHJvcGRvd24gW3Byb3BlcnR5XT1cInByb3BlcnR5XCIgW2FwaU5hbWVdPVwiYXBpTmFtZVwiIFtzZWxlY3RlZFZhbHVlc109XCJzZWxlY3RlZFZhbHVlc1wiPjwvcnctZGlzcGxheS1kcm9wZG93bj5cclxuICovXHJcbkBDb21wb25lbnQoe1xyXG4gICAgc2VsZWN0b3I6ICdydy1kaXNwbGF5LWRyb3Bkb3duJyxcclxuICAgIHRlbXBsYXRlVXJsOiAnLi9yZXN0d29ybGQtZGlzcGxheS1kcm9wZG93bi9yZXN0d29ybGQtZGlzcGxheS1kcm9wZG93bi5jb21wb25lbnQuaHRtbCcsXHJcbiAgICBzdHlsZVVybDogJy4vcmVzdHdvcmxkLWRpc3BsYXktZHJvcGRvd24vcmVzdHdvcmxkLWRpc3BsYXktZHJvcGRvd24uY29tcG9uZW50LmNzcydcclxufSlcclxuZXhwb3J0IGNsYXNzIFJlc3RXb3JsZERpc3BsYXlEcm9wZG93bkNvbXBvbmVudDxUUHJvcGVydHkgZXh0ZW5kcyBQcm9wZXJ0eTxTaW1wbGVWYWx1ZSwgc3RyaW5nLCBzdHJpbmc+ICYgeyBvcHRpb25zOiBPcHRpb25zPFNpbXBsZVZhbHVlLCBzdHJpbmcsIHN0cmluZz4gfSwgVE9wdGlvbnNJdGVtIGV4dGVuZHMgRXh0cmFjdEdlbmVyaWNPcHRpb25zSXRlbVR5cGU8VFByb3BlcnR5PiA9IEV4dHJhY3RHZW5lcmljT3B0aW9uc0l0ZW1UeXBlPFRQcm9wZXJ0eT4+IGltcGxlbWVudHMgT25Jbml0IHtcclxuICAgIC8qKlxyXG4gICAgICogVGhlIHByb3BlcnR5IHRvIGRpc3BsYXkuXHJcbiAgICAgKiBAcmVxdWlyZWRcclxuICAgICAqL1xyXG4gICAgQElucHV0KHsgcmVxdWlyZWQ6IHRydWUgfSlcclxuICAgIHByb3BlcnR5ITogVFByb3BlcnR5O1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhlIG5hbWUgb2YgdGhlIEFQSSB0byB1c2UgZm9yIHRoZSBwcm9wZXJ0eS5cclxuICAgICAqIEByZXF1aXJlZFxyXG4gICAgICogQHJlbWFya3MgVGhpcyBpcyB0aGUgbmFtZSBvZiB0aGUgQVBJIGFzIGRlZmluZWQgaW4gdGhlIGBSZXN0V29ybGRDbGllbnRDb2xsZWN0aW9uYC5cclxuICAgICAqL1xyXG4gICAgQElucHV0KHsgcmVxdWlyZWQ6IHRydWUgfSlcclxuICAgIGFwaU5hbWUhOiBzdHJpbmc7XHJcblxyXG4gICAgcHJpdmF0ZSBfc2VsZWN0ZWRWYWx1ZXM/OiBFeHRyYWN0R2VuZXJpY09wdGlvbnNTZWxlY3RlZFZhbHVlc1R5cGU8VFByb3BlcnR5PltdO1xyXG4gICAgLyoqXHJcbiAgICAgKiBUaGUgdmFsdWVzIHRvIGRpc3BsYXkuIElmIG5vdCBzZXQsIHRoZSB2YWx1ZXMgb2YgdGhlIHByb3BlcnR5IG9wdGlvbnMgd2lsbCBiZSB1c2VkLlxyXG4gICAgKi9cclxuICAgIEBJbnB1dCgpXHJcbiAgICBwdWJsaWMgc2V0IHNlbGVjdGVkVmFsdWVzKHZhbHVlOiBFeHRyYWN0R2VuZXJpY09wdGlvbnNTZWxlY3RlZFZhbHVlc1R5cGU8VFByb3BlcnR5PltdIHwgRXh0cmFjdEdlbmVyaWNPcHRpb25zU2VsZWN0ZWRWYWx1ZXNUeXBlPFRQcm9wZXJ0eT4gfCB1bmRlZmluZWQpIHtcclxuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpXHJcbiAgICAgICAgICAgIHRoaXMuX3NlbGVjdGVkVmFsdWVzID0gdmFsdWUgYXMgRXh0cmFjdEdlbmVyaWNPcHRpb25zU2VsZWN0ZWRWYWx1ZXNUeXBlPFRQcm9wZXJ0eT5bXTtcclxuICAgICAgICBlbHNlIGlmICh2YWx1ZSAhPT0gdW5kZWZpbmVkICYmIHZhbHVlICE9PSBudWxsKVxyXG4gICAgICAgICAgICB0aGlzLl9zZWxlY3RlZFZhbHVlcyA9IFt2YWx1ZV07XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdldCBzZWxlY3RlZFZhbHVlcygpOiBFeHRyYWN0R2VuZXJpY09wdGlvbnNTZWxlY3RlZFZhbHVlc1R5cGU8VFByb3BlcnR5PltdIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fc2VsZWN0ZWRWYWx1ZXMgPz8gKHRoaXMucHJvcGVydHkub3B0aW9ucy5zZWxlY3RlZFZhbHVlcyBhcyB1bmtub3duIGFzIEV4dHJhY3RHZW5lcmljT3B0aW9uc1NlbGVjdGVkVmFsdWVzVHlwZTxUUHJvcGVydHk+W10gfCB1bmRlZmluZWQpID8/IFtdO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgX2lubGluZTogVE9wdGlvbnNJdGVtW10gPSBbXTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIEEgZnVuY3Rpb24gdGhhdCByZXR1cm5zIHRoZSBsYWJlbCBmb3IgdGhlIGdpdmVuIGl0ZW0uXHJcbiAgICAgKiBUaGUgZGVmYXVsdCByZXR1cm5zIHRoZSBwcm9tcHQgYW5kIG9wdGlvbmFsbHkgdGhlIHZhbHVlIGluIGJyYWNrZXRzLlxyXG4gICAgICogVGhlIHZhbHVlIGluIGJyYWNrZXRzIHdpbGwgb25seSBiZSBkaXNwbGF5ZWQgaWYgdGhlIGBjb2xzYCBmaWVsZCBvZiB0aGUgcHJvcGVydHkgaXMgdW5kZWZpbmVkIG9yIGdyZWF0ZXIgdGhhbiAxLlxyXG4gICAgICogT3ZlcndyaXRlIHRoaXMgZnVuY3Rpb24gdG8gY2hhbmdlIHRoZSBsYWJlbC5cclxuICAgICAqIEBwYXJhbSBpdGVtIFRoZSBpdGVtIHRvIGdldCB0aGUgbGFiZWwgZm9yLlxyXG4gICAgICovXHJcbiAgICBASW5wdXQoKVxyXG4gICAgZ2V0TGFiZWw6IChpdGVtOiBUT3B0aW9uc0l0ZW0pID0+IHN0cmluZyA9IHRoaXMuZ2V0TGFiZWxJbnRlcm5hbDtcclxuXHJcbiAgICAvKipcclxuICAgICAqIEEgZnVuY3Rpb24gdGhhdCByZXR1cm5zIHRoZSB0b29sdGlwIGZvciB0aGUgZ2l2ZW4gaXRlbS5cclxuICAgICAqIFRoZSBkZWZhdWx0IHJldHVybnMgYWxsIHByb3BlcnRpZXMgb2YgdGhlIGl0ZW0gZXhjZXB0IHRoZSBvbmVzIHRoYXQgc3RhcnQgd2l0aCBhbiB1bmRlcnNjb3JlIG9yIHRoZSBvbmVzIHRoYXQgYXJlIGluIHRoZSBsaXN0IG9mIGRlZmF1bHQgcHJvcGVydGllcyB0byBleGNsdWRlLlxyXG4gICAgICogVGhlIGRlZmF1bHQgcHJvcGVydGllcyB0byBleGNsdWRlIGFyZTogY3JlYXRlZEF0LCBjcmVhdGVkQnksIGxhc3RDaGFuZ2VkQXQsIGxhc3RDaGFuZ2VkQnksIHRpbWVzdGFtcCwgcHJvbXB0RmllbGQsIHZhbHVlRmllbGQuXHJcbiAgICAgKiBPdmVyd3JpdGUgdGhpcyBmdW5jdGlvbiB0byBjaGFuZ2UgdGhlIHRvb2x0aXAuXHJcbiAgICAgKiBAcGFyYW0gaXRlbSBUaGUgaXRlbSB0byBnZXQgdGhlIGxhYmVsIGZvci5cclxuICAgICAqL1xyXG4gICAgQElucHV0KClcclxuICAgIGdldFRvb2x0aXA6IChpdGVtOiBUT3B0aW9uc0l0ZW0pID0+IHN0cmluZyA9IHRoaXMuZ2V0VG9vbHRpcEludGVybmFsO1xyXG5cclxuICAgIEBDb250ZW50Q2hpbGQoJ2lucHV0T3B0aW9ucycsIHsgc3RhdGljOiBmYWxzZSB9KVxyXG4gICAgaW5wdXRPcHRpb25zUmVmPzogVGVtcGxhdGVSZWY8UHJvcGVydHlUZW1wbGF0ZUNvbnRleHQ+O1xyXG5cclxuICAgIHB1YmxpYyBnZXQgdmFsdWVGaWVsZCgpOiBzdHJpbmcge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnByb3BlcnR5Lm9wdGlvbnMudmFsdWVGaWVsZCA/PyBcInZhbHVlXCI7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdldCBwcm9tcHRGaWVsZCgpOiBzdHJpbmcge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnByb3BlcnR5Lm9wdGlvbnMucHJvbXB0RmllbGQgPz8gXCJwcm9tcHRcIjtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdHJ1Y3RvcihcclxuICAgICAgICBwcml2YXRlIHJlYWRvbmx5IF9tZXNzYWdlU2VydmljZTogTWVzc2FnZVNlcnZpY2UsXHJcbiAgICAgICAgcHJpdmF0ZSByZWFkb25seSBfY2xpZW50czogUmVzdFdvcmxkQ2xpZW50Q29sbGVjdGlvbixcclxuICAgICkge1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIG5nT25Jbml0KCk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgICAgIGlmICh0aGlzLnByb3BlcnR5Lm9wdGlvbnM/LmlubGluZSAmJiB0aGlzLnByb3BlcnR5Lm9wdGlvbnMuaW5saW5lLmxlbmd0aCA+IDApXHJcbiAgICAgICAgICAgIHRoaXMuX2lubGluZSA9IEFycmF5LmZyb20odGhpcy5wcm9wZXJ0eS5vcHRpb25zLmlubGluZSkgYXMgVE9wdGlvbnNJdGVtW107XHJcblxyXG4gICAgICAgIGF3YWl0IHRoaXMuc2V0SW5pdGlhbFNlbGVjdGVkT3B0aW9uc0VsZW1lbnRGb3JQcm9wZXJ0eSgpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBnZXRPcHRpb25JdGVtKHZhbHVlOiBFeHRyYWN0R2VuZXJpY09wdGlvbnNTZWxlY3RlZFZhbHVlc1R5cGU8VFByb3BlcnR5Pik6IFRPcHRpb25zSXRlbSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2lubGluZS5maW5kKG8gPT4gdGhpcy5nZXRWYWx1ZShvIGFzIFRPcHRpb25zSXRlbSkgPT09IHZhbHVlKSBhcyBUT3B0aW9uc0l0ZW0gPz8gdGhpcy5jcmVhdGVPcHRpb25zSXRlbSh2YWx1ZSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBjcmVhdGVPcHRpb25zSXRlbSh2YWx1ZTogRXh0cmFjdEdlbmVyaWNPcHRpb25zU2VsZWN0ZWRWYWx1ZXNUeXBlPFRQcm9wZXJ0eT4pOiBUT3B0aW9uc0l0ZW0ge1xyXG4gICAgICAgIHJldHVybiB7IFt0aGlzLnZhbHVlRmllbGRdOiB2YWx1ZSwgW3RoaXMucHJvbXB0RmllbGRdOiBcIlwiIH0gYXMgVE9wdGlvbnNJdGVtO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBnZXRWYWx1ZShpdGVtOiBUT3B0aW9uc0l0ZW0pOiBFeHRyYWN0R2VuZXJpY09wdGlvbnNTZWxlY3RlZFZhbHVlc1R5cGU8VFByb3BlcnR5PiB7XHJcbiAgICAgICAgaWYgKGl0ZW0gPT09IHVuZGVmaW5lZCB8fCBpdGVtID09PSBudWxsIHx8ICFpdGVtLmhhc093blByb3BlcnR5KHRoaXMudmFsdWVGaWVsZCkpXHJcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgVGhlIGl0ZW0gZG9lcyBub3QgaGF2ZSBhIHByb3BlcnR5ICR7dGhpcy52YWx1ZUZpZWxkfS5gKTtcclxuXHJcbiAgICAgICAgcmV0dXJuIGl0ZW1bdGhpcy52YWx1ZUZpZWxkIGFzIGtleW9mIFRPcHRpb25zSXRlbV0gYXMgRXh0cmFjdEdlbmVyaWNPcHRpb25zU2VsZWN0ZWRWYWx1ZXNUeXBlPFRQcm9wZXJ0eT47XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdldFByb21wdChpdGVtOiBUT3B0aW9uc0l0ZW0pOiBzdHJpbmcge1xyXG4gICAgICAgIGlmIChpdGVtID09PSB1bmRlZmluZWQgfHwgaXRlbSA9PT0gbnVsbCB8fCAhaXRlbS5oYXNPd25Qcm9wZXJ0eSh0aGlzLnByb21wdEZpZWxkKSlcclxuICAgICAgICAgICAgcmV0dXJuIFwiXCI7XHJcblxyXG4gICAgICAgIHJldHVybiBpdGVtW3RoaXMucHJvbXB0RmllbGQgYXMga2V5b2YgVE9wdGlvbnNJdGVtXSBhcyBzdHJpbmc7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdldExhYmVsSW50ZXJuYWwoaXRlbTogVE9wdGlvbnNJdGVtKTogc3RyaW5nIHtcclxuICAgICAgICBpZiAoaXRlbSA9PT0gdW5kZWZpbmVkIHx8IGl0ZW0gPT09IG51bGwpXHJcbiAgICAgICAgICAgIHJldHVybiBcIlwiO1xyXG5cclxuICAgICAgICBjb25zdCBwcm9tcHQgPSB0aGlzLmdldFByb21wdChpdGVtKTtcclxuICAgICAgICBjb25zdCB2YWx1ZSA9IHRoaXMuZ2V0VmFsdWUoaXRlbSk7XHJcblxyXG4gICAgICAgIGxldCBsYWJlbCA9IHByb21wdDtcclxuICAgICAgICBpZiAobGFiZWwgPT09IHVuZGVmaW5lZCB8fCBsYWJlbCA9PT0gbnVsbCB8fCBsYWJlbCA9PT0gXCJcIilcclxuICAgICAgICAgICAgbGFiZWwgPSAodmFsdWU/LnRvU3RyaW5nKCkgPz8gXCJcIik7XHJcbiAgICAgICAgZWxzZSBpZiAoKHRoaXMucHJvcGVydHkuY29scyA9PT0gdW5kZWZpbmVkIHx8IHRoaXMucHJvcGVydHkuY29scyA+IDEpICYmIHByb21wdD8udG9Mb3dlckNhc2UoKSAhPT0gdmFsdWU/LnRvU3RyaW5nKCkudG9Mb3dlckNhc2UoKSlcclxuICAgICAgICAgICAgbGFiZWwgKz0gYCAoJHt2YWx1ZX0pYDtcclxuXHJcbiAgICAgICAgcmV0dXJuIGxhYmVsO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgZ2V0VG9vbHRpcEludGVybmFsKGl0ZW06IFRPcHRpb25zSXRlbSk6IHN0cmluZyB7XHJcbiAgICAgICAgaWYgKGl0ZW0gPT09IHVuZGVmaW5lZCB8fCBpdGVtID09PSBudWxsKVxyXG4gICAgICAgICAgICByZXR1cm4gXCJcIjtcclxuXHJcbiAgICAgICAgY29uc3QgdG9vbHRpcCA9IE9iamVjdC5lbnRyaWVzKGl0ZW0pXHJcbiAgICAgICAgICAgIC5maWx0ZXIoKFtrZXldKSA9PiAhKGtleS5zdGFydHNXaXRoKCdfJykgfHwgWydjcmVhdGVkQXQnLCAnY3JlYXRlZEJ5JywgJ2xhc3RDaGFuZ2VkQXQnLCAnbGFzdENoYW5nZWRCeScsICd0aW1lc3RhbXAnLCB0aGlzLnByb21wdEZpZWxkLCB0aGlzLnZhbHVlRmllbGRdLmluY2x1ZGVzKGtleSkpKVxyXG4gICAgICAgICAgICAucmVkdWNlKChwcmV2LCBba2V5LCB2YWx1ZV0sIGluZGV4KSA9PiBgJHtwcmV2fSR7aW5kZXggPT09IDAgPyAnJyA6ICdcXG4nfSR7a2V5fTogJHtSZXN0V29ybGREaXNwbGF5RHJvcGRvd25Db21wb25lbnQuanNvblN0cmluZ2lmeVdpdGhFbGlwc2lzKHZhbHVlKX1gLCAnJyk7XHJcblxyXG4gICAgICAgIHJldHVybiB0b29sdGlwO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgYXN5bmMgc2V0SW5pdGlhbFNlbGVjdGVkT3B0aW9uc0VsZW1lbnRGb3JQcm9wZXJ0eSgpOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgICAgICBjb25zdCBvcHRpb25zID0gdGhpcy5wcm9wZXJ0eS5vcHRpb25zO1xyXG5cclxuICAgICAgICBpZiAoIW9wdGlvbnMubGluaz8uaHJlZiB8fCAhdGhpcy5zZWxlY3RlZFZhbHVlcyB8fCB0aGlzLnNlbGVjdGVkVmFsdWVzLmxlbmd0aCA9PT0gMCB8fCB0aGlzLnNlbGVjdGVkVmFsdWVzLmV2ZXJ5KHYgPT4gdGhpcy5faW5saW5lLnNvbWUoaSA9PiB0aGlzLmdldFZhbHVlKGkgYXMgVE9wdGlvbnNJdGVtKSA9PT0gdikgPz8gZmFsc2UpKVxyXG4gICAgICAgICAgICByZXR1cm47XHJcblxyXG4gICAgICAgIGNvbnN0IGZpbHRlciA9IGAke29wdGlvbnMudmFsdWVGaWVsZH0gaW4gKCR7dGhpcy5zZWxlY3RlZFZhbHVlc30pYDtcclxuICAgICAgICBhd2FpdCB0aGlzLlNldElubGluZU9wdGlvbnNGcm9tRmlsdGVyKGZpbHRlcik7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBhc3luYyBTZXRJbmxpbmVPcHRpb25zRnJvbUZpbHRlcihmaWx0ZXI6IHN0cmluZykge1xyXG4gICAgICAgIGNvbnN0IG9wdGlvbnMgPSB0aGlzLnByb3BlcnR5Lm9wdGlvbnM7XHJcbiAgICAgICAgaWYgKCFvcHRpb25zLmxpbms/LmhyZWYpXHJcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignVGhlIHByb3BlcnR5IGRvZXMgbm90IGhhdmUgYSBsaW5rIGhyZWYuJyk7XHJcblxyXG4gICAgICAgIGNvbnN0IHRlbXBsYXRlZFVyaSA9IG9wdGlvbnMubGluay5ocmVmO1xyXG4gICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5nZXRDbGllbnQoKS5nZXRMaXN0QnlVcmk8VE9wdGlvbnNJdGVtPih0ZW1wbGF0ZWRVcmksIHsgJGZpbHRlcjogZmlsdGVyLCAkdG9wOiAxMCB9KTtcclxuICAgICAgICBpZiAoIXJlc3BvbnNlLm9rIHx8IFByb2JsZW1EZXRhaWxzLmlzUHJvYmxlbURldGFpbHMocmVzcG9uc2UuYm9keSkgfHwgIXJlc3BvbnNlLmJvZHkpIHtcclxuICAgICAgICAgICAgY29uc3QgbWVzc2FnZSA9IGBBbiBlcnJvciBvY2N1cnJlZCB3aGlsZSBnZXR0aW5nIHRoZSBpbml0aWFsIHNlbGVjdGVkIGl0ZW1zIGZvciB0aGUgcHJvcGVydHkgJHt0aGlzLnByb3BlcnR5Lm5hbWV9LmA7XHJcbiAgICAgICAgICAgIHRoaXMuX21lc3NhZ2VTZXJ2aWNlLmFkZCh7IHNldmVyaXR5OiAnZXJyb3InLCBzdW1tYXJ5OiAnRXJyb3InLCBkZXRhaWw6IG1lc3NhZ2UsIGRhdGE6IHJlc3BvbnNlLCBzdGlja3k6IHRydWUgfSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBjb25zdCBpdGVtcyA9IHJlc3BvbnNlLmJvZHkhLl9lbWJlZGRlZC5pdGVtcyBhcyBSZXNvdXJjZU9mRHRvPFRPcHRpb25zSXRlbT5bXTtcclxuICAgICAgICBjb25zdCBuZXdJdGVtcyA9IHRoaXMuY29tYmluZUlubGluZVdpdGhTZWxlY3RlZChpdGVtcyk7XHJcbiAgICAgICAgdGhpcy5faW5saW5lID0gbmV3SXRlbXM7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBjb21iaW5lSW5saW5lV2l0aFNlbGVjdGVkKGl0ZW1zOiBSZXNvdXJjZU9mRHRvPFRPcHRpb25zSXRlbT5bXSk6IFRPcHRpb25zSXRlbVtdIHtcclxuICAgICAgICBjb25zdCBvbGRJbmxpbmUgPSB0aGlzLl9pbmxpbmUgYXMgUmVzb3VyY2VPZkR0bzxUT3B0aW9uc0l0ZW0+W107XHJcbiAgICAgICAgaWYgKCFvbGRJbmxpbmUgfHwgb2xkSW5saW5lLmxlbmd0aCA9PT0gMClcclxuICAgICAgICAgICAgcmV0dXJuIGl0ZW1zO1xyXG5cclxuICAgICAgICBjb25zdCBpdGVtc1RvS2VlcCA9IG9sZElubGluZS5maWx0ZXIoaSA9PiB0aGlzLnNlbGVjdGVkVmFsdWVzLmluY2x1ZGVzKHRoaXMuZ2V0VmFsdWUoaSBhcyBUT3B0aW9uc0l0ZW0pKSk7XHJcbiAgICAgICAgY29uc3QgbmV3SXRlbXMgPSBpdGVtcy5jb25jYXQoaXRlbXNUb0tlZXAuZmlsdGVyKGkgPT4gIWl0ZW1zLmluY2x1ZGVzKGkpKSk7XHJcblxyXG4gICAgICAgIHJldHVybiBuZXdJdGVtcztcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGdldENsaWVudCgpOiBSZXN0V29ybGRDbGllbnQge1xyXG4gICAgICAgIGlmICghdGhpcy5hcGlOYW1lKVxyXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0Nhbm5vdCBnZXQgYSBjbGllbnQsIGJlY2F1c2UgdGhlIGFwaU5hbWUgaXMgbm90IHNldC4nKTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2NsaWVudHMuZ2V0Q2xpZW50KHRoaXMuYXBpTmFtZSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBzdGF0aWMganNvblN0cmluZ2lmeVdpdGhFbGlwc2lzKHZhbHVlOiB1bmtub3duKSB7XHJcbiAgICAgICAgY29uc3QgbWF4TGVuZ3RoID0gMjAwO1xyXG4gICAgICAgIGNvbnN0IGVuZCA9IDEwO1xyXG4gICAgICAgIGNvbnN0IHN0YXJ0ID0gbWF4TGVuZ3RoIC0gZW5kIC0gMjtcclxuICAgICAgICBjb25zdCBqc29uID0gSlNPTi5zdHJpbmdpZnkodmFsdWUpO1xyXG4gICAgICAgIGNvbnN0IHNob3J0ZW5lZCA9IGpzb24ubGVuZ3RoID4gbWF4TGVuZ3RoID8ganNvbi5zdWJzdHJpbmcoMCwgc3RhcnQpICsgJ+KApicgKyBqc29uLnN1YnN0cmluZyhqc29uLmxlbmd0aCAtIGVuZCkgOiBqc29uO1xyXG5cclxuICAgICAgICByZXR1cm4gc2hvcnRlbmVkO1xyXG4gICAgfVxyXG59XHJcblxyXG4vKipcclxuICogRGlzcGxheXMgdGhlIHZhbHVlIG9mIGEgY29tcGxleCBvYmplY3Qgd2l0aCBtdWx0aXBsZSBwcm9wZXJ0aWVzIHRoYXQgaXMgYXV0b21hdGljYWxseSBjcmVhdGVkIGZyb20gdGhlIGdpdmVuIHByb3BlcnR5LlxyXG4gKiBUaGUgb2JqZWN0IGNhbiBhbHNvIGJlIG5lc3RlZC5cclxuICogQHJlbWFya3MgSXQgaXMgYWR2aXNlZCB0byB1c2Uge0BsaW5rIFJlc3RXb3JsZERpc3BsYXlDb21wb25lbnR9IGA8cnctZGlzcGxheT5gIGFuZCBjb250cm9sIHRoZSByZW5kZXJlZCBlbGVtZW50cyB3aXRoIHRoZSBwYXNzZWQgaW4gcHJvcGVydHlcclxuICogaW5zdGVhZCBvZiB1c2luZyB0aGlzIGNvbXBvbmVudCBkaXJlY3RseS5cclxuICogQGV4YW1wbGVcclxuICogPHJ3LWRpc3BsYXktb2JqZWN0IFtwcm9wZXJ0eV09XCJwcm9wZXJ0eVwiIFthcGlOYW1lXT1cImFwaU5hbWVcIiBbdmFsdWVdPVwidmFsdWVcIj48L3J3LWRpc3BsYXktb2JqZWN0PlxyXG4gKi9cclxuQENvbXBvbmVudCh7XHJcbiAgICBzZWxlY3RvcjogJ3J3LWRpc3BsYXktb2JqZWN0JyxcclxuICAgIHRlbXBsYXRlVXJsOiAnLi9yZXN0d29ybGQtZGlzcGxheS1vYmplY3QvcmVzdHdvcmxkLWRpc3BsYXktb2JqZWN0LmNvbXBvbmVudC5odG1sJyxcclxuICAgIHN0eWxlVXJsOiAnLi9yZXN0d29ybGQtZGlzcGxheS1vYmplY3QvcmVzdHdvcmxkLWRpc3BsYXktb2JqZWN0LmNvbXBvbmVudC5jc3MnXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBSZXN0V29ybGREaXNwbGF5T2JqZWN0Q29tcG9uZW50IHtcclxuICAgIC8qKlxyXG4gICAgICogVGhlIHByb3BlcnR5IHRvIGRpc3BsYXkuXHJcbiAgICAgKiBAcmVxdWlyZWRcclxuICAgICAqL1xyXG4gICAgQElucHV0KHsgcmVxdWlyZWQ6IHRydWUgfSlcclxuICAgIHByb3BlcnR5ITogUHJvcGVydHk8bnVsbCwgbmV2ZXIsIG5ldmVyPiAmIHsgX3RlbXBsYXRlczogeyBkZWZhdWx0OiBUZW1wbGF0ZSB9IH07XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGUgbmFtZSBvZiB0aGUgQVBJIHRvIHVzZSBmb3IgdGhlIHByb3BlcnR5LlxyXG4gICAgICogQHJlcXVpcmVkXHJcbiAgICAgKiBAcmVtYXJrcyBUaGlzIGlzIHRoZSBuYW1lIG9mIHRoZSBBUEkgYXMgZGVmaW5lZCBpbiB0aGUgYFJlc3RXb3JsZENsaWVudENvbGxlY3Rpb25gLlxyXG4gICAgICovXHJcbiAgICBASW5wdXQoeyByZXF1aXJlZDogdHJ1ZSB9KVxyXG4gICAgYXBpTmFtZSE6IHN0cmluZztcclxuXHJcbiAgICBwcml2YXRlIF92YWx1ZT86IFJlY29yZDxzdHJpbmcsIFNpbXBsZVZhbHVlPjtcclxuICAgIC8qKlxyXG4gICAgICogVGhlIHZhbHVlIHRvIGRpc3BsYXkuIElmIG5vdCBzZXQsIHRoZSB2YWx1ZSBvZiB0aGUgdGVtcGxhdGUgcHJvcGVydGllcyB3aWxsIGJlIHVzZWQuXHJcbiAgICAqL1xyXG4gICAgQElucHV0KClcclxuICAgIHB1YmxpYyBzZXQgdmFsdWUodmFsdWU6IFJlY29yZDxzdHJpbmcsIFNpbXBsZVZhbHVlPiB8IHVuZGVmaW5lZCkge1xyXG4gICAgICAgIHRoaXMuX3ZhbHVlID0gdmFsdWU7XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgZ2V0IHZhbHVlKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl92YWx1ZTtcclxuICAgIH1cclxufVxyXG5cclxuLyoqXHJcbiAqIERpc3BsYXlzIHRoZSB2YWx1ZSBvZiBhIHNpbXBsZSBlbGVtZW50LCBsaWtlIGEgc3RyaW5nLCBhIG51bWJlciBvciBhIERhdGUgdGhhdCBpcyBhdXRvbWF0aWNhbGx5IGNyZWF0ZWQgZnJvbSB0aGUgZ2l2ZW4gcHJvcGVydHkuXHJcbiAqIEByZW1hcmtzIEl0IGlzIGFkdmlzZWQgdG8gdXNlIHtAbGluayBSZXN0V29ybGREaXNwbGF5Q29tcG9uZW50fSBgPHJ3LWRpc3BsYXk+YCBhbmQgY29udHJvbCB0aGUgcmVuZGVyZWQgZWxlbWVudHMgd2l0aCB0aGUgcGFzc2VkIGluIHByb3BlcnR5XHJcbiAqIGluc3RlYWQgb2YgdXNpbmcgdGhpcyBjb21wb25lbnQgZGlyZWN0bHkuXHJcbiAqIEBleGFtcGxlXHJcbiAqIDxydy1kaXNwbGF5LXNpbXBsZSBbcHJvcGVydHldPVwicHJvcGVydHlcIiBbYXBpTmFtZV09XCJhcGlOYW1lXCIgW3ZhbHVlXT1cInZhbHVlXCI+PC9ydy1kaXNwbGF5LXNpbXBsZT5cclxuICovXHJcbkBDb21wb25lbnQoe1xyXG4gICAgc2VsZWN0b3I6ICdydy1kaXNwbGF5LXNpbXBsZScsXHJcbiAgICB0ZW1wbGF0ZVVybDogJy4vcmVzdHdvcmxkLWRpc3BsYXktc2ltcGxlL3Jlc3R3b3JsZC1kaXNwbGF5LXNpbXBsZS5jb21wb25lbnQuaHRtbCcsXHJcbiAgICBzdHlsZVVybDogJy4vcmVzdHdvcmxkLWRpc3BsYXktc2ltcGxlL3Jlc3R3b3JsZC1kaXNwbGF5LXNpbXBsZS5jb21wb25lbnQuY3NzJ1xyXG59KVxyXG5leHBvcnQgY2xhc3MgUmVzdFdvcmxkRGlzcGxheVNpbXBsZUNvbXBvbmVudDxUUHJvcGVydHkgZXh0ZW5kcyBQcm9wZXJ0eTxTaW1wbGVWYWx1ZSwgc3RyaW5nLCBzdHJpbmc+PiB7XHJcbiAgICAvKipcclxuICAgICAqIFRoZSBwcm9wZXJ0eSB0byBkaXNwbGF5LlxyXG4gICAgICogQHJlcXVpcmVkXHJcbiAgICAgKi9cclxuICAgIEBJbnB1dCh7IHJlcXVpcmVkOiB0cnVlIH0pXHJcbiAgICBwcm9wZXJ0eSE6IFRQcm9wZXJ0eTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoZSBuYW1lIG9mIHRoZSBBUEkgdG8gdXNlIGZvciB0aGUgcHJvcGVydHkuXHJcbiAgICAgKiBAcmVxdWlyZWRcclxuICAgICAqIEByZW1hcmtzIFRoaXMgaXMgdGhlIG5hbWUgb2YgdGhlIEFQSSBhcyBkZWZpbmVkIGluIHRoZSBgUmVzdFdvcmxkQ2xpZW50Q29sbGVjdGlvbmAuXHJcbiAgICAgKi9cclxuICAgIEBJbnB1dCh7IHJlcXVpcmVkOiB0cnVlIH0pXHJcbiAgICBhcGlOYW1lITogc3RyaW5nO1xyXG5cclxuICAgIHByaXZhdGUgX3ZhbHVlPzogU2ltcGxlVmFsdWU7XHJcbiAgICAvKipcclxuICAgICAqIFRoZSB2YWx1ZSB0byBkaXNwbGF5LiBJZiBub3Qgc2V0LCB0aGUgdmFsdWUgb2YgdGhlIHByb3BlcnR5IHdpbGwgYmUgdXNlZC5cclxuICAgICovXHJcbiAgICBASW5wdXQoKVxyXG4gICAgcHVibGljIHNldCB2YWx1ZSh2YWx1ZTogU2ltcGxlVmFsdWUpIHtcclxuICAgICAgICB0aGlzLl92YWx1ZSA9IHZhbHVlO1xyXG4gICAgfVxyXG4gICAgcHVibGljIGdldCB2YWx1ZSgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fdmFsdWUgPz8gdGhpcy5wcm9wZXJ0eS52YWx1ZTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZ2V0IFByb3BlcnR5VHlwZSgpIHtcclxuICAgICAgICByZXR1cm4gUHJvcGVydHlUeXBlO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IF9kYXRlRm9ybWF0ID0gbmV3IERhdGUoMzMzMywgMTAsIDIyKSAvLyBtb250aHMgc3RhcnQgYXQgMCBpbiBKU1xyXG4gICAgICAgIC50b0xvY2FsZURhdGVTdHJpbmcoKVxyXG4gICAgICAgIC5yZXBsYWNlKFwiMjJcIiwgXCJkZFwiKVxyXG4gICAgICAgIC5yZXBsYWNlKFwiMTFcIiwgXCJNTVwiKVxyXG4gICAgICAgIC5yZXBsYWNlKFwiMzMzM1wiLCBcInl5eXlcIilcclxuICAgICAgICAucmVwbGFjZShcIjMzXCIsIFwieXlcIik7XHJcblxyXG4gICAgcHVibGljIGdldCBkYXRlRm9ybWF0KCk6IHN0cmluZyB7XHJcbiAgICAgICAgcmV0dXJuIFJlc3RXb3JsZERpc3BsYXlTaW1wbGVDb21wb25lbnQuX2RhdGVGb3JtYXQ7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgX3RpbWVGb3JtYXQgPSBuZXcgRGF0ZSgxLCAxLCAxLCAyMiwgMzMsIDQ0KVxyXG4gICAgICAgIC50b0xvY2FsZVRpbWVTdHJpbmcoKVxyXG4gICAgICAgIC5yZXBsYWNlKFwiMjJcIiwgXCJoaFwiKVxyXG4gICAgICAgIC5yZXBsYWNlKFwiMzNcIiwgXCJtbVwiKVxyXG4gICAgICAgIC5yZXBsYWNlKFwiNDRcIiwgXCJzc1wiKTtcclxuXHJcbiAgICBwdWJsaWMgZ2V0IHRpbWVGb3JtYXQoKSB7XHJcbiAgICAgICAgcmV0dXJuIFJlc3RXb3JsZERpc3BsYXlTaW1wbGVDb21wb25lbnQuX3RpbWVGb3JtYXQ7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdldCBQcm9wZXJ0eVdpdGhJbWFnZSgpIHtcclxuICAgICAgICByZXR1cm4gUHJvcGVydHlXaXRoSW1hZ2U7XHJcbiAgICB9XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBEaXNwbGF5cyB0aGUgdmFsdWVzIG9mIGEgY29sbGVjdGlvbiBvZiBgPHJ3LWRpc3BsYXk+YCBlbGVtZW50cyBhdXRvbWF0aWNhbGx5IGNyZWF0ZWQgZnJvbSBhIHRlbXBsYXRlLlxyXG4gKiBAZXhhbXBsZVxyXG4gKiA8cnctZGlzcGxheS10ZW1wbGF0ZSBbdGVtcGxhdGVdPVwidGVtcGxhdGVcIiBbYXBpTmFtZV09XCJhcGlOYW1lXCIgW3ZhbHVlXT1cInZhbHVlXCI+PC9ydy1kaXNwbGF5LXRlbXBsYXRlPlxyXG4gKi9cclxuQENvbXBvbmVudCh7XHJcbiAgICBzZWxlY3RvcjogJ3J3LWRpc3BsYXktdGVtcGxhdGUnLFxyXG4gICAgdGVtcGxhdGVVcmw6ICcuL3Jlc3R3b3JsZC1kaXNwbGF5LXRlbXBsYXRlL3Jlc3R3b3JsZC1kaXNwbGF5LXRlbXBsYXRlLmNvbXBvbmVudC5odG1sJyxcclxuICAgIHN0eWxlVXJsOiAnLi9yZXN0d29ybGQtZGlzcGxheS10ZW1wbGF0ZS9yZXN0d29ybGQtZGlzcGxheS10ZW1wbGF0ZS5jb21wb25lbnQuY3NzJ1xyXG59KVxyXG5leHBvcnQgY2xhc3MgUmVzdFdvcmxkRGlzcGxheVRlbXBsYXRlQ29tcG9uZW50IHtcclxuICAgIC8qKlxyXG4gICAgICogVGhlIHRlbXBsYXRlIHRvIGRpc3BsYXkuXHJcbiAgICAgKiBAcmVxdWlyZWRcclxuICAgICAqIEByZW1hcmtzIFRoaXMgaXMgdGhlIHRlbXBsYXRlIHRoYXQgZGVmaW5lcyB0aGUgcHJvcGVydGllcyB0byBkaXNwbGF5LlxyXG4gICAgICovXHJcbiAgICBASW5wdXQoeyByZXF1aXJlZDogdHJ1ZSB9KVxyXG4gICAgdGVtcGxhdGUhOiBUZW1wbGF0ZTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoZSBuYW1lIG9mIHRoZSBBUEkgdG8gdXNlIGZvciB0aGUgcHJvcGVydHkuXHJcbiAgICAgKiBAcmVxdWlyZWRcclxuICAgICAqIEByZW1hcmtzIFRoaXMgaXMgdGhlIG5hbWUgb2YgdGhlIEFQSSBhcyBkZWZpbmVkIGluIHRoZSBgUmVzdFdvcmxkQ2xpZW50Q29sbGVjdGlvbmAuXHJcbiAgICAgKi9cclxuICAgIEBJbnB1dCh7IHJlcXVpcmVkOiB0cnVlIH0pXHJcbiAgICBhcGlOYW1lITogc3RyaW5nO1xyXG5cclxuICAgIHByaXZhdGUgX3ZhbHVlPzogUmVjb3JkPHN0cmluZywgYW55PjtcclxuICAgIC8qKlxyXG4gICAgICogVGhlIHZhbHVlIHRvIGRpc3BsYXkuIElmIG5vdCBzZXQsIHRoZSB2YWx1ZXMgb2YgdGhlIHRlbXBsYXRlIHByb3BlcnRpZXMgd2lsbCBiZSB1c2VkLlxyXG4gICAgKi9cclxuICAgIEBJbnB1dCgpXHJcbiAgICBwdWJsaWMgc2V0IHZhbHVlKHZhbHVlOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHwgdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgdGhpcy5fdmFsdWUgPSB2YWx1ZTtcclxuICAgIH1cclxuICAgIHB1YmxpYyBnZXQgdmFsdWUoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX3ZhbHVlO1xyXG4gICAgfVxyXG59XHJcbiIsIjxkaXYgY2xhc3M9XCJncmlkIGZpZWxkXCIgKm5nSWY9XCJwcm9wZXJ0eS50eXBlICE9PSBQcm9wZXJ0eVR5cGUuSGlkZGVuXCI+XHJcbiAgICA8cnctbGFiZWwgW3Byb3BlcnR5XT1cInByb3BlcnR5XCIgY2xhc3M9XCJjb2wtMTIgbWQ6Y29sLTIgZmxleCBhbGlnbi1pdGVtcy1jZW50ZXJcIj48L3J3LWxhYmVsPlxyXG4gICAgPHJ3LWRpc3BsYXkgW3Byb3BlcnR5XT1cInByb3BlcnR5XCIgW3ZhbHVlXT1cInZhbHVlXCIgW2FwaU5hbWVdPVwiYXBpTmFtZVwiIGNsYXNzPVwiY29sLTEyIG1kOmNvbC0xMFwiPjwvcnctZGlzcGxheT5cclxuPC9kaXY+XHJcbiIsIjxuZy1jb250YWluZXIgKm5nSWY9XCJwcm9wZXJ0eS50eXBlICE9PSBQcm9wZXJ0eVR5cGUuSGlkZGVuXCI+XHJcbiAgICA8cnctZGlzcGxheS1kcm9wZG93biAqbmdJZj1cInByb3BlcnR5Lm9wdGlvbnNcIiBbcHJvcGVydHldPVwiJGFueShwcm9wZXJ0eSlcIiBbc2VsZWN0ZWRWYWx1ZXNdPVwiJGFueSh2YWx1ZSlcIiBbYXBpTmFtZV09XCJhcGlOYW1lXCI+PC9ydy1kaXNwbGF5LWRyb3Bkb3duPlxyXG5cclxuICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhcHJvcGVydHkub3B0aW9uc1wiPlxyXG4gICAgICAgIDxuZy1jb250YWluZXIgW25nU3dpdGNoXT1cInByb3BlcnR5LnR5cGVcIj5cclxuICAgICAgICAgICAgPHJ3LWRpc3BsYXktb2JqZWN0ICpuZ1N3aXRjaENhc2U9XCJQcm9wZXJ0eVR5cGUuT2JqZWN0XCIgW3Byb3BlcnR5XT1cIiRhbnkocHJvcGVydHkpXCIgW3ZhbHVlXT1cIiRhbnkodmFsdWUpXCIgW2FwaU5hbWVdPVwiYXBpTmFtZVwiPjwvcnctZGlzcGxheS1vYmplY3Q+XHJcbiAgICAgICAgICAgIDxydy1kaXNwbGF5LWNvbGxlY3Rpb24gKm5nU3dpdGNoQ2FzZT1cIlByb3BlcnR5VHlwZS5Db2xsZWN0aW9uXCIgW3Byb3BlcnR5XT1cIiRhbnkocHJvcGVydHkpXCIgW3ZhbHVlc109XCIkYW55KHZhbHVlKVwiIFthcGlOYW1lXT1cImFwaU5hbWVcIj48L3J3LWRpc3BsYXktY29sbGVjdGlvbj5cclxuICAgICAgICAgICAgPHJ3LWRpc3BsYXktc2ltcGxlICpuZ1N3aXRjaERlZmF1bHQgW3Byb3BlcnR5XT1cInByb3BlcnR5XCIgW3ZhbHVlXT1cIiRhbnkodmFsdWUpXCIgW2FwaU5hbWVdPVwiYXBpTmFtZVwiPjwvcnctZGlzcGxheS1zaW1wbGU+XHJcbiAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICA8L25nLWNvbnRhaW5lcj5cclxuPC9uZy1jb250YWluZXI+XHJcbiIsIjxkaXYgY2xhc3M9XCJmbGV4IGFsaWduLWl0ZW1zLWNlbnRlclwiPlxyXG4gICAgPGRpdiBjbGFzcz1cImJyYWNlXCI+XHJcbiAgICA8L2Rpdj5cclxuICAgIDxkaXYgY2xhc3M9XCJ3LWZ1bGxcIj5cclxuICAgICAgICA8ZGl2ICpuZ0Zvcj1cImxldCB0ZW1wbGF0ZSBvZiB0ZW1wbGF0ZXNcIiBjbGFzcz1cImZsZXggYWxpZ24taXRlbXMtY2VudGVyXCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJicmFjZVwiPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInctZnVsbCBmbGV4IGp1c3RpZnktY29udGVudC1lbmRcIj5cclxuICAgICAgICAgICAgICAgIDxydy1kaXNwbGF5LXRlbXBsYXRlIFt0ZW1wbGF0ZV09XCIkYW55KHRlbXBsYXRlKVwiIFt2YWx1ZV09XCJ2YWx1ZXMgPyB2YWx1ZXNbdGVtcGxhdGUudGl0bGUhXSA6IHVuZGVmaW5lZFwiIFthcGlOYW1lXT1cImFwaU5hbWVcIiBjbGFzcz1cInctZnVsbFwiPjwvcnctZGlzcGxheS10ZW1wbGF0ZT5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuPC9kaXY+XHJcbiIsIjwhLS0gPG5nLXRlbXBsYXRlICNkZWZhdWx0SW5wdXRPcHRpb25zIGxldC1wcm9wZXJ0eT1cInByb3BlcnR5XCIgbGV0LXNlbGVjdGVkVmFsdWVzPVwic2VsZWN0ZWRWYWx1ZXNcIj4gLS0+XHJcbjxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IHZhbHVlIG9mIHNlbGVjdGVkVmFsdWVzOyBsYXN0IGFzIGxhc3Q7XCI+XHJcbiAgICA8c3BhbiBbcFRvb2x0aXBdPVwiZ2V0VG9vbHRpcChnZXRPcHRpb25JdGVtKHZhbHVlKSlcIj57e2dldExhYmVsKGdldE9wdGlvbkl0ZW0odmFsdWUpKX19PC9zcGFuPnt7bGFzdCA/IFwiXCIgOiBcIiwgXCJ9fVxyXG48L25nLWNvbnRhaW5lcj5cclxuPCEtLSA8L25nLXRlbXBsYXRlPlxyXG48bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiaW5wdXRPcHRpb25zUmVmID8/IGRlZmF1bHRJbnB1dE9wdGlvbnM7IGNvbnRleHQ6IHsgcHJvcGVydHk6IHByb3BlcnR5LCBzZWxlY3RlZFZhbHVlczogc2VsZWN0ZWRWYWx1ZXMgfVwiPjwvbmctY29udGFpbmVyPiAtLT4iLCI8ZGl2IGNsYXNzPVwiZmxleCBhbGlnbi1pdGVtcy1jZW50ZXJcIj5cclxuICAgIDxkaXYgY2xhc3M9XCJicmFjZVwiPlxyXG4gICAgPC9kaXY+XHJcbiAgICA8ZGl2IGNsYXNzPVwidy1mdWxsXCI+XHJcbiAgICAgICAgPHJ3LWRpc3BsYXktdGVtcGxhdGUgW3RlbXBsYXRlXT1cInByb3BlcnR5Ll90ZW1wbGF0ZXMuZGVmYXVsdFwiIFt2YWx1ZV09XCJ2YWx1ZVwiIFthcGlOYW1lXT1cImFwaU5hbWVcIj48L3J3LWRpc3BsYXktdGVtcGxhdGU+XHJcbiAgICA8L2Rpdj5cclxuPC9kaXY+IiwiPG5nLWNvbnRhaW5lciBbbmdTd2l0Y2hdPVwicHJvcGVydHkudHlwZVwiPlxyXG4gICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiUHJvcGVydHlUeXBlLlRleHRcIj5cclxuICAgICAgICA8cnctYXZhdGFyICpuZ0lmPVwicHJvcGVydHkubmFtZSA9PT0gJ2NyZWF0ZWRCeScgfHwgcHJvcGVydHkubmFtZSA9PT0gJ2xhc3RDaGFuZ2VkQnknXCIgW3VzZXJdPVwiJGFueSh2YWx1ZSlcIj48L3J3LWF2YXRhcj5cclxuICAgICAgICA8c3BhbiAqbmdJZj1cInByb3BlcnR5Lm5hbWUgIT09ICdjcmVhdGVkQnknICYmIHByb3BlcnR5Lm5hbWUgIT09ICdsYXN0Q2hhbmdlZEJ5J1wiIGNsYXNzPVwidy1mdWxsXCI+e3t2YWx1ZSB8IHByb3BlcnR5VHlwZUZvcm1hdDpwcm9wZXJ0eS50eXBlfX08L3NwYW4+XHJcbiAgICA8L25nLWNvbnRhaW5lcj5cclxuXHJcbiAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCJQcm9wZXJ0eVR5cGUuQm9vbFwiPlxyXG4gICAgICAgIDxwLWNoZWNrYm94ICpuZ0lmPVwicHJvcGVydHkucmVxdWlyZWRcIiBbKG5nTW9kZWwpXT1cInZhbHVlXCIgW2JpbmFyeV09XCJ0cnVlXCIgW3JlYWRvbmx5XT1cInRydWVcIiBbZGlzYWJsZWRdPVwidHJ1ZVwiPjwvcC1jaGVja2JveD5cclxuICAgICAgICA8cC10cmlTdGF0ZUNoZWNrYm94ICpuZ0lmPVwiIXByb3BlcnR5LnJlcXVpcmVkXCIgWyhuZ01vZGVsKV09XCJ2YWx1ZVwiIFtyZWFkb25seV09XCJ0cnVlXCIgW2Rpc2FibGVkXT1cInRydWVcIj48L3AtdHJpU3RhdGVDaGVja2JveD5cclxuICAgIDwvbmctY29udGFpbmVyPlxyXG5cclxuICAgIDxzcGFuICpuZ1N3aXRjaERlZmF1bHQgY2xhc3M9XCJ3LWZ1bGxcIj57e3ZhbHVlIHwgcHJvcGVydHlUeXBlRm9ybWF0OnByb3BlcnR5LnR5cGV9fTwvc3Bhbj5cclxuPC9uZy1jb250YWluZXI+XHJcbiIsIjxydy1kaXNwbGF5LWVsZW1lbnQgKm5nRm9yPVwibGV0IHByb3BlcnR5IG9mIHRlbXBsYXRlLnByb3BlcnRpZXNcIiBbcHJvcGVydHldPVwicHJvcGVydHlcIiBbdmFsdWVdPVwidmFsdWUgPyB2YWx1ZVtwcm9wZXJ0eS5uYW1lXSA6IHVuZGVmaW5lZFwiIFthcGlOYW1lXT1cImFwaU5hbWVcIj48L3J3LWRpc3BsYXktZWxlbWVudD4iXX0=
@@ -10,6 +10,11 @@ import * as i5 from "../../pipes/safe-url.pipe";
10
10
  /**
11
11
  * Represents a component for uploading files in the RESTworld Angular client.
12
12
  * Implements the ControlValueAccessor interface to enable two-way data binding.
13
+ * @example
14
+ * <rw-file
15
+ * [(ngModel)]="base64EncodedFileUri"
16
+ * accept="file/text">
17
+ * </rw-file>
13
18
  */
14
19
  export class RestWorldFileComponent {
15
20
  onChange;
@@ -64,4 +69,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.2", ngImpor
64
69
  type: ViewChildren,
65
70
  args: [FileUpload]
66
71
  }] } });
67
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVzdHdvcmxkLWZpbGUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LXJlc3R3b3JsZC1jbGllbnQvc3JjL2xpYi9jb21wb25lbnRzL3Jlc3R3b3JsZC1maWxlL3Jlc3R3b3JsZC1maWxlLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1yZXN0d29ybGQtY2xpZW50L3NyYy9saWIvY29tcG9uZW50cy9yZXN0d29ybGQtZmlsZS9yZXN0d29ybGQtZmlsZS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBRSxLQUFLLEVBQWEsWUFBWSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3RGLE9BQU8sRUFBd0IsaUJBQWlCLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUN6RSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sb0JBQW9CLENBQUM7Ozs7Ozs7QUFFaEQ7OztHQUdHO0FBV0gsTUFBTSxPQUFPLHNCQUFzQjtJQUN6QixRQUFRLENBQVk7SUFPckIsTUFBTSxDQUFVO0lBTWhCLFFBQVEsQ0FBVTtJQUd6QixXQUFXLENBQXlCO0lBRTdCLFFBQVEsR0FBRyxLQUFLLENBQUM7SUFDeEI7O09BRUc7SUFDSSxHQUFHLENBQVU7SUFFcEIsVUFBVSxDQUFDLEdBQVk7UUFDckIsSUFBSSxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUM7SUFDakIsQ0FBQztJQUNELGdCQUFnQixDQUFDLEVBQWE7UUFDNUIsSUFBSSxDQUFDLFFBQVEsR0FBRyxFQUFFLENBQUM7SUFDckIsQ0FBQztJQUNELGlCQUFpQjtRQUNmLHVFQUF1RTtJQUN6RSxDQUFDO0lBQ0QsZ0JBQWdCLENBQUUsVUFBbUI7UUFDbkMsSUFBSSxDQUFDLFFBQVEsR0FBRyxVQUFVLENBQUM7SUFDN0IsQ0FBQztJQUVNLFdBQVcsQ0FBQyxLQUF3QjtRQUN6QyxNQUFNLElBQUksR0FBRyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzVCLE1BQU0sTUFBTSxHQUFHLElBQUksVUFBVSxFQUFFLENBQUM7UUFDaEMsTUFBTSxDQUFDLE1BQU0sR0FBRyxHQUFHLEVBQUU7WUFDbkIsSUFBSSxDQUFDLEdBQUcsR0FBRyxNQUFNLENBQUMsTUFBZ0IsQ0FBQztZQUNuQyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQzVCLENBQUMsQ0FBQztRQUVGLE1BQU0sQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDN0IsQ0FBQzt1R0EvQ1Usc0JBQXNCOzJGQUF0QixzQkFBc0Isc0ZBTnRCLENBQUM7Z0JBQ1YsT0FBTyxFQUFFLGlCQUFpQjtnQkFDMUIsV0FBVyxFQUFFLFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxzQkFBc0IsQ0FBQztnQkFDckQsS0FBSyxFQUFFLElBQUk7YUFDWixDQUFDLDBEQWtCWSxVQUFVLGdEQ2xDMUIsNmpCQUtBOzsyRkRhYSxzQkFBc0I7a0JBVmxDLFNBQVM7K0JBQ0UsU0FBUyxhQUdSLENBQUM7NEJBQ1YsT0FBTyxFQUFFLGlCQUFpQjs0QkFDMUIsV0FBVyxFQUFFLFVBQVUsQ0FBQyxHQUFHLEVBQUUsdUJBQXVCLENBQUM7NEJBQ3JELEtBQUssRUFBRSxJQUFJO3lCQUNaLENBQUM7OEJBVUssTUFBTTtzQkFOWixLQUFLO2dCQVlDLFFBQVE7c0JBSmQsS0FBSztnQkFPTixXQUFXO3NCQURWLFlBQVk7dUJBQUMsVUFBVSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgZm9yd2FyZFJlZiwgSW5wdXQsIFF1ZXJ5TGlzdCwgVmlld0NoaWxkcmVuIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IENvbnRyb2xWYWx1ZUFjY2Vzc29yLCBOR19WQUxVRV9BQ0NFU1NPUiB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuaW1wb3J0IHsgRmlsZVVwbG9hZCB9IGZyb20gJ3ByaW1lbmcvZmlsZXVwbG9hZCc7XHJcblxyXG4vKipcclxuICogUmVwcmVzZW50cyBhIGNvbXBvbmVudCBmb3IgdXBsb2FkaW5nIGZpbGVzIGluIHRoZSBSRVNUd29ybGQgQW5ndWxhciBjbGllbnQuXHJcbiAqIEltcGxlbWVudHMgdGhlIENvbnRyb2xWYWx1ZUFjY2Vzc29yIGludGVyZmFjZSB0byBlbmFibGUgdHdvLXdheSBkYXRhIGJpbmRpbmcuXHJcbiAqL1xyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ3J3LWZpbGUnLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9yZXN0d29ybGQtZmlsZS5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJy4vcmVzdHdvcmxkLWZpbGUuY29tcG9uZW50LmNzcyddLFxyXG4gIHByb3ZpZGVyczogW3tcclxuICAgIHByb3ZpZGU6IE5HX1ZBTFVFX0FDQ0VTU09SLFxyXG4gICAgdXNlRXhpc3Rpbmc6IGZvcndhcmRSZWYoKCkgPT4gUmVzdFdvcmxkRmlsZUNvbXBvbmVudCksXHJcbiAgICBtdWx0aTogdHJ1ZVxyXG4gIH1dXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBSZXN0V29ybGRGaWxlQ29tcG9uZW50IGltcGxlbWVudHMgQ29udHJvbFZhbHVlQWNjZXNzb3Ige1xyXG4gIHByaXZhdGUgb25DaGFuZ2U/OiBGdW5jdGlvbjtcclxuICBASW5wdXQoKVxyXG4gIC8qKlxyXG4gICAqIFRoZSBmaWxlIHR5cGVzIHRoYXQgdGhlIGNvbXBvbmVudCBzaG91bGQgYWNjZXB0LlxyXG4gICAqIFRoaXMgaXMgYSBjb21tYS1zZXBhcmF0ZWQgbGlzdCBvZiBNSU1FIHR5cGVzIG9yIGZpbGUgZXh0ZW5zaW9ucy5cclxuICAgKiBJZiBub3Qgc3BlY2lmaWVkLCBhbGwgZmlsZSB0eXBlcyBhcmUgYWNjZXB0ZWQuXHJcbiAgICovXHJcbiAgcHVibGljIGFjY2VwdD86IHN0cmluZztcclxuXHJcbiAgQElucHV0KClcclxuICAvKipcclxuICAgKiBUaGUgbmFtZSBvZiB0aGUgZmlsZSB0byBiZSB1cGxvYWRlZC5cclxuICAgKi9cclxuICBwdWJsaWMgZmlsZU5hbWU/OiBzdHJpbmc7XHJcblxyXG4gIEBWaWV3Q2hpbGRyZW4oRmlsZVVwbG9hZClcclxuICBmaWxlVXBsb2Fkcz86IFF1ZXJ5TGlzdDxGaWxlVXBsb2FkPjtcclxuXHJcbiAgcHVibGljIGRpc2FibGVkID0gZmFsc2U7XHJcbiAgLyoqXHJcbiAgICogVGhlIFVSSSBvZiB0aGUgZmlsZS5cclxuICAgKi9cclxuICBwdWJsaWMgdXJpPzogc3RyaW5nO1xyXG5cclxuICB3cml0ZVZhbHVlKG9iaj86IHN0cmluZyk6IHZvaWQge1xyXG4gICAgdGhpcy51cmkgPSBvYmo7XHJcbiAgfVxyXG4gIHJlZ2lzdGVyT25DaGFuZ2UoZm4/OiBGdW5jdGlvbik6IHZvaWQge1xyXG4gICAgdGhpcy5vbkNoYW5nZSA9IGZuO1xyXG4gIH1cclxuICByZWdpc3Rlck9uVG91Y2hlZCgpOiB2b2lkIHtcclxuICAgIC8vIG5vdCBuZWVkZWQgZm9yIHRoaXMgY29tcG9uZW50LCBidXQgbmVlZGVkIHRvIGltcGxlbWVudCB0aGUgaW50ZXJmYWNlXHJcbiAgfVxyXG4gIHNldERpc2FibGVkU3RhdGU/KGlzRGlzYWJsZWQ6IGJvb2xlYW4pOiB2b2lkIHtcclxuICAgIHRoaXMuZGlzYWJsZWQgPSBpc0Rpc2FibGVkO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGZpbGVDaGFuZ2VkKGV2ZW50OiB7IGZpbGVzOiBGaWxlW10gfSk6IHZvaWQge1xyXG4gICAgY29uc3QgZmlsZSA9IGV2ZW50LmZpbGVzWzBdO1xyXG4gICAgY29uc3QgcmVhZGVyID0gbmV3IEZpbGVSZWFkZXIoKTtcclxuICAgIHJlYWRlci5vbmxvYWQgPSAoKSA9PiB7XHJcbiAgICAgIHRoaXMudXJpID0gcmVhZGVyLnJlc3VsdCBhcyBzdHJpbmc7XHJcbiAgICAgIHRoaXMub25DaGFuZ2U/Lih0aGlzLnVyaSk7XHJcbiAgICB9O1xyXG5cclxuICAgIHJlYWRlci5yZWFkQXNEYXRhVVJMKGZpbGUpO1xyXG4gIH1cclxufVxyXG4iLCI8ZGl2IGNsYXNzPVwiZmxleCBhbGlnbi1pdGVtcy1jZW50ZXJcIj5cclxuICA8cC1idXR0b24gKm5nSWY9XCIhdXJpXCIgW2Rpc2FibGVkXT1cInRydWVcIiBpY29uPVwicGkgcGktZG93bmxvYWRcIiBjbGFzcz1cIm1yLTFcIiBwVG9vbHRpcD1cIk5vIGZpbGUgcHJlc2VudFwiPjwvcC1idXR0b24+XHJcbiAgPGEgKm5nSWY9XCJ1cmlcIiBbaHJlZl09XCJ1cmkgfCBzYWZlVXJsXCIgW2Rvd25sb2FkXT1cImZpbGVOYW1lIHx8ICdkb3dubG9hZCdcIiBjbGFzcz1cIm1yLTFcIiBwQnV0dG9uIHBUb29sdGlwPVwiRG93bmxvYWQgZmlsZVwiIGljb249XCJwaSBwaS1kb3dubG9hZFwiPjwvYT5cclxuICA8cC1maWxlVXBsb2FkIGNob29zZUljb249XCJwaS11cGxvYWQgZmFzIGZhLXVwbG9hZFwiIHBUb29sdGlwPVwiVXBsb2FkIG5ldyBmaWxlXCIgbW9kZT1cImJhc2ljXCIgW2F1dG9dPVwidHJ1ZVwiIFthY2NlcHRdPVwiYWNjZXB0IHx8ICcnXCIgW2N1c3RvbVVwbG9hZF09XCJ0cnVlXCIgKHVwbG9hZEhhbmRsZXIpPVwiZmlsZUNoYW5nZWQoJGV2ZW50KVwiPjwvcC1maWxlVXBsb2FkPlxyXG48L2Rpdj5cclxuIl19
72
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVzdHdvcmxkLWZpbGUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LXJlc3R3b3JsZC1jbGllbnQvc3JjL2xpYi9jb21wb25lbnRzL3Jlc3R3b3JsZC1maWxlL3Jlc3R3b3JsZC1maWxlLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1yZXN0d29ybGQtY2xpZW50L3NyYy9saWIvY29tcG9uZW50cy9yZXN0d29ybGQtZmlsZS9yZXN0d29ybGQtZmlsZS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBRSxLQUFLLEVBQWEsWUFBWSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3RGLE9BQU8sRUFBd0IsaUJBQWlCLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUN6RSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sb0JBQW9CLENBQUM7Ozs7Ozs7QUFFaEQ7Ozs7Ozs7O0dBUUc7QUFXSCxNQUFNLE9BQU8sc0JBQXNCO0lBQ3pCLFFBQVEsQ0FBWTtJQU9yQixNQUFNLENBQVU7SUFNaEIsUUFBUSxDQUFVO0lBR3pCLFdBQVcsQ0FBeUI7SUFFN0IsUUFBUSxHQUFHLEtBQUssQ0FBQztJQUN4Qjs7T0FFRztJQUNJLEdBQUcsQ0FBVTtJQUVwQixVQUFVLENBQUMsR0FBWTtRQUNyQixJQUFJLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQztJQUNqQixDQUFDO0lBQ0QsZ0JBQWdCLENBQUMsRUFBYTtRQUM1QixJQUFJLENBQUMsUUFBUSxHQUFHLEVBQUUsQ0FBQztJQUNyQixDQUFDO0lBQ0QsaUJBQWlCO1FBQ2YsdUVBQXVFO0lBQ3pFLENBQUM7SUFDRCxnQkFBZ0IsQ0FBRSxVQUFtQjtRQUNuQyxJQUFJLENBQUMsUUFBUSxHQUFHLFVBQVUsQ0FBQztJQUM3QixDQUFDO0lBRU0sV0FBVyxDQUFDLEtBQXdCO1FBQ3pDLE1BQU0sSUFBSSxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDNUIsTUFBTSxNQUFNLEdBQUcsSUFBSSxVQUFVLEVBQUUsQ0FBQztRQUNoQyxNQUFNLENBQUMsTUFBTSxHQUFHLEdBQUcsRUFBRTtZQUNuQixJQUFJLENBQUMsR0FBRyxHQUFHLE1BQU0sQ0FBQyxNQUFnQixDQUFDO1lBQ25DLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDNUIsQ0FBQyxDQUFDO1FBRUYsTUFBTSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUM3QixDQUFDO3VHQS9DVSxzQkFBc0I7MkZBQXRCLHNCQUFzQixzRkFOdEIsQ0FBQztnQkFDVixPQUFPLEVBQUUsaUJBQWlCO2dCQUMxQixXQUFXLEVBQUUsVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUFDLHNCQUFzQixDQUFDO2dCQUNyRCxLQUFLLEVBQUUsSUFBSTthQUNaLENBQUMsMERBa0JZLFVBQVUsZ0RDdkMxQiw2akJBS0E7OzJGRGtCYSxzQkFBc0I7a0JBVmxDLFNBQVM7K0JBQ0UsU0FBUyxhQUdSLENBQUM7NEJBQ1YsT0FBTyxFQUFFLGlCQUFpQjs0QkFDMUIsV0FBVyxFQUFFLFVBQVUsQ0FBQyxHQUFHLEVBQUUsdUJBQXVCLENBQUM7NEJBQ3JELEtBQUssRUFBRSxJQUFJO3lCQUNaLENBQUM7OEJBVUssTUFBTTtzQkFOWixLQUFLO2dCQVlDLFFBQVE7c0JBSmQsS0FBSztnQkFPTixXQUFXO3NCQURWLFlBQVk7dUJBQUMsVUFBVSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgZm9yd2FyZFJlZiwgSW5wdXQsIFF1ZXJ5TGlzdCwgVmlld0NoaWxkcmVuIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IENvbnRyb2xWYWx1ZUFjY2Vzc29yLCBOR19WQUxVRV9BQ0NFU1NPUiB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuaW1wb3J0IHsgRmlsZVVwbG9hZCB9IGZyb20gJ3ByaW1lbmcvZmlsZXVwbG9hZCc7XHJcblxyXG4vKipcclxuICogUmVwcmVzZW50cyBhIGNvbXBvbmVudCBmb3IgdXBsb2FkaW5nIGZpbGVzIGluIHRoZSBSRVNUd29ybGQgQW5ndWxhciBjbGllbnQuXHJcbiAqIEltcGxlbWVudHMgdGhlIENvbnRyb2xWYWx1ZUFjY2Vzc29yIGludGVyZmFjZSB0byBlbmFibGUgdHdvLXdheSBkYXRhIGJpbmRpbmcuXHJcbiAqIEBleGFtcGxlXHJcbiAqIDxydy1maWxlXHJcbiAqICBbKG5nTW9kZWwpXT1cImJhc2U2NEVuY29kZWRGaWxlVXJpXCJcclxuICogIGFjY2VwdD1cImZpbGUvdGV4dFwiPlxyXG4gKiA8L3J3LWZpbGU+XHJcbiAqL1xyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ3J3LWZpbGUnLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9yZXN0d29ybGQtZmlsZS5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJy4vcmVzdHdvcmxkLWZpbGUuY29tcG9uZW50LmNzcyddLFxyXG4gIHByb3ZpZGVyczogW3tcclxuICAgIHByb3ZpZGU6IE5HX1ZBTFVFX0FDQ0VTU09SLFxyXG4gICAgdXNlRXhpc3Rpbmc6IGZvcndhcmRSZWYoKCkgPT4gUmVzdFdvcmxkRmlsZUNvbXBvbmVudCksXHJcbiAgICBtdWx0aTogdHJ1ZVxyXG4gIH1dXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBSZXN0V29ybGRGaWxlQ29tcG9uZW50IGltcGxlbWVudHMgQ29udHJvbFZhbHVlQWNjZXNzb3Ige1xyXG4gIHByaXZhdGUgb25DaGFuZ2U/OiBGdW5jdGlvbjtcclxuICBASW5wdXQoKVxyXG4gIC8qKlxyXG4gICAqIFRoZSBmaWxlIHR5cGVzIHRoYXQgdGhlIGNvbXBvbmVudCBzaG91bGQgYWNjZXB0LlxyXG4gICAqIFRoaXMgaXMgYSBjb21tYS1zZXBhcmF0ZWQgbGlzdCBvZiBNSU1FIHR5cGVzIG9yIGZpbGUgZXh0ZW5zaW9ucy5cclxuICAgKiBJZiBub3Qgc3BlY2lmaWVkLCBhbGwgZmlsZSB0eXBlcyBhcmUgYWNjZXB0ZWQuXHJcbiAgICovXHJcbiAgcHVibGljIGFjY2VwdD86IHN0cmluZztcclxuXHJcbiAgQElucHV0KClcclxuICAvKipcclxuICAgKiBUaGUgbmFtZSBvZiB0aGUgZmlsZSB0byBiZSB1cGxvYWRlZC5cclxuICAgKi9cclxuICBwdWJsaWMgZmlsZU5hbWU/OiBzdHJpbmc7XHJcblxyXG4gIEBWaWV3Q2hpbGRyZW4oRmlsZVVwbG9hZClcclxuICBmaWxlVXBsb2Fkcz86IFF1ZXJ5TGlzdDxGaWxlVXBsb2FkPjtcclxuXHJcbiAgcHVibGljIGRpc2FibGVkID0gZmFsc2U7XHJcbiAgLyoqXHJcbiAgICogVGhlIFVSSSBvZiB0aGUgZmlsZS5cclxuICAgKi9cclxuICBwdWJsaWMgdXJpPzogc3RyaW5nO1xyXG5cclxuICB3cml0ZVZhbHVlKG9iaj86IHN0cmluZyk6IHZvaWQge1xyXG4gICAgdGhpcy51cmkgPSBvYmo7XHJcbiAgfVxyXG4gIHJlZ2lzdGVyT25DaGFuZ2UoZm4/OiBGdW5jdGlvbik6IHZvaWQge1xyXG4gICAgdGhpcy5vbkNoYW5nZSA9IGZuO1xyXG4gIH1cclxuICByZWdpc3Rlck9uVG91Y2hlZCgpOiB2b2lkIHtcclxuICAgIC8vIG5vdCBuZWVkZWQgZm9yIHRoaXMgY29tcG9uZW50LCBidXQgbmVlZGVkIHRvIGltcGxlbWVudCB0aGUgaW50ZXJmYWNlXHJcbiAgfVxyXG4gIHNldERpc2FibGVkU3RhdGU/KGlzRGlzYWJsZWQ6IGJvb2xlYW4pOiB2b2lkIHtcclxuICAgIHRoaXMuZGlzYWJsZWQgPSBpc0Rpc2FibGVkO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGZpbGVDaGFuZ2VkKGV2ZW50OiB7IGZpbGVzOiBGaWxlW10gfSk6IHZvaWQge1xyXG4gICAgY29uc3QgZmlsZSA9IGV2ZW50LmZpbGVzWzBdO1xyXG4gICAgY29uc3QgcmVhZGVyID0gbmV3IEZpbGVSZWFkZXIoKTtcclxuICAgIHJlYWRlci5vbmxvYWQgPSAoKSA9PiB7XHJcbiAgICAgIHRoaXMudXJpID0gcmVhZGVyLnJlc3VsdCBhcyBzdHJpbmc7XHJcbiAgICAgIHRoaXMub25DaGFuZ2U/Lih0aGlzLnVyaSk7XHJcbiAgICB9O1xyXG5cclxuICAgIHJlYWRlci5yZWFkQXNEYXRhVVJMKGZpbGUpO1xyXG4gIH1cclxufVxyXG4iLCI8ZGl2IGNsYXNzPVwiZmxleCBhbGlnbi1pdGVtcy1jZW50ZXJcIj5cclxuICA8cC1idXR0b24gKm5nSWY9XCIhdXJpXCIgW2Rpc2FibGVkXT1cInRydWVcIiBpY29uPVwicGkgcGktZG93bmxvYWRcIiBjbGFzcz1cIm1yLTFcIiBwVG9vbHRpcD1cIk5vIGZpbGUgcHJlc2VudFwiPjwvcC1idXR0b24+XHJcbiAgPGEgKm5nSWY9XCJ1cmlcIiBbaHJlZl09XCJ1cmkgfCBzYWZlVXJsXCIgW2Rvd25sb2FkXT1cImZpbGVOYW1lIHx8ICdkb3dubG9hZCdcIiBjbGFzcz1cIm1yLTFcIiBwQnV0dG9uIHBUb29sdGlwPVwiRG93bmxvYWQgZmlsZVwiIGljb249XCJwaSBwaS1kb3dubG9hZFwiPjwvYT5cclxuICA8cC1maWxlVXBsb2FkIGNob29zZUljb249XCJwaS11cGxvYWQgZmFzIGZhLXVwbG9hZFwiIHBUb29sdGlwPVwiVXBsb2FkIG5ldyBmaWxlXCIgbW9kZT1cImJhc2ljXCIgW2F1dG9dPVwidHJ1ZVwiIFthY2NlcHRdPVwiYWNjZXB0IHx8ICcnXCIgW2N1c3RvbVVwbG9hZF09XCJ0cnVlXCIgKHVwbG9hZEhhbmRsZXIpPVwiZmlsZUNoYW5nZWQoJGV2ZW50KVwiPjwvcC1maWxlVXBsb2FkPlxyXG48L2Rpdj5cclxuIl19
@@ -16,6 +16,26 @@ import * as i10 from "../restworld-validation-errors/restworld-validation-errors
16
16
  * A form with Save, Reload and Delete buttons.
17
17
  * If you do not want buttons, use RestWorldFormTemplateComponent <rw-form-template>.
18
18
  * You can also provide your own buttons by passing in a template.
19
+ * @example
20
+ * <rw-form
21
+ * [template]="template"
22
+ * apiName="apiName"
23
+ * rel="rel"
24
+ * [allowSubmit]="true"
25
+ * [allowDelete]="true"
26
+ * [allowReload]="true"
27
+ * [showSubmit]="true"
28
+ * [showDelete]="true"
29
+ * [showReload]="true">
30
+ * <ng-template #content let-form="form" let-template="template" let-apiName="apiName">
31
+ * <!-- Custom form content here -->
32
+ * <!-- This is optional and will replace the default which renders labels and inputs if present -->
33
+ * </ng-template>
34
+ * <ng-template #buttons let-form="form" let-template="template" let-apiName="apiName">
35
+ * <!-- Custom buttons here -->
36
+ * <!-- This is optional and will replace the default which renders the Save, Reload and Delete buttons if present -->
37
+ * </ng-template>
38
+ * </rw-form>
19
39
  */
20
40
  export class RestWorldFormComponent {
21
41
  _clients;
@@ -272,4 +292,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.2", ngImpor
272
292
  type: ContentChild,
273
293
  args: ['content', { static: false }]
274
294
  }] } });
275
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVzdHdvcmxkLWZvcm0uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LXJlc3R3b3JsZC1jbGllbnQvc3JjL2xpYi9jb21wb25lbnRzL3Jlc3R3b3JsZC1mb3JtL3Jlc3R3b3JsZC1mb3JtLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1yZXN0d29ybGQtY2xpZW50L3NyYy9saWIvY29tcG9uZW50cy9yZXN0d29ybGQtZm9ybS9yZXN0d29ybGQtZm9ybS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBYyxZQUFZLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBZSxNQUFNLGVBQWUsQ0FBQztBQUM5RyxPQUFPLEVBQThCLGdCQUFnQixFQUFFLGdCQUFnQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDaEcsT0FBTyxFQUE4QixjQUFjLEVBQXNDLE1BQU0seUJBQXlCLENBQUM7Ozs7Ozs7Ozs7OztBQU16SDs7OztHQUlHO0FBTUgsTUFBTSxPQUFPLHNCQUFzQjtJQXdIZDtJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBM0huQjs7T0FFRztJQUNLLFNBQVMsQ0FBMkI7SUFDNUMsSUFBVyxRQUFRO1FBQ2pCLE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQztJQUN4QixDQUFDO0lBQ0QsSUFDVyxRQUFRLENBQUMsS0FBOEI7UUFDaEQsSUFBSSxDQUFDLFNBQVMsR0FBRyxLQUFLLENBQUM7UUFDdkIsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLDJCQUEyQixDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ3pFLENBQUM7SUFHRCxPQUFPLENBQVU7SUFHakIsR0FBRyxDQUFVO0lBRWI7O01BRUU7SUFFRixXQUFXLEdBQUcsSUFBSSxDQUFDO0lBRW5COztNQUVFO0lBRUYs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dUJBQUMsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFO2dCQU96QixPQUFPO3NCQUROLEtBQUs7dUJBQUMsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFO2dCQUl6QixHQUFHO3NCQURGLEtBQUs7dUJBQUMsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFO2dCQU96QixXQUFXO3NCQURWLEtBQUs7Z0JBT04sV0FBVztzQkFEVixLQUFLO2dCQU9OLFdBQVc7c0JBRFYsS0FBSztnQkFPTixVQUFVO3NCQURULEtBQUs7Z0JBT04sVUFBVTtzQkFEVCxLQUFLO2dCQU9OLFVBQVU7c0JBRFQsS0FBSztnQkFJTixXQUFXO3NCQURWLE1BQU07Z0JBSVAsV0FBVztzQkFEVixNQUFNO2dCQU9QLFVBQVU7c0JBRFQsWUFBWTt1QkFBQyxTQUFTLEVBQUUsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFO2dCQU8xQyxVQUFVO3NCQURULFlBQVk7dUJBQUMsU0FBUyxFQUFFLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgQ29udGVudENoaWxkLCBFbGVtZW50UmVmLCBFdmVudEVtaXR0ZXIsIElucHV0LCBPdXRwdXQsIFRlbXBsYXRlUmVmIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBBYnN0cmFjdENvbnRyb2wsIEZvcm1Hcm91cCwgVW50eXBlZEZvcm1BcnJheSwgVW50eXBlZEZvcm1Hcm91cCB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IEZvcm1TZXJ2aWNlLCBGb3Jtc1Jlc291cmNlLCBQcm9ibGVtRGV0YWlscywgUHJvcGVydHlEdG8sIFNpbXBsZVZhbHVlLCBUZW1wbGF0ZSB9IGZyb20gJ0B3ZXJ0enVpL25neC1oYWwtY2xpZW50JztcbmltcG9ydCB7IENvbmZpcm1hdGlvblNlcnZpY2UsIE1lc3NhZ2VTZXJ2aWNlIH0gZnJvbSAncHJpbWVuZy9hcGknO1xuaW1wb3J0IHsgUmVzdFdvcmxkQ2xpZW50IH0gZnJvbSAnLi4vLi4vc2VydmljZXMvcmVzdHdvcmxkLWNsaWVudCc7XG5pbXBvcnQgeyBSZXN0V29ybGRDbGllbnRDb2xsZWN0aW9uIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvcmVzdHdvcmxkLWNsaWVudC1jb2xsZWN0aW9uJztcbmltcG9ydCB7IEFmdGVyU3VibWl0T2tFdmVudCwgQWZ0ZXJTdWJtaXRSZWRpcmVjdEV2ZW50IH0gZnJvbSAnLi4vLi4vbW9kZWxzL2V2ZW50cyc7XG5cbi8qKlxuICogQSBmb3JtIHdpdGggU2F2ZSwgUmVsb2FkIGFuZCBEZWxldGUgYnV0dG9ucy5cbiAqIElmIHlvdSBkbyBub3Qgd2FudCBidXR0b25zLCB1c2UgUmVzdFdvcmxkRm9ybVRlbXBsYXRlQ29tcG9uZW50IDxydy1mb3JtLXRlbXBsYXRlPi5cbiAqIFlvdSBjYW4gYWxzbyBwcm92aWRlIHlvdXIgb3duIGJ1dHRvbnMgYnkgcGFzc2luZyBpbiBhIHRlbXBsYXRlLlxuICovXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdydy1mb3JtJyxcbiAgdGVtcGxhdGVVcmw6ICcuL3Jlc3R3b3JsZC1mb3JtLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vcmVzdHdvcmxkLWZvcm0uY29tcG9uZW50LmNzcyddXG59KVxuZXhwb3J0IGNsYXNzIFJlc3RXb3JsZEZvcm1Db21wb25lbnQ8VFByb3BlcnR5RHRvcyBleHRlbmRzIFJlYWRvbmx5QXJyYXk8UHJvcGVydHlEdG88U2ltcGxlVmFsdWUsIHN0cmluZywgc3RyaW5nPj4+IHtcbiAgLyoqXG4gICAqIFRoZSB0ZW1wbGF0ZSB1c2VkIHRvIHJlbmRlciB0aGUgZm9ybS5cbiAgICovXG4gIHByaXZhdGUgX3RlbXBsYXRlPzogVGVtcGxhdGU8VFByb3BlcnR5RHRvcz47XG4gIHB1YmxpYyBnZXQgdGVtcGxhdGUoKTogVGVtcGxhdGU8VFByb3BlcnR5RHRvcz4gfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLl90ZW1wbGF0ZTtcbiAgfVxuICBASW5wdXQoeyByZXF1aXJlZDogdHJ1ZSB9KVxuICBwdWJsaWMgc2V0IHRlbXBsYXRlKHZhbHVlOiBUZW1wbGF0ZTxUUHJvcGVydHlEdG9zPikge1xuICAgIHRoaXMuX3RlbXBsYXRlID0gdmFsdWU7XG4gICAgdGhpcy5fZm9ybUdyb3VwID0gdGhpcy5fZm9ybVNlcnZpY2UuY3JlYXRlRm9ybUdyb3VwRnJvbVRlbXBsYXRlKHZhbHVlKTtcbiAgfVxuXG4gIEBJbnB1dCh7IHJlcXVpcmVkOiB0cnVlIH0pXG4gIGFwaU5hbWUhOiBzdHJpbmc7XG5cbiAgQElucHV0KHsgcmVxdWlyZWQ6IHRydWUgfSlcbiAgcmVsITogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBEZXRlcm1pbmVzIHdoZXRoZXIgdG8gZW5hYmxlIHRoZSBzdWJtaXQgYnV0dG9uLlxuICAqL1xuICBASW5wdXQoKVxuICBhbGxvd1N1Ym1pdCA9IHRydWU7XG5cbiAgLyoqXG4gICAqIERldGVybWluZXMgd2hldGhlciB0byBlbmFibGUgdGhlIGRlbGV0ZSBidXR0b24uXG4gICovXG4gIEBJbnB1dCgpXG4gIGFsbG93RGVsZXRlID0gdHJ1ZTtcblxuICAvKipcbiAgICogRGV0ZXJtaW5lcyB3aGV0aGVyIHRvIGVuYWJsZSB0aGUgcmVsb2FkIGJ1dHRvbi5cbiAgKi9cbiAgQElucHV0KClcbiAgYWxsb3dSZWxvYWQgPSB0cnVlO1xuXG4gIC8qKlxuICAgKiBEZXRlcm1pbmVzIHdoZXRoZXIgdG8gc2hvdyB0aGUgc3VibWl0IGJ1dHRvbi5cbiAgKi9cbiAgQElucHV0KClcbiAgc2hvd1N1Ym1pdCA9IHRydWU7XG5cbiAgLyoqXG4gICAqIERldGVybWluZXMgd2hldGhlciB0byBzaG93IHRoZSBkZWxldGUgYnV0dG9uLlxuICAqL1xuICBASW5wdXQoKVxuICBzaG93RGVsZXRlID0gdHJ1ZTtcblxuICAvKipcbiAgICogRGV0ZXJtaW5lcyB3aGV0aGVyIHRvIHNob3cgdGhlIHJlbG9hZCBidXR0b24uXG4gICovXG4gIEBJbnB1dCgpXG4gIHNob3dSZWxvYWQgPSB0cnVlO1xuXG4gIEBPdXRwdXQoKVxuICBhZnRlckRlbGV0ZSA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcblxuICBAT3V0cHV0KClcbiAgYWZ0ZXJTdWJtaXQgPSBuZXcgRXZlbnRFbWl0dGVyPEFmdGVyU3VibWl0T2tFdmVudCB8IEFmdGVyU3VibWl0UmVkaXJlY3RFdmVudD4oKTtcblxuICAvKipcbiAgICogQSByZWZlcmVuY2UgdG8gYSB0ZW1wbGF0ZSB0aGF0IGNhbiBiZSB1c2VkIHRvIHJlbmRlciBjdXN0b20gYnV0dG9ucyBmb3IgdGhlIGZvcm0uXG4gICovXG4gIEBDb250ZW50Q2hpbGQoJ2J1dHRvbnMnLCB7IHN0YXRpYzogZmFsc2UgfSlcbiAgYnV0dG9uc1JlZj86IFRlbXBsYXRlUmVmPHVua25vd24+O1xuXG4gIC8qKlxuICAgKiBBIHJlZmVyZW5jZSB0byBhIHRlbXBsYXRlIHRoYXQgY2FuIGJlIHVzZWQgdG8gcmVuZGVyIGN1c3RvbSBjb250ZW50IGluc2lkZSB0aGUgPGZvcm0+IGVsZW1lbnQgaW5zdGVhZCBvZiB0aGUgZGVmYXVsdCBmb3JtLlxuICAqL1xuICBAQ29udGVudENoaWxkKCdjb250ZW50JywgeyBzdGF0aWM6IGZhbHNlIH0pXG4gIGNvbnRlbnRSZWY/OiBUZW1wbGF0ZVJlZjx1bmtub3duPjtcblxuICBzY3JvbGxUb0ZpcnN0VmFsaWRhdGlvbkVycm9yKCk6IHZvaWQge1xuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgY29uc3QgdmFsaWRhdGlvbkVycm9yRWxlbWVudHMgPSB0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvckFsbCgncnctdmFsaWRhdGlvbi1lcnJvcnM+dmFsLWVycm9ycz5kaXYnKVxuICAgICAgY29uc3QgZmlyc3RFcnJvciA9IHZhbGlkYXRpb25FcnJvckVsZW1lbnRzWzBdO1xuICAgICAgZmlyc3RFcnJvci5zY3JvbGxJbnRvVmlldyh7IGJlaGF2aW9yOiAnc21vb3RoJywgYmxvY2s6ICdjZW50ZXInfSk7XG4gICAgfSxcbiAgICAxMDApO1xuICB9XG5cbiAgcHJpdmF0ZSBfaXNMb2FkaW5nID0gZmFsc2U7XG4gIHB1YmxpYyBnZXQgaXNMb2FkaW5nKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLl9pc0xvYWRpbmc7XG4gIH1cblxuICBwcml2YXRlIF9mb3JtR3JvdXA/OiBGb3JtR3JvdXA8YW55PjtcbiAgcHVibGljIGdldCBmb3JtR3JvdXAoKTogRm9ybUdyb3VwPGFueT4gfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLl9mb3JtR3JvdXA7XG4gIH1cblxuICBwdWJsaWMgZ2V0IGNhblN1Ym1pdCgpIDogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuYWxsb3dTdWJtaXQgJiZcbiAgICAgIHRoaXMudGVtcGxhdGUgIT09IHVuZGVmaW5lZCAmJlxuICAgICAgdGhpcy50ZW1wbGF0ZS50YXJnZXQgIT09IHVuZGVmaW5lZCAmJlxuICAgICAgIXRoaXMuaXNMb2FkaW5nICYmXG4gICAgICB0aGlzLmZvcm1Hcm91cCAhPT0gdW5kZWZpbmVkICYmXG4gICAgICB0aGlzLmZvcm1Hcm91cC52YWxpZDtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgY2FuRGVsZXRlKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmFsbG93RGVsZXRlICYmXG4gICAgICB0aGlzLnRlbXBsYXRlICE9PSB1bmRlZmluZWQgJiZcbiAgICAgIHRoaXMudGVtcGxhdGUudGFyZ2V0ICE9PSB1bmRlZmluZWQgJiZcbiAgICAgIHRoaXMudGVtcGxhdGUubWV0aG9kID09IFwiUFVUXCIgJiZcbiAgICAgICF0aGlzLmlzTG9hZGluZztcbiAgfVxuXG4gIHB1YmxpYyBnZXQgY2FuUmVsb2FkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmFsbG93UmVsb2FkICYmXG4gICAgICB0aGlzLnRlbXBsYXRlICE9PSB1bmRlZmluZWQgJiZcbiAgICAgIHRoaXMudGVtcGxhdGUudGFyZ2V0ICE9PSB1bmRlZmluZWQgJiZcbiAgICAgIHRoaXMudGVtcGxhdGUudGl0bGUgIT09IHVuZGVmaW5lZCAmJlxuICAgICAgdGhpcy50ZW1wbGF0ZS5wcm9wZXJ0aWVzLnNvbWUocCA9PiBwLm5hbWUgPT09IFwiaWRcIiAmJiBwLnZhbHVlICE9PSB1bmRlZmluZWQgJiYgcC52YWx1ZSAhPT0gbnVsbCAmJiBwLnZhbHVlICE9PSAwKSAmJlxuICAgICAgIXRoaXMuaXNMb2FkaW5nO1xuICB9XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSByZWFkb25seSBfY2xpZW50czogUmVzdFdvcmxkQ2xpZW50Q29sbGVjdGlvbixcbiAgICBwcml2YXRlIHJlYWRvbmx5IF9jb25maXJtYXRpb25TZXJ2aWNlOiBDb25maXJtYXRpb25TZXJ2aWNlLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgX21lc3NhZ2VTZXJ2aWNlOiBNZXNzYWdlU2VydmljZSxcbiAgICBwcml2YXRlIHJlYWRvbmx5IF9mb3JtU2VydmljZTogRm9ybVNlcnZpY2UsXG4gICAgcHJpdmF0ZSByZWFkb25seSBfZWxlbWVudFJlZjogRWxlbWVudFJlZjxIVE1MRWxlbWVudD4pIHtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyByZWxvYWQoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKCF0aGlzLmNhblJlbG9hZCB8fCB0aGlzLnRlbXBsYXRlID09PSB1bmRlZmluZWQpXG4gICAgICByZXR1cm47XG5cbiAgICB0aGlzLl9pc0xvYWRpbmcgPSB0cnVlO1xuXG4gICAgdHJ5XG4gICAge1xuICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLmdldENsaWVudCgpLmdldEZvcm0odGhpcy50ZW1wbGF0ZS50YXJnZXQhKTtcbiAgICAgIGlmICghcmVzcG9uc2Uub2sgfHwgUHJvYmxlbURldGFpbHMuaXNQcm9ibGVtRGV0YWlscyhyZXNwb25zZS5ib2R5KSB8fCAhcmVzcG9uc2UuYm9keSkge1xuICAgICAgICB0aGlzLl9tZXNzYWdlU2VydmljZS5hZGQoeyBzZXZlcml0eTogJ2Vycm9yJywgc3VtbWFyeTogJ0Vycm9yJywgZGV0YWlsOiAnRXJyb3Igd2hpbGUgbG9hZGluZyB0aGUgcmVzb3VyY2UgZnJvbSB0aGUgQVBJLicsIGRhdGE6IHJlc3BvbnNlLCBzdGlja3k6IHRydWUgfSk7XG4gICAgICB9XG4gICAgICBlbHNlIHtcbiAgICAgICAgdGhpcy50ZW1wbGF0ZSA9IHJlc3BvbnNlLmJvZHkuZ2V0VGVtcGxhdGVCeVRpdGxlKHRoaXMudGVtcGxhdGUudGl0bGUhKSBhcyBUZW1wbGF0ZTxUUHJvcGVydHlEdG9zPjtcbiAgICAgICAgdGhpcy5fZm9ybUdyb3VwID0gdGhpcy5fZm9ybVNlcnZpY2UuY3JlYXRlRm9ybUdyb3VwRnJvbVRlbXBsYXRlKHRoaXMudGVtcGxhdGUpO1xuICAgICAgfVxuICAgIH1cbiAgICBjYXRjaCAoZTogdW5rbm93bikge1xuICAgICAgdGhpcy5fbWVzc2FnZVNlcnZpY2UuYWRkKHsgc2V2ZXJpdHk6ICdlcnJvcicsIHN1bW1hcnk6ICdFcnJvcicsIGRldGFpbDogYEFuIHVua25vd24gZXJyb3Igb2NjdXJyZWQuICR7SlNPTi5zdHJpbmdpZnkoZSl9YCwgc3RpY2t5OiB0cnVlIH0pO1xuICAgICAgY29uc29sZS5sb2coZSk7XG4gICAgfVxuXG4gICAgdGhpcy5faXNMb2FkaW5nID0gZmFsc2U7XG4gIH1cblxuICBwdWJsaWMgc2hvd0RlbGV0ZUNvbmZpcm1hdGlvTW9kYWwoKSB7XG4gICAgdGhpcy5fY29uZmlybWF0aW9uU2VydmljZS5jb25maXJtKHtcbiAgICAgIG1lc3NhZ2U6ICdEbyB5b3UgcmVhbGx5IHdhbnQgdG8gZGVsZXRlIHRoaXMgcmVzb3VyY2U/JyxcbiAgICAgIGhlYWRlcjogJ0NvbmZpcm0gZGVsZXRlJyxcbiAgICAgIGljb246ICdmYXIgZmEtdHJhc2gtYWx0JyxcbiAgICAgIGFjY2VwdDogKCkgPT4gdGhpcy5kZWxldGUoKVxuICAgIH0pO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIHN1Ym1pdCgpIHtcbiAgICBpZih0aGlzLmZvcm1Hcm91cCAhPT0gdW5kZWZpbmVkKVxuICAgIHtcbiAgICAgIHRoaXMuZm9ybUdyb3VwLm1hcmtBbGxBc1RvdWNoZWQoKTtcblxuICAgICAgaWYgKCF0aGlzLmZvcm1Hcm91cC52YWxpZCkge1xuICAgICAgICB0aGlzLl9tZXNzYWdlU2VydmljZS5hZGQoe1xuICAgICAgICAgIHNldmVyaXR5OiAnZXJyb3InLFxuICAgICAgICAgIHN1bW1hcnk6ICdFcnJvcicsXG4gICAgICAgICAgZGV0YWlsOiAnUGxlYXNlIGNvcnJlY3QgdGhlIGVycm9ycyBiZWZvcmUgc3VibWl0dGluZy4nLFxuICAgICAgICB9KTtcblxuICAgICAgICB0aGlzLnNjcm9sbFRvRmlyc3RWYWxpZGF0aW9uRXJyb3IoKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZighdGhpcy5jYW5TdWJtaXQgfHwgdGhpcy5mb3JtR3JvdXAgPT09IHVuZGVmaW5lZCB8fCB0aGlzLnRlbXBsYXRlID09PSB1bmRlZmluZWQpXG4gICAgICByZXR1cm47XG5cbiAgICB0aGlzLl9pc0xvYWRpbmcgPSB0cnVlO1xuXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5nZXRDbGllbnQoKS5zdWJtaXQodGhpcy50ZW1wbGF0ZSwgdGhpcy5mb3JtR3JvdXAhLnZhbHVlKTtcblxuICAgICAgaWYgKCFyZXNwb25zZS5vaykge1xuICAgICAgICBsZXQgc3VtbWFyeSA9ICdFcnJvcic7XG4gICAgICAgIGxldCBkZXRhaWwgPSAnRXJyb3Igd2hpbGUgc2F2aW5nIHRoZSByZXNvdXJjZS4nO1xuICAgICAgICBpZiAoUHJvYmxlbURldGFpbHMuaXNQcm9ibGVtRGV0YWlscyhyZXNwb25zZS5ib2R5KSkge1xuICAgICAgICAgIGNvbnN0IHByb2JsZW1EZXRhaWxzID0gcmVzcG9uc2UuYm9keSBhcyBQcm9ibGVtRGV0YWlscztcbiAgICAgICAgICBzdW1tYXJ5ID0gcHJvYmxlbURldGFpbHMudGl0bGUgfHwgc3VtbWFyeTtcbiAgICAgICAgICBkZXRhaWwgPSBwcm9ibGVtRGV0YWlscy5kZXRhaWwgfHwgZGV0YWlsO1xuICAgICAgICAgIC8vIGRpc3BsYXkgdmFsaWRhdGlvbiBlcnJvcnNcbiAgICAgICAgICBpZiAocHJvYmxlbURldGFpbHNbJ2Vycm9ycyddIGFzIHt9KSB7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IFtrZXksIGVycm9yc0ZvcktleV0gb2YgT2JqZWN0LmVudHJpZXMocHJvYmxlbURldGFpbHNbJ2Vycm9ycyddIGFzIHt9KSkge1xuICAgICAgICAgICAgICBjb25zdCBwYXRoID0ga2V5LnNwbGl0KC9cXC58XFxbLykubWFwKGUgPT4gZS5yZXBsYWNlKFwiXVwiLCBcIlwiKSk7XG4gICAgICAgICAgICAgIC8vIFRoZSBwYXRoIG1pZ2h0IHN0YXJ0IHdpdGggYSAkLCBpbmRpY2F0aW5nIHRoZSByb290LlxuICAgICAgICAgICAgICBpZiAocGF0aC5sZW5ndGggPiAwICYmIHBhdGhbMF0gPT09ICckJylcbiAgICAgICAgICAgICAgICBwYXRoLnNoaWZ0KCk7XG4gICAgICAgICAgICAgIGNvbnN0IGZvcm1Db250cm9sID0gcGF0aC5yZWR1Y2U8QWJzdHJhY3RDb250cm9sIHwgdW5kZWZpbmVkPihSZXN0V29ybGRGb3JtQ29tcG9uZW50LmdldFN1YkNvbnRyb2wsIHRoaXMuZm9ybUdyb3VwKTtcbiAgICAgICAgICAgICAgaWYgKGZvcm1Db250cm9sKSB7XG4gICAgICAgICAgICAgICAgZm9ybUNvbnRyb2wuc2V0RXJyb3JzKHsgLi4uZm9ybUNvbnRyb2wuZXJyb3JzLCAuLi57IHJlbW90ZTogZXJyb3JzRm9yS2V5IH0gfSk7XG4gICAgICAgICAgICAgICAgZm9ybUNvbnRyb2wubWFya0FzVG91Y2hlZCgpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fbWVzc2FnZVNlcnZpY2UuYWRkKHsgc2V2ZXJpdHk6ICdlcnJvcicsIHN1bW1hcnk6IHN1bW1hcnksIGRldGFpbDogZGV0YWlsLCBkYXRhOiByZXNwb25zZSwgc3RpY2t5OiB0cnVlIH0pO1xuICAgICAgfVxuICAgICAgZWxzZSBpZiAocmVzcG9uc2Uuc3RhdHVzID09IDIwMSkge1xuICAgICAgICBpZiAoIXJlc3BvbnNlLmhlYWRlcnMuaGFzKCdMb2NhdGlvbicpKSB7XG4gICAgICAgICAgdGhpcy5fbWVzc2FnZVNlcnZpY2UuYWRkKHsgc2V2ZXJpdHk6ICdlcnJvcicsIHN1bW1hcnk6ICdFcnJvcicsIGRldGFpbDogJ1RoZSBzZXJ2ZXIgcmV0dXJuZWQgYSAyMDEgQ3JlYXRlZCByZXNwb25zZSwgYnV0IGRpZCBub3QgcmV0dXJuIGEgTG9jYXRpb24gaGVhZGVyLicsIGRhdGE6IHJlc3BvbnNlLCBzdGlja3k6IHRydWUgfSk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fbWVzc2FnZVNlcnZpY2UuYWRkKHsgc2V2ZXJpdHk6ICdzdWNjZXNzJywgc3VtbWFyeTogJ0NyZWF0ZWQnLCBkZXRhaWw6ICdUaGUgcmVzb3VyY2UgaGFzIGJlZW4gY3JlYXRlZC4nIH0pO1xuXG4gICAgICAgIHZhciBjcmVhdGVkQXRVcmkgPSByZXNwb25zZS5oZWFkZXJzLmdldCgnTG9jYXRpb24nKSE7XG4gICAgICAgIHRoaXMuYWZ0ZXJTdWJtaXQuZW1pdCh7IGxvY2F0aW9uOiBjcmVhdGVkQXRVcmksIHN0YXR1czogMjAxIH0pO1xuICAgICAgfVxuICAgICAgZWxzZSB7XG4gICAgICAgIGNvbnN0IHRlbXBsYXRlQmVmb3JlU3VibWl0ID0gdGhpcy50ZW1wbGF0ZTtcbiAgICAgICAgY29uc3QgcmVzcG9uc2VSZXNvdXJjZSA9IChyZXNwb25zZS5ib2R5IGFzIEZvcm1zUmVzb3VyY2UpO1xuICAgICAgICB0aGlzLnRlbXBsYXRlID0gcmVzcG9uc2VSZXNvdXJjZS5nZXRUZW1wbGF0ZUJ5VGl0bGUodGhpcy50ZW1wbGF0ZS50aXRsZSEpIGFzIFRlbXBsYXRlPFRQcm9wZXJ0eUR0b3M+O1xuICAgICAgICB0aGlzLl9mb3JtR3JvdXAgPSB0aGlzLl9mb3JtU2VydmljZS5jcmVhdGVGb3JtR3JvdXBGcm9tVGVtcGxhdGUodGhpcy50ZW1wbGF0ZSk7XG5cbiAgICAgICAgdGhpcy5fbWVzc2FnZVNlcnZpY2UuYWRkKHsgc2V2ZXJpdHk6ICdzdWNjZXNzJywgc3VtbWFyeTogJ1NhdmVkJywgZGV0YWlsOiAnVGhlIHJlc291cmNlIGhhcyBiZWVuIHNhdmVkLicgfSk7XG5cbiAgICAgICAgdGhpcy5hZnRlclN1Ym1pdC5lbWl0KHsgb2xkOiB0ZW1wbGF0ZUJlZm9yZVN1Ym1pdCwgbmV3OiB0aGlzLnRlbXBsYXRlLCBzdGF0dXM6IDIwMCB9KTtcbiAgICAgIH1cbiAgICB9XG4gICAgY2F0Y2ggKGU6IHVua25vd24pIHtcbiAgICAgIHRoaXMuX21lc3NhZ2VTZXJ2aWNlLmFkZCh7IHNldmVyaXR5OiAnZXJyb3InLCBzdW1tYXJ5OiAnRXJyb3InLCBkZXRhaWw6IGBBbiB1bmtub3duIGVycm9yIG9jY3VycmVkLiAke0pTT04uc3RyaW5naWZ5KGUpfWAsIHN0aWNreTogdHJ1ZSB9KTtcbiAgICAgIGNvbnNvbGUubG9nKGUpO1xuICAgIH1cblxuICAgIHRoaXMuX2lzTG9hZGluZyA9IGZhbHNlO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIGRlbGV0ZSgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAoIXRoaXMuY2FuRGVsZXRlKVxuICAgICAgcmV0dXJuO1xuXG4gICAgaWYgKHRoaXMuZm9ybUdyb3VwID09PSB1bmRlZmluZWQpXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJmb3JtR3JvdXAgY2Fubm90IGJlIHVuZGVmaW5lZC5cIik7XG5cbiAgICBpZiAodGhpcy50ZW1wbGF0ZSA9PT0gdW5kZWZpbmVkKVxuICAgICAgdGhyb3cgbmV3IEVycm9yKFwidGVtcGxhdGUgY2Fubm90IGJlIHVuZGVmaW5lZC5cIik7XG5cbiAgICBhd2FpdCB0aGlzLmdldENsaWVudCgpLmRlbGV0ZUJ5VGVtcGxhdGVBbmRGb3JtKHRoaXMudGVtcGxhdGUsIHRoaXMuZm9ybUdyb3VwKTtcbiAgICB0aGlzLl9tZXNzYWdlU2VydmljZS5hZGQoeyBzZXZlcml0eTogJ3N1Y2Nlc3MnLCBzdW1tYXJ5OiAnRGVsZXRlZCcsIGRldGFpbDogJ1RoZSByZXNvdXJjZSBoYXMgYmVlbiBkZWxldGVkLicgfSlcblxuICAgIHRoaXMuYWZ0ZXJEZWxldGUuZW1pdCgpO1xuICB9XG5cbiAgcHJpdmF0ZSBzdGF0aWMgZ2V0U3ViQ29udHJvbChjb250cm9sOiBBYnN0cmFjdENvbnRyb2wgfCB1bmRlZmluZWQsIHBhdGhFbGVtZW50OiBzdHJpbmcpOiBBYnN0cmFjdENvbnRyb2wgfCB1bmRlZmluZWQge1xuICAgIGlmIChwYXRoRWxlbWVudCA9PT0gXCJcIilcbiAgICAgIHJldHVybiBjb250cm9sO1xuXG4gICAgaWYgKGNvbnRyb2wgaW5zdGFuY2VvZiBVbnR5cGVkRm9ybUdyb3VwKVxuICAgICAgcmV0dXJuIGNvbnRyb2wuY29udHJvbHNbcGF0aEVsZW1lbnRdO1xuXG4gICAgaWYgKGNvbnRyb2wgaW5zdGFuY2VvZiBVbnR5cGVkRm9ybUFycmF5KSB7XG4gICAgICBjb25zdCBpbmRleCA9IE51bWJlci5wYXJzZUludChwYXRoRWxlbWVudCk7XG4gICAgICBpZiAoTnVtYmVyLmlzSW50ZWdlcihpbmRleCkpXG4gICAgICAgIHJldHVybiBjb250cm9sLmNvbnRyb2xzW2luZGV4XTtcbiAgICB9XG5cbiAgICByZXR1cm4gY29udHJvbDtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0Q2xpZW50KCk6IFJlc3RXb3JsZENsaWVudCB7XG4gICAgcmV0dXJuIHRoaXMuX2NsaWVudHMuZ2V0Q2xpZW50KHRoaXMuYXBpTmFtZSk7XG4gIH1cbn1cbiIsIjxmb3JtICpuZ0lmPVwiZm9ybUdyb3VwICE9PSB1bmRlZmluZWQgJiYgdGVtcGxhdGUgIT09IHVuZGVmaW5lZFwiIFtmb3JtR3JvdXBdPVwiZm9ybUdyb3VwXCIgKG5nU3VibWl0KT1cInN1Ym1pdCgpXCI+XG4gIDxkaXYgY2xhc3M9XCJibG9ja2FibGUtY29udGFpbmVyXCI+XG4gICAgPGRpdiBjbGFzcz1cImJsb2NrYWJsZS1lbGVtZW50XCI+XG4gICAgICA8ZGl2IGNsYXNzPVwiZ3JpZCBmaWVsZFwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTEyIG1kOmNvbC0xMCBtZDpjb2wtb2Zmc2V0LTJcIj5cbiAgICAgICAgICA8cnctdmFsaWRhdGlvbi1lcnJvcnMgW2Zvcm1dPVwiZm9ybUdyb3VwXCI+PC9ydy12YWxpZGF0aW9uLWVycm9ycz5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxuZy10ZW1wbGF0ZSAjZGVmYXVsdENvbnRlbnQ+XG4gICAgICAgIDxydy1pbnB1dC10ZW1wbGF0ZSBbdGVtcGxhdGVdPVwidGVtcGxhdGVcIiBbYXBpTmFtZV09XCJhcGlOYW1lXCI+PC9ydy1pbnB1dC10ZW1wbGF0ZT5cbiAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiY29udGVudFJlZiA/PyBkZWZhdWx0Q29udGVudDsgY29udGV4dDogeyBmb3JtOiBmb3JtR3JvdXAsIHRlbXBsYXRlOiB0ZW1wbGF0ZSwgYXBpTmFtZTogYXBpTmFtZSB9XCI+PC9uZy1jb250YWluZXI+XG4gICAgPC9kaXY+XG4gICAgPGRpdiBjbGFzcz1cImJsb2NrYWJsZS1vdmVybGF5XCIgKm5nSWY9XCJpc0xvYWRpbmdcIj5cbiAgICAgIDxwLXByb2dyZXNzU3Bpbm5lcj48L3AtcHJvZ3Jlc3NTcGlubmVyPlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cblxuICA8ZGl2IGNsYXNzPVwiZ3JpZFwiPlxuICAgIDxkaXYgY2xhc3M9XCJjb2xcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGp1c3RpZnktY29udGVudC1lbmQgdy1mdWxsXCI+XG4gICAgICAgIDxuZy10ZW1wbGF0ZSAjZGVmYXVsdEJ1dHRvbnM+XG4gICAgICAgICAgPGJ1dHRvbiBwQnV0dG9uIHBSaXBwbGUgdHlwZT1cInN1Ym1pdFwiIGxhYmVsPVwiU2F2ZVwiIGljb249XCJmYXIgZmEtc2F2ZVwiIGNsYXNzPVwibXgtMiBwLWJ1dHRvbi1zdWNjZXNzXCJcbiAgICAgICAgICAgIFtkaXNhYmxlZF09XCIhYWxsb3dTdWJtaXRcIj48L2J1dHRvbj5cbiAgICAgICAgICA8YnV0dG9uIHBCdXR0b24gcFJpcHBsZSB0eXBlPVwiYnV0dG9uXCIgbGFiZWw9XCJSZWxvYWRcIiBpY29uPVwiZmFzIGZhLXJlZG9cIiBjbGFzcz1cIm14LTIgcC1idXR0b24taW5mb1wiXG4gICAgICAgICAgICAoY2xpY2spPVwicmVsb2FkKClcIiBbZGlzYWJsZWRdPVwiIWNhblJlbG9hZFwiPjwvYnV0dG9uPlxuICAgICAgICAgIDxidXR0b24gcEJ1dHRvbiBwUmlwcGxlIHR5cGU9XCJidXR0b25cIiBsYWJlbD1cIkRlbGV0ZVwiIGljb249XCJmYXIgZmEtdHJhc2gtYWx0XCIgY2xhc3M9XCJtbC0yIHAtYnV0dG9uLWRhbmdlclwiXG4gICAgICAgICAgICAoY2xpY2spPVwic2hvd0RlbGV0ZUNvbmZpcm1hdGlvTW9kYWwoKVwiIFtkaXNhYmxlZF09XCIhY2FuRGVsZXRlXCI+PC9idXR0b24+XG4gICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJidXR0b25zUmVmID8/IGRlZmF1bHRCdXR0b25zOyBjb250ZXh0OiB7IGZvcm06IGZvcm1Hcm91cCwgdGVtcGxhdGU6IHRlbXBsYXRlLCBhcGlOYW1lOiBhcGlOYW1lIH1cIj48L25nLWNvbnRhaW5lcj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbjwvZm9ybT5cbiJdfQ==
295
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVzdHdvcmxkLWZvcm0uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LXJlc3R3b3JsZC1jbGllbnQvc3JjL2xpYi9jb21wb25lbnRzL3Jlc3R3b3JsZC1mb3JtL3Jlc3R3b3JsZC1mb3JtLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1yZXN0d29ybGQtY2xpZW50L3NyYy9saWIvY29tcG9uZW50cy9yZXN0d29ybGQtZm9ybS9yZXN0d29ybGQtZm9ybS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBYyxZQUFZLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBZSxNQUFNLGVBQWUsQ0FBQztBQUM5RyxPQUFPLEVBQThCLGdCQUFnQixFQUFFLGdCQUFnQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDaEcsT0FBTyxFQUE4QixjQUFjLEVBQXNDLE1BQU0seUJBQXlCLENBQUM7Ozs7Ozs7Ozs7OztBQU16SDs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBd0JHO0FBTUgsTUFBTSxPQUFPLHNCQUFzQjtJQXdIZDtJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBM0huQjs7T0FFRztJQUNLLFNBQVMsQ0FBMkI7SUFDNUMsSUFBVyxRQUFRO1FBQ2pCLE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQztJQUN4QixDQUFDO0lBQ0QsSUFDVyxRQUFRLENBQUMsS0FBOEI7UUFDaEQsSUFBSSxDQUFDLFNBQVMsR0FBRyxLQUFLLENBQUM7UUFDdkIsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLDJCQUEyQixDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ3pFLENBQUM7SUFHRCxPQUFPLENBQVU7SUFHakIsR0FBRyxDQUFVO0lBRWI7O01BRUU7SUFFRixXQUFXLEdBQUcsSUFBSSxDQUFDO0lBRW5COztNQUVFO0lBRUYsV0FBVyxHQUFHLElBQUksQ0FBQztJQUVuQjs7TUFFRTtJQUVGLFdBQVcsR0FBRyxJQUFJLENBQUM7SUFFbkI7O01BRUU7SUFFRixVQUFVLEdBQUcsSUFBSSxDQUFDO0lBRWxCOztNQUVFO0lBRUYsVUFBVSxHQUFHLElBQUksQ0FBQztJQUVsQjs7TUFFRTtJQUVGLFVBQVUsR0FBRyxJQUFJLENBQUM7SUFHbEIsV0FBVyxHQUFHLElBQUksWUFBWSxFQUFRLENBQUM7SUFHdkMsV0FBVyxHQUFHLElBQUksWUFBWSxFQUFpRCxDQUFDO0lBRWhGOztNQUVFO0lBRUYsVUFBVSxDQUF3QjtJQUVsQzs7TUFFRTtJQUVGLFVBQVUsQ0FBd0I7SUFFbEMsNEJBQTRCO1FBQzFCLFVBQVUsQ0FBQyxHQUFHLEVBQUU7WUFDZCxNQUFNLHVCQUF1QixHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsYUFBYSxDQUFDLGdCQUFnQixDQUFDLHFDQUFxQyxDQUFDLENBQUE7WUFDdEgsTUFBTSxVQUFVLEdBQUcsdUJBQXVCLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDOUMsVUFBVSxDQUFDLGNBQWMsQ0FBQyxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBQyxDQUFDLENBQUM7UUFDcEUsQ0FBQyxFQUNELEdBQUcsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUVPLFVBQVUsR0FBRyxLQUFLLENBQUM7SUFDM0IsSUFBVyxTQUFTO1FBQ2xCLE9BQU8sSUFBSSxDQUFDLFVBQVUsQ0FBQztJQUN6QixDQUFDO0lBRU8sVUFBVSxDQUFrQjtJQUNwQyxJQUFXLFNBQVM7UUFDbEIsT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFDO0lBQ3pCLENBQUM7SUFFRCxJQUFXLFNBQVM7UUFDbEIsT0FBTyxJQUFJLENBQUMsV0FBVztZQUNyQixJQUFJLENBQUMsUUFBUSxLQUFLLFNBQVM7WUFDM0IsSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLEtBQUssU0FBUztZQUNsQyxDQUFDLElBQUksQ0FBQyxTQUFTO1lBQ2YsSUFBSSxDQUFDLFNBQVMsS0FBSyxTQUFTO1lBQzVCLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDO0lBQ3pCLENBQUM7SUFFRCxJQUFXLFNBQVM7UUFDbEIsT0FBTyxJQUFJLENBQUMsV0FBVztZQUNyQixJQUFJLENBQUMsUUFBUSxLQUFLLFNBQVM7WUFDM0IsSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLEtBQUssU0FBUztZQUNsQyxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sSUFBSSxLQUFLO1lBQzdCLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQztJQUNwQixDQUFDO0lBRUQsSUFBVyxTQUFTO1FBQ2xCLE9BQU8sSUFBSSxDQUFDLFdBQVc7WUFDckIsSUFBSSxDQUFDLFFBQVEsS0FBSyxTQUFTO1lBQzNCLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxLQUFLLFNBQVM7WUFDbEMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxLQUFLLEtBQUssU0FBUztZQUNqQyxJQUFJLENBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxLQUFLLElBQUksSUFBSSxDQUFDLENBQUMsS0FBSyxLQUFLLFNBQVMsSUFBSSxDQUFDLENBQUMsS0FBSyxLQUFLLElBQUksSUFBSSxDQUFDLENBQUMsS0FBSyxLQUFLLENBQUMsQ0FBQztZQUNqSCxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUM7SUFDcEIsQ0FBQztJQUVELFlBQ21CLFFBQW1DLEVBQ25DLG9CQUF5QyxFQUN6QyxlQUErQixFQUMvQixZQUF5QixFQUN6QixXQUFvQztRQUpwQyxhQUFRLEdBQVIsUUFBUSxDQUEyQjtRQUNuQyx5QkFBb0IsR0FBcEIsb0JBQW9CLENBQXFCO1FBQ3pDLG9CQUFlLEdBQWYsZUFBZSxDQUFnQjtRQUMvQixpQkFBWSxHQUFaLFlBQVksQ0FBYTtRQUN6QixnQkFBVyxHQUFYLFdBQVcsQ0FBeUI7SUFDdkQsQ0FBQztJQUVNLEtBQUssQ0FBQyxNQUFNO1FBQ2pCLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxJQUFJLElBQUksQ0FBQyxRQUFRLEtBQUssU0FBUztZQUNoRCxPQUFPO1FBRVQsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUM7UUFFdkIsSUFDQSxDQUFDO1lBQ0MsTUFBTSxRQUFRLEdBQUcsTUFBTSxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTyxDQUFDLENBQUM7WUFDdkUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxFQUFFLElBQUksY0FBYyxDQUFDLGdCQUFnQixDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLEVBQUUsQ0FBQztnQkFDckYsSUFBSSxDQUFDLGVBQWUsQ0FBQyxHQUFHLENBQUMsRUFBRSxRQUFRLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLGdEQUFnRCxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7WUFDNUosQ0FBQztpQkFDSSxDQUFDO2dCQUNKLElBQUksQ0FBQyxRQUFRLEdBQUcsUUFBUSxDQUFDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLEtBQU0sQ0FBNEIsQ0FBQztnQkFDbEcsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLDJCQUEyQixDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztZQUNqRixDQUFDO1FBQ0gsQ0FBQztRQUNELE9BQU8sQ0FBVSxFQUFFLENBQUM7WUFDbEIsSUFBSSxDQUFDLGVBQWUsQ0FBQyxHQUFHLENBQUMsRUFBRSxRQUFRLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLDhCQUE4QixJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7WUFDM0ksT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNqQixDQUFDO1FBRUQsSUFBSSxDQUFDLFVBQVUsR0FBRyxLQUFLLENBQUM7SUFDMUIsQ0FBQztJQUVNLDBCQUEwQjtRQUMvQixJQUFJLENBQUMsb0JBQW9CLENBQUMsT0FBTyxDQUFDO1lBQ2hDLE9BQU8sRUFBRSw2Q0FBNkM7WUFDdEQsTUFBTSxFQUFFLGdCQUFnQjtZQUN4QixJQUFJLEVBQUUsa0JBQWtCO1lBQ3hCLE1BQU0sRUFBRSxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFO1NBQzVCLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFTSxLQUFLLENBQUMsTUFBTTtRQUNqQixJQUFHLElBQUksQ0FBQyxTQUFTLEtBQUssU0FBUyxFQUMvQixDQUFDO1lBQ0MsSUFBSSxDQUFDLFNBQVMsQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO1lBRWxDLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssRUFBRSxDQUFDO2dCQUMxQixJQUFJLENBQUMsZUFBZSxDQUFDLEdBQUcsQ0FBQztvQkFDdkIsUUFBUSxFQUFFLE9BQU87b0JBQ2pCLE9BQU8sRUFBRSxPQUFPO29CQUNoQixNQUFNLEVBQUUsOENBQThDO2lCQUN2RCxDQUFDLENBQUM7Z0JBRUgsSUFBSSxDQUFDLDRCQUE0QixFQUFFLENBQUM7WUFDdEMsQ0FBQztRQUNILENBQUM7UUFFRCxJQUFHLENBQUMsSUFBSSxDQUFDLFNBQVMsSUFBSSxJQUFJLENBQUMsU0FBUyxLQUFLLFNBQVMsSUFBSSxJQUFJLENBQUMsUUFBUSxLQUFLLFNBQVM7WUFDL0UsT0FBTztRQUVULElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDO1FBRXZCLElBQUksQ0FBQztZQUNILE1BQU0sUUFBUSxHQUFHLE1BQU0sSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxTQUFVLENBQUMsS0FBSyxDQUFDLENBQUM7WUFFckYsSUFBSSxDQUFDLFFBQVEsQ0FBQyxFQUFFLEVBQUUsQ0FBQztnQkFDakIsSUFBSSxPQUFPLEdBQUcsT0FBTyxDQUFDO2dCQUN0QixJQUFJLE1BQU0sR0FBRyxrQ0FBa0MsQ0FBQztnQkFDaEQsSUFBSSxjQUFjLENBQUMsZ0JBQWdCLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUM7b0JBQ25ELE1BQU0sY0FBYyxHQUFHLFFBQVEsQ0FBQyxJQUFzQixDQUFDO29CQUN2RCxPQUFPLEdBQUcsY0FBYyxDQUFDLEtBQUssSUFBSSxPQUFPLENBQUM7b0JBQzFDLE1BQU0sR0FBRyxjQUFjLENBQUMsTUFBTSxJQUFJLE1BQU0sQ0FBQztvQkFDekMsNEJBQTRCO29CQUM1QixJQUFJLGNBQWMsQ0FBQyxRQUFRLENBQU8sRUFBRSxDQUFDO3dCQUNuQyxLQUFLLE1BQU0sQ0FBQyxHQUFHLEVBQUUsWUFBWSxDQUFDLElBQUksTUFBTSxDQUFDLE9BQU8sQ0FBQyxjQUFjLENBQUMsUUFBUSxDQUFPLENBQUMsRUFBRSxDQUFDOzRCQUNqRixNQUFNLElBQUksR0FBRyxHQUFHLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUM7NEJBQzdELHNEQUFzRDs0QkFDdEQsSUFBSSxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRztnQ0FDcEMsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDOzRCQUNmLE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQThCLHNCQUFzQixDQUFDLGFBQWEsRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7NEJBQ25ILElBQUksV0FBVyxFQUFFLENBQUM7Z0NBQ2hCLFdBQVcsQ0FBQyxTQUFTLENBQUMsRUFBRSxHQUFHLFdBQVcsQ0FBQyxNQUFNLEVBQUUsR0FBRyxFQUFFLE1BQU0sRUFBRSxZQUFZLEVBQUUsRUFBRSxDQUFDLENBQUM7Z0NBQzlFLFdBQVcsQ0FBQyxhQUFhLEVBQUUsQ0FBQzs0QkFDOUIsQ0FBQzt3QkFDSCxDQUFDO29CQUNILENBQUM7Z0JBQ0gsQ0FBQztnQkFFRCxJQUFJLENBQUMsZUFBZSxDQUFDLEdBQUcsQ0FBQyxFQUFFLFFBQVEsRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7WUFDbEgsQ0FBQztpQkFDSSxJQUFJLFFBQVEsQ0FBQyxNQUFNLElBQUksR0FBRyxFQUFFLENBQUM7Z0JBQ2hDLElBQUksQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFDO29CQUN0QyxJQUFJLENBQUMsZUFBZSxDQUFDLEdBQUcsQ0FBQyxFQUFFLFFBQVEsRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsbUZBQW1GLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztvQkFDN0wsT0FBTztnQkFDVCxDQUFDO2dCQUVELElBQUksQ0FBQyxlQUFlLENBQUMsR0FBRyxDQUFDLEVBQUUsUUFBUSxFQUFFLFNBQVMsRUFBRSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBRSxnQ0FBZ0MsRUFBRSxDQUFDLENBQUM7Z0JBRWhILElBQUksWUFBWSxHQUFHLFFBQVEsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBRSxDQUFDO2dCQUNyRCxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxFQUFFLFFBQVEsRUFBRSxZQUFZLEVBQUUsTUFBTSxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUM7WUFDakUsQ0FBQztpQkFDSSxDQUFDO2dCQUNKLE1BQU0sb0JBQW9CLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQztnQkFDM0MsTUFBTSxnQkFBZ0IsR0FBSSxRQUFRLENBQUMsSUFBc0IsQ0FBQztnQkFDMUQsSUFBSSxDQUFDLFFBQVEsR0FBRyxnQkFBZ0IsQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLEtBQU0sQ0FBNEIsQ0FBQztnQkFDckcsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLDJCQUEyQixDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztnQkFFL0UsSUFBSSxDQUFDLGVBQWUsQ0FBQyxHQUFHLENBQUMsRUFBRSxRQUFRLEVBQUUsU0FBUyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLDhCQUE4QixFQUFFLENBQUMsQ0FBQztnQkFFNUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsRUFBRSxHQUFHLEVBQUUsb0JBQW9CLEVBQUUsR0FBRyxFQUFFLElBQUksQ0FBQyxRQUFRLEVBQUUsTUFBTSxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUM7WUFDeEYsQ0FBQztRQUNILENBQUM7UUFDRCxPQUFPLENBQVUsRUFBRSxDQUFDO1lBQ2xCLElBQUksQ0FBQyxlQUFlLENBQUMsR0FBRyxDQUFDLEVBQUUsUUFBUSxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSw4QkFBOEIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO1lBQzNJLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDakIsQ0FBQztRQUVELElBQUksQ0FBQyxVQUFVLEdBQUcsS0FBSyxDQUFDO0lBQzFCLENBQUM7SUFFTSxLQUFLLENBQUMsTUFBTTtRQUNqQixJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVM7WUFDakIsT0FBTztRQUVULElBQUksSUFBSSxDQUFDLFNBQVMsS0FBSyxTQUFTO1lBQzlCLE1BQU0sSUFBSSxLQUFLLENBQUMsZ0NBQWdDLENBQUMsQ0FBQztRQUVwRCxJQUFJLElBQUksQ0FBQyxRQUFRLEtBQUssU0FBUztZQUM3QixNQUFNLElBQUksS0FBSyxDQUFDLCtCQUErQixDQUFDLENBQUM7UUFFbkQsTUFBTSxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUMsdUJBQXVCLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDOUUsSUFBSSxDQUFDLGVBQWUsQ0FBQyxHQUFHLENBQUMsRUFBRSxRQUFRLEVBQUUsU0FBUyxFQUFFLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFFLGdDQUFnQyxFQUFFLENBQUMsQ0FBQTtRQUUvRyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksRUFBRSxDQUFDO0lBQzFCLENBQUM7SUFFTyxNQUFNLENBQUMsYUFBYSxDQUFDLE9BQW9DLEVBQUUsV0FBbUI7UUFDcEYsSUFBSSxXQUFXLEtBQUssRUFBRTtZQUNwQixPQUFPLE9BQU8sQ0FBQztRQUVqQixJQUFJLE9BQU8sWUFBWSxnQkFBZ0I7WUFDckMsT0FBTyxPQUFPLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBRXZDLElBQUksT0FBTyxZQUFZLGdCQUFnQixFQUFFLENBQUM7WUFDeEMsTUFBTSxLQUFLLEdBQUcsTUFBTSxDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUMsQ0FBQztZQUMzQyxJQUFJLE1BQU0sQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDO2dCQUN6QixPQUFPLE9BQU8sQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDbkMsQ0FBQztRQUVELE9BQU8sT0FBTyxDQUFDO0lBQ2pCLENBQUM7SUFFTyxTQUFTO1FBQ2YsT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDL0MsQ0FBQzt1R0FsUlUsc0JBQXNCOzJGQUF0QixzQkFBc0IsbWhCQ3RDbkMsaXdEQWtDQTs7MkZESWEsc0JBQXNCO2tCQUxsQyxTQUFTOytCQUNFLFNBQVM7Z05BYVIsUUFBUTtzQkFEbEIsS0FBSzt1QkFBQyxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUU7Z0JBT3pCLE9BQU87c0JBRE4sS0FBSzt1QkFBQyxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUU7Z0JBSXpCLEdBQUc7c0JBREYsS0FBSzt1QkFBQyxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUU7Z0JBT3pCLFdBQVc7c0JBRFYsS0FBSztnQkFPTixXQUFXO3NCQURWLEtBQUs7Z0JBT04sV0FBVztzQkFEVixLQUFLO2dCQU9OLFVBQVU7c0JBRFQsS0FBSztnQkFPTixVQUFVO3NCQURULEtBQUs7Z0JBT04sVUFBVTtzQkFEVCxLQUFLO2dCQUlOLFdBQVc7c0JBRFYsTUFBTTtnQkFJUCxXQUFXO3NCQURWLE1BQU07Z0JBT1AsVUFBVTtzQkFEVCxZQUFZO3VCQUFDLFNBQVMsRUFBRSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUU7Z0JBTzFDLFVBQVU7c0JBRFQsWUFBWTt1QkFBQyxTQUFTLEVBQUUsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBDb250ZW50Q2hpbGQsIEVsZW1lbnRSZWYsIEV2ZW50RW1pdHRlciwgSW5wdXQsIE91dHB1dCwgVGVtcGxhdGVSZWYgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEFic3RyYWN0Q29udHJvbCwgRm9ybUdyb3VwLCBVbnR5cGVkRm9ybUFycmF5LCBVbnR5cGVkRm9ybUdyb3VwIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgRm9ybVNlcnZpY2UsIEZvcm1zUmVzb3VyY2UsIFByb2JsZW1EZXRhaWxzLCBQcm9wZXJ0eUR0bywgU2ltcGxlVmFsdWUsIFRlbXBsYXRlIH0gZnJvbSAnQHdlcnR6dWkvbmd4LWhhbC1jbGllbnQnO1xuaW1wb3J0IHsgQ29uZmlybWF0aW9uU2VydmljZSwgTWVzc2FnZVNlcnZpY2UgfSBmcm9tICdwcmltZW5nL2FwaSc7XG5pbXBvcnQgeyBSZXN0V29ybGRDbGllbnQgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9yZXN0d29ybGQtY2xpZW50JztcbmltcG9ydCB7IFJlc3RXb3JsZENsaWVudENvbGxlY3Rpb24gfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9yZXN0d29ybGQtY2xpZW50LWNvbGxlY3Rpb24nO1xuaW1wb3J0IHsgQWZ0ZXJTdWJtaXRPa0V2ZW50LCBBZnRlclN1Ym1pdFJlZGlyZWN0RXZlbnQgfSBmcm9tICcuLi8uLi9tb2RlbHMvZXZlbnRzJztcblxuLyoqXG4gKiBBIGZvcm0gd2l0aCBTYXZlLCBSZWxvYWQgYW5kIERlbGV0ZSBidXR0b25zLlxuICogSWYgeW91IGRvIG5vdCB3YW50IGJ1dHRvbnMsIHVzZSBSZXN0V29ybGRGb3JtVGVtcGxhdGVDb21wb25lbnQgPHJ3LWZvcm0tdGVtcGxhdGU+LlxuICogWW91IGNhbiBhbHNvIHByb3ZpZGUgeW91ciBvd24gYnV0dG9ucyBieSBwYXNzaW5nIGluIGEgdGVtcGxhdGUuXG4gKiBAZXhhbXBsZVxuICogPHJ3LWZvcm1cbiAqICBbdGVtcGxhdGVdPVwidGVtcGxhdGVcIlxuICogIGFwaU5hbWU9XCJhcGlOYW1lXCJcbiAqICByZWw9XCJyZWxcIlxuICogIFthbGxvd1N1Ym1pdF09XCJ0cnVlXCJcbiAqICBbYWxsb3dEZWxldGVdPVwidHJ1ZVwiXG4gKiAgW2FsbG93UmVsb2FkXT1cInRydWVcIlxuICogIFtzaG93U3VibWl0XT1cInRydWVcIlxuICogIFtzaG93RGVsZXRlXT1cInRydWVcIlxuICogIFtzaG93UmVsb2FkXT1cInRydWVcIj5cbiAqICA8bmctdGVtcGxhdGUgI2NvbnRlbnQgbGV0LWZvcm09XCJmb3JtXCIgbGV0LXRlbXBsYXRlPVwidGVtcGxhdGVcIiBsZXQtYXBpTmFtZT1cImFwaU5hbWVcIj5cbiAqICAgIDwhLS0gQ3VzdG9tIGZvcm0gY29udGVudCBoZXJlIC0tPlxuICogICAgPCEtLSBUaGlzIGlzIG9wdGlvbmFsIGFuZCB3aWxsIHJlcGxhY2UgdGhlIGRlZmF1bHQgd2hpY2ggcmVuZGVycyBsYWJlbHMgYW5kIGlucHV0cyBpZiBwcmVzZW50IC0tPlxuICogIDwvbmctdGVtcGxhdGU+XG4gKiAgPG5nLXRlbXBsYXRlICNidXR0b25zIGxldC1mb3JtPVwiZm9ybVwiIGxldC10ZW1wbGF0ZT1cInRlbXBsYXRlXCIgbGV0LWFwaU5hbWU9XCJhcGlOYW1lXCI+XG4gKiAgICA8IS0tIEN1c3RvbSBidXR0b25zIGhlcmUgLS0+XG4gKiAgICA8IS0tIFRoaXMgaXMgb3B0aW9uYWwgYW5kIHdpbGwgcmVwbGFjZSB0aGUgZGVmYXVsdCB3aGljaCByZW5kZXJzIHRoZSBTYXZlLCBSZWxvYWQgYW5kIERlbGV0ZSBidXR0b25zIGlmIHByZXNlbnQgLS0+XG4gKiAgPC9uZy10ZW1wbGF0ZT5cbiAqIDwvcnctZm9ybT5cbiAqL1xuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAncnctZm9ybScsXG4gIHRlbXBsYXRlVXJsOiAnLi9yZXN0d29ybGQtZm9ybS5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL3Jlc3R3b3JsZC1mb3JtLmNvbXBvbmVudC5jc3MnXVxufSlcbmV4cG9ydCBjbGFzcyBSZXN0V29ybGRGb3JtQ29tcG9uZW50PFRQcm9wZXJ0eUR0b3MgZXh0ZW5kcyBSZWFkb25seUFycmF5PFByb3BlcnR5RHRvPFNpbXBsZVZhbHVlLCBzdHJpbmcsIHN0cmluZz4+PiB7XG4gIC8qKlxuICAgKiBUaGUgdGVtcGxhdGUgdXNlZCB0byByZW5kZXIgdGhlIGZvcm0uXG4gICAqL1xuICBwcml2YXRlIF90ZW1wbGF0ZT86IFRlbXBsYXRlPFRQcm9wZXJ0eUR0b3M+O1xuICBwdWJsaWMgZ2V0IHRlbXBsYXRlKCk6IFRlbXBsYXRlPFRQcm9wZXJ0eUR0b3M+IHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy5fdGVtcGxhdGU7XG4gIH1cbiAgQElucHV0KHsgcmVxdWlyZWQ6IHRydWUgfSlcbiAgcHVibGljIHNldCB0ZW1wbGF0ZSh2YWx1ZTogVGVtcGxhdGU8VFByb3BlcnR5RHRvcz4pIHtcbiAgICB0aGlzLl90ZW1wbGF0ZSA9IHZhbHVlO1xuICAgIHRoaXMuX2Zvcm1Hcm91cCA9IHRoaXMuX2Zvcm1TZXJ2aWNlLmNyZWF0ZUZvcm1Hcm91cEZyb21UZW1wbGF0ZSh2YWx1ZSk7XG4gIH1cblxuICBASW5wdXQoeyByZXF1aXJlZDogdHJ1ZSB9KVxuICBhcGlOYW1lITogc3RyaW5nO1xuXG4gIEBJbnB1dCh7IHJlcXVpcmVkOiB0cnVlIH0pXG4gIHJlbCE6IHN0cmluZztcblxuICAvKipcbiAgICogRGV0ZXJtaW5lcyB3aGV0aGVyIHRvIGVuYWJsZSB0aGUgc3VibWl0IGJ1dHRvbi5cbiAgKi9cbiAgQElucHV0KClcbiAgYWxsb3dTdWJtaXQgPSB0cnVlO1xuXG4gIC8qKlxuICAgKiBEZXRlcm1pbmVzIHdoZXRoZXIgdG8gZW5hYmxlIHRoZSBkZWxldGUgYnV0dG9uLlxuICAqL1xuICBASW5wdXQoKVxuICBhbGxvd0RlbGV0ZSA9IHRydWU7XG5cbiAgLyoqXG4gICAqIERldGVybWluZXMgd2hldGhlciB0byBlbmFibGUgdGhlIHJlbG9hZCBidXR0b24uXG4gICovXG4gIEBJbnB1dCgpXG4gIGFsbG93UmVsb2FkID0gdHJ1ZTtcblxuICAvKipcbiAgICogRGV0ZXJtaW5lcyB3aGV0aGVyIHRvIHNob3cgdGhlIHN1Ym1pdCBidXR0b24uXG4gICovXG4gIEBJbnB1dCgpXG4gIHNob3dTdWJtaXQgPSB0cnVlO1xuXG4gIC8qKlxuICAgKiBEZXRlcm1pbmVzIHdoZXRoZXIgdG8gc2hvdyB0aGUgZGVsZXRlIGJ1dHRvbi5cbiAgKi9cbiAgQElucHV0KClcbiAgc2hvd0RlbGV0ZSA9IHRydWU7XG5cbiAgLyoqXG4gICAqIERldGVybWluZXMgd2hldGhlciB0byBzaG93IHRoZSByZWxvYWQgYnV0dG9uLlxuICAqL1xuICBASW5wdXQoKVxuICBzaG93UmVsb2FkID0gdHJ1ZTtcblxuICBAT3V0cHV0KClcbiAgYWZ0ZXJEZWxldGUgPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XG5cbiAgQE91dHB1dCgpXG4gIGFmdGVyU3VibWl0ID0gbmV3IEV2ZW50RW1pdHRlcjxBZnRlclN1Ym1pdE9rRXZlbnQgfCBBZnRlclN1Ym1pdFJlZGlyZWN0RXZlbnQ+KCk7XG5cbiAgLyoqXG4gICAqIEEgcmVmZXJlbmNlIHRvIGEgdGVtcGxhdGUgdGhhdCBjYW4gYmUgdXNlZCB0byByZW5kZXIgY3VzdG9tIGJ1dHRvbnMgZm9yIHRoZSBmb3JtLlxuICAqL1xuICBAQ29udGVudENoaWxkKCdidXR0b25zJywgeyBzdGF0aWM6IGZhbHNlIH0pXG4gIGJ1dHRvbnNSZWY/OiBUZW1wbGF0ZVJlZjx1bmtub3duPjtcblxuICAvKipcbiAgICogQSByZWZlcmVuY2UgdG8gYSB0ZW1wbGF0ZSB0aGF0IGNhbiBiZSB1c2VkIHRvIHJlbmRlciBjdXN0b20gY29udGVudCBpbnNpZGUgdGhlIDxmb3JtPiBlbGVtZW50IGluc3RlYWQgb2YgdGhlIGRlZmF1bHQgZm9ybS5cbiAgKi9cbiAgQENvbnRlbnRDaGlsZCgnY29udGVudCcsIHsgc3RhdGljOiBmYWxzZSB9KVxuICBjb250ZW50UmVmPzogVGVtcGxhdGVSZWY8dW5rbm93bj47XG5cbiAgc2Nyb2xsVG9GaXJzdFZhbGlkYXRpb25FcnJvcigpOiB2b2lkIHtcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIGNvbnN0IHZhbGlkYXRpb25FcnJvckVsZW1lbnRzID0gdGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ3J3LXZhbGlkYXRpb24tZXJyb3JzPnZhbC1lcnJvcnM+ZGl2JylcbiAgICAgIGNvbnN0IGZpcnN0RXJyb3IgPSB2YWxpZGF0aW9uRXJyb3JFbGVtZW50c1swXTtcbiAgICAgIGZpcnN0RXJyb3Iuc2Nyb2xsSW50b1ZpZXcoeyBiZWhhdmlvcjogJ3Ntb290aCcsIGJsb2NrOiAnY2VudGVyJ30pO1xuICAgIH0sXG4gICAgMTAwKTtcbiAgfVxuXG4gIHByaXZhdGUgX2lzTG9hZGluZyA9IGZhbHNlO1xuICBwdWJsaWMgZ2V0IGlzTG9hZGluZygpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5faXNMb2FkaW5nO1xuICB9XG5cbiAgcHJpdmF0ZSBfZm9ybUdyb3VwPzogRm9ybUdyb3VwPGFueT47XG4gIHB1YmxpYyBnZXQgZm9ybUdyb3VwKCk6IEZvcm1Hcm91cDxhbnk+IHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy5fZm9ybUdyb3VwO1xuICB9XG5cbiAgcHVibGljIGdldCBjYW5TdWJtaXQoKSA6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmFsbG93U3VibWl0ICYmXG4gICAgICB0aGlzLnRlbXBsYXRlICE9PSB1bmRlZmluZWQgJiZcbiAgICAgIHRoaXMudGVtcGxhdGUudGFyZ2V0ICE9PSB1bmRlZmluZWQgJiZcbiAgICAgICF0aGlzLmlzTG9hZGluZyAmJlxuICAgICAgdGhpcy5mb3JtR3JvdXAgIT09IHVuZGVmaW5lZCAmJlxuICAgICAgdGhpcy5mb3JtR3JvdXAudmFsaWQ7XG4gIH1cblxuICBwdWJsaWMgZ2V0IGNhbkRlbGV0ZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5hbGxvd0RlbGV0ZSAmJlxuICAgICAgdGhpcy50ZW1wbGF0ZSAhPT0gdW5kZWZpbmVkICYmXG4gICAgICB0aGlzLnRlbXBsYXRlLnRhcmdldCAhPT0gdW5kZWZpbmVkICYmXG4gICAgICB0aGlzLnRlbXBsYXRlLm1ldGhvZCA9PSBcIlBVVFwiICYmXG4gICAgICAhdGhpcy5pc0xvYWRpbmc7XG4gIH1cblxuICBwdWJsaWMgZ2V0IGNhblJlbG9hZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5hbGxvd1JlbG9hZCAmJlxuICAgICAgdGhpcy50ZW1wbGF0ZSAhPT0gdW5kZWZpbmVkICYmXG4gICAgICB0aGlzLnRlbXBsYXRlLnRhcmdldCAhPT0gdW5kZWZpbmVkICYmXG4gICAgICB0aGlzLnRlbXBsYXRlLnRpdGxlICE9PSB1bmRlZmluZWQgJiZcbiAgICAgIHRoaXMudGVtcGxhdGUucHJvcGVydGllcy5zb21lKHAgPT4gcC5uYW1lID09PSBcImlkXCIgJiYgcC52YWx1ZSAhPT0gdW5kZWZpbmVkICYmIHAudmFsdWUgIT09IG51bGwgJiYgcC52YWx1ZSAhPT0gMCkgJiZcbiAgICAgICF0aGlzLmlzTG9hZGluZztcbiAgfVxuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgcmVhZG9ubHkgX2NsaWVudHM6IFJlc3RXb3JsZENsaWVudENvbGxlY3Rpb24sXG4gICAgcHJpdmF0ZSByZWFkb25seSBfY29uZmlybWF0aW9uU2VydmljZTogQ29uZmlybWF0aW9uU2VydmljZSxcbiAgICBwcml2YXRlIHJlYWRvbmx5IF9tZXNzYWdlU2VydmljZTogTWVzc2FnZVNlcnZpY2UsXG4gICAgcHJpdmF0ZSByZWFkb25seSBfZm9ybVNlcnZpY2U6IEZvcm1TZXJ2aWNlLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgX2VsZW1lbnRSZWY6IEVsZW1lbnRSZWY8SFRNTEVsZW1lbnQ+KSB7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgcmVsb2FkKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmICghdGhpcy5jYW5SZWxvYWQgfHwgdGhpcy50ZW1wbGF0ZSA9PT0gdW5kZWZpbmVkKVxuICAgICAgcmV0dXJuO1xuXG4gICAgdGhpcy5faXNMb2FkaW5nID0gdHJ1ZTtcblxuICAgIHRyeVxuICAgIHtcbiAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5nZXRDbGllbnQoKS5nZXRGb3JtKHRoaXMudGVtcGxhdGUudGFyZ2V0ISk7XG4gICAgICBpZiAoIXJlc3BvbnNlLm9rIHx8IFByb2JsZW1EZXRhaWxzLmlzUHJvYmxlbURldGFpbHMocmVzcG9uc2UuYm9keSkgfHwgIXJlc3BvbnNlLmJvZHkpIHtcbiAgICAgICAgdGhpcy5fbWVzc2FnZVNlcnZpY2UuYWRkKHsgc2V2ZXJpdHk6ICdlcnJvcicsIHN1bW1hcnk6ICdFcnJvcicsIGRldGFpbDogJ0Vycm9yIHdoaWxlIGxvYWRpbmcgdGhlIHJlc291cmNlIGZyb20gdGhlIEFQSS4nLCBkYXRhOiByZXNwb25zZSwgc3RpY2t5OiB0cnVlIH0pO1xuICAgICAgfVxuICAgICAgZWxzZSB7XG4gICAgICAgIHRoaXMudGVtcGxhdGUgPSByZXNwb25zZS5ib2R5LmdldFRlbXBsYXRlQnlUaXRsZSh0aGlzLnRlbXBsYXRlLnRpdGxlISkgYXMgVGVtcGxhdGU8VFByb3BlcnR5RHRvcz47XG4gICAgICAgIHRoaXMuX2Zvcm1Hcm91cCA9IHRoaXMuX2Zvcm1TZXJ2aWNlLmNyZWF0ZUZvcm1Hcm91cEZyb21UZW1wbGF0ZSh0aGlzLnRlbXBsYXRlKTtcbiAgICAgIH1cbiAgICB9XG4gICAgY2F0Y2ggKGU6IHVua25vd24pIHtcbiAgICAgIHRoaXMuX21lc3NhZ2VTZXJ2aWNlLmFkZCh7IHNldmVyaXR5OiAnZXJyb3InLCBzdW1tYXJ5OiAnRXJyb3InLCBkZXRhaWw6IGBBbiB1bmtub3duIGVycm9yIG9jY3VycmVkLiAke0pTT04uc3RyaW5naWZ5KGUpfWAsIHN0aWNreTogdHJ1ZSB9KTtcbiAgICAgIGNvbnNvbGUubG9nKGUpO1xuICAgIH1cblxuICAgIHRoaXMuX2lzTG9hZGluZyA9IGZhbHNlO1xuICB9XG5cbiAgcHVibGljIHNob3dEZWxldGVDb25maXJtYXRpb01vZGFsKCkge1xuICAgIHRoaXMuX2NvbmZpcm1hdGlvblNlcnZpY2UuY29uZmlybSh7XG4gICAgICBtZXNzYWdlOiAnRG8geW91IHJlYWxseSB3YW50IHRvIGRlbGV0ZSB0aGlzIHJlc291cmNlPycsXG4gICAgICBoZWFkZXI6ICdDb25maXJtIGRlbGV0ZScsXG4gICAgICBpY29uOiAnZmFyIGZhLXRyYXNoLWFsdCcsXG4gICAgICBhY2NlcHQ6ICgpID0+IHRoaXMuZGVsZXRlKClcbiAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBzdWJtaXQoKSB7XG4gICAgaWYodGhpcy5mb3JtR3JvdXAgIT09IHVuZGVmaW5lZClcbiAgICB7XG4gICAgICB0aGlzLmZvcm1Hcm91cC5tYXJrQWxsQXNUb3VjaGVkKCk7XG5cbiAgICAgIGlmICghdGhpcy5mb3JtR3JvdXAudmFsaWQpIHtcbiAgICAgICAgdGhpcy5fbWVzc2FnZVNlcnZpY2UuYWRkKHtcbiAgICAgICAgICBzZXZlcml0eTogJ2Vycm9yJyxcbiAgICAgICAgICBzdW1tYXJ5OiAnRXJyb3InLFxuICAgICAgICAgIGRldGFpbDogJ1BsZWFzZSBjb3JyZWN0IHRoZSBlcnJvcnMgYmVmb3JlIHN1Ym1pdHRpbmcuJyxcbiAgICAgICAgfSk7XG5cbiAgICAgICAgdGhpcy5zY3JvbGxUb0ZpcnN0VmFsaWRhdGlvbkVycm9yKCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYoIXRoaXMuY2FuU3VibWl0IHx8IHRoaXMuZm9ybUdyb3VwID09PSB1bmRlZmluZWQgfHwgdGhpcy50ZW1wbGF0ZSA9PT0gdW5kZWZpbmVkKVxuICAgICAgcmV0dXJuO1xuXG4gICAgdGhpcy5faXNMb2FkaW5nID0gdHJ1ZTtcblxuICAgIHRyeSB7XG4gICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHRoaXMuZ2V0Q2xpZW50KCkuc3VibWl0KHRoaXMudGVtcGxhdGUsIHRoaXMuZm9ybUdyb3VwIS52YWx1ZSk7XG5cbiAgICAgIGlmICghcmVzcG9uc2Uub2spIHtcbiAgICAgICAgbGV0IHN1bW1hcnkgPSAnRXJyb3InO1xuICAgICAgICBsZXQgZGV0YWlsID0gJ0Vycm9yIHdoaWxlIHNhdmluZyB0aGUgcmVzb3VyY2UuJztcbiAgICAgICAgaWYgKFByb2JsZW1EZXRhaWxzLmlzUHJvYmxlbURldGFpbHMocmVzcG9uc2UuYm9keSkpIHtcbiAgICAgICAgICBjb25zdCBwcm9ibGVtRGV0YWlscyA9IHJlc3BvbnNlLmJvZHkgYXMgUHJvYmxlbURldGFpbHM7XG4gICAgICAgICAgc3VtbWFyeSA9IHByb2JsZW1EZXRhaWxzLnRpdGxlIHx8IHN1bW1hcnk7XG4gICAgICAgICAgZGV0YWlsID0gcHJvYmxlbURldGFpbHMuZGV0YWlsIHx8IGRldGFpbDtcbiAgICAgICAgICAvLyBkaXNwbGF5IHZhbGlkYXRpb24gZXJyb3JzXG4gICAgICAgICAgaWYgKHByb2JsZW1EZXRhaWxzWydlcnJvcnMnXSBhcyB7fSkge1xuICAgICAgICAgICAgZm9yIChjb25zdCBba2V5LCBlcnJvcnNGb3JLZXldIG9mIE9iamVjdC5lbnRyaWVzKHByb2JsZW1EZXRhaWxzWydlcnJvcnMnXSBhcyB7fSkpIHtcbiAgICAgICAgICAgICAgY29uc3QgcGF0aCA9IGtleS5zcGxpdCgvXFwufFxcWy8pLm1hcChlID0+IGUucmVwbGFjZShcIl1cIiwgXCJcIikpO1xuICAgICAgICAgICAgICAvLyBUaGUgcGF0aCBtaWdodCBzdGFydCB3aXRoIGEgJCwgaW5kaWNhdGluZyB0aGUgcm9vdC5cbiAgICAgICAgICAgICAgaWYgKHBhdGgubGVuZ3RoID4gMCAmJiBwYXRoWzBdID09PSAnJCcpXG4gICAgICAgICAgICAgICAgcGF0aC5zaGlmdCgpO1xuICAgICAgICAgICAgICBjb25zdCBmb3JtQ29udHJvbCA9IHBhdGgucmVkdWNlPEFic3RyYWN0Q29udHJvbCB8IHVuZGVmaW5lZD4oUmVzdFdvcmxkRm9ybUNvbXBvbmVudC5nZXRTdWJDb250cm9sLCB0aGlzLmZvcm1Hcm91cCk7XG4gICAgICAgICAgICAgIGlmIChmb3JtQ29udHJvbCkge1xuICAgICAgICAgICAgICAgIGZvcm1Db250cm9sLnNldEVycm9ycyh7IC4uLmZvcm1Db250cm9sLmVycm9ycywgLi4ueyByZW1vdGU6IGVycm9yc0ZvcktleSB9IH0pO1xuICAgICAgICAgICAgICAgIGZvcm1Db250cm9sLm1hcmtBc1RvdWNoZWQoKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX21lc3NhZ2VTZXJ2aWNlLmFkZCh7IHNldmVyaXR5OiAnZXJyb3InLCBzdW1tYXJ5OiBzdW1tYXJ5LCBkZXRhaWw6IGRldGFpbCwgZGF0YTogcmVzcG9uc2UsIHN0aWNreTogdHJ1ZSB9KTtcbiAgICAgIH1cbiAgICAgIGVsc2UgaWYgKHJlc3BvbnNlLnN0YXR1cyA9PSAyMDEpIHtcbiAgICAgICAgaWYgKCFyZXNwb25zZS5oZWFkZXJzLmhhcygnTG9jYXRpb24nKSkge1xuICAgICAgICAgIHRoaXMuX21lc3NhZ2VTZXJ2aWNlLmFkZCh7IHNldmVyaXR5OiAnZXJyb3InLCBzdW1tYXJ5OiAnRXJyb3InLCBkZXRhaWw6ICdUaGUgc2VydmVyIHJldHVybmVkIGEgMjAxIENyZWF0ZWQgcmVzcG9uc2UsIGJ1dCBkaWQgbm90IHJldHVybiBhIExvY2F0aW9uIGhlYWRlci4nLCBkYXRhOiByZXNwb25zZSwgc3RpY2t5OiB0cnVlIH0pO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX21lc3NhZ2VTZXJ2aWNlLmFkZCh7IHNldmVyaXR5OiAnc3VjY2VzcycsIHN1bW1hcnk6ICdDcmVhdGVkJywgZGV0YWlsOiAnVGhlIHJlc291cmNlIGhhcyBiZWVuIGNyZWF0ZWQuJyB9KTtcblxuICAgICAgICB2YXIgY3JlYXRlZEF0VXJpID0gcmVzcG9uc2UuaGVhZGVycy5nZXQoJ0xvY2F0aW9uJykhO1xuICAgICAgICB0aGlzLmFmdGVyU3VibWl0LmVtaXQoeyBsb2NhdGlvbjogY3JlYXRlZEF0VXJpLCBzdGF0dXM6IDIwMSB9KTtcbiAgICAgIH1cbiAgICAgIGVsc2Uge1xuICAgICAgICBjb25zdCB0ZW1wbGF0ZUJlZm9yZVN1Ym1pdCA9IHRoaXMudGVtcGxhdGU7XG4gICAgICAgIGNvbnN0IHJlc3BvbnNlUmVzb3VyY2UgPSAocmVzcG9uc2UuYm9keSBhcyBGb3Jtc1Jlc291cmNlKTtcbiAgICAgICAgdGhpcy50ZW1wbGF0ZSA9IHJlc3BvbnNlUmVzb3VyY2UuZ2V0VGVtcGxhdGVCeVRpdGxlKHRoaXMudGVtcGxhdGUudGl0bGUhKSBhcyBUZW1wbGF0ZTxUUHJvcGVydHlEdG9zPjtcbiAgICAgICAgdGhpcy5fZm9ybUdyb3VwID0gdGhpcy5fZm9ybVNlcnZpY2UuY3JlYXRlRm9ybUdyb3VwRnJvbVRlbXBsYXRlKHRoaXMudGVtcGxhdGUpO1xuXG4gICAgICAgIHRoaXMuX21lc3NhZ2VTZXJ2aWNlLmFkZCh7IHNldmVyaXR5OiAnc3VjY2VzcycsIHN1bW1hcnk6ICdTYXZlZCcsIGRldGFpbDogJ1RoZSByZXNvdXJjZSBoYXMgYmVlbiBzYXZlZC4nIH0pO1xuXG4gICAgICAgIHRoaXMuYWZ0ZXJTdWJtaXQuZW1pdCh7IG9sZDogdGVtcGxhdGVCZWZvcmVTdWJtaXQsIG5ldzogdGhpcy50ZW1wbGF0ZSwgc3RhdHVzOiAyMDAgfSk7XG4gICAgICB9XG4gICAgfVxuICAgIGNhdGNoIChlOiB1bmtub3duKSB7XG4gICAgICB0aGlzLl9tZXNzYWdlU2VydmljZS5hZGQoeyBzZXZlcml0eTogJ2Vycm9yJywgc3VtbWFyeTogJ0Vycm9yJywgZGV0YWlsOiBgQW4gdW5rbm93biBlcnJvciBvY2N1cnJlZC4gJHtKU09OLnN0cmluZ2lmeShlKX1gLCBzdGlja3k6IHRydWUgfSk7XG4gICAgICBjb25zb2xlLmxvZyhlKTtcbiAgICB9XG5cbiAgICB0aGlzLl9pc0xvYWRpbmcgPSBmYWxzZTtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBkZWxldGUoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKCF0aGlzLmNhbkRlbGV0ZSlcbiAgICAgIHJldHVybjtcblxuICAgIGlmICh0aGlzLmZvcm1Hcm91cCA9PT0gdW5kZWZpbmVkKVxuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiZm9ybUdyb3VwIGNhbm5vdCBiZSB1bmRlZmluZWQuXCIpO1xuXG4gICAgaWYgKHRoaXMudGVtcGxhdGUgPT09IHVuZGVmaW5lZClcbiAgICAgIHRocm93IG5ldyBFcnJvcihcInRlbXBsYXRlIGNhbm5vdCBiZSB1bmRlZmluZWQuXCIpO1xuXG4gICAgYXdhaXQgdGhpcy5nZXRDbGllbnQoKS5kZWxldGVCeVRlbXBsYXRlQW5kRm9ybSh0aGlzLnRlbXBsYXRlLCB0aGlzLmZvcm1Hcm91cCk7XG4gICAgdGhpcy5fbWVzc2FnZVNlcnZpY2UuYWRkKHsgc2V2ZXJpdHk6ICdzdWNjZXNzJywgc3VtbWFyeTogJ0RlbGV0ZWQnLCBkZXRhaWw6ICdUaGUgcmVzb3VyY2UgaGFzIGJlZW4gZGVsZXRlZC4nIH0pXG5cbiAgICB0aGlzLmFmdGVyRGVsZXRlLmVtaXQoKTtcbiAgfVxuXG4gIHByaXZhdGUgc3RhdGljIGdldFN1YkNvbnRyb2woY29udHJvbDogQWJzdHJhY3RDb250cm9sIHwgdW5kZWZpbmVkLCBwYXRoRWxlbWVudDogc3RyaW5nKTogQWJzdHJhY3RDb250cm9sIHwgdW5kZWZpbmVkIHtcbiAgICBpZiAocGF0aEVsZW1lbnQgPT09IFwiXCIpXG4gICAgICByZXR1cm4gY29udHJvbDtcblxuICAgIGlmIChjb250cm9sIGluc3RhbmNlb2YgVW50eXBlZEZvcm1Hcm91cClcbiAgICAgIHJldHVybiBjb250cm9sLmNvbnRyb2xzW3BhdGhFbGVtZW50XTtcblxuICAgIGlmIChjb250cm9sIGluc3RhbmNlb2YgVW50eXBlZEZvcm1BcnJheSkge1xuICAgICAgY29uc3QgaW5kZXggPSBOdW1iZXIucGFyc2VJbnQocGF0aEVsZW1lbnQpO1xuICAgICAgaWYgKE51bWJlci5pc0ludGVnZXIoaW5kZXgpKVxuICAgICAgICByZXR1cm4gY29udHJvbC5jb250cm9sc1tpbmRleF07XG4gICAgfVxuXG4gICAgcmV0dXJuIGNvbnRyb2w7XG4gIH1cblxuICBwcml2YXRlIGdldENsaWVudCgpOiBSZXN0V29ybGRDbGllbnQge1xuICAgIHJldHVybiB0aGlzLl9jbGllbnRzLmdldENsaWVudCh0aGlzLmFwaU5hbWUpO1xuICB9XG59XG4iLCI8Zm9ybSAqbmdJZj1cImZvcm1Hcm91cCAhPT0gdW5kZWZpbmVkICYmIHRlbXBsYXRlICE9PSB1bmRlZmluZWRcIiBbZm9ybUdyb3VwXT1cImZvcm1Hcm91cFwiIChuZ1N1Ym1pdCk9XCJzdWJtaXQoKVwiPlxuICA8ZGl2IGNsYXNzPVwiYmxvY2thYmxlLWNvbnRhaW5lclwiPlxuICAgIDxkaXYgY2xhc3M9XCJibG9ja2FibGUtZWxlbWVudFwiPlxuICAgICAgPGRpdiBjbGFzcz1cImdyaWQgZmllbGRcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImNvbC0xMiBtZDpjb2wtMTAgbWQ6Y29sLW9mZnNldC0yXCI+XG4gICAgICAgICAgPHJ3LXZhbGlkYXRpb24tZXJyb3JzIFtmb3JtXT1cImZvcm1Hcm91cFwiPjwvcnctdmFsaWRhdGlvbi1lcnJvcnM+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgICA8bmctdGVtcGxhdGUgI2RlZmF1bHRDb250ZW50PlxuICAgICAgICA8cnctaW5wdXQtdGVtcGxhdGUgW3RlbXBsYXRlXT1cInRlbXBsYXRlXCIgW2FwaU5hbWVdPVwiYXBpTmFtZVwiPjwvcnctaW5wdXQtdGVtcGxhdGU+XG4gICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImNvbnRlbnRSZWYgPz8gZGVmYXVsdENvbnRlbnQ7IGNvbnRleHQ6IHsgZm9ybTogZm9ybUdyb3VwLCB0ZW1wbGF0ZTogdGVtcGxhdGUsIGFwaU5hbWU6IGFwaU5hbWUgfVwiPjwvbmctY29udGFpbmVyPlxuICAgIDwvZGl2PlxuICAgIDxkaXYgY2xhc3M9XCJibG9ja2FibGUtb3ZlcmxheVwiICpuZ0lmPVwiaXNMb2FkaW5nXCI+XG4gICAgICA8cC1wcm9ncmVzc1NwaW5uZXI+PC9wLXByb2dyZXNzU3Bpbm5lcj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG5cbiAgPGRpdiBjbGFzcz1cImdyaWRcIj5cbiAgICA8ZGl2IGNsYXNzPVwiY29sXCI+XG4gICAgICA8ZGl2IGNsYXNzPVwiZmxleCBqdXN0aWZ5LWNvbnRlbnQtZW5kIHctZnVsbFwiPlxuICAgICAgICA8bmctdGVtcGxhdGUgI2RlZmF1bHRCdXR0b25zPlxuICAgICAgICAgIDxidXR0b24gcEJ1dHRvbiBwUmlwcGxlIHR5cGU9XCJzdWJtaXRcIiBsYWJlbD1cIlNhdmVcIiBpY29uPVwiZmFyIGZhLXNhdmVcIiBjbGFzcz1cIm14LTIgcC1idXR0b24tc3VjY2Vzc1wiXG4gICAgICAgICAgICBbZGlzYWJsZWRdPVwiIWFsbG93U3VibWl0XCI+PC9idXR0b24+XG4gICAgICAgICAgPGJ1dHRvbiBwQnV0dG9uIHBSaXBwbGUgdHlwZT1cImJ1dHRvblwiIGxhYmVsPVwiUmVsb2FkXCIgaWNvbj1cImZhcyBmYS1yZWRvXCIgY2xhc3M9XCJteC0yIHAtYnV0dG9uLWluZm9cIlxuICAgICAgICAgICAgKGNsaWNrKT1cInJlbG9hZCgpXCIgW2Rpc2FibGVkXT1cIiFjYW5SZWxvYWRcIj48L2J1dHRvbj5cbiAgICAgICAgICA8YnV0dG9uIHBCdXR0b24gcFJpcHBsZSB0eXBlPVwiYnV0dG9uXCIgbGFiZWw9XCJEZWxldGVcIiBpY29uPVwiZmFyIGZhLXRyYXNoLWFsdFwiIGNsYXNzPVwibWwtMiBwLWJ1dHRvbi1kYW5nZXJcIlxuICAgICAgICAgICAgKGNsaWNrKT1cInNob3dEZWxldGVDb25maXJtYXRpb01vZGFsKClcIiBbZGlzYWJsZWRdPVwiIWNhbkRlbGV0ZVwiPjwvYnV0dG9uPlxuICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiYnV0dG9uc1JlZiA/PyBkZWZhdWx0QnV0dG9uczsgY29udGV4dDogeyBmb3JtOiBmb3JtR3JvdXAsIHRlbXBsYXRlOiB0ZW1wbGF0ZSwgYXBpTmFtZTogYXBpTmFtZSB9XCI+PC9uZy1jb250YWluZXI+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG48L2Zvcm0+XG4iXX0=