@ebuilding/runtime 3.2.0 → 3.2.1

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/fesm2022/core.mjs CHANGED
@@ -5,7 +5,6 @@ import ngZh from '@angular/common/locales/zh';
5
5
  import ngZhTw from '@angular/common/locales/zh-Hant';
6
6
  import * as i0 from '@angular/core';
7
7
  import { inject, Injectable, InjectionToken, provideAppInitializer, Injector } from '@angular/core';
8
- import * as i1$1 from '@delon/theme';
9
8
  import { en_US, zh_TW, zh_CN, AlainI18nBaseService, _HttpClient, SettingsService, DelonLocaleService, ALAIN_I18N_TOKEN, IGNORE_BASE_URL, MenuService, TitleService } from '@delon/theme';
10
9
  import { enUS, zhTW, zhCN } from 'date-fns/locale';
11
10
  import { en_US as en_US$1, zh_TW as zh_TW$1, zh_CN as zh_CN$1, NzI18nService } from 'ng-zorro-antd/i18n';
@@ -13,7 +12,6 @@ import * as i1 from '@delon/util/config';
13
12
  import { HttpClient, HttpErrorResponse, HttpResponse, HttpHeaders, HttpResponseBase } from '@angular/common/http';
14
13
  import { DA_SERVICE_TOKEN } from '@delon/auth';
15
14
  import { BehaviorSubject, throwError, filter, take, switchMap, catchError, of, mergeMap, zip, timeout, map } from 'rxjs';
16
- import * as i2 from '@angular/router';
17
15
  import { Router } from '@angular/router';
18
16
  import { NzNotificationService } from 'ng-zorro-antd/notification';
19
17
  import { AppSetId, AppCustomerId } from '@ebuilding/base/shared.var/shared.variable';
@@ -22,7 +20,9 @@ import { NzMessageService } from 'ng-zorro-antd/message';
22
20
  import { ACLService } from '@delon/acl';
23
21
  import _ from 'lodash';
24
22
  import { initData } from '@ebuilding/base/shared.util/comm.menu';
25
- import { map as map$1, tap, catchError as catchError$1, shareReplay } from 'rxjs/operators';
23
+ import { AppFeatureConfigService } from '@ebuilding/base/shared.srv/app-feature-config.service';
24
+ export { AppFeatureConfigKey, AppFeatureConfigService } from '@ebuilding/base/shared.srv/app-feature-config.service';
25
+ import { map as map$1 } from 'rxjs/operators';
26
26
 
27
27
  const DEFAULT = 'zh-CN';
28
28
  const LANGS = {
@@ -520,79 +520,13 @@ const startDefaultGuard = (_route, state) => {
520
520
  return router.parseUrl('/exception');
521
521
  };
522
522
 
523
- const AppFeatureConfigKey = 'APP_FEATURE_CONFIG';
524
- class AppFeatureConfigService {
525
- http;
526
- settings;
527
- router;
528
- loading$ = null;
529
- constructor(http, settings, router) {
530
- this.http = http;
531
- this.settings = settings;
532
- this.router = router;
533
- }
534
- load(force = false) {
535
- if (!force) {
536
- const cached = this.current();
537
- if (cached) {
538
- return of(cached);
539
- }
540
- if (this.loading$) {
541
- return this.loading$;
542
- }
543
- }
544
- this.loading$ = this.http.post(`${ModuleAPI.system}/sys/config/listData`, null).pipe(map$1((res) => this.fromResponse(res?.result || {})), tap(config => this.set(config)), catchError$1(() => {
545
- const config = this.defaults();
546
- this.set(config);
547
- return of(config);
548
- }), shareReplay(1));
549
- return this.loading$;
550
- }
551
- save(config) {
552
- const body = {
553
- ENABLE_WORKFLOW: config.enableWorkflow ? '1' : '0',
554
- ENABLE_MESSAGE_CENTER: config.enableMessageCenter ? '1' : '0'
555
- };
556
- return this.http.post(`${ModuleAPI.system}/sys/config/saveData`, body).pipe(map$1((res) => this.fromResponse(res?.result || body)), tap(value => this.set(value)));
557
- }
558
- current() {
559
- return this.settings.getData(AppFeatureConfigKey) || null;
560
- }
561
- redirectHome() {
562
- this.router.navigateByUrl('/home');
563
- }
564
- set(config) {
565
- this.settings.setData(AppFeatureConfigKey, config);
566
- }
567
- fromResponse(data) {
568
- return {
569
- enableWorkflow: this.toBool(data?.ENABLE_WORKFLOW, true),
570
- enableMessageCenter: this.toBool(data?.ENABLE_MESSAGE_CENTER, true)
571
- };
572
- }
573
- defaults() {
574
- return {
575
- enableWorkflow: true,
576
- enableMessageCenter: true
577
- };
578
- }
579
- toBool(value, defaultValue) {
580
- if (value === undefined || value === null || value === '') {
581
- return defaultValue;
582
- }
583
- return value === true || value === 1 || value === '1' || `${value}`.toLowerCase() === 'true';
584
- }
585
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.15", ngImport: i0, type: AppFeatureConfigService, deps: [{ token: i1$1._HttpClient }, { token: i1$1.SettingsService }, { token: i2.Router }], target: i0.ɵɵFactoryTarget.Injectable });
586
- static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.2.15", ngImport: i0, type: AppFeatureConfigService, providedIn: 'root' });
587
- }
588
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.15", ngImport: i0, type: AppFeatureConfigService, decorators: [{
589
- type: Injectable,
590
- args: [{ providedIn: 'root' }]
591
- }], ctorParameters: () => [{ type: i1$1._HttpClient }, { type: i1$1.SettingsService }, { type: i2.Router }] });
523
+ /**
524
+ * 兼容运行端原有导入路径,实际实现统一由 base/shared.srv 提供。
525
+ */
592
526
 
