@stemy/ngx-dynamic-form 13.1.9 → 13.1.12

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,7 +1,7 @@
1
1
  import { Inject, Injectable, Injector } from "@angular/core";
2
2
  import { FormArray, FormGroup } from "@angular/forms";
3
3
  import { firstValueFrom, Subject } from "rxjs";
4
- import { DynamicCheckboxModel, DynamicFileUploadModel, DynamicFormGroupModel, DynamicFormService as Base, DynamicInputModel, DynamicTextAreaModel } from "@ng-dynamic-forms/core";
4
+ import { DynamicCheckboxModel, DynamicDatePickerModel, DynamicFileUploadModel, DynamicFormGroupModel, DynamicFormService as Base, DynamicFormValueControlModel, DynamicInputModel, DynamicTextAreaModel } from "@ng-dynamic-forms/core";
5
5
  import { ObjectUtils, OpenApiService, StringUtils } from "@stemy/ngx-utils";
6
6
  import { EDITOR_FORMATS, findRefs, isStringWithVal, MAX_INPUT_NUM, mergeFormModels, MIN_INPUT_NUM } from "../utils/misc";
7
7
  import { FormSelectSubject } from "../utils/form-select-subject";
@@ -57,6 +57,10 @@ export class DynamicFormService extends Base {
57
57
  value[key] = subValue.id || subValue._id || subValue;
58
58
  return;
59
59
  }
60
+ if (subModel instanceof DynamicDatePickerModel) {
61
+ value[key] = this.convertToDate(subValue);
62
+ return;
63
+ }
60
64
  if (subModel instanceof DynamicFormArrayModel) {
61
65
  const length = Array.isArray(subValue) ? subValue.length : 0;
62
66
  const subArray = subControl;
@@ -89,6 +93,8 @@ export class DynamicFormService extends Base {
89
93
  result[subModel.id] = await serializer(subModel, subControl);
90
94
  continue;
91
95
  }
96
+ if (subModel.hidden && !subModel.additional?.serialize)
97
+ continue;
92
98
  if (subModel instanceof DynamicFormArrayModel) {
93
99
  const length = Array.isArray(subControl.value) ? subControl.value.length : 0;
94
100
  const subArray = subControl;
@@ -170,11 +176,23 @@ export class DynamicFormService extends Base {
170
176
  }
171
177
  });
172
178
  }
179
+ convertToDate(value) {
180
+ if (ObjectUtils.isNullOrUndefined(value))
181
+ return null;
182
+ const date = ObjectUtils.isDate(value)
183
+ ? value
184
+ : new Date(value);
185
+ return isNaN(date) ? new Date() : date;
186
+ }
173
187
  async getFormModelForSchema(name, customizeModel) {
174
188
  this.api.cache = {};
175
189
  this.schemas = await this.openApi.getSchemas();
176
190
  const customizeModels = (property, schema, modelType, config) => {
177
191
  const model = new modelType(config);
192
+ if (model instanceof DynamicFormValueControlModel) {
193
+ model.value = (model instanceof DynamicDatePickerModel)
194
+ ? this.convertToDate(property.default) : property.default;
195
+ }
178
196
  if (!ObjectUtils.isFunction(customizeModel))
179
197
  return [model];
180
198
  const res = customizeModel(property, schema, model, config, this.injector);
@@ -214,6 +232,9 @@ export class DynamicFormService extends Base {
214
232
  if (property.format == "textarea") {
215
233
  return customizeModels(property, schema, DynamicTextAreaModel, this.getFormTextareaConfig(property, schema));
216
234
  }
235
+ if (property.format == "date") {
236
+ return customizeModels(property, schema, DynamicDatePickerModel, this.getFormDatepickerConfig(property, schema));
237
+ }
217
238
  return customizeModels(property, schema, DynamicInputModel, this.getFormInputConfig(property, schema));
218
239
  case "object":
219
240
  return customizeModels(property, schema, DynamicEditorModel, this.getFormEditorConfig(property, schema));
@@ -339,6 +360,13 @@ export class DynamicFormService extends Base {
339
360
  multiple: property.type == "array"
340
361
  });
341
362
  }
363
+ getFormDatepickerConfig(property, schema) {
364
+ return Object.assign(this.getFormControlConfig(property, schema), {
365
+ format: property.dateFormat || "dd.MM.yyyy",
366
+ min: this.convertToDate(property.min),
367
+ max: this.convertToDate(property.max),
368
+ });
369
+ }
342
370
  getFormSelectOptions(property, schema) {
343
371
  const $enum = property.items?.enum || property.enum;
344
372
  if (Array.isArray($enum)) {
@@ -495,4 +523,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.8", ngImpor
495
523
  type: Inject,
496
524
  args: [Injector]
497
525
  }] }]; } });
