@delon/theme 12.4.2 → 13.1.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/compact.css +1278 -750
- package/compact.min.css +1 -1
- package/dark.css +1325 -797
- package/dark.min.css +1 -1
- package/default.css +1286 -758
- package/default.min.css +1 -1
- package/{esm2015/layout-blank/layout-blank.js → esm2020/layout-blank/layout-blank.mjs} +0 -0
- package/{esm2015/layout-blank/public_api.js → esm2020/layout-blank/public_api.mjs} +0 -0
- package/{esm2015/layout-default/layout-default.js → esm2020/layout-default/layout-default.mjs} +0 -0
- package/esm2020/layout-default/layout-header-item-trigger.directive.mjs +16 -0
- package/esm2020/layout-default/layout-header-item.component.mjs +33 -0
- package/esm2020/layout-default/layout-header.component.mjs +123 -0
- package/esm2020/layout-default/layout-nav.component.mjs +307 -0
- package/esm2020/layout-default/layout.component.mjs +132 -0
- package/esm2020/layout-default/layout.module.mjs +69 -0
- package/{esm2015/layout-default/public_api.js → esm2020/layout-default/public_api.mjs} +0 -0
- package/{esm2015/layout-default/types.js → esm2020/layout-default/types.mjs} +0 -0
- package/esm2020/public_api.mjs +25 -0
- package/{esm2015/setting-drawer/public_api.js → esm2020/setting-drawer/public_api.mjs} +0 -0
- package/esm2020/setting-drawer/setting-drawer-item.component.mjs +35 -0
- package/esm2020/setting-drawer/setting-drawer.component.mjs +192 -0
- package/{esm2015/setting-drawer/setting-drawer.js → esm2020/setting-drawer/setting-drawer.mjs} +0 -0
- package/esm2020/setting-drawer/setting-drawer.module.mjs +68 -0
- package/{esm2015/setting-drawer/setting-drawer.types.js → esm2020/setting-drawer/setting-drawer.types.mjs} +0 -0
- package/{esm2015/src/config.js → esm2020/src/config.mjs} +0 -0
- package/{esm2015/src/locale/index.js → esm2020/src/locale/index.mjs} +0 -0
- package/{esm2015/src/locale/languages/el-GR.js → esm2020/src/locale/languages/el-GR.mjs} +0 -0
- package/{esm2015/src/locale/languages/en-US.js → esm2020/src/locale/languages/en-US.mjs} +0 -0
- package/{esm2015/src/locale/languages/es-ES.js → esm2020/src/locale/languages/es-ES.mjs} +0 -0
- package/{esm2015/src/locale/languages/fr-FR.js → esm2020/src/locale/languages/fr-FR.mjs} +0 -0
- package/{esm2015/src/locale/languages/hr-HR.js → esm2020/src/locale/languages/hr-HR.mjs} +0 -0
- package/{esm2015/src/locale/languages/it-IT.js → esm2020/src/locale/languages/it-IT.mjs} +0 -0
- package/{esm2015/src/locale/languages/ja-JP.js → esm2020/src/locale/languages/ja-JP.mjs} +0 -0
- package/{esm2015/src/locale/languages/ko-KR.js → esm2020/src/locale/languages/ko-KR.mjs} +0 -0
- package/{esm2015/src/locale/languages/pl-PL.js → esm2020/src/locale/languages/pl-PL.mjs} +0 -0
- package/{esm2015/src/locale/languages/sl-SI.js → esm2020/src/locale/languages/sl-SI.mjs} +0 -0
- package/{esm2015/src/locale/languages/tr-TR.js → esm2020/src/locale/languages/tr-TR.mjs} +0 -0
- package/{esm2015/src/locale/languages/zh-CN.js → esm2020/src/locale/languages/zh-CN.mjs} +0 -0
- package/{esm2015/src/locale/languages/zh-TW.js → esm2020/src/locale/languages/zh-TW.mjs} +0 -0
- package/esm2020/src/locale/locale.module.mjs +17 -0
- package/esm2020/src/locale/locale.service.mjs +45 -0
- package/{esm2015/src/locale/locale.tokens.js → esm2020/src/locale/locale.tokens.mjs} +0 -0
- package/{esm2015/src/locale/locale.types.js → esm2020/src/locale/locale.types.mjs} +0 -0
- package/{esm2015/src/locale/public_api.js → esm2020/src/locale/public_api.mjs} +0 -0
- package/esm2020/src/pipes/date/date.pipe.mjs +24 -0
- package/esm2020/src/pipes/keys/keys.pipe.mjs +21 -0
- package/esm2020/src/pipes/safe/html.pipe.mjs +18 -0
- package/esm2020/src/pipes/safe/url.pipe.mjs +18 -0
- package/esm2020/src/pipes/yn/yn.pipe.mjs +38 -0
- package/esm2020/src/router/optional-preloader.mjs +22 -0
- package/esm2020/src/services/drawer/drawer.helper.mjs +91 -0
- package/esm2020/src/services/http/http.client.mjs +154 -0
- package/esm2020/src/services/http/http.decorator.mjs +215 -0
- package/esm2020/src/services/i18n/i18n.mjs +97 -0
- package/esm2020/src/services/i18n/i18n.pipe.mjs +21 -0
- package/{esm2015/src/services/menu/interface.js → esm2020/src/services/menu/interface.mjs} +0 -0
- package/esm2020/src/services/menu/menu.service.mjs +252 -0
- package/esm2020/src/services/modal/modal.helper.mjs +106 -0
- package/{esm2015/src/services/preloader/preloader.js → esm2020/src/services/preloader/preloader.mjs} +0 -0
- package/esm2020/src/services/responsive/responsive.mjs +46 -0
- package/esm2020/src/services/rtl/rtl.service.mjs +101 -0
- package/esm2020/src/services/settings/settings.service.mjs +100 -0
- package/{esm2015/src/services/settings/types.js → esm2020/src/services/settings/types.mjs} +0 -0
- package/esm2020/src/services/title/title.service.mjs +124 -0
- package/esm2020/src/theme.module.mjs +76 -0
- package/{esm2015/src/version.js → esm2020/src/version.mjs} +1 -1
- package/{esm2015/theme-btn/public_api.js → esm2020/theme-btn/public_api.mjs} +0 -0
- package/esm2020/theme-btn/theme-btn.component.mjs +106 -0
- package/esm2020/theme-btn/theme-btn.mjs +5 -0
- package/esm2020/theme-btn/theme-btn.module.mjs +32 -0
- package/esm2020/theme.mjs +5 -0
- package/fesm2015/{layout-blank.js → layout-blank.mjs} +1 -1
- package/fesm2015/layout-blank.mjs.map +1 -0
- package/fesm2015/layout-default.mjs +654 -0
- package/fesm2015/layout-default.mjs.map +1 -0
- package/fesm2015/setting-drawer.mjs +487 -0
- package/fesm2015/setting-drawer.mjs.map +1 -0
- package/fesm2015/theme-btn.mjs +144 -0
- package/fesm2015/theme-btn.mjs.map +1 -0
- package/fesm2015/{theme.js → theme.mjs} +226 -188
- package/fesm2015/theme.mjs.map +1 -0
- package/fesm2020/layout-blank.mjs +7 -0
- package/fesm2020/layout-blank.mjs.map +1 -0
- package/fesm2020/layout-default.mjs +654 -0
- package/fesm2020/layout-default.mjs.map +1 -0
- package/fesm2020/setting-drawer.mjs +482 -0
- package/fesm2020/setting-drawer.mjs.map +1 -0
- package/fesm2020/theme-btn.mjs +141 -0
- package/fesm2020/theme-btn.mjs.map +1 -0
- package/fesm2020/theme.mjs +2575 -0
- package/fesm2020/theme.mjs.map +1 -0
- package/layout-blank/layout-blank.d.ts +1 -0
- package/layout-blank/package.json +5 -6
- package/layout-default/layout-default.d.ts +1 -0
- package/layout-default/layout-header-item-trigger.directive.d.ts +3 -0
- package/layout-default/layout-header-item.component.d.ts +3 -0
- package/layout-default/layout-header.component.d.ts +8 -5
- package/layout-default/layout-nav.component.d.ts +4 -1
- package/layout-default/layout.component.d.ts +6 -3
- package/layout-default/layout.module.d.ts +17 -0
- package/layout-default/package.json +5 -6
- package/layout-default/style/_aside.less +7 -10
- package/layout-default/style/_fixed.less +2 -0
- package/layout-default/style/_header.less +21 -0
- package/layout-default/style/_layout.less +7 -0
- package/layout-default/style/_progress-bar.less +6 -0
- package/layout-default/style/fix/_full-content.less +4 -0
- package/layout-default/style/widgets/_app-icons.less +3 -0
- package/layout-default/style/widgets/_user.less +5 -0
- package/package.json +55 -11
- package/public_api.d.ts +1 -0
- package/setting-drawer/package.json +5 -6
- package/setting-drawer/setting-drawer-item.component.d.ts +3 -0
- package/setting-drawer/setting-drawer.component.d.ts +3 -0
- package/setting-drawer/setting-drawer.d.ts +1 -0
- package/setting-drawer/setting-drawer.module.d.ts +18 -0
- package/setting-drawer/style/index.less +9 -0
- package/setting-drawer/style/rtl.less +1 -0
- package/src/locale/locale.module.d.ts +4 -0
- package/src/locale/locale.service.d.ts +3 -0
- package/src/pipes/date/date.pipe.d.ts +3 -0
- package/src/pipes/keys/keys.pipe.d.ts +3 -0
- package/src/pipes/safe/html.pipe.d.ts +3 -0
- package/src/pipes/safe/url.pipe.d.ts +3 -0
- package/src/pipes/yn/style/index.less +3 -0
- package/src/pipes/yn/yn.pipe.d.ts +3 -0
- package/src/services/drawer/drawer.helper.d.ts +3 -0
- package/src/services/http/http.client.d.ts +3 -0
- package/src/services/http/http.decorator.d.ts +3 -0
- package/src/services/i18n/i18n.d.ts +5 -0
- package/src/services/i18n/i18n.pipe.d.ts +3 -0
- package/src/services/menu/menu.service.d.ts +5 -0
- package/src/services/modal/modal.helper.d.ts +3 -0
- package/src/services/responsive/responsive.d.ts +3 -0
- package/src/services/rtl/rtl.service.d.ts +3 -0
- package/src/services/settings/settings.service.d.ts +9 -0
- package/src/services/title/title.service.d.ts +3 -0
- package/src/theme.module.d.ts +15 -0
- package/system/_preloader.less +10 -0
- package/system/_type.less +5 -0
- package/system/antd/_modal.less +5 -0
- package/system/antd/_table.less +7 -0
- package/system/index.less +3 -3
- package/system/mixins/_freak.less +2 -2
- package/system/mixins/_text-truncate.less +2 -0
- package/system/ng/_form.less +1 -0
- package/system/theme-default.less +3 -1
- package/system/utils/_display.less +9 -0
- package/system/utils/_other.less +2 -0
- package/system/utils/_scrollbar.less +3 -0
- package/system/widgets/_abs.less +3 -0
- package/system/widgets/_half-float.less +2 -0
- package/system/widgets/_masonry-grid.less +2 -0
- package/theme-btn/package.json +6 -7
- package/theme-btn/style/index.less +1 -0
- package/theme-btn/theme-btn.component.d.ts +3 -0
- package/theme-btn/{layout-theme-btn.d.ts → theme-btn.d.ts} +1 -0
- package/theme-btn/theme-btn.module.d.ts +8 -0
- package/theme-compact.less +1 -1
- package/theme-dark.less +1 -1
- package/theme-default.less +1 -1
- package/theme.d.ts +1 -1
- package/bundles/layout-blank.umd.js +0 -19
- package/bundles/layout-blank.umd.js.map +0 -1
- package/bundles/layout-default.umd.js +0 -876
- package/bundles/layout-default.umd.js.map +0 -1
- package/bundles/layout-theme-btn.umd.js +0 -141
- package/bundles/layout-theme-btn.umd.js.map +0 -1
- package/bundles/setting-drawer.umd.js +0 -789
- package/bundles/setting-drawer.umd.js.map +0 -1
- package/bundles/theme.umd.js +0 -3075
- package/bundles/theme.umd.js.map +0 -1
- package/esm2015/layout-default/layout-header-item-trigger.directive.js +0 -12
- package/esm2015/layout-default/layout-header-item.component.js +0 -23
- package/esm2015/layout-default/layout-header.component.js +0 -94
- package/esm2015/layout-default/layout-nav.component.js +0 -306
- package/esm2015/layout-default/layout.component.js +0 -102
- package/esm2015/layout-default/layout.module.js +0 -40
- package/esm2015/public_api.js +0 -24
- package/esm2015/setting-drawer/setting-drawer-item.component.js +0 -30
- package/esm2015/setting-drawer/setting-drawer.component.js +0 -185
- package/esm2015/setting-drawer/setting-drawer.module.js +0 -39
- package/esm2015/src/locale/locale.module.js +0 -14
- package/esm2015/src/locale/locale.service.js +0 -42
- package/esm2015/src/pipes/date/date.pipe.js +0 -23
- package/esm2015/src/pipes/keys/keys.pipe.js +0 -17
- package/esm2015/src/pipes/safe/html.pipe.js +0 -17
- package/esm2015/src/pipes/safe/url.pipe.js +0 -17
- package/esm2015/src/pipes/yn/yn.pipe.js +0 -37
- package/esm2015/src/router/optional-preloader.js +0 -23
- package/esm2015/src/services/drawer/drawer.helper.js +0 -90
- package/esm2015/src/services/http/http.client.js +0 -138
- package/esm2015/src/services/http/http.decorator.js +0 -207
- package/esm2015/src/services/i18n/i18n.js +0 -96
- package/esm2015/src/services/i18n/i18n.pipe.js +0 -17
- package/esm2015/src/services/menu/menu.service.js +0 -252
- package/esm2015/src/services/modal/modal.helper.js +0 -105
- package/esm2015/src/services/responsive/responsive.js +0 -48
- package/esm2015/src/services/rtl/rtl.service.js +0 -110
- package/esm2015/src/services/settings/settings.service.js +0 -82
- package/esm2015/src/services/title/title.service.js +0 -125
- package/esm2015/src/theme.module.js +0 -67
- package/esm2015/theme-btn/layout-theme-btn.js +0 -5
- package/esm2015/theme-btn/theme-btn.component.js +0 -103
- package/esm2015/theme-btn/theme-btn.module.js +0 -22
- package/esm2015/theme.js +0 -6
- package/fesm2015/layout-blank.js.map +0 -1
- package/fesm2015/layout-default.js +0 -561
- package/fesm2015/layout-default.js.map +0 -1
- package/fesm2015/layout-theme-btn.js +0 -129
- package/fesm2015/layout-theme-btn.js.map +0 -1
- package/fesm2015/setting-drawer.js +0 -448
- package/fesm2015/setting-drawer.js.map +0 -1
- package/fesm2015/theme.js.map +0 -1
- package/layout-blank/layout-blank.metadata.json +0 -1
- package/layout-default/layout-default.metadata.json +0 -1
- package/setting-drawer/setting-drawer.metadata.json +0 -1
- package/theme-btn/layout-theme-btn.metadata.json +0 -1
- package/theme.metadata.json +0 -1
|
@@ -1,90 +0,0 @@
|
|
|
1
|
-
import { Injectable } from '@angular/core';
|
|
2
|
-
import { Observable } from 'rxjs';
|
|
3
|
-
import { deepMerge } from '@delon/util/other';
|
|
4
|
-
import { NzDrawerService } from 'ng-zorro-antd/drawer';
|
|
5
|
-
import * as i0 from "@angular/core";
|
|
6
|
-
import * as i1 from "ng-zorro-antd/drawer";
|
|
7
|
-
/**
|
|
8
|
-
* 抽屉辅助类
|
|
9
|
-
*
|
|
10
|
-
* **注意:** 构建结果都可被订阅,但永远都不会触发 `observer.error`
|
|
11
|
-
*
|
|
12
|
-
* @example
|
|
13
|
-
* this.drawerHelper.create('Edit', FormEditComponent, { i }).subscribe(res => this.load());
|
|
14
|
-
* // 对于组件的成功&关闭的处理说明
|
|
15
|
-
* // 成功
|
|
16
|
-
* this.NzDrawerRef.close(data);
|
|
17
|
-
* this.NzDrawerRef.close(true);
|
|
18
|
-
* // 关闭
|
|
19
|
-
* this.NzDrawerRef.close();
|
|
20
|
-
* this.NzDrawerRef.close(false);
|
|
21
|
-
*/
|
|
22
|
-
export class DrawerHelper {
|
|
23
|
-
constructor(srv) {
|
|
24
|
-
this.srv = srv;
|
|
25
|
-
}
|
|
26
|
-
/**
|
|
27
|
-
* 构建一个抽屉
|
|
28
|
-
*/
|
|
29
|
-
create(title, comp, params, options) {
|
|
30
|
-
options = deepMerge({
|
|
31
|
-
size: 'md',
|
|
32
|
-
footer: true,
|
|
33
|
-
footerHeight: 50,
|
|
34
|
-
exact: true,
|
|
35
|
-
drawerOptions: {
|
|
36
|
-
nzPlacement: 'right',
|
|
37
|
-
nzWrapClassName: ''
|
|
38
|
-
}
|
|
39
|
-
}, options);
|
|
40
|
-
return new Observable((observer) => {
|
|
41
|
-
const { size, footer, footerHeight, drawerOptions } = options;
|
|
42
|
-
const defaultOptions = {
|
|
43
|
-
nzContent: comp,
|
|
44
|
-
nzContentParams: params,
|
|
45
|
-
nzTitle: title
|
|
46
|
-
};
|
|
47
|
-
if (typeof size === 'number') {
|
|
48
|
-
defaultOptions[drawerOptions.nzPlacement === 'top' || drawerOptions.nzPlacement === 'bottom' ? 'nzHeight' : 'nzWidth'] = options.size;
|
|
49
|
-
}
|
|
50
|
-
else if (!drawerOptions.nzWidth) {
|
|
51
|
-
defaultOptions.nzWrapClassName = `${drawerOptions.nzWrapClassName} drawer-${options.size}`.trim();
|
|
52
|
-
delete drawerOptions.nzWrapClassName;
|
|
53
|
-
}
|
|
54
|
-
if (footer) {
|
|
55
|
-
// The 24 value is @drawer-body-padding
|
|
56
|
-
defaultOptions.nzBodyStyle = {
|
|
57
|
-
'padding-bottom.px': footerHeight + 24
|
|
58
|
-
};
|
|
59
|
-
}
|
|
60
|
-
const subject = this.srv.create(Object.assign(Object.assign({}, defaultOptions), drawerOptions));
|
|
61
|
-
const afterClose$ = subject.afterClose.subscribe((res) => {
|
|
62
|
-
if (options.exact === true) {
|
|
63
|
-
if (res != null) {
|
|
64
|
-
observer.next(res);
|
|
65
|
-
}
|
|
66
|
-
}
|
|
67
|
-
else {
|
|
68
|
-
observer.next(res);
|
|
69
|
-
}
|
|
70
|
-
observer.complete();
|
|
71
|
-
afterClose$.unsubscribe();
|
|
72
|
-
});
|
|
73
|
-
});
|
|
74
|
-
}
|
|
75
|
-
/**
|
|
76
|
-
* 构建一个抽屉,点击蒙层不允许关闭
|
|
77
|
-
*/
|
|
78
|
-
static(title, comp, params, options) {
|
|
79
|
-
const drawerOptions = Object.assign({ nzMaskClosable: false }, (options && options.drawerOptions));
|
|
80
|
-
return this.create(title, comp, params, Object.assign(Object.assign({}, options), { drawerOptions }));
|
|
81
|
-
}
|
|
82
|
-
}
|
|
83
|
-
DrawerHelper.ɵprov = i0.ɵɵdefineInjectable({ factory: function DrawerHelper_Factory() { return new DrawerHelper(i0.ɵɵinject(i1.NzDrawerService)); }, token: DrawerHelper, providedIn: "root" });
|
|
84
|
-
DrawerHelper.decorators = [
|
|
85
|
-
{ type: Injectable, args: [{ providedIn: 'root' },] }
|
|
86
|
-
];
|
|
87
|
-
DrawerHelper.ctorParameters = () => [
|
|
88
|
-
{ type: NzDrawerService }
|
|
89
|
-
];
|
|
90
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHJhd2VyLmhlbHBlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL3RoZW1lL3NyYy9zZXJ2aWNlcy9kcmF3ZXIvZHJhd2VyLmhlbHBlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFxQixNQUFNLGVBQWUsQ0FBQztBQUM5RCxPQUFPLEVBQUUsVUFBVSxFQUFZLE1BQU0sTUFBTSxDQUFDO0FBRTVDLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUU5QyxPQUFPLEVBQWdDLGVBQWUsRUFBRSxNQUFNLHNCQUFzQixDQUFDOzs7QUE4QnJGOzs7Ozs7Ozs7Ozs7OztHQWNHO0FBRUgsTUFBTSxPQUFPLFlBQVk7SUFDdkIsWUFBb0IsR0FBb0I7UUFBcEIsUUFBRyxHQUFILEdBQUcsQ0FBaUI7SUFBRyxDQUFDO0lBRTVDOztPQUVHO0lBQ0gsTUFBTSxDQUNKLEtBQXlELEVBQ3pELElBS21CLEVBQ25CLE1BQWtCLEVBQ2xCLE9BQTZCO1FBRTdCLE9BQU8sR0FBRyxTQUFTLENBQ2pCO1lBQ0UsSUFBSSxFQUFFLElBQUk7WUFDVixNQUFNLEVBQUUsSUFBSTtZQUNaLFlBQVksRUFBRSxFQUFFO1lBQ2hCLEtBQUssRUFBRSxJQUFJO1lBQ1gsYUFBYSxFQUFFO2dCQUNiLFdBQVcsRUFBRSxPQUFPO2dCQUNwQixlQUFlLEVBQUUsRUFBRTthQUNwQjtTQUNGLEVBQ0QsT0FBTyxDQUNSLENBQUM7UUFDRixPQUFPLElBQUksVUFBVSxDQUFDLENBQUMsUUFBNkIsRUFBRSxFQUFFO1lBQ3RELE1BQU0sRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLFlBQVksRUFBRSxhQUFhLEVBQUUsR0FBRyxPQUE4QixDQUFDO1lBQ3JGLE1BQU0sY0FBYyxHQUFvQjtnQkFDdEMsU0FBUyxFQUFFLElBQUk7Z0JBQ2YsZUFBZSxFQUFFLE1BQU07Z0JBQ3ZCLE9BQU8sRUFBRSxLQUFrQjthQUM1QixDQUFDO1lBRUYsSUFBSSxPQUFPLElBQUksS0FBSyxRQUFRLEVBQUU7Z0JBQzVCLGNBQWMsQ0FDWixhQUFjLENBQUMsV0FBVyxLQUFLLEtBQUssSUFBSSxhQUFjLENBQUMsV0FBVyxLQUFLLFFBQVEsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQ3pHLEdBQUcsT0FBUSxDQUFDLElBQUksQ0FBQzthQUNuQjtpQkFBTSxJQUFJLENBQUMsYUFBYyxDQUFDLE9BQU8sRUFBRTtnQkFDbEMsY0FBYyxDQUFDLGVBQWUsR0FBRyxHQUFHLGFBQWMsQ0FBQyxlQUFlLFdBQVcsT0FBUSxDQUFDLElBQUksRUFBRSxDQUFDLElBQUksRUFBRSxDQUFDO2dCQUNwRyxPQUFPLGFBQWMsQ0FBQyxlQUFlLENBQUM7YUFDdkM7WUFFRCxJQUFJLE1BQU0sRUFBRTtnQkFDVix1Q0FBdUM7Z0JBQ3ZDLGNBQWMsQ0FBQyxXQUFXLEdBQUc7b0JBQzNCLG1CQUFtQixFQUFFLFlBQWEsR0FBRyxFQUFFO2lCQUN4QyxDQUFDO2FBQ0g7WUFFRCxNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0saUNBQU0sY0FBYyxHQUFLLGFBQWEsRUFBRyxDQUFDO1lBQ3pFLE1BQU0sV0FBVyxHQUFHLE9BQU8sQ0FBQyxVQUFVLENBQUMsU0FBUyxDQUFDLENBQUMsR0FBYyxFQUFFLEVBQUU7Z0JBQ2xFLElBQUksT0FBUSxDQUFDLEtBQUssS0FBSyxJQUFJLEVBQUU7b0JBQzNCLElBQUksR0FBRyxJQUFJLElBQUksRUFBRTt3QkFDZixRQUFRLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO3FCQUNwQjtpQkFDRjtxQkFBTTtvQkFDTCxRQUFRLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO2lCQUNwQjtnQkFDRCxRQUFRLENBQUMsUUFBUSxFQUFFLENBQUM7Z0JBQ3BCLFdBQVcsQ0FBQyxXQUFXLEVBQUUsQ0FBQztZQUM1QixDQUFDLENBQUMsQ0FBQztRQUNMLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVEOztPQUVHO0lBQ0gsTUFBTSxDQUNKLEtBQXlELEVBQ3pELElBS21CLEVBQ25CLE1BQWtCLEVBQ2xCLE9BQTZCO1FBRTdCLE1BQU0sYUFBYSxtQkFDakIsY0FBYyxFQUFFLEtBQUssSUFDbEIsQ0FBQyxPQUFPLElBQUksT0FBTyxDQUFDLGFBQWEsQ0FBQyxDQUN0QyxDQUFDO1FBQ0YsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxJQUFJLEVBQUUsTUFBTSxrQ0FBTyxPQUFPLEtBQUUsYUFBYSxJQUFHLENBQUM7SUFDekUsQ0FBQzs7OztZQXpGRixVQUFVLFNBQUMsRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFOzs7WUE3Q0ssZUFBZSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUsIFRlbXBsYXRlUmVmLCBUeXBlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBPYnNlcnZhYmxlLCBPYnNlcnZlciB9IGZyb20gJ3J4anMnO1xuXG5pbXBvcnQgeyBkZWVwTWVyZ2UgfSBmcm9tICdAZGVsb24vdXRpbC9vdGhlcic7XG5pbXBvcnQgdHlwZSB7IE56U2FmZUFueSB9IGZyb20gJ25nLXpvcnJvLWFudGQvY29yZS90eXBlcyc7XG5pbXBvcnQgeyBOekRyYXdlck9wdGlvbnMsIE56RHJhd2VyUmVmLCBOekRyYXdlclNlcnZpY2UgfSBmcm9tICduZy16b3Jyby1hbnRkL2RyYXdlcic7XG5cbmV4cG9ydCBpbnRlcmZhY2UgRHJhd2VySGVscGVyT3B0aW9ucyB7XG4gIC8qKlxuICAgKiDlpKflsI/vvIzoi6XlgLzkuLrmlbDlgLznsbvlnovvvIzliJnmoLnmja4gYG56UGxhY2VtZW50YCDoh6rliqjovazljJbkuLogYG56SGVpZ2h0YCDmiJYgYG56V2lkdGhg77yb5L6L5aaC77yabGfjgIE2MDDvvIzpu5jorqTvvJpgbWRgXG4gICAqXG4gICAqIHwg57G75Z6LIHwg6buY6K6k5aSn5bCPIHxcbiAgICogfCAtLS0gfCAtLS0tLS0gfFxuICAgKiB8IGBzbWAgfCBgMzAwYCB8XG4gICAqIHwgYG1kYCB8IGA2MDBgIHxcbiAgICogfCBgbGdgIHwgYDkwMGAgfFxuICAgKiB8IGB4bGAgfCBgMTIwMGAgfFxuICAgKlxuICAgKiA+IOS7peS4iuWAvO+8jOWPr+mAmui/h+imhuebluebuOW6lOeahExFU1Plj4LmlbDoh6rooYzosIPmlbRcbiAgICovXG4gIHNpemU/OiAnc20nIHwgJ21kJyB8ICdsZycgfCAneGwnIHwgbnVtYmVyO1xuICAvKipcbiAgICog5piv5ZCm5YyF5ZCr5bqV6YOo5bel5YW35p2h77yM6buY6K6k77yaYHRydWVgXG4gICAqL1xuICBmb290ZXI/OiBib29sZWFuO1xuICAvKipcbiAgICog5bqV6YOo5bel5YW35p2h6auY5bqm77yM6buY6K6k77yaYDU1YFxuICAgKi9cbiAgZm9vdGVySGVpZ2h0PzogbnVtYmVyO1xuICAvKiog5piv5ZCm57K+5YeG77yI6buY6K6k77yaYHRydWVg77yJ77yM6Iul6L+U5Zue5YC86Z2e56m65YC877yIYG51bGxg5oiWYHVuZGVmaW5lZGDvvInop4bkuLrmiJDlip/vvIzlkKbliJnop4bkuLrplJnor68gKi9cbiAgZXhhY3Q/OiBib29sZWFuO1xuICAvKiog5oq95bGJIFtOekRyYXdlck9wdGlvbnNdKGh0dHBzOi8vbmcuYW50LmRlc2lnbi9jb21wb25lbnRzL2RyYXdlci96aCNuemRyYXdlcm9wdGlvbnMpIOWPguaVsCAqL1xuICBkcmF3ZXJPcHRpb25zPzogTnpEcmF3ZXJPcHRpb25zO1xufVxuXG4vKipcbiAqIOaKveWxiei+heWKqeexu1xuICpcbiAqICoq5rOo5oSP77yaKiog5p6E5bu657uT5p6c6YO95Y+v6KKr6K6i6ZiF77yM5L2G5rC46L+c6YO95LiN5Lya6Kem5Y+RIGBvYnNlcnZlci5lcnJvcmBcbiAqXG4gKiBAZXhhbXBsZVxuICogdGhpcy5kcmF3ZXJIZWxwZXIuY3JlYXRlKCdFZGl0JywgRm9ybUVkaXRDb21wb25lbnQsIHsgaSB9KS5zdWJzY3JpYmUocmVzID0+IHRoaXMubG9hZCgpKTtcbiAqIC8vIOWvueS6jue7hOS7tueahOaIkOWKnyblhbPpl63nmoTlpITnkIbor7TmmI5cbiAqIC8vIOaIkOWKn1xuICogdGhpcy5OekRyYXdlclJlZi5jbG9zZShkYXRhKTtcbiAqIHRoaXMuTnpEcmF3ZXJSZWYuY2xvc2UodHJ1ZSk7XG4gKiAvLyDlhbPpl61cbiAqIHRoaXMuTnpEcmF3ZXJSZWYuY2xvc2UoKTtcbiAqIHRoaXMuTnpEcmF3ZXJSZWYuY2xvc2UoZmFsc2UpO1xuICovXG5ASW5qZWN0YWJsZSh7IHByb3ZpZGVkSW46ICdyb290JyB9KVxuZXhwb3J0IGNsYXNzIERyYXdlckhlbHBlciB7XG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgc3J2OiBOekRyYXdlclNlcnZpY2UpIHt9XG5cbiAgLyoqXG4gICAqIOaehOW7uuS4gOS4quaKveWxiVxuICAgKi9cbiAgY3JlYXRlKFxuICAgIHRpdGxlOiBzdHJpbmcgfCBUZW1wbGF0ZVJlZjxOelNhZmVBbnk+IHwgdW5kZWZpbmVkIHwgbnVsbCxcbiAgICBjb21wOlxuICAgICAgfCBUZW1wbGF0ZVJlZjx7XG4gICAgICAgICAgJGltcGxpY2l0OiBOelNhZmVBbnk7XG4gICAgICAgICAgZHJhd2VyUmVmOiBOekRyYXdlclJlZjtcbiAgICAgICAgfT5cbiAgICAgIHwgVHlwZTxOelNhZmVBbnk+LFxuICAgIHBhcmFtcz86IE56U2FmZUFueSxcbiAgICBvcHRpb25zPzogRHJhd2VySGVscGVyT3B0aW9uc1xuICApOiBPYnNlcnZhYmxlPE56U2FmZUFueT4ge1xuICAgIG9wdGlvbnMgPSBkZWVwTWVyZ2UoXG4gICAgICB7XG4gICAgICAgIHNpemU6ICdtZCcsXG4gICAgICAgIGZvb3RlcjogdHJ1ZSxcbiAgICAgICAgZm9vdGVySGVpZ2h0OiA1MCxcbiAgICAgICAgZXhhY3Q6IHRydWUsXG4gICAgICAgIGRyYXdlck9wdGlvbnM6IHtcbiAgICAgICAgICBuelBsYWNlbWVudDogJ3JpZ2h0JyxcbiAgICAgICAgICBueldyYXBDbGFzc05hbWU6ICcnXG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBvcHRpb25zXG4gICAgKTtcbiAgICByZXR1cm4gbmV3IE9ic2VydmFibGUoKG9ic2VydmVyOiBPYnNlcnZlcjxOelNhZmVBbnk+KSA9PiB7XG4gICAgICBjb25zdCB7IHNpemUsIGZvb3RlciwgZm9vdGVySGVpZ2h0LCBkcmF3ZXJPcHRpb25zIH0gPSBvcHRpb25zIGFzIERyYXdlckhlbHBlck9wdGlvbnM7XG4gICAgICBjb25zdCBkZWZhdWx0T3B0aW9uczogTnpEcmF3ZXJPcHRpb25zID0ge1xuICAgICAgICBuekNvbnRlbnQ6IGNvbXAsXG4gICAgICAgIG56Q29udGVudFBhcmFtczogcGFyYW1zLFxuICAgICAgICBuelRpdGxlOiB0aXRsZSBhcyBOelNhZmVBbnlcbiAgICAgIH07XG5cbiAgICAgIGlmICh0eXBlb2Ygc2l6ZSA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgZGVmYXVsdE9wdGlvbnNbXG4gICAgICAgICAgZHJhd2VyT3B0aW9ucyEubnpQbGFjZW1lbnQgPT09ICd0b3AnIHx8IGRyYXdlck9wdGlvbnMhLm56UGxhY2VtZW50ID09PSAnYm90dG9tJyA/ICduekhlaWdodCcgOiAnbnpXaWR0aCdcbiAgICAgICAgXSA9IG9wdGlvbnMhLnNpemU7XG4gICAgICB9IGVsc2UgaWYgKCFkcmF3ZXJPcHRpb25zIS5ueldpZHRoKSB7XG4gICAgICAgIGRlZmF1bHRPcHRpb25zLm56V3JhcENsYXNzTmFtZSA9IGAke2RyYXdlck9wdGlvbnMhLm56V3JhcENsYXNzTmFtZX0gZHJhd2VyLSR7b3B0aW9ucyEuc2l6ZX1gLnRyaW0oKTtcbiAgICAgICAgZGVsZXRlIGRyYXdlck9wdGlvbnMhLm56V3JhcENsYXNzTmFtZTtcbiAgICAgIH1cblxuICAgICAgaWYgKGZvb3Rlcikge1xuICAgICAgICAvLyBUaGUgMjQgdmFsdWUgaXMgQGRyYXdlci1ib2R5LXBhZGRpbmdcbiAgICAgICAgZGVmYXVsdE9wdGlvbnMubnpCb2R5U3R5bGUgPSB7XG4gICAgICAgICAgJ3BhZGRpbmctYm90dG9tLnB4JzogZm9vdGVySGVpZ2h0ISArIDI0XG4gICAgICAgIH07XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHN1YmplY3QgPSB0aGlzLnNydi5jcmVhdGUoeyAuLi5kZWZhdWx0T3B0aW9ucywgLi4uZHJhd2VyT3B0aW9ucyB9KTtcbiAgICAgIGNvbnN0IGFmdGVyQ2xvc2UkID0gc3ViamVjdC5hZnRlckNsb3NlLnN1YnNjcmliZSgocmVzOiBOelNhZmVBbnkpID0+IHtcbiAgICAgICAgaWYgKG9wdGlvbnMhLmV4YWN0ID09PSB0cnVlKSB7XG4gICAgICAgICAgaWYgKHJlcyAhPSBudWxsKSB7XG4gICAgICAgICAgICBvYnNlcnZlci5uZXh0KHJlcyk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIG9ic2VydmVyLm5leHQocmVzKTtcbiAgICAgICAgfVxuICAgICAgICBvYnNlcnZlci5jb21wbGV0ZSgpO1xuICAgICAgICBhZnRlckNsb3NlJC51bnN1YnNjcmliZSgpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICog5p6E5bu65LiA5Liq5oq95bGJ77yM54K55Ye76JKZ5bGC5LiN5YWB6K645YWz6ZetXG4gICAqL1xuICBzdGF0aWMoXG4gICAgdGl0bGU6IHN0cmluZyB8IFRlbXBsYXRlUmVmPE56U2FmZUFueT4gfCB1bmRlZmluZWQgfCBudWxsLFxuICAgIGNvbXA6XG4gICAgICB8IFRlbXBsYXRlUmVmPHtcbiAgICAgICAgICAkaW1wbGljaXQ6IE56U2FmZUFueTtcbiAgICAgICAgICBkcmF3ZXJSZWY6IE56RHJhd2VyUmVmO1xuICAgICAgICB9PlxuICAgICAgfCBUeXBlPE56U2FmZUFueT4sXG4gICAgcGFyYW1zPzogTnpTYWZlQW55LFxuICAgIG9wdGlvbnM/OiBEcmF3ZXJIZWxwZXJPcHRpb25zXG4gICk6IE9ic2VydmFibGU8TnpTYWZlQW55PiB7XG4gICAgY29uc3QgZHJhd2VyT3B0aW9ucyA9IHtcbiAgICAgIG56TWFza0Nsb3NhYmxlOiBmYWxzZSxcbiAgICAgIC4uLihvcHRpb25zICYmIG9wdGlvbnMuZHJhd2VyT3B0aW9ucylcbiAgICB9O1xuICAgIHJldHVybiB0aGlzLmNyZWF0ZSh0aXRsZSwgY29tcCwgcGFyYW1zLCB7IC4uLm9wdGlvbnMsIGRyYXdlck9wdGlvbnMgfSk7XG4gIH1cbn1cbiJdfQ==
|
|
@@ -1,138 +0,0 @@
|
|
|
1
|
-
/* eslint-disable @typescript-eslint/no-explicit-any */
|
|
2
|
-
import { HttpClient, HttpParams } from '@angular/common/http';
|
|
3
|
-
import { Injectable } from '@angular/core';
|
|
4
|
-
import { of } from 'rxjs';
|
|
5
|
-
import { delay, finalize, switchMap, tap } from 'rxjs/operators';
|
|
6
|
-
import { AlainConfigService } from '@delon/util/config';
|
|
7
|
-
import * as i0 from "@angular/core";
|
|
8
|
-
import * as i1 from "@angular/common/http";
|
|
9
|
-
import * as i2 from "@delon/util/config";
|
|
10
|
-
/**
|
|
11
|
-
* 封装HttpClient,主要解决:
|
|
12
|
-
* + 优化HttpClient在参数上便利性
|
|
13
|
-
* + 统一实现 loading
|
|
14
|
-
* + 统一处理时间格式问题
|
|
15
|
-
*/
|
|
16
|
-
export class _HttpClient {
|
|
17
|
-
constructor(http, cogSrv) {
|
|
18
|
-
this.http = http;
|
|
19
|
-
this.lc = 0;
|
|
20
|
-
this.cog = cogSrv.merge('themeHttp', {
|
|
21
|
-
nullValueHandling: 'include',
|
|
22
|
-
dateValueHandling: 'timestamp'
|
|
23
|
-
});
|
|
24
|
-
}
|
|
25
|
-
/**
|
|
26
|
-
* Get whether it's loading
|
|
27
|
-
*
|
|
28
|
-
* 获取是否正在加载中
|
|
29
|
-
*/
|
|
30
|
-
get loading() {
|
|
31
|
-
return this.lc > 0;
|
|
32
|
-
}
|
|
33
|
-
/**
|
|
34
|
-
* Get the currently loading count
|
|
35
|
-
*
|
|
36
|
-
* 获取当前加载中的数量
|
|
37
|
-
*/
|
|
38
|
-
get loadingCount() {
|
|
39
|
-
return this.lc;
|
|
40
|
-
}
|
|
41
|
-
parseParams(params) {
|
|
42
|
-
const newParams = {};
|
|
43
|
-
if (params instanceof HttpParams) {
|
|
44
|
-
return params;
|
|
45
|
-
}
|
|
46
|
-
Object.keys(params).forEach(key => {
|
|
47
|
-
let _data = params[key];
|
|
48
|
-
// 忽略空值
|
|
49
|
-
if (this.cog.nullValueHandling === 'ignore' && _data == null)
|
|
50
|
-
return;
|
|
51
|
-
// 将时间转化为:时间戳 (秒)
|
|
52
|
-
if (this.cog.dateValueHandling === 'timestamp' && _data instanceof Date) {
|
|
53
|
-
_data = _data.valueOf();
|
|
54
|
-
}
|
|
55
|
-
newParams[key] = _data;
|
|
56
|
-
});
|
|
57
|
-
return new HttpParams({ fromObject: newParams });
|
|
58
|
-
}
|
|
59
|
-
appliedUrl(url, params) {
|
|
60
|
-
if (!params)
|
|
61
|
-
return url;
|
|
62
|
-
url += ~url.indexOf('?') ? '' : '?';
|
|
63
|
-
const arr = [];
|
|
64
|
-
Object.keys(params).forEach(key => {
|
|
65
|
-
arr.push(`${key}=${params[key]}`);
|
|
66
|
-
});
|
|
67
|
-
return url + arr.join('&');
|
|
68
|
-
}
|
|
69
|
-
setCount(count) {
|
|
70
|
-
Promise.resolve(null).then(() => (this.lc = count <= 0 ? 0 : count));
|
|
71
|
-
}
|
|
72
|
-
push() {
|
|
73
|
-
this.setCount(++this.lc);
|
|
74
|
-
}
|
|
75
|
-
pop() {
|
|
76
|
-
this.setCount(--this.lc);
|
|
77
|
-
}
|
|
78
|
-
/**
|
|
79
|
-
* Clean loading count
|
|
80
|
-
*
|
|
81
|
-
* 清空加载中
|
|
82
|
-
*/
|
|
83
|
-
cleanLoading() {
|
|
84
|
-
this.setCount(0);
|
|
85
|
-
}
|
|
86
|
-
get(url, params, options = {}) {
|
|
87
|
-
return this.request('GET', url, Object.assign({ params }, options));
|
|
88
|
-
}
|
|
89
|
-
post(url, body, params, options = {}) {
|
|
90
|
-
return this.request('POST', url, Object.assign({ body,
|
|
91
|
-
params }, options));
|
|
92
|
-
}
|
|
93
|
-
delete(url, params, options = {}) {
|
|
94
|
-
return this.request('DELETE', url, Object.assign({ params }, options));
|
|
95
|
-
}
|
|
96
|
-
// #endregion
|
|
97
|
-
// #region jsonp
|
|
98
|
-
/**
|
|
99
|
-
* **JSONP Request**
|
|
100
|
-
*
|
|
101
|
-
* @param callbackParam CALLBACK值,默认:JSONP_CALLBACK
|
|
102
|
-
*/
|
|
103
|
-
jsonp(url, params, callbackParam = 'JSONP_CALLBACK') {
|
|
104
|
-
return of(null).pipe(
|
|
105
|
-
// Make sure to always be asynchronous, see issues: https://github.com/ng-alain/ng-alain/issues/1954
|
|
106
|
-
delay(0), tap(() => this.push()), switchMap(() => this.http.jsonp(this.appliedUrl(url, params), callbackParam)), finalize(() => this.pop()));
|
|
107
|
-
}
|
|
108
|
-
patch(url, body, params, options = {}) {
|
|
109
|
-
return this.request('PATCH', url, Object.assign({ body,
|
|
110
|
-
params }, options));
|
|
111
|
-
}
|
|
112
|
-
put(url, body, params, options = {}) {
|
|
113
|
-
return this.request('PUT', url, Object.assign({ body,
|
|
114
|
-
params }, options));
|
|
115
|
-
}
|
|
116
|
-
form(url, body, params, options = {}) {
|
|
117
|
-
return this.request('POST', url, Object.assign(Object.assign({ body,
|
|
118
|
-
params }, options), { headers: {
|
|
119
|
-
'content-type': `application/x-www-form-urlencoded`
|
|
120
|
-
} }));
|
|
121
|
-
}
|
|
122
|
-
request(method, url, options = {}) {
|
|
123
|
-
if (options.params)
|
|
124
|
-
options.params = this.parseParams(options.params);
|
|
125
|
-
return of(null).pipe(
|
|
126
|
-
// Make sure to always be asynchronous, see issues: https://github.com/ng-alain/ng-alain/issues/1954
|
|
127
|
-
delay(0), tap(() => this.push()), switchMap(() => this.http.request(method, url, options)), finalize(() => this.pop()));
|
|
128
|
-
}
|
|
129
|
-
}
|
|
130
|
-
_HttpClient.ɵprov = i0.ɵɵdefineInjectable({ factory: function _HttpClient_Factory() { return new _HttpClient(i0.ɵɵinject(i1.HttpClient), i0.ɵɵinject(i2.AlainConfigService)); }, token: _HttpClient, providedIn: "root" });
|
|
131
|
-
_HttpClient.decorators = [
|
|
132
|
-
{ type: Injectable, args: [{ providedIn: 'root' },] }
|
|
133
|
-
];
|
|
134
|
-
_HttpClient.ctorParameters = () => [
|
|
135
|
-
{ type: HttpClient },
|
|
136
|
-
{ type: AlainConfigService }
|
|
137
|
-
];
|
|
138
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaHR0cC5jbGllbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy90aGVtZS9zcmMvc2VydmljZXMvaHR0cC9odHRwLmNsaWVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSx1REFBdUQ7QUFDdkQsT0FBTyxFQUFFLFVBQVUsRUFBdUMsVUFBVSxFQUFnQixNQUFNLHNCQUFzQixDQUFDO0FBQ2pILE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDM0MsT0FBTyxFQUFjLEVBQUUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUN0QyxPQUFPLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBRSxTQUFTLEVBQUUsR0FBRyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFakUsT0FBTyxFQUFFLGtCQUFrQixFQUE4QixNQUFNLG9CQUFvQixDQUFDOzs7O0FBTXBGOzs7OztHQUtHO0FBRUgsTUFBTSxPQUFPLFdBQVc7SUFFdEIsWUFBb0IsSUFBZ0IsRUFBRSxNQUEwQjtRQUE1QyxTQUFJLEdBQUosSUFBSSxDQUFZO1FBTzVCLE9BQUUsR0FBRyxDQUFDLENBQUM7UUFOYixJQUFJLENBQUMsR0FBRyxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUMsV0FBVyxFQUFFO1lBQ25DLGlCQUFpQixFQUFFLFNBQVM7WUFDNUIsaUJBQWlCLEVBQUUsV0FBVztTQUMvQixDQUFFLENBQUM7SUFDTixDQUFDO0lBSUQ7Ozs7T0FJRztJQUNILElBQUksT0FBTztRQUNULE9BQU8sSUFBSSxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUM7SUFDckIsQ0FBQztJQUVEOzs7O09BSUc7SUFDSCxJQUFJLFlBQVk7UUFDZCxPQUFPLElBQUksQ0FBQyxFQUFFLENBQUM7SUFDakIsQ0FBQztJQUVELFdBQVcsQ0FBQyxNQUFpQjtRQUMzQixNQUFNLFNBQVMsR0FBYyxFQUFFLENBQUM7UUFDaEMsSUFBSSxNQUFNLFlBQVksVUFBVSxF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QWMsRUFDZCxHQUFXLEVBQ1gsVUFTSSxFQUFFO1FBRU4sSUFBSSxPQUFPLENBQUMsTUFBTTtZQUFFLE9BQU8sQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDdEUsT0FBTyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSTtRQUNsQixvR0FBb0c7UUFDcEcsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUNSLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUMsRUFDdEIsU0FBUyxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sRUFBRSxHQUFHLEVBQUUsT0FBTyxDQUFDLENBQUMsRUFDeEQsUUFBUSxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUMzQixDQUFDO0lBQ0osQ0FBQzs7OztZQTUvQkYsVUFBVSxTQUFDLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRTs7O1lBakJ6QixVQUFVO1lBS1Ysa0JBQWtCIiwic291cmNlc0NvbnRlbnQiOlsiLyogZXNsaW50LWRpc2FibGUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueSAqL1xuaW1wb3J0IHsgSHR0cENsaWVudCwgSHR0cENvbnRleHQsIEh0dHBFdmVudCwgSHR0cEhlYWRlcnMsIEh0dHBQYXJhbXMsIEh0dHBSZXNwb25zZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcbmltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE9ic2VydmFibGUsIG9mIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBkZWxheSwgZmluYWxpemUsIHN3aXRjaE1hcCwgdGFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuXG5pbXBvcnQgeyBBbGFpbkNvbmZpZ1NlcnZpY2UsIEFsYWluVGhlbWVIdHRwQ2xpZW50Q29uZmlnIH0gZnJvbSAnQGRlbG9uL3V0aWwvY29uZmlnJztcbmltcG9ydCB0eXBlIHsgTnpTYWZlQW55IH0gZnJvbSAnbmctem9ycm8tYW50ZC9jb3JlL3R5cGVzJztcblxuZXhwb3J0IHR5cGUgX0h0dHBIZWFkZXJzID0gSHR0cEhlYWRlcnMgfCB7IFtoZWFkZXI6IHN0cmluZ106IHN0cmluZyB8IHN0cmluZ1tdIH07XG5leHBvcnQgdHlwZSBIdHRwT2JzZXJ2ZSA9ICdib2R5JyB8ICdldmVudHMnIHwgJ3Jlc3BvbnNlJztcblxuLyoqXG4gKiDlsIHoo4VIdHRwQ2xpZW5077yM5Li76KaB6Kej5Yaz77yaXG4gKiArIOS8mOWMlkh0dHBDbGllbnTlnKjlj4LmlbDkuIrkvr/liKnmgKdcbiAqICsg57uf5LiA5a6e546wIGxvYWRpbmdcbiAqICsg57uf5LiA5aSE55CG5pe26Ze05qC85byP6Zeu6aKYXG4gKi9cbkBJbmplY3RhYmxlKHsgcHJvdmlkZWRJbjogJ3Jvb3QnIH0pXG5leHBvcnQgY2xhc3MgX0h0dHBDbGllbnQge1xuICBwcml2YXRlIGNvZzogQWxhaW5UaGVtZUh0dHBDbGllbnRDb25maWc7XG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgaHR0cDogSHR0cENsaWVudCwgY29nU3J2OiBBbGFpbkNvbmZpZ1NlcnZpY2UpIHtcbiAgICB0aGlzLmNvZyA9IGNvZ1Nydi5tZXJnZSgndGhlbWVIdHRwJywge1xuICAgICAgbnVsbFZhbHVlSGFuZGxpbmc6ICdpbmNsdWRlJyxcbiAgICAgIGRhdGVWYWx1ZUhhbmRsaW5nOiAndGltZXN0YW1wJ1xuICAgIH0pITtcbiAgfVxuXG4gIHByaXZhdGUgbGMgPSAwO1xuXG4gIC8qKlxuICAgKiBHZXQgd2hldGhlciBpdCdzIGxvYWRpbmdcbiAgICpcbiAgICog6I635Y+W5piv5ZCm5q2j5Zyo5Yqg6L295LitXG4gICAqL1xuICBnZXQgbG9hZGluZygpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5sYyA+IDA7XG4gIH1cblxuICAvKipcbiAgICogR2V0IHRoZSBjdXJyZW50bHkgbG9hZGluZyBjb3VudFxuICAgKlxuICAgKiDojrflj5blvZPliY3liqDovb3kuK3nmoTmlbDph49cbiAgICovXG4gIGdldCBsb2FkaW5nQ291bnQoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5sYztcbiAgfVxuXG4gIHBhcnNlUGFyYW1zKHBhcmFtczogTnpTYWZlQW55KTogSHR0cFBhcmFtcyB7XG4gICAgY29uc3QgbmV3UGFyYW1zOiBOelNhZmVBbnkgPSB7fTtcbiAgICBpZiAocGFyYW1zIGluc3RhbmNlb2YgSHR0cFBhcmFtcykge1xuICAgICAgcmV0dXJuIHBhcmFtcztcbiAgICB9XG5cbiAgICBPYmplY3Qua2V5cyhwYXJhbXMpLmZvckVhY2goa2V5ID0+IHtcbiAgICAgIGxldCBfZGF0YSA9IHBhcmFtc1trZXldO1xuICAgICAgLy8g5b+955Wl56m65YC8XG4gICAgICBpZiAodGhpcy5jb2cubnVsbFZhbHVlSGFuZGxpbmcgPT09ICdpZ25vcmUnICYmIF9kYXRhID09IG51bGwpIHJldHVybjtcbiAgICAgIC8vIOWwhuaXtumXtOi9rOWMluS4uu+8muaXtumXtOaIsyAo56eSKVxuICAgICAgaWYgKHRoaXMuY29nLmRhdGVWYWx1ZUhhbmRsaW5nID09PSAndGltZXN0YW1wJyAmJiBfZGF0YSBpbnN0YW5jZW9mIERhdGUpIHtcbiAgICAgICAgX2RhdGEgPSBfZGF0YS52YWx1ZU9mKCk7XG4gICAgICB9XG4gICAgICBuZXdQYXJhbXNba2V5XSA9IF9kYXRhO1xuICAgIH0pO1xuICAgIHJldHVybiBuZXcgSHR0cFBhcmFtcyh7IGZyb21PYmplY3Q6IG5ld1BhcmFtcyB9KTtcbiAgfVxuXG4gIGFwcGxpZWRVcmwodXJsOiBzdHJpbmcsIHBhcmFtcz86IE56U2FmZUFueSk6IHN0cmluZyB7XG4gICAgaWYgKCFwYXJhbXMpIHJldHVybiB1cmw7XG4gICAgdXJsICs9IH51cmwuaW5kZXhPZignPycpID8gJycgOiAnPyc7XG4gICAgY29uc3QgYXJyOiBzdHJpbmdbXSA9IFtdO1xuICAgIE9iamVjdC5rZXlzKHBhcmFtcykuZm9yRWFjaChrZXkgPT4ge1xuICAgICAgYXJyLnB1c2goYCR7a2V5fT0ke3BhcmFtc1trZXldfWApO1xuICAgIH0pO1xuICAgIHJldHVybiB1cmwgKyBhcnIuam9pbignJicpO1xuICB9XG5cbiAgcHJpdmF0ZSBzZXRDb3VudChjb3VudDogbnVtYmVyKTogdm9pZCB7XG4gICAgUHJvbWlzZS5yZXNvbHZlKG51bGwpLnRoZW4oKCkgPT4gKHRoaXMubGMgPSBjb3VudCA8PSAwID8gMCA6IGNvdW50KSk7XG4gIH1cblxuICBwcml2YXRlIHB1c2goKTogdm9pZCB7XG4gICAgdGhpcy5zZXRDb3VudCgrK3RoaXMubGMpO1xuICB9XG5cbiAgcHJpdmF0ZSBwb3AoKTogdm9pZCB7XG4gICAgdGhpcy5zZXRDb3VudCgtLXRoaXMubGMpO1xuICB9XG5cbiAgLyoqXG4gICAqIENsZWFuIGxvYWRpbmcgY291bnRcbiAgICpcbiAgICog5riF56m65Yqg6L295LitXG4gICAqL1xuICBjbGVhbkxvYWRpbmcoKTogdm9pZCB7XG4gICAgdGhpcy5zZXRDb3VudCgwKTtcbiAgfVxuXG4gIC8vICNyZWdpb24gZ2V0XG5cbiAgLyoqXG4gICAqICoqR0VUIFJlcXVlc3QqKiBSZXR1cm4gYSBgc3RyaW5nYCB0eXBlIC8g6L+U5Zue5LiA5LiqIGBzdHJpbmdgIOexu+Wei1xuICAgKi9cbiAgZ2V0KFxuICAgIHVybDogc3RyaW5nLFxuICAgIHBhcmFtczogYW55LFxuICAgIG9wdGlvbnM6IHtcbiAgICAgIGhlYWRlcnM/OiBfSHR0cEhlYWRlcnM7XG4gICAgICBvYnNlcnZlPzogJ2JvZHknO1xuICAgICAgcmVwb3J0UHJvZ3Jlc3M/OiBib29sZWFuO1xuICAgICAgcmVzcG9uc2VUeXBlOiAndGV4dCc7XG4gICAgICB3aXRoQ3JlZGVudGlhbHM/OiBib29sZWFuO1xuICAgICAgY29udGV4dD86IEh0dHBDb250ZXh0O1xuICAgIH1cbiAgKTogT2JzZXJ2YWJsZTxzdHJpbmc+O1xuXG4gIC8qKlxuICAgKiAqKkdFVCBSZXF1ZXN0KiogUmV0dXJuIGEgYEh0dHBFdmVudDxUPmAgdHlwZSAvIOi/lOWbnuS4gOS4qiBgSHR0cEV2ZW50PFQ+YCDnsbvlnotcbiAgICovXG4gIGdldDxUPihcbiAgICB1cmw6IHN0cmluZyxcbiAgICBwYXJhbXM6IGFueSxcbiAgICBvcHRpb25zOiB7XG4gICAgICBoZWFkZXJzPzogX0h0dHBIZWFkZXJzO1xuICAgICAgb2JzZXJ2ZTogJ2V2ZW50cyc7XG4gICAgICByZXBvcnRQcm9ncmVzcz86IGJvb2xlYW47XG4gICAgICByZXNwb25zZVR5cGU/OiAnYXJyYXlidWZmZXInIHwgJ2Jsb2InIHwgJ2pzb24nIHwgJ3RleHQnO1xuICAgICAgd2l0aENyZWRlbnRpYWxzPzogYm9vbGVhbjtcbiAgICAgIGNvbnRleHQ/OiBIdHRwQ29udGV4dDtcbiAgICB9XG4gICk6IE9ic2VydmFibGU8SHR0cEV2ZW50PFQ+PjtcblxuICAvKipcbiAgICogKipHRVQgUmVxdWVzdCoqIFJldHVybiBhIGBIdHRwUmVzcG9uc2U8YW55PmAgdHlwZSAvIOi/lOWbnuS4gOS4qiBgSHR0cFJlc3BvbnNlPGFueT5gIOexu+Wei1xuICAgKi9cbiAgZ2V0KFxuICAgIHVybDogc3RyaW5nLFxuICAgIHBhcmFtczogYW55LFxuICAgIG9wdGlvbnM6IHtcbiAgICAgIGhlYWRlcnM/OiBfSHR0cEhlYWRlcnM7XG4gICAgICBvYnNlcnZlOiAncmVzcG9uc2UnO1xuICAgICAgcmVwb3J0UHJvZ3Jlc3M/OiBib29sZWFuO1xuICAgICAgcmVzcG9uc2VUeXBlPzogJ2pzb24nO1xuICAgICAgd2l0aENyZWRlbnRpYWxzPzogYm9vbGVhbjtcbiAgICAgIGNvbnRleHQ/OiBIdHRwQ29udGV4dDtcbiAgICB9XG4gICk6IE9ic2VydmFibGU8SHR0cFJlc3BvbnNlPGFueT4+O1xuXG4gIC8qKlxuICAgKiAqKkdFVCBSZXF1ZXN0KiogUmV0dXJuIGEgYEh0dHBSZXNwb25zZTxUPmAgdHlwZSAvIOi/lOWbnuS4gOS4qiBgSHR0cFJlc3BvbnNlPFQ+YCDnsbvlnotcbiAgICovXG4gIGdldDxUPihcbiAgICB1cmw6IHN0cmluZyxcbiAgICBwYXJhbXM6IGFueSxcbiAgICBvcHRpb25zOiB7XG4gICAgICBoZWFkZXJzPzogX0h0dHBIZWFkZXJzO1xuICAgICAgb2JzZXJ2ZTogJ3Jlc3BvbnNlJztcbiAgICAgIHJlcG9ydFByb2dyZXNzPzogYm9vbGVhbjtcbiAgICAgIHJlc3BvbnNlVHlwZT86ICdhcnJheWJ1ZmZlcicgfCAnYmxvYicgfCAnanNvbicgfCAndGV4dCc7XG4gICAgICB3aXRoQ3JlZGVudGlhbHM/OiBib29sZWFuO1xuICAgICAgY29udGV4dD86IEh0dHBDb250ZXh0O1xuICAgIH1cbiAgKTogT2JzZXJ2YWJsZTxIdHRwUmVzcG9uc2U8VD4+O1xuXG4gIC8qKlxuICAgKiAqKkdFVCBSZXF1ZXN0KiogUmV0dXJuIGEgYGFueWAgdHlwZSAvIOi/lOWbnuS4gOS4qiBgYW55YCDnsbvlnotcbiAgICovXG4gIGdldChcbiAgICB1cmw6IHN0cmluZyxcbiAgICBwYXJhbXM/OiBhbnksXG4gICAgb3B0aW9ucz86IHtcbiAgICAgIGhlYWRlcnM/OiBfSHR0cEhlYWRlcnM7XG4gICAgICBvYnNlcnZlPzogJ2JvZHknIHwgJ2V2ZW50cycgfCAncmVzcG9uc2UnO1xuICAgICAgcmVwb3J0UHJvZ3Jlc3M/OiBib29sZWFuO1xuICAgICAgcmVzcG9uc2VUeXBlPzogJ2FycmF5YnVmZmVyJyB8ICdibG9iJyB8ICdqc29uJyB8ICd0ZXh0JztcbiAgICAgIHdpdGhDcmVkZW50aWFscz86IGJvb2xlYW47XG4gICAgICBjb250ZXh0PzogSHR0cENvbnRleHQ7XG4gICAgfVxuICApOiBPYnNlcnZhYmxlPGFueT47XG5cbiAgLyoqXG4gICAqICoqR0VUIFJlcXVlc3QqKiBSZXR1cm4gYSBnZW5lcmljIHR5cGUgLyDov5Tlm57kuIDkuKrms5vnsbvlnotcbiAgICovXG4gIGdldDxUPihcbiAgICB1cmw6IHN0cmluZyxcbiAgICBwYXJhbXM/OiBhbnksXG4gICAgb3B0aW9ucz86IHtcbiAgICAgIGhlYWRlcnM/OiBfSHR0cEhlYWRlcnM7XG4gICAgICBvYnNlcnZlOiAnYm9keSc7XG4gICAgICByZXBvcnRQcm9ncmVzcz86IGJvb2xlYW47XG4gICAgICByZXNwb25zZVR5cGU/OiAnanNvbic7XG4gICAgICB3aXRoQ3JlZGVudGlhbHM/OiBib29sZWFuO1xuICAgICAgY29udGV4dD86IEh0dHBDb250ZXh0O1xuICAgIH1cbiAgKTogT2JzZXJ2YWJsZTxUPjtcblxuICBnZXQoXG4gICAgdXJsOiBzdHJpbmcsXG4gICAgcGFyYW1zOiBhbnksXG4gICAgb3B0aW9uczoge1xuICAgICAgaGVhZGVycz86IF9IdHRwSGVhZGVycztcbiAgICAgIG9ic2VydmU/OiAnYm9keScgfCAnZXZlbnRzJyB8ICdyZXNwb25zZSc7XG4gICAgICByZXBvcnRQcm9ncmVzcz86IGJvb2xlYW47XG4gICAgICByZXNwb25zZVR5cGU/OiAnYXJyYXlidWZmZXInIHwgJ2Jsb2InIHwgJ2pzb24nIHwgJ3RleHQnO1xuICAgICAgd2l0aENyZWRlbnRpYWxzPzogYm9vbGVhbjtcbiAgICAgIGNvbnRleHQ/OiBIdHRwQ29udGV4dDtcbiAgICB9ID0ge31cbiAgKTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgICByZXR1cm4gdGhpcy5yZXF1ZXN0KCdHRVQnLCB1cmwsIHtcbiAgICAgIHBhcmFtcyxcbiAgICAgIC4uLm9wdGlvbnNcbiAgICB9KTtcbiAgfVxuXG4gIC8vICNlbmRyZWdpb25cblxuICAvLyAjcmVnaW9uIHBvc3RcblxuICAvKipcbiAgICogKipQT1NUIFJlcXVlc3QqKiBSZXR1cm4gYSBgc3RyaW5nYCB0eXBlIC8g6L+U5Zue5LiA5LiqIGBzdHJpbmdgIOexu+Wei1xuICAgKi9cbiAgcG9zdChcbiAgICB1cmw6IHN0cmluZyxcbiAgICBib2R5OiBhbnksXG4gICAgcGFyYW1zOiBhbnksXG4gICAgb3B0aW9uczoge1xuICAgICAgaGVhZGVycz86IF9IdHRwSGVhZGVycztcbiAgICAgIG9ic2VydmU/OiAnYm9keSc7XG4gICAgICByZXBvcnRQcm9ncmVzcz86IGJvb2xlYW47XG4gICAgICByZXNwb25zZVR5cGU6ICd0ZXh0JztcbiAgICAgIHdpdGhDcmVkZW50aWFscz86IGJvb2xlYW47XG4gICAgICBjb250ZXh0PzogSHR0cENvbnRleHQ7XG4gICAgfVxuICApOiBPYnNlcnZhYmxlPHN0cmluZz47XG5cbiAgLyoqXG4gICAqICoqUE9TVCBSZXF1ZXN0KiogUmV0dXJuIGEgYEh0dHBFdmVudDxUPmAgdHlwZSAvIOi/lOWbnuS4gOS4qiBgSHR0cEV2ZW50PFQ+YCDnsbvlnotcbiAgICovXG4gIHBvc3Q8VD4oXG4gICAgdXJsOiBzdHJpbmcsXG4gICAgYm9keTogYW55LFxuICAgIHBhcmFtczogYW55LFxuICAgIG9wdGlvbnM6IHtcbiAgICAgIGhlYWRlcnM/OiBfSHR0cEhlYWRlcnM7XG4gICAgICBvYnNlcnZlOiAnZXZlbnRzJztcbiAgICAgIHJlcG9ydFByb2dyZXNzPzogYm9vbGVhbjtcbiAgICAgIHJlc3BvbnNlVHlwZT86ICdhcnJheWJ1ZmZlcicgfCAnYmxvYicgfCAnanNvbicgfCAndGV4dCc7XG4gICAgICB3aXRoQ3JlZGVudGlhbHM/OiBib29sZWFuO1xuICAgICAgY29udGV4dD86IEh0dHBDb250ZXh0O1xuICAgIH1cbiAgKTogT2JzZXJ2YWJsZTxIdHRwRXZlbnQ8VD4+O1xuXG4gIC8qKlxuICAgKiAqKlBPU1QgUmVxdWVzdCoqIFJldHVybiBhIGBIdHRwUmVzcG9uc2U8YW55PmAgdHlwZSAvIOi/lOWbnuS4gOS4qiBgSHR0cFJlc3BvbnNlPGFueT5gIOexu+Wei1xuICAgKi9cbiAgcG9zdChcbiAgICB1cmw6IHN0cmluZyxcbiAgICBib2R5OiBhbnksXG4gICAgcGFyYW1zOiBhbnksXG4gICAgb3B0aW9uczoge1xuICAgICAgaGVhZGVycz86IF9IdHRwSGVhZGVycztcbiAgICAgIG9ic2VydmU6ICdyZXNwb25zZSc7XG4gICAgICByZXBvcnRQcm9ncmVzcz86IGJvb2xlYW47XG4gICAgICByZXNwb25zZVR5cGU/OiAnanNvbic7XG4gICAgICB3aXRoQ3JlZGVudGlhbHM/OiBib29sZWFuO1xuICAgICAgY29udGV4dD86IEh0dHBDb250ZXh0O1xuICAgIH1cbiAgKTogT2JzZXJ2YWJsZTxIdHRwUmVzcG9uc2U8YW55Pj47XG5cbiAgLyoqXG4gICAqICoqUE9TVCBSZXF1ZXN0KiogUmV0dXJuIGEgYGFueWAgdHlwZSAvIOi/lOWbnuS4gOS4qiBgYW55YCDnsbvlnotcbiAgICovXG4gIHBvc3QoXG4gICAgdXJsOiBzdHJpbmcsXG4gICAgYm9keT86IGFueSxcbiAgICBwYXJhbXM/OiBhbnksXG4gICAgb3B0aW9ucz86IHtcbiAgICAgIGhlYWRlcnM/OiBfSHR0cEhlYWRlcnM7XG4gICAgICBvYnNlcnZlPzogJ2JvZHknIHwgJ2V2ZW50cycgfCAncmVzcG9uc2UnO1xuICAgICAgcmVwb3J0UHJvZ3Jlc3M/OiBib29sZWFuO1xuICAgICAgcmVzcG9uc2VUeXBlPzogJ2FycmF5YnVmZmVyJyB8ICdibG9iJyB8ICdqc29uJyB8ICd0ZXh0JztcbiAgICAgIHdpdGhDcmVkZW50aWFscz86IGJvb2xlYW47XG4gICAgICBjb250ZXh0PzogSHR0cENvbnRleHQ7XG4gICAgfVxuICApOiBPYnNlcnZhYmxlPGFueT47XG5cbiAgLyoqXG4gICAqICoqUE9TVCBSZXF1ZXN0KiogUmV0dXJuIGEgSlNPTiB0eXBlIC8g6L+U5Zue5LiA5LiqIGBKU09OYCDnsbvlnotcbiAgICovXG4gIHBvc3Q8VD4oXG4gICAgdXJsOiBzdHJpbmcsXG4gICAgYm9keT86IGFueSxcbiAgICBwYXJhbXM/OiBhbnksXG4gICAgb3B0aW9ucz86IHtcbiAgICAgIGhlYWRlcnM/OiBfSHR0cEhlYWRlcnM7XG4gICAgICBvYnNlcnZlOiAncmVzcG9uc2UnO1xuICAgICAgcmVwb3J0UHJvZ3Jlc3M/OiBib29sZWFuO1xuICAgICAgcmVzcG9uc2VUeXBlPzogJ2pzb24nO1xuICAgICAgd2l0aENyZWRlbnRpYWxzPzogYm9vbGVhbjtcbiAgICAgIGNvbnRleHQ/OiBIdHRwQ29udGV4dDtcbiAgICB9XG4gICk6IE9ic2VydmFibGU8VD47XG5cbiAgcG9zdChcbiAgICB1cmw6IHN0cmluZyxcbiAgICBib2R5OiBhbnksXG4gICAgcGFyYW1zOiBhbnksXG4gICAgb3B0aW9uczoge1xuICAgICAgaGVhZGVycz86IF9IdHRwSGVhZGVycztcbiAgICAgIG9ic2VydmU/OiAnYm9keScgfCAnZXZlbnRzJyB8ICdyZXNwb25zZSc7XG4gICAgICByZXBvcnRQcm9ncmVzcz86IGJvb2xlYW47XG4gICAgICByZXNwb25zZVR5cGU/OiAnYXJyYXlidWZmZXInIHwgJ2Jsb2InIHwgJ2pzb24nIHwgJ3RleHQnO1xuICAgICAgd2l0aENyZWRlbnRpYWxzPzogYm9vbGVhbjtcbiAgICAgIGNvbnRleHQ/OiBIdHRwQ29udGV4dDtcbiAgICB9ID0ge31cbiAgKTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgICByZXR1cm4gdGhpcy5yZXF1ZXN0KCdQT1NUJywgdXJsLCB7XG4gICAgICBib2R5LFxuICAgICAgcGFyYW1zLFxuICAgICAgLi4ub3B0aW9uc1xuICAgIH0pO1xuICB9XG5cbiAgLy8gI2VuZHJlZ2lvblxuXG4gIC8vICNyZWdpb24gZGVsZXRlXG5cbiAgLyoqXG4gICAqICoqREVMRVRFIFJlcXVlc3QqKiBSZXR1cm4gYSBgc3RyaW5nYCB0eXBlIC8g6L+U5Zue5LiA5LiqIGBzdHJpbmdgIOexu+Wei1xuICAgKi9cbiAgZGVsZXRlKFxuICAgIHVybDogc3RyaW5nLFxuICAgIHBhcmFtczogYW55LFxuICAgIG9wdGlvbnM6IHtcbiAgICAgIGhlYWRlcnM/OiBfSHR0cEhlYWRlcnM7XG4gICAgICBvYnNlcnZlPzogJ2JvZHknO1xuICAgICAgcmVwb3J0UHJvZ3Jlc3M/OiBib29sZWFuO1xuICAgICAgcmVzcG9uc2VUeXBlOiAndGV4dCc7XG4gICAgICB3aXRoQ3JlZGVudGlhbHM/OiBib29sZWFuO1xuICAgICAgY29udGV4dD86IEh0dHBDb250ZXh0O1xuICAgIH1cbiAgKTogT2JzZXJ2YWJsZTxzdHJpbmc+O1xuXG4gIC8qKlxuICAgKiAqKkRFTEVURSBSZXF1ZXN0KiogUmV0dXJuIGEgYEpTT05gIHR5cGUgLyDov5Tlm57kuIDkuKogYEpTT05gIOexu+Wei1xuICAgKi9cbiAgZGVsZXRlKFxuICAgIHVybDogc3RyaW5nLFxuICAgIHBhcmFtczogYW55LFxuICAgIG9wdGlvbnM6IHtcbiAgICAgIGhlYWRlcnM/OiBfSHR0cEhlYWRlcnM7XG4gICAgICBvYnNlcnZlOiAncmVzcG9uc2UnO1xuICAgICAgcmVwb3J0UHJvZ3Jlc3M/OiBib29sZWFuO1xuICAgICAgcmVzcG9uc2VUeXBlPzogJ2pzb24nO1xuICAgICAgd2l0aENyZWRlbnRpYWxzPzogYm9vbGVhbjtcbiAgICAgIGNvbnRleHQ/OiBIdHRwQ29udGV4dDtcbiAgICB9XG4gICk6IE9ic2VydmFibGU8SHR0cFJlc3BvbnNlPE56U2FmZUFueT4+O1xuXG4gIC8qKlxuICAgKiAqKkRFTEVURSBSZXF1ZXN0KiogUmV0dXJuIGEgYGFueWAgdHlwZSAvIOi/lOWbnuS4gOS4qiBgYW55YCDnsbvlnotcbiAgICovXG4gIGRlbGV0ZShcbiAgICB1cmw6IHN0cmluZyxcbiAgICBwYXJhbXM/OiBhbnksXG4gICAgb3B0aW9ucz86IHtcbiAgICAgIGhlYWRlcnM/OiBfSHR0cEhlYWRlcnM7XG4gICAgICBvYnNlcnZlPzogJ2JvZHknIHwgJ2V2ZW50cycgfCAncmVzcG9uc2UnO1xuICAgICAgcmVwb3J0UHJvZ3Jlc3M/OiBib29sZWFuO1xuICAgICAgcmVzcG9uc2VUeXBlPzogJ2FycmF5YnVmZmVyJyB8ICdibG9iJyB8ICdqc29uJyB8ICd0ZXh0JztcbiAgICAgIHdpdGhDcmVkZW50aWFscz86IGJvb2xlYW47XG4gICAgICBjb250ZXh0PzogSHR0cENvbnRleHQ7XG4gICAgfVxuICApOiBPYnNlcnZhYmxlPGFueT47XG5cbiAgLyoqXG4gICAqIGPov5Tlm57kuIDkuKrms5vnsbvlnotcbiAgICovXG4gIGRlbGV0ZTxUPihcbiAgICB1cmw6IHN0cmluZyxcbiAgICBwYXJhbXM/OiBhbnksXG4gICAgb3B0aW9ucz86IHtcbiAgICAgIGhlYWRlcnM/OiBfSHR0cEhlYWRlcnM7XG4gICAgICBvYnNlcnZlPzogJ2JvZHknIHwgJ2V2ZW50cycgfCAncmVzcG9uc2UnO1xuICAgICAgcmVwb3J0UHJvZ3Jlc3M/OiBib29sZWFuO1xuICAgICAgcmVzcG9uc2VUeXBlPzogJ2FycmF5YnVmZmVyJyB8ICdibG9iJyB8ICdqc29uJyB8ICd0ZXh0JztcbiAgICAgIHdpdGhDcmVkZW50aWFscz86IGJvb2xlYW47XG4gICAgICBjb250ZXh0PzogSHR0cENvbnRleHQ7XG4gICAgfVxuICApOiBPYnNlcnZhYmxlPFQ+O1xuXG4gIGRlbGV0ZShcbiAgICB1cmw6IHN0cmluZyxcbiAgICBwYXJhbXM6IGFueSxcbiAgICBvcHRpb25zOiB7XG4gICAgICBoZWFkZXJzPzogX0h0dHBIZWFkZXJzO1xuICAgICAgb2JzZXJ2ZT86ICdib2R5JyB8ICdldmVudHMnIHwgJ3Jlc3BvbnNlJztcbiAgICAgIHJlcG9ydFByb2dyZXNzPzogYm9vbGVhbjtcbiAgICAgIHJlc3BvbnNlVHlwZT86ICdhcnJheWJ1ZmZlcicgfCAnYmxvYicgfCAnanNvbicgfCAndGV4dCc7XG4gICAgICB3aXRoQ3JlZGVudGlhbHM/OiBib29sZWFuO1xuICAgICAgY29udGV4dD86IEh0dHBDb250ZXh0O1xuICAgIH0gPSB7fVxuICApOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgIHJldHVybiB0aGlzLnJlcXVlc3QoJ0RFTEVURScsIHVybCwge1xuICAgICAgcGFyYW1zLFxuICAgICAgLi4ub3B0aW9uc1xuICAgIH0pO1xuICB9XG5cbiAgLy8gI2VuZHJlZ2lvblxuXG4gIC8vICNyZWdpb24ganNvbnBcblxuICAvKipcbiAgICogKipKU09OUCBSZXF1ZXN0KipcbiAgICpcbiAgICogQHBhcmFtIGNhbGxiYWNrUGFyYW0gQ0FMTEJBQ0vlgLzvvIzpu5jorqTvvJpKU09OUF9DQUxMQkFDS1xuICAgKi9cbiAganNvbnAodXJsOiBzdHJpbmcsIHBhcmFtcz86IGFueSwgY2FsbGJhY2tQYXJhbTogc3RyaW5nID0gJ0pTT05QX0NBTExCQUNLJyk6IE9ic2VydmFibGU8YW55PiB7XG4gICAgcmV0dXJuIG9mKG51bGwpLnBpcGUoXG4gICAgICAvLyBNYWtlIHN1cmUgdG8gYWx3YXlzIGJlIGFzeW5jaHJvbm91cywgc2VlIGlzc3VlczogaHR0cHM6Ly9naXRodWIuY29tL25nLWFsYWluL25nLWFsYWluL2lzc3Vlcy8xOTU0XG4gICAgICBkZWxheSgwKSxcbiAgICAgIHRhcCgoKSA9PiB0aGlzLnB1c2goKSksXG4gICAgICBzd2l0Y2hNYXAoKCkgPT4gdGhpcy5odHRwLmpzb25wKHRoaXMuYXBwbGllZFVybCh1cmwsIHBhcmFtcyksIGNhbGxiYWNrUGFyYW0pKSxcbiAgICAgIGZpbmFsaXplKCgpID0+IHRoaXMucG9wKCkpXG4gICAgKTtcbiAgfVxuXG4gIC8vICNlbmRyZWdpb25cblxuICAvLyAjcmVnaW9uIHBhdGNoXG5cbiAgLyoqXG4gICAqICoqUEFUQ0ggUmVxdWVzdCoqIFJldHVybiBhIGBzdHJpbmdgIHR5cGUgLyDov5Tlm57kuIDkuKogYHN0cmluZ2Ag57G75Z6LXG4gICAqL1xuICBwYXRjaChcbiAgICB1cmw6IHN0cmluZyxcbiAgICBib2R5OiBhbnksXG4gICAgcGFyYW1zOiBhbnksXG4gICAgb3B0aW9uczoge1xuICAgICAgaGVhZGVycz86IF9IdHRwSGVhZGVycztcbiAgICAgIG9ic2VydmU/OiAnYm9keSc7XG4gICAgICByZXBvcnRQcm9ncmVzcz86IGJvb2xlYW47XG4gICAgICByZXNwb25zZVR5cGU6ICd0ZXh0JztcbiAgICAgIHdpdGhDcmVkZW50aWFscz86IGJvb2xlYW47XG4gICAgICBjb250ZXh0PzogSHR0cENvbnRleHQ7XG4gICAgfVxuICApOiBPYnNlcnZhYmxlPHN0cmluZz47XG5cbiAgLyoqXG4gICAqICoqUEFUQ0ggUmVxdWVzdCoqIFJldHVybiBhIGBIdHRwUmVzcG9uc2U8SlNPTj5gIHR5cGUgLyDov5Tlm57kuIDkuKogYEh0dHBSZXNwb25zZTxKU09OPmAg57G75Z6LXG4gICAqL1xuICBwYXRjaChcbiAgICB1cmw6IHN0cmluZyxcbiAgICBib2R5OiBhbnksXG4gICAgcGFyYW1zOiBhbnksXG4gICAgb3B0aW9uczoge1xuICAgICAgaGVhZGVycz86IF9IdHRwSGVhZGVycztcbiAgICAgIG9ic2VydmU6ICdyZXNwb25zZSc7XG4gICAgICByZXBvcnRQcm9ncmVzcz86IGJvb2xlYW47XG4gICAgICByZXNwb25zZVR5cGU/OiAnanNvbic7XG4gICAgICB3aXRoQ3JlZGVudGlhbHM/OiBib29sZWFuO1xuICAgICAgY29udGV4dD86IEh0dHBDb250ZXh0O1xuICAgIH1cbiAgKTogT2JzZXJ2YWJsZTxIdHRwUmVzcG9uc2U8TnpTYWZlQW55Pj47XG5cbiAgLyoqXG4gICAqICoqUEFUQ0ggUmVxdWVzdCoqIFJldHVybiBhIGBhbnlgIHR5cGUgLyDov5Tlm57kuIDkuKogYGFueWAg57G75Z6LXG4gICAqL1xuICBwYXRjaChcbiAgICB1cmw6IHN0cmluZyxcbiAgICBib2R5PzogYW55LFxuICAgIHBhcmFtcz86IGFueSxcbiAgICBvcHRpb25zPzoge1xuICAgICAgaGVhZGVycz86IF9IdHRwSGVhZGVycztcbiAgICAgIG9ic2VydmU/OiAnYm9keScgfCAnZXZlbnRzJyB8ICdyZXNwb25zZSc7XG4gICAgICByZXBvcnRQcm9ncmVzcz86IGJvb2xlYW47XG4gICAgICByZXNwb25zZVR5cGU/OiAnYXJyYXlidWZmZXInIHwgJ2Jsb2InIHwgJ2pzb24nIHwgJ3RleHQnO1xuICAgICAgd2l0aENyZWRlbnRpYWxzPzogYm9vbGVhbjtcbiAgICAgIGNvbnRleHQ/OiBIdHRwQ29udGV4dDtcbiAgICB9XG4gICk6IE9ic2VydmFibGU8YW55PjtcblxuICAvKipcbiAgICogKipQQVRDSCBSZXF1ZXN0KiogUmV0dXJuIGEgYEpTT05gIHR5cGUgLyDov5Tlm57kuIDkuKogYEpTT05gIOexu+Wei1xuICAgKi9cbiAgcGF0Y2g8VD4oXG4gICAgdXJsOiBzdHJpbmcsXG4gICAgYm9keT86IGFueSxcbiAgICBwYXJhbXM/OiBhbnksXG4gICAgb3B0aW9ucz86IHtcbiAgICAgIGhlYWRlcnM/OiBfSHR0cEhlYWRlcnM7XG4gICAgICBvYnNlcnZlOiAncmVzcG9uc2UnO1xuICAgICAgcmVwb3J0UHJvZ3Jlc3M/OiBib29sZWFuO1xuICAgICAgcmVzcG9uc2VUeXBlPzogJ2pzb24nO1xuICAgICAgd2l0aENyZWRlbnRpYWxzPzogYm9vbGVhbjtcbiAgICAgIGNvbnRleHQ/OiBIdHRwQ29udGV4dDtcbiAgICB9XG4gICk6IE9ic2VydmFibGU8VD47XG5cbiAgcGF0Y2goXG4gICAgdXJsOiBzdHJpbmcsXG4gICAgYm9keTogYW55LFxuICAgIHBhcmFtczogYW55LFxuICAgIG9wdGlvbnM6IHtcbiAgICAgIGhlYWRlcnM/OiBfSHR0cEhlYWRlcnM7XG4gICAgICBvYnNlcnZlPzogJ2JvZHknIHwgJ2V2ZW50cycgfCAncmVzcG9uc2UnO1xuICAgICAgcmVwb3J0UHJvZ3Jlc3M/OiBib29sZWFuO1xuICAgICAgcmVzcG9uc2VUeXBlPzogJ2FycmF5YnVmZmVyJyB8ICdibG9iJyB8ICdqc29uJyB8ICd0ZXh0JztcbiAgICAgIHdpdGhDcmVkZW50aWFscz86IGJvb2xlYW47XG4gICAgICBjb250ZXh0PzogSHR0cENvbnRleHQ7XG4gICAgfSA9IHt9XG4gICk6IE9ic2VydmFibGU8YW55PiB7XG4gICAgcmV0dXJuIHRoaXMucmVxdWVzdCgnUEFUQ0gnLCB1cmwsIHtcbiAgICAgIGJvZHksXG4gICAgICBwYXJhbXMsXG4gICAgICAuLi5vcHRpb25zXG4gICAgfSk7XG4gIH1cblxuICAvLyAjZW5kcmVnaW9uXG5cbiAgLy8gI3JlZ2lvbiBwdXRcblxuICAvKipcbiAgICogKipQVVQgUmVxdWVzdCoqIFJldHVybiBhIGBzdHJpbmdgIHR5cGUgLyDov5Tlm57kuIDkuKogYHN0cmluZ2Ag57G75Z6LXG4gICAqL1xuICBwdXQoXG4gICAgdXJsOiBzdHJpbmcsXG4gICAgYm9keTogYW55LFxuICAgIHBhcmFtczogYW55LFxuICAgIG9wdGlvbnM6IHtcbiAgICAgIGhlYWRlcnM/OiBfSHR0cEhlYWRlcnM7XG4gICAgICBvYnNlcnZlPzogJ2JvZHknO1xuICAgICAgcmVwb3J0UHJvZ3Jlc3M/OiBib29sZWFuO1xuICAgICAgcmVzcG9uc2VUeXBlOiAndGV4dCc7XG4gICAgICB3aXRoQ3JlZGVudGlhbHM/OiBib29sZWFuO1xuICAgICAgY29udGV4dD86IEh0dHBDb250ZXh0O1xuICAgIH1cbiAgKTogT2JzZXJ2YWJsZTxzdHJpbmc+O1xuXG4gIC8qKlxuICAgKiAqKlBVVCBSZXF1ZXN0KiogUmV0dXJuIGEgYEh0dHBSZXNwb25zZTxKU09OPmAgdHlwZSAvIOi/lOWbnuS4gOS4qiBgSHR0cFJlc3BvbnNlPEpTT04+YCDnsbvlnotcbiAgICovXG4gIHB1dChcbiAgICB1cmw6IHN0cmluZyxcbiAgICBib2R5OiBhbnksXG4gICAgcGFyYW1zOiBhbnksXG4gICAgb3B0aW9uczoge1xuICAgICAgaGVhZGVycz86IF9IdHRwSGVhZGVycztcbiAgICAgIG9ic2VydmU6ICdyZXNwb25zZSc7XG4gICAgICByZXBvcnRQcm9ncmVzcz86IGJvb2xlYW47XG4gICAgICByZXNwb25zZVR5cGU/OiAnanNvbic7XG4gICAgICB3aXRoQ3JlZGVudGlhbHM/OiBib29sZWFuO1xuICAgICAgY29udGV4dD86IEh0dHBDb250ZXh0O1xuICAgIH1cbiAgKTogT2JzZXJ2YWJsZTxIdHRwUmVzcG9uc2U8TnpTYWZlQW55Pj47XG5cbiAgLyoqXG4gICAqICoqUFVUIFJlcXVlc3QqKiBSZXR1cm4gYSBgYW55YCB0eXBlIC8g6L+U5Zue5LiA5LiqIGBhbnlgIOexu+Wei1xuICAgKi9cbiAgcHV0KFxuICAgIHVybDogc3RyaW5nLFxuICAgIGJvZHk/OiBhbnksXG4gICAgcGFyYW1zPzogYW55LFxuICAgIG9wdGlvbnM/OiB7XG4gICAgICBoZWFkZXJzPzogX0h0dHBIZWFkZXJzO1xuICAgICAgb2JzZXJ2ZT86ICdib2R5JyB8ICdldmVudHMnIHwgJ3Jlc3BvbnNlJztcbiAgICAgIHJlcG9ydFByb2dyZXNzPzogYm9vbGVhbjtcbiAgICAgIHJlc3BvbnNlVHlwZT86ICdhcnJheWJ1ZmZlcicgfCAnYmxvYicgfCAnanNvbicgfCAndGV4dCc7XG4gICAgICB3aXRoQ3JlZGVudGlhbHM/OiBib29sZWFuO1xuICAgICAgY29udGV4dD86IEh0dHBDb250ZXh0O1xuICAgIH1cbiAgKTogT2JzZXJ2YWJsZTxhbnk+O1xuXG4gIC8qKlxuICAgKiAqKlBVVCBSZXF1ZXN0KiogUmV0dXJuIGEgYEpTT05gIHR5cGUgLyDov5Tlm57kuIDkuKogYEpTT05gIOexu+Wei1xuICAgKi9cbiAgcHV0PFQ+KFxuICAgIHVybDogc3RyaW5nLFxuICAgIGJvZHk/OiBhbnksXG4gICAgcGFyYW1zPzogYW55LFxuICAgIG9wdGlvbnM/OiB7XG4gICAgICBoZWFkZXJzPzogX0h0dHBIZWFkZXJzO1xuICAgICAgb2JzZXJ2ZTogJ3Jlc3BvbnNlJztcbiAgICAgIHJlcG9ydFByb2dyZXNzPzogYm9vbGVhbjtcbiAgICAgIHJlc3BvbnNlVHlwZT86ICdqc29uJztcbiAgICAgIHdpdGhDcmVkZW50aWFscz86IGJvb2xlYW47XG4gICAgICBjb250ZXh0PzogSHR0cENvbnRleHQ7XG4gICAgfVxuICApOiBPYnNlcnZhYmxlPFQ+O1xuXG4gIHB1dChcbiAgICB1cmw6IHN0cmluZyxcbiAgICBib2R5OiBhbnksXG4gICAgcGFyYW1zOiBhbnksXG4gICAgb3B0aW9uczoge1xuICAgICAgaGVhZGVycz86IF9IdHRwSGVhZGVycztcbiAgICAgIG9ic2VydmU/OiAnYm9keScgfCAnZXZlbnRzJyB8ICdyZXNwb25zZSc7XG4gICAgICByZXBvcnRQcm9ncmVzcz86IGJvb2xlYW47XG4gICAgICByZXNwb25zZVR5cGU/OiAnYXJyYXlidWZmZXInIHwgJ2Jsb2InIHwgJ2pzb24nIHwgJ3RleHQnO1xuICAgICAgd2l0aENyZWRlbnRpYWxzPzogYm9vbGVhbjtcbiAgICAgIGNvbnRleHQ/OiBIdHRwQ29udGV4dDtcbiAgICB9ID0ge31cbiAgKTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgICByZXR1cm4gdGhpcy5yZXF1ZXN0KCdQVVQnLCB1cmwsIHtcbiAgICAgIGJvZHksXG4gICAgICBwYXJhbXMsXG4gICAgICAuLi5vcHRpb25zXG4gICAgfSk7XG4gIH1cblxuICAvLyAjZW5kcmVnaW9uXG5cbiAgLy8gI3JlZ2lvbiBmb3JtXG5cbiAgLyoqXG4gICAqICoqRm9ybSBSZXF1ZXN0KiogUmV0dXJuIGEgYHN0cmluZ2AgdHlwZSAvIOi/lOWbnuS4gOS4qiBgc3RyaW5nYCDnsbvlnotcbiAgICovXG4gIGZvcm0oXG4gICAgdXJsOiBzdHJpbmcsXG4gICAgYm9keTogYW55LFxuICAgIHBhcmFtczogYW55LFxuICAgIG9wdGlvbnM6IHtcbiAgICAgIGhlYWRlcnM/OiBfSHR0cEhlYWRlcnM7XG4gICAgICBvYnNlcnZlPzogJ2JvZHknO1xuICAgICAgcmVwb3J0UHJvZ3Jlc3M/OiBib29sZWFuO1xuICAgICAgcmVzcG9uc2VUeXBlOiAndGV4dCc7XG4gICAgICB3aXRoQ3JlZGVudGlhbHM/OiBib29sZWFuO1xuICAgICAgY29udGV4dD86IEh0dHBDb250ZXh0O1xuICAgIH1cbiAgKTogT2JzZXJ2YWJsZTxzdHJpbmc+O1xuXG4gIC8qKlxuICAgKiAqKkZvcm0gUmVxdWVzdCoqIFJldHVybiBhIGBIdHRwRXZlbnQ8VD5gIHR5cGUgLyDov5Tlm57kuIDkuKogYEh0dHBFdmVudDxUPmAg57G75Z6LXG4gICAqL1xuICBmb3JtPFQ+KFxuICAgIHVybDogc3RyaW5nLFxuICAgIGJvZHk6IGFueSxcbiAgICBwYXJhbXM6IGFueSxcbiAgICBvcHRpb25zOiB7XG4gICAgICBoZWFkZXJzPzogX0h0dHBIZWFkZXJzO1xuICAgICAgb2JzZXJ2ZTogJ2V2ZW50cyc7XG4gICAgICByZXBvcnRQcm9ncmVzcz86IGJvb2xlYW47XG4gICAgICByZXNwb25zZVR5cGU/OiAnYXJyYXlidWZmZXInIHwgJ2Jsb2InIHwgJ2pzb24nIHwgJ3RleHQnO1xuICAgICAgd2l0aENyZWRlbnRpYWxzPzogYm9vbGVhbjtcbiAgICAgIGNvbnRleHQ/OiBIdHRwQ29udGV4dDtcbiAgICB9XG4gICk6IE9ic2VydmFibGU8SHR0cEV2ZW50PFQ+PjtcblxuICAvKipcbiAgICogKipGb3JtIFJlcXVlc3QqKiBSZXR1cm4gYSBgSHR0cFJlc3BvbnNlPEpTT04+YCB0eXBlIC8g6L+U5Zue5LiA5LiqIGBIdHRwUmVzcG9uc2U8SlNPTj5gIOexu+Wei1xuICAgKi9cbiAgZm9ybShcbiAgICB1cmw6IHN0cmluZyxcbiAgICBib2R5OiBhbnksXG4gICAgcGFyYW1zOiBhbnksXG4gICAgb3B0aW9uczoge1xuICAgICAgaGVhZGVycz86IF9IdHRwSGVhZGVycztcbiAgICAgIG9ic2VydmU6ICdyZXNwb25zZSc7XG4gICAgICByZXBvcnRQcm9ncmVzcz86IGJvb2xlYW47XG4gICAgICByZXNwb25zZVR5cGU/OiAnanNvbic7XG4gICAgICB3aXRoQ3JlZGVudGlhbHM/OiBib29sZWFuO1xuICAgICAgY29udGV4dD86IEh0dHBDb250ZXh0O1xuICAgIH1cbiAgKTogT2JzZXJ2YWJsZTxIdHRwUmVzcG9uc2U8YW55Pj47XG5cbiAgLyoqXG4gICAqICoqRm9ybSBSZXF1ZXN0KiogUmV0dXJuIGEgYGFueWAgdHlwZSAvIOi/lOWbnuS4gOS4qiBgYW55YCDnsbvlnotcbiAgICovXG4gIGZvcm0oXG4gICAgdXJsOiBzdHJpbmcsXG4gICAgYm9keT86IGFueSxcbiAgICBwYXJhbXM/OiBhbnksXG4gICAgb3B0aW9ucz86IHtcbiAgICAgIGhlYWRlcnM/OiBfSHR0cEhlYWRlcnM7XG4gICAgICBvYnNlcnZlPzogJ2JvZHknIHwgJ2V2ZW50cycgfCAncmVzcG9uc2UnO1xuICAgICAgcmVwb3J0UHJvZ3Jlc3M/OiBib29sZWFuO1xuICAgICAgcmVzcG9uc2VUeXBlPzogJ2FycmF5YnVmZmVyJyB8ICdibG9iJyB8ICdqc29uJyB8ICd0ZXh0JztcbiAgICAgIHdpdGhDcmVkZW50aWFscz86IGJvb2xlYW47XG4gICAgICBjb250ZXh0PzogSHR0cENvbnRleHQ7XG4gICAgfVxuICApOiBPYnNlcnZhYmxlPGFueT47XG5cbiAgLyoqXG4gICAqICoqRm9ybSBSZXF1ZXN0KiogUmV0dXJuIGEgYEpTT05gIHR5cGUgLyDov5Tlm57kuIDkuKogYEpTT05gIOexu+Wei1xuICAgKi9cbiAgZm9ybTxUPihcbiAgICB1cmw6IHN0cmluZyxcbiAgICBib2R5PzogYW55LFxuICAgIHBhcmFtcz86IGFueSxcbiAgICBvcHRpb25zPzoge1xuICAgICAgaGVhZGVycz86IF9IdHRwSGVhZGVycztcbiAgICAgIG9ic2VydmU6ICdyZXNwb25zZSc7XG4gICAgICByZXBvcnRQcm9ncmVzcz86IGJvb2xlYW47XG4gICAgICByZXNwb25zZVR5cGU/OiAnanNvbic7XG4gICAgICB3aXRoQ3JlZGVudGlhbHM/OiBib29sZWFuO1xuICAgICAgY29udGV4dD86IEh0dHBDb250ZXh0O1xuICAgIH1cbiAgKTogT2JzZXJ2YWJsZTxUPjtcblxuICBmb3JtKFxuICAgIHVybDogc3RyaW5nLFxuICAgIGJvZHk6IGFueSxcbiAgICBwYXJhbXM6IGFueSxcbiAgICBvcHRpb25zOiB7XG4gICAgICBoZWFkZXJzPzogX0h0dHBIZWFkZXJzO1xuICAgICAgb2JzZXJ2ZT86ICdib2R5JyB8ICdldmVudHMnIHwgJ3Jlc3BvbnNlJztcbiAgICAgIHJlcG9ydFByb2dyZXNzPzogYm9vbGVhbjtcbiAgICAgIHJlc3BvbnNlVHlwZT86ICdhcnJheWJ1ZmZlcicgfCAnYmxvYicgfCAnanNvbicgfCAndGV4dCc7XG4gICAgICB3aXRoQ3JlZGVudGlhbHM/OiBib29sZWFuO1xuICAgICAgY29udGV4dD86IEh0dHBDb250ZXh0O1xuICAgIH0gPSB7fVxuICApOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgIHJldHVybiB0aGlzLnJlcXVlc3QoJ1BPU1QnLCB1cmwsIHtcbiAgICAgIGJvZHksXG4gICAgICBwYXJhbXMsXG4gICAgICAuLi5vcHRpb25zLFxuICAgICAgaGVhZGVyczoge1xuICAgICAgICAnY29udGVudC10eXBlJzogYGFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZGBcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIC8vICNlbmRyZWdpb25cblxuICAvLyAjcmVnaW9uIHJlcXVlc3RcblxuICAvKipcbiAgICogKipSZXF1ZXN0KiogUmV0dXJuIGEgYEFycmF5QnVmZmVyYCB0eXBlIC8g6L+U5Zue5LiA5LiqIGBBcnJheUJ1ZmZlcmAg57G75Z6LXG4gICAqL1xuICByZXF1ZXN0KFxuICAgIG1ldGhvZDogc3RyaW5nLFxuICAgIHVybDogc3RyaW5nLFxuICAgIG9wdGlvbnM6IHtcbiAgICAgIGJvZHk/OiBhbnk7XG4gICAgICBoZWFkZXJzPzogX0h0dHBIZWFkZXJzO1xuICAgICAgcGFyYW1zPzogYW55O1xuICAgICAgb2JzZXJ2ZT86ICdib2R5JztcbiAgICAgIHJlcG9ydFByb2dyZXNzPzogYm9vbGVhbjtcbiAgICAgIHJlc3BvbnNlVHlwZTogJ2FycmF5YnVmZmVyJztcbiAgICAgIHdpdGhDcmVkZW50aWFscz86IGJvb2xlYW47XG4gICAgICBjb250ZXh0PzogSHR0cENvbnRleHQ7XG4gICAgfVxuICApOiBPYnNlcnZhYmxlPEFycmF5QnVmZmVyPjtcblxuICAvKipcbiAgICogKipSZXF1ZXN0KiogUmV0dXJuIGEgYEJsb2JgIHR5cGUgLyDov5Tlm57kuIDkuKogYEJsb2JgIOexu+Wei1xuICAgKi9cbiAgcmVxdWVzdChcbiAgICBtZXRob2Q6IHN0cmluZyxcbiAgICB1cmw6IHN0cmluZyxcbiAgICBvcHRpb25zOiB7XG4gICAgICBib2R5PzogYW55O1xuICAgICAgaGVhZGVycz86IF9IdHRwSGVhZGVycztcbiAgICAgIHBhcmFtcz86IGFueTtcbiAgICAgIG9ic2VydmU/OiAnYm9keSc7XG4gICAgICByZXBvcnRQcm9ncmVzcz86IGJvb2xlYW47XG4gICAgICByZXNwb25zZVR5cGU6ICdibG9iJztcbiAgICAgIHdpdGhDcmVkZW50aWFscz86IGJvb2xlYW47XG4gICAgICBjb250ZXh0PzogSHR0cENvbnRleHQ7XG4gICAgfVxuICApOiBPYnNlcnZhYmxlPEJsb2I+O1xuXG4gIC8qKlxuICAgKiAqKlJlcXVlc3QqKiBSZXR1cm4gYSBgc3RyaW5nYCB0eXBlIC8g6L+U5Zue5LiA5LiqIGBzdHJpbmdgIOexu+Wei1xuICAgKi9cbiAgcmVxdWVzdChcbiAgICBtZXRob2Q6IHN0cmluZyxcbiAgICB1cmw6IHN0cmluZyxcbiAgICBvcHRpb25zOiB7XG4gICAgICBib2R5PzogYW55O1xuICAgICAgaGVhZGVycz86IF9IdHRwSGVhZGVycztcbiAgICAgIHBhcmFtcz86IGFueTtcbiAgICAgIG9ic2VydmU/OiAnYm9keSc7XG4gICAgICByZXBvcnRQcm9ncmVzcz86IGJvb2xlYW47XG4gICAgICByZXNwb25zZVR5cGU6ICd0ZXh0JztcbiAgICAgIHdpdGhDcmVkZW50aWFscz86IGJvb2xlYW47XG4gICAgICBjb250ZXh0PzogSHR0cENvbnRleHQ7XG4gICAgfVxuICApOiBPYnNlcnZhYmxlPHN0cmluZz47XG5cbiAgLyoqXG4gICAqICoqUmVxdWVzdCoqIFJldHVybiBhIGBIdHRwRXZlbnQ8QXJyYXlCdWZmZXI+YCB0eXBlIC8g6L+U5Zue5LiA5LiqIGBIdHRwRXZlbnQ8QXJyYXlCdWZmZXI+YCDnsbvlnotcbiAgICovXG4gIHJlcXVlc3QoXG4gICAgbWV0aG9kOiBzdHJpbmcsXG4gICAgdXJsOiBzdHJpbmcsXG4gICAgb3B0aW9uczoge1xuICAgICAgYm9keT86IGFueTtcbiAgICAgIGhlYWRlcnM/OiBfSHR0cEhlYWRlcnM7XG4gICAgICBwYXJhbXM/OiBhbnk7XG4gICAgICBvYnNlcnZlOiAnZXZlbnRzJztcbiAgICAgIHJlcG9ydFByb2dyZXNzPzogYm9vbGVhbjtcbiAgICAgIHJlc3BvbnNlVHlwZTogJ2FycmF5YnVmZmVyJztcbiAgICAgIHdpdGhDcmVkZW50aWFscz86IGJvb2xlYW47XG4gICAgICBjb250ZXh0PzogSHR0cENvbnRleHQ7XG4gICAgfVxuICApOiBPYnNlcnZhYmxlPEh0dHBFdmVudDxBcnJheUJ1ZmZlcj4+O1xuXG4gIC8qKlxuICAgKiAqKlJlcXVlc3QqKiBSZXR1cm4gYSBgSHR0cEV2ZW50PEJsb2I+YCB0eXBlIC8g6L+U5Zue5LiA5LiqIGBIdHRwRXZlbnQ8QmxvYj5gIOexu+Wei1xuICAgKi9cbiAgcmVxdWVzdChcbiAgICBtZXRob2Q6IHN0cmluZyxcbiAgICB1cmw6IHN0cmluZyxcbiAgICBvcHRpb25zOiB7XG4gICAgICBib2R5PzogYW55O1xuICAgICAgaGVhZGVycz86IF9IdHRwSGVhZGVycztcbiAgICAgIHBhcmFtcz86IGFueTtcbiAgICAgIG9ic2VydmU6ICdldmVudHMnO1xuICAgICAgcmVwb3J0UHJvZ3Jlc3M/OiBib29sZWFuO1xuICAgICAgcmVzcG9uc2VUeXBlOiAnYmxvYic7XG4gICAgICB3aXRoQ3JlZGVudGlhbHM/OiBib29sZWFuO1xuICAgICAgY29udGV4dD86IEh0dHBDb250ZXh0O1xuICAgIH1cbiAgKTogT2JzZXJ2YWJsZTxIdHRwRXZlbnQ8QmxvYj4+O1xuXG4gIC8qKlxuICAgKiAqKlJlcXVlc3QqKiBSZXR1cm4gYSBgSHR0cEV2ZW50PHN0cmluZz5gIHR5cGUgLyDov5Tlm57kuIDkuKogYEh0dHBFdmVudDxzdHJpbmc+YCDnsbvlnotcbiAgICovXG4gIHJlcXVlc3QoXG4gICAgbWV0aG9kOiBzdHJpbmcsXG4gICAgdXJsOiBzdHJpbmcsXG4gICAgb3B0aW9uczoge1xuICAgICAgYm9keT86IGFueTtcbiAgICAgIGhlYWRlcnM/OiBfSHR0cEhlYWRlcnM7XG4gICAgICBwYXJhbXM/OiBhbnk7XG4gICAgICBvYnNlcnZlOiAnZXZlbnRzJztcbiAgICAgIHJlcG9ydFByb2dyZXNzPzogYm9vbGVhbjtcbiAgICAgIHJlc3BvbnNlVHlwZTogJ3RleHQnO1xuICAgICAgd2l0aENyZWRlbnRpYWxzPzogYm9vbGVhbjtcbiAgICAgIGNvbnRleHQ/OiBIdHRwQ29udGV4dDtcbiAgICB9XG4gICk6IE9ic2VydmFibGU8SHR0cEV2ZW50PHN0cmluZz4+O1xuXG4gIC8qKlxuICAgKiAqKlJlcXVlc3QqKiBSZXR1cm4gYSBgSHR0cEV2ZW50PGFueT5gIHR5cGUgLyDov5Tlm57kuIDkuKogYEh0dHBFdmVudDxhbnk+YCDnsbvlnotcbiAgICovXG4gIHJlcXVlc3QoXG4gICAgbWV0aG9kOiBzdHJpbmcsXG4gICAgdXJsOiBzdHJpbmcsXG4gICAgb3B0aW9uczoge1xuICAgICAgYm9keT86IGFueTtcbiAgICAgIGhlYWRlcnM/OiBfSHR0cEhlYWRlcnM7XG4gICAgICBwYXJhbXM/OiBhbnk7XG4gICAgICByZXBvcnRQcm9ncmVzcz86IGJvb2xlYW47XG4gICAgICBvYnNlcnZlOiAnZXZlbnRzJztcbiAgICAgIHJlc3BvbnNlVHlwZT86ICdqc29uJztcbiAgICAgIHdpdGhDcmVkZW50aWFscz86IGJvb2xlYW47XG4gICAgICBjb250ZXh0PzogSHR0cENvbnRleHQ7XG4gICAgfVxuICApOiBPYnNlcnZhYmxlPEh0dHBFdmVudDxhbnk+PjtcblxuICAvKipcbiAgICogKipSZXF1ZXN0KiogUmV0dXJuIGEgYEh0dHBFdmVudDxSPmAgdHlwZSAvIOi/lOWbnuS4gOS4qiBgSHR0cEV2ZW50PFI+YCDnsbvlnotcbiAgICovXG4gIHJlcXVlc3Q8Uj4oXG4gICAgbWV0aG9kOiBzdHJpbmcsXG4gICAgdXJsOiBzdHJpbmcsXG4gICAgb3B0aW9uczoge1xuICAgICAgYm9keT86IGFueTtcbiAgICAgIGhlYWRlcnM/OiBfSHR0cEhlYWRlcnM7XG4gICAgICBwYXJhbXM/OiBhbnk7XG4gICAgICByZXBvcnRQcm9ncmVzcz86IGJvb2xlYW47XG4gICAgICBvYnNlcnZlOiAnZXZlbnRzJztcbiAgICAgIHJlc3BvbnNlVHlwZT86ICdqc29uJztcbiAgICAgIHdpdGhDcmVkZW50aWFscz86IGJvb2xlYW47XG4gICAgICBjb250ZXh0PzogSHR0cENvbnRleHQ7XG4gICAgfVxuICApOiBPYnNlcnZhYmxlPEh0dHBFdmVudDxSPj47XG5cbiAgLyoqXG4gICAqICoqUmVxdWVzdCoqIFJldHVybiBhIGBIdHRwUmVzcG9uc2U8QXJyYXlCdWZmZXI+YCB0eXBlIC8g6L+U5Zue5LiA5LiqIGBIdHRwUmVzcG9uc2U8QXJyYXlCdWZmZXI+YCDnsbvlnotcbiAgICovXG4gIHJlcXVlc3QoXG4gICAgbWV0aG9kOiBzdHJpbmcsXG4gICAgdXJsOiBzdHJpbmcsXG4gICAgb3B0aW9uczoge1xuICAgICAgYm9keT86IGFueTtcbiAgICAgIGhlYWRlcnM/OiBfSHR0cEhlYWRlcnM7XG4gICAgICBwYXJhbXM/OiBhbnk7XG4gICAgICBvYnNlcnZlOiAncmVzcG9uc2UnO1xuICAgICAgcmVwb3J0UHJvZ3Jlc3M/OiBib29sZWFuO1xuICAgICAgcmVzcG9uc2VUeXBlOiAnYXJyYXlidWZmZXInO1xuICAgICAgd2l0aENyZWRlbnRpYWxzPzogYm9vbGVhbjtcbiAgICAgIGNvbnRleHQ/OiBIdHRwQ29udGV4dDtcbiAgICB9XG4gICk6IE9ic2VydmFibGU8SHR0cFJlc3BvbnNlPEFycmF5QnVmZmVyPj47XG5cbiAgLyoqXG4gICAqICoqUmVxdWVzdCoqIFJldHVybiBhIGBIdHRwUmVzcG9uc2U8QmxvYj5gIHR5cGUgLyDov5Tlm57kuIDkuKogYEh0dHBSZXNwb25zZTxCbG9iPmAg57G75Z6LXG4gICAqL1xuICByZXF1ZXN0KFxuICAgIG1ldGhvZDogc3RyaW5nLFxuICAgIHVybDogc3RyaW5nLFxuICAgIG9wdGlvbnM6IHtcbiAgICAgIGJvZHk/OiBhbnk7XG4gICAgICBoZWFkZXJzPzogX0h0dHBIZWFkZXJzO1xuICAgICAgcGFyYW1zPzogYW55O1xuICAgICAgb2JzZXJ2ZTogJ3Jlc3BvbnNlJztcbiAgICAgIHJlcG9ydFByb2dyZXNzPzogYm9vbGVhbjtcbiAgICAgIHJlc3BvbnNlVHlwZTogJ2Jsb2InO1xuICAgICAgd2l0aENyZWRlbnRpYWxzPzogYm9vbGVhbjtcbiAgICAgIGNvbnRleHQ/OiBIdHRwQ29udGV4dDtcbiAgICB9XG4gICk6IE9ic2VydmFibGU8SHR0cFJlc3BvbnNlPEJsb2I+PjtcblxuICAvKipcbiAgICogKipSZXF1ZXN0KiogUmV0dXJuIGEgYEh0dHBSZXNwb25zZTxzdHJpbmc+YCB0eXBlIC8g6L+U5Zue5LiA5LiqIGBIdHRwUmVzcG9uc2U8c3RyaW5nPmAg57G75Z6LXG4gICAqL1xuICByZXF1ZXN0KFxuICAgIG1ldGhvZDogc3RyaW5nLFxuICAgIHVybDogc3RyaW5nLFxuICAgIG9wdGlvbnM6IHtcbiAgICAgIGJvZHk/OiBhbnk7XG4gICAgICBoZWFkZXJzPzogX0h0dHBIZWFkZXJzO1xuICAgICAgcGFyYW1zPzogYW55O1xuICAgICAgb2JzZXJ2ZTogJ3Jlc3BvbnNlJztcbiAgICAgIHJlcG9ydFByb2dyZXNzPzogYm9vbGVhbjtcbiAgICAgIHJlc3BvbnNlVHlwZTogJ3RleHQnO1xuICAgICAgd2l0aENyZWRlbnRpYWxzPzogYm9vbGVhbjtcbiAgICAgIGNvbnRleHQ/OiBIdHRwQ29udGV4dDtcbiAgICB9XG4gICk6IE9ic2VydmFibGU8SHR0cFJlc3BvbnNlPHN0cmluZz4+O1xuXG4gIC8qKlxuICAgKiAqKlJlcXVlc3QqKiBSZXR1cm4gYSBgSHR0cFJlc3BvbnNlPE9iamVjdD5gIHR5cGUgLyDov5Tlm57kuIDkuKogYEh0dHBSZXNwb25zZTxPYmplY3Q+YCDnsbvlnotcbiAgICovXG4gIHJlcXVlc3QoXG4gICAgbWV0aG9kOiBzdHJpbmcsXG4gICAgdXJsOiBzdHJpbmcsXG4gICAgb3B0aW9uczoge1xuICAgICAgYm9keT86IGFueTtcbiAgICAgIGhlYWRlcnM/OiBfSHR0cEhlYWRlcnM7XG4gICAgICBwYXJhbXM/OiBhbnk7XG4gICAgICByZXBvcnRQcm9ncmVzcz86IGJvb2xlYW47XG4gICAgICBvYnNlcnZlOiAncmVzcG9uc2UnO1xuICAgICAgcmVzcG9uc2VUeXBlPzogJ2pzb24nO1xuICAgICAgd2l0aENyZWRlbnRpYWxzPzogYm9vbGVhbjtcbiAgICAgIGNvbnRleHQ/OiBIdHRwQ29udGV4dDtcbiAgICB9XG4gICk6IE9ic2VydmFibGU8SHR0cFJlc3BvbnNlPE56U2FmZUFueT4+O1xuXG4gIC8qKlxuICAgKiAqKlJlcXVlc3QqKiBSZXR1cm4gYSBgSHR0cFJlc3BvbnNlPFI+YCB0eXBlIC8g6L+U5Zue5LiA5LiqIGBIdHRwUmVzcG9uc2U8Uj5gIOexu+Wei1xuICAgKi9cbiAgcmVxdWVzdDxSPihcbiAgICBtZXRob2Q6IHN0cmluZyxcbiAgICB1cmw6IHN0cmluZyxcbiAgICBvcHRpb25zOiB7XG4gICAgICBib2R5PzogYW55O1xuICAgICAgaGVhZGVycz86IF9IdHRwSGVhZGVycztcbiAgICAgIHBhcmFtcz86IGFueTtcbiAgICAgIHJlcG9ydFByb2dyZXNzPzogYm9vbGVhbjtcbiAgICAgIG9ic2VydmU6ICdyZXNwb25zZSc7XG4gICAgICByZXNwb25zZVR5cGU/OiAnanNvbic7XG4gICAgICB3aXRoQ3JlZGVudGlhbHM/OiBib29sZWFuO1xuICAgICAgY29udGV4dD86IEh0dHBDb250ZXh0O1xuICAgIH1cbiAgKTogT2JzZXJ2YWJsZTxIdHRwUmVzcG9uc2U8Uj4+O1xuXG4gIC8qKlxuICAgKiAqKlJlcXVlc3QqKiBSZXR1cm4gYSBgSHR0cFJlc3BvbnNlPE9iamVjdD5gIHR5cGUgLyDov5Tlm57kuIDkuKogYEh0dHBSZXNwb25zZTxPYmplY3Q+YCDnsbvlnotcbiAgICovXG4gIHJlcXVlc3QoXG4gICAgbWV0aG9kOiBzdHJpbmcsXG4gICAgdXJsOiBzdHJpbmcsXG4gICAgb3B0aW9ucz86IHtcbiAgICAgIGJvZHk/OiBhbnk7XG4gICAgICBoZWFkZXJzPzogX0h0dHBIZWFkZXJzO1xuICAgICAgcGFyYW1zPzogYW55O1xuICAgICAgb2JzZXJ2ZT86ICdib2R5JztcbiAgICAgIHJlc3BvbnNlVHlwZT86ICdqc29uJztcbiAgICAgIHJlcG9ydFByb2dyZXNzPzogYm9vbGVhbjtcbiAgICAgIHdpdGhDcmVkZW50aWFscz86IGJvb2xlYW47XG4gICAgICBjb250ZXh0PzogSHR0cENvbnRleHQ7XG4gICAgfVxuICApOiBPYnNlcnZhYmxlPFJlY29yZDxzdHJpbmcsIHVua25vd24+PjtcblxuICAvKipcbiAgICogKipSZXF1ZXN0KiogUmV0dXJuIGEgYFJgIHR5cGUgLyDov5Tlm57kuIDkuKogYFJgIOexu+Wei1xuICAgKi9cbiAgcmVxdWVzdDxSPihcbiAgICBtZXRob2Q6IHN0cmluZyxcbiAgICB1cmw6IHN0cmluZyxcbiAgICBvcHRpb25zPzoge1xuICAgICAgYm9keT86IGFueTtcbiAgICAgIGhlYWRlcnM/OiBfSHR0cEhlYWRlcnM7XG4gICAgICBwYXJhbXM/OiBhbnk7XG4gICAgICBvYnNlcnZlPzogJ2JvZHknO1xuICAgICAgcmVzcG9uc2VUeXBlPzogJ2pzb24nO1xuICAgICAgcmVwb3J0UHJvZ3Jlc3M/OiBib29sZWFuO1xuICAgICAgd2l0aENyZWRlbnRpYWxzPzogYm9vbGVhbjtcbiAgICAgIGNvbnRleHQ/OiBIdHRwQ29udGV4dDtcbiAgICB9XG4gICk6IE9ic2VydmFibGU8Uj47XG5cbiAgLyoqXG4gICAqICoqUmVxdWVzdCoqIFJldHVybiBhIGBhbnlgIHR5cGUgLyDov5Tlm57kuIDkuKogYGFueWAg57G75Z6LXG4gICAqL1xuICByZXF1ZXN0KFxuICAgIG1ldGhvZDogc3RyaW5nLFxuICAgIHVybDogc3RyaW5nLFxuICAgIG9wdGlvbnM/OiB7XG4gICAgICBib2R5PzogYW55O1xuICAgICAgaGVhZGVycz86IF9IdHRwSGVhZGVycztcbiAgICAgIHBhcmFtcz86IGFueTtcbiAgICAgIG9ic2VydmU/OiBIdHRwT2JzZXJ2ZTtcbiAgICAgIHJlcG9ydFByb2dyZXNzPzogYm9vbGVhbjtcbiAgICAgIHJlc3BvbnNlVHlwZT86ICdhcnJheWJ1ZmZlcicgfCAnYmxvYicgfCAnanNvbicgfCAndGV4dCc7XG4gICAgICB3aXRoQ3JlZGVudGlhbHM/OiBib29sZWFuO1xuICAgICAgY29udGV4dD86IEh0dHBDb250ZXh0O1xuICAgIH1cbiAgKTogT2JzZXJ2YWJsZTxhbnk+O1xuXG4gIHJlcXVlc3QoXG4gICAgbWV0aG9kOiBzdHJpbmcsXG4gICAgdXJsOiBzdHJpbmcsXG4gICAgb3B0aW9uczoge1xuICAgICAgYm9keT86IGFueTtcbiAgICAgIGhlYWRlcnM/OiBfSHR0cEhlYWRlcnM7XG4gICAgICBwYXJhbXM/OiBhbnk7XG4gICAgICBvYnNlcnZlPzogSHR0cE9ic2VydmU7XG4gICAgICByZXBvcnRQcm9ncmVzcz86IGJvb2xlYW47XG4gICAgICByZXNwb25zZVR5cGU/OiAnYXJyYXlidWZmZXInIHwgJ2Jsb2InIHwgJ2pzb24nIHwgJ3RleHQnO1xuICAgICAgd2l0aENyZWRlbnRpYWxzPzogYm9vbGVhbjtcbiAgICAgIGNvbnRleHQ/OiBIdHRwQ29udGV4dDtcbiAgICB9ID0ge31cbiAgKTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgICBpZiAob3B0aW9ucy5wYXJhbXMpIG9wdGlvbnMucGFyYW1zID0gdGhpcy5wYXJzZVBhcmFtcyhvcHRpb25zLnBhcmFtcyk7XG4gICAgcmV0dXJuIG9mKG51bGwpLnBpcGUoXG4gICAgICAvLyBNYWtlIHN1cmUgdG8gYWx3YXlzIGJlIGFzeW5jaHJvbm91cywgc2VlIGlzc3VlczogaHR0cHM6Ly9naXRodWIuY29tL25nLWFsYWluL25nLWFsYWluL2lzc3Vlcy8xOTU0XG4gICAgICBkZWxheSgwKSxcbiAgICAgIHRhcCgoKSA9PiB0aGlzLnB1c2goKSksXG4gICAgICBzd2l0Y2hNYXAoKCkgPT4gdGhpcy5odHRwLnJlcXVlc3QobWV0aG9kLCB1cmwsIG9wdGlvbnMpKSxcbiAgICAgIGZpbmFsaXplKCgpID0+IHRoaXMucG9wKCkpXG4gICAgKTtcbiAgfVxuXG4gIC8vICNlbmRyZWdpb25cbn1cbiJdfQ==
|
|
@@ -1,207 +0,0 @@
|
|
|
1
|
-
import { Inject, Injectable, Injector } from '@angular/core';
|
|
2
|
-
import { throwError } from 'rxjs';
|
|
3
|
-
import { ACLService } from '@delon/acl';
|
|
4
|
-
import { _HttpClient } from './http.client';
|
|
5
|
-
/**
|
|
6
|
-
* Every http decorator must be based on `BaseAPI`, Like this:
|
|
7
|
-
* ```ts
|
|
8
|
-
* \@Injectable()
|
|
9
|
-
* class DataService extends BaseApi {}
|
|
10
|
-
* ```
|
|
11
|
-
*/
|
|
12
|
-
export class BaseApi {
|
|
13
|
-
constructor(injector) {
|
|
14
|
-
this.injector = injector;
|
|
15
|
-
}
|
|
16
|
-
}
|
|
17
|
-
BaseApi.decorators = [
|
|
18
|
-
{ type: Injectable }
|
|
19
|
-
];
|
|
20
|
-
BaseApi.ctorParameters = () => [
|
|
21
|
-
{ type: Injector, decorators: [{ type: Inject, args: [Injector,] }] }
|
|
22
|
-
];
|
|
23
|
-
const paramKey = `__api_params`;
|
|
24
|
-
function setParam(target, key = paramKey) {
|
|
25
|
-
let params = target[key];
|
|
26
|
-
if (typeof params === 'undefined') {
|
|
27
|
-
params = target[key] = {};
|
|
28
|
-
}
|
|
29
|
-
return params;
|
|
30
|
-
}
|
|
31
|
-
/**
|
|
32
|
-
* 默认基准URL
|
|
33
|
-
* - 有效范围:类
|
|
34
|
-
*/
|
|
35
|
-
export function BaseUrl(url) {
|
|
36
|
-
return function (target) {
|
|
37
|
-
const params = setParam(target.prototype);
|
|
38
|
-
params.baseUrl = url;
|
|
39
|
-
return target;
|
|
40
|
-
};
|
|
41
|
-
}
|
|
42
|
-
/**
|
|
43
|
-
* 默认 `headers`
|
|
44
|
-
* - 有效范围:类
|
|
45
|
-
*/
|
|
46
|
-
export function BaseHeaders(headers) {
|
|
47
|
-
return function (target) {
|
|
48
|
-
const params = setParam(target.prototype);
|
|
49
|
-
params.baseHeaders = headers;
|
|
50
|
-
return target;
|
|
51
|
-
};
|
|
52
|
-
}
|
|
53
|
-
function makeParam(paramName) {
|
|
54
|
-
return function (key) {
|
|
55
|
-
return function (target, propertyKey, index) {
|
|
56
|
-
const params = setParam(setParam(target), propertyKey);
|
|
57
|
-
let tParams = params[paramName];
|
|
58
|
-
if (typeof tParams === 'undefined') {
|
|
59
|
-
tParams = params[paramName] = [];
|
|
60
|
-
}
|
|
61
|
-
tParams.push({
|
|
62
|
-
key,
|
|
63
|
-
index
|
|
64
|
-
});
|
|
65
|
-
};
|
|
66
|
-
};
|
|
67
|
-
}
|
|
68
|
-
/**
|
|
69
|
-
* URL路由参数
|
|
70
|
-
* - 有效范围:方法参数
|
|
71
|
-
*/
|
|
72
|
-
export const Path = makeParam('path');
|
|
73
|
-
/**
|
|
74
|
-
* URL 参数 `QueryString`
|
|
75
|
-
* - 有效范围:方法参数
|
|
76
|
-
*/
|
|
77
|
-
export const Query = makeParam('query');
|
|
78
|
-
/**
|
|
79
|
-
* 参数 `Body`
|
|
80
|
-
* - 有效范围:方法参数
|
|
81
|
-
*/
|
|
82
|
-
export const Body = makeParam('body')();
|
|
83
|
-
/**
|
|
84
|
-
* 参数 `headers`
|
|
85
|
-
* - 有效范围:方法参数
|
|
86
|
-
* - 合并 `BaseHeaders`
|
|
87
|
-
*/
|
|
88
|
-
export const Headers = makeParam('headers');
|
|
89
|
-
/**
|
|
90
|
-
* Request Payload
|
|
91
|
-
* - Supported body (like`POST`, `PUT`) as a body data, equivalent to `@Body`
|
|
92
|
-
* - Not supported body (like `GET`, `DELETE` etc) as a `QueryString`
|
|
93
|
-
*/
|
|
94
|
-
export const Payload = makeParam('payload')();
|
|
95
|
-
function getValidArgs(data, key, args) {
|
|
96
|
-
if (!data[key] || !Array.isArray(data[key]) || data[key].length <= 0) {
|
|
97
|
-
return undefined;
|
|
98
|
-
}
|
|
99
|
-
return args[data[key][0].index];
|
|
100
|
-
}
|
|
101
|
-
function genBody(data, payload) {
|
|
102
|
-
if (Array.isArray(data) || Array.isArray(payload)) {
|
|
103
|
-
return Object.assign([], data, payload);
|
|
104
|
-
}
|
|
105
|
-
return Object.assign(Object.assign({}, data), payload);
|
|
106
|
-
}
|
|
107
|
-
function makeMethod(method) {
|
|
108
|
-
return function (url = '', options) {
|
|
109
|
-
return (_target, targetKey, descriptor) => {
|
|
110
|
-
descriptor.value = function (...args) {
|
|
111
|
-
options = options || {};
|
|
112
|
-
const injector = this.injector;
|
|
113
|
-
const http = injector.get(_HttpClient, null);
|
|
114
|
-
if (http == null) {
|
|
115
|
-
throw new TypeError(`Not found '_HttpClient', You can import 'AlainThemeModule' && 'HttpClientModule' in your root module.`);
|
|
116
|
-
}
|
|
117
|
-
const baseData = setParam(this);
|
|
118
|
-
const data = setParam(baseData, targetKey);
|
|
119
|
-
let requestUrl = url || '';
|
|
120
|
-
requestUrl = [baseData.baseUrl || '', requestUrl.startsWith('/') ? requestUrl.substr(1) : requestUrl].join('/');
|
|
121
|
-
// fix last split
|
|
122
|
-
if (requestUrl.length > 1 && requestUrl.endsWith('/')) {
|
|
123
|
-
requestUrl = requestUrl.substr(0, requestUrl.length - 1);
|
|
124
|
-
}
|
|
125
|
-
if (options.acl) {
|
|
126
|
-
const aclSrv = injector.get(ACLService, null);
|
|
127
|
-
if (aclSrv && !aclSrv.can(options.acl)) {
|
|
128
|
-
return throwError({
|
|
129
|
-
url: requestUrl,
|
|
130
|
-
status: 401,
|
|
131
|
-
statusText: `From Http Decorator`
|
|
132
|
-
});
|
|
133
|
-
}
|
|
134
|
-
delete options.acl;
|
|
135
|
-
}
|
|
136
|
-
requestUrl = requestUrl.replace(/::/g, '^^');
|
|
137
|
-
(data.path || [])
|
|
138
|
-
.filter(w => typeof args[w.index] !== 'undefined')
|
|
139
|
-
.forEach((i) => {
|
|
140
|
-
requestUrl = requestUrl.replace(new RegExp(`:${i.key}`, 'g'), encodeURIComponent(args[i.index]));
|
|
141
|
-
});
|
|
142
|
-
requestUrl = requestUrl.replace(/\^\^/g, `:`);
|
|
143
|
-
const params = (data.query || []).reduce((p, i) => {
|
|
144
|
-
p[i.key] = args[i.index];
|
|
145
|
-
return p;
|
|
146
|
-
}, {});
|
|
147
|
-
const headers = (data.headers || []).reduce((p, i) => {
|
|
148
|
-
p[i.key] = args[i.index];
|
|
149
|
-
return p;
|
|
150
|
-
}, {});
|
|
151
|
-
if (method === 'FORM') {
|
|
152
|
-
headers['content-type'] = 'application/x-www-form-urlencoded';
|
|
153
|
-
}
|
|
154
|
-
const payload = getValidArgs(data, 'payload', args);
|
|
155
|
-
const supportedBody = method === 'POST' || method === 'PUT';
|
|
156
|
-
return http.request(method, requestUrl, Object.assign({ body: supportedBody ? genBody(getValidArgs(data, 'body', args), payload) : null, params: !supportedBody ? Object.assign(Object.assign({}, params), payload) : params, headers: Object.assign(Object.assign({}, baseData.baseHeaders), headers) }, options));
|
|
157
|
-
};
|
|
158
|
-
return descriptor;
|
|
159
|
-
};
|
|
160
|
-
};
|
|
161
|
-
}
|
|
162
|
-
/**
|
|
163
|
-
* `OPTIONS` 请求
|
|
164
|
-
* - 有效范围:方法
|
|
165
|
-
*/
|
|
166
|
-
export const OPTIONS = makeMethod('OPTIONS');
|
|
167
|
-
/**
|
|
168
|
-
* `GET` 请求
|
|
169
|
-
* - 有效范围:方法
|
|
170
|
-
*/
|
|
171
|
-
export const GET = makeMethod('GET');
|
|
172
|
-
/**
|
|
173
|
-
* `POST` 请求
|
|
174
|
-
* - 有效范围:方法
|
|
175
|
-
*/
|
|
176
|
-
export const POST = makeMethod('POST');
|
|
177
|
-
/**
|
|
178
|
-
* `DELETE` 请求
|
|
179
|
-
* - 有效范围:方法
|
|
180
|
-
*/
|
|
181
|
-
export const DELETE = makeMethod('DELETE');
|
|
182
|
-
/**
|
|
183
|
-
* `PUT` 请求
|
|
184
|
-
* - 有效范围:方法
|
|
185
|
-
*/
|
|
186
|
-
export const PUT = makeMethod('PUT');
|
|
187
|
-
/**
|
|
188
|
-
* `HEAD` 请求
|
|
189
|
-
* - 有效范围:方法
|
|
190
|
-
*/
|
|
191
|
-
export const HEAD = makeMethod('HEAD');
|
|
192
|
-
/**
|
|
193
|
-
* `PATCH` 请求
|
|
194
|
-
* - 有效范围:方法
|
|
195
|
-
*/
|
|
196
|
-
export const PATCH = makeMethod('PATCH');
|
|
197
|
-
/**
|
|
198
|
-
* `JSONP` 请求
|
|
199
|
-
* - 有效范围:方法
|
|
200
|
-
*/
|
|
201
|
-
export const JSONP = makeMethod('JSONP');
|
|
202
|
-
/**
|
|
203
|
-
* `FORM` 请求
|
|
204
|
-
* - 有效范围:方法
|
|
205
|
-
*/
|
|
206
|
-
export const FORM = makeMethod('FORM');
|
|
207
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaHR0cC5kZWNvcmF0b3IuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy90aGVtZS9zcmMvc2VydmljZXMvaHR0cC9odHRwLmRlY29yYXRvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFFQSxPQUFPLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDN0QsT0FBTyxFQUFjLFVBQVUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUU5QyxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sWUFBWSxDQUFDO0FBR3hDLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFNUM7Ozs7OztHQU1HO0FBRUgsTUFBTSxPQUFnQixPQUFPO0lBQzNCLFlBQXdDLFFBQWtCO1FBQWxCLGFBQVEsR0FBUixRQUFRLENBQVU7SUFBRyxDQUFDOzs7WUFGL0QsVUFBVTs7O1lBZmtCLFFBQVEsdUJBaUJ0QixNQUFNLFNBQUMsUUFBUTs7QUFtQjlCLE1BQU0sUUFBUSxHQUFHLGNBQWMsQ0FBQztBQUVoQyxTQUFTLFFBQVEsQ0FBQyxNQUFXLEVBQUUsTUFBYyxRQUFRO0lBQ25ELElBQUksTUFBTSxHQUFHLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUN6QixJQUFJLE9BQU8sTUFBTSxLQUFLLFdBQVcsRUFBRTtRQUNqQyxNQUFNLEdBQUcsTUFBTSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQztLQUMzQjtJQUNELE9BQU8sTUFBTSxDQUFDO0FBQ2hCLENBQUM7QUFFRDs7O0dBR0c7QUFDSCxNQUFNLFVBQVUsT0FBTyxDQUFDLEdBQVc7SUFDakMsT0FBTyxVQUEwRCxNQUFjO1FBQzdFLE1BQU0sTUFBTSxHQUFHLFFBQVEsQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDMUMsTUFBTSxDQUFDLE9BQU8sR0FBRyxHQUFHLENBQUM7UUFDckIsT0FBTyxN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LEdBQUcsVUFBVSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0FBRTNDOzs7R0FHRztBQUNILE1BQU0sQ0FBQyxNQUFNLEdBQUcsR0FBRyxVQUFVLENBQUMsS0FBSyxDQUFDLENBQUM7QUFFckM7OztHQUdHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sSUFBSSxHQUFHLFVBQVUsQ0FBQyxNQUFNLENBQUMsQ0FBQztBQUV2Qzs7O0dBR0c7QUFDSCxNQUFNLENBQUMsTUFBTSxLQUFLLEdBQUcsVUFBVSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0FBRXpDOzs7R0FHRztBQUNILE1BQU0sQ0FBQyxNQUFNLEtBQUssR0FBRyxVQUFVLENBQUMsT0FBTyxDQUFDLENBQUM7QUFFekM7OztHQUdHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sSUFBSSxHQUFHLFVBQVUsQ0FBQyxNQUFNLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludC1kaXNhYmxlIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnkgKi9cbmltcG9ydCB7IEh0dHBIZWFkZXJzIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xuaW1wb3J0IHsgSW5qZWN0LCBJbmplY3RhYmxlLCBJbmplY3RvciB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgT2JzZXJ2YWJsZSwgdGhyb3dFcnJvciB9IGZyb20gJ3J4anMnO1xuXG5pbXBvcnQgeyBBQ0xTZXJ2aWNlIH0gZnJvbSAnQGRlbG9uL2FjbCc7XG5pbXBvcnQgdHlwZSB7IE56U2FmZUFueSB9IGZyb20gJ25nLXpvcnJvLWFudGQvY29yZS90eXBlcyc7XG5cbmltcG9ydCB7IF9IdHRwQ2xpZW50IH0gZnJvbSAnLi9odHRwLmNsaWVudCc7XG5cbi8qKlxuICogRXZlcnkgaHR0cCBkZWNvcmF0b3IgbXVzdCBiZSBiYXNlZCBvbiBgQmFzZUFQSWAsIExpa2UgdGhpczpcbiAqIGBgYHRzXG4gKiBcXEBJbmplY3RhYmxlKClcbiAqIGNsYXNzIERhdGFTZXJ2aWNlIGV4dGVuZHMgQmFzZUFwaSB7fVxuICogYGBgXG4gKi9cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBCYXNlQXBpIHtcbiAgY29uc3RydWN0b3IoQEluamVjdChJbmplY3RvcikgcHJvdGVjdGVkIGluamVjdG9yOiBJbmplY3Rvcikge31cbn1cblxuZXhwb3J0IGludGVyZmFjZSBIdHRwT3B0aW9ucyB7XG4gIC8qKiBBQ0zphY3nva7vvIzoi6Xlr7zlhaUgYEBkZWxvbi9hY2xgIOaXtuiHquWKqOacieaViO+8jOetieWQjOS6jiBgQUNMU2VydmljZS5jYW4ocm9sZU9yQWJpbGl0eTogQUNMQ2FuVHlwZSlgIOWPguaVsOWAvCAqL1xuICBhY2w/OiBhbnk7XG4gIG9ic2VydmU/OiAnYm9keScgfCAnZXZlbnRzJyB8ICdyZXNwb25zZSc7XG4gIHJlc3BvbnNlVHlwZT86ICdhcnJheWJ1ZmZlcicgfCAnYmxvYicgfCAnanNvbicgfCAndGV4dCc7XG4gIHJlcG9ydFByb2dyZXNzPzogYm9vbGVhbjtcbiAgd2l0aENyZWRlbnRpYWxzPzogYm9vbGVhbjtcbn1cblxuaW50ZXJmYWNlIFBhcmFtVHlwZSB7XG4gIGtleTogc3RyaW5nO1xuICBpbmRleDogbnVtYmVyO1xuICBba2V5OiBzdHJpbmddOiBhbnk7XG4gIFtrZXk6IG51bWJlcl06IGFueTtcbn1cblxuY29uc3QgcGFyYW1LZXkgPSBgX19hcGlfcGFyYW1zYDtcblxuZnVuY3Rpb24gc2V0UGFyYW0odGFyZ2V0OiBhbnksIGtleTogc3RyaW5nID0gcGFyYW1LZXkpOiBhbnkge1xuICBsZXQgcGFyYW1zID0gdGFyZ2V0W2tleV07XG4gIGlmICh0eXBlb2YgcGFyYW1zID09PSAndW5kZWZpbmVkJykge1xuICAgIHBhcmFtcyA9IHRhcmdldFtrZXldID0ge307XG4gIH1cbiAgcmV0dXJuIHBhcmFtcztcbn1cblxuLyoqXG4gKiDpu5jorqTln7rlh4ZVUkxcbiAqIC0g5pyJ5pWI6IyD5Zu077ya57G7XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBCYXNlVXJsKHVybDogc3RyaW5nKSB7XG4gIHJldHVybiBmdW5jdGlvbiA8VENsYXNzIGV4dGVuZHMgbmV3ICguLi5hcmdzOiBhbnlbXSkgPT4gQmFzZUFwaT4odGFyZ2V0OiBUQ2xhc3MpOiBUQ2xhc3Mge1xuICAgIGNvbnN0IHBhcmFtcyA9IHNldFBhcmFtKHRhcmdldC5wcm90b3R5cGUpO1xuICAgIHBhcmFtcy5iYXNlVXJsID0gdXJsO1xuICAgIHJldHVybiB0YXJnZXQ7XG4gIH07XG59XG5cbi8qKlxuICog6buY6K6kIGBoZWFkZXJzYFxuICogLSDmnInmlYjojIPlm7TvvJrnsbtcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIEJhc2VIZWFkZXJzKFxuICBoZWFkZXJzOlxuICAgIHwgSHR0cEhlYWRlcnNcbiAgICB8IHtcbiAgICAgICAgW2hlYWRlcjogc3RyaW5nXTogc3RyaW5nIHwgc3RyaW5nW107XG4gICAgICB9XG4pIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIDxUQ2xhc3MgZXh0ZW5kcyBuZXcgKC4uLmFyZ3M6IGFueVtdKSA9PiBCYXNlQXBpPih0YXJnZXQ6IFRDbGFzcyk6IFRDbGFzcyB7XG4gICAgY29uc3QgcGFyYW1zID0gc2V0UGFyYW0odGFyZ2V0LnByb3RvdHlwZSk7XG4gICAgcGFyYW1zLmJhc2VIZWFkZXJzID0gaGVhZGVycztcbiAgICByZXR1cm4gdGFyZ2V0O1xuICB9O1xufVxuXG5mdW5jdGlvbiBtYWtlUGFyYW0ocGFyYW1OYW1lOiBzdHJpbmcpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIChrZXk/OiBzdHJpbmcpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24gKHRhcmdldDogQmFzZUFwaSwgcHJvcGVydHlLZXk6IHN0cmluZywgaW5kZXg6IG51bWJlcikge1xuICAgICAgY29uc3QgcGFyYW1zID0gc2V0UGFyYW0oc2V0UGFyYW0odGFyZ2V0KSwgcHJvcGVydHlLZXkpO1xuICAgICAgbGV0IHRQYXJhbXMgPSBwYXJhbXNbcGFyYW1OYW1lXTtcbiAgICAgIGlmICh0eXBlb2YgdFBhcmFtcyA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgdFBhcmFtcyA9IHBhcmFtc1twYXJhbU5hbWVdID0gW107XG4gICAgICB9XG4gICAgICB0UGFyYW1zLnB1c2goe1xuICAgICAgICBrZXksXG4gICAgICAgIGluZGV4XG4gICAgICB9KTtcbiAgICB9O1xuICB9O1xufVxuXG4vKipcbiAqIFVSTOi3r+eUseWPguaVsFxuICogLSDmnInmlYjojIPlm7TvvJrmlrnms5Xlj4LmlbBcbiAqL1xuZXhwb3J0IGNvbnN0IFBhdGggPSBtYWtlUGFyYW0oJ3BhdGgnKTtcblxuLyoqXG4gKiBVUkwg5Y+C5pWwIGBRdWVyeVN0cmluZ2BcbiAqIC0g5pyJ5pWI6IyD5Zu077ya5pa55rOV5Y+C5pWwXG4gKi9cbmV4cG9ydCBjb25zdCBRdWVyeSA9IG1ha2VQYXJhbSgncXVlcnknKTtcblxuLyoqXG4gKiDlj4LmlbAgYEJvZHlgXG4gKiAtIOacieaViOiMg+WbtO+8muaWueazleWPguaVsFxuICovXG5leHBvcnQgY29uc3QgQm9keSA9IG1ha2VQYXJhbSgnYm9keScpKCk7XG5cbi8qKlxuICog5Y+C5pWwIGBoZWFkZXJzYFxuICogLSDmnInmlYjojIPlm7TvvJrmlrnms5Xlj4LmlbBcbiAqIC0g5ZCI5bm2IGBCYXNlSGVhZGVyc2BcbiAqL1xuZXhwb3J0IGNvbnN0IEhlYWRlcnMgPSBtYWtlUGFyYW0oJ2hlYWRlcnMnKTtcblxuLyoqXG4gKiBSZXF1ZXN0IFBheWxvYWRcbiAqIC0gU3VwcG9ydGVkIGJvZHkgKGxpa2VgUE9TVGAsIGBQVVRgKSBhcyBhIGJvZHkgZGF0YSwgZXF1aXZhbGVudCB0byBgQEJvZHlgXG4gKiAtIE5vdCBzdXBwb3J0ZWQgYm9keSAobGlrZSBgR0VUYCwgYERFTEVURWAgZXRjKSBhcyBhIGBRdWVyeVN0cmluZ2BcbiAqL1xuZXhwb3J0IGNvbnN0IFBheWxvYWQgPSBtYWtlUGFyYW0oJ3BheWxvYWQnKSgpO1xuXG5mdW5jdGlvbiBnZXRWYWxpZEFyZ3MoZGF0YTogYW55LCBrZXk6IHN0cmluZywgYXJnczogYW55W10pOiBOelNhZmVBbnkge1xuICBpZiAoIWRhdGFba2V5XSB8fCAhQXJyYXkuaXNBcnJheShkYXRhW2tleV0pIHx8IGRhdGFba2V5XS5sZW5ndGggPD0gMCkge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbiAgcmV0dXJuIGFyZ3NbZGF0YVtrZXldWzBdLmluZGV4XTtcbn1cblxuZnVuY3Rpb24gZ2VuQm9keShkYXRhPzogYW55LCBwYXlsb2FkPzogYW55KTogYW55IHtcbiAgaWYgKEFycmF5LmlzQXJyYXkoZGF0YSkgfHwgQXJyYXkuaXNBcnJheShwYXlsb2FkKSkge1xuICAgIHJldHVybiBPYmplY3QuYXNzaWduKFtdLCBkYXRhLCBwYXlsb2FkKTtcbiAgfVxuICByZXR1cm4geyAuLi5kYXRhLCAuLi5wYXlsb2FkIH07XG59XG5cbmV4cG9ydCB0eXBlIE1FVEhPRF9UWVBFID0gJ09QVElPTlMnIHwgJ0dFVCcgfCAnUE9TVCcgfCAnREVMRVRFJyB8ICdQVVQnIHwgJ0hFQUQnIHwgJ1BBVENIJyB8ICdKU09OUCcgfCAnRk9STSc7XG5cbmZ1bmN0aW9uIG1ha2VNZXRob2QobWV0aG9kOiBNRVRIT0RfVFlQRSkge1xuICByZXR1cm4gZnVuY3Rpb24gKHVybDogc3RyaW5nID0gJycsIG9wdGlvbnM/OiBIdHRwT3B0aW9ucykge1xuICAgIHJldHVybiAoX3RhcmdldDogQmFzZUFwaSwgdGFyZ2V0S2V5Pzogc3RyaW5nLCBkZXNjcmlwdG9yPzogUHJvcGVydHlEZXNjcmlwdG9yKSA9PiB7XG4gICAgICBkZXNjcmlwdG9yIS52YWx1ZSA9IGZ1bmN0aW9uICguLi5hcmdzOiBhbnlbXSk6IE9ic2VydmFibGU8YW55PiB7XG4gICAgICAgIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuXG4gICAgICAgIGNvbnN0IGluamVjdG9yID0gKHRoaXMgYXMgTnpTYWZlQW55KS5pbmplY3RvciBhcyBJbmplY3RvcjtcbiAgICAgICAgY29uc3QgaHR0cCA9IGluamVjdG9yLmdldChfSHR0cENsaWVudCwgbnVsbCkgYXMgX0h0dHBDbGllbnQ7XG4gICAgICAgIGlmIChodHRwID09IG51bGwpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFxuICAgICAgICAgICAgYE5vdCBmb3VuZCAnX0h0dHBDbGllbnQnLCBZb3UgY2FuIGltcG9ydCAnQWxhaW5UaGVtZU1vZHVsZScgJiYgJ0h0dHBDbGllbnRNb2R1bGUnIGluIHlvdXIgcm9vdCBtb2R1bGUuYFxuICAgICAgICAgICk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBiYXNlRGF0YSA9IHNldFBhcmFtKHRoaXMpO1xuICAgICAgICBjb25zdCBkYXRhID0gc2V0UGFyYW0oYmFzZURhdGEsIHRhcmdldEtleSk7XG5cbiAgICAgICAgbGV0IHJlcXVlc3RVcmwgPSB1cmwgfHwgJyc7XG4gICAgICAgIHJlcXVlc3RVcmwgPSBbYmFzZURhdGEuYmFzZVVybCB8fCAnJywgcmVxdWVzdFVybC5zdGFydHNXaXRoKCcvJykgPyByZXF1ZXN0VXJsLnN1YnN0cigxKSA6IHJlcXVlc3RVcmxdLmpvaW4oJy8nKTtcbiAgICAgICAgLy8gZml4IGxhc3Qgc3BsaXRcbiAgICAgICAgaWYgKHJlcXVlc3RVcmwubGVuZ3RoID4gMSAmJiByZXF1ZXN0VXJsLmVuZHNXaXRoKCcvJykpIHtcbiAgICAgICAgICByZXF1ZXN0VXJsID0gcmVxdWVzdFVybC5zdWJzdHIoMCwgcmVxdWVzdFVybC5sZW5ndGggLSAxKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChvcHRpb25zLmFjbCkge1xuICAgICAgICAgIGNvbnN0IGFjbFNydiA9IGluamVjdG9yLmdldChBQ0xTZXJ2aWNlLCBudWxsKTtcbiAgICAgICAgICBpZiAoYWNsU3J2ICYmICFhY2xTcnYuY2FuKG9wdGlvbnMuYWNsKSkge1xuICAgICAgICAgICAgcmV0dXJuIHRocm93RXJyb3Ioe1xuICAgICAgICAgICAgICB1cmw6IHJlcXVlc3RVcmwsXG4gICAgICAgICAgICAgIHN0YXR1czogNDAxLFxuICAgICAgICAgICAgICBzdGF0dXNUZXh0OiBgRnJvbSBIdHRwIERlY29yYXRvcmBcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgICBkZWxldGUgb3B0aW9ucy5hY2w7XG4gICAgICAgIH1cblxuICAgICAgICByZXF1ZXN0VXJsID0gcmVxdWVzdFVybC5yZXBsYWNlKC86Oi9nLCAnXl4nKTtcbiAgICAgICAgKChkYXRhLnBhdGggYXMgUGFyYW1UeXBlW10pIHx8IFtdKVxuICAgICAgICAgIC5maWx0ZXIodyA9PiB0eXBlb2YgYXJnc1t3LmluZGV4XSAhPT0gJ3VuZGVmaW5lZCcpXG4gICAgICAgICAgLmZvckVhY2goKGk6IFBhcmFtVHlwZSkgPT4ge1xuICAgICAgICAgICAgcmVxdWVzdFVybCA9IHJlcXVlc3RVcmwucmVwbGFjZShuZXcgUmVnRXhwKGA6JHtpLmtleX1gLCAnZycpLCBlbmNvZGVVUklDb21wb25lbnQoYXJnc1tpLmluZGV4XSkpO1xuICAgICAgICAgIH0pO1xuICAgICAgICByZXF1ZXN0VXJsID0gcmVxdWVzdFVybC5yZXBsYWNlKC9cXF5cXF4vZywgYDpgKTtcblxuICAgICAgICBjb25zdCBwYXJhbXMgPSAoZGF0YS5xdWVyeSB8fCBbXSkucmVkdWNlKChwOiBOelNhZmVBbnksIGk6IFBhcmFtVHlwZSkgPT4ge1xuICAgICAgICAgIHBbaS5rZXldID0gYXJnc1tpLmluZGV4XTtcbiAgICAgICAgICByZXR1cm4gcDtcbiAgICAgICAgfSwge30pO1xuXG4gICAgICAgIGNvbnN0IGhlYWRlcnMgPSAoZGF0YS5oZWFkZXJzIHx8IFtdKS5yZWR1Y2UoKHA6IE56U2FmZUFueSwgaTogUGFyYW1UeXBlKSA9PiB7XG4gICAgICAgICAgcFtpLmtleV0gPSBhcmdzW2kuaW5kZXhdO1xuICAgICAgICAgIHJldHVybiBwO1xuICAgICAgICB9LCB7fSk7XG5cbiAgICAgICAgaWYgKG1ldGhvZCA9PT0gJ0ZPUk0nKSB7XG4gICAgICAgICAgaGVhZGVyc1snY29udGVudC10eXBlJ10gPSAnYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkJztcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHBheWxvYWQgPSBnZXRWYWxpZEFyZ3MoZGF0YSwgJ3BheWxvYWQnLCBhcmdzKTtcbiAgICAgICAgY29uc3Qgc3VwcG9ydGVkQm9keSA9IG1ldGhvZCA9PT0gJ1BPU1QnIHx8IG1ldGhvZCA9PT0gJ1BVVCc7XG5cbiAgICAgICAgcmV0dXJuIGh0dHAucmVxdWVzdChtZXRob2QsIHJlcXVlc3RVcmwsIHtcbiAgICAgICAgICBib2R5OiBzdXBwb3J0ZWRCb2R5ID8gZ2VuQm9keShnZXRWYWxpZEFyZ3MoZGF0YSwgJ2JvZHknLCBhcmdzKSwgcGF5bG9hZCkgOiBudWxsLFxuICAgICAgICAgIHBhcmFtczogIXN1cHBvcnRlZEJvZHkgPyB7IC4uLnBhcmFtcywgLi4ucGF5bG9hZCB9IDogcGFyYW1zLFxuICAgICAgICAgIGhlYWRlcnM6IHsgLi4uYmFzZURhdGEuYmFzZUhlYWRlcnMsIC4uLmhlYWRlcnMgfSxcbiAgICAgICAgICAuLi5vcHRpb25zXG4gICAgICAgIH0pO1xuICAgICAgfTtcblxuICAgICAgcmV0dXJuIGRlc2NyaXB0b3I7XG4gICAgfTtcbiAgfTtcbn1cblxuLyoqXG4gKiBgT1BUSU9OU2Ag6K+35rGCXG4gKiAtIOacieaViOiMg+WbtO+8muaWueazlVxuICovXG5leHBvcnQgY29uc3QgT1BUSU9OUyA9IG1ha2VNZXRob2QoJ09QVElPTlMnKTtcblxuLyoqXG4gKiBgR0VUYCDor7fmsYJcbiAqIC0g5pyJ5pWI6IyD5Zu077ya5pa55rOVXG4gKi9cbmV4cG9ydCBjb25zdCBHRVQgPSBtYWtlTWV0aG9kKCdHRVQnKTtcblxuLyoqXG4gKiBgUE9TVGAg6K+35rGCXG4gKiAtIOacieaViOiMg+WbtO+8muaWueazlVxuICovXG5leHBvcnQgY29uc3QgUE9TVCA9IG1ha2VNZXRob2QoJ1BPU1QnKTtcblxuLyoqXG4gKiBgREVMRVRFYCDor7fmsYJcbiAqIC0g5pyJ5pWI6IyD5Zu077ya5pa55rOVXG4gKi9cbmV4cG9ydCBjb25zdCBERUxFVEUgPSBtYWtlTWV0aG9kKCdERUxFVEUnKTtcblxuLyoqXG4gKiBgUFVUYCDor7fmsYJcbiAqIC0g5pyJ5pWI6IyD5Zu077ya5pa55rOVXG4gKi9cbmV4cG9ydCBjb25zdCBQVVQgPSBtYWtlTWV0aG9kKCdQVVQnKTtcblxuLyoqXG4gKiBgSEVBRGAg6K+35rGCXG4gKiAtIOacieaViOiMg+WbtO+8muaWueazlVxuICovXG5leHBvcnQgY29uc3QgSEVBRCA9IG1ha2VNZXRob2QoJ0hFQUQnKTtcblxuLyoqXG4gKiBgUEFUQ0hgIOivt+axglxuICogLSDmnInmlYjojIPlm7TvvJrmlrnms5VcbiAqL1xuZXhwb3J0IGNvbnN0IFBBVENIID0gbWFrZU1ldGhvZCgnUEFUQ0gnKTtcblxuLyoqXG4gKiBgSlNPTlBgIOivt+axglxuICogLSDmnInmlYjojIPlm7TvvJrmlrnms5VcbiAqL1xuZXhwb3J0IGNvbnN0IEpTT05QID0gbWFrZU1ldGhvZCgnSlNPTlAnKTtcblxuLyoqXG4gKiBgRk9STWAg6K+35rGCXG4gKiAtIOacieaViOiMg+WbtO+8muaWueazlVxuICovXG5leHBvcnQgY29uc3QgRk9STSA9IG1ha2VNZXRob2QoJ0ZPUk0nKTtcbiJdfQ==
|