@sumaris-net/ngx-components 18.7.1-beta1 → 18.7.1-rc1
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/doc/changelog.md +100 -0
- package/esm2022/public_api.mjs +6 -1
- package/esm2022/src/app/admin/users/users.mjs +2 -2
- package/esm2022/src/app/core/about/about.modal.mjs +4 -5
- package/esm2022/src/app/core/account/account.page.mjs +11 -11
- package/esm2022/src/app/core/account/password/change-password.page.mjs +2 -2
- package/esm2022/src/app/core/form/entity/entity-metadata.component.mjs +3 -3
- package/esm2022/src/app/core/form/list/list.form.mjs +2 -2
- package/esm2022/src/app/core/form/properties/properties.form.mjs +15 -6
- package/esm2022/src/app/core/form/properties/properties.table.mjs +2 -2
- package/esm2022/src/app/core/form/properties/properties.utils.mjs +9 -10
- package/esm2022/src/app/core/home/home.mjs +7 -5
- package/esm2022/src/app/core/menu/menu.component.mjs +19 -24
- package/esm2022/src/app/core/menu/menu.service.mjs +6 -3
- package/esm2022/src/app/core/menu/testing/menu-other.testing.mjs +1 -1
- package/esm2022/src/app/core/menu/testing/menu.testing.mjs +1 -1
- package/esm2022/src/app/core/register/register-confirm.page.mjs +1 -1
- package/esm2022/src/app/core/register/register.form.mjs +1 -1
- package/esm2022/src/app/core/services/account.service.mjs +3 -7
- package/esm2022/src/app/core/services/model/account.model.mjs +6 -6
- package/esm2022/src/app/core/services/model/entity.model.mjs +14 -5
- package/esm2022/src/app/core/services/network.service.mjs +1 -1
- package/esm2022/src/app/core/services/platform.service.mjs +27 -10
- package/esm2022/src/app/core/services/validator/base.validator.class.mjs +2 -2
- package/esm2022/src/app/core/settings/settings.page.mjs +1 -1
- package/esm2022/src/app/core/table/column/actions-column.component.mjs +3 -3
- package/esm2022/src/app/core/table/column/row-field.component.mjs +1 -1
- package/esm2022/src/app/core/table/testing/table.testing.mjs +1 -1
- package/esm2022/src/app/core/table/testing/table2.testing.mjs +1 -1
- package/esm2022/src/app/shared/dates.mjs +13 -1
- package/esm2022/src/app/shared/directives/autoresize.directive.mjs +75 -0
- package/esm2022/src/app/shared/directives/directives.module.mjs +5 -4
- package/esm2022/src/app/shared/file/uri.utils.mjs +6 -1
- package/esm2022/src/app/shared/form/field.component.mjs +10 -4
- package/esm2022/src/app/shared/forms.mjs +3 -1
- package/esm2022/src/app/shared/functions.mjs +7 -1
- package/esm2022/src/app/shared/hotkeys/hotkeys.service.mjs +3 -2
- package/esm2022/src/app/shared/image/gallery/image-gallery.component.mjs +11 -4
- package/esm2022/src/app/shared/image/gallery/testing/gallery.testing.mjs +1 -1
- package/esm2022/src/app/shared/markdown/markdown.component.mjs +66 -93
- package/esm2022/src/app/shared/markdown/markdown.modal.mjs +37 -16
- package/esm2022/src/app/shared/markdown/markdown.module.mjs +3 -4
- package/esm2022/src/app/shared/markdown/markdown.service.mjs +8 -7
- package/esm2022/src/app/shared/markdown/markdown.utils.mjs +10 -1
- package/esm2022/src/app/shared/markdown/testing/markdown.test.mjs +17 -8
- package/esm2022/src/app/shared/markdown/testing/markdown.testing.module.mjs +5 -4
- package/esm2022/src/app/shared/material/autocomplete/material.autocomplete.mjs +71 -36
- package/esm2022/src/app/shared/material/autocomplete/testing/autocomplete.test.mjs +3 -3
- package/esm2022/src/app/shared/material/boolean/material.boolean.mjs +2 -2
- package/esm2022/src/app/shared/material/chips/material.chips.mjs +13 -5
- package/esm2022/src/app/shared/material/datetime/material.datetime.mjs +19 -9
- package/esm2022/src/app/shared/material/datetime/testing/mat-date-time.test.mjs +4 -4
- package/esm2022/src/app/shared/material/text/text-form.component.mjs +5 -4
- package/esm2022/src/app/shared/named-filter/named-filter-selector.component.mjs +3 -3
- package/esm2022/src/app/shared/named-filter/testing/named-filter-selector.testing.mjs +1 -1
- package/esm2022/src/app/shared/observables.mjs +5 -5
- package/esm2022/src/app/shared/pipes/arrays.pipe.mjs +18 -2
- package/esm2022/src/app/shared/pipes/duration.pipe.mjs +3 -12
- package/esm2022/src/app/shared/pipes/html.pipes.mjs +18 -1
- package/esm2022/src/app/shared/pipes/observable.pipes.mjs +44 -0
- package/esm2022/src/app/shared/pipes/pipes.module.mjs +28 -6
- package/esm2022/src/app/shared/pipes/string.pipes.mjs +35 -4
- package/esm2022/src/app/shared/print/print.service.mjs +305 -0
- package/esm2022/src/app/shared/rx-state/rx-state.decorators.mjs +4 -4
- package/esm2022/src/app/shared/shared.module.mjs +4 -11
- package/esm2022/src/app/shared/toast/toast.testing.mjs +13 -11
- package/esm2022/src/app/shared/toast/toast.testing.module.mjs +5 -4
- package/esm2022/src/app/shared/toast/toasts.mjs +23 -33
- package/esm2022/src/app/shared/toolbar/modal-toolbar.mjs +3 -3
- package/esm2022/src/app/shared/toolbar/toolbar.mjs +7 -3
- package/esm2022/src/app/shared/upload-file/upload-file-popover.component.mjs +3 -3
- package/esm2022/src/app/shared/validator/form-error-adapter.class.mjs +2 -2
- package/esm2022/src/app/shared/validator/validators.mjs +12 -8
- package/esm2022/src/app/social/message/message.form.mjs +4 -3
- package/fesm2022/sumaris-net.ngx-components.mjs +3983 -3377
- package/fesm2022/sumaris-net.ngx-components.mjs.map +1 -1
- package/package.json +1 -1
- package/public_api.d.ts +5 -0
- package/src/app/core/form/properties/properties.form.d.ts +2 -0
- package/src/app/core/home/home.d.ts +1 -1
- package/src/app/core/menu/menu.component.d.ts +3 -6
- package/src/app/core/services/model/account.model.d.ts +1 -1
- package/src/app/core/services/model/entity.model.d.ts +5 -3
- package/src/app/core/services/platform.service.d.ts +9 -2
- package/src/app/shared/dates.d.ts +4 -0
- package/src/app/shared/directives/autoresize.directive.d.ts +20 -0
- package/src/app/shared/directives/directives.module.d.ts +4 -3
- package/src/app/shared/form/field.component.d.ts +3 -1
- package/src/app/shared/functions.d.ts +6 -0
- package/src/app/shared/image/gallery/image-gallery.component.d.ts +4 -1
- package/src/app/shared/markdown/markdown.component.d.ts +14 -8
- package/src/app/shared/markdown/markdown.modal.d.ts +18 -8
- package/src/app/shared/markdown/markdown.module.d.ts +1 -2
- package/src/app/shared/markdown/markdown.service.d.ts +0 -1
- package/src/app/shared/markdown/markdown.utils.d.ts +1 -0
- package/src/app/shared/markdown/testing/markdown.test.d.ts +4 -1
- package/src/app/shared/markdown/testing/markdown.testing.module.d.ts +2 -1
- package/src/app/shared/material/autocomplete/material.autocomplete.d.ts +2 -0
- package/src/app/shared/material/chips/material.chips.d.ts +1 -0
- package/src/app/shared/material/datetime/material.datetime.d.ts +1 -0
- package/src/app/shared/named-filter/named-filter-selector.component.d.ts +1 -1
- package/src/app/shared/observables.d.ts +2 -2
- package/src/app/shared/pipes/arrays.pipe.d.ts +8 -0
- package/src/app/shared/pipes/html.pipes.d.ts +7 -0
- package/src/app/shared/pipes/observable.pipes.d.ts +19 -0
- package/src/app/shared/pipes/pipes.module.d.ts +5 -4
- package/src/app/shared/pipes/string.pipes.d.ts +11 -1
- package/src/app/shared/print/print.service.d.ts +94 -0
- package/src/app/shared/rx-state/rx-state.decorators.d.ts +2 -2
- package/src/app/shared/shared.module.d.ts +2 -3
- package/src/app/shared/toast/toast.testing.d.ts +1 -1
- package/src/app/shared/toast/toast.testing.module.d.ts +2 -1
- package/src/app/shared/toast/toasts.d.ts +2 -3
- package/src/app/shared/toolbar/toolbar.d.ts +3 -1
- package/src/app/shared/validator/validators.d.ts +3 -1
- package/src/assets/i18n/en-US.json +3 -2
- package/src/assets/i18n/en.json +2 -1
- package/src/assets/i18n/fr.json +2 -1
- package/src/assets/manifest.json +1 -1
- package/src/theme/_mixins.scss +7 -0
- package/src/theme/_ngx-components.scss +53 -46
- package/src/theme/_ngx-components.table.scss +4 -1
- package/src/theme/_ngx-components.tabs.scss +11 -0
|
@@ -123,17 +123,16 @@ export class AppPropertyUtils {
|
|
|
123
123
|
serializeFn = AppPropertyUtils.key;
|
|
124
124
|
break;
|
|
125
125
|
case 'entity':
|
|
126
|
-
case 'entities':
|
|
126
|
+
case 'entities': {
|
|
127
127
|
const serializeAttribute = def?.serializeAttribute ?? opts?.defaultSerializeAttribute ?? 'id';
|
|
128
|
-
serializeFn =
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
return serializeValue.toString();
|
|
135
|
-
});
|
|
128
|
+
serializeFn = (value) => {
|
|
129
|
+
const serializeValue = getPropertyByPath(value, serializeAttribute, value /*default value*/);
|
|
130
|
+
if (isNil(serializeValue))
|
|
131
|
+
return serializeValue;
|
|
132
|
+
return serializeValue.toString();
|
|
133
|
+
};
|
|
136
134
|
break;
|
|
135
|
+
}
|
|
137
136
|
default:
|
|
138
137
|
serializeFn = AppPropertyUtils.toString;
|
|
139
138
|
}
|
|
@@ -302,4 +301,4 @@ export class AppPropertyUtils {
|
|
|
302
301
|
return value?.toString();
|
|
303
302
|
}
|
|
304
303
|
}
|
|
305
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvcGVydGllcy51dGlscy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvY29yZS9mb3JtL3Byb3BlcnRpZXMvcHJvcGVydGllcy51dGlscy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsS0FBSyxFQUFFLFlBQVksRUFBRSxRQUFRLEVBQUUsZUFBZSxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsUUFBUSxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFJOUksTUFBTSxPQUFPLGtCQUFrQjtJQUM3Qjs7Ozs7Ozs7T0FRRztJQUNILE1BQU0sQ0FBQyxhQUFhLENBQVUsT0FBdUIsRUFBRSxXQUFtQyxFQUFFLElBQWtDO1FBQzVILE9BQU8sQ0FDTCxDQUFDLE9BQU8sSUFBSSxFQUFFLENBQUM7WUFDYixzQkFBc0I7YUFDckIsR0FBRyxDQUFDLENBQUMsTUFBTSxFQUFFLEVBQUU7WUFDZCxJQUFJLENBQUMsTUFBTTtnQkFBRSxPQUFPLFNBQVMsQ0FBQztZQUM5QixNQUFNLEdBQUcsR0FBRyxnQkFBZ0IsQ0FBQyxjQUFjLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDcEQsSUFBSSxDQUFDLEdBQUc7Z0JBQUUsT0FBTyxTQUFTLENBQUM7WUFDM0IsTUFBTSxHQUFHLEdBQUcsV0FBVyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxHQUFHLENBQUMsQ0FBQztZQUNwRCxPQUFPLGdCQUFnQixDQUFDLFFBQVEsQ0FBQyxNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUM7UUFDaEQsQ0FBQyxDQUFDO1lBQ0YscUJBQXFCO2FBQ3BCLE1BQU0sQ0FDTCxDQUFDLEdBQUcsRUFBRSxJQUFJLEVBQUUsRUFBRTtZQUNaLElBQUksWUFBWSxDQUFDLElBQUksRUFBRSxHQUFHLENBQUM7Z0JBQUUsT0FBTyxHQUFHLENBQUM7WUFD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QUcsQ0FBQyxZQUFZLEVBQUUsVUFBVSxFQUFFLE9BQU8sQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFO1lBQzVDLGdCQUFnQixDQUFDLEdBQUcsQ0FBQyxHQUFHLGdCQUFnQixDQUFDLEdBQUcsQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUN0RCxDQUFDLENBQUMsQ0FBQztRQUVILE9BQU8sZ0JBQWdCLENBQUM7SUFDMUIsQ0FBQztJQUVPLE1BQU0sQ0FBQyxRQUFRLENBQUMsS0FBVztRQUNqQyxPQUFPLEtBQUssRUFBRSxRQUFRLEVBQUUsQ0FBQztJQUMzQixDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBQcm9wZXJ0eSwgUHJvcGVydHlNYXAgfSBmcm9tICcuLi8uLi8uLi9zaGFyZWQvdHlwZXMnO1xuaW1wb3J0IHsgZ2V0UHJvcGVydHlCeVBhdGgsIGlzTmlsLCBpc05pbE9yQmxhbmssIGlzTm90TmlsLCBpc05vdE5pbE9yQmxhbmssIGlzUHJvbWlzZSwgdG9Cb29sZWFuLCB0b051bWJlciB9IGZyb20gJy4uLy4uLy4uL3NoYXJlZC9mdW5jdGlvbnMnO1xuaW1wb3J0IHsgRm9ybUZpZWxkRGVmaW5pdGlvbiB9IGZyb20gJy4uLy4uLy4uL3NoYXJlZC9mb3JtL2ZpZWxkLm1vZGVsJztcbmltcG9ydCB7IEVudGl0aWVzU2VydmljZUxvYWRPcHRpb25zLCBTdWdnZXN0Rm4gfSBmcm9tICcuLi8uLi8uLi9zaGFyZWQvc2VydmljZXMvZW50aXR5LXNlcnZpY2UuY2xhc3MnO1xuXG5leHBvcnQgY2xhc3MgQXBwUHJvcGVydGllc1V0aWxzIHtcbiAgLyoqXG4gICAqIENvbnZlcnRzIGFuIGFycmF5IG9mIGBQcm9wZXJ0eWAgb2JqZWN0cyBpbnRvIGEgYFByb3BlcnRpZXNNYXBgIG9iamVjdC5cbiAgICpcbiAgICogQHBhcmFtIHtQcm9wZXJ0eVtdfSBbc291cmNlc10gLSBBbiBvcHRpb25hbCBhcnJheSBvZiBwcm9wZXJ0aWVzIHRvIGJlIGNvbnZlcnRlZC5cbiAgICogQHBhcmFtIHtGb3JtRmllbGREZWZpbml0aW9uW119IFtkZWZpbml0aW9uc10gLSBBbiBvcHRpb25hbCBhcnJheSBvZiBmb3JtIGZpZWxkIGRlZmluaXRpb25zIHRvIGhlbHAgd2l0aCB0aGUgY29udmVyc2lvbi5cbiAgICogQHBhcmFtIHtPYmplY3R9IFtvcHRzXSAtIE9wdGlvbmFsIGNvbmZpZ3VyYXRpb25zLlxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtvcHRzLm9taXROaWxPckJsYW5rXSAtIElmIHRydWUsIHByb3BlcnRpZXMgd2l0aCBuaWwgb3IgYmxhbmsgdmFsdWVzIHdpbGwgYmUgb21pdHRlZC4gRGVmYXVsdHMgdG8gdHJ1ZS5cbiAgICogQHJldHVybiB7UHJvcGVydHlNYXB9IC0gVGhlIHJlc3VsdGluZyBgUHJvcGVydGllc01hcGAgb2JqZWN0LlxuICAgKi9cbiAgc3RhdGljIGFycmF5QXNPYmplY3Q8VCA9IGFueT4oc291cmNlcz86IFByb3BlcnR5PFQ+W10sIGRlZmluaXRpb25zPzogRm9ybUZpZWxkRGVmaW5pdGlvbltdLCBvcHRzPzogeyBvbWl0TmlsT3JCbGFuazogYm9vbGVhbiB9KTogUHJvcGVydHlNYXAge1xuICAgIHJldHVybiAoXG4gICAgICAoc291cmNlcyB8fCBbXSlcbiAgICAgICAgLy8gU2VyaWFsaXplIGVhY2ggaXRlbVxuICAgICAgICAubWFwKChzb3VyY2UpID0+IHtcbiAgICAgICAgICBpZiAoIXNvdXJjZSkgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgICBjb25zdCBrZXkgPSBBcHBQcm9wZXJ0eVV0aWxzLmdldFByb3BlcnR5S2V5KHNvdXJjZSk7XG4gICAgICAgICAgaWYgKCFrZXkpIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgICAgY29uc3QgZGVmID0gZGVmaW5pdGlvbnM/LmZpbmQoKGQpID0+IGQua2V5ID09PSBrZXkpO1xuICAgICAgICAgIHJldHVybiBBcHBQcm9wZXJ0eVV0aWxzLmFzT2JqZWN0KHNvdXJjZSwgZGVmKTtcbiAgICAgICAgfSlcbiAgICAgICAgLy8gRmlsbCBhIEpTT04gb2JqZWN0XG4gICAgICAgIC5yZWR1Y2UoXG4gICAgICAgICAgKHJlcywgaXRlbSkgPT4ge1xuICAgICAgICAgICAgaWYgKGlzTmlsT3JCbGFuayhpdGVtPy5rZXkpKSByZXR1cm4gcmVzO1xuICAgICAgICAgICAgLy8gU2tpcCBpZiBuaWwgb3IgYmxhbmsgdmFsdWVcbiAgICAgICAgICAgIGlmIChvcHRzPy5vbWl0TmlsT3JCbGFuayAhPT0gZmFsc2UgJiYgaXNOaWxPckJsYW5rKGl0ZW0udmFsdWUpKSByZXR1cm4gcmVzO1xuICAgICAgICAgICAgcmVzW2l0ZW0ua2V5XSA9IGl0ZW0udmFsdWU7XG4gICAgICAgICAgICByZXR1cm4gcmVzO1xuICAgICAgICAgIH0sXG4gICAgICAgICAgPFByb3BlcnR5TWFwPnt9XG4gICAgICAgIClcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIEdlbmVyYXRlcyBhbiBhcnJheSBvZiBwcm9wZXJ0aWVzIGZyb20gdGhlIGdpdmVuIG9iamVjdCwgb3B0aW9uYWxseSBhcHBseWluZyBkZWZpbml0aW9ucyB0byB0aGUgcHJvcGVydGllcy5cbiAgICpcbiAgICogQHBhcmFtIHtQcm9wZXJ0eU1hcH0gW3NvdXJjZXNdIC0gVGhlIHNvdXJjZSBvYmplY3QgZnJvbSB3aGljaCBwcm9wZXJ0aWVzIGFyZSB0byBiZSBleHRyYWN0ZWQuXG4gICAqIEBwYXJhbSB7Rm9ybUZpZWxkRGVmaW5pdGlvbltdfSBbZGVmaW5pdGlvbnNdIC0gQW4gb3B0aW9uYWwgYXJyYXkgb2YgZGVmaW5pdGlvbnMgdG8gYmUgYXBwbGllZCB0byB0aGUgZXh0cmFjdGVkIHByb3BlcnRpZXMuXG4gICAqIEBwYXJhbSBvcHRzXG4gICAqIEByZXR1cm4ge1Byb3BlcnR5W10gfCBQcm9taXNlPFByb3BlcnR5W10+fSBBbiBhcnJheSBvZiBwcm9wZXJ0aWVzIGdlbmVyYXRlZCBmcm9tIHRoZSBzb3VyY2Ugb2JqZWN0LCBvciBhIHByb21pc2UgcmVzb2x2aW5nIHRvIHRoYXQgYXJyYXkuXG4gICAqL1xuICBzdGF0aWMgYXJyYXlGcm9tT2JqZWN0PFQ+KFxuICAgIHNvdXJjZXM/OiBQcm9wZXJ0eU1hcCB8IFByb3BlcnR5PFQ+W10sXG4gICAgZGVmaW5pdGlvbnM/OiBGb3JtRmllbGREZWZpbml0aW9uW10sXG4gICAgb3B0cz86IHtcbiAgICAgIGtlZXBPcnBoYW4/OiBib29sZWFuOyAvLyB0cnVlIGJ5IGRlZmF1bHRcbiAgICB9XG4gICk6IFByb3BlcnR5PFQ+W10gfCBQcm9taXNlPFByb3BlcnR5PFQ+W10+IHtcbiAgICAvLyBERUJVR1xuICAgIC8vY29uc29sZS5kZWJ1ZyhgW3Byb3BlcnRpZXMtdXRpbHNdIENvbnZlcnQgcHJvcGVydHkgbWFwIGludG8gYXJyYXkgb2YgUHJvcGVydHkuLi5gKTtcblxuICAgIGxldCB0YXJnZXRzID0gQXJyYXkuaXNBcnJheShzb3VyY2VzKVxuICAgICAgPyBzb3VyY2VzLnNsaWNlKClcbiAgICAgIDogT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoc291cmNlcyB8fCB7fSkubWFwKFxuICAgICAgICAgIChrZXkpID0+XG4gICAgICAgICAgICA8UHJvcGVydHk8YW55Pj57XG4gICAgICAgICAgICAgIGtleSxcbiAgICAgICAgICAgICAgdmFsdWU6IHNvdXJjZXNba2V5XSxcbiAgICAgICAgICAgIH1cbiAgICAgICAgKTtcbiAgICBjb25zdCBqb2JzID0gW107XG5cbiAgICBpZiAoISFkZWZpbml0aW9ucykge1xuICAgICAgdGFyZ2V0cyA9IHRhcmdldHNcbiAgICAgICAgLm1hcCgodGFyZ2V0OiBQcm9wZXJ0eTxhbnk+KSA9PiB7XG4gICAgICAgICAgLy8gRmluZCBkZWZpbml0aW9uXG4gICAgICAgICAgY29uc3QgZGVmID0gZGVmaW5pdGlvbnMuZmluZCgoZGVmKSA9PiBkZWYua2V5ID09PSB0YXJnZXQua2V5KTtcblxuICAgICAgICAgIC8vIEV4Y2x1ZGUgbm8gZGVmaW5pdGlvbiAoaWYgZXhwZWN0ZWQgYnkgdXNlciBvcHRpb25zKVxuICAgICAgICAgIGlmICghZGVmICYmIG9wdHM/LmtlZXBPcnBoYW4gPT09IGZhbHNlKSByZXR1cm4gbnVsbDtcblxuICAgICAgICAgIC8vIERlc2VyaWFsaXplIGZyb20gc3RyaW5nXG4gICAgICAgICAgbGV0IHByb3BlcnR5T3JQcm9taXNlID0gQXBwUHJvcGVydHlVdGlscy5mcm9tT2JqZWN0KHRhcmdldCwgZGVmKTtcbiAgICAgICAgICBpZiAoaXNQcm9taXNlKHByb3BlcnR5T3JQcm9taXNlKSkge1xuICAgICAgICAgICAgam9icy5wdXNoKHByb3BlcnR5T3JQcm9taXNlLnRoZW4oKHByb3BlcnR5KSA9PiAodGFyZ2V0LnZhbHVlID0gcHJvcGVydHkudmFsdWUpKSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIFVwZGF0ZSB0aGUgdGFyZ2V0IHZhbHVlXG4gICAgICAgICAgICB0YXJnZXQudmFsdWUgPSBwcm9wZXJ0eU9yUHJvbWlzZS52YWx1ZTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXR1cm4gdGFyZ2V0O1xuICAgICAgICB9KVxuICAgICAgICAvLyBDbGVhbiBvcnBoYW5cbiAgICAgICAgLmZpbHRlcihpc05vdE5pbCk7XG5cbiAgICAgIC8vIFJldHVybiBhcyBwcm9taXNlLCB3aGVuIG5lZWRcbiAgICAgIGlmIChqb2JzLmxlbmd0aCkgcmV0dXJuIFByb21pc2UuYWxsKGpvYnMpLnRoZW4oKCkgPT4gdGFyZ2V0cyBhcyBQcm9wZXJ0eTxUPltdKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGFyZ2V0cyBhcyBQcm9wZXJ0eTxUPltdO1xuICB9XG5cbiAgc3RhdGljIHNhbml0aXplKFxuICAgIHNvdXJjZTogUHJvcGVydHlNYXAgfCBQcm9wZXJ0eVtdLFxuICAgIG9wdHM/OiB7XG4gICAgICBkZWZpbml0aW9ucz86IEZvcm1GaWVsZERlZmluaXRpb25bXTtcbiAgICAgIGluY2x1ZGVkS2V5cz86IHN0cmluZ1tdO1xuICAgIH1cbiAgKTogUHJvcGVydHlNYXAgfCBQcm9wZXJ0eVtdIHtcbiAgICBpZiAoIXNvdXJjZSkgcmV0dXJuIHNvdXJjZTsgLy8gU2tpcCBpZiBlbXB0eVxuICAgIGNvbnN0IGluY2x1ZGVkS2V5cyA9IG9wdHM/LmluY2x1ZGVkS2V5cyA/PyBvcHRzPy5kZWZpbml0aW9ucy5tYXAoKGRlZikgPT4gZGVmLmtleSk7XG4gICAgaWYgKEFycmF5LmlzQXJyYXkoc291cmNlKSkge1xuICAgICAgcmV0dXJuIHNvdXJjZS5maWx0ZXIoKHByb3BlcnR5KSA9PiBwcm9wZXJ0eSAmJiAoIWluY2x1ZGVkS2V5cyB8fCBpbmNsdWRlZEtleXMuaW5jbHVkZXMocHJvcGVydHkua2V5KSkgJiYgaXNOb3ROaWwocHJvcGVydHkudmFsdWUpKTtcbiAgICB9XG4gICAgcmV0dXJuIChpbmNsdWRlZEtleXMgfHwgT2JqZWN0LmtleXMoc291cmNlKSkucmVkdWNlKFxuICAgICAgKHJlcywga2V5KSA9PiB7XG4gICAgICAgIGlmIChpc05vdE5pbChzb3VyY2Vba2V5XSkpIHJlc1trZXldID0gc291cmNlW2tleV07XG4gICAgICAgIHJldHVybiByZXM7XG4gICAgICB9LFxuICAgICAgPFByb3BlcnR5TWFwPnt9XG4gICAgKTtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgQXBwUHJvcGVydHlVdGlscyB7XG4gIHN0YXRpYyBrZXkoa2V5OiBhbnkpOiBzdHJpbmcge1xuICAgIHJldHVybiBrZXk/LmtleSA/PyBrZXk7XG4gIH1cblxuICBzdGF0aWMgZ2V0UHJvcGVydHlLZXkoc291cmNlOiBQcm9wZXJ0eSB8IGFueSk6IHN0cmluZyB7XG4gICAgaWYgKCFzb3VyY2UpIHJldHVybiB1bmRlZmluZWQ7XG4gICAgcmV0dXJuIChzb3VyY2Uua2V5IGFzIGFueSk/LmtleSA/PyBzb3VyY2Uua2V5O1xuICB9XG5cbiAgLyoqXG4gICAqIENvbnZlcnRzIHRoZSBnaXZlbiBzb3VyY2UgdG8gYW4gb2JqZWN0IHRoYXQgY29udGFpbnMgYSBrZXktdmFsdWUgcGFpci5cbiAgICpcbiAgICogQHBhcmFtIHtQcm9wZXJ0eTxhbnk+IHwgYW55fSBzb3VyY2UgLSBUaGUgc291cmNlIHByb3BlcnR5IG9yIGFueSB2YWx1ZSB0byBiZSBjb252ZXJ0ZWQuXG4gICAqIEBwYXJhbSB7Rm9ybUZpZWxkRGVmaW5pdGlvbn0gW2RlZl0gLSBUaGUgZm9ybSBmaWVsZCBkZWZpbml0aW9uIHVzZWQgZm9yIHNlcmlhbGl6YXRpb24uXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0c10gLSBBZGRpdGlvbmFsIG9wdGlvbnMgZm9yIHNlcmlhbGl6YXRpb24uXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbb3B0cy5kZWZhdWx0U2VyaWFsaXplQXR0cmlidXRlPSdpZCddIC0gVGhlIGF0dHJpYnV0ZSB0byBiZSB1c2VkIGZvciBkZWZhdWx0IHNlcmlhbGl6YXRpb24uXG4gICAqIEByZXR1cm4ge3sga2V5OiBzdHJpbmcsIHZhbHVlOiBzdHJpbmcgfSB8IHVuZGVmaW5lZH0gQW4gb2JqZWN0IGNvbnRhaW5pbmcgdGhlIHNlcmlhbGl6ZWQga2V5LXZhbHVlIHBhaXIsIG9yIHVuZGVmaW5lZCBpZiB0aGUgc291cmNlIGlzIG5vdCBwcm92aWRlZC5cbiAgICovXG4gIHN0YXRpYyBhc09iamVjdChcbiAgICBzb3VyY2U6IFByb3BlcnR5PGFueT4gfCBhbnksXG4gICAgZGVmPzogRm9ybUZpZWxkRGVmaW5pdGlvbixcbiAgICBvcHRzPzoge1xuICAgICAgZGVmYXVsdFNlcmlhbGl6ZUF0dHJpYnV0ZT86IHN0cmluZztcbiAgICB9XG4gICk6IHsga2V5OiBzdHJpbmc7IHZhbHVlOiBzdHJpbmcgfSB8IHVuZGVmaW5lZCB7XG4gICAgaWYgKCFzb3VyY2UpIHJldHVybiB1bmRlZmluZWQ7XG4gICAgLy8gU2VyaWFsaXplIGtleSAoV0FSTklORzogY2FuIGJlIGFuIG9iamVjdCwgd2hlbiB1c2luZyBhdXRvY29tcGxldGUgZmllbGQgdG8gZWRpdCBhIGtleSAtIHNlZSBBcHBQcm9wZXJ0aWVzRm9ybSlcbiAgICBjb25zdCBrZXkgPSBBcHBQcm9wZXJ0eVV0aWxzLmdldFByb3BlcnR5S2V5KHNvdXJjZSk7XG5cbiAgICAvLyBQcmVwYXJlIGEgZGVzZXJpYWxpemUgZnVuY3Rpb25cbiAgICBsZXQgc2VyaWFsaXplRm4gPSBkZWY/LnNlcmlhbGl6ZTtcbiAgICBpZiAoIXNlcmlhbGl6ZUZuKSB7XG4gICAgICBzd2l0Y2ggKGRlZj8udHlwZSB8fCAnb3RoZXInKSB7XG4gICAgICAgIGNhc2UgJ2VudW0nOlxuICAgICAgICBjYXNlICdlbnVtcyc6XG4gICAgICAgICAgc2VyaWFsaXplRm4gPSBBcHBQcm9wZXJ0eVV0aWxzLmtleTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAnZW50aXR5JzpcbiAgICAgICAgY2FzZSAnZW50aXRpZXMnOlxuICAgICAgICAgIGNvbnN0IHNlcmlhbGl6ZUF0dHJpYnV0ZSA9IGRlZj8uc2VyaWFsaXplQXR0cmlidXRlID8/IG9wdHM/LmRlZmF1bHRTZXJpYWxpemVBdHRyaWJ1dGUgPz8gJ2lkJztcbiAgICAgICAgICBzZXJpYWxpemVGbiA9XG4gICAgICAgICAgICBkZWY/LnNlcmlhbGl6ZSB8fFxuICAgICAgICAgICAgKCh2YWx1ZSkgPT4ge1xuICAgICAgICAgICAgICBjb25zdCBzZXJpYWxpemVWYWx1ZSA9IGdldFByb3BlcnR5QnlQYXRoKHZhbHVlLCBzZXJpYWxpemVBdHRyaWJ1dGUsIHZhbHVlIC8qZGVmYXVsdCB2YWx1ZSovKTtcbiAgICAgICAgICAgICAgaWYgKGlzTmlsKHNlcmlhbGl6ZVZhbHVlKSkgcmV0dXJuIHNlcmlhbGl6ZVZhbHVlO1xuICAgICAgICAgICAgICByZXR1cm4gc2VyaWFsaXplVmFsdWUudG9TdHJpbmcoKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIHNlcmlhbGl6ZUZuID0gQXBwUHJvcGVydHlVdGlscy50b1N0cmluZztcbiAgICAgIH1cbiAgICB9XG5cbiAgICBsZXQgdmFsdWVTdHI6IHN0cmluZztcblxuICAgIC8vIFZhbHVlIGlzIGFuIGFycmF5XG4gICAgaWYgKEFycmF5LmlzQXJyYXkoc291cmNlLnZhbHVlKSkge1xuICAgICAgdmFsdWVTdHIgPSBzb3VyY2UudmFsdWUubWFwKHNlcmlhbGl6ZUZuKS5maWx0ZXIoaXNOb3ROaWxPckJsYW5rKS5qb2luKCcsJyk7XG4gICAgfVxuICAgIC8vIEFueSBvdGhlciBjYXNlXG4gICAgZWxzZSB7XG4gICAgICB2YWx1ZVN0ciA9IHNlcmlhbGl6ZUZuKHNvdXJjZS52YWx1ZSk7XG4gICAgfVxuICAgIHJldHVybiB7IGtleSwgdmFsdWU6IHZhbHVlU3RyIH07XG4gIH1cblxuICBzdGF0aWMgZnJvbU9iamVjdDxUID0gc3RyaW5nPihcbiAgICBzb3VyY2U6IFByb3BlcnR5IHwgUHJvcGVydHk8VD4sXG4gICAgZGVmOiBGb3JtRmllbGREZWZpbml0aW9uLFxuICAgIG9wdHM/OiB7XG4gICAgICBkZWZhdWx0U3VnZ2VzdEZuOiBTdWdnZXN0Rm48YW55LCBhbnk+O1xuICAgICAgZGVmYXVsdFN1Z2dlc3RPcHRpb25zPzogRW50aXRpZXNTZXJ2aWNlTG9hZE9wdGlvbnM7XG4gICAgICBkZWZhdWx0U2VyaWFsaXplQXR0cmlidXRlPzogc3RyaW5nO1xuICAgIH1cbiAgKTogUHJvcGVydHk8VD4gfCBQcm9taXNlPFByb3BlcnR5PFQ+PiB7XG4gICAgaWYgKCFzb3VyY2U/LmtleSB8fCBpc05pbChzb3VyY2UudmFsdWUpIHx8ICFkZWYpIHJldHVybiBzb3VyY2UgYXMgUHJvcGVydHk8VD47IC8vIFNraXAgaWYgbm8ga2V5XG5cbiAgICAvLyBDbG9uZSB0aGUgc291cmNlXG4gICAgY29uc3QgdGFyZ2V0OiBQcm9wZXJ0eTxhbnk+ID0geyBrZXk6IHNvdXJjZS5rZXksIHZhbHVlOiBzb3VyY2UudmFsdWUgfTtcblxuICAgIGNvbnN0IGpvYnM6IFByb21pc2U8YW55PltdID0gW107XG4gICAgLy8gUmVzb2x2ZSB2YWx1ZVxuICAgIHN3aXRjaCAoZGVmLnR5cGUpIHtcbiAgICAgIGNhc2UgJ2Jvb2xlYW4nOlxuICAgICAgICB0YXJnZXQudmFsdWUgPSB0b0Jvb2xlYW4oc291cmNlLnZhbHVlIGFzIGFueSwgdG9Cb29sZWFuKGRlZi5kZWZhdWx0VmFsdWUpKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdpbnRlZ2VyJzpcbiAgICAgIGNhc2UgJ2RvdWJsZSc6XG4gICAgICAgIHRhcmdldC52YWx1ZSA9IHRvTnVtYmVyKHNvdXJjZS52YWx1ZSBhcyBhbnksIHRvTnVtYmVyKGRlZi5kZWZhdWx0VmFsdWUpKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdlbnVtJzpcbiAgICAgICAgY29uc3QgdmFsdWVLZXkgPSBBcHBQcm9wZXJ0eVV0aWxzLmtleSh0YXJnZXQudmFsdWUpO1xuICAgICAgICBpZiAoaXNOb3ROaWxPckJsYW5rKHZhbHVlS2V5KSkge1xuICAgICAgICAgIGNvbnN0IGVudW1WYWx1ZSA9IChkZWYudmFsdWVzIGFzIChzdHJpbmcgfCBQcm9wZXJ0eSlbXSk/LmZpbmQoKGRlZlZhbHVlKSA9PiBkZWZWYWx1ZSAmJiB2YWx1ZUtleSA9PT0gKGRlZlZhbHVlWydrZXknXSB8fCBkZWZWYWx1ZSkpID8/IG51bGw7XG4gICAgICAgICAgdGFyZ2V0LnZhbHVlID0gZW51bVZhbHVlPy5bJ2tleSddID8/IGVudW1WYWx1ZSA/PyBudWxsO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRhcmdldC52YWx1ZSA9IG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdlbnVtcyc6XG4gICAgICAgIGNvbnN0IHZhbHVlS2V5cyA9IEFycmF5LmlzQXJyYXkoc291cmNlLnZhbHVlKVxuICAgICAgICAgID8gc291cmNlLnZhbHVlLm1hcChBcHBQcm9wZXJ0eVV0aWxzLmtleSkgLy8gQ29weVxuICAgICAgICAgIDogdHlwZW9mIHNvdXJjZS52YWx1ZSA9PT0gJ3N0cmluZydcbiAgICAgICAgICAgID8gc291cmNlLnZhbHVlLnRyaW0oKS5zcGxpdCgvLCsvKVxuICAgICAgICAgICAgOiBbQXBwUHJvcGVydHlVdGlscy5rZXkoc291cmNlLnZhbHVlKV07XG4gICAgICAgIHRhcmdldC52YWx1ZSA9IHZhbHVlS2V5c1xuICAgICAgICAgIC5maWx0ZXIoaXNOb3ROaWwpXG4gICAgICAgICAgLm1hcChcbiAgICAgICAgICAgIChrZXk6IHN0cmluZykgPT5cbiAgICAgICAgICAgICAgKGRlZi52YWx1ZXMgYXMgKHN0cmluZyB8IFByb3BlcnR5KVtdKT8uZmluZCgoZGVmVmFsdWUpID0+IGRlZlZhbHVlICYmIGtleSA9PT0gKGRlZlZhbHVlWydrZXknXSB8fCBkZWZWYWx1ZSkpIHx8IHsga2V5LCB2YWx1ZTogJz8nIH1cbiAgICAgICAgICApO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ2VudGl0eSc6XG4gICAgICAgIC8vIERlc2VyaWFsaXplIGVudGl0eSAoZS5nLiBsb2FkIGVudGl0eSBmcm9tIHRoZSBpZClcbiAgICAgICAgY29uc3QgdmFsdWVPclByb21pc2UgPSBBcHBQcm9wZXJ0eVV0aWxzLnJlc29sdmVFbnRpdHkodGFyZ2V0LnZhbHVlLCBkZWYsIG9wdHMpO1xuICAgICAgICBpZiAoaXNQcm9taXNlKHZhbHVlT3JQcm9taXNlKSkge1xuICAgICAgICAgIGpvYnMucHVzaChcbiAgICAgICAgICAgIHZhbHVlT3JQcm9taXNlLnRoZW4oKHZhbHVlKSA9PiB7XG4gICAgICAgICAgICAgIHRhcmdldC52YWx1ZSA9IHZhbHVlO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgICApO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRhcmdldC52YWx1ZSA9IHZhbHVlT3JQcm9taXNlIGFzIGFueTtcbiAgICAgICAgfVxuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ2VudGl0aWVzJzpcbiAgICAgICAgLy8gQ29udmVydCB2YWx1ZSB0byBhcnJheVxuICAgICAgICB0YXJnZXQudmFsdWUgPSBBcnJheS5pc0FycmF5KHNvdXJjZS52YWx1ZSlcbiAgICAgICAgICA/IHNvdXJjZS52YWx1ZS5zbGljZSgpIC8vIENvcHlcbiAgICAgICAgICA6IHR5cGVvZiBzb3VyY2UudmFsdWUgPT09ICdzdHJpbmcnXG4gICAgICAgICAgICA/IHNvdXJjZS52YWx1ZVxuICAgICAgICAgICAgICAgIC5zcGxpdCgnLCcpXG4gICAgICAgICAgICAgICAgLm1hcCgodikgPT4gdi50cmltKCkpXG4gICAgICAgICAgICAgICAgLmZpbHRlcihpc05vdE5pbE9yQmxhbmspXG4gICAgICAgICAgICA6IFtdO1xuXG4gICAgICAgIC8vIERlc2VyaWFsaXplIGVhY2ggc3ViLXZhbHVlXG4gICAgICAgIGxldCBpbmRleCA9IDA7XG4gICAgICAgIGZvciAobGV0IHN1YlZhbHVlIG9mIHRhcmdldC52YWx1ZSkge1xuICAgICAgICAgIC8vIERlc2VyaWFsaXplIHN1Yi12YWx1ZVxuICAgICAgICAgIGNvbnN0IHN1YlZhbHVlT3JQcm9taXNlID0gQXBwUHJvcGVydHlVdGlscy5yZXNvbHZlRW50aXR5KHN1YlZhbHVlLCBkZWYsIG9wdHMpO1xuXG4gICAgICAgICAgLy8gQWRkIHByb21pc2UgdG8gam9ic1xuICAgICAgICAgIGlmIChpc1Byb21pc2Uoc3ViVmFsdWVPclByb21pc2UpKSB7XG4gICAgICAgICAgICBjb25zdCBmaW5hbEluZGV4ID0gaW5kZXg7XG4gICAgICAgICAgICBqb2JzLnB1c2goXG4gICAgICAgICAgICAgIHN1YlZhbHVlT3JQcm9taXNlLnRoZW4oKHZhbHVlKSA9PiB7XG4gICAgICAgICAgICAgICAgLy8gVXBkYXRlIHN1YiB2YWx1ZVxuICAgICAgICAgICAgICAgIHRhcmdldC52YWx1ZVtmaW5hbEluZGV4XSA9IHZhbHVlO1xuICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gVXBkYXRlIHN1YiB2YWx1ZVxuICAgICAgICAgICAgdGFyZ2V0LnZhbHVlW2luZGV4XSA9IHN1YlZhbHVlT3JQcm9taXNlIGFzIGFueTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaW5kZXgrKztcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIC8hXFwgUmV0dXJuIGFzIHByb21pc2Ugb25seSBpZiBuZWVkIChsZXQgZnVuY3Rpb24gc3luYyB3aGVuIHBvc3NpYmxlKVxuICAgIGlmIChqb2JzLmxlbmd0aCkgcmV0dXJuIFByb21pc2UuYWxsKGpvYnMpLnRoZW4oKCkgPT4gdGFyZ2V0KTtcblxuICAgIHJldHVybiB0YXJnZXQ7XG4gIH1cblxuICBwcml2YXRlIHN0YXRpYyByZXNvbHZlRW50aXR5KFxuICAgIHZhbHVlOiBhbnksXG4gICAgZGVmOiBGb3JtRmllbGREZWZpbml0aW9uLFxuICAgIG9wdHM/OiB7XG4gICAgICBkZWZhdWx0U3VnZ2VzdEZuOiBTdWdnZXN0Rm48YW55LCBhbnk+O1xuICAgICAgZGVmYXVsdFN1Z2dlc3RPcHRpb25zPzogRW50aXRpZXNTZXJ2aWNlTG9hZE9wdGlvbnM7XG4gICAgICBkZWZhdWx0U2VyaWFsaXplQXR0cmlidXRlPzogc3RyaW5nO1xuICAgIH1cbiAgKTogYW55IHwgUHJvbWlzZTxhbnk+IHtcbiAgICAvLyBVc2UgZGVzZXJpYWxpemUgZnVuY3Rpb24sIGlmIGFueVxuICAgIGlmIChkZWYuZGVzZXJpYWxpemUpIHtcbiAgICAgIHJldHVybiBkZWYuZGVzZXJpYWxpemUodmFsdWUpO1xuICAgIH1cblxuICAgIC8vIE9yIHRyeSB1c2luZyBzdWdnZXN0IGZ1bmN0aW9uXG4gICAgcmV0dXJuIHRoaXMucmVzb2x2ZUVudGl0eUJ5U3VnZ2VzdCh2YWx1ZSwgZGVmLCBvcHRzKTtcbiAgfVxuXG4gIHByaXZhdGUgc3RhdGljIGFzeW5jIHJlc29sdmVFbnRpdHlCeVN1Z2dlc3QoXG4gICAgdmFsdWU6IGFueSxcbiAgICBkZWY6IEZvcm1GaWVsZERlZmluaXRpb24sXG4gICAgb3B0cz86IHtcbiAgICAgIGRlZmF1bHRTdWdnZXN0Rm46IFN1Z2dlc3RGbjxhbnksIGFueT47XG4gICAgICBkZWZhdWx0U3VnZ2VzdE9wdGlvbnM/OiBFbnRpdGllc1NlcnZpY2VMb2FkT3B0aW9ucztcbiAgICAgIGRlZmF1bHRTZXJpYWxpemVBdHRyaWJ1dGU/OiBzdHJpbmc7XG4gICAgfVxuICApOiBQcm9taXNlPGFueT4ge1xuICAgIGNvbnN0IHNlcmlhbGl6ZUF0dHJpYnV0ZSA9IGRlZi5zZXJpYWxpemVBdHRyaWJ1dGUgPz8gb3B0cz8uZGVmYXVsdFNlcmlhbGl6ZUF0dHJpYnV0ZSA/PyAnaWQnO1xuICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnICYmIGlzTm90TmlsKHZhbHVlW3NlcmlhbGl6ZUF0dHJpYnV0ZV0pKSB7XG4gICAgICByZXR1cm4gdmFsdWU7IC8vIEFscmVhZHkgcmVzb2x2ZVxuICAgIH1cblxuICAgIGNvbnN0IHN1Z2dlc3RGbjogU3VnZ2VzdEZuPGFueSwgYW55PiA9IGRlZi5hdXRvY29tcGxldGU/LnN1Z2dlc3RGbiB8fCBvcHRzPy5kZWZhdWx0U3VnZ2VzdEZuO1xuICAgIGlmICghc3VnZ2VzdEZuKSB7XG4gICAgICBjb25zb2xlLndhcm4oXG4gICAgICAgIGBNaXNzaW5nICdkZXNlcmlhbGl6ZScgb3IgJ2F1dG9jb21wbGV0ZS5zdWdnZXN0Rm4nIGluIHRoZSBmaWVsZCBkZWZpbml0aW9uICcke2RlZi5rZXl9Jy4gQ2Fubm90IGRlc2VyaWFsaXplIHZhbHVlOiAke0pTT04uc3RyaW5naWZ5KHZhbHVlKX1gXG4gICAgICApO1xuICAgICAgcmV0dXJuIHZhbHVlOyAvLyBTa2lwXG4gICAgfVxuICAgIGxldCBzZWFyY2hWYWx1ZSA9IHZhbHVlO1xuICAgIGNvbnN0IGZpbHRlciA9IHsgLi4uZGVmLmF1dG9jb21wbGV0ZT8uZmlsdGVyIH07IC8vIENvcGUgZmlsdGVyXG4gICAgaWYgKHNlcmlhbGl6ZUF0dHJpYnV0ZSA9PT0gJ2lkJyB8fCBzZXJpYWxpemVBdHRyaWJ1dGUgPT09ICdsYWJlbCcpIHtcbiAgICAgIGZpbHRlcltzZXJpYWxpemVBdHRyaWJ1dGVdID0gc2VyaWFsaXplQXR0cmlidXRlID09PSAnaWQnID8gK3ZhbHVlIDogdmFsdWU7XG4gICAgICBzZWFyY2hWYWx1ZSA9ICcqJztcbiAgICAgIC8vIERFQlVHXG4gICAgICAvL2NvbnNvbGUuZGVidWcoYFtwcm9wZXJ0aWVzLXV0aWxzXSBSZXNvbHZpbmcgZW50aXR5IHdoZXJlIGlkPSR7dmFsdWV9Li4uYCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGZpbHRlci5zZWFyY2hBdHRyaWJ1dGUgPSBzZXJpYWxpemVBdHRyaWJ1dGU7XG4gICAgICAvLyBERUJVR1xuICAgICAgLy9jb25zb2xlLmRlYnVnKGBbcHJvcGVydGllcy11dGlsc10gUmVzb2x2aW5nIGVudGl0eSB3aGVyZSAke3NlcmlhbGl6ZUF0dHJpYnV0ZX09JHtzZWFyY2hWYWx1ZX0uLi5gKTtcbiAgICB9XG5cbiAgICB0cnkge1xuICAgICAgLy8gRmV0Y2ggZW50aXR5LCB1c2luZyB0aGUgc3VnZ2VzdCBmdW5jdGlvblxuICAgICAgY29uc3QgcmVzID0gYXdhaXQgc3VnZ2VzdEZuKHNlYXJjaFZhbHVlLCBmaWx0ZXIsIHNlcmlhbGl6ZUF0dHJpYnV0ZSwgJ2FzYycsIHtcbiAgICAgICAgd2l0aFRvdGFsOiBmYWxzZSxcbiAgICAgICAgb2Zmc2V0OiAwLFxuICAgICAgICBzaXplOiAxLFxuICAgICAgICAuLi5vcHRzPy5kZWZhdWx0U3VnZ2VzdE9wdGlvbnMsXG4gICAgICB9KTtcblxuICAgICAgLy8gR2V0IHJlc3VsdCBhcnJheVxuICAgICAgY29uc3QgZGF0YSA9IEFycmF5LmlzQXJyYXkocmVzKSA/IHJlcyA6IHJlcy5kYXRhO1xuXG4gICAgICBpZiAoZGF0YT8ubGVuZ3RoID4gMCkge1xuICAgICAgICBpZiAoZGF0YT8ubGVuZ3RoID4gMSkge1xuICAgICAgICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgICAgIGBbcHJvcGVydGllcy11dGlsc10gTW9yZSB0aGFuIG9uZSBlbnRpdHkgZm91bmQsIGZvciBvcHRpb24gJHtkZWYua2V5fT0ke3ZhbHVlfSEgUGxlYXNlIGNoZWNrIG9wdGlvbidzIGRlZmluaXRpb24gYW5kIHRoZSAnYXV0b2NvbXBsZXRlLnN1Z2dlc3RGbicgZnVuY3Rpb25gLFxuICAgICAgICAgICAgZGF0YVxuICAgICAgICAgICk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBERUJVR1xuICAgICAgICAvL2NvbnNvbGUuZGVidWcoYFtwcm9wZXJ0aWVzLXV0aWxzXSAke2RhdGEubGVuZ3RofSBlbnRpdGllcyBmb3VuZDogYCwgZGF0YSk7XG5cbiAgICAgICAgLy8gT2ssIHdlIGZpbmQgaXQgPT4gc3RvcCBoZXJlXG4gICAgICAgIHJldHVybiBkYXRhWzBdO1xuICAgICAgfVxuXG4gICAgICAvLyBXYXJuLCBidXQgY29udGludWVcbiAgICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgYFtwcm9wZXJ0aWVzLXV0aWxzXSBVbmFibGUgdG8gcmVzb2x2ZSBlbnRpdHkgZm9yIG9wdGlvbjogJHtkZWYua2V5fT0ke3ZhbHVlfS4gUGxlYXNlIGNoZWNrIG9wdGlvbidzIGRlZmluaXRpb24gYW5kIHRoZSAnYXV0b2NvbXBsZXRlLnN1Z2dlc3RGbicgZnVuY3Rpb25gXG4gICAgICApO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgY29uc29sZS5lcnJvcihgW3Byb3BlcnRpZXMtdXRpbHNdIENhbm5vdCByZXNvbHZlIGVudGl0eSBmb3Igb3B0aW9uOiAke2RlZi5rZXl9PSR7dmFsdWV9YCwgZXJyKTtcbiAgICAgIC8vIENvbnRpbnVlXG4gICAgfVxuXG4gICAgLy8gQ3JlYXRlIHRoZSBtaXNzaW5nIHJlc3VsdFxuICAgIGNvbnN0IHVucmVzb2x2ZWRFbnRpdHkgPSA8YW55PntcbiAgICAgIFtzZXJpYWxpemVBdHRyaWJ1dGVdOiB2YWx1ZSxcbiAgICB9O1xuXG4gICAgLy8gRmlsbCBhdHRyaWJ1dGVzIHdpdGggJz8/J1xuICAgIGRlZi5hdXRvY29tcGxldGU/LmF0dHJpYnV0ZXM/LmZvckVhY2goKGtleSkgPT4ge1xuICAgICAgdW5yZXNvbHZlZEVudGl0eVtrZXldID0gdW5yZXNvbHZlZEVudGl0eVtrZXldID8/ICcnO1xuICAgIH0pO1xuXG4gICAgcmV0dXJuIHVucmVzb2x2ZWRFbnRpdHk7XG4gIH1cblxuICBwcml2YXRlIHN0YXRpYyB0b1N0cmluZyh2YWx1ZT86IGFueSk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHZhbHVlPy50b1N0cmluZygpO1xuICB9XG59XG4iXX0=
|
|
304
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvcGVydGllcy51dGlscy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvY29yZS9mb3JtL3Byb3BlcnRpZXMvcHJvcGVydGllcy51dGlscy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsS0FBSyxFQUFFLFlBQVksRUFBRSxRQUFRLEVBQUUsZUFBZSxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsUUFBUSxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFJOUksTUFBTSxPQUFPLGtCQUFrQjtJQUM3Qjs7Ozs7Ozs7T0FRRztJQUNILE1BQU0sQ0FBQyxhQUFhLENBQVUsT0FBdUIsRUFBRSxXQUFtQyxFQUFFLElBQWtDO1FBQzVILE9BQU8sQ0FDTCxDQUFDLE9BQU8sSUFBSSxFQUFFLENBQUM7WUFDYixzQkFBc0I7YUFDckIsR0FBRyxDQUFDLENBQUMsTUFBTSxFQUFFLEVBQUU7WUFDZCxJQUFJLENBQUMsTUFBTTtnQkFBRSxPQUFPLFNBQVMsQ0FBQztZQUM5QixNQUFNLEdBQUcsR0FBRyxnQkFBZ0IsQ0FBQyxjQUFjLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDcEQsSUFBSSxDQUFDLEdBQUc7Z0JBQUUsT0FBTyxTQUFTLENBQUM7WUFDM0IsTUFBTSxHQUFHLEdBQUcsV0FBVyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxHQUFHLENBQUMsQ0FBQztZQUNwRCxPQUFPLGdCQUFnQixDQUFDLFFBQVEsQ0FBQyxNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUM7UUFDaEQsQ0FBQyxDQUFDO1lBQ0YscUJBQXFCO2FBQ3BCLE1BQU0sQ0FDTCxDQUFDLEdBQUcsRUFBRSxJQUFJLEVBQUUsRUFBRTtZQUNaLElBQUksWUFBWSxDQUFDLElBQUksRUFBRSxHQUFHLENBQUM7Z0JBQUUsT0FBTyxHQUFHLENBQUM7WUFD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QUFDLFlBQVksRUFBRSxVQUFVLEVBQUUsT0FBTyxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUU7WUFDNUMsZ0JBQWdCLENBQUMsR0FBRyxDQUFDLEdBQUcsZ0JBQWdCLENBQUMsR0FBRyxDQUFDLElBQUksRUFBRSxDQUFDO1FBQ3RELENBQUMsQ0FBQyxDQUFDO1FBRUgsT0FBTyxnQkFBZ0IsQ0FBQztJQUMxQixDQUFDO0lBRU8sTUFBTSxDQUFDLFFBQVEsQ0FBQyxLQUFXO1FBQ2pDLE9BQU8sS0FBSyxFQUFFLFFBQVEsRUFBRSxDQUFDO0lBQzNCLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFByb3BlcnR5LCBQcm9wZXJ0eU1hcCB9IGZyb20gJy4uLy4uLy4uL3NoYXJlZC90eXBlcyc7XG5pbXBvcnQgeyBnZXRQcm9wZXJ0eUJ5UGF0aCwgaXNOaWwsIGlzTmlsT3JCbGFuaywgaXNOb3ROaWwsIGlzTm90TmlsT3JCbGFuaywgaXNQcm9taXNlLCB0b0Jvb2xlYW4sIHRvTnVtYmVyIH0gZnJvbSAnLi4vLi4vLi4vc2hhcmVkL2Z1bmN0aW9ucyc7XG5pbXBvcnQgeyBGb3JtRmllbGREZWZpbml0aW9uIH0gZnJvbSAnLi4vLi4vLi4vc2hhcmVkL2Zvcm0vZmllbGQubW9kZWwnO1xuaW1wb3J0IHsgRW50aXRpZXNTZXJ2aWNlTG9hZE9wdGlvbnMsIFN1Z2dlc3RGbiB9IGZyb20gJy4uLy4uLy4uL3NoYXJlZC9zZXJ2aWNlcy9lbnRpdHktc2VydmljZS5jbGFzcyc7XG5cbmV4cG9ydCBjbGFzcyBBcHBQcm9wZXJ0aWVzVXRpbHMge1xuICAvKipcbiAgICogQ29udmVydHMgYW4gYXJyYXkgb2YgYFByb3BlcnR5YCBvYmplY3RzIGludG8gYSBgUHJvcGVydGllc01hcGAgb2JqZWN0LlxuICAgKlxuICAgKiBAcGFyYW0ge1Byb3BlcnR5W119IFtzb3VyY2VzXSAtIEFuIG9wdGlvbmFsIGFycmF5IG9mIHByb3BlcnRpZXMgdG8gYmUgY29udmVydGVkLlxuICAgKiBAcGFyYW0ge0Zvcm1GaWVsZERlZmluaXRpb25bXX0gW2RlZmluaXRpb25zXSAtIEFuIG9wdGlvbmFsIGFycmF5IG9mIGZvcm0gZmllbGQgZGVmaW5pdGlvbnMgdG8gaGVscCB3aXRoIHRoZSBjb252ZXJzaW9uLlxuICAgKiBAcGFyYW0ge09iamVjdH0gW29wdHNdIC0gT3B0aW9uYWwgY29uZmlndXJhdGlvbnMuXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gW29wdHMub21pdE5pbE9yQmxhbmtdIC0gSWYgdHJ1ZSwgcHJvcGVydGllcyB3aXRoIG5pbCBvciBibGFuayB2YWx1ZXMgd2lsbCBiZSBvbWl0dGVkLiBEZWZhdWx0cyB0byB0cnVlLlxuICAgKiBAcmV0dXJuIHtQcm9wZXJ0eU1hcH0gLSBUaGUgcmVzdWx0aW5nIGBQcm9wZXJ0aWVzTWFwYCBvYmplY3QuXG4gICAqL1xuICBzdGF0aWMgYXJyYXlBc09iamVjdDxUID0gYW55Pihzb3VyY2VzPzogUHJvcGVydHk8VD5bXSwgZGVmaW5pdGlvbnM/OiBGb3JtRmllbGREZWZpbml0aW9uW10sIG9wdHM/OiB7IG9taXROaWxPckJsYW5rOiBib29sZWFuIH0pOiBQcm9wZXJ0eU1hcCB7XG4gICAgcmV0dXJuIChcbiAgICAgIChzb3VyY2VzIHx8IFtdKVxuICAgICAgICAvLyBTZXJpYWxpemUgZWFjaCBpdGVtXG4gICAgICAgIC5tYXAoKHNvdXJjZSkgPT4ge1xuICAgICAgICAgIGlmICghc291cmNlKSByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICAgIGNvbnN0IGtleSA9IEFwcFByb3BlcnR5VXRpbHMuZ2V0UHJvcGVydHlLZXkoc291cmNlKTtcbiAgICAgICAgICBpZiAoIWtleSkgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgICBjb25zdCBkZWYgPSBkZWZpbml0aW9ucz8uZmluZCgoZCkgPT4gZC5rZXkgPT09IGtleSk7XG4gICAgICAgICAgcmV0dXJuIEFwcFByb3BlcnR5VXRpbHMuYXNPYmplY3Qoc291cmNlLCBkZWYpO1xuICAgICAgICB9KVxuICAgICAgICAvLyBGaWxsIGEgSlNPTiBvYmplY3RcbiAgICAgICAgLnJlZHVjZShcbiAgICAgICAgICAocmVzLCBpdGVtKSA9PiB7XG4gICAgICAgICAgICBpZiAoaXNOaWxPckJsYW5rKGl0ZW0/LmtleSkpIHJldHVybiByZXM7XG4gICAgICAgICAgICAvLyBTa2lwIGlmIG5pbCBvciBibGFuayB2YWx1ZVxuICAgICAgICAgICAgaWYgKG9wdHM/Lm9taXROaWxPckJsYW5rICE9PSBmYWxzZSAmJiBpc05pbE9yQmxhbmsoaXRlbS52YWx1ZSkpIHJldHVybiByZXM7XG4gICAgICAgICAgICByZXNbaXRlbS5rZXldID0gaXRlbS52YWx1ZTtcbiAgICAgICAgICAgIHJldHVybiByZXM7XG4gICAgICAgICAgfSxcbiAgICAgICAgICA8UHJvcGVydHlNYXA+e31cbiAgICAgICAgKVxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogR2VuZXJhdGVzIGFuIGFycmF5IG9mIHByb3BlcnRpZXMgZnJvbSB0aGUgZ2l2ZW4gb2JqZWN0LCBvcHRpb25hbGx5IGFwcGx5aW5nIGRlZmluaXRpb25zIHRvIHRoZSBwcm9wZXJ0aWVzLlxuICAgKlxuICAgKiBAcGFyYW0ge1Byb3BlcnR5TWFwfSBbc291cmNlc10gLSBUaGUgc291cmNlIG9iamVjdCBmcm9tIHdoaWNoIHByb3BlcnRpZXMgYXJlIHRvIGJlIGV4dHJhY3RlZC5cbiAgICogQHBhcmFtIHtGb3JtRmllbGREZWZpbml0aW9uW119IFtkZWZpbml0aW9uc10gLSBBbiBvcHRpb25hbCBhcnJheSBvZiBkZWZpbml0aW9ucyB0byBiZSBhcHBsaWVkIHRvIHRoZSBleHRyYWN0ZWQgcHJvcGVydGllcy5cbiAgICogQHBhcmFtIG9wdHNcbiAgICogQHJldHVybiB7UHJvcGVydHlbXSB8IFByb21pc2U8UHJvcGVydHlbXT59IEFuIGFycmF5IG9mIHByb3BlcnRpZXMgZ2VuZXJhdGVkIGZyb20gdGhlIHNvdXJjZSBvYmplY3QsIG9yIGEgcHJvbWlzZSByZXNvbHZpbmcgdG8gdGhhdCBhcnJheS5cbiAgICovXG4gIHN0YXRpYyBhcnJheUZyb21PYmplY3Q8VD4oXG4gICAgc291cmNlcz86IFByb3BlcnR5TWFwIHwgUHJvcGVydHk8VD5bXSxcbiAgICBkZWZpbml0aW9ucz86IEZvcm1GaWVsZERlZmluaXRpb25bXSxcbiAgICBvcHRzPzoge1xuICAgICAga2VlcE9ycGhhbj86IGJvb2xlYW47IC8vIHRydWUgYnkgZGVmYXVsdFxuICAgIH1cbiAgKTogUHJvcGVydHk8VD5bXSB8IFByb21pc2U8UHJvcGVydHk8VD5bXT4ge1xuICAgIC8vIERFQlVHXG4gICAgLy9jb25zb2xlLmRlYnVnKGBbcHJvcGVydGllcy11dGlsc10gQ29udmVydCBwcm9wZXJ0eSBtYXAgaW50byBhcnJheSBvZiBQcm9wZXJ0eS4uLmApO1xuXG4gICAgbGV0IHRhcmdldHMgPSBBcnJheS5pc0FycmF5KHNvdXJjZXMpXG4gICAgICA/IHNvdXJjZXMuc2xpY2UoKVxuICAgICAgOiBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhzb3VyY2VzIHx8IHt9KS5tYXAoXG4gICAgICAgICAgKGtleSkgPT5cbiAgICAgICAgICAgIDxQcm9wZXJ0eTxhbnk+PntcbiAgICAgICAgICAgICAga2V5LFxuICAgICAgICAgICAgICB2YWx1ZTogc291cmNlc1trZXldLFxuICAgICAgICAgICAgfVxuICAgICAgICApO1xuICAgIGNvbnN0IGpvYnMgPSBbXTtcblxuICAgIGlmICghIWRlZmluaXRpb25zKSB7XG4gICAgICB0YXJnZXRzID0gdGFyZ2V0c1xuICAgICAgICAubWFwKCh0YXJnZXQ6IFByb3BlcnR5PGFueT4pID0+IHtcbiAgICAgICAgICAvLyBGaW5kIGRlZmluaXRpb25cbiAgICAgICAgICBjb25zdCBkZWYgPSBkZWZpbml0aW9ucy5maW5kKChkZWYpID0+IGRlZi5rZXkgPT09IHRhcmdldC5rZXkpO1xuXG4gICAgICAgICAgLy8gRXhjbHVkZSBubyBkZWZpbml0aW9uIChpZiBleHBlY3RlZCBieSB1c2VyIG9wdGlvbnMpXG4gICAgICAgICAgaWYgKCFkZWYgJiYgb3B0cz8ua2VlcE9ycGhhbiA9PT0gZmFsc2UpIHJldHVybiBudWxsO1xuXG4gICAgICAgICAgLy8gRGVzZXJpYWxpemUgZnJvbSBzdHJpbmdcbiAgICAgICAgICBsZXQgcHJvcGVydHlPclByb21pc2UgPSBBcHBQcm9wZXJ0eVV0aWxzLmZyb21PYmplY3QodGFyZ2V0LCBkZWYpO1xuICAgICAgICAgIGlmIChpc1Byb21pc2UocHJvcGVydHlPclByb21pc2UpKSB7XG4gICAgICAgICAgICBqb2JzLnB1c2gocHJvcGVydHlPclByb21pc2UudGhlbigocHJvcGVydHkpID0+ICh0YXJnZXQudmFsdWUgPSBwcm9wZXJ0eS52YWx1ZSkpKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gVXBkYXRlIHRoZSB0YXJnZXQgdmFsdWVcbiAgICAgICAgICAgIHRhcmdldC52YWx1ZSA9IHByb3BlcnR5T3JQcm9taXNlLnZhbHVlO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHJldHVybiB0YXJnZXQ7XG4gICAgICAgIH0pXG4gICAgICAgIC8vIENsZWFuIG9ycGhhblxuICAgICAgICAuZmlsdGVyKGlzTm90TmlsKTtcblxuICAgICAgLy8gUmV0dXJuIGFzIHByb21pc2UsIHdoZW4gbmVlZFxuICAgICAgaWYgKGpvYnMubGVuZ3RoKSByZXR1cm4gUHJvbWlzZS5hbGwoam9icykudGhlbigoKSA9PiB0YXJnZXRzIGFzIFByb3BlcnR5PFQ+W10pO1xuICAgIH1cblxuICAgIHJldHVybiB0YXJnZXRzIGFzIFByb3BlcnR5PFQ+W107XG4gIH1cblxuICBzdGF0aWMgc2FuaXRpemUoXG4gICAgc291cmNlOiBQcm9wZXJ0eU1hcCB8IFByb3BlcnR5W10sXG4gICAgb3B0cz86IHtcbiAgICAgIGRlZmluaXRpb25zPzogRm9ybUZpZWxkRGVmaW5pdGlvbltdO1xuICAgICAgaW5jbHVkZWRLZXlzPzogc3RyaW5nW107XG4gICAgfVxuICApOiBQcm9wZXJ0eU1hcCB8IFByb3BlcnR5W10ge1xuICAgIGlmICghc291cmNlKSByZXR1cm4gc291cmNlOyAvLyBTa2lwIGlmIGVtcHR5XG4gICAgY29uc3QgaW5jbHVkZWRLZXlzID0gb3B0cz8uaW5jbHVkZWRLZXlzID8/IG9wdHM/LmRlZmluaXRpb25zLm1hcCgoZGVmKSA9PiBkZWYua2V5KTtcbiAgICBpZiAoQXJyYXkuaXNBcnJheShzb3VyY2UpKSB7XG4gICAgICByZXR1cm4gc291cmNlLmZpbHRlcigocHJvcGVydHkpID0+IHByb3BlcnR5ICYmICghaW5jbHVkZWRLZXlzIHx8IGluY2x1ZGVkS2V5cy5pbmNsdWRlcyhwcm9wZXJ0eS5rZXkpKSAmJiBpc05vdE5pbChwcm9wZXJ0eS52YWx1ZSkpO1xuICAgIH1cbiAgICByZXR1cm4gKGluY2x1ZGVkS2V5cyB8fCBPYmplY3Qua2V5cyhzb3VyY2UpKS5yZWR1Y2UoXG4gICAgICAocmVzLCBrZXkpID0+IHtcbiAgICAgICAgaWYgKGlzTm90TmlsKHNvdXJjZVtrZXldKSkgcmVzW2tleV0gPSBzb3VyY2Vba2V5XTtcbiAgICAgICAgcmV0dXJuIHJlcztcbiAgICAgIH0sXG4gICAgICA8UHJvcGVydHlNYXA+e31cbiAgICApO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBBcHBQcm9wZXJ0eVV0aWxzIHtcbiAgc3RhdGljIGtleShrZXk6IGFueSk6IHN0cmluZyB7XG4gICAgcmV0dXJuIGtleT8ua2V5ID8/IGtleTtcbiAgfVxuXG4gIHN0YXRpYyBnZXRQcm9wZXJ0eUtleShzb3VyY2U6IFByb3BlcnR5IHwgYW55KTogc3RyaW5nIHtcbiAgICBpZiAoIXNvdXJjZSkgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICByZXR1cm4gKHNvdXJjZS5rZXkgYXMgYW55KT8ua2V5ID8/IHNvdXJjZS5rZXk7XG4gIH1cblxuICAvKipcbiAgICogQ29udmVydHMgdGhlIGdpdmVuIHNvdXJjZSB0byBhbiBvYmplY3QgdGhhdCBjb250YWlucyBhIGtleS12YWx1ZSBwYWlyLlxuICAgKlxuICAgKiBAcGFyYW0ge1Byb3BlcnR5PGFueT4gfCBhbnl9IHNvdXJjZSAtIFRoZSBzb3VyY2UgcHJvcGVydHkgb3IgYW55IHZhbHVlIHRvIGJlIGNvbnZlcnRlZC5cbiAgICogQHBhcmFtIHtGb3JtRmllbGREZWZpbml0aW9ufSBbZGVmXSAtIFRoZSBmb3JtIGZpZWxkIGRlZmluaXRpb24gdXNlZCBmb3Igc2VyaWFsaXphdGlvbi5cbiAgICogQHBhcmFtIHtPYmplY3R9IFtvcHRzXSAtIEFkZGl0aW9uYWwgb3B0aW9ucyBmb3Igc2VyaWFsaXphdGlvbi5cbiAgICogQHBhcmFtIHtzdHJpbmd9IFtvcHRzLmRlZmF1bHRTZXJpYWxpemVBdHRyaWJ1dGU9J2lkJ10gLSBUaGUgYXR0cmlidXRlIHRvIGJlIHVzZWQgZm9yIGRlZmF1bHQgc2VyaWFsaXphdGlvbi5cbiAgICogQHJldHVybiB7eyBrZXk6IHN0cmluZywgdmFsdWU6IHN0cmluZyB9IHwgdW5kZWZpbmVkfSBBbiBvYmplY3QgY29udGFpbmluZyB0aGUgc2VyaWFsaXplZCBrZXktdmFsdWUgcGFpciwgb3IgdW5kZWZpbmVkIGlmIHRoZSBzb3VyY2UgaXMgbm90IHByb3ZpZGVkLlxuICAgKi9cbiAgc3RhdGljIGFzT2JqZWN0KFxuICAgIHNvdXJjZTogUHJvcGVydHk8YW55PiB8IGFueSxcbiAgICBkZWY/OiBGb3JtRmllbGREZWZpbml0aW9uLFxuICAgIG9wdHM/OiB7XG4gICAgICBkZWZhdWx0U2VyaWFsaXplQXR0cmlidXRlPzogc3RyaW5nO1xuICAgIH1cbiAgKTogeyBrZXk6IHN0cmluZzsgdmFsdWU6IHN0cmluZyB9IHwgdW5kZWZpbmVkIHtcbiAgICBpZiAoIXNvdXJjZSkgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAvLyBTZXJpYWxpemUga2V5IChXQVJOSU5HOiBjYW4gYmUgYW4gb2JqZWN0LCB3aGVuIHVzaW5nIGF1dG9jb21wbGV0ZSBmaWVsZCB0byBlZGl0IGEga2V5IC0gc2VlIEFwcFByb3BlcnRpZXNGb3JtKVxuICAgIGNvbnN0IGtleSA9IEFwcFByb3BlcnR5VXRpbHMuZ2V0UHJvcGVydHlLZXkoc291cmNlKTtcblxuICAgIC8vIFByZXBhcmUgYSBkZXNlcmlhbGl6ZSBmdW5jdGlvblxuICAgIGxldCBzZXJpYWxpemVGbiA9IGRlZj8uc2VyaWFsaXplO1xuICAgIGlmICghc2VyaWFsaXplRm4pIHtcbiAgICAgIHN3aXRjaCAoZGVmPy50eXBlIHx8ICdvdGhlcicpIHtcbiAgICAgICAgY2FzZSAnZW51bSc6XG4gICAgICAgIGNhc2UgJ2VudW1zJzpcbiAgICAgICAgICBzZXJpYWxpemVGbiA9IEFwcFByb3BlcnR5VXRpbHMua2V5O1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICdlbnRpdHknOlxuICAgICAgICBjYXNlICdlbnRpdGllcyc6IHtcbiAgICAgICAgICBjb25zdCBzZXJpYWxpemVBdHRyaWJ1dGUgPSBkZWY/LnNlcmlhbGl6ZUF0dHJpYnV0ZSA/PyBvcHRzPy5kZWZhdWx0U2VyaWFsaXplQXR0cmlidXRlID8/ICdpZCc7XG4gICAgICAgICAgc2VyaWFsaXplRm4gPSAodmFsdWUpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHNlcmlhbGl6ZVZhbHVlID0gZ2V0UHJvcGVydHlCeVBhdGgodmFsdWUsIHNlcmlhbGl6ZUF0dHJpYnV0ZSwgdmFsdWUgLypkZWZhdWx0IHZhbHVlKi8pO1xuICAgICAgICAgICAgaWYgKGlzTmlsKHNlcmlhbGl6ZVZhbHVlKSkgcmV0dXJuIHNlcmlhbGl6ZVZhbHVlO1xuICAgICAgICAgICAgcmV0dXJuIHNlcmlhbGl6ZVZhbHVlLnRvU3RyaW5nKCk7XG4gICAgICAgICAgfTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIHNlcmlhbGl6ZUZuID0gQXBwUHJvcGVydHlVdGlscy50b1N0cmluZztcbiAgICAgIH1cbiAgICB9XG5cbiAgICBsZXQgdmFsdWVTdHI6IHN0cmluZztcblxuICAgIC8vIFZhbHVlIGlzIGFuIGFycmF5XG4gICAgaWYgKEFycmF5LmlzQXJyYXkoc291cmNlLnZhbHVlKSkge1xuICAgICAgdmFsdWVTdHIgPSBzb3VyY2UudmFsdWUubWFwKHNlcmlhbGl6ZUZuKS5maWx0ZXIoaXNOb3ROaWxPckJsYW5rKS5qb2luKCcsJyk7XG4gICAgfVxuICAgIC8vIEFueSBvdGhlciBjYXNlXG4gICAgZWxzZSB7XG4gICAgICB2YWx1ZVN0ciA9IHNlcmlhbGl6ZUZuKHNvdXJjZS52YWx1ZSk7XG4gICAgfVxuICAgIHJldHVybiB7IGtleSwgdmFsdWU6IHZhbHVlU3RyIH07XG4gIH1cblxuICBzdGF0aWMgZnJvbU9iamVjdDxUID0gc3RyaW5nPihcbiAgICBzb3VyY2U6IFByb3BlcnR5IHwgUHJvcGVydHk8VD4sXG4gICAgZGVmOiBGb3JtRmllbGREZWZpbml0aW9uLFxuICAgIG9wdHM/OiB7XG4gICAgICBkZWZhdWx0U3VnZ2VzdEZuOiBTdWdnZXN0Rm48YW55LCBhbnk+O1xuICAgICAgZGVmYXVsdFN1Z2dlc3RPcHRpb25zPzogRW50aXRpZXNTZXJ2aWNlTG9hZE9wdGlvbnM7XG4gICAgICBkZWZhdWx0U2VyaWFsaXplQXR0cmlidXRlPzogc3RyaW5nO1xuICAgIH1cbiAgKTogUHJvcGVydHk8VD4gfCBQcm9taXNlPFByb3BlcnR5PFQ+PiB7XG4gICAgaWYgKCFzb3VyY2U/LmtleSB8fCBpc05pbChzb3VyY2UudmFsdWUpIHx8ICFkZWYpIHJldHVybiBzb3VyY2UgYXMgUHJvcGVydHk8VD47IC8vIFNraXAgaWYgbm8ga2V5XG5cbiAgICAvLyBDbG9uZSB0aGUgc291cmNlXG4gICAgY29uc3QgdGFyZ2V0OiBQcm9wZXJ0eTxhbnk+ID0geyBrZXk6IHNvdXJjZS5rZXksIHZhbHVlOiBzb3VyY2UudmFsdWUgfTtcblxuICAgIGNvbnN0IGpvYnM6IFByb21pc2U8YW55PltdID0gW107XG4gICAgLy8gUmVzb2x2ZSB2YWx1ZVxuICAgIHN3aXRjaCAoZGVmLnR5cGUpIHtcbiAgICAgIGNhc2UgJ2Jvb2xlYW4nOlxuICAgICAgICB0YXJnZXQudmFsdWUgPSB0b0Jvb2xlYW4oc291cmNlLnZhbHVlIGFzIGFueSwgdG9Cb29sZWFuKGRlZi5kZWZhdWx0VmFsdWUpKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdpbnRlZ2VyJzpcbiAgICAgIGNhc2UgJ2RvdWJsZSc6XG4gICAgICAgIHRhcmdldC52YWx1ZSA9IHRvTnVtYmVyKHNvdXJjZS52YWx1ZSBhcyBhbnksIHRvTnVtYmVyKGRlZi5kZWZhdWx0VmFsdWUpKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdlbnVtJzpcbiAgICAgICAgY29uc3QgdmFsdWVLZXkgPSBBcHBQcm9wZXJ0eVV0aWxzLmtleSh0YXJnZXQudmFsdWUpO1xuICAgICAgICBpZiAoaXNOb3ROaWxPckJsYW5rKHZhbHVlS2V5KSkge1xuICAgICAgICAgIGNvbnN0IGVudW1WYWx1ZSA9IChkZWYudmFsdWVzIGFzIChzdHJpbmcgfCBQcm9wZXJ0eSlbXSk/LmZpbmQoKGRlZlZhbHVlKSA9PiBkZWZWYWx1ZSAmJiB2YWx1ZUtleSA9PT0gKGRlZlZhbHVlWydrZXknXSB8fCBkZWZWYWx1ZSkpID8/IG51bGw7XG4gICAgICAgICAgdGFyZ2V0LnZhbHVlID0gZW51bVZhbHVlPy5bJ2tleSddID8/IGVudW1WYWx1ZSA/PyBudWxsO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRhcmdldC52YWx1ZSA9IG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdlbnVtcyc6XG4gICAgICAgIGNvbnN0IHZhbHVlS2V5cyA9IEFycmF5LmlzQXJyYXkoc291cmNlLnZhbHVlKVxuICAgICAgICAgID8gc291cmNlLnZhbHVlLm1hcChBcHBQcm9wZXJ0eVV0aWxzLmtleSkgLy8gQ29weVxuICAgICAgICAgIDogdHlwZW9mIHNvdXJjZS52YWx1ZSA9PT0gJ3N0cmluZydcbiAgICAgICAgICAgID8gc291cmNlLnZhbHVlLnRyaW0oKS5zcGxpdCgvLCsvKVxuICAgICAgICAgICAgOiBbQXBwUHJvcGVydHlVdGlscy5rZXkoc291cmNlLnZhbHVlKV07XG4gICAgICAgIHRhcmdldC52YWx1ZSA9IHZhbHVlS2V5c1xuICAgICAgICAgIC5maWx0ZXIoaXNOb3ROaWwpXG4gICAgICAgICAgLm1hcChcbiAgICAgICAgICAgIChrZXk6IHN0cmluZykgPT5cbiAgICAgICAgICAgICAgKGRlZi52YWx1ZXMgYXMgKHN0cmluZyB8IFByb3BlcnR5KVtdKT8uZmluZCgoZGVmVmFsdWUpID0+IGRlZlZhbHVlICYmIGtleSA9PT0gKGRlZlZhbHVlWydrZXknXSB8fCBkZWZWYWx1ZSkpIHx8IHsga2V5LCB2YWx1ZTogJz8nIH1cbiAgICAgICAgICApO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ2VudGl0eSc6XG4gICAgICAgIC8vIERlc2VyaWFsaXplIGVudGl0eSAoZS5nLiBsb2FkIGVudGl0eSBmcm9tIHRoZSBpZClcbiAgICAgICAgY29uc3QgdmFsdWVPclByb21pc2UgPSBBcHBQcm9wZXJ0eVV0aWxzLnJlc29sdmVFbnRpdHkodGFyZ2V0LnZhbHVlLCBkZWYsIG9wdHMpO1xuICAgICAgICBpZiAoaXNQcm9taXNlKHZhbHVlT3JQcm9taXNlKSkge1xuICAgICAgICAgIGpvYnMucHVzaChcbiAgICAgICAgICAgIHZhbHVlT3JQcm9taXNlLnRoZW4oKHZhbHVlKSA9PiB7XG4gICAgICAgICAgICAgIHRhcmdldC52YWx1ZSA9IHZhbHVlO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgICApO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRhcmdldC52YWx1ZSA9IHZhbHVlT3JQcm9taXNlIGFzIGFueTtcbiAgICAgICAgfVxuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ2VudGl0aWVzJzpcbiAgICAgICAgLy8gQ29udmVydCB2YWx1ZSB0byBhcnJheVxuICAgICAgICB0YXJnZXQudmFsdWUgPSBBcnJheS5pc0FycmF5KHNvdXJjZS52YWx1ZSlcbiAgICAgICAgICA/IHNvdXJjZS52YWx1ZS5zbGljZSgpIC8vIENvcHlcbiAgICAgICAgICA6IHR5cGVvZiBzb3VyY2UudmFsdWUgPT09ICdzdHJpbmcnXG4gICAgICAgICAgICA/IHNvdXJjZS52YWx1ZVxuICAgICAgICAgICAgICAgIC5zcGxpdCgnLCcpXG4gICAgICAgICAgICAgICAgLm1hcCgodikgPT4gdi50cmltKCkpXG4gICAgICAgICAgICAgICAgLmZpbHRlcihpc05vdE5pbE9yQmxhbmspXG4gICAgICAgICAgICA6IFtdO1xuXG4gICAgICAgIC8vIERlc2VyaWFsaXplIGVhY2ggc3ViLXZhbHVlXG4gICAgICAgIGxldCBpbmRleCA9IDA7XG4gICAgICAgIGZvciAobGV0IHN1YlZhbHVlIG9mIHRhcmdldC52YWx1ZSkge1xuICAgICAgICAgIC8vIERlc2VyaWFsaXplIHN1Yi12YWx1ZVxuICAgICAgICAgIGNvbnN0IHN1YlZhbHVlT3JQcm9taXNlID0gQXBwUHJvcGVydHlVdGlscy5yZXNvbHZlRW50aXR5KHN1YlZhbHVlLCBkZWYsIG9wdHMpO1xuXG4gICAgICAgICAgLy8gQWRkIHByb21pc2UgdG8gam9ic1xuICAgICAgICAgIGlmIChpc1Byb21pc2Uoc3ViVmFsdWVPclByb21pc2UpKSB7XG4gICAgICAgICAgICBjb25zdCBmaW5hbEluZGV4ID0gaW5kZXg7XG4gICAgICAgICAgICBqb2JzLnB1c2goXG4gICAgICAgICAgICAgIHN1YlZhbHVlT3JQcm9taXNlLnRoZW4oKHZhbHVlKSA9PiB7XG4gICAgICAgICAgICAgICAgLy8gVXBkYXRlIHN1YiB2YWx1ZVxuICAgICAgICAgICAgICAgIHRhcmdldC52YWx1ZVtmaW5hbEluZGV4XSA9IHZhbHVlO1xuICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gVXBkYXRlIHN1YiB2YWx1ZVxuICAgICAgICAgICAgdGFyZ2V0LnZhbHVlW2luZGV4XSA9IHN1YlZhbHVlT3JQcm9taXNlIGFzIGFueTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaW5kZXgrKztcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIC8hXFwgUmV0dXJuIGFzIHByb21pc2Ugb25seSBpZiBuZWVkIChsZXQgZnVuY3Rpb24gc3luYyB3aGVuIHBvc3NpYmxlKVxuICAgIGlmIChqb2JzLmxlbmd0aCkgcmV0dXJuIFByb21pc2UuYWxsKGpvYnMpLnRoZW4oKCkgPT4gdGFyZ2V0KTtcblxuICAgIHJldHVybiB0YXJnZXQ7XG4gIH1cblxuICBwcml2YXRlIHN0YXRpYyByZXNvbHZlRW50aXR5KFxuICAgIHZhbHVlOiBhbnksXG4gICAgZGVmOiBGb3JtRmllbGREZWZpbml0aW9uLFxuICAgIG9wdHM/OiB7XG4gICAgICBkZWZhdWx0U3VnZ2VzdEZuOiBTdWdnZXN0Rm48YW55LCBhbnk+O1xuICAgICAgZGVmYXVsdFN1Z2dlc3RPcHRpb25zPzogRW50aXRpZXNTZXJ2aWNlTG9hZE9wdGlvbnM7XG4gICAgICBkZWZhdWx0U2VyaWFsaXplQXR0cmlidXRlPzogc3RyaW5nO1xuICAgIH1cbiAgKTogYW55IHwgUHJvbWlzZTxhbnk+IHtcbiAgICAvLyBVc2UgZGVzZXJpYWxpemUgZnVuY3Rpb24sIGlmIGFueVxuICAgIGlmIChkZWYuZGVzZXJpYWxpemUpIHtcbiAgICAgIHJldHVybiBkZWYuZGVzZXJpYWxpemUodmFsdWUpO1xuICAgIH1cblxuICAgIC8vIE9yIHRyeSB1c2luZyBzdWdnZXN0IGZ1bmN0aW9uXG4gICAgcmV0dXJuIHRoaXMucmVzb2x2ZUVudGl0eUJ5U3VnZ2VzdCh2YWx1ZSwgZGVmLCBvcHRzKTtcbiAgfVxuXG4gIHByaXZhdGUgc3RhdGljIGFzeW5jIHJlc29sdmVFbnRpdHlCeVN1Z2dlc3QoXG4gICAgdmFsdWU6IGFueSxcbiAgICBkZWY6IEZvcm1GaWVsZERlZmluaXRpb24sXG4gICAgb3B0cz86IHtcbiAgICAgIGRlZmF1bHRTdWdnZXN0Rm46IFN1Z2dlc3RGbjxhbnksIGFueT47XG4gICAgICBkZWZhdWx0U3VnZ2VzdE9wdGlvbnM/OiBFbnRpdGllc1NlcnZpY2VMb2FkT3B0aW9ucztcbiAgICAgIGRlZmF1bHRTZXJpYWxpemVBdHRyaWJ1dGU/OiBzdHJpbmc7XG4gICAgfVxuICApOiBQcm9taXNlPGFueT4ge1xuICAgIGNvbnN0IHNlcmlhbGl6ZUF0dHJpYnV0ZSA9IGRlZi5zZXJpYWxpemVBdHRyaWJ1dGUgPz8gb3B0cz8uZGVmYXVsdFNlcmlhbGl6ZUF0dHJpYnV0ZSA/PyAnaWQnO1xuICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnICYmIGlzTm90TmlsKHZhbHVlW3NlcmlhbGl6ZUF0dHJpYnV0ZV0pKSB7XG4gICAgICByZXR1cm4gdmFsdWU7IC8vIEFscmVhZHkgcmVzb2x2ZVxuICAgIH1cblxuICAgIGNvbnN0IHN1Z2dlc3RGbjogU3VnZ2VzdEZuPGFueSwgYW55PiA9IGRlZi5hdXRvY29tcGxldGU/LnN1Z2dlc3RGbiB8fCBvcHRzPy5kZWZhdWx0U3VnZ2VzdEZuO1xuICAgIGlmICghc3VnZ2VzdEZuKSB7XG4gICAgICBjb25zb2xlLndhcm4oXG4gICAgICAgIGBNaXNzaW5nICdkZXNlcmlhbGl6ZScgb3IgJ2F1dG9jb21wbGV0ZS5zdWdnZXN0Rm4nIGluIHRoZSBmaWVsZCBkZWZpbml0aW9uICcke2RlZi5rZXl9Jy4gQ2Fubm90IGRlc2VyaWFsaXplIHZhbHVlOiAke0pTT04uc3RyaW5naWZ5KHZhbHVlKX1gXG4gICAgICApO1xuICAgICAgcmV0dXJuIHZhbHVlOyAvLyBTa2lwXG4gICAgfVxuICAgIGxldCBzZWFyY2hWYWx1ZSA9IHZhbHVlO1xuICAgIGNvbnN0IGZpbHRlciA9IHsgLi4uZGVmLmF1dG9jb21wbGV0ZT8uZmlsdGVyIH07IC8vIENvcGUgZmlsdGVyXG4gICAgaWYgKHNlcmlhbGl6ZUF0dHJpYnV0ZSA9PT0gJ2lkJyB8fCBzZXJpYWxpemVBdHRyaWJ1dGUgPT09ICdsYWJlbCcpIHtcbiAgICAgIGZpbHRlcltzZXJpYWxpemVBdHRyaWJ1dGVdID0gc2VyaWFsaXplQXR0cmlidXRlID09PSAnaWQnID8gK3ZhbHVlIDogdmFsdWU7XG4gICAgICBzZWFyY2hWYWx1ZSA9ICcqJztcbiAgICAgIC8vIERFQlVHXG4gICAgICAvL2NvbnNvbGUuZGVidWcoYFtwcm9wZXJ0aWVzLXV0aWxzXSBSZXNvbHZpbmcgZW50aXR5IHdoZXJlIGlkPSR7dmFsdWV9Li4uYCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGZpbHRlci5zZWFyY2hBdHRyaWJ1dGUgPSBzZXJpYWxpemVBdHRyaWJ1dGU7XG4gICAgICAvLyBERUJVR1xuICAgICAgLy9jb25zb2xlLmRlYnVnKGBbcHJvcGVydGllcy11dGlsc10gUmVzb2x2aW5nIGVudGl0eSB3aGVyZSAke3NlcmlhbGl6ZUF0dHJpYnV0ZX09JHtzZWFyY2hWYWx1ZX0uLi5gKTtcbiAgICB9XG5cbiAgICB0cnkge1xuICAgICAgLy8gRmV0Y2ggZW50aXR5LCB1c2luZyB0aGUgc3VnZ2VzdCBmdW5jdGlvblxuICAgICAgY29uc3QgcmVzID0gYXdhaXQgc3VnZ2VzdEZuKHNlYXJjaFZhbHVlLCBmaWx0ZXIsIHNlcmlhbGl6ZUF0dHJpYnV0ZSwgJ2FzYycsIHtcbiAgICAgICAgd2l0aFRvdGFsOiBmYWxzZSxcbiAgICAgICAgb2Zmc2V0OiAwLFxuICAgICAgICBzaXplOiAxLFxuICAgICAgICAuLi5vcHRzPy5kZWZhdWx0U3VnZ2VzdE9wdGlvbnMsXG4gICAgICB9KTtcblxuICAgICAgLy8gR2V0IHJlc3VsdCBhcnJheVxuICAgICAgY29uc3QgZGF0YSA9IEFycmF5LmlzQXJyYXkocmVzKSA/IHJlcyA6IHJlcy5kYXRhO1xuXG4gICAgICBpZiAoZGF0YT8ubGVuZ3RoID4gMCkge1xuICAgICAgICBpZiAoZGF0YT8ubGVuZ3RoID4gMSkge1xuICAgICAgICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgICAgIGBbcHJvcGVydGllcy11dGlsc10gTW9yZSB0aGFuIG9uZSBlbnRpdHkgZm91bmQsIGZvciBvcHRpb24gJHtkZWYua2V5fT0ke3ZhbHVlfSEgUGxlYXNlIGNoZWNrIG9wdGlvbidzIGRlZmluaXRpb24gYW5kIHRoZSAnYXV0b2NvbXBsZXRlLnN1Z2dlc3RGbicgZnVuY3Rpb25gLFxuICAgICAgICAgICAgZGF0YVxuICAgICAgICAgICk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBERUJVR1xuICAgICAgICAvL2NvbnNvbGUuZGVidWcoYFtwcm9wZXJ0aWVzLXV0aWxzXSAke2RhdGEubGVuZ3RofSBlbnRpdGllcyBmb3VuZDogYCwgZGF0YSk7XG5cbiAgICAgICAgLy8gT2ssIHdlIGZpbmQgaXQgPT4gc3RvcCBoZXJlXG4gICAgICAgIHJldHVybiBkYXRhWzBdO1xuICAgICAgfVxuXG4gICAgICAvLyBXYXJuLCBidXQgY29udGludWVcbiAgICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgYFtwcm9wZXJ0aWVzLXV0aWxzXSBVbmFibGUgdG8gcmVzb2x2ZSBlbnRpdHkgZm9yIG9wdGlvbjogJHtkZWYua2V5fT0ke3ZhbHVlfS4gUGxlYXNlIGNoZWNrIG9wdGlvbidzIGRlZmluaXRpb24gYW5kIHRoZSAnYXV0b2NvbXBsZXRlLnN1Z2dlc3RGbicgZnVuY3Rpb25gXG4gICAgICApO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgY29uc29sZS5lcnJvcihgW3Byb3BlcnRpZXMtdXRpbHNdIENhbm5vdCByZXNvbHZlIGVudGl0eSBmb3Igb3B0aW9uOiAke2RlZi5rZXl9PSR7dmFsdWV9YCwgZXJyKTtcbiAgICAgIC8vIENvbnRpbnVlXG4gICAgfVxuXG4gICAgLy8gQ3JlYXRlIHRoZSBtaXNzaW5nIHJlc3VsdFxuICAgIGNvbnN0IHVucmVzb2x2ZWRFbnRpdHkgPSA8YW55PntcbiAgICAgIFtzZXJpYWxpemVBdHRyaWJ1dGVdOiB2YWx1ZSxcbiAgICB9O1xuXG4gICAgLy8gRmlsbCBhdHRyaWJ1dGVzIHdpdGggJz8/J1xuICAgIGRlZi5hdXRvY29tcGxldGU/LmF0dHJpYnV0ZXM/LmZvckVhY2goKGtleSkgPT4ge1xuICAgICAgdW5yZXNvbHZlZEVudGl0eVtrZXldID0gdW5yZXNvbHZlZEVudGl0eVtrZXldID8/ICcnO1xuICAgIH0pO1xuXG4gICAgcmV0dXJuIHVucmVzb2x2ZWRFbnRpdHk7XG4gIH1cblxuICBwcml2YXRlIHN0YXRpYyB0b1N0cmluZyh2YWx1ZT86IGFueSk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHZhbHVlPy50b1N0cmluZygpO1xuICB9XG59XG4iXX0=
|