498
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHluYW1pYy1mb3JtLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvbmd4LWR5bmFtaWMtZm9ybS9zZXJ2aWNlcy9keW5hbWljLWZvcm0uc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUMsTUFBTSxFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFDM0QsT0FBTyxFQUFrQixTQUFTLEVBQWUsU0FBUyxFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFDbEYsT0FBTyxFQUFDLGNBQWMsRUFBRSxPQUFPLEVBQUMsTUFBTSxNQUFNLENBQUM7QUFDN0MsT0FBTyxFQUNILG9CQUFvQixFQUVwQixzQkFBc0IsRUFLdEIscUJBQXFCLEVBR3JCLGtCQUFrQixJQUFJLElBQUksRUFJMUIsaUJBQWlCLEVBR2pCLG9CQUFvQixFQUd2QixNQUFNLHdCQUF3QixDQUFDO0FBQ2hDLE9BQU8sRUFNSCxXQUFXLEVBQ1gsY0FBYyxFQUNkLFdBQVcsRUFDZCxNQUFNLGtCQUFrQixDQUFDO0FBSTFCLE9BQU8sRUFBQyxjQUFjLEVBQUUsUUFBUSxFQUFFLGVBQWUsRUFBRSxhQUFhLEVBQUUsZUFBZSxFQUFFLGFBQWEsRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUN2SCxPQUFPLEVBQUMsaUJBQWlCLEVBQUMsTUFBTSw4QkFBOEIsQ0FBQztBQUMvRCxPQUFPLEVBQUMsV0FBVyxFQUFDLE1BQU0sdUJBQXVCLENBQUM7QUFDbEQsT0FBTyxFQUFDLGtCQUFrQixFQUEyQixNQUFNLCtCQUErQixDQUFDO0FBQzNGLE9BQU8sRUFDSCwwQkFBMEIsRUFDMUIscUJBQXFCLEVBRXhCLE1BQU0sbUNBQW1DLENBQUM7QUFDM0MsT0FBTyxFQUEwQixrQkFBa0IsRUFBMkIsTUFBTSwrQkFBK0IsQ0FBQzs7OztBQUlwSCxNQUFNLE9BQU8sa0JBQW1CLFNBQVEsSUFBSTtJQVl4QyxZQUFZLEVBQStCLEVB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VUFBVTs7MEJBZU0sTUFBTTsyQkFBQyxjQUFjOzswQkFDckIsTUFBTTsyQkFBQyxRQUFRIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtJbmplY3QsIEluamVjdGFibGUsIEluamVjdG9yfSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xyXG5pbXBvcnQge0Fic3RyYWN0Q29udHJvbCwgRm9ybUFycmF5LCBGb3JtQ29udHJvbCwgRm9ybUdyb3VwfSBmcm9tIFwiQGFuZ3VsYXIvZm9ybXNcIjtcclxuaW1wb3J0IHtmaXJzdFZhbHVlRnJvbSwgU3ViamVjdH0gZnJvbSBcInJ4anNcIjtcclxuaW1wb3J0IHtcclxuICAgIER5bmFtaWNDaGVja2JveE1vZGVsLFxyXG4gICAgRHluYW1pY0NoZWNrYm94TW9kZWxDb25maWcsXHJcbiAgICBEeW5hbWljRmlsZVVwbG9hZE1vZGVsLFxyXG4gICAgRHluYW1pY0ZpbGVVcGxvYWRNb2RlbENvbmZpZyxcclxuICAgIER5bmFtaWNGb3JtQ29tcG9uZW50U2VydmljZSxcclxuICAgIER5bmFtaWNGb3JtQ29udHJvbE1vZGVsLFxyXG4gICAgRHluYW1pY0Zvcm1Db250cm9sTW9kZWxDb25maWcsXHJcbiAgICBEeW5hbWljRm9ybUdyb3VwTW9kZWwsXHJcbiAgICBEeW5hbWljRm9ybUdyb3VwTW9kZWxDb25maWcsXHJcbiAgICBEeW5hbWljRm9ybU1vZGVsLFxyXG4gICAgRHluYW1pY0Zvcm1TZXJ2aWNlIGFzIEJhc2UsXHJcbiAgICBEeW5hbWljRm9ybVZhbGlkYXRpb25TZXJ2aWNlLFxyXG4gICAgRHluYW1pY0Zvcm1WYWx1ZUNvbnRyb2xNb2RlbCxcclxuICAgIER5bmFtaWNGb3JtVmFsdWVDb250cm9sTW9kZWxDb25maWcsXHJcbiAgICBEeW5hbWljSW5wdXRNb2RlbCxcclxuICAgIER5bmFtaWNJbnB1dE1vZGVsQ29uZmlnLFxyXG4gICAgRHluYW1pY1BhdGhhYmxlLFxyXG4gICAgRHluYW1pY1RleHRBcmVhTW9kZWwsXHJcbiAgICBEeW5hbWljVGV4dEFyZWFNb2RlbENvbmZpZyxcclxuICAgIER5bmFtaWNWYWxpZGF0b3JzQ29uZmlnXHJcbn0gZnJvbSBcIkBuZy1keW5hbWljLWZvcm1zL2NvcmVcIjtcclxuaW1wb3J0IHtcclxuICAgIElBcGlTZXJ2aWNlLFxyXG4gICAgSUxhbmd1YWdlU2VydmljZSxcclxuICAgIElPcGVuQXBpU2NoZW1hLFxyXG4gICAgSU9wZW5BcGlTY2hlbWFQcm9wZXJ0eSxcclxuICAgIElPcGVuQXBpU2NoZW1hcyxcclxuICAgIE9iamVjdFV0aWxzLFxyXG4gICAgT3BlbkFwaVNlcnZpY2UsXHJcbiAgICBTdHJpbmdVdGlsc1xyXG59IGZyb20gXCJAc3RlbXkvbmd4LXV0aWxzXCI7XHJcblxyXG5pbXBvcnQge0Zvcm1Db250cm9sU2VyaWFsaXplciwgRm9ybU1vZGVsQ3VzdG9taXplciwgRm9ybU1vZGVsQ3VzdG9taXplcldyYXAsIE1vZGVsVHlwZX0gZnJvbSBcIi4uL2NvbW1vbi10eXBlc1wiO1xyXG5cclxuaW1wb3J0IHtFRElUT1JfRk9STUFUUywgZmluZFJlZnMsIGlzU3RyaW5nV2l0aFZhbCwgTUFYX0lOUFVUX05VTSwgbWVyZ2VGb3JtTW9kZWxzLCBNSU5fSU5QVVRfTlVNfSBmcm9tIFwiLi4vdXRpbHMvbWlzY1wiO1xyXG5pbXBvcnQge0Zvcm1TZWxlY3RTdWJqZWN0fSBmcm9tIFwiLi4vdXRpbHMvZm9ybS1zZWxlY3Qtc3ViamVjdFwiO1xyXG5pbXBvcnQge0Zvcm1TdWJqZWN0fSBmcm9tIFwiLi4vdXRpbHMvZm9ybS1zdWJqZWN0XCI7XHJcbmltcG9ydCB7RHluYW1pY0VkaXRvck1vZGVsLCBEeW5hbWljRWRpdG9yTW9kZWxDb25maWd9IGZyb20gXCIuLi91dGlscy9keW5hbWljLWVkaXRvci5tb2RlbFwiO1xyXG5pbXBvcnQge1xyXG4gICAgRHluYW1pY0Zvcm1BcnJheUdyb3VwTW9kZWwsXHJcbiAgICBEeW5hbWljRm9ybUFycmF5TW9kZWwsXHJcbiAgICBEeW5hbWljRm9ybUFycmF5TW9kZWxDb25maWdcclxufSBmcm9tIFwiLi4vdXRpbHMvZHluYW1pYy1mb3JtLWFycmF5Lm1vZGVsXCI7XHJcbmltcG9ydCB7RHluYW1pY0Zvcm1PcHRpb25Db25maWcsIER5bmFtaWNTZWxlY3RNb2RlbCwgRHluYW1pY1NlbGVjdE1vZGVsQ29uZmlnfSBmcm9tIFwiLi4vdXRpbHMvZHluYW1pYy1zZWxlY3QubW9kZWxcIjtcclxuaW1wb3J0IHtEeW5hbWljQmFzZUZvcm1Db21wb25lbnR9IGZyb20gXCIuLi9jb21wb25lbnRzL2Jhc2UvZHluYW1pYy1iYXNlLWZvcm0uY29tcG9uZW50XCI7XHJcblxyXG5ASW5qZWN0YWJsZSgpXHJcbmV4cG9ydCBjbGFzcyBEeW5hbWljRm9ybVNlcnZpY2UgZXh0ZW5kcyBCYXNlIHtcclxuXHJcbiAgICBnZXQgYXBpKCk6IElBcGlTZXJ2aWNlIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5vcGVuQXBpLmFwaTtcclxuICAgIH1cclxuXHJcbiAgICBnZXQgbGFuZ3VhZ2UoKTogSUxhbmd1YWdlU2VydmljZSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuYXBpLmxhbmd1YWdlO1xyXG4gICAgfVxyXG5cclxuICAgIHByb3RlY3RlZCBzY2hlbWFzOiBJT3BlbkFwaVNjaGVtYXM7XHJcblxyXG4gICAgY29uc3RydWN0b3IoY3M6IER5bmFtaWNGb3JtQ29tcG9uZW50U2VydmljZSxcclxuICAgICAgICAgICAgICAgIHZzOiBEeW5hbWljRm9ybVZhbGlkYXRpb25TZXJ2aWNlLFxyXG4gICAgICAgICAgICAgICAgQEluamVjdChPcGVuQXBpU2VydmljZSkgcmVhZG9ubHkgb3BlbkFwaTogT3BlbkFwaVNlcnZpY2UsXHJcbiAgICAgICAgICAgICAgICBASW5qZWN0KEluamVjdG9yKSByZWFkb25seSBpbmplY3RvcjogSW5qZWN0b3IpIHtcclxuICAgICAgICBzdXBlcihjcywgdnMpO1xyXG4gICAgfVxyXG5cclxuICAgIHBhdGNoR3JvdXAodmFsdWU6IGFueSwgZm9ybU1vZGVsOiBEeW5hbWljRm9ybU1vZGVsLCBmb3JtR3JvdXA6IEZvcm1Hcm91cCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMucGF0Y2hWYWx1ZVJlY3Vyc2l2ZSh2YWx1ZSwgZm9ybU1vZGVsLCBmb3JtR3JvdXApO1xyXG4gICAgICAgIGZvcm1Hcm91cC5wYXRjaFZhbHVlKE9iamVjdFV0aWxzLmNvcHkodmFsdWUpKTtcclxuICAgICAgICB0aGlzLmRldGVjdENoYW5nZXMoKTtcclxuICAgIH1cclxuXHJcbiAgICBwYXRjaEZvcm0odmFsdWU6IGFueSwgY29tcG9uZW50OiBEeW5hbWljQmFzZUZvcm1Db21wb25lbnQpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLnBhdGNoVmFsdWVSZWN1cnNpdmUodmFsdWUsIGNvbXBvbmVudC5tb2RlbCwgY29tcG9uZW50Lmdyb3VwKTtcclxuICAgICAgICBjb21wb25lbnQuZ3JvdXAucGF0Y2hWYWx1ZSh2YWx1ZSk7XHJcbiAgICAgICAgdGhpcy5kZXRlY3RDaGFuZ2VzKGNvbXBvbmVudCk7XHJcbiAgICB9XHJcblxyXG4gICAgc2VyaWFsaXplKGZvcm1Nb2RlbDogRHluYW1pY0Zvcm1Nb2RlbCwgZm9ybUdyb3VwOiBGb3JtR3JvdXApOiBQcm9taXNlPGFueT4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnNlcmlhbGl6ZVJlY3Vyc2l2ZShmb3JtTW9kZWwsIGZvcm1Hcm91cCk7XHJcbiAgICB9XHJcblxyXG4gICAgbm90aWZ5Q2hhbmdlcyhmb3JtTW9kZWw6IER5bmFtaWNGb3JtTW9kZWwsIGZvcm1Hcm91cDogRm9ybUdyb3VwKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5ub3RpZnlDaGFuZ2VzUmVjdXJzaXZlKGZvcm1Nb2RlbCwgZm9ybUdyb3VwLCBmb3JtTW9kZWwpO1xyXG4gICAgfVxyXG5cclxuICAgIHNob3dFcnJvcnMoZm9ybTogRHluYW1pY0Jhc2VGb3JtQ29tcG9uZW50KTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5zaG93RXJyb3JzRm9yR3JvdXAoZm9ybS5ncm91cCk7XHJcbiAgICAgICAgdGhpcy5kZXRlY3RDaGFuZ2VzKGZvcm0pO1xyXG4gICAgfVxyXG5cclxuICAgIHByb3RlY3RlZCBwYXRjaFZhbHVlUmVjdXJzaXZlKHZhbHVlOiBhbnksIGZvcm1Nb2RlbDogRHluYW1pY0Zvcm1Nb2RlbCwgZm9ybUdyb3VwOiBGb3JtR3JvdXApOiB2b2lkIHtcclxuICAgICAgICBpZiAoIXZhbHVlKSByZXR1cm47XHJcbiAgICAgICAgT2JqZWN0LmtleXModmFsdWUpLmZvckVhY2goa2V5ID0+IHtcclxuICAgICAgICAgICAgY29uc3Qgc3ViTW9kZWwgPSB0aGlzLmZpbmRNb2RlbEJ5SWQoa2V5LCBmb3JtTW9kZWwpO1xyXG4gICAgICAgICAgICBjb25zdCBzdWJWYWx1ZSA9IHZhbHVlW2tleV07XHJcbiAgICAgICAgICAgIGlmICghc3ViTW9kZWwpIHJldHVybjtcclxuICAgICAgICAgICAgY29uc3Qgc3ViQ29udHJvbCA9IHRoaXMuZmluZENvbnRyb2xCeU1vZGVsKHN1Yk1vZGVsLCBmb3JtR3JvdXApO1xyXG4gICAgICAgICAgICBpZiAoc3ViTW9kZWwgaW5zdGFuY2VvZiBEeW5hbWljU2VsZWN0TW9kZWwgJiYgT2JqZWN0VXRpbHMuaXNPYmplY3Qoc3ViVmFsdWUpKSB7XHJcbiAgICAgICAgICAgICAgICB2YWx1ZVtrZXldID0gc3ViVmFsdWUuaWQgfHwgc3ViVmFsdWUuX2lkIHx8IHN1YlZhbHVlO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmIChzdWJNb2RlbCBpbnN0YW5jZW9mIER5bmFtaWNGb3JtQXJyYXlNb2RlbCkge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgbGVuZ3RoID0gQXJyYXkuaXNBcnJheShzdWJWYWx1ZSkgPyBzdWJWYWx1ZS5sZW5ndGggOiAwO1xyXG4gICAgICAgICAgICAgICAgY29uc3Qgc3ViQXJyYXkgPSBzdWJDb250cm9sIGFzIEZvcm1BcnJheTtcclxuICAgICAgICAgICAgICAgIHdoaWxlIChzdWJNb2RlbC5zaXplID4gbGVuZ3RoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5yZW1vdmVGb3JtQXJyYXlHcm91cCgwLCBzdWJBcnJheSwgc3ViTW9kZWwpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgd2hpbGUgKHN1Yk1vZGVsLnNpemUgPCBsZW5ndGgpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmluc2VydEZvcm1BcnJheUdyb3VwKHN1Yk1vZGVsLnNpemUsIHN1YkFycmF5LCBzdWJNb2RlbCBhcyBEeW5hbWljRm9ybUFycmF5TW9kZWwpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGl0ZW1Nb2RlbCA9IHN1Yk1vZGVsLmdldChpKTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnBhdGNoVmFsdWVSZWN1cnNpdmUoc3ViVmFsdWVbaV0sIGl0ZW1Nb2RlbC5ncm91cCwgc3ViQXJyYXkuYXQoaSkgYXMgRm9ybUdyb3VwKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAoc3ViTW9kZWwgaW5zdGFuY2VvZiBEeW5hbWljRm9ybUdyb3VwTW9kZWwpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMucGF0Y2hWYWx1ZVJlY3Vyc2l2ZShzdWJWYWx1ZSwgc3ViTW9kZWwuZ3JvdXAsIHN1YkNvbnRyb2wgYXMgRm9ybUdyb3VwKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHByb3RlY3RlZCBhc3luYyBzZXJpYWxpemVSZWN1cnNpdmUoZm9ybU1vZGVsOiBEeW5hbWljRm9ybU1vZGVsLCBmb3JtR3JvdXA6IEZvcm1Hcm91cCk6IFByb21pc2U8YW55PiB7XHJcbiAgICAgICAgY29uc3QgcmVzdWx0ID0ge307XHJcbiAgICAgICAgaWYgKCFmb3JtTW9kZWwgfHwgIWZvcm1Hcm91cCB8fCAhZm9ybUdyb3VwLnZhbHVlKSByZXR1cm4gcmVzdWx0O1xyXG4gICAgICAgIGZvciAoY29uc3QgaSBpbiBmb3JtTW9kZWwpIHtcclxuICAgICAgICAgICAgY29uc3Qgc3ViTW9kZWwgPSBmb3JtTW9kZWxbaV0gYXMgRHluYW1pY0Zvcm1WYWx1ZUNvbnRyb2xNb2RlbDxhbnk+O1xyXG4gICAgICAgICAgICBjb25zdCBzdWJDb250cm9sID0gdGhpcy5maW5kQ29udHJvbEJ5TW9kZWwoc3ViTW9kZWwsIGZvcm1Hcm91cCk7XHJcbiAgICAgICAgICAgIGNvbnN0IHNlcmlhbGl6ZXIgPSBzdWJNb2RlbC5hZGRpdGlvbmFsPy5zZXJpYWxpemVyIGFzIEZvcm1Db250cm9sU2VyaWFsaXplcjtcclxuICAgICAgICAgICAgaWYgKE9iamVjdFV0aWxzLmlzRnVuY3Rpb24oc2VyaWFsaXplcikpIHtcclxuICAgICAgICAgICAgICAgIHJlc3VsdFtzdWJNb2RlbC5pZF0gPSBhd2FpdCBzZXJpYWxpemVyKHN1Yk1vZGVsLCBzdWJDb250cm9sKTtcclxuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmIChzdWJNb2RlbCBpbnN0YW5jZW9mIER5bmFtaWNGb3JtQXJyYXlNb2RlbCkge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgbGVuZ3RoID0gQXJyYXkuaXNBcnJheShzdWJDb250cm9sLnZhbHVlKSA/IHN1YkNvbnRyb2wudmFsdWUubGVuZ3RoIDogMDtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHN1YkFycmF5ID0gc3ViQ29udHJvbCBhcyBGb3JtQXJyYXk7XHJcbiAgICAgICAgICAgICAgICBjb25zdCByZXNBcnJheSA9IFtdO1xyXG4gICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGl0ZW1Nb2RlbCA9IHN1Yk1vZGVsLmdldChpKTtcclxuICAgICAgICAgICAgICAgICAgICByZXNBcnJheS5wdXNoKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLnNlcmlhbGl6ZVJlY3Vyc2l2ZShpdGVtTW9kZWwuZ3JvdXAsIHN1YkFycmF5LmF0KGkpIGFzIEZvcm1Hcm91cClcclxuICAgICAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgcmVzdWx0W3N1Yk1vZGVsLmlkXSA9IHJlc0FycmF5O1xyXG4gICAgICAgICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKHN1Yk1vZGVsIGluc3RhbmNlb2YgRHluYW1pY0Zvcm1Hcm91cE1vZGVsKSB7XHJcbiAgICAgICAgICAgICAgICByZXN1bHRbc3ViTW9kZWwuaWRdID0gYXdhaXQgdGhpcy5zZXJpYWxpemVSZWN1cnNpdmUoc3ViTW9kZWwuZ3JvdXAsIHN1YkNvbnRyb2wgYXMgRm9ybUdyb3VwKTtcclxuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmIChzdWJNb2RlbCBpbnN0YW5jZW9mIER5bmFtaWNJbnB1dE1vZGVsICYmICFPYmplY3RVdGlscy5pc051bGxPclVuZGVmaW5lZChzdWJDb250cm9sLnZhbHVlKSkge1xyXG4gICAgICAgICAgICAgICAgcmVzdWx0W3N1Yk1vZGVsLmlkXSA9IHN1Yk1vZGVsLmlucHV0VHlwZSA9PSBcIm51bWJlclwiXHJcbiAgICAgICAgICAgICAgICAgICAgPyBwYXJzZUZsb2F0KChgJHtzdWJDb250cm9sLnZhbHVlfWAgfHwgXCIwXCIpLnJlcGxhY2UoLywvZ2ksIFwiLlwiKSkgPz8gbnVsbFxyXG4gICAgICAgICAgICAgICAgICAgIDogc3ViQ29udHJvbC52YWx1ZTtcclxuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJlc3VsdFtzdWJNb2RlbC5pZF0gPSBzdWJDb250cm9sLnZhbHVlO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gcmVzdWx0O1xyXG4gICAgfVxyXG5cclxuICAgIHByb3RlY3RlZCBub3RpZnlDaGFuZ2VzUmVjdXJzaXZlKGZvcm1Nb2RlbDogRHluYW1pY0Zvcm1Nb2RlbCwgZm9ybUdyb3VwOiBGb3JtR3JvdXAsIHJvb3Q6IER5bmFtaWNGb3JtTW9kZWwpOiB2b2lkIHtcclxuICAgICAgICBpZiAoIWZvcm1Nb2RlbCB8fCAhZm9ybUdyb3VwKSByZXR1cm47XHJcbiAgICAgICAgZm9yIChjb25zdCBpIGluIGZvcm1Nb2RlbCkge1xyXG4gICAgICAgICAgICBjb25zdCBzdWJNb2RlbCA9IGZvcm1Nb2RlbFtpXSBhcyBEeW5hbWljRm9ybVZhbHVlQ29udHJvbE1vZGVsPGFueT47XHJcbiAgICAgICAgICAgIGNvbnN0IHN1YkNvbnRyb2wgPSB0aGlzLmZpbmRDb250cm9sQnlNb2RlbChzdWJNb2RlbCwgZm9ybUdyb3VwKTtcclxuICAgICAgICAgICAgaWYgKHN1Yk1vZGVsIGluc3RhbmNlb2YgRHluYW1pY0Zvcm1BcnJheU1vZGVsKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBsZW5ndGggPSBBcnJheS5pc0FycmF5KHN1YkNvbnRyb2wudmFsdWUpID8gc3ViQ29udHJvbC52YWx1ZS5sZW5ndGggOiAwO1xyXG4gICAgICAgICAgICAgICAgY29uc3Qgc3ViQXJyYXkgPSBzdWJDb250cm9sIGFzIEZvcm1BcnJheTtcclxuICAgICAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBpdGVtTW9kZWwgPSBzdWJNb2RlbC5nZXQoaSk7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5ub3RpZnlDaGFuZ2VzUmVjdXJzaXZlKGl0ZW1Nb2RlbC5ncm91cCwgc3ViQXJyYXkuYXQoaSkgYXMgRm9ybUdyb3VwLCByb290KTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmIChzdWJNb2RlbCBpbnN0YW5jZW9mIER5bmFtaWNGb3JtR3JvdXBNb2RlbCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5ub3RpZnlDaGFuZ2VzUmVjdXJzaXZlKHN1Yk1vZGVsLmdyb3VwLCBzdWJDb250cm9sIGFzIEZvcm1Hcm91cCwgcm9vdCk7XHJcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0aGlzLnVwZGF0ZVNlbGVjdE9wdGlvbnMoc3ViTW9kZWwsIHN1YkNvbnRyb2wgYXMgRm9ybUNvbnRyb2wsIHJvb3QpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwcm90ZWN0ZWQgdXBkYXRlU2VsZWN0T3B0aW9ucyhmb3JtQ29udHJvbE1vZGVsOiBEeW5hbWljRm9ybUNvbnRyb2xNb2RlbCwgZm9ybUNvbnRyb2w6IEZvcm1Db250cm9sLCByb290OiBEeW5hbWljRm9ybU1vZGVsKTogdm9pZCB7XHJcbiAgICAgICAgaWYgKGZvcm1Db250cm9sTW9kZWwgaW5zdGFuY2VvZiBEeW5hbWljU2VsZWN0TW9kZWwpIHtcclxuICAgICAgICAgICAgbGV0IG9wdGlvbnMgPSBmb3JtQ29udHJvbE1vZGVsLm9wdGlvbnMkO1xyXG4gICAgICAgICAgICBpZiAob3B0aW9ucyBpbnN0YW5jZW9mIEZvcm1TdWJqZWN0KSB7XHJcbiAgICAgICAgICAgICAgICBvcHRpb25zLm5vdGlmeShmb3JtQ29udHJvbE1vZGVsLCBmb3JtQ29udHJvbCwgcm9vdCk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgd2hpbGUgKG9wdGlvbnMgaW5zdGFuY2VvZiBTdWJqZWN0ICYmIG9wdGlvbnMuc291cmNlKSB7XHJcbiAgICAgICAgICAgICAgICBvcHRpb25zID0gb3B0aW9ucy5zb3VyY2U7XHJcbiAgICAgICAgICAgICAgICBpZiAob3B0aW9ucyBpbnN0YW5jZW9mIEZvcm1TdWJqZWN0KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgb3B0aW9ucy5ub3RpZnkoZm9ybUNvbnRyb2xNb2RlbCwgZm9ybUNvbnRyb2wsIHJvb3QpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHByb3RlY3RlZCBzaG93RXJyb3JzRm9yR3JvdXAoZm9ybUdyb3VwOiBGb3JtR3JvdXApOiB2b2lkIHtcclxuICAgICAgICBpZiAoIWZvcm1Hcm91cCkgcmV0dXJuO1xyXG4gICAgICAgIGZvcm1Hcm91cC5tYXJrQXNUb3VjaGVkKHtvbmx5U2VsZjogdHJ1ZX0pO1xyXG4gICAgICAgIGNvbnN0IGNvbnRyb2xzID0gT2JqZWN0LmtleXMoZm9ybUdyb3VwLmNvbnRyb2xzKS5tYXAoaWQgPT4gZm9ybUdyb3VwLmNvbnRyb2xzW2lkXSk7XHJcbiAgICAgICAgdGhpcy5zaG93RXJyb3JzRm9yQ29udHJvbHMoY29udHJvbHMpO1xyXG4gICAgfVxyXG5cclxuICAgIHByb3RlY3RlZCBzaG93RXJyb3JzRm9yQ29udHJvbHMoY29udHJvbHM6IEFic3RyYWN0Q29udHJvbFtdKTogdm9pZCB7XHJcbiAgICAgICAgY29udHJvbHMuZm9yRWFjaChjb250cm9sID0+IHtcclxuICAgICAgICAgICAgaWYgKGNvbnRyb2wgaW5zdGFuY2VvZiBGb3JtR3JvdXApIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2hvd0Vycm9yc0Zvckdyb3VwKGNvbnRyb2wpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGNvbnRyb2wubWFya0FzVG91Y2hlZCh7b25seVNlbGY6IHRydWV9KTtcclxuICAgICAgICAgICAgaWYgKGNvbnRyb2wgaW5zdGFuY2VvZiBGb3JtQXJyYXkpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2hvd0Vycm9yc0ZvckNvbnRyb2xzKGNvbnRyb2wuY29udHJvbHMpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgZ2V0Rm9ybU1vZGVsRm9yU2NoZW1hKG5hbWU6IHN0cmluZywgY3VzdG9taXplTW9kZWw/OiBGb3JtTW9kZWxDdXN0b21pemVyKTogUHJvbWlzZTxEeW5hbWljRm9ybU1vZGVsPiB7XHJcbiAgICAgICAgdGhpcy5hcGkuY2FjaGUgPSB7fTtcclxuICAgICAgICB0aGlzLnNjaGVtYXMgPSBhd2FpdCB0aGlzLm9wZW5BcGkuZ2V0U2NoZW1hcygpO1xyXG4gICAgICAgIGNvbnN0IGN1c3RvbWl6ZU1vZGVsczogRm9ybU1vZGVsQ3VzdG9taXplcldyYXAgPSAoXHJcbiAgICAgICAgICAgIHByb3BlcnR5OiBJT3BlbkFwaVNjaGVtYVByb3BlcnR5LCBzY2hlbWE6IElPcGVuQXBpU2NoZW1hLFxyXG4gICAgICAgICAgICBtb2RlbFR5cGU6IE1vZGVsVHlwZSwgY29uZmlnOiBEeW5hbWljRm9ybUNvbnRyb2xNb2RlbENvbmZpZykgPT4ge1xyXG4gICAgICAgICAgICBjb25zdCBtb2RlbCA9IG5ldyBtb2RlbFR5cGUoY29uZmlnKTtcclxuICAgICAgICAgICAgaWYgKCFPYmplY3RVdGlscy5pc0Z1bmN0aW9uKGN1c3RvbWl6ZU1vZGVsKSkgcmV0dXJuIFttb2RlbF07XHJcbiAgICAgICAgICAgIGNvbnN0IHJlcyA9IGN1c3RvbWl6ZU1vZGVsKHByb3BlcnR5LCBzY2hlbWEsIG1vZGVsLCBjb25maWcsIHRoaXMuaW5qZWN0b3IpO1xyXG4gICAgICAgICAgICByZXR1cm4gQXJyYXkuaXNBcnJheShyZXMpID8gcmVzIDogW3Jlc107XHJcbiAgICAgICAgfTtcclxuICAgICAgICByZXR1cm4gdGhpcy5nZXRGb3JtTW9kZWxGb3JTY2hlbWFEZWYodGhpcy5zY2hlbWFzW25hbWVdLCBjdXN0b21pemVNb2RlbHMpO1xyXG4gICAgfVxyXG5cclxuICAgIHByb3RlY3RlZCBnZXRGb3JtTW9kZWxGb3JTY2hlbWFEZWYoc2NoZW1hOiBJT3BlbkFwaVNjaGVtYSwgY3VzdG9taXplTW9kZWxzOiBGb3JtTW9kZWxDdXN0b21pemVyV3JhcCk6IER5bmFtaWNGb3JtTW9kZWwge1xyXG4gICAgICAgIGlmICghc2NoZW1hKVxyXG4gICAgICAgICAgICByZXR1cm4gW107XHJcbiAgICAgICAgY29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKHNjaGVtYS5wcm9wZXJ0aWVzIHx8IHt9KTtcclxuICAgICAgICBjb25zdCBjb250cm9sczogRHluYW1pY0Zvcm1Nb2RlbCA9IFtdO1xyXG4gICAgICAgIGZvciAoY29uc3QgcCBvZiBrZXlzKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHByb3BlcnR5ID0gc2NoZW1hLnByb3BlcnRpZXNbcF07XHJcbiAgICAgICAgICAgIGNvbnRyb2xzLnB1c2goLi4udGhpcy5nZXRGb3JtQ29udHJvbE1vZGVscyhwcm9wZXJ0eSwgc2NoZW1hLCBjdXN0b21pemVNb2RlbHMpKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGNvbnRyb2xzLmZpbHRlcih0ID0+IG51bGwgIT09IHQpO1xyXG4gICAgfVxyXG5cclxuICAgIHByb3RlY3RlZCBjaGVja0lzRWRpdG9yUHJvcGVydHkocHJvcGVydHk6IElPcGVuQXBpU2NoZW1hUHJvcGVydHkpOiBib29sZWFuIHtcclxuICAgICAgICBpZiAoIXByb3BlcnR5LmZvcm1hdCkgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIHJldHVybiBFRElUT1JfRk9STUFUUy5pbmRleE9mKHByb3BlcnR5LmZvcm1hdCkgPj0gMCB8fCBwcm9wZXJ0eS5mb3JtYXQuZW5kc1dpdGgoXCJzY3JpcHRcIik7XHJcbiAgICB9XHJcblxyXG4gICAgcHJvdGVjdGVkIGdldEZvcm1Db250cm9sTW9kZWxzKHByb3BlcnR5OiBJT3BlbkFwaVNjaGVtYVByb3BlcnR5LCBzY2hlbWE6IElPcGVuQXBpU2NoZW1hLCBjdXN0b21pemVNb2RlbHM6IEZvcm1Nb2RlbEN1c3RvbWl6ZXJXcmFwKTogRHluYW1pY0Zvcm1Db250cm9sTW9kZWxbXSB7XHJcbiAgICAgICAgY29uc3QgJGVudW0gPSBwcm9wZXJ0eS5pdGVtcz8uZW51bSB8fCBwcm9wZXJ0eS5lbnVtO1xyXG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KCRlbnVtKSB8fCBpc1N0cmluZ1dpdGhWYWwocHJvcGVydHkub3B0aW9uc1BhdGgpIHx8IGlzU3RyaW5nV2l0aFZhbChwcm9wZXJ0eS5lbmRwb2ludCkpIHtcclxuICAgICAgICAgICAgcmV0dXJuIGN1c3RvbWl6ZU1vZGVscyhwcm9wZXJ0eSwgc2NoZW1hLCBEeW5hbWljU2VsZWN0TW9kZWwsIHRoaXMuZ2V0Rm9ybVNlbGVjdENvbmZpZyhwcm9wZXJ0eSwgc2NoZW1hKSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHN3aXRjaCAocHJvcGVydHkudHlwZSkge1xyXG4gICAgICAgICAgICBjYXNlIFwic3RyaW5nXCI6XHJcbiAgICAgICAgICAgIGNhc2UgXCJudW1iZXJcIjpcclxuICAgICAgICAgICAgY2FzZSBcImludGVnZXJcIjpcclxuICAgICAgICAgICAgY2FzZSBcInRleHRhcmVhXCI6XHJcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5jaGVja0lzRWRpdG9yUHJvcGVydHkocHJvcGVydHkpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGN1c3RvbWl6ZU1vZGVscyhwcm9wZXJ0eSwgc2NoZW1hLCBEeW5hbWljRWRpdG9yTW9kZWwsIHRoaXMuZ2V0Rm9ybUVkaXRvckNvbmZpZyhwcm9wZXJ0eSwgc2NoZW1hKSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBpZiAocHJvcGVydHkuZm9ybWF0ID09IFwidGV4dGFyZWFcIikge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBjdXN0b21pemVNb2RlbHMocHJvcGVydHksIHNjaGVtYSwgRHluYW1pY1RleHRBcmVhTW9kZWwsIHRoaXMuZ2V0Rm9ybVRleHRhcmVhQ29uZmlnKHByb3BlcnR5LCBzY2hlbWEpKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHJldHVybiBjdXN0b21pemVNb2RlbHMocHJvcGVydHksIHNjaGVtYSwgRHluYW1pY0lucHV0TW9kZWwsIHRoaXMuZ2V0Rm9ybUlucHV0Q29uZmlnKHByb3BlcnR5LCBzY2hlbWEpKTtcclxuICAgICAgICAgICAgY2FzZSBcIm9iamVjdFwiOlxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGN1c3RvbWl6ZU1vZGVscyhwcm9wZXJ0eSwgc2NoZW1hLCBEeW5hbWljRWRpdG9yTW9kZWwsIHRoaXMuZ2V0Rm9ybUVkaXRvckNvbmZpZyhwcm9wZXJ0eSwgc2NoZW1hKSk7XHJcbiAgICAgICAgICAgIGNhc2UgXCJib29sZWFuXCI6XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gY3VzdG9taXplTW9kZWxzKHByb3BlcnR5LCBzY2hlbWEsIER5bmFtaWNDaGVja2JveE1vZGVsLCB0aGlzLmdldEZvcm1DaGVja2JveENvbmZpZyhwcm9wZXJ0eSwgc2NoZW1hKSk7XHJcbiAgICAgICAgICAgIGNhc2UgXCJhcnJheVwiOlxyXG4gICAgICAgICAgICAgICAgaWYgKGZpbmRSZWZzKHByb3BlcnR5KS5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGN1c3RvbWl6ZU1vZGVscyhwcm9wZXJ0eSwgc2NoZW1hLCBEeW5hbWljRm9ybUFycmF5TW9kZWwsIHRoaXMuZ2V0Rm9ybUFycmF5Q29uZmlnKHByb3BlcnR5LCBzY2hlbWEsIGN1c3RvbWl6ZU1vZGVscykpO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gY3VzdG9taXplTW9kZWxzKHByb3BlcnR5LCBzY2hlbWEsIER5bmFtaWNJbnB1dE1vZGVsLCB0aGlzLmdldEZvcm1JbnB1dENvbmZpZyhwcm9wZXJ0eSwgc2NoZW1hKSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGNhc2UgXCJmaWxlXCI6XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gY3VzdG9taXplTW9kZWxzKHByb3BlcnR5LCBzY2hlbWEsIER5bmFtaWNGaWxlVXBsb2FkTW9kZWwsIHRoaXMuZ2V0Rm9ybVVwbG9hZENvbmZpZyhwcm9wZXJ0eSwgc2NoZW1hKSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChmaW5kUmVmcyhwcm9wZXJ0eSkubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICByZXR1cm4gY3VzdG9taXplTW9kZWxzKHByb3BlcnR5LCBzY2hlbWEsIER5bmFtaWNGb3JtR3JvdXBNb2RlbCwgdGhpcy5nZXRGb3JtR3JvdXBDb25maWcocHJvcGVydHksIHNjaGVtYSwgY3VzdG9taXplTW9kZWxzKSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBbXTtcclxuICAgIH1cclxuXHJcbiAgICBmaW5kTW9kZWxCeVBhdGgocGFyZW50OiBEeW5hbWljUGF0aGFibGUgfCBEeW5hbWljRm9ybU1vZGVsLCBwYXRoOiBzdHJpbmdbXSk6IER5bmFtaWNQYXRoYWJsZSB7XHJcbiAgICAgICAgaWYgKHBhdGgubGVuZ3RoID09IDApIHJldHVybiBwYXJlbnQgYXMgRHluYW1pY1BhdGhhYmxlO1xyXG4gICAgICAgIGNvbnN0IG5leHQgPSBwYXRoLnNoaWZ0KCkgYXMgYW55O1xyXG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KHBhcmVudCkpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZmluZE1vZGVsQnlQYXRoKHBhcmVudC5maW5kKHQgPT4gdC5pZCA9PSBuZXh0KSwgcGF0aCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChwYXJlbnQgaW5zdGFuY2VvZiBEeW5hbWljRm9ybUdyb3VwTW9kZWwgfHwgcGFyZW50IGluc3RhbmNlb2YgRHluYW1pY0Zvcm1BcnJheUdyb3VwTW9kZWwpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZmluZE1vZGVsQnlQYXRoKHBhcmVudC5ncm91cC5maW5kKHQgPT4gdC5pZCA9PSBuZXh0KSwgcGF0aCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChwYXJlbnQgaW5zdGFuY2VvZiBEeW5hbWljRm9ybUFycmF5TW9kZWwpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZmluZE1vZGVsQnlQYXRoKHBhcmVudC5ncm91cHMuZmluZCh0ID0+IHQuaW5kZXggPT0gbmV4dCksIHBhdGgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gcGFyZW50O1xyXG4gICAgfVxyXG5cclxuICAgIGdldEZvcm1Db250cm9sQ29uZmlnKHByb3BlcnR5OiBJT3BlbkFwaVNjaGVtYVByb3BlcnR5LCBzY2hlbWE6IElPcGVuQXBpU2NoZW1hKTogRHluYW1pY0Zvcm1WYWx1ZUNvbnRyb2xNb2RlbENvbmZpZzxhbnk+IHtcclxuICAgICAgICBjb25zdCB2YWxpZGF0b3JzID0gdGhpcy5nZXRWYWxpZGF0b3JzKHByb3BlcnR5LCBzY2hlbWEpO1xyXG4gICAgICAgIGNvbnN0IGVycm9yTWVzc2FnZXMgPSBPYmplY3Qua2V5cyh2YWxpZGF0b3JzKS5yZWR1Y2UoKHJlcywga2V5KSA9PiB7XHJcbiAgICAgICAgICAgIHJlc1trZXldID0gYGVycm9yLiR7a2V5fWA7XHJcbiAgICAgICAgICAgIHJldHVybiByZXM7XHJcbiAgICAgICAgfSwge30pO1xyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgIGlkOiBwcm9wZXJ0eS5pZCxcclxuICAgICAgICAgICAgbGFiZWw6IE9iamVjdFV0aWxzLmlzU3RyaW5nKHByb3BlcnR5LmxhYmVsKSA/IHByb3BlcnR5LmxhYmVsIDogcHJvcGVydHkuaWQsXHJcbiAgICAgICAgICAgIGhpZGRlbjogcHJvcGVydHkuaGlkZGVuLFxyXG4gICAgICAgICAgICBkaXNhYmxlZDogcHJvcGVydHkuZGlzYWJsZWQsXHJcbiAgICAgICAgICAgIHZhbGlkYXRvcnMsXHJcbiAgICAgICAgICAgIGVycm9yTWVzc2FnZXMsXHJcbiAgICAgICAgICAgIGFkZGl0aW9uYWw6IE9iamVjdC5hc3NpZ24oe30sIHByb3BlcnR5KVxyXG4gICAgICAgIH07XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0Rm9ybUFycmF5Q29uZmlnKHByb3BlcnR5OiBJT3BlbkFwaVNjaGVtYVByb3BlcnR5LCBzY2hlbWE6IElPcGVuQXBpU2NoZW1hLCBjdXN0b21pemVNb2RlbHM6IEZvcm1Nb2RlbEN1c3RvbWl6ZXJXcmFwKTogRHluYW1pY0Zvcm1BcnJheU1vZGVsQ29uZmlnIHtcclxuICAgICAgICBjb25zdCBzdWJTY2hlbWFzID0gZmluZFJlZnMocHJvcGVydHkpLm1hcChyZWYgPT4gdGhpcy5zY2hlbWFzW3JlZl0pO1xyXG4gICAgICAgIHJldHVybiBPYmplY3QuYXNzaWduKFxyXG4gICAgICAgICAgICB0aGlzLmdldEZvcm1Db250cm9sQ29uZmlnKHByb3BlcnR5LCBzY2hlbWEpLFxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICBncm91cEZhY3Rvcnk6ICgpID0+IG1lcmdlRm9ybU1vZGVscyhzdWJTY2hlbWFzLm1hcChzID0+IHRoaXMuZ2V0Rm9ybU1vZGVsRm9yU2NoZW1hRGVmKHMsIGN1c3RvbWl6ZU1vZGVscykpKSxcclxuICAgICAgICAgICAgICAgIHNvcnRhYmxlOiBwcm9wZXJ0eS5zb3J0YWJsZSB8fCBmYWxzZSxcclxuICAgICAgICAgICAgICAgIHVzZVRhYnM6IHByb3BlcnR5LnVzZVRhYnMgfHwgZmFsc2UsXHJcbiAgICAgICAgICAgICAgICBhZGRJdGVtOiBwcm9wZXJ0eS5hZGRJdGVtICE9PSBmYWxzZSxcclxuICAgICAgICAgICAgICAgIGluc2VydEl0ZW06IHByb3BlcnR5Lmluc2VydEl0ZW0gIT09IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgY2xvbmVJdGVtOiBwcm9wZXJ0eS5jbG9uZUl0ZW0gIT09IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgbW92ZUl0ZW06IHByb3BlcnR5Lm1vdmVJdGVtICE9PSBmYWxzZSxcclxuICAgICAgICAgICAgICAgIHJlbW92ZUl0ZW06IHByb3BlcnR5LnJlbW92ZUl0ZW0gIT09IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgY2xlYXJJdGVtczogcHJvcGVydHkuY2xlYXJJdGVtcyAhPT0gZmFsc2VcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0Rm9ybUdyb3VwQ29uZmlnKHByb3BlcnR5OiBJT3BlbkFwaVNjaGVtYVByb3BlcnR5LCBzY2hlbWE6IElPcGVuQXBpU2NoZW1hLCBjdXN0b21pemVNb2RlbHM6IEZvcm1Nb2RlbEN1c3RvbWl6ZXJXcmFwKTogRHluYW1pY0Zvcm1Hcm91cE1vZGVsQ29uZmlnIHtcclxuICAgICAgICBjb25zdCBzdWJTY2hlbWFzID0gZmluZFJlZnMocHJvcGVydHkpLm1hcChyZWYgPT4gdGhpcy5zY2hlbWFzW3JlZl0pO1xyXG4gICAgICAgIHJldHVybiBPYmplY3QuYXNzaWduKFxyXG4gICAgICAgICAgICB0aGlzLmdldEZvcm1Db250cm9sQ29uZmlnKHByb3BlcnR5LCBzY2hlbWEpLFxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICBncm91cDogbWVyZ2VGb3JtTW9kZWxzKHN1YlNjaGVtYXMubWFwKHMgPT4gdGhpcy5nZXRGb3JtTW9kZWxGb3JTY2hlbWFEZWYocywgY3VzdG9taXplTW9kZWxzKSkpXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIGdldEZvcm1JbnB1dENvbmZpZyhwcm9wZXJ0eTogSU9wZW5BcGlTY2hlbWFQcm9wZXJ0eSwgc2NoZW1hOiBJT3BlbkFwaVNjaGVtYSk6IER5bmFtaWNJbnB1dE1vZGVsQ29uZmlnIHtcclxuICAgICAgICBsZXQgaW5wdXRUeXBlID0gU3RyaW5nVXRpbHMuaGFzKHByb3BlcnR5LmlkLCBcInBhc3N3b3JkXCIsIFwiUGFzc3dvcmRcIikgPyBcInBhc3N3b3JkXCIgOiAocHJvcGVydHkuZm9ybWF0IHx8IHByb3BlcnR5Lml0ZW1zPy50eXBlIHx8IHByb3BlcnR5LnR5cGUpO1xyXG4gICAgICAgIHN3aXRjaCAoaW5wdXRUeXBlKSB7XHJcbiAgICAgICAgICAgIGNhc2UgXCJib29sZWFuXCI6XHJcbiAgICAgICAgICAgICAgICBpbnB1dFR5cGUgPSBcImNoZWNrYm94XCI7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSBcInRleHRhcmVhXCI6XHJcbiAgICAgICAgICAgICAgICBpbnB1dFR5cGUgPSBcInRleHRhcmVhXCI7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSBcImludGVnZXJcIjpcclxuICAgICAgICAgICAgICAgIGlucHV0VHlwZSA9IFwibnVtYmVyXCI7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3Qgc3ViID0gcHJvcGVydHkudHlwZSA9PSBcImFycmF5XCIgPyBwcm9wZXJ0eS5pdGVtcyB8fCBwcm9wZXJ0eSA6IHByb3BlcnR5O1xyXG4gICAgICAgIHJldHVybiBPYmplY3QuYXNzaWduKFxyXG4gICAgICAgICAgICB0aGlzLmdldEZvcm1Db250cm9sQ29uZmlnKHByb3BlcnR5LCBzY2hlbWEpLFxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICBpbnB1dFR5cGUsXHJcbiAgICAgICAgICAgICAgICBhdXRvQ29tcGxldGU6IHByb3BlcnR5LmF1dG9Db21wbGV0ZSB8fCBcIm9mZlwiLFxyXG4gICAgICAgICAgICAgICAgbXVsdGlwbGU6IHByb3BlcnR5LnR5cGUgPT0gXCJhcnJheVwiLFxyXG4gICAgICAgICAgICAgICAgYWNjZXB0OiBPYmplY3RVdGlscy5pc1N0cmluZyhwcm9wZXJ0eS5hY2NlcHQpID8gcHJvcGVydHkuYWNjZXB0IDogbnVsbCxcclxuICAgICAgICAgICAgICAgIG1hc2s6IE9iamVjdFV0aWxzLmlzU3RyaW5nKHByb3BlcnR5Lm1hc2spID8gcHJvcGVydHkubWFzayA6IG51bGwsXHJcbiAgICAgICAgICAgICAgICBwYXR0ZXJuOiBPYmplY3RVdGlscy5pc1N0cmluZyhwcm9wZXJ0eS5wYXR0ZXJuKSA/IHByb3BlcnR5LnBhdHRlcm4gOiBudWxsLFxyXG4gICAgICAgICAgICAgICAgc3RlcDogaXNOYU4oc3ViLnN0ZXApID8gKGlzTmFOKHByb3BlcnR5LnN0ZXApID8gMSA6IHByb3BlcnR5LnN0ZXApIDogc3ViLnN0ZXAsXHJcbiAgICAgICAgICAgICAgICBtaW46IGlzTmFOKHN1Yi5taW5pbXVtKSA/IE1JTl9JTlBVVF9OVU0gOiBzdWIubWluaW11bSxcclxuICAgICAgICAgICAgICAgIG1heDogaXNOYU4oc3ViLm1heGltdW0pID8gTUFYX0lOUFVUX05VTSA6IHN1Yi5tYXhpbXVtLFxyXG4gICAgICAgICAgICAgICAgbWluTGVuZ3RoOiBpc05hTihzdWIubWluTGVuZ3RoKSA/IDAgOiBzdWIubWluTGVuZ3RoLFxyXG4gICAgICAgICAgICAgICAgbWF4TGVuZ3RoOiBpc05hTihzdWIubWF4TGVuZ3RoKSA/IE1BWF9JTlBVVF9OVU0gOiBzdWIubWF4TGVuZ3RoLFxyXG4gICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI6IHByb3BlcnR5LnBsYWNlaG9sZGVyIHx8IFwiXCJcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0Rm9ybUVkaXRvckNvbmZpZyhwcm9wZXJ0eTogSU9wZW5BcGlTY2hlbWFQcm9wZXJ0eSwgc2NoZW1hOiBJT3BlbkFwaVNjaGVtYSk6IER5bmFtaWNFZGl0b3JNb2RlbENvbmZpZyB7XHJcbiAgICAgICAgY29uc3Qgc3ViID0gcHJvcGVydHkudHlwZSA9PSBcImFycmF5XCIgPyBwcm9wZXJ0eS5pdGVtcyB8fCBwcm9wZXJ0eSA6IHByb3BlcnR5O1xyXG4gICAgICAgIHJldHVybiBPYmplY3QuYXNzaWduKFxyXG4gICAgICAgICAgICB0aGlzLmdldEZvcm1Db250cm9sQ29uZmlnKHByb3BlcnR5LCBzY2hlbWEpLFxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICBpbnB1dFR5cGU6IHByb3BlcnR5LmZvcm1hdCB8fCBcImpzb25cIixcclxuICAgICAgICAgICAgICAgIGNvbnZlcnRPYmplY3Q6IHByb3BlcnR5LnR5cGUgIT09IFwic3RyaW5nXCIsXHJcbiAgICAgICAgICAgICAgICBhdXRvQ29tcGxldGU6IHByb3BlcnR5LmF1dG9Db21wbGV0ZSB8fCBcIm9mZlwiLFxyXG4gICAgICAgICAgICAgICAgbXVsdGlwbGU6IHByb3BlcnR5LnR5cGUgPT0gXCJhcnJheVwiLFxyXG4gICAgICAgICAgICAgICAgYWNjZXB0OiBPYmplY3RVdGlscy5pc1N0cmluZyhwcm9wZXJ0eS5hY2NlcHQpID8gcHJvcGVydHkuYWNjZXB0IDogbnVsbCxcclxuICAgICAgICAgICAgICAgIG1hc2s6IE9iamVjdFV0aWxzLmlzU3RyaW5nKHByb3BlcnR5Lm1hc2spID8gcHJvcGVydHkubWFzayA6IG51bGwsXHJcbiAgICAgICAgICAgICAgICBwYXR0ZXJuOiBPYmplY3RVdGlscy5pc1N0cmluZyhwcm9wZXJ0eS5wYXR0ZXJuKSA/IHByb3BlcnR5LnBhdHRlcm4gOiBudWxsLFxyXG4gICAgICAgICAgICAgICAgc3RlcDogaXNOYU4oc3ViLnN0ZXApID8gKGlzTmFOKHByb3BlcnR5LnN0ZXApID8gMSA6IHByb3BlcnR5LnN0ZXApIDogc3ViLnN0ZXAsXHJcbiAgICAgICAgICAgICAgICBtaW5MZW5ndGg6IGlzTmFOKHN1Yi5taW5MZW5ndGgpID8gMCA6IHN1Yi5taW5MZW5ndGgsXHJcbiAgICAgICAgICAgICAgICBtYXhMZW5ndGg6IGlzTmFOKHN1Yi5tYXhMZW5ndGgpID8gTUFYX0lOUFVUX05VTSA6IHN1Yi5tYXhMZW5ndGgsXHJcbiAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcjogcHJvcGVydHkucGxhY2Vob2xkZXIgfHwgXCJcIlxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICBnZXRGb3JtVGV4dGFyZWFDb25maWcocHJvcGVydHk6IElPcGVuQXBpU2NoZW1hUHJvcGVydHksIHNjaGVtYTogSU9wZW5BcGlTY2hlbWEpOiBEeW5hbWljVGV4dEFyZWFNb2RlbENvbmZpZyB7XHJcbiAgICAgICAgcmV0dXJuIE9iamVjdC5hc3NpZ24oXHJcbiAgICAgICAgICAgIHRoaXMuZ2V0Rm9ybUNvbnRyb2xDb25maWcocHJvcGVydHksIHNjaGVtYSksXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIGNvbHM6IHByb3BlcnR5LmNvbHMgfHwgbnVsbCxcclxuICAgICAgICAgICAgICAgIHJvd3M6IHByb3BlcnR5LnJvd3MgfHwgMTAsXHJcbiAgICAgICAgICAgICAgICB3cmFwOiBwcm9wZXJ0eS53cmFwIHx8IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgYXV0b0NvbXBsZXRlOiBwcm9wZXJ0eS5hdXRvQ29tcGxldGUgfHwgXCJvZmZcIixcclxuICAgICAgICAgICAgICAgIG11bHRpcGxlOiBwcm9wZXJ0eS50eXBlID09IFwiYXJyYXlcIlxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICBnZXRGb3JtU2VsZWN0T3B0aW9ucyhwcm9wZXJ0eTogSU9wZW5BcGlTY2hlbWFQcm9wZXJ0eSwgc2NoZW1hOiBJT3BlbkFwaVNjaGVtYSkge1xyXG4gICAgICAgIGNvbnN0ICRlbnVtID0gcHJvcGVydHkuaXRlbXM/LmVudW0gfHwgcHJvcGVydHkuZW51bTtcclxuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheSgkZW51bSkpIHtcclxuICAgICAgICAgICAgcmV0dXJuIG5ldyBGb3JtU2VsZWN0U3ViamVjdCgoc2VsZWN0TW9kZWwsIGZvcm1Db250cm9sKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBvcHRpb25zID0gJGVudW0ubWFwKHZhbHVlID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBsYWJlbCA9IHByb3BlcnR5LnRyYW5zbGF0YWJsZSA/IGAke3Byb3BlcnR5LmlkfS4ke3ZhbHVlfWAgOiBgJHt2YWx1ZX1gO1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB7dmFsdWUsIGxhYmVsfTtcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZml4U2VsZWN0T3B0aW9ucyhzZWxlY3RNb2RlbCwgZm9ybUNvbnRyb2wsIG9wdGlvbnMpO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGlzU3RyaW5nV2l0aFZhbChwcm9wZXJ0eS5vcHRpb25zUGF0aCkpIHtcclxuICAgICAgICAgICAgcmV0dXJuIG5ldyBGb3JtU2VsZWN0U3ViamVjdChhc3luYyAoc2VsZWN0TW9kZWwsIGNvbnRyb2wsIHJvb3QsIGluZGV4ZXMpID0+IHtcclxuICAgICAgICAgICAgICAgIGxldCBwYXRoID0gcHJvcGVydHkub3B0aW9uc1BhdGggYXMgc3RyaW5nO1xyXG4gICAgICAgICAgICAgICAgbGV0IHRhcmdldCA9IGNvbnRyb2wgYXMgQWJzdHJhY3RDb250cm9sO1xyXG4gICAgICAgICAgICAgICAgbGV0IG1vZGVsOiBEeW5hbWljUGF0aGFibGUgfCBEeW5hbWljRm9ybU1vZGVsID0gc2VsZWN0TW9kZWw7XHJcbiAgICAgICAgICAgICAgICBpZiAocGF0aC5zdGFydHNXaXRoKFwiJHJvb3RcIikpIHtcclxuICAgICAgICAgICAgICAgICAgICBwYXRoID0gcGF0aC5zdWJzdHIoNSk7XHJcbiAgICAgICAgICAgICAgICAgICAgd2hpbGUgKHRhcmdldC5wYXJlbnQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGFyZ2V0ID0gdGFyZ2V0LnBhcmVudDtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgbW9kZWwgPSByb290O1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgd2hpbGUgKHBhdGguc3RhcnRzV2l0aChcIi5cIikpIHtcclxuICAgICAgICAgICAgICAgICAgICBwYXRoID0gcGF0aC5zdWJzdHIoMSk7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRhcmdldC5wYXJlbnQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGFyZ2V0ID0gdGFyZ2V0LnBhcmVudDtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgbW9kZWwgPSAobW9kZWwgYXMgRHluYW1pY1BhdGhhYmxlKS5wYXJlbnQgfHwgcm9vdDtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIE9iamVjdC5rZXlzKGluZGV4ZXMpLmZvckVhY2goa2V5ID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBwYXRoID0gcGF0aC5yZXBsYWNlKGtleSwgaW5kZXhlc1trZXldKTtcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgbW9kZWwgPSB0aGlzLmZpbmRNb2RlbEJ5UGF0aChtb2RlbCwgcGF0aC5zcGxpdChcIi5cIikpO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgbW9kZWxPcHRpb25zID0gbW9kZWwgaW5zdGFuY2VvZiBEeW5hbWljU2VsZWN0TW9kZWxcclxuICAgICAgICAgICAgICAgICAgICA/IGF3YWl0IGZpcnN0VmFsdWVGcm9tKG1vZGVsLm9wdGlvbnMkKSA6XHJcbiAgICAgICAgICAgICAgICAgICAgW107XHJcbiAgICAgICAgICAgICAgICBjb25zdCB2YWx1ZSA9IE9iamVjdFV0aWxzLmdldFZhbHVlKHRhcmdldC52YWx1ZSwgcGF0aCk7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBvcHRpb25zID0gKCFPYmplY3RVdGlscy5pc0FycmF5KHZhbHVlKSA/IFtdIDogdmFsdWUpLm1hcCh2YWx1ZSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgbW9kZWxPcHRpb24gPSBtb2RlbE9wdGlvbnMuZmluZCh0ID0+IHQudmFsdWUgPT0gdmFsdWUpO1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB7dmFsdWUsIGxhYmVsOiBtb2RlbE9wdGlvbj8ubGFiZWwgfHwgdmFsdWV9O1xyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5maXhTZWxlY3RPcHRpb25zKHNlbGVjdE1vZGVsLCBjb250cm9sLCBvcHRpb25zKTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBuZXcgRm9ybVNlbGVjdFN1YmplY3QoYXN5bmMgKHNlbGVjdE1vZGVsLCBjb250cm9sKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuYXBpLmNhY2hlW3Byb3BlcnR5LmVuZHBvaW50XSA9IHRoaXMuYXBpLmNhY2hlW3Byb3BlcnR5LmVuZHBvaW50XSB8fCB0aGlzLmFwaS5saXN0KHByb3BlcnR5LmVuZHBvaW50LCB0aGlzLmFwaS5tYWtlTGlzdFBhcmFtcygxLCAtMSkpLnRoZW4ocmVzdWx0ID0+IHtcclxuICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQuaXRlbXMubWFwKGkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC4uLmksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBpLmlkIHx8IGkuX2lkLCBsYWJlbDogaVtwcm9wZXJ0eS5sYWJlbEZpZWxkXSB8fCBpLmxhYmVsIHx8IGkuaWQgfHwgaS5faWRcclxuICAgICAgICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICBjb25zdCBvcHRpb25zID0gKGF3YWl0IHRoaXMuYXBpLmNhY2hlW3Byb3BlcnR5LmVuZHBvaW50XSkubWFwKHQgPT4gT2JqZWN0LmFzc2lnbih7fSwgdCkpO1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5maXhTZWxlY3RPcHRpb25zKHNlbGVjdE1vZGVsLCBjb250cm9sLCBvcHRpb25zKTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBnZXRGb3JtU2VsZWN0Q29uZmlnKHByb3BlcnR5OiBJT3BlbkFwaVNjaGVtYVByb3BlcnR5LCBzY2hlbWE6IElPcGVuQXBpU2NoZW1hKTogRHluYW1pY1NlbGVjdE1vZGVsQ29uZmlnPGFueT4ge1xyXG4gICAgICAgIHJldHVybiBPYmplY3QuYXNzaWduKFxyXG4gICAgICAgICAgICB0aGlzLmdldEZvcm1Db250cm9sQ29uZmlnKHByb3BlcnR5LCBzY2hlbWEpLFxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICBvcHRpb25zOiB0aGlzLmdldEZvcm1TZWxlY3RPcHRpb25zKHByb3BlcnR5LCBzY2hlbWEpLFxyXG4gICAgICAgICAgICAgICAgbXVsdGlwbGU6IHByb3BlcnR5LnR5cGUgPT0gXCJhcnJheVwiLFxyXG4gICAgICAgICAgICAgICAgZ3JvdXBCeTogcHJvcGVydHkuZ3JvdXBCeSxcclxuICAgICAgICAgICAgICAgIGlubGluZTogcHJvcGVydHkuaW5saW5lXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIGdldEZvcm1VcGxvYWRDb25maWcocHJvcGVydHk6IElPcGVuQXBpU2NoZW1hUHJvcGVydHksIHNjaGVtYTogSU9wZW5BcGlTY2hlbWEpOiBEeW5hbWljRmlsZVVwbG9hZE1vZGVsQ29uZmlnIHtcclxuICAgICAgICBjb25zdCB1cmwgPSB0aGlzLmFwaS51cmwocHJvcGVydHkudXJsIHx8IFwiYXNzZXRzXCIpO1xyXG4gICAgICAgIGNvbnN0IHthY2NlcHQsIGF1dG9VcGxvYWQsIG1heFNpemUsIG1pblNpemUsIHJlbW92ZVVybCwgc2hvd0ZpbGVMaXN0fSA9IHByb3BlcnR5O1xyXG4gICAgICAgIHJldHVybiBPYmplY3QuYXNzaWduKHRoaXMuZ2V0Rm9ybUNvbnRyb2xDb25maWcocHJvcGVydHksIHNjaGVtYSksIHtcclxuICAgICAgICAgICAgdXJsLFxyXG4gICAgICAgICAgICBhY2NlcHQsXHJcbiAgICAgICAgICAgIGF1dG9VcGxvYWQsXHJcbiAgICAgICAgICAgIG1heFNpemUsXHJcbiAgICAgICAgICAgIG1pblNpemUsXHJcbiAgICAgICAgICAgIHJlbW92ZVVybCxcclxuICAgICAgICAgICAgc2hvd0ZpbGVMaXN0XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0Rm9ybUNoZWNrYm94Q29uZmlnKHByb3BlcnR5OiBJT3BlbkFwaVNjaGVtYVByb3BlcnR5LCBzY2hlbWE6IElPcGVuQXBpU2NoZW1hKTogRHluYW1pY0NoZWNrYm94TW9kZWxDb25maWcge1xyXG4gICAgICAgIHJldHVybiBPYmplY3QuYXNzaWduKFxyXG4gICAgICAgICAgICB0aGlzLmdldEZvcm1Db250cm9sQ29uZmlnKHByb3BlcnR5LCBzY2hlbWEpLFxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICBpbmRldGVybWluYXRlOiBwcm9wZXJ0eS5pbmRldGVybWluYXRlIHx8IGZhbHNlXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIGNsb25lRm9ybUFycmF5R3JvdXAoaW5kZXg6IG51bWJlciwgZm9ybUFycmF5OiBGb3JtQXJyYXksIGZvcm1BcnJheU1vZGVsOiBEeW5hbWljRm9ybUFycmF5TW9kZWwpIHtcclxuICAgICAgICB0aGlzLmluc2VydEZvcm1BcnJheUdyb3VwKGluZGV4LCBmb3JtQXJyYXksIGZvcm1BcnJheU1vZGVsKTtcclxuICAgICAgICB0aGlzLnBhdGNoR3JvdXAoZm9ybUFycmF5LmF0KGluZGV4ICsgMSkudmFsdWUsIGZvcm1BcnJheU1vZGVsLmdyb3Vwc1tpbmRleF0uZ3JvdXAsIGZvcm1BcnJheS5hdChpbmRleCkgYXMgRm9ybUdyb3VwKTtcclxuICAgICAgICBmb3JtQXJyYXlNb2RlbC5maWx0ZXJHcm91cHMoKTtcclxuICAgIH1cclxuXHJcbiAgICBwcm90ZWN0ZWQgYXN5bmMgZml4U2VsZWN0T3B0aW9ucyhtb2RlbDogRHluYW1pY1NlbGVjdE1vZGVsPGFueT4sIGNvbnRyb2w6IEZvcm1Db250cm9sLCBvcHRpb25zOiBEeW5hbWljRm9ybU9wdGlvbkNvbmZpZzxhbnk+W10pOiBQcm9taXNlPER5bmFtaWNGb3JtT3B0aW9uQ29uZmlnPGFueT5bXT4ge1xyXG4gICAgICAgIGlmICghb3B0aW9ucykgcmV0dXJuIFtdO1xyXG4gICAgICAgIGZvciAoY29uc3Qgb3B0aW9uIG9mIG9wdGlvbnMpIHtcclxuICAgICAgICAgICAgb3B0aW9uLmNsYXNzZXMgPSBbb3B0aW9uLmNsYXNzZXMsIG1vZGVsLmdldENsYXNzZXMob3B0aW9uLCBtb2RlbCwgY29udHJvbCwgdGhpcy5pbmplY3RvcildLmZpbHRlcihpc1N0cmluZ1dpdGhWYWwpLmpvaW4oXCIgXCIpO1xyXG4gICAgICAgICAgICBvcHRpb24ubGFiZWwgPSBhd2FpdCB0aGlzLmxhbmd1YWdlLmdldFRyYW5zbGF0aW9uKG9wdGlvbi5sYWJlbCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBvcHRpb25zO1xyXG4gICAgfVxyXG5cclxuICAgIHByb3RlY3RlZCBnZXRWYWxpZGF0b3JzKHByb3BlcnR5OiBJT3BlbkFwaVNjaGVtYVByb3BlcnR5LCBzY2hlbWE6IElPcGVuQXBpU2NoZW1hKTogRHluYW1pY1ZhbGlkYXRvcnNDb25maWcge1xyXG4gICAgICAgIGNvbnN0IHZhbGlkYXRvcnM6IER5bmFtaWNWYWxpZGF0b3JzQ29uZmlnID0ge307XHJcbiAgICAgICAgaWYgKE9iamVjdFV0aWxzLmlzQXJyYXkoc2NoZW1hLnJlcXVpcmVkKSAmJiBzY2hlbWEucmVxdWlyZWQuaW5kZXhPZihwcm9wZXJ0eS5pZCkgPj0gMCkge1xyXG4gICAgICAgICAgICB2YWxpZGF0b3JzLnJlcXVpcmVkID0gbnVsbDtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5hZGRQcm9wZXJ0eVZhbGlkYXRvcnModmFsaWRhdG9ycywgcHJvcGVydHkpO1xyXG4gICAgICAgIHRoaXMuYWRkSXRlbXNWYWxpZGF0b3JzKHZhbGlkYXRvcnMsIHByb3BlcnR5Lml0ZW1zKTtcclxuICAgICAgICByZXR1cm4gdmFsaWRhdG9ycztcclxuICAgIH1cclxuXHJcbiAgICBwcm90ZWN0ZWQgYWRkUHJvcGVydHlWYWxpZGF0b3JzKHZhbGlkYXRvcnM6IER5bmFtaWNWYWxpZGF0b3JzQ29uZmlnLCBwcm9wZXJ0eTogSU9wZW5BcGlTY2hlbWFQcm9wZXJ0eSk6IHZvaWQge1xyXG4gICAgICAgIGlmICghcHJvcGVydHkpIHJldHVybjtcclxuICAgICAgICBpZiAoIWlzTmFOKHByb3BlcnR5Lm1pbkxlbmd0aCkpIHtcclxuICAgICAgICAgICAgdmFsaWRhdG9ycy5taW5MZW5ndGggPSBwcm9wZXJ0eS5taW5MZW5ndGg7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICghaXNOYU4ocHJvcGVydHkubWF4TGVuZ3RoKSkge1xyXG4gICAgICAgICAgICB2YWxpZGF0b3JzLm1heExlbmd0aCA9IHByb3BlcnR5Lm1heExlbmd0aDtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKCFpc05hTihwcm9wZXJ0eS5taW5pbXVtKSkge1xyXG4gICAgICAgICAgICB2YWxpZGF0b3JzLm1pbiA9IHByb3BlcnR5Lm1pbmltdW07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICghaXNOYU4ocHJvcGVydHkubWF4aW11bSkpIHtcclxuICAgICAgICAgICAgdmFsaWRhdG9ycy5tYXggPSBwcm9wZXJ0eS5tYXhpbXVtO1xyXG4gICAgICAgIH1cclxuICAgICAgICBzd2l0Y2ggKHByb3BlcnR5LmZvcm1hdCkge1xyXG4gICAgICAgICAgICBjYXNlIFwiZW1haWxcIjpcclxuICAgICAgICAgICAgICAgIHZhbGlkYXRvcnMuZW1haWwgPSBudWxsO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHByb3RlY3RlZCBhZGRJdGVtc1ZhbGlkYXRvcnModmFsaWRhdG9yczogRHluYW1pY1ZhbGlkYXRvcnNDb25maWcsIGl0ZW1zOiBJT3BlbkFwaVNjaGVtYVByb3BlcnR5KTogdm9pZCB7XHJcbiAgICAgICAgaWYgKCFpdGVtcykgcmV0dXJuO1xyXG4gICAgICAgIGlmICghaXNOYU4oaXRlbXMubWluTGVuZ3RoKSkge1xyXG4gICAgICAgICAgICB2YWxpZGF0b3JzLml0ZW1zTWluTGVuZ3RoID0gaXRlbXMubWluTGVuZ3RoO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoIWlzTmFOKGl0ZW1zLm1heExlbmd0aCkpIHtcclxuICAgICAgICAgICAgdmFsaWRhdG9ycy5pdGVtc01heExlbmd0aCA9IGl0ZW1zLm1heExlbmd0aDtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKCFpc05hTihpdGVtcy5taW5pbXVtKSkge1xyXG4gICAgICAgICAgICB2YWxpZGF0b3JzLml0ZW1zTWluVmFsdWUgPSBpdGVtcy5taW5pbXVtO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoIWlzTmFOKGl0ZW1zLm1heGltdW0pKSB7XHJcbiAgICAgICAgICAgIHZhbGlkYXRvcnMuaXRlbXNNYXhWYWx1ZSA9IGl0ZW1zLm1heGltdW07XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59XHJcbiJdfQ==
526
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHluYW1pYy1mb3JtLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvbmd4LWR5bmFtaWMtZm9ybS9zZXJ2aWNlcy9keW5hbWljLWZvcm0uc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUMsTUFBTSxFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFDM0QsT0FBTyxFQUFrQixTQUFTLEVBQWUsU0FBUyxFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFDbEYsT0FBTyxFQUFDLGNBQWMsRUFBRSxPQUFPLEVBQUMsTUFBTSxNQUFNLENBQUM7QUFDN0MsT0FBTyxFQUNILG9CQUFvQixFQUVwQixzQkFBc0IsRUFFdEIsc0JBQXNCLEVBS3RCLHFCQUFxQixFQUdyQixrQkFBa0IsSUFBSSxJQUFJLEVBRTFCLDRCQUE0QixFQUU1QixpQkFBaUIsRUFHakIsb0JBQW9CLEVBR3ZCLE1BQU0sd0JBQXdCLENBQUM7QUFDaEMsT0FBTyxFQU1ILFdBQVcsRUFDWCxjQUFjLEVBQ2QsV0FBVyxFQUNkLE1BQU0sa0JBQWtCLENBQUM7QUFJMUIsT0FBTyxFQUFDLGNBQWMsRUFBRSxRQUFRLEVBQUUsZUFBZSxFQUFFLGFBQWEsRUFBRSxlQUFlLEVBQUUsYUFBYSxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBQ3ZILE9BQU8sRUFBQyxpQkFBaUIsRUFBQyxNQUFNLDhCQUE4QixDQUFDO0FBQy9ELE9BQU8sRUFBQyxXQUFXLEVBQUMsTUFBTSx1QkFBdUIsQ0FBQztBQUNsRCxPQUFPLEVBQUMsa0JBQWtCLEVBQTJCLE1BQU0sK0JBQStCLENBQUM7QUFDM0YsT0FBTyxFQUNILDBCQUEwQixFQUMxQixxQkFBcUIsRUFFeEIsTUFBTSxtQ0FBbUMsQ0FBQztBQUMzQyxPQUFPLEVBQTBCLGtCQUFrQixFQUEyQixNQUFNLCtCQUErQixDQUFDOzs7O0FBSXBILE1BQU0sT0FBTyxrQkFBbUIsU0FBUSxJQUFJO0lBWXhDLFlBQVksRUFBK0IsRUFDL0IsRUFBZ0MsRUFDQyxPQUF1QixFQUM3QixRQUFrQjtRQUNyRCxLQUFLLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBRjJCLFlBQU8sR0FBUCxPQUFPLENBQWdCO1FBQzdCLGFBQVEsR0FBUixRQUFRLENBQVU7SUFFekQsQ0FBQztJQWZELElBQUksR0FBRztRQUNILE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUM7SUFDNUIsQ0FBQztJQUVELElBQUksUUFBUTtRQUNSLE9BQU8sSUFBSSxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUM7SUFDN0IsQ0FBQztJQVdELFVBQVUsQ0FBQyxLQUFVLEVBQUUsU0FBMkIsRUFBRSxTQUFvQjtRQUNwRSxJQUFJLENBQUMsbUJBQW1CLENBQUMsS0FBSyxFQUFFLFNBQVMsRUFBRSxTQUFTLENBQUMsQ0FBQztRQUN0RCxTQUFTLENBQUMsVUFBVSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztRQUM5QyxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7SUFDekIsQ0FBQztJQUVELFNBQVMsQ0FBQyxLQUFVLEVBQUUsU0FBbUM7UUFDckQsSUFBSSxDQUFDLG1CQUFtQixDQUFDLEtBQUssRUFBRSxTQUFTLENBQUMsS0FBSyxFQUFFLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNsRSxTQUFTLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNsQyxJQUFJLENBQUMsYUFBYSxDQUFDLFNBQVMsQ0FBQyxDQUFDO0lBQ2xDLENBQUM7SUFFRCxTQUFTLENBQUMsU0FBMkIsRUFBRSxTQUFvQjtRQUN2RCxPQUFPLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxTQUFTLEVBQUUsU0FBUyxDQUFDLENBQUM7SUFDekQsQ0FBQztJQUVELGFBQWEsQ0FBQyxTQUEyQixFQUFFLFNBQW9CO1FBQzNELElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxTQUFTLEVBQUUsU0FBUyxFQUFFLFNBQVMsQ0FBQyxDQUFDO0lBQ2pFLENBQUM7SUFFRCxVQUFVLENBQUMsSUFBOEI7UUFDckMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNwQyxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQzdCLENBQUM7SUFFUyxtQkFBbUIsQ0FBQyxLQUFVLEVBQUUsU0FBMkIsRUFBRSxTQUFvQjtRQUN2RixJQUFJLENBQUMsS0FBSztZQUFFLE9BQU87UUFDbkIsTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLEVBQUU7WUFDN0IsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxHQUFHLEVBQUUsU0FBUyxDQUFDLENBQUM7WUFDcEQsTUFBTSxRQUFRLEdBQUcsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQzVCLElBQUksQ0FBQyxRQUFRO2dCQUFFLE9BQU87WUFDdEIsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixDQUFDLFFBQVEsRUFBRSxTQUFTLENBQUMsQ0FBQztZQUNoRSxJQUFJLFFBQVEsWUFBWSxrQkFBa0IsSUFBSSxXQUFXLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxFQUFFO2dCQUMxRSxLQUFLLENBQUMsR0FBRyxDQUFDLEdBQUcsUUFBUSxDQUFDLEVBQUUsSUFBSSxRQUFRLENBQUMsR0FBRyxJQUFJLFFBQVEsQ0FBQztnQkFDckQsT0FBTzthQUNWO1lBQ0QsSUFBSSxRQUFRLFlBQVksc0JBQXNCLEVBQUU7Z0JBQzVDLEtBQUssQ0FBQyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLFFBQVEsQ0FBQyxDQUFDO2dCQUMxQyxPQUFPO2FBQ1Y7WUFDRCxJQUFJLFFBQVEsWUFBWSxxQkFBcUIsRUFBRTtnQkFDM0MsTUFBTSxNQUFNLEdBQUcsS0FBSyxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUM3RCxNQUFNLFFBQVEsR0FBRyxVQUF1QixDQUFDO2dCQUN6QyxPQUFPLFFBQVEsQ0FBQyxJQUFJLEdBQUcsTUFBTSxFQUFFO29CQUMzQixJQUFJLENBQUMsb0JBQW9CLENBQUMsQ0FBQyxFQUFFLFFBQVEsRUFBRSxRQUFRLENBQUMsQ0FBQztpQkFDcEQ7Z0JBQ0QsT0FBTyxRQUFRLENBQUMsSUFBSSxHQUFHLE1BQU0sRUFBRTtvQkFDM0IsSUFBSSxDQUFDLG9CQUFvQixDQUFDLFFBQVEsQ0FBQyxJQUFJLEVBQUUsUUFBUSxFQUFFLFFBQWlDLENBQUMsQ0FBQztpQkFDekY7Z0JBQ0QsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtvQkFDN0IsTUFBTSxTQUFTLEdBQUcsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztvQkFDbEMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsRUFBRSxTQUFTLENBQUMsS0FBSyxFQUFFLFFBQVEsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFjLENBQUMsQ0FBQztpQkFDdkY7Z0JBQ0QsT0FBTzthQUNWO1lBQ0QsSUFBSSxRQUFRLFlBQVkscUJBQXFCLEVBQUU7Z0JBQzNDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxRQUFRLEVBQUUsUUFBUSxDQUFDLEtBQUssRUFBRSxVQUF1QixDQUFDLENBQUM7YUFDL0U7UUFDTCxDQUFDLENBQUMsQ0FBQztJQUNQLENBQUM7SUFFUyxLQUFLLENBQUMsa0JBQWtCLENBQUMsU0FBMkIsRUFBRSxTQUFvQjtRQUNoRixNQUFNLE1BQU0sR0FBRyxFQUFFLENBQUM7UUFDbEIsSUFBSSxDQUFDLFNBQVMsSUFBSSxDQUFDLFNBQVMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLO1lBQUUsT0FBTyxNQUFNLENBQUM7UUFDaEUsS0FBSyxNQUFNLENBQUMsSUFBSSxTQUFTLEVBQUU7WUFDdkIsTUFBTSxRQUFRLEdBQUcsU0FBUyxDQUFDLENBQUMsQ0FBc0MsQ0FBQztZQUNuRSxNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsa0JBQWtCLENBQUMsUUFBUSxFQUFFLFNBQVMsQ0FBQyxDQUFDO1lBQ2hFLE1BQU0sVUFBVSxHQUFHLFFBQVEsQ0FBQyxVQUFVLEVBQUUsVUFBbUMsQ0FBQztZQUM1RSxJQUFJLFdBQVcsQ0FBQyxVQUFVLENBQUMsVUFBVSxDQUFDLEVBQUU7Z0JBQ3BDLE1BQU0sQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLEdBQUcsTUFBTSxVQUFVLENBQUMsUUFBUSxFQUFFLFVBQVUsQ0FBQyxDQUFDO2dCQUM3RCxTQUFTO2FBQ1o7WUFDRCxJQUFJLFFBQVEsQ0FBQyxNQUFNLElBQUksQ0FBQyxRQUFRLENBQUMsVUFBVSxFQUFFLFNBQVM7Z0JBQUUsU0FBUztZQUNqRSxJQUFJLFFBQVEsWUFBWSxxQkFBcUIsRUFBRTtnQkFDM0MsTUFBTSxNQUFNLEdBQUcsS0FBSyxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQzdFLE1BQU0sUUFBUSxHQUFHLFVBQXVCLENBQUM7Z0JBQ3pDLE1BQU0sUUFBUSxHQUFHLEVBQUUsQ0FBQztnQkFDcEIsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtvQkFDN0IsTUFBTSxTQUFTLEdBQUcsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztvQkFDbEMsUUFBUSxDQUFDLElBQUksQ0FDVCxNQUFNLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxTQUFTLENBQUMsS0FBSyxFQUFFLFFBQVEsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFjLENBQUMsQ0FDOUUsQ0FBQztpQkFDTDtnQkFDRCxNQUFNLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxHQUFHLFFBQVEsQ0FBQztnQkFDL0IsU0FBUzthQUNaO1lBQ0QsSUFBSSxRQUFRLFlBQVkscUJBQXFCLEVBQUU7Z0JBQzNDLE1BQU0sQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLEdBQUcsTUFBTSxJQUFJLENBQUMsa0JBQWtCLENBQUMsUUFBUSxDQUFDLEtBQUssRUFBRSxVQUF1QixDQUFDLENBQUM7Z0JBQzdGLFNBQVM7YUFDWjtZQUNELElBQUksUUFBUSxZQUFZLGlCQUFpQixJQUFJLENBQUMsV0FBVyxDQUFDLGlCQUFpQixDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsRUFBRTtnQkFDM0YsTUFBTSxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsR0FBRyxRQUFRLENBQUMsU0FBUyxJQUFJLFFBQVE7b0JBQ2hELENBQUMsQ0FBQyxVQUFVLENBQUMsQ0FBQyxHQUFHLFVBQVUsQ0FBQyxLQUFLLEVBQUUsSUFBSSxHQUFHLENBQUMsQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUFFLEdBQUcsQ0FBQyxDQUFDLElBQUksSUFBSTtvQkFDeEUsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUM7Z0JBQ3ZCLFNBQVM7YUFDWjtZQUNELE1BQU0sQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLEdBQUcsVUFBVSxDQUFDLEtBQUssQ0FBQztTQUMxQztRQUNELE9BQU8sTUFBTSxDQUFDO0lBQ2xCLENBQUM7SUFFUyxzQkFBc0IsQ0FBQyxTQUEyQixFQUFFLFNBQW9CLEVBQUUsSUFBc0I7UUFDdEcsSUFBSSxDQUFDLFNBQVMsSUFBSSxDQUFDLFNBQVM7WUFBRSxPQUFPO1FBQ3JDLEtBQUssTUFBTSxDQUFDLElBQUksU0FBUyxFQUFFO1lBQ3ZCLE1BQU0sUUFBUSxHQUFHLFNBQVMsQ0FBQyxDQUFDLENBQXNDLENBQUM7WUFDbkUsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixDQUFDLFFBQVEsRUFBRSxTQUFTLENBQUMsQ0FBQztZQUNoRSxJQUFJLFFBQVEsWUFBWSxxQkFBcUIsRUFBRTtnQkFDM0MsTUFBTSxNQUFNLEdBQUcsS0FBSyxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQzdFLE1BQU0sUUFBUSxHQUFHLFVBQXVCLENBQUM7Z0JBQ3pDLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7b0JBQzdCLE1BQU0sU0FBUyxHQUFHLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7b0JBQ2xDLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxTQUFTLENBQUMsS0FBSyxFQUFFLFFBQVEsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFjLEVBQUUsSUFBSSxDQUFDLENBQUM7aUJBQ25GO2dCQUNELFNBQVM7YUFDWjtZQUNELElBQUksUUFBUSxZQUFZLHFCQUFxQixFQUFFO2dCQUMzQyxJQUFJLENBQUMsc0JBQXNCLENBQUMsUUFBUSxDQUFDLEtBQUssRUFBRSxVQUF1QixFQUFFLElBQUksQ0FBQyxDQUFDO2dCQUMzRSxTQUFTO2FBQ1o7WUFDRCxJQUFJLENBQUMsbUJBQW1CLENBQUMsUUFBUSxFQUFFLFVBQXlCLEVBQUUsSUFBSSxDQUFDLENBQUM7U0FDdkU7SUFDTCxDQUFDO0lBRVMsbUJBQW1CLENBQUMsZ0JBQXlDLEVBQUUsV0FBd0IsRUFBRSxJQUFzQjtRQUNySCxJQUFJLGdCQUFnQixZQUFZLGtCQUFrQixFQUFFO1lBQ2hELElBQUksT0FBTyxHQUFHLGdCQUFnQixDQUFDLFFBQVEsQ0FBQztZQUN4QyxJQUFJLE9BQU8sWUFBWSxXQUFXLEVBQUU7Z0JBQ2hDLE9BQU8sQ0FBQyxNQUFNLENBQUMsZ0JBQWdCLEVBQUUsV0FBVyxFQUFFLElBQUksQ0FBQyxDQUFDO2dCQUNwRCxPQUFPO2FBQ1Y7WUFDRCxPQUFPLE9BQU8sWUFBWSxPQUFPLElBQUksT0FBTyxDQUFDLE1BQU0sRUFBRTtnQkFDakQsT0FBTyxHQUFHLE9BQU8sQ0FBQyxNQUFNLENBQUM7Z0JBQ3pCLElBQUksT0FBTyxZQUFZLFdBQVcsRUFBRTtvQkFDaEMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxnQkFBZ0IsRUFBRSxXQUFXLEVBQUUsSUFBSSxDQUFDLENBQUM7aUJBQ3ZEO2FBQ0o7U0FDSjtJQUNMLENBQUM7SUFFUyxrQkFBa0IsQ0FBQyxTQUFvQjtRQUM3QyxJQUFJLENBQUMsU0FBUztZQUFFLE9BQU87UUFDdkIsU0FBUyxDQUFDLGFBQWEsQ0FBQyxFQUFDLFFBQVEsRUFBRSxJQUFJLEVBQUMsQ0FBQyxDQUFDO1FBQzFDLE1BQU0sUUFBUSxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUNuRixJQUFJLENBQUMscUJBQXFCLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDekMsQ0FBQztJQUVTLHFCQUFxQixDQUFDLFFBQTJCO1FBQ3ZELFFBQVEsQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLEVBQUU7WUFDdkIsSUFBSSxPQUFPLFlBQVksU0FBUyxFQUFFO2dCQUM5QixJQUFJLENBQUMsa0JBQWtCLENBQUMsT0FBTyxDQUFDLENBQUM7Z0JBQ2pDLE9BQU87YUFDVjtZQUNELE9BQU8sQ0FBQyxhQUFhLENBQUMsRUFBQyxRQUFRLEVBQUUsSUFBSSxFQUFDLENBQUMsQ0FBQztZQUN4QyxJQUFJLE9BQU8sWUFBWSxTQUFTLEVBQUU7Z0JBQzlCLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLENBQUM7YUFDaEQ7UUFDTCxDQUFDLENBQUMsQ0FBQztJQUNQLENBQUM7SUFFUyxhQUFhLENBQUMsS0FBVTtRQUM5QixJQUFJLFdBQVcsQ0FBQyxpQkFBaUIsQ0FBQyxLQUFLLENBQUM7WUFBRSxPQUFPLElBQUksQ0FBQztRQUN0RCxNQUFNLElBQUksR0FBRyxXQUFXLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQztZQUNsQyxDQUFDLENBQUMsS0FBSztZQUNQLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUN0QixPQUFPLEtBQUssQ0FBQyxJQUFXLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO0lBQ2xELENBQUM7SUFFRCxLQUFLLENBQUMscUJBQXFCLENBQUMsSUFBWSxFQUFFLGNBQW9DO1FBQzFFLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxHQUFHLEVBQUUsQ0FBQztRQUNwQixJQUFJLENBQUMsT0FBTyxHQUFHLE1BQU0sSUFBSSxDQUFDLE9BQU8sQ0FBQyxVQUFVLEVBQUUsQ0FBQztRQUMvQyxNQUFNLGVBQWUsR0FBNEIsQ0FDN0MsUUFBZ0MsRUFBRSxNQUFzQixFQUN4RCxTQUFvQixFQUFFLE1BQXFDLEVBQUUsRUFBRTtZQUMvRCxNQUFNLEtBQUssR0FBRyxJQUFJLFNBQVMsQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUNwQyxJQUFJLEtBQUssWUFBWSw0QkFBNEIsRUFBRTtnQkFDL0MsS0FBSyxDQUFDLEtBQUssR0FBRyxDQUFDLEtBQUssWUFBWSxzQkFBc0IsQ0FBQztvQkFDbkQsQ0FBQyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDO2FBQ2pFO1lBQ0QsSUFBSSxDQUFDLFdBQVcsQ0FBQyxVQUFVLENBQUMsY0FBYyxDQUFDO2dCQUFFLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUM1RCxNQUFNLEdBQUcsR0FBRyxjQUFjLENBQUMsUUFBUSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztZQUMzRSxPQUFPLEtBQUssQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUM1QyxDQUFDLENBQUM7UUFDRixPQUFPLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxFQUFFLGVBQWUsQ0FBQyxDQUFDO0lBQzlFLENBQUM7SUFFUyx3QkFBd0IsQ0FBQyxNQUFzQixFQUFFLGVBQXdDO1FBQy9GLElBQUksQ0FBQyxNQUFNO1lBQ1AsT0FBTyxFQUFFLENBQUM7UUFDZCxNQUFNLElBQUksR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxVQUFVLElBQUksRUFBRSxDQUFDLENBQUM7UUFDbEQsTUFBTSxRQUFRLEdBQXFCLEVBQUUsQ0FBQztRQUN0QyxLQUFLLE1BQU0sQ0FBQyxJQUFJLElBQUksRUFBRTtZQUNsQixNQUFNLFFBQVEsR0FBRyxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ3RDLFFBQVEsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsb0JBQW9CLENBQUMsUUFBUSxFQUFFLE1BQU0sRUFBRSxlQUFlLENBQUMsQ0FBQyxDQUFDO1NBQ2xGO1FBQ0QsT0FBTyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsSUFBSSxLQUFLLENBQUMsQ0FBQyxDQUFDO0lBQzVDLENBQUM7SUFFUyxxQkFBcUIsQ0FBQyxRQUFnQztRQUM1RCxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU07WUFBRSxPQUFPLEtBQUssQ0FBQztRQUNuQyxPQUFPLGNBQWMsQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxRQUFRLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUM5RixDQUFDO0lBRVMsb0JBQW9CLENBQUMsUUFBZ0MsRUFBRSxNQUFzQixFQUFFLGVBQXdDO1FBQzdILE1BQU0sS0FBSyxHQUFHLFFBQVEsQ0FBQyxLQUFLLEVBQUUsSUFBSSxJQUFJLFFBQVEsQ0FBQyxJQUFJLENBQUM7UUFDcEQsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxJQUFJLGVBQWUsQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFDLElBQUksZUFBZSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsRUFBRTtZQUNyRyxPQUFPLGVBQWUsQ0FBQyxRQUFRLEVBQUUsTUFBTSxFQUFFLGtCQUFrQixFQUFFLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxRQUFRLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQztTQUM1RztRQUNELFFBQVEsUUFBUSxDQUFDLElBQUksRUFBRTtZQUNuQixLQUFLLFFBQVEsQ0FBQztZQUNkLEtBQUssUUFBUSxDQUFDO1lBQ2QsS0FBSyxTQUFTLENBQUM7WUFDZixLQUFLLFVBQVU7Z0JBQ1gsSUFBSSxJQUFJLENBQUMscUJBQXFCLENBQUMsUUFBUSxDQUFDLEVBQUU7b0JBQ3RDLE9BQU8sZUFBZSxDQUFDLFFBQVEsRUFBRSxNQUFNLEVBQUUsa0JBQWtCLEVBQUUsSUFBSSxDQUFDLG1CQUFtQixDQUFDLFFBQVEsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDO2lCQUM1RztnQkFDRCxJQUFJLFFBQVEsQ0FBQyxNQUFNLElBQUksVUFBVSxFQUFFO29CQUMvQixPQUFPLGVBQWUsQ0FBQyxRQUFRLEVBQUUsTUFBTSxFQUFFLG9CQUFvQixFQUFFLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxRQUFRLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQztpQkFDaEg7Z0JBQ0QsSUFBSSxRQUFRLENBQUMsTUFBTSxJQUFJLE1BQU0sRUFBRTtvQkFDM0IsT0FBTyxlQUFlLENBQUMsUUFBUSxFQUFFLE1BQU0sRUFBRSxzQkFBc0IsRUFBRSxJQUFJLENBQUMsdUJBQXVCLENBQUMsUUFBUSxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUM7aUJBQ3BIO2dCQUNELE9BQU8sZUFBZSxDQUFDLFFBQVEsRUFBRSxNQUFNLEVBQUUsaUJBQWlCLEVBQUUsSUFBSSxDQUFDLGtCQUFrQixDQUFDLFFBQVEsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDO1lBQzNHLEtBQUssUUFBUTtnQkFDVCxPQUFPLGVBQWUsQ0FBQyxRQUFRLEVBQUUsTUFBTSxFQUFFLGtCQUFrQixFQUFFLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxRQUFRLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQztZQUM3RyxLQUFLLFNBQVM7Z0JBQ1YsT0FBTyxlQUFlLENBQUMsUUFBUSxFQUFFLE1BQU0sRUFBRSxvQkFBb0IsRUFBRSxJQUFJLENBQUMscUJBQXFCLENBQUMsUUFBUSxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUM7WUFDakgsS0FBSyxPQUFPO2dCQUNSLElBQUksUUFBUSxDQUFDLFFBQVEsQ0FBQyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7b0JBQy9CLE9BQU8sZUFBZSxDQUFDLFFBQVEsRUFBRSxNQUFNLEVBQUUscUJBQXFCLEVBQUUsSUFBSSxDQUFDLGtCQUFrQixDQUFDLFFBQVEsRUFBRSxNQUFNLEVBQUUsZUFBZSxDQUFDLENBQUMsQ0FBQztpQkFDL0g7cUJBQU07b0JBQ0gsT0FBTyxlQUFlLENBQUMsUUFBUSxFQUFFLE1BQU0sRUFBRSxpQkFBaUIsRUFBRSxJQUFJLENBQUMsa0JBQWtCLENBQUMsUUFBUSxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUM7aUJBQzFHO1lBQ0wsS0FBSyxNQUFNO2dCQUNQLE9BQU8sZUFBZSxDQUFDLFFBQVEsRUFBRSxNQUFNLEVBQUUsc0JBQXNCLEVBQUUsSUFBSSxDQUFDLG1CQUFtQixDQUFDLFFBQVEsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDO1NBQ3BIO1FBQ0QsSUFBSSxRQUFRLENBQUMsUUFBUSxDQUFDLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTtZQUMvQixPQUFPLGVBQWUsQ0FBQyxRQUFRLEVBQUUsTUFBTSxFQUFFLHFCQUFxQixFQUFFLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxRQUFRLEVBQUUsTUFBTSxFQUFFLGVBQWUsQ0FBQyxDQUFDLENBQUM7U0FDL0g7UUFDRCxPQUFPLEVBQUUsQ0FBQztJQUNkLENBQUM7SUFFRCxlQUFlLENBQUMsTUFBMEMsRUFBRSxJQUFjO1FBQ3RFLElBQUksSUFBSSxDQUFDLE1BQU0sSUFBSSxDQUFDO1lBQUUsT0FBTyxNQUF5QixDQUFDO1FBQ3ZELE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxLQUFLLEVBQVMsQ0FBQztRQUNqQyxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLEVBQUU7WUFDdkIsT0FBTyxJQUFJLENBQUMsZUFBZSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLElBQUksQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDO1NBQ3JFO1FBQ0QsSUFBSSxNQUFNLFlBQVkscUJBQXFCLElBQUksTUFBTSxZQUFZLDBCQUEwQixFQUFFO1lBQ3pGLE9BQU8sSUFBSSxDQUFDLGVBQWUsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksSUFBSSxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUM7U0FDM0U7UUFDRCxJQUFJLE1BQU0sWUFBWSxxQkFBcUIsRUFBRTtZQUN6QyxPQUFPLElBQUksQ0FBQyxlQUFlLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsS0FBSyxJQUFJLElBQUksQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDO1NBQy9FO1FBQ0QsT0FBTyxNQUFNLENBQUM7SUFDbEIsQ0FBQztJQUVELG9CQUFvQixDQUFDLFFBQWdDLEVBQUUsTUFBc0I7UUFDekUsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxRQUFRLEVBQUUsTUFBTSxDQUFDLENBQUM7UUFDeEQsTUFBTSxhQUFhLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEVBQUU7WUFDOUQsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLFNBQVMsR0FBRyxFQUFFLENBQUM7WUFDMUIsT0FBTyxHQUFHLENBQUM7UUFDZixDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFDUCxPQUFPO1lBQ0gsRUFBRSxFQUFFLFFBQVEsQ0FBQyxFQUFFO1lBQ2YsS0FBSyxFQUFFLFdBQVcsQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsRUFBRTtZQUMxRSxNQUFNLEVBQUUsUUFBUSxDQUFDLE1BQU07WUFDdkIsUUFBUSxFQUFFLFFBQVEsQ0FBQyxRQUFRO1lBQzNCLFVBQVU7WUFDVixhQUFhO1lBQ2IsVUFBVSxFQUFFLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBRSxFQUFFLFFBQVEsQ0FBQztTQUMxQyxDQUFDO0lBQ04sQ0FBQztJQUVELGtCQUFrQixDQUFDLFFBQWdDLEVBQUUsTUFBc0IsRUFBRSxlQUF3QztRQUNqSCxNQUFNLFVBQVUsR0FBRyxRQUFRLENBQUMsUUFBUSxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO1FBQ3BFLE9BQU8sTUFBTSxDQUFDLE1BQU0sQ0FDaEIsSUFBSSxDQUFDLG9CQUFvQixDQUFDLFFBQVEsRUFBRSxNQUFNLENBQUMsRUFDM0M7WUFDSSxZQUFZLEVBQUUsR0FBRyxFQUFFLENBQUMsZUFBZSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsd0JBQXdCLENBQUMsQ0FBQyxFQUFFLGVBQWUsQ0FBQyxDQUFDLENBQUM7WUFDM0csUUFBUSxFQUFFLFFBQVEsQ0FBQyxRQUFRLElBQUksS0FBSztZQUNwQyxPQUFPLEVBQUUsUUFBUSxDQUFDLE9BQU8sSUFBSSxLQUFLO1lBQ2xDLE9BQU8sRUFBRSxRQUFRLENBQUMsT0FBTyxLQUFLLEtBQUs7WUFDbkMsVUFBVSxFQUFFLFFBQVEsQ0FBQyxVQUFVLEtBQUssS0FBSztZQUN6QyxTQUFTLEVBQUUsUUFBUSxDQUFDLFNBQVMsS0FBSyxLQUFLO1lBQ3ZDLFFBQVEsRUFBRSxRQUFRLENBQUMsUUFBUSxLQUFLLEtBQUs7WUFDckMsVUFBVSxFQUFFLFFBQVEsQ0FBQyxVQUFVLEtBQUssS0FBSztZQUN6QyxVQUFVLEVBQUUsUUFBUSxDQUFDLFVBQVUsS0FBSyxLQUFLO1NBQzVDLENBQ0osQ0FBQztJQUNOLENBQUM7SUFFRCxrQkFBa0IsQ0FBQyxRQUFnQyxFQUFFLE1BQXNCLEVBQUUsZUFBd0M7UUFDakgsTUFBTSxVQUFVLEdBQUcsUUFBUSxDQUFDLFFBQVEsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztRQUNwRSxPQUFPLE1BQU0sQ0FBQyxNQUFNLENBQ2hCLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxRQUFRLEVBQUUsTUFBTSxDQUFDLEVBQzNDO1lBQ0ksS0FBSyxFQUFFLGVBQWUsQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLHdCQUF3QixDQUFDLENBQUMsRUFBRSxlQUFlLENBQUMsQ0FBQyxDQUFDO1NBQ2pHLENBQ0osQ0FBQztJQUNOLENBQUM7SUFFRCxrQkFBa0IsQ0FBQyxRQUFnQyxFQUFFLE1BQXNCO1FBQ3ZFLElBQUksU0FBUyxHQUFHLFdBQVcsQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLEVBQUUsRUFBRSxVQUFVLEVBQUUsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsTUFBTSxJQUFJLFFBQVEsQ0FBQyxLQUFLLEVBQUUsSUFBSSxJQUFJLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUMvSSxRQUFRLFNBQVMsRUFBRTtZQUNmLEtBQUssU0FBUztnQkFDVixTQUFTLEdBQUcsVUFBVSxDQUFDO2dCQUN2QixNQUFNO1lBQ1YsS0FBSyxVQUFVO2dCQUNYLFNBQVMsR0FBRyxVQUFVLENBQUM7Z0JBQ3ZCLE1BQU07WUFDVixLQUFLLFNBQVM7Z0JBQ1YsU0FBUyxHQUFHLFFBQVEsQ0FBQztnQkFDckIsTUFBTTtTQUNiO1FBQ0QsTUFBTSxHQUFHLEdBQUcsUUFBUSxDQUFDLElBQUksSUFBSSxPQUFPLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxLQUFLLElBQUksUUFBUSxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUM7UUFDN0UsT0FBTyxNQUFNLENBQUMsTUFBTSxDQUNoQixJQUFJLENBQUMsb0JBQW9CLENBQUMsUUFBUSxFQUFFLE1BQU0sQ0FBQyxFQUMzQztZQUNJLFNBQVM7WUFDVCxZQUFZLEVBQUUsUUFBUSxDQUFDLFlBQVksSUFBSSxLQUFLO1lBQzVDLFFBQVEsRUFBRSxRQUFRLENBQUMsSUFBSSxJQUFJLE9BQU87WUFDbEMsTUFBTSxFQUFFLFdBQVcsQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxJQUFJO1lBQ3RFLElBQUksRUFBRSxXQUFXLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSTtZQUNoRSxPQUFPLEVBQUUsV0FBVyxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLElBQUk7WUFDekUsSUFBSSxFQUFFLEtBQUssQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJO1lBQzdFLEdBQUcsRUFBRSxLQUFLLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxPQUFPO1lBQ3JELEdBQUcsRUFBRSxLQUFLLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxPQUFPO1lBQ3JELFNBQVMsRUFBRSxLQUFLLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxTQUFTO1lBQ25ELFNBQVMsRUFBRSxLQUFLLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxTQUFTO1lBQy9ELFdBQVcsRUFBRSxRQUFRLENBQUMsV0FBVyxJQUFJLEVBQUU7U0FDMUMsQ0FDSixDQUFDO0lBQ04sQ0FBQztJQUVELG1CQUFtQixDQUFDLFFBQWdDLEVBQUUsTUFBc0I7UUFDeEUsTUFBTSxHQUFHLEdBQUcsUUFBUSxDQUFDLElBQUksSUFBSSxPQUFPLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxLQUFLLElBQUksUUFBUSxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUM7UUFDN0UsT0FBTyxNQUFNLENBQUMsTUFBTSxDQUNoQixJQUFJLENBQUMsb0JBQW9CLENBQUMsUUFBUSxFQUFFLE1BQU0sQ0FBQyxFQUMzQztZQUNJLFNBQVMsRUFBRSxRQUFRLENBQUMsTUFBTSxJQUFJLE1BQU07WUFDcEMsYUFBYSxFQUFFLFFBQVEsQ0FBQyxJQUFJLEtBQUssUUFBUTtZQUN6QyxZQUFZLEVBQUUsUUFBUSxDQUFDLFlBQVksSUFBSSxLQUFLO1lBQzVDLFFBQVEsRUFBRSxRQUFRLENBQUMsSUFBSSxJQUFJLE9BQU87WUFDbEMsTUFBTSxFQUFFLFdBQVcsQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxJQUFJO1lBQ3RFLElBQUksRUFBRSxXQUFXLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSTtZQUNoRSxPQUFPLEVBQUUsV0FBVyxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLElBQUk7WUFDekUsSUFBSSxFQUFFLEtBQUssQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJO1lBQzdFLFNBQVMsRUFBRSxLQUFLLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxTQUFTO1lBQ25ELFNBQVMsRUFBRSxLQUFLLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxTQUFTO1lBQy9ELFdBQVcsRUFBRSxRQUFRLENBQUMsV0FBVyxJQUFJLEVBQUU7U0FDMUMsQ0FDSixDQUFDO0lBQ04sQ0FBQztJQUVELHFCQUFxQixDQUFDLFFBQWdDLEVBQUUsTUFBc0I7UUFDMUUsT0FBTyxNQUFNLENBQUMsTUFBTSxDQUNoQixJQUFJLENBQUMsb0JBQW9CLENBQUMsUUFBUSxFQUFFLE1BQU0sQ0FBQyxFQUMzQztZQUNJLElBQUksRUFBRSxRQUFRLENBQUMsSUFBSSxJQUFJLElBQUk7WUFDM0IsSUFBSSxFQUFFLFFBQVEsQ0FBQyxJQUFJLElBQUksRUFBRTtZQUN6QixJQUFJLEVBQUUsUUFBUSxDQUFDLElBQUksSUFBSSxLQUFLO1lBQzVCLFlBQVksRUFBRSxRQUFRLENBQUMsWUFBWSxJQUFJLEtBQUs7WUFDNUMsUUFBUSxFQUFFLFFBQVEsQ0FBQyxJQUFJLElBQUksT0FBTztTQUNyQyxDQUNKLENBQUM7SUFDTixDQUFDO0lBRUQsdUJBQXVCLENBQUMsUUFBZ0MsRUFBRSxNQUFzQjtRQUM1RSxPQUFPLE1BQU0sQ0FBQyxNQUFNLENBQ2hCLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxRQUFRLEVBQUUsTUFBTSxDQUFDLEVBQzNDO1lBQ0ksTUFBTSxFQUFFLFFBQVEsQ0FBQyxVQUFVLElBQUksWUFBWTtZQUMzQyxHQUFHLEVBQUUsSUFBSSxDQUFDLGFBQWEsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDO1lBQ3JDLEdBQUcsRUFBRSxJQUFJLENBQUMsYUFBYSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUM7U0FDeEMsQ0FDSixDQUFDO0lBQ04sQ0FBQztJQUVELG9CQUFvQixDQUFDLFFBQWdDLEVBQUUsTUFBc0I7UUFDekUsTUFBTSxLQUFLLEdBQUcsUUFBUSxDQUFDLEtBQUssRUFBRSxJQUFJLElBQUksUUFBUSxDQUFDLElBQUksQ0FBQztRQUNwRCxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLEVBQUU7WUFDdEIsT0FBTyxJQUFJLGlCQUFpQixDQUFDLENBQUMsV0FBVyxFQUFFLFdBQVcsRUFBRSxFQUFFO2dCQUN0RCxNQUFNLE9BQU8sR0FBRyxLQUFLLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxFQUFFO29CQUM5QixNQUFNLEtBQUssR0FBRyxRQUFRLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxHQUFHLFFBQVEsQ0FBQyxFQUFFLElBQUksS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxFQUFFLENBQUM7b0JBQzdFLE9BQU8sRUFBQyxLQUFLLEVBQUUsS0FBSyxFQUFDLENBQUM7Z0JBQzFCLENBQUMsQ0FBQyxDQUFDO2dCQUNILE9BQU8sSUFBSSxDQUFDLGdCQUFnQixDQUFDLFdBQVcsRUFBRSxXQUFXLEVBQUUsT0FBTyxDQUFDLENBQUM7WUFDcEUsQ0FBQyxDQUFDLENBQUM7U0FDTjtRQUNELElBQUksZUFBZSxDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUMsRUFBRTtZQUN2QyxPQUFPLElBQUksaUJBQWlCLENBQUMsS0FBSyxFQUFFLFdBQVcsRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxFQUFFO2dCQUN2RSxJQUFJLElBQUksR0FBRyxRQUFRLENBQUMsV0FBcUIsQ0FBQztnQkFDMUMsSUFBSSxNQUFNLEdBQUcsT0FBMEIsQ0FBQztnQkFDeEMsSUFBSSxLQUFLLEdBQXVDLFdBQVcsQ0FBQztnQkFDNUQsSUFBSSxJQUFJLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxFQUFFO29CQUMxQixJQUFJLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztvQkFDdEIsT0FBTyxNQUFNLENBQUMsTUFBTSxFQUFFO3dCQUNsQixNQUFNLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQztxQkFDMUI7b0JBQ0QsS0FBSyxHQUFHLElBQUksQ0FBQztpQkFDaEI7Z0JBQ0QsT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxFQUFFO29CQUN6QixJQUFJLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztvQkFDdEIsSUFBSSxNQUFNLENBQUMsTUFBTSxFQUFFO3dCQUNmLE1BQU0sR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDO3FCQUMxQjtvQkFDRCxLQUFLLEdBQUksS0FBeUIsQ0FBQyxNQUFNLElBQUksSUFBSSxDQUFDO2lCQUNyRDtnQkFDRCxNQUFNLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsRUFBRTtvQkFDL0IsSUFBSSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxFQUFFLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO2dCQUMzQyxDQUFDLENBQUMsQ0FBQztnQkFDSCxLQUFLLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO2dCQUNyRCxNQUFNLFlBQVksR0FBRyxLQUFLLFlBQVksa0JBQWtCO29CQUNwRCxDQUFDLENBQUMsTUFBTSxjQUFjLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUM7b0JBQ3hDLEVBQUUsQ0FBQztnQkFDUCxNQUFNLEtBQUssR0FBRyxXQUFXLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLENBQUM7Z0JBQ3ZELE1BQU0sT0FBTyxHQUFHLENBQUMsQ0FBQyxXQUFXLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsRUFBRTtvQkFDbkUsTUFBTSxXQUFXLEdBQUcsWUFBWSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxLQUFLLElBQUksS0FBSyxDQUFDLENBQUM7b0JBQzdELE9BQU8sRUFBQyxLQUFLLEVBQUUsS0FBSyxFQUFFLFdBQVcsRUFBRSxLQUFLLElBQUksS0FBSyxFQUFDLENBQUM7Z0JBQ3ZELENBQUMsQ0FBQyxDQUFDO2dCQUNILE9BQU8sSUFBSSxDQUFDLGdCQUFnQixDQUFDLFdBQVcsRUFBRSxPQUFPLEVBQUUsT0FBTyxDQUFDLENBQUM7WUFDaEUsQ0FBQyxDQUFDLENBQUM7U0FDTjtRQUNELE9BQU8sSUFBSSxpQkFBaUIsQ0FBQyxLQUFLLEVBQUUsV0FBVyxFQUFFLE9BQU8sRUFBRSxFQUFFO1lBQ3hELElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLElBQUksSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLGNBQWMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsRUFBRTtnQkFDcEosT0FBTyxNQUFNLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRTtvQkFDeEIsT0FBTzt3QkFDSCxHQUFHLENBQUM7d0JBQ0osS0FBSyxFQUFFLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDLEdBQUcsRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUMsS0FBSyxJQUFJLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDLEdBQUc7cUJBQ2xGLENBQUM7Z0JBQ04sQ0FBQyxDQUFDLENBQUM7WUFDUCxDQUFDLENBQUMsQ0FBQztZQUNILE1BQU0sT0FBTyxHQUFHLENBQUMsTUFBTSxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ3pGLE9BQU8sSUFBSSxDQUFDLGdCQUFnQixDQUFDLFdBQVcsRUFBRSxPQUFPLEVBQUUsT0FBTyxDQUFDLENBQUM7UUFDaEUsQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDO0lBRUQsbUJBQW1CLENBQUMsUUFBZ0MsRUFBRSxNQUFzQjtRQUN4RSxPQUFPLE1BQU0sQ0FBQyxNQUFNLENBQ2hCLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxRQUFRLEVBQUUsTUFBTSxDQUFDLEVBQzNDO1lBQ0ksT0FBTyxFQUFFLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxRQUFRLEVBQUUsTUFBTSxDQUFDO1lBQ3BELFFBQVEsRUFBRSxRQUFRLENBQUMsSUFBSSxJQUFJLE9BQU87WUFDbEMsT0FBTyxFQUFFLFFBQVEsQ0FBQyxPQUFPO1lBQ3pCLE1BQU0sRUFBRSxRQUFRLENBQUMsTUFBTTtTQUMxQixDQUNKLENBQUM7SUFDTixDQUFDO0lBRUQsbUJBQW1CLENBQUMsUUFBZ0MsRUFBRSxNQUFzQjtRQUN4RSxNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsR0FBRyxJQUFJLFFBQVEsQ0FBQyxDQUFDO1FBQ25ELE1BQU0sRUFBQyxNQUFNLEVBQUUsVUFBVSxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBQyxHQUFHLFFBQVEsQ0FBQztRQUNqRixPQUFPLE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLG9CQUFvQixDQUFDLFFBQVEsRUFBRSxNQUFNLENBQUMsRUFBRTtZQUM5RCxHQUFHO1lBQ0gsTUFBTTtZQUNOLFVBQVU7WUFDVixPQUFPO1lBQ1AsT0FBTztZQUNQLFNBQVM7WUFDVCxZQUFZO1NBQ2YsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUVELHFCQUFxQixDQUFDLFFBQWdDLEVBQUUsTUFBc0I7UUFDMUUsT0FBTyxNQUFNLENBQUMsTUFBTSxDQUNoQixJQUFJLENBQUMsb0JBQW9CLENBQUMsUUFBUSxFQUFFLE1BQU0sQ0FBQyxFQUMzQztZQUNJLGFBQWEsRUFBRSxRQUFRLENBQUMsYUFBYSxJQUFJLEtBQUs7U0FDakQsQ0FDSixDQUFDO0lBQ04sQ0FBQztJQUVELG1CQUFtQixDQUFDLEtBQWEsRUFBRSxTQUFvQixFQUFFLGNBQXFDO1FBQzFGLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxLQUFLLEVBQUUsU0FBUyxFQUFFLGNBQWMsQ0FBQyxDQUFDO1FBQzVELElBQUksQ0FBQyxVQUFVLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLENBQUMsS0FBSyxFQUFFLGNBQWMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsS0FBSyxFQUFFLFNBQVMsQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFjLENBQUMsQ0FBQztRQUNySCxjQUFjLENBQUMsWUFBWSxFQUFFLENBQUM7SUFDbEMsQ0FBQztJQUVTLEtBQUssQ0FBQyxnQkFBZ0IsQ0FBQyxLQUE4QixFQUFFLE9BQW9CLEVBQUUsT0FBdUM7UUFDMUgsSUFBSSxDQUFDLE9BQU87WUFBRSxPQUFPLEVBQUUsQ0FBQztRQUN4QixLQUFLLE1BQU0sTUFBTSxJQUFJLE9BQU8sRUFBRTtZQUMxQixNQUFNLENBQUMsT0FBTyxHQUFHLENBQUMsTUFBTSxDQUFDLE9BQU8sRUFBRSxLQUFLLENBQUMsVUFBVSxDQUFDLE1BQU0sRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxlQUFlLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDN0gsTUFBTSxDQUFDLEtBQUssR0FBRyxNQUFNLElBQUksQ0FBQyxRQUFRLENBQUMsY0FBYyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztTQUNuRTtRQUNELE9BQU8sT0FBTyxDQUFDO0lBQ25CLENBQUM7SUFFUyxhQUFhLENBQUMsUUFBZ0MsRUFBRSxNQUFzQjtRQUM1RSxNQUFNLFVBQVUsR0FBNEIsRUFBRSxDQUFDO1FBQy9DLElBQUksV0FBVyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLElBQUksTUFBTSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsRUFBRTtZQUNuRixVQUFVLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQztTQUM5QjtRQUNELElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxVQUFVLEVBQUUsUUFBUSxDQUFDLENBQUM7UUFDakQsSUFBSSxDQUFDLGtCQUFrQixDQUFDLFVBQVUsRUFBRSxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDcEQsT0FBTyxVQUFVLENBQUM7SUFDdEIsQ0FBQztJQUVTLHFCQUFxQixDQUFDLFVBQW1DLEVBQUUsUUFBZ0M7UUFDakcsSUFBSSxDQUFDLFFBQVE7WUFBRSxPQUFPO1FBQ3RCLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxFQUFFO1lBQzVCLFVBQVUsQ0FBQyxTQUFTLEdBQUcsUUFBUSxDQUFDLFNBQVMsQ0FBQztTQUM3QztRQUNELElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxFQUFFO1lBQzVCLFVBQVUsQ0FBQyxTQUFTLEdBQUcsUUFBUSxDQUFDLFNBQVMsQ0FBQztTQUM3QztRQUNELElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxFQUFFO1lBQzFCLFVBQVUsQ0FBQyxHQUFHLEdBQUcsUUFBUSxDQUFDLE9BQU8sQ0FBQztTQUNyQztRQUNELElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxFQUFFO1lBQzFCLFVBQVUsQ0FBQyxHQUFHLEdBQUcsUUFBUSxDQUFDLE9BQU8sQ0FBQztTQUNyQztRQUNELFFBQVEsUUFBUSxDQUFDLE1BQU0sRUFBRTtZQUNyQixLQUFLLE9BQU87Z0JBQ1IsVUFBVSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUM7Z0JBQ3hCLE1BQU07U0FDYjtJQUNMLENBQUM7SUFFUyxrQkFBa0IsQ0FBQyxVQUFtQyxFQUFFLEtBQTZCO1FBQzNGLElBQUksQ0FBQyxLQUFLO1lBQUUsT0FBTztRQUNuQixJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsRUFBRTtZQUN6QixVQUFVLENBQUMsY0FBYyxHQUFHLEtBQUssQ0FBQyxTQUFTLENBQUM7U0FDL0M7UUFDRCxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsRUFBRTtZQUN6QixVQUFVLENBQUMsY0FBYyxHQUFHLEtBQUssQ0FBQyxTQUFTLENBQUM7U0FDL0M7UUFDRCxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsRUFBRTtZQUN2QixVQUFVLENBQUMsYUFBYSxHQUFHLEtBQUssQ0FBQyxPQUFPLENBQUM7U0FDNUM7UUFDRCxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsRUFBRTtZQUN2QixVQUFVLENBQUMsYUFBYSxHQUFHLEtBQUssQ0FBQyxPQUFPLENBQUM7U0FDNUM7SUFDTCxDQUFDOzsrR0F2aUJRLGtCQUFrQix5R0FjUCxjQUFjLGFBQ2QsUUFBUTttSEFmbkIsa0JBQWtCOzJGQUFsQixrQkFBa0I7a0JBRDlCLFVBQVU7OzBCQWVNLE1BQU07MkJBQUMsY0FBYzs7MEJBQ3JCLE1BQU07MkJBQUMsUUFBUSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7SW5qZWN0LCBJbmplY3RhYmxlLCBJbmplY3Rvcn0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcclxuaW1wb3J0IHtBYnN0cmFjdENvbnRyb2wsIEZvcm1BcnJheSwgRm9ybUNvbnRyb2wsIEZvcm1Hcm91cH0gZnJvbSBcIkBhbmd1bGFyL2Zvcm1zXCI7XHJcbmltcG9ydCB7Zmlyc3RWYWx1ZUZyb20sIFN1YmplY3R9IGZyb20gXCJyeGpzXCI7XHJcbmltcG9ydCB7XHJcbiAgICBEeW5hbWljQ2hlY2tib3hNb2RlbCxcclxuICAgIER5bmFtaWNDaGVja2JveE1vZGVsQ29uZmlnLFxyXG4gICAgRHluYW1pY0RhdGVQaWNrZXJNb2RlbCxcclxuICAgIER5bmFtaWNEYXRlUGlja2VyTW9kZWxDb25maWcsXHJcbiAgICBEeW5hbWljRmlsZVVwbG9hZE1vZGVsLFxyXG4gICAgRHluYW1pY0ZpbGVVcGxvYWRNb2RlbENvbmZpZyxcclxuICAgIER5bmFtaWNGb3JtQ29tcG9uZW50U2VydmljZSxcclxuICAgIER5bmFtaWNGb3JtQ29udHJvbE1vZGVsLFxyXG4gICAgRHluYW1pY0Zvcm1Db250cm9sTW9kZWxDb25maWcsXHJcbiAgICBEeW5hbWljRm9ybUdyb3VwTW9kZWwsXHJcbiAgICBEeW5hbWljRm9ybUdyb3VwTW9kZWxDb25maWcsXHJcbiAgICBEeW5hbWljRm9ybU1vZGVsLFxyXG4gICAgRHluYW1pY0Zvcm1TZXJ2aWNlIGFzIEJhc2UsXHJcbiAgICBEeW5hbWljRm9ybVZhbGlkYXRpb25TZXJ2aWNlLFxyXG4gICAgRHluYW1pY0Zvcm1WYWx1ZUNvbnRyb2xNb2RlbCxcclxuICAgIER5bmFtaWNGb3JtVmFsdWVDb250cm9sTW9kZWxDb25maWcsXHJcbiAgICBEeW5hbWljSW5wdXRNb2RlbCxcclxuICAgIER5bmFtaWNJbnB1dE1vZGVsQ29uZmlnLFxyXG4gICAgRHluYW1pY1BhdGhhYmxlLFxyXG4gICAgRHluYW1pY1RleHRBcmVhTW9kZWwsXHJcbiAgICBEeW5hbWljVGV4dEFyZWFNb2RlbENvbmZpZyxcclxuICAgIER5bmFtaWNWYWxpZGF0b3JzQ29uZmlnXHJcbn0gZnJvbSBcIkBuZy1keW5hbWljLWZvcm1zL2NvcmVcIjtcclxuaW1wb3J0IHtcclxuICAgIElBcGlTZXJ2aWNlLFxyXG4gICAgSUxhbmd1YWdlU2VydmljZSxcclxuICAgIElPcGVuQXBpU2NoZW1hLFxyXG4gICAgSU9wZW5BcGlTY2hlbWFQcm9wZXJ0eSxcclxuICAgIElPcGVuQXBpU2NoZW1hcyxcclxuICAgIE9iamVjdFV0aWxzLFxyXG4gICAgT3BlbkFwaVNlcnZpY2UsXHJcbiAgICBTdHJpbmdVdGlsc1xyXG59IGZyb20gXCJAc3RlbXkvbmd4LXV0aWxzXCI7XHJcblxyXG5pbXBvcnQge0Zvcm1Db250cm9sU2VyaWFsaXplciwgRm9ybU1vZGVsQ3VzdG9taXplciwgRm9ybU1vZGVsQ3VzdG9taXplcldyYXAsIE1vZGVsVHlwZX0gZnJvbSBcIi4uL2NvbW1vbi10eXBlc1wiO1xyXG5cclxuaW1wb3J0IHtFRElUT1JfRk9STUFUUywgZmluZFJlZnMsIGlzU3RyaW5nV2l0aFZhbCwgTUFYX0lOUFVUX05VTSwgbWVyZ2VGb3JtTW9kZWxzLCBNSU5fSU5QVVRfTlVNfSBmcm9tIFwiLi4vdXRpbHMvbWlzY1wiO1xyXG5pbXBvcnQge0Zvcm1TZWxlY3RTdWJqZWN0fSBmcm9tIFwiLi4vdXRpbHMvZm9ybS1zZWxlY3Qtc3ViamVjdFwiO1xyXG5pbXBvcnQge0Zvcm1TdWJqZWN0fSBmcm9tIFwiLi4vdXRpbHMvZm9ybS1zdWJqZWN0XCI7XHJcbmltcG9ydCB7RHluYW1pY0VkaXRvck1vZGVsLCBEeW5hbWljRWRpdG9yTW9kZWxDb25maWd9IGZyb20gXCIuLi91dGlscy9keW5hbWljLWVkaXRvci5tb2RlbFwiO1xyXG5pbXBvcnQge1xyXG4gICAgRHluYW1pY0Zvcm1BcnJheUdyb3VwTW9kZWwsXHJcbiAgICBEeW5hbWljRm9ybUFycmF5TW9kZWwsXHJcbiAgICBEeW5hbWljRm9ybUFycmF5TW9kZWxDb25maWdcclxufSBmcm9tIFwiLi4vdXRpbHMvZHluYW1pYy1mb3JtLWFycmF5Lm1vZGVsXCI7XHJcbmltcG9ydCB7RHluYW1pY0Zvcm1PcHRpb25Db25maWcsIER5bmFtaWNTZWxlY3RNb2RlbCwgRHluYW1pY1NlbGVjdE1vZGVsQ29uZmlnfSBmcm9tIFwiLi4vdXRpbHMvZHluYW1pYy1zZWxlY3QubW9kZWxcIjtcclxuaW1wb3J0IHtEeW5hbWljQmFzZUZvcm1Db21wb25lbnR9IGZyb20gXCIuLi9jb21wb25lbnRzL2Jhc2UvZHluYW1pYy1iYXNlLWZvcm0uY29tcG9uZW50XCI7XHJcblxyXG5ASW5qZWN0YWJsZSgpXHJcbmV4cG9ydCBjbGFzcyBEeW5hbWljRm9ybVNlcnZpY2UgZXh0ZW5kcyBCYXNlIHtcclxuXHJcbiAgICBnZXQgYXBpKCk6IElBcGlTZXJ2aWNlIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5vcGVuQXBpLmFwaTtcclxuICAgIH1cclxuXHJcbiAgICBnZXQgbGFuZ3VhZ2UoKTogSUxhbmd1YWdlU2VydmljZSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuYXBpLmxhbmd1YWdlO1xyXG4gICAgfVxyXG5cclxuICAgIHByb3RlY3RlZCBzY2hlbWFzOiBJT3BlbkFwaVNjaGVtYXM7XHJcblxyXG4gICAgY29uc3RydWN0b3IoY3M6IER5bmFtaWNGb3JtQ29tcG9uZW50U2VydmljZSxcclxuICAgICAgICAgICAgICAgIHZzOiBEeW5hbWljRm9ybVZhbGlkYXRpb25TZXJ2aWNlLFxyXG4gICAgICAgICAgICAgICAgQEluamVjdChPcGVuQXBpU2VydmljZSkgcmVhZG9ubHkgb3BlbkFwaTogT3BlbkFwaVNlcnZpY2UsXHJcbiAgICAgICAgICAgICAgICBASW5qZWN0KEluamVjdG9yKSByZWFkb25seSBpbmplY3RvcjogSW5qZWN0b3IpIHtcclxuICAgICAgICBzdXBlcihjcywgdnMpO1xyXG4gICAgfVxyXG5cclxuICAgIHBhdGNoR3JvdXAodmFsdWU6IGFueSwgZm9ybU1vZGVsOiBEeW5hbWljRm9ybU1vZGVsLCBmb3JtR3JvdXA6IEZvcm1Hcm91cCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMucGF0Y2hWYWx1ZVJlY3Vyc2l2ZSh2YWx1ZSwgZm9ybU1vZGVsLCBmb3JtR3JvdXApO1xyXG4gICAgICAgIGZvcm1Hcm91cC5wYXRjaFZhbHVlKE9iamVjdFV0aWxzLmNvcHkodmFsdWUpKTtcclxuICAgICAgICB0aGlzLmRldGVjdENoYW5nZXMoKTtcclxuICAgIH1cclxuXHJcbiAgICBwYXRjaEZvcm0odmFsdWU6IGFueSwgY29tcG9uZW50OiBEeW5hbWljQmFzZUZvcm1Db21wb25lbnQpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLnBhdGNoVmFsdWVSZWN1cnNpdmUodmFsdWUsIGNvbXBvbmVudC5tb2RlbCwgY29tcG9uZW50Lmdyb3VwKTtcclxuICAgICAgICBjb21wb25lbnQuZ3JvdXAucGF0Y2hWYWx1ZSh2YWx1ZSk7XHJcbiAgICAgICAgdGhpcy5kZXRlY3RDaGFuZ2VzKGNvbXBvbmVudCk7XHJcbiAgICB9XHJcblxyXG4gICAgc2VyaWFsaXplKGZvcm1Nb2RlbDogRHluYW1pY0Zvcm1Nb2RlbCwgZm9ybUdyb3VwOiBGb3JtR3JvdXApOiBQcm9taXNlPGFueT4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnNlcmlhbGl6ZVJlY3Vyc2l2ZShmb3JtTW9kZWwsIGZvcm1Hcm91cCk7XHJcbiAgICB9XHJcblxyXG4gICAgbm90aWZ5Q2hhbmdlcyhmb3JtTW9kZWw6IER5bmFtaWNGb3JtTW9kZWwsIGZvcm1Hcm91cDogRm9ybUdyb3VwKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5ub3RpZnlDaGFuZ2VzUmVjdXJzaXZlKGZvcm1Nb2RlbCwgZm9ybUdyb3VwLCBmb3JtTW9kZWwpO1xyXG4gICAgfVxyXG5cclxuICAgIHNob3dFcnJvcnMoZm9ybTogRHluYW1pY0Jhc2VGb3JtQ29tcG9uZW50KTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5zaG93RXJyb3JzRm9yR3JvdXAoZm9ybS5ncm91cCk7XHJcbiAgICAgICAgdGhpcy5kZXRlY3RDaGFuZ2VzKGZvcm0pO1xyXG4gICAgfVxyXG5cclxuICAgIHByb3RlY3RlZCBwYXRjaFZhbHVlUmVjdXJzaXZlKHZhbHVlOiBhbnksIGZvcm1Nb2RlbDogRHluYW1pY0Zvcm1Nb2RlbCwgZm9ybUdyb3VwOiBGb3JtR3JvdXApOiB2b2lkIHtcclxuICAgICAgICBpZiAoIXZhbHVlKSByZXR1cm47XHJcbiAgICAgICAgT2JqZWN0LmtleXModmFsdWUpLmZvckVhY2goa2V5ID0+IHtcclxuICAgICAgICAgICAgY29uc3Qgc3ViTW9kZWwgPSB0aGlzLmZpbmRNb2RlbEJ5SWQoa2V5LCBmb3JtTW9kZWwpO1xyXG4gICAgICAgICAgICBjb25zdCBzdWJWYWx1ZSA9IHZhbHVlW2tleV07XHJcbiAgICAgICAgICAgIGlmICghc3ViTW9kZWwpIHJldHVybjtcclxuICAgICAgICAgICAgY29uc3Qgc3ViQ29udHJvbCA9IHRoaXMuZmluZENvbnRyb2xCeU1vZGVsKHN1Yk1vZGVsLCBmb3JtR3JvdXApO1xyXG4gICAgICAgICAgICBpZiAoc3ViTW9kZWwgaW5zdGFuY2VvZiBEeW5hbWljU2VsZWN0TW9kZWwgJiYgT2JqZWN0VXRpbHMuaXNPYmplY3Qoc3ViVmFsdWUpKSB7XHJcbiAgICAgICAgICAgICAgICB2YWx1ZVtrZXldID0gc3ViVmFsdWUuaWQgfHwgc3ViVmFsdWUuX2lkIHx8IHN1YlZhbHVlO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmIChzdWJNb2RlbCBpbnN0YW5jZW9mIER5bmFtaWNEYXRlUGlja2VyTW9kZWwpIHtcclxuICAgICAgICAgICAgICAgIHZhbHVlW2tleV0gPSB0aGlzLmNvbnZlcnRUb0RhdGUoc3ViVmFsdWUpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmIChzdWJNb2RlbCBpbnN0YW5jZW9mIER5bmFtaWNGb3JtQXJyYXlNb2RlbCkge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgbGVuZ3RoID0gQXJyYXkuaXNBcnJheShzdWJWYWx1ZSkgPyBzdWJWYWx1ZS5sZW5ndGggOiAwO1xyXG4gICAgICAgICAgICAgICAgY29uc3Qgc3ViQXJyYXkgPSBzdWJDb250cm9sIGFzIEZvcm1BcnJheTtcclxuICAgICAgICAgICAgICAgIHdoaWxlIChzdWJNb2RlbC5zaXplID4gbGVuZ3RoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5yZW1vdmVGb3JtQXJyYXlHcm91cCgwLCBzdWJBcnJheSwgc3ViTW9kZWwpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgd2hpbGUgKHN1Yk1vZGVsLnNpemUgPCBsZW5ndGgpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmluc2VydEZvcm1BcnJheUdyb3VwKHN1Yk1vZGVsLnNpemUsIHN1YkFycmF5LCBzdWJNb2RlbCBhcyBEeW5hbWljRm9ybUFycmF5TW9kZWwpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGl0ZW1Nb2RlbCA9IHN1Yk1vZGVsLmdldChpKTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnBhdGNoVmFsdWVSZWN1cnNpdmUoc3ViVmFsdWVbaV0sIGl0ZW1Nb2RlbC5ncm91cCwgc3ViQXJyYXkuYXQoaSkgYXMgRm9ybUdyb3VwKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAoc3ViTW9kZWwgaW5zdGFuY2VvZiBEeW5hbWljRm9ybUdyb3VwTW9kZWwpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMucGF0Y2hWYWx1ZVJlY3Vyc2l2ZShzdWJWYWx1ZSwgc3ViTW9kZWwuZ3JvdXAsIHN1YkNvbnRyb2wgYXMgRm9ybUdyb3VwKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHByb3RlY3RlZCBhc3luYyBzZXJpYWxpemVSZWN1cnNpdmUoZm9ybU1vZGVsOiBEeW5hbWljRm9ybU1vZGVsLCBmb3JtR3JvdXA6IEZvcm1Hcm91cCk6IFByb21pc2U8YW55PiB7XHJcbiAgICAgICAgY29uc3QgcmVzdWx0ID0ge307XHJcbiAgICAgICAgaWYgKCFmb3JtTW9kZWwgfHwgIWZvcm1Hcm91cCB8fCAhZm9ybUdyb3VwLnZhbHVlKSByZXR1cm4gcmVzdWx0O1xyXG4gICAgICAgIGZvciAoY29uc3QgaSBpbiBmb3JtTW9kZWwpIHtcclxuICAgICAgICAgICAgY29uc3Qgc3ViTW9kZWwgPSBmb3JtTW9kZWxbaV0gYXMgRHluYW1pY0Zvcm1WYWx1ZUNvbnRyb2xNb2RlbDxhbnk+O1xyXG4gICAgICAgICAgICBjb25zdCBzdWJDb250cm9sID0gdGhpcy5maW5kQ29udHJvbEJ5TW9kZWwoc3ViTW9kZWwsIGZvcm1Hcm91cCk7XHJcbiAgICAgICAgICAgIGNvbnN0IHNlcmlhbGl6ZXIgPSBzdWJNb2RlbC5hZGRpdGlvbmFsPy5zZXJpYWxpemVyIGFzIEZvcm1Db250cm9sU2VyaWFsaXplcjtcclxuICAgICAgICAgICAgaWYgKE9iamVjdFV0aWxzLmlzRnVuY3Rpb24oc2VyaWFsaXplcikpIHtcclxuICAgICAgICAgICAgICAgIHJlc3VsdFtzdWJNb2RlbC5pZF0gPSBhd2FpdCBzZXJpYWxpemVyKHN1Yk1vZGVsLCBzdWJDb250cm9sKTtcclxuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmIChzdWJNb2RlbC5oaWRkZW4gJiYgIXN1Yk1vZGVsLmFkZGl0aW9uYWw/LnNlcmlhbGl6ZSkgY29udGludWU7XHJcbiAgICAgICAgICAgIGlmIChzdWJNb2RlbCBpbnN0YW5jZW9mIER5bmFtaWNGb3JtQXJyYXlNb2RlbCkge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgbGVuZ3RoID0gQXJyYXkuaXNBcnJheShzdWJDb250cm9sLnZhbHVlKSA/IHN1YkNvbnRyb2wudmFsdWUubGVuZ3RoIDogMDtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHN1YkFycmF5ID0gc3ViQ29udHJvbCBhcyBGb3JtQXJyYXk7XHJcbiAgICAgICAgICAgICAgICBjb25zdCByZXNBcnJheSA9IFtdO1xyXG4gICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGl0ZW1Nb2RlbCA9IHN1Yk1vZGVsLmdldChpKTtcclxuICAgICAgICAgICAgICAgICAgICByZXNBcnJheS5wdXNoKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLnNlcmlhbGl6ZVJlY3Vyc2l2ZShpdGVtTW9kZWwuZ3JvdXAsIHN1YkFycmF5LmF0KGkpIGFzIEZvcm1Hcm91cClcclxuICAgICAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgcmVzdWx0W3N1Yk1vZGVsLmlkXSA9IHJlc0FycmF5O1xyXG4gICAgICAgICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKHN1Yk1vZGVsIGluc3RhbmNlb2YgRHluYW1pY0Zvcm1Hcm91cE1vZGVsKSB7XHJcbiAgICAgICAgICAgICAgICByZXN1bHRbc3ViTW9kZWwuaWRdID0gYXdhaXQgdGhpcy5zZXJpYWxpemVSZWN1cnNpdmUoc3ViTW9kZWwuZ3JvdXAsIHN1YkNvbnRyb2wgYXMgRm9ybUdyb3VwKTtcclxuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmIChzdWJNb2RlbCBpbnN0YW5jZW9mIER5bmFtaWNJbnB1dE1vZGVsICYmICFPYmplY3RVdGlscy5pc051bGxPclVuZGVmaW5lZChzdWJDb250cm9sLnZhbHVlKSkge1xyXG4gICAgICAgICAgICAgICAgcmVzdWx0W3N1Yk1vZGVsLmlkXSA9IHN1Yk1vZGVsLmlucHV0VHlwZSA9PSBcIm51bWJlclwiXHJcbiAgICAgICAgICAgICAgICAgICAgPyBwYXJzZUZsb2F0KChgJHtzdWJDb250cm9sLnZhbHVlfWAgfHwgXCIwXCIpLnJlcGxhY2UoLywvZ2ksIFwiLlwiKSkgPz8gbnVsbFxyXG4gICAgICAgICAgICAgICAgICAgIDogc3ViQ29udHJvbC52YWx1ZTtcclxuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJlc3VsdFtzdWJNb2RlbC5pZF0gPSBzdWJDb250cm9sLnZhbHVlO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gcmVzdWx0O1xyXG4gICAgfVxyXG5cclxuICAgIHByb3RlY3RlZCBub3RpZnlDaGFuZ2VzUmVjdXJzaXZlKGZvcm1Nb2RlbDogRHluYW1pY0Zvcm1Nb2RlbCwgZm9ybUdyb3VwOiBGb3JtR3JvdXAsIHJvb3Q6IER5bmFtaWNGb3JtTW9kZWwpOiB2b2lkIHtcclxuICAgICAgICBpZiAoIWZvcm1Nb2RlbCB8fCAhZm9ybUdyb3VwKSByZXR1cm47XHJcbiAgICAgICAgZm9yIChjb25zdCBpIGluIGZvcm1Nb2RlbCkge1xyXG4gICAgICAgICAgICBjb25zdCBzdWJNb2RlbCA9IGZvcm1Nb2RlbFtpXSBhcyBEeW5hbWljRm9ybVZhbHVlQ29udHJvbE1vZGVsPGFueT47XHJcbiAgICAgICAgICAgIGNvbnN0IHN1YkNvbnRyb2wgPSB0aGlzLmZpbmRDb250cm9sQnlNb2RlbChzdWJNb2RlbCwgZm9ybUdyb3VwKTtcclxuICAgICAgICAgICAgaWYgKHN1Yk1vZGVsIGluc3RhbmNlb2YgRHluYW1pY0Zvcm1BcnJheU1vZGVsKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBsZW5ndGggPSBBcnJheS5pc0FycmF5KHN1YkNvbnRyb2wudmFsdWUpID8gc3ViQ29udHJvbC52YWx1ZS5sZW5ndGggOiAwO1xyXG4gICAgICAgICAgICAgICAgY29uc3Qgc3ViQXJyYXkgPSBzdWJDb250cm9sIGFzIEZvcm1BcnJheTtcclxuICAgICAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBpdGVtTW9kZWwgPSBzdWJNb2RlbC5nZXQoaSk7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5ub3RpZnlDaGFuZ2VzUmVjdXJzaXZlKGl0ZW1Nb2RlbC5ncm91cCwgc3ViQXJyYXkuYXQoaSkgYXMgRm9ybUdyb3VwLCByb290KTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmIChzdWJNb2RlbCBpbnN0YW5jZW9mIER5bmFtaWNGb3JtR3JvdXBNb2RlbCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5ub3RpZnlDaGFuZ2VzUmVjdXJzaXZlKHN1Yk1vZGVsLmdyb3VwLCBzdWJDb250cm9sIGFzIEZvcm1Hcm91cCwgcm9vdCk7XHJcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0aGlzLnVwZGF0ZVNlbGVjdE9wdGlvbnMoc3ViTW9kZWwsIHN1YkNvbnRyb2wgYXMgRm9ybUNvbnRyb2wsIHJvb3QpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwcm90ZWN0ZWQgdXBkYXRlU2VsZWN0T3B0aW9ucyhmb3JtQ29udHJvbE1vZGVsOiBEeW5hbWljRm9ybUNvbnRyb2xNb2RlbCwgZm9ybUNvbnRyb2w6IEZvcm1Db250cm9sLCByb290OiBEeW5hbWljRm9ybU1vZGVsKTogdm9pZCB7XHJcbiAgICAgICAgaWYgKGZvcm1Db250cm9sTW9kZWwgaW5zdGFuY2VvZiBEeW5hbWljU2VsZWN0TW9kZWwpIHtcclxuICAgICAgICAgICAgbGV0IG9wdGlvbnMgPSBmb3JtQ29udHJvbE1vZGVsLm9wdGlvbnMkO1xyXG4gICAgICAgICAgICBpZiAob3B0aW9ucyBpbnN0YW5jZW9mIEZvcm1TdWJqZWN0KSB7XHJcbiAgICAgICAgICAgICAgICBvcHRpb25zLm5vdGlmeShmb3JtQ29udHJvbE1vZGVsLCBmb3JtQ29udHJvbCwgcm9vdCk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgd2hpbGUgKG9wdGlvbnMgaW5zdGFuY2VvZiBTdWJqZWN0ICYmIG9wdGlvbnMuc291cmNlKSB7XHJcbiAgICAgICAgICAgICAgICBvcHRpb25zID0gb3B0aW9ucy5zb3VyY2U7XHJcbiAgICAgICAgICAgICAgICBpZiAob3B0aW9ucyBpbnN0YW5jZW9mIEZvcm1TdWJqZWN0KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgb3B0aW9ucy5ub3RpZnkoZm9ybUNvbnRyb2xNb2RlbCwgZm9ybUNvbnRyb2wsIHJvb3QpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHByb3RlY3RlZCBzaG93RXJyb3JzRm9yR3JvdXAoZm9ybUdyb3VwOiBGb3JtR3JvdXApOiB2b2lkIHtcclxuICAgICAgICBpZiAoIWZvcm1Hcm91cCkgcmV0dXJuO1xyXG4gICAgICAgIGZvcm1Hcm91cC5tYXJrQXNUb3VjaGVkKHtvbmx5U2VsZjogdHJ1ZX0pO1xyXG4gICAgICAgIGNvbnN0IGNvbnRyb2xzID0gT2JqZWN0LmtleXMoZm9ybUdyb3VwLmNvbnRyb2xzKS5tYXAoaWQgPT4gZm9ybUdyb3VwLmNvbnRyb2xzW2lkXSk7XHJcbiAgICAgICAgdGhpcy5zaG93RXJyb3JzRm9yQ29udHJvbHMoY29udHJvbHMpO1xyXG4gICAgfVxyXG5cclxuICAgIHByb3RlY3RlZCBzaG93RXJyb3JzRm9yQ29udHJvbHMoY29udHJvbHM6IEFic3RyYWN0Q29udHJvbFtdKTogdm9pZCB7XHJcbiAgICAgICAgY29udHJvbHMuZm9yRWFjaChjb250cm9sID0+IHtcclxuICAgICAgICAgICAgaWYgKGNvbnRyb2wgaW5zdGFuY2VvZiBGb3JtR3JvdXApIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2hvd0Vycm9yc0Zvckdyb3VwKGNvbnRyb2wpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGNvbnRyb2wubWFya0FzVG91Y2hlZCh7b25seVNlbGY6IHRydWV9KTtcclxuICAgICAgICAgICAgaWYgKGNvbnRyb2wgaW5zdGFuY2VvZiBGb3JtQXJyYXkpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2hvd0Vycm9yc0ZvckNvbnRyb2xzKGNvbnRyb2wuY29udHJvbHMpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJvdGVjdGVkIGNvbnZlcnRUb0RhdGUodmFsdWU6IGFueSk6IERhdGUge1xyXG4gICAgICAgIGlmIChPYmplY3RVdGlscy5pc051bGxPclVuZGVmaW5lZCh2YWx1ZSkpIHJldHVybiBudWxsO1xyXG4gICAgICAgIGNvbnN0IGRhdGUgPSBPYmplY3RVdGlscy5pc0RhdGUodmFsdWUpXHJcbiAgICAgICAgICAgID8gdmFsdWVcclxuICAgICAgICAgICAgOiBuZXcgRGF0ZSh2YWx1ZSk7XHJcbiAgICAgICAgcmV0dXJuIGlzTmFOKGRhdGUgYXMgYW55KSA/IG5ldyBEYXRlKCkgOiBkYXRlO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIGdldEZvcm1Nb2RlbEZvclNjaGVtYShuYW1lOiBzdHJpbmcsIGN1c3RvbWl6ZU1vZGVsPzogRm9ybU1vZGVsQ3VzdG9taXplcik6IFByb21pc2U8RHluYW1pY0Zvcm1Nb2RlbD4ge1xyXG4gICAgICAgIHRoaXMuYXBpLmNhY2hlID0ge307XHJcbiAgICAgICAgdGhpcy5zY2hlbWFzID0gYXdhaXQgdGhpcy5vcGVuQXBpLmdldFNjaGVtYXMoKTtcclxuICAgICAgICBjb25zdCBjdXN0b21pemVNb2RlbHM6IEZvcm1Nb2RlbEN1c3RvbWl6ZXJXcmFwID0gKFxyXG4gICAgICAgICAgICBwcm9wZXJ0eTogSU9wZW5BcGlTY2hlbWFQcm9wZXJ0eSwgc2NoZW1hOiBJT3BlbkFwaVNjaGVtYSxcclxuICAgICAgICAgICAgbW9kZWxUeXBlOiBNb2RlbFR5cGUsIGNvbmZpZzogRHluYW1pY0Zvcm1Db250cm9sTW9kZWxDb25maWcpID0+IHtcclxuICAgICAgICAgICAgY29uc3QgbW9kZWwgPSBuZXcgbW9kZWxUeXBlKGNvbmZpZyk7XHJcbiAgICAgICAgICAgIGlmIChtb2RlbCBpbnN0YW5jZW9mIER5bmFtaWNGb3JtVmFsdWVDb250cm9sTW9kZWwpIHtcclxuICAgICAgICAgICAgICAgIG1vZGVsLnZhbHVlID0gKG1vZGVsIGluc3RhbmNlb2YgRHluYW1pY0RhdGVQaWNrZXJNb2RlbClcclxuICAgICAgICAgICAgICAgICAgICA/IHRoaXMuY29udmVydFRvRGF0ZShwcm9wZXJ0eS5kZWZhdWx0KSA6IHByb3BlcnR5LmRlZmF1bHQ7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKCFPYmplY3RVdGlscy5pc0Z1bmN0aW9uKGN1c3RvbWl6ZU1vZGVsKSkgcmV0dXJuIFttb2RlbF07XHJcbiAgICAgICAgICAgIGNvbnN0IHJlcyA9IGN1c3RvbWl6ZU1vZGVsKHByb3BlcnR5LCBzY2hlbWEsIG1vZGVsLCBjb25maWcsIHRoaXMuaW5qZWN0b3IpO1xyXG4gICAgICAgICAgICByZXR1cm4gQXJyYXkuaXNBcnJheShyZXMpID8gcmVzIDogW3Jlc107XHJcbiAgICAgICAgfTtcclxuICAgICAgICByZXR1cm4gdGhpcy5nZXRGb3JtTW9kZWxGb3JTY2hlbWFEZWYodGhpcy5zY2hlbWFzW25hbWVdLCBjdXN0b21pemVNb2RlbHMpO1xyXG4gICAgfVxyXG5cclxuICAgIHByb3RlY3RlZCBnZXRGb3JtTW9kZWxGb3JTY2hlbWFEZWYoc2NoZW1hOiBJT3BlbkFwaVNjaGVtYSwgY3VzdG9taXplTW9kZWxzOiBGb3JtTW9kZWxDdXN0b21pemVyV3JhcCk6IER5bmFtaWNGb3JtTW9kZWwge1xyXG4gICAgICAgIGlmICghc2NoZW1hKVxyXG4gICAgICAgICAgICByZXR1cm4gW107XHJcbiAgICAgICAgY29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKHNjaGVtYS5wcm9wZXJ0aWVzIHx8IHt9KTtcclxuICAgICAgICBjb25zdCBjb250cm9sczogRHluYW1pY0Zvcm1Nb2RlbCA9IFtdO1xyXG4gICAgICAgIGZvciAoY29uc3QgcCBvZiBrZXlzKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHByb3BlcnR5ID0gc2NoZW1hLnByb3BlcnRpZXNbcF07XHJcbiAgICAgICAgICAgIGNvbnRyb2xzLnB1c2goLi4udGhpcy5nZXRGb3JtQ29udHJvbE1vZGVscyhwcm9wZXJ0eSwgc2NoZW1hLCBjdXN0b21pemVNb2RlbHMpKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGNvbnRyb2xzLmZpbHRlcih0ID0+IG51bGwgIT09IHQpO1xyXG4gICAgfVxyXG5cclxuICAgIHByb3RlY3RlZCBjaGVja0lzRWRpdG9yUHJvcGVydHkocHJvcGVydHk6IElPcGVuQXBpU2NoZW1hUHJvcGVydHkpOiBib29sZWFuIHtcclxuICAgICAgICBpZiAoIXByb3BlcnR5LmZvcm1hdCkgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIHJldHVybiBFRElUT1JfRk9STUFUUy5pbmRleE9mKHByb3BlcnR5LmZvcm1hdCkgPj0gMCB8fCBwcm9wZXJ0eS5mb3JtYXQuZW5kc1dpdGgoXCJzY3JpcHRcIik7XHJcbiAgICB9XHJcblxyXG4gICAgcHJvdGVjdGVkIGdldEZvcm1Db250cm9sTW9kZWxzKHByb3BlcnR5OiBJT3BlbkFwaVNjaGVtYVByb3BlcnR5LCBzY2hlbWE6IElPcGVuQXBpU2NoZW1hLCBjdXN0b21pemVNb2RlbHM6IEZvcm1Nb2RlbEN1c3RvbWl6ZXJXcmFwKTogRHluYW1pY0Zvcm1Db250cm9sTW9kZWxbXSB7XHJcbiAgICAgICAgY29uc3QgJGVudW0gPSBwcm9wZXJ0eS5pdGVtcz8uZW51bSB8fCBwcm9wZXJ0eS5lbnVtO1xyXG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KCRlbnVtKSB8fCBpc1N0cmluZ1dpdGhWYWwocHJvcGVydHkub3B0aW9uc1BhdGgpIHx8IGlzU3RyaW5nV2l0aFZhbChwcm9wZXJ0eS5lbmRwb2ludCkpIHtcclxuICAgICAgICAgICAgcmV0dXJuIGN1c3RvbWl6ZU1vZGVscyhwcm9wZXJ0eSwgc2NoZW1hLCBEeW5hbWljU2VsZWN0TW9kZWwsIHRoaXMuZ2V0Rm9ybVNlbGVjdENvbmZpZyhwcm9wZXJ0eSwgc2NoZW1hKSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHN3aXRjaCAocHJvcGVydHkudHlwZSkge1xyXG4gICAgICAgICAgICBjYXNlIFwic3RyaW5nXCI6XHJcbiAgICAgICAgICAgIGNhc2UgXCJudW1iZXJcIjpcclxuICAgICAgICAgICAgY2FzZSBcImludGVnZXJcIjpcclxuICAgICAgICAgICAgY2FzZSBcInRleHRhcmVhXCI6XHJcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5jaGVja0lzRWRpdG9yUHJvcGVydHkocHJvcGVydHkpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGN1c3RvbWl6ZU1vZGVscyhwcm9wZXJ0eSwgc2NoZW1hLCBEeW5hbWljRWRpdG9yTW9kZWwsIHRoaXMuZ2V0Rm9ybUVkaXRvckNvbmZpZyhwcm9wZXJ0eSwgc2NoZW1hKSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBpZiAocHJvcGVydHkuZm9ybWF0ID09IFwidGV4dGFyZWFcIikge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBjdXN0b21pemVNb2RlbHMocHJvcGVydHksIHNjaGVtYSwgRHluYW1pY1RleHRBcmVhTW9kZWwsIHRoaXMuZ2V0Rm9ybVRleHRhcmVhQ29uZmlnKHByb3BlcnR5LCBzY2hlbWEpKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGlmIChwcm9wZXJ0eS5mb3JtYXQgPT0gXCJkYXRlXCIpIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gY3VzdG9taXplTW9kZWxzKHByb3BlcnR5LCBzY2hlbWEsIER5bmFtaWNEYXRlUGlja2VyTW9kZWwsIHRoaXMuZ2V0Rm9ybURhdGVwaWNrZXJDb25maWcocHJvcGVydHksIHNjaGVtYSkpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGN1c3RvbWl6ZU1vZGVscyhwcm9wZXJ0eSwgc2NoZW1hLCBEeW5hbWljSW5wdXRNb2RlbCwgdGhpcy5nZXRGb3JtSW5wdXRDb25maWcocHJvcGVydHksIHNjaGVtYSkpO1xyXG4gICAgICAgICAgICBjYXNlIFwib2JqZWN0XCI6XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gY3VzdG9taXplTW9kZWxzKHByb3BlcnR5LCBzY2hlbWEsIER5bmFtaWNFZGl0b3JNb2RlbCwgdGhpcy5nZXRGb3JtRWRpdG9yQ29uZmlnKHByb3BlcnR5LCBzY2hlbWEpKTtcclxuICAgICAgICAgICAgY2FzZSBcImJvb2xlYW5cIjpcclxuICAgICAgICAgICAgICAgIHJldHVybiBjdXN0b21pemVNb2RlbHMocHJvcGVydHksIHNjaGVtYSwgRHluYW1pY0NoZWNrYm94TW9kZWwsIHRoaXMuZ2V0Rm9ybUNoZWNrYm94Q29uZmlnKHByb3BlcnR5LCBzY2hlbWEpKTtcclxuICAgICAgICAgICAgY2FzZSBcImFycmF5XCI6XHJcbiAgICAgICAgICAgICAgICBpZiAoZmluZFJlZnMocHJvcGVydHkpLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gY3VzdG9taXplTW9kZWxzKHByb3BlcnR5LCBzY2hlbWEsIER5bmFtaWNGb3JtQXJyYXlNb2RlbCwgdGhpcy5nZXRGb3JtQXJyYXlDb25maWcocHJvcGVydHksIHNjaGVtYSwgY3VzdG9taXplTW9kZWxzKSk7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBjdXN0b21pemVNb2RlbHMocHJvcGVydHksIHNjaGVtYSwgRHluYW1pY0lucHV0TW9kZWwsIHRoaXMuZ2V0Rm9ybUlucHV0Q29uZmlnKHByb3BlcnR5LCBzY2hlbWEpKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY2FzZSBcImZpbGVcIjpcclxuICAgICAgICAgICAgICAgIHJldHVybiBjdXN0b21pemVNb2RlbHMocHJvcGVydHksIHNjaGVtYSwgRHluYW1pY0ZpbGVVcGxvYWRNb2RlbCwgdGhpcy5nZXRGb3JtVXBsb2FkQ29uZmlnKHByb3BlcnR5LCBzY2hlbWEpKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGZpbmRSZWZzKHByb3BlcnR5KS5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBjdXN0b21pemVNb2RlbHMocHJvcGVydHksIHNjaGVtYSwgRHluYW1pY0Zvcm1Hcm91cE1vZGVsLCB0aGlzLmdldEZvcm1Hcm91cENvbmZpZyhwcm9wZXJ0eSwgc2NoZW1hLCBjdXN0b21pemVNb2RlbHMpKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIFtdO1xyXG4gICAgfVxyXG5cclxuICAgIGZpbmRNb2RlbEJ5UGF0aChwYXJlbnQ6IER5bmFtaWNQYXRoYWJsZSB8IER5bmFtaWNGb3JtTW9kZWwsIHBhdGg6IHN0cmluZ1tdKTogRHluYW1pY1BhdGhhYmxlIHtcclxuICAgICAgICBpZiAocGF0aC5sZW5ndGggPT0gMCkgcmV0dXJuIHBhcmVudCBhcyBEeW5hbWljUGF0aGFibGU7XHJcbiAgICAgICAgY29uc3QgbmV4dCA9IHBhdGguc2hpZnQoKSBhcyBhbnk7XHJcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkocGFyZW50KSkge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5maW5kTW9kZWxCeVBhdGgocGFyZW50LmZpbmQodCA9PiB0LmlkID09IG5leHQpLCBwYXRoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHBhcmVudCBpbnN0YW5jZW9mIER5bmFtaWNGb3JtR3JvdXBNb2RlbCB8fCBwYXJlbnQgaW5zdGFuY2VvZiBEeW5hbWljRm9ybUFycmF5R3JvdXBNb2RlbCkge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5maW5kTW9kZWxCeVBhdGgocGFyZW50Lmdyb3VwLmZpbmQodCA9PiB0LmlkID09IG5leHQpLCBwYXRoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHBhcmVudCBpbnN0YW5jZW9mIER5bmFtaWNGb3JtQXJyYXlNb2RlbCkge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5maW5kTW9kZWxCeVBhdGgocGFyZW50Lmdyb3Vwcy5maW5kKHQgPT4gdC5pbmRleCA9PSBuZXh0KSwgcGF0aCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBwYXJlbnQ7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0Rm9ybUNvbnRyb2xDb25maWcocHJvcGVydHk6IElPcGVuQXBpU2NoZW1hUHJvcGVydHksIHNjaGVtYTogSU9wZW5BcGlTY2hlbWEpOiBEeW5hbWljRm9ybVZhbHVlQ29udHJvbE1vZGVsQ29uZmlnPGFueT4ge1xyXG4gICAgICAgIGNvbnN0IHZhbGlkYXRvcnMgPSB0aGlzLmdldFZhbGlkYXRvcnMocHJvcGVydHksIHNjaGVtYSk7XHJcbiAgICAgICAgY29uc3QgZXJyb3JNZXNzYWdlcyA9IE9iamVjdC5rZXlzKHZhbGlkYXRvcnMpLnJlZHVjZSgocmVzLCBrZXkpID0+IHtcclxuICAgICAgICAgICAgcmVzW2tleV0gPSBgZXJyb3IuJHtrZXl9YDtcclxuICAgICAgICAgICAgcmV0dXJuIHJlcztcclxuICAgICAgICB9LCB7fSk7XHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgaWQ6IHByb3BlcnR5LmlkLFxyXG4gICAgICAgICAgICBsYWJlbDogT2JqZWN0VXRpbHMuaXNTdHJpbmcocHJvcGVydHkubGFiZWwpID8gcHJvcGVydHkubGFiZWwgOiBwcm9wZXJ0eS5pZCxcclxuICAgICAgICAgICAgaGlkZGVuOiBwcm9wZXJ0eS5oaWRkZW4sXHJcbiAgICAgICAgICAgIGRpc2FibGVkOiBwcm9wZXJ0eS5kaXNhYmxlZCxcclxuICAgICAgICAgICAgdmFsaWRhdG9ycyxcclxuICAgICAgICAgICAgZXJyb3JNZXNzYWdlcyxcclxuICAgICAgICAgICAgYWRkaXRpb25hbDogT2JqZWN0LmFzc2lnbih7fSwgcHJvcGVydHkpXHJcbiAgICAgICAgfTtcclxuICAgIH1cclxuXHJcbiAgICBnZXRGb3JtQXJyYXlDb25maWcocHJvcGVydHk6IElPcGVuQXBpU2NoZW1hUHJvcGVydHksIHNjaGVtYTogSU9wZW5BcGlTY2hlbWEsIGN1c3RvbWl6ZU1vZGVsczogRm9ybU1vZGVsQ3VzdG9taXplcldyYXApOiBEeW5hbWljRm9ybUFycmF5TW9kZWxDb25maWcge1xyXG4gICAgICAgIGNvbnN0IHN1YlNjaGVtYXMgPSBmaW5kUmVmcyhwcm9wZXJ0eSkubWFwKHJlZiA9PiB0aGlzLnNjaGVtYXNbcmVmXSk7XHJcbiAgICAgICAgcmV0dXJuIE9iamVjdC5hc3NpZ24oXHJcbiAgICAgICAgICAgIHRoaXMuZ2V0Rm9ybUNvbnRyb2xDb25maWcocHJvcGVydHksIHNjaGVtYSksXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIGdyb3VwRmFjdG9yeTogKCkgPT4gbWVyZ2VGb3JtTW9kZWxzKHN1YlNjaGVtYXMubWFwKHMgPT4gdGhpcy5nZXRGb3JtTW9kZWxGb3JTY2hlbWFEZWYocywgY3VzdG9taXplTW9kZWxzKSkpLFxyXG4gICAgICAgICAgICAgICAgc29ydGFibGU6IHByb3BlcnR5LnNvcnRhYmxlIHx8IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgdXNlVGFiczogcHJvcGVydHkudXNlVGFicyB8fCBmYWxzZSxcclxuICAgICAgICAgICAgICAgIGFkZEl0ZW06IHByb3BlcnR5LmFkZEl0ZW0gIT09IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgaW5zZXJ0SXRlbTogcHJvcGVydHkuaW5zZXJ0SXRlbSAhPT0gZmFsc2UsXHJcbiAgICAgICAgICAgICAgICBjbG9uZUl0ZW06IHByb3BlcnR5LmNsb25lSXRlbSAhPT0gZmFsc2UsXHJcbiAgICAgICAgICAgICAgICBtb3ZlSXRlbTogcHJvcGVydHkubW92ZUl0ZW0gIT09IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgcmVtb3ZlSXRlbTogcHJvcGVydHkucmVtb3ZlSXRlbSAhPT0gZmFsc2UsXHJcbiAgICAgICAgICAgICAgICBjbGVhckl0ZW1zOiBwcm9wZXJ0eS5jbGVhckl0ZW1zICE9PSBmYWxzZVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICBnZXRGb3JtR3JvdXBDb25maWcocHJvcGVydHk6IElPcGVuQXBpU2NoZW1hUHJvcGVydHksIHNjaGVtYTogSU9wZW5BcGlTY2hlbWEsIGN1c3RvbWl6ZU1vZGVsczogRm9ybU1vZGVsQ3VzdG9taXplcldyYXApOiBEeW5hbWljRm9ybUdyb3VwTW9kZWxDb25maWcge1xyXG4gICAgICAgIGNvbnN0IHN1YlNjaGVtYXMgPSBmaW5kUmVmcyhwcm9wZXJ0eSkubWFwKHJlZiA9PiB0aGlzLnNjaGVtYXNbcmVmXSk7XHJcbiAgICAgICAgcmV0dXJuIE9iamVjdC5hc3NpZ24oXHJcbiAgICAgICAgICAgIHRoaXMuZ2V0Rm9ybUNvbnRyb2xDb25maWcocHJvcGVydHksIHNjaGVtYSksXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIGdyb3VwOiBtZXJnZUZvcm1Nb2RlbHMoc3ViU2NoZW1hcy5tYXAocyA9PiB0aGlzLmdldEZvcm1Nb2RlbEZvclNjaGVtYURlZihzLCBjdXN0b21pemVNb2RlbHMpKSlcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0Rm9ybUlucHV0Q29uZmlnKHByb3BlcnR5OiBJT3BlbkFwaVNjaGVtYVByb3BlcnR5LCBzY2hlbWE6IElPcGVuQXBpU2NoZW1hKTogRHluYW1pY0lucHV0TW9kZWxDb25maWcge1xyXG4gICAgICAgIGxldCBpbnB1dFR5cGUgPSBTdHJpbmdVdGlscy5oYXMocHJvcGVydHkuaWQsIFwicGFzc3dvcmRcIiwgXCJQYXNzd29yZFwiKSA/IFwicGFzc3dvcmRcIiA6IChwcm9wZXJ0eS5mb3JtYXQgfHwgcHJvcGVydHkuaXRlbXM/LnR5cGUgfHwgcHJvcGVydHkudHlwZSk7XHJcbiAgICAgICAgc3dpdGNoIChpbnB1dFR5cGUpIHtcclxuICAgICAgICAgICAgY2FzZSBcImJvb2xlYW5cIjpcclxuICAgICAgICAgICAgICAgIGlucHV0VHlwZSA9IFwiY2hlY2tib3hcIjtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlIFwidGV4dGFyZWFcIjpcclxuICAgICAgICAgICAgICAgIGlucHV0VHlwZSA9IFwidGV4dGFyZWFcIjtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlIFwiaW50ZWdlclwiOlxyXG4gICAgICAgICAgICAgICAgaW5wdXRUeXBlID0gXCJudW1iZXJcIjtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBzdWIgPSBwcm9wZXJ0eS50eXBlID09IFwiYXJyYXlcIiA/IHByb3BlcnR5Lml0ZW1zIHx8IHByb3BlcnR5IDogcHJvcGVydHk7XHJcbiAgICAgICAgcmV0dXJuIE9iamVjdC5hc3NpZ24oXHJcbiAgICAgICAgICAgIHRoaXMuZ2V0Rm9ybUNvbnRyb2xDb25maWcocHJvcGVydHksIHNjaGVtYSksXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIGlucHV0VHlwZSxcclxuICAgICAgICAgICAgICAgIGF1dG9Db21wbGV0ZTogcHJvcGVydHkuYXV0b0NvbXBsZXRlIHx8IFwib2ZmXCIsXHJcbiAgICAgICAgICAgICAgICBtdWx0aXBsZTogcHJvcGVydHkudHlwZSA9PSBcImFycmF5XCIsXHJcbiAgICAgICAgICAgICAgICBhY2NlcHQ6IE9iamVjdFV0aWxzLmlzU3RyaW5nKHByb3BlcnR5LmFjY2VwdCkgPyBwcm9wZXJ0eS5hY2NlcHQgOiBudWxsLFxyXG4gICAgICAgICAgICAgICAgbWFzazogT2JqZWN0VXRpbHMuaXNTdHJpbmcocHJvcGVydHkubWFzaykgPyBwcm9wZXJ0eS5tYXNrIDogbnVsbCxcclxuICAgICAgICAgICAgICAgIHBhdHRlcm46IE9iamVjdFV0aWxzLmlzU3RyaW5nKHByb3BlcnR5LnBhdHRlcm4pID8gcHJvcGVydHkucGF0dGVybiA6IG51bGwsXHJcbiAgICAgICAgICAgICAgICBzdGVwOiBpc05hTihzdWIuc3RlcCkgPyAoaXNOYU4ocHJvcGVydHkuc3RlcCkgPyAxIDogcHJvcGVydHkuc3RlcCkgOiBzdWIuc3RlcCxcclxuICAgICAgICAgICAgICAgIG1pbjogaXNOYU4oc3ViLm1pbmltdW0pID8gTUlOX0lOUFVUX05VTSA6IHN1Yi5taW5pbXVtLFxyXG4gICAgICAgICAgICAgICAgbWF4OiBpc05hTihzdWIubWF4aW11bSkgPyBNQVhfSU5QVVRfTlVNIDogc3ViLm1heGltdW0sXHJcbiAgICAgICAgICAgICAgICBtaW5MZW5ndGg6IGlzTmFOKHN1Yi5taW5MZW5ndGgpID8gMCA6IHN1Yi5taW5MZW5ndGgsXHJcbiAgICAgICAgICAgICAgICBtYXhMZW5ndGg6IGlzTmFOKHN1Yi5tYXhMZW5ndGgpID8gTUFYX0lOUFVUX05VTSA6IHN1Yi5tYXhMZW5ndGgsXHJcbiAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcjogcHJvcGVydHkucGxhY2Vob2xkZXIgfHwgXCJcIlxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICBnZXRGb3JtRWRpdG9yQ29uZmlnKHByb3BlcnR5OiBJT3BlbkFwaVNjaGVtYVByb3BlcnR5LCBzY2hlbWE6IElPcGVuQXBpU2NoZW1hKTogRHluYW1pY0VkaXRvck1vZGVsQ29uZmlnIHtcclxuICAgICAgICBjb25zdCBzdWIgPSBwcm9wZXJ0eS50eXBlID09IFwiYXJyYXlcIiA/IHByb3BlcnR5Lml0ZW1zIHx8IHByb3BlcnR5IDogcHJvcGVydHk7XHJcbiAgICAgICAgcmV0dXJuIE9iamVjdC5hc3NpZ24oXHJcbiAgICAgICAgICAgIHRoaXMuZ2V0Rm9ybUNvbnRyb2xDb25maWcocHJvcGVydHksIHNjaGVtYSksXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIGlucHV0VHlwZTogcHJvcGVydHkuZm9ybWF0IHx8IFwianNvblwiLFxyXG4gICAgICAgICAgICAgICAgY29udmVydE9iamVjdDogcHJvcGVydHkudHlwZSAhPT0gXCJzdHJpbmdcIixcclxuICAgICAgICAgICAgICAgIGF1dG9Db21wbGV0ZTogcHJvcGVydHkuYXV0b0NvbXBsZXRlIHx8IFwib2ZmXCIsXHJcbiAgICAgICAgICAgICAgICBtdWx0aXBsZTogcHJvcGVydHkudHlwZSA9PSBcImFycmF5XCIsXHJcbiAgICAgICAgICAgICAgICBhY2NlcHQ6IE9iamVjdFV0aWxzLmlzU3RyaW5nKHByb3BlcnR5LmFjY2VwdCkgPyBwcm9wZXJ0eS5hY2NlcHQgOiBudWxsLFxyXG4gICAgICAgICAgICAgICAgbWFzazogT2JqZWN0VXRpbHMuaXNTdHJpbmcocHJvcGVydHkubWFzaykgPyBwcm9wZXJ0eS5tYXNrIDogbnVsbCxcclxuICAgICAgICAgICAgICAgIHBhdHRlcm46IE9iamVjdFV0aWxzLmlzU3RyaW5nKHByb3BlcnR5LnBhdHRlcm4pID8gcHJvcGVydHkucGF0dGVybiA6IG51bGwsXHJcbiAgICAgICAgICAgICAgICBzdGVwOiBpc05hTihzdWIuc3RlcCkgPyAoaXNOYU4ocHJvcGVydHkuc3RlcCkgPyAxIDogcHJvcGVydHkuc3RlcCkgOiBzdWIuc3RlcCxcclxuICAgICAgICAgICAgICAgIG1pbkxlbmd0aDogaXNOYU4oc3ViLm1pbkxlbmd0aCkgPyAwIDogc3ViLm1pbkxlbmd0aCxcclxuICAgICAgICAgICAgICAgIG1heExlbmd0aDogaXNOYU4oc3ViLm1heExlbmd0aCkgPyBNQVhfSU5QVVRfTlVNIDogc3ViLm1heExlbmd0aCxcclxuICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyOiBwcm9wZXJ0eS5wbGFjZWhvbGRlciB8fCBcIlwiXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIGdldEZvcm1UZXh0YXJlYUNvbmZpZyhwcm9wZXJ0eTogSU9wZW5BcGlTY2hlbWFQcm9wZXJ0eSwgc2NoZW1hOiBJT3BlbkFwaVNjaGVtYSk6IER5bmFtaWNUZXh0QXJlYU1vZGVsQ29uZmlnIHtcclxuICAgICAgICByZXR1cm4gT2JqZWN0LmFzc2lnbihcclxuICAgICAgICAgICAgdGhpcy5nZXRGb3JtQ29udHJvbENvbmZpZyhwcm9wZXJ0eSwgc2NoZW1hKSxcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgY29sczogcHJvcGVydHkuY29scyB8fCBudWxsLFxyXG4gICAgICAgICAgICAgICAgcm93czogcHJvcGVydHkucm93cyB8fCAxMCxcclxuICAgICAgICAgICAgICAgIHdyYXA6IHByb3BlcnR5LndyYXAgfHwgZmFsc2UsXHJcbiAgICAgICAgICAgICAgICBhdXRvQ29tcGxldGU6IHByb3BlcnR5LmF1dG9Db21wbGV0ZSB8fCBcIm9mZlwiLFxyXG4gICAgICAgICAgICAgICAgbXVsdGlwbGU6IHByb3BlcnR5LnR5cGUgPT0gXCJhcnJheVwiXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIGdldEZvcm1EYXRlcGlja2VyQ29uZmlnKHByb3BlcnR5OiBJT3BlbkFwaVNjaGVtYVByb3BlcnR5LCBzY2hlbWE6IElPcGVuQXBpU2NoZW1hKTogRHluYW1pY0RhdGVQaWNrZXJNb2RlbENvbmZpZyB7XHJcbiAgICAgICAgcmV0dXJuIE9iamVjdC5hc3NpZ24oXHJcbiAgICAgICAgICAgIHRoaXMuZ2V0Rm9ybUNvbnRyb2xDb25maWcocHJvcGVydHksIHNjaGVtYSksXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIGZvcm1hdDogcHJvcGVydHkuZGF0ZUZvcm1hdCB8fCBcImRkLk1NLnl5eXlcIixcclxuICAgICAgICAgICAgICAgIG1pbjogdGhpcy5jb252ZXJ0VG9EYXRlKHByb3BlcnR5Lm1pbiksXHJcbiAgICAgICAgICAgICAgICBtYXg6IHRoaXMuY29udmVydFRvRGF0ZShwcm9wZXJ0eS5tYXgpLFxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICBnZXRGb3JtU2VsZWN0T3B0aW9ucyhwcm9wZXJ0eTogSU9wZW5BcGlTY2hlbWFQcm9wZXJ0eSwgc2NoZW1hOiBJT3BlbkFwaVNjaGVtYSkge1xyXG4gICAgICAgIGNvbnN0ICRlbnVtID0gcHJvcGVydHkuaXRlbXM/LmVudW0gfHwgcHJvcGVydHkuZW51bTtcclxuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheSgkZW51bSkpIHtcclxuICAgICAgICAgICAgcmV0dXJuIG5ldyBGb3JtU2VsZWN0U3ViamVjdCgoc2VsZWN0TW9kZWwsIGZvcm1Db250cm9sKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBvcHRpb25zID0gJGVudW0ubWFwKHZhbHVlID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBsYWJlbCA9IHByb3BlcnR5LnRyYW5zbGF0YWJsZSA/IGAke3Byb3BlcnR5LmlkfS4ke3ZhbHVlfWAgOiBgJHt2YWx1ZX1gO1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB7dmFsdWUsIGxhYmVsfTtcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZml4U2VsZWN0T3B0aW9ucyhzZWxlY3RNb2RlbCwgZm9ybUNvbnRyb2wsIG9wdGlvbnMpO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGlzU3RyaW5nV2l0aFZhbChwcm9wZXJ0eS5vcHRpb25zUGF0aCkpIHtcclxuICAgICAgICAgICAgcmV0dXJuIG5ldyBGb3JtU2VsZWN0U3ViamVjdChhc3luYyAoc2VsZWN0TW9kZWwsIGNvbnRyb2wsIHJvb3QsIGluZGV4ZXMpID0+IHtcclxuICAgICAgICAgICAgICAgIGxldCBwYXRoID0gcHJvcGVydHkub3B0aW9uc1BhdGggYXMgc3RyaW5nO1xyXG4gICAgICAgICAgICAgICAgbGV0IHRhcmdldCA9IGNvbnRyb2wgYXMgQWJzdHJhY3RDb250cm9sO1xyXG4gICAgICAgICAgICAgICAgbGV0IG1vZGVsOiBEeW5hbWljUGF0aGFibGUgfCBEeW5hbWljRm9ybU1vZGVsID0gc2VsZWN0TW9kZWw7XHJcbiAgICAgICAgICAgICAgICBpZiAocGF0aC5zdGFydHNXaXRoKFwiJHJvb3RcIikpIHtcclxuICAgICAgICAgICAgICAgICAgICBwYXRoID0gcGF0aC5zdWJzdHIoNSk7XHJcbiAgICAgICAgICAgICAgICAgICAgd2hpbGUgKHRhcmdldC5wYXJlbnQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGFyZ2V0ID0gdGFyZ2V0LnBhcmVudDtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgbW9kZWwgPSByb290O1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgd2hpbGUgKHBhdGguc3RhcnRzV2l0aChcIi5cIikpIHtcclxuICAgICAgICAgICAgICAgICAgICBwYXRoID0gcGF0aC5zdWJzdHIoMSk7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRhcmdldC5wYXJlbnQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGFyZ2V0ID0gdGFyZ2V0LnBhcmVudDtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgbW9kZWwgPSAobW9kZWwgYXMgRHluYW1pY1BhdGhhYmxlKS5wYXJlbnQgfHwgcm9vdDtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIE9iamVjdC5rZXlzKGluZGV4ZXMpLmZvckVhY2goa2V5ID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBwYXRoID0gcGF0aC5yZXBsYWNlKGtleSwgaW5kZXhlc1trZXldKTtcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgbW9kZWwgPSB0aGlzLmZpbmRNb2RlbEJ5UGF0aChtb2RlbCwgcGF0aC5zcGxpdChcIi5cIikpO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgbW9kZWxPcHRpb25zID0gbW9kZWwgaW5zdGFuY2VvZiBEeW5hbWljU2VsZWN0TW9kZWxcclxuICAgICAgICAgICAgICAgICAgICA/IGF3YWl0IGZpcnN0VmFsdWVGcm9tKG1vZGVsLm9wdGlvbnMkKSA6XHJcbiAgICAgICAgICAgICAgICAgICAgW107XHJcbiAgICAgICAgICAgICAgICBjb25zdCB2YWx1ZSA9IE9iamVjdFV0aWxzLmdldFZhbHVlKHRhcmdldC52YWx1ZSwgcGF0aCk7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBvcHRpb25zID0gKCFPYmplY3RVdGlscy5pc0FycmF5KHZhbHVlKSA/IFtdIDogdmFsdWUpLm1hcCh2YWx1ZSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgbW9kZWxPcHRpb24gPSBtb2RlbE9wdGlvbnMuZmluZCh0ID0+IHQudmFsdWUgPT0gdmFsdWUpO1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB7dmFsdWUsIGxhYmVsOiBtb2RlbE9wdGlvbj8ubGFiZWwgfHwgdmFsdWV9O1xyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5maXhTZWxlY3RPcHRpb25zKHNlbGVjdE1vZGVsLCBjb250cm9sLCBvcHRpb25zKTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBuZXcgRm9ybVNlbGVjdFN1YmplY3QoYXN5bmMgKHNlbGVjdE1vZGVsLCBjb250cm9sKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuYXBpLmNhY2hlW3Byb3BlcnR5LmVuZHBvaW50XSA9IHRoaXMuYXBpLmNhY2hlW3Byb3BlcnR5LmVuZHBvaW50XSB8fCB0aGlzLmFwaS5saXN0KHByb3BlcnR5LmVuZHBvaW50LCB0aGlzLmFwaS5tYWtlTGlzdFBhcmFtcygxLCAtMSkpLnRoZW4ocmVzdWx0ID0+IHtcclxuICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQuaXRlbXMubWFwKGkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC4uLmksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBpLmlkIHx8IGkuX2lkLCBsYWJlbDogaVtwcm9wZXJ0eS5sYWJlbEZpZWxkXSB8fCBpLmxhYmVsIHx8IGkuaWQgfHwgaS5faWRcclxuICAgICAgICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICBjb25zdCBvcHRpb25zID0gKGF3YWl0IHRoaXMuYXBpLmNhY2hlW3Byb3BlcnR5LmVuZHBvaW50XSkubWFwKHQgPT4gT2JqZWN0LmFzc2lnbih7fSwgdCkpO1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5maXhTZWxlY3RPcHRpb25zKHNlbGVjdE1vZGVsLCBjb250cm9sLCBvcHRpb25zKTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBnZXRGb3JtU2VsZWN0Q29uZmlnKHByb3BlcnR5OiBJT3BlbkFwaVNjaGVtYVByb3BlcnR5LCBzY2hlbWE6IElPcGVuQXBpU2NoZW1hKTogRHluYW1pY1NlbGVjdE1vZGVsQ29uZmlnPGFueT4ge1xyXG4gICAgICAgIHJldHVybiBPYmplY3QuYXNzaWduKFxyXG4gICAgICAgICAgICB0aGlzLmdldEZvcm1Db250cm9sQ29uZmlnKHByb3BlcnR5LCBzY2hlbWEpLFxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICBvcHRpb25zOiB0aGlzLmdldEZvcm1TZWxlY3RPcHRpb25zKHByb3BlcnR5LCBzY2hlbWEpLFxyXG4gICAgICAgICAgICAgICAgbXVsdGlwbGU6IHByb3BlcnR5LnR5cGUgPT0gXCJhcnJheVwiLFxyXG4gICAgICAgICAgICAgICAgZ3JvdXBCeTogcHJvcGVydHkuZ3JvdXBCeSxcclxuICAgICAgICAgICAgICAgIGlubGluZTogcHJvcGVydHkuaW5saW5lXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIGdldEZvcm1VcGxvYWRDb25maWcocHJvcGVydHk6IElPcGVuQXBpU2NoZW1hUHJvcGVydHksIHNjaGVtYTogSU9wZW5BcGlTY2hlbWEpOiBEeW5hbWljRmlsZVVwbG9hZE1vZGVsQ29uZmlnIHtcclxuICAgICAgICBjb25zdCB1cmwgPSB0aGlzLmFwaS51cmwocHJvcGVydHkudXJsIHx8IFwiYXNzZXRzXCIpO1xyXG4gICAgICAgIGNvbnN0IHthY2NlcHQsIGF1dG9VcGxvYWQsIG1heFNpemUsIG1pblNpemUsIHJlbW92ZVVybCwgc2hvd0ZpbGVMaXN0fSA9IHByb3BlcnR5O1xyXG4gICAgICAgIHJldHVybiBPYmplY3QuYXNzaWduKHRoaXMuZ2V0Rm9ybUNvbnRyb2xDb25maWcocHJvcGVydHksIHNjaGVtYSksIHtcclxuICAgICAgICAgICAgdXJsLFxyXG4gICAgICAgICAgICBhY2NlcHQsXHJcbiAgICAgICAgICAgIGF1dG9VcGxvYWQsXHJcbiAgICAgICAgICAgIG1heFNpemUsXHJcbiAgICAgICAgICAgIG1pblNpemUsXHJcbiAgICAgICAgICAgIHJlbW92ZVVybCxcclxuICAgICAgICAgICAgc2hvd0ZpbGVMaXN0XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0Rm9ybUNoZWNrYm94Q29uZmlnKHByb3BlcnR5OiBJT3BlbkFwaVNjaGVtYVByb3BlcnR5LCBzY2hlbWE6IElPcGVuQXBpU2NoZW1hKTogRHluYW1pY0NoZWNrYm94TW9kZWxDb25maWcge1xyXG4gICAgICAgIHJldHVybiBPYmplY3QuYXNzaWduKFxyXG4gICAgICAgICAgICB0aGlzLmdldEZvcm1Db250cm9sQ29uZmlnKHByb3BlcnR5LCBzY2hlbWEpLFxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICBpbmRldGVybWluYXRlOiBwcm9wZXJ0eS5pbmRldGVybWluYXRlIHx8IGZhbHNlXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIGNsb25lRm9ybUFycmF5R3JvdXAoaW5kZXg6IG51bWJlciwgZm9ybUFycmF5OiBGb3JtQXJyYXksIGZvcm1BcnJheU1vZGVsOiBEeW5hbWljRm9ybUFycmF5TW9kZWwpIHtcclxuICAgICAgICB0aGlzLmluc2VydEZvcm1BcnJheUdyb3VwKGluZGV4LCBmb3JtQXJyYXksIGZvcm1BcnJheU1vZGVsKTtcclxuICAgICAgICB0aGlzLnBhdGNoR3JvdXAoZm9ybUFycmF5LmF0KGluZGV4ICsgMSkudmFsdWUsIGZvcm1BcnJheU1vZGVsLmdyb3Vwc1tpbmRleF0uZ3JvdXAsIGZvcm1BcnJheS5hdChpbmRleCkgYXMgRm9ybUdyb3VwKTtcclxuICAgICAgICBmb3JtQXJyYXlNb2RlbC5maWx0ZXJHcm91cHMoKTtcclxuICAgIH1cclxuXHJcbiAgICBwcm90ZWN0ZWQgYXN5bmMgZml4U2VsZWN0T3B0aW9ucyhtb2RlbDogRHluYW1pY1NlbGVjdE1vZGVsPGFueT4sIGNvbnRyb2w6IEZvcm1Db250cm9sLCBvcHRpb25zOiBEeW5hbWljRm9ybU9wdGlvbkNvbmZpZzxhbnk+W10pOiBQcm9taXNlPER5bmFtaWNGb3JtT3B0aW9uQ29uZmlnPGFueT5bXT4ge1xyXG4gICAgICAgIGlmICghb3B0aW9ucykgcmV0dXJuIFtdO1xyXG4gICAgICAgIGZvciAoY29uc3Qgb3B0aW9uIG9mIG9wdGlvbnMpIHtcclxuICAgICAgICAgICAgb3B0aW9uLmNsYXNzZXMgPSBbb3B0aW9uLmNsYXNzZXMsIG1vZGVsLmdldENsYXNzZXMob3B0aW9uLCBtb2RlbCwgY29udHJvbCwgdGhpcy5pbmplY3RvcildLmZpbHRlcihpc1N0cmluZ1dpdGhWYWwpLmpvaW4oXCIgXCIpO1xyXG4gICAgICAgICAgICBvcHRpb24ubGFiZWwgPSBhd2FpdCB0aGlzLmxhbmd1YWdlLmdldFRyYW5zbGF0aW9uKG9wdGlvbi5sYWJlbCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBvcHRpb25zO1xyXG4gICAgfVxyXG5cclxuICAgIHByb3RlY3RlZCBnZXRWYWxpZGF0b3JzKHByb3BlcnR5OiBJT3BlbkFwaVNjaGVtYVByb3BlcnR5LCBzY2hlbWE6IElPcGVuQXBpU2NoZW1hKTogRHluYW1pY1ZhbGlkYXRvcnNDb25maWcge1xyXG4gICAgICAgIGNvbnN0IHZhbGlkYXRvcnM6IER5bmFtaWNWYWxpZGF0b3JzQ29uZmlnID0ge307XHJcbiAgICAgICAgaWYgKE9iamVjdFV0aWxzLmlzQXJyYXkoc2NoZW1hLnJlcXVpcmVkKSAmJiBzY2hlbWEucmVxdWlyZWQuaW5kZXhPZihwcm9wZXJ0eS5pZCkgPj0gMCkge1xyXG4gICAgICAgICAgICB2YWxpZGF0b3JzLnJlcXVpcmVkID0gbnVsbDtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5hZGRQcm9wZXJ0eVZhbGlkYXRvcnModmFsaWRhdG9ycywgcHJvcGVydHkpO1xyXG4gICAgICAgIHRoaXMuYWRkSXRlbXNWYWxpZGF0b3JzKHZhbGlkYXRvcnMsIHByb3BlcnR5Lml0ZW1zKTtcclxuICAgICAgICByZXR1cm4gdmFsaWRhdG9ycztcclxuICAgIH1cclxuXHJcbiAgICBwcm90ZWN0ZWQgYWRkUHJvcGVydHlWYWxpZGF0b3JzKHZhbGlkYXRvcnM6IER5bmFtaWNWYWxpZGF0b3JzQ29uZmlnLCBwcm9wZXJ0eTogSU9wZW5BcGlTY2hlbWFQcm9wZXJ0eSk6IHZvaWQge1xyXG4gICAgICAgIGlmICghcHJvcGVydHkpIHJldHVybjtcclxuICAgICAgICBpZiAoIWlzTmFOKHByb3BlcnR5Lm1pbkxlbmd0aCkpIHtcclxuICAgICAgICAgICAgdmFsaWRhdG9ycy5taW5MZW5ndGggPSBwcm9wZXJ0eS5taW5MZW5ndGg7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICghaXNOYU4ocHJvcGVydHkubWF4TGVuZ3RoKSkge1xyXG4gICAgICAgICAgICB2YWxpZGF0b3JzLm1heExlbmd0aCA9IHByb3BlcnR5Lm1heExlbmd0aDtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKCFpc05hTihwcm9wZXJ0eS5taW5pbXVtKSkge1xyXG4gICAgICAgICAgICB2YWxpZGF0b3JzLm1pbiA9IHByb3BlcnR5Lm1pbmltdW07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICghaXNOYU4ocHJvcGVydHkubWF4aW11bSkpIHtcclxuICAgICAgICAgICAgdmFsaWRhdG9ycy5tYXggPSBwcm9wZXJ0eS5tYXhpbXVtO1xyXG4gICAgICAgIH1cclxuICAgICAgICBzd2l0Y2ggKHByb3BlcnR5LmZvcm1hdCkge1xyXG4gICAgICAgICAgICBjYXNlIFwiZW1haWxcIjpcclxuICAgICAgICAgICAgICAgIHZhbGlkYXRvcnMuZW1haWwgPSBudWxsO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHByb3RlY3RlZCBhZGRJdGVtc1ZhbGlkYXRvcnModmFsaWRhdG9yczogRHluYW1pY1ZhbGlkYXRvcnNDb25maWcsIGl0ZW1zOiBJT3BlbkFwaVNjaGVtYVByb3BlcnR5KTogdm9pZCB7XHJcbiAgICAgICAgaWYgKCFpdGVtcykgcmV0dXJuO1xyXG4gICAgICAgIGlmICghaXNOYU4oaXRlbXMubWluTGVuZ3RoKSkge1xyXG4gICAgICAgICAgICB2YWxpZGF0b3JzLml0ZW1zTWluTGVuZ3RoID0gaXRlbXMubWluTGVuZ3RoO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoIWlzTmFOKGl0ZW1zLm1heExlbmd0aCkpIHtcclxuICAgICAgICAgICAgdmFsaWRhdG9ycy5pdGVtc01heExlbmd0aCA9IGl0ZW1zLm1heExlbmd0aDtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKCFpc05hTihpdGVtcy5taW5pbXVtKSkge1xyXG4gICAgICAgICAgICB2YWxpZGF0b3JzLml0ZW1zTWluVmFsdWUgPSBpdGVtcy5taW5pbXVtO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoIWlzTmFOKGl0ZW1zLm1heGltdW0pKSB7XHJcbiAgICAgICAgICAgIHZhbGlkYXRvcnMuaXRlbXNNYXhWYWx1ZSA9IGl0ZW1zLm1heGltdW07XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59XHJcbiJdfQ==
@@ -15,5 +15,5 @@ export { DynamicBaseFormControlContainerComponent } from "./ngx-dynamic-form/com
15
15
  export { DynamicBaseFormGroupComponent } from "./ngx-dynamic-form/components/base/dynamic-base-form-group.component";
