@mediusinc/mng-commons-audit 3.6.0 → 4.0.0-rc.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (35) hide show
  1. package/esm2022/lib/api/models/entityChange.mjs +5 -4
  2. package/esm2022/lib/api/models/guiEntityModel.mjs +5 -4
  3. package/esm2022/lib/api/models/guiPropertyModel.mjs +5 -4
  4. package/esm2022/lib/api/models/guiPropertyType.mjs +3 -3
  5. package/esm2022/lib/api/models/guiRelationModel.mjs +5 -4
  6. package/esm2022/lib/api/models/revEntityWithChangesDto.mjs +5 -4
  7. package/esm2022/lib/api/models/revEntityWithStateDto.mjs +5 -4
  8. package/esm2022/lib/api/models/revisionType.mjs +3 -3
  9. package/esm2022/lib/api/services/audit-revisions-api.service.mjs +4 -4
  10. package/esm2022/lib/api/services/audit.service.mjs +4 -4
  11. package/esm2022/lib/components/entity-changes-field/entity-changes-field.component.mjs +8 -8
  12. package/esm2022/lib/components/pages/audit/audit.page.component.mjs +3 -3
  13. package/esm2022/lib/components/pages/entity-revisions/audit-entity-revisions.page.component.mjs +15 -16
  14. package/esm2022/lib/components/pages/revisions/audit-revisions.page.component.mjs +33 -23
  15. package/esm2022/lib/models/config.model.mjs +1 -1
  16. package/esm2022/lib/models/entity-revision-change-state.model.mjs +3 -2
  17. package/esm2022/lib/models/entity-revision-changes.model.mjs +3 -2
  18. package/esm2022/lib/models/guiEntityModelWithI18n.model.mjs +3 -2
  19. package/esm2022/lib/models/rev-entity-detailed.model.mjs +3 -2
  20. package/esm2022/lib/models/rev-entity.model.mjs +3 -2
  21. package/esm2022/lib/models/revEntityWithId.model.mjs +5 -4
  22. package/esm2022/lib/utils/audit.util.mjs +28 -21
  23. package/fesm2022/mediusinc-mng-commons-audit.mjs +93 -77
  24. package/fesm2022/mediusinc-mng-commons-audit.mjs.map +1 -1
  25. package/lib/api/models/entityChange.d.ts +3 -3
  26. package/lib/api/models/guiEntityModel.d.ts +3 -3
  27. package/lib/api/models/guiPropertyModel.d.ts +3 -3
  28. package/lib/api/models/guiRelationModel.d.ts +3 -3
  29. package/lib/api/models/revEntityWithChangesDto.d.ts +3 -3
  30. package/lib/api/models/revEntityWithStateDto.d.ts +3 -3
  31. package/lib/components/entity-changes-field/entity-changes-field.component.d.ts +2 -2
  32. package/lib/components/pages/entity-revisions/audit-entity-revisions.page.component.d.ts +7 -7
  33. package/lib/components/pages/revisions/audit-revisions.page.component.d.ts +5 -5
  34. package/lib/utils/audit.util.d.ts +4 -4
  35. package/package.json +8 -8
@@ -1,5 +1,5 @@
1
1
  import { of } from 'rxjs';
2
- import { MediusFilterMatchType, ObjectSerializer } from '@mediusinc/mng-commons';
2
+ import { MediusFilterMatchType, TypeRegistry } from '@mediusinc/mng-commons';
3
3
  import { MngGuiPropertyTypeDto } from '../api/models/guiPropertyType';
4
4
  import { MngRevisionTypeDto } from '../api/models/revisionType';
5
5
  import { MngEntityRevisionChangeState } from '../models/entity-revision-change-state.model';
