ontimize-web-ngx 15.0.0-beta.1 → 15.0.0-beta.2

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 (57) hide show
  1. package/esm2020/lib/components/app-sidenav/o-app-sidenav.component.mjs +2 -2
  2. package/esm2020/lib/components/button-toggle/o-button-toggle-group/o-button-toggle-group.component.mjs +13 -15
  3. package/esm2020/lib/components/card-menu-item/o-card-menu-item.component.mjs +6 -8
  4. package/esm2020/lib/components/form/navigation/o-form.navigation.class.mjs +2 -2
  5. package/esm2020/lib/components/form-container/o-form-container.component.mjs +6 -8
  6. package/esm2020/lib/components/index.mjs +2 -3
  7. package/esm2020/lib/components/o-service-base-component.class.mjs +1 -1
  8. package/esm2020/lib/components/o-service-component.class.mjs +2 -1
  9. package/esm2020/lib/components/table/column/calculated/o-table-column-calculated.component.mjs +6 -7
  10. package/esm2020/lib/components/table/column/o-table-column.component.mjs +123 -129
  11. package/esm2020/lib/components/table/extensions/default-o-table.datasource.mjs +46 -9
  12. package/esm2020/lib/components/table/extensions/dialog/filter-by-column/o-table-filter-by-column-data-dialog.component.mjs +3 -3
  13. package/esm2020/lib/components/table/extensions/header/table-insertable-row/o-table-insertable-row.component.mjs +6 -7
  14. package/esm2020/lib/components/table/extensions/header/table-quickfilter/o-table-quickfilter.component.mjs +4 -4
  15. package/esm2020/lib/components/table/o-table.component.mjs +12 -13
  16. package/esm2020/lib/components/user-info/index.mjs +5 -0
  17. package/esm2020/lib/components/user-info/o-user-info.module.mjs +3 -3
  18. package/esm2020/lib/interfaces/o-table-column.interface.mjs +1 -1
  19. package/esm2020/lib/layouts/form-layout/dialog/o-form-layout-dialog.component.mjs +20 -22
  20. package/esm2020/lib/layouts/form-layout/dialog/options/o-form-layout-dialog-options.directive.mjs +7 -3
  21. package/esm2020/lib/layouts/form-layout/o-form-layout-manager.component.mjs +10 -4
  22. package/esm2020/lib/layouts/form-layout/split-pane/o-form-layout-split-pane.component.mjs +8 -9
  23. package/esm2020/lib/layouts/form-layout/tabgroup/o-form-layout-tabgroup.component.mjs +6 -8
  24. package/esm2020/lib/services/o-error-dialog-manager.service.mjs +8 -4
  25. package/esm2020/lib/services/translate/o-translate.service.mjs +3 -2
  26. package/esm2020/lib/util/util.mjs +5 -1
  27. package/fesm2015/ontimize-web-ngx.mjs +261 -227
  28. package/fesm2015/ontimize-web-ngx.mjs.map +1 -1
  29. package/fesm2020/ontimize-web-ngx.mjs +261 -227
  30. package/fesm2020/ontimize-web-ngx.mjs.map +1 -1
  31. package/lib/components/button-toggle/o-button-toggle-group/o-button-toggle-group.component.d.ts +1 -3
  32. package/lib/components/card-menu-item/o-card-menu-item.component.d.ts +2 -3
  33. package/lib/components/form-container/o-form-container.component.d.ts +1 -3
  34. package/lib/components/index.d.ts +1 -2
  35. package/lib/components/table/column/calculated/o-table-column-calculated.component.d.ts +2 -3
  36. package/lib/components/table/column/o-table-column.component.d.ts +3 -4
  37. package/lib/components/table/extensions/default-o-table.datasource.d.ts +1 -0
  38. package/lib/components/table/extensions/header/table-insertable-row/o-table-insertable-row.component.d.ts +2 -3
  39. package/lib/components/table/o-table.component.d.ts +5 -6
  40. package/lib/components/user-info/index.d.ts +4 -0
  41. package/lib/components/user-info/o-user-info.module.d.ts +1 -1
  42. package/lib/interfaces/o-table-column.interface.d.ts +2 -2
  43. package/lib/layouts/form-layout/dialog/o-form-layout-dialog.component.d.ts +4 -4
  44. package/lib/layouts/form-layout/dialog/options/o-form-layout-dialog-options.directive.d.ts +3 -1
  45. package/lib/layouts/form-layout/o-form-layout-manager.component.d.ts +2 -1
  46. package/lib/layouts/form-layout/split-pane/o-form-layout-split-pane.component.d.ts +2 -3
  47. package/lib/layouts/form-layout/tabgroup/o-form-layout-tabgroup.component.d.ts +2 -3
  48. package/lib/services/o-error-dialog-manager.service.d.ts +2 -2
  49. package/lib/services/translate/o-translate.service.d.ts +1 -0
  50. package/lib/util/util.d.ts +1 -0
  51. package/package.json +1 -1
  52. package/theme.scss +12 -16
  53. package/theming/ontimize-style-v8.scss +22 -0
  54. package/theming/ontimize-style.scss +2 -1
  55. package/theming/styles/ontimize-v8/o-form-field-style.scss +20 -13
  56. package/theming/styles/ontimize-v8/variables.scss +4 -1
  57. package/theming/themes/ontimize-blue.scss +6 -3
@@ -1,5 +1,5 @@
1
1
  import { __decorate, __metadata } from "tslib";
2
- import { ChangeDetectionStrategy, Component, ComponentFactoryResolver, EventEmitter, forwardRef, Inject, Injector, ViewChild, ViewContainerRef } from '@angular/core';
2
+ import { ChangeDetectionStrategy, Component, EventEmitter, forwardRef, Inject, Injector, ViewChild, ViewContainerRef } from '@angular/core';
3
3
  import { Subscription } from 'rxjs';
4
4
  import { BooleanInputConverter, NumberInputConverter } from '../../../decorators/input-converter';
5
5
  import { Codes } from '../../../util/codes';
@@ -50,9 +50,8 @@ export class OTableColumnComponent {
50
50
  get multiline() {
51
51
  return this._multiline;
52
52
  }
53
- constructor(table, resolver, injector) {
53
+ constructor(table, injector) {
54
54
  this.table = table;
55
- this.resolver = resolver;
56
55
  this.injector = injector;
57
56
  this._defaultSQLTypeKey = 'OTHER';
58
57
  this._searchable = true;
@@ -125,148 +124,143 @@ export class OTableColumnComponent {
125
124
  if (!Util.isDefined(this.renderer) && Util.isDefined(this.type)) {
126
125
  const componentRef = renderersMapping[this.type];
127
126
  if (componentRef !== undefined) {
128
- const factory = this.resolver.resolveComponentFactory(componentRef);
129
- if (factory) {
130
- const ref = this.container.createComponent(factory);
131
- const newRenderer = ref.instance;
132
- newRenderer.filterSource = this.filterSource;
133
- newRenderer.filterFunction = this.filterFunction;
134
- switch (this.type) {
135
- case 'currency':
136
- newRenderer.currencySymbol = this.currencySymbol;
137
- newRenderer.currencySymbolPosition = this.currencySymbolPosition;
138
- newRenderer.decimalSeparator = this.decimalSeparator;
139
- newRenderer.minDecimalDigits = this.minDecimalDigits;
140
- newRenderer.maxDecimalDigits = this.maxDecimalDigits;
141
- newRenderer.grouping = this.grouping;
142
- newRenderer.thousandSeparator = this.thousandSeparator;
143
- break;
144
- case 'date':
145
- newRenderer.format = this.format;
146
- break;
147
- case 'time':
148
- newRenderer.format = this.format;
149
- break;
150
- case 'integer':
151
- newRenderer.grouping = this.grouping;
152
- newRenderer.thousandSeparator = this.thousandSeparator;
153
- break;
154
- case 'boolean':
155
- newRenderer.trueValue = this.trueValue;
156
- newRenderer.falseValue = this.falseValue;
157
- newRenderer.renderTrueValue = this.renderTrueValue;
158
- newRenderer.renderFalseValue = this.renderFalseValue;
159
- newRenderer.renderType = this.renderType;
160
- newRenderer.booleanType = this.booleanType;
161
- break;
162
- case 'percentage':
163
- newRenderer.valueBase = this.valueBase;
164
- case 'real':
165
- newRenderer.decimalSeparator = this.decimalSeparator;
166
- newRenderer.minDecimalDigits = this.minDecimalDigits;
167
- newRenderer.maxDecimalDigits = this.maxDecimalDigits;
168
- newRenderer.grouping = this.grouping;
169
- newRenderer.thousandSeparator = this.thousandSeparator;
170
- break;
171
- case 'image':
172
- newRenderer.imageType = this.imageType;
173
- newRenderer.avatar = this.avatar;
174
- newRenderer.emptyImage = this.emptyImage;
175
- break;
176
- case 'action':
177
- newRenderer.icon = this.icon;
178
- newRenderer.action = this.action;
179
- newRenderer.text = this.text;
180
- newRenderer.iconPosition = this.iconPosition;
181
- newRenderer.onClick = this.onClick;
182
- break;
183
- case 'service':
184
- newRenderer.entity = this.entity;
185
- newRenderer.service = this.service;
186
- newRenderer.columns = this.columns;
187
- newRenderer.valueColumn = this.valueColumn;
188
- newRenderer.parentKeys = this.parentKeys;
189
- newRenderer.queryMethod = this.queryMethod;
190
- newRenderer.serviceType = this.serviceType;
191
- newRenderer.translate = this.translate;
192
- break;
193
- case 'translate':
194
- newRenderer.translateArgsFn = this.translateArgsFn;
195
- break;
196
- }
197
- this.registerRenderer(newRenderer);
198
- }
199
- }
200
- }
201
- }
202
- buildCellEditor(type, resolver, container, propsOrigin, registerInColumn = true) {
203
- let editor;
204
- const componentRef = editorsMapping[type] || editorsMapping.text;
205
- if (componentRef === undefined) {
206
- return editor;
207
- }
208
- const factory = resolver.resolveComponentFactory(componentRef);
209
- if (factory) {
210
- const ref = container.createComponent(factory);
211
- editor = ref.instance;
212
- if (propsOrigin !== undefined) {
213
- switch (type) {
127
+ let newRenderer;
128
+ const ref = this.container.createComponent(componentRef);
129
+ newRenderer = ref.instance;
130
+ newRenderer.filterSource = this.filterSource;
131
+ newRenderer.filterFunction = this.filterFunction;
132
+ switch (this.type) {
133
+ case 'currency':
134
+ newRenderer.currencySymbol = this.currencySymbol;
135
+ newRenderer.currencySymbolPosition = this.currencySymbolPosition;
136
+ newRenderer.decimalSeparator = this.decimalSeparator;
137
+ newRenderer.minDecimalDigits = this.minDecimalDigits;
138
+ newRenderer.maxDecimalDigits = this.maxDecimalDigits;
139
+ newRenderer.grouping = this.grouping;
140
+ newRenderer.thousandSeparator = this.thousandSeparator;
141
+ break;
214
142
  case 'date':
215
- editor.format = propsOrigin.format;
216
- editor.locale = propsOrigin.locale;
217
- editor.oStartView = propsOrigin.oStartView;
218
- editor.oMinDate = propsOrigin.oMinDate;
219
- editor.oMaxDate = propsOrigin.oMaxDate;
220
- editor.oTouchUi = propsOrigin.oTouchUi;
221
- editor.oStartAt = propsOrigin.oStartAt;
222
- editor.filterDate = propsOrigin.filterDate;
223
- editor.dateValueType = propsOrigin.dateValueType;
143
+ newRenderer.format = this.format;
224
144
  break;
225
145
  case 'time':
226
- editor.oDateFormat = propsOrigin.oDateFormat;
227
- editor.oHourFormat = propsOrigin.oHourFormat;
228
- editor.oDateLocale = propsOrigin.oDateLocale;
229
- editor.oMinDate = propsOrigin.oMinDate;
230
- editor.oMaxDate = propsOrigin.oMaxDate;
231
- editor.oTouchUi = propsOrigin.oTouchUi;
232
- editor.oDateStartAt = propsOrigin.oDateStartAt;
233
- editor.oDateTextInputEnabled = propsOrigin.oDateTextInputEnabled;
234
- editor.oHourMin = propsOrigin.oHourMin;
235
- editor.oHourMax = propsOrigin.oHourMax;
236
- editor.oHourTextInputEnabled = propsOrigin.oHourTextInputEnabled;
237
- editor.oHourPlaceholder = propsOrigin.oHourPlaceholder;
238
- editor.oDatePlaceholder = propsOrigin.oDatePlaceholder;
146
+ newRenderer.format = this.format;
147
+ break;
148
+ case 'integer':
149
+ newRenderer.grouping = this.grouping;
150
+ newRenderer.thousandSeparator = this.thousandSeparator;
239
151
  break;
240
152
  case 'boolean':
241
- editor.booleanType = propsOrigin.booleanType;
242
- editor.indeterminateOnNull = propsOrigin.indeterminateOnNull;
243
- editor.autoCommit = propsOrigin.autoCommit;
244
- editor.trueValue = propsOrigin.trueValue;
245
- editor.falseValue = propsOrigin.falseValue;
153
+ newRenderer.trueValue = this.trueValue;
154
+ newRenderer.falseValue = this.falseValue;
155
+ newRenderer.renderTrueValue = this.renderTrueValue;
156
+ newRenderer.renderFalseValue = this.renderFalseValue;
157
+ newRenderer.renderType = this.renderType;
158
+ newRenderer.booleanType = this.booleanType;
246
159
  break;
247
- case 'integer':
248
160
  case 'percentage':
249
- case 'currency':
161
+ newRenderer.valueBase = this.valueBase;
250
162
  case 'real':
251
- editor.min = propsOrigin.min;
252
- editor.max = propsOrigin.max;
253
- editor.step = Util.isDefined(propsOrigin.step) ? propsOrigin.step : editor.step;
163
+ newRenderer.decimalSeparator = this.decimalSeparator;
164
+ newRenderer.minDecimalDigits = this.minDecimalDigits;
165
+ newRenderer.maxDecimalDigits = this.maxDecimalDigits;
166
+ newRenderer.grouping = this.grouping;
167
+ newRenderer.thousandSeparator = this.thousandSeparator;
254
168
  break;
255
169
  case 'image':
170
+ newRenderer.imageType = this.imageType;
171
+ newRenderer.avatar = this.avatar;
172
+ newRenderer.emptyImage = this.emptyImage;
256
173
  break;
257
- default:
174
+ case 'action':
175
+ newRenderer.icon = this.icon;
176
+ newRenderer.action = this.action;
177
+ newRenderer.text = this.text;
178
+ newRenderer.iconPosition = this.iconPosition;
179
+ newRenderer.onClick = this.onClick;
180
+ break;
181
+ case 'service':
182
+ newRenderer.entity = this.entity;
183
+ newRenderer.service = this.service;
184
+ newRenderer.columns = this.columns;
185
+ newRenderer.valueColumn = this.valueColumn;
186
+ newRenderer.parentKeys = this.parentKeys;
187
+ newRenderer.queryMethod = this.queryMethod;
188
+ newRenderer.serviceType = this.serviceType;
189
+ newRenderer.translate = this.translate;
190
+ break;
191
+ case 'translate':
192
+ newRenderer.translateArgsFn = this.translateArgsFn;
258
193
  break;
259
194
  }
260
- editor.olabel = propsOrigin.olabel;
261
- editor.type = propsOrigin.type;
195
+ this.registerRenderer(newRenderer);
196
+ }
197
+ }
198
+ }
199
+ buildCellEditor(type, container, propsOrigin, registerInColumn = true) {
200
+ let editor;
201
+ const componentRef = editorsMapping[type] || editorsMapping.text;
202
+ if (componentRef === undefined) {
203
+ return editor;
204
+ }
205
+ const ref = container.createComponent(componentRef);
206
+ editor = ref.instance;
207
+ if (propsOrigin !== undefined) {
208
+ switch (type) {
209
+ case 'date':
210
+ editor.format = propsOrigin.format;
211
+ editor.locale = propsOrigin.locale;
212
+ editor.oStartView = propsOrigin.oStartView;
213
+ editor.oMinDate = propsOrigin.oMinDate;
214
+ editor.oMaxDate = propsOrigin.oMaxDate;
215
+ editor.oTouchUi = propsOrigin.oTouchUi;
216
+ editor.oStartAt = propsOrigin.oStartAt;
217
+ editor.filterDate = propsOrigin.filterDate;
218
+ editor.dateValueType = propsOrigin.dateValueType;
219
+ break;
220
+ case 'time':
221
+ editor.oDateFormat = propsOrigin.oDateFormat;
222
+ editor.oHourFormat = propsOrigin.oHourFormat;
223
+ editor.oDateLocale = propsOrigin.oDateLocale;
224
+ editor.oMinDate = propsOrigin.oMinDate;
225
+ editor.oMaxDate = propsOrigin.oMaxDate;
226
+ editor.oTouchUi = propsOrigin.oTouchUi;
227
+ editor.oDateStartAt = propsOrigin.oDateStartAt;
228
+ editor.oDateTextInputEnabled = propsOrigin.oDateTextInputEnabled;
229
+ editor.oHourMin = propsOrigin.oHourMin;
230
+ editor.oHourMax = propsOrigin.oHourMax;
231
+ editor.oHourTextInputEnabled = propsOrigin.oHourTextInputEnabled;
232
+ editor.oHourPlaceholder = propsOrigin.oHourPlaceholder;
233
+ editor.oDatePlaceholder = propsOrigin.oDatePlaceholder;
234
+ break;
235
+ case 'boolean':
236
+ editor.booleanType = propsOrigin.booleanType;
237
+ editor.indeterminateOnNull = propsOrigin.indeterminateOnNull;
238
+ editor.autoCommit = propsOrigin.autoCommit;
239
+ editor.trueValue = propsOrigin.trueValue;
240
+ editor.falseValue = propsOrigin.falseValue;
241
+ break;
242
+ case 'integer':
243
+ case 'percentage':
244
+ case 'currency':
245
+ case 'real':
246
+ editor.min = propsOrigin.min;
247
+ editor.max = propsOrigin.max;
248
+ editor.step = Util.isDefined(propsOrigin.step) ? propsOrigin.step : editor.step;
249
+ break;
250
+ case 'image':
251
+ break;
252
+ default:
253
+ break;
262
254
  }
263
- editor.registerInColumn = registerInColumn;
255
+ editor.olabel = propsOrigin.olabel;
256
+ editor.type = propsOrigin.type;
264
257
  }
258
+ editor.registerInColumn = registerInColumn;
265
259
  return editor;
266
260
  }
267
261
  createEditor() {
268
262
  if (!Util.isDefined(this.editor) && this.editable) {
269
- const newEditor = this.buildCellEditor(this.type, this.resolver, this.container, this);
263
+ const newEditor = this.buildCellEditor(this.type, this.container, this);
270
264
  if (newEditor) {
271
265
  newEditor.orequired = this.orequired;
272
266
  newEditor.showPlaceHolder = this.showPlaceHolder;
@@ -367,7 +361,7 @@ export class OTableColumnComponent {
367
361
  return this._filterSource;
368
362
  }
369
363
  }
370
- OTableColumnComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: OTableColumnComponent, deps: [{ token: forwardRef(() => OTableComponent) }, { token: i0.ComponentFactoryResolver }, { token: i0.Injector }], target: i0.ɵɵFactoryTarget.Component });
364
+ OTableColumnComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: OTableColumnComponent, deps: [{ token: forwardRef(() => OTableComponent) }, { token: i0.Injector }], target: i0.ɵɵFactoryTarget.Component });
371
365
  OTableColumnComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.9", type: OTableColumnComponent, selector: "o-table-column", inputs: { attr: "attr", title: "title", titleAlign: ["title-align", "titleAlign"], contentAlign: ["content-align", "contentAlign"], orderable: "orderable", searchable: "searchable", groupable: "groupable", type: "type", editable: "editable", width: "width", minWidth: ["min-width", "minWidth"], maxWidth: ["max-width", "maxWidth"], asyncLoad: ["async-load", "asyncLoad"], sqlType: ["sql-type", "sqlType"], tooltip: "tooltip", tooltipValue: ["tooltip-value", "tooltipValue"], tooltipFunction: ["tooltip-function", "tooltipFunction"], multiline: "multiline", resizable: "resizable", filterExpressionFunction: ["filter-expression-function", "filterExpressionFunction"], class: "class", angularValidatorsFn: ["validators", "angularValidatorsFn"], angularValidatorsFnErrors: ["validators-errors", "angularValidatorsFnErrors"], angularAsyncValidatorsFn: ["async-validators", "angularAsyncValidatorsFn"], trueValue: ["true-value", "trueValue"], falseValue: ["false-value", "falseValue"], booleanType: ["boolean-type", "booleanType"], renderTrueValue: ["render-true-value", "renderTrueValue"], renderFalseValue: ["render-false-value", "renderFalseValue"], renderType: ["render-type", "renderType"], currencySymbol: ["currency-symbol", "currencySymbol"], currencySymbolPosition: ["currency-symbol-position", "currencySymbolPosition"], format: "format", imageType: ["image-type", "imageType"], emptyImage: ["empty-image", "emptyImage"], avatar: "avatar", icon: "icon", svgIcon: ["svg-icon", "svgIcon"], action: "action", text: "text", iconPosition: ["icon-position", "iconPosition"], entity: "entity", service: "service", columns: "columns", translate: "translate", valueColumn: ["value-column", "valueColumn"], valueColumnType: ["value-column-type", "valueColumnType"], parentKeys: ["parent-keys", "parentKeys"], queryMethod: ["query-method", "queryMethod"], serviceType: ["service-type", "serviceType"], translateArgsFn: ["translate-params", "translateArgsFn"], orequired: ["required", "orequired"], showPlaceHolder: ["show-placeholder", "showPlaceHolder"], olabel: ["label", "olabel"], updateRecordOnEdit: ["update-record-on-edit", "updateRecordOnEdit"], showNotificationOnEdit: ["show-notification-on-edit", "showNotificationOnEdit"], enabled: "enabled", min: "min", max: "max", step: "step", locale: "locale", oStartView: ["start-view", "oStartView"], oTouchUi: ["touch-ui", "oTouchUi"], startAt: ["start-at", "startAt"], filterDate: ["filter-date", "filterDate"], dateValueType: ["date-value-type", "dateValueType"], oDateFormat: ["date-format", "oDateFormat"], oDateLocale: ["date-locale", "oDateLocale"], oDateStartView: ["date-start-view", "oDateStartView"], oMinDate: ["date-min", "oMinDate"], oMaxDate: ["date-max", "oMaxDate"], oDateTouchUi: ["date-touch-ui", "oDateTouchUi"], oDateStartAt: ["date-start-at", "oDateStartAt"], oHourFormat: ["hour-format", "oHourFormat"], oHourMin: ["hour-min", "oHourMin"], oHourMax: ["hour-max", "oHourMax"], oHourPlaceholder: ["hour-placeholder", "oHourPlaceholder"], oDatePlaceholder: ["date-placeholder", "oDatePlaceholder"] }, outputs: { onClick: "onClick", onDataLoaded: "onDataLoaded", editionStarted: "editionStarted", editionCancelled: "editionCancelled", editionCommitted: "editionCommitted", onPostUpdateRecord: "onPostUpdateRecord" }, viewQueries: [{ propertyName: "container", first: true, predicate: ["container"], descendants: true, read: ViewContainerRef, static: true }], ngImport: i0, template: "<span #container>\n</span>", styles: [""], changeDetection: i0.ChangeDetectionStrategy.OnPush });
372
366
  __decorate([
373
367
  BooleanInputConverter(),
@@ -439,8 +433,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImpor
439
433
  }], ctorParameters: function () { return [{ type: i1.OTableComponent, decorators: [{
440
434
  type: Inject,
441
435
  args: [forwardRef(() => OTableComponent)]
442
- }] }, { type: i0.ComponentFactoryResolver }, { type: i0.Injector }]; }, propDecorators: { editable: [], tooltip: [], translate: [], orequired: [], showPlaceHolder: [], updateRecordOnEdit: [], showNotificationOnEdit: [], oTouchUi: [], min: [], max: [], step: [], minDecimalDigits: [], maxDecimalDigits: [], indeterminateOnNull: [], autoCommit: [], asyncLoad: [], container: [{
436
+ }] }, { type: i0.Injector }]; }, propDecorators: { editable: [], tooltip: [], translate: [], orequired: [], showPlaceHolder: [], updateRecordOnEdit: [], showNotificationOnEdit: [], oTouchUi: [], min: [], max: [], step: [], minDecimalDigits: [], maxDecimalDigits: [], indeterminateOnNull: [], autoCommit: [], asyncLoad: [], container: [{
443
437
  type: ViewChild,
444
438
  args: ['container', { read: ViewContainerRef, static: true }]
445
439
  }] } });