16
16
  export { DynamicBaseSelectComponent } from "./ngx-dynamic-form/components/base/dynamic-base-select.component";
17
17
  export { NgxDynamicFormModule } from "./ngx-dynamic-form/ngx-dynamic-form.module";
18
- export { DYNAMIC_FORM_CONTROL_TYPE_ARRAY, DYNAMIC_FORM_CONTROL_TYPE_CHECKBOX, DYNAMIC_FORM_CONTROL_TYPE_CHECKBOX_GROUP, DYNAMIC_FORM_CONTROL_TYPE_FILE_UPLOAD, DYNAMIC_FORM_CONTROL_TYPE_GROUP, DYNAMIC_FORM_CONTROL_TYPE_INPUT, DYNAMIC_FORM_CONTROL_TYPE_RADIO_GROUP, DYNAMIC_FORM_CONTROL_TYPE_SELECT, DYNAMIC_FORM_CONTROL_TYPE_TEXTAREA, DYNAMIC_FORM_CONTROL_TYPE_EDITOR, DynamicTemplateDirective, DynamicListDirective, DynamicFormsCoreModule, DynamicCheckboxModel, DynamicCheckboxGroupModel, DynamicFileUploadModel, DynamicFormGroupModel, DynamicInputModel, DynamicRadioGroupModel, DynamicTextAreaModel } from "@ng-dynamic-forms/core";
19
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljX2FwaS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9wdWJsaWNfYXBpLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFVSCxpQkFBaUIsRUFDakIsZ0JBQWdCLEVBQ2hCLFNBQVMsRUFDVCxVQUFVLEVBQ1YsVUFBVSxFQUNWLFNBQVMsRUFDVCxRQUFRLEVBQ1IsaUJBQWlCLEVBQ2pCLGNBQWMsRUFDZCxpQkFBaUIsRUFDakIsZUFBZSxFQUNmLGdCQUFnQixFQUNoQixnQkFBZ0IsRUFDaEIsZUFBZSxFQUNmLGlCQUFpQixFQUVwQixNQUFNLGlDQUFpQyxDQUFDO0FBRXpDLE9BQU8sRUFDSCxtQkFBbUIsRUFDbkIsZUFBZSxFQUNmLGFBQWEsRUFDYixhQUFhLEVBQ2IsY0FBYyxFQUNqQixNQUFNLCtCQUErQixDQUFDO0FBRXZDLE9BQU8sRUFDSCxZQUFZLEVBQ1osMkJBQTJCLEVBQzNCLGFBQWEsRUFDYixzQkFBc0IsRUFDdEIsc0JBQXNCLEVBQ3RCLHFCQUFxQixFQUNyQixxQkFBcUIsRUFDeEIsTUFBTSxxQ0FBcUMsQ0FBQztBQUU3QyxPQUFPLEVBRUgsa0JBQWtCLEVBQ3JCLE1BQU0sK0NBQStDLENBQUM7QUFFdkQsT0FBTyxFQUlILDBCQUEwQixFQUUxQixxQkFBcUIsRUFDeEIsTUFBTSxtREFBbUQsQ0FBQztBQUUzRCxPQUFPLEVBRUgsaUJBQWlCLEVBSWpCLGtCQUFrQixFQUNyQixNQUFNLCtDQUErQyxDQUFDO0FBRXZELE9BQU8sRUFBQyxpQkFBaUIsRUFBQyxNQUFNLDhDQUE4QyxDQUFDO0FBQy9FLE9BQU8sRUFBQyxXQUFXLEVBQUMsTUFBTSx1Q0FBdUMsQ0FBQztBQUVsRSxPQUFPLEVBQUMsa0JBQWtCLEVBQUMsTUFBTSxrREFBa0QsQ0FBQztBQUVwRixPQUFPLEVBQUMsb0JBQW9CLEVBQUMsTUFBTSxzREFBc0QsQ0FBQztBQUUxRixPQUFPLEVBQUMsd0JBQXdCLEVBQUMsTUFBTSxnRUFBZ0UsQ0FBQztBQUN4RyxPQUFPLEVBQUMsNkJBQTZCLEVBQUMsTUFBTSxzRUFBc0UsQ0FBQztBQUNuSCxPQUFPLEVBQ0gsK0JBQStCLEVBQ2xDLE1BQU0sd0VBQXdFLENBQUM7QUFDaEYsT0FBTyxFQUNILHdDQUF3QyxFQUMzQyxNQUFNLGtGQUFrRixDQUFDO0FBQzFGLE9BQU8sRUFBQyw2QkFBNkIsRUFBQyxNQUFNLHNFQUFzRSxDQUFDO0FBQ25ILE9BQU8sRUFBQywwQkFBMEIsRUFBQyxNQUFNLGtFQUFrRSxDQUFDO0FBRTVHLE9BQU8sRUFBQyxvQkFBb0IsRUFBQyxNQUFNLDRDQUE0QyxDQUFDO0FBRWhGLE9BQU8sRUFDSCwrQkFBK0IsRUFDL0Isa0NBQWtDLEVBQ2xDLHdDQUF3QyxFQUN4QyxxQ0FBcUMsRUFDckMsK0JBQStCLEVBQy9CLCtCQUErQixFQUMvQixxQ0FBcUMsRUFDckMsZ0NBQWdDLEVBQ2hDLGtDQUFrQyxFQUNsQyxnQ0FBZ0MsRUFDaEMsd0JBQXdCLEVBQ3hCLG9CQUFvQixFQUdwQixzQkFBc0IsRUFFdEIsb0JBQW9CLEVBQ3BCLHlCQUF5QixFQUV6QixzQkFBc0IsRUFFdEIscUJBQXFCLEVBRXJCLGlCQUFpQixFQUVqQixzQkFBc0IsRUFFdEIsb0JBQW9CLEVBQ3ZCLE1BQU0sd0JBQXdCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQge1xyXG4gICAgSUR5bmFtaWNGb3JtRXZlbnQsXHJcbiAgICBJRHluYW1pY0Zvcm0sXHJcbiAgICBGb3JtQ29udHJvbFNlcmlhbGl6ZXIsXHJcbiAgICBGb3JtTW9kZWxDdXN0b21pemVyLFxyXG4gICAgRHluYW1pY0Zvcm1TdGF0ZSxcclxuICAgIER5bmFtaWNGb3JtVXBkYXRlT24sXHJcbiAgICBJRm9ybUNvbnRyb2wsXHJcbiAgICBEeW5hbWljRm9ybUluaXRDb250cm9sLFxyXG4gICAgQXN5bmNTdWJtaXRNZXRob2QsXHJcbiAgICBkZWZhdWx0U2VyaWFsaXplcixcclxuICAgIEZvcm1TZXJpYWxpemFibGUsXHJcbiAgICBGb3JtSW5wdXQsXHJcbiAgICBGb3JtU2VsZWN0LFxyXG4gICAgRm9ybVN0YXRpYyxcclxuICAgIEZvcm1Nb2RlbCxcclxuICAgIEZvcm1GaWxlLFxyXG4gICAgZGVmaW5lRm9ybUNvbnRyb2wsXHJcbiAgICBnZXRGb3JtQ29udHJvbCxcclxuICAgIGdldEZvcm1TZXJpYWxpemVyLFxyXG4gICAgY3JlYXRlRm9ybUlucHV0LFxyXG4gICAgY3JlYXRlRm9ybVNlbGVjdCxcclxuICAgIGNyZWF0ZUZvcm1TdGF0aWMsXHJcbiAgICBjcmVhdGVGb3JtTW9kZWwsXHJcbiAgICBjcmVhdGVGb3JtQ29udHJvbCxcclxuICAgIElEeW5hbWljRm9ybU1vZHVsZUNvbmZpZ1xyXG59IGZyb20gXCIuL25neC1keW5hbWljLWZvcm0vY29tbW9uLXR5cGVzXCI7XHJcblxyXG5leHBvcnQge1xyXG4gICAgcmVwbGFjZVNwZWNpYWxDaGFycyxcclxuICAgIG1lcmdlRm9ybU1vZGVscyxcclxuICAgIE1JTl9JTlBVVF9OVU0sXHJcbiAgICBNQVhfSU5QVVRfTlVNLFxyXG4gICAgRURJVE9SX0ZPUk1BVFNcclxufSBmcm9tIFwiLi9uZ3gtZHluYW1pYy1mb3JtL3V0aWxzL21pc2NcIjtcclxuXHJcbmV4cG9ydCB7XHJcbiAgICB2YWxpZGF0ZUpTT04sXHJcbiAgICB2YWxpZGF0ZVJlcXVpcmVkVHJhbnNsYXRpb24sXHJcbiAgICB2YWxpZGF0ZVBob25lLFxyXG4gICAgdmFsaWRhdGVJdGVtc01pbkxlbmd0aCxcclxuICAgIHZhbGlkYXRlSXRlbXNNYXhMZW5ndGgsXHJcbiAgICB2YWxpZGF0ZUl0ZW1zTWluVmFsdWUsXHJcbiAgICB2YWxpZGF0ZUl0ZW1zTWF4VmFsdWVcclxufSBmcm9tIFwiLi9uZ3gtZHluYW1pYy1mb3JtL3V0aWxzL3ZhbGlkYXRvcnNcIjtcclxuXHJcbmV4cG9ydCB7XHJcbiAgICBEeW5hbWljRWRpdG9yTW9kZWxDb25maWcsXHJcbiAgICBEeW5hbWljRWRpdG9yTW9kZWxcclxufSBmcm9tIFwiLi9uZ3gtZHluYW1pYy1mb3JtL3V0aWxzL2R5bmFtaWMtZWRpdG9yLm1vZGVsXCI7XHJcblxyXG5leHBvcnQge1xyXG4gICAgU2F2ZVRhYkZ1bmMsXHJcbiAgICBSZXN0b3JlVGFiRnVuYyxcclxuICAgIFRhYkxhYmVsRnVuYyxcclxuICAgIER5bmFtaWNGb3JtQXJyYXlHcm91cE1vZGVsLFxyXG4gICAgRHluYW1pY0Zvcm1BcnJheU1vZGVsQ29uZmlnLFxyXG4gICAgRHluYW1pY0Zvcm1BcnJheU1vZGVsXHJcbn0gZnJvbSBcIi4vbmd4LWR5bmFtaWMtZm9ybS91dGlscy9keW5hbWljLWZvcm0tYXJyYXkubW9kZWxcIjtcclxuXHJcbmV4cG9ydCB7XHJcbiAgICBEeW5hbWljRm9ybU9wdGlvbkNvbmZpZyxcclxuICAgIER5bmFtaWNGb3JtT3B0aW9uLFxyXG4gICAgRHluYW1pY0Zvcm1PcHRpb25Hcm91cCxcclxuICAgIE9wdGlvbkNsYXNzZXNGdW5jLFxyXG4gICAgRHluYW1pY1NlbGVjdE1vZGVsQ29uZmlnLFxyXG4gICAgRHluYW1pY1NlbGVjdE1vZGVsXHJcbn0gZnJvbSBcIi4vbmd4LWR5bmFtaWMtZm9ybS91dGlscy9keW5hbWljLXNlbGVjdC5tb2RlbFwiO1xyXG5cclxuZXhwb3J0IHtGb3JtU2VsZWN0U3ViamVjdH0gZnJvbSBcIi4vbmd4LWR5bmFtaWMtZm9ybS91dGlscy9mb3JtLXNlbGVjdC1zdWJqZWN0XCI7XHJcbmV4cG9ydCB7Rm9ybVN1YmplY3R9IGZyb20gXCIuL25neC1keW5hbWljLWZvcm0vdXRpbHMvZm9ybS1zdWJqZWN0XCI7XHJcblxyXG5leHBvcnQge0R5bmFtaWNGb3JtU2VydmljZX0gZnJvbSBcIi4vbmd4LWR5bmFtaWMtZm9ybS9zZXJ2aWNlcy9keW5hbWljLWZvcm0uc2VydmljZVwiO1xyXG5cclxuZXhwb3J0IHtBc3luY1N1Ym1pdERpcmVjdGl2ZX0gZnJvbSBcIi4vbmd4LWR5bmFtaWMtZm9ybS9kaXJlY3RpdmVzL2FzeW5jLXN1Ym1pdC5kaXJlY3RpdmVcIjtcclxuXHJcbmV4cG9ydCB7RHluYW1pY0Jhc2VGb3JtQ29tcG9uZW50fSBmcm9tIFwiLi9uZ3gtZHluYW1pYy1mb3JtL2NvbXBvbmVudHMvYmFzZS9keW5hbWljLWJhc2UtZm9ybS5jb21wb25lbnRcIjtcclxuZXhwb3J0IHtEeW5hbWljQmFzZUZvcm1BcnJheUNvbXBvbmVudH0gZnJvbSBcIi4vbmd4LWR5bmFtaWMtZm9ybS9jb21wb25lbnRzL2Jhc2UvZHluYW1pYy1iYXNlLWZvcm0tYXJyYXkuY29tcG9uZW50XCI7XHJcbmV4cG9ydCB7XHJcbiAgICBEeW5hbWljQmFzZUZvcm1Db250cm9sQ29tcG9uZW50XHJcbn0gZnJvbSBcIi4vbmd4LWR5bmFtaWMtZm9ybS9jb21wb25lbnRzL2Jhc2UvZHluYW1pYy1iYXNlLWZvcm0tY29udHJvbC5jb21wb25lbnRcIjtcclxuZXhwb3J0IHtcclxuICAgIER5bmFtaWNCYXNlRm9ybUNvbnRyb2xDb250YWluZXJDb21wb25lbnRcclxufSBmcm9tIFwiLi9uZ3gtZHluYW1pYy1mb3JtL2NvbXBvbmVudHMvYmFzZS9keW5hbWljLWJhc2UtZm9ybS1jb250cm9sLWNvbnRhaW5lci5jb21wb25lbnRcIjtcclxuZXhwb3J0IHtEeW5hbWljQmFzZUZvcm1Hcm91cENvbXBvbmVudH0gZnJvbSBcIi4vbmd4LWR5bmFtaWMtZm9ybS9jb21wb25lbnRzL2Jhc2UvZHluYW1pYy1iYXNlLWZvcm0tZ3JvdXAuY29tcG9uZW50XCI7XHJcbmV4cG9ydCB7RHluYW1pY0Jhc2VTZWxlY3RDb21wb25lbnR9IGZyb20gXCIuL25neC1keW5hbWljLWZvcm0vY29tcG9uZW50cy9iYXNlL2R5bmFtaWMtYmFzZS1zZWxlY3QuY29tcG9uZW50XCI7XHJcblxyXG5leHBvcnQge05neER5bmFtaWNGb3JtTW9kdWxlfSBmcm9tIFwiLi9uZ3gtZHluYW1pYy1mb3JtL25neC1keW5hbWljLWZvcm0ubW9kdWxlXCI7XHJcblxyXG5leHBvcnQge1xyXG4gICAgRFlOQU1JQ19GT1JNX0NPTlRST0xfVFlQRV9BUlJBWSxcclxuICAgIERZTkFNSUNfRk9STV9DT05UUk9MX1RZUEVfQ0hFQ0tCT1gsXHJcbiAgICBEWU5BTUlDX0ZPUk1fQ09OVFJPTF9UWVBFX0NIRUNLQk9YX0dST1VQLFxyXG4gICAgRFlOQU1JQ19GT1JNX0NPTlRST0xfVFlQRV9GSUxFX1VQTE9BRCxcclxuICAgIERZTkFNSUNfRk9STV9DT05UUk9MX1RZUEVfR1JPVVAsXHJcbiAgICBEWU5BTUlDX0ZPUk1fQ09OVFJPTF9UWVBFX0lOUFVULFxyXG4gICAgRFlOQU1JQ19GT1JNX0NPTlRST0xfVFlQRV9SQURJT19HUk9VUCxcclxuICAgIERZTkFNSUNfRk9STV9DT05UUk9MX1RZUEVfU0VMRUNULFxyXG4gICAgRFlOQU1JQ19GT1JNX0NPTlRST0xfVFlQRV9URVhUQVJFQSxcclxuICAgIERZTkFNSUNfRk9STV9DT05UUk9MX1RZUEVfRURJVE9SLFxyXG4gICAgRHluYW1pY1RlbXBsYXRlRGlyZWN0aXZlLFxyXG4gICAgRHluYW1pY0xpc3REaXJlY3RpdmUsXHJcbiAgICBEeW5hbWljRm9ybU1vZGVsLFxyXG4gICAgRHluYW1pY0Zvcm1Db250cm9sTWFwRm4sXHJcbiAgICBEeW5hbWljRm9ybXNDb3JlTW9kdWxlLFxyXG4gICAgRHluYW1pY0NoZWNrYm94TW9kZWxDb25maWcsXHJcbiAgICBEeW5hbWljQ2hlY2tib3hNb2RlbCxcclxuICAgIER5bmFtaWNDaGVja2JveEdyb3VwTW9kZWwsXHJcbiAgICBEeW5hbWljRmlsZVVwbG9hZE1vZGVsQ29uZmlnLFxyXG4gICAgRHluYW1pY0ZpbGVVcGxvYWRNb2RlbCxcclxuICAgIER5bmFtaWNGb3JtR3JvdXBNb2RlbENvbmZpZyxcclxuICAgIER5bmFtaWNGb3JtR3JvdXBNb2RlbCxcclxuICAgIER5bmFtaWNJbnB1dE1vZGVsQ29uZmlnLFxyXG4gICAgRHluYW1pY0lucHV0TW9kZWwsXHJcbiAgICBEeW5hbWljUmFkaW9Hcm91cE1vZGVsQ29uZmlnLFxyXG4gICAgRHluYW1pY1JhZGlvR3JvdXBNb2RlbCxcclxuICAgIER5bmFtaWNUZXh0QXJlYU1vZGVsQ29uZmlnLFxyXG4gICAgRHluYW1pY1RleHRBcmVhTW9kZWxcclxufSBmcm9tIFwiQG5nLWR5bmFtaWMtZm9ybXMvY29yZVwiO1xyXG4iXX0=
18
+ export { DYNAMIC_FORM_CONTROL_TYPE_ARRAY, DYNAMIC_FORM_CONTROL_TYPE_CHECKBOX, DYNAMIC_FORM_CONTROL_TYPE_CHECKBOX_GROUP, DYNAMIC_FORM_CONTROL_TYPE_FILE_UPLOAD, DYNAMIC_FORM_CONTROL_TYPE_GROUP, DYNAMIC_FORM_CONTROL_TYPE_INPUT, DYNAMIC_FORM_CONTROL_TYPE_DATEPICKER, DYNAMIC_FORM_CONTROL_TYPE_RADIO_GROUP, DYNAMIC_FORM_CONTROL_TYPE_SELECT, DYNAMIC_FORM_CONTROL_TYPE_TEXTAREA, DYNAMIC_FORM_CONTROL_TYPE_EDITOR, DynamicTemplateDirective, DynamicListDirective, DynamicFormsCoreModule, DynamicCheckboxModel, DynamicCheckboxGroupModel, DynamicFileUploadModel, DynamicFormGroupModel, DynamicInputModel, DynamicDatePickerModel, DynamicRadioGroupModel, DynamicTextAreaModel } from "@ng-dynamic-forms/core";
19
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljX2FwaS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9wdWJsaWNfYXBpLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFVSCxpQkFBaUIsRUFDakIsZ0JBQWdCLEVBQ2hCLFNBQVMsRUFDVCxVQUFVLEVBQ1YsVUFBVSxFQUNWLFNBQVMsRUFDVCxRQUFRLEVBQ1IsaUJBQWlCLEVBQ2pCLGNBQWMsRUFDZCxpQkFBaUIsRUFDakIsZUFBZSxFQUNmLGdCQUFnQixFQUNoQixnQkFBZ0IsRUFDaEIsZUFBZSxFQUNmLGlCQUFpQixFQUVwQixNQUFNLGlDQUFpQyxDQUFDO0FBRXpDLE9BQU8sRUFDSCxtQkFBbUIsRUFDbkIsZUFBZSxFQUNmLGFBQWEsRUFDYixhQUFhLEVBQ2IsY0FBYyxFQUNqQixNQUFNLCtCQUErQixDQUFDO0FBRXZDLE9BQU8sRUFDSCxZQUFZLEVBQ1osMkJBQTJCLEVBQzNCLGFBQWEsRUFDYixzQkFBc0IsRUFDdEIsc0JBQXNCLEVBQ3RCLHFCQUFxQixFQUNyQixxQkFBcUIsRUFDeEIsTUFBTSxxQ0FBcUMsQ0FBQztBQUU3QyxPQUFPLEVBRUgsa0JBQWtCLEVBQ3JCLE1BQU0sK0NBQStDLENBQUM7QUFFdkQsT0FBTyxFQUlILDBCQUEwQixFQUUxQixxQkFBcUIsRUFDeEIsTUFBTSxtREFBbUQsQ0FBQztBQUUzRCxPQUFPLEVBRUgsaUJBQWlCLEVBSWpCLGtCQUFrQixFQUNyQixNQUFNLCtDQUErQyxDQUFDO0FBRXZELE9BQU8sRUFBQyxpQkFBaUIsRUFBQyxNQUFNLDhDQUE4QyxDQUFDO0FBQy9FLE9BQU8sRUFBQyxXQUFXLEVBQUMsTUFBTSx1Q0FBdUMsQ0FBQztBQUVsRSxPQUFPLEVBQUMsa0JBQWtCLEVBQUMsTUFBTSxrREFBa0QsQ0FBQztBQUVwRixPQUFPLEVBQUMsb0JBQW9CLEVBQUMsTUFBTSxzREFBc0QsQ0FBQztBQUUxRixPQUFPLEVBQUMsd0JBQXdCLEVBQUMsTUFBTSxnRUFBZ0UsQ0FBQztBQUN4RyxPQUFPLEVBQUMsNkJBQTZCLEVBQUMsTUFBTSxzRUFBc0UsQ0FBQztBQUNuSCxPQUFPLEVBQ0gsK0JBQStCLEVBQ2xDLE1BQU0sd0VBQXdFLENBQUM7QUFDaEYsT0FBTyxFQUNILHdDQUF3QyxFQUMzQyxNQUFNLGtGQUFrRixDQUFDO0FBQzFGLE9BQU8sRUFBQyw2QkFBNkIsRUFBQyxNQUFNLHNFQUFzRSxDQUFDO0FBQ25ILE9BQU8sRUFBQywwQkFBMEIsRUFBQyxNQUFNLGtFQUFrRSxDQUFDO0FBRTVHLE9BQU8sRUFBQyxvQkFBb0IsRUFBQyxNQUFNLDRDQUE0QyxDQUFDO0FBRWhGLE9BQU8sRUFDSCwrQkFBK0IsRUFDL0Isa0NBQWtDLEVBQ2xDLHdDQUF3QyxFQUN4QyxxQ0FBcUMsRUFDckMsK0JBQStCLEVBQy9CLCtCQUErQixFQUMvQixvQ0FBb0MsRUFDcEMscUNBQXFDLEVBQ3JDLGdDQUFnQyxFQUNoQyxrQ0FBa0MsRUFDbEMsZ0NBQWdDLEVBQ2hDLHdCQUF3QixFQUN4QixvQkFBb0IsRUFHcEIsc0JBQXNCLEVBRXRCLG9CQUFvQixFQUNwQix5QkFBeUIsRUFFekIsc0JBQXNCLEVBRXRCLHFCQUFxQixFQUVyQixpQkFBaUIsRUFFakIsc0JBQXNCLEVBRXRCLHNCQUFzQixFQUV0QixvQkFBb0IsRUFDdkIsTUFBTSx3QkFBd0IsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCB7XHJcbiAgICBJRHluYW1pY0Zvcm1FdmVudCxcclxuICAgIElEeW5hbWljRm9ybSxcclxuICAgIEZvcm1Db250cm9sU2VyaWFsaXplcixcclxuICAgIEZvcm1Nb2RlbEN1c3RvbWl6ZXIsXHJcbiAgICBEeW5hbWljRm9ybVN0YXRlLFxyXG4gICAgRHluYW1pY0Zvcm1VcGRhdGVPbixcclxuICAgIElGb3JtQ29udHJvbCxcclxuICAgIER5bmFtaWNGb3JtSW5pdENvbnRyb2wsXHJcbiAgICBBc3luY1N1Ym1pdE1ldGhvZCxcclxuICAgIGRlZmF1bHRTZXJpYWxpemVyLFxyXG4gICAgRm9ybVNlcmlhbGl6YWJsZSxcclxuICAgIEZvcm1JbnB1dCxcclxuICAgIEZvcm1TZWxlY3QsXHJcbiAgICBGb3JtU3RhdGljLFxyXG4gICAgRm9ybU1vZGVsLFxyXG4gICAgRm9ybUZpbGUsXHJcbiAgICBkZWZpbmVGb3JtQ29udHJvbCxcclxuICAgIGdldEZvcm1Db250cm9sLFxyXG4gICAgZ2V0Rm9ybVNlcmlhbGl6ZXIsXHJcbiAgICBjcmVhdGVGb3JtSW5wdXQsXHJcbiAgICBjcmVhdGVGb3JtU2VsZWN0LFxyXG4gICAgY3JlYXRlRm9ybVN0YXRpYyxcclxuICAgIGNyZWF0ZUZvcm1Nb2RlbCxcclxuICAgIGNyZWF0ZUZvcm1Db250cm9sLFxyXG4gICAgSUR5bmFtaWNGb3JtTW9kdWxlQ29uZmlnXHJcbn0gZnJvbSBcIi4vbmd4LWR5bmFtaWMtZm9ybS9jb21tb24tdHlwZXNcIjtcclxuXHJcbmV4cG9ydCB7XHJcbiAgICByZXBsYWNlU3BlY2lhbENoYXJzLFxyXG4gICAgbWVyZ2VGb3JtTW9kZWxzLFxyXG4gICAgTUlOX0lOUFVUX05VTSxcclxuICAgIE1BWF9JTlBVVF9OVU0sXHJcbiAgICBFRElUT1JfRk9STUFUU1xyXG59IGZyb20gXCIuL25neC1keW5hbWljLWZvcm0vdXRpbHMvbWlzY1wiO1xyXG5cclxuZXhwb3J0IHtcclxuICAgIHZhbGlkYXRlSlNPTixcclxuICAgIHZhbGlkYXRlUmVxdWlyZWRUcmFuc2xhdGlvbixcclxuICAgIHZhbGlkYXRlUGhvbmUsXHJcbiAgICB2YWxpZGF0ZUl0ZW1zTWluTGVuZ3RoLFxyXG4gICAgdmFsaWRhdGVJdGVtc01heExlbmd0aCxcclxuICAgIHZhbGlkYXRlSXRlbXNNaW5WYWx1ZSxcclxuICAgIHZhbGlkYXRlSXRlbXNNYXhWYWx1ZVxyXG59IGZyb20gXCIuL25neC1keW5hbWljLWZvcm0vdXRpbHMvdmFsaWRhdG9yc1wiO1xyXG5cclxuZXhwb3J0IHtcclxuICAgIER5bmFtaWNFZGl0b3JNb2RlbENvbmZpZyxcclxuICAgIER5bmFtaWNFZGl0b3JNb2RlbFxyXG59IGZyb20gXCIuL25neC1keW5hbWljLWZvcm0vdXRpbHMvZHluYW1pYy1lZGl0b3IubW9kZWxcIjtcclxuXHJcbmV4cG9ydCB7XHJcbiAgICBTYXZlVGFiRnVuYyxcclxuICAgIFJlc3RvcmVUYWJGdW5jLFxyXG4gICAgVGFiTGFiZWxGdW5jLFxyXG4gICAgRHluYW1pY0Zvcm1BcnJheUdyb3VwTW9kZWwsXHJcbiAgICBEeW5hbWljRm9ybUFycmF5TW9kZWxDb25maWcsXHJcbiAgICBEeW5hbWljRm9ybUFycmF5TW9kZWxcclxufSBmcm9tIFwiLi9uZ3gtZHluYW1pYy1mb3JtL3V0aWxzL2R5bmFtaWMtZm9ybS1hcnJheS5tb2RlbFwiO1xyXG5cclxuZXhwb3J0IHtcclxuICAgIER5bmFtaWNGb3JtT3B0aW9uQ29uZmlnLFxyXG4gICAgRHluYW1pY0Zvcm1PcHRpb24sXHJcbiAgICBEeW5hbWljRm9ybU9wdGlvbkdyb3VwLFxyXG4gICAgT3B0aW9uQ2xhc3Nlc0Z1bmMsXHJcbiAgICBEeW5hbWljU2VsZWN0TW9kZWxDb25maWcsXHJcbiAgICBEeW5hbWljU2VsZWN0TW9kZWxcclxufSBmcm9tIFwiLi9uZ3gtZHluYW1pYy1mb3JtL3V0aWxzL2R5bmFtaWMtc2VsZWN0Lm1vZGVsXCI7XHJcblxyXG5leHBvcnQge0Zvcm1TZWxlY3RTdWJqZWN0fSBmcm9tIFwiLi9uZ3gtZHluYW1pYy1mb3JtL3V0aWxzL2Zvcm0tc2VsZWN0LXN1YmplY3RcIjtcclxuZXhwb3J0IHtGb3JtU3ViamVjdH0gZnJvbSBcIi4vbmd4LWR5bmFtaWMtZm9ybS91dGlscy9mb3JtLXN1YmplY3RcIjtcclxuXHJcbmV4cG9ydCB7RHluYW1pY0Zvcm1TZXJ2aWNlfSBmcm9tIFwiLi9uZ3gtZHluYW1pYy1mb3JtL3NlcnZpY2VzL2R5bmFtaWMtZm9ybS5zZXJ2aWNlXCI7XHJcblxyXG5leHBvcnQge0FzeW5jU3VibWl0RGlyZWN0aXZlfSBmcm9tIFwiLi9uZ3gtZHluYW1pYy1mb3JtL2RpcmVjdGl2ZXMvYXN5bmMtc3VibWl0LmRpcmVjdGl2ZVwiO1xyXG5cclxuZXhwb3J0IHtEeW5hbWljQmFzZUZvcm1Db21wb25lbnR9IGZyb20gXCIuL25neC1keW5hbWljLWZvcm0vY29tcG9uZW50cy9iYXNlL2R5bmFtaWMtYmFzZS1mb3JtLmNvbXBvbmVudFwiO1xyXG5leHBvcnQge0R5bmFtaWNCYXNlRm9ybUFycmF5Q29tcG9uZW50fSBmcm9tIFwiLi9uZ3gtZHluYW1pYy1mb3JtL2NvbXBvbmVudHMvYmFzZS9keW5hbWljLWJhc2UtZm9ybS1hcnJheS5jb21wb25lbnRcIjtcclxuZXhwb3J0IHtcclxuICAgIER5bmFtaWNCYXNlRm9ybUNvbnRyb2xDb21wb25lbnRcclxufSBmcm9tIFwiLi9uZ3gtZHluYW1pYy1mb3JtL2NvbXBvbmVudHMvYmFzZS9keW5hbWljLWJhc2UtZm9ybS1jb250cm9sLmNvbXBvbmVudFwiO1xyXG5leHBvcnQge1xyXG4gICAgRHluYW1pY0Jhc2VGb3JtQ29udHJvbENvbnRhaW5lckNvbXBvbmVudFxyXG59IGZyb20gXCIuL25neC1keW5hbWljLWZvcm0vY29tcG9uZW50cy9iYXNlL2R5bmFtaWMtYmFzZS1mb3JtLWNvbnRyb2wtY29udGFpbmVyLmNvbXBvbmVudFwiO1xyXG5leHBvcnQge0R5bmFtaWNCYXNlRm9ybUdyb3VwQ29tcG9uZW50fSBmcm9tIFwiLi9uZ3gtZHluYW1pYy1mb3JtL2NvbXBvbmVudHMvYmFzZS9keW5hbWljLWJhc2UtZm9ybS1ncm91cC5jb21wb25lbnRcIjtcclxuZXhwb3J0IHtEeW5hbWljQmFzZVNlbGVjdENvbXBvbmVudH0gZnJvbSBcIi4vbmd4LWR5bmFtaWMtZm9ybS9jb21wb25lbnRzL2Jhc2UvZHluYW1pYy1iYXNlLXNlbGVjdC5jb21wb25lbnRcIjtcclxuXHJcbmV4cG9ydCB7Tmd4RHluYW1pY0Zvcm1Nb2R1bGV9IGZyb20gXCIuL25neC1keW5hbWljLWZvcm0vbmd4LWR5bmFtaWMtZm9ybS5tb2R1bGVcIjtcclxuXHJcbmV4cG9ydCB7XHJcbiAgICBEWU5BTUlDX0ZPUk1fQ09OVFJPTF9UWVBFX0FSUkFZLFxyXG4gICAgRFlOQU1JQ19GT1JNX0NPTlRST0xfVFlQRV9DSEVDS0JPWCxcclxuICAgIERZTkFNSUNfRk9STV9DT05UUk9MX1RZUEVfQ0hFQ0tCT1hfR1JPVVAsXHJcbiAgICBEWU5BTUlDX0ZPUk1fQ09OVFJPTF9UWVBFX0ZJTEVfVVBMT0FELFxyXG4gICAgRFlOQU1JQ19GT1JNX0NPTlRST0xfVFlQRV9HUk9VUCxcclxuICAgIERZTkFNSUNfRk9STV9DT05UUk9MX1RZUEVfSU5QVVQsXHJcbiAgICBEWU5BTUlDX0ZPUk1fQ09OVFJPTF9UWVBFX0RBVEVQSUNLRVIsXHJcbiAgICBEWU5BTUlDX0ZPUk1fQ09OVFJPTF9UWVBFX1JBRElPX0dST1VQLFxyXG4gICAgRFlOQU1JQ19GT1JNX0NPTlRST0xfVFlQRV9TRUxFQ1QsXHJcbiAgICBEWU5BTUlDX0ZPUk1fQ09OVFJPTF9UWVBFX1RFWFRBUkVBLFxyXG4gICAgRFlOQU1JQ19GT1JNX0NPTlRST0xfVFlQRV9FRElUT1IsXHJcbiAgICBEeW5hbWljVGVtcGxhdGVEaXJlY3RpdmUsXHJcbiAgICBEeW5hbWljTGlzdERpcmVjdGl2ZSxcclxuICAgIER5bmFtaWNGb3JtTW9kZWwsXHJcbiAgICBEeW5hbWljRm9ybUNvbnRyb2xNYXBGbixcclxuICAgIER5bmFtaWNGb3Jtc0NvcmVNb2R1bGUsXHJcbiAgICBEeW5hbWljQ2hlY2tib3hNb2RlbENvbmZpZyxcclxuICAgIER5bmFtaWNDaGVja2JveE1vZGVsLFxyXG4gICAgRHluYW1pY0NoZWNrYm94R3JvdXBNb2RlbCxcclxuICAgIER5bmFtaWNGaWxlVXBsb2FkTW9kZWxDb25maWcsXHJcbiAgICBEeW5hbWljRmlsZVVwbG9hZE1vZGVsLFxyXG4gICAgRHluYW1pY0Zvcm1Hcm91cE1vZGVsQ29uZmlnLFxyXG4gICAgRHluYW1pY0Zvcm1Hcm91cE1vZGVsLFxyXG4gICAgRHluYW1pY0lucHV0TW9kZWxDb25maWcsXHJcbiAgICBEeW5hbWljSW5wdXRNb2RlbCxcclxuICAgIER5bmFtaWNEYXRlUGlja2VyTW9kZWxDb25maWcsXHJcbiAgICBEeW5hbWljRGF0ZVBpY2tlck1vZGVsLFxyXG4gICAgRHluYW1pY1JhZGlvR3JvdXBNb2RlbENvbmZpZyxcclxuICAgIER5bmFtaWNSYWRpb0dyb3VwTW9kZWwsXHJcbiAgICBEeW5hbWljVGV4dEFyZWFNb2RlbENvbmZpZyxcclxuICAgIER5bmFtaWNUZXh0QXJlYU1vZGVsXHJcbn0gZnJvbSBcIkBuZy1keW5hbWljLWZvcm1zL2NvcmVcIjtcclxuIl19
@@ -2,8 +2,8 @@ import * as i2 from '@stemy/ngx-utils';
2
2
  import { ReflectUtils, ObjectUtils, TimerUtils, StringUtils, OpenApiService, TOASTER_SERVICE, ObservableUtils, EventsService, NgxUtilsModule } from '@stemy/ngx-utils';