593
527
  const workflowFeatureGuard = () => {
594
528
  const service = inject(AppFeatureConfigService);
595
- return service.load().pipe(map$1(config => {
529
+ return service.refresh().pipe(map$1(config => {
596
530
  if (!config.enableWorkflow) {
597
531
  service.redirectHome();
598
532
  return false;
@@ -602,7 +536,7 @@ const workflowFeatureGuard = () => {
602
536
  };
603
537
  const messageFeatureGuard = () => {
604
538
  const service = inject(AppFeatureConfigService);
605
- return service.load().pipe(map$1(config => {
539
+ return service.refresh().pipe(map$1(config => {
606
540
  if (!config.enableMessageCenter) {
607
541
  service.redirectHome();
608
542
  return false;
@@ -615,5 +549,5 @@ const messageFeatureGuard = () => {
615
549
  * Generated bundle index. Do not edit.
616
550
  */
617
551
 
618
- export { AppFeatureConfigKey, AppFeatureConfigService, I18NService, RUNTIME_CORE_ENVIRONMENT, StartupService, defaultInterceptor, messageFeatureGuard, provideBindAuthRefresh, provideStartup, startDefaultGuard, workflowFeatureGuard };
552
+ export { I18NService, RUNTIME_CORE_ENVIRONMENT, StartupService, defaultInterceptor, messageFeatureGuard, provideBindAuthRefresh, provideStartup, startDefaultGuard, workflowFeatureGuard };
619
553
  //# sourceMappingURL=core.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"core.mjs","sources":["../../../../packages/runtime/core/i18n/i18n.service.ts","../../../../packages/runtime/core/runtime-core.tokens.ts","../../../../packages/runtime/core/net/helper.ts","../../../../packages/runtime/core/net/refresh-token.ts","../../../../packages/runtime/core/net/default.interceptor.ts","../../../../packages/runtime/core/startup/startup.service.ts","../../../../packages/runtime/core/start-default.guard.ts","../../../../packages/runtime/core/app-feature-config.service.ts","../../../../packages/runtime/core/app-feature.guard.ts","../../../../packages/runtime/core/core.ts"],"sourcesContent":["\nimport { Platform } from '@angular/cdk/platform';\nimport { registerLocaleData } from '@angular/common';\nimport ngEn from '@angular/common/locales/en';\nimport ngZh from '@angular/common/locales/zh';\nimport ngZhTw from '@angular/common/locales/zh-Hant';\nimport { Injectable, inject } from '@angular/core';\nimport {\n DelonLocaleService,\n en_US as delonEnUS,\n SettingsService,\n zh_CN as delonZhCn,\n zh_TW as delonZhTw,\n _HttpClient,\n AlainI18nBaseService\n} from '@delon/theme';\nimport { AlainConfigService } from '@delon/util/config';\nimport { enUS as dfEn, zhCN as dfZhCn, zhTW as dfZhTw } from 'date-fns/locale';\nimport { NzSafeAny } from 'ng-zorro-antd/core/types';\nimport { en_US as zorroEnUS, NzI18nService, zh_CN as zorroZhCN, zh_TW as zorroZhTW } from 'ng-zorro-antd/i18n';\nimport { Observable } from 'rxjs';\n\ninterface LangConfigData {\n abbr: string;\n text: string;\n ng: NzSafeAny;\n zorro: NzSafeAny;\n date: NzSafeAny;\n delon: NzSafeAny;\n}\n\nconst DEFAULT = 'zh-CN';\nconst LANGS: Record<string, LangConfigData> = {\n 'zh-CN': {\n text: '简体中文',\n ng: ngZh,\n zorro: zorroZhCN,\n date: dfZhCn,\n delon: delonZhCn,\n abbr: '🇨🇳'\n },\n 'zh-TW': {\n text: '繁体中文',\n ng: ngZhTw,\n zorro: zorroZhTW,\n date: dfZhTw,\n delon: delonZhTw,\n abbr: '🇭🇰'\n },\n 'en-US': {\n text: 'English',\n ng: ngEn,\n zorro: zorroEnUS,\n date: dfEn,\n delon: delonEnUS,\n abbr: '🇬🇧'\n }\n};\n\n@Injectable({ providedIn: 'root' })\nexport class I18NService extends AlainI18nBaseService {\n private readonly http = inject(_HttpClient);\n private readonly settings = inject(SettingsService);\n private readonly nzI18nService = inject(NzI18nService);\n private readonly delonLocaleService = inject(DelonLocaleService);\n private readonly platform = inject(Platform);\n\n protected override _defaultLang = DEFAULT;\n private _langs = Object.keys(LANGS).map(code => {\n const item = LANGS[code];\n return { code, text: item.text, abbr: item.abbr };\n });\n\n constructor(cogSrv: AlainConfigService) {\n super(cogSrv);\n\n const defaultLang = this.getDefaultLang();\n this._defaultLang = this._langs.findIndex(w => w.code === defaultLang) === -1 ? DEFAULT : defaultLang;\n }\n\n private getDefaultLang(): string {\n if (!this.platform.isBrowser) {\n return DEFAULT;\n }\n if (this.settings.layout.lang) {\n return this.settings.layout.lang;\n }\n let res = (navigator.languages ? navigator.languages[0] : null) || navigator.language;\n const arr = res.split('-');\n return arr.length <= 1 ? res : `${arr[0]}-${arr[1].toUpperCase()}`;\n }\n\n loadLangData(lang: string): Observable<NzSafeAny> {\n return this.http.get(`./assets/tmp/i18n/${lang}.json`);\n }\n\n use(lang: string, data: Record<string, unknown>): void {\n if (this._currentLang === lang) return;\n\n this._data = this.flatData(data, []);\n\n const item = LANGS[lang];\n registerLocaleData(item.ng);\n this.nzI18nService.setLocale(item.zorro);\n this.nzI18nService.setDateLocale(item.date);\n this.delonLocaleService.setLocale(item.delon);\n this._currentLang = lang;\n\n this._change$.next(lang);\n }\n\n getLangs(): Array<{ code: string; text: string; abbr: string }> {\n return this._langs;\n }\n}\n","import { InjectionToken } from '@angular/core';\n\nexport interface RuntimeCoreEnvironment {\n production: boolean;\n useHash: boolean;\n api: {\n baseUrl: string;\n licenseUrl?: string;\n flyUrl: string;\n preRequest?: string;\n mockToken?: string;\n refreshTokenEnabled?: boolean;\n refreshTokenType?: string;\n };\n modules?: unknown[];\n config?: unknown;\n configFile?: string;\n}\n\nexport const RUNTIME_CORE_ENVIRONMENT = new InjectionToken<RuntimeCoreEnvironment>('RUNTIME_CORE_ENVIRONMENT', {\n providedIn: 'root',\n factory: () => ({\n production: false,\n useHash: false,\n api: {\n baseUrl: '',\n licenseUrl: '',\n flyUrl: '',\n preRequest: '',\n mockToken: '',\n refreshTokenEnabled: true,\n refreshTokenType: 'auth-refresh',\n },\n modules: [],\n config: null,\n configFile: 'development.json',\n }),\n});\n\n","import { HttpHeaders, HttpResponseBase, HttpRequest } from '@angular/common/http';\nimport { Injector, inject } from '@angular/core';\nimport { Router } from '@angular/router';\nimport { DA_SERVICE_TOKEN, ITokenService } from '@delon/auth';\nimport { ALAIN_I18N_TOKEN, SettingsService } from '@delon/theme';\nimport { NzNotificationService } from 'ng-zorro-antd/notification';\nimport { AppCustomerId, AppSetId } from '@ebuilding/base/shared.var/shared.variable';\nimport { Gram_App_Type } from '@ebuilding/base/shared.var/shared.constant';\nimport { RUNTIME_CORE_ENVIRONMENT } from '../runtime-core.tokens';\n\nexport interface ReThrowHttpError {\n body: any;\n _throw: true;\n}\n\nexport const CODEMESSAGE: Record<number, string> = {\n 200: '服务器成功返回请求的数据。',\n 201: '新建或修改数据成功。',\n 202: '一个请求已经进入后台排队(异步任务)。',\n 204: '删除数据成功。',\n 400: '发出的请求有错误,服务器没有进行新建或修改数据的操作。',\n 401: '用户没有权限(令牌、用户名、密码错误)。',\n 403: '用户得到授权,但是访问是被禁止的。',\n 404: '发出的请求针对的是不存在的记录,服务器没有进行操作。',\n 406: '请求的格式不可得。',\n 410: '请求的资源被永久删除,且不会再得到的。',\n 422: '当创建一个对象时,发生一个验证错误。',\n 500: '服务器发生错误,请检查服务器。',\n 502: '网关错误。',\n 503: '服务不可用,服务器暂时过载或维护。',\n 504: '网关超时。'\n};\n\n\nexport function goTo(injector: Injector, url: string): void {\n setTimeout(() => injector.get(Router).navigateByUrl(url));\n}\n\nexport function toLogin(injector: Injector): void {\n //injector.get(NzNotificationService).error(`未登录或登录已过期,请重新登录。`, ``);\n goTo(injector, injector.get(DA_SERVICE_TOKEN).login_url!);\n}\n\nexport function getAdditionalHeaders(req: HttpRequest<any>, injector: Injector): Record<string, string> {\n const res: Record<string, string> = {};\n const environment = injector.get(RUNTIME_CORE_ENVIRONMENT);\n\n const tokenSrv = injector.get(DA_SERVICE_TOKEN);\n const token = tokenSrv.get()?.token;\n\n const settingSrv = injector.get(SettingsService);\n\n const lang = inject(ALAIN_I18N_TOKEN).currentLang;\n if (!req?.headers?.has('Accept-Language') && lang) {\n res['Accept-Language'] = lang;\n }\n const appType: any = settingSrv.getData(Gram_App_Type);\n if (token) {\n if (req.url.indexOf('airservice-') > 0) {\n res['x-auth-token'] = environment.api.mockToken;\n }\n\n const eId: any = settingSrv.getData(AppSetId);\n res['X-Access-Token'] = token;\n res['e-id'] = eId!! ? eId : '';\n res['customerId'] = settingSrv.getData(AppCustomerId);\n\n }\n\n\n\n if (req.url.indexOf('auth/login') > 0) {\n if (appType == 'FLY') {\n res['x-auth-token'] = '';\n } else {\n res['X-Access-Token'] = '';\n res['e-id'] = '';\n }\n }\n if (req.url.indexOf('api/etalent/v1/upload') > 0) {\n const res2: { [name: string]: string } = {};\n res2['Authorization'] = '';\n res2['X-CSRF-Token'] = '';\n res2['X-Max'] = '';\n return res2;\n }\n\n return res;\n}\n\nexport function checkStatus(injector: Injector, ev: HttpResponseBase): void {\n if ((ev.status >= 200 && ev.status < 300) || ev.status === 401) {\n return;\n }\n\n const errortext = CODEMESSAGE[ev.status] || ev.statusText;\n injector.get(NzNotificationService).error(`请求错误 ${ev.status}: ${ev.url}`, errortext);\n}\n","import { HttpClient, HttpHandlerFn, HttpRequest, HttpResponseBase } from '@angular/common/http';\nimport { EnvironmentProviders, Injector, inject, provideAppInitializer } from '@angular/core';\nimport { DA_SERVICE_TOKEN } from '@delon/auth';\nimport { BehaviorSubject, Observable, catchError, filter, switchMap, take, throwError } from 'rxjs';\n\nimport { toLogin } from './helper';\n\nlet refreshToking = false;\nlet refreshToken$: BehaviorSubject<any> = new BehaviorSubject<any>(null);\n\n/**\n * 重新附加新 Token 信息\n *\n * > 由于已经发起的请求,不会再走一遍 `@delon/auth` 因此需要结合业务情况重新附加新的 Token\n */\nfunction reAttachToken(injector: Injector, req: HttpRequest<any>): HttpRequest<any> {\n const token = injector.get(DA_SERVICE_TOKEN).get()?.token;\n return req.clone({\n setHeaders: {\n token: `Bearer ${token}`\n }\n });\n}\n\nfunction refreshTokenRequest(injector: Injector): Observable<any> {\n const model = injector.get(DA_SERVICE_TOKEN).get();\n return injector.get(HttpClient).post(`/api/auth/refresh`, { headers: { refresh_token: model?.['refresh_token'] || '' } });\n}\n\n/**\n * 刷新Token方式一:使用 401 重新刷新 Token\n */\nexport function tryRefreshToken(injector: Injector, ev: HttpResponseBase, req: HttpRequest<any>, next: HttpHandlerFn): Observable<any> {\n // 1、若请求为刷新Token请求,表示来自刷新Token可以直接跳转登录页\n if ([`/api/auth/refresh`].some(url => req.url.includes(url))) {\n toLogin(injector);\n return throwError(() => ev);\n }\n // 2、如果 `refreshToking` 为 `true` 表示已经在请求刷新 Token 中,后续所有请求转入等待状态,直至结果返回后再重新发起请求\n if (refreshToking) {\n return refreshToken$.pipe(\n filter(v => !!v),\n take(1),\n switchMap(() => next(reAttachToken(injector, req)))\n );\n }\n // 3、尝试调用刷新 Token\n refreshToking = true;\n refreshToken$.next(null);\n\n return refreshTokenRequest(injector).pipe(\n switchMap(res => {\n // 通知后续请求继续执行\n refreshToking = false;\n refreshToken$.next(res);\n // 重新保存新 token\n injector.get(DA_SERVICE_TOKEN).set(res);\n // 重新发起请求\n return next(reAttachToken(injector, req));\n }),\n catchError(err => {\n refreshToking = false;\n toLogin(injector);\n return throwError(() => err);\n })\n );\n}\n\nfunction buildAuthRefresh(injector: Injector): void {\n const tokenSrv = injector.get(DA_SERVICE_TOKEN);\n tokenSrv.refresh\n .pipe(\n filter(() => !refreshToking),\n switchMap(res => {\n refreshToking = true;\n return refreshTokenRequest(injector);\n })\n )\n .subscribe({\n next: res => {\n // TODO: Mock expired value\n res.expired = +new Date() + 1000 * 60 * 5;\n refreshToking = false;\n tokenSrv.set(res);\n },\n error: () => toLogin(injector)\n });\n}\n\n/**\n * 刷新Token方式二:使用 `@delon/auth` 的 `refresh` 接口,需要在 `app.config.ts` 中注册 `provideBindAuthRefresh`\n */\nexport function provideBindAuthRefresh(): EnvironmentProviders[] {\n return [\n provideAppInitializer(() => {\n const initializerFn = (\n (injector: Injector) => () =>\n buildAuthRefresh(injector)\n )(inject(Injector));\n return initializerFn();\n })\n ];\n}\n","import {\n HttpErrorResponse, HttpHandlerFn, HttpInterceptorFn, HttpRequest, HttpResponseBase,\n HttpResponse, HttpHeaders\n} from '@angular/common/http';\nimport { Injector, inject } from '@angular/core';\nimport { IGNORE_BASE_URL } from '@delon/theme';\nimport { Observable, of, throwError, mergeMap, catchError } from 'rxjs';\nimport { NzMessageService } from 'ng-zorro-antd/message';\nimport { ReThrowHttpError, checkStatus, getAdditionalHeaders, toLogin } from './helper';\nimport { RUNTIME_CORE_ENVIRONMENT } from '../runtime-core.tokens';\n\nfunction handleData(injector: Injector, ev: HttpResponseBase, req: HttpRequest<any>, next: HttpHandlerFn): Observable<any> {\n const msg = injector.get(NzMessageService);\n checkStatus(injector, ev);\n\n switch (ev.status) {\n case 200:\n if (ev instanceof HttpResponse) {\n const body: any = ev.body;\n const contentDisposition = ev.headers.get('content-disposition');\n const isDownload = /attachment/i.test(contentDisposition || '')\n || body?.type === 'application/vnd.ms-excel'\n || body?.type?.includes('application/vnd.openxmlformats-officedocument.spreadsheetml.sheet');\n\n if (body && isDownload) {\n // ❗建议你在此处引入并注入下载服务\n // const downloadService = injector.get(YourDownloadService);\n // downloadService.download(ev); \n download(ev);\n } else {\n if (body?.code === '1001') {\n toLogin(injector);\n throw new Error(body.message);\n } else if (body?.code === '99999') {\n msg.error('上传的license文件不合规,请认证后再上传');\n return of(new HttpResponse({ body }));\n } else {\n if (body?.error) {\n return throwError(() => ({ error: body.error }));\n }\n if (body?.code && Number(body.code) !== 200) {\n msg.error(body.message);\n }\n if (body?.data !== undefined && Number(body.code) === 200) {\n return of(new HttpResponse({ body }));\n }\n }\n }\n }\n break;\n\n case 401:\n if (ev.url && ev.url.indexOf('/sys/module') < 0) {\n const msgText = ev['error']?.['message'];\n if (msgText && msgText !== 'token非法无效!' && msgText !== 'Token失效,请重新登录!') {\n // const authService = injector.get(AuthService);\n // authService.authErrorSubject.next(msgText);\n toLogin(injector);\n } else {\n toLogin(injector);\n }\n } else {\n toLogin(injector);\n }\n break;\n\n case 403:\n case 404:\n case 500:\n // 可跳转到异常页面,例如:\n // goTo(injector, `/exception/${ev.status}?url=${req.urlWithParams}`);\n break;\n\n default:\n if (ev instanceof HttpErrorResponse) {\n console.warn('未可知错误,大部分是由于后端不支持跨域CORS或无效配置引起', ev);\n }\n break;\n }\n\n if (ev instanceof HttpErrorResponse) {\n return throwError(() => ev);\n } else if ((ev as unknown as ReThrowHttpError)._throw === true) {\n return throwError(() => (ev as unknown as ReThrowHttpError).body);\n } else {\n return of(ev);\n }\n}\n\nexport const defaultInterceptor: HttpInterceptorFn = (req, next) => {\n const injector = inject(Injector);\n const environment = inject(RUNTIME_CORE_ENVIRONMENT);\n\n let url = req.url;\n if (!req.context.get(IGNORE_BASE_URL) && !url.startsWith('https://') && !url.startsWith('http://') &&\n url.indexOf('assets') < 0 &&\n url.indexOf('api/etalent/v1/upload') < 0) {\n const { baseUrl, flyUrl } = environment.api;\n if (url.indexOf('flv/index') > 0) {\n }\n else if (url.indexOf('airservice-') > 0 || url.indexOf('airadapter-') > 0) {\n url = flyUrl + (flyUrl.endsWith('/') && url.startsWith('/') ? url.substring(1) : url);\n } else {\n url = baseUrl + (baseUrl.endsWith('/') && url.startsWith('/') ? url.substring(1) : url);\n }\n }\n let headers = req.headers;\n const shouldAddToken = !url.includes('flv/index/api/whep') && !url.includes('auth/login');\n if (shouldAddToken) {\n const additional = getAdditionalHeaders(req, injector);\n for (const k of Object.keys(additional)) {\n headers = headers.set(k, additional[k]);\n }\n } else {\n headers = new HttpHeaders();\n }\n\n const newReq = req.clone({\n url,\n headers,\n responseType: url.indexOf('export') > 0 ? 'blob' : null\n });\n\n return next(newReq).pipe(\n mergeMap(ev => {\n if (ev instanceof HttpResponseBase) {\n return handleData(injector, ev, newReq, next);\n }\n return of(ev);\n }),\n catchError((err: HttpErrorResponse) => handleData(injector, err, newReq, next)) // ✅ 必须保留\n );\n};\n\nfunction download(ev: HttpResponse<Blob>) {\n const data = ev.body;\n const headers = ev.headers;\n\n let fileName = 'download.xls';\n const contentDisposition = headers.get('Content-Disposition') || headers.get('content-disposition');\n if (contentDisposition) {\n const matches = /filename=([^;]+)/.exec(contentDisposition);\n if (matches?.[1]) {\n fileName = decodeURIComponent(matches[1].replace(/['\"]/g, ''));\n }\n }\n\n executeDownload(data, fileName);\n}\n\nfunction executeDownload(data: any, fileName: string) {\n if (!data) return;\n\n const url = window.URL.createObjectURL(new Blob([data]));\n const link = document.createElement('a');\n link.style.display = 'none';\n link.href = url;\n link.setAttribute('download', fileName);\n document.body.appendChild(link);\n link.click();\n document.body.removeChild(link);\n window.URL.revokeObjectURL(url);\n}\n","import { HttpClient } from '@angular/common/http';\nimport { EnvironmentProviders, Injectable, Provider, inject, provideAppInitializer } from '@angular/core';\nimport { Router } from '@angular/router';\nimport { ACLService } from '@delon/acl';\nimport { DA_SERVICE_TOKEN } from '@delon/auth';\nimport { ALAIN_I18N_TOKEN, MenuService, SettingsService, TitleService, _HttpClient } from '@delon/theme';\nimport { NzSafeAny } from 'ng-zorro-antd/core/types';\nimport { Observable, zip, of, catchError, map, switchMap, timeout } from 'rxjs';\nimport _ from 'lodash';\nimport { I18NService } from '../i18n/i18n.service';\nimport { initData } from '@ebuilding/base/shared.util/comm.menu';\nimport { ModuleAPI, Gram_App_Module } from '@ebuilding/base/shared.var/shared.constant';\nimport { RUNTIME_CORE_ENVIRONMENT } from '../runtime-core.tokens';\n\n/**\n * Used for application startup\n * Generally used to get the basic data of the application, like: Menu Data, User Data, etc.\n */\nexport function provideStartup(): Array<Provider | EnvironmentProviders> {\n return [\n StartupService,\n provideAppInitializer(() => {\n const initializerFn = (\n (startupService: StartupService) => () =>\n startupService.load()\n )(inject(StartupService));\n return initializerFn();\n })\n ];\n}\n\n@Injectable()\nexport class StartupService {\n private menuService = inject(MenuService);\n private settingService = inject(SettingsService);\n private aclService = inject(ACLService);\n private titleService = inject(TitleService);\n private httpClient = inject(HttpClient);\n private http = inject(_HttpClient);\n private router = inject(Router);\n private i18n = inject<I18NService>(ALAIN_I18N_TOKEN);\n private tokenSrv = inject(DA_SERVICE_TOKEN);\n private environment = inject(RUNTIME_CORE_ENVIRONMENT);\n load(): Observable<void> {\n const configFile = this.environment.configFile || 'development.json';\n return this.http.get(`assets/config/${configFile}?rd=${Math.random()}`).pipe(\n switchMap((configData: any) => {\n this.environment.config = configData;\n this.environment.useHash = configData.useHash;\n this.environment.production = configData.production;\n this.environment.api.baseUrl = configData.baseUrl;\n this.environment.api.flyUrl = configData.flyUrl;\n this.environment.api.licenseUrl = configData.licenseUrl;\n this.environment.api.mockToken = configData.mockToken;\n this.environment.api.preRequest = configData.preRequest;\n\n const defaultLang = this.i18n.defaultLang;\n\n return zip(\n this.getModule(),\n this.httpClient.get(`assets/tmp/i18n/${defaultLang}.json?rd=${Math.random()}`),\n this.httpClient.get(`assets/tmp/app-data.json?rd=${Math.random()}`)\n ).pipe(\n timeout(10000),\n map(([appModule, langData, appData]: [any, any, any]) => {\n this.i18n.use(defaultLang, langData);\n\n const res = appData as NzSafeAny;\n this.settingService.setApp(res.app);\n this.aclService.setFull(false);\n\n let listRole: any[] = [];\n const token: any = this.tokenSrv.get();\n if (token?.userInfo?.listRole) {\n listRole = token.userInfo.listRole;\n }\n this.aclService.setRole(listRole);\n\n let menuData: any[] = [];\n if (appModule?.result?.length > 0) {\n menuData = initData(appModule.result);\n }\n this.menuService.add(res.menu);\n this.menuService.resume();\n this.settingService.setData(Gram_App_Module, _.cloneDeep(menuData));\n\n\n this.titleService.default = '';\n this.titleService.suffix = res.app.name;\n }),\n catchError(res => {\n console.warn(`StartupService.load: Network request failed`, res);\n // setTimeout(() => this.router.navigateByUrl(`/exception/500`));\n return of(); // 返回空 Observable<void>\n })\n );\n }),\n catchError(res => {\n console.warn(`StartupService.load: App initialization failed`, res);\n return of(void 0);\n })\n );\n }\n\n\n getModule() {\n const token: any = this.tokenSrv.get()?.token;\n if (token) {\n return this.http.post(`${ModuleAPI.user}/user/sys/module`);\n } else {\n return of(null);\n }\n }\n}\n","\nimport { inject } from '@angular/core';\nimport { Router, CanActivateFn } from '@angular/router';\nimport { SettingsService } from '@delon/theme';\nimport { DA_SERVICE_TOKEN, ITokenService } from '@delon/auth';\nimport { Gram_Platform } from '@ebuilding/base/shared.var/shared.constant';\n\nexport const startDefaultGuard: CanActivateFn = (_route, state) => {\n const router = inject(Router);\n const settingSrv = inject(SettingsService);\n const tokenSrv = inject<ITokenService>(DA_SERVICE_TOKEN);\n const platform: any = settingSrv.getData(Gram_Platform);\n const token: any = tokenSrv.get();\n\n if (token && token?.token) {\n } else {\n return router.parseUrl('/auth/login');\n }\n\n if ((token?.forceChangePwd === true || token?.userInfo?.forceChangePwd === true) && state.url !== '/admin/change-password') {\n return router.parseUrl('/admin/change-password');\n }\n\n if (platform == \"DEFAULT\") {\n return true;\n }\n return router.parseUrl('/exception');\n};\n","import { Injectable } from '@angular/core';\nimport { Router } from '@angular/router';\nimport { SettingsService, _HttpClient } from '@delon/theme';\nimport { ModuleAPI } from '@ebuilding/base/shared.var/shared.constant';\nimport { Observable, of } from 'rxjs';\nimport { catchError, map, shareReplay, tap } from 'rxjs/operators';\n\nexport const AppFeatureConfigKey = 'APP_FEATURE_CONFIG';\n\nexport interface AppFeatureConfig {\n enableWorkflow: boolean;\n enableMessageCenter: boolean;\n}\n\n@Injectable({ providedIn: 'root' })\nexport class AppFeatureConfigService {\n private loading$: Observable<AppFeatureConfig> | null = null;\n\n constructor(private http: _HttpClient, private settings: SettingsService, private router: Router) { }\n\n load(force = false): Observable<AppFeatureConfig> {\n if (!force) {\n const cached = this.current();\n if (cached) {\n return of(cached);\n }\n if (this.loading$) {\n return this.loading$;\n }\n }\n this.loading$ = this.http.post(`${ModuleAPI.system}/sys/config/listData`, null).pipe(\n map((res: any) => this.fromResponse(res?.result || {})),\n tap(config => this.set(config)),\n catchError(() => {\n const config = this.defaults();\n this.set(config);\n return of(config);\n }),\n shareReplay(1)\n );\n return this.loading$;\n }\n\n save(config: AppFeatureConfig): Observable<AppFeatureConfig> {\n const body = {\n ENABLE_WORKFLOW: config.enableWorkflow ? '1' : '0',\n ENABLE_MESSAGE_CENTER: config.enableMessageCenter ? '1' : '0'\n };\n return this.http.post(`${ModuleAPI.system}/sys/config/saveData`, body).pipe(\n map((res: any) => this.fromResponse(res?.result || body)),\n tap(value => this.set(value))\n );\n }\n\n current(): AppFeatureConfig | null {\n return this.settings.getData(AppFeatureConfigKey) || null;\n }\n\n redirectHome() {\n this.router.navigateByUrl('/home');\n }\n\n private set(config: AppFeatureConfig) {\n this.settings.setData(AppFeatureConfigKey, config);\n }\n\n private fromResponse(data: any): AppFeatureConfig {\n return {\n enableWorkflow: this.toBool(data?.ENABLE_WORKFLOW, true),\n enableMessageCenter: this.toBool(data?.ENABLE_MESSAGE_CENTER, true)\n };\n }\n\n private defaults(): AppFeatureConfig {\n return {\n enableWorkflow: true,\n enableMessageCenter: true\n };\n }\n\n private toBool(value: any, defaultValue: boolean): boolean {\n if (value === undefined || value === null || value === '') {\n return defaultValue;\n }\n return value === true || value === 1 || value === '1' || `${value}`.toLowerCase() === 'true';\n }\n}\n","import { inject } from '@angular/core';\nimport { CanActivateFn } from '@angular/router';\nimport { map } from 'rxjs/operators';\nimport { AppFeatureConfigService } from './app-feature-config.service';\n\nexport const workflowFeatureGuard: CanActivateFn = () => {\n const service = inject(AppFeatureConfigService);\n return service.load().pipe(\n map(config => {\n if (!config.enableWorkflow) {\n service.redirectHome();\n return false;\n }\n return true;\n })\n );\n};\n\nexport const messageFeatureGuard: CanActivateFn = () => {\n const service = inject(AppFeatureConfigService);\n return service.load().pipe(\n map(config => {\n if (!config.enableMessageCenter) {\n service.redirectHome();\n return false;\n }\n return true;\n })\n );\n};\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["zorroZhCN","dfZhCn","delonZhCn","zorroZhTW","dfZhTw","delonZhTw","zorroEnUS","dfEn","delonEnUS","map","catchError","i1"],"mappings":"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"}
1
+ {"version":3,"file":"core.mjs","sources":["../../../../packages/runtime/core/i18n/i18n.service.ts","../../../../packages/runtime/core/runtime-core.tokens.ts","../../../../packages/runtime/core/net/helper.ts","../../../../packages/runtime/core/net/refresh-token.ts","../../../../packages/runtime/core/net/default.interceptor.ts","../../../../packages/runtime/core/startup/startup.service.ts","../../../../packages/runtime/core/start-default.guard.ts","../../../../packages/runtime/core/app-feature-config.service.ts","../../../../packages/runtime/core/app-feature.guard.ts","../../../../packages/runtime/core/core.ts"],"sourcesContent":["\nimport { Platform } from '@angular/cdk/platform';\nimport { registerLocaleData } from '@angular/common';\nimport ngEn from '@angular/common/locales/en';\nimport ngZh from '@angular/common/locales/zh';\nimport ngZhTw from '@angular/common/locales/zh-Hant';\nimport { Injectable, inject } from '@angular/core';\nimport {\n DelonLocaleService,\n en_US as delonEnUS,\n SettingsService,\n zh_CN as delonZhCn,\n zh_TW as delonZhTw,\n _HttpClient,\n AlainI18nBaseService\n} from '@delon/theme';\nimport { AlainConfigService } from '@delon/util/config';\nimport { enUS as dfEn, zhCN as dfZhCn, zhTW as dfZhTw } from 'date-fns/locale';\nimport { NzSafeAny } from 'ng-zorro-antd/core/types';\nimport { en_US as zorroEnUS, NzI18nService, zh_CN as zorroZhCN, zh_TW as zorroZhTW } from 'ng-zorro-antd/i18n';\nimport { Observable } from 'rxjs';\n\ninterface LangConfigData {\n abbr: string;\n text: string;\n ng: NzSafeAny;\n zorro: NzSafeAny;\n date: NzSafeAny;\n delon: NzSafeAny;\n}\n\nconst DEFAULT = 'zh-CN';\nconst LANGS: Record<string, LangConfigData> = {\n 'zh-CN': {\n text: '简体中文',\n ng: ngZh,\n zorro: zorroZhCN,\n date: dfZhCn,\n delon: delonZhCn,\n abbr: '🇨🇳'\n },\n 'zh-TW': {\n text: '繁体中文',\n ng: ngZhTw,\n zorro: zorroZhTW,\n date: dfZhTw,\n delon: delonZhTw,\n abbr: '🇭🇰'\n },\n 'en-US': {\n text: 'English',\n ng: ngEn,\n zorro: zorroEnUS,\n date: dfEn,\n delon: delonEnUS,\n abbr: '🇬🇧'\n }\n};\n\n@Injectable({ providedIn: 'root' })\nexport class I18NService extends AlainI18nBaseService {\n private readonly http = inject(_HttpClient);\n private readonly settings = inject(SettingsService);\n private readonly nzI18nService = inject(NzI18nService);\n private readonly delonLocaleService = inject(DelonLocaleService);\n private readonly platform = inject(Platform);\n\n protected override _defaultLang = DEFAULT;\n private _langs = Object.keys(LANGS).map(code => {\n const item = LANGS[code];\n return { code, text: item.text, abbr: item.abbr };\n });\n\n constructor(cogSrv: AlainConfigService) {\n super(cogSrv);\n\n const defaultLang = this.getDefaultLang();\n this._defaultLang = this._langs.findIndex(w => w.code === defaultLang) === -1 ? DEFAULT : defaultLang;\n }\n\n private getDefaultLang(): string {\n if (!this.platform.isBrowser) {\n return DEFAULT;\n }\n if (this.settings.layout.lang) {\n return this.settings.layout.lang;\n }\n let res = (navigator.languages ? navigator.languages[0] : null) || navigator.language;\n const arr = res.split('-');\n return arr.length <= 1 ? res : `${arr[0]}-${arr[1].toUpperCase()}`;\n }\n\n loadLangData(lang: string): Observable<NzSafeAny> {\n return this.http.get(`./assets/tmp/i18n/${lang}.json`);\n }\n\n use(lang: string, data: Record<string, unknown>): void {\n if (this._currentLang === lang) return;\n\n this._data = this.flatData(data, []);\n\n const item = LANGS[lang];\n registerLocaleData(item.ng);\n this.nzI18nService.setLocale(item.zorro);\n this.nzI18nService.setDateLocale(item.date);\n this.delonLocaleService.setLocale(item.delon);\n this._currentLang = lang;\n\n this._change$.next(lang);\n }\n\n getLangs(): Array<{ code: string; text: string; abbr: string }> {\n return this._langs;\n }\n}\n","import { InjectionToken } from '@angular/core';\n\nexport interface RuntimeCoreEnvironment {\n production: boolean;\n useHash: boolean;\n api: {\n baseUrl: string;\n licenseUrl?: string;\n flyUrl: string;\n preRequest?: string;\n mockToken?: string;\n refreshTokenEnabled?: boolean;\n refreshTokenType?: string;\n };\n modules?: unknown[];\n config?: unknown;\n configFile?: string;\n}\n\nexport const RUNTIME_CORE_ENVIRONMENT = new InjectionToken<RuntimeCoreEnvironment>('RUNTIME_CORE_ENVIRONMENT', {\n providedIn: 'root',\n factory: () => ({\n production: false,\n useHash: false,\n api: {\n baseUrl: '',\n licenseUrl: '',\n flyUrl: '',\n preRequest: '',\n mockToken: '',\n refreshTokenEnabled: true,\n refreshTokenType: 'auth-refresh',\n },\n modules: [],\n config: null,\n configFile: 'development.json',\n }),\n});\n\n","import { HttpHeaders, HttpResponseBase, HttpRequest } from '@angular/common/http';\nimport { Injector, inject } from '@angular/core';\nimport { Router } from '@angular/router';\nimport { DA_SERVICE_TOKEN, ITokenService } from '@delon/auth';\nimport { ALAIN_I18N_TOKEN, SettingsService } from '@delon/theme';\nimport { NzNotificationService } from 'ng-zorro-antd/notification';\nimport { AppCustomerId, AppSetId } from '@ebuilding/base/shared.var/shared.variable';\nimport { Gram_App_Type } from '@ebuilding/base/shared.var/shared.constant';\nimport { RUNTIME_CORE_ENVIRONMENT } from '../runtime-core.tokens';\n\nexport interface ReThrowHttpError {\n body: any;\n _throw: true;\n}\n\nexport const CODEMESSAGE: Record<number, string> = {\n 200: '服务器成功返回请求的数据。',\n 201: '新建或修改数据成功。',\n 202: '一个请求已经进入后台排队(异步任务)。',\n 204: '删除数据成功。',\n 400: '发出的请求有错误,服务器没有进行新建或修改数据的操作。',\n 401: '用户没有权限(令牌、用户名、密码错误)。',\n 403: '用户得到授权,但是访问是被禁止的。',\n 404: '发出的请求针对的是不存在的记录,服务器没有进行操作。',\n 406: '请求的格式不可得。',\n 410: '请求的资源被永久删除,且不会再得到的。',\n 422: '当创建一个对象时,发生一个验证错误。',\n 500: '服务器发生错误,请检查服务器。',\n 502: '网关错误。',\n 503: '服务不可用,服务器暂时过载或维护。',\n 504: '网关超时。'\n};\n\n\nexport function goTo(injector: Injector, url: string): void {\n setTimeout(() => injector.get(Router).navigateByUrl(url));\n}\n\nexport function toLogin(injector: Injector): void {\n //injector.get(NzNotificationService).error(`未登录或登录已过期,请重新登录。`, ``);\n goTo(injector, injector.get(DA_SERVICE_TOKEN).login_url!);\n}\n\nexport function getAdditionalHeaders(req: HttpRequest<any>, injector: Injector): Record<string, string> {\n const res: Record<string, string> = {};\n const environment = injector.get(RUNTIME_CORE_ENVIRONMENT);\n\n const tokenSrv = injector.get(DA_SERVICE_TOKEN);\n const token = tokenSrv.get()?.token;\n\n const settingSrv = injector.get(SettingsService);\n\n const lang = inject(ALAIN_I18N_TOKEN).currentLang;\n if (!req?.headers?.has('Accept-Language') && lang) {\n res['Accept-Language'] = lang;\n }\n const appType: any = settingSrv.getData(Gram_App_Type);\n if (token) {\n if (req.url.indexOf('airservice-') > 0) {\n res['x-auth-token'] = environment.api.mockToken;\n }\n\n const eId: any = settingSrv.getData(AppSetId);\n res['X-Access-Token'] = token;\n res['e-id'] = eId!! ? eId : '';\n res['customerId'] = settingSrv.getData(AppCustomerId);\n\n }\n\n\n\n if (req.url.indexOf('auth/login') > 0) {\n if (appType == 'FLY') {\n res['x-auth-token'] = '';\n } else {\n res['X-Access-Token'] = '';\n res['e-id'] = '';\n }\n }\n if (req.url.indexOf('api/etalent/v1/upload') > 0) {\n const res2: { [name: string]: string } = {};\n res2['Authorization'] = '';\n res2['X-CSRF-Token'] = '';\n res2['X-Max'] = '';\n return res2;\n }\n\n return res;\n}\n\nexport function checkStatus(injector: Injector, ev: HttpResponseBase): void {\n if ((ev.status >= 200 && ev.status < 300) || ev.status === 401) {\n return;\n }\n\n const errortext = CODEMESSAGE[ev.status] || ev.statusText;\n injector.get(NzNotificationService).error(`请求错误 ${ev.status}: ${ev.url}`, errortext);\n}\n","import { HttpClient, HttpHandlerFn, HttpRequest, HttpResponseBase } from '@angular/common/http';\nimport { EnvironmentProviders, Injector, inject, provideAppInitializer } from '@angular/core';\nimport { DA_SERVICE_TOKEN } from '@delon/auth';\nimport { BehaviorSubject, Observable, catchError, filter, switchMap, take, throwError } from 'rxjs';\n\nimport { toLogin } from './helper';\n\nlet refreshToking = false;\nlet refreshToken$: BehaviorSubject<any> = new BehaviorSubject<any>(null);\n\n/**\n * 重新附加新 Token 信息\n *\n * > 由于已经发起的请求,不会再走一遍 `@delon/auth` 因此需要结合业务情况重新附加新的 Token\n */\nfunction reAttachToken(injector: Injector, req: HttpRequest<any>): HttpRequest<any> {\n const token = injector.get(DA_SERVICE_TOKEN).get()?.token;\n return req.clone({\n setHeaders: {\n token: `Bearer ${token}`\n }\n });\n}\n\nfunction refreshTokenRequest(injector: Injector): Observable<any> {\n const model = injector.get(DA_SERVICE_TOKEN).get();\n return injector.get(HttpClient).post(`/api/auth/refresh`, { headers: { refresh_token: model?.['refresh_token'] || '' } });\n}\n\n/**\n * 刷新Token方式一:使用 401 重新刷新 Token\n */\nexport function tryRefreshToken(injector: Injector, ev: HttpResponseBase, req: HttpRequest<any>, next: HttpHandlerFn): Observable<any> {\n // 1、若请求为刷新Token请求,表示来自刷新Token可以直接跳转登录页\n if ([`/api/auth/refresh`].some(url => req.url.includes(url))) {\n toLogin(injector);\n return throwError(() => ev);\n }\n // 2、如果 `refreshToking` 为 `true` 表示已经在请求刷新 Token 中,后续所有请求转入等待状态,直至结果返回后再重新发起请求\n if (refreshToking) {\n return refreshToken$.pipe(\n filter(v => !!v),\n take(1),\n switchMap(() => next(reAttachToken(injector, req)))\n );\n }\n // 3、尝试调用刷新 Token\n refreshToking = true;\n refreshToken$.next(null);\n\n return refreshTokenRequest(injector).pipe(\n switchMap(res => {\n // 通知后续请求继续执行\n refreshToking = false;\n refreshToken$.next(res);\n // 重新保存新 token\n injector.get(DA_SERVICE_TOKEN).set(res);\n // 重新发起请求\n return next(reAttachToken(injector, req));\n }),\n catchError(err => {\n refreshToking = false;\n toLogin(injector);\n return throwError(() => err);\n })\n );\n}\n\nfunction buildAuthRefresh(injector: Injector): void {\n const tokenSrv = injector.get(DA_SERVICE_TOKEN);\n tokenSrv.refresh\n .pipe(\n filter(() => !refreshToking),\n switchMap(res => {\n refreshToking = true;\n return refreshTokenRequest(injector);\n })\n )\n .subscribe({\n next: res => {\n // TODO: Mock expired value\n res.expired = +new Date() + 1000 * 60 * 5;\n refreshToking = false;\n tokenSrv.set(res);\n },\n error: () => toLogin(injector)\n });\n}\n\n/**\n * 刷新Token方式二:使用 `@delon/auth` 的 `refresh` 接口,需要在 `app.config.ts` 中注册 `provideBindAuthRefresh`\n */\nexport function provideBindAuthRefresh(): EnvironmentProviders[] {\n return [\n provideAppInitializer(() => {\n const initializerFn = (\n (injector: Injector) => () =>\n buildAuthRefresh(injector)\n )(inject(Injector));\n return initializerFn();\n })\n ];\n}\n","import {\n HttpErrorResponse, HttpHandlerFn, HttpInterceptorFn, HttpRequest, HttpResponseBase,\n HttpResponse, HttpHeaders\n} from '@angular/common/http';\nimport { Injector, inject } from '@angular/core';\nimport { IGNORE_BASE_URL } from '@delon/theme';\nimport { Observable, of, throwError, mergeMap, catchError } from 'rxjs';\nimport { NzMessageService } from 'ng-zorro-antd/message';\nimport { ReThrowHttpError, checkStatus, getAdditionalHeaders, toLogin } from './helper';\nimport { RUNTIME_CORE_ENVIRONMENT } from '../runtime-core.tokens';\n\nfunction handleData(injector: Injector, ev: HttpResponseBase, req: HttpRequest<any>, next: HttpHandlerFn): Observable<any> {\n const msg = injector.get(NzMessageService);\n checkStatus(injector, ev);\n\n switch (ev.status) {\n case 200:\n if (ev instanceof HttpResponse) {\n const body: any = ev.body;\n const contentDisposition = ev.headers.get('content-disposition');\n const isDownload = /attachment/i.test(contentDisposition || '')\n || body?.type === 'application/vnd.ms-excel'\n || body?.type?.includes('application/vnd.openxmlformats-officedocument.spreadsheetml.sheet');\n\n if (body && isDownload) {\n // ❗建议你在此处引入并注入下载服务\n // const downloadService = injector.get(YourDownloadService);\n // downloadService.download(ev); \n download(ev);\n } else {\n if (body?.code === '1001') {\n toLogin(injector);\n throw new Error(body.message);\n } else if (body?.code === '99999') {\n msg.error('上传的license文件不合规,请认证后再上传');\n return of(new HttpResponse({ body }));\n } else {\n if (body?.error) {\n return throwError(() => ({ error: body.error }));\n }\n if (body?.code && Number(body.code) !== 200) {\n msg.error(body.message);\n }\n if (body?.data !== undefined && Number(body.code) === 200) {\n return of(new HttpResponse({ body }));\n }\n }\n }\n }\n break;\n\n case 401:\n if (ev.url && ev.url.indexOf('/sys/module') < 0) {\n const msgText = ev['error']?.['message'];\n if (msgText && msgText !== 'token非法无效!' && msgText !== 'Token失效,请重新登录!') {\n // const authService = injector.get(AuthService);\n // authService.authErrorSubject.next(msgText);\n toLogin(injector);\n } else {\n toLogin(injector);\n }\n } else {\n toLogin(injector);\n }\n break;\n\n case 403:\n case 404:\n case 500:\n // 可跳转到异常页面,例如:\n // goTo(injector, `/exception/${ev.status}?url=${req.urlWithParams}`);\n break;\n\n default:\n if (ev instanceof HttpErrorResponse) {\n console.warn('未可知错误,大部分是由于后端不支持跨域CORS或无效配置引起', ev);\n }\n break;\n }\n\n if (ev instanceof HttpErrorResponse) {\n return throwError(() => ev);\n } else if ((ev as unknown as ReThrowHttpError)._throw === true) {\n return throwError(() => (ev as unknown as ReThrowHttpError).body);\n } else {\n return of(ev);\n }\n}\n\nexport const defaultInterceptor: HttpInterceptorFn = (req, next) => {\n const injector = inject(Injector);\n const environment = inject(RUNTIME_CORE_ENVIRONMENT);\n\n let url = req.url;\n if (!req.context.get(IGNORE_BASE_URL) && !url.startsWith('https://') && !url.startsWith('http://') &&\n url.indexOf('assets') < 0 &&\n url.indexOf('api/etalent/v1/upload') < 0) {\n const { baseUrl, flyUrl } = environment.api;\n if (url.indexOf('flv/index') > 0) {\n }\n else if (url.indexOf('airservice-') > 0 || url.indexOf('airadapter-') > 0) {\n url = flyUrl + (flyUrl.endsWith('/') && url.startsWith('/') ? url.substring(1) : url);\n } else {\n url = baseUrl + (baseUrl.endsWith('/') && url.startsWith('/') ? url.substring(1) : url);\n }\n }\n let headers = req.headers;\n const shouldAddToken = !url.includes('flv/index/api/whep') && !url.includes('auth/login');\n if (shouldAddToken) {\n const additional = getAdditionalHeaders(req, injector);\n for (const k of Object.keys(additional)) {\n headers = headers.set(k, additional[k]);\n }\n } else {\n headers = new HttpHeaders();\n }\n\n const newReq = req.clone({\n url,\n headers,\n responseType: url.indexOf('export') > 0 ? 'blob' : null\n });\n\n return next(newReq).pipe(\n mergeMap(ev => {\n if (ev instanceof HttpResponseBase) {\n return handleData(injector, ev, newReq, next);\n }\n return of(ev);\n }),\n catchError((err: HttpErrorResponse) => handleData(injector, err, newReq, next)) // ✅ 必须保留\n );\n};\n\nfunction download(ev: HttpResponse<Blob>) {\n const data = ev.body;\n const headers = ev.headers;\n\n let fileName = 'download.xls';\n const contentDisposition = headers.get('Content-Disposition') || headers.get('content-disposition');\n if (contentDisposition) {\n const matches = /filename=([^;]+)/.exec(contentDisposition);\n if (matches?.[1]) {\n fileName = decodeURIComponent(matches[1].replace(/['\"]/g, ''));\n }\n }\n\n executeDownload(data, fileName);\n}\n\nfunction executeDownload(data: any, fileName: string) {\n if (!data) return;\n\n const url = window.URL.createObjectURL(new Blob([data]));\n const link = document.createElement('a');\n link.style.display = 'none';\n link.href = url;\n link.setAttribute('download', fileName);\n document.body.appendChild(link);\n link.click();\n document.body.removeChild(link);\n window.URL.revokeObjectURL(url);\n}\n","import { HttpClient } from '@angular/common/http';\nimport { EnvironmentProviders, Injectable, Provider, inject, provideAppInitializer } from '@angular/core';\nimport { Router } from '@angular/router';\nimport { ACLService } from '@delon/acl';\nimport { DA_SERVICE_TOKEN } from '@delon/auth';\nimport { ALAIN_I18N_TOKEN, MenuService, SettingsService, TitleService, _HttpClient } from '@delon/theme';\nimport { NzSafeAny } from 'ng-zorro-antd/core/types';\nimport { Observable, zip, of, catchError, map, switchMap, timeout } from 'rxjs';\nimport _ from 'lodash';\nimport { I18NService } from '../i18n/i18n.service';\nimport { initData } from '@ebuilding/base/shared.util/comm.menu';\nimport { ModuleAPI, Gram_App_Module } from '@ebuilding/base/shared.var/shared.constant';\nimport { RUNTIME_CORE_ENVIRONMENT } from '../runtime-core.tokens';\n\n/**\n * Used for application startup\n * Generally used to get the basic data of the application, like: Menu Data, User Data, etc.\n */\nexport function provideStartup(): Array<Provider | EnvironmentProviders> {\n return [\n StartupService,\n provideAppInitializer(() => {\n const initializerFn = (\n (startupService: StartupService) => () =>\n startupService.load()\n )(inject(StartupService));\n return initializerFn();\n })\n ];\n}\n\n@Injectable()\nexport class StartupService {\n private menuService = inject(MenuService);\n private settingService = inject(SettingsService);\n private aclService = inject(ACLService);\n private titleService = inject(TitleService);\n private httpClient = inject(HttpClient);\n private http = inject(_HttpClient);\n private router = inject(Router);\n private i18n = inject<I18NService>(ALAIN_I18N_TOKEN);\n private tokenSrv = inject(DA_SERVICE_TOKEN);\n private environment = inject(RUNTIME_CORE_ENVIRONMENT);\n load(): Observable<void> {\n const configFile = this.environment.configFile || 'development.json';\n return this.http.get(`assets/config/${configFile}?rd=${Math.random()}`).pipe(\n switchMap((configData: any) => {\n this.environment.config = configData;\n this.environment.useHash = configData.useHash;\n this.environment.production = configData.production;\n this.environment.api.baseUrl = configData.baseUrl;\n this.environment.api.flyUrl = configData.flyUrl;\n this.environment.api.licenseUrl = configData.licenseUrl;\n this.environment.api.mockToken = configData.mockToken;\n this.environment.api.preRequest = configData.preRequest;\n\n const defaultLang = this.i18n.defaultLang;\n\n return zip(\n this.getModule(),\n this.httpClient.get(`assets/tmp/i18n/${defaultLang}.json?rd=${Math.random()}`),\n this.httpClient.get(`assets/tmp/app-data.json?rd=${Math.random()}`)\n ).pipe(\n timeout(10000),\n map(([appModule, langData, appData]: [any, any, any]) => {\n this.i18n.use(defaultLang, langData);\n\n const res = appData as NzSafeAny;\n this.settingService.setApp(res.app);\n this.aclService.setFull(false);\n\n let listRole: any[] = [];\n const token: any = this.tokenSrv.get();\n if (token?.userInfo?.listRole) {\n listRole = token.userInfo.listRole;\n }\n this.aclService.setRole(listRole);\n\n let menuData: any[] = [];\n if (appModule?.result?.length > 0) {\n menuData = initData(appModule.result);\n }\n this.menuService.add(res.menu);\n this.menuService.resume();\n this.settingService.setData(Gram_App_Module, _.cloneDeep(menuData));\n\n\n this.titleService.default = '';\n this.titleService.suffix = res.app.name;\n }),\n catchError(res => {\n console.warn(`StartupService.load: Network request failed`, res);\n // setTimeout(() => this.router.navigateByUrl(`/exception/500`));\n return of(); // 返回空 Observable<void>\n })\n );\n }),\n catchError(res => {\n console.warn(`StartupService.load: App initialization failed`, res);\n return of(void 0);\n })\n );\n }\n\n\n getModule() {\n const token: any = this.tokenSrv.get()?.token;\n if (token) {\n return this.http.post(`${ModuleAPI.user}/user/sys/module`);\n } else {\n return of(null);\n }\n }\n}\n","\nimport { inject } from '@angular/core';\nimport { Router, CanActivateFn } from '@angular/router';\nimport { SettingsService } from '@delon/theme';\nimport { DA_SERVICE_TOKEN, ITokenService } from '@delon/auth';\nimport { Gram_Platform } from '@ebuilding/base/shared.var/shared.constant';\n\nexport const startDefaultGuard: CanActivateFn = (_route, state) => {\n const router = inject(Router);\n const settingSrv = inject(SettingsService);\n const tokenSrv = inject<ITokenService>(DA_SERVICE_TOKEN);\n const platform: any = settingSrv.getData(Gram_Platform);\n const token: any = tokenSrv.get();\n\n if (token && token?.token) {\n } else {\n return router.parseUrl('/auth/login');\n }\n\n if ((token?.forceChangePwd === true || token?.userInfo?.forceChangePwd === true) && state.url !== '/admin/change-password') {\n return router.parseUrl('/admin/change-password');\n }\n\n if (platform == \"DEFAULT\") {\n return true;\n }\n return router.parseUrl('/exception');\n};\n","/**\n * 兼容运行端原有导入路径,实际实现统一由 base/shared.srv 提供。\n */\nexport {\n AppFeatureConfigKey,\n AppFeatureConfigService,\n} from '@ebuilding/base/shared.srv/app-feature-config.service';\nexport type { AppFeatureConfig } from '@ebuilding/base/shared.srv/app-feature-config.service';\n","import { inject } from '@angular/core';\nimport { CanActivateFn } from '@angular/router';\nimport { map } from 'rxjs/operators';\nimport { AppFeatureConfigService } from './app-feature-config.service';\n\nexport const workflowFeatureGuard: CanActivateFn = () => {\n const service = inject(AppFeatureConfigService);\n return service.refresh().pipe(\n map(config => {\n if (!config.enableWorkflow) {\n service.redirectHome();\n return false;\n }\n return true;\n })\n );\n};\n\nexport const messageFeatureGuard: CanActivateFn = () => {\n const service = inject(AppFeatureConfigService);\n return service.refresh().pipe(\n map(config => {\n if (!config.enableMessageCenter) {\n service.redirectHome();\n return false;\n }\n return true;\n })\n );\n};\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["zorroZhCN","dfZhCn","delonZhCn","zorroZhTW","dfZhTw","delonZhTw","zorroEnUS","dfEn","delonEnUS","map"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;AA+BA,MAAM,OAAO,GAAG,OAAO;AACvB,MAAM,KAAK,GAAmC;AAC5C,IAAA,OAAO,EAAE;AACP,QAAA,IAAI,EAAE,MAAM;AACZ,QAAA,EAAE,EAAE,IAAI;AACR,QAAA,KAAK,EAAEA,OAAS;AAChB,QAAA,IAAI,EAAEC,IAAM;AACZ,QAAA,KAAK,EAAEC,KAAS;AAChB,QAAA,IAAI,EAAE;AACP,KAAA;AACD,IAAA,OAAO,EAAE;AACP,QAAA,IAAI,EAAE,MAAM;AACZ,QAAA,EAAE,EAAE,MAAM;AACV,QAAA,KAAK,EAAEC,OAAS;AAChB,QAAA,IAAI,EAAEC,IAAM;AACZ,QAAA,KAAK,EAAEC,KAAS;AAChB,QAAA,IAAI,EAAE;AACP,KAAA;AACD,IAAA,OAAO,EAAE;AACP,QAAA,IAAI,EAAE,SAAS;AACf,QAAA,EAAE,EAAE,IAAI;AACR,QAAA,KAAK,EAAEC,OAAS;AAChB,QAAA,IAAI,EAAEC,IAAI;AACV,QAAA,KAAK,EAAEC,KAAS;AAChB,QAAA,IAAI,EAAE;AACP;CACF;AAGK,MAAO,WAAY,SAAQ,oBAAoB,CAAA;AAClC,IAAA,IAAI,GAAG,MAAM,CAAC,WAAW,CAAC;AAC1B,IAAA,QAAQ,GAAG,MAAM,CAAC,eAAe,CAAC;AAClC,IAAA,aAAa,GAAG,MAAM,CAAC,aAAa,CAAC;AACrC,IAAA,kBAAkB,GAAG,MAAM,CAAC,kBAAkB,CAAC;AAC/C,IAAA,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC;IAEzB,YAAY,GAAG,OAAO;AACjC,IAAA,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,IAAI,IAAG;AAC7C,QAAA,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC;AACxB,QAAA,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE;AACnD,KAAC,CAAC;AAEF,IAAA,WAAA,CAAY,MAA0B,EAAA;QACpC,KAAK,CAAC,MAAM,CAAC;AAEb,QAAA,MAAM,WAAW,GAAG,IAAI,CAAC,cAAc,EAAE;AACzC,QAAA,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,KAAK,WAAW,CAAC,KAAK,CAAC,CAAC,GAAG,OAAO,GAAG,WAAW;;IAG/F,cAAc,GAAA;AACpB,QAAA,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,SAAS,EAAE;AAC5B,YAAA,OAAO,OAAO;;QAEhB,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,EAAE;AAC7B,YAAA,OAAO,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI;;QAElC,IAAI,GAAG,GAAG,CAAC,SAAS,CAAC,SAAS,GAAG,SAAS,CAAC,SAAS,CAAC,CAAC,CAAC,GAAG,IAAI,KAAK,SAAS,CAAC,QAAQ;QACrF,MAAM,GAAG,GAAG,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC;QAC1B,OAAO,GAAG,CAAC,MAAM,IAAI,CAAC,GAAG,GAAG,GAAG,CAAA,EAAG,GAAG,CAAC,CAAC,CAAC,CAAA,CAAA,EAAI,GAAG,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,CAAA,CAAE;;AAGpE,IAAA,YAAY,CAAC,IAAY,EAAA;QACvB,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAqB,kBAAA,EAAA,IAAI,CAAO,KAAA,CAAA,CAAC;;IAGxD,GAAG,CAAC,IAAY,EAAE,IAA6B,EAAA;AAC7C,QAAA,IAAI,IAAI,CAAC,YAAY,KAAK,IAAI;YAAE;QAEhC,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,EAAE,CAAC;AAEpC,QAAA,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC;AACxB,QAAA,kBAAkB,CAAC,IAAI,CAAC,EAAE,CAAC;QAC3B,IAAI,CAAC,aAAa,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC;QACxC,IAAI,CAAC,aAAa,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC;QAC3C,IAAI,CAAC,kBAAkB,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC;AAC7C,QAAA,IAAI,CAAC,YAAY,GAAG,IAAI;AAExB,QAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC;;IAG1B,QAAQ,GAAA;QACN,OAAO,IAAI,CAAC,MAAM;;wGApDT,WAAW,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,kBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA;AAAX,IAAA,OAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAW,cADE,MAAM,EAAA,CAAA;;4FACnB,WAAW,EAAA,UAAA,EAAA,CAAA;kBADvB,UAAU;mBAAC,EAAE,UAAU,EAAE,MAAM,EAAE;;;MCxCrB,wBAAwB,GAAG,IAAI,cAAc,CAAyB,0BAA0B,EAAE;AAC7G,IAAA,UAAU,EAAE,MAAM;AAClB,IAAA,OAAO,EAAE,OAAO;AACd,QAAA,UAAU,EAAE,KAAK;AACjB,QAAA,OAAO,EAAE,KAAK;AACd,QAAA,GAAG,EAAE;AACH,YAAA,OAAO,EAAE,EAAE;AACX,YAAA,UAAU,EAAE,EAAE;AACd,YAAA,MAAM,EAAE,EAAE;AACV,YAAA,UAAU,EAAE,EAAE;AACd,YAAA,SAAS,EAAE,EAAE;AACb,YAAA,mBAAmB,EAAE,IAAI;AACzB,YAAA,gBAAgB,EAAE,cAAc;AACjC,SAAA;AACD,QAAA,OAAO,EAAE,EAAE;AACX,QAAA,MAAM,EAAE,IAAI;AACZ,QAAA,UAAU,EAAE,kBAAkB;KAC/B,CAAC;AACH,CAAA;;ACtBM,MAAM,WAAW,GAA2B;AACjD,IAAA,GAAG,EAAE,eAAe;AACpB,IAAA,GAAG,EAAE,YAAY;AACjB,IAAA,GAAG,EAAE,qBAAqB;AAC1B,IAAA,GAAG,EAAE,SAAS;AACd,IAAA,GAAG,EAAE,6BAA6B;AAClC,IAAA,GAAG,EAAE,sBAAsB;AAC3B,IAAA,GAAG,EAAE,mBAAmB;AACxB,IAAA,GAAG,EAAE,4BAA4B;AACjC,IAAA,GAAG,EAAE,WAAW;AAChB,IAAA,GAAG,EAAE,qBAAqB;AAC1B,IAAA,GAAG,EAAE,oBAAoB;AACzB,IAAA,GAAG,EAAE,iBAAiB;AACtB,IAAA,GAAG,EAAE,OAAO;AACZ,IAAA,GAAG,EAAE,mBAAmB;AACxB,IAAA,GAAG,EAAE;CACN;AAGe,SAAA,IAAI,CAAC,QAAkB,EAAE,GAAW,EAAA;AAClD,IAAA,UAAU,CAAC,MAAM,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC;AAC3D;AAEM,SAAU,OAAO,CAAC,QAAkB,EAAA;;AAExC,IAAA,IAAI,CAAC,QAAQ,EAAE,QAAQ,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC,SAAU,CAAC;AAC3D;AAEgB,SAAA,oBAAoB,CAAC,GAAqB,EAAE,QAAkB,EAAA;IAC5E,MAAM,GAAG,GAA2B,EAAE;IACtC,MAAM,WAAW,GAAG,QAAQ,CAAC,GAAG,CAAC,wBAAwB,CAAC;IAE1D,MAAM,QAAQ,GAAG,QAAQ,CAAC,GAAG,CAAC,gBAAgB,CAAC;IAC/C,MAAM,KAAK,GAAG,QAAQ,CAAC,GAAG,EAAE,EAAE,KAAK;IAEnC,MAAM,UAAU,GAAG,QAAQ,CAAC,GAAG,CAAC,eAAe,CAAC;IAEhD,MAAM,IAAI,GAAG,MAAM,CAAC,gBAAgB,CAAC,CAAC,WAAW;AACjD,IAAA,IAAI,CAAC,GAAG,EAAE,OAAO,EAAE,GAAG,CAAC,iBAAiB,CAAC,IAAI,IAAI,EAAE;AACjD,QAAA,GAAG,CAAC,iBAAiB,CAAC,GAAG,IAAI;;IAE/B,MAAM,OAAO,GAAQ,UAAU,CAAC,OAAO,CAAC,aAAa,CAAC;IACtD,IAAI,KAAK,EAAE;QACT,IAAI,GAAG,CAAC,GAAG,CAAC,OAAO,CAAC,aAAa,CAAC,GAAG,CAAC,EAAE;YACtC,GAAG,CAAC,cAAc,CAAC,GAAG,WAAW,CAAC,GAAG,CAAC,SAAS;;QAGjD,MAAM,GAAG,GAAQ,UAAU,CAAC,OAAO,CAAC,QAAQ,CAAC;AAC7C,QAAA,GAAG,CAAC,gBAAgB,CAAC,GAAG,KAAK;AAC7B,QAAA,GAAG,CAAC,MAAM,CAAC,GAAG,GAAK,GAAG,GAAG,GAAG,EAAE;QAC9B,GAAG,CAAC,YAAY,CAAC,GAAG,UAAU,CAAC,OAAO,CAAC,aAAa,CAAC;;IAMvD,IAAI,GAAG,CAAC,GAAG,CAAC,OAAO,CAAC,YAAY,CAAC,GAAG,CAAC,EAAE;AACrC,QAAA,IAAI,OAAO,IAAI,KAAK,EAAE;AACpB,YAAA,GAAG,CAAC,cAAc,CAAC,GAAG,EAAE;;aACnB;AACL,YAAA,GAAG,CAAC,gBAAgB,CAAC,GAAG,EAAE;AAC1B,YAAA,GAAG,CAAC,MAAM,CAAC,GAAG,EAAE;;;IAGpB,IAAI,GAAG,CAAC,GAAG,CAAC,OAAO,CAAC,uBAAuB,CAAC,GAAG,CAAC,EAAE;QAChD,MAAM,IAAI,GAA+B,EAAE;AAC3C,QAAA,IAAI,CAAC,eAAe,CAAC,GAAG,EAAE;AAC1B,QAAA,IAAI,CAAC,cAAc,CAAC,GAAG,EAAE;AACzB,QAAA,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE;AAClB,QAAA,OAAO,IAAI;;AAGb,IAAA,OAAO,GAAG;AACZ;AAEgB,SAAA,WAAW,CAAC,QAAkB,EAAE,EAAoB,EAAA;IAClE,IAAI,CAAC,EAAE,CAAC,MAAM,IAAI,GAAG,IAAI,EAAE,CAAC,MAAM,GAAG,GAAG,KAAK,EAAE,CAAC,MAAM,KAAK,GAAG,EAAE;QAC9D;;AAGF,IAAA,MAAM,SAAS,GAAG,WAAW,CAAC,EAAE,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,UAAU;IACzD,QAAQ,CAAC,GAAG,CAAC,qBAAqB,CAAC,CAAC,KAAK,CAAC,CAAQ,KAAA,EAAA,EAAE,CAAC,MAAM,CAAA,EAAA,EAAK,EAAE,CAAC,GAAG,EAAE,EAAE,SAAS,CAAC;AACtF;;AC1FA,IAAI,aAAa,GAAG,KAAK;AACzB,IAAI,aAAa,GAAyB,IAAI,eAAe,CAAM,IAAI,CAAC;AAExE;;;;AAIG;AACH,SAAS,aAAa,CAAC,QAAkB,EAAE,GAAqB,EAAA;AAC9D,IAAA,MAAM,KAAK,GAAG,QAAQ,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC,GAAG,EAAE,EAAE,KAAK;IACzD,OAAO,GAAG,CAAC,KAAK,CAAC;AACf,QAAA,UAAU,EAAE;YACV,KAAK,EAAE,CAAU,OAAA,EAAA,KAAK,CAAE;AACzB;AACF,KAAA,CAAC;AACJ;AAEA,SAAS,mBAAmB,CAAC,QAAkB,EAAA;IAC7C,MAAM,KAAK,GAAG,QAAQ,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC,GAAG,EAAE;IAClD,OAAO,QAAQ,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,CAAmB,iBAAA,CAAA,EAAE,EAAE,OAAO,EAAE,EAAE,aAAa,EAAE,KAAK,GAAG,eAAe,CAAC,IAAI,EAAE,EAAE,EAAE,CAAC;AAC3H;AAEA;;AAEG;AACG,SAAU,eAAe,CAAC,QAAkB,EAAE,EAAoB,EAAE,GAAqB,EAAE,IAAmB,EAAA;;IAElH,IAAI,CAAC,mBAAmB,CAAC,CAAC,IAAI,CAAC,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,EAAE;QAC5D,OAAO,CAAC,QAAQ,CAAC;AACjB,QAAA,OAAO,UAAU,CAAC,MAAM,EAAE,CAAC;;;IAG7B,IAAI,aAAa,EAAE;AACjB,QAAA,OAAO,aAAa,CAAC,IAAI,CACvB,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAChB,IAAI,CAAC,CAAC,CAAC,EACP,SAAS,CAAC,MAAM,IAAI,CAAC,aAAa,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC,CAAC,CACpD;;;IAGH,aAAa,GAAG,IAAI;AACpB,IAAA,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC;IAExB,OAAO,mBAAmB,CAAC,QAAQ,CAAC,CAAC,IAAI,CACvC,SAAS,CAAC,GAAG,IAAG;;QAEd,aAAa,GAAG,KAAK;AACrB,QAAA,aAAa,CAAC,IAAI,CAAC,GAAG,CAAC;;QAEvB,QAAQ,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC;;QAEvC,OAAO,IAAI,CAAC,aAAa,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC;AAC3C,KAAC,CAAC,EACF,UAAU,CAAC,GAAG,IAAG;QACf,aAAa,GAAG,KAAK;QACrB,OAAO,CAAC,QAAQ,CAAC;AACjB,QAAA,OAAO,UAAU,CAAC,MAAM,GAAG,CAAC;KAC7B,CAAC,CACH;AACH;AAEA,SAAS,gBAAgB,CAAC,QAAkB,EAAA;IAC1C,MAAM,QAAQ,GAAG,QAAQ,CAAC,GAAG,CAAC,gBAAgB,CAAC;AAC/C,IAAA,QAAQ,CAAC;AACN,SAAA,IAAI,CACH,MAAM,CAAC,MAAM,CAAC,aAAa,CAAC,EAC5B,SAAS,CAAC,GAAG,IAAG;QACd,aAAa,GAAG,IAAI;AACpB,QAAA,OAAO,mBAAmB,CAAC,QAAQ,CAAC;AACtC,KAAC,CAAC;AAEH,SAAA,SAAS,CAAC;QACT,IAAI,EAAE,GAAG,IAAG;;AAEV,YAAA,GAAG,CAAC,OAAO,GAAG,CAAC,IAAI,IAAI,EAAE,GAAG,IAAI,GAAG,EAAE,GAAG,CAAC;YACzC,aAAa,GAAG,KAAK;AACrB,YAAA,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC;SAClB;AACD,QAAA,KAAK,EAAE,MAAM,OAAO,CAAC,QAAQ;AAC9B,KAAA,CAAC;AACN;AAEA;;AAEG;SACa,sBAAsB,GAAA;IACpC,OAAO;QACL,qBAAqB,CAAC,MAAK;YACzB,MAAM,aAAa,GAAG,CACpB,CAAC,QAAkB,KAAK,MACtB,gBAAgB,CAAC,QAAQ,CAAC,EAC5B,MAAM,CAAC,QAAQ,CAAC,CAAC;YACnB,OAAO,aAAa,EAAE;AACxB,SAAC;KACF;AACH;;AC3FA,SAAS,UAAU,CAAC,QAAkB,EAAE,EAAoB,EAAE,GAAqB,EAAE,IAAmB,EAAA;IACtG,MAAM,GAAG,GAAG,QAAQ,CAAC,GAAG,CAAC,gBAAgB,CAAC;AAC1C,IAAA,WAAW,CAAC,QAAQ,EAAE,EAAE,CAAC;AAEzB,IAAA,QAAQ,EAAE,CAAC,MAAM;AACf,QAAA,KAAK,GAAG;AACN,YAAA,IAAI,EAAE,YAAY,YAAY,EAAE;AAC9B,gBAAA,MAAM,IAAI,GAAQ,EAAE,CAAC,IAAI;gBACzB,MAAM,kBAAkB,GAAG,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,qBAAqB,CAAC;gBAChE,MAAM,UAAU,GAAG,aAAa,CAAC,IAAI,CAAC,kBAAkB,IAAI,EAAE;uBACzD,IAAI,EAAE,IAAI,KAAK;AACf,uBAAA,IAAI,EAAE,IAAI,EAAE,QAAQ,CAAC,mEAAmE,CAAC;AAE9F,gBAAA,IAAI,IAAI,IAAI,UAAU,EAAE;;;;oBAItB,QAAQ,CAAC,EAAE,CAAC;;qBACP;AACL,oBAAA,IAAI,IAAI,EAAE,IAAI,KAAK,MAAM,EAAE;wBACzB,OAAO,CAAC,QAAQ,CAAC;AACjB,wBAAA,MAAM,IAAI,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC;;AACxB,yBAAA,IAAI,IAAI,EAAE,IAAI,KAAK,OAAO,EAAE;AACjC,wBAAA,GAAG,CAAC,KAAK,CAAC,yBAAyB,CAAC;wBACpC,OAAO,EAAE,CAAC,IAAI,YAAY,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC;;yBAChC;AACL,wBAAA,IAAI,IAAI,EAAE,KAAK,EAAE;AACf,4BAAA,OAAO,UAAU,CAAC,OAAO,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC;;AAElD,wBAAA,IAAI,IAAI,EAAE,IAAI,IAAI,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,GAAG,EAAE;AAC3C,4BAAA,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC;;AAEzB,wBAAA,IAAI,IAAI,EAAE,IAAI,KAAK,SAAS,IAAI,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,GAAG,EAAE;4BACzD,OAAO,EAAE,CAAC,IAAI,YAAY,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC;;;;;YAK7C;AAEF,QAAA,KAAK,GAAG;AACN,YAAA,IAAI,EAAE,CAAC,GAAG,IAAI,EAAE,CAAC,GAAG,CAAC,OAAO,CAAC,aAAa,CAAC,GAAG,CAAC,EAAE;gBAC/C,MAAM,OAAO,GAAG,EAAE,CAAC,OAAO,CAAC,GAAG,SAAS,CAAC;gBACxC,IAAI,OAAO,IAAI,OAAO,KAAK,YAAY,IAAI,OAAO,KAAK,gBAAgB,EAAE;;;oBAGvE,OAAO,CAAC,QAAQ,CAAC;;qBACZ;oBACL,OAAO,CAAC,QAAQ,CAAC;;;iBAEd;gBACL,OAAO,CAAC,QAAQ,CAAC;;YAEnB;AAEF,QAAA,KAAK,GAAG;AACR,QAAA,KAAK,GAAG;AACR,QAAA,KAAK,GAAG;;;YAGN;AAEF,QAAA;AACE,YAAA,IAAI,EAAE,YAAY,iBAAiB,EAAE;AACnC,gBAAA,OAAO,CAAC,IAAI,CAAC,gCAAgC,EAAE,EAAE,CAAC;;YAEpD;;AAGJ,IAAA,IAAI,EAAE,YAAY,iBAAiB,EAAE;AACnC,QAAA,OAAO,UAAU,CAAC,MAAM,EAAE,CAAC;;AACtB,SAAA,IAAK,EAAkC,CAAC,MAAM,KAAK,IAAI,EAAE;QAC9D,OAAO,UAAU,CAAC,MAAO,EAAkC,CAAC,IAAI,CAAC;;SAC5D;AACL,QAAA,OAAO,EAAE,CAAC,EAAE,CAAC;;AAEjB;MAEa,kBAAkB,GAAsB,CAAC,GAAG,EAAE,IAAI,KAAI;AACjE,IAAA,MAAM,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC;AACjC,IAAA,MAAM,WAAW,GAAG,MAAM,CAAC,wBAAwB,CAAC;AAEpD,IAAA,IAAI,GAAG,GAAG,GAAG,CAAC,GAAG;IACjB,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,eAAe,CAAC,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,SAAS,CAAC;AAChG,QAAA,GAAG,CAAC,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC;QACzB,GAAG,CAAC,OAAO,CAAC,uBAAuB,CAAC,GAAG,CAAC,EAAE;QAC1C,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,WAAW,CAAC,GAAG;QAC3C,IAAI,GAAG,CAAC,OAAO,CAAC,WAAW,CAAC,GAAG,CAAC,EAAE;;AAE7B,aAAA,IAAI,GAAG,CAAC,OAAO,CAAC,aAAa,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC,OAAO,CAAC,aAAa,CAAC,GAAG,CAAC,EAAE;AACzE,YAAA,GAAG,GAAG,MAAM,IAAI,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC;;aAChF;AACL,YAAA,GAAG,GAAG,OAAO,IAAI,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC;;;AAG3F,IAAA,IAAI,OAAO,GAAG,GAAG,CAAC,OAAO;AACzB,IAAA,MAAM,cAAc,GAAG,CAAC,GAAG,CAAC,QAAQ,CAAC,oBAAoB,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,YAAY,CAAC;IACzF,IAAI,cAAc,EAAE;QAClB,MAAM,UAAU,GAAG,oBAAoB,CAAC,GAAG,EAAE,QAAQ,CAAC;QACtD,KAAK,MAAM,CAAC,IAAI,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE;AACvC,YAAA,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC,CAAC,CAAC;;;SAEpC;AACL,QAAA,OAAO,GAAG,IAAI,WAAW,EAAE;;AAG7B,IAAA,MAAM,MAAM,GAAG,GAAG,CAAC,KAAK,CAAC;QACvB,GAAG;QACH,OAAO;AACP,QAAA,YAAY,EAAE,GAAG,CAAC,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,MAAM,GAAG;AACpD,KAAA,CAAC;IAEF,OAAO,IAAI,CAAC,MAAM,CAAC,CAAC,IAAI,CACtB,QAAQ,CAAC,EAAE,IAAG;AACZ,QAAA,IAAI,EAAE,YAAY,gBAAgB,EAAE;YAClC,OAAO,UAAU,CAAC,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,IAAI,CAAC;;AAE/C,QAAA,OAAO,EAAE,CAAC,EAAE,CAAC;KACd,CAAC,EACF,UAAU,CAAC,CAAC,GAAsB,KAAK,UAAU,CAAC,QAAQ,EAAE,GAAG,EAAE,MAAM,EAAE,IAAI,CAAC,CAAC;KAChF;AACH;AAEA,SAAS,QAAQ,CAAC,EAAsB,EAAA;AACtC,IAAA,MAAM,IAAI,GAAG,EAAE,CAAC,IAAI;AACpB,IAAA,MAAM,OAAO,GAAG,EAAE,CAAC,OAAO;IAE1B,IAAI,QAAQ,GAAG,cAAc;AAC7B,IAAA,MAAM,kBAAkB,GAAG,OAAO,CAAC,GAAG,CAAC,qBAAqB,CAAC,IAAI,OAAO,CAAC,GAAG,CAAC,qBAAqB,CAAC;IACnG,IAAI,kBAAkB,EAAE;QACtB,MAAM,OAAO,GAAG,kBAAkB,CAAC,IAAI,CAAC,kBAAkB,CAAC;AAC3D,QAAA,IAAI,OAAO,GAAG,CAAC,CAAC,EAAE;AAChB,YAAA,QAAQ,GAAG,kBAAkB,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;;;AAIlE,IAAA,eAAe,CAAC,IAAI,EAAE,QAAQ,CAAC;AACjC;AAEA,SAAS,eAAe,CAAC,IAAS,EAAE,QAAgB,EAAA;AAClD,IAAA,IAAI,CAAC,IAAI;QAAE;AAEX,IAAA,MAAM,GAAG,GAAG,MAAM,CAAC,GAAG,CAAC,eAAe,CAAC,IAAI,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;IACxD,MAAM,IAAI,GAAG,QAAQ,CAAC,aAAa,CAAC,GAAG,CAAC;AACxC,IAAA,IAAI,CAAC,KAAK,CAAC,OAAO,GAAG,MAAM;AAC3B,IAAA,IAAI,CAAC,IAAI,GAAG,GAAG;AACf,IAAA,IAAI,CAAC,YAAY,CAAC,UAAU,EAAE,QAAQ,CAAC;AACvC,IAAA,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC;IAC/B,IAAI,CAAC,KAAK,EAAE;AACZ,IAAA,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC;AAC/B,IAAA,MAAM,CAAC,GAAG,CAAC,eAAe,CAAC,GAAG,CAAC;AACjC;;ACpJA;;;AAGG;SACa,cAAc,GAAA;IAC5B,OAAO;QACL,cAAc;QACd,qBAAqB,CAAC,MAAK;YACzB,MAAM,aAAa,GAAG,CACpB,CAAC,cAA8B,KAAK,MAClC,cAAc,CAAC,IAAI,EAAE,EACvB,MAAM,CAAC,cAAc,CAAC,CAAC;YACzB,OAAO,aAAa,EAAE;AACxB,SAAC;KACF;AACH;MAGa,cAAc,CAAA;AACjB,IAAA,WAAW,GAAG,MAAM,CAAC,WAAW,CAAC;AACjC,IAAA,cAAc,GAAG,MAAM,CAAC,eAAe,CAAC;AACxC,IAAA,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC;AAC/B,IAAA,YAAY,GAAG,MAAM,CAAC,YAAY,CAAC;AACnC,IAAA,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC;AAC/B,IAAA,IAAI,GAAG,MAAM,CAAC,WAAW,CAAC;AAC1B,IAAA,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC;AACvB,IAAA,IAAI,GAAG,MAAM,CAAc,gBAAgB,CAAC;AAC5C,IAAA,QAAQ,GAAG,MAAM,CAAC,gBAAgB,CAAC;AACnC,IAAA,WAAW,GAAG,MAAM,CAAC,wBAAwB,CAAC;IACtD,IAAI,GAAA;QACF,MAAM,UAAU,GAAG,IAAI,CAAC,WAAW,CAAC,UAAU,IAAI,kBAAkB;QACpE,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA,cAAA,EAAiB,UAAU,CAAA,IAAA,EAAO,IAAI,CAAC,MAAM,EAAE,CAAA,CAAE,CAAC,CAAC,IAAI,CAC1E,SAAS,CAAC,CAAC,UAAe,KAAI;AAC5B,YAAA,IAAI,CAAC,WAAW,CAAC,MAAM,GAAG,UAAU;YACpC,IAAI,CAAC,WAAW,CAAC,OAAO,GAAG,UAAU,CAAC,OAAO;YAC7C,IAAI,CAAC,WAAW,CAAC,UAAU,GAAG,UAAU,CAAC,UAAU;YACnD,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,OAAO,GAAG,UAAU,CAAC,OAAO;YACjD,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,MAAM,GAAG,UAAU,CAAC,MAAM;YAC/C,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,UAAU,GAAG,UAAU,CAAC,UAAU;YACvD,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,SAAS,GAAG,UAAU,CAAC,SAAS;YACrD,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,UAAU,GAAG,UAAU,CAAC,UAAU;AAEvD,YAAA,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW;YAEzC,OAAO,GAAG,CACR,IAAI,CAAC,SAAS,EAAE,EAChB,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,mBAAmB,WAAW,CAAA,SAAA,EAAY,IAAI,CAAC,MAAM,EAAE,CAAE,CAAA,CAAC,EAC9E,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAA+B,4BAAA,EAAA,IAAI,CAAC,MAAM,EAAE,CAAA,CAAE,CAAC,CACpE,CAAC,IAAI,CACJ,OAAO,CAAC,KAAK,CAAC,EACd,GAAG,CAAC,CAAC,CAAC,SAAS,EAAE,QAAQ,EAAE,OAAO,CAAkB,KAAI;gBACtD,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,WAAW,EAAE,QAAQ,CAAC;gBAEpC,MAAM,GAAG,GAAG,OAAoB;gBAChC,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC;AACnC,gBAAA,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,KAAK,CAAC;gBAE9B,IAAI,QAAQ,GAAU,EAAE;gBACxB,MAAM,KAAK,GAAQ,IAAI,CAAC,QAAQ,CAAC,GAAG,EAAE;AACtC,gBAAA,IAAI,KAAK,EAAE,QAAQ,EAAE,QAAQ,EAAE;AAC7B,oBAAA,QAAQ,GAAG,KAAK,CAAC,QAAQ,CAAC,QAAQ;;AAEpC,gBAAA,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,QAAQ,CAAC;gBAEjC,IAAI,QAAQ,GAAU,EAAE;gBACxB,IAAI,SAAS,EAAE,MAAM,EAAE,MAAM,GAAG,CAAC,EAAE;AACjC,oBAAA,QAAQ,GAAG,QAAQ,CAAC,SAAS,CAAC,MAAM,CAAC;;gBAEvC,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC;AAC9B,gBAAA,IAAI,CAAC,WAAW,CAAC,MAAM,EAAE;AACzB,gBAAA,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,eAAe,EAAE,CAAC,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;AAGnE,gBAAA,IAAI,CAAC,YAAY,CAAC,OAAO,GAAG,EAAE;gBAC9B,IAAI,CAAC,YAAY,CAAC,MAAM,GAAG,GAAG,CAAC,GAAG,CAAC,IAAI;AACzC,aAAC,CAAC,EACF,UAAU,CAAC,GAAG,IAAG;AACf,gBAAA,OAAO,CAAC,IAAI,CAAC,6CAA6C,EAAE,GAAG,CAAC;;AAEhE,gBAAA,OAAO,EAAE,EAAE,CAAC;aACb,CAAC,CACH;AACH,SAAC,CAAC,EACF,UAAU,CAAC,GAAG,IAAG;AACf,YAAA,OAAO,CAAC,IAAI,CAAC,gDAAgD,EAAE,GAAG,CAAC;AACnE,YAAA,OAAO,EAAE,CAAC,KAAK,CAAC,CAAC;SAClB,CAAC,CACH;;IAIH,SAAS,GAAA;QACP,MAAM,KAAK,GAAQ,IAAI,CAAC,QAAQ,CAAC,GAAG,EAAE,EAAE,KAAK;QAC7C,IAAI,KAAK,EAAE;AACT,YAAA,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAG,EAAA,SAAS,CAAC,IAAI,CAAkB,gBAAA,CAAA,CAAC;;aACrD;AACL,YAAA,OAAO,EAAE,CAAC,IAAI,CAAC;;;wGA9ER,cAAc,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA;4GAAd,cAAc,EAAA,CAAA;;4FAAd,cAAc,EAAA,UAAA,EAAA,CAAA;kBAD1B;;;MCxBY,iBAAiB,GAAkB,CAAC,MAAM,EAAE,KAAK,KAAI;AAC7D,IAAA,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC;AAC7B,IAAA,MAAM,UAAU,GAAG,MAAM,CAAC,eAAe,CAAC;AAC1C,IAAA,MAAM,QAAQ,GAAG,MAAM,CAAgB,gBAAgB,CAAC;IACxD,MAAM,QAAQ,GAAQ,UAAU,CAAC,OAAO,CAAC,aAAa,CAAC;AACvD,IAAA,MAAM,KAAK,GAAQ,QAAQ,CAAC,GAAG,EAAE;AAEjC,IAAA,IAAI,KAAK,IAAI,KAAK,EAAE,KAAK,EAAE;;SACpB;AACF,QAAA,OAAO,MAAM,CAAC,QAAQ,CAAC,aAAa,CAAC;;IAG1C,IAAI,CAAC,KAAK,EAAE,cAAc,KAAK,IAAI,IAAI,KAAK,EAAE,QAAQ,EAAE,cAAc,KAAK,IAAI,KAAK,KAAK,CAAC,GAAG,KAAK,wBAAwB,EAAE;AACvH,QAAA,OAAO,MAAM,CAAC,QAAQ,CAAC,wBAAwB,CAAC;;AAGrD,IAAA,IAAI,QAAQ,IAAI,SAAS,EAAE;AACtB,QAAA,OAAO,IAAI;;AAEhB,IAAA,OAAO,MAAM,CAAC,QAAQ,CAAC,YAAY,CAAC;AACzC;;AC3BA;;AAEG;;ACGI,MAAM,oBAAoB,GAAkB,MAAK;AACtD,IAAA,MAAM,OAAO,GAAG,MAAM,CAAC,uBAAuB,CAAC;IAC/C,OAAO,OAAO,CAAC,OAAO,EAAE,CAAC,IAAI,CAC3BC,KAAG,CAAC,MAAM,IAAG;AACX,QAAA,IAAI,CAAC,MAAM,CAAC,cAAc,EAAE;YAC1B,OAAO,CAAC,YAAY,EAAE;AACtB,YAAA,OAAO,KAAK;;AAEd,QAAA,OAAO,IAAI;KACZ,CAAC,CACH;AACH;AAEO,MAAM,mBAAmB,GAAkB,MAAK;AACrD,IAAA,MAAM,OAAO,GAAG,MAAM,CAAC,uBAAuB,CAAC;IAC/C,OAAO,OAAO,CAAC,OAAO,EAAE,CAAC,IAAI,CAC3BA,KAAG,CAAC,MAAM,IAAG;AACX,QAAA,IAAI,CAAC,MAAM,CAAC,mBAAmB,EAAE;YAC/B,OAAO,CAAC,YAAY,EAAE;AACtB,YAAA,OAAO,KAAK;;AAEd,QAAA,OAAO,IAAI;KACZ,CAAC,CACH;AACH;;AC7BA;;AAEG;;;;"}