446
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiby10YWJsZS1jb2x1bW4uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvb250aW1pemUtd2ViLW5neC9zcmMvbGliL2NvbXBvbmVudHMvdGFibGUvY29sdW1uL28tdGFibGUtY29sdW1uLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL29udGltaXplLXdlYi1uZ3gvc3JjL2xpYi9jb21wb25lbnRzL3RhYmxlL2NvbHVtbi9vLXRhYmxlLWNvbHVtbi5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUVMLHVCQUF1QixFQUN2QixTQUFTLEVBRVQsd0JBQXdCLEVBQ3hCLFlBQVksRUFDWixVQUFVLEVBQ1YsTUFBTSxFQUNOLFFBQVEsRUFHUixTQUFTLEVBQ1QsZ0JBQWdCLEVBQ2pCLE1BQU0sZUFBZSxDQUFDO0FBRXZCLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFFcEMsT0FBTyxFQUFFLHFCQUFxQixFQUFFLG9CQUFvQixFQUFFLE1BQU0scUNBQXFDLENBQUM7QUFPbEcsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQzVDLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUNsRCxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDMUMsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ3ZELE9BQU8sRUFBRSxjQUFjLEVBQUUsMkJBQTJCLEVBQUUsNEJBQTRCLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUN0SCxPQUFPLEVBQUUsNkJBQTZCLEVBQUUsOEJBQThCLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQzs7O0FBRWhJLE1BQU0sQ0FBQyxNQUFNLDZCQUE2QixHQUFHO0lBRzNDLE1BQU07SUFH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QUVoQixnQkFBZ0IsTUFJaEIsbUJBQW1CLE1BRW5CLFVBQVUsTUFZVixTQUFTLE1BR1QsU0FBUztzQkFEUixTQUFTO3VCQUFDLFdBQVcsRUFBRSxFQUFFLElBQUksRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQWZ0ZXJWaWV3SW5pdCxcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gIENvbXBvbmVudCxcbiAgQ29tcG9uZW50RmFjdG9yeSxcbiAgQ29tcG9uZW50RmFjdG9yeVJlc29sdmVyLFxuICBFdmVudEVtaXR0ZXIsXG4gIGZvcndhcmRSZWYsXG4gIEluamVjdCxcbiAgSW5qZWN0b3IsXG4gIE9uRGVzdHJveSxcbiAgT25Jbml0LFxuICBWaWV3Q2hpbGQsXG4gIFZpZXdDb250YWluZXJSZWZcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBBc3luY1ZhbGlkYXRvckZuLCBWYWxpZGF0b3JGbiB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xuXG5pbXBvcnQgeyBCb29sZWFuSW5wdXRDb252ZXJ0ZXIsIE51bWJlcklucHV0Q29udmVydGVyIH0gZnJvbSAnLi4vLi4vLi4vZGVjb3JhdG9ycy9pbnB1dC1jb252ZXJ0ZXInO1xuaW1wb3J0IHsgT1RhYmxlQ29sdW1uIH0gZnJvbSAnLi4vLi4vLi4vaW50ZXJmYWNlcy9vLXRhYmxlLWNvbHVtbi5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgT1BlcmNlbnRhZ2VWYWx1ZUJhc2VUeXBlIH0gZnJvbSAnLi4vLi4vLi4vcGlwZXMvby1wZXJjZW50YWdlLnBpcGUnO1xuaW1wb3J0IHsgRGF0ZUZpbHRlckZ1bmN0aW9uIH0gZnJvbSAnLi4vLi4vLi4vdHlwZXMvZGF0ZS1maWx0ZXItZnVuY3Rpb24udHlwZSc7XG5pbXBvcnQgeyBFcnJvckRhdGEgfSBmcm9tICcuLi8uLi8uLi90eXBlcy9lcnJvci1kYXRhLnR5cGUnO1xuaW1wb3J0IHsgRXhwcmVzc2lvbiB9IGZyb20gJy4uLy4uLy4uL3R5cGVzL2V4cHJlc3Npb24udHlwZSc7XG5pbXBvcnQgeyBPRGF0ZVZhbHVlVHlwZSB9IGZyb20gJy4uLy4uLy4uL3R5cGVzL28tZGF0ZS12YWx1ZS50eXBlJztcbmltcG9ydCB7IENvZGVzIH0gZnJvbSAnLi4vLi4vLi4vdXRpbC9jb2Rlcyc7XG5pbXBvcnQgeyBTUUxUeXBlcyB9IGZyb20gJy4uLy4uLy4uL3V0aWwvc3FsdHlwZXMnO1xuaW1wb3J0IHsgVXRpbCB9IGZyb20gJy4uLy4uLy4uL3V0aWwvdXRpbCc7XG5pbXBvcnQgeyBPVGFibGVDb21wb25lbnQgfSBmcm9tICcuLi9vLXRhYmxlLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBlZGl0b3JzTWFwcGluZywgT19UQUJMRV9DRUxMX0VESVRPUlNfSU5QVVRTLCBPX1RBQkxFX0NFTExfRURJVE9SU19PVVRQVVRTIH0gZnJvbSAnLi9jZWxsLWVkaXRvci9jZWxsLWVkaXRvcic7XG5pbXBvcnQgeyBPX1RBQkxFX0NFTExfUkVOREVSRVJTX0lOUFVUUywgT19UQUJMRV9DRUxMX1JFTkRFUkVSU19PVVRQVVRTLCByZW5kZXJlcnNNYXBwaW5nIH0gZnJvbSAnLi9jZWxsLXJlbmRlcmVyL2NlbGwtcmVuZGVyZXInO1xuXG5leHBvcnQgY29uc3QgREVGQVVMVF9JTlBVVFNfT19UQUJMRV9DT0xVTU4gPSBbXG5cbiAgLy8gYXR0ciBbc3RyaW5nXTogY29sdW1uIG5hbWUuXG4gICdhdHRyJyxcblxuICAvLyB0aXRsZSBbc3RyaW5nXTogY29sdW1uIHRpdGxlLiBEZWZhdWx0OiBubyB2YWx1ZS5cbiAgJ3RpdGxlJyxcblxuICAvLyB0aXRsZS1hbGlnbiBbc3RhcnQgfCBjZW50ZXIgfCBlbmRdOiBjb2x1bW4gdGl0bGUgYWxpZ25tZW50LiBEZWZhdWx0OiBjZW50ZXIuXG4gICd0aXRsZUFsaWduOiB0aXRsZS1hbGlnbicsXG5cbiAgLy8gY29udGVudC1hbGlnbiBbc3RhcnQgfCBjZW50ZXIgfCBlbmRdOiBjb2x1bW4gY29udGVudCBhbGlnbm1lbnQuXG4gICdjb250ZW50QWxpZ246IGNvbnRlbnQtYWxpZ24nLFxuXG4gIC8vIG9yZGVyYWJsZSBbbm98eWVzXTogY29sdW1uIGNhbiBiZSBzb3J0ZWQuIERlZmF1bHQ6IHllcy5cbiAgJ29yZGVyYWJsZScsXG5cbiAgLy8gc2VhcmNoYWJsZSBbbm98eWVzXTogc2VhcmNoaW5ncyBhcmUgcGVyZm9ybWVkIGludG8gY29sdW1uIGNvbnRlbnQuIERlZmF1bHQ6IHllcy5cbiAgJ3NlYXJjaGFibGUnLFxuXG4gIC8vIGdyb3VwYWJsZSBbbm98eWVzfHRydWV8ZmFsc2VdOiBJbmRpY2F0ZXMgd2hldGhlciBvciBub3QgdGhlIGNvbHVtbiBjYW4gYmUgZ3JvdXBhYmxlXG4gICdncm91cGFibGUnLFxuXG4gIC8vIHR5cGUgW2Jvb2xlYW58aW50ZWdlcnxyZWFsfGN1cnJlbmN5fGRhdGV8aW1hZ2VdOiBjb2x1bW4gdHlwZS4gRGVmYXVsdDogbm8gdmFsdWUgKHN0cmluZykuXG4gICd0eXBlJyxcblxuICAvLyBlZGl0YWJsZSBbbm98eWVzXTogY29sdW1uIGNhbiBiZSBlZGl0ZWQgZGlyZWN0bHkgb3ZlciB0aGUgdGFibGUuIERlZmF1bHQ6IG5vLlxuICAnZWRpdGFibGUnLFxuXG4gICd3aWR0aCcsXG5cbiAgLy8gb25seSBpbiBwaXhlbHNcbiAgJ21pbldpZHRoOiBtaW4td2lkdGgnLFxuXG4gIC8vIG9ubHkgaW4gcGl4ZWxzXG4gICdtYXhXaWR0aDogbWF4LXdpZHRoJyxcblxuICAvLyBhc3luYy1sb2FkIFtub3x5ZXN8dHJ1ZXxmYWxzZV06IGFzeW5jaHJvbm91cyBxdWVyeS4gRGVmYXVsdDogbm9cbiAgJ2FzeW5jTG9hZCA6IGFzeW5jLWxvYWQnLFxuXG4gIC8vIHNxbHR5cGVbc3RyaW5nXTogRGF0YSB0eXBlIGFjY29yZGluZyB0byBKYXZhIHN0YW5kYXJkLiBTZWUgU1FMVHlwZSBjbGFzcy4gRGVmYXVsdDogJ09USEVSJ1xuICAnc3FsVHlwZTogc3FsLXR5cGUnLFxuXG4gICd0b29sdGlwJyxcblxuICAndG9vbHRpcFZhbHVlOiB0b29sdGlwLXZhbHVlJyxcblxuICAndG9vbHRpcEZ1bmN0aW9uOiB0b29sdGlwLWZ1bmN0aW9uJyxcblxuICAnbXVsdGlsaW5lJyxcblxuICAncmVzaXphYmxlJyxcblxuICAnZmlsdGVyRXhwcmVzc2lvbkZ1bmN0aW9uOiBmaWx0ZXItZXhwcmVzc2lvbi1mdW5jdGlvbicsXG5cbiAgJ2NsYXNzJyxcblxuICAnYW5ndWxhclZhbGlkYXRvcnNGbjogdmFsaWRhdG9ycycsXG5cbiAgJ2FuZ3VsYXJWYWxpZGF0b3JzRm5FcnJvcnM6IHZhbGlkYXRvcnMtZXJyb3JzJyxcblxuICAnYW5ndWxhckFzeW5jVmFsaWRhdG9yc0ZuOiBhc3luYy12YWxpZGF0b3JzJyxcblxuICAuLi5PX1RBQkxFX0NFTExfUkVOREVSRVJTX0lOUFVUUyxcbiAgLi4uT19UQUJMRV9DRUxMX0VESVRPUlNfSU5QVVRTXG5dO1xuXG5leHBvcnQgY29uc3QgREVGQVVMVF9PVVRQVVRTX09fVEFCTEVfQ09MVU1OID0gW1xuICAuLi5PX1RBQkxFX0NFTExfUkVOREVSRVJTX09VVFBVVFMsXG4gIC4uLk9fVEFCTEVfQ0VMTF9FRElUT1JTX09VVFBVVFNcbl07XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ28tdGFibGUtY29sdW1uJyxcbiAgdGVtcGxhdGVVcmw6ICcuL28tdGFibGUtY29sdW1uLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vby10YWJsZS1jb2x1bW4uY29tcG9uZW50LnNjc3MnXSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gIGlucHV0czogREVGQVVMVF9JTlBVVFNfT19UQUJMRV9DT0xVTU4sXG4gIG91dHB1dHM6IERFRkFVTFRfT1VUUFVUU19PX1RBQkxFX0NPTFVNTlxufSlcbmV4cG9ydCBjbGFzcyBPVGFibGVDb2x1bW5Db21wb25lbnQgaW1wbGVtZW50cyBPVGFibGVDb2x1bW4sIE9uRGVzdHJveSwgT25Jbml0LCBBZnRlclZpZXdJbml0IHtcblxuICBwdWJsaWMgcmVuZGVyZXI6IGFueTtcbiAgcHVibGljIGVkaXRvcjogYW55O1xuXG4gIHB1YmxpYyB0eXBlOiBzdHJpbmc7XG4gIHB1YmxpYyBhdHRyOiBzdHJpbmc7XG4gIHB1YmxpYyB0aXRsZTogc3RyaW5nO1xuICBwdWJsaWMgdGl0bGVBbGlnbjogc3RyaW5nO1xuICBwdWJsaWMgY29udGVudEFsaWduOiAnc3RhcnQnIHwgJ2NlbnRlcicgfCAnZW5kJztcbiAgcHVibGljIHNxbFR5cGU6IHN0cmluZztcbiAgcHJvdGVjdGVkIF9TUUxUeXBlOiBudW1iZXI7XG4gIHByb3RlY3RlZCBfZGVmYXVsdFNRTFR5cGVLZXk6IHN0cmluZyA9ICdPVEhFUic7XG4gIHByb3RlY3RlZCBfb3JkZXJhYmxlOiBib29sZWFuO1xuICBwcm90ZWN0ZWQgX3Jlc2l6YWJsZTogYm9vbGVhbjtcbiAgcHJvdGVjdGVkIF9zZWFyY2hhYmxlOiBib29sZWFuID0gdHJ1ZTtcbiAgcHJvdGVjdGVkIF9ncm91cGFibGU6IGJvb2xlYW47XG4gIEBCb29sZWFuSW5wdXRDb252ZXJ0ZXIoKVxuICBwdWJsaWMgZWRpdGFibGU6IGJvb2xlYW4gPSBmYWxzZTtcbiAgcHVibGljIHdpZHRoOiBzdHJpbmc7XG4gIHB1YmxpYyBtaW5XaWR0aDogc3RyaW5nO1xuICBwdWJsaWMgbWF4V2lkdGg6IHN0cmluZztcbiAgQEJvb2xlYW5JbnB1dENvbnZlcnRlcigpXG4gIHB1YmxpYyB0b29sdGlwOiBib29sZWFuID0gZmFsc2U7XG4gIHRvb2x0aXBWYWx1ZTogc3RyaW5nO1xuICB0b29sdGlwRnVuY3Rpb246IChyb3dEYXRhOiBhbnkpID0+IGFueTtcbiAgcHVibGljIGNsYXNzOiBzdHJpbmc7XG5cbiAgc2V0IG11bHRpbGluZSh2YWw6IGJvb2xlYW4pIHtcbiAgICB2YWwgPSBVdGlsLnBhcnNlQm9vbGVhbihTdHJpbmcodmFsKSk7XG4gICAgdGhpcy5fbXVsdGlsaW5lID0gdmFsO1xuICB9XG4gIGdldCBtdWx0aWxpbmUoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuX211bHRpbGluZTtcbiAgfVxuICBwcm90ZWN0ZWQgX211bHRpbGluZTogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIHB1YmxpYyBhbmd1bGFyVmFsaWRhdG9yc0ZuOiBWYWxpZGF0b3JGbltdID0gW107XG4gIHB1YmxpYyBhbmd1bGFyVmFsaWRhdG9yc0ZuRXJyb3JzOiBFcnJvckRhdGFbXSA9IFtdO1xuXG4gIHB1YmxpYyBhbmd1bGFyQXN5bmNWYWxpZGF0b3JzRm46IEFzeW5jVmFsaWRhdG9yRm5bXSA9IFtdO1xuXG4gIGZpbHRlckV4cHJlc3Npb25GdW5jdGlvbjogKGNvbHVtbkF0dHI6IHN0cmluZywgcXVpY2tGaWx0ZXI/OiBzdHJpbmcpID0+IEV4cHJlc3Npb247XG5cbiAgLyogaW5wdXQgcmVuZGVyZXIgYmFzZSAqL1xuICBwdWJsaWMgX2ZpbHRlclNvdXJjZTogJ3JlbmRlcicgfCAnZGF0YScgfCAnYm90aCcgPSAncmVuZGVyJztcbiAgcHVibGljIGZpbHRlckZ1bmN0aW9uOiAoY2VsbFZhbHVlOiBhbnksIHJvd1ZhbHVlOiBhbnksIHF1aWNrRmlsdGVyPzogc3RyaW5nKSA9PiBib29sZWFuO1xuICAvKiBpbnB1dCByZW5kZXJlciBkYXRlICovXG4gIHByb3RlY3RlZCBmb3JtYXQ6IHN0cmluZztcbiAgLyogaW5wdXQgcmVuZGVyZXIgaW50ZWdlciAqL1xuICBwcm90ZWN0ZWQgZ3JvdXBpbmc6IGFueSA9IHRydWU7XG4gIHByb3RlY3RlZCB0aG91c2FuZFNlcGFyYXRvcjogc3RyaW5nID0gJywnO1xuICAvKiBpbnB1dCByZW5kZXJlciByZWFsICovXG4gIHByb3RlY3RlZCBkZWNpbWFsU2VwYXJhdG9yOiBzdHJpbmcgPSAnLic7XG5cbiAgLyogaW5wdXQgcmVuZGVyZXIgY3VycmVuY3kgKi9cbiAgcHJvdGVjdGVkIGN1cnJlbmN5U3ltYm9sOiBzdHJpbmc7XG4gIHByb3RlY3RlZCBjdXJyZW5jeVN5bWJvbFBvc2l0aW9uOiBzdHJpbmc7XG5cbiAgLyogaW5wdXQgcmVuZGVyZXIgYm9vbGVhbiAqL1xuICBwcm90ZWN0ZWQgdHJ1ZVZhbHVlOiBhbnk7XG4gIHByb3RlY3RlZCBmYWxzZVZhbHVlOiBhbnk7XG4gIHByb3RlY3RlZCByZW5kZXJUcnVlVmFsdWU6IGFueTtcbiAgcHJvdGVjdGVkIHJlbmRlckZhbHNlVmFsdWU6IGFueTtcbiAgcHJvdGVjdGVkIHJlbmRlclR5cGU6IHN0cmluZyA9ICdzdHJpbmcnO1xuICBwcm90ZWN0ZWQgYm9vbGVhblR5cGU6IHN0cmluZyA9ICdib29sZWFuJztcblxuICAvKiBpbnB1dCBpbWFnZSAqL1xuICBwcm90ZWN0ZWQgaW1hZ2VUeXBlOiBzdHJpbmc7XG4gIHByb3RlY3RlZCBhdmF0YXI6IHN0cmluZztcbiAgcHJvdGVjdGVkIGVtcHR5SW1hZ2U6IHN0cmluZztcblxuICAvKiBpbnB1dCByZW5kZXJlciBhY3Rpb24gKi9cbiAgcHJvdGVjdGVkIGljb246IHN0cmluZztcbiAgcHJvdGVjdGVkIGFjdGlvbjogc3RyaW5nO1xuICBwcm90ZWN0ZWQgdGV4dDogc3RyaW5nO1xuICBwcm90ZWN0ZWQgaWNvblBvc2l0aW9uOiBzdHJpbmc7XG5cbiAgLyogaW5wdXQgcmVuZGVyZXIgc2VydmljZSAqL1xuICBwcm90ZWN0ZWQgZW50aXR5OiBzdHJpbmc7XG4gIHByb3RlY3RlZCBzZXJ2aWNlOiBzdHJpbmc7XG4gIHByb3RlY3RlZCBjb2x1bW5zOiBzdHJpbmc7XG4gIHByb3RlY3RlZCB2YWx1ZUNvbHVtbjogc3RyaW5nO1xuICBwcm90ZWN0ZWQgcGFyZW50S2V5czogc3RyaW5nO1xuICBwcm90ZWN0ZWQgcXVlcnlNZXRob2Q6IHN0cmluZyA9IENvZGVzLlFVRVJZX01FVEhPRDtcbiAgcHJvdGVjdGVkIHNlcnZpY2VUeXBlOiBzdHJpbmc7XG4gIEBCb29sZWFuSW5wdXRDb252ZXJ0ZXIoKVxuICBwcm90ZWN0ZWQgdHJhbnNsYXRlOiBib29sZWFuID0gZmFsc2U7XG4gIC8qIGlucHV0IHJlbmRlcmVyIHRyYW5zbGF0ZSAqL1xuICBwcm90ZWN0ZWQgdHJhbnNsYXRlQXJnc0ZuOiAocm93RGF0YTogYW55KSA9PiBhbnlbXTtcbiAgLyogaW5wdXQgdGltZSAqL1xuICBvRGF0ZUZvcm1hdCA9ICdMJztcbiAgb0hvdXJGb3JtYXQgPSAyNDtcblxuICAvKiBpbnB1dCByZW5kZXJlciBwZXJjZW50YWdlICovXG4gIHZhbHVlQmFzZTogT1BlcmNlbnRhZ2VWYWx1ZUJhc2VUeXBlID0gMTtcblxuICAvKiBpbnB1dCBlZGl0b3IgKi9cbiAgQEJvb2xlYW5JbnB1dENvbnZlcnRlcigpXG4gIHByb3RlY3RlZCBvcmVxdWlyZWQ6IGJvb2xlYW4gPSBmYWxzZTtcbiAgQEJvb2xlYW5JbnB1dENvbnZlcnRlcigpXG4gIHNob3dQbGFjZUhvbGRlcjogYm9vbGVhbiA9IGZhbHNlO1xuICBvbGFiZWw6IHN0cmluZztcbiAgQEJvb2xlYW5JbnB1dENvbnZlcnRlcigpXG4gIHVwZGF0ZVJlY29yZE9uRWRpdDogYm9vbGVhbiA9IHRydWU7XG4gIEBCb29sZWFuSW5wdXRDb252ZXJ0ZXIoKVxuICBzaG93Tm90aWZpY2F0aW9uT25FZGl0OiBib29sZWFuID0gZmFsc2U7XG5cbiAgLyogaW5wdXQgZWRpdG9yIGRhdGUgKi9cbiAgcHJvdGVjdGVkIGxvY2FsZTogc3RyaW5nO1xuICBwcm90ZWN0ZWQgb1N0YXJ0VmlldzogJ21vbnRoJyB8ICd5ZWFyJyA9ICdtb250aCc7XG4gIHByb3RlY3RlZCBvTWluRGF0ZTogc3RyaW5nO1xuICBwcm90ZWN0ZWQgb01heERhdGU6IHN0cmluZztcbiAgQEJvb2xlYW5JbnB1dENvbnZlcnRlcigpXG4gIHByb3RlY3RlZCBvVG91Y2hVaTogYm9vbGVhbiA9IGZhbHNlO1xuICBwcm90ZWN0ZWQgb1N0YXJ0QXQ6IHN0cmluZztcbiAgcHJvdGVjdGVkIGZpbHRlckRhdGU6IERhdGVGaWx0ZXJGdW5jdGlvbjtcbiAgcHJvdGVjdGVkIGRhdGVWYWx1ZVR5cGU6IE9EYXRlVmFsdWVUeXBlID0gJ3RpbWVzdGFtcCc7XG5cbiAgLyogaW5wdXQgZWRpdG9yIGludGVnZXIgKi9cbiAgQE51bWJlcklucHV0Q29udmVydGVyKClcbiAgbWluOiBudW1iZXI7XG4gIEBOdW1iZXJJbnB1dENvbnZlcnRlcigpXG4gIG1heDogbnVtYmVyO1xuICBATnVtYmVySW5wdXRDb252ZXJ0ZXIoKVxuICBzdGVwOiBudW1iZXI7XG4gIEBOdW1iZXJJbnB1dENvbnZlcnRlcigpXG4gIG1pbkRlY2ltYWxEaWdpdHM6IG51bWJlciA9IDI7XG4gIEBOdW1iZXJJbnB1dENvbnZlcnRlcigpXG4gIG1heERlY2ltYWxEaWdpdHM6IG51bWJlciA9IDI7XG5cbiAgLyogaW5wdXQgZWRpdG9yIGJvb2xlYW4gKi9cbiAgQEJvb2xlYW5JbnB1dENvbnZlcnRlcigpXG4gIGluZGV0ZXJtaW5hdGVPbk51bGw6IGJvb2xlYW4gPSBmYWxzZTtcbiAgQEJvb2xlYW5JbnB1dENvbnZlcnRlcigpXG4gIGF1dG9Db21taXQ6IGJvb2xlYW47XG5cbiAgLyogb3V0cHV0IGNlbGwgcmVuZGVyZXIgYWN0aW9uICovXG4gIG9uQ2xpY2s6IEV2ZW50RW1pdHRlcjxvYmplY3Q+ID0gbmV3IEV2ZW50RW1pdHRlcjxvYmplY3Q+KCk7XG5cbiAgLyogb3V0cHV0IGNlbGwgZWRpdG9yICovXG4gIGVkaXRpb25TdGFydGVkOiBFdmVudEVtaXR0ZXI8b2JqZWN0PiA9IG5ldyBFdmVudEVtaXR0ZXI8b2JqZWN0PigpO1xuICBlZGl0aW9uQ2FuY2VsbGVkOiBFdmVudEVtaXR0ZXI8b2JqZWN0PiA9IG5ldyBFdmVudEVtaXR0ZXI8b2JqZWN0PigpO1xuICBlZGl0aW9uQ29tbWl0dGVkOiBFdmVudEVtaXR0ZXI8b2JqZWN0PiA9IG5ldyBFdmVudEVtaXR0ZXI8b2JqZWN0PigpO1xuICBvblBvc3RVcGRhdGVSZWNvcmQ6IEV2ZW50RW1pdHRlcjxvYmplY3Q+ID0gbmV3IEV2ZW50RW1pdHRlcjxvYmplY3Q+KCk7XG5cbiAgQEJvb2xlYW5JbnB1dENvbnZlcnRlcigpXG4gIGFzeW5jTG9hZDogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIEBWaWV3Q2hpbGQoJ2NvbnRhaW5lcicsIHsgcmVhZDogVmlld0NvbnRhaW5lclJlZiwgc3RhdGljOiB0cnVlIH0pXG4gIGNvbnRhaW5lcjogVmlld0NvbnRhaW5lclJlZjtcblxuICBwcml2YXRlIHN1YnNjcmlwdGlvbnMgPSBuZXcgU3Vic2NyaXB0aW9uKCk7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgQEluamVjdChmb3J3YXJkUmVmKCgpID0+IE9UYWJsZUNvbXBvbmVudCkpIHB1YmxpYyB0YWJsZTogT1RhYmxlQ29tcG9uZW50LFxuICAgIHByb3RlY3RlZCByZXNvbHZlcjogQ29tcG9uZW50RmFjdG9yeVJlc29sdmVyLFxuICAgIHByb3RlY3RlZCBpbmplY3RvcjogSW5qZWN0b3JcbiAgKSB7XG4gIH1cblxuICBzdGF0aWMgYWRkRWRpdG9yKHR5cGU6IHN0cmluZywgZWRpdG9yQ2xhc3NSZWZlcmVuY2U6IGFueSkge1xuICAgIGlmICghZWRpdG9yc01hcHBpbmcuaGFzT3duUHJvcGVydHkodHlwZSkgJiYgVXRpbC5pc0RlZmluZWQoZWRpdG9yQ2xhc3NSZWZlcmVuY2UpKSB7XG4gICAgICBlZGl0b3JzTWFwcGluZ1t0eXBlXSA9IGVkaXRvckNsYXNzUmVmZXJlbmNlO1xuICAgIH1cbiAgfVxuXG4gIG5nT25Jbml0KCkge1xuICAgIHRoaXMuZ3JvdXBpbmcgPSBVdGlsLnBhcnNlQm9vbGVhbih0aGlzLmdyb3VwaW5nLCB0cnVlKTtcbiAgICB0aGlzLnRpdGxlQWxpZ24gPSB0aGlzLnBhcnNlVGl0bGVBbGlnbigpO1xuICAgIHRoaXMudGFibGUucmVnaXN0ZXJDb2x1bW4odGhpcyk7XG4gICAgdGhpcy5zdWJzY3JpcHRpb25zLmFkZCh0aGlzLnRhYmxlLm9uUmVpbml0aWFsaXplLnN1YnNjcmliZSgoKSA9PiB0aGlzLnRhYmxlLnJlZ2lzdGVyQ29sdW1uKHRoaXMpKSk7XG4gIH1cblxuICBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XG4gICAgdGhpcy5jcmVhdGVSZW5kZXJlcigpO1xuICAgIHRoaXMuY3JlYXRlRWRpdG9yKCk7XG4gIH1cblxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICB0aGlzLnN1YnNjcmlwdGlvbnMudW5zdWJzY3JpYmUoKTtcbiAgfVxuXG4gIHBhcnNlVGl0bGVBbGlnbigpOiBzdHJpbmcge1xuICAgIGNvbnN0IGFsaWduID0gKHRoaXMudGl0bGVBbGlnbiB8fCAnJykudG9Mb3dlckNhc2UoKTtcbiAgICByZXR1cm4gQ29kZXMuQVZBSUxBQkxFX0NPTFVNTl9USVRMRV9BTElHTlMuaW5kZXhPZihhbGlnbikgIT09IC0xID8gYWxpZ24gOiB1bmRlZmluZWQ7XG4gIH1cblxuICBnZXQgb3JpZ2luYWxXaWR0aCgpIHtcbiAgICBsZXQgb3JpZ2luYWxXaWR0aCA9IHRoaXMud2lkdGg7XG4gICAgY29uc3QgcHhWYWwgPSBVdGlsLmV4dHJhY3RQaXhlbHNWYWx1ZShvcmlnaW5hbFdpZHRoKTtcbiAgICBpZiAoVXRpbC5pc0RlZmluZWQocHhWYWwpKSB7XG4gICAgICBvcmlnaW5hbFdpZHRoID0gcHhWYWwgKyAnJztcblxuICAgIH1cbiAgICByZXR1cm4gb3JpZ2luYWxXaWR0aDtcbiAgfVxuXG4gIHByb3RlY3RlZCBjcmVhdGVSZW5kZXJlcigpOiB2b2lkIHtcbiAgICBpZiAoIVV0aWwuaXNEZWZpbmVkKHRoaXMucmVuZGVyZXIpICYmIFV0aWwuaXNEZWZpbmVkKHRoaXMudHlwZSkpIHtcbiAgICAgIGNvbnN0IGNvbXBvbmVudFJlZiA9IHJlbmRlcmVyc01hcHBpbmdbdGhpcy50eXBlXTtcbiAgICAgIGlmIChjb21wb25lbnRSZWYgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBjb25zdCBmYWN0b3J5OiBDb21wb25lbnRGYWN0b3J5PGFueT4gPSB0aGlzLnJlc29sdmVyLnJlc29sdmVDb21wb25lbnRGYWN0b3J5KGNvbXBvbmVudFJlZik7XG4gICAgICAgIGlmIChmYWN0b3J5KSB7XG4gICAgICAgICAgY29uc3QgcmVmID0gdGhpcy5jb250YWluZXIuY3JlYXRlQ29tcG9uZW50KGZhY3RvcnkpO1xuICAgICAgICAgIGNvbnN0IG5ld1JlbmRlcmVyID0gcmVmLmluc3RhbmNlO1xuICAgICAgICAgIG5ld1JlbmRlcmVyLmZpbHRlclNvdXJjZSA9IHRoaXMuZmlsdGVyU291cmNlO1xuICAgICAgICAgIG5ld1JlbmRlcmVyLmZpbHRlckZ1bmN0aW9uID0gdGhpcy5maWx0ZXJGdW5jdGlvbjtcbiAgICAgICAgICBzd2l0Y2ggKHRoaXMudHlwZSkge1xuICAgICAgICAgICAgY2FzZSAnY3VycmVuY3knOlxuICAgICAgICAgICAgICBuZXdSZW5kZXJlci5jdXJyZW5jeVN5bWJvbCA9IHRoaXMuY3VycmVuY3lTeW1ib2w7XG4gICAgICAgICAgICAgIG5ld1JlbmRlcmVyLmN1cnJlbmN5U3ltYm9sUG9zaXRpb24gPSB0aGlzLmN1cnJlbmN5U3ltYm9sUG9zaXRpb247XG4gICAgICAgICAgICAgIG5ld1JlbmRlcmVyLmRlY2ltYWxTZXBhcmF0b3IgPSB0aGlzLmRlY2ltYWxTZXBhcmF0b3I7XG4gICAgICAgICAgICAgIG5ld1JlbmRlcmVyLm1pbkRlY2ltYWxEaWdpdHMgPSB0aGlzLm1pbkRlY2ltYWxEaWdpdHM7XG4gICAgICAgICAgICAgIG5ld1JlbmRlcmVyLm1heERlY2ltYWxEaWdpdHMgPSB0aGlzLm1heERlY2ltYWxEaWdpdHM7XG4gICAgICAgICAgICAgIG5ld1JlbmRlcmVyLmdyb3VwaW5nID0gdGhpcy5ncm91cGluZztcbiAgICAgICAgICAgICAgbmV3UmVuZGVyZXIudGhvdXNhbmRTZXBhcmF0b3IgPSB0aGlzLnRob3VzYW5kU2VwYXJhdG9yO1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ2RhdGUnOlxuICAgICAgICAgICAgICBuZXdSZW5kZXJlci5mb3JtYXQgPSB0aGlzLmZvcm1hdDtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICd0aW1lJzpcbiAgICAgICAgICAgICAgbmV3UmVuZGVyZXIuZm9ybWF0ID0gdGhpcy5mb3JtYXQ7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnaW50ZWdlcic6XG4gICAgICAgICAgICAgIG5ld1JlbmRlcmVyLmdyb3VwaW5nID0gdGhpcy5ncm91cGluZztcbiAgICAgICAgICAgICAgbmV3UmVuZGVyZXIudGhvdXNhbmRTZXBhcmF0b3IgPSB0aGlzLnRob3VzYW5kU2VwYXJhdG9yO1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ2Jvb2xlYW4nOlxuICAgICAgICAgICAgICBuZXdSZW5kZXJlci50cnVlVmFsdWUgPSB0aGlzLnRydWVWYWx1ZTtcbiAgICAgICAgICAgICAgbmV3UmVuZGVyZXIuZmFsc2VWYWx1ZSA9IHRoaXMuZmFsc2VWYWx1ZTtcbiAgICAgICAgICAgICAgbmV3UmVuZGVyZXIucmVuZGVyVHJ1ZVZhbHVlID0gdGhpcy5yZW5kZXJUcnVlVmFsdWU7XG4gICAgICAgICAgICAgIG5ld1JlbmRlcmVyLnJlbmRlckZhbHNlVmFsdWUgPSB0aGlzLnJlbmRlckZhbHNlVmFsdWU7XG4gICAgICAgICAgICAgIG5ld1JlbmRlcmVyLnJlbmRlclR5cGUgPSB0aGlzLnJlbmRlclR5cGU7XG4gICAgICAgICAgICAgIG5ld1JlbmRlcmVyLmJvb2xlYW5UeXBlID0gdGhpcy5ib29sZWFuVHlwZTtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdwZXJjZW50YWdlJzpcbiAgICAgICAgICAgICAgbmV3UmVuZGVyZXIudmFsdWVCYXNlID0gdGhpcy52YWx1ZUJhc2U7XG4gICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tZmFsbHRocm91Z2hcbiAgICAgICAgICAgIGNhc2UgJ3JlYWwnOlxuICAgICAgICAgICAgICBuZXdSZW5kZXJlci5kZWNpbWFsU2VwYXJhdG9yID0gdGhpcy5kZWNpbWFsU2VwYXJhdG9yO1xuICAgICAgICAgICAgICBuZXdSZW5kZXJlci5taW5EZWNpbWFsRGlnaXRzID0gdGhpcy5taW5EZWNpbWFsRGlnaXRzO1xuICAgICAgICAgICAgICBuZXdSZW5kZXJlci5tYXhEZWNpbWFsRGlnaXRzID0gdGhpcy5tYXhEZWNpbWFsRGlnaXRzO1xuICAgICAgICAgICAgICBuZXdSZW5kZXJlci5ncm91cGluZyA9IHRoaXMuZ3JvdXBpbmc7XG4gICAgICAgICAgICAgIG5ld1JlbmRlcmVyLnRob3VzYW5kU2VwYXJhdG9yID0gdGhpcy50aG91c2FuZFNlcGFyYXRvcjtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdpbWFnZSc6XG4gICAgICAgICAgICAgIG5ld1JlbmRlcmVyLmltYWdlVHlwZSA9IHRoaXMuaW1hZ2VUeXBlO1xuICAgICAgICAgICAgICBuZXdSZW5kZXJlci5hdmF0YXIgPSB0aGlzLmF2YXRhcjtcbiAgICAgICAgICAgICAgbmV3UmVuZGVyZXIuZW1wdHlJbWFnZSA9IHRoaXMuZW1wdHlJbWFnZTtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdhY3Rpb24nOlxuICAgICAgICAgICAgICBuZXdSZW5kZXJlci5pY29uID0gdGhpcy5pY29uO1xuICAgICAgICAgICAgICBuZXdSZW5kZXJlci5hY3Rpb24gPSB0aGlzLmFjdGlvbjtcbiAgICAgICAgICAgICAgbmV3UmVuZGVyZXIudGV4dCA9IHRoaXMudGV4dDtcbiAgICAgICAgICAgICAgbmV3UmVuZGVyZXIuaWNvblBvc2l0aW9uID0gdGhpcy5pY29uUG9zaXRpb247XG4gICAgICAgICAgICAgIG5ld1JlbmRlcmVyLm9uQ2xpY2sgPSB0aGlzLm9uQ2xpY2s7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnc2VydmljZSc6XG4gICAgICAgICAgICAgIG5ld1JlbmRlcmVyLmVudGl0eSA9IHRoaXMuZW50aXR5O1xuICAgICAgICAgICAgICBuZXdSZW5kZXJlci5zZXJ2aWNlID0gdGhpcy5zZXJ2aWNlO1xuICAgICAgICAgICAgICBuZXdSZW5kZXJlci5jb2x1bW5zID0gdGhpcy5jb2x1bW5zO1xuICAgICAgICAgICAgICBuZXdSZW5kZXJlci52YWx1ZUNvbHVtbiA9IHRoaXMudmFsdWVDb2x1bW47XG4gICAgICAgICAgICAgIG5ld1JlbmRlcmVyLnBhcmVudEtleXMgPSB0aGlzLnBhcmVudEtleXM7XG4gICAgICAgICAgICAgIG5ld1JlbmRlcmVyLnF1ZXJ5TWV0aG9kID0gdGhpcy5xdWVyeU1ldGhvZDtcbiAgICAgICAgICAgICAgbmV3UmVuZGVyZXIuc2VydmljZVR5cGUgPSB0aGlzLnNlcnZpY2VUeXBlO1xuICAgICAgICAgICAgICBuZXdSZW5kZXJlci50cmFuc2xhdGUgPSB0aGlzLnRyYW5zbGF0ZTtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICd0cmFuc2xhdGUnOlxuICAgICAgICAgICAgICBuZXdSZW5kZXJlci50cmFuc2xhdGVBcmdzRm4gPSB0aGlzLnRyYW5zbGF0ZUFyZ3NGbjtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICAgIHRoaXMucmVnaXN0ZXJSZW5kZXJlcihuZXdSZW5kZXJlcik7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBidWlsZENlbGxFZGl0b3IodHlwZTogc3RyaW5nLCByZXNvbHZlcjogQ29tcG9uZW50RmFjdG9yeVJlc29sdmVyLCBjb250YWluZXI6IFZpZXdDb250YWluZXJSZWYsIHByb3BzT3JpZ2luOiBhbnksIHJlZ2lzdGVySW5Db2x1bW46IGJvb2xlYW4gPSB0cnVlKSB7XG4gICAgbGV0IGVkaXRvcjtcbiAgICBjb25zdCBjb21wb25lbnRSZWYgPSBlZGl0b3JzTWFwcGluZ1t0eXBlXSB8fCBlZGl0b3JzTWFwcGluZy50ZXh0O1xuICAgIGlmIChjb21wb25lbnRSZWYgPT09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0dXJuIGVkaXRvcjtcbiAgICB9XG4gICAgY29uc3QgZmFjdG9yeTogQ29tcG9uZW50RmFjdG9yeTxhbnk+ID0gcmVzb2x2ZXIucmVzb2x2ZUNvbXBvbmVudEZhY3RvcnkoY29tcG9uZW50UmVmKTtcbiAgICBpZiAoZmFjdG9yeSkge1xuICAgICAgY29uc3QgcmVmID0gY29udGFpbmVyLmNyZWF0ZUNvbXBvbmVudChmYWN0b3J5KTtcbiAgICAgIGVkaXRvciA9IHJlZi5pbnN0YW5jZTtcbiAgICAgIGlmIChwcm9wc09yaWdpbiAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHN3aXRjaCAodHlwZSkge1xuICAgICAgICAgIGNhc2UgJ2RhdGUnOlxuICAgICAgICAgICAgZWRpdG9yLmZvcm1hdCA9IHByb3BzT3JpZ2luLmZvcm1hdDtcbiAgICAgICAgICAgIGVkaXRvci5sb2NhbGUgPSBwcm9wc09yaWdpbi5sb2NhbGU7XG4gICAgICAgICAgICBlZGl0b3Iub1N0YXJ0VmlldyA9IHByb3BzT3JpZ2luLm9TdGFydFZpZXc7XG4gICAgICAgICAgICBlZGl0b3Iub01pbkRhdGUgPSBwcm9wc09yaWdpbi5vTWluRGF0ZTtcbiAgICAgICAgICAgIGVkaXRvci5vTWF4RGF0ZSA9IHByb3BzT3JpZ2luLm9NYXhEYXRlO1xuICAgICAgICAgICAgZWRpdG9yLm9Ub3VjaFVpID0gcHJvcHNPcmlnaW4ub1RvdWNoVWk7XG4gICAgICAgICAgICBlZGl0b3Iub1N0YXJ0QXQgPSBwcm9wc09yaWdpbi5vU3RhcnRBdDtcbiAgICAgICAgICAgIGVkaXRvci5maWx0ZXJEYXRlID0gcHJvcHNPcmlnaW4uZmlsdGVyRGF0ZTtcbiAgICAgICAgICAgIGVkaXRvci5kYXRlVmFsdWVUeXBlID0gcHJvcHNPcmlnaW4uZGF0ZVZhbHVlVHlwZTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgJ3RpbWUnOlxuICAgICAgICAgICAgZWRpdG9yLm9EYXRlRm9ybWF0ID0gcHJvcHNPcmlnaW4ub0RhdGVGb3JtYXQ7XG4gICAgICAgICAgICBlZGl0b3Iub0hvdXJGb3JtYXQgPSBwcm9wc09yaWdpbi5vSG91ckZvcm1hdDtcbiAgICAgICAgICAgIGVkaXRvci5vRGF0ZUxvY2FsZSA9IHByb3BzT3JpZ2luLm9EYXRlTG9jYWxlO1xuICAgICAgICAgICAgZWRpdG9yLm9NaW5EYXRlID0gcHJvcHNPcmlnaW4ub01pbkRhdGU7XG4gICAgICAgICAgICBlZGl0b3Iub01heERhdGUgPSBwcm9wc09yaWdpbi5vTWF4RGF0ZTtcblxuICAgICAgICAgICAgZWRpdG9yLm9Ub3VjaFVpID0gcHJvcHNPcmlnaW4ub1RvdWNoVWk7XG4gICAgICAgICAgICBlZGl0b3Iub0RhdGVTdGFydEF0ID0gcHJvcHNPcmlnaW4ub0RhdGVTdGFydEF0O1xuICAgICAgICAgICAgZWRpdG9yLm9EYXRlVGV4dElucHV0RW5hYmxlZCA9IHByb3BzT3JpZ2luLm9EYXRlVGV4dElucHV0RW5hYmxlZDtcblxuICAgICAgICAgICAgZWRpdG9yLm9Ib3VyTWluID0gcHJvcHNPcmlnaW4ub0hvdXJNaW47XG4gICAgICAgICAgICBlZGl0b3Iub0hvdXJNYXggPSBwcm9wc09yaWdpbi5vSG91ck1heDtcbiAgICAgICAgICAgIGVkaXRvci5vSG91clRleHRJbnB1dEVuYWJsZWQgPSBwcm9wc09yaWdpbi5vSG91clRleHRJbnB1dEVuYWJsZWQ7XG4gICAgICAgICAgICBlZGl0b3Iub0hvdXJQbGFjZWhvbGRlciA9IHByb3BzT3JpZ2luLm9Ib3VyUGxhY2Vob2xkZXI7XG4gICAgICAgICAgICBlZGl0b3Iub0RhdGVQbGFjZWhvbGRlciA9IHByb3BzT3JpZ2luLm9EYXRlUGxhY2Vob2xkZXI7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlICdib29sZWFuJzpcbiAgICAgICAgICAgIGVkaXRvci5ib29sZWFuVHlwZSA9IHByb3BzT3JpZ2luLmJvb2xlYW5UeXBlO1xuICAgICAgICAgICAgZWRpdG9yLmluZGV0ZXJtaW5hdGVPbk51bGwgPSBwcm9wc09yaWdpbi5pbmRldGVybWluYXRlT25OdWxsO1xuICAgICAgICAgICAgZWRpdG9yLmF1dG9Db21taXQgPSBwcm9wc09yaWdpbi5hdXRvQ29tbWl0O1xuICAgICAgICAgICAgZWRpdG9yLnRydWVWYWx1ZSA9IHByb3BzT3JpZ2luLnRydWVWYWx1ZTtcbiAgICAgICAgICAgIGVkaXRvci5mYWxzZVZhbHVlID0gcHJvcHNPcmlnaW4uZmFsc2VWYWx1ZTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgJ2ludGVnZXInOlxuICAgICAgICAgIGNhc2UgJ3BlcmNlbnRhZ2UnOlxuICAgICAgICAgIGNhc2UgJ2N1cnJlbmN5JzpcbiAgICAgICAgICBjYXNlICdyZWFsJzpcbiAgICAgICAgICAgIGVkaXRvci5taW4gPSBwcm9wc09yaWdpbi5taW47XG4gICAgICAgICAgICBlZGl0b3IubWF4ID0gcHJvcHNPcmlnaW4ubWF4O1xuICAgICAgICAgICAgZWRpdG9yLnN0ZXAgPSBVdGlsLmlzRGVmaW5lZChwcm9wc09yaWdpbi5zdGVwKSA/IHByb3BzT3JpZ2luLnN0ZXAgOiBlZGl0b3Iuc3RlcDtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgJ2ltYWdlJzpcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBlZGl0b3Iub2xhYmVsID0gcHJvcHNPcmlnaW4ub2xhYmVsO1xuICAgICAgICBlZGl0b3IudHlwZSA9IHByb3BzT3JpZ2luLnR5cGU7XG4gICAgICB9XG4gICAgICBlZGl0b3IucmVnaXN0ZXJJbkNvbHVtbiA9IHJlZ2lzdGVySW5Db2x1bW47XG4gICAgfVxuICAgIHJldHVybiBlZGl0b3I7XG4gIH1cblxuICBwcm90ZWN0ZWQgY3JlYXRlRWRpdG9yKCkge1xuICAgIGlmICghVXRpbC5pc0RlZmluZWQodGhpcy5lZGl0b3IpICYmIHRoaXMuZWRpdGFibGUpIHtcbiAgICAgIGNvbnN0IG5ld0VkaXRvciA9IHRoaXMuYnVpbGRDZWxsRWRpdG9yKHRoaXMudHlwZSwgdGhpcy5yZXNvbHZlciwgdGhpcy5jb250YWluZXIsIHRoaXMpO1xuICAgICAgaWYgKG5ld0VkaXRvcikge1xuICAgICAgICBuZXdFZGl0b3Iub3JlcXVpcmVkID0gdGhpcy5vcmVxdWlyZWQ7XG4gICAgICAgIG5ld0VkaXRvci5zaG93UGxhY2VIb2xkZXIgPSB0aGlzLnNob3dQbGFjZUhvbGRlcjtcbiAgICAgICAgbmV3RWRpdG9yLnVwZGF0ZVJlY29yZE9uRWRpdCA9IHRoaXMudXBkYXRlUmVjb3JkT25FZGl0O1xuICAgICAgICBuZXdFZGl0b3Iuc2hvd05vdGlmaWNhdGlvbk9uRWRpdCA9IHRoaXMuc2hvd05vdGlmaWNhdGlvbk9uRWRpdDtcbiAgICAgICAgbmV3RWRpdG9yLmVkaXRpb25TdGFydGVkID0gdGhpcy5lZGl0aW9uU3RhcnRlZDtcbiAgICAgICAgbmV3RWRpdG9yLmVkaXRpb25DYW5jZWxsZWQgPSB0aGlzLmVkaXRpb25DYW5jZWxsZWQ7XG4gICAgICAgIG5ld0VkaXRvci5lZGl0aW9uQ29tbWl0dGVkID0gdGhpcy5lZGl0aW9uQ29tbWl0dGVkO1xuICAgICAgICBuZXdFZGl0b3Iub25Qb3N0VXBkYXRlUmVjb3JkID0gdGhpcy5vblBvc3RVcGRhdGVSZWNvcmQ7XG4gICAgICAgIHRoaXMucmVnaXN0ZXJFZGl0b3IobmV3RWRpdG9yKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwdWJsaWMgcmVnaXN0ZXJSZW5kZXJlcihyZW5kZXJlcjogYW55KSB7XG4gICAgdGhpcy5yZW5kZXJlciA9IHJlbmRlcmVyO1xuICAgIGNvbnN0IG9Db2wgPSB0aGlzLnRhYmxlLmdldE9Db2x1bW4odGhpcy5hdHRyKTtcbiAgICBpZiAob0NvbCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBvQ29sLnJlbmRlcmVyID0gdGhpcy5yZW5kZXJlcjtcbiAgICB9XG4gICAgdGhpcy5yZW5kZXJlci5pbml0aWFsaXplKCk7XG4gIH1cblxuICBwdWJsaWMgcmVnaXN0ZXJFZGl0b3IoZWRpdG9yOiBhbnkpIHtcbiAgICB0aGlzLmVkaXRvciA9IGVkaXRvcjtcbiAgICBjb25zdCBvQ29sID0gdGhpcy50YWJsZS5nZXRPQ29sdW1uKHRoaXMuYXR0cik7XG4gICAgaWYgKG9Db2wgIT09IHVuZGVmaW5lZCkge1xuICAgICAgb0NvbC5lZGl0b3IgPSB0aGlzLmVkaXRvcjtcbiAgICB9XG4gICAgdGhpcy5lZGl0b3IuaW5pdGlhbGl6ZSgpO1xuICB9XG5cbiAgc2V0IG9yZGVyYWJsZSh2YWw6IGFueSkge1xuICAgIHRoaXMuX29yZGVyYWJsZSA9IHR5cGVvZiB2YWwgPT09ICdib29sZWFuJyA/IHZhbCA6IFV0aWwucGFyc2VCb29sZWFuKHZhbCwgdHJ1ZSk7XG4gICAgY29uc3Qgb0NvbCA9IHRoaXMudGFibGUuZ2V0T0NvbHVtbih0aGlzLmF0dHIpO1xuICAgIGlmIChvQ29sKSB7XG4gICAgICBvQ29sLm9yZGVyYWJsZSA9IHRoaXMuX29yZGVyYWJsZTtcbiAgICB9XG4gIH1cblxuICBnZXQgb3JkZXJhYmxlKCk6IGFueSB7XG4gICAgcmV0dXJuIHRoaXMuX29yZGVyYWJsZTtcbiAgfVxuXG4gIHNldCByZXNpemFibGUodmFsOiBhbnkpIHtcbiAgICB0aGlzLl9yZXNpemFibGUgPSB0eXBlb2YgdmFsID09PSAnYm9vbGVhbicgPyB2YWwgOiBVdGlsLnBhcnNlQm9vbGVhbih2YWwsIHRydWUpO1xuICAgIGNvbnN0IG9Db2wgPSB0aGlzLnRhYmxlLmdldE9Db2x1bW4odGhpcy5hdHRyKTtcbiAgICBpZiAob0NvbCkge1xuICAgICAgb0NvbC5yZXNpemFibGUgPSB0aGlzLl9yZXNpemFibGU7XG4gICAgfVxuICB9XG5cbiAgZ2V0IHJlc2l6YWJsZSgpOiBhbnkge1xuICAgIHJldHVybiB0aGlzLl9yZXNpemFibGU7XG4gIH1cblxuICBzZXQgc2VhcmNoYWJsZSh2YWw6IGFueSkge1xuICAgIHRoaXMuX3NlYXJjaGFibGUgPSB0eXBlb2YgdmFsID09PSAnYm9vbGVhbicgPyB2YWwgOiBVdGlsLnBhcnNlQm9vbGVhbih2YWwsIHRydWUpO1xuICAgIGNvbnN0IG9Db2wgPSB0aGlzLnRhYmxlLmdldE9Db2x1bW4odGhpcy5hdHRyKTtcbiAgICBpZiAob0NvbCkge1xuICAgICAgb0NvbC5zZWFyY2hhYmxlID0gdGhpcy5fc2VhcmNoYWJsZTtcbiAgICB9XG4gIH1cblxuICBnZXQgc2VhcmNoYWJsZSgpOiBhbnkge1xuICAgIHJldHVybiB0aGlzLl9zZWFyY2hhYmxlO1xuICB9XG5cbiAgc2V0IGdyb3VwYWJsZSh2YWw6IGFueSkge1xuICAgIHRoaXMuX2dyb3VwYWJsZSA9IHR5cGVvZiB2YWwgPT09ICdib29sZWFuJyA/IHZhbCA6IFV0aWwucGFyc2VCb29sZWFuKHZhbCwgdHJ1ZSk7XG4gICAgY29uc3Qgb0NvbCA9IHRoaXMudGFibGUuZ2V0T0NvbHVtbih0aGlzLmF0dHIpO1xuICAgIGlmIChvQ29sKSB7XG4gICAgICBvQ29sLmdyb3VwYWJsZSA9IHRoaXMuX2dyb3VwYWJsZTtcbiAgICB9XG4gIH1cblxuICBnZXQgZ3JvdXBhYmxlKCk6IGFueSB7XG4gICAgcmV0dXJuIHRoaXMuX2dyb3VwYWJsZTtcbiAgfVxuXG4gIGdldFNRTFR5cGUoKTogbnVtYmVyIHtcbiAgICBpZiAoISh0aGlzLnNxbFR5cGUgJiYgdGhpcy5zcWxUeXBlLmxlbmd0aCA+IDApKSB7XG4gICAgICBzd2l0Y2ggKHRoaXMudHlwZSkge1xuICAgICAgICBjYXNlICdkYXRlJzpcbiAgICAgICAgICB0aGlzLnNxbFR5cGUgPSAnVElNRVNUQU1QJztcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAnaW50ZWdlcic6XG4gICAgICAgICAgdGhpcy5zcWxUeXBlID0gJ0lOVEVHRVInO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICdib29sZWFuJzpcbiAgICAgICAgICB0aGlzLnNxbFR5cGUgPSAnQk9PTEVBTic7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ3JlYWwnOlxuICAgICAgICBjYXNlICdwZXJjZW50YWdlJzpcbiAgICAgICAgY2FzZSAnY3VycmVuY3knOlxuICAgICAgICAgIHRoaXMuc3FsVHlwZSA9ICdET1VCTEUnO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cbiAgICBjb25zdCBzcWx0ID0gdGhpcy5zcWxUeXBlICYmIHRoaXMuc3FsVHlwZS5sZW5ndGggPiAwID8gdGhpcy5zcWxUeXBlIDogdGhpcy5fZGVmYXVsdFNRTFR5cGVLZXk7XG4gICAgdGhpcy5fU1FMVHlwZSA9IFNRTFR5cGVzLmdldFNRTFR5cGVWYWx1ZShzcWx0KTtcbiAgICByZXR1cm4gdGhpcy5fU1FMVHlwZTtcbiAgfVxuXG4gIHNldCBmaWx0ZXJTb3VyY2UodmFsOiBzdHJpbmcpIHtcbiAgICBjb25zdCBsb3dlclZhbCA9ICh2YWwgfHwgJycpLnRvTG93ZXJDYXNlKCk7XG4gICAgdGhpcy5fZmlsdGVyU291cmNlID0gKGxvd2VyVmFsID09PSAncmVuZGVyJyB8fCBsb3dlclZhbCA9PT0gJ2RhdGEnIHx8IGxvd2VyVmFsID09PSAnYm90aCcpID8gbG93ZXJWYWwgOiAncmVuZGVyJztcbiAgfVxuXG4gIGdldCBmaWx0ZXJTb3VyY2UoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5fZmlsdGVyU291cmNlO1xuICB9XG59XG4iLCI8c3BhbiAjY29udGFpbmVyPlxuPC9zcGFuPiJdfQ==
440
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiby10YWJsZS1jb2x1bW4uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvb250aW1pemUtd2ViLW5neC9zcmMvbGliL2NvbXBvbmVudHMvdGFibGUvY29sdW1uL28tdGFibGUtY29sdW1uLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL29udGltaXplLXdlYi1uZ3gvc3JjL2xpYi9jb21wb25lbnRzL3RhYmxlL2NvbHVtbi9vLXRhYmxlLWNvbHVtbi5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUVMLHVCQUF1QixFQUN2QixTQUFTLEVBQ1QsWUFBWSxFQUNaLFVBQVUsRUFDVixNQUFNLEVBQ04sUUFBUSxFQUdSLFNBQVMsRUFDVCxnQkFBZ0IsRUFDakIsTUFBTSxlQUFlLENBQUM7QUFFdkIsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUVwQyxPQUFPLEVBQUUscUJBQXFCLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQztBQU9sRyxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDNUMsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ2xELE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUMxQyxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDdkQsT0FBTyxFQUFFLGNBQWMsRUFBRSwyQkFBMkIsRUFBRSw0QkFBNEIsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQ3RILE9BQU8sRUFBRSw2QkFBNkIsRUFBRSw4QkFBOEIsRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLCtCQUErQixDQUFDOzs7QUFFaEksTUFBTSxDQUFDLE1BQU0sNkJBQTZCLEdBQUc7SUFHM0MsTUFBTTtJQUdOLE9BQU87SUFHUCx5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LEVBQUU7O3dEQUNhO0FBQ3JDO0lBQUMscUJBQXFCLEVBQUU7OzhEQUNTO0FBRWpDO0lBQUMscUJBQXFCLEVBQUU7O2lFQUNXO0FBQ25DO0lBQUMscUJBQXFCLEVBQUU7O3FFQUNnQjtBQU94QztJQUFDLHFCQUFxQixFQUFFOzt1REFDWTtBQU1wQztJQUFDLG9CQUFvQixFQUFFOztrREFDWDtBQUNaO0lBQUMsb0JBQW9CLEVBQUU7O2tEQUNYO0FBQ1o7SUFBQyxvQkFBb0IsRUFBRTs7bURBQ1Y7QUFDYjtJQUFDLG9CQUFvQixFQUFFOzsrREFDTTtBQUM3QjtJQUFDLG9CQUFvQixFQUFFOzsrREFDTTtBQUc3QjtJQUFDLHFCQUFxQixFQUFFOztrRUFDYTtBQUNyQztJQUFDLHFCQUFxQixFQUFFOzt5REFDSjtBQVdwQjtJQUFDLHFCQUFxQixFQUFFOzt3REFDRzsyRkFuSmhCLHFCQUFxQjtrQkFSakMsU0FBUzsrQkFDRSxnQkFBZ0IsbUJBR1QsdUJBQXVCLENBQUMsTUFBTSxVQUN2Qyw2QkFBNkIsV0FDNUIsOEJBQThCOzswQkE2SnBDLE1BQU07MkJBQUMsVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUFDLGVBQWUsQ0FBQzttRUF6SXBDLFFBQVEsTUFLUixPQUFPLE1BZ0VKLFNBQVMsTUFZVCxTQUFTLE1BRW5CLGVBQWUsTUFHZixrQkFBa0IsTUFFbEIsc0JBQXNCLE1BUVosUUFBUSxNQU9sQixHQUFHLE1BRUgsR0FBRyxNQUVILElBQUksTUFFSixnQkFBZ0IsTUFFaEIsZ0JBQWdCLE1BSWhCLG1CQUFtQixNQUVuQixVQUFVLE1BWVYsU0FBUyxNQUdULFNBQVM7c0JBRFIsU0FBUzt1QkFBQyxXQUFXLEVBQUUsRUFBRSxJQUFJLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIEFmdGVyVmlld0luaXQsXG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICBDb21wb25lbnQsXG4gIEV2ZW50RW1pdHRlcixcbiAgZm9yd2FyZFJlZixcbiAgSW5qZWN0LFxuICBJbmplY3RvcixcbiAgT25EZXN0cm95LFxuICBPbkluaXQsXG4gIFZpZXdDaGlsZCxcbiAgVmlld0NvbnRhaW5lclJlZlxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEFzeW5jVmFsaWRhdG9yRm4sIFZhbGlkYXRvckZuIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XG5cbmltcG9ydCB7IEJvb2xlYW5JbnB1dENvbnZlcnRlciwgTnVtYmVySW5wdXRDb252ZXJ0ZXIgfSBmcm9tICcuLi8uLi8uLi9kZWNvcmF0b3JzL2lucHV0LWNvbnZlcnRlcic7XG5pbXBvcnQgeyBPVGFibGVDb2x1bW4gfSBmcm9tICcuLi8uLi8uLi9pbnRlcmZhY2VzL28tdGFibGUtY29sdW1uLmludGVyZmFjZSc7XG5pbXBvcnQgeyBPUGVyY2VudGFnZVZhbHVlQmFzZVR5cGUgfSBmcm9tICcuLi8uLi8uLi9waXBlcy9vLXBlcmNlbnRhZ2UucGlwZSc7XG5pbXBvcnQgeyBEYXRlRmlsdGVyRnVuY3Rpb24gfSBmcm9tICcuLi8uLi8uLi90eXBlcy9kYXRlLWZpbHRlci1mdW5jdGlvbi50eXBlJztcbmltcG9ydCB7IEVycm9yRGF0YSB9IGZyb20gJy4uLy4uLy4uL3R5cGVzL2Vycm9yLWRhdGEudHlwZSc7XG5pbXBvcnQgeyBFeHByZXNzaW9uIH0gZnJvbSAnLi4vLi4vLi4vdHlwZXMvZXhwcmVzc2lvbi50eXBlJztcbmltcG9ydCB7IE9EYXRlVmFsdWVUeXBlIH0gZnJvbSAnLi4vLi4vLi4vdHlwZXMvby1kYXRlLXZhbHVlLnR5cGUnO1xuaW1wb3J0IHsgQ29kZXMgfSBmcm9tICcuLi8uLi8uLi91dGlsL2NvZGVzJztcbmltcG9ydCB7IFNRTFR5cGVzIH0gZnJvbSAnLi4vLi4vLi4vdXRpbC9zcWx0eXBlcyc7XG5pbXBvcnQgeyBVdGlsIH0gZnJvbSAnLi4vLi4vLi4vdXRpbC91dGlsJztcbmltcG9ydCB7IE9UYWJsZUNvbXBvbmVudCB9IGZyb20gJy4uL28tdGFibGUuY29tcG9uZW50JztcbmltcG9ydCB7IGVkaXRvcnNNYXBwaW5nLCBPX1RBQkxFX0NFTExfRURJVE9SU19JTlBVVFMsIE9fVEFCTEVfQ0VMTF9FRElUT1JTX09VVFBVVFMgfSBmcm9tICcuL2NlbGwtZWRpdG9yL2NlbGwtZWRpdG9yJztcbmltcG9ydCB7IE9fVEFCTEVfQ0VMTF9SRU5ERVJFUlNfSU5QVVRTLCBPX1RBQkxFX0NFTExfUkVOREVSRVJTX09VVFBVVFMsIHJlbmRlcmVyc01hcHBpbmcgfSBmcm9tICcuL2NlbGwtcmVuZGVyZXIvY2VsbC1yZW5kZXJlcic7XG5cbmV4cG9ydCBjb25zdCBERUZBVUxUX0lOUFVUU19PX1RBQkxFX0NPTFVNTiA9IFtcblxuICAvLyBhdHRyIFtzdHJpbmddOiBjb2x1bW4gbmFtZS5cbiAgJ2F0dHInLFxuXG4gIC8vIHRpdGxlIFtzdHJpbmddOiBjb2x1bW4gdGl0bGUuIERlZmF1bHQ6IG5vIHZhbHVlLlxuICAndGl0bGUnLFxuXG4gIC8vIHRpdGxlLWFsaWduIFtzdGFydCB8IGNlbnRlciB8IGVuZF06IGNvbHVtbiB0aXRsZSBhbGlnbm1lbnQuIERlZmF1bHQ6IGNlbnRlci5cbiAgJ3RpdGxlQWxpZ246IHRpdGxlLWFsaWduJyxcblxuICAvLyBjb250ZW50LWFsaWduIFtzdGFydCB8IGNlbnRlciB8IGVuZF06IGNvbHVtbiBjb250ZW50IGFsaWdubWVudC5cbiAgJ2NvbnRlbnRBbGlnbjogY29udGVudC1hbGlnbicsXG5cbiAgLy8gb3JkZXJhYmxlIFtub3x5ZXNdOiBjb2x1bW4gY2FuIGJlIHNvcnRlZC4gRGVmYXVsdDogeWVzLlxuICAnb3JkZXJhYmxlJyxcblxuICAvLyBzZWFyY2hhYmxlIFtub3x5ZXNdOiBzZWFyY2hpbmdzIGFyZSBwZXJmb3JtZWQgaW50byBjb2x1bW4gY29udGVudC4gRGVmYXVsdDogeWVzLlxuICAnc2VhcmNoYWJsZScsXG5cbiAgLy8gZ3JvdXBhYmxlIFtub3x5ZXN8dHJ1ZXxmYWxzZV06IEluZGljYXRlcyB3aGV0aGVyIG9yIG5vdCB0aGUgY29sdW1uIGNhbiBiZSBncm91cGFibGVcbiAgJ2dyb3VwYWJsZScsXG5cbiAgLy8gdHlwZSBbYm9vbGVhbnxpbnRlZ2VyfHJlYWx8Y3VycmVuY3l8ZGF0ZXxpbWFnZV06IGNvbHVtbiB0eXBlLiBEZWZhdWx0OiBubyB2YWx1ZSAoc3RyaW5nKS5cbiAgJ3R5cGUnLFxuXG4gIC8vIGVkaXRhYmxlIFtub3x5ZXNdOiBjb2x1bW4gY2FuIGJlIGVkaXRlZCBkaXJlY3RseSBvdmVyIHRoZSB0YWJsZS4gRGVmYXVsdDogbm8uXG4gICdlZGl0YWJsZScsXG5cbiAgJ3dpZHRoJyxcblxuICAvLyBvbmx5IGluIHBpeGVsc1xuICAnbWluV2lkdGg6IG1pbi13aWR0aCcsXG5cbiAgLy8gb25seSBpbiBwaXhlbHNcbiAgJ21heFdpZHRoOiBtYXgtd2lkdGgnLFxuXG4gIC8vIGFzeW5jLWxvYWQgW25vfHllc3x0cnVlfGZhbHNlXTogYXN5bmNocm9ub3VzIHF1ZXJ5LiBEZWZhdWx0OiBub1xuICAnYXN5bmNMb2FkIDogYXN5bmMtbG9hZCcsXG5cbiAgLy8gc3FsdHlwZVtzdHJpbmddOiBEYXRhIHR5cGUgYWNjb3JkaW5nIHRvIEphdmEgc3RhbmRhcmQuIFNlZSBTUUxUeXBlIGNsYXNzLiBEZWZhdWx0OiAnT1RIRVInXG4gICdzcWxUeXBlOiBzcWwtdHlwZScsXG5cbiAgJ3Rvb2x0aXAnLFxuXG4gICd0b29sdGlwVmFsdWU6IHRvb2x0aXAtdmFsdWUnLFxuXG4gICd0b29sdGlwRnVuY3Rpb246IHRvb2x0aXAtZnVuY3Rpb24nLFxuXG4gICdtdWx0aWxpbmUnLFxuXG4gICdyZXNpemFibGUnLFxuXG4gICdmaWx0ZXJFeHByZXNzaW9uRnVuY3Rpb246IGZpbHRlci1leHByZXNzaW9uLWZ1bmN0aW9uJyxcblxuICAnY2xhc3MnLFxuXG4gICdhbmd1bGFyVmFsaWRhdG9yc0ZuOiB2YWxpZGF0b3JzJyxcblxuICAnYW5ndWxhclZhbGlkYXRvcnNGbkVycm9yczogdmFsaWRhdG9ycy1lcnJvcnMnLFxuXG4gICdhbmd1bGFyQXN5bmNWYWxpZGF0b3JzRm46IGFzeW5jLXZhbGlkYXRvcnMnLFxuXG4gIC4uLk9fVEFCTEVfQ0VMTF9SRU5ERVJFUlNfSU5QVVRTLFxuICAuLi5PX1RBQkxFX0NFTExfRURJVE9SU19JTlBVVFNcbl07XG5cbmV4cG9ydCBjb25zdCBERUZBVUxUX09VVFBVVFNfT19UQUJMRV9DT0xVTU4gPSBbXG4gIC4uLk9fVEFCTEVfQ0VMTF9SRU5ERVJFUlNfT1VUUFVUUyxcbiAgLi4uT19UQUJMRV9DRUxMX0VESVRPUlNfT1VUUFVUU1xuXTtcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnby10YWJsZS1jb2x1bW4nLFxuICB0ZW1wbGF0ZVVybDogJy4vby10YWJsZS1jb2x1bW4uY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9vLXRhYmxlLWNvbHVtbi5jb21wb25lbnQuc2NzcyddLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgaW5wdXRzOiBERUZBVUxUX0lOUFVUU19PX1RBQkxFX0NPTFVNTixcbiAgb3V0cHV0czogREVGQVVMVF9PVVRQVVRTX09fVEFCTEVfQ09MVU1OXG59KVxuZXhwb3J0IGNsYXNzIE9UYWJsZUNvbHVtbkNvbXBvbmVudCBpbXBsZW1lbnRzIE9UYWJsZUNvbHVtbiwgT25EZXN0cm95LCBPbkluaXQsIEFmdGVyVmlld0luaXQge1xuXG4gIHB1YmxpYyByZW5kZXJlcjogYW55O1xuICBwdWJsaWMgZWRpdG9yOiBhbnk7XG5cbiAgcHVibGljIHR5cGU6IHN0cmluZztcbiAgcHVibGljIGF0dHI6IHN0cmluZztcbiAgcHVibGljIHRpdGxlOiBzdHJpbmc7XG4gIHB1YmxpYyB0aXRsZUFsaWduOiBzdHJpbmc7XG4gIHB1YmxpYyBjb250ZW50QWxpZ246ICdzdGFydCcgfCAnY2VudGVyJyB8ICdlbmQnO1xuICBwdWJsaWMgc3FsVHlwZTogc3RyaW5nO1xuICBwcm90ZWN0ZWQgX1NRTFR5cGU6IG51bWJlcjtcbiAgcHJvdGVjdGVkIF9kZWZhdWx0U1FMVHlwZUtleTogc3RyaW5nID0gJ09USEVSJztcbiAgcHJvdGVjdGVkIF9vcmRlcmFibGU6IGJvb2xlYW47XG4gIHByb3RlY3RlZCBfcmVzaXphYmxlOiBib29sZWFuO1xuICBwcm90ZWN0ZWQgX3NlYXJjaGFibGU6IGJvb2xlYW4gPSB0cnVlO1xuICBwcm90ZWN0ZWQgX2dyb3VwYWJsZTogYm9vbGVhbjtcbiAgQEJvb2xlYW5JbnB1dENvbnZlcnRlcigpXG4gIHB1YmxpYyBlZGl0YWJsZTogYm9vbGVhbiA9IGZhbHNlO1xuICBwdWJsaWMgd2lkdGg6IHN0cmluZztcbiAgcHVibGljIG1pbldpZHRoOiBzdHJpbmc7XG4gIHB1YmxpYyBtYXhXaWR0aDogc3RyaW5nO1xuICBAQm9vbGVhbklucHV0Q29udmVydGVyKClcbiAgcHVibGljIHRvb2x0aXA6IGJvb2xlYW4gPSBmYWxzZTtcbiAgdG9vbHRpcFZhbHVlOiBzdHJpbmc7XG4gIHRvb2x0aXBGdW5jdGlvbjogKHJvd0RhdGE6IGFueSkgPT4gYW55O1xuICBwdWJsaWMgY2xhc3M6IHN0cmluZztcblxuICBzZXQgbXVsdGlsaW5lKHZhbDogYm9vbGVhbikge1xuICAgIHZhbCA9IFV0aWwucGFyc2VCb29sZWFuKFN0cmluZyh2YWwpKTtcbiAgICB0aGlzLl9tdWx0aWxpbmUgPSB2YWw7XG4gIH1cbiAgZ2V0IG11bHRpbGluZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5fbXVsdGlsaW5lO1xuICB9XG4gIHByb3RlY3RlZCBfbXVsdGlsaW5lOiBib29sZWFuID0gZmFsc2U7XG5cbiAgcHVibGljIGFuZ3VsYXJWYWxpZGF0b3JzRm46IFZhbGlkYXRvckZuW10gPSBbXTtcbiAgcHVibGljIGFuZ3VsYXJWYWxpZGF0b3JzRm5FcnJvcnM6IEVycm9yRGF0YVtdID0gW107XG5cbiAgcHVibGljIGFuZ3VsYXJBc3luY1ZhbGlkYXRvcnNGbjogQXN5bmNWYWxpZGF0b3JGbltdID0gW107XG5cbiAgZmlsdGVyRXhwcmVzc2lvbkZ1bmN0aW9uOiAoY29sdW1uQXR0cjogc3RyaW5nLCBxdWlja0ZpbHRlcj86IHN0cmluZykgPT4gRXhwcmVzc2lvbjtcblxuICAvKiBpbnB1dCByZW5kZXJlciBiYXNlICovXG4gIHB1YmxpYyBfZmlsdGVyU291cmNlOiAncmVuZGVyJyB8ICdkYXRhJyB8ICdib3RoJyA9ICdyZW5kZXInO1xuICBwdWJsaWMgZmlsdGVyRnVuY3Rpb246IChjZWxsVmFsdWU6IGFueSwgcm93VmFsdWU6IGFueSwgcXVpY2tGaWx0ZXI/OiBzdHJpbmcpID0+IGJvb2xlYW47XG4gIC8qIGlucHV0IHJlbmRlcmVyIGRhdGUgKi9cbiAgcHJvdGVjdGVkIGZvcm1hdDogc3RyaW5nO1xuICAvKiBpbnB1dCByZW5kZXJlciBpbnRlZ2VyICovXG4gIHByb3RlY3RlZCBncm91cGluZzogYW55ID0gdHJ1ZTtcbiAgcHJvdGVjdGVkIHRob3VzYW5kU2VwYXJhdG9yOiBzdHJpbmcgPSAnLCc7XG4gIC8qIGlucHV0IHJlbmRlcmVyIHJlYWwgKi9cbiAgcHJvdGVjdGVkIGRlY2ltYWxTZXBhcmF0b3I6IHN0cmluZyA9ICcuJztcblxuICAvKiBpbnB1dCByZW5kZXJlciBjdXJyZW5jeSAqL1xuICBwcm90ZWN0ZWQgY3VycmVuY3lTeW1ib2w6IHN0cmluZztcbiAgcHJvdGVjdGVkIGN1cnJlbmN5U3ltYm9sUG9zaXRpb246IHN0cmluZztcblxuICAvKiBpbnB1dCByZW5kZXJlciBib29sZWFuICovXG4gIHByb3RlY3RlZCB0cnVlVmFsdWU6IGFueTtcbiAgcHJvdGVjdGVkIGZhbHNlVmFsdWU6IGFueTtcbiAgcHJvdGVjdGVkIHJlbmRlclRydWVWYWx1ZTogYW55O1xuICBwcm90ZWN0ZWQgcmVuZGVyRmFsc2VWYWx1ZTogYW55O1xuICBwcm90ZWN0ZWQgcmVuZGVyVHlwZTogc3RyaW5nID0gJ3N0cmluZyc7XG4gIHByb3RlY3RlZCBib29sZWFuVHlwZTogc3RyaW5nID0gJ2Jvb2xlYW4nO1xuXG4gIC8qIGlucHV0IGltYWdlICovXG4gIHByb3RlY3RlZCBpbWFnZVR5cGU6IHN0cmluZztcbiAgcHJvdGVjdGVkIGF2YXRhcjogc3RyaW5nO1xuICBwcm90ZWN0ZWQgZW1wdHlJbWFnZTogc3RyaW5nO1xuXG4gIC8qIGlucHV0IHJlbmRlcmVyIGFjdGlvbiAqL1xuICBwcm90ZWN0ZWQgaWNvbjogc3RyaW5nO1xuICBwcm90ZWN0ZWQgYWN0aW9uOiBzdHJpbmc7XG4gIHByb3RlY3RlZCB0ZXh0OiBzdHJpbmc7XG4gIHByb3RlY3RlZCBpY29uUG9zaXRpb246IHN0cmluZztcblxuICAvKiBpbnB1dCByZW5kZXJlciBzZXJ2aWNlICovXG4gIHByb3RlY3RlZCBlbnRpdHk6IHN0cmluZztcbiAgcHJvdGVjdGVkIHNlcnZpY2U6IHN0cmluZztcbiAgcHJvdGVjdGVkIGNvbHVtbnM6IHN0cmluZztcbiAgcHJvdGVjdGVkIHZhbHVlQ29sdW1uOiBzdHJpbmc7XG4gIHByb3RlY3RlZCBwYXJlbnRLZXlzOiBzdHJpbmc7XG4gIHByb3RlY3RlZCBxdWVyeU1ldGhvZDogc3RyaW5nID0gQ29kZXMuUVVFUllfTUVUSE9EO1xuICBwcm90ZWN0ZWQgc2VydmljZVR5cGU6IHN0cmluZztcbiAgQEJvb2xlYW5JbnB1dENvbnZlcnRlcigpXG4gIHByb3RlY3RlZCB0cmFuc2xhdGU6IGJvb2xlYW4gPSBmYWxzZTtcbiAgLyogaW5wdXQgcmVuZGVyZXIgdHJhbnNsYXRlICovXG4gIHByb3RlY3RlZCB0cmFuc2xhdGVBcmdzRm46IChyb3dEYXRhOiBhbnkpID0+IGFueVtdO1xuICAvKiBpbnB1dCB0aW1lICovXG4gIG9EYXRlRm9ybWF0ID0gJ0wnO1xuICBvSG91ckZvcm1hdCA9IDI0O1xuXG4gIC8qIGlucHV0IHJlbmRlcmVyIHBlcmNlbnRhZ2UgKi9cbiAgdmFsdWVCYXNlOiBPUGVyY2VudGFnZVZhbHVlQmFzZVR5cGUgPSAxO1xuXG4gIC8qIGlucHV0IGVkaXRvciAqL1xuICBAQm9vbGVhbklucHV0Q29udmVydGVyKClcbiAgcHJvdGVjdGVkIG9yZXF1aXJlZDogYm9vbGVhbiA9IGZhbHNlO1xuICBAQm9vbGVhbklucHV0Q29udmVydGVyKClcbiAgc2hvd1BsYWNlSG9sZGVyOiBib29sZWFuID0gZmFsc2U7XG4gIG9sYWJlbDogc3RyaW5nO1xuICBAQm9vbGVhbklucHV0Q29udmVydGVyKClcbiAgdXBkYXRlUmVjb3JkT25FZGl0OiBib29sZWFuID0gdHJ1ZTtcbiAgQEJvb2xlYW5JbnB1dENvbnZlcnRlcigpXG4gIHNob3dOb3RpZmljYXRpb25PbkVkaXQ6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAvKiBpbnB1dCBlZGl0b3IgZGF0ZSAqL1xuICBwcm90ZWN0ZWQgbG9jYWxlOiBzdHJpbmc7XG4gIHByb3RlY3RlZCBvU3RhcnRWaWV3OiAnbW9udGgnIHwgJ3llYXInID0gJ21vbnRoJztcbiAgcHJvdGVjdGVkIG9NaW5EYXRlOiBzdHJpbmc7XG4gIHByb3RlY3RlZCBvTWF4RGF0ZTogc3RyaW5nO1xuICBAQm9vbGVhbklucHV0Q29udmVydGVyKClcbiAgcHJvdGVjdGVkIG9Ub3VjaFVpOiBib29sZWFuID0gZmFsc2U7XG4gIHByb3RlY3RlZCBvU3RhcnRBdDogc3RyaW5nO1xuICBwcm90ZWN0ZWQgZmlsdGVyRGF0ZTogRGF0ZUZpbHRlckZ1bmN0aW9uO1xuICBwcm90ZWN0ZWQgZGF0ZVZhbHVlVHlwZTogT0RhdGVWYWx1ZVR5cGUgPSAndGltZXN0YW1wJztcblxuICAvKiBpbnB1dCBlZGl0b3IgaW50ZWdlciAqL1xuICBATnVtYmVySW5wdXRDb252ZXJ0ZXIoKVxuICBtaW46IG51bWJlcjtcbiAgQE51bWJlcklucHV0Q29udmVydGVyKClcbiAgbWF4OiBudW1iZXI7XG4gIEBOdW1iZXJJbnB1dENvbnZlcnRlcigpXG4gIHN0ZXA6IG51bWJlcjtcbiAgQE51bWJlcklucHV0Q29udmVydGVyKClcbiAgbWluRGVjaW1hbERpZ2l0czogbnVtYmVyID0gMjtcbiAgQE51bWJlcklucHV0Q29udmVydGVyKClcbiAgbWF4RGVjaW1hbERpZ2l0czogbnVtYmVyID0gMjtcblxuICAvKiBpbnB1dCBlZGl0b3IgYm9vbGVhbiAqL1xuICBAQm9vbGVhbklucHV0Q29udmVydGVyKClcbiAgaW5kZXRlcm1pbmF0ZU9uTnVsbDogYm9vbGVhbiA9IGZhbHNlO1xuICBAQm9vbGVhbklucHV0Q29udmVydGVyKClcbiAgYXV0b0NvbW1pdDogYm9vbGVhbjtcblxuICAvKiBvdXRwdXQgY2VsbCByZW5kZXJlciBhY3Rpb24gKi9cbiAgb25DbGljazogRXZlbnRFbWl0dGVyPG9iamVjdD4gPSBuZXcgRXZlbnRFbWl0dGVyPG9iamVjdD4oKTtcblxuICAvKiBvdXRwdXQgY2VsbCBlZGl0b3IgKi9cbiAgZWRpdGlvblN0YXJ0ZWQ6IEV2ZW50RW1pdHRlcjxvYmplY3Q+ID0gbmV3IEV2ZW50RW1pdHRlcjxvYmplY3Q+KCk7XG4gIGVkaXRpb25DYW5jZWxsZWQ6IEV2ZW50RW1pdHRlcjxvYmplY3Q+ID0gbmV3IEV2ZW50RW1pdHRlcjxvYmplY3Q+KCk7XG4gIGVkaXRpb25Db21taXR0ZWQ6IEV2ZW50RW1pdHRlcjxvYmplY3Q+ID0gbmV3IEV2ZW50RW1pdHRlcjxvYmplY3Q+KCk7XG4gIG9uUG9zdFVwZGF0ZVJlY29yZDogRXZlbnRFbWl0dGVyPG9iamVjdD4gPSBuZXcgRXZlbnRFbWl0dGVyPG9iamVjdD4oKTtcblxuICBAQm9vbGVhbklucHV0Q29udmVydGVyKClcbiAgYXN5bmNMb2FkOiBib29sZWFuID0gZmFsc2U7XG5cbiAgQFZpZXdDaGlsZCgnY29udGFpbmVyJywgeyByZWFkOiBWaWV3Q29udGFpbmVyUmVmLCBzdGF0aWM6IHRydWUgfSlcbiAgY29udGFpbmVyOiBWaWV3Q29udGFpbmVyUmVmO1xuXG4gIHByaXZhdGUgc3Vic2NyaXB0aW9ucyA9IG5ldyBTdWJzY3JpcHRpb24oKTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBASW5qZWN0KGZvcndhcmRSZWYoKCkgPT4gT1RhYmxlQ29tcG9uZW50KSkgcHVibGljIHRhYmxlOiBPVGFibGVDb21wb25lbnQsXG4gICAgcHJvdGVjdGVkIGluamVjdG9yOiBJbmplY3RvclxuICApIHtcbiAgfVxuXG4gIHN0YXRpYyBhZGRFZGl0b3IodHlwZTogc3RyaW5nLCBlZGl0b3JDbGFzc1JlZmVyZW5jZTogYW55KSB7XG4gICAgaWYgKCFlZGl0b3JzTWFwcGluZy5oYXNPd25Qcm9wZXJ0eSh0eXBlKSAmJiBVdGlsLmlzRGVmaW5lZChlZGl0b3JDbGFzc1JlZmVyZW5jZSkpIHtcbiAgICAgIGVkaXRvcnNNYXBwaW5nW3R5cGVdID0gZWRpdG9yQ2xhc3NSZWZlcmVuY2U7XG4gICAgfVxuICB9XG5cbiAgbmdPbkluaXQoKSB7XG4gICAgdGhpcy5ncm91cGluZyA9IFV0aWwucGFyc2VCb29sZWFuKHRoaXMuZ3JvdXBpbmcsIHRydWUpO1xuICAgIHRoaXMudGl0bGVBbGlnbiA9IHRoaXMucGFyc2VUaXRsZUFsaWduKCk7XG4gICAgdGhpcy50YWJsZS5yZWdpc3RlckNvbHVtbih0aGlzKTtcbiAgICB0aGlzLnN1YnNjcmlwdGlvbnMuYWRkKHRoaXMudGFibGUub25SZWluaXRpYWxpemUuc3Vic2NyaWJlKCgpID0+IHRoaXMudGFibGUucmVnaXN0ZXJDb2x1bW4odGhpcykpKTtcbiAgfVxuXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLmNyZWF0ZVJlbmRlcmVyKCk7XG4gICAgdGhpcy5jcmVhdGVFZGl0b3IoKTtcbiAgfVxuXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIHRoaXMuc3Vic2NyaXB0aW9ucy51bnN1YnNjcmliZSgpO1xuICB9XG5cbiAgcGFyc2VUaXRsZUFsaWduKCk6IHN0cmluZyB7XG4gICAgY29uc3QgYWxpZ24gPSAodGhpcy50aXRsZUFsaWduIHx8ICcnKS50b0xvd2VyQ2FzZSgpO1xuICAgIHJldHVybiBDb2Rlcy5BVkFJTEFCTEVfQ09MVU1OX1RJVExFX0FMSUdOUy5pbmRleE9mKGFsaWduKSAhPT0gLTEgPyBhbGlnbiA6IHVuZGVmaW5lZDtcbiAgfVxuXG4gIGdldCBvcmlnaW5hbFdpZHRoKCkge1xuICAgIGxldCBvcmlnaW5hbFdpZHRoID0gdGhpcy53aWR0aDtcbiAgICBjb25zdCBweFZhbCA9IFV0aWwuZXh0cmFjdFBpeGVsc1ZhbHVlKG9yaWdpbmFsV2lkdGgpO1xuICAgIGlmIChVdGlsLmlzRGVmaW5lZChweFZhbCkpIHtcbiAgICAgIG9yaWdpbmFsV2lkdGggPSBweFZhbCArICcnO1xuXG4gICAgfVxuICAgIHJldHVybiBvcmlnaW5hbFdpZHRoO1xuICB9XG5cbiAgcHJvdGVjdGVkIGNyZWF0ZVJlbmRlcmVyKCk6IHZvaWQge1xuICAgIGlmICghVXRpbC5pc0RlZmluZWQodGhpcy5yZW5kZXJlcikgJiYgVXRpbC5pc0RlZmluZWQodGhpcy50eXBlKSkge1xuICAgICAgY29uc3QgY29tcG9uZW50UmVmID0gcmVuZGVyZXJzTWFwcGluZ1t0aGlzLnR5cGVdO1xuICAgICAgaWYgKGNvbXBvbmVudFJlZiAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGxldCBuZXdSZW5kZXJlcjtcbiAgICAgICAgY29uc3QgcmVmID0gdGhpcy5jb250YWluZXIuY3JlYXRlQ29tcG9uZW50KGNvbXBvbmVudFJlZik7XG4gICAgICAgIG5ld1JlbmRlcmVyID0gcmVmLmluc3RhbmNlO1xuICAgICAgICBuZXdSZW5kZXJlci5maWx0ZXJTb3VyY2UgPSB0aGlzLmZpbHRlclNvdXJjZTtcbiAgICAgICAgbmV3UmVuZGVyZXIuZmlsdGVyRnVuY3Rpb24gPSB0aGlzLmZpbHRlckZ1bmN0aW9uO1xuICAgICAgICBzd2l0Y2ggKHRoaXMudHlwZSkge1xuICAgICAgICAgIGNhc2UgJ2N1cnJlbmN5JzpcbiAgICAgICAgICAgIG5ld1JlbmRlcmVyLmN1cnJlbmN5U3ltYm9sID0gdGhpcy5jdXJyZW5jeVN5bWJvbDtcbiAgICAgICAgICAgIG5ld1JlbmRlcmVyLmN1cnJlbmN5U3ltYm9sUG9zaXRpb24gPSB0aGlzLmN1cnJlbmN5U3ltYm9sUG9zaXRpb247XG4gICAgICAgICAgICBuZXdSZW5kZXJlci5kZWNpbWFsU2VwYXJhdG9yID0gdGhpcy5kZWNpbWFsU2VwYXJhdG9yO1xuICAgICAgICAgICAgbmV3UmVuZGVyZXIubWluRGVjaW1hbERpZ2l0cyA9IHRoaXMubWluRGVjaW1hbERpZ2l0cztcbiAgICAgICAgICAgIG5ld1JlbmRlcmVyLm1heERlY2ltYWxEaWdpdHMgPSB0aGlzLm1heERlY2ltYWxEaWdpdHM7XG4gICAgICAgICAgICBuZXdSZW5kZXJlci5ncm91cGluZyA9IHRoaXMuZ3JvdXBpbmc7XG4gICAgICAgICAgICBuZXdSZW5kZXJlci50aG91c2FuZFNlcGFyYXRvciA9IHRoaXMudGhvdXNhbmRTZXBhcmF0b3I7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlICdkYXRlJzpcbiAgICAgICAgICAgIG5ld1JlbmRlcmVyLmZvcm1hdCA9IHRoaXMuZm9ybWF0O1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAndGltZSc6XG4gICAgICAgICAgICBuZXdSZW5kZXJlci5mb3JtYXQgPSB0aGlzLmZvcm1hdDtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgJ2ludGVnZXInOlxuICAgICAgICAgICAgbmV3UmVuZGVyZXIuZ3JvdXBpbmcgPSB0aGlzLmdyb3VwaW5nO1xuICAgICAgICAgICAgbmV3UmVuZGVyZXIudGhvdXNhbmRTZXBhcmF0b3IgPSB0aGlzLnRob3VzYW5kU2VwYXJhdG9yO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAnYm9vbGVhbic6XG4gICAgICAgICAgICBuZXdSZW5kZXJlci50cnVlVmFsdWUgPSB0aGlzLnRydWVWYWx1ZTtcbiAgICAgICAgICAgIG5ld1JlbmRlcmVyLmZhbHNlVmFsdWUgPSB0aGlzLmZhbHNlVmFsdWU7XG4gICAgICAgICAgICBuZXdSZW5kZXJlci5yZW5kZXJUcnVlVmFsdWUgPSB0aGlzLnJlbmRlclRydWVWYWx1ZTtcbiAgICAgICAgICAgIG5ld1JlbmRlcmVyLnJlbmRlckZhbHNlVmFsdWUgPSB0aGlzLnJlbmRlckZhbHNlVmFsdWU7XG4gICAgICAgICAgICBuZXdSZW5kZXJlci5yZW5kZXJUeXBlID0gdGhpcy5yZW5kZXJUeXBlO1xuICAgICAgICAgICAgbmV3UmVuZGVyZXIuYm9vbGVhblR5cGUgPSB0aGlzLmJvb2xlYW5UeXBlO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAncGVyY2VudGFnZSc6XG4gICAgICAgICAgICBuZXdSZW5kZXJlci52YWx1ZUJhc2UgPSB0aGlzLnZhbHVlQmFzZTtcbiAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tZmFsbHRocm91Z2hcbiAgICAgICAgICBjYXNlICdyZWFsJzpcbiAgICAgICAgICAgIG5ld1JlbmRlcmVyLmRlY2ltYWxTZXBhcmF0b3IgPSB0aGlzLmRlY2ltYWxTZXBhcmF0b3I7XG4gICAgICAgICAgICBuZXdSZW5kZXJlci5taW5EZWNpbWFsRGlnaXRzID0gdGhpcy5taW5EZWNpbWFsRGlnaXRzO1xuICAgICAgICAgICAgbmV3UmVuZGVyZXIubWF4RGVjaW1hbERpZ2l0cyA9IHRoaXMubWF4RGVjaW1hbERpZ2l0cztcbiAgICAgICAgICAgIG5ld1JlbmRlcmVyLmdyb3VwaW5nID0gdGhpcy5ncm91cGluZztcbiAgICAgICAgICAgIG5ld1JlbmRlcmVyLnRob3VzYW5kU2VwYXJhdG9yID0gdGhpcy50aG91c2FuZFNlcGFyYXRvcjtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgJ2ltYWdlJzpcbiAgICAgICAgICAgIG5ld1JlbmRlcmVyLmltYWdlVHlwZSA9IHRoaXMuaW1hZ2VUeXBlO1xuICAgICAgICAgICAgbmV3UmVuZGVyZXIuYXZhdGFyID0gdGhpcy5hdmF0YXI7XG4gICAgICAgICAgICBuZXdSZW5kZXJlci5lbXB0eUltYWdlID0gdGhpcy5lbXB0eUltYWdlO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAnYWN0aW9uJzpcbiAgICAgICAgICAgIG5ld1JlbmRlcmVyLmljb24gPSB0aGlzLmljb247XG4gICAgICAgICAgICBuZXdSZW5kZXJlci5hY3Rpb24gPSB0aGlzLmFjdGlvbjtcbiAgICAgICAgICAgIG5ld1JlbmRlcmVyLnRleHQgPSB0aGlzLnRleHQ7XG4gICAgICAgICAgICBuZXdSZW5kZXJlci5pY29uUG9zaXRpb24gPSB0aGlzLmljb25Qb3NpdGlvbjtcbiAgICAgICAgICAgIG5ld1JlbmRlcmVyLm9uQ2xpY2sgPSB0aGlzLm9uQ2xpY2s7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlICdzZXJ2aWNlJzpcbiAgICAgICAgICAgIG5ld1JlbmRlcmVyLmVudGl0eSA9IHRoaXMuZW50aXR5O1xuICAgICAgICAgICAgbmV3UmVuZGVyZXIuc2VydmljZSA9IHRoaXMuc2VydmljZTtcbiAgICAgICAgICAgIG5ld1JlbmRlcmVyLmNvbHVtbnMgPSB0aGlzLmNvbHVtbnM7XG4gICAgICAgICAgICBuZXdSZW5kZXJlci52YWx1ZUNvbHVtbiA9IHRoaXMudmFsdWVDb2x1bW47XG4gICAgICAgICAgICBuZXdSZW5kZXJlci5wYXJlbnRLZXlzID0gdGhpcy5wYXJlbnRLZXlzO1xuICAgICAgICAgICAgbmV3UmVuZGVyZXIucXVlcnlNZXRob2QgPSB0aGlzLnF1ZXJ5TWV0aG9kO1xuICAgICAgICAgICAgbmV3UmVuZGVyZXIuc2VydmljZVR5cGUgPSB0aGlzLnNlcnZpY2VUeXBlO1xuICAgICAgICAgICAgbmV3UmVuZGVyZXIudHJhbnNsYXRlID0gdGhpcy50cmFuc2xhdGU7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlICd0cmFuc2xhdGUnOlxuICAgICAgICAgICAgbmV3UmVuZGVyZXIudHJhbnNsYXRlQXJnc0ZuID0gdGhpcy50cmFuc2xhdGVBcmdzRm47XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnJlZ2lzdGVyUmVuZGVyZXIobmV3UmVuZGVyZXIpO1xuXG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgYnVpbGRDZWxsRWRpdG9yKHR5cGU6IHN0cmluZywgY29udGFpbmVyOiBWaWV3Q29udGFpbmVyUmVmLCBwcm9wc09yaWdpbjogYW55LCByZWdpc3RlckluQ29sdW1uOiBib29sZWFuID0gdHJ1ZSkge1xuICAgIGxldCBlZGl0b3I7XG4gICAgY29uc3QgY29tcG9uZW50UmVmID0gZWRpdG9yc01hcHBpbmdbdHlwZV0gfHwgZWRpdG9yc01hcHBpbmcudGV4dDtcbiAgICBpZiAoY29tcG9uZW50UmVmID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybiBlZGl0b3I7XG4gICAgfVxuXG4gICAgY29uc3QgcmVmID0gY29udGFpbmVyLmNyZWF0ZUNvbXBvbmVudChjb21wb25lbnRSZWYpO1xuICAgIGVkaXRvciA9IHJlZi5pbnN0YW5jZTtcbiAgICBpZiAocHJvcHNPcmlnaW4gIT09IHVuZGVmaW5lZCkge1xuICAgICAgc3dpdGNoICh0eXBlKSB7XG4gICAgICAgIGNhc2UgJ2RhdGUnOlxuICAgICAgICAgIGVkaXRvci5mb3JtYXQgPSBwcm9wc09yaWdpbi5mb3JtYXQ7XG4gICAgICAgICAgZWRpdG9yLmxvY2FsZSA9IHByb3BzT3JpZ2luLmxvY2FsZTtcbiAgICAgICAgICBlZGl0b3Iub1N0YXJ0VmlldyA9IHByb3BzT3JpZ2luLm9TdGFydFZpZXc7XG4gICAgICAgICAgZWRpdG9yLm9NaW5EYXRlID0gcHJvcHNPcmlnaW4ub01pbkRhdGU7XG4gICAgICAgICAgZWRpdG9yLm9NYXhEYXRlID0gcHJvcHNPcmlnaW4ub01heERhdGU7XG4gICAgICAgICAgZWRpdG9yLm9Ub3VjaFVpID0gcHJvcHNPcmlnaW4ub1RvdWNoVWk7XG4gICAgICAgICAgZWRpdG9yLm9TdGFydEF0ID0gcHJvcHNPcmlnaW4ub1N0YXJ0QXQ7XG4gICAgICAgICAgZWRpdG9yLmZpbHRlckRhdGUgPSBwcm9wc09yaWdpbi5maWx0ZXJEYXRlO1xuICAgICAgICAgIGVkaXRvci5kYXRlVmFsdWVUeXBlID0gcHJvcHNPcmlnaW4uZGF0ZVZhbHVlVHlwZTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAndGltZSc6XG4gICAgICAgICAgZWRpdG9yLm9EYXRlRm9ybWF0ID0gcHJvcHNPcmlnaW4ub0RhdGVGb3JtYXQ7XG4gICAgICAgICAgZWRpdG9yLm9Ib3VyRm9ybWF0ID0gcHJvcHNPcmlnaW4ub0hvdXJGb3JtYXQ7XG4gICAgICAgICAgZWRpdG9yLm9EYXRlTG9jYWxlID0gcHJvcHNPcmlnaW4ub0RhdGVMb2NhbGU7XG4gICAgICAgICAgZWRpdG9yLm9NaW5EYXRlID0gcHJvcHNPcmlnaW4ub01pbkRhdGU7XG4gICAgICAgICAgZWRpdG9yLm9NYXhEYXRlID0gcHJvcHNPcmlnaW4ub01heERhdGU7XG5cbiAgICAgICAgICBlZGl0b3Iub1RvdWNoVWkgPSBwcm9wc09yaWdpbi5vVG91Y2hVaTtcbiAgICAgICAgICBlZGl0b3Iub0RhdGVTdGFydEF0ID0gcHJvcHNPcmlnaW4ub0RhdGVTdGFydEF0O1xuICAgICAgICAgIGVkaXRvci5vRGF0ZVRleHRJbnB1dEVuYWJsZWQgPSBwcm9wc09yaWdpbi5vRGF0ZVRleHRJbnB1dEVuYWJsZWQ7XG5cbiAgICAgICAgICBlZGl0b3Iub0hvdXJNaW4gPSBwcm9wc09yaWdpbi5vSG91ck1pbjtcbiAgICAgICAgICBlZGl0b3Iub0hvdXJNYXggPSBwcm9wc09yaWdpbi5vSG91ck1heDtcbiAgICAgICAgICBlZGl0b3Iub0hvdXJUZXh0SW5wdXRFbmFibGVkID0gcHJvcHNPcmlnaW4ub0hvdXJUZXh0SW5wdXRFbmFibGVkO1xuICAgICAgICAgIGVkaXRvci5vSG91clBsYWNlaG9sZGVyID0gcHJvcHNPcmlnaW4ub0hvdXJQbGFjZWhvbGRlcjtcbiAgICAgICAgICBlZGl0b3Iub0RhdGVQbGFjZWhvbGRlciA9IHByb3BzT3JpZ2luLm9EYXRlUGxhY2Vob2xkZXI7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ2Jvb2xlYW4nOlxuICAgICAgICAgIGVkaXRvci5ib29sZWFuVHlwZSA9IHByb3BzT3JpZ2luLmJvb2xlYW5UeXBlO1xuICAgICAgICAgIGVkaXRvci5pbmRldGVybWluYXRlT25OdWxsID0gcHJvcHNPcmlnaW4uaW5kZXRlcm1pbmF0ZU9uTnVsbDtcbiAgICAgICAgICBlZGl0b3IuYXV0b0NvbW1pdCA9IHByb3BzT3JpZ2luLmF1dG9Db21taXQ7XG4gICAgICAgICAgZWRpdG9yLnRydWVWYWx1ZSA9IHByb3BzT3JpZ2luLnRydWVWYWx1ZTtcbiAgICAgICAgICBlZGl0b3IuZmFsc2VWYWx1ZSA9IHByb3BzT3JpZ2luLmZhbHNlVmFsdWU7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ2ludGVnZXInOlxuICAgICAgICBjYXNlICdwZXJjZW50YWdlJzpcbiAgICAgICAgY2FzZSAnY3VycmVuY3knOlxuICAgICAgICBjYXNlICdyZWFsJzpcbiAgICAgICAgICBlZGl0b3IubWluID0gcHJvcHNPcmlnaW4ubWluO1xuICAgICAgICAgIGVkaXRvci5tYXggPSBwcm9wc09yaWdpbi5tYXg7XG4gICAgICAgICAgZWRpdG9yLnN0ZXAgPSBVdGlsLmlzRGVmaW5lZChwcm9wc09yaWdpbi5zdGVwKSA/IHByb3BzT3JpZ2luLnN0ZXAgOiBlZGl0b3Iuc3RlcDtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAnaW1hZ2UnOlxuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgZWRpdG9yLm9sYWJlbCA9IHByb3BzT3JpZ2luLm9sYWJlbDtcbiAgICAgIGVkaXRvci50eXBlID0gcHJvcHNPcmlnaW4udHlwZTtcbiAgICB9XG4gICAgZWRpdG9yLnJlZ2lzdGVySW5Db2x1bW4gPSByZWdpc3RlckluQ29sdW1uO1xuXG4gICAgcmV0dXJuIGVkaXRvcjtcbiAgfVxuXG4gIHByb3RlY3RlZCBjcmVhdGVFZGl0b3IoKSB7XG4gICAgaWYgKCFVdGlsLmlzRGVmaW5lZCh0aGlzLmVkaXRvcikgJiYgdGhpcy5lZGl0YWJsZSkge1xuICAgICAgY29uc3QgbmV3RWRpdG9yID0gdGhpcy5idWlsZENlbGxFZGl0b3IodGhpcy50eXBlLCB0aGlzLmNvbnRhaW5lciwgdGhpcyk7XG4gICAgICBpZiAobmV3RWRpdG9yKSB7XG4gICAgICAgIG5ld0VkaXRvci5vcmVxdWlyZWQgPSB0aGlzLm9yZXF1aXJlZDtcbiAgICAgICAgbmV3RWRpdG9yLnNob3dQbGFjZUhvbGRlciA9IHRoaXMuc2hvd1BsYWNlSG9sZGVyO1xuICAgICAgICBuZXdFZGl0b3IudXBkYXRlUmVjb3JkT25FZGl0ID0gdGhpcy51cGRhdGVSZWNvcmRPbkVkaXQ7XG4gICAgICAgIG5ld0VkaXRvci5zaG93Tm90aWZpY2F0aW9uT25FZGl0ID0gdGhpcy5zaG93Tm90aWZpY2F0aW9uT25FZGl0O1xuICAgICAgICBuZXdFZGl0b3IuZWRpdGlvblN0YXJ0ZWQgPSB0aGlzLmVkaXRpb25TdGFydGVkO1xuICAgICAgICBuZXdFZGl0b3IuZWRpdGlvbkNhbmNlbGxlZCA9IHRoaXMuZWRpdGlvbkNhbmNlbGxlZDtcbiAgICAgICAgbmV3RWRpdG9yLmVkaXRpb25Db21taXR0ZWQgPSB0aGlzLmVkaXRpb25Db21taXR0ZWQ7XG4gICAgICAgIG5ld0VkaXRvci5vblBvc3RVcGRhdGVSZWNvcmQgPSB0aGlzLm9uUG9zdFVwZGF0ZVJlY29yZDtcbiAgICAgICAgdGhpcy5yZWdpc3RlckVkaXRvcihuZXdFZGl0b3IpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyByZWdpc3RlclJlbmRlcmVyKHJlbmRlcmVyOiBhbnkpIHtcbiAgICB0aGlzLnJlbmRlcmVyID0gcmVuZGVyZXI7XG4gICAgY29uc3Qgb0NvbCA9IHRoaXMudGFibGUuZ2V0T0NvbHVtbih0aGlzLmF0dHIpO1xuICAgIGlmIChvQ29sICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIG9Db2wucmVuZGVyZXIgPSB0aGlzLnJlbmRlcmVyO1xuICAgIH1cbiAgICB0aGlzLnJlbmRlcmVyLmluaXRpYWxpemUoKTtcbiAgfVxuXG4gIHB1YmxpYyByZWdpc3RlckVkaXRvcihlZGl0b3I6IGFueSkge1xuICAgIHRoaXMuZWRpdG9yID0gZWRpdG9yO1xuICAgIGNvbnN0IG9Db2wgPSB0aGlzLnRhYmxlLmdldE9Db2x1bW4odGhpcy5hdHRyKTtcbiAgICBpZiAob0NvbCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBvQ29sLmVkaXRvciA9IHRoaXMuZWRpdG9yO1xuICAgIH1cbiAgICB0aGlzLmVkaXRvci5pbml0aWFsaXplKCk7XG4gIH1cblxuICBzZXQgb3JkZXJhYmxlKHZhbDogYW55KSB7XG4gICAgdGhpcy5fb3JkZXJhYmxlID0gdHlwZW9mIHZhbCA9PT0gJ2Jvb2xlYW4nID8gdmFsIDogVXRpbC5wYXJzZUJvb2xlYW4odmFsLCB0cnVlKTtcbiAgICBjb25zdCBvQ29sID0gdGhpcy50YWJsZS5nZXRPQ29sdW1uKHRoaXMuYXR0cik7XG4gICAgaWYgKG9Db2wpIHtcbiAgICAgIG9Db2wub3JkZXJhYmxlID0gdGhpcy5fb3JkZXJhYmxlO1xuICAgIH1cbiAgfVxuXG4gIGdldCBvcmRlcmFibGUoKTogYW55IHtcbiAgICByZXR1cm4gdGhpcy5fb3JkZXJhYmxlO1xuICB9XG5cbiAgc2V0IHJlc2l6YWJsZSh2YWw6IGFueSkge1xuICAgIHRoaXMuX3Jlc2l6YWJsZSA9IHR5cGVvZiB2YWwgPT09ICdib29sZWFuJyA/IHZhbCA6IFV0aWwucGFyc2VCb29sZWFuKHZhbCwgdHJ1ZSk7XG4gICAgY29uc3Qgb0NvbCA9IHRoaXMudGFibGUuZ2V0T0NvbHVtbih0aGlzLmF0dHIpO1xuICAgIGlmIChvQ29sKSB7XG4gICAgICBvQ29sLnJlc2l6YWJsZSA9IHRoaXMuX3Jlc2l6YWJsZTtcbiAgICB9XG4gIH1cblxuICBnZXQgcmVzaXphYmxlKCk6IGFueSB7XG4gICAgcmV0dXJuIHRoaXMuX3Jlc2l6YWJsZTtcbiAgfVxuXG4gIHNldCBzZWFyY2hhYmxlKHZhbDogYW55KSB7XG4gICAgdGhpcy5fc2VhcmNoYWJsZSA9IHR5cGVvZiB2YWwgPT09ICdib29sZWFuJyA/IHZhbCA6IFV0aWwucGFyc2VCb29sZWFuKHZhbCwgdHJ1ZSk7XG4gICAgY29uc3Qgb0NvbCA9IHRoaXMudGFibGUuZ2V0T0NvbHVtbih0aGlzLmF0dHIpO1xuICAgIGlmIChvQ29sKSB7XG4gICAgICBvQ29sLnNlYXJjaGFibGUgPSB0aGlzLl9zZWFyY2hhYmxlO1xuICAgIH1cbiAgfVxuXG4gIGdldCBzZWFyY2hhYmxlKCk6IGFueSB7XG4gICAgcmV0dXJuIHRoaXMuX3NlYXJjaGFibGU7XG4gIH1cblxuICBzZXQgZ3JvdXBhYmxlKHZhbDogYW55KSB7XG4gICAgdGhpcy5fZ3JvdXBhYmxlID0gdHlwZW9mIHZhbCA9PT0gJ2Jvb2xlYW4nID8gdmFsIDogVXRpbC5wYXJzZUJvb2xlYW4odmFsLCB0cnVlKTtcbiAgICBjb25zdCBvQ29sID0gdGhpcy50YWJsZS5nZXRPQ29sdW1uKHRoaXMuYXR0cik7XG4gICAgaWYgKG9Db2wpIHtcbiAgICAgIG9Db2wuZ3JvdXBhYmxlID0gdGhpcy5fZ3JvdXBhYmxlO1xuICAgIH1cbiAgfVxuXG4gIGdldCBncm91cGFibGUoKTogYW55IHtcbiAgICByZXR1cm4gdGhpcy5fZ3JvdXBhYmxlO1xuICB9XG5cbiAgZ2V0U1FMVHlwZSgpOiBudW1iZXIge1xuICAgIGlmICghKHRoaXMuc3FsVHlwZSAmJiB0aGlzLnNxbFR5cGUubGVuZ3RoID4gMCkpIHtcbiAgICAgIHN3aXRjaCAodGhpcy50eXBlKSB7XG4gICAgICAgIGNhc2UgJ2RhdGUnOlxuICAgICAgICAgIHRoaXMuc3FsVHlwZSA9ICdUSU1FU1RBTVAnO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICdpbnRlZ2VyJzpcbiAgICAgICAgICB0aGlzLnNxbFR5cGUgPSAnSU5URUdFUic7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ2Jvb2xlYW4nOlxuICAgICAgICAgIHRoaXMuc3FsVHlwZSA9ICdCT09MRUFOJztcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAncmVhbCc6XG4gICAgICAgIGNhc2UgJ3BlcmNlbnRhZ2UnOlxuICAgICAgICBjYXNlICdjdXJyZW5jeSc6XG4gICAgICAgICAgdGhpcy5zcWxUeXBlID0gJ0RPVUJMRSc7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuICAgIGNvbnN0IHNxbHQgPSB0aGlzLnNxbFR5cGUgJiYgdGhpcy5zcWxUeXBlLmxlbmd0aCA+IDAgPyB0aGlzLnNxbFR5cGUgOiB0aGlzLl9kZWZhdWx0U1FMVHlwZUtleTtcbiAgICB0aGlzLl9TUUxUeXBlID0gU1FMVHlwZXMuZ2V0U1FMVHlwZVZhbHVlKHNxbHQpO1xuICAgIHJldHVybiB0aGlzLl9TUUxUeXBlO1xuICB9XG5cbiAgc2V0IGZpbHRlclNvdXJjZSh2YWw6IHN0cmluZykge1xuICAgIGNvbnN0IGxvd2VyVmFsID0gKHZhbCB8fCAnJykudG9Mb3dlckNhc2UoKTtcbiAgICB0aGlzLl9maWx0ZXJTb3VyY2UgPSAobG93ZXJWYWwgPT09ICdyZW5kZXInIHx8IGxvd2VyVmFsID09PSAnZGF0YScgfHwgbG93ZXJWYWwgPT09ICdib3RoJykgPyBsb3dlclZhbCA6ICdyZW5kZXInO1xuICB9XG5cbiAgZ2V0IGZpbHRlclNvdXJjZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLl9maWx0ZXJTb3VyY2U7XG4gIH1cbn1cbiIsIjxzcGFuICNjb250YWluZXI+XG48L3NwYW4+Il19