3
3
  import { __decorate, __awaiter } from 'tslib';
4
4
  import * as i1 from '@ng-dynamic-forms/core';
5
- import { DynamicInputControlModel, DYNAMIC_FORM_CONTROL_TYPE_EDITOR, serializable, DynamicFormArrayGroupModel as DynamicFormArrayGroupModel$1, DynamicFormArrayModel as DynamicFormArrayModel$1, DynamicFormOption as DynamicFormOption$1, DynamicSelectModel as DynamicSelectModel$1, DynamicFormService as DynamicFormService$1, DynamicFormGroupModel, DynamicInputModel, DynamicFileUploadModel, DynamicCheckboxModel, DynamicTextAreaModel, DynamicFormComponent, DynamicTemplateDirective, DynamicFormControlContainerComponent, DYNAMIC_FORM_CONTROL_TYPE_ARRAY, DynamicFormArrayComponent, DynamicFormValueControlModel, DynamicFormControlComponent, DynamicFormGroupComponent, DYNAMIC_FORM_CONTROL_MAP_FN, DYNAMIC_VALIDATORS } from '@ng-dynamic-forms/core';
6
- export { DYNAMIC_FORM_CONTROL_TYPE_ARRAY, DYNAMIC_FORM_CONTROL_TYPE_CHECKBOX, DYNAMIC_FORM_CONTROL_TYPE_CHECKBOX_GROUP, DYNAMIC_FORM_CONTROL_TYPE_EDITOR, DYNAMIC_FORM_CONTROL_TYPE_FILE_UPLOAD, DYNAMIC_FORM_CONTROL_TYPE_GROUP, DYNAMIC_FORM_CONTROL_TYPE_INPUT, DYNAMIC_FORM_CONTROL_TYPE_RADIO_GROUP, DYNAMIC_FORM_CONTROL_TYPE_SELECT, DYNAMIC_FORM_CONTROL_TYPE_TEXTAREA, DynamicCheckboxGroupModel, DynamicCheckboxModel, DynamicFileUploadModel, DynamicFormGroupModel, DynamicFormsCoreModule, DynamicInputModel, DynamicListDirective, DynamicRadioGroupModel, DynamicTemplateDirective, DynamicTextAreaModel } from '@ng-dynamic-forms/core';
5
+ import { DynamicInputControlModel, DYNAMIC_FORM_CONTROL_TYPE_EDITOR, serializable, DynamicFormArrayGroupModel as DynamicFormArrayGroupModel$1, DynamicFormArrayModel as DynamicFormArrayModel$1, DynamicFormOption as DynamicFormOption$1, DynamicSelectModel as DynamicSelectModel$1, DynamicFormService as DynamicFormService$1, DynamicDatePickerModel, DynamicFormGroupModel, DynamicInputModel, DynamicFormValueControlModel, DynamicFileUploadModel, DynamicCheckboxModel, DynamicTextAreaModel, DynamicFormComponent, DynamicTemplateDirective, DynamicFormControlContainerComponent, DYNAMIC_FORM_CONTROL_TYPE_ARRAY, DynamicFormArrayComponent, DynamicFormControlComponent, DynamicFormGroupComponent, DYNAMIC_FORM_CONTROL_MAP_FN, DYNAMIC_VALIDATORS } from '@ng-dynamic-forms/core';
6
+ export { DYNAMIC_FORM_CONTROL_TYPE_ARRAY, DYNAMIC_FORM_CONTROL_TYPE_CHECKBOX, DYNAMIC_FORM_CONTROL_TYPE_CHECKBOX_GROUP, DYNAMIC_FORM_CONTROL_TYPE_DATEPICKER, DYNAMIC_FORM_CONTROL_TYPE_EDITOR, DYNAMIC_FORM_CONTROL_TYPE_FILE_UPLOAD, DYNAMIC_FORM_CONTROL_TYPE_GROUP, DYNAMIC_FORM_CONTROL_TYPE_INPUT, DYNAMIC_FORM_CONTROL_TYPE_RADIO_GROUP, DYNAMIC_FORM_CONTROL_TYPE_SELECT, DYNAMIC_FORM_CONTROL_TYPE_TEXTAREA, DynamicCheckboxGroupModel, DynamicCheckboxModel, DynamicDatePickerModel, DynamicFileUploadModel, DynamicFormGroupModel, DynamicFormsCoreModule, DynamicInputModel, DynamicListDirective, DynamicRadioGroupModel, DynamicTemplateDirective, DynamicTextAreaModel } from '@ng-dynamic-forms/core';
7
7
  import { BehaviorSubject, of, isObservable, map, Subject, firstValueFrom, Subscription, debounceTime, groupBy, mergeMap } from 'rxjs';
