@mediusinc/mng-commons 3.0.0-rc.4 → 3.0.0-rc.6
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/esm2022/index.mjs +3 -1
- package/esm2022/lib/api/utils/object-serializer.util.mjs +11 -4
- package/esm2022/lib/components/action/editor/action-editor.component.mjs +8 -7
- package/esm2022/lib/components/action/models/action-execution.model.mjs +14 -37
- package/esm2022/lib/components/form/autocomplete/autocomplete.component.mjs +7 -5
- package/esm2022/lib/components/form/dropdown/dropdown.component.mjs +7 -5
- package/esm2022/lib/components/form/editor/form-editor.component.mjs +9 -8
- package/esm2022/lib/components/form/formly/fields/formly-field-lookup-dialog/formly-field-lookup-dialog.component.mjs +3 -3
- package/esm2022/lib/components/form/formly/fields/formly-field-table-dialog-form/formly-field-table-dialog-form.component.mjs +6 -6
- package/esm2022/lib/components/form/formly/fields/formly-field-table-dialog-multiselect/formly-field-table-dialog-multiselect.component.mjs +3 -3
- package/esm2022/lib/descriptors/action/action.descriptor.mjs +9 -8
- package/esm2022/lib/descriptors/editor/editor.descriptor.mjs +3 -3
- package/esm2022/lib/descriptors/filter/filter.descriptor.mjs +7 -6
- package/esm2022/lib/descriptors/table/column.descriptor.mjs +3 -3
- package/esm2022/lib/descriptors/tableview/tableview.descriptor.mjs +3 -3
- package/esm2022/lib/error/error.handler.mjs +23 -0
- package/esm2022/lib/error/index.mjs +2 -0
- package/esm2022/lib/models/config.model.mjs +1 -1
- package/esm2022/lib/models/error.model.mjs +1 -1
- package/esm2022/lib/models/index.mjs +3 -2
- package/esm2022/lib/models/internal-error.model.mjs +30 -0
- package/esm2022/lib/models/log.model.mjs +10 -0
- package/esm2022/lib/pipes/json-path.pipe.mjs +8 -4
- package/esm2022/lib/provide-commons.mjs +16 -15
- package/esm2022/lib/router/route-builder.mjs +4 -4
- package/esm2022/lib/router/routes-builder.mjs +3 -3
- package/esm2022/lib/security/authorization.service.mjs +5 -4
- package/esm2022/lib/security/authorization.util.mjs +3 -3
- package/esm2022/lib/services/action-error-mapper.service.mjs +19 -0
- package/esm2022/lib/services/action-executor.service.mjs +23 -27
- package/esm2022/lib/services/commons.service.mjs +16 -25
- package/esm2022/lib/services/configuration.service.mjs +60 -30
- package/esm2022/lib/services/index.mjs +3 -2
- package/esm2022/lib/services/internal/commons-init.service.mjs +48 -23
- package/esm2022/lib/services/logger.service.mjs +123 -0
- package/esm2022/lib/services/providers/index.mjs +1 -2
- package/esm2022/lib/utils/action-data-provider.util.mjs +7 -7
- package/esm2022/lib/utils/notification.util.mjs +3 -2
- package/esm2022/lib/utils/object.util.mjs +32 -5
- package/esm2022/lib/utils/route.util.mjs +3 -3
- package/esm2022/lib/utils/string.util.mjs +2 -2
- package/esm2022/lib/utils/tableview.util.mjs +3 -3
- package/esm2022/lib/utils/type.util.mjs +5 -5
- package/fesm2022/mediusinc-mng-commons.mjs +2460 -2270
- package/fesm2022/mediusinc-mng-commons.mjs.map +1 -1
- package/index.d.ts +1 -0
- package/lib/api/utils/object-serializer.util.d.ts +1 -0
- package/lib/components/action/editor/action-editor.component.d.ts +1 -0
- package/lib/components/action/models/action-execution.model.d.ts +3 -2
- package/lib/components/form/autocomplete/autocomplete.component.d.ts +1 -0
- package/lib/components/form/dropdown/dropdown.component.d.ts +1 -0
- package/lib/components/form/editor/form-editor.component.d.ts +1 -0
- package/lib/descriptors/editor/field.descriptor.d.ts +2 -2
- package/lib/error/error.handler.d.ts +6 -0
- package/lib/error/index.d.ts +1 -0
- package/lib/models/config.model.d.ts +2 -1
- package/lib/models/error.model.d.ts +2 -1
- package/lib/models/index.d.ts +2 -1
- package/lib/models/{error-internal.model.d.ts → internal-error.model.d.ts} +3 -6
- package/lib/models/log.model.d.ts +34 -0
- package/lib/pipes/json-path.pipe.d.ts +1 -0
- package/lib/security/authorization.service.d.ts +1 -0
- package/lib/services/action-error-mapper.service.d.ts +11 -0
- package/lib/services/action-executor.service.d.ts +3 -3
- package/lib/services/commons.service.d.ts +9 -14
- package/lib/services/configuration.service.d.ts +13 -5
- package/lib/services/index.d.ts +2 -1
- package/lib/services/internal/commons-init.service.d.ts +7 -8
- package/lib/services/logger.service.d.ts +30 -0
- package/lib/services/providers/index.d.ts +0 -1
- package/lib/utils/object.util.d.ts +6 -4
- package/package.json +1 -1
- package/esm2022/lib/models/error-internal.model.mjs +0 -27
- package/esm2022/lib/services/error-mapper.service.mjs +0 -14
- package/esm2022/lib/services/providers/config-service.provider.mjs +0 -31
- package/lib/services/error-mapper.service.d.ts +0 -7
- package/lib/services/providers/config-service.provider.d.ts +0 -6
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { of } from 'rxjs';
|
|
2
2
|
import { LookupDataProvider } from '../../data-providers';
|
|
3
|
-
import {
|
|
3
|
+
import { MngInternalError } from '../../models';
|
|
4
|
+
import { MngLoggerService } from '../../services';
|
|
4
5
|
import { EnumUtil, ModelUtil, TypeUtil } from '../../utils';
|
|
5
6
|
import { FilterLookupTypeEnum, FilterMatchModeEnum, FilterTypeEnum } from '../types';
|
|
6
7
|
export class FilterDescriptor {
|
|
@@ -269,14 +270,14 @@ export class FilterLookupDescriptor extends FilterDescriptor {
|
|
|
269
270
|
this._defaultValueTo = filterValueTo;
|
|
270
271
|
this._defaultFilterMatchMode = filterMatchMode;
|
|
271
272
|
if (Array.isArray(filterValue) && !this.multiselect) {
|
|
272
|
-
throw new
|
|
273
|
+
throw new MngInternalError('Array default filter can only be used with a multiselect filter.', 'FilterDescriptor error');
|
|
273
274
|
}
|
|
274
275
|
if (filterMatchMode && this._matchModes && this._matchModes.indexOf(filterMatchMode) < 0) {
|
|
275
276
|
this._defaultFilterMatchMode = undefined;
|
|
276
|
-
|
|
277
|
+
MngLoggerService.get().debug(`WARNING: Default filter match mode '${filterMatchMode}' could not be assigned for property ${this._property}.`);
|
|
277
278
|
}
|
|
278
279
|
if ((Array.isArray(filterValue) && !this.multiselect) || (this.multiselect && !Array.isArray(filterValue))) {
|
|
279
|
-
throw new
|
|
280
|
+
throw new MngInternalError(`Default value not in correct format for property ${this._property}.`, 'FilterDescriptor error');
|
|
280
281
|
}
|
|
281
282
|
return this;
|
|
282
283
|
}
|
|
@@ -332,7 +333,7 @@ export class FilterLookupEnumDescriptor extends FilterLookupDescriptor {
|
|
|
332
333
|
return super.withMultiselect(multiselect);
|
|
333
334
|
}
|
|
334
335
|
withDefaultFilter() {
|
|
335
|
-
throw new
|
|
336
|
+
throw new MngInternalError(`withDefaultFilter on FilterLookupEnumDescriptor should not be used. Use withDefaultFilterEnum instead.`, 'FilterDescriptor error');
|
|
336
337
|
}
|
|
337
338
|
withDefaultFilterEnum(filterValue, filterValueTo, filterMatchMode) {
|
|
338
339
|
let defaultOptionValue;
|
|
@@ -376,4 +377,4 @@ export class FilterLookupEnumDescriptor extends FilterLookupDescriptor {
|
|
|
376
377
|
return field;
|
|
377
378
|
}
|
|
378
379
|
}
|
|
379
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsdGVyLmRlc2NyaXB0b3IuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvbGliL2Rlc2NyaXB0b3JzL2ZpbHRlci9maWx0ZXIuZGVzY3JpcHRvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFFQSxPQUFPLEVBQWEsRUFBRSxFQUFDLE1BQU0sTUFBTSxDQUFDO0FBR3BDLE9BQU8sRUFBc0Isa0JBQWtCLEVBQUMsTUFBTSxzQkFBc0IsQ0FBQztBQUM3RSxPQUFPLEVBQVksZ0JBQWdCLEVBQUMsTUFBTSxjQUFjLENBQUM7QUFFekQsT0FBTyxFQUFDLFFBQVEsRUFBRSxTQUFTLEVBQUUsUUFBUSxFQUFDLE1BQU0sYUFBYSxDQUFDO0FBRTFELE9BQU8sRUFBQyxvQkFBb0IsRUFBRSxtQkFBbUIsRUFBRSxjQUFjLEVBQUMsTUFBTSxVQUFVLENBQUM7QUFFbkYsTUFBTSxPQUFPLGdCQUFnQjtJQTZCekIsWUFBWSxRQUFnQjtRQTNCbEIsZ0JBQVcsR0FBRyxjQUFjLENBQUMsTUFBTSxDQUFDO1FBRXBDLHFCQUFnQixHQUFHLEtBQUssQ0FBQztRQUt6QixnQkFBVyxHQUFvQixJQUFJLENBQUM7UUFLcEMsdUJBQWtCLEdBQUcsSUFBSSxDQUFDO1FBSTFCLHdCQUFtQixHQUFHLEtBQUssQ0FBQztRQUM1QixpQ0FBNEIsR0FBYSxTQUFTLENBQUM7UUFDbkQsMEJBQXFCLEdBQWEsU0FBUyxDQUFDO1FBQzVDLDZCQUF3QixHQUFhLFNBQVMsQ0FBQztRQUcvQyxlQUFVLEdBQUcsRUFBRSxDQUFDO1FBQ2hCLHFCQUFnQixHQUFHLEVBQUUsQ0FBQztRQUN0QixpQkFBWSxHQUFrQixJQUFJLENBQUM7UUFDbkMsb0JBQWUsR0FBa0IsSUFBSSxDQUFDO1FBRzVDLElBQUksQ0FBQyxTQUFTLEdBQUcsUUFBUSxDQUFDO0lBQzlCLENBQUM7SUFFRCxJQUFXLFVBQVU7UUFDakIsT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDO0lBQzVCLENB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SSxDQUFDLFNBQVMsRUFBRSxJQUFJLENBQUMsU0FBUyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBQ2pGLElBQUksQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDekIsT0FBTyxLQUFLLENBQUM7SUFDakIsQ0FBQztDQUNKIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtUeXBlfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuaW1wb3J0IHtPYnNlcnZhYmxlLCBvZn0gZnJvbSAncnhqcyc7XG5cbmltcG9ydCB7TWVkaXVzUXVlcnlQYXJhbX0gZnJvbSAnLi4vLi4vYXBpL21vZGVscyc7XG5pbXBvcnQge0lMb29rdXBEYXRhUHJvdmlkZXIsIExvb2t1cERhdGFQcm92aWRlcn0gZnJvbSAnLi4vLi4vZGF0YS1wcm92aWRlcnMnO1xuaW1wb3J0IHtFbnVtVmFsdWUsIE1uZ0Vycm9ySW50ZXJuYWx9IGZyb20gJy4uLy4uL21vZGVscyc7XG5pbXBvcnQge0NsYXNzVHlwZSwgRW51bUNvbnN0YW50VHlwZSwgRW51bVR5cGV9IGZyb20gJy4uLy4uL3R5cGVzJztcbmltcG9ydCB7RW51bVV0aWwsIE1vZGVsVXRpbCwgVHlwZVV0aWx9IGZyb20gJy4uLy4uL3V0aWxzJztcbmltcG9ydCB7SUxvb2t1cERlc2NyaXB0b3J9IGZyb20gJy4uL2ludGVyZmFjZXMnO1xuaW1wb3J0IHtGaWx0ZXJMb29rdXBUeXBlRW51bSwgRmlsdGVyTWF0Y2hNb2RlRW51bSwgRmlsdGVyVHlwZUVudW19IGZyb20gJy4uL3R5cGVzJztcblxuZXhwb3J0IGNsYXNzIEZpbHRlckRlc2NyaXB0b3I8VD4ge1xuICAgIHByb3RlY3RlZCByZWFkb25seSBfcHJvcGVydHk6IHN0cmluZztcbiAgICBwcm90ZWN0ZWQgX2ZpbHRlclR5cGUgPSBGaWx0ZXJUeXBlRW51bS5TdHJpbmc7XG4gICAgcHJvdGVjdGVkIF9maWx0ZXJQcm9wZXJ0eT86IHN0cmluZztcbiAgICBwcm90ZWN0ZWQgX2hhc0RlZmF1bHRWYWx1ZSA9IGZhbHNlO1xuICAgIHByb3RlY3RlZCBfZGVmYXVsdEZpbHRlck1hdGNoTW9kZT86IEZpbHRlck1hdGNoTW9kZUVudW07XG4gICAgcHJvdGVjdGVkIF9kZWZhdWx0VmFsdWU/OiBUIHwgVFtdO1xuICAgIHByb3RlY3RlZCBfZGVmYXVsdFZhbHVlVG8/OiBUO1xuXG4gICAgcHJvdGVjdGVkIF9tYXRjaE1vZGVzOiBzdHJpbmdbXSB8IG51bGwgPSBudWxsO1xuXG4gICAgLy8gbnVtYmVyIGZpbHRlciBzcGVjaWZpYyBwcm9wZXJ0aWVzXG4gICAgcHJvdGVjdGVkIF9udW1iZXJNaW5GcmFjdGlvbkRpZ2l0cz86IG51bWJlcjtcbiAgICBwcm90ZWN0ZWQgX251bWJlck1heEZyYWN0aW9uRGlnaXRzPzogbnVtYmVyO1xuICAgIHByb3RlY3RlZCBfbnVtYmVyVXNlR3JvdXBpbmcgPSB0cnVlO1xuXG4gICAgLy8gZGF0ZSBmaWx0ZXIgc3BlY2lmaWMgcHJvcGVydGllc1xuICAgIHByb3RlY3RlZCBfZGF0ZVBpY2tlckZvcm1hdD86IHN0cmluZztcbiAgICBwcm90ZWN0ZWQgX2RhdGVQaWNrZXJTaG93VGltZSA9IGZhbHNlO1xuICAgIHByb3RlY3RlZCBfZGF0ZVBpY2tlclZhbHVlV2l0aFRpbWV6b25lPzogYm9vbGVhbiA9IHVuZGVmaW5lZDtcbiAgICBwcm90ZWN0ZWQgX2RhdGVQaWNrZXJWYWx1ZUluVXRjPzogYm9vbGVhbiA9IHVuZGVmaW5lZDtcbiAgICBwcm90ZWN0ZWQgX2RhdGVQaWNrZXJWYWx1ZURhdGVPbmx5PzogYm9vbGVhbiA9IHVuZGVmaW5lZDtcblxuICAgIHByb3RlY3RlZCBfcGxhY2Vob2xkZXI/OiBzdHJpbmc7XG4gICAgcHJvdGVjdGVkIF9jbGFzc05hbWUgPSAnJztcbiAgICBwcm90ZWN0ZWQgX2NvbHVtbkNsYXNzTmFtZSA9ICcnO1xuICAgIHByb3RlY3RlZCBfY29sdW1uV2lkdGg6IG51bWJlciB8IG51bGwgPSBudWxsO1xuICAgIHByb3RlY3RlZCBfY29sdW1uTWluV2lkdGg6IG51bWJlciB8IG51bGwgPSBudWxsO1xuXG4gICAgY29uc3RydWN0b3IocHJvcGVydHk6IHN0cmluZykge1xuICAgICAgICB0aGlzLl9wcm9wZXJ0eSA9IHByb3BlcnR5O1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgZmlsdGVyVHlwZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2ZpbHRlclR5cGU7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBoYXNEZWZhdWx0VmFsdWUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9oYXNEZWZhdWx0VmFsdWU7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBkZWZhdWx0VmFsdWUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9kZWZhdWx0VmFsdWU7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBkZWZhdWx0VmFsdWVUbygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2RlZmF1bHRWYWx1ZVRvO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgZGVmYXVsdEZpbHRlck1hdGNoTW9kZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2RlZmF1bHRGaWx0ZXJNYXRjaE1vZGU7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBmaWx0ZXJQcm9wZXJ0eSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2ZpbHRlclByb3BlcnR5O1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgbWF0Y2hNb2RlcygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX21hdGNoTW9kZXM7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBudW1iZXJNaW5GcmFjdGlvbkRpZ2l0cygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX251bWJlck1pbkZyYWN0aW9uRGlnaXRzO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgbnVtYmVyTWF4RnJhY3Rpb25EaWdpdHMoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9udW1iZXJNYXhGcmFjdGlvbkRpZ2l0cztcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IG51bWJlclVzZUdyb3VwaW5nKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fbnVtYmVyVXNlR3JvdXBpbmc7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBkYXRlUGlja2VyRm9ybWF0KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fZGF0ZVBpY2tlckZvcm1hdDtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGRhdGVQaWNrZXJTaG93VGltZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2RhdGVQaWNrZXJTaG93VGltZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGRhdGVQaWNrZXJWYWx1ZUluVXRjKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fZGF0ZVBpY2tlclZhbHVlSW5VdGM7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBkYXRlUGlja2VyVmFsdWVXaXRoVGltZXpvbmUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9kYXRlUGlja2VyVmFsdWVXaXRoVGltZXpvbmU7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBkYXRlUGlja2VyVmFsdWVEYXRlT25seSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2RhdGVQaWNrZXJWYWx1ZURhdGVPbmx5O1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgcGxhY2Vob2xkZXIoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9wbGFjZWhvbGRlcjtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGNsYXNzTmFtZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2NsYXNzTmFtZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGNvbHVtbkNsYXNzTmFtZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2NvbHVtbkNsYXNzTmFtZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGNvbHVtbldpZHRoKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fY29sdW1uV2lkdGg7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBjb2x1bW5NaW5XaWR0aCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2NvbHVtbk1pbldpZHRoO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgcHJvcGVydHkoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9wcm9wZXJ0eTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXNGaWx0ZXJUeXBlKGZpbHRlclR5cGU6IEZpbHRlclR5cGVFbnVtKSB7XG4gICAgICAgIHRoaXMuX2ZpbHRlclR5cGUgPSBmaWx0ZXJUeXBlO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTZXRzIGRpZmZlcmVudCBmaWx0ZXIgcHJvcGVydHkgbmFtZSBpbnN0ZWFkIG9mIGRlZmF1bHQgcHJvcGVydHkuIFVzZSB0aGlzIGlmIEFQSSByZXF1aXJlcyBkaWZmZXJlbnQgcHJvcGVydHkgcHJvdmlkZWQgdG8gcGVyZm9ybSBjb3JyZWN0IGZpbHRlci5cbiAgICAgKiBAcGFyYW0gZmlsdGVyUHJvcGVydHlcbiAgICAgKi9cbiAgICBwdWJsaWMgd2l0aEZpbHRlclByb3BlcnR5KGZpbHRlclByb3BlcnR5OiBzdHJpbmcpOiB0aGlzIHtcbiAgICAgICAgdGhpcy5fZmlsdGVyUHJvcGVydHkgPSBmaWx0ZXJQcm9wZXJ0eTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgcHVibGljIHdpdGhEZWZhdWx0RmlsdGVyKGZpbHRlclZhbHVlOiBULCBmaWx0ZXJWYWx1ZVRvPzogVCwgZmlsdGVyTWF0Y2hNb2RlPzogRmlsdGVyTWF0Y2hNb2RlRW51bSk6IHRoaXMge1xuICAgICAgICB0aGlzLl9oYXNEZWZhdWx0VmFsdWUgPSB0cnVlO1xuICAgICAgICB0aGlzLl9kZWZhdWx0VmFsdWUgPSBmaWx0ZXJWYWx1ZTtcbiAgICAgICAgdGhpcy5fZGVmYXVsdFZhbHVlVG8gPSBmaWx0ZXJWYWx1ZVRvO1xuICAgICAgICB0aGlzLl9kZWZhdWx0RmlsdGVyTWF0Y2hNb2RlID0gZmlsdGVyTWF0Y2hNb2RlO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBwdWJsaWMgd2l0aE51bWJlckZyYWN0aW9ucyhtaW4/OiBudW1iZXIsIG1heD86IG51bWJlcikge1xuICAgICAgICB0aGlzLl9udW1iZXJNaW5GcmFjdGlvbkRpZ2l0cyA9IG1pbjtcbiAgICAgICAgdGhpcy5fbnVtYmVyTWF4RnJhY3Rpb25EaWdpdHMgPSBtYXg7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHB1YmxpYyB3aXRoTnVtYmVyR3JvdXBpbmcodXNlR3JvdXBpbmcgPSB0cnVlKTogdGhpcyB7XG4gICAgICAgIHRoaXMuX251bWJlclVzZUdyb3VwaW5nID0gdXNlR3JvdXBpbmc7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHB1YmxpYyB3aXRoRGF0ZUZvcm1hdChmb3JtYXQ/OiBzdHJpbmcsIHNob3dUaW1lID0gZmFsc2UpOiB0aGlzIHtcbiAgICAgICAgdGhpcy5fZGF0ZVBpY2tlckZvcm1hdCA9IGZvcm1hdDtcbiAgICAgICAgdGhpcy5fZGF0ZVBpY2tlclNob3dUaW1lID0gc2hvd1RpbWU7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHB1YmxpYyB3aXRoRGF0ZVZhbHVlKGluVXRjPzogYm9vbGVhbiwgd2l0aFRpbWV6b25lPzogYm9vbGVhbiwgZGF0ZU9ubHk/OiBib29sZWFuKTogdGhpcyB7XG4gICAgICAgIGlmICh0eXBlb2YgaW5VdGMgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICB0aGlzLl9kYXRlUGlja2VyVmFsdWVJblV0YyA9IGluVXRjO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0eXBlb2Ygd2l0aFRpbWV6b25lICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgdGhpcy5fZGF0ZVBpY2tlclZhbHVlV2l0aFRpbWV6b25lID0gd2l0aFRpbWV6b25lO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0eXBlb2YgZGF0ZU9ubHkgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICB0aGlzLl9kYXRlUGlja2VyVmFsdWVEYXRlT25seSA9IGRhdGVPbmx5O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHB1YmxpYyB3aXRoUGxhY2Vob2xkZXIocGxhY2Vob2xkZXI6IHN0cmluZyk6IHRoaXMge1xuICAgICAgICB0aGlzLl9wbGFjZWhvbGRlciA9IHBsYWNlaG9sZGVyO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBwdWJsaWMgd2l0aENsYXNzTmFtZShjbGFzc05hbWU6IHN0cmluZyk6IHRoaXMge1xuICAgICAgICB0aGlzLl9jbGFzc05hbWUgPSBjbGFzc05hbWU7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHB1YmxpYyB3aXRoQ29sdW1uQ2xhc3NOYW1lKGNsYXNzTmFtZTogc3RyaW5nKTogdGhpcyB7XG4gICAgICAgIHRoaXMuX2NvbHVtbkNsYXNzTmFtZSA9IGNsYXNzTmFtZTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgcHVibGljIHdpdGhDb2x1bW5XaWR0aCh3aWR0aD86IG51bWJlciwgbWluV2lkdGg/OiBudW1iZXIpOiB0aGlzIHtcbiAgICAgICAgdGhpcy5fY29sdW1uV2lkdGggPSB3aWR0aCA/PyBudWxsO1xuICAgICAgICB0aGlzLl9jb2x1bW5NaW5XaWR0aCA9IG1pbldpZHRoID8/IG51bGw7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHB1YmxpYyB3aXRoTWF0Y2hNb2RlcyhtYXRjaE1vZGVzOiBBcnJheTxGaWx0ZXJNYXRjaE1vZGVFbnVtPik6IHRoaXMge1xuICAgICAgICB0aGlzLl9tYXRjaE1vZGVzID0gbWF0Y2hNb2RlcztcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgcHVibGljIGNvcHkoKTogRmlsdGVyRGVzY3JpcHRvcjxUPiB7XG4gICAgICAgIGNvbnN0IGRlc2NyaXB0b3IgPSBuZXcgRmlsdGVyRGVzY3JpcHRvcjxUPih0aGlzLl9wcm9wZXJ0eSk7XG4gICAgICAgIHRoaXMuY29weUZpZWxkc1RvKGRlc2NyaXB0b3IpO1xuICAgICAgICByZXR1cm4gZGVzY3JpcHRvcjtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgY29weUZpZWxkc1RvKGRlc2NyaXB0b3I6IEZpbHRlckRlc2NyaXB0b3I8VD4pIHtcbiAgICAgICAgZGVzY3JpcHRvci5fZmlsdGVyVHlwZSA9IHRoaXMuX2ZpbHRlclR5cGU7XG4gICAgICAgIGRlc2NyaXB0b3IuX2ZpbHRlclByb3BlcnR5ID0gdGhpcy5fZmlsdGVyUHJvcGVydHk7XG4gICAgICAgIGRlc2NyaXB0b3IuX2hhc0RlZmF1bHRWYWx1ZSA9IHRoaXMuX2hhc0RlZmF1bHRWYWx1ZTtcbiAgICAgICAgZGVzY3JpcHRvci5fZGVmYXVsdFZhbHVlID0gdGhpcy5fZGVmYXVsdFZhbHVlO1xuICAgICAgICBkZXNjcmlwdG9yLl9kZWZhdWx0VmFsdWVUbyA9IHRoaXMuX2RlZmF1bHRWYWx1ZVRvO1xuICAgICAgICBkZXNjcmlwdG9yLl9kZWZhdWx0RmlsdGVyTWF0Y2hNb2RlID0gdGhpcy5fZGVmYXVsdEZpbHRlck1hdGNoTW9kZTtcbiAgICAgICAgZGVzY3JpcHRvci5fbnVtYmVyTWluRnJhY3Rpb25EaWdpdHMgPSB0aGlzLl9udW1iZXJNaW5GcmFjdGlvbkRpZ2l0cztcbiAgICAgICAgZGVzY3JpcHRvci5fbnVtYmVyTWF4RnJhY3Rpb25EaWdpdHMgPSB0aGlzLl9udW1iZXJNYXhGcmFjdGlvbkRpZ2l0cztcbiAgICAgICAgZGVzY3JpcHRvci5fbnVtYmVyVXNlR3JvdXBpbmcgPSB0aGlzLl9udW1iZXJVc2VHcm91cGluZztcbiAgICAgICAgZGVzY3JpcHRvci5fZGF0ZVBpY2tlckZvcm1hdCA9IHRoaXMuX2RhdGVQaWNrZXJGb3JtYXQ7XG4gICAgICAgIGRlc2NyaXB0b3IuX2RhdGVQaWNrZXJTaG93VGltZSA9IHRoaXMuX2RhdGVQaWNrZXJTaG93VGltZTtcbiAgICAgICAgZGVzY3JpcHRvci5fZGF0ZVBpY2tlclZhbHVlSW5VdGMgPSB0aGlzLl9kYXRlUGlja2VyVmFsdWVJblV0YztcbiAgICAgICAgZGVzY3JpcHRvci5fZGF0ZVBpY2tlclZhbHVlV2l0aFRpbWV6b25lID0gdGhpcy5fZGF0ZVBpY2tlclZhbHVlV2l0aFRpbWV6b25lO1xuICAgICAgICBkZXNjcmlwdG9yLl9kYXRlUGlja2VyVmFsdWVEYXRlT25seSA9IHRoaXMuX2RhdGVQaWNrZXJWYWx1ZURhdGVPbmx5O1xuICAgICAgICBkZXNjcmlwdG9yLl9wbGFjZWhvbGRlciA9IHRoaXMuX3BsYWNlaG9sZGVyO1xuICAgICAgICBkZXNjcmlwdG9yLl9jbGFzc05hbWUgPSB0aGlzLl9jbGFzc05hbWU7XG4gICAgICAgIGRlc2NyaXB0b3IuX2NvbHVtbldpZHRoID0gdGhpcy5fY29sdW1uV2lkdGg7XG4gICAgICAgIGRlc2NyaXB0b3IuX2NvbHVtbk1pbldpZHRoID0gdGhpcy5fY29sdW1uTWluV2lkdGg7XG4gICAgICAgIGRlc2NyaXB0b3IuX2NvbHVtbkNsYXNzTmFtZSA9IHRoaXMuX2NvbHVtbkNsYXNzTmFtZTtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBGaWx0ZXJMb29rdXBEZXNjcmlwdG9yPFQ+IGV4dGVuZHMgRmlsdGVyRGVzY3JpcHRvcjxUPiBpbXBsZW1lbnRzIElMb29rdXBEZXNjcmlwdG9yPFQ+IHtcbiAgICBwcm90ZWN0ZWQgcmVhZG9ubHkgX21vZGVsVHlwZTogQ2xhc3NUeXBlPFQ+IHwgbnVsbCA9IG51bGw7XG4gICAgcHJvdGVjdGVkIF9sb29rdXBUeXBlPzogRmlsdGVyTG9va3VwVHlwZUVudW0gPSBGaWx0ZXJMb29rdXBUeXBlRW51bS5Ecm9wZG93bjtcblxuICAgIHByb3RlY3RlZCBfZGF0YVByb3ZpZGVyPzogSUxvb2t1cERhdGFQcm92aWRlcjxULCBhbnk+O1xuICAgIHByb3RlY3RlZCBfaXRlbXNMYWJlbFByb3BlcnR5Pzogc3RyaW5nO1xuICAgIHByb3RlY3RlZCBfaXRlbXNMYWJlbFRyYW5zbGF0ZSA9IGZhbHNlO1xuICAgIHByb3RlY3RlZCBfaXRlbXNWYWx1ZVByb3BlcnR5Pzogc3RyaW5nO1xuICAgIHByb3RlY3RlZCBfbXVsdGlzZWxlY3QgPSBmYWxzZTtcblxuICAgIHByb3RlY3RlZCBfZHJvcGRvd25DbGFzc05hbWUgPSAnbW5nLWZpbHRlci1sb29rdXAtZHJvcGRvd24nO1xuXG4gICAgcHJvdGVjdGVkIF9hdXRvY29tcGxldGVPcGVuT25Gb2N1cyA9IGZhbHNlO1xuICAgIHByb3RlY3RlZCBfYXV0b2NvbXBsZXRlSW5saW5lU2VhcmNoID0gZmFsc2U7XG5cbiAgICBjb25zdHJ1Y3Rvcihwcm9wZXJ0eTogc3RyaW5nLCBtb2RlbFR5cGU6IENsYXNzVHlwZTxUPiB8IG51bGwpIHtcbiAgICAgICAgc3VwZXIocHJvcGVydHkpO1xuICAgICAgICB0aGlzLl9tb2RlbFR5cGUgPSBtb2RlbFR5cGU7XG4gICAgICAgIHRoaXMuX2ZpbHRlclR5cGUgPSBGaWx0ZXJUeXBlRW51bS5Mb29rdXA7XG4gICAgICAgIE1vZGVsVXRpbC50cnlTZXRMb29rdXBJdGVtc1Byb3BlcnRpZXModGhpcywgZmFsc2UpO1xuICAgICAgICBpZiAodGhpcy5faXRlbXNWYWx1ZVByb3BlcnR5KSB7XG4gICAgICAgICAgICB0aGlzLl9maWx0ZXJQcm9wZXJ0eSA9IGAke3Byb3BlcnR5fS4ke3RoaXMuX2l0ZW1zVmFsdWVQcm9wZXJ0eX1gO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBsb29rdXBUeXBlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fbG9va3VwVHlwZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGRhdGFQcm92aWRlcigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2RhdGFQcm92aWRlcjtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGl0ZW1zTGFiZWxQcm9wZXJ0eSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2l0ZW1zTGFiZWxQcm9wZXJ0eTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGl0ZW1zTGFiZWxUcmFuc2xhdGUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9pdGVtc0xhYmVsVHJhbnNsYXRlO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgaXRlbXNWYWx1ZVByb3BlcnR5KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5faXRlbXNWYWx1ZVByb3BlcnR5O1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgbXVsdGlzZWxlY3QoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9tdWx0aXNlbGVjdDtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGF1dG9jb21wbGV0ZU9wZW5PbkZvY3VzKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fYXV0b2NvbXBsZXRlT3Blbk9uRm9jdXM7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBhdXRvY29tcGxldGVJbmxpbmVTZWFyY2goKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9hdXRvY29tcGxldGVJbmxpbmVTZWFyY2g7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBkcm9wZG93bkNsYXNzTmFtZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2Ryb3Bkb3duQ2xhc3NOYW1lO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgbW9kZWxUeXBlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fbW9kZWxUeXBlO1xuICAgIH1cblxuICAgIHB1YmxpYyB3aXRoSXRlbXNMYWJlbFByb3BlcnR5KGl0ZW1zTGFiZWxQcm9wZXJ0eTogc3RyaW5nLCB0cmFuc2xhdGUgPSBmYWxzZSk6IHRoaXMge1xuICAgICAgICB0aGlzLl9pdGVtc0xhYmVsUHJvcGVydHkgPSBpdGVtc0xhYmVsUHJvcGVydHk7XG4gICAgICAgIHRoaXMuX2l0ZW1zTGFiZWxUcmFuc2xhdGUgPSB0cmFuc2xhdGU7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHB1YmxpYyB3aXRoSXRlbXNWYWx1ZVByb3BlcnR5KGl0ZW1zVmFsdWVQcm9wZXJ0eTogc3RyaW5nKTogdGhpcyB7XG4gICAgICAgIHRoaXMuX2l0ZW1zVmFsdWVQcm9wZXJ0eSA9IGl0ZW1zVmFsdWVQcm9wZXJ0eTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogTWV0aG9kIHdpbGwgc2V0IGBpdGVtc1ZhbHVlUHJvcGVydHlgLCBiZWNhdXNlIGRhdGFLZXlzIGFyZSBub3Qgc3VwcG9ydGVkIGhlcmUgYXMgZmlsdGVycyBuZWVkIGZpbmFsIHZhbHVlIHRvIHdvcmsgY29ycmVjdGx5LlxuICAgICAqIFVzZSBgd2l0aEl0ZW1zVmFsdWVQcm9wZXJ0eWAgaW5zdGVhZC5cbiAgICAgKiBAcGFyYW0gaXRlbXNWYWx1ZVByb3BlcnR5IEl0ZW0ncyB2YWx1ZSBwcm9wZXJ0eS5cbiAgICAgKi9cbiAgICBwdWJsaWMgd2l0aERhdGFLZXlQcm9wZXJ0eShpdGVtc1ZhbHVlUHJvcGVydHk6IHN0cmluZyk6IHRoaXMge1xuICAgICAgICB0aGlzLl9pdGVtc1ZhbHVlUHJvcGVydHkgPSBpdGVtc1ZhbHVlUHJvcGVydHk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHB1YmxpYyB3aXRoTG9va3VwPFM+KGxvb2t1cDogKHF1ZXJ5UGFyYW0/OiBNZWRpdXNRdWVyeVBhcmFtLCBzZXJ2aWNlPzogUywgc2VhcmNoPzogc3RyaW5nKSA9PiBPYnNlcnZhYmxlPEFycmF5PFQ+Piwgc2VydmljZVR5cGU/OiBUeXBlPFM+KTogdGhpcyB7XG4gICAgICAgIGNvbnN0IGRhdGFQcm92aWRlciA9IG5ldyBMb29rdXBEYXRhUHJvdmlkZXI8VCwgUz4odGhpcy5fbW9kZWxUeXBlKTtcbiAgICAgICAgaWYgKHNlcnZpY2VUeXBlKSB7XG4gICAgICAgICAgICBkYXRhUHJvdmlkZXIud2l0aFNlcnZpY2VUeXBlKHNlcnZpY2VUeXBlKTtcbiAgICAgICAgfVxuICAgICAgICBkYXRhUHJvdmlkZXIud2l0aExvb2t1cChsb29rdXApO1xuICAgICAgICB0aGlzLl9kYXRhUHJvdmlkZXIgPSBkYXRhUHJvdmlkZXI7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHB1YmxpYyB3aXRoTG9va3VwRGF0YVByb3ZpZGVyKGRhdGFQcm92aWRlcjogSUxvb2t1cERhdGFQcm92aWRlcjxULCBhbnk+KTogdGhpcyB7XG4gICAgICAgIHRoaXMuX2RhdGFQcm92aWRlciA9IGRhdGFQcm92aWRlcjtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgcHVibGljIHdpdGhNdWx0aXNlbGVjdChtdWx0aXNlbGVjdCA9IHRydWUpIHtcbiAgICAgICAgdGhpcy5fbXVsdGlzZWxlY3QgPSBtdWx0aXNlbGVjdDtcbiAgICAgICAgdGhpcy5fZGVmYXVsdEZpbHRlck1hdGNoTW9kZSA9IEZpbHRlck1hdGNoTW9kZUVudW0uSW47XG4gICAgICAgIHRoaXMud2l0aE1hdGNoTW9kZXMoW0ZpbHRlck1hdGNoTW9kZUVudW0uSW5dKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgcHVibGljIHdpdGhEcm9wZG93bkNsYXNzTmFtZShkcm9wZG93bkNsYXNzTmFtZTogc3RyaW5nKTogdGhpcyB7XG4gICAgICAgIHRoaXMuX2Ryb3Bkb3duQ2xhc3NOYW1lID0gZHJvcGRvd25DbGFzc05hbWU7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHB1YmxpYyBvdmVycmlkZSB3aXRoRGVmYXVsdEZpbHRlcihmaWx0ZXJWYWx1ZTogVCB8IFRbXSwgZmlsdGVyVmFsdWVUbz86IFQsIGZpbHRlck1hdGNoTW9kZT86IEZpbHRlck1hdGNoTW9kZUVudW0pOiB0aGlzIHtcbiAgICAgICAgdGhpcy5faGFzRGVmYXVsdFZhbHVlID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5fZGVmYXVsdFZhbHVlID0gZmlsdGVyVmFsdWU7XG4gICAgICAgIHRoaXMuX2RlZmF1bHRWYWx1ZVRvID0gZmlsdGVyVmFsdWVUbztcbiAgICAgICAgdGhpcy5fZGVmYXVsdEZpbHRlck1hdGNoTW9kZSA9IGZpbHRlck1hdGNoTW9kZTtcblxuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShmaWx0ZXJWYWx1ZSkgJiYgIXRoaXMubXVsdGlzZWxlY3QpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBNbmdFcnJvckludGVybmFsKCdBcnJheSBkZWZhdWx0IGZpbHRlciBjYW4gb25seSBiZSB1c2VkIHdpdGggYSBtdWx0aXNlbGVjdCBmaWx0ZXIuJywgJ0ZpbHRlckRlc2NyaXB0b3IgZXJyb3InKS5jb25zb2xlRXJyb3IoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChmaWx0ZXJNYXRjaE1vZGUgJiYgdGhpcy5fbWF0Y2hNb2RlcyAmJiB0aGlzLl9tYXRjaE1vZGVzLmluZGV4T2YoZmlsdGVyTWF0Y2hNb2RlKSA8IDApIHtcbiAgICAgICAgICAgIHRoaXMuX2RlZmF1bHRGaWx0ZXJNYXRjaE1vZGUgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICBjb25zb2xlLndhcm4oYERlZmF1bHQgZmlsdGVyIG1hdGNoIG1vZGUgJyR7ZmlsdGVyTWF0Y2hNb2RlfScgY291bGQgbm90IGJlIGFzc2lnbmVkIGZvciBwcm9wZXJ0eSAke3RoaXMuX3Byb3BlcnR5fS5gKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICgoQXJyYXkuaXNBcnJheShmaWx0ZXJWYWx1ZSkgJiYgIXRoaXMubXVsdGlzZWxlY3QpIHx8ICh0aGlzLm11bHRpc2VsZWN0ICYmICFBcnJheS5pc0FycmF5KGZpbHRlclZhbHVlKSkpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBNbmdFcnJvckludGVybmFsKGBEZWZhdWx0IHZhbHVlIG5vdCBpbiBjb3JyZWN0IGZvcm1hdCBmb3IgcHJvcGVydHkgJHt0aGlzLl9wcm9wZXJ0eX0uYCwgJ0ZpbHRlckRlc2NyaXB0b3IgZXJyb3InKS5jb25zb2xlRXJyb3IoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc0F1dG9jb21wbGV0ZShvcGVuT25Gb2N1cyA9IGZhbHNlLCBpbmxpbmVTZWFyY2ggPSBmYWxzZSk6IHRoaXMge1xuICAgICAgICB0aGlzLl9sb29rdXBUeXBlID0gRmlsdGVyTG9va3VwVHlwZUVudW0uQXV0b2NvbXBsZXRlO1xuICAgICAgICB0aGlzLl9hdXRvY29tcGxldGVPcGVuT25Gb2N1cyA9IG9wZW5PbkZvY3VzO1xuICAgICAgICB0aGlzLl9hdXRvY29tcGxldGVJbmxpbmVTZWFyY2ggPSBpbmxpbmVTZWFyY2g7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHB1YmxpYyBvdmVycmlkZSBjb3B5KCk6IEZpbHRlckxvb2t1cERlc2NyaXB0b3I8VD4ge1xuICAgICAgICBjb25zdCBkZXNjcmlwdG9yID0gbmV3IEZpbHRlckxvb2t1cERlc2NyaXB0b3I8VD4odGhpcy5fcHJvcGVydHksIHRoaXMuX21vZGVsVHlwZSk7XG4gICAgICAgIHRoaXMuY29weUZpZWxkc1RvKGRlc2NyaXB0b3IpO1xuICAgICAgICByZXR1cm4gZGVzY3JpcHRvcjtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgb3ZlcnJpZGUgY29weUZpZWxkc1RvKGZpbHRlcjogRmlsdGVyTG9va3VwRGVzY3JpcHRvcjxUPikge1xuICAgICAgICBzdXBlci5jb3B5RmllbGRzVG8oZmlsdGVyKTtcbiAgICAgICAgZmlsdGVyLl9kYXRhUHJvdmlkZXIgPSB0aGlzLl9kYXRhUHJvdmlkZXI7XG4gICAgICAgIGZpbHRlci5fbG9va3VwVHlwZSA9IHRoaXMuX2xvb2t1cFR5cGU7XG4gICAgICAgIGZpbHRlci5faXRlbXNMYWJlbFByb3BlcnR5ID0gdGhpcy5faXRlbXNMYWJlbFByb3BlcnR5O1xuICAgICAgICBmaWx0ZXIuX2l0ZW1zTGFiZWxUcmFuc2xhdGUgPSB0aGlzLl9pdGVtc0xhYmVsVHJhbnNsYXRlO1xuICAgICAgICBmaWx0ZXIuX2l0ZW1zVmFsdWVQcm9wZXJ0eSA9IHRoaXMuX2l0ZW1zVmFsdWVQcm9wZXJ0eTtcbiAgICAgICAgZmlsdGVyLl9tdWx0aXNlbGVjdCA9IHRoaXMuX211bHRpc2VsZWN0O1xuICAgICAgICBmaWx0ZXIuX2Ryb3Bkb3duQ2xhc3NOYW1lID0gdGhpcy5fZHJvcGRvd25DbGFzc05hbWU7XG4gICAgICAgIGZpbHRlci5fYXV0b2NvbXBsZXRlT3Blbk9uRm9jdXMgPSB0aGlzLl9hdXRvY29tcGxldGVPcGVuT25Gb2N1cztcbiAgICAgICAgZmlsdGVyLl9hdXRvY29tcGxldGVJbmxpbmVTZWFyY2ggPSB0aGlzLl9hdXRvY29tcGxldGVJbmxpbmVTZWFyY2g7XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgRmlsdGVyTG9va3VwRW51bURlc2NyaXB0b3IgZXh0ZW5kcyBGaWx0ZXJMb29rdXBEZXNjcmlwdG9yPEVudW1WYWx1ZTxzdHJpbmcgfCBudW1iZXI+PiB7XG4gICAgcHJpdmF0ZSByZWFkb25seSBfZW51bVR5cGU6IEVudW1UeXBlO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgX29wdGlvbkVudW1WYWx1ZXM6IEVudW1WYWx1ZTxzdHJpbmcgfCBudW1iZXI+W107XG4gICAgcHJpdmF0ZSByZWFkb25seSBfbmFtZUFzVmFsdWU6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAgIGNvbnN0cnVjdG9yKHByb3BlcnR5OiBzdHJpbmcsIGVudW1UeXBlOiBFbnVtVHlwZSwgb3B0aW9ucz86IEFycmF5PEVudW1Db25zdGFudFR5cGU+LCBuYW1lQXNWYWx1ZSA9IGZhbHNlLCBvcHRpb25zVGl0bGVQYXRoPzogc3RyaW5nIHwgbnVsbCkge1xuICAgICAgICBzdXBlcihwcm9wZXJ0eSwgbnVsbCk7XG4gICAgICAgIHRoaXMuX2VudW1UeXBlID0gZW51bVR5cGU7XG4gICAgICAgIHRoaXMuX25hbWVBc1ZhbHVlID0gbmFtZUFzVmFsdWU7XG4gICAgICAgIGlmICh0eXBlb2Ygb3B0aW9uc1RpdGxlUGF0aCA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgIG9wdGlvbnNUaXRsZVBhdGggPSBUeXBlVXRpbC5maW5kRW51bU5hbWUoZW51bVR5cGUpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX29wdGlvbkVudW1WYWx1ZXMgPSBBcnJheS5pc0FycmF5KG9wdGlvbnMpXG4gICAgICAgICAgICA/IEVudW1VdGlsLmZyb21WYWx1ZXNBc0VudW1WYWx1ZUFycmF5KGVudW1UeXBlLCBvcHRpb25zLCBuYW1lQXNWYWx1ZSwgb3B0aW9uc1RpdGxlUGF0aCA/PyB1bmRlZmluZWQpXG4gICAgICAgICAgICA6IEVudW1VdGlsLmZyb21Db25zdGFudHNBc0VudW1WYWx1ZUFycmF5KGVudW1UeXBlLCBuYW1lQXNWYWx1ZSwgb3B0aW9uc1RpdGxlUGF0aCA/PyB1bmRlZmluZWQpO1xuICAgICAgICBjb25zdCBkYXRhUHJvdmlkZXIgPSBuZXcgTG9va3VwRGF0YVByb3ZpZGVyPEVudW1WYWx1ZTxzdHJpbmcgfCBudW1iZXI+LCBhbnk+KG51bGwpLndpdGhMb29rdXAoKCkgPT4gb2YodGhpcy5fb3B0aW9uRW51bVZhbHVlcykpO1xuICAgICAgICB0aGlzLndpdGhMb29rdXBEYXRhUHJvdmlkZXIoZGF0YVByb3ZpZGVyKTtcbiAgICAgICAgdGhpcy53aXRoSXRlbXNMYWJlbFByb3BlcnR5KCd0aXRsZScsIG9wdGlvbnNUaXRsZVBhdGggIT09IG51bGwpO1xuICAgICAgICB0aGlzLndpdGhJdGVtc1ZhbHVlUHJvcGVydHkoJ3ZhbHVlJyk7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBlbnVtVHlwZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2VudW1UeXBlO1xuICAgIH1cblxuICAgIHB1YmxpYyBvdmVycmlkZSBhc0F1dG9jb21wbGV0ZShvcGVuT25Gb2N1cyA9IHRydWUpOiB0aGlzIHtcbiAgICAgICAgc3VwZXIuYXNBdXRvY29tcGxldGUob3Blbk9uRm9jdXMsIHRydWUpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBwdWJsaWMgd2l0aE11bHRpc2VsZWN0RW51bShtdWx0aXNlbGVjdCA9IHRydWUpOiBGaWx0ZXJMb29rdXBFbnVtRGVzY3JpcHRvciB7XG4gICAgICAgIHJldHVybiBzdXBlci53aXRoTXVsdGlzZWxlY3QobXVsdGlzZWxlY3QpIGFzIEZpbHRlckxvb2t1cEVudW1EZXNjcmlwdG9yO1xuICAgIH1cblxuICAgIHB1YmxpYyBvdmVycmlkZSB3aXRoRGVmYXVsdEZpbHRlcigpOiB0aGlzIHtcbiAgICAgICAgdGhyb3cgbmV3IE1uZ0Vycm9ySW50ZXJuYWwoXG4gICAgICAgICAgICBgd2l0aERlZmF1bHRGaWx0ZXIgb24gRmlsdGVyTG9va3VwRW51bURlc2NyaXB0b3Igc2hvdWxkIG5vdCBiZSB1c2VkLiBVc2Ugd2l0aERlZmF1bHRGaWx0ZXJFbnVtIGluc3RlYWQuYCxcbiAgICAgICAgICAgICdGaWx0ZXJEZXNjcmlwdG9yIGVycm9yJ1xuICAgICAgICApLmNvbnNvbGVFcnJvcigpO1xuICAgIH1cblxuICAgIHB1YmxpYyB3aXRoRGVmYXVsdEZpbHRlckVudW0oZmlsdGVyVmFsdWU6IEVudW1Db25zdGFudFR5cGUgfCBFbnVtQ29uc3RhbnRUeXBlW10sIGZpbHRlclZhbHVlVG8/OiBFbnVtQ29uc3RhbnRUeXBlLCBmaWx0ZXJNYXRjaE1vZGU/OiBGaWx0ZXJNYXRjaE1vZGVFbnVtKTogdGhpcyB7XG4gICAgICAgIGxldCBkZWZhdWx0T3B0aW9uVmFsdWU6IGFueSB8IGFueVtdO1xuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShmaWx0ZXJWYWx1ZSkpIHtcbiAgICAgICAgICAgIGRlZmF1bHRPcHRpb25WYWx1ZSA9IHRoaXMuX25hbWVBc1ZhbHVlID8gZmlsdGVyVmFsdWUubWFwKHZhbHVlID0+IEVudW1VdGlsLmdldENvbnN0YW50TmFtZSh0aGlzLl9lbnVtVHlwZSwgdmFsdWUpKSA6IGZpbHRlclZhbHVlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZGVmYXVsdE9wdGlvblZhbHVlID0gdGhpcy5fbmFtZUFzVmFsdWUgPyBFbnVtVXRpbC5nZXRDb25zdGFudE5hbWUodGhpcy5fZW51bVR5cGUsIGZpbHRlclZhbHVlKSA6IGZpbHRlclZhbHVlO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IGRlZmF1bHRPcHRpb25WYWx1ZVRvOiBhbnk7XG4gICAgICAgIGlmIChmaWx0ZXJWYWx1ZVRvKSB7XG4gICAgICAgICAgICBkZWZhdWx0T3B0aW9uVmFsdWVUbyA9IHRoaXMuX25hbWVBc1ZhbHVlID8gRW51bVV0aWwuZ2V0Q29uc3RhbnROYW1lKHRoaXMuX2VudW1UeXBlLCBmaWx0ZXJWYWx1ZVRvKSA6IGZpbHRlclZhbHVlVG87XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZGVmYXVsdE9wdGlvblZhbHVlKSB7XG4gICAgICAgICAgICBsZXQgb3B0aW9uOiBhbnkgfCBhbnlbXTtcbiAgICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KGRlZmF1bHRPcHRpb25WYWx1ZSkpIHtcbiAgICAgICAgICAgICAgICBvcHRpb24gPSBkZWZhdWx0T3B0aW9uVmFsdWUubWFwKHZhbHVlID0+IHRoaXMuX29wdGlvbkVudW1WYWx1ZXMuZmluZChvID0+IG8udmFsdWUgPT09IHZhbHVlKSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIG9wdGlvbiA9IHRoaXMuX29wdGlvbkVudW1WYWx1ZXMuZmluZChvID0+IG8udmFsdWUgPT09IGRlZmF1bHRPcHRpb25WYWx1ZSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IG9wdGlvblRvID0gZGVmYXVsdE9wdGlvblZhbHVlVG8gPyB0aGlzLl9vcHRpb25FbnVtVmFsdWVzLmZpbmQobyA9PiBvLnZhbHVlID09PSBkZWZhdWx0T3B0aW9uVmFsdWVUbykgOiB1bmRlZmluZWQ7XG5cbiAgICAgICAgICAgIGxldCBmaWx0ZXJWYWx1ZUZyb21BcnJheVRvID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgaWYgKG9wdGlvblRvKSB7XG4gICAgICAgICAgICAgICAgZmlsdGVyVmFsdWVGcm9tQXJyYXlUbyA9IHRoaXMuX2l0ZW1zVmFsdWVQcm9wZXJ0eSA/IG9wdGlvblRvW3RoaXMuX2l0ZW1zVmFsdWVQcm9wZXJ0eSBhcyBrZXlvZiBvYmplY3RdIDogb3B0aW9uVG87XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGxldCBmaWx0ZXJWYWx1ZUZyb21BcnJheTogYW55IHwgYW55W107XG4gICAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShvcHRpb24pKSB7XG4gICAgICAgICAgICAgICAgZmlsdGVyVmFsdWVGcm9tQXJyYXkgPSB0aGlzLl9pdGVtc1ZhbHVlUHJvcGVydHkgPyBvcHRpb24ubWFwKHZhbHVlID0+IHZhbHVlW3RoaXMuX2l0ZW1zVmFsdWVQcm9wZXJ0eSBhcyBrZXlvZiBvYmplY3RdKSA6IG9wdGlvbjtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgZmlsdGVyVmFsdWVGcm9tQXJyYXkgPSB0aGlzLl9pdGVtc1ZhbHVlUHJvcGVydHkgPyBvcHRpb25bdGhpcy5faXRlbXNWYWx1ZVByb3BlcnR5IGFzIGtleW9mIG9iamVjdF0gOiBvcHRpb247XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHN1cGVyLndpdGhEZWZhdWx0RmlsdGVyKGZpbHRlclZhbHVlRnJvbUFycmF5LCBmaWx0ZXJWYWx1ZUZyb21BcnJheVRvLCBmaWx0ZXJNYXRjaE1vZGUpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHB1YmxpYyBvdmVycmlkZSBjb3B5KCk6IEZpbHRlckxvb2t1cEVudW1EZXNjcmlwdG9yIHtcbiAgICAgICAgY29uc3QgZmllbGQgPSBuZXcgRmlsdGVyTG9va3VwRW51bURlc2NyaXB0b3IodGhpcy5fcHJvcGVydHksIHRoaXMuX2VudW1UeXBlLCBbXSk7XG4gICAgICAgIHRoaXMuY29weUZpZWxkc1RvKGZpZWxkKTtcbiAgICAgICAgcmV0dXJuIGZpZWxkO1xuICAgIH1cbn1cbiJdfQ==
|
|
380
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsdGVyLmRlc2NyaXB0b3IuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvbGliL2Rlc2NyaXB0b3JzL2ZpbHRlci9maWx0ZXIuZGVzY3JpcHRvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFFQSxPQUFPLEVBQWEsRUFBRSxFQUFDLE1BQU0sTUFBTSxDQUFDO0FBR3BDLE9BQU8sRUFBc0Isa0JBQWtCLEVBQUMsTUFBTSxzQkFBc0IsQ0FBQztBQUM3RSxPQUFPLEVBQVksZ0JBQWdCLEVBQUMsTUFBTSxjQUFjLENBQUM7QUFDekQsT0FBTyxFQUFDLGdCQUFnQixFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFFaEQsT0FBTyxFQUFDLFFBQVEsRUFBRSxTQUFTLEVBQUUsUUFBUSxFQUFDLE1BQU0sYUFBYSxDQUFDO0FBRTFELE9BQU8sRUFBQyxvQkFBb0IsRUFBRSxtQkFBbUIsRUFBRSxjQUFjLEVBQUMsTUFBTSxVQUFVLENBQUM7QUFFbkYsTUFBTSxPQUFPLGdCQUFnQjtJQTZCekIsWUFBWSxRQUFnQjtRQTNCbEIsZ0JBQVcsR0FBRyxjQUFjLENBQUMsTUFBTSxDQUFDO1FBRXBDLHFCQUFnQixHQUFHLEtBQUssQ0FBQztRQUt6QixnQkFBVyxHQUFvQixJQUFJLENBQUM7UUFLcEMsdUJBQWtCLEdBQUcsSUFBSSxDQUFDO1FBSTFCLHdCQUFtQixHQUFHLEtBQUssQ0FBQztRQUM1QixpQ0FBNEIsR0FBYSxTQUFTLENBQUM7UUFDbkQsMEJBQXFCLEdBQWEsU0FBUyxDQUFDO1FBQzVDLDZCQUF3QixHQUFhLFNBQVMsQ0FBQztRQUcvQyxlQUFVLEdBQUcsRUFBRSxDQUFDO1FBQ2hCLHFCQUFnQixHQUFHLEVBQUUsQ0FBQztRQUN0QixpQkFBWSxHQUFrQixJQUFJLENBQUM7UUFDbkMsb0JBQWUsR0FBa0IsSUFBSSxDQUFDO1FBRzVDLElBQUksQ0FBQyxTQUFTLEdBQUcsUUFBUSxDQUFDO0lBQzlCLENBQUM7SUFFRCxJQUFX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QkFBMEIsQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLElBQUksQ0FBQyxTQUFTLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFDakYsSUFBSSxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUN6QixPQUFPLEtBQUssQ0FBQztJQUNqQixDQUFDO0NBQ0oiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1R5cGV9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5pbXBvcnQge09ic2VydmFibGUsIG9mfSBmcm9tICdyeGpzJztcblxuaW1wb3J0IHtNZWRpdXNRdWVyeVBhcmFtfSBmcm9tICcuLi8uLi9hcGkvbW9kZWxzJztcbmltcG9ydCB7SUxvb2t1cERhdGFQcm92aWRlciwgTG9va3VwRGF0YVByb3ZpZGVyfSBmcm9tICcuLi8uLi9kYXRhLXByb3ZpZGVycyc7XG5pbXBvcnQge0VudW1WYWx1ZSwgTW5nSW50ZXJuYWxFcnJvcn0gZnJvbSAnLi4vLi4vbW9kZWxzJztcbmltcG9ydCB7TW5nTG9nZ2VyU2VydmljZX0gZnJvbSAnLi4vLi4vc2VydmljZXMnO1xuaW1wb3J0IHtDbGFzc1R5cGUsIEVudW1Db25zdGFudFR5cGUsIEVudW1UeXBlfSBmcm9tICcuLi8uLi90eXBlcyc7XG5pbXBvcnQge0VudW1VdGlsLCBNb2RlbFV0aWwsIFR5cGVVdGlsfSBmcm9tICcuLi8uLi91dGlscyc7XG5pbXBvcnQge0lMb29rdXBEZXNjcmlwdG9yfSBmcm9tICcuLi9pbnRlcmZhY2VzJztcbmltcG9ydCB7RmlsdGVyTG9va3VwVHlwZUVudW0sIEZpbHRlck1hdGNoTW9kZUVudW0sIEZpbHRlclR5cGVFbnVtfSBmcm9tICcuLi90eXBlcyc7XG5cbmV4cG9ydCBjbGFzcyBGaWx0ZXJEZXNjcmlwdG9yPFQ+IHtcbiAgICBwcm90ZWN0ZWQgcmVhZG9ubHkgX3Byb3BlcnR5OiBzdHJpbmc7XG4gICAgcHJvdGVjdGVkIF9maWx0ZXJUeXBlID0gRmlsdGVyVHlwZUVudW0uU3RyaW5nO1xuICAgIHByb3RlY3RlZCBfZmlsdGVyUHJvcGVydHk/OiBzdHJpbmc7XG4gICAgcHJvdGVjdGVkIF9oYXNEZWZhdWx0VmFsdWUgPSBmYWxzZTtcbiAgICBwcm90ZWN0ZWQgX2RlZmF1bHRGaWx0ZXJNYXRjaE1vZGU/OiBGaWx0ZXJNYXRjaE1vZGVFbnVtO1xuICAgIHByb3RlY3RlZCBfZGVmYXVsdFZhbHVlPzogVCB8IFRbXTtcbiAgICBwcm90ZWN0ZWQgX2RlZmF1bHRWYWx1ZVRvPzogVDtcblxuICAgIHByb3RlY3RlZCBfbWF0Y2hNb2Rlczogc3RyaW5nW10gfCBudWxsID0gbnVsbDtcblxuICAgIC8vIG51bWJlciBmaWx0ZXIgc3BlY2lmaWMgcHJvcGVydGllc1xuICAgIHByb3RlY3RlZCBfbnVtYmVyTWluRnJhY3Rpb25EaWdpdHM/OiBudW1iZXI7XG4gICAgcHJvdGVjdGVkIF9udW1iZXJNYXhGcmFjdGlvbkRpZ2l0cz86IG51bWJlcjtcbiAgICBwcm90ZWN0ZWQgX251bWJlclVzZUdyb3VwaW5nID0gdHJ1ZTtcblxuICAgIC8vIGRhdGUgZmlsdGVyIHNwZWNpZmljIHByb3BlcnRpZXNcbiAgICBwcm90ZWN0ZWQgX2RhdGVQaWNrZXJGb3JtYXQ/OiBzdHJpbmc7XG4gICAgcHJvdGVjdGVkIF9kYXRlUGlja2VyU2hvd1RpbWUgPSBmYWxzZTtcbiAgICBwcm90ZWN0ZWQgX2RhdGVQaWNrZXJWYWx1ZVdpdGhUaW1lem9uZT86IGJvb2xlYW4gPSB1bmRlZmluZWQ7XG4gICAgcHJvdGVjdGVkIF9kYXRlUGlja2VyVmFsdWVJblV0Yz86IGJvb2xlYW4gPSB1bmRlZmluZWQ7XG4gICAgcHJvdGVjdGVkIF9kYXRlUGlja2VyVmFsdWVEYXRlT25seT86IGJvb2xlYW4gPSB1bmRlZmluZWQ7XG5cbiAgICBwcm90ZWN0ZWQgX3BsYWNlaG9sZGVyPzogc3RyaW5nO1xuICAgIHByb3RlY3RlZCBfY2xhc3NOYW1lID0gJyc7XG4gICAgcHJvdGVjdGVkIF9jb2x1bW5DbGFzc05hbWUgPSAnJztcbiAgICBwcm90ZWN0ZWQgX2NvbHVtbldpZHRoOiBudW1iZXIgfCBudWxsID0gbnVsbDtcbiAgICBwcm90ZWN0ZWQgX2NvbHVtbk1pbldpZHRoOiBudW1iZXIgfCBudWxsID0gbnVsbDtcblxuICAgIGNvbnN0cnVjdG9yKHByb3BlcnR5OiBzdHJpbmcpIHtcbiAgICAgICAgdGhpcy5fcHJvcGVydHkgPSBwcm9wZXJ0eTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGZpbHRlclR5cGUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9maWx0ZXJUeXBlO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgaGFzRGVmYXVsdFZhbHVlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5faGFzRGVmYXVsdFZhbHVlO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgZGVmYXVsdFZhbHVlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fZGVmYXVsdFZhbHVlO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgZGVmYXVsdFZhbHVlVG8oKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9kZWZhdWx0VmFsdWVUbztcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGRlZmF1bHRGaWx0ZXJNYXRjaE1vZGUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9kZWZhdWx0RmlsdGVyTWF0Y2hNb2RlO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgZmlsdGVyUHJvcGVydHkoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9maWx0ZXJQcm9wZXJ0eTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IG1hdGNoTW9kZXMoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9tYXRjaE1vZGVzO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgbnVtYmVyTWluRnJhY3Rpb25EaWdpdHMoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9udW1iZXJNaW5GcmFjdGlvbkRpZ2l0cztcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IG51bWJlck1heEZyYWN0aW9uRGlnaXRzKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fbnVtYmVyTWF4RnJhY3Rpb25EaWdpdHM7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBudW1iZXJVc2VHcm91cGluZygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX251bWJlclVzZUdyb3VwaW5nO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgZGF0ZVBpY2tlckZvcm1hdCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2RhdGVQaWNrZXJGb3JtYXQ7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBkYXRlUGlja2VyU2hvd1RpbWUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9kYXRlUGlja2VyU2hvd1RpbWU7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBkYXRlUGlja2VyVmFsdWVJblV0YygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2RhdGVQaWNrZXJWYWx1ZUluVXRjO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgZGF0ZVBpY2tlclZhbHVlV2l0aFRpbWV6b25lKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fZGF0ZVBpY2tlclZhbHVlV2l0aFRpbWV6b25lO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgZGF0ZVBpY2tlclZhbHVlRGF0ZU9ubHkoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9kYXRlUGlja2VyVmFsdWVEYXRlT25seTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IHBsYWNlaG9sZGVyKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fcGxhY2Vob2xkZXI7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBjbGFzc05hbWUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9jbGFzc05hbWU7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBjb2x1bW5DbGFzc05hbWUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9jb2x1bW5DbGFzc05hbWU7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBjb2x1bW5XaWR0aCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2NvbHVtbldpZHRoO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgY29sdW1uTWluV2lkdGgoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9jb2x1bW5NaW5XaWR0aDtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IHByb3BlcnR5KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fcHJvcGVydHk7XG4gICAgfVxuXG4gICAgcHVibGljIGFzRmlsdGVyVHlwZShmaWx0ZXJUeXBlOiBGaWx0ZXJUeXBlRW51bSkge1xuICAgICAgICB0aGlzLl9maWx0ZXJUeXBlID0gZmlsdGVyVHlwZTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU2V0cyBkaWZmZXJlbnQgZmlsdGVyIHByb3BlcnR5IG5hbWUgaW5zdGVhZCBvZiBkZWZhdWx0IHByb3BlcnR5LiBVc2UgdGhpcyBpZiBBUEkgcmVxdWlyZXMgZGlmZmVyZW50IHByb3BlcnR5IHByb3ZpZGVkIHRvIHBlcmZvcm0gY29ycmVjdCBmaWx0ZXIuXG4gICAgICogQHBhcmFtIGZpbHRlclByb3BlcnR5XG4gICAgICovXG4gICAgcHVibGljIHdpdGhGaWx0ZXJQcm9wZXJ0eShmaWx0ZXJQcm9wZXJ0eTogc3RyaW5nKTogdGhpcyB7XG4gICAgICAgIHRoaXMuX2ZpbHRlclByb3BlcnR5ID0gZmlsdGVyUHJvcGVydHk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHB1YmxpYyB3aXRoRGVmYXVsdEZpbHRlcihmaWx0ZXJWYWx1ZTogVCwgZmlsdGVyVmFsdWVUbz86IFQsIGZpbHRlck1hdGNoTW9kZT86IEZpbHRlck1hdGNoTW9kZUVudW0pOiB0aGlzIHtcbiAgICAgICAgdGhpcy5faGFzRGVmYXVsdFZhbHVlID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5fZGVmYXVsdFZhbHVlID0gZmlsdGVyVmFsdWU7XG4gICAgICAgIHRoaXMuX2RlZmF1bHRWYWx1ZVRvID0gZmlsdGVyVmFsdWVUbztcbiAgICAgICAgdGhpcy5fZGVmYXVsdEZpbHRlck1hdGNoTW9kZSA9IGZpbHRlck1hdGNoTW9kZTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgcHVibGljIHdpdGhOdW1iZXJGcmFjdGlvbnMobWluPzogbnVtYmVyLCBtYXg/OiBudW1iZXIpIHtcbiAgICAgICAgdGhpcy5fbnVtYmVyTWluRnJhY3Rpb25EaWdpdHMgPSBtaW47XG4gICAgICAgIHRoaXMuX251bWJlck1heEZyYWN0aW9uRGlnaXRzID0gbWF4O1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBwdWJsaWMgd2l0aE51bWJlckdyb3VwaW5nKHVzZUdyb3VwaW5nID0gdHJ1ZSk6IHRoaXMge1xuICAgICAgICB0aGlzLl9udW1iZXJVc2VHcm91cGluZyA9IHVzZUdyb3VwaW5nO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBwdWJsaWMgd2l0aERhdGVGb3JtYXQoZm9ybWF0Pzogc3RyaW5nLCBzaG93VGltZSA9IGZhbHNlKTogdGhpcyB7XG4gICAgICAgIHRoaXMuX2RhdGVQaWNrZXJGb3JtYXQgPSBmb3JtYXQ7XG4gICAgICAgIHRoaXMuX2RhdGVQaWNrZXJTaG93VGltZSA9IHNob3dUaW1lO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBwdWJsaWMgd2l0aERhdGVWYWx1ZShpblV0Yz86IGJvb2xlYW4sIHdpdGhUaW1lem9uZT86IGJvb2xlYW4sIGRhdGVPbmx5PzogYm9vbGVhbik6IHRoaXMge1xuICAgICAgICBpZiAodHlwZW9mIGluVXRjICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgdGhpcy5fZGF0ZVBpY2tlclZhbHVlSW5VdGMgPSBpblV0YztcbiAgICAgICAgfVxuICAgICAgICBpZiAodHlwZW9mIHdpdGhUaW1lem9uZSAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgIHRoaXMuX2RhdGVQaWNrZXJWYWx1ZVdpdGhUaW1lem9uZSA9IHdpdGhUaW1lem9uZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodHlwZW9mIGRhdGVPbmx5ICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgdGhpcy5fZGF0ZVBpY2tlclZhbHVlRGF0ZU9ubHkgPSBkYXRlT25seTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBwdWJsaWMgd2l0aFBsYWNlaG9sZGVyKHBsYWNlaG9sZGVyOiBzdHJpbmcpOiB0aGlzIHtcbiAgICAgICAgdGhpcy5fcGxhY2Vob2xkZXIgPSBwbGFjZWhvbGRlcjtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgcHVibGljIHdpdGhDbGFzc05hbWUoY2xhc3NOYW1lOiBzdHJpbmcpOiB0aGlzIHtcbiAgICAgICAgdGhpcy5fY2xhc3NOYW1lID0gY2xhc3NOYW1lO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBwdWJsaWMgd2l0aENvbHVtbkNsYXNzTmFtZShjbGFzc05hbWU6IHN0cmluZyk6IHRoaXMge1xuICAgICAgICB0aGlzLl9jb2x1bW5DbGFzc05hbWUgPSBjbGFzc05hbWU7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHB1YmxpYyB3aXRoQ29sdW1uV2lkdGgod2lkdGg/OiBudW1iZXIsIG1pbldpZHRoPzogbnVtYmVyKTogdGhpcyB7XG4gICAgICAgIHRoaXMuX2NvbHVtbldpZHRoID0gd2lkdGggPz8gbnVsbDtcbiAgICAgICAgdGhpcy5fY29sdW1uTWluV2lkdGggPSBtaW5XaWR0aCA/PyBudWxsO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBwdWJsaWMgd2l0aE1hdGNoTW9kZXMobWF0Y2hNb2RlczogQXJyYXk8RmlsdGVyTWF0Y2hNb2RlRW51bT4pOiB0aGlzIHtcbiAgICAgICAgdGhpcy5fbWF0Y2hNb2RlcyA9IG1hdGNoTW9kZXM7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHB1YmxpYyBjb3B5KCk6IEZpbHRlckRlc2NyaXB0b3I8VD4ge1xuICAgICAgICBjb25zdCBkZXNjcmlwdG9yID0gbmV3IEZpbHRlckRlc2NyaXB0b3I8VD4odGhpcy5fcHJvcGVydHkpO1xuICAgICAgICB0aGlzLmNvcHlGaWVsZHNUbyhkZXNjcmlwdG9yKTtcbiAgICAgICAgcmV0dXJuIGRlc2NyaXB0b3I7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIGNvcHlGaWVsZHNUbyhkZXNjcmlwdG9yOiBGaWx0ZXJEZXNjcmlwdG9yPFQ+KSB7XG4gICAgICAgIGRlc2NyaXB0b3IuX2ZpbHRlclR5cGUgPSB0aGlzLl9maWx0ZXJUeXBlO1xuICAgICAgICBkZXNjcmlwdG9yLl9maWx0ZXJQcm9wZXJ0eSA9IHRoaXMuX2ZpbHRlclByb3BlcnR5O1xuICAgICAgICBkZXNjcmlwdG9yLl9oYXNEZWZhdWx0VmFsdWUgPSB0aGlzLl9oYXNEZWZhdWx0VmFsdWU7XG4gICAgICAgIGRlc2NyaXB0b3IuX2RlZmF1bHRWYWx1ZSA9IHRoaXMuX2RlZmF1bHRWYWx1ZTtcbiAgICAgICAgZGVzY3JpcHRvci5fZGVmYXVsdFZhbHVlVG8gPSB0aGlzLl9kZWZhdWx0VmFsdWVUbztcbiAgICAgICAgZGVzY3JpcHRvci5fZGVmYXVsdEZpbHRlck1hdGNoTW9kZSA9IHRoaXMuX2RlZmF1bHRGaWx0ZXJNYXRjaE1vZGU7XG4gICAgICAgIGRlc2NyaXB0b3IuX251bWJlck1pbkZyYWN0aW9uRGlnaXRzID0gdGhpcy5fbnVtYmVyTWluRnJhY3Rpb25EaWdpdHM7XG4gICAgICAgIGRlc2NyaXB0b3IuX251bWJlck1heEZyYWN0aW9uRGlnaXRzID0gdGhpcy5fbnVtYmVyTWF4RnJhY3Rpb25EaWdpdHM7XG4gICAgICAgIGRlc2NyaXB0b3IuX251bWJlclVzZUdyb3VwaW5nID0gdGhpcy5fbnVtYmVyVXNlR3JvdXBpbmc7XG4gICAgICAgIGRlc2NyaXB0b3IuX2RhdGVQaWNrZXJGb3JtYXQgPSB0aGlzLl9kYXRlUGlja2VyRm9ybWF0O1xuICAgICAgICBkZXNjcmlwdG9yLl9kYXRlUGlja2VyU2hvd1RpbWUgPSB0aGlzLl9kYXRlUGlja2VyU2hvd1RpbWU7XG4gICAgICAgIGRlc2NyaXB0b3IuX2RhdGVQaWNrZXJWYWx1ZUluVXRjID0gdGhpcy5fZGF0ZVBpY2tlclZhbHVlSW5VdGM7XG4gICAgICAgIGRlc2NyaXB0b3IuX2RhdGVQaWNrZXJWYWx1ZVdpdGhUaW1lem9uZSA9IHRoaXMuX2RhdGVQaWNrZXJWYWx1ZVdpdGhUaW1lem9uZTtcbiAgICAgICAgZGVzY3JpcHRvci5fZGF0ZVBpY2tlclZhbHVlRGF0ZU9ubHkgPSB0aGlzLl9kYXRlUGlja2VyVmFsdWVEYXRlT25seTtcbiAgICAgICAgZGVzY3JpcHRvci5fcGxhY2Vob2xkZXIgPSB0aGlzLl9wbGFjZWhvbGRlcjtcbiAgICAgICAgZGVzY3JpcHRvci5fY2xhc3NOYW1lID0gdGhpcy5fY2xhc3NOYW1lO1xuICAgICAgICBkZXNjcmlwdG9yLl9jb2x1bW5XaWR0aCA9IHRoaXMuX2NvbHVtbldpZHRoO1xuICAgICAgICBkZXNjcmlwdG9yLl9jb2x1bW5NaW5XaWR0aCA9IHRoaXMuX2NvbHVtbk1pbldpZHRoO1xuICAgICAgICBkZXNjcmlwdG9yLl9jb2x1bW5DbGFzc05hbWUgPSB0aGlzLl9jb2x1bW5DbGFzc05hbWU7XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgRmlsdGVyTG9va3VwRGVzY3JpcHRvcjxUPiBleHRlbmRzIEZpbHRlckRlc2NyaXB0b3I8VD4gaW1wbGVtZW50cyBJTG9va3VwRGVzY3JpcHRvcjxUPiB7XG4gICAgcHJvdGVjdGVkIHJlYWRvbmx5IF9tb2RlbFR5cGU6IENsYXNzVHlwZTxUPiB8IG51bGwgPSBudWxsO1xuICAgIHByb3RlY3RlZCBfbG9va3VwVHlwZT86IEZpbHRlckxvb2t1cFR5cGVFbnVtID0gRmlsdGVyTG9va3VwVHlwZUVudW0uRHJvcGRvd247XG5cbiAgICBwcm90ZWN0ZWQgX2RhdGFQcm92aWRlcj86IElMb29rdXBEYXRhUHJvdmlkZXI8VCwgYW55PjtcbiAgICBwcm90ZWN0ZWQgX2l0ZW1zTGFiZWxQcm9wZXJ0eT86IHN0cmluZztcbiAgICBwcm90ZWN0ZWQgX2l0ZW1zTGFiZWxUcmFuc2xhdGUgPSBmYWxzZTtcbiAgICBwcm90ZWN0ZWQgX2l0ZW1zVmFsdWVQcm9wZXJ0eT86IHN0cmluZztcbiAgICBwcm90ZWN0ZWQgX211bHRpc2VsZWN0ID0gZmFsc2U7XG5cbiAgICBwcm90ZWN0ZWQgX2Ryb3Bkb3duQ2xhc3NOYW1lID0gJ21uZy1maWx0ZXItbG9va3VwLWRyb3Bkb3duJztcblxuICAgIHByb3RlY3RlZCBfYXV0b2NvbXBsZXRlT3Blbk9uRm9jdXMgPSBmYWxzZTtcbiAgICBwcm90ZWN0ZWQgX2F1dG9jb21wbGV0ZUlubGluZVNlYXJjaCA9IGZhbHNlO1xuXG4gICAgY29uc3RydWN0b3IocHJvcGVydHk6IHN0cmluZywgbW9kZWxUeXBlOiBDbGFzc1R5cGU8VD4gfCBudWxsKSB7XG4gICAgICAgIHN1cGVyKHByb3BlcnR5KTtcbiAgICAgICAgdGhpcy5fbW9kZWxUeXBlID0gbW9kZWxUeXBlO1xuICAgICAgICB0aGlzLl9maWx0ZXJUeXBlID0gRmlsdGVyVHlwZUVudW0uTG9va3VwO1xuICAgICAgICBNb2RlbFV0aWwudHJ5U2V0TG9va3VwSXRlbXNQcm9wZXJ0aWVzKHRoaXMsIGZhbHNlKTtcbiAgICAgICAgaWYgKHRoaXMuX2l0ZW1zVmFsdWVQcm9wZXJ0eSkge1xuICAgICAgICAgICAgdGhpcy5fZmlsdGVyUHJvcGVydHkgPSBgJHtwcm9wZXJ0eX0uJHt0aGlzLl9pdGVtc1ZhbHVlUHJvcGVydHl9YDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgbG9va3VwVHlwZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2xvb2t1cFR5cGU7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBkYXRhUHJvdmlkZXIoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9kYXRhUHJvdmlkZXI7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBpdGVtc0xhYmVsUHJvcGVydHkoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9pdGVtc0xhYmVsUHJvcGVydHk7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBpdGVtc0xhYmVsVHJhbnNsYXRlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5faXRlbXNMYWJlbFRyYW5zbGF0ZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGl0ZW1zVmFsdWVQcm9wZXJ0eSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2l0ZW1zVmFsdWVQcm9wZXJ0eTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IG11bHRpc2VsZWN0KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fbXVsdGlzZWxlY3Q7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBhdXRvY29tcGxldGVPcGVuT25Gb2N1cygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2F1dG9jb21wbGV0ZU9wZW5PbkZvY3VzO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgYXV0b2NvbXBsZXRlSW5saW5lU2VhcmNoKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fYXV0b2NvbXBsZXRlSW5saW5lU2VhcmNoO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgZHJvcGRvd25DbGFzc05hbWUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9kcm9wZG93bkNsYXNzTmFtZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IG1vZGVsVHlwZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX21vZGVsVHlwZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgd2l0aEl0ZW1zTGFiZWxQcm9wZXJ0eShpdGVtc0xhYmVsUHJvcGVydHk6IHN0cmluZywgdHJhbnNsYXRlID0gZmFsc2UpOiB0aGlzIHtcbiAgICAgICAgdGhpcy5faXRlbXNMYWJlbFByb3BlcnR5ID0gaXRlbXNMYWJlbFByb3BlcnR5O1xuICAgICAgICB0aGlzLl9pdGVtc0xhYmVsVHJhbnNsYXRlID0gdHJhbnNsYXRlO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBwdWJsaWMgd2l0aEl0ZW1zVmFsdWVQcm9wZXJ0eShpdGVtc1ZhbHVlUHJvcGVydHk6IHN0cmluZyk6IHRoaXMge1xuICAgICAgICB0aGlzLl9pdGVtc1ZhbHVlUHJvcGVydHkgPSBpdGVtc1ZhbHVlUHJvcGVydHk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIE1ldGhvZCB3aWxsIHNldCBgaXRlbXNWYWx1ZVByb3BlcnR5YCwgYmVjYXVzZSBkYXRhS2V5cyBhcmUgbm90IHN1cHBvcnRlZCBoZXJlIGFzIGZpbHRlcnMgbmVlZCBmaW5hbCB2YWx1ZSB0byB3b3JrIGNvcnJlY3RseS5cbiAgICAgKiBVc2UgYHdpdGhJdGVtc1ZhbHVlUHJvcGVydHlgIGluc3RlYWQuXG4gICAgICogQHBhcmFtIGl0ZW1zVmFsdWVQcm9wZXJ0eSBJdGVtJ3MgdmFsdWUgcHJvcGVydHkuXG4gICAgICovXG4gICAgcHVibGljIHdpdGhEYXRhS2V5UHJvcGVydHkoaXRlbXNWYWx1ZVByb3BlcnR5OiBzdHJpbmcpOiB0aGlzIHtcbiAgICAgICAgdGhpcy5faXRlbXNWYWx1ZVByb3BlcnR5ID0gaXRlbXNWYWx1ZVByb3BlcnR5O1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBwdWJsaWMgd2l0aExvb2t1cDxTPihsb29rdXA6IChxdWVyeVBhcmFtPzogTWVkaXVzUXVlcnlQYXJhbSwgc2VydmljZT86IFMsIHNlYXJjaD86IHN0cmluZykgPT4gT2JzZXJ2YWJsZTxBcnJheTxUPj4sIHNlcnZpY2VUeXBlPzogVHlwZTxTPik6IHRoaXMge1xuICAgICAgICBjb25zdCBkYXRhUHJvdmlkZXIgPSBuZXcgTG9va3VwRGF0YVByb3ZpZGVyPFQsIFM+KHRoaXMuX21vZGVsVHlwZSk7XG4gICAgICAgIGlmIChzZXJ2aWNlVHlwZSkge1xuICAgICAgICAgICAgZGF0YVByb3ZpZGVyLndpdGhTZXJ2aWNlVHlwZShzZXJ2aWNlVHlwZSk7XG4gICAgICAgIH1cbiAgICAgICAgZGF0YVByb3ZpZGVyLndpdGhMb29rdXAobG9va3VwKTtcbiAgICAgICAgdGhpcy5fZGF0YVByb3ZpZGVyID0gZGF0YVByb3ZpZGVyO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBwdWJsaWMgd2l0aExvb2t1cERhdGFQcm92aWRlcihkYXRhUHJvdmlkZXI6IElMb29rdXBEYXRhUHJvdmlkZXI8VCwgYW55Pik6IHRoaXMge1xuICAgICAgICB0aGlzLl9kYXRhUHJvdmlkZXIgPSBkYXRhUHJvdmlkZXI7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHB1YmxpYyB3aXRoTXVsdGlzZWxlY3QobXVsdGlzZWxlY3QgPSB0cnVlKSB7XG4gICAgICAgIHRoaXMuX211bHRpc2VsZWN0ID0gbXVsdGlzZWxlY3Q7XG4gICAgICAgIHRoaXMuX2RlZmF1bHRGaWx0ZXJNYXRjaE1vZGUgPSBGaWx0ZXJNYXRjaE1vZGVFbnVtLkluO1xuICAgICAgICB0aGlzLndpdGhNYXRjaE1vZGVzKFtGaWx0ZXJNYXRjaE1vZGVFbnVtLkluXSk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHB1YmxpYyB3aXRoRHJvcGRvd25DbGFzc05hbWUoZHJvcGRvd25DbGFzc05hbWU6IHN0cmluZyk6IHRoaXMge1xuICAgICAgICB0aGlzLl9kcm9wZG93bkNsYXNzTmFtZSA9IGRyb3Bkb3duQ2xhc3NOYW1lO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBwdWJsaWMgb3ZlcnJpZGUgd2l0aERlZmF1bHRGaWx0ZXIoZmlsdGVyVmFsdWU6IFQgfCBUW10sIGZpbHRlclZhbHVlVG8/OiBULCBmaWx0ZXJNYXRjaE1vZGU/OiBGaWx0ZXJNYXRjaE1vZGVFbnVtKTogdGhpcyB7XG4gICAgICAgIHRoaXMuX2hhc0RlZmF1bHRWYWx1ZSA9IHRydWU7XG4gICAgICAgIHRoaXMuX2RlZmF1bHRWYWx1ZSA9IGZpbHRlclZhbHVlO1xuICAgICAgICB0aGlzLl9kZWZhdWx0VmFsdWVUbyA9IGZpbHRlclZhbHVlVG87XG4gICAgICAgIHRoaXMuX2RlZmF1bHRGaWx0ZXJNYXRjaE1vZGUgPSBmaWx0ZXJNYXRjaE1vZGU7XG5cbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoZmlsdGVyVmFsdWUpICYmICF0aGlzLm11bHRpc2VsZWN0KSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgTW5nSW50ZXJuYWxFcnJvcignQXJyYXkgZGVmYXVsdCBmaWx0ZXIgY2FuIG9ubHkgYmUgdXNlZCB3aXRoIGEgbXVsdGlzZWxlY3QgZmlsdGVyLicsICdGaWx0ZXJEZXNjcmlwdG9yIGVycm9yJyk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZmlsdGVyTWF0Y2hNb2RlICYmIHRoaXMuX21hdGNoTW9kZXMgJiYgdGhpcy5fbWF0Y2hNb2Rlcy5pbmRleE9mKGZpbHRlck1hdGNoTW9kZSkgPCAwKSB7XG4gICAgICAgICAgICB0aGlzLl9kZWZhdWx0RmlsdGVyTWF0Y2hNb2RlID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgTW5nTG9nZ2VyU2VydmljZS5nZXQoKS5kZWJ1ZyhgV0FSTklORzogRGVmYXVsdCBmaWx0ZXIgbWF0Y2ggbW9kZSAnJHtmaWx0ZXJNYXRjaE1vZGV9JyBjb3VsZCBub3QgYmUgYXNzaWduZWQgZm9yIHByb3BlcnR5ICR7dGhpcy5fcHJvcGVydHl9LmApO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKChBcnJheS5pc0FycmF5KGZpbHRlclZhbHVlKSAmJiAhdGhpcy5tdWx0aXNlbGVjdCkgfHwgKHRoaXMubXVsdGlzZWxlY3QgJiYgIUFycmF5LmlzQXJyYXkoZmlsdGVyVmFsdWUpKSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IE1uZ0ludGVybmFsRXJyb3IoYERlZmF1bHQgdmFsdWUgbm90IGluIGNvcnJlY3QgZm9ybWF0IGZvciBwcm9wZXJ0eSAke3RoaXMuX3Byb3BlcnR5fS5gLCAnRmlsdGVyRGVzY3JpcHRvciBlcnJvcicpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgcHVibGljIGFzQXV0b2NvbXBsZXRlKG9wZW5PbkZvY3VzID0gZmFsc2UsIGlubGluZVNlYXJjaCA9IGZhbHNlKTogdGhpcyB7XG4gICAgICAgIHRoaXMuX2xvb2t1cFR5cGUgPSBGaWx0ZXJMb29rdXBUeXBlRW51bS5BdXRvY29tcGxldGU7XG4gICAgICAgIHRoaXMuX2F1dG9jb21wbGV0ZU9wZW5PbkZvY3VzID0gb3Blbk9uRm9jdXM7XG4gICAgICAgIHRoaXMuX2F1dG9jb21wbGV0ZUlubGluZVNlYXJjaCA9IGlubGluZVNlYXJjaDtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgcHVibGljIG92ZXJyaWRlIGNvcHkoKTogRmlsdGVyTG9va3VwRGVzY3JpcHRvcjxUPiB7XG4gICAgICAgIGNvbnN0IGRlc2NyaXB0b3IgPSBuZXcgRmlsdGVyTG9va3VwRGVzY3JpcHRvcjxUPih0aGlzLl9wcm9wZXJ0eSwgdGhpcy5fbW9kZWxUeXBlKTtcbiAgICAgICAgdGhpcy5jb3B5RmllbGRzVG8oZGVzY3JpcHRvcik7XG4gICAgICAgIHJldHVybiBkZXNjcmlwdG9yO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBvdmVycmlkZSBjb3B5RmllbGRzVG8oZmlsdGVyOiBGaWx0ZXJMb29rdXBEZXNjcmlwdG9yPFQ+KSB7XG4gICAgICAgIHN1cGVyLmNvcHlGaWVsZHNUbyhmaWx0ZXIpO1xuICAgICAgICBmaWx0ZXIuX2RhdGFQcm92aWRlciA9IHRoaXMuX2RhdGFQcm92aWRlcjtcbiAgICAgICAgZmlsdGVyLl9sb29rdXBUeXBlID0gdGhpcy5fbG9va3VwVHlwZTtcbiAgICAgICAgZmlsdGVyLl9pdGVtc0xhYmVsUHJvcGVydHkgPSB0aGlzLl9pdGVtc0xhYmVsUHJvcGVydHk7XG4gICAgICAgIGZpbHRlci5faXRlbXNMYWJlbFRyYW5zbGF0ZSA9IHRoaXMuX2l0ZW1zTGFiZWxUcmFuc2xhdGU7XG4gICAgICAgIGZpbHRlci5faXRlbXNWYWx1ZVByb3BlcnR5ID0gdGhpcy5faXRlbXNWYWx1ZVByb3BlcnR5O1xuICAgICAgICBmaWx0ZXIuX211bHRpc2VsZWN0ID0gdGhpcy5fbXVsdGlzZWxlY3Q7XG4gICAgICAgIGZpbHRlci5fZHJvcGRvd25DbGFzc05hbWUgPSB0aGlzLl9kcm9wZG93bkNsYXNzTmFtZTtcbiAgICAgICAgZmlsdGVyLl9hdXRvY29tcGxldGVPcGVuT25Gb2N1cyA9IHRoaXMuX2F1dG9jb21wbGV0ZU9wZW5PbkZvY3VzO1xuICAgICAgICBmaWx0ZXIuX2F1dG9jb21wbGV0ZUlubGluZVNlYXJjaCA9IHRoaXMuX2F1dG9jb21wbGV0ZUlubGluZVNlYXJjaDtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBGaWx0ZXJMb29rdXBFbnVtRGVzY3JpcHRvciBleHRlbmRzIEZpbHRlckxvb2t1cERlc2NyaXB0b3I8RW51bVZhbHVlPHN0cmluZyB8IG51bWJlcj4+IHtcbiAgICBwcml2YXRlIHJlYWRvbmx5IF9lbnVtVHlwZTogRW51bVR5cGU7XG4gICAgcHJpdmF0ZSByZWFkb25seSBfb3B0aW9uRW51bVZhbHVlczogRW51bVZhbHVlPHN0cmluZyB8IG51bWJlcj5bXTtcbiAgICBwcml2YXRlIHJlYWRvbmx5IF9uYW1lQXNWYWx1ZTogYm9vbGVhbiA9IGZhbHNlO1xuXG4gICAgY29uc3RydWN0b3IocHJvcGVydHk6IHN0cmluZywgZW51bVR5cGU6IEVudW1UeXBlLCBvcHRpb25zPzogQXJyYXk8RW51bUNvbnN0YW50VHlwZT4sIG5hbWVBc1ZhbHVlID0gZmFsc2UsIG9wdGlvbnNUaXRsZVBhdGg/OiBzdHJpbmcgfCBudWxsKSB7XG4gICAgICAgIHN1cGVyKHByb3BlcnR5LCBudWxsKTtcbiAgICAgICAgdGhpcy5fZW51bVR5cGUgPSBlbnVtVHlwZTtcbiAgICAgICAgdGhpcy5fbmFtZUFzVmFsdWUgPSBuYW1lQXNWYWx1ZTtcbiAgICAgICAgaWYgKHR5cGVvZiBvcHRpb25zVGl0bGVQYXRoID09PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgb3B0aW9uc1RpdGxlUGF0aCA9IFR5cGVVdGlsLmZpbmRFbnVtTmFtZShlbnVtVHlwZSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fb3B0aW9uRW51bVZhbHVlcyA9IEFycmF5LmlzQXJyYXkob3B0aW9ucylcbiAgICAgICAgICAgID8gRW51bVV0aWwuZnJvbVZhbHVlc0FzRW51bVZhbHVlQXJyYXkoZW51bVR5cGUsIG9wdGlvbnMsIG5hbWVBc1ZhbHVlLCBvcHRpb25zVGl0bGVQYXRoID8/IHVuZGVmaW5lZClcbiAgICAgICAgICAgIDogRW51bVV0aWwuZnJvbUNvbnN0YW50c0FzRW51bVZhbHVlQXJyYXkoZW51bVR5cGUsIG5hbWVBc1ZhbHVlLCBvcHRpb25zVGl0bGVQYXRoID8/IHVuZGVmaW5lZCk7XG4gICAgICAgIGNvbnN0IGRhdGFQcm92aWRlciA9IG5ldyBMb29rdXBEYXRhUHJvdmlkZXI8RW51bVZhbHVlPHN0cmluZyB8IG51bWJlcj4sIGFueT4obnVsbCkud2l0aExvb2t1cCgoKSA9PiBvZih0aGlzLl9vcHRpb25FbnVtVmFsdWVzKSk7XG4gICAgICAgIHRoaXMud2l0aExvb2t1cERhdGFQcm92aWRlcihkYXRhUHJvdmlkZXIpO1xuICAgICAgICB0aGlzLndpdGhJdGVtc0xhYmVsUHJvcGVydHkoJ3RpdGxlJywgb3B0aW9uc1RpdGxlUGF0aCAhPT0gbnVsbCk7XG4gICAgICAgIHRoaXMud2l0aEl0ZW1zVmFsdWVQcm9wZXJ0eSgndmFsdWUnKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGVudW1UeXBlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fZW51bVR5cGU7XG4gICAgfVxuXG4gICAgcHVibGljIG92ZXJyaWRlIGFzQXV0b2NvbXBsZXRlKG9wZW5PbkZvY3VzID0gdHJ1ZSk6IHRoaXMge1xuICAgICAgICBzdXBlci5hc0F1dG9jb21wbGV0ZShvcGVuT25Gb2N1cywgdHJ1ZSk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHB1YmxpYyB3aXRoTXVsdGlzZWxlY3RFbnVtKG11bHRpc2VsZWN0ID0gdHJ1ZSk6IEZpbHRlckxvb2t1cEVudW1EZXNjcmlwdG9yIHtcbiAgICAgICAgcmV0dXJuIHN1cGVyLndpdGhNdWx0aXNlbGVjdChtdWx0aXNlbGVjdCkgYXMgRmlsdGVyTG9va3VwRW51bURlc2NyaXB0b3I7XG4gICAgfVxuXG4gICAgcHVibGljIG92ZXJyaWRlIHdpdGhEZWZhdWx0RmlsdGVyKCk6IHRoaXMge1xuICAgICAgICB0aHJvdyBuZXcgTW5nSW50ZXJuYWxFcnJvcihgd2l0aERlZmF1bHRGaWx0ZXIgb24gRmlsdGVyTG9va3VwRW51bURlc2NyaXB0b3Igc2hvdWxkIG5vdCBiZSB1c2VkLiBVc2Ugd2l0aERlZmF1bHRGaWx0ZXJFbnVtIGluc3RlYWQuYCwgJ0ZpbHRlckRlc2NyaXB0b3IgZXJyb3InKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgd2l0aERlZmF1bHRGaWx0ZXJFbnVtKGZpbHRlclZhbHVlOiBFbnVtQ29uc3RhbnRUeXBlIHwgRW51bUNvbnN0YW50VHlwZVtdLCBmaWx0ZXJWYWx1ZVRvPzogRW51bUNvbnN0YW50VHlwZSwgZmlsdGVyTWF0Y2hNb2RlPzogRmlsdGVyTWF0Y2hNb2RlRW51bSk6IHRoaXMge1xuICAgICAgICBsZXQgZGVmYXVsdE9wdGlvblZhbHVlOiBhbnkgfCBhbnlbXTtcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoZmlsdGVyVmFsdWUpKSB7XG4gICAgICAgICAgICBkZWZhdWx0T3B0aW9uVmFsdWUgPSB0aGlzLl9uYW1lQXNWYWx1ZSA/IGZpbHRlclZhbHVlLm1hcCh2YWx1ZSA9PiBFbnVtVXRpbC5nZXRDb25zdGFudE5hbWUodGhpcy5fZW51bVR5cGUsIHZhbHVlKSkgOiBmaWx0ZXJWYWx1ZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGRlZmF1bHRPcHRpb25WYWx1ZSA9IHRoaXMuX25hbWVBc1ZhbHVlID8gRW51bVV0aWwuZ2V0Q29uc3RhbnROYW1lKHRoaXMuX2VudW1UeXBlLCBmaWx0ZXJWYWx1ZSkgOiBmaWx0ZXJWYWx1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBkZWZhdWx0T3B0aW9uVmFsdWVUbzogYW55O1xuICAgICAgICBpZiAoZmlsdGVyVmFsdWVUbykge1xuICAgICAgICAgICAgZGVmYXVsdE9wdGlvblZhbHVlVG8gPSB0aGlzLl9uYW1lQXNWYWx1ZSA/IEVudW1VdGlsLmdldENvbnN0YW50TmFtZSh0aGlzLl9lbnVtVHlwZSwgZmlsdGVyVmFsdWVUbykgOiBmaWx0ZXJWYWx1ZVRvO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGRlZmF1bHRPcHRpb25WYWx1ZSkge1xuICAgICAgICAgICAgbGV0IG9wdGlvbjogYW55IHwgYW55W107XG4gICAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShkZWZhdWx0T3B0aW9uVmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgb3B0aW9uID0gZGVmYXVsdE9wdGlvblZhbHVlLm1hcCh2YWx1ZSA9PiB0aGlzLl9vcHRpb25FbnVtVmFsdWVzLmZpbmQobyA9PiBvLnZhbHVlID09PSB2YWx1ZSkpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBvcHRpb24gPSB0aGlzLl9vcHRpb25FbnVtVmFsdWVzLmZpbmQobyA9PiBvLnZhbHVlID09PSBkZWZhdWx0T3B0aW9uVmFsdWUpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCBvcHRpb25UbyA9IGRlZmF1bHRPcHRpb25WYWx1ZVRvID8gdGhpcy5fb3B0aW9uRW51bVZhbHVlcy5maW5kKG8gPT4gby52YWx1ZSA9PT0gZGVmYXVsdE9wdGlvblZhbHVlVG8pIDogdW5kZWZpbmVkO1xuXG4gICAgICAgICAgICBsZXQgZmlsdGVyVmFsdWVGcm9tQXJyYXlUbyA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgIGlmIChvcHRpb25Ubykge1xuICAgICAgICAgICAgICAgIGZpbHRlclZhbHVlRnJvbUFycmF5VG8gPSB0aGlzLl9pdGVtc1ZhbHVlUHJvcGVydHkgPyBvcHRpb25Ub1t0aGlzLl9pdGVtc1ZhbHVlUHJvcGVydHkgYXMga2V5b2Ygb2JqZWN0XSA6IG9wdGlvblRvO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBsZXQgZmlsdGVyVmFsdWVGcm9tQXJyYXk6IGFueSB8IGFueVtdO1xuICAgICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkob3B0aW9uKSkge1xuICAgICAgICAgICAgICAgIGZpbHRlclZhbHVlRnJvbUFycmF5ID0gdGhpcy5faXRlbXNWYWx1ZVByb3BlcnR5ID8gb3B0aW9uLm1hcCh2YWx1ZSA9PiB2YWx1ZVt0aGlzLl9pdGVtc1ZhbHVlUHJvcGVydHkgYXMga2V5b2Ygb2JqZWN0XSkgOiBvcHRpb247XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGZpbHRlclZhbHVlRnJvbUFycmF5ID0gdGhpcy5faXRlbXNWYWx1ZVByb3BlcnR5ID8gb3B0aW9uW3RoaXMuX2l0ZW1zVmFsdWVQcm9wZXJ0eSBhcyBrZXlvZiBvYmplY3RdIDogb3B0aW9uO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBzdXBlci53aXRoRGVmYXVsdEZpbHRlcihmaWx0ZXJWYWx1ZUZyb21BcnJheSwgZmlsdGVyVmFsdWVGcm9tQXJyYXlUbywgZmlsdGVyTWF0Y2hNb2RlKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBwdWJsaWMgb3ZlcnJpZGUgY29weSgpOiBGaWx0ZXJMb29rdXBFbnVtRGVzY3JpcHRvciB7XG4gICAgICAgIGNvbnN0IGZpZWxkID0gbmV3IEZpbHRlckxvb2t1cEVudW1EZXNjcmlwdG9yKHRoaXMuX3Byb3BlcnR5LCB0aGlzLl9lbnVtVHlwZSwgW10pO1xuICAgICAgICB0aGlzLmNvcHlGaWVsZHNUbyhmaWVsZCk7XG4gICAgICAgIHJldHVybiBmaWVsZDtcbiAgICB9XG59XG4iXX0=
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { MngInternalError } from '../../models';
|
|
2
2
|
import { ModelUtil, TypeUtil } from '../../utils';
|
|
3
3
|
import { DateUtil } from '../../utils/date.util';
|
|
4
4
|
import { TableviewUtil } from '../../utils/tableview.util';
|
|
@@ -300,7 +300,7 @@ export class ColumnDescriptor {
|
|
|
300
300
|
}
|
|
301
301
|
withFilterLookupEnum(options) {
|
|
302
302
|
if (this._columnType !== ColumnTypeEnum.Enum || !this._enumType) {
|
|
303
|
-
throw new
|
|
303
|
+
throw new MngInternalError(`Column ${this._property} is not of type enum or enum type is undefined.`, 'ColumnDescriptor error');
|
|
304
304
|
}
|
|
305
305
|
const filterDescriptor = new FilterLookupEnumDescriptor(this._property, this._enumType, options, this._enumNameAsValue, this._enumTitlePath);
|
|
306
306
|
this._filterDescriptor = filterDescriptor;
|
|
@@ -451,4 +451,4 @@ export class ColumnDynamicDescriptor extends ColumnDescriptor {
|
|
|
451
451
|
return descriptor;
|
|
452
452
|
}
|
|
453
453
|
}
|
|
454
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29sdW1uLmRlc2NyaXB0b3IuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvbGliL2Rlc2NyaXB0b3JzL3RhYmxlL2NvbHVtbi5kZXNjcmlwdG9yLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUVBLE9BQU8sRUFBd0IsZ0JBQWdCLEVBQUMsTUFBTSxjQUFjLENBQUM7QUFFckUsT0FBTyxFQUFDLFNBQVMsRUFBRSxRQUFRLEVBQUMsTUFBTSxhQUFhLENBQUM7QUFDaEQsT0FBTyxFQUFDLFFBQVEsRUFBQyxNQUFNLHVCQUF1QixDQUFDO0FBQy9DLE9BQU8sRUFBQyxhQUFhLEVBQUMsTUFBTSw0QkFBNEIsQ0FBQztBQUN6RCxPQUFPLEVBQUMsZ0JBQWdCLEVBQUUsc0JBQXNCLEVBQUUsMEJBQTBCLEVBQUMsTUFBTSxXQUFXLENBQUM7QUFDL0YsT0FBTyxFQUFDLHFCQUFxQixFQUFFLGNBQWMsRUFBRSxjQUFjLEVBQUMsTUFBTSxVQUFVLENBQUM7QUFHL0UsTUFBTSxPQUFPLGdCQUFnQjtJQXdEekIsWUFBWSxLQUEwQixFQUFFLFFBQWdCO1FBckRoRCxnQkFBVyxHQUFtQixjQUFjLENBQUMsTUFBTSxDQUFDO1FBQ3BELHVCQUFrQixHQUEwQixxQkFBcUIsQ0FBQyxNQUFNLENBQUM7UUFHekUsbUJBQWMsR0FBRyxLQUFLLENBQUM7UUFPdkIsaUJBQVksR0FBRyxLQUFLLENBQUM7UUFDckIsdUJBQWtCLEdBQUcsS0FBSyxDQUFDO1FBQzNCLG1CQUFjLEdBQUcsS0FBSyxDQUFDO1FBQ3ZCLGtCQUFhLEdBQUcsS0FBSyxDQUFDO1FBQ3RCLGVBQVUsR0FBRyxJQUFJLENBQUM7UUFFMUIsVUFBVTtRQUNGLHFCQUFnQixHQUFHLEVBQUUsQ0FBQztRQUN0QixlQUFVLEdBQUcsRUFBRSxDQUFDO1FBQ2hCLFdBQU0sR0FBa0IsSUFBSSxDQUFDO1FBQzdCLGNBQVMsR0FBa0IsSUFBSSxDQUFDO1FBQ2hDLGNBQVMsR0FBa0IsSUFBSSxDQUFDO1FBS2hDLHFCQUFnQixHQUFHLEtBQUssQ0FBQztRQUVqQyxvQkFBb0I7UUFDWixtQkFBYyxHQUFHLEtBQUssQ0FBQztRQWdCL0IsVUFBVTtRQUNGLHdCQUFtQixHQUFHLEtBQUssQ0FBQztRQUVwQyxlQUFlO1FBQ1AsaUJBQVksR0FBRyxLQUFLLENBQUM7UUFJekIsSUFBSSxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUM7UUFDcEIsSUFBSSxDQUFDLFNBQVMsR0FBRyxRQUFRLENBQUM7SUFDOUIsQ0FBQztJQUVELElBQVcsVUFBVTtRQUNqQixPQUFPLElBQUksQ0FBQyxXQUFXLENBQUM7SUFDNUIsQ0FBQztJQUVELElBQVcsaUJBQWlCO1FBQ3hCLE9BQU8sSUFBSSxDQUFDLGtCQUFrQixDQUFDO0lBQ25DLENBQUM7SUFFRCxJQUFXLEtBQUs7UUFDWixPQUFPLElBQUksQ0FBQyxNQUFNLENBQUM7SUFDdkIsQ0FBQztJQUVELElBQVcsUUFBUTtRQUNmLE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQztJQUMxQixDQUFDO0lBRUQsSUFBVyxhQUFhO1FBQ3BCLE9BQU8sSUFBSSxDQUFDLGNBQWMsQ0FBQztJQUMvQixDQUFDO0lBRUQsSUFBVyxZQUFZO1FBQ25CLE9BQU8sSUFBSSxDQUFDLGFBQWEsQ0FBQztJQUM5QixDQUFDO0lBRUQsSUFBVyxnQkFBZ0I7UUFDdkIsT0FBTyxJQUFJLENBQUMsaUJBQWlCLENBQUM7SUFDbEMsQ0FBQztJQUVELElBQVcsYUFBYTtRQUNwQixPQUFPLElBQUksQ0FBQyxjQUFjLENBQUM7SUFDL0IsQ0FBQztJQUVELElBQVcsS0FBSztRQUNaLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQztJQUN2QixDQUFDO0lBRUQsSUFBVyxRQUFRO1FBQ2YsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDO0lBQzFCLENBQUM7SUFFRCxJQUFXLGVBQWU7UUFDdEIsT0FBTyxJQUFJLENBQUMsZ0JBQWdCLENBQUM7SUFDakMsQ0FBQztJQUVELElBQVcsU0FBUztRQUNoQixPQUFPLElBQUksQ0FBQyxVQUFVLENBQUM7SUFDM0IsQ0FBQztJQUVELElBQVcsS0FBSztRQUNaLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQztJQUN2QixDQUFDO0lBRUQsSUFBVyxRQUFRO1FBQ2YsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDO0lBQzFCLENBQUM7SUFFRCxJQUFXLFFBQVE7UUFDZixPQUFPLElBQUksQ0FBQyxTQUFTLENBQUM7SUFDMUIsQ0FBQztJQUVELElBQVcsUUFBUTtRQUNmLE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQztJQUMxQixDQUFDO0lBRUQsSUFBVyxhQUFhO1FBQ3BCLE9BQU8sSUFBSSxDQUFDLGNBQWMsQ0FBQztJQUMvQixDQUFDO0lBRUQsSUFBVyxlQUFlO1FBQ3RCLE9BQU8sSUFBSSxDQUFDLGdCQUFnQixDQUFDO0lBQ2pDLENBQUM7SUFFRCxJQUFXLGFBQWE7UUFDcEIsT0FBTyxJQUFJLENBQUMsY0FBYyxDQUFDO0lBQy9CLENBQUM7SUFFRCxJQUFXLFVBQVU7UUFDakIsT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDO0lBQzVCLENBQUM7SUFFRCxJQUFXLFNBQVM7UUFDaEIsT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFDO0lBQzNCLENBQUM7SUFFRCxJQUFXLGVBQWU7UUFDdEIsT0FBTyxJQUFJLENBQUMsZ0JBQWdCLENBQUM7SUFDakMsQ0FBQztJQUVELElBQVcsbUJBQW1CO1FBQzFCLE9BQU8sSUFBSSxDQUFDLG9CQUFvQixDQUFDO0lBQ3JDLENBQUM7SUFFRCxJQUFXLG1CQUFtQjtRQUMxQixPQUFPLElBQUksQ0FBQyxvQkFBb0IsQ0FBQztJQUNyQyxDQUFDO0lBRUQsSUFBVyxNQUFNO1FBQ2IsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDO0lBQ3hCLENBQUM7SUFFRCxJQUFXLFlBQVk7UUFDbkIsT0FBTyxJQUFJLENBQUMsYUFBYSxDQUFDO0lBQzlCLENBQUM7SUFFRCxJQUFXLGVBQWU7UUFDdEIsT0FBTyxJQUFJLENBQUMsZ0JBQWdCLENBQUM7SUFDakMsQ0FBQztJQUVELElBQVcsb0JBQW9CO1FBQzNCLE9BQU8sSUFBSSxDQUFDLHFCQUFxQixDQUFDO0lBQ3RDLENBQUM7SUFFRCxJQUFXLGtCQUFrQjtRQUN6QixPQUFPLElBQUksQ0FBQyxtQkFBbUIsQ0FBQztJQUNwQyxDQUFDO0lBRUQsSUFBVyxRQUFRO1FBQ2YsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDO0lBQzFCLENBQUM7SUFFRCxJQUFXLE1BQU07UUFDYixPQUFPLElBQUksQ0FBQyxPQUFPLENBQUM7SUFDeEIsQ0FBQztJQUVELElBQVcsV0FBVztRQUNsQixPQUFPLElBQUksQ0FBQyxZQUFZLENBQUM7SUFDN0IsQ0FBQztJQUVELElBQVcsaUJBQWlCO1FBQ3hCLE9BQU8sSUFBSSxDQUFDLGtCQUFrQixDQUFDO0lBQ25DLENBQUM7SUFFRCxJQUFXLGFBQWE7UUFDcEIsT0FBTyxJQUFJLENBQUMsY0FBYyxDQUFDO0lBQy9CLENBQUM7SUFFRCxJQUFXLFlBQVk7UUFDbkIsT0FBTyxJQUFJLENBQUMsYUFBYSxDQUFDO0lBQzlCLENBQUM7SUFFRCxJQUFXLFNBQVM7UUFDaEIsT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFDO0lBQzNCLENBQUM7SUFFRCxJQUFXLFdBQVc7UUFDbEIsT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFDO0lBQzdCLENBQUM7SUFFRCxJQUFXLDBCQUEwQjtRQUNqQyxPQUFPLElBQUksQ0FBQywyQkFBMkIsQ0FBQztJQUM1QyxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNJLE1BQU0sQ0FBQyxJQUFvQixFQUFFLFdBQW1DLEVBQUUsR0FBRyxJQUFXO1FBQ25GLFFBQVEsSUFBSSxFQUFFO1lBQ1YsS0FBSyxjQUFjLENBQUMsTUFBTTtnQkFDdEIsT0FBTyxXQUFXLEtBQUsscUJBQXFCLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQztZQUM5RyxLQUFLLGNBQWMsQ0FBQyxPQUFPO2dCQUN2QixPQUFPLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQztZQUNuQyxLQUFLLGNBQWMsQ0FBQyxJQUFJO2dCQUNwQixPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQztZQUNoQyxLQUFLLGNBQWMsQ0FBQyxJQUFJO2dCQUNwQixPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBYSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUM5RCxLQUFLLGNBQWMsQ0FBQyxNQUFNO2dCQUN0QixPQUFPLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUMzQyxLQUFLLGNBQWMsQ0FBQyxNQUFNLENBQUM7WUFDM0I7Z0JBQ0ksT0FBTyxJQUFJLENBQUM7U0FDbkI7SUFDTCxDQUFDO0lBRU0sUUFBUSxDQUFDLGFBQWEsR0FBRyxPQUFPLEVBQUUsTUFBZTtRQUNwRCxJQUFJLENBQUMsV0FBVyxHQUFHLGNBQWMsQ0FBQyxNQUFNLENBQUM7UUFDekMsSUFBSSxDQUFDLGtCQUFrQixHQUFHLHFCQUFxQixDQUFDLE1BQU0sQ0FBQztRQUN2RCxJQUFJLENBQUMsY0FBYyxHQUFHLGFBQWEsQ0FBQztRQUNwQyxJQUFJLENBQUMsT0FBTyxHQUFHLE1BQU0sSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDO1FBQ3RDLE9BQU8sSUFBSSxDQUFDO0lBQ2hCLENBQUM7SUFFTSxVQUFVLENBQUMsWUFBcUIsRUFBRSxvQkFBNkIsRUFBRSxlQUE0QyxFQUFFLGFBQWEsR0FBRyxPQUFPLEVBQUUsTUFBZTtRQUMxSixJQUFJLENBQUMsV0FBVyxHQUFHLGNBQWMsQ0FBQyxNQUFNLENBQUM7UUFDekMsSUFBSSxDQUFDLGtCQUFrQixHQUFHLHFCQUFxQixDQUFDLFFBQVEsQ0FBQztRQUN6RCxJQUFJLENBQUMsYUFBYSxHQUFHLFlBQVksSUFBSSxJQUFJLENBQUMsYUFBYSxDQUFDO1FBQ3hELElBQUksQ0FBQyxxQkFBcUIsR0FBRyxvQkFBb0IsSUFBSSxJQUFJLENBQUMscUJBQXFCLENBQUM7UUFDaEYsSUFBSSxDQUFDLGdCQUFnQixHQUFHLGVBQWUsSUFBSSxJQUFJLENBQUMsZ0JBQWdCLENBQUM7UUFDakUsSUFBSSxDQUFDLGNBQWMsR0FBRyxhQUFhLElBQUksYUFBYSxDQUFDO1FBQ3JELElBQUksQ0FBQyxPQUFPLEdBQUcsTUFBTSxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUM7UUFDdEMsT0FBTyxJQUFJLENBQUM7SUFDaEIsQ0FBQztJQUVNLE1BQU0sQ0FBQyxhQUFhLEdBQUcsWUFBWTtRQUN0QyxJQUFJLENBQUMsV0FBVyxHQUFHLGNBQWMsQ0FBQyxJQUFJLENBQUM7UUFDdkMsSUFBSSxDQUFDLGtCQUFrQixHQUFHLHFCQUFxQixDQUFDLElBQUksQ0FBQztRQUNyRCxJQUFJLENBQUMsY0FBYyxHQUFHLGFBQWEsQ0FBQztRQUNwQyxPQUFPLElBQUksQ0FBQztJQUNoQixDQUFDO0lBRU0sU0FBUyxDQUFDLEdBQVksRUFBRSxFQUFXLEVBQUUsTUFBTSxHQUFHLEtBQUs7UUFDdEQsSUFBSSxDQUFDLFdBQVcsR0FBRyxjQUFjLENBQUMsT0FBTyxDQUFDO1FBQzFDLElBQUksQ0FBQyxrQkFBa0IsR0FBRyxxQkFBcUIsQ0FBQyxPQUFPLENBQUM7UUFDeEQsSUFBSSxDQUFDLGNBQWMsR0FBRyxNQUFNLENBQUM7UUFDN0IsSUFBSSxDQUFDLFdBQVcsR0FBRyxHQUFHLENBQUM7UUFDdkIsSUFBSSxDQUFDLFVBQVUsR0FBRyxFQUFFLENBQUM7UUFDckIsT0FBTyxJQUFJLENBQUM7SUFDaEIsQ0FBQztJQUVNLE1BQU0sQ0FBQyxRQUFrQixFQUFFLFdBQVcsR0FBRyxLQUFLLEVBQUUsU0FBeUI7UUFDNUUsSUFBSSxDQUFDLFdBQVcsR0FBRyxjQUFjLENBQUMsSUFBSSxDQUFDO1FBQ3ZDLElBQUksQ0FBQyxrQkFBa0IsR0FBRyxxQkFBcUIsQ0FBQyxJQUFJLENBQUM7UUFDckQsSUFBSSxDQUFDLFNBQVMsR0FBRyxRQUFRLENBQUM7UUFDMUIsSUFBSSxDQUFDLGdCQUFnQixHQUFHLFdBQVcsQ0FBQztRQUNwQyxJQUFJLE9BQU8sU0FBUyxLQUFLLFdBQVcsRUFBRTtZQUNsQyxTQUFTLEdBQUcsUUFBUSxDQUFDLFlBQVksQ0FBQyxRQUFRLENBQUMsQ0FBQztTQUMvQztRQUNELElBQUksQ0FBQyxjQUFjLEdBQUcsU0FBUyxDQUFDO1FBQ2hDLE9BQU8sSUFBSSxDQUFDO0lBQ2hCLENBQUM7SUFFTSxpQkFBaUIsQ0FBQyxtQkFBb0Q7UUFDekUsSUFBSSxDQUFDLFdBQVcsR0FBRyxjQUFjLENBQUMsTUFBTSxDQUFDO1FBQ3pDLElBQUksQ0FBQyxrQkFBa0IsR0FBRyxxQkFBcUIsQ0FBQyxTQUFTLENBQUM7UUFDMUQsSUFBSSxDQUFDLG9CQUFvQixHQUFHLG1CQUFtQixDQUFDO1FBQ2hELE9BQU8sSUFBSSxDQUFDO0lBQ2hCLENBQUM7SUFFTSxNQUFNO1FBQ1QsSUFBSSxDQUFDLGtCQUFrQixHQUFHLHFCQUFxQixDQUFDLElBQUksQ0FBQztRQUNyRCxPQUFPLElBQUksQ0FBQztJQUNoQixDQUFDO0lBRU0sYUFBYSxDQUFDLFNBQWtCLEVBQUUsZUFBd0I7UUFDN0QsSUFBSSxDQUFDLFVBQVUsR0FBRyxTQUFTLElBQUksRUFBRSxDQUFDO1FBQ2xDLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxlQUFlLElBQUksRUFBRSxDQUFDO1FBQzlDLE9BQU8sSUFBSSxDQUFDO0lBQ2hCLENBQUM7SUFFTSxTQUFTLENBQUMsS0FBYyxFQUFFLFFBQWlCLEVBQUUsUUFBaUI7UUFDakUsSUFBSSxDQUFDLE1BQU0sR0FBRyxLQUFLLElBQUksSUFBSSxDQUFDO1FBQzVCLElBQUksQ0FBQyxTQUFTLEdBQUcsUUFBUSxJQUFJLElBQUksQ0FBQztRQUNsQyxJQUFJLENBQUMsU0FBUyxHQUFHLFFBQVEsSUFBSSxJQUFJLENBQUM7UUFDbEMsT0FBTyxJQUFJLENBQUM7SUFDaEIsQ0FBQztJQUVNLGtCQUFrQixDQUFLLFNBQXdCLEVBQUUsYUFBc0I7UUFDMUUsSUFBSSxDQUFDLGdCQUFnQixHQUFHLFNBQVMsQ0FBQztRQUNsQyxJQUFJLENBQUMsYUFBYSxFQUFFO1lBQ2hCLElBQUksQ0FBQyxvQkFBb0IsR0FBRyxTQUFTLENBQUMsa0JBQWtCLENBQUMsU0FBUyxDQUFDLElBQUksU0FBUyxDQUFDO1NBQ3BGO2FBQU07WUFDSCxJQUFJLENBQUMsb0JBQW9CLEdBQUcsYUFBYSxDQUFDO1NBQzdDO1FBQ0QsT0FBTyxJQUFJLENBQUM7SUFDaEIsQ0FBQztJQUVNLFNBQVMsQ0FBQyxLQUFhO1FBQzFCLElBQUksQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDO1FBQ3BCLE9BQU8sSUFBSSxDQUFDO0lBQ2hCLENBQUM7SUFFTSxZQUFZLENBQUMsSUFBWTtRQUM1QixJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQztRQUN0QixPQUFPLElBQUksQ0FBQztJQUNoQixDQUFDO0lBRU0sVUFBVSxDQUFDLFdBQVcsR0FBRyxLQUFLO1FBQ2pDLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxJQUFJLGdCQUFnQixDQUFVLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUN2RSxJQUFJLFVBQTBCLENBQUM7UUFFL0IsSUFBSSxDQUFDLFdBQVcsSUFBSSxJQUFJLENBQUMsZ0JBQWdCLEVBQUU7WUFDdkMsT0FBTyxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztTQUNsQztRQUNELFFBQVEsSUFBSSxDQUFDLFdBQVcsRUFBRTtZQUN0QixLQUFLLGNBQWMsQ0FBQyxNQUFNO2dCQUN0QixVQUFVLEdBQUcsY0FBYyxDQUFDLE1BQU0sQ0FBQztnQkFDbkMsTUFBTTtZQUNWLEtBQUssY0FBYyxDQUFDLE9BQU87Z0JBQ3ZCLFVBQVUsR0FBRyxjQUFjLENBQUMsT0FBTyxDQUFDO2dCQUNwQyxNQUFNO1lBQ1YsS0FBSyxjQUFjLENBQUMsSUFBSTtnQkFDcEIsVUFBVSxHQUFHLGNBQWMsQ0FBQyxJQUFJLENBQUM7Z0JBQ2pDLE1BQU07WUFDVixLQUFLLGNBQWMsQ0FBQyxJQUFJO2dCQUNwQixJQUFJLENBQUMsV0FBVyxFQUFFO29CQUNkLE9BQU8sSUFBSSxDQUFDLG9CQUFvQixFQUFFLENBQUM7aUJBQ3RDO3FCQUFNO29CQUNILFVBQVUsR0FBRyxjQUFjLENBQUMsTUFBTSxDQUFDO29CQUNuQyxNQUFNO2lCQUNUO1lBQ0wsS0FBSyxjQUFjLENBQUMsTUFBTSxDQUFDO1lBQzNCLEtBQUssY0FBYyxDQUFDLE1BQU0sQ0FBQztZQUMzQjtnQkFDSSxVQUFVLEdBQUcsY0FBYyxDQUFDLE1BQU0sQ0FBQztnQkFDbkMsTUFBTTtTQUNiO1FBRUQsSUFBSSxDQUFDLGlCQUFpQixDQUFDLFlBQVksQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUNoRCxJQUFJLFVBQVUsS0FBSyxjQUFjLENBQUMsTUFBTSxFQUFFO1lBQ3RDLE1BQU0sc0JBQXNCLEdBQUcsSUFBSSxDQUFDLGNBQWMsRUFBRSxLQUFLLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDaEYsSUFBSSxzQkFBc0IsSUFBSSxzQkFBc0IsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO2dCQUM3RCxJQUFJLENBQUMsaUJBQWlCLENBQUMsbUJBQW1CLENBQUMsUUFBUSxDQUFDLHNCQUFzQixDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsUUFBUSxDQUFDLHNCQUFzQixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQzthQUN4SDtTQUNKO2FBQU0sSUFBSSxVQUFVLEtBQUssY0FBYyxDQUFDLElBQUksRUFBRTtZQUMzQyxNQUFNLGFBQWEsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDO1lBQzFDLElBQUksYUFBYSxFQUFFO2dCQUNmLE1BQU0sbUJBQW1CLEdBQUcsUUFBUSxDQUFDLDRCQUE0QixDQUFDLGFBQWEsQ0FBQyxDQUFDO2dCQUNqRixJQUFJLENBQUMsaUJBQWlCLENBQUMsY0FBYyxDQUFDLG1CQUFtQixDQUFDLENBQUM7YUFDOUQ7U0FDSjtRQUVELE9BQU8sSUFBSSxDQUFDLGlCQUFpQixDQUFDO0lBQ2xDLENBQUM7SUFFTSxnQkFBZ0I7UUFDbkIsTUFBTSxnQkFBZ0IsR0FBRyxJQUFJLHNCQUFzQixDQUFVLElBQUksQ0FBQyxTQUFTLEVBQUUsSUFBSSxDQUFDLGdCQUFnQixJQUFJLElBQUksQ0FBQyxDQUFDO1FBQzVHLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxnQkFBZ0IsQ0FBQztRQUMxQyxPQUFPLGdCQUFnQixDQUFDO0lBQzVCLENBQUM7SUFFTSxvQkFBb0IsQ0FBQyxPQUFpQztRQUN6RCxJQUFJLElBQUksQ0FBQyxXQUFXLEtBQUssY0FBYyxDQUFDLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUU7WUFDN0QsTUFBTSxJQUFJLGdCQUFnQixDQUFDLFVBQVUsSUFBSSxDQUFDLFNBQVMsaURBQWlELEVBQUUsd0JBQXdCLENBQUMsQ0FBQyxZQUFZLEVBQUUsQ0FBQztTQUNsSjtRQUNELE1BQU0sZ0JBQWdCLEdBQUcsSUFBSSwwQkFBMEIsQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLElBQUksQ0FBQyxTQUFTLEVBQUUsT0FBTyxFQUFFLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUM7UUFDN0ksSUFBSSxDQUFDLGlCQUFpQixHQUFHLGdCQUFnQixDQUFDO1FBQzFDLE9BQU8sZ0JBQWdCLENBQUM7SUFDNUIsQ0FBQztJQUVNLFFBQVEsQ0FBQyxTQUFTLEdBQUcsSUFBSSxFQUFFLFlBQXFCO1FBQ25ELElBQUksQ0FBQyxjQUFjLEdBQUcsU0FBUyxDQUFDO1FBQ2hDLElBQUksQ0FBQyxhQUFhLEdBQUcsWUFBWSxDQUFDO1FBQ2xDLE9BQU8sSUFBSSxDQUFDO0lBQ2hCLENBQUM7SUFFTSxlQUFlLENBQUMsR0FBRyxHQUFHLElBQUk7UUFDN0IsSUFBSSxDQUFDLE1BQU0sQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxHQUFHLENBQUMsQ0FBQztRQUNqRCxPQUFPLElBQUksQ0FBQztJQUNoQixDQUFDO0lBRU0sbUJBQW1CLENBQUMsaUJBQWlCLEdBQUcsSUFBSTtRQUMvQyxJQUFJLENBQUMsbUJBQW1CLEdBQUcsaUJBQWlCLENBQUM7UUFDN0MsT0FBTyxJQUFJLENBQUM7SUFDaEIsQ0FBQztJQUVNLFlBQVksQ0FBQyxRQUFnQjtRQUNoQyxJQUFJLENBQUMsU0FBUyxHQUFHLFFBQVEsQ0FBQztRQUMxQixPQUFPLElBQUksQ0FBQztJQUNoQixDQUFDO0lBRU0sVUFBVSxDQUFDLE1BQWdEO1FBQzlELElBQUksQ0FBQyxPQUFPLEdBQUcsTUFBTSxDQUFDO1FBQ3RCLE9BQU8sSUFBSSxDQUFDO0lBQ2hCLENBQUM7SUFFTSxhQUFhLENBQUMsV0FBVyxHQUFHLElBQUk7UUFDbkMsSUFBSSxDQUFDLFlBQVksR0FBRyxXQUFXLENBQUM7UUFDaEMsT0FBTyxJQUFJLENBQUM7SUFDaEIsQ0FBQztJQUVNLGtCQUFrQixDQUFDLGNBQWMsR0FBRyxJQUFJO1FBQzNDLElBQUksQ0FBQyxrQkFBa0IsR0FBRyxjQUFjLENBQUM7UUFDekMsT0FBTyxJQUFJLENBQUM7SUFDaEIsQ0FBQztJQUVNLGVBQWUsQ0FBQyxhQUFhLEdBQUcsSUFBSTtRQUN2QyxJQUFJLENBQUMsY0FBYyxHQUFHLGFBQWEsQ0FBQztRQUNwQyxPQUFPLElBQUksQ0FBQztJQUNoQixDQUFDO0lBRU0sY0FBYyxDQUFDLFlBQVksR0FBRyxJQUFJLEVBQUUsU0FBUyxHQUFHLElBQUk7UUFDdkQsSUFBSSxDQUFDLGFBQWEsR0FBRyxZQUFZLENBQUM7UUFDbEMsSUFBSSxDQUFDLFVBQVUsR0FBRyxTQUFTLENBQUM7UUFDNUIsT0FBTyxJQUFJLENBQUM7SUFDaEIsQ0FBQztJQUVNLFNBQVMsQ0FBQyxjQUF1QjtRQUNwQyxJQUFJLGNBQWMsRUFBRTtZQUNoQixJQUFJLENBQUMsMkJBQTJCLEdBQUcsY0FBYyxDQUFDO1NBQ3JEO2FBQU07WUFDSCxJQUFJLENBQUMsMkJBQTJCLEdBQUcsR0FBRyxJQUFJLENBQUMsU0FBUyxXQUFXLENBQUM7U0FDbkU7UUFDRCxPQUFPLElBQUksQ0FBQztJQUNoQixDQUFDO0lBRU0sSUFBSTtRQUNQLE1BQU0sVUFBVSxHQUFHLElBQUksZ0JBQWdCLENBQVEsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDNUUsSUFBSSxDQUFDLFlBQVksQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUM5QixPQUFPLFVBQVUsQ0FBQztJQUN0QixDQUFDO0lBRVMsWUFBWSxDQUFDLEdBQTRCO1FBQy9DLEdBQUcsQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQztRQUMvQixHQUFHLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUM7UUFDekIsR0FBRyxDQUFDLGNBQWMsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDO1FBQ3pDLEdBQUcsQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQztRQUN2QyxHQUFHLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUM7UUFDbkMsR0FBRyxDQUFDLGtCQUFrQixHQUFHLElBQUksQ0FBQyxrQkFBa0IsQ0FBQztRQUNqRCxHQUFHLENBQUMsaUJBQWlCLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixFQUFFLElBQUksRUFBRSxDQUFDO1FBQ3ZELEdBQUcsQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQztRQUMvQixHQUFHLENBQUMsY0FBYyxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUM7UUFDekMsR0FBRyxDQUFDLGdCQUFnQixHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQztRQUM3QyxHQUFHLENBQUMsY0FBYyxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUM7UUFDekMsR0FBRyxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDO1FBQ25DLEdBQUcsQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQztRQUNqQyxHQUFHLENBQUMsZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFDO1FBQzdDLEdBQUcsQ0FBQyxvQkFBb0IsR0FBRyxJQUFJLENBQUMsb0JBQW9CLENBQUM7UUFDckQsR0FBRyxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDO1FBQzNCLEdBQUcsQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQztRQUN2QyxHQUFHLENBQUMsZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFDO1FBQzdDLEdBQUcsQ0FBQyxxQkFBcUIsR0FBRyxJQUFJLENBQUMscUJBQXFCLENBQUM7UUFDdkQsR0FBRyxDQUFDLGNBQWMsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDO1FBQ3pDLEdBQUcsQ0FBQyxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUM7UUFDN0MsR0FBRyxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDO1FBQ2pDLEdBQUcsQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQztRQUN6QixHQUFHLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUM7UUFDL0IsR0FBRyxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDO1FBQy9CLEdBQUcsQ0FBQyxvQkFBb0IsR0FBRyxJQUFJLENBQUMsb0JBQW9CLENBQUM7UUFDckQsR0FBRyxDQUFDLG1CQUFtQixHQUFHLElBQUksQ0FBQyxtQkFBbUIsQ0FBQztRQUNuRCxHQUFHLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUM7UUFDL0IsR0FBRyxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDO1FBQzNCLEdBQUcsQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQztRQUNyQyxHQUFHLENBQUMsa0JBQWtCLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixDQUFDO1FBQ2pELEdBQUcsQ0FBQyxjQUFjLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQztRQUN6QyxHQUFHLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUM7UUFDdkMsR0FBRyxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDO1FBQ2pDLEdBQUcsQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQztRQUNyQyxHQUFHLENBQUMsMkJBQTJCLEdBQUcsSUFBSSxDQUFDLDJCQUEyQixDQUFDO0lBQ3ZFLENBQUM7Q0FDSjtBQUVELE1BQU0sT0FBTyx1QkFBd0IsU0FBUSxnQkFBMEI7SUFLbkUseUJBQXlCO0lBRXpCLFlBQVksS0FBNkIsRUFBRSxRQUFnQjtRQUN2RCxLQUFLLENBQUMsS0FBSyxFQUFFLFFBQVEsQ0FBQyxDQUFDO1FBTlIsV0FBTSxHQUF1QixTQUFTLENBQUM7UUFDbEQsZ0JBQVcsR0FBRyxJQUFJLENBQUM7UUFNdkIsSUFBSSxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUM7SUFDeEIsQ0FBQztJQUVELElBQVcsVUFBVTtRQUNqQixPQUFPLElBQUksQ0FBQyxXQUFXLENBQUM7SUFDNUIsQ0FBQztJQUVEOzs7O09BSUc7SUFDYSxTQUFTLENBQUMsS0FBYSxFQUFFLFFBQVEsR0FBRyxLQUFLO1FBQ3JELElBQUksSUFBSSxDQUFDLE1BQU0sSUFBSSxJQUFJLElBQUksUUFBUSxFQUFFO1lBQ2pDLElBQUksQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDO1NBQ3ZCO1FBQ0QsT0FBTyxJQUFJLENBQUM7SUFDaEIsQ0FBQztJQUVEOzs7T0FHRztJQUNJLGlCQUFpQixDQUFDLEtBQWE7UUFDbEMsYUFBYSxDQUFDLHFCQUFxQixDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsQ0FBQztRQUNqRCxPQUFPLElBQUksQ0FBQztJQUNoQixDQUFDO0lBRUQ7OztPQUdHO0lBQ0ksY0FBYyxDQUFDLFVBQW1CO1FBQ3JDLElBQUksQ0FBQyxXQUFXLEdBQUcsVUFBVSxDQUFDO1FBQzlCLE9BQU8sSUFBSSxDQUFDO0lBQ2hCLENBQUM7SUFFRDs7T0FFRztJQUNhLElBQUk7UUFDaEIsTUFBTSxVQUFVLEdBQUcsSUFBSSx1QkFBdUIsQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUM1RSxJQUFJLENBQUMsWUFBWSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQzlCLFVBQVUsQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQztRQUNoQyxVQUFVLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUM7UUFDMUMsT0FBTyxVQUFVLENBQUM7SUFDdEIsQ0FBQztJQUVNLGtCQUFrQixDQUFDLGVBQXFDO1FBQzNELE1BQU0sVUFBVSxHQUFHLElBQUksZ0JBQWdCLENBQUMsZUFBZSxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUN6RSxJQUFJLENBQUMsWUFBWSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQzlCLE9BQU8sVUFBVSxDQUFDO0lBQ3RCLENBQUM7Q0FDSiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7VHlwZX0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmltcG9ydCB7SUNvbHVtblZhbHVlQ29tcG9uZW50LCBNbmdFcnJvckludGVybmFsfSBmcm9tICcuLi8uLi9tb2RlbHMnO1xuaW1wb3J0IHtDbGFzc1R5cGUsIEVudW1Db25zdGFudFR5cGUsIEVudW1UeXBlfSBmcm9tICcuLi8uLi90eXBlcyc7XG5pbXBvcnQge01vZGVsVXRpbCwgVHlwZVV0aWx9IGZyb20gJy4uLy4uL3V0aWxzJztcbmltcG9ydCB7RGF0ZVV0aWx9IGZyb20gJy4uLy4uL3V0aWxzL2RhdGUudXRpbCc7XG5pbXBvcnQge1RhYmxldmlld1V0aWx9IGZyb20gJy4uLy4uL3V0aWxzL3RhYmxldmlldy51dGlsJztcbmltcG9ydCB7RmlsdGVyRGVzY3JpcHRvciwgRmlsdGVyTG9va3VwRGVzY3JpcHRvciwgRmlsdGVyTG9va3VwRW51bURlc2NyaXB0b3J9IGZyb20gJy4uL2ZpbHRlcic7XG5pbXBvcnQge0NvbHVtbkRpc3BsYXlUeXBlRW51bSwgQ29sdW1uVHlwZUVudW0sIEZpbHRlclR5cGVFbnVtfSBmcm9tICcuLi90eXBlcyc7XG5pbXBvcnQge1RhYmxlRGVzY3JpcHRvciwgVGFibGVEeW5hbWljRGVzY3JpcHRvcn0gZnJvbSAnLi90YWJsZS5kZXNjcmlwdG9yJztcblxuZXhwb3J0IGNsYXNzIENvbHVtbkRlc2NyaXB0b3I8VCwgVFQ+IHtcbiAgICBwcm90ZWN0ZWQgcmVhZG9ubHkgX3RhYmxlOiBUYWJsZURlc2NyaXB0b3I8VFQ+O1xuICAgIHByb3RlY3RlZCByZWFkb25seSBfcHJvcGVydHk6IHN0cmluZztcbiAgICBwcml2YXRlIF9jb2x1bW5UeXBlOiBDb2x1bW5UeXBlRW51bSA9IENvbHVtblR5cGVFbnVtLlN0cmluZztcbiAgICBwcml2YXRlIF9jb2x1bW5EaXNwbGF5VHlwZTogQ29sdW1uRGlzcGxheVR5cGVFbnVtID0gQ29sdW1uRGlzcGxheVR5cGVFbnVtLlN0cmluZztcbiAgICBwcm90ZWN0ZWQgX3RpdGxlPzogc3RyaW5nO1xuICAgIHByaXZhdGUgX2pzb25QYXRoPzogc3RyaW5nO1xuICAgIHByaXZhdGUgX2lzU29ydEVuYWJsZWQgPSBmYWxzZTtcbiAgICBwcml2YXRlIF9zb3J0UHJvcGVydHk/OiBzdHJpbmc7XG4gICAgcHJpdmF0ZSBfZmlsdGVyRGVzY3JpcHRvcj86IEZpbHRlckRlc2NyaXB0b3I8dW5rbm93bj47XG4gICAgcHJpdmF0ZSBfZGlzcGxheUZvcm1hdD86IHN0cmluZztcbiAgICBwcml2YXRlIF9sb2NhbGU/OiBzdHJpbmc7XG4gICAgcHJpdmF0ZSBfdGVtcGxhdGU/OiBzdHJpbmc7XG4gICAgcHJpdmF0ZSBfZ2V0dGVyPzogKGl0ZW06IFRULCB2YWx1ZT86IFQgfCBudWxsKSA9PiB1bmtub3duO1xuICAgIHByaXZhdGUgX2lzTXVsdGlsaW5lID0gZmFsc2U7XG4gICAgcHJpdmF0ZSBfaGFzVmFsdWVBc1Rvb2x0aXAgPSBmYWxzZTtcbiAgICBwcml2YXRlIF9pc1Jlb3JkZXJhYmxlID0gZmFsc2U7XG4gICAgcHJpdmF0ZSBfaXNUb2dnbGVhYmxlID0gZmFsc2U7XG4gICAgcHJpdmF0ZSBfaXNWaXNpYmxlID0gdHJ1ZTtcblxuICAgIC8vIHN0eWxpbmdcbiAgICBwcml2YXRlIF9oZWFkZXJDbGFzc05hbWUgPSAnJztcbiAgICBwcml2YXRlIF9jbGFzc05hbWUgPSAnJztcbiAgICBwcml2YXRlIF93aWR0aDogbnVtYmVyIHwgbnVsbCA9IG51bGw7XG4gICAgcHJpdmF0ZSBfbWluV2lkdGg6IG51bWJlciB8IG51bGwgPSBudWxsO1xuICAgIHByaXZhdGUgX21heFdpZHRoOiBudW1iZXIgfCBudWxsID0gbnVsbDtcblxuICAgIC8vIGVudW0gc3BlY2lmaWNzXG4gICAgcHJpdmF0ZSBfZW51bVR5cGU/OiBFbnVtVHlwZTtcbiAgICBwcml2YXRlIF9lbnVtVGl0bGVQYXRoPzogc3RyaW5nIHwgbnVsbDtcbiAgICBwcml2YXRlIF9lbnVtTmFtZUFzVmFsdWUgPSBmYWxzZTtcblxuICAgIC8vIGJvb2xlYW4gc3BlY2lmaWNzXG4gICAgcHJpdmF0ZSBfYm9vbGVhbkFzSWNvbiA9IGZhbHNlO1xuICAgIHByaXZhdGUgX2Jvb2xlYW5ZZXM/OiBzdHJpbmc7XG4gICAgcHJpdmF0ZSBfYm9vbGVhbk5vPzogc3RyaW5nO1xuXG4gICAgLy8gbW9kZWwgc3BlY2lmaWNzXG4gICAgcHJpdmF0ZSBfb2JqZWN0TW9kZWxUeXBlPzogQ2xhc3NUeXBlPHVua25vd24+O1xuICAgIHByaXZhdGUgX29iamVjdFRpdGxlUHJvcGVydHk/OiBzdHJpbmc7XG5cbiAgICAvLyBjdXJyZW5jeSBzcGVjaWZpY3NcbiAgICBwcml2YXRlIF9jdXJyZW5jeUNvZGU/OiBzdHJpbmc7XG4gICAgcHJpdmF0ZSBfY3VycmVuY3lGcm9tUHJvcGVydHk/OiBzdHJpbmc7XG4gICAgcHJpdmF0ZSBfY3VycmVuY3lEaXNwbGF5PzogJ3N5bWJvbCcgfCAnY29kZScgfCAnbmFtZSc7XG5cbiAgICAvLyBjdXN0b20gc3BlY2lmaWNzXG4gICAgcHJpdmF0ZSBfY3VzdG9tQ29tcG9uZW50VHlwZT86IFR5cGU8SUNvbHVtblZhbHVlQ29tcG9uZW50PFRUPj47XG5cbiAgICAvLyBoZWxwZXJzXG4gICAgcHJpdmF0ZSBfaGFzQ29weVRvQ2xpcGJvYXJkID0gZmFsc2U7XG5cbiAgICAvLyBsb2NhbGl6YXRpb25cbiAgICBwcml2YXRlIF9pc0xvY2FsaXplZCA9IGZhbHNlO1xuICAgIHByaXZhdGUgX2xvY2FsaXphdGlvbkV4aXN0c1Byb3BlcnR5Pzogc3RyaW5nO1xuXG4gICAgY29uc3RydWN0b3IodGFibGU6IFRhYmxlRGVzY3JpcHRvcjxUVD4sIHByb3BlcnR5OiBzdHJpbmcpIHtcbiAgICAgICAgdGhpcy5fdGFibGUgPSB0YWJsZTtcbiAgICAgICAgdGhpcy5fcHJvcGVydHkgPSBwcm9wZXJ0eTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGNvbHVtblR5cGUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9jb2x1bW5UeXBlO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgY29sdW1uRGlzcGxheVR5cGUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9jb2x1bW5EaXNwbGF5VHlwZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IHRpdGxlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fdGl0bGU7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBqc29uUGF0aCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2pzb25QYXRoO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgaXNTb3J0RW5hYmxlZCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2lzU29ydEVuYWJsZWQ7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBzb3J0UHJvcGVydHkoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9zb3J0UHJvcGVydHk7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBmaWx0ZXJEZXNjcmlwdG9yKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fZmlsdGVyRGVzY3JpcHRvcjtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGRpc3BsYXlGb3JtYXQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9kaXNwbGF5Rm9ybWF0O1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgdGFibGUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl90YWJsZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IHByb3BlcnR5KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fcHJvcGVydHk7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBoZWFkZXJDbGFzc05hbWUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9oZWFkZXJDbGFzc05hbWU7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBjbGFzc05hbWUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9jbGFzc05hbWU7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCB3aWR0aCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3dpZHRoO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgbWluV2lkdGgoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9taW5XaWR0aDtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IG1heFdpZHRoKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fbWF4V2lkdGg7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBlbnVtVHlwZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2VudW1UeXBlO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgZW51bVRpdGxlUGF0aCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2VudW1UaXRsZVBhdGg7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBlbnVtTmFtZUFzVmFsdWUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9lbnVtTmFtZUFzVmFsdWU7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBib29sZWFuQXNJY29uKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fYm9vbGVhbkFzSWNvbjtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGJvb2xlYW5ZZXMoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9ib29sZWFuWWVzO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgYm9vbGVhbk5vKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fYm9vbGVhbk5vO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgb2JqZWN0TW9kZWxUeXBlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fb2JqZWN0TW9kZWxUeXBlO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgb2JqZWN0VGl0bGVQcm9wZXJ0eSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX29iamVjdFRpdGxlUHJvcGVydHk7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBjdXN0b21Db21wb25lbnRUeXBlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fY3VzdG9tQ29tcG9uZW50VHlwZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGxvY2FsZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2xvY2FsZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGN1cnJlbmN5Q29kZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2N1cnJlbmN5Q29kZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGN1cnJlbmN5RGlzcGxheSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2N1cnJlbmN5RGlzcGxheTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGN1cnJlbmN5RnJvbVByb3BlcnR5KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fY3VycmVuY3lGcm9tUHJvcGVydHk7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBoYXNDb3B5VG9DbGlwYm9hcmQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9oYXNDb3B5VG9DbGlwYm9hcmQ7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCB0ZW1wbGF0ZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3RlbXBsYXRlO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgZ2V0dGVyKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fZ2V0dGVyO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgaXNNdWx0aWxpbmUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9pc011bHRpbGluZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGhhc1ZhbHVlQXNUb29sdGlwKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5faGFzVmFsdWVBc1Rvb2x0aXA7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBpc1Jlb3JkZXJhYmxlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5faXNSZW9yZGVyYWJsZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGlzVG9nZ2xlYWJsZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2lzVG9nZ2xlYWJsZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGlzVmlzaWJsZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2lzVmlzaWJsZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGlzTG9jYWxpemVkKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5faXNMb2NhbGl6ZWQ7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBsb2NhbGl6YXRpb25FeGlzdHNQcm9wZXJ0eSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2xvY2FsaXphdGlvbkV4aXN0c1Byb3BlcnR5O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIGNvbnZlcnRzIGNvbHVtbiB0byBnaXZlbiB0eXBlIHdpdGggYWRkaXRpb25hbCBhcmd1bWVudHNcbiAgICAgKiBAcGFyYW0gdHlwZSBjb2x1bW4gdHlwZSBlbnVtXG4gICAgICogQHBhcmFtIGFyZ3MgYW55IGFkZGl0aW9uYWwgYXJndW1lbnRzIGZvciBjb2x1bW4gKG9wdGlvbmFsKVxuICAgICAqL1xuICAgIHB1YmxpYyBhc1R5cGUodHlwZTogQ29sdW1uVHlwZUVudW0sIGRpc3BsYXlUeXBlPzogQ29sdW1uRGlzcGxheVR5cGVFbnVtLCAuLi5hcmdzOiBhbnlbXSk6IHRoaXMge1xuICAgICAgICBzd2l0Y2ggKHR5cGUpIHtcbiAgICAgICAgICAgIGNhc2UgQ29sdW1uVHlwZUVudW0uTnVtYmVyOlxuICAgICAgICAgICAgICAgIHJldHVybiBkaXNwbGF5VHlwZSA9PT0gQ29sdW1uRGlzcGxheVR5cGVFbnVtLkN1cnJlbmN5ID8gdGhpcy5hc0N1cnJlbmN5KC4uLmFyZ3MpIDogdGhpcy5hc051bWJlciguLi5hcmdzKTtcbiAgICAgICAgICAgIGNhc2UgQ29sdW1uVHlwZUVudW0uQm9vbGVhbjpcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5hc0Jvb2xlYW4oLi4uYXJncyk7XG4gICAgICAgICAgICBjYXNlIENvbHVtblR5cGVFbnVtLkRhdGU6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuYXNEYXRlKC4uLmFyZ3MpO1xuICAgICAgICAgICAgY2FzZSBDb2x1bW5UeXBlRW51bS5FbnVtOlxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmFzRW51bShhcmdzWzBdIGFzIEVudW1UeXBlLCBhcmdzWzFdLCBhcmdzWzJdKTtcbiAgICAgICAgICAgIGNhc2UgQ29sdW1uVHlwZUVudW0uQ3VzdG9tOlxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmFzQ3VzdG9tQ29tcG9uZW50KGFyZ3NbMF0pO1xuICAgICAgICAgICAgY2FzZSBDb2x1bW5UeXBlRW51bS5TdHJpbmc6XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIGFzTnVtYmVyKGRpc3BsYXlGb3JtYXQgPSAnMS4wLTAnLCBsb2NhbGU/OiBzdHJpbmcpOiB0aGlzIHtcbiAgICAgICAgdGhpcy5fY29sdW1uVHlwZSA9IENvbHVtblR5cGVFbnVtLk51bWJlcjtcbiAgICAgICAgdGhpcy5fY29sdW1uRGlzcGxheVR5cGUgPSBDb2x1bW5EaXNwbGF5VHlwZUVudW0uTnVtYmVyO1xuICAgICAgICB0aGlzLl9kaXNwbGF5Rm9ybWF0ID0gZGlzcGxheUZvcm1hdDtcbiAgICAgICAgdGhpcy5fbG9jYWxlID0gbG9jYWxlID8/IHRoaXMuX2xvY2FsZTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgcHVibGljIGFzQ3VycmVuY3koY3VycmVuY3lDb2RlPzogc3RyaW5nLCBjdXJyZW5jeUZyb21Qcm9wZXJ0eT86IHN0cmluZywgY3VycmVuY3lEaXNwbGF5PzogJ3N5bWJvbCcgfCAnY29kZScgfCAnbmFtZScsIGRpc3BsYXlGb3JtYXQgPSAnMS4yLTInLCBsb2NhbGU/OiBzdHJpbmcpOiB0aGlzIHtcbiAgICAgICAgdGhpcy5fY29sdW1uVHlwZSA9IENvbHVtblR5cGVFbnVtLk51bWJlcjtcbiAgICAgICAgdGhpcy5fY29sdW1uRGlzcGxheVR5cGUgPSBDb2x1bW5EaXNwbGF5VHlwZUVudW0uQ3VycmVuY3k7XG4gICAgICAgIHRoaXMuX2N1cnJlbmN5Q29kZSA9IGN1cnJlbmN5Q29kZSA/PyB0aGlzLl9jdXJyZW5jeUNvZGU7XG4gICAgICAgIHRoaXMuX2N1cnJlbmN5RnJvbVByb3BlcnR5ID0gY3VycmVuY3lGcm9tUHJvcGVydHkgPz8gdGhpcy5fY3VycmVuY3lGcm9tUHJvcGVydHk7XG4gICAgICAgIHRoaXMuX2N1cnJlbmN5RGlzcGxheSA9IGN1cnJlbmN5RGlzcGxheSA/PyB0aGlzLl9jdXJyZW5jeURpc3BsYXk7XG4gICAgICAgIHRoaXMuX2Rpc3BsYXlGb3JtYXQgPSBkaXNwbGF5Rm9ybWF0ID8/IGRpc3BsYXlGb3JtYXQ7XG4gICAgICAgIHRoaXMuX2xvY2FsZSA9IGxvY2FsZSA/PyB0aGlzLl9sb2NhbGU7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc0RhdGUoZGlzcGxheUZvcm1hdCA9ICdkZC5NTS55eXl5Jyk6IHRoaXMge1xuICAgICAgICB0aGlzLl9jb2x1bW5UeXBlID0gQ29sdW1uVHlwZUVudW0uRGF0ZTtcbiAgICAgICAgdGhpcy5fY29sdW1uRGlzcGxheVR5cGUgPSBDb2x1bW5EaXNwbGF5VHlwZUVudW0uRGF0ZTtcbiAgICAgICAgdGhpcy5fZGlzcGxheUZvcm1hdCA9IGRpc3BsYXlGb3JtYXQ7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc0Jvb2xlYW4oeWVzPzogc3RyaW5nLCBubz86IHN0cmluZywgYXNJY29uID0gZmFsc2UpOiB0aGlzIHtcbiAgICAgICAgdGhpcy5fY29sdW1uVHlwZSA9IENvbHVtblR5cGVFbnVtLkJvb2xlYW47XG4gICAgICAgIHRoaXMuX2NvbHVtbkRpc3BsYXlUeXBlID0gQ29sdW1uRGlzcGxheVR5cGVFbnVtLkJvb2xlYW47XG4gICAgICAgIHRoaXMuX2Jvb2xlYW5Bc0ljb24gPSBhc0ljb247XG4gICAgICAgIHRoaXMuX2Jvb2xlYW5ZZXMgPSB5ZXM7XG4gICAgICAgIHRoaXMuX2Jvb2xlYW5ObyA9IG5vO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBwdWJsaWMgYXNFbnVtKGVudW1UeXBlOiBFbnVtVHlwZSwgbmFtZUFzVmFsdWUgPSBmYWxzZSwgdGl0bGVQYXRoPzogc3RyaW5nIHwgbnVsbCk6IHRoaXMge1xuICAgICAgICB0aGlzLl9jb2x1bW5UeXBlID0gQ29sdW1uVHlwZUVudW0uRW51bTtcbiAgICAgICAgdGhpcy5fY29sdW1uRGlzcGxheVR5cGUgPSBDb2x1bW5EaXNwbGF5VHlwZUVudW0uRW51bTtcbiAgICAgICAgdGhpcy5fZW51bVR5cGUgPSBlbnVtVHlwZTtcbiAgICAgICAgdGhpcy5fZW51bU5hbWVBc1ZhbHVlID0gbmFtZUFzVmFsdWU7XG4gICAgICAgIGlmICh0eXBlb2YgdGl0bGVQYXRoID09PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgdGl0bGVQYXRoID0gVHlwZVV0aWwuZmluZEVudW1OYW1lKGVudW1UeXBlKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9lbnVtVGl0bGVQYXRoID0gdGl0bGVQYXRoO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBwdWJsaWMgYXNDdXN0b21Db21wb25lbnQoY3VzdG9tQ29tcG9uZW50VHlwZTogVHlwZTxJQ29sdW1uVmFsdWVDb21wb25lbnQ8VFQ+Pik6IHRoaXMge1xuICAgICAgICB0aGlzLl9jb2x1bW5UeXBlID0gQ29sdW1uVHlwZUVudW0uQ3VzdG9tO1xuICAgICAgICB0aGlzLl9jb2x1bW5EaXNwbGF5VHlwZSA9IENvbHVtbkRpc3BsYXlUeXBlRW51bS5Db21wb25lbnQ7XG4gICAgICAgIHRoaXMuX2N1c3RvbUNvbXBvbmVudFR5cGUgPSBjdXN0b21Db21wb25lbnRUeXBlO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBwdWJsaWMgYXNIdG1sKCk6IHRoaXMge1xuICAgICAgICB0aGlzLl9jb2x1bW5EaXNwbGF5VHlwZSA9IENvbHVtbkRpc3BsYXlUeXBlRW51bS5IdG1sO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBwdWJsaWMgd2l0aENsYXNzTmFtZShjbGFzc05hbWU/OiBzdHJpbmcsIGhlYWRlckNsYXNzTmFtZT86IHN0cmluZyk6IHRoaXMge1xuICAgICAgICB0aGlzLl9jbGFzc05hbWUgPSBjbGFzc05hbWUgPz8gJyc7XG4gICAgICAgIHRoaXMuX2hlYWRlckNsYXNzTmFtZSA9IGhlYWRlckNsYXNzTmFtZSA/PyAnJztcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgcHVibGljIHdpdGhXaWR0aCh3aWR0aD86IG51bWJlciwgbWluV2lkdGg/OiBudW1iZXIsIG1heFdpZHRoPzogbnVtYmVyKTogdGhpcyB7XG4gICAgICAgIHRoaXMuX3dpZHRoID0gd2lkdGggPz8gbnVsbDtcbiAgICAgICAgdGhpcy5fbWluV2lkdGggPSBtaW5XaWR0aCA/PyBudWxsO1xuICAgICAgICB0aGlzLl9tYXhXaWR0aCA9IG1heFdpZHRoID8/IG51bGw7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHB1YmxpYyB3aXRoT2JqZWN0UHJvcGVydHk8TVQ+KG1vZGVsVHlwZTogQ2xhc3NUeXBlPE1UPiwgdGl0bGVQcm9wZXJ0eT86IHN0cmluZyk6IHRoaXMge1xuICAgICAgICB0aGlzLl9vYmplY3RNb2RlbFR5cGUgPSBtb2RlbFR5cGU7XG4gICAgICAgIGlmICghdGl0bGVQcm9wZXJ0eSkge1xuICAgICAgICAgICAgdGhpcy5fb2JqZWN0VGl0bGVQcm9wZXJ0eSA9IE1vZGVsVXRpbC5maW5kVGl0bGVBdHRyaWJ1dGUobW9kZWxUeXBlKSA/PyB1bmRlZmluZWQ7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLl9vYmplY3RUaXRsZVByb3BlcnR5ID0gdGl0bGVQcm9wZXJ0eTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBwdWJsaWMgd2l0aFRpdGxlKHRpdGxlOiBzdHJpbmcpOiB0aGlzIHtcbiAgICAgICAgdGhpcy5fdGl0bGUgPSB0aXRsZTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgcHVibGljIHdpdGhKc29uUGF0aChwYXRoOiBzdHJpbmcpOiB0aGlzIHtcbiAgICAgICAgdGhpcy5fanNvblBhdGggPSBwYXRoO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBwdWJsaWMgd2l0aEZpbHRlcihmb3JjZVNpbXBsZSA9IGZhbHNlKTogRmlsdGVyRGVzY3JpcHRvcjxhbnk+IHtcbiAgICAgICAgdGhpcy5fZmlsdGVyRGVzY3JpcHRvciA9IG5ldyBGaWx0ZXJEZXNjcmlwdG9yPHVua25vd24+KHRoaXMuX3Byb3BlcnR5KTtcbiAgICAgICAgbGV0IGZpbHRlclR5cGU6IEZpbHRlclR5cGVFbnVtO1xuXG4gICAgICAgIGlmICghZm9yY2VTaW1wbGUgJiYgdGhpcy5fb2JqZWN0TW9kZWxUeXBlKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy53aXRoRmlsdGVyTG9va3VwKCk7XG4gICAgICAgIH1cbiAgICAgICAgc3dpdGNoICh0aGlzLl9jb2x1bW5UeXBlKSB7XG4gICAgICAgICAgICBjYXNlIENvbHVtblR5cGVFbnVtLk51bWJlcjpcbiAgICAgICAgICAgICAgICBmaWx0ZXJUeXBlID0gRmlsdGVyVHlwZUVudW0uTnVtYmVyO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBDb2x1bW5UeXBlRW51bS5Cb29sZWFuOlxuICAgICAgICAgICAgICAgIGZpbHRlclR5cGUgPSBGaWx0ZXJUeXBlRW51bS5Cb29sZWFuO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBDb2x1bW5UeXBlRW51bS5EYXRlOlxuICAgICAgICAgICAgICAgIGZpbHRlclR5cGUgPSBGaWx0ZXJUeXBlRW51bS5EYXRlO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBDb2x1bW5UeXBlRW51bS5FbnVtOlxuICAgICAgICAgICAgICAgIGlmICghZm9yY2VTaW1wbGUpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMud2l0aEZpbHRlckxvb2t1cEVudW0oKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBmaWx0ZXJUeXBlID0gRmlsdGVyVHlwZUVudW0uU3RyaW5nO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlIENvbHVtblR5cGVFbnVtLlN0cmluZzpcbiAgICAgICAgICAgIGNhc2UgQ29sdW1uVHlwZUVudW0uQ3VzdG9tOlxuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICBmaWx0ZXJUeXBlID0gRmlsdGVyVHlwZUVudW0uU3RyaW5nO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fZmlsdGVyRGVzY3JpcHRvci5hc0ZpbHRlclR5cGUoZmlsdGVyVHlwZSk7XG4gICAgICAgIGlmIChmaWx0ZXJUeXBlID09PSBGaWx0ZXJUeXBlRW51bS5OdW1iZXIpIHtcbiAgICAgICAgICAgIGNvbnN0IGRpc3BsYXlGb3JtYXRGcmFjdGlvbnMgPSB0aGlzLl9kaXNwbGF5Rm9ybWF0Py5zcGxpdCgnLicpPy5bMV0/LnNwbGl0KCctJyk7XG4gICAgICAgICAgICBpZiAoZGlzcGxheUZvcm1hdEZyYWN0aW9ucyAmJiBkaXNwbGF5Rm9ybWF0RnJhY3Rpb25zLmxlbmd0aCA+IDIpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9maWx0ZXJEZXNjcmlwdG9yLndpdGhOdW1iZXJGcmFjdGlvbnMocGFyc2VJbnQoZGlzcGxheUZvcm1hdEZyYWN0aW9uc1swXSksIHBhcnNlSW50KGRpc3BsYXlGb3JtYXRGcmFjdGlvbnNbMV0pKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmIChmaWx0ZXJUeXBlID09PSBGaWx0ZXJUeXBlRW51bS5EYXRlKSB7XG4gICAgICAgICAgICBjb25zdCBkaXNwbGF5Rm9ybWF0ID0gdGhpcy5fZGlzcGxheUZvcm1hdDtcbiAgICAgICAgICAgIGlmIChkaXNwbGF5Rm9ybWF0KSB7XG4gICAgICAgICAgICAgICAgY29uc3QgZmlsdGVyRGlzcGxheUZvcm1hdCA9IERhdGVVdGlsLmZyb21QcmltZVRvQW5ndWxhckRhdGVGb3JtYXQoZGlzcGxheUZvcm1hdCk7XG4gICAgICAgICAgICAgICAgdGhpcy5fZmlsdGVyRGVzY3JpcHRvci53aXRoRGF0ZUZvcm1hdChmaWx0ZXJEaXNwbGF5Rm9ybWF0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0aGlzLl9maWx0ZXJEZXNjcmlwdG9yO1xuICAgIH1cblxuICAgIHB1YmxpYyB3aXRoRmlsdGVyTG9va3VwKCk6IEZpbHRlckxvb2t1cERlc2NyaXB0b3I8dW5rbm93bj4ge1xuICAgICAgICBjb25zdCBmaWx0ZXJEZXNjcmlwdG9yID0gbmV3IEZpbHRlckxvb2t1cERlc2NyaXB0b3I8dW5rbm93bj4odGhpcy5fcHJvcGVydHksIHRoaXMuX29iamVjdE1vZGVsVHlwZSA/PyBudWxsKTtcbiAgICAgICAgdGhpcy5fZmlsdGVyRGVzY3JpcHRvciA9IGZpbHRlckRlc2NyaXB0b3I7XG4gICAgICAgIHJldHVybiBmaWx0ZXJEZXNjcmlwdG9yO1xuICAgIH1cblxuICAgIHB1YmxpYyB3aXRoRmlsdGVyTG9va3VwRW51bShvcHRpb25zPzogQXJyYXk8RW51bUNvbnN0YW50VHlwZT4pOiBGaWx0ZXJMb29rdXBFbnVtRGVzY3JpcHRvciB7XG4gICAgICAgIGlmICh0aGlzLl9jb2x1bW5UeXBlICE9PSBDb2x1bW5UeXBlRW51bS5FbnVtIHx8ICF0aGlzLl9lbnVtVHlwZSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IE1uZ0Vycm9ySW50ZXJuYWwoYENvbHVtbiAke3RoaXMuX3Byb3BlcnR5fSBpcyBub3Qgb2YgdHlwZSBlbnVtIG9yIGVudW0gdHlwZSBpcyB1bmRlZmluZWQuYCwgJ0NvbHVtbkRlc2NyaXB0b3IgZXJyb3InKS5jb25zb2xlRXJyb3IoKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBmaWx0ZXJEZXNjcmlwdG9yID0gbmV3IEZpbHRlckxvb2t1cEVudW1EZXNjcmlwdG9yKHRoaXMuX3Byb3BlcnR5LCB0aGlzLl9lbnVtVHlwZSwgb3B0aW9ucywgdGhpcy5fZW51bU5hbWVBc1ZhbHVlLCB0aGlzLl9lbnVtVGl0bGVQYXRoKTtcbiAgICAgICAgdGhpcy5fZmlsdGVyRGVzY3JpcHRvciA9IGZpbHRlckRlc2NyaXB0b3I7XG4gICAgICAgIHJldHVybiBmaWx0ZXJEZXNjcmlwdG9yO1xuICAgIH1cblxuICAgIHB1YmxpYyB3aXRoU29ydChpc0VuYWJsZWQgPSB0cnVlLCBzb3J0UHJvcGVydHk/OiBzdHJpbmcpOiB0aGlzIHtcbiAgICAgICAgdGhpcy5faXNTb3J0RW5hYmxlZCA9IGlzRW5hYmxlZDtcbiAgICAgICAgdGhpcy5fc29ydFByb3BlcnR5ID0gc29ydFByb3BlcnR5O1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBwdWJsaWMgd2l0aERlZmF1bHRTb3J0KGFzYyA9IHRydWUpOiB0aGlzIHtcbiAgICAgICAgdGhpcy5fdGFibGUud2l0aERlZmF1bHRTb3J0KHRoaXMuX3Byb3BlcnR5LCBhc2MpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBwdWJsaWMgd2l0aENvcHlUb0NsaXBib2FyZChoYXNDb3B5VG9DbGlib2FyZCA9IHRydWUpOiB0aGlzIHtcbiAgICAgICAgdGhpcy5faGFzQ29weVRvQ2xpcGJvYXJkID0gaGFzQ29weVRvQ2xpYm9hcmQ7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHB1YmxpYyB3aXRoVGVtcGxhdGUodGVtcGxhdGU6IHN0cmluZyk6IHRoaXMge1xuICAgICAgICB0aGlzLl90ZW1wbGF0ZSA9IHRlbXBsYXRlO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBwdWJsaWMgd2l0aEdldHRlcihnZXR0ZXI/OiAoaXRlbTogVFQsIHZhbHVlPzogVCB8IG51bGwpID0+IHVua25vd24pOiB0aGlzIHtcbiAgICAgICAgdGhpcy5fZ2V0dGVyID0gZ2V0dGVyO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBwdWJsaWMgd2l0aE11bHRpbGluZShpc011bHRpbGluZSA9IHRydWUpOiB0aGlzIHtcbiAgICAgICAgdGhpcy5faXNNdWx0aWxpbmUgPSBpc011bHRpbGluZTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgcHVibGljIHdpdGhWYWx1ZUFzVG9vbHRpcCh2YWx1ZUFzVG9vbHRpcCA9IHRydWUpOiB0aGlzIHtcbiAgICAgICAgdGhpcy5faGFzVmFsdWVBc1Rvb2x0aXAgPSB2YWx1ZUFzVG9vbHRpcDtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgcHVibGljIHdpdGhSZW9yZGVyYWJsZShpc1Jlb3JkZXJhYmxlID0gdHJ1ZSk6IHRoaXMge1xuICAgICAgICB0aGlzLl9pc1Jlb3JkZXJhYmxlID0gaXNSZW9yZGVyYWJsZTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgcHVibGljIHdpdGhUb2dnbGVhYmxlKGlzVG9nZ2xlYWJsZSA9IHRydWUsIGlzVmlzaWJsZSA9IHRydWUpOiB0aGlzIHtcbiAgICAgICAgdGhpcy5faXNUb2dnbGVhYmxlID0gaXNUb2dnbGVhYmxlO1xuICAgICAgICB0aGlzLl9pc1Zpc2libGUgPSBpc1Zpc2libGU7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHB1YmxpYyBsb2NhbGl6ZWQoZXhpc3RzUHJvcGVydHk/OiBzdHJpbmcpOiB0aGlzIHtcbiAgICAgICAgaWYgKGV4aXN0c1Byb3BlcnR5KSB7XG4gICAgICAgICAgICB0aGlzLl9sb2NhbGl6YXRpb25FeGlzdHNQcm9wZXJ0eSA9IGV4aXN0c1Byb3BlcnR5O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5fbG9jYWxpemF0aW9uRXhpc3RzUHJvcGVydHkgPSBgJHt0aGlzLl9wcm9wZXJ0eX1Mb2NhbGl6ZWRgO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHB1YmxpYyBjb3B5KCk6IENvbHVtbkRlc2NyaXB0b3I8VCwgVFQ+IHtcbiAgICAgICAgY29uc3QgZGVzY3JpcHRvciA9IG5ldyBDb2x1bW5EZXNjcmlwdG9yPFQsIFRUPih0aGlzLl90YWJsZSwgdGhpcy5fcHJvcGVydHkpO1xuICAgICAgICB0aGlzLmNvcHlGaWVsZHNUbyhkZXNjcmlwdG9yKTtcbiAgICAgICAgcmV0dXJuIGRlc2NyaXB0b3I7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIGNvcHlGaWVsZHNUbyhvYmo6IENvbHVtbkRlc2NyaXB0b3I8VCwgVFQ+KSB7XG4gICAgICAgIG9iai5fanNvblBhdGggPSB0aGlzLl9qc29uUGF0aDtcbiAgICAgICAgb2JqLl90aXRsZSA9IHRoaXMuX3RpdGxlO1xuICAgICAgICBvYmouX2lzU29ydEVuYWJsZWQgPSB0aGlzLl9pc1NvcnRFbmFibGVkO1xuICAgICAgICBvYmouX3NvcnRQcm9wZXJ0eSA9IHRoaXMuX3NvcnRQcm9wZXJ0eTtcbiAgICAgICAgb2JqLl9jb2x1bW5UeXBlID0gdGhpcy5fY29sdW1uVHlwZTtcbiAgICAgICAgb2JqLl9jb2x1bW5EaXNwbGF5VHlwZSA9IHRoaXMuX2NvbHVtbkRpc3BsYXlUeXBlO1xuICAgICAgICBvYmouX2ZpbHRlckRlc2NyaXB0b3IgPSB0aGlzLl9maWx0ZXJEZXNjcmlwdG9yPy5jb3B5KCk7XG4gICAgICAgIG9iai5fZW51bVR5cGUgPSB0aGlzLl9lbnVtVHlwZTtcbiAgICAgICAgb2JqLl9lbnVtVGl0bGVQYXRoID0gdGhpcy5fZW51bVRpdGxlUGF0aDtcbiAgICAgICAgb2JqLl9lbnVtTmFtZUFzVmFsdWUgPSB0aGlzLl9lbnVtTmFtZUFzVmFsdWU7XG4gICAgICAgIG9iai5fYm9vbGVhbkFzSWNvbiA9IHRoaXMuX2Jvb2xlYW5Bc0ljb247XG4gICAgICAgIG9iai5fYm9vbGVhblllcyA9IHRoaXMuX2Jvb2xlYW5ZZXM7XG4gICAgICAgIG9iai5fYm9vbGVhbk5vID0gdGhpcy5fYm9vbGVhbk5vO1xuICAgICAgICBvYmouX29iamVjdE1vZGVsVHlwZSA9IHRoaXMuX29iamVjdE1vZGVsVHlwZTtcbiAgICAgICAgb2JqLl9vYmplY3RUaXRsZVByb3BlcnR5ID0gdGhpcy5fb2JqZWN0VGl0bGVQcm9wZXJ0eTtcbiAgICAgICAgb2JqLl9sb2NhbGUgPSB0aGlzLl9sb2NhbGU7XG4gICAgICAgIG9iai5fY3VycmVuY3lDb2RlID0gdGhpcy5fY3VycmVuY3lDb2RlO1xuICAgICAgICBvYmouX2N1cnJlbmN5RGlzcGxheSA9IHRoaXMuX2N1cnJlbmN5RGlzcGxheTtcbiAgICAgICAgb2JqLl9jdXJyZW5jeUZyb21Qcm9wZXJ0eSA9IHRoaXMuX2N1cnJlbmN5RnJvbVByb3BlcnR5O1xuICAgICAgICBvYmouX2Rpc3BsYXlGb3JtYXQgPSB0aGlzLl9kaXNwbGF5Rm9ybWF0O1xuICAgICAgICBvYmouX2hlYWRlckNsYXNzTmFtZSA9IHRoaXMuX2hlYWRlckNsYXNzTmFtZTtcbiAgICAgICAgb2JqLl9jbGFzc05hbWUgPSB0aGlzLl9jbGFzc05hbWU7XG4gICAgICAgIG9iai5fd2lkdGggPSB0aGlzLl93aWR0aDtcbiAgICAgICAgb2JqLl9taW5XaWR0aCA9IHRoaXMuX21pbldpZHRoO1xuICAgICAgICBvYmouX21heFdpZHRoID0gdGhpcy5fbWF4V2lkdGg7XG4gICAgICAgIG9iai5fY3VzdG9tQ29tcG9uZW50VHlwZSA9IHRoaXMuX2N1c3RvbUNvbXBvbmVudFR5cGU7XG4gICAgICAgIG9iai5faGFzQ29weVRvQ2xpcGJvYXJkID0gdGhpcy5faGFzQ29weVRvQ2xpcGJvYXJkO1xuICAgICAgICBvYmouX3RlbXBsYXRlID0gdGhpcy5fdGVtcGxhdGU7XG4gICAgICAgIG9iai5fZ2V0dGVyID0gdGhpcy5fZ2V0dGVyO1xuICAgICAgICBvYmouX2lzTXVsdGlsaW5lID0gdGhpcy5faXNNdWx0aWxpbmU7XG4gICAgICAgIG9iai5faGFzVmFsdWVBc1Rvb2x0aXAgPSB0aGlzLl9oYXNWYWx1ZUFzVG9vbHRpcDtcbiAgICAgICAgb2JqLl9pc1Jlb3JkZXJhYmxlID0gdGhpcy5faXNSZW9yZGVyYWJsZTtcbiAgICAgICAgb2JqLl9pc1RvZ2dsZWFibGUgPSB0aGlzLl9pc1RvZ2dsZWFibGU7XG4gICAgICAgIG9iai5faXNWaXNpYmxlID0gdGhpcy5faXNWaXNpYmxlO1xuICAgICAgICBvYmouX2lzTG9jYWxpemVkID0gdGhpcy5faXNMb2NhbGl6ZWQ7XG4gICAgICAgIG9iai5fbG9jYWxpemF0aW9uRXhpc3RzUHJvcGVydHkgPSB0aGlzLl9sb2NhbGl6YXRpb25FeGlzdHNQcm9wZXJ0eTtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBDb2x1bW5EeW5hbWljRGVzY3JpcHRvciBleHRlbmRzIENvbHVtbkRlc2NyaXB0b3I8YW55LCBhbnk+IHtcbiAgICBwcm90ZWN0ZWQgb3ZlcnJpZGUgX3RhYmxlOiBUYWJsZUR5bmFtaWNEZXNjcmlwdG9yO1xuICAgIHByb3RlY3RlZCBvdmVycmlkZSBfdGl0bGU6IHN0cmluZyB8IHVuZGVmaW5lZCA9IHVuZGVmaW5lZDtcbiAgICBwcml2YXRlIF92aXNpYmlsaXR5ID0gdHJ1ZTtcblxuICAgIC8vIHByaXZhdGUgX2ZpbHRlclN0YXR1cztcblxuICAgIGNvbnN0cnVjdG9yKHRhYmxlOiBUYWJsZUR5bmFtaWNEZXNjcmlwdG9yLCBwcm9wZXJ0eTogc3RyaW5nKSB7XG4gICAgICAgIHN1cGVyKHRhYmxlLCBwcm9wZXJ0eSk7XG4gICAgICAgIHRoaXMuX3RhYmxlID0gdGFibGU7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCB2aXNpYmlsaXR5KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fdmlzaWJpbGl0eTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBzZXRzIGNvbHVtbidzIHRpdGxlIGFuZCByZXR1cm5zIHRoaXMgY29sdW1uXG4gICAgICogQHBhcmFtIHRpdGxlIHRpdGxlIHRvIGJlIHNldFxuICAgICAqIEBwYXJhbSBvdmVycmlkZSBzaG91bGQgY29sdW1uIHRpdGxlIGlmIGFsbCByZWFkeSBzZXQ/XG4gICAgICovXG4gICAgcHVibGljIG92ZXJyaWRlIHdpdGhUaXRsZSh0aXRsZTogc3RyaW5nLCBvdmVycmlkZSA9IGZhbHNlKTogdGhpcyB7XG4gICAgICAgIGlmICh0aGlzLl90aXRsZSA9PSBudWxsIHx8IG92ZXJyaWRlKSB7XG4gICAgICAgICAgICB0aGlzLl90aXRsZSA9IHRpdGxlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIGRlZmluZXMgYXV0b21hdGljIHR5cGUgYW5kIHJldHVybnMgdGhpcyBjb2x1bW5cbiAgICAgKiBAcGFyYW0gdmFsdWVcbiAgICAgKi9cbiAgICBwdWJsaWMgd2l0aEF1dG9tYXRpY1R5cGUodmFsdWU6IHN0cmluZyk6IHRoaXMge1xuICAgICAgICBUYWJsZXZpZXdVdGlsLnN0cmluZ0NvbHVtbkNvbnZlcnRlcih0aGlzLCB2YWx1ZSk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIHNldHMgdmlzaWJpbGl0eSBzdGF0ZSBmb3IgY29sdW1uIGFuZCByZXR1cm5zIHRoaXMgY29sdW1uXG4gICAgICogQHBhcmFtIHZpc2liaWxpdHlcbiAgICAgKi9cbiAgICBwdWJsaWMgd2l0aFZpc2liaWxpdHkodmlzaWJpbGl0eTogYm9vbGVhbik6IHRoaXMge1xuICAgICAgICB0aGlzLl92aXNpYmlsaXR5ID0gdmlzaWJpbGl0eTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogY3JlYXRlcyBkZWVwIGNvcHkgb2YgY29sdW1uIGR5bmFtaWMgZGVzY3JpcHRvclxuICAgICAqL1xuICAgIHB1YmxpYyBvdmVycmlkZSBjb3B5KCk6IENvbHVtbkR5bmFtaWNEZXNjcmlwdG9yIHtcbiAgICAgICAgY29uc3QgZGVzY3JpcHRvciA9IG5ldyBDb2x1bW5EeW5hbWljRGVzY3JpcHRvcih0aGlzLl90YWJsZSwgdGhpcy5fcHJvcGVydHkpO1xuICAgICAgICB0aGlzLmNvcHlGaWVsZHNUbyhkZXNjcmlwdG9yKTtcbiAgICAgICAgZGVzY3JpcHRvci5fdGl0bGUgPSB0aGlzLl90aXRsZTtcbiAgICAgICAgZGVzY3JpcHRvci5fdmlzaWJpbGl0eSA9IHRoaXMuX3Zpc2liaWxpdHk7XG4gICAgICAgIHJldHVybiBkZXNjcmlwdG9yO1xuICAgIH1cblxuICAgIHB1YmxpYyB0b0NvbHVtbkRlc2NyaXB0b3IodGFibGVEZXNjcmlwdG9yOiBUYWJsZURlc2NyaXB0b3I8YW55Pik6IENvbHVtbkRlc2NyaXB0b3I8YW55LCBhbnk+IHtcbiAgICAgICAgY29uc3QgZGVzY3JpcHRvciA9IG5ldyBDb2x1bW5EZXNjcmlwdG9yKHRhYmxlRGVzY3JpcHRvciwgdGhpcy5fcHJvcGVydHkpO1xuICAgICAgICB0aGlzLmNvcHlGaWVsZHNUbyhkZXNjcmlwdG9yKTtcbiAgICAgICAgcmV0dXJuIGRlc2NyaXB0b3I7XG4gICAgfVxufVxuIl19
|
|
454
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29sdW1uLmRlc2NyaXB0b3IuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvbGliL2Rlc2NyaXB0b3JzL3RhYmxlL2NvbHVtbi5kZXNjcmlwdG9yLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUVBLE9BQU8sRUFBd0IsZ0JBQWdCLEVBQUMsTUFBTSxjQUFjLENBQUM7QUFFckUsT0FBTyxFQUFDLFNBQVMsRUFBRSxRQUFRLEVBQUMsTUFBTSxhQUFhLENBQUM7QUFDaEQsT0FBTyxFQUFDLFFBQVEsRUFBQyxNQUFNLHVCQUF1QixDQUFDO0FBQy9DLE9BQU8sRUFBQyxhQUFhLEVBQUMsTUFBTSw0QkFBNEIsQ0FBQztBQUN6RCxPQUFPLEVBQUMsZ0JBQWdCLEVBQUUsc0JBQXNCLEVBQUUsMEJBQTBCLEVBQUMsTUFBTSxXQUFXLENBQUM7QUFDL0YsT0FBTyxFQUFDLHFCQUFxQixFQUFFLGNBQWMsRUFBRSxjQUFjLEVBQUMsTUFBTSxVQUFVLENBQUM7QUFHL0UsTUFBTSxPQUFPLGdCQUFnQjtJQXdEekIsWUFBWSxLQUEwQixFQUFFLFFBQWdCO1FBckRoRCxnQkFBVyxHQUFtQixjQUFjLENBQUMsTUFBTSxDQUFDO1FBQ3BELHVCQUFrQixHQUEwQixxQkFBcUIsQ0FBQyxNQUFNLENBQUM7UUFHekUsbUJBQWMsR0FBRyxLQUFLLENBQUM7UUFPdkIsaUJBQVksR0FBRyxLQUFLLENBQUM7UUFDckIsdUJBQWtCLEdBQUcsS0FBSyxDQUFDO1FBQzNCLG1CQUFjLEdBQUcsS0FBSyxDQUFDO1FBQ3ZCLGtCQUFhLEdBQUcsS0FBSyxDQUFDO1FBQ3RCLGVBQVUsR0FBRyxJQUFJLENBQUM7UUFFMUIsVUFBVTtRQUNGLHFCQUFnQixHQUFHLEVBQUUsQ0FBQztRQUN0QixlQUFVLEdBQUcsRUFBRSxDQUFDO1FBQ2hCLFdBQU0sR0FBa0IsSUFBSSxDQUFDO1FBQzdCLGNBQVMsR0FBa0IsSUFBSSxDQUFDO1FBQ2hDLGNBQVMsR0FBa0IsSUFB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QUFTLENBQUMsQ0FBQztRQUM1RSxJQUFJLENBQUMsWUFBWSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQzlCLFVBQVUsQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQztRQUNoQyxVQUFVLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUM7UUFDMUMsT0FBTyxVQUFVLENBQUM7SUFDdEIsQ0FBQztJQUVNLGtCQUFrQixDQUFDLGVBQXFDO1FBQzNELE1BQU0sVUFBVSxHQUFHLElBQUksZ0JBQWdCLENBQUMsZUFBZSxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUN6RSxJQUFJLENBQUMsWUFBWSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQzlCLE9BQU8sVUFBVSxDQUFDO0lBQ3RCLENBQUM7Q0FDSiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7VHlwZX0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmltcG9ydCB7SUNvbHVtblZhbHVlQ29tcG9uZW50LCBNbmdJbnRlcm5hbEVycm9yfSBmcm9tICcuLi8uLi9tb2RlbHMnO1xuaW1wb3J0IHtDbGFzc1R5cGUsIEVudW1Db25zdGFudFR5cGUsIEVudW1UeXBlfSBmcm9tICcuLi8uLi90eXBlcyc7XG5pbXBvcnQge01vZGVsVXRpbCwgVHlwZVV0aWx9IGZyb20gJy4uLy4uL3V0aWxzJztcbmltcG9ydCB7RGF0ZVV0aWx9IGZyb20gJy4uLy4uL3V0aWxzL2RhdGUudXRpbCc7XG5pbXBvcnQge1RhYmxldmlld1V0aWx9IGZyb20gJy4uLy4uL3V0aWxzL3RhYmxldmlldy51dGlsJztcbmltcG9ydCB7RmlsdGVyRGVzY3JpcHRvciwgRmlsdGVyTG9va3VwRGVzY3JpcHRvciwgRmlsdGVyTG9va3VwRW51bURlc2NyaXB0b3J9IGZyb20gJy4uL2ZpbHRlcic7XG5pbXBvcnQge0NvbHVtbkRpc3BsYXlUeXBlRW51bSwgQ29sdW1uVHlwZUVudW0sIEZpbHRlclR5cGVFbnVtfSBmcm9tICcuLi90eXBlcyc7XG5pbXBvcnQge1RhYmxlRGVzY3JpcHRvciwgVGFibGVEeW5hbWljRGVzY3JpcHRvcn0gZnJvbSAnLi90YWJsZS5kZXNjcmlwdG9yJztcblxuZXhwb3J0IGNsYXNzIENvbHVtbkRlc2NyaXB0b3I8VCwgVFQ+IHtcbiAgICBwcm90ZWN0ZWQgcmVhZG9ubHkgX3RhYmxlOiBUYWJsZURlc2NyaXB0b3I8VFQ+O1xuICAgIHByb3RlY3RlZCByZWFkb25seSBfcHJvcGVydHk6IHN0cmluZztcbiAgICBwcml2YXRlIF9jb2x1bW5UeXBlOiBDb2x1bW5UeXBlRW51bSA9IENvbHVtblR5cGVFbnVtLlN0cmluZztcbiAgICBwcml2YXRlIF9jb2x1bW5EaXNwbGF5VHlwZTogQ29sdW1uRGlzcGxheVR5cGVFbnVtID0gQ29sdW1uRGlzcGxheVR5cGVFbnVtLlN0cmluZztcbiAgICBwcm90ZWN0ZWQgX3RpdGxlPzogc3RyaW5nO1xuICAgIHByaXZhdGUgX2pzb25QYXRoPzogc3RyaW5nO1xuICAgIHByaXZhdGUgX2lzU29ydEVuYWJsZWQgPSBmYWxzZTtcbiAgICBwcml2YXRlIF9zb3J0UHJvcGVydHk/OiBzdHJpbmc7XG4gICAgcHJpdmF0ZSBfZmlsdGVyRGVzY3JpcHRvcj86IEZpbHRlckRlc2NyaXB0b3I8dW5rbm93bj47XG4gICAgcHJpdmF0ZSBfZGlzcGxheUZvcm1hdD86IHN0cmluZztcbiAgICBwcml2YXRlIF9sb2NhbGU/OiBzdHJpbmc7XG4gICAgcHJpdmF0ZSBfdGVtcGxhdGU/OiBzdHJpbmc7XG4gICAgcHJpdmF0ZSBfZ2V0dGVyPzogKGl0ZW06IFRULCB2YWx1ZT86IFQgfCBudWxsKSA9PiB1bmtub3duO1xuICAgIHByaXZhdGUgX2lzTXVsdGlsaW5lID0gZmFsc2U7XG4gICAgcHJpdmF0ZSBfaGFzVmFsdWVBc1Rvb2x0aXAgPSBmYWxzZTtcbiAgICBwcml2YXRlIF9pc1Jlb3JkZXJhYmxlID0gZmFsc2U7XG4gICAgcHJpdmF0ZSBfaXNUb2dnbGVhYmxlID0gZmFsc2U7XG4gICAgcHJpdmF0ZSBfaXNWaXNpYmxlID0gdHJ1ZTtcblxuICAgIC8vIHN0eWxpbmdcbiAgICBwcml2YXRlIF9oZWFkZXJDbGFzc05hbWUgPSAnJztcbiAgICBwcml2YXRlIF9jbGFzc05hbWUgPSAnJztcbiAgICBwcml2YXRlIF93aWR0aDogbnVtYmVyIHwgbnVsbCA9IG51bGw7XG4gICAgcHJpdmF0ZSBfbWluV2lkdGg6IG51bWJlciB8IG51bGwgPSBudWxsO1xuICAgIHByaXZhdGUgX21heFdpZHRoOiBudW1iZXIgfCBudWxsID0gbnVsbDtcblxuICAgIC8vIGVudW0gc3BlY2lmaWNzXG4gICAgcHJpdmF0ZSBfZW51bVR5cGU/OiBFbnVtVHlwZTtcbiAgICBwcml2YXRlIF9lbnVtVGl0bGVQYXRoPzogc3RyaW5nIHwgbnVsbDtcbiAgICBwcml2YXRlIF9lbnVtTmFtZUFzVmFsdWUgPSBmYWxzZTtcblxuICAgIC8vIGJvb2xlYW4gc3BlY2lmaWNzXG4gICAgcHJpdmF0ZSBfYm9vbGVhbkFzSWNvbiA9IGZhbHNlO1xuICAgIHByaXZhdGUgX2Jvb2xlYW5ZZXM/OiBzdHJpbmc7XG4gICAgcHJpdmF0ZSBfYm9vbGVhbk5vPzogc3RyaW5nO1xuXG4gICAgLy8gbW9kZWwgc3BlY2lmaWNzXG4gICAgcHJpdmF0ZSBfb2JqZWN0TW9kZWxUeXBlPzogQ2xhc3NUeXBlPHVua25vd24+O1xuICAgIHByaXZhdGUgX29iamVjdFRpdGxlUHJvcGVydHk/OiBzdHJpbmc7XG5cbiAgICAvLyBjdXJyZW5jeSBzcGVjaWZpY3NcbiAgICBwcml2YXRlIF9jdXJyZW5jeUNvZGU/OiBzdHJpbmc7XG4gICAgcHJpdmF0ZSBfY3VycmVuY3lGcm9tUHJvcGVydHk/OiBzdHJpbmc7XG4gICAgcHJpdmF0ZSBfY3VycmVuY3lEaXNwbGF5PzogJ3N5bWJvbCcgfCAnY29kZScgfCAnbmFtZSc7XG5cbiAgICAvLyBjdXN0b20gc3BlY2lmaWNzXG4gICAgcHJpdmF0ZSBfY3VzdG9tQ29tcG9uZW50VHlwZT86IFR5cGU8SUNvbHVtblZhbHVlQ29tcG9uZW50PFRUPj47XG5cbiAgICAvLyBoZWxwZXJzXG4gICAgcHJpdmF0ZSBfaGFzQ29weVRvQ2xpcGJvYXJkID0gZmFsc2U7XG5cbiAgICAvLyBsb2NhbGl6YXRpb25cbiAgICBwcml2YXRlIF9pc0xvY2FsaXplZCA9IGZhbHNlO1xuICAgIHByaXZhdGUgX2xvY2FsaXphdGlvbkV4aXN0c1Byb3BlcnR5Pzogc3RyaW5nO1xuXG4gICAgY29uc3RydWN0b3IodGFibGU6IFRhYmxlRGVzY3JpcHRvcjxUVD4sIHByb3BlcnR5OiBzdHJpbmcpIHtcbiAgICAgICAgdGhpcy5fdGFibGUgPSB0YWJsZTtcbiAgICAgICAgdGhpcy5fcHJvcGVydHkgPSBwcm9wZXJ0eTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGNvbHVtblR5cGUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9jb2x1bW5UeXBlO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgY29sdW1uRGlzcGxheVR5cGUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9jb2x1bW5EaXNwbGF5VHlwZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IHRpdGxlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fdGl0bGU7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBqc29uUGF0aCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2pzb25QYXRoO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgaXNTb3J0RW5hYmxlZCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2lzU29ydEVuYWJsZWQ7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBzb3J0UHJvcGVydHkoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9zb3J0UHJvcGVydHk7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBmaWx0ZXJEZXNjcmlwdG9yKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fZmlsdGVyRGVzY3JpcHRvcjtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGRpc3BsYXlGb3JtYXQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9kaXNwbGF5Rm9ybWF0O1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgdGFibGUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl90YWJsZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IHByb3BlcnR5KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fcHJvcGVydHk7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBoZWFkZXJDbGFzc05hbWUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9oZWFkZXJDbGFzc05hbWU7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBjbGFzc05hbWUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9jbGFzc05hbWU7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCB3aWR0aCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3dpZHRoO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgbWluV2lkdGgoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9taW5XaWR0aDtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IG1heFdpZHRoKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fbWF4V2lkdGg7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBlbnVtVHlwZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2VudW1UeXBlO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgZW51bVRpdGxlUGF0aCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2VudW1UaXRsZVBhdGg7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBlbnVtTmFtZUFzVmFsdWUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9lbnVtTmFtZUFzVmFsdWU7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBib29sZWFuQXNJY29uKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fYm9vbGVhbkFzSWNvbjtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGJvb2xlYW5ZZXMoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9ib29sZWFuWWVzO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgYm9vbGVhbk5vKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fYm9vbGVhbk5vO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgb2JqZWN0TW9kZWxUeXBlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fb2JqZWN0TW9kZWxUeXBlO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgb2JqZWN0VGl0bGVQcm9wZXJ0eSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX29iamVjdFRpdGxlUHJvcGVydHk7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBjdXN0b21Db21wb25lbnRUeXBlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fY3VzdG9tQ29tcG9uZW50VHlwZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGxvY2FsZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2xvY2FsZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGN1cnJlbmN5Q29kZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2N1cnJlbmN5Q29kZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGN1cnJlbmN5RGlzcGxheSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2N1cnJlbmN5RGlzcGxheTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGN1cnJlbmN5RnJvbVByb3BlcnR5KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fY3VycmVuY3lGcm9tUHJvcGVydHk7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBoYXNDb3B5VG9DbGlwYm9hcmQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9oYXNDb3B5VG9DbGlwYm9hcmQ7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCB0ZW1wbGF0ZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3RlbXBsYXRlO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgZ2V0dGVyKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fZ2V0dGVyO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgaXNNdWx0aWxpbmUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9pc011bHRpbGluZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGhhc1ZhbHVlQXNUb29sdGlwKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5faGFzVmFsdWVBc1Rvb2x0aXA7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBpc1Jlb3JkZXJhYmxlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5faXNSZW9yZGVyYWJsZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGlzVG9nZ2xlYWJsZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2lzVG9nZ2xlYWJsZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGlzVmlzaWJsZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2lzVmlzaWJsZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGlzTG9jYWxpemVkKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5faXNMb2NhbGl6ZWQ7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBsb2NhbGl6YXRpb25FeGlzdHNQcm9wZXJ0eSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2xvY2FsaXphdGlvbkV4aXN0c1Byb3BlcnR5O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIGNvbnZlcnRzIGNvbHVtbiB0byBnaXZlbiB0eXBlIHdpdGggYWRkaXRpb25hbCBhcmd1bWVudHNcbiAgICAgKiBAcGFyYW0gdHlwZSBjb2x1bW4gdHlwZSBlbnVtXG4gICAgICogQHBhcmFtIGFyZ3MgYW55IGFkZGl0aW9uYWwgYXJndW1lbnRzIGZvciBjb2x1bW4gKG9wdGlvbmFsKVxuICAgICAqL1xuICAgIHB1YmxpYyBhc1R5cGUodHlwZTogQ29sdW1uVHlwZUVudW0sIGRpc3BsYXlUeXBlPzogQ29sdW1uRGlzcGxheVR5cGVFbnVtLCAuLi5hcmdzOiBhbnlbXSk6IHRoaXMge1xuICAgICAgICBzd2l0Y2ggKHR5cGUpIHtcbiAgICAgICAgICAgIGNhc2UgQ29sdW1uVHlwZUVudW0uTnVtYmVyOlxuICAgICAgICAgICAgICAgIHJldHVybiBkaXNwbGF5VHlwZSA9PT0gQ29sdW1uRGlzcGxheVR5cGVFbnVtLkN1cnJlbmN5ID8gdGhpcy5hc0N1cnJlbmN5KC4uLmFyZ3MpIDogdGhpcy5hc051bWJlciguLi5hcmdzKTtcbiAgICAgICAgICAgIGNhc2UgQ29sdW1uVHlwZUVudW0uQm9vbGVhbjpcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5hc0Jvb2xlYW4oLi4uYXJncyk7XG4gICAgICAgICAgICBjYXNlIENvbHVtblR5cGVFbnVtLkRhdGU6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuYXNEYXRlKC4uLmFyZ3MpO1xuICAgICAgICAgICAgY2FzZSBDb2x1bW5UeXBlRW51bS5FbnVtOlxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmFzRW51bShhcmdzWzBdIGFzIEVudW1UeXBlLCBhcmdzWzFdLCBhcmdzWzJdKTtcbiAgICAgICAgICAgIGNhc2UgQ29sdW1uVHlwZUVudW0uQ3VzdG9tOlxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmFzQ3VzdG9tQ29tcG9uZW50KGFyZ3NbMF0pO1xuICAgICAgICAgICAgY2FzZSBDb2x1bW5UeXBlRW51bS5TdHJpbmc6XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIGFzTnVtYmVyKGRpc3BsYXlGb3JtYXQgPSAnMS4wLTAnLCBsb2NhbGU/OiBzdHJpbmcpOiB0aGlzIHtcbiAgICAgICAgdGhpcy5fY29sdW1uVHlwZSA9IENvbHVtblR5cGVFbnVtLk51bWJlcjtcbiAgICAgICAgdGhpcy5fY29sdW1uRGlzcGxheVR5cGUgPSBDb2x1bW5EaXNwbGF5VHlwZUVudW0uTnVtYmVyO1xuICAgICAgICB0aGlzLl9kaXNwbGF5Rm9ybWF0ID0gZGlzcGxheUZvcm1hdDtcbiAgICAgICAgdGhpcy5fbG9jYWxlID0gbG9jYWxlID8/IHRoaXMuX2xvY2FsZTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgcHVibGljIGFzQ3VycmVuY3koY3VycmVuY3lDb2RlPzogc3RyaW5nLCBjdXJyZW5jeUZyb21Qcm9wZXJ0eT86IHN0cmluZywgY3VycmVuY3lEaXNwbGF5PzogJ3N5bWJvbCcgfCAnY29kZScgfCAnbmFtZScsIGRpc3BsYXlGb3JtYXQgPSAnMS4yLTInLCBsb2NhbGU/OiBzdHJpbmcpOiB0aGlzIHtcbiAgICAgICAgdGhpcy5fY29sdW1uVHlwZSA9IENvbHVtblR5cGVFbnVtLk51bWJlcjtcbiAgICAgICAgdGhpcy5fY29sdW1uRGlzcGxheVR5cGUgPSBDb2x1bW5EaXNwbGF5VHlwZUVudW0uQ3VycmVuY3k7XG4gICAgICAgIHRoaXMuX2N1cnJlbmN5Q29kZSA9IGN1cnJlbmN5Q29kZSA/PyB0aGlzLl9jdXJyZW5jeUNvZGU7XG4gICAgICAgIHRoaXMuX2N1cnJlbmN5RnJvbVByb3BlcnR5ID0gY3VycmVuY3lGcm9tUHJvcGVydHkgPz8gdGhpcy5fY3VycmVuY3lGcm9tUHJvcGVydHk7XG4gICAgICAgIHRoaXMuX2N1cnJlbmN5RGlzcGxheSA9IGN1cnJlbmN5RGlzcGxheSA/PyB0aGlzLl9jdXJyZW5jeURpc3BsYXk7XG4gICAgICAgIHRoaXMuX2Rpc3BsYXlGb3JtYXQgPSBkaXNwbGF5Rm9ybWF0ID8/IGRpc3BsYXlGb3JtYXQ7XG4gICAgICAgIHRoaXMuX2xvY2FsZSA9IGxvY2FsZSA/PyB0aGlzLl9sb2NhbGU7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc0RhdGUoZGlzcGxheUZvcm1hdCA9ICdkZC5NTS55eXl5Jyk6IHRoaXMge1xuICAgICAgICB0aGlzLl9jb2x1bW5UeXBlID0gQ29sdW1uVHlwZUVudW0uRGF0ZTtcbiAgICAgICAgdGhpcy5fY29sdW1uRGlzcGxheVR5cGUgPSBDb2x1bW5EaXNwbGF5VHlwZUVudW0uRGF0ZTtcbiAgICAgICAgdGhpcy5fZGlzcGxheUZvcm1hdCA9IGRpc3BsYXlGb3JtYXQ7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc0Jvb2xlYW4oeWVzPzogc3RyaW5nLCBubz86IHN0cmluZywgYXNJY29uID0gZmFsc2UpOiB0aGlzIHtcbiAgICAgICAgdGhpcy5fY29sdW1uVHlwZSA9IENvbHVtblR5cGVFbnVtLkJvb2xlYW47XG4gICAgICAgIHRoaXMuX2NvbHVtbkRpc3BsYXlUeXBlID0gQ29sdW1uRGlzcGxheVR5cGVFbnVtLkJvb2xlYW47XG4gICAgICAgIHRoaXMuX2Jvb2xlYW5Bc0ljb24gPSBhc0ljb247XG4gICAgICAgIHRoaXMuX2Jvb2xlYW5ZZXMgPSB5ZXM7XG4gICAgICAgIHRoaXMuX2Jvb2xlYW5ObyA9IG5vO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBwdWJsaWMgYXNFbnVtKGVudW1UeXBlOiBFbnVtVHlwZSwgbmFtZUFzVmFsdWUgPSBmYWxzZSwgdGl0bGVQYXRoPzogc3RyaW5nIHwgbnVsbCk6IHRoaXMge1xuICAgICAgICB0aGlzLl9jb2x1bW5UeXBlID0gQ29sdW1uVHlwZUVudW0uRW51bTtcbiAgICAgICAgdGhpcy5fY29sdW1uRGlzcGxheVR5cGUgPSBDb2x1bW5EaXNwbGF5VHlwZUVudW0uRW51bTtcbiAgICAgICAgdGhpcy5fZW51bVR5cGUgPSBlbnVtVHlwZTtcbiAgICAgICAgdGhpcy5fZW51bU5hbWVBc1ZhbHVlID0gbmFtZUFzVmFsdWU7XG4gICAgICAgIGlmICh0eXBlb2YgdGl0bGVQYXRoID09PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgdGl0bGVQYXRoID0gVHlwZVV0aWwuZmluZEVudW1OYW1lKGVudW1UeXBlKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9lbnVtVGl0bGVQYXRoID0gdGl0bGVQYXRoO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBwdWJsaWMgYXNDdXN0b21Db21wb25lbnQoY3VzdG9tQ29tcG9uZW50VHlwZTogVHlwZTxJQ29sdW1uVmFsdWVDb21wb25lbnQ8VFQ+Pik6IHRoaXMge1xuICAgICAgICB0aGlzLl9jb2x1bW5UeXBlID0gQ29sdW1uVHlwZUVudW0uQ3VzdG9tO1xuICAgICAgICB0aGlzLl9jb2x1bW5EaXNwbGF5VHlwZSA9IENvbHVtbkRpc3BsYXlUeXBlRW51bS5Db21wb25lbnQ7XG4gICAgICAgIHRoaXMuX2N1c3RvbUNvbXBvbmVudFR5cGUgPSBjdXN0b21Db21wb25lbnRUeXBlO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBwdWJsaWMgYXNIdG1sKCk6IHRoaXMge1xuICAgICAgICB0aGlzLl9jb2x1bW5EaXNwbGF5VHlwZSA9IENvbHVtbkRpc3BsYXlUeXBlRW51bS5IdG1sO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBwdWJsaWMgd2l0aENsYXNzTmFtZShjbGFzc05hbWU/OiBzdHJpbmcsIGhlYWRlckNsYXNzTmFtZT86IHN0cmluZyk6IHRoaXMge1xuICAgICAgICB0aGlzLl9jbGFzc05hbWUgPSBjbGFzc05hbWUgPz8gJyc7XG4gICAgICAgIHRoaXMuX2hlYWRlckNsYXNzTmFtZSA9IGhlYWRlckNsYXNzTmFtZSA/PyAnJztcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgcHVibGljIHdpdGhXaWR0aCh3aWR0aD86IG51bWJlciwgbWluV2lkdGg/OiBudW1iZXIsIG1heFdpZHRoPzogbnVtYmVyKTogdGhpcyB7XG4gICAgICAgIHRoaXMuX3dpZHRoID0gd2lkdGggPz8gbnVsbDtcbiAgICAgICAgdGhpcy5fbWluV2lkdGggPSBtaW5XaWR0aCA/PyBudWxsO1xuICAgICAgICB0aGlzLl9tYXhXaWR0aCA9IG1heFdpZHRoID8/IG51bGw7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHB1YmxpYyB3aXRoT2JqZWN0UHJvcGVydHk8TVQ+KG1vZGVsVHlwZTogQ2xhc3NUeXBlPE1UPiwgdGl0bGVQcm9wZXJ0eT86IHN0cmluZyk6IHRoaXMge1xuICAgICAgICB0aGlzLl9vYmplY3RNb2RlbFR5cGUgPSBtb2RlbFR5cGU7XG4gICAgICAgIGlmICghdGl0bGVQcm9wZXJ0eSkge1xuICAgICAgICAgICAgdGhpcy5fb2JqZWN0VGl0bGVQcm9wZXJ0eSA9IE1vZGVsVXRpbC5maW5kVGl0bGVBdHRyaWJ1dGUobW9kZWxUeXBlKSA/PyB1bmRlZmluZWQ7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLl9vYmplY3RUaXRsZVByb3BlcnR5ID0gdGl0bGVQcm9wZXJ0eTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBwdWJsaWMgd2l0aFRpdGxlKHRpdGxlOiBzdHJpbmcpOiB0aGlzIHtcbiAgICAgICAgdGhpcy5fdGl0bGUgPSB0aXRsZTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgcHVibGljIHdpdGhKc29uUGF0aChwYXRoOiBzdHJpbmcpOiB0aGlzIHtcbiAgICAgICAgdGhpcy5fanNvblBhdGggPSBwYXRoO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBwdWJsaWMgd2l0aEZpbHRlcihmb3JjZVNpbXBsZSA9IGZhbHNlKTogRmlsdGVyRGVzY3JpcHRvcjxhbnk+IHtcbiAgICAgICAgdGhpcy5fZmlsdGVyRGVzY3JpcHRvciA9IG5ldyBGaWx0ZXJEZXNjcmlwdG9yPHVua25vd24+KHRoaXMuX3Byb3BlcnR5KTtcbiAgICAgICAgbGV0IGZpbHRlclR5cGU6IEZpbHRlclR5cGVFbnVtO1xuXG4gICAgICAgIGlmICghZm9yY2VTaW1wbGUgJiYgdGhpcy5fb2JqZWN0TW9kZWxUeXBlKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy53aXRoRmlsdGVyTG9va3VwKCk7XG4gICAgICAgIH1cbiAgICAgICAgc3dpdGNoICh0aGlzLl9jb2x1bW5UeXBlKSB7XG4gICAgICAgICAgICBjYXNlIENvbHVtblR5cGVFbnVtLk51bWJlcjpcbiAgICAgICAgICAgICAgICBmaWx0ZXJUeXBlID0gRmlsdGVyVHlwZUVudW0uTnVtYmVyO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBDb2x1bW5UeXBlRW51bS5Cb29sZWFuOlxuICAgICAgICAgICAgICAgIGZpbHRlclR5cGUgPSBGaWx0ZXJUeXBlRW51bS5Cb29sZWFuO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBDb2x1bW5UeXBlRW51bS5EYXRlOlxuICAgICAgICAgICAgICAgIGZpbHRlclR5cGUgPSBGaWx0ZXJUeXBlRW51bS5EYXRlO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBDb2x1bW5UeXBlRW51bS5FbnVtOlxuICAgICAgICAgICAgICAgIGlmICghZm9yY2VTaW1wbGUpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMud2l0aEZpbHRlckxvb2t1cEVudW0oKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBmaWx0ZXJUeXBlID0gRmlsdGVyVHlwZUVudW0uU3RyaW5nO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlIENvbHVtblR5cGVFbnVtLlN0cmluZzpcbiAgICAgICAgICAgIGNhc2UgQ29sdW1uVHlwZUVudW0uQ3VzdG9tOlxuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICBmaWx0ZXJUeXBlID0gRmlsdGVyVHlwZUVudW0uU3RyaW5nO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fZmlsdGVyRGVzY3JpcHRvci5hc0ZpbHRlclR5cGUoZmlsdGVyVHlwZSk7XG4gICAgICAgIGlmIChmaWx0ZXJUeXBlID09PSBGaWx0ZXJUeXBlRW51bS5OdW1iZXIpIHtcbiAgICAgICAgICAgIGNvbnN0IGRpc3BsYXlGb3JtYXRGcmFjdGlvbnMgPSB0aGlzLl9kaXNwbGF5Rm9ybWF0Py5zcGxpdCgnLicpPy5bMV0/LnNwbGl0KCctJyk7XG4gICAgICAgICAgICBpZiAoZGlzcGxheUZvcm1hdEZyYWN0aW9ucyAmJiBkaXNwbGF5Rm9ybWF0RnJhY3Rpb25zLmxlbmd0aCA+IDIpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9maWx0ZXJEZXNjcmlwdG9yLndpdGhOdW1iZXJGcmFjdGlvbnMocGFyc2VJbnQoZGlzcGxheUZvcm1hdEZyYWN0aW9uc1swXSksIHBhcnNlSW50KGRpc3BsYXlGb3JtYXRGcmFjdGlvbnNbMV0pKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmIChmaWx0ZXJUeXBlID09PSBGaWx0ZXJUeXBlRW51bS5EYXRlKSB7XG4gICAgICAgICAgICBjb25zdCBkaXNwbGF5Rm9ybWF0ID0gdGhpcy5fZGlzcGxheUZvcm1hdDtcbiAgICAgICAgICAgIGlmIChkaXNwbGF5Rm9ybWF0KSB7XG4gICAgICAgICAgICAgICAgY29uc3QgZmlsdGVyRGlzcGxheUZvcm1hdCA9IERhdGVVdGlsLmZyb21QcmltZVRvQW5ndWxhckRhdGVGb3JtYXQoZGlzcGxheUZvcm1hdCk7XG4gICAgICAgICAgICAgICAgdGhpcy5fZmlsdGVyRGVzY3JpcHRvci53aXRoRGF0ZUZvcm1hdChmaWx0ZXJEaXNwbGF5Rm9ybWF0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0aGlzLl9maWx0ZXJEZXNjcmlwdG9yO1xuICAgIH1cblxuICAgIHB1YmxpYyB3aXRoRmlsdGVyTG9va3VwKCk6IEZpbHRlckxvb2t1cERlc2NyaXB0b3I8dW5rbm93bj4ge1xuICAgICAgICBjb25zdCBmaWx0ZXJEZXNjcmlwdG9yID0gbmV3IEZpbHRlckxvb2t1cERlc2NyaXB0b3I8dW5rbm93bj4odGhpcy5fcHJvcGVydHksIHRoaXMuX29iamVjdE1vZGVsVHlwZSA/PyBudWxsKTtcbiAgICAgICAgdGhpcy5fZmlsdGVyRGVzY3JpcHRvciA9IGZpbHRlckRlc2NyaXB0b3I7XG4gICAgICAgIHJldHVybiBmaWx0ZXJEZXNjcmlwdG9yO1xuICAgIH1cblxuICAgIHB1YmxpYyB3aXRoRmlsdGVyTG9va3VwRW51bShvcHRpb25zPzogQXJyYXk8RW51bUNvbnN0YW50VHlwZT4pOiBGaWx0ZXJMb29rdXBFbnVtRGVzY3JpcHRvciB7XG4gICAgICAgIGlmICh0aGlzLl9jb2x1bW5UeXBlICE9PSBDb2x1bW5UeXBlRW51bS5FbnVtIHx8ICF0aGlzLl9lbnVtVHlwZSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IE1uZ0ludGVybmFsRXJyb3IoYENvbHVtbiAke3RoaXMuX3Byb3BlcnR5fSBpcyBub3Qgb2YgdHlwZSBlbnVtIG9yIGVudW0gdHlwZSBpcyB1bmRlZmluZWQuYCwgJ0NvbHVtbkRlc2NyaXB0b3IgZXJyb3InKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBmaWx0ZXJEZXNjcmlwdG9yID0gbmV3IEZpbHRlckxvb2t1cEVudW1EZXNjcmlwdG9yKHRoaXMuX3Byb3BlcnR5LCB0aGlzLl9lbnVtVHlwZSwgb3B0aW9ucywgdGhpcy5fZW51bU5hbWVBc1ZhbHVlLCB0aGlzLl9lbnVtVGl0bGVQYXRoKTtcbiAgICAgICAgdGhpcy5fZmlsdGVyRGVzY3JpcHRvciA9IGZpbHRlckRlc2NyaXB0b3I7XG4gICAgICAgIHJldHVybiBmaWx0ZXJEZXNjcmlwdG9yO1xuICAgIH1cblxuICAgIHB1YmxpYyB3aXRoU29ydChpc0VuYWJsZWQgPSB0cnVlLCBzb3J0UHJvcGVydHk/OiBzdHJpbmcpOiB0aGlzIHtcbiAgICAgICAgdGhpcy5faXNTb3J0RW5hYmxlZCA9IGlzRW5hYmxlZDtcbiAgICAgICAgdGhpcy5fc29ydFByb3BlcnR5ID0gc29ydFByb3BlcnR5O1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBwdWJsaWMgd2l0aERlZmF1bHRTb3J0KGFzYyA9IHRydWUpOiB0aGlzIHtcbiAgICAgICAgdGhpcy5fdGFibGUud2l0aERlZmF1bHRTb3J0KHRoaXMuX3Byb3BlcnR5LCBhc2MpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBwdWJsaWMgd2l0aENvcHlUb0NsaXBib2FyZChoYXNDb3B5VG9DbGlib2FyZCA9IHRydWUpOiB0aGlzIHtcbiAgICAgICAgdGhpcy5faGFzQ29weVRvQ2xpcGJvYXJkID0gaGFzQ29weVRvQ2xpYm9hcmQ7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHB1YmxpYyB3aXRoVGVtcGxhdGUodGVtcGxhdGU6IHN0cmluZyk6IHRoaXMge1xuICAgICAgICB0aGlzLl90ZW1wbGF0ZSA9IHRlbXBsYXRlO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBwdWJsaWMgd2l0aEdldHRlcihnZXR0ZXI/OiAoaXRlbTogVFQsIHZhbHVlPzogVCB8IG51bGwpID0+IHVua25vd24pOiB0aGlzIHtcbiAgICAgICAgdGhpcy5fZ2V0dGVyID0gZ2V0dGVyO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBwdWJsaWMgd2l0aE11bHRpbGluZShpc011bHRpbGluZSA9IHRydWUpOiB0aGlzIHtcbiAgICAgICAgdGhpcy5faXNNdWx0aWxpbmUgPSBpc011bHRpbGluZTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgcHVibGljIHdpdGhWYWx1ZUFzVG9vbHRpcCh2YWx1ZUFzVG9vbHRpcCA9IHRydWUpOiB0aGlzIHtcbiAgICAgICAgdGhpcy5faGFzVmFsdWVBc1Rvb2x0aXAgPSB2YWx1ZUFzVG9vbHRpcDtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgcHVibGljIHdpdGhSZW9yZGVyYWJsZShpc1Jlb3JkZXJhYmxlID0gdHJ1ZSk6IHRoaXMge1xuICAgICAgICB0aGlzLl9pc1Jlb3JkZXJhYmxlID0gaXNSZW9yZGVyYWJsZTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgcHVibGljIHdpdGhUb2dnbGVhYmxlKGlzVG9nZ2xlYWJsZSA9IHRydWUsIGlzVmlzaWJsZSA9IHRydWUpOiB0aGlzIHtcbiAgICAgICAgdGhpcy5faXNUb2dnbGVhYmxlID0gaXNUb2dnbGVhYmxlO1xuICAgICAgICB0aGlzLl9pc1Zpc2libGUgPSBpc1Zpc2libGU7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHB1YmxpYyBsb2NhbGl6ZWQoZXhpc3RzUHJvcGVydHk/OiBzdHJpbmcpOiB0aGlzIHtcbiAgICAgICAgaWYgKGV4aXN0c1Byb3BlcnR5KSB7XG4gICAgICAgICAgICB0aGlzLl9sb2NhbGl6YXRpb25FeGlzdHNQcm9wZXJ0eSA9IGV4aXN0c1Byb3BlcnR5O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5fbG9jYWxpemF0aW9uRXhpc3RzUHJvcGVydHkgPSBgJHt0aGlzLl9wcm9wZXJ0eX1Mb2NhbGl6ZWRgO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHB1YmxpYyBjb3B5KCk6IENvbHVtbkRlc2NyaXB0b3I8VCwgVFQ+IHtcbiAgICAgICAgY29uc3QgZGVzY3JpcHRvciA9IG5ldyBDb2x1bW5EZXNjcmlwdG9yPFQsIFRUPih0aGlzLl90YWJsZSwgdGhpcy5fcHJvcGVydHkpO1xuICAgICAgICB0aGlzLmNvcHlGaWVsZHNUbyhkZXNjcmlwdG9yKTtcbiAgICAgICAgcmV0dXJuIGRlc2NyaXB0b3I7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIGNvcHlGaWVsZHNUbyhvYmo6IENvbHVtbkRlc2NyaXB0b3I8VCwgVFQ+KSB7XG4gICAgICAgIG9iai5fanNvblBhdGggPSB0aGlzLl9qc29uUGF0aDtcbiAgICAgICAgb2JqLl90aXRsZSA9IHRoaXMuX3RpdGxlO1xuICAgICAgICBvYmouX2lzU29ydEVuYWJsZWQgPSB0aGlzLl9pc1NvcnRFbmFibGVkO1xuICAgICAgICBvYmouX3NvcnRQcm9wZXJ0eSA9IHRoaXMuX3NvcnRQcm9wZXJ0eTtcbiAgICAgICAgb2JqLl9jb2x1bW5UeXBlID0gdGhpcy5fY29sdW1uVHlwZTtcbiAgICAgICAgb2JqLl9jb2x1bW5EaXNwbGF5VHlwZSA9IHRoaXMuX2NvbHVtbkRpc3BsYXlUeXBlO1xuICAgICAgICBvYmouX2ZpbHRlckRlc2NyaXB0b3IgPSB0aGlzLl9maWx0ZXJEZXNjcmlwdG9yPy5jb3B5KCk7XG4gICAgICAgIG9iai5fZW51bVR5cGUgPSB0aGlzLl9lbnVtVHlwZTtcbiAgICAgICAgb2JqLl9lbnVtVGl0bGVQYXRoID0gdGhpcy5fZW51bVRpdGxlUGF0aDtcbiAgICAgICAgb2JqLl9lbnVtTmFtZUFzVmFsdWUgPSB0aGlzLl9lbnVtTmFtZUFzVmFsdWU7XG4gICAgICAgIG9iai5fYm9vbGVhbkFzSWNvbiA9IHRoaXMuX2Jvb2xlYW5Bc0ljb247XG4gICAgICAgIG9iai5fYm9vbGVhblllcyA9IHRoaXMuX2Jvb2xlYW5ZZXM7XG4gICAgICAgIG9iai5fYm9vbGVhbk5vID0gdGhpcy5fYm9vbGVhbk5vO1xuICAgICAgICBvYmouX29iamVjdE1vZGVsVHlwZSA9IHRoaXMuX29iamVjdE1vZGVsVHlwZTtcbiAgICAgICAgb2JqLl9vYmplY3RUaXRsZVByb3BlcnR5ID0gdGhpcy5fb2JqZWN0VGl0bGVQcm9wZXJ0eTtcbiAgICAgICAgb2JqLl9sb2NhbGUgPSB0aGlzLl9sb2NhbGU7XG4gICAgICAgIG9iai5fY3VycmVuY3lDb2RlID0gdGhpcy5fY3VycmVuY3lDb2RlO1xuICAgICAgICBvYmouX2N1cnJlbmN5RGlzcGxheSA9IHRoaXMuX2N1cnJlbmN5RGlzcGxheTtcbiAgICAgICAgb2JqLl9jdXJyZW5jeUZyb21Qcm9wZXJ0eSA9IHRoaXMuX2N1cnJlbmN5RnJvbVByb3BlcnR5O1xuICAgICAgICBvYmouX2Rpc3BsYXlGb3JtYXQgPSB0aGlzLl9kaXNwbGF5Rm9ybWF0O1xuICAgICAgICBvYmouX2hlYWRlckNsYXNzTmFtZSA9IHRoaXMuX2hlYWRlckNsYXNzTmFtZTtcbiAgICAgICAgb2JqLl9jbGFzc05hbWUgPSB0aGlzLl9jbGFzc05hbWU7XG4gICAgICAgIG9iai5fd2lkdGggPSB0aGlzLl93aWR0aDtcbiAgICAgICAgb2JqLl9taW5XaWR0aCA9IHRoaXMuX21pbldpZHRoO1xuICAgICAgICBvYmouX21heFdpZHRoID0gdGhpcy5fbWF4V2lkdGg7XG4gICAgICAgIG9iai5fY3VzdG9tQ29tcG9uZW50VHlwZSA9IHRoaXMuX2N1c3RvbUNvbXBvbmVudFR5cGU7XG4gICAgICAgIG9iai5faGFzQ29weVRvQ2xpcGJvYXJkID0gdGhpcy5faGFzQ29weVRvQ2xpcGJvYXJkO1xuICAgICAgICBvYmouX3RlbXBsYXRlID0gdGhpcy5fdGVtcGxhdGU7XG4gICAgICAgIG9iai5fZ2V0dGVyID0gdGhpcy5fZ2V0dGVyO1xuICAgICAgICBvYmouX2lzTXVsdGlsaW5lID0gdGhpcy5faXNNdWx0aWxpbmU7XG4gICAgICAgIG9iai5faGFzVmFsdWVBc1Rvb2x0aXAgPSB0aGlzLl9oYXNWYWx1ZUFzVG9vbHRpcDtcbiAgICAgICAgb2JqLl9pc1Jlb3JkZXJhYmxlID0gdGhpcy5faXNSZW9yZGVyYWJsZTtcbiAgICAgICAgb2JqLl9pc1RvZ2dsZWFibGUgPSB0aGlzLl9pc1RvZ2dsZWFibGU7XG4gICAgICAgIG9iai5faXNWaXNpYmxlID0gdGhpcy5faXNWaXNpYmxlO1xuICAgICAgICBvYmouX2lzTG9jYWxpemVkID0gdGhpcy5faXNMb2NhbGl6ZWQ7XG4gICAgICAgIG9iai5fbG9jYWxpemF0aW9uRXhpc3RzUHJvcGVydHkgPSB0aGlzLl9sb2NhbGl6YXRpb25FeGlzdHNQcm9wZXJ0eTtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBDb2x1bW5EeW5hbWljRGVzY3JpcHRvciBleHRlbmRzIENvbHVtbkRlc2NyaXB0b3I8YW55LCBhbnk+IHtcbiAgICBwcm90ZWN0ZWQgb3ZlcnJpZGUgX3RhYmxlOiBUYWJsZUR5bmFtaWNEZXNjcmlwdG9yO1xuICAgIHByb3RlY3RlZCBvdmVycmlkZSBfdGl0bGU6IHN0cmluZyB8IHVuZGVmaW5lZCA9IHVuZGVmaW5lZDtcbiAgICBwcml2YXRlIF92aXNpYmlsaXR5ID0gdHJ1ZTtcblxuICAgIC8vIHByaXZhdGUgX2ZpbHRlclN0YXR1cztcblxuICAgIGNvbnN0cnVjdG9yKHRhYmxlOiBUYWJsZUR5bmFtaWNEZXNjcmlwdG9yLCBwcm9wZXJ0eTogc3RyaW5nKSB7XG4gICAgICAgIHN1cGVyKHRhYmxlLCBwcm9wZXJ0eSk7XG4gICAgICAgIHRoaXMuX3RhYmxlID0gdGFibGU7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCB2aXNpYmlsaXR5KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fdmlzaWJpbGl0eTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBzZXRzIGNvbHVtbidzIHRpdGxlIGFuZCByZXR1cm5zIHRoaXMgY29sdW1uXG4gICAgICogQHBhcmFtIHRpdGxlIHRpdGxlIHRvIGJlIHNldFxuICAgICAqIEBwYXJhbSBvdmVycmlkZSBzaG91bGQgY29sdW1uIHRpdGxlIGlmIGFsbCByZWFkeSBzZXQ/XG4gICAgICovXG4gICAgcHVibGljIG92ZXJyaWRlIHdpdGhUaXRsZSh0aXRsZTogc3RyaW5nLCBvdmVycmlkZSA9IGZhbHNlKTogdGhpcyB7XG4gICAgICAgIGlmICh0aGlzLl90aXRsZSA9PSBudWxsIHx8IG92ZXJyaWRlKSB7XG4gICAgICAgICAgICB0aGlzLl90aXRsZSA9IHRpdGxlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIGRlZmluZXMgYXV0b21hdGljIHR5cGUgYW5kIHJldHVybnMgdGhpcyBjb2x1bW5cbiAgICAgKiBAcGFyYW0gdmFsdWVcbiAgICAgKi9cbiAgICBwdWJsaWMgd2l0aEF1dG9tYXRpY1R5cGUodmFsdWU6IHN0cmluZyk6IHRoaXMge1xuICAgICAgICBUYWJsZXZpZXdVdGlsLnN0cmluZ0NvbHVtbkNvbnZlcnRlcih0aGlzLCB2YWx1ZSk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIHNldHMgdmlzaWJpbGl0eSBzdGF0ZSBmb3IgY29sdW1uIGFuZCByZXR1cm5zIHRoaXMgY29sdW1uXG4gICAgICogQHBhcmFtIHZpc2liaWxpdHlcbiAgICAgKi9cbiAgICBwdWJsaWMgd2l0aFZpc2liaWxpdHkodmlzaWJpbGl0eTogYm9vbGVhbik6IHRoaXMge1xuICAgICAgICB0aGlzLl92aXNpYmlsaXR5ID0gdmlzaWJpbGl0eTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogY3JlYXRlcyBkZWVwIGNvcHkgb2YgY29sdW1uIGR5bmFtaWMgZGVzY3JpcHRvclxuICAgICAqL1xuICAgIHB1YmxpYyBvdmVycmlkZSBjb3B5KCk6IENvbHVtbkR5bmFtaWNEZXNjcmlwdG9yIHtcbiAgICAgICAgY29uc3QgZGVzY3JpcHRvciA9IG5ldyBDb2x1bW5EeW5hbWljRGVzY3JpcHRvcih0aGlzLl90YWJsZSwgdGhpcy5fcHJvcGVydHkpO1xuICAgICAgICB0aGlzLmNvcHlGaWVsZHNUbyhkZXNjcmlwdG9yKTtcbiAgICAgICAgZGVzY3JpcHRvci5fdGl0bGUgPSB0aGlzLl90aXRsZTtcbiAgICAgICAgZGVzY3JpcHRvci5fdmlzaWJpbGl0eSA9IHRoaXMuX3Zpc2liaWxpdHk7XG4gICAgICAgIHJldHVybiBkZXNjcmlwdG9yO1xuICAgIH1cblxuICAgIHB1YmxpYyB0b0NvbHVtbkRlc2NyaXB0b3IodGFibGVEZXNjcmlwdG9yOiBUYWJsZURlc2NyaXB0b3I8YW55Pik6IENvbHVtbkRlc2NyaXB0b3I8YW55LCBhbnk+IHtcbiAgICAgICAgY29uc3QgZGVzY3JpcHRvciA9IG5ldyBDb2x1bW5EZXNjcmlwdG9yKHRhYmxlRGVzY3JpcHRvciwgdGhpcy5fcHJvcGVydHkpO1xuICAgICAgICB0aGlzLmNvcHlGaWVsZHNUbyhkZXNjcmlwdG9yKTtcbiAgICAgICAgcmV0dXJuIGRlc2NyaXB0b3I7XG4gICAgfVxufVxuIl19
|