ngx-material-entity 16.1.1 → 16.1.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/classes/base.builder.d.ts +1 -1
- package/components/confirm-dialog/confirm-dialog-data.builder.d.ts +1 -1
- package/components/confirm-dialog/confirm-dialog.component.d.ts +1 -1
- package/components/create-page/create-page.component.d.ts +5 -14
- package/components/create-page/page-create-data.builder.d.ts +1 -1
- package/components/edit-page/edit-page.component.d.ts +5 -14
- package/components/edit-page/page-edit-data.builder.d.ts +1 -1
- package/components/input/input.component.d.ts +32 -2
- package/components/table/create-dialog/create-data.builder.d.ts +4 -1
- package/components/table/create-dialog/create-entity-data.builder.d.ts +2 -2
- package/components/table/create-dialog/create-entity-dialog.component.d.ts +21 -9
- package/components/table/display-column-value/display-column-value.component.d.ts +1 -1
- package/components/table/edit-dialog/edit-data.builder.d.ts +4 -2
- package/components/table/edit-dialog/edit-entity-dialog.component.d.ts +12 -7
- package/components/table/edit-dialog/edit-entity.builder.d.ts +2 -2
- package/components/table/table-data.builder.d.ts +3 -3
- package/components/table/table-data.d.ts +17 -1
- package/components/table/table.component.d.ts +8 -4
- package/decorators/array/array-decorator-internal.data.d.ts +1 -1
- package/decorators/array/array.decorator.d.ts +1 -1
- package/decorators/base/decorator-types.enum.d.ts +3 -2
- package/decorators/boolean/boolean-decorator-internal.data.d.ts +1 -1
- package/decorators/custom/custom-decorator-internal.data.d.ts +1 -1
- package/decorators/custom/custom.decorator.d.ts +1 -1
- package/decorators/date/date-decorator-internal.data.d.ts +1 -1
- package/decorators/file/file-decorator-internal.data.d.ts +1 -1
- package/decorators/file/file-decorator.data.d.ts +1 -1
- package/decorators/has-many/has-many-decorator-internal.data.d.ts +1 -1
- package/decorators/has-many/has-many.decorator.d.ts +1 -1
- package/decorators/number/number-decorator-internal.data.d.ts +1 -2
- package/decorators/object/object-decorator-internal.data.d.ts +12 -1
- package/decorators/object/object-decorator.data.d.ts +14 -1
- package/decorators/object/object.decorator.d.ts +2 -2
- package/decorators/references-many/references-many-decorator-internal.data.d.ts +1 -1
- package/decorators/references-many/references-many.decorator.d.ts +1 -1
- package/decorators/references-one/references-one-decorator-internal.data.d.ts +1 -1
- package/decorators/references-one/references-one.decorator.d.ts +1 -1
- package/decorators/string/string-decorator-internal.data.d.ts +1 -2
- package/esm2022/classes/base.builder.mjs +2 -2
- package/esm2022/classes/entity.model.mjs +1 -1
- package/esm2022/components/confirm-dialog/confirm-dialog-data.builder.mjs +1 -1
- package/esm2022/components/confirm-dialog/confirm-dialog.component.mjs +2 -2
- package/esm2022/components/create-page/create-data.route.mjs +1 -1
- package/esm2022/components/create-page/create-page.component.mjs +12 -20
- package/esm2022/components/create-page/page-create-data.builder.mjs +1 -1
- package/esm2022/components/edit-page/edit-data.route.mjs +1 -1
- package/esm2022/components/edit-page/edit-page.component.mjs +12 -20
- package/esm2022/components/edit-page/page-edit-data.builder.mjs +1 -1
- package/esm2022/components/form/form.component.mjs +1 -1
- package/esm2022/components/input/array/array-date-input/array-date-input.component.mjs +1 -1
- package/esm2022/components/input/array/array-date-range-input/array-date-range-input.component.mjs +1 -1
- package/esm2022/components/input/array/array-date-time-input/array-date-time-input.component.mjs +1 -1
- package/esm2022/components/input/array/array-string-autocomplete-chips/array-string-autocomplete-chips.component.mjs +1 -1
- package/esm2022/components/input/array/array-string-chips-input/array-string-chips-input.component.mjs +1 -1
- package/esm2022/components/input/array/array-table.class.mjs +1 -1
- package/esm2022/components/input/base-input.component.mjs +1 -1
- package/esm2022/components/input/boolean/boolean-checkbox-input/boolean-checkbox-input.component.mjs +1 -1
- package/esm2022/components/input/boolean/boolean-dropdown-input/boolean-dropdown-input.component.mjs +1 -1
- package/esm2022/components/input/boolean/boolean-toggle-input/boolean-toggle-input.component.mjs +1 -1
- package/esm2022/components/input/custom/custom.component.mjs +1 -1
- package/esm2022/components/input/date/date-input/date-input.component.mjs +1 -1
- package/esm2022/components/input/date/date-range-input/date-range-input.component.mjs +2 -2
- package/esm2022/components/input/date/date-time-input/date-time-input.component.mjs +1 -1
- package/esm2022/components/input/file/file-default-input/file-default-input.component.mjs +1 -1
- package/esm2022/components/input/file/file-image-input/file-image-input.component.mjs +1 -1
- package/esm2022/components/input/file/file-input/file-input.component.mjs +1 -1
- package/esm2022/components/input/input.component.mjs +78 -27
- package/esm2022/components/input/number/number-dropdown-input/number-dropdown-input.component.mjs +1 -1
- package/esm2022/components/input/number/number-input/number-input.component.mjs +1 -1
- package/esm2022/components/input/number/number-slider-input/number-slider-input.component.mjs +1 -1
- package/esm2022/components/input/relations/references-many-input/references-many-input.component.mjs +1 -1
- package/esm2022/components/input/string/string-autocomplete-input/string-autocomplete-input.component.mjs +1 -1
- package/esm2022/components/input/string/string-dropdown-input/string-dropdown-input.component.mjs +1 -1
- package/esm2022/components/input/string/string-input/string-input.component.mjs +1 -1
- package/esm2022/components/input/string/string-password-input/string-password-input.component.mjs +1 -1
- package/esm2022/components/input/string/string-textbox-input/string-textbox-input.component.mjs +1 -1
- package/esm2022/components/table/create-dialog/create-data.builder.mjs +14 -3
- package/esm2022/components/table/create-dialog/create-entity-data.builder.mjs +2 -2
- package/esm2022/components/table/create-dialog/create-entity-dialog.component.mjs +60 -20
- package/esm2022/components/table/default.actions.mjs +1 -1
- package/esm2022/components/table/display-column-value/base-display-column-value.component.mjs +1 -1
- package/esm2022/components/table/display-column-value/display-column-value.component.mjs +1 -1
- package/esm2022/components/table/edit-dialog/edit-data.builder.mjs +17 -6
- package/esm2022/components/table/edit-dialog/edit-entity-dialog.component.mjs +35 -7
- package/esm2022/components/table/edit-dialog/edit-entity.builder.mjs +2 -2
- package/esm2022/components/table/table-data.builder.mjs +3 -3
- package/esm2022/components/table/table-data.mjs +1 -1
- package/esm2022/components/table/table.component.mjs +26 -15
- package/esm2022/components/tooltip/tooltip.component.mjs +1 -1
- package/esm2022/decorators/array/array-decorator-internal.data.mjs +1 -1
- package/esm2022/decorators/array/array-decorator.data.mjs +1 -1
- package/esm2022/decorators/array/array.decorator.mjs +2 -2
- package/esm2022/decorators/base/base-property.decorator.mjs +1 -1
- package/esm2022/decorators/base/decorator-types.enum.mjs +2 -1
- package/esm2022/decorators/base/property-decorator-internal.data.mjs +1 -1
- package/esm2022/decorators/boolean/boolean-decorator-internal.data.mjs +1 -1
- package/esm2022/decorators/boolean/boolean.decorator.mjs +2 -2
- package/esm2022/decorators/custom/custom-decorator-internal.data.mjs +1 -1
- package/esm2022/decorators/custom/custom-decorator.data.mjs +1 -1
- package/esm2022/decorators/custom/custom.decorator.mjs +2 -2
- package/esm2022/decorators/date/date-decorator-internal.data.mjs +1 -1
- package/esm2022/decorators/date/date-decorator.data.mjs +1 -1
- package/esm2022/decorators/date/date.decorator.mjs +2 -2
- package/esm2022/decorators/file/file-decorator-internal.data.mjs +1 -1
- package/esm2022/decorators/file/file-decorator.data.mjs +1 -1
- package/esm2022/decorators/file/file.decorator.mjs +2 -2
- package/esm2022/decorators/has-many/has-many-decorator-internal.data.mjs +1 -1
- package/esm2022/decorators/has-many/has-many.decorator.mjs +2 -2
- package/esm2022/decorators/number/number-decorator-internal.data.mjs +3 -10
- package/esm2022/decorators/number/number.decorator.mjs +2 -2
- package/esm2022/decorators/object/object-decorator-internal.data.mjs +23 -1
- package/esm2022/decorators/object/object-decorator.data.mjs +1 -1
- package/esm2022/decorators/object/object.decorator.mjs +8 -3
- package/esm2022/decorators/references-many/references-many-decorator-internal.data.mjs +1 -1
- package/esm2022/decorators/references-many/references-many.decorator.mjs +2 -2
- package/esm2022/decorators/references-one/references-one-decorator-internal.data.mjs +1 -1
- package/esm2022/decorators/references-one/references-one.decorator.mjs +2 -2
- package/esm2022/decorators/string/string-decorator-internal.data.mjs +3 -10
- package/esm2022/decorators/string/string.decorator.mjs +2 -2
- package/esm2022/default-global-configuration-values.mjs +5 -1
- package/esm2022/directives/dynamic-style-class.directive.mjs +1 -1
- package/esm2022/encapsulation/reflect.utilities.mjs +2 -1
- package/esm2022/functions/dropdown-values-to-function.function.mjs +14 -0
- package/esm2022/functions/get-validation-errors-tooltip-content.function.ts.mjs +1 -1
- package/esm2022/global-configuration-values.mjs +1 -1
- package/esm2022/services/entity.service.mjs +1 -1
- package/esm2022/services/unsaved-changes.guard.mjs +7 -13
- package/esm2022/utilities/date.utilities.mjs +1 -1
- package/esm2022/utilities/entity.utilities.mjs +4 -4
- package/esm2022/utilities/file.utilities.mjs +1 -1
- package/esm2022/utilities/validation.utilities.mjs +11 -6
- package/fesm2022/ngx-material-entity.mjs +4494 -4333
- package/fesm2022/ngx-material-entity.mjs.map +1 -1
- package/functions/dropdown-values-to-function.function.d.ts +11 -0
- package/global-configuration-values.d.ts +11 -1
- package/package.json +1 -1
- package/services/unsaved-changes.guard.d.ts +15 -8
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
import { DecoratorTypes } from '../decorators/base/decorator-types.enum';
|
|
2
|
-
import { LodashUtilities } from '../encapsulation/lodash.utilities';
|
|
3
|
-
import { ReflectUtilities } from '../encapsulation/reflect.utilities';
|
|
4
1
|
import { DateUtilities } from './date.utilities';
|
|
5
2
|
import { EntityUtilities } from './entity.utilities';
|
|
6
3
|
import { FileUtilities } from './file.utilities';
|
|
4
|
+
import { DecoratorTypes } from '../decorators/base/decorator-types.enum';
|
|
5
|
+
import { LodashUtilities } from '../encapsulation/lodash.utilities';
|
|
6
|
+
import { ReflectUtilities } from '../encapsulation/reflect.utilities';
|
|
7
7
|
/**
|
|
8
8
|
* Contains HelperMethods around handling Validation of entities and properties.
|
|
9
9
|
*/
|
|
@@ -91,14 +91,16 @@ export class ValidationUtilities {
|
|
|
91
91
|
}
|
|
92
92
|
switch (type) {
|
|
93
93
|
case DecoratorTypes.BOOLEAN_DROPDOWN:
|
|
94
|
-
|
|
94
|
+
// Because only valid values can be selected, this is always true when it has a value
|
|
95
|
+
return undefined;
|
|
95
96
|
case DecoratorTypes.BOOLEAN_CHECKBOX:
|
|
96
97
|
case DecoratorTypes.BOOLEAN_TOGGLE:
|
|
97
98
|
const entityBoolean = entity[key];
|
|
98
99
|
const booleanMetadata = metadata;
|
|
99
100
|
return this.getBooleanValidationError(entity, entityBoolean, booleanMetadata);
|
|
100
101
|
case DecoratorTypes.STRING_DROPDOWN:
|
|
101
|
-
|
|
102
|
+
// Because only valid values can be selected, this is always true when it has a value
|
|
103
|
+
return undefined;
|
|
102
104
|
case DecoratorTypes.STRING:
|
|
103
105
|
const entityString = entity[key];
|
|
104
106
|
const stringMetadata = metadata;
|
|
@@ -140,6 +142,9 @@ export class ValidationUtilities {
|
|
|
140
142
|
}
|
|
141
143
|
}
|
|
142
144
|
break;
|
|
145
|
+
case DecoratorTypes.OBJECT_DROPDOWN:
|
|
146
|
+
// Because only valid values can be selected, this is always true when it has a value
|
|
147
|
+
return undefined;
|
|
143
148
|
case DecoratorTypes.ARRAY_STRING_AUTOCOMPLETE_CHIPS:
|
|
144
149
|
const stringAutocompleteArray = entity[key];
|
|
145
150
|
const stringAutocompleteArrayMetadata = metadata;
|
|
@@ -518,4 +523,4 @@ function formatDate(date) {
|
|
|
518
523
|
date.getFullYear()
|
|
519
524
|
].join('/');
|
|
520
525
|
}
|
|
521
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmFsaWRhdGlvbi51dGlsaXRpZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtbWF0ZXJpYWwtZW50aXR5L3NyYy91dGlsaXRpZXMvdmFsaWRhdGlvbi51dGlsaXRpZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBSUEsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHlDQUF5QyxDQUFDO0FBV3pFLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQztBQUNwRSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQztBQUN0RSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDakQsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQ3JELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQWlCakQ7O0dBRUc7QUFDSCxNQUFNLE9BQWdCLG1CQUFtQjtJQUNyQzs7Ozs7OztPQU9HO0lBQ0gsTUFBTSxDQUFDLEtBQUssQ0FBQyxhQUFhLENBQ3RCLE1BQWtCLEVBQ2xCLFFBQTZCLEVBQzdCLElBQTBCO1FBRTFCLE9BQU8sQ0FBQyxNQUFNLElBQUksQ0FBQyx5QkFBeUIsQ0FBQyxNQUFNLEVBQUUsUUFBUSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsTUFBTSxLQUFLLENBQUMsQ0FBQztJQUN2RixDQUFDO0lBRUQ7Ozs7OztPQU1HO0lBQ0gsTUFBTSxDQUFDLEtBQUssQ0FBQyx5QkFBeUIsQ0FDbEMsTUFBa0IsRUFDbEIsUUFBNkIsRUFDN0IsSUFBMEI7UUFFMUIsTUFBTSxHQUFHLEdBQXNCLEVBQUUsQ0FBQztRQUNsQyxLQUFLLE1BQU0sR0FBRyxJQUFJLGVBQWUsQ0FBQyxNQUFNLENBQUMsTUFBTSxFQUFFLFFBQVEsQ0FBQyxFQUFFO1lBQ3hELE1BQU0sR0FBRyxHQUFnQyxNQUFNLElBQUksQ0FBQywwQkFBMEIs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QUMsV0FBVztvQkFDOUIsT0FBTyxFQUFFLDJEQUEyRCxRQUFRLENBQUMsWUFBWSxFQUFFO2lCQUM5RixDQUFDO2FBQ0w7U0FDSjtRQUNELE9BQU8sU0FBUyxDQUFDO0lBQ3JCLENBQUM7Q0FDSjtBQUVELCtDQUErQztBQUMvQyxTQUFTLFlBQVksQ0FBQyxHQUFXO0lBQzdCLE9BQU8sR0FBRyxDQUFDLFFBQVEsRUFBRSxDQUFDLFFBQVEsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDM0MsQ0FBQztBQUVELCtDQUErQztBQUMvQyxTQUFTLFVBQVUsQ0FBQyxJQUFVO0lBQzFCLE9BQU87UUFDSCxZQUFZLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBQzVCLFlBQVksQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLEdBQUcsQ0FBQyxDQUFDO1FBQ2pDLElBQUksQ0FBQyxXQUFXLEVBQUU7S0FDckIsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDaEIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFRpbWUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgRW52aXJvbm1lbnRJbmplY3RvciB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQmFzZUVudGl0eVR5cGUgfSBmcm9tICcuLi9jbGFzc2VzL2VudGl0eS5tb2RlbCc7XG5pbXBvcnQgeyBBdXRvY29tcGxldGVTdHJpbmdDaGlwc0FycmF5RGVjb3JhdG9yQ29uZmlnSW50ZXJuYWwsIEVudGl0eUFycmF5RGVjb3JhdG9yQ29uZmlnSW50ZXJuYWwgfSBmcm9tICcuLi9kZWNvcmF0b3JzL2FycmF5L2FycmF5LWRlY29yYXRvci1pbnRlcm5hbC5kYXRhJztcbmltcG9ydCB7IERlY29yYXRvclR5cGVzIH0gZnJvbSAnLi4vZGVjb3JhdG9ycy9iYXNlL2RlY29yYXRvci10eXBlcy5lbnVtJztcbmltcG9ydCB7IFByb3BlcnR5RGVjb3JhdG9yQ29uZmlnSW50ZXJuYWwgfSBmcm9tICcuLi9kZWNvcmF0b3JzL2Jhc2UvcHJvcGVydHktZGVjb3JhdG9yLWludGVybmFsLmRhdGEnO1xuaW1wb3J0IHsgVG9nZ2xlQm9vbGVhbkRlY29yYXRvckNvbmZpZ0ludGVybmFsIH0gZnJvbSAnLi4vZGVjb3JhdG9ycy9ib29sZWFuL2Jvb2xlYW4tZGVjb3JhdG9yLWludGVybmFsLmRhdGEnO1xuaW1wb3J0IHsgQ3VzdG9tRGVjb3JhdG9yQ29uZmlnSW50ZXJuYWwgfSBmcm9tICcuLi9kZWNvcmF0b3JzL2N1c3RvbS9jdXN0b20tZGVjb3JhdG9yLWludGVybmFsLmRhdGEnO1xuaW1wb3J0IHsgRGF0ZVJhbmdlRGF0ZURlY29yYXRvckNvbmZpZ0ludGVybmFsLCBEYXRlVGltZURhdGVEZWNvcmF0b3JDb25maWdJbnRlcm5hbCwgRGVmYXVsdERhdGVEZWNvcmF0b3JDb25maWdJbnRlcm5hbCB9IGZyb20gJy4uL2RlY29yYXRvcnMvZGF0ZS9kYXRlLWRlY29yYXRvci1pbnRlcm5hbC5kYXRhJztcbmltcG9ydCB7IERhdGVSYW5nZSB9IGZyb20gJy4uL2RlY29yYXRvcnMvZGF0ZS9kYXRlLWRlY29yYXRvci5kYXRhJztcbmltcG9ydCB7IERlZmF1bHRGaWxlRGVjb3JhdG9yQ29uZmlnSW50ZXJuYWwgfSBmcm9tICcuLi9kZWNvcmF0b3JzL2ZpbGUvZmlsZS1kZWNvcmF0b3ItaW50ZXJuYWwuZGF0YSc7XG5pbXBvcnQgeyBGaWxlRGF0YSB9IGZyb20gJy4uL2RlY29yYXRvcnMvZmlsZS9maWxlLWRlY29yYXRvci5kYXRhJztcbmltcG9ydCB7IERlZmF1bHROdW1iZXJEZWNvcmF0b3JDb25maWdJbnRlcm5hbCB9IGZyb20gJy4uL2RlY29yYXRvcnMvbnVtYmVyL251bWJlci1kZWNvcmF0b3ItaW50ZXJuYWwuZGF0YSc7XG5pbXBvcnQgeyBEZWZhdWx0T2JqZWN0RGVjb3JhdG9yQ29uZmlnSW50ZXJuYWwgfSBmcm9tICcuLi9kZWNvcmF0b3JzL29iamVjdC9vYmplY3QtZGVjb3JhdG9yLWludGVybmFsLmRhdGEnO1xuaW1wb3J0IHsgQXV0b2NvbXBsZXRlU3RyaW5nRGVjb3JhdG9yQ29uZmlnSW50ZXJuYWwsIERlZmF1bHRTdHJpbmdEZWNvcmF0b3JDb25maWdJbnRlcm5hbCwgUGFzc3dvcmRTdHJpbmdEZWNvcmF0b3JDb25maWdJbnRlcm5hbCwgVGV4dGJveFN0cmluZ0RlY29yYXRvckNvbmZpZ0ludGVybmFsIH0gZnJvbSAnLi4vZGVjb3JhdG9ycy9zdHJpbmcvc3RyaW5nLWRlY29yYXRvci1pbnRlcm5hbC5kYXRhJztcbmltcG9ydCB7IExvZGFzaFV0aWxpdGllcyB9IGZyb20gJy4uL2VuY2Fwc3VsYXRpb24vbG9kYXNoLnV0aWxpdGllcyc7XG5pbXBvcnQgeyBSZWZsZWN0VXRpbGl0aWVzIH0gZnJvbSAnLi4vZW5jYXBzdWxhdGlvbi9yZWZsZWN0LnV0aWxpdGllcyc7XG5pbXBvcnQgeyBEYXRlVXRpbGl0aWVzIH0gZnJvbSAnLi9kYXRlLnV0aWxpdGllcyc7XG5pbXBvcnQgeyBFbnRpdHlVdGlsaXRpZXMgfSBmcm9tICcuL2VudGl0eS51dGlsaXRpZXMnO1xuaW1wb3J0IHsgRmlsZVV0aWxpdGllcyB9IGZyb20gJy4vZmlsZS51dGlsaXRpZXMnO1xuXG4vKipcbiAqIEEgdmFsaWRhdGlvbiBlcnJvciByZXBvcnRlZCBieSB0aGUgdmFsaWRhdGlvbiB1dGlsaXRpZXMuXG4gKiBDb25zaXN0cyBvZiB0aGUgcHJvcGVydHkgbmFtZSB3aGVyZSB0aGUgZXJyb3Igb3JpZ2luYXRlZCBmcm9tIGFuZCBhIG1lc3NhZ2UuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVmFsaWRhdGlvbkVycm9yIHtcbiAgICAvKipcbiAgICAgKiBUaGUgcHJvcGVydHkgbmFtZSBvbiB3aGljaCB0aGUgZXJyb3Igb2NjdXJyZWQuIFRoaXMgaXMgdGhlIGRpc3BsYXlOYW1lIHZhbHVlLlxuICAgICAqL1xuICAgIHByb3BlcnR5OiBzdHJpbmcsXG4gICAgLyoqXG4gICAgICogVGhlIHZhbGlkYXRpb24gZXJyb3IgbWVzc2FnZS5cbiAgICAgKi9cbiAgICBtZXNzYWdlOiBzdHJpbmdcbn1cblxuLyoqXG4gKiBDb250YWlucyBIZWxwZXJNZXRob2RzIGFyb3VuZCBoYW5kbGluZyBWYWxpZGF0aW9uIG9mIGVudGl0aWVzIGFuZCBwcm9wZXJ0aWVzLlxuICovXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgVmFsaWRhdGlvblV0aWxpdGllcyB7XG4gICAgLyoqXG4gICAgICogQ2hlY2tzIGlmIHRoZSB2YWx1ZXMgb24gYW4gZW50aXR5IGFyZSB2YWxpZC5cbiAgICAgKiBBbHNvIGNoZWNrcyBhbGwgdGhlIHZhbGlkYXRvcnMgZ2l2ZW4gYnkgdGhlIG1ldGFkYXRhIChcInJlcXVpcmVkXCIsIFwibWF4TGVuZ3RoXCIgZXRjLikuXG4gICAgICogQHBhcmFtIGVudGl0eSAtIFRoZSBlbnRpdHkgdG8gdmFsaWRhdGUuXG4gICAgICogQHBhcmFtIGluamVjdG9yIC0gQW4gYW5ndWxhciBlbnZpcm9ubWVudCBpbmplY3Rvci5cbiAgICAgKiBAcGFyYW0gb21pdCAtIFdoZXRoZXIgdG8gY2hlY2sgZm9yIGNyZWF0aW5nIG9yIGVkaXRpbmcgdmFsaWRpdHkuXG4gICAgICogQHJldHVybnMgV2hldGhlciBvciBub3QgdGhlIGVudGl0eSBpcyB2YWxpZC5cbiAgICAgKi9cbiAgICBzdGF0aWMgYXN5bmMgaXNFbnRpdHlWYWxpZDxFbnRpdHlUeXBlIGV4dGVuZHMgQmFzZUVudGl0eVR5cGU8RW50aXR5VHlwZT4+KFxuICAgICAgICBlbnRpdHk6IEVudGl0eVR5cGUsXG4gICAgICAgIGluamVjdG9yOiBFbnZpcm9ubWVudEluamVjdG9yLFxuICAgICAgICBvbWl0PzogJ2NyZWF0ZScgfCAndXBkYXRlJ1xuICAgICk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgICAgICByZXR1cm4gKGF3YWl0IHRoaXMuZ2V0RW50aXR5VmFsaWRhdGlvbkVycm9ycyhlbnRpdHksIGluamVjdG9yLCBvbWl0KSkubGVuZ3RoID09PSAwO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEdldHMgYWxsIHZhbGlkYXRpb24gZXJyb3JzIG9uIHRoZSBnaXZlbiBlbnRpdHkuXG4gICAgICogQHBhcmFtIGVudGl0eSAtIFRoZSBlbnRpdHkgdG8gdmFsaWRhdGUuXG4gICAgICogQHBhcmFtIGluamVjdG9yIC0gQW4gYW5ndWxhciBlbnZpcm9ubWVudCBpbmplY3Rvci5cbiAgICAgKiBAcGFyYW0gb21pdCAtIFdoYXQga2V5cyBub3QgdG8gY2hlY2suIEFuIGVtcHR5IHZhbHVlIG1lYW5zIG5vIGtleXMgYXJlIG9taXR0ZWQuXG4gICAgICogQHJldHVybnMgQW4gYXJyYXkgb2YgdmFsaWRhdGlvbiBlcnJvcnMgb24gdGhlIHByb3ZpZGVkIGVudGl0eS5cbiAgICAgKi9cbiAgICBzdGF0aWMgYXN5bmMgZ2V0RW50aXR5VmFsaWRhdGlvbkVycm9yczxFbnRpdHlUeXBlIGV4dGVuZHMgQmFzZUVudGl0eVR5cGU8RW50aXR5VHlwZT4+KFxuICAgICAgICBlbnRpdHk6IEVudGl0eVR5cGUsXG4gICAgICAgIGluamVjdG9yOiBFbnZpcm9ubWVudEluamVjdG9yLFxuICAgICAgICBvbWl0PzogJ2NyZWF0ZScgfCAndXBkYXRlJ1xuICAgICk6IFByb21pc2U8VmFsaWRhdGlvbkVycm9yW10+IHtcbiAgICAgICAgY29uc3QgcmVzOiBWYWxpZGF0aW9uRXJyb3JbXSA9IFtdO1xuICAgICAgICBmb3IgKGNvbnN0IGtleSBvZiBFbnRpdHlVdGlsaXRpZXMua2V5c09mKGVudGl0eSwgaW5qZWN0b3IpKSB7XG4gICAgICAgICAgICBjb25zdCBlcnI6IFZhbGlkYXRpb25FcnJvciB8IHVuZGVmaW5lZCA9IGF3YWl0IHRoaXMuZ2V0UHJvcGVydHlWYWxpZGF0aW9uRXJyb3IoZW50aXR5LCBrZXksIG9taXQpO1xuICAgICAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgICAgICAgIHJlcy5wdXNoKGVycik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlcztcbiAgICB9XG5cbiAgICAvLyAvKipcbiAgICAvLyAgKiBDaGVja3MgaWYgYSBzaW5nbGUgcHJvcGVydHkgdmFsdWUgaXMgdmFsaWQuXG4gICAgLy8gICpcbiAgICAvLyAgKiBAcGFyYW0gZW50aXR5IC0gVGhlIGVudGl0eSB3aGVyZSB0aGUgcHJvcGVydHkgaXMgZnJvbS5cbiAgICAvLyAgKiBAcGFyYW0ga2V5IC0gVGhlIG5hbWUgb2YgdGhlIHByb3BlcnR5LlxuICAgIC8vICAqIEBwYXJhbSBvbWl0IC0gV2hldGhlciB0byBjaGVjayBpZiB0aGUgZ2l2ZW4gZW50aXR5IGlzIHZhbGlkIGZvciBjcmVhdGlvbiBvciB1cGRhdGluZy5cbiAgICAvLyAgKiBAcmV0dXJucyBXaGV0aGVyIG9yIG5vdCB0aGUgcHJvcGVydHkgdmFsdWUgaXMgdmFsaWQuXG4gICAgLy8gICogQHRocm93cyBUaHJvd3Mgd2hlbiBpdCBleHRyYWN0cyBhbiB1bmtub3duIG1ldGFkYXRhIHR5cGUuXG4gICAgLy8gICovXG4gICAgLy8gc3RhdGljIGlzUHJvcGVydHlWYWxpZDxFbnRpdHlUeXBlIGV4dGVuZHMgQmFzZUVudGl0eVR5cGU8RW50aXR5VHlwZT4+KFxuICAgIC8vICAgICBlbnRpdHk6IEVudGl0eVR5cGUsXG4gICAgLy8gICAgIGtleToga2V5b2YgRW50aXR5VHlwZSxcbiAgICAvLyAgICAgb21pdD86ICdjcmVhdGUnIHwgJ3VwZGF0ZSdcbiAgICAvLyApOiBib29sZWFuIHtcbiAgICAvLyAgICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWxpZGF0aW9uRXJyb3IoZW50aXR5LCBrZXksIG9taXQpID09IG51bGw7XG4gICAgLy8gfVxuXG4gICAgLyoqXG4gICAgICogVmFsaWRhdGVzIHRoZSBwcm9wZXJ0eSBvbiB0aGUgZ2l2ZW4gZW50aXR5IHdpdGggdGhlIGdpdmVuIGtleS5cbiAgICAgKiBAcGFyYW0gZW50aXR5IC0gVGhlIGVudGl0eSBvbiB3aGljaCB0aGUgcHJvcGVydHkgdG8gY2hlY2sgaXMuXG4gICAgICogQHBhcmFtIGtleSAtIFRoZSBrZXkgb2YgdGhlIHByb3BlcnR5IHRvIHZhbGlkYXRlLlxuICAgICAqIEBwYXJhbSBvbWl0IC0gV2hhdCBrZXlzIG5vdCB0byBjaGVjay4gQW4gZW1wdHkgdmFsdWUgbWVhbnMgbm8ga2V5cyBhcmUgb21pdHRlZC5cbiAgICAgKiBAcmV0dXJucyBBIHZhbGlkYXRpb24gZXJyb3Igd2hlbiB0aGUgcHJvcGVydHkgaXMgbm90IHZhbGlkLCB1bmRlZmluZWQgb3RoZXJ3aXNlLlxuICAgICAqIEB0aHJvd3MgV2hlbiB0aGUgdHlwZSBvZiB0aGUgcHJvcGVydHkgaXMgbm90IGtub3duLlxuICAgICAqL1xuICAgIHN0YXRpYyBhc3luYyBnZXRQcm9wZXJ0eVZhbGlkYXRpb25FcnJvcjxFbnRpdHlUeXBlIGV4dGVuZHMgQmFzZUVudGl0eVR5cGU8RW50aXR5VHlwZT4+KFxuICAgICAgICBlbnRpdHk6IEVudGl0eVR5cGUsXG4gICAgICAgIGtleToga2V5b2YgRW50aXR5VHlwZSxcbiAgICAgICAgb21pdD86ICdjcmVhdGUnIHwgJ3VwZGF0ZSdcbiAgICApOiBQcm9taXNlPFZhbGlkYXRpb25FcnJvciB8IHVuZGVmaW5lZD4ge1xuICAgICAgICBjb25zdCB0eXBlOiBEZWNvcmF0b3JUeXBlcyB8IHVuZGVmaW5lZCA9IEVudGl0eVV0aWxpdGllcy5nZXRQcm9wZXJ0eVR5cGUoZW50aXR5LCBrZXkpO1xuICAgICAgICBpZiAodHlwZSA9PSBudWxsKSB7XG4gICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IG1ldGFkYXRhOiBQcm9wZXJ0eURlY29yYXRvckNvbmZpZ0ludGVybmFsPHVua25vd24+IHwgdW5kZWZpbmVkID0gRW50aXR5VXRpbGl0aWVzLmdldFByb3BlcnR5TWV0YWRhdGEoZW50aXR5LCBrZXksIHR5cGUpO1xuXG4gICAgICAgIC8vIGlzdGFuYnVsIGlnbm9yZSBuZXh0XG4gICAgICAgIGlmIChtZXRhZGF0YSA9PSBudWxsKSB7XG4gICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKG1ldGFkYXRhLm9taXRGb3JDcmVhdGUgJiYgb21pdCA9PT0gJ2NyZWF0ZScpIHtcbiAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG1ldGFkYXRhLm9taXRGb3JVcGRhdGUgJiYgb21pdCA9PT0gJ3VwZGF0ZScpIHtcbiAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG1ldGFkYXRhLnJlcXVpcmVkKGVudGl0eSkgJiYgdHlwZSAhPT0gRGVjb3JhdG9yVHlwZXMuSEFTX01BTlkpIHtcbiAgICAgICAgICAgIGlmIChlbnRpdHlba2V5XSA9PSBudWxsIHx8IGVudGl0eVtrZXldID09PSAnJykge1xuICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgIHByb3BlcnR5OiBtZXRhZGF0YS5kaXNwbGF5TmFtZSxcbiAgICAgICAgICAgICAgICAgICAgbWVzc2FnZTogJ3JlcXVpcmVkJ1xuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFtZXRhZGF0YS5yZXF1aXJlZChlbnRpdHkpKSB7XG4gICAgICAgICAgICBpZiAoZW50aXR5W2tleV0gPT0gbnVsbCB8fCBlbnRpdHlba2V5XSA9PT0gJycpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHN3aXRjaCAodHlwZSkge1xuICAgICAgICAgICAgY2FzZSBEZWNvcmF0b3JUeXBlcy5CT09MRUFOX0RST1BET1dOOlxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBEZWNvcmF0b3JUeXBlcy5CT09MRUFOX0NIRUNLQk9YOlxuICAgICAgICAgICAgY2FzZSBEZWNvcmF0b3JUeXBlcy5CT09MRUFOX1RPR0dMRTpcbiAgICAgICAgICAgICAgICBjb25zdCBlbnRpdHlCb29sZWFuOiBib29sZWFuID0gZW50aXR5W2tleV0gYXMgYm9vbGVhbjtcbiAgICAgICAgICAgICAgICBjb25zdCBib29sZWFuTWV0YWRhdGE6IFRvZ2dsZUJvb2xlYW5EZWNvcmF0b3JDb25maWdJbnRlcm5hbCA9IG1ldGFkYXRhIGFzIFRvZ2dsZUJvb2xlYW5EZWNvcmF0b3JDb25maWdJbnRlcm5hbDtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRCb29sZWFuVmFsaWRhdGlvbkVycm9yKGVudGl0eSwgZW50aXR5Qm9vbGVhbiwgYm9vbGVhbk1ldGFkYXRhKTtcbiAgICAgICAgICAgIGNhc2UgRGVjb3JhdG9yVHlwZXMuU1RSSU5HX0RST1BET1dOOlxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBEZWNvcmF0b3JUeXBlcy5TVFJJTkc6XG4gICAgICAgICAgICAgICAgY29uc3QgZW50aXR5U3RyaW5nOiBzdHJpbmcgPSBlbnRpdHlba2V5XSBhcyBzdHJpbmc7XG4gICAgICAgICAgICAgICAgY29uc3Qgc3RyaW5nTWV0YWRhdGE6IERlZmF1bHRTdHJpbmdEZWNvcmF0b3JDb25maWdJbnRlcm5hbCA9IG1ldGFkYXRhIGFzIERlZmF1bHRTdHJpbmdEZWNvcmF0b3JDb25maWdJbnRlcm5hbDtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRTdHJpbmdWYWxpZGF0aW9uRXJyb3IoZW50aXR5U3RyaW5nLCBzdHJpbmdNZXRhZGF0YSk7XG4gICAgICAgICAgICBjYXNlIERlY29yYXRvclR5cGVzLlNUUklOR19BVVRPQ09NUExFVEU6XG4gICAgICAgICAgICAgICAgY29uc3QgZW50aXR5QXV0b2NvbXBsZXRlU3RyaW5nOiBzdHJpbmcgPSBlbnRpdHlba2V5XSBhcyBzdHJpbmc7XG4gICAgICAgICAgICAgICAgY29uc3Qgc3RyaW5nQXV0b2NvbXBsZXRlTWV0YWRhdGE6IEF1dG9jb21wbGV0ZVN0cmluZ0RlY29yYXRvckNvbmZpZ0ludGVybmFsID0gbWV0YWRhdGEgYXMgQXV0b2NvbXBsZXRlU3RyaW5nRGVjb3JhdG9yQ29uZmlnSW50ZXJuYWw7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0QXV0b2NvbXBsZXRlU3RyaW5nVmFsaWRhdGlvbkVycm9yKGVudGl0eSwgZW50aXR5QXV0b2NvbXBsZXRlU3RyaW5nLCBzdHJpbmdBdXRvY29tcGxldGVNZXRhZGF0YSk7XG4gICAgICAgICAgICBjYXNlIERlY29yYXRvclR5cGVzLlNUUklOR19URVhUQk9YOlxuICAgICAgICAgICAgICAgIGNvbnN0IGVudGl0eVRleHRib3g6IHN0cmluZyA9IGVudGl0eVtrZXldIGFzIHN0cmluZztcbiAgICAgICAgICAgICAgICBjb25zdCB0ZXh0Ym94TWV0YWRhdGE6IFRleHRib3hTdHJpbmdEZWNvcmF0b3JDb25maWdJbnRlcm5hbCA9IG1ldGFkYXRhIGFzIFRleHRib3hTdHJpbmdEZWNvcmF0b3JDb25maWdJbnRlcm5hbDtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRUZXh0Ym94VmFsaWRhdGlvbkVycm9yKGVudGl0eVRleHRib3gsIHRleHRib3hNZXRhZGF0YSk7XG4gICAgICAgICAgICBjYXNlIERlY29yYXRvclR5cGVzLlNUUklOR19QQVNTV09SRDpcbiAgICAgICAgICAgICAgICBjb25zdCBlbnRpdHlQYXNzd29yZDogc3RyaW5nID0gZW50aXR5W2tleV0gYXMgc3RyaW5nO1xuICAgICAgICAgICAgICAgIGNvbnN0IHBhc3N3b3JkTWV0YWRhdGE6IFBhc3N3b3JkU3RyaW5nRGVjb3JhdG9yQ29uZmlnSW50ZXJuYWwgPSBtZXRhZGF0YSBhcyBQYXNzd29yZFN0cmluZ0RlY29yYXRvckNvbmZpZ0ludGVybmFsO1xuICAgICAgICAgICAgICAgIGNvbnN0IGNvbmZpcm1QYXNzd29yZDogc3RyaW5nID0gUmVmbGVjdFV0aWxpdGllcy5nZXRNZXRhZGF0YShFbnRpdHlVdGlsaXRpZXMuQ09ORklSTV9QQVNTV09SRF9LRVksIGVudGl0eSwga2V5KSBhcyBzdHJpbmc7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0UGFzc3dvcmRWYWxpZGF0aW9uRXJyb3IoZW50aXR5UGFzc3dvcmQsIHBhc3N3b3JkTWV0YWRhdGEsIGNvbmZpcm1QYXNzd29yZCk7XG4gICAgICAgICAgICBjYXNlIERlY29yYXRvclR5cGVzLk5VTUJFUl9EUk9QRE9XTjpcbiAgICAgICAgICAgICAgICAvLyBCZWNhdXNlIG9ubHkgdmFsaWQgdmFsdWVzIGNhbiBiZSBzZWxlY3RlZCwgdGhpcyBpcyBhbHdheXMgdHJ1ZSB3aGVuIGl0IGhhcyBhIHZhbHVlXG4gICAgICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgICAgIGNhc2UgRGVjb3JhdG9yVHlwZXMuTlVNQkVSOlxuICAgICAgICAgICAgY2FzZSBEZWNvcmF0b3JUeXBlcy5OVU1CRVJfU0xJREVSOlxuICAgICAgICAgICAgICAgIGNvbnN0IGVudGl0eU51bWJlcjogbnVtYmVyID0gZW50aXR5W2tleV0gYXMgbnVtYmVyO1xuICAgICAgICAgICAgICAgIGNvbnN0IG51bWJlck1ldGFkYXRhOiBEZWZhdWx0TnVtYmVyRGVjb3JhdG9yQ29uZmlnSW50ZXJuYWwgPSBtZXRhZGF0YSBhcyBEZWZhdWx0TnVtYmVyRGVjb3JhdG9yQ29uZmlnSW50ZXJuYWw7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0TnVtYmVyVmFsaWRhdGlvbkVycm9yKGVudGl0eU51bWJlciwgbnVtYmVyTWV0YWRhdGEpO1xuICAgICAgICAgICAgY2FzZSBEZWNvcmF0b3JUeXBlcy5PQkpFQ1Q6XG4gICAgICAgICAgICAgICAgY29uc3QgZW50aXR5T2JqZWN0OiBFbnRpdHlUeXBlID0gZW50aXR5W2tleV0gYXMgRW50aXR5VHlwZTtcbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IHBhcmFtZXRlcktleSBpbiBlbnRpdHlPYmplY3QpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgdmFsdWU6IHVua25vd24gPSBlbnRpdHlPYmplY3RbcGFyYW1ldGVyS2V5XTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICAgICAgICAgIShtZXRhZGF0YSBhcyBEZWZhdWx0T2JqZWN0RGVjb3JhdG9yQ29uZmlnSW50ZXJuYWw8RW50aXR5VHlwZT4pLm9taXQuaW5jbHVkZXMocGFyYW1ldGVyS2V5KVxuICAgICAgICAgICAgICAgICAgICAgICAgJiYgISghbWV0YWRhdGEucmVxdWlyZWQoZW50aXR5KSAmJiAodmFsdWUgPT0gbnVsbCB8fCB2YWx1ZSA9PSAnJykpXG4gICAgICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZXJyOiBWYWxpZGF0aW9uRXJyb3IgfCB1bmRlZmluZWQgPSBhd2FpdCB0aGlzLmdldFByb3BlcnR5VmFsaWRhdGlvbkVycm9yKGVudGl0eU9iamVjdCwgcGFyYW1ldGVyS2V5LCBvbWl0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0eTogbWV0YWRhdGEuZGlzcGxheU5hbWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6IGAke2Vyci5wcm9wZXJ0eX0gaXMgaW52YWxpZDogJHtlcnIubWVzc2FnZX1gXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgRGVjb3JhdG9yVHlwZXMuQVJSQVlfU1RSSU5HX0FVVE9DT01QTEVURV9DSElQUzpcbiAgICAgICAgICAgICAgICBjb25zdCBzdHJpbmdBdXRvY29tcGxldGVBcnJheTogc3RyaW5nW10gPSBlbnRpdHlba2V5XSBhcyBzdHJpbmdbXTtcbiAgICAgICAgICAgICAgICBjb25zdCBzdHJpbmdBdXRvY29tcGxldGVBcnJheU1ldGFkYXRhOiBBdXRvY29tcGxldGVTdHJpbmdDaGlwc0FycmF5RGVjb3JhdG9yQ29uZmlnSW50ZXJuYWwgPSBtZXRhZGF0YSBhcyBBdXRvY29tcGxldGVTdHJpbmdDaGlwc0FycmF5RGVjb3JhdG9yQ29uZmlnSW50ZXJuYWw7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGF3YWl0IHRoaXMuZ2V0QXJyYXlTdHJpbmdBdXRvY29tcGxldGVDaGlwc1ZhbGlkYXRpb25FcnJvcihlbnRpdHksIHN0cmluZ0F1dG9jb21wbGV0ZUFycmF5TWV0YWRhdGEsIHN0cmluZ0F1dG9jb21wbGV0ZUFycmF5KTtcbiAgICAgICAgICAgIGNhc2UgRGVjb3JhdG9yVHlwZXMuQVJSQVlfU1RSSU5HX0NISVBTOlxuICAgICAgICAgICAgY2FzZSBEZWNvcmF0b3JUeXBlcy5BUlJBWV9EQVRFOlxuICAgICAgICAgICAgY2FzZSBEZWNvcmF0b3JUeXBlcy5BUlJBWV9EQVRFX1RJTUU6XG4gICAgICAgICAgICBjYXNlIERlY29yYXRvclR5cGVzLkFSUkFZX0RBVEVfUkFOR0U6XG4gICAgICAgICAgICBjYXNlIERlY29yYXRvclR5cGVzLkFSUkFZOlxuICAgICAgICAgICAgICAgIGNvbnN0IGVudGl0eUFycmF5OiB1bmtub3duW10gPSBlbnRpdHlba2V5XSBhcyB1bmtub3duW107XG4gICAgICAgICAgICAgICAgY29uc3QgYXJyYXlNZXRhZGF0YTogRW50aXR5QXJyYXlEZWNvcmF0b3JDb25maWdJbnRlcm5hbDxFbnRpdHlUeXBlPiA9IG1ldGFkYXRhIGFzIEVudGl0eUFycmF5RGVjb3JhdG9yQ29uZmlnSW50ZXJuYWw8RW50aXR5VHlwZT47XG4gICAgICAgICAgICAgICAgaWYgKGFycmF5TWV0YWRhdGEucmVxdWlyZWQoZW50aXR5KSAmJiAhZW50aXR5QXJyYXkubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0eTogbWV0YWRhdGEuZGlzcGxheU5hbWUsXG4gICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlOiAnbm8gaXRlbXMgaW4gYXJyYXknXG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBEZWNvcmF0b3JUeXBlcy5EQVRFOlxuICAgICAgICAgICAgICAgIGNvbnN0IGVudGl0eURhdGU6IERhdGUgPSBuZXcgRGF0ZShlbnRpdHlba2V5XSBhcyBEYXRlKTtcbiAgICAgICAgICAgICAgICBjb25zdCBkYXRlTWV0YWRhdGE6IERlZmF1bHREYXRlRGVjb3JhdG9yQ29uZmlnSW50ZXJuYWwgPSBtZXRhZGF0YSBhcyBEZWZhdWx0RGF0ZURlY29yYXRvckNvbmZpZ0ludGVybmFsO1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmdldERhdGVWYWxpZGF0aW9uRXJyb3IoZW50aXR5RGF0ZSwgZGF0ZU1ldGFkYXRhKTtcbiAgICAgICAgICAgIGNhc2UgRGVjb3JhdG9yVHlwZXMuREFURV9SQU5HRTpcbiAgICAgICAgICAgICAgICBjb25zdCBlbnRpdHlEYXRlUmFuZ2U6IERhdGVSYW5nZSA9IExvZGFzaFV0aWxpdGllcy5jbG9uZURlZXAoZW50aXR5W2tleV0gYXMgRGF0ZVJhbmdlKTtcbiAgICAgICAgICAgICAgICBjb25zdCBkYXRlUmFuZ2VNZXRhZGF0YTogRGF0ZVJhbmdlRGF0ZURlY29yYXRvckNvbmZpZ0ludGVybmFsID0gbWV0YWRhdGEgYXMgRGF0ZVJhbmdlRGF0ZURlY29yYXRvckNvbmZpZ0ludGVybmFsO1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmdldERhdGVSYW5nZVZhbGlkYXRpb25FcnJvcihlbnRpdHksIGVudGl0eURhdGVSYW5nZSwgZGF0ZVJhbmdlTWV0YWRhdGEpO1xuICAgICAgICAgICAgY2FzZSBEZWNvcmF0b3JUeXBlcy5EQVRFX1RJTUU6XG4gICAgICAgICAgICAgICAgY29uc3QgZW50aXR5RGF0ZVRpbWU6IERhdGUgPSBuZXcgRGF0ZShlbnRpdHlba2V5XSBhcyBEYXRlKTtcbiAgICAgICAgICAgICAgICBjb25zdCBkYXRlVGltZU1ldGFkYXRhOiBEYXRlVGltZURhdGVEZWNvcmF0b3JDb25maWdJbnRlcm5hbCA9IG1ldGFkYXRhIGFzIERhdGVUaW1lRGF0ZURlY29yYXRvckNvbmZpZ0ludGVybmFsO1xuICAgICAgICAgICAgICAgIGNvbnN0IGhhc1RpbWU6IGJvb2xlYW4gPSBSZWZsZWN0VXRpbGl0aWVzLmhhc01ldGFkYXRhKEVudGl0eVV0aWxpdGllcy5USU1FX0tFWSwgZW50aXR5LCBrZXkpO1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmdldERhdGVUaW1lVmFsaWRhdGlvbkVycm9yKGVudGl0eURhdGVUaW1lLCBkYXRlVGltZU1ldGFkYXRhLCBoYXNUaW1lKTtcbiAgICAgICAgICAgIGNhc2UgRGVjb3JhdG9yVHlwZXMuRklMRV9ERUZBVUxUOlxuICAgICAgICAgICAgY2FzZSBEZWNvcmF0b3JUeXBlcy5GSUxFX0lNQUdFOlxuICAgICAgICAgICAgICAgIGNvbnN0IGVudGl0eUZpbGU6IEZpbGVEYXRhIHwgRmlsZURhdGFbXSA9IGVudGl0eVtrZXldIGFzIEZpbGVEYXRhIHwgRmlsZURhdGFbXTtcbiAgICAgICAgICAgICAgICBjb25zdCBlbnRpdHlGaWxlTWV0YWRhdGE6IERlZmF1bHRGaWxlRGVjb3JhdG9yQ29uZmlnSW50ZXJuYWwgPSBtZXRhZGF0YSBhcyBEZWZhdWx0RmlsZURlY29yYXRvckNvbmZpZ0ludGVybmFsO1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmdldEZpbGVEYXRhVmFsaWRhdGlvbkVycm9yKGVudGl0eUZpbGUsIGVudGl0eUZpbGVNZXRhZGF0YSk7XG4gICAgICAgICAgICBjYXNlIERlY29yYXRvclR5cGVzLlJFRkVSRU5DRVNfTUFOWTpcbiAgICAgICAgICAgIGNhc2UgRGVjb3JhdG9yVHlwZXMuUkVGRVJFTkNFU19PTkU6XG4gICAgICAgICAgICBjYXNlIERlY29yYXRvclR5cGVzLkhBU19NQU5ZOlxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBEZWNvcmF0b3JUeXBlcy5DVVNUT006XG4gICAgICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHR5cGVzY3JpcHQvbm8tZXhwbGljaXQtYW55XG4gICAgICAgICAgICAgICAgY29uc3QgY3VzdG9tTWV0YWRhdGE6IEN1c3RvbURlY29yYXRvckNvbmZpZ0ludGVybmFsPEVudGl0eVR5cGUsIGFueSwgYW55LCBhbnk+ID0gbWV0YWRhdGEgYXMgQ3VzdG9tRGVjb3JhdG9yQ29uZmlnSW50ZXJuYWw8RW50aXR5VHlwZSwgYW55LCBhbnksIGFueT47XG4gICAgICAgICAgICAgICAgaWYgKCFjdXN0b21NZXRhZGF0YS5pc1ZhbGlkKGVudGl0eVtrZXldLCBvbWl0KSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgcHJvcGVydHk6IG1ldGFkYXRhLmRpc3BsYXlOYW1lLFxuICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZTogJ2ludmFsaWQnXG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYENvdWxkIG5vdCB2YWxpZGF0ZSB0aGUgaW5wdXQgYmVjYXVzZSB0aGUgRGVjb3JhdG9yVHlwZSAke3R5cGV9IGlzIG5vdCBrbm93bmApO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzdGF0aWMgYXN5bmMgZ2V0QXJyYXlTdHJpbmdBdXRvY29tcGxldGVDaGlwc1ZhbGlkYXRpb25FcnJvcjxFbnRpdHlUeXBlIGV4dGVuZHMgQmFzZUVudGl0eVR5cGU8RW50aXR5VHlwZT4+KFxuICAgICAgICBlbnRpdHk6IEVudGl0eVR5cGUsXG4gICAgICAgIG1ldGFkYXRhOiBBdXRvY29tcGxldGVTdHJpbmdDaGlwc0FycmF5RGVjb3JhdG9yQ29uZmlnSW50ZXJuYWwsXG4gICAgICAgIHN0cmluZ0F1dG9jb21wbGV0ZUFycmF5OiBzdHJpbmdbXVxuICAgICk6IFByb21pc2U8VmFsaWRhdGlvbkVycm9yIHwgdW5kZWZpbmVkPiB7XG4gICAgICAgIGlmIChtZXRhZGF0YS5yZXF1aXJlZChlbnRpdHkpICYmICFzdHJpbmdBdXRvY29tcGxldGVBcnJheS5sZW5ndGgpIHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgcHJvcGVydHk6IG1ldGFkYXRhLmRpc3BsYXlOYW1lLFxuICAgICAgICAgICAgICAgIG1lc3NhZ2U6ICdubyBpdGVtcyBpbiBhcnJheSdcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG1ldGFkYXRhLnJlc3RyaWN0VG9PcHRpb25zID09IHRydWUpIHtcbiAgICAgICAgICAgIGNvbnN0IGF1dG9jb21wbGV0ZVZhbHVlczogc3RyaW5nW10gPSBhd2FpdCBtZXRhZGF0YS5hdXRvY29tcGxldGVWYWx1ZXMoZW50aXR5KTtcbiAgICAgICAgICAgIGZvciAoY29uc3QgdmFsdWUgb2Ygc3RyaW5nQXV0b2NvbXBsZXRlQXJyYXkpIHtcbiAgICAgICAgICAgICAgICBpZiAoIWF1dG9jb21wbGV0ZVZhbHVlcy5pbmNsdWRlcyh2YWx1ZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHByb3BlcnR5OiBtZXRhZGF0YS5kaXNwbGF5TmFtZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6IGBUaGUgdmFsdWUgXCIke3ZhbHVlfVwiIG5lZWRzIHRvIGJlIG9uZSBvZiB0aGUgcHJvdmlkZWQgdmFsdWVzYFxuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIHByaXZhdGUgc3RhdGljIGdldEJvb2xlYW5WYWxpZGF0aW9uRXJyb3I8RW50aXR5VHlwZSBleHRlbmRzIEJhc2VFbnRpdHlUeXBlPEVudGl0eVR5cGU+PihcbiAgICAgICAgZW50aXR5OiBFbnRpdHlUeXBlLFxuICAgICAgICB2YWx1ZTogYm9vbGVhbixcbiAgICAgICAgbWV0YWRhdGE6IFRvZ2dsZUJvb2xlYW5EZWNvcmF0b3JDb25maWdJbnRlcm5hbFxuICAgICk6IFZhbGlkYXRpb25FcnJvciB8IHVuZGVmaW5lZCB7XG4gICAgICAgIGlmIChtZXRhZGF0YS5yZXF1aXJlZChlbnRpdHkpICYmICF2YWx1ZSkge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICBwcm9wZXJ0eTogbWV0YWRhdGEuZGlzcGxheU5hbWUsXG4gICAgICAgICAgICAgICAgbWVzc2FnZTogJ25vdCBzZWxlY3RlZCdcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICBwcml2YXRlIHN0YXRpYyBnZXRTdHJpbmdWYWxpZGF0aW9uRXJyb3IodmFsdWU6IHN0cmluZywgbWV0YWRhdGE6IERlZmF1bHRTdHJpbmdEZWNvcmF0b3JDb25maWdJbnRlcm5hbCk6IFZhbGlkYXRpb25FcnJvciB8IHVuZGVmaW5lZCB7XG4gICAgICAgIGlmIChtZXRhZGF0YS5tYXhMZW5ndGggJiYgdmFsdWUubGVuZ3RoID4gbWV0YWRhdGEubWF4TGVuZ3RoKSB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIHByb3BlcnR5OiBtZXRhZGF0YS5kaXNwbGF5TmFtZSxcbiAgICAgICAgICAgICAgICBtZXNzYWdlOiBgbmVlZHMgdG8gYmUgc21hbGxlciB0aGFuICR7bWV0YWRhdGEubWF4TGVuZ3RofSBjaGFyYWN0ZXJzYFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobWV0YWRhdGEubWluTGVuZ3RoICYmIHZhbHVlLmxlbmd0aCA8IG1ldGFkYXRhLm1pbkxlbmd0aCkge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICBwcm9wZXJ0eTogbWV0YWRhdGEuZGlzcGxheU5hbWUsXG4gICAgICAgICAgICAgICAgbWVzc2FnZTogYG5lZWRzIHRvIGJlIGJpZ2dlciB0aGFuICR7bWV0YWRhdGEubWluTGVuZ3RofSBjaGFyYWN0ZXJzYFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobWV0YWRhdGEucmVnZXggJiYgIXZhbHVlLm1hdGNoKG1ldGFkYXRhLnJlZ2V4KSkge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICBwcm9wZXJ0eTogbWV0YWRhdGEuZGlzcGxheU5hbWUsXG4gICAgICAgICAgICAgICAgbWVzc2FnZTogJ2ludmFsaWQnXG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzdGF0aWMgYXN5bmMgZ2V0QXV0b2NvbXBsZXRlU3RyaW5nVmFsaWRhdGlvbkVycm9yPEVudGl0eVR5cGUgZXh0ZW5kcyBCYXNlRW50aXR5VHlwZTxFbnRpdHlUeXBlPj4oXG4gICAgICAgIGVudGl0eTogRW50aXR5VHlwZSxcbiAgICAgICAgdmFsdWU6IHN0cmluZyxcbiAgICAgICAgbWV0YWRhdGE6IEF1dG9jb21wbGV0ZVN0cmluZ0RlY29yYXRvckNvbmZpZ0ludGVybmFsXG4gICAgKTogUHJvbWlzZTxWYWxpZGF0aW9uRXJyb3IgfCB1bmRlZmluZWQ+IHtcbiAgICAgICAgaWYgKG1ldGFkYXRhLm1heExlbmd0aCAmJiB2YWx1ZS5sZW5ndGggPiBtZXRhZGF0YS5tYXhMZW5ndGgpIHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgcHJvcGVydHk6IG1ldGFkYXRhLmRpc3BsYXlOYW1lLFxuICAgICAgICAgICAgICAgIG1lc3NhZ2U6IGBuZWVkcyB0byBiZSBzbWFsbGVyIHRoYW4gJHttZXRhZGF0YS5tYXhMZW5ndGh9IGNoYXJhY3RlcnNgXG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIGlmIChtZXRhZGF0YS5taW5MZW5ndGggJiYgdmFsdWUubGVuZ3RoIDwgbWV0YWRhdGEubWluTGVuZ3RoKSB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIHByb3BlcnR5OiBtZXRhZGF0YS5kaXNwbGF5TmFtZSxcbiAgICAgICAgICAgICAgICBtZXNzYWdlOiBgbmVlZHMgdG8gYmUgYmlnZ2VyIHRoYW4gJHttZXRhZGF0YS5taW5MZW5ndGh9IGNoYXJhY3RlcnNgXG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIGlmIChtZXRhZGF0YS5yZWdleCAmJiAhdmFsdWUubWF0Y2gobWV0YWRhdGEucmVnZXgpKSB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIHByb3BlcnR5OiBtZXRhZGF0YS5kaXNwbGF5TmFtZSxcbiAgICAgICAgICAgICAgICBtZXNzYWdlOiAnaW52YWxpZCdcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG1ldGFkYXRhLnJlc3RyaWN0VG9PcHRpb25zID09IHRydWUgJiYgIShhd2FpdCBtZXRhZGF0YS5hdXRvY29tcGxldGVWYWx1ZXMoZW50aXR5KSkuaW5jbHVkZXModmFsdWUpKSB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIHByb3BlcnR5OiBtZXRhZGF0YS5kaXNwbGF5TmFtZSxcbiAgICAgICAgICAgICAgICBtZXNzYWdlOiAnTmVlZHMgdG8gYmUgb25lIG9mIHRoZSBwcm92aWRlZCB2YWx1ZXMnXG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzdGF0aWMgZ2V0VGV4dGJveFZhbGlkYXRpb25FcnJvcih2YWx1ZTogc3RyaW5nLCBtZXRhZGF0YTogVGV4dGJveFN0cmluZ0RlY29yYXRvckNvbmZpZ0ludGVybmFsKTogVmFsaWRhdGlvbkVycm9yIHwgdW5kZWZpbmVkIHtcbiAgICAgICAgaWYgKG1ldGFkYXRhLm1heExlbmd0aCAmJiB2YWx1ZS5sZW5ndGggPiBtZXRhZGF0YS5tYXhMZW5ndGgpIHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgcHJvcGVydHk6IG1ldGFkYXRhLmRpc3BsYXlOYW1lLFxuICAgICAgICAgICAgICAgIG1lc3NhZ2U6IGBuZWVkcyB0byBiZSBzbWFsbGVyIHRoYW4gJHttZXRhZGF0YS5tYXhMZW5ndGh9IGNoYXJhY3RlcnNgXG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIGlmIChtZXRhZGF0YS5taW5MZW5ndGggJiYgdmFsdWUubGVuZ3RoIDwgbWV0YWRhdGEubWluTGVuZ3RoKSB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIHByb3BlcnR5OiBtZXRhZGF0YS5kaXNwbGF5TmFtZSxcbiAgICAgICAgICAgICAgICBtZXNzYWdlOiBgbmVlZHMgdG8gYmUgYmlnZ2VyIHRoYW4gJHttZXRhZGF0YS5taW5MZW5ndGh9IGNoYXJhY3RlcnNgXG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzdGF0aWMgZ2V0UGFzc3dvcmRWYWxpZGF0aW9uRXJyb3IoXG4gICAgICAgIHZhbHVlOiBzdHJpbmcsXG4gICAgICAgIG1ldGFkYXRhOiBQYXNzd29yZFN0cmluZ0RlY29yYXRvckNvbmZpZ0ludGVybmFsLFxuICAgICAgICBjb25maXJtUGFzc3dvcmQ6IHN0cmluZ1xuICAgICk6IFZhbGlkYXRpb25FcnJvciB8IHVuZGVmaW5lZCB7XG4gICAgICAgIGlmICh2YWx1ZSAhPT0gY29uZmlybVBhc3N3b3JkKSB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIHByb3BlcnR5OiBtZXRhZGF0YS5kaXNwbGF5TmFtZSxcbiAgICAgICAgICAgICAgICBtZXNzYWdlOiAncGFzc3dvcmRzIG5lZWQgdG8gbWF0Y2gnXG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIGlmIChtZXRhZGF0YS5tYXhMZW5ndGggJiYgdmFsdWUubGVuZ3RoID4gbWV0YWRhdGEubWF4TGVuZ3RoKSB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIHByb3BlcnR5OiBtZXRhZGF0YS5kaXNwbGF5TmFtZSxcbiAgICAgICAgICAgICAgICBtZXNzYWdlOiBgbmVlZHMgdG8gYmUgc21hbGxlciB0aGFuICR7bWV0YWRhdGEubWF4TGVuZ3RofSBjaGFyYWN0ZXJzYFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobWV0YWRhdGEubWluTGVuZ3RoICYmIHZhbHVlLmxlbmd0aCA8IG1ldGFkYXRhLm1pbkxlbmd0aCkge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICBwcm9wZXJ0eTogbWV0YWRhdGEuZGlzcGxheU5hbWUsXG4gICAgICAgICAgICAgICAgbWVzc2FnZTogYG5lZWRzIHRvIGJlIGJpZ2dlciB0aGFuICR7bWV0YWRhdGEubWluTGVuZ3RofSBjaGFyYWN0ZXJzYFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobWV0YWRhdGEucmVnZXggJiYgIXZhbHVlLm1hdGNoKG1ldGFkYXRhLnJlZ2V4KSkge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICBwcm9wZXJ0eTogbWV0YWRhdGEuZGlzcGxheU5hbWUsXG4gICAgICAgICAgICAgICAgbWVzc2FnZTogJ2ludmFsaWQnXG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzdGF0aWMgZ2V0TnVtYmVyVmFsaWRhdGlvbkVycm9yKHZhbHVlOiBudW1iZXIsIG1ldGFkYXRhOiBEZWZhdWx0TnVtYmVyRGVjb3JhdG9yQ29uZmlnSW50ZXJuYWwpOiBWYWxpZGF0aW9uRXJyb3IgfCB1bmRlZmluZWQge1xuICAgICAgICBpZiAobWV0YWRhdGEubWF4ICYmIHZhbHVlID4gbWV0YWRhdGEubWF4KSB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIHByb3BlcnR5OiBtZXRhZGF0YS5kaXNwbGF5TmFtZSxcbiAgICAgICAgICAgICAgICBtZXNzYWdlOiBgbmVlZHMgdG8gYmUgc21hbGxlciB0aGFuICR7bWV0YWRhdGEubWF4fWBcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG1ldGFkYXRhLm1pbiAmJiB2YWx1ZSA8IG1ldGFkYXRhLm1pbikge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICBwcm9wZXJ0eTogbWV0YWRhdGEuZGlzcGxheU5hbWUsXG4gICAgICAgICAgICAgICAgbWVzc2FnZTogYG5lZWRzIHRvIGJlIGJpZ2dlciB0aGFuICR7bWV0YWRhdGEubWlufWBcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICBwcml2YXRlIHN0YXRpYyBnZXREYXRlVmFsaWRhdGlvbkVycm9yKHZhbHVlOiBEYXRlLCBtZXRhZGF0YTogRGVmYXVsdERhdGVEZWNvcmF0b3JDb25maWdJbnRlcm5hbCk6IFZhbGlkYXRpb25FcnJvciB8IHVuZGVmaW5lZCB7XG4gICAgICAgIGlmIChtZXRhZGF0YS5taW4gJiYgdmFsdWUuZ2V0VGltZSgpIDwgbWV0YWRhdGEubWluKHZhbHVlKS5nZXRUaW1lKCkpIHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgcHJvcGVydHk6IG1ldGFkYXRhLmRpc3BsYXlOYW1lLFxuICAgICAgICAgICAgICAgIG1lc3NhZ2U6IGBuZWVkcyB0byBiZSBhZnRlciAke2Zvcm1hdERhdGUobWV0YWRhdGEubWluKHZhbHVlKSl9YFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobWV0YWRhdGEubWF4ICYmIHZhbHVlLmdldFRpbWUoKSA+IG1ldGFkYXRhLm1heCh2YWx1ZSkuZ2V0VGltZSgpKSB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIHByb3BlcnR5OiBtZXRhZGF0YS5kaXNwbGF5TmFtZSxcbiAgICAgICAgICAgICAgICBtZXNzYWdlOiBgbmVlZHMgdG8gYmUgYmVmb3JlICR7Zm9ybWF0RGF0ZShtZXRhZGF0YS5tYXgodmFsdWUpKX1gXG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIGlmIChtZXRhZGF0YS5maWx0ZXIgJiYgIW1ldGFkYXRhLmZpbHRlcih2YWx1ZSkpIHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgcHJvcGVydHk6IG1ldGFkYXRhLmRpc3BsYXlOYW1lLFxuICAgICAgICAgICAgICAgIG1lc3NhZ2U6ICdpbnZhbGlkJ1xuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIHByaXZhdGUgc3RhdGljIGdldERhdGVSYW5nZVZhbGlkYXRpb25FcnJvcjxFbnRpdHlUeXBlIGV4dGVuZHMgQmFzZUVudGl0eVR5cGU8RW50aXR5VHlwZT4+KFxuICAgICAgICBlbnRpdHk6IEVudGl0eVR5cGUsXG4gICAgICAgIHZhbHVlOiBQYXJ0aWFsPERhdGVSYW5nZT4sXG4gICAgICAgIG1ldGFkYXRhOiBEYXRlUmFuZ2VEYXRlRGVjb3JhdG9yQ29uZmlnSW50ZXJuYWxcbiAgICApOiBWYWxpZGF0aW9uRXJyb3IgfCB1bmRlZmluZWQge1xuICAgICAgICBpZiAobWV0YWRhdGEucmVxdWlyZWQoZW50aXR5KSkge1xuICAgICAgICAgICAgaWYgKHZhbHVlLnN0YXJ0ID09IG51bGwgfHwgdmFsdWUuZW5kID09IG51bGwgfHwgdmFsdWUudmFsdWVzID09IG51bGwpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0eTogbWV0YWRhdGEuZGlzcGxheU5hbWUsXG4gICAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6ICdyZXF1aXJlZCdcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmICh2YWx1ZS5zdGFydCkge1xuICAgICAgICAgICAgdmFsdWUuc3RhcnQgPSBuZXcgRGF0ZSh2YWx1ZS5zdGFydCk7XG4gICAgICAgICAgICBpZiAobWV0YWRhdGEubWluU3RhcnQgJiYgdmFsdWUuc3RhcnQuZ2V0VGltZSgpIDwgbWV0YWRhdGEubWluU3RhcnQodmFsdWUuc3RhcnQpLmdldFRpbWUoKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgIHByb3BlcnR5OiBtZXRhZGF0YS5kaXNwbGF5TmFtZSxcbiAgICAgICAgICAgICAgICAgICAgbWVzc2FnZTogYHN0YXJ0IGRhdGUgbmVlZHMgdG8gYmUgYWZ0ZXIgJHtmb3JtYXREYXRlKG1ldGFkYXRhLm1pblN0YXJ0KHZhbHVlLnN0YXJ0KSl9YFxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAobWV0YWRhdGEubWF4U3RhcnQgJiYgdmFsdWUuc3RhcnQuZ2V0VGltZSgpID4gbWV0YWRhdGEubWF4U3RhcnQodmFsdWUuc3RhcnQpLmdldFRpbWUoKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgIHByb3BlcnR5OiBtZXRhZGF0YS5kaXNwbGF5TmFtZSxcbiAgICAgICAgICAgICAgICAgICAgbWVzc2FnZTogYHN0YXJ0IGRhdGUgbmVlZHMgdG8gYmUgYmVmb3JlICR7Zm9ybWF0RGF0ZShtZXRhZGF0YS5tYXhTdGFydCh2YWx1ZS5zdGFydCkpfWBcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKG1ldGFkYXRhLmZpbHRlcikge1xuICAgICAgICAgICAgICAgIGlmICghbWV0YWRhdGEuZmlsdGVyKHZhbHVlLnN0YXJ0KSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgcHJvcGVydHk6IG1ldGFkYXRhLmRpc3BsYXlOYW1lLFxuICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZTogJ3N0YXJ0IGRhdGUgaW52YWxpZCdcbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodmFsdWUuZW5kKSB7XG4gICAgICAgICAgICB2YWx1ZS5lbmQgPSBuZXcgRGF0ZSh2YWx1ZS5lbmQpO1xuICAgICAgICAgICAgaWYgKG1ldGFkYXRhLm1pbkVuZCAmJiB2YWx1ZS5lbmQuZ2V0VGltZSgpIDwgbWV0YWRhdGEubWluRW5kKHZhbHVlLmVuZCkuZ2V0VGltZSgpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgcHJvcGVydHk6IG1ldGFkYXRhLmRpc3BsYXlOYW1lLFxuICAgICAgICAgICAgICAgICAgICBtZXNzYWdlOiBgZW5kIGRhdGUgbmVlZHMgdG8gYmUgYWZ0ZXIgJHtmb3JtYXREYXRlKG1ldGFkYXRhLm1pbkVuZCh2YWx1ZS5lbmQpKX1gXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChtZXRhZGF0YS5tYXhFbmQgJiYgdmFsdWUuZW5kLmdldFRpbWUoKSA+IG1ldGFkYXRhLm1heEVuZCh2YWx1ZS5lbmQpLmdldFRpbWUoKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgIHByb3BlcnR5OiBtZXRhZGF0YS5kaXNwbGF5TmFtZSxcbiAgICAgICAgICAgICAgICAgICAgbWVzc2FnZTogYGVuZCBkYXRlIG5lZWRzIHRvIGJlIGJlZm9yZSAke2Zvcm1hdERhdGUobWV0YWRhdGEubWF4RW5kKHZhbHVlLmVuZCkpfWBcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKG1ldGFkYXRhLmZpbHRlcikge1xuICAgICAgICAgICAgICAgIGlmICghbWV0YWRhdGEuZmlsdGVyKHZhbHVlLmVuZCkpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHByb3BlcnR5OiBtZXRhZGF0YS5kaXNwbGF5TmFtZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6ICdlbmQgZGF0ZSBpbnZhbGlkJ1xuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG5cbiAgICAgICAgaWYgKG1ldGFkYXRhLmZpbHRlciAmJiB2YWx1ZS52YWx1ZXMpIHtcbiAgICAgICAgICAgIGZvciAoY29uc3QgZGF0ZSBvZiB2YWx1ZS52YWx1ZXMpIHtcbiAgICAgICAgICAgICAgICBpZiAoIW1ldGFkYXRhLmZpbHRlcihkYXRlKSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgcHJvcGVydHk6IG1ldGFkYXRhLmRpc3BsYXlOYW1lLFxuICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZTogYHZhbHVlICR7Zm9ybWF0RGF0ZShkYXRlKX0gaW52YWxpZGBcbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICBwcml2YXRlIHN0YXRpYyBnZXREYXRlVGltZVZhbGlkYXRpb25FcnJvcihcbiAgICAgICAgdmFsdWU6IERhdGUsXG4gICAgICAgIG1ldGFkYXRhOiBEYXRlVGltZURhdGVEZWNvcmF0b3JDb25maWdJbnRlcm5hbCxcbiAgICAgICAgaGFzVGltZTogYm9vbGVhblxuICAgICk6IFZhbGlkYXRpb25FcnJvciB8IHVuZGVmaW5lZCB7XG4gICAgICAgIGlmICghaGFzVGltZSkge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICBwcm9wZXJ0eTogbWV0YWRhdGEuZGlzcGxheU5hbWUsXG4gICAgICAgICAgICAgICAgbWVzc2FnZTogJ25vIHRpbWUnXG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIGlmIChtZXRhZGF0YS5taW5EYXRlICYmIHZhbHVlLmdldFRpbWUoKSA8IG1ldGFkYXRhLm1pbkRhdGUodmFsdWUpLmdldFRpbWUoKSkge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICBwcm9wZXJ0eTogbWV0YWRhdGEuZGlzcGxheU5hbWUsXG4gICAgICAgICAgICAgICAgbWVzc2FnZTogYGRhdGUgbmVlZHMgdG8gYmUgYWZ0ZXIgJHtmb3JtYXREYXRlKG1ldGFkYXRhLm1pbkRhdGUodmFsdWUpKX1gXG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIGlmIChtZXRhZGF0YS5tYXhEYXRlICYmIHZhbHVlLmdldFRpbWUoKSA+IG1ldGFkYXRhLm1heERhdGUodmFsdWUpLmdldFRpbWUoKSkge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICBwcm9wZXJ0eTogbWV0YWRhdGEuZGlzcGxheU5hbWUsXG4gICAgICAgICAgICAgICAgbWVzc2FnZTogYGRhdGUgbmVlZHMgdG8gYmUgYmVmb3JlICR7Zm9ybWF0RGF0ZShtZXRhZGF0YS5tYXhEYXRlKHZhbHVlKSl9YFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobWV0YWRhdGEuZmlsdGVyRGF0ZSAmJiAhbWV0YWRhdGEuZmlsdGVyRGF0ZSh2YWx1ZSkpIHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgcHJvcGVydHk6IG1ldGFkYXRhLmRpc3BsYXlOYW1lLFxuICAgICAgICAgICAgICAgIG1lc3NhZ2U6ICdpbnZhbGlkIGRhdGUnXG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHRpbWU6IFRpbWUgPSBEYXRlVXRpbGl0aWVzLmdldFRpbWVGcm9tRGF0ZSh2YWx1ZSkgYXMgVGltZTtcbiAgICAgICAgaWYgKG1ldGFkYXRhLm1pblRpbWUpIHtcbiAgICAgICAgICAgIGNvbnN0IG1pblRpbWU6IFRpbWUgPSBtZXRhZGF0YS5taW5UaW1lKHZhbHVlKTtcbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAhKFxuICAgICAgICAgICAgICAgICAgICB0aW1lLmhvdXJzID4gbWluVGltZS5ob3Vyc1xuICAgICAgICAgICAgICAgICAgICB8fCAoXG4gICAgICAgICAgICAgICAgICAgICAgICB0aW1lLmhvdXJzID09PSBtaW5UaW1lLmhvdXJzXG4gICAgICAgICAgICAgICAgICAgICAgICAmJiB0aW1lLm1pbnV0ZXMgPj0gbWluVGltZS5taW51dGVzXG4gICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0eTogbWV0YWRhdGEuZGlzcGxheU5hbWUsXG4gICAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6IGB0aW1lIG5lZWRzIHRvIGJlIGFmdGVyICR7bWluVGltZS5ob3Vyc306JHttaW5UaW1lLm1pbnV0ZXN9YFxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG1ldGFkYXRhLm1heFRpbWUpIHtcbiAgICAgICAgICAgIGNvbnN0IG1heFRpbWU6IFRpbWUgPSBtZXRhZGF0YS5tYXhUaW1lKHZhbHVlKTtcbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAhKFxuICAgICAgICAgICAgICAgICAgICB0aW1lLmhvdXJzIDwgbWF4VGltZS5ob3Vyc1xuICAgICAgICAgICAgICAgICAgICB8fCAoXG4gICAgICAgICAgICAgICAgICAgICAgICB0aW1lLmhvdXJzID09PSBtYXhUaW1lLmhvdXJzXG4gICAgICAgICAgICAgICAgICAgICAgICAmJiB0aW1lLm1pbnV0ZXMgPD0gbWF4VGltZS5taW51dGVzXG4gICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0eTogbWV0YWRhdGEuZGlzcGxheU5hbWUsXG4gICAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6IGB0aW1lIG5lZWRzIHRvIGJlIGJlZm9yZSAke21heFRpbWUuaG91cnN9OiR7bWF4VGltZS5taW51dGVzfWBcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChtZXRhZGF0YS5maWx0ZXJUaW1lICYmICFtZXRhZGF0YS5maWx0ZXJUaW1lKHRpbWUpKSB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIHByb3BlcnR5OiBtZXRhZGF0YS5kaXNwbGF5TmFtZSxcbiAgICAgICAgICAgICAgICBtZXNzYWdlOiAnaW52YWxpZCB0aW1lJ1xuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIHByaXZhdGUgc3RhdGljIGdldEZpbGVEYXRhVmFsaWRhdGlvbkVycm9yKFxuICAgICAgICB2YWx1ZTogRmlsZURhdGEgfCBGaWxlRGF0YVtdLFxuICAgICAgICBtZXRhZGF0YTogRGVmYXVsdEZpbGVEZWNvcmF0b3JDb25maWdJbnRlcm5hbFxuICAgICk6IFZhbGlkYXRpb25FcnJvciB8IHVuZGVmaW5lZCB7XG4gICAgICAgIGNvbnN0IGZpbGVzOiBGaWxlRGF0YVtdID0gbWV0YWRhdGEubXVsdGlwbGUgPyB2YWx1ZSBhcyBGaWxlRGF0YVtdIDogW3ZhbHVlIGFzIEZpbGVEYXRhXTtcbiAgICAgICAgbGV0IGZpbGVTaXplVG90YWw6IG51bWJlciA9IDA7XG4gICAgICAgIGZvciAoY29uc3QgZmlsZSBvZiBmaWxlcykge1xuICAgICAgICAgICAgaWYgKCFmaWxlLm5hbWUgfHwgIWZpbGUuZmlsZSAmJiAhZmlsZS51cmwpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0eTogbWV0YWRhdGEuZGlzcGxheU5hbWUsXG4gICAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6ICdpbnZhbGlkJ1xuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoIUZpbGVVdGlsaXRpZXMuaXNNaW1lVHlwZVZhbGlkKGZpbGUudHlwZSwgbWV0YWRhdGEuYWxsb3dlZE1pbWVUeXBlcykpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0eTogbWV0YWRhdGEuZGlzcGxheU5hbWUsXG4gICAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6IGBtaW1ldHlwZSBuZWVkcyB0byBiZSBvbmUgb2YgJHttZXRhZGF0YS5hbGxvd2VkTWltZVR5cGVzfWBcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKEZpbGVVdGlsaXRpZXMudHJhbnNmb3JtVG9NZWdhQnl0ZXMoZmlsZS5zaXplLCAnQicpID4gbWV0YWRhdGEubWF4U2l6ZSkge1xuICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgIHByb3BlcnR5OiBtZXRhZGF0YS5kaXNwbGF5TmFtZSxcbiAgICAgICAgICAgICAgICAgICAgbWVzc2FnZTogYGZpbGUgbmVlZHMgdG8gYmUgc21hbGxlciB0aGFuICR7bWV0YWRhdGEubWF4U2l6ZX0gTUJgXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZpbGVTaXplVG90YWwgKz0gZmlsZS5zaXplO1xuICAgICAgICAgICAgaWYgKEZpbGVVdGlsaXRpZXMudHJhbnNmb3JtVG9NZWdhQnl0ZXMoZmlsZVNpemVUb3RhbCwgJ0InKSA+IG1ldGFkYXRhLm1heFNpemVUb3RhbCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgIHByb3BlcnR5OiBtZXRhZGF0YS5kaXNwbGF5TmFtZSxcbiAgICAgICAgICAgICAgICAgICAgbWVzc2FnZTogYFRoZSBzaXplIG9mIGFsbCBmaWxlcyBjb21iaW5lZCBuZWVkcyB0byBiZSBzbWFsbGVyIHRoYW4gJHttZXRhZGF0YS5tYXhTaXplVG90YWx9YFxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG59XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBqc2RvYy9yZXF1aXJlLWpzZG9jXG5mdW5jdGlvbiBwYWRUbzJEaWdpdHMobnVtOiBudW1iZXIpOiBzdHJpbmcge1xuICAgIHJldHVybiBudW0udG9TdHJpbmcoKS5wYWRTdGFydCgyLCAnMCcpO1xufVxuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUganNkb2MvcmVxdWlyZS1qc2RvY1xuZnVuY3Rpb24gZm9ybWF0RGF0ZShkYXRlOiBEYXRlKTogc3RyaW5nIHtcbiAgICByZXR1cm4gW1xuICAgICAgICBwYWRUbzJEaWdpdHMoZGF0ZS5nZXREYXRlKCkpLFxuICAgICAgICBwYWRUbzJEaWdpdHMoZGF0ZS5nZXRNb250aCgpICsgMSksXG4gICAgICAgIGRhdGUuZ2V0RnVsbFllYXIoKVxuICAgIF0uam9pbignLycpO1xufSJdfQ==
|
|
526
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmFsaWRhdGlvbi51dGlsaXRpZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtbWF0ZXJpYWwtZW50aXR5L3NyYy91dGlsaXRpZXMvdmFsaWRhdGlvbi51dGlsaXRpZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBR0EsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQ2pELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUNyRCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFHakQsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHlDQUF5QyxDQUFDO0FBV3pFLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQztBQUNwRSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQztBQWlCdEU7O0dBRUc7QUFDSCxNQUFNLE9BQWdCLG1CQUFtQjtJQUNyQzs7Ozs7OztPQU9HO0lBQ0gsTUFBTSxDQUFDLEtBQUssQ0FBQyxhQUFhLENBQ3RCLE1BQWtCLEVBQ2xCLFFBQTZCLEVBQzdCLElBQTBCO1FBRTFCLE9BQU8sQ0FBQyxNQUFNLElBQUksQ0FBQyx5QkFBeUIsQ0FBQyxNQUFNLEVBQUUsUUFBUSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsTUFBTSxLQUFLLENBQUMsQ0FBQztJQUN2RixDQUFDO0lBRUQ7Ozs7OztPQU1HO0lBQ0gsTUFBTSxDQUFDLEtBQUssQ0FBQyx5QkFBeUIsQ0FDbEMsTUFBa0IsRUFDbEIsUUFBNkIsRUFDN0IsSUFBMEI7UUFFMUIsTUFBTSxHQUFHLEdBQXNCLEVBQUUsQ0FBQztRQUNsQyxLQUFLLE1BQU0sR0FBRyxJQUFJLGVBQWUsQ0FBQyxNQUFNLENBQUMsTUFBTSxFQUFFLFFBQVEsQ0FBQyxFQUFFO1lBQ3hELE1BQU0sR0FBRyxHQUFnQyxNQUFNLElBQUksQ0FBQywwQkFBMEIs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QUMzQixJQUFJLGFBQWEsQ0FBQyxvQkFBb0IsQ0FBQyxhQUFhLEVBQUUsR0FBRyxDQUFDLEdBQUcsUUFBUSxDQUFDLFlBQVksRUFBRTtnQkFDaEYsT0FBTztvQkFDSCxRQUFRLEVBQUUsUUFBUSxDQUFDLFdBQVc7b0JBQzlCLE9BQU8sRUFBRSwyREFBMkQsUUFBUSxDQUFDLFlBQVksRUFBRTtpQkFDOUYsQ0FBQzthQUNMO1NBQ0o7UUFDRCxPQUFPLFNBQVMsQ0FBQztJQUNyQixDQUFDO0NBQ0o7QUFFRCwrQ0FBK0M7QUFDL0MsU0FBUyxZQUFZLENBQUMsR0FBVztJQUM3QixPQUFPLEdBQUcsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxRQUFRLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQzNDLENBQUM7QUFFRCwrQ0FBK0M7QUFDL0MsU0FBUyxVQUFVLENBQUMsSUFBVTtJQUMxQixPQUFPO1FBQ0gsWUFBWSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUM1QixZQUFZLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxHQUFHLENBQUMsQ0FBQztRQUNqQyxJQUFJLENBQUMsV0FBVyxFQUFFO0tBQ3JCLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ2hCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBUaW1lIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IEVudmlyb25tZW50SW5qZWN0b3IgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuaW1wb3J0IHsgRGF0ZVV0aWxpdGllcyB9IGZyb20gJy4vZGF0ZS51dGlsaXRpZXMnO1xuaW1wb3J0IHsgRW50aXR5VXRpbGl0aWVzIH0gZnJvbSAnLi9lbnRpdHkudXRpbGl0aWVzJztcbmltcG9ydCB7IEZpbGVVdGlsaXRpZXMgfSBmcm9tICcuL2ZpbGUudXRpbGl0aWVzJztcbmltcG9ydCB7IEJhc2VFbnRpdHlUeXBlIH0gZnJvbSAnLi4vY2xhc3Nlcy9lbnRpdHkubW9kZWwnO1xuaW1wb3J0IHsgQXV0b2NvbXBsZXRlU3RyaW5nQ2hpcHNBcnJheURlY29yYXRvckNvbmZpZ0ludGVybmFsLCBFbnRpdHlBcnJheURlY29yYXRvckNvbmZpZ0ludGVybmFsIH0gZnJvbSAnLi4vZGVjb3JhdG9ycy9hcnJheS9hcnJheS1kZWNvcmF0b3ItaW50ZXJuYWwuZGF0YSc7XG5pbXBvcnQgeyBEZWNvcmF0b3JUeXBlcyB9IGZyb20gJy4uL2RlY29yYXRvcnMvYmFzZS9kZWNvcmF0b3ItdHlwZXMuZW51bSc7XG5pbXBvcnQgeyBQcm9wZXJ0eURlY29yYXRvckNvbmZpZ0ludGVybmFsIH0gZnJvbSAnLi4vZGVjb3JhdG9ycy9iYXNlL3Byb3BlcnR5LWRlY29yYXRvci1pbnRlcm5hbC5kYXRhJztcbmltcG9ydCB7IFRvZ2dsZUJvb2xlYW5EZWNvcmF0b3JDb25maWdJbnRlcm5hbCB9IGZyb20gJy4uL2RlY29yYXRvcnMvYm9vbGVhbi9ib29sZWFuLWRlY29yYXRvci1pbnRlcm5hbC5kYXRhJztcbmltcG9ydCB7IEN1c3RvbURlY29yYXRvckNvbmZpZ0ludGVybmFsIH0gZnJvbSAnLi4vZGVjb3JhdG9ycy9jdXN0b20vY3VzdG9tLWRlY29yYXRvci1pbnRlcm5hbC5kYXRhJztcbmltcG9ydCB7IERhdGVSYW5nZURhdGVEZWNvcmF0b3JDb25maWdJbnRlcm5hbCwgRGF0ZVRpbWVEYXRlRGVjb3JhdG9yQ29uZmlnSW50ZXJuYWwsIERlZmF1bHREYXRlRGVjb3JhdG9yQ29uZmlnSW50ZXJuYWwgfSBmcm9tICcuLi9kZWNvcmF0b3JzL2RhdGUvZGF0ZS1kZWNvcmF0b3ItaW50ZXJuYWwuZGF0YSc7XG5pbXBvcnQgeyBEYXRlUmFuZ2UgfSBmcm9tICcuLi9kZWNvcmF0b3JzL2RhdGUvZGF0ZS1kZWNvcmF0b3IuZGF0YSc7XG5pbXBvcnQgeyBEZWZhdWx0RmlsZURlY29yYXRvckNvbmZpZ0ludGVybmFsIH0gZnJvbSAnLi4vZGVjb3JhdG9ycy9maWxlL2ZpbGUtZGVjb3JhdG9yLWludGVybmFsLmRhdGEnO1xuaW1wb3J0IHsgRmlsZURhdGEgfSBmcm9tICcuLi9kZWNvcmF0b3JzL2ZpbGUvZmlsZS1kZWNvcmF0b3IuZGF0YSc7XG5pbXBvcnQgeyBEZWZhdWx0TnVtYmVyRGVjb3JhdG9yQ29uZmlnSW50ZXJuYWwgfSBmcm9tICcuLi9kZWNvcmF0b3JzL251bWJlci9udW1iZXItZGVjb3JhdG9yLWludGVybmFsLmRhdGEnO1xuaW1wb3J0IHsgRGVmYXVsdE9iamVjdERlY29yYXRvckNvbmZpZ0ludGVybmFsIH0gZnJvbSAnLi4vZGVjb3JhdG9ycy9vYmplY3Qvb2JqZWN0LWRlY29yYXRvci1pbnRlcm5hbC5kYXRhJztcbmltcG9ydCB7IEF1dG9jb21wbGV0ZVN0cmluZ0RlY29yYXRvckNvbmZpZ0ludGVybmFsLCBEZWZhdWx0U3RyaW5nRGVjb3JhdG9yQ29uZmlnSW50ZXJuYWwsIFBhc3N3b3JkU3RyaW5nRGVjb3JhdG9yQ29uZmlnSW50ZXJuYWwsIFRleHRib3hTdHJpbmdEZWNvcmF0b3JDb25maWdJbnRlcm5hbCB9IGZyb20gJy4uL2RlY29yYXRvcnMvc3RyaW5nL3N0cmluZy1kZWNvcmF0b3ItaW50ZXJuYWwuZGF0YSc7XG5pbXBvcnQgeyBMb2Rhc2hVdGlsaXRpZXMgfSBmcm9tICcuLi9lbmNhcHN1bGF0aW9uL2xvZGFzaC51dGlsaXRpZXMnO1xuaW1wb3J0IHsgUmVmbGVjdFV0aWxpdGllcyB9IGZyb20gJy4uL2VuY2Fwc3VsYXRpb24vcmVmbGVjdC51dGlsaXRpZXMnO1xuXG4vKipcbiAqIEEgdmFsaWRhdGlvbiBlcnJvciByZXBvcnRlZCBieSB0aGUgdmFsaWRhdGlvbiB1dGlsaXRpZXMuXG4gKiBDb25zaXN0cyBvZiB0aGUgcHJvcGVydHkgbmFtZSB3aGVyZSB0aGUgZXJyb3Igb3JpZ2luYXRlZCBmcm9tIGFuZCBhIG1lc3NhZ2UuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVmFsaWRhdGlvbkVycm9yIHtcbiAgICAvKipcbiAgICAgKiBUaGUgcHJvcGVydHkgbmFtZSBvbiB3aGljaCB0aGUgZXJyb3Igb2NjdXJyZWQuIFRoaXMgaXMgdGhlIGRpc3BsYXlOYW1lIHZhbHVlLlxuICAgICAqL1xuICAgIHByb3BlcnR5OiBzdHJpbmcsXG4gICAgLyoqXG4gICAgICogVGhlIHZhbGlkYXRpb24gZXJyb3IgbWVzc2FnZS5cbiAgICAgKi9cbiAgICBtZXNzYWdlOiBzdHJpbmdcbn1cblxuLyoqXG4gKiBDb250YWlucyBIZWxwZXJNZXRob2RzIGFyb3VuZCBoYW5kbGluZyBWYWxpZGF0aW9uIG9mIGVudGl0aWVzIGFuZCBwcm9wZXJ0aWVzLlxuICovXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgVmFsaWRhdGlvblV0aWxpdGllcyB7XG4gICAgLyoqXG4gICAgICogQ2hlY2tzIGlmIHRoZSB2YWx1ZXMgb24gYW4gZW50aXR5IGFyZSB2YWxpZC5cbiAgICAgKiBBbHNvIGNoZWNrcyBhbGwgdGhlIHZhbGlkYXRvcnMgZ2l2ZW4gYnkgdGhlIG1ldGFkYXRhIChcInJlcXVpcmVkXCIsIFwibWF4TGVuZ3RoXCIgZXRjLikuXG4gICAgICogQHBhcmFtIGVudGl0eSAtIFRoZSBlbnRpdHkgdG8gdmFsaWRhdGUuXG4gICAgICogQHBhcmFtIGluamVjdG9yIC0gQW4gYW5ndWxhciBlbnZpcm9ubWVudCBpbmplY3Rvci5cbiAgICAgKiBAcGFyYW0gb21pdCAtIFdoZXRoZXIgdG8gY2hlY2sgZm9yIGNyZWF0aW5nIG9yIGVkaXRpbmcgdmFsaWRpdHkuXG4gICAgICogQHJldHVybnMgV2hldGhlciBvciBub3QgdGhlIGVudGl0eSBpcyB2YWxpZC5cbiAgICAgKi9cbiAgICBzdGF0aWMgYXN5bmMgaXNFbnRpdHlWYWxpZDxFbnRpdHlUeXBlIGV4dGVuZHMgQmFzZUVudGl0eVR5cGU8RW50aXR5VHlwZT4+KFxuICAgICAgICBlbnRpdHk6IEVudGl0eVR5cGUsXG4gICAgICAgIGluamVjdG9yOiBFbnZpcm9ubWVudEluamVjdG9yLFxuICAgICAgICBvbWl0PzogJ2NyZWF0ZScgfCAndXBkYXRlJ1xuICAgICk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgICAgICByZXR1cm4gKGF3YWl0IHRoaXMuZ2V0RW50aXR5VmFsaWRhdGlvbkVycm9ycyhlbnRpdHksIGluamVjdG9yLCBvbWl0KSkubGVuZ3RoID09PSAwO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEdldHMgYWxsIHZhbGlkYXRpb24gZXJyb3JzIG9uIHRoZSBnaXZlbiBlbnRpdHkuXG4gICAgICogQHBhcmFtIGVudGl0eSAtIFRoZSBlbnRpdHkgdG8gdmFsaWRhdGUuXG4gICAgICogQHBhcmFtIGluamVjdG9yIC0gQW4gYW5ndWxhciBlbnZpcm9ubWVudCBpbmplY3Rvci5cbiAgICAgKiBAcGFyYW0gb21pdCAtIFdoYXQga2V5cyBub3QgdG8gY2hlY2suIEFuIGVtcHR5IHZhbHVlIG1lYW5zIG5vIGtleXMgYXJlIG9taXR0ZWQuXG4gICAgICogQHJldHVybnMgQW4gYXJyYXkgb2YgdmFsaWRhdGlvbiBlcnJvcnMgb24gdGhlIHByb3ZpZGVkIGVudGl0eS5cbiAgICAgKi9cbiAgICBzdGF0aWMgYXN5bmMgZ2V0RW50aXR5VmFsaWRhdGlvbkVycm9yczxFbnRpdHlUeXBlIGV4dGVuZHMgQmFzZUVudGl0eVR5cGU8RW50aXR5VHlwZT4+KFxuICAgICAgICBlbnRpdHk6IEVudGl0eVR5cGUsXG4gICAgICAgIGluamVjdG9yOiBFbnZpcm9ubWVudEluamVjdG9yLFxuICAgICAgICBvbWl0PzogJ2NyZWF0ZScgfCAndXBkYXRlJ1xuICAgICk6IFByb21pc2U8VmFsaWRhdGlvbkVycm9yW10+IHtcbiAgICAgICAgY29uc3QgcmVzOiBWYWxpZGF0aW9uRXJyb3JbXSA9IFtdO1xuICAgICAgICBmb3IgKGNvbnN0IGtleSBvZiBFbnRpdHlVdGlsaXRpZXMua2V5c09mKGVudGl0eSwgaW5qZWN0b3IpKSB7XG4gICAgICAgICAgICBjb25zdCBlcnI6IFZhbGlkYXRpb25FcnJvciB8IHVuZGVmaW5lZCA9IGF3YWl0IHRoaXMuZ2V0UHJvcGVydHlWYWxpZGF0aW9uRXJyb3IoZW50aXR5LCBrZXksIG9taXQpO1xuICAgICAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgICAgICAgIHJlcy5wdXNoKGVycik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlcztcbiAgICB9XG5cbiAgICAvLyAvKipcbiAgICAvLyAgKiBDaGVja3MgaWYgYSBzaW5nbGUgcHJvcGVydHkgdmFsdWUgaXMgdmFsaWQuXG4gICAgLy8gICpcbiAgICAvLyAgKiBAcGFyYW0gZW50aXR5IC0gVGhlIGVudGl0eSB3aGVyZSB0aGUgcHJvcGVydHkgaXMgZnJvbS5cbiAgICAvLyAgKiBAcGFyYW0ga2V5IC0gVGhlIG5hbWUgb2YgdGhlIHByb3BlcnR5LlxuICAgIC8vICAqIEBwYXJhbSBvbWl0IC0gV2hldGhlciB0byBjaGVjayBpZiB0aGUgZ2l2ZW4gZW50aXR5IGlzIHZhbGlkIGZvciBjcmVhdGlvbiBvciB1cGRhdGluZy5cbiAgICAvLyAgKiBAcmV0dXJucyBXaGV0aGVyIG9yIG5vdCB0aGUgcHJvcGVydHkgdmFsdWUgaXMgdmFsaWQuXG4gICAgLy8gICogQHRocm93cyBUaHJvd3Mgd2hlbiBpdCBleHRyYWN0cyBhbiB1bmtub3duIG1ldGFkYXRhIHR5cGUuXG4gICAgLy8gICovXG4gICAgLy8gc3RhdGljIGlzUHJvcGVydHlWYWxpZDxFbnRpdHlUeXBlIGV4dGVuZHMgQmFzZUVudGl0eVR5cGU8RW50aXR5VHlwZT4+KFxuICAgIC8vICAgICBlbnRpdHk6IEVudGl0eVR5cGUsXG4gICAgLy8gICAgIGtleToga2V5b2YgRW50aXR5VHlwZSxcbiAgICAvLyAgICAgb21pdD86ICdjcmVhdGUnIHwgJ3VwZGF0ZSdcbiAgICAvLyApOiBib29sZWFuIHtcbiAgICAvLyAgICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWxpZGF0aW9uRXJyb3IoZW50aXR5LCBrZXksIG9taXQpID09IG51bGw7XG4gICAgLy8gfVxuXG4gICAgLyoqXG4gICAgICogVmFsaWRhdGVzIHRoZSBwcm9wZXJ0eSBvbiB0aGUgZ2l2ZW4gZW50aXR5IHdpdGggdGhlIGdpdmVuIGtleS5cbiAgICAgKiBAcGFyYW0gZW50aXR5IC0gVGhlIGVudGl0eSBvbiB3aGljaCB0aGUgcHJvcGVydHkgdG8gY2hlY2sgaXMuXG4gICAgICogQHBhcmFtIGtleSAtIFRoZSBrZXkgb2YgdGhlIHByb3BlcnR5IHRvIHZhbGlkYXRlLlxuICAgICAqIEBwYXJhbSBvbWl0IC0gV2hhdCBrZXlzIG5vdCB0byBjaGVjay4gQW4gZW1wdHkgdmFsdWUgbWVhbnMgbm8ga2V5cyBhcmUgb21pdHRlZC5cbiAgICAgKiBAcmV0dXJucyBBIHZhbGlkYXRpb24gZXJyb3Igd2hlbiB0aGUgcHJvcGVydHkgaXMgbm90IHZhbGlkLCB1bmRlZmluZWQgb3RoZXJ3aXNlLlxuICAgICAqIEB0aHJvd3MgV2hlbiB0aGUgdHlwZSBvZiB0aGUgcHJvcGVydHkgaXMgbm90IGtub3duLlxuICAgICAqL1xuICAgIHN0YXRpYyBhc3luYyBnZXRQcm9wZXJ0eVZhbGlkYXRpb25FcnJvcjxFbnRpdHlUeXBlIGV4dGVuZHMgQmFzZUVudGl0eVR5cGU8RW50aXR5VHlwZT4+KFxuICAgICAgICBlbnRpdHk6IEVudGl0eVR5cGUsXG4gICAgICAgIGtleToga2V5b2YgRW50aXR5VHlwZSxcbiAgICAgICAgb21pdD86ICdjcmVhdGUnIHwgJ3VwZGF0ZSdcbiAgICApOiBQcm9taXNlPFZhbGlkYXRpb25FcnJvciB8IHVuZGVmaW5lZD4ge1xuICAgICAgICBjb25zdCB0eXBlOiBEZWNvcmF0b3JUeXBlcyB8IHVuZGVmaW5lZCA9IEVudGl0eVV0aWxpdGllcy5nZXRQcm9wZXJ0eVR5cGUoZW50aXR5LCBrZXkpO1xuICAgICAgICBpZiAodHlwZSA9PSBudWxsKSB7XG4gICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IG1ldGFkYXRhOiBQcm9wZXJ0eURlY29yYXRvckNvbmZpZ0ludGVybmFsPHVua25vd24+IHwgdW5kZWZpbmVkID0gRW50aXR5VXRpbGl0aWVzLmdldFByb3BlcnR5TWV0YWRhdGEoZW50aXR5LCBrZXksIHR5cGUpO1xuXG4gICAgICAgIC8vIGlzdGFuYnVsIGlnbm9yZSBuZXh0XG4gICAgICAgIGlmIChtZXRhZGF0YSA9PSBudWxsKSB7XG4gICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKG1ldGFkYXRhLm9taXRGb3JDcmVhdGUgJiYgb21pdCA9PT0gJ2NyZWF0ZScpIHtcbiAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG1ldGFkYXRhLm9taXRGb3JVcGRhdGUgJiYgb21pdCA9PT0gJ3VwZGF0ZScpIHtcbiAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG1ldGFkYXRhLnJlcXVpcmVkKGVudGl0eSkgJiYgdHlwZSAhPT0gRGVjb3JhdG9yVHlwZXMuSEFTX01BTlkpIHtcbiAgICAgICAgICAgIGlmIChlbnRpdHlba2V5XSA9PSBudWxsIHx8IGVudGl0eVtrZXldID09PSAnJykge1xuICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgIHByb3BlcnR5OiBtZXRhZGF0YS5kaXNwbGF5TmFtZSxcbiAgICAgICAgICAgICAgICAgICAgbWVzc2FnZTogJ3JlcXVpcmVkJ1xuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFtZXRhZGF0YS5yZXF1aXJlZChlbnRpdHkpKSB7XG4gICAgICAgICAgICBpZiAoZW50aXR5W2tleV0gPT0gbnVsbCB8fCBlbnRpdHlba2V5XSA9PT0gJycpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHN3aXRjaCAodHlwZSkge1xuICAgICAgICAgICAgY2FzZSBEZWNvcmF0b3JUeXBlcy5CT09MRUFOX0RST1BET1dOOlxuICAgICAgICAgICAgICAgIC8vIEJlY2F1c2Ugb25seSB2YWxpZCB2YWx1ZXMgY2FuIGJlIHNlbGVjdGVkLCB0aGlzIGlzIGFsd2F5cyB0cnVlIHdoZW4gaXQgaGFzIGEgdmFsdWVcbiAgICAgICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICAgICAgY2FzZSBEZWNvcmF0b3JUeXBlcy5CT09MRUFOX0NIRUNLQk9YOlxuICAgICAgICAgICAgY2FzZSBEZWNvcmF0b3JUeXBlcy5CT09MRUFOX1RPR0dMRTpcbiAgICAgICAgICAgICAgICBjb25zdCBlbnRpdHlCb29sZWFuOiBib29sZWFuID0gZW50aXR5W2tleV0gYXMgYm9vbGVhbjtcbiAgICAgICAgICAgICAgICBjb25zdCBib29sZWFuTWV0YWRhdGE6IFRvZ2dsZUJvb2xlYW5EZWNvcmF0b3JDb25maWdJbnRlcm5hbCA9IG1ldGFkYXRhIGFzIFRvZ2dsZUJvb2xlYW5EZWNvcmF0b3JDb25maWdJbnRlcm5hbDtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRCb29sZWFuVmFsaWRhdGlvbkVycm9yKGVudGl0eSwgZW50aXR5Qm9vbGVhbiwgYm9vbGVhbk1ldGFkYXRhKTtcbiAgICAgICAgICAgIGNhc2UgRGVjb3JhdG9yVHlwZXMuU1RSSU5HX0RST1BET1dOOlxuICAgICAgICAgICAgICAgIC8vIEJlY2F1c2Ugb25seSB2YWxpZCB2YWx1ZXMgY2FuIGJlIHNlbGVjdGVkLCB0aGlzIGlzIGFsd2F5cyB0cnVlIHdoZW4gaXQgaGFzIGEgdmFsdWVcbiAgICAgICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICAgICAgY2FzZSBEZWNvcmF0b3JUeXBlcy5TVFJJTkc6XG4gICAgICAgICAgICAgICAgY29uc3QgZW50aXR5U3RyaW5nOiBzdHJpbmcgPSBlbnRpdHlba2V5XSBhcyBzdHJpbmc7XG4gICAgICAgICAgICAgICAgY29uc3Qgc3RyaW5nTWV0YWRhdGE6IERlZmF1bHRTdHJpbmdEZWNvcmF0b3JDb25maWdJbnRlcm5hbCA9IG1ldGFkYXRhIGFzIERlZmF1bHRTdHJpbmdEZWNvcmF0b3JDb25maWdJbnRlcm5hbDtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRTdHJpbmdWYWxpZGF0aW9uRXJyb3IoZW50aXR5U3RyaW5nLCBzdHJpbmdNZXRhZGF0YSk7XG4gICAgICAgICAgICBjYXNlIERlY29yYXRvclR5cGVzLlNUUklOR19BVVRPQ09NUExFVEU6XG4gICAgICAgICAgICAgICAgY29uc3QgZW50aXR5QXV0b2NvbXBsZXRlU3RyaW5nOiBzdHJpbmcgPSBlbnRpdHlba2V5XSBhcyBzdHJpbmc7XG4gICAgICAgICAgICAgICAgY29uc3Qgc3RyaW5nQXV0b2NvbXBsZXRlTWV0YWRhdGE6IEF1dG9jb21wbGV0ZVN0cmluZ0RlY29yYXRvckNvbmZpZ0ludGVybmFsID0gbWV0YWRhdGEgYXMgQXV0b2NvbXBsZXRlU3RyaW5nRGVjb3JhdG9yQ29uZmlnSW50ZXJuYWw7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0QXV0b2NvbXBsZXRlU3RyaW5nVmFsaWRhdGlvbkVycm9yKGVudGl0eSwgZW50aXR5QXV0b2NvbXBsZXRlU3RyaW5nLCBzdHJpbmdBdXRvY29tcGxldGVNZXRhZGF0YSk7XG4gICAgICAgICAgICBjYXNlIERlY29yYXRvclR5cGVzLlNUUklOR19URVhUQk9YOlxuICAgICAgICAgICAgICAgIGNvbnN0IGVudGl0eVRleHRib3g6IHN0cmluZyA9IGVudGl0eVtrZXldIGFzIHN0cmluZztcbiAgICAgICAgICAgICAgICBjb25zdCB0ZXh0Ym94TWV0YWRhdGE6IFRleHRib3hTdHJpbmdEZWNvcmF0b3JDb25maWdJbnRlcm5hbCA9IG1ldGFkYXRhIGFzIFRleHRib3hTdHJpbmdEZWNvcmF0b3JDb25maWdJbnRlcm5hbDtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRUZXh0Ym94VmFsaWRhdGlvbkVycm9yKGVudGl0eVRleHRib3gsIHRleHRib3hNZXRhZGF0YSk7XG4gICAgICAgICAgICBjYXNlIERlY29yYXRvclR5cGVzLlNUUklOR19QQVNTV09SRDpcbiAgICAgICAgICAgICAgICBjb25zdCBlbnRpdHlQYXNzd29yZDogc3RyaW5nID0gZW50aXR5W2tleV0gYXMgc3RyaW5nO1xuICAgICAgICAgICAgICAgIGNvbnN0IHBhc3N3b3JkTWV0YWRhdGE6IFBhc3N3b3JkU3RyaW5nRGVjb3JhdG9yQ29uZmlnSW50ZXJuYWwgPSBtZXRhZGF0YSBhcyBQYXNzd29yZFN0cmluZ0RlY29yYXRvckNvbmZpZ0ludGVybmFsO1xuICAgICAgICAgICAgICAgIGNvbnN0IGNvbmZpcm1QYXNzd29yZDogc3RyaW5nID0gUmVmbGVjdFV0aWxpdGllcy5nZXRNZXRhZGF0YShFbnRpdHlVdGlsaXRpZXMuQ09ORklSTV9QQVNTV09SRF9LRVksIGVudGl0eSwga2V5KSBhcyBzdHJpbmc7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0UGFzc3dvcmRWYWxpZGF0aW9uRXJyb3IoZW50aXR5UGFzc3dvcmQsIHBhc3N3b3JkTWV0YWRhdGEsIGNvbmZpcm1QYXNzd29yZCk7XG4gICAgICAgICAgICBjYXNlIERlY29yYXRvclR5cGVzLk5VTUJFUl9EUk9QRE9XTjpcbiAgICAgICAgICAgICAgICAvLyBCZWNhdXNlIG9ubHkgdmFsaWQgdmFsdWVzIGNhbiBiZSBzZWxlY3RlZCwgdGhpcyBpcyBhbHdheXMgdHJ1ZSB3aGVuIGl0IGhhcyBhIHZhbHVlXG4gICAgICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgICAgIGNhc2UgRGVjb3JhdG9yVHlwZXMuTlVNQkVSOlxuICAgICAgICAgICAgY2FzZSBEZWNvcmF0b3JUeXBlcy5OVU1CRVJfU0xJREVSOlxuICAgICAgICAgICAgICAgIGNvbnN0IGVudGl0eU51bWJlcjogbnVtYmVyID0gZW50aXR5W2tleV0gYXMgbnVtYmVyO1xuICAgICAgICAgICAgICAgIGNvbnN0IG51bWJlck1ldGFkYXRhOiBEZWZhdWx0TnVtYmVyRGVjb3JhdG9yQ29uZmlnSW50ZXJuYWwgPSBtZXRhZGF0YSBhcyBEZWZhdWx0TnVtYmVyRGVjb3JhdG9yQ29uZmlnSW50ZXJuYWw7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0TnVtYmVyVmFsaWRhdGlvbkVycm9yKGVudGl0eU51bWJlciwgbnVtYmVyTWV0YWRhdGEpO1xuICAgICAgICAgICAgY2FzZSBEZWNvcmF0b3JUeXBlcy5PQkpFQ1Q6XG4gICAgICAgICAgICAgICAgY29uc3QgZW50aXR5T2JqZWN0OiBFbnRpdHlUeXBlID0gZW50aXR5W2tleV0gYXMgRW50aXR5VHlwZTtcbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IHBhcmFtZXRlcktleSBpbiBlbnRpdHlPYmplY3QpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgdmFsdWU6IHVua25vd24gPSBlbnRpdHlPYmplY3RbcGFyYW1ldGVyS2V5XTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICAgICAgICAgIShtZXRhZGF0YSBhcyBEZWZhdWx0T2JqZWN0RGVjb3JhdG9yQ29uZmlnSW50ZXJuYWw8RW50aXR5VHlwZT4pLm9taXQuaW5jbHVkZXMocGFyYW1ldGVyS2V5KVxuICAgICAgICAgICAgICAgICAgICAgICAgJiYgISghbWV0YWRhdGEucmVxdWlyZWQoZW50aXR5KSAmJiAodmFsdWUgPT0gbnVsbCB8fCB2YWx1ZSA9PSAnJykpXG4gICAgICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZXJyOiBWYWxpZGF0aW9uRXJyb3IgfCB1bmRlZmluZWQgPSBhd2FpdCB0aGlzLmdldFByb3BlcnR5VmFsaWRhdGlvbkVycm9yKGVudGl0eU9iamVjdCwgcGFyYW1ldGVyS2V5LCBvbWl0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0eTogbWV0YWRhdGEuZGlzcGxheU5hbWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6IGAke2Vyci5wcm9wZXJ0eX0gaXMgaW52YWxpZDogJHtlcnIubWVzc2FnZX1gXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgRGVjb3JhdG9yVHlwZXMuT0JKRUNUX0RST1BET1dOOlxuICAgICAgICAgICAgICAgIC8vIEJlY2F1c2Ugb25seSB2YWxpZCB2YWx1ZXMgY2FuIGJlIHNlbGVjdGVkLCB0aGlzIGlzIGFsd2F5cyB0cnVlIHdoZW4gaXQgaGFzIGEgdmFsdWVcbiAgICAgICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICAgICAgY2FzZSBEZWNvcmF0b3JUeXBlcy5BUlJBWV9TVFJJTkdfQVVUT0NPTVBMRVRFX0NISVBTOlxuICAgICAgICAgICAgICAgIGNvbnN0IHN0cmluZ0F1dG9jb21wbGV0ZUFycmF5OiBzdHJpbmdbXSA9IGVudGl0eVtrZXldIGFzIHN0cmluZ1tdO1xuICAgICAgICAgICAgICAgIGNvbnN0IHN0cmluZ0F1dG9jb21wbGV0ZUFycmF5TWV0YWRhdGE6IEF1dG9jb21wbGV0ZVN0cmluZ0NoaXBzQXJyYXlEZWNvcmF0b3JDb25maWdJbnRlcm5hbCA9IG1ldGFkYXRhIGFzIEF1dG9jb21wbGV0ZVN0cmluZ0NoaXBzQXJyYXlEZWNvcmF0b3JDb25maWdJbnRlcm5hbDtcbiAgICAgICAgICAgICAgICByZXR1cm4gYXdhaXQgdGhpcy5nZXRBcnJheVN0cmluZ0F1dG9jb21wbGV0ZUNoaXBzVmFsaWRhdGlvbkVycm9yKGVudGl0eSwgc3RyaW5nQXV0b2NvbXBsZXRlQXJyYXlNZXRhZGF0YSwgc3RyaW5nQXV0b2NvbXBsZXRlQXJyYXkpO1xuICAgICAgICAgICAgY2FzZSBEZWNvcmF0b3JUeXBlcy5BUlJBWV9TVFJJTkdfQ0hJUFM6XG4gICAgICAgICAgICBjYXNlIERlY29yYXRvclR5cGVzLkFSUkFZX0RBVEU6XG4gICAgICAgICAgICBjYXNlIERlY29yYXRvclR5cGVzLkFSUkFZX0RBVEVfVElNRTpcbiAgICAgICAgICAgIGNhc2UgRGVjb3JhdG9yVHlwZXMuQVJSQVlfREFURV9SQU5HRTpcbiAgICAgICAgICAgIGNhc2UgRGVjb3JhdG9yVHlwZXMuQVJSQVk6XG4gICAgICAgICAgICAgICAgY29uc3QgZW50aXR5QXJyYXk6IHVua25vd25bXSA9IGVudGl0eVtrZXldIGFzIHVua25vd25bXTtcbiAgICAgICAgICAgICAgICBjb25zdCBhcnJheU1ldGFkYXRhOiBFbnRpdHlBcnJheURlY29yYXRvckNvbmZpZ0ludGVybmFsPEVudGl0eVR5cGU+ID0gbWV0YWRhdGEgYXMgRW50aXR5QXJyYXlEZWNvcmF0b3JDb25maWdJbnRlcm5hbDxFbnRpdHlUeXBlPjtcbiAgICAgICAgICAgICAgICBpZiAoYXJyYXlNZXRhZGF0YS5yZXF1aXJlZChlbnRpdHkpICYmICFlbnRpdHlBcnJheS5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHByb3BlcnR5OiBtZXRhZGF0YS5kaXNwbGF5TmFtZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6ICdubyBpdGVtcyBpbiBhcnJheSdcbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIERlY29yYXRvclR5cGVzLkRBVEU6XG4gICAgICAgICAgICAgICAgY29uc3QgZW50aXR5RGF0ZTogRGF0ZSA9IG5ldyBEYXRlKGVudGl0eVtrZXldIGFzIERhdGUpO1xuICAgICAgICAgICAgICAgIGNvbnN0IGRhdGVNZXRhZGF0YTogRGVmYXVsdERhdGVEZWNvcmF0b3JDb25maWdJbnRlcm5hbCA9IG1ldGFkYXRhIGFzIERlZmF1bHREYXRlRGVjb3JhdG9yQ29uZmlnSW50ZXJuYWw7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0RGF0ZVZhbGlkYXRpb25FcnJvcihlbnRpdHlEYXRlLCBkYXRlTWV0YWRhdGEpO1xuICAgICAgICAgICAgY2FzZSBEZWNvcmF0b3JUeXBlcy5EQVRFX1JBTkdFOlxuICAgICAgICAgICAgICAgIGNvbnN0IGVudGl0eURhdGVSYW5nZTogRGF0ZVJhbmdlID0gTG9kYXNoVXRpbGl0aWVzLmNsb25lRGVlcChlbnRpdHlba2V5XSBhcyBEYXRlUmFuZ2UpO1xuICAgICAgICAgICAgICAgIGNvbnN0IGRhdGVSYW5nZU1ldGFkYXRhOiBEYXRlUmFuZ2VEYXRlRGVjb3JhdG9yQ29uZmlnSW50ZXJuYWwgPSBtZXRhZGF0YSBhcyBEYXRlUmFuZ2VEYXRlRGVjb3JhdG9yQ29uZmlnSW50ZXJuYWw7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0RGF0ZVJhbmdlVmFsaWRhdGlvbkVycm9yKGVudGl0eSwgZW50aXR5RGF0ZVJhbmdlLCBkYXRlUmFuZ2VNZXRhZGF0YSk7XG4gICAgICAgICAgICBjYXNlIERlY29yYXRvclR5cGVzLkRBVEVfVElNRTpcbiAgICAgICAgICAgICAgICBjb25zdCBlbnRpdHlEYXRlVGltZTogRGF0ZSA9IG5ldyBEYXRlKGVudGl0eVtrZXldIGFzIERhdGUpO1xuICAgICAgICAgICAgICAgIGNvbnN0IGRhdGVUaW1lTWV0YWRhdGE6IERhdGVUaW1lRGF0ZURlY29yYXRvckNvbmZpZ0ludGVybmFsID0gbWV0YWRhdGEgYXMgRGF0ZVRpbWVEYXRlRGVjb3JhdG9yQ29uZmlnSW50ZXJuYWw7XG4gICAgICAgICAgICAgICAgY29uc3QgaGFzVGltZTogYm9vbGVhbiA9IFJlZmxlY3RVdGlsaXRpZXMuaGFzTWV0YWRhdGEoRW50aXR5VXRpbGl0aWVzLlRJTUVfS0VZLCBlbnRpdHksIGtleSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0RGF0ZVRpbWVWYWxpZGF0aW9uRXJyb3IoZW50aXR5RGF0ZVRpbWUsIGRhdGVUaW1lTWV0YWRhdGEsIGhhc1RpbWUpO1xuICAgICAgICAgICAgY2FzZSBEZWNvcmF0b3JUeXBlcy5GSUxFX0RFRkFVTFQ6XG4gICAgICAgICAgICBjYXNlIERlY29yYXRvclR5cGVzLkZJTEVfSU1BR0U6XG4gICAgICAgICAgICAgICAgY29uc3QgZW50aXR5RmlsZTogRmlsZURhdGEgfCBGaWxlRGF0YVtdID0gZW50aXR5W2tleV0gYXMgRmlsZURhdGEgfCBGaWxlRGF0YVtdO1xuICAgICAgICAgICAgICAgIGNvbnN0IGVudGl0eUZpbGVNZXRhZGF0YTogRGVmYXVsdEZpbGVEZWNvcmF0b3JDb25maWdJbnRlcm5hbCA9IG1ldGFkYXRhIGFzIERlZmF1bHRGaWxlRGVjb3JhdG9yQ29uZmlnSW50ZXJuYWw7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0RmlsZURhdGFWYWxpZGF0aW9uRXJyb3IoZW50aXR5RmlsZSwgZW50aXR5RmlsZU1ldGFkYXRhKTtcbiAgICAgICAgICAgIGNhc2UgRGVjb3JhdG9yVHlwZXMuUkVGRVJFTkNFU19NQU5ZOlxuICAgICAgICAgICAgY2FzZSBEZWNvcmF0b3JUeXBlcy5SRUZFUkVOQ0VTX09ORTpcbiAgICAgICAgICAgIGNhc2UgRGVjb3JhdG9yVHlwZXMuSEFTX01BTlk6XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIERlY29yYXRvclR5cGVzLkNVU1RPTTpcbiAgICAgICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgdHlwZXNjcmlwdC9uby1leHBsaWNpdC1hbnlcbiAgICAgICAgICAgICAgICBjb25zdCBjdXN0b21NZXRhZGF0YTogQ3VzdG9tRGVjb3JhdG9yQ29uZmlnSW50ZXJuYWw8RW50aXR5VHlwZSwgYW55LCBhbnksIGFueT4gPSBtZXRhZGF0YSBhcyBDdXN0b21EZWNvcmF0b3JDb25maWdJbnRlcm5hbDxFbnRpdHlUeXBlLCBhbnksIGFueSwgYW55PjtcbiAgICAgICAgICAgICAgICBpZiAoIWN1c3RvbU1ldGFkYXRhLmlzVmFsaWQoZW50aXR5W2tleV0sIG9taXQpKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0eTogbWV0YWRhdGEuZGlzcGxheU5hbWUsXG4gICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlOiAnaW52YWxpZCdcbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgQ291bGQgbm90IHZhbGlkYXRlIHRoZSBpbnB1dCBiZWNhdXNlIHRoZSBEZWNvcmF0b3JUeXBlICR7dHlwZX0gaXMgbm90IGtub3duYCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICBwcml2YXRlIHN0YXRpYyBhc3luYyBnZXRBcnJheVN0cmluZ0F1dG9jb21wbGV0ZUNoaXBzVmFsaWRhdGlvbkVycm9yPEVudGl0eVR5cGUgZXh0ZW5kcyBCYXNlRW50aXR5VHlwZTxFbnRpdHlUeXBlPj4oXG4gICAgICAgIGVudGl0eTogRW50aXR5VHlwZSxcbiAgICAgICAgbWV0YWRhdGE6IEF1dG9jb21wbGV0ZVN0cmluZ0NoaXBzQXJyYXlEZWNvcmF0b3JDb25maWdJbnRlcm5hbCxcbiAgICAgICAgc3RyaW5nQXV0b2NvbXBsZXRlQXJyYXk6IHN0cmluZ1tdXG4gICAgKTogUHJvbWlzZTxWYWxpZGF0aW9uRXJyb3IgfCB1bmRlZmluZWQ+IHtcbiAgICAgICAgaWYgKG1ldGFkYXRhLnJlcXVpcmVkKGVudGl0eSkgJiYgIXN0cmluZ0F1dG9jb21wbGV0ZUFycmF5Lmxlbmd0aCkge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICBwcm9wZXJ0eTogbWV0YWRhdGEuZGlzcGxheU5hbWUsXG4gICAgICAgICAgICAgICAgbWVzc2FnZTogJ25vIGl0ZW1zIGluIGFycmF5J1xuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobWV0YWRhdGEucmVzdHJpY3RUb09wdGlvbnMgPT0gdHJ1ZSkge1xuICAgICAgICAgICAgY29uc3QgYXV0b2NvbXBsZXRlVmFsdWVzOiBzdHJpbmdbXSA9IGF3YWl0IG1ldGFkYXRhLmF1dG9jb21wbGV0ZVZhbHVlcyhlbnRpdHkpO1xuICAgICAgICAgICAgZm9yIChjb25zdCB2YWx1ZSBvZiBzdHJpbmdBdXRvY29tcGxldGVBcnJheSkge1xuICAgICAgICAgICAgICAgIGlmICghYXV0b2NvbXBsZXRlVmFsdWVzLmluY2x1ZGVzKHZhbHVlKSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgcHJvcGVydHk6IG1ldGFkYXRhLmRpc3BsYXlOYW1lLFxuICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZTogYFRoZSB2YWx1ZSBcIiR7dmFsdWV9XCIgbmVlZHMgdG8gYmUgb25lIG9mIHRoZSBwcm92aWRlZCB2YWx1ZXNgXG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzdGF0aWMgZ2V0Qm9vbGVhblZhbGlkYXRpb25FcnJvcjxFbnRpdHlUeXBlIGV4dGVuZHMgQmFzZUVudGl0eVR5cGU8RW50aXR5VHlwZT4+KFxuICAgICAgICBlbnRpdHk6IEVudGl0eVR5cGUsXG4gICAgICAgIHZhbHVlOiBib29sZWFuLFxuICAgICAgICBtZXRhZGF0YTogVG9nZ2xlQm9vbGVhbkRlY29yYXRvckNvbmZpZ0ludGVybmFsXG4gICAgKTogVmFsaWRhdGlvbkVycm9yIHwgdW5kZWZpbmVkIHtcbiAgICAgICAgaWYgKG1ldGFkYXRhLnJlcXVpcmVkKGVudGl0eSkgJiYgIXZhbHVlKSB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIHByb3BlcnR5OiBtZXRhZGF0YS5kaXNwbGF5TmFtZSxcbiAgICAgICAgICAgICAgICBtZXNzYWdlOiAnbm90IHNlbGVjdGVkJ1xuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIHByaXZhdGUgc3RhdGljIGdldFN0cmluZ1ZhbGlkYXRpb25FcnJvcih2YWx1ZTogc3RyaW5nLCBtZXRhZGF0YTogRGVmYXVsdFN0cmluZ0RlY29yYXRvckNvbmZpZ0ludGVybmFsKTogVmFsaWRhdGlvbkVycm9yIHwgdW5kZWZpbmVkIHtcbiAgICAgICAgaWYgKG1ldGFkYXRhLm1heExlbmd0aCAmJiB2YWx1ZS5sZW5ndGggPiBtZXRhZGF0YS5tYXhMZW5ndGgpIHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgcHJvcGVydHk6IG1ldGFkYXRhLmRpc3BsYXlOYW1lLFxuICAgICAgICAgICAgICAgIG1lc3NhZ2U6IGBuZWVkcyB0byBiZSBzbWFsbGVyIHRoYW4gJHttZXRhZGF0YS5tYXhMZW5ndGh9IGNoYXJhY3RlcnNgXG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIGlmIChtZXRhZGF0YS5taW5MZW5ndGggJiYgdmFsdWUubGVuZ3RoIDwgbWV0YWRhdGEubWluTGVuZ3RoKSB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIHByb3BlcnR5OiBtZXRhZGF0YS5kaXNwbGF5TmFtZSxcbiAgICAgICAgICAgICAgICBtZXNzYWdlOiBgbmVlZHMgdG8gYmUgYmlnZ2VyIHRoYW4gJHttZXRhZGF0YS5taW5MZW5ndGh9IGNoYXJhY3RlcnNgXG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIGlmIChtZXRhZGF0YS5yZWdleCAmJiAhdmFsdWUubWF0Y2gobWV0YWRhdGEucmVnZXgpKSB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIHByb3BlcnR5OiBtZXRhZGF0YS5kaXNwbGF5TmFtZSxcbiAgICAgICAgICAgICAgICBtZXNzYWdlOiAnaW52YWxpZCdcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICBwcml2YXRlIHN0YXRpYyBhc3luYyBnZXRBdXRvY29tcGxldGVTdHJpbmdWYWxpZGF0aW9uRXJyb3I8RW50aXR5VHlwZSBleHRlbmRzIEJhc2VFbnRpdHlUeXBlPEVudGl0eVR5cGU+PihcbiAgICAgICAgZW50aXR5OiBFbnRpdHlUeXBlLFxuICAgICAgICB2YWx1ZTogc3RyaW5nLFxuICAgICAgICBtZXRhZGF0YTogQXV0b2NvbXBsZXRlU3RyaW5nRGVjb3JhdG9yQ29uZmlnSW50ZXJuYWxcbiAgICApOiBQcm9taXNlPFZhbGlkYXRpb25FcnJvciB8IHVuZGVmaW5lZD4ge1xuICAgICAgICBpZiAobWV0YWRhdGEubWF4TGVuZ3RoICYmIHZhbHVlLmxlbmd0aCA+IG1ldGFkYXRhLm1heExlbmd0aCkge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICBwcm9wZXJ0eTogbWV0YWRhdGEuZGlzcGxheU5hbWUsXG4gICAgICAgICAgICAgICAgbWVzc2FnZTogYG5lZWRzIHRvIGJlIHNtYWxsZXIgdGhhbiAke21ldGFkYXRhLm1heExlbmd0aH0gY2hhcmFjdGVyc2BcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG1ldGFkYXRhLm1pbkxlbmd0aCAmJiB2YWx1ZS5sZW5ndGggPCBtZXRhZGF0YS5taW5MZW5ndGgpIHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgcHJvcGVydHk6IG1ldGFkYXRhLmRpc3BsYXlOYW1lLFxuICAgICAgICAgICAgICAgIG1lc3NhZ2U6IGBuZWVkcyB0byBiZSBiaWdnZXIgdGhhbiAke21ldGFkYXRhLm1pbkxlbmd0aH0gY2hhcmFjdGVyc2BcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG1ldGFkYXRhLnJlZ2V4ICYmICF2YWx1ZS5tYXRjaChtZXRhZGF0YS5yZWdleCkpIHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgcHJvcGVydHk6IG1ldGFkYXRhLmRpc3BsYXlOYW1lLFxuICAgICAgICAgICAgICAgIG1lc3NhZ2U6ICdpbnZhbGlkJ1xuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobWV0YWRhdGEucmVzdHJpY3RUb09wdGlvbnMgPT0gdHJ1ZSAmJiAhKGF3YWl0IG1ldGFkYXRhLmF1dG9jb21wbGV0ZVZhbHVlcyhlbnRpdHkpKS5pbmNsdWRlcyh2YWx1ZSkpIHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgcHJvcGVydHk6IG1ldGFkYXRhLmRpc3BsYXlOYW1lLFxuICAgICAgICAgICAgICAgIG1lc3NhZ2U6ICdOZWVkcyB0byBiZSBvbmUgb2YgdGhlIHByb3ZpZGVkIHZhbHVlcydcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICBwcml2YXRlIHN0YXRpYyBnZXRUZXh0Ym94VmFsaWRhdGlvbkVycm9yKHZhbHVlOiBzdHJpbmcsIG1ldGFkYXRhOiBUZXh0Ym94U3RyaW5nRGVjb3JhdG9yQ29uZmlnSW50ZXJuYWwpOiBWYWxpZGF0aW9uRXJyb3IgfCB1bmRlZmluZWQge1xuICAgICAgICBpZiAobWV0YWRhdGEubWF4TGVuZ3RoICYmIHZhbHVlLmxlbmd0aCA+IG1ldGFkYXRhLm1heExlbmd0aCkge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICBwcm9wZXJ0eTogbWV0YWRhdGEuZGlzcGxheU5hbWUsXG4gICAgICAgICAgICAgICAgbWVzc2FnZTogYG5lZWRzIHRvIGJlIHNtYWxsZXIgdGhhbiAke21ldGFkYXRhLm1heExlbmd0aH0gY2hhcmFjdGVyc2BcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG1ldGFkYXRhLm1pbkxlbmd0aCAmJiB2YWx1ZS5sZW5ndGggPCBtZXRhZGF0YS5taW5MZW5ndGgpIHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgcHJvcGVydHk6IG1ldGFkYXRhLmRpc3BsYXlOYW1lLFxuICAgICAgICAgICAgICAgIG1lc3NhZ2U6IGBuZWVkcyB0byBiZSBiaWdnZXIgdGhhbiAke21ldGFkYXRhLm1pbkxlbmd0aH0gY2hhcmFjdGVyc2BcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICBwcml2YXRlIHN0YXRpYyBnZXRQYXNzd29yZFZhbGlkYXRpb25FcnJvcihcbiAgICAgICAgdmFsdWU6IHN0cmluZyxcbiAgICAgICAgbWV0YWRhdGE6IFBhc3N3b3JkU3RyaW5nRGVjb3JhdG9yQ29uZmlnSW50ZXJuYWwsXG4gICAgICAgIGNvbmZpcm1QYXNzd29yZDogc3RyaW5nXG4gICAgKTogVmFsaWRhdGlvbkVycm9yIHwgdW5kZWZpbmVkIHtcbiAgICAgICAgaWYgKHZhbHVlICE9PSBjb25maXJtUGFzc3dvcmQpIHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgcHJvcGVydHk6IG1ldGFkYXRhLmRpc3BsYXlOYW1lLFxuICAgICAgICAgICAgICAgIG1lc3NhZ2U6ICdwYXNzd29yZHMgbmVlZCB0byBtYXRjaCdcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG1ldGFkYXRhLm1heExlbmd0aCAmJiB2YWx1ZS5sZW5ndGggPiBtZXRhZGF0YS5tYXhMZW5ndGgpIHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgcHJvcGVydHk6IG1ldGFkYXRhLmRpc3BsYXlOYW1lLFxuICAgICAgICAgICAgICAgIG1lc3NhZ2U6IGBuZWVkcyB0byBiZSBzbWFsbGVyIHRoYW4gJHttZXRhZGF0YS5tYXhMZW5ndGh9IGNoYXJhY3RlcnNgXG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIGlmIChtZXRhZGF0YS5taW5MZW5ndGggJiYgdmFsdWUubGVuZ3RoIDwgbWV0YWRhdGEubWluTGVuZ3RoKSB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIHByb3BlcnR5OiBtZXRhZGF0YS5kaXNwbGF5TmFtZSxcbiAgICAgICAgICAgICAgICBtZXNzYWdlOiBgbmVlZHMgdG8gYmUgYmlnZ2VyIHRoYW4gJHttZXRhZGF0YS5taW5MZW5ndGh9IGNoYXJhY3RlcnNgXG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIGlmIChtZXRhZGF0YS5yZWdleCAmJiAhdmFsdWUubWF0Y2gobWV0YWRhdGEucmVnZXgpKSB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIHByb3BlcnR5OiBtZXRhZGF0YS5kaXNwbGF5TmFtZSxcbiAgICAgICAgICAgICAgICBtZXNzYWdlOiAnaW52YWxpZCdcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICBwcml2YXRlIHN0YXRpYyBnZXROdW1iZXJWYWxpZGF0aW9uRXJyb3IodmFsdWU6IG51bWJlciwgbWV0YWRhdGE6IERlZmF1bHROdW1iZXJEZWNvcmF0b3JDb25maWdJbnRlcm5hbCk6IFZhbGlkYXRpb25FcnJvciB8IHVuZGVmaW5lZCB7XG4gICAgICAgIGlmIChtZXRhZGF0YS5tYXggJiYgdmFsdWUgPiBtZXRhZGF0YS5tYXgpIHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgcHJvcGVydHk6IG1ldGFkYXRhLmRpc3BsYXlOYW1lLFxuICAgICAgICAgICAgICAgIG1lc3NhZ2U6IGBuZWVkcyB0byBiZSBzbWFsbGVyIHRoYW4gJHttZXRhZGF0YS5tYXh9YFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobWV0YWRhdGEubWluICYmIHZhbHVlIDwgbWV0YWRhdGEubWluKSB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIHByb3BlcnR5OiBtZXRhZGF0YS5kaXNwbGF5TmFtZSxcbiAgICAgICAgICAgICAgICBtZXNzYWdlOiBgbmVlZHMgdG8gYmUgYmlnZ2VyIHRoYW4gJHttZXRhZGF0YS5taW59YFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIHByaXZhdGUgc3RhdGljIGdldERhdGVWYWxpZGF0aW9uRXJyb3IodmFsdWU6IERhdGUsIG1ldGFkYXRhOiBEZWZhdWx0RGF0ZURlY29yYXRvckNvbmZpZ0ludGVybmFsKTogVmFsaWRhdGlvbkVycm9yIHwgdW5kZWZpbmVkIHtcbiAgICAgICAgaWYgKG1ldGFkYXRhLm1pbiAmJiB2YWx1ZS5nZXRUaW1lKCkgPCBtZXRhZGF0YS5taW4odmFsdWUpLmdldFRpbWUoKSkge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICBwcm9wZXJ0eTogbWV0YWRhdGEuZGlzcGxheU5hbWUsXG4gICAgICAgICAgICAgICAgbWVzc2FnZTogYG5lZWRzIHRvIGJlIGFmdGVyICR7Zm9ybWF0RGF0ZShtZXRhZGF0YS5taW4odmFsdWUpKX1gXG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIGlmIChtZXRhZGF0YS5tYXggJiYgdmFsdWUuZ2V0VGltZSgpID4gbWV0YWRhdGEubWF4KHZhbHVlKS5nZXRUaW1lKCkpIHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgcHJvcGVydHk6IG1ldGFkYXRhLmRpc3BsYXlOYW1lLFxuICAgICAgICAgICAgICAgIG1lc3NhZ2U6IGBuZWVkcyB0byBiZSBiZWZvcmUgJHtmb3JtYXREYXRlKG1ldGFkYXRhLm1heCh2YWx1ZSkpfWBcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG1ldGFkYXRhLmZpbHRlciAmJiAhbWV0YWRhdGEuZmlsdGVyKHZhbHVlKSkge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICBwcm9wZXJ0eTogbWV0YWRhdGEuZGlzcGxheU5hbWUsXG4gICAgICAgICAgICAgICAgbWVzc2FnZTogJ2ludmFsaWQnXG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzdGF0aWMgZ2V0RGF0ZVJhbmdlVmFsaWRhdGlvbkVycm9yPEVudGl0eVR5cGUgZXh0ZW5kcyBCYXNlRW50aXR5VHlwZTxFbnRpdHlUeXBlPj4oXG4gICAgICAgIGVudGl0eTogRW50aXR5VHlwZSxcbiAgICAgICAgdmFsdWU6IFBhcnRpYWw8RGF0ZVJhbmdlPixcbiAgICAgICAgbWV0YWRhdGE6IERhdGVSYW5nZURhdGVEZWNvcmF0b3JDb25maWdJbnRlcm5hbFxuICAgICk6IFZhbGlkYXRpb25FcnJvciB8IHVuZGVmaW5lZCB7XG4gICAgICAgIGlmIChtZXRhZGF0YS5yZXF1aXJlZChlbnRpdHkpKSB7XG4gICAgICAgICAgICBpZiAodmFsdWUuc3RhcnQgPT0gbnVsbCB8fCB2YWx1ZS5lbmQgPT0gbnVsbCB8fCB2YWx1ZS52YWx1ZXMgPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgIHByb3BlcnR5OiBtZXRhZGF0YS5kaXNwbGF5TmFtZSxcbiAgICAgICAgICAgICAgICAgICAgbWVzc2FnZTogJ3JlcXVpcmVkJ1xuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHZhbHVlLnN0YXJ0KSB7XG4gICAgICAgICAgICB2YWx1ZS5zdGFydCA9IG5ldyBEYXRlKHZhbHVlLnN0YXJ0KTtcbiAgICAgICAgICAgIGlmIChtZXRhZGF0YS5taW5TdGFydCAmJiB2YWx1ZS5zdGFydC5nZXRUaW1lKCkgPCBtZXRhZGF0YS5taW5TdGFydCh2YWx1ZS5zdGFydCkuZ2V0VGltZSgpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgcHJvcGVydHk6IG1ldGFkYXRhLmRpc3BsYXlOYW1lLFxuICAgICAgICAgICAgICAgICAgICBtZXNzYWdlOiBgc3RhcnQgZGF0ZSBuZWVkcyB0byBiZSBhZnRlciAke2Zvcm1hdERhdGUobWV0YWRhdGEubWluU3RhcnQodmFsdWUuc3RhcnQpKX1gXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChtZXRhZGF0YS5tYXhTdGFydCAmJiB2YWx1ZS5zdGFydC5nZXRUaW1lKCkgPiBtZXRhZGF0YS5tYXhTdGFydCh2YWx1ZS5zdGFydCkuZ2V0VGltZSgpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgcHJvcGVydHk6IG1ldGFkYXRhLmRpc3BsYXlOYW1lLFxuICAgICAgICAgICAgICAgICAgICBtZXNzYWdlOiBgc3RhcnQgZGF0ZSBuZWVkcyB0byBiZSBiZWZvcmUgJHtmb3JtYXREYXRlKG1ldGFkYXRhLm1heFN0YXJ0KHZhbHVlLnN0YXJ0KSl9YFxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAobWV0YWRhdGEuZmlsdGVyKSB7XG4gICAgICAgICAgICAgICAgaWYgKCFtZXRhZGF0YS5maWx0ZXIodmFsdWUuc3RhcnQpKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0eTogbWV0YWRhdGEuZGlzcGxheU5hbWUsXG4gICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlOiAnc3RhcnQgZGF0ZSBpbnZhbGlkJ1xuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh2YWx1ZS5lbmQpIHtcbiAgICAgICAgICAgIHZhbHVlLmVuZCA9IG5ldyBEYXRlKHZhbHVlLmVuZCk7XG4gICAgICAgICAgICBpZiAobWV0YWRhdGEubWluRW5kICYmIHZhbHVlLmVuZC5nZXRUaW1lKCkgPCBtZXRhZGF0YS5taW5FbmQodmFsdWUuZW5kKS5nZXRUaW1lKCkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0eTogbWV0YWRhdGEuZGlzcGxheU5hbWUsXG4gICAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6IGBlbmQgZGF0ZSBuZWVkcyB0byBiZSBhZnRlciAke2Zvcm1hdERhdGUobWV0YWRhdGEubWluRW5kKHZhbHVlLmVuZCkpfWBcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKG1ldGFkYXRhLm1heEVuZCAmJiB2YWx1ZS5lbmQuZ2V0VGltZSgpID4gbWV0YWRhdGEubWF4RW5kKHZhbHVlLmVuZCkuZ2V0VGltZSgpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgcHJvcGVydHk6IG1ldGFkYXRhLmRpc3BsYXlOYW1lLFxuICAgICAgICAgICAgICAgICAgICBtZXNzYWdlOiBgZW5kIGRhdGUgbmVlZHMgdG8gYmUgYmVmb3JlICR7Zm9ybWF0RGF0ZShtZXRhZGF0YS5tYXhFbmQodmFsdWUuZW5kKSl9YFxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAobWV0YWRhdGEuZmlsdGVyKSB7XG4gICAgICAgICAgICAgICAgaWYgKCFtZXRhZGF0YS5maWx0ZXIodmFsdWUuZW5kKSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgcHJvcGVydHk6IG1ldGFkYXRhLmRpc3BsYXlOYW1lLFxuICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZTogJ2VuZCBkYXRlIGludmFsaWQnXG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cblxuICAgICAgICBpZiAobWV0YWRhdGEuZmlsdGVyICYmIHZhbHVlLnZhbHVlcykge1xuICAgICAgICAgICAgZm9yIChjb25zdCBkYXRlIG9mIHZhbHVlLnZhbHVlcykge1xuICAgICAgICAgICAgICAgIGlmICghbWV0YWRhdGEuZmlsdGVyKGRhdGUpKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0eTogbWV0YWRhdGEuZGlzcGxheU5hbWUsXG4gICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlOiBgdmFsdWUgJHtmb3JtYXREYXRlKGRhdGUpfSBpbnZhbGlkYFxuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIHByaXZhdGUgc3RhdGljIGdldERhdGVUaW1lVmFsaWRhdGlvbkVycm9yKFxuICAgICAgICB2YWx1ZTogRGF0ZSxcbiAgICAgICAgbWV0YWRhdGE6IERhdGVUaW1lRGF0ZURlY29yYXRvckNvbmZpZ0ludGVybmFsLFxuICAgICAgICBoYXNUaW1lOiBib29sZWFuXG4gICAgKTogVmFsaWRhdGlvbkVycm9yIHwgdW5kZWZpbmVkIHtcbiAgICAgICAgaWYgKCFoYXNUaW1lKSB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIHByb3BlcnR5OiBtZXRhZGF0YS5kaXNwbGF5TmFtZSxcbiAgICAgICAgICAgICAgICBtZXNzYWdlOiAnbm8gdGltZSdcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG1ldGFkYXRhLm1pbkRhdGUgJiYgdmFsdWUuZ2V0VGltZSgpIDwgbWV0YWRhdGEubWluRGF0ZSh2YWx1ZSkuZ2V0VGltZSgpKSB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIHByb3BlcnR5OiBtZXRhZGF0YS5kaXNwbGF5TmFtZSxcbiAgICAgICAgICAgICAgICBtZXNzYWdlOiBgZGF0ZSBuZWVkcyB0byBiZSBhZnRlciAke2Zvcm1hdERhdGUobWV0YWRhdGEubWluRGF0ZSh2YWx1ZSkpfWBcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG1ldGFkYXRhLm1heERhdGUgJiYgdmFsdWUuZ2V0VGltZSgpID4gbWV0YWRhdGEubWF4RGF0ZSh2YWx1ZSkuZ2V0VGltZSgpKSB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIHByb3BlcnR5OiBtZXRhZGF0YS5kaXNwbGF5TmFtZSxcbiAgICAgICAgICAgICAgICBtZXNzYWdlOiBgZGF0ZSBuZWVkcyB0byBiZSBiZWZvcmUgJHtmb3JtYXREYXRlKG1ldGFkYXRhLm1heERhdGUodmFsdWUpKX1gXG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIGlmIChtZXRhZGF0YS5maWx0ZXJEYXRlICYmICFtZXRhZGF0YS5maWx0ZXJEYXRlKHZhbHVlKSkge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICBwcm9wZXJ0eTogbWV0YWRhdGEuZGlzcGxheU5hbWUsXG4gICAgICAgICAgICAgICAgbWVzc2FnZTogJ2ludmFsaWQgZGF0ZSdcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgdGltZTogVGltZSA9IERhdGVVdGlsaXRpZXMuZ2V0VGltZUZyb21EYXRlKHZhbHVlKSBhcyBUaW1lO1xuICAgICAgICBpZiAobWV0YWRhdGEubWluVGltZSkge1xuICAgICAgICAgICAgY29uc3QgbWluVGltZTogVGltZSA9IG1ldGFkYXRhLm1pblRpbWUodmFsdWUpO1xuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICEoXG4gICAgICAgICAgICAgICAgICAgIHRpbWUuaG91cnMgPiBtaW5UaW1lLmhvdXJzXG4gICAgICAgICAgICAgICAgICAgIHx8IChcbiAgICAgICAgICAgICAgICAgICAgICAgIHRpbWUuaG91cnMgPT09IG1pblRpbWUuaG91cnNcbiAgICAgICAgICAgICAgICAgICAgICAgICYmIHRpbWUubWludXRlcyA+PSBtaW5UaW1lLm1pbnV0ZXNcbiAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgIHByb3BlcnR5OiBtZXRhZGF0YS5kaXNwbGF5TmFtZSxcbiAgICAgICAgICAgICAgICAgICAgbWVzc2FnZTogYHRpbWUgbmVlZHMgdG8gYmUgYWZ0ZXIgJHttaW5UaW1lLmhvdXJzfToke21pblRpbWUubWludXRlc31gXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAobWV0YWRhdGEubWF4VGltZSkge1xuICAgICAgICAgICAgY29uc3QgbWF4VGltZTogVGltZSA9IG1ldGFkYXRhLm1heFRpbWUodmFsdWUpO1xuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICEoXG4gICAgICAgICAgICAgICAgICAgIHRpbWUuaG91cnMgPCBtYXhUaW1lLmhvdXJzXG4gICAgICAgICAgICAgICAgICAgIHx8IChcbiAgICAgICAgICAgICAgICAgICAgICAgIHRpbWUuaG91cnMgPT09IG1heFRpbWUuaG91cnNcbiAgICAgICAgICAgICAgICAgICAgICAgICYmIHRpbWUubWludXRlcyA8PSBtYXhUaW1lLm1pbnV0ZXNcbiAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgIHByb3BlcnR5OiBtZXRhZGF0YS5kaXNwbGF5TmFtZSxcbiAgICAgICAgICAgICAgICAgICAgbWVzc2FnZTogYHRpbWUgbmVlZHMgdG8gYmUgYmVmb3JlICR7bWF4VGltZS5ob3Vyc306JHttYXhUaW1lLm1pbnV0ZXN9YFxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG1ldGFkYXRhLmZpbHRlclRpbWUgJiYgIW1ldGFkYXRhLmZpbHRlclRpbWUodGltZSkpIHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgcHJvcGVydHk6IG1ldGFkYXRhLmRpc3BsYXlOYW1lLFxuICAgICAgICAgICAgICAgIG1lc3NhZ2U6ICdpbnZhbGlkIHRpbWUnXG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzdGF0aWMgZ2V0RmlsZURhdGFWYWxpZGF0aW9uRXJyb3IoXG4gICAgICAgIHZhbHVlOiBGaWxlRGF0YSB8IEZpbGVEYXRhW10sXG4gICAgICAgIG1ldGFkYXRhOiBEZWZhdWx0RmlsZURlY29yYXRvckNvbmZpZ0ludGVybmFsXG4gICAgKTogVmFsaWRhdGlvbkVycm9yIHwgdW5kZWZpbmVkIHtcbiAgICAgICAgY29uc3QgZmlsZXM6IEZpbGVEYXRhW10gPSBtZXRhZGF0YS5tdWx0aXBsZSA/IHZhbHVlIGFzIEZpbGVEYXRhW10gOiBbdmFsdWUgYXMgRmlsZURhdGFdO1xuICAgICAgICBsZXQgZmlsZVNpemVUb3RhbDogbnVtYmVyID0gMDtcbiAgICAgICAgZm9yIChjb25zdCBmaWxlIG9mIGZpbGVzKSB7XG4gICAgICAgICAgICBpZiAoIWZpbGUubmFtZSB8fCAhZmlsZS5maWxlICYmICFmaWxlLnVybCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgIHByb3BlcnR5OiBtZXRhZGF0YS5kaXNwbGF5TmFtZSxcbiAgICAgICAgICAgICAgICAgICAgbWVzc2FnZTogJ2ludmFsaWQnXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICghRmlsZVV0aWxpdGllcy5pc01pbWVUeXBlVmFsaWQoZmlsZS50eXBlLCBtZXRhZGF0YS5hbGxvd2VkTWltZVR5cGVzKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgIHByb3BlcnR5OiBtZXRhZGF0YS5kaXNwbGF5TmFtZSxcbiAgICAgICAgICAgICAgICAgICAgbWVzc2FnZTogYG1pbWV0eXBlIG5lZWRzIHRvIGJlIG9uZSBvZiAke21ldGFkYXRhLmFsbG93ZWRNaW1lVHlwZXN9YFxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoRmlsZVV0aWxpdGllcy50cmFuc2Zvcm1Ub01lZ2FCeXRlcyhmaWxlLnNpemUsICdCJykgPiBtZXRhZGF0YS5tYXhTaXplKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgcHJvcGVydHk6IG1ldGFkYXRhLmRpc3BsYXlOYW1lLFxuICAgICAgICAgICAgICAgICAgICBtZXNzYWdlOiBgZmlsZSBuZWVkcyB0byBiZSBzbWFsbGVyIHRoYW4gJHttZXRhZGF0YS5tYXhTaXplfSBNQmBcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZmlsZVNpemVUb3RhbCArPSBmaWxlLnNpemU7XG4gICAgICAgICAgICBpZiAoRmlsZVV0aWxpdGllcy50cmFuc2Zvcm1Ub01lZ2FCeXRlcyhmaWxlU2l6ZVRvdGFsLCAnQicpID4gbWV0YWRhdGEubWF4U2l6ZVRvdGFsKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgcHJvcGVydHk6IG1ldGFkYXRhLmRpc3BsYXlOYW1lLFxuICAgICAgICAgICAgICAgICAgICBtZXNzYWdlOiBgVGhlIHNpemUgb2YgYWxsIGZpbGVzIGNvbWJpbmVkIG5lZWRzIHRvIGJlIHNtYWxsZXIgdGhhbiAke21ldGFkYXRhLm1heFNpemVUb3RhbH1gXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbn1cblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGpzZG9jL3JlcXVpcmUtanNkb2NcbmZ1bmN0aW9uIHBhZFRvMkRpZ2l0cyhudW06IG51bWJlcik6IHN0cmluZyB7XG4gICAgcmV0dXJuIG51bS50b1N0cmluZygpLnBhZFN0YXJ0KDIsICcwJyk7XG59XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBqc2RvYy9yZXF1aXJlLWpzZG9jXG5mdW5jdGlvbiBmb3JtYXREYXRlKGRhdGU6IERhdGUpOiBzdHJpbmcge1xuICAgIHJldHVybiBbXG4gICAgICAgIHBhZFRvMkRpZ2l0cyhkYXRlLmdldERhdGUoKSksXG4gICAgICAgIHBhZFRvMkRpZ2l0cyhkYXRlLmdldE1vbnRoKCkgKyAxKSxcbiAgICAgICAgZGF0ZS5nZXRGdWxsWWVhcigpXG4gICAgXS5qb2luKCcvJyk7XG59Il19
|