8
8
  import * as i0 from '@angular/core';
9
9
  import { Injector, Injectable, Inject, EventEmitter, Directive, Input, Output, HostBinding, HostListener, QueryList, Component, ChangeDetectionStrategy, ContentChildren, ViewChildren, ViewChild, ViewContainerRef, forwardRef, NgModule } from '@angular/core';
@@ -500,6 +500,10 @@ class DynamicFormService extends DynamicFormService$1 {
500
500
  value[key] = subValue.id || subValue._id || subValue;
501
501
  return;
502
502
  }
503
+ if (subModel instanceof DynamicDatePickerModel) {
504
+ value[key] = this.convertToDate(subValue);
505
+ return;
506
+ }
503
507
  if (subModel instanceof DynamicFormArrayModel) {
504
508
  const length = Array.isArray(subValue) ? subValue.length : 0;
505
509
  const subArray = subControl;
@@ -521,7 +525,7 @@ class DynamicFormService extends DynamicFormService$1 {
521
525
  });
522
526
  }
523
527
  serializeRecursive(formModel, formGroup) {
524
- var _a, _b;
528
+ var _a, _b, _c;
525
529
  return __awaiter(this, void 0, void 0, function* () {
526
530
  const result = {};
527
531
  if (!formModel || !formGroup || !formGroup.value)
@@ -534,6 +538,8 @@ class DynamicFormService extends DynamicFormService$1 {
534
538
  result[subModel.id] = yield serializer(subModel, subControl);
535
539
  continue;
536
540
  }
541
+ if (subModel.hidden && !((_b = subModel.additional) === null || _b === void 0 ? void 0 : _b.serialize))
542
+ continue;
537
543
  if (subModel instanceof DynamicFormArrayModel) {
538
544
  const length = Array.isArray(subControl.value) ? subControl.value.length : 0;
539
545
  const subArray = subControl;
@@ -551,7 +557,7 @@ class DynamicFormService extends DynamicFormService$1 {
551
557
  }
552
558
  if (subModel instanceof DynamicInputModel && !ObjectUtils.isNullOrUndefined(subControl.value)) {
553
559
  result[subModel.id] = subModel.inputType == "number"
554
- ? (_b = parseFloat((`${subControl.value}` || "0").replace(/,/gi, "."))) !== null && _b !== void 0 ? _b : null
560
+ ? (_c = parseFloat((`${subControl.value}` || "0").replace(/,/gi, "."))) !== null && _c !== void 0 ? _c : null
555
561
  : subControl.value;
556
562
  continue;
557
563
  }
@@ -616,12 +622,24 @@ class DynamicFormService extends DynamicFormService$1 {
616
622
  }
617
623
  });
618
624
  }
625
+ convertToDate(value) {
626
+ if (ObjectUtils.isNullOrUndefined(value))
627
+ return null;
628
+ const date = ObjectUtils.isDate(value)
629
+ ? value
630
+ : new Date(value);
631
+ return isNaN(date) ? new Date() : date;
632
+ }
619
633
  getFormModelForSchema(name, customizeModel) {
620
634
  return __awaiter(this, void 0, void 0, function* () {
621
635
  this.api.cache = {};
622
636
  this.schemas = yield this.openApi.getSchemas();
623
637
  const customizeModels = (property, schema, modelType, config) => {
624
638
  const model = new modelType(config);
639
+ if (model instanceof DynamicFormValueControlModel) {
640
+ model.value = (model instanceof DynamicDatePickerModel)
641
+ ? this.convertToDate(property.default) : property.default;
642
+ }
625
643
  if (!ObjectUtils.isFunction(customizeModel))
626
644
  return [model];
627
645
  const res = customizeModel(property, schema, model, config, this.injector);
@@ -663,6 +681,9 @@ class DynamicFormService extends DynamicFormService$1 {
663
681
  if (property.format == "textarea") {
664
682
  return customizeModels(property, schema, DynamicTextAreaModel, this.getFormTextareaConfig(property, schema));
665
683
  }
684
+ if (property.format == "date") {
685
+ return customizeModels(property, schema, DynamicDatePickerModel, this.getFormDatepickerConfig(property, schema));
686
+ }
666
687
  return customizeModels(property, schema, DynamicInputModel, this.getFormInputConfig(property, schema));
667
688
  case "object":
668
689
  return customizeModels(property, schema, DynamicEditorModel, this.getFormEditorConfig(property, schema));
@@ -789,6 +810,13 @@ class DynamicFormService extends DynamicFormService$1 {
789
810
  multiple: property.type == "array"
790
811
  });
791
812
  }
813
+ getFormDatepickerConfig(property, schema) {
814
+ return Object.assign(this.getFormControlConfig(property, schema), {
815
+ format: property.dateFormat || "dd.MM.yyyy",
816
+ min: this.convertToDate(property.min),
817
+ max: this.convertToDate(property.max),
818
+ });
819
+ }
792
820
  getFormSelectOptions(property, schema) {
793
821
  var _a;
794
822
  const $enum = ((_a = property.items) === null || _a === void 0 ? void 0 : _a.enum) || property.enum;