@@ -12,8 +12,8 @@ export class AuditUtil {
12
12
  if (!property.resolvedPropertyName) {
13
13
  continue;
14
14
  }
15
- const columnPrepend = modelType ? `${modelType}.` : '';
16
15
  const isEnum = property.propertyType === MngGuiPropertyTypeDto.Enum;
16
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
17
17
  let column = null;
18
18
  if (isEnum) {
19
19
  if (!property.possibleEnumValues) {
@@ -21,33 +21,36 @@ export class AuditUtil {
21
21
  }
22
22
  const enumType = AuditUtil.findEnumType(property);
23
23
  if (enumType) {
24
- column = descriptor.addColumn(columnPrepend + property.resolvedPropertyName).asEnum(enumType);
24
+ column = descriptor.addColumnUnsafe(property.resolvedPropertyName).asEnum(enumType);
25
25
  if (addFilters) {
26
26
  column.withFilterLookupEnum(property.possibleEnumValues);
27
27
  }
28
28
  }
29
29
  else {
30
- column = descriptor.addColumn(columnPrepend + property.resolvedPropertyName);
30
+ column = descriptor.addColumnUnsafe(property.resolvedPropertyName);
31
31
  if (addFilters) {
32
32
  (column?.withFilterLookup()).withLookup(() => of(property.possibleEnumValues ?? []));
33
33
  }
34
34
  }
35
35
  }
36
36
  else if (property.propertyType === MngGuiPropertyTypeDto.Number) {
37
- column = descriptor.addColumn(columnPrepend + property.resolvedPropertyName).asNumber();
37
+ column = descriptor.addColumnUnsafe(property.resolvedPropertyName).asNumber();
38
38
  }
39
39
  else if (property.propertyType === MngGuiPropertyTypeDto.Boolean) {
40
- column = descriptor.addColumn(columnPrepend + property.resolvedPropertyName).asBoolean();
40
+ column = descriptor.addColumnUnsafe(property.resolvedPropertyName).asBoolean();
41
41
  }
42
42
  else if (property.propertyType === MngGuiPropertyTypeDto.LocalDate) {
43
- column = descriptor.addColumn(columnPrepend + property.resolvedPropertyName).asDate('dd. MM yyyy');
43
+ column = descriptor.addColumnUnsafe(property.resolvedPropertyName).asDate('dd. MM yyyy');
44
44
  }
45
45
  else if (property.propertyType === MngGuiPropertyTypeDto.OffsetDateTime) {
46
- column = descriptor.addColumn(columnPrepend + property.resolvedPropertyName).asDate('dd. MM yyyy HH:mm');
46
+ column = descriptor.addColumnUnsafe(property.resolvedPropertyName).asDate('dd. MM yyyy HH:mm');
47
47
  }
48
48
  else {
49
49
  // string / wildcard
50
- column = descriptor.addColumn(columnPrepend + property.resolvedPropertyName).withTitle(AuditUtil.getPropertyTitleKey(property, modelType));
50
+ column = descriptor.addColumnUnsafe(property.resolvedPropertyName).withTitle(AuditUtil.getPropertyTitleKey(property, modelType));
51
+ }
52
+ if (modelType) {
53
+ column.withGetter((value, item) => item?.[modelType]?.[property.resolvedPropertyName]);
51
54
  }
52
55
  column.withTitle(AuditUtil.getPropertyTitleKey(property, modelType));
53
56
  if (!isEnum && addFilters) {
@@ -77,43 +80,47 @@ export class AuditUtil {
77
80
  if (!property.possibleEnumValues) {
78
81
  continue;
79
82
  }
80
- descriptor.addFieldLookupEnum(fieldPrepend + property.resolvedPropertyName, enumType, property.possibleEnumValues).withDisabled();
83
+ descriptor.addFieldLookupEnumUnsafe(fieldPrepend + property.resolvedPropertyName, enumType, property.possibleEnumValues).withDisabled();
81
84
  }
82
85
  else {
83
- descriptor.addField(fieldPrepend + property.resolvedPropertyName).withLabel(AuditUtil.getPropertyTitleKey(property, modelType));
86
+ descriptor.addFieldUnsafe(fieldPrepend + property.resolvedPropertyName).withLabel(AuditUtil.getPropertyTitleKey(property, modelType));
84
87
  }
85
88
  }
86
89
  else if (property.propertyType === MngGuiPropertyTypeDto.Number) {
87
90
  descriptor
88
- .addField(fieldPrepend + property.resolvedPropertyName)
91
+ .addFieldUnsafe(fieldPrepend + property.resolvedPropertyName)
89
92
  .withLabel(AuditUtil.getPropertyTitleKey(property, modelType))
90
93
  .asNumber()
91
94
  .withDisabled();
92
95
  }
93
96
  else if (property.propertyType === MngGuiPropertyTypeDto.Boolean) {
94
97
  descriptor
95
- .addField(fieldPrepend + property.resolvedPropertyName)
98
+ .addFieldUnsafe(fieldPrepend + property.resolvedPropertyName)
96
99
  .withLabel(AuditUtil.getPropertyTitleKey(property, modelType))
97
100
  .withDisabled();
98
101
  }
99
102
  else if (property.propertyType === MngGuiPropertyTypeDto.LocalDate) {
100
103
  descriptor
101
- .addField(fieldPrepend + property.resolvedPropertyName)
104
+ .addFieldUnsafe(fieldPrepend + property.resolvedPropertyName)
102
105
  .withLabel(AuditUtil.getPropertyTitleKey(property, modelType))
103
- .asDatePicker('dd. MMM yyyy')
106
+ .asDatePicker({ format: 'dd. MMM yyyy' })
104
107
  .withDisabled();
105
108
  }
106
109
  else if (property.propertyType === MngGuiPropertyTypeDto.OffsetDateTime) {
107
110
  descriptor
108
- .addField(fieldPrepend + property.resolvedPropertyName)
111
+ .addFieldUnsafe(fieldPrepend + property.resolvedPropertyName)
109
112
  .withLabel(AuditUtil.getPropertyTitleKey(property, modelType))
110
- .asDatePicker('dd. MM yy', undefined, undefined, true, false)
113
+ .asDatePicker({
114
+ format: 'dd. MM yy',
115
+ showTime: true,
116
+ showSeconds: false
117
+ })
111
118
  .withDisabled();
112
119
  }
113
120
  else {
114
121
  // string / wildcard
115
122
  descriptor
116
- .addField(fieldPrepend + property.resolvedPropertyName)
123
+ .addFieldUnsafe(fieldPrepend + property.resolvedPropertyName)
117
124
  .withLabel(AuditUtil.getPropertyTitleKey(property, modelType))
118
125
  .withDisabled();
119
126
  }
@@ -137,9 +144,9 @@ export class AuditUtil {
137
144
  if (!property.enumClassSimpleName) {
138
145
  return undefined;
139
146
  }
140
- let enumType = ObjectSerializer.get().findEnum(property.enumClassSimpleName);
147
+ let enumType = TypeRegistry.get().findEnum(property.enumClassSimpleName);
141
148
  if (!enumType) {
142
- enumType = ObjectSerializer.get().findEnum(property.enumClassSimpleName + 'Dto');
149
+ enumType = TypeRegistry.get().findEnum(property.enumClassSimpleName + 'Dto');
143
150
  }
144
151
  return enumType;
145
152
  }
@@ -267,4 +274,4 @@ export class AuditUtil {
267
274
  return entityChanges;
268
275
  }
269
276
  }
270
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXVkaXQudXRpbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9saWIvdXRpbHMvYXVkaXQudXRpbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUMsRUFBRSxFQUFDLE1BQU0sTUFBTSxDQUFDO0FBRXhCLE9BQU8sRUFJSCxxQkFBcUIsRUFFckIsZ0JBQWdCLEVBR25CLE1BQU0sd0JBQXdCLENBQUM7QUFLaEMsT0FBTyxFQUFDLHFCQUFxQixFQUFDLE1BQU0sK0JBQStCLENBQUM7QUFFcEUsT0FBTyxFQUFDLGtCQUFrQixFQUFDLE1BQU0sNEJBQTRCLENBQUM7QUFDOUQsT0FBTyxFQUFDLDRCQUE0QixFQUFDLE1BQU0sOENBQThDLENBQUM7QUFDMUYsT0FBTyxFQUFDLHdCQUF3QixFQUFDLE1BQU0seUNBQXlDLENBQUM7QUFDakYsT0FBTyxFQUFDLHdCQUF3QixFQUFDLE1BQU0sdUNBQXVDLENBQUM7QUFFL0UsTUFBTSxPQUFPLFNBQVM7YUFDSCxlQUFVLEdBQUcsc0JBQXNCLENBQUM7SUFFNUMsTUFBTSxDQUFDLG1CQUFtQixDQUM3QixVQUE4QixFQUM5QixVQUFvQyxFQUNwQyxZQUFxRCxTQUFTLEVBQzlELFVBQVUsR0FBRyxJQUFJLEVBQ2pCLFFBQVEsR0FBRyxJQUFJO1FBRWYsS0FBSyxNQUFNLFFBQVEsSUFBSSxVQUFVLEVBQUU7WUFDL0IsSUFBSSxDQUFDLFFBQVEsQ0FBQyxvQkFBb0IsRUFBRTtnQkFDaEMsU0FBUzthQUNaO1lBRUQsTUFBTSxhQUFhLEdBQUcsU0FBUyxDQUFDLENBQUMsQ0FBQyxHQUFHLFNBQVMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7WUFFdkQsTUFBTSxNQUFNLEdBQUcsUUFBUSxDQUFDLFlBQVksS0FBSyxxQkFBcUIsQ0FBQyxJQUFJLENBQUM7WUFDcEUsSUFBSSxNQUFNLEdBQXVDLElBQUksQ0FBQztZQUN0RCxJQUFJLE1BQU0sRUFBRTtnQkFDUixJ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QUFHLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDO29CQUV4RixNQUFNLE9BQU8sR0FBRyxJQUFJLDRCQUE0QixFQUFFLENBQUM7b0JBQ25ELE9BQU8sQ0FBQyxPQUFPLEdBQUcsTUFBTSxDQUFDLE9BQU8sQ0FBQztvQkFDakMsT0FBTyxDQUFDLEtBQUssR0FBRyxPQUFPLENBQUM7b0JBQ3hCLE1BQU0sQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLGNBQWMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEtBQUssQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDO29CQUV4RixFQUFFLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztvQkFDdkIsRUFBRSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7aUJBQzFCO2FBQ0o7WUFDRCxhQUFhLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1NBQzFCO1FBQ0QsT0FBTyxhQUFhLENBQUM7SUFDekIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7b2Z9IGZyb20gJ3J4anMnO1xuXG5pbXBvcnQge1xuICAgIENvbHVtbkRlc2NyaXB0b3IsXG4gICAgRWRpdG9yRGVzY3JpcHRvcixcbiAgICBGaWx0ZXJMb29rdXBEZXNjcmlwdG9yLFxuICAgIE1lZGl1c0ZpbHRlck1hdGNoVHlwZSxcbiAgICBNZWRpdXNRdWVyeVBhcmFtLFxuICAgIE9iamVjdFNlcmlhbGl6ZXIsXG4gICAgVGFibGVEZXNjcmlwdG9yLFxuICAgIFRhYmxldmlld0Rlc2NyaXB0b3Jcbn0gZnJvbSAnQG1lZGl1c2luYy9tbmctY29tbW9ucyc7XG5cbmltcG9ydCB7TW5nRW50aXR5Q2hhbmdlRHRvfSBmcm9tICcuLi9hcGkvbW9kZWxzL2VudGl0eUNoYW5nZSc7XG5pbXBvcnQge01uZ0d1aUVudGl0eU1vZGVsRHRvfSBmcm9tICcuLi9hcGkvbW9kZWxzL2d1aUVudGl0eU1vZGVsJztcbmltcG9ydCB7TW5nR3VpUHJvcGVydHlNb2RlbER0b30gZnJvbSAnLi4vYXBpL21vZGVscy9ndWlQcm9wZXJ0eU1vZGVsJztcbmltcG9ydCB7TW5nR3VpUHJvcGVydHlUeXBlRHRvfSBmcm9tICcuLi9hcGkvbW9kZWxzL2d1aVByb3BlcnR5VHlwZSc7XG5pbXBvcnQge01uZ1JldkVudGl0eVdpdGhTdGF0ZUR0b30gZnJvbSAnLi4vYXBpL21vZGVscy9yZXZFbnRpdHlXaXRoU3RhdGVEdG8nO1xuaW1wb3J0IHtNbmdSZXZpc2lvblR5cGVEdG99IGZyb20gJy4uL2FwaS9tb2RlbHMvcmV2aXNpb25UeXBlJztcbmltcG9ydCB7TW5nRW50aXR5UmV2aXNpb25DaGFuZ2VTdGF0ZX0gZnJvbSAnLi4vbW9kZWxzL2VudGl0eS1yZXZpc2lvbi1jaGFuZ2Utc3RhdGUubW9kZWwnO1xuaW1wb3J0IHtNbmdFbnRpdHlSZXZpc2lvbkNoYW5nZXN9IGZyb20gJy4uL21vZGVscy9lbnRpdHktcmV2aXNpb24tY2hhbmdlcy5tb2RlbCc7XG5pbXBvcnQge05ld01lZGl1c0ZpbHRlck1hdGNoVHlwZX0gZnJvbSAnLi4vbW9kZWxzL25ldy1maWx0ZXItbWF0Y2gtdHlwZS5tb2RlbCc7XG5cbmV4cG9ydCBjbGFzcyBBdWRpdFV0aWwge1xuICAgIHByaXZhdGUgc3RhdGljIF9kYXRlUmVnZXggPSAvXFxkezR9LVswMV1cXGQtWzAtM11cXGQvO1xuXG4gICAgcHVibGljIHN0YXRpYyBhZGRDb2x1bW5zRnJvbU1vZGVsPFQ+KFxuICAgICAgICBkZXNjcmlwdG9yOiBUYWJsZURlc2NyaXB0b3I8VD4sXG4gICAgICAgIHByb3BlcnRpZXM6IE1uZ0d1aVByb3BlcnR5TW9kZWxEdG9bXSxcbiAgICAgICAgbW9kZWxUeXBlOiAncmV2RW50aXR5JyB8ICdlbnRpdHlTdGF0ZScgfCB1bmRlZmluZWQgPSB1bmRlZmluZWQsXG4gICAgICAgIGFkZEZpbHRlcnMgPSB0cnVlLFxuICAgICAgICBhZGRTb3J0cyA9IHRydWVcbiAgICApOiBUYWJsZURlc2NyaXB0b3I8VD4ge1xuICAgICAgICBmb3IgKGNvbnN0IHByb3BlcnR5IG9mIHByb3BlcnRpZXMpIHtcbiAgICAgICAgICAgIGlmICghcHJvcGVydHkucmVzb2x2ZWRQcm9wZXJ0eU5hbWUpIHtcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3QgY29sdW1uUHJlcGVuZCA9IG1vZGVsVHlwZSA/IGAke21vZGVsVHlwZX0uYCA6ICcnO1xuXG4gICAgICAgICAgICBjb25zdCBpc0VudW0gPSBwcm9wZXJ0eS5wcm9wZXJ0eVR5cGUgPT09IE1uZ0d1aVByb3BlcnR5VHlwZUR0by5FbnVtO1xuICAgICAgICAgICAgbGV0IGNvbHVtbjogQ29sdW1uRGVzY3JpcHRvcjxzdHJpbmcsIFQ+IHwgbnVsbCA9IG51bGw7XG4gICAgICAgICAgICBpZiAoaXNFbnVtKSB7XG4gICAgICAgICAgICAgICAgaWYgKCFwcm9wZXJ0eS5wb3NzaWJsZUVudW1WYWx1ZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgY29uc3QgZW51bVR5cGUgPSBBdWRpdFV0aWwuZmluZEVudW1UeXBlKHByb3BlcnR5KTtcbiAgICAgICAgICAgICAgICBpZiAoZW51bVR5cGUpIHtcbiAgICAgICAgICAgICAgICAgICAgY29sdW1uID0gZGVzY3JpcHRvci5hZGRDb2x1bW4oY29sdW1uUHJlcGVuZCArIHByb3BlcnR5LnJlc29sdmVkUHJvcGVydHlOYW1lKS5hc0VudW0oZW51bVR5cGUpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoYWRkRmlsdGVycykge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29sdW1uLndpdGhGaWx0ZXJMb29rdXBFbnVtKHByb3BlcnR5LnBvc3NpYmxlRW51bVZhbHVlcyk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBjb2x1bW4gPSBkZXNjcmlwdG9yLmFkZENvbHVtbihjb2x1bW5QcmVwZW5kICsgcHJvcGVydHkucmVzb2x2ZWRQcm9wZXJ0eU5hbWUpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoYWRkRmlsdGVycykge1xuICAgICAgICAgICAgICAgICAgICAgICAgKGNvbHVtbj8ud2l0aEZpbHRlckxvb2t1cCgpIGFzIEZpbHRlckxvb2t1cERlc2NyaXB0b3I8c3RyaW5nPikud2l0aExvb2t1cCgoKSA9PiBvZihwcm9wZXJ0eS5wb3NzaWJsZUVudW1WYWx1ZXMgPz8gW10pKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSBpZiAocHJvcGVydHkucHJvcGVydHlUeXBlID09PSBNbmdHdWlQcm9wZXJ0eVR5cGVEdG8uTnVtYmVyKSB7XG4gICAgICAgICAgICAgICAgY29sdW1uID0gZGVzY3JpcHRvci5hZGRDb2x1bW4oY29sdW1uUHJlcGVuZCArIHByb3BlcnR5LnJlc29sdmVkUHJvcGVydHlOYW1lKS5hc051bWJlcigpO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChwcm9wZXJ0eS5wcm9wZXJ0eVR5cGUgPT09IE1uZ0d1aVByb3BlcnR5VHlwZUR0by5Cb29sZWFuKSB7XG4gICAgICAgICAgICAgICAgY29sdW1uID0gZGVzY3JpcHRvci5hZGRDb2x1bW4oY29sdW1uUHJlcGVuZCArIHByb3BlcnR5LnJlc29sdmVkUHJvcGVydHlOYW1lKS5hc0Jvb2xlYW4oKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAocHJvcGVydHkucHJvcGVydHlUeXBlID09PSBNbmdHdWlQcm9wZXJ0eVR5cGVEdG8uTG9jYWxEYXRlKSB7XG4gICAgICAgICAgICAgICAgY29sdW1uID0gZGVzY3JpcHRvci5hZGRDb2x1bW4oY29sdW1uUHJlcGVuZCArIHByb3BlcnR5LnJlc29sdmVkUHJvcGVydHlOYW1lKS5hc0RhdGUoJ2RkLiBNTSB5eXl5Jyk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHByb3BlcnR5LnByb3BlcnR5VHlwZSA9PT0gTW5nR3VpUHJvcGVydHlUeXBlRHRvLk9mZnNldERhdGVUaW1lKSB7XG4gICAgICAgICAgICAgICAgY29sdW1uID0gZGVzY3JpcHRvci5hZGRDb2x1bW4oY29sdW1uUHJlcGVuZCArIHByb3BlcnR5LnJlc29sdmVkUHJvcGVydHlOYW1lKS5hc0RhdGUoJ2RkLiBNTSB5eXl5IEhIOm1tJyk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIC8vIHN0cmluZyAvIHdpbGRjYXJkXG4gICAgICAgICAgICAgICAgY29sdW1uID0gZGVzY3JpcHRvci5hZGRDb2x1bW4oY29sdW1uUHJlcGVuZCArIHByb3BlcnR5LnJlc29sdmVkUHJvcGVydHlOYW1lKS53aXRoVGl0bGUoQXVkaXRVdGlsLmdldFByb3BlcnR5VGl0bGVLZXkocHJvcGVydHksIG1vZGVsVHlwZSkpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb2x1bW4ud2l0aFRpdGxlKEF1ZGl0VXRpbC5nZXRQcm9wZXJ0eVRpdGxlS2V5KHByb3BlcnR5LCBtb2RlbFR5cGUpKTtcblxuICAgICAgICAgICAgaWYgKCFpc0VudW0gJiYgYWRkRmlsdGVycykge1xuICAgICAgICAgICAgICAgIGNvbHVtbj8ud2l0aEZpbHRlcigpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGFkZFNvcnRzKSB7XG4gICAgICAgICAgICAgICAgY29sdW1uPy53aXRoU29ydCgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBkZXNjcmlwdG9yO1xuICAgIH1cblxuICAgIHB1YmxpYyBzdGF0aWMgZ2V0UHJvcGVydHlUaXRsZUtleShwcm9wZXJ0eTogTW5nR3VpUHJvcGVydHlNb2RlbER0bywgbW9kZWxUeXBlOiAncmV2RW50aXR5JyB8ICdlbnRpdHlTdGF0ZScgfCB1bmRlZmluZWQgPSB1bmRlZmluZWQpIHtcbiAgICAgICAgaWYgKG1vZGVsVHlwZSA9PT0gJ3JldkVudGl0eScpIHtcbiAgICAgICAgICAgIHJldHVybiAnTW5nUmV2RW50aXR5LnByb3BlcnRpZXMuJyArIHByb3BlcnR5LnJlc29sdmVkUHJvcGVydHlOYW1lO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBwcm9wZXJ0eS5yZXNvbHZlZFByb3BlcnR5TmFtZSA/PyAnJztcbiAgICB9XG5cbiAgICBwdWJsaWMgc3RhdGljIGFkZEZpZWxkc0Zyb21Nb2RlbDxUPihcbiAgICAgICAgZGVzY3JpcHRvcjogRWRpdG9yRGVzY3JpcHRvcjxUPixcbiAgICAgICAgcHJvcGVydGllczogTW5nR3VpUHJvcGVydHlNb2RlbER0b1tdLFxuICAgICAgICBtb2RlbFR5cGU6ICdyZXZFbnRpdHknIHwgJ2VudGl0eVN0YXRlJyA9ICdyZXZFbnRpdHknXG4gICAgKTogRWRpdG9yRGVzY3JpcHRvcjxUPiB7XG4gICAgICAgIGZvciAoY29uc3QgcHJvcGVydHkgb2YgcHJvcGVydGllcykge1xuICAgICAgICAgICAgaWYgKCFwcm9wZXJ0eS5yZXNvbHZlZFByb3BlcnR5TmFtZSkge1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCBmaWVsZFByZXBlbmQgPSBgJHttb2RlbFR5cGV9LmA7XG5cbiAgICAgICAgICAgIGlmIChwcm9wZXJ0eS5wcm9wZXJ0eVR5cGUgPT09IE1uZ0d1aVByb3BlcnR5VHlwZUR0by5FbnVtKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgZW51bVR5cGUgPSBBdWRpdFV0aWwuZmluZEVudW1UeXBlKHByb3BlcnR5KTtcbiAgICAgICAgICAgICAgICBpZiAoZW51bVR5cGUpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFwcm9wZXJ0eS5wb3NzaWJsZUVudW1WYWx1ZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgZGVzY3JpcHRvci5hZGRGaWVsZExvb2t1cEVudW0oZmllbGRQcmVwZW5kICsgcHJvcGVydHkucmVzb2x2ZWRQcm9wZXJ0eU5hbWUsIGVudW1UeXBlLCBwcm9wZXJ0eS5wb3NzaWJsZUVudW1WYWx1ZXMpLndpdGhEaXNhYmxlZCgpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGRlc2NyaXB0b3IuYWRkRmllbGQoZmllbGRQcmVwZW5kICsgcHJvcGVydHkucmVzb2x2ZWRQcm9wZXJ0eU5hbWUpLndpdGhMYWJlbChBdWRpdFV0aWwuZ2V0UHJvcGVydHlUaXRsZUtleShwcm9wZXJ0eSwgbW9kZWxUeXBlKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIGlmIChwcm9wZXJ0eS5wcm9wZXJ0eVR5cGUgPT09IE1uZ0d1aVByb3BlcnR5VHlwZUR0by5OdW1iZXIpIHtcbiAgICAgICAgICAgICAgICBkZXNjcmlwdG9yXG4gICAgICAgICAgICAgICAgICAgIC5hZGRGaWVsZChmaWVsZFByZXBlbmQgKyBwcm9wZXJ0eS5yZXNvbHZlZFByb3BlcnR5TmFtZSlcbiAgICAgICAgICAgICAgICAgICAgLndpdGhMYWJlbChBdWRpdFV0aWwuZ2V0UHJvcGVydHlUaXRsZUtleShwcm9wZXJ0eSwgbW9kZWxUeXBlKSlcbiAgICAgICAgICAgICAgICAgICAgLmFzTnVtYmVyKClcbiAgICAgICAgICAgICAgICAgICAgLndpdGhEaXNhYmxlZCgpO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChwcm9wZXJ0eS5wcm9wZXJ0eVR5cGUgPT09IE1uZ0d1aVByb3BlcnR5VHlwZUR0by5Cb29sZWFuKSB7XG4gICAgICAgICAgICAgICAgZGVzY3JpcHRvclxuICAgICAgICAgICAgICAgICAgICAuYWRkRmllbGQoZmllbGRQcmVwZW5kICsgcHJvcGVydHkucmVzb2x2ZWRQcm9wZXJ0eU5hbWUpXG4gICAgICAgICAgICAgICAgICAgIC53aXRoTGFiZWwoQXVkaXRVdGlsLmdldFByb3BlcnR5VGl0bGVLZXkocHJvcGVydHksIG1vZGVsVHlwZSkpXG4gICAgICAgICAgICAgICAgICAgIC53aXRoRGlzYWJsZWQoKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAocHJvcGVydHkucHJvcGVydHlUeXBlID09PSBNbmdHdWlQcm9wZXJ0eVR5cGVEdG8uTG9jYWxEYXRlKSB7XG4gICAgICAgICAgICAgICAgZGVzY3JpcHRvclxuICAgICAgICAgICAgICAgICAgICAuYWRkRmllbGQoZmllbGRQcmVwZW5kICsgcHJvcGVydHkucmVzb2x2ZWRQcm9wZXJ0eU5hbWUpXG4gICAgICAgICAgICAgICAgICAgIC53aXRoTGFiZWwoQXVkaXRVdGlsLmdldFByb3BlcnR5VGl0bGVLZXkocHJvcGVydHksIG1vZGVsVHlwZSkpXG4gICAgICAgICAgICAgICAgICAgIC5hc0RhdGVQaWNrZXIoJ2RkLiBNTU0geXl5eScpXG4gICAgICAgICAgICAgICAgICAgIC53aXRoRGlzYWJsZWQoKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAocHJvcGVydHkucHJvcGVydHlUeXBlID09PSBNbmdHdWlQcm9wZXJ0eVR5cGVEdG8uT2Zmc2V0RGF0ZVRpbWUpIHtcbiAgICAgICAgICAgICAgICBkZXNjcmlwdG9yXG4gICAgICAgICAgICAgICAgICAgIC5hZGRGaWVsZChmaWVsZFByZXBlbmQgKyBwcm9wZXJ0eS5yZXNvbHZlZFByb3BlcnR5TmFtZSlcbiAgICAgICAgICAgICAgICAgICAgLndpdGhMYWJlbChBdWRpdFV0aWwuZ2V0UHJvcGVydHlUaXRsZUtleShwcm9wZXJ0eSwgbW9kZWxUeXBlKSlcbiAgICAgICAgICAgICAgICAgICAgLmFzRGF0ZVBpY2tlcignZGQuIE1NIHl5JywgdW5kZWZpbmVkLCB1bmRlZmluZWQsIHRydWUsIGZhbHNlKVxuICAgICAgICAgICAgICAgICAgICAud2l0aERpc2FibGVkKCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIC8vIHN0cmluZyAvIHdpbGRjYXJkXG4gICAgICAgICAgICAgICAgZGVzY3JpcHRvclxuICAgICAgICAgICAgICAgICAgICAuYWRkRmllbGQoZmllbGRQcmVwZW5kICsgcHJvcGVydHkucmVzb2x2ZWRQcm9wZXJ0eU5hbWUpXG4gICAgICAgICAgICAgICAgICAgIC53aXRoTGFiZWwoQXVkaXRVdGlsLmdldFByb3BlcnR5VGl0bGVLZXkocHJvcGVydHksIG1vZGVsVHlwZSkpXG4gICAgICAgICAgICAgICAgICAgIC53aXRoRGlzYWJsZWQoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZGVzY3JpcHRvcjtcbiAgICB9XG5cbiAgICBwdWJsaWMgc3RhdGljIGJ1aWxkRGVzY3JpcHRvckZvckVudGl0eVJldmlzaW9uKFxuICAgICAgICBkZXNjcmlwdG9yOiBUYWJsZXZpZXdEZXNjcmlwdG9yPE1uZ1JldkVudGl0eVdpdGhTdGF0ZUR0bz4sXG4gICAgICAgIHJldk1vZGVsOiBNbmdHdWlFbnRpdHlNb2RlbER0byxcbiAgICAgICAgZW50aXR5TW9kZWw6IE1uZ0d1aUVudGl0eU1vZGVsRHRvXG4gICAgKTogVGFibGV2aWV3RGVzY3JpcHRvcjxNbmdSZXZFbnRpdHlXaXRoU3RhdGVEdG8+IHtcbiAgICAgICAgZGVzY3JpcHRvci5hZGRDb2x1bW4oJ3JldlR5cGUnKS53aXRoVGl0bGUoJ01uZ0VudGl0eVJldmlzaW9uQ2hhbmdlU3RhdGUucHJvcGVydGllcy5yZXZUeXBlJykuYXNFbnVtKE1uZ1JldmlzaW9uVHlwZUR0bykud2l0aEZpbHRlcigpO1xuICAgICAgICBkZXNjcmlwdG9yLmFkZEZpZWxkTG9va3VwRW51bSgncmV2VHlwZScsIE1uZ1JldmlzaW9uVHlwZUR0bykud2l0aExhYmVsKCdNbmdFbnRpdHlSZXZpc2lvbkNoYW5nZVN0YXRlLnByb3BlcnRpZXMucmV2VHlwZScpO1xuXG4gICAgICAgIGlmIChyZXZNb2RlbC5wcm9wZXJ0aWVzKSB7XG4gICAgICAgICAgICBBdWRpdFV0aWwuYWRkQ29sdW1uc0Zyb21Nb2RlbChkZXNjcmlwdG9yLnRhYmxlLCByZXZNb2RlbC5wcm9wZXJ0aWVzLCAncmV2RW50aXR5Jyk7XG4gICAgICAgICAgICBBdWRpdFV0aWwuYWRkRmllbGRzRnJvbU1vZGVsKGRlc2NyaXB0b3IuZGV0YWlsc0VkaXRvciwgcmV2TW9kZWwucHJvcGVydGllcywgJ3JldkVudGl0eScpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChlbnRpdHlNb2RlbC5wcm9wZXJ0aWVzKSB7XG4gICAgICAgICAgICBBdWRpdFV0aWwuYWRkQ29sdW1uc0Zyb21Nb2RlbChkZXNjcmlwdG9yLnRhYmxlLCBlbnRpdHlNb2RlbC5wcm9wZXJ0aWVzLCAnZW50aXR5U3RhdGUnKTtcbiAgICAgICAgICAgIEF1ZGl0VXRpbC5hZGRGaWVsZHNGcm9tTW9kZWwoZGVzY3JpcHRvci5kZXRhaWxzRWRpdG9yLCBlbnRpdHlNb2RlbC5wcm9wZXJ0aWVzLCAnZW50aXR5U3RhdGUnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBkZXNjcmlwdG9yO1xuICAgIH1cblxuICAgIHB1YmxpYyBzdGF0aWMgZmluZEVudW1UeXBlKHByb3BlcnR5OiBNbmdHdWlQcm9wZXJ0eU1vZGVsRHRvKSB7XG4gICAgICAgIGlmICghcHJvcGVydHkuZW51bUNsYXNzU2ltcGxlTmFtZSkge1xuICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBlbnVtVHlwZSA9IE9iamVjdFNlcmlhbGl6ZXIuZ2V0KCkuZmluZEVudW0ocHJvcGVydHkuZW51bUNsYXNzU2ltcGxlTmFtZSk7XG4gICAgICAgIGlmICghZW51bVR5cGUpIHtcbiAgICAgICAgICAgIGVudW1UeXBlID0gT2JqZWN0U2VyaWFsaXplci5nZXQoKS5maW5kRW51bShwcm9wZXJ0eS5lbnVtQ2xhc3NTaW1wbGVOYW1lICsgJ0R0bycpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBlbnVtVHlwZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgc3RhdGljIGV4dHJhY3RQcm9wZXJ0eU5hbWUoZnVsbFByb3BlcnR5TmFtZTogc3RyaW5nIHwgdW5kZWZpbmVkKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgICAgICAgaWYgKGZ1bGxQcm9wZXJ0eU5hbWU/LmluY2x1ZGVzKCdlbnRpdHlTdGF0ZS4nKSkge1xuICAgICAgICAgICAgcmV0dXJuIGZ1bGxQcm9wZXJ0eU5hbWUucmVwbGFjZSgnZW50aXR5U3RhdGUuJywgJycpO1xuICAgICAgICB9IGVsc2UgaWYgKGZ1bGxQcm9wZXJ0eU5hbWU/LmluY2x1ZGVzKCdyZXZFbnRpdHkuJykpIHtcbiAgICAgICAgICAgIHJldHVybiBmdWxsUHJvcGVydHlOYW1lPy5yZXBsYWNlKCdyZXZFbnRpdHkuJywgJycpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmdWxsUHJvcGVydHlOYW1lO1xuICAgIH1cblxuICAgIHB1YmxpYyBzdGF0aWMgYXBwZW5kTWVkaXVzUXVlcnlQYXJhbXNUb1VybChxdWVyeVBhcmFtczogTWVkaXVzUXVlcnlQYXJhbSk6IHN0cmluZyB7XG4gICAgICAgIGxldCB1cmwgPSBgP2ZpcnN0UmVzdWx0PSR7cXVlcnlQYXJhbXMuaXRlbXNPZmZzZXR9Jm1heFJlc3VsdHM9JHtxdWVyeVBhcmFtcy5pdGVtc1BlclBhZ2V9YDtcbiAgICAgICAgaWYgKHF1ZXJ5UGFyYW1zLnNvcnRQcm9wZXJ0eSAmJiBxdWVyeVBhcmFtcy5zb3J0UHJvcGVydHkubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgdXJsICs9ICcmc29ydHM9JztcbiAgICAgICAgICAgIGNvbnN0IHNvcnRpbmdRUHMgPSBbXTtcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcXVlcnlQYXJhbXMuc29ydFByb3BlcnR5Lmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgc29ydGluZ1FQcy5wdXNoKGAke3F1ZXJ5UGFyYW1zLnNvcnRBc2M/LltpXSA/PyB0cnVlID8gJ2FzYycgOiAnZGVzYyd9OiR7dGhpcy5leHRyYWN0UHJvcGVydHlOYW1lKHF1ZXJ5UGFyYW1zLnNvcnRQcm9wZXJ0eVtpXSl9YCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB1cmwgKz0gc29ydGluZ1FQcy5qb2luKCcsJyk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAocXVlcnlQYXJhbXMuZmlsdGVyUGFyYW1zICYmIHF1ZXJ5UGFyYW1zLmZpbHRlclBhcmFtcy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICBjb25zdCBmaWx0ZXJRUHMgPSBbXTtcbiAgICAgICAgICAgIGZvciAoY29uc3QgbWZwIG9mIHF1ZXJ5UGFyYW1zLmZpbHRlclBhcmFtcykge1xuICAgICAgICAgICAgICAgIHN3aXRjaCAobWZwLmZpbHRlck1hdGNoVHlwZSkge1xuICAgICAgICAgICAgICAgICAgICBjYXNlIE1lZGl1c0ZpbHRlck1hdGNoVHlwZS5FcXVhbHM6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpbHRlclFQcy5wdXNoKGAke3RoaXMuZXh0cmFjdFByb3BlcnR5TmFtZShtZnAucHJvcGVydHkpfT0ke05ld01lZGl1c0ZpbHRlck1hdGNoVHlwZS5FcXVhbHN9OiR7bWZwLmZpbHRlclZhbHVlfWApO1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgY2FzZSBNZWRpdXNGaWx0ZXJNYXRjaFR5cGUuTm90RXF1YWxzOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBmaWx0ZXJRUHMucHVzaChgJHt0aGlzLmV4dHJhY3RQcm9wZXJ0eU5hbWUobWZwLnByb3BlcnR5KX09JHtOZXdNZWRpdXNGaWx0ZXJNYXRjaFR5cGUuTm90RXF1YWxzfToke21mcC5maWx0ZXJWYWx1ZX1gKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgTWVkaXVzRmlsdGVyTWF0Y2hUeXBlLkZyb21Ubzoge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuX2RhdGVSZWdleC50ZXN0KG1mcC5maWx0ZXJWYWx1ZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWx0ZXJRUHMucHVzaChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYCR7dGhpcy5leHRyYWN0UHJvcGVydHlOYW1lKG1mcC5wcm9wZXJ0eSl9PSR7TmV3TWVkaXVzRmlsdGVyTWF0Y2hUeXBlLkJldHdlZW59OiR7bmV3IERhdGUobWZwLmZpbHRlclZhbHVlKS50b0lTT1N0cmluZygpfSwke25ldyBEYXRlKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWZwLmZpbHRlclZhbHVlVG9cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKS50b0lTT1N0cmluZygpfWBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWx0ZXJRUHMucHVzaChgJHt0aGlzLmV4dHJhY3RQcm9wZXJ0eU5hbWUobWZwLnByb3BlcnR5KX09JHtOZXdNZWRpdXNGaWx0ZXJNYXRjaFR5cGUuQmV0d2Vlbn06JHttZnAuZmlsdGVyVmFsdWV9LCR7bWZwLmZpbHRlclZhbHVlVG99YCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBjYXNlIE1lZGl1c0ZpbHRlck1hdGNoVHlwZS5Db250YWluczoge1xuICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVyUVBzLnB1c2goYCR7dGhpcy5leHRyYWN0UHJvcGVydHlOYW1lKG1mcC5wcm9wZXJ0eSl9PSR7TmV3TWVkaXVzRmlsdGVyTWF0Y2hUeXBlLkNvbnRhaW5zfToke21mcC5maWx0ZXJWYWx1ZX1gKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgTWVkaXVzRmlsdGVyTWF0Y2hUeXBlLlN0YXJ0c1dpdGg6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpbHRlclFQcy5wdXNoKGAke3RoaXMuZXh0cmFjdFByb3BlcnR5TmFtZShtZnAucHJvcGVydHkpfT0ke05ld01lZGl1c0ZpbHRlck1hdGNoVHlwZS5TdGFydHNXaXRofToke21mcC5maWx0ZXJWYWx1ZX1gKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgTWVkaXVzRmlsdGVyTWF0Y2hUeXBlLkVuZHNXaXRoOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBmaWx0ZXJRUHMucHVzaChgJHt0aGlzLmV4dHJhY3RQcm9wZXJ0eU5hbWUobWZwLnByb3BlcnR5KX09JHtOZXdNZWRpdXNGaWx0ZXJNYXRjaFR5cGUuRW5kc1dpdGh9OiR7bWZwLmZpbHRlclZhbHVlfWApO1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgY2FzZSBNZWRpdXNGaWx0ZXJNYXRjaFR5cGUuSW46IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpbHRlclFQcy5wdXNoKGAke3RoaXMuZXh0cmFjdFByb3BlcnR5TmFtZShtZnAucHJvcGVydHkpfT0ke05ld01lZGl1c0ZpbHRlck1hdGNoVHlwZS5Jbn06JHttZnAuZmlsdGVyVmFsdWV9YCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBjYXNlIE1lZGl1c0ZpbHRlck1hdGNoVHlwZS5Ob3RJbjoge1xuICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVyUVBzLnB1c2goYCR7dGhpcy5leHRyYWN0UHJvcGVydHlOYW1lKG1mcC5wcm9wZXJ0eSl9PSR7TmV3TWVkaXVzRmlsdGVyTWF0Y2hUeXBlLk5vdElufToke21mcC5maWx0ZXJWYWx1ZX1gKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgTWVkaXVzRmlsdGVyTWF0Y2hUeXBlLlNtYWxsZXJUaGFuOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5fZGF0ZVJlZ2V4LnRlc3QobWZwLmZpbHRlclZhbHVlKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbHRlclFQcy5wdXNoKGAke3RoaXMuZXh0cmFjdFByb3BlcnR5TmFtZShtZnAucHJvcGVydHkpfT0ke05ld01lZGl1c0ZpbHRlck1hdGNoVHlwZS5MZXNzVGhhbn06JHtuZXcgRGF0ZShtZnAuZmlsdGVyVmFsdWUpLnRvSVNPU3RyaW5nKCl9YCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbHRlclFQcy5wdXNoKGAke3RoaXMuZXh0cmFjdFByb3BlcnR5TmFtZShtZnAucHJvcGVydHkpfT0ke05ld01lZGl1c0ZpbHRlck1hdGNoVHlwZS5MZXNzVGhhbn06JHttZnAuZmlsdGVyVmFsdWV9YCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBjYXNlIE1lZGl1c0ZpbHRlck1hdGNoVHlwZS5HcmVhdGVyVGhhbjoge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuX2RhdGVSZWdleC50ZXN0KG1mcC5maWx0ZXJWYWx1ZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWx0ZXJRUHMucHVzaChgJHt0aGlzLmV4dHJhY3RQcm9wZXJ0eU5hbWUobWZwLnByb3BlcnR5KX09JHtOZXdNZWRpdXNGaWx0ZXJNYXRjaFR5cGUuR3JlYXRlclRoYW59OiR7bmV3IERhdGUobWZwLmZpbHRlclZhbHVlKS50b0lTT1N0cmluZygpfWApO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWx0ZXJRUHMucHVzaChgJHt0aGlzLmV4dHJhY3RQcm9wZXJ0eU5hbWUobWZwLnByb3BlcnR5KX09JHtOZXdNZWRpdXNGaWx0ZXJNYXRjaFR5cGUuR3JlYXRlclRoYW59OiR7bWZwLmZpbHRlclZhbHVlfWApO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB1cmwgKz0gJyYnO1xuICAgICAgICAgICAgdXJsICs9IGZpbHRlclFQcy5qb2luKCcmJyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHVybDtcbiAgICB9XG5cbiAgICBwdWJsaWMgc3RhdGljIG1hcEl0ZW1zVG9FbnRpdHlDaGFuZ2VzQXJyYXkoZmllbGRWYWx1ZToge1trZXk6IHN0cmluZ106IEFycmF5PE1uZ0VudGl0eUNoYW5nZUR0bz59KTogQXJyYXk8TW5nRW50aXR5UmV2aXNpb25DaGFuZ2VzPiB7XG4gICAgICAgIGNvbnN0IGVudGl0eUNoYW5nZXM6IE1uZ0VudGl0eVJldmlzaW9uQ2hhbmdlc1tdID0gW107XG4gICAgICAgIGZvciAoY29uc3Qga2V5IG9mIE9iamVjdC5rZXlzKGZpZWxkVmFsdWUpKSB7XG4gICAgICAgICAgICBjb25zdCBlYyA9IG5ldyBNbmdFbnRpdHlSZXZpc2lvbkNoYW5nZXMoKTtcbiAgICAgICAgICAgIGVjLmVudGl0eVR5cGUgPSBrZXk7XG4gICAgICAgICAgICBlYy5pdGVtcyA9IFtdO1xuICAgICAgICAgICAgZm9yIChjb25zdCBjaGFuZ2Ugb2YgZmllbGRWYWx1ZVtrZXldKSB7XG4gICAgICAgICAgICAgICAgaWYgKGNoYW5nZS5yZXZUeXBlID09PSBNbmdSZXZpc2lvblR5cGVEdG8uQWRkICYmIGNoYW5nZS5lbnRpdHlOZXdTdGF0ZSkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBpdGVtID0gbmV3IE1uZ0VudGl0eVJldmlzaW9uQ2hhbmdlU3RhdGUoKTtcbiAgICAgICAgICAgICAgICAgICAgaXRlbS5yZXZUeXBlID0gY2hhbmdlLnJldlR5cGU7XG4gICAgICAgICAgICAgICAgICAgIGl0ZW0uY29sb3IgPSAnZ3JlZW4nO1xuICAgICAgICAgICAgICAgICAgICBPYmplY3QuZW50cmllcyhjaGFuZ2UuZW50aXR5TmV3U3RhdGUpLmZvckVhY2goKFtrZXksIHZhbHVlXSkgPT4gKGl0ZW1ba2V5XSA9IHZhbHVlKSk7XG4gICAgICAgICAgICAgICAgICAgIGVjLml0ZW1zLnB1c2goaXRlbSk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChjaGFuZ2UucmV2VHlwZSA9PT0gTW5nUmV2aXNpb25UeXBlRHRvLkRlbCAmJiBjaGFuZ2UuZW50aXR5T2xkU3RhdGUpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgaXRlbSA9IG5ldyBNbmdFbnRpdHlSZXZpc2lvbkNoYW5nZVN0YXRlKCk7XG4gICAgICAgICAgICAgICAgICAgIGl0ZW0ucmV2VHlwZSA9IGNoYW5nZS5yZXZUeXBlO1xuICAgICAgICAgICAgICAgICAgICBpdGVtLmNvbG9yID0gJ3JlZCc7XG4gICAgICAgICAgICAgICAgICAgIE9iamVjdC5lbnRyaWVzKGNoYW5nZS5lbnRpdHlPbGRTdGF0ZSkuZm9yRWFjaCgoW2tleSwgdmFsdWVdKSA9PiAoaXRlbVtrZXldID0gdmFsdWUpKTtcbiAgICAgICAgICAgICAgICAgICAgZWMuaXRlbXMucHVzaChpdGVtKTtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGNoYW5nZS5yZXZUeXBlID09PSBNbmdSZXZpc2lvblR5cGVEdG8uTW9kICYmIGNoYW5nZS5lbnRpdHlPbGRTdGF0ZSAmJiBjaGFuZ2UuZW50aXR5TmV3U3RhdGUpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgaXRlbU9sZCA9IG5ldyBNbmdFbnRpdHlSZXZpc2lvbkNoYW5nZVN0YXRlKCk7XG4gICAgICAgICAgICAgICAgICAgIGl0ZW1PbGQucmV2VHlwZSA9IGNoYW5nZS5yZXZUeXBlO1xuICAgICAgICAgICAgICAgICAgICBpdGVtT2xkLmNvbG9yID0gJ3JlZCc7XG4gICAgICAgICAgICAgICAgICAgIE9iamVjdC5lbnRyaWVzKGNoYW5nZS5lbnRpdHlPbGRTdGF0ZSkuZm9yRWFjaCgoW2tleSwgdmFsdWVdKSA9PiAoaXRlbU9sZFtrZXldID0gdmFsdWUpKTtcblxuICAgICAgICAgICAgICAgICAgICBjb25zdCBpdGVtTmV3ID0gbmV3IE1uZ0VudGl0eVJldmlzaW9uQ2hhbmdlU3RhdGUoKTtcbiAgICAgICAgICAgICAgICAgICAgaXRlbU5ldy5yZXZUeXBlID0gY2hhbmdlLnJldlR5cGU7XG4gICAgICAgICAgICAgICAgICAgIGl0ZW1OZXcuY29sb3IgPSAnZ3JlZW4nO1xuICAgICAgICAgICAgICAgICAgICBPYmplY3QuZW50cmllcyhjaGFuZ2UuZW50aXR5TmV3U3RhdGUpLmZvckVhY2goKFtrZXksIHZhbHVlXSkgPT4gKGl0ZW1OZXdba2V5XSA9IHZhbHVlKSk7XG5cbiAgICAgICAgICAgICAgICAgICAgZWMuaXRlbXMucHVzaChpdGVtT2xkKTtcbiAgICAgICAgICAgICAgICAgICAgZWMuaXRlbXMucHVzaChpdGVtTmV3KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbnRpdHlDaGFuZ2VzLnB1c2goZWMpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBlbnRpdHlDaGFuZ2VzO1xuICAgIH1cbn1cbiJdfQ==
277
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXVkaXQudXRpbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9saWIvdXRpbHMvYXVkaXQudXRpbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUMsRUFBRSxFQUFDLE1BQU0sTUFBTSxDQUFDO0FBRXhCLE9BQU8sRUFJSCxxQkFBcUIsRUFJckIsWUFBWSxFQUNmLE1BQU0sd0JBQXdCLENBQUM7QUFLaEMsT0FBTyxFQUFDLHFCQUFxQixFQUFDLE1BQU0sK0JBQStCLENBQUM7QUFFcEUsT0FBTyxFQUFDLGtCQUFrQixFQUFDLE1BQU0sNEJBQTRCLENBQUM7QUFDOUQsT0FBTyxFQUFDLDRCQUE0QixFQUFDLE1BQU0sOENBQThDLENBQUM7QUFDMUYsT0FBTyxFQUFDLHdCQUF3QixFQUFDLE1BQU0seUNBQXlDLENBQUM7QUFDakYsT0FBTyxFQUFDLHdCQUF3QixFQUFDLE1BQU0sdUNBQXVDLENBQUM7QUFFL0UsTUFBTSxPQUFPLFNBQVM7YUFDSCxlQUFVLEdBQUcsc0JBQXNCLENBQUM7SUFFNUMsTUFBTSxDQUFDLG1CQUFtQixDQUM3QixVQUFrQyxFQUNsQyxVQUFvQyxFQUNwQyxZQUFxRCxTQUFTLEVBQzlELFVBQVUsR0FBRyxJQUFJLEVBQ2pCLFFBQVEsR0FBRyxJQUFJO1FBRWYsS0FBSyxNQUFNLFFBQVEsSUFBSSxVQUFVLEVBQUU7WUFDL0IsSUFBSSxDQUFDLFFBQVEsQ0FBQyxvQkFBb0IsRUFBRTtnQkFDaEMsU0FBUzthQUNaO1lBRUQsTUFBTSxNQUFNLEdBQUcsUUFBUSxDQUFDLFlBQVksS0FBSyxxQkFBcUIsQ0FBQyxJQUFJLENBQUM7WUFDcEUsOERBQThEO1lBQzlELElBQUksTUFBTSxHQUFvQyxJQUFJLENBQUM7WUFDbkQsSUFBSSxNQUFNLEVBQUU7Z0JBQ1IsSUFBSSxDQUFDLFFBQVEsQ0FBQyxrQkFBa0IsRUFBRTtvQkFDOUIsU0FBUztpQkFDWjtnQkFFRCxNQUFNLFFBQVEsR0FBRyxT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QUFDLEdBQUcsRUFBRSxLQUFLLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQztvQkFFeEYsTUFBTSxPQUFPLEdBQUcsSUFBSSw0QkFBNEIsRUFBRSxDQUFDO29CQUNuRCxPQUFPLENBQUMsT0FBTyxHQUFHLE1BQU0sQ0FBQyxPQUFPLENBQUM7b0JBQ2pDLE9BQU8sQ0FBQyxLQUFLLEdBQUcsT0FBTyxDQUFDO29CQUN4QixNQUFNLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxjQUFjLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxLQUFLLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQztvQkFFeEYsRUFBRSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7b0JBQ3ZCLEVBQUUsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO2lCQUMxQjthQUNKO1lBQ0QsYUFBYSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztTQUMxQjtRQUNELE9BQU8sYUFBYSxDQUFDO0lBQ3pCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge29mfSBmcm9tICdyeGpzJztcblxuaW1wb3J0IHtcbiAgICBDb2x1bW5EZXNjcmlwdG9yLFxuICAgIEVkaXRvckRlc2NyaXB0b3JJbnN0LFxuICAgIEZpbHRlckxvb2t1cERlc2NyaXB0b3IsXG4gICAgTWVkaXVzRmlsdGVyTWF0Y2hUeXBlLFxuICAgIE1lZGl1c1F1ZXJ5UGFyYW0sXG4gICAgVGFibGVEZXNjcmlwdG9ySW5zdCxcbiAgICBUYWJsZXZpZXdEZXNjcmlwdG9ySW5zdCxcbiAgICBUeXBlUmVnaXN0cnlcbn0gZnJvbSAnQG1lZGl1c2luYy9tbmctY29tbW9ucyc7XG5cbmltcG9ydCB7TW5nRW50aXR5Q2hhbmdlRHRvfSBmcm9tICcuLi9hcGkvbW9kZWxzL2VudGl0eUNoYW5nZSc7XG5pbXBvcnQge01uZ0d1aUVudGl0eU1vZGVsRHRvfSBmcm9tICcuLi9hcGkvbW9kZWxzL2d1aUVudGl0eU1vZGVsJztcbmltcG9ydCB7TW5nR3VpUHJvcGVydHlNb2RlbER0b30gZnJvbSAnLi4vYXBpL21vZGVscy9ndWlQcm9wZXJ0eU1vZGVsJztcbmltcG9ydCB7TW5nR3VpUHJvcGVydHlUeXBlRHRvfSBmcm9tICcuLi9hcGkvbW9kZWxzL2d1aVByb3BlcnR5VHlwZSc7XG5pbXBvcnQge01uZ1JldkVudGl0eVdpdGhTdGF0ZUR0b30gZnJvbSAnLi4vYXBpL21vZGVscy9yZXZFbnRpdHlXaXRoU3RhdGVEdG8nO1xuaW1wb3J0IHtNbmdSZXZpc2lvblR5cGVEdG99IGZyb20gJy4uL2FwaS9tb2RlbHMvcmV2aXNpb25UeXBlJztcbmltcG9ydCB7TW5nRW50aXR5UmV2aXNpb25DaGFuZ2VTdGF0ZX0gZnJvbSAnLi4vbW9kZWxzL2VudGl0eS1yZXZpc2lvbi1jaGFuZ2Utc3RhdGUubW9kZWwnO1xuaW1wb3J0IHtNbmdFbnRpdHlSZXZpc2lvbkNoYW5nZXN9IGZyb20gJy4uL21vZGVscy9lbnRpdHktcmV2aXNpb24tY2hhbmdlcy5tb2RlbCc7XG5pbXBvcnQge05ld01lZGl1c0ZpbHRlck1hdGNoVHlwZX0gZnJvbSAnLi4vbW9kZWxzL25ldy1maWx0ZXItbWF0Y2gtdHlwZS5tb2RlbCc7XG5cbmV4cG9ydCBjbGFzcyBBdWRpdFV0aWwge1xuICAgIHByaXZhdGUgc3RhdGljIF9kYXRlUmVnZXggPSAvXFxkezR9LVswMV1cXGQtWzAtM11cXGQvO1xuXG4gICAgcHVibGljIHN0YXRpYyBhZGRDb2x1bW5zRnJvbU1vZGVsPFQ+KFxuICAgICAgICBkZXNjcmlwdG9yOiBUYWJsZURlc2NyaXB0b3JJbnN0PFQ+LFxuICAgICAgICBwcm9wZXJ0aWVzOiBNbmdHdWlQcm9wZXJ0eU1vZGVsRHRvW10sXG4gICAgICAgIG1vZGVsVHlwZTogJ3JldkVudGl0eScgfCAnZW50aXR5U3RhdGUnIHwgdW5kZWZpbmVkID0gdW5kZWZpbmVkLFxuICAgICAgICBhZGRGaWx0ZXJzID0gdHJ1ZSxcbiAgICAgICAgYWRkU29ydHMgPSB0cnVlXG4gICAgKTogVGFibGVEZXNjcmlwdG9ySW5zdDxUPiB7XG4gICAgICAgIGZvciAoY29uc3QgcHJvcGVydHkgb2YgcHJvcGVydGllcykge1xuICAgICAgICAgICAgaWYgKCFwcm9wZXJ0eS5yZXNvbHZlZFByb3BlcnR5TmFtZSkge1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCBpc0VudW0gPSBwcm9wZXJ0eS5wcm9wZXJ0eVR5cGUgPT09IE1uZ0d1aVByb3BlcnR5VHlwZUR0by5FbnVtO1xuICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbiAgICAgICAgICAgIGxldCBjb2x1bW46IENvbHVtbkRlc2NyaXB0b3I8YW55LCBUPiB8IG51bGwgPSBudWxsO1xuICAgICAgICAgICAgaWYgKGlzRW51bSkge1xuICAgICAgICAgICAgICAgIGlmICghcHJvcGVydHkucG9zc2libGVFbnVtVmFsdWVzKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGNvbnN0IGVudW1UeXBlID0gQXVkaXRVdGlsLmZpbmRFbnVtVHlwZShwcm9wZXJ0eSk7XG4gICAgICAgICAgICAgICAgaWYgKGVudW1UeXBlKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbHVtbiA9IGRlc2NyaXB0b3IuYWRkQ29sdW1uVW5zYWZlKHByb3BlcnR5LnJlc29sdmVkUHJvcGVydHlOYW1lKS5hc0VudW0oZW51bVR5cGUpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoYWRkRmlsdGVycykge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29sdW1uLndpdGhGaWx0ZXJMb29rdXBFbnVtKHByb3BlcnR5LnBvc3NpYmxlRW51bVZhbHVlcyk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBjb2x1bW4gPSBkZXNjcmlwdG9yLmFkZENvbHVtblVuc2FmZShwcm9wZXJ0eS5yZXNvbHZlZFByb3BlcnR5TmFtZSk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChhZGRGaWx0ZXJzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAoY29sdW1uPy53aXRoRmlsdGVyTG9va3VwKCkgYXMgRmlsdGVyTG9va3VwRGVzY3JpcHRvcjxzdHJpbmc+KS53aXRoTG9va3VwKCgpID0+IG9mKHByb3BlcnR5LnBvc3NpYmxlRW51bVZhbHVlcyA/PyBbXSkpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIGlmIChwcm9wZXJ0eS5wcm9wZXJ0eVR5cGUgPT09IE1uZ0d1aVByb3BlcnR5VHlwZUR0by5OdW1iZXIpIHtcbiAgICAgICAgICAgICAgICBjb2x1bW4gPSBkZXNjcmlwdG9yLmFkZENvbHVtblVuc2FmZShwcm9wZXJ0eS5yZXNvbHZlZFByb3BlcnR5TmFtZSkuYXNOdW1iZXIoKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAocHJvcGVydHkucHJvcGVydHlUeXBlID09PSBNbmdHdWlQcm9wZXJ0eVR5cGVEdG8uQm9vbGVhbikge1xuICAgICAgICAgICAgICAgIGNvbHVtbiA9IGRlc2NyaXB0b3IuYWRkQ29sdW1uVW5zYWZlKHByb3BlcnR5LnJlc29sdmVkUHJvcGVydHlOYW1lKS5hc0Jvb2xlYW4oKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAocHJvcGVydHkucHJvcGVydHlUeXBlID09PSBNbmdHdWlQcm9wZXJ0eVR5cGVEdG8uTG9jYWxEYXRlKSB7XG4gICAgICAgICAgICAgICAgY29sdW1uID0gZGVzY3JpcHRvci5hZGRDb2x1bW5VbnNhZmUocHJvcGVydHkucmVzb2x2ZWRQcm9wZXJ0eU5hbWUpLmFzRGF0ZSgnZGQuIE1NIHl5eXknKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAocHJvcGVydHkucHJvcGVydHlUeXBlID09PSBNbmdHdWlQcm9wZXJ0eVR5cGVEdG8uT2Zmc2V0RGF0ZVRpbWUpIHtcbiAgICAgICAgICAgICAgICBjb2x1bW4gPSBkZXNjcmlwdG9yLmFkZENvbHVtblVuc2FmZShwcm9wZXJ0eS5yZXNvbHZlZFByb3BlcnR5TmFtZSkuYXNEYXRlKCdkZC4gTU0geXl5eSBISDptbScpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAvLyBzdHJpbmcgLyB3aWxkY2FyZFxuICAgICAgICAgICAgICAgIGNvbHVtbiA9IGRlc2NyaXB0b3IuYWRkQ29sdW1uVW5zYWZlKHByb3BlcnR5LnJlc29sdmVkUHJvcGVydHlOYW1lKS53aXRoVGl0bGUoQXVkaXRVdGlsLmdldFByb3BlcnR5VGl0bGVLZXkocHJvcGVydHksIG1vZGVsVHlwZSkpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAobW9kZWxUeXBlKSB7XG4gICAgICAgICAgICAgICAgY29sdW1uLndpdGhHZXR0ZXIoKHZhbHVlLCBpdGVtKSA9PiBpdGVtPy5bbW9kZWxUeXBlIGFzIGtleW9mIG9iamVjdF0/Lltwcm9wZXJ0eS5yZXNvbHZlZFByb3BlcnR5TmFtZSBhcyBrZXlvZiBvYmplY3RdKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29sdW1uLndpdGhUaXRsZShBdWRpdFV0aWwuZ2V0UHJvcGVydHlUaXRsZUtleShwcm9wZXJ0eSwgbW9kZWxUeXBlKSk7XG5cbiAgICAgICAgICAgIGlmICghaXNFbnVtICYmIGFkZEZpbHRlcnMpIHtcbiAgICAgICAgICAgICAgICBjb2x1bW4/LndpdGhGaWx0ZXIoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChhZGRTb3J0cykge1xuICAgICAgICAgICAgICAgIGNvbHVtbj8ud2l0aFNvcnQoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZGVzY3JpcHRvcjtcbiAgICB9XG5cbiAgICBwdWJsaWMgc3RhdGljIGdldFByb3BlcnR5VGl0bGVLZXkocHJvcGVydHk6IE1uZ0d1aVByb3BlcnR5TW9kZWxEdG8sIG1vZGVsVHlwZTogJ3JldkVudGl0eScgfCAnZW50aXR5U3RhdGUnIHwgdW5kZWZpbmVkID0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGlmIChtb2RlbFR5cGUgPT09ICdyZXZFbnRpdHknKSB7XG4gICAgICAgICAgICByZXR1cm4gJ01uZ1JldkVudGl0eS5wcm9wZXJ0aWVzLicgKyBwcm9wZXJ0eS5yZXNvbHZlZFByb3BlcnR5TmFtZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcHJvcGVydHkucmVzb2x2ZWRQcm9wZXJ0eU5hbWUgPz8gJyc7XG4gICAgfVxuXG4gICAgcHVibGljIHN0YXRpYyBhZGRGaWVsZHNGcm9tTW9kZWw8VD4oXG4gICAgICAgIGRlc2NyaXB0b3I6IEVkaXRvckRlc2NyaXB0b3JJbnN0PFQ+LFxuICAgICAgICBwcm9wZXJ0aWVzOiBNbmdHdWlQcm9wZXJ0eU1vZGVsRHRvW10sXG4gICAgICAgIG1vZGVsVHlwZTogJ3JldkVudGl0eScgfCAnZW50aXR5U3RhdGUnID0gJ3JldkVudGl0eSdcbiAgICApOiBFZGl0b3JEZXNjcmlwdG9ySW5zdDxUPiB7XG4gICAgICAgIGZvciAoY29uc3QgcHJvcGVydHkgb2YgcHJvcGVydGllcykge1xuICAgICAgICAgICAgaWYgKCFwcm9wZXJ0eS5yZXNvbHZlZFByb3BlcnR5TmFtZSkge1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCBmaWVsZFByZXBlbmQgPSBgJHttb2RlbFR5cGV9LmA7XG5cbiAgICAgICAgICAgIGlmIChwcm9wZXJ0eS5wcm9wZXJ0eVR5cGUgPT09IE1uZ0d1aVByb3BlcnR5VHlwZUR0by5FbnVtKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgZW51bVR5cGUgPSBBdWRpdFV0aWwuZmluZEVudW1UeXBlKHByb3BlcnR5KTtcbiAgICAgICAgICAgICAgICBpZiAoZW51bVR5cGUpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFwcm9wZXJ0eS5wb3NzaWJsZUVudW1WYWx1ZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgZGVzY3JpcHRvci5hZGRGaWVsZExvb2t1cEVudW1VbnNhZmUoZmllbGRQcmVwZW5kICsgcHJvcGVydHkucmVzb2x2ZWRQcm9wZXJ0eU5hbWUsIGVudW1UeXBlLCBwcm9wZXJ0eS5wb3NzaWJsZUVudW1WYWx1ZXMpLndpdGhEaXNhYmxlZCgpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGRlc2NyaXB0b3IuYWRkRmllbGRVbnNhZmUoZmllbGRQcmVwZW5kICsgcHJvcGVydHkucmVzb2x2ZWRQcm9wZXJ0eU5hbWUpLndpdGhMYWJlbChBdWRpdFV0aWwuZ2V0UHJvcGVydHlUaXRsZUtleShwcm9wZXJ0eSwgbW9kZWxUeXBlKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIGlmIChwcm9wZXJ0eS5wcm9wZXJ0eVR5cGUgPT09IE1uZ0d1aVByb3BlcnR5VHlwZUR0by5OdW1iZXIpIHtcbiAgICAgICAgICAgICAgICBkZXNjcmlwdG9yXG4gICAgICAgICAgICAgICAgICAgIC5hZGRGaWVsZFVuc2FmZShmaWVsZFByZXBlbmQgKyBwcm9wZXJ0eS5yZXNvbHZlZFByb3BlcnR5TmFtZSlcbiAgICAgICAgICAgICAgICAgICAgLndpdGhMYWJlbChBdWRpdFV0aWwuZ2V0UHJvcGVydHlUaXRsZUtleShwcm9wZXJ0eSwgbW9kZWxUeXBlKSlcbiAgICAgICAgICAgICAgICAgICAgLmFzTnVtYmVyKClcbiAgICAgICAgICAgICAgICAgICAgLndpdGhEaXNhYmxlZCgpO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChwcm9wZXJ0eS5wcm9wZXJ0eVR5cGUgPT09IE1uZ0d1aVByb3BlcnR5VHlwZUR0by5Cb29sZWFuKSB7XG4gICAgICAgICAgICAgICAgZGVzY3JpcHRvclxuICAgICAgICAgICAgICAgICAgICAuYWRkRmllbGRVbnNhZmUoZmllbGRQcmVwZW5kICsgcHJvcGVydHkucmVzb2x2ZWRQcm9wZXJ0eU5hbWUpXG4gICAgICAgICAgICAgICAgICAgIC53aXRoTGFiZWwoQXVkaXRVdGlsLmdldFByb3BlcnR5VGl0bGVLZXkocHJvcGVydHksIG1vZGVsVHlwZSkpXG4gICAgICAgICAgICAgICAgICAgIC53aXRoRGlzYWJsZWQoKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAocHJvcGVydHkucHJvcGVydHlUeXBlID09PSBNbmdHdWlQcm9wZXJ0eVR5cGVEdG8uTG9jYWxEYXRlKSB7XG4gICAgICAgICAgICAgICAgZGVzY3JpcHRvclxuICAgICAgICAgICAgICAgICAgICAuYWRkRmllbGRVbnNhZmUoZmllbGRQcmVwZW5kICsgcHJvcGVydHkucmVzb2x2ZWRQcm9wZXJ0eU5hbWUpXG4gICAgICAgICAgICAgICAgICAgIC53aXRoTGFiZWwoQXVkaXRVdGlsLmdldFByb3BlcnR5VGl0bGVLZXkocHJvcGVydHksIG1vZGVsVHlwZSkpXG4gICAgICAgICAgICAgICAgICAgIC5hc0RhdGVQaWNrZXIoe2Zvcm1hdDogJ2RkLiBNTU0geXl5eSd9KVxuICAgICAgICAgICAgICAgICAgICAud2l0aERpc2FibGVkKCk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHByb3BlcnR5LnByb3BlcnR5VHlwZSA9PT0gTW5nR3VpUHJvcGVydHlUeXBlRHRvLk9mZnNldERhdGVUaW1lKSB7XG4gICAgICAgICAgICAgICAgZGVzY3JpcHRvclxuICAgICAgICAgICAgICAgICAgICAuYWRkRmllbGRVbnNhZmUoZmllbGRQcmVwZW5kICsgcHJvcGVydHkucmVzb2x2ZWRQcm9wZXJ0eU5hbWUpXG4gICAgICAgICAgICAgICAgICAgIC53aXRoTGFiZWwoQXVkaXRVdGlsLmdldFByb3BlcnR5VGl0bGVLZXkocHJvcGVydHksIG1vZGVsVHlwZSkpXG4gICAgICAgICAgICAgICAgICAgIC5hc0RhdGVQaWNrZXIoe1xuICAgICAgICAgICAgICAgICAgICAgICAgZm9ybWF0OiAnZGQuIE1NIHl5JyxcbiAgICAgICAgICAgICAgICAgICAgICAgIHNob3dUaW1lOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgc2hvd1NlY29uZHM6IGZhbHNlXG4gICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgIC53aXRoRGlzYWJsZWQoKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgLy8gc3RyaW5nIC8gd2lsZGNhcmRcbiAgICAgICAgICAgICAgICBkZXNjcmlwdG9yXG4gICAgICAgICAgICAgICAgICAgIC5hZGRGaWVsZFVuc2FmZShmaWVsZFByZXBlbmQgKyBwcm9wZXJ0eS5yZXNvbHZlZFByb3BlcnR5TmFtZSlcbiAgICAgICAgICAgICAgICAgICAgLndpdGhMYWJlbChBdWRpdFV0aWwuZ2V0UHJvcGVydHlUaXRsZUtleShwcm9wZXJ0eSwgbW9kZWxUeXBlKSlcbiAgICAgICAgICAgICAgICAgICAgLndpdGhEaXNhYmxlZCgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBkZXNjcmlwdG9yO1xuICAgIH1cblxuICAgIHB1YmxpYyBzdGF0aWMgYnVpbGREZXNjcmlwdG9yRm9yRW50aXR5UmV2aXNpb24oXG4gICAgICAgIGRlc2NyaXB0b3I6IFRhYmxldmlld0Rlc2NyaXB0b3JJbnN0PE1uZ1JldkVudGl0eVdpdGhTdGF0ZUR0bz4sXG4gICAgICAgIHJldk1vZGVsOiBNbmdHdWlFbnRpdHlNb2RlbER0byxcbiAgICAgICAgZW50aXR5TW9kZWw6IE1uZ0d1aUVudGl0eU1vZGVsRHRvXG4gICAgKTogVGFibGV2aWV3RGVzY3JpcHRvckluc3Q8TW5nUmV2RW50aXR5V2l0aFN0YXRlRHRvPiB7XG4gICAgICAgIGRlc2NyaXB0b3IuYWRkQ29sdW1uKCdyZXZUeXBlJykud2l0aFRpdGxlKCdNbmdFbnRpdHlSZXZpc2lvbkNoYW5nZVN0YXRlLnByb3BlcnRpZXMucmV2VHlwZScpLmFzRW51bShNbmdSZXZpc2lvblR5cGVEdG8pLndpdGhGaWx0ZXIoKTtcbiAgICAgICAgZGVzY3JpcHRvci5hZGRGaWVsZExvb2t1cEVudW0oJ3JldlR5cGUnLCBNbmdSZXZpc2lvblR5cGVEdG8pLndpdGhMYWJlbCgnTW5nRW50aXR5UmV2aXNpb25DaGFuZ2VTdGF0ZS5wcm9wZXJ0aWVzLnJldlR5cGUnKTtcblxuICAgICAgICBpZiAocmV2TW9kZWwucHJvcGVydGllcykge1xuICAgICAgICAgICAgQXVkaXRVdGlsLmFkZENvbHVtbnNGcm9tTW9kZWwoZGVzY3JpcHRvci50YWJsZSwgcmV2TW9kZWwucHJvcGVydGllcywgJ3JldkVudGl0eScpO1xuICAgICAgICAgICAgQXVkaXRVdGlsLmFkZEZpZWxkc0Zyb21Nb2RlbChkZXNjcmlwdG9yLmRldGFpbHNFZGl0b3IsIHJldk1vZGVsLnByb3BlcnRpZXMsICdyZXZFbnRpdHknKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZW50aXR5TW9kZWwucHJvcGVydGllcykge1xuICAgICAgICAgICAgQXVkaXRVdGlsLmFkZENvbHVtbnNGcm9tTW9kZWwoZGVzY3JpcHRvci50YWJsZSwgZW50aXR5TW9kZWwucHJvcGVydGllcywgJ2VudGl0eVN0YXRlJyk7XG4gICAgICAgICAgICBBdWRpdFV0aWwuYWRkRmllbGRzRnJvbU1vZGVsKGRlc2NyaXB0b3IuZGV0YWlsc0VkaXRvciwgZW50aXR5TW9kZWwucHJvcGVydGllcywgJ2VudGl0eVN0YXRlJyk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gZGVzY3JpcHRvcjtcbiAgICB9XG5cbiAgICBwdWJsaWMgc3RhdGljIGZpbmRFbnVtVHlwZShwcm9wZXJ0eTogTW5nR3VpUHJvcGVydHlNb2RlbER0bykge1xuICAgICAgICBpZiAoIXByb3BlcnR5LmVudW1DbGFzc1NpbXBsZU5hbWUpIHtcbiAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgZW51bVR5cGUgPSBUeXBlUmVnaXN0cnkuZ2V0KCkuZmluZEVudW0ocHJvcGVydHkuZW51bUNsYXNzU2ltcGxlTmFtZSk7XG4gICAgICAgIGlmICghZW51bVR5cGUpIHtcbiAgICAgICAgICAgIGVudW1UeXBlID0gVHlwZVJlZ2lzdHJ5LmdldCgpLmZpbmRFbnVtKHByb3BlcnR5LmVudW1DbGFzc1NpbXBsZU5hbWUgKyAnRHRvJyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGVudW1UeXBlO1xuICAgIH1cblxuICAgIHB1YmxpYyBzdGF0aWMgZXh0cmFjdFByb3BlcnR5TmFtZShmdWxsUHJvcGVydHlOYW1lOiBzdHJpbmcgfCB1bmRlZmluZWQpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICAgICAgICBpZiAoZnVsbFByb3BlcnR5TmFtZT8uaW5jbHVkZXMoJ2VudGl0eVN0YXRlLicpKSB7XG4gICAgICAgICAgICByZXR1cm4gZnVsbFByb3BlcnR5TmFtZS5yZXBsYWNlKCdlbnRpdHlTdGF0ZS4nLCAnJyk7XG4gICAgICAgIH0gZWxzZSBpZiAoZnVsbFByb3BlcnR5TmFtZT8uaW5jbHVkZXMoJ3JldkVudGl0eS4nKSkge1xuICAgICAgICAgICAgcmV0dXJuIGZ1bGxQcm9wZXJ0eU5hbWU/LnJlcGxhY2UoJ3JldkVudGl0eS4nLCAnJyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZ1bGxQcm9wZXJ0eU5hbWU7XG4gICAgfVxuXG4gICAgcHVibGljIHN0YXRpYyBhcHBlbmRNZWRpdXNRdWVyeVBhcmFtc1RvVXJsKHF1ZXJ5UGFyYW1zOiBNZWRpdXNRdWVyeVBhcmFtKTogc3RyaW5nIHtcbiAgICAgICAgbGV0IHVybCA9IGA/Zmlyc3RSZXN1bHQ9JHtxdWVyeVBhcmFtcy5pdGVtc09mZnNldH0mbWF4UmVzdWx0cz0ke3F1ZXJ5UGFyYW1zLml0ZW1zUGVyUGFnZX1gO1xuICAgICAgICBpZiAocXVlcnlQYXJhbXMuc29ydFByb3BlcnR5ICYmIHF1ZXJ5UGFyYW1zLnNvcnRQcm9wZXJ0eS5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICB1cmwgKz0gJyZzb3J0cz0nO1xuICAgICAgICAgICAgY29uc3Qgc29ydGluZ1FQcyA9IFtdO1xuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBxdWVyeVBhcmFtcy5zb3J0UHJvcGVydHkubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICBzb3J0aW5nUVBzLnB1c2goYCR7cXVlcnlQYXJhbXMuc29ydEFzYz8uW2ldID8/IHRydWUgPyAnYXNjJyA6ICdkZXNjJ306JHt0aGlzLmV4dHJhY3RQcm9wZXJ0eU5hbWUocXVlcnlQYXJhbXMuc29ydFByb3BlcnR5W2ldKX1gKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHVybCArPSBzb3J0aW5nUVBzLmpvaW4oJywnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChxdWVyeVBhcmFtcy5maWx0ZXJQYXJhbXMgJiYgcXVlcnlQYXJhbXMuZmlsdGVyUGFyYW1zLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIGNvbnN0IGZpbHRlclFQcyA9IFtdO1xuICAgICAgICAgICAgZm9yIChjb25zdCBtZnAgb2YgcXVlcnlQYXJhbXMuZmlsdGVyUGFyYW1zKSB7XG4gICAgICAgICAgICAgICAgc3dpdGNoIChtZnAuZmlsdGVyTWF0Y2hUeXBlKSB7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgTWVkaXVzRmlsdGVyTWF0Y2hUeXBlLkVxdWFsczoge1xuICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVyUVBzLnB1c2goYCR7dGhpcy5leHRyYWN0UHJvcGVydHlOYW1lKG1mcC5wcm9wZXJ0eSl9PSR7TmV3TWVkaXVzRmlsdGVyTWF0Y2hUeXBlLkVxdWFsc306JHttZnAuZmlsdGVyVmFsdWV9YCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBjYXNlIE1lZGl1c0ZpbHRlck1hdGNoVHlwZS5Ob3RFcXVhbHM6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpbHRlclFQcy5wdXNoKGAke3RoaXMuZXh0cmFjdFByb3BlcnR5TmFtZShtZnAucHJvcGVydHkpfT0ke05ld01lZGl1c0ZpbHRlck1hdGNoVHlwZS5Ob3RFcXVhbHN9OiR7bWZwLmZpbHRlclZhbHVlfWApO1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgY2FzZSBNZWRpdXNGaWx0ZXJNYXRjaFR5cGUuRnJvbVRvOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5fZGF0ZVJlZ2V4LnRlc3QobWZwLmZpbHRlclZhbHVlKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbHRlclFQcy5wdXNoKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBgJHt0aGlzLmV4dHJhY3RQcm9wZXJ0eU5hbWUobWZwLnByb3BlcnR5KX09JHtOZXdNZWRpdXNGaWx0ZXJNYXRjaFR5cGUuQmV0d2Vlbn06JHtuZXcgRGF0ZShtZnAuZmlsdGVyVmFsdWUpLnRvSVNPU3RyaW5nKCl9LCR7bmV3IERhdGUoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZnAuZmlsdGVyVmFsdWVUb1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApLnRvSVNPU3RyaW5nKCl9YFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbHRlclFQcy5wdXNoKGAke3RoaXMuZXh0cmFjdFByb3BlcnR5TmFtZShtZnAucHJvcGVydHkpfT0ke05ld01lZGl1c0ZpbHRlck1hdGNoVHlwZS5CZXR3ZWVufToke21mcC5maWx0ZXJWYWx1ZX0sJHttZnAuZmlsdGVyVmFsdWVUb31gKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgTWVkaXVzRmlsdGVyTWF0Y2hUeXBlLkNvbnRhaW5zOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBmaWx0ZXJRUHMucHVzaChgJHt0aGlzLmV4dHJhY3RQcm9wZXJ0eU5hbWUobWZwLnByb3BlcnR5KX09JHtOZXdNZWRpdXNGaWx0ZXJNYXRjaFR5cGUuQ29udGFpbnN9OiR7bWZwLmZpbHRlclZhbHVlfWApO1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgY2FzZSBNZWRpdXNGaWx0ZXJNYXRjaFR5cGUuU3RhcnRzV2l0aDoge1xuICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVyUVBzLnB1c2goYCR7dGhpcy5leHRyYWN0UHJvcGVydHlOYW1lKG1mcC5wcm9wZXJ0eSl9PSR7TmV3TWVkaXVzRmlsdGVyTWF0Y2hUeXBlLlN0YXJ0c1dpdGh9OiR7bWZwLmZpbHRlclZhbHVlfWApO1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgY2FzZSBNZWRpdXNGaWx0ZXJNYXRjaFR5cGUuRW5kc1dpdGg6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpbHRlclFQcy5wdXNoKGAke3RoaXMuZXh0cmFjdFByb3BlcnR5TmFtZShtZnAucHJvcGVydHkpfT0ke05ld01lZGl1c0ZpbHRlck1hdGNoVHlwZS5FbmRzV2l0aH06JHttZnAuZmlsdGVyVmFsdWV9YCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBjYXNlIE1lZGl1c0ZpbHRlck1hdGNoVHlwZS5Jbjoge1xuICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVyUVBzLnB1c2goYCR7dGhpcy5leHRyYWN0UHJvcGVydHlOYW1lKG1mcC5wcm9wZXJ0eSl9PSR7TmV3TWVkaXVzRmlsdGVyTWF0Y2hUeXBlLklufToke21mcC5maWx0ZXJWYWx1ZX1gKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgTWVkaXVzRmlsdGVyTWF0Y2hUeXBlLk5vdEluOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBmaWx0ZXJRUHMucHVzaChgJHt0aGlzLmV4dHJhY3RQcm9wZXJ0eU5hbWUobWZwLnByb3BlcnR5KX09JHtOZXdNZWRpdXNGaWx0ZXJNYXRjaFR5cGUuTm90SW59OiR7bWZwLmZpbHRlclZhbHVlfWApO1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgY2FzZSBNZWRpdXNGaWx0ZXJNYXRjaFR5cGUuU21hbGxlclRoYW46IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLl9kYXRlUmVnZXgudGVzdChtZnAuZmlsdGVyVmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVyUVBzLnB1c2goYCR7dGhpcy5leHRyYWN0UHJvcGVydHlOYW1lKG1mcC5wcm9wZXJ0eSl9PSR7TmV3TWVkaXVzRmlsdGVyTWF0Y2hUeXBlLkxlc3NUaGFufToke25ldyBEYXRlKG1mcC5maWx0ZXJWYWx1ZSkudG9JU09TdHJpbmcoKX1gKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVyUVBzLnB1c2goYCR7dGhpcy5leHRyYWN0UHJvcGVydHlOYW1lKG1mcC5wcm9wZXJ0eSl9PSR7TmV3TWVkaXVzRmlsdGVyTWF0Y2hUeXBlLkxlc3NUaGFufToke21mcC5maWx0ZXJWYWx1ZX1gKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgTWVkaXVzRmlsdGVyTWF0Y2hUeXBlLkdyZWF0ZXJUaGFuOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5fZGF0ZVJlZ2V4LnRlc3QobWZwLmZpbHRlclZhbHVlKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbHRlclFQcy5wdXNoKGAke3RoaXMuZXh0cmFjdFByb3BlcnR5TmFtZShtZnAucHJvcGVydHkpfT0ke05ld01lZGl1c0ZpbHRlck1hdGNoVHlwZS5HcmVhdGVyVGhhbn06JHtuZXcgRGF0ZShtZnAuZmlsdGVyVmFsdWUpLnRvSVNPU3RyaW5nKCl9YCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbHRlclFQcy5wdXNoKGAke3RoaXMuZXh0cmFjdFByb3BlcnR5TmFtZShtZnAucHJvcGVydHkpfT0ke05ld01lZGl1c0ZpbHRlck1hdGNoVHlwZS5HcmVhdGVyVGhhbn06JHttZnAuZmlsdGVyVmFsdWV9YCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHVybCArPSAnJic7XG4gICAgICAgICAgICB1cmwgKz0gZmlsdGVyUVBzLmpvaW4oJyYnKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdXJsO1xuICAgIH1cblxuICAgIHB1YmxpYyBzdGF0aWMgbWFwSXRlbXNUb0VudGl0eUNoYW5nZXNBcnJheShmaWVsZFZhbHVlOiB7W2tleTogc3RyaW5nXTogQXJyYXk8TW5nRW50aXR5Q2hhbmdlRHRvPn0pOiBBcnJheTxNbmdFbnRpdHlSZXZpc2lvbkNoYW5nZXM+IHtcbiAgICAgICAgY29uc3QgZW50aXR5Q2hhbmdlczogTW5nRW50aXR5UmV2aXNpb25DaGFuZ2VzW10gPSBbXTtcbiAgICAgICAgZm9yIChjb25zdCBrZXkgb2YgT2JqZWN0LmtleXMoZmllbGRWYWx1ZSkpIHtcbiAgICAgICAgICAgIGNvbnN0IGVjID0gbmV3IE1uZ0VudGl0eVJldmlzaW9uQ2hhbmdlcygpO1xuICAgICAgICAgICAgZWMuZW50aXR5VHlwZSA9IGtleTtcbiAgICAgICAgICAgIGVjLml0ZW1zID0gW107XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGNoYW5nZSBvZiBmaWVsZFZhbHVlW2tleV0pIHtcbiAgICAgICAgICAgICAgICBpZiAoY2hhbmdlLnJldlR5cGUgPT09IE1uZ1JldmlzaW9uVHlwZUR0by5BZGQgJiYgY2hhbmdlLmVudGl0eU5ld1N0YXRlKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGl0ZW0gPSBuZXcgTW5nRW50aXR5UmV2aXNpb25DaGFuZ2VTdGF0ZSgpO1xuICAgICAgICAgICAgICAgICAgICBpdGVtLnJldlR5cGUgPSBjaGFuZ2UucmV2VHlwZTtcbiAgICAgICAgICAgICAgICAgICAgaXRlbS5jb2xvciA9ICdncmVlbic7XG4gICAgICAgICAgICAgICAgICAgIE9iamVjdC5lbnRyaWVzKGNoYW5nZS5lbnRpdHlOZXdTdGF0ZSkuZm9yRWFjaCgoW2tleSwgdmFsdWVdKSA9PiAoaXRlbVtrZXldID0gdmFsdWUpKTtcbiAgICAgICAgICAgICAgICAgICAgZWMuaXRlbXMucHVzaChpdGVtKTtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGNoYW5nZS5yZXZUeXBlID09PSBNbmdSZXZpc2lvblR5cGVEdG8uRGVsICYmIGNoYW5nZS5lbnRpdHlPbGRTdGF0ZSkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBpdGVtID0gbmV3IE1uZ0VudGl0eVJldmlzaW9uQ2hhbmdlU3RhdGUoKTtcbiAgICAgICAgICAgICAgICAgICAgaXRlbS5yZXZUeXBlID0gY2hhbmdlLnJldlR5cGU7XG4gICAgICAgICAgICAgICAgICAgIGl0ZW0uY29sb3IgPSAncmVkJztcbiAgICAgICAgICAgICAgICAgICAgT2JqZWN0LmVudHJpZXMoY2hhbmdlLmVudGl0eU9sZFN0YXRlKS5mb3JFYWNoKChba2V5LCB2YWx1ZV0pID0+IChpdGVtW2tleV0gPSB2YWx1ZSkpO1xuICAgICAgICAgICAgICAgICAgICBlYy5pdGVtcy5wdXNoKGl0ZW0pO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoY2hhbmdlLnJldlR5cGUgPT09IE1uZ1JldmlzaW9uVHlwZUR0by5Nb2QgJiYgY2hhbmdlLmVudGl0eU9sZFN0YXRlICYmIGNoYW5nZS5lbnRpdHlOZXdTdGF0ZSkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBpdGVtT2xkID0gbmV3IE1uZ0VudGl0eVJldmlzaW9uQ2hhbmdlU3RhdGUoKTtcbiAgICAgICAgICAgICAgICAgICAgaXRlbU9sZC5yZXZUeXBlID0gY2hhbmdlLnJldlR5cGU7XG4gICAgICAgICAgICAgICAgICAgIGl0ZW1PbGQuY29sb3IgPSAncmVkJztcbiAgICAgICAgICAgICAgICAgICAgT2JqZWN0LmVudHJpZXMoY2hhbmdlLmVudGl0eU9sZFN0YXRlKS5mb3JFYWNoKChba2V5LCB2YWx1ZV0pID0+IChpdGVtT2xkW2tleV0gPSB2YWx1ZSkpO1xuXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGl0ZW1OZXcgPSBuZXcgTW5nRW50aXR5UmV2aXNpb25DaGFuZ2VTdGF0ZSgpO1xuICAgICAgICAgICAgICAgICAgICBpdGVtTmV3LnJldlR5cGUgPSBjaGFuZ2UucmV2VHlwZTtcbiAgICAgICAgICAgICAgICAgICAgaXRlbU5ldy5jb2xvciA9ICdncmVlbic7XG4gICAgICAgICAgICAgICAgICAgIE9iamVjdC5lbnRyaWVzKGNoYW5nZS5lbnRpdHlOZXdTdGF0ZSkuZm9yRWFjaCgoW2tleSwgdmFsdWVdKSA9PiAoaXRlbU5ld1trZXldID0gdmFsdWUpKTtcblxuICAgICAgICAgICAgICAgICAgICBlYy5pdGVtcy5wdXNoKGl0ZW1PbGQpO1xuICAgICAgICAgICAgICAgICAgICBlYy5pdGVtcy5wdXNoKGl0ZW1OZXcpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVudGl0eUNoYW5nZXMucHVzaChlYyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGVudGl0eUNoYW5nZXM7XG4gICAgfVxufVxuIl19