sf-crud 12.0.1-beta3 → 12.0.1-beta31

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 (29) hide show
  1. package/bundles/sf-crud.umd.js +625 -87
  2. package/bundles/sf-crud.umd.js.map +1 -1
  3. package/esm2015/lib/components/control/control.component.js +74 -9
  4. package/esm2015/lib/components/registro/registro.component.js +179 -25
  5. package/esm2015/lib/components/registro-child/registro-child.component.js +196 -0
  6. package/esm2015/lib/components/tablero/tablero.component.js +60 -18
  7. package/esm2015/lib/sf-crud.module.js +32 -12
  8. package/esm2015/lib/sf-crud.service.js +16 -2
  9. package/esm2015/lib/shared/models/crud-config.model.js +43 -0
  10. package/esm2015/lib/shared/models/data-temp-crud.model.js +6 -0
  11. package/esm2015/lib/shared/models/shema.model.js +7 -0
  12. package/esm2015/lib/shared/services/general.service.js +1 -1
  13. package/esm2015/public-api.js +2 -1
  14. package/fesm2015/sf-crud.js +534 -62
  15. package/fesm2015/sf-crud.js.map +1 -1
  16. package/lib/components/control/control.component.d.ts +11 -2
  17. package/lib/components/registro/registro.component.d.ts +30 -9
  18. package/lib/components/registro-child/registro-child.component.d.ts +35 -0
  19. package/lib/components/tablero/tablero.component.d.ts +15 -4
  20. package/lib/sf-crud.module.d.ts +77 -73
  21. package/lib/sf-crud.service.d.ts +4 -0
  22. package/lib/shared/{services/models → models}/crud-config.model.d.ts +7 -1
  23. package/lib/shared/models/data-temp-crud.model.d.ts +4 -0
  24. package/lib/shared/{services/models → models}/shema.model.d.ts +1 -0
  25. package/lib/shared/services/general.service.d.ts +1 -1
  26. package/package.json +1 -1
  27. package/public-api.d.ts +1 -0
  28. package/esm2015/lib/shared/services/models/crud-config.model.js +0 -43
  29. package/esm2015/lib/shared/services/models/shema.model.js +0 -7
@@ -1,29 +1,40 @@
1
- import { Component, Input } from '@angular/core';
2
- import { CrudConfig, Operations } from '../../shared/services/models/crud-config.model';
3
- import * as jsonpath from 'jsonpath';
1
+ import { Component, EventEmitter, Input, Output } from '@angular/core';
2
+ import { CrudConfig, Operations } from '../../shared/models/crud-config.model';
3
+ import { DialogService, DynamicDialogConfig, DynamicDialogRef } from 'primeng/dynamicdialog';
4
4
  import { MessageService } from 'primeng/api';
5
+ import { RegistroChildComponent } from '../registro-child/registro-child.component';
6
+ import * as jsonpath from 'jsonpath';
5
7
  import * as i0 from "@angular/core";
6
8
  import * as i1 from "../../shared/services/general.service";
7
9
  import * as i2 from "@angular/router";
8
10
  import * as i3 from "primeng/api";
9
- import * as i4 from "primeng/blockui";
10
- import * as i5 from "primeng/toast";
11
- import * as i6 from "../control/control.component";
12
- import * as i7 from "@angular/common";
13
- import * as i8 from "primeng/button";
14
- import * as i9 from "primeng/ripple";
11
+ import * as i4 from "primeng/dynamicdialog";
12
+ import * as i5 from "../../sf-crud.service";
13
+ import * as i6 from "primeng/blockui";
14
+ import * as i7 from "primeng/toast";
15
+ import * as i8 from "../control/control.component";
16
+ import * as i9 from "primeng/table";
17
+ import * as i10 from "@angular/common";
18
+ import * as i11 from "primeng/button";
19
+ import * as i12 from "primeng/ripple";
15
20
  export class RegistroComponent {
16
- constructor(generalService, router, messageSerice) {
21
+ constructor(generalService, router, messageSerice, dialogService, sfCrudService) {
17
22
  this.generalService = generalService;
18
23
  this.router = router;
19
24
  this.messageSerice = messageSerice;
25
+ this.dialogService = dialogService;
26
+ this.sfCrudService = sfCrudService;
20
27
  this.idKatios = '';
21
28
  this.idEntidad = '';
22
29
  this.trx = '';
23
30
  this.id = '';
24
- this.enProceso = false;
31
+ this.sendData = new EventEmitter();
32
+ this.dataTemp = [];
25
33
  this.crudConfig = new CrudConfig();
34
+ this.enProceso = false;
26
35
  this.configOperation = new Operations();
36
+ this.isLocal = false;
37
+ this.dataTemp = this.sfCrudService.getDataTemp();
27
38
  }
28
39
  ngOnInit() {
29
40
  this.loadConfigCrud();
@@ -33,7 +44,9 @@ export class RegistroComponent {
33
44
  this.enProceso = true;
34
45
  this.generalService.getCrudByEntidad(this.idKatios, this.idEntidad)
35
46
  .then(res => {
47
+ this.setDataTemp(res.esquema, this.dataTemp);
36
48
  this.crudConfig = res;
49
+ console.log(this.crudConfig);
37
50
  if (this.trx != 'c')
38
51
  this.getInfoRegistro(this.crudConfig.registro);
39
52
  else {
@@ -82,19 +95,33 @@ export class RegistroComponent {
82
95
  return jsonpath.query(this.data, scope.replace('.properties', ''))[0];
83
96
  }
84
97
  setValue(value, scope) {
85
- jsonpath.value(this.data, scope.replace('.properties', ''), value);
98
+ switch (typeof (value)) {
99
+ case 'object':
100
+ if (Array.isArray(value))
101
+ value.forEach((val) => jsonpath.value(this.data, val.scope.replace('.properties', ''), val.value));
102
+ else
103
+ jsonpath.value(this.data, scope.replace('.properties', ''), value);
104
+ break;
105
+ default:
106
+ jsonpath.value(this.data, scope.replace('.properties', ''), value);
107
+ break;
108
+ }
109
+ this.applyValuesOnEvent('onChange', this.crudConfig.esquema);
86
110
  }
87
111
  createObject(esquema) {
88
112
  let object = {};
89
113
  switch (esquema.type) {
114
+ case 'numeric':
115
+ return (esquema === null || esquema === void 0 ? void 0 : esquema.default) || 0;
90
116
  case 'string':
91
- case 'number':
92
117
  case 'date':
93
118
  return (esquema === null || esquema === void 0 ? void 0 : esquema.default) ? this.setDefaultValue(esquema.default) : null;
94
119
  case 'boolean':
95
120
  return (esquema === null || esquema === void 0 ? void 0 : esquema.default) || false;
96
121
  case 'array':
97
122
  return [];
123
+ case 'file':
124
+ return null;
98
125
  case 'object':
99
126
  for (const key in esquema === null || esquema === void 0 ? void 0 : esquema.properties) {
100
127
  Object.defineProperty(object, key, { value: this.createObject(esquema === null || esquema === void 0 ? void 0 : esquema.properties[key]), writable: true, enumerable: true, configurable: true });
@@ -106,8 +133,10 @@ export class RegistroComponent {
106
133
  return object;
107
134
  }
108
135
  submit() {
136
+ console.log(this.data);
109
137
  if (!this.validateData())
110
138
  return;
139
+ this.applyValuesOnEvent('onSubmit', this.crudConfig.esquema);
111
140
  this.enProceso = true;
112
141
  let endpoint = this.configOperation.endpoint;
113
142
  endpoint = endpoint.replace('@idKatios', this.idKatios);
@@ -116,8 +145,12 @@ export class RegistroComponent {
116
145
  .then(() => {
117
146
  this.messageSerice.add({ severity: 'success', detail: `Proceso exitoso!` });
118
147
  setTimeout(() => {
148
+ var _a, _b;
119
149
  this.enProceso = false;
120
- this.back();
150
+ if ((_a = this.configOperation) === null || _a === void 0 ? void 0 : _a.redirect)
151
+ this.router.navigate([(_b = this.configOperation) === null || _b === void 0 ? void 0 : _b.redirect]);
152
+ else
153
+ this.back();
121
154
  }, 2000);
122
155
  })
123
156
  .catch(err => {
@@ -132,11 +165,24 @@ export class RegistroComponent {
132
165
  return true;
133
166
  }
134
167
  validateDataLocal() {
168
+ var _a, _b, _c, _d;
135
169
  let err = [];
136
- this.configOperation.validations.required.forEach(x => {
170
+ (_b = (_a = this.configOperation.validations) === null || _a === void 0 ? void 0 : _a.required) === null || _b === void 0 ? void 0 : _b.forEach(x => {
137
171
  if (!jsonpath.query(this.data, x.field)[0])
138
172
  err.push(x.message);
139
173
  });
174
+ (_d = (_c = this.configOperation.validations) === null || _c === void 0 ? void 0 : _c.operations) === null || _d === void 0 ? void 0 : _d.forEach((op) => {
175
+ switch (op.action) {
176
+ case 'sumArray':
177
+ let var1 = jsonpath.query(this.data, op.scope[0]).reduce((acc, cur) => acc += cur[op.key], 0);
178
+ let var2 = jsonpath.query(this.data, op.scope[1]).reduce((acc, cur) => acc += cur[op.key], 0);
179
+ if (var1 != var2)
180
+ err.push(op.message);
181
+ break;
182
+ default:
183
+ break;
184
+ }
185
+ });
140
186
  if (err.length != 0)
141
187
  this.messageSerice.add({ severity: 'warn', detail: err.join('. ') });
142
188
  return err.length == 0;
@@ -145,11 +191,13 @@ export class RegistroComponent {
145
191
  let data = null;
146
192
  switch (value) {
147
193
  case '@uactivo':
148
- let uactivo = JSON.parse(sessionStorage.getItem('oSessionTFM') || '{}');
149
- if (!uactivo)
150
- console.log('Validar configuracion de sesion');
151
- else
152
- data = `${uactivo.UsuarioSistema.TDOC}-${uactivo.UsuarioSistema.NDOC}`;
194
+ data = `${this.user.UsuarioSistema.TDOC}-${this.user.UsuarioSistema.NDOC}`;
195
+ break;
196
+ case '@tdocactivo':
197
+ data = this.user.UsuarioSistema.TDOC;
198
+ break;
199
+ case '@ndocactivo':
200
+ data = this.user.UsuarioSistema.NDOC;
153
201
  break;
154
202
  case '@hoy':
155
203
  data = new Date();
@@ -160,17 +208,119 @@ export class RegistroComponent {
160
208
  }
161
209
  return data;
162
210
  }
211
+ sendNotification(message) {
212
+ this.messageSerice.add(message);
213
+ }
214
+ addObjectArray(element) {
215
+ this.dialogRef = this.dialogService.open(RegistroChildComponent, {
216
+ header: `Detalle`,
217
+ width: '70%',
218
+ modal: true,
219
+ closable: false,
220
+ data: {
221
+ uiEsquema: Object.assign({}, element.elements),
222
+ esquema: this.getControl(element.scope),
223
+ id: this.getValue(element.scope).length + 1
224
+ }
225
+ });
226
+ this.dialogRef.onClose.subscribe((data) => {
227
+ if (data)
228
+ this.data[element.scope.replace('$..properties.', '')].push(data);
229
+ this.applyValuesOnEvent('onChange', this.crudConfig.esquema, element.scope.replace('$..properties.', ''));
230
+ });
231
+ }
232
+ editRow(element, data) {
233
+ this.dialogRef = this.dialogService.open(RegistroChildComponent, {
234
+ header: `Detalle`,
235
+ width: '70%',
236
+ modal: true,
237
+ closable: false,
238
+ data: {
239
+ uiEsquema: Object.assign({}, element.elements),
240
+ esquema: this.getControl(element.scope),
241
+ data: Object.assign({}, data)
242
+ }
243
+ });
244
+ this.dialogRef.onClose.subscribe((data) => {
245
+ if (data)
246
+ this.data[element.scope.replace('$..properties.', '')][data.id - 1] = data;
247
+ this.applyValuesOnEvent('onChange', this.crudConfig.esquema, element.scope.replace('$..properties.', ''));
248
+ });
249
+ }
250
+ deleteRow(element, index) {
251
+ this.data[element.scope.replace('$..properties.', '')].splice(index - 1, 1);
252
+ index = 1;
253
+ this.data[element.scope.replace('$..properties.', '')].forEach((el) => {
254
+ el.id = index;
255
+ index++;
256
+ });
257
+ this.applyValuesOnEvent('onChange', this.crudConfig.esquema, element.scope.replace('$..properties.', ''));
258
+ }
259
+ applyValuesOnEvent(event, esquema, key) {
260
+ if (key) {
261
+ if (esquema.properties[key][event]) {
262
+ esquema.properties[key][event].forEach((value) => {
263
+ this.setValueEvent(this.data, value);
264
+ });
265
+ }
266
+ }
267
+ else {
268
+ for (const key in esquema.properties) {
269
+ if (esquema.properties[key][event]) {
270
+ esquema.properties[key][event].forEach((value) => {
271
+ this.setValueEvent(this.data, value);
272
+ });
273
+ }
274
+ }
275
+ }
276
+ }
277
+ setValueEvent(data, params) {
278
+ var _a;
279
+ switch (params.op) {
280
+ case 'sum':
281
+ jsonpath.value(data, params.scope[1], jsonpath.query(data, params.scope[0]).reduce((acc, cur) => acc += (params === null || params === void 0 ? void 0 : params.key) ? cur[params.key] : cur, 0));
282
+ break;
283
+ case 'concat':
284
+ let array = [];
285
+ (_a = params === null || params === void 0 ? void 0 : params.key) === null || _a === void 0 ? void 0 : _a.reduce((acc, cur) => {
286
+ array.push(jsonpath.query(data, cur)[0]);
287
+ }, []);
288
+ if (params === null || params === void 0 ? void 0 : params.separator)
289
+ jsonpath.value(data, params.scope[0], array.join((params === null || params === void 0 ? void 0 : params.separator) || ' '));
290
+ break;
291
+ case 'enable':
292
+ jsonpath.value(this.crudConfig.esquema, params.scope[0], false);
293
+ break;
294
+ case 'disabled':
295
+ jsonpath.value(this.crudConfig.esquema, params.scope[0], true);
296
+ break;
297
+ case 'replace:endpoint':
298
+ jsonpath.value(this.crudConfig.esquema, params.scope[0], this.crudConfig.esquema.config.endpointtemp.replace(params.scope[1], jsonpath.query(data, `$..${params.key}`)));
299
+ break;
300
+ case 'setNull':
301
+ jsonpath.value(this.data, `$.${params.key}`, null);
302
+ break;
303
+ default:
304
+ break;
305
+ }
306
+ }
307
+ setDataTemp(esquema, dataTemp) {
308
+ dataTemp.forEach(data => {
309
+ jsonpath.value(esquema, data.scope, data.value);
310
+ });
311
+ }
163
312
  }
164
- RegistroComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: RegistroComponent, deps: [{ token: i1.GeneralService }, { token: i2.Router }, { token: i3.MessageService }], target: i0.ɵɵFactoryTarget.Component });
165
- RegistroComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.17", type: RegistroComponent, selector: "sf-registro", inputs: { idKatios: "idKatios", idEntidad: "idEntidad", trx: "trx", id: "id" }, providers: [MessageService], ngImport: i0, template: "<p-blockUI [blocked]=\"enProceso\">\r\n <i class=\"pi pi-cog pi-spin\" style=\"font-size: 50px\"></i>\r\n</p-blockUI>\r\n\r\n<p-toast></p-toast>\r\n\r\n<div class=\"card\" *ngIf=\"!enProceso\">\r\n <h5 class=\"card-header mb-2\" style=\"display: flex; justify-content: space-between;align-items: center;\">\r\n <span>{{idEntidad}} {{id != '' ? '-' + id : ''}}</span>\r\n <button pButton pRipple type=\"button\" icon=\"pi pi-arrow-left\" (click)=\"back()\"></button>\r\n </h5>\r\n <div *ngFor=\"let element of crudConfig.uiEsquema.elements\" [class]=\"element?.class\">\r\n <ng-container [ngSwitch]=\"element.type\">\r\n <div *ngSwitchCase=\"'Label'\" [style]=\"element?.style\">\r\n {{element?.label}}\r\n </div>\r\n <ng-container *ngSwitchCase=\"'HorizontalLayout'\">\r\n <div *ngFor=\"let el of element.elements\" [class]=\"el?.class\">\r\n <ng-container [ngSwitch]=\"el.type\" >\r\n <sf-control *ngSwitchCase=\"'Control'\" [control]=\"getControl(el.scope)\" [label]=\"el.label\" [value]=\"getValue(el.scope)\" (setValue)=\"setValue($event, el.scope)\"></sf-control>\r\n </ng-container>\r\n </div>\r\n </ng-container>\r\n <div *ngSwitchCase=\"'Control'\">\r\n <sf-control *ngSwitchCase=\"'Control'\" [control]=\"getControl(element.scope)\" [label]=\"element.label\"></sf-control>\r\n </div>\r\n </ng-container>\r\n </div>\r\n <div class=\"card-footer\" *ngIf=\"btnSubmit\">\r\n <button pButton pRipple type=\"button\" [icon]=\"btnSubmit.icon\" [label]=\"btnSubmit.label\" (click)=\"submit()\"></button>\r\n </div>\r\n</div>", components: [{ type: i4.BlockUI, selector: "p-blockUI", inputs: ["autoZIndex", "baseZIndex", "blocked", "target", "styleClass"] }, { type: i5.Toast, selector: "p-toast", inputs: ["autoZIndex", "baseZIndex", "position", "preventOpenDuplicates", "preventDuplicates", "showTransformOptions", "hideTransformOptions", "showTransitionOptions", "hideTransitionOptions", "key", "style", "styleClass", "breakpoints"], outputs: ["onClose"] }, { type: i6.ControlComponent, selector: "sf-control", inputs: ["control", "label", "value"], outputs: ["setValue"] }], directives: [{ type: i7.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i8.ButtonDirective, selector: "[pButton]", inputs: ["iconPos", "loadingIcon", "label", "icon", "loading"] }, { type: i9.Ripple, selector: "[pRipple]" }, { type: i7.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i7.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { type: i7.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }] });
313
+ RegistroComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: RegistroComponent, deps: [{ token: i1.GeneralService }, { token: i2.Router }, { token: i3.MessageService }, { token: i4.DialogService }, { token: i5.SfCrudService }], target: i0.ɵɵFactoryTarget.Component });
314
+ RegistroComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.17", type: RegistroComponent, selector: "sf-registro", inputs: { idKatios: "idKatios", idEntidad: "idEntidad", trx: "trx", id: "id", user: "user" }, outputs: { sendData: "sendData" }, providers: [MessageService, DialogService, DynamicDialogConfig, DynamicDialogRef], ngImport: i0, template: "<p-blockUI [blocked]=\"enProceso\">\r\n <i class=\"pi pi-cog pi-spin\" style=\"font-size: 50px\"></i>\r\n</p-blockUI>\r\n\r\n<p-toast></p-toast>\r\n\r\n<div class=\"card\" *ngIf=\"!enProceso\">\r\n <h5 class=\"card-header mb-2\" style=\"display: flex; justify-content: space-between;align-items: center;\">\r\n <span>{{crudConfig.registro?.label || idEntidad}} {{id != '' ? '-' + id : ''}}</span>\r\n <button pButton pRipple type=\"button\" icon=\"pi pi-arrow-left\" (click)=\"back()\"></button>\r\n </h5>\r\n <div *ngFor=\"let element of crudConfig.uiEsquema.elements\" [class]=\"element?.class\">\r\n <ng-container [ngSwitch]=\"element.type\">\r\n <div *ngSwitchCase=\"'Label'\" [style]=\"element?.style\">\r\n {{element?.label}}\r\n </div>\r\n <ng-container *ngSwitchCase=\"'HorizontalLayout'\">\r\n <div *ngFor=\"let el of element.elements\" [class]=\"el?.class\">\r\n <ng-container [ngSwitch]=\"el.type\">\r\n <sf-control *ngSwitchCase=\"'Control'\" [control]=\"getControl(el.scope)\" [label]=\"el.label\"\r\n [value]=\"getValue(el.scope)\" (setValue)=\"setValue($event, el.scope)\"\r\n (sendNotification)=\"sendNotification($event)\"></sf-control>\r\n </ng-container>\r\n </div>\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"'VerticalLayout'\">\r\n <div *ngFor=\"let el of element.elements\" [class]=\"el?.class\">\r\n <ng-container [ngSwitch]=\"el.type\">\r\n <sf-control *ngSwitchCase=\"'Control'\" [control]=\"getControl(el.scope)\" [label]=\"el.label\"\r\n [value]=\"getValue(el.scope)\" (setValue)=\"setValue($event, el.scope)\"\r\n (sendNotification)=\"sendNotification($event)\"></sf-control>\r\n <ng-container *ngSwitchCase=\"'Table'\">\r\n <p-table [value]=\"getValue(el.scope)\" [columns]=\"getControl(el.scope).config.columns\">\r\n <ng-template pTemplate=\"caption\">\r\n <div class=\"flex align-items-center justify-content-between\">\r\n <button pButton pRipple icon=\"pi pi-plus\" (click)=\"addObjectArray(el)\"\r\n class=\"p-button-success\"></button>\r\n </div>\r\n </ng-template>\r\n <ng-template pTemplate=\"header\" let-columns>\r\n <tr>\r\n <th *ngFor=\"let col of columns\">\r\n {{col.label}}\r\n </th>\r\n <ng-container *ngIf=\"trx == 'c' || trx == 'u'\">\r\n <th></th>\r\n </ng-container>\r\n </tr>\r\n </ng-template>\r\n <ng-template pTemplate=\"body\" let-rowData let-columns=\"columns\" let-rowIndex=\"rowIndex\">\r\n <tr>\r\n <ng-container *ngFor=\"let col of columns\" [ngSwitch]=\"col.type\">\r\n <ng-container *ngSwitchCase=\"'text'\">\r\n <td>{{rowData[col.col]}}</td>\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"'currency:USD'\">\r\n <td>{{rowData[col.col] | currency: 'USD'}}</td>\r\n </ng-container>\r\n </ng-container>\r\n <ng-container *ngIf=\"trx == 'c' || trx == 'u'\">\r\n <td>\r\n <!-- <button pButton pRipple type=\"button\" (click)=\"editRow(el, rowData)\" icon=\"pi pi-pencil\" class=\"p-button-rounded p-button-info mr-1\"></button> -->\r\n <button pButton pRipple type=\"button\" (click)=\"deleteRow(el, rowIndex)\" icon=\"pi pi-trash\" class=\"p-button-rounded p-button-danger\"></button>\r\n </td>\r\n </ng-container>\r\n </tr>\r\n </ng-template>\r\n </p-table>\r\n </ng-container>\r\n </ng-container>\r\n </div>\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"'Control'\">\r\n <sf-control [control]=\"getControl(element.scope)\" [label]=\"element.label\"></sf-control>\r\n </ng-container>\r\n </ng-container>\r\n </div>\r\n <div class=\"card-footer mt-2\" *ngIf=\"btnSubmit\">\r\n <button pButton pRipple type=\"button\" [icon]=\"btnSubmit.icon\" [label]=\"btnSubmit.label\"\r\n (click)=\"submit()\"></button>\r\n </div>\r\n</div>\r\n", components: [{ type: i6.BlockUI, selector: "p-blockUI", inputs: ["target", "autoZIndex", "baseZIndex", "styleClass", "blocked"] }, { type: i7.Toast, selector: "p-toast", inputs: ["key", "autoZIndex", "baseZIndex", "style", "styleClass", "position", "preventOpenDuplicates", "preventDuplicates", "showTransformOptions", "hideTransformOptions", "showTransitionOptions", "hideTransitionOptions", "breakpoints"], outputs: ["onClose"] }, { type: i8.ControlComponent, selector: "sf-control", inputs: ["control", "label", "value", "appendTo"], outputs: ["setValue", "sendNotification"] }, { type: i9.Table, selector: "p-table", inputs: ["frozenColumns", "frozenValue", "style", "styleClass", "tableStyle", "tableStyleClass", "paginator", "pageLinks", "rowsPerPageOptions", "alwaysShowPaginator", "paginatorPosition", "paginatorDropdownAppendTo", "paginatorDropdownScrollHeight", "currentPageReportTemplate", "showCurrentPageReport", "showJumpToPageDropdown", "showFirstLastIcon", "showPageLinks", "defaultSortOrder", "sortMode", "resetPageOnSort", "selectionMode", "contextMenuSelection", "contextMenuSelectionMode", "dataKey", "metaKeySelection", "rowTrackBy", "lazy", "lazyLoadOnInit", "compareSelectionBy", "csvSeparator", "exportFilename", "filters", "globalFilterFields", "filterDelay", "filterLocale", "expandedRowKeys", "editingRowKeys", "rowExpandMode", "scrollable", "scrollDirection", "rowGroupMode", "scrollHeight", "virtualScroll", "virtualScrollDelay", "virtualRowHeight", "frozenWidth", "responsive", "contextMenu", "resizableColumns", "columnResizeMode", "reorderableColumns", "loading", "loadingIcon", "showLoader", "rowHover", "customSort", "showInitialSortBadge", "autoLayout", "exportFunction", "stateKey", "stateStorage", "editMode", "groupRowsBy", "minBufferPx", "maxBufferPx", "responsiveLayout", "breakpoint", "value", "columns", "first", "rows", "totalRecords", "sortField", "sortOrder", "multiSortMeta", "selection"], outputs: ["selectionChange", "contextMenuSelectionChange", "onRowSelect", "onRowUnselect", "onPage", "onSort", "onFilter", "onLazyLoad", "onRowExpand", "onRowCollapse", "onContextMenuSelect", "onColResize", "onColReorder", "onRowReorder", "onEditInit", "onEditComplete", "onEditCancel", "onHeaderCheckboxToggle", "sortFunction", "firstChange", "rowsChange", "onStateSave", "onStateRestore"] }], directives: [{ type: i10.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i11.ButtonDirective, selector: "[pButton]", inputs: ["iconPos", "loadingIcon", "label", "icon", "loading"] }, { type: i12.Ripple, selector: "[pRipple]" }, { type: i10.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i10.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { type: i10.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { type: i3.PrimeTemplate, selector: "[pTemplate]", inputs: ["type", "pTemplate"] }], pipes: { "currency": i10.CurrencyPipe } });
166
315
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: RegistroComponent, decorators: [{
167
316
  type: Component,
168
317
  args: [{
169
318
  selector: 'sf-registro',
170
319
  templateUrl: './registro.component.html',
171
- providers: [MessageService]
320
+ providers: [MessageService, DialogService, DynamicDialogConfig, DynamicDialogRef],
321
+ entryComponents: [RegistroComponent]
172
322
  }]
173
- }], ctorParameters: function () { return [{ type: i1.GeneralService }, { type: i2.Router }, { type: i3.MessageService }]; }, propDecorators: { idKatios: [{
323
+ }], ctorParameters: function () { return [{ type: i1.GeneralService }, { type: i2.Router }, { type: i3.MessageService }, { type: i4.DialogService }, { type: i5.SfCrudService }]; }, propDecorators: { idKatios: [{
174
324
  type: Input
175
325
  }], idEntidad: [{
176
326
  type: Input
@@ -178,5 +328,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImpo
178
328
  type: Input
179
329
  }], id: [{
180
330
  type: Input
331
+ }], user: [{
332
+ type: Input
333
+ }], sendData: [{
334
+ type: Output
181
335
  }] } });
182
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVnaXN0cm8uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc2YtY3J1ZC9zcmMvbGliL2NvbXBvbmVudHMvcmVnaXN0cm8vcmVnaXN0cm8uY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc2YtY3J1ZC9zcmMvbGliL2NvbXBvbmVudHMvcmVnaXN0cm8vcmVnaXN0cm8uY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQVUsTUFBTSxlQUFlLENBQUM7QUFHekQsT0FBTyxFQUFrQixVQUFVLEVBQUUsVUFBVSxFQUFFLE1BQU0sZ0RBQWdELENBQUM7QUFDeEcsT0FBTyxLQUFLLFFBQVEsTUFBTSxVQUFVLENBQUM7QUFFckMsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLGFBQWEsQ0FBQzs7Ozs7Ozs7Ozs7QUFRN0MsTUFBTSxPQUFPLGlCQUFpQjtJQWE1QixZQUNVLGNBQThCLEVBQzlCLE1BQWMsRUFDZCxhQUE2QjtRQUY3QixtQkFBYyxHQUFkLGNBQWMsQ0FBZ0I7UUFDOUIsV0FBTSxHQUFOLE1BQU0sQ0FBUTtRQUNkLGtCQUFhLEdBQWIsYUFBYSxDQUFnQjtRQWQ5QixhQUFRLEdBQVcsRUFBRSxDQUFDO1FBQ3RCLGNBQVMsR0FBVyxFQUFFLENBQUM7UUFDdkIsUUFBRyxHQUFXLEVBQUUsQ0FBQztRQUNqQixPQUFFLEdBQVcsRUFBRSxDQUFDO1FBRWxCLGNBQVMsR0FBWSxLQUFLLENBQUM7UUFDM0IsZUFBVSxHQUFlLElBQUksVUFBVSxFQUFFLENBQUM7UUFHMUMsb0JBQWUsR0FBZSxJQUFJLFVBQVUsRUFBRSxDQUFDO0lBTWxELENBQUM7SUFFTCxRQUFRO1FBQ04sSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO1FBQ3RCLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztJQUN4QixDQUFD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Q0FBQyxjQUFjLENBQUM7aUJBQzVCO3VKQUdVLFFBQVE7c0JBQWhCLEtBQUs7Z0JBQ0csU0FBUztzQkFBakIsS0FBSztnQkFDRyxHQUFHO3NCQUFYLEtBQUs7Z0JBQ0csRUFBRTtzQkFBVixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBJbnB1dCwgT25Jbml0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IFJvdXRlciB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XHJcbmltcG9ydCB7IEdlbmVyYWxTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2hhcmVkL3NlcnZpY2VzL2dlbmVyYWwuc2VydmljZSc7XHJcbmltcG9ydCB7IENvbmZpZ1JlZ2lzdHJvLCBDcnVkQ29uZmlnLCBPcGVyYXRpb25zIH0gZnJvbSAnLi4vLi4vc2hhcmVkL3NlcnZpY2VzL21vZGVscy9jcnVkLWNvbmZpZy5tb2RlbCc7XHJcbmltcG9ydCAqIGFzIGpzb25wYXRoIGZyb20gJ2pzb25wYXRoJztcclxuaW1wb3J0IHsgU2hlbWEgfSBmcm9tICcuLi8uLi9zaGFyZWQvc2VydmljZXMvbW9kZWxzL3NoZW1hLm1vZGVsJztcclxuaW1wb3J0IHsgTWVzc2FnZVNlcnZpY2UgfSBmcm9tICdwcmltZW5nL2FwaSc7XHJcblxyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdzZi1yZWdpc3RybycsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL3JlZ2lzdHJvLmNvbXBvbmVudC5odG1sJyxcclxuICBwcm92aWRlcnM6IFtNZXNzYWdlU2VydmljZV1cclxufSlcclxuZXhwb3J0IGNsYXNzIFJlZ2lzdHJvQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcclxuXHJcbiAgQElucHV0KCkgaWRLYXRpb3M6IHN0cmluZyA9ICcnO1xyXG4gIEBJbnB1dCgpIGlkRW50aWRhZDogc3RyaW5nID0gJyc7XHJcbiAgQElucHV0KCkgdHJ4OiBzdHJpbmcgPSAnJztcclxuICBASW5wdXQoKSBpZDogc3RyaW5nID0gJyc7XHJcblxyXG4gIHB1YmxpYyBlblByb2Nlc286IGJvb2xlYW4gPSBmYWxzZTtcclxuICBwdWJsaWMgY3J1ZENvbmZpZzogQ3J1ZENvbmZpZyA9IG5ldyBDcnVkQ29uZmlnKCk7XHJcbiAgcHVibGljIGJ0blN1Ym1pdDogYW55O1xyXG4gIHB1YmxpYyBkYXRhOiBhbnk7XHJcbiAgcHVibGljIGNvbmZpZ09wZXJhdGlvbjogT3BlcmF0aW9ucyA9IG5ldyBPcGVyYXRpb25zKCk7XHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHJpdmF0ZSBnZW5lcmFsU2VydmljZTogR2VuZXJhbFNlcnZpY2UsXHJcbiAgICBwcml2YXRlIHJvdXRlcjogUm91dGVyLFxyXG4gICAgcHJpdmF0ZSBtZXNzYWdlU2VyaWNlOiBNZXNzYWdlU2VydmljZSxcclxuICApIHsgfVxyXG5cclxuICBuZ09uSW5pdCgpOiB2b2lkIHtcclxuICAgIHRoaXMubG9hZENvbmZpZ0NydWQoKTtcclxuICAgIHRoaXMuc2V0TGFiZWxTdW1iaXQoKTtcclxuICB9XHJcblxyXG4gIGxvYWRDb25maWdDcnVkKCkge1xyXG4gICAgdGhpcy5lblByb2Nlc28gPSB0cnVlO1xyXG4gICAgdGhpcy5nZW5lcmFsU2VydmljZS5nZXRDcnVkQnlFbnRpZGFkKHRoaXMuaWRLYXRpb3MsIHRoaXMuaWRFbnRpZGFkKVxyXG4gICAgICAudGhlbihyZXMgPT4ge1xyXG4gICAgICAgIHRoaXMuY3J1ZENvbmZpZyA9IHJlcztcclxuICAgICAgICBpZiAodGhpcy50cnggIT0gJ2MnKSB0aGlzLmdldEluZm9SZWdpc3Rybyh0aGlzLmNydWRDb25maWcucmVnaXN0cm8pO1xyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgdGhpcy5kYXRhID0gdGhpcy5jcmVhdGVPYmplY3QodGhpcy5jcnVkQ29uZmlnLmVzcXVlbWEpO1xyXG4gICAgICAgICAgdGhpcy5lblByb2Nlc28gPSBmYWxzZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5jb25maWdPcGVyYXRpb24gPSB0aGlzLmNydWRDb25maWcucmVnaXN0cm8ub3BlcmF0aW9ucy5maW5kKHggPT4geC50eXBlLnN0YXJ0c1dpdGgodGhpcy50cngpKSB8fCBuZXcgT3BlcmF0aW9ucygpO1xyXG4gICAgICB9KVxyXG4gICAgICAuY2F0Y2goZXJyID0+IHtcclxuICAgICAgICBjb25zb2xlLmxvZyhlcnIpO1xyXG4gICAgICAgIHRoaXMuZW5Qcm9jZXNvID0gZmFsc2U7XHJcbiAgICAgIH0pXHJcbiAgfVxyXG5cclxuICBzZXRMYWJlbFN1bWJpdCgpIHtcclxuICAgIGlmICh0aGlzLnRyeCA9PSAnYycpIHRoaXMuYnRuU3VibWl0ID0geyBsYWJlbDogJ0d1YXJkYXInLCBpY29uOiAncGkgcGktc2F2ZScgfVxyXG4gICAgZWxzZSBpZiAodGhpcy50cnggPT0gJ3InKSB0aGlzLmJ0blN1Ym1pdCA9IHVuZGVmaW5lZDtcclxuICAgIGVsc2UgaWYgKHRoaXMudHJ4ID09ICd1JykgdGhpcy5idG5TdWJtaXQgPSB7IGxhYmVsOiAnQWN0dWFsaXphcicsIGljb246ICdwaSBwaS1zeW5jJyB9XHJcbiAgICBlbHNlIGlmICh0aGlzLnRyeCA9PSAnZCcpIHRoaXMuYnRuU3VibWl0ID0geyBsYWJlbDogJ0VsaW1pbmFyJywgaWNvbjogJ3BpIHBpLXRyYXNoJyB9XHJcblxyXG4gIH1cclxuXHJcbiAgZ2V0SW5mb1JlZ2lzdHJvKGNvbmZpZ1JlZ2lzdHJvOiBDb25maWdSZWdpc3Rybykge1xyXG4gICAgbGV0IG9wID0gY29uZmlnUmVnaXN0cm8ub3BlcmF0aW9ucy5maW5kKHggPT4geC50eXBlID09ICdyZWFkJyk7XHJcbiAgICBsZXQgZW5kcG9pbnQgPSBvcD8uZW5kcG9pbnQgfHwgJyc7XHJcbiAgICBlbmRwb2ludCA9IGVuZHBvaW50LnJlcGxhY2UoJ0BpZEthdGlvcycsIHRoaXMuaWRLYXRpb3MpO1xyXG4gICAgZW5kcG9pbnQgPSBlbmRwb2ludC5yZXBsYWNlKCdAaWQnLCB0aGlzLmlkKTtcclxuICAgIHRoaXMuZ2VuZXJhbFNlcnZpY2UuZ2VuZXJpY1JlcXVlc3Qob3A/Lm1ldGhvZCB8fCAnJywgb3A/LnNlcnZlciB8fCAnJywgZW5kcG9pbnQpXHJcbiAgICAgIC50aGVuKChyZXM6IGFueSkgPT4ge1xyXG4gICAgICAgIHRoaXMuZGF0YSA9IHJlcy5kYXRhO1xyXG4gICAgICAgIHRoaXMuZW5Qcm9jZXNvID0gZmFsc2U7XHJcbiAgICAgIH0pXHJcbiAgICAgIC5jYXRjaChlcnIgPT4ge1xyXG4gICAgICAgIGNvbnNvbGUubG9nKGVycik7XHJcbiAgICAgICAgdGhpcy5lblByb2Nlc28gPSBmYWxzZTtcclxuICAgICAgfSlcclxuICB9XHJcblxyXG4gIGJhY2soKSB7XHJcbiAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZUJ5VXJsKHRoaXMuY3J1ZENvbmZpZy5yZWdpc3Ryby5idG5CYWNrKTtcclxuICB9XHJcblxyXG4gIGdldENvbnRyb2woc2NvcGU6IHN0cmluZykge1xyXG4gICAgcmV0dXJuIGpzb25wYXRoLnF1ZXJ5KHRoaXMuY3J1ZENvbmZpZy5lc3F1ZW1hLCBzY29wZSlbMF07XHJcbiAgfVxyXG5cclxuICBnZXRWYWx1ZShzY29wZTogc3RyaW5nKSB7XHJcbiAgICByZXR1cm4ganNvbnBhdGgucXVlcnkodGhpcy5kYXRhLCBzY29wZS5yZXBsYWNlKCcucHJvcGVydGllcycsICcnKSlbMF07XHJcbiAgfVxyXG5cclxuICBzZXRWYWx1ZSh2YWx1ZTogYW55LCBzY29wZTogc3RyaW5nKSB7XHJcbiAgICBqc29ucGF0aC52YWx1ZSh0aGlzLmRhdGEsIHNjb3BlLnJlcGxhY2UoJy5wcm9wZXJ0aWVzJywgJycpLCB2YWx1ZSk7XHJcbiAgfVxyXG5cclxuICBjcmVhdGVPYmplY3QoZXNxdWVtYTogU2hlbWEpIHtcclxuICAgIGxldCBvYmplY3QgPSB7fTtcclxuICAgIHN3aXRjaCAoZXNxdWVtYS50eXBlKSB7XHJcbiAgICAgIGNhc2UgJ3N0cmluZyc6XHJcbiAgICAgIGNhc2UgJ251bWJlcic6XHJcbiAgICAgIGNhc2UgJ2RhdGUnOlxyXG4gICAgICAgIHJldHVybiBlc3F1ZW1hPy5kZWZhdWx0ID8gdGhpcy5zZXREZWZhdWx0VmFsdWUoZXNxdWVtYS5kZWZhdWx0KSA6IG51bGw7XHJcbiAgICAgIGNhc2UgJ2Jvb2xlYW4nOlxyXG4gICAgICAgIHJldHVybiBlc3F1ZW1hPy5kZWZhdWx0IHx8IGZhbHNlO1xyXG4gICAgICBjYXNlICdhcnJheSc6XHJcbiAgICAgICAgcmV0dXJuIFtdO1xyXG4gICAgICBjYXNlICdvYmplY3QnOlxyXG4gICAgICAgIGZvciAoY29uc3Qga2V5IGluIGVzcXVlbWE/LnByb3BlcnRpZXMpIHtcclxuICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvYmplY3QsIGtleSwgeyB2YWx1ZTogdGhpcy5jcmVhdGVPYmplY3QoZXNxdWVtYT8ucHJvcGVydGllc1trZXldKSwgd3JpdGFibGU6IHRydWUsIGVudW1lcmFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSB9KVxyXG4gICAgICAgIH1cclxuICAgICAgICBicmVhaztcclxuICAgICAgZGVmYXVsdDpcclxuICAgICAgICBicmVhaztcclxuICAgIH1cclxuICAgIHJldHVybiBvYmplY3Q7XHJcbiAgfVxyXG5cclxuICBzdWJtaXQoKSB7XHJcbiAgICBpZiAoIXRoaXMudmFsaWRhdGVEYXRhKCkpIHJldHVybjtcclxuICAgIHRoaXMuZW5Qcm9jZXNvID0gdHJ1ZTtcclxuICAgIGxldCBlbmRwb2ludCA9IHRoaXMuY29uZmlnT3BlcmF0aW9uLmVuZHBvaW50O1xyXG4gICAgZW5kcG9pbnQgPSBlbmRwb2ludC5yZXBsYWNlKCdAaWRLYXRpb3MnLCB0aGlzLmlkS2F0aW9zKVxyXG4gICAgZW5kcG9pbnQgPSBlbmRwb2ludC5yZXBsYWNlKCdAaWQnLCB0aGlzLmlkKVxyXG4gICAgdGhpcy5nZW5lcmFsU2VydmljZS5nZW5lcmljUmVxdWVzdCh0aGlzLmNvbmZpZ09wZXJhdGlvbi5tZXRob2QsIHRoaXMuY29uZmlnT3BlcmF0aW9uLnNlcnZlciwgZW5kcG9pbnQsIHRoaXMuZGF0YSlcclxuICAgICAgLnRoZW4oKCkgPT4ge1xyXG4gICAgICAgIHRoaXMubWVzc2FnZVNlcmljZS5hZGQoeyBzZXZlcml0eTogJ3N1Y2Nlc3MnLCBkZXRhaWw6IGBQcm9jZXNvIGV4aXRvc28hYCB9KVxyXG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5lblByb2Nlc28gPSBmYWxzZTtcclxuICAgICAgICAgIHRoaXMuYmFjaygpXHJcbiAgICAgICAgfSwgMjAwMCk7XHJcbiAgICAgIH0pXHJcbiAgICAgIC5jYXRjaChlcnIgPT4ge1xyXG4gICAgICAgIHRoaXMubWVzc2FnZVNlcmljZS5hZGQoeyBzZXZlcml0eTogJ3dhcm4nLCBkZXRhaWw6IGAke2Vycj8uZXJyb3I/Lm1lc3NhZ2UgfHwgJ0Vycm9yIG5vIGNvbnRyb2xhZG8sIHBvciBmYXZvciBjb211bmljYXJzZSBjb24gZGVsIGFkbWluLid9YCB9KVxyXG4gICAgICAgIHRoaXMuZW5Qcm9jZXNvID0gZmFsc2U7XHJcbiAgICAgIH0pXHJcbiAgfVxyXG5cclxuICB2YWxpZGF0ZURhdGEoKSB7XHJcbiAgICBpZiAodGhpcy5jb25maWdPcGVyYXRpb24udmFsaWRhdGlvbnMudHlwZSA9PSAnbG9jYWwnKSByZXR1cm4gdGhpcy52YWxpZGF0ZURhdGFMb2NhbCgpO1xyXG4gICAgcmV0dXJuIHRydWU7XHJcbiAgfVxyXG5cclxuICB2YWxpZGF0ZURhdGFMb2NhbCgpIHtcclxuICAgIGxldCBlcnI6IHN0cmluZ1tdID0gW11cclxuICAgIHRoaXMuY29uZmlnT3BlcmF0aW9uLnZhbGlkYXRpb25zLnJlcXVpcmVkLmZvckVhY2goeCA9PiB7XHJcbiAgICAgIGlmICghanNvbnBhdGgucXVlcnkodGhpcy5kYXRhLCB4LmZpZWxkKVswXSkgZXJyLnB1c2goeC5tZXNzYWdlKTtcclxuICAgIH0pXHJcbiAgICBpZiAoZXJyLmxlbmd0aCAhPSAwKSB0aGlzLm1lc3NhZ2VTZXJpY2UuYWRkKHsgc2V2ZXJpdHk6ICd3YXJuJywgZGV0YWlsOiBlcnIuam9pbignLiAnKSB9KVxyXG4gICAgcmV0dXJuIGVyci5sZW5ndGggPT0gMDtcclxuICB9XHJcblxyXG4gIHNldERlZmF1bHRWYWx1ZSh2YWx1ZTogc3RyaW5nKSB7XHJcbiAgICBsZXQgZGF0YSA9IG51bGw7XHJcbiAgICBzd2l0Y2ggKHZhbHVlKSB7XHJcbiAgICAgIGNhc2UgJ0B1YWN0aXZvJzpcclxuICAgICAgICBsZXQgdWFjdGl2byA9IEpTT04ucGFyc2Uoc2Vzc2lvblN0b3JhZ2UuZ2V0SXRlbSgnb1Nlc3Npb25URk0nKSB8fCAne30nKVxyXG4gICAgICAgIGlmICghdWFjdGl2bykgY29uc29sZS5sb2coJ1ZhbGlkYXIgY29uZmlndXJhY2lvbiBkZSBzZXNpb24nKVxyXG4gICAgICAgIGVsc2UgZGF0YSA9IGAke3VhY3Rpdm8uVXN1YXJpb1Npc3RlbWEuVERPQ30tJHt1YWN0aXZvLlVzdWFyaW9TaXN0ZW1hLk5ET0N9YFxyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlICdAaG95JzpcclxuICAgICAgICBkYXRhID0gbmV3IERhdGUoKTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgZGVmYXVsdDpcclxuICAgICAgICBkYXRhID0gdmFsdWU7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gZGF0YVxyXG4gIH1cclxuXHJcbn1cclxuIiwiPHAtYmxvY2tVSSBbYmxvY2tlZF09XCJlblByb2Nlc29cIj5cclxuICAgIDxpIGNsYXNzPVwicGkgcGktY29nIHBpLXNwaW5cIiBzdHlsZT1cImZvbnQtc2l6ZTogNTBweFwiPjwvaT5cclxuPC9wLWJsb2NrVUk+XHJcblxyXG48cC10b2FzdD48L3AtdG9hc3Q+XHJcblxyXG48ZGl2IGNsYXNzPVwiY2FyZFwiICpuZ0lmPVwiIWVuUHJvY2Vzb1wiPlxyXG4gICAgPGg1IGNsYXNzPVwiY2FyZC1oZWFkZXIgbWItMlwiIHN0eWxlPVwiZGlzcGxheTogZmxleDsganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuO2FsaWduLWl0ZW1zOiBjZW50ZXI7XCI+XHJcbiAgICAgICAgPHNwYW4+e3tpZEVudGlkYWR9fSB7e2lkICE9ICcnID8gJy0nICsgaWQgOiAnJ319PC9zcGFuPlxyXG4gICAgICAgIDxidXR0b24gcEJ1dHRvbiBwUmlwcGxlIHR5cGU9XCJidXR0b25cIiBpY29uPVwicGkgcGktYXJyb3ctbGVmdFwiIChjbGljayk9XCJiYWNrKClcIj48L2J1dHRvbj5cclxuICAgIDwvaDU+XHJcbiAgICA8ZGl2ICpuZ0Zvcj1cImxldCBlbGVtZW50IG9mIGNydWRDb25maWcudWlFc3F1ZW1hLmVsZW1lbnRzXCIgW2NsYXNzXT1cImVsZW1lbnQ/LmNsYXNzXCI+XHJcbiAgICAgICAgPG5nLWNvbnRhaW5lciBbbmdTd2l0Y2hdPVwiZWxlbWVudC50eXBlXCI+XHJcbiAgICAgICAgICAgIDxkaXYgKm5nU3dpdGNoQ2FzZT1cIidMYWJlbCdcIiBbc3R5bGVdPVwiZWxlbWVudD8uc3R5bGVcIj5cclxuICAgICAgICAgICAgICAgIHt7ZWxlbWVudD8ubGFiZWx9fVxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiJ0hvcml6b250YWxMYXlvdXQnXCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2ICpuZ0Zvcj1cImxldCBlbCBvZiBlbGVtZW50LmVsZW1lbnRzXCIgW2NsYXNzXT1cImVsPy5jbGFzc1wiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgW25nU3dpdGNoXT1cImVsLnR5cGVcIiA+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxzZi1jb250cm9sICpuZ1N3aXRjaENhc2U9XCInQ29udHJvbCdcIiBbY29udHJvbF09XCJnZXRDb250cm9sKGVsLnNjb3BlKVwiIFtsYWJlbF09XCJlbC5sYWJlbFwiIFt2YWx1ZV09XCJnZXRWYWx1ZShlbC5zY29wZSlcIiAoc2V0VmFsdWUpPVwic2V0VmFsdWUoJGV2ZW50LCBlbC5zY29wZSlcIj48L3NmLWNvbnRyb2w+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgIDxkaXYgKm5nU3dpdGNoQ2FzZT1cIidDb250cm9sJ1wiPlxyXG4gICAgICAgICAgICAgICAgPHNmLWNvbnRyb2wgKm5nU3dpdGNoQ2FzZT1cIidDb250cm9sJ1wiIFtjb250cm9sXT1cImdldENvbnRyb2woZWxlbWVudC5zY29wZSlcIiBbbGFiZWxdPVwiZWxlbWVudC5sYWJlbFwiPjwvc2YtY29udHJvbD5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICA8L2Rpdj5cclxuICAgIDxkaXYgY2xhc3M9XCJjYXJkLWZvb3RlclwiICpuZ0lmPVwiYnRuU3VibWl0XCI+XHJcbiAgICAgICAgPGJ1dHRvbiBwQnV0dG9uIHBSaXBwbGUgdHlwZT1cImJ1dHRvblwiIFtpY29uXT1cImJ0blN1Ym1pdC5pY29uXCIgW2xhYmVsXT1cImJ0blN1Ym1pdC5sYWJlbFwiIChjbGljayk9XCJzdWJtaXQoKVwiPjwvYnV0dG9uPlxyXG4gICAgPC9kaXY+XHJcbjwvZGl2PiJdfQ==
336
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVnaXN0cm8uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc2YtY3J1ZC9zcmMvbGliL2NvbXBvbmVudHMvcmVnaXN0cm8vcmVnaXN0cm8uY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc2YtY3J1ZC9zcmMvbGliL2NvbXBvbmVudHMvcmVnaXN0cm8vcmVnaXN0cm8uY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFVLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMvRSxPQUFPLEVBQWtCLFVBQVUsRUFBRSxVQUFVLEVBQUUsTUFBTSx1Q0FBdUMsQ0FBQztBQUMvRixPQUFPLEVBQUUsYUFBYSxFQUFFLG1CQUFtQixFQUFFLGdCQUFnQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFFN0YsT0FBTyxFQUFXLGNBQWMsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUN0RCxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSw0Q0FBNEMsQ0FBQztBQUdwRixPQUFPLEtBQUssUUFBUSxNQUFNLFVBQVUsQ0FBQzs7Ozs7Ozs7Ozs7Ozs7QUFVckMsTUFBTSxPQUFPLGlCQUFpQjtJQWtCNUIsWUFDVSxjQUE4QixFQUM5QixNQUFjLEVBQ2QsYUFBNkIsRUFDN0IsYUFBNEIsRUFDNUIsYUFBNEI7UUFKNUIsbUJBQWMsR0FBZCxjQUFjLENBQWdCO1FBQzlCLFdBQU0sR0FBTixNQUFNLENBQVE7UUFDZCxrQkFBYSxHQUFiLGFBQWEsQ0FBZ0I7UUFDN0Isa0JBQWEsR0FBYixhQUFhLENBQWU7UUFDNUIsa0JBQWEsR0FBYixhQUFhLENBQWU7UUFyQjdCLGFBQVEsR0FBVyxFQUFFLENBQUM7UUFDdEIsY0FBUyxHQUFXLEVBQUUsQ0FBQztRQUN2QixRQUFHLEdBQVcsRUFBRSxDQUFDO1FB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LENBQUMsQ0FBQTtRQUNqRCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7OytHQXpTVSxpQkFBaUI7bUdBQWpCLGlCQUFpQix1S0FIakIsQ0FBQyxjQUFjLEVBQUUsYUFBYSxFQUFFLG1CQUFtQixFQUFFLGdCQUFnQixDQUFDLDBCQ2ZuRix3NEtBa0ZBOzRGRGhFYSxpQkFBaUI7a0JBTjdCLFNBQVM7bUJBQUM7b0JBQ1QsUUFBUSxFQUFFLGFBQWE7b0JBQ3ZCLFdBQVcsRUFBRSwyQkFBMkI7b0JBQ3hDLFNBQVMsRUFBRSxDQUFDLGNBQWMsRUFBRSxhQUFhLEVBQUUsbUJBQW1CLEVBQUUsZ0JBQWdCLENBQUM7b0JBQ2pGLGVBQWUsRUFBRSxtQkFBbUI7aUJBQ3JDOytNQUdVLFFBQVE7c0JBQWhCLEtBQUs7Z0JBQ0csU0FBUztzQkFBakIsS0FBSztnQkFDRyxHQUFHO3NCQUFYLEtBQUs7Z0JBQ0csRUFBRTtzQkFBVixLQUFLO2dCQUNHLElBQUk7c0JBQVosS0FBSztnQkFDSSxRQUFRO3NCQUFqQixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBFdmVudEVtaXR0ZXIsIElucHV0LCBPbkluaXQsIE91dHB1dCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBDb25maWdSZWdpc3RybywgQ3J1ZENvbmZpZywgT3BlcmF0aW9ucyB9IGZyb20gJy4uLy4uL3NoYXJlZC9tb2RlbHMvY3J1ZC1jb25maWcubW9kZWwnO1xyXG5pbXBvcnQgeyBEaWFsb2dTZXJ2aWNlLCBEeW5hbWljRGlhbG9nQ29uZmlnLCBEeW5hbWljRGlhbG9nUmVmIH0gZnJvbSAncHJpbWVuZy9keW5hbWljZGlhbG9nJztcclxuaW1wb3J0IHsgR2VuZXJhbFNlcnZpY2UgfSBmcm9tICcuLi8uLi9zaGFyZWQvc2VydmljZXMvZ2VuZXJhbC5zZXJ2aWNlJztcclxuaW1wb3J0IHsgTWVzc2FnZSwgTWVzc2FnZVNlcnZpY2UgfSBmcm9tICdwcmltZW5nL2FwaSc7XHJcbmltcG9ydCB7IFJlZ2lzdHJvQ2hpbGRDb21wb25lbnQgfSBmcm9tICcuLi9yZWdpc3Ryby1jaGlsZC9yZWdpc3Ryby1jaGlsZC5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBSb3V0ZXIgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xyXG5pbXBvcnQgeyBTaGVtYSB9IGZyb20gJy4uLy4uL3NoYXJlZC9tb2RlbHMvc2hlbWEubW9kZWwnO1xyXG5pbXBvcnQgKiBhcyBqc29ucGF0aCBmcm9tICdqc29ucGF0aCc7XHJcbmltcG9ydCB7IERhdGFUZW1wQ3J1ZCB9IGZyb20gJy4uLy4uL3NoYXJlZC9tb2RlbHMvZGF0YS10ZW1wLWNydWQubW9kZWwnO1xyXG5pbXBvcnQgeyBTZkNydWRTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2YtY3J1ZC5zZXJ2aWNlJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnc2YtcmVnaXN0cm8nLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9yZWdpc3Ryby5jb21wb25lbnQuaHRtbCcsXHJcbiAgcHJvdmlkZXJzOiBbTWVzc2FnZVNlcnZpY2UsIERpYWxvZ1NlcnZpY2UsIER5bmFtaWNEaWFsb2dDb25maWcsIER5bmFtaWNEaWFsb2dSZWZdLFxyXG4gIGVudHJ5Q29tcG9uZW50czogW1JlZ2lzdHJvQ29tcG9uZW50XVxyXG59KVxyXG5leHBvcnQgY2xhc3MgUmVnaXN0cm9Db21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xyXG5cclxuICBASW5wdXQoKSBpZEthdGlvczogc3RyaW5nID0gJyc7XHJcbiAgQElucHV0KCkgaWRFbnRpZGFkOiBzdHJpbmcgPSAnJztcclxuICBASW5wdXQoKSB0cng6IHN0cmluZyA9ICcnO1xyXG4gIEBJbnB1dCgpIGlkOiBzdHJpbmcgPSAnJztcclxuICBASW5wdXQoKSB1c2VyOiBhbnk7XHJcbiAgQE91dHB1dCgpIHNlbmREYXRhOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xyXG5cclxuICBwcml2YXRlIGRhdGFUZW1wOiBEYXRhVGVtcENydWRbXSA9IFtdO1xyXG4gIHB1YmxpYyBjcnVkQ29uZmlnOiBDcnVkQ29uZmlnID0gbmV3IENydWRDb25maWcoKTtcclxuICBwdWJsaWMgZW5Qcm9jZXNvOiBib29sZWFuID0gZmFsc2U7XHJcbiAgcHVibGljIGJ0blN1Ym1pdDogYW55O1xyXG4gIHB1YmxpYyBkYXRhOiBhbnk7XHJcbiAgcHVibGljIGNvbmZpZ09wZXJhdGlvbjogT3BlcmF0aW9ucyA9IG5ldyBPcGVyYXRpb25zKCk7XHJcbiAgcHVibGljIGlzTG9jYWw6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBwdWJsaWMgZGlhbG9nUmVmPzogRHluYW1pY0RpYWxvZ1JlZlxyXG5cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHByaXZhdGUgZ2VuZXJhbFNlcnZpY2U6IEdlbmVyYWxTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSByb3V0ZXI6IFJvdXRlcixcclxuICAgIHByaXZhdGUgbWVzc2FnZVNlcmljZTogTWVzc2FnZVNlcnZpY2UsXHJcbiAgICBwcml2YXRlIGRpYWxvZ1NlcnZpY2U6IERpYWxvZ1NlcnZpY2UsXHJcbiAgICBwcml2YXRlIHNmQ3J1ZFNlcnZpY2U6IFNmQ3J1ZFNlcnZpY2VcclxuICApIHtcclxuICAgIHRoaXMuZGF0YVRlbXAgPSB0aGlzLnNmQ3J1ZFNlcnZpY2UuZ2V0RGF0YVRlbXAoKTtcclxuICB9XHJcblxyXG4gIG5nT25Jbml0KCk6IHZvaWQge1xyXG4gICAgdGhpcy5sb2FkQ29uZmlnQ3J1ZCgpO1xyXG4gICAgdGhpcy5zZXRMYWJlbFN1bWJpdCgpO1xyXG4gIH1cclxuXHJcbiAgbG9hZENvbmZpZ0NydWQoKSB7XHJcbiAgICB0aGlzLmVuUHJvY2VzbyA9IHRydWU7XHJcbiAgICB0aGlzLmdlbmVyYWxTZXJ2aWNlLmdldENydWRCeUVudGlkYWQodGhpcy5pZEthdGlvcywgdGhpcy5pZEVudGlkYWQpXHJcbiAgICAgIC50aGVuKHJlcyA9PiB7XHJcbiAgICAgICAgdGhpcy5zZXREYXRhVGVtcChyZXMuZXNxdWVtYSwgdGhpcy5kYXRhVGVtcCk7XHJcbiAgICAgICAgdGhpcy5jcnVkQ29uZmlnID0gcmVzO1xyXG4gICAgICAgIGNvbnNvbGUubG9nKHRoaXMuY3J1ZENvbmZpZylcclxuICAgICAgICBpZiAodGhpcy50cnggIT0gJ2MnKSB0aGlzLmdldEluZm9SZWdpc3Rybyh0aGlzLmNydWRDb25maWcucmVnaXN0cm8pO1xyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgdGhpcy5kYXRhID0gdGhpcy5jcmVhdGVPYmplY3QodGhpcy5jcnVkQ29uZmlnLmVzcXVlbWEpO1xyXG4gICAgICAgICAgdGhpcy5lblByb2Nlc28gPSBmYWxzZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5jb25maWdPcGVyYXRpb24gPSB0aGlzLmNydWRDb25maWcucmVnaXN0cm8ub3BlcmF0aW9ucy5maW5kKHggPT4geC50eXBlLnN0YXJ0c1dpdGgodGhpcy50cngpKSB8fCBuZXcgT3BlcmF0aW9ucygpO1xyXG4gICAgICB9KVxyXG4gICAgICAuY2F0Y2goZXJyID0+IHtcclxuICAgICAgICBjb25zb2xlLmxvZyhlcnIpO1xyXG4gICAgICAgIHRoaXMuZW5Qcm9jZXNvID0gZmFsc2U7XHJcbiAgICAgIH0pXHJcbiAgfVxyXG5cclxuICBzZXRMYWJlbFN1bWJpdCgpIHtcclxuICAgIGlmICh0aGlzLnRyeCA9PSAnYycpIHRoaXMuYnRuU3VibWl0ID0geyBsYWJlbDogJ0d1YXJkYXInLCBpY29uOiAncGkgcGktc2F2ZScgfVxyXG4gICAgZWxzZSBpZiAodGhpcy50cnggPT0gJ3InKSB0aGlzLmJ0blN1Ym1pdCA9IHVuZGVmaW5lZDtcclxuICAgIGVsc2UgaWYgKHRoaXMudHJ4ID09ICd1JykgdGhpcy5idG5TdWJtaXQgPSB7IGxhYmVsOiAnQWN0dWFsaXphcicsIGljb246ICdwaSBwaS1zeW5jJyB9XHJcbiAgICBlbHNlIGlmICh0aGlzLnRyeCA9PSAnZCcpIHRoaXMuYnRuU3VibWl0ID0geyBsYWJlbDogJ0VsaW1pbmFyJywgaWNvbjogJ3BpIHBpLXRyYXNoJyB9XHJcbiAgfVxyXG5cclxuICBnZXRJbmZvUmVnaXN0cm8oY29uZmlnUmVnaXN0cm86IENvbmZpZ1JlZ2lzdHJvKSB7XHJcbiAgICBsZXQgb3AgPSBjb25maWdSZWdpc3Ryby5vcGVyYXRpb25zLmZpbmQoeCA9PiB4LnR5cGUgPT0gJ3JlYWQnKTtcclxuICAgIGxldCBlbmRwb2ludCA9IG9wPy5lbmRwb2ludCB8fCAnJztcclxuICAgIGVuZHBvaW50ID0gZW5kcG9pbnQucmVwbGFjZSgnQGlkS2F0aW9zJywgdGhpcy5pZEthdGlvcyk7XHJcbiAgICBlbmRwb2ludCA9IGVuZHBvaW50LnJlcGxhY2UoJ0BpZCcsIHRoaXMuaWQpO1xyXG4gICAgdGhpcy5nZW5lcmFsU2VydmljZS5nZW5lcmljUmVxdWVzdChvcD8ubWV0aG9kIHx8ICcnLCBvcD8uc2VydmVyIHx8ICcnLCBlbmRwb2ludClcclxuICAgICAgLnRoZW4oKHJlczogYW55KSA9PiB7XHJcbiAgICAgICAgdGhpcy5kYXRhID0gcmVzLmRhdGE7XHJcbiAgICAgICAgdGhpcy5lblByb2Nlc28gPSBmYWxzZTtcclxuICAgICAgfSlcclxuICAgICAgLmNhdGNoKGVyciA9PiB7XHJcbiAgICAgICAgY29uc29sZS5sb2coZXJyKTtcclxuICAgICAgICB0aGlzLmVuUHJvY2VzbyA9IGZhbHNlO1xyXG4gICAgICB9KVxyXG4gIH1cclxuXHJcbiAgYmFjaygpIHtcclxuICAgIHRoaXMucm91dGVyLm5hdmlnYXRlQnlVcmwodGhpcy5jcnVkQ29uZmlnLnJlZ2lzdHJvLmJ0bkJhY2spO1xyXG4gIH1cclxuXHJcbiAgZ2V0Q29udHJvbChzY29wZTogc3RyaW5nKSB7XHJcbiAgICByZXR1cm4ganNvbnBhdGgucXVlcnkodGhpcy5jcnVkQ29uZmlnLmVzcXVlbWEsIHNjb3BlKVswXTtcclxuICB9XHJcblxyXG4gIGdldFZhbHVlKHNjb3BlOiBzdHJpbmcpIHtcclxuICAgIHJldHVybiBqc29ucGF0aC5xdWVyeSh0aGlzLmRhdGEsIHNjb3BlLnJlcGxhY2UoJy5wcm9wZXJ0aWVzJywgJycpKVswXTtcclxuICB9XHJcblxyXG4gIHNldFZhbHVlKHZhbHVlOiBhbnksIHNjb3BlOiBzdHJpbmcpIHtcclxuICAgIHN3aXRjaCAodHlwZW9mICh2YWx1ZSkpIHtcclxuICAgICAgY2FzZSAnb2JqZWN0JzpcclxuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHZhbHVlLmZvckVhY2goKHZhbDogYW55KSA9PiBqc29ucGF0aC52YWx1ZSh0aGlzLmRhdGEsIHZhbC5zY29wZS5yZXBsYWNlKCcucHJvcGVydGllcycsICcnKSwgdmFsLnZhbHVlKSlcclxuICAgICAgICBlbHNlIGpzb25wYXRoLnZhbHVlKHRoaXMuZGF0YSwgc2NvcGUucmVwbGFjZSgnLnByb3BlcnRpZXMnLCAnJyksIHZhbHVlKTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgZGVmYXVsdDpcclxuICAgICAgICBqc29ucGF0aC52YWx1ZSh0aGlzLmRhdGEsIHNjb3BlLnJlcGxhY2UoJy5wcm9wZXJ0aWVzJywgJycpLCB2YWx1ZSk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICB9XHJcbiAgICB0aGlzLmFwcGx5VmFsdWVzT25FdmVudCgnb25DaGFuZ2UnLCB0aGlzLmNydWRDb25maWcuZXNxdWVtYSk7XHJcbiAgfVxyXG5cclxuICBjcmVhdGVPYmplY3QoZXNxdWVtYTogU2hlbWEpIHtcclxuICAgIGxldCBvYmplY3QgPSB7fTtcclxuICAgIHN3aXRjaCAoZXNxdWVtYS50eXBlKSB7XHJcbiAgICAgIGNhc2UgJ251bWVyaWMnOlxyXG4gICAgICAgIHJldHVybiBlc3F1ZW1hPy5kZWZhdWx0IHx8IDA7XHJcbiAgICAgIGNhc2UgJ3N0cmluZyc6XHJcbiAgICAgIGNhc2UgJ2RhdGUnOlxyXG4gICAgICAgIHJldHVybiBlc3F1ZW1hPy5kZWZhdWx0ID8gdGhpcy5zZXREZWZhdWx0VmFsdWUoZXNxdWVtYS5kZWZhdWx0KSA6IG51bGw7XHJcbiAgICAgIGNhc2UgJ2Jvb2xlYW4nOlxyXG4gICAgICAgIHJldHVybiBlc3F1ZW1hPy5kZWZhdWx0IHx8IGZhbHNlO1xyXG4gICAgICBjYXNlICdhcnJheSc6XHJcbiAgICAgICAgcmV0dXJuIFtdO1xyXG4gICAgICBjYXNlICdmaWxlJzpcclxuICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgY2FzZSAnb2JqZWN0JzpcclxuICAgICAgICBmb3IgKGNvbnN0IGtleSBpbiBlc3F1ZW1hPy5wcm9wZXJ0aWVzKSB7XHJcbiAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkob2JqZWN0LCBrZXksIHsgdmFsdWU6IHRoaXMuY3JlYXRlT2JqZWN0KGVzcXVlbWE/LnByb3BlcnRpZXNba2V5XSksIHdyaXRhYmxlOiB0cnVlLCBlbnVtZXJhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUgfSlcclxuICAgICAgICB9XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gb2JqZWN0O1xyXG4gIH1cclxuXHJcbiAgc3VibWl0KCkge1xyXG4gICAgY29uc29sZS5sb2codGhpcy5kYXRhKVxyXG4gICAgaWYgKCF0aGlzLnZhbGlkYXRlRGF0YSgpKSByZXR1cm47XHJcbiAgICB0aGlzLmFwcGx5VmFsdWVzT25FdmVudCgnb25TdWJtaXQnLCB0aGlzLmNydWRDb25maWcuZXNxdWVtYSlcclxuICAgIHRoaXMuZW5Qcm9jZXNvID0gdHJ1ZTtcclxuICAgIGxldCBlbmRwb2ludCA9IHRoaXMuY29uZmlnT3BlcmF0aW9uLmVuZHBvaW50O1xyXG4gICAgZW5kcG9pbnQgPSBlbmRwb2ludC5yZXBsYWNlKCdAaWRLYXRpb3MnLCB0aGlzLmlkS2F0aW9zKVxyXG4gICAgZW5kcG9pbnQgPSBlbmRwb2ludC5yZXBsYWNlKCdAaWQnLCB0aGlzLmlkKVxyXG4gICAgdGhpcy5nZW5lcmFsU2VydmljZS5nZW5lcmljUmVxdWVzdCh0aGlzLmNvbmZpZ09wZXJhdGlvbi5tZXRob2QsIHRoaXMuY29uZmlnT3BlcmF0aW9uLnNlcnZlciwgZW5kcG9pbnQsIHRoaXMuZGF0YSlcclxuICAgICAgLnRoZW4oKCkgPT4ge1xyXG4gICAgICAgIHRoaXMubWVzc2FnZVNlcmljZS5hZGQoeyBzZXZlcml0eTogJ3N1Y2Nlc3MnLCBkZXRhaWw6IGBQcm9jZXNvIGV4aXRvc28hYCB9KVxyXG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5lblByb2Nlc28gPSBmYWxzZTtcclxuICAgICAgICAgIGlmICh0aGlzLmNvbmZpZ09wZXJhdGlvbj8ucmVkaXJlY3QpIHRoaXMucm91dGVyLm5hdmlnYXRlKFt0aGlzLmNvbmZpZ09wZXJhdGlvbj8ucmVkaXJlY3RdKVxyXG4gICAgICAgICAgZWxzZSB0aGlzLmJhY2soKVxyXG4gICAgICAgIH0sIDIwMDApO1xyXG4gICAgICB9KVxyXG4gICAgICAuY2F0Y2goZXJyID0+IHtcclxuICAgICAgICB0aGlzLm1lc3NhZ2VTZXJpY2UuYWRkKHsgc2V2ZXJpdHk6ICd3YXJuJywgZGV0YWlsOiBgJHtlcnI/LmVycm9yPy5tZXNzYWdlIHx8ICdFcnJvciBubyBjb250cm9sYWRvLCBwb3IgZmF2b3IgY29tdW5pY2Fyc2UgY29uIGRlbCBhZG1pbi4nfWAgfSlcclxuICAgICAgICB0aGlzLmVuUHJvY2VzbyA9IGZhbHNlO1xyXG4gICAgICB9KVxyXG4gIH1cclxuXHJcbiAgdmFsaWRhdGVEYXRhKCkge1xyXG4gICAgaWYgKHRoaXMuY29uZmlnT3BlcmF0aW9uLnZhbGlkYXRpb25zLnR5cGUgPT0gJ2xvY2FsJykgcmV0dXJuIHRoaXMudmFsaWRhdGVEYXRhTG9jYWwoKTtcclxuICAgIHJldHVybiB0cnVlO1xyXG4gIH1cclxuXHJcbiAgdmFsaWRhdGVEYXRhTG9jYWwoKSB7XHJcbiAgICBsZXQgZXJyOiBzdHJpbmdbXSA9IFtdXHJcbiAgICB0aGlzLmNvbmZpZ09wZXJhdGlvbi52YWxpZGF0aW9ucz8ucmVxdWlyZWQ/LmZvckVhY2goeCA9PiB7XHJcbiAgICAgIGlmICghanNvbnBhdGgucXVlcnkodGhpcy5kYXRhLCB4LmZpZWxkKVswXSkgZXJyLnB1c2goeC5tZXNzYWdlKTtcclxuICAgIH0pXHJcbiAgICB0aGlzLmNvbmZpZ09wZXJhdGlvbi52YWxpZGF0aW9ucz8ub3BlcmF0aW9ucz8uZm9yRWFjaCgob3A6IGFueSkgPT4ge1xyXG4gICAgICBzd2l0Y2ggKG9wLmFjdGlvbikge1xyXG4gICAgICAgIGNhc2UgJ3N1bUFycmF5JzpcclxuICAgICAgICAgIGxldCB2YXIxID0ganNvbnBhdGgucXVlcnkodGhpcy5kYXRhLCBvcC5zY29wZVswXSkucmVkdWNlKChhY2MsIGN1cikgPT4gYWNjICs9IGN1cltvcC5rZXldLCAwKTtcclxuICAgICAgICAgIGxldCB2YXIyID0ganNvbnBhdGgucXVlcnkodGhpcy5kYXRhLCBvcC5zY29wZVsxXSkucmVkdWNlKChhY2MsIGN1cikgPT4gYWNjICs9IGN1cltvcC5rZXldLCAwKTtcclxuICAgICAgICAgIGlmICh2YXIxICE9IHZhcjIpIGVyci5wdXNoKG9wLm1lc3NhZ2UpXHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgIH1cclxuICAgIH0pXHJcbiAgICBpZiAoZXJyLmxlbmd0aCAhPSAwKSB0aGlzLm1lc3NhZ2VTZXJpY2UuYWRkKHsgc2V2ZXJpdHk6ICd3YXJuJywgZGV0YWlsOiBlcnIuam9pbignLiAnKSB9KVxyXG4gICAgcmV0dXJuIGVyci5sZW5ndGggPT0gMDtcclxuICB9XHJcblxyXG4gIHNldERlZmF1bHRWYWx1ZSh2YWx1ZTogc3RyaW5nKSB7XHJcbiAgICBsZXQgZGF0YSA9IG51bGw7XHJcbiAgICBzd2l0Y2ggKHZhbHVlKSB7XHJcbiAgICAgIGNhc2UgJ0B1YWN0aXZvJzpcclxuICAgICAgICBkYXRhID0gYCR7dGhpcy51c2VyLlVzdWFyaW9TaXN0ZW1hLlRET0N9LSR7dGhpcy51c2VyLlVzdWFyaW9TaXN0ZW1hLk5ET0N9YFxyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlICdAdGRvY2FjdGl2byc6XHJcbiAgICAgICAgZGF0YSA9IHRoaXMudXNlci5Vc3VhcmlvU2lzdGVtYS5URE9DXHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgJ0BuZG9jYWN0aXZvJzpcclxuICAgICAgICBkYXRhID0gdGhpcy51c2VyLlVzdWFyaW9TaXN0ZW1hLk5ET0NcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSAnQGhveSc6XHJcbiAgICAgICAgZGF0YSA9IG5ldyBEYXRlKCk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgZGF0YSA9IHZhbHVlO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGRhdGFcclxuICB9XHJcblxyXG4gIHNlbmROb3RpZmljYXRpb24obWVzc2FnZTogTWVzc2FnZSkge1xyXG4gICAgdGhpcy5tZXNzYWdlU2VyaWNlLmFkZChtZXNzYWdlKVxyXG4gIH1cclxuXHJcbiAgYWRkT2JqZWN0QXJyYXkoZWxlbWVudDogYW55KSB7XHJcbiAgICB0aGlzLmRpYWxvZ1JlZiA9IHRoaXMuZGlhbG9nU2VydmljZS5vcGVuKFJlZ2lzdHJvQ2hpbGRDb21wb25lbnQsIHtcclxuICAgICAgaGVhZGVyOiBgRGV0YWxsZWAsXHJcbiAgICAgIHdpZHRoOiAnNzAlJyxcclxuICAgICAgbW9kYWw6IHRydWUsXHJcbiAgICAgIGNsb3NhYmxlOiBmYWxzZSxcclxuICAgICAgZGF0YToge1xyXG4gICAgICAgIHVpRXNxdWVtYTogeyAuLi5lbGVtZW50LmVsZW1lbnRzIH0sXHJcbiAgICAgICAgZXNxdWVtYTogdGhpcy5nZXRDb250cm9sKGVsZW1lbnQuc2NvcGUpLFxyXG4gICAgICAgIGlkOiB0aGlzLmdldFZhbHVlKGVsZW1lbnQuc2NvcGUpLmxlbmd0aCArIDFcclxuICAgICAgfVxyXG4gICAgfSlcclxuICAgIHRoaXMuZGlhbG9nUmVmLm9uQ2xvc2Uuc3Vic2NyaWJlKChkYXRhOiBhbnkpID0+IHtcclxuICAgICAgaWYgKGRhdGEpIHRoaXMuZGF0YVtlbGVtZW50LnNjb3BlLnJlcGxhY2UoJyQuLnByb3BlcnRpZXMuJywgJycpXS5wdXNoKGRhdGEpO1xyXG4gICAgICB0aGlzLmFwcGx5VmFsdWVzT25FdmVudCgnb25DaGFuZ2UnLCB0aGlzLmNydWRDb25maWcuZXNxdWVtYSwgZWxlbWVudC5zY29wZS5yZXBsYWNlKCckLi5wcm9wZXJ0aWVzLicsICcnKSlcclxuICAgIH0pXHJcbiAgfVxyXG5cclxuICBlZGl0Um93KGVsZW1lbnQ6IGFueSwgZGF0YTogYW55KSB7XHJcbiAgICB0aGlzLmRpYWxvZ1JlZiA9IHRoaXMuZGlhbG9nU2VydmljZS5vcGVuKFJlZ2lzdHJvQ2hpbGRDb21wb25lbnQsIHtcclxuICAgICAgaGVhZGVyOiBgRGV0YWxsZWAsXHJcbiAgICAgIHdpZHRoOiAnNzAlJyxcclxuICAgICAgbW9kYWw6IHRydWUsXHJcbiAgICAgIGNsb3NhYmxlOiBmYWxzZSxcclxuICAgICAgZGF0YToge1xyXG4gICAgICAgIHVpRXNxdWVtYTogeyAuLi5lbGVtZW50LmVsZW1lbnRzIH0sXHJcbiAgICAgICAgZXNxdWVtYTogdGhpcy5nZXRDb250cm9sKGVsZW1lbnQuc2NvcGUpLFxyXG4gICAgICAgIGRhdGE6IHsgLi4uZGF0YSB9XHJcbiAgICAgIH1cclxuICAgIH0pXHJcbiAgICB0aGlzLmRpYWxvZ1JlZi5vbkNsb3NlLnN1YnNjcmliZSgoZGF0YTogYW55KSA9PiB7XHJcbiAgICAgIGlmIChkYXRhKSB0aGlzLmRhdGFbZWxlbWVudC5zY29wZS5yZXBsYWNlKCckLi5wcm9wZXJ0aWVzLicsICcnKV1bZGF0YS5pZCAtIDFdID0gZGF0YTtcclxuICAgICAgdGhpcy5hcHBseVZhbHVlc09uRXZlbnQoJ29uQ2hhbmdlJywgdGhpcy5jcnVkQ29uZmlnLmVzcXVlbWEsIGVsZW1lbnQuc2NvcGUucmVwbGFjZSgnJC4ucHJvcGVydGllcy4nLCAnJykpXHJcbiAgICB9KVxyXG4gIH1cclxuXHJcbiAgZGVsZXRlUm93KGVsZW1lbnQ6IGFueSwgaW5kZXg6IG51bWJlcikge1xyXG4gICAgdGhpcy5kYXRhW2VsZW1lbnQuc2NvcGUucmVwbGFjZSgnJC4ucHJvcGVydGllcy4nLCAnJyldLnNwbGljZShpbmRleCAtIDEsIDEpO1xyXG4gICAgaW5kZXggPSAxO1xyXG4gICAgdGhpcy5kYXRhW2VsZW1lbnQuc2NvcGUucmVwbGFjZSgnJC4ucHJvcGVydGllcy4nLCAnJyldLmZvckVhY2goKGVsOiBhbnkpID0+IHtcclxuICAgICAgZWwuaWQgPSBpbmRleDtcclxuICAgICAgaW5kZXgrKztcclxuICAgIH0pXHJcbiAgICB0aGlzLmFwcGx5VmFsdWVzT25FdmVudCgnb25DaGFuZ2UnLCB0aGlzLmNydWRDb25maWcuZXNxdWVtYSwgZWxlbWVudC5zY29wZS5yZXBsYWNlKCckLi5wcm9wZXJ0aWVzLicsICcnKSlcclxuICB9XHJcblxyXG4gIGFwcGx5VmFsdWVzT25FdmVudChldmVudDogc3RyaW5nLCBlc3F1ZW1hOiBTaGVtYSwga2V5Pzogc3RyaW5nKSB7XHJcbiAgICBpZiAoa2V5KSB7XHJcbiAgICAgIGlmIChlc3F1ZW1hLnByb3BlcnRpZXNba2V5XVtldmVudF0pIHtcclxuICAgICAgICBlc3F1ZW1hLnByb3BlcnRpZXNba2V5XVtldmVudF0uZm9yRWFjaCgodmFsdWU6IHsgc2NvcGU6IHN0cmluZ1tdLCBvcDogc3RyaW5nLCBrZXk/OiBzdHJpbmcgfSkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5zZXRWYWx1ZUV2ZW50KHRoaXMuZGF0YSwgdmFsdWUpO1xyXG4gICAgICAgIH0pXHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGZvciAoY29uc3Qga2V5IGluIGVzcXVlbWEucHJvcGVydGllcykge1xyXG4gICAgICAgIGlmIChlc3F1ZW1hLnByb3BlcnRpZXNba2V5XVtldmVudF0pIHtcclxuICAgICAgICAgIGVzcXVlbWEucHJvcGVydGllc1trZXldW2V2ZW50XS5mb3JFYWNoKCh2YWx1ZTogYW55KSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0VmFsdWVFdmVudCh0aGlzLmRhdGEsIHZhbHVlKTtcclxuICAgICAgICAgIH0pXHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBzZXRWYWx1ZUV2ZW50KGRhdGE6IGFueSwgcGFyYW1zOiB7IHNjb3BlOiBzdHJpbmdbXSwgb3A6IHN0cmluZywga2V5PzogYW55LCBzZXBhcmF0b3I/OiBzdHJpbmcgfSkge1xyXG4gICAgc3dpdGNoIChwYXJhbXMub3ApIHtcclxuICAgICAgY2FzZSAnc3VtJzpcclxuICAgICAgICBqc29ucGF0aC52YWx1ZShkYXRhLCBwYXJhbXMuc2NvcGVbMV0sIGpzb25wYXRoLnF1ZXJ5KGRhdGEsIHBhcmFtcy5zY29wZVswXSkucmVkdWNlKChhY2MsIGN1cikgPT4gYWNjICs9IHBhcmFtcz8ua2V5ID8gY3VyW3BhcmFtcy5rZXldIDogY3VyLCAwKSlcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSAnY29uY2F0JzpcclxuICAgICAgICBsZXQgYXJyYXk6IHN0cmluZ1tdID0gW11cclxuICAgICAgICBwYXJhbXM/LmtleT8ucmVkdWNlKChhY2M6IGFueVtdLCBjdXI6IHN0cmluZykgPT4ge1xyXG4gICAgICAgICAgYXJyYXkucHVzaChqc29ucGF0aC5xdWVyeShkYXRhLCBjdXIpWzBdKVxyXG4gICAgICAgIH0sIFtdKVxyXG4gICAgICAgIGlmIChwYXJhbXM/LnNlcGFyYXRvcikganNvbnBhdGgudmFsdWUoZGF0YSwgcGFyYW1zLnNjb3BlWzBdLCBhcnJheS5qb2luKHBhcmFtcz8uc2VwYXJhdG9yIHx8ICcgJykpXHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgJ2VuYWJsZSc6XHJcbiAgICAgICAganNvbnBhdGgudmFsdWUodGhpcy5jcnVkQ29uZmlnLmVzcXVlbWEsIHBhcmFtcy5zY29wZVswXSwgZmFsc2UpXHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgJ2Rpc2FibGVkJzpcclxuICAgICAgICBqc29ucGF0aC52YWx1ZSh0aGlzLmNydWRDb25maWcuZXNxdWVtYSwgcGFyYW1zLnNjb3BlWzBdLCB0cnVlKVxyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlICdyZXBsYWNlOmVuZHBvaW50JzpcclxuICAgICAgICBqc29ucGF0aC52YWx1ZSh0aGlzLmNydWRDb25maWcuZXNxdWVtYSwgcGFyYW1zLnNjb3BlWzBdLCB0aGlzLmNydWRDb25maWcuZXNxdWVtYS5jb25maWcuZW5kcG9pbnR0ZW1wLnJlcGxhY2UocGFyYW1zLnNjb3BlWzFdLCBqc29ucGF0aC5xdWVyeShkYXRhLCBgJC4uJHtwYXJhbXMua2V5fWApKSlcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSAnc2V0TnVsbCc6XHJcbiAgICAgICAganNvbnBhdGgudmFsdWUodGhpcy5kYXRhLCBgJC4ke3BhcmFtcy5rZXl9YCwgbnVsbCk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBzZXREYXRhVGVtcChlc3F1ZW1hOiBTaGVtYSwgZGF0YVRlbXA6IGFueVtdKSB7XHJcbiAgICBkYXRhVGVtcC5mb3JFYWNoKGRhdGEgPT4ge1xyXG4gICAgICBqc29ucGF0aC52YWx1ZShlc3F1ZW1hLCBkYXRhLnNjb3BlLCBkYXRhLnZhbHVlKVxyXG4gICAgfSk7XHJcbiAgfVxyXG59XHJcbiIsIjxwLWJsb2NrVUkgW2Jsb2NrZWRdPVwiZW5Qcm9jZXNvXCI+XHJcbiAgICA8aSBjbGFzcz1cInBpIHBpLWNvZyBwaS1zcGluXCIgc3R5bGU9XCJmb250LXNpemU6IDUwcHhcIj48L2k+XHJcbjwvcC1ibG9ja1VJPlxyXG5cclxuPHAtdG9hc3Q+PC9wLXRvYXN0PlxyXG5cclxuPGRpdiBjbGFzcz1cImNhcmRcIiAqbmdJZj1cIiFlblByb2Nlc29cIj5cclxuICAgIDxoNSBjbGFzcz1cImNhcmQtaGVhZGVyIG1iLTJcIiBzdHlsZT1cImRpc3BsYXk6IGZsZXg7IGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjthbGlnbi1pdGVtczogY2VudGVyO1wiPlxyXG4gICAgICAgIDxzcGFuPnt7Y3J1ZENvbmZpZy5yZWdpc3Rybz8ubGFiZWwgfHwgaWRFbnRpZGFkfX0ge3tpZCAhPSAnJyA/ICctJyArIGlkIDogJyd9fTwvc3Bhbj5cclxuICAgICAgICA8YnV0dG9uIHBCdXR0b24gcFJpcHBsZSB0eXBlPVwiYnV0dG9uXCIgaWNvbj1cInBpIHBpLWFycm93LWxlZnRcIiAoY2xpY2spPVwiYmFjaygpXCI+PC9idXR0b24+XHJcbiAgICA8L2g1PlxyXG4gICAgPGRpdiAqbmdGb3I9XCJsZXQgZWxlbWVudCBvZiBjcnVkQ29uZmlnLnVpRXNxdWVtYS5lbGVtZW50c1wiIFtjbGFzc109XCJlbGVtZW50Py5jbGFzc1wiPlxyXG4gICAgICAgIDxuZy1jb250YWluZXIgW25nU3dpdGNoXT1cImVsZW1lbnQudHlwZVwiPlxyXG4gICAgICAgICAgICA8ZGl2ICpuZ1N3aXRjaENhc2U9XCInTGFiZWwnXCIgW3N0eWxlXT1cImVsZW1lbnQ/LnN0eWxlXCI+XHJcbiAgICAgICAgICAgICAgICB7e2VsZW1lbnQ/LmxhYmVsfX1cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIidIb3Jpem9udGFsTGF5b3V0J1wiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiAqbmdGb3I9XCJsZXQgZWwgb2YgZWxlbWVudC5lbGVtZW50c1wiIFtjbGFzc109XCJlbD8uY2xhc3NcIj5cclxuICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyIFtuZ1N3aXRjaF09XCJlbC50eXBlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxzZi1jb250cm9sICpuZ1N3aXRjaENhc2U9XCInQ29udHJvbCdcIiBbY29udHJvbF09XCJnZXRDb250cm9sKGVsLnNjb3BlKVwiIFtsYWJlbF09XCJlbC5sYWJlbFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdmFsdWVdPVwiZ2V0VmFsdWUoZWwuc2NvcGUpXCIgKHNldFZhbHVlKT1cInNldFZhbHVlKCRldmVudCwgZWwuc2NvcGUpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChzZW5kTm90aWZpY2F0aW9uKT1cInNlbmROb3RpZmljYXRpb24oJGV2ZW50KVwiPjwvc2YtY29udHJvbD5cclxuICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiJ1ZlcnRpY2FsTGF5b3V0J1wiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiAqbmdGb3I9XCJsZXQgZWwgb2YgZWxlbWVudC5lbGVtZW50c1wiIFtjbGFzc109XCJlbD8uY2xhc3NcIj5cclxuICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyIFtuZ1N3aXRjaF09XCJlbC50eXBlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxzZi1jb250cm9sICpuZ1N3aXRjaENhc2U9XCInQ29udHJvbCdcIiBbY29udHJvbF09XCJnZXRDb250cm9sKGVsLnNjb3BlKVwiIFtsYWJlbF09XCJlbC5sYWJlbFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdmFsdWVdPVwiZ2V0VmFsdWUoZWwuc2NvcGUpXCIgKHNldFZhbHVlKT1cInNldFZhbHVlKCRldmVudCwgZWwuc2NvcGUpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChzZW5kTm90aWZpY2F0aW9uKT1cInNlbmROb3RpZmljYXRpb24oJGV2ZW50KVwiPjwvc2YtY29udHJvbD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiJ1RhYmxlJ1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHAtdGFibGUgW3ZhbHVlXT1cImdldFZhbHVlKGVsLnNjb3BlKVwiIFtjb2x1bW5zXT1cImdldENvbnRyb2woZWwuc2NvcGUpLmNvbmZpZy5jb2x1bW5zXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlIHBUZW1wbGF0ZT1cImNhcHRpb25cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggYWxpZ24taXRlbXMtY2VudGVyIGp1c3RpZnktY29udGVudC1iZXR3ZWVuXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIHBCdXR0b24gcFJpcHBsZSBpY29uPVwicGkgcGktcGx1c1wiIChjbGljayk9XCJhZGRPYmplY3RBcnJheShlbClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwicC1idXR0b24tc3VjY2Vzc1wiPjwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBwVGVtcGxhdGU9XCJoZWFkZXJcIiBsZXQtY29sdW1ucz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRoICpuZ0Zvcj1cImxldCBjb2wgb2YgY29sdW1uc1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7Y29sLmxhYmVsfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGg+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwidHJ4ID09ICdjJyB8fCB0cnggPT0gJ3UnXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRoPjwvdGg+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBwVGVtcGxhdGU9XCJib2R5XCIgbGV0LXJvd0RhdGEgbGV0LWNvbHVtbnM9XCJjb2x1bW5zXCIgbGV0LXJvd0luZGV4PVwicm93SW5kZXhcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgY29sIG9mIGNvbHVtbnNcIiBbbmdTd2l0Y2hdPVwiY29sLnR5cGVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCIndGV4dCdcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPnt7cm93RGF0YVtjb2wuY29sXX19PC90ZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCInY3VycmVuY3k6VVNEJ1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+e3tyb3dEYXRhW2NvbC5jb2xdIHwgY3VycmVuY3k6ICdVU0QnfX08L3RkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwidHJ4ID09ICdjJyB8fCB0cnggPT0gJ3UnXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIDxidXR0b24gcEJ1dHRvbiBwUmlwcGxlIHR5cGU9XCJidXR0b25cIiAoY2xpY2spPVwiZWRpdFJvdyhlbCwgcm93RGF0YSlcIiBpY29uPVwicGkgcGktcGVuY2lsXCIgY2xhc3M9XCJwLWJ1dHRvbi1yb3VuZGVkIHAtYnV0dG9uLWluZm8gbXItMVwiPjwvYnV0dG9uPiAtLT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBwQnV0dG9uIHBSaXBwbGUgdHlwZT1cImJ1dHRvblwiIChjbGljayk9XCJkZWxldGVSb3coZWwsIHJvd0luZGV4KVwiIGljb249XCJwaSBwaS10cmFzaFwiIGNsYXNzPVwicC1idXR0b24tcm91bmRlZCBwLWJ1dHRvbi1kYW5nZXJcIj48L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcC10YWJsZT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIidDb250cm9sJ1wiPlxyXG4gICAgICAgICAgICAgICAgPHNmLWNvbnRyb2wgW2NvbnRyb2xdPVwiZ2V0Q29udHJvbChlbGVtZW50LnNjb3BlKVwiIFtsYWJlbF09XCJlbGVtZW50LmxhYmVsXCI+PC9zZi1jb250cm9sPlxyXG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgIDwvZGl2PlxyXG4gICAgPGRpdiBjbGFzcz1cImNhcmQtZm9vdGVyIG10LTJcIiAqbmdJZj1cImJ0blN1Ym1pdFwiPlxyXG4gICAgICAgIDxidXR0b24gcEJ1dHRvbiBwUmlwcGxlIHR5cGU9XCJidXR0b25cIiBbaWNvbl09XCJidG5TdWJtaXQuaWNvblwiIFtsYWJlbF09XCJidG5TdWJtaXQubGFiZWxcIlxyXG4gICAgICAgICAgICAoY2xpY2spPVwic3VibWl0KClcIj48L2J1dHRvbj5cclxuICAgIDwvZGl2PlxyXG48L2Rpdj5cclxuIl19