ngx-tethys 18.2.0-next.1 → 18.2.0
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/CHANGELOG.md +20 -0
- package/autocomplete/autocomplete.component.d.ts +2 -1
- package/cascader/cascader.component.d.ts +2 -1
- package/core/overlay/abstract-overlay-ref.d.ts +4 -0
- package/core/overlay/abstract-overlay.service.d.ts +1 -1
- package/core/theme/theme.d.ts +2 -0
- package/dialog/dialog-ref.d.ts +10 -2
- package/dialog/dialog.service.d.ts +6 -0
- package/esm2022/autocomplete/autocomplete.component.mjs +5 -3
- package/esm2022/cascader/cascader.component.mjs +5 -4
- package/esm2022/core/overlay/abstract-overlay-ref.mjs +2 -2
- package/esm2022/core/overlay/abstract-overlay.service.mjs +2 -2
- package/esm2022/core/theme/theme.mjs +9 -2
- package/esm2022/dialog/dialog-ref.mjs +9 -6
- package/esm2022/dialog/dialog.service.mjs +27 -3
- package/esm2022/i18n/i18n.mjs +9 -2
- package/esm2022/i18n/i18n.service.mjs +13 -7
- package/esm2022/i18n/i18n.token.mjs +6 -4
- package/esm2022/i18n/index.mjs +5 -2
- package/esm2022/i18n/locales/de-de.mjs +130 -0
- package/esm2022/i18n/locales/en-us.mjs +8 -4
- package/esm2022/i18n/locales/ja-jp.mjs +130 -0
- package/esm2022/i18n/locales/{zh-cn.mjs → zh-hans.mjs} +6 -3
- package/esm2022/i18n/locales/zh-hant.mjs +130 -0
- package/esm2022/nav/nav.component.mjs +5 -3
- package/esm2022/pagination/pagination.pipe.mjs +9 -6
- package/esm2022/select/custom-select/custom-select.component.mjs +5 -4
- package/esm2022/tooltip/tooltip-ref.mjs +4 -1
- package/esm2022/tree-select/tree-select.component.mjs +5 -4
- package/esm2022/version.mjs +2 -2
- package/fesm2022/ngx-tethys-autocomplete.mjs +4 -3
- package/fesm2022/ngx-tethys-autocomplete.mjs.map +1 -1
- package/fesm2022/ngx-tethys-cascader.mjs +4 -3
- package/fesm2022/ngx-tethys-cascader.mjs.map +1 -1
- package/fesm2022/ngx-tethys-core.mjs +8 -1
- package/fesm2022/ngx-tethys-core.mjs.map +1 -1
- package/fesm2022/ngx-tethys-dialog.mjs +34 -8
- package/fesm2022/ngx-tethys-dialog.mjs.map +1 -1
- package/fesm2022/ngx-tethys-i18n.mjs +424 -15
- package/fesm2022/ngx-tethys-i18n.mjs.map +1 -1
- package/fesm2022/ngx-tethys-nav.mjs +4 -2
- package/fesm2022/ngx-tethys-nav.mjs.map +1 -1
- package/fesm2022/ngx-tethys-pagination.mjs +8 -5
- package/fesm2022/ngx-tethys-pagination.mjs.map +1 -1
- package/fesm2022/ngx-tethys-select.mjs +4 -3
- package/fesm2022/ngx-tethys-select.mjs.map +1 -1
- package/fesm2022/ngx-tethys-tooltip.mjs +3 -0
- package/fesm2022/ngx-tethys-tooltip.mjs.map +1 -1
- package/fesm2022/ngx-tethys-tree-select.mjs +4 -3
- package/fesm2022/ngx-tethys-tree-select.mjs.map +1 -1
- package/fesm2022/ngx-tethys.mjs +1 -1
- package/fesm2022/ngx-tethys.mjs.map +1 -1
- package/i18n/i18n.d.ts +13 -2
- package/i18n/i18n.service.d.ts +1 -1
- package/i18n/i18n.token.d.ts +6 -3
- package/i18n/index.d.ts +4 -1
- package/i18n/locales/{zh-cn.d.ts → de-de.d.ts} +5 -1
- package/i18n/locales/en-us.d.ts +5 -1
- package/i18n/locales/ja-jp.d.ts +130 -0
- package/i18n/locales/zh-hans.d.ts +130 -0
- package/i18n/locales/zh-hant.d.ts +130 -0
- package/nav/nav.component.d.ts +3 -1
- package/package.json +1 -1
- package/schematics/version.d.ts +1 -1
- package/schematics/version.js +1 -1
- package/select/custom-select/custom-select.component.d.ts +2 -1
- package/tree-select/tree-select.component.d.ts +2 -1
|
@@ -99,6 +99,9 @@ export class ThyTooltipRef {
|
|
|
99
99
|
this.tooltipInstance.show(!isUndefinedOrNull(showDelay) ? showDelay : this.config.showDelay);
|
|
100
100
|
}
|
|
101
101
|
hide(delay = 0) {
|
|
102
|
+
if (this.overlayRef && this.overlayRef['_scrollStrategy']) {
|
|
103
|
+
this.overlayRef['_scrollStrategy'].disable();
|
|
104
|
+
}
|
|
102
105
|
if (this.tooltipInstance) {
|
|
103
106
|
this.tooltipInstance.hide(!isUndefinedOrNull(delay) ? delay : this.config.hideDelay);
|
|
104
107
|
}
|
|
@@ -141,4 +144,4 @@ export class ThyTooltipRef {
|
|
|
141
144
|
}
|
|
142
145
|
}
|
|
143
146
|
}
|
|
144
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG9vbHRpcC1yZWYuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvdG9vbHRpcC90b29sdGlwLXJlZi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFFdEQsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDbkQsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFFdkQsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQzNDLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDL0IsT0FBTyxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUVqRCxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFHakQsTUFBTSxPQUFPLGFBQWE7SUFXdEIsWUFDWSxJQUEyQyxFQUMzQyxNQUF3QixFQUN4QixPQUFnQixFQUNoQixnQkFBa0MsRUFDbEMsTUFBYztRQUpkLFNBQUksR0FBSixJQUFJLENBQXVDO1FBQzNDLFdBQU0sR0FBTixNQUFNLENBQWtCO1FBQ3hCLFlBQU8sR0FBUCxPQUFPLENBQVM7UUFDaEIscUJBQWdCLEdBQWhCLGdCQUFnQixDQUFrQjtRQUNsQyxXQUFNLEdBQU4sTUFBTSxDQUFRO1FBUFQsYUFBUSxHQUFHLElBQUksT0FBTyxFQUFRLENBQUM7UUFTNUMsSUFBSSxDQUFDLGNBQWMsR0FBRyxPQUFPLENBQUMsZ0JBQWdCLENBQUMsVUFBVSxDQUFDO1lBQ3RELGNBQWMsRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLHFCQUFxQjtTQUNwRCxDQUFDLENBQUM7SUFDUCxDQUFDO0lBRUQsc0RBQXNEO0lBQzlDLGFBQWE7UUFDakIsSUFBSSxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7WUFDbEIsT0FBTyxJQUFJ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QUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsU0FBUyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztpQkFDdkMsU0FBUyxDQUFDLEdBQUcsRUFBRTtnQkFDWixJQUFJLElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQztvQkFDdkIsSUFBSSxDQUFDLFVBQVUsQ0FBQyxjQUFjLEVBQUUsQ0FBQztnQkFDckMsQ0FBQztZQUNMLENBQUMsQ0FBQyxDQUFDO1FBQ1gsQ0FBQztJQUNMLENBQUM7SUFFRCxnQkFBZ0I7UUFDWixPQUFPLENBQUMsQ0FBQyxJQUFJLENBQUMsZUFBZSxJQUFJLElBQUksQ0FBQyxlQUFlLENBQUMsU0FBUyxFQUFFLENBQUM7SUFDdEUsQ0FBQztJQUVELE9BQU87UUFDSCxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxDQUFDO1FBQ3JCLElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSxFQUFFLENBQUM7UUFDekIsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNiLElBQUksSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO1lBQ2xCLElBQUksQ0FBQyxVQUFVLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDMUIsSUFBSSxDQUFDLGVBQWUsR0FBRyxJQUFJLENBQUM7UUFDaEMsQ0FBQztJQUNMLENBQUM7Q0FDSiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEZsZXhpYmxlQ29ubmVjdGVkUG9zaXRpb25TdHJhdGVneSwgT3ZlcmxheSwgT3ZlcmxheVJlZiwgU2Nyb2xsRGlzcGF0Y2hlciwgU2Nyb2xsU3RyYXRlZ3kgfSBmcm9tICdAYW5ndWxhci9jZGsvb3ZlcmxheSc7XG5pbXBvcnQgeyBDb21wb25lbnRQb3J0YWwgfSBmcm9tICdAYW5ndWxhci9jZGsvcG9ydGFsJztcbmltcG9ydCB7IEVsZW1lbnRSZWYsIE5nWm9uZSwgVGVtcGxhdGVSZWYgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IGlzVW5kZWZpbmVkT3JOdWxsIH0gZnJvbSAnQHRldGh5cy9jZGsvaXMnO1xuaW1wb3J0IHsgZ2V0RmxleGlibGVQb3NpdGlvbnMgfSBmcm9tICduZ3gtdGV0aHlzL2NvcmUnO1xuaW1wb3J0IHsgU2FmZUFueSB9IGZyb20gJ25neC10ZXRoeXMvdHlwZXMnO1xuaW1wb3J0IHsgaXNOdW1iZXIgfSBmcm9tICduZ3gtdGV0aHlzL3V0aWwnO1xuaW1wb3J0IHsgU3ViamVjdCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgdGFrZSwgdGFrZVVudGlsIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgVGh5VG9vbHRpcENvbnRlbnQgfSBmcm9tICcuL2ludGVyZmFjZSc7XG5pbXBvcnQgeyBUaHlUb29sdGlwIH0gZnJvbSAnLi90b29sdGlwLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBUaHlUb29sdGlwQ29uZmlnIH0gZnJvbSAnLi90b29sdGlwLmNvbmZpZyc7XG5cbmV4cG9ydCBjbGFzcyBUaHlUb29sdGlwUmVmIHtcbiAgICBwcml2YXRlIG92ZXJsYXlSZWY6IE92ZXJsYXlSZWY7XG5cbiAgICBwcml2YXRlIHRvb2x0aXBJbnN0YW5jZTogVGh5VG9vbHRpcDtcblxuICAgIHByaXZhdGUgc2Nyb2xsU3RyYXRlZ3k6IFNjcm9sbFN0cmF0ZWd5O1xuXG4gICAgcHJpdmF0ZSBwb3J0YWw6IENvbXBvbmVudFBvcnRhbDxUaHlUb29sdGlwPjtcblxuICAgIHByaXZhdGUgcmVhZG9ubHkgZGlzcG9zZSQgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuXG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIHByaXZhdGUgaG9zdDogRWxlbWVudFJlZjxIVE1MRWxlbWVudD4gfCBIVE1MRWxlbWVudCxcbiAgICAgICAgcHJpdmF0ZSBjb25maWc6IFRoeVRvb2x0aXBDb25maWcsXG4gICAgICAgIHByaXZhdGUgb3ZlcmxheTogT3ZlcmxheSxcbiAgICAgICAgcHJpdmF0ZSBzY3JvbGxEaXNwYXRjaGVyOiBTY3JvbGxEaXNwYXRjaGVyLFxuICAgICAgICBwcml2YXRlIG5nWm9uZTogTmdab25lXG4gICAgKSB7XG4gICAgICAgIHRoaXMuc2Nyb2xsU3RyYXRlZ3kgPSBvdmVybGF5LnNjcm9sbFN0cmF0ZWdpZXMucmVwb3NpdGlvbih7XG4gICAgICAgICAgICBzY3JvbGxUaHJvdHRsZTogdGhpcy5jb25maWcuc2Nyb2xsVGhyb3R0bGVTZWNvbmRzXG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKiBDcmVhdGUgdGhlIG92ZXJsYXkgY29uZmlnIGFuZCBwb3NpdGlvbiBzdHJhdGVneSAqL1xuICAgIHByaXZhdGUgY3JlYXRlT3ZlcmxheSgpOiBPdmVybGF5UmVmIHtcbiAgICAgICAgaWYgKHRoaXMub3ZlcmxheVJlZikge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMub3ZlcmxheVJlZjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBzY3JvbGxhYmxlQW5jZXN0b3JzID0gdGhpcy5zY3JvbGxEaXNwYXRjaGVyLmdldEFuY2VzdG9yU2Nyb2xsQ29udGFpbmVycyh0aGlzLmhvc3QpO1xuICAgICAgICAvLyBDcmVhdGUgY29ubmVjdGVkIHBvc2l0aW9uIHN0cmF0ZWd5IHRoYXQgbGlzdGVucyBmb3Igc2Nyb2xsIGV2ZW50cyB0byByZXBvc2l0aW9uLlxuICAgICAgICBjb25zdCBzdHJhdGVneSA9IHRoaXMub3ZlcmxheVxuICAgICAgICAgICAgLnBvc2l0aW9uKClcbiAgICAgICAgICAgIC5mbGV4aWJsZUNvbm5lY3RlZFRvKHRoaXMuaG9zdClcbiAgICAgICAgICAgIC53aXRoVHJhbnNmb3JtT3JpZ2luT24oJy50aHktdG9vbHRpcC1jb250ZW50JylcbiAgICAgICAgICAgIC53aXRoRmxleGlibGVEaW1lbnNpb25zKGZhbHNlKVxuICAgICAgICAgICAgLndpdGhWaWV3cG9ydE1hcmdpbig4KTtcblxuICAgICAgICBzdHJhdGVneS53aXRoU2Nyb2xsYWJsZUNvbnRhaW5lcnMoc2Nyb2xsYWJsZUFuY2VzdG9ycyk7XG4gICAgICAgIHN0cmF0ZWd5LnBvc2l0aW9uQ2hhbmdlcy5waXBlKHRha2VVbnRpbCh0aGlzLmRpc3Bvc2UkKSkuc3Vic2NyaWJlKGNoYW5nZSA9PiB7XG4gICAgICAgICAgICBpZiAodGhpcy50b29sdGlwSW5zdGFuY2UpIHtcbiAgICAgICAgICAgICAgICBpZiAoY2hhbmdlLnNjcm9sbGFibGVWaWV3UHJvcGVydGllcy5pc092ZXJsYXlDbGlwcGVkICYmIHRoaXMudG9vbHRpcEluc3RhbmNlLmlzVmlzaWJsZSgpKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIEFmdGVyIHBvc2l0aW9uIGNoYW5nZXMgb2NjdXIgYW5kIHRoZSBvdmVybGF5IGlzIGNsaXBwZWQgYnlcbiAgICAgICAgICAgICAgICAgICAgLy8gYSBwYXJlbnQgc2Nyb2xsYWJsZSB0aGVuIGNsb3NlIHRoZSB0b29sdGlwLlxuICAgICAgICAgICAgICAgICAgICB0aGlzLm5nWm9uZS5ydW4oKCkgPT4gdGhpcy5oaWRlKDApKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLm92ZXJsYXlSZWYgPSB0aGlzLm92ZXJsYXkuY3JlYXRlKHtcbiAgICAgICAgICAgIHBvc2l0aW9uU3RyYXRlZ3k6IHN0cmF0ZWd5LFxuICAgICAgICAgICAgcGFuZWxDbGFzczogdGhpcy5jb25maWcucGFuZWxDbGFzcyxcbiAgICAgICAgICAgIHNjcm9sbFN0cmF0ZWd5OiB0aGlzLnNjcm9sbFN0cmF0ZWd5LFxuICAgICAgICAgICAgaGFzQmFja2Ryb3A6IHRoaXMuY29uZmlnLmhhc0JhY2tkcm9wLFxuICAgICAgICAgICAgYmFja2Ryb3BDbGFzczogJ3RoeS10b29sdGlwLWJhY2tkcm9wJ1xuICAgICAgICB9KTtcblxuICAgICAgICB0aGlzLnVwZGF0ZVBvc2l0aW9uKCk7XG5cbiAgICAgICAgdGhpcy5vdmVybGF5UmVmXG4gICAgICAgICAgICAuZGV0YWNobWVudHMoKVxuICAgICAgICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMuZGlzcG9zZSQpKVxuICAgICAgICAgICAgLnN1YnNjcmliZSgoKSA9PiB0aGlzLmRldGFjaCgpKTtcblxuICAgICAgICB0aGlzLm92ZXJsYXlSZWZcbiAgICAgICAgICAgIC5iYWNrZHJvcENsaWNrKClcbiAgICAgICAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLmRpc3Bvc2UkKSlcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMub3ZlcmxheVJlZi5kZXRhY2hCYWNrZHJvcCgpO1xuICAgICAgICAgICAgICAgIHRoaXMuaGlkZSgwKTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgIHJldHVybiB0aGlzLm92ZXJsYXlSZWY7XG4gICAgfVxuXG4gICAgLyoqIFVwZGF0ZXMgdGhlIHBvc2l0aW9uIG9mIHRoZSBjdXJyZW50IHRvb2x0aXAuICovXG4gICAgcHJpdmF0ZSB1cGRhdGVQb3NpdGlvbigpIHtcbiAgICAgICAgY29uc3QgcG9zaXRpb24gPSB0aGlzLm92ZXJsYXlSZWYuZ2V0Q29uZmlnKCkucG9zaXRpb25TdHJhdGVneSBhcyBGbGV4aWJsZUNvbm5lY3RlZFBvc2l0aW9uU3RyYXRlZ3k7XG4gICAgICAgIGNvbnN0IGNvbm5lY3Rpb25Qb3NpdGlvbnMgPSBnZXRGbGV4aWJsZVBvc2l0aW9ucyh0aGlzLmNvbmZpZy5wbGFjZW1lbnQsIHRoaXMuY29uZmlnLm9mZnNldCwgJ3RoeS10b29sdGlwJyk7XG4gICAgICAgIHBvc2l0aW9uLndpdGhQb3NpdGlvbnMoY29ubmVjdGlvblBvc2l0aW9ucyk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBkZXRhY2goKSB7XG4gICAgICAgIGlmICh0aGlzLm92ZXJsYXlSZWYgJiYgdGhpcy5vdmVybGF5UmVmLmhhc0F0dGFjaGVkKCkpIHtcbiAgICAgICAgICAgIHRoaXMub3ZlcmxheVJlZi5kZXRhY2goKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnRvb2x0aXBJbnN0YW5jZSA9IG51bGw7XG4gICAgfVxuXG4gICAgc2hvdyhjb250ZW50OiBUaHlUb29sdGlwQ29udGVudCwgZGVsYXk/OiBudW1iZXIpOiB2b2lkO1xuICAgIHNob3c8VCBleHRlbmRzIFJlY29yZDxTYWZlQW55LCBTYWZlQW55Pj4oY29udGVudDogVGh5VG9vbHRpcENvbnRlbnQsIGRhdGE6IFQsIGRlbGF5PzogbnVtYmVyKTogdm9pZDtcbiAgICBzaG93PFQgZXh0ZW5kcyBSZWNvcmQ8U2FmZUFueSwgU2FmZUFueT4+KGNvbnRlbnQ6IFRoeVRvb2x0aXBDb250ZW50LCBkYXRhT3JEZWxheTogVCB8IG51bWJlciwgZGVsYXk/OiBudW1iZXIpIHtcbiAgICAgICAgaWYgKCFjb250ZW50IHx8ICh0aGlzLmlzVG9vbHRpcFZpc2libGUoKSAmJiAhdGhpcy50b29sdGlwSW5zdGFuY2Uuc2hvd1RpbWVvdXRJZCAmJiAhdGhpcy50b29sdGlwSW5zdGFuY2UuaGlkZVRpbWVvdXRJZCkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBsZXQgc2hvd0RlbGF5ID0gbnVsbDtcbiAgICAgICAgbGV0IGluaXRpYWxTdGF0ZSA9IG51bGw7XG4gICAgICAgIGlmIChpc051bWJlcihkYXRhT3JEZWxheSkpIHtcbiAgICAgICAgICAgIHNob3dEZWxheSA9IGRhdGFPckRlbGF5IGFzIG51bWJlcjtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGluaXRpYWxTdGF0ZSA9IGRhdGFPckRlbGF5O1xuICAgICAgICAgICAgc2hvd0RlbGF5ID0gZGVsYXk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qgb3ZlcmxheVJlZiA9IHRoaXMuY3JlYXRlT3ZlcmxheSgpO1xuICAgICAgICB0aGlzLmRldGFjaCgpO1xuICAgICAgICB0aGlzLnBvcnRhbCA9IHRoaXMucG9ydGFsIHx8IG5ldyBDb21wb25lbnRQb3J0YWwoVGh5VG9vbHRpcCwgdGhpcy5jb25maWcudmlld0NvbnRhaW5lclJlZik7XG4gICAgICAgIHRoaXMudG9vbHRpcEluc3RhbmNlID0gb3ZlcmxheVJlZi5hdHRhY2godGhpcy5wb3J0YWwpLmluc3RhbmNlO1xuICAgICAgICB0aGlzLnRvb2x0aXBJbnN0YW5jZVxuICAgICAgICAgICAgLmFmdGVySGlkZGVuKClcbiAgICAgICAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLmRpc3Bvc2UkKSlcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKCkgPT4gdGhpcy5kZXRhY2goKSk7XG4gICAgICAgIHRoaXMudXBkYXRlVG9vbHRpcENvbnRlbnQoY29udGVudCwgaW5pdGlhbFN0YXRlKTtcbiAgICAgICAgdGhpcy5zZXRUb29sdGlwQ2xhc3ModGhpcy5jb25maWcuY29udGVudENsYXNzKTtcbiAgICAgICAgdGhpcy50b29sdGlwSW5zdGFuY2Uuc2hvdyghaXNVbmRlZmluZWRPck51bGwoc2hvd0RlbGF5KSA/IHNob3dEZWxheSA6IHRoaXMuY29uZmlnLnNob3dEZWxheSk7XG4gICAgfVxuXG4gICAgaGlkZShkZWxheTogbnVtYmVyID0gMCk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy50b29sdGlwSW5zdGFuY2UpIHtcbiAgICAgICAgICAgIHRoaXMudG9vbHRpcEluc3RhbmNlLmhpZGUoIWlzVW5kZWZpbmVkT3JOdWxsKGRlbGF5KSA/IGRlbGF5IDogdGhpcy5jb25maWcuaGlkZURlbGF5KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGdldE92ZXJsYXlSZWYoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm92ZXJsYXlSZWY7XG4gICAgfVxuXG4gICAgc2V0VG9vbHRpcENsYXNzKHRvb2x0aXBDbGFzczogc3RyaW5nIHwgc3RyaW5nW10pIHtcbiAgICAgICAgaWYgKHRoaXMudG9vbHRpcEluc3RhbmNlKSB7XG4gICAgICAgICAgICB0aGlzLnRvb2x0aXBJbnN0YW5jZS5zZXRUb29sdGlwQ2xhc3ModG9vbHRpcENsYXNzKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHVwZGF0ZVRvb2x0aXBDb250ZW50KGNvbnRlbnQ6IHN0cmluZyB8IFRlbXBsYXRlUmVmPGFueT4sIGRhdGE/OiBhbnkpIHtcbiAgICAgICAgLy8gTXVzdCB3YWl0IGZvciB0aGUgbWVzc2FnZSB0byBiZSBwYWludGVkIHRvIHRoZSB0b29sdGlwIHNvIHRoYXQgdGhlIG92ZXJsYXkgY2FuIHByb3Blcmx5XG4gICAgICAgIC8vIGNhbGN1bGF0ZSB0aGUgY29ycmVjdCBwb3NpdGlvbmluZyBiYXNlZCBvbiB0aGUgc2l6ZSBvZiB0aGUgdGV4dC5cbiAgICAgICAgaWYgKHRoaXMudG9vbHRpcEluc3RhbmNlKSB7XG4gICAgICAgICAgICB0aGlzLnRvb2x0aXBJbnN0YW5jZS5jb250ZW50ID0gY29udGVudDtcbiAgICAgICAgICAgIHRoaXMudG9vbHRpcEluc3RhbmNlLmRhdGEgPSBkYXRhO1xuICAgICAgICAgICAgdGhpcy50b29sdGlwSW5zdGFuY2UubWFya0ZvckNoZWNrKCk7XG5cbiAgICAgICAgICAgIHRoaXMubmdab25lLm9uTWljcm90YXNrRW1wdHlcbiAgICAgICAgICAgICAgICAuYXNPYnNlcnZhYmxlKClcbiAgICAgICAgICAgICAgICAucGlwZSh0YWtlKDEpLCB0YWtlVW50aWwodGhpcy5kaXNwb3NlJCkpXG4gICAgICAgICAgICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLnRvb2x0aXBJbnN0YW5jZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5vdmVybGF5UmVmLnVwZGF0ZVBvc2l0aW9uKCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGlzVG9vbHRpcFZpc2libGUoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiAhIXRoaXMudG9vbHRpcEluc3RhbmNlICYmIHRoaXMudG9vbHRpcEluc3RhbmNlLmlzVmlzaWJsZSgpO1xuICAgIH1cblxuICAgIGRpc3Bvc2UoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuZGlzcG9zZSQubmV4dCgpO1xuICAgICAgICB0aGlzLmRpc3Bvc2UkLmNvbXBsZXRlKCk7XG4gICAgICAgIHRoaXMuaGlkZSgwKTtcbiAgICAgICAgaWYgKHRoaXMub3ZlcmxheVJlZikge1xuICAgICAgICAgICAgdGhpcy5vdmVybGF5UmVmLmRpc3Bvc2UoKTtcbiAgICAgICAgICAgIHRoaXMudG9vbHRpcEluc3RhbmNlID0gbnVsbDtcbiAgICAgICAgfVxuICAgIH1cbn1cbiJdfQ==
|
|
147
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG9vbHRpcC1yZWYuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvdG9vbHRpcC90b29sdGlwLXJlZi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFFdEQsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDbkQsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFFdkQsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQzNDLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDL0IsT0FBTyxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUVqRCxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFHakQsTUFBTSxPQUFPLGFBQWE7SUFXdEIsWUFDWSxJQUEyQyxFQUMzQyxNQUF3QixFQUN4QixPQUFnQixFQUNoQixnQkFBa0MsRUFDbEMsTUFBYztRQUpkLFNBQUksR0FBSixJQUFJLENBQXVDO1FBQzNDLFdBQU0sR0FBTixNQUFNLENBQWtCO1FBQ3hCLFlBQU8sR0FBUCxPQUFPLENBQVM7UUFDaEIscUJBQWdCLEdBQWhCLGdCQUFnQixDQUFrQjtRQUNsQyxXQUFNLEdBQU4sTUFBTSxDQUFRO1FBUFQsYUFBUSxHQUFHLElBQUksT0FBTyxFQUFRLENBQUM7UUFTNUMsSUFBSSxDQUFDLGNBQWMsR0FBRyxPQUFPLENBQUMsZ0JBQWdCLENBQUMsVUFBVSxDQUFDO1lBQ3RELGNBQWMsRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLHFCQUFxQjtTQUNwRCxDQUFDLENBQUM7SUFDUCxDQUFDO0lBRUQsc0RBQXNEO0lBQzlDLGFBQWE7UUFDakIsSUFBSSxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7WUFDbEIsT0FBTyxJQUFJ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QUMsZUFBZSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7WUFDakMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxZQUFZLEVBQUUsQ0FBQztZQUVwQyxJQUFJLENBQUMsTUFBTSxDQUFDLGdCQUFnQjtpQkFDdkIsWUFBWSxFQUFFO2lCQUNkLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsU0FBUyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztpQkFDdkMsU0FBUyxDQUFDLEdBQUcsRUFBRTtnQkFDWixJQUFJLElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQztvQkFDdkIsSUFBSSxDQUFDLFVBQVUsQ0FBQyxjQUFjLEVBQUUsQ0FBQztnQkFDckMsQ0FBQztZQUNMLENBQUMsQ0FBQyxDQUFDO1FBQ1gsQ0FBQztJQUNMLENBQUM7SUFFRCxnQkFBZ0I7UUFDWixPQUFPLENBQUMsQ0FBQyxJQUFJLENBQUMsZUFBZSxJQUFJLElBQUksQ0FBQyxlQUFlLENBQUMsU0FBUyxFQUFFLENBQUM7SUFDdEUsQ0FBQztJQUVELE9BQU87UUFDSCxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxDQUFDO1FBQ3JCLElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSxFQUFFLENBQUM7UUFDekIsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNiLElBQUksSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO1lBQ2xCLElBQUksQ0FBQyxVQUFVLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDMUIsSUFBSSxDQUFDLGVBQWUsR0FBRyxJQUFJLENBQUM7UUFDaEMsQ0FBQztJQUNMLENBQUM7Q0FDSiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEZsZXhpYmxlQ29ubmVjdGVkUG9zaXRpb25TdHJhdGVneSwgT3ZlcmxheSwgT3ZlcmxheVJlZiwgU2Nyb2xsRGlzcGF0Y2hlciwgU2Nyb2xsU3RyYXRlZ3kgfSBmcm9tICdAYW5ndWxhci9jZGsvb3ZlcmxheSc7XG5pbXBvcnQgeyBDb21wb25lbnRQb3J0YWwgfSBmcm9tICdAYW5ndWxhci9jZGsvcG9ydGFsJztcbmltcG9ydCB7IEVsZW1lbnRSZWYsIE5nWm9uZSwgVGVtcGxhdGVSZWYgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IGlzVW5kZWZpbmVkT3JOdWxsIH0gZnJvbSAnQHRldGh5cy9jZGsvaXMnO1xuaW1wb3J0IHsgZ2V0RmxleGlibGVQb3NpdGlvbnMgfSBmcm9tICduZ3gtdGV0aHlzL2NvcmUnO1xuaW1wb3J0IHsgU2FmZUFueSB9IGZyb20gJ25neC10ZXRoeXMvdHlwZXMnO1xuaW1wb3J0IHsgaXNOdW1iZXIgfSBmcm9tICduZ3gtdGV0aHlzL3V0aWwnO1xuaW1wb3J0IHsgU3ViamVjdCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgdGFrZSwgdGFrZVVudGlsIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgVGh5VG9vbHRpcENvbnRlbnQgfSBmcm9tICcuL2ludGVyZmFjZSc7XG5pbXBvcnQgeyBUaHlUb29sdGlwIH0gZnJvbSAnLi90b29sdGlwLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBUaHlUb29sdGlwQ29uZmlnIH0gZnJvbSAnLi90b29sdGlwLmNvbmZpZyc7XG5cbmV4cG9ydCBjbGFzcyBUaHlUb29sdGlwUmVmIHtcbiAgICBwcml2YXRlIG92ZXJsYXlSZWY6IE92ZXJsYXlSZWY7XG5cbiAgICBwcml2YXRlIHRvb2x0aXBJbnN0YW5jZTogVGh5VG9vbHRpcDtcblxuICAgIHByaXZhdGUgc2Nyb2xsU3RyYXRlZ3k6IFNjcm9sbFN0cmF0ZWd5O1xuXG4gICAgcHJpdmF0ZSBwb3J0YWw6IENvbXBvbmVudFBvcnRhbDxUaHlUb29sdGlwPjtcblxuICAgIHByaXZhdGUgcmVhZG9ubHkgZGlzcG9zZSQgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuXG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIHByaXZhdGUgaG9zdDogRWxlbWVudFJlZjxIVE1MRWxlbWVudD4gfCBIVE1MRWxlbWVudCxcbiAgICAgICAgcHJpdmF0ZSBjb25maWc6IFRoeVRvb2x0aXBDb25maWcsXG4gICAgICAgIHByaXZhdGUgb3ZlcmxheTogT3ZlcmxheSxcbiAgICAgICAgcHJpdmF0ZSBzY3JvbGxEaXNwYXRjaGVyOiBTY3JvbGxEaXNwYXRjaGVyLFxuICAgICAgICBwcml2YXRlIG5nWm9uZTogTmdab25lXG4gICAgKSB7XG4gICAgICAgIHRoaXMuc2Nyb2xsU3RyYXRlZ3kgPSBvdmVybGF5LnNjcm9sbFN0cmF0ZWdpZXMucmVwb3NpdGlvbih7XG4gICAgICAgICAgICBzY3JvbGxUaHJvdHRsZTogdGhpcy5jb25maWcuc2Nyb2xsVGhyb3R0bGVTZWNvbmRzXG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKiBDcmVhdGUgdGhlIG92ZXJsYXkgY29uZmlnIGFuZCBwb3NpdGlvbiBzdHJhdGVneSAqL1xuICAgIHByaXZhdGUgY3JlYXRlT3ZlcmxheSgpOiBPdmVybGF5UmVmIHtcbiAgICAgICAgaWYgKHRoaXMub3ZlcmxheVJlZikge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMub3ZlcmxheVJlZjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBzY3JvbGxhYmxlQW5jZXN0b3JzID0gdGhpcy5zY3JvbGxEaXNwYXRjaGVyLmdldEFuY2VzdG9yU2Nyb2xsQ29udGFpbmVycyh0aGlzLmhvc3QpO1xuICAgICAgICAvLyBDcmVhdGUgY29ubmVjdGVkIHBvc2l0aW9uIHN0cmF0ZWd5IHRoYXQgbGlzdGVucyBmb3Igc2Nyb2xsIGV2ZW50cyB0byByZXBvc2l0aW9uLlxuICAgICAgICBjb25zdCBzdHJhdGVneSA9IHRoaXMub3ZlcmxheVxuICAgICAgICAgICAgLnBvc2l0aW9uKClcbiAgICAgICAgICAgIC5mbGV4aWJsZUNvbm5lY3RlZFRvKHRoaXMuaG9zdClcbiAgICAgICAgICAgIC53aXRoVHJhbnNmb3JtT3JpZ2luT24oJy50aHktdG9vbHRpcC1jb250ZW50JylcbiAgICAgICAgICAgIC53aXRoRmxleGlibGVEaW1lbnNpb25zKGZhbHNlKVxuICAgICAgICAgICAgLndpdGhWaWV3cG9ydE1hcmdpbig4KTtcblxuICAgICAgICBzdHJhdGVneS53aXRoU2Nyb2xsYWJsZUNvbnRhaW5lcnMoc2Nyb2xsYWJsZUFuY2VzdG9ycyk7XG4gICAgICAgIHN0cmF0ZWd5LnBvc2l0aW9uQ2hhbmdlcy5waXBlKHRha2VVbnRpbCh0aGlzLmRpc3Bvc2UkKSkuc3Vic2NyaWJlKGNoYW5nZSA9PiB7XG4gICAgICAgICAgICBpZiAodGhpcy50b29sdGlwSW5zdGFuY2UpIHtcbiAgICAgICAgICAgICAgICBpZiAoY2hhbmdlLnNjcm9sbGFibGVWaWV3UHJvcGVydGllcy5pc092ZXJsYXlDbGlwcGVkICYmIHRoaXMudG9vbHRpcEluc3RhbmNlLmlzVmlzaWJsZSgpKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIEFmdGVyIHBvc2l0aW9uIGNoYW5nZXMgb2NjdXIgYW5kIHRoZSBvdmVybGF5IGlzIGNsaXBwZWQgYnlcbiAgICAgICAgICAgICAgICAgICAgLy8gYSBwYXJlbnQgc2Nyb2xsYWJsZSB0aGVuIGNsb3NlIHRoZSB0b29sdGlwLlxuICAgICAgICAgICAgICAgICAgICB0aGlzLm5nWm9uZS5ydW4oKCkgPT4gdGhpcy5oaWRlKDApKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLm92ZXJsYXlSZWYgPSB0aGlzLm92ZXJsYXkuY3JlYXRlKHtcbiAgICAgICAgICAgIHBvc2l0aW9uU3RyYXRlZ3k6IHN0cmF0ZWd5LFxuICAgICAgICAgICAgcGFuZWxDbGFzczogdGhpcy5jb25maWcucGFuZWxDbGFzcyxcbiAgICAgICAgICAgIHNjcm9sbFN0cmF0ZWd5OiB0aGlzLnNjcm9sbFN0cmF0ZWd5LFxuICAgICAgICAgICAgaGFzQmFja2Ryb3A6IHRoaXMuY29uZmlnLmhhc0JhY2tkcm9wLFxuICAgICAgICAgICAgYmFja2Ryb3BDbGFzczogJ3RoeS10b29sdGlwLWJhY2tkcm9wJ1xuICAgICAgICB9KTtcblxuICAgICAgICB0aGlzLnVwZGF0ZVBvc2l0aW9uKCk7XG5cbiAgICAgICAgdGhpcy5vdmVybGF5UmVmXG4gICAgICAgICAgICAuZGV0YWNobWVudHMoKVxuICAgICAgICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMuZGlzcG9zZSQpKVxuICAgICAgICAgICAgLnN1YnNjcmliZSgoKSA9PiB0aGlzLmRldGFjaCgpKTtcblxuICAgICAgICB0aGlzLm92ZXJsYXlSZWZcbiAgICAgICAgICAgIC5iYWNrZHJvcENsaWNrKClcbiAgICAgICAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLmRpc3Bvc2UkKSlcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMub3ZlcmxheVJlZi5kZXRhY2hCYWNrZHJvcCgpO1xuICAgICAgICAgICAgICAgIHRoaXMuaGlkZSgwKTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgIHJldHVybiB0aGlzLm92ZXJsYXlSZWY7XG4gICAgfVxuXG4gICAgLyoqIFVwZGF0ZXMgdGhlIHBvc2l0aW9uIG9mIHRoZSBjdXJyZW50IHRvb2x0aXAuICovXG4gICAgcHJpdmF0ZSB1cGRhdGVQb3NpdGlvbigpIHtcbiAgICAgICAgY29uc3QgcG9zaXRpb24gPSB0aGlzLm92ZXJsYXlSZWYuZ2V0Q29uZmlnKCkucG9zaXRpb25TdHJhdGVneSBhcyBGbGV4aWJsZUNvbm5lY3RlZFBvc2l0aW9uU3RyYXRlZ3k7XG4gICAgICAgIGNvbnN0IGNvbm5lY3Rpb25Qb3NpdGlvbnMgPSBnZXRGbGV4aWJsZVBvc2l0aW9ucyh0aGlzLmNvbmZpZy5wbGFjZW1lbnQsIHRoaXMuY29uZmlnLm9mZnNldCwgJ3RoeS10b29sdGlwJyk7XG4gICAgICAgIHBvc2l0aW9uLndpdGhQb3NpdGlvbnMoY29ubmVjdGlvblBvc2l0aW9ucyk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBkZXRhY2goKSB7XG4gICAgICAgIGlmICh0aGlzLm92ZXJsYXlSZWYgJiYgdGhpcy5vdmVybGF5UmVmLmhhc0F0dGFjaGVkKCkpIHtcbiAgICAgICAgICAgIHRoaXMub3ZlcmxheVJlZi5kZXRhY2goKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnRvb2x0aXBJbnN0YW5jZSA9IG51bGw7XG4gICAgfVxuXG4gICAgc2hvdyhjb250ZW50OiBUaHlUb29sdGlwQ29udGVudCwgZGVsYXk/OiBudW1iZXIpOiB2b2lkO1xuICAgIHNob3c8VCBleHRlbmRzIFJlY29yZDxTYWZlQW55LCBTYWZlQW55Pj4oY29udGVudDogVGh5VG9vbHRpcENvbnRlbnQsIGRhdGE6IFQsIGRlbGF5PzogbnVtYmVyKTogdm9pZDtcbiAgICBzaG93PFQgZXh0ZW5kcyBSZWNvcmQ8U2FmZUFueSwgU2FmZUFueT4+KGNvbnRlbnQ6IFRoeVRvb2x0aXBDb250ZW50LCBkYXRhT3JEZWxheTogVCB8IG51bWJlciwgZGVsYXk/OiBudW1iZXIpIHtcbiAgICAgICAgaWYgKCFjb250ZW50IHx8ICh0aGlzLmlzVG9vbHRpcFZpc2libGUoKSAmJiAhdGhpcy50b29sdGlwSW5zdGFuY2Uuc2hvd1RpbWVvdXRJZCAmJiAhdGhpcy50b29sdGlwSW5zdGFuY2UuaGlkZVRpbWVvdXRJZCkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBsZXQgc2hvd0RlbGF5ID0gbnVsbDtcbiAgICAgICAgbGV0IGluaXRpYWxTdGF0ZSA9IG51bGw7XG4gICAgICAgIGlmIChpc051bWJlcihkYXRhT3JEZWxheSkpIHtcbiAgICAgICAgICAgIHNob3dEZWxheSA9IGRhdGFPckRlbGF5IGFzIG51bWJlcjtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGluaXRpYWxTdGF0ZSA9IGRhdGFPckRlbGF5O1xuICAgICAgICAgICAgc2hvd0RlbGF5ID0gZGVsYXk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qgb3ZlcmxheVJlZiA9IHRoaXMuY3JlYXRlT3ZlcmxheSgpO1xuICAgICAgICB0aGlzLmRldGFjaCgpO1xuICAgICAgICB0aGlzLnBvcnRhbCA9IHRoaXMucG9ydGFsIHx8IG5ldyBDb21wb25lbnRQb3J0YWwoVGh5VG9vbHRpcCwgdGhpcy5jb25maWcudmlld0NvbnRhaW5lclJlZik7XG4gICAgICAgIHRoaXMudG9vbHRpcEluc3RhbmNlID0gb3ZlcmxheVJlZi5hdHRhY2godGhpcy5wb3J0YWwpLmluc3RhbmNlO1xuICAgICAgICB0aGlzLnRvb2x0aXBJbnN0YW5jZVxuICAgICAgICAgICAgLmFmdGVySGlkZGVuKClcbiAgICAgICAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLmRpc3Bvc2UkKSlcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKCkgPT4gdGhpcy5kZXRhY2goKSk7XG4gICAgICAgIHRoaXMudXBkYXRlVG9vbHRpcENvbnRlbnQoY29udGVudCwgaW5pdGlhbFN0YXRlKTtcbiAgICAgICAgdGhpcy5zZXRUb29sdGlwQ2xhc3ModGhpcy5jb25maWcuY29udGVudENsYXNzKTtcbiAgICAgICAgdGhpcy50b29sdGlwSW5zdGFuY2Uuc2hvdyghaXNVbmRlZmluZWRPck51bGwoc2hvd0RlbGF5KSA/IHNob3dEZWxheSA6IHRoaXMuY29uZmlnLnNob3dEZWxheSk7XG4gICAgfVxuXG4gICAgaGlkZShkZWxheTogbnVtYmVyID0gMCk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5vdmVybGF5UmVmICYmIHRoaXMub3ZlcmxheVJlZlsnX3Njcm9sbFN0cmF0ZWd5J10pIHtcbiAgICAgICAgICAgIHRoaXMub3ZlcmxheVJlZlsnX3Njcm9sbFN0cmF0ZWd5J10uZGlzYWJsZSgpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLnRvb2x0aXBJbnN0YW5jZSkge1xuICAgICAgICAgICAgdGhpcy50b29sdGlwSW5zdGFuY2UuaGlkZSghaXNVbmRlZmluZWRPck51bGwoZGVsYXkpID8gZGVsYXkgOiB0aGlzLmNvbmZpZy5oaWRlRGVsYXkpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZ2V0T3ZlcmxheVJlZigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMub3ZlcmxheVJlZjtcbiAgICB9XG5cbiAgICBzZXRUb29sdGlwQ2xhc3ModG9vbHRpcENsYXNzOiBzdHJpbmcgfCBzdHJpbmdbXSkge1xuICAgICAgICBpZiAodGhpcy50b29sdGlwSW5zdGFuY2UpIHtcbiAgICAgICAgICAgIHRoaXMudG9vbHRpcEluc3RhbmNlLnNldFRvb2x0aXBDbGFzcyh0b29sdGlwQ2xhc3MpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgdXBkYXRlVG9vbHRpcENvbnRlbnQoY29udGVudDogc3RyaW5nIHwgVGVtcGxhdGVSZWY8YW55PiwgZGF0YT86IGFueSkge1xuICAgICAgICAvLyBNdXN0IHdhaXQgZm9yIHRoZSBtZXNzYWdlIHRvIGJlIHBhaW50ZWQgdG8gdGhlIHRvb2x0aXAgc28gdGhhdCB0aGUgb3ZlcmxheSBjYW4gcHJvcGVybHlcbiAgICAgICAgLy8gY2FsY3VsYXRlIHRoZSBjb3JyZWN0IHBvc2l0aW9uaW5nIGJhc2VkIG9uIHRoZSBzaXplIG9mIHRoZSB0ZXh0LlxuICAgICAgICBpZiAodGhpcy50b29sdGlwSW5zdGFuY2UpIHtcbiAgICAgICAgICAgIHRoaXMudG9vbHRpcEluc3RhbmNlLmNvbnRlbnQgPSBjb250ZW50O1xuICAgICAgICAgICAgdGhpcy50b29sdGlwSW5zdGFuY2UuZGF0YSA9IGRhdGE7XG4gICAgICAgICAgICB0aGlzLnRvb2x0aXBJbnN0YW5jZS5tYXJrRm9yQ2hlY2soKTtcblxuICAgICAgICAgICAgdGhpcy5uZ1pvbmUub25NaWNyb3Rhc2tFbXB0eVxuICAgICAgICAgICAgICAgIC5hc09ic2VydmFibGUoKVxuICAgICAgICAgICAgICAgIC5waXBlKHRha2UoMSksIHRha2VVbnRpbCh0aGlzLmRpc3Bvc2UkKSlcbiAgICAgICAgICAgICAgICAuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMudG9vbHRpcEluc3RhbmNlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm92ZXJsYXlSZWYudXBkYXRlUG9zaXRpb24oKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgaXNUb29sdGlwVmlzaWJsZSgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuICEhdGhpcy50b29sdGlwSW5zdGFuY2UgJiYgdGhpcy50b29sdGlwSW5zdGFuY2UuaXNWaXNpYmxlKCk7XG4gICAgfVxuXG4gICAgZGlzcG9zZSgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5kaXNwb3NlJC5uZXh0KCk7XG4gICAgICAgIHRoaXMuZGlzcG9zZSQuY29tcGxldGUoKTtcbiAgICAgICAgdGhpcy5oaWRlKDApO1xuICAgICAgICBpZiAodGhpcy5vdmVybGF5UmVmKSB7XG4gICAgICAgICAgICB0aGlzLm92ZXJsYXlSZWYuZGlzcG9zZSgpO1xuICAgICAgICAgICAgdGhpcy50b29sdGlwSW5zdGFuY2UgPSBudWxsO1xuICAgICAgICB9XG4gICAgfVxufVxuIl19
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { EXPANDED_DROPDOWN_POSITIONS, scaleYMotion, TabIndexDisabledControlValueAccessorMixin, ThyClickDispatcher } from 'ngx-tethys/core';
|
|
1
|
+
import { EXPANDED_DROPDOWN_POSITIONS, injectPanelEmptyIcon, scaleYMotion, TabIndexDisabledControlValueAccessorMixin, ThyClickDispatcher } from 'ngx-tethys/core';
|
|
2
2
|
import { ThyEmpty } from 'ngx-tethys/empty';
|
|
3
3
|
import { ThyFlexibleText } from 'ngx-tethys/flexible-text';
|
|
4
4
|
import { ThyIcon } from 'ngx-tethys/icon';
|
|
@@ -522,6 +522,7 @@ const DEFAULT_ITEM_SIZE = 40;
|
|
|
522
522
|
export class ThyTreeSelectNodes {
|
|
523
523
|
constructor() {
|
|
524
524
|
this.parent = inject(ThyTreeSelect);
|
|
525
|
+
this.emptyIcon = injectPanelEmptyIcon();
|
|
525
526
|
this.nodeList = [];
|
|
526
527
|
this.thyVirtualScroll = false;
|
|
527
528
|
this.primaryKey = this.parent.thyPrimaryKey;
|
|
@@ -624,7 +625,7 @@ export class ThyTreeSelectNodes {
|
|
|
624
625
|
return index;
|
|
625
626
|
}
|
|
626
627
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: ThyTreeSelectNodes, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
627
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.0", type: ThyTreeSelectNodes, isStandalone: true, selector: "thy-tree-select-nodes", inputs: { treeNodes: "treeNodes", thyVirtualScroll: "thyVirtualScroll" }, host: { properties: { "attr.tabindex": "-1", "class": "this.class" } }, ngImport: i0, template: "@if (nodeList?.length > 0) {\n <div class=\"thy-tree-select-options\">\n <div class=\"thy-tree-select-node\">\n @if (!thyVirtualScroll) {\n @for (node of nodeList; track $index) {\n <ng-container [ngTemplateOutlet]=\"treeSelectNode\" [ngTemplateOutletContext]=\"{ $implicit: node }\"></ng-container>\n }\n }\n @if (thyVirtualScroll) {\n <cdk-virtual-scroll-viewport #viewport [itemSize]=\"defaultItemSize\" [style.height]=\"thyVirtualHeight\">\n <ng-container *cdkVirtualFor=\"let node of nodeList; trackBy: tabTrackBy\">\n <ng-template [ngTemplateOutlet]=\"treeSelectNode\" [ngTemplateOutletContext]=\"{ $implicit: node }\"></ng-template>\n </ng-container>\n </cdk-virtual-scroll-viewport>\n }\n </div>\n </div>\n} @else {\n <thy-empty
|
|
628
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.0", type: ThyTreeSelectNodes, isStandalone: true, selector: "thy-tree-select-nodes", inputs: { treeNodes: "treeNodes", thyVirtualScroll: "thyVirtualScroll" }, host: { properties: { "attr.tabindex": "-1", "class": "this.class" } }, ngImport: i0, template: "@if (nodeList?.length > 0) {\n <div class=\"thy-tree-select-options\">\n <div class=\"thy-tree-select-node\">\n @if (!thyVirtualScroll) {\n @for (node of nodeList; track $index) {\n <ng-container [ngTemplateOutlet]=\"treeSelectNode\" [ngTemplateOutletContext]=\"{ $implicit: node }\"></ng-container>\n }\n }\n @if (thyVirtualScroll) {\n <cdk-virtual-scroll-viewport #viewport [itemSize]=\"defaultItemSize\" [style.height]=\"thyVirtualHeight\">\n <ng-container *cdkVirtualFor=\"let node of nodeList; trackBy: tabTrackBy\">\n <ng-template [ngTemplateOutlet]=\"treeSelectNode\" [ngTemplateOutletContext]=\"{ $implicit: node }\"></ng-template>\n </ng-container>\n </cdk-virtual-scroll-viewport>\n }\n </div>\n </div>\n} @else {\n <thy-empty\n class=\"thy-select-empty-content\"\n thySize=\"sm\"\n [thyMessage]=\"parent.thyEmptyOptionsText\"\n [thyIconName]=\"emptyIcon()\"></thy-empty>\n}\n\n<ng-template #treeSelectNode let-node>\n <ng-container>\n @if (!treeNodeIsHidden(node)) {\n <a\n class=\"thy-option-item\"\n [ngClass]=\"{ active: treeNodeIsSelected(node), 'pl-0': hasNodeChildren }\"\n [class.disabled]=\"treeNodeIsDisable(node)\"\n [ngStyle]=\"{ 'padding-left.px': 20 * node.level + parent.icons.gap }\"\n (click)=\"selectTreeNode($event, node)\">\n <span\n class=\"thy-tree-select-option-icon\"\n [class.invisible]=\"!(node.children?.length > 0 || (node[childCountKey] && node[childCountKey] > 0))\"\n (click)=\"nodeExpandToggle($event, node)\">\n <thy-icon\n class=\"node-expand-icon\"\n [thyIconName]=\"treeNodeIsExpand(node) ? parent.icons.expand : parent.icons.collapse\"></thy-icon>\n </span>\n <span class=\"thy-tree-select-option-text\" [ngClass]=\"{ 'ml-1': hasNodeChildren }\">\n @if (treeNodeTemplateRef) {\n <ng-template [ngTemplateOutlet]=\"treeNodeTemplateRef\" [ngTemplateOutletContext]=\"{ $implicit: node }\"></ng-template>\n } @else {\n <span thyFlexibleText [thyTooltipContent]=\"node[showKey]\">{{ node[showKey] }}</span>\n }\n </span>\n @if (isMultiple) {\n <thy-icon class=\"checked-icon\" thyIconName=\"check\"></thy-icon>\n }\n </a>\n }\n @if (!thyVirtualScroll && treeNodeIsExpand(node) && node.children?.length > 0) {\n @for (node of node.children; track $index) {\n <ng-container [ngTemplateOutlet]=\"treeSelectNode\" [ngTemplateOutletContext]=\"{ $implicit: node }\"> </ng-container>\n }\n }\n </ng-container>\n</ng-template>\n", dependencies: [{ kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: CdkVirtualScrollViewport, selector: "cdk-virtual-scroll-viewport", inputs: ["orientation", "appendOnly"], outputs: ["scrolledIndexChange"] }, { kind: "directive", type: CdkFixedSizeVirtualScroll, selector: "cdk-virtual-scroll-viewport[itemSize]", inputs: ["itemSize", "minBufferPx", "maxBufferPx"] }, { kind: "directive", type: CdkVirtualForOf, selector: "[cdkVirtualFor][cdkVirtualForOf]", inputs: ["cdkVirtualForOf", "cdkVirtualForTrackBy", "cdkVirtualForTemplate", "cdkVirtualForTemplateCacheSize"] }, { kind: "component", type: ThyEmpty, selector: "thy-empty", inputs: ["thyMessage", "thyTranslationKey", "thyTranslationValues", "thyEntityName", "thyEntityNameTranslateKey", "thyIconName", "thySize", "thyMarginTop", "thyTopAuto", "thyContainer", "thyImageUrl", "thyImageLoading", "thyImageFetchPriority", "thyDescription"] }, { kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "component", type: ThyIcon, selector: "thy-icon, [thy-icon]", inputs: ["thyIconType", "thyTwotoneColor", "thyIconName", "thyIconRotate", "thyIconSet", "thyIconLegging", "thyIconLinearGradient"] }, { kind: "component", type: ThyFlexibleText, selector: "thy-flexible-text,[thyFlexibleText]", inputs: ["thyTooltipTrigger", "thyContainerClass", "thyTooltipContent", "thyTooltipPlacement", "thyTooltipOffset"], exportAs: ["thyFlexibleText"] }] }); }
|
|
628
629
|
}
|
|
629
630
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: ThyTreeSelectNodes, decorators: [{
|
|
630
631
|
type: Component,
|
|
@@ -640,7 +641,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.0", ngImpor
|
|
|
640
641
|
ThyFlexibleText
|
|
641
642
|
], host: {
|
|
642
643
|
'[attr.tabindex]': '-1'
|
|
643
|
-
}, template: "@if (nodeList?.length > 0) {\n <div class=\"thy-tree-select-options\">\n <div class=\"thy-tree-select-node\">\n @if (!thyVirtualScroll) {\n @for (node of nodeList; track $index) {\n <ng-container [ngTemplateOutlet]=\"treeSelectNode\" [ngTemplateOutletContext]=\"{ $implicit: node }\"></ng-container>\n }\n }\n @if (thyVirtualScroll) {\n <cdk-virtual-scroll-viewport #viewport [itemSize]=\"defaultItemSize\" [style.height]=\"thyVirtualHeight\">\n <ng-container *cdkVirtualFor=\"let node of nodeList; trackBy: tabTrackBy\">\n <ng-template [ngTemplateOutlet]=\"treeSelectNode\" [ngTemplateOutletContext]=\"{ $implicit: node }\"></ng-template>\n </ng-container>\n </cdk-virtual-scroll-viewport>\n }\n </div>\n </div>\n} @else {\n <thy-empty
|
|
644
|
+
}, template: "@if (nodeList?.length > 0) {\n <div class=\"thy-tree-select-options\">\n <div class=\"thy-tree-select-node\">\n @if (!thyVirtualScroll) {\n @for (node of nodeList; track $index) {\n <ng-container [ngTemplateOutlet]=\"treeSelectNode\" [ngTemplateOutletContext]=\"{ $implicit: node }\"></ng-container>\n }\n }\n @if (thyVirtualScroll) {\n <cdk-virtual-scroll-viewport #viewport [itemSize]=\"defaultItemSize\" [style.height]=\"thyVirtualHeight\">\n <ng-container *cdkVirtualFor=\"let node of nodeList; trackBy: tabTrackBy\">\n <ng-template [ngTemplateOutlet]=\"treeSelectNode\" [ngTemplateOutletContext]=\"{ $implicit: node }\"></ng-template>\n </ng-container>\n </cdk-virtual-scroll-viewport>\n }\n </div>\n </div>\n} @else {\n <thy-empty\n class=\"thy-select-empty-content\"\n thySize=\"sm\"\n [thyMessage]=\"parent.thyEmptyOptionsText\"\n [thyIconName]=\"emptyIcon()\"></thy-empty>\n}\n\n<ng-template #treeSelectNode let-node>\n <ng-container>\n @if (!treeNodeIsHidden(node)) {\n <a\n class=\"thy-option-item\"\n [ngClass]=\"{ active: treeNodeIsSelected(node), 'pl-0': hasNodeChildren }\"\n [class.disabled]=\"treeNodeIsDisable(node)\"\n [ngStyle]=\"{ 'padding-left.px': 20 * node.level + parent.icons.gap }\"\n (click)=\"selectTreeNode($event, node)\">\n <span\n class=\"thy-tree-select-option-icon\"\n [class.invisible]=\"!(node.children?.length > 0 || (node[childCountKey] && node[childCountKey] > 0))\"\n (click)=\"nodeExpandToggle($event, node)\">\n <thy-icon\n class=\"node-expand-icon\"\n [thyIconName]=\"treeNodeIsExpand(node) ? parent.icons.expand : parent.icons.collapse\"></thy-icon>\n </span>\n <span class=\"thy-tree-select-option-text\" [ngClass]=\"{ 'ml-1': hasNodeChildren }\">\n @if (treeNodeTemplateRef) {\n <ng-template [ngTemplateOutlet]=\"treeNodeTemplateRef\" [ngTemplateOutletContext]=\"{ $implicit: node }\"></ng-template>\n } @else {\n <span thyFlexibleText [thyTooltipContent]=\"node[showKey]\">{{ node[showKey] }}</span>\n }\n </span>\n @if (isMultiple) {\n <thy-icon class=\"checked-icon\" thyIconName=\"check\"></thy-icon>\n }\n </a>\n }\n @if (!thyVirtualScroll && treeNodeIsExpand(node) && node.children?.length > 0) {\n @for (node of node.children; track $index) {\n <ng-container [ngTemplateOutlet]=\"treeSelectNode\" [ngTemplateOutletContext]=\"{ $implicit: node }\"> </ng-container>\n }\n }\n </ng-container>\n</ng-template>\n" }]
|
|
644
645
|
}], propDecorators: { class: [{
|
|
645
646
|
type: HostBinding,
|
|
646
647
|
args: ['class']
|
|
@@ -649,4 +650,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.0", ngImpor
|
|
|
649
650
|
}], thyVirtualScroll: [{
|
|
650
651
|
type: Input
|
|
651
652
|
}] } });
|
|
652
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJlZS1zZWxlY3QuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL3RyZWUtc2VsZWN0L3RyZWUtc2VsZWN0LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uL3NyYy90cmVlLXNlbGVjdC90cmVlLXNlbGVjdC5jb21wb25lbnQuaHRtbCIsIi4uLy4uLy4uLy4uL3NyYy90cmVlLXNlbGVjdC90cmVlLXNlbGVjdC1ub2Rlcy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsMkJBQTJCLEVBQUUsWUFBWSxFQUFFLHlDQUF5QyxFQUFFLGtCQUFrQixFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDM0ksT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQzVDLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUMzRCxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDMUMsT0FBTyxFQUFFLGdCQUFnQixFQUFFLDJCQUEyQixFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFFbEYsT0FBTyxFQUFFLHFCQUFxQixFQUFFLG1CQUFtQixFQUFFLE9BQU8sRUFBRSxRQUFRLEVBQUUsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQzFILE9BQU8sRUFBYyxFQUFFLEVBQUUsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQy9DLE9BQU8sRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFakQsT0FBTyxFQUFFLG1CQUFtQixFQUFFLGdCQUFnQixFQUFFLGFBQWEsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQzVGLE9BQU8sRUFBRSx5QkFBeUIsRUFBRSxlQUFlLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUM5RyxPQUFPLEVBQUUsaUJBQWlCLEVBQUUs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QUFLO2dCQVVHLGdCQUFnQjtzQkFBeEIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEVYUEFOREVEX0RST1BET1dOX1BPU0lUSU9OUywgc2NhbGVZTW90aW9uLCBUYWJJbmRleERpc2FibGVkQ29udHJvbFZhbHVlQWNjZXNzb3JNaXhpbiwgVGh5Q2xpY2tEaXNwYXRjaGVyIH0gZnJvbSAnbmd4LXRldGh5cy9jb3JlJztcbmltcG9ydCB7IFRoeUVtcHR5IH0gZnJvbSAnbmd4LXRldGh5cy9lbXB0eSc7XG5pbXBvcnQgeyBUaHlGbGV4aWJsZVRleHQgfSBmcm9tICduZ3gtdGV0aHlzL2ZsZXhpYmxlLXRleHQnO1xuaW1wb3J0IHsgVGh5SWNvbiB9IGZyb20gJ25neC10ZXRoeXMvaWNvbic7XG5pbXBvcnQgeyBUaHlTZWxlY3RDb250cm9sLCBUaHlTdG9wUHJvcGFnYXRpb25EaXJlY3RpdmUgfSBmcm9tICduZ3gtdGV0aHlzL3NoYXJlZCc7XG5pbXBvcnQgeyBUaHlUcmVlTm9kZSB9IGZyb20gJ25neC10ZXRoeXMvdHJlZSc7XG5pbXBvcnQgeyBjb2VyY2VCb29sZWFuUHJvcGVydHksIGVsZW1lbnRNYXRjaENsb3Nlc3QsIGlzQXJyYXksIGlzT2JqZWN0LCBwcm9kdWNlLCB3YXJuRGVwcmVjYXRpb24gfSBmcm9tICduZ3gtdGV0aHlzL3V0aWwnO1xuaW1wb3J0IHsgT2JzZXJ2YWJsZSwgb2YsIFN1YmplY3QgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IHRha2UsIHRha2VVbnRpbCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcblxuaW1wb3J0IHsgQ2RrQ29ubmVjdGVkT3ZlcmxheSwgQ2RrT3ZlcmxheU9yaWdpbiwgVmlld3BvcnRSdWxlciB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9vdmVybGF5JztcbmltcG9ydCB7IENka0ZpeGVkU2l6ZVZpcnR1YWxTY3JvbGwsIENka1ZpcnR1YWxGb3JPZiwgQ2RrVmlydHVhbFNjcm9sbFZpZXdwb3J0IH0gZnJvbSAnQGFuZ3VsYXIvY2RrL3Njcm9sbGluZyc7XG5pbXBvcnQgeyBpc1BsYXRmb3JtQnJvd3NlciwgTmdDbGFzcywgTmdTdHlsZSwgTmdUZW1wbGF0ZU91dGxldCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQge1xuICAgIENoYW5nZURldGVjdG9yUmVmLFxuICAgIENvbXBvbmVudCxcbiAgICBDb250ZW50Q2hpbGQsXG4gICAgRWxlbWVudFJlZixcbiAgICBFdmVudEVtaXR0ZXIsXG4gICAgZm9yd2FyZFJlZixcbiAgICBIb3N0QmluZGluZyxcbiAgICBJbnB1dCxcbiAgICBOZ1pvbmUsXG4gICAgT25EZXN0cm95LFxuICAgIE9uSW5pdCxcbiAgICBPdXRwdXQsXG4gICAgUExBVEZPUk1fSUQsXG4gICAgVGVtcGxhdGVSZWYsXG4gICAgVmlld0NoaWxkLFxuICAgIGluamVjdCxcbiAgICBTaWduYWxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDb250cm9sVmFsdWVBY2Nlc3NvciwgTkdfVkFMVUVfQUNDRVNTT1IgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5cbmltcG9ydCB7IFRoeVRyZWVTZWxlY3ROb2RlLCBUaHlUcmVlU2VsZWN0VHlwZSB9IGZyb20gJy4vdHJlZS1zZWxlY3QuY2xhc3MnO1xuaW1wb3J0IHsgaW5qZWN0TG9jYWxlLCBUaHlUcmVlU2VsZWN0TG9jYWxlIH0gZnJvbSAnbmd4LXRldGh5cy9pMThuJztcblxudHlwZSBJbnB1dFNpemUgPSAneHMnIHwgJ3NtJyB8ICdtZCcgfCAnbGcnIHwgJyc7XG5cbmV4cG9ydCBmdW5jdGlvbiBmaWx0ZXJUcmVlRGF0YSh0cmVlTm9kZXM6IFRoeVRyZWVTZWxlY3ROb2RlW10sIHNlYXJjaFRleHQ6IHN0cmluZywgc2VhcmNoS2V5OiBzdHJpbmcgPSAnbmFtZScpIHtcbiAgICBjb25zdCBmaWx0ZXJOb2RlcyA9IChub2RlOiBUaHlUcmVlU2VsZWN0Tm9kZSwgcmVzdWx0OiBUaHlUcmVlU2VsZWN0Tm9kZVtdKSA9PiB7XG4gICAgICAgIGlmIChub2RlW3NlYXJjaEtleV0gJiYgbm9kZVtzZWFyY2hLZXldLmluZGV4T2Yoc2VhcmNoVGV4dCkgIT09IC0xKSB7XG4gICAgICAgICAgICByZXN1bHQucHVzaChub2RlKTtcbiAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkobm9kZS5jaGlsZHJlbikpIHtcbiAgICAgICAgICAgIGNvbnN0IG5vZGVzID0gbm9kZS5jaGlsZHJlbi5yZWR1Y2UoKHByZXZpb3VzLCBjdXJyZW50KSA9PiBmaWx0ZXJOb2RlcyhjdXJyZW50LCBwcmV2aW91cyksIFtdIGFzIFRoeVRyZWVTZWxlY3ROb2RlW10pO1xuICAgICAgICAgICAgaWYgKG5vZGVzLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHBhcmVudE5vZGUgPSB7IC4uLm5vZGUsIGNoaWxkcmVuOiBub2RlcywgZXhwYW5kOiB0cnVlIH07XG4gICAgICAgICAgICAgICAgcmVzdWx0LnB1c2gocGFyZW50Tm9kZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9O1xuICAgIGNvbnN0IHRyZWVEYXRhID0gdHJlZU5vZGVzLnJlZHVjZSgocHJldmlvdXMsIGN1cnJlbnQpID0+IGZpbHRlck5vZGVzKGN1cnJlbnQsIHByZXZpb3VzKSwgW10gYXMgVGh5VHJlZVNlbGVjdE5vZGVbXSk7XG4gICAgcmV0dXJuIHRyZWVEYXRhO1xufVxuXG4vKipcbiAqIOagkemAieaLqee7hOS7tlxuICogQG5hbWUgdGh5LXRyZWUtc2VsZWN0XG4gKiBAb3JkZXIgMTBcbiAqL1xuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICd0aHktdHJlZS1zZWxlY3QnLFxuICAgIHRlbXBsYXRlVXJsOiAnLi90cmVlLXNlbGVjdC5jb21wb25lbnQuaHRtbCcsXG4gICAgcHJvdmlkZXJzOiBbXG4gICAgICAgIHtcbiAgICAgICAgICAgIHByb3ZpZGU6IE5HX1ZBTFVFX0FDQ0VTU09SLFxuICAgICAgICAgICAgdXNlRXhpc3Rpbmc6IGZvcndhcmRSZWYoKCkgPT4gVGh5VHJlZVNlbGVjdCksXG4gICAgICAgICAgICBtdWx0aTogdHJ1ZVxuICAgICAgICB9XG4gICAgXSxcbiAgICBzdGFuZGFsb25lOiB0cnVlLFxuICAgIGltcG9ydHM6IFtcbiAgICAgICAgQ2RrT3ZlcmxheU9yaWdpbixcbiAgICAgICAgVGh5U2VsZWN0Q29udHJvbCxcbiAgICAgICAgTmdUZW1wbGF0ZU91dGxldCxcbiAgICAgICAgQ2RrQ29ubmVjdGVkT3ZlcmxheSxcbiAgICAgICAgZm9yd2FyZFJlZigoKSA9PiBUaHlUcmVlU2VsZWN0Tm9kZXMpLFxuICAgICAgICBUaHlTdG9wUHJvcGFnYXRpb25EaXJlY3RpdmVcbiAgICBdLFxuICAgIGhvc3Q6IHtcbiAgICAgICAgJ1thdHRyLnRhYmluZGV4XSc6ICd0YWJJbmRleCcsXG4gICAgICAgICcoZm9jdXMpJzogJ29uRm9jdXMoJGV2ZW50KScsXG4gICAgICAgICcoYmx1ciknOiAnb25CbHVyKCRldmVudCknXG4gICAgfSxcbiAgICBhbmltYXRpb25zOiBbc2NhbGVZTW90aW9uXVxufSlcbmV4cG9ydCBjbGFzcyBUaHlUcmVlU2VsZWN0IGV4dGVuZHMgVGFiSW5kZXhEaXNhYmxlZENvbnRyb2xWYWx1ZUFjY2Vzc29yTWl4aW4gaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSwgQ29udHJvbFZhbHVlQWNjZXNzb3Ige1xuICAgIGVsZW1lbnRSZWYgPSBpbmplY3QoRWxlbWVudFJlZik7XG4gICAgcHJpdmF0ZSBuZ1pvbmUgPSBpbmplY3QoTmdab25lKTtcbiAgICBwcml2YXRlIHJlZiA9IGluamVjdChDaGFuZ2VEZXRlY3RvclJlZik7XG4gICAgcHJpdmF0ZSBwbGF0Zm9ybUlkID0gaW5qZWN0KFBMQVRGT1JNX0lEKTtcbiAgICBwcml2YXRlIHRoeUNsaWNrRGlzcGF0Y2hlciA9IGluamVjdChUaHlDbGlja0Rpc3BhdGNoZXIpO1xuICAgIHByaXZhdGUgdmlld3BvcnRSdWxlciA9IGluamVjdChWaWV3cG9ydFJ1bGVyKTtcblxuICAgIEBIb3N0QmluZGluZygnY2xhc3MudGh5LXNlbGVjdC1jdXN0b20nKSB0cmVlU2VsZWN0Q2xhc3MgPSB0cnVlO1xuXG4gICAgQEhvc3RCaW5kaW5nKCdjbGFzcy50aHktc2VsZWN0JykgaXNUcmVlU2VsZWN0ID0gdHJ1ZTtcblxuICAgIC8vIOiPnOWNleaYr+WQpuWxleW8gFxuICAgIEBIb3N0QmluZGluZygnY2xhc3MubWVudS1pcy1vcGVuZWQnKSBleHBhbmRUcmVlU2VsZWN0T3B0aW9ucyA9IGZhbHNlO1xuXG4gICAgQEhvc3RCaW5kaW5nKCdjbGFzcy50aHktc2VsZWN0LWN1c3RvbS0tbXVsdGlwbGUnKSBpc011bHRpID0gZmFsc2U7XG5cbiAgICBwdWJsaWMgdHJlZU5vZGVzOiBUaHlUcmVlU2VsZWN0Tm9kZVtdO1xuXG4gICAgcHVibGljIHNlbGVjdGVkVmFsdWU6IGFueTtcblxuICAgIHB1YmxpYyBzZWxlY3RlZE5vZGU6IFRoeVRyZWVTZWxlY3ROb2RlO1xuXG4gICAgcHVibGljIHNlbGVjdGVkTm9kZXM6IFRoeVRyZWVTZWxlY3ROb2RlW10gPSBbXTtcblxuICAgIHB1YmxpYyBmbGF0dGVuVHJlZU5vZGVzOiBUaHlUcmVlU2VsZWN0Tm9kZVtdID0gW107XG5cbiAgICB2aXJ0dWFsVHJlZU5vZGVzOiBUaHlUcmVlU2VsZWN0Tm9kZVtdID0gW107XG5cbiAgICBwdWJsaWMgY2RrQ29ubmVjdE92ZXJsYXlXaWR0aCA9IDA7XG5cbiAgICBwdWJsaWMgZXhwYW5kZWREcm9wZG93blBvc2l0aW9ucyA9IEVYUEFOREVEX0RST1BET1dOX1BPU0lUSU9OUztcblxuICAgIHB1YmxpYyBpY29uczogeyBleHBhbmQ6IHN0cmluZzsgY29sbGFwc2U6IHN0cmluZzsgZ2FwPzogbnVtYmVyIH0gPSB7XG4gICAgICAgIGV4cGFuZDogJ2FuZ2xlLWRvd24nLFxuICAgICAgICBjb2xsYXBzZTogJ2FuZ2xlLXJpZ2h0JyxcbiAgICAgICAgZ2FwOiAxNVxuICAgIH07XG5cbiAgICBwcml2YXRlIGluaXRpYWxsZWQgPSBmYWxzZTtcblxuICAgIHByaXZhdGUgZGVzdHJveSQgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuXG4gICAgcHJpdmF0ZSBsb2NhbGU6IFNpZ25hbDxUaHlUcmVlU2VsZWN0TG9jYWxlPiA9IGluamVjdExvY2FsZSgndHJlZVNlbGVjdCcpO1xuXG4gICAgcHVibGljIHZhbHVlSXNPYmplY3QgPSBmYWxzZTtcblxuICAgIG9yaWdpblRyZWVOb2RlczogVGh5VHJlZVNlbGVjdE5vZGVbXTtcblxuICAgIEBDb250ZW50Q2hpbGQoJ3RoeVRyZWVTZWxlY3RUcmlnZ2VyRGlzcGxheScpXG4gICAgdGh5VHJlZVNlbGVjdFRyaWdnZXJEaXNwbGF5UmVmOiBUZW1wbGF0ZVJlZjxhbnk+O1xuXG4gICAgQENvbnRlbnRDaGlsZCgndHJlZU5vZGVUZW1wbGF0ZScpXG4gICAgdHJlZU5vZGVUZW1wbGF0ZVJlZjogVGVtcGxhdGVSZWY8YW55PjtcblxuICAgIEBWaWV3Q2hpbGQoQ2RrT3ZlcmxheU9yaWdpbiwgeyBzdGF0aWM6IHRydWUgfSkgY2RrT3ZlcmxheU9yaWdpbjogQ2RrT3ZlcmxheU9yaWdpbjtcblxuICAgIEBWaWV3Q2hpbGQoQ2RrQ29ubmVjdGVkT3ZlcmxheSwgeyBzdGF0aWM6IHRydWUgfSkgY2RrQ29ubmVjdGVkT3ZlcmxheTogQ2RrQ29ubmVjdGVkT3ZlcmxheTtcblxuICAgIEBWaWV3Q2hpbGQoJ2N1c3RvbURpc3BsYXlUZW1wbGF0ZScsIHsgc3RhdGljOiB0cnVlIH0pIGN1c3RvbURpc3BsYXlUZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PjtcblxuICAgIC8qKlxuICAgICAqIHRyZWVOb2RlcyDmlbDmja5cbiAgICAgKiBAdHlwZSBUaHlUcmVlU2VsZWN0Tm9kZVtdXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBzZXQgdGh5VHJlZU5vZGVzKHZhbHVlOiBUaHlUcmVlU2VsZWN0Tm9kZVtdKSB7XG4gICAgICAgIHRoaXMudHJlZU5vZGVzID0gdmFsdWU7XG4gICAgICAgIHRoaXMub3JpZ2luVHJlZU5vZGVzID0gdmFsdWU7XG4gICAgICAgIGlmICh0aGlzLmluaXRpYWxsZWQpIHtcbiAgICAgICAgICAgIHRoaXMuZmxhdHRlblRyZWVOb2RlcyA9IHRoaXMuZmxhdHRlbk5vZGVzKHRoaXMudHJlZU5vZGVzLCB0aGlzLmZsYXR0ZW5UcmVlTm9kZXMsIFtdKTtcbiAgICAgICAgICAgIHRoaXMuc2V0U2VsZWN0ZWROb2RlcygpO1xuXG4gICAgICAgICAgICBpZiAodGhpcy50aHlWaXJ0dWFsU2Nyb2xsKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5idWlsZEZsYXR0ZW5UcmVlTm9kZXMoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOW8gOWQr+iZmuaLn+a7muWKqFxuICAgICAqL1xuICAgIEBJbnB1dCh7IHRyYW5zZm9ybTogY29lcmNlQm9vbGVhblByb3BlcnR5IH0pIHRoeVZpcnR1YWxTY3JvbGw6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAgIC8qKlxuICAgICAqIOagkeiKgueCueeahOWUr+S4gOagh+ivhlxuICAgICAqIEB0eXBlIHN0cmluZ1xuICAgICAqL1xuICAgIEBJbnB1dCgpIHRoeVByaW1hcnlLZXkgPSAnX2lkJztcblxuICAgIC8qKlxuICAgICAqIOagkeiKgueCueeahOaYvuekuueahOWtl+autSBrZXlcbiAgICAgKiBAdHlwZSBzdHJpbmdcbiAgICAgKi9cbiAgICBASW5wdXQoKSB0aHlTaG93S2V5ID0gJ25hbWUnO1xuXG4gICAgQElucHV0KCkgdGh5Q2hpbGRDb3VudEtleSA9ICdjaGlsZENvdW50JztcblxuICAgIC8qKlxuICAgICAqIOWNlemAieaXtu+8jOaYr+WQpuaYvuekuua4hemZpOaMiemSru+8jOW9k+S4uiB0cnVlIOaXtu+8jOaYvuekuua4hemZpOaMiemSrlxuICAgICAqIEBkZWZhdWx0IGZhbHNlXG4gICAgICovXG4gICAgQElucHV0KHsgdHJhbnNmb3JtOiBjb2VyY2VCb29sZWFuUHJvcGVydHkgfSkgdGh5QWxsb3dDbGVhcjogYm9vbGVhbjtcblxuICAgIC8qKlxuICAgICAqIOaYr+WQpuWkmumAiVxuICAgICAqIEB0eXBlIGJvb2xlYW5cbiAgICAgKi9cbiAgICBASW5wdXQoeyB0cmFuc2Zvcm06IGNvZXJjZUJvb2xlYW5Qcm9wZXJ0eSB9KSB0aHlNdWx0aXBsZSA9IGZhbHNlO1xuXG4gICAgLyoqXG4gICAgICog5piv5ZCm56aB55So5qCR6YCJ5oup5Zmo77yM5b2T5Li6IHRydWUg56aB55So5qCR6YCJ5oup5ZmoXG4gICAgICogQHR5cGUgYm9vbGVhblxuICAgICAqL1xuICAgIEBJbnB1dCh7IHRyYW5zZm9ybTogY29lcmNlQm9vbGVhblByb3BlcnR5IH0pIHRoeURpc2FibGUgPSBmYWxzZTtcblxuICAgIGdldCB0aHlEaXNhYmxlZCgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudGh5RGlzYWJsZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDmoJHpgInmi6nmoYbpu5jorqTmloflrZdcbiAgICAgKiBAdHlwZSBzdHJpbmdcbiAgICAgKi9cbiAgICBASW5wdXQoKSB0aHlQbGFjZWhvbGRlciA9IHRoaXMubG9jYWxlKCkucGxhY2Vob2xkZXI7XG5cbiAgICBnZXQgcGxhY2Vob2xkZXIoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnRoeVBsYWNlaG9sZGVyO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOaOp+WItuagkemAieaLqeeahOi+k+WFpeahhuWkp+Wwj1xuICAgICAqIEB0eXBlIHhzIHwgc20gfCBtZCB8IGRlZmF1bHQgfCBsZ1xuICAgICAqL1xuICAgIEBJbnB1dCgpIHRoeVNpemU6IElucHV0U2l6ZTtcblxuICAgIC8qKlxuICAgICAqIOaUueWPmOepuumAiemhueeahOaDheWGteS4i+eahOaPkOekuuaWh+acrFxuICAgICAqIEB0eXBlIHN0cmluZ1xuICAgICAqL1xuICAgIEBJbnB1dCgpIHRoeUVtcHR5T3B0aW9uc1RleHQgPSB0aGlzLmxvY2FsZSgpLmVtcHR5O1xuXG4gICAgLyoqXG4gICAgICog6K6+572u5piv5ZCm6ZqQ6JeP6IqC54K5KOS4jeWPr+i/m+ihjOS7u+S9leaTjeS9nCnvvIzkvJjlhYjnuqfpq5jkuo4gdGh5SGlkZGVuTm9kZUZuXG4gICAgICogQHR5cGUgc3RyaW5nXG4gICAgICovXG4gICAgQElucHV0KCkgdGh5SGlkZGVuTm9kZUtleSA9ICdoaWRkZW4nO1xuXG4gICAgLyoqXG4gICAgICog6K6+572u5piv5ZCm56aB55So6IqC54K5KOS4jeWPr+i/m+ihjOS7u+S9leaTjeS9nCnvvIzkvJjlhYjnuqfpq5jkuo4gdGh5RGlzYWJsZU5vZGVGblxuICAgICAqIEB0eXBlIHN0cmluZ1xuICAgICAqL1xuICAgIEBJbnB1dCgpIHRoeURpc2FibGVOb2RlS2V5ID0gJ2Rpc2FibGVkJztcblxuICAgIC8qKlxuICAgICAqIOaYr+WQpuW8guatpeWKoOi9veiKgueCueeahOWtkOiKgueCuSjmmL7npLrliqDovb3nirbmgIEp77yM5b2T5Li6IHRydWUg5pe277yM5byC5q2l6I635Y+WXG4gICAgICogQHR5cGUgYm9vbGVhblxuICAgICAqL1xuICAgIEBJbnB1dCh7IHRyYW5zZm9ybTogY29lcmNlQm9vbGVhblByb3BlcnR5IH0pIHRoeUFzeW5jTm9kZSA9IGZhbHNlO1xuXG4gICAgLyoqXG4gICAgICog5piv5ZCm5bGV56S65YWo5ZCNXG4gICAgICogQHR5cGUgYm9vbGVhblxuICAgICAqL1xuICAgIEBJbnB1dCh7IHRyYW5zZm9ybTogY29lcmNlQm9vbGVhblByb3BlcnR5IH0pIHRoeVNob3dXaG9sZU5hbWUgPSBmYWxzZTtcblxuICAgIC8qKlxuICAgICAqIOaYr+WQpuWxleekuuaQnOe0olxuICAgICAqIEB0eXBlIGJvb2xlYW5cbiAgICAgKi9cbiAgICBASW5wdXQoeyB0cmFuc2Zvcm06IGNvZXJjZUJvb2xlYW5Qcm9wZXJ0eSB9KSB0aHlTaG93U2VhcmNoID0gZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiDlm77moIfnsbvlnovvvIzmlK/mjIEgZGVmYXVsdCB8IGVzcGVjaWFs77yM5bey5bqf5byDXG4gICAgICogQGRlcHJlY2F0ZWRcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHNldCB0aHlJY29uVHlwZSh0eXBlOiBUaHlUcmVlU2VsZWN0VHlwZSkge1xuICAgICAgICBpZiAodHlwZW9mIG5nRGV2TW9kZSA9PT0gJ3VuZGVmaW5lZCcgfHwgbmdEZXZNb2RlKSB7XG4gICAgICAgICAgICB3YXJuRGVwcmVjYXRpb24oJ1RoaXMgcGFyYW1ldGVyIGhhcyBiZWVuIGRlcHJlY2F0aW9uJyk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gaWYgKHR5cGUgPT09ICdlc3BlY2lhbCcpIHtcbiAgICAgICAgLy8gICAgIHRoaXMuaWNvbnMgPSB7IGV4cGFuZDogJ21pbnVzLXNxdWFyZScsIGNvbGxhcHNlOiAncGx1cy1zcXVhcmUnLCBnYXA6IDIwIH07XG4gICAgICAgIC8vIH0gZWxzZSB7XG4gICAgICAgIC8vICAgICB0aGlzLmljb25zID0geyBleHBhbmQ6ICdjYXJldC1yaWdodC1kb3duJywgY29sbGFwc2U6ICdjYXJldC1yaWdodCcsIGdhcDogMTUgfTtcbiAgICAgICAgLy8gfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOiuvue9ruaYr+WQpumakOiXj+iKgueCuSjkuI3lj6/ov5vooYzku7vkvZXmk43kvZwpLOS8mOWFiOe6p+S9juS6jiB0aHlIaWRkZW5Ob2RlS2V544CCXG4gICAgICogQGRlZmF1bHQgKG5vZGU6IFRoeVRyZWVTZWxlY3ROb2RlKSA9PiBib29sZWFuID0gKG5vZGU6IFRoeVRyZWVTZWxlY3ROb2RlKSA9PiBub2RlLmhpZGRlblxuICAgICAqL1xuICAgIEBJbnB1dCgpIHRoeUhpZGRlbk5vZGVGbjogKG5vZGU6IFRoeVRyZWVTZWxlY3ROb2RlKSA9PiBib29sZWFuID0gKG5vZGU6IFRoeVRyZWVTZWxlY3ROb2RlKSA9PiBub2RlLmhpZGRlbjtcblxuICAgIC8qKlxuICAgICAqIOiuvue9ruaYr+WQpuemgeeUqOiKgueCuSjkuI3lj6/ov5vooYzku7vkvZXmk43kvZwp77yM5LyY5YWI57qn5L2O5LqOIHRoeURpc2FibGVOb2RlS2V544CCXG4gICAgICogQGRlZmF1bHQgKG5vZGU6IFRoeVRyZWVTZWxlY3ROb2RlKSA9PiBib29sZWFuID0gKG5vZGU6IFRoeVRyZWVTZWxlY3ROb2RlKSA9PiBub2RlLmRpc2FibGVkXG4gICAgICovXG4gICAgQElucHV0KCkgdGh5RGlzYWJsZU5vZGVGbjogKG5vZGU6IFRoeVRyZWVTZWxlY3ROb2RlKSA9PiBib29sZWFuID0gKG5vZGU6IFRoeVRyZWVTZWxlY3ROb2RlKSA9PiBub2RlLmRpc2FibGVkO1xuXG4gICAgLyoqXG4gICAgICog6I635Y+W6IqC54K555qE5a2Q6IqC54K577yM6L+U5ZueIE9ic2VydmFibGU8VGh5VHJlZVNlbGVjdE5vZGU+44CCXG4gICAgICogQGRlZmF1bHQgKG5vZGU6IFRoeVRyZWVTZWxlY3ROb2RlKSA9PiBPYnNlcnZhYmxlPFRoeVRyZWVTZWxlY3ROb2RlPiA9IChub2RlOiBUaHlUcmVlU2VsZWN0Tm9kZSkgPT4gb2YoW10pXG4gICAgICovXG4gICAgQElucHV0KCkgdGh5R2V0Tm9kZUNoaWxkcmVuOiAobm9kZTogVGh5VHJlZVNlbGVjdE5vZGUpID0+IE9ic2VydmFibGU8VGh5VHJlZVNlbGVjdE5vZGU+ID0gKG5vZGU6IFRoeVRyZWVTZWxlY3ROb2RlKSA9PiBvZihbXSk7XG5cbiAgICAvKipcbiAgICAgKiDmoJHpgInmi6nnu4Tku7blsZXlvIDlkozmipjlj6DnirbmgIHkuovku7ZcbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgdGh5RXhwYW5kU3RhdHVzQ2hhbmdlOiBFdmVudEVtaXR0ZXI8Ym9vbGVhbj4gPSBuZXcgRXZlbnRFbWl0dGVyPGJvb2xlYW4+KCk7XG5cbiAgICBwcml2YXRlIF9nZXROZ01vZGVsVHlwZSgpIHtcbiAgICAgICAgaWYgKHRoaXMudGh5TXVsdGlwbGUpIHtcbiAgICAgICAgICAgIHRoaXMudmFsdWVJc09iamVjdCA9ICF0aGlzLnNlbGVjdGVkVmFsdWVbMF0gfHwgaXNPYmplY3QodGhpcy5zZWxlY3RlZFZhbHVlWzBdKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMudmFsdWVJc09iamVjdCA9IGlzT2JqZWN0KHRoaXMuc2VsZWN0ZWRWYWx1ZSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgYnVpbGRGbGF0dGVuVHJlZU5vZGVzKCkge1xuICAgICAgICB0aGlzLnZpcnR1YWxUcmVlTm9kZXMgPSB0aGlzLmdldEZsYXR0ZW5UcmVlTm9kZXModGhpcy50cmVlTm9kZXMpO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0RmxhdHRlblRyZWVOb2Rlcyhyb290VHJlZXM6IFRoeVRyZWVTZWxlY3ROb2RlW10gPSB0aGlzLnRyZWVOb2Rlcykge1xuICAgICAgICBjb25zdCBmb3JFYWNoVHJlZSA9ICh0cmVlOiBUaHlUcmVlU2VsZWN0Tm9kZVtdLCBmbjogYW55LCByZXN1bHQ6IFRoeVRyZWVTZWxlY3ROb2RlW10gPSBbXSkgPT4ge1xuICAgICAgICAgICAgdHJlZS5mb3JFYWNoKGl0ZW0gPT4ge1xuICAgICAgICAgICAgICAgIHJlc3VsdC5wdXNoKGl0ZW0pO1xuICAgICAgICAgICAgICAgIGlmIChpdGVtLmNoaWxkcmVuICYmIGZuKGl0ZW0pKSB7XG4gICAgICAgICAgICAgICAgICAgIGZvckVhY2hUcmVlKGl0ZW0uY2hpbGRyZW4sIGZuLCByZXN1bHQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgfTtcbiAgICAgICAgcmV0dXJuIGZvckVhY2hUcmVlKHJvb3RUcmVlcywgKG5vZGU6IFRoeVRyZWVTZWxlY3ROb2RlKSA9PiAhIW5vZGUuZXhwYW5kKTtcbiAgICB9XG5cbiAgICB3cml0ZVZhbHVlKHZhbHVlOiBhbnkpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5zZWxlY3RlZFZhbHVlID0gdmFsdWU7XG5cbiAgICAgICAgaWYgKHZhbHVlKSB7XG4gICAgICAgICAgICB0aGlzLl9nZXROZ01vZGVsVHlwZSgpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuc2V0U2VsZWN0ZWROb2RlcygpO1xuICAgIH1cblxuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBzdXBlcigpO1xuICAgIH1cblxuICAgIG5nT25Jbml0KCkge1xuICAgICAgICB0aGlzLmlzTXVsdGkgPSB0aGlzLnRoeU11bHRpcGxlO1xuICAgICAgICB0aGlzLmZsYXR0ZW5UcmVlTm9kZXMgPSB0aGlzLmZsYXR0ZW5Ob2Rlcyh0aGlzLnRyZWVOb2RlcywgdGhpcy5mbGF0dGVuVHJlZU5vZGVzLCBbXSk7XG4gICAgICAgIHRoaXMuc2V0U2VsZWN0ZWROb2RlcygpO1xuICAgICAgICB0aGlzLmluaXRpYWxsZWQgPSB0cnVlO1xuXG4gICAgICAgIGlmICh0aGlzLnRoeVZpcnR1YWxTY3JvbGwpIHtcbiAgICAgICAgICAgIHRoaXMuYnVpbGRGbGF0dGVuVHJlZU5vZGVzKCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoaXNQbGF0Zm9ybUJyb3dzZXIodGhpcy5wbGF0Zm9ybUlkKSkge1xuICAgICAgICAgICAgdGhpcy50aHlDbGlja0Rpc3BhdGNoZXJcbiAgICAgICAgICAgICAgICAuY2xpY2tlZCgwKVxuICAgICAgICAgICAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSlcbiAgICAgICAgICAgICAgICAuc3Vic2NyaWJlKGV2ZW50ID0+IHtcbiAgICAgICAgICAgICAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgICAgICAgICAgICAgIGlmICghdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuY29udGFpbnMoZXZlbnQudGFyZ2V0KSAmJiB0aGlzLmV4cGFuZFRyZWVTZWxlY3RPcHRpb25zKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm5nWm9uZS5ydW4oKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY2xvc2UoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnJlZi5tYXJrRm9yQ2hlY2soKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy52aWV3cG9ydFJ1bGVyXG4gICAgICAgICAgICAuY2hhbmdlKClcbiAgICAgICAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSlcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuaW5pdCgpO1xuICAgICAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgb25Gb2N1cygkZXZlbnQ6IEZvY3VzRXZlbnQpIHtcbiAgICAgICAgY29uc3QgaW5wdXRFbGVtZW50OiBIVE1MSW5wdXRFbGVtZW50ID0gdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvcignaW5wdXQnKTtcbiAgICAgICAgaW5wdXRFbGVtZW50Py5mb2N1cygpO1xuICAgIH1cblxuICAgIG9uQmx1cigkZXZlbnQ6IEZvY3VzRXZlbnQpIHtcbiAgICAgICAgLy8gMS4gVGFiIOiBmueEpuWQjuiHquWKqOiBmueEpuWIsCBpbnB1dCDovpPlhaXmoYbvvIzmraTliIbmlK/kuIvnm7TmjqXov5Tlm57vvIzml6DpnIDop6blj5Egb25Ub3VjaGVkRm5cbiAgICAgICAgLy8gMi4g5omT5byA6YCJ5oup5qGG5ZCO5aaC5p6c54K55Ye75by55qGG5YaF5a+86Ie0IGlucHV0IOWkseeEpu+8jOaXoOmcgOinpuWPkSBvblRvdWNoZWRGblxuICAgICAgICBpZiAoZWxlbWVudE1hdGNoQ2xvc2VzdCgkZXZlbnQ/LnJlbGF0ZWRUYXJnZXQgYXMgSFRNTEVsZW1lbnQsIFsndGh5LXRyZWUtc2VsZWN0JywgJ3RoeS10cmVlLXNlbGVjdC1ub2RlcyddKSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMub25Ub3VjaGVkRm4oKTtcbiAgICB9XG5cbiAgICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5kZXN0cm95JC5uZXh0KCk7XG4gICAgfVxuXG4gICAgZ2V0IHNlbGVjdGVkVmFsdWVPYmplY3QoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnRoeU11bHRpcGxlID8gdGhpcy5zZWxlY3RlZE5vZGVzIDogdGhpcy5zZWxlY3RlZE5vZGU7XG4gICAgfVxuXG4gICAgc2VhcmNoVmFsdWUoc2VhcmNoVGV4dDogc3RyaW5nKSB7XG4gICAgICAgIHRoaXMudHJlZU5vZGVzID0gZmlsdGVyVHJlZURhdGEodGhpcy5vcmlnaW5UcmVlTm9kZXMsIHNlYXJjaFRleHQudHJpbSgpLCB0aGlzLnRoeVNob3dLZXkpO1xuICAgIH1cblxuICAgIHB1YmxpYyBzZXRQb3NpdGlvbigpIHtcbiAgICAgICAgdGhpcy5uZ1pvbmUub25TdGFibGVcbiAgICAgICAgICAgIC5hc09ic2VydmFibGUoKVxuICAgICAgICAgICAgLnBpcGUodGFrZSgxKSlcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuY2RrQ29ubmVjdGVkT3ZlcmxheS5vdmVybGF5UmVmLnVwZGF0ZVBvc2l0aW9uKCk7XG4gICAgICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGluaXQoKSB7XG4gICAgICAgIHRoaXMuY2RrQ29ubmVjdE92ZXJsYXlXaWR0aCA9IHRoaXMuY2RrT3ZlcmxheU9yaWdpbi5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkud2lkdGg7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBmbGF0dGVuTm9kZXMoXG4gICAgICAgIG5vZGVzOiBUaHlUcmVlU2VsZWN0Tm9kZVtdID0gW10sXG4gICAgICAgIHJlc3VsdE5vZGVzOiBUaHlUcmVlU2VsZWN0Tm9kZVtdID0gW10sXG4gICAgICAgIHBhcmVudFByaW1hcnlWYWx1ZTogc3RyaW5nW10gPSBbXVxuICAgICk6IFRoeVRyZWVTZWxlY3ROb2RlW10ge1xuICAgICAgICByZXN1bHROb2RlcyA9IHJlc3VsdE5vZGVzLmNvbmNhdChub2Rlcyk7XG4gICAgICAgIGxldCBub2Rlc0xlYWZzOiBUaHlUcmVlU2VsZWN0Tm9kZVtdID0gW107XG4gICAgICAgIChub2RlcyB8fCBbXSkuZm9yRWFjaChpdGVtID0+IHtcbiAgICAgICAgICAgIGl0ZW0ucGFyZW50VmFsdWVzID0gcGFyZW50UHJpbWFyeVZhbHVlO1xuICAgICAgICAgICAgaXRlbS5sZXZlbCA9IGl0ZW0ucGFyZW50VmFsdWVzLmxlbmd0aDtcbiAgICAgICAgICAgIGlmIChpdGVtLmNoaWxkcmVuICYmIGlzQXJyYXkoaXRlbS5jaGlsZHJlbikpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBub2RlTGVhZnMgPSB0aGlzLmZsYXR0ZW5Ob2RlcyhpdGVtLmNoaWxkcmVuLCByZXN1bHROb2RlcywgWy4uLnBhcmVudFByaW1hcnlWYWx1ZSwgaXRlbVt0aGlzLnRoeVByaW1hcnlLZXldXSk7XG4gICAgICAgICAgICAgICAgbm9kZXNMZWFmcyA9IFsuLi5ub2Rlc0xlYWZzLCAuLi5ub2RlTGVhZnNdO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIFsuLi5ub2RlcywgLi4ubm9kZXNMZWFmc107XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfZmluZFRyZWVOb2RlKHZhbHVlOiBzdHJpbmcpOiBUaHlUcmVlU2VsZWN0Tm9kZSB7XG4gICAgICAgIHJldHVybiAodGhpcy5mbGF0dGVuVHJlZU5vZGVzIHx8IFtdKS5maW5kKGl0ZW0gPT4gaXRlbVt0aGlzLnRoeVByaW1hcnlLZXldID09PSB2YWx1ZSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzZXRTZWxlY3RlZE5vZGVzKCkge1xuICAgICAgICBpZiAodGhpcy5zZWxlY3RlZFZhbHVlKSB7XG4gICAgICAgICAgICAvLyDlpJrpgInmlbDmja7liJ3lp4vljJZcbiAgICAgICAgICAgIGlmICh0aGlzLnRoeU11bHRpcGxlKSB7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuc2VsZWN0ZWRWYWx1ZS5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLnZhbHVlSXNPYmplY3QgJiYgT2JqZWN0LmtleXModGhpcy5zZWxlY3RlZFZhbHVlWzBdKS5pbmRleE9mKHRoaXMudGh5UHJpbWFyeUtleSkgPj0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZE5vZGVzID0gdGhpcy5zZWxlY3RlZFZhbHVlLm1hcCgoaXRlbTogYW55KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2ZpbmRUcmVlTm9kZShpdGVtW3RoaXMudGh5UHJpbWFyeUtleV0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkTm9kZXMgPSB0aGlzLnNlbGVjdGVkVmFsdWUubWFwKChpdGVtOiBhbnkpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fZmluZFRyZWVOb2RlKGl0ZW0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIC8vIOWNlemAieaVsOaNruWIneWni+WMllxuICAgICAgICAgICAgICAgIGlmICh0aGlzLnZhbHVlSXNPYmplY3QpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKE9iamVjdC5rZXlzKHRoaXMuc2VsZWN0ZWRWYWx1ZSkuaW5kZXhPZih0aGlzLnRoeVByaW1hcnlLZXkpID49IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWROb2RlID0gdGhpcy5fZmluZFRyZWVOb2RlKHRoaXMuc2VsZWN0ZWRWYWx1ZVt0aGlzLnRoeVByaW1hcnlLZXldKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWROb2RlID0gdGhpcy5fZmluZFRyZWVOb2RlKHRoaXMuc2VsZWN0ZWRWYWx1ZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZE5vZGVzID0gW107XG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkTm9kZSA9IG51bGw7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBvcGVuU2VsZWN0UG9wKCkge1xuICAgICAgICBpZiAodGhpcy50aHlEaXNhYmxlKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5jZGtDb25uZWN0T3ZlcmxheVdpZHRoID0gdGhpcy5jZGtPdmVybGF5T3JpZ2luLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS53aWR0aDtcbiAgICAgICAgdGhpcy5leHBhbmRUcmVlU2VsZWN0T3B0aW9ucyA9ICF0aGlzLmV4cGFuZFRyZWVTZWxlY3RPcHRpb25zO1xuICAgICAgICB0aGlzLnRoeUV4cGFuZFN0YXR1c0NoYW5nZS5lbWl0KHRoaXMuZXhwYW5kVHJlZVNlbGVjdE9wdGlvbnMpO1xuICAgIH1cblxuICAgIGNsb3NlKCkge1xuICAgICAgICBpZiAodGhpcy5leHBhbmRUcmVlU2VsZWN0T3B0aW9ucykge1xuICAgICAgICAgICAgdGhpcy5leHBhbmRUcmVlU2VsZWN0T3B0aW9ucyA9IGZhbHNlO1xuICAgICAgICAgICAgdGhpcy50aHlFeHBhbmRTdGF0dXNDaGFuZ2UuZW1pdCh0aGlzLmV4cGFuZFRyZWVTZWxlY3RPcHRpb25zKTtcbiAgICAgICAgICAgIHRoaXMub25Ub3VjaGVkRm4oKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGNsZWFyU2VsZWN0ZWRWYWx1ZShldmVudDogRXZlbnQpIHtcbiAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgIHRoaXMuc2VsZWN0ZWRWYWx1ZSA9IG51bGw7XG4gICAgICAgIHRoaXMuc2VsZWN0ZWROb2RlID0gbnVsbDtcbiAgICAgICAgdGhpcy5zZWxlY3RlZE5vZGVzID0gW107XG4gICAgICAgIHRoaXMub25DaGFuZ2VGbih0aGlzLnNlbGVjdGVkVmFsdWUpO1xuICAgIH1cblxuICAgIHByaXZhdGUgX2NoYW5nZVNlbGVjdFZhbHVlKCkge1xuICAgICAgICBpZiAodGhpcy52YWx1ZUlzT2JqZWN0KSB7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkVmFsdWUgPSB0aGlzLnRoeU11bHRpcGxlID8gdGhpcy5zZWxlY3RlZE5vZGVzIDogdGhpcy5zZWxlY3RlZE5vZGU7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkVmFsdWUgPSB0aGlzLnRoeU11bHRpcGxlXG4gICAgICAgICAgICAgICAgPyB0aGlzLnNlbGVjdGVkTm9kZXMubWFwKGl0ZW0gPT4gaXRlbVt0aGlzLnRoeVByaW1hcnlLZXldKVxuICAgICAgICAgICAgICAgIDogdGhpcy5zZWxlY3RlZE5vZGVbdGhpcy50aHlQcmltYXJ5S2V5XTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLm9uQ2hhbmdlRm4odGhpcy5zZWxlY3RlZFZhbHVlKTtcbiAgICAgICAgaWYgKCF0aGlzLnRoeU11bHRpcGxlKSB7XG4gICAgICAgICAgICB0aGlzLm9uVG91Y2hlZEZuKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICByZW1vdmVNdWx0aXBsZVNlbGVjdGVkTm9kZShldmVudDogeyBpdGVtOiBUaHlUcmVlU2VsZWN0Tm9kZTsgJGV2ZW50T3JpZ2luOiBFdmVudCB9KSB7XG4gICAgICAgIHRoaXMucmVtb3ZlU2VsZWN0ZWROb2RlKGV2ZW50Lml0ZW0sIGV2ZW50LiRldmVudE9yaWdpbik7XG4gICAgfVxuXG4gICAgLy8gdGh5TXVsdGlwbGUgPSB0cnVlIOaXtu+8jOenu+mZpOaVsOaNruaXtuiwg+eUqFxuICAgIHJlbW92ZVNlbGVjdGVkTm9kZShub2RlOiBUaHlUcmVlU2VsZWN0Tm9kZSwgZXZlbnQ/OiBFdmVudCkge1xuICAgICAgICBpZiAoZXZlbnQpIHtcbiAgICAgICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLnRoeURpc2FibGUpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy50aHlNdWx0aXBsZSkge1xuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZE5vZGVzID0gcHJvZHVjZSh0aGlzLnNlbGVjdGVkTm9kZXMpLnJlbW92ZSgoaXRlbTogVGh5VHJlZVNlbGVjdE5vZGUpID0+IHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaXRlbVt0aGlzLnRoeVByaW1hcnlLZXldID09PSBub2RlW3RoaXMudGh5UHJpbWFyeUtleV07XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHRoaXMuX2NoYW5nZVNlbGVjdFZhbHVlKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBzZWxlY3ROb2RlKG5vZGU6IFRoeVRyZWVTZWxlY3ROb2RlKSB7XG4gICAgICAgIGlmICghdGhpcy50aHlNdWx0aXBsZSkge1xuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZE5vZGUgPSBub2RlO1xuICAgICAgICAgICAgdGhpcy5leHBhbmRUcmVlU2VsZWN0T3B0aW9ucyA9IGZhbHNlO1xuICAgICAgICAgICAgdGhpcy50aHlFeHBhbmRTdGF0dXNDaGFuZ2UuZW1pdCh0aGlzLmV4cGFuZFRyZWVTZWxlY3RPcHRpb25zKTtcbiAgICAgICAgICAgIHRoaXMuX2NoYW5nZVNlbGVjdFZhbHVlKCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZE5vZGVzLmZpbmQoaXRlbSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBpdGVtW3RoaXMudGh5UHJpbWFyeUtleV0gPT09IG5vZGVbdGhpcy50aHlQcmltYXJ5S2V5XTtcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5yZW1vdmVTZWxlY3RlZE5vZGUobm9kZSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWROb2RlcyA9IHByb2R1Y2UodGhpcy5zZWxlY3RlZE5vZGVzKS5hZGQobm9kZSk7XG4gICAgICAgICAgICAgICAgdGhpcy5fY2hhbmdlU2VsZWN0VmFsdWUoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIGdldE5vZGVDaGlsZHJlbihub2RlOiBUaHlUcmVlU2VsZWN0Tm9kZSkge1xuICAgICAgICBjb25zdCByZXN1bHQgPSB0aGlzLnRoeUdldE5vZGVDaGlsZHJlbihub2RlKTtcbiAgICAgICAgaWYgKHJlc3VsdCAmJiByZXN1bHQuc3Vic2NyaWJlKSB7XG4gICAgICAgICAgICByZXN1bHQucGlwZSgpLnN1YnNjcmliZSgoZGF0YTogVGh5VHJlZVNlbGVjdE5vZGVbXSkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IG5vZGVzID0gdGhpcy5mbGF0dGVuTm9kZXMoZGF0YSwgdGhpcy5mbGF0dGVuVHJlZU5vZGVzLCBbLi4ubm9kZS5wYXJlbnRWYWx1ZXMsIG5vZGVbdGhpcy50aHlQcmltYXJ5S2V5XV0pO1xuICAgICAgICAgICAgICAgIGNvbnN0IG90aGVyTm9kZXMgPSBub2Rlcy5maWx0ZXIoKGl0ZW06IFRoeVRyZWVOb2RlKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAhdGhpcy5mbGF0dGVuVHJlZU5vZGVzLmZpbmQoaGFzSXRlbSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gaGFzSXRlbVt0aGlzLnRoeVByaW1hcnlLZXldID09PSBpdGVtW3RoaXMudGh5UHJpbWFyeUtleV07XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIHRoaXMuZmxhdHRlblRyZWVOb2RlcyA9IFsuLi50aGlzLmZsYXR0ZW5UcmVlTm9kZXMsIC4uLm90aGVyTm9kZXNdO1xuICAgICAgICAgICAgICAgIG5vZGUuY2hpbGRyZW4gPSBkYXRhO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICB9XG4gICAgfVxufVxuXG5jb25zdCBERUZBVUxUX0lURU1fU0laRSA9IDQwO1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKi9cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAndGh5LXRyZWUtc2VsZWN0LW5vZGVzJyxcbiAgICB0ZW1wbGF0ZVVybDogJy4vdHJlZS1zZWxlY3Qtbm9kZXMuY29tcG9uZW50Lmh0bWwnLFxuICAgIHN0YW5kYWxvbmU6IHRydWUsXG4gICAgaW1wb3J0czogW1xuICAgICAgICBOZ1RlbXBsYXRlT3V0bGV0LFxuICAgICAgICBDZGtWaXJ0dWFsU2Nyb2xsVmlld3BvcnQsXG4gICAgICAgIENka0ZpeGVkU2l6ZVZpcnR1YWxTY3JvbGwsXG4gICAgICAgIENka1ZpcnR1YWxGb3JPZixcbiAgICAgICAgVGh5RW1wdHksXG4gICAgICAgIE5nQ2xhc3MsXG4gICAgICAgIE5nU3R5bGUsXG4gICAgICAgIFRoeUljb24sXG4gICAgICAgIFRoeUZsZXhpYmxlVGV4dFxuICAgIF0sXG4gICAgaG9zdDoge1xuICAgICAgICAnW2F0dHIudGFiaW5kZXhdJzogJy0xJ1xuICAgIH1cbn0pXG5leHBvcnQgY2xhc3MgVGh5VHJlZVNlbGVjdE5vZGVzIGltcGxlbWVudHMgT25Jbml0IHtcbiAgICBwYXJlbnQgPSBpbmplY3QoVGh5VHJlZVNlbGVjdCk7XG5cbiAgICBASG9zdEJpbmRpbmcoJ2NsYXNzJykgY2xhc3M6IHN0cmluZztcblxuICAgIG5vZGVMaXN0OiBUaHlUcmVlU2VsZWN0Tm9kZVtdID0gW107XG5cbiAgICBASW5wdXQoKSBzZXQgdHJlZU5vZGVzKHZhbHVlOiBUaHlUcmVlU2VsZWN0Tm9kZVtdKSB7XG4gICAgICAgIGNvbnN0IHRyZWVTZWxlY3RIZWlnaHQgPSB0aGlzLmRlZmF1bHRJdGVtU2l6ZSAqIHZhbHVlLmxlbmd0aDtcbiAgICAgICAgLy8g54i257qn6K6+572u5LqGbWF4LWhlaWdodDozMDAgJiBwYWRkaW5nOjEwIDA7IOaVheatpOWkhOacgOWkmuiuvue9rjI4MO+8jOWQpuWImeWwhuWHuueOsOa7muWKqOadoVxuICAgICAgICB0aGlzLnRoeVZpcnR1YWxIZWlnaHQgPSB0cmVlU2VsZWN0SGVpZ2h0ID4gMzAwID8gJzI4MHB4JyA6IGAke3RyZWVTZWxlY3RIZWlnaHR9cHhgO1xuICAgICAgICB0aGlzLm5vZGVMaXN0ID0gdmFsdWU7XG4gICAgICAgIHRoaXMuaGFzTm9kZUNoaWxkcmVuID0gdGhpcy5ub2RlTGlzdC5ldmVyeShcbiAgICAgICAgICAgIGl0ZW0gPT4gIWl0ZW0uaGFzT3duUHJvcGVydHkoJ2NoaWxkcmVuJykgfHwgKCFpdGVtPy5jaGlsZHJlbj8ubGVuZ3RoICYmICFpdGVtPy5jaGlsZENvdW50KVxuICAgICAgICApO1xuICAgIH1cblxuICAgIEBJbnB1dCgpIHRoeVZpcnR1YWxTY3JvbGw6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAgIHB1YmxpYyBwcmltYXJ5S2V5ID0gdGhpcy5wYXJlbnQudGh5UHJpbWFyeUtleTtcblxuICAgIHB1YmxpYyBzaG93S2V5ID0gdGhpcy5wYXJlbnQudGh5U2hvd0tleTtcblxuICAgIHB1YmxpYyBpc011bHRpcGxlID0gdGhpcy5wYXJlbnQudGh5TXVsdGlwbGU7XG5cbiAgICBwdWJsaWMgdmFsdWVJc09iamVjdCA9IHRoaXMucGFyZW50LnZhbHVlSXNPYmplY3Q7XG5cbiAgICBwdWJsaWMgc2VsZWN0ZWRWYWx1ZSA9IHRoaXMucGFyZW50LnNlbGVjdGVkVmFsdWU7XG5cbiAgICBwdWJsaWMgY2hpbGRDb3VudEtleSA9IHRoaXMucGFyZW50LnRoeUNoaWxkQ291bnRLZXk7XG5cbiAgICBwdWJsaWMgdHJlZU5vZGVUZW1wbGF0ZVJlZiA9IHRoaXMucGFyZW50LnRyZWVOb2RlVGVtcGxhdGVSZWY7XG5cbiAgICBwdWJsaWMgZGVmYXVsdEl0ZW1TaXplID0gREVGQVVMVF9JVEVNX1NJWkU7XG5cbiAgICBwdWJsaWMgdGh5VmlydHVhbEhlaWdodDogc3RyaW5nID0gbnVsbDtcblxuICAgIHB1YmxpYyBoYXNOb2RlQ2hpbGRyZW46IGJvb2xlYW4gPSBmYWxzZTtcblxuICAgIG5nT25Jbml0KCkge1xuICAgICAgICB0aGlzLmNsYXNzID0gdGhpcy5pc011bHRpcGxlID8gJ3RoeS10cmVlLXNlbGVjdC1kcm9wZG93biB0aHktdHJlZS1zZWxlY3QtZHJvcGRvd24tbXVsdGlwbGUnIDogJ3RoeS10cmVlLXNlbGVjdC1kcm9wZG93bic7XG4gICAgfVxuXG4gICAgdHJlZU5vZGVJc1NlbGVjdGVkKG5vZGU6IFRoeVRyZWVTZWxlY3ROb2RlKSB7XG4gICAgICAgIGlmICh0aGlzLnBhcmVudC50aHlNdWx0aXBsZSkge1xuICAgICAgICAgICAgcmV0dXJuICh0aGlzLnBhcmVudC5zZWxlY3RlZE5vZGVzIHx8IFtdKS5maW5kKGl0ZW0gPT4ge1xuICAgICAgICAgICAgICAgIHJldHVybiBpdGVtW3RoaXMucHJpbWFyeUtleV0gPT09IG5vZGVbdGhpcy5wcmltYXJ5S2V5XTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMucGFyZW50LnNlbGVjdGVkTm9kZSAmJiB0aGlzLnBhcmVudC5zZWxlY3RlZE5vZGVbdGhpcy5wcmltYXJ5S2V5XSA9PT0gbm9kZVt0aGlzLnByaW1hcnlLZXldO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgdHJlZU5vZGVJc0hpZGRlbihub2RlOiBUaHlUcmVlU2VsZWN0Tm9kZSkge1xuICAgICAgICBpZiAodGhpcy5wYXJlbnQudGh5SGlkZGVuTm9kZUtleSkge1xuICAgICAgICAgICAgcmV0dXJuIG5vZGVbdGhpcy5wYXJlbnQudGh5SGlkZGVuTm9kZUtleV07XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMucGFyZW50LnRoeUhpZGRlbk5vZGVGbikge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMucGFyZW50LnRoeUhpZGRlbk5vZGVGbihub2RlKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgdHJlZU5vZGVJc0Rpc2FibGUobm9kZTogVGh5VHJlZVNlbGVjdE5vZGUpIHtcbiAgICAgICAgaWYgKHRoaXMucGFyZW50LnRoeURpc2FibGVOb2RlS2V5KSB7XG4gICAgICAgICAgICByZXR1cm4gbm9kZVt0aGlzLnBhcmVudC50aHlEaXNhYmxlTm9kZUtleV07XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMucGFyZW50LnRoeURpc2FibGVOb2RlRm4pIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnBhcmVudC50aHlEaXNhYmxlTm9kZUZuKG5vZGUpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICB0cmVlTm9kZUlzRXhwYW5kKG5vZGU6IFRoeVRyZWVTZWxlY3ROb2RlKSB7XG4gICAgICAgIGxldCBpc1NlbGVjdGVkTm9kZVBhcmVudCA9IGZhbHNlO1xuICAgICAgICBpZiAodGhpcy5wYXJlbnQudGh5TXVsdGlwbGUpIHtcbiAgICAgICAgICAgIGlzU2VsZWN0ZWROb2RlUGFyZW50ID0gISEodGhpcy5wYXJlbnQuc2VsZWN0ZWROb2RlcyB8fCBbXSkuZmluZChpdGVtID0+IHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaXRlbS5wYXJlbnRWYWx1ZXMuaW5kZXhPZihub2RlW3RoaXMucHJpbWFyeUtleV0pID4gLTE7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlzU2VsZWN0ZWROb2RlUGFyZW50ID0gdGhpcy5wYXJlbnQuc2VsZWN0ZWROb2RlXG4gICAgICAgICAgICAgICAgPyB0aGlzLnBhcmVudC5zZWxlY3RlZE5vZGUucGFyZW50VmFsdWVzLmluZGV4T2Yobm9kZVt0aGlzLnByaW1hcnlLZXldKSA+IC0xXG4gICAgICAgICAgICAgICAgOiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBpc0V4cGFuZCA9IG5vZGUuZXhwYW5kIHx8IChPYmplY3Qua2V5cyhub2RlKS5pbmRleE9mKCdleHBhbmQnKSA8IDAgJiYgaXNTZWxlY3RlZE5vZGVQYXJlbnQpO1xuICAgICAgICBub2RlLmV4cGFuZCA9IGlzRXhwYW5kO1xuICAgICAgICByZXR1cm4gaXNFeHBhbmQ7XG4gICAgfVxuXG4gICAgZ2V0Tm9kZUNoaWxkcmVuKG5vZGU6IFRoeVRyZWVTZWxlY3ROb2RlKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnBhcmVudC5nZXROb2RlQ2hpbGRyZW4obm9kZSk7XG4gICAgfVxuXG4gICAgc2VsZWN0VHJlZU5vZGUoZXZlbnQ6IEV2ZW50LCBub2RlOiBUaHlUcmVlU2VsZWN0Tm9kZSkge1xuICAgICAgICBpZiAoIXRoaXMudHJlZU5vZGVJc0Rpc2FibGUobm9kZSkpIHtcbiAgICAgICAgICAgIHRoaXMucGFyZW50LnNlbGVjdE5vZGUobm9kZSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBub2RlRXhwYW5kVG9nZ2xlKGV2ZW50OiBFdmVudCwgbm9kZTogVGh5VHJlZVNlbGVjdE5vZGUpIHtcbiAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgIGlmIChPYmplY3Qua2V5cyhub2RlKS5pbmRleE9mKCdleHBhbmQnKSA+IC0xKSB7XG4gICAgICAgICAgICBub2RlLmV4cGFuZCA9ICFub2RlLmV4cGFuZDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmICh0aGlzLnRyZWVOb2RlSXNFeHBhbmQobm9kZSkpIHtcbiAgICAgICAgICAgICAgICBub2RlLmV4cGFuZCA9IGZhbHNlO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBub2RlLmV4cGFuZCA9IHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAobm9kZS5leHBhbmQgJiYgdGhpcy5wYXJlbnQudGh5QXN5bmNOb2RlKSB7XG4gICAgICAgICAgICB0aGlzLmdldE5vZGVDaGlsZHJlbihub2RlKS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMucGFyZW50LnNldFBvc2l0aW9uKCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICAvLyB0aGlzLnBhcmVudC5zZXRQb3NpdGlvbigpO1xuICAgICAgICBpZiAodGhpcy50aHlWaXJ0dWFsU2Nyb2xsKSB7XG4gICAgICAgICAgICB0aGlzLnBhcmVudC5idWlsZEZsYXR0ZW5UcmVlTm9kZXMoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHRhYlRyYWNrQnkoaW5kZXg6IG51bWJlciwgaXRlbTogVGh5VHJlZVNlbGVjdE5vZGUpIHtcbiAgICAgICAgcmV0dXJuIGluZGV4O1xuICAgIH1cbn1cbiIsIjxkaXZcbiAgY2RrT3ZlcmxheU9yaWdpblxuICB0aHlTZWxlY3RDb250cm9sXG4gIChjbGljayk9XCJvcGVuU2VsZWN0UG9wKClcIlxuICAjb3JpZ2luPVwiY2RrT3ZlcmxheU9yaWdpblwiXG4gIFt0aHlQYW5lbE9wZW5lZF09XCJleHBhbmRUcmVlU2VsZWN0T3B0aW9uc1wiXG4gIFt0aHlTZWxlY3RlZE9wdGlvbnNdPVwic2VsZWN0ZWRWYWx1ZU9iamVjdFwiXG4gIFt0aHlJc011bHRpcGxlXT1cInRoeU11bHRpcGxlXCJcbiAgW3RoeUFsbG93Q2xlYXJdPVwidGh5QWxsb3dDbGVhclwiXG4gIFt0aHlTaXplXT1cInRoeVNpemVcIlxuICBbdGh5UGxhY2Vob2xkZXJdPVwicGxhY2Vob2xkZXJcIlxuICBbY3VzdG9tRGlzcGxheVRlbXBsYXRlXT1cImN1c3RvbURpc3BsYXlUZW1wbGF0ZVwiXG4gIFt0aHlTaG93U2VhcmNoXT1cInRoeVNob3dTZWFyY2hcIlxuICBbdGh5RGlzYWJsZWRdPVwidGh5RGlzYWJsZVwiXG4gICh0aHlPbkJsdXIpPVwib25CbHVyKCRldmVudClcIlxuICAodGh5T25DbGVhcik9XCJjbGVhclNlbGVjdGVkVmFsdWUoJGV2ZW50KVwiXG4gICh0aHlPblJlbW92ZSk9XCJyZW1vdmVNdWx0aXBsZVNlbGVjdGVkTm9kZSgkZXZlbnQpXCJcbiAgKHRoeU9uU2VhcmNoKT1cInNlYXJjaFZhbHVlKCRldmVudClcIj5cbiAgPG5nLXRlbXBsYXRlICNjdXN0b21EaXNwbGF5VGVtcGxhdGUgbGV0LW5vZGU+XG4gICAgQGlmICh0aHlUcmVlU2VsZWN0VHJpZ2dlckRpc3BsYXlSZWYpIHtcbiAgICAgIDxuZy10ZW1wbGF0ZSBbbmdUZW1wbGF0ZU91dGxldF09XCJ0aHlUcmVlU2VsZWN0VHJpZ2dlckRpc3BsYXlSZWZcIiBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwieyAkaW1wbGljaXQ6IG5vZGUgfVwiPjwvbmctdGVtcGxhdGU+XG4gICAgfSBAZWxzZSB7XG4gICAgICB7eyBub2RlW3RoeVNob3dLZXldIH19XG4gICAgfVxuICA8L25nLXRlbXBsYXRlPlxuPC9kaXY+XG5cbjxuZy10ZW1wbGF0ZVxuICBjZGtDb25uZWN0ZWRPdmVybGF5XG4gIFtjZGtDb25uZWN0ZWRPdmVybGF5SGFzQmFja2Ryb3BdPVwiZmFsc2VcIlxuICBbY2RrQ29ubmVjdGVkT3ZlcmxheU9yaWdpbl09XCJvcmlnaW5cIlxuICBbY2RrQ29ubmVjdGVkT3ZlcmxheU1pbldpZHRoXT1cImNka0Nvbm5lY3RPdmVybGF5V2lkdGhcIlxuICBbY2RrQ29ubmVjdGVkT3ZlcmxheUZsZXhpYmxlRGltZW5zaW9uc109XCJ0cnVlXCJcbiAgW2Nka0Nvbm5lY3RlZE92ZXJsYXlPcGVuXT1cImV4cGFuZFRyZWVTZWxlY3RPcHRpb25zXCJcbiAgY2RrQ29ubmVjdGVkT3ZlcmxheVRyYW5zZm9ybU9yaWdpbk9uPVwiLnRoeS10cmVlLXNlbGVjdC1kcm9wZG93blwiXG4gIFtjZGtDb25uZWN0ZWRPdmVybGF5UG9zaXRpb25zXT1cImV4cGFuZGVkRHJvcGRvd25Qb3NpdGlvbnNcIlxuICAoZGV0YWNoKT1cImNsb3NlKClcIj5cbiAgPHRoeS10cmVlLXNlbGVjdC1ub2Rlc1xuICAgIHRoeVN0b3BQcm9wYWdhdGlvblxuICAgIFt0aHlWaXJ0dWFsU2Nyb2xsXT1cInRoeVZpcnR1YWxTY3JvbGxcIlxuICAgIFt0cmVlTm9kZXNdPVwidGh5VmlydHVhbFNjcm9sbCA/IHZpcnR1YWxUcmVlTm9kZXMgOiB0cmVlTm9kZXNcIlxuICAgIFtAc2NhbGVZTW90aW9uXT1cIidlbnRlcidcIj5cbiAgPC90aHktdHJlZS1zZWxlY3Qtbm9kZXM+XG48L25nLXRlbXBsYXRlPlxuIiwiQGlmIChub2RlTGlzdD8ubGVuZ3RoID4gMCkge1xuICA8ZGl2IGNsYXNzPVwidGh5LXRyZWUtc2VsZWN0LW9wdGlvbnNcIj5cbiAgICA8ZGl2IGNsYXNzPVwidGh5LXRyZWUtc2VsZWN0LW5vZGVcIj5cbiAgICAgIEBpZiAoIXRoeVZpcnR1YWxTY3JvbGwpIHtcbiAgICAgICAgQGZvciAobm9kZSBvZiBub2RlTGlzdDsgdHJhY2sgJGluZGV4KSB7XG4gICAgICAgICAgPG5nLWNvbnRhaW5lciBbbmdUZW1wbGF0ZU91dGxldF09XCJ0cmVlU2VsZWN0Tm9kZVwiIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7ICRpbXBsaWNpdDogbm9kZSB9XCI+PC9uZy1jb250YWluZXI+XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIEBpZiAodGh5VmlydHVhbFNjcm9sbCkge1xuICAgICAgICA8Y2RrLXZpcnR1YWwtc2Nyb2xsLXZpZXdwb3J0ICN2aWV3cG9ydCBbaXRlbVNpemVdPVwiZGVmYXVsdEl0ZW1TaXplXCIgW3N0eWxlLmhlaWdodF09XCJ0aHlWaXJ0dWFsSGVpZ2h0XCI+XG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqY2RrVmlydHVhbEZvcj1cImxldCBub2RlIG9mIG5vZGVMaXN0OyB0cmFja0J5OiB0YWJUcmFja0J5XCI+XG4gICAgICAgICAgICA8bmctdGVtcGxhdGUgW25nVGVtcGxhdGVPdXRsZXRdPVwidHJlZVNlbGVjdE5vZGVcIiBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwieyAkaW1wbGljaXQ6IG5vZGUgfVwiPjwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDwvY2RrLXZpcnR1YWwtc2Nyb2xsLXZpZXdwb3J0PlxuICAgICAgfVxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbn0gQGVsc2Uge1xuICA8dGh5LWVtcHR5IGNsYXNzPVwidGh5LXNlbGVjdC1lbXB0eS1jb250ZW50XCIgdGh5U2l6ZT1cInNtXCIgW3RoeU1lc3NhZ2VdPVwicGFyZW50LnRoeUVtcHR5T3B0aW9uc1RleHRcIj48L3RoeS1lbXB0eT5cbn1cblxuPG5nLXRlbXBsYXRlICN0cmVlU2VsZWN0Tm9kZSBsZXQtbm9kZT5cbiAgPG5nLWNvbnRhaW5lcj5cbiAgICBAaWYgKCF0cmVlTm9kZUlzSGlkZGVuKG5vZGUpKSB7XG4gICAgICA8YVxuICAgICAgICBjbGFzcz1cInRoeS1vcHRpb24taXRlbVwiXG4gICAgICAgIFtuZ0NsYXNzXT1cInsgYWN0aXZlOiB0cmVlTm9kZUlzU2VsZWN0ZWQobm9kZSksICdwbC0wJzogaGFzTm9kZUNoaWxkcmVuIH1cIlxuICAgICAgICBbY2xhc3MuZGlzYWJsZWRdPVwidHJlZU5vZGVJc0Rpc2FibGUobm9kZSlcIlxuICAgICAgICBbbmdTdHlsZV09XCJ7ICdwYWRkaW5nLWxlZnQucHgnOiAyMCAqIG5vZGUubGV2ZWwgKyBwYXJlbnQuaWNvbnMuZ2FwIH1cIlxuICAgICAgICAoY2xpY2spPVwic2VsZWN0VHJlZU5vZGUoJGV2ZW50LCBub2RlKVwiPlxuICAgICAgICA8c3BhblxuICAgICAgICAgIGNsYXNzPVwidGh5LXRyZWUtc2VsZWN0LW9wdGlvbi1pY29uXCJcbiAgICAgICAgICBbY2xhc3MuaW52aXNpYmxlXT1cIiEobm9kZS5jaGlsZHJlbj8ubGVuZ3RoID4gMCB8fCAobm9kZVtjaGlsZENvdW50S2V5XSAmJiBub2RlW2NoaWxkQ291bnRLZXldID4gMCkpXCJcbiAgICAgICAgICAoY2xpY2spPVwibm9kZUV4cGFuZFRvZ2dsZSgkZXZlbnQsIG5vZGUpXCI+XG4gICAgICAgICAgPHRoeS1pY29uXG4gICAgICAgICAgICBjbGFzcz1cIm5vZGUtZXhwYW5kLWljb25cIlxuICAgICAgICAgICAgW3RoeUljb25OYW1lXT1cInRyZWVOb2RlSXNFeHBhbmQobm9kZSkgPyBwYXJlbnQuaWNvbnMuZXhwYW5kIDogcGFyZW50Lmljb25zLmNvbGxhcHNlXCI+PC90aHktaWNvbj5cbiAgICAgICAgPC9zcGFuPlxuICAgICAgICA8c3BhbiBjbGFzcz1cInRoeS10cmVlLXNlbGVjdC1vcHRpb24tdGV4dFwiIFtuZ0NsYXNzXT1cInsgJ21sLTEnOiBoYXNOb2RlQ2hpbGRyZW4gfVwiPlxuICAgICAgICAgIEBpZiAodHJlZU5vZGVUZW1wbGF0ZVJlZikge1xuICAgICAgICAgICAgPG5nLXRlbXBsYXRlIFtuZ1RlbXBsYXRlT3V0bGV0XT1cInRyZWVOb2RlVGVtcGxhdGVSZWZcIiBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwieyAkaW1wbGljaXQ6IG5vZGUgfVwiPjwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgfSBAZWxzZSB7XG4gICAgICAgICAgICA8c3BhbiB0aHlGbGV4aWJsZVRleHQgW3RoeVRvb2x0aXBDb250ZW50XT1cIm5vZGVbc2hvd0tleV1cIj57eyBub2RlW3Nob3dLZXldIH19PC9zcGFuPlxuICAgICAgICAgIH1cbiAgICAgICAgPC9zcGFuPlxuICAgICAgICBAaWYgKGlzTXVsdGlwbGUpIHtcbiAgICAgICAgICA8dGh5LWljb24gY2xhc3M9XCJjaGVja2VkLWljb25cIiB0aHlJY29uTmFtZT1cImNoZWNrXCI+PC90aHktaWNvbj5cbiAgICAgICAgfVxuICAgICAgPC9hPlxuICAgIH1cbiAgICBAaWYgKCF0aHlWaXJ0dWFsU2Nyb2xsICYmIHRyZWVOb2RlSXNFeHBhbmQobm9kZSkgJiYgbm9kZS5jaGlsZHJlbj8ubGVuZ3RoID4gMCkge1xuICAgICAgQGZvciAobm9kZSBvZiBub2RlLmNoaWxkcmVuOyB0cmFjayAkaW5kZXgpIHtcbiAgICAgICAgPG5nLWNvbnRhaW5lciBbbmdUZW1wbGF0ZU91dGxldF09XCJ0cmVlU2VsZWN0Tm9kZVwiIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7ICRpbXBsaWNpdDogbm9kZSB9XCI+IDwvbmctY29udGFpbmVyPlxuICAgICAgfVxuICAgIH1cbiAgPC9uZy1jb250YWluZXI+XG48L25nLXRlbXBsYXRlPlxuIl19
|
|
653
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJlZS1zZWxlY3QuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL3RyZWUtc2VsZWN0L3RyZWUtc2VsZWN0LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uL3NyYy90cmVlLXNlbGVjdC90cmVlLXNlbGVjdC5jb21wb25lbnQuaHRtbCIsIi4uLy4uLy4uLy4uL3NyYy90cmVlLXNlbGVjdC90cmVlLXNlbGVjdC1ub2Rlcy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0gsMkJBQTJCLEVBQzNCLG9CQUFvQixFQUNwQixZQUFZLEVBQ1oseUNBQXlDLEVBQ3pDLGtCQUFrQixFQUNyQixNQUFNLGlCQUFpQixDQUFDO0FBQ3pCLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUM1QyxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDM0QsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQzFDLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSwyQkFBMkIsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBRWxGLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxtQkFBbUIsRUFBRSxPQUFPLEVBQUUsUUFBUSxFQUFFLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMxSCxPQUFPLEVBQWMsRUFBRSxFQUFFLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUMvQyxPQUFPLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRWpELE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxnQkFBZ0IsRUFBRSxhQUFhLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUM1RixPQUFPLEVBQUUseUJBQXlCLEVBQUUsZUFBZSxFQUFFLHdCQUF3QixFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDOUcsT0FBTyxF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cUIsS0FBSztzQkFBMUIsV0FBVzt1QkFBQyxPQUFPO2dCQUlQLFNBQVM7c0JBQXJCLEtBQUs7Z0JBVUcsZ0JBQWdCO3NCQUF4QixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgICBFWFBBTkRFRF9EUk9QRE9XTl9QT1NJVElPTlMsXG4gICAgaW5qZWN0UGFuZWxFbXB0eUljb24sXG4gICAgc2NhbGVZTW90aW9uLFxuICAgIFRhYkluZGV4RGlzYWJsZWRDb250cm9sVmFsdWVBY2Nlc3Nvck1peGluLFxuICAgIFRoeUNsaWNrRGlzcGF0Y2hlclxufSBmcm9tICduZ3gtdGV0aHlzL2NvcmUnO1xuaW1wb3J0IHsgVGh5RW1wdHkgfSBmcm9tICduZ3gtdGV0aHlzL2VtcHR5JztcbmltcG9ydCB7IFRoeUZsZXhpYmxlVGV4dCB9IGZyb20gJ25neC10ZXRoeXMvZmxleGlibGUtdGV4dCc7XG5pbXBvcnQgeyBUaHlJY29uIH0gZnJvbSAnbmd4LXRldGh5cy9pY29uJztcbmltcG9ydCB7IFRoeVNlbGVjdENvbnRyb2wsIFRoeVN0b3BQcm9wYWdhdGlvbkRpcmVjdGl2ZSB9IGZyb20gJ25neC10ZXRoeXMvc2hhcmVkJztcbmltcG9ydCB7IFRoeVRyZWVOb2RlIH0gZnJvbSAnbmd4LXRldGh5cy90cmVlJztcbmltcG9ydCB7IGNvZXJjZUJvb2xlYW5Qcm9wZXJ0eSwgZWxlbWVudE1hdGNoQ2xvc2VzdCwgaXNBcnJheSwgaXNPYmplY3QsIHByb2R1Y2UsIHdhcm5EZXByZWNhdGlvbiB9IGZyb20gJ25neC10ZXRoeXMvdXRpbCc7XG5pbXBvcnQgeyBPYnNlcnZhYmxlLCBvZiwgU3ViamVjdCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgdGFrZSwgdGFrZVVudGlsIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuXG5pbXBvcnQgeyBDZGtDb25uZWN0ZWRPdmVybGF5LCBDZGtPdmVybGF5T3JpZ2luLCBWaWV3cG9ydFJ1bGVyIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL292ZXJsYXknO1xuaW1wb3J0IHsgQ2RrRml4ZWRTaXplVmlydHVhbFNjcm9sbCwgQ2RrVmlydHVhbEZvck9mLCBDZGtWaXJ0dWFsU2Nyb2xsVmlld3BvcnQgfSBmcm9tICdAYW5ndWxhci9jZGsvc2Nyb2xsaW5nJztcbmltcG9ydCB7IGlzUGxhdGZvcm1Ccm93c2VyLCBOZ0NsYXNzLCBOZ1N0eWxlLCBOZ1RlbXBsYXRlT3V0bGV0IH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7XG4gICAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgQ29tcG9uZW50LFxuICAgIENvbnRlbnRDaGlsZCxcbiAgICBFbGVtZW50UmVmLFxuICAgIEV2ZW50RW1pdHRlcixcbiAgICBmb3J3YXJkUmVmLFxuICAgIEhvc3RCaW5kaW5nLFxuICAgIElucHV0LFxuICAgIE5nWm9uZSxcbiAgICBPbkRlc3Ryb3ksXG4gICAgT25Jbml0LFxuICAgIE91dHB1dCxcbiAgICBQTEFURk9STV9JRCxcbiAgICBUZW1wbGF0ZVJlZixcbiAgICBWaWV3Q2hpbGQsXG4gICAgaW5qZWN0LFxuICAgIFNpZ25hbFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENvbnRyb2xWYWx1ZUFjY2Vzc29yLCBOR19WQUxVRV9BQ0NFU1NPUiB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcblxuaW1wb3J0IHsgVGh5VHJlZVNlbGVjdE5vZGUsIFRoeVRyZWVTZWxlY3RUeXBlIH0gZnJvbSAnLi90cmVlLXNlbGVjdC5jbGFzcyc7XG5pbXBvcnQgeyBpbmplY3RMb2NhbGUsIFRoeVRyZWVTZWxlY3RMb2NhbGUgfSBmcm9tICduZ3gtdGV0aHlzL2kxOG4nO1xuXG50eXBlIElucHV0U2l6ZSA9ICd4cycgfCAnc20nIHwgJ21kJyB8ICdsZycgfCAnJztcblxuZXhwb3J0IGZ1bmN0aW9uIGZpbHRlclRyZWVEYXRhKHRyZWVOb2RlczogVGh5VHJlZVNlbGVjdE5vZGVbXSwgc2VhcmNoVGV4dDogc3RyaW5nLCBzZWFyY2hLZXk6IHN0cmluZyA9ICduYW1lJykge1xuICAgIGNvbnN0IGZpbHRlck5vZGVzID0gKG5vZGU6IFRoeVRyZWVTZWxlY3ROb2RlLCByZXN1bHQ6IFRoeVRyZWVTZWxlY3ROb2RlW10pID0+IHtcbiAgICAgICAgaWYgKG5vZGVbc2VhcmNoS2V5XSAmJiBub2RlW3NlYXJjaEtleV0uaW5kZXhPZihzZWFyY2hUZXh0KSAhPT0gLTEpIHtcbiAgICAgICAgICAgIHJlc3VsdC5wdXNoKG5vZGUpO1xuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgfVxuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShub2RlLmNoaWxkcmVuKSkge1xuICAgICAgICAgICAgY29uc3Qgbm9kZXMgPSBub2RlLmNoaWxkcmVuLnJlZHVjZSgocHJldmlvdXMsIGN1cnJlbnQpID0+IGZpbHRlck5vZGVzKGN1cnJlbnQsIHByZXZpb3VzKSwgW10gYXMgVGh5VHJlZVNlbGVjdE5vZGVbXSk7XG4gICAgICAgICAgICBpZiAobm9kZXMubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgcGFyZW50Tm9kZSA9IHsgLi4ubm9kZSwgY2hpbGRyZW46IG5vZGVzLCBleHBhbmQ6IHRydWUgfTtcbiAgICAgICAgICAgICAgICByZXN1bHQucHVzaChwYXJlbnROb2RlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH07XG4gICAgY29uc3QgdHJlZURhdGEgPSB0cmVlTm9kZXMucmVkdWNlKChwcmV2aW91cywgY3VycmVudCkgPT4gZmlsdGVyTm9kZXMoY3VycmVudCwgcHJldmlvdXMpLCBbXSBhcyBUaHlUcmVlU2VsZWN0Tm9kZVtdKTtcbiAgICByZXR1cm4gdHJlZURhdGE7XG59XG5cbi8qKlxuICog5qCR6YCJ5oup57uE5Lu2XG4gKiBAbmFtZSB0aHktdHJlZS1zZWxlY3RcbiAqIEBvcmRlciAxMFxuICovXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ3RoeS10cmVlLXNlbGVjdCcsXG4gICAgdGVtcGxhdGVVcmw6ICcuL3RyZWUtc2VsZWN0LmNvbXBvbmVudC5odG1sJyxcbiAgICBwcm92aWRlcnM6IFtcbiAgICAgICAge1xuICAgICAgICAgICAgcHJvdmlkZTogTkdfVkFMVUVfQUNDRVNTT1IsXG4gICAgICAgICAgICB1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBUaHlUcmVlU2VsZWN0KSxcbiAgICAgICAgICAgIG11bHRpOiB0cnVlXG4gICAgICAgIH1cbiAgICBdLFxuICAgIHN0YW5kYWxvbmU6IHRydWUsXG4gICAgaW1wb3J0czogW1xuICAgICAgICBDZGtPdmVybGF5T3JpZ2luLFxuICAgICAgICBUaHlTZWxlY3RDb250cm9sLFxuICAgICAgICBOZ1RlbXBsYXRlT3V0bGV0LFxuICAgICAgICBDZGtDb25uZWN0ZWRPdmVybGF5LFxuICAgICAgICBmb3J3YXJkUmVmKCgpID0+IFRoeVRyZWVTZWxlY3ROb2RlcyksXG4gICAgICAgIFRoeVN0b3BQcm9wYWdhdGlvbkRpcmVjdGl2ZVxuICAgIF0sXG4gICAgaG9zdDoge1xuICAgICAgICAnW2F0dHIudGFiaW5kZXhdJzogJ3RhYkluZGV4JyxcbiAgICAgICAgJyhmb2N1cyknOiAnb25Gb2N1cygkZXZlbnQpJyxcbiAgICAgICAgJyhibHVyKSc6ICdvbkJsdXIoJGV2ZW50KSdcbiAgICB9LFxuICAgIGFuaW1hdGlvbnM6IFtzY2FsZVlNb3Rpb25dXG59KVxuZXhwb3J0IGNsYXNzIFRoeVRyZWVTZWxlY3QgZXh0ZW5kcyBUYWJJbmRleERpc2FibGVkQ29udHJvbFZhbHVlQWNjZXNzb3JNaXhpbiBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95LCBDb250cm9sVmFsdWVBY2Nlc3NvciB7XG4gICAgZWxlbWVudFJlZiA9IGluamVjdChFbGVtZW50UmVmKTtcbiAgICBwcml2YXRlIG5nWm9uZSA9IGluamVjdChOZ1pvbmUpO1xuICAgIHByaXZhdGUgcmVmID0gaW5qZWN0KENoYW5nZURldGVjdG9yUmVmKTtcbiAgICBwcml2YXRlIHBsYXRmb3JtSWQgPSBpbmplY3QoUExBVEZPUk1fSUQpO1xuICAgIHByaXZhdGUgdGh5Q2xpY2tEaXNwYXRjaGVyID0gaW5qZWN0KFRoeUNsaWNrRGlzcGF0Y2hlcik7XG4gICAgcHJpdmF0ZSB2aWV3cG9ydFJ1bGVyID0gaW5qZWN0KFZpZXdwb3J0UnVsZXIpO1xuXG4gICAgQEhvc3RCaW5kaW5nKCdjbGFzcy50aHktc2VsZWN0LWN1c3RvbScpIHRyZWVTZWxlY3RDbGFzcyA9IHRydWU7XG5cbiAgICBASG9zdEJpbmRpbmcoJ2NsYXNzLnRoeS1zZWxlY3QnKSBpc1RyZWVTZWxlY3QgPSB0cnVlO1xuXG4gICAgLy8g6I+c5Y2V5piv5ZCm5bGV5byAXG4gICAgQEhvc3RCaW5kaW5nKCdjbGFzcy5tZW51LWlzLW9wZW5lZCcpIGV4cGFuZFRyZWVTZWxlY3RPcHRpb25zID0gZmFsc2U7XG5cbiAgICBASG9zdEJpbmRpbmcoJ2NsYXNzLnRoeS1zZWxlY3QtY3VzdG9tLS1tdWx0aXBsZScpIGlzTXVsdGkgPSBmYWxzZTtcblxuICAgIHB1YmxpYyB0cmVlTm9kZXM6IFRoeVRyZWVTZWxlY3ROb2RlW107XG5cbiAgICBwdWJsaWMgc2VsZWN0ZWRWYWx1ZTogYW55O1xuXG4gICAgcHVibGljIHNlbGVjdGVkTm9kZTogVGh5VHJlZVNlbGVjdE5vZGU7XG5cbiAgICBwdWJsaWMgc2VsZWN0ZWROb2RlczogVGh5VHJlZVNlbGVjdE5vZGVbXSA9IFtdO1xuXG4gICAgcHVibGljIGZsYXR0ZW5UcmVlTm9kZXM6IFRoeVRyZWVTZWxlY3ROb2RlW10gPSBbXTtcblxuICAgIHZpcnR1YWxUcmVlTm9kZXM6IFRoeVRyZWVTZWxlY3ROb2RlW10gPSBbXTtcblxuICAgIHB1YmxpYyBjZGtDb25uZWN0T3ZlcmxheVdpZHRoID0gMDtcblxuICAgIHB1YmxpYyBleHBhbmRlZERyb3Bkb3duUG9zaXRpb25zID0gRVhQQU5ERURfRFJPUERPV05fUE9TSVRJT05TO1xuXG4gICAgcHVibGljIGljb25zOiB7IGV4cGFuZDogc3RyaW5nOyBjb2xsYXBzZTogc3RyaW5nOyBnYXA/OiBudW1iZXIgfSA9IHtcbiAgICAgICAgZXhwYW5kOiAnYW5nbGUtZG93bicsXG4gICAgICAgIGNvbGxhcHNlOiAnYW5nbGUtcmlnaHQnLFxuICAgICAgICBnYXA6IDE1XG4gICAgfTtcblxuICAgIHByaXZhdGUgaW5pdGlhbGxlZCA9IGZhbHNlO1xuXG4gICAgcHJpdmF0ZSBkZXN0cm95JCA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG5cbiAgICBwcml2YXRlIGxvY2FsZTogU2lnbmFsPFRoeVRyZWVTZWxlY3RMb2NhbGU+ID0gaW5qZWN0TG9jYWxlKCd0cmVlU2VsZWN0Jyk7XG5cbiAgICBwdWJsaWMgdmFsdWVJc09iamVjdCA9IGZhbHNlO1xuXG4gICAgb3JpZ2luVHJlZU5vZGVzOiBUaHlUcmVlU2VsZWN0Tm9kZVtdO1xuXG4gICAgQENvbnRlbnRDaGlsZCgndGh5VHJlZVNlbGVjdFRyaWdnZXJEaXNwbGF5JylcbiAgICB0aHlUcmVlU2VsZWN0VHJpZ2dlckRpc3BsYXlSZWY6IFRlbXBsYXRlUmVmPGFueT47XG5cbiAgICBAQ29udGVudENoaWxkKCd0cmVlTm9kZVRlbXBsYXRlJylcbiAgICB0cmVlTm9kZVRlbXBsYXRlUmVmOiBUZW1wbGF0ZVJlZjxhbnk+O1xuXG4gICAgQFZpZXdDaGlsZChDZGtPdmVybGF5T3JpZ2luLCB7IHN0YXRpYzogdHJ1ZSB9KSBjZGtPdmVybGF5T3JpZ2luOiBDZGtPdmVybGF5T3JpZ2luO1xuXG4gICAgQFZpZXdDaGlsZChDZGtDb25uZWN0ZWRPdmVybGF5LCB7IHN0YXRpYzogdHJ1ZSB9KSBjZGtDb25uZWN0ZWRPdmVybGF5OiBDZGtDb25uZWN0ZWRPdmVybGF5O1xuXG4gICAgQFZpZXdDaGlsZCgnY3VzdG9tRGlzcGxheVRlbXBsYXRlJywgeyBzdGF0aWM6IHRydWUgfSkgY3VzdG9tRGlzcGxheVRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+O1xuXG4gICAgLyoqXG4gICAgICogdHJlZU5vZGVzIOaVsOaNrlxuICAgICAqIEB0eXBlIFRoeVRyZWVTZWxlY3ROb2RlW11cbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHNldCB0aHlUcmVlTm9kZXModmFsdWU6IFRoeVRyZWVTZWxlY3ROb2RlW10pIHtcbiAgICAgICAgdGhpcy50cmVlTm9kZXMgPSB2YWx1ZTtcbiAgICAgICAgdGhpcy5vcmlnaW5UcmVlTm9kZXMgPSB2YWx1ZTtcbiAgICAgICAgaWYgKHRoaXMuaW5pdGlhbGxlZCkge1xuICAgICAgICAgICAgdGhpcy5mbGF0dGVuVHJlZU5vZGVzID0gdGhpcy5mbGF0dGVuTm9kZXModGhpcy50cmVlTm9kZXMsIHRoaXMuZmxhdHRlblRyZWVOb2RlcywgW10pO1xuICAgICAgICAgICAgdGhpcy5zZXRTZWxlY3RlZE5vZGVzKCk7XG5cbiAgICAgICAgICAgIGlmICh0aGlzLnRoeVZpcnR1YWxTY3JvbGwpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmJ1aWxkRmxhdHRlblRyZWVOb2RlcygpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog5byA5ZCv6Jma5ouf5rua5YqoXG4gICAgICovXG4gICAgQElucHV0KHsgdHJhbnNmb3JtOiBjb2VyY2VCb29sZWFuUHJvcGVydHkgfSkgdGh5VmlydHVhbFNjcm9sbDogYm9vbGVhbiA9IGZhbHNlO1xuXG4gICAgLyoqXG4gICAgICog5qCR6IqC54K555qE5ZSv5LiA5qCH6K+GXG4gICAgICogQHR5cGUgc3RyaW5nXG4gICAgICovXG4gICAgQElucHV0KCkgdGh5UHJpbWFyeUtleSA9ICdfaWQnO1xuXG4gICAgLyoqXG4gICAgICog5qCR6IqC54K555qE5pi+56S655qE5a2X5q61IGtleVxuICAgICAqIEB0eXBlIHN0cmluZ1xuICAgICAqL1xuICAgIEBJbnB1dCgpIHRoeVNob3dLZXkgPSAnbmFtZSc7XG5cbiAgICBASW5wdXQoKSB0aHlDaGlsZENvdW50S2V5ID0gJ2NoaWxkQ291bnQnO1xuXG4gICAgLyoqXG4gICAgICog5Y2V6YCJ5pe277yM5piv5ZCm5pi+56S65riF6Zmk5oyJ6ZKu77yM5b2T5Li6IHRydWUg5pe277yM5pi+56S65riF6Zmk5oyJ6ZKuXG4gICAgICogQGRlZmF1bHQgZmFsc2VcbiAgICAgKi9cbiAgICBASW5wdXQoeyB0cmFuc2Zvcm06IGNvZXJjZUJvb2xlYW5Qcm9wZXJ0eSB9KSB0aHlBbGxvd0NsZWFyOiBib29sZWFuO1xuXG4gICAgLyoqXG4gICAgICog5piv5ZCm5aSa6YCJXG4gICAgICogQHR5cGUgYm9vbGVhblxuICAgICAqL1xuICAgIEBJbnB1dCh7IHRyYW5zZm9ybTogY29lcmNlQm9vbGVhblByb3BlcnR5IH0pIHRoeU11bHRpcGxlID0gZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiDmmK/lkKbnpoHnlKjmoJHpgInmi6nlmajvvIzlvZPkuLogdHJ1ZSDnpoHnlKjmoJHpgInmi6nlmahcbiAgICAgKiBAdHlwZSBib29sZWFuXG4gICAgICovXG4gICAgQElucHV0KHsgdHJhbnNmb3JtOiBjb2VyY2VCb29sZWFuUHJvcGVydHkgfSkgdGh5RGlzYWJsZSA9IGZhbHNlO1xuXG4gICAgZ2V0IHRoeURpc2FibGVkKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy50aHlEaXNhYmxlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOagkemAieaLqeahhum7mOiupOaWh+Wtl1xuICAgICAqIEB0eXBlIHN0cmluZ1xuICAgICAqL1xuICAgIEBJbnB1dCgpIHRoeVBsYWNlaG9sZGVyID0gdGhpcy5sb2NhbGUoKS5wbGFjZWhvbGRlcjtcblxuICAgIGdldCBwbGFjZWhvbGRlcigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudGh5UGxhY2Vob2xkZXI7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog5o6n5Yi25qCR6YCJ5oup55qE6L6T5YWl5qGG5aSn5bCPXG4gICAgICogQHR5cGUgeHMgfCBzbSB8IG1kIHwgZGVmYXVsdCB8IGxnXG4gICAgICovXG4gICAgQElucHV0KCkgdGh5U2l6ZTogSW5wdXRTaXplO1xuXG4gICAgLyoqXG4gICAgICog5pS55Y+Y56m66YCJ6aG555qE5oOF5Ya15LiL55qE5o+Q56S65paH5pysXG4gICAgICogQHR5cGUgc3RyaW5nXG4gICAgICovXG4gICAgQElucHV0KCkgdGh5RW1wdHlPcHRpb25zVGV4dCA9IHRoaXMubG9jYWxlKCkuZW1wdHk7XG5cbiAgICAvKipcbiAgICAgKiDorr7nva7mmK/lkKbpmpDol4/oioLngrko5LiN5Y+v6L+b6KGM5Lu75L2V5pON5L2cKe+8jOS8mOWFiOe6p+mrmOS6jiB0aHlIaWRkZW5Ob2RlRm5cbiAgICAgKiBAdHlwZSBzdHJpbmdcbiAgICAgKi9cbiAgICBASW5wdXQoKSB0aHlIaWRkZW5Ob2RlS2V5ID0gJ2hpZGRlbic7XG5cbiAgICAvKipcbiAgICAgKiDorr7nva7mmK/lkKbnpoHnlKjoioLngrko5LiN5Y+v6L+b6KGM5Lu75L2V5pON5L2cKe+8jOS8mOWFiOe6p+mrmOS6jiB0aHlEaXNhYmxlTm9kZUZuXG4gICAgICogQHR5cGUgc3RyaW5nXG4gICAgICovXG4gICAgQElucHV0KCkgdGh5RGlzYWJsZU5vZGVLZXkgPSAnZGlzYWJsZWQnO1xuXG4gICAgLyoqXG4gICAgICog5piv5ZCm5byC5q2l5Yqg6L296IqC54K555qE5a2Q6IqC54K5KOaYvuekuuWKoOi9veeKtuaAgSnvvIzlvZPkuLogdHJ1ZSDml7bvvIzlvILmraXojrflj5ZcbiAgICAgKiBAdHlwZSBib29sZWFuXG4gICAgICovXG4gICAgQElucHV0KHsgdHJhbnNmb3JtOiBjb2VyY2VCb29sZWFuUHJvcGVydHkgfSkgdGh5QXN5bmNOb2RlID0gZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiDmmK/lkKblsZXnpLrlhajlkI1cbiAgICAgKiBAdHlwZSBib29sZWFuXG4gICAgICovXG4gICAgQElucHV0KHsgdHJhbnNmb3JtOiBjb2VyY2VCb29sZWFuUHJvcGVydHkgfSkgdGh5U2hvd1dob2xlTmFtZSA9IGZhbHNlO1xuXG4gICAgLyoqXG4gICAgICog5piv5ZCm5bGV56S65pCc57SiXG4gICAgICogQHR5cGUgYm9vbGVhblxuICAgICAqL1xuICAgIEBJbnB1dCh7IHRyYW5zZm9ybTogY29lcmNlQm9vbGVhblByb3BlcnR5IH0pIHRoeVNob3dTZWFyY2ggPSBmYWxzZTtcblxuICAgIC8qKlxuICAgICAqIOWbvuagh+exu+Wei++8jOaUr+aMgSBkZWZhdWx0IHwgZXNwZWNpYWzvvIzlt7Llup/lvINcbiAgICAgKiBAZGVwcmVjYXRlZFxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgc2V0IHRoeUljb25UeXBlKHR5cGU6IFRoeVRyZWVTZWxlY3RUeXBlKSB7XG4gICAgICAgIGlmICh0eXBlb2YgbmdEZXZNb2RlID09PSAndW5kZWZpbmVkJyB8fCBuZ0Rldk1vZGUpIHtcbiAgICAgICAgICAgIHdhcm5EZXByZWNhdGlvbignVGhpcyBwYXJhbWV0ZXIgaGFzIGJlZW4gZGVwcmVjYXRpb24nKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBpZiAodHlwZSA9PT0gJ2VzcGVjaWFsJykge1xuICAgICAgICAvLyAgICAgdGhpcy5pY29ucyA9IHsgZXhwYW5kOiAnbWludXMtc3F1YXJlJywgY29sbGFwc2U6ICdwbHVzLXNxdWFyZScsIGdhcDogMjAgfTtcbiAgICAgICAgLy8gfSBlbHNlIHtcbiAgICAgICAgLy8gICAgIHRoaXMuaWNvbnMgPSB7IGV4cGFuZDogJ2NhcmV0LXJpZ2h0LWRvd24nLCBjb2xsYXBzZTogJ2NhcmV0LXJpZ2h0JywgZ2FwOiAxNSB9O1xuICAgICAgICAvLyB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog6K6+572u5piv5ZCm6ZqQ6JeP6IqC54K5KOS4jeWPr+i/m+ihjOS7u+S9leaTjeS9nCks5LyY5YWI57qn5L2O5LqOIHRoeUhpZGRlbk5vZGVLZXnjgIJcbiAgICAgKiBAZGVmYXVsdCAobm9kZTogVGh5VHJlZVNlbGVjdE5vZGUpID0+IGJvb2xlYW4gPSAobm9kZTogVGh5VHJlZVNlbGVjdE5vZGUpID0+IG5vZGUuaGlkZGVuXG4gICAgICovXG4gICAgQElucHV0KCkgdGh5SGlkZGVuTm9kZUZuOiAobm9kZTogVGh5VHJlZVNlbGVjdE5vZGUpID0+IGJvb2xlYW4gPSAobm9kZTogVGh5VHJlZVNlbGVjdE5vZGUpID0+IG5vZGUuaGlkZGVuO1xuXG4gICAgLyoqXG4gICAgICog6K6+572u5piv5ZCm56aB55So6IqC54K5KOS4jeWPr+i/m+ihjOS7u+S9leaTjeS9nCnvvIzkvJjlhYjnuqfkvY7kuo4gdGh5RGlzYWJsZU5vZGVLZXnjgIJcbiAgICAgKiBAZGVmYXVsdCAobm9kZTogVGh5VHJlZVNlbGVjdE5vZGUpID0+IGJvb2xlYW4gPSAobm9kZTogVGh5VHJlZVNlbGVjdE5vZGUpID0+IG5vZGUuZGlzYWJsZWRcbiAgICAgKi9cbiAgICBASW5wdXQoKSB0aHlEaXNhYmxlTm9kZUZuOiAobm9kZTogVGh5VHJlZVNlbGVjdE5vZGUpID0+IGJvb2xlYW4gPSAobm9kZTogVGh5VHJlZVNlbGVjdE5vZGUpID0+IG5vZGUuZGlzYWJsZWQ7XG5cbiAgICAvKipcbiAgICAgKiDojrflj5boioLngrnnmoTlrZDoioLngrnvvIzov5Tlm54gT2JzZXJ2YWJsZTxUaHlUcmVlU2VsZWN0Tm9kZT7jgIJcbiAgICAgKiBAZGVmYXVsdCAobm9kZTogVGh5VHJlZVNlbGVjdE5vZGUpID0+IE9ic2VydmFibGU8VGh5VHJlZVNlbGVjdE5vZGU+ID0gKG5vZGU6IFRoeVRyZWVTZWxlY3ROb2RlKSA9PiBvZihbXSlcbiAgICAgKi9cbiAgICBASW5wdXQoKSB0aHlHZXROb2RlQ2hpbGRyZW46IChub2RlOiBUaHlUcmVlU2VsZWN0Tm9kZSkgPT4gT2JzZXJ2YWJsZTxUaHlUcmVlU2VsZWN0Tm9kZT4gPSAobm9kZTogVGh5VHJlZVNlbGVjdE5vZGUpID0+IG9mKFtdKTtcblxuICAgIC8qKlxuICAgICAqIOagkemAieaLqee7hOS7tuWxleW8gOWSjOaKmOWPoOeKtuaAgeS6i+S7tlxuICAgICAqL1xuICAgIEBPdXRwdXQoKSB0aHlFeHBhbmRTdGF0dXNDaGFuZ2U6IEV2ZW50RW1pdHRlcjxib29sZWFuPiA9IG5ldyBFdmVudEVtaXR0ZXI8Ym9vbGVhbj4oKTtcblxuICAgIHByaXZhdGUgX2dldE5nTW9kZWxUeXBlKCkge1xuICAgICAgICBpZiAodGhpcy50aHlNdWx0aXBsZSkge1xuICAgICAgICAgICAgdGhpcy52YWx1ZUlzT2JqZWN0ID0gIXRoaXMuc2VsZWN0ZWRWYWx1ZVswXSB8fCBpc09iamVjdCh0aGlzLnNlbGVjdGVkVmFsdWVbMF0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy52YWx1ZUlzT2JqZWN0ID0gaXNPYmplY3QodGhpcy5zZWxlY3RlZFZhbHVlKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBidWlsZEZsYXR0ZW5UcmVlTm9kZXMoKSB7XG4gICAgICAgIHRoaXMudmlydHVhbFRyZWVOb2RlcyA9IHRoaXMuZ2V0RmxhdHRlblRyZWVOb2Rlcyh0aGlzLnRyZWVOb2Rlcyk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRGbGF0dGVuVHJlZU5vZGVzKHJvb3RUcmVlczogVGh5VHJlZVNlbGVjdE5vZGVbXSA9IHRoaXMudHJlZU5vZGVzKSB7XG4gICAgICAgIGNvbnN0IGZvckVhY2hUcmVlID0gKHRyZWU6IFRoeVRyZWVTZWxlY3ROb2RlW10sIGZuOiBhbnksIHJlc3VsdDogVGh5VHJlZVNlbGVjdE5vZGVbXSA9IFtdKSA9PiB7XG4gICAgICAgICAgICB0cmVlLmZvckVhY2goaXRlbSA9PiB7XG4gICAgICAgICAgICAgICAgcmVzdWx0LnB1c2goaXRlbSk7XG4gICAgICAgICAgICAgICAgaWYgKGl0ZW0uY2hpbGRyZW4gJiYgZm4oaXRlbSkpIHtcbiAgICAgICAgICAgICAgICAgICAgZm9yRWFjaFRyZWUoaXRlbS5jaGlsZHJlbiwgZm4sIHJlc3VsdCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICB9O1xuICAgICAgICByZXR1cm4gZm9yRWFjaFRyZWUocm9vdFRyZWVzLCAobm9kZTogVGh5VHJlZVNlbGVjdE5vZGUpID0+ICEhbm9kZS5leHBhbmQpO1xuICAgIH1cblxuICAgIHdyaXRlVmFsdWUodmFsdWU6IGFueSk6IHZvaWQge1xuICAgICAgICB0aGlzLnNlbGVjdGVkVmFsdWUgPSB2YWx1ZTtcblxuICAgICAgICBpZiAodmFsdWUpIHtcbiAgICAgICAgICAgIHRoaXMuX2dldE5nTW9kZWxUeXBlKCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5zZXRTZWxlY3RlZE5vZGVzKCk7XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHN1cGVyKCk7XG4gICAgfVxuXG4gICAgbmdPbkluaXQoKSB7XG4gICAgICAgIHRoaXMuaXNNdWx0aSA9IHRoaXMudGh5TXVsdGlwbGU7XG4gICAgICAgIHRoaXMuZmxhdHRlblRyZWVOb2RlcyA9IHRoaXMuZmxhdHRlbk5vZGVzKHRoaXMudHJlZU5vZGVzLCB0aGlzLmZsYXR0ZW5UcmVlTm9kZXMsIFtdKTtcbiAgICAgICAgdGhpcy5zZXRTZWxlY3RlZE5vZGVzKCk7XG4gICAgICAgIHRoaXMuaW5pdGlhbGxlZCA9IHRydWU7XG5cbiAgICAgICAgaWYgKHRoaXMudGh5VmlydHVhbFNjcm9sbCkge1xuICAgICAgICAgICAgdGhpcy5idWlsZEZsYXR0ZW5UcmVlTm9kZXMoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChpc1BsYXRmb3JtQnJvd3Nlcih0aGlzLnBsYXRmb3JtSWQpKSB7XG4gICAgICAgICAgICB0aGlzLnRoeUNsaWNrRGlzcGF0Y2hlclxuICAgICAgICAgICAgICAgIC5jbGlja2VkKDApXG4gICAgICAgICAgICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKVxuICAgICAgICAgICAgICAgIC5zdWJzY3JpYmUoZXZlbnQgPT4ge1xuICAgICAgICAgICAgICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCF0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5jb250YWlucyhldmVudC50YXJnZXQpICYmIHRoaXMuZXhwYW5kVHJlZVNlbGVjdE9wdGlvbnMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubmdab25lLnJ1bigoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jbG9zZSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucmVmLm1hcmtGb3JDaGVjaygpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnZpZXdwb3J0UnVsZXJcbiAgICAgICAgICAgIC5jaGFuZ2UoKVxuICAgICAgICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKVxuICAgICAgICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5pbml0KCk7XG4gICAgICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBvbkZvY3VzKCRldmVudDogRm9jdXNFdmVudCkge1xuICAgICAgICBjb25zdCBpbnB1dEVsZW1lbnQ6IEhUTUxJbnB1dEVsZW1lbnQgPSB0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yKCdpbnB1dCcpO1xuICAgICAgICBpbnB1dEVsZW1lbnQ/LmZvY3VzKCk7XG4gICAgfVxuXG4gICAgb25CbHVyKCRldmVudDogRm9jdXNFdmVudCkge1xuICAgICAgICAvLyAxLiBUYWIg6IGa54Sm5ZCO6Ieq5Yqo6IGa54Sm5YiwIGlucHV0IOi+k+WFpeahhu+8jOatpOWIhuaUr+S4i+ebtOaOpei/lOWbnu+8jOaXoOmcgOinpuWPkSBvblRvdWNoZWRGblxuICAgICAgICAvLyAyLiDmiZPlvIDpgInmi6nmoYblkI7lpoLmnpzngrnlh7vlvLnmoYblhoXlr7zoh7QgaW5wdXQg5aSx54Sm77yM5peg6ZyA6Kem5Y+RIG9uVG91Y2hlZEZuXG4gICAgICAgIGlmIChlbGVtZW50TWF0Y2hDbG9zZXN0KCRldmVudD8ucmVsYXRlZFRhcmdldCBhcyBIVE1MRWxlbWVudCwgWyd0aHktdHJlZS1zZWxlY3QnLCAndGh5LXRyZWUtc2VsZWN0LW5vZGVzJ10pKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5vblRvdWNoZWRGbigpO1xuICAgIH1cblxuICAgIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgICAgICB0aGlzLmRlc3Ryb3kkLm5leHQoKTtcbiAgICB9XG5cbiAgICBnZXQgc2VsZWN0ZWRWYWx1ZU9iamVjdCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudGh5TXVsdGlwbGUgPyB0aGlzLnNlbGVjdGVkTm9kZXMgOiB0aGlzLnNlbGVjdGVkTm9kZTtcbiAgICB9XG5cbiAgICBzZWFyY2hWYWx1ZShzZWFyY2hUZXh0OiBzdHJpbmcpIHtcbiAgICAgICAgdGhpcy50cmVlTm9kZXMgPSBmaWx0ZXJUcmVlRGF0YSh0aGlzLm9yaWdpblRyZWVOb2Rlcywgc2VhcmNoVGV4dC50cmltKCksIHRoaXMudGh5U2hvd0tleSk7XG4gICAgfVxuXG4gICAgcHVibGljIHNldFBvc2l0aW9uKCkge1xuICAgICAgICB0aGlzLm5nWm9uZS5vblN0YWJsZVxuICAgICAgICAgICAgLmFzT2JzZXJ2YWJsZSgpXG4gICAgICAgICAgICAucGlwZSh0YWtlKDEpKVxuICAgICAgICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5jZGtDb25uZWN0ZWRPdmVybGF5Lm92ZXJsYXlSZWYudXBkYXRlUG9zaXRpb24oKTtcbiAgICAgICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgaW5pdCgpIHtcbiAgICAgICAgdGhpcy5jZGtDb25uZWN0T3ZlcmxheVdpZHRoID0gdGhpcy5jZGtPdmVybGF5T3JpZ2luLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS53aWR0aDtcbiAgICB9XG5cbiAgICBwcml2YXRlIGZsYXR0ZW5Ob2RlcyhcbiAgICAgICAgbm9kZXM6IFRoeVRyZWVTZWxlY3ROb2RlW10gPSBbXSxcbiAgICAgICAgcmVzdWx0Tm9kZXM6IFRoeVRyZWVTZWxlY3ROb2RlW10gPSBbXSxcbiAgICAgICAgcGFyZW50UHJpbWFyeVZhbHVlOiBzdHJpbmdbXSA9IFtdXG4gICAgKTogVGh5VHJlZVNlbGVjdE5vZGVbXSB7XG4gICAgICAgIHJlc3VsdE5vZGVzID0gcmVzdWx0Tm9kZXMuY29uY2F0KG5vZGVzKTtcbiAgICAgICAgbGV0IG5vZGVzTGVhZnM6IFRoeVRyZWVTZWxlY3ROb2RlW10gPSBbXTtcbiAgICAgICAgKG5vZGVzIHx8IFtdKS5mb3JFYWNoKGl0ZW0gPT4ge1xuICAgICAgICAgICAgaXRlbS5wYXJlbnRWYWx1ZXMgPSBwYXJlbnRQcmltYXJ5VmFsdWU7XG4gICAgICAgICAgICBpdGVtLmxldmVsID0gaXRlbS5wYXJlbnRWYWx1ZXMubGVuZ3RoO1xuICAgICAgICAgICAgaWYgKGl0ZW0uY2hpbGRyZW4gJiYgaXNBcnJheShpdGVtLmNoaWxkcmVuKSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IG5vZGVMZWFmcyA9IHRoaXMuZmxhdHRlbk5vZGVzKGl0ZW0uY2hpbGRyZW4sIHJlc3VsdE5vZGVzLCBbLi4ucGFyZW50UHJpbWFyeVZhbHVlLCBpdGVtW3RoaXMudGh5UHJpbWFyeUtleV1dKTtcbiAgICAgICAgICAgICAgICBub2Rlc0xlYWZzID0gWy4uLm5vZGVzTGVhZnMsIC4uLm5vZGVMZWFmc107XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gWy4uLm5vZGVzLCAuLi5ub2Rlc0xlYWZzXTtcbiAgICB9XG5cbiAgICBwcml2YXRlIF9maW5kVHJlZU5vZGUodmFsdWU6IHN0cmluZyk6IFRoeVRyZWVTZWxlY3ROb2RlIHtcbiAgICAgICAgcmV0dXJuICh0aGlzLmZsYXR0ZW5UcmVlTm9kZXMgfHwgW10pLmZpbmQoaXRlbSA9PiBpdGVtW3RoaXMudGh5UHJpbWFyeUtleV0gPT09IHZhbHVlKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHNldFNlbGVjdGVkTm9kZXMoKSB7XG4gICAgICAgIGlmICh0aGlzLnNlbGVjdGVkVmFsdWUpIHtcbiAgICAgICAgICAgIC8vIOWkmumAieaVsOaNruWIneWni+WMllxuICAgICAgICAgICAgaWYgKHRoaXMudGh5TXVsdGlwbGUpIHtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5zZWxlY3RlZFZhbHVlLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMudmFsdWVJc09iamVjdCAmJiBPYmplY3Qua2V5cyh0aGlzLnNlbGVjdGVkVmFsdWVbMF0pLmluZGV4T2YodGhpcy50aHlQcmltYXJ5S2V5KSA+PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkTm9kZXMgPSB0aGlzLnNlbGVjdGVkVmFsdWUubWFwKChpdGVtOiBhbnkpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fZmluZFRyZWVOb2RlKGl0ZW1bdGhpcy50aHlQcmltYXJ5S2V5XSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWROb2RlcyA9IHRoaXMuc2VsZWN0ZWRWYWx1ZS5tYXAoKGl0ZW06IGFueSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9maW5kVHJlZU5vZGUoaXRlbSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgLy8g5Y2V6YCJ5pWw5o2u5Yid5aeL5YyWXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMudmFsdWVJc09iamVjdCkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoT2JqZWN0LmtleXModGhpcy5zZWxlY3RlZFZhbHVlKS5pbmRleE9mKHRoaXMudGh5UHJpbWFyeUtleSkgPj0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZE5vZGUgPSB0aGlzLl9maW5kVHJlZU5vZGUodGhpcy5zZWxlY3RlZFZhbHVlW3RoaXMudGh5UHJpbWFyeUtleV0pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZE5vZGUgPSB0aGlzLl9maW5kVHJlZU5vZGUodGhpcy5zZWxlY3RlZFZhbHVlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkTm9kZXMgPSBbXTtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWROb2RlID0gbnVsbDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIG9wZW5TZWxlY3RQb3AoKSB7XG4gICAgICAgIGlmICh0aGlzLnRoeURpc2FibGUpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmNka0Nvbm5lY3RPdmVybGF5V2lkdGggPSB0aGlzLmNka092ZXJsYXlPcmlnaW4uZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLndpZHRoO1xuICAgICAgICB0aGlzLmV4cGFuZFRyZWVTZWxlY3RPcHRpb25zID0gIXRoaXMuZXhwYW5kVHJlZVNlbGVjdE9wdGlvbnM7XG4gICAgICAgIHRoaXMudGh5RXhwYW5kU3RhdHVzQ2hhbmdlLmVtaXQodGhpcy5leHBhbmRUcmVlU2VsZWN0T3B0aW9ucyk7XG4gICAgfVxuXG4gICAgY2xvc2UoKSB7XG4gICAgICAgIGlmICh0aGlzLmV4cGFuZFRyZWVTZWxlY3RPcHRpb25zKSB7XG4gICAgICAgICAgICB0aGlzLmV4cGFuZFRyZWVTZWxlY3RPcHRpb25zID0gZmFsc2U7XG4gICAgICAgICAgICB0aGlzLnRoeUV4cGFuZFN0YXR1c0NoYW5nZS5lbWl0KHRoaXMuZXhwYW5kVHJlZVNlbGVjdE9wdGlvbnMpO1xuICAgICAgICAgICAgdGhpcy5vblRvdWNoZWRGbigpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgY2xlYXJTZWxlY3RlZFZhbHVlKGV2ZW50OiBFdmVudCkge1xuICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgdGhpcy5zZWxlY3RlZFZhbHVlID0gbnVsbDtcbiAgICAgICAgdGhpcy5zZWxlY3RlZE5vZGUgPSBudWxsO1xuICAgICAgICB0aGlzLnNlbGVjdGVkTm9kZXMgPSBbXTtcbiAgICAgICAgdGhpcy5vbkNoYW5nZUZuKHRoaXMuc2VsZWN0ZWRWYWx1ZSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfY2hhbmdlU2VsZWN0VmFsdWUoKSB7XG4gICAgICAgIGlmICh0aGlzLnZhbHVlSXNPYmplY3QpIHtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRWYWx1ZSA9IHRoaXMudGh5TXVsdGlwbGUgPyB0aGlzLnNlbGVjdGVkTm9kZXMgOiB0aGlzLnNlbGVjdGVkTm9kZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRWYWx1ZSA9IHRoaXMudGh5TXVsdGlwbGVcbiAgICAgICAgICAgICAgICA/IHRoaXMuc2VsZWN0ZWROb2Rlcy5tYXAoaXRlbSA9PiBpdGVtW3RoaXMudGh5UHJpbWFyeUtleV0pXG4gICAgICAgICAgICAgICAgOiB0aGlzLnNlbGVjdGVkTm9kZVt0aGlzLnRoeVByaW1hcnlLZXldO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMub25DaGFuZ2VGbih0aGlzLnNlbGVjdGVkVmFsdWUpO1xuICAgICAgICBpZiAoIXRoaXMudGh5TXVsdGlwbGUpIHtcbiAgICAgICAgICAgIHRoaXMub25Ub3VjaGVkRm4oKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJlbW92ZU11bHRpcGxlU2VsZWN0ZWROb2RlKGV2ZW50OiB7IGl0ZW06IFRoeVRyZWVTZWxlY3ROb2RlOyAkZXZlbnRPcmlnaW46IEV2ZW50IH0pIHtcbiAgICAgICAgdGhpcy5yZW1vdmVTZWxlY3RlZE5vZGUoZXZlbnQuaXRlbSwgZXZlbnQuJGV2ZW50T3JpZ2luKTtcbiAgICB9XG5cbiAgICAvLyB0aHlNdWx0aXBsZSA9IHRydWUg5pe277yM56e76Zmk5pWw5o2u5pe26LCD55SoXG4gICAgcmVtb3ZlU2VsZWN0ZWROb2RlKG5vZGU6IFRoeVRyZWVTZWxlY3ROb2RlLCBldmVudD86IEV2ZW50KSB7XG4gICAgICAgIGlmIChldmVudCkge1xuICAgICAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMudGh5RGlzYWJsZSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLnRoeU11bHRpcGxlKSB7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkTm9kZXMgPSBwcm9kdWNlKHRoaXMuc2VsZWN0ZWROb2RlcykucmVtb3ZlKChpdGVtOiBUaHlUcmVlU2VsZWN0Tm9kZSkgPT4ge1xuICAgICAgICAgICAgICAgIHJldHVybiBpdGVtW3RoaXMudGh5UHJpbWFyeUtleV0gPT09IG5vZGVbdGhpcy50aHlQcmltYXJ5S2V5XTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgdGhpcy5fY2hhbmdlU2VsZWN0VmFsdWUoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHNlbGVjdE5vZGUobm9kZTogVGh5VHJlZVNlbGVjdE5vZGUpIHtcbiAgICAgICAgaWYgKCF0aGlzLnRoeU11bHRpcGxlKSB7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkTm9kZSA9IG5vZGU7XG4gICAgICAgICAgICB0aGlzLmV4cGFuZFRyZWVTZWxlY3RPcHRpb25zID0gZmFsc2U7XG4gICAgICAgICAgICB0aGlzLnRoeUV4cGFuZFN0YXR1c0NoYW5nZS5lbWl0KHRoaXMuZXhwYW5kVHJlZVNlbGVjdE9wdGlvbnMpO1xuICAgICAgICAgICAgdGhpcy5fY2hhbmdlU2VsZWN0VmFsdWUoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkTm9kZXMuZmluZChpdGVtID0+IHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGl0ZW1bdGhpcy50aHlQcmltYXJ5S2V5XSA9PT0gbm9kZVt0aGlzLnRoeVByaW1hcnlLZXldO1xuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICB0aGlzLnJlbW92ZVNlbGVjdGVkTm9kZShub2RlKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZE5vZGVzID0gcHJvZHVjZSh0aGlzLnNlbGVjdGVkTm9kZXMpLmFkZChub2RlKTtcbiAgICAgICAgICAgICAgICB0aGlzLl9jaGFuZ2VTZWxlY3RWYWx1ZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgZ2V0Tm9kZUNoaWxkcmVuKG5vZGU6IFRoeVRyZWVTZWxlY3ROb2RlKSB7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IHRoaXMudGh5R2V0Tm9kZUNoaWxkcmVuKG5vZGUpO1xuICAgICAgICBpZiAocmVzdWx0ICYmIHJlc3VsdC5zdWJzY3JpYmUpIHtcbiAgICAgICAgICAgIHJlc3VsdC5waXBlKCkuc3Vic2NyaWJlKChkYXRhOiBUaHlUcmVlU2VsZWN0Tm9kZVtdKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3Qgbm9kZXMgPSB0aGlzLmZsYXR0ZW5Ob2RlcyhkYXRhLCB0aGlzLmZsYXR0ZW5UcmVlTm9kZXMsIFsuLi5ub2RlLnBhcmVudFZhbHVlcywgbm9kZVt0aGlzLnRoeVByaW1hcnlLZXldXSk7XG4gICAgICAgICAgICAgICAgY29uc3Qgb3RoZXJOb2RlcyA9IG5vZGVzLmZpbHRlcigoaXRlbTogVGh5VHJlZU5vZGUpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICF0aGlzLmZsYXR0ZW5UcmVlTm9kZXMuZmluZChoYXNJdGVtID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBoYXNJdGVtW3RoaXMudGh5UHJpbWFyeUtleV0gPT09IGl0ZW1bdGhpcy50aHlQcmltYXJ5S2V5XTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgdGhpcy5mbGF0dGVuVHJlZU5vZGVzID0gWy4uLnRoaXMuZmxhdHRlblRyZWVOb2RlcywgLi4ub3RoZXJOb2Rlc107XG4gICAgICAgICAgICAgICAgbm9kZS5jaGlsZHJlbiA9IGRhdGE7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgIH1cbiAgICB9XG59XG5cbmNvbnN0IERFRkFVTFRfSVRFTV9TSVpFID0gNDA7XG5cbi8qKlxuICogQHByaXZhdGVcbiAqL1xuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICd0aHktdHJlZS1zZWxlY3Qtbm9kZXMnLFxuICAgIHRlbXBsYXRlVXJsOiAnLi90cmVlLXNlbGVjdC1ub2Rlcy5jb21wb25lbnQuaHRtbCcsXG4gICAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgICBpbXBvcnRzOiBbXG4gICAgICAgIE5nVGVtcGxhdGVPdXRsZXQsXG4gICAgICAgIENka1ZpcnR1YWxTY3JvbGxWaWV3cG9ydCxcbiAgICAgICAgQ2RrRml4ZWRTaXplVmlydHVhbFNjcm9sbCxcbiAgICAgICAgQ2RrVmlydHVhbEZvck9mLFxuICAgICAgICBUaHlFbXB0eSxcbiAgICAgICAgTmdDbGFzcyxcbiAgICAgICAgTmdTdHlsZSxcbiAgICAgICAgVGh5SWNvbixcbiAgICAgICAgVGh5RmxleGlibGVUZXh0XG4gICAgXSxcbiAgICBob3N0OiB7XG4gICAgICAgICdbYXR0ci50YWJpbmRleF0nOiAnLTEnXG4gICAgfVxufSlcbmV4cG9ydCBjbGFzcyBUaHlUcmVlU2VsZWN0Tm9kZXMgaW1wbGVtZW50cyBPbkluaXQge1xuICAgIHBhcmVudCA9IGluamVjdChUaHlUcmVlU2VsZWN0KTtcbiAgICBlbXB0eUljb246IFNpZ25hbDxzdHJpbmc+ID0gaW5qZWN0UGFuZWxFbXB0eUljb24oKTtcblxuICAgIEBIb3N0QmluZGluZygnY2xhc3MnKSBjbGFzczogc3RyaW5nO1xuXG4gICAgbm9kZUxpc3Q6IFRoeVRyZWVTZWxlY3ROb2RlW10gPSBbXTtcblxuICAgIEBJbnB1dCgpIHNldCB0cmVlTm9kZXModmFsdWU6IFRoeVRyZWVTZWxlY3ROb2RlW10pIHtcbiAgICAgICAgY29uc3QgdHJlZVNlbGVjdEhlaWdodCA9IHRoaXMuZGVmYXVsdEl0ZW1TaXplICogdmFsdWUubGVuZ3RoO1xuICAgICAgICAvLyDniLbnuqforr7nva7kuoZtYXgtaGVpZ2h0OjMwMCAmIHBhZGRpbmc6MTAgMDsg5pWF5q2k5aSE5pyA5aSa6K6+572uMjgw77yM5ZCm5YiZ5bCG5Ye6546w5rua5Yqo5p2hXG4gICAgICAgIHRoaXMudGh5VmlydHVhbEhlaWdodCA9IHRyZWVTZWxlY3RIZWlnaHQgPiAzMDAgPyAnMjgwcHgnIDogYCR7dHJlZVNlbGVjdEhlaWdodH1weGA7XG4gICAgICAgIHRoaXMubm9kZUxpc3QgPSB2YWx1ZTtcbiAgICAgICAgdGhpcy5oYXNOb2RlQ2hpbGRyZW4gPSB0aGlzLm5vZGVMaXN0LmV2ZXJ5KFxuICAgICAgICAgICAgaXRlbSA9PiAhaXRlbS5oYXNPd25Qcm9wZXJ0eSgnY2hpbGRyZW4nKSB8fCAoIWl0ZW0/LmNoaWxkcmVuPy5sZW5ndGggJiYgIWl0ZW0/LmNoaWxkQ291bnQpXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgQElucHV0KCkgdGh5VmlydHVhbFNjcm9sbDogYm9vbGVhbiA9IGZhbHNlO1xuXG4gICAgcHVibGljIHByaW1hcnlLZXkgPSB0aGlzLnBhcmVudC50aHlQcmltYXJ5S2V5O1xuXG4gICAgcHVibGljIHNob3dLZXkgPSB0aGlzLnBhcmVudC50aHlTaG93S2V5O1xuXG4gICAgcHVibGljIGlzTXVsdGlwbGUgPSB0aGlzLnBhcmVudC50aHlNdWx0aXBsZTtcblxuICAgIHB1YmxpYyB2YWx1ZUlzT2JqZWN0ID0gdGhpcy5wYXJlbnQudmFsdWVJc09iamVjdDtcblxuICAgIHB1YmxpYyBzZWxlY3RlZFZhbHVlID0gdGhpcy5wYXJlbnQuc2VsZWN0ZWRWYWx1ZTtcblxuICAgIHB1YmxpYyBjaGlsZENvdW50S2V5ID0gdGhpcy5wYXJlbnQudGh5Q2hpbGRDb3VudEtleTtcblxuICAgIHB1YmxpYyB0cmVlTm9kZVRlbXBsYXRlUmVmID0gdGhpcy5wYXJlbnQudHJlZU5vZGVUZW1wbGF0ZVJlZjtcblxuICAgIHB1YmxpYyBkZWZhdWx0SXRlbVNpemUgPSBERUZBVUxUX0lURU1fU0laRTtcblxuICAgIHB1YmxpYyB0aHlWaXJ0dWFsSGVpZ2h0OiBzdHJpbmcgPSBudWxsO1xuXG4gICAgcHVibGljIGhhc05vZGVDaGlsZHJlbjogYm9vbGVhbiA9IGZhbHNlO1xuXG4gICAgbmdPbkluaXQoKSB7XG4gICAgICAgIHRoaXMuY2xhc3MgPSB0aGlzLmlzTXVsdGlwbGUgPyAndGh5LXRyZWUtc2VsZWN0LWRyb3Bkb3duIHRoeS10cmVlLXNlbGVjdC1kcm9wZG93bi1tdWx0aXBsZScgOiAndGh5LXRyZWUtc2VsZWN0LWRyb3Bkb3duJztcbiAgICB9XG5cbiAgICB0cmVlTm9kZUlzU2VsZWN0ZWQobm9kZTogVGh5VHJlZVNlbGVjdE5vZGUpIHtcbiAgICAgICAgaWYgKHRoaXMucGFyZW50LnRoeU11bHRpcGxlKSB7XG4gICAgICAgICAgICByZXR1cm4gKHRoaXMucGFyZW50LnNlbGVjdGVkTm9kZXMgfHwgW10pLmZpbmQoaXRlbSA9PiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGl0ZW1bdGhpcy5wcmltYXJ5S2V5XSA9PT0gbm9kZVt0aGlzLnByaW1hcnlLZXldO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5wYXJlbnQuc2VsZWN0ZWROb2RlICYmIHRoaXMucGFyZW50LnNlbGVjdGVkTm9kZVt0aGlzLnByaW1hcnlLZXldID09PSBub2RlW3RoaXMucHJpbWFyeUtleV07XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICB0cmVlTm9kZUlzSGlkZGVuKG5vZGU6IFRoeVRyZWVTZWxlY3ROb2RlKSB7XG4gICAgICAgIGlmICh0aGlzLnBhcmVudC50aHlIaWRkZW5Ob2RlS2V5KSB7XG4gICAgICAgICAgICByZXR1cm4gbm9kZVt0aGlzLnBhcmVudC50aHlIaWRkZW5Ob2RlS2V5XTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5wYXJlbnQudGh5SGlkZGVuTm9kZUZuKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5wYXJlbnQudGh5SGlkZGVuTm9kZUZuKG5vZGUpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICB0cmVlTm9kZUlzRGlzYWJsZShub2RlOiBUaHlUcmVlU2VsZWN0Tm9kZSkge1xuICAgICAgICBpZiAodGhpcy5wYXJlbnQudGh5RGlzYWJsZU5vZGVLZXkpIHtcbiAgICAgICAgICAgIHJldHVybiBub2RlW3RoaXMucGFyZW50LnRoeURpc2FibGVOb2RlS2V5XTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5wYXJlbnQudGh5RGlzYWJsZU5vZGVGbikge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMucGFyZW50LnRoeURpc2FibGVOb2RlRm4obm9kZSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIHRyZWVOb2RlSXNFeHBhbmQobm9kZTogVGh5VHJlZVNlbGVjdE5vZGUpIHtcbiAgICAgICAgbGV0IGlzU2VsZWN0ZWROb2RlUGFyZW50ID0gZmFsc2U7XG4gICAgICAgIGlmICh0aGlzLnBhcmVudC50aHlNdWx0aXBsZSkge1xuICAgICAgICAgICAgaXNTZWxlY3RlZE5vZGVQYXJlbnQgPSAhISh0aGlzLnBhcmVudC5zZWxlY3RlZE5vZGVzIHx8IFtdKS5maW5kKGl0ZW0gPT4ge1xuICAgICAgICAgICAgICAgIHJldHVybiBpdGVtLnBhcmVudFZhbHVlcy5pbmRleE9mKG5vZGVbdGhpcy5wcmltYXJ5S2V5XSkgPiAtMTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaXNTZWxlY3RlZE5vZGVQYXJlbnQgPSB0aGlzLnBhcmVudC5zZWxlY3RlZE5vZGVcbiAgICAgICAgICAgICAgICA/IHRoaXMucGFyZW50LnNlbGVjdGVkTm9kZS5wYXJlbnRWYWx1ZXMuaW5kZXhPZihub2RlW3RoaXMucHJpbWFyeUtleV0pID4gLTFcbiAgICAgICAgICAgICAgICA6IGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGlzRXhwYW5kID0gbm9kZS5leHBhbmQgfHwgKE9iamVjdC5rZXlzKG5vZGUpLmluZGV4T2YoJ2V4cGFuZCcpIDwgMCAmJiBpc1NlbGVjdGVkTm9kZVBhcmVudCk7XG4gICAgICAgIG5vZGUuZXhwYW5kID0gaXNFeHBhbmQ7XG4gICAgICAgIHJldHVybiBpc0V4cGFuZDtcbiAgICB9XG5cbiAgICBnZXROb2RlQ2hpbGRyZW4obm9kZTogVGh5VHJlZVNlbGVjdE5vZGUpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucGFyZW50LmdldE5vZGVDaGlsZHJlbihub2RlKTtcbiAgICB9XG5cbiAgICBzZWxlY3RUcmVlTm9kZShldmVudDogRXZlbnQsIG5vZGU6IFRoeVRyZWVTZWxlY3ROb2RlKSB7XG4gICAgICAgIGlmICghdGhpcy50cmVlTm9kZUlzRGlzYWJsZShub2RlKSkge1xuICAgICAgICAgICAgdGhpcy5wYXJlbnQuc2VsZWN0Tm9kZShub2RlKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIG5vZGVFeHBhbmRUb2dnbGUoZXZlbnQ6IEV2ZW50LCBub2RlOiBUaHlUcmVlU2VsZWN0Tm9kZSkge1xuICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgaWYgKE9iamVjdC5rZXlzKG5vZGUpLmluZGV4T2YoJ2V4cGFuZCcpID4gLTEpIHtcbiAgICAgICAgICAgIG5vZGUuZXhwYW5kID0gIW5vZGUuZXhwYW5kO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKHRoaXMudHJlZU5vZGVJc0V4cGFuZChub2RlKSkge1xuICAgICAgICAgICAgICAgIG5vZGUuZXhwYW5kID0gZmFsc2U7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIG5vZGUuZXhwYW5kID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChub2RlLmV4cGFuZCAmJiB0aGlzLnBhcmVudC50aHlBc3luY05vZGUpIHtcbiAgICAgICAgICAgIHRoaXMuZ2V0Tm9kZUNoaWxkcmVuKG5vZGUpLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5wYXJlbnQuc2V0UG9zaXRpb24oKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIC8vIHRoaXMucGFyZW50LnNldFBvc2l0aW9uKCk7XG4gICAgICAgIGlmICh0aGlzLnRoeVZpcnR1YWxTY3JvbGwpIHtcbiAgICAgICAgICAgIHRoaXMucGFyZW50LmJ1aWxkRmxhdHRlblRyZWVOb2RlcygpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgdGFiVHJhY2tCeShpbmRleDogbnVtYmVyLCBpdGVtOiBUaHlUcmVlU2VsZWN0Tm9kZSkge1xuICAgICAgICByZXR1cm4gaW5kZXg7XG4gICAgfVxufVxuIiwiPGRpdlxuICBjZGtPdmVybGF5T3JpZ2luXG4gIHRoeVNlbGVjdENvbnRyb2xcbiAgKGNsaWNrKT1cIm9wZW5TZWxlY3RQb3AoKVwiXG4gICNvcmlnaW49XCJjZGtPdmVybGF5T3JpZ2luXCJcbiAgW3RoeVBhbmVsT3BlbmVkXT1cImV4cGFuZFRyZWVTZWxlY3RPcHRpb25zXCJcbiAgW3RoeVNlbGVjdGVkT3B0aW9uc109XCJzZWxlY3RlZFZhbHVlT2JqZWN0XCJcbiAgW3RoeUlzTXVsdGlwbGVdPVwidGh5TXVsdGlwbGVcIlxuICBbdGh5QWxsb3dDbGVhcl09XCJ0aHlBbGxvd0NsZWFyXCJcbiAgW3RoeVNpemVdPVwidGh5U2l6ZVwiXG4gIFt0aHlQbGFjZWhvbGRlcl09XCJwbGFjZWhvbGRlclwiXG4gIFtjdXN0b21EaXNwbGF5VGVtcGxhdGVdPVwiY3VzdG9tRGlzcGxheVRlbXBsYXRlXCJcbiAgW3RoeVNob3dTZWFyY2hdPVwidGh5U2hvd1NlYXJjaFwiXG4gIFt0aHlEaXNhYmxlZF09XCJ0aHlEaXNhYmxlXCJcbiAgKHRoeU9uQmx1cik9XCJvbkJsdXIoJGV2ZW50KVwiXG4gICh0aHlPbkNsZWFyKT1cImNsZWFyU2VsZWN0ZWRWYWx1ZSgkZXZlbnQpXCJcbiAgKHRoeU9uUmVtb3ZlKT1cInJlbW92ZU11bHRpcGxlU2VsZWN0ZWROb2RlKCRldmVudClcIlxuICAodGh5T25TZWFyY2gpPVwic2VhcmNoVmFsdWUoJGV2ZW50KVwiPlxuICA8bmctdGVtcGxhdGUgI2N1c3RvbURpc3BsYXlUZW1wbGF0ZSBsZXQtbm9kZT5cbiAgICBAaWYgKHRoeVRyZWVTZWxlY3RUcmlnZ2VyRGlzcGxheVJlZikge1xuICAgICAgPG5nLXRlbXBsYXRlIFtuZ1RlbXBsYXRlT3V0bGV0XT1cInRoeVRyZWVTZWxlY3RUcmlnZ2VyRGlzcGxheVJlZlwiIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7ICRpbXBsaWNpdDogbm9kZSB9XCI+PC9uZy10ZW1wbGF0ZT5cbiAgICB9IEBlbHNlIHtcbiAgICAgIHt7IG5vZGVbdGh5U2hvd0tleV0gfX1cbiAgICB9XG4gIDwvbmctdGVtcGxhdGU+XG48L2Rpdj5cblxuPG5nLXRlbXBsYXRlXG4gIGNka0Nvbm5lY3RlZE92ZXJsYXlcbiAgW2Nka0Nvbm5lY3RlZE92ZXJsYXlIYXNCYWNrZHJvcF09XCJmYWxzZVwiXG4gIFtjZGtDb25uZWN0ZWRPdmVybGF5T3JpZ2luXT1cIm9yaWdpblwiXG4gIFtjZGtDb25uZWN0ZWRPdmVybGF5TWluV2lkdGhdPVwiY2RrQ29ubmVjdE92ZXJsYXlXaWR0aFwiXG4gIFtjZGtDb25uZWN0ZWRPdmVybGF5RmxleGlibGVEaW1lbnNpb25zXT1cInRydWVcIlxuICBbY2RrQ29ubmVjdGVkT3ZlcmxheU9wZW5dPVwiZXhwYW5kVHJlZVNlbGVjdE9wdGlvbnNcIlxuICBjZGtDb25uZWN0ZWRPdmVybGF5VHJhbnNmb3JtT3JpZ2luT249XCIudGh5LXRyZWUtc2VsZWN0LWRyb3Bkb3duXCJcbiAgW2Nka0Nvbm5lY3RlZE92ZXJsYXlQb3NpdGlvbnNdPVwiZXhwYW5kZWREcm9wZG93blBvc2l0aW9uc1wiXG4gIChkZXRhY2gpPVwiY2xvc2UoKVwiPlxuICA8dGh5LXRyZWUtc2VsZWN0LW5vZGVzXG4gICAgdGh5U3RvcFByb3BhZ2F0aW9uXG4gICAgW3RoeVZpcnR1YWxTY3JvbGxdPVwidGh5VmlydHVhbFNjcm9sbFwiXG4gICAgW3RyZWVOb2Rlc109XCJ0aHlWaXJ0dWFsU2Nyb2xsID8gdmlydHVhbFRyZWVOb2RlcyA6IHRyZWVOb2Rlc1wiXG4gICAgW0BzY2FsZVlNb3Rpb25dPVwiJ2VudGVyJ1wiPlxuICA8L3RoeS10cmVlLXNlbGVjdC1ub2Rlcz5cbjwvbmctdGVtcGxhdGU+XG4iLCJAaWYgKG5vZGVMaXN0Py5sZW5ndGggPiAwKSB7XG4gIDxkaXYgY2xhc3M9XCJ0aHktdHJlZS1zZWxlY3Qtb3B0aW9uc1wiPlxuICAgIDxkaXYgY2xhc3M9XCJ0aHktdHJlZS1zZWxlY3Qtbm9kZVwiPlxuICAgICAgQGlmICghdGh5VmlydHVhbFNjcm9sbCkge1xuICAgICAgICBAZm9yIChub2RlIG9mIG5vZGVMaXN0OyB0cmFjayAkaW5kZXgpIHtcbiAgICAgICAgICA8bmctY29udGFpbmVyIFtuZ1RlbXBsYXRlT3V0bGV0XT1cInRyZWVTZWxlY3ROb2RlXCIgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cInsgJGltcGxpY2l0OiBub2RlIH1cIj48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgQGlmICh0aHlWaXJ0dWFsU2Nyb2xsKSB7XG4gICAgICAgIDxjZGstdmlydHVhbC1zY3JvbGwtdmlld3BvcnQgI3ZpZXdwb3J0IFtpdGVtU2l6ZV09XCJkZWZhdWx0SXRlbVNpemVcIiBbc3R5bGUuaGVpZ2h0XT1cInRoeVZpcnR1YWxIZWlnaHRcIj5cbiAgICAgICAgICA8bmctY29udGFpbmVyICpjZGtWaXJ0dWFsRm9yPVwibGV0IG5vZGUgb2Ygbm9kZUxpc3Q7IHRyYWNrQnk6IHRhYlRyYWNrQnlcIj5cbiAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBbbmdUZW1wbGF0ZU91dGxldF09XCJ0cmVlU2VsZWN0Tm9kZVwiIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7ICRpbXBsaWNpdDogbm9kZSB9XCI+PC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPC9jZGstdmlydHVhbC1zY3JvbGwtdmlld3BvcnQ+XG4gICAgICB9XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxufSBAZWxzZSB7XG4gIDx0aHktZW1wdHlcbiAgICBjbGFzcz1cInRoeS1zZWxlY3QtZW1wdHktY29udGVudFwiXG4gICAgdGh5U2l6ZT1cInNtXCJcbiAgICBbdGh5TWVzc2FnZV09XCJwYXJlbnQudGh5RW1wdHlPcHRpb25zVGV4dFwiXG4gICAgW3RoeUljb25OYW1lXT1cImVtcHR5SWNvbigpXCI+PC90aHktZW1wdHk+XG59XG5cbjxuZy10ZW1wbGF0ZSAjdHJlZVNlbGVjdE5vZGUgbGV0LW5vZGU+XG4gIDxuZy1jb250YWluZXI+XG4gICAgQGlmICghdHJlZU5vZGVJc0hpZGRlbihub2RlKSkge1xuICAgICAgPGFcbiAgICAgICAgY2xhc3M9XCJ0aHktb3B0aW9uLWl0ZW1cIlxuICAgICAgICBbbmdDbGFzc109XCJ7IGFjdGl2ZTogdHJlZU5vZGVJc1NlbGVjdGVkKG5vZGUpLCAncGwtMCc6IGhhc05vZGVDaGlsZHJlbiB9XCJcbiAgICAgICAgW2NsYXNzLmRpc2FibGVkXT1cInRyZWVOb2RlSXNEaXNhYmxlKG5vZGUpXCJcbiAgICAgICAgW25nU3R5bGVdPVwieyAncGFkZGluZy1sZWZ0LnB4JzogMjAgKiBub2RlLmxldmVsICsgcGFyZW50Lmljb25zLmdhcCB9XCJcbiAgICAgICAgKGNsaWNrKT1cInNlbGVjdFRyZWVOb2RlKCRldmVudCwgbm9kZSlcIj5cbiAgICAgICAgPHNwYW5cbiAgICAgICAgICBjbGFzcz1cInRoeS10cmVlLXNlbGVjdC1vcHRpb24taWNvblwiXG4gICAgICAgICAgW2NsYXNzLmludmlzaWJsZV09XCIhKG5vZGUuY2hpbGRyZW4/Lmxlbmd0aCA+IDAgfHwgKG5vZGVbY2hpbGRDb3VudEtleV0gJiYgbm9kZVtjaGlsZENvdW50S2V5XSA+IDApKVwiXG4gICAgICAgICAgKGNsaWNrKT1cIm5vZGVFeHBhbmRUb2dnbGUoJGV2ZW50LCBub2RlKVwiPlxuICAgICAgICAgIDx0aHktaWNvblxuICAgICAgICAgICAgY2xhc3M9XCJub2RlLWV4cGFuZC1pY29uXCJcbiAgICAgICAgICAgIFt0aHlJY29uTmFtZV09XCJ0cmVlTm9kZUlzRXhwYW5kKG5vZGUpID8gcGFyZW50Lmljb25zLmV4cGFuZCA6IHBhcmVudC5pY29ucy5jb2xsYXBzZVwiPjwvdGh5LWljb24+XG4gICAgICAgIDwvc3Bhbj5cbiAgICAgICAgPHNwYW4gY2xhc3M9XCJ0aHktdHJlZS1zZWxlY3Qtb3B0aW9uLXRleHRcIiBbbmdDbGFzc109XCJ7ICdtbC0xJzogaGFzTm9kZUNoaWxkcmVuIH1cIj5cbiAgICAgICAgICBAaWYgKHRyZWVOb2RlVGVtcGxhdGVSZWYpIHtcbiAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBbbmdUZW1wbGF0ZU91dGxldF09XCJ0cmVlTm9kZVRlbXBsYXRlUmVmXCIgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cInsgJGltcGxpY2l0OiBub2RlIH1cIj48L25nLXRlbXBsYXRlPlxuICAgICAgICAgIH0gQGVsc2Uge1xuICAgICAgICAgICAgPHNwYW4gdGh5RmxleGlibGVUZXh0IFt0aHlUb29sdGlwQ29udGVudF09XCJub2RlW3Nob3dLZXldXCI+e3sgbm9kZVtzaG93S2V5XSB9fTwvc3Bhbj5cbiAgICAgICAgICB9XG4gICAgICAgIDwvc3Bhbj5cbiAgICAgICAgQGlmIChpc011bHRpcGxlKSB7XG4gICAgICAgICAgPHRoeS1pY29uIGNsYXNzPVwiY2hlY2tlZC1pY29uXCIgdGh5SWNvbk5hbWU9XCJjaGVja1wiPjwvdGh5LWljb24+XG4gICAgICAgIH1cbiAgICAgIDwvYT5cbiAgICB9XG4gICAgQGlmICghdGh5VmlydHVhbFNjcm9sbCAmJiB0cmVlTm9kZUlzRXhwYW5kKG5vZGUpICYmIG5vZGUuY2hpbGRyZW4/Lmxlbmd0aCA+IDApIHtcbiAgICAgIEBmb3IgKG5vZGUgb2Ygbm9kZS5jaGlsZHJlbjsgdHJhY2sgJGluZGV4KSB7XG4gICAgICAgIDxuZy1jb250YWluZXIgW25nVGVtcGxhdGVPdXRsZXRdPVwidHJlZVNlbGVjdE5vZGVcIiBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwieyAkaW1wbGljaXQ6IG5vZGUgfVwiPiA8L25nLWNvbnRhaW5lcj5cbiAgICAgIH1cbiAgICB9XG4gIDwvbmctY29udGFpbmVyPlxuPC9uZy10ZW1wbGF0ZT5cbiJdfQ==
|
package/esm2022/version.mjs
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
import { Version } from '@angular/core';
|
|
2
|
-
export const VERSION = new Version('18.2.0
|
|
3
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
2
|
+
export const VERSION = new Version('18.2.0');
|
|
3
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmVyc2lvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy92ZXJzaW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFeEMsTUFBTSxDQUFDLE1BQU0sT0FBTyxHQUFHLElBQUksT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgVmVyc2lvbiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5leHBvcnQgY29uc3QgVkVSU0lPTiA9IG5ldyBWZXJzaW9uKCcxOC4yLjAnKTtcbiJdfQ==
|
|
@@ -15,7 +15,7 @@ import { SelectionModel } from '@angular/cdk/collections';
|
|
|
15
15
|
import { ActiveDescendantKeyManager } from '@angular/cdk/a11y';
|
|
16
16
|
import { coerceBooleanProperty, warnDeprecation, ESCAPE, ENTER, UP_ARROW, DOWN_ARROW, TAB } from 'ngx-tethys/util';
|
|
17
17
|
import { injectLocale } from 'ngx-tethys/i18n';
|
|
18
|
-
import { ThyAbstractOverlayConfig, ThyAbstractOverlayContainer, ThyClickDispatcher, ThyPortalOutlet, ThyAbstractOverlayRef, ThyAbstractInternalOverlayRef, ThyAbstractOverlayService, getFlexiblePositions, ScrollToService } from 'ngx-tethys/core';
|
|
18
|
+
import { injectPanelEmptyIcon, ThyAbstractOverlayConfig, ThyAbstractOverlayContainer, ThyClickDispatcher, ThyPortalOutlet, ThyAbstractOverlayRef, ThyAbstractInternalOverlayRef, ThyAbstractOverlayService, getFlexiblePositions, ScrollToService } from 'ngx-tethys/core';
|
|
19
19
|
import { Directionality } from '@angular/cdk/bidi';
|
|
20
20
|
import { coerceElement, coerceArray } from '@angular/cdk/coercion';
|
|
21
21
|
import { Platform } from '@angular/cdk/platform';
|
|
@@ -32,6 +32,7 @@ class ThyAutocomplete {
|
|
|
32
32
|
this.changeDetectorRef = inject(ChangeDetectorRef);
|
|
33
33
|
this.ngUnsubscribe$ = new Subject();
|
|
34
34
|
this.locale = injectLocale('autocomplete');
|
|
35
|
+
this.emptyIcon = injectPanelEmptyIcon();
|
|
35
36
|
this.isMultiple = false;
|
|
36
37
|
this.mode = '';
|
|
37
38
|
this.isEmptyOptions = false;
|
|
@@ -157,7 +158,7 @@ class ThyAutocomplete {
|
|
|
157
158
|
provide: THY_OPTION_PARENT_COMPONENT,
|
|
158
159
|
useExisting: ThyAutocomplete
|
|
159
160
|
}
|
|
160
|
-
], queries: [{ propertyName: "options", predicate: ThyOption, descendants: true }], viewQueries: [{ propertyName: "contentTemplateRef", first: true, predicate: ["contentTemplate"], descendants: true, static: true }, { propertyName: "optionsContainer", first: true, predicate: ["panel"], descendants: true }], ngImport: i0, template: "<ng-template #contentTemplate>\n <div thyStopPropagation [ngClass]=\"dropDownClass\">\n <div #panel class=\"thy-select-dropdown-options\">\n <ng-content></ng-content>\n @if (isEmptyOptions) {\n <thy-empty [thyMessage]=\"thyEmptyText\"></thy-empty>\n }\n </div>\n </div>\n</ng-template>\n", dependencies: [{ kind: "directive", type: ThyStopPropagationDirective, selector: "[thyStopPropagation]", inputs: ["thyStopPropagation"] }, { kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "component", type: ThyEmpty, selector: "thy-empty", inputs: ["thyMessage", "thyTranslationKey", "thyTranslationValues", "thyEntityName", "thyEntityNameTranslateKey", "thyIconName", "thySize", "thyMarginTop", "thyTopAuto", "thyContainer", "thyImageUrl", "thyImageLoading", "thyImageFetchPriority", "thyDescription"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
161
|
+
], queries: [{ propertyName: "options", predicate: ThyOption, descendants: true }], viewQueries: [{ propertyName: "contentTemplateRef", first: true, predicate: ["contentTemplate"], descendants: true, static: true }, { propertyName: "optionsContainer", first: true, predicate: ["panel"], descendants: true }], ngImport: i0, template: "<ng-template #contentTemplate>\n <div thyStopPropagation [ngClass]=\"dropDownClass\">\n <div #panel class=\"thy-select-dropdown-options\">\n <ng-content></ng-content>\n @if (isEmptyOptions) {\n <thy-empty [thyMessage]=\"thyEmptyText\" [thyIconName]=\"emptyIcon()\"></thy-empty>\n }\n </div>\n </div>\n</ng-template>\n", dependencies: [{ kind: "directive", type: ThyStopPropagationDirective, selector: "[thyStopPropagation]", inputs: ["thyStopPropagation"] }, { kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "component", type: ThyEmpty, selector: "thy-empty", inputs: ["thyMessage", "thyTranslationKey", "thyTranslationValues", "thyEntityName", "thyEntityNameTranslateKey", "thyIconName", "thySize", "thyMarginTop", "thyTopAuto", "thyContainer", "thyImageUrl", "thyImageLoading", "thyImageFetchPriority", "thyDescription"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
161
162
|
}
|
|
162
163
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: ThyAutocomplete, decorators: [{
|
|
163
164
|
type: Component,
|
|
@@ -166,7 +167,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.0", ngImpor
|
|
|
166
167
|
provide: THY_OPTION_PARENT_COMPONENT,
|
|
167
168
|
useExisting: ThyAutocomplete
|
|
168
169
|
}
|
|
169
|
-
], standalone: true, imports: [ThyStopPropagationDirective, NgClass, ThyEmpty], template: "<ng-template #contentTemplate>\n <div thyStopPropagation [ngClass]=\"dropDownClass\">\n <div #panel class=\"thy-select-dropdown-options\">\n <ng-content></ng-content>\n @if (isEmptyOptions) {\n <thy-empty [thyMessage]=\"thyEmptyText\"></thy-empty>\n }\n </div>\n </div>\n</ng-template>\n" }]
|
|
170
|
+
], standalone: true, imports: [ThyStopPropagationDirective, NgClass, ThyEmpty], template: "<ng-template #contentTemplate>\n <div thyStopPropagation [ngClass]=\"dropDownClass\">\n <div #panel class=\"thy-select-dropdown-options\">\n <ng-content></ng-content>\n @if (isEmptyOptions) {\n <thy-empty [thyMessage]=\"thyEmptyText\" [thyIconName]=\"emptyIcon()\"></thy-empty>\n }\n </div>\n </div>\n</ng-template>\n" }]
|
|
170
171
|
}], propDecorators: { contentTemplateRef: [{
|
|
171
172
|
type: ViewChild,
|
|
172
173
|
args: ['contentTemplate', { static: